From db738ffbb2299c0a156355a6be85b8e5734a3838 Mon Sep 17 00:00:00 2001 From: Changsen XU Date: Fri, 3 Jan 2020 13:37:13 +0800 Subject: [PATCH 1/2] Fixed --- bin/j2py | 6 +- .../java2python/__init__.py | 5 + .../java2python/compiler/__init__.py | 37 + .../java2python/compiler/block.py | 38 + .../java2python/compiler/template.py | 492 + .../java2python/compiler/visitor.py | 900 + .../java2python/config/__init__.py | 34 + .../java2python/config/default.py | 251 + .../java2python/lang/Java.g | 1092 + .../java2python/lang/Java.tokens | 280 + .../java2python/lang/JavaDoc.g | 133 + .../java2python/lang/JavaLexer.py | 5285 ++++ .../java2python/lang/JavaParser.py | 23337 ++++++++++++++++ .../java2python/lang/__init__.py | 9 + .../java2python/lang/base.py | 269 + .../java2python/lang/selector.py | 241 + .../java2python/lib/__init__.py | 54 + .../java2python/mod/__init__.py | 15 + .../java2python/mod/basic.py | 252 + .../java2python/mod/include/__init__.py | 0 .../java2python/mod/include/bsr.py | 26 + .../java2python/mod/include/classmethod.py | 6 + .../java2python/mod/include/overloading.py | 148 + .../java2python/mod/include/sync.py | 13 + .../java2python/mod/include/sync_test.py | 88 + .../java2python/mod/transform.py | 196 + build/lib/java2python/__init__.py | 5 + build/lib/java2python/compiler/__init__.py | 37 + build/lib/java2python/compiler/block.py | 39 + build/lib/java2python/compiler/template.py | 492 + build/lib/java2python/compiler/visitor.py | 900 + build/lib/java2python/config/__init__.py | 34 + build/lib/java2python/config/default.py | 251 + build/lib/java2python/lang/Java.g | 1092 + build/lib/java2python/lang/Java.tokens | 280 + build/lib/java2python/lang/JavaDoc.g | 133 + build/lib/java2python/lang/JavaLexer.py | 5285 ++++ build/lib/java2python/lang/JavaParser.py | 23337 ++++++++++++++++ build/lib/java2python/lang/__init__.py | 9 + build/lib/java2python/lang/base.py | 269 + build/lib/java2python/lang/selector.py | 241 + build/lib/java2python/lib/__init__.py | 54 + build/lib/java2python/mod/__init__.py | 15 + build/lib/java2python/mod/basic.py | 252 + build/lib/java2python/mod/include/__init__.py | 0 build/lib/java2python/mod/include/bsr.py | 26 + .../java2python/mod/include/classmethod.py | 6 + .../java2python/mod/include/overloading.py | 148 + build/lib/java2python/mod/include/sync.py | 13 + .../lib/java2python/mod/include/sync_test.py | 88 + build/lib/java2python/mod/transform.py | 196 + build/scripts-2.7/j2py | 259 + build/scripts-3.6/j2py | 260 + java2python/compiler/template.py | 11 +- 54 files changed, 66934 insertions(+), 5 deletions(-) create mode 100644 build/lib.linux-x86_64-2.7/java2python/__init__.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/compiler/__init__.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/compiler/block.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/compiler/template.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/compiler/visitor.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/config/__init__.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/config/default.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/lang/Java.g create mode 100644 build/lib.linux-x86_64-2.7/java2python/lang/Java.tokens create mode 100644 build/lib.linux-x86_64-2.7/java2python/lang/JavaDoc.g create mode 100644 build/lib.linux-x86_64-2.7/java2python/lang/JavaLexer.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/lang/JavaParser.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/lang/__init__.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/lang/base.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/lang/selector.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/lib/__init__.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/mod/__init__.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/mod/basic.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/mod/include/__init__.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/mod/include/bsr.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/mod/include/classmethod.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/mod/include/overloading.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/mod/include/sync.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/mod/include/sync_test.py create mode 100644 build/lib.linux-x86_64-2.7/java2python/mod/transform.py create mode 100644 build/lib/java2python/__init__.py create mode 100644 build/lib/java2python/compiler/__init__.py create mode 100644 build/lib/java2python/compiler/block.py create mode 100644 build/lib/java2python/compiler/template.py create mode 100644 build/lib/java2python/compiler/visitor.py create mode 100644 build/lib/java2python/config/__init__.py create mode 100644 build/lib/java2python/config/default.py create mode 100644 build/lib/java2python/lang/Java.g create mode 100644 build/lib/java2python/lang/Java.tokens create mode 100644 build/lib/java2python/lang/JavaDoc.g create mode 100644 build/lib/java2python/lang/JavaLexer.py create mode 100644 build/lib/java2python/lang/JavaParser.py create mode 100644 build/lib/java2python/lang/__init__.py create mode 100644 build/lib/java2python/lang/base.py create mode 100644 build/lib/java2python/lang/selector.py create mode 100644 build/lib/java2python/lib/__init__.py create mode 100644 build/lib/java2python/mod/__init__.py create mode 100644 build/lib/java2python/mod/basic.py create mode 100644 build/lib/java2python/mod/include/__init__.py create mode 100644 build/lib/java2python/mod/include/bsr.py create mode 100644 build/lib/java2python/mod/include/classmethod.py create mode 100644 build/lib/java2python/mod/include/overloading.py create mode 100644 build/lib/java2python/mod/include/sync.py create mode 100644 build/lib/java2python/mod/include/sync_test.py create mode 100644 build/lib/java2python/mod/transform.py create mode 100755 build/scripts-2.7/j2py create mode 100755 build/scripts-3.6/j2py diff --git a/bin/j2py b/bin/j2py index 6eb1a40..5a6a025 100755 --- a/bin/j2py +++ b/bin/j2py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/python2 # -*- coding: utf-8 -*- """ j2py -> Java to Python compiler script. @@ -136,7 +136,7 @@ def runTransform(options): timed['visit_finish'] timed['encode'] - source = unicode(module) + source = unicode(str(module), 'utf8') timed['encode_finish'] timed['overall_finish'] @@ -159,7 +159,7 @@ def runTransform(options): else: output = open(fileout, 'w') module.name = path.splitext(filein)[0] if filein != '-' else '' - print >> output, source + print >> output, source.encode('utf8') if not options.skipcompile: try: diff --git a/build/lib.linux-x86_64-2.7/java2python/__init__.py b/build/lib.linux-x86_64-2.7/java2python/__init__.py new file mode 100644 index 0000000..b3012d9 --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/__init__.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python -> top-level package marker. + + diff --git a/build/lib.linux-x86_64-2.7/java2python/compiler/__init__.py b/build/lib.linux-x86_64-2.7/java2python/compiler/__init__.py new file mode 100644 index 0000000..4325201 --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/compiler/__init__.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.compiler package marker. +# +# This module provides a simpler facade over the rest of the compiler +# subpackage. Client code should use the values in this module +# instead of using directly referencing items within the subpackage. + +from java2python.compiler.block import Module +from java2python.lang import Lexer, Parser, StringStream, TokenStream, TreeAdaptor + + +def buildAST(source): + """ Returns an AST for the given source. """ + lexer = Lexer(StringStream(source)) + parser = Parser(TokenStream(lexer)) + adapter = TreeAdaptor(lexer, parser) + parser.setTreeAdaptor(adapter) + scope = parser.javaSource() + return scope.tree + + +def buildJavaDocAST(source): + """ Returns an AST for the given javadoc source. """ + from java2python.lang.JavaDocLexer import JavaDocLexer + from java2python.lang.JavaDocParser import JavaDocParser + lexer = JavaDocLexer(StringStream(source)) + parser = JavaDocParser(TokenStream(lexer)) + scope = parser.commentBody() + return scope.tree + + +def transformAST(tree, config): + """ Walk the tree and apply the transforms in the config. """ + for selector, call in config.last('astTransforms', ()): + for node in selector.walk(tree): + call(node, config) diff --git a/build/lib.linux-x86_64-2.7/java2python/compiler/block.py b/build/lib.linux-x86_64-2.7/java2python/compiler/block.py new file mode 100644 index 0000000..4cf7b09 --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/compiler/block.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.compiler.block -> Visitors combined with templates. +# +# This module defines classes which combine AST walking with source +# generation. We've put these two behaviors into separate modules, +# java2python.compiler.template for creating source code, and +# java2python.compiler.visitor for walking ANTLR trees. +# +# Each of the classes depends on the behavior of its counterpart. +# This means they're very tightly coupled and that the classes are not +# very reusable. The module split does allow for grouping of related +# methods and does hide the cluttered code. + +from sys import modules +from java2python.compiler import template, visitor + + +def addTypeToModule((className, factoryName)): + """ Constructs and adds a new type to this module. """ + bases = (getattr(template, className), getattr(visitor, className)) + newType = type(className, bases, dict(factoryName=factoryName)) + setattr(modules[__name__], className, newType) + + +map(addTypeToModule, ( + ('Annotation', 'at'), + ('Class', 'klass'), + ('Comment', 'comment'), + ('Enum', 'enum'), + ('Expression', 'expr'), + ('Interface', 'interface'), + ('Method', 'method'), + ('MethodContent', 'methodContent'), + ('Module', 'module'), + ('Statement', 'statement'), + ) + ) diff --git a/build/lib.linux-x86_64-2.7/java2python/compiler/template.py b/build/lib.linux-x86_64-2.7/java2python/compiler/template.py new file mode 100644 index 0000000..4f4dfe1 --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/compiler/template.py @@ -0,0 +1,492 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.compiler.template -> Base classes for writing Python source. +# +# This module defines templates -- chunks of Python source code -- +# that can be easily manipulated and written. Each class provides +# string methods (__str__, dump, dumps) for serializing instances as a +# source code string. +# +# The Factory class is used to to provide runtime lookup of concrete +# classes; this was necessary to accommodate splitting the behavior of +# the compiler subpackage into multiple modules. So-called patterns +# are usually a sign of a bad design and/or language limitations, and +# this case is no exception. + +from cStringIO import StringIO +from functools import partial +from itertools import chain, ifilter, imap + +from java2python.lang import tokens +from java2python.lib import FS, colors + + +class Factory(object): + """ Factory -> creates pre-configured callables for new block instances. + + Both templates and visitors use an instance of this class as a simple + interface to create new blocks like this: + + stat = self.factory.statement() + + The `__getattr__` method does the work of looking up and returning + the appropriate block class. The lookup depends on the types + registry, which is populated by the FactoryTypeDetector metaclass + below. + + One important thing to realize regarding this factory is this: + when an attribute is requested (`self.factory.expr` for example), + the factory locates the type and returns a constructor for it with + the config object pre-applied. + + """ + types = {} + + def __init__(self, config): + self.config = config + + def __getattr__(self, name): + try: + return partial(self.types[name], self.config) + except (KeyError, ): + raise AttributeError('Factory missing "{0}" type.'.format(name)) + + +class FactoryTypeDetector(type): + """ FactoryTypeDetector -> detects factory-creatable types as they are defined. + + As subclasses are created they are checked for an attribute called + `factoryName`. If present, that key is used to populate the + type registry in the Factory class. + + Note that the actual subclasses are not created here (templates and + visitors do not specify a `factoryName`). Actual factory types are created + in `java2python.compiler.block`. This is because we're after not + templates or visitors, but rather visitors combined with templates (aka + blocks). Refer to the `blocks` module for the specific factory + type names. + + """ + def __init__(cls, name, bases, namespace): + try: + Factory.types[cls.factoryName] = cls + except (AttributeError, ): + pass + + +class Base(object): + """ Base -> base class for formatting Python output. + + This class defines a large set of attributes and methods for the + other concrete templates defined below. The items defined here + can be grouped as follows: + + * References + + This class defines `bases`, `children`, `decorators`, etc. for + tracking the relationship between this instance and other blocks. + + * Type Information + + This class defines many is-A properties, such as isClass, + isModule, isVoid, etc. Subclasses typically override one or more + of these with an attribute or property. + + * Configuration + + This class provides utility methods for retrieving values from the + runtime configuration. See the definition of `configHandler` and + `configHandlers` for details. + + * Serialization + + This class provides a default implementation for subclasses to + serialize their instances as Python source code strings. Notably, + the `__str__` method is provided, which in turn defers most of its + work to the `dumps` method. Subclasses provide different + implementations of these methods where needed. + + Also, the `__repr__` method is defined by this class for printing + a the template as tree for debugging. + + """ + __metaclass__ = FactoryTypeDetector + isAnnotation = isClass = isComment = isEnum = isExpression = \ + isInterface = isMethod = isModule = isStatement = False + + def __init__(self, config, name=None, type=None, parent=None): + self.bases = [] + self.children = [] + self.config = config + self.decorators = [] + self.overloaded = None + self.factory = Factory(config) + self.modifiers = [] + self.name = name + self.parameters = [] + self.parent = parent + self.type = type + self.variables = [] + if parent: + parent.children.append(self) + + def __repr__(self): + """ Returns the debug string representation of this template. """ + name = colors.white('name:') + colors.cyan(self.name) if self.name else '' + parts = [colors.green(self.typeName), name] + if self.type: + parts.append(colors.white('type:') + colors.cyan(self.type)) + if self.modifiers: + parts.append(colors.white('modifiers:') + colors.cyan(','.join(self.modifiers))) + return ' '.join(parts) + + def __str__(self): + """ Returns the Python source code representation of this template. """ + handlers = self.configHandlers('Output') + return reduce(lambda v, func:func(self, v), handlers, self.dumps(-1)) + + def adopt(self, child, index=-1): + """ Adds child to this objecs children and sets the childs parent. """ + self.children.insert(index, child) + child.parent = self + + def altIdent(self, name): + """ Returns an alternate identifier for the one given. """ + for klass in self.parents(lambda v:v.isClass): + if name in klass.variables: + try: + method = self.parents(lambda v:v.isMethod).next() + except (StopIteration, ): + return name + if name in [p['name'] for p in method.parameters]: + return name + if name in method.variables: + return name + return ('cls' if method.isStatic else 'self') + '.' + name + return name + + def configHandler(self, part, suffix='Handler', default=None): + """ Returns the config handler for this type of template. """ + name = '{0}{1}{2}'.format(self.typeName, part, suffix) + return self.config.last(name, default) + + def configHandlers(self, part, suffix='Handlers'): + """ Returns config handlers for this type of template """ + name = '{0}{1}{2}'.format(self.typeName, part, suffix) + return imap(self.toIter, chain(*self.config.every(name, []))) + + def dump(self, fd, level=0): + """ Writes the Python source code for this template to the given file. """ + indent, isNotNone = level * self.indent, lambda x:x is not None + lineFormat = '{0}{1}\n'.format + for line in ifilter(isNotNone, self.iterPrologue()): + line = lineFormat(indent, line) + fd.write(line if line.strip() else '\n') + for item in ifilter(isNotNone, self.iterHead()): + item.dump(fd, level+1) + for item in self.iterBody(): + item.dump(fd, level+1) + for line in ifilter(isNotNone, self.iterEpilogue()): + line = lineFormat(indent, line) + fd.write(line if line.strip() else '\n') + + def dumps(self, level=0): + """ Dumps this template to a string. """ + fd = StringIO() + self.dump(fd, level) + return fd.getvalue() + + def dumpRepr(self, fd, level=0): + """ Writes a debug string for this template to the given file. """ + indent, default = self.indent, lambda x, y:None + fd.write('{0}{1!r}\n'.format(indent*level, self)) + for child in ifilter(None, self.children): + getattr(child, 'dumpRepr', default)(fd, level+1) + + @property + def indent(self): + """ Returns the indent string for this item. """ + return self.config.last('indentPrefix', ' ') + + @property + def isPublic(self): + """ True if this item is static. """ + return 'public' in self.modifiers + + @property + def isStatic(self): + """ True if this item is static. """ + return 'static' in self.modifiers + + @property + def isVoid(self): + """ True if this item is void. """ + return 'void' == self.type + + def iterPrologue(self): + """ Yields the items in the prologue of this template. """ + return chain(*(h(self) for h in self.configHandlers('Prologue'))) + + def iterHead(self): + """ Yields the items in the head of this template. """ + items = chain(*(h(self) for h in self.configHandlers('Head'))) + return imap(self.toExpr, items) + + def iterBody(self): + """ Yields the items in the body of this template. """ + return iter(self.children) + + def iterEpilogue(self): + """ Yields the items in the epilogue of this template. """ + return chain(*(h(self) for h in self.configHandlers('Epilogue'))) + + def makeParam(self, name, type, **kwds): + """ Creates a parameter as a mapping. """ + param = dict(name=name, type=type) + if 'default' in kwds: + param['default'] = kwds['default'] + return param + + def parents(self, pred=lambda v:True): + """ Yield each parent in the family tree. """ + while self: + if pred(self): + yield self + self = self.parent + + def find(self, pred=lambda v:True): + """ Yield each child in the family tree. """ + for child in self.children: + if pred(child): + yield child + if hasattr(child, 'find'): + for value in child.find(pred): + yield value + + @property + def className(self): + """ Returns the name of the class of this item. """ + return self.__class__.__name__ + + @property + def typeName(self): + """ Returns the name of this template type. """ + return self.className.lower() + + def toExpr(self, value): + """ Returns an expression for the given value if it is a string. """ + try: + return self.factory.expr(left=value+'') + except (TypeError, ): + return value + + def toIter(self, value): + """ Returns an iterator for the given value if it is a string. """ + try: + value + '' + except (TypeError, ): + return value + else: + def wrapper(*a, **b): + yield value + return wrapper + + +class Expression(Base): + """ Expression -> formatting for Python expressions. """ + + isExpression = True + + def __init__(self, config, left='', right='', fs=FS.lr, parent=None, tail=''): + super(Expression, self).__init__(config, parent=parent) + self.left, self.right, self.fs, self.tail = left, right, fs, tail + + def __repr__(self): + """ Returns the debug string representation of this template. """ + parts, parent, showfs = [colors.blue(self.typeName)], self.parent, True + if isinstance(self.left, (basestring, )) and self.left: + parts.append(colors.white('left:') + colors.yellow(self.left)) + showfs = False + if isinstance(self.right, (basestring, )) and self.right: + parts.append(colors.white('right:') + colors.yellow(self.right)) + showfs = False + if self.modifiers: + parts.append(colors.white('modifiers:') + colors.cyan(','.join(self.modifiers))) + if self.type: + parts.append(colors.white('type:') + colors.cyan(self.type)) + if showfs: + parts.append(colors.white('format:') + colors.yellow(self.fs)) + if self.tail: + parts.append(colors.white('tail:') + colors.black(self.tail)) + return ' '.join(parts) + + def __str__(self): + """ Returns the Python source code representation of this template. """ + return self.fs.format(left=self.left, right=self.right) + self.tail + + def dump(self, fd, level=0): + """ Writes the Python source code for this template to the given file. """ + line = '{0}{1}\n'.format(self.indent*level, self) + fd.write(line if line.strip() else '\n') + + def dumpRepr(self, fd, level=0): + """ Writes a debug string for this template to the given file. """ + fd.write('{0}{1!r}\n'.format(self.indent*level, self)) + for obj in (self.left, self.right): + dumper = getattr(obj, 'dumpRepr', lambda x, y:None) + dumper(fd, level+1) + + @property + def isComment(self): + """ True if this expression is a comment. """ + try: + return self.left.strip().startswith('#') + except (AttributeError, ): + return False + + +class Comment(Expression): + """ Comment -> formatting for Python comments. """ + + isComment = True + + def __repr__(self): + """ Returns the debug string representation of this comment. """ + parts = [colors.white(self.typeName+':'), + colors.black(self.left) + colors.black(self.right) + colors.black(self.tail), ] + return ' '.join(parts) + + + +class Statement(Base): + """ Statement -> formatting for Python statements. """ + + isStatement = True + + def __init__(self, config, keyword, fs=FS.lr, parent=None): + super(Statement, self).__init__(config, parent=parent) + self.keyword = keyword + self.expr = self.factory.expr(left=keyword, fs=fs) + self.expr.parent = self + + def __repr__(self): + """ Returns the debug string representation of this statement. """ + parts = [colors.green(self.typeName), colors.white('keyword:')+colors.cyan(self.keyword)] + return ' '.join(parts) + + def iterPrologue(self): + """ Yields the keyword (and clause, if any) for this statement . """ + yield self.expr + + +class Module(Base): + """ Module -> formatting for Python modules. """ + isModule = True + + def iterBody(self): + """ Yields the items in the body of this template. """ + blank, prev = self.factory.expr(), None + for child in super(Module, self).iterBody(): + if prev and not prev.isComment: + yield blank + if prev and prev.isClass and child and child.isClass: + yield blank + yield child + prev = child + + +class ClassMethodSharedMixin(object): + """ ClassMethodSharedMixin -> shared methods for Class and Method types. """ + + def iterPrologue(self): + """ Yields the items in the prologue of this template. """ + prologue = super(ClassMethodSharedMixin, self).iterPrologue() + return chain(prologue, self.decorators, self.iterDecl()) + + +class Class(ClassMethodSharedMixin, Base): + """ Class -> formatting for Python classes. """ + isClass = True + + def iterBases(self): + """ Yields the base classes for this type. """ + return chain(*(h(self) for h in self.configHandlers('Base'))) + + def iterDecl(self): + """ Yields the declaration for this type. """ + bases = ', '.join(self.iterBases()) + bases = '({0})'.format(bases) if bases else '' + yield 'class {0}{1}:'.format(self.name, bases) + + def iterBody(self): + """ Yields the items in the body of this template. """ + def sprinkleBlanks(body): + blank, prev = self.factory.expr(), None + for item in body: + if prev: + if type(prev) != type(item) and not prev.isComment: + yield blank + elif item.isMethod and prev.isMethod: + yield blank + elif prev.isClass: + yield blank + yield item + prev = item + for handler in self.configHandlers('PostWalk'): + handler(self) + head = any(self.iterHead()) + body = list(super(Class, self).iterBody()) + tail = () if (body or head) else [self.factory.expr(left='pass')] + body = () if tail else sprinkleBlanks(body) + return chain(body, tail) + + +class Annotation(Class): + """ Annotation -> formatting for annotations converted to Python classes. """ + isAnnotation = True + + def __init__(self, config, name=None, type=None, parent=None): + super(Annotation, self).__init__(config, name, type, parent) + + +class Enum(Class): + """ Enum -> formatting for enums converted to Python classes. """ + isEnum = True + + +class Interface(Class): + """ Interface -> formatting for interfaces converted to Python classes. """ + isInterface = True + + +class MethodContent(Base): + """ MethodContent -> formatting for content within Python methods. """ + + +class Method(ClassMethodSharedMixin, Base): + """ Method -> formatting for Python methods. """ + isMethod = True + + def __init__(self, config, name=None, type=None, parent=None): + super(Method, self).__init__(config, name, type, parent) + self.parameters.append(self.makeParam('self', 'object')) + + def iterParams(self): + """ Yields the parameters of this method template. """ + return chain(*(h(self) for h in self.configHandlers('Param'))) + + def iterDecl(self): + """ Yields the declaration for this method template. """ + def formatParam(p): + if 'default' in p: + return '{0}={1}'.format(p['name'], p['default']) + return p['name'] + params = ', '.join(formatParam(param) for param in self.iterParams()) + yield 'def {0}({1}):'.format(self.name, params) + + def iterBody(self): + """ Yields the items in the body of this method template. """ + head = any(self.iterHead()) + body = list(super(Method, self).iterBody()) + tail = () if (body or head) else [self.factory.expr(left='pass')] + return chain(body, tail) diff --git a/build/lib.linux-x86_64-2.7/java2python/compiler/visitor.py b/build/lib.linux-x86_64-2.7/java2python/compiler/visitor.py new file mode 100644 index 0000000..f62e53e --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/compiler/visitor.py @@ -0,0 +1,900 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.compiler.visitor -> Base classes for walking ASTs. +# +# This module defines classes that accept nodes during AST walking. These +# classes are the primary source of the language translation semantics as +# implemented by java2python. +# +# These classes implement the node handling behavior of the block classes built +# at runtime. These classes use their factory callable more often than their +# template counterparts; during walking, the typical behavior is to either define +# the specific Python source, or to defer it to another block, or both. + + +from functools import reduce, partial +from itertools import ifilter, ifilterfalse, izip, tee +from logging import debug, warn +from re import compile as recompile, sub as resub + +from java2python.lang import tokens +from java2python.lib import FS + + +class Memo(object): + """ Memo -> AST walking luggage. """ + + def __init__(self): + self.comments, self.last = set(), 0 + + +class Base(object): + """ Base -> Parent class for AST visitors. """ + + commentSubs = map(recompile, ['^\s*/(\*)+', '(\*)+/\s*$', '^\s*//']) + + def accept(self, node, memo): + """ Accept a node, possibly creating a child visitor. """ + tokType = tokens.map.get(node.token.type) + missing = lambda node, memo:self + call = getattr(self, 'accept{0}'.format(tokens.title(tokType)), missing) + if call is missing: + debug('no visitor accept method for %s', tokType) + return call(node, memo) + + def insertComments(self, tmpl, tree, index, memo): + """ Add comments to the template from tokens in the tree. """ + prefix = self.config.last('commentPrefix', '# ') + cache, parser, comTypes = memo.comments, tree.parser, tokens.commentTypes + comNew = lambda t:t.type in comTypes and (t.index not in cache) + + for tok in ifilter(comNew, parser.input.tokens[memo.last:index]): + cache.add(tok.index) + + # loop over parents until we find the top expression + base = tmpl + while base: + if base and base.parent and base.parent.isExpression: + base = base.parent + else: + break + + if hasattr(base, 'tail') and tok.line==parser.input.tokens[index].line: + base.tail += prefix if not base.tail.startswith(prefix) else '' + base.tail += ''.join(self.stripComment(tok.text)) + else: + for line in self.stripComment(tok.text): + self.factory.comment(left=prefix, right=line, parent=self) + memo.last = index + + def stripComment(self, text): + """ Regex substitutions for comments; removes comment characters. """ + subText = lambda value, regex:resub(regex, '', value) + for text in ifilter(unicode.strip, text.split('\n')): + yield reduce(subText, self.commentSubs, text) + + def walk(self, tree, memo=None): + """ Depth-first visiting of the given AST. """ + if not tree: + return + memo = Memo() if memo is None else memo + comIns = self.insertComments + comIns(self, tree, tree.tokenStartIndex, memo) + visitor = self.accept(tree, memo) + if visitor: + for child in tree.children: + visitor.walk(child, memo) + comIns(visitor, child, child.tokenStopIndex, memo) + comIns(self, tree, tree.tokenStopIndex, memo) + if tree.isJavaSource: + comIns(self, tree, len(tree.parser.input.tokens), memo) + # fixme: we're calling the mutators far too frequently instead + # of only once per object after its walk is finished. + for handler in self.configHandlers('PostWalk', suffix='Mutators'): + handler(self) + + def zipWalk(self, nodes, visitors, memo): + """ Walk the given nodes zipped with the given visitors. """ + for node, visitor in izip(nodes, visitors): + visitor.walk(node, memo) + + def nodeTypeToString(self, node): + """ Returns the TYPE or QUALIFIED_TYPE_IDENT of the given node. """ + alt = self.altIdent + ntype = node.firstChildOfType(tokens.TYPE) + nnext = ntype.children[0] + if nnext.type == tokens.QUALIFIED_TYPE_IDENT: + names = [alt(t.text) for t in nnext.childrenOfType(tokens.IDENT)] + stype = '.'.join(names) + else: + stype = nnext.text + return alt(stype) + + +class TypeAcceptor(object): + """ TypeAcceptor -> shared visitor method(s) for type declarations. """ + + def makeAcceptType(ft): + """ Creates an accept function for the given factory type. """ + def acceptType(self, node, memo): + """ Creates and returns a new template for a type. """ + try: + name = node.firstChildOfType(tokens.IDENT).text + except (AttributeError, ): + return + self.variables.append(name) + return getattr(self.factory, ft)(name=name, parent=self) + return acceptType + + acceptAt = makeAcceptType('at') + acceptClass = makeAcceptType('klass') + acceptEnum = makeAcceptType('enum') + _acceptInterface = makeAcceptType('interface') + + def acceptInterface(self, node, memo): + module = self.parents(lambda x:x.isModule).next() + module.needsAbstractHelpers = True + return self._acceptInterface(node, memo) + + +class Module(TypeAcceptor, Base): + """ Module -> accepts AST branches for module-level objects. """ + + def makeAcceptHandledDecl(part): + """ Creates an accept function for a decl to be processed by a handler. """ + def acceptDecl(self, node, memo): + """ Processes a decl by creating a new template expression. """ + expr = self.factory.expr() + expr.walk(node.firstChild(), memo) + handler = self.configHandler(part) + if handler: + handler(self, expr) + return acceptDecl + + acceptImport = makeAcceptHandledDecl('ImportDeclaration') + acceptPackage = makeAcceptHandledDecl('PackageDeclaration') + + +class ModifiersAcceptor(object): + """ ModifiersAcceptor -> shared behavior of classes and methods. """ + + def acceptModifierList(self, node, memo): + """ Accept and process class and method modifiers. """ + isAnno = lambda token:token.type==tokens.AT + for ano in ifilter(isAnno, node.children): + self.nodesToAnnos(ano, memo) + for mod in ifilterfalse(isAnno, node.children): + self.nodesToModifiers(mod, node) + return self + + def nodesToAnnos(self, branch, memo): + """ Convert the annotations in the given branch to a decorator. """ + name = branch.firstChildOfType(tokens.IDENT).text + init = branch.firstChildOfType(tokens.ANNOTATION_INIT_BLOCK) + if not init: + deco = self.factory.expr(left=name, fs='@{left}()') + else: + defKey = init.firstChildOfType(tokens.ANNOTATION_INIT_DEFAULT_KEY) + if defKey: + deco = self.factory.expr(left=name, fs='@{left}({right})') + deco.right = right = self.factory.expr(parent=deco) + right.walk(defKey.firstChild(), memo) + else: + deco = self.factory.expr(left=name, fs='@{left}({right})') + arg = deco.right = self.factory.expr(parent=deco) + keys = init.firstChildOfType(tokens.ANNOTATION_INIT_KEY_LIST) + for child in keys.children: + fs, expr = child.text + '={right}', child.firstChild() + fs += (', ' if child is not keys.children[-1] else '') + arg.left = self.factory.expr(fs=fs, parent=arg) + arg.left.walk(expr, memo) + arg.right = arg = self.factory.expr(parent=arg) + self.decorators.append(deco) + + def nodesToModifiers(self, branch, root): + """ Convert the modifiers in the given branch to template modifiers. """ + if root.parentType in tokens.methodTypes: + self.modifiers.extend(n.text for n in root.children) + if self.isStatic and self.parameters: + self.parameters[0]['name'] = 'cls' + self.modifiers.append(branch.text) + + +class VarAcceptor(object): + """ Mixin for blocks that accept handle var declarations. """ + + def acceptVarDeclaration(self, node, memo): + """ Creates a new expression for a variable declaration. """ + varDecls = node.firstChildOfType(tokens.VAR_DECLARATOR_LIST) + for varDecl in varDecls.childrenOfType(tokens.VAR_DECLARATOR): + ident = varDecl.firstChildOfType(tokens.IDENT) + self.variables.append(ident.text) + + identExp = self.factory.expr(left=ident.text, parent=self) + identExp.type = self.nodeTypeToString(node) + if node.firstChildOfType(tokens.MODIFIER_LIST): + identExp.modifiers = [child.text for child in node.firstChildOfType(tokens.MODIFIER_LIST).children] + + declExp = varDecl.firstChildOfType(tokens.EXPR) + assgnExp = identExp.pushRight(' = ') + + declArr = varDecl.firstChildOfType(tokens.ARRAY_INITIALIZER) + if declExp: + assgnExp.walk(declExp, memo) + elif declArr: + assgnExp.right = exp = self.factory.expr(fs='['+FS.lr+']', parent=identExp) + children = list(declArr.childrenOfType(tokens.EXPR)) + for child in children: + fs = FS.lr if child is children[-1] else FS.lr + ', ' + exp.left = self.factory.expr(fs=fs, parent=identExp) + exp.left.walk(child, memo) + exp.right = exp = self.factory.expr(parent=identExp) + else: + if node.firstChildOfType(tokens.TYPE).firstChildOfType(tokens.ARRAY_DECLARATOR_LIST): + val = assgnExp.pushRight('[]') + else: + if node.firstChildOfType(tokens.TYPE).firstChild().type != tokens.QUALIFIED_TYPE_IDENT: + val = assgnExp.pushRight('{0}()'.format(identExp.type)) + else: + val = assgnExp.pushRight('None') + return self + + +class Class(VarAcceptor, TypeAcceptor, ModifiersAcceptor, Base): + """ Class -> accepts AST branches for class-level objects. """ + + def nodeIdentsToBases(self, node, memo): + """ Turns node idents into template bases. """ + idents = node.findChildrenOfType(tokens.IDENT) + self.bases.extend(n.text for n in idents) + + acceptExtendsClause = nodeIdentsToBases + acceptImplementsClause = nodeIdentsToBases + + def acceptAt(self, node, memo): + """ Accept and ignore an annotation declaration. """ + # this overrides the TypeAcceptor implementation and + # ignores AT tokens; they're sent within the class modifier + # list and we have no use for them here. + + def acceptConstructorDecl(self, node, memo): + """ Accept and process a constructor declaration. """ + method = self.factory.method(name='__init__', type=self.name, parent=self) + superCalls = node.findChildrenOfType(tokens.SUPER_CONSTRUCTOR_CALL) + if not any(superCalls) and any(self.bases): + # from the java tutorial: + # Note: If a constructor does not explicitly invoke a + # superclass constructor, the Java compiler automatically + # inserts a call to the no-argument constructor of the + # superclass. + fs = 'super(' + FS.r + ', self).__init__()' + self.factory.expr(fs=fs, right=self.name, parent=method) + return method + + def acceptFunctionMethodDecl(self, node, memo): + """ Accept and process a typed method declaration. """ + ident = node.firstChildOfType(tokens.IDENT) + type = node.firstChildOfType(tokens.TYPE).children[0].text + mods = node.firstChildOfType(tokens.MODIFIER_LIST) + self.variables.append(ident.text) + return self.factory.method(name=ident.text, type=type, parent=self) + + def acceptVoidMethodDecl(self, node, memo): + """ Accept and process a void method declaration. """ + ident = node.firstChildOfType(tokens.IDENT) + mods = node.firstChildOfType(tokens.MODIFIER_LIST) + self.variables.append(ident.text) + return self.factory.method(name=ident.text, type='void', parent=self) + + +class Annotation(Class): + """ Annotation -> accepts AST branches for Java annotations. """ + + def acceptAnnotationTopLevelScope(self, node, memo): + """ Accept and process an annotation scope. """ + # We're processing the entire annotation top level scope here + # so as to easily find all of the default values and construct + # the various python statements in one pass. + args = [] + for child in node.children: + if child.type == tokens.ANNOTATION_METHOD_DECL: + mods, type, ident = child.children[0:3] + type, name = type.children[0].text, ident.text + meth = self.factory.method(parent=self, name=name, type=type) + meth.factory.expr(fs='return self._{left}', parent=meth, left=name) + default = child.children[3] if len(child.children) > 3 else None + args.append((name, type, default)) + elif child.type == tokens.VAR_DECLARATION: + self.acceptVarDeclaration(child, memo) + else: + self.walk(child, memo) + self.addCall(args, memo) + self.addInit(args, memo) + self.children.sort(lambda a, b:-1 if a.name == '__call__' else 0) + self.children.sort(lambda a, b:-1 if a.name == '__init__' else 0) + + def addInit(self, args, memo): + """ Make an __init__ function in this annotation class. """ + meth = self.factory.method(parent=self, name='__init__') + factory = partial(meth.factory.expr, fs='self._{left} = {right}', parent=meth) + for name, type, default in args: + if default is not None: + expr = self.factory.expr() + expr.walk(default, memo) + else: + expr = None + meth.parameters.append(self.makeParam(name, type, default=expr)) + factory(left=name, right=name) + + def addCall(self, args, memo): + """ Make a __call__ function in this class (so it's a decorator). """ + meth = self.factory.method(parent=self, name='__call__') + meth.parameters.append(self.makeParam('obj', 'object')) + factory = partial(self.factory.expr, parent=meth) + factory(fs='setattr(obj, self.__class__.__name__, self)') + factory(fs='return obj') + + +class Enum(Class): + """ Enum -> accepts AST branches for Java enums. """ + + def acceptEnumTopLevelScope(self, node, memo): + """ Accept and process an enum scope """ + idents = node.childrenOfType(tokens.IDENT) + factory = self.factory.expr + handler = self.configHandler('Value') + setFs = lambda v:'{0}.{1} = {2}'.format(self.name, v, self.name) + for index, ident in enumerate(idents): + args = list(ident.findChildrenOfType(tokens.ARGUMENT_LIST)) + if args: + call = factory(left=setFs(ident), parent=self.parent) + call.right = arg = factory(fs='('+FS.lr+')') + argl = ident.firstChildOfType(tokens.ARGUMENT_LIST) + exprs = list(argl.findChildrenOfType(tokens.EXPR)) + for expr in exprs: + fs = FS.r + ('' if expr is exprs[-1] else ', ') + arg.left = factory(fs=fs) + arg.left.walk(expr, memo) + arg.right = arg = factory() + else: + expr = factory(fs=ident.text+' = '+FS.r, parent=self) + expr.pushRight(handler(self, index, ident.text)) + return self + + +class Interface(Class): + """ Interface -> accepts AST branches for Java interfaces. """ + + +class MethodContent(VarAcceptor, Base): + """ MethodContent -> accepts trees for blocks within methods. """ + + def acceptAssert(self, node, memo): + """ Accept and process an assert statement. """ + assertStat = self.factory.statement('assert', fs=FS.lsr, parent=self) + assertStat.expr.walk(node.firstChild(), memo) + + def acceptBreak(self, node, memo): + """ Accept and process a break statement. """ + # possible parents of a break statement: switch, while, do, for + # we want to skip inserting a break statement if we're inside a switch. + insert, ok_types = True, [tokens.WHILE, tokens.DO, tokens.FOR] + for parent in node.parents(): + if parent.type == tokens.SWITCH: + insert = False + break + if parent.type in ok_types: + break + if insert: + if len(node.children): + warn('Detected unhandled break statement with label; generated code incorrect.') + breakStat = self.factory.statement('break', parent=self) + + def acceptCatch(self, node, memo): + """ Accept and process a catch statement. """ + decl = node.firstChildOfType(tokens.FORMAL_PARAM_STD_DECL) + dtype = decl.firstChildOfType(tokens.TYPE) + tnames = dtype.findChildrenOfType(tokens.IDENT) + cname = '.'.join(n.text for n in tnames) + cvar = decl.firstChildOfType(tokens.IDENT) + block = node.firstChildOfType(tokens.BLOCK_SCOPE) + if not block.children: + self.factory.expr(left='pass', parent=self) + self.expr.fs = FS.lsrc + self.expr.right = self.factory.expr(fs=FS.l+' as '+FS.r, left=cname, right=cvar) + self.walk(block, memo) + + + def acceptContinue(self, node, memo): + """ Accept and process a continue statement. """ + parent = node.parents(lambda x: x.type in {tokens.FOR, tokens.FOR_EACH, tokens.DO, tokens.WHILE}).next() + if parent.type == tokens.FOR: + updateStat = self.factory.expr(parent=self) + updateStat.walk(parent.firstChildOfType(tokens.FOR_UPDATE), memo) + contStat = self.factory.statement('continue', fs=FS.lsr, parent=self) + if len(node.children): + warn('Detected unhandled continue statement with label; generated code incorrect.') + + def acceptDo(self, node, memo): + """ Accept and process a do-while block. """ + # DO - BLOCK_SCOPE - PARENTESIZED_EXPR + blkNode, parNode = node.children + whileStat = self.factory.statement('while', fs=FS.lsrc, parent=self) + whileStat.expr.right = 'True' + whileStat.walk(blkNode, memo) + fs = FS.l+ ' ' + 'not ({right}):' + ifStat = self.factory.statement('if', fs=fs, parent=whileStat) + ifStat.expr.walk(parNode, memo) + breakStat = self.factory.statement('break', parent=ifStat) + + goodExprParents = ( + tokens.BLOCK_SCOPE, + tokens.CASE, + tokens.DEFAULT, + tokens.FOR_EACH, + tokens.METHOD_CALL, + tokens.ARGUMENT_LIST, + ) + + def acceptExpr(self, node, memo): + """ Creates a new expression. """ + # this works but isn't precise + if node.parentType in self.goodExprParents: + return self.factory.expr(parent=self) + + def acceptFor(self, node, memo): + """ Accept and process a 'for' statement. """ + self.walk(node.firstChildOfType(tokens.FOR_INIT), memo) + whileStat = self.factory.statement('while', fs=FS.lsrc, parent=self) + cond = node.firstChildOfType(tokens.FOR_CONDITION) + if not cond.children: + whileStat.expr.right = 'True' + else: + whileStat.expr.walk(cond, memo) + whileBlock = self.factory.methodContent(parent=self) + if not node.firstChildOfType(tokens.BLOCK_SCOPE).children: + self.factory.expr(left='pass', parent=whileBlock) + else: + whileBlock.walk(node.firstChildOfType(tokens.BLOCK_SCOPE), memo) + updateStat = self.factory.expr(parent=whileBlock) + updateStat.walk(node.firstChildOfType(tokens.FOR_UPDATE), memo) + + def acceptForEach(self, node, memo): + """ Accept and process a 'for each' style statement. """ + forEach = self.factory.statement('for', fs=FS.lsrc, parent=self) + identExpr = forEach.expr.right = self.factory.expr(fs=FS.l+' in '+FS.r) + identExpr.walk(node.firstChildOfType(tokens.IDENT), memo) + inExpr = identExpr.right = self.factory.expr() + inExpr.walk(node.firstChildOfType(tokens.EXPR), memo) + forBlock = self.factory.methodContent(parent=self) + forBlock.walk(node.children[4], memo) + + def acceptIf(self, node, memo): + """ Accept and process an if statement. """ + children = node.children + ifStat = self.factory.statement('if', fs=FS.lsrc, parent=self) + ifStat.expr.walk(children[0], memo) + + if node.children[1].type == tokens.EXPR: + ifBlock = self.factory.expr(parent=ifStat) + ifBlock.walk(node.children[1], memo) + else: + ifBlock = self.factory.methodContent(parent=self) + ifBlock.walk(node.children[1], memo) + + if len(children) == 3: + nextNode = children[2] + nextType = nextNode.type + + while nextType == tokens.IF: + nextStat = self.factory.statement('elif', fs=FS.lsrc, parent=self) + nextStat.expr.walk(nextNode.children[0], memo) + if nextNode.children[1].type == tokens.EXPR: + nextBlock = self.factory.expr(parent=nextStat) + else: + nextBlock = self.factory.methodContent(parent=self) + nextBlock.walk(nextNode.children[1], memo) + + try: + nextNode = nextNode.children[2] + except (IndexError, ): + nextType = None + else: + nextType = nextNode.type + + if nextType == tokens.EXPR: + elseStat = self.factory.statement('else', fs=FS.lc, parent=self) + elseBlock = self.factory.expr(parent=elseStat) + elseBlock.walk(nextNode, memo) + elif nextType: # nextType != tokens.BLOCK_SCOPE: + elseStat = self.factory.statement('else', fs=FS.lc, parent=self) + if nextNode.children: + self.factory.methodContent(parent=self).walk(nextNode, memo) + else: + self.factory.expr(left='pass', parent=elseStat) + + + def acceptSwitch(self, node, memo): + """ Accept and process a switch block. """ + # This implementation needs a lot of work to handle case + # statements without breaks, out-of-order default labels, etc. + # Given the current size and complexity, consider growing a + # Case block type. + parNode = node.firstChildOfType(tokens.PARENTESIZED_EXPR) + lblNode = node.firstChildOfType(tokens.SWITCH_BLOCK_LABEL_LIST) + caseNodes = lblNode.children + # empty switch statement + if not len(caseNodes): + return + # we have at least one node... + parExpr = self.factory.expr(parent=self) + parExpr.walk(parNode, memo) + eqFs = FS.l + ' == ' + FS.r + for caseIdx, caseNode in enumerate(caseNodes): + isDefault, isFirst = caseNode.type==tokens.DEFAULT, caseIdx==0 + + if isFirst: + caseExpr = self.factory.statement('if', fs=FS.lsrc, parent=self) + elif not isDefault: + caseExpr = self.factory.statement('elif', fs=FS.lsrc, parent=self) + elif isDefault: + caseExpr = self.factory.statement('else', fs=FS.lc, parent=self) + + if not isDefault: + right = self.factory.expr(parent=parExpr) + right.walk(caseNode.firstChildOfType(tokens.EXPR), memo) + caseExpr.expr.right = self.factory.expr(left=parExpr, right=right, fs=eqFs) + caseContent = self.factory.methodContent(parent=self) + for child in caseNode.children[1:]: + caseContent.walk(child, memo) + if not caseNode.children[1:]: + self.factory.expr(left='pass', parent=caseContent) + if isDefault: + if isFirst: + caseExpr.expr.right = 'True' + caseContent = self.factory.methodContent(parent=self) + for child in caseNode.children: + caseContent.walk(child, memo) + if not caseNode.children: + self.factory.expr(left='pass', parent=caseContent) + self.children.remove(parExpr) + + def acceptSynchronized(self, node, memo): + """ Accept and process a synchronized statement (not a modifier). """ + module = self.parents(lambda x:x.isModule).next() + module.needsSyncHelpers = True + if node.parent.type == tokens.MODIFIER_LIST: + # Skip any synchronized modifier + return + lockName = self.configHandler('LockFunction', 'Name', 'lock_for_object') + withFs = '{left} %s({right}):' % lockName + sync = self.factory.statement('with', fs=withFs, parent=self) + sync.expr.walk(node.children[0], memo) + sync.walk(node.children[1], memo) + + def acceptThrow(self, node, memo): + """ Accept and process a throw statement. """ + throw = self.factory.statement('raise', fs=FS.lsr, parent=self) + throw.expr.walk(node.children[0], memo) + + def acceptTry(self, node, memo): + """ Accept and process a try/catch block. """ + children = node.children + tryNode = children[0] + if len(children) == 3: + catchClausesNode, finNode = children[1:3] + elif len(children) == 2: + catchClausesNode = finNode = None + if children[1].type == tokens.CATCH_CLAUSE_LIST: + catchClausesNode = children[1] + else: + finNode = children[1] + tryStat = self.factory.statement('try', fs=FS.lc, parent=self) + tryStat.walk(tryNode, memo) + if catchClausesNode: + for catchNode in catchClausesNode.children: + exStat = self.factory.statement('except', fs=FS.lsrc, parent=self) + exStat.walk(catchNode, memo) + if finNode: + finStat = self.factory.statement('finally', fs=FS.lc, parent=self) + finStat.walk(finNode, memo) + + goodReturnParents = ( + tokens.BLOCK_SCOPE, + ) + + def acceptReturn(self, node, memo): + """ Creates a new return expression. """ + # again, this works but isn't as precise as it should be + if node.parentType: # in self.goodReturnParents: + expr = self.factory.expr(left='return', parent=self) + if node.children: + expr.fs, expr.right = FS.lsr, self.factory.expr(parent=expr) + expr.right.walk(node, memo) + return expr + + def acceptWhile(self, node, memo): + """ Accept and process a while block. """ + # WHILE - PARENTESIZED_EXPR - BLOCK_SCOPE + parNode, blkNode = node.children + whileStat = self.factory.statement('while', fs=FS.lsrc, parent=self) + whileStat.expr.walk(parNode, memo) + if not blkNode.children: + self.factory.expr(left='pass', parent=whileStat) + else: + whileStat.walk(blkNode, memo) + + +class Method(ModifiersAcceptor, MethodContent): + """ Method -> accepts AST branches for method-level objects. """ + + def acceptFormalParamStdDecl(self, node, memo): + """ Accept and process a single parameter declaration. """ + ident = node.firstChildOfType(tokens.IDENT) + ptype = self.nodeTypeToString(node) + self.parameters.append(self.makeParam(ident.text, ptype)) + return self + + def acceptFormalParamVarargDecl(self, node, memo): + """ Accept and process a var arg declaration. """ + ident = node.firstChildOfType(tokens.IDENT) + param = {'name':'*{0}'.format(ident.text), 'type':'A'} + self.parameters.append(param) + return self + + +class Expression(Base): + """ Expression -> accepts trees for expression objects. """ + + def nodeTextExpr(self, node, memo): + """ Assigns node text to the left side of this expression. """ + self.left = node.text + + acceptCharacterLiteral = nodeTextExpr + acceptStringLiteral = nodeTextExpr + acceptFloatingPointLiteral = nodeTextExpr + acceptDecimalLiteral = nodeTextExpr + acceptHexLiteral = nodeTextExpr + acceptOctalLiteral = nodeTextExpr + acceptTrue = nodeTextExpr + acceptFalse = nodeTextExpr + acceptNull = nodeTextExpr + + def nodeOpExpr(self, node, memo): + """ Accept and processes an operator expression. """ + factory = self.factory.expr + self.fs = FS.l + ' ' + node.text + ' ' + FS.r + self.left, self.right = visitors = factory(parent=self), factory(parent=self) + self.zipWalk(node.children, visitors, memo) + + acceptAnd = nodeOpExpr + acceptAndAssign = nodeOpExpr + acceptAssign = nodeOpExpr + acceptDivAssign = nodeOpExpr + acceptEqual = nodeOpExpr + acceptGreaterOrEqual = nodeOpExpr + acceptGreaterThan = nodeOpExpr + acceptLessOrEqual = nodeOpExpr + acceptLessThan = nodeOpExpr + acceptMinusAssign = nodeOpExpr + acceptMod = nodeOpExpr + acceptModAssign = nodeOpExpr + acceptNotEqual = nodeOpExpr + acceptOr = nodeOpExpr + acceptOrAssign = nodeOpExpr + acceptPlusAssign = nodeOpExpr + acceptShiftLeft = nodeOpExpr + acceptShiftLeftAssign = nodeOpExpr + acceptShiftRight = nodeOpExpr + acceptShiftRightAssign = nodeOpExpr + acceptStarAssign = nodeOpExpr + acceptXor = nodeOpExpr + acceptXorAssign = nodeOpExpr + + def makeNodePreformattedExpr(fs): + """ Make an accept method for expressions with a predefined format string. """ + def acceptPreformatted(self, node, memo): + expr = self.factory.expr + self.fs = fs + self.left, self.right = vs = expr(parent=self), expr(parent=self) + self.zipWalk(node.children, vs, memo) + return acceptPreformatted + + acceptArrayElementAccess = makeNodePreformattedExpr(FS.l + '[' + FS.r + ']') + acceptDiv = makeNodePreformattedExpr(FS.l + ' / ' + FS.r) + acceptLogicalAnd = makeNodePreformattedExpr(FS.l + ' and ' + FS.r) + acceptLogicalNot = makeNodePreformattedExpr('not ' + FS.l) + acceptLogicalOr = makeNodePreformattedExpr(FS.l + ' or ' + FS.r) + acceptMinus = makeNodePreformattedExpr(FS.l + ' - ' + FS.r) + acceptNot = makeNodePreformattedExpr('~' + FS.l) + acceptPlus = makeNodePreformattedExpr(FS.l + ' + ' + FS.r) + acceptStar = makeNodePreformattedExpr(FS.l + ' * ' + FS.r) + acceptUnaryMinus = makeNodePreformattedExpr('-' + FS.l) + acceptUnaryPlus = makeNodePreformattedExpr('+' + FS.l) + + def acceptCastExpr(self, node, memo): + """ Accept and process a cast expression. """ + # If the type of casting is a primitive type, + # then do the cast, else drop it. + factory = self.factory.expr + typeTok = node.firstChildOfType(tokens.TYPE) + typeIdent = typeTok.firstChild() + typeName = typeIdent.text + if typeIdent.type == tokens.QUALIFIED_TYPE_IDENT: + typeName = typeIdent.firstChild().text + + if typeName in tokens.primitiveTypeNames: + # Cast using the primitive type constructor + self.fs = typeName + '(' + FS.r + ')' + else: + handler = self.configHandler('Cast') + if handler: + handler(self, node) + else: + warn('No handler to perform cast of non-primitive type %s.', typeName) + self.left, self.right = visitors = factory(parent=self), factory(parent=self) + self.zipWalk(node.children, visitors, memo) + + def makeAcceptPrePost(suffix, pre): + """ Make an accept method for pre- and post- assignment expressions. """ + def acceptPrePost(self, node, memo): + factory = self.factory.expr + if node.withinExpr: + name = node.firstChildOfType(tokens.IDENT).text + handler = self.configHandler('VariableNaming') + rename = handler(name) + block = self.parents(lambda x:x.isMethod).next() + if pre: + left = name + else: + left = rename + block.adopt(factory(fs=FS.l+' = '+FS.r, left=rename, right=name)) + self.left = factory(parent=self, fs=FS.l, left=left) + block.adopt(factory(fs=FS.l + suffix, left=name)) + else: + self.fs = FS.l + suffix + self.left, self.right = vs = factory(parent=self), factory(parent=self) + self.zipWalk(node.children, vs, memo) + return acceptPrePost + + acceptPostInc = makeAcceptPrePost(' += 1', pre=False) + acceptPreInc = makeAcceptPrePost(' += 1', pre=True) + acceptPostDec = makeAcceptPrePost(' -= 1', pre=False) + acceptPreDec = makeAcceptPrePost(' -= 1', pre=True) + + def acceptBitShiftRight(self, node, memo): + """ Accept and process a bit shift right expression. """ + factory = self.factory.expr + self.fs = 'bsr(' + FS.l + ', ' + FS.r + ')' + self.left, self.right = visitors = factory(parent=self), factory() + self.zipWalk(node.children, visitors, memo) + module = self.parents(lambda x:x.isModule).next() + module.needsBsrFunc = True + + def acceptBitShiftRightAssign(self, node, memo): + """ Accept and process a bit shift right expression with assignment. """ + factory = self.factory.expr + self.fs = FS.l + ' = bsr(' + FS.l + ', ' + FS.r + ')' + self.left, self.right = visitors = factory(parent=self), factory() + self.zipWalk(node.children, visitors, memo) + module = self.parents(lambda x:x.isModule).next() + module.needsBsrFunc = True + + def acceptClassConstructorCall(self, node, memo): + """ Accept and process a class constructor call. """ + self.acceptMethodCall(node, memo) + typeIdent = node.firstChildOfType(tokens.QUALIFIED_TYPE_IDENT) + if typeIdent and typeIdent.children: + names = [self.altIdent(child.text) for child in typeIdent.children] + self.left = '.'.join(names) + + def acceptDot(self, node, memo): + """ Accept and process a dotted expression. """ + expr = self.factory.expr + self.fs = FS.l + '.' + FS.r + self.left, self.right = visitors = expr(parent=self), expr() + self.zipWalk(node.children, visitors, memo) + + def acceptExpr(self, node, memo): + """ Create a new expression within this one. """ + return self.pushRight() + + def acceptIdent(self, node, memo): + """ Accept and process an ident expression. """ + self.left = self.altIdent(node.text) + + def acceptInstanceof(self, node, memo): + """ Accept and process an instanceof expression. """ + self.fs = 'isinstance({right}, ({left}, ))' + self.right = self.factory.expr(parent=self) + self.right.walk(node.firstChildOfType(tokens.IDENT), memo) + self.left = self.factory.expr(parent=self) + self.left.walk(node.firstChildOfType(tokens.TYPE), memo) + + def acceptMethodCall(self, node, memo): + """ Accept and process a method call. """ + # NB: this creates one too many expression levels. + expr = self.factory.expr + self.fs = FS.l + '(' + FS.r + ')' + self.left = expr(parent=self) + self.left.walk(node.firstChild(), memo) + children = node.firstChildOfType(tokens.ARGUMENT_LIST).children + self.right = arg = expr(parent=self) + for child in children: + fs = FS.r + (', ' if child is not children[-1] else '') + arg.left = expr(fs=fs, parent=self) + arg.left.walk(child, memo) + arg.right = arg = expr(parent=self) + + skipParensParents = ( + tokens.IF, + tokens.WHILE, + tokens.SWITCH, + tokens.SYNCHRONIZED, + ) + + def acceptParentesizedExpr(self, node, memo): + if node.parent.type not in self.skipParensParents: + right = self.pushRight() + right.fs = '(' + FS.lr + ')' + return right + return self + + def acceptThisConstructorCall(self, node, memo): + """ Accept and process a 'this(...)' constructor call. """ + self.acceptMethodCall(node, memo) + self.left = 'self.__init__' + + def acceptStaticArrayCreator(self, node, memo): + """ Accept and process a static array expression. """ + self.right = self.factory.expr(fs='[None] * {left}') + self.right.left = self.factory.expr() + self.right.left.walk(node.firstChildOfType(tokens.EXPR), memo) + + def acceptSuper(self, node, memo): + """ Accept and process a super expression. """ + cls = self.parents(lambda c:c.isClass).next() + self.right = self.factory.expr(fs='super({name}, self)'.format(name=cls.name)) + + def acceptSuperConstructorCall(self, node, memo): + """ Accept and process a super constructor call. """ + cls = self.parents(lambda c:c.isClass).next() + fs = 'super(' + FS.l + ', self).__init__(' + FS.r + ')' + self.right = self.factory.expr(fs=fs, left=cls.name) + return self.right + + def acceptThis(self, node, memo): + """ Accept and process a 'this' expression. """ + self.pushRight('self') + + def acceptQuestion(self, node, memo): + """ Accept and process a terinary expression. """ + expr = self.factory.expr + self.fs = FS.l + ' if ' + FS.r + self.left = expr(parent=self) + self.right = expr(fs=FS.l+' else '+FS.r, parent=self) + self.right.left = expr(parent=self.right) + self.right.right = expr(parent=self.right) + visitors = (self.right.left, self.left, self.right.right) + self.zipWalk(node.children, visitors, memo) + + def acceptVoid(self, node, memo): + """ Accept and process a the void half of a void.class expression. """ + self.pushRight('None') + + def acceptClass(self, node, memo): + """ Accept and process a .class expression. """ + self.pushRight('__class__') + + def pushRight(self, value=''): + """ Creates a new right expression, sets it, and returns it. """ + self.right = self.factory.expr(left=value, parent=self) + return self.right + + +class Comment(Expression): + """ Comment -> implemented for type building in __init__.py. """ + + +class Statement(MethodContent): + """ Statement -> accept AST branches for statement objects. """ diff --git a/build/lib.linux-x86_64-2.7/java2python/config/__init__.py b/build/lib.linux-x86_64-2.7/java2python/config/__init__.py new file mode 100644 index 0000000..2aa8387 --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/config/__init__.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.config -> subpackage for run-time configuration. + +from functools import reduce +from imp import load_source +from os import path + + +class Config(object): + """ Config -> wraps multiple configuration modules. """ + + def __init__(self, names): + self.configs = [self.load(name) for name in names] + + def every(self, key, default=None): + """ Returns the value at the given key from each config module. """ + return [getattr(config, key, default) for config in self.configs] + + def last(self, key, default=None): + """ Returns the value at the key from the last config defining it. """ + for config in reversed(self.configs): + if hasattr(config, key): + return getattr(config, key) + return default + + @staticmethod + def load(name): + """ Imports and returns a module from dotted form or filename. """ + if path.exists(name) and path.isfile(name): + mod = load_source(str(hash(name)), name) + else: + mod = reduce(getattr, name.split('.')[1:], __import__(name)) + return mod diff --git a/build/lib.linux-x86_64-2.7/java2python/config/default.py b/build/lib.linux-x86_64-2.7/java2python/config/default.py new file mode 100644 index 0000000..92c4a27 --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/config/default.py @@ -0,0 +1,251 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# This is the default configuration file for java2python. Unless +# explicity disabled with the '-n' or '--nodefaults' option, the j2py +# script will import this module for runtime configuration. + +from java2python.mod import basic, transform +from java2python.lang.selector import * + + +# Leading indent character or characters. Four spaces are used +# because that is the recommendation of PEP 8. +indentPrefix = ' ' * 4 + + +# Prefix character or characters for comments. The hash+space is +# recommended by PEP 8. +commentPrefix = '# ' + + +# These values are strings or generators that yield strings +# for a module prologue. +modulePrologueHandlers = [ + basic.shebangLine, + basic.simpleDocString, + 'from __future__ import print_function', + basic.maybeBsr, + basic.maybeAbstractHelpers, + basic.maybeSyncHelpers, +] + + +# These generators yield lines for a module epilogue. +moduleEpilogueHandlers = [ + basic.scriptMainStanza, +] + + +# These generators yield (possibly modified) source strings for a +# module. The `basic.outputSubs` handler references the list of +# regular expression substitutions near the end of this module. +moduleOutputHandlers = [ + basic.outputSubs, +] + + +# These generators yield doc strings for a class. +classHeadHandlers = [ + basic.simpleDocString, +] + +methodParamHandlers = [ + basic.defaultParams, +] + +# This is the name of the callable used to construct locks for an object with +# the synchronized keyword. +methodLockFunctionName = 'lock_for_object' + +classBaseHandlers = [ + basic.defaultBases, +] + +interfaceBaseHandlers = [ + basic.defaultBases, +] + +# These generators are called after a class has been completely +# generated. The class content sorter sorts the methods of a class by +# name. It's commented out because its output differs so greatly +# from its input, and because it's really not very useful. +classPostWalkHandlers = [ + basic.moveStaticExpressions, + ## basic.classContentSort, +] + + +enumHeadHandlers = [ + basic.simpleDocString, +] + + +interfaceHeadHandlers = [ + basic.simpleDocString, + '__metaclass__ = ABCMeta', +] + + +interfacePostWalkMutators = [ +] + + +methodHeadHandlers = [ + basic.simpleDocString, +] + + +methodPrologueHandlers = [ + basic.maybeAbstractMethod, + basic.maybeClassMethod, + basic.overloadedClassMethods, + # NB: synchronized should come after classmethod + basic.maybeSynchronizedMethod, +] + + +# This handler creates enum values on enum classes after they've been +# defined. The handler tries to match Java semantics by using +# strings. Refer to the documentation for details. +enumValueHandler = basic.enumConstStrings + +# Alternatively, you can use this handler to construct enum values as +# integers. +#enumValueHandler = basic.enumConstInts + + +# When the compiler needs to make up a variable name (for example, to +# emulate assignment expressions), it calls this handler to produce a +# new one. +expressionVariableNamingHandler = basic.globalNameCounter + + +# This handler simply creates comments in the file for package +# declarations. +modulePackageDeclarationHandler = basic.commentedPackages + + +# This handler can be used instead to create __init__.py files for +# 'namespace packages' via pkgutil. +# modulePackageDeclarationHandler = basic.namespacePackages + + +# This handler is turns java imports into python imports. No mapping +# of packages is performed: +# moduleImportDeclarationHandler = basic.simpleImports + +# This import decl. handler can be used instead to produce comments +# instead of import statements: +# moduleImportDeclarationHandler = basic.commentedImports + +# The AST transformation function uses these declarations to modify an +# AST before compiling it to python source. Having these declarations +# in a config file gives clients an opportunity to change the +# transformation behavior. + +astTransforms = [ + (Type('NULL'), transform.null2None), + (Type('FALSE'), transform.false2False), + (Type('TRUE'), transform.true2True), + (Type('IDENT'), transform.keywordSafeIdent), + + (Type('DECIMAL_LITERAL'), transform.syntaxSafeDecimalLiteral), + (Type('FLOATING_POINT_LITERAL'), transform.syntaxSafeFloatLiteral), + + (Type('TYPE') > Type('BOOLEAN'), transform.typeSub), + (Type('TYPE') > Type('BYTE'), transform.typeSub), + (Type('TYPE') > Type('CHAR'), transform.typeSub), + (Type('TYPE') > Type('FLOAT'), transform.typeSub), + (Type('TYPE') > Type('INT'), transform.typeSub), + (Type('TYPE') > Type('SHORT'), transform.typeSub), + (Type('TYPE') > Type('LONG'), transform.typeSub), + (Type('TYPE') > Type('DOUBLE'), transform.typeSub), + + (Type('METHOD_CALL') > Type('DOT') > Type('IDENT', 'length'), + transform.lengthToLen), + + (Type('METHOD_CALL') > Type('DOT') > ( + Type('IDENT', 'String') + + Type('IDENT', 'format') + ), + transform.formatString), + + (Type('TYPE') > Type('QUALIFIED_TYPE_IDENT') > Type('IDENT'), + transform.typeSub), + +] + + +# not implemented: + +# minimum parameter count to trigger indentation of parameter names +# in method declarations. set to 0 to disable. +#minIndentParams = 5 + +# Specifies handler for cast operations of non-primitive types are handled +# (primitive types are automatically handled). Use basic.castDrop to leave +# cast expressions out of generated source. Use basic.castCtor to transform +# casts into constructor calls. Or you can specify a function of your own. +expressionCastHandler = basic.castDrop + + +# Values below are used by the handlers. They're here for +# convenience. + + +# module output subs. +moduleOutputSubs = [ + (r'System\.out\.println\((.*)\)', r'print(\1)'), + (r'System\.out\.print_\((.*?)\)', r'print(\1, end="")'), + (r'(.*?)\.equals\((.*?)\)', r'\1 == \2'), + (r'(.*?)\.equalsIgnoreCase\((.*?)\)', r'\1.lower() == \2.lower()'), + (r'([\w.]+)\.size\(\)', r'len(\1)'), + #(r'(\w+)\.get\((.*?)\)', r'\1[\2]'), + (r'(\s)(\S*?)(\.toString\(\))', r'\1\2.__str__()'), + (r'(\s)def toString', r'\1def __str__'), + (r'(\s)(\S*?)(\.toLowerCase\(\))', r'\1\2.lower()'), + (r'(.*?)IndexOutOfBoundsException\((.*?)\)', r'\1IndexError(\2)'), + (r'\.__class__\.getName\(\)', '.__class__.__name__'), + (r'\.getClass\(\)', '.__class__'), + (r'\.getName\(\)', '.__name__'), + (r'\.getInterfaces\(\)', '.__bases__'), + (r'String\.valueOf\((.*?)\)', r'str(\1)'), + #(r'(\s)(\S*?)(\.toString\(\))', r'\1str(\2)'), + (r'Math\.', ''), +] + + +typeSubs = { + 'Boolean' : 'bool', + 'boolean' : 'bool', + + 'Byte' : 'int', + 'byte' : 'int', + + 'Char' : 'str', + 'char' : 'str', + + 'Integer' : 'int', + 'int' : 'int', + + 'Short' : 'int', + 'short' : 'int', + + 'Long' : 'long', + 'long' : 'long', + + 'Float' : 'float', + 'float' : 'float', + + 'Double' : 'float', + 'double' : 'float', + + 'String' : 'str', + 'java.lang.String' : 'str', + + 'Object' : 'object', + + 'IndexOutOfBoundsException' : 'IndexError', + 'IOException': 'IOError', + } diff --git a/build/lib.linux-x86_64-2.7/java2python/lang/Java.g b/build/lib.linux-x86_64-2.7/java2python/lang/Java.g new file mode 100644 index 0000000..32f70b6 --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/lang/Java.g @@ -0,0 +1,1092 @@ +/** + * An ANTLRv3 capable Java 1.5 grammar for building ASTs. + * BSD licence + * + * Copyright (c) 2007-2008 by HABELITZ Software Developments + * + * All rights reserved. + * + * http://www.habelitz.com + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY HABELITZ SOFTWARE DEVELOPMENTS ('HSD') ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL 'HSD' BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +grammar Java; + +options { + backtrack=true; + memoize=true; + language=Python; + output=AST; + ASTLabelType=CommonTree; +} + + + +tokens { + + // operators and other special chars + + AND = '&' ; + AND_ASSIGN = '&=' ; + ASSIGN = '=' ; + AT = '@' ; + BIT_SHIFT_RIGHT = '>>>' ; + BIT_SHIFT_RIGHT_ASSIGN = '>>>=' ; + COLON = ':' ; + COMMA = ',' ; + DEC = '--' ; + DIV = '/' ; + DIV_ASSIGN = '/=' ; + DOT = '.' ; + DOTSTAR = '.*' ; + ELLIPSIS = '...' ; + EQUAL = '==' ; + GREATER_OR_EQUAL = '>=' ; + GREATER_THAN = '>' ; + INC = '++' ; + LBRACK = '[' ; + LCURLY = '{' ; + LESS_OR_EQUAL = '<=' ; + LESS_THAN = '<' ; + LOGICAL_AND = '&&' ; + LOGICAL_NOT = '!' ; + LOGICAL_OR = '||' ; + LPAREN = '(' ; + MINUS = '-' ; + MINUS_ASSIGN = '-=' ; + MOD = '%' ; + MOD_ASSIGN = '%=' ; + NOT = '~' ; + NOT_EQUAL = '!=' ; + OR = '|' ; + OR_ASSIGN = '|=' ; + PLUS = '+' ; + PLUS_ASSIGN = '+=' ; + QUESTION = '?' ; + RBRACK = ']' ; + RCURLY = '}' ; + RPAREN = ')' ; + SEMI = ';' ; + SHIFT_LEFT = '<<' ; + SHIFT_LEFT_ASSIGN = '<<=' ; + SHIFT_RIGHT = '>>' ; + SHIFT_RIGHT_ASSIGN = '>>=' ; + STAR = '*' ; + STAR_ASSIGN = '*=' ; + XOR = '^' ; + XOR_ASSIGN = '^=' ; + + // keywords + + ABSTRACT = 'abstract' ; + ASSERT = 'assert' ; + BOOLEAN = 'boolean' ; + BREAK = 'break' ; + BYTE = 'byte' ; + CASE = 'case' ; + CATCH = 'catch' ; + CHAR = 'char' ; + CLASS = 'class' ; + CONTINUE = 'continue' ; + DEFAULT = 'default' ; + DO = 'do' ; + DOUBLE = 'double' ; + ELSE = 'else' ; + ENUM = 'enum' ; + EXTENDS = 'extends' ; + FALSE = 'false' ; + FINAL = 'final' ; + FINALLY = 'finally' ; + FLOAT = 'float' ; + FOR = 'for' ; + IF = 'if' ; + IMPLEMENTS = 'implements' ; + INSTANCEOF = 'instanceof' ; + INTERFACE = 'interface' ; + IMPORT = 'import' ; + INT = 'int' ; + LONG = 'long' ; + NATIVE = 'native' ; + NEW = 'new' ; + NULL = 'null' ; + PACKAGE = 'package' ; + PRIVATE = 'private' ; + PROTECTED = 'protected' ; + PUBLIC = 'public' ; + RETURN = 'return' ; + SHORT = 'short' ; + STATIC = 'static' ; + STRICTFP = 'strictfp' ; + SUPER = 'super' ; + SWITCH = 'switch' ; + SYNCHRONIZED = 'synchronized' ; + THIS = 'this' ; + THROW = 'throw' ; + THROWS = 'throws' ; + TRANSIENT = 'transient' ; + TRUE = 'true' ; + TRY = 'try' ; + VOID = 'void' ; + VOLATILE = 'volatile' ; + WHILE = 'while' ; + + // tokens for imaginary nodes + + ANNOTATION_INIT_ARRAY_ELEMENT; + ANNOTATION_INIT_BLOCK; + ANNOTATION_INIT_DEFAULT_KEY; + ANNOTATION_INIT_KEY_LIST; + ANNOTATION_LIST; + ANNOTATION_METHOD_DECL; + ANNOTATION_SCOPE; + ANNOTATION_TOP_LEVEL_SCOPE; + ARGUMENT_LIST; + ARRAY_DECLARATOR; + ARRAY_DECLARATOR_LIST; + ARRAY_ELEMENT_ACCESS; + ARRAY_INITIALIZER; + BLOCK_SCOPE; + CAST_EXPR; + CATCH_CLAUSE_LIST; + CLASS_CONSTRUCTOR_CALL; + CLASS_INSTANCE_INITIALIZER; + CLASS_STATIC_INITIALIZER; + CLASS_TOP_LEVEL_SCOPE; + CONSTRUCTOR_DECL; + ENUM_TOP_LEVEL_SCOPE; + EXPR; + EXTENDS_BOUND_LIST; + EXTENDS_CLAUSE; + FOR_CONDITION; + FOR_EACH; + FOR_INIT; + FOR_UPDATE; + FORMAL_PARAM_LIST; + FORMAL_PARAM_STD_DECL; + FORMAL_PARAM_VARARG_DECL; + FUNCTION_METHOD_DECL; + GENERIC_TYPE_ARG_LIST; + GENERIC_TYPE_PARAM_LIST; + INTERFACE_TOP_LEVEL_SCOPE; + IMPLEMENTS_CLAUSE; + LABELED_STATEMENT; + LOCAL_MODIFIER_LIST; + JAVA_SOURCE; + METHOD_CALL; + MODIFIER_LIST; + PARENTESIZED_EXPR; + POST_DEC; + POST_INC; + PRE_DEC; + PRE_INC; + QUALIFIED_TYPE_IDENT; + STATIC_ARRAY_CREATOR; + SUPER_CONSTRUCTOR_CALL; + SWITCH_BLOCK_LABEL_LIST; + THIS_CONSTRUCTOR_CALL; + THROWS_CLAUSE; + TYPE; + UNARY_MINUS; + UNARY_PLUS; + VAR_DECLARATION; + VAR_DECLARATOR; + VAR_DECLARATOR_LIST; + VOID_METHOD_DECL; +} + + +javaSource + : compilationUnit + -> ^(JAVA_SOURCE compilationUnit) + ; + +compilationUnit + : annotationList + packageDeclaration? + importDeclaration* + typeDecls* + ; + +typeDecls + : typeDeclaration + | SEMI! + ; + +packageDeclaration + : PACKAGE^ qualifiedIdentifier SEMI! + ; + +importDeclaration + : IMPORT^ STATIC? qualifiedIdentifier DOTSTAR? SEMI! + ; + +typeDeclaration + : modifierList! + ( classTypeDeclaration[$modifierList.tree] + | interfaceTypeDeclaration[$modifierList.tree] + | enumTypeDeclaration[$modifierList.tree] + | annotationTypeDeclaration[$modifierList.tree] + ) + ; + +classTypeDeclaration[modifiers] + : CLASS IDENT genericTypeParameterList? classExtendsClause? implementsClause? classBody + -> ^(CLASS {$modifiers} IDENT genericTypeParameterList? classExtendsClause? + implementsClause? classBody) + ; + +classExtendsClause + : EXTENDS type + -> ^(EXTENDS_CLAUSE[$EXTENDS, "EXTENDS_CLAUSE"] type) + ; + +interfaceExtendsClause + : EXTENDS typeList + -> ^(EXTENDS_CLAUSE[$EXTENDS, "EXTENDS_CLAUSE"] typeList) + ; + +implementsClause + : IMPLEMENTS typeList + -> ^(IMPLEMENTS_CLAUSE[$IMPLEMENTS, "IMPLEMENTS_CLAUSE"] typeList) + ; + +genericTypeParameterList + : LESS_THAN genericTypeParameter (COMMA genericTypeParameter)* genericTypeListClosing + -> ^(GENERIC_TYPE_PARAM_LIST[$LESS_THAN, "GENERIC_TYPE_PARAM_LIST"] genericTypeParameter+) + ; + +genericTypeListClosing // This 'trick' is fairly dirty - if there's some time a better solution should + // be found to resolve the problem with nested generic type parameter lists + // (i.e. > for generic type parameters or > for + // generic type arguments etc). + : GREATER_THAN + | SHIFT_RIGHT + | BIT_SHIFT_RIGHT + | // nothing + ; + +genericTypeParameter + : IDENT bound? + -> ^(IDENT bound?) + ; + +bound + : EXTENDS type (AND type)* + -> ^(EXTENDS_BOUND_LIST[$EXTENDS, "EXTENDS_BOUND_LIST"] type+) + ; + +enumTypeDeclaration[modifiers] + : ENUM IDENT implementsClause? enumBody + -> ^(ENUM {$modifiers} IDENT implementsClause? enumBody) + ; + +enumBody + : LCURLY enumScopeDeclarations RCURLY + -> ^(ENUM_TOP_LEVEL_SCOPE[$LCURLY, "ENUM_TOP_LEVEL_SCOPE"] enumScopeDeclarations) + ; + +enumScopeDeclarations + : enumConstants (COMMA!)? enumClassScopeDeclarations? + ; + +enumClassScopeDeclarations + : SEMI classScopeDeclarations* + -> ^(CLASS_TOP_LEVEL_SCOPE[$SEMI, "CLASS_TOP_LEVEL_SCOPE"] classScopeDeclarations*) + ; + +enumConstants + : enumConstant (COMMA! enumConstant)* + ; + +enumConstant + : annotationList IDENT^ arguments? classBody? + ; + +interfaceTypeDeclaration[modifiers] + : INTERFACE IDENT genericTypeParameterList? interfaceExtendsClause? interfaceBody + -> ^(INTERFACE {$modifiers} IDENT genericTypeParameterList? interfaceExtendsClause? interfaceBody) + ; + +typeList + : type (COMMA! type)* + ; + +classBody + : LCURLY classScopeDeclarations* RCURLY + -> ^(CLASS_TOP_LEVEL_SCOPE[$LCURLY, "CLASS_TOP_LEVEL_SCOPE"] classScopeDeclarations*) + ; + +interfaceBody + : LCURLY interfaceScopeDeclarations* RCURLY + -> ^(INTERFACE_TOP_LEVEL_SCOPE[$LCURLY, "CLASS_TOP_LEVEL_SCOPE"] interfaceScopeDeclarations*) + ; + +classScopeDeclarations + : block -> ^(CLASS_INSTANCE_INITIALIZER block) + | STATIC block -> ^(CLASS_STATIC_INITIALIZER[$STATIC, "CLASS_STATIC_INITIALIZER"] block) + | modifierList + ( genericTypeParameterList? + ( type IDENT formalParameterList arrayDeclaratorList? throwsClause? (block | SEMI) + -> ^(FUNCTION_METHOD_DECL modifierList genericTypeParameterList? type IDENT formalParameterList arrayDeclaratorList? throwsClause? block?) + | VOID IDENT formalParameterList throwsClause? (block | SEMI) + -> ^(VOID_METHOD_DECL modifierList genericTypeParameterList? IDENT formalParameterList throwsClause? block?) + | ident=IDENT formalParameterList throwsClause? block + -> ^(CONSTRUCTOR_DECL[$ident, "CONSTRUCTOR_DECL"] modifierList genericTypeParameterList? formalParameterList throwsClause? block) + ) + | type classFieldDeclaratorList SEMI + -> ^(VAR_DECLARATION modifierList type classFieldDeclaratorList) + ) + | typeDeclaration + | SEMI! + ; + +interfaceScopeDeclarations + : modifierList + ( genericTypeParameterList? + ( type IDENT formalParameterList arrayDeclaratorList? throwsClause? SEMI + -> ^(FUNCTION_METHOD_DECL modifierList genericTypeParameterList? type IDENT formalParameterList arrayDeclaratorList? throwsClause?) + | VOID IDENT formalParameterList throwsClause? SEMI + -> ^(VOID_METHOD_DECL modifierList genericTypeParameterList? IDENT formalParameterList throwsClause?) + ) + | type interfaceFieldDeclaratorList SEMI + -> ^(VAR_DECLARATION modifierList type interfaceFieldDeclaratorList) + ) + | typeDeclaration + | SEMI! + ; + +classFieldDeclaratorList + : classFieldDeclarator (COMMA classFieldDeclarator)* + -> ^(VAR_DECLARATOR_LIST classFieldDeclarator+) + ; + +classFieldDeclarator + : variableDeclaratorId (ASSIGN variableInitializer)? + -> ^(VAR_DECLARATOR variableDeclaratorId variableInitializer?) + ; + +interfaceFieldDeclaratorList + : interfaceFieldDeclarator (COMMA interfaceFieldDeclarator)* + -> ^(VAR_DECLARATOR_LIST interfaceFieldDeclarator+) + ; + +interfaceFieldDeclarator + : variableDeclaratorId ASSIGN variableInitializer + -> ^(VAR_DECLARATOR variableDeclaratorId variableInitializer) + ; + +variableDeclaratorId + : IDENT^ arrayDeclaratorList? + ; + +variableInitializer + : arrayInitializer + | expression + ; + +arrayDeclarator + : LBRACK RBRACK + -> ^(ARRAY_DECLARATOR) + ; + +arrayDeclaratorList + : arrayDeclarator+ + -> ^(ARRAY_DECLARATOR_LIST arrayDeclarator+) + ; + +arrayInitializer + : LCURLY (variableInitializer (COMMA variableInitializer)* COMMA?)? RCURLY + -> ^(ARRAY_INITIALIZER[$LCURLY, "ARRAY_INITIALIZER"] variableInitializer*) + ; + +throwsClause + : THROWS qualifiedIdentList + -> ^(THROWS_CLAUSE[$THROWS, "THROWS_CLAUSE"] qualifiedIdentList) + ; + +modifierList + : modifier* + -> ^(MODIFIER_LIST modifier*) + ; + +modifier + : PUBLIC + | PROTECTED + | PRIVATE + | STATIC + | ABSTRACT + | NATIVE + | SYNCHRONIZED + | TRANSIENT + | VOLATILE + | STRICTFP + | localModifier + ; + +localModifierList + : localModifier* + -> ^(LOCAL_MODIFIER_LIST localModifier*) + ; + +localModifier + : FINAL + | annotation + ; + +type + : simpleType + | objectType + ; + +simpleType // including static arrays of simple type elements + : primitiveType arrayDeclaratorList? + -> ^(TYPE primitiveType arrayDeclaratorList?) + ; + +objectType // including static arrays of object type reference elements + : qualifiedTypeIdent arrayDeclaratorList? + -> ^(TYPE qualifiedTypeIdent arrayDeclaratorList?) + ; + +objectTypeSimplified + : qualifiedTypeIdentSimplified arrayDeclaratorList? + -> ^(TYPE qualifiedTypeIdentSimplified arrayDeclaratorList?) + ; + +qualifiedTypeIdent + : typeIdent (DOT typeIdent)* + -> ^(QUALIFIED_TYPE_IDENT typeIdent+) + ; + +qualifiedTypeIdentSimplified + : typeIdentSimplified (DOT typeIdentSimplified)* + -> ^(QUALIFIED_TYPE_IDENT typeIdentSimplified+) + ; + +typeIdent + : IDENT^ genericTypeArgumentList? + ; + +typeIdentSimplified + : IDENT^ genericTypeArgumentListSimplified? + ; + +primitiveType + : BOOLEAN + | CHAR + | BYTE + | SHORT + | INT + | LONG + | FLOAT + | DOUBLE + ; + +genericTypeArgumentList + : LESS_THAN genericTypeArgument (COMMA genericTypeArgument)* genericTypeListClosing + -> ^(GENERIC_TYPE_ARG_LIST[$LESS_THAN, "GENERIC_TYPE_ARG_LIST"] genericTypeArgument+) + ; + +genericTypeArgument + : type + | QUESTION genericWildcardBoundType? + -> ^(QUESTION genericWildcardBoundType?) + ; + +genericWildcardBoundType + : (EXTENDS | SUPER)^ type + ; + +genericTypeArgumentListSimplified + : LESS_THAN genericTypeArgumentSimplified (COMMA genericTypeArgumentSimplified)* genericTypeListClosing + -> ^(GENERIC_TYPE_ARG_LIST[$LESS_THAN, "GENERIC_TYPE_ARG_LIST"] genericTypeArgumentSimplified+) + ; + +genericTypeArgumentSimplified + : type + | QUESTION + ; + +qualifiedIdentList + : qualifiedIdentifier (COMMA! qualifiedIdentifier)* + ; + +formalParameterList + : LPAREN + ( // Contains at least one standard argument declaration and optionally a variable argument declaration. + formalParameterStandardDecl (COMMA formalParameterStandardDecl)* (COMMA formalParameterVarArgDecl)? + -> ^(FORMAL_PARAM_LIST[$LPAREN, "FORMAL_PARAM_LIST"] formalParameterStandardDecl+ formalParameterVarArgDecl?) + // Contains a variable argument declaration only. + | formalParameterVarArgDecl + -> ^(FORMAL_PARAM_LIST[$LPAREN, "FORMAL_PARAM_LIST"] formalParameterVarArgDecl) + // Contains nothing. + | -> ^(FORMAL_PARAM_LIST[$LPAREN, "FORMAL_PARAM_LIST"]) + ) + RPAREN + ; + +formalParameterStandardDecl + : localModifierList type variableDeclaratorId + -> ^(FORMAL_PARAM_STD_DECL localModifierList type variableDeclaratorId) + ; + +formalParameterVarArgDecl + : localModifierList type ELLIPSIS variableDeclaratorId + -> ^(FORMAL_PARAM_VARARG_DECL localModifierList type variableDeclaratorId) + ; + +qualifiedIdentifier + : ( IDENT -> IDENT + ) + ( DOT ident=IDENT -> ^(DOT $qualifiedIdentifier $ident) + )* + ; + +// ANNOTATIONS + +annotationList + : annotation* + -> ^(ANNOTATION_LIST annotation*) + ; + +annotation + : AT^ qualifiedIdentifier annotationInit? + ; + +annotationInit + : LPAREN annotationInitializers RPAREN + -> ^(ANNOTATION_INIT_BLOCK[$LPAREN, "ANNOTATION_INIT_BLOCK"] annotationInitializers) + ; + +annotationInitializers + : annotationInitializer (COMMA annotationInitializer)* + -> ^(ANNOTATION_INIT_KEY_LIST annotationInitializer+) + | annotationElementValue // implicite initialization of the annotation field 'value' + -> ^(ANNOTATION_INIT_DEFAULT_KEY annotationElementValue) + ; + +annotationInitializer + : IDENT^ ASSIGN! annotationElementValue + ; + +annotationElementValue + : annotationElementValueExpression + | annotation + | annotationElementValueArrayInitializer + ; + +annotationElementValueExpression + : conditionalExpression + -> ^(EXPR conditionalExpression) + ; + +annotationElementValueArrayInitializer + : LCURLY (annotationElementValue (COMMA annotationElementValue)*)? (COMMA)? RCURLY + -> ^(ANNOTATION_INIT_ARRAY_ELEMENT[$LCURLY, "ANNOTATION_ELEM_VALUE_ARRAY_INIT"] annotationElementValue*) + ; + +annotationTypeDeclaration[modifiers] + : AT INTERFACE IDENT annotationBody + -> ^(AT {$modifiers} IDENT annotationBody) + ; + +annotationBody + : LCURLY annotationScopeDeclarations* RCURLY + -> ^(ANNOTATION_TOP_LEVEL_SCOPE[$LCURLY, "CLASS_TOP_LEVEL_SCOPE"] annotationScopeDeclarations*) + ; + +annotationScopeDeclarations + : modifierList type + ( IDENT LPAREN RPAREN annotationDefaultValue? SEMI + -> ^(ANNOTATION_METHOD_DECL modifierList type IDENT annotationDefaultValue?) + | classFieldDeclaratorList SEMI + -> ^(VAR_DECLARATION modifierList type classFieldDeclaratorList) + ) + | typeDeclaration + ; + +annotationDefaultValue + : DEFAULT^ annotationElementValue + ; + +// STATEMENTS / BLOCKS + +block + : LCURLY blockStatement* RCURLY + -> ^(BLOCK_SCOPE[$LCURLY, "BLOCK_SCOPE"] blockStatement*) + ; + +blockStatement + : localVariableDeclaration SEMI! + | typeDeclaration + | statement + ; + +localVariableDeclaration + : localModifierList type classFieldDeclaratorList + -> ^(VAR_DECLARATION localModifierList type classFieldDeclaratorList) + ; + + +statement + : block + | ASSERT expr1=expression + ( COLON expr2=expression SEMI -> ^(ASSERT $expr1 $expr2) + | SEMI -> ^(ASSERT $expr1) + ) + | IF parenthesizedExpression ifStat=statement + ( ELSE elseStat=statement -> ^(IF parenthesizedExpression $ifStat $elseStat) + | -> ^(IF parenthesizedExpression $ifStat) + ) + | FOR LPAREN + ( forInit SEMI forCondition SEMI forUpdater RPAREN statement -> ^(FOR forInit forCondition forUpdater statement) + | localModifierList type IDENT COLON expression RPAREN statement + -> ^(FOR_EACH[$FOR, "FOR_EACH"] localModifierList type IDENT expression statement) + ) + | WHILE parenthesizedExpression statement -> ^(WHILE parenthesizedExpression statement) + | DO statement WHILE parenthesizedExpression SEMI -> ^(DO statement parenthesizedExpression) + | TRY block (catches finallyClause? | finallyClause) -> ^(TRY block catches? finallyClause?) + | SWITCH parenthesizedExpression LCURLY switchBlockLabels? RCURLY -> ^(SWITCH parenthesizedExpression switchBlockLabels?) + | SYNCHRONIZED parenthesizedExpression block -> ^(SYNCHRONIZED parenthesizedExpression block) + | RETURN expression? SEMI -> ^(RETURN expression?) + | THROW expression SEMI -> ^(THROW expression) + | BREAK IDENT? SEMI -> ^(BREAK IDENT?) + | CONTINUE IDENT? SEMI -> ^(CONTINUE IDENT?) + | IDENT COLON statement -> ^(LABELED_STATEMENT IDENT statement) + | expression SEMI! + | SEMI // Preserve empty statements. + ; + +catches + : catchClause+ + -> ^(CATCH_CLAUSE_LIST catchClause+) + ; + +catchClause + : CATCH^ LPAREN! formalParameterStandardDecl RPAREN! block + ; + +finallyClause + : FINALLY block + -> block + ; + +switchBlockLabels + // local modification: changed "switchCaseLabels" to + // "varname=switchCaseLabels?" to match language spec and support empty + // switch statements. + : c0=switchCaseLabels? switchDefaultLabel? c1=switchCaseLabels? + -> ^(SWITCH_BLOCK_LABEL_LIST $c0? switchDefaultLabel? $c1?) + ; + +switchCaseLabels + : switchCaseLabel* + ; + +switchCaseLabel + : CASE^ expression COLON! blockStatement* + ; + +switchDefaultLabel + : DEFAULT^ COLON! blockStatement* + ; + +forInit + : localVariableDeclaration -> ^(FOR_INIT localVariableDeclaration) + | expressionList -> ^(FOR_INIT expressionList) + | -> ^(FOR_INIT) + ; + +forCondition + : expression? + -> ^(FOR_CONDITION expression?) + ; + +forUpdater + : expressionList? + -> ^(FOR_UPDATE expressionList?) + ; + +// EXPRESSIONS + +parenthesizedExpression + : LPAREN expression RPAREN + -> ^(PARENTESIZED_EXPR[$LPAREN, "PARENTESIZED_EXPR"] expression) + ; + +expressionList + : expression (COMMA! expression)* + ; + +expression + : assignmentExpression + -> ^(EXPR assignmentExpression) + ; + +assignmentExpression + : conditionalExpression + ( ( ASSIGN^ + | PLUS_ASSIGN^ + | MINUS_ASSIGN^ + | STAR_ASSIGN^ + | DIV_ASSIGN^ + | AND_ASSIGN^ + | OR_ASSIGN^ + | XOR_ASSIGN^ + | MOD_ASSIGN^ + | SHIFT_LEFT_ASSIGN^ + | SHIFT_RIGHT_ASSIGN^ + | BIT_SHIFT_RIGHT_ASSIGN^ + ) + assignmentExpression)? + ; + +conditionalExpression + : logicalOrExpression (QUESTION^ assignmentExpression COLON! conditionalExpression)? + ; + +logicalOrExpression + : logicalAndExpression (LOGICAL_OR^ logicalAndExpression)* + ; + +logicalAndExpression + : inclusiveOrExpression (LOGICAL_AND^ inclusiveOrExpression)* + ; + +inclusiveOrExpression + : exclusiveOrExpression (OR^ exclusiveOrExpression)* + ; + +exclusiveOrExpression + : andExpression (XOR^ andExpression)* + ; + +andExpression + : equalityExpression (AND^ equalityExpression)* + ; + +equalityExpression + : instanceOfExpression + ( ( EQUAL^ + | NOT_EQUAL^ + ) + instanceOfExpression + )* + ; + +instanceOfExpression + : relationalExpression (INSTANCEOF^ type)? + ; + +relationalExpression + : shiftExpression + ( ( LESS_OR_EQUAL^ + | GREATER_OR_EQUAL^ + | LESS_THAN^ + | GREATER_THAN^ + ) + shiftExpression + )* + ; + +shiftExpression + : additiveExpression + ( ( BIT_SHIFT_RIGHT^ + | SHIFT_RIGHT^ + | SHIFT_LEFT^ + ) + additiveExpression + )* + ; + +additiveExpression + : multiplicativeExpression + ( ( PLUS^ + | MINUS^ + ) + multiplicativeExpression + )* + ; + +multiplicativeExpression + : unaryExpression + ( ( STAR^ + | DIV^ + | MOD^ + ) + unaryExpression + )* + ; + +unaryExpression + : PLUS unaryExpression -> ^(UNARY_PLUS[$PLUS, "UNARY_PLUS"] unaryExpression) + | MINUS unaryExpression -> ^(UNARY_MINUS[$MINUS, "UNARY_MINUS"] unaryExpression) + | INC postfixedExpression -> ^(PRE_INC[$INC, "PRE_INC"] postfixedExpression) + | DEC postfixedExpression -> ^(PRE_DEC[$DEC, "PRE_DEC"] postfixedExpression) + | unaryExpressionNotPlusMinus + ; + +unaryExpressionNotPlusMinus + : NOT unaryExpression -> ^(NOT unaryExpression) + | LOGICAL_NOT unaryExpression -> ^(LOGICAL_NOT unaryExpression) + | LPAREN type RPAREN unaryExpression -> ^(CAST_EXPR[$LPAREN, "CAST_EXPR"] type unaryExpression) + | postfixedExpression + ; + +postfixedExpression + // At first resolve the primary expression ... + : ( primaryExpression -> primaryExpression + ) + // ... and than the optional things that may follow a primary expression 0 or more times. + ( outerDot=DOT + ( ( genericTypeArgumentListSimplified? // Note: generic type arguments are only valid for method calls, i.e. if there + // is an argument list. + IDENT -> ^(DOT $postfixedExpression IDENT) + ) + ( arguments -> ^(METHOD_CALL $postfixedExpression genericTypeArgumentListSimplified? arguments) + )? + | THIS -> ^(DOT $postfixedExpression THIS) + | Super=SUPER arguments -> ^(SUPER_CONSTRUCTOR_CALL[$Super, "SUPER_CONSTRUCTOR_CALL"] $postfixedExpression arguments) + | ( SUPER innerDot=DOT IDENT -> ^($innerDot ^($outerDot $postfixedExpression SUPER) IDENT) + ) + ( arguments -> ^(METHOD_CALL $postfixedExpression arguments) + )? + | innerNewExpression -> ^(DOT $postfixedExpression innerNewExpression) + ) + | LBRACK expression RBRACK -> ^(ARRAY_ELEMENT_ACCESS $postfixedExpression expression) + )* + // At the end there may follow a post increment/decrement. + ( INC -> ^(POST_INC[$INC, "POST_INC"] $postfixedExpression) + | DEC -> ^(POST_DEC[$DEC, "POST_DEC"] $postfixedExpression) + )? + ; + +primaryExpression + : parenthesizedExpression + | literal + | newExpression + | qualifiedIdentExpression + | genericTypeArgumentListSimplified + ( SUPER + ( arguments -> ^(SUPER_CONSTRUCTOR_CALL[$SUPER, "SUPER_CONSTRUCTOR_CALL"] genericTypeArgumentListSimplified arguments) + | DOT IDENT arguments -> ^(METHOD_CALL ^(DOT SUPER IDENT) genericTypeArgumentListSimplified arguments) + ) + | IDENT arguments -> ^(METHOD_CALL IDENT genericTypeArgumentListSimplified arguments) + | THIS arguments -> ^(THIS_CONSTRUCTOR_CALL[$THIS, "THIS_CONSTRUCTOR_CALL"] genericTypeArgumentListSimplified arguments) + ) + | ( THIS -> THIS + ) + ( arguments -> ^(THIS_CONSTRUCTOR_CALL[$THIS, "THIS_CONSTRUCTOR_CALL"] arguments) + )? + | SUPER arguments -> ^(SUPER_CONSTRUCTOR_CALL[$SUPER, "SUPER_CONSTRUCTOR_CALL"] arguments) + | ( SUPER DOT IDENT + ) + ( arguments -> ^(METHOD_CALL ^(DOT SUPER IDENT) arguments) + | -> ^(DOT SUPER IDENT) + ) + | ( primitiveType -> primitiveType + ) + ( arrayDeclarator -> ^(arrayDeclarator $primaryExpression) + )* + DOT CLASS -> ^(DOT $primaryExpression CLASS) + | VOID DOT CLASS -> ^(DOT VOID CLASS) + ; + +qualifiedIdentExpression + // The qualified identifier itself is the starting point for this rule. + : ( qualifiedIdentifier -> qualifiedIdentifier + ) + // And now comes the stuff that may follow the qualified identifier. + ( ( arrayDeclarator -> ^(arrayDeclarator $qualifiedIdentExpression) + )+ + ( DOT CLASS -> ^(DOT $qualifiedIdentExpression CLASS) + ) + | arguments -> ^(METHOD_CALL qualifiedIdentifier arguments) + | outerDot=DOT + ( CLASS -> ^(DOT qualifiedIdentifier CLASS) + | genericTypeArgumentListSimplified + ( Super=SUPER arguments -> ^(SUPER_CONSTRUCTOR_CALL[$Super, "SUPER_CONSTRUCTOR_CALL"] qualifiedIdentifier genericTypeArgumentListSimplified arguments) + | SUPER innerDot=DOT IDENT arguments -> ^(METHOD_CALL ^($innerDot ^($outerDot qualifiedIdentifier SUPER) IDENT) genericTypeArgumentListSimplified arguments) + | IDENT arguments -> ^(METHOD_CALL ^(DOT qualifiedIdentifier IDENT) genericTypeArgumentListSimplified arguments) + ) + | THIS -> ^(DOT qualifiedIdentifier THIS) + | Super=SUPER arguments -> ^(SUPER_CONSTRUCTOR_CALL[$Super, "SUPER_CONSTRUCTOR_CALL"] qualifiedIdentifier arguments) + | innerNewExpression -> ^(DOT qualifiedIdentifier innerNewExpression) + ) + )? + ; + +newExpression + : NEW + ( primitiveType newArrayConstruction // new static array of primitive type elements + -> ^(STATIC_ARRAY_CREATOR[$NEW, "STATIC_ARRAY_CREATOR"] primitiveType newArrayConstruction) + | genericTypeArgumentListSimplified? qualifiedTypeIdentSimplified + ( newArrayConstruction // new static array of object type reference elements + -> ^(STATIC_ARRAY_CREATOR[$NEW, "STATIC_ARRAY_CREATOR"] genericTypeArgumentListSimplified? qualifiedTypeIdentSimplified newArrayConstruction) + | arguments classBody? // new object type via constructor invocation + -> ^(CLASS_CONSTRUCTOR_CALL[$NEW, "STATIC_ARRAY_CREATOR"] genericTypeArgumentListSimplified? qualifiedTypeIdentSimplified arguments classBody?) + ) + ) + ; + +innerNewExpression // something like 'InnerType innerType = outer.new InnerType();' + : NEW genericTypeArgumentListSimplified? IDENT arguments classBody? + -> ^(CLASS_CONSTRUCTOR_CALL[$NEW, "STATIC_ARRAY_CREATOR"] genericTypeArgumentListSimplified? IDENT arguments classBody?) + ; + +newArrayConstruction + : arrayDeclaratorList arrayInitializer + | LBRACK! expression RBRACK! (LBRACK! expression RBRACK!)* arrayDeclaratorList? + ; + +arguments + : LPAREN expressionList? RPAREN + -> ^(ARGUMENT_LIST[$LPAREN, "ARGUMENT_LIST"] expressionList?) + ; + +literal + : HEX_LITERAL + | OCTAL_LITERAL + | DECIMAL_LITERAL + | FLOATING_POINT_LITERAL + | CHARACTER_LITERAL + | STRING_LITERAL + | TRUE + | FALSE + | NULL + ; + +// LEXER + +HEX_LITERAL : '0' ('x'|'X') HEX_DIGIT+ INTEGER_TYPE_SUFFIX? ; + +DECIMAL_LITERAL : ('0' | '1'..'9' '0'..'9'*) INTEGER_TYPE_SUFFIX? ; + +OCTAL_LITERAL : '0' ('0'..'7')+ INTEGER_TYPE_SUFFIX? ; + +fragment +HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ; + +fragment +INTEGER_TYPE_SUFFIX : ('l'|'L') ; + +FLOATING_POINT_LITERAL + : ('0'..'9')+ + ( + DOT ('0'..'9')* EXPONENT? FLOAT_TYPE_SUFFIX? + | EXPONENT FLOAT_TYPE_SUFFIX? + | FLOAT_TYPE_SUFFIX + ) + | DOT ('0'..'9')+ EXPONENT? FLOAT_TYPE_SUFFIX? + ; + +fragment +EXPONENT : ('e'|'E') ('+'|'-')? ('0'..'9')+ ; + +fragment +FLOAT_TYPE_SUFFIX : ('f'|'F'|'d'|'D') ; + +CHARACTER_LITERAL + : '\'' ( ESCAPE_SEQUENCE | ~('\''|'\\') ) '\'' + ; + +STRING_LITERAL + : '"' ( ESCAPE_SEQUENCE | ~('\\'|'"') )* '"' + ; + +fragment +ESCAPE_SEQUENCE + : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\') + | UNICODE_ESCAPE + | OCTAL_ESCAPE + ; + +fragment +OCTAL_ESCAPE + : '\\' ('0'..'3') ('0'..'7') ('0'..'7') + | '\\' ('0'..'7') ('0'..'7') + | '\\' ('0'..'7') + ; + +fragment +UNICODE_ESCAPE + : '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT + ; + +IDENT + : JAVA_ID_START (JAVA_ID_PART)* + ; + +fragment +JAVA_ID_START + : '\u0024' + | '\u0041'..'\u005a' + | '\u005f' + | '\u0061'..'\u007a' + | '\u00c0'..'\u00d6' + | '\u00d8'..'\u00f6' + | '\u00f8'..'\u00ff' + | '\u0100'..'\u1fff' + | '\u3040'..'\u318f' + | '\u3300'..'\u337f' + | '\u3400'..'\u3d2d' + | '\u4e00'..'\u9fff' + | '\uf900'..'\ufaff' + ; + +fragment +JAVA_ID_PART + : JAVA_ID_START + | '\u0030'..'\u0039' + ; + +WS : (' '|'\r'|'\t'|'\u000C'|'\n') + { + $channel = HIDDEN + } + ; + +COMMENT + : '/*' ~('*') ( options {greedy=false;} : . )* '*/' + { + $channel = HIDDEN + } + ; + +LINE_COMMENT + : '//' ~('\n'|'\r')* '\r'? '\n' + { + $channel = HIDDEN + } + ; + +JAVADOC_COMMENT + : '/**' ( options {greedy=false;} : . )* '*/' + { + $channel = HIDDEN + } + ; diff --git a/build/lib.linux-x86_64-2.7/java2python/lang/Java.tokens b/build/lib.linux-x86_64-2.7/java2python/lang/Java.tokens new file mode 100644 index 0000000..9adec21 --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/lang/Java.tokens @@ -0,0 +1,280 @@ +PACKAGE=84 +EXPONENT=173 +STAR=49 +WHILE=103 +MOD=32 +MOD_ASSIGN=33 +CASE=58 +CHAR=60 +NEW=82 +DO=64 +GENERIC_TYPE_PARAM_LIST=138 +CLASS_INSTANCE_INITIALIZER=121 +ARRAY_ELEMENT_ACCESS=115 +FOR_CONDITION=129 +NOT=34 +VAR_DECLARATION=160 +ANNOTATION_METHOD_DECL=109 +DIV_ASSIGN=14 +LOGICAL_AND=26 +BREAK=56 +UNARY_PLUS=159 +BIT_SHIFT_RIGHT_ASSIGN=9 +TYPE=157 +RPAREN=43 +INC=21 +FINAL=70 +IMPORT=78 +STRING_LITERAL=170 +FOR_UPDATE=132 +FLOATING_POINT_LITERAL=168 +CAST_EXPR=118 +NOT_EQUAL=35 +VOID_METHOD_DECL=163 +THIS=95 +RETURN=88 +DOUBLE=65 +ENUM_TOP_LEVEL_SCOPE=125 +VOID=101 +SUPER=92 +COMMENT=181 +ANNOTATION_INIT_KEY_LIST=107 +JAVA_ID_START=178 +FLOAT_TYPE_SUFFIX=174 +PRE_DEC=149 +RBRACK=41 +IMPLEMENTS_CLAUSE=140 +SWITCH_BLOCK_LABEL_LIST=154 +LINE_COMMENT=182 +PRIVATE=85 +STATIC=90 +BLOCK_SCOPE=117 +ANNOTATION_INIT_DEFAULT_KEY=106 +SWITCH=93 +NULL=83 +VAR_DECLARATOR=161 +MINUS_ASSIGN=31 +ELSE=66 +STRICTFP=91 +CHARACTER_LITERAL=169 +PRE_INC=150 +ANNOTATION_LIST=108 +ELLIPSIS=17 +NATIVE=81 +OCTAL_ESCAPE=177 +UNARY_MINUS=158 +THROWS=97 +LCURLY=23 +INT=79 +FORMAL_PARAM_VARARG_DECL=135 +METHOD_CALL=144 +ASSERT=54 +TRY=100 +INTERFACE_TOP_LEVEL_SCOPE=139 +SHIFT_LEFT=45 +WS=180 +SHIFT_RIGHT=47 +FORMAL_PARAM_STD_DECL=134 +LOCAL_MODIFIER_LIST=142 +OR=36 +LESS_THAN=25 +SHIFT_RIGHT_ASSIGN=48 +EXTENDS_BOUND_LIST=127 +JAVA_SOURCE=143 +CATCH=59 +FALSE=69 +INTEGER_TYPE_SUFFIX=172 +DECIMAL_LITERAL=167 +THROW=96 +FOR_INIT=131 +DEC=12 +PROTECTED=86 +CLASS=61 +LBRACK=22 +BIT_SHIFT_RIGHT=8 +THROWS_CLAUSE=156 +GREATER_OR_EQUAL=19 +FOR=73 +THIS_CONSTRUCTOR_CALL=155 +LOGICAL_NOT=27 +JAVADOC_COMMENT=183 +FLOAT=72 +ABSTRACT=53 +AND=4 +POST_DEC=147 +AND_ASSIGN=5 +STATIC_ARRAY_CREATOR=152 +MODIFIER_LIST=145 +ANNOTATION_SCOPE=110 +LPAREN=29 +IF=74 +AT=7 +ESCAPE_SEQUENCE=175 +CONSTRUCTOR_DECL=124 +LABELED_STATEMENT=141 +UNICODE_ESCAPE=176 +EXPR=126 +SYNCHRONIZED=94 +BOOLEAN=55 +CLASS_TOP_LEVEL_SCOPE=123 +IMPLEMENTS=75 +CONTINUE=62 +COMMA=11 +TRANSIENT=98 +EQUAL=18 +XOR_ASSIGN=52 +LOGICAL_OR=28 +IDENT=164 +QUALIFIED_TYPE_IDENT=151 +ARGUMENT_LIST=112 +PLUS=38 +HEX_LITERAL=165 +ANNOTATION_INIT_BLOCK=105 +DOT=15 +SHIFT_LEFT_ASSIGN=46 +FORMAL_PARAM_LIST=133 +GENERIC_TYPE_ARG_LIST=137 +ANNOTATION_TOP_LEVEL_SCOPE=111 +DOTSTAR=16 +BYTE=57 +XOR=51 +JAVA_ID_PART=179 +GREATER_THAN=20 +VOLATILE=102 +PARENTESIZED_EXPR=146 +CLASS_STATIC_INITIALIZER=122 +ARRAY_DECLARATOR_LIST=114 +LESS_OR_EQUAL=24 +DEFAULT=63 +OCTAL_LITERAL=166 +HEX_DIGIT=171 +SHORT=89 +INSTANCEOF=76 +MINUS=30 +EXTENDS_CLAUSE=128 +TRUE=99 +SEMI=44 +STAR_ASSIGN=50 +VAR_DECLARATOR_LIST=162 +ARRAY_DECLARATOR=113 +COLON=10 +OR_ASSIGN=37 +ENUM=67 +QUESTION=40 +FINALLY=71 +RCURLY=42 +PLUS_ASSIGN=39 +ASSIGN=6 +ANNOTATION_INIT_ARRAY_ELEMENT=104 +FUNCTION_METHOD_DECL=136 +INTERFACE=77 +POST_INC=148 +DIV=13 +CLASS_CONSTRUCTOR_CALL=120 +LONG=80 +FOR_EACH=130 +EXTENDS=68 +PUBLIC=87 +ARRAY_INITIALIZER=116 +CATCH_CLAUSE_LIST=119 +SUPER_CONSTRUCTOR_CALL=153 +'>='=19 +'=='=18 +'implements'=75 +'this'=95 +'volatile'=102 +';'=44 +'return'=88 +'for'=73 +'protected'=86 +'^'=51 +'>>'=47 +'static'=90 +'catch'=59 +'extends'=68 +'{'=23 +'package'=84 +'try'=100 +'&='=5 +'('=29 +':'=10 +'synchronized'=94 +'default'=63 +'public'=87 +'<<='=46 +']'=41 +'>>>'=8 +'enum'=67 +'transient'=98 +'assert'=54 +'finally'=71 +'new'=82 +'|='=37 +'throws'=97 +'.*'=16 +'='=6 +'%'=32 +'super'=92 +'case'=58 +'boolean'=55 +'<<'=45 +'<='=24 +'!='=35 +'continue'=62 +'--'=12 +'<'=25 +'['=22 +'&'=4 +'instanceof'=76 +'~'=34 +'/'=13 +'/='=14 +'switch'=93 +'%='=33 +'>'=20 +'||'=28 +'&&'=26 +'+'=38 +'.'=15 +'byte'=57 +'import'=78 +'++'=21 +'true'=99 +'else'=66 +'final'=70 +'^='=52 +'+='=39 +'native'=81 +'break'=56 +'...'=17 +'>>='=48 +'void'=101 +'>>>='=9 +'?'=40 +'private'=85 +'int'=79 +'if'=74 +'while'=103 +'-'=30 +','=11 +'-='=31 +'short'=89 +'long'=80 +'!'=27 +'|'=36 +'class'=61 +'null'=83 +'@'=7 +'throw'=96 +')'=43 +'*='=50 +'do'=64 +'char'=60 +'strictfp'=91 +'float'=72 +'}'=42 +'abstract'=53 +'double'=65 +'false'=69 +'*'=49 +'interface'=77 diff --git a/build/lib.linux-x86_64-2.7/java2python/lang/JavaDoc.g b/build/lib.linux-x86_64-2.7/java2python/lang/JavaDoc.g new file mode 100644 index 0000000..0265a28 --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/lang/JavaDoc.g @@ -0,0 +1,133 @@ +/* + * Javadoc.g + * Copyright (c) 2007 David Holroyd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +grammar JavaDoc; + + +options { + k=3; + output=AST; + language=Python; + ASTLabelType=CommonTree; +} + + +tokens { + JAVADOC; + INLINE_TAG; + DESCRIPTION; + PARA_TAG; + TEXT_LINE; +} + + +commentBody + : d=description paragraphTag* EOF + -> ^(JAVADOC description paragraphTag*) + ; + + +description + : textLine* + -> ^(DESCRIPTION textLine*) + ; + + +textLine + : textLineStart textLineContent* (NL | EOF!) + | NL + ; + + +textLineStart + : (LBRACE ATWORD)=> inlineTag + | WORD | STARS | WS | LBRACE | RBRACE | AT + ; + + +textLineContent + : (LBRACE ATWORD)=> inlineTag + | WORD | STARS | WS | LBRACE | RBRACE | AT | ATWORD + ; + + +inlineTag + : LBRACE ATWORD inlineTagContent* RBRACE + -> ^(INLINE_TAG ATWORD inlineTagContent*) + ; + + +inlineTagContent + : WORD | STARS | WS | AT | NL + ; + + +paragraphTag + : ATWORD paragraphTagTail + -> ^(PARA_TAG ATWORD paragraphTagTail) + ; + + +paragraphTagTail + : textLineContent* (NL textLine* | EOF) + -> textLineContent* NL? textLine* + ; + + +STARS + : '*'+ + ; + + +LBRACE + : '{' + ; + + +RBRACE + : '}' + ; + + +AT + : '@' + ; + + +WS + : (' ' | '\t')+ + ; + + +NL options {k=*;} + : ('\r\n' | '\r' | '\n') WS? (STARS WS?)? + ; + + +ATWORD + : '@' WORD WORD_TAIL + ; + + +WORD + : ~('\n' | ' ' | '\r' | '\t' | '{' | '}' | '@') WORD_TAIL + ; + + +fragment WORD_TAIL + : (~('\n' | ' ' | '\r' | '\t' | '{' | '}'))* + ; diff --git a/build/lib.linux-x86_64-2.7/java2python/lang/JavaLexer.py b/build/lib.linux-x86_64-2.7/java2python/lang/JavaLexer.py new file mode 100644 index 0000000..9c1725a --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/lang/JavaLexer.py @@ -0,0 +1,5285 @@ +# $ANTLR 3.1.3 Mar 18, 2009 10:09:25 Java.g 2012-01-29 13:54:05 + +import sys +from antlr3 import * +from antlr3.compat import set, frozenset + + +# for convenience in actions +HIDDEN = BaseRecognizer.HIDDEN + +# token types +PACKAGE=84 +EXPONENT=173 +STAR=49 +WHILE=103 +MOD=32 +MOD_ASSIGN=33 +CASE=58 +CHAR=60 +NEW=82 +DO=64 +GENERIC_TYPE_PARAM_LIST=138 +CLASS_INSTANCE_INITIALIZER=121 +ARRAY_ELEMENT_ACCESS=115 +FOR_CONDITION=129 +NOT=34 +VAR_DECLARATION=160 +ANNOTATION_METHOD_DECL=109 +EOF=-1 +DIV_ASSIGN=14 +BREAK=56 +LOGICAL_AND=26 +BIT_SHIFT_RIGHT_ASSIGN=9 +UNARY_PLUS=159 +TYPE=157 +FINAL=70 +INC=21 +RPAREN=43 +IMPORT=78 +STRING_LITERAL=170 +FOR_UPDATE=132 +FLOATING_POINT_LITERAL=168 +CAST_EXPR=118 +NOT_EQUAL=35 +VOID_METHOD_DECL=163 +RETURN=88 +THIS=95 +DOUBLE=65 +VOID=101 +ENUM_TOP_LEVEL_SCOPE=125 +SUPER=92 +COMMENT=181 +ANNOTATION_INIT_KEY_LIST=107 +JAVA_ID_START=178 +FLOAT_TYPE_SUFFIX=174 +PRE_DEC=149 +RBRACK=41 +IMPLEMENTS_CLAUSE=140 +SWITCH_BLOCK_LABEL_LIST=154 +LINE_COMMENT=182 +PRIVATE=85 +STATIC=90 +BLOCK_SCOPE=117 +ANNOTATION_INIT_DEFAULT_KEY=106 +SWITCH=93 +NULL=83 +VAR_DECLARATOR=161 +MINUS_ASSIGN=31 +ELSE=66 +STRICTFP=91 +CHARACTER_LITERAL=169 +PRE_INC=150 +ANNOTATION_LIST=108 +ELLIPSIS=17 +NATIVE=81 +OCTAL_ESCAPE=177 +UNARY_MINUS=158 +THROWS=97 +LCURLY=23 +INT=79 +FORMAL_PARAM_VARARG_DECL=135 +METHOD_CALL=144 +ASSERT=54 +TRY=100 +INTERFACE_TOP_LEVEL_SCOPE=139 +SHIFT_LEFT=45 +WS=180 +SHIFT_RIGHT=47 +FORMAL_PARAM_STD_DECL=134 +LOCAL_MODIFIER_LIST=142 +OR=36 +LESS_THAN=25 +SHIFT_RIGHT_ASSIGN=48 +EXTENDS_BOUND_LIST=127 +JAVA_SOURCE=143 +CATCH=59 +FALSE=69 +INTEGER_TYPE_SUFFIX=172 +DECIMAL_LITERAL=167 +THROW=96 +FOR_INIT=131 +PROTECTED=86 +DEC=12 +CLASS=61 +LBRACK=22 +BIT_SHIFT_RIGHT=8 +THROWS_CLAUSE=156 +GREATER_OR_EQUAL=19 +FOR=73 +LOGICAL_NOT=27 +THIS_CONSTRUCTOR_CALL=155 +FLOAT=72 +JAVADOC_COMMENT=183 +ABSTRACT=53 +AND=4 +POST_DEC=147 +AND_ASSIGN=5 +ANNOTATION_SCOPE=110 +MODIFIER_LIST=145 +STATIC_ARRAY_CREATOR=152 +LPAREN=29 +IF=74 +AT=7 +CONSTRUCTOR_DECL=124 +ESCAPE_SEQUENCE=175 +LABELED_STATEMENT=141 +UNICODE_ESCAPE=176 +BOOLEAN=55 +SYNCHRONIZED=94 +EXPR=126 +CLASS_TOP_LEVEL_SCOPE=123 +IMPLEMENTS=75 +CONTINUE=62 +COMMA=11 +TRANSIENT=98 +XOR_ASSIGN=52 +EQUAL=18 +LOGICAL_OR=28 +ARGUMENT_LIST=112 +QUALIFIED_TYPE_IDENT=151 +IDENT=164 +PLUS=38 +ANNOTATION_INIT_BLOCK=105 +HEX_LITERAL=165 +DOT=15 +SHIFT_LEFT_ASSIGN=46 +FORMAL_PARAM_LIST=133 +GENERIC_TYPE_ARG_LIST=137 +DOTSTAR=16 +ANNOTATION_TOP_LEVEL_SCOPE=111 +BYTE=57 +XOR=51 +JAVA_ID_PART=179 +GREATER_THAN=20 +VOLATILE=102 +PARENTESIZED_EXPR=146 +LESS_OR_EQUAL=24 +ARRAY_DECLARATOR_LIST=114 +CLASS_STATIC_INITIALIZER=122 +DEFAULT=63 +OCTAL_LITERAL=166 +HEX_DIGIT=171 +SHORT=89 +INSTANCEOF=76 +MINUS=30 +SEMI=44 +TRUE=99 +EXTENDS_CLAUSE=128 +STAR_ASSIGN=50 +VAR_DECLARATOR_LIST=162 +COLON=10 +ARRAY_DECLARATOR=113 +OR_ASSIGN=37 +ENUM=67 +QUESTION=40 +FINALLY=71 +RCURLY=42 +ASSIGN=6 +PLUS_ASSIGN=39 +ANNOTATION_INIT_ARRAY_ELEMENT=104 +FUNCTION_METHOD_DECL=136 +INTERFACE=77 +DIV=13 +POST_INC=148 +LONG=80 +CLASS_CONSTRUCTOR_CALL=120 +PUBLIC=87 +EXTENDS=68 +FOR_EACH=130 +ARRAY_INITIALIZER=116 +CATCH_CLAUSE_LIST=119 +SUPER_CONSTRUCTOR_CALL=153 + + +class JavaLexer(Lexer): + + grammarFileName = "Java.g" + antlr_version = version_str_to_tuple("3.1.3 Mar 18, 2009 10:09:25") + antlr_version_str = "3.1.3 Mar 18, 2009 10:09:25" + + def __init__(self, input=None, state=None): + if state is None: + state = RecognizerSharedState() + super(JavaLexer, self).__init__(input, state) + + + self.dfa29 = self.DFA29( + self, 29, + eot = self.DFA29_eot, + eof = self.DFA29_eof, + min = self.DFA29_min, + max = self.DFA29_max, + accept = self.DFA29_accept, + special = self.DFA29_special, + transition = self.DFA29_transition + ) + + + + + + + # $ANTLR start "AND" + def mAND(self, ): + + try: + _type = AND + _channel = DEFAULT_CHANNEL + + # Java.g:7:5: ( '&' ) + # Java.g:7:7: '&' + pass + self.match(38) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "AND" + + + + # $ANTLR start "AND_ASSIGN" + def mAND_ASSIGN(self, ): + + try: + _type = AND_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:8:12: ( '&=' ) + # Java.g:8:14: '&=' + pass + self.match("&=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "AND_ASSIGN" + + + + # $ANTLR start "ASSIGN" + def mASSIGN(self, ): + + try: + _type = ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:9:8: ( '=' ) + # Java.g:9:10: '=' + pass + self.match(61) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "ASSIGN" + + + + # $ANTLR start "AT" + def mAT(self, ): + + try: + _type = AT + _channel = DEFAULT_CHANNEL + + # Java.g:10:4: ( '@' ) + # Java.g:10:6: '@' + pass + self.match(64) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "AT" + + + + # $ANTLR start "BIT_SHIFT_RIGHT" + def mBIT_SHIFT_RIGHT(self, ): + + try: + _type = BIT_SHIFT_RIGHT + _channel = DEFAULT_CHANNEL + + # Java.g:11:17: ( '>>>' ) + # Java.g:11:19: '>>>' + pass + self.match(">>>") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "BIT_SHIFT_RIGHT" + + + + # $ANTLR start "BIT_SHIFT_RIGHT_ASSIGN" + def mBIT_SHIFT_RIGHT_ASSIGN(self, ): + + try: + _type = BIT_SHIFT_RIGHT_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:12:24: ( '>>>=' ) + # Java.g:12:26: '>>>=' + pass + self.match(">>>=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "BIT_SHIFT_RIGHT_ASSIGN" + + + + # $ANTLR start "COLON" + def mCOLON(self, ): + + try: + _type = COLON + _channel = DEFAULT_CHANNEL + + # Java.g:13:7: ( ':' ) + # Java.g:13:9: ':' + pass + self.match(58) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "COLON" + + + + # $ANTLR start "COMMA" + def mCOMMA(self, ): + + try: + _type = COMMA + _channel = DEFAULT_CHANNEL + + # Java.g:14:7: ( ',' ) + # Java.g:14:9: ',' + pass + self.match(44) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "COMMA" + + + + # $ANTLR start "DEC" + def mDEC(self, ): + + try: + _type = DEC + _channel = DEFAULT_CHANNEL + + # Java.g:15:5: ( '--' ) + # Java.g:15:7: '--' + pass + self.match("--") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "DEC" + + + + # $ANTLR start "DIV" + def mDIV(self, ): + + try: + _type = DIV + _channel = DEFAULT_CHANNEL + + # Java.g:16:5: ( '/' ) + # Java.g:16:7: '/' + pass + self.match(47) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "DIV" + + + + # $ANTLR start "DIV_ASSIGN" + def mDIV_ASSIGN(self, ): + + try: + _type = DIV_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:17:12: ( '/=' ) + # Java.g:17:14: '/=' + pass + self.match("/=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "DIV_ASSIGN" + + + + # $ANTLR start "DOT" + def mDOT(self, ): + + try: + _type = DOT + _channel = DEFAULT_CHANNEL + + # Java.g:18:5: ( '.' ) + # Java.g:18:7: '.' + pass + self.match(46) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "DOT" + + + + # $ANTLR start "DOTSTAR" + def mDOTSTAR(self, ): + + try: + _type = DOTSTAR + _channel = DEFAULT_CHANNEL + + # Java.g:19:9: ( '.*' ) + # Java.g:19:11: '.*' + pass + self.match(".*") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "DOTSTAR" + + + + # $ANTLR start "ELLIPSIS" + def mELLIPSIS(self, ): + + try: + _type = ELLIPSIS + _channel = DEFAULT_CHANNEL + + # Java.g:20:10: ( '...' ) + # Java.g:20:12: '...' + pass + self.match("...") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "ELLIPSIS" + + + + # $ANTLR start "EQUAL" + def mEQUAL(self, ): + + try: + _type = EQUAL + _channel = DEFAULT_CHANNEL + + # Java.g:21:7: ( '==' ) + # Java.g:21:9: '==' + pass + self.match("==") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "EQUAL" + + + + # $ANTLR start "GREATER_OR_EQUAL" + def mGREATER_OR_EQUAL(self, ): + + try: + _type = GREATER_OR_EQUAL + _channel = DEFAULT_CHANNEL + + # Java.g:22:18: ( '>=' ) + # Java.g:22:20: '>=' + pass + self.match(">=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "GREATER_OR_EQUAL" + + + + # $ANTLR start "GREATER_THAN" + def mGREATER_THAN(self, ): + + try: + _type = GREATER_THAN + _channel = DEFAULT_CHANNEL + + # Java.g:23:14: ( '>' ) + # Java.g:23:16: '>' + pass + self.match(62) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "GREATER_THAN" + + + + # $ANTLR start "INC" + def mINC(self, ): + + try: + _type = INC + _channel = DEFAULT_CHANNEL + + # Java.g:24:5: ( '++' ) + # Java.g:24:7: '++' + pass + self.match("++") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "INC" + + + + # $ANTLR start "LBRACK" + def mLBRACK(self, ): + + try: + _type = LBRACK + _channel = DEFAULT_CHANNEL + + # Java.g:25:8: ( '[' ) + # Java.g:25:10: '[' + pass + self.match(91) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LBRACK" + + + + # $ANTLR start "LCURLY" + def mLCURLY(self, ): + + try: + _type = LCURLY + _channel = DEFAULT_CHANNEL + + # Java.g:26:8: ( '{' ) + # Java.g:26:10: '{' + pass + self.match(123) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LCURLY" + + + + # $ANTLR start "LESS_OR_EQUAL" + def mLESS_OR_EQUAL(self, ): + + try: + _type = LESS_OR_EQUAL + _channel = DEFAULT_CHANNEL + + # Java.g:27:15: ( '<=' ) + # Java.g:27:17: '<=' + pass + self.match("<=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LESS_OR_EQUAL" + + + + # $ANTLR start "LESS_THAN" + def mLESS_THAN(self, ): + + try: + _type = LESS_THAN + _channel = DEFAULT_CHANNEL + + # Java.g:28:11: ( '<' ) + # Java.g:28:13: '<' + pass + self.match(60) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LESS_THAN" + + + + # $ANTLR start "LOGICAL_AND" + def mLOGICAL_AND(self, ): + + try: + _type = LOGICAL_AND + _channel = DEFAULT_CHANNEL + + # Java.g:29:13: ( '&&' ) + # Java.g:29:15: '&&' + pass + self.match("&&") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LOGICAL_AND" + + + + # $ANTLR start "LOGICAL_NOT" + def mLOGICAL_NOT(self, ): + + try: + _type = LOGICAL_NOT + _channel = DEFAULT_CHANNEL + + # Java.g:30:13: ( '!' ) + # Java.g:30:15: '!' + pass + self.match(33) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LOGICAL_NOT" + + + + # $ANTLR start "LOGICAL_OR" + def mLOGICAL_OR(self, ): + + try: + _type = LOGICAL_OR + _channel = DEFAULT_CHANNEL + + # Java.g:31:12: ( '||' ) + # Java.g:31:14: '||' + pass + self.match("||") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LOGICAL_OR" + + + + # $ANTLR start "LPAREN" + def mLPAREN(self, ): + + try: + _type = LPAREN + _channel = DEFAULT_CHANNEL + + # Java.g:32:8: ( '(' ) + # Java.g:32:10: '(' + pass + self.match(40) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LPAREN" + + + + # $ANTLR start "MINUS" + def mMINUS(self, ): + + try: + _type = MINUS + _channel = DEFAULT_CHANNEL + + # Java.g:33:7: ( '-' ) + # Java.g:33:9: '-' + pass + self.match(45) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "MINUS" + + + + # $ANTLR start "MINUS_ASSIGN" + def mMINUS_ASSIGN(self, ): + + try: + _type = MINUS_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:34:14: ( '-=' ) + # Java.g:34:16: '-=' + pass + self.match("-=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "MINUS_ASSIGN" + + + + # $ANTLR start "MOD" + def mMOD(self, ): + + try: + _type = MOD + _channel = DEFAULT_CHANNEL + + # Java.g:35:5: ( '%' ) + # Java.g:35:7: '%' + pass + self.match(37) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "MOD" + + + + # $ANTLR start "MOD_ASSIGN" + def mMOD_ASSIGN(self, ): + + try: + _type = MOD_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:36:12: ( '%=' ) + # Java.g:36:14: '%=' + pass + self.match("%=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "MOD_ASSIGN" + + + + # $ANTLR start "NOT" + def mNOT(self, ): + + try: + _type = NOT + _channel = DEFAULT_CHANNEL + + # Java.g:37:5: ( '~' ) + # Java.g:37:7: '~' + pass + self.match(126) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "NOT" + + + + # $ANTLR start "NOT_EQUAL" + def mNOT_EQUAL(self, ): + + try: + _type = NOT_EQUAL + _channel = DEFAULT_CHANNEL + + # Java.g:38:11: ( '!=' ) + # Java.g:38:13: '!=' + pass + self.match("!=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "NOT_EQUAL" + + + + # $ANTLR start "OR" + def mOR(self, ): + + try: + _type = OR + _channel = DEFAULT_CHANNEL + + # Java.g:39:4: ( '|' ) + # Java.g:39:6: '|' + pass + self.match(124) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "OR" + + + + # $ANTLR start "OR_ASSIGN" + def mOR_ASSIGN(self, ): + + try: + _type = OR_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:40:11: ( '|=' ) + # Java.g:40:13: '|=' + pass + self.match("|=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "OR_ASSIGN" + + + + # $ANTLR start "PLUS" + def mPLUS(self, ): + + try: + _type = PLUS + _channel = DEFAULT_CHANNEL + + # Java.g:41:6: ( '+' ) + # Java.g:41:8: '+' + pass + self.match(43) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "PLUS" + + + + # $ANTLR start "PLUS_ASSIGN" + def mPLUS_ASSIGN(self, ): + + try: + _type = PLUS_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:42:13: ( '+=' ) + # Java.g:42:15: '+=' + pass + self.match("+=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "PLUS_ASSIGN" + + + + # $ANTLR start "QUESTION" + def mQUESTION(self, ): + + try: + _type = QUESTION + _channel = DEFAULT_CHANNEL + + # Java.g:43:10: ( '?' ) + # Java.g:43:12: '?' + pass + self.match(63) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "QUESTION" + + + + # $ANTLR start "RBRACK" + def mRBRACK(self, ): + + try: + _type = RBRACK + _channel = DEFAULT_CHANNEL + + # Java.g:44:8: ( ']' ) + # Java.g:44:10: ']' + pass + self.match(93) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "RBRACK" + + + + # $ANTLR start "RCURLY" + def mRCURLY(self, ): + + try: + _type = RCURLY + _channel = DEFAULT_CHANNEL + + # Java.g:45:8: ( '}' ) + # Java.g:45:10: '}' + pass + self.match(125) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "RCURLY" + + + + # $ANTLR start "RPAREN" + def mRPAREN(self, ): + + try: + _type = RPAREN + _channel = DEFAULT_CHANNEL + + # Java.g:46:8: ( ')' ) + # Java.g:46:10: ')' + pass + self.match(41) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "RPAREN" + + + + # $ANTLR start "SEMI" + def mSEMI(self, ): + + try: + _type = SEMI + _channel = DEFAULT_CHANNEL + + # Java.g:47:6: ( ';' ) + # Java.g:47:8: ';' + pass + self.match(59) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "SEMI" + + + + # $ANTLR start "SHIFT_LEFT" + def mSHIFT_LEFT(self, ): + + try: + _type = SHIFT_LEFT + _channel = DEFAULT_CHANNEL + + # Java.g:48:12: ( '<<' ) + # Java.g:48:14: '<<' + pass + self.match("<<") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "SHIFT_LEFT" + + + + # $ANTLR start "SHIFT_LEFT_ASSIGN" + def mSHIFT_LEFT_ASSIGN(self, ): + + try: + _type = SHIFT_LEFT_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:49:19: ( '<<=' ) + # Java.g:49:21: '<<=' + pass + self.match("<<=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "SHIFT_LEFT_ASSIGN" + + + + # $ANTLR start "SHIFT_RIGHT" + def mSHIFT_RIGHT(self, ): + + try: + _type = SHIFT_RIGHT + _channel = DEFAULT_CHANNEL + + # Java.g:50:13: ( '>>' ) + # Java.g:50:15: '>>' + pass + self.match(">>") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "SHIFT_RIGHT" + + + + # $ANTLR start "SHIFT_RIGHT_ASSIGN" + def mSHIFT_RIGHT_ASSIGN(self, ): + + try: + _type = SHIFT_RIGHT_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:51:20: ( '>>=' ) + # Java.g:51:22: '>>=' + pass + self.match(">>=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "SHIFT_RIGHT_ASSIGN" + + + + # $ANTLR start "STAR" + def mSTAR(self, ): + + try: + _type = STAR + _channel = DEFAULT_CHANNEL + + # Java.g:52:6: ( '*' ) + # Java.g:52:8: '*' + pass + self.match(42) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "STAR" + + + + # $ANTLR start "STAR_ASSIGN" + def mSTAR_ASSIGN(self, ): + + try: + _type = STAR_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:53:13: ( '*=' ) + # Java.g:53:15: '*=' + pass + self.match("*=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "STAR_ASSIGN" + + + + # $ANTLR start "XOR" + def mXOR(self, ): + + try: + _type = XOR + _channel = DEFAULT_CHANNEL + + # Java.g:54:5: ( '^' ) + # Java.g:54:7: '^' + pass + self.match(94) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "XOR" + + + + # $ANTLR start "XOR_ASSIGN" + def mXOR_ASSIGN(self, ): + + try: + _type = XOR_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:55:12: ( '^=' ) + # Java.g:55:14: '^=' + pass + self.match("^=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "XOR_ASSIGN" + + + + # $ANTLR start "ABSTRACT" + def mABSTRACT(self, ): + + try: + _type = ABSTRACT + _channel = DEFAULT_CHANNEL + + # Java.g:56:10: ( 'abstract' ) + # Java.g:56:12: 'abstract' + pass + self.match("abstract") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "ABSTRACT" + + + + # $ANTLR start "ASSERT" + def mASSERT(self, ): + + try: + _type = ASSERT + _channel = DEFAULT_CHANNEL + + # Java.g:57:8: ( 'assert' ) + # Java.g:57:10: 'assert' + pass + self.match("assert") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "ASSERT" + + + + # $ANTLR start "BOOLEAN" + def mBOOLEAN(self, ): + + try: + _type = BOOLEAN + _channel = DEFAULT_CHANNEL + + # Java.g:58:9: ( 'boolean' ) + # Java.g:58:11: 'boolean' + pass + self.match("boolean") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "BOOLEAN" + + + + # $ANTLR start "BREAK" + def mBREAK(self, ): + + try: + _type = BREAK + _channel = DEFAULT_CHANNEL + + # Java.g:59:7: ( 'break' ) + # Java.g:59:9: 'break' + pass + self.match("break") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "BREAK" + + + + # $ANTLR start "BYTE" + def mBYTE(self, ): + + try: + _type = BYTE + _channel = DEFAULT_CHANNEL + + # Java.g:60:6: ( 'byte' ) + # Java.g:60:8: 'byte' + pass + self.match("byte") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "BYTE" + + + + # $ANTLR start "CASE" + def mCASE(self, ): + + try: + _type = CASE + _channel = DEFAULT_CHANNEL + + # Java.g:61:6: ( 'case' ) + # Java.g:61:8: 'case' + pass + self.match("case") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "CASE" + + + + # $ANTLR start "CATCH" + def mCATCH(self, ): + + try: + _type = CATCH + _channel = DEFAULT_CHANNEL + + # Java.g:62:7: ( 'catch' ) + # Java.g:62:9: 'catch' + pass + self.match("catch") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "CATCH" + + + + # $ANTLR start "CHAR" + def mCHAR(self, ): + + try: + _type = CHAR + _channel = DEFAULT_CHANNEL + + # Java.g:63:6: ( 'char' ) + # Java.g:63:8: 'char' + pass + self.match("char") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "CHAR" + + + + # $ANTLR start "CLASS" + def mCLASS(self, ): + + try: + _type = CLASS + _channel = DEFAULT_CHANNEL + + # Java.g:64:7: ( 'class' ) + # Java.g:64:9: 'class' + pass + self.match("class") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "CLASS" + + + + # $ANTLR start "CONTINUE" + def mCONTINUE(self, ): + + try: + _type = CONTINUE + _channel = DEFAULT_CHANNEL + + # Java.g:65:10: ( 'continue' ) + # Java.g:65:12: 'continue' + pass + self.match("continue") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "CONTINUE" + + + + # $ANTLR start "DEFAULT" + def mDEFAULT(self, ): + + try: + _type = DEFAULT + _channel = DEFAULT_CHANNEL + + # Java.g:66:9: ( 'default' ) + # Java.g:66:11: 'default' + pass + self.match("default") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "DEFAULT" + + + + # $ANTLR start "DO" + def mDO(self, ): + + try: + _type = DO + _channel = DEFAULT_CHANNEL + + # Java.g:67:4: ( 'do' ) + # Java.g:67:6: 'do' + pass + self.match("do") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "DO" + + + + # $ANTLR start "DOUBLE" + def mDOUBLE(self, ): + + try: + _type = DOUBLE + _channel = DEFAULT_CHANNEL + + # Java.g:68:8: ( 'double' ) + # Java.g:68:10: 'double' + pass + self.match("double") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "DOUBLE" + + + + # $ANTLR start "ELSE" + def mELSE(self, ): + + try: + _type = ELSE + _channel = DEFAULT_CHANNEL + + # Java.g:69:6: ( 'else' ) + # Java.g:69:8: 'else' + pass + self.match("else") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "ELSE" + + + + # $ANTLR start "ENUM" + def mENUM(self, ): + + try: + _type = ENUM + _channel = DEFAULT_CHANNEL + + # Java.g:70:6: ( 'enum' ) + # Java.g:70:8: 'enum' + pass + self.match("enum") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "ENUM" + + + + # $ANTLR start "EXTENDS" + def mEXTENDS(self, ): + + try: + _type = EXTENDS + _channel = DEFAULT_CHANNEL + + # Java.g:71:9: ( 'extends' ) + # Java.g:71:11: 'extends' + pass + self.match("extends") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "EXTENDS" + + + + # $ANTLR start "FALSE" + def mFALSE(self, ): + + try: + _type = FALSE + _channel = DEFAULT_CHANNEL + + # Java.g:72:7: ( 'false' ) + # Java.g:72:9: 'false' + pass + self.match("false") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "FALSE" + + + + # $ANTLR start "FINAL" + def mFINAL(self, ): + + try: + _type = FINAL + _channel = DEFAULT_CHANNEL + + # Java.g:73:7: ( 'final' ) + # Java.g:73:9: 'final' + pass + self.match("final") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "FINAL" + + + + # $ANTLR start "FINALLY" + def mFINALLY(self, ): + + try: + _type = FINALLY + _channel = DEFAULT_CHANNEL + + # Java.g:74:9: ( 'finally' ) + # Java.g:74:11: 'finally' + pass + self.match("finally") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "FINALLY" + + + + # $ANTLR start "FLOAT" + def mFLOAT(self, ): + + try: + _type = FLOAT + _channel = DEFAULT_CHANNEL + + # Java.g:75:7: ( 'float' ) + # Java.g:75:9: 'float' + pass + self.match("float") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "FLOAT" + + + + # $ANTLR start "FOR" + def mFOR(self, ): + + try: + _type = FOR + _channel = DEFAULT_CHANNEL + + # Java.g:76:5: ( 'for' ) + # Java.g:76:7: 'for' + pass + self.match("for") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "FOR" + + + + # $ANTLR start "IF" + def mIF(self, ): + + try: + _type = IF + _channel = DEFAULT_CHANNEL + + # Java.g:77:4: ( 'if' ) + # Java.g:77:6: 'if' + pass + self.match("if") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "IF" + + + + # $ANTLR start "IMPLEMENTS" + def mIMPLEMENTS(self, ): + + try: + _type = IMPLEMENTS + _channel = DEFAULT_CHANNEL + + # Java.g:78:12: ( 'implements' ) + # Java.g:78:14: 'implements' + pass + self.match("implements") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "IMPLEMENTS" + + + + # $ANTLR start "INSTANCEOF" + def mINSTANCEOF(self, ): + + try: + _type = INSTANCEOF + _channel = DEFAULT_CHANNEL + + # Java.g:79:12: ( 'instanceof' ) + # Java.g:79:14: 'instanceof' + pass + self.match("instanceof") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "INSTANCEOF" + + + + # $ANTLR start "INTERFACE" + def mINTERFACE(self, ): + + try: + _type = INTERFACE + _channel = DEFAULT_CHANNEL + + # Java.g:80:11: ( 'interface' ) + # Java.g:80:13: 'interface' + pass + self.match("interface") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "INTERFACE" + + + + # $ANTLR start "IMPORT" + def mIMPORT(self, ): + + try: + _type = IMPORT + _channel = DEFAULT_CHANNEL + + # Java.g:81:8: ( 'import' ) + # Java.g:81:10: 'import' + pass + self.match("import") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "IMPORT" + + + + # $ANTLR start "INT" + def mINT(self, ): + + try: + _type = INT + _channel = DEFAULT_CHANNEL + + # Java.g:82:5: ( 'int' ) + # Java.g:82:7: 'int' + pass + self.match("int") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "INT" + + + + # $ANTLR start "LONG" + def mLONG(self, ): + + try: + _type = LONG + _channel = DEFAULT_CHANNEL + + # Java.g:83:6: ( 'long' ) + # Java.g:83:8: 'long' + pass + self.match("long") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LONG" + + + + # $ANTLR start "NATIVE" + def mNATIVE(self, ): + + try: + _type = NATIVE + _channel = DEFAULT_CHANNEL + + # Java.g:84:8: ( 'native' ) + # Java.g:84:10: 'native' + pass + self.match("native") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "NATIVE" + + + + # $ANTLR start "NEW" + def mNEW(self, ): + + try: + _type = NEW + _channel = DEFAULT_CHANNEL + + # Java.g:85:5: ( 'new' ) + # Java.g:85:7: 'new' + pass + self.match("new") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "NEW" + + + + # $ANTLR start "NULL" + def mNULL(self, ): + + try: + _type = NULL + _channel = DEFAULT_CHANNEL + + # Java.g:86:6: ( 'null' ) + # Java.g:86:8: 'null' + pass + self.match("null") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "NULL" + + + + # $ANTLR start "PACKAGE" + def mPACKAGE(self, ): + + try: + _type = PACKAGE + _channel = DEFAULT_CHANNEL + + # Java.g:87:9: ( 'package' ) + # Java.g:87:11: 'package' + pass + self.match("package") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "PACKAGE" + + + + # $ANTLR start "PRIVATE" + def mPRIVATE(self, ): + + try: + _type = PRIVATE + _channel = DEFAULT_CHANNEL + + # Java.g:88:9: ( 'private' ) + # Java.g:88:11: 'private' + pass + self.match("private") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "PRIVATE" + + + + # $ANTLR start "PROTECTED" + def mPROTECTED(self, ): + + try: + _type = PROTECTED + _channel = DEFAULT_CHANNEL + + # Java.g:89:11: ( 'protected' ) + # Java.g:89:13: 'protected' + pass + self.match("protected") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "PROTECTED" + + + + # $ANTLR start "PUBLIC" + def mPUBLIC(self, ): + + try: + _type = PUBLIC + _channel = DEFAULT_CHANNEL + + # Java.g:90:8: ( 'public' ) + # Java.g:90:10: 'public' + pass + self.match("public") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "PUBLIC" + + + + # $ANTLR start "RETURN" + def mRETURN(self, ): + + try: + _type = RETURN + _channel = DEFAULT_CHANNEL + + # Java.g:91:8: ( 'return' ) + # Java.g:91:10: 'return' + pass + self.match("return") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "RETURN" + + + + # $ANTLR start "SHORT" + def mSHORT(self, ): + + try: + _type = SHORT + _channel = DEFAULT_CHANNEL + + # Java.g:92:7: ( 'short' ) + # Java.g:92:9: 'short' + pass + self.match("short") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "SHORT" + + + + # $ANTLR start "STATIC" + def mSTATIC(self, ): + + try: + _type = STATIC + _channel = DEFAULT_CHANNEL + + # Java.g:93:8: ( 'static' ) + # Java.g:93:10: 'static' + pass + self.match("static") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "STATIC" + + + + # $ANTLR start "STRICTFP" + def mSTRICTFP(self, ): + + try: + _type = STRICTFP + _channel = DEFAULT_CHANNEL + + # Java.g:94:10: ( 'strictfp' ) + # Java.g:94:12: 'strictfp' + pass + self.match("strictfp") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "STRICTFP" + + + + # $ANTLR start "SUPER" + def mSUPER(self, ): + + try: + _type = SUPER + _channel = DEFAULT_CHANNEL + + # Java.g:95:7: ( 'super' ) + # Java.g:95:9: 'super' + pass + self.match("super") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "SUPER" + + + + # $ANTLR start "SWITCH" + def mSWITCH(self, ): + + try: + _type = SWITCH + _channel = DEFAULT_CHANNEL + + # Java.g:96:8: ( 'switch' ) + # Java.g:96:10: 'switch' + pass + self.match("switch") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "SWITCH" + + + + # $ANTLR start "SYNCHRONIZED" + def mSYNCHRONIZED(self, ): + + try: + _type = SYNCHRONIZED + _channel = DEFAULT_CHANNEL + + # Java.g:97:14: ( 'synchronized' ) + # Java.g:97:16: 'synchronized' + pass + self.match("synchronized") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "SYNCHRONIZED" + + + + # $ANTLR start "THIS" + def mTHIS(self, ): + + try: + _type = THIS + _channel = DEFAULT_CHANNEL + + # Java.g:98:6: ( 'this' ) + # Java.g:98:8: 'this' + pass + self.match("this") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "THIS" + + + + # $ANTLR start "THROW" + def mTHROW(self, ): + + try: + _type = THROW + _channel = DEFAULT_CHANNEL + + # Java.g:99:7: ( 'throw' ) + # Java.g:99:9: 'throw' + pass + self.match("throw") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "THROW" + + + + # $ANTLR start "THROWS" + def mTHROWS(self, ): + + try: + _type = THROWS + _channel = DEFAULT_CHANNEL + + # Java.g:100:8: ( 'throws' ) + # Java.g:100:10: 'throws' + pass + self.match("throws") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "THROWS" + + + + # $ANTLR start "TRANSIENT" + def mTRANSIENT(self, ): + + try: + _type = TRANSIENT + _channel = DEFAULT_CHANNEL + + # Java.g:101:11: ( 'transient' ) + # Java.g:101:13: 'transient' + pass + self.match("transient") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "TRANSIENT" + + + + # $ANTLR start "TRUE" + def mTRUE(self, ): + + try: + _type = TRUE + _channel = DEFAULT_CHANNEL + + # Java.g:102:6: ( 'true' ) + # Java.g:102:8: 'true' + pass + self.match("true") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "TRUE" + + + + # $ANTLR start "TRY" + def mTRY(self, ): + + try: + _type = TRY + _channel = DEFAULT_CHANNEL + + # Java.g:103:5: ( 'try' ) + # Java.g:103:7: 'try' + pass + self.match("try") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "TRY" + + + + # $ANTLR start "VOID" + def mVOID(self, ): + + try: + _type = VOID + _channel = DEFAULT_CHANNEL + + # Java.g:104:6: ( 'void' ) + # Java.g:104:8: 'void' + pass + self.match("void") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "VOID" + + + + # $ANTLR start "VOLATILE" + def mVOLATILE(self, ): + + try: + _type = VOLATILE + _channel = DEFAULT_CHANNEL + + # Java.g:105:10: ( 'volatile' ) + # Java.g:105:12: 'volatile' + pass + self.match("volatile") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "VOLATILE" + + + + # $ANTLR start "WHILE" + def mWHILE(self, ): + + try: + _type = WHILE + _channel = DEFAULT_CHANNEL + + # Java.g:106:7: ( 'while' ) + # Java.g:106:9: 'while' + pass + self.match("while") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "WHILE" + + + + # $ANTLR start "HEX_LITERAL" + def mHEX_LITERAL(self, ): + + try: + _type = HEX_LITERAL + _channel = DEFAULT_CHANNEL + + # Java.g:985:13: ( '0' ( 'x' | 'X' ) ( HEX_DIGIT )+ ( INTEGER_TYPE_SUFFIX )? ) + # Java.g:985:15: '0' ( 'x' | 'X' ) ( HEX_DIGIT )+ ( INTEGER_TYPE_SUFFIX )? + pass + self.match(48) + if self.input.LA(1) == 88 or self.input.LA(1) == 120: + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + # Java.g:985:29: ( HEX_DIGIT )+ + cnt1 = 0 + while True: #loop1 + alt1 = 2 + LA1_0 = self.input.LA(1) + + if ((48 <= LA1_0 <= 57) or (65 <= LA1_0 <= 70) or (97 <= LA1_0 <= 102)) : + alt1 = 1 + + + if alt1 == 1: + # Java.g:985:29: HEX_DIGIT + pass + self.mHEX_DIGIT() + + + else: + if cnt1 >= 1: + break #loop1 + + eee = EarlyExitException(1, self.input) + raise eee + + cnt1 += 1 + # Java.g:985:40: ( INTEGER_TYPE_SUFFIX )? + alt2 = 2 + LA2_0 = self.input.LA(1) + + if (LA2_0 == 76 or LA2_0 == 108) : + alt2 = 1 + if alt2 == 1: + # Java.g:985:40: INTEGER_TYPE_SUFFIX + pass + self.mINTEGER_TYPE_SUFFIX() + + + + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "HEX_LITERAL" + + + + # $ANTLR start "DECIMAL_LITERAL" + def mDECIMAL_LITERAL(self, ): + + try: + _type = DECIMAL_LITERAL + _channel = DEFAULT_CHANNEL + + # Java.g:987:17: ( ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( INTEGER_TYPE_SUFFIX )? ) + # Java.g:987:19: ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( INTEGER_TYPE_SUFFIX )? + pass + # Java.g:987:19: ( '0' | '1' .. '9' ( '0' .. '9' )* ) + alt4 = 2 + LA4_0 = self.input.LA(1) + + if (LA4_0 == 48) : + alt4 = 1 + elif ((49 <= LA4_0 <= 57)) : + alt4 = 2 + else: + nvae = NoViableAltException("", 4, 0, self.input) + + raise nvae + + if alt4 == 1: + # Java.g:987:20: '0' + pass + self.match(48) + + + elif alt4 == 2: + # Java.g:987:26: '1' .. '9' ( '0' .. '9' )* + pass + self.matchRange(49, 57) + # Java.g:987:35: ( '0' .. '9' )* + while True: #loop3 + alt3 = 2 + LA3_0 = self.input.LA(1) + + if ((48 <= LA3_0 <= 57)) : + alt3 = 1 + + + if alt3 == 1: + # Java.g:987:35: '0' .. '9' + pass + self.matchRange(48, 57) + + + else: + break #loop3 + + + + # Java.g:987:46: ( INTEGER_TYPE_SUFFIX )? + alt5 = 2 + LA5_0 = self.input.LA(1) + + if (LA5_0 == 76 or LA5_0 == 108) : + alt5 = 1 + if alt5 == 1: + # Java.g:987:46: INTEGER_TYPE_SUFFIX + pass + self.mINTEGER_TYPE_SUFFIX() + + + + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "DECIMAL_LITERAL" + + + + # $ANTLR start "OCTAL_LITERAL" + def mOCTAL_LITERAL(self, ): + + try: + _type = OCTAL_LITERAL + _channel = DEFAULT_CHANNEL + + # Java.g:989:15: ( '0' ( '0' .. '7' )+ ( INTEGER_TYPE_SUFFIX )? ) + # Java.g:989:17: '0' ( '0' .. '7' )+ ( INTEGER_TYPE_SUFFIX )? + pass + self.match(48) + # Java.g:989:21: ( '0' .. '7' )+ + cnt6 = 0 + while True: #loop6 + alt6 = 2 + LA6_0 = self.input.LA(1) + + if ((48 <= LA6_0 <= 55)) : + alt6 = 1 + + + if alt6 == 1: + # Java.g:989:22: '0' .. '7' + pass + self.matchRange(48, 55) + + + else: + if cnt6 >= 1: + break #loop6 + + eee = EarlyExitException(6, self.input) + raise eee + + cnt6 += 1 + # Java.g:989:33: ( INTEGER_TYPE_SUFFIX )? + alt7 = 2 + LA7_0 = self.input.LA(1) + + if (LA7_0 == 76 or LA7_0 == 108) : + alt7 = 1 + if alt7 == 1: + # Java.g:989:33: INTEGER_TYPE_SUFFIX + pass + self.mINTEGER_TYPE_SUFFIX() + + + + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "OCTAL_LITERAL" + + + + # $ANTLR start "HEX_DIGIT" + def mHEX_DIGIT(self, ): + + try: + # Java.g:992:11: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ) + # Java.g:992:13: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) + pass + if (48 <= self.input.LA(1) <= 57) or (65 <= self.input.LA(1) <= 70) or (97 <= self.input.LA(1) <= 102): + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + + finally: + + pass + + # $ANTLR end "HEX_DIGIT" + + + + # $ANTLR start "INTEGER_TYPE_SUFFIX" + def mINTEGER_TYPE_SUFFIX(self, ): + + try: + # Java.g:995:21: ( ( 'l' | 'L' ) ) + # Java.g:995:23: ( 'l' | 'L' ) + pass + if self.input.LA(1) == 76 or self.input.LA(1) == 108: + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + + finally: + + pass + + # $ANTLR end "INTEGER_TYPE_SUFFIX" + + + + # $ANTLR start "FLOATING_POINT_LITERAL" + def mFLOATING_POINT_LITERAL(self, ): + + try: + _type = FLOATING_POINT_LITERAL + _channel = DEFAULT_CHANNEL + + # Java.g:998:5: ( ( '0' .. '9' )+ ( DOT ( '0' .. '9' )* ( EXPONENT )? ( FLOAT_TYPE_SUFFIX )? | EXPONENT ( FLOAT_TYPE_SUFFIX )? | FLOAT_TYPE_SUFFIX ) | DOT ( '0' .. '9' )+ ( EXPONENT )? ( FLOAT_TYPE_SUFFIX )? ) + alt17 = 2 + LA17_0 = self.input.LA(1) + + if ((48 <= LA17_0 <= 57)) : + alt17 = 1 + elif (LA17_0 == 46) : + alt17 = 2 + else: + nvae = NoViableAltException("", 17, 0, self.input) + + raise nvae + + if alt17 == 1: + # Java.g:998:9: ( '0' .. '9' )+ ( DOT ( '0' .. '9' )* ( EXPONENT )? ( FLOAT_TYPE_SUFFIX )? | EXPONENT ( FLOAT_TYPE_SUFFIX )? | FLOAT_TYPE_SUFFIX ) + pass + # Java.g:998:9: ( '0' .. '9' )+ + cnt8 = 0 + while True: #loop8 + alt8 = 2 + LA8_0 = self.input.LA(1) + + if ((48 <= LA8_0 <= 57)) : + alt8 = 1 + + + if alt8 == 1: + # Java.g:998:10: '0' .. '9' + pass + self.matchRange(48, 57) + + + else: + if cnt8 >= 1: + break #loop8 + + eee = EarlyExitException(8, self.input) + raise eee + + cnt8 += 1 + # Java.g:999:9: ( DOT ( '0' .. '9' )* ( EXPONENT )? ( FLOAT_TYPE_SUFFIX )? | EXPONENT ( FLOAT_TYPE_SUFFIX )? | FLOAT_TYPE_SUFFIX ) + alt13 = 3 + LA13 = self.input.LA(1) + if LA13 == 46: + alt13 = 1 + elif LA13 == 69 or LA13 == 101: + alt13 = 2 + elif LA13 == 68 or LA13 == 70 or LA13 == 100 or LA13 == 102: + alt13 = 3 + else: + nvae = NoViableAltException("", 13, 0, self.input) + + raise nvae + + if alt13 == 1: + # Java.g:1000:13: DOT ( '0' .. '9' )* ( EXPONENT )? ( FLOAT_TYPE_SUFFIX )? + pass + self.mDOT() + # Java.g:1000:17: ( '0' .. '9' )* + while True: #loop9 + alt9 = 2 + LA9_0 = self.input.LA(1) + + if ((48 <= LA9_0 <= 57)) : + alt9 = 1 + + + if alt9 == 1: + # Java.g:1000:18: '0' .. '9' + pass + self.matchRange(48, 57) + + + else: + break #loop9 + # Java.g:1000:29: ( EXPONENT )? + alt10 = 2 + LA10_0 = self.input.LA(1) + + if (LA10_0 == 69 or LA10_0 == 101) : + alt10 = 1 + if alt10 == 1: + # Java.g:1000:29: EXPONENT + pass + self.mEXPONENT() + + + + # Java.g:1000:39: ( FLOAT_TYPE_SUFFIX )? + alt11 = 2 + LA11_0 = self.input.LA(1) + + if (LA11_0 == 68 or LA11_0 == 70 or LA11_0 == 100 or LA11_0 == 102) : + alt11 = 1 + if alt11 == 1: + # Java.g:1000:39: FLOAT_TYPE_SUFFIX + pass + self.mFLOAT_TYPE_SUFFIX() + + + + + + elif alt13 == 2: + # Java.g:1001:13: EXPONENT ( FLOAT_TYPE_SUFFIX )? + pass + self.mEXPONENT() + # Java.g:1001:22: ( FLOAT_TYPE_SUFFIX )? + alt12 = 2 + LA12_0 = self.input.LA(1) + + if (LA12_0 == 68 or LA12_0 == 70 or LA12_0 == 100 or LA12_0 == 102) : + alt12 = 1 + if alt12 == 1: + # Java.g:1001:22: FLOAT_TYPE_SUFFIX + pass + self.mFLOAT_TYPE_SUFFIX() + + + + + + elif alt13 == 3: + # Java.g:1002:13: FLOAT_TYPE_SUFFIX + pass + self.mFLOAT_TYPE_SUFFIX() + + + + + + elif alt17 == 2: + # Java.g:1004:9: DOT ( '0' .. '9' )+ ( EXPONENT )? ( FLOAT_TYPE_SUFFIX )? + pass + self.mDOT() + # Java.g:1004:13: ( '0' .. '9' )+ + cnt14 = 0 + while True: #loop14 + alt14 = 2 + LA14_0 = self.input.LA(1) + + if ((48 <= LA14_0 <= 57)) : + alt14 = 1 + + + if alt14 == 1: + # Java.g:1004:14: '0' .. '9' + pass + self.matchRange(48, 57) + + + else: + if cnt14 >= 1: + break #loop14 + + eee = EarlyExitException(14, self.input) + raise eee + + cnt14 += 1 + # Java.g:1004:25: ( EXPONENT )? + alt15 = 2 + LA15_0 = self.input.LA(1) + + if (LA15_0 == 69 or LA15_0 == 101) : + alt15 = 1 + if alt15 == 1: + # Java.g:1004:25: EXPONENT + pass + self.mEXPONENT() + + + + # Java.g:1004:35: ( FLOAT_TYPE_SUFFIX )? + alt16 = 2 + LA16_0 = self.input.LA(1) + + if (LA16_0 == 68 or LA16_0 == 70 or LA16_0 == 100 or LA16_0 == 102) : + alt16 = 1 + if alt16 == 1: + # Java.g:1004:35: FLOAT_TYPE_SUFFIX + pass + self.mFLOAT_TYPE_SUFFIX() + + + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "FLOATING_POINT_LITERAL" + + + + # $ANTLR start "EXPONENT" + def mEXPONENT(self, ): + + try: + # Java.g:1008:10: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ ) + # Java.g:1008:12: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ + pass + if self.input.LA(1) == 69 or self.input.LA(1) == 101: + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + # Java.g:1008:22: ( '+' | '-' )? + alt18 = 2 + LA18_0 = self.input.LA(1) + + if (LA18_0 == 43 or LA18_0 == 45) : + alt18 = 1 + if alt18 == 1: + # Java.g: + pass + if self.input.LA(1) == 43 or self.input.LA(1) == 45: + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + # Java.g:1008:33: ( '0' .. '9' )+ + cnt19 = 0 + while True: #loop19 + alt19 = 2 + LA19_0 = self.input.LA(1) + + if ((48 <= LA19_0 <= 57)) : + alt19 = 1 + + + if alt19 == 1: + # Java.g:1008:34: '0' .. '9' + pass + self.matchRange(48, 57) + + + else: + if cnt19 >= 1: + break #loop19 + + eee = EarlyExitException(19, self.input) + raise eee + + cnt19 += 1 + + + + + finally: + + pass + + # $ANTLR end "EXPONENT" + + + + # $ANTLR start "FLOAT_TYPE_SUFFIX" + def mFLOAT_TYPE_SUFFIX(self, ): + + try: + # Java.g:1011:19: ( ( 'f' | 'F' | 'd' | 'D' ) ) + # Java.g:1011:21: ( 'f' | 'F' | 'd' | 'D' ) + pass + if self.input.LA(1) == 68 or self.input.LA(1) == 70 or self.input.LA(1) == 100 or self.input.LA(1) == 102: + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + + finally: + + pass + + # $ANTLR end "FLOAT_TYPE_SUFFIX" + + + + # $ANTLR start "CHARACTER_LITERAL" + def mCHARACTER_LITERAL(self, ): + + try: + _type = CHARACTER_LITERAL + _channel = DEFAULT_CHANNEL + + # Java.g:1014:5: ( '\\'' ( ESCAPE_SEQUENCE | ~ ( '\\'' | '\\\\' ) ) '\\'' ) + # Java.g:1014:9: '\\'' ( ESCAPE_SEQUENCE | ~ ( '\\'' | '\\\\' ) ) '\\'' + pass + self.match(39) + # Java.g:1014:14: ( ESCAPE_SEQUENCE | ~ ( '\\'' | '\\\\' ) ) + alt20 = 2 + LA20_0 = self.input.LA(1) + + if (LA20_0 == 92) : + alt20 = 1 + elif ((0 <= LA20_0 <= 38) or (40 <= LA20_0 <= 91) or (93 <= LA20_0 <= 65535)) : + alt20 = 2 + else: + nvae = NoViableAltException("", 20, 0, self.input) + + raise nvae + + if alt20 == 1: + # Java.g:1014:16: ESCAPE_SEQUENCE + pass + self.mESCAPE_SEQUENCE() + + + elif alt20 == 2: + # Java.g:1014:34: ~ ( '\\'' | '\\\\' ) + pass + if (0 <= self.input.LA(1) <= 38) or (40 <= self.input.LA(1) <= 91) or (93 <= self.input.LA(1) <= 65535): + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + self.match(39) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "CHARACTER_LITERAL" + + + + # $ANTLR start "STRING_LITERAL" + def mSTRING_LITERAL(self, ): + + try: + _type = STRING_LITERAL + _channel = DEFAULT_CHANNEL + + # Java.g:1018:5: ( '\"' ( ESCAPE_SEQUENCE | ~ ( '\\\\' | '\"' ) )* '\"' ) + # Java.g:1018:8: '\"' ( ESCAPE_SEQUENCE | ~ ( '\\\\' | '\"' ) )* '\"' + pass + self.match(34) + # Java.g:1018:12: ( ESCAPE_SEQUENCE | ~ ( '\\\\' | '\"' ) )* + while True: #loop21 + alt21 = 3 + LA21_0 = self.input.LA(1) + + if (LA21_0 == 92) : + alt21 = 1 + elif ((0 <= LA21_0 <= 33) or (35 <= LA21_0 <= 91) or (93 <= LA21_0 <= 65535)) : + alt21 = 2 + + + if alt21 == 1: + # Java.g:1018:14: ESCAPE_SEQUENCE + pass + self.mESCAPE_SEQUENCE() + + + elif alt21 == 2: + # Java.g:1018:32: ~ ( '\\\\' | '\"' ) + pass + if (0 <= self.input.LA(1) <= 33) or (35 <= self.input.LA(1) <= 91) or (93 <= self.input.LA(1) <= 65535): + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + else: + break #loop21 + self.match(34) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "STRING_LITERAL" + + + + # $ANTLR start "ESCAPE_SEQUENCE" + def mESCAPE_SEQUENCE(self, ): + + try: + # Java.g:1023:5: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | UNICODE_ESCAPE | OCTAL_ESCAPE ) + alt22 = 3 + LA22_0 = self.input.LA(1) + + if (LA22_0 == 92) : + LA22 = self.input.LA(2) + if LA22 == 34 or LA22 == 39 or LA22 == 92 or LA22 == 98 or LA22 == 102 or LA22 == 110 or LA22 == 114 or LA22 == 116: + alt22 = 1 + elif LA22 == 117: + alt22 = 2 + elif LA22 == 48 or LA22 == 49 or LA22 == 50 or LA22 == 51 or LA22 == 52 or LA22 == 53 or LA22 == 54 or LA22 == 55: + alt22 = 3 + else: + nvae = NoViableAltException("", 22, 1, self.input) + + raise nvae + + else: + nvae = NoViableAltException("", 22, 0, self.input) + + raise nvae + + if alt22 == 1: + # Java.g:1023:9: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) + pass + self.match(92) + if self.input.LA(1) == 34 or self.input.LA(1) == 39 or self.input.LA(1) == 92 or self.input.LA(1) == 98 or self.input.LA(1) == 102 or self.input.LA(1) == 110 or self.input.LA(1) == 114 or self.input.LA(1) == 116: + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + elif alt22 == 2: + # Java.g:1024:9: UNICODE_ESCAPE + pass + self.mUNICODE_ESCAPE() + + + elif alt22 == 3: + # Java.g:1025:9: OCTAL_ESCAPE + pass + self.mOCTAL_ESCAPE() + + + + finally: + + pass + + # $ANTLR end "ESCAPE_SEQUENCE" + + + + # $ANTLR start "OCTAL_ESCAPE" + def mOCTAL_ESCAPE(self, ): + + try: + # Java.g:1030:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ) + alt23 = 3 + LA23_0 = self.input.LA(1) + + if (LA23_0 == 92) : + LA23_1 = self.input.LA(2) + + if ((48 <= LA23_1 <= 51)) : + LA23_2 = self.input.LA(3) + + if ((48 <= LA23_2 <= 55)) : + LA23_4 = self.input.LA(4) + + if ((48 <= LA23_4 <= 55)) : + alt23 = 1 + else: + alt23 = 2 + else: + alt23 = 3 + elif ((52 <= LA23_1 <= 55)) : + LA23_3 = self.input.LA(3) + + if ((48 <= LA23_3 <= 55)) : + alt23 = 2 + else: + alt23 = 3 + else: + nvae = NoViableAltException("", 23, 1, self.input) + + raise nvae + + else: + nvae = NoViableAltException("", 23, 0, self.input) + + raise nvae + + if alt23 == 1: + # Java.g:1030:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) + pass + self.match(92) + # Java.g:1030:14: ( '0' .. '3' ) + # Java.g:1030:15: '0' .. '3' + pass + self.matchRange(48, 51) + + + + # Java.g:1030:25: ( '0' .. '7' ) + # Java.g:1030:26: '0' .. '7' + pass + self.matchRange(48, 55) + + + + # Java.g:1030:36: ( '0' .. '7' ) + # Java.g:1030:37: '0' .. '7' + pass + self.matchRange(48, 55) + + + + + + elif alt23 == 2: + # Java.g:1031:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) + pass + self.match(92) + # Java.g:1031:14: ( '0' .. '7' ) + # Java.g:1031:15: '0' .. '7' + pass + self.matchRange(48, 55) + + + + # Java.g:1031:25: ( '0' .. '7' ) + # Java.g:1031:26: '0' .. '7' + pass + self.matchRange(48, 55) + + + + + + elif alt23 == 3: + # Java.g:1032:9: '\\\\' ( '0' .. '7' ) + pass + self.match(92) + # Java.g:1032:14: ( '0' .. '7' ) + # Java.g:1032:15: '0' .. '7' + pass + self.matchRange(48, 55) + + + + + + + finally: + + pass + + # $ANTLR end "OCTAL_ESCAPE" + + + + # $ANTLR start "UNICODE_ESCAPE" + def mUNICODE_ESCAPE(self, ): + + try: + # Java.g:1037:5: ( '\\\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT ) + # Java.g:1037:9: '\\\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT + pass + self.match(92) + self.match(117) + self.mHEX_DIGIT() + self.mHEX_DIGIT() + self.mHEX_DIGIT() + self.mHEX_DIGIT() + + + + + finally: + + pass + + # $ANTLR end "UNICODE_ESCAPE" + + + + # $ANTLR start "IDENT" + def mIDENT(self, ): + + try: + _type = IDENT + _channel = DEFAULT_CHANNEL + + # Java.g:1041:5: ( JAVA_ID_START ( JAVA_ID_PART )* ) + # Java.g:1041:9: JAVA_ID_START ( JAVA_ID_PART )* + pass + self.mJAVA_ID_START() + # Java.g:1041:23: ( JAVA_ID_PART )* + while True: #loop24 + alt24 = 2 + LA24_0 = self.input.LA(1) + + if (LA24_0 == 36 or (48 <= LA24_0 <= 57) or (65 <= LA24_0 <= 90) or LA24_0 == 95 or (97 <= LA24_0 <= 122) or (192 <= LA24_0 <= 214) or (216 <= LA24_0 <= 246) or (248 <= LA24_0 <= 8191) or (12352 <= LA24_0 <= 12687) or (13056 <= LA24_0 <= 13183) or (13312 <= LA24_0 <= 15661) or (19968 <= LA24_0 <= 40959) or (63744 <= LA24_0 <= 64255)) : + alt24 = 1 + + + if alt24 == 1: + # Java.g:1041:24: JAVA_ID_PART + pass + self.mJAVA_ID_PART() + + + else: + break #loop24 + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "IDENT" + + + + # $ANTLR start "JAVA_ID_START" + def mJAVA_ID_START(self, ): + + try: + # Java.g:1046:5: ( '\\u0024' | '\\u0041' .. '\\u005a' | '\\u005f' | '\\u0061' .. '\\u007a' | '\\u00c0' .. '\\u00d6' | '\\u00d8' .. '\\u00f6' | '\\u00f8' .. '\\u00ff' | '\\u0100' .. '\\u1fff' | '\\u3040' .. '\\u318f' | '\\u3300' .. '\\u337f' | '\\u3400' .. '\\u3d2d' | '\\u4e00' .. '\\u9fff' | '\\uf900' .. '\\ufaff' ) + # Java.g: + pass + if self.input.LA(1) == 36 or (65 <= self.input.LA(1) <= 90) or self.input.LA(1) == 95 or (97 <= self.input.LA(1) <= 122) or (192 <= self.input.LA(1) <= 214) or (216 <= self.input.LA(1) <= 246) or (248 <= self.input.LA(1) <= 8191) or (12352 <= self.input.LA(1) <= 12687) or (13056 <= self.input.LA(1) <= 13183) or (13312 <= self.input.LA(1) <= 15661) or (19968 <= self.input.LA(1) <= 40959) or (63744 <= self.input.LA(1) <= 64255): + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + + finally: + + pass + + # $ANTLR end "JAVA_ID_START" + + + + # $ANTLR start "JAVA_ID_PART" + def mJAVA_ID_PART(self, ): + + try: + # Java.g:1063:5: ( JAVA_ID_START | '\\u0030' .. '\\u0039' ) + # Java.g: + pass + if self.input.LA(1) == 36 or (48 <= self.input.LA(1) <= 57) or (65 <= self.input.LA(1) <= 90) or self.input.LA(1) == 95 or (97 <= self.input.LA(1) <= 122) or (192 <= self.input.LA(1) <= 214) or (216 <= self.input.LA(1) <= 246) or (248 <= self.input.LA(1) <= 8191) or (12352 <= self.input.LA(1) <= 12687) or (13056 <= self.input.LA(1) <= 13183) or (13312 <= self.input.LA(1) <= 15661) or (19968 <= self.input.LA(1) <= 40959) or (63744 <= self.input.LA(1) <= 64255): + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + + finally: + + pass + + # $ANTLR end "JAVA_ID_PART" + + + + # $ANTLR start "WS" + def mWS(self, ): + + try: + _type = WS + _channel = DEFAULT_CHANNEL + + # Java.g:1067:5: ( ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) ) + # Java.g:1067:8: ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) + pass + if (9 <= self.input.LA(1) <= 10) or (12 <= self.input.LA(1) <= 13) or self.input.LA(1) == 32: + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + #action start + + _channel = HIDDEN + + #action end + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "WS" + + + + # $ANTLR start "COMMENT" + def mCOMMENT(self, ): + + try: + _type = COMMENT + _channel = DEFAULT_CHANNEL + + # Java.g:1074:5: ( '/*' ~ ( '*' ) ( options {greedy=false; } : . )* '*/' ) + # Java.g:1074:9: '/*' ~ ( '*' ) ( options {greedy=false; } : . )* '*/' + pass + self.match("/*") + if (0 <= self.input.LA(1) <= 41) or (43 <= self.input.LA(1) <= 65535): + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + # Java.g:1074:21: ( options {greedy=false; } : . )* + while True: #loop25 + alt25 = 2 + LA25_0 = self.input.LA(1) + + if (LA25_0 == 42) : + LA25_1 = self.input.LA(2) + + if (LA25_1 == 47) : + alt25 = 2 + elif ((0 <= LA25_1 <= 46) or (48 <= LA25_1 <= 65535)) : + alt25 = 1 + + + elif ((0 <= LA25_0 <= 41) or (43 <= LA25_0 <= 65535)) : + alt25 = 1 + + + if alt25 == 1: + # Java.g:1074:49: . + pass + self.matchAny() + + + else: + break #loop25 + self.match("*/") + #action start + + _channel = HIDDEN + + #action end + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "COMMENT" + + + + # $ANTLR start "LINE_COMMENT" + def mLINE_COMMENT(self, ): + + try: + _type = LINE_COMMENT + _channel = DEFAULT_CHANNEL + + # Java.g:1081:5: ( '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' ) + # Java.g:1081:7: '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' + pass + self.match("//") + # Java.g:1081:12: (~ ( '\\n' | '\\r' ) )* + while True: #loop26 + alt26 = 2 + LA26_0 = self.input.LA(1) + + if ((0 <= LA26_0 <= 9) or (11 <= LA26_0 <= 12) or (14 <= LA26_0 <= 65535)) : + alt26 = 1 + + + if alt26 == 1: + # Java.g:1081:12: ~ ( '\\n' | '\\r' ) + pass + if (0 <= self.input.LA(1) <= 9) or (11 <= self.input.LA(1) <= 12) or (14 <= self.input.LA(1) <= 65535): + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + else: + break #loop26 + # Java.g:1081:26: ( '\\r' )? + alt27 = 2 + LA27_0 = self.input.LA(1) + + if (LA27_0 == 13) : + alt27 = 1 + if alt27 == 1: + # Java.g:1081:26: '\\r' + pass + self.match(13) + + + + self.match(10) + #action start + + _channel = HIDDEN + + #action end + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LINE_COMMENT" + + + + # $ANTLR start "JAVADOC_COMMENT" + def mJAVADOC_COMMENT(self, ): + + try: + _type = JAVADOC_COMMENT + _channel = DEFAULT_CHANNEL + + # Java.g:1088:5: ( '/**' ( options {greedy=false; } : . )* '*/' ) + # Java.g:1088:9: '/**' ( options {greedy=false; } : . )* '*/' + pass + self.match("/**") + # Java.g:1088:15: ( options {greedy=false; } : . )* + while True: #loop28 + alt28 = 2 + LA28_0 = self.input.LA(1) + + if (LA28_0 == 42) : + LA28_1 = self.input.LA(2) + + if (LA28_1 == 47) : + alt28 = 2 + elif ((0 <= LA28_1 <= 46) or (48 <= LA28_1 <= 65535)) : + alt28 = 1 + + + elif ((0 <= LA28_0 <= 41) or (43 <= LA28_0 <= 65535)) : + alt28 = 1 + + + if alt28 == 1: + # Java.g:1088:43: . + pass + self.matchAny() + + + else: + break #loop28 + self.match("*/") + #action start + + _channel = HIDDEN + + #action end + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "JAVADOC_COMMENT" + + + + def mTokens(self): + # Java.g:1:8: ( AND | AND_ASSIGN | ASSIGN | AT | BIT_SHIFT_RIGHT | BIT_SHIFT_RIGHT_ASSIGN | COLON | COMMA | DEC | DIV | DIV_ASSIGN | DOT | DOTSTAR | ELLIPSIS | EQUAL | GREATER_OR_EQUAL | GREATER_THAN | INC | LBRACK | LCURLY | LESS_OR_EQUAL | LESS_THAN | LOGICAL_AND | LOGICAL_NOT | LOGICAL_OR | LPAREN | MINUS | MINUS_ASSIGN | MOD | MOD_ASSIGN | NOT | NOT_EQUAL | OR | OR_ASSIGN | PLUS | PLUS_ASSIGN | QUESTION | RBRACK | RCURLY | RPAREN | SEMI | SHIFT_LEFT | SHIFT_LEFT_ASSIGN | SHIFT_RIGHT | SHIFT_RIGHT_ASSIGN | STAR | STAR_ASSIGN | XOR | XOR_ASSIGN | ABSTRACT | ASSERT | BOOLEAN | BREAK | BYTE | CASE | CATCH | CHAR | CLASS | CONTINUE | DEFAULT | DO | DOUBLE | ELSE | ENUM | EXTENDS | FALSE | FINAL | FINALLY | FLOAT | FOR | IF | IMPLEMENTS | INSTANCEOF | INTERFACE | IMPORT | INT | LONG | NATIVE | NEW | NULL | PACKAGE | PRIVATE | PROTECTED | PUBLIC | RETURN | SHORT | STATIC | STRICTFP | SUPER | SWITCH | SYNCHRONIZED | THIS | THROW | THROWS | TRANSIENT | TRUE | TRY | VOID | VOLATILE | WHILE | HEX_LITERAL | DECIMAL_LITERAL | OCTAL_LITERAL | FLOATING_POINT_LITERAL | CHARACTER_LITERAL | STRING_LITERAL | IDENT | WS | COMMENT | LINE_COMMENT | JAVADOC_COMMENT ) + alt29 = 111 + alt29 = self.dfa29.predict(self.input) + if alt29 == 1: + # Java.g:1:10: AND + pass + self.mAND() + + + elif alt29 == 2: + # Java.g:1:14: AND_ASSIGN + pass + self.mAND_ASSIGN() + + + elif alt29 == 3: + # Java.g:1:25: ASSIGN + pass + self.mASSIGN() + + + elif alt29 == 4: + # Java.g:1:32: AT + pass + self.mAT() + + + elif alt29 == 5: + # Java.g:1:35: BIT_SHIFT_RIGHT + pass + self.mBIT_SHIFT_RIGHT() + + + elif alt29 == 6: + # Java.g:1:51: BIT_SHIFT_RIGHT_ASSIGN + pass + self.mBIT_SHIFT_RIGHT_ASSIGN() + + + elif alt29 == 7: + # Java.g:1:74: COLON + pass + self.mCOLON() + + + elif alt29 == 8: + # Java.g:1:80: COMMA + pass + self.mCOMMA() + + + elif alt29 == 9: + # Java.g:1:86: DEC + pass + self.mDEC() + + + elif alt29 == 10: + # Java.g:1:90: DIV + pass + self.mDIV() + + + elif alt29 == 11: + # Java.g:1:94: DIV_ASSIGN + pass + self.mDIV_ASSIGN() + + + elif alt29 == 12: + # Java.g:1:105: DOT + pass + self.mDOT() + + + elif alt29 == 13: + # Java.g:1:109: DOTSTAR + pass + self.mDOTSTAR() + + + elif alt29 == 14: + # Java.g:1:117: ELLIPSIS + pass + self.mELLIPSIS() + + + elif alt29 == 15: + # Java.g:1:126: EQUAL + pass + self.mEQUAL() + + + elif alt29 == 16: + # Java.g:1:132: GREATER_OR_EQUAL + pass + self.mGREATER_OR_EQUAL() + + + elif alt29 == 17: + # Java.g:1:149: GREATER_THAN + pass + self.mGREATER_THAN() + + + elif alt29 == 18: + # Java.g:1:162: INC + pass + self.mINC() + + + elif alt29 == 19: + # Java.g:1:166: LBRACK + pass + self.mLBRACK() + + + elif alt29 == 20: + # Java.g:1:173: LCURLY + pass + self.mLCURLY() + + + elif alt29 == 21: + # Java.g:1:180: LESS_OR_EQUAL + pass + self.mLESS_OR_EQUAL() + + + elif alt29 == 22: + # Java.g:1:194: LESS_THAN + pass + self.mLESS_THAN() + + + elif alt29 == 23: + # Java.g:1:204: LOGICAL_AND + pass + self.mLOGICAL_AND() + + + elif alt29 == 24: + # Java.g:1:216: LOGICAL_NOT + pass + self.mLOGICAL_NOT() + + + elif alt29 == 25: + # Java.g:1:228: LOGICAL_OR + pass + self.mLOGICAL_OR() + + + elif alt29 == 26: + # Java.g:1:239: LPAREN + pass + self.mLPAREN() + + + elif alt29 == 27: + # Java.g:1:246: MINUS + pass + self.mMINUS() + + + elif alt29 == 28: + # Java.g:1:252: MINUS_ASSIGN + pass + self.mMINUS_ASSIGN() + + + elif alt29 == 29: + # Java.g:1:265: MOD + pass + self.mMOD() + + + elif alt29 == 30: + # Java.g:1:269: MOD_ASSIGN + pass + self.mMOD_ASSIGN() + + + elif alt29 == 31: + # Java.g:1:280: NOT + pass + self.mNOT() + + + elif alt29 == 32: + # Java.g:1:284: NOT_EQUAL + pass + self.mNOT_EQUAL() + + + elif alt29 == 33: + # Java.g:1:294: OR + pass + self.mOR() + + + elif alt29 == 34: + # Java.g:1:297: OR_ASSIGN + pass + self.mOR_ASSIGN() + + + elif alt29 == 35: + # Java.g:1:307: PLUS + pass + self.mPLUS() + + + elif alt29 == 36: + # Java.g:1:312: PLUS_ASSIGN + pass + self.mPLUS_ASSIGN() + + + elif alt29 == 37: + # Java.g:1:324: QUESTION + pass + self.mQUESTION() + + + elif alt29 == 38: + # Java.g:1:333: RBRACK + pass + self.mRBRACK() + + + elif alt29 == 39: + # Java.g:1:340: RCURLY + pass + self.mRCURLY() + + + elif alt29 == 40: + # Java.g:1:347: RPAREN + pass + self.mRPAREN() + + + elif alt29 == 41: + # Java.g:1:354: SEMI + pass + self.mSEMI() + + + elif alt29 == 42: + # Java.g:1:359: SHIFT_LEFT + pass + self.mSHIFT_LEFT() + + + elif alt29 == 43: + # Java.g:1:370: SHIFT_LEFT_ASSIGN + pass + self.mSHIFT_LEFT_ASSIGN() + + + elif alt29 == 44: + # Java.g:1:388: SHIFT_RIGHT + pass + self.mSHIFT_RIGHT() + + + elif alt29 == 45: + # Java.g:1:400: SHIFT_RIGHT_ASSIGN + pass + self.mSHIFT_RIGHT_ASSIGN() + + + elif alt29 == 46: + # Java.g:1:419: STAR + pass + self.mSTAR() + + + elif alt29 == 47: + # Java.g:1:424: STAR_ASSIGN + pass + self.mSTAR_ASSIGN() + + + elif alt29 == 48: + # Java.g:1:436: XOR + pass + self.mXOR() + + + elif alt29 == 49: + # Java.g:1:440: XOR_ASSIGN + pass + self.mXOR_ASSIGN() + + + elif alt29 == 50: + # Java.g:1:451: ABSTRACT + pass + self.mABSTRACT() + + + elif alt29 == 51: + # Java.g:1:460: ASSERT + pass + self.mASSERT() + + + elif alt29 == 52: + # Java.g:1:467: BOOLEAN + pass + self.mBOOLEAN() + + + elif alt29 == 53: + # Java.g:1:475: BREAK + pass + self.mBREAK() + + + elif alt29 == 54: + # Java.g:1:481: BYTE + pass + self.mBYTE() + + + elif alt29 == 55: + # Java.g:1:486: CASE + pass + self.mCASE() + + + elif alt29 == 56: + # Java.g:1:491: CATCH + pass + self.mCATCH() + + + elif alt29 == 57: + # Java.g:1:497: CHAR + pass + self.mCHAR() + + + elif alt29 == 58: + # Java.g:1:502: CLASS + pass + self.mCLASS() + + + elif alt29 == 59: + # Java.g:1:508: CONTINUE + pass + self.mCONTINUE() + + + elif alt29 == 60: + # Java.g:1:517: DEFAULT + pass + self.mDEFAULT() + + + elif alt29 == 61: + # Java.g:1:525: DO + pass + self.mDO() + + + elif alt29 == 62: + # Java.g:1:528: DOUBLE + pass + self.mDOUBLE() + + + elif alt29 == 63: + # Java.g:1:535: ELSE + pass + self.mELSE() + + + elif alt29 == 64: + # Java.g:1:540: ENUM + pass + self.mENUM() + + + elif alt29 == 65: + # Java.g:1:545: EXTENDS + pass + self.mEXTENDS() + + + elif alt29 == 66: + # Java.g:1:553: FALSE + pass + self.mFALSE() + + + elif alt29 == 67: + # Java.g:1:559: FINAL + pass + self.mFINAL() + + + elif alt29 == 68: + # Java.g:1:565: FINALLY + pass + self.mFINALLY() + + + elif alt29 == 69: + # Java.g:1:573: FLOAT + pass + self.mFLOAT() + + + elif alt29 == 70: + # Java.g:1:579: FOR + pass + self.mFOR() + + + elif alt29 == 71: + # Java.g:1:583: IF + pass + self.mIF() + + + elif alt29 == 72: + # Java.g:1:586: IMPLEMENTS + pass + self.mIMPLEMENTS() + + + elif alt29 == 73: + # Java.g:1:597: INSTANCEOF + pass + self.mINSTANCEOF() + + + elif alt29 == 74: + # Java.g:1:608: INTERFACE + pass + self.mINTERFACE() + + + elif alt29 == 75: + # Java.g:1:618: IMPORT + pass + self.mIMPORT() + + + elif alt29 == 76: + # Java.g:1:625: INT + pass + self.mINT() + + + elif alt29 == 77: + # Java.g:1:629: LONG + pass + self.mLONG() + + + elif alt29 == 78: + # Java.g:1:634: NATIVE + pass + self.mNATIVE() + + + elif alt29 == 79: + # Java.g:1:641: NEW + pass + self.mNEW() + + + elif alt29 == 80: + # Java.g:1:645: NULL + pass + self.mNULL() + + + elif alt29 == 81: + # Java.g:1:650: PACKAGE + pass + self.mPACKAGE() + + + elif alt29 == 82: + # Java.g:1:658: PRIVATE + pass + self.mPRIVATE() + + + elif alt29 == 83: + # Java.g:1:666: PROTECTED + pass + self.mPROTECTED() + + + elif alt29 == 84: + # Java.g:1:676: PUBLIC + pass + self.mPUBLIC() + + + elif alt29 == 85: + # Java.g:1:683: RETURN + pass + self.mRETURN() + + + elif alt29 == 86: + # Java.g:1:690: SHORT + pass + self.mSHORT() + + + elif alt29 == 87: + # Java.g:1:696: STATIC + pass + self.mSTATIC() + + + elif alt29 == 88: + # Java.g:1:703: STRICTFP + pass + self.mSTRICTFP() + + + elif alt29 == 89: + # Java.g:1:712: SUPER + pass + self.mSUPER() + + + elif alt29 == 90: + # Java.g:1:718: SWITCH + pass + self.mSWITCH() + + + elif alt29 == 91: + # Java.g:1:725: SYNCHRONIZED + pass + self.mSYNCHRONIZED() + + + elif alt29 == 92: + # Java.g:1:738: THIS + pass + self.mTHIS() + + + elif alt29 == 93: + # Java.g:1:743: THROW + pass + self.mTHROW() + + + elif alt29 == 94: + # Java.g:1:749: THROWS + pass + self.mTHROWS() + + + elif alt29 == 95: + # Java.g:1:756: TRANSIENT + pass + self.mTRANSIENT() + + + elif alt29 == 96: + # Java.g:1:766: TRUE + pass + self.mTRUE() + + + elif alt29 == 97: + # Java.g:1:771: TRY + pass + self.mTRY() + + + elif alt29 == 98: + # Java.g:1:775: VOID + pass + self.mVOID() + + + elif alt29 == 99: + # Java.g:1:780: VOLATILE + pass + self.mVOLATILE() + + + elif alt29 == 100: + # Java.g:1:789: WHILE + pass + self.mWHILE() + + + elif alt29 == 101: + # Java.g:1:795: HEX_LITERAL + pass + self.mHEX_LITERAL() + + + elif alt29 == 102: + # Java.g:1:807: DECIMAL_LITERAL + pass + self.mDECIMAL_LITERAL() + + + elif alt29 == 103: + # Java.g:1:823: OCTAL_LITERAL + pass + self.mOCTAL_LITERAL() + + + elif alt29 == 104: + # Java.g:1:837: FLOATING_POINT_LITERAL + pass + self.mFLOATING_POINT_LITERAL() + + + elif alt29 == 105: + # Java.g:1:860: CHARACTER_LITERAL + pass + self.mCHARACTER_LITERAL() + + + elif alt29 == 106: + # Java.g:1:878: STRING_LITERAL + pass + self.mSTRING_LITERAL() + + + elif alt29 == 107: + # Java.g:1:893: IDENT + pass + self.mIDENT() + + + elif alt29 == 108: + # Java.g:1:899: WS + pass + self.mWS() + + + elif alt29 == 109: + # Java.g:1:902: COMMENT + pass + self.mCOMMENT() + + + elif alt29 == 110: + # Java.g:1:910: LINE_COMMENT + pass + self.mLINE_COMMENT() + + + elif alt29 == 111: + # Java.g:1:923: JAVADOC_COMMENT + pass + self.mJAVADOC_COMMENT() + + + + + + + + # lookup tables for DFA #29 + + DFA29_eot = DFA.unpack( + u"\1\uffff\1\61\1\63\1\uffff\1\66\2\uffff\1\71\1\75\1\100\1\104\2" + u"\uffff\1\107\1\111\1\114\1\uffff\1\116\6\uffff\1\120\1\122\17\55" + u"\2\173\11\uffff\1\177\21\uffff\1\u0083\14\uffff\12\55\1\u0090\7" + u"\55\1\u0098\23\55\1\uffff\1\u00b3\1\uffff\1\173\1\u00b5\6\uffff" + u"\14\55\1\uffff\6\55\1\u00c8\1\uffff\2\55\1\u00cd\2\55\1\u00d0\20" + u"\55\1\u00e1\3\55\3\uffff\4\55\1\u00e9\1\u00ea\1\55\1\u00ec\4\55" + u"\1\u00f1\1\u00f2\4\55\1\uffff\4\55\1\uffff\1\u00fb\1\55\1\uffff" + u"\1\u00fd\13\55\1\u0109\2\55\1\u010c\1\uffff\1\u010d\5\55\1\u0113" + u"\2\uffff\1\u0114\1\uffff\1\u0115\3\55\2\uffff\1\55\1\u011a\1\u011c" + u"\1\u011d\4\55\1\uffff\1\55\1\uffff\5\55\1\u0128\2\55\1\u012b\2" + u"\55\1\uffff\1\u012f\1\55\2\uffff\1\55\1\u0132\1\55\1\u0134\1\55" + u"\3\uffff\2\55\1\u0138\1\55\1\uffff\1\55\2\uffff\1\55\1\u013c\2" + u"\55\1\u013f\3\55\1\u0143\1\u0144\1\uffff\1\u0145\1\55\1\uffff\1" + u"\u0147\1\55\1\u0149\1\uffff\2\55\1\uffff\1\55\1\uffff\1\u014d\1" + u"\55\1\u014f\1\uffff\1\u0150\1\u0151\1\55\1\uffff\2\55\1\uffff\1" + u"\u0155\1\u0156\1\55\3\uffff\1\55\1\uffff\1\55\1\uffff\2\55\1\u015c" + u"\1\uffff\1\u015d\3\uffff\3\55\2\uffff\1\55\1\u0162\2\55\1\u0165" + u"\2\uffff\2\55\1\u0168\1\u0169\1\uffff\1\55\1\u016b\1\uffff\1\u016c" + u"\1\u016d\2\uffff\1\55\3\uffff\1\55\1\u0170\1\uffff" + ) + + DFA29_eof = DFA.unpack( + u"\u0171\uffff" + ) + + DFA29_min = DFA.unpack( + u"\1\11\1\46\1\75\1\uffff\1\75\2\uffff\1\55\2\52\1\53\2\uffff\1\74" + u"\2\75\1\uffff\1\75\6\uffff\2\75\1\142\1\157\1\141\1\145\1\154\1" + u"\141\1\146\1\157\2\141\1\145\2\150\1\157\1\150\2\56\11\uffff\1" + u"\75\6\uffff\1\0\12\uffff\1\75\14\uffff\2\163\1\157\1\145\1\164" + u"\1\163\2\141\1\156\1\146\1\44\1\163\1\165\1\164\1\154\1\156\1\157" + u"\1\162\1\44\1\160\1\163\1\156\1\164\1\167\1\154\1\143\1\151\1\142" + u"\1\164\1\157\1\141\1\160\1\151\1\156\1\151\1\141\2\151\1\uffff" + u"\1\56\1\uffff\1\56\1\75\6\uffff\1\164\1\145\1\154\1\141\2\145\1" + u"\143\1\162\1\163\1\164\1\141\1\142\1\uffff\1\145\1\155\1\145\1" + u"\163\2\141\1\44\1\uffff\1\154\1\164\1\44\1\147\1\151\1\44\1\154" + u"\1\153\1\166\1\164\1\154\1\165\1\162\1\164\1\151\1\145\1\164\1" + u"\143\1\163\1\157\1\156\1\145\1\44\1\144\1\141\1\154\3\uffff\2\162" + u"\1\145\1\153\2\44\1\150\1\44\1\163\1\151\1\165\1\154\2\44\1\156" + u"\1\145\1\154\1\164\1\uffff\1\145\1\162\1\141\1\162\1\uffff\1\44" + u"\1\166\1\uffff\1\44\2\141\1\145\1\151\1\162\1\164\1\151\1\143\1" + u"\162\1\143\1\150\1\44\1\167\1\163\1\44\1\uffff\1\44\1\164\1\145" + u"\1\141\1\164\1\141\1\44\2\uffff\1\44\1\uffff\1\44\1\156\1\154\1" + u"\145\2\uffff\1\144\3\44\1\155\1\164\1\156\1\146\1\uffff\1\145\1" + u"\uffff\1\147\1\164\2\143\1\156\1\44\1\143\1\164\1\44\1\150\1\162" + u"\1\uffff\1\44\1\151\2\uffff\1\151\1\44\1\143\1\44\1\156\3\uffff" + u"\1\165\1\164\1\44\1\163\1\uffff\1\171\2\uffff\1\145\1\44\1\143" + u"\1\141\1\44\2\145\1\164\2\44\1\uffff\1\44\1\146\1\uffff\1\44\1" + u"\157\1\44\1\uffff\1\145\1\154\1\uffff\1\164\1\uffff\1\44\1\145" + u"\1\44\1\uffff\2\44\1\156\1\uffff\1\145\1\143\1\uffff\2\44\1\145" + u"\3\uffff\1\160\1\uffff\1\156\1\uffff\1\156\1\145\1\44\1\uffff\1" + u"\44\3\uffff\1\164\1\157\1\145\2\uffff\1\144\1\44\1\151\1\164\1" + u"\44\2\uffff\1\163\1\146\2\44\1\uffff\1\172\1\44\1\uffff\2\44\2" + u"\uffff\1\145\3\uffff\1\144\1\44\1\uffff" + ) + + DFA29_max = DFA.unpack( + u"\1\ufaff\2\75\1\uffff\1\76\2\uffff\2\75\1\71\1\75\2\uffff\2\75" + u"\1\174\1\uffff\1\75\6\uffff\2\75\1\163\1\171\2\157\1\170\1\157" + u"\1\156\1\157\2\165\1\145\1\171\1\162\1\157\1\150\1\170\1\146\11" + u"\uffff\1\76\6\uffff\1\uffff\12\uffff\1\75\14\uffff\2\163\1\157" + u"\1\145\2\164\2\141\1\156\1\146\1\ufaff\1\163\1\165\1\164\1\154" + u"\1\156\1\157\1\162\1\ufaff\1\160\1\164\1\156\1\164\1\167\1\154" + u"\1\143\1\157\1\142\1\164\1\157\1\162\1\160\1\151\1\156\1\162\1" + u"\171\1\154\1\151\1\uffff\1\146\1\uffff\1\146\1\75\6\uffff\1\164" + u"\1\145\1\154\1\141\2\145\1\143\1\162\1\163\1\164\1\141\1\142\1" + u"\uffff\1\145\1\155\1\145\1\163\2\141\1\ufaff\1\uffff\1\157\1\164" + u"\1\ufaff\1\147\1\151\1\ufaff\1\154\1\153\1\166\1\164\1\154\1\165" + u"\1\162\1\164\1\151\1\145\1\164\1\143\1\163\1\157\1\156\1\145\1" + u"\ufaff\1\144\1\141\1\154\3\uffff\2\162\1\145\1\153\2\ufaff\1\150" + u"\1\ufaff\1\163\1\151\1\165\1\154\2\ufaff\1\156\1\145\1\154\1\164" + u"\1\uffff\1\145\1\162\1\141\1\162\1\uffff\1\ufaff\1\166\1\uffff" + u"\1\ufaff\2\141\1\145\1\151\1\162\1\164\1\151\1\143\1\162\1\143" + u"\1\150\1\ufaff\1\167\1\163\1\ufaff\1\uffff\1\ufaff\1\164\1\145" + u"\1\141\1\164\1\141\1\ufaff\2\uffff\1\ufaff\1\uffff\1\ufaff\1\156" + u"\1\154\1\145\2\uffff\1\144\3\ufaff\1\155\1\164\1\156\1\146\1\uffff" + u"\1\145\1\uffff\1\147\1\164\2\143\1\156\1\ufaff\1\143\1\164\1\ufaff" + u"\1\150\1\162\1\uffff\1\ufaff\1\151\2\uffff\1\151\1\ufaff\1\143" + u"\1\ufaff\1\156\3\uffff\1\165\1\164\1\ufaff\1\163\1\uffff\1\171" + u"\2\uffff\1\145\1\ufaff\1\143\1\141\1\ufaff\2\145\1\164\2\ufaff" + u"\1\uffff\1\ufaff\1\146\1\uffff\1\ufaff\1\157\1\ufaff\1\uffff\1" + u"\145\1\154\1\uffff\1\164\1\uffff\1\ufaff\1\145\1\ufaff\1\uffff" + u"\2\ufaff\1\156\1\uffff\1\145\1\143\1\uffff\2\ufaff\1\145\3\uffff" + u"\1\160\1\uffff\1\156\1\uffff\1\156\1\145\1\ufaff\1\uffff\1\ufaff" + u"\3\uffff\1\164\1\157\1\145\2\uffff\1\144\1\ufaff\1\151\1\164\1" + u"\ufaff\2\uffff\1\163\1\146\2\ufaff\1\uffff\1\172\1\ufaff\1\uffff" + u"\2\ufaff\2\uffff\1\145\3\uffff\1\144\1\ufaff\1\uffff" + ) + + DFA29_accept = DFA.unpack( + u"\3\uffff\1\4\1\uffff\1\7\1\10\4\uffff\1\23\1\24\3\uffff\1\32\1" + u"\uffff\1\37\1\45\1\46\1\47\1\50\1\51\23\uffff\1\151\1\152\1\153" + u"\1\154\1\2\1\27\1\1\1\17\1\3\1\uffff\1\20\1\21\1\11\1\34\1\33\1" + u"\13\1\uffff\1\156\1\12\1\15\1\16\1\14\1\150\1\22\1\44\1\43\1\25" + u"\1\uffff\1\26\1\40\1\30\1\31\1\42\1\41\1\36\1\35\1\57\1\56\1\61" + u"\1\60\46\uffff\1\145\1\uffff\1\146\2\uffff\1\55\1\54\1\155\1\157" + u"\1\53\1\52\14\uffff\1\75\7\uffff\1\107\32\uffff\1\147\1\6\1\5\22" + u"\uffff\1\106\4\uffff\1\114\2\uffff\1\117\20\uffff\1\141\7\uffff" + u"\1\66\1\67\1\uffff\1\71\4\uffff\1\77\1\100\10\uffff\1\115\1\uffff" + u"\1\120\13\uffff\1\134\2\uffff\1\140\1\142\5\uffff\1\65\1\70\1\72" + u"\4\uffff\1\102\1\uffff\1\103\1\105\12\uffff\1\126\2\uffff\1\131" + u"\3\uffff\1\135\2\uffff\1\144\1\uffff\1\63\3\uffff\1\76\3\uffff" + u"\1\113\2\uffff\1\116\3\uffff\1\124\1\125\1\127\1\uffff\1\132\1" + u"\uffff\1\136\3\uffff\1\64\1\uffff\1\74\1\101\1\104\3\uffff\1\121" + u"\1\122\5\uffff\1\62\1\73\4\uffff\1\130\2\uffff\1\143\2\uffff\1" + u"\112\1\123\1\uffff\1\137\1\110\1\111\2\uffff\1\133" + ) + + DFA29_special = DFA.unpack( + u"\73\uffff\1\0\u0135\uffff" + ) + + + DFA29_transition = [ + DFA.unpack(u"\2\56\1\uffff\2\56\22\uffff\1\56\1\16\1\54\1\uffff\1" + u"\55\1\21\1\1\1\53\1\20\1\26\1\30\1\12\1\6\1\7\1\11\1\10\1\51\11" + u"\52\1\5\1\27\1\15\1\2\1\4\1\23\1\3\32\55\1\13\1\uffff\1\24\1\31" + u"\1\55\1\uffff\1\32\1\33\1\34\1\35\1\36\1\37\2\55\1\40\2\55\1\41" + u"\1\55\1\42\1\55\1\43\1\55\1\44\1\45\1\46\1\55\1\47\1\50\3\55\1" + u"\14\1\17\1\25\1\22\101\uffff\27\55\1\uffff\37\55\1\uffff\u1f08" + u"\55\u1040\uffff\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e" + u"\55\u10d2\uffff\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\60\26\uffff\1\57"), + DFA.unpack(u"\1\62"), + DFA.unpack(u""), + DFA.unpack(u"\1\65\1\64"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\67\17\uffff\1\70"), + DFA.unpack(u"\1\73\4\uffff\1\74\15\uffff\1\72"), + DFA.unpack(u"\1\76\3\uffff\1\77\1\uffff\12\101"), + DFA.unpack(u"\1\102\21\uffff\1\103"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\106\1\105"), + DFA.unpack(u"\1\110"), + DFA.unpack(u"\1\113\76\uffff\1\112"), + DFA.unpack(u""), + DFA.unpack(u"\1\115"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\117"), + DFA.unpack(u"\1\121"), + DFA.unpack(u"\1\123\20\uffff\1\124"), + DFA.unpack(u"\1\125\2\uffff\1\126\6\uffff\1\127"), + DFA.unpack(u"\1\130\6\uffff\1\131\3\uffff\1\132\2\uffff\1\133"), + DFA.unpack(u"\1\134\11\uffff\1\135"), + DFA.unpack(u"\1\136\1\uffff\1\137\11\uffff\1\140"), + DFA.unpack(u"\1\141\7\uffff\1\142\2\uffff\1\143\2\uffff\1\144"), + DFA.unpack(u"\1\145\6\uffff\1\146\1\147"), + DFA.unpack(u"\1\150"), + DFA.unpack(u"\1\151\3\uffff\1\152\17\uffff\1\153"), + DFA.unpack(u"\1\154\20\uffff\1\155\2\uffff\1\156"), + DFA.unpack(u"\1\157"), + DFA.unpack(u"\1\160\13\uffff\1\161\1\162\1\uffff\1\163\1\uffff\1" + u"\164"), + DFA.unpack(u"\1\165\11\uffff\1\166"), + DFA.unpack(u"\1\167"), + DFA.unpack(u"\1\170"), + DFA.unpack(u"\1\101\1\uffff\10\172\2\101\12\uffff\3\101\21\uffff" + u"\1\171\13\uffff\3\101\21\uffff\1\171"), + DFA.unpack(u"\1\101\1\uffff\12\174\12\uffff\3\101\35\uffff\3\101"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\176\1\175"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\52\u0080\1\u0081\uffd5\u0080"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u0082"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u0084"), + DFA.unpack(u"\1\u0085"), + DFA.unpack(u"\1\u0086"), + DFA.unpack(u"\1\u0087"), + DFA.unpack(u"\1\u0088"), + DFA.unpack(u"\1\u0089\1\u008a"), + DFA.unpack(u"\1\u008b"), + DFA.unpack(u"\1\u008c"), + DFA.unpack(u"\1\u008d"), + DFA.unpack(u"\1\u008e"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\24\55\1\u008f\5\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08" + u"\55\u1040\uffff\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e" + u"\55\u10d2\uffff\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u0091"), + DFA.unpack(u"\1\u0092"), + DFA.unpack(u"\1\u0093"), + DFA.unpack(u"\1\u0094"), + DFA.unpack(u"\1\u0095"), + DFA.unpack(u"\1\u0096"), + DFA.unpack(u"\1\u0097"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u0099"), + DFA.unpack(u"\1\u009a\1\u009b"), + DFA.unpack(u"\1\u009c"), + DFA.unpack(u"\1\u009d"), + DFA.unpack(u"\1\u009e"), + DFA.unpack(u"\1\u009f"), + DFA.unpack(u"\1\u00a0"), + DFA.unpack(u"\1\u00a1\5\uffff\1\u00a2"), + DFA.unpack(u"\1\u00a3"), + DFA.unpack(u"\1\u00a4"), + DFA.unpack(u"\1\u00a5"), + DFA.unpack(u"\1\u00a6\20\uffff\1\u00a7"), + DFA.unpack(u"\1\u00a8"), + DFA.unpack(u"\1\u00a9"), + DFA.unpack(u"\1\u00aa"), + DFA.unpack(u"\1\u00ab\10\uffff\1\u00ac"), + DFA.unpack(u"\1\u00ad\23\uffff\1\u00ae\3\uffff\1\u00af"), + DFA.unpack(u"\1\u00b0\2\uffff\1\u00b1"), + DFA.unpack(u"\1\u00b2"), + DFA.unpack(u""), + DFA.unpack(u"\1\101\1\uffff\10\172\2\101\12\uffff\3\101\35\uffff" + u"\3\101"), + DFA.unpack(u""), + DFA.unpack(u"\1\101\1\uffff\12\174\12\uffff\3\101\35\uffff\3\101"), + DFA.unpack(u"\1\u00b4"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u00b6"), + DFA.unpack(u"\1\u00b7"), + DFA.unpack(u"\1\u00b8"), + DFA.unpack(u"\1\u00b9"), + DFA.unpack(u"\1\u00ba"), + DFA.unpack(u"\1\u00bb"), + DFA.unpack(u"\1\u00bc"), + DFA.unpack(u"\1\u00bd"), + DFA.unpack(u"\1\u00be"), + DFA.unpack(u"\1\u00bf"), + DFA.unpack(u"\1\u00c0"), + DFA.unpack(u"\1\u00c1"), + DFA.unpack(u""), + DFA.unpack(u"\1\u00c2"), + DFA.unpack(u"\1\u00c3"), + DFA.unpack(u"\1\u00c4"), + DFA.unpack(u"\1\u00c5"), + DFA.unpack(u"\1\u00c6"), + DFA.unpack(u"\1\u00c7"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u""), + DFA.unpack(u"\1\u00c9\2\uffff\1\u00ca"), + DFA.unpack(u"\1\u00cb"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\4\55\1\u00cc\25\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08" + u"\55\u1040\uffff\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e" + u"\55\u10d2\uffff\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u00ce"), + DFA.unpack(u"\1\u00cf"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u00d1"), + DFA.unpack(u"\1\u00d2"), + DFA.unpack(u"\1\u00d3"), + DFA.unpack(u"\1\u00d4"), + DFA.unpack(u"\1\u00d5"), + DFA.unpack(u"\1\u00d6"), + DFA.unpack(u"\1\u00d7"), + DFA.unpack(u"\1\u00d8"), + DFA.unpack(u"\1\u00d9"), + DFA.unpack(u"\1\u00da"), + DFA.unpack(u"\1\u00db"), + DFA.unpack(u"\1\u00dc"), + DFA.unpack(u"\1\u00dd"), + DFA.unpack(u"\1\u00de"), + DFA.unpack(u"\1\u00df"), + DFA.unpack(u"\1\u00e0"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u00e2"), + DFA.unpack(u"\1\u00e3"), + DFA.unpack(u"\1\u00e4"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u00e5"), + DFA.unpack(u"\1\u00e6"), + DFA.unpack(u"\1\u00e7"), + DFA.unpack(u"\1\u00e8"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u00eb"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u00ed"), + DFA.unpack(u"\1\u00ee"), + DFA.unpack(u"\1\u00ef"), + DFA.unpack(u"\1\u00f0"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u00f3"), + DFA.unpack(u"\1\u00f4"), + DFA.unpack(u"\1\u00f5"), + DFA.unpack(u"\1\u00f6"), + DFA.unpack(u""), + DFA.unpack(u"\1\u00f7"), + DFA.unpack(u"\1\u00f8"), + DFA.unpack(u"\1\u00f9"), + DFA.unpack(u"\1\u00fa"), + DFA.unpack(u""), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u00fc"), + DFA.unpack(u""), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u00fe"), + DFA.unpack(u"\1\u00ff"), + DFA.unpack(u"\1\u0100"), + DFA.unpack(u"\1\u0101"), + DFA.unpack(u"\1\u0102"), + DFA.unpack(u"\1\u0103"), + DFA.unpack(u"\1\u0104"), + DFA.unpack(u"\1\u0105"), + DFA.unpack(u"\1\u0106"), + DFA.unpack(u"\1\u0107"), + DFA.unpack(u"\1\u0108"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u010a"), + DFA.unpack(u"\1\u010b"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u""), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u010e"), + DFA.unpack(u"\1\u010f"), + DFA.unpack(u"\1\u0110"), + DFA.unpack(u"\1\u0111"), + DFA.unpack(u"\1\u0112"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u""), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u0116"), + DFA.unpack(u"\1\u0117"), + DFA.unpack(u"\1\u0118"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u0119"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\13\55\1\u011b\16\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08" + u"\55\u1040\uffff\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e" + u"\55\u10d2\uffff\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u011e"), + DFA.unpack(u"\1\u011f"), + DFA.unpack(u"\1\u0120"), + DFA.unpack(u"\1\u0121"), + DFA.unpack(u""), + DFA.unpack(u"\1\u0122"), + DFA.unpack(u""), + DFA.unpack(u"\1\u0123"), + DFA.unpack(u"\1\u0124"), + DFA.unpack(u"\1\u0125"), + DFA.unpack(u"\1\u0126"), + DFA.unpack(u"\1\u0127"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u0129"), + DFA.unpack(u"\1\u012a"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u012c"), + DFA.unpack(u"\1\u012d"), + DFA.unpack(u""), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\22\55\1\u012e\7\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08" + u"\55\u1040\uffff\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e" + u"\55\u10d2\uffff\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u0130"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u0131"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u0133"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u0135"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u0136"), + DFA.unpack(u"\1\u0137"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u0139"), + DFA.unpack(u""), + DFA.unpack(u"\1\u013a"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u013b"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u013d"), + DFA.unpack(u"\1\u013e"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u0140"), + DFA.unpack(u"\1\u0141"), + DFA.unpack(u"\1\u0142"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u""), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u0146"), + DFA.unpack(u""), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u0148"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u""), + DFA.unpack(u"\1\u014a"), + DFA.unpack(u"\1\u014b"), + DFA.unpack(u""), + DFA.unpack(u"\1\u014c"), + DFA.unpack(u""), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u014e"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u""), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u0152"), + DFA.unpack(u""), + DFA.unpack(u"\1\u0153"), + DFA.unpack(u"\1\u0154"), + DFA.unpack(u""), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u0157"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u0158"), + DFA.unpack(u""), + DFA.unpack(u"\1\u0159"), + DFA.unpack(u""), + DFA.unpack(u"\1\u015a"), + DFA.unpack(u"\1\u015b"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u""), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u015e"), + DFA.unpack(u"\1\u015f"), + DFA.unpack(u"\1\u0160"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u0161"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\u0163"), + DFA.unpack(u"\1\u0164"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u0166"), + DFA.unpack(u"\1\u0167"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u""), + DFA.unpack(u"\1\u016a"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u""), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u016e"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u016f"), + DFA.unpack(u"\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + u"\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + u"\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + u"\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(u"") + ] + + # class definition for DFA #29 + + class DFA29(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA29_59 = input.LA(1) + + s = -1 + if ((0 <= LA29_59 <= 41) or (43 <= LA29_59 <= 65535)): + s = 128 + + elif (LA29_59 == 42): + s = 129 + + if s >= 0: + return s + + nvae = NoViableAltException(self_.getDescription(), 29, _s, input) + self_.error(nvae) + raise nvae + + + + +def main(argv, stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stderr): + from antlr3.main import LexerMain + main = LexerMain(JavaLexer) + main.stdin = stdin + main.stdout = stdout + main.stderr = stderr + main.execute(argv) + + +if __name__ == '__main__': + main(sys.argv) diff --git a/build/lib.linux-x86_64-2.7/java2python/lang/JavaParser.py b/build/lib.linux-x86_64-2.7/java2python/lang/JavaParser.py new file mode 100644 index 0000000..28b9c64 --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/lang/JavaParser.py @@ -0,0 +1,23337 @@ +# $ANTLR 3.1.3 Mar 18, 2009 10:09:25 Java.g 2012-01-29 13:54:04 + +import sys +from antlr3 import * +from antlr3.compat import set, frozenset + +from antlr3.tree import * + + + +# for convenience in actions +HIDDEN = BaseRecognizer.HIDDEN + +# token types +PACKAGE=84 +EXPONENT=173 +STAR=49 +WHILE=103 +MOD=32 +MOD_ASSIGN=33 +CASE=58 +CHAR=60 +NEW=82 +DO=64 +GENERIC_TYPE_PARAM_LIST=138 +CLASS_INSTANCE_INITIALIZER=121 +ARRAY_ELEMENT_ACCESS=115 +FOR_CONDITION=129 +NOT=34 +VAR_DECLARATION=160 +ANNOTATION_METHOD_DECL=109 +EOF=-1 +DIV_ASSIGN=14 +LOGICAL_AND=26 +BREAK=56 +UNARY_PLUS=159 +BIT_SHIFT_RIGHT_ASSIGN=9 +TYPE=157 +RPAREN=43 +INC=21 +FINAL=70 +IMPORT=78 +STRING_LITERAL=170 +FOR_UPDATE=132 +FLOATING_POINT_LITERAL=168 +CAST_EXPR=118 +NOT_EQUAL=35 +VOID_METHOD_DECL=163 +THIS=95 +RETURN=88 +DOUBLE=65 +ENUM_TOP_LEVEL_SCOPE=125 +VOID=101 +SUPER=92 +COMMENT=181 +ANNOTATION_INIT_KEY_LIST=107 +JAVA_ID_START=178 +FLOAT_TYPE_SUFFIX=174 +PRE_DEC=149 +RBRACK=41 +IMPLEMENTS_CLAUSE=140 +SWITCH_BLOCK_LABEL_LIST=154 +LINE_COMMENT=182 +PRIVATE=85 +STATIC=90 +BLOCK_SCOPE=117 +ANNOTATION_INIT_DEFAULT_KEY=106 +SWITCH=93 +NULL=83 +VAR_DECLARATOR=161 +MINUS_ASSIGN=31 +ELSE=66 +STRICTFP=91 +CHARACTER_LITERAL=169 +PRE_INC=150 +ANNOTATION_LIST=108 +ELLIPSIS=17 +NATIVE=81 +OCTAL_ESCAPE=177 +UNARY_MINUS=158 +THROWS=97 +LCURLY=23 +INT=79 +FORMAL_PARAM_VARARG_DECL=135 +METHOD_CALL=144 +ASSERT=54 +TRY=100 +INTERFACE_TOP_LEVEL_SCOPE=139 +SHIFT_LEFT=45 +WS=180 +SHIFT_RIGHT=47 +FORMAL_PARAM_STD_DECL=134 +LOCAL_MODIFIER_LIST=142 +OR=36 +LESS_THAN=25 +SHIFT_RIGHT_ASSIGN=48 +EXTENDS_BOUND_LIST=127 +JAVA_SOURCE=143 +CATCH=59 +FALSE=69 +INTEGER_TYPE_SUFFIX=172 +DECIMAL_LITERAL=167 +THROW=96 +FOR_INIT=131 +DEC=12 +PROTECTED=86 +CLASS=61 +LBRACK=22 +BIT_SHIFT_RIGHT=8 +THROWS_CLAUSE=156 +GREATER_OR_EQUAL=19 +FOR=73 +THIS_CONSTRUCTOR_CALL=155 +LOGICAL_NOT=27 +JAVADOC_COMMENT=183 +FLOAT=72 +ABSTRACT=53 +AND=4 +POST_DEC=147 +AND_ASSIGN=5 +STATIC_ARRAY_CREATOR=152 +MODIFIER_LIST=145 +ANNOTATION_SCOPE=110 +LPAREN=29 +IF=74 +AT=7 +ESCAPE_SEQUENCE=175 +CONSTRUCTOR_DECL=124 +LABELED_STATEMENT=141 +UNICODE_ESCAPE=176 +EXPR=126 +SYNCHRONIZED=94 +BOOLEAN=55 +CLASS_TOP_LEVEL_SCOPE=123 +IMPLEMENTS=75 +CONTINUE=62 +COMMA=11 +TRANSIENT=98 +EQUAL=18 +XOR_ASSIGN=52 +LOGICAL_OR=28 +IDENT=164 +QUALIFIED_TYPE_IDENT=151 +ARGUMENT_LIST=112 +PLUS=38 +HEX_LITERAL=165 +ANNOTATION_INIT_BLOCK=105 +DOT=15 +SHIFT_LEFT_ASSIGN=46 +FORMAL_PARAM_LIST=133 +GENERIC_TYPE_ARG_LIST=137 +ANNOTATION_TOP_LEVEL_SCOPE=111 +DOTSTAR=16 +BYTE=57 +XOR=51 +JAVA_ID_PART=179 +GREATER_THAN=20 +VOLATILE=102 +PARENTESIZED_EXPR=146 +CLASS_STATIC_INITIALIZER=122 +ARRAY_DECLARATOR_LIST=114 +LESS_OR_EQUAL=24 +DEFAULT=63 +OCTAL_LITERAL=166 +HEX_DIGIT=171 +SHORT=89 +INSTANCEOF=76 +MINUS=30 +EXTENDS_CLAUSE=128 +TRUE=99 +SEMI=44 +STAR_ASSIGN=50 +VAR_DECLARATOR_LIST=162 +ARRAY_DECLARATOR=113 +COLON=10 +OR_ASSIGN=37 +ENUM=67 +QUESTION=40 +FINALLY=71 +RCURLY=42 +PLUS_ASSIGN=39 +ASSIGN=6 +ANNOTATION_INIT_ARRAY_ELEMENT=104 +FUNCTION_METHOD_DECL=136 +INTERFACE=77 +POST_INC=148 +DIV=13 +CLASS_CONSTRUCTOR_CALL=120 +LONG=80 +FOR_EACH=130 +EXTENDS=68 +PUBLIC=87 +ARRAY_INITIALIZER=116 +CATCH_CLAUSE_LIST=119 +SUPER_CONSTRUCTOR_CALL=153 + +# token names +tokenNames = [ + "", "", "", "", + "AND", "AND_ASSIGN", "ASSIGN", "AT", "BIT_SHIFT_RIGHT", "BIT_SHIFT_RIGHT_ASSIGN", + "COLON", "COMMA", "DEC", "DIV", "DIV_ASSIGN", "DOT", "DOTSTAR", "ELLIPSIS", + "EQUAL", "GREATER_OR_EQUAL", "GREATER_THAN", "INC", "LBRACK", "LCURLY", + "LESS_OR_EQUAL", "LESS_THAN", "LOGICAL_AND", "LOGICAL_NOT", "LOGICAL_OR", + "LPAREN", "MINUS", "MINUS_ASSIGN", "MOD", "MOD_ASSIGN", "NOT", "NOT_EQUAL", + "OR", "OR_ASSIGN", "PLUS", "PLUS_ASSIGN", "QUESTION", "RBRACK", "RCURLY", + "RPAREN", "SEMI", "SHIFT_LEFT", "SHIFT_LEFT_ASSIGN", "SHIFT_RIGHT", + "SHIFT_RIGHT_ASSIGN", "STAR", "STAR_ASSIGN", "XOR", "XOR_ASSIGN", "ABSTRACT", + "ASSERT", "BOOLEAN", "BREAK", "BYTE", "CASE", "CATCH", "CHAR", "CLASS", + "CONTINUE", "DEFAULT", "DO", "DOUBLE", "ELSE", "ENUM", "EXTENDS", "FALSE", + "FINAL", "FINALLY", "FLOAT", "FOR", "IF", "IMPLEMENTS", "INSTANCEOF", + "INTERFACE", "IMPORT", "INT", "LONG", "NATIVE", "NEW", "NULL", "PACKAGE", + "PRIVATE", "PROTECTED", "PUBLIC", "RETURN", "SHORT", "STATIC", "STRICTFP", + "SUPER", "SWITCH", "SYNCHRONIZED", "THIS", "THROW", "THROWS", "TRANSIENT", + "TRUE", "TRY", "VOID", "VOLATILE", "WHILE", "ANNOTATION_INIT_ARRAY_ELEMENT", + "ANNOTATION_INIT_BLOCK", "ANNOTATION_INIT_DEFAULT_KEY", "ANNOTATION_INIT_KEY_LIST", + "ANNOTATION_LIST", "ANNOTATION_METHOD_DECL", "ANNOTATION_SCOPE", "ANNOTATION_TOP_LEVEL_SCOPE", + "ARGUMENT_LIST", "ARRAY_DECLARATOR", "ARRAY_DECLARATOR_LIST", "ARRAY_ELEMENT_ACCESS", + "ARRAY_INITIALIZER", "BLOCK_SCOPE", "CAST_EXPR", "CATCH_CLAUSE_LIST", + "CLASS_CONSTRUCTOR_CALL", "CLASS_INSTANCE_INITIALIZER", "CLASS_STATIC_INITIALIZER", + "CLASS_TOP_LEVEL_SCOPE", "CONSTRUCTOR_DECL", "ENUM_TOP_LEVEL_SCOPE", + "EXPR", "EXTENDS_BOUND_LIST", "EXTENDS_CLAUSE", "FOR_CONDITION", "FOR_EACH", + "FOR_INIT", "FOR_UPDATE", "FORMAL_PARAM_LIST", "FORMAL_PARAM_STD_DECL", + "FORMAL_PARAM_VARARG_DECL", "FUNCTION_METHOD_DECL", "GENERIC_TYPE_ARG_LIST", + "GENERIC_TYPE_PARAM_LIST", "INTERFACE_TOP_LEVEL_SCOPE", "IMPLEMENTS_CLAUSE", + "LABELED_STATEMENT", "LOCAL_MODIFIER_LIST", "JAVA_SOURCE", "METHOD_CALL", + "MODIFIER_LIST", "PARENTESIZED_EXPR", "POST_DEC", "POST_INC", "PRE_DEC", + "PRE_INC", "QUALIFIED_TYPE_IDENT", "STATIC_ARRAY_CREATOR", "SUPER_CONSTRUCTOR_CALL", + "SWITCH_BLOCK_LABEL_LIST", "THIS_CONSTRUCTOR_CALL", "THROWS_CLAUSE", + "TYPE", "UNARY_MINUS", "UNARY_PLUS", "VAR_DECLARATION", "VAR_DECLARATOR", + "VAR_DECLARATOR_LIST", "VOID_METHOD_DECL", "IDENT", "HEX_LITERAL", "OCTAL_LITERAL", + "DECIMAL_LITERAL", "FLOATING_POINT_LITERAL", "CHARACTER_LITERAL", "STRING_LITERAL", + "HEX_DIGIT", "INTEGER_TYPE_SUFFIX", "EXPONENT", "FLOAT_TYPE_SUFFIX", + "ESCAPE_SEQUENCE", "UNICODE_ESCAPE", "OCTAL_ESCAPE", "JAVA_ID_START", + "JAVA_ID_PART", "WS", "COMMENT", "LINE_COMMENT", "JAVADOC_COMMENT" +] + + + + +class JavaParser(Parser): + grammarFileName = "Java.g" + antlr_version = version_str_to_tuple("3.1.3 Mar 18, 2009 10:09:25") + antlr_version_str = "3.1.3 Mar 18, 2009 10:09:25" + tokenNames = tokenNames + + def __init__(self, input, state=None, *args, **kwargs): + if state is None: + state = RecognizerSharedState() + + super(JavaParser, self).__init__(input, state, *args, **kwargs) + + self._state.ruleMemo = {} + self.dfa36 = self.DFA36( + self, 36, + eot = self.DFA36_eot, + eof = self.DFA36_eof, + min = self.DFA36_min, + max = self.DFA36_max, + accept = self.DFA36_accept, + special = self.DFA36_special, + transition = self.DFA36_transition + ) + + self.dfa43 = self.DFA43( + self, 43, + eot = self.DFA43_eot, + eof = self.DFA43_eof, + min = self.DFA43_min, + max = self.DFA43_max, + accept = self.DFA43_accept, + special = self.DFA43_special, + transition = self.DFA43_transition + ) + + self.dfa86 = self.DFA86( + self, 86, + eot = self.DFA86_eot, + eof = self.DFA86_eof, + min = self.DFA86_min, + max = self.DFA86_max, + accept = self.DFA86_accept, + special = self.DFA86_special, + transition = self.DFA86_transition + ) + + self.dfa88 = self.DFA88( + self, 88, + eot = self.DFA88_eot, + eof = self.DFA88_eof, + min = self.DFA88_min, + max = self.DFA88_max, + accept = self.DFA88_accept, + special = self.DFA88_special, + transition = self.DFA88_transition + ) + + self.dfa98 = self.DFA98( + self, 98, + eot = self.DFA98_eot, + eof = self.DFA98_eof, + min = self.DFA98_min, + max = self.DFA98_max, + accept = self.DFA98_accept, + special = self.DFA98_special, + transition = self.DFA98_transition + ) + + self.dfa91 = self.DFA91( + self, 91, + eot = self.DFA91_eot, + eof = self.DFA91_eof, + min = self.DFA91_min, + max = self.DFA91_max, + accept = self.DFA91_accept, + special = self.DFA91_special, + transition = self.DFA91_transition + ) + + self.dfa106 = self.DFA106( + self, 106, + eot = self.DFA106_eot, + eof = self.DFA106_eof, + min = self.DFA106_min, + max = self.DFA106_max, + accept = self.DFA106_accept, + special = self.DFA106_special, + transition = self.DFA106_transition + ) + + self.dfa130 = self.DFA130( + self, 130, + eot = self.DFA130_eot, + eof = self.DFA130_eof, + min = self.DFA130_min, + max = self.DFA130_max, + accept = self.DFA130_accept, + special = self.DFA130_special, + transition = self.DFA130_transition + ) + + self.dfa142 = self.DFA142( + self, 142, + eot = self.DFA142_eot, + eof = self.DFA142_eof, + min = self.DFA142_min, + max = self.DFA142_max, + accept = self.DFA142_accept, + special = self.DFA142_special, + transition = self.DFA142_transition + ) + + self.dfa146 = self.DFA146( + self, 146, + eot = self.DFA146_eot, + eof = self.DFA146_eof, + min = self.DFA146_min, + max = self.DFA146_max, + accept = self.DFA146_accept, + special = self.DFA146_special, + transition = self.DFA146_transition + ) + + self.dfa153 = self.DFA153( + self, 153, + eot = self.DFA153_eot, + eof = self.DFA153_eof, + min = self.DFA153_min, + max = self.DFA153_max, + accept = self.DFA153_accept, + special = self.DFA153_special, + transition = self.DFA153_transition + ) + + + + + + + self._adaptor = None + self.adaptor = CommonTreeAdaptor() + + + + + def getTreeAdaptor(self): + return self._adaptor + + def setTreeAdaptor(self, adaptor): + self._adaptor = adaptor + + adaptor = property(getTreeAdaptor, setTreeAdaptor) + + + class javaSource_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.javaSource_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "javaSource" + # Java.g:222:1: javaSource : compilationUnit -> ^( JAVA_SOURCE compilationUnit ) ; + def javaSource(self, ): + + retval = self.javaSource_return() + retval.start = self.input.LT(1) + javaSource_StartIndex = self.input.index() + root_0 = None + + compilationUnit1 = None + + + stream_compilationUnit = RewriteRuleSubtreeStream(self._adaptor, "rule compilationUnit") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 1): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:223:5: ( compilationUnit -> ^( JAVA_SOURCE compilationUnit ) ) + # Java.g:223:9: compilationUnit + pass + self._state.following.append(self.FOLLOW_compilationUnit_in_javaSource4461) + compilationUnit1 = self.compilationUnit() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_compilationUnit.add(compilationUnit1.tree) + + # AST Rewrite + # elements: compilationUnit + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 224:9: -> ^( JAVA_SOURCE compilationUnit ) + # Java.g:224:13: ^( JAVA_SOURCE compilationUnit ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(JAVA_SOURCE, "JAVA_SOURCE"), root_1) + + self._adaptor.addChild(root_1, stream_compilationUnit.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 1, javaSource_StartIndex, success) + + pass + return retval + + # $ANTLR end "javaSource" + + class compilationUnit_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.compilationUnit_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "compilationUnit" + # Java.g:227:1: compilationUnit : annotationList ( packageDeclaration )? ( importDeclaration )* ( typeDecls )* ; + def compilationUnit(self, ): + + retval = self.compilationUnit_return() + retval.start = self.input.LT(1) + compilationUnit_StartIndex = self.input.index() + root_0 = None + + annotationList2 = None + + packageDeclaration3 = None + + importDeclaration4 = None + + typeDecls5 = None + + + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 2): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:228:5: ( annotationList ( packageDeclaration )? ( importDeclaration )* ( typeDecls )* ) + # Java.g:228:9: annotationList ( packageDeclaration )? ( importDeclaration )* ( typeDecls )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_annotationList_in_compilationUnit4497) + annotationList2 = self.annotationList() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotationList2.tree) + # Java.g:229:9: ( packageDeclaration )? + alt1 = 2 + LA1_0 = self.input.LA(1) + + if (LA1_0 == PACKAGE) : + alt1 = 1 + if alt1 == 1: + # Java.g:0:0: packageDeclaration + pass + self._state.following.append(self.FOLLOW_packageDeclaration_in_compilationUnit4507) + packageDeclaration3 = self.packageDeclaration() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, packageDeclaration3.tree) + + + + # Java.g:230:9: ( importDeclaration )* + while True: #loop2 + alt2 = 2 + LA2_0 = self.input.LA(1) + + if (LA2_0 == IMPORT) : + alt2 = 1 + + + if alt2 == 1: + # Java.g:0:0: importDeclaration + pass + self._state.following.append(self.FOLLOW_importDeclaration_in_compilationUnit4518) + importDeclaration4 = self.importDeclaration() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, importDeclaration4.tree) + + + else: + break #loop2 + # Java.g:231:9: ( typeDecls )* + while True: #loop3 + alt3 = 2 + LA3_0 = self.input.LA(1) + + if (LA3_0 == AT or LA3_0 == LESS_THAN or LA3_0 == SEMI or LA3_0 == ABSTRACT or LA3_0 == BOOLEAN or LA3_0 == BYTE or (CHAR <= LA3_0 <= CLASS) or LA3_0 == DOUBLE or LA3_0 == ENUM or LA3_0 == FINAL or LA3_0 == FLOAT or LA3_0 == INTERFACE or (INT <= LA3_0 <= NATIVE) or (PRIVATE <= LA3_0 <= PUBLIC) or (SHORT <= LA3_0 <= STRICTFP) or LA3_0 == SYNCHRONIZED or LA3_0 == TRANSIENT or (VOID <= LA3_0 <= VOLATILE) or LA3_0 == IDENT) : + alt3 = 1 + + + if alt3 == 1: + # Java.g:0:0: typeDecls + pass + self._state.following.append(self.FOLLOW_typeDecls_in_compilationUnit4529) + typeDecls5 = self.typeDecls() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, typeDecls5.tree) + + + else: + break #loop3 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 2, compilationUnit_StartIndex, success) + + pass + return retval + + # $ANTLR end "compilationUnit" + + class typeDecls_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.typeDecls_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "typeDecls" + # Java.g:234:1: typeDecls : ( typeDeclaration | SEMI ); + def typeDecls(self, ): + + retval = self.typeDecls_return() + retval.start = self.input.LT(1) + typeDecls_StartIndex = self.input.index() + root_0 = None + + SEMI7 = None + typeDeclaration6 = None + + + SEMI7_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 3): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:235:5: ( typeDeclaration | SEMI ) + alt4 = 2 + LA4_0 = self.input.LA(1) + + if (LA4_0 == AT or LA4_0 == LESS_THAN or LA4_0 == ABSTRACT or LA4_0 == BOOLEAN or LA4_0 == BYTE or (CHAR <= LA4_0 <= CLASS) or LA4_0 == DOUBLE or LA4_0 == ENUM or LA4_0 == FINAL or LA4_0 == FLOAT or LA4_0 == INTERFACE or (INT <= LA4_0 <= NATIVE) or (PRIVATE <= LA4_0 <= PUBLIC) or (SHORT <= LA4_0 <= STRICTFP) or LA4_0 == SYNCHRONIZED or LA4_0 == TRANSIENT or (VOID <= LA4_0 <= VOLATILE) or LA4_0 == IDENT) : + alt4 = 1 + elif (LA4_0 == SEMI) : + alt4 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 4, 0, self.input) + + raise nvae + + if alt4 == 1: + # Java.g:235:9: typeDeclaration + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_typeDeclaration_in_typeDecls4549) + typeDeclaration6 = self.typeDeclaration() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, typeDeclaration6.tree) + + + elif alt4 == 2: + # Java.g:236:9: SEMI + pass + root_0 = self._adaptor.nil() + + SEMI7=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_typeDecls4559) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 3, typeDecls_StartIndex, success) + + pass + return retval + + # $ANTLR end "typeDecls" + + class packageDeclaration_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.packageDeclaration_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "packageDeclaration" + # Java.g:239:1: packageDeclaration : PACKAGE qualifiedIdentifier SEMI ; + def packageDeclaration(self, ): + + retval = self.packageDeclaration_return() + retval.start = self.input.LT(1) + packageDeclaration_StartIndex = self.input.index() + root_0 = None + + PACKAGE8 = None + SEMI10 = None + qualifiedIdentifier9 = None + + + PACKAGE8_tree = None + SEMI10_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 4): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:240:5: ( PACKAGE qualifiedIdentifier SEMI ) + # Java.g:240:9: PACKAGE qualifiedIdentifier SEMI + pass + root_0 = self._adaptor.nil() + + PACKAGE8=self.match(self.input, PACKAGE, self.FOLLOW_PACKAGE_in_packageDeclaration4579) + if self._state.backtracking == 0: + + PACKAGE8_tree = self._adaptor.createWithPayload(PACKAGE8) + root_0 = self._adaptor.becomeRoot(PACKAGE8_tree, root_0) + + self._state.following.append(self.FOLLOW_qualifiedIdentifier_in_packageDeclaration4582) + qualifiedIdentifier9 = self.qualifiedIdentifier() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, qualifiedIdentifier9.tree) + SEMI10=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_packageDeclaration4584) + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 4, packageDeclaration_StartIndex, success) + + pass + return retval + + # $ANTLR end "packageDeclaration" + + class importDeclaration_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.importDeclaration_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "importDeclaration" + # Java.g:243:1: importDeclaration : IMPORT ( STATIC )? qualifiedIdentifier ( DOTSTAR )? SEMI ; + def importDeclaration(self, ): + + retval = self.importDeclaration_return() + retval.start = self.input.LT(1) + importDeclaration_StartIndex = self.input.index() + root_0 = None + + IMPORT11 = None + STATIC12 = None + DOTSTAR14 = None + SEMI15 = None + qualifiedIdentifier13 = None + + + IMPORT11_tree = None + STATIC12_tree = None + DOTSTAR14_tree = None + SEMI15_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 5): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:244:5: ( IMPORT ( STATIC )? qualifiedIdentifier ( DOTSTAR )? SEMI ) + # Java.g:244:9: IMPORT ( STATIC )? qualifiedIdentifier ( DOTSTAR )? SEMI + pass + root_0 = self._adaptor.nil() + + IMPORT11=self.match(self.input, IMPORT, self.FOLLOW_IMPORT_in_importDeclaration4604) + if self._state.backtracking == 0: + + IMPORT11_tree = self._adaptor.createWithPayload(IMPORT11) + root_0 = self._adaptor.becomeRoot(IMPORT11_tree, root_0) + + # Java.g:244:17: ( STATIC )? + alt5 = 2 + LA5_0 = self.input.LA(1) + + if (LA5_0 == STATIC) : + alt5 = 1 + if alt5 == 1: + # Java.g:0:0: STATIC + pass + STATIC12=self.match(self.input, STATIC, self.FOLLOW_STATIC_in_importDeclaration4607) + if self._state.backtracking == 0: + + STATIC12_tree = self._adaptor.createWithPayload(STATIC12) + self._adaptor.addChild(root_0, STATIC12_tree) + + + + + self._state.following.append(self.FOLLOW_qualifiedIdentifier_in_importDeclaration4610) + qualifiedIdentifier13 = self.qualifiedIdentifier() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, qualifiedIdentifier13.tree) + # Java.g:244:45: ( DOTSTAR )? + alt6 = 2 + LA6_0 = self.input.LA(1) + + if (LA6_0 == DOTSTAR) : + alt6 = 1 + if alt6 == 1: + # Java.g:0:0: DOTSTAR + pass + DOTSTAR14=self.match(self.input, DOTSTAR, self.FOLLOW_DOTSTAR_in_importDeclaration4612) + if self._state.backtracking == 0: + + DOTSTAR14_tree = self._adaptor.createWithPayload(DOTSTAR14) + self._adaptor.addChild(root_0, DOTSTAR14_tree) + + + + + SEMI15=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_importDeclaration4615) + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 5, importDeclaration_StartIndex, success) + + pass + return retval + + # $ANTLR end "importDeclaration" + + class typeDeclaration_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.typeDeclaration_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "typeDeclaration" + # Java.g:247:1: typeDeclaration : modifierList ( classTypeDeclaration[$modifierList.tree] | interfaceTypeDeclaration[$modifierList.tree] | enumTypeDeclaration[$modifierList.tree] | annotationTypeDeclaration[$modifierList.tree] ) ; + def typeDeclaration(self, ): + + retval = self.typeDeclaration_return() + retval.start = self.input.LT(1) + typeDeclaration_StartIndex = self.input.index() + root_0 = None + + modifierList16 = None + + classTypeDeclaration17 = None + + interfaceTypeDeclaration18 = None + + enumTypeDeclaration19 = None + + annotationTypeDeclaration20 = None + + + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 6): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:248:5: ( modifierList ( classTypeDeclaration[$modifierList.tree] | interfaceTypeDeclaration[$modifierList.tree] | enumTypeDeclaration[$modifierList.tree] | annotationTypeDeclaration[$modifierList.tree] ) ) + # Java.g:248:9: modifierList ( classTypeDeclaration[$modifierList.tree] | interfaceTypeDeclaration[$modifierList.tree] | enumTypeDeclaration[$modifierList.tree] | annotationTypeDeclaration[$modifierList.tree] ) + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_modifierList_in_typeDeclaration4635) + modifierList16 = self.modifierList() + + self._state.following.pop() + # Java.g:249:9: ( classTypeDeclaration[$modifierList.tree] | interfaceTypeDeclaration[$modifierList.tree] | enumTypeDeclaration[$modifierList.tree] | annotationTypeDeclaration[$modifierList.tree] ) + alt7 = 4 + LA7 = self.input.LA(1) + if LA7 == CLASS: + alt7 = 1 + elif LA7 == INTERFACE: + alt7 = 2 + elif LA7 == ENUM: + alt7 = 3 + elif LA7 == AT: + alt7 = 4 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 7, 0, self.input) + + raise nvae + + if alt7 == 1: + # Java.g:249:13: classTypeDeclaration[$modifierList.tree] + pass + self._state.following.append(self.FOLLOW_classTypeDeclaration_in_typeDeclaration4650) + classTypeDeclaration17 = self.classTypeDeclaration(modifierList16.tree) + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, classTypeDeclaration17.tree) + + + elif alt7 == 2: + # Java.g:250:13: interfaceTypeDeclaration[$modifierList.tree] + pass + self._state.following.append(self.FOLLOW_interfaceTypeDeclaration_in_typeDeclaration4665) + interfaceTypeDeclaration18 = self.interfaceTypeDeclaration(modifierList16.tree) + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, interfaceTypeDeclaration18.tree) + + + elif alt7 == 3: + # Java.g:251:13: enumTypeDeclaration[$modifierList.tree] + pass + self._state.following.append(self.FOLLOW_enumTypeDeclaration_in_typeDeclaration4680) + enumTypeDeclaration19 = self.enumTypeDeclaration(modifierList16.tree) + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, enumTypeDeclaration19.tree) + + + elif alt7 == 4: + # Java.g:252:13: annotationTypeDeclaration[$modifierList.tree] + pass + self._state.following.append(self.FOLLOW_annotationTypeDeclaration_in_typeDeclaration4695) + annotationTypeDeclaration20 = self.annotationTypeDeclaration(modifierList16.tree) + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotationTypeDeclaration20.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 6, typeDeclaration_StartIndex, success) + + pass + return retval + + # $ANTLR end "typeDeclaration" + + class classTypeDeclaration_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.classTypeDeclaration_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "classTypeDeclaration" + # Java.g:256:1: classTypeDeclaration[modifiers] : CLASS IDENT ( genericTypeParameterList )? ( classExtendsClause )? ( implementsClause )? classBody -> ^( CLASS IDENT ( genericTypeParameterList )? ( classExtendsClause )? ( implementsClause )? classBody ) ; + def classTypeDeclaration(self, modifiers): + + retval = self.classTypeDeclaration_return() + retval.start = self.input.LT(1) + classTypeDeclaration_StartIndex = self.input.index() + root_0 = None + + CLASS21 = None + IDENT22 = None + genericTypeParameterList23 = None + + classExtendsClause24 = None + + implementsClause25 = None + + classBody26 = None + + + CLASS21_tree = None + IDENT22_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_CLASS = RewriteRuleTokenStream(self._adaptor, "token CLASS") + stream_genericTypeParameterList = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeParameterList") + stream_classExtendsClause = RewriteRuleSubtreeStream(self._adaptor, "rule classExtendsClause") + stream_implementsClause = RewriteRuleSubtreeStream(self._adaptor, "rule implementsClause") + stream_classBody = RewriteRuleSubtreeStream(self._adaptor, "rule classBody") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 7): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:257:5: ( CLASS IDENT ( genericTypeParameterList )? ( classExtendsClause )? ( implementsClause )? classBody -> ^( CLASS IDENT ( genericTypeParameterList )? ( classExtendsClause )? ( implementsClause )? classBody ) ) + # Java.g:257:9: CLASS IDENT ( genericTypeParameterList )? ( classExtendsClause )? ( implementsClause )? classBody + pass + CLASS21=self.match(self.input, CLASS, self.FOLLOW_CLASS_in_classTypeDeclaration4726) + if self._state.backtracking == 0: + stream_CLASS.add(CLASS21) + IDENT22=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_classTypeDeclaration4728) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT22) + # Java.g:257:21: ( genericTypeParameterList )? + alt8 = 2 + LA8_0 = self.input.LA(1) + + if (LA8_0 == LESS_THAN) : + alt8 = 1 + if alt8 == 1: + # Java.g:0:0: genericTypeParameterList + pass + self._state.following.append(self.FOLLOW_genericTypeParameterList_in_classTypeDeclaration4730) + genericTypeParameterList23 = self.genericTypeParameterList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeParameterList.add(genericTypeParameterList23.tree) + + + + # Java.g:257:47: ( classExtendsClause )? + alt9 = 2 + LA9_0 = self.input.LA(1) + + if (LA9_0 == EXTENDS) : + alt9 = 1 + if alt9 == 1: + # Java.g:0:0: classExtendsClause + pass + self._state.following.append(self.FOLLOW_classExtendsClause_in_classTypeDeclaration4733) + classExtendsClause24 = self.classExtendsClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classExtendsClause.add(classExtendsClause24.tree) + + + + # Java.g:257:67: ( implementsClause )? + alt10 = 2 + LA10_0 = self.input.LA(1) + + if (LA10_0 == IMPLEMENTS) : + alt10 = 1 + if alt10 == 1: + # Java.g:0:0: implementsClause + pass + self._state.following.append(self.FOLLOW_implementsClause_in_classTypeDeclaration4736) + implementsClause25 = self.implementsClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_implementsClause.add(implementsClause25.tree) + + + + self._state.following.append(self.FOLLOW_classBody_in_classTypeDeclaration4739) + classBody26 = self.classBody() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classBody.add(classBody26.tree) + + # AST Rewrite + # elements: classExtendsClause, IDENT, genericTypeParameterList, implementsClause, classBody, CLASS + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 258:9: -> ^( CLASS IDENT ( genericTypeParameterList )? ( classExtendsClause )? ( implementsClause )? classBody ) + # Java.g:258:13: ^( CLASS IDENT ( genericTypeParameterList )? ( classExtendsClause )? ( implementsClause )? classBody ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_CLASS.nextNode(), root_1) + + self._adaptor.addChild(root_1, modifiers) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + # Java.g:258:40: ( genericTypeParameterList )? + if stream_genericTypeParameterList.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeParameterList.nextTree()) + + + stream_genericTypeParameterList.reset(); + # Java.g:258:66: ( classExtendsClause )? + if stream_classExtendsClause.hasNext(): + self._adaptor.addChild(root_1, stream_classExtendsClause.nextTree()) + + + stream_classExtendsClause.reset(); + # Java.g:259:15: ( implementsClause )? + if stream_implementsClause.hasNext(): + self._adaptor.addChild(root_1, stream_implementsClause.nextTree()) + + + stream_implementsClause.reset(); + self._adaptor.addChild(root_1, stream_classBody.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 7, classTypeDeclaration_StartIndex, success) + + pass + return retval + + # $ANTLR end "classTypeDeclaration" + + class classExtendsClause_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.classExtendsClause_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "classExtendsClause" + # Java.g:262:1: classExtendsClause : EXTENDS type -> ^( EXTENDS_CLAUSE[$EXTENDS, \"EXTENDS_CLAUSE\"] type ) ; + def classExtendsClause(self, ): + + retval = self.classExtendsClause_return() + retval.start = self.input.LT(1) + classExtendsClause_StartIndex = self.input.index() + root_0 = None + + EXTENDS27 = None + type28 = None + + + EXTENDS27_tree = None + stream_EXTENDS = RewriteRuleTokenStream(self._adaptor, "token EXTENDS") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 8): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:263:5: ( EXTENDS type -> ^( EXTENDS_CLAUSE[$EXTENDS, \"EXTENDS_CLAUSE\"] type ) ) + # Java.g:263:9: EXTENDS type + pass + EXTENDS27=self.match(self.input, EXTENDS, self.FOLLOW_EXTENDS_in_classExtendsClause4802) + if self._state.backtracking == 0: + stream_EXTENDS.add(EXTENDS27) + self._state.following.append(self.FOLLOW_type_in_classExtendsClause4804) + type28 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type28.tree) + + # AST Rewrite + # elements: type + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 264:9: -> ^( EXTENDS_CLAUSE[$EXTENDS, \"EXTENDS_CLAUSE\"] type ) + # Java.g:264:13: ^( EXTENDS_CLAUSE[$EXTENDS, \"EXTENDS_CLAUSE\"] type ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(EXTENDS_CLAUSE, EXTENDS27, "EXTENDS_CLAUSE"), root_1) + + self._adaptor.addChild(root_1, stream_type.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 8, classExtendsClause_StartIndex, success) + + pass + return retval + + # $ANTLR end "classExtendsClause" + + class interfaceExtendsClause_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.interfaceExtendsClause_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "interfaceExtendsClause" + # Java.g:267:1: interfaceExtendsClause : EXTENDS typeList -> ^( EXTENDS_CLAUSE[$EXTENDS, \"EXTENDS_CLAUSE\"] typeList ) ; + def interfaceExtendsClause(self, ): + + retval = self.interfaceExtendsClause_return() + retval.start = self.input.LT(1) + interfaceExtendsClause_StartIndex = self.input.index() + root_0 = None + + EXTENDS29 = None + typeList30 = None + + + EXTENDS29_tree = None + stream_EXTENDS = RewriteRuleTokenStream(self._adaptor, "token EXTENDS") + stream_typeList = RewriteRuleSubtreeStream(self._adaptor, "rule typeList") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 9): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:268:5: ( EXTENDS typeList -> ^( EXTENDS_CLAUSE[$EXTENDS, \"EXTENDS_CLAUSE\"] typeList ) ) + # Java.g:268:9: EXTENDS typeList + pass + EXTENDS29=self.match(self.input, EXTENDS, self.FOLLOW_EXTENDS_in_interfaceExtendsClause4841) + if self._state.backtracking == 0: + stream_EXTENDS.add(EXTENDS29) + self._state.following.append(self.FOLLOW_typeList_in_interfaceExtendsClause4843) + typeList30 = self.typeList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_typeList.add(typeList30.tree) + + # AST Rewrite + # elements: typeList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 269:9: -> ^( EXTENDS_CLAUSE[$EXTENDS, \"EXTENDS_CLAUSE\"] typeList ) + # Java.g:269:13: ^( EXTENDS_CLAUSE[$EXTENDS, \"EXTENDS_CLAUSE\"] typeList ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(EXTENDS_CLAUSE, EXTENDS29, "EXTENDS_CLAUSE"), root_1) + + self._adaptor.addChild(root_1, stream_typeList.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 9, interfaceExtendsClause_StartIndex, success) + + pass + return retval + + # $ANTLR end "interfaceExtendsClause" + + class implementsClause_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.implementsClause_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "implementsClause" + # Java.g:272:1: implementsClause : IMPLEMENTS typeList -> ^( IMPLEMENTS_CLAUSE[$IMPLEMENTS, \"IMPLEMENTS_CLAUSE\"] typeList ) ; + def implementsClause(self, ): + + retval = self.implementsClause_return() + retval.start = self.input.LT(1) + implementsClause_StartIndex = self.input.index() + root_0 = None + + IMPLEMENTS31 = None + typeList32 = None + + + IMPLEMENTS31_tree = None + stream_IMPLEMENTS = RewriteRuleTokenStream(self._adaptor, "token IMPLEMENTS") + stream_typeList = RewriteRuleSubtreeStream(self._adaptor, "rule typeList") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 10): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:273:5: ( IMPLEMENTS typeList -> ^( IMPLEMENTS_CLAUSE[$IMPLEMENTS, \"IMPLEMENTS_CLAUSE\"] typeList ) ) + # Java.g:273:9: IMPLEMENTS typeList + pass + IMPLEMENTS31=self.match(self.input, IMPLEMENTS, self.FOLLOW_IMPLEMENTS_in_implementsClause4880) + if self._state.backtracking == 0: + stream_IMPLEMENTS.add(IMPLEMENTS31) + self._state.following.append(self.FOLLOW_typeList_in_implementsClause4882) + typeList32 = self.typeList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_typeList.add(typeList32.tree) + + # AST Rewrite + # elements: typeList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 274:9: -> ^( IMPLEMENTS_CLAUSE[$IMPLEMENTS, \"IMPLEMENTS_CLAUSE\"] typeList ) + # Java.g:274:13: ^( IMPLEMENTS_CLAUSE[$IMPLEMENTS, \"IMPLEMENTS_CLAUSE\"] typeList ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(IMPLEMENTS_CLAUSE, IMPLEMENTS31, "IMPLEMENTS_CLAUSE"), root_1) + + self._adaptor.addChild(root_1, stream_typeList.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 10, implementsClause_StartIndex, success) + + pass + return retval + + # $ANTLR end "implementsClause" + + class genericTypeParameterList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.genericTypeParameterList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "genericTypeParameterList" + # Java.g:277:1: genericTypeParameterList : LESS_THAN genericTypeParameter ( COMMA genericTypeParameter )* genericTypeListClosing -> ^( GENERIC_TYPE_PARAM_LIST[$LESS_THAN, \"GENERIC_TYPE_PARAM_LIST\"] ( genericTypeParameter )+ ) ; + def genericTypeParameterList(self, ): + + retval = self.genericTypeParameterList_return() + retval.start = self.input.LT(1) + genericTypeParameterList_StartIndex = self.input.index() + root_0 = None + + LESS_THAN33 = None + COMMA35 = None + genericTypeParameter34 = None + + genericTypeParameter36 = None + + genericTypeListClosing37 = None + + + LESS_THAN33_tree = None + COMMA35_tree = None + stream_COMMA = RewriteRuleTokenStream(self._adaptor, "token COMMA") + stream_LESS_THAN = RewriteRuleTokenStream(self._adaptor, "token LESS_THAN") + stream_genericTypeParameter = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeParameter") + stream_genericTypeListClosing = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeListClosing") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 11): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:278:5: ( LESS_THAN genericTypeParameter ( COMMA genericTypeParameter )* genericTypeListClosing -> ^( GENERIC_TYPE_PARAM_LIST[$LESS_THAN, \"GENERIC_TYPE_PARAM_LIST\"] ( genericTypeParameter )+ ) ) + # Java.g:278:9: LESS_THAN genericTypeParameter ( COMMA genericTypeParameter )* genericTypeListClosing + pass + LESS_THAN33=self.match(self.input, LESS_THAN, self.FOLLOW_LESS_THAN_in_genericTypeParameterList4919) + if self._state.backtracking == 0: + stream_LESS_THAN.add(LESS_THAN33) + self._state.following.append(self.FOLLOW_genericTypeParameter_in_genericTypeParameterList4921) + genericTypeParameter34 = self.genericTypeParameter() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeParameter.add(genericTypeParameter34.tree) + # Java.g:278:40: ( COMMA genericTypeParameter )* + while True: #loop11 + alt11 = 2 + LA11_0 = self.input.LA(1) + + if (LA11_0 == COMMA) : + alt11 = 1 + + + if alt11 == 1: + # Java.g:278:41: COMMA genericTypeParameter + pass + COMMA35=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_genericTypeParameterList4924) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA35) + self._state.following.append(self.FOLLOW_genericTypeParameter_in_genericTypeParameterList4926) + genericTypeParameter36 = self.genericTypeParameter() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeParameter.add(genericTypeParameter36.tree) + + + else: + break #loop11 + self._state.following.append(self.FOLLOW_genericTypeListClosing_in_genericTypeParameterList4930) + genericTypeListClosing37 = self.genericTypeListClosing() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeListClosing.add(genericTypeListClosing37.tree) + + # AST Rewrite + # elements: genericTypeParameter + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 279:9: -> ^( GENERIC_TYPE_PARAM_LIST[$LESS_THAN, \"GENERIC_TYPE_PARAM_LIST\"] ( genericTypeParameter )+ ) + # Java.g:279:13: ^( GENERIC_TYPE_PARAM_LIST[$LESS_THAN, \"GENERIC_TYPE_PARAM_LIST\"] ( genericTypeParameter )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(GENERIC_TYPE_PARAM_LIST, LESS_THAN33, "GENERIC_TYPE_PARAM_LIST"), root_1) + + # Java.g:279:78: ( genericTypeParameter )+ + if not (stream_genericTypeParameter.hasNext()): + raise RewriteEarlyExitException() + + while stream_genericTypeParameter.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeParameter.nextTree()) + + + stream_genericTypeParameter.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 11, genericTypeParameterList_StartIndex, success) + + pass + return retval + + # $ANTLR end "genericTypeParameterList" + + class genericTypeListClosing_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.genericTypeListClosing_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "genericTypeListClosing" + # Java.g:282:1: genericTypeListClosing : ( GREATER_THAN | SHIFT_RIGHT | BIT_SHIFT_RIGHT | ); + def genericTypeListClosing(self, ): + + retval = self.genericTypeListClosing_return() + retval.start = self.input.LT(1) + genericTypeListClosing_StartIndex = self.input.index() + root_0 = None + + GREATER_THAN38 = None + SHIFT_RIGHT39 = None + BIT_SHIFT_RIGHT40 = None + + GREATER_THAN38_tree = None + SHIFT_RIGHT39_tree = None + BIT_SHIFT_RIGHT40_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 12): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:286:5: ( GREATER_THAN | SHIFT_RIGHT | BIT_SHIFT_RIGHT | ) + alt12 = 4 + LA12 = self.input.LA(1) + if LA12 == GREATER_THAN: + LA12_1 = self.input.LA(2) + + if (self.synpred14_Java()) : + alt12 = 1 + elif (True) : + alt12 = 4 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 12, 1, self.input) + + raise nvae + + elif LA12 == SHIFT_RIGHT: + LA12_2 = self.input.LA(2) + + if (self.synpred15_Java()) : + alt12 = 2 + elif (True) : + alt12 = 4 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 12, 2, self.input) + + raise nvae + + elif LA12 == BIT_SHIFT_RIGHT: + LA12_3 = self.input.LA(2) + + if (self.synpred16_Java()) : + alt12 = 3 + elif (True) : + alt12 = 4 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 12, 3, self.input) + + raise nvae + + elif LA12 == EOF or LA12 == AND or LA12 == AND_ASSIGN or LA12 == ASSIGN or LA12 == BIT_SHIFT_RIGHT_ASSIGN or LA12 == COLON or LA12 == COMMA or LA12 == DIV_ASSIGN or LA12 == DOT or LA12 == ELLIPSIS or LA12 == EQUAL or LA12 == LBRACK or LA12 == LCURLY or LA12 == LOGICAL_AND or LA12 == LOGICAL_OR or LA12 == LPAREN or LA12 == MINUS_ASSIGN or LA12 == MOD_ASSIGN or LA12 == NOT_EQUAL or LA12 == OR or LA12 == OR_ASSIGN or LA12 == PLUS_ASSIGN or LA12 == QUESTION or LA12 == RBRACK or LA12 == RCURLY or LA12 == RPAREN or LA12 == SEMI or LA12 == SHIFT_LEFT_ASSIGN or LA12 == SHIFT_RIGHT_ASSIGN or LA12 == STAR_ASSIGN or LA12 == XOR or LA12 == XOR_ASSIGN or LA12 == BOOLEAN or LA12 == BYTE or LA12 == CHAR or LA12 == DOUBLE or LA12 == EXTENDS or LA12 == FLOAT or LA12 == IMPLEMENTS or LA12 == INT or LA12 == LONG or LA12 == SHORT or LA12 == SUPER or LA12 == THIS or LA12 == VOID or LA12 == IDENT: + alt12 = 4 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 12, 0, self.input) + + raise nvae + + if alt12 == 1: + # Java.g:286:9: GREATER_THAN + pass + root_0 = self._adaptor.nil() + + GREATER_THAN38=self.match(self.input, GREATER_THAN, self.FOLLOW_GREATER_THAN_in_genericTypeListClosing5045) + if self._state.backtracking == 0: + + GREATER_THAN38_tree = self._adaptor.createWithPayload(GREATER_THAN38) + self._adaptor.addChild(root_0, GREATER_THAN38_tree) + + + + elif alt12 == 2: + # Java.g:287:9: SHIFT_RIGHT + pass + root_0 = self._adaptor.nil() + + SHIFT_RIGHT39=self.match(self.input, SHIFT_RIGHT, self.FOLLOW_SHIFT_RIGHT_in_genericTypeListClosing5055) + if self._state.backtracking == 0: + + SHIFT_RIGHT39_tree = self._adaptor.createWithPayload(SHIFT_RIGHT39) + self._adaptor.addChild(root_0, SHIFT_RIGHT39_tree) + + + + elif alt12 == 3: + # Java.g:288:9: BIT_SHIFT_RIGHT + pass + root_0 = self._adaptor.nil() + + BIT_SHIFT_RIGHT40=self.match(self.input, BIT_SHIFT_RIGHT, self.FOLLOW_BIT_SHIFT_RIGHT_in_genericTypeListClosing5065) + if self._state.backtracking == 0: + + BIT_SHIFT_RIGHT40_tree = self._adaptor.createWithPayload(BIT_SHIFT_RIGHT40) + self._adaptor.addChild(root_0, BIT_SHIFT_RIGHT40_tree) + + + + elif alt12 == 4: + # Java.g:290:5: + pass + root_0 = self._adaptor.nil() + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 12, genericTypeListClosing_StartIndex, success) + + pass + return retval + + # $ANTLR end "genericTypeListClosing" + + class genericTypeParameter_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.genericTypeParameter_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "genericTypeParameter" + # Java.g:292:1: genericTypeParameter : IDENT ( bound )? -> ^( IDENT ( bound )? ) ; + def genericTypeParameter(self, ): + + retval = self.genericTypeParameter_return() + retval.start = self.input.LT(1) + genericTypeParameter_StartIndex = self.input.index() + root_0 = None + + IDENT41 = None + bound42 = None + + + IDENT41_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_bound = RewriteRuleSubtreeStream(self._adaptor, "rule bound") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 13): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:293:5: ( IDENT ( bound )? -> ^( IDENT ( bound )? ) ) + # Java.g:293:9: IDENT ( bound )? + pass + IDENT41=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_genericTypeParameter5093) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT41) + # Java.g:293:15: ( bound )? + alt13 = 2 + LA13_0 = self.input.LA(1) + + if (LA13_0 == EXTENDS) : + LA13_1 = self.input.LA(2) + + if (LA13_1 == BOOLEAN or LA13_1 == BYTE or LA13_1 == CHAR or LA13_1 == DOUBLE or LA13_1 == FLOAT or (INT <= LA13_1 <= LONG) or LA13_1 == SHORT) : + LA13_3 = self.input.LA(3) + + if (self.synpred17_Java()) : + alt13 = 1 + elif (LA13_1 == IDENT) : + LA13_4 = self.input.LA(3) + + if (self.synpred17_Java()) : + alt13 = 1 + if alt13 == 1: + # Java.g:0:0: bound + pass + self._state.following.append(self.FOLLOW_bound_in_genericTypeParameter5095) + bound42 = self.bound() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_bound.add(bound42.tree) + + + + + # AST Rewrite + # elements: IDENT, bound + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 294:9: -> ^( IDENT ( bound )? ) + # Java.g:294:13: ^( IDENT ( bound )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_IDENT.nextNode(), root_1) + + # Java.g:294:21: ( bound )? + if stream_bound.hasNext(): + self._adaptor.addChild(root_1, stream_bound.nextTree()) + + + stream_bound.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 13, genericTypeParameter_StartIndex, success) + + pass + return retval + + # $ANTLR end "genericTypeParameter" + + class bound_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.bound_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "bound" + # Java.g:297:1: bound : EXTENDS type ( AND type )* -> ^( EXTENDS_BOUND_LIST[$EXTENDS, \"EXTENDS_BOUND_LIST\"] ( type )+ ) ; + def bound(self, ): + + retval = self.bound_return() + retval.start = self.input.LT(1) + bound_StartIndex = self.input.index() + root_0 = None + + EXTENDS43 = None + AND45 = None + type44 = None + + type46 = None + + + EXTENDS43_tree = None + AND45_tree = None + stream_AND = RewriteRuleTokenStream(self._adaptor, "token AND") + stream_EXTENDS = RewriteRuleTokenStream(self._adaptor, "token EXTENDS") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 14): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:298:5: ( EXTENDS type ( AND type )* -> ^( EXTENDS_BOUND_LIST[$EXTENDS, \"EXTENDS_BOUND_LIST\"] ( type )+ ) ) + # Java.g:298:9: EXTENDS type ( AND type )* + pass + EXTENDS43=self.match(self.input, EXTENDS, self.FOLLOW_EXTENDS_in_bound5133) + if self._state.backtracking == 0: + stream_EXTENDS.add(EXTENDS43) + self._state.following.append(self.FOLLOW_type_in_bound5135) + type44 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type44.tree) + # Java.g:298:22: ( AND type )* + while True: #loop14 + alt14 = 2 + LA14_0 = self.input.LA(1) + + if (LA14_0 == AND) : + alt14 = 1 + + + if alt14 == 1: + # Java.g:298:23: AND type + pass + AND45=self.match(self.input, AND, self.FOLLOW_AND_in_bound5138) + if self._state.backtracking == 0: + stream_AND.add(AND45) + self._state.following.append(self.FOLLOW_type_in_bound5140) + type46 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type46.tree) + + + else: + break #loop14 + + # AST Rewrite + # elements: type + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 299:9: -> ^( EXTENDS_BOUND_LIST[$EXTENDS, \"EXTENDS_BOUND_LIST\"] ( type )+ ) + # Java.g:299:13: ^( EXTENDS_BOUND_LIST[$EXTENDS, \"EXTENDS_BOUND_LIST\"] ( type )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(EXTENDS_BOUND_LIST, EXTENDS43, "EXTENDS_BOUND_LIST"), root_1) + + # Java.g:299:66: ( type )+ + if not (stream_type.hasNext()): + raise RewriteEarlyExitException() + + while stream_type.hasNext(): + self._adaptor.addChild(root_1, stream_type.nextTree()) + + + stream_type.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 14, bound_StartIndex, success) + + pass + return retval + + # $ANTLR end "bound" + + class enumTypeDeclaration_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.enumTypeDeclaration_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "enumTypeDeclaration" + # Java.g:302:1: enumTypeDeclaration[modifiers] : ENUM IDENT ( implementsClause )? enumBody -> ^( ENUM IDENT ( implementsClause )? enumBody ) ; + def enumTypeDeclaration(self, modifiers): + + retval = self.enumTypeDeclaration_return() + retval.start = self.input.LT(1) + enumTypeDeclaration_StartIndex = self.input.index() + root_0 = None + + ENUM47 = None + IDENT48 = None + implementsClause49 = None + + enumBody50 = None + + + ENUM47_tree = None + IDENT48_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_ENUM = RewriteRuleTokenStream(self._adaptor, "token ENUM") + stream_implementsClause = RewriteRuleSubtreeStream(self._adaptor, "rule implementsClause") + stream_enumBody = RewriteRuleSubtreeStream(self._adaptor, "rule enumBody") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 15): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:303:5: ( ENUM IDENT ( implementsClause )? enumBody -> ^( ENUM IDENT ( implementsClause )? enumBody ) ) + # Java.g:303:9: ENUM IDENT ( implementsClause )? enumBody + pass + ENUM47=self.match(self.input, ENUM, self.FOLLOW_ENUM_in_enumTypeDeclaration5181) + if self._state.backtracking == 0: + stream_ENUM.add(ENUM47) + IDENT48=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_enumTypeDeclaration5183) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT48) + # Java.g:303:20: ( implementsClause )? + alt15 = 2 + LA15_0 = self.input.LA(1) + + if (LA15_0 == IMPLEMENTS) : + alt15 = 1 + if alt15 == 1: + # Java.g:0:0: implementsClause + pass + self._state.following.append(self.FOLLOW_implementsClause_in_enumTypeDeclaration5185) + implementsClause49 = self.implementsClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_implementsClause.add(implementsClause49.tree) + + + + self._state.following.append(self.FOLLOW_enumBody_in_enumTypeDeclaration5188) + enumBody50 = self.enumBody() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_enumBody.add(enumBody50.tree) + + # AST Rewrite + # elements: ENUM, IDENT, enumBody, implementsClause + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 304:9: -> ^( ENUM IDENT ( implementsClause )? enumBody ) + # Java.g:304:13: ^( ENUM IDENT ( implementsClause )? enumBody ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_ENUM.nextNode(), root_1) + + self._adaptor.addChild(root_1, modifiers) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + # Java.g:304:39: ( implementsClause )? + if stream_implementsClause.hasNext(): + self._adaptor.addChild(root_1, stream_implementsClause.nextTree()) + + + stream_implementsClause.reset(); + self._adaptor.addChild(root_1, stream_enumBody.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 15, enumTypeDeclaration_StartIndex, success) + + pass + return retval + + # $ANTLR end "enumTypeDeclaration" + + class enumBody_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.enumBody_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "enumBody" + # Java.g:307:1: enumBody : LCURLY enumScopeDeclarations RCURLY -> ^( ENUM_TOP_LEVEL_SCOPE[$LCURLY, \"ENUM_TOP_LEVEL_SCOPE\"] enumScopeDeclarations ) ; + def enumBody(self, ): + + retval = self.enumBody_return() + retval.start = self.input.LT(1) + enumBody_StartIndex = self.input.index() + root_0 = None + + LCURLY51 = None + RCURLY53 = None + enumScopeDeclarations52 = None + + + LCURLY51_tree = None + RCURLY53_tree = None + stream_LCURLY = RewriteRuleTokenStream(self._adaptor, "token LCURLY") + stream_RCURLY = RewriteRuleTokenStream(self._adaptor, "token RCURLY") + stream_enumScopeDeclarations = RewriteRuleSubtreeStream(self._adaptor, "rule enumScopeDeclarations") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 16): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:308:5: ( LCURLY enumScopeDeclarations RCURLY -> ^( ENUM_TOP_LEVEL_SCOPE[$LCURLY, \"ENUM_TOP_LEVEL_SCOPE\"] enumScopeDeclarations ) ) + # Java.g:308:9: LCURLY enumScopeDeclarations RCURLY + pass + LCURLY51=self.match(self.input, LCURLY, self.FOLLOW_LCURLY_in_enumBody5231) + if self._state.backtracking == 0: + stream_LCURLY.add(LCURLY51) + self._state.following.append(self.FOLLOW_enumScopeDeclarations_in_enumBody5233) + enumScopeDeclarations52 = self.enumScopeDeclarations() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_enumScopeDeclarations.add(enumScopeDeclarations52.tree) + RCURLY53=self.match(self.input, RCURLY, self.FOLLOW_RCURLY_in_enumBody5235) + if self._state.backtracking == 0: + stream_RCURLY.add(RCURLY53) + + # AST Rewrite + # elements: enumScopeDeclarations + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 309:9: -> ^( ENUM_TOP_LEVEL_SCOPE[$LCURLY, \"ENUM_TOP_LEVEL_SCOPE\"] enumScopeDeclarations ) + # Java.g:309:13: ^( ENUM_TOP_LEVEL_SCOPE[$LCURLY, \"ENUM_TOP_LEVEL_SCOPE\"] enumScopeDeclarations ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(ENUM_TOP_LEVEL_SCOPE, LCURLY51, "ENUM_TOP_LEVEL_SCOPE"), root_1) + + self._adaptor.addChild(root_1, stream_enumScopeDeclarations.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 16, enumBody_StartIndex, success) + + pass + return retval + + # $ANTLR end "enumBody" + + class enumScopeDeclarations_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.enumScopeDeclarations_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "enumScopeDeclarations" + # Java.g:312:1: enumScopeDeclarations : enumConstants ( COMMA )? ( enumClassScopeDeclarations )? ; + def enumScopeDeclarations(self, ): + + retval = self.enumScopeDeclarations_return() + retval.start = self.input.LT(1) + enumScopeDeclarations_StartIndex = self.input.index() + root_0 = None + + COMMA55 = None + enumConstants54 = None + + enumClassScopeDeclarations56 = None + + + COMMA55_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 17): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:313:5: ( enumConstants ( COMMA )? ( enumClassScopeDeclarations )? ) + # Java.g:313:9: enumConstants ( COMMA )? ( enumClassScopeDeclarations )? + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_enumConstants_in_enumScopeDeclarations5272) + enumConstants54 = self.enumConstants() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, enumConstants54.tree) + # Java.g:313:23: ( COMMA )? + alt16 = 2 + LA16_0 = self.input.LA(1) + + if (LA16_0 == COMMA) : + alt16 = 1 + if alt16 == 1: + # Java.g:313:24: COMMA + pass + COMMA55=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_enumScopeDeclarations5275) + + + + # Java.g:313:33: ( enumClassScopeDeclarations )? + alt17 = 2 + LA17_0 = self.input.LA(1) + + if (LA17_0 == SEMI) : + alt17 = 1 + if alt17 == 1: + # Java.g:0:0: enumClassScopeDeclarations + pass + self._state.following.append(self.FOLLOW_enumClassScopeDeclarations_in_enumScopeDeclarations5280) + enumClassScopeDeclarations56 = self.enumClassScopeDeclarations() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, enumClassScopeDeclarations56.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 17, enumScopeDeclarations_StartIndex, success) + + pass + return retval + + # $ANTLR end "enumScopeDeclarations" + + class enumClassScopeDeclarations_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.enumClassScopeDeclarations_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "enumClassScopeDeclarations" + # Java.g:316:1: enumClassScopeDeclarations : SEMI ( classScopeDeclarations )* -> ^( CLASS_TOP_LEVEL_SCOPE[$SEMI, \"CLASS_TOP_LEVEL_SCOPE\"] ( classScopeDeclarations )* ) ; + def enumClassScopeDeclarations(self, ): + + retval = self.enumClassScopeDeclarations_return() + retval.start = self.input.LT(1) + enumClassScopeDeclarations_StartIndex = self.input.index() + root_0 = None + + SEMI57 = None + classScopeDeclarations58 = None + + + SEMI57_tree = None + stream_SEMI = RewriteRuleTokenStream(self._adaptor, "token SEMI") + stream_classScopeDeclarations = RewriteRuleSubtreeStream(self._adaptor, "rule classScopeDeclarations") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 18): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:317:5: ( SEMI ( classScopeDeclarations )* -> ^( CLASS_TOP_LEVEL_SCOPE[$SEMI, \"CLASS_TOP_LEVEL_SCOPE\"] ( classScopeDeclarations )* ) ) + # Java.g:317:9: SEMI ( classScopeDeclarations )* + pass + SEMI57=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_enumClassScopeDeclarations5300) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI57) + # Java.g:317:14: ( classScopeDeclarations )* + while True: #loop18 + alt18 = 2 + LA18_0 = self.input.LA(1) + + if (LA18_0 == AT or LA18_0 == LCURLY or LA18_0 == LESS_THAN or LA18_0 == SEMI or LA18_0 == ABSTRACT or LA18_0 == BOOLEAN or LA18_0 == BYTE or (CHAR <= LA18_0 <= CLASS) or LA18_0 == DOUBLE or LA18_0 == ENUM or LA18_0 == FINAL or LA18_0 == FLOAT or LA18_0 == INTERFACE or (INT <= LA18_0 <= NATIVE) or (PRIVATE <= LA18_0 <= PUBLIC) or (SHORT <= LA18_0 <= STRICTFP) or LA18_0 == SYNCHRONIZED or LA18_0 == TRANSIENT or (VOID <= LA18_0 <= VOLATILE) or LA18_0 == IDENT) : + alt18 = 1 + + + if alt18 == 1: + # Java.g:0:0: classScopeDeclarations + pass + self._state.following.append(self.FOLLOW_classScopeDeclarations_in_enumClassScopeDeclarations5302) + classScopeDeclarations58 = self.classScopeDeclarations() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classScopeDeclarations.add(classScopeDeclarations58.tree) + + + else: + break #loop18 + + # AST Rewrite + # elements: classScopeDeclarations + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 318:9: -> ^( CLASS_TOP_LEVEL_SCOPE[$SEMI, \"CLASS_TOP_LEVEL_SCOPE\"] ( classScopeDeclarations )* ) + # Java.g:318:13: ^( CLASS_TOP_LEVEL_SCOPE[$SEMI, \"CLASS_TOP_LEVEL_SCOPE\"] ( classScopeDeclarations )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(CLASS_TOP_LEVEL_SCOPE, SEMI57, "CLASS_TOP_LEVEL_SCOPE"), root_1) + + # Java.g:318:69: ( classScopeDeclarations )* + while stream_classScopeDeclarations.hasNext(): + self._adaptor.addChild(root_1, stream_classScopeDeclarations.nextTree()) + + + stream_classScopeDeclarations.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 18, enumClassScopeDeclarations_StartIndex, success) + + pass + return retval + + # $ANTLR end "enumClassScopeDeclarations" + + class enumConstants_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.enumConstants_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "enumConstants" + # Java.g:321:1: enumConstants : enumConstant ( COMMA enumConstant )* ; + def enumConstants(self, ): + + retval = self.enumConstants_return() + retval.start = self.input.LT(1) + enumConstants_StartIndex = self.input.index() + root_0 = None + + COMMA60 = None + enumConstant59 = None + + enumConstant61 = None + + + COMMA60_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 19): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:322:5: ( enumConstant ( COMMA enumConstant )* ) + # Java.g:322:9: enumConstant ( COMMA enumConstant )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_enumConstant_in_enumConstants5341) + enumConstant59 = self.enumConstant() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, enumConstant59.tree) + # Java.g:322:22: ( COMMA enumConstant )* + while True: #loop19 + alt19 = 2 + LA19_0 = self.input.LA(1) + + if (LA19_0 == COMMA) : + LA19_1 = self.input.LA(2) + + if (LA19_1 == AT or LA19_1 == IDENT) : + alt19 = 1 + + + + + if alt19 == 1: + # Java.g:322:23: COMMA enumConstant + pass + COMMA60=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_enumConstants5344) + self._state.following.append(self.FOLLOW_enumConstant_in_enumConstants5347) + enumConstant61 = self.enumConstant() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, enumConstant61.tree) + + + else: + break #loop19 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 19, enumConstants_StartIndex, success) + + pass + return retval + + # $ANTLR end "enumConstants" + + class enumConstant_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.enumConstant_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "enumConstant" + # Java.g:325:1: enumConstant : annotationList IDENT ( arguments )? ( classBody )? ; + def enumConstant(self, ): + + retval = self.enumConstant_return() + retval.start = self.input.LT(1) + enumConstant_StartIndex = self.input.index() + root_0 = None + + IDENT63 = None + annotationList62 = None + + arguments64 = None + + classBody65 = None + + + IDENT63_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 20): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:326:5: ( annotationList IDENT ( arguments )? ( classBody )? ) + # Java.g:326:9: annotationList IDENT ( arguments )? ( classBody )? + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_annotationList_in_enumConstant5368) + annotationList62 = self.annotationList() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotationList62.tree) + IDENT63=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_enumConstant5370) + if self._state.backtracking == 0: + + IDENT63_tree = self._adaptor.createWithPayload(IDENT63) + root_0 = self._adaptor.becomeRoot(IDENT63_tree, root_0) + + # Java.g:326:31: ( arguments )? + alt20 = 2 + LA20_0 = self.input.LA(1) + + if (LA20_0 == LPAREN) : + alt20 = 1 + if alt20 == 1: + # Java.g:0:0: arguments + pass + self._state.following.append(self.FOLLOW_arguments_in_enumConstant5373) + arguments64 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, arguments64.tree) + + + + # Java.g:326:42: ( classBody )? + alt21 = 2 + LA21_0 = self.input.LA(1) + + if (LA21_0 == LCURLY) : + alt21 = 1 + if alt21 == 1: + # Java.g:0:0: classBody + pass + self._state.following.append(self.FOLLOW_classBody_in_enumConstant5376) + classBody65 = self.classBody() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, classBody65.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 20, enumConstant_StartIndex, success) + + pass + return retval + + # $ANTLR end "enumConstant" + + class interfaceTypeDeclaration_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.interfaceTypeDeclaration_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "interfaceTypeDeclaration" + # Java.g:329:1: interfaceTypeDeclaration[modifiers] : INTERFACE IDENT ( genericTypeParameterList )? ( interfaceExtendsClause )? interfaceBody -> ^( INTERFACE IDENT ( genericTypeParameterList )? ( interfaceExtendsClause )? interfaceBody ) ; + def interfaceTypeDeclaration(self, modifiers): + + retval = self.interfaceTypeDeclaration_return() + retval.start = self.input.LT(1) + interfaceTypeDeclaration_StartIndex = self.input.index() + root_0 = None + + INTERFACE66 = None + IDENT67 = None + genericTypeParameterList68 = None + + interfaceExtendsClause69 = None + + interfaceBody70 = None + + + INTERFACE66_tree = None + IDENT67_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_INTERFACE = RewriteRuleTokenStream(self._adaptor, "token INTERFACE") + stream_genericTypeParameterList = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeParameterList") + stream_interfaceBody = RewriteRuleSubtreeStream(self._adaptor, "rule interfaceBody") + stream_interfaceExtendsClause = RewriteRuleSubtreeStream(self._adaptor, "rule interfaceExtendsClause") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 21): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:330:5: ( INTERFACE IDENT ( genericTypeParameterList )? ( interfaceExtendsClause )? interfaceBody -> ^( INTERFACE IDENT ( genericTypeParameterList )? ( interfaceExtendsClause )? interfaceBody ) ) + # Java.g:330:9: INTERFACE IDENT ( genericTypeParameterList )? ( interfaceExtendsClause )? interfaceBody + pass + INTERFACE66=self.match(self.input, INTERFACE, self.FOLLOW_INTERFACE_in_interfaceTypeDeclaration5397) + if self._state.backtracking == 0: + stream_INTERFACE.add(INTERFACE66) + IDENT67=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_interfaceTypeDeclaration5399) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT67) + # Java.g:330:25: ( genericTypeParameterList )? + alt22 = 2 + LA22_0 = self.input.LA(1) + + if (LA22_0 == LESS_THAN) : + alt22 = 1 + if alt22 == 1: + # Java.g:0:0: genericTypeParameterList + pass + self._state.following.append(self.FOLLOW_genericTypeParameterList_in_interfaceTypeDeclaration5401) + genericTypeParameterList68 = self.genericTypeParameterList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeParameterList.add(genericTypeParameterList68.tree) + + + + # Java.g:330:51: ( interfaceExtendsClause )? + alt23 = 2 + LA23_0 = self.input.LA(1) + + if (LA23_0 == EXTENDS) : + alt23 = 1 + if alt23 == 1: + # Java.g:0:0: interfaceExtendsClause + pass + self._state.following.append(self.FOLLOW_interfaceExtendsClause_in_interfaceTypeDeclaration5404) + interfaceExtendsClause69 = self.interfaceExtendsClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_interfaceExtendsClause.add(interfaceExtendsClause69.tree) + + + + self._state.following.append(self.FOLLOW_interfaceBody_in_interfaceTypeDeclaration5407) + interfaceBody70 = self.interfaceBody() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_interfaceBody.add(interfaceBody70.tree) + + # AST Rewrite + # elements: INTERFACE, genericTypeParameterList, IDENT, interfaceExtendsClause, interfaceBody + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 331:9: -> ^( INTERFACE IDENT ( genericTypeParameterList )? ( interfaceExtendsClause )? interfaceBody ) + # Java.g:331:13: ^( INTERFACE IDENT ( genericTypeParameterList )? ( interfaceExtendsClause )? interfaceBody ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_INTERFACE.nextNode(), root_1) + + self._adaptor.addChild(root_1, modifiers) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + # Java.g:331:44: ( genericTypeParameterList )? + if stream_genericTypeParameterList.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeParameterList.nextTree()) + + + stream_genericTypeParameterList.reset(); + # Java.g:331:70: ( interfaceExtendsClause )? + if stream_interfaceExtendsClause.hasNext(): + self._adaptor.addChild(root_1, stream_interfaceExtendsClause.nextTree()) + + + stream_interfaceExtendsClause.reset(); + self._adaptor.addChild(root_1, stream_interfaceBody.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 21, interfaceTypeDeclaration_StartIndex, success) + + pass + return retval + + # $ANTLR end "interfaceTypeDeclaration" + + class typeList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.typeList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "typeList" + # Java.g:334:1: typeList : type ( COMMA type )* ; + def typeList(self, ): + + retval = self.typeList_return() + retval.start = self.input.LT(1) + typeList_StartIndex = self.input.index() + root_0 = None + + COMMA72 = None + type71 = None + + type73 = None + + + COMMA72_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 22): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:335:5: ( type ( COMMA type )* ) + # Java.g:335:9: type ( COMMA type )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_type_in_typeList5453) + type71 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, type71.tree) + # Java.g:335:14: ( COMMA type )* + while True: #loop24 + alt24 = 2 + LA24_0 = self.input.LA(1) + + if (LA24_0 == COMMA) : + alt24 = 1 + + + if alt24 == 1: + # Java.g:335:15: COMMA type + pass + COMMA72=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_typeList5456) + self._state.following.append(self.FOLLOW_type_in_typeList5459) + type73 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, type73.tree) + + + else: + break #loop24 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 22, typeList_StartIndex, success) + + pass + return retval + + # $ANTLR end "typeList" + + class classBody_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.classBody_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "classBody" + # Java.g:338:1: classBody : LCURLY ( classScopeDeclarations )* RCURLY -> ^( CLASS_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( classScopeDeclarations )* ) ; + def classBody(self, ): + + retval = self.classBody_return() + retval.start = self.input.LT(1) + classBody_StartIndex = self.input.index() + root_0 = None + + LCURLY74 = None + RCURLY76 = None + classScopeDeclarations75 = None + + + LCURLY74_tree = None + RCURLY76_tree = None + stream_LCURLY = RewriteRuleTokenStream(self._adaptor, "token LCURLY") + stream_RCURLY = RewriteRuleTokenStream(self._adaptor, "token RCURLY") + stream_classScopeDeclarations = RewriteRuleSubtreeStream(self._adaptor, "rule classScopeDeclarations") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 23): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:339:5: ( LCURLY ( classScopeDeclarations )* RCURLY -> ^( CLASS_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( classScopeDeclarations )* ) ) + # Java.g:339:9: LCURLY ( classScopeDeclarations )* RCURLY + pass + LCURLY74=self.match(self.input, LCURLY, self.FOLLOW_LCURLY_in_classBody5480) + if self._state.backtracking == 0: + stream_LCURLY.add(LCURLY74) + # Java.g:339:16: ( classScopeDeclarations )* + while True: #loop25 + alt25 = 2 + LA25_0 = self.input.LA(1) + + if (LA25_0 == AT or LA25_0 == LCURLY or LA25_0 == LESS_THAN or LA25_0 == SEMI or LA25_0 == ABSTRACT or LA25_0 == BOOLEAN or LA25_0 == BYTE or (CHAR <= LA25_0 <= CLASS) or LA25_0 == DOUBLE or LA25_0 == ENUM or LA25_0 == FINAL or LA25_0 == FLOAT or LA25_0 == INTERFACE or (INT <= LA25_0 <= NATIVE) or (PRIVATE <= LA25_0 <= PUBLIC) or (SHORT <= LA25_0 <= STRICTFP) or LA25_0 == SYNCHRONIZED or LA25_0 == TRANSIENT or (VOID <= LA25_0 <= VOLATILE) or LA25_0 == IDENT) : + alt25 = 1 + + + if alt25 == 1: + # Java.g:0:0: classScopeDeclarations + pass + self._state.following.append(self.FOLLOW_classScopeDeclarations_in_classBody5482) + classScopeDeclarations75 = self.classScopeDeclarations() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classScopeDeclarations.add(classScopeDeclarations75.tree) + + + else: + break #loop25 + RCURLY76=self.match(self.input, RCURLY, self.FOLLOW_RCURLY_in_classBody5485) + if self._state.backtracking == 0: + stream_RCURLY.add(RCURLY76) + + # AST Rewrite + # elements: classScopeDeclarations + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 340:9: -> ^( CLASS_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( classScopeDeclarations )* ) + # Java.g:340:13: ^( CLASS_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( classScopeDeclarations )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(CLASS_TOP_LEVEL_SCOPE, LCURLY74, "CLASS_TOP_LEVEL_SCOPE"), root_1) + + # Java.g:340:71: ( classScopeDeclarations )* + while stream_classScopeDeclarations.hasNext(): + self._adaptor.addChild(root_1, stream_classScopeDeclarations.nextTree()) + + + stream_classScopeDeclarations.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 23, classBody_StartIndex, success) + + pass + return retval + + # $ANTLR end "classBody" + + class interfaceBody_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.interfaceBody_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "interfaceBody" + # Java.g:343:1: interfaceBody : LCURLY ( interfaceScopeDeclarations )* RCURLY -> ^( INTERFACE_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( interfaceScopeDeclarations )* ) ; + def interfaceBody(self, ): + + retval = self.interfaceBody_return() + retval.start = self.input.LT(1) + interfaceBody_StartIndex = self.input.index() + root_0 = None + + LCURLY77 = None + RCURLY79 = None + interfaceScopeDeclarations78 = None + + + LCURLY77_tree = None + RCURLY79_tree = None + stream_LCURLY = RewriteRuleTokenStream(self._adaptor, "token LCURLY") + stream_RCURLY = RewriteRuleTokenStream(self._adaptor, "token RCURLY") + stream_interfaceScopeDeclarations = RewriteRuleSubtreeStream(self._adaptor, "rule interfaceScopeDeclarations") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 24): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:344:5: ( LCURLY ( interfaceScopeDeclarations )* RCURLY -> ^( INTERFACE_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( interfaceScopeDeclarations )* ) ) + # Java.g:344:9: LCURLY ( interfaceScopeDeclarations )* RCURLY + pass + LCURLY77=self.match(self.input, LCURLY, self.FOLLOW_LCURLY_in_interfaceBody5523) + if self._state.backtracking == 0: + stream_LCURLY.add(LCURLY77) + # Java.g:344:16: ( interfaceScopeDeclarations )* + while True: #loop26 + alt26 = 2 + LA26_0 = self.input.LA(1) + + if (LA26_0 == AT or LA26_0 == LESS_THAN or LA26_0 == SEMI or LA26_0 == ABSTRACT or LA26_0 == BOOLEAN or LA26_0 == BYTE or (CHAR <= LA26_0 <= CLASS) or LA26_0 == DOUBLE or LA26_0 == ENUM or LA26_0 == FINAL or LA26_0 == FLOAT or LA26_0 == INTERFACE or (INT <= LA26_0 <= NATIVE) or (PRIVATE <= LA26_0 <= PUBLIC) or (SHORT <= LA26_0 <= STRICTFP) or LA26_0 == SYNCHRONIZED or LA26_0 == TRANSIENT or (VOID <= LA26_0 <= VOLATILE) or LA26_0 == IDENT) : + alt26 = 1 + + + if alt26 == 1: + # Java.g:0:0: interfaceScopeDeclarations + pass + self._state.following.append(self.FOLLOW_interfaceScopeDeclarations_in_interfaceBody5525) + interfaceScopeDeclarations78 = self.interfaceScopeDeclarations() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_interfaceScopeDeclarations.add(interfaceScopeDeclarations78.tree) + + + else: + break #loop26 + RCURLY79=self.match(self.input, RCURLY, self.FOLLOW_RCURLY_in_interfaceBody5528) + if self._state.backtracking == 0: + stream_RCURLY.add(RCURLY79) + + # AST Rewrite + # elements: interfaceScopeDeclarations + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 345:9: -> ^( INTERFACE_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( interfaceScopeDeclarations )* ) + # Java.g:345:13: ^( INTERFACE_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( interfaceScopeDeclarations )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(INTERFACE_TOP_LEVEL_SCOPE, LCURLY77, "CLASS_TOP_LEVEL_SCOPE"), root_1) + + # Java.g:345:75: ( interfaceScopeDeclarations )* + while stream_interfaceScopeDeclarations.hasNext(): + self._adaptor.addChild(root_1, stream_interfaceScopeDeclarations.nextTree()) + + + stream_interfaceScopeDeclarations.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 24, interfaceBody_StartIndex, success) + + pass + return retval + + # $ANTLR end "interfaceBody" + + class classScopeDeclarations_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.classScopeDeclarations_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "classScopeDeclarations" + # Java.g:348:1: classScopeDeclarations : ( block -> ^( CLASS_INSTANCE_INITIALIZER block ) | STATIC block -> ^( CLASS_STATIC_INITIALIZER[$STATIC, \"CLASS_STATIC_INITIALIZER\"] block ) | modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ( block )? ) | ident= IDENT formalParameterList ( throwsClause )? block -> ^( CONSTRUCTOR_DECL[$ident, \"CONSTRUCTOR_DECL\"] modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block ) ) | type classFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) ) | typeDeclaration | SEMI ); + def classScopeDeclarations(self, ): + + retval = self.classScopeDeclarations_return() + retval.start = self.input.LT(1) + classScopeDeclarations_StartIndex = self.input.index() + root_0 = None + + ident = None + STATIC81 = None + IDENT86 = None + SEMI91 = None + VOID92 = None + IDENT93 = None + SEMI97 = None + SEMI103 = None + SEMI105 = None + block80 = None + + block82 = None + + modifierList83 = None + + genericTypeParameterList84 = None + + type85 = None + + formalParameterList87 = None + + arrayDeclaratorList88 = None + + throwsClause89 = None + + block90 = None + + formalParameterList94 = None + + throwsClause95 = None + + block96 = None + + formalParameterList98 = None + + throwsClause99 = None + + block100 = None + + type101 = None + + classFieldDeclaratorList102 = None + + typeDeclaration104 = None + + + ident_tree = None + STATIC81_tree = None + IDENT86_tree = None + SEMI91_tree = None + VOID92_tree = None + IDENT93_tree = None + SEMI97_tree = None + SEMI103_tree = None + SEMI105_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_VOID = RewriteRuleTokenStream(self._adaptor, "token VOID") + stream_SEMI = RewriteRuleTokenStream(self._adaptor, "token SEMI") + stream_STATIC = RewriteRuleTokenStream(self._adaptor, "token STATIC") + stream_arrayDeclaratorList = RewriteRuleSubtreeStream(self._adaptor, "rule arrayDeclaratorList") + stream_throwsClause = RewriteRuleSubtreeStream(self._adaptor, "rule throwsClause") + stream_modifierList = RewriteRuleSubtreeStream(self._adaptor, "rule modifierList") + stream_genericTypeParameterList = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeParameterList") + stream_block = RewriteRuleSubtreeStream(self._adaptor, "rule block") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + stream_classFieldDeclaratorList = RewriteRuleSubtreeStream(self._adaptor, "rule classFieldDeclaratorList") + stream_formalParameterList = RewriteRuleSubtreeStream(self._adaptor, "rule formalParameterList") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 25): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:349:5: ( block -> ^( CLASS_INSTANCE_INITIALIZER block ) | STATIC block -> ^( CLASS_STATIC_INITIALIZER[$STATIC, \"CLASS_STATIC_INITIALIZER\"] block ) | modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ( block )? ) | ident= IDENT formalParameterList ( throwsClause )? block -> ^( CONSTRUCTOR_DECL[$ident, \"CONSTRUCTOR_DECL\"] modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block ) ) | type classFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) ) | typeDeclaration | SEMI ) + alt36 = 5 + alt36 = self.dfa36.predict(self.input) + if alt36 == 1: + # Java.g:349:9: block + pass + self._state.following.append(self.FOLLOW_block_in_classScopeDeclarations5566) + block80 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_block.add(block80.tree) + + # AST Rewrite + # elements: block + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 349:25: -> ^( CLASS_INSTANCE_INITIALIZER block ) + # Java.g:349:29: ^( CLASS_INSTANCE_INITIALIZER block ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(CLASS_INSTANCE_INITIALIZER, "CLASS_INSTANCE_INITIALIZER"), root_1) + + self._adaptor.addChild(root_1, stream_block.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt36 == 2: + # Java.g:350:9: STATIC block + pass + STATIC81=self.match(self.input, STATIC, self.FOLLOW_STATIC_in_classScopeDeclarations5595) + if self._state.backtracking == 0: + stream_STATIC.add(STATIC81) + self._state.following.append(self.FOLLOW_block_in_classScopeDeclarations5597) + block82 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_block.add(block82.tree) + + # AST Rewrite + # elements: block + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 350:25: -> ^( CLASS_STATIC_INITIALIZER[$STATIC, \"CLASS_STATIC_INITIALIZER\"] block ) + # Java.g:350:29: ^( CLASS_STATIC_INITIALIZER[$STATIC, \"CLASS_STATIC_INITIALIZER\"] block ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(CLASS_STATIC_INITIALIZER, STATIC81, "CLASS_STATIC_INITIALIZER"), root_1) + + self._adaptor.addChild(root_1, stream_block.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt36 == 3: + # Java.g:351:9: modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ( block )? ) | ident= IDENT formalParameterList ( throwsClause )? block -> ^( CONSTRUCTOR_DECL[$ident, \"CONSTRUCTOR_DECL\"] modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block ) ) | type classFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) ) + pass + self._state.following.append(self.FOLLOW_modifierList_in_classScopeDeclarations5620) + modifierList83 = self.modifierList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_modifierList.add(modifierList83.tree) + # Java.g:352:9: ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ( block )? ) | ident= IDENT formalParameterList ( throwsClause )? block -> ^( CONSTRUCTOR_DECL[$ident, \"CONSTRUCTOR_DECL\"] modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block ) ) | type classFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) ) + alt35 = 2 + LA35 = self.input.LA(1) + if LA35 == LESS_THAN or LA35 == VOID: + alt35 = 1 + elif LA35 == BOOLEAN or LA35 == BYTE or LA35 == CHAR or LA35 == DOUBLE or LA35 == FLOAT or LA35 == INT or LA35 == LONG or LA35 == SHORT: + LA35_2 = self.input.LA(2) + + if (self.synpred42_Java()) : + alt35 = 1 + elif (True) : + alt35 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 35, 2, self.input) + + raise nvae + + elif LA35 == IDENT: + LA35_3 = self.input.LA(2) + + if (self.synpred42_Java()) : + alt35 = 1 + elif (True) : + alt35 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 35, 3, self.input) + + raise nvae + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 35, 0, self.input) + + raise nvae + + if alt35 == 1: + # Java.g:352:13: ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ( block )? ) | ident= IDENT formalParameterList ( throwsClause )? block -> ^( CONSTRUCTOR_DECL[$ident, \"CONSTRUCTOR_DECL\"] modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block ) ) + pass + # Java.g:352:13: ( genericTypeParameterList )? + alt27 = 2 + LA27_0 = self.input.LA(1) + + if (LA27_0 == LESS_THAN) : + alt27 = 1 + if alt27 == 1: + # Java.g:0:0: genericTypeParameterList + pass + self._state.following.append(self.FOLLOW_genericTypeParameterList_in_classScopeDeclarations5634) + genericTypeParameterList84 = self.genericTypeParameterList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeParameterList.add(genericTypeParameterList84.tree) + + + + # Java.g:353:13: ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ( block )? ) | ident= IDENT formalParameterList ( throwsClause )? block -> ^( CONSTRUCTOR_DECL[$ident, \"CONSTRUCTOR_DECL\"] modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block ) ) + alt34 = 3 + LA34 = self.input.LA(1) + if LA34 == BOOLEAN or LA34 == BYTE or LA34 == CHAR or LA34 == DOUBLE or LA34 == FLOAT or LA34 == INT or LA34 == LONG or LA34 == SHORT: + alt34 = 1 + elif LA34 == IDENT: + LA34_2 = self.input.LA(2) + + if (LA34_2 == LPAREN) : + alt34 = 3 + elif (LA34_2 == DOT or LA34_2 == LBRACK or LA34_2 == LESS_THAN or LA34_2 == IDENT) : + alt34 = 1 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 34, 2, self.input) + + raise nvae + + elif LA34 == VOID: + alt34 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 34, 0, self.input) + + raise nvae + + if alt34 == 1: + # Java.g:353:17: type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) + pass + self._state.following.append(self.FOLLOW_type_in_classScopeDeclarations5653) + type85 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type85.tree) + IDENT86=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_classScopeDeclarations5655) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT86) + self._state.following.append(self.FOLLOW_formalParameterList_in_classScopeDeclarations5657) + formalParameterList87 = self.formalParameterList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_formalParameterList.add(formalParameterList87.tree) + # Java.g:353:48: ( arrayDeclaratorList )? + alt28 = 2 + LA28_0 = self.input.LA(1) + + if (LA28_0 == LBRACK) : + alt28 = 1 + if alt28 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_classScopeDeclarations5659) + arrayDeclaratorList88 = self.arrayDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arrayDeclaratorList.add(arrayDeclaratorList88.tree) + + + + # Java.g:353:69: ( throwsClause )? + alt29 = 2 + LA29_0 = self.input.LA(1) + + if (LA29_0 == THROWS) : + alt29 = 1 + if alt29 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_classScopeDeclarations5662) + throwsClause89 = self.throwsClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_throwsClause.add(throwsClause89.tree) + + + + # Java.g:353:83: ( block | SEMI ) + alt30 = 2 + LA30_0 = self.input.LA(1) + + if (LA30_0 == LCURLY) : + alt30 = 1 + elif (LA30_0 == SEMI) : + alt30 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 30, 0, self.input) + + raise nvae + + if alt30 == 1: + # Java.g:353:84: block + pass + self._state.following.append(self.FOLLOW_block_in_classScopeDeclarations5666) + block90 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_block.add(block90.tree) + + + elif alt30 == 2: + # Java.g:353:92: SEMI + pass + SEMI91=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_classScopeDeclarations5670) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI91) + + + + + # AST Rewrite + # elements: arrayDeclaratorList, type, modifierList, block, throwsClause, formalParameterList, IDENT, genericTypeParameterList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 354:17: -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? ) + # Java.g:354:21: ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(FUNCTION_METHOD_DECL, "FUNCTION_METHOD_DECL"), root_1) + + self._adaptor.addChild(root_1, stream_modifierList.nextTree()) + # Java.g:354:57: ( genericTypeParameterList )? + if stream_genericTypeParameterList.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeParameterList.nextTree()) + + + stream_genericTypeParameterList.reset(); + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + self._adaptor.addChild(root_1, stream_formalParameterList.nextTree()) + # Java.g:354:114: ( arrayDeclaratorList )? + if stream_arrayDeclaratorList.hasNext(): + self._adaptor.addChild(root_1, stream_arrayDeclaratorList.nextTree()) + + + stream_arrayDeclaratorList.reset(); + # Java.g:354:135: ( throwsClause )? + if stream_throwsClause.hasNext(): + self._adaptor.addChild(root_1, stream_throwsClause.nextTree()) + + + stream_throwsClause.reset(); + # Java.g:354:149: ( block )? + if stream_block.hasNext(): + self._adaptor.addChild(root_1, stream_block.nextTree()) + + + stream_block.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt34 == 2: + # Java.g:355:17: VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) + pass + VOID92=self.match(self.input, VOID, self.FOLLOW_VOID_in_classScopeDeclarations5732) + if self._state.backtracking == 0: + stream_VOID.add(VOID92) + IDENT93=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_classScopeDeclarations5734) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT93) + self._state.following.append(self.FOLLOW_formalParameterList_in_classScopeDeclarations5736) + formalParameterList94 = self.formalParameterList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_formalParameterList.add(formalParameterList94.tree) + # Java.g:355:48: ( throwsClause )? + alt31 = 2 + LA31_0 = self.input.LA(1) + + if (LA31_0 == THROWS) : + alt31 = 1 + if alt31 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_classScopeDeclarations5738) + throwsClause95 = self.throwsClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_throwsClause.add(throwsClause95.tree) + + + + # Java.g:355:62: ( block | SEMI ) + alt32 = 2 + LA32_0 = self.input.LA(1) + + if (LA32_0 == LCURLY) : + alt32 = 1 + elif (LA32_0 == SEMI) : + alt32 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 32, 0, self.input) + + raise nvae + + if alt32 == 1: + # Java.g:355:63: block + pass + self._state.following.append(self.FOLLOW_block_in_classScopeDeclarations5742) + block96 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_block.add(block96.tree) + + + elif alt32 == 2: + # Java.g:355:71: SEMI + pass + SEMI97=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_classScopeDeclarations5746) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI97) + + + + + # AST Rewrite + # elements: block, genericTypeParameterList, modifierList, formalParameterList, throwsClause, IDENT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 356:17: -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ( block )? ) + # Java.g:356:21: ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ( block )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VOID_METHOD_DECL, "VOID_METHOD_DECL"), root_1) + + self._adaptor.addChild(root_1, stream_modifierList.nextTree()) + # Java.g:356:53: ( genericTypeParameterList )? + if stream_genericTypeParameterList.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeParameterList.nextTree()) + + + stream_genericTypeParameterList.reset(); + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + self._adaptor.addChild(root_1, stream_formalParameterList.nextTree()) + # Java.g:356:105: ( throwsClause )? + if stream_throwsClause.hasNext(): + self._adaptor.addChild(root_1, stream_throwsClause.nextTree()) + + + stream_throwsClause.reset(); + # Java.g:356:119: ( block )? + if stream_block.hasNext(): + self._adaptor.addChild(root_1, stream_block.nextTree()) + + + stream_block.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt34 == 3: + # Java.g:357:17: ident= IDENT formalParameterList ( throwsClause )? block + pass + ident=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_classScopeDeclarations5805) + if self._state.backtracking == 0: + stream_IDENT.add(ident) + self._state.following.append(self.FOLLOW_formalParameterList_in_classScopeDeclarations5807) + formalParameterList98 = self.formalParameterList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_formalParameterList.add(formalParameterList98.tree) + # Java.g:357:49: ( throwsClause )? + alt33 = 2 + LA33_0 = self.input.LA(1) + + if (LA33_0 == THROWS) : + alt33 = 1 + if alt33 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_classScopeDeclarations5809) + throwsClause99 = self.throwsClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_throwsClause.add(throwsClause99.tree) + + + + self._state.following.append(self.FOLLOW_block_in_classScopeDeclarations5812) + block100 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_block.add(block100.tree) + + # AST Rewrite + # elements: formalParameterList, modifierList, block, throwsClause, genericTypeParameterList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 358:17: -> ^( CONSTRUCTOR_DECL[$ident, \"CONSTRUCTOR_DECL\"] modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block ) + # Java.g:358:21: ^( CONSTRUCTOR_DECL[$ident, \"CONSTRUCTOR_DECL\"] modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(CONSTRUCTOR_DECL, ident, "CONSTRUCTOR_DECL"), root_1) + + self._adaptor.addChild(root_1, stream_modifierList.nextTree()) + # Java.g:358:81: ( genericTypeParameterList )? + if stream_genericTypeParameterList.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeParameterList.nextTree()) + + + stream_genericTypeParameterList.reset(); + self._adaptor.addChild(root_1, stream_formalParameterList.nextTree()) + # Java.g:358:127: ( throwsClause )? + if stream_throwsClause.hasNext(): + self._adaptor.addChild(root_1, stream_throwsClause.nextTree()) + + + stream_throwsClause.reset(); + self._adaptor.addChild(root_1, stream_block.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt35 == 2: + # Java.g:360:13: type classFieldDeclaratorList SEMI + pass + self._state.following.append(self.FOLLOW_type_in_classScopeDeclarations5876) + type101 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type101.tree) + self._state.following.append(self.FOLLOW_classFieldDeclaratorList_in_classScopeDeclarations5878) + classFieldDeclaratorList102 = self.classFieldDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classFieldDeclaratorList.add(classFieldDeclaratorList102.tree) + SEMI103=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_classScopeDeclarations5880) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI103) + + # AST Rewrite + # elements: type, modifierList, classFieldDeclaratorList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 361:13: -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) + # Java.g:361:17: ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VAR_DECLARATION, "VAR_DECLARATION"), root_1) + + self._adaptor.addChild(root_1, stream_modifierList.nextTree()) + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_classFieldDeclaratorList.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt36 == 4: + # Java.g:363:9: typeDeclaration + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_typeDeclaration_in_classScopeDeclarations5925) + typeDeclaration104 = self.typeDeclaration() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, typeDeclaration104.tree) + + + elif alt36 == 5: + # Java.g:364:9: SEMI + pass + root_0 = self._adaptor.nil() + + SEMI105=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_classScopeDeclarations5935) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 25, classScopeDeclarations_StartIndex, success) + + pass + return retval + + # $ANTLR end "classScopeDeclarations" + + class interfaceScopeDeclarations_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.interfaceScopeDeclarations_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "interfaceScopeDeclarations" + # Java.g:367:1: interfaceScopeDeclarations : ( modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ) | VOID IDENT formalParameterList ( throwsClause )? SEMI -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ) ) | type interfaceFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type interfaceFieldDeclaratorList ) ) | typeDeclaration | SEMI ); + def interfaceScopeDeclarations(self, ): + + retval = self.interfaceScopeDeclarations_return() + retval.start = self.input.LT(1) + interfaceScopeDeclarations_StartIndex = self.input.index() + root_0 = None + + IDENT109 = None + SEMI113 = None + VOID114 = None + IDENT115 = None + SEMI118 = None + SEMI121 = None + SEMI123 = None + modifierList106 = None + + genericTypeParameterList107 = None + + type108 = None + + formalParameterList110 = None + + arrayDeclaratorList111 = None + + throwsClause112 = None + + formalParameterList116 = None + + throwsClause117 = None + + type119 = None + + interfaceFieldDeclaratorList120 = None + + typeDeclaration122 = None + + + IDENT109_tree = None + SEMI113_tree = None + VOID114_tree = None + IDENT115_tree = None + SEMI118_tree = None + SEMI121_tree = None + SEMI123_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_VOID = RewriteRuleTokenStream(self._adaptor, "token VOID") + stream_SEMI = RewriteRuleTokenStream(self._adaptor, "token SEMI") + stream_arrayDeclaratorList = RewriteRuleSubtreeStream(self._adaptor, "rule arrayDeclaratorList") + stream_throwsClause = RewriteRuleSubtreeStream(self._adaptor, "rule throwsClause") + stream_modifierList = RewriteRuleSubtreeStream(self._adaptor, "rule modifierList") + stream_genericTypeParameterList = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeParameterList") + stream_interfaceFieldDeclaratorList = RewriteRuleSubtreeStream(self._adaptor, "rule interfaceFieldDeclaratorList") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + stream_formalParameterList = RewriteRuleSubtreeStream(self._adaptor, "rule formalParameterList") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 26): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:368:5: ( modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ) | VOID IDENT formalParameterList ( throwsClause )? SEMI -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ) ) | type interfaceFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type interfaceFieldDeclaratorList ) ) | typeDeclaration | SEMI ) + alt43 = 3 + alt43 = self.dfa43.predict(self.input) + if alt43 == 1: + # Java.g:368:9: modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ) | VOID IDENT formalParameterList ( throwsClause )? SEMI -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ) ) | type interfaceFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type interfaceFieldDeclaratorList ) ) + pass + self._state.following.append(self.FOLLOW_modifierList_in_interfaceScopeDeclarations5955) + modifierList106 = self.modifierList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_modifierList.add(modifierList106.tree) + # Java.g:369:9: ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ) | VOID IDENT formalParameterList ( throwsClause )? SEMI -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ) ) | type interfaceFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type interfaceFieldDeclaratorList ) ) + alt42 = 2 + LA42 = self.input.LA(1) + if LA42 == LESS_THAN or LA42 == VOID: + alt42 = 1 + elif LA42 == BOOLEAN or LA42 == BYTE or LA42 == CHAR or LA42 == DOUBLE or LA42 == FLOAT or LA42 == INT or LA42 == LONG or LA42 == SHORT: + LA42_2 = self.input.LA(2) + + if (self.synpred50_Java()) : + alt42 = 1 + elif (True) : + alt42 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 42, 2, self.input) + + raise nvae + + elif LA42 == IDENT: + LA42_3 = self.input.LA(2) + + if (self.synpred50_Java()) : + alt42 = 1 + elif (True) : + alt42 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 42, 3, self.input) + + raise nvae + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 42, 0, self.input) + + raise nvae + + if alt42 == 1: + # Java.g:369:13: ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ) | VOID IDENT formalParameterList ( throwsClause )? SEMI -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ) ) + pass + # Java.g:369:13: ( genericTypeParameterList )? + alt37 = 2 + LA37_0 = self.input.LA(1) + + if (LA37_0 == LESS_THAN) : + alt37 = 1 + if alt37 == 1: + # Java.g:0:0: genericTypeParameterList + pass + self._state.following.append(self.FOLLOW_genericTypeParameterList_in_interfaceScopeDeclarations5969) + genericTypeParameterList107 = self.genericTypeParameterList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeParameterList.add(genericTypeParameterList107.tree) + + + + # Java.g:370:13: ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ) | VOID IDENT formalParameterList ( throwsClause )? SEMI -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ) ) + alt41 = 2 + LA41_0 = self.input.LA(1) + + if (LA41_0 == BOOLEAN or LA41_0 == BYTE or LA41_0 == CHAR or LA41_0 == DOUBLE or LA41_0 == FLOAT or (INT <= LA41_0 <= LONG) or LA41_0 == SHORT or LA41_0 == IDENT) : + alt41 = 1 + elif (LA41_0 == VOID) : + alt41 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 41, 0, self.input) + + raise nvae + + if alt41 == 1: + # Java.g:370:17: type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI + pass + self._state.following.append(self.FOLLOW_type_in_interfaceScopeDeclarations5988) + type108 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type108.tree) + IDENT109=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_interfaceScopeDeclarations5990) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT109) + self._state.following.append(self.FOLLOW_formalParameterList_in_interfaceScopeDeclarations5992) + formalParameterList110 = self.formalParameterList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_formalParameterList.add(formalParameterList110.tree) + # Java.g:370:48: ( arrayDeclaratorList )? + alt38 = 2 + LA38_0 = self.input.LA(1) + + if (LA38_0 == LBRACK) : + alt38 = 1 + if alt38 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_interfaceScopeDeclarations5994) + arrayDeclaratorList111 = self.arrayDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arrayDeclaratorList.add(arrayDeclaratorList111.tree) + + + + # Java.g:370:69: ( throwsClause )? + alt39 = 2 + LA39_0 = self.input.LA(1) + + if (LA39_0 == THROWS) : + alt39 = 1 + if alt39 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_interfaceScopeDeclarations5997) + throwsClause112 = self.throwsClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_throwsClause.add(throwsClause112.tree) + + + + SEMI113=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_interfaceScopeDeclarations6000) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI113) + + # AST Rewrite + # elements: throwsClause, IDENT, arrayDeclaratorList, modifierList, genericTypeParameterList, formalParameterList, type + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 371:17: -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ) + # Java.g:371:21: ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(FUNCTION_METHOD_DECL, "FUNCTION_METHOD_DECL"), root_1) + + self._adaptor.addChild(root_1, stream_modifierList.nextTree()) + # Java.g:371:57: ( genericTypeParameterList )? + if stream_genericTypeParameterList.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeParameterList.nextTree()) + + + stream_genericTypeParameterList.reset(); + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + self._adaptor.addChild(root_1, stream_formalParameterList.nextTree()) + # Java.g:371:114: ( arrayDeclaratorList )? + if stream_arrayDeclaratorList.hasNext(): + self._adaptor.addChild(root_1, stream_arrayDeclaratorList.nextTree()) + + + stream_arrayDeclaratorList.reset(); + # Java.g:371:135: ( throwsClause )? + if stream_throwsClause.hasNext(): + self._adaptor.addChild(root_1, stream_throwsClause.nextTree()) + + + stream_throwsClause.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt41 == 2: + # Java.g:372:17: VOID IDENT formalParameterList ( throwsClause )? SEMI + pass + VOID114=self.match(self.input, VOID, self.FOLLOW_VOID_in_interfaceScopeDeclarations6058) + if self._state.backtracking == 0: + stream_VOID.add(VOID114) + IDENT115=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_interfaceScopeDeclarations6060) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT115) + self._state.following.append(self.FOLLOW_formalParameterList_in_interfaceScopeDeclarations6062) + formalParameterList116 = self.formalParameterList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_formalParameterList.add(formalParameterList116.tree) + # Java.g:372:48: ( throwsClause )? + alt40 = 2 + LA40_0 = self.input.LA(1) + + if (LA40_0 == THROWS) : + alt40 = 1 + if alt40 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_interfaceScopeDeclarations6064) + throwsClause117 = self.throwsClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_throwsClause.add(throwsClause117.tree) + + + + SEMI118=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_interfaceScopeDeclarations6067) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI118) + + # AST Rewrite + # elements: throwsClause, formalParameterList, IDENT, genericTypeParameterList, modifierList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 373:17: -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ) + # Java.g:373:21: ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VOID_METHOD_DECL, "VOID_METHOD_DECL"), root_1) + + self._adaptor.addChild(root_1, stream_modifierList.nextTree()) + # Java.g:373:53: ( genericTypeParameterList )? + if stream_genericTypeParameterList.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeParameterList.nextTree()) + + + stream_genericTypeParameterList.reset(); + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + self._adaptor.addChild(root_1, stream_formalParameterList.nextTree()) + # Java.g:373:105: ( throwsClause )? + if stream_throwsClause.hasNext(): + self._adaptor.addChild(root_1, stream_throwsClause.nextTree()) + + + stream_throwsClause.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt42 == 2: + # Java.g:375:13: type interfaceFieldDeclaratorList SEMI + pass + self._state.following.append(self.FOLLOW_type_in_interfaceScopeDeclarations6130) + type119 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type119.tree) + self._state.following.append(self.FOLLOW_interfaceFieldDeclaratorList_in_interfaceScopeDeclarations6132) + interfaceFieldDeclaratorList120 = self.interfaceFieldDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_interfaceFieldDeclaratorList.add(interfaceFieldDeclaratorList120.tree) + SEMI121=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_interfaceScopeDeclarations6134) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI121) + + # AST Rewrite + # elements: interfaceFieldDeclaratorList, type, modifierList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 376:13: -> ^( VAR_DECLARATION modifierList type interfaceFieldDeclaratorList ) + # Java.g:376:17: ^( VAR_DECLARATION modifierList type interfaceFieldDeclaratorList ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VAR_DECLARATION, "VAR_DECLARATION"), root_1) + + self._adaptor.addChild(root_1, stream_modifierList.nextTree()) + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_interfaceFieldDeclaratorList.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt43 == 2: + # Java.g:378:9: typeDeclaration + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_typeDeclaration_in_interfaceScopeDeclarations6179) + typeDeclaration122 = self.typeDeclaration() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, typeDeclaration122.tree) + + + elif alt43 == 3: + # Java.g:379:9: SEMI + pass + root_0 = self._adaptor.nil() + + SEMI123=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_interfaceScopeDeclarations6189) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 26, interfaceScopeDeclarations_StartIndex, success) + + pass + return retval + + # $ANTLR end "interfaceScopeDeclarations" + + class classFieldDeclaratorList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.classFieldDeclaratorList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "classFieldDeclaratorList" + # Java.g:382:1: classFieldDeclaratorList : classFieldDeclarator ( COMMA classFieldDeclarator )* -> ^( VAR_DECLARATOR_LIST ( classFieldDeclarator )+ ) ; + def classFieldDeclaratorList(self, ): + + retval = self.classFieldDeclaratorList_return() + retval.start = self.input.LT(1) + classFieldDeclaratorList_StartIndex = self.input.index() + root_0 = None + + COMMA125 = None + classFieldDeclarator124 = None + + classFieldDeclarator126 = None + + + COMMA125_tree = None + stream_COMMA = RewriteRuleTokenStream(self._adaptor, "token COMMA") + stream_classFieldDeclarator = RewriteRuleSubtreeStream(self._adaptor, "rule classFieldDeclarator") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 27): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:383:5: ( classFieldDeclarator ( COMMA classFieldDeclarator )* -> ^( VAR_DECLARATOR_LIST ( classFieldDeclarator )+ ) ) + # Java.g:383:9: classFieldDeclarator ( COMMA classFieldDeclarator )* + pass + self._state.following.append(self.FOLLOW_classFieldDeclarator_in_classFieldDeclaratorList6209) + classFieldDeclarator124 = self.classFieldDeclarator() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classFieldDeclarator.add(classFieldDeclarator124.tree) + # Java.g:383:30: ( COMMA classFieldDeclarator )* + while True: #loop44 + alt44 = 2 + LA44_0 = self.input.LA(1) + + if (LA44_0 == COMMA) : + alt44 = 1 + + + if alt44 == 1: + # Java.g:383:31: COMMA classFieldDeclarator + pass + COMMA125=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_classFieldDeclaratorList6212) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA125) + self._state.following.append(self.FOLLOW_classFieldDeclarator_in_classFieldDeclaratorList6214) + classFieldDeclarator126 = self.classFieldDeclarator() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classFieldDeclarator.add(classFieldDeclarator126.tree) + + + else: + break #loop44 + + # AST Rewrite + # elements: classFieldDeclarator + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 384:9: -> ^( VAR_DECLARATOR_LIST ( classFieldDeclarator )+ ) + # Java.g:384:13: ^( VAR_DECLARATOR_LIST ( classFieldDeclarator )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VAR_DECLARATOR_LIST, "VAR_DECLARATOR_LIST"), root_1) + + # Java.g:384:35: ( classFieldDeclarator )+ + if not (stream_classFieldDeclarator.hasNext()): + raise RewriteEarlyExitException() + + while stream_classFieldDeclarator.hasNext(): + self._adaptor.addChild(root_1, stream_classFieldDeclarator.nextTree()) + + + stream_classFieldDeclarator.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 27, classFieldDeclaratorList_StartIndex, success) + + pass + return retval + + # $ANTLR end "classFieldDeclaratorList" + + class classFieldDeclarator_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.classFieldDeclarator_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "classFieldDeclarator" + # Java.g:387:1: classFieldDeclarator : variableDeclaratorId ( ASSIGN variableInitializer )? -> ^( VAR_DECLARATOR variableDeclaratorId ( variableInitializer )? ) ; + def classFieldDeclarator(self, ): + + retval = self.classFieldDeclarator_return() + retval.start = self.input.LT(1) + classFieldDeclarator_StartIndex = self.input.index() + root_0 = None + + ASSIGN128 = None + variableDeclaratorId127 = None + + variableInitializer129 = None + + + ASSIGN128_tree = None + stream_ASSIGN = RewriteRuleTokenStream(self._adaptor, "token ASSIGN") + stream_variableDeclaratorId = RewriteRuleSubtreeStream(self._adaptor, "rule variableDeclaratorId") + stream_variableInitializer = RewriteRuleSubtreeStream(self._adaptor, "rule variableInitializer") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 28): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:388:5: ( variableDeclaratorId ( ASSIGN variableInitializer )? -> ^( VAR_DECLARATOR variableDeclaratorId ( variableInitializer )? ) ) + # Java.g:388:9: variableDeclaratorId ( ASSIGN variableInitializer )? + pass + self._state.following.append(self.FOLLOW_variableDeclaratorId_in_classFieldDeclarator6253) + variableDeclaratorId127 = self.variableDeclaratorId() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_variableDeclaratorId.add(variableDeclaratorId127.tree) + # Java.g:388:30: ( ASSIGN variableInitializer )? + alt45 = 2 + LA45_0 = self.input.LA(1) + + if (LA45_0 == ASSIGN) : + alt45 = 1 + if alt45 == 1: + # Java.g:388:31: ASSIGN variableInitializer + pass + ASSIGN128=self.match(self.input, ASSIGN, self.FOLLOW_ASSIGN_in_classFieldDeclarator6256) + if self._state.backtracking == 0: + stream_ASSIGN.add(ASSIGN128) + self._state.following.append(self.FOLLOW_variableInitializer_in_classFieldDeclarator6258) + variableInitializer129 = self.variableInitializer() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_variableInitializer.add(variableInitializer129.tree) + + + + + # AST Rewrite + # elements: variableDeclaratorId, variableInitializer + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 389:9: -> ^( VAR_DECLARATOR variableDeclaratorId ( variableInitializer )? ) + # Java.g:389:13: ^( VAR_DECLARATOR variableDeclaratorId ( variableInitializer )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VAR_DECLARATOR, "VAR_DECLARATOR"), root_1) + + self._adaptor.addChild(root_1, stream_variableDeclaratorId.nextTree()) + # Java.g:389:51: ( variableInitializer )? + if stream_variableInitializer.hasNext(): + self._adaptor.addChild(root_1, stream_variableInitializer.nextTree()) + + + stream_variableInitializer.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 28, classFieldDeclarator_StartIndex, success) + + pass + return retval + + # $ANTLR end "classFieldDeclarator" + + class interfaceFieldDeclaratorList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.interfaceFieldDeclaratorList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "interfaceFieldDeclaratorList" + # Java.g:392:1: interfaceFieldDeclaratorList : interfaceFieldDeclarator ( COMMA interfaceFieldDeclarator )* -> ^( VAR_DECLARATOR_LIST ( interfaceFieldDeclarator )+ ) ; + def interfaceFieldDeclaratorList(self, ): + + retval = self.interfaceFieldDeclaratorList_return() + retval.start = self.input.LT(1) + interfaceFieldDeclaratorList_StartIndex = self.input.index() + root_0 = None + + COMMA131 = None + interfaceFieldDeclarator130 = None + + interfaceFieldDeclarator132 = None + + + COMMA131_tree = None + stream_COMMA = RewriteRuleTokenStream(self._adaptor, "token COMMA") + stream_interfaceFieldDeclarator = RewriteRuleSubtreeStream(self._adaptor, "rule interfaceFieldDeclarator") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 29): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:393:5: ( interfaceFieldDeclarator ( COMMA interfaceFieldDeclarator )* -> ^( VAR_DECLARATOR_LIST ( interfaceFieldDeclarator )+ ) ) + # Java.g:393:9: interfaceFieldDeclarator ( COMMA interfaceFieldDeclarator )* + pass + self._state.following.append(self.FOLLOW_interfaceFieldDeclarator_in_interfaceFieldDeclaratorList6299) + interfaceFieldDeclarator130 = self.interfaceFieldDeclarator() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_interfaceFieldDeclarator.add(interfaceFieldDeclarator130.tree) + # Java.g:393:34: ( COMMA interfaceFieldDeclarator )* + while True: #loop46 + alt46 = 2 + LA46_0 = self.input.LA(1) + + if (LA46_0 == COMMA) : + alt46 = 1 + + + if alt46 == 1: + # Java.g:393:35: COMMA interfaceFieldDeclarator + pass + COMMA131=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_interfaceFieldDeclaratorList6302) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA131) + self._state.following.append(self.FOLLOW_interfaceFieldDeclarator_in_interfaceFieldDeclaratorList6304) + interfaceFieldDeclarator132 = self.interfaceFieldDeclarator() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_interfaceFieldDeclarator.add(interfaceFieldDeclarator132.tree) + + + else: + break #loop46 + + # AST Rewrite + # elements: interfaceFieldDeclarator + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 394:9: -> ^( VAR_DECLARATOR_LIST ( interfaceFieldDeclarator )+ ) + # Java.g:394:13: ^( VAR_DECLARATOR_LIST ( interfaceFieldDeclarator )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VAR_DECLARATOR_LIST, "VAR_DECLARATOR_LIST"), root_1) + + # Java.g:394:35: ( interfaceFieldDeclarator )+ + if not (stream_interfaceFieldDeclarator.hasNext()): + raise RewriteEarlyExitException() + + while stream_interfaceFieldDeclarator.hasNext(): + self._adaptor.addChild(root_1, stream_interfaceFieldDeclarator.nextTree()) + + + stream_interfaceFieldDeclarator.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 29, interfaceFieldDeclaratorList_StartIndex, success) + + pass + return retval + + # $ANTLR end "interfaceFieldDeclaratorList" + + class interfaceFieldDeclarator_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.interfaceFieldDeclarator_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "interfaceFieldDeclarator" + # Java.g:397:1: interfaceFieldDeclarator : variableDeclaratorId ASSIGN variableInitializer -> ^( VAR_DECLARATOR variableDeclaratorId variableInitializer ) ; + def interfaceFieldDeclarator(self, ): + + retval = self.interfaceFieldDeclarator_return() + retval.start = self.input.LT(1) + interfaceFieldDeclarator_StartIndex = self.input.index() + root_0 = None + + ASSIGN134 = None + variableDeclaratorId133 = None + + variableInitializer135 = None + + + ASSIGN134_tree = None + stream_ASSIGN = RewriteRuleTokenStream(self._adaptor, "token ASSIGN") + stream_variableDeclaratorId = RewriteRuleSubtreeStream(self._adaptor, "rule variableDeclaratorId") + stream_variableInitializer = RewriteRuleSubtreeStream(self._adaptor, "rule variableInitializer") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 30): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:398:5: ( variableDeclaratorId ASSIGN variableInitializer -> ^( VAR_DECLARATOR variableDeclaratorId variableInitializer ) ) + # Java.g:398:9: variableDeclaratorId ASSIGN variableInitializer + pass + self._state.following.append(self.FOLLOW_variableDeclaratorId_in_interfaceFieldDeclarator6343) + variableDeclaratorId133 = self.variableDeclaratorId() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_variableDeclaratorId.add(variableDeclaratorId133.tree) + ASSIGN134=self.match(self.input, ASSIGN, self.FOLLOW_ASSIGN_in_interfaceFieldDeclarator6345) + if self._state.backtracking == 0: + stream_ASSIGN.add(ASSIGN134) + self._state.following.append(self.FOLLOW_variableInitializer_in_interfaceFieldDeclarator6347) + variableInitializer135 = self.variableInitializer() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_variableInitializer.add(variableInitializer135.tree) + + # AST Rewrite + # elements: variableInitializer, variableDeclaratorId + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 399:9: -> ^( VAR_DECLARATOR variableDeclaratorId variableInitializer ) + # Java.g:399:13: ^( VAR_DECLARATOR variableDeclaratorId variableInitializer ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VAR_DECLARATOR, "VAR_DECLARATOR"), root_1) + + self._adaptor.addChild(root_1, stream_variableDeclaratorId.nextTree()) + self._adaptor.addChild(root_1, stream_variableInitializer.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 30, interfaceFieldDeclarator_StartIndex, success) + + pass + return retval + + # $ANTLR end "interfaceFieldDeclarator" + + class variableDeclaratorId_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.variableDeclaratorId_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "variableDeclaratorId" + # Java.g:402:1: variableDeclaratorId : IDENT ( arrayDeclaratorList )? ; + def variableDeclaratorId(self, ): + + retval = self.variableDeclaratorId_return() + retval.start = self.input.LT(1) + variableDeclaratorId_StartIndex = self.input.index() + root_0 = None + + IDENT136 = None + arrayDeclaratorList137 = None + + + IDENT136_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 31): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:403:5: ( IDENT ( arrayDeclaratorList )? ) + # Java.g:403:9: IDENT ( arrayDeclaratorList )? + pass + root_0 = self._adaptor.nil() + + IDENT136=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_variableDeclaratorId6385) + if self._state.backtracking == 0: + + IDENT136_tree = self._adaptor.createWithPayload(IDENT136) + root_0 = self._adaptor.becomeRoot(IDENT136_tree, root_0) + + # Java.g:403:16: ( arrayDeclaratorList )? + alt47 = 2 + LA47_0 = self.input.LA(1) + + if (LA47_0 == LBRACK) : + alt47 = 1 + if alt47 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_variableDeclaratorId6388) + arrayDeclaratorList137 = self.arrayDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, arrayDeclaratorList137.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 31, variableDeclaratorId_StartIndex, success) + + pass + return retval + + # $ANTLR end "variableDeclaratorId" + + class variableInitializer_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.variableInitializer_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "variableInitializer" + # Java.g:406:1: variableInitializer : ( arrayInitializer | expression ); + def variableInitializer(self, ): + + retval = self.variableInitializer_return() + retval.start = self.input.LT(1) + variableInitializer_StartIndex = self.input.index() + root_0 = None + + arrayInitializer138 = None + + expression139 = None + + + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 32): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:407:5: ( arrayInitializer | expression ) + alt48 = 2 + LA48_0 = self.input.LA(1) + + if (LA48_0 == LCURLY) : + alt48 = 1 + elif (LA48_0 == DEC or LA48_0 == INC or LA48_0 == LESS_THAN or LA48_0 == LOGICAL_NOT or (LPAREN <= LA48_0 <= MINUS) or LA48_0 == NOT or LA48_0 == PLUS or LA48_0 == BOOLEAN or LA48_0 == BYTE or LA48_0 == CHAR or LA48_0 == DOUBLE or LA48_0 == FALSE or LA48_0 == FLOAT or (INT <= LA48_0 <= LONG) or (NEW <= LA48_0 <= NULL) or LA48_0 == SHORT or LA48_0 == SUPER or LA48_0 == THIS or LA48_0 == TRUE or LA48_0 == VOID or (IDENT <= LA48_0 <= STRING_LITERAL)) : + alt48 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 48, 0, self.input) + + raise nvae + + if alt48 == 1: + # Java.g:407:9: arrayInitializer + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_arrayInitializer_in_variableInitializer6408) + arrayInitializer138 = self.arrayInitializer() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, arrayInitializer138.tree) + + + elif alt48 == 2: + # Java.g:408:9: expression + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_expression_in_variableInitializer6418) + expression139 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, expression139.tree) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 32, variableInitializer_StartIndex, success) + + pass + return retval + + # $ANTLR end "variableInitializer" + + class arrayDeclarator_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.arrayDeclarator_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "arrayDeclarator" + # Java.g:411:1: arrayDeclarator : LBRACK RBRACK -> ^( ARRAY_DECLARATOR ) ; + def arrayDeclarator(self, ): + + retval = self.arrayDeclarator_return() + retval.start = self.input.LT(1) + arrayDeclarator_StartIndex = self.input.index() + root_0 = None + + LBRACK140 = None + RBRACK141 = None + + LBRACK140_tree = None + RBRACK141_tree = None + stream_RBRACK = RewriteRuleTokenStream(self._adaptor, "token RBRACK") + stream_LBRACK = RewriteRuleTokenStream(self._adaptor, "token LBRACK") + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 33): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:412:5: ( LBRACK RBRACK -> ^( ARRAY_DECLARATOR ) ) + # Java.g:412:9: LBRACK RBRACK + pass + LBRACK140=self.match(self.input, LBRACK, self.FOLLOW_LBRACK_in_arrayDeclarator6437) + if self._state.backtracking == 0: + stream_LBRACK.add(LBRACK140) + RBRACK141=self.match(self.input, RBRACK, self.FOLLOW_RBRACK_in_arrayDeclarator6439) + if self._state.backtracking == 0: + stream_RBRACK.add(RBRACK141) + + # AST Rewrite + # elements: + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 413:9: -> ^( ARRAY_DECLARATOR ) + # Java.g:413:13: ^( ARRAY_DECLARATOR ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(ARRAY_DECLARATOR, "ARRAY_DECLARATOR"), root_1) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 33, arrayDeclarator_StartIndex, success) + + pass + return retval + + # $ANTLR end "arrayDeclarator" + + class arrayDeclaratorList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.arrayDeclaratorList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "arrayDeclaratorList" + # Java.g:416:1: arrayDeclaratorList : ( arrayDeclarator )+ -> ^( ARRAY_DECLARATOR_LIST ( arrayDeclarator )+ ) ; + def arrayDeclaratorList(self, ): + + retval = self.arrayDeclaratorList_return() + retval.start = self.input.LT(1) + arrayDeclaratorList_StartIndex = self.input.index() + root_0 = None + + arrayDeclarator142 = None + + + stream_arrayDeclarator = RewriteRuleSubtreeStream(self._adaptor, "rule arrayDeclarator") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 34): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:417:5: ( ( arrayDeclarator )+ -> ^( ARRAY_DECLARATOR_LIST ( arrayDeclarator )+ ) ) + # Java.g:417:9: ( arrayDeclarator )+ + pass + # Java.g:417:9: ( arrayDeclarator )+ + cnt49 = 0 + while True: #loop49 + alt49 = 2 + LA49_0 = self.input.LA(1) + + if (LA49_0 == LBRACK) : + LA49_2 = self.input.LA(2) + + if (self.synpred58_Java()) : + alt49 = 1 + + + + + if alt49 == 1: + # Java.g:0:0: arrayDeclarator + pass + self._state.following.append(self.FOLLOW_arrayDeclarator_in_arrayDeclaratorList6473) + arrayDeclarator142 = self.arrayDeclarator() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arrayDeclarator.add(arrayDeclarator142.tree) + + + else: + if cnt49 >= 1: + break #loop49 + + if self._state.backtracking > 0: + raise BacktrackingFailed + + eee = EarlyExitException(49, self.input) + raise eee + + cnt49 += 1 + + # AST Rewrite + # elements: arrayDeclarator + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 418:9: -> ^( ARRAY_DECLARATOR_LIST ( arrayDeclarator )+ ) + # Java.g:418:13: ^( ARRAY_DECLARATOR_LIST ( arrayDeclarator )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(ARRAY_DECLARATOR_LIST, "ARRAY_DECLARATOR_LIST"), root_1) + + # Java.g:418:37: ( arrayDeclarator )+ + if not (stream_arrayDeclarator.hasNext()): + raise RewriteEarlyExitException() + + while stream_arrayDeclarator.hasNext(): + self._adaptor.addChild(root_1, stream_arrayDeclarator.nextTree()) + + + stream_arrayDeclarator.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 34, arrayDeclaratorList_StartIndex, success) + + pass + return retval + + # $ANTLR end "arrayDeclaratorList" + + class arrayInitializer_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.arrayInitializer_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "arrayInitializer" + # Java.g:421:1: arrayInitializer : LCURLY ( variableInitializer ( COMMA variableInitializer )* ( COMMA )? )? RCURLY -> ^( ARRAY_INITIALIZER[$LCURLY, \"ARRAY_INITIALIZER\"] ( variableInitializer )* ) ; + def arrayInitializer(self, ): + + retval = self.arrayInitializer_return() + retval.start = self.input.LT(1) + arrayInitializer_StartIndex = self.input.index() + root_0 = None + + LCURLY143 = None + COMMA145 = None + COMMA147 = None + RCURLY148 = None + variableInitializer144 = None + + variableInitializer146 = None + + + LCURLY143_tree = None + COMMA145_tree = None + COMMA147_tree = None + RCURLY148_tree = None + stream_LCURLY = RewriteRuleTokenStream(self._adaptor, "token LCURLY") + stream_COMMA = RewriteRuleTokenStream(self._adaptor, "token COMMA") + stream_RCURLY = RewriteRuleTokenStream(self._adaptor, "token RCURLY") + stream_variableInitializer = RewriteRuleSubtreeStream(self._adaptor, "rule variableInitializer") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 35): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:422:5: ( LCURLY ( variableInitializer ( COMMA variableInitializer )* ( COMMA )? )? RCURLY -> ^( ARRAY_INITIALIZER[$LCURLY, \"ARRAY_INITIALIZER\"] ( variableInitializer )* ) ) + # Java.g:422:9: LCURLY ( variableInitializer ( COMMA variableInitializer )* ( COMMA )? )? RCURLY + pass + LCURLY143=self.match(self.input, LCURLY, self.FOLLOW_LCURLY_in_arrayInitializer6511) + if self._state.backtracking == 0: + stream_LCURLY.add(LCURLY143) + # Java.g:422:16: ( variableInitializer ( COMMA variableInitializer )* ( COMMA )? )? + alt52 = 2 + LA52_0 = self.input.LA(1) + + if (LA52_0 == DEC or LA52_0 == INC or LA52_0 == LCURLY or LA52_0 == LESS_THAN or LA52_0 == LOGICAL_NOT or (LPAREN <= LA52_0 <= MINUS) or LA52_0 == NOT or LA52_0 == PLUS or LA52_0 == BOOLEAN or LA52_0 == BYTE or LA52_0 == CHAR or LA52_0 == DOUBLE or LA52_0 == FALSE or LA52_0 == FLOAT or (INT <= LA52_0 <= LONG) or (NEW <= LA52_0 <= NULL) or LA52_0 == SHORT or LA52_0 == SUPER or LA52_0 == THIS or LA52_0 == TRUE or LA52_0 == VOID or (IDENT <= LA52_0 <= STRING_LITERAL)) : + alt52 = 1 + if alt52 == 1: + # Java.g:422:17: variableInitializer ( COMMA variableInitializer )* ( COMMA )? + pass + self._state.following.append(self.FOLLOW_variableInitializer_in_arrayInitializer6514) + variableInitializer144 = self.variableInitializer() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_variableInitializer.add(variableInitializer144.tree) + # Java.g:422:37: ( COMMA variableInitializer )* + while True: #loop50 + alt50 = 2 + LA50_0 = self.input.LA(1) + + if (LA50_0 == COMMA) : + LA50_1 = self.input.LA(2) + + if (LA50_1 == DEC or LA50_1 == INC or LA50_1 == LCURLY or LA50_1 == LESS_THAN or LA50_1 == LOGICAL_NOT or (LPAREN <= LA50_1 <= MINUS) or LA50_1 == NOT or LA50_1 == PLUS or LA50_1 == BOOLEAN or LA50_1 == BYTE or LA50_1 == CHAR or LA50_1 == DOUBLE or LA50_1 == FALSE or LA50_1 == FLOAT or (INT <= LA50_1 <= LONG) or (NEW <= LA50_1 <= NULL) or LA50_1 == SHORT or LA50_1 == SUPER or LA50_1 == THIS or LA50_1 == TRUE or LA50_1 == VOID or (IDENT <= LA50_1 <= STRING_LITERAL)) : + alt50 = 1 + + + + + if alt50 == 1: + # Java.g:422:38: COMMA variableInitializer + pass + COMMA145=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_arrayInitializer6517) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA145) + self._state.following.append(self.FOLLOW_variableInitializer_in_arrayInitializer6519) + variableInitializer146 = self.variableInitializer() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_variableInitializer.add(variableInitializer146.tree) + + + else: + break #loop50 + # Java.g:422:66: ( COMMA )? + alt51 = 2 + LA51_0 = self.input.LA(1) + + if (LA51_0 == COMMA) : + alt51 = 1 + if alt51 == 1: + # Java.g:0:0: COMMA + pass + COMMA147=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_arrayInitializer6523) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA147) + + + + + + + RCURLY148=self.match(self.input, RCURLY, self.FOLLOW_RCURLY_in_arrayInitializer6528) + if self._state.backtracking == 0: + stream_RCURLY.add(RCURLY148) + + # AST Rewrite + # elements: variableInitializer + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 423:9: -> ^( ARRAY_INITIALIZER[$LCURLY, \"ARRAY_INITIALIZER\"] ( variableInitializer )* ) + # Java.g:423:13: ^( ARRAY_INITIALIZER[$LCURLY, \"ARRAY_INITIALIZER\"] ( variableInitializer )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(ARRAY_INITIALIZER, LCURLY143, "ARRAY_INITIALIZER"), root_1) + + # Java.g:423:63: ( variableInitializer )* + while stream_variableInitializer.hasNext(): + self._adaptor.addChild(root_1, stream_variableInitializer.nextTree()) + + + stream_variableInitializer.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 35, arrayInitializer_StartIndex, success) + + pass + return retval + + # $ANTLR end "arrayInitializer" + + class throwsClause_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.throwsClause_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "throwsClause" + # Java.g:426:1: throwsClause : THROWS qualifiedIdentList -> ^( THROWS_CLAUSE[$THROWS, \"THROWS_CLAUSE\"] qualifiedIdentList ) ; + def throwsClause(self, ): + + retval = self.throwsClause_return() + retval.start = self.input.LT(1) + throwsClause_StartIndex = self.input.index() + root_0 = None + + THROWS149 = None + qualifiedIdentList150 = None + + + THROWS149_tree = None + stream_THROWS = RewriteRuleTokenStream(self._adaptor, "token THROWS") + stream_qualifiedIdentList = RewriteRuleSubtreeStream(self._adaptor, "rule qualifiedIdentList") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 36): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:427:5: ( THROWS qualifiedIdentList -> ^( THROWS_CLAUSE[$THROWS, \"THROWS_CLAUSE\"] qualifiedIdentList ) ) + # Java.g:427:9: THROWS qualifiedIdentList + pass + THROWS149=self.match(self.input, THROWS, self.FOLLOW_THROWS_in_throwsClause6566) + if self._state.backtracking == 0: + stream_THROWS.add(THROWS149) + self._state.following.append(self.FOLLOW_qualifiedIdentList_in_throwsClause6568) + qualifiedIdentList150 = self.qualifiedIdentList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_qualifiedIdentList.add(qualifiedIdentList150.tree) + + # AST Rewrite + # elements: qualifiedIdentList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 428:9: -> ^( THROWS_CLAUSE[$THROWS, \"THROWS_CLAUSE\"] qualifiedIdentList ) + # Java.g:428:13: ^( THROWS_CLAUSE[$THROWS, \"THROWS_CLAUSE\"] qualifiedIdentList ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(THROWS_CLAUSE, THROWS149, "THROWS_CLAUSE"), root_1) + + self._adaptor.addChild(root_1, stream_qualifiedIdentList.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 36, throwsClause_StartIndex, success) + + pass + return retval + + # $ANTLR end "throwsClause" + + class modifierList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.modifierList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "modifierList" + # Java.g:431:1: modifierList : ( modifier )* -> ^( MODIFIER_LIST ( modifier )* ) ; + def modifierList(self, ): + + retval = self.modifierList_return() + retval.start = self.input.LT(1) + modifierList_StartIndex = self.input.index() + root_0 = None + + modifier151 = None + + + stream_modifier = RewriteRuleSubtreeStream(self._adaptor, "rule modifier") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 37): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:432:5: ( ( modifier )* -> ^( MODIFIER_LIST ( modifier )* ) ) + # Java.g:432:9: ( modifier )* + pass + # Java.g:432:9: ( modifier )* + while True: #loop53 + alt53 = 2 + LA53_0 = self.input.LA(1) + + if (LA53_0 == AT) : + LA53_2 = self.input.LA(2) + + if (LA53_2 == IDENT) : + alt53 = 1 + + + elif (LA53_0 == ABSTRACT or LA53_0 == FINAL or LA53_0 == NATIVE or (PRIVATE <= LA53_0 <= PUBLIC) or (STATIC <= LA53_0 <= STRICTFP) or LA53_0 == SYNCHRONIZED or LA53_0 == TRANSIENT or LA53_0 == VOLATILE) : + alt53 = 1 + + + if alt53 == 1: + # Java.g:0:0: modifier + pass + self._state.following.append(self.FOLLOW_modifier_in_modifierList6605) + modifier151 = self.modifier() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_modifier.add(modifier151.tree) + + + else: + break #loop53 + + # AST Rewrite + # elements: modifier + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 433:9: -> ^( MODIFIER_LIST ( modifier )* ) + # Java.g:433:13: ^( MODIFIER_LIST ( modifier )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(MODIFIER_LIST, "MODIFIER_LIST"), root_1) + + # Java.g:433:29: ( modifier )* + while stream_modifier.hasNext(): + self._adaptor.addChild(root_1, stream_modifier.nextTree()) + + + stream_modifier.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 37, modifierList_StartIndex, success) + + pass + return retval + + # $ANTLR end "modifierList" + + class modifier_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.modifier_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "modifier" + # Java.g:436:1: modifier : ( PUBLIC | PROTECTED | PRIVATE | STATIC | ABSTRACT | NATIVE | SYNCHRONIZED | TRANSIENT | VOLATILE | STRICTFP | localModifier ); + def modifier(self, ): + + retval = self.modifier_return() + retval.start = self.input.LT(1) + modifier_StartIndex = self.input.index() + root_0 = None + + PUBLIC152 = None + PROTECTED153 = None + PRIVATE154 = None + STATIC155 = None + ABSTRACT156 = None + NATIVE157 = None + SYNCHRONIZED158 = None + TRANSIENT159 = None + VOLATILE160 = None + STRICTFP161 = None + localModifier162 = None + + + PUBLIC152_tree = None + PROTECTED153_tree = None + PRIVATE154_tree = None + STATIC155_tree = None + ABSTRACT156_tree = None + NATIVE157_tree = None + SYNCHRONIZED158_tree = None + TRANSIENT159_tree = None + VOLATILE160_tree = None + STRICTFP161_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 38): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:437:5: ( PUBLIC | PROTECTED | PRIVATE | STATIC | ABSTRACT | NATIVE | SYNCHRONIZED | TRANSIENT | VOLATILE | STRICTFP | localModifier ) + alt54 = 11 + LA54 = self.input.LA(1) + if LA54 == PUBLIC: + alt54 = 1 + elif LA54 == PROTECTED: + alt54 = 2 + elif LA54 == PRIVATE: + alt54 = 3 + elif LA54 == STATIC: + alt54 = 4 + elif LA54 == ABSTRACT: + alt54 = 5 + elif LA54 == NATIVE: + alt54 = 6 + elif LA54 == SYNCHRONIZED: + alt54 = 7 + elif LA54 == TRANSIENT: + alt54 = 8 + elif LA54 == VOLATILE: + alt54 = 9 + elif LA54 == STRICTFP: + alt54 = 10 + elif LA54 == AT or LA54 == FINAL: + alt54 = 11 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 54, 0, self.input) + + raise nvae + + if alt54 == 1: + # Java.g:437:9: PUBLIC + pass + root_0 = self._adaptor.nil() + + PUBLIC152=self.match(self.input, PUBLIC, self.FOLLOW_PUBLIC_in_modifier6643) + if self._state.backtracking == 0: + + PUBLIC152_tree = self._adaptor.createWithPayload(PUBLIC152) + self._adaptor.addChild(root_0, PUBLIC152_tree) + + + + elif alt54 == 2: + # Java.g:438:9: PROTECTED + pass + root_0 = self._adaptor.nil() + + PROTECTED153=self.match(self.input, PROTECTED, self.FOLLOW_PROTECTED_in_modifier6653) + if self._state.backtracking == 0: + + PROTECTED153_tree = self._adaptor.createWithPayload(PROTECTED153) + self._adaptor.addChild(root_0, PROTECTED153_tree) + + + + elif alt54 == 3: + # Java.g:439:9: PRIVATE + pass + root_0 = self._adaptor.nil() + + PRIVATE154=self.match(self.input, PRIVATE, self.FOLLOW_PRIVATE_in_modifier6663) + if self._state.backtracking == 0: + + PRIVATE154_tree = self._adaptor.createWithPayload(PRIVATE154) + self._adaptor.addChild(root_0, PRIVATE154_tree) + + + + elif alt54 == 4: + # Java.g:440:9: STATIC + pass + root_0 = self._adaptor.nil() + + STATIC155=self.match(self.input, STATIC, self.FOLLOW_STATIC_in_modifier6673) + if self._state.backtracking == 0: + + STATIC155_tree = self._adaptor.createWithPayload(STATIC155) + self._adaptor.addChild(root_0, STATIC155_tree) + + + + elif alt54 == 5: + # Java.g:441:9: ABSTRACT + pass + root_0 = self._adaptor.nil() + + ABSTRACT156=self.match(self.input, ABSTRACT, self.FOLLOW_ABSTRACT_in_modifier6683) + if self._state.backtracking == 0: + + ABSTRACT156_tree = self._adaptor.createWithPayload(ABSTRACT156) + self._adaptor.addChild(root_0, ABSTRACT156_tree) + + + + elif alt54 == 6: + # Java.g:442:9: NATIVE + pass + root_0 = self._adaptor.nil() + + NATIVE157=self.match(self.input, NATIVE, self.FOLLOW_NATIVE_in_modifier6693) + if self._state.backtracking == 0: + + NATIVE157_tree = self._adaptor.createWithPayload(NATIVE157) + self._adaptor.addChild(root_0, NATIVE157_tree) + + + + elif alt54 == 7: + # Java.g:443:9: SYNCHRONIZED + pass + root_0 = self._adaptor.nil() + + SYNCHRONIZED158=self.match(self.input, SYNCHRONIZED, self.FOLLOW_SYNCHRONIZED_in_modifier6703) + if self._state.backtracking == 0: + + SYNCHRONIZED158_tree = self._adaptor.createWithPayload(SYNCHRONIZED158) + self._adaptor.addChild(root_0, SYNCHRONIZED158_tree) + + + + elif alt54 == 8: + # Java.g:444:9: TRANSIENT + pass + root_0 = self._adaptor.nil() + + TRANSIENT159=self.match(self.input, TRANSIENT, self.FOLLOW_TRANSIENT_in_modifier6713) + if self._state.backtracking == 0: + + TRANSIENT159_tree = self._adaptor.createWithPayload(TRANSIENT159) + self._adaptor.addChild(root_0, TRANSIENT159_tree) + + + + elif alt54 == 9: + # Java.g:445:9: VOLATILE + pass + root_0 = self._adaptor.nil() + + VOLATILE160=self.match(self.input, VOLATILE, self.FOLLOW_VOLATILE_in_modifier6723) + if self._state.backtracking == 0: + + VOLATILE160_tree = self._adaptor.createWithPayload(VOLATILE160) + self._adaptor.addChild(root_0, VOLATILE160_tree) + + + + elif alt54 == 10: + # Java.g:446:9: STRICTFP + pass + root_0 = self._adaptor.nil() + + STRICTFP161=self.match(self.input, STRICTFP, self.FOLLOW_STRICTFP_in_modifier6733) + if self._state.backtracking == 0: + + STRICTFP161_tree = self._adaptor.createWithPayload(STRICTFP161) + self._adaptor.addChild(root_0, STRICTFP161_tree) + + + + elif alt54 == 11: + # Java.g:447:9: localModifier + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_localModifier_in_modifier6743) + localModifier162 = self.localModifier() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, localModifier162.tree) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 38, modifier_StartIndex, success) + + pass + return retval + + # $ANTLR end "modifier" + + class localModifierList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.localModifierList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "localModifierList" + # Java.g:450:1: localModifierList : ( localModifier )* -> ^( LOCAL_MODIFIER_LIST ( localModifier )* ) ; + def localModifierList(self, ): + + retval = self.localModifierList_return() + retval.start = self.input.LT(1) + localModifierList_StartIndex = self.input.index() + root_0 = None + + localModifier163 = None + + + stream_localModifier = RewriteRuleSubtreeStream(self._adaptor, "rule localModifier") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 39): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:451:5: ( ( localModifier )* -> ^( LOCAL_MODIFIER_LIST ( localModifier )* ) ) + # Java.g:451:9: ( localModifier )* + pass + # Java.g:451:9: ( localModifier )* + while True: #loop55 + alt55 = 2 + LA55_0 = self.input.LA(1) + + if (LA55_0 == AT or LA55_0 == FINAL) : + alt55 = 1 + + + if alt55 == 1: + # Java.g:0:0: localModifier + pass + self._state.following.append(self.FOLLOW_localModifier_in_localModifierList6762) + localModifier163 = self.localModifier() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_localModifier.add(localModifier163.tree) + + + else: + break #loop55 + + # AST Rewrite + # elements: localModifier + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 452:9: -> ^( LOCAL_MODIFIER_LIST ( localModifier )* ) + # Java.g:452:12: ^( LOCAL_MODIFIER_LIST ( localModifier )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(LOCAL_MODIFIER_LIST, "LOCAL_MODIFIER_LIST"), root_1) + + # Java.g:452:34: ( localModifier )* + while stream_localModifier.hasNext(): + self._adaptor.addChild(root_1, stream_localModifier.nextTree()) + + + stream_localModifier.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 39, localModifierList_StartIndex, success) + + pass + return retval + + # $ANTLR end "localModifierList" + + class localModifier_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.localModifier_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "localModifier" + # Java.g:455:1: localModifier : ( FINAL | annotation ); + def localModifier(self, ): + + retval = self.localModifier_return() + retval.start = self.input.LT(1) + localModifier_StartIndex = self.input.index() + root_0 = None + + FINAL164 = None + annotation165 = None + + + FINAL164_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 40): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:456:5: ( FINAL | annotation ) + alt56 = 2 + LA56_0 = self.input.LA(1) + + if (LA56_0 == FINAL) : + alt56 = 1 + elif (LA56_0 == AT) : + alt56 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 56, 0, self.input) + + raise nvae + + if alt56 == 1: + # Java.g:456:9: FINAL + pass + root_0 = self._adaptor.nil() + + FINAL164=self.match(self.input, FINAL, self.FOLLOW_FINAL_in_localModifier6799) + if self._state.backtracking == 0: + + FINAL164_tree = self._adaptor.createWithPayload(FINAL164) + self._adaptor.addChild(root_0, FINAL164_tree) + + + + elif alt56 == 2: + # Java.g:457:9: annotation + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_annotation_in_localModifier6809) + annotation165 = self.annotation() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotation165.tree) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 40, localModifier_StartIndex, success) + + pass + return retval + + # $ANTLR end "localModifier" + + class type_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.type_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "type" + # Java.g:460:1: type : ( simpleType | objectType ); + def type(self, ): + + retval = self.type_return() + retval.start = self.input.LT(1) + type_StartIndex = self.input.index() + root_0 = None + + simpleType166 = None + + objectType167 = None + + + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 41): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:461:5: ( simpleType | objectType ) + alt57 = 2 + LA57_0 = self.input.LA(1) + + if (LA57_0 == BOOLEAN or LA57_0 == BYTE or LA57_0 == CHAR or LA57_0 == DOUBLE or LA57_0 == FLOAT or (INT <= LA57_0 <= LONG) or LA57_0 == SHORT) : + alt57 = 1 + elif (LA57_0 == IDENT) : + alt57 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 57, 0, self.input) + + raise nvae + + if alt57 == 1: + # Java.g:461:9: simpleType + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_simpleType_in_type6828) + simpleType166 = self.simpleType() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, simpleType166.tree) + + + elif alt57 == 2: + # Java.g:462:9: objectType + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_objectType_in_type6838) + objectType167 = self.objectType() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, objectType167.tree) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 41, type_StartIndex, success) + + pass + return retval + + # $ANTLR end "type" + + class simpleType_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.simpleType_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "simpleType" + # Java.g:465:1: simpleType : primitiveType ( arrayDeclaratorList )? -> ^( TYPE primitiveType ( arrayDeclaratorList )? ) ; + def simpleType(self, ): + + retval = self.simpleType_return() + retval.start = self.input.LT(1) + simpleType_StartIndex = self.input.index() + root_0 = None + + primitiveType168 = None + + arrayDeclaratorList169 = None + + + stream_arrayDeclaratorList = RewriteRuleSubtreeStream(self._adaptor, "rule arrayDeclaratorList") + stream_primitiveType = RewriteRuleSubtreeStream(self._adaptor, "rule primitiveType") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 42): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:466:5: ( primitiveType ( arrayDeclaratorList )? -> ^( TYPE primitiveType ( arrayDeclaratorList )? ) ) + # Java.g:466:9: primitiveType ( arrayDeclaratorList )? + pass + self._state.following.append(self.FOLLOW_primitiveType_in_simpleType6858) + primitiveType168 = self.primitiveType() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_primitiveType.add(primitiveType168.tree) + # Java.g:466:23: ( arrayDeclaratorList )? + alt58 = 2 + LA58_0 = self.input.LA(1) + + if (LA58_0 == LBRACK) : + LA58_1 = self.input.LA(2) + + if (LA58_1 == RBRACK) : + LA58_3 = self.input.LA(3) + + if (self.synpred76_Java()) : + alt58 = 1 + if alt58 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_simpleType6860) + arrayDeclaratorList169 = self.arrayDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arrayDeclaratorList.add(arrayDeclaratorList169.tree) + + + + + # AST Rewrite + # elements: primitiveType, arrayDeclaratorList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 467:9: -> ^( TYPE primitiveType ( arrayDeclaratorList )? ) + # Java.g:467:13: ^( TYPE primitiveType ( arrayDeclaratorList )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(TYPE, "TYPE"), root_1) + + self._adaptor.addChild(root_1, stream_primitiveType.nextTree()) + # Java.g:467:34: ( arrayDeclaratorList )? + if stream_arrayDeclaratorList.hasNext(): + self._adaptor.addChild(root_1, stream_arrayDeclaratorList.nextTree()) + + + stream_arrayDeclaratorList.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 42, simpleType_StartIndex, success) + + pass + return retval + + # $ANTLR end "simpleType" + + class objectType_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.objectType_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "objectType" + # Java.g:470:1: objectType : qualifiedTypeIdent ( arrayDeclaratorList )? -> ^( TYPE qualifiedTypeIdent ( arrayDeclaratorList )? ) ; + def objectType(self, ): + + retval = self.objectType_return() + retval.start = self.input.LT(1) + objectType_StartIndex = self.input.index() + root_0 = None + + qualifiedTypeIdent170 = None + + arrayDeclaratorList171 = None + + + stream_arrayDeclaratorList = RewriteRuleSubtreeStream(self._adaptor, "rule arrayDeclaratorList") + stream_qualifiedTypeIdent = RewriteRuleSubtreeStream(self._adaptor, "rule qualifiedTypeIdent") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 43): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:471:5: ( qualifiedTypeIdent ( arrayDeclaratorList )? -> ^( TYPE qualifiedTypeIdent ( arrayDeclaratorList )? ) ) + # Java.g:471:9: qualifiedTypeIdent ( arrayDeclaratorList )? + pass + self._state.following.append(self.FOLLOW_qualifiedTypeIdent_in_objectType6901) + qualifiedTypeIdent170 = self.qualifiedTypeIdent() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_qualifiedTypeIdent.add(qualifiedTypeIdent170.tree) + # Java.g:471:28: ( arrayDeclaratorList )? + alt59 = 2 + LA59_0 = self.input.LA(1) + + if (LA59_0 == LBRACK) : + LA59_1 = self.input.LA(2) + + if (self.synpred77_Java()) : + alt59 = 1 + if alt59 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_objectType6903) + arrayDeclaratorList171 = self.arrayDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arrayDeclaratorList.add(arrayDeclaratorList171.tree) + + + + + # AST Rewrite + # elements: arrayDeclaratorList, qualifiedTypeIdent + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 472:9: -> ^( TYPE qualifiedTypeIdent ( arrayDeclaratorList )? ) + # Java.g:472:13: ^( TYPE qualifiedTypeIdent ( arrayDeclaratorList )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(TYPE, "TYPE"), root_1) + + self._adaptor.addChild(root_1, stream_qualifiedTypeIdent.nextTree()) + # Java.g:472:39: ( arrayDeclaratorList )? + if stream_arrayDeclaratorList.hasNext(): + self._adaptor.addChild(root_1, stream_arrayDeclaratorList.nextTree()) + + + stream_arrayDeclaratorList.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 43, objectType_StartIndex, success) + + pass + return retval + + # $ANTLR end "objectType" + + class objectTypeSimplified_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.objectTypeSimplified_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "objectTypeSimplified" + # Java.g:475:1: objectTypeSimplified : qualifiedTypeIdentSimplified ( arrayDeclaratorList )? -> ^( TYPE qualifiedTypeIdentSimplified ( arrayDeclaratorList )? ) ; + def objectTypeSimplified(self, ): + + retval = self.objectTypeSimplified_return() + retval.start = self.input.LT(1) + objectTypeSimplified_StartIndex = self.input.index() + root_0 = None + + qualifiedTypeIdentSimplified172 = None + + arrayDeclaratorList173 = None + + + stream_arrayDeclaratorList = RewriteRuleSubtreeStream(self._adaptor, "rule arrayDeclaratorList") + stream_qualifiedTypeIdentSimplified = RewriteRuleSubtreeStream(self._adaptor, "rule qualifiedTypeIdentSimplified") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 44): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:476:5: ( qualifiedTypeIdentSimplified ( arrayDeclaratorList )? -> ^( TYPE qualifiedTypeIdentSimplified ( arrayDeclaratorList )? ) ) + # Java.g:476:9: qualifiedTypeIdentSimplified ( arrayDeclaratorList )? + pass + self._state.following.append(self.FOLLOW_qualifiedTypeIdentSimplified_in_objectTypeSimplified6943) + qualifiedTypeIdentSimplified172 = self.qualifiedTypeIdentSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_qualifiedTypeIdentSimplified.add(qualifiedTypeIdentSimplified172.tree) + # Java.g:476:38: ( arrayDeclaratorList )? + alt60 = 2 + LA60_0 = self.input.LA(1) + + if (LA60_0 == LBRACK) : + alt60 = 1 + if alt60 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_objectTypeSimplified6945) + arrayDeclaratorList173 = self.arrayDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arrayDeclaratorList.add(arrayDeclaratorList173.tree) + + + + + # AST Rewrite + # elements: qualifiedTypeIdentSimplified, arrayDeclaratorList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 477:9: -> ^( TYPE qualifiedTypeIdentSimplified ( arrayDeclaratorList )? ) + # Java.g:477:13: ^( TYPE qualifiedTypeIdentSimplified ( arrayDeclaratorList )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(TYPE, "TYPE"), root_1) + + self._adaptor.addChild(root_1, stream_qualifiedTypeIdentSimplified.nextTree()) + # Java.g:477:49: ( arrayDeclaratorList )? + if stream_arrayDeclaratorList.hasNext(): + self._adaptor.addChild(root_1, stream_arrayDeclaratorList.nextTree()) + + + stream_arrayDeclaratorList.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 44, objectTypeSimplified_StartIndex, success) + + pass + return retval + + # $ANTLR end "objectTypeSimplified" + + class qualifiedTypeIdent_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.qualifiedTypeIdent_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "qualifiedTypeIdent" + # Java.g:480:1: qualifiedTypeIdent : typeIdent ( DOT typeIdent )* -> ^( QUALIFIED_TYPE_IDENT ( typeIdent )+ ) ; + def qualifiedTypeIdent(self, ): + + retval = self.qualifiedTypeIdent_return() + retval.start = self.input.LT(1) + qualifiedTypeIdent_StartIndex = self.input.index() + root_0 = None + + DOT175 = None + typeIdent174 = None + + typeIdent176 = None + + + DOT175_tree = None + stream_DOT = RewriteRuleTokenStream(self._adaptor, "token DOT") + stream_typeIdent = RewriteRuleSubtreeStream(self._adaptor, "rule typeIdent") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 45): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:481:5: ( typeIdent ( DOT typeIdent )* -> ^( QUALIFIED_TYPE_IDENT ( typeIdent )+ ) ) + # Java.g:481:9: typeIdent ( DOT typeIdent )* + pass + self._state.following.append(self.FOLLOW_typeIdent_in_qualifiedTypeIdent6985) + typeIdent174 = self.typeIdent() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_typeIdent.add(typeIdent174.tree) + # Java.g:481:19: ( DOT typeIdent )* + while True: #loop61 + alt61 = 2 + LA61_0 = self.input.LA(1) + + if (LA61_0 == DOT) : + LA61_2 = self.input.LA(2) + + if (self.synpred79_Java()) : + alt61 = 1 + + + + + if alt61 == 1: + # Java.g:481:20: DOT typeIdent + pass + DOT175=self.match(self.input, DOT, self.FOLLOW_DOT_in_qualifiedTypeIdent6988) + if self._state.backtracking == 0: + stream_DOT.add(DOT175) + self._state.following.append(self.FOLLOW_typeIdent_in_qualifiedTypeIdent6990) + typeIdent176 = self.typeIdent() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_typeIdent.add(typeIdent176.tree) + + + else: + break #loop61 + + # AST Rewrite + # elements: typeIdent + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 482:9: -> ^( QUALIFIED_TYPE_IDENT ( typeIdent )+ ) + # Java.g:482:13: ^( QUALIFIED_TYPE_IDENT ( typeIdent )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(QUALIFIED_TYPE_IDENT, "QUALIFIED_TYPE_IDENT"), root_1) + + # Java.g:482:36: ( typeIdent )+ + if not (stream_typeIdent.hasNext()): + raise RewriteEarlyExitException() + + while stream_typeIdent.hasNext(): + self._adaptor.addChild(root_1, stream_typeIdent.nextTree()) + + + stream_typeIdent.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 45, qualifiedTypeIdent_StartIndex, success) + + pass + return retval + + # $ANTLR end "qualifiedTypeIdent" + + class qualifiedTypeIdentSimplified_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.qualifiedTypeIdentSimplified_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "qualifiedTypeIdentSimplified" + # Java.g:485:1: qualifiedTypeIdentSimplified : typeIdentSimplified ( DOT typeIdentSimplified )* -> ^( QUALIFIED_TYPE_IDENT ( typeIdentSimplified )+ ) ; + def qualifiedTypeIdentSimplified(self, ): + + retval = self.qualifiedTypeIdentSimplified_return() + retval.start = self.input.LT(1) + qualifiedTypeIdentSimplified_StartIndex = self.input.index() + root_0 = None + + DOT178 = None + typeIdentSimplified177 = None + + typeIdentSimplified179 = None + + + DOT178_tree = None + stream_DOT = RewriteRuleTokenStream(self._adaptor, "token DOT") + stream_typeIdentSimplified = RewriteRuleSubtreeStream(self._adaptor, "rule typeIdentSimplified") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 46): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:486:5: ( typeIdentSimplified ( DOT typeIdentSimplified )* -> ^( QUALIFIED_TYPE_IDENT ( typeIdentSimplified )+ ) ) + # Java.g:486:9: typeIdentSimplified ( DOT typeIdentSimplified )* + pass + self._state.following.append(self.FOLLOW_typeIdentSimplified_in_qualifiedTypeIdentSimplified7029) + typeIdentSimplified177 = self.typeIdentSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_typeIdentSimplified.add(typeIdentSimplified177.tree) + # Java.g:486:29: ( DOT typeIdentSimplified )* + while True: #loop62 + alt62 = 2 + LA62_0 = self.input.LA(1) + + if (LA62_0 == DOT) : + alt62 = 1 + + + if alt62 == 1: + # Java.g:486:30: DOT typeIdentSimplified + pass + DOT178=self.match(self.input, DOT, self.FOLLOW_DOT_in_qualifiedTypeIdentSimplified7032) + if self._state.backtracking == 0: + stream_DOT.add(DOT178) + self._state.following.append(self.FOLLOW_typeIdentSimplified_in_qualifiedTypeIdentSimplified7034) + typeIdentSimplified179 = self.typeIdentSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_typeIdentSimplified.add(typeIdentSimplified179.tree) + + + else: + break #loop62 + + # AST Rewrite + # elements: typeIdentSimplified + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 487:9: -> ^( QUALIFIED_TYPE_IDENT ( typeIdentSimplified )+ ) + # Java.g:487:13: ^( QUALIFIED_TYPE_IDENT ( typeIdentSimplified )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(QUALIFIED_TYPE_IDENT, "QUALIFIED_TYPE_IDENT"), root_1) + + # Java.g:487:36: ( typeIdentSimplified )+ + if not (stream_typeIdentSimplified.hasNext()): + raise RewriteEarlyExitException() + + while stream_typeIdentSimplified.hasNext(): + self._adaptor.addChild(root_1, stream_typeIdentSimplified.nextTree()) + + + stream_typeIdentSimplified.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 46, qualifiedTypeIdentSimplified_StartIndex, success) + + pass + return retval + + # $ANTLR end "qualifiedTypeIdentSimplified" + + class typeIdent_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.typeIdent_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "typeIdent" + # Java.g:490:1: typeIdent : IDENT ( genericTypeArgumentList )? ; + def typeIdent(self, ): + + retval = self.typeIdent_return() + retval.start = self.input.LT(1) + typeIdent_StartIndex = self.input.index() + root_0 = None + + IDENT180 = None + genericTypeArgumentList181 = None + + + IDENT180_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 47): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:491:5: ( IDENT ( genericTypeArgumentList )? ) + # Java.g:491:9: IDENT ( genericTypeArgumentList )? + pass + root_0 = self._adaptor.nil() + + IDENT180=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_typeIdent7073) + if self._state.backtracking == 0: + + IDENT180_tree = self._adaptor.createWithPayload(IDENT180) + root_0 = self._adaptor.becomeRoot(IDENT180_tree, root_0) + + # Java.g:491:16: ( genericTypeArgumentList )? + alt63 = 2 + LA63_0 = self.input.LA(1) + + if (LA63_0 == LESS_THAN) : + alt63 = 1 + if alt63 == 1: + # Java.g:0:0: genericTypeArgumentList + pass + self._state.following.append(self.FOLLOW_genericTypeArgumentList_in_typeIdent7076) + genericTypeArgumentList181 = self.genericTypeArgumentList() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, genericTypeArgumentList181.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 47, typeIdent_StartIndex, success) + + pass + return retval + + # $ANTLR end "typeIdent" + + class typeIdentSimplified_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.typeIdentSimplified_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "typeIdentSimplified" + # Java.g:494:1: typeIdentSimplified : IDENT ( genericTypeArgumentListSimplified )? ; + def typeIdentSimplified(self, ): + + retval = self.typeIdentSimplified_return() + retval.start = self.input.LT(1) + typeIdentSimplified_StartIndex = self.input.index() + root_0 = None + + IDENT182 = None + genericTypeArgumentListSimplified183 = None + + + IDENT182_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 48): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:495:5: ( IDENT ( genericTypeArgumentListSimplified )? ) + # Java.g:495:9: IDENT ( genericTypeArgumentListSimplified )? + pass + root_0 = self._adaptor.nil() + + IDENT182=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_typeIdentSimplified7096) + if self._state.backtracking == 0: + + IDENT182_tree = self._adaptor.createWithPayload(IDENT182) + root_0 = self._adaptor.becomeRoot(IDENT182_tree, root_0) + + # Java.g:495:16: ( genericTypeArgumentListSimplified )? + alt64 = 2 + LA64_0 = self.input.LA(1) + + if (LA64_0 == LESS_THAN) : + alt64 = 1 + if alt64 == 1: + # Java.g:0:0: genericTypeArgumentListSimplified + pass + self._state.following.append(self.FOLLOW_genericTypeArgumentListSimplified_in_typeIdentSimplified7099) + genericTypeArgumentListSimplified183 = self.genericTypeArgumentListSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, genericTypeArgumentListSimplified183.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 48, typeIdentSimplified_StartIndex, success) + + pass + return retval + + # $ANTLR end "typeIdentSimplified" + + class primitiveType_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.primitiveType_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "primitiveType" + # Java.g:498:1: primitiveType : ( BOOLEAN | CHAR | BYTE | SHORT | INT | LONG | FLOAT | DOUBLE ); + def primitiveType(self, ): + + retval = self.primitiveType_return() + retval.start = self.input.LT(1) + primitiveType_StartIndex = self.input.index() + root_0 = None + + set184 = None + + set184_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 49): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:499:5: ( BOOLEAN | CHAR | BYTE | SHORT | INT | LONG | FLOAT | DOUBLE ) + # Java.g: + pass + root_0 = self._adaptor.nil() + + set184 = self.input.LT(1) + if self.input.LA(1) == BOOLEAN or self.input.LA(1) == BYTE or self.input.LA(1) == CHAR or self.input.LA(1) == DOUBLE or self.input.LA(1) == FLOAT or (INT <= self.input.LA(1) <= LONG) or self.input.LA(1) == SHORT: + self.input.consume() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, self._adaptor.createWithPayload(set184)) + self._state.errorRecovery = False + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + mse = MismatchedSetException(None, self.input) + raise mse + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 49, primitiveType_StartIndex, success) + + pass + return retval + + # $ANTLR end "primitiveType" + + class genericTypeArgumentList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.genericTypeArgumentList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "genericTypeArgumentList" + # Java.g:509:1: genericTypeArgumentList : LESS_THAN genericTypeArgument ( COMMA genericTypeArgument )* genericTypeListClosing -> ^( GENERIC_TYPE_ARG_LIST[$LESS_THAN, \"GENERIC_TYPE_ARG_LIST\"] ( genericTypeArgument )+ ) ; + def genericTypeArgumentList(self, ): + + retval = self.genericTypeArgumentList_return() + retval.start = self.input.LT(1) + genericTypeArgumentList_StartIndex = self.input.index() + root_0 = None + + LESS_THAN185 = None + COMMA187 = None + genericTypeArgument186 = None + + genericTypeArgument188 = None + + genericTypeListClosing189 = None + + + LESS_THAN185_tree = None + COMMA187_tree = None + stream_COMMA = RewriteRuleTokenStream(self._adaptor, "token COMMA") + stream_LESS_THAN = RewriteRuleTokenStream(self._adaptor, "token LESS_THAN") + stream_genericTypeArgument = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeArgument") + stream_genericTypeListClosing = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeListClosing") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 50): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:510:5: ( LESS_THAN genericTypeArgument ( COMMA genericTypeArgument )* genericTypeListClosing -> ^( GENERIC_TYPE_ARG_LIST[$LESS_THAN, \"GENERIC_TYPE_ARG_LIST\"] ( genericTypeArgument )+ ) ) + # Java.g:510:9: LESS_THAN genericTypeArgument ( COMMA genericTypeArgument )* genericTypeListClosing + pass + LESS_THAN185=self.match(self.input, LESS_THAN, self.FOLLOW_LESS_THAN_in_genericTypeArgumentList7208) + if self._state.backtracking == 0: + stream_LESS_THAN.add(LESS_THAN185) + self._state.following.append(self.FOLLOW_genericTypeArgument_in_genericTypeArgumentList7210) + genericTypeArgument186 = self.genericTypeArgument() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeArgument.add(genericTypeArgument186.tree) + # Java.g:510:39: ( COMMA genericTypeArgument )* + while True: #loop65 + alt65 = 2 + LA65_0 = self.input.LA(1) + + if (LA65_0 == COMMA) : + LA65_2 = self.input.LA(2) + + if (self.synpred90_Java()) : + alt65 = 1 + + + + + if alt65 == 1: + # Java.g:510:40: COMMA genericTypeArgument + pass + COMMA187=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_genericTypeArgumentList7213) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA187) + self._state.following.append(self.FOLLOW_genericTypeArgument_in_genericTypeArgumentList7215) + genericTypeArgument188 = self.genericTypeArgument() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeArgument.add(genericTypeArgument188.tree) + + + else: + break #loop65 + self._state.following.append(self.FOLLOW_genericTypeListClosing_in_genericTypeArgumentList7219) + genericTypeListClosing189 = self.genericTypeListClosing() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeListClosing.add(genericTypeListClosing189.tree) + + # AST Rewrite + # elements: genericTypeArgument + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 511:9: -> ^( GENERIC_TYPE_ARG_LIST[$LESS_THAN, \"GENERIC_TYPE_ARG_LIST\"] ( genericTypeArgument )+ ) + # Java.g:511:13: ^( GENERIC_TYPE_ARG_LIST[$LESS_THAN, \"GENERIC_TYPE_ARG_LIST\"] ( genericTypeArgument )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(GENERIC_TYPE_ARG_LIST, LESS_THAN185, "GENERIC_TYPE_ARG_LIST"), root_1) + + # Java.g:511:74: ( genericTypeArgument )+ + if not (stream_genericTypeArgument.hasNext()): + raise RewriteEarlyExitException() + + while stream_genericTypeArgument.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeArgument.nextTree()) + + + stream_genericTypeArgument.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 50, genericTypeArgumentList_StartIndex, success) + + pass + return retval + + # $ANTLR end "genericTypeArgumentList" + + class genericTypeArgument_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.genericTypeArgument_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "genericTypeArgument" + # Java.g:514:1: genericTypeArgument : ( type | QUESTION ( genericWildcardBoundType )? -> ^( QUESTION ( genericWildcardBoundType )? ) ); + def genericTypeArgument(self, ): + + retval = self.genericTypeArgument_return() + retval.start = self.input.LT(1) + genericTypeArgument_StartIndex = self.input.index() + root_0 = None + + QUESTION191 = None + type190 = None + + genericWildcardBoundType192 = None + + + QUESTION191_tree = None + stream_QUESTION = RewriteRuleTokenStream(self._adaptor, "token QUESTION") + stream_genericWildcardBoundType = RewriteRuleSubtreeStream(self._adaptor, "rule genericWildcardBoundType") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 51): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:515:5: ( type | QUESTION ( genericWildcardBoundType )? -> ^( QUESTION ( genericWildcardBoundType )? ) ) + alt67 = 2 + LA67_0 = self.input.LA(1) + + if (LA67_0 == BOOLEAN or LA67_0 == BYTE or LA67_0 == CHAR or LA67_0 == DOUBLE or LA67_0 == FLOAT or (INT <= LA67_0 <= LONG) or LA67_0 == SHORT or LA67_0 == IDENT) : + alt67 = 1 + elif (LA67_0 == QUESTION) : + alt67 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 67, 0, self.input) + + raise nvae + + if alt67 == 1: + # Java.g:515:9: type + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_type_in_genericTypeArgument7257) + type190 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, type190.tree) + + + elif alt67 == 2: + # Java.g:516:9: QUESTION ( genericWildcardBoundType )? + pass + QUESTION191=self.match(self.input, QUESTION, self.FOLLOW_QUESTION_in_genericTypeArgument7267) + if self._state.backtracking == 0: + stream_QUESTION.add(QUESTION191) + # Java.g:516:18: ( genericWildcardBoundType )? + alt66 = 2 + LA66_0 = self.input.LA(1) + + if (LA66_0 == EXTENDS) : + LA66_1 = self.input.LA(2) + + if (LA66_1 == BOOLEAN or LA66_1 == BYTE or LA66_1 == CHAR or LA66_1 == DOUBLE or LA66_1 == FLOAT or (INT <= LA66_1 <= LONG) or LA66_1 == SHORT) : + LA66_4 = self.input.LA(3) + + if (self.synpred92_Java()) : + alt66 = 1 + elif (LA66_1 == IDENT) : + LA66_5 = self.input.LA(3) + + if (self.synpred92_Java()) : + alt66 = 1 + elif (LA66_0 == SUPER) : + LA66_3 = self.input.LA(2) + + if (LA66_3 == BOOLEAN or LA66_3 == BYTE or LA66_3 == CHAR or LA66_3 == DOUBLE or LA66_3 == FLOAT or (INT <= LA66_3 <= LONG) or LA66_3 == SHORT or LA66_3 == IDENT) : + alt66 = 1 + if alt66 == 1: + # Java.g:0:0: genericWildcardBoundType + pass + self._state.following.append(self.FOLLOW_genericWildcardBoundType_in_genericTypeArgument7269) + genericWildcardBoundType192 = self.genericWildcardBoundType() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericWildcardBoundType.add(genericWildcardBoundType192.tree) + + + + + # AST Rewrite + # elements: QUESTION, genericWildcardBoundType + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 517:9: -> ^( QUESTION ( genericWildcardBoundType )? ) + # Java.g:517:13: ^( QUESTION ( genericWildcardBoundType )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_QUESTION.nextNode(), root_1) + + # Java.g:517:24: ( genericWildcardBoundType )? + if stream_genericWildcardBoundType.hasNext(): + self._adaptor.addChild(root_1, stream_genericWildcardBoundType.nextTree()) + + + stream_genericWildcardBoundType.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 51, genericTypeArgument_StartIndex, success) + + pass + return retval + + # $ANTLR end "genericTypeArgument" + + class genericWildcardBoundType_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.genericWildcardBoundType_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "genericWildcardBoundType" + # Java.g:520:1: genericWildcardBoundType : ( EXTENDS | SUPER ) type ; + def genericWildcardBoundType(self, ): + + retval = self.genericWildcardBoundType_return() + retval.start = self.input.LT(1) + genericWildcardBoundType_StartIndex = self.input.index() + root_0 = None + + set193 = None + type194 = None + + + set193_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 52): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:521:5: ( ( EXTENDS | SUPER ) type ) + # Java.g:521:9: ( EXTENDS | SUPER ) type + pass + root_0 = self._adaptor.nil() + + set193 = self.input.LT(1) + set193 = self.input.LT(1) + if self.input.LA(1) == EXTENDS or self.input.LA(1) == SUPER: + self.input.consume() + if self._state.backtracking == 0: + root_0 = self._adaptor.becomeRoot(self._adaptor.createWithPayload(set193), root_0) + self._state.errorRecovery = False + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + mse = MismatchedSetException(None, self.input) + raise mse + + + self._state.following.append(self.FOLLOW_type_in_genericWildcardBoundType7316) + type194 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, type194.tree) + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 52, genericWildcardBoundType_StartIndex, success) + + pass + return retval + + # $ANTLR end "genericWildcardBoundType" + + class genericTypeArgumentListSimplified_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.genericTypeArgumentListSimplified_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "genericTypeArgumentListSimplified" + # Java.g:524:1: genericTypeArgumentListSimplified : LESS_THAN genericTypeArgumentSimplified ( COMMA genericTypeArgumentSimplified )* genericTypeListClosing -> ^( GENERIC_TYPE_ARG_LIST[$LESS_THAN, \"GENERIC_TYPE_ARG_LIST\"] ( genericTypeArgumentSimplified )+ ) ; + def genericTypeArgumentListSimplified(self, ): + + retval = self.genericTypeArgumentListSimplified_return() + retval.start = self.input.LT(1) + genericTypeArgumentListSimplified_StartIndex = self.input.index() + root_0 = None + + LESS_THAN195 = None + COMMA197 = None + genericTypeArgumentSimplified196 = None + + genericTypeArgumentSimplified198 = None + + genericTypeListClosing199 = None + + + LESS_THAN195_tree = None + COMMA197_tree = None + stream_COMMA = RewriteRuleTokenStream(self._adaptor, "token COMMA") + stream_LESS_THAN = RewriteRuleTokenStream(self._adaptor, "token LESS_THAN") + stream_genericTypeArgumentSimplified = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeArgumentSimplified") + stream_genericTypeListClosing = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeListClosing") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 53): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:525:5: ( LESS_THAN genericTypeArgumentSimplified ( COMMA genericTypeArgumentSimplified )* genericTypeListClosing -> ^( GENERIC_TYPE_ARG_LIST[$LESS_THAN, \"GENERIC_TYPE_ARG_LIST\"] ( genericTypeArgumentSimplified )+ ) ) + # Java.g:525:9: LESS_THAN genericTypeArgumentSimplified ( COMMA genericTypeArgumentSimplified )* genericTypeListClosing + pass + LESS_THAN195=self.match(self.input, LESS_THAN, self.FOLLOW_LESS_THAN_in_genericTypeArgumentListSimplified7335) + if self._state.backtracking == 0: + stream_LESS_THAN.add(LESS_THAN195) + self._state.following.append(self.FOLLOW_genericTypeArgumentSimplified_in_genericTypeArgumentListSimplified7337) + genericTypeArgumentSimplified196 = self.genericTypeArgumentSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeArgumentSimplified.add(genericTypeArgumentSimplified196.tree) + # Java.g:525:49: ( COMMA genericTypeArgumentSimplified )* + while True: #loop68 + alt68 = 2 + LA68_0 = self.input.LA(1) + + if (LA68_0 == COMMA) : + alt68 = 1 + + + if alt68 == 1: + # Java.g:525:50: COMMA genericTypeArgumentSimplified + pass + COMMA197=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_genericTypeArgumentListSimplified7340) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA197) + self._state.following.append(self.FOLLOW_genericTypeArgumentSimplified_in_genericTypeArgumentListSimplified7342) + genericTypeArgumentSimplified198 = self.genericTypeArgumentSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeArgumentSimplified.add(genericTypeArgumentSimplified198.tree) + + + else: + break #loop68 + self._state.following.append(self.FOLLOW_genericTypeListClosing_in_genericTypeArgumentListSimplified7346) + genericTypeListClosing199 = self.genericTypeListClosing() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeListClosing.add(genericTypeListClosing199.tree) + + # AST Rewrite + # elements: genericTypeArgumentSimplified + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 526:9: -> ^( GENERIC_TYPE_ARG_LIST[$LESS_THAN, \"GENERIC_TYPE_ARG_LIST\"] ( genericTypeArgumentSimplified )+ ) + # Java.g:526:13: ^( GENERIC_TYPE_ARG_LIST[$LESS_THAN, \"GENERIC_TYPE_ARG_LIST\"] ( genericTypeArgumentSimplified )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(GENERIC_TYPE_ARG_LIST, LESS_THAN195, "GENERIC_TYPE_ARG_LIST"), root_1) + + # Java.g:526:74: ( genericTypeArgumentSimplified )+ + if not (stream_genericTypeArgumentSimplified.hasNext()): + raise RewriteEarlyExitException() + + while stream_genericTypeArgumentSimplified.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeArgumentSimplified.nextTree()) + + + stream_genericTypeArgumentSimplified.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 53, genericTypeArgumentListSimplified_StartIndex, success) + + pass + return retval + + # $ANTLR end "genericTypeArgumentListSimplified" + + class genericTypeArgumentSimplified_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.genericTypeArgumentSimplified_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "genericTypeArgumentSimplified" + # Java.g:529:1: genericTypeArgumentSimplified : ( type | QUESTION ); + def genericTypeArgumentSimplified(self, ): + + retval = self.genericTypeArgumentSimplified_return() + retval.start = self.input.LT(1) + genericTypeArgumentSimplified_StartIndex = self.input.index() + root_0 = None + + QUESTION201 = None + type200 = None + + + QUESTION201_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 54): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:530:5: ( type | QUESTION ) + alt69 = 2 + LA69_0 = self.input.LA(1) + + if (LA69_0 == BOOLEAN or LA69_0 == BYTE or LA69_0 == CHAR or LA69_0 == DOUBLE or LA69_0 == FLOAT or (INT <= LA69_0 <= LONG) or LA69_0 == SHORT or LA69_0 == IDENT) : + alt69 = 1 + elif (LA69_0 == QUESTION) : + alt69 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 69, 0, self.input) + + raise nvae + + if alt69 == 1: + # Java.g:530:9: type + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_type_in_genericTypeArgumentSimplified7384) + type200 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, type200.tree) + + + elif alt69 == 2: + # Java.g:531:9: QUESTION + pass + root_0 = self._adaptor.nil() + + QUESTION201=self.match(self.input, QUESTION, self.FOLLOW_QUESTION_in_genericTypeArgumentSimplified7394) + if self._state.backtracking == 0: + + QUESTION201_tree = self._adaptor.createWithPayload(QUESTION201) + self._adaptor.addChild(root_0, QUESTION201_tree) + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 54, genericTypeArgumentSimplified_StartIndex, success) + + pass + return retval + + # $ANTLR end "genericTypeArgumentSimplified" + + class qualifiedIdentList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.qualifiedIdentList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "qualifiedIdentList" + # Java.g:534:1: qualifiedIdentList : qualifiedIdentifier ( COMMA qualifiedIdentifier )* ; + def qualifiedIdentList(self, ): + + retval = self.qualifiedIdentList_return() + retval.start = self.input.LT(1) + qualifiedIdentList_StartIndex = self.input.index() + root_0 = None + + COMMA203 = None + qualifiedIdentifier202 = None + + qualifiedIdentifier204 = None + + + COMMA203_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 55): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:535:5: ( qualifiedIdentifier ( COMMA qualifiedIdentifier )* ) + # Java.g:535:9: qualifiedIdentifier ( COMMA qualifiedIdentifier )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_qualifiedIdentifier_in_qualifiedIdentList7413) + qualifiedIdentifier202 = self.qualifiedIdentifier() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, qualifiedIdentifier202.tree) + # Java.g:535:29: ( COMMA qualifiedIdentifier )* + while True: #loop70 + alt70 = 2 + LA70_0 = self.input.LA(1) + + if (LA70_0 == COMMA) : + alt70 = 1 + + + if alt70 == 1: + # Java.g:535:30: COMMA qualifiedIdentifier + pass + COMMA203=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_qualifiedIdentList7416) + self._state.following.append(self.FOLLOW_qualifiedIdentifier_in_qualifiedIdentList7419) + qualifiedIdentifier204 = self.qualifiedIdentifier() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, qualifiedIdentifier204.tree) + + + else: + break #loop70 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 55, qualifiedIdentList_StartIndex, success) + + pass + return retval + + # $ANTLR end "qualifiedIdentList" + + class formalParameterList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.formalParameterList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "formalParameterList" + # Java.g:538:1: formalParameterList : LPAREN ( formalParameterStandardDecl ( COMMA formalParameterStandardDecl )* ( COMMA formalParameterVarArgDecl )? -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ( formalParameterStandardDecl )+ ( formalParameterVarArgDecl )? ) | formalParameterVarArgDecl -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] formalParameterVarArgDecl ) | -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ) ) RPAREN ; + def formalParameterList(self, ): + + retval = self.formalParameterList_return() + retval.start = self.input.LT(1) + formalParameterList_StartIndex = self.input.index() + root_0 = None + + LPAREN205 = None + COMMA207 = None + COMMA209 = None + RPAREN212 = None + formalParameterStandardDecl206 = None + + formalParameterStandardDecl208 = None + + formalParameterVarArgDecl210 = None + + formalParameterVarArgDecl211 = None + + + LPAREN205_tree = None + COMMA207_tree = None + COMMA209_tree = None + RPAREN212_tree = None + stream_RPAREN = RewriteRuleTokenStream(self._adaptor, "token RPAREN") + stream_COMMA = RewriteRuleTokenStream(self._adaptor, "token COMMA") + stream_LPAREN = RewriteRuleTokenStream(self._adaptor, "token LPAREN") + stream_formalParameterVarArgDecl = RewriteRuleSubtreeStream(self._adaptor, "rule formalParameterVarArgDecl") + stream_formalParameterStandardDecl = RewriteRuleSubtreeStream(self._adaptor, "rule formalParameterStandardDecl") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 56): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:539:5: ( LPAREN ( formalParameterStandardDecl ( COMMA formalParameterStandardDecl )* ( COMMA formalParameterVarArgDecl )? -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ( formalParameterStandardDecl )+ ( formalParameterVarArgDecl )? ) | formalParameterVarArgDecl -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] formalParameterVarArgDecl ) | -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ) ) RPAREN ) + # Java.g:539:9: LPAREN ( formalParameterStandardDecl ( COMMA formalParameterStandardDecl )* ( COMMA formalParameterVarArgDecl )? -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ( formalParameterStandardDecl )+ ( formalParameterVarArgDecl )? ) | formalParameterVarArgDecl -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] formalParameterVarArgDecl ) | -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ) ) RPAREN + pass + LPAREN205=self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_formalParameterList7440) + if self._state.backtracking == 0: + stream_LPAREN.add(LPAREN205) + # Java.g:540:9: ( formalParameterStandardDecl ( COMMA formalParameterStandardDecl )* ( COMMA formalParameterVarArgDecl )? -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ( formalParameterStandardDecl )+ ( formalParameterVarArgDecl )? ) | formalParameterVarArgDecl -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] formalParameterVarArgDecl ) | -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ) ) + alt73 = 3 + LA73 = self.input.LA(1) + if LA73 == FINAL: + LA73_1 = self.input.LA(2) + + if (self.synpred99_Java()) : + alt73 = 1 + elif (self.synpred100_Java()) : + alt73 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 73, 1, self.input) + + raise nvae + + elif LA73 == AT: + LA73_2 = self.input.LA(2) + + if (self.synpred99_Java()) : + alt73 = 1 + elif (self.synpred100_Java()) : + alt73 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 73, 2, self.input) + + raise nvae + + elif LA73 == BOOLEAN or LA73 == BYTE or LA73 == CHAR or LA73 == DOUBLE or LA73 == FLOAT or LA73 == INT or LA73 == LONG or LA73 == SHORT: + LA73_3 = self.input.LA(2) + + if (self.synpred99_Java()) : + alt73 = 1 + elif (self.synpred100_Java()) : + alt73 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 73, 3, self.input) + + raise nvae + + elif LA73 == IDENT: + LA73_4 = self.input.LA(2) + + if (self.synpred99_Java()) : + alt73 = 1 + elif (self.synpred100_Java()) : + alt73 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 73, 4, self.input) + + raise nvae + + elif LA73 == RPAREN: + alt73 = 3 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 73, 0, self.input) + + raise nvae + + if alt73 == 1: + # Java.g:541:13: formalParameterStandardDecl ( COMMA formalParameterStandardDecl )* ( COMMA formalParameterVarArgDecl )? + pass + self._state.following.append(self.FOLLOW_formalParameterStandardDecl_in_formalParameterList7467) + formalParameterStandardDecl206 = self.formalParameterStandardDecl() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_formalParameterStandardDecl.add(formalParameterStandardDecl206.tree) + # Java.g:541:41: ( COMMA formalParameterStandardDecl )* + while True: #loop71 + alt71 = 2 + LA71_0 = self.input.LA(1) + + if (LA71_0 == COMMA) : + LA71_1 = self.input.LA(2) + + if (self.synpred97_Java()) : + alt71 = 1 + + + + + if alt71 == 1: + # Java.g:541:42: COMMA formalParameterStandardDecl + pass + COMMA207=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_formalParameterList7470) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA207) + self._state.following.append(self.FOLLOW_formalParameterStandardDecl_in_formalParameterList7472) + formalParameterStandardDecl208 = self.formalParameterStandardDecl() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_formalParameterStandardDecl.add(formalParameterStandardDecl208.tree) + + + else: + break #loop71 + # Java.g:541:78: ( COMMA formalParameterVarArgDecl )? + alt72 = 2 + LA72_0 = self.input.LA(1) + + if (LA72_0 == COMMA) : + alt72 = 1 + if alt72 == 1: + # Java.g:541:79: COMMA formalParameterVarArgDecl + pass + COMMA209=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_formalParameterList7477) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA209) + self._state.following.append(self.FOLLOW_formalParameterVarArgDecl_in_formalParameterList7479) + formalParameterVarArgDecl210 = self.formalParameterVarArgDecl() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_formalParameterVarArgDecl.add(formalParameterVarArgDecl210.tree) + + + + + # AST Rewrite + # elements: formalParameterVarArgDecl, formalParameterStandardDecl + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 542:13: -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ( formalParameterStandardDecl )+ ( formalParameterVarArgDecl )? ) + # Java.g:542:17: ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ( formalParameterStandardDecl )+ ( formalParameterVarArgDecl )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(FORMAL_PARAM_LIST, LPAREN205, "FORMAL_PARAM_LIST"), root_1) + + # Java.g:542:67: ( formalParameterStandardDecl )+ + if not (stream_formalParameterStandardDecl.hasNext()): + raise RewriteEarlyExitException() + + while stream_formalParameterStandardDecl.hasNext(): + self._adaptor.addChild(root_1, stream_formalParameterStandardDecl.nextTree()) + + + stream_formalParameterStandardDecl.reset() + # Java.g:542:96: ( formalParameterVarArgDecl )? + if stream_formalParameterVarArgDecl.hasNext(): + self._adaptor.addChild(root_1, stream_formalParameterVarArgDecl.nextTree()) + + + stream_formalParameterVarArgDecl.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt73 == 2: + # Java.g:544:13: formalParameterVarArgDecl + pass + self._state.following.append(self.FOLLOW_formalParameterVarArgDecl_in_formalParameterList7534) + formalParameterVarArgDecl211 = self.formalParameterVarArgDecl() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_formalParameterVarArgDecl.add(formalParameterVarArgDecl211.tree) + + # AST Rewrite + # elements: formalParameterVarArgDecl + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 545:13: -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] formalParameterVarArgDecl ) + # Java.g:545:17: ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] formalParameterVarArgDecl ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(FORMAL_PARAM_LIST, LPAREN205, "FORMAL_PARAM_LIST"), root_1) + + self._adaptor.addChild(root_1, stream_formalParameterVarArgDecl.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt73 == 3: + # Java.g:547:13: + pass + # AST Rewrite + # elements: + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 547:13: -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ) + # Java.g:547:17: ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(FORMAL_PARAM_LIST, LPAREN205, "FORMAL_PARAM_LIST"), root_1) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + RPAREN212=self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_formalParameterList7609) + if self._state.backtracking == 0: + stream_RPAREN.add(RPAREN212) + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 56, formalParameterList_StartIndex, success) + + pass + return retval + + # $ANTLR end "formalParameterList" + + class formalParameterStandardDecl_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.formalParameterStandardDecl_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "formalParameterStandardDecl" + # Java.g:552:1: formalParameterStandardDecl : localModifierList type variableDeclaratorId -> ^( FORMAL_PARAM_STD_DECL localModifierList type variableDeclaratorId ) ; + def formalParameterStandardDecl(self, ): + + retval = self.formalParameterStandardDecl_return() + retval.start = self.input.LT(1) + formalParameterStandardDecl_StartIndex = self.input.index() + root_0 = None + + localModifierList213 = None + + type214 = None + + variableDeclaratorId215 = None + + + stream_variableDeclaratorId = RewriteRuleSubtreeStream(self._adaptor, "rule variableDeclaratorId") + stream_localModifierList = RewriteRuleSubtreeStream(self._adaptor, "rule localModifierList") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 57): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:553:5: ( localModifierList type variableDeclaratorId -> ^( FORMAL_PARAM_STD_DECL localModifierList type variableDeclaratorId ) ) + # Java.g:553:9: localModifierList type variableDeclaratorId + pass + self._state.following.append(self.FOLLOW_localModifierList_in_formalParameterStandardDecl7628) + localModifierList213 = self.localModifierList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_localModifierList.add(localModifierList213.tree) + self._state.following.append(self.FOLLOW_type_in_formalParameterStandardDecl7630) + type214 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type214.tree) + self._state.following.append(self.FOLLOW_variableDeclaratorId_in_formalParameterStandardDecl7632) + variableDeclaratorId215 = self.variableDeclaratorId() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_variableDeclaratorId.add(variableDeclaratorId215.tree) + + # AST Rewrite + # elements: localModifierList, type, variableDeclaratorId + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 554:9: -> ^( FORMAL_PARAM_STD_DECL localModifierList type variableDeclaratorId ) + # Java.g:554:13: ^( FORMAL_PARAM_STD_DECL localModifierList type variableDeclaratorId ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(FORMAL_PARAM_STD_DECL, "FORMAL_PARAM_STD_DECL"), root_1) + + self._adaptor.addChild(root_1, stream_localModifierList.nextTree()) + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_variableDeclaratorId.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 57, formalParameterStandardDecl_StartIndex, success) + + pass + return retval + + # $ANTLR end "formalParameterStandardDecl" + + class formalParameterVarArgDecl_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.formalParameterVarArgDecl_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "formalParameterVarArgDecl" + # Java.g:557:1: formalParameterVarArgDecl : localModifierList type ELLIPSIS variableDeclaratorId -> ^( FORMAL_PARAM_VARARG_DECL localModifierList type variableDeclaratorId ) ; + def formalParameterVarArgDecl(self, ): + + retval = self.formalParameterVarArgDecl_return() + retval.start = self.input.LT(1) + formalParameterVarArgDecl_StartIndex = self.input.index() + root_0 = None + + ELLIPSIS218 = None + localModifierList216 = None + + type217 = None + + variableDeclaratorId219 = None + + + ELLIPSIS218_tree = None + stream_ELLIPSIS = RewriteRuleTokenStream(self._adaptor, "token ELLIPSIS") + stream_variableDeclaratorId = RewriteRuleSubtreeStream(self._adaptor, "rule variableDeclaratorId") + stream_localModifierList = RewriteRuleSubtreeStream(self._adaptor, "rule localModifierList") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 58): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:558:5: ( localModifierList type ELLIPSIS variableDeclaratorId -> ^( FORMAL_PARAM_VARARG_DECL localModifierList type variableDeclaratorId ) ) + # Java.g:558:9: localModifierList type ELLIPSIS variableDeclaratorId + pass + self._state.following.append(self.FOLLOW_localModifierList_in_formalParameterVarArgDecl7672) + localModifierList216 = self.localModifierList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_localModifierList.add(localModifierList216.tree) + self._state.following.append(self.FOLLOW_type_in_formalParameterVarArgDecl7674) + type217 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type217.tree) + ELLIPSIS218=self.match(self.input, ELLIPSIS, self.FOLLOW_ELLIPSIS_in_formalParameterVarArgDecl7676) + if self._state.backtracking == 0: + stream_ELLIPSIS.add(ELLIPSIS218) + self._state.following.append(self.FOLLOW_variableDeclaratorId_in_formalParameterVarArgDecl7678) + variableDeclaratorId219 = self.variableDeclaratorId() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_variableDeclaratorId.add(variableDeclaratorId219.tree) + + # AST Rewrite + # elements: variableDeclaratorId, localModifierList, type + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 559:9: -> ^( FORMAL_PARAM_VARARG_DECL localModifierList type variableDeclaratorId ) + # Java.g:559:13: ^( FORMAL_PARAM_VARARG_DECL localModifierList type variableDeclaratorId ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(FORMAL_PARAM_VARARG_DECL, "FORMAL_PARAM_VARARG_DECL"), root_1) + + self._adaptor.addChild(root_1, stream_localModifierList.nextTree()) + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_variableDeclaratorId.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 58, formalParameterVarArgDecl_StartIndex, success) + + pass + return retval + + # $ANTLR end "formalParameterVarArgDecl" + + class qualifiedIdentifier_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.qualifiedIdentifier_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "qualifiedIdentifier" + # Java.g:562:1: qualifiedIdentifier : ( IDENT -> IDENT ) ( DOT ident= IDENT -> ^( DOT $qualifiedIdentifier $ident) )* ; + def qualifiedIdentifier(self, ): + + retval = self.qualifiedIdentifier_return() + retval.start = self.input.LT(1) + qualifiedIdentifier_StartIndex = self.input.index() + root_0 = None + + ident = None + IDENT220 = None + DOT221 = None + + ident_tree = None + IDENT220_tree = None + DOT221_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_DOT = RewriteRuleTokenStream(self._adaptor, "token DOT") + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 59): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:563:5: ( ( IDENT -> IDENT ) ( DOT ident= IDENT -> ^( DOT $qualifiedIdentifier $ident) )* ) + # Java.g:563:9: ( IDENT -> IDENT ) ( DOT ident= IDENT -> ^( DOT $qualifiedIdentifier $ident) )* + pass + # Java.g:563:9: ( IDENT -> IDENT ) + # Java.g:563:13: IDENT + pass + IDENT220=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_qualifiedIdentifier7722) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT220) + + # AST Rewrite + # elements: IDENT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 563:33: -> IDENT + self._adaptor.addChild(root_0, stream_IDENT.nextNode()) + + + + retval.tree = root_0 + + + + # Java.g:565:9: ( DOT ident= IDENT -> ^( DOT $qualifiedIdentifier $ident) )* + while True: #loop74 + alt74 = 2 + LA74_0 = self.input.LA(1) + + if (LA74_0 == DOT) : + LA74_2 = self.input.LA(2) + + if (LA74_2 == IDENT) : + LA74_3 = self.input.LA(3) + + if (self.synpred101_Java()) : + alt74 = 1 + + + + + + + if alt74 == 1: + # Java.g:565:13: DOT ident= IDENT + pass + DOT221=self.match(self.input, DOT, self.FOLLOW_DOT_in_qualifiedIdentifier7765) + if self._state.backtracking == 0: + stream_DOT.add(DOT221) + ident=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_qualifiedIdentifier7769) + if self._state.backtracking == 0: + stream_IDENT.add(ident) + + # AST Rewrite + # elements: DOT, qualifiedIdentifier, ident + # token labels: ident + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + stream_ident = RewriteRuleTokenStream(self._adaptor, "token ident", ident) + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 565:33: -> ^( DOT $qualifiedIdentifier $ident) + # Java.g:565:37: ^( DOT $qualifiedIdentifier $ident) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + self._adaptor.addChild(root_1, stream_ident.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + else: + break #loop74 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 59, qualifiedIdentifier_StartIndex, success) + + pass + return retval + + # $ANTLR end "qualifiedIdentifier" + + class annotationList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationList" + # Java.g:571:1: annotationList : ( annotation )* -> ^( ANNOTATION_LIST ( annotation )* ) ; + def annotationList(self, ): + + retval = self.annotationList_return() + retval.start = self.input.LT(1) + annotationList_StartIndex = self.input.index() + root_0 = None + + annotation222 = None + + + stream_annotation = RewriteRuleSubtreeStream(self._adaptor, "rule annotation") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 60): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:572:5: ( ( annotation )* -> ^( ANNOTATION_LIST ( annotation )* ) ) + # Java.g:572:9: ( annotation )* + pass + # Java.g:572:9: ( annotation )* + while True: #loop75 + alt75 = 2 + LA75_0 = self.input.LA(1) + + if (LA75_0 == AT) : + LA75_2 = self.input.LA(2) + + if (LA75_2 == IDENT) : + LA75_3 = self.input.LA(3) + + if (self.synpred102_Java()) : + alt75 = 1 + + + + + + + if alt75 == 1: + # Java.g:0:0: annotation + pass + self._state.following.append(self.FOLLOW_annotation_in_annotationList7818) + annotation222 = self.annotation() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotation.add(annotation222.tree) + + + else: + break #loop75 + + # AST Rewrite + # elements: annotation + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 573:9: -> ^( ANNOTATION_LIST ( annotation )* ) + # Java.g:573:13: ^( ANNOTATION_LIST ( annotation )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(ANNOTATION_LIST, "ANNOTATION_LIST"), root_1) + + # Java.g:573:31: ( annotation )* + while stream_annotation.hasNext(): + self._adaptor.addChild(root_1, stream_annotation.nextTree()) + + + stream_annotation.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 60, annotationList_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationList" + + class annotation_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotation_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotation" + # Java.g:576:1: annotation : AT qualifiedIdentifier ( annotationInit )? ; + def annotation(self, ): + + retval = self.annotation_return() + retval.start = self.input.LT(1) + annotation_StartIndex = self.input.index() + root_0 = None + + AT223 = None + qualifiedIdentifier224 = None + + annotationInit225 = None + + + AT223_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 61): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:577:5: ( AT qualifiedIdentifier ( annotationInit )? ) + # Java.g:577:9: AT qualifiedIdentifier ( annotationInit )? + pass + root_0 = self._adaptor.nil() + + AT223=self.match(self.input, AT, self.FOLLOW_AT_in_annotation7856) + if self._state.backtracking == 0: + + AT223_tree = self._adaptor.createWithPayload(AT223) + root_0 = self._adaptor.becomeRoot(AT223_tree, root_0) + + self._state.following.append(self.FOLLOW_qualifiedIdentifier_in_annotation7859) + qualifiedIdentifier224 = self.qualifiedIdentifier() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, qualifiedIdentifier224.tree) + # Java.g:577:33: ( annotationInit )? + alt76 = 2 + LA76_0 = self.input.LA(1) + + if (LA76_0 == LPAREN) : + alt76 = 1 + if alt76 == 1: + # Java.g:0:0: annotationInit + pass + self._state.following.append(self.FOLLOW_annotationInit_in_annotation7861) + annotationInit225 = self.annotationInit() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotationInit225.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 61, annotation_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotation" + + class annotationInit_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationInit_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationInit" + # Java.g:580:1: annotationInit : LPAREN annotationInitializers RPAREN -> ^( ANNOTATION_INIT_BLOCK[$LPAREN, \"ANNOTATION_INIT_BLOCK\"] annotationInitializers ) ; + def annotationInit(self, ): + + retval = self.annotationInit_return() + retval.start = self.input.LT(1) + annotationInit_StartIndex = self.input.index() + root_0 = None + + LPAREN226 = None + RPAREN228 = None + annotationInitializers227 = None + + + LPAREN226_tree = None + RPAREN228_tree = None + stream_RPAREN = RewriteRuleTokenStream(self._adaptor, "token RPAREN") + stream_LPAREN = RewriteRuleTokenStream(self._adaptor, "token LPAREN") + stream_annotationInitializers = RewriteRuleSubtreeStream(self._adaptor, "rule annotationInitializers") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 62): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:581:5: ( LPAREN annotationInitializers RPAREN -> ^( ANNOTATION_INIT_BLOCK[$LPAREN, \"ANNOTATION_INIT_BLOCK\"] annotationInitializers ) ) + # Java.g:581:9: LPAREN annotationInitializers RPAREN + pass + LPAREN226=self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_annotationInit7881) + if self._state.backtracking == 0: + stream_LPAREN.add(LPAREN226) + self._state.following.append(self.FOLLOW_annotationInitializers_in_annotationInit7883) + annotationInitializers227 = self.annotationInitializers() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotationInitializers.add(annotationInitializers227.tree) + RPAREN228=self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_annotationInit7885) + if self._state.backtracking == 0: + stream_RPAREN.add(RPAREN228) + + # AST Rewrite + # elements: annotationInitializers + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 582:9: -> ^( ANNOTATION_INIT_BLOCK[$LPAREN, \"ANNOTATION_INIT_BLOCK\"] annotationInitializers ) + # Java.g:582:13: ^( ANNOTATION_INIT_BLOCK[$LPAREN, \"ANNOTATION_INIT_BLOCK\"] annotationInitializers ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(ANNOTATION_INIT_BLOCK, LPAREN226, "ANNOTATION_INIT_BLOCK"), root_1) + + self._adaptor.addChild(root_1, stream_annotationInitializers.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 62, annotationInit_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationInit" + + class annotationInitializers_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationInitializers_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationInitializers" + # Java.g:585:1: annotationInitializers : ( annotationInitializer ( COMMA annotationInitializer )* -> ^( ANNOTATION_INIT_KEY_LIST ( annotationInitializer )+ ) | annotationElementValue -> ^( ANNOTATION_INIT_DEFAULT_KEY annotationElementValue ) ); + def annotationInitializers(self, ): + + retval = self.annotationInitializers_return() + retval.start = self.input.LT(1) + annotationInitializers_StartIndex = self.input.index() + root_0 = None + + COMMA230 = None + annotationInitializer229 = None + + annotationInitializer231 = None + + annotationElementValue232 = None + + + COMMA230_tree = None + stream_COMMA = RewriteRuleTokenStream(self._adaptor, "token COMMA") + stream_annotationElementValue = RewriteRuleSubtreeStream(self._adaptor, "rule annotationElementValue") + stream_annotationInitializer = RewriteRuleSubtreeStream(self._adaptor, "rule annotationInitializer") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 63): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:586:5: ( annotationInitializer ( COMMA annotationInitializer )* -> ^( ANNOTATION_INIT_KEY_LIST ( annotationInitializer )+ ) | annotationElementValue -> ^( ANNOTATION_INIT_DEFAULT_KEY annotationElementValue ) ) + alt78 = 2 + LA78_0 = self.input.LA(1) + + if (LA78_0 == IDENT) : + LA78_1 = self.input.LA(2) + + if (LA78_1 == ASSIGN) : + alt78 = 1 + elif (LA78_1 == AND or LA78_1 == BIT_SHIFT_RIGHT or (DEC <= LA78_1 <= DIV) or LA78_1 == DOT or (EQUAL <= LA78_1 <= LBRACK) or (LESS_OR_EQUAL <= LA78_1 <= LOGICAL_AND) or (LOGICAL_OR <= LA78_1 <= MINUS) or LA78_1 == MOD or (NOT_EQUAL <= LA78_1 <= OR) or LA78_1 == PLUS or LA78_1 == QUESTION or LA78_1 == RPAREN or LA78_1 == SHIFT_LEFT or LA78_1 == SHIFT_RIGHT or LA78_1 == STAR or LA78_1 == XOR or LA78_1 == INSTANCEOF) : + alt78 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 78, 1, self.input) + + raise nvae + + elif (LA78_0 == AT or LA78_0 == DEC or LA78_0 == INC or LA78_0 == LCURLY or LA78_0 == LESS_THAN or LA78_0 == LOGICAL_NOT or (LPAREN <= LA78_0 <= MINUS) or LA78_0 == NOT or LA78_0 == PLUS or LA78_0 == BOOLEAN or LA78_0 == BYTE or LA78_0 == CHAR or LA78_0 == DOUBLE or LA78_0 == FALSE or LA78_0 == FLOAT or (INT <= LA78_0 <= LONG) or (NEW <= LA78_0 <= NULL) or LA78_0 == SHORT or LA78_0 == SUPER or LA78_0 == THIS or LA78_0 == TRUE or LA78_0 == VOID or (HEX_LITERAL <= LA78_0 <= STRING_LITERAL)) : + alt78 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 78, 0, self.input) + + raise nvae + + if alt78 == 1: + # Java.g:586:9: annotationInitializer ( COMMA annotationInitializer )* + pass + self._state.following.append(self.FOLLOW_annotationInitializer_in_annotationInitializers7922) + annotationInitializer229 = self.annotationInitializer() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotationInitializer.add(annotationInitializer229.tree) + # Java.g:586:31: ( COMMA annotationInitializer )* + while True: #loop77 + alt77 = 2 + LA77_0 = self.input.LA(1) + + if (LA77_0 == COMMA) : + alt77 = 1 + + + if alt77 == 1: + # Java.g:586:32: COMMA annotationInitializer + pass + COMMA230=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_annotationInitializers7925) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA230) + self._state.following.append(self.FOLLOW_annotationInitializer_in_annotationInitializers7927) + annotationInitializer231 = self.annotationInitializer() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotationInitializer.add(annotationInitializer231.tree) + + + else: + break #loop77 + + # AST Rewrite + # elements: annotationInitializer + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 587:9: -> ^( ANNOTATION_INIT_KEY_LIST ( annotationInitializer )+ ) + # Java.g:587:13: ^( ANNOTATION_INIT_KEY_LIST ( annotationInitializer )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(ANNOTATION_INIT_KEY_LIST, "ANNOTATION_INIT_KEY_LIST"), root_1) + + # Java.g:587:40: ( annotationInitializer )+ + if not (stream_annotationInitializer.hasNext()): + raise RewriteEarlyExitException() + + while stream_annotationInitializer.hasNext(): + self._adaptor.addChild(root_1, stream_annotationInitializer.nextTree()) + + + stream_annotationInitializer.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt78 == 2: + # Java.g:588:9: annotationElementValue + pass + self._state.following.append(self.FOLLOW_annotationElementValue_in_annotationInitializers7957) + annotationElementValue232 = self.annotationElementValue() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotationElementValue.add(annotationElementValue232.tree) + + # AST Rewrite + # elements: annotationElementValue + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 589:9: -> ^( ANNOTATION_INIT_DEFAULT_KEY annotationElementValue ) + # Java.g:589:13: ^( ANNOTATION_INIT_DEFAULT_KEY annotationElementValue ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(ANNOTATION_INIT_DEFAULT_KEY, "ANNOTATION_INIT_DEFAULT_KEY"), root_1) + + self._adaptor.addChild(root_1, stream_annotationElementValue.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 63, annotationInitializers_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationInitializers" + + class annotationInitializer_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationInitializer_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationInitializer" + # Java.g:592:1: annotationInitializer : IDENT ASSIGN annotationElementValue ; + def annotationInitializer(self, ): + + retval = self.annotationInitializer_return() + retval.start = self.input.LT(1) + annotationInitializer_StartIndex = self.input.index() + root_0 = None + + IDENT233 = None + ASSIGN234 = None + annotationElementValue235 = None + + + IDENT233_tree = None + ASSIGN234_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 64): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:593:5: ( IDENT ASSIGN annotationElementValue ) + # Java.g:593:9: IDENT ASSIGN annotationElementValue + pass + root_0 = self._adaptor.nil() + + IDENT233=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_annotationInitializer7994) + if self._state.backtracking == 0: + + IDENT233_tree = self._adaptor.createWithPayload(IDENT233) + root_0 = self._adaptor.becomeRoot(IDENT233_tree, root_0) + + ASSIGN234=self.match(self.input, ASSIGN, self.FOLLOW_ASSIGN_in_annotationInitializer7997) + self._state.following.append(self.FOLLOW_annotationElementValue_in_annotationInitializer8000) + annotationElementValue235 = self.annotationElementValue() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotationElementValue235.tree) + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 64, annotationInitializer_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationInitializer" + + class annotationElementValue_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationElementValue_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationElementValue" + # Java.g:596:1: annotationElementValue : ( annotationElementValueExpression | annotation | annotationElementValueArrayInitializer ); + def annotationElementValue(self, ): + + retval = self.annotationElementValue_return() + retval.start = self.input.LT(1) + annotationElementValue_StartIndex = self.input.index() + root_0 = None + + annotationElementValueExpression236 = None + + annotation237 = None + + annotationElementValueArrayInitializer238 = None + + + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 65): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:597:5: ( annotationElementValueExpression | annotation | annotationElementValueArrayInitializer ) + alt79 = 3 + LA79 = self.input.LA(1) + if LA79 == DEC or LA79 == INC or LA79 == LESS_THAN or LA79 == LOGICAL_NOT or LA79 == LPAREN or LA79 == MINUS or LA79 == NOT or LA79 == PLUS or LA79 == BOOLEAN or LA79 == BYTE or LA79 == CHAR or LA79 == DOUBLE or LA79 == FALSE or LA79 == FLOAT or LA79 == INT or LA79 == LONG or LA79 == NEW or LA79 == NULL or LA79 == SHORT or LA79 == SUPER or LA79 == THIS or LA79 == TRUE or LA79 == VOID or LA79 == IDENT or LA79 == HEX_LITERAL or LA79 == OCTAL_LITERAL or LA79 == DECIMAL_LITERAL or LA79 == FLOATING_POINT_LITERAL or LA79 == CHARACTER_LITERAL or LA79 == STRING_LITERAL: + alt79 = 1 + elif LA79 == AT: + alt79 = 2 + elif LA79 == LCURLY: + alt79 = 3 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 79, 0, self.input) + + raise nvae + + if alt79 == 1: + # Java.g:597:9: annotationElementValueExpression + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_annotationElementValueExpression_in_annotationElementValue8019) + annotationElementValueExpression236 = self.annotationElementValueExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotationElementValueExpression236.tree) + + + elif alt79 == 2: + # Java.g:598:9: annotation + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_annotation_in_annotationElementValue8029) + annotation237 = self.annotation() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotation237.tree) + + + elif alt79 == 3: + # Java.g:599:9: annotationElementValueArrayInitializer + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_annotationElementValueArrayInitializer_in_annotationElementValue8039) + annotationElementValueArrayInitializer238 = self.annotationElementValueArrayInitializer() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotationElementValueArrayInitializer238.tree) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 65, annotationElementValue_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationElementValue" + + class annotationElementValueExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationElementValueExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationElementValueExpression" + # Java.g:602:1: annotationElementValueExpression : conditionalExpression -> ^( EXPR conditionalExpression ) ; + def annotationElementValueExpression(self, ): + + retval = self.annotationElementValueExpression_return() + retval.start = self.input.LT(1) + annotationElementValueExpression_StartIndex = self.input.index() + root_0 = None + + conditionalExpression239 = None + + + stream_conditionalExpression = RewriteRuleSubtreeStream(self._adaptor, "rule conditionalExpression") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 66): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:603:5: ( conditionalExpression -> ^( EXPR conditionalExpression ) ) + # Java.g:603:9: conditionalExpression + pass + self._state.following.append(self.FOLLOW_conditionalExpression_in_annotationElementValueExpression8058) + conditionalExpression239 = self.conditionalExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_conditionalExpression.add(conditionalExpression239.tree) + + # AST Rewrite + # elements: conditionalExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 604:9: -> ^( EXPR conditionalExpression ) + # Java.g:604:13: ^( EXPR conditionalExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(EXPR, "EXPR"), root_1) + + self._adaptor.addChild(root_1, stream_conditionalExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 66, annotationElementValueExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationElementValueExpression" + + class annotationElementValueArrayInitializer_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationElementValueArrayInitializer_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationElementValueArrayInitializer" + # Java.g:607:1: annotationElementValueArrayInitializer : LCURLY ( annotationElementValue ( COMMA annotationElementValue )* )? ( COMMA )? RCURLY -> ^( ANNOTATION_INIT_ARRAY_ELEMENT[$LCURLY, \"ANNOTATION_ELEM_VALUE_ARRAY_INIT\"] ( annotationElementValue )* ) ; + def annotationElementValueArrayInitializer(self, ): + + retval = self.annotationElementValueArrayInitializer_return() + retval.start = self.input.LT(1) + annotationElementValueArrayInitializer_StartIndex = self.input.index() + root_0 = None + + LCURLY240 = None + COMMA242 = None + COMMA244 = None + RCURLY245 = None + annotationElementValue241 = None + + annotationElementValue243 = None + + + LCURLY240_tree = None + COMMA242_tree = None + COMMA244_tree = None + RCURLY245_tree = None + stream_LCURLY = RewriteRuleTokenStream(self._adaptor, "token LCURLY") + stream_COMMA = RewriteRuleTokenStream(self._adaptor, "token COMMA") + stream_RCURLY = RewriteRuleTokenStream(self._adaptor, "token RCURLY") + stream_annotationElementValue = RewriteRuleSubtreeStream(self._adaptor, "rule annotationElementValue") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 67): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:608:5: ( LCURLY ( annotationElementValue ( COMMA annotationElementValue )* )? ( COMMA )? RCURLY -> ^( ANNOTATION_INIT_ARRAY_ELEMENT[$LCURLY, \"ANNOTATION_ELEM_VALUE_ARRAY_INIT\"] ( annotationElementValue )* ) ) + # Java.g:608:9: LCURLY ( annotationElementValue ( COMMA annotationElementValue )* )? ( COMMA )? RCURLY + pass + LCURLY240=self.match(self.input, LCURLY, self.FOLLOW_LCURLY_in_annotationElementValueArrayInitializer8094) + if self._state.backtracking == 0: + stream_LCURLY.add(LCURLY240) + # Java.g:608:16: ( annotationElementValue ( COMMA annotationElementValue )* )? + alt81 = 2 + LA81_0 = self.input.LA(1) + + if (LA81_0 == AT or LA81_0 == DEC or LA81_0 == INC or LA81_0 == LCURLY or LA81_0 == LESS_THAN or LA81_0 == LOGICAL_NOT or (LPAREN <= LA81_0 <= MINUS) or LA81_0 == NOT or LA81_0 == PLUS or LA81_0 == BOOLEAN or LA81_0 == BYTE or LA81_0 == CHAR or LA81_0 == DOUBLE or LA81_0 == FALSE or LA81_0 == FLOAT or (INT <= LA81_0 <= LONG) or (NEW <= LA81_0 <= NULL) or LA81_0 == SHORT or LA81_0 == SUPER or LA81_0 == THIS or LA81_0 == TRUE or LA81_0 == VOID or (IDENT <= LA81_0 <= STRING_LITERAL)) : + alt81 = 1 + if alt81 == 1: + # Java.g:608:17: annotationElementValue ( COMMA annotationElementValue )* + pass + self._state.following.append(self.FOLLOW_annotationElementValue_in_annotationElementValueArrayInitializer8097) + annotationElementValue241 = self.annotationElementValue() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotationElementValue.add(annotationElementValue241.tree) + # Java.g:608:40: ( COMMA annotationElementValue )* + while True: #loop80 + alt80 = 2 + LA80_0 = self.input.LA(1) + + if (LA80_0 == COMMA) : + LA80_1 = self.input.LA(2) + + if (LA80_1 == AT or LA80_1 == DEC or LA80_1 == INC or LA80_1 == LCURLY or LA80_1 == LESS_THAN or LA80_1 == LOGICAL_NOT or (LPAREN <= LA80_1 <= MINUS) or LA80_1 == NOT or LA80_1 == PLUS or LA80_1 == BOOLEAN or LA80_1 == BYTE or LA80_1 == CHAR or LA80_1 == DOUBLE or LA80_1 == FALSE or LA80_1 == FLOAT or (INT <= LA80_1 <= LONG) or (NEW <= LA80_1 <= NULL) or LA80_1 == SHORT or LA80_1 == SUPER or LA80_1 == THIS or LA80_1 == TRUE or LA80_1 == VOID or (IDENT <= LA80_1 <= STRING_LITERAL)) : + alt80 = 1 + + + + + if alt80 == 1: + # Java.g:608:41: COMMA annotationElementValue + pass + COMMA242=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_annotationElementValueArrayInitializer8100) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA242) + self._state.following.append(self.FOLLOW_annotationElementValue_in_annotationElementValueArrayInitializer8102) + annotationElementValue243 = self.annotationElementValue() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotationElementValue.add(annotationElementValue243.tree) + + + else: + break #loop80 + + + + # Java.g:608:74: ( COMMA )? + alt82 = 2 + LA82_0 = self.input.LA(1) + + if (LA82_0 == COMMA) : + alt82 = 1 + if alt82 == 1: + # Java.g:608:75: COMMA + pass + COMMA244=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_annotationElementValueArrayInitializer8109) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA244) + + + + RCURLY245=self.match(self.input, RCURLY, self.FOLLOW_RCURLY_in_annotationElementValueArrayInitializer8113) + if self._state.backtracking == 0: + stream_RCURLY.add(RCURLY245) + + # AST Rewrite + # elements: annotationElementValue + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 609:9: -> ^( ANNOTATION_INIT_ARRAY_ELEMENT[$LCURLY, \"ANNOTATION_ELEM_VALUE_ARRAY_INIT\"] ( annotationElementValue )* ) + # Java.g:609:13: ^( ANNOTATION_INIT_ARRAY_ELEMENT[$LCURLY, \"ANNOTATION_ELEM_VALUE_ARRAY_INIT\"] ( annotationElementValue )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(ANNOTATION_INIT_ARRAY_ELEMENT, LCURLY240, "ANNOTATION_ELEM_VALUE_ARRAY_INIT"), root_1) + + # Java.g:609:90: ( annotationElementValue )* + while stream_annotationElementValue.hasNext(): + self._adaptor.addChild(root_1, stream_annotationElementValue.nextTree()) + + + stream_annotationElementValue.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 67, annotationElementValueArrayInitializer_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationElementValueArrayInitializer" + + class annotationTypeDeclaration_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationTypeDeclaration_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationTypeDeclaration" + # Java.g:612:1: annotationTypeDeclaration[modifiers] : AT INTERFACE IDENT annotationBody -> ^( AT IDENT annotationBody ) ; + def annotationTypeDeclaration(self, modifiers): + + retval = self.annotationTypeDeclaration_return() + retval.start = self.input.LT(1) + annotationTypeDeclaration_StartIndex = self.input.index() + root_0 = None + + AT246 = None + INTERFACE247 = None + IDENT248 = None + annotationBody249 = None + + + AT246_tree = None + INTERFACE247_tree = None + IDENT248_tree = None + stream_AT = RewriteRuleTokenStream(self._adaptor, "token AT") + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_INTERFACE = RewriteRuleTokenStream(self._adaptor, "token INTERFACE") + stream_annotationBody = RewriteRuleSubtreeStream(self._adaptor, "rule annotationBody") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 68): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:613:5: ( AT INTERFACE IDENT annotationBody -> ^( AT IDENT annotationBody ) ) + # Java.g:613:9: AT INTERFACE IDENT annotationBody + pass + AT246=self.match(self.input, AT, self.FOLLOW_AT_in_annotationTypeDeclaration8152) + if self._state.backtracking == 0: + stream_AT.add(AT246) + INTERFACE247=self.match(self.input, INTERFACE, self.FOLLOW_INTERFACE_in_annotationTypeDeclaration8154) + if self._state.backtracking == 0: + stream_INTERFACE.add(INTERFACE247) + IDENT248=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_annotationTypeDeclaration8156) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT248) + self._state.following.append(self.FOLLOW_annotationBody_in_annotationTypeDeclaration8158) + annotationBody249 = self.annotationBody() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotationBody.add(annotationBody249.tree) + + # AST Rewrite + # elements: AT, IDENT, annotationBody + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 614:9: -> ^( AT IDENT annotationBody ) + # Java.g:614:12: ^( AT IDENT annotationBody ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_AT.nextNode(), root_1) + + self._adaptor.addChild(root_1, modifiers) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + self._adaptor.addChild(root_1, stream_annotationBody.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 68, annotationTypeDeclaration_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationTypeDeclaration" + + class annotationBody_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationBody_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationBody" + # Java.g:617:1: annotationBody : LCURLY ( annotationScopeDeclarations )* RCURLY -> ^( ANNOTATION_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( annotationScopeDeclarations )* ) ; + def annotationBody(self, ): + + retval = self.annotationBody_return() + retval.start = self.input.LT(1) + annotationBody_StartIndex = self.input.index() + root_0 = None + + LCURLY250 = None + RCURLY252 = None + annotationScopeDeclarations251 = None + + + LCURLY250_tree = None + RCURLY252_tree = None + stream_LCURLY = RewriteRuleTokenStream(self._adaptor, "token LCURLY") + stream_RCURLY = RewriteRuleTokenStream(self._adaptor, "token RCURLY") + stream_annotationScopeDeclarations = RewriteRuleSubtreeStream(self._adaptor, "rule annotationScopeDeclarations") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 69): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:618:5: ( LCURLY ( annotationScopeDeclarations )* RCURLY -> ^( ANNOTATION_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( annotationScopeDeclarations )* ) ) + # Java.g:618:9: LCURLY ( annotationScopeDeclarations )* RCURLY + pass + LCURLY250=self.match(self.input, LCURLY, self.FOLLOW_LCURLY_in_annotationBody8197) + if self._state.backtracking == 0: + stream_LCURLY.add(LCURLY250) + # Java.g:618:16: ( annotationScopeDeclarations )* + while True: #loop83 + alt83 = 2 + LA83_0 = self.input.LA(1) + + if (LA83_0 == AT or LA83_0 == LESS_THAN or LA83_0 == ABSTRACT or LA83_0 == BOOLEAN or LA83_0 == BYTE or (CHAR <= LA83_0 <= CLASS) or LA83_0 == DOUBLE or LA83_0 == ENUM or LA83_0 == FINAL or LA83_0 == FLOAT or LA83_0 == INTERFACE or (INT <= LA83_0 <= NATIVE) or (PRIVATE <= LA83_0 <= PUBLIC) or (SHORT <= LA83_0 <= STRICTFP) or LA83_0 == SYNCHRONIZED or LA83_0 == TRANSIENT or (VOID <= LA83_0 <= VOLATILE) or LA83_0 == IDENT) : + alt83 = 1 + + + if alt83 == 1: + # Java.g:0:0: annotationScopeDeclarations + pass + self._state.following.append(self.FOLLOW_annotationScopeDeclarations_in_annotationBody8199) + annotationScopeDeclarations251 = self.annotationScopeDeclarations() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotationScopeDeclarations.add(annotationScopeDeclarations251.tree) + + + else: + break #loop83 + RCURLY252=self.match(self.input, RCURLY, self.FOLLOW_RCURLY_in_annotationBody8202) + if self._state.backtracking == 0: + stream_RCURLY.add(RCURLY252) + + # AST Rewrite + # elements: annotationScopeDeclarations + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 619:9: -> ^( ANNOTATION_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( annotationScopeDeclarations )* ) + # Java.g:619:13: ^( ANNOTATION_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( annotationScopeDeclarations )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(ANNOTATION_TOP_LEVEL_SCOPE, LCURLY250, "CLASS_TOP_LEVEL_SCOPE"), root_1) + + # Java.g:619:76: ( annotationScopeDeclarations )* + while stream_annotationScopeDeclarations.hasNext(): + self._adaptor.addChild(root_1, stream_annotationScopeDeclarations.nextTree()) + + + stream_annotationScopeDeclarations.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 69, annotationBody_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationBody" + + class annotationScopeDeclarations_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationScopeDeclarations_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationScopeDeclarations" + # Java.g:622:1: annotationScopeDeclarations : ( modifierList type ( IDENT LPAREN RPAREN ( annotationDefaultValue )? SEMI -> ^( ANNOTATION_METHOD_DECL modifierList type IDENT ( annotationDefaultValue )? ) | classFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) ) | typeDeclaration ); + def annotationScopeDeclarations(self, ): + + retval = self.annotationScopeDeclarations_return() + retval.start = self.input.LT(1) + annotationScopeDeclarations_StartIndex = self.input.index() + root_0 = None + + IDENT255 = None + LPAREN256 = None + RPAREN257 = None + SEMI259 = None + SEMI261 = None + modifierList253 = None + + type254 = None + + annotationDefaultValue258 = None + + classFieldDeclaratorList260 = None + + typeDeclaration262 = None + + + IDENT255_tree = None + LPAREN256_tree = None + RPAREN257_tree = None + SEMI259_tree = None + SEMI261_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_RPAREN = RewriteRuleTokenStream(self._adaptor, "token RPAREN") + stream_SEMI = RewriteRuleTokenStream(self._adaptor, "token SEMI") + stream_LPAREN = RewriteRuleTokenStream(self._adaptor, "token LPAREN") + stream_modifierList = RewriteRuleSubtreeStream(self._adaptor, "rule modifierList") + stream_annotationDefaultValue = RewriteRuleSubtreeStream(self._adaptor, "rule annotationDefaultValue") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + stream_classFieldDeclaratorList = RewriteRuleSubtreeStream(self._adaptor, "rule classFieldDeclaratorList") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 70): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:623:5: ( modifierList type ( IDENT LPAREN RPAREN ( annotationDefaultValue )? SEMI -> ^( ANNOTATION_METHOD_DECL modifierList type IDENT ( annotationDefaultValue )? ) | classFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) ) | typeDeclaration ) + alt86 = 2 + alt86 = self.dfa86.predict(self.input) + if alt86 == 1: + # Java.g:623:9: modifierList type ( IDENT LPAREN RPAREN ( annotationDefaultValue )? SEMI -> ^( ANNOTATION_METHOD_DECL modifierList type IDENT ( annotationDefaultValue )? ) | classFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) ) + pass + self._state.following.append(self.FOLLOW_modifierList_in_annotationScopeDeclarations8240) + modifierList253 = self.modifierList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_modifierList.add(modifierList253.tree) + self._state.following.append(self.FOLLOW_type_in_annotationScopeDeclarations8242) + type254 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type254.tree) + # Java.g:624:9: ( IDENT LPAREN RPAREN ( annotationDefaultValue )? SEMI -> ^( ANNOTATION_METHOD_DECL modifierList type IDENT ( annotationDefaultValue )? ) | classFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) ) + alt85 = 2 + LA85_0 = self.input.LA(1) + + if (LA85_0 == IDENT) : + LA85_1 = self.input.LA(2) + + if (LA85_1 == LPAREN) : + alt85 = 1 + elif (LA85_1 == ASSIGN or LA85_1 == COMMA or LA85_1 == LBRACK or LA85_1 == SEMI) : + alt85 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 85, 1, self.input) + + raise nvae + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 85, 0, self.input) + + raise nvae + + if alt85 == 1: + # Java.g:624:13: IDENT LPAREN RPAREN ( annotationDefaultValue )? SEMI + pass + IDENT255=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_annotationScopeDeclarations8256) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT255) + LPAREN256=self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_annotationScopeDeclarations8258) + if self._state.backtracking == 0: + stream_LPAREN.add(LPAREN256) + RPAREN257=self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_annotationScopeDeclarations8260) + if self._state.backtracking == 0: + stream_RPAREN.add(RPAREN257) + # Java.g:624:33: ( annotationDefaultValue )? + alt84 = 2 + LA84_0 = self.input.LA(1) + + if (LA84_0 == DEFAULT) : + alt84 = 1 + if alt84 == 1: + # Java.g:0:0: annotationDefaultValue + pass + self._state.following.append(self.FOLLOW_annotationDefaultValue_in_annotationScopeDeclarations8262) + annotationDefaultValue258 = self.annotationDefaultValue() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotationDefaultValue.add(annotationDefaultValue258.tree) + + + + SEMI259=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_annotationScopeDeclarations8265) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI259) + + # AST Rewrite + # elements: annotationDefaultValue, IDENT, modifierList, type + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 625:13: -> ^( ANNOTATION_METHOD_DECL modifierList type IDENT ( annotationDefaultValue )? ) + # Java.g:625:17: ^( ANNOTATION_METHOD_DECL modifierList type IDENT ( annotationDefaultValue )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(ANNOTATION_METHOD_DECL, "ANNOTATION_METHOD_DECL"), root_1) + + self._adaptor.addChild(root_1, stream_modifierList.nextTree()) + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + # Java.g:625:66: ( annotationDefaultValue )? + if stream_annotationDefaultValue.hasNext(): + self._adaptor.addChild(root_1, stream_annotationDefaultValue.nextTree()) + + + stream_annotationDefaultValue.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt85 == 2: + # Java.g:626:13: classFieldDeclaratorList SEMI + pass + self._state.following.append(self.FOLLOW_classFieldDeclaratorList_in_annotationScopeDeclarations8307) + classFieldDeclaratorList260 = self.classFieldDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classFieldDeclaratorList.add(classFieldDeclaratorList260.tree) + SEMI261=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_annotationScopeDeclarations8309) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI261) + + # AST Rewrite + # elements: classFieldDeclaratorList, type, modifierList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 627:13: -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) + # Java.g:627:17: ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VAR_DECLARATION, "VAR_DECLARATION"), root_1) + + self._adaptor.addChild(root_1, stream_modifierList.nextTree()) + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_classFieldDeclaratorList.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt86 == 2: + # Java.g:629:9: typeDeclaration + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_typeDeclaration_in_annotationScopeDeclarations8354) + typeDeclaration262 = self.typeDeclaration() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, typeDeclaration262.tree) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 70, annotationScopeDeclarations_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationScopeDeclarations" + + class annotationDefaultValue_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationDefaultValue_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationDefaultValue" + # Java.g:632:1: annotationDefaultValue : DEFAULT annotationElementValue ; + def annotationDefaultValue(self, ): + + retval = self.annotationDefaultValue_return() + retval.start = self.input.LT(1) + annotationDefaultValue_StartIndex = self.input.index() + root_0 = None + + DEFAULT263 = None + annotationElementValue264 = None + + + DEFAULT263_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 71): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:633:5: ( DEFAULT annotationElementValue ) + # Java.g:633:9: DEFAULT annotationElementValue + pass + root_0 = self._adaptor.nil() + + DEFAULT263=self.match(self.input, DEFAULT, self.FOLLOW_DEFAULT_in_annotationDefaultValue8373) + if self._state.backtracking == 0: + + DEFAULT263_tree = self._adaptor.createWithPayload(DEFAULT263) + root_0 = self._adaptor.becomeRoot(DEFAULT263_tree, root_0) + + self._state.following.append(self.FOLLOW_annotationElementValue_in_annotationDefaultValue8376) + annotationElementValue264 = self.annotationElementValue() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotationElementValue264.tree) + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 71, annotationDefaultValue_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationDefaultValue" + + class block_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.block_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "block" + # Java.g:638:1: block : LCURLY ( blockStatement )* RCURLY -> ^( BLOCK_SCOPE[$LCURLY, \"BLOCK_SCOPE\"] ( blockStatement )* ) ; + def block(self, ): + + retval = self.block_return() + retval.start = self.input.LT(1) + block_StartIndex = self.input.index() + root_0 = None + + LCURLY265 = None + RCURLY267 = None + blockStatement266 = None + + + LCURLY265_tree = None + RCURLY267_tree = None + stream_LCURLY = RewriteRuleTokenStream(self._adaptor, "token LCURLY") + stream_RCURLY = RewriteRuleTokenStream(self._adaptor, "token RCURLY") + stream_blockStatement = RewriteRuleSubtreeStream(self._adaptor, "rule blockStatement") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 72): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:639:5: ( LCURLY ( blockStatement )* RCURLY -> ^( BLOCK_SCOPE[$LCURLY, \"BLOCK_SCOPE\"] ( blockStatement )* ) ) + # Java.g:639:9: LCURLY ( blockStatement )* RCURLY + pass + LCURLY265=self.match(self.input, LCURLY, self.FOLLOW_LCURLY_in_block8397) + if self._state.backtracking == 0: + stream_LCURLY.add(LCURLY265) + # Java.g:639:16: ( blockStatement )* + while True: #loop87 + alt87 = 2 + LA87_0 = self.input.LA(1) + + if (LA87_0 == AT or LA87_0 == DEC or LA87_0 == INC or LA87_0 == LCURLY or LA87_0 == LESS_THAN or LA87_0 == LOGICAL_NOT or (LPAREN <= LA87_0 <= MINUS) or LA87_0 == NOT or LA87_0 == PLUS or LA87_0 == SEMI or (ABSTRACT <= LA87_0 <= BYTE) or (CHAR <= LA87_0 <= CONTINUE) or (DO <= LA87_0 <= DOUBLE) or LA87_0 == ENUM or (FALSE <= LA87_0 <= FINAL) or (FLOAT <= LA87_0 <= IF) or LA87_0 == INTERFACE or (INT <= LA87_0 <= NULL) or (PRIVATE <= LA87_0 <= THROW) or (TRANSIENT <= LA87_0 <= WHILE) or (IDENT <= LA87_0 <= STRING_LITERAL)) : + alt87 = 1 + + + if alt87 == 1: + # Java.g:0:0: blockStatement + pass + self._state.following.append(self.FOLLOW_blockStatement_in_block8399) + blockStatement266 = self.blockStatement() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_blockStatement.add(blockStatement266.tree) + + + else: + break #loop87 + RCURLY267=self.match(self.input, RCURLY, self.FOLLOW_RCURLY_in_block8402) + if self._state.backtracking == 0: + stream_RCURLY.add(RCURLY267) + + # AST Rewrite + # elements: blockStatement + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 640:9: -> ^( BLOCK_SCOPE[$LCURLY, \"BLOCK_SCOPE\"] ( blockStatement )* ) + # Java.g:640:13: ^( BLOCK_SCOPE[$LCURLY, \"BLOCK_SCOPE\"] ( blockStatement )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(BLOCK_SCOPE, LCURLY265, "BLOCK_SCOPE"), root_1) + + # Java.g:640:51: ( blockStatement )* + while stream_blockStatement.hasNext(): + self._adaptor.addChild(root_1, stream_blockStatement.nextTree()) + + + stream_blockStatement.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 72, block_StartIndex, success) + + pass + return retval + + # $ANTLR end "block" + + class blockStatement_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.blockStatement_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "blockStatement" + # Java.g:643:1: blockStatement : ( localVariableDeclaration SEMI | typeDeclaration | statement ); + def blockStatement(self, ): + + retval = self.blockStatement_return() + retval.start = self.input.LT(1) + blockStatement_StartIndex = self.input.index() + root_0 = None + + SEMI269 = None + localVariableDeclaration268 = None + + typeDeclaration270 = None + + statement271 = None + + + SEMI269_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 73): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:644:5: ( localVariableDeclaration SEMI | typeDeclaration | statement ) + alt88 = 3 + alt88 = self.dfa88.predict(self.input) + if alt88 == 1: + # Java.g:644:9: localVariableDeclaration SEMI + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_localVariableDeclaration_in_blockStatement8440) + localVariableDeclaration268 = self.localVariableDeclaration() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, localVariableDeclaration268.tree) + SEMI269=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_blockStatement8442) + + + elif alt88 == 2: + # Java.g:645:9: typeDeclaration + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_typeDeclaration_in_blockStatement8453) + typeDeclaration270 = self.typeDeclaration() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, typeDeclaration270.tree) + + + elif alt88 == 3: + # Java.g:646:9: statement + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_statement_in_blockStatement8463) + statement271 = self.statement() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, statement271.tree) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 73, blockStatement_StartIndex, success) + + pass + return retval + + # $ANTLR end "blockStatement" + + class localVariableDeclaration_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.localVariableDeclaration_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "localVariableDeclaration" + # Java.g:649:1: localVariableDeclaration : localModifierList type classFieldDeclaratorList -> ^( VAR_DECLARATION localModifierList type classFieldDeclaratorList ) ; + def localVariableDeclaration(self, ): + + retval = self.localVariableDeclaration_return() + retval.start = self.input.LT(1) + localVariableDeclaration_StartIndex = self.input.index() + root_0 = None + + localModifierList272 = None + + type273 = None + + classFieldDeclaratorList274 = None + + + stream_localModifierList = RewriteRuleSubtreeStream(self._adaptor, "rule localModifierList") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + stream_classFieldDeclaratorList = RewriteRuleSubtreeStream(self._adaptor, "rule classFieldDeclaratorList") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 74): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:650:5: ( localModifierList type classFieldDeclaratorList -> ^( VAR_DECLARATION localModifierList type classFieldDeclaratorList ) ) + # Java.g:650:9: localModifierList type classFieldDeclaratorList + pass + self._state.following.append(self.FOLLOW_localModifierList_in_localVariableDeclaration8482) + localModifierList272 = self.localModifierList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_localModifierList.add(localModifierList272.tree) + self._state.following.append(self.FOLLOW_type_in_localVariableDeclaration8484) + type273 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type273.tree) + self._state.following.append(self.FOLLOW_classFieldDeclaratorList_in_localVariableDeclaration8486) + classFieldDeclaratorList274 = self.classFieldDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classFieldDeclaratorList.add(classFieldDeclaratorList274.tree) + + # AST Rewrite + # elements: type, classFieldDeclaratorList, localModifierList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 651:9: -> ^( VAR_DECLARATION localModifierList type classFieldDeclaratorList ) + # Java.g:651:13: ^( VAR_DECLARATION localModifierList type classFieldDeclaratorList ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VAR_DECLARATION, "VAR_DECLARATION"), root_1) + + self._adaptor.addChild(root_1, stream_localModifierList.nextTree()) + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_classFieldDeclaratorList.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 74, localVariableDeclaration_StartIndex, success) + + pass + return retval + + # $ANTLR end "localVariableDeclaration" + + class statement_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.statement_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "statement" + # Java.g:655:1: statement : ( block | ASSERT expr1= expression ( COLON expr2= expression SEMI -> ^( ASSERT $expr1 $expr2) | SEMI -> ^( ASSERT $expr1) ) | IF parenthesizedExpression ifStat= statement ( ELSE elseStat= statement -> ^( IF parenthesizedExpression $ifStat $elseStat) | -> ^( IF parenthesizedExpression $ifStat) ) | FOR LPAREN ( forInit SEMI forCondition SEMI forUpdater RPAREN statement -> ^( FOR forInit forCondition forUpdater statement ) | localModifierList type IDENT COLON expression RPAREN statement -> ^( FOR_EACH[$FOR, \"FOR_EACH\"] localModifierList type IDENT expression statement ) ) | WHILE parenthesizedExpression statement -> ^( WHILE parenthesizedExpression statement ) | DO statement WHILE parenthesizedExpression SEMI -> ^( DO statement parenthesizedExpression ) | TRY block ( catches ( finallyClause )? | finallyClause ) -> ^( TRY block ( catches )? ( finallyClause )? ) | SWITCH parenthesizedExpression LCURLY ( switchBlockLabels )? RCURLY -> ^( SWITCH parenthesizedExpression ( switchBlockLabels )? ) | SYNCHRONIZED parenthesizedExpression block -> ^( SYNCHRONIZED parenthesizedExpression block ) | RETURN ( expression )? SEMI -> ^( RETURN ( expression )? ) | THROW expression SEMI -> ^( THROW expression ) | BREAK ( IDENT )? SEMI -> ^( BREAK ( IDENT )? ) | CONTINUE ( IDENT )? SEMI -> ^( CONTINUE ( IDENT )? ) | IDENT COLON statement -> ^( LABELED_STATEMENT IDENT statement ) | expression SEMI | SEMI ); + def statement(self, ): + + retval = self.statement_return() + retval.start = self.input.LT(1) + statement_StartIndex = self.input.index() + root_0 = None + + ASSERT276 = None + COLON277 = None + SEMI278 = None + SEMI279 = None + IF280 = None + ELSE282 = None + FOR283 = None + LPAREN284 = None + SEMI286 = None + SEMI288 = None + RPAREN290 = None + IDENT294 = None + COLON295 = None + RPAREN297 = None + WHILE299 = None + DO302 = None + WHILE304 = None + SEMI306 = None + TRY307 = None + SWITCH312 = None + LCURLY314 = None + RCURLY316 = None + SYNCHRONIZED317 = None + RETURN320 = None + SEMI322 = None + THROW323 = None + SEMI325 = None + BREAK326 = None + IDENT327 = None + SEMI328 = None + CONTINUE329 = None + IDENT330 = None + SEMI331 = None + IDENT332 = None + COLON333 = None + SEMI336 = None + SEMI337 = None + expr1 = None + + expr2 = None + + ifStat = None + + elseStat = None + + block275 = None + + parenthesizedExpression281 = None + + forInit285 = None + + forCondition287 = None + + forUpdater289 = None + + statement291 = None + + localModifierList292 = None + + type293 = None + + expression296 = None + + statement298 = None + + parenthesizedExpression300 = None + + statement301 = None + + statement303 = None + + parenthesizedExpression305 = None + + block308 = None + + catches309 = None + + finallyClause310 = None + + finallyClause311 = None + + parenthesizedExpression313 = None + + switchBlockLabels315 = None + + parenthesizedExpression318 = None + + block319 = None + + expression321 = None + + expression324 = None + + statement334 = None + + expression335 = None + + + ASSERT276_tree = None + COLON277_tree = None + SEMI278_tree = None + SEMI279_tree = None + IF280_tree = None + ELSE282_tree = None + FOR283_tree = None + LPAREN284_tree = None + SEMI286_tree = None + SEMI288_tree = None + RPAREN290_tree = None + IDENT294_tree = None + COLON295_tree = None + RPAREN297_tree = None + WHILE299_tree = None + DO302_tree = None + WHILE304_tree = None + SEMI306_tree = None + TRY307_tree = None + SWITCH312_tree = None + LCURLY314_tree = None + RCURLY316_tree = None + SYNCHRONIZED317_tree = None + RETURN320_tree = None + SEMI322_tree = None + THROW323_tree = None + SEMI325_tree = None + BREAK326_tree = None + IDENT327_tree = None + SEMI328_tree = None + CONTINUE329_tree = None + IDENT330_tree = None + SEMI331_tree = None + IDENT332_tree = None + COLON333_tree = None + SEMI336_tree = None + SEMI337_tree = None + stream_COLON = RewriteRuleTokenStream(self._adaptor, "token COLON") + stream_RPAREN = RewriteRuleTokenStream(self._adaptor, "token RPAREN") + stream_SYNCHRONIZED = RewriteRuleTokenStream(self._adaptor, "token SYNCHRONIZED") + stream_WHILE = RewriteRuleTokenStream(self._adaptor, "token WHILE") + stream_CONTINUE = RewriteRuleTokenStream(self._adaptor, "token CONTINUE") + stream_SWITCH = RewriteRuleTokenStream(self._adaptor, "token SWITCH") + stream_RCURLY = RewriteRuleTokenStream(self._adaptor, "token RCURLY") + stream_ELSE = RewriteRuleTokenStream(self._adaptor, "token ELSE") + stream_RETURN = RewriteRuleTokenStream(self._adaptor, "token RETURN") + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_FOR = RewriteRuleTokenStream(self._adaptor, "token FOR") + stream_DO = RewriteRuleTokenStream(self._adaptor, "token DO") + stream_LCURLY = RewriteRuleTokenStream(self._adaptor, "token LCURLY") + stream_SEMI = RewriteRuleTokenStream(self._adaptor, "token SEMI") + stream_ASSERT = RewriteRuleTokenStream(self._adaptor, "token ASSERT") + stream_BREAK = RewriteRuleTokenStream(self._adaptor, "token BREAK") + stream_THROW = RewriteRuleTokenStream(self._adaptor, "token THROW") + stream_TRY = RewriteRuleTokenStream(self._adaptor, "token TRY") + stream_LPAREN = RewriteRuleTokenStream(self._adaptor, "token LPAREN") + stream_IF = RewriteRuleTokenStream(self._adaptor, "token IF") + stream_statement = RewriteRuleSubtreeStream(self._adaptor, "rule statement") + stream_expression = RewriteRuleSubtreeStream(self._adaptor, "rule expression") + stream_finallyClause = RewriteRuleSubtreeStream(self._adaptor, "rule finallyClause") + stream_catches = RewriteRuleSubtreeStream(self._adaptor, "rule catches") + stream_forUpdater = RewriteRuleSubtreeStream(self._adaptor, "rule forUpdater") + stream_block = RewriteRuleSubtreeStream(self._adaptor, "rule block") + stream_forCondition = RewriteRuleSubtreeStream(self._adaptor, "rule forCondition") + stream_localModifierList = RewriteRuleSubtreeStream(self._adaptor, "rule localModifierList") + stream_forInit = RewriteRuleSubtreeStream(self._adaptor, "rule forInit") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + stream_switchBlockLabels = RewriteRuleSubtreeStream(self._adaptor, "rule switchBlockLabels") + stream_parenthesizedExpression = RewriteRuleSubtreeStream(self._adaptor, "rule parenthesizedExpression") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 75): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:656:5: ( block | ASSERT expr1= expression ( COLON expr2= expression SEMI -> ^( ASSERT $expr1 $expr2) | SEMI -> ^( ASSERT $expr1) ) | IF parenthesizedExpression ifStat= statement ( ELSE elseStat= statement -> ^( IF parenthesizedExpression $ifStat $elseStat) | -> ^( IF parenthesizedExpression $ifStat) ) | FOR LPAREN ( forInit SEMI forCondition SEMI forUpdater RPAREN statement -> ^( FOR forInit forCondition forUpdater statement ) | localModifierList type IDENT COLON expression RPAREN statement -> ^( FOR_EACH[$FOR, \"FOR_EACH\"] localModifierList type IDENT expression statement ) ) | WHILE parenthesizedExpression statement -> ^( WHILE parenthesizedExpression statement ) | DO statement WHILE parenthesizedExpression SEMI -> ^( DO statement parenthesizedExpression ) | TRY block ( catches ( finallyClause )? | finallyClause ) -> ^( TRY block ( catches )? ( finallyClause )? ) | SWITCH parenthesizedExpression LCURLY ( switchBlockLabels )? RCURLY -> ^( SWITCH parenthesizedExpression ( switchBlockLabels )? ) | SYNCHRONIZED parenthesizedExpression block -> ^( SYNCHRONIZED parenthesizedExpression block ) | RETURN ( expression )? SEMI -> ^( RETURN ( expression )? ) | THROW expression SEMI -> ^( THROW expression ) | BREAK ( IDENT )? SEMI -> ^( BREAK ( IDENT )? ) | CONTINUE ( IDENT )? SEMI -> ^( CONTINUE ( IDENT )? ) | IDENT COLON statement -> ^( LABELED_STATEMENT IDENT statement ) | expression SEMI | SEMI ) + alt98 = 16 + alt98 = self.dfa98.predict(self.input) + if alt98 == 1: + # Java.g:656:9: block + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_block_in_statement8527) + block275 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, block275.tree) + + + elif alt98 == 2: + # Java.g:657:9: ASSERT expr1= expression ( COLON expr2= expression SEMI -> ^( ASSERT $expr1 $expr2) | SEMI -> ^( ASSERT $expr1) ) + pass + ASSERT276=self.match(self.input, ASSERT, self.FOLLOW_ASSERT_in_statement8537) + if self._state.backtracking == 0: + stream_ASSERT.add(ASSERT276) + self._state.following.append(self.FOLLOW_expression_in_statement8541) + expr1 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expression.add(expr1.tree) + # Java.g:658:9: ( COLON expr2= expression SEMI -> ^( ASSERT $expr1 $expr2) | SEMI -> ^( ASSERT $expr1) ) + alt89 = 2 + LA89_0 = self.input.LA(1) + + if (LA89_0 == COLON) : + alt89 = 1 + elif (LA89_0 == SEMI) : + alt89 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 89, 0, self.input) + + raise nvae + + if alt89 == 1: + # Java.g:658:13: COLON expr2= expression SEMI + pass + COLON277=self.match(self.input, COLON, self.FOLLOW_COLON_in_statement8555) + if self._state.backtracking == 0: + stream_COLON.add(COLON277) + self._state.following.append(self.FOLLOW_expression_in_statement8559) + expr2 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expression.add(expr2.tree) + SEMI278=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement8561) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI278) + + # AST Rewrite + # elements: ASSERT, expr1, expr2 + # token labels: + # rule labels: retval, expr1, expr2 + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + if expr1 is not None: + stream_expr1 = RewriteRuleSubtreeStream(self._adaptor, "rule expr1", expr1.tree) + else: + stream_expr1 = RewriteRuleSubtreeStream(self._adaptor, "token expr1", None) + + + if expr2 is not None: + stream_expr2 = RewriteRuleSubtreeStream(self._adaptor, "rule expr2", expr2.tree) + else: + stream_expr2 = RewriteRuleSubtreeStream(self._adaptor, "token expr2", None) + + + root_0 = self._adaptor.nil() + # 658:77: -> ^( ASSERT $expr1 $expr2) + # Java.g:658:81: ^( ASSERT $expr1 $expr2) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_ASSERT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_expr1.nextTree()) + self._adaptor.addChild(root_1, stream_expr2.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt89 == 2: + # Java.g:659:13: SEMI + pass + SEMI279=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement8624) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI279) + + # AST Rewrite + # elements: expr1, ASSERT + # token labels: + # rule labels: retval, expr1 + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + if expr1 is not None: + stream_expr1 = RewriteRuleSubtreeStream(self._adaptor, "rule expr1", expr1.tree) + else: + stream_expr1 = RewriteRuleSubtreeStream(self._adaptor, "token expr1", None) + + + root_0 = self._adaptor.nil() + # 659:77: -> ^( ASSERT $expr1) + # Java.g:659:81: ^( ASSERT $expr1) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_ASSERT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_expr1.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt98 == 3: + # Java.g:661:9: IF parenthesizedExpression ifStat= statement ( ELSE elseStat= statement -> ^( IF parenthesizedExpression $ifStat $elseStat) | -> ^( IF parenthesizedExpression $ifStat) ) + pass + IF280=self.match(self.input, IF, self.FOLLOW_IF_in_statement8713) + if self._state.backtracking == 0: + stream_IF.add(IF280) + self._state.following.append(self.FOLLOW_parenthesizedExpression_in_statement8715) + parenthesizedExpression281 = self.parenthesizedExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_parenthesizedExpression.add(parenthesizedExpression281.tree) + self._state.following.append(self.FOLLOW_statement_in_statement8719) + ifStat = self.statement() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_statement.add(ifStat.tree) + # Java.g:662:9: ( ELSE elseStat= statement -> ^( IF parenthesizedExpression $ifStat $elseStat) | -> ^( IF parenthesizedExpression $ifStat) ) + alt90 = 2 + LA90_0 = self.input.LA(1) + + if (LA90_0 == ELSE) : + LA90_1 = self.input.LA(2) + + if (self.synpred121_Java()) : + alt90 = 1 + elif (True) : + alt90 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 90, 1, self.input) + + raise nvae + + elif (LA90_0 == EOF or LA90_0 == AT or LA90_0 == DEC or LA90_0 == INC or LA90_0 == LCURLY or LA90_0 == LESS_THAN or LA90_0 == LOGICAL_NOT or (LPAREN <= LA90_0 <= MINUS) or LA90_0 == NOT or LA90_0 == PLUS or LA90_0 == RCURLY or LA90_0 == SEMI or (ABSTRACT <= LA90_0 <= CASE) or (CHAR <= LA90_0 <= DOUBLE) or LA90_0 == ENUM or (FALSE <= LA90_0 <= FINAL) or (FLOAT <= LA90_0 <= IF) or LA90_0 == INTERFACE or (INT <= LA90_0 <= NULL) or (PRIVATE <= LA90_0 <= THROW) or (TRANSIENT <= LA90_0 <= WHILE) or (IDENT <= LA90_0 <= STRING_LITERAL)) : + alt90 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 90, 0, self.input) + + raise nvae + + if alt90 == 1: + # Java.g:662:13: ELSE elseStat= statement + pass + ELSE282=self.match(self.input, ELSE, self.FOLLOW_ELSE_in_statement8733) + if self._state.backtracking == 0: + stream_ELSE.add(ELSE282) + self._state.following.append(self.FOLLOW_statement_in_statement8737) + elseStat = self.statement() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_statement.add(elseStat.tree) + + # AST Rewrite + # elements: elseStat, ifStat, parenthesizedExpression, IF + # token labels: + # rule labels: retval, ifStat, elseStat + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + if ifStat is not None: + stream_ifStat = RewriteRuleSubtreeStream(self._adaptor, "rule ifStat", ifStat.tree) + else: + stream_ifStat = RewriteRuleSubtreeStream(self._adaptor, "token ifStat", None) + + + if elseStat is not None: + stream_elseStat = RewriteRuleSubtreeStream(self._adaptor, "rule elseStat", elseStat.tree) + else: + stream_elseStat = RewriteRuleSubtreeStream(self._adaptor, "token elseStat", None) + + + root_0 = self._adaptor.nil() + # 662:77: -> ^( IF parenthesizedExpression $ifStat $elseStat) + # Java.g:662:81: ^( IF parenthesizedExpression $ifStat $elseStat) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_IF.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_parenthesizedExpression.nextTree()) + self._adaptor.addChild(root_1, stream_ifStat.nextTree()) + self._adaptor.addChild(root_1, stream_elseStat.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt90 == 2: + # Java.g:663:77: + pass + # AST Rewrite + # elements: parenthesizedExpression, ifStat, IF + # token labels: + # rule labels: retval, ifStat + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + if ifStat is not None: + stream_ifStat = RewriteRuleSubtreeStream(self._adaptor, "rule ifStat", ifStat.tree) + else: + stream_ifStat = RewriteRuleSubtreeStream(self._adaptor, "token ifStat", None) + + + root_0 = self._adaptor.nil() + # 663:77: -> ^( IF parenthesizedExpression $ifStat) + # Java.g:663:81: ^( IF parenthesizedExpression $ifStat) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_IF.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_parenthesizedExpression.nextTree()) + self._adaptor.addChild(root_1, stream_ifStat.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt98 == 4: + # Java.g:665:9: FOR LPAREN ( forInit SEMI forCondition SEMI forUpdater RPAREN statement -> ^( FOR forInit forCondition forUpdater statement ) | localModifierList type IDENT COLON expression RPAREN statement -> ^( FOR_EACH[$FOR, \"FOR_EACH\"] localModifierList type IDENT expression statement ) ) + pass + FOR283=self.match(self.input, FOR, self.FOLLOW_FOR_in_statement8900) + if self._state.backtracking == 0: + stream_FOR.add(FOR283) + LPAREN284=self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_statement8902) + if self._state.backtracking == 0: + stream_LPAREN.add(LPAREN284) + # Java.g:666:9: ( forInit SEMI forCondition SEMI forUpdater RPAREN statement -> ^( FOR forInit forCondition forUpdater statement ) | localModifierList type IDENT COLON expression RPAREN statement -> ^( FOR_EACH[$FOR, \"FOR_EACH\"] localModifierList type IDENT expression statement ) ) + alt91 = 2 + alt91 = self.dfa91.predict(self.input) + if alt91 == 1: + # Java.g:666:13: forInit SEMI forCondition SEMI forUpdater RPAREN statement + pass + self._state.following.append(self.FOLLOW_forInit_in_statement8916) + forInit285 = self.forInit() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_forInit.add(forInit285.tree) + SEMI286=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement8918) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI286) + self._state.following.append(self.FOLLOW_forCondition_in_statement8920) + forCondition287 = self.forCondition() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_forCondition.add(forCondition287.tree) + SEMI288=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement8922) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI288) + self._state.following.append(self.FOLLOW_forUpdater_in_statement8924) + forUpdater289 = self.forUpdater() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_forUpdater.add(forUpdater289.tree) + RPAREN290=self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_statement8926) + if self._state.backtracking == 0: + stream_RPAREN.add(RPAREN290) + self._state.following.append(self.FOLLOW_statement_in_statement8928) + statement291 = self.statement() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_statement.add(statement291.tree) + + # AST Rewrite + # elements: forInit, forUpdater, FOR, statement, forCondition + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 666:77: -> ^( FOR forInit forCondition forUpdater statement ) + # Java.g:666:81: ^( FOR forInit forCondition forUpdater statement ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_FOR.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_forInit.nextTree()) + self._adaptor.addChild(root_1, stream_forCondition.nextTree()) + self._adaptor.addChild(root_1, stream_forUpdater.nextTree()) + self._adaptor.addChild(root_1, stream_statement.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt91 == 2: + # Java.g:667:13: localModifierList type IDENT COLON expression RPAREN statement + pass + self._state.following.append(self.FOLLOW_localModifierList_in_statement8962) + localModifierList292 = self.localModifierList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_localModifierList.add(localModifierList292.tree) + self._state.following.append(self.FOLLOW_type_in_statement8964) + type293 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type293.tree) + IDENT294=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_statement8966) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT294) + COLON295=self.match(self.input, COLON, self.FOLLOW_COLON_in_statement8968) + if self._state.backtracking == 0: + stream_COLON.add(COLON295) + self._state.following.append(self.FOLLOW_expression_in_statement8970) + expression296 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expression.add(expression296.tree) + RPAREN297=self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_statement8972) + if self._state.backtracking == 0: + stream_RPAREN.add(RPAREN297) + self._state.following.append(self.FOLLOW_statement_in_statement8974) + statement298 = self.statement() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_statement.add(statement298.tree) + + # AST Rewrite + # elements: IDENT, expression, localModifierList, type, statement + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 668:77: -> ^( FOR_EACH[$FOR, \"FOR_EACH\"] localModifierList type IDENT expression statement ) + # Java.g:668:81: ^( FOR_EACH[$FOR, \"FOR_EACH\"] localModifierList type IDENT expression statement ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(FOR_EACH, FOR283, "FOR_EACH"), root_1) + + self._adaptor.addChild(root_1, stream_localModifierList.nextTree()) + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + self._adaptor.addChild(root_1, stream_expression.nextTree()) + self._adaptor.addChild(root_1, stream_statement.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt98 == 5: + # Java.g:670:9: WHILE parenthesizedExpression statement + pass + WHILE299=self.match(self.input, WHILE, self.FOLLOW_WHILE_in_statement9088) + if self._state.backtracking == 0: + stream_WHILE.add(WHILE299) + self._state.following.append(self.FOLLOW_parenthesizedExpression_in_statement9090) + parenthesizedExpression300 = self.parenthesizedExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_parenthesizedExpression.add(parenthesizedExpression300.tree) + self._state.following.append(self.FOLLOW_statement_in_statement9092) + statement301 = self.statement() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_statement.add(statement301.tree) + + # AST Rewrite + # elements: statement, WHILE, parenthesizedExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 670:77: -> ^( WHILE parenthesizedExpression statement ) + # Java.g:670:81: ^( WHILE parenthesizedExpression statement ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_WHILE.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_parenthesizedExpression.nextTree()) + self._adaptor.addChild(root_1, stream_statement.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 6: + # Java.g:671:9: DO statement WHILE parenthesizedExpression SEMI + pass + DO302=self.match(self.input, DO, self.FOLLOW_DO_in_statement9141) + if self._state.backtracking == 0: + stream_DO.add(DO302) + self._state.following.append(self.FOLLOW_statement_in_statement9143) + statement303 = self.statement() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_statement.add(statement303.tree) + WHILE304=self.match(self.input, WHILE, self.FOLLOW_WHILE_in_statement9145) + if self._state.backtracking == 0: + stream_WHILE.add(WHILE304) + self._state.following.append(self.FOLLOW_parenthesizedExpression_in_statement9147) + parenthesizedExpression305 = self.parenthesizedExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_parenthesizedExpression.add(parenthesizedExpression305.tree) + SEMI306=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement9149) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI306) + + # AST Rewrite + # elements: DO, parenthesizedExpression, statement + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 671:77: -> ^( DO statement parenthesizedExpression ) + # Java.g:671:81: ^( DO statement parenthesizedExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DO.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_statement.nextTree()) + self._adaptor.addChild(root_1, stream_parenthesizedExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 7: + # Java.g:672:9: TRY block ( catches ( finallyClause )? | finallyClause ) + pass + TRY307=self.match(self.input, TRY, self.FOLLOW_TRY_in_statement9190) + if self._state.backtracking == 0: + stream_TRY.add(TRY307) + self._state.following.append(self.FOLLOW_block_in_statement9192) + block308 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_block.add(block308.tree) + # Java.g:672:19: ( catches ( finallyClause )? | finallyClause ) + alt93 = 2 + LA93_0 = self.input.LA(1) + + if (LA93_0 == CATCH) : + alt93 = 1 + elif (LA93_0 == FINALLY) : + alt93 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 93, 0, self.input) + + raise nvae + + if alt93 == 1: + # Java.g:672:20: catches ( finallyClause )? + pass + self._state.following.append(self.FOLLOW_catches_in_statement9195) + catches309 = self.catches() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_catches.add(catches309.tree) + # Java.g:672:28: ( finallyClause )? + alt92 = 2 + LA92_0 = self.input.LA(1) + + if (LA92_0 == FINALLY) : + alt92 = 1 + if alt92 == 1: + # Java.g:0:0: finallyClause + pass + self._state.following.append(self.FOLLOW_finallyClause_in_statement9197) + finallyClause310 = self.finallyClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_finallyClause.add(finallyClause310.tree) + + + + + + elif alt93 == 2: + # Java.g:672:45: finallyClause + pass + self._state.following.append(self.FOLLOW_finallyClause_in_statement9202) + finallyClause311 = self.finallyClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_finallyClause.add(finallyClause311.tree) + + + + + # AST Rewrite + # elements: block, finallyClause, catches, TRY + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 672:77: -> ^( TRY block ( catches )? ( finallyClause )? ) + # Java.g:672:81: ^( TRY block ( catches )? ( finallyClause )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_TRY.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_block.nextTree()) + # Java.g:672:93: ( catches )? + if stream_catches.hasNext(): + self._adaptor.addChild(root_1, stream_catches.nextTree()) + + + stream_catches.reset(); + # Java.g:672:102: ( finallyClause )? + if stream_finallyClause.hasNext(): + self._adaptor.addChild(root_1, stream_finallyClause.nextTree()) + + + stream_finallyClause.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 8: + # Java.g:673:9: SWITCH parenthesizedExpression LCURLY ( switchBlockLabels )? RCURLY + pass + SWITCH312=self.match(self.input, SWITCH, self.FOLLOW_SWITCH_in_statement9245) + if self._state.backtracking == 0: + stream_SWITCH.add(SWITCH312) + self._state.following.append(self.FOLLOW_parenthesizedExpression_in_statement9247) + parenthesizedExpression313 = self.parenthesizedExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_parenthesizedExpression.add(parenthesizedExpression313.tree) + LCURLY314=self.match(self.input, LCURLY, self.FOLLOW_LCURLY_in_statement9249) + if self._state.backtracking == 0: + stream_LCURLY.add(LCURLY314) + # Java.g:673:47: ( switchBlockLabels )? + alt94 = 2 + LA94_0 = self.input.LA(1) + + if (LA94_0 == CASE or LA94_0 == DEFAULT) : + alt94 = 1 + elif (LA94_0 == RCURLY) : + LA94_2 = self.input.LA(2) + + if (self.synpred130_Java()) : + alt94 = 1 + if alt94 == 1: + # Java.g:0:0: switchBlockLabels + pass + self._state.following.append(self.FOLLOW_switchBlockLabels_in_statement9251) + switchBlockLabels315 = self.switchBlockLabels() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_switchBlockLabels.add(switchBlockLabels315.tree) + + + + RCURLY316=self.match(self.input, RCURLY, self.FOLLOW_RCURLY_in_statement9254) + if self._state.backtracking == 0: + stream_RCURLY.add(RCURLY316) + + # AST Rewrite + # elements: switchBlockLabels, parenthesizedExpression, SWITCH + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 673:78: -> ^( SWITCH parenthesizedExpression ( switchBlockLabels )? ) + # Java.g:673:82: ^( SWITCH parenthesizedExpression ( switchBlockLabels )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_SWITCH.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_parenthesizedExpression.nextTree()) + # Java.g:673:115: ( switchBlockLabels )? + if stream_switchBlockLabels.hasNext(): + self._adaptor.addChild(root_1, stream_switchBlockLabels.nextTree()) + + + stream_switchBlockLabels.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 9: + # Java.g:674:9: SYNCHRONIZED parenthesizedExpression block + pass + SYNCHRONIZED317=self.match(self.input, SYNCHRONIZED, self.FOLLOW_SYNCHRONIZED_in_statement9281) + if self._state.backtracking == 0: + stream_SYNCHRONIZED.add(SYNCHRONIZED317) + self._state.following.append(self.FOLLOW_parenthesizedExpression_in_statement9283) + parenthesizedExpression318 = self.parenthesizedExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_parenthesizedExpression.add(parenthesizedExpression318.tree) + self._state.following.append(self.FOLLOW_block_in_statement9285) + block319 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_block.add(block319.tree) + + # AST Rewrite + # elements: SYNCHRONIZED, block, parenthesizedExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 674:77: -> ^( SYNCHRONIZED parenthesizedExpression block ) + # Java.g:674:81: ^( SYNCHRONIZED parenthesizedExpression block ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_SYNCHRONIZED.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_parenthesizedExpression.nextTree()) + self._adaptor.addChild(root_1, stream_block.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 10: + # Java.g:675:9: RETURN ( expression )? SEMI + pass + RETURN320=self.match(self.input, RETURN, self.FOLLOW_RETURN_in_statement9331) + if self._state.backtracking == 0: + stream_RETURN.add(RETURN320) + # Java.g:675:16: ( expression )? + alt95 = 2 + LA95_0 = self.input.LA(1) + + if (LA95_0 == DEC or LA95_0 == INC or LA95_0 == LESS_THAN or LA95_0 == LOGICAL_NOT or (LPAREN <= LA95_0 <= MINUS) or LA95_0 == NOT or LA95_0 == PLUS or LA95_0 == BOOLEAN or LA95_0 == BYTE or LA95_0 == CHAR or LA95_0 == DOUBLE or LA95_0 == FALSE or LA95_0 == FLOAT or (INT <= LA95_0 <= LONG) or (NEW <= LA95_0 <= NULL) or LA95_0 == SHORT or LA95_0 == SUPER or LA95_0 == THIS or LA95_0 == TRUE or LA95_0 == VOID or (IDENT <= LA95_0 <= STRING_LITERAL)) : + alt95 = 1 + if alt95 == 1: + # Java.g:0:0: expression + pass + self._state.following.append(self.FOLLOW_expression_in_statement9333) + expression321 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expression.add(expression321.tree) + + + + SEMI322=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement9336) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI322) + + # AST Rewrite + # elements: RETURN, expression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 675:77: -> ^( RETURN ( expression )? ) + # Java.g:675:81: ^( RETURN ( expression )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_RETURN.nextNode(), root_1) + + # Java.g:675:90: ( expression )? + if stream_expression.hasNext(): + self._adaptor.addChild(root_1, stream_expression.nextTree()) + + + stream_expression.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 11: + # Java.g:676:9: THROW expression SEMI + pass + THROW323=self.match(self.input, THROW, self.FOLLOW_THROW_in_statement9400) + if self._state.backtracking == 0: + stream_THROW.add(THROW323) + self._state.following.append(self.FOLLOW_expression_in_statement9402) + expression324 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expression.add(expression324.tree) + SEMI325=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement9404) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI325) + + # AST Rewrite + # elements: expression, THROW + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 676:77: -> ^( THROW expression ) + # Java.g:676:81: ^( THROW expression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_THROW.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_expression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 12: + # Java.g:677:9: BREAK ( IDENT )? SEMI + pass + BREAK326=self.match(self.input, BREAK, self.FOLLOW_BREAK_in_statement9469) + if self._state.backtracking == 0: + stream_BREAK.add(BREAK326) + # Java.g:677:15: ( IDENT )? + alt96 = 2 + LA96_0 = self.input.LA(1) + + if (LA96_0 == IDENT) : + alt96 = 1 + if alt96 == 1: + # Java.g:0:0: IDENT + pass + IDENT327=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_statement9471) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT327) + + + + SEMI328=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement9474) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI328) + + # AST Rewrite + # elements: BREAK, IDENT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 677:77: -> ^( BREAK ( IDENT )? ) + # Java.g:677:81: ^( BREAK ( IDENT )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_BREAK.nextNode(), root_1) + + # Java.g:677:89: ( IDENT )? + if stream_IDENT.hasNext(): + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + + + stream_IDENT.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 13: + # Java.g:678:9: CONTINUE ( IDENT )? SEMI + pass + CONTINUE329=self.match(self.input, CONTINUE, self.FOLLOW_CONTINUE_in_statement9544) + if self._state.backtracking == 0: + stream_CONTINUE.add(CONTINUE329) + # Java.g:678:18: ( IDENT )? + alt97 = 2 + LA97_0 = self.input.LA(1) + + if (LA97_0 == IDENT) : + alt97 = 1 + if alt97 == 1: + # Java.g:0:0: IDENT + pass + IDENT330=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_statement9546) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT330) + + + + SEMI331=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement9549) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI331) + + # AST Rewrite + # elements: CONTINUE, IDENT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 678:77: -> ^( CONTINUE ( IDENT )? ) + # Java.g:678:81: ^( CONTINUE ( IDENT )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_CONTINUE.nextNode(), root_1) + + # Java.g:678:92: ( IDENT )? + if stream_IDENT.hasNext(): + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + + + stream_IDENT.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 14: + # Java.g:679:9: IDENT COLON statement + pass + IDENT332=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_statement9616) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT332) + COLON333=self.match(self.input, COLON, self.FOLLOW_COLON_in_statement9618) + if self._state.backtracking == 0: + stream_COLON.add(COLON333) + self._state.following.append(self.FOLLOW_statement_in_statement9620) + statement334 = self.statement() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_statement.add(statement334.tree) + + # AST Rewrite + # elements: statement, IDENT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 679:77: -> ^( LABELED_STATEMENT IDENT statement ) + # Java.g:679:81: ^( LABELED_STATEMENT IDENT statement ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(LABELED_STATEMENT, "LABELED_STATEMENT"), root_1) + + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + self._adaptor.addChild(root_1, stream_statement.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 15: + # Java.g:680:9: expression SEMI + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_expression_in_statement9687) + expression335 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, expression335.tree) + SEMI336=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement9689) + + + elif alt98 == 16: + # Java.g:681:9: SEMI + pass + root_0 = self._adaptor.nil() + + SEMI337=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement9700) + if self._state.backtracking == 0: + + SEMI337_tree = self._adaptor.createWithPayload(SEMI337) + self._adaptor.addChild(root_0, SEMI337_tree) + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 75, statement_StartIndex, success) + + pass + return retval + + # $ANTLR end "statement" + + class catches_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.catches_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "catches" + # Java.g:684:1: catches : ( catchClause )+ -> ^( CATCH_CLAUSE_LIST ( catchClause )+ ) ; + def catches(self, ): + + retval = self.catches_return() + retval.start = self.input.LT(1) + catches_StartIndex = self.input.index() + root_0 = None + + catchClause338 = None + + + stream_catchClause = RewriteRuleSubtreeStream(self._adaptor, "rule catchClause") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 76): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:685:5: ( ( catchClause )+ -> ^( CATCH_CLAUSE_LIST ( catchClause )+ ) ) + # Java.g:685:9: ( catchClause )+ + pass + # Java.g:685:9: ( catchClause )+ + cnt99 = 0 + while True: #loop99 + alt99 = 2 + LA99_0 = self.input.LA(1) + + if (LA99_0 == CATCH) : + alt99 = 1 + + + if alt99 == 1: + # Java.g:0:0: catchClause + pass + self._state.following.append(self.FOLLOW_catchClause_in_catches9720) + catchClause338 = self.catchClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_catchClause.add(catchClause338.tree) + + + else: + if cnt99 >= 1: + break #loop99 + + if self._state.backtracking > 0: + raise BacktrackingFailed + + eee = EarlyExitException(99, self.input) + raise eee + + cnt99 += 1 + + # AST Rewrite + # elements: catchClause + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 686:9: -> ^( CATCH_CLAUSE_LIST ( catchClause )+ ) + # Java.g:686:13: ^( CATCH_CLAUSE_LIST ( catchClause )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(CATCH_CLAUSE_LIST, "CATCH_CLAUSE_LIST"), root_1) + + # Java.g:686:33: ( catchClause )+ + if not (stream_catchClause.hasNext()): + raise RewriteEarlyExitException() + + while stream_catchClause.hasNext(): + self._adaptor.addChild(root_1, stream_catchClause.nextTree()) + + + stream_catchClause.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 76, catches_StartIndex, success) + + pass + return retval + + # $ANTLR end "catches" + + class catchClause_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.catchClause_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "catchClause" + # Java.g:689:1: catchClause : CATCH LPAREN formalParameterStandardDecl RPAREN block ; + def catchClause(self, ): + + retval = self.catchClause_return() + retval.start = self.input.LT(1) + catchClause_StartIndex = self.input.index() + root_0 = None + + CATCH339 = None + LPAREN340 = None + RPAREN342 = None + formalParameterStandardDecl341 = None + + block343 = None + + + CATCH339_tree = None + LPAREN340_tree = None + RPAREN342_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 77): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:690:5: ( CATCH LPAREN formalParameterStandardDecl RPAREN block ) + # Java.g:690:9: CATCH LPAREN formalParameterStandardDecl RPAREN block + pass + root_0 = self._adaptor.nil() + + CATCH339=self.match(self.input, CATCH, self.FOLLOW_CATCH_in_catchClause9758) + if self._state.backtracking == 0: + + CATCH339_tree = self._adaptor.createWithPayload(CATCH339) + root_0 = self._adaptor.becomeRoot(CATCH339_tree, root_0) + + LPAREN340=self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_catchClause9761) + self._state.following.append(self.FOLLOW_formalParameterStandardDecl_in_catchClause9764) + formalParameterStandardDecl341 = self.formalParameterStandardDecl() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, formalParameterStandardDecl341.tree) + RPAREN342=self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_catchClause9766) + self._state.following.append(self.FOLLOW_block_in_catchClause9769) + block343 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, block343.tree) + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 77, catchClause_StartIndex, success) + + pass + return retval + + # $ANTLR end "catchClause" + + class finallyClause_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.finallyClause_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "finallyClause" + # Java.g:693:1: finallyClause : FINALLY block -> block ; + def finallyClause(self, ): + + retval = self.finallyClause_return() + retval.start = self.input.LT(1) + finallyClause_StartIndex = self.input.index() + root_0 = None + + FINALLY344 = None + block345 = None + + + FINALLY344_tree = None + stream_FINALLY = RewriteRuleTokenStream(self._adaptor, "token FINALLY") + stream_block = RewriteRuleSubtreeStream(self._adaptor, "rule block") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 78): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:694:5: ( FINALLY block -> block ) + # Java.g:694:9: FINALLY block + pass + FINALLY344=self.match(self.input, FINALLY, self.FOLLOW_FINALLY_in_finallyClause9788) + if self._state.backtracking == 0: + stream_FINALLY.add(FINALLY344) + self._state.following.append(self.FOLLOW_block_in_finallyClause9790) + block345 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_block.add(block345.tree) + + # AST Rewrite + # elements: block + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 695:9: -> block + self._adaptor.addChild(root_0, stream_block.nextTree()) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 78, finallyClause_StartIndex, success) + + pass + return retval + + # $ANTLR end "finallyClause" + + class switchBlockLabels_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.switchBlockLabels_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "switchBlockLabels" + # Java.g:698:1: switchBlockLabels : (c0= switchCaseLabels )? ( switchDefaultLabel )? (c1= switchCaseLabels )? -> ^( SWITCH_BLOCK_LABEL_LIST ( $c0)? ( switchDefaultLabel )? ( $c1)? ) ; + def switchBlockLabels(self, ): + + retval = self.switchBlockLabels_return() + retval.start = self.input.LT(1) + switchBlockLabels_StartIndex = self.input.index() + root_0 = None + + c0 = None + + c1 = None + + switchDefaultLabel346 = None + + + stream_switchDefaultLabel = RewriteRuleSubtreeStream(self._adaptor, "rule switchDefaultLabel") + stream_switchCaseLabels = RewriteRuleSubtreeStream(self._adaptor, "rule switchCaseLabels") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 79): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:702:5: ( (c0= switchCaseLabels )? ( switchDefaultLabel )? (c1= switchCaseLabels )? -> ^( SWITCH_BLOCK_LABEL_LIST ( $c0)? ( switchDefaultLabel )? ( $c1)? ) ) + # Java.g:702:9: (c0= switchCaseLabels )? ( switchDefaultLabel )? (c1= switchCaseLabels )? + pass + # Java.g:702:11: (c0= switchCaseLabels )? + alt100 = 2 + LA100 = self.input.LA(1) + if LA100 == CASE: + LA100_1 = self.input.LA(2) + + if (self.synpred143_Java()) : + alt100 = 1 + elif LA100 == DEFAULT: + LA100_2 = self.input.LA(2) + + if (self.synpred143_Java()) : + alt100 = 1 + elif LA100 == RCURLY: + LA100_3 = self.input.LA(2) + + if (self.synpred143_Java()) : + alt100 = 1 + elif LA100 == EOF: + LA100_4 = self.input.LA(2) + + if (self.synpred143_Java()) : + alt100 = 1 + if alt100 == 1: + # Java.g:0:0: c0= switchCaseLabels + pass + self._state.following.append(self.FOLLOW_switchCaseLabels_in_switchBlockLabels9839) + c0 = self.switchCaseLabels() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_switchCaseLabels.add(c0.tree) + + + + # Java.g:702:30: ( switchDefaultLabel )? + alt101 = 2 + LA101_0 = self.input.LA(1) + + if (LA101_0 == DEFAULT) : + alt101 = 1 + if alt101 == 1: + # Java.g:0:0: switchDefaultLabel + pass + self._state.following.append(self.FOLLOW_switchDefaultLabel_in_switchBlockLabels9842) + switchDefaultLabel346 = self.switchDefaultLabel() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_switchDefaultLabel.add(switchDefaultLabel346.tree) + + + + # Java.g:702:52: (c1= switchCaseLabels )? + alt102 = 2 + LA102 = self.input.LA(1) + if LA102 == CASE: + alt102 = 1 + elif LA102 == RCURLY: + LA102_2 = self.input.LA(2) + + if (self.synpred145_Java()) : + alt102 = 1 + elif LA102 == EOF: + LA102_3 = self.input.LA(2) + + if (self.synpred145_Java()) : + alt102 = 1 + if alt102 == 1: + # Java.g:0:0: c1= switchCaseLabels + pass + self._state.following.append(self.FOLLOW_switchCaseLabels_in_switchBlockLabels9847) + c1 = self.switchCaseLabels() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_switchCaseLabels.add(c1.tree) + + + + + # AST Rewrite + # elements: c0, switchDefaultLabel, c1 + # token labels: + # rule labels: retval, c1, c0 + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + if c1 is not None: + stream_c1 = RewriteRuleSubtreeStream(self._adaptor, "rule c1", c1.tree) + else: + stream_c1 = RewriteRuleSubtreeStream(self._adaptor, "token c1", None) + + + if c0 is not None: + stream_c0 = RewriteRuleSubtreeStream(self._adaptor, "rule c0", c0.tree) + else: + stream_c0 = RewriteRuleSubtreeStream(self._adaptor, "token c0", None) + + + root_0 = self._adaptor.nil() + # 703:9: -> ^( SWITCH_BLOCK_LABEL_LIST ( $c0)? ( switchDefaultLabel )? ( $c1)? ) + # Java.g:703:13: ^( SWITCH_BLOCK_LABEL_LIST ( $c0)? ( switchDefaultLabel )? ( $c1)? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(SWITCH_BLOCK_LABEL_LIST, "SWITCH_BLOCK_LABEL_LIST"), root_1) + + # Java.g:703:39: ( $c0)? + if stream_c0.hasNext(): + self._adaptor.addChild(root_1, stream_c0.nextTree()) + + + stream_c0.reset(); + # Java.g:703:44: ( switchDefaultLabel )? + if stream_switchDefaultLabel.hasNext(): + self._adaptor.addChild(root_1, stream_switchDefaultLabel.nextTree()) + + + stream_switchDefaultLabel.reset(); + # Java.g:703:64: ( $c1)? + if stream_c1.hasNext(): + self._adaptor.addChild(root_1, stream_c1.nextTree()) + + + stream_c1.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 79, switchBlockLabels_StartIndex, success) + + pass + return retval + + # $ANTLR end "switchBlockLabels" + + class switchCaseLabels_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.switchCaseLabels_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "switchCaseLabels" + # Java.g:706:1: switchCaseLabels : ( switchCaseLabel )* ; + def switchCaseLabels(self, ): + + retval = self.switchCaseLabels_return() + retval.start = self.input.LT(1) + switchCaseLabels_StartIndex = self.input.index() + root_0 = None + + switchCaseLabel347 = None + + + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 80): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:707:5: ( ( switchCaseLabel )* ) + # Java.g:707:9: ( switchCaseLabel )* + pass + root_0 = self._adaptor.nil() + + # Java.g:707:9: ( switchCaseLabel )* + while True: #loop103 + alt103 = 2 + LA103_0 = self.input.LA(1) + + if (LA103_0 == CASE) : + LA103_2 = self.input.LA(2) + + if (self.synpred146_Java()) : + alt103 = 1 + + + + + if alt103 == 1: + # Java.g:0:0: switchCaseLabel + pass + self._state.following.append(self.FOLLOW_switchCaseLabel_in_switchCaseLabels9893) + switchCaseLabel347 = self.switchCaseLabel() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, switchCaseLabel347.tree) + + + else: + break #loop103 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 80, switchCaseLabels_StartIndex, success) + + pass + return retval + + # $ANTLR end "switchCaseLabels" + + class switchCaseLabel_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.switchCaseLabel_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "switchCaseLabel" + # Java.g:710:1: switchCaseLabel : CASE expression COLON ( blockStatement )* ; + def switchCaseLabel(self, ): + + retval = self.switchCaseLabel_return() + retval.start = self.input.LT(1) + switchCaseLabel_StartIndex = self.input.index() + root_0 = None + + CASE348 = None + COLON350 = None + expression349 = None + + blockStatement351 = None + + + CASE348_tree = None + COLON350_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 81): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:711:5: ( CASE expression COLON ( blockStatement )* ) + # Java.g:711:9: CASE expression COLON ( blockStatement )* + pass + root_0 = self._adaptor.nil() + + CASE348=self.match(self.input, CASE, self.FOLLOW_CASE_in_switchCaseLabel9913) + if self._state.backtracking == 0: + + CASE348_tree = self._adaptor.createWithPayload(CASE348) + root_0 = self._adaptor.becomeRoot(CASE348_tree, root_0) + + self._state.following.append(self.FOLLOW_expression_in_switchCaseLabel9916) + expression349 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, expression349.tree) + COLON350=self.match(self.input, COLON, self.FOLLOW_COLON_in_switchCaseLabel9918) + # Java.g:711:33: ( blockStatement )* + while True: #loop104 + alt104 = 2 + LA104_0 = self.input.LA(1) + + if (LA104_0 == AT or LA104_0 == DEC or LA104_0 == INC or LA104_0 == LCURLY or LA104_0 == LESS_THAN or LA104_0 == LOGICAL_NOT or (LPAREN <= LA104_0 <= MINUS) or LA104_0 == NOT or LA104_0 == PLUS or LA104_0 == SEMI or (ABSTRACT <= LA104_0 <= BYTE) or (CHAR <= LA104_0 <= CONTINUE) or (DO <= LA104_0 <= DOUBLE) or LA104_0 == ENUM or (FALSE <= LA104_0 <= FINAL) or (FLOAT <= LA104_0 <= IF) or LA104_0 == INTERFACE or (INT <= LA104_0 <= NULL) or (PRIVATE <= LA104_0 <= THROW) or (TRANSIENT <= LA104_0 <= WHILE) or (IDENT <= LA104_0 <= STRING_LITERAL)) : + alt104 = 1 + + + if alt104 == 1: + # Java.g:0:0: blockStatement + pass + self._state.following.append(self.FOLLOW_blockStatement_in_switchCaseLabel9921) + blockStatement351 = self.blockStatement() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, blockStatement351.tree) + + + else: + break #loop104 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 81, switchCaseLabel_StartIndex, success) + + pass + return retval + + # $ANTLR end "switchCaseLabel" + + class switchDefaultLabel_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.switchDefaultLabel_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "switchDefaultLabel" + # Java.g:714:1: switchDefaultLabel : DEFAULT COLON ( blockStatement )* ; + def switchDefaultLabel(self, ): + + retval = self.switchDefaultLabel_return() + retval.start = self.input.LT(1) + switchDefaultLabel_StartIndex = self.input.index() + root_0 = None + + DEFAULT352 = None + COLON353 = None + blockStatement354 = None + + + DEFAULT352_tree = None + COLON353_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 82): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:715:5: ( DEFAULT COLON ( blockStatement )* ) + # Java.g:715:9: DEFAULT COLON ( blockStatement )* + pass + root_0 = self._adaptor.nil() + + DEFAULT352=self.match(self.input, DEFAULT, self.FOLLOW_DEFAULT_in_switchDefaultLabel9941) + if self._state.backtracking == 0: + + DEFAULT352_tree = self._adaptor.createWithPayload(DEFAULT352) + root_0 = self._adaptor.becomeRoot(DEFAULT352_tree, root_0) + + COLON353=self.match(self.input, COLON, self.FOLLOW_COLON_in_switchDefaultLabel9944) + # Java.g:715:25: ( blockStatement )* + while True: #loop105 + alt105 = 2 + LA105_0 = self.input.LA(1) + + if (LA105_0 == AT or LA105_0 == DEC or LA105_0 == INC or LA105_0 == LCURLY or LA105_0 == LESS_THAN or LA105_0 == LOGICAL_NOT or (LPAREN <= LA105_0 <= MINUS) or LA105_0 == NOT or LA105_0 == PLUS or LA105_0 == SEMI or (ABSTRACT <= LA105_0 <= BYTE) or (CHAR <= LA105_0 <= CONTINUE) or (DO <= LA105_0 <= DOUBLE) or LA105_0 == ENUM or (FALSE <= LA105_0 <= FINAL) or (FLOAT <= LA105_0 <= IF) or LA105_0 == INTERFACE or (INT <= LA105_0 <= NULL) or (PRIVATE <= LA105_0 <= THROW) or (TRANSIENT <= LA105_0 <= WHILE) or (IDENT <= LA105_0 <= STRING_LITERAL)) : + alt105 = 1 + + + if alt105 == 1: + # Java.g:0:0: blockStatement + pass + self._state.following.append(self.FOLLOW_blockStatement_in_switchDefaultLabel9947) + blockStatement354 = self.blockStatement() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, blockStatement354.tree) + + + else: + break #loop105 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 82, switchDefaultLabel_StartIndex, success) + + pass + return retval + + # $ANTLR end "switchDefaultLabel" + + class forInit_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.forInit_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "forInit" + # Java.g:718:1: forInit : ( localVariableDeclaration -> ^( FOR_INIT localVariableDeclaration ) | expressionList -> ^( FOR_INIT expressionList ) | -> ^( FOR_INIT ) ); + def forInit(self, ): + + retval = self.forInit_return() + retval.start = self.input.LT(1) + forInit_StartIndex = self.input.index() + root_0 = None + + localVariableDeclaration355 = None + + expressionList356 = None + + + stream_expressionList = RewriteRuleSubtreeStream(self._adaptor, "rule expressionList") + stream_localVariableDeclaration = RewriteRuleSubtreeStream(self._adaptor, "rule localVariableDeclaration") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 83): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:719:5: ( localVariableDeclaration -> ^( FOR_INIT localVariableDeclaration ) | expressionList -> ^( FOR_INIT expressionList ) | -> ^( FOR_INIT ) ) + alt106 = 3 + alt106 = self.dfa106.predict(self.input) + if alt106 == 1: + # Java.g:719:9: localVariableDeclaration + pass + self._state.following.append(self.FOLLOW_localVariableDeclaration_in_forInit9967) + localVariableDeclaration355 = self.localVariableDeclaration() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_localVariableDeclaration.add(localVariableDeclaration355.tree) + + # AST Rewrite + # elements: localVariableDeclaration + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 719:37: -> ^( FOR_INIT localVariableDeclaration ) + # Java.g:719:41: ^( FOR_INIT localVariableDeclaration ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(FOR_INIT, "FOR_INIT"), root_1) + + self._adaptor.addChild(root_1, stream_localVariableDeclaration.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt106 == 2: + # Java.g:720:9: expressionList + pass + self._state.following.append(self.FOLLOW_expressionList_in_forInit9989) + expressionList356 = self.expressionList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expressionList.add(expressionList356.tree) + + # AST Rewrite + # elements: expressionList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 720:37: -> ^( FOR_INIT expressionList ) + # Java.g:720:41: ^( FOR_INIT expressionList ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(FOR_INIT, "FOR_INIT"), root_1) + + self._adaptor.addChild(root_1, stream_expressionList.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt106 == 3: + # Java.g:721:37: + pass + # AST Rewrite + # elements: + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 721:37: -> ^( FOR_INIT ) + # Java.g:721:41: ^( FOR_INIT ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(FOR_INIT, "FOR_INIT"), root_1) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 83, forInit_StartIndex, success) + + pass + return retval + + # $ANTLR end "forInit" + + class forCondition_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.forCondition_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "forCondition" + # Java.g:724:1: forCondition : ( expression )? -> ^( FOR_CONDITION ( expression )? ) ; + def forCondition(self, ): + + retval = self.forCondition_return() + retval.start = self.input.LT(1) + forCondition_StartIndex = self.input.index() + root_0 = None + + expression357 = None + + + stream_expression = RewriteRuleSubtreeStream(self._adaptor, "rule expression") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 84): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:725:5: ( ( expression )? -> ^( FOR_CONDITION ( expression )? ) ) + # Java.g:725:9: ( expression )? + pass + # Java.g:725:9: ( expression )? + alt107 = 2 + LA107_0 = self.input.LA(1) + + if (LA107_0 == DEC or LA107_0 == INC or LA107_0 == LESS_THAN or LA107_0 == LOGICAL_NOT or (LPAREN <= LA107_0 <= MINUS) or LA107_0 == NOT or LA107_0 == PLUS or LA107_0 == BOOLEAN or LA107_0 == BYTE or LA107_0 == CHAR or LA107_0 == DOUBLE or LA107_0 == FALSE or LA107_0 == FLOAT or (INT <= LA107_0 <= LONG) or (NEW <= LA107_0 <= NULL) or LA107_0 == SHORT or LA107_0 == SUPER or LA107_0 == THIS or LA107_0 == TRUE or LA107_0 == VOID or (IDENT <= LA107_0 <= STRING_LITERAL)) : + alt107 = 1 + if alt107 == 1: + # Java.g:0:0: expression + pass + self._state.following.append(self.FOLLOW_expression_in_forCondition10073) + expression357 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expression.add(expression357.tree) + + + + + # AST Rewrite + # elements: expression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 726:9: -> ^( FOR_CONDITION ( expression )? ) + # Java.g:726:13: ^( FOR_CONDITION ( expression )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(FOR_CONDITION, "FOR_CONDITION"), root_1) + + # Java.g:726:29: ( expression )? + if stream_expression.hasNext(): + self._adaptor.addChild(root_1, stream_expression.nextTree()) + + + stream_expression.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 84, forCondition_StartIndex, success) + + pass + return retval + + # $ANTLR end "forCondition" + + class forUpdater_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.forUpdater_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "forUpdater" + # Java.g:729:1: forUpdater : ( expressionList )? -> ^( FOR_UPDATE ( expressionList )? ) ; + def forUpdater(self, ): + + retval = self.forUpdater_return() + retval.start = self.input.LT(1) + forUpdater_StartIndex = self.input.index() + root_0 = None + + expressionList358 = None + + + stream_expressionList = RewriteRuleSubtreeStream(self._adaptor, "rule expressionList") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 85): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:730:5: ( ( expressionList )? -> ^( FOR_UPDATE ( expressionList )? ) ) + # Java.g:730:9: ( expressionList )? + pass + # Java.g:730:9: ( expressionList )? + alt108 = 2 + LA108_0 = self.input.LA(1) + + if (LA108_0 == DEC or LA108_0 == INC or LA108_0 == LESS_THAN or LA108_0 == LOGICAL_NOT or (LPAREN <= LA108_0 <= MINUS) or LA108_0 == NOT or LA108_0 == PLUS or LA108_0 == BOOLEAN or LA108_0 == BYTE or LA108_0 == CHAR or LA108_0 == DOUBLE or LA108_0 == FALSE or LA108_0 == FLOAT or (INT <= LA108_0 <= LONG) or (NEW <= LA108_0 <= NULL) or LA108_0 == SHORT or LA108_0 == SUPER or LA108_0 == THIS or LA108_0 == TRUE or LA108_0 == VOID or (IDENT <= LA108_0 <= STRING_LITERAL)) : + alt108 = 1 + if alt108 == 1: + # Java.g:0:0: expressionList + pass + self._state.following.append(self.FOLLOW_expressionList_in_forUpdater10111) + expressionList358 = self.expressionList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expressionList.add(expressionList358.tree) + + + + + # AST Rewrite + # elements: expressionList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 731:9: -> ^( FOR_UPDATE ( expressionList )? ) + # Java.g:731:13: ^( FOR_UPDATE ( expressionList )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(FOR_UPDATE, "FOR_UPDATE"), root_1) + + # Java.g:731:26: ( expressionList )? + if stream_expressionList.hasNext(): + self._adaptor.addChild(root_1, stream_expressionList.nextTree()) + + + stream_expressionList.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 85, forUpdater_StartIndex, success) + + pass + return retval + + # $ANTLR end "forUpdater" + + class parenthesizedExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.parenthesizedExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "parenthesizedExpression" + # Java.g:736:1: parenthesizedExpression : LPAREN expression RPAREN -> ^( PARENTESIZED_EXPR[$LPAREN, \"PARENTESIZED_EXPR\"] expression ) ; + def parenthesizedExpression(self, ): + + retval = self.parenthesizedExpression_return() + retval.start = self.input.LT(1) + parenthesizedExpression_StartIndex = self.input.index() + root_0 = None + + LPAREN359 = None + RPAREN361 = None + expression360 = None + + + LPAREN359_tree = None + RPAREN361_tree = None + stream_RPAREN = RewriteRuleTokenStream(self._adaptor, "token RPAREN") + stream_LPAREN = RewriteRuleTokenStream(self._adaptor, "token LPAREN") + stream_expression = RewriteRuleSubtreeStream(self._adaptor, "rule expression") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 86): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:737:5: ( LPAREN expression RPAREN -> ^( PARENTESIZED_EXPR[$LPAREN, \"PARENTESIZED_EXPR\"] expression ) ) + # Java.g:737:9: LPAREN expression RPAREN + pass + LPAREN359=self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_parenthesizedExpression10151) + if self._state.backtracking == 0: + stream_LPAREN.add(LPAREN359) + self._state.following.append(self.FOLLOW_expression_in_parenthesizedExpression10153) + expression360 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expression.add(expression360.tree) + RPAREN361=self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_parenthesizedExpression10155) + if self._state.backtracking == 0: + stream_RPAREN.add(RPAREN361) + + # AST Rewrite + # elements: expression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 738:9: -> ^( PARENTESIZED_EXPR[$LPAREN, \"PARENTESIZED_EXPR\"] expression ) + # Java.g:738:13: ^( PARENTESIZED_EXPR[$LPAREN, \"PARENTESIZED_EXPR\"] expression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(PARENTESIZED_EXPR, LPAREN359, "PARENTESIZED_EXPR"), root_1) + + self._adaptor.addChild(root_1, stream_expression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 86, parenthesizedExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "parenthesizedExpression" + + class expressionList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.expressionList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "expressionList" + # Java.g:741:1: expressionList : expression ( COMMA expression )* ; + def expressionList(self, ): + + retval = self.expressionList_return() + retval.start = self.input.LT(1) + expressionList_StartIndex = self.input.index() + root_0 = None + + COMMA363 = None + expression362 = None + + expression364 = None + + + COMMA363_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 87): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:742:5: ( expression ( COMMA expression )* ) + # Java.g:742:9: expression ( COMMA expression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_expression_in_expressionList10192) + expression362 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, expression362.tree) + # Java.g:742:20: ( COMMA expression )* + while True: #loop109 + alt109 = 2 + LA109_0 = self.input.LA(1) + + if (LA109_0 == COMMA) : + alt109 = 1 + + + if alt109 == 1: + # Java.g:742:21: COMMA expression + pass + COMMA363=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_expressionList10195) + self._state.following.append(self.FOLLOW_expression_in_expressionList10198) + expression364 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, expression364.tree) + + + else: + break #loop109 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 87, expressionList_StartIndex, success) + + pass + return retval + + # $ANTLR end "expressionList" + + class expression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.expression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "expression" + # Java.g:745:1: expression : assignmentExpression -> ^( EXPR assignmentExpression ) ; + def expression(self, ): + + retval = self.expression_return() + retval.start = self.input.LT(1) + expression_StartIndex = self.input.index() + root_0 = None + + assignmentExpression365 = None + + + stream_assignmentExpression = RewriteRuleSubtreeStream(self._adaptor, "rule assignmentExpression") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 88): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:746:5: ( assignmentExpression -> ^( EXPR assignmentExpression ) ) + # Java.g:746:9: assignmentExpression + pass + self._state.following.append(self.FOLLOW_assignmentExpression_in_expression10219) + assignmentExpression365 = self.assignmentExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_assignmentExpression.add(assignmentExpression365.tree) + + # AST Rewrite + # elements: assignmentExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 747:9: -> ^( EXPR assignmentExpression ) + # Java.g:747:13: ^( EXPR assignmentExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(EXPR, "EXPR"), root_1) + + self._adaptor.addChild(root_1, stream_assignmentExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 88, expression_StartIndex, success) + + pass + return retval + + # $ANTLR end "expression" + + class assignmentExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.assignmentExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "assignmentExpression" + # Java.g:750:1: assignmentExpression : conditionalExpression ( ( ASSIGN | PLUS_ASSIGN | MINUS_ASSIGN | STAR_ASSIGN | DIV_ASSIGN | AND_ASSIGN | OR_ASSIGN | XOR_ASSIGN | MOD_ASSIGN | SHIFT_LEFT_ASSIGN | SHIFT_RIGHT_ASSIGN | BIT_SHIFT_RIGHT_ASSIGN ) assignmentExpression )? ; + def assignmentExpression(self, ): + + retval = self.assignmentExpression_return() + retval.start = self.input.LT(1) + assignmentExpression_StartIndex = self.input.index() + root_0 = None + + ASSIGN367 = None + PLUS_ASSIGN368 = None + MINUS_ASSIGN369 = None + STAR_ASSIGN370 = None + DIV_ASSIGN371 = None + AND_ASSIGN372 = None + OR_ASSIGN373 = None + XOR_ASSIGN374 = None + MOD_ASSIGN375 = None + SHIFT_LEFT_ASSIGN376 = None + SHIFT_RIGHT_ASSIGN377 = None + BIT_SHIFT_RIGHT_ASSIGN378 = None + conditionalExpression366 = None + + assignmentExpression379 = None + + + ASSIGN367_tree = None + PLUS_ASSIGN368_tree = None + MINUS_ASSIGN369_tree = None + STAR_ASSIGN370_tree = None + DIV_ASSIGN371_tree = None + AND_ASSIGN372_tree = None + OR_ASSIGN373_tree = None + XOR_ASSIGN374_tree = None + MOD_ASSIGN375_tree = None + SHIFT_LEFT_ASSIGN376_tree = None + SHIFT_RIGHT_ASSIGN377_tree = None + BIT_SHIFT_RIGHT_ASSIGN378_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 89): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:751:5: ( conditionalExpression ( ( ASSIGN | PLUS_ASSIGN | MINUS_ASSIGN | STAR_ASSIGN | DIV_ASSIGN | AND_ASSIGN | OR_ASSIGN | XOR_ASSIGN | MOD_ASSIGN | SHIFT_LEFT_ASSIGN | SHIFT_RIGHT_ASSIGN | BIT_SHIFT_RIGHT_ASSIGN ) assignmentExpression )? ) + # Java.g:751:9: conditionalExpression ( ( ASSIGN | PLUS_ASSIGN | MINUS_ASSIGN | STAR_ASSIGN | DIV_ASSIGN | AND_ASSIGN | OR_ASSIGN | XOR_ASSIGN | MOD_ASSIGN | SHIFT_LEFT_ASSIGN | SHIFT_RIGHT_ASSIGN | BIT_SHIFT_RIGHT_ASSIGN ) assignmentExpression )? + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_conditionalExpression_in_assignmentExpression10255) + conditionalExpression366 = self.conditionalExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, conditionalExpression366.tree) + # Java.g:752:9: ( ( ASSIGN | PLUS_ASSIGN | MINUS_ASSIGN | STAR_ASSIGN | DIV_ASSIGN | AND_ASSIGN | OR_ASSIGN | XOR_ASSIGN | MOD_ASSIGN | SHIFT_LEFT_ASSIGN | SHIFT_RIGHT_ASSIGN | BIT_SHIFT_RIGHT_ASSIGN ) assignmentExpression )? + alt111 = 2 + LA111_0 = self.input.LA(1) + + if ((AND_ASSIGN <= LA111_0 <= ASSIGN) or LA111_0 == BIT_SHIFT_RIGHT_ASSIGN or LA111_0 == DIV_ASSIGN or LA111_0 == MINUS_ASSIGN or LA111_0 == MOD_ASSIGN or LA111_0 == OR_ASSIGN or LA111_0 == PLUS_ASSIGN or LA111_0 == SHIFT_LEFT_ASSIGN or LA111_0 == SHIFT_RIGHT_ASSIGN or LA111_0 == STAR_ASSIGN or LA111_0 == XOR_ASSIGN) : + alt111 = 1 + if alt111 == 1: + # Java.g:752:13: ( ASSIGN | PLUS_ASSIGN | MINUS_ASSIGN | STAR_ASSIGN | DIV_ASSIGN | AND_ASSIGN | OR_ASSIGN | XOR_ASSIGN | MOD_ASSIGN | SHIFT_LEFT_ASSIGN | SHIFT_RIGHT_ASSIGN | BIT_SHIFT_RIGHT_ASSIGN ) assignmentExpression + pass + # Java.g:752:13: ( ASSIGN | PLUS_ASSIGN | MINUS_ASSIGN | STAR_ASSIGN | DIV_ASSIGN | AND_ASSIGN | OR_ASSIGN | XOR_ASSIGN | MOD_ASSIGN | SHIFT_LEFT_ASSIGN | SHIFT_RIGHT_ASSIGN | BIT_SHIFT_RIGHT_ASSIGN ) + alt110 = 12 + LA110 = self.input.LA(1) + if LA110 == ASSIGN: + alt110 = 1 + elif LA110 == PLUS_ASSIGN: + alt110 = 2 + elif LA110 == MINUS_ASSIGN: + alt110 = 3 + elif LA110 == STAR_ASSIGN: + alt110 = 4 + elif LA110 == DIV_ASSIGN: + alt110 = 5 + elif LA110 == AND_ASSIGN: + alt110 = 6 + elif LA110 == OR_ASSIGN: + alt110 = 7 + elif LA110 == XOR_ASSIGN: + alt110 = 8 + elif LA110 == MOD_ASSIGN: + alt110 = 9 + elif LA110 == SHIFT_LEFT_ASSIGN: + alt110 = 10 + elif LA110 == SHIFT_RIGHT_ASSIGN: + alt110 = 11 + elif LA110 == BIT_SHIFT_RIGHT_ASSIGN: + alt110 = 12 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 110, 0, self.input) + + raise nvae + + if alt110 == 1: + # Java.g:752:17: ASSIGN + pass + ASSIGN367=self.match(self.input, ASSIGN, self.FOLLOW_ASSIGN_in_assignmentExpression10273) + if self._state.backtracking == 0: + + ASSIGN367_tree = self._adaptor.createWithPayload(ASSIGN367) + root_0 = self._adaptor.becomeRoot(ASSIGN367_tree, root_0) + + + + elif alt110 == 2: + # Java.g:753:17: PLUS_ASSIGN + pass + PLUS_ASSIGN368=self.match(self.input, PLUS_ASSIGN, self.FOLLOW_PLUS_ASSIGN_in_assignmentExpression10292) + if self._state.backtracking == 0: + + PLUS_ASSIGN368_tree = self._adaptor.createWithPayload(PLUS_ASSIGN368) + root_0 = self._adaptor.becomeRoot(PLUS_ASSIGN368_tree, root_0) + + + + elif alt110 == 3: + # Java.g:754:17: MINUS_ASSIGN + pass + MINUS_ASSIGN369=self.match(self.input, MINUS_ASSIGN, self.FOLLOW_MINUS_ASSIGN_in_assignmentExpression10311) + if self._state.backtracking == 0: + + MINUS_ASSIGN369_tree = self._adaptor.createWithPayload(MINUS_ASSIGN369) + root_0 = self._adaptor.becomeRoot(MINUS_ASSIGN369_tree, root_0) + + + + elif alt110 == 4: + # Java.g:755:17: STAR_ASSIGN + pass + STAR_ASSIGN370=self.match(self.input, STAR_ASSIGN, self.FOLLOW_STAR_ASSIGN_in_assignmentExpression10330) + if self._state.backtracking == 0: + + STAR_ASSIGN370_tree = self._adaptor.createWithPayload(STAR_ASSIGN370) + root_0 = self._adaptor.becomeRoot(STAR_ASSIGN370_tree, root_0) + + + + elif alt110 == 5: + # Java.g:756:17: DIV_ASSIGN + pass + DIV_ASSIGN371=self.match(self.input, DIV_ASSIGN, self.FOLLOW_DIV_ASSIGN_in_assignmentExpression10349) + if self._state.backtracking == 0: + + DIV_ASSIGN371_tree = self._adaptor.createWithPayload(DIV_ASSIGN371) + root_0 = self._adaptor.becomeRoot(DIV_ASSIGN371_tree, root_0) + + + + elif alt110 == 6: + # Java.g:757:17: AND_ASSIGN + pass + AND_ASSIGN372=self.match(self.input, AND_ASSIGN, self.FOLLOW_AND_ASSIGN_in_assignmentExpression10368) + if self._state.backtracking == 0: + + AND_ASSIGN372_tree = self._adaptor.createWithPayload(AND_ASSIGN372) + root_0 = self._adaptor.becomeRoot(AND_ASSIGN372_tree, root_0) + + + + elif alt110 == 7: + # Java.g:758:17: OR_ASSIGN + pass + OR_ASSIGN373=self.match(self.input, OR_ASSIGN, self.FOLLOW_OR_ASSIGN_in_assignmentExpression10387) + if self._state.backtracking == 0: + + OR_ASSIGN373_tree = self._adaptor.createWithPayload(OR_ASSIGN373) + root_0 = self._adaptor.becomeRoot(OR_ASSIGN373_tree, root_0) + + + + elif alt110 == 8: + # Java.g:759:17: XOR_ASSIGN + pass + XOR_ASSIGN374=self.match(self.input, XOR_ASSIGN, self.FOLLOW_XOR_ASSIGN_in_assignmentExpression10406) + if self._state.backtracking == 0: + + XOR_ASSIGN374_tree = self._adaptor.createWithPayload(XOR_ASSIGN374) + root_0 = self._adaptor.becomeRoot(XOR_ASSIGN374_tree, root_0) + + + + elif alt110 == 9: + # Java.g:760:17: MOD_ASSIGN + pass + MOD_ASSIGN375=self.match(self.input, MOD_ASSIGN, self.FOLLOW_MOD_ASSIGN_in_assignmentExpression10425) + if self._state.backtracking == 0: + + MOD_ASSIGN375_tree = self._adaptor.createWithPayload(MOD_ASSIGN375) + root_0 = self._adaptor.becomeRoot(MOD_ASSIGN375_tree, root_0) + + + + elif alt110 == 10: + # Java.g:761:17: SHIFT_LEFT_ASSIGN + pass + SHIFT_LEFT_ASSIGN376=self.match(self.input, SHIFT_LEFT_ASSIGN, self.FOLLOW_SHIFT_LEFT_ASSIGN_in_assignmentExpression10444) + if self._state.backtracking == 0: + + SHIFT_LEFT_ASSIGN376_tree = self._adaptor.createWithPayload(SHIFT_LEFT_ASSIGN376) + root_0 = self._adaptor.becomeRoot(SHIFT_LEFT_ASSIGN376_tree, root_0) + + + + elif alt110 == 11: + # Java.g:762:17: SHIFT_RIGHT_ASSIGN + pass + SHIFT_RIGHT_ASSIGN377=self.match(self.input, SHIFT_RIGHT_ASSIGN, self.FOLLOW_SHIFT_RIGHT_ASSIGN_in_assignmentExpression10463) + if self._state.backtracking == 0: + + SHIFT_RIGHT_ASSIGN377_tree = self._adaptor.createWithPayload(SHIFT_RIGHT_ASSIGN377) + root_0 = self._adaptor.becomeRoot(SHIFT_RIGHT_ASSIGN377_tree, root_0) + + + + elif alt110 == 12: + # Java.g:763:17: BIT_SHIFT_RIGHT_ASSIGN + pass + BIT_SHIFT_RIGHT_ASSIGN378=self.match(self.input, BIT_SHIFT_RIGHT_ASSIGN, self.FOLLOW_BIT_SHIFT_RIGHT_ASSIGN_in_assignmentExpression10482) + if self._state.backtracking == 0: + + BIT_SHIFT_RIGHT_ASSIGN378_tree = self._adaptor.createWithPayload(BIT_SHIFT_RIGHT_ASSIGN378) + root_0 = self._adaptor.becomeRoot(BIT_SHIFT_RIGHT_ASSIGN378_tree, root_0) + + + + + self._state.following.append(self.FOLLOW_assignmentExpression_in_assignmentExpression10503) + assignmentExpression379 = self.assignmentExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, assignmentExpression379.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 89, assignmentExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "assignmentExpression" + + class conditionalExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.conditionalExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "conditionalExpression" + # Java.g:768:1: conditionalExpression : logicalOrExpression ( QUESTION assignmentExpression COLON conditionalExpression )? ; + def conditionalExpression(self, ): + + retval = self.conditionalExpression_return() + retval.start = self.input.LT(1) + conditionalExpression_StartIndex = self.input.index() + root_0 = None + + QUESTION381 = None + COLON383 = None + logicalOrExpression380 = None + + assignmentExpression382 = None + + conditionalExpression384 = None + + + QUESTION381_tree = None + COLON383_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 90): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:769:5: ( logicalOrExpression ( QUESTION assignmentExpression COLON conditionalExpression )? ) + # Java.g:769:9: logicalOrExpression ( QUESTION assignmentExpression COLON conditionalExpression )? + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_logicalOrExpression_in_conditionalExpression10524) + logicalOrExpression380 = self.logicalOrExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, logicalOrExpression380.tree) + # Java.g:769:29: ( QUESTION assignmentExpression COLON conditionalExpression )? + alt112 = 2 + LA112_0 = self.input.LA(1) + + if (LA112_0 == QUESTION) : + alt112 = 1 + if alt112 == 1: + # Java.g:769:30: QUESTION assignmentExpression COLON conditionalExpression + pass + QUESTION381=self.match(self.input, QUESTION, self.FOLLOW_QUESTION_in_conditionalExpression10527) + if self._state.backtracking == 0: + + QUESTION381_tree = self._adaptor.createWithPayload(QUESTION381) + root_0 = self._adaptor.becomeRoot(QUESTION381_tree, root_0) + + self._state.following.append(self.FOLLOW_assignmentExpression_in_conditionalExpression10530) + assignmentExpression382 = self.assignmentExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, assignmentExpression382.tree) + COLON383=self.match(self.input, COLON, self.FOLLOW_COLON_in_conditionalExpression10532) + self._state.following.append(self.FOLLOW_conditionalExpression_in_conditionalExpression10535) + conditionalExpression384 = self.conditionalExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, conditionalExpression384.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 90, conditionalExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "conditionalExpression" + + class logicalOrExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.logicalOrExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "logicalOrExpression" + # Java.g:772:1: logicalOrExpression : logicalAndExpression ( LOGICAL_OR logicalAndExpression )* ; + def logicalOrExpression(self, ): + + retval = self.logicalOrExpression_return() + retval.start = self.input.LT(1) + logicalOrExpression_StartIndex = self.input.index() + root_0 = None + + LOGICAL_OR386 = None + logicalAndExpression385 = None + + logicalAndExpression387 = None + + + LOGICAL_OR386_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 91): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:773:5: ( logicalAndExpression ( LOGICAL_OR logicalAndExpression )* ) + # Java.g:773:9: logicalAndExpression ( LOGICAL_OR logicalAndExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_logicalAndExpression_in_logicalOrExpression10556) + logicalAndExpression385 = self.logicalAndExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, logicalAndExpression385.tree) + # Java.g:773:30: ( LOGICAL_OR logicalAndExpression )* + while True: #loop113 + alt113 = 2 + LA113_0 = self.input.LA(1) + + if (LA113_0 == LOGICAL_OR) : + alt113 = 1 + + + if alt113 == 1: + # Java.g:773:31: LOGICAL_OR logicalAndExpression + pass + LOGICAL_OR386=self.match(self.input, LOGICAL_OR, self.FOLLOW_LOGICAL_OR_in_logicalOrExpression10559) + if self._state.backtracking == 0: + + LOGICAL_OR386_tree = self._adaptor.createWithPayload(LOGICAL_OR386) + root_0 = self._adaptor.becomeRoot(LOGICAL_OR386_tree, root_0) + + self._state.following.append(self.FOLLOW_logicalAndExpression_in_logicalOrExpression10562) + logicalAndExpression387 = self.logicalAndExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, logicalAndExpression387.tree) + + + else: + break #loop113 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 91, logicalOrExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "logicalOrExpression" + + class logicalAndExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.logicalAndExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "logicalAndExpression" + # Java.g:776:1: logicalAndExpression : inclusiveOrExpression ( LOGICAL_AND inclusiveOrExpression )* ; + def logicalAndExpression(self, ): + + retval = self.logicalAndExpression_return() + retval.start = self.input.LT(1) + logicalAndExpression_StartIndex = self.input.index() + root_0 = None + + LOGICAL_AND389 = None + inclusiveOrExpression388 = None + + inclusiveOrExpression390 = None + + + LOGICAL_AND389_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 92): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:777:5: ( inclusiveOrExpression ( LOGICAL_AND inclusiveOrExpression )* ) + # Java.g:777:9: inclusiveOrExpression ( LOGICAL_AND inclusiveOrExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_inclusiveOrExpression_in_logicalAndExpression10583) + inclusiveOrExpression388 = self.inclusiveOrExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, inclusiveOrExpression388.tree) + # Java.g:777:31: ( LOGICAL_AND inclusiveOrExpression )* + while True: #loop114 + alt114 = 2 + LA114_0 = self.input.LA(1) + + if (LA114_0 == LOGICAL_AND) : + alt114 = 1 + + + if alt114 == 1: + # Java.g:777:32: LOGICAL_AND inclusiveOrExpression + pass + LOGICAL_AND389=self.match(self.input, LOGICAL_AND, self.FOLLOW_LOGICAL_AND_in_logicalAndExpression10586) + if self._state.backtracking == 0: + + LOGICAL_AND389_tree = self._adaptor.createWithPayload(LOGICAL_AND389) + root_0 = self._adaptor.becomeRoot(LOGICAL_AND389_tree, root_0) + + self._state.following.append(self.FOLLOW_inclusiveOrExpression_in_logicalAndExpression10589) + inclusiveOrExpression390 = self.inclusiveOrExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, inclusiveOrExpression390.tree) + + + else: + break #loop114 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 92, logicalAndExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "logicalAndExpression" + + class inclusiveOrExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.inclusiveOrExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "inclusiveOrExpression" + # Java.g:780:1: inclusiveOrExpression : exclusiveOrExpression ( OR exclusiveOrExpression )* ; + def inclusiveOrExpression(self, ): + + retval = self.inclusiveOrExpression_return() + retval.start = self.input.LT(1) + inclusiveOrExpression_StartIndex = self.input.index() + root_0 = None + + OR392 = None + exclusiveOrExpression391 = None + + exclusiveOrExpression393 = None + + + OR392_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 93): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:781:5: ( exclusiveOrExpression ( OR exclusiveOrExpression )* ) + # Java.g:781:9: exclusiveOrExpression ( OR exclusiveOrExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression10610) + exclusiveOrExpression391 = self.exclusiveOrExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, exclusiveOrExpression391.tree) + # Java.g:781:31: ( OR exclusiveOrExpression )* + while True: #loop115 + alt115 = 2 + LA115_0 = self.input.LA(1) + + if (LA115_0 == OR) : + alt115 = 1 + + + if alt115 == 1: + # Java.g:781:32: OR exclusiveOrExpression + pass + OR392=self.match(self.input, OR, self.FOLLOW_OR_in_inclusiveOrExpression10613) + if self._state.backtracking == 0: + + OR392_tree = self._adaptor.createWithPayload(OR392) + root_0 = self._adaptor.becomeRoot(OR392_tree, root_0) + + self._state.following.append(self.FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression10616) + exclusiveOrExpression393 = self.exclusiveOrExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, exclusiveOrExpression393.tree) + + + else: + break #loop115 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 93, inclusiveOrExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "inclusiveOrExpression" + + class exclusiveOrExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.exclusiveOrExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "exclusiveOrExpression" + # Java.g:784:1: exclusiveOrExpression : andExpression ( XOR andExpression )* ; + def exclusiveOrExpression(self, ): + + retval = self.exclusiveOrExpression_return() + retval.start = self.input.LT(1) + exclusiveOrExpression_StartIndex = self.input.index() + root_0 = None + + XOR395 = None + andExpression394 = None + + andExpression396 = None + + + XOR395_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 94): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:785:5: ( andExpression ( XOR andExpression )* ) + # Java.g:785:9: andExpression ( XOR andExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_andExpression_in_exclusiveOrExpression10637) + andExpression394 = self.andExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, andExpression394.tree) + # Java.g:785:23: ( XOR andExpression )* + while True: #loop116 + alt116 = 2 + LA116_0 = self.input.LA(1) + + if (LA116_0 == XOR) : + alt116 = 1 + + + if alt116 == 1: + # Java.g:785:24: XOR andExpression + pass + XOR395=self.match(self.input, XOR, self.FOLLOW_XOR_in_exclusiveOrExpression10640) + if self._state.backtracking == 0: + + XOR395_tree = self._adaptor.createWithPayload(XOR395) + root_0 = self._adaptor.becomeRoot(XOR395_tree, root_0) + + self._state.following.append(self.FOLLOW_andExpression_in_exclusiveOrExpression10643) + andExpression396 = self.andExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, andExpression396.tree) + + + else: + break #loop116 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 94, exclusiveOrExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "exclusiveOrExpression" + + class andExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.andExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "andExpression" + # Java.g:788:1: andExpression : equalityExpression ( AND equalityExpression )* ; + def andExpression(self, ): + + retval = self.andExpression_return() + retval.start = self.input.LT(1) + andExpression_StartIndex = self.input.index() + root_0 = None + + AND398 = None + equalityExpression397 = None + + equalityExpression399 = None + + + AND398_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 95): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:789:5: ( equalityExpression ( AND equalityExpression )* ) + # Java.g:789:9: equalityExpression ( AND equalityExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_equalityExpression_in_andExpression10664) + equalityExpression397 = self.equalityExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, equalityExpression397.tree) + # Java.g:789:28: ( AND equalityExpression )* + while True: #loop117 + alt117 = 2 + LA117_0 = self.input.LA(1) + + if (LA117_0 == AND) : + alt117 = 1 + + + if alt117 == 1: + # Java.g:789:29: AND equalityExpression + pass + AND398=self.match(self.input, AND, self.FOLLOW_AND_in_andExpression10667) + if self._state.backtracking == 0: + + AND398_tree = self._adaptor.createWithPayload(AND398) + root_0 = self._adaptor.becomeRoot(AND398_tree, root_0) + + self._state.following.append(self.FOLLOW_equalityExpression_in_andExpression10670) + equalityExpression399 = self.equalityExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, equalityExpression399.tree) + + + else: + break #loop117 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 95, andExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "andExpression" + + class equalityExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.equalityExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "equalityExpression" + # Java.g:792:1: equalityExpression : instanceOfExpression ( ( EQUAL | NOT_EQUAL ) instanceOfExpression )* ; + def equalityExpression(self, ): + + retval = self.equalityExpression_return() + retval.start = self.input.LT(1) + equalityExpression_StartIndex = self.input.index() + root_0 = None + + EQUAL401 = None + NOT_EQUAL402 = None + instanceOfExpression400 = None + + instanceOfExpression403 = None + + + EQUAL401_tree = None + NOT_EQUAL402_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 96): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:793:5: ( instanceOfExpression ( ( EQUAL | NOT_EQUAL ) instanceOfExpression )* ) + # Java.g:793:9: instanceOfExpression ( ( EQUAL | NOT_EQUAL ) instanceOfExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_instanceOfExpression_in_equalityExpression10691) + instanceOfExpression400 = self.instanceOfExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, instanceOfExpression400.tree) + # Java.g:794:9: ( ( EQUAL | NOT_EQUAL ) instanceOfExpression )* + while True: #loop119 + alt119 = 2 + LA119_0 = self.input.LA(1) + + if (LA119_0 == EQUAL or LA119_0 == NOT_EQUAL) : + alt119 = 1 + + + if alt119 == 1: + # Java.g:794:13: ( EQUAL | NOT_EQUAL ) instanceOfExpression + pass + # Java.g:794:13: ( EQUAL | NOT_EQUAL ) + alt118 = 2 + LA118_0 = self.input.LA(1) + + if (LA118_0 == EQUAL) : + alt118 = 1 + elif (LA118_0 == NOT_EQUAL) : + alt118 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 118, 0, self.input) + + raise nvae + + if alt118 == 1: + # Java.g:794:17: EQUAL + pass + EQUAL401=self.match(self.input, EQUAL, self.FOLLOW_EQUAL_in_equalityExpression10709) + if self._state.backtracking == 0: + + EQUAL401_tree = self._adaptor.createWithPayload(EQUAL401) + root_0 = self._adaptor.becomeRoot(EQUAL401_tree, root_0) + + + + elif alt118 == 2: + # Java.g:795:17: NOT_EQUAL + pass + NOT_EQUAL402=self.match(self.input, NOT_EQUAL, self.FOLLOW_NOT_EQUAL_in_equalityExpression10728) + if self._state.backtracking == 0: + + NOT_EQUAL402_tree = self._adaptor.createWithPayload(NOT_EQUAL402) + root_0 = self._adaptor.becomeRoot(NOT_EQUAL402_tree, root_0) + + + + + self._state.following.append(self.FOLLOW_instanceOfExpression_in_equalityExpression10757) + instanceOfExpression403 = self.instanceOfExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, instanceOfExpression403.tree) + + + else: + break #loop119 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 96, equalityExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "equalityExpression" + + class instanceOfExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.instanceOfExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "instanceOfExpression" + # Java.g:801:1: instanceOfExpression : relationalExpression ( INSTANCEOF type )? ; + def instanceOfExpression(self, ): + + retval = self.instanceOfExpression_return() + retval.start = self.input.LT(1) + instanceOfExpression_StartIndex = self.input.index() + root_0 = None + + INSTANCEOF405 = None + relationalExpression404 = None + + type406 = None + + + INSTANCEOF405_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 97): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:802:5: ( relationalExpression ( INSTANCEOF type )? ) + # Java.g:802:9: relationalExpression ( INSTANCEOF type )? + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_relationalExpression_in_instanceOfExpression10787) + relationalExpression404 = self.relationalExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, relationalExpression404.tree) + # Java.g:802:30: ( INSTANCEOF type )? + alt120 = 2 + LA120_0 = self.input.LA(1) + + if (LA120_0 == INSTANCEOF) : + alt120 = 1 + if alt120 == 1: + # Java.g:802:31: INSTANCEOF type + pass + INSTANCEOF405=self.match(self.input, INSTANCEOF, self.FOLLOW_INSTANCEOF_in_instanceOfExpression10790) + if self._state.backtracking == 0: + + INSTANCEOF405_tree = self._adaptor.createWithPayload(INSTANCEOF405) + root_0 = self._adaptor.becomeRoot(INSTANCEOF405_tree, root_0) + + self._state.following.append(self.FOLLOW_type_in_instanceOfExpression10793) + type406 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, type406.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 97, instanceOfExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "instanceOfExpression" + + class relationalExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.relationalExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "relationalExpression" + # Java.g:805:1: relationalExpression : shiftExpression ( ( LESS_OR_EQUAL | GREATER_OR_EQUAL | LESS_THAN | GREATER_THAN ) shiftExpression )* ; + def relationalExpression(self, ): + + retval = self.relationalExpression_return() + retval.start = self.input.LT(1) + relationalExpression_StartIndex = self.input.index() + root_0 = None + + LESS_OR_EQUAL408 = None + GREATER_OR_EQUAL409 = None + LESS_THAN410 = None + GREATER_THAN411 = None + shiftExpression407 = None + + shiftExpression412 = None + + + LESS_OR_EQUAL408_tree = None + GREATER_OR_EQUAL409_tree = None + LESS_THAN410_tree = None + GREATER_THAN411_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 98): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:806:5: ( shiftExpression ( ( LESS_OR_EQUAL | GREATER_OR_EQUAL | LESS_THAN | GREATER_THAN ) shiftExpression )* ) + # Java.g:806:9: shiftExpression ( ( LESS_OR_EQUAL | GREATER_OR_EQUAL | LESS_THAN | GREATER_THAN ) shiftExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_shiftExpression_in_relationalExpression10814) + shiftExpression407 = self.shiftExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, shiftExpression407.tree) + # Java.g:807:9: ( ( LESS_OR_EQUAL | GREATER_OR_EQUAL | LESS_THAN | GREATER_THAN ) shiftExpression )* + while True: #loop122 + alt122 = 2 + LA122_0 = self.input.LA(1) + + if ((GREATER_OR_EQUAL <= LA122_0 <= GREATER_THAN) or (LESS_OR_EQUAL <= LA122_0 <= LESS_THAN)) : + alt122 = 1 + + + if alt122 == 1: + # Java.g:807:13: ( LESS_OR_EQUAL | GREATER_OR_EQUAL | LESS_THAN | GREATER_THAN ) shiftExpression + pass + # Java.g:807:13: ( LESS_OR_EQUAL | GREATER_OR_EQUAL | LESS_THAN | GREATER_THAN ) + alt121 = 4 + LA121 = self.input.LA(1) + if LA121 == LESS_OR_EQUAL: + alt121 = 1 + elif LA121 == GREATER_OR_EQUAL: + alt121 = 2 + elif LA121 == LESS_THAN: + alt121 = 3 + elif LA121 == GREATER_THAN: + alt121 = 4 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 121, 0, self.input) + + raise nvae + + if alt121 == 1: + # Java.g:807:17: LESS_OR_EQUAL + pass + LESS_OR_EQUAL408=self.match(self.input, LESS_OR_EQUAL, self.FOLLOW_LESS_OR_EQUAL_in_relationalExpression10832) + if self._state.backtracking == 0: + + LESS_OR_EQUAL408_tree = self._adaptor.createWithPayload(LESS_OR_EQUAL408) + root_0 = self._adaptor.becomeRoot(LESS_OR_EQUAL408_tree, root_0) + + + + elif alt121 == 2: + # Java.g:808:17: GREATER_OR_EQUAL + pass + GREATER_OR_EQUAL409=self.match(self.input, GREATER_OR_EQUAL, self.FOLLOW_GREATER_OR_EQUAL_in_relationalExpression10851) + if self._state.backtracking == 0: + + GREATER_OR_EQUAL409_tree = self._adaptor.createWithPayload(GREATER_OR_EQUAL409) + root_0 = self._adaptor.becomeRoot(GREATER_OR_EQUAL409_tree, root_0) + + + + elif alt121 == 3: + # Java.g:809:17: LESS_THAN + pass + LESS_THAN410=self.match(self.input, LESS_THAN, self.FOLLOW_LESS_THAN_in_relationalExpression10870) + if self._state.backtracking == 0: + + LESS_THAN410_tree = self._adaptor.createWithPayload(LESS_THAN410) + root_0 = self._adaptor.becomeRoot(LESS_THAN410_tree, root_0) + + + + elif alt121 == 4: + # Java.g:810:17: GREATER_THAN + pass + GREATER_THAN411=self.match(self.input, GREATER_THAN, self.FOLLOW_GREATER_THAN_in_relationalExpression10889) + if self._state.backtracking == 0: + + GREATER_THAN411_tree = self._adaptor.createWithPayload(GREATER_THAN411) + root_0 = self._adaptor.becomeRoot(GREATER_THAN411_tree, root_0) + + + + + self._state.following.append(self.FOLLOW_shiftExpression_in_relationalExpression10918) + shiftExpression412 = self.shiftExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, shiftExpression412.tree) + + + else: + break #loop122 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 98, relationalExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "relationalExpression" + + class shiftExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.shiftExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "shiftExpression" + # Java.g:816:1: shiftExpression : additiveExpression ( ( BIT_SHIFT_RIGHT | SHIFT_RIGHT | SHIFT_LEFT ) additiveExpression )* ; + def shiftExpression(self, ): + + retval = self.shiftExpression_return() + retval.start = self.input.LT(1) + shiftExpression_StartIndex = self.input.index() + root_0 = None + + BIT_SHIFT_RIGHT414 = None + SHIFT_RIGHT415 = None + SHIFT_LEFT416 = None + additiveExpression413 = None + + additiveExpression417 = None + + + BIT_SHIFT_RIGHT414_tree = None + SHIFT_RIGHT415_tree = None + SHIFT_LEFT416_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 99): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:817:5: ( additiveExpression ( ( BIT_SHIFT_RIGHT | SHIFT_RIGHT | SHIFT_LEFT ) additiveExpression )* ) + # Java.g:817:9: additiveExpression ( ( BIT_SHIFT_RIGHT | SHIFT_RIGHT | SHIFT_LEFT ) additiveExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_additiveExpression_in_shiftExpression10948) + additiveExpression413 = self.additiveExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, additiveExpression413.tree) + # Java.g:818:9: ( ( BIT_SHIFT_RIGHT | SHIFT_RIGHT | SHIFT_LEFT ) additiveExpression )* + while True: #loop124 + alt124 = 2 + LA124_0 = self.input.LA(1) + + if (LA124_0 == BIT_SHIFT_RIGHT or LA124_0 == SHIFT_LEFT or LA124_0 == SHIFT_RIGHT) : + alt124 = 1 + + + if alt124 == 1: + # Java.g:818:13: ( BIT_SHIFT_RIGHT | SHIFT_RIGHT | SHIFT_LEFT ) additiveExpression + pass + # Java.g:818:13: ( BIT_SHIFT_RIGHT | SHIFT_RIGHT | SHIFT_LEFT ) + alt123 = 3 + LA123 = self.input.LA(1) + if LA123 == BIT_SHIFT_RIGHT: + alt123 = 1 + elif LA123 == SHIFT_RIGHT: + alt123 = 2 + elif LA123 == SHIFT_LEFT: + alt123 = 3 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 123, 0, self.input) + + raise nvae + + if alt123 == 1: + # Java.g:818:17: BIT_SHIFT_RIGHT + pass + BIT_SHIFT_RIGHT414=self.match(self.input, BIT_SHIFT_RIGHT, self.FOLLOW_BIT_SHIFT_RIGHT_in_shiftExpression10966) + if self._state.backtracking == 0: + + BIT_SHIFT_RIGHT414_tree = self._adaptor.createWithPayload(BIT_SHIFT_RIGHT414) + root_0 = self._adaptor.becomeRoot(BIT_SHIFT_RIGHT414_tree, root_0) + + + + elif alt123 == 2: + # Java.g:819:17: SHIFT_RIGHT + pass + SHIFT_RIGHT415=self.match(self.input, SHIFT_RIGHT, self.FOLLOW_SHIFT_RIGHT_in_shiftExpression10985) + if self._state.backtracking == 0: + + SHIFT_RIGHT415_tree = self._adaptor.createWithPayload(SHIFT_RIGHT415) + root_0 = self._adaptor.becomeRoot(SHIFT_RIGHT415_tree, root_0) + + + + elif alt123 == 3: + # Java.g:820:17: SHIFT_LEFT + pass + SHIFT_LEFT416=self.match(self.input, SHIFT_LEFT, self.FOLLOW_SHIFT_LEFT_in_shiftExpression11004) + if self._state.backtracking == 0: + + SHIFT_LEFT416_tree = self._adaptor.createWithPayload(SHIFT_LEFT416) + root_0 = self._adaptor.becomeRoot(SHIFT_LEFT416_tree, root_0) + + + + + self._state.following.append(self.FOLLOW_additiveExpression_in_shiftExpression11033) + additiveExpression417 = self.additiveExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, additiveExpression417.tree) + + + else: + break #loop124 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 99, shiftExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "shiftExpression" + + class additiveExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.additiveExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "additiveExpression" + # Java.g:826:1: additiveExpression : multiplicativeExpression ( ( PLUS | MINUS ) multiplicativeExpression )* ; + def additiveExpression(self, ): + + retval = self.additiveExpression_return() + retval.start = self.input.LT(1) + additiveExpression_StartIndex = self.input.index() + root_0 = None + + PLUS419 = None + MINUS420 = None + multiplicativeExpression418 = None + + multiplicativeExpression421 = None + + + PLUS419_tree = None + MINUS420_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 100): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:827:5: ( multiplicativeExpression ( ( PLUS | MINUS ) multiplicativeExpression )* ) + # Java.g:827:9: multiplicativeExpression ( ( PLUS | MINUS ) multiplicativeExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_multiplicativeExpression_in_additiveExpression11063) + multiplicativeExpression418 = self.multiplicativeExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, multiplicativeExpression418.tree) + # Java.g:828:9: ( ( PLUS | MINUS ) multiplicativeExpression )* + while True: #loop126 + alt126 = 2 + LA126_0 = self.input.LA(1) + + if (LA126_0 == MINUS or LA126_0 == PLUS) : + alt126 = 1 + + + if alt126 == 1: + # Java.g:828:13: ( PLUS | MINUS ) multiplicativeExpression + pass + # Java.g:828:13: ( PLUS | MINUS ) + alt125 = 2 + LA125_0 = self.input.LA(1) + + if (LA125_0 == PLUS) : + alt125 = 1 + elif (LA125_0 == MINUS) : + alt125 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 125, 0, self.input) + + raise nvae + + if alt125 == 1: + # Java.g:828:17: PLUS + pass + PLUS419=self.match(self.input, PLUS, self.FOLLOW_PLUS_in_additiveExpression11081) + if self._state.backtracking == 0: + + PLUS419_tree = self._adaptor.createWithPayload(PLUS419) + root_0 = self._adaptor.becomeRoot(PLUS419_tree, root_0) + + + + elif alt125 == 2: + # Java.g:829:17: MINUS + pass + MINUS420=self.match(self.input, MINUS, self.FOLLOW_MINUS_in_additiveExpression11100) + if self._state.backtracking == 0: + + MINUS420_tree = self._adaptor.createWithPayload(MINUS420) + root_0 = self._adaptor.becomeRoot(MINUS420_tree, root_0) + + + + + self._state.following.append(self.FOLLOW_multiplicativeExpression_in_additiveExpression11129) + multiplicativeExpression421 = self.multiplicativeExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, multiplicativeExpression421.tree) + + + else: + break #loop126 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 100, additiveExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "additiveExpression" + + class multiplicativeExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.multiplicativeExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "multiplicativeExpression" + # Java.g:835:1: multiplicativeExpression : unaryExpression ( ( STAR | DIV | MOD ) unaryExpression )* ; + def multiplicativeExpression(self, ): + + retval = self.multiplicativeExpression_return() + retval.start = self.input.LT(1) + multiplicativeExpression_StartIndex = self.input.index() + root_0 = None + + STAR423 = None + DIV424 = None + MOD425 = None + unaryExpression422 = None + + unaryExpression426 = None + + + STAR423_tree = None + DIV424_tree = None + MOD425_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 101): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:836:5: ( unaryExpression ( ( STAR | DIV | MOD ) unaryExpression )* ) + # Java.g:836:9: unaryExpression ( ( STAR | DIV | MOD ) unaryExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_unaryExpression_in_multiplicativeExpression11159) + unaryExpression422 = self.unaryExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, unaryExpression422.tree) + # Java.g:837:9: ( ( STAR | DIV | MOD ) unaryExpression )* + while True: #loop128 + alt128 = 2 + LA128_0 = self.input.LA(1) + + if (LA128_0 == DIV or LA128_0 == MOD or LA128_0 == STAR) : + alt128 = 1 + + + if alt128 == 1: + # Java.g:837:13: ( STAR | DIV | MOD ) unaryExpression + pass + # Java.g:837:13: ( STAR | DIV | MOD ) + alt127 = 3 + LA127 = self.input.LA(1) + if LA127 == STAR: + alt127 = 1 + elif LA127 == DIV: + alt127 = 2 + elif LA127 == MOD: + alt127 = 3 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 127, 0, self.input) + + raise nvae + + if alt127 == 1: + # Java.g:837:17: STAR + pass + STAR423=self.match(self.input, STAR, self.FOLLOW_STAR_in_multiplicativeExpression11177) + if self._state.backtracking == 0: + + STAR423_tree = self._adaptor.createWithPayload(STAR423) + root_0 = self._adaptor.becomeRoot(STAR423_tree, root_0) + + + + elif alt127 == 2: + # Java.g:838:17: DIV + pass + DIV424=self.match(self.input, DIV, self.FOLLOW_DIV_in_multiplicativeExpression11196) + if self._state.backtracking == 0: + + DIV424_tree = self._adaptor.createWithPayload(DIV424) + root_0 = self._adaptor.becomeRoot(DIV424_tree, root_0) + + + + elif alt127 == 3: + # Java.g:839:17: MOD + pass + MOD425=self.match(self.input, MOD, self.FOLLOW_MOD_in_multiplicativeExpression11215) + if self._state.backtracking == 0: + + MOD425_tree = self._adaptor.createWithPayload(MOD425) + root_0 = self._adaptor.becomeRoot(MOD425_tree, root_0) + + + + + self._state.following.append(self.FOLLOW_unaryExpression_in_multiplicativeExpression11244) + unaryExpression426 = self.unaryExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, unaryExpression426.tree) + + + else: + break #loop128 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 101, multiplicativeExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "multiplicativeExpression" + + class unaryExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.unaryExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "unaryExpression" + # Java.g:845:1: unaryExpression : ( PLUS unaryExpression -> ^( UNARY_PLUS[$PLUS, \"UNARY_PLUS\"] unaryExpression ) | MINUS unaryExpression -> ^( UNARY_MINUS[$MINUS, \"UNARY_MINUS\"] unaryExpression ) | INC postfixedExpression -> ^( PRE_INC[$INC, \"PRE_INC\"] postfixedExpression ) | DEC postfixedExpression -> ^( PRE_DEC[$DEC, \"PRE_DEC\"] postfixedExpression ) | unaryExpressionNotPlusMinus ); + def unaryExpression(self, ): + + retval = self.unaryExpression_return() + retval.start = self.input.LT(1) + unaryExpression_StartIndex = self.input.index() + root_0 = None + + PLUS427 = None + MINUS429 = None + INC431 = None + DEC433 = None + unaryExpression428 = None + + unaryExpression430 = None + + postfixedExpression432 = None + + postfixedExpression434 = None + + unaryExpressionNotPlusMinus435 = None + + + PLUS427_tree = None + MINUS429_tree = None + INC431_tree = None + DEC433_tree = None + stream_DEC = RewriteRuleTokenStream(self._adaptor, "token DEC") + stream_INC = RewriteRuleTokenStream(self._adaptor, "token INC") + stream_PLUS = RewriteRuleTokenStream(self._adaptor, "token PLUS") + stream_MINUS = RewriteRuleTokenStream(self._adaptor, "token MINUS") + stream_postfixedExpression = RewriteRuleSubtreeStream(self._adaptor, "rule postfixedExpression") + stream_unaryExpression = RewriteRuleSubtreeStream(self._adaptor, "rule unaryExpression") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 102): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:846:5: ( PLUS unaryExpression -> ^( UNARY_PLUS[$PLUS, \"UNARY_PLUS\"] unaryExpression ) | MINUS unaryExpression -> ^( UNARY_MINUS[$MINUS, \"UNARY_MINUS\"] unaryExpression ) | INC postfixedExpression -> ^( PRE_INC[$INC, \"PRE_INC\"] postfixedExpression ) | DEC postfixedExpression -> ^( PRE_DEC[$DEC, \"PRE_DEC\"] postfixedExpression ) | unaryExpressionNotPlusMinus ) + alt129 = 5 + LA129 = self.input.LA(1) + if LA129 == PLUS: + alt129 = 1 + elif LA129 == MINUS: + alt129 = 2 + elif LA129 == INC: + alt129 = 3 + elif LA129 == DEC: + alt129 = 4 + elif LA129 == LESS_THAN or LA129 == LOGICAL_NOT or LA129 == LPAREN or LA129 == NOT or LA129 == BOOLEAN or LA129 == BYTE or LA129 == CHAR or LA129 == DOUBLE or LA129 == FALSE or LA129 == FLOAT or LA129 == INT or LA129 == LONG or LA129 == NEW or LA129 == NULL or LA129 == SHORT or LA129 == SUPER or LA129 == THIS or LA129 == TRUE or LA129 == VOID or LA129 == IDENT or LA129 == HEX_LITERAL or LA129 == OCTAL_LITERAL or LA129 == DECIMAL_LITERAL or LA129 == FLOATING_POINT_LITERAL or LA129 == CHARACTER_LITERAL or LA129 == STRING_LITERAL: + alt129 = 5 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 129, 0, self.input) + + raise nvae + + if alt129 == 1: + # Java.g:846:9: PLUS unaryExpression + pass + PLUS427=self.match(self.input, PLUS, self.FOLLOW_PLUS_in_unaryExpression11274) + if self._state.backtracking == 0: + stream_PLUS.add(PLUS427) + self._state.following.append(self.FOLLOW_unaryExpression_in_unaryExpression11276) + unaryExpression428 = self.unaryExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_unaryExpression.add(unaryExpression428.tree) + + # AST Rewrite + # elements: unaryExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 846:37: -> ^( UNARY_PLUS[$PLUS, \"UNARY_PLUS\"] unaryExpression ) + # Java.g:846:41: ^( UNARY_PLUS[$PLUS, \"UNARY_PLUS\"] unaryExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(UNARY_PLUS, PLUS427, "UNARY_PLUS"), root_1) + + self._adaptor.addChild(root_1, stream_unaryExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt129 == 2: + # Java.g:847:9: MINUS unaryExpression + pass + MINUS429=self.match(self.input, MINUS, self.FOLLOW_MINUS_in_unaryExpression11303) + if self._state.backtracking == 0: + stream_MINUS.add(MINUS429) + self._state.following.append(self.FOLLOW_unaryExpression_in_unaryExpression11305) + unaryExpression430 = self.unaryExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_unaryExpression.add(unaryExpression430.tree) + + # AST Rewrite + # elements: unaryExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 847:37: -> ^( UNARY_MINUS[$MINUS, \"UNARY_MINUS\"] unaryExpression ) + # Java.g:847:41: ^( UNARY_MINUS[$MINUS, \"UNARY_MINUS\"] unaryExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(UNARY_MINUS, MINUS429, "UNARY_MINUS"), root_1) + + self._adaptor.addChild(root_1, stream_unaryExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt129 == 3: + # Java.g:848:9: INC postfixedExpression + pass + INC431=self.match(self.input, INC, self.FOLLOW_INC_in_unaryExpression11331) + if self._state.backtracking == 0: + stream_INC.add(INC431) + self._state.following.append(self.FOLLOW_postfixedExpression_in_unaryExpression11333) + postfixedExpression432 = self.postfixedExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_postfixedExpression.add(postfixedExpression432.tree) + + # AST Rewrite + # elements: postfixedExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 848:37: -> ^( PRE_INC[$INC, \"PRE_INC\"] postfixedExpression ) + # Java.g:848:41: ^( PRE_INC[$INC, \"PRE_INC\"] postfixedExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(PRE_INC, INC431, "PRE_INC"), root_1) + + self._adaptor.addChild(root_1, stream_postfixedExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt129 == 4: + # Java.g:849:9: DEC postfixedExpression + pass + DEC433=self.match(self.input, DEC, self.FOLLOW_DEC_in_unaryExpression11357) + if self._state.backtracking == 0: + stream_DEC.add(DEC433) + self._state.following.append(self.FOLLOW_postfixedExpression_in_unaryExpression11359) + postfixedExpression434 = self.postfixedExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_postfixedExpression.add(postfixedExpression434.tree) + + # AST Rewrite + # elements: postfixedExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 849:37: -> ^( PRE_DEC[$DEC, \"PRE_DEC\"] postfixedExpression ) + # Java.g:849:41: ^( PRE_DEC[$DEC, \"PRE_DEC\"] postfixedExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(PRE_DEC, DEC433, "PRE_DEC"), root_1) + + self._adaptor.addChild(root_1, stream_postfixedExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt129 == 5: + # Java.g:850:9: unaryExpressionNotPlusMinus + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_unaryExpressionNotPlusMinus_in_unaryExpression11383) + unaryExpressionNotPlusMinus435 = self.unaryExpressionNotPlusMinus() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, unaryExpressionNotPlusMinus435.tree) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 102, unaryExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "unaryExpression" + + class unaryExpressionNotPlusMinus_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.unaryExpressionNotPlusMinus_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "unaryExpressionNotPlusMinus" + # Java.g:853:1: unaryExpressionNotPlusMinus : ( NOT unaryExpression -> ^( NOT unaryExpression ) | LOGICAL_NOT unaryExpression -> ^( LOGICAL_NOT unaryExpression ) | LPAREN type RPAREN unaryExpression -> ^( CAST_EXPR[$LPAREN, \"CAST_EXPR\"] type unaryExpression ) | postfixedExpression ); + def unaryExpressionNotPlusMinus(self, ): + + retval = self.unaryExpressionNotPlusMinus_return() + retval.start = self.input.LT(1) + unaryExpressionNotPlusMinus_StartIndex = self.input.index() + root_0 = None + + NOT436 = None + LOGICAL_NOT438 = None + LPAREN440 = None + RPAREN442 = None + unaryExpression437 = None + + unaryExpression439 = None + + type441 = None + + unaryExpression443 = None + + postfixedExpression444 = None + + + NOT436_tree = None + LOGICAL_NOT438_tree = None + LPAREN440_tree = None + RPAREN442_tree = None + stream_RPAREN = RewriteRuleTokenStream(self._adaptor, "token RPAREN") + stream_LOGICAL_NOT = RewriteRuleTokenStream(self._adaptor, "token LOGICAL_NOT") + stream_NOT = RewriteRuleTokenStream(self._adaptor, "token NOT") + stream_LPAREN = RewriteRuleTokenStream(self._adaptor, "token LPAREN") + stream_unaryExpression = RewriteRuleSubtreeStream(self._adaptor, "rule unaryExpression") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 103): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:854:5: ( NOT unaryExpression -> ^( NOT unaryExpression ) | LOGICAL_NOT unaryExpression -> ^( LOGICAL_NOT unaryExpression ) | LPAREN type RPAREN unaryExpression -> ^( CAST_EXPR[$LPAREN, \"CAST_EXPR\"] type unaryExpression ) | postfixedExpression ) + alt130 = 4 + alt130 = self.dfa130.predict(self.input) + if alt130 == 1: + # Java.g:854:9: NOT unaryExpression + pass + NOT436=self.match(self.input, NOT, self.FOLLOW_NOT_in_unaryExpressionNotPlusMinus11402) + if self._state.backtracking == 0: + stream_NOT.add(NOT436) + self._state.following.append(self.FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus11404) + unaryExpression437 = self.unaryExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_unaryExpression.add(unaryExpression437.tree) + + # AST Rewrite + # elements: unaryExpression, NOT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 854:57: -> ^( NOT unaryExpression ) + # Java.g:854:61: ^( NOT unaryExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_NOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_unaryExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt130 == 2: + # Java.g:855:9: LOGICAL_NOT unaryExpression + pass + LOGICAL_NOT438=self.match(self.input, LOGICAL_NOT, self.FOLLOW_LOGICAL_NOT_in_unaryExpressionNotPlusMinus11451) + if self._state.backtracking == 0: + stream_LOGICAL_NOT.add(LOGICAL_NOT438) + self._state.following.append(self.FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus11453) + unaryExpression439 = self.unaryExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_unaryExpression.add(unaryExpression439.tree) + + # AST Rewrite + # elements: unaryExpression, LOGICAL_NOT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 855:57: -> ^( LOGICAL_NOT unaryExpression ) + # Java.g:855:61: ^( LOGICAL_NOT unaryExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_LOGICAL_NOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_unaryExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt130 == 3: + # Java.g:856:9: LPAREN type RPAREN unaryExpression + pass + LPAREN440=self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_unaryExpressionNotPlusMinus11492) + if self._state.backtracking == 0: + stream_LPAREN.add(LPAREN440) + self._state.following.append(self.FOLLOW_type_in_unaryExpressionNotPlusMinus11494) + type441 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type441.tree) + RPAREN442=self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_unaryExpressionNotPlusMinus11496) + if self._state.backtracking == 0: + stream_RPAREN.add(RPAREN442) + self._state.following.append(self.FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus11498) + unaryExpression443 = self.unaryExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_unaryExpression.add(unaryExpression443.tree) + + # AST Rewrite + # elements: type, unaryExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 856:57: -> ^( CAST_EXPR[$LPAREN, \"CAST_EXPR\"] type unaryExpression ) + # Java.g:856:61: ^( CAST_EXPR[$LPAREN, \"CAST_EXPR\"] type unaryExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(CAST_EXPR, LPAREN440, "CAST_EXPR"), root_1) + + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_unaryExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt130 == 4: + # Java.g:857:9: postfixedExpression + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_postfixedExpression_in_unaryExpressionNotPlusMinus11533) + postfixedExpression444 = self.postfixedExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, postfixedExpression444.tree) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 103, unaryExpressionNotPlusMinus_StartIndex, success) + + pass + return retval + + # $ANTLR end "unaryExpressionNotPlusMinus" + + class postfixedExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.postfixedExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "postfixedExpression" + # Java.g:860:1: postfixedExpression : ( primaryExpression -> primaryExpression ) (outerDot= DOT ( ( ( genericTypeArgumentListSimplified )? IDENT -> ^( DOT $postfixedExpression IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) )? | THIS -> ^( DOT $postfixedExpression THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] $postfixedExpression arguments ) | ( SUPER innerDot= DOT IDENT -> ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression arguments ) )? | innerNewExpression -> ^( DOT $postfixedExpression innerNewExpression ) ) | LBRACK expression RBRACK -> ^( ARRAY_ELEMENT_ACCESS $postfixedExpression expression ) )* ( INC -> ^( POST_INC[$INC, \"POST_INC\"] $postfixedExpression) | DEC -> ^( POST_DEC[$DEC, \"POST_DEC\"] $postfixedExpression) )? ; + def postfixedExpression(self, ): + + retval = self.postfixedExpression_return() + retval.start = self.input.LT(1) + postfixedExpression_StartIndex = self.input.index() + root_0 = None + + outerDot = None + Super = None + innerDot = None + IDENT447 = None + THIS449 = None + SUPER451 = None + IDENT452 = None + LBRACK455 = None + RBRACK457 = None + INC458 = None + DEC459 = None + primaryExpression445 = None + + genericTypeArgumentListSimplified446 = None + + arguments448 = None + + arguments450 = None + + arguments453 = None + + innerNewExpression454 = None + + expression456 = None + + + outerDot_tree = None + Super_tree = None + innerDot_tree = None + IDENT447_tree = None + THIS449_tree = None + SUPER451_tree = None + IDENT452_tree = None + LBRACK455_tree = None + RBRACK457_tree = None + INC458_tree = None + DEC459_tree = None + stream_RBRACK = RewriteRuleTokenStream(self._adaptor, "token RBRACK") + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_INC = RewriteRuleTokenStream(self._adaptor, "token INC") + stream_DEC = RewriteRuleTokenStream(self._adaptor, "token DEC") + stream_LBRACK = RewriteRuleTokenStream(self._adaptor, "token LBRACK") + stream_SUPER = RewriteRuleTokenStream(self._adaptor, "token SUPER") + stream_DOT = RewriteRuleTokenStream(self._adaptor, "token DOT") + stream_THIS = RewriteRuleTokenStream(self._adaptor, "token THIS") + stream_expression = RewriteRuleSubtreeStream(self._adaptor, "rule expression") + stream_arguments = RewriteRuleSubtreeStream(self._adaptor, "rule arguments") + stream_primaryExpression = RewriteRuleSubtreeStream(self._adaptor, "rule primaryExpression") + stream_genericTypeArgumentListSimplified = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeArgumentListSimplified") + stream_innerNewExpression = RewriteRuleSubtreeStream(self._adaptor, "rule innerNewExpression") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 104): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:862:5: ( ( primaryExpression -> primaryExpression ) (outerDot= DOT ( ( ( genericTypeArgumentListSimplified )? IDENT -> ^( DOT $postfixedExpression IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) )? | THIS -> ^( DOT $postfixedExpression THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] $postfixedExpression arguments ) | ( SUPER innerDot= DOT IDENT -> ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression arguments ) )? | innerNewExpression -> ^( DOT $postfixedExpression innerNewExpression ) ) | LBRACK expression RBRACK -> ^( ARRAY_ELEMENT_ACCESS $postfixedExpression expression ) )* ( INC -> ^( POST_INC[$INC, \"POST_INC\"] $postfixedExpression) | DEC -> ^( POST_DEC[$DEC, \"POST_DEC\"] $postfixedExpression) )? ) + # Java.g:862:9: ( primaryExpression -> primaryExpression ) (outerDot= DOT ( ( ( genericTypeArgumentListSimplified )? IDENT -> ^( DOT $postfixedExpression IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) )? | THIS -> ^( DOT $postfixedExpression THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] $postfixedExpression arguments ) | ( SUPER innerDot= DOT IDENT -> ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression arguments ) )? | innerNewExpression -> ^( DOT $postfixedExpression innerNewExpression ) ) | LBRACK expression RBRACK -> ^( ARRAY_ELEMENT_ACCESS $postfixedExpression expression ) )* ( INC -> ^( POST_INC[$INC, \"POST_INC\"] $postfixedExpression) | DEC -> ^( POST_DEC[$DEC, \"POST_DEC\"] $postfixedExpression) )? + pass + # Java.g:862:9: ( primaryExpression -> primaryExpression ) + # Java.g:862:13: primaryExpression + pass + self._state.following.append(self.FOLLOW_primaryExpression_in_postfixedExpression11565) + primaryExpression445 = self.primaryExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_primaryExpression.add(primaryExpression445.tree) + + # AST Rewrite + # elements: primaryExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 862:53: -> primaryExpression + self._adaptor.addChild(root_0, stream_primaryExpression.nextTree()) + + + + retval.tree = root_0 + + + + # Java.g:865:9: (outerDot= DOT ( ( ( genericTypeArgumentListSimplified )? IDENT -> ^( DOT $postfixedExpression IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) )? | THIS -> ^( DOT $postfixedExpression THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] $postfixedExpression arguments ) | ( SUPER innerDot= DOT IDENT -> ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression arguments ) )? | innerNewExpression -> ^( DOT $postfixedExpression innerNewExpression ) ) | LBRACK expression RBRACK -> ^( ARRAY_ELEMENT_ACCESS $postfixedExpression expression ) )* + while True: #loop135 + alt135 = 3 + LA135_0 = self.input.LA(1) + + if (LA135_0 == DOT) : + alt135 = 1 + elif (LA135_0 == LBRACK) : + alt135 = 2 + + + if alt135 == 1: + # Java.g:865:13: outerDot= DOT ( ( ( genericTypeArgumentListSimplified )? IDENT -> ^( DOT $postfixedExpression IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) )? | THIS -> ^( DOT $postfixedExpression THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] $postfixedExpression arguments ) | ( SUPER innerDot= DOT IDENT -> ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression arguments ) )? | innerNewExpression -> ^( DOT $postfixedExpression innerNewExpression ) ) + pass + outerDot=self.match(self.input, DOT, self.FOLLOW_DOT_in_postfixedExpression11627) + if self._state.backtracking == 0: + stream_DOT.add(outerDot) + # Java.g:866:13: ( ( ( genericTypeArgumentListSimplified )? IDENT -> ^( DOT $postfixedExpression IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) )? | THIS -> ^( DOT $postfixedExpression THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] $postfixedExpression arguments ) | ( SUPER innerDot= DOT IDENT -> ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression arguments ) )? | innerNewExpression -> ^( DOT $postfixedExpression innerNewExpression ) ) + alt134 = 5 + LA134 = self.input.LA(1) + if LA134 == LESS_THAN or LA134 == IDENT: + alt134 = 1 + elif LA134 == THIS: + alt134 = 2 + elif LA134 == SUPER: + LA134_3 = self.input.LA(2) + + if (LA134_3 == DOT) : + alt134 = 4 + elif (LA134_3 == LPAREN) : + alt134 = 3 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 134, 3, self.input) + + raise nvae + + elif LA134 == NEW: + alt134 = 5 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 134, 0, self.input) + + raise nvae + + if alt134 == 1: + # Java.g:866:17: ( ( genericTypeArgumentListSimplified )? IDENT -> ^( DOT $postfixedExpression IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) )? + pass + # Java.g:866:17: ( ( genericTypeArgumentListSimplified )? IDENT -> ^( DOT $postfixedExpression IDENT ) ) + # Java.g:866:21: ( genericTypeArgumentListSimplified )? IDENT + pass + # Java.g:866:21: ( genericTypeArgumentListSimplified )? + alt131 = 2 + LA131_0 = self.input.LA(1) + + if (LA131_0 == LESS_THAN) : + alt131 = 1 + if alt131 == 1: + # Java.g:0:0: genericTypeArgumentListSimplified + pass + self._state.following.append(self.FOLLOW_genericTypeArgumentListSimplified_in_postfixedExpression11649) + genericTypeArgumentListSimplified446 = self.genericTypeArgumentListSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeArgumentListSimplified.add(genericTypeArgumentListSimplified446.tree) + + + + IDENT447=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_postfixedExpression11731) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT447) + + # AST Rewrite + # elements: IDENT, postfixedExpression, DOT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 868:53: -> ^( DOT $postfixedExpression IDENT ) + # Java.g:868:57: ^( DOT $postfixedExpression IDENT ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + # Java.g:870:17: ( arguments -> ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) )? + alt132 = 2 + LA132_0 = self.input.LA(1) + + if (LA132_0 == LPAREN) : + alt132 = 1 + if alt132 == 1: + # Java.g:870:21: arguments + pass + self._state.following.append(self.FOLLOW_arguments_in_postfixedExpression11809) + arguments448 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments448.tree) + + # AST Rewrite + # elements: arguments, genericTypeArgumentListSimplified, postfixedExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 870:53: -> ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) + # Java.g:870:57: ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(METHOD_CALL, "METHOD_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + # Java.g:870:92: ( genericTypeArgumentListSimplified )? + if stream_genericTypeArgumentListSimplified.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + + + stream_genericTypeArgumentListSimplified.reset(); + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt134 == 2: + # Java.g:872:17: THIS + pass + THIS449=self.match(self.input, THIS, self.FOLLOW_THIS_in_postfixedExpression11883) + if self._state.backtracking == 0: + stream_THIS.add(THIS449) + + # AST Rewrite + # elements: THIS, postfixedExpression, DOT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 872:53: -> ^( DOT $postfixedExpression THIS ) + # Java.g:872:57: ^( DOT $postfixedExpression THIS ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + self._adaptor.addChild(root_1, stream_THIS.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt134 == 3: + # Java.g:873:17: Super= SUPER arguments + pass + Super=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_postfixedExpression11946) + if self._state.backtracking == 0: + stream_SUPER.add(Super) + self._state.following.append(self.FOLLOW_arguments_in_postfixedExpression11948) + arguments450 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments450.tree) + + # AST Rewrite + # elements: postfixedExpression, arguments + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 873:57: -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] $postfixedExpression arguments ) + # Java.g:873:61: ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] $postfixedExpression arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(SUPER_CONSTRUCTOR_CALL, Super, "SUPER_CONSTRUCTOR_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt134 == 4: + # Java.g:874:17: ( SUPER innerDot= DOT IDENT -> ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression arguments ) )? + pass + # Java.g:874:17: ( SUPER innerDot= DOT IDENT -> ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) ) + # Java.g:874:21: SUPER innerDot= DOT IDENT + pass + SUPER451=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_postfixedExpression12001) + if self._state.backtracking == 0: + stream_SUPER.add(SUPER451) + innerDot=self.match(self.input, DOT, self.FOLLOW_DOT_in_postfixedExpression12005) + if self._state.backtracking == 0: + stream_DOT.add(innerDot) + IDENT452=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_postfixedExpression12007) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT452) + + # AST Rewrite + # elements: SUPER, IDENT, postfixedExpression, innerDot, outerDot + # token labels: outerDot, innerDot + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + stream_outerDot = RewriteRuleTokenStream(self._adaptor, "token outerDot", outerDot) + stream_innerDot = RewriteRuleTokenStream(self._adaptor, "token innerDot", innerDot) + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 874:53: -> ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) + # Java.g:874:57: ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_innerDot.nextNode(), root_1) + + # Java.g:874:69: ^( $outerDot $postfixedExpression SUPER ) + root_2 = self._adaptor.nil() + root_2 = self._adaptor.becomeRoot(stream_outerDot.nextNode(), root_2) + + self._adaptor.addChild(root_2, stream_retval.nextTree()) + self._adaptor.addChild(root_2, stream_SUPER.nextNode()) + + self._adaptor.addChild(root_1, root_2) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + # Java.g:876:17: ( arguments -> ^( METHOD_CALL $postfixedExpression arguments ) )? + alt133 = 2 + LA133_0 = self.input.LA(1) + + if (LA133_0 == LPAREN) : + alt133 = 1 + if alt133 == 1: + # Java.g:876:21: arguments + pass + self._state.following.append(self.FOLLOW_arguments_in_postfixedExpression12074) + arguments453 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments453.tree) + + # AST Rewrite + # elements: postfixedExpression, arguments + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 876:53: -> ^( METHOD_CALL $postfixedExpression arguments ) + # Java.g:876:57: ^( METHOD_CALL $postfixedExpression arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(METHOD_CALL, "METHOD_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt134 == 5: + # Java.g:878:17: innerNewExpression + pass + self._state.following.append(self.FOLLOW_innerNewExpression_in_postfixedExpression12145) + innerNewExpression454 = self.innerNewExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_innerNewExpression.add(innerNewExpression454.tree) + + # AST Rewrite + # elements: innerNewExpression, DOT, postfixedExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 878:53: -> ^( DOT $postfixedExpression innerNewExpression ) + # Java.g:878:57: ^( DOT $postfixedExpression innerNewExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + self._adaptor.addChild(root_1, stream_innerNewExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt135 == 2: + # Java.g:880:13: LBRACK expression RBRACK + pass + LBRACK455=self.match(self.input, LBRACK, self.FOLLOW_LBRACK_in_postfixedExpression12202) + if self._state.backtracking == 0: + stream_LBRACK.add(LBRACK455) + self._state.following.append(self.FOLLOW_expression_in_postfixedExpression12204) + expression456 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expression.add(expression456.tree) + RBRACK457=self.match(self.input, RBRACK, self.FOLLOW_RBRACK_in_postfixedExpression12206) + if self._state.backtracking == 0: + stream_RBRACK.add(RBRACK457) + + # AST Rewrite + # elements: expression, postfixedExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 880:53: -> ^( ARRAY_ELEMENT_ACCESS $postfixedExpression expression ) + # Java.g:880:57: ^( ARRAY_ELEMENT_ACCESS $postfixedExpression expression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(ARRAY_ELEMENT_ACCESS, "ARRAY_ELEMENT_ACCESS"), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + self._adaptor.addChild(root_1, stream_expression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + else: + break #loop135 + # Java.g:883:9: ( INC -> ^( POST_INC[$INC, \"POST_INC\"] $postfixedExpression) | DEC -> ^( POST_DEC[$DEC, \"POST_DEC\"] $postfixedExpression) )? + alt136 = 3 + LA136_0 = self.input.LA(1) + + if (LA136_0 == INC) : + alt136 = 1 + elif (LA136_0 == DEC) : + alt136 = 2 + if alt136 == 1: + # Java.g:883:13: INC + pass + INC458=self.match(self.input, INC, self.FOLLOW_INC_in_postfixedExpression12267) + if self._state.backtracking == 0: + stream_INC.add(INC458) + + # AST Rewrite + # elements: postfixedExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 883:17: -> ^( POST_INC[$INC, \"POST_INC\"] $postfixedExpression) + # Java.g:883:20: ^( POST_INC[$INC, \"POST_INC\"] $postfixedExpression) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(POST_INC, INC458, "POST_INC"), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt136 == 2: + # Java.g:884:13: DEC + pass + DEC459=self.match(self.input, DEC, self.FOLLOW_DEC_in_postfixedExpression12291) + if self._state.backtracking == 0: + stream_DEC.add(DEC459) + + # AST Rewrite + # elements: postfixedExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 884:17: -> ^( POST_DEC[$DEC, \"POST_DEC\"] $postfixedExpression) + # Java.g:884:20: ^( POST_DEC[$DEC, \"POST_DEC\"] $postfixedExpression) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(POST_DEC, DEC459, "POST_DEC"), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 104, postfixedExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "postfixedExpression" + + class primaryExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.primaryExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "primaryExpression" + # Java.g:888:1: primaryExpression : ( parenthesizedExpression | literal | newExpression | qualifiedIdentExpression | genericTypeArgumentListSimplified ( SUPER ( arguments -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) | DOT IDENT arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) genericTypeArgumentListSimplified arguments ) ) | IDENT arguments -> ^( METHOD_CALL IDENT genericTypeArgumentListSimplified arguments ) | THIS arguments -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) ) | ( THIS -> THIS ) ( arguments -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] arguments ) )? | SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] arguments ) | ( SUPER DOT IDENT ) ( arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) arguments ) | -> ^( DOT SUPER IDENT ) ) | ( primitiveType -> primitiveType ) ( arrayDeclarator -> ^( arrayDeclarator $primaryExpression) )* DOT CLASS -> ^( DOT $primaryExpression CLASS ) | VOID DOT CLASS -> ^( DOT VOID CLASS ) ); + def primaryExpression(self, ): + + retval = self.primaryExpression_return() + retval.start = self.input.LT(1) + primaryExpression_StartIndex = self.input.index() + root_0 = None + + SUPER465 = None + DOT467 = None + IDENT468 = None + IDENT470 = None + THIS472 = None + THIS474 = None + SUPER476 = None + SUPER478 = None + DOT479 = None + IDENT480 = None + DOT484 = None + CLASS485 = None + VOID486 = None + DOT487 = None + CLASS488 = None + parenthesizedExpression460 = None + + literal461 = None + + newExpression462 = None + + qualifiedIdentExpression463 = None + + genericTypeArgumentListSimplified464 = None + + arguments466 = None + + arguments469 = None + + arguments471 = None + + arguments473 = None + + arguments475 = None + + arguments477 = None + + arguments481 = None + + primitiveType482 = None + + arrayDeclarator483 = None + + + SUPER465_tree = None + DOT467_tree = None + IDENT468_tree = None + IDENT470_tree = None + THIS472_tree = None + THIS474_tree = None + SUPER476_tree = None + SUPER478_tree = None + DOT479_tree = None + IDENT480_tree = None + DOT484_tree = None + CLASS485_tree = None + VOID486_tree = None + DOT487_tree = None + CLASS488_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_CLASS = RewriteRuleTokenStream(self._adaptor, "token CLASS") + stream_VOID = RewriteRuleTokenStream(self._adaptor, "token VOID") + stream_SUPER = RewriteRuleTokenStream(self._adaptor, "token SUPER") + stream_DOT = RewriteRuleTokenStream(self._adaptor, "token DOT") + stream_THIS = RewriteRuleTokenStream(self._adaptor, "token THIS") + stream_arrayDeclarator = RewriteRuleSubtreeStream(self._adaptor, "rule arrayDeclarator") + stream_arguments = RewriteRuleSubtreeStream(self._adaptor, "rule arguments") + stream_primitiveType = RewriteRuleSubtreeStream(self._adaptor, "rule primitiveType") + stream_genericTypeArgumentListSimplified = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeArgumentListSimplified") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 105): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:889:5: ( parenthesizedExpression | literal | newExpression | qualifiedIdentExpression | genericTypeArgumentListSimplified ( SUPER ( arguments -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) | DOT IDENT arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) genericTypeArgumentListSimplified arguments ) ) | IDENT arguments -> ^( METHOD_CALL IDENT genericTypeArgumentListSimplified arguments ) | THIS arguments -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) ) | ( THIS -> THIS ) ( arguments -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] arguments ) )? | SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] arguments ) | ( SUPER DOT IDENT ) ( arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) arguments ) | -> ^( DOT SUPER IDENT ) ) | ( primitiveType -> primitiveType ) ( arrayDeclarator -> ^( arrayDeclarator $primaryExpression) )* DOT CLASS -> ^( DOT $primaryExpression CLASS ) | VOID DOT CLASS -> ^( DOT VOID CLASS ) ) + alt142 = 10 + alt142 = self.dfa142.predict(self.input) + if alt142 == 1: + # Java.g:889:9: parenthesizedExpression + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_parenthesizedExpression_in_primaryExpression12331) + parenthesizedExpression460 = self.parenthesizedExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, parenthesizedExpression460.tree) + + + elif alt142 == 2: + # Java.g:890:9: literal + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_literal_in_primaryExpression12341) + literal461 = self.literal() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, literal461.tree) + + + elif alt142 == 3: + # Java.g:891:9: newExpression + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_newExpression_in_primaryExpression12351) + newExpression462 = self.newExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, newExpression462.tree) + + + elif alt142 == 4: + # Java.g:892:9: qualifiedIdentExpression + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_qualifiedIdentExpression_in_primaryExpression12361) + qualifiedIdentExpression463 = self.qualifiedIdentExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, qualifiedIdentExpression463.tree) + + + elif alt142 == 5: + # Java.g:893:9: genericTypeArgumentListSimplified ( SUPER ( arguments -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) | DOT IDENT arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) genericTypeArgumentListSimplified arguments ) ) | IDENT arguments -> ^( METHOD_CALL IDENT genericTypeArgumentListSimplified arguments ) | THIS arguments -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) ) + pass + self._state.following.append(self.FOLLOW_genericTypeArgumentListSimplified_in_primaryExpression12371) + genericTypeArgumentListSimplified464 = self.genericTypeArgumentListSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeArgumentListSimplified.add(genericTypeArgumentListSimplified464.tree) + # Java.g:894:9: ( SUPER ( arguments -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) | DOT IDENT arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) genericTypeArgumentListSimplified arguments ) ) | IDENT arguments -> ^( METHOD_CALL IDENT genericTypeArgumentListSimplified arguments ) | THIS arguments -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) ) + alt138 = 3 + LA138 = self.input.LA(1) + if LA138 == SUPER: + alt138 = 1 + elif LA138 == IDENT: + alt138 = 2 + elif LA138 == THIS: + alt138 = 3 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 138, 0, self.input) + + raise nvae + + if alt138 == 1: + # Java.g:894:13: SUPER ( arguments -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) | DOT IDENT arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) genericTypeArgumentListSimplified arguments ) ) + pass + SUPER465=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_primaryExpression12385) + if self._state.backtracking == 0: + stream_SUPER.add(SUPER465) + # Java.g:895:13: ( arguments -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) | DOT IDENT arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) genericTypeArgumentListSimplified arguments ) ) + alt137 = 2 + LA137_0 = self.input.LA(1) + + if (LA137_0 == LPAREN) : + alt137 = 1 + elif (LA137_0 == DOT) : + alt137 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 137, 0, self.input) + + raise nvae + + if alt137 == 1: + # Java.g:895:17: arguments + pass + self._state.following.append(self.FOLLOW_arguments_in_primaryExpression12403) + arguments466 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments466.tree) + + # AST Rewrite + # elements: arguments, genericTypeArgumentListSimplified + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 895:57: -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) + # Java.g:895:61: ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(SUPER_CONSTRUCTOR_CALL, SUPER465, "SUPER_CONSTRUCTOR_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt137 == 2: + # Java.g:896:17: DOT IDENT arguments + pass + DOT467=self.match(self.input, DOT, self.FOLLOW_DOT_in_primaryExpression12463) + if self._state.backtracking == 0: + stream_DOT.add(DOT467) + IDENT468=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_primaryExpression12465) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT468) + self._state.following.append(self.FOLLOW_arguments_in_primaryExpression12467) + arguments469 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments469.tree) + + # AST Rewrite + # elements: genericTypeArgumentListSimplified, arguments, DOT, IDENT, SUPER + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 896:57: -> ^( METHOD_CALL ^( DOT SUPER IDENT ) genericTypeArgumentListSimplified arguments ) + # Java.g:896:61: ^( METHOD_CALL ^( DOT SUPER IDENT ) genericTypeArgumentListSimplified arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(METHOD_CALL, "METHOD_CALL"), root_1) + + # Java.g:896:75: ^( DOT SUPER IDENT ) + root_2 = self._adaptor.nil() + root_2 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_2) + + self._adaptor.addChild(root_2, stream_SUPER.nextNode()) + self._adaptor.addChild(root_2, stream_IDENT.nextNode()) + + self._adaptor.addChild(root_1, root_2) + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt138 == 2: + # Java.g:898:13: IDENT arguments + pass + IDENT470=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_primaryExpression12534) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT470) + self._state.following.append(self.FOLLOW_arguments_in_primaryExpression12536) + arguments471 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments471.tree) + + # AST Rewrite + # elements: arguments, IDENT, genericTypeArgumentListSimplified + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 898:57: -> ^( METHOD_CALL IDENT genericTypeArgumentListSimplified arguments ) + # Java.g:898:61: ^( METHOD_CALL IDENT genericTypeArgumentListSimplified arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(METHOD_CALL, "METHOD_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt138 == 3: + # Java.g:899:13: THIS arguments + pass + THIS472=self.match(self.input, THIS, self.FOLLOW_THIS_in_primaryExpression12591) + if self._state.backtracking == 0: + stream_THIS.add(THIS472) + self._state.following.append(self.FOLLOW_arguments_in_primaryExpression12593) + arguments473 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments473.tree) + + # AST Rewrite + # elements: genericTypeArgumentListSimplified, arguments + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 899:57: -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) + # Java.g:899:61: ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(THIS_CONSTRUCTOR_CALL, THIS472, "THIS_CONSTRUCTOR_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt142 == 6: + # Java.g:901:9: ( THIS -> THIS ) ( arguments -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] arguments ) )? + pass + # Java.g:901:9: ( THIS -> THIS ) + # Java.g:901:13: THIS + pass + THIS474=self.match(self.input, THIS, self.FOLLOW_THIS_in_primaryExpression12658) + if self._state.backtracking == 0: + stream_THIS.add(THIS474) + + # AST Rewrite + # elements: THIS + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 901:57: -> THIS + self._adaptor.addChild(root_0, stream_THIS.nextNode()) + + + + retval.tree = root_0 + + + + # Java.g:903:9: ( arguments -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] arguments ) )? + alt139 = 2 + LA139_0 = self.input.LA(1) + + if (LA139_0 == LPAREN) : + alt139 = 1 + if alt139 == 1: + # Java.g:903:13: arguments + pass + self._state.following.append(self.FOLLOW_arguments_in_primaryExpression12726) + arguments475 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments475.tree) + + # AST Rewrite + # elements: arguments + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 903:57: -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] arguments ) + # Java.g:903:61: ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(THIS_CONSTRUCTOR_CALL, THIS474, "THIS_CONSTRUCTOR_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt142 == 7: + # Java.g:905:9: SUPER arguments + pass + SUPER476=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_primaryExpression12791) + if self._state.backtracking == 0: + stream_SUPER.add(SUPER476) + self._state.following.append(self.FOLLOW_arguments_in_primaryExpression12793) + arguments477 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments477.tree) + + # AST Rewrite + # elements: arguments + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 905:57: -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] arguments ) + # Java.g:905:61: ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(SUPER_CONSTRUCTOR_CALL, SUPER476, "SUPER_CONSTRUCTOR_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt142 == 8: + # Java.g:906:9: ( SUPER DOT IDENT ) ( arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) arguments ) | -> ^( DOT SUPER IDENT ) ) + pass + # Java.g:906:9: ( SUPER DOT IDENT ) + # Java.g:906:13: SUPER DOT IDENT + pass + SUPER478=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_primaryExpression12849) + if self._state.backtracking == 0: + stream_SUPER.add(SUPER478) + DOT479=self.match(self.input, DOT, self.FOLLOW_DOT_in_primaryExpression12851) + if self._state.backtracking == 0: + stream_DOT.add(DOT479) + IDENT480=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_primaryExpression12853) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT480) + + + + # Java.g:908:9: ( arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) arguments ) | -> ^( DOT SUPER IDENT ) ) + alt140 = 2 + LA140_0 = self.input.LA(1) + + if (LA140_0 == LPAREN) : + alt140 = 1 + elif (LA140_0 == EOF or (AND <= LA140_0 <= ASSIGN) or (BIT_SHIFT_RIGHT <= LA140_0 <= DOT) or (EQUAL <= LA140_0 <= LBRACK) or (LESS_OR_EQUAL <= LA140_0 <= LOGICAL_AND) or LA140_0 == LOGICAL_OR or (MINUS <= LA140_0 <= MOD_ASSIGN) or (NOT_EQUAL <= LA140_0 <= XOR_ASSIGN) or LA140_0 == INSTANCEOF) : + alt140 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 140, 0, self.input) + + raise nvae + + if alt140 == 1: + # Java.g:908:13: arguments + pass + self._state.following.append(self.FOLLOW_arguments_in_primaryExpression12877) + arguments481 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments481.tree) + + # AST Rewrite + # elements: arguments, SUPER, DOT, IDENT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 908:57: -> ^( METHOD_CALL ^( DOT SUPER IDENT ) arguments ) + # Java.g:908:61: ^( METHOD_CALL ^( DOT SUPER IDENT ) arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(METHOD_CALL, "METHOD_CALL"), root_1) + + # Java.g:908:75: ^( DOT SUPER IDENT ) + root_2 = self._adaptor.nil() + root_2 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_2) + + self._adaptor.addChild(root_2, stream_SUPER.nextNode()) + self._adaptor.addChild(root_2, stream_IDENT.nextNode()) + + self._adaptor.addChild(root_1, root_2) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt140 == 2: + # Java.g:909:57: + pass + # AST Rewrite + # elements: SUPER, IDENT, DOT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 909:57: -> ^( DOT SUPER IDENT ) + # Java.g:909:61: ^( DOT SUPER IDENT ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_SUPER.nextNode()) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt142 == 9: + # Java.g:911:9: ( primitiveType -> primitiveType ) ( arrayDeclarator -> ^( arrayDeclarator $primaryExpression) )* DOT CLASS + pass + # Java.g:911:9: ( primitiveType -> primitiveType ) + # Java.g:911:13: primitiveType + pass + self._state.following.append(self.FOLLOW_primitiveType_in_primaryExpression13019) + primitiveType482 = self.primitiveType() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_primitiveType.add(primitiveType482.tree) + + # AST Rewrite + # elements: primitiveType + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 911:57: -> primitiveType + self._adaptor.addChild(root_0, stream_primitiveType.nextTree()) + + + + retval.tree = root_0 + + + + # Java.g:913:9: ( arrayDeclarator -> ^( arrayDeclarator $primaryExpression) )* + while True: #loop141 + alt141 = 2 + LA141_0 = self.input.LA(1) + + if (LA141_0 == LBRACK) : + alt141 = 1 + + + if alt141 == 1: + # Java.g:913:13: arrayDeclarator + pass + self._state.following.append(self.FOLLOW_arrayDeclarator_in_primaryExpression13078) + arrayDeclarator483 = self.arrayDeclarator() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arrayDeclarator.add(arrayDeclarator483.tree) + + # AST Rewrite + # elements: primaryExpression, arrayDeclarator + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 913:57: -> ^( arrayDeclarator $primaryExpression) + # Java.g:913:61: ^( arrayDeclarator $primaryExpression) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_arrayDeclarator.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + else: + break #loop141 + DOT484=self.match(self.input, DOT, self.FOLLOW_DOT_in_primaryExpression13137) + if self._state.backtracking == 0: + stream_DOT.add(DOT484) + CLASS485=self.match(self.input, CLASS, self.FOLLOW_CLASS_in_primaryExpression13139) + if self._state.backtracking == 0: + stream_CLASS.add(CLASS485) + + # AST Rewrite + # elements: primaryExpression, CLASS, DOT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 915:57: -> ^( DOT $primaryExpression CLASS ) + # Java.g:915:61: ^( DOT $primaryExpression CLASS ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + self._adaptor.addChild(root_1, stream_CLASS.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt142 == 10: + # Java.g:916:9: VOID DOT CLASS + pass + VOID486=self.match(self.input, VOID, self.FOLLOW_VOID_in_primaryExpression13199) + if self._state.backtracking == 0: + stream_VOID.add(VOID486) + DOT487=self.match(self.input, DOT, self.FOLLOW_DOT_in_primaryExpression13201) + if self._state.backtracking == 0: + stream_DOT.add(DOT487) + CLASS488=self.match(self.input, CLASS, self.FOLLOW_CLASS_in_primaryExpression13203) + if self._state.backtracking == 0: + stream_CLASS.add(CLASS488) + + # AST Rewrite + # elements: DOT, VOID, CLASS + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 916:57: -> ^( DOT VOID CLASS ) + # Java.g:916:61: ^( DOT VOID CLASS ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_VOID.nextNode()) + self._adaptor.addChild(root_1, stream_CLASS.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 105, primaryExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "primaryExpression" + + class qualifiedIdentExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.qualifiedIdentExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "qualifiedIdentExpression" + # Java.g:919:1: qualifiedIdentExpression : ( qualifiedIdentifier -> qualifiedIdentifier ) ( ( arrayDeclarator -> ^( arrayDeclarator $qualifiedIdentExpression) )+ ( DOT CLASS -> ^( DOT $qualifiedIdentExpression CLASS ) ) | arguments -> ^( METHOD_CALL qualifiedIdentifier arguments ) | outerDot= DOT ( CLASS -> ^( DOT qualifiedIdentifier CLASS ) | genericTypeArgumentListSimplified (Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) | SUPER innerDot= DOT IDENT arguments -> ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) | IDENT arguments -> ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) ) | THIS -> ^( DOT qualifiedIdentifier THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier arguments ) | innerNewExpression -> ^( DOT qualifiedIdentifier innerNewExpression ) ) )? ; + def qualifiedIdentExpression(self, ): + + retval = self.qualifiedIdentExpression_return() + retval.start = self.input.LT(1) + qualifiedIdentExpression_StartIndex = self.input.index() + root_0 = None + + outerDot = None + Super = None + innerDot = None + DOT491 = None + CLASS492 = None + CLASS494 = None + SUPER497 = None + IDENT498 = None + IDENT500 = None + THIS502 = None + qualifiedIdentifier489 = None + + arrayDeclarator490 = None + + arguments493 = None + + genericTypeArgumentListSimplified495 = None + + arguments496 = None + + arguments499 = None + + arguments501 = None + + arguments503 = None + + innerNewExpression504 = None + + + outerDot_tree = None + Super_tree = None + innerDot_tree = None + DOT491_tree = None + CLASS492_tree = None + CLASS494_tree = None + SUPER497_tree = None + IDENT498_tree = None + IDENT500_tree = None + THIS502_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_CLASS = RewriteRuleTokenStream(self._adaptor, "token CLASS") + stream_SUPER = RewriteRuleTokenStream(self._adaptor, "token SUPER") + stream_DOT = RewriteRuleTokenStream(self._adaptor, "token DOT") + stream_THIS = RewriteRuleTokenStream(self._adaptor, "token THIS") + stream_arrayDeclarator = RewriteRuleSubtreeStream(self._adaptor, "rule arrayDeclarator") + stream_arguments = RewriteRuleSubtreeStream(self._adaptor, "rule arguments") + stream_qualifiedIdentifier = RewriteRuleSubtreeStream(self._adaptor, "rule qualifiedIdentifier") + stream_genericTypeArgumentListSimplified = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeArgumentListSimplified") + stream_innerNewExpression = RewriteRuleSubtreeStream(self._adaptor, "rule innerNewExpression") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 106): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:921:5: ( ( qualifiedIdentifier -> qualifiedIdentifier ) ( ( arrayDeclarator -> ^( arrayDeclarator $qualifiedIdentExpression) )+ ( DOT CLASS -> ^( DOT $qualifiedIdentExpression CLASS ) ) | arguments -> ^( METHOD_CALL qualifiedIdentifier arguments ) | outerDot= DOT ( CLASS -> ^( DOT qualifiedIdentifier CLASS ) | genericTypeArgumentListSimplified (Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) | SUPER innerDot= DOT IDENT arguments -> ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) | IDENT arguments -> ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) ) | THIS -> ^( DOT qualifiedIdentifier THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier arguments ) | innerNewExpression -> ^( DOT qualifiedIdentifier innerNewExpression ) ) )? ) + # Java.g:921:9: ( qualifiedIdentifier -> qualifiedIdentifier ) ( ( arrayDeclarator -> ^( arrayDeclarator $qualifiedIdentExpression) )+ ( DOT CLASS -> ^( DOT $qualifiedIdentExpression CLASS ) ) | arguments -> ^( METHOD_CALL qualifiedIdentifier arguments ) | outerDot= DOT ( CLASS -> ^( DOT qualifiedIdentifier CLASS ) | genericTypeArgumentListSimplified (Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) | SUPER innerDot= DOT IDENT arguments -> ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) | IDENT arguments -> ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) ) | THIS -> ^( DOT qualifiedIdentifier THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier arguments ) | innerNewExpression -> ^( DOT qualifiedIdentifier innerNewExpression ) ) )? + pass + # Java.g:921:9: ( qualifiedIdentifier -> qualifiedIdentifier ) + # Java.g:921:13: qualifiedIdentifier + pass + self._state.following.append(self.FOLLOW_qualifiedIdentifier_in_qualifiedIdentExpression13279) + qualifiedIdentifier489 = self.qualifiedIdentifier() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_qualifiedIdentifier.add(qualifiedIdentifier489.tree) + + # AST Rewrite + # elements: qualifiedIdentifier + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 921:61: -> qualifiedIdentifier + self._adaptor.addChild(root_0, stream_qualifiedIdentifier.nextTree()) + + + + retval.tree = root_0 + + + + # Java.g:924:9: ( ( arrayDeclarator -> ^( arrayDeclarator $qualifiedIdentExpression) )+ ( DOT CLASS -> ^( DOT $qualifiedIdentExpression CLASS ) ) | arguments -> ^( METHOD_CALL qualifiedIdentifier arguments ) | outerDot= DOT ( CLASS -> ^( DOT qualifiedIdentifier CLASS ) | genericTypeArgumentListSimplified (Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) | SUPER innerDot= DOT IDENT arguments -> ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) | IDENT arguments -> ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) ) | THIS -> ^( DOT qualifiedIdentifier THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier arguments ) | innerNewExpression -> ^( DOT qualifiedIdentifier innerNewExpression ) ) )? + alt146 = 4 + alt146 = self.dfa146.predict(self.input) + if alt146 == 1: + # Java.g:924:13: ( arrayDeclarator -> ^( arrayDeclarator $qualifiedIdentExpression) )+ ( DOT CLASS -> ^( DOT $qualifiedIdentExpression CLASS ) ) + pass + # Java.g:924:13: ( arrayDeclarator -> ^( arrayDeclarator $qualifiedIdentExpression) )+ + cnt143 = 0 + while True: #loop143 + alt143 = 2 + LA143_0 = self.input.LA(1) + + if (LA143_0 == LBRACK) : + alt143 = 1 + + + if alt143 == 1: + # Java.g:924:17: arrayDeclarator + pass + self._state.following.append(self.FOLLOW_arrayDeclarator_in_qualifiedIdentExpression13349) + arrayDeclarator490 = self.arrayDeclarator() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arrayDeclarator.add(arrayDeclarator490.tree) + + # AST Rewrite + # elements: qualifiedIdentExpression, arrayDeclarator + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 924:57: -> ^( arrayDeclarator $qualifiedIdentExpression) + # Java.g:924:61: ^( arrayDeclarator $qualifiedIdentExpression) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_arrayDeclarator.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + else: + if cnt143 >= 1: + break #loop143 + + if self._state.backtracking > 0: + raise BacktrackingFailed + + eee = EarlyExitException(143, self.input) + raise eee + + cnt143 += 1 + # Java.g:926:13: ( DOT CLASS -> ^( DOT $qualifiedIdentExpression CLASS ) ) + # Java.g:926:17: DOT CLASS + pass + DOT491=self.match(self.input, DOT, self.FOLLOW_DOT_in_qualifiedIdentExpression13416) + if self._state.backtracking == 0: + stream_DOT.add(DOT491) + CLASS492=self.match(self.input, CLASS, self.FOLLOW_CLASS_in_qualifiedIdentExpression13418) + if self._state.backtracking == 0: + stream_CLASS.add(CLASS492) + + # AST Rewrite + # elements: CLASS, DOT, qualifiedIdentExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 926:57: -> ^( DOT $qualifiedIdentExpression CLASS ) + # Java.g:926:61: ^( DOT $qualifiedIdentExpression CLASS ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + self._adaptor.addChild(root_1, stream_CLASS.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt146 == 2: + # Java.g:928:13: arguments + pass + self._state.following.append(self.FOLLOW_arguments_in_qualifiedIdentExpression13488) + arguments493 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments493.tree) + + # AST Rewrite + # elements: arguments, qualifiedIdentifier + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 928:57: -> ^( METHOD_CALL qualifiedIdentifier arguments ) + # Java.g:928:61: ^( METHOD_CALL qualifiedIdentifier arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(METHOD_CALL, "METHOD_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_qualifiedIdentifier.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt146 == 3: + # Java.g:929:13: outerDot= DOT ( CLASS -> ^( DOT qualifiedIdentifier CLASS ) | genericTypeArgumentListSimplified (Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) | SUPER innerDot= DOT IDENT arguments -> ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) | IDENT arguments -> ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) ) | THIS -> ^( DOT qualifiedIdentifier THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier arguments ) | innerNewExpression -> ^( DOT qualifiedIdentifier innerNewExpression ) ) + pass + outerDot=self.match(self.input, DOT, self.FOLLOW_DOT_in_qualifiedIdentExpression13549) + if self._state.backtracking == 0: + stream_DOT.add(outerDot) + # Java.g:930:13: ( CLASS -> ^( DOT qualifiedIdentifier CLASS ) | genericTypeArgumentListSimplified (Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) | SUPER innerDot= DOT IDENT arguments -> ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) | IDENT arguments -> ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) ) | THIS -> ^( DOT qualifiedIdentifier THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier arguments ) | innerNewExpression -> ^( DOT qualifiedIdentifier innerNewExpression ) ) + alt145 = 5 + LA145 = self.input.LA(1) + if LA145 == CLASS: + alt145 = 1 + elif LA145 == LESS_THAN: + alt145 = 2 + elif LA145 == THIS: + alt145 = 3 + elif LA145 == SUPER: + alt145 = 4 + elif LA145 == NEW: + alt145 = 5 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 145, 0, self.input) + + raise nvae + + if alt145 == 1: + # Java.g:930:17: CLASS + pass + CLASS494=self.match(self.input, CLASS, self.FOLLOW_CLASS_in_qualifiedIdentExpression13567) + if self._state.backtracking == 0: + stream_CLASS.add(CLASS494) + + # AST Rewrite + # elements: DOT, CLASS, qualifiedIdentifier + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 930:57: -> ^( DOT qualifiedIdentifier CLASS ) + # Java.g:930:61: ^( DOT qualifiedIdentifier CLASS ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_qualifiedIdentifier.nextTree()) + self._adaptor.addChild(root_1, stream_CLASS.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt145 == 2: + # Java.g:931:17: genericTypeArgumentListSimplified (Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) | SUPER innerDot= DOT IDENT arguments -> ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) | IDENT arguments -> ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) ) + pass + self._state.following.append(self.FOLLOW_genericTypeArgumentListSimplified_in_qualifiedIdentExpression13630) + genericTypeArgumentListSimplified495 = self.genericTypeArgumentListSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeArgumentListSimplified.add(genericTypeArgumentListSimplified495.tree) + # Java.g:932:17: (Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) | SUPER innerDot= DOT IDENT arguments -> ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) | IDENT arguments -> ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) ) + alt144 = 3 + LA144_0 = self.input.LA(1) + + if (LA144_0 == SUPER) : + LA144_1 = self.input.LA(2) + + if (LA144_1 == DOT) : + alt144 = 2 + elif (LA144_1 == LPAREN) : + alt144 = 1 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 144, 1, self.input) + + raise nvae + + elif (LA144_0 == IDENT) : + alt144 = 3 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 144, 0, self.input) + + raise nvae + + if alt144 == 1: + # Java.g:932:21: Super= SUPER arguments + pass + Super=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_qualifiedIdentExpression13654) + if self._state.backtracking == 0: + stream_SUPER.add(Super) + self._state.following.append(self.FOLLOW_arguments_in_qualifiedIdentExpression13656) + arguments496 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments496.tree) + + # AST Rewrite + # elements: qualifiedIdentifier, arguments, genericTypeArgumentListSimplified + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 932:57: -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) + # Java.g:932:61: ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(SUPER_CONSTRUCTOR_CALL, Super, "SUPER_CONSTRUCTOR_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_qualifiedIdentifier.nextTree()) + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt144 == 2: + # Java.g:933:21: SUPER innerDot= DOT IDENT arguments + pass + SUPER497=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_qualifiedIdentExpression13706) + if self._state.backtracking == 0: + stream_SUPER.add(SUPER497) + innerDot=self.match(self.input, DOT, self.FOLLOW_DOT_in_qualifiedIdentExpression13710) + if self._state.backtracking == 0: + stream_DOT.add(innerDot) + IDENT498=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_qualifiedIdentExpression13712) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT498) + self._state.following.append(self.FOLLOW_arguments_in_qualifiedIdentExpression13714) + arguments499 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments499.tree) + + # AST Rewrite + # elements: IDENT, qualifiedIdentifier, outerDot, SUPER, innerDot, genericTypeArgumentListSimplified, arguments + # token labels: outerDot, innerDot + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + stream_outerDot = RewriteRuleTokenStream(self._adaptor, "token outerDot", outerDot) + stream_innerDot = RewriteRuleTokenStream(self._adaptor, "token innerDot", innerDot) + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 933:57: -> ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) + # Java.g:933:61: ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(METHOD_CALL, "METHOD_CALL"), root_1) + + # Java.g:933:75: ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) + root_2 = self._adaptor.nil() + root_2 = self._adaptor.becomeRoot(stream_innerDot.nextNode(), root_2) + + # Java.g:933:87: ^( $outerDot qualifiedIdentifier SUPER ) + root_3 = self._adaptor.nil() + root_3 = self._adaptor.becomeRoot(stream_outerDot.nextNode(), root_3) + + self._adaptor.addChild(root_3, stream_qualifiedIdentifier.nextTree()) + self._adaptor.addChild(root_3, stream_SUPER.nextNode()) + + self._adaptor.addChild(root_2, root_3) + self._adaptor.addChild(root_2, stream_IDENT.nextNode()) + + self._adaptor.addChild(root_1, root_2) + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt144 == 3: + # Java.g:934:21: IDENT arguments + pass + IDENT500=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_qualifiedIdentExpression13764) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT500) + self._state.following.append(self.FOLLOW_arguments_in_qualifiedIdentExpression13766) + arguments501 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments501.tree) + + # AST Rewrite + # elements: IDENT, arguments, genericTypeArgumentListSimplified, qualifiedIdentifier, DOT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 934:57: -> ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) + # Java.g:934:61: ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(METHOD_CALL, "METHOD_CALL"), root_1) + + # Java.g:934:75: ^( DOT qualifiedIdentifier IDENT ) + root_2 = self._adaptor.nil() + root_2 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_2) + + self._adaptor.addChild(root_2, stream_qualifiedIdentifier.nextTree()) + self._adaptor.addChild(root_2, stream_IDENT.nextNode()) + + self._adaptor.addChild(root_1, root_2) + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt145 == 3: + # Java.g:936:17: THIS + pass + THIS502=self.match(self.input, THIS, self.FOLLOW_THIS_in_qualifiedIdentExpression13841) + if self._state.backtracking == 0: + stream_THIS.add(THIS502) + + # AST Rewrite + # elements: DOT, THIS, qualifiedIdentifier + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 936:57: -> ^( DOT qualifiedIdentifier THIS ) + # Java.g:936:61: ^( DOT qualifiedIdentifier THIS ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_qualifiedIdentifier.nextTree()) + self._adaptor.addChild(root_1, stream_THIS.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt145 == 4: + # Java.g:937:17: Super= SUPER arguments + pass + Super=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_qualifiedIdentExpression13907) + if self._state.backtracking == 0: + stream_SUPER.add(Super) + self._state.following.append(self.FOLLOW_arguments_in_qualifiedIdentExpression13909) + arguments503 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments503.tree) + + # AST Rewrite + # elements: qualifiedIdentifier, arguments + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 937:57: -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier arguments ) + # Java.g:937:61: ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(SUPER_CONSTRUCTOR_CALL, Super, "SUPER_CONSTRUCTOR_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_qualifiedIdentifier.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt145 == 5: + # Java.g:938:17: innerNewExpression + pass + self._state.following.append(self.FOLLOW_innerNewExpression_in_qualifiedIdentExpression13957) + innerNewExpression504 = self.innerNewExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_innerNewExpression.add(innerNewExpression504.tree) + + # AST Rewrite + # elements: DOT, innerNewExpression, qualifiedIdentifier + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 938:57: -> ^( DOT qualifiedIdentifier innerNewExpression ) + # Java.g:938:61: ^( DOT qualifiedIdentifier innerNewExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_qualifiedIdentifier.nextTree()) + self._adaptor.addChild(root_1, stream_innerNewExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 106, qualifiedIdentExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "qualifiedIdentExpression" + + class newExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.newExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "newExpression" + # Java.g:943:1: newExpression : NEW ( primitiveType newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] primitiveType newArrayConstruction ) | ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified ( newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified newArrayConstruction ) | arguments ( classBody )? -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified arguments ( classBody )? ) ) ) ; + def newExpression(self, ): + + retval = self.newExpression_return() + retval.start = self.input.LT(1) + newExpression_StartIndex = self.input.index() + root_0 = None + + NEW505 = None + primitiveType506 = None + + newArrayConstruction507 = None + + genericTypeArgumentListSimplified508 = None + + qualifiedTypeIdentSimplified509 = None + + newArrayConstruction510 = None + + arguments511 = None + + classBody512 = None + + + NEW505_tree = None + stream_NEW = RewriteRuleTokenStream(self._adaptor, "token NEW") + stream_newArrayConstruction = RewriteRuleSubtreeStream(self._adaptor, "rule newArrayConstruction") + stream_arguments = RewriteRuleSubtreeStream(self._adaptor, "rule arguments") + stream_qualifiedTypeIdentSimplified = RewriteRuleSubtreeStream(self._adaptor, "rule qualifiedTypeIdentSimplified") + stream_primitiveType = RewriteRuleSubtreeStream(self._adaptor, "rule primitiveType") + stream_classBody = RewriteRuleSubtreeStream(self._adaptor, "rule classBody") + stream_genericTypeArgumentListSimplified = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeArgumentListSimplified") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 107): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:944:5: ( NEW ( primitiveType newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] primitiveType newArrayConstruction ) | ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified ( newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified newArrayConstruction ) | arguments ( classBody )? -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified arguments ( classBody )? ) ) ) ) + # Java.g:944:9: NEW ( primitiveType newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] primitiveType newArrayConstruction ) | ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified ( newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified newArrayConstruction ) | arguments ( classBody )? -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified arguments ( classBody )? ) ) ) + pass + NEW505=self.match(self.input, NEW, self.FOLLOW_NEW_in_newExpression14033) + if self._state.backtracking == 0: + stream_NEW.add(NEW505) + # Java.g:945:9: ( primitiveType newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] primitiveType newArrayConstruction ) | ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified ( newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified newArrayConstruction ) | arguments ( classBody )? -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified arguments ( classBody )? ) ) ) + alt150 = 2 + LA150_0 = self.input.LA(1) + + if (LA150_0 == BOOLEAN or LA150_0 == BYTE or LA150_0 == CHAR or LA150_0 == DOUBLE or LA150_0 == FLOAT or (INT <= LA150_0 <= LONG) or LA150_0 == SHORT) : + alt150 = 1 + elif (LA150_0 == LESS_THAN or LA150_0 == IDENT) : + alt150 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 150, 0, self.input) + + raise nvae + + if alt150 == 1: + # Java.g:945:13: primitiveType newArrayConstruction + pass + self._state.following.append(self.FOLLOW_primitiveType_in_newExpression14047) + primitiveType506 = self.primitiveType() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_primitiveType.add(primitiveType506.tree) + self._state.following.append(self.FOLLOW_newArrayConstruction_in_newExpression14049) + newArrayConstruction507 = self.newArrayConstruction() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_newArrayConstruction.add(newArrayConstruction507.tree) + + # AST Rewrite + # elements: primitiveType, newArrayConstruction + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 946:13: -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] primitiveType newArrayConstruction ) + # Java.g:946:17: ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] primitiveType newArrayConstruction ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(STATIC_ARRAY_CREATOR, NEW505, "STATIC_ARRAY_CREATOR"), root_1) + + self._adaptor.addChild(root_1, stream_primitiveType.nextTree()) + self._adaptor.addChild(root_1, stream_newArrayConstruction.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt150 == 2: + # Java.g:947:13: ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified ( newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified newArrayConstruction ) | arguments ( classBody )? -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified arguments ( classBody )? ) ) + pass + # Java.g:947:13: ( genericTypeArgumentListSimplified )? + alt147 = 2 + LA147_0 = self.input.LA(1) + + if (LA147_0 == LESS_THAN) : + alt147 = 1 + if alt147 == 1: + # Java.g:0:0: genericTypeArgumentListSimplified + pass + self._state.following.append(self.FOLLOW_genericTypeArgumentListSimplified_in_newExpression14093) + genericTypeArgumentListSimplified508 = self.genericTypeArgumentListSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeArgumentListSimplified.add(genericTypeArgumentListSimplified508.tree) + + + + self._state.following.append(self.FOLLOW_qualifiedTypeIdentSimplified_in_newExpression14096) + qualifiedTypeIdentSimplified509 = self.qualifiedTypeIdentSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_qualifiedTypeIdentSimplified.add(qualifiedTypeIdentSimplified509.tree) + # Java.g:948:13: ( newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified newArrayConstruction ) | arguments ( classBody )? -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified arguments ( classBody )? ) ) + alt149 = 2 + LA149_0 = self.input.LA(1) + + if (LA149_0 == LBRACK) : + alt149 = 1 + elif (LA149_0 == LPAREN) : + alt149 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 149, 0, self.input) + + raise nvae + + if alt149 == 1: + # Java.g:948:17: newArrayConstruction + pass + self._state.following.append(self.FOLLOW_newArrayConstruction_in_newExpression14114) + newArrayConstruction510 = self.newArrayConstruction() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_newArrayConstruction.add(newArrayConstruction510.tree) + + # AST Rewrite + # elements: newArrayConstruction, qualifiedTypeIdentSimplified, genericTypeArgumentListSimplified + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 949:17: -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified newArrayConstruction ) + # Java.g:949:21: ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified newArrayConstruction ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(STATIC_ARRAY_CREATOR, NEW505, "STATIC_ARRAY_CREATOR"), root_1) + + # Java.g:949:74: ( genericTypeArgumentListSimplified )? + if stream_genericTypeArgumentListSimplified.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + + + stream_genericTypeArgumentListSimplified.reset(); + self._adaptor.addChild(root_1, stream_qualifiedTypeIdentSimplified.nextTree()) + self._adaptor.addChild(root_1, stream_newArrayConstruction.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt149 == 2: + # Java.g:950:17: arguments ( classBody )? + pass + self._state.following.append(self.FOLLOW_arguments_in_newExpression14179) + arguments511 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments511.tree) + # Java.g:950:27: ( classBody )? + alt148 = 2 + LA148_0 = self.input.LA(1) + + if (LA148_0 == LCURLY) : + alt148 = 1 + if alt148 == 1: + # Java.g:0:0: classBody + pass + self._state.following.append(self.FOLLOW_classBody_in_newExpression14181) + classBody512 = self.classBody() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classBody.add(classBody512.tree) + + + + + # AST Rewrite + # elements: classBody, arguments, genericTypeArgumentListSimplified, qualifiedTypeIdentSimplified + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 951:17: -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified arguments ( classBody )? ) + # Java.g:951:21: ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified arguments ( classBody )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(CLASS_CONSTRUCTOR_CALL, NEW505, "STATIC_ARRAY_CREATOR"), root_1) + + # Java.g:951:76: ( genericTypeArgumentListSimplified )? + if stream_genericTypeArgumentListSimplified.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + + + stream_genericTypeArgumentListSimplified.reset(); + self._adaptor.addChild(root_1, stream_qualifiedTypeIdentSimplified.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + # Java.g:951:150: ( classBody )? + if stream_classBody.hasNext(): + self._adaptor.addChild(root_1, stream_classBody.nextTree()) + + + stream_classBody.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 107, newExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "newExpression" + + class innerNewExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.innerNewExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "innerNewExpression" + # Java.g:956:1: innerNewExpression : NEW ( genericTypeArgumentListSimplified )? IDENT arguments ( classBody )? -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? IDENT arguments ( classBody )? ) ; + def innerNewExpression(self, ): + + retval = self.innerNewExpression_return() + retval.start = self.input.LT(1) + innerNewExpression_StartIndex = self.input.index() + root_0 = None + + NEW513 = None + IDENT515 = None + genericTypeArgumentListSimplified514 = None + + arguments516 = None + + classBody517 = None + + + NEW513_tree = None + IDENT515_tree = None + stream_NEW = RewriteRuleTokenStream(self._adaptor, "token NEW") + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_arguments = RewriteRuleSubtreeStream(self._adaptor, "rule arguments") + stream_classBody = RewriteRuleSubtreeStream(self._adaptor, "rule classBody") + stream_genericTypeArgumentListSimplified = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeArgumentListSimplified") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 108): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:957:5: ( NEW ( genericTypeArgumentListSimplified )? IDENT arguments ( classBody )? -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? IDENT arguments ( classBody )? ) ) + # Java.g:957:9: NEW ( genericTypeArgumentListSimplified )? IDENT arguments ( classBody )? + pass + NEW513=self.match(self.input, NEW, self.FOLLOW_NEW_in_innerNewExpression14276) + if self._state.backtracking == 0: + stream_NEW.add(NEW513) + # Java.g:957:13: ( genericTypeArgumentListSimplified )? + alt151 = 2 + LA151_0 = self.input.LA(1) + + if (LA151_0 == LESS_THAN) : + alt151 = 1 + if alt151 == 1: + # Java.g:0:0: genericTypeArgumentListSimplified + pass + self._state.following.append(self.FOLLOW_genericTypeArgumentListSimplified_in_innerNewExpression14278) + genericTypeArgumentListSimplified514 = self.genericTypeArgumentListSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeArgumentListSimplified.add(genericTypeArgumentListSimplified514.tree) + + + + IDENT515=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_innerNewExpression14281) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT515) + self._state.following.append(self.FOLLOW_arguments_in_innerNewExpression14283) + arguments516 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments516.tree) + # Java.g:957:64: ( classBody )? + alt152 = 2 + LA152_0 = self.input.LA(1) + + if (LA152_0 == LCURLY) : + alt152 = 1 + if alt152 == 1: + # Java.g:0:0: classBody + pass + self._state.following.append(self.FOLLOW_classBody_in_innerNewExpression14285) + classBody517 = self.classBody() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classBody.add(classBody517.tree) + + + + + # AST Rewrite + # elements: arguments, genericTypeArgumentListSimplified, IDENT, classBody + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 958:9: -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? IDENT arguments ( classBody )? ) + # Java.g:958:13: ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? IDENT arguments ( classBody )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(CLASS_CONSTRUCTOR_CALL, NEW513, "STATIC_ARRAY_CREATOR"), root_1) + + # Java.g:958:68: ( genericTypeArgumentListSimplified )? + if stream_genericTypeArgumentListSimplified.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + + + stream_genericTypeArgumentListSimplified.reset(); + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + # Java.g:958:119: ( classBody )? + if stream_classBody.hasNext(): + self._adaptor.addChild(root_1, stream_classBody.nextTree()) + + + stream_classBody.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 108, innerNewExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "innerNewExpression" + + class newArrayConstruction_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.newArrayConstruction_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "newArrayConstruction" + # Java.g:961:1: newArrayConstruction : ( arrayDeclaratorList arrayInitializer | LBRACK expression RBRACK ( LBRACK expression RBRACK )* ( arrayDeclaratorList )? ); + def newArrayConstruction(self, ): + + retval = self.newArrayConstruction_return() + retval.start = self.input.LT(1) + newArrayConstruction_StartIndex = self.input.index() + root_0 = None + + LBRACK520 = None + RBRACK522 = None + LBRACK523 = None + RBRACK525 = None + arrayDeclaratorList518 = None + + arrayInitializer519 = None + + expression521 = None + + expression524 = None + + arrayDeclaratorList526 = None + + + LBRACK520_tree = None + RBRACK522_tree = None + LBRACK523_tree = None + RBRACK525_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 109): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:962:5: ( arrayDeclaratorList arrayInitializer | LBRACK expression RBRACK ( LBRACK expression RBRACK )* ( arrayDeclaratorList )? ) + alt155 = 2 + LA155_0 = self.input.LA(1) + + if (LA155_0 == LBRACK) : + LA155_1 = self.input.LA(2) + + if (LA155_1 == RBRACK) : + alt155 = 1 + elif (LA155_1 == DEC or LA155_1 == INC or LA155_1 == LESS_THAN or LA155_1 == LOGICAL_NOT or (LPAREN <= LA155_1 <= MINUS) or LA155_1 == NOT or LA155_1 == PLUS or LA155_1 == BOOLEAN or LA155_1 == BYTE or LA155_1 == CHAR or LA155_1 == DOUBLE or LA155_1 == FALSE or LA155_1 == FLOAT or (INT <= LA155_1 <= LONG) or (NEW <= LA155_1 <= NULL) or LA155_1 == SHORT or LA155_1 == SUPER or LA155_1 == THIS or LA155_1 == TRUE or LA155_1 == VOID or (IDENT <= LA155_1 <= STRING_LITERAL)) : + alt155 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 155, 1, self.input) + + raise nvae + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 155, 0, self.input) + + raise nvae + + if alt155 == 1: + # Java.g:962:9: arrayDeclaratorList arrayInitializer + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_newArrayConstruction14331) + arrayDeclaratorList518 = self.arrayDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, arrayDeclaratorList518.tree) + self._state.following.append(self.FOLLOW_arrayInitializer_in_newArrayConstruction14333) + arrayInitializer519 = self.arrayInitializer() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, arrayInitializer519.tree) + + + elif alt155 == 2: + # Java.g:963:9: LBRACK expression RBRACK ( LBRACK expression RBRACK )* ( arrayDeclaratorList )? + pass + root_0 = self._adaptor.nil() + + LBRACK520=self.match(self.input, LBRACK, self.FOLLOW_LBRACK_in_newArrayConstruction14343) + self._state.following.append(self.FOLLOW_expression_in_newArrayConstruction14346) + expression521 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, expression521.tree) + RBRACK522=self.match(self.input, RBRACK, self.FOLLOW_RBRACK_in_newArrayConstruction14348) + # Java.g:963:36: ( LBRACK expression RBRACK )* + while True: #loop153 + alt153 = 2 + alt153 = self.dfa153.predict(self.input) + if alt153 == 1: + # Java.g:963:37: LBRACK expression RBRACK + pass + LBRACK523=self.match(self.input, LBRACK, self.FOLLOW_LBRACK_in_newArrayConstruction14352) + self._state.following.append(self.FOLLOW_expression_in_newArrayConstruction14355) + expression524 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, expression524.tree) + RBRACK525=self.match(self.input, RBRACK, self.FOLLOW_RBRACK_in_newArrayConstruction14357) + + + else: + break #loop153 + # Java.g:963:66: ( arrayDeclaratorList )? + alt154 = 2 + LA154_0 = self.input.LA(1) + + if (LA154_0 == LBRACK) : + LA154_1 = self.input.LA(2) + + if (LA154_1 == RBRACK) : + alt154 = 1 + if alt154 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_newArrayConstruction14362) + arrayDeclaratorList526 = self.arrayDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, arrayDeclaratorList526.tree) + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 109, newArrayConstruction_StartIndex, success) + + pass + return retval + + # $ANTLR end "newArrayConstruction" + + class arguments_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.arguments_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "arguments" + # Java.g:966:1: arguments : LPAREN ( expressionList )? RPAREN -> ^( ARGUMENT_LIST[$LPAREN, \"ARGUMENT_LIST\"] ( expressionList )? ) ; + def arguments(self, ): + + retval = self.arguments_return() + retval.start = self.input.LT(1) + arguments_StartIndex = self.input.index() + root_0 = None + + LPAREN527 = None + RPAREN529 = None + expressionList528 = None + + + LPAREN527_tree = None + RPAREN529_tree = None + stream_RPAREN = RewriteRuleTokenStream(self._adaptor, "token RPAREN") + stream_LPAREN = RewriteRuleTokenStream(self._adaptor, "token LPAREN") + stream_expressionList = RewriteRuleSubtreeStream(self._adaptor, "rule expressionList") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 110): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:967:5: ( LPAREN ( expressionList )? RPAREN -> ^( ARGUMENT_LIST[$LPAREN, \"ARGUMENT_LIST\"] ( expressionList )? ) ) + # Java.g:967:9: LPAREN ( expressionList )? RPAREN + pass + LPAREN527=self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_arguments14382) + if self._state.backtracking == 0: + stream_LPAREN.add(LPAREN527) + # Java.g:967:16: ( expressionList )? + alt156 = 2 + LA156_0 = self.input.LA(1) + + if (LA156_0 == DEC or LA156_0 == INC or LA156_0 == LESS_THAN or LA156_0 == LOGICAL_NOT or (LPAREN <= LA156_0 <= MINUS) or LA156_0 == NOT or LA156_0 == PLUS or LA156_0 == BOOLEAN or LA156_0 == BYTE or LA156_0 == CHAR or LA156_0 == DOUBLE or LA156_0 == FALSE or LA156_0 == FLOAT or (INT <= LA156_0 <= LONG) or (NEW <= LA156_0 <= NULL) or LA156_0 == SHORT or LA156_0 == SUPER or LA156_0 == THIS or LA156_0 == TRUE or LA156_0 == VOID or (IDENT <= LA156_0 <= STRING_LITERAL)) : + alt156 = 1 + if alt156 == 1: + # Java.g:0:0: expressionList + pass + self._state.following.append(self.FOLLOW_expressionList_in_arguments14384) + expressionList528 = self.expressionList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expressionList.add(expressionList528.tree) + + + + RPAREN529=self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_arguments14387) + if self._state.backtracking == 0: + stream_RPAREN.add(RPAREN529) + + # AST Rewrite + # elements: expressionList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 968:9: -> ^( ARGUMENT_LIST[$LPAREN, \"ARGUMENT_LIST\"] ( expressionList )? ) + # Java.g:968:13: ^( ARGUMENT_LIST[$LPAREN, \"ARGUMENT_LIST\"] ( expressionList )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(ARGUMENT_LIST, LPAREN527, "ARGUMENT_LIST"), root_1) + + # Java.g:968:55: ( expressionList )? + if stream_expressionList.hasNext(): + self._adaptor.addChild(root_1, stream_expressionList.nextTree()) + + + stream_expressionList.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 110, arguments_StartIndex, success) + + pass + return retval + + # $ANTLR end "arguments" + + class literal_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.literal_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "literal" + # Java.g:971:1: literal : ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | FLOATING_POINT_LITERAL | CHARACTER_LITERAL | STRING_LITERAL | TRUE | FALSE | NULL ); + def literal(self, ): + + retval = self.literal_return() + retval.start = self.input.LT(1) + literal_StartIndex = self.input.index() + root_0 = None + + set530 = None + + set530_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 111): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:972:5: ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | FLOATING_POINT_LITERAL | CHARACTER_LITERAL | STRING_LITERAL | TRUE | FALSE | NULL ) + # Java.g: + pass + root_0 = self._adaptor.nil() + + set530 = self.input.LT(1) + if self.input.LA(1) == FALSE or self.input.LA(1) == NULL or self.input.LA(1) == TRUE or (HEX_LITERAL <= self.input.LA(1) <= STRING_LITERAL): + self.input.consume() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, self._adaptor.createWithPayload(set530)) + self._state.errorRecovery = False + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + mse = MismatchedSetException(None, self.input) + raise mse + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 111, literal_StartIndex, success) + + pass + return retval + + # $ANTLR end "literal" + + # $ANTLR start "synpred14_Java" + def synpred14_Java_fragment(self, ): + # Java.g:286:9: ( GREATER_THAN ) + # Java.g:286:9: GREATER_THAN + pass + self.match(self.input, GREATER_THAN, self.FOLLOW_GREATER_THAN_in_synpred14_Java5045) + + + # $ANTLR end "synpred14_Java" + + + + # $ANTLR start "synpred15_Java" + def synpred15_Java_fragment(self, ): + # Java.g:287:9: ( SHIFT_RIGHT ) + # Java.g:287:9: SHIFT_RIGHT + pass + self.match(self.input, SHIFT_RIGHT, self.FOLLOW_SHIFT_RIGHT_in_synpred15_Java5055) + + + # $ANTLR end "synpred15_Java" + + + + # $ANTLR start "synpred16_Java" + def synpred16_Java_fragment(self, ): + # Java.g:288:9: ( BIT_SHIFT_RIGHT ) + # Java.g:288:9: BIT_SHIFT_RIGHT + pass + self.match(self.input, BIT_SHIFT_RIGHT, self.FOLLOW_BIT_SHIFT_RIGHT_in_synpred16_Java5065) + + + # $ANTLR end "synpred16_Java" + + + + # $ANTLR start "synpred17_Java" + def synpred17_Java_fragment(self, ): + # Java.g:293:15: ( bound ) + # Java.g:293:15: bound + pass + self._state.following.append(self.FOLLOW_bound_in_synpred17_Java5095) + self.bound() + + self._state.following.pop() + + + # $ANTLR end "synpred17_Java" + + + + # $ANTLR start "synpred32_Java" + def synpred32_Java_fragment(self, ): + # Java.g:350:9: ( STATIC block ) + # Java.g:350:9: STATIC block + pass + self.match(self.input, STATIC, self.FOLLOW_STATIC_in_synpred32_Java5595) + self._state.following.append(self.FOLLOW_block_in_synpred32_Java5597) + self.block() + + self._state.following.pop() + + + # $ANTLR end "synpred32_Java" + + + + # $ANTLR start "synpred42_Java" + def synpred42_Java_fragment(self, ): + # Java.g:352:13: ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) | ident= IDENT formalParameterList ( throwsClause )? block ) ) + # Java.g:352:13: ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) | ident= IDENT formalParameterList ( throwsClause )? block ) + pass + # Java.g:352:13: ( genericTypeParameterList )? + alt162 = 2 + LA162_0 = self.input.LA(1) + + if (LA162_0 == LESS_THAN) : + alt162 = 1 + if alt162 == 1: + # Java.g:0:0: genericTypeParameterList + pass + self._state.following.append(self.FOLLOW_genericTypeParameterList_in_synpred42_Java5634) + self.genericTypeParameterList() + + self._state.following.pop() + + + + # Java.g:353:13: ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) | ident= IDENT formalParameterList ( throwsClause )? block ) + alt169 = 3 + LA169 = self.input.LA(1) + if LA169 == BOOLEAN or LA169 == BYTE or LA169 == CHAR or LA169 == DOUBLE or LA169 == FLOAT or LA169 == INT or LA169 == LONG or LA169 == SHORT: + alt169 = 1 + elif LA169 == IDENT: + LA169_2 = self.input.LA(2) + + if (LA169_2 == DOT or LA169_2 == LBRACK or LA169_2 == LESS_THAN or LA169_2 == IDENT) : + alt169 = 1 + elif (LA169_2 == LPAREN) : + alt169 = 3 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 169, 2, self.input) + + raise nvae + + elif LA169 == VOID: + alt169 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 169, 0, self.input) + + raise nvae + + if alt169 == 1: + # Java.g:353:17: type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) + pass + self._state.following.append(self.FOLLOW_type_in_synpred42_Java5653) + self.type() + + self._state.following.pop() + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred42_Java5655) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred42_Java5657) + self.formalParameterList() + + self._state.following.pop() + # Java.g:353:48: ( arrayDeclaratorList )? + alt163 = 2 + LA163_0 = self.input.LA(1) + + if (LA163_0 == LBRACK) : + alt163 = 1 + if alt163 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_synpred42_Java5659) + self.arrayDeclaratorList() + + self._state.following.pop() + + + + # Java.g:353:69: ( throwsClause )? + alt164 = 2 + LA164_0 = self.input.LA(1) + + if (LA164_0 == THROWS) : + alt164 = 1 + if alt164 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred42_Java5662) + self.throwsClause() + + self._state.following.pop() + + + + # Java.g:353:83: ( block | SEMI ) + alt165 = 2 + LA165_0 = self.input.LA(1) + + if (LA165_0 == LCURLY) : + alt165 = 1 + elif (LA165_0 == SEMI) : + alt165 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 165, 0, self.input) + + raise nvae + + if alt165 == 1: + # Java.g:353:84: block + pass + self._state.following.append(self.FOLLOW_block_in_synpred42_Java5666) + self.block() + + self._state.following.pop() + + + elif alt165 == 2: + # Java.g:353:92: SEMI + pass + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred42_Java5670) + + + + + + elif alt169 == 2: + # Java.g:355:17: VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) + pass + self.match(self.input, VOID, self.FOLLOW_VOID_in_synpred42_Java5732) + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred42_Java5734) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred42_Java5736) + self.formalParameterList() + + self._state.following.pop() + # Java.g:355:48: ( throwsClause )? + alt166 = 2 + LA166_0 = self.input.LA(1) + + if (LA166_0 == THROWS) : + alt166 = 1 + if alt166 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred42_Java5738) + self.throwsClause() + + self._state.following.pop() + + + + # Java.g:355:62: ( block | SEMI ) + alt167 = 2 + LA167_0 = self.input.LA(1) + + if (LA167_0 == LCURLY) : + alt167 = 1 + elif (LA167_0 == SEMI) : + alt167 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 167, 0, self.input) + + raise nvae + + if alt167 == 1: + # Java.g:355:63: block + pass + self._state.following.append(self.FOLLOW_block_in_synpred42_Java5742) + self.block() + + self._state.following.pop() + + + elif alt167 == 2: + # Java.g:355:71: SEMI + pass + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred42_Java5746) + + + + + + elif alt169 == 3: + # Java.g:357:17: ident= IDENT formalParameterList ( throwsClause )? block + pass + ident=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred42_Java5805) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred42_Java5807) + self.formalParameterList() + + self._state.following.pop() + # Java.g:357:49: ( throwsClause )? + alt168 = 2 + LA168_0 = self.input.LA(1) + + if (LA168_0 == THROWS) : + alt168 = 1 + if alt168 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred42_Java5809) + self.throwsClause() + + self._state.following.pop() + + + + self._state.following.append(self.FOLLOW_block_in_synpred42_Java5812) + self.block() + + self._state.following.pop() + + + + + + # $ANTLR end "synpred42_Java" + + + + # $ANTLR start "synpred43_Java" + def synpred43_Java_fragment(self, ): + # Java.g:351:9: ( modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) | ident= IDENT formalParameterList ( throwsClause )? block ) | type classFieldDeclaratorList SEMI ) ) + # Java.g:351:9: modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) | ident= IDENT formalParameterList ( throwsClause )? block ) | type classFieldDeclaratorList SEMI ) + pass + self._state.following.append(self.FOLLOW_modifierList_in_synpred43_Java5620) + self.modifierList() + + self._state.following.pop() + # Java.g:352:9: ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) | ident= IDENT formalParameterList ( throwsClause )? block ) | type classFieldDeclaratorList SEMI ) + alt178 = 2 + LA178 = self.input.LA(1) + if LA178 == LESS_THAN or LA178 == VOID: + alt178 = 1 + elif LA178 == BOOLEAN or LA178 == BYTE or LA178 == CHAR or LA178 == DOUBLE or LA178 == FLOAT or LA178 == INT or LA178 == LONG or LA178 == SHORT: + LA178_2 = self.input.LA(2) + + if (self.synpred42_Java()) : + alt178 = 1 + elif (True) : + alt178 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 178, 2, self.input) + + raise nvae + + elif LA178 == IDENT: + LA178_3 = self.input.LA(2) + + if (self.synpred42_Java()) : + alt178 = 1 + elif (True) : + alt178 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 178, 3, self.input) + + raise nvae + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 178, 0, self.input) + + raise nvae + + if alt178 == 1: + # Java.g:352:13: ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) | ident= IDENT formalParameterList ( throwsClause )? block ) + pass + # Java.g:352:13: ( genericTypeParameterList )? + alt170 = 2 + LA170_0 = self.input.LA(1) + + if (LA170_0 == LESS_THAN) : + alt170 = 1 + if alt170 == 1: + # Java.g:0:0: genericTypeParameterList + pass + self._state.following.append(self.FOLLOW_genericTypeParameterList_in_synpred43_Java5634) + self.genericTypeParameterList() + + self._state.following.pop() + + + + # Java.g:353:13: ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) | ident= IDENT formalParameterList ( throwsClause )? block ) + alt177 = 3 + LA177 = self.input.LA(1) + if LA177 == BOOLEAN or LA177 == BYTE or LA177 == CHAR or LA177 == DOUBLE or LA177 == FLOAT or LA177 == INT or LA177 == LONG or LA177 == SHORT: + alt177 = 1 + elif LA177 == IDENT: + LA177_2 = self.input.LA(2) + + if (LA177_2 == LPAREN) : + alt177 = 3 + elif (LA177_2 == DOT or LA177_2 == LBRACK or LA177_2 == LESS_THAN or LA177_2 == IDENT) : + alt177 = 1 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 177, 2, self.input) + + raise nvae + + elif LA177 == VOID: + alt177 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 177, 0, self.input) + + raise nvae + + if alt177 == 1: + # Java.g:353:17: type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) + pass + self._state.following.append(self.FOLLOW_type_in_synpred43_Java5653) + self.type() + + self._state.following.pop() + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred43_Java5655) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred43_Java5657) + self.formalParameterList() + + self._state.following.pop() + # Java.g:353:48: ( arrayDeclaratorList )? + alt171 = 2 + LA171_0 = self.input.LA(1) + + if (LA171_0 == LBRACK) : + alt171 = 1 + if alt171 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_synpred43_Java5659) + self.arrayDeclaratorList() + + self._state.following.pop() + + + + # Java.g:353:69: ( throwsClause )? + alt172 = 2 + LA172_0 = self.input.LA(1) + + if (LA172_0 == THROWS) : + alt172 = 1 + if alt172 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred43_Java5662) + self.throwsClause() + + self._state.following.pop() + + + + # Java.g:353:83: ( block | SEMI ) + alt173 = 2 + LA173_0 = self.input.LA(1) + + if (LA173_0 == LCURLY) : + alt173 = 1 + elif (LA173_0 == SEMI) : + alt173 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 173, 0, self.input) + + raise nvae + + if alt173 == 1: + # Java.g:353:84: block + pass + self._state.following.append(self.FOLLOW_block_in_synpred43_Java5666) + self.block() + + self._state.following.pop() + + + elif alt173 == 2: + # Java.g:353:92: SEMI + pass + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred43_Java5670) + + + + + + elif alt177 == 2: + # Java.g:355:17: VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) + pass + self.match(self.input, VOID, self.FOLLOW_VOID_in_synpred43_Java5732) + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred43_Java5734) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred43_Java5736) + self.formalParameterList() + + self._state.following.pop() + # Java.g:355:48: ( throwsClause )? + alt174 = 2 + LA174_0 = self.input.LA(1) + + if (LA174_0 == THROWS) : + alt174 = 1 + if alt174 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred43_Java5738) + self.throwsClause() + + self._state.following.pop() + + + + # Java.g:355:62: ( block | SEMI ) + alt175 = 2 + LA175_0 = self.input.LA(1) + + if (LA175_0 == LCURLY) : + alt175 = 1 + elif (LA175_0 == SEMI) : + alt175 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 175, 0, self.input) + + raise nvae + + if alt175 == 1: + # Java.g:355:63: block + pass + self._state.following.append(self.FOLLOW_block_in_synpred43_Java5742) + self.block() + + self._state.following.pop() + + + elif alt175 == 2: + # Java.g:355:71: SEMI + pass + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred43_Java5746) + + + + + + elif alt177 == 3: + # Java.g:357:17: ident= IDENT formalParameterList ( throwsClause )? block + pass + ident=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred43_Java5805) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred43_Java5807) + self.formalParameterList() + + self._state.following.pop() + # Java.g:357:49: ( throwsClause )? + alt176 = 2 + LA176_0 = self.input.LA(1) + + if (LA176_0 == THROWS) : + alt176 = 1 + if alt176 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred43_Java5809) + self.throwsClause() + + self._state.following.pop() + + + + self._state.following.append(self.FOLLOW_block_in_synpred43_Java5812) + self.block() + + self._state.following.pop() + + + + + + elif alt178 == 2: + # Java.g:360:13: type classFieldDeclaratorList SEMI + pass + self._state.following.append(self.FOLLOW_type_in_synpred43_Java5876) + self.type() + + self._state.following.pop() + self._state.following.append(self.FOLLOW_classFieldDeclaratorList_in_synpred43_Java5878) + self.classFieldDeclaratorList() + + self._state.following.pop() + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred43_Java5880) + + + + + + # $ANTLR end "synpred43_Java" + + + + # $ANTLR start "synpred44_Java" + def synpred44_Java_fragment(self, ): + # Java.g:363:9: ( typeDeclaration ) + # Java.g:363:9: typeDeclaration + pass + self._state.following.append(self.FOLLOW_typeDeclaration_in_synpred44_Java5925) + self.typeDeclaration() + + self._state.following.pop() + + + # $ANTLR end "synpred44_Java" + + + + # $ANTLR start "synpred50_Java" + def synpred50_Java_fragment(self, ): + # Java.g:369:13: ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI | VOID IDENT formalParameterList ( throwsClause )? SEMI ) ) + # Java.g:369:13: ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI | VOID IDENT formalParameterList ( throwsClause )? SEMI ) + pass + # Java.g:369:13: ( genericTypeParameterList )? + alt181 = 2 + LA181_0 = self.input.LA(1) + + if (LA181_0 == LESS_THAN) : + alt181 = 1 + if alt181 == 1: + # Java.g:0:0: genericTypeParameterList + pass + self._state.following.append(self.FOLLOW_genericTypeParameterList_in_synpred50_Java5969) + self.genericTypeParameterList() + + self._state.following.pop() + + + + # Java.g:370:13: ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI | VOID IDENT formalParameterList ( throwsClause )? SEMI ) + alt185 = 2 + LA185_0 = self.input.LA(1) + + if (LA185_0 == BOOLEAN or LA185_0 == BYTE or LA185_0 == CHAR or LA185_0 == DOUBLE or LA185_0 == FLOAT or (INT <= LA185_0 <= LONG) or LA185_0 == SHORT or LA185_0 == IDENT) : + alt185 = 1 + elif (LA185_0 == VOID) : + alt185 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 185, 0, self.input) + + raise nvae + + if alt185 == 1: + # Java.g:370:17: type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI + pass + self._state.following.append(self.FOLLOW_type_in_synpred50_Java5988) + self.type() + + self._state.following.pop() + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred50_Java5990) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred50_Java5992) + self.formalParameterList() + + self._state.following.pop() + # Java.g:370:48: ( arrayDeclaratorList )? + alt182 = 2 + LA182_0 = self.input.LA(1) + + if (LA182_0 == LBRACK) : + alt182 = 1 + if alt182 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_synpred50_Java5994) + self.arrayDeclaratorList() + + self._state.following.pop() + + + + # Java.g:370:69: ( throwsClause )? + alt183 = 2 + LA183_0 = self.input.LA(1) + + if (LA183_0 == THROWS) : + alt183 = 1 + if alt183 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred50_Java5997) + self.throwsClause() + + self._state.following.pop() + + + + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred50_Java6000) + + + elif alt185 == 2: + # Java.g:372:17: VOID IDENT formalParameterList ( throwsClause )? SEMI + pass + self.match(self.input, VOID, self.FOLLOW_VOID_in_synpred50_Java6058) + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred50_Java6060) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred50_Java6062) + self.formalParameterList() + + self._state.following.pop() + # Java.g:372:48: ( throwsClause )? + alt184 = 2 + LA184_0 = self.input.LA(1) + + if (LA184_0 == THROWS) : + alt184 = 1 + if alt184 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred50_Java6064) + self.throwsClause() + + self._state.following.pop() + + + + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred50_Java6067) + + + + + + # $ANTLR end "synpred50_Java" + + + + # $ANTLR start "synpred51_Java" + def synpred51_Java_fragment(self, ): + # Java.g:368:9: ( modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI | VOID IDENT formalParameterList ( throwsClause )? SEMI ) | type interfaceFieldDeclaratorList SEMI ) ) + # Java.g:368:9: modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI | VOID IDENT formalParameterList ( throwsClause )? SEMI ) | type interfaceFieldDeclaratorList SEMI ) + pass + self._state.following.append(self.FOLLOW_modifierList_in_synpred51_Java5955) + self.modifierList() + + self._state.following.pop() + # Java.g:369:9: ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI | VOID IDENT formalParameterList ( throwsClause )? SEMI ) | type interfaceFieldDeclaratorList SEMI ) + alt191 = 2 + LA191 = self.input.LA(1) + if LA191 == LESS_THAN or LA191 == VOID: + alt191 = 1 + elif LA191 == BOOLEAN or LA191 == BYTE or LA191 == CHAR or LA191 == DOUBLE or LA191 == FLOAT or LA191 == INT or LA191 == LONG or LA191 == SHORT: + LA191_2 = self.input.LA(2) + + if (self.synpred50_Java()) : + alt191 = 1 + elif (True) : + alt191 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 191, 2, self.input) + + raise nvae + + elif LA191 == IDENT: + LA191_3 = self.input.LA(2) + + if (self.synpred50_Java()) : + alt191 = 1 + elif (True) : + alt191 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 191, 3, self.input) + + raise nvae + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 191, 0, self.input) + + raise nvae + + if alt191 == 1: + # Java.g:369:13: ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI | VOID IDENT formalParameterList ( throwsClause )? SEMI ) + pass + # Java.g:369:13: ( genericTypeParameterList )? + alt186 = 2 + LA186_0 = self.input.LA(1) + + if (LA186_0 == LESS_THAN) : + alt186 = 1 + if alt186 == 1: + # Java.g:0:0: genericTypeParameterList + pass + self._state.following.append(self.FOLLOW_genericTypeParameterList_in_synpred51_Java5969) + self.genericTypeParameterList() + + self._state.following.pop() + + + + # Java.g:370:13: ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI | VOID IDENT formalParameterList ( throwsClause )? SEMI ) + alt190 = 2 + LA190_0 = self.input.LA(1) + + if (LA190_0 == BOOLEAN or LA190_0 == BYTE or LA190_0 == CHAR or LA190_0 == DOUBLE or LA190_0 == FLOAT or (INT <= LA190_0 <= LONG) or LA190_0 == SHORT or LA190_0 == IDENT) : + alt190 = 1 + elif (LA190_0 == VOID) : + alt190 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 190, 0, self.input) + + raise nvae + + if alt190 == 1: + # Java.g:370:17: type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI + pass + self._state.following.append(self.FOLLOW_type_in_synpred51_Java5988) + self.type() + + self._state.following.pop() + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred51_Java5990) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred51_Java5992) + self.formalParameterList() + + self._state.following.pop() + # Java.g:370:48: ( arrayDeclaratorList )? + alt187 = 2 + LA187_0 = self.input.LA(1) + + if (LA187_0 == LBRACK) : + alt187 = 1 + if alt187 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_synpred51_Java5994) + self.arrayDeclaratorList() + + self._state.following.pop() + + + + # Java.g:370:69: ( throwsClause )? + alt188 = 2 + LA188_0 = self.input.LA(1) + + if (LA188_0 == THROWS) : + alt188 = 1 + if alt188 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred51_Java5997) + self.throwsClause() + + self._state.following.pop() + + + + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred51_Java6000) + + + elif alt190 == 2: + # Java.g:372:17: VOID IDENT formalParameterList ( throwsClause )? SEMI + pass + self.match(self.input, VOID, self.FOLLOW_VOID_in_synpred51_Java6058) + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred51_Java6060) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred51_Java6062) + self.formalParameterList() + + self._state.following.pop() + # Java.g:372:48: ( throwsClause )? + alt189 = 2 + LA189_0 = self.input.LA(1) + + if (LA189_0 == THROWS) : + alt189 = 1 + if alt189 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred51_Java6064) + self.throwsClause() + + self._state.following.pop() + + + + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred51_Java6067) + + + + + + elif alt191 == 2: + # Java.g:375:13: type interfaceFieldDeclaratorList SEMI + pass + self._state.following.append(self.FOLLOW_type_in_synpred51_Java6130) + self.type() + + self._state.following.pop() + self._state.following.append(self.FOLLOW_interfaceFieldDeclaratorList_in_synpred51_Java6132) + self.interfaceFieldDeclaratorList() + + self._state.following.pop() + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred51_Java6134) + + + + + + # $ANTLR end "synpred51_Java" + + + + # $ANTLR start "synpred52_Java" + def synpred52_Java_fragment(self, ): + # Java.g:378:9: ( typeDeclaration ) + # Java.g:378:9: typeDeclaration + pass + self._state.following.append(self.FOLLOW_typeDeclaration_in_synpred52_Java6179) + self.typeDeclaration() + + self._state.following.pop() + + + # $ANTLR end "synpred52_Java" + + + + # $ANTLR start "synpred58_Java" + def synpred58_Java_fragment(self, ): + # Java.g:417:9: ( arrayDeclarator ) + # Java.g:417:9: arrayDeclarator + pass + self._state.following.append(self.FOLLOW_arrayDeclarator_in_synpred58_Java6473) + self.arrayDeclarator() + + self._state.following.pop() + + + # $ANTLR end "synpred58_Java" + + + + # $ANTLR start "synpred76_Java" + def synpred76_Java_fragment(self, ): + # Java.g:466:23: ( arrayDeclaratorList ) + # Java.g:466:23: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_synpred76_Java6860) + self.arrayDeclaratorList() + + self._state.following.pop() + + + # $ANTLR end "synpred76_Java" + + + + # $ANTLR start "synpred77_Java" + def synpred77_Java_fragment(self, ): + # Java.g:471:28: ( arrayDeclaratorList ) + # Java.g:471:28: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_synpred77_Java6903) + self.arrayDeclaratorList() + + self._state.following.pop() + + + # $ANTLR end "synpred77_Java" + + + + # $ANTLR start "synpred79_Java" + def synpred79_Java_fragment(self, ): + # Java.g:481:20: ( DOT typeIdent ) + # Java.g:481:20: DOT typeIdent + pass + self.match(self.input, DOT, self.FOLLOW_DOT_in_synpred79_Java6988) + self._state.following.append(self.FOLLOW_typeIdent_in_synpred79_Java6990) + self.typeIdent() + + self._state.following.pop() + + + # $ANTLR end "synpred79_Java" + + + + # $ANTLR start "synpred90_Java" + def synpred90_Java_fragment(self, ): + # Java.g:510:40: ( COMMA genericTypeArgument ) + # Java.g:510:40: COMMA genericTypeArgument + pass + self.match(self.input, COMMA, self.FOLLOW_COMMA_in_synpred90_Java7213) + self._state.following.append(self.FOLLOW_genericTypeArgument_in_synpred90_Java7215) + self.genericTypeArgument() + + self._state.following.pop() + + + # $ANTLR end "synpred90_Java" + + + + # $ANTLR start "synpred92_Java" + def synpred92_Java_fragment(self, ): + # Java.g:516:18: ( genericWildcardBoundType ) + # Java.g:516:18: genericWildcardBoundType + pass + self._state.following.append(self.FOLLOW_genericWildcardBoundType_in_synpred92_Java7269) + self.genericWildcardBoundType() + + self._state.following.pop() + + + # $ANTLR end "synpred92_Java" + + + + # $ANTLR start "synpred97_Java" + def synpred97_Java_fragment(self, ): + # Java.g:541:42: ( COMMA formalParameterStandardDecl ) + # Java.g:541:42: COMMA formalParameterStandardDecl + pass + self.match(self.input, COMMA, self.FOLLOW_COMMA_in_synpred97_Java7470) + self._state.following.append(self.FOLLOW_formalParameterStandardDecl_in_synpred97_Java7472) + self.formalParameterStandardDecl() + + self._state.following.pop() + + + # $ANTLR end "synpred97_Java" + + + + # $ANTLR start "synpred99_Java" + def synpred99_Java_fragment(self, ): + # Java.g:541:13: ( formalParameterStandardDecl ( COMMA formalParameterStandardDecl )* ( COMMA formalParameterVarArgDecl )? ) + # Java.g:541:13: formalParameterStandardDecl ( COMMA formalParameterStandardDecl )* ( COMMA formalParameterVarArgDecl )? + pass + self._state.following.append(self.FOLLOW_formalParameterStandardDecl_in_synpred99_Java7467) + self.formalParameterStandardDecl() + + self._state.following.pop() + # Java.g:541:41: ( COMMA formalParameterStandardDecl )* + while True: #loop194 + alt194 = 2 + LA194_0 = self.input.LA(1) + + if (LA194_0 == COMMA) : + LA194_1 = self.input.LA(2) + + if (self.synpred97_Java()) : + alt194 = 1 + + + + + if alt194 == 1: + # Java.g:541:42: COMMA formalParameterStandardDecl + pass + self.match(self.input, COMMA, self.FOLLOW_COMMA_in_synpred99_Java7470) + self._state.following.append(self.FOLLOW_formalParameterStandardDecl_in_synpred99_Java7472) + self.formalParameterStandardDecl() + + self._state.following.pop() + + + else: + break #loop194 + # Java.g:541:78: ( COMMA formalParameterVarArgDecl )? + alt195 = 2 + LA195_0 = self.input.LA(1) + + if (LA195_0 == COMMA) : + alt195 = 1 + if alt195 == 1: + # Java.g:541:79: COMMA formalParameterVarArgDecl + pass + self.match(self.input, COMMA, self.FOLLOW_COMMA_in_synpred99_Java7477) + self._state.following.append(self.FOLLOW_formalParameterVarArgDecl_in_synpred99_Java7479) + self.formalParameterVarArgDecl() + + self._state.following.pop() + + + + + + # $ANTLR end "synpred99_Java" + + + + # $ANTLR start "synpred100_Java" + def synpred100_Java_fragment(self, ): + # Java.g:544:13: ( formalParameterVarArgDecl ) + # Java.g:544:13: formalParameterVarArgDecl + pass + self._state.following.append(self.FOLLOW_formalParameterVarArgDecl_in_synpred100_Java7534) + self.formalParameterVarArgDecl() + + self._state.following.pop() + + + # $ANTLR end "synpred100_Java" + + + + # $ANTLR start "synpred101_Java" + def synpred101_Java_fragment(self, ): + # Java.g:565:13: ( DOT ident= IDENT ) + # Java.g:565:13: DOT ident= IDENT + pass + self.match(self.input, DOT, self.FOLLOW_DOT_in_synpred101_Java7765) + ident=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred101_Java7769) + + + # $ANTLR end "synpred101_Java" + + + + # $ANTLR start "synpred102_Java" + def synpred102_Java_fragment(self, ): + # Java.g:572:9: ( annotation ) + # Java.g:572:9: annotation + pass + self._state.following.append(self.FOLLOW_annotation_in_synpred102_Java7818) + self.annotation() + + self._state.following.pop() + + + # $ANTLR end "synpred102_Java" + + + + # $ANTLR start "synpred114_Java" + def synpred114_Java_fragment(self, ): + # Java.g:623:9: ( modifierList type ( IDENT LPAREN RPAREN ( annotationDefaultValue )? SEMI | classFieldDeclaratorList SEMI ) ) + # Java.g:623:9: modifierList type ( IDENT LPAREN RPAREN ( annotationDefaultValue )? SEMI | classFieldDeclaratorList SEMI ) + pass + self._state.following.append(self.FOLLOW_modifierList_in_synpred114_Java8240) + self.modifierList() + + self._state.following.pop() + self._state.following.append(self.FOLLOW_type_in_synpred114_Java8242) + self.type() + + self._state.following.pop() + # Java.g:624:9: ( IDENT LPAREN RPAREN ( annotationDefaultValue )? SEMI | classFieldDeclaratorList SEMI ) + alt200 = 2 + LA200_0 = self.input.LA(1) + + if (LA200_0 == IDENT) : + LA200_1 = self.input.LA(2) + + if (LA200_1 == LPAREN) : + alt200 = 1 + elif (LA200_1 == ASSIGN or LA200_1 == COMMA or LA200_1 == LBRACK or LA200_1 == SEMI) : + alt200 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 200, 1, self.input) + + raise nvae + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 200, 0, self.input) + + raise nvae + + if alt200 == 1: + # Java.g:624:13: IDENT LPAREN RPAREN ( annotationDefaultValue )? SEMI + pass + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred114_Java8256) + self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_synpred114_Java8258) + self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_synpred114_Java8260) + # Java.g:624:33: ( annotationDefaultValue )? + alt199 = 2 + LA199_0 = self.input.LA(1) + + if (LA199_0 == DEFAULT) : + alt199 = 1 + if alt199 == 1: + # Java.g:0:0: annotationDefaultValue + pass + self._state.following.append(self.FOLLOW_annotationDefaultValue_in_synpred114_Java8262) + self.annotationDefaultValue() + + self._state.following.pop() + + + + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred114_Java8265) + + + elif alt200 == 2: + # Java.g:626:13: classFieldDeclaratorList SEMI + pass + self._state.following.append(self.FOLLOW_classFieldDeclaratorList_in_synpred114_Java8307) + self.classFieldDeclaratorList() + + self._state.following.pop() + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred114_Java8309) + + + + + + # $ANTLR end "synpred114_Java" + + + + # $ANTLR start "synpred116_Java" + def synpred116_Java_fragment(self, ): + # Java.g:644:9: ( localVariableDeclaration SEMI ) + # Java.g:644:9: localVariableDeclaration SEMI + pass + self._state.following.append(self.FOLLOW_localVariableDeclaration_in_synpred116_Java8440) + self.localVariableDeclaration() + + self._state.following.pop() + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred116_Java8442) + + + # $ANTLR end "synpred116_Java" + + + + # $ANTLR start "synpred117_Java" + def synpred117_Java_fragment(self, ): + # Java.g:645:9: ( typeDeclaration ) + # Java.g:645:9: typeDeclaration + pass + self._state.following.append(self.FOLLOW_typeDeclaration_in_synpred117_Java8453) + self.typeDeclaration() + + self._state.following.pop() + + + # $ANTLR end "synpred117_Java" + + + + # $ANTLR start "synpred121_Java" + def synpred121_Java_fragment(self, ): + # Java.g:662:13: ( ELSE elseStat= statement ) + # Java.g:662:13: ELSE elseStat= statement + pass + self.match(self.input, ELSE, self.FOLLOW_ELSE_in_synpred121_Java8733) + self._state.following.append(self.FOLLOW_statement_in_synpred121_Java8737) + elseStat = self.statement() + + self._state.following.pop() + + + # $ANTLR end "synpred121_Java" + + + + # $ANTLR start "synpred123_Java" + def synpred123_Java_fragment(self, ): + # Java.g:666:13: ( forInit SEMI forCondition SEMI forUpdater RPAREN statement ) + # Java.g:666:13: forInit SEMI forCondition SEMI forUpdater RPAREN statement + pass + self._state.following.append(self.FOLLOW_forInit_in_synpred123_Java8916) + self.forInit() + + self._state.following.pop() + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred123_Java8918) + self._state.following.append(self.FOLLOW_forCondition_in_synpred123_Java8920) + self.forCondition() + + self._state.following.pop() + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred123_Java8922) + self._state.following.append(self.FOLLOW_forUpdater_in_synpred123_Java8924) + self.forUpdater() + + self._state.following.pop() + self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_synpred123_Java8926) + self._state.following.append(self.FOLLOW_statement_in_synpred123_Java8928) + self.statement() + + self._state.following.pop() + + + # $ANTLR end "synpred123_Java" + + + + # $ANTLR start "synpred130_Java" + def synpred130_Java_fragment(self, ): + # Java.g:673:47: ( switchBlockLabels ) + # Java.g:673:47: switchBlockLabels + pass + self._state.following.append(self.FOLLOW_switchBlockLabels_in_synpred130_Java9251) + self.switchBlockLabels() + + self._state.following.pop() + + + # $ANTLR end "synpred130_Java" + + + + # $ANTLR start "synpred143_Java" + def synpred143_Java_fragment(self, ): + # Java.g:702:11: (c0= switchCaseLabels ) + # Java.g:702:11: c0= switchCaseLabels + pass + self._state.following.append(self.FOLLOW_switchCaseLabels_in_synpred143_Java9839) + c0 = self.switchCaseLabels() + + self._state.following.pop() + + + # $ANTLR end "synpred143_Java" + + + + # $ANTLR start "synpred145_Java" + def synpred145_Java_fragment(self, ): + # Java.g:702:52: (c1= switchCaseLabels ) + # Java.g:702:52: c1= switchCaseLabels + pass + self._state.following.append(self.FOLLOW_switchCaseLabels_in_synpred145_Java9847) + c1 = self.switchCaseLabels() + + self._state.following.pop() + + + # $ANTLR end "synpred145_Java" + + + + # $ANTLR start "synpred146_Java" + def synpred146_Java_fragment(self, ): + # Java.g:707:9: ( switchCaseLabel ) + # Java.g:707:9: switchCaseLabel + pass + self._state.following.append(self.FOLLOW_switchCaseLabel_in_synpred146_Java9893) + self.switchCaseLabel() + + self._state.following.pop() + + + # $ANTLR end "synpred146_Java" + + + + # $ANTLR start "synpred149_Java" + def synpred149_Java_fragment(self, ): + # Java.g:719:9: ( localVariableDeclaration ) + # Java.g:719:9: localVariableDeclaration + pass + self._state.following.append(self.FOLLOW_localVariableDeclaration_in_synpred149_Java9967) + self.localVariableDeclaration() + + self._state.following.pop() + + + # $ANTLR end "synpred149_Java" + + + + # $ANTLR start "synpred150_Java" + def synpred150_Java_fragment(self, ): + # Java.g:720:9: ( expressionList ) + # Java.g:720:9: expressionList + pass + self._state.following.append(self.FOLLOW_expressionList_in_synpred150_Java9989) + self.expressionList() + + self._state.following.pop() + + + # $ANTLR end "synpred150_Java" + + + + # $ANTLR start "synpred193_Java" + def synpred193_Java_fragment(self, ): + # Java.g:856:9: ( LPAREN type RPAREN unaryExpression ) + # Java.g:856:9: LPAREN type RPAREN unaryExpression + pass + self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_synpred193_Java11492) + self._state.following.append(self.FOLLOW_type_in_synpred193_Java11494) + self.type() + + self._state.following.pop() + self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_synpred193_Java11496) + self._state.following.append(self.FOLLOW_unaryExpression_in_synpred193_Java11498) + self.unaryExpression() + + self._state.following.pop() + + + # $ANTLR end "synpred193_Java" + + + + # $ANTLR start "synpred221_Java" + def synpred221_Java_fragment(self, ): + # Java.g:924:13: ( ( arrayDeclarator )+ ( DOT CLASS ) ) + # Java.g:924:13: ( arrayDeclarator )+ ( DOT CLASS ) + pass + # Java.g:924:13: ( arrayDeclarator )+ + cnt224 = 0 + while True: #loop224 + alt224 = 2 + LA224_0 = self.input.LA(1) + + if (LA224_0 == LBRACK) : + alt224 = 1 + + + if alt224 == 1: + # Java.g:924:17: arrayDeclarator + pass + self._state.following.append(self.FOLLOW_arrayDeclarator_in_synpred221_Java13349) + self.arrayDeclarator() + + self._state.following.pop() + + + else: + if cnt224 >= 1: + break #loop224 + + if self._state.backtracking > 0: + raise BacktrackingFailed + + eee = EarlyExitException(224, self.input) + raise eee + + cnt224 += 1 + # Java.g:926:13: ( DOT CLASS ) + # Java.g:926:17: DOT CLASS + pass + self.match(self.input, DOT, self.FOLLOW_DOT_in_synpred221_Java13416) + self.match(self.input, CLASS, self.FOLLOW_CLASS_in_synpred221_Java13418) + + + + + + # $ANTLR end "synpred221_Java" + + + + # $ANTLR start "synpred229_Java" + def synpred229_Java_fragment(self, ): + # Java.g:929:13: (outerDot= DOT ( CLASS | genericTypeArgumentListSimplified (Super= SUPER arguments | SUPER innerDot= DOT IDENT arguments | IDENT arguments ) | THIS | Super= SUPER arguments | innerNewExpression ) ) + # Java.g:929:13: outerDot= DOT ( CLASS | genericTypeArgumentListSimplified (Super= SUPER arguments | SUPER innerDot= DOT IDENT arguments | IDENT arguments ) | THIS | Super= SUPER arguments | innerNewExpression ) + pass + outerDot=self.match(self.input, DOT, self.FOLLOW_DOT_in_synpred229_Java13549) + # Java.g:930:13: ( CLASS | genericTypeArgumentListSimplified (Super= SUPER arguments | SUPER innerDot= DOT IDENT arguments | IDENT arguments ) | THIS | Super= SUPER arguments | innerNewExpression ) + alt227 = 5 + LA227 = self.input.LA(1) + if LA227 == CLASS: + alt227 = 1 + elif LA227 == LESS_THAN: + alt227 = 2 + elif LA227 == THIS: + alt227 = 3 + elif LA227 == SUPER: + alt227 = 4 + elif LA227 == NEW: + alt227 = 5 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 227, 0, self.input) + + raise nvae + + if alt227 == 1: + # Java.g:930:17: CLASS + pass + self.match(self.input, CLASS, self.FOLLOW_CLASS_in_synpred229_Java13567) + + + elif alt227 == 2: + # Java.g:931:17: genericTypeArgumentListSimplified (Super= SUPER arguments | SUPER innerDot= DOT IDENT arguments | IDENT arguments ) + pass + self._state.following.append(self.FOLLOW_genericTypeArgumentListSimplified_in_synpred229_Java13630) + self.genericTypeArgumentListSimplified() + + self._state.following.pop() + # Java.g:932:17: (Super= SUPER arguments | SUPER innerDot= DOT IDENT arguments | IDENT arguments ) + alt226 = 3 + LA226_0 = self.input.LA(1) + + if (LA226_0 == SUPER) : + LA226_1 = self.input.LA(2) + + if (LA226_1 == DOT) : + alt226 = 2 + elif (LA226_1 == LPAREN) : + alt226 = 1 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 226, 1, self.input) + + raise nvae + + elif (LA226_0 == IDENT) : + alt226 = 3 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 226, 0, self.input) + + raise nvae + + if alt226 == 1: + # Java.g:932:21: Super= SUPER arguments + pass + Super=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_synpred229_Java13654) + self._state.following.append(self.FOLLOW_arguments_in_synpred229_Java13656) + self.arguments() + + self._state.following.pop() + + + elif alt226 == 2: + # Java.g:933:21: SUPER innerDot= DOT IDENT arguments + pass + self.match(self.input, SUPER, self.FOLLOW_SUPER_in_synpred229_Java13706) + innerDot=self.match(self.input, DOT, self.FOLLOW_DOT_in_synpred229_Java13710) + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred229_Java13712) + self._state.following.append(self.FOLLOW_arguments_in_synpred229_Java13714) + self.arguments() + + self._state.following.pop() + + + elif alt226 == 3: + # Java.g:934:21: IDENT arguments + pass + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred229_Java13764) + self._state.following.append(self.FOLLOW_arguments_in_synpred229_Java13766) + self.arguments() + + self._state.following.pop() + + + + + + elif alt227 == 3: + # Java.g:936:17: THIS + pass + self.match(self.input, THIS, self.FOLLOW_THIS_in_synpred229_Java13841) + + + elif alt227 == 4: + # Java.g:937:17: Super= SUPER arguments + pass + Super=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_synpred229_Java13907) + self._state.following.append(self.FOLLOW_arguments_in_synpred229_Java13909) + self.arguments() + + self._state.following.pop() + + + elif alt227 == 5: + # Java.g:938:17: innerNewExpression + pass + self._state.following.append(self.FOLLOW_innerNewExpression_in_synpred229_Java13957) + self.innerNewExpression() + + self._state.following.pop() + + + + + + # $ANTLR end "synpred229_Java" + + + + # $ANTLR start "synpred237_Java" + def synpred237_Java_fragment(self, ): + # Java.g:963:37: ( LBRACK expression RBRACK ) + # Java.g:963:37: LBRACK expression RBRACK + pass + self.match(self.input, LBRACK, self.FOLLOW_LBRACK_in_synpred237_Java14352) + self._state.following.append(self.FOLLOW_expression_in_synpred237_Java14355) + self.expression() + + self._state.following.pop() + self.match(self.input, RBRACK, self.FOLLOW_RBRACK_in_synpred237_Java14357) + + + # $ANTLR end "synpred237_Java" + + + + + # Delegated rules + + def synpred193_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred193_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred43_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred43_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred121_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred121_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred76_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred76_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred221_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred221_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred229_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred229_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred114_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred114_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred116_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred116_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred97_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred97_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred102_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred102_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred117_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred117_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred79_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred79_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred101_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred101_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred130_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred130_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred16_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred16_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred42_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred42_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred145_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred145_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred143_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred143_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred77_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred77_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred51_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred51_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred100_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred100_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred52_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred52_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred15_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred15_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred123_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred123_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred32_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred32_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred149_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred149_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred17_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred17_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred92_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred92_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred90_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred90_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred150_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred150_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred58_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred58_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred50_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred50_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred14_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred14_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred99_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred99_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred146_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred146_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred237_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred237_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred44_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred44_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + + + # lookup tables for DFA #36 + + DFA36_eot = DFA.unpack( + u"\27\uffff" + ) + + DFA36_eof = DFA.unpack( + u"\27\uffff" + ) + + DFA36_min = DFA.unpack( + u"\1\7\1\uffff\14\0\11\uffff" + ) + + DFA36_max = DFA.unpack( + u"\1\u00a4\1\uffff\14\0\11\uffff" + ) + + DFA36_accept = DFA.unpack( + u"\1\uffff\1\1\14\uffff\1\3\3\uffff\1\4\2\uffff\1\5\1\2" + ) + + DFA36_special = DFA.unpack( + u"\2\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\11" + u"\uffff" + ) + + + DFA36_transition = [ + DFA.unpack(u"\1\15\17\uffff\1\1\1\uffff\1\16\22\uffff\1\25\10\uffff" + u"\1\6\1\uffff\1\16\1\uffff\1\16\2\uffff\1\16\1\22\3\uffff\1\16\1" + u"\uffff\1\22\2\uffff\1\14\1\uffff\1\16\4\uffff\1\22\1\uffff\2\16" + u"\1\7\3\uffff\1\5\1\4\1\3\1\uffff\1\16\1\2\1\13\2\uffff\1\10\3\uffff" + u"\1\11\2\uffff\1\16\1\12\75\uffff\1\16"), + DFA.unpack(u""), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"") + ] + + # class definition for DFA #36 + + class DFA36(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA36_2 = input.LA(1) + + + index36_2 = input.index() + input.rewind() + s = -1 + if (self.synpred32_Java()): + s = 22 + + elif (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_2) + if s >= 0: + return s + elif s == 1: + LA36_3 = input.LA(1) + + + index36_3 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_3) + if s >= 0: + return s + elif s == 2: + LA36_4 = input.LA(1) + + + index36_4 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_4) + if s >= 0: + return s + elif s == 3: + LA36_5 = input.LA(1) + + + index36_5 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_5) + if s >= 0: + return s + elif s == 4: + LA36_6 = input.LA(1) + + + index36_6 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_6) + if s >= 0: + return s + elif s == 5: + LA36_7 = input.LA(1) + + + index36_7 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_7) + if s >= 0: + return s + elif s == 6: + LA36_8 = input.LA(1) + + + index36_8 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_8) + if s >= 0: + return s + elif s == 7: + LA36_9 = input.LA(1) + + + index36_9 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_9) + if s >= 0: + return s + elif s == 8: + LA36_10 = input.LA(1) + + + index36_10 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_10) + if s >= 0: + return s + elif s == 9: + LA36_11 = input.LA(1) + + + index36_11 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_11) + if s >= 0: + return s + elif s == 10: + LA36_12 = input.LA(1) + + + index36_12 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_12) + if s >= 0: + return s + elif s == 11: + LA36_13 = input.LA(1) + + + index36_13 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_13) + if s >= 0: + return s + + if self._state.backtracking >0: + raise BacktrackingFailed + nvae = NoViableAltException(self_.getDescription(), 36, _s, input) + self_.error(nvae) + raise nvae + # lookup tables for DFA #43 + + DFA43_eot = DFA.unpack( + u"\25\uffff" + ) + + DFA43_eof = DFA.unpack( + u"\25\uffff" + ) + + DFA43_min = DFA.unpack( + u"\1\7\14\0\10\uffff" + ) + + DFA43_max = DFA.unpack( + u"\1\u00a4\14\0\10\uffff" + ) + + DFA43_accept = DFA.unpack( + u"\15\uffff\1\1\3\uffff\1\2\2\uffff\1\3" + ) + + DFA43_special = DFA.unpack( + u"\1\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\10" + u"\uffff" + ) + + + DFA43_transition = [ + DFA.unpack(u"\1\14\21\uffff\1\15\22\uffff\1\24\10\uffff\1\5\1\uffff" + u"\1\15\1\uffff\1\15\2\uffff\1\15\1\21\3\uffff\1\15\1\uffff\1\21" + u"\2\uffff\1\13\1\uffff\1\15\4\uffff\1\21\1\uffff\2\15\1\6\3\uffff" + u"\1\3\1\2\1\1\1\uffff\1\15\1\4\1\12\2\uffff\1\7\3\uffff\1\10\2\uffff" + u"\1\15\1\11\75\uffff\1\15"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"") + ] + + # class definition for DFA #43 + + class DFA43(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA43_1 = input.LA(1) + + + index43_1 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_1) + if s >= 0: + return s + elif s == 1: + LA43_2 = input.LA(1) + + + index43_2 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_2) + if s >= 0: + return s + elif s == 2: + LA43_3 = input.LA(1) + + + index43_3 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_3) + if s >= 0: + return s + elif s == 3: + LA43_4 = input.LA(1) + + + index43_4 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_4) + if s >= 0: + return s + elif s == 4: + LA43_5 = input.LA(1) + + + index43_5 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_5) + if s >= 0: + return s + elif s == 5: + LA43_6 = input.LA(1) + + + index43_6 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_6) + if s >= 0: + return s + elif s == 6: + LA43_7 = input.LA(1) + + + index43_7 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_7) + if s >= 0: + return s + elif s == 7: + LA43_8 = input.LA(1) + + + index43_8 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_8) + if s >= 0: + return s + elif s == 8: + LA43_9 = input.LA(1) + + + index43_9 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_9) + if s >= 0: + return s + elif s == 9: + LA43_10 = input.LA(1) + + + index43_10 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_10) + if s >= 0: + return s + elif s == 10: + LA43_11 = input.LA(1) + + + index43_11 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_11) + if s >= 0: + return s + elif s == 11: + LA43_12 = input.LA(1) + + + index43_12 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_12) + if s >= 0: + return s + + if self._state.backtracking >0: + raise BacktrackingFailed + nvae = NoViableAltException(self_.getDescription(), 43, _s, input) + self_.error(nvae) + raise nvae + # lookup tables for DFA #86 + + DFA86_eot = DFA.unpack( + u"\22\uffff" + ) + + DFA86_eof = DFA.unpack( + u"\22\uffff" + ) + + DFA86_min = DFA.unpack( + u"\1\7\14\0\5\uffff" + ) + + DFA86_max = DFA.unpack( + u"\1\u00a4\14\0\5\uffff" + ) + + DFA86_accept = DFA.unpack( + u"\15\uffff\1\1\1\uffff\1\2\2\uffff" + ) + + DFA86_special = DFA.unpack( + u"\1\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\5" + u"\uffff" + ) + + + DFA86_transition = [ + DFA.unpack(u"\1\14\55\uffff\1\5\1\uffff\1\15\1\uffff\1\15\2\uffff" + u"\1\15\1\17\3\uffff\1\15\1\uffff\1\17\2\uffff\1\13\1\uffff\1\15" + u"\4\uffff\1\17\1\uffff\2\15\1\6\3\uffff\1\3\1\2\1\1\1\uffff\1\15" + u"\1\4\1\12\2\uffff\1\7\3\uffff\1\10\3\uffff\1\11\75\uffff\1\15"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"") + ] + + # class definition for DFA #86 + + class DFA86(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA86_1 = input.LA(1) + + + index86_1 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_1) + if s >= 0: + return s + elif s == 1: + LA86_2 = input.LA(1) + + + index86_2 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_2) + if s >= 0: + return s + elif s == 2: + LA86_3 = input.LA(1) + + + index86_3 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_3) + if s >= 0: + return s + elif s == 3: + LA86_4 = input.LA(1) + + + index86_4 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_4) + if s >= 0: + return s + elif s == 4: + LA86_5 = input.LA(1) + + + index86_5 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_5) + if s >= 0: + return s + elif s == 5: + LA86_6 = input.LA(1) + + + index86_6 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_6) + if s >= 0: + return s + elif s == 6: + LA86_7 = input.LA(1) + + + index86_7 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_7) + if s >= 0: + return s + elif s == 7: + LA86_8 = input.LA(1) + + + index86_8 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_8) + if s >= 0: + return s + elif s == 8: + LA86_9 = input.LA(1) + + + index86_9 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_9) + if s >= 0: + return s + elif s == 9: + LA86_10 = input.LA(1) + + + index86_10 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_10) + if s >= 0: + return s + elif s == 10: + LA86_11 = input.LA(1) + + + index86_11 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_11) + if s >= 0: + return s + elif s == 11: + LA86_12 = input.LA(1) + + + index86_12 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_12) + if s >= 0: + return s + + if self._state.backtracking >0: + raise BacktrackingFailed + nvae = NoViableAltException(self_.getDescription(), 86, _s, input) + self_.error(nvae) + raise nvae + # lookup tables for DFA #88 + + DFA88_eot = DFA.unpack( + u"\55\uffff" + ) + + DFA88_eof = DFA.unpack( + u"\55\uffff" + ) + + DFA88_min = DFA.unpack( + u"\1\7\4\0\6\uffff\1\0\41\uffff" + ) + + DFA88_max = DFA.unpack( + u"\1\u00aa\4\0\6\uffff\1\0\41\uffff" + ) + + DFA88_accept = DFA.unpack( + u"\5\uffff\1\2\14\uffff\1\3\31\uffff\1\1" + ) + + DFA88_special = DFA.unpack( + u"\1\uffff\1\0\1\1\1\2\1\3\6\uffff\1\4\41\uffff" + ) + + + DFA88_transition = [ + DFA.unpack(u"\1\2\4\uffff\1\22\10\uffff\1\22\1\uffff\1\22\1\uffff" + u"\1\22\1\uffff\1\22\1\uffff\2\22\3\uffff\1\22\3\uffff\1\22\5\uffff" + u"\1\22\10\uffff\1\5\1\22\1\3\1\22\1\3\2\uffff\1\3\1\5\1\22\1\uffff" + u"\1\22\1\3\1\uffff\1\5\1\uffff\1\22\1\1\1\uffff\1\3\2\22\2\uffff" + u"\1\5\1\uffff\2\3\1\5\2\22\1\uffff\3\5\1\22\1\3\2\5\2\22\1\13\2" + u"\22\1\uffff\1\5\3\22\1\5\1\22\74\uffff\1\4\6\22"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"") + ] + + # class definition for DFA #88 + + class DFA88(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA88_1 = input.LA(1) + + + index88_1 = input.index() + input.rewind() + s = -1 + if (self.synpred116_Java()): + s = 44 + + elif (self.synpred117_Java()): + s = 5 + + + input.seek(index88_1) + if s >= 0: + return s + elif s == 1: + LA88_2 = input.LA(1) + + + index88_2 = input.index() + input.rewind() + s = -1 + if (self.synpred116_Java()): + s = 44 + + elif (self.synpred117_Java()): + s = 5 + + + input.seek(index88_2) + if s >= 0: + return s + elif s == 2: + LA88_3 = input.LA(1) + + + index88_3 = input.index() + input.rewind() + s = -1 + if (self.synpred116_Java()): + s = 44 + + elif (True): + s = 18 + + + input.seek(index88_3) + if s >= 0: + return s + elif s == 3: + LA88_4 = input.LA(1) + + + index88_4 = input.index() + input.rewind() + s = -1 + if (self.synpred116_Java()): + s = 44 + + elif (True): + s = 18 + + + input.seek(index88_4) + if s >= 0: + return s + elif s == 4: + LA88_11 = input.LA(1) + + + index88_11 = input.index() + input.rewind() + s = -1 + if (self.synpred117_Java()): + s = 5 + + elif (True): + s = 18 + + + input.seek(index88_11) + if s >= 0: + return s + + if self._state.backtracking >0: + raise BacktrackingFailed + nvae = NoViableAltException(self_.getDescription(), 88, _s, input) + self_.error(nvae) + raise nvae + # lookup tables for DFA #98 + + DFA98_eot = DFA.unpack( + u"\22\uffff" + ) + + DFA98_eof = DFA.unpack( + u"\22\uffff" + ) + + DFA98_min = DFA.unpack( + u"\1\14\15\uffff\1\4\3\uffff" + ) + + DFA98_max = DFA.unpack( + u"\1\u00aa\15\uffff\1\114\3\uffff" + ) + + DFA98_accept = DFA.unpack( + u"\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1" + u"\15\1\uffff\1\17\1\20\1\16" + ) + + DFA98_special = DFA.unpack( + u"\22\uffff" + ) + + + DFA98_transition = [ + DFA.unpack(u"\1\17\10\uffff\1\17\1\uffff\1\1\1\uffff\1\17\1\uffff" + u"\1\17\1\uffff\2\17\3\uffff\1\17\3\uffff\1\17\5\uffff\1\20\11\uffff" + u"\1\2\1\17\1\14\1\17\2\uffff\1\17\1\uffff\1\15\1\uffff\1\6\1\17" + u"\3\uffff\1\17\2\uffff\1\17\1\4\1\3\4\uffff\2\17\1\uffff\2\17\4" + u"\uffff\1\12\1\17\2\uffff\1\17\1\10\1\11\1\17\1\13\2\uffff\1\17" + u"\1\7\1\17\1\uffff\1\5\74\uffff\1\16\6\17"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\3\17\1\uffff\2\17\1\21\1\uffff\4\17\2\uffff\5\17\1" + u"\uffff\3\17\1\uffff\6\17\1\uffff\6\17\3\uffff\11\17\27\uffff\1" + u"\17"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"") + ] + + # class definition for DFA #98 + + class DFA98(DFA): + pass + + + # lookup tables for DFA #91 + + DFA91_eot = DFA.unpack( + u"\24\uffff" + ) + + DFA91_eof = DFA.unpack( + u"\24\uffff" + ) + + DFA91_min = DFA.unpack( + u"\1\7\4\0\17\uffff" + ) + + DFA91_max = DFA.unpack( + u"\1\u00aa\4\0\17\uffff" + ) + + DFA91_accept = DFA.unpack( + u"\5\uffff\1\1\15\uffff\1\2" + ) + + DFA91_special = DFA.unpack( + u"\1\uffff\1\0\1\1\1\2\1\3\17\uffff" + ) + + + DFA91_transition = [ + DFA.unpack(u"\1\2\4\uffff\1\5\10\uffff\1\5\3\uffff\1\5\1\uffff\1" + u"\5\1\uffff\2\5\3\uffff\1\5\3\uffff\1\5\5\uffff\1\5\12\uffff\1\3" + u"\1\uffff\1\3\2\uffff\1\3\4\uffff\1\3\3\uffff\1\5\1\1\1\uffff\1" + u"\3\6\uffff\2\3\1\uffff\2\5\5\uffff\1\3\2\uffff\1\5\2\uffff\1\5" + u"\3\uffff\1\5\1\uffff\1\5\76\uffff\1\4\6\5"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"") + ] + + # class definition for DFA #91 + + class DFA91(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA91_1 = input.LA(1) + + + index91_1 = input.index() + input.rewind() + s = -1 + if (self.synpred123_Java()): + s = 5 + + elif (True): + s = 19 + + + input.seek(index91_1) + if s >= 0: + return s + elif s == 1: + LA91_2 = input.LA(1) + + + index91_2 = input.index() + input.rewind() + s = -1 + if (self.synpred123_Java()): + s = 5 + + elif (True): + s = 19 + + + input.seek(index91_2) + if s >= 0: + return s + elif s == 2: + LA91_3 = input.LA(1) + + + index91_3 = input.index() + input.rewind() + s = -1 + if (self.synpred123_Java()): + s = 5 + + elif (True): + s = 19 + + + input.seek(index91_3) + if s >= 0: + return s + elif s == 3: + LA91_4 = input.LA(1) + + + index91_4 = input.index() + input.rewind() + s = -1 + if (self.synpred123_Java()): + s = 5 + + elif (True): + s = 19 + + + input.seek(index91_4) + if s >= 0: + return s + + if self._state.backtracking >0: + raise BacktrackingFailed + nvae = NoViableAltException(self_.getDescription(), 91, _s, input) + self_.error(nvae) + raise nvae + # lookup tables for DFA #106 + + DFA106_eot = DFA.unpack( + u"\23\uffff" + ) + + DFA106_eof = DFA.unpack( + u"\23\uffff" + ) + + DFA106_min = DFA.unpack( + u"\1\7\2\uffff\2\0\16\uffff" + ) + + DFA106_max = DFA.unpack( + u"\1\u00aa\2\uffff\2\0\16\uffff" + ) + + DFA106_accept = DFA.unpack( + u"\1\uffff\1\1\3\uffff\1\2\14\uffff\1\3" + ) + + DFA106_special = DFA.unpack( + u"\3\uffff\1\0\1\1\16\uffff" + ) + + + DFA106_transition = [ + DFA.unpack(u"\1\1\4\uffff\1\5\10\uffff\1\5\3\uffff\1\5\1\uffff\1" + u"\5\1\uffff\2\5\3\uffff\1\5\3\uffff\1\5\5\uffff\1\22\12\uffff\1" + u"\3\1\uffff\1\3\2\uffff\1\3\4\uffff\1\3\3\uffff\1\5\1\1\1\uffff" + u"\1\3\6\uffff\2\3\1\uffff\2\5\5\uffff\1\3\2\uffff\1\5\2\uffff\1" + u"\5\3\uffff\1\5\1\uffff\1\5\76\uffff\1\4\6\5"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"") + ] + + # class definition for DFA #106 + + class DFA106(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA106_3 = input.LA(1) + + + index106_3 = input.index() + input.rewind() + s = -1 + if (self.synpred149_Java()): + s = 1 + + elif (self.synpred150_Java()): + s = 5 + + + input.seek(index106_3) + if s >= 0: + return s + elif s == 1: + LA106_4 = input.LA(1) + + + index106_4 = input.index() + input.rewind() + s = -1 + if (self.synpred149_Java()): + s = 1 + + elif (self.synpred150_Java()): + s = 5 + + + input.seek(index106_4) + if s >= 0: + return s + + if self._state.backtracking >0: + raise BacktrackingFailed + nvae = NoViableAltException(self_.getDescription(), 106, _s, input) + self_.error(nvae) + raise nvae + # lookup tables for DFA #130 + + DFA130_eot = DFA.unpack( + u"\15\uffff" + ) + + DFA130_eof = DFA.unpack( + u"\15\uffff" + ) + + DFA130_min = DFA.unpack( + u"\1\31\2\uffff\1\0\11\uffff" + ) + + DFA130_max = DFA.unpack( + u"\1\u00aa\2\uffff\1\0\11\uffff" + ) + + DFA130_accept = DFA.unpack( + u"\1\uffff\1\1\1\2\1\uffff\1\4\7\uffff\1\3" + ) + + DFA130_special = DFA.unpack( + u"\3\uffff\1\0\11\uffff" + ) + + + DFA130_transition = [ + DFA.unpack(u"\1\4\1\uffff\1\2\1\uffff\1\3\4\uffff\1\1\24\uffff\1" + u"\4\1\uffff\1\4\2\uffff\1\4\4\uffff\1\4\3\uffff\1\4\2\uffff\1\4" + u"\6\uffff\2\4\1\uffff\2\4\5\uffff\1\4\2\uffff\1\4\2\uffff\1\4\3" + u"\uffff\1\4\1\uffff\1\4\76\uffff\7\4"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"") + ] + + # class definition for DFA #130 + + class DFA130(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA130_3 = input.LA(1) + + + index130_3 = input.index() + input.rewind() + s = -1 + if (self.synpred193_Java()): + s = 12 + + elif (True): + s = 4 + + + input.seek(index130_3) + if s >= 0: + return s + + if self._state.backtracking >0: + raise BacktrackingFailed + nvae = NoViableAltException(self_.getDescription(), 130, _s, input) + self_.error(nvae) + raise nvae + # lookup tables for DFA #142 + + DFA142_eot = DFA.unpack( + u"\14\uffff" + ) + + DFA142_eof = DFA.unpack( + u"\14\uffff" + ) + + DFA142_min = DFA.unpack( + u"\1\31\6\uffff\1\17\4\uffff" + ) + + DFA142_max = DFA.unpack( + u"\1\u00aa\6\uffff\1\35\4\uffff" + ) + + DFA142_accept = DFA.unpack( + u"\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\uffff\1\11\1\12\1\10\1\7" + ) + + DFA142_special = DFA.unpack( + u"\14\uffff" + ) + + + DFA142_transition = [ + DFA.unpack(u"\1\5\3\uffff\1\1\31\uffff\1\10\1\uffff\1\10\2\uffff" + u"\1\10\4\uffff\1\10\3\uffff\1\2\2\uffff\1\10\6\uffff\2\10\1\uffff" + u"\1\3\1\2\5\uffff\1\10\2\uffff\1\7\2\uffff\1\6\3\uffff\1\2\1\uffff" + u"\1\11\76\uffff\1\4\6\2"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\12\15\uffff\1\13"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"") + ] + + # class definition for DFA #142 + + class DFA142(DFA): + pass + + + # lookup tables for DFA #146 + + DFA146_eot = DFA.unpack( + u"\60\uffff" + ) + + DFA146_eof = DFA.unpack( + u"\1\4\57\uffff" + ) + + DFA146_min = DFA.unpack( + u"\1\4\1\0\1\uffff\1\0\54\uffff" + ) + + DFA146_max = DFA.unpack( + u"\1\114\1\0\1\uffff\1\0\54\uffff" + ) + + DFA146_accept = DFA.unpack( + u"\2\uffff\1\2\1\uffff\1\4\51\uffff\1\1\1\3" + ) + + DFA146_special = DFA.unpack( + u"\1\uffff\1\0\1\uffff\1\1\54\uffff" + ) + + + DFA146_transition = [ + DFA.unpack(u"\3\4\1\uffff\7\4\1\3\2\uffff\4\4\1\1\1\uffff\3\4\1\uffff" + u"\1\4\1\2\4\4\1\uffff\22\4\27\uffff\1\4"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u""), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"") + ] + + # class definition for DFA #146 + + class DFA146(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA146_1 = input.LA(1) + + + index146_1 = input.index() + input.rewind() + s = -1 + if (self.synpred221_Java()): + s = 46 + + elif (True): + s = 4 + + + input.seek(index146_1) + if s >= 0: + return s + elif s == 1: + LA146_3 = input.LA(1) + + + index146_3 = input.index() + input.rewind() + s = -1 + if (self.synpred229_Java()): + s = 47 + + elif (True): + s = 4 + + + input.seek(index146_3) + if s >= 0: + return s + + if self._state.backtracking >0: + raise BacktrackingFailed + nvae = NoViableAltException(self_.getDescription(), 146, _s, input) + self_.error(nvae) + raise nvae + # lookup tables for DFA #153 + + DFA153_eot = DFA.unpack( + u"\56\uffff" + ) + + DFA153_eof = DFA.unpack( + u"\1\2\55\uffff" + ) + + DFA153_min = DFA.unpack( + u"\1\4\1\0\54\uffff" + ) + + DFA153_max = DFA.unpack( + u"\1\114\1\0\54\uffff" + ) + + DFA153_accept = DFA.unpack( + u"\2\uffff\1\2\52\uffff\1\1" + ) + + DFA153_special = DFA.unpack( + u"\1\uffff\1\0\54\uffff" + ) + + + DFA153_transition = [ + DFA.unpack(u"\3\2\1\uffff\10\2\2\uffff\4\2\1\1\1\uffff\3\2\1\uffff" + u"\1\2\1\uffff\4\2\1\uffff\22\2\27\uffff\1\2"), + DFA.unpack(u"\1\uffff"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"") + ] + + # class definition for DFA #153 + + class DFA153(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA153_1 = input.LA(1) + + + index153_1 = input.index() + input.rewind() + s = -1 + if (self.synpred237_Java()): + s = 45 + + elif (True): + s = 2 + + + input.seek(index153_1) + if s >= 0: + return s + + if self._state.backtracking >0: + raise BacktrackingFailed + nvae = NoViableAltException(self_.getDescription(), 153, _s, input) + self_.error(nvae) + raise nvae + + + FOLLOW_compilationUnit_in_javaSource4461 = frozenset([1]) + FOLLOW_annotationList_in_compilationUnit4497 = frozenset([1, 7, 44, 53, 61, 67, 70, 77, 78, 81, 84, 85, 86, 87, 90, 91, 94, 98, 102]) + FOLLOW_packageDeclaration_in_compilationUnit4507 = frozenset([1, 7, 44, 53, 61, 67, 70, 77, 78, 81, 85, 86, 87, 90, 91, 94, 98, 102]) + FOLLOW_importDeclaration_in_compilationUnit4518 = frozenset([1, 7, 44, 53, 61, 67, 70, 77, 78, 81, 85, 86, 87, 90, 91, 94, 98, 102]) + FOLLOW_typeDecls_in_compilationUnit4529 = frozenset([1, 7, 44, 53, 61, 67, 70, 77, 81, 85, 86, 87, 90, 91, 94, 98, 102]) + FOLLOW_typeDeclaration_in_typeDecls4549 = frozenset([1]) + FOLLOW_SEMI_in_typeDecls4559 = frozenset([1]) + FOLLOW_PACKAGE_in_packageDeclaration4579 = frozenset([164]) + FOLLOW_qualifiedIdentifier_in_packageDeclaration4582 = frozenset([44]) + FOLLOW_SEMI_in_packageDeclaration4584 = frozenset([1]) + FOLLOW_IMPORT_in_importDeclaration4604 = frozenset([90, 164]) + FOLLOW_STATIC_in_importDeclaration4607 = frozenset([164]) + FOLLOW_qualifiedIdentifier_in_importDeclaration4610 = frozenset([16, 44]) + FOLLOW_DOTSTAR_in_importDeclaration4612 = frozenset([44]) + FOLLOW_SEMI_in_importDeclaration4615 = frozenset([1]) + FOLLOW_modifierList_in_typeDeclaration4635 = frozenset([7, 53, 61, 67, 70, 77, 81, 85, 86, 87, 90, 91, 94, 98, 102]) + FOLLOW_classTypeDeclaration_in_typeDeclaration4650 = frozenset([1]) + FOLLOW_interfaceTypeDeclaration_in_typeDeclaration4665 = frozenset([1]) + FOLLOW_enumTypeDeclaration_in_typeDeclaration4680 = frozenset([1]) + FOLLOW_annotationTypeDeclaration_in_typeDeclaration4695 = frozenset([1]) + FOLLOW_CLASS_in_classTypeDeclaration4726 = frozenset([164]) + FOLLOW_IDENT_in_classTypeDeclaration4728 = frozenset([23, 25, 68, 75]) + FOLLOW_genericTypeParameterList_in_classTypeDeclaration4730 = frozenset([23, 25, 68, 75]) + FOLLOW_classExtendsClause_in_classTypeDeclaration4733 = frozenset([23, 25, 68, 75]) + FOLLOW_implementsClause_in_classTypeDeclaration4736 = frozenset([23, 25, 68, 75]) + FOLLOW_classBody_in_classTypeDeclaration4739 = frozenset([1]) + FOLLOW_EXTENDS_in_classExtendsClause4802 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_classExtendsClause4804 = frozenset([1]) + FOLLOW_EXTENDS_in_interfaceExtendsClause4841 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_typeList_in_interfaceExtendsClause4843 = frozenset([1]) + FOLLOW_IMPLEMENTS_in_implementsClause4880 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_typeList_in_implementsClause4882 = frozenset([1]) + FOLLOW_LESS_THAN_in_genericTypeParameterList4919 = frozenset([164]) + FOLLOW_genericTypeParameter_in_genericTypeParameterList4921 = frozenset([8, 11, 20, 47]) + FOLLOW_COMMA_in_genericTypeParameterList4924 = frozenset([164]) + FOLLOW_genericTypeParameter_in_genericTypeParameterList4926 = frozenset([8, 11, 20, 47]) + FOLLOW_genericTypeListClosing_in_genericTypeParameterList4930 = frozenset([1]) + FOLLOW_GREATER_THAN_in_genericTypeListClosing5045 = frozenset([1]) + FOLLOW_SHIFT_RIGHT_in_genericTypeListClosing5055 = frozenset([1]) + FOLLOW_BIT_SHIFT_RIGHT_in_genericTypeListClosing5065 = frozenset([1]) + FOLLOW_IDENT_in_genericTypeParameter5093 = frozenset([1, 68]) + FOLLOW_bound_in_genericTypeParameter5095 = frozenset([1]) + FOLLOW_EXTENDS_in_bound5133 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_bound5135 = frozenset([1, 4]) + FOLLOW_AND_in_bound5138 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_bound5140 = frozenset([1, 4]) + FOLLOW_ENUM_in_enumTypeDeclaration5181 = frozenset([164]) + FOLLOW_IDENT_in_enumTypeDeclaration5183 = frozenset([23, 75]) + FOLLOW_implementsClause_in_enumTypeDeclaration5185 = frozenset([23, 75]) + FOLLOW_enumBody_in_enumTypeDeclaration5188 = frozenset([1]) + FOLLOW_LCURLY_in_enumBody5231 = frozenset([7, 53, 70, 81, 85, 86, 87, 90, 91, 94, 98, 102, 164]) + FOLLOW_enumScopeDeclarations_in_enumBody5233 = frozenset([42]) + FOLLOW_RCURLY_in_enumBody5235 = frozenset([1]) + FOLLOW_enumConstants_in_enumScopeDeclarations5272 = frozenset([1, 11, 44]) + FOLLOW_COMMA_in_enumScopeDeclarations5275 = frozenset([1, 44]) + FOLLOW_enumClassScopeDeclarations_in_enumScopeDeclarations5280 = frozenset([1]) + FOLLOW_SEMI_in_enumClassScopeDeclarations5300 = frozenset([1, 7, 23, 25, 44, 53, 55, 57, 60, 61, 65, 67, 70, 72, 77, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 101, 102, 164]) + FOLLOW_classScopeDeclarations_in_enumClassScopeDeclarations5302 = frozenset([1, 7, 23, 25, 44, 53, 55, 57, 60, 61, 65, 67, 70, 72, 77, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 101, 102, 164]) + FOLLOW_enumConstant_in_enumConstants5341 = frozenset([1, 11]) + FOLLOW_COMMA_in_enumConstants5344 = frozenset([7, 53, 70, 81, 85, 86, 87, 90, 91, 94, 98, 102, 164]) + FOLLOW_enumConstant_in_enumConstants5347 = frozenset([1, 11]) + FOLLOW_annotationList_in_enumConstant5368 = frozenset([164]) + FOLLOW_IDENT_in_enumConstant5370 = frozenset([1, 23, 25, 29, 68, 75]) + FOLLOW_arguments_in_enumConstant5373 = frozenset([1, 23, 25, 68, 75]) + FOLLOW_classBody_in_enumConstant5376 = frozenset([1]) + FOLLOW_INTERFACE_in_interfaceTypeDeclaration5397 = frozenset([164]) + FOLLOW_IDENT_in_interfaceTypeDeclaration5399 = frozenset([23, 25, 68]) + FOLLOW_genericTypeParameterList_in_interfaceTypeDeclaration5401 = frozenset([23, 25, 68]) + FOLLOW_interfaceExtendsClause_in_interfaceTypeDeclaration5404 = frozenset([23, 25, 68]) + FOLLOW_interfaceBody_in_interfaceTypeDeclaration5407 = frozenset([1]) + FOLLOW_type_in_typeList5453 = frozenset([1, 11]) + FOLLOW_COMMA_in_typeList5456 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_typeList5459 = frozenset([1, 11]) + FOLLOW_LCURLY_in_classBody5480 = frozenset([7, 23, 25, 42, 44, 53, 55, 57, 60, 61, 65, 67, 70, 72, 77, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 101, 102, 164]) + FOLLOW_classScopeDeclarations_in_classBody5482 = frozenset([7, 23, 25, 42, 44, 53, 55, 57, 60, 61, 65, 67, 70, 72, 77, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 101, 102, 164]) + FOLLOW_RCURLY_in_classBody5485 = frozenset([1]) + FOLLOW_LCURLY_in_interfaceBody5523 = frozenset([7, 25, 42, 44, 53, 55, 57, 60, 61, 65, 67, 70, 72, 77, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 101, 102, 164]) + FOLLOW_interfaceScopeDeclarations_in_interfaceBody5525 = frozenset([7, 25, 42, 44, 53, 55, 57, 60, 61, 65, 67, 70, 72, 77, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 101, 102, 164]) + FOLLOW_RCURLY_in_interfaceBody5528 = frozenset([1]) + FOLLOW_block_in_classScopeDeclarations5566 = frozenset([1]) + FOLLOW_STATIC_in_classScopeDeclarations5595 = frozenset([23]) + FOLLOW_block_in_classScopeDeclarations5597 = frozenset([1]) + FOLLOW_modifierList_in_classScopeDeclarations5620 = frozenset([25, 55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_genericTypeParameterList_in_classScopeDeclarations5634 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_type_in_classScopeDeclarations5653 = frozenset([164]) + FOLLOW_IDENT_in_classScopeDeclarations5655 = frozenset([29]) + FOLLOW_formalParameterList_in_classScopeDeclarations5657 = frozenset([22, 23, 44, 97]) + FOLLOW_arrayDeclaratorList_in_classScopeDeclarations5659 = frozenset([23, 44, 97]) + FOLLOW_throwsClause_in_classScopeDeclarations5662 = frozenset([23, 44]) + FOLLOW_block_in_classScopeDeclarations5666 = frozenset([1]) + FOLLOW_SEMI_in_classScopeDeclarations5670 = frozenset([1]) + FOLLOW_VOID_in_classScopeDeclarations5732 = frozenset([164]) + FOLLOW_IDENT_in_classScopeDeclarations5734 = frozenset([29]) + FOLLOW_formalParameterList_in_classScopeDeclarations5736 = frozenset([23, 44, 97]) + FOLLOW_throwsClause_in_classScopeDeclarations5738 = frozenset([23, 44]) + FOLLOW_block_in_classScopeDeclarations5742 = frozenset([1]) + FOLLOW_SEMI_in_classScopeDeclarations5746 = frozenset([1]) + FOLLOW_IDENT_in_classScopeDeclarations5805 = frozenset([29]) + FOLLOW_formalParameterList_in_classScopeDeclarations5807 = frozenset([23, 97]) + FOLLOW_throwsClause_in_classScopeDeclarations5809 = frozenset([23]) + FOLLOW_block_in_classScopeDeclarations5812 = frozenset([1]) + FOLLOW_type_in_classScopeDeclarations5876 = frozenset([164]) + FOLLOW_classFieldDeclaratorList_in_classScopeDeclarations5878 = frozenset([44]) + FOLLOW_SEMI_in_classScopeDeclarations5880 = frozenset([1]) + FOLLOW_typeDeclaration_in_classScopeDeclarations5925 = frozenset([1]) + FOLLOW_SEMI_in_classScopeDeclarations5935 = frozenset([1]) + FOLLOW_modifierList_in_interfaceScopeDeclarations5955 = frozenset([25, 55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_genericTypeParameterList_in_interfaceScopeDeclarations5969 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_type_in_interfaceScopeDeclarations5988 = frozenset([164]) + FOLLOW_IDENT_in_interfaceScopeDeclarations5990 = frozenset([29]) + FOLLOW_formalParameterList_in_interfaceScopeDeclarations5992 = frozenset([22, 44, 97]) + FOLLOW_arrayDeclaratorList_in_interfaceScopeDeclarations5994 = frozenset([44, 97]) + FOLLOW_throwsClause_in_interfaceScopeDeclarations5997 = frozenset([44]) + FOLLOW_SEMI_in_interfaceScopeDeclarations6000 = frozenset([1]) + FOLLOW_VOID_in_interfaceScopeDeclarations6058 = frozenset([164]) + FOLLOW_IDENT_in_interfaceScopeDeclarations6060 = frozenset([29]) + FOLLOW_formalParameterList_in_interfaceScopeDeclarations6062 = frozenset([44, 97]) + FOLLOW_throwsClause_in_interfaceScopeDeclarations6064 = frozenset([44]) + FOLLOW_SEMI_in_interfaceScopeDeclarations6067 = frozenset([1]) + FOLLOW_type_in_interfaceScopeDeclarations6130 = frozenset([164]) + FOLLOW_interfaceFieldDeclaratorList_in_interfaceScopeDeclarations6132 = frozenset([44]) + FOLLOW_SEMI_in_interfaceScopeDeclarations6134 = frozenset([1]) + FOLLOW_typeDeclaration_in_interfaceScopeDeclarations6179 = frozenset([1]) + FOLLOW_SEMI_in_interfaceScopeDeclarations6189 = frozenset([1]) + FOLLOW_classFieldDeclarator_in_classFieldDeclaratorList6209 = frozenset([1, 11]) + FOLLOW_COMMA_in_classFieldDeclaratorList6212 = frozenset([164]) + FOLLOW_classFieldDeclarator_in_classFieldDeclaratorList6214 = frozenset([1, 11]) + FOLLOW_variableDeclaratorId_in_classFieldDeclarator6253 = frozenset([1, 6]) + FOLLOW_ASSIGN_in_classFieldDeclarator6256 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_variableInitializer_in_classFieldDeclarator6258 = frozenset([1]) + FOLLOW_interfaceFieldDeclarator_in_interfaceFieldDeclaratorList6299 = frozenset([1, 11]) + FOLLOW_COMMA_in_interfaceFieldDeclaratorList6302 = frozenset([164]) + FOLLOW_interfaceFieldDeclarator_in_interfaceFieldDeclaratorList6304 = frozenset([1, 11]) + FOLLOW_variableDeclaratorId_in_interfaceFieldDeclarator6343 = frozenset([6]) + FOLLOW_ASSIGN_in_interfaceFieldDeclarator6345 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_variableInitializer_in_interfaceFieldDeclarator6347 = frozenset([1]) + FOLLOW_IDENT_in_variableDeclaratorId6385 = frozenset([1, 22]) + FOLLOW_arrayDeclaratorList_in_variableDeclaratorId6388 = frozenset([1]) + FOLLOW_arrayInitializer_in_variableInitializer6408 = frozenset([1]) + FOLLOW_expression_in_variableInitializer6418 = frozenset([1]) + FOLLOW_LBRACK_in_arrayDeclarator6437 = frozenset([41]) + FOLLOW_RBRACK_in_arrayDeclarator6439 = frozenset([1]) + FOLLOW_arrayDeclarator_in_arrayDeclaratorList6473 = frozenset([1, 22]) + FOLLOW_LCURLY_in_arrayInitializer6511 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 42, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_variableInitializer_in_arrayInitializer6514 = frozenset([11, 42]) + FOLLOW_COMMA_in_arrayInitializer6517 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_variableInitializer_in_arrayInitializer6519 = frozenset([11, 42]) + FOLLOW_COMMA_in_arrayInitializer6523 = frozenset([42]) + FOLLOW_RCURLY_in_arrayInitializer6528 = frozenset([1]) + FOLLOW_THROWS_in_throwsClause6566 = frozenset([164]) + FOLLOW_qualifiedIdentList_in_throwsClause6568 = frozenset([1]) + FOLLOW_modifier_in_modifierList6605 = frozenset([1, 7, 53, 70, 81, 85, 86, 87, 90, 91, 94, 98, 102]) + FOLLOW_PUBLIC_in_modifier6643 = frozenset([1]) + FOLLOW_PROTECTED_in_modifier6653 = frozenset([1]) + FOLLOW_PRIVATE_in_modifier6663 = frozenset([1]) + FOLLOW_STATIC_in_modifier6673 = frozenset([1]) + FOLLOW_ABSTRACT_in_modifier6683 = frozenset([1]) + FOLLOW_NATIVE_in_modifier6693 = frozenset([1]) + FOLLOW_SYNCHRONIZED_in_modifier6703 = frozenset([1]) + FOLLOW_TRANSIENT_in_modifier6713 = frozenset([1]) + FOLLOW_VOLATILE_in_modifier6723 = frozenset([1]) + FOLLOW_STRICTFP_in_modifier6733 = frozenset([1]) + FOLLOW_localModifier_in_modifier6743 = frozenset([1]) + FOLLOW_localModifier_in_localModifierList6762 = frozenset([1, 7, 53, 70, 81, 85, 86, 87, 90, 91, 94, 98, 102]) + FOLLOW_FINAL_in_localModifier6799 = frozenset([1]) + FOLLOW_annotation_in_localModifier6809 = frozenset([1]) + FOLLOW_simpleType_in_type6828 = frozenset([1]) + FOLLOW_objectType_in_type6838 = frozenset([1]) + FOLLOW_primitiveType_in_simpleType6858 = frozenset([1, 22]) + FOLLOW_arrayDeclaratorList_in_simpleType6860 = frozenset([1]) + FOLLOW_qualifiedTypeIdent_in_objectType6901 = frozenset([1, 22]) + FOLLOW_arrayDeclaratorList_in_objectType6903 = frozenset([1]) + FOLLOW_qualifiedTypeIdentSimplified_in_objectTypeSimplified6943 = frozenset([1, 22]) + FOLLOW_arrayDeclaratorList_in_objectTypeSimplified6945 = frozenset([1]) + FOLLOW_typeIdent_in_qualifiedTypeIdent6985 = frozenset([1, 15]) + FOLLOW_DOT_in_qualifiedTypeIdent6988 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_typeIdent_in_qualifiedTypeIdent6990 = frozenset([1, 15]) + FOLLOW_typeIdentSimplified_in_qualifiedTypeIdentSimplified7029 = frozenset([1, 15]) + FOLLOW_DOT_in_qualifiedTypeIdentSimplified7032 = frozenset([164]) + FOLLOW_typeIdentSimplified_in_qualifiedTypeIdentSimplified7034 = frozenset([1, 15]) + FOLLOW_IDENT_in_typeIdent7073 = frozenset([1, 25]) + FOLLOW_genericTypeArgumentList_in_typeIdent7076 = frozenset([1]) + FOLLOW_IDENT_in_typeIdentSimplified7096 = frozenset([1, 25]) + FOLLOW_genericTypeArgumentListSimplified_in_typeIdentSimplified7099 = frozenset([1]) + FOLLOW_set_in_primitiveType0 = frozenset([1]) + FOLLOW_LESS_THAN_in_genericTypeArgumentList7208 = frozenset([40, 55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_genericTypeArgument_in_genericTypeArgumentList7210 = frozenset([8, 11, 20, 47]) + FOLLOW_COMMA_in_genericTypeArgumentList7213 = frozenset([40, 55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_genericTypeArgument_in_genericTypeArgumentList7215 = frozenset([8, 11, 20, 47]) + FOLLOW_genericTypeListClosing_in_genericTypeArgumentList7219 = frozenset([1]) + FOLLOW_type_in_genericTypeArgument7257 = frozenset([1]) + FOLLOW_QUESTION_in_genericTypeArgument7267 = frozenset([1, 68, 92]) + FOLLOW_genericWildcardBoundType_in_genericTypeArgument7269 = frozenset([1]) + FOLLOW_set_in_genericWildcardBoundType7307 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_genericWildcardBoundType7316 = frozenset([1]) + FOLLOW_LESS_THAN_in_genericTypeArgumentListSimplified7335 = frozenset([40, 55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_genericTypeArgumentSimplified_in_genericTypeArgumentListSimplified7337 = frozenset([8, 11, 20, 47]) + FOLLOW_COMMA_in_genericTypeArgumentListSimplified7340 = frozenset([40, 55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_genericTypeArgumentSimplified_in_genericTypeArgumentListSimplified7342 = frozenset([8, 11, 20, 47]) + FOLLOW_genericTypeListClosing_in_genericTypeArgumentListSimplified7346 = frozenset([1]) + FOLLOW_type_in_genericTypeArgumentSimplified7384 = frozenset([1]) + FOLLOW_QUESTION_in_genericTypeArgumentSimplified7394 = frozenset([1]) + FOLLOW_qualifiedIdentifier_in_qualifiedIdentList7413 = frozenset([1, 11]) + FOLLOW_COMMA_in_qualifiedIdentList7416 = frozenset([164]) + FOLLOW_qualifiedIdentifier_in_qualifiedIdentList7419 = frozenset([1, 11]) + FOLLOW_LPAREN_in_formalParameterList7440 = frozenset([7, 43, 53, 55, 57, 60, 65, 70, 72, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 102, 164]) + FOLLOW_formalParameterStandardDecl_in_formalParameterList7467 = frozenset([11, 43]) + FOLLOW_COMMA_in_formalParameterList7470 = frozenset([7, 53, 55, 57, 60, 65, 70, 72, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 102, 164]) + FOLLOW_formalParameterStandardDecl_in_formalParameterList7472 = frozenset([11, 43]) + FOLLOW_COMMA_in_formalParameterList7477 = frozenset([7, 53, 55, 57, 60, 65, 70, 72, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 102, 164]) + FOLLOW_formalParameterVarArgDecl_in_formalParameterList7479 = frozenset([43]) + FOLLOW_formalParameterVarArgDecl_in_formalParameterList7534 = frozenset([43]) + FOLLOW_RPAREN_in_formalParameterList7609 = frozenset([1]) + FOLLOW_localModifierList_in_formalParameterStandardDecl7628 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_formalParameterStandardDecl7630 = frozenset([164]) + FOLLOW_variableDeclaratorId_in_formalParameterStandardDecl7632 = frozenset([1]) + FOLLOW_localModifierList_in_formalParameterVarArgDecl7672 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_formalParameterVarArgDecl7674 = frozenset([17]) + FOLLOW_ELLIPSIS_in_formalParameterVarArgDecl7676 = frozenset([164]) + FOLLOW_variableDeclaratorId_in_formalParameterVarArgDecl7678 = frozenset([1]) + FOLLOW_IDENT_in_qualifiedIdentifier7722 = frozenset([1, 15]) + FOLLOW_DOT_in_qualifiedIdentifier7765 = frozenset([164]) + FOLLOW_IDENT_in_qualifiedIdentifier7769 = frozenset([1, 15]) + FOLLOW_annotation_in_annotationList7818 = frozenset([1, 7, 53, 70, 81, 85, 86, 87, 90, 91, 94, 98, 102]) + FOLLOW_AT_in_annotation7856 = frozenset([164]) + FOLLOW_qualifiedIdentifier_in_annotation7859 = frozenset([1, 29]) + FOLLOW_annotationInit_in_annotation7861 = frozenset([1]) + FOLLOW_LPAREN_in_annotationInit7881 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 53, 55, 57, 60, 65, 69, 70, 72, 79, 80, 81, 82, 83, 85, 86, 87, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_annotationInitializers_in_annotationInit7883 = frozenset([43]) + FOLLOW_RPAREN_in_annotationInit7885 = frozenset([1]) + FOLLOW_annotationInitializer_in_annotationInitializers7922 = frozenset([1, 11]) + FOLLOW_COMMA_in_annotationInitializers7925 = frozenset([164]) + FOLLOW_annotationInitializer_in_annotationInitializers7927 = frozenset([1, 11]) + FOLLOW_annotationElementValue_in_annotationInitializers7957 = frozenset([1]) + FOLLOW_IDENT_in_annotationInitializer7994 = frozenset([6]) + FOLLOW_ASSIGN_in_annotationInitializer7997 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 53, 55, 57, 60, 65, 69, 70, 72, 79, 80, 81, 82, 83, 85, 86, 87, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_annotationElementValue_in_annotationInitializer8000 = frozenset([1]) + FOLLOW_annotationElementValueExpression_in_annotationElementValue8019 = frozenset([1]) + FOLLOW_annotation_in_annotationElementValue8029 = frozenset([1]) + FOLLOW_annotationElementValueArrayInitializer_in_annotationElementValue8039 = frozenset([1]) + FOLLOW_conditionalExpression_in_annotationElementValueExpression8058 = frozenset([1]) + FOLLOW_LCURLY_in_annotationElementValueArrayInitializer8094 = frozenset([7, 11, 12, 21, 23, 25, 27, 29, 30, 34, 38, 42, 53, 55, 57, 60, 65, 69, 70, 72, 79, 80, 81, 82, 83, 85, 86, 87, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_annotationElementValue_in_annotationElementValueArrayInitializer8097 = frozenset([11, 42]) + FOLLOW_COMMA_in_annotationElementValueArrayInitializer8100 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 53, 55, 57, 60, 65, 69, 70, 72, 79, 80, 81, 82, 83, 85, 86, 87, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_annotationElementValue_in_annotationElementValueArrayInitializer8102 = frozenset([11, 42]) + FOLLOW_COMMA_in_annotationElementValueArrayInitializer8109 = frozenset([42]) + FOLLOW_RCURLY_in_annotationElementValueArrayInitializer8113 = frozenset([1]) + FOLLOW_AT_in_annotationTypeDeclaration8152 = frozenset([77]) + FOLLOW_INTERFACE_in_annotationTypeDeclaration8154 = frozenset([164]) + FOLLOW_IDENT_in_annotationTypeDeclaration8156 = frozenset([23]) + FOLLOW_annotationBody_in_annotationTypeDeclaration8158 = frozenset([1]) + FOLLOW_LCURLY_in_annotationBody8197 = frozenset([7, 42, 53, 55, 57, 60, 61, 65, 67, 70, 72, 77, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 102, 164]) + FOLLOW_annotationScopeDeclarations_in_annotationBody8199 = frozenset([7, 42, 53, 55, 57, 60, 61, 65, 67, 70, 72, 77, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 102, 164]) + FOLLOW_RCURLY_in_annotationBody8202 = frozenset([1]) + FOLLOW_modifierList_in_annotationScopeDeclarations8240 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_annotationScopeDeclarations8242 = frozenset([164]) + FOLLOW_IDENT_in_annotationScopeDeclarations8256 = frozenset([29]) + FOLLOW_LPAREN_in_annotationScopeDeclarations8258 = frozenset([43]) + FOLLOW_RPAREN_in_annotationScopeDeclarations8260 = frozenset([44, 63]) + FOLLOW_annotationDefaultValue_in_annotationScopeDeclarations8262 = frozenset([44]) + FOLLOW_SEMI_in_annotationScopeDeclarations8265 = frozenset([1]) + FOLLOW_classFieldDeclaratorList_in_annotationScopeDeclarations8307 = frozenset([44]) + FOLLOW_SEMI_in_annotationScopeDeclarations8309 = frozenset([1]) + FOLLOW_typeDeclaration_in_annotationScopeDeclarations8354 = frozenset([1]) + FOLLOW_DEFAULT_in_annotationDefaultValue8373 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 53, 55, 57, 60, 65, 69, 70, 72, 79, 80, 81, 82, 83, 85, 86, 87, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_annotationElementValue_in_annotationDefaultValue8376 = frozenset([1]) + FOLLOW_LCURLY_in_block8397 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 42, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_blockStatement_in_block8399 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 42, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_RCURLY_in_block8402 = frozenset([1]) + FOLLOW_localVariableDeclaration_in_blockStatement8440 = frozenset([44]) + FOLLOW_SEMI_in_blockStatement8442 = frozenset([1]) + FOLLOW_typeDeclaration_in_blockStatement8453 = frozenset([1]) + FOLLOW_statement_in_blockStatement8463 = frozenset([1]) + FOLLOW_localModifierList_in_localVariableDeclaration8482 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_localVariableDeclaration8484 = frozenset([164]) + FOLLOW_classFieldDeclaratorList_in_localVariableDeclaration8486 = frozenset([1]) + FOLLOW_block_in_statement8527 = frozenset([1]) + FOLLOW_ASSERT_in_statement8537 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_statement8541 = frozenset([10, 44]) + FOLLOW_COLON_in_statement8555 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_statement8559 = frozenset([44]) + FOLLOW_SEMI_in_statement8561 = frozenset([1]) + FOLLOW_SEMI_in_statement8624 = frozenset([1]) + FOLLOW_IF_in_statement8713 = frozenset([29]) + FOLLOW_parenthesizedExpression_in_statement8715 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_statement_in_statement8719 = frozenset([1, 66]) + FOLLOW_ELSE_in_statement8733 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_statement_in_statement8737 = frozenset([1]) + FOLLOW_FOR_in_statement8900 = frozenset([29]) + FOLLOW_LPAREN_in_statement8902 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 55, 57, 60, 65, 69, 70, 72, 79, 80, 81, 82, 83, 85, 86, 87, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_forInit_in_statement8916 = frozenset([44]) + FOLLOW_SEMI_in_statement8918 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_forCondition_in_statement8920 = frozenset([44]) + FOLLOW_SEMI_in_statement8922 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 43, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_forUpdater_in_statement8924 = frozenset([43]) + FOLLOW_RPAREN_in_statement8926 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_statement_in_statement8928 = frozenset([1]) + FOLLOW_localModifierList_in_statement8962 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_statement8964 = frozenset([164]) + FOLLOW_IDENT_in_statement8966 = frozenset([10]) + FOLLOW_COLON_in_statement8968 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_statement8970 = frozenset([43]) + FOLLOW_RPAREN_in_statement8972 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_statement_in_statement8974 = frozenset([1]) + FOLLOW_WHILE_in_statement9088 = frozenset([29]) + FOLLOW_parenthesizedExpression_in_statement9090 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_statement_in_statement9092 = frozenset([1]) + FOLLOW_DO_in_statement9141 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_statement_in_statement9143 = frozenset([103]) + FOLLOW_WHILE_in_statement9145 = frozenset([29]) + FOLLOW_parenthesizedExpression_in_statement9147 = frozenset([44]) + FOLLOW_SEMI_in_statement9149 = frozenset([1]) + FOLLOW_TRY_in_statement9190 = frozenset([23]) + FOLLOW_block_in_statement9192 = frozenset([59, 71]) + FOLLOW_catches_in_statement9195 = frozenset([1, 59, 71]) + FOLLOW_finallyClause_in_statement9197 = frozenset([1]) + FOLLOW_finallyClause_in_statement9202 = frozenset([1]) + FOLLOW_SWITCH_in_statement9245 = frozenset([29]) + FOLLOW_parenthesizedExpression_in_statement9247 = frozenset([23]) + FOLLOW_LCURLY_in_statement9249 = frozenset([42, 58, 63]) + FOLLOW_switchBlockLabels_in_statement9251 = frozenset([42]) + FOLLOW_RCURLY_in_statement9254 = frozenset([1]) + FOLLOW_SYNCHRONIZED_in_statement9281 = frozenset([29]) + FOLLOW_parenthesizedExpression_in_statement9283 = frozenset([23]) + FOLLOW_block_in_statement9285 = frozenset([1]) + FOLLOW_RETURN_in_statement9331 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_statement9333 = frozenset([44]) + FOLLOW_SEMI_in_statement9336 = frozenset([1]) + FOLLOW_THROW_in_statement9400 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_statement9402 = frozenset([44]) + FOLLOW_SEMI_in_statement9404 = frozenset([1]) + FOLLOW_BREAK_in_statement9469 = frozenset([44, 164]) + FOLLOW_IDENT_in_statement9471 = frozenset([44]) + FOLLOW_SEMI_in_statement9474 = frozenset([1]) + FOLLOW_CONTINUE_in_statement9544 = frozenset([44, 164]) + FOLLOW_IDENT_in_statement9546 = frozenset([44]) + FOLLOW_SEMI_in_statement9549 = frozenset([1]) + FOLLOW_IDENT_in_statement9616 = frozenset([10]) + FOLLOW_COLON_in_statement9618 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_statement_in_statement9620 = frozenset([1]) + FOLLOW_expression_in_statement9687 = frozenset([44]) + FOLLOW_SEMI_in_statement9689 = frozenset([1]) + FOLLOW_SEMI_in_statement9700 = frozenset([1]) + FOLLOW_catchClause_in_catches9720 = frozenset([1, 59]) + FOLLOW_CATCH_in_catchClause9758 = frozenset([29]) + FOLLOW_LPAREN_in_catchClause9761 = frozenset([7, 53, 55, 57, 60, 65, 70, 72, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 102, 164]) + FOLLOW_formalParameterStandardDecl_in_catchClause9764 = frozenset([43]) + FOLLOW_RPAREN_in_catchClause9766 = frozenset([23]) + FOLLOW_block_in_catchClause9769 = frozenset([1]) + FOLLOW_FINALLY_in_finallyClause9788 = frozenset([23]) + FOLLOW_block_in_finallyClause9790 = frozenset([1]) + FOLLOW_switchCaseLabels_in_switchBlockLabels9839 = frozenset([58, 63]) + FOLLOW_switchDefaultLabel_in_switchBlockLabels9842 = frozenset([58]) + FOLLOW_switchCaseLabels_in_switchBlockLabels9847 = frozenset([1]) + FOLLOW_switchCaseLabel_in_switchCaseLabels9893 = frozenset([1, 58]) + FOLLOW_CASE_in_switchCaseLabel9913 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_switchCaseLabel9916 = frozenset([10]) + FOLLOW_COLON_in_switchCaseLabel9918 = frozenset([1, 7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_blockStatement_in_switchCaseLabel9921 = frozenset([1, 7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_DEFAULT_in_switchDefaultLabel9941 = frozenset([10]) + FOLLOW_COLON_in_switchDefaultLabel9944 = frozenset([1, 7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_blockStatement_in_switchDefaultLabel9947 = frozenset([1, 7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_localVariableDeclaration_in_forInit9967 = frozenset([1]) + FOLLOW_expressionList_in_forInit9989 = frozenset([1]) + FOLLOW_expression_in_forCondition10073 = frozenset([1]) + FOLLOW_expressionList_in_forUpdater10111 = frozenset([1]) + FOLLOW_LPAREN_in_parenthesizedExpression10151 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_parenthesizedExpression10153 = frozenset([43]) + FOLLOW_RPAREN_in_parenthesizedExpression10155 = frozenset([1]) + FOLLOW_expression_in_expressionList10192 = frozenset([1, 11]) + FOLLOW_COMMA_in_expressionList10195 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_expressionList10198 = frozenset([1, 11]) + FOLLOW_assignmentExpression_in_expression10219 = frozenset([1]) + FOLLOW_conditionalExpression_in_assignmentExpression10255 = frozenset([1, 5, 6, 9, 14, 31, 33, 37, 39, 46, 48, 50, 52]) + FOLLOW_ASSIGN_in_assignmentExpression10273 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_PLUS_ASSIGN_in_assignmentExpression10292 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_MINUS_ASSIGN_in_assignmentExpression10311 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_STAR_ASSIGN_in_assignmentExpression10330 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_DIV_ASSIGN_in_assignmentExpression10349 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_AND_ASSIGN_in_assignmentExpression10368 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_OR_ASSIGN_in_assignmentExpression10387 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_XOR_ASSIGN_in_assignmentExpression10406 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_MOD_ASSIGN_in_assignmentExpression10425 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_SHIFT_LEFT_ASSIGN_in_assignmentExpression10444 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_SHIFT_RIGHT_ASSIGN_in_assignmentExpression10463 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_BIT_SHIFT_RIGHT_ASSIGN_in_assignmentExpression10482 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_assignmentExpression_in_assignmentExpression10503 = frozenset([1]) + FOLLOW_logicalOrExpression_in_conditionalExpression10524 = frozenset([1, 40]) + FOLLOW_QUESTION_in_conditionalExpression10527 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_assignmentExpression_in_conditionalExpression10530 = frozenset([10]) + FOLLOW_COLON_in_conditionalExpression10532 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_conditionalExpression_in_conditionalExpression10535 = frozenset([1]) + FOLLOW_logicalAndExpression_in_logicalOrExpression10556 = frozenset([1, 28]) + FOLLOW_LOGICAL_OR_in_logicalOrExpression10559 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_logicalAndExpression_in_logicalOrExpression10562 = frozenset([1, 28]) + FOLLOW_inclusiveOrExpression_in_logicalAndExpression10583 = frozenset([1, 26]) + FOLLOW_LOGICAL_AND_in_logicalAndExpression10586 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_inclusiveOrExpression_in_logicalAndExpression10589 = frozenset([1, 26]) + FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression10610 = frozenset([1, 36]) + FOLLOW_OR_in_inclusiveOrExpression10613 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression10616 = frozenset([1, 36]) + FOLLOW_andExpression_in_exclusiveOrExpression10637 = frozenset([1, 51]) + FOLLOW_XOR_in_exclusiveOrExpression10640 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_andExpression_in_exclusiveOrExpression10643 = frozenset([1, 51]) + FOLLOW_equalityExpression_in_andExpression10664 = frozenset([1, 4]) + FOLLOW_AND_in_andExpression10667 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_equalityExpression_in_andExpression10670 = frozenset([1, 4]) + FOLLOW_instanceOfExpression_in_equalityExpression10691 = frozenset([1, 18, 35]) + FOLLOW_EQUAL_in_equalityExpression10709 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_NOT_EQUAL_in_equalityExpression10728 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_instanceOfExpression_in_equalityExpression10757 = frozenset([1, 18, 35]) + FOLLOW_relationalExpression_in_instanceOfExpression10787 = frozenset([1, 76]) + FOLLOW_INSTANCEOF_in_instanceOfExpression10790 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_instanceOfExpression10793 = frozenset([1]) + FOLLOW_shiftExpression_in_relationalExpression10814 = frozenset([1, 19, 20, 24, 25]) + FOLLOW_LESS_OR_EQUAL_in_relationalExpression10832 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_GREATER_OR_EQUAL_in_relationalExpression10851 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_LESS_THAN_in_relationalExpression10870 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_GREATER_THAN_in_relationalExpression10889 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_shiftExpression_in_relationalExpression10918 = frozenset([1, 19, 20, 24, 25]) + FOLLOW_additiveExpression_in_shiftExpression10948 = frozenset([1, 8, 45, 47]) + FOLLOW_BIT_SHIFT_RIGHT_in_shiftExpression10966 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_SHIFT_RIGHT_in_shiftExpression10985 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_SHIFT_LEFT_in_shiftExpression11004 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_additiveExpression_in_shiftExpression11033 = frozenset([1, 8, 45, 47]) + FOLLOW_multiplicativeExpression_in_additiveExpression11063 = frozenset([1, 30, 38]) + FOLLOW_PLUS_in_additiveExpression11081 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_MINUS_in_additiveExpression11100 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_multiplicativeExpression_in_additiveExpression11129 = frozenset([1, 30, 38]) + FOLLOW_unaryExpression_in_multiplicativeExpression11159 = frozenset([1, 13, 32, 49]) + FOLLOW_STAR_in_multiplicativeExpression11177 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_DIV_in_multiplicativeExpression11196 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_MOD_in_multiplicativeExpression11215 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_unaryExpression_in_multiplicativeExpression11244 = frozenset([1, 13, 32, 49]) + FOLLOW_PLUS_in_unaryExpression11274 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_unaryExpression_in_unaryExpression11276 = frozenset([1]) + FOLLOW_MINUS_in_unaryExpression11303 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_unaryExpression_in_unaryExpression11305 = frozenset([1]) + FOLLOW_INC_in_unaryExpression11331 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_postfixedExpression_in_unaryExpression11333 = frozenset([1]) + FOLLOW_DEC_in_unaryExpression11357 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_postfixedExpression_in_unaryExpression11359 = frozenset([1]) + FOLLOW_unaryExpressionNotPlusMinus_in_unaryExpression11383 = frozenset([1]) + FOLLOW_NOT_in_unaryExpressionNotPlusMinus11402 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus11404 = frozenset([1]) + FOLLOW_LOGICAL_NOT_in_unaryExpressionNotPlusMinus11451 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus11453 = frozenset([1]) + FOLLOW_LPAREN_in_unaryExpressionNotPlusMinus11492 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_unaryExpressionNotPlusMinus11494 = frozenset([43]) + FOLLOW_RPAREN_in_unaryExpressionNotPlusMinus11496 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus11498 = frozenset([1]) + FOLLOW_postfixedExpression_in_unaryExpressionNotPlusMinus11533 = frozenset([1]) + FOLLOW_primaryExpression_in_postfixedExpression11565 = frozenset([1, 12, 15, 21, 22]) + FOLLOW_DOT_in_postfixedExpression11627 = frozenset([25, 82, 92, 95, 164]) + FOLLOW_genericTypeArgumentListSimplified_in_postfixedExpression11649 = frozenset([164]) + FOLLOW_IDENT_in_postfixedExpression11731 = frozenset([1, 12, 15, 21, 22, 29]) + FOLLOW_arguments_in_postfixedExpression11809 = frozenset([1, 12, 15, 21, 22]) + FOLLOW_THIS_in_postfixedExpression11883 = frozenset([1, 12, 15, 21, 22]) + FOLLOW_SUPER_in_postfixedExpression11946 = frozenset([29]) + FOLLOW_arguments_in_postfixedExpression11948 = frozenset([1, 12, 15, 21, 22]) + FOLLOW_SUPER_in_postfixedExpression12001 = frozenset([15]) + FOLLOW_DOT_in_postfixedExpression12005 = frozenset([164]) + FOLLOW_IDENT_in_postfixedExpression12007 = frozenset([1, 12, 15, 21, 22, 29]) + FOLLOW_arguments_in_postfixedExpression12074 = frozenset([1, 12, 15, 21, 22]) + FOLLOW_innerNewExpression_in_postfixedExpression12145 = frozenset([1, 12, 15, 21, 22]) + FOLLOW_LBRACK_in_postfixedExpression12202 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_postfixedExpression12204 = frozenset([41]) + FOLLOW_RBRACK_in_postfixedExpression12206 = frozenset([1, 12, 15, 21, 22]) + FOLLOW_INC_in_postfixedExpression12267 = frozenset([1]) + FOLLOW_DEC_in_postfixedExpression12291 = frozenset([1]) + FOLLOW_parenthesizedExpression_in_primaryExpression12331 = frozenset([1]) + FOLLOW_literal_in_primaryExpression12341 = frozenset([1]) + FOLLOW_newExpression_in_primaryExpression12351 = frozenset([1]) + FOLLOW_qualifiedIdentExpression_in_primaryExpression12361 = frozenset([1]) + FOLLOW_genericTypeArgumentListSimplified_in_primaryExpression12371 = frozenset([92, 95, 164]) + FOLLOW_SUPER_in_primaryExpression12385 = frozenset([15, 29]) + FOLLOW_arguments_in_primaryExpression12403 = frozenset([1]) + FOLLOW_DOT_in_primaryExpression12463 = frozenset([164]) + FOLLOW_IDENT_in_primaryExpression12465 = frozenset([29]) + FOLLOW_arguments_in_primaryExpression12467 = frozenset([1]) + FOLLOW_IDENT_in_primaryExpression12534 = frozenset([29]) + FOLLOW_arguments_in_primaryExpression12536 = frozenset([1]) + FOLLOW_THIS_in_primaryExpression12591 = frozenset([29]) + FOLLOW_arguments_in_primaryExpression12593 = frozenset([1]) + FOLLOW_THIS_in_primaryExpression12658 = frozenset([1, 29]) + FOLLOW_arguments_in_primaryExpression12726 = frozenset([1]) + FOLLOW_SUPER_in_primaryExpression12791 = frozenset([29]) + FOLLOW_arguments_in_primaryExpression12793 = frozenset([1]) + FOLLOW_SUPER_in_primaryExpression12849 = frozenset([15]) + FOLLOW_DOT_in_primaryExpression12851 = frozenset([164]) + FOLLOW_IDENT_in_primaryExpression12853 = frozenset([1, 29]) + FOLLOW_arguments_in_primaryExpression12877 = frozenset([1]) + FOLLOW_primitiveType_in_primaryExpression13019 = frozenset([15, 22]) + FOLLOW_arrayDeclarator_in_primaryExpression13078 = frozenset([15, 22]) + FOLLOW_DOT_in_primaryExpression13137 = frozenset([61]) + FOLLOW_CLASS_in_primaryExpression13139 = frozenset([1]) + FOLLOW_VOID_in_primaryExpression13199 = frozenset([15]) + FOLLOW_DOT_in_primaryExpression13201 = frozenset([61]) + FOLLOW_CLASS_in_primaryExpression13203 = frozenset([1]) + FOLLOW_qualifiedIdentifier_in_qualifiedIdentExpression13279 = frozenset([1, 15, 22, 29]) + FOLLOW_arrayDeclarator_in_qualifiedIdentExpression13349 = frozenset([15, 22]) + FOLLOW_DOT_in_qualifiedIdentExpression13416 = frozenset([61]) + FOLLOW_CLASS_in_qualifiedIdentExpression13418 = frozenset([1]) + FOLLOW_arguments_in_qualifiedIdentExpression13488 = frozenset([1]) + FOLLOW_DOT_in_qualifiedIdentExpression13549 = frozenset([25, 61, 82, 92, 95, 164]) + FOLLOW_CLASS_in_qualifiedIdentExpression13567 = frozenset([1]) + FOLLOW_genericTypeArgumentListSimplified_in_qualifiedIdentExpression13630 = frozenset([92, 164]) + FOLLOW_SUPER_in_qualifiedIdentExpression13654 = frozenset([29]) + FOLLOW_arguments_in_qualifiedIdentExpression13656 = frozenset([1]) + FOLLOW_SUPER_in_qualifiedIdentExpression13706 = frozenset([15]) + FOLLOW_DOT_in_qualifiedIdentExpression13710 = frozenset([164]) + FOLLOW_IDENT_in_qualifiedIdentExpression13712 = frozenset([29]) + FOLLOW_arguments_in_qualifiedIdentExpression13714 = frozenset([1]) + FOLLOW_IDENT_in_qualifiedIdentExpression13764 = frozenset([29]) + FOLLOW_arguments_in_qualifiedIdentExpression13766 = frozenset([1]) + FOLLOW_THIS_in_qualifiedIdentExpression13841 = frozenset([1]) + FOLLOW_SUPER_in_qualifiedIdentExpression13907 = frozenset([29]) + FOLLOW_arguments_in_qualifiedIdentExpression13909 = frozenset([1]) + FOLLOW_innerNewExpression_in_qualifiedIdentExpression13957 = frozenset([1]) + FOLLOW_NEW_in_newExpression14033 = frozenset([25, 55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_primitiveType_in_newExpression14047 = frozenset([22]) + FOLLOW_newArrayConstruction_in_newExpression14049 = frozenset([1]) + FOLLOW_genericTypeArgumentListSimplified_in_newExpression14093 = frozenset([25, 55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_qualifiedTypeIdentSimplified_in_newExpression14096 = frozenset([22, 29]) + FOLLOW_newArrayConstruction_in_newExpression14114 = frozenset([1]) + FOLLOW_arguments_in_newExpression14179 = frozenset([1, 23, 25, 68, 75]) + FOLLOW_classBody_in_newExpression14181 = frozenset([1]) + FOLLOW_NEW_in_innerNewExpression14276 = frozenset([25, 164]) + FOLLOW_genericTypeArgumentListSimplified_in_innerNewExpression14278 = frozenset([164]) + FOLLOW_IDENT_in_innerNewExpression14281 = frozenset([29]) + FOLLOW_arguments_in_innerNewExpression14283 = frozenset([1, 23, 25, 68, 75]) + FOLLOW_classBody_in_innerNewExpression14285 = frozenset([1]) + FOLLOW_arrayDeclaratorList_in_newArrayConstruction14331 = frozenset([23]) + FOLLOW_arrayInitializer_in_newArrayConstruction14333 = frozenset([1]) + FOLLOW_LBRACK_in_newArrayConstruction14343 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_newArrayConstruction14346 = frozenset([41]) + FOLLOW_RBRACK_in_newArrayConstruction14348 = frozenset([1, 22]) + FOLLOW_LBRACK_in_newArrayConstruction14352 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_newArrayConstruction14355 = frozenset([41]) + FOLLOW_RBRACK_in_newArrayConstruction14357 = frozenset([1, 22]) + FOLLOW_arrayDeclaratorList_in_newArrayConstruction14362 = frozenset([1]) + FOLLOW_LPAREN_in_arguments14382 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 43, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expressionList_in_arguments14384 = frozenset([43]) + FOLLOW_RPAREN_in_arguments14387 = frozenset([1]) + FOLLOW_set_in_literal0 = frozenset([1]) + FOLLOW_GREATER_THAN_in_synpred14_Java5045 = frozenset([1]) + FOLLOW_SHIFT_RIGHT_in_synpred15_Java5055 = frozenset([1]) + FOLLOW_BIT_SHIFT_RIGHT_in_synpred16_Java5065 = frozenset([1]) + FOLLOW_bound_in_synpred17_Java5095 = frozenset([1]) + FOLLOW_STATIC_in_synpred32_Java5595 = frozenset([23]) + FOLLOW_block_in_synpred32_Java5597 = frozenset([1]) + FOLLOW_genericTypeParameterList_in_synpred42_Java5634 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_type_in_synpred42_Java5653 = frozenset([164]) + FOLLOW_IDENT_in_synpred42_Java5655 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred42_Java5657 = frozenset([22, 23, 44, 97]) + FOLLOW_arrayDeclaratorList_in_synpred42_Java5659 = frozenset([23, 44, 97]) + FOLLOW_throwsClause_in_synpred42_Java5662 = frozenset([23, 44]) + FOLLOW_block_in_synpred42_Java5666 = frozenset([1]) + FOLLOW_SEMI_in_synpred42_Java5670 = frozenset([1]) + FOLLOW_VOID_in_synpred42_Java5732 = frozenset([164]) + FOLLOW_IDENT_in_synpred42_Java5734 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred42_Java5736 = frozenset([23, 44, 97]) + FOLLOW_throwsClause_in_synpred42_Java5738 = frozenset([23, 44]) + FOLLOW_block_in_synpred42_Java5742 = frozenset([1]) + FOLLOW_SEMI_in_synpred42_Java5746 = frozenset([1]) + FOLLOW_IDENT_in_synpred42_Java5805 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred42_Java5807 = frozenset([23, 97]) + FOLLOW_throwsClause_in_synpred42_Java5809 = frozenset([23]) + FOLLOW_block_in_synpred42_Java5812 = frozenset([1]) + FOLLOW_modifierList_in_synpred43_Java5620 = frozenset([25, 55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_genericTypeParameterList_in_synpred43_Java5634 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_type_in_synpred43_Java5653 = frozenset([164]) + FOLLOW_IDENT_in_synpred43_Java5655 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred43_Java5657 = frozenset([22, 23, 44, 97]) + FOLLOW_arrayDeclaratorList_in_synpred43_Java5659 = frozenset([23, 44, 97]) + FOLLOW_throwsClause_in_synpred43_Java5662 = frozenset([23, 44]) + FOLLOW_block_in_synpred43_Java5666 = frozenset([1]) + FOLLOW_SEMI_in_synpred43_Java5670 = frozenset([1]) + FOLLOW_VOID_in_synpred43_Java5732 = frozenset([164]) + FOLLOW_IDENT_in_synpred43_Java5734 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred43_Java5736 = frozenset([23, 44, 97]) + FOLLOW_throwsClause_in_synpred43_Java5738 = frozenset([23, 44]) + FOLLOW_block_in_synpred43_Java5742 = frozenset([1]) + FOLLOW_SEMI_in_synpred43_Java5746 = frozenset([1]) + FOLLOW_IDENT_in_synpred43_Java5805 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred43_Java5807 = frozenset([23, 97]) + FOLLOW_throwsClause_in_synpred43_Java5809 = frozenset([23]) + FOLLOW_block_in_synpred43_Java5812 = frozenset([1]) + FOLLOW_type_in_synpred43_Java5876 = frozenset([164]) + FOLLOW_classFieldDeclaratorList_in_synpred43_Java5878 = frozenset([44]) + FOLLOW_SEMI_in_synpred43_Java5880 = frozenset([1]) + FOLLOW_typeDeclaration_in_synpred44_Java5925 = frozenset([1]) + FOLLOW_genericTypeParameterList_in_synpred50_Java5969 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_type_in_synpred50_Java5988 = frozenset([164]) + FOLLOW_IDENT_in_synpred50_Java5990 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred50_Java5992 = frozenset([22, 44, 97]) + FOLLOW_arrayDeclaratorList_in_synpred50_Java5994 = frozenset([44, 97]) + FOLLOW_throwsClause_in_synpred50_Java5997 = frozenset([44]) + FOLLOW_SEMI_in_synpred50_Java6000 = frozenset([1]) + FOLLOW_VOID_in_synpred50_Java6058 = frozenset([164]) + FOLLOW_IDENT_in_synpred50_Java6060 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred50_Java6062 = frozenset([44, 97]) + FOLLOW_throwsClause_in_synpred50_Java6064 = frozenset([44]) + FOLLOW_SEMI_in_synpred50_Java6067 = frozenset([1]) + FOLLOW_modifierList_in_synpred51_Java5955 = frozenset([25, 55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_genericTypeParameterList_in_synpred51_Java5969 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_type_in_synpred51_Java5988 = frozenset([164]) + FOLLOW_IDENT_in_synpred51_Java5990 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred51_Java5992 = frozenset([22, 44, 97]) + FOLLOW_arrayDeclaratorList_in_synpred51_Java5994 = frozenset([44, 97]) + FOLLOW_throwsClause_in_synpred51_Java5997 = frozenset([44]) + FOLLOW_SEMI_in_synpred51_Java6000 = frozenset([1]) + FOLLOW_VOID_in_synpred51_Java6058 = frozenset([164]) + FOLLOW_IDENT_in_synpred51_Java6060 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred51_Java6062 = frozenset([44, 97]) + FOLLOW_throwsClause_in_synpred51_Java6064 = frozenset([44]) + FOLLOW_SEMI_in_synpred51_Java6067 = frozenset([1]) + FOLLOW_type_in_synpred51_Java6130 = frozenset([164]) + FOLLOW_interfaceFieldDeclaratorList_in_synpred51_Java6132 = frozenset([44]) + FOLLOW_SEMI_in_synpred51_Java6134 = frozenset([1]) + FOLLOW_typeDeclaration_in_synpred52_Java6179 = frozenset([1]) + FOLLOW_arrayDeclarator_in_synpred58_Java6473 = frozenset([1]) + FOLLOW_arrayDeclaratorList_in_synpred76_Java6860 = frozenset([1]) + FOLLOW_arrayDeclaratorList_in_synpred77_Java6903 = frozenset([1]) + FOLLOW_DOT_in_synpred79_Java6988 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_typeIdent_in_synpred79_Java6990 = frozenset([1]) + FOLLOW_COMMA_in_synpred90_Java7213 = frozenset([40, 55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_genericTypeArgument_in_synpred90_Java7215 = frozenset([1]) + FOLLOW_genericWildcardBoundType_in_synpred92_Java7269 = frozenset([1]) + FOLLOW_COMMA_in_synpred97_Java7470 = frozenset([7, 53, 55, 57, 60, 65, 70, 72, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 102, 164]) + FOLLOW_formalParameterStandardDecl_in_synpred97_Java7472 = frozenset([1]) + FOLLOW_formalParameterStandardDecl_in_synpred99_Java7467 = frozenset([1, 11]) + FOLLOW_COMMA_in_synpred99_Java7470 = frozenset([7, 53, 55, 57, 60, 65, 70, 72, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 102, 164]) + FOLLOW_formalParameterStandardDecl_in_synpred99_Java7472 = frozenset([1, 11]) + FOLLOW_COMMA_in_synpred99_Java7477 = frozenset([7, 53, 55, 57, 60, 65, 70, 72, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 102, 164]) + FOLLOW_formalParameterVarArgDecl_in_synpred99_Java7479 = frozenset([1]) + FOLLOW_formalParameterVarArgDecl_in_synpred100_Java7534 = frozenset([1]) + FOLLOW_DOT_in_synpred101_Java7765 = frozenset([164]) + FOLLOW_IDENT_in_synpred101_Java7769 = frozenset([1]) + FOLLOW_annotation_in_synpred102_Java7818 = frozenset([1]) + FOLLOW_modifierList_in_synpred114_Java8240 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_synpred114_Java8242 = frozenset([164]) + FOLLOW_IDENT_in_synpred114_Java8256 = frozenset([29]) + FOLLOW_LPAREN_in_synpred114_Java8258 = frozenset([43]) + FOLLOW_RPAREN_in_synpred114_Java8260 = frozenset([44, 63]) + FOLLOW_annotationDefaultValue_in_synpred114_Java8262 = frozenset([44]) + FOLLOW_SEMI_in_synpred114_Java8265 = frozenset([1]) + FOLLOW_classFieldDeclaratorList_in_synpred114_Java8307 = frozenset([44]) + FOLLOW_SEMI_in_synpred114_Java8309 = frozenset([1]) + FOLLOW_localVariableDeclaration_in_synpred116_Java8440 = frozenset([44]) + FOLLOW_SEMI_in_synpred116_Java8442 = frozenset([1]) + FOLLOW_typeDeclaration_in_synpred117_Java8453 = frozenset([1]) + FOLLOW_ELSE_in_synpred121_Java8733 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_statement_in_synpred121_Java8737 = frozenset([1]) + FOLLOW_forInit_in_synpred123_Java8916 = frozenset([44]) + FOLLOW_SEMI_in_synpred123_Java8918 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_forCondition_in_synpred123_Java8920 = frozenset([44]) + FOLLOW_SEMI_in_synpred123_Java8922 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 43, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_forUpdater_in_synpred123_Java8924 = frozenset([43]) + FOLLOW_RPAREN_in_synpred123_Java8926 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_statement_in_synpred123_Java8928 = frozenset([1]) + FOLLOW_switchBlockLabels_in_synpred130_Java9251 = frozenset([1]) + FOLLOW_switchCaseLabels_in_synpred143_Java9839 = frozenset([1]) + FOLLOW_switchCaseLabels_in_synpred145_Java9847 = frozenset([1]) + FOLLOW_switchCaseLabel_in_synpred146_Java9893 = frozenset([1]) + FOLLOW_localVariableDeclaration_in_synpred149_Java9967 = frozenset([1]) + FOLLOW_expressionList_in_synpred150_Java9989 = frozenset([1]) + FOLLOW_LPAREN_in_synpred193_Java11492 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_synpred193_Java11494 = frozenset([43]) + FOLLOW_RPAREN_in_synpred193_Java11496 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_unaryExpression_in_synpred193_Java11498 = frozenset([1]) + FOLLOW_arrayDeclarator_in_synpred221_Java13349 = frozenset([15, 22]) + FOLLOW_DOT_in_synpred221_Java13416 = frozenset([61]) + FOLLOW_CLASS_in_synpred221_Java13418 = frozenset([1]) + FOLLOW_DOT_in_synpred229_Java13549 = frozenset([25, 61, 82, 92, 95, 164]) + FOLLOW_CLASS_in_synpred229_Java13567 = frozenset([1]) + FOLLOW_genericTypeArgumentListSimplified_in_synpred229_Java13630 = frozenset([92, 164]) + FOLLOW_SUPER_in_synpred229_Java13654 = frozenset([29]) + FOLLOW_arguments_in_synpred229_Java13656 = frozenset([1]) + FOLLOW_SUPER_in_synpred229_Java13706 = frozenset([15]) + FOLLOW_DOT_in_synpred229_Java13710 = frozenset([164]) + FOLLOW_IDENT_in_synpred229_Java13712 = frozenset([29]) + FOLLOW_arguments_in_synpred229_Java13714 = frozenset([1]) + FOLLOW_IDENT_in_synpred229_Java13764 = frozenset([29]) + FOLLOW_arguments_in_synpred229_Java13766 = frozenset([1]) + FOLLOW_THIS_in_synpred229_Java13841 = frozenset([1]) + FOLLOW_SUPER_in_synpred229_Java13907 = frozenset([29]) + FOLLOW_arguments_in_synpred229_Java13909 = frozenset([1]) + FOLLOW_innerNewExpression_in_synpred229_Java13957 = frozenset([1]) + FOLLOW_LBRACK_in_synpred237_Java14352 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_synpred237_Java14355 = frozenset([41]) + FOLLOW_RBRACK_in_synpred237_Java14357 = frozenset([1]) + + + +def main(argv, stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stderr): + from antlr3.main import ParserMain + main = ParserMain("JavaLexer", JavaParser) + main.stdin = stdin + main.stdout = stdout + main.stderr = stderr + main.execute(argv) + + +if __name__ == '__main__': + main(sys.argv) diff --git a/build/lib.linux-x86_64-2.7/java2python/lang/__init__.py b/build/lib.linux-x86_64-2.7/java2python/lang/__init__.py new file mode 100644 index 0000000..6e37576 --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/lang/__init__.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.lang -> package marker +# +# Clients should import values from this module instead of our submodules. + +from java2python.lang.JavaLexer import JavaLexer as Lexer +from java2python.lang.JavaParser import JavaParser as Parser +from java2python.lang.base import StringStream, TokenStream, TreeAdaptor, tokens diff --git a/build/lib.linux-x86_64-2.7/java2python/lang/base.py b/build/lib.linux-x86_64-2.7/java2python/lang/base.py new file mode 100644 index 0000000..0633b8e --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/lang/base.py @@ -0,0 +1,269 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.lang.base -> lexer and parser support classes. +# +# This module provides the following: +# +# * `Tokens` +# +# This class is used to create the single `token` instance in this +# module. It is used to map between parser tokens and their ids and +# vice-versa. +# +# * `TreeAdaptor` +# +# This class is used by `java2python.compiler.tool`, where the +# `buildAST` function associates an instance of it to a parser. The +# `TreeAdaptor` class creates `LocalTree` instances. +# +# * `LocalTree` +# +# This class provides a slew of extra utility methods that are useful +# when inspecting and printing tree nodes. +# + + +# ANTLR notes: +# +# recognizers: lexer, parser, treeparser +# streams: string, file name, file handle +# +# Parsers use TokenStreams (CommonTokenStream or TokenRewriteStream) +# +# Tree parsers use TreeNodeStream (CommonTreeNodeStream) +# +# Lexers emit Token objects (buffered in TokenStream objects) +# +# Parsers build trees if their output is AST. +# +# token types: CommonToken and ClassicToken. Our tree adaptor +# creates LocalTree instances instead. +# +# Tree (CommonTree) wraps Token objects. We provide extra functionality via +# the LocalTree class. +# +# TreeAdaptor (CommonTreeAdaptor) is used by the parser to create +# Tree objects. Our adaptor, TreeAdaptor, creates the LocalTree +# instances. +# + +from cStringIO import StringIO + +from antlr3 import ANTLRStringStream as StringStream, CommonTokenStream as TokenStream +from antlr3.tree import CommonTreeAdaptor, CommonTree + +from java2python.lib import colors + + +class Tokens(object): + """ Tokens -> simplifies token id-name and name-id mapping. """ + + def __init__(self): + self.cache, self.parserModule = {}, None + + def __getattr__(self, name): + """ tokenname -> tokenvalue """ + return getattr(self.module, name) + + @property + def commentTypes(self): + """ Well-known comment types. """ + mod = self.module + return (mod.COMMENT, mod.LINE_COMMENT, mod.JAVADOC_COMMENT, ) + + @property + def map(self): + """ (tokentype, tokenname) mapping as a dictionary """ + cache, module = self.cache, self.module + if cache: + return cache + mapping = [(getattr(module, k, None), k) for k in module.tokenNames] + mapping = [(k, v) for k, v in mapping if k is not None] + cache.update(mapping) + return cache + + @property + def methodTypes(self): + """ Well-known method types. """ + mod = self.module + return (mod.VOID_METHOD_DECL, mod.FUNCTION_METHOD_DECL, ) + + @property + def primitiveTypeNames(self): + """ Type name of well-known primitive types """ + return ('bool', 'str', 'int', 'long', 'float', ) + + @property + def module(self): + """ Provides lazy import to the parser module. """ + module = self.parserModule + if module: + return module + import java2python.lang.JavaParser as module + self.parserModule = module + return module + + @staticmethod + def title(name): + """ Returns a nice title given a token type name. """ + return ''.join(part.title() for part in name.split('_')) + + +## sometimes you really do only need one. +tokens = Tokens() + + +class TreeAdaptor(CommonTreeAdaptor): + """ TreeAdaptor -> defered tree node creator (for parsers). """ + + def __init__(self, lexer, parser): + # CommonTreeAdaptor doesn't need to be __init__'ed + self.lexer, self.parser = lexer, parser + + def createWithPayload(self, payload): + """ Returns a new tree for the calling parser. """ + return LocalTree(payload, self.lexer, self.parser) + + +class LocalTree(CommonTree): + """ LocalTree -> like CommonTree, but with more stuff. """ + colorTypeMap = { + 'CLASS' : colors.green, + 'JAVA_SOURCE' : colors.green, + 'VOID_METHOD_DECL' : colors.green, + 'IDENT' : colors.yellow, + 'TYPE' : colors.magenta, + 'EXPR' : colors.blue, + 'TRUE' : colors.yellow, + 'FALSE' : colors.yellow, + 'NULL' : colors.yellow, + } + + def __init__(self, payload, lexer=None, parser=None): + super(LocalTree, self).__init__(payload) + self.lexer, self.parser = lexer, parser + + def childrenOfType(self, type): + """ Returns a generator yielding children of this tree of the given type. """ + return (c for c in self.children if c.type==type) + + def colorType(self, tokenType): + """ Returns a color suitable for the given token type. """ + return self.colorTypeMap.get(tokenType, colors.white)(tokenType) + + def colorText(self, tokenType, tokenText): + """ Returns a colorized string from the given token type and text. """ + return self.colorTypeMap.get(tokenType, colors.white)(tokenText) + + def colorComments(self, token): + """ Formats, colors, and returns the comment text from the given token. """ + ttyp = tokens.map.get(token.type) + text = token.text.replace('\n', '\\n').replace('\r', '\\r').replace('\t', '\\t') + item = '{0} [{1}:{2}] {3}'.format(ttyp, token.start, token.stop, text) + yield colors.black(item) + + def dump(self, fd, level=0): + """ Writes a debug representation of this tree to the given file. """ + extras = lambda x, y:x and (x != y) + seen, nform = set(), '{0}{1}{2}{3}' + def innerDump(root, offset): + token, indent = root.token, ' ' * offset + start, stop = root.tokenStartIndex, root.tokenStopIndex + idxes, ttyp = '', tokens.map.get(token.type, '?') + line = token.line + if start and stop and start == stop: + idxes = 'start={}'.format(start) + elif start and stop: + idxes = 'start={}, stop={}'.format(start, stop) + if line: + idxes = 'line={}{}{}'.format(line, ', ' if idxes else '', idxes) + idxes = ' [{}]'.format(idxes) if idxes else '' + idxes = colors.black(idxes) + args = [indent, self.colorType(ttyp), '', idxes, ''] + if extras(token.text, ttyp): + args[2] = ' ' + self.colorText(ttyp, token.text) + for com in self.selectComments(start, seen): + for line in self.colorComments(com): + print >> fd, '{0}{1}'.format(indent, line) + print >> fd, nform.format(*args) + for child in root.getChildren(): + innerDump(child, offset+1) + for com in self.selectComments(root.tokenStopIndex, seen): + for line in self.colorComments(com): + print >> fd, '{0}{1}'.format(indent, line) + innerDump(self, level) + + def dumps(self, level=0): + """ Dump this token to a string. """ + fd = StringIO() + self.dump(fd, level) + return fd.getvalue() + + def dupNode(self): + """ Called by the parser to create a duplicate of this tree. """ + get = lambda v:getattr(self, v, None) + return LocalTree(self, get('lexer'), get('parser')) + + def findChildren(self, pred=lambda c:True): + """ Depth-first search that yields nodes meeting the predicate. """ + for child in self.children: + if pred(child): + yield child + for sub in child.findChildren(pred): + yield sub + + def findChildrenOfType(self, type): + """ Depth-first search that yields nodes of the given type. """ + return self.findChildren(lambda c:c.type==type) + + def firstChild(self, default=None): + """ Returns the first child of this tree or the default. """ + try: + return self.children[0] + except (IndexError, ): + return default + + def firstChildOfType(self, type, default=None): + """ Returns the first child of this tree that matches the given type. """ + for child in self.children: + if child.type == type: + return child + return default + + @property + def isJavaSource(self): + """ True if this tree is the outer most type. """ + return self.token.type == tokens.JAVA_SOURCE + + @property + def parentType(self): + """ Returns the type of the parent tree. """ + return self.parent.type + + def parents(self, pred=lambda v:True): + """ Yield each parent in the family tree. """ + while self: + if pred(self): + yield self + self = self.parent + + @property + def parserTokens(self): + """ Returns the sequence of tokens used to create this tree. """ + return self.parser.input.tokens[self.tokenStartIndex:self.tokenStopIndex] + + def selectComments(self, stop, memo): + """ Returns the comment tokens for this tree up to the given index. """ + pred = lambda k:k.type in tokens.commentTypes and k.index not in memo + ctoks = [t for t in self.parser.input.tokens[0:stop] if pred(t)] + memo.update(t.index for t in ctoks) + return ctoks + + @property + def withinExpr(self): + """ True if this tree is contained within an expression. """ + self = getattr(self.parent, 'parent', None) # skip first expr + while self: + if self.type in (tokens.EXPR, ): + return True + self = self.parent diff --git a/build/lib.linux-x86_64-2.7/java2python/lang/selector.py b/build/lib.linux-x86_64-2.7/java2python/lang/selector.py new file mode 100644 index 0000000..22b531a --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/lang/selector.py @@ -0,0 +1,241 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.lang.selector -> declarative AST node selection +# +# This module provides classes for simple AST node selection that can be +# easily combined to form complex, declarative rules for retrieving AST +# nodes. +# +# The classes are similar to CSS selectors, with a nod to Python parsing +# libraries like LEPL and PyParsing. At the moment, only a few very +# basic selector types are implemented, but those that are here already +# provide all of the functionality necessary for use within the package. +# +# Projects using java2python should regard this subpackage as +# experimental. While the interfaces are not expected to change, the +# semantics may. Use with caution. + +from java2python.lang import tokens + + +class Selector(object): + """ Base class for concrete selectors; provides operator methods. """ + + def __add__(self, other): + """ E + F + + Like CSS "E + F": an F element immediately preceded by an E element + """ + return AdjacentSibling(self, other) + + def __and__(self, other): + """ E & F + + Like CSS "E F": an F element descendant of an E element + """ + return Descendant(self, other) + + def __call__(self, *args, **kwds): + """ Subclasses must implement. """ + raise NotImplementedError('Selector class cannot be called.') + + def __getitem__(self, key): + """ E[n] + + Like CSS "E:nth-child(n)": an E element, the n-th child of its parent + """ + return Nth(self, key) + + def __gt__(self, other): + """ E > F + + Like CSS: "E > F": an F element child of an E element + """ + return Child(self, other) + + def __div__(self, other): + """ E / F + + Produces a AnySibling. + """ + return AnySibling(self, other) + + def walk(self, tree): + """ Select items from the tree and from the tree children. """ + for item in self(tree): + yield item + for child in tree.children: + for item in self.walk(child): + yield item + + +class Token(Selector): + """ Token(...) -> select tokens by matching attributes. + + Token is the most generic and flexible Selector; using it, + arbitrary nodes of any type, line number, position, and/or text + can be selected. + + Calling Token() without any keywords is equivalent to: + + Token(channel=None, index=None, input=None, line=None, + start=None, stop=None, text=None, type=None) + + Note that the value of each keyword can be a constant or a + callable. When callables are specified, they are passed a the + token and should return a bool. + """ + + def __init__(self, **attrs): + self.attrs = attrs + ## we support strings so that the client can refer to the + ## token name that way instead of via lookup or worse, integer. + if isinstance(attrs.get('type'), (basestring, )): + self.attrs['type'] = getattr(tokens, attrs.get('type')) + + def __call__(self, tree): + items = self.attrs.items() + token = tree.token + + def match_or_call(k, v): + if callable(v): + return v(token) + return getattr(token, k)==v + + if all(match_or_call(k, v) for k, v in items if v is not None): + yield tree + + def __str__(self): + items = self.attrs.items() + keys = ('{}={}'.format(k, v) for k, v in items if v is not None) + return 'Token({})'.format(', '.join(keys)) + + +class Nth(Selector): + """ E[n] -> match any slice n of E + + Similar to the :nth-child pseudo selector in CSS, but without the + support for keywords like 'odd', 'even', etc. + """ + def __init__(self, e, key): + self.e, self.key = e, key + + def __call__(self, tree): + for etree in self.e(tree): + try: + matches = tree.children[self.key] + except (IndexError, ): + return + if not isinstance(matches, (list, )): + matches = [matches] + for child in matches: + yield child + + def __str__(self): + return 'Nth({0})[{1}]'.format(self.e, self.key) + + +class Child(Selector): + """ E > F select any F that is a child of E """ + + def __init__(self, e, f): + self.e, self.f = e, f + + def __call__(self, tree): + for ftree in self.f(tree): + for etree in self.e(tree.parent): + yield ftree + + def __str__(self): + return 'Child({0} > {1})'.format(self.e, self.f) + + +class Type(Selector): + """ Type(T) select any token of type T + + Similar to the type selector in CSS. + """ + def __init__(self, key, value=None): + self.key = key if isinstance(key, int) else getattr(tokens, key) + self.value = value + + def __call__(self, tree): + if tree.token.type == self.key: + if self.value is None or self.value == tree.token.text: + yield tree + + def __str__(self): + val = '' if self.value is None else '={0}'.format(self.value) + return 'Type({0}{1}:{2})'.format(tokens.map[self.key], val, self.key) + + +class Star(Selector): + """ * select any + + Similar to the * selector in CSS. + """ + def __call__(self, tree): + yield tree + + def __str__(self): + return 'Star(*)' + + +class Descendant(Selector): + """ E & F select any F that is a descendant of E """ + + def __init__(self, e, f): + self.e, self.f = e, f + + def __call__(self, tree): + for ftree in self.f(tree): + root, ftree = ftree, ftree.parent + while ftree: + for etree in self.e(ftree): + yield root + ftree = ftree.parent + + def __str__(self): + return 'Descendant({0} & {1})'.format(self.e, self.f) + + +class AdjacentSibling(Selector): + """ E + F select any F immediately preceded by a sibling E """ + + def __init__(self, e, f): + self.e, self.f = e, f + + def __call__(self, node): + if not node.parent: + return + for ftree in self.f(node): + index = node.parent.children.index(ftree) + if not index: + return + previous = node.parent.children[index-1] + for child in self.e(previous): + yield ftree + + def __str__(self): + return 'AdjacentSibling({} + {})'.format(self.e, self.f) + + +class AnySibling(Selector): + """ E / F select any F preceded by a sibling E """ + + def __init__(self, e, f): + self.e, self.f = e, f + + def __call__(self, node): + if not node.parent: + return + for ftree in self.f(node): + index = node.parent.children.index(ftree) + if not index: + return + for prev in node.parent.children[:index]: + for child in self.e(prev): + yield ftree + + def __str__(self): + return 'AnySibling({} / {})'.format(self.e, self.f) diff --git a/build/lib.linux-x86_64-2.7/java2python/lib/__init__.py b/build/lib.linux-x86_64-2.7/java2python/lib/__init__.py new file mode 100644 index 0000000..efd7b1a --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/lib/__init__.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.lib -> common library bits. + +from functools import partial + + +class FS(object): + """ Format string abbreviations. """ + l = '{left}' + r = '{right}' + c = ':' + lc = l + c + lr = l + r + lsr = l + ' ' + r + lsrc = lsr + c + + @classmethod + def op(cls, op): + """ Returns a format string for the given operation. """ + l, r = cls.l, cls.r + if op == '>>>': + return '(' + l + ' & (2**32+' + l + ')) >> ' + r + if op == '>>>=': + return l + ' = bsr(' + l + ', ' + r + ')' + return l + ' ' + op + ' ' + r + + +escapes = { + 'BLACK' : '\033[90m', + 'BLUE' : '\033[94m', + 'CYAN' : '\033[96m', + 'GREEN' : '\033[92m', + 'MAGENTA' : '\033[95m', + 'NORMAL' : '\033[0m', + 'RED' : '\033[91m', + 'WHITE' : '\033[97m', + 'YELLOW' : '\033[93m', + } + + +def escape(color, value): + return escapes.get(color, '') + str(value) + escapes.get('NORMAL', '') + + +class colors: + black = partial(escape, 'BLACK') + blue = partial(escape, 'BLUE') + cyan = partial(escape, 'CYAN') + green = partial(escape, 'GREEN') + magenta = partial(escape, 'MAGENTA') + red = partial(escape, 'RED') + white = partial(escape, 'WHITE') + yellow = partial(escape, 'YELLOW') diff --git a/build/lib.linux-x86_64-2.7/java2python/mod/__init__.py b/build/lib.linux-x86_64-2.7/java2python/mod/__init__.py new file mode 100644 index 0000000..aa73853 --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/mod/__init__.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.mod -> provides simple modification routines for the +# library and projects using it. +# +# The java2python.mod.basic module contains various functions for +# sprinkling generated source with docstrings, comments, decorators, +# etc. +# +# The java2python.mod.inclues module contains functions that the +# library will include directly -- as source code -- in the generated +# output. +# +# The java2python.mod.transform module contains values and functions +# for transforming input AST nodes. diff --git a/build/lib.linux-x86_64-2.7/java2python/mod/basic.py b/build/lib.linux-x86_64-2.7/java2python/mod/basic.py new file mode 100644 index 0000000..02e2f57 --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/mod/basic.py @@ -0,0 +1,252 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.mod.basic -> functions to revise generated source strings. + +from itertools import count +from logging import info, warn +from os import path +from re import sub as rxsub + +from java2python.lib import FS + + +def shebangLine(module): + """ yields the canonical python shebang line. """ + yield '#!/usr/bin/env python' + + +def encodingLine(encoding='utf-8'): + """ returns a function to yield the specified encoding line. + + Note that this function isn't wired up because the encoding is + specified for the source directly, and adding this line produces a + syntax error when the compile function is used. + """ + def line(module): + yield '# -*- coding: {0} -*-'.format(encoding) + return line + + +def simpleDocString(obj): + """ yields multiple lines for a default docstring. + + This generator works for modules, classes, and functions. + """ + yield '""" generated source for {0} {1} """'.format(obj.typeName, obj.name) + + +def commentedImports(module, expr): + module.factory.comment(parent=module, left=expr, fs='#import {left}') + + +def simpleImports(module, expr): + module.factory.expr(parent=module, left=expr, fs='import {left}') + + +def commentedPackages(module, expr): + module.factory.comment(parent=module, left=expr, fs='# package: {left}') + + +def namespacePackages(module, expr): + source = module.sourceFilename + if not source: + warn('namespace package not created; source input not named.') + return + initname = path.join(path.dirname(source), '__init__.py') + if path.exists(initname): + warn('namespace package not created; __init__.py exists.') + return + with open(initname, 'w') as initfile: + initfile.write('from pkgutil import extend_path\n') + initfile.write('__path__ = extend_path(__path__, __name__)\n') + # wrong + initfile.write('\nfrom {0} import {0}\n'.format(module.name)) + info('created __init__.py file for package %s.', expr) + + +def enumConstInts(enum, index, name): + return str(index) + + +def enumConstStrings(enum, index, name): + return repr(name) + + +scriptTemplate = """\n +if __name__ == '__main__': +{indent}import sys +{indent}{name}.main(sys.argv)""" + + +def scriptMainStanza(module): + def filterClass(x): + return x.isClass and x.name==module.name + + def filterMethod(x): + return x.isMethod and x.isPublic and x.isStatic and \ + x.isVoid and x.name=='main' + + for cls in [c for c in module.children if filterClass(c)]: + if [m for m in cls.children if filterMethod(m)]: + yield scriptTemplate.format(indent=module.indent, name=module.name) + break + + +def outputSubs(obj, text): + subsname = '{0}OutputSubs'.format(obj.typeName) + subs = obj.config.every(subsname, []) + for sub in subs: + for pattern, repl in sub: + text = rxsub(pattern, repl, text) + return text + + +def overloadedClassMethods(method): + """ + NB: this implementation does not handle overloaded static (or + class) methods, only instance methods. + """ + cls = method.parent + methods = [o for o in cls.children if o.isMethod and o.name==method.name] + if len(methods) == 1: + if methods[0].overloaded: + yield methods[0].overloaded + return + for i, m in enumerate(methods[1:]): + args = [p['type'] for p in m.parameters] + args = ', '.join(args) + m.overloaded = '@{0}.register({1})'.format(method.name, args) + m.name = '{0}_{1}'.format(method.name, i) + # for this one only: + yield '@overloaded' + + +def maybeClassMethod(method): + if method.isStatic and 'classmethod' not in method.decorators: + yield '@classmethod' + + +def maybeAbstractMethod(method): + if method.parent and method.parent.isInterface: + yield '@abstractmethod' + + +def maybeSynchronizedMethod(method): + if 'synchronized' in method.modifiers: + yield '@synchronized' + + +def globalNameCounter(original, counter=count()): + return '__{0}_{1}'.format(original, counter.next()) + + +def getBsrSrc(): + from inspect import getsource + from java2python.mod.include.bsr import bsr + return getsource(bsr) + + +def getSyncHelpersSrc(): + from inspect import getsource + from java2python.mod.include import sync + return getsource(sync) + + +def maybeBsr(module): + if getattr(module, 'needsBsrFunc', False): + for line in getBsrSrc().split('\n'): + yield line + + +def maybeAbstractHelpers(module): + if getattr(module, 'needsAbstractHelpers', False): + yield 'from abc import ABCMeta, abstractmethod' + + +def maybeSyncHelpers(module): + if getattr(module, 'needsSyncHelpers', False): + for line in getSyncHelpersSrc().split('\n'): + yield line + + +def classContentSort(obj): + isMethod = lambda x:x and x.isMethod + + def iterBody(body): + group = [] + for value in body: + if isMethod(value): + group.append(value) + yield group + group = [] + else: + group.append(value) + yield group + + def sortBody(group): + methods = [item for item in group if isMethod(item)] + return methods[0].name if methods else -1 + + grp = list(iterBody(obj.children)) + grpsrt = sorted(grp, key=sortBody) + obj.children = [item for grp in grpsrt for item in grp] + + +def defaultParams(obj): + return iter(obj.parameters) + + +def zopeInterfaceMethodParams(obj): + if not obj.parent.isInterface: + for param in obj.parameters: + yield param + else: + for index, param in enumerate(obj.parameters): + if index != 0 and param['name'] != 'self': + yield param + + +normalBases = ('object', ) + + +def defaultBases(obj): + return iter(obj.bases or normalBases) + + +def zopeInterfaceBases(obj): + return iter(obj.bases or ['zope.interface.Interface']) + + +def implAny(obj): + for module in obj.parents(lambda x:x.isModule): + for name in obj.bases: + if any(module.find(lambda v:v.name == name)): + return True + + +def zopeImplementsClassBases(obj): + return iter(normalBases) if implAny(obj) else defaultBases(obj) + + +def zopeImplementsClassHead(obj): + if implAny(obj): + for cls in obj.bases: + yield 'zope.interface.implements({})'.format(cls) + + +def moveStaticExpressions(cls): + name = '{}.'.format(cls.name) # notice the dot + exprs = [child for child in cls.children if child.isExpression and name in str(child)] + module = cls.parents(lambda x:x.isModule).next() + for expr in exprs: + cls.children.remove(expr) + newExpr = module.factory.expr(fs=name + '{right}', right=expr) + module.adopt(newExpr, index=len(module.children)) + + +def castCtor(expr, node): + expr.fs = FS.l + '(' + FS.r + ')' + + +def castDrop(expr, node): + expr.fs = FS.r diff --git a/build/lib.linux-x86_64-2.7/java2python/mod/include/__init__.py b/build/lib.linux-x86_64-2.7/java2python/mod/include/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/build/lib.linux-x86_64-2.7/java2python/mod/include/bsr.py b/build/lib.linux-x86_64-2.7/java2python/mod/include/bsr.py new file mode 100644 index 0000000..16d5f2c --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/mod/include/bsr.py @@ -0,0 +1,26 @@ +def bsr(value, bits): + """ bsr(value, bits) -> value shifted right by bits + + This function is here because an expression in the original java + source contained the token '>>>' and/or '>>>=' (bit shift right + and/or bit shift right assign). In place of these, the python + source code below contains calls to this function. + + Copyright 2003 Jeffrey Clement. See pyrijnadel.py for license and + original source. + """ + minint = -2147483648 + if bits == 0: + return value + elif bits == 31: + if value & minint: + return 1 + else: + return 0 + elif bits < 0 or bits > 31: + raise ValueError('bad shift count') + tmp = (value & 0x7FFFFFFE) // 2**bits + if (value & minint): + return (tmp | (0x40000000 // 2**(bits-1))) + else: + return tmp diff --git a/build/lib.linux-x86_64-2.7/java2python/mod/include/classmethod.py b/build/lib.linux-x86_64-2.7/java2python/mod/include/classmethod.py new file mode 100644 index 0000000..cb97954 --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/mod/include/classmethod.py @@ -0,0 +1,6 @@ +class classmethod_(classmethod): + """ Classmethod that provides attribute delegation. + + """ + def __getattr__(self, name): + return getattr(self.__func__, name) diff --git a/build/lib.linux-x86_64-2.7/java2python/mod/include/overloading.py b/build/lib.linux-x86_64-2.7/java2python/mod/include/overloading.py new file mode 100644 index 0000000..2f8257c --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/mod/include/overloading.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python2.5 + +## +# Dynamically overloaded functions. +# +# This is an implementation of (dynamically, or run-time) overloaded +# functions; also known as generic functions or multi-methods. +# +# This module is from Python SVN, +# http://svn.python.org/view/sandbox/trunk/overload/overloading.py +## + +"""Dynamically overloaded functions. + +This is an implementation of (dynamically, or run-time) overloaded +functions; also known as generic functions or multi-methods. + +The dispatch algorithm uses the types of all argument for dispatch, +similar to (compile-time) overloaded functions or methods in C++ and +Java. + +Most of the complexity in the algorithm comes from the need to support +subclasses in call signatures. For example, if an function is +registered for a signature (T1, T2), then a call with a signature (S1, +S2) is acceptable, assuming that S1 is a subclass of T1, S2 a subclass +of T2, and there are no other more specific matches (see below). + +If there are multiple matches and one of those doesn't *dominate* all +others, the match is deemed ambiguous and an exception is raised. A +subtlety here: if, after removing the dominated matches, there are +still multiple matches left, but they all map to the same function, +then the match is not deemed ambiguous and that function is used. +Read the method find_func() below for details. + +Python 2.5 is required due to the use of predicates any() and all(). + +""" + +from types import MethodType as instancemethod + +import sys +if sys.version_info[0] < 3: + # Make the environment more like Python 3.0 + __metaclass__ = type + from itertools import izip as zip + + +class overloaded: + """An implementation of overloaded functions.""" + + def __init__(self, default_func): + # Decorator to declare new overloaded function. + self.registry = {} + self.cache = {} + self.default_func = default_func + + def __get__(self, obj, type=None): + if obj is None: + return self + return instancemethod(self, obj) + + def register(self, *types): + """Decorator to register an implementation for a specific set of types. + + .register(t1, t2)(f) is equivalent to .register_func((t1, t2), f). + + """ + def helper(func): + self.register_func(types, func) + return func + return helper + + def register_func(self, types, func): + """Helper to register an implementation.""" + self.registry[tuple(types)] = func + self.cache = {} # Clear the cache (later we can optimize this). + + def __call__(self, *args): + """Call the overloaded function.""" + types = tuple(map(type, args)) + func = self.cache.get(types) + if func is None: + self.cache[types] = func = self.find_func(types) + return func(*args) + + def find_func(self, types): + """Find the appropriate overloaded function; don't call it. + + This won't work for old-style classes or classes without __mro__. + + """ + func = self.registry.get(types) + if func is not None: + # Easy case -- direct hit in registry. + return func + + # XXX Phillip Eby suggests to use issubclass() instead of __mro__. + # There are advantages and disadvantages. + + # I can't help myself -- this is going to be intense functional code. + # Find all possible candidate signatures. + mros = tuple(t.__mro__ for t in types) + n = len(mros) + candidates = [sig for sig in self.registry + if len(sig) == n and + all(t in mro for t, mro in zip(sig, mros))] + if not candidates: + # No match at all -- use the default function. + return self.default_func + if len(candidates) == 1: + # Unique match -- that's an easy case. + return self.registry[candidates[0]] + + # More than one match -- weed out the subordinate ones. + + def dominates(dom, sub, + orders=tuple(dict((t, i) for i, t in enumerate(mro)) + for mro in mros)): + # Predicate to decide whether dom strictly dominates sub. + # Strict domination is defined as domination without equality. + # The arguments dom and sub are type tuples of equal length. + # The orders argument is a precomputed auxiliary data structure + # giving dicts of ordering information corresponding to the + # positions in the type tuples. + # A type d dominates a type s iff order[d] <= order[s]. + # A type tuple (d1, d2, ...) dominates a type tuple of equal length + # (s1, s2, ...) iff d1 dominates s1, d2 dominates s2, etc. + if dom is sub: + return False + return all(order[d] <= order[s] + for d, s, order in zip(dom, sub, orders)) + + # I suppose I could inline dominates() but it wouldn't get any clearer. + candidates = [cand + for cand in candidates + if not any(dominates(dom, cand) for dom in candidates)] + if len(candidates) == 1: + # There's exactly one candidate left. + return self.registry[candidates[0]] + + # Perhaps these multiple candidates all have the same implementation? + funcs = set(self.registry[cand] for cand in candidates) + if len(funcs) == 1: + return funcs.pop() + + # No, the situation is irreducibly ambiguous. + raise TypeError("ambigous call; types=%r; candidates=%r" % + (types, candidates)) diff --git a/build/lib.linux-x86_64-2.7/java2python/mod/include/sync.py b/build/lib.linux-x86_64-2.7/java2python/mod/include/sync.py new file mode 100644 index 0000000..ddac055 --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/mod/include/sync.py @@ -0,0 +1,13 @@ +from functools import wraps +from threading import RLock + +def lock_for_object(obj, locks={}): + return locks.setdefault(id(obj), RLock()) + +def synchronized(call): + assert call.__code__.co_varnames[0] in ['self', 'cls'] + @wraps(call) + def inner(*args, **kwds): + with lock_for_object(args[0]): + return call(*args, **kwds) + return inner diff --git a/build/lib.linux-x86_64-2.7/java2python/mod/include/sync_test.py b/build/lib.linux-x86_64-2.7/java2python/mod/include/sync_test.py new file mode 100644 index 0000000..70c13d4 --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/mod/include/sync_test.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python + +from threading import RLock + +_locks = {} +def lock_for_object(obj, locks=_locks): + return locks.setdefault(id(obj), RLock()) + +def synchronized(call): + def inner(*args, **kwds): + with lock_for_object(call): + return call(*args, **kwds) + return inner + +class Main(object): + + def __init__(self): + self.attr = object() + + def b1(self): + r = [] + with lock_for_object(self.attr): + r.append(0) + return r + + def b2(self): + r = [] + with lock_for_object(self.attr): + r.append(0) + return r + + def m1(self): + return id(lock_for_object(self)) + + def m2(self): + return id(lock_for_object(self)) + + @classmethod + def c1(cls): + return id(lock_for_object(cls)) + + @classmethod + def c2(cls): + return id(lock_for_object(cls)) + + @synchronized + def s1(self, *values, **kwargs): + return [values, kwargs] + + @synchronized + def s2(self, *values, **kwargs): + return [values, kwargs] + + @classmethod + @synchronized + def cs1(cls, *values, **kwargs): + return [cls, values, kwargs] + + @classmethod + @synchronized + def cs2(cls, *values, **kwargs): + return [cls, values, kwargs] + + + +if __name__ == '__main__': + x = Main() + expected_count = 0 + + assert x.b1() == x.b2() + expected_count += 1 # one for the attr, used twice + + assert x.c1() == x.c2() + expected_count += 1 # one for the class, used twice + + assert x.m1() == x.m2() + expected_count += 1 # one for the instance, used twice + + assert x.s1() == x.s2() + expected_count += 2 # one for each instance method + + assert x.cs1() == x.cs2() + expected_count += 2 # one for each class method + + assert expected_count == len(_locks) + + print '[PASS]' + diff --git a/build/lib.linux-x86_64-2.7/java2python/mod/transform.py b/build/lib.linux-x86_64-2.7/java2python/mod/transform.py new file mode 100644 index 0000000..9b2e567 --- /dev/null +++ b/build/lib.linux-x86_64-2.7/java2python/mod/transform.py @@ -0,0 +1,196 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.mod.transform -> input AST transformer functions and constants. +# +# This module provides several transformation functions which are +# simple callables that modify AST nodes. These functions are not +# responsible for selecting nodes, only changing the node content. +# This gives us AST generation decoupled from AST traversal and +# modification. +# +# See the java2python.config.default and java2python.lang.selector modules to +# understand how and when selectors are associated with these callables. + +import re +from logging import warn + +import keyword +import types + +from java2python.lang import tokens + + +def invalidPythonNames(): + """ Creates a list of valid Java identifiers that are invalid in Python. """ + ts = [getattr(types, n) for n in dir(types) if not n.startswith('_')] + ns = [t.__name__ for t in ts if isinstance(t, type)] + return ['None', 'True', 'False', ] + ns + keyword.kwlist + + +def keywordSafeIdent(node, config, invalid=invalidPythonNames()): + """ Validates and possibly renames a Java identifier. """ + ident = node.token.text + if ident in invalid: + node.token.text = '%s_' % ident + + +def makeConst(v): + """ Returns a closure that indiscriminately changes node text to a value. """ + def xform(node, config): + node.token.text = v + return xform + + +# Create transformers for mapping well-known Java idents into their +# Python counterparts: +null2None = makeConst('None') +false2False = makeConst('False') +true2True = makeConst('True') + + +def syntaxSafeDecimalLiteral(node, config): + """ Ensures a Java decimal literal is a valid Python decimal literal. """ + value = node.token.text + if value.endswith(('l', 'L')): + value = value[:-1] + node.token.text = value + + +def syntaxSafeFloatLiteral(node, config): + """ Ensures a Java float literal is a valid Python float literal. """ + value = node.token.text + if value.startswith('.'): + value = '0' + value + if value.lower().endswith(('f', 'd')): + value = value[:-1] + node.token.text = value + + +def lengthToLen(node, config): + """ Transforms expressions like 'value.length()' to 'len(value)'. + + This method changes AST branches like this: + + METHOD_CALL [start=45, stop=49] + DOT . [line=4, start=45, stop=47] + IDENT foo [line=4, start=45] + IDENT length [line=4, start=47] + ARGUMENT_LIST [line=4, start=48, stop=49] + + Into branches like this: + + IDENT len(foo) [line=4, start=45] + + Notice that the resulting IDENT node text is invalid. We can't use a + METHOD_CALL token because those are always bound to a class or instance. + It would be best to add a new token type, and that option will be explored + if we run into this problem again. + + """ + dot = node.parent + method = dot.parent + + ident = dot.firstChildOfType(tokens.IDENT) + ident.token.text = 'len({})'.format(ident.text) + + expr = method.parent + expr.children.remove(method) + expr.addChild(ident) + + +def formatSyntaxTransf(match): + """ Helper function for formatString AST transform. + + Translates the Java Formatter syntax into Python .format syntax. + + This function gets called by re.sub which matches all the %...$... groups + inside a format specifier string. + """ + groups = match.groupdict() + if groups['convers'] == 'n': + # Means platform-specific line separator + return '\\n' # Py converts \n to os.linesep + + result = '{' + thous_sep = '' + + if(groups['idx']): + idx = int(groups['idx'][:-1]) + result += str(idx - 1) # Py starts count from 0 + result += ':' + + if(groups['flags']): + if ',' in groups['flags']: + thous_sep = ',' + if '+' in groups['flags']: + result += '+' + elif ' ' in groups['flags']: + result += ' ' + if '#' in groups['flags']: + result += '#' + if '0' in groups['flags']: + result += '0' + + if(groups['width']): + result += groups['width'] + result += thous_sep + + if(groups['precision']): + result += groups['precision'] + + result += groups['convers'] + '}' + + return result + +def formatString(node, config): + """ Transforms string formatting like 'String.format("%d %2$s", i, s)' + into '"{:d} {2:s}".format(i, s)'. + """ + dot = node.parent + method = dot.parent + arg_list = method.firstChildOfType(tokens.ARGUMENT_LIST) + call_args = [arg for arg in arg_list.childrenOfType(tokens.EXPR)] + args = [arg.firstChildOfType(tokens.IDENT) for arg in call_args[1:]] + + # Translate format syntax (if format == string_literal) + format = call_args[0].firstChildOfType(tokens.STRING_LITERAL) + if format: + format.token.text = \ + re.sub(r'%(?P\d+\$)?(?P[-+# 0,]+)?(?P[0-9]+)?(?P\.[0-9]+)?(?P[scdoxefgn])', + formatSyntaxTransf, + format.token.text, + flags=re.IGNORECASE) + else: + # Translation should happen at runtime + format = call_args[0].firstChild() + if format.type == tokens.IDENT: + # String variable + warn('Formatting string %s is not automatically translated.' + % str(format.token.text)) + else: + # Function that returns String + warn('Formatting string returned by %s() is not automatically translated.' + % str(format.firstChildOfType(tokens.IDENT).token.text)) + + left_ident = dot.children[0] + right_ident = dot.children[1] + + # Change AST + arg_list.children.remove(format.parent) + dot.children.remove(left_ident) + dot.children.remove(right_ident) + dot.addChild(format) + dot.addChild(right_ident) + + +def typeSub(node, config): + """ Maps specific, well-known Java types to their Python counterparts. + + See the `java2python.config.default` module for the default type + mapping and further discussion. + """ + ident = node.token.text + for subs in reversed(config.every('typeSubs', {})): + if ident in subs: + node.token.text = subs[ident] + return diff --git a/build/lib/java2python/__init__.py b/build/lib/java2python/__init__.py new file mode 100644 index 0000000..b3012d9 --- /dev/null +++ b/build/lib/java2python/__init__.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python -> top-level package marker. + + diff --git a/build/lib/java2python/compiler/__init__.py b/build/lib/java2python/compiler/__init__.py new file mode 100644 index 0000000..4325201 --- /dev/null +++ b/build/lib/java2python/compiler/__init__.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.compiler package marker. +# +# This module provides a simpler facade over the rest of the compiler +# subpackage. Client code should use the values in this module +# instead of using directly referencing items within the subpackage. + +from java2python.compiler.block import Module +from java2python.lang import Lexer, Parser, StringStream, TokenStream, TreeAdaptor + + +def buildAST(source): + """ Returns an AST for the given source. """ + lexer = Lexer(StringStream(source)) + parser = Parser(TokenStream(lexer)) + adapter = TreeAdaptor(lexer, parser) + parser.setTreeAdaptor(adapter) + scope = parser.javaSource() + return scope.tree + + +def buildJavaDocAST(source): + """ Returns an AST for the given javadoc source. """ + from java2python.lang.JavaDocLexer import JavaDocLexer + from java2python.lang.JavaDocParser import JavaDocParser + lexer = JavaDocLexer(StringStream(source)) + parser = JavaDocParser(TokenStream(lexer)) + scope = parser.commentBody() + return scope.tree + + +def transformAST(tree, config): + """ Walk the tree and apply the transforms in the config. """ + for selector, call in config.last('astTransforms', ()): + for node in selector.walk(tree): + call(node, config) diff --git a/build/lib/java2python/compiler/block.py b/build/lib/java2python/compiler/block.py new file mode 100644 index 0000000..7d8c40f --- /dev/null +++ b/build/lib/java2python/compiler/block.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.compiler.block -> Visitors combined with templates. +# +# This module defines classes which combine AST walking with source +# generation. We've put these two behaviors into separate modules, +# java2python.compiler.template for creating source code, and +# java2python.compiler.visitor for walking ANTLR trees. +# +# Each of the classes depends on the behavior of its counterpart. +# This means they're very tightly coupled and that the classes are not +# very reusable. The module split does allow for grouping of related +# methods and does hide the cluttered code. + +from sys import modules +from java2python.compiler import template, visitor + + +def addTypeToModule(xxx_todo_changeme): + """ Constructs and adds a new type to this module. """ + (className, factoryName) = xxx_todo_changeme + bases = (getattr(template, className), getattr(visitor, className)) + newType = type(className, bases, dict(factoryName=factoryName)) + setattr(modules[__name__], className, newType) + + +list(map(addTypeToModule, ( + ('Annotation', 'at'), + ('Class', 'klass'), + ('Comment', 'comment'), + ('Enum', 'enum'), + ('Expression', 'expr'), + ('Interface', 'interface'), + ('Method', 'method'), + ('MethodContent', 'methodContent'), + ('Module', 'module'), + ('Statement', 'statement'), + ) + )) diff --git a/build/lib/java2python/compiler/template.py b/build/lib/java2python/compiler/template.py new file mode 100644 index 0000000..290f4c3 --- /dev/null +++ b/build/lib/java2python/compiler/template.py @@ -0,0 +1,492 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.compiler.template -> Base classes for writing Python source. +# +# This module defines templates -- chunks of Python source code -- +# that can be easily manipulated and written. Each class provides +# string methods (__str__, dump, dumps) for serializing instances as a +# source code string. +# +# The Factory class is used to to provide runtime lookup of concrete +# classes; this was necessary to accommodate splitting the behavior of +# the compiler subpackage into multiple modules. So-called patterns +# are usually a sign of a bad design and/or language limitations, and +# this case is no exception. + +from io import StringIO +from functools import partial +from itertools import chain + +from java2python.lang import tokens +from java2python.lib import FS, colors +from functools import reduce + + +class Factory(object): + """ Factory -> creates pre-configured callables for new block instances. + + Both templates and visitors use an instance of this class as a simple + interface to create new blocks like this: + + stat = self.factory.statement() + + The `__getattr__` method does the work of looking up and returning + the appropriate block class. The lookup depends on the types + registry, which is populated by the FactoryTypeDetector metaclass + below. + + One important thing to realize regarding this factory is this: + when an attribute is requested (`self.factory.expr` for example), + the factory locates the type and returns a constructor for it with + the config object pre-applied. + + """ + types = {} + + def __init__(self, config): + self.config = config + + def __getattr__(self, name): + try: + return partial(self.types[name], self.config) + except (KeyError, ): + raise AttributeError('Factory missing "{0}" type.'.format(name)) + + +class FactoryTypeDetector(type): + """ FactoryTypeDetector -> detects factory-creatable types as they are defined. + + As subclasses are created they are checked for an attribute called + `factoryName`. If present, that key is used to populate the + type registry in the Factory class. + + Note that the actual subclasses are not created here (templates and + visitors do not specify a `factoryName`). Actual factory types are created + in `java2python.compiler.block`. This is because we're after not + templates or visitors, but rather visitors combined with templates (aka + blocks). Refer to the `blocks` module for the specific factory + type names. + + """ + def __init__(cls, name, bases, namespace): + try: + Factory.types[cls.factoryName] = cls + except (AttributeError, ): + pass + + +class Base(object, metaclass=FactoryTypeDetector): + """ Base -> base class for formatting Python output. + + This class defines a large set of attributes and methods for the + other concrete templates defined below. The items defined here + can be grouped as follows: + + * References + + This class defines `bases`, `children`, `decorators`, etc. for + tracking the relationship between this instance and other blocks. + + * Type Information + + This class defines many is-A properties, such as isClass, + isModule, isVoid, etc. Subclasses typically override one or more + of these with an attribute or property. + + * Configuration + + This class provides utility methods for retrieving values from the + runtime configuration. See the definition of `configHandler` and + `configHandlers` for details. + + * Serialization + + This class provides a default implementation for subclasses to + serialize their instances as Python source code strings. Notably, + the `__str__` method is provided, which in turn defers most of its + work to the `dumps` method. Subclasses provide different + implementations of these methods where needed. + + Also, the `__repr__` method is defined by this class for printing + a the template as tree for debugging. + + """ + isAnnotation = isClass = isComment = isEnum = isExpression = \ + isInterface = isMethod = isModule = isStatement = False + + def __init__(self, config, name=None, type=None, parent=None): + self.bases = [] + self.children = [] + self.config = config + self.decorators = [] + self.overloaded = None + self.factory = Factory(config) + self.modifiers = [] + self.name = name + self.parameters = [] + self.parent = parent + self.type = type + self.variables = [] + if parent: + parent.children.append(self) + + def __repr__(self): + """ Returns the debug string representation of this template. """ + name = colors.white('name:') + colors.cyan(self.name) if self.name else '' + parts = [colors.green(self.typeName), name] + if self.type: + parts.append(colors.white('type:') + colors.cyan(self.type)) + if self.modifiers: + parts.append(colors.white('modifiers:') + colors.cyan(','.join(self.modifiers))) + return ' '.join(parts) + + def __str__(self): + """ Returns the Python source code representation of this template. """ + handlers = self.configHandlers('Output') + return reduce(lambda v, func:func(self, v), handlers, self.dumps(-1)) + + def adopt(self, child, index=-1): + """ Adds child to this objecs children and sets the childs parent. """ + self.children.insert(index, child) + child.parent = self + + def altIdent(self, name): + """ Returns an alternate identifier for the one given. """ + for klass in self.parents(lambda v:v.isClass): + if name in klass.variables: + try: + method = next(self.parents(lambda v:v.isMethod)) + except (StopIteration, ): + return name + if name in [p['name'] for p in method.parameters]: + return name + if name in method.variables: + return name + return ('cls' if method.isStatic else 'self') + '.' + name + return name + + def configHandler(self, part, suffix='Handler', default=None): + """ Returns the config handler for this type of template. """ + name = '{0}{1}{2}'.format(self.typeName, part, suffix) + return self.config.last(name, default) + + def configHandlers(self, part, suffix='Handlers'): + """ Returns config handlers for this type of template """ + name = '{0}{1}{2}'.format(self.typeName, part, suffix) + return map(self.toIter, chain(*self.config.every(name, []))) + + def dump(self, fd, level=0): + """ Writes the Python source code for this template to the given file. """ + indent, isNotNone = level * self.indent, lambda x:x is not None + lineFormat = '{0}{1}\n'.format + for line in filter(isNotNone, self.iterPrologue()): + line = lineFormat(indent, line) + fd.write(line if line.strip() else '\n') + for item in filter(isNotNone, self.iterHead()): + item.dump(fd, level+1) + for item in self.iterBody(): + item.dump(fd, level+1) + for line in filter(isNotNone, self.iterEpilogue()): + line = lineFormat(indent, line) + fd.write(line if line.strip() else '\n') + + def dumps(self, level=0): + """ Dumps this template to a string. """ + fd = StringIO() + self.dump(fd, level) + return fd.getvalue() + + def dumpRepr(self, fd, level=0): + """ Writes a debug string for this template to the given file. """ + indent, default = self.indent, lambda x, y:None + fd.write('{0}{1!r}\n'.format(indent*level, self)) + for child in filter(None, self.children): + getattr(child, 'dumpRepr', default)(fd, level+1) + + @property + def indent(self): + """ Returns the indent string for this item. """ + return self.config.last('indentPrefix', ' ') + + @property + def isPublic(self): + """ True if this item is static. """ + return 'public' in self.modifiers + + @property + def isStatic(self): + """ True if this item is static. """ + return 'static' in self.modifiers + + @property + def isVoid(self): + """ True if this item is void. """ + return 'void' == self.type + + def iterPrologue(self): + """ Yields the items in the prologue of this template. """ + return chain(*(h(self) for h in self.configHandlers('Prologue'))) + + def iterHead(self): + """ Yields the items in the head of this template. """ + items = chain(*(h(self) for h in self.configHandlers('Head'))) + return map(self.toExpr, items) + + def iterBody(self): + """ Yields the items in the body of this template. """ + return iter(self.children) + + def iterEpilogue(self): + """ Yields the items in the epilogue of this template. """ + return chain(*(h(self) for h in self.configHandlers('Epilogue'))) + + def makeParam(self, name, type, **kwds): + """ Creates a parameter as a mapping. """ + param = dict(name=name, type=type) + if 'default' in kwds: + param['default'] = kwds['default'] + return param + + def parents(self, pred=lambda v:True): + """ Yield each parent in the family tree. """ + while self: + if pred(self): + yield self + self = self.parent + + def find(self, pred=lambda v:True): + """ Yield each child in the family tree. """ + for child in self.children: + if pred(child): + yield child + if hasattr(child, 'find'): + for value in child.find(pred): + yield value + + @property + def className(self): + """ Returns the name of the class of this item. """ + return self.__class__.__name__ + + @property + def typeName(self): + """ Returns the name of this template type. """ + return self.className.lower() + + def toExpr(self, value): + """ Returns an expression for the given value if it is a string. """ + try: + return self.factory.expr(left=value+'') + except (TypeError, ): + return value + + def toIter(self, value): + """ Returns an iterator for the given value if it is a string. """ + try: + value + '' + except (TypeError, ): + return value + else: + def wrapper(*a, **b): + yield value + return wrapper + + +class Expression(Base): + """ Expression -> formatting for Python expressions. """ + + isExpression = True + + def __init__(self, config, left='', right='', fs=FS.lr, parent=None, tail=''): + super(Expression, self).__init__(config, parent=parent) + self.left, self.right, self.fs, self.tail = left, right, fs, tail + + def __repr__(self): + """ Returns the debug string representation of this template. """ + parts, parent, showfs = [colors.blue(self.typeName)], self.parent, True + if isinstance(self.left, str) and self.left: + parts.append(colors.white('left:') + colors.yellow(self.left)) + showfs = False + if isinstance(self.right, str) and self.right: + parts.append(colors.white('right:') + colors.yellow(self.right)) + showfs = False + if self.modifiers: + parts.append(colors.white('modifiers:') + colors.cyan(','.join(self.modifiers))) + if self.type: + parts.append(colors.white('type:') + colors.cyan(self.type)) + if showfs: + parts.append(colors.white('format:') + colors.yellow(self.fs)) + if self.tail: + parts.append(colors.white('tail:') + colors.black(self.tail)) + return ' '.join(parts) + + def __str__(self): + """ Returns the Python source code representation of this template. """ + return self.fs.format(left=self.left, right=self.right) + self.tail + + def dump(self, fd, level=0): + """ Writes the Python source code for this template to the given file. """ + line = '{0}{1}\n'.format(self.indent*level, self) + fd.write(line if line.strip() else '\n') + + def dumpRepr(self, fd, level=0): + """ Writes a debug string for this template to the given file. """ + fd.write('{0}{1!r}\n'.format(self.indent*level, self)) + for obj in (self.left, self.right): + dumper = getattr(obj, 'dumpRepr', lambda x, y:None) + dumper(fd, level+1) + + @property + def isComment(self): + """ True if this expression is a comment. """ + try: + return self.left.strip().startswith('#') + except (AttributeError, ): + return False + + +class Comment(Expression): + """ Comment -> formatting for Python comments. """ + + isComment = True + + def __repr__(self): + """ Returns the debug string representation of this comment. """ + parts = [colors.white(self.typeName+':'), + colors.black(self.left) + colors.black(self.right) + colors.black(self.tail), ] + return ' '.join(parts) + + + +class Statement(Base): + """ Statement -> formatting for Python statements. """ + + isStatement = True + + def __init__(self, config, keyword, fs=FS.lr, parent=None): + super(Statement, self).__init__(config, parent=parent) + self.keyword = keyword + self.expr = self.factory.expr(left=keyword, fs=fs) + self.expr.parent = self + + def __repr__(self): + """ Returns the debug string representation of this statement. """ + parts = [colors.green(self.typeName), colors.white('keyword:')+colors.cyan(self.keyword)] + return ' '.join(parts) + + def iterPrologue(self): + """ Yields the keyword (and clause, if any) for this statement . """ + yield self.expr + + +class Module(Base): + """ Module -> formatting for Python modules. """ + isModule = True + + def iterBody(self): + """ Yields the items in the body of this template. """ + blank, prev = self.factory.expr(), None + for child in super(Module, self).iterBody(): + if prev and not prev.isComment: + yield blank + if prev and prev.isClass and child and child.isClass: + yield blank + yield child + prev = child + + +class ClassMethodSharedMixin(object): + """ ClassMethodSharedMixin -> shared methods for Class and Method types. """ + + def iterPrologue(self): + """ Yields the items in the prologue of this template. """ + prologue = super(ClassMethodSharedMixin, self).iterPrologue() + return chain(prologue, self.decorators, self.iterDecl()) + + +class Class(ClassMethodSharedMixin, Base): + """ Class -> formatting for Python classes. """ + isClass = True + + def iterBases(self): + """ Yields the base classes for this type. """ + return chain(*(h(self) for h in self.configHandlers('Base'))) + + def iterDecl(self): + """ Yields the declaration for this type. """ + bases = ', '.join(self.iterBases()) + bases = '({0})'.format(bases) if bases else '' + yield 'class {0}{1}:'.format(self.name, bases) + + def iterBody(self): + """ Yields the items in the body of this template. """ + def sprinkleBlanks(body): + blank, prev = self.factory.expr(), None + for item in body: + if prev: + if type(prev) != type(item) and not prev.isComment: + yield blank + elif item.isMethod and prev.isMethod: + yield blank + elif prev.isClass: + yield blank + yield item + prev = item + for handler in self.configHandlers('PostWalk'): + handler(self) + head = any(self.iterHead()) + body = list(super(Class, self).iterBody()) + tail = () if (body or head) else [self.factory.expr(left='pass')] + body = () if tail else sprinkleBlanks(body) + return chain(body, tail) + + +class Annotation(Class): + """ Annotation -> formatting for annotations converted to Python classes. """ + isAnnotation = True + + def __init__(self, config, name=None, type=None, parent=None): + super(Annotation, self).__init__(config, name, type, parent) + + +class Enum(Class): + """ Enum -> formatting for enums converted to Python classes. """ + isEnum = True + + +class Interface(Class): + """ Interface -> formatting for interfaces converted to Python classes. """ + isInterface = True + + +class MethodContent(Base): + """ MethodContent -> formatting for content within Python methods. """ + + +class Method(ClassMethodSharedMixin, Base): + """ Method -> formatting for Python methods. """ + isMethod = True + + def __init__(self, config, name=None, type=None, parent=None): + super(Method, self).__init__(config, name, type, parent) + self.parameters.append(self.makeParam('self', 'object')) + + def iterParams(self): + """ Yields the parameters of this method template. """ + return chain(*(h(self) for h in self.configHandlers('Param'))) + + def iterDecl(self): + """ Yields the declaration for this method template. """ + def formatParam(p): + if 'default' in p: + return '{0}={1}'.format(p['name'], p['default']) + return p['name'] + params = ', '.join(formatParam(param) for param in self.iterParams()) + yield 'def {0}({1}):'.format(self.name, params) + + def iterBody(self): + """ Yields the items in the body of this method template. """ + head = any(self.iterHead()) + body = list(super(Method, self).iterBody()) + tail = () if (body or head) else [self.factory.expr(left='pass')] + return chain(body, tail) diff --git a/build/lib/java2python/compiler/visitor.py b/build/lib/java2python/compiler/visitor.py new file mode 100644 index 0000000..38b6564 --- /dev/null +++ b/build/lib/java2python/compiler/visitor.py @@ -0,0 +1,900 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.compiler.visitor -> Base classes for walking ASTs. +# +# This module defines classes that accept nodes during AST walking. These +# classes are the primary source of the language translation semantics as +# implemented by java2python. +# +# These classes implement the node handling behavior of the block classes built +# at runtime. These classes use their factory callable more often than their +# template counterparts; during walking, the typical behavior is to either define +# the specific Python source, or to defer it to another block, or both. + + +from functools import reduce, partial +from itertools import filterfalse, tee +from logging import debug, warn +from re import compile as recompile, sub as resub + +from java2python.lang import tokens +from java2python.lib import FS + + +class Memo(object): + """ Memo -> AST walking luggage. """ + + def __init__(self): + self.comments, self.last = set(), 0 + + +class Base(object): + """ Base -> Parent class for AST visitors. """ + + commentSubs = list(map(recompile, ['^\s*/(\*)+', '(\*)+/\s*$', '^\s*//'])) + + def accept(self, node, memo): + """ Accept a node, possibly creating a child visitor. """ + tokType = tokens.map.get(node.token.type) + missing = lambda node, memo:self + call = getattr(self, 'accept{0}'.format(tokens.title(tokType)), missing) + if call is missing: + debug('no visitor accept method for %s', tokType) + return call(node, memo) + + def insertComments(self, tmpl, tree, index, memo): + """ Add comments to the template from tokens in the tree. """ + prefix = self.config.last('commentPrefix', '# ') + cache, parser, comTypes = memo.comments, tree.parser, tokens.commentTypes + comNew = lambda t:t.type in comTypes and (t.index not in cache) + + for tok in filter(comNew, parser.input.tokens[memo.last:index]): + cache.add(tok.index) + + # loop over parents until we find the top expression + base = tmpl + while base: + if base and base.parent and base.parent.isExpression: + base = base.parent + else: + break + + if hasattr(base, 'tail') and tok.line==parser.input.tokens[index].line: + base.tail += prefix if not base.tail.startswith(prefix) else '' + base.tail += ''.join(self.stripComment(tok.text)) + else: + for line in self.stripComment(tok.text): + self.factory.comment(left=prefix, right=line, parent=self) + memo.last = index + + def stripComment(self, text): + """ Regex substitutions for comments; removes comment characters. """ + subText = lambda value, regex:resub(regex, '', value) + for text in filter(str.strip, text.split('\n')): + yield reduce(subText, self.commentSubs, text) + + def walk(self, tree, memo=None): + """ Depth-first visiting of the given AST. """ + if not tree: + return + memo = Memo() if memo is None else memo + comIns = self.insertComments + comIns(self, tree, tree.tokenStartIndex, memo) + visitor = self.accept(tree, memo) + if visitor: + for child in tree.children: + visitor.walk(child, memo) + comIns(visitor, child, child.tokenStopIndex, memo) + comIns(self, tree, tree.tokenStopIndex, memo) + if tree.isJavaSource: + comIns(self, tree, len(tree.parser.input.tokens), memo) + # fixme: we're calling the mutators far too frequently instead + # of only once per object after its walk is finished. + for handler in self.configHandlers('PostWalk', suffix='Mutators'): + handler(self) + + def zipWalk(self, nodes, visitors, memo): + """ Walk the given nodes zipped with the given visitors. """ + for node, visitor in zip(nodes, visitors): + visitor.walk(node, memo) + + def nodeTypeToString(self, node): + """ Returns the TYPE or QUALIFIED_TYPE_IDENT of the given node. """ + alt = self.altIdent + ntype = node.firstChildOfType(tokens.TYPE) + nnext = ntype.children[0] + if nnext.type == tokens.QUALIFIED_TYPE_IDENT: + names = [alt(t.text) for t in nnext.childrenOfType(tokens.IDENT)] + stype = '.'.join(names) + else: + stype = nnext.text + return alt(stype) + + +class TypeAcceptor(object): + """ TypeAcceptor -> shared visitor method(s) for type declarations. """ + + def makeAcceptType(ft): + """ Creates an accept function for the given factory type. """ + def acceptType(self, node, memo): + """ Creates and returns a new template for a type. """ + try: + name = node.firstChildOfType(tokens.IDENT).text + except (AttributeError, ): + return + self.variables.append(name) + return getattr(self.factory, ft)(name=name, parent=self) + return acceptType + + acceptAt = makeAcceptType('at') + acceptClass = makeAcceptType('klass') + acceptEnum = makeAcceptType('enum') + _acceptInterface = makeAcceptType('interface') + + def acceptInterface(self, node, memo): + module = next(self.parents(lambda x:x.isModule)) + module.needsAbstractHelpers = True + return self._acceptInterface(node, memo) + + +class Module(TypeAcceptor, Base): + """ Module -> accepts AST branches for module-level objects. """ + + def makeAcceptHandledDecl(part): + """ Creates an accept function for a decl to be processed by a handler. """ + def acceptDecl(self, node, memo): + """ Processes a decl by creating a new template expression. """ + expr = self.factory.expr() + expr.walk(node.firstChild(), memo) + handler = self.configHandler(part) + if handler: + handler(self, expr) + return acceptDecl + + acceptImport = makeAcceptHandledDecl('ImportDeclaration') + acceptPackage = makeAcceptHandledDecl('PackageDeclaration') + + +class ModifiersAcceptor(object): + """ ModifiersAcceptor -> shared behavior of classes and methods. """ + + def acceptModifierList(self, node, memo): + """ Accept and process class and method modifiers. """ + isAnno = lambda token:token.type==tokens.AT + for ano in filter(isAnno, node.children): + self.nodesToAnnos(ano, memo) + for mod in filterfalse(isAnno, node.children): + self.nodesToModifiers(mod, node) + return self + + def nodesToAnnos(self, branch, memo): + """ Convert the annotations in the given branch to a decorator. """ + name = branch.firstChildOfType(tokens.IDENT).text + init = branch.firstChildOfType(tokens.ANNOTATION_INIT_BLOCK) + if not init: + deco = self.factory.expr(left=name, fs='@{left}()') + else: + defKey = init.firstChildOfType(tokens.ANNOTATION_INIT_DEFAULT_KEY) + if defKey: + deco = self.factory.expr(left=name, fs='@{left}({right})') + deco.right = right = self.factory.expr(parent=deco) + right.walk(defKey.firstChild(), memo) + else: + deco = self.factory.expr(left=name, fs='@{left}({right})') + arg = deco.right = self.factory.expr(parent=deco) + keys = init.firstChildOfType(tokens.ANNOTATION_INIT_KEY_LIST) + for child in keys.children: + fs, expr = child.text + '={right}', child.firstChild() + fs += (', ' if child is not keys.children[-1] else '') + arg.left = self.factory.expr(fs=fs, parent=arg) + arg.left.walk(expr, memo) + arg.right = arg = self.factory.expr(parent=arg) + self.decorators.append(deco) + + def nodesToModifiers(self, branch, root): + """ Convert the modifiers in the given branch to template modifiers. """ + if root.parentType in tokens.methodTypes: + self.modifiers.extend(n.text for n in root.children) + if self.isStatic and self.parameters: + self.parameters[0]['name'] = 'cls' + self.modifiers.append(branch.text) + + +class VarAcceptor(object): + """ Mixin for blocks that accept handle var declarations. """ + + def acceptVarDeclaration(self, node, memo): + """ Creates a new expression for a variable declaration. """ + varDecls = node.firstChildOfType(tokens.VAR_DECLARATOR_LIST) + for varDecl in varDecls.childrenOfType(tokens.VAR_DECLARATOR): + ident = varDecl.firstChildOfType(tokens.IDENT) + self.variables.append(ident.text) + + identExp = self.factory.expr(left=ident.text, parent=self) + identExp.type = self.nodeTypeToString(node) + if node.firstChildOfType(tokens.MODIFIER_LIST): + identExp.modifiers = [child.text for child in node.firstChildOfType(tokens.MODIFIER_LIST).children] + + declExp = varDecl.firstChildOfType(tokens.EXPR) + assgnExp = identExp.pushRight(' = ') + + declArr = varDecl.firstChildOfType(tokens.ARRAY_INITIALIZER) + if declExp: + assgnExp.walk(declExp, memo) + elif declArr: + assgnExp.right = exp = self.factory.expr(fs='['+FS.lr+']', parent=identExp) + children = list(declArr.childrenOfType(tokens.EXPR)) + for child in children: + fs = FS.lr if child is children[-1] else FS.lr + ', ' + exp.left = self.factory.expr(fs=fs, parent=identExp) + exp.left.walk(child, memo) + exp.right = exp = self.factory.expr(parent=identExp) + else: + if node.firstChildOfType(tokens.TYPE).firstChildOfType(tokens.ARRAY_DECLARATOR_LIST): + val = assgnExp.pushRight('[]') + else: + if node.firstChildOfType(tokens.TYPE).firstChild().type != tokens.QUALIFIED_TYPE_IDENT: + val = assgnExp.pushRight('{0}()'.format(identExp.type)) + else: + val = assgnExp.pushRight('None') + return self + + +class Class(VarAcceptor, TypeAcceptor, ModifiersAcceptor, Base): + """ Class -> accepts AST branches for class-level objects. """ + + def nodeIdentsToBases(self, node, memo): + """ Turns node idents into template bases. """ + idents = node.findChildrenOfType(tokens.IDENT) + self.bases.extend(n.text for n in idents) + + acceptExtendsClause = nodeIdentsToBases + acceptImplementsClause = nodeIdentsToBases + + def acceptAt(self, node, memo): + """ Accept and ignore an annotation declaration. """ + # this overrides the TypeAcceptor implementation and + # ignores AT tokens; they're sent within the class modifier + # list and we have no use for them here. + + def acceptConstructorDecl(self, node, memo): + """ Accept and process a constructor declaration. """ + method = self.factory.method(name='__init__', type=self.name, parent=self) + superCalls = node.findChildrenOfType(tokens.SUPER_CONSTRUCTOR_CALL) + if not any(superCalls) and any(self.bases): + # from the java tutorial: + # Note: If a constructor does not explicitly invoke a + # superclass constructor, the Java compiler automatically + # inserts a call to the no-argument constructor of the + # superclass. + fs = 'super(' + FS.r + ', self).__init__()' + self.factory.expr(fs=fs, right=self.name, parent=method) + return method + + def acceptFunctionMethodDecl(self, node, memo): + """ Accept and process a typed method declaration. """ + ident = node.firstChildOfType(tokens.IDENT) + type = node.firstChildOfType(tokens.TYPE).children[0].text + mods = node.firstChildOfType(tokens.MODIFIER_LIST) + self.variables.append(ident.text) + return self.factory.method(name=ident.text, type=type, parent=self) + + def acceptVoidMethodDecl(self, node, memo): + """ Accept and process a void method declaration. """ + ident = node.firstChildOfType(tokens.IDENT) + mods = node.firstChildOfType(tokens.MODIFIER_LIST) + self.variables.append(ident.text) + return self.factory.method(name=ident.text, type='void', parent=self) + + +class Annotation(Class): + """ Annotation -> accepts AST branches for Java annotations. """ + + def acceptAnnotationTopLevelScope(self, node, memo): + """ Accept and process an annotation scope. """ + # We're processing the entire annotation top level scope here + # so as to easily find all of the default values and construct + # the various python statements in one pass. + args = [] + for child in node.children: + if child.type == tokens.ANNOTATION_METHOD_DECL: + mods, type, ident = child.children[0:3] + type, name = type.children[0].text, ident.text + meth = self.factory.method(parent=self, name=name, type=type) + meth.factory.expr(fs='return self._{left}', parent=meth, left=name) + default = child.children[3] if len(child.children) > 3 else None + args.append((name, type, default)) + elif child.type == tokens.VAR_DECLARATION: + self.acceptVarDeclaration(child, memo) + else: + self.walk(child, memo) + self.addCall(args, memo) + self.addInit(args, memo) + self.children.sort(lambda a, b:-1 if a.name == '__call__' else 0) + self.children.sort(lambda a, b:-1 if a.name == '__init__' else 0) + + def addInit(self, args, memo): + """ Make an __init__ function in this annotation class. """ + meth = self.factory.method(parent=self, name='__init__') + factory = partial(meth.factory.expr, fs='self._{left} = {right}', parent=meth) + for name, type, default in args: + if default is not None: + expr = self.factory.expr() + expr.walk(default, memo) + else: + expr = None + meth.parameters.append(self.makeParam(name, type, default=expr)) + factory(left=name, right=name) + + def addCall(self, args, memo): + """ Make a __call__ function in this class (so it's a decorator). """ + meth = self.factory.method(parent=self, name='__call__') + meth.parameters.append(self.makeParam('obj', 'object')) + factory = partial(self.factory.expr, parent=meth) + factory(fs='setattr(obj, self.__class__.__name__, self)') + factory(fs='return obj') + + +class Enum(Class): + """ Enum -> accepts AST branches for Java enums. """ + + def acceptEnumTopLevelScope(self, node, memo): + """ Accept and process an enum scope """ + idents = node.childrenOfType(tokens.IDENT) + factory = self.factory.expr + handler = self.configHandler('Value') + setFs = lambda v:'{0}.{1} = {2}'.format(self.name, v, self.name) + for index, ident in enumerate(idents): + args = list(ident.findChildrenOfType(tokens.ARGUMENT_LIST)) + if args: + call = factory(left=setFs(ident), parent=self.parent) + call.right = arg = factory(fs='('+FS.lr+')') + argl = ident.firstChildOfType(tokens.ARGUMENT_LIST) + exprs = list(argl.findChildrenOfType(tokens.EXPR)) + for expr in exprs: + fs = FS.r + ('' if expr is exprs[-1] else ', ') + arg.left = factory(fs=fs) + arg.left.walk(expr, memo) + arg.right = arg = factory() + else: + expr = factory(fs=ident.text+' = '+FS.r, parent=self) + expr.pushRight(handler(self, index, ident.text)) + return self + + +class Interface(Class): + """ Interface -> accepts AST branches for Java interfaces. """ + + +class MethodContent(VarAcceptor, Base): + """ MethodContent -> accepts trees for blocks within methods. """ + + def acceptAssert(self, node, memo): + """ Accept and process an assert statement. """ + assertStat = self.factory.statement('assert', fs=FS.lsr, parent=self) + assertStat.expr.walk(node.firstChild(), memo) + + def acceptBreak(self, node, memo): + """ Accept and process a break statement. """ + # possible parents of a break statement: switch, while, do, for + # we want to skip inserting a break statement if we're inside a switch. + insert, ok_types = True, [tokens.WHILE, tokens.DO, tokens.FOR] + for parent in node.parents(): + if parent.type == tokens.SWITCH: + insert = False + break + if parent.type in ok_types: + break + if insert: + if len(node.children): + warn('Detected unhandled break statement with label; generated code incorrect.') + breakStat = self.factory.statement('break', parent=self) + + def acceptCatch(self, node, memo): + """ Accept and process a catch statement. """ + decl = node.firstChildOfType(tokens.FORMAL_PARAM_STD_DECL) + dtype = decl.firstChildOfType(tokens.TYPE) + tnames = dtype.findChildrenOfType(tokens.IDENT) + cname = '.'.join(n.text for n in tnames) + cvar = decl.firstChildOfType(tokens.IDENT) + block = node.firstChildOfType(tokens.BLOCK_SCOPE) + if not block.children: + self.factory.expr(left='pass', parent=self) + self.expr.fs = FS.lsrc + self.expr.right = self.factory.expr(fs=FS.l+' as '+FS.r, left=cname, right=cvar) + self.walk(block, memo) + + + def acceptContinue(self, node, memo): + """ Accept and process a continue statement. """ + parent = next(node.parents(lambda x: x.type in {tokens.FOR, tokens.FOR_EACH, tokens.DO, tokens.WHILE})) + if parent.type == tokens.FOR: + updateStat = self.factory.expr(parent=self) + updateStat.walk(parent.firstChildOfType(tokens.FOR_UPDATE), memo) + contStat = self.factory.statement('continue', fs=FS.lsr, parent=self) + if len(node.children): + warn('Detected unhandled continue statement with label; generated code incorrect.') + + def acceptDo(self, node, memo): + """ Accept and process a do-while block. """ + # DO - BLOCK_SCOPE - PARENTESIZED_EXPR + blkNode, parNode = node.children + whileStat = self.factory.statement('while', fs=FS.lsrc, parent=self) + whileStat.expr.right = 'True' + whileStat.walk(blkNode, memo) + fs = FS.l+ ' ' + 'not ({right}):' + ifStat = self.factory.statement('if', fs=fs, parent=whileStat) + ifStat.expr.walk(parNode, memo) + breakStat = self.factory.statement('break', parent=ifStat) + + goodExprParents = ( + tokens.BLOCK_SCOPE, + tokens.CASE, + tokens.DEFAULT, + tokens.FOR_EACH, + tokens.METHOD_CALL, + tokens.ARGUMENT_LIST, + ) + + def acceptExpr(self, node, memo): + """ Creates a new expression. """ + # this works but isn't precise + if node.parentType in self.goodExprParents: + return self.factory.expr(parent=self) + + def acceptFor(self, node, memo): + """ Accept and process a 'for' statement. """ + self.walk(node.firstChildOfType(tokens.FOR_INIT), memo) + whileStat = self.factory.statement('while', fs=FS.lsrc, parent=self) + cond = node.firstChildOfType(tokens.FOR_CONDITION) + if not cond.children: + whileStat.expr.right = 'True' + else: + whileStat.expr.walk(cond, memo) + whileBlock = self.factory.methodContent(parent=self) + if not node.firstChildOfType(tokens.BLOCK_SCOPE).children: + self.factory.expr(left='pass', parent=whileBlock) + else: + whileBlock.walk(node.firstChildOfType(tokens.BLOCK_SCOPE), memo) + updateStat = self.factory.expr(parent=whileBlock) + updateStat.walk(node.firstChildOfType(tokens.FOR_UPDATE), memo) + + def acceptForEach(self, node, memo): + """ Accept and process a 'for each' style statement. """ + forEach = self.factory.statement('for', fs=FS.lsrc, parent=self) + identExpr = forEach.expr.right = self.factory.expr(fs=FS.l+' in '+FS.r) + identExpr.walk(node.firstChildOfType(tokens.IDENT), memo) + inExpr = identExpr.right = self.factory.expr() + inExpr.walk(node.firstChildOfType(tokens.EXPR), memo) + forBlock = self.factory.methodContent(parent=self) + forBlock.walk(node.children[4], memo) + + def acceptIf(self, node, memo): + """ Accept and process an if statement. """ + children = node.children + ifStat = self.factory.statement('if', fs=FS.lsrc, parent=self) + ifStat.expr.walk(children[0], memo) + + if node.children[1].type == tokens.EXPR: + ifBlock = self.factory.expr(parent=ifStat) + ifBlock.walk(node.children[1], memo) + else: + ifBlock = self.factory.methodContent(parent=self) + ifBlock.walk(node.children[1], memo) + + if len(children) == 3: + nextNode = children[2] + nextType = nextNode.type + + while nextType == tokens.IF: + nextStat = self.factory.statement('elif', fs=FS.lsrc, parent=self) + nextStat.expr.walk(nextNode.children[0], memo) + if nextNode.children[1].type == tokens.EXPR: + nextBlock = self.factory.expr(parent=nextStat) + else: + nextBlock = self.factory.methodContent(parent=self) + nextBlock.walk(nextNode.children[1], memo) + + try: + nextNode = nextNode.children[2] + except (IndexError, ): + nextType = None + else: + nextType = nextNode.type + + if nextType == tokens.EXPR: + elseStat = self.factory.statement('else', fs=FS.lc, parent=self) + elseBlock = self.factory.expr(parent=elseStat) + elseBlock.walk(nextNode, memo) + elif nextType: # nextType != tokens.BLOCK_SCOPE: + elseStat = self.factory.statement('else', fs=FS.lc, parent=self) + if nextNode.children: + self.factory.methodContent(parent=self).walk(nextNode, memo) + else: + self.factory.expr(left='pass', parent=elseStat) + + + def acceptSwitch(self, node, memo): + """ Accept and process a switch block. """ + # This implementation needs a lot of work to handle case + # statements without breaks, out-of-order default labels, etc. + # Given the current size and complexity, consider growing a + # Case block type. + parNode = node.firstChildOfType(tokens.PARENTESIZED_EXPR) + lblNode = node.firstChildOfType(tokens.SWITCH_BLOCK_LABEL_LIST) + caseNodes = lblNode.children + # empty switch statement + if not len(caseNodes): + return + # we have at least one node... + parExpr = self.factory.expr(parent=self) + parExpr.walk(parNode, memo) + eqFs = FS.l + ' == ' + FS.r + for caseIdx, caseNode in enumerate(caseNodes): + isDefault, isFirst = caseNode.type==tokens.DEFAULT, caseIdx==0 + + if isFirst: + caseExpr = self.factory.statement('if', fs=FS.lsrc, parent=self) + elif not isDefault: + caseExpr = self.factory.statement('elif', fs=FS.lsrc, parent=self) + elif isDefault: + caseExpr = self.factory.statement('else', fs=FS.lc, parent=self) + + if not isDefault: + right = self.factory.expr(parent=parExpr) + right.walk(caseNode.firstChildOfType(tokens.EXPR), memo) + caseExpr.expr.right = self.factory.expr(left=parExpr, right=right, fs=eqFs) + caseContent = self.factory.methodContent(parent=self) + for child in caseNode.children[1:]: + caseContent.walk(child, memo) + if not caseNode.children[1:]: + self.factory.expr(left='pass', parent=caseContent) + if isDefault: + if isFirst: + caseExpr.expr.right = 'True' + caseContent = self.factory.methodContent(parent=self) + for child in caseNode.children: + caseContent.walk(child, memo) + if not caseNode.children: + self.factory.expr(left='pass', parent=caseContent) + self.children.remove(parExpr) + + def acceptSynchronized(self, node, memo): + """ Accept and process a synchronized statement (not a modifier). """ + module = next(self.parents(lambda x:x.isModule)) + module.needsSyncHelpers = True + if node.parent.type == tokens.MODIFIER_LIST: + # Skip any synchronized modifier + return + lockName = self.configHandler('LockFunction', 'Name', 'lock_for_object') + withFs = '{left} %s({right}):' % lockName + sync = self.factory.statement('with', fs=withFs, parent=self) + sync.expr.walk(node.children[0], memo) + sync.walk(node.children[1], memo) + + def acceptThrow(self, node, memo): + """ Accept and process a throw statement. """ + throw = self.factory.statement('raise', fs=FS.lsr, parent=self) + throw.expr.walk(node.children[0], memo) + + def acceptTry(self, node, memo): + """ Accept and process a try/catch block. """ + children = node.children + tryNode = children[0] + if len(children) == 3: + catchClausesNode, finNode = children[1:3] + elif len(children) == 2: + catchClausesNode = finNode = None + if children[1].type == tokens.CATCH_CLAUSE_LIST: + catchClausesNode = children[1] + else: + finNode = children[1] + tryStat = self.factory.statement('try', fs=FS.lc, parent=self) + tryStat.walk(tryNode, memo) + if catchClausesNode: + for catchNode in catchClausesNode.children: + exStat = self.factory.statement('except', fs=FS.lsrc, parent=self) + exStat.walk(catchNode, memo) + if finNode: + finStat = self.factory.statement('finally', fs=FS.lc, parent=self) + finStat.walk(finNode, memo) + + goodReturnParents = ( + tokens.BLOCK_SCOPE, + ) + + def acceptReturn(self, node, memo): + """ Creates a new return expression. """ + # again, this works but isn't as precise as it should be + if node.parentType: # in self.goodReturnParents: + expr = self.factory.expr(left='return', parent=self) + if node.children: + expr.fs, expr.right = FS.lsr, self.factory.expr(parent=expr) + expr.right.walk(node, memo) + return expr + + def acceptWhile(self, node, memo): + """ Accept and process a while block. """ + # WHILE - PARENTESIZED_EXPR - BLOCK_SCOPE + parNode, blkNode = node.children + whileStat = self.factory.statement('while', fs=FS.lsrc, parent=self) + whileStat.expr.walk(parNode, memo) + if not blkNode.children: + self.factory.expr(left='pass', parent=whileStat) + else: + whileStat.walk(blkNode, memo) + + +class Method(ModifiersAcceptor, MethodContent): + """ Method -> accepts AST branches for method-level objects. """ + + def acceptFormalParamStdDecl(self, node, memo): + """ Accept and process a single parameter declaration. """ + ident = node.firstChildOfType(tokens.IDENT) + ptype = self.nodeTypeToString(node) + self.parameters.append(self.makeParam(ident.text, ptype)) + return self + + def acceptFormalParamVarargDecl(self, node, memo): + """ Accept and process a var arg declaration. """ + ident = node.firstChildOfType(tokens.IDENT) + param = {'name':'*{0}'.format(ident.text), 'type':'A'} + self.parameters.append(param) + return self + + +class Expression(Base): + """ Expression -> accepts trees for expression objects. """ + + def nodeTextExpr(self, node, memo): + """ Assigns node text to the left side of this expression. """ + self.left = node.text + + acceptCharacterLiteral = nodeTextExpr + acceptStringLiteral = nodeTextExpr + acceptFloatingPointLiteral = nodeTextExpr + acceptDecimalLiteral = nodeTextExpr + acceptHexLiteral = nodeTextExpr + acceptOctalLiteral = nodeTextExpr + acceptTrue = nodeTextExpr + acceptFalse = nodeTextExpr + acceptNull = nodeTextExpr + + def nodeOpExpr(self, node, memo): + """ Accept and processes an operator expression. """ + factory = self.factory.expr + self.fs = FS.l + ' ' + node.text + ' ' + FS.r + self.left, self.right = visitors = factory(parent=self), factory(parent=self) + self.zipWalk(node.children, visitors, memo) + + acceptAnd = nodeOpExpr + acceptAndAssign = nodeOpExpr + acceptAssign = nodeOpExpr + acceptDivAssign = nodeOpExpr + acceptEqual = nodeOpExpr + acceptGreaterOrEqual = nodeOpExpr + acceptGreaterThan = nodeOpExpr + acceptLessOrEqual = nodeOpExpr + acceptLessThan = nodeOpExpr + acceptMinusAssign = nodeOpExpr + acceptMod = nodeOpExpr + acceptModAssign = nodeOpExpr + acceptNotEqual = nodeOpExpr + acceptOr = nodeOpExpr + acceptOrAssign = nodeOpExpr + acceptPlusAssign = nodeOpExpr + acceptShiftLeft = nodeOpExpr + acceptShiftLeftAssign = nodeOpExpr + acceptShiftRight = nodeOpExpr + acceptShiftRightAssign = nodeOpExpr + acceptStarAssign = nodeOpExpr + acceptXor = nodeOpExpr + acceptXorAssign = nodeOpExpr + + def makeNodePreformattedExpr(fs): + """ Make an accept method for expressions with a predefined format string. """ + def acceptPreformatted(self, node, memo): + expr = self.factory.expr + self.fs = fs + self.left, self.right = vs = expr(parent=self), expr(parent=self) + self.zipWalk(node.children, vs, memo) + return acceptPreformatted + + acceptArrayElementAccess = makeNodePreformattedExpr(FS.l + '[' + FS.r + ']') + acceptDiv = makeNodePreformattedExpr(FS.l + ' / ' + FS.r) + acceptLogicalAnd = makeNodePreformattedExpr(FS.l + ' and ' + FS.r) + acceptLogicalNot = makeNodePreformattedExpr('not ' + FS.l) + acceptLogicalOr = makeNodePreformattedExpr(FS.l + ' or ' + FS.r) + acceptMinus = makeNodePreformattedExpr(FS.l + ' - ' + FS.r) + acceptNot = makeNodePreformattedExpr('~' + FS.l) + acceptPlus = makeNodePreformattedExpr(FS.l + ' + ' + FS.r) + acceptStar = makeNodePreformattedExpr(FS.l + ' * ' + FS.r) + acceptUnaryMinus = makeNodePreformattedExpr('-' + FS.l) + acceptUnaryPlus = makeNodePreformattedExpr('+' + FS.l) + + def acceptCastExpr(self, node, memo): + """ Accept and process a cast expression. """ + # If the type of casting is a primitive type, + # then do the cast, else drop it. + factory = self.factory.expr + typeTok = node.firstChildOfType(tokens.TYPE) + typeIdent = typeTok.firstChild() + typeName = typeIdent.text + if typeIdent.type == tokens.QUALIFIED_TYPE_IDENT: + typeName = typeIdent.firstChild().text + + if typeName in tokens.primitiveTypeNames: + # Cast using the primitive type constructor + self.fs = typeName + '(' + FS.r + ')' + else: + handler = self.configHandler('Cast') + if handler: + handler(self, node) + else: + warn('No handler to perform cast of non-primitive type %s.', typeName) + self.left, self.right = visitors = factory(parent=self), factory(parent=self) + self.zipWalk(node.children, visitors, memo) + + def makeAcceptPrePost(suffix, pre): + """ Make an accept method for pre- and post- assignment expressions. """ + def acceptPrePost(self, node, memo): + factory = self.factory.expr + if node.withinExpr: + name = node.firstChildOfType(tokens.IDENT).text + handler = self.configHandler('VariableNaming') + rename = handler(name) + block = next(self.parents(lambda x:x.isMethod)) + if pre: + left = name + else: + left = rename + block.adopt(factory(fs=FS.l+' = '+FS.r, left=rename, right=name)) + self.left = factory(parent=self, fs=FS.l, left=left) + block.adopt(factory(fs=FS.l + suffix, left=name)) + else: + self.fs = FS.l + suffix + self.left, self.right = vs = factory(parent=self), factory(parent=self) + self.zipWalk(node.children, vs, memo) + return acceptPrePost + + acceptPostInc = makeAcceptPrePost(' += 1', pre=False) + acceptPreInc = makeAcceptPrePost(' += 1', pre=True) + acceptPostDec = makeAcceptPrePost(' -= 1', pre=False) + acceptPreDec = makeAcceptPrePost(' -= 1', pre=True) + + def acceptBitShiftRight(self, node, memo): + """ Accept and process a bit shift right expression. """ + factory = self.factory.expr + self.fs = 'bsr(' + FS.l + ', ' + FS.r + ')' + self.left, self.right = visitors = factory(parent=self), factory() + self.zipWalk(node.children, visitors, memo) + module = next(self.parents(lambda x:x.isModule)) + module.needsBsrFunc = True + + def acceptBitShiftRightAssign(self, node, memo): + """ Accept and process a bit shift right expression with assignment. """ + factory = self.factory.expr + self.fs = FS.l + ' = bsr(' + FS.l + ', ' + FS.r + ')' + self.left, self.right = visitors = factory(parent=self), factory() + self.zipWalk(node.children, visitors, memo) + module = next(self.parents(lambda x:x.isModule)) + module.needsBsrFunc = True + + def acceptClassConstructorCall(self, node, memo): + """ Accept and process a class constructor call. """ + self.acceptMethodCall(node, memo) + typeIdent = node.firstChildOfType(tokens.QUALIFIED_TYPE_IDENT) + if typeIdent and typeIdent.children: + names = [self.altIdent(child.text) for child in typeIdent.children] + self.left = '.'.join(names) + + def acceptDot(self, node, memo): + """ Accept and process a dotted expression. """ + expr = self.factory.expr + self.fs = FS.l + '.' + FS.r + self.left, self.right = visitors = expr(parent=self), expr() + self.zipWalk(node.children, visitors, memo) + + def acceptExpr(self, node, memo): + """ Create a new expression within this one. """ + return self.pushRight() + + def acceptIdent(self, node, memo): + """ Accept and process an ident expression. """ + self.left = self.altIdent(node.text) + + def acceptInstanceof(self, node, memo): + """ Accept and process an instanceof expression. """ + self.fs = 'isinstance({right}, ({left}, ))' + self.right = self.factory.expr(parent=self) + self.right.walk(node.firstChildOfType(tokens.IDENT), memo) + self.left = self.factory.expr(parent=self) + self.left.walk(node.firstChildOfType(tokens.TYPE), memo) + + def acceptMethodCall(self, node, memo): + """ Accept and process a method call. """ + # NB: this creates one too many expression levels. + expr = self.factory.expr + self.fs = FS.l + '(' + FS.r + ')' + self.left = expr(parent=self) + self.left.walk(node.firstChild(), memo) + children = node.firstChildOfType(tokens.ARGUMENT_LIST).children + self.right = arg = expr(parent=self) + for child in children: + fs = FS.r + (', ' if child is not children[-1] else '') + arg.left = expr(fs=fs, parent=self) + arg.left.walk(child, memo) + arg.right = arg = expr(parent=self) + + skipParensParents = ( + tokens.IF, + tokens.WHILE, + tokens.SWITCH, + tokens.SYNCHRONIZED, + ) + + def acceptParentesizedExpr(self, node, memo): + if node.parent.type not in self.skipParensParents: + right = self.pushRight() + right.fs = '(' + FS.lr + ')' + return right + return self + + def acceptThisConstructorCall(self, node, memo): + """ Accept and process a 'this(...)' constructor call. """ + self.acceptMethodCall(node, memo) + self.left = 'self.__init__' + + def acceptStaticArrayCreator(self, node, memo): + """ Accept and process a static array expression. """ + self.right = self.factory.expr(fs='[None] * {left}') + self.right.left = self.factory.expr() + self.right.left.walk(node.firstChildOfType(tokens.EXPR), memo) + + def acceptSuper(self, node, memo): + """ Accept and process a super expression. """ + cls = next(self.parents(lambda c:c.isClass)) + self.right = self.factory.expr(fs='super({name}, self)'.format(name=cls.name)) + + def acceptSuperConstructorCall(self, node, memo): + """ Accept and process a super constructor call. """ + cls = next(self.parents(lambda c:c.isClass)) + fs = 'super(' + FS.l + ', self).__init__(' + FS.r + ')' + self.right = self.factory.expr(fs=fs, left=cls.name) + return self.right + + def acceptThis(self, node, memo): + """ Accept and process a 'this' expression. """ + self.pushRight('self') + + def acceptQuestion(self, node, memo): + """ Accept and process a terinary expression. """ + expr = self.factory.expr + self.fs = FS.l + ' if ' + FS.r + self.left = expr(parent=self) + self.right = expr(fs=FS.l+' else '+FS.r, parent=self) + self.right.left = expr(parent=self.right) + self.right.right = expr(parent=self.right) + visitors = (self.right.left, self.left, self.right.right) + self.zipWalk(node.children, visitors, memo) + + def acceptVoid(self, node, memo): + """ Accept and process a the void half of a void.class expression. """ + self.pushRight('None') + + def acceptClass(self, node, memo): + """ Accept and process a .class expression. """ + self.pushRight('__class__') + + def pushRight(self, value=''): + """ Creates a new right expression, sets it, and returns it. """ + self.right = self.factory.expr(left=value, parent=self) + return self.right + + +class Comment(Expression): + """ Comment -> implemented for type building in __init__.py. """ + + +class Statement(MethodContent): + """ Statement -> accept AST branches for statement objects. """ diff --git a/build/lib/java2python/config/__init__.py b/build/lib/java2python/config/__init__.py new file mode 100644 index 0000000..2aa8387 --- /dev/null +++ b/build/lib/java2python/config/__init__.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.config -> subpackage for run-time configuration. + +from functools import reduce +from imp import load_source +from os import path + + +class Config(object): + """ Config -> wraps multiple configuration modules. """ + + def __init__(self, names): + self.configs = [self.load(name) for name in names] + + def every(self, key, default=None): + """ Returns the value at the given key from each config module. """ + return [getattr(config, key, default) for config in self.configs] + + def last(self, key, default=None): + """ Returns the value at the key from the last config defining it. """ + for config in reversed(self.configs): + if hasattr(config, key): + return getattr(config, key) + return default + + @staticmethod + def load(name): + """ Imports and returns a module from dotted form or filename. """ + if path.exists(name) and path.isfile(name): + mod = load_source(str(hash(name)), name) + else: + mod = reduce(getattr, name.split('.')[1:], __import__(name)) + return mod diff --git a/build/lib/java2python/config/default.py b/build/lib/java2python/config/default.py new file mode 100644 index 0000000..92c4a27 --- /dev/null +++ b/build/lib/java2python/config/default.py @@ -0,0 +1,251 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# This is the default configuration file for java2python. Unless +# explicity disabled with the '-n' or '--nodefaults' option, the j2py +# script will import this module for runtime configuration. + +from java2python.mod import basic, transform +from java2python.lang.selector import * + + +# Leading indent character or characters. Four spaces are used +# because that is the recommendation of PEP 8. +indentPrefix = ' ' * 4 + + +# Prefix character or characters for comments. The hash+space is +# recommended by PEP 8. +commentPrefix = '# ' + + +# These values are strings or generators that yield strings +# for a module prologue. +modulePrologueHandlers = [ + basic.shebangLine, + basic.simpleDocString, + 'from __future__ import print_function', + basic.maybeBsr, + basic.maybeAbstractHelpers, + basic.maybeSyncHelpers, +] + + +# These generators yield lines for a module epilogue. +moduleEpilogueHandlers = [ + basic.scriptMainStanza, +] + + +# These generators yield (possibly modified) source strings for a +# module. The `basic.outputSubs` handler references the list of +# regular expression substitutions near the end of this module. +moduleOutputHandlers = [ + basic.outputSubs, +] + + +# These generators yield doc strings for a class. +classHeadHandlers = [ + basic.simpleDocString, +] + +methodParamHandlers = [ + basic.defaultParams, +] + +# This is the name of the callable used to construct locks for an object with +# the synchronized keyword. +methodLockFunctionName = 'lock_for_object' + +classBaseHandlers = [ + basic.defaultBases, +] + +interfaceBaseHandlers = [ + basic.defaultBases, +] + +# These generators are called after a class has been completely +# generated. The class content sorter sorts the methods of a class by +# name. It's commented out because its output differs so greatly +# from its input, and because it's really not very useful. +classPostWalkHandlers = [ + basic.moveStaticExpressions, + ## basic.classContentSort, +] + + +enumHeadHandlers = [ + basic.simpleDocString, +] + + +interfaceHeadHandlers = [ + basic.simpleDocString, + '__metaclass__ = ABCMeta', +] + + +interfacePostWalkMutators = [ +] + + +methodHeadHandlers = [ + basic.simpleDocString, +] + + +methodPrologueHandlers = [ + basic.maybeAbstractMethod, + basic.maybeClassMethod, + basic.overloadedClassMethods, + # NB: synchronized should come after classmethod + basic.maybeSynchronizedMethod, +] + + +# This handler creates enum values on enum classes after they've been +# defined. The handler tries to match Java semantics by using +# strings. Refer to the documentation for details. +enumValueHandler = basic.enumConstStrings + +# Alternatively, you can use this handler to construct enum values as +# integers. +#enumValueHandler = basic.enumConstInts + + +# When the compiler needs to make up a variable name (for example, to +# emulate assignment expressions), it calls this handler to produce a +# new one. +expressionVariableNamingHandler = basic.globalNameCounter + + +# This handler simply creates comments in the file for package +# declarations. +modulePackageDeclarationHandler = basic.commentedPackages + + +# This handler can be used instead to create __init__.py files for +# 'namespace packages' via pkgutil. +# modulePackageDeclarationHandler = basic.namespacePackages + + +# This handler is turns java imports into python imports. No mapping +# of packages is performed: +# moduleImportDeclarationHandler = basic.simpleImports + +# This import decl. handler can be used instead to produce comments +# instead of import statements: +# moduleImportDeclarationHandler = basic.commentedImports + +# The AST transformation function uses these declarations to modify an +# AST before compiling it to python source. Having these declarations +# in a config file gives clients an opportunity to change the +# transformation behavior. + +astTransforms = [ + (Type('NULL'), transform.null2None), + (Type('FALSE'), transform.false2False), + (Type('TRUE'), transform.true2True), + (Type('IDENT'), transform.keywordSafeIdent), + + (Type('DECIMAL_LITERAL'), transform.syntaxSafeDecimalLiteral), + (Type('FLOATING_POINT_LITERAL'), transform.syntaxSafeFloatLiteral), + + (Type('TYPE') > Type('BOOLEAN'), transform.typeSub), + (Type('TYPE') > Type('BYTE'), transform.typeSub), + (Type('TYPE') > Type('CHAR'), transform.typeSub), + (Type('TYPE') > Type('FLOAT'), transform.typeSub), + (Type('TYPE') > Type('INT'), transform.typeSub), + (Type('TYPE') > Type('SHORT'), transform.typeSub), + (Type('TYPE') > Type('LONG'), transform.typeSub), + (Type('TYPE') > Type('DOUBLE'), transform.typeSub), + + (Type('METHOD_CALL') > Type('DOT') > Type('IDENT', 'length'), + transform.lengthToLen), + + (Type('METHOD_CALL') > Type('DOT') > ( + Type('IDENT', 'String') + + Type('IDENT', 'format') + ), + transform.formatString), + + (Type('TYPE') > Type('QUALIFIED_TYPE_IDENT') > Type('IDENT'), + transform.typeSub), + +] + + +# not implemented: + +# minimum parameter count to trigger indentation of parameter names +# in method declarations. set to 0 to disable. +#minIndentParams = 5 + +# Specifies handler for cast operations of non-primitive types are handled +# (primitive types are automatically handled). Use basic.castDrop to leave +# cast expressions out of generated source. Use basic.castCtor to transform +# casts into constructor calls. Or you can specify a function of your own. +expressionCastHandler = basic.castDrop + + +# Values below are used by the handlers. They're here for +# convenience. + + +# module output subs. +moduleOutputSubs = [ + (r'System\.out\.println\((.*)\)', r'print(\1)'), + (r'System\.out\.print_\((.*?)\)', r'print(\1, end="")'), + (r'(.*?)\.equals\((.*?)\)', r'\1 == \2'), + (r'(.*?)\.equalsIgnoreCase\((.*?)\)', r'\1.lower() == \2.lower()'), + (r'([\w.]+)\.size\(\)', r'len(\1)'), + #(r'(\w+)\.get\((.*?)\)', r'\1[\2]'), + (r'(\s)(\S*?)(\.toString\(\))', r'\1\2.__str__()'), + (r'(\s)def toString', r'\1def __str__'), + (r'(\s)(\S*?)(\.toLowerCase\(\))', r'\1\2.lower()'), + (r'(.*?)IndexOutOfBoundsException\((.*?)\)', r'\1IndexError(\2)'), + (r'\.__class__\.getName\(\)', '.__class__.__name__'), + (r'\.getClass\(\)', '.__class__'), + (r'\.getName\(\)', '.__name__'), + (r'\.getInterfaces\(\)', '.__bases__'), + (r'String\.valueOf\((.*?)\)', r'str(\1)'), + #(r'(\s)(\S*?)(\.toString\(\))', r'\1str(\2)'), + (r'Math\.', ''), +] + + +typeSubs = { + 'Boolean' : 'bool', + 'boolean' : 'bool', + + 'Byte' : 'int', + 'byte' : 'int', + + 'Char' : 'str', + 'char' : 'str', + + 'Integer' : 'int', + 'int' : 'int', + + 'Short' : 'int', + 'short' : 'int', + + 'Long' : 'long', + 'long' : 'long', + + 'Float' : 'float', + 'float' : 'float', + + 'Double' : 'float', + 'double' : 'float', + + 'String' : 'str', + 'java.lang.String' : 'str', + + 'Object' : 'object', + + 'IndexOutOfBoundsException' : 'IndexError', + 'IOException': 'IOError', + } diff --git a/build/lib/java2python/lang/Java.g b/build/lib/java2python/lang/Java.g new file mode 100644 index 0000000..32f70b6 --- /dev/null +++ b/build/lib/java2python/lang/Java.g @@ -0,0 +1,1092 @@ +/** + * An ANTLRv3 capable Java 1.5 grammar for building ASTs. + * BSD licence + * + * Copyright (c) 2007-2008 by HABELITZ Software Developments + * + * All rights reserved. + * + * http://www.habelitz.com + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY HABELITZ SOFTWARE DEVELOPMENTS ('HSD') ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL 'HSD' BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +grammar Java; + +options { + backtrack=true; + memoize=true; + language=Python; + output=AST; + ASTLabelType=CommonTree; +} + + + +tokens { + + // operators and other special chars + + AND = '&' ; + AND_ASSIGN = '&=' ; + ASSIGN = '=' ; + AT = '@' ; + BIT_SHIFT_RIGHT = '>>>' ; + BIT_SHIFT_RIGHT_ASSIGN = '>>>=' ; + COLON = ':' ; + COMMA = ',' ; + DEC = '--' ; + DIV = '/' ; + DIV_ASSIGN = '/=' ; + DOT = '.' ; + DOTSTAR = '.*' ; + ELLIPSIS = '...' ; + EQUAL = '==' ; + GREATER_OR_EQUAL = '>=' ; + GREATER_THAN = '>' ; + INC = '++' ; + LBRACK = '[' ; + LCURLY = '{' ; + LESS_OR_EQUAL = '<=' ; + LESS_THAN = '<' ; + LOGICAL_AND = '&&' ; + LOGICAL_NOT = '!' ; + LOGICAL_OR = '||' ; + LPAREN = '(' ; + MINUS = '-' ; + MINUS_ASSIGN = '-=' ; + MOD = '%' ; + MOD_ASSIGN = '%=' ; + NOT = '~' ; + NOT_EQUAL = '!=' ; + OR = '|' ; + OR_ASSIGN = '|=' ; + PLUS = '+' ; + PLUS_ASSIGN = '+=' ; + QUESTION = '?' ; + RBRACK = ']' ; + RCURLY = '}' ; + RPAREN = ')' ; + SEMI = ';' ; + SHIFT_LEFT = '<<' ; + SHIFT_LEFT_ASSIGN = '<<=' ; + SHIFT_RIGHT = '>>' ; + SHIFT_RIGHT_ASSIGN = '>>=' ; + STAR = '*' ; + STAR_ASSIGN = '*=' ; + XOR = '^' ; + XOR_ASSIGN = '^=' ; + + // keywords + + ABSTRACT = 'abstract' ; + ASSERT = 'assert' ; + BOOLEAN = 'boolean' ; + BREAK = 'break' ; + BYTE = 'byte' ; + CASE = 'case' ; + CATCH = 'catch' ; + CHAR = 'char' ; + CLASS = 'class' ; + CONTINUE = 'continue' ; + DEFAULT = 'default' ; + DO = 'do' ; + DOUBLE = 'double' ; + ELSE = 'else' ; + ENUM = 'enum' ; + EXTENDS = 'extends' ; + FALSE = 'false' ; + FINAL = 'final' ; + FINALLY = 'finally' ; + FLOAT = 'float' ; + FOR = 'for' ; + IF = 'if' ; + IMPLEMENTS = 'implements' ; + INSTANCEOF = 'instanceof' ; + INTERFACE = 'interface' ; + IMPORT = 'import' ; + INT = 'int' ; + LONG = 'long' ; + NATIVE = 'native' ; + NEW = 'new' ; + NULL = 'null' ; + PACKAGE = 'package' ; + PRIVATE = 'private' ; + PROTECTED = 'protected' ; + PUBLIC = 'public' ; + RETURN = 'return' ; + SHORT = 'short' ; + STATIC = 'static' ; + STRICTFP = 'strictfp' ; + SUPER = 'super' ; + SWITCH = 'switch' ; + SYNCHRONIZED = 'synchronized' ; + THIS = 'this' ; + THROW = 'throw' ; + THROWS = 'throws' ; + TRANSIENT = 'transient' ; + TRUE = 'true' ; + TRY = 'try' ; + VOID = 'void' ; + VOLATILE = 'volatile' ; + WHILE = 'while' ; + + // tokens for imaginary nodes + + ANNOTATION_INIT_ARRAY_ELEMENT; + ANNOTATION_INIT_BLOCK; + ANNOTATION_INIT_DEFAULT_KEY; + ANNOTATION_INIT_KEY_LIST; + ANNOTATION_LIST; + ANNOTATION_METHOD_DECL; + ANNOTATION_SCOPE; + ANNOTATION_TOP_LEVEL_SCOPE; + ARGUMENT_LIST; + ARRAY_DECLARATOR; + ARRAY_DECLARATOR_LIST; + ARRAY_ELEMENT_ACCESS; + ARRAY_INITIALIZER; + BLOCK_SCOPE; + CAST_EXPR; + CATCH_CLAUSE_LIST; + CLASS_CONSTRUCTOR_CALL; + CLASS_INSTANCE_INITIALIZER; + CLASS_STATIC_INITIALIZER; + CLASS_TOP_LEVEL_SCOPE; + CONSTRUCTOR_DECL; + ENUM_TOP_LEVEL_SCOPE; + EXPR; + EXTENDS_BOUND_LIST; + EXTENDS_CLAUSE; + FOR_CONDITION; + FOR_EACH; + FOR_INIT; + FOR_UPDATE; + FORMAL_PARAM_LIST; + FORMAL_PARAM_STD_DECL; + FORMAL_PARAM_VARARG_DECL; + FUNCTION_METHOD_DECL; + GENERIC_TYPE_ARG_LIST; + GENERIC_TYPE_PARAM_LIST; + INTERFACE_TOP_LEVEL_SCOPE; + IMPLEMENTS_CLAUSE; + LABELED_STATEMENT; + LOCAL_MODIFIER_LIST; + JAVA_SOURCE; + METHOD_CALL; + MODIFIER_LIST; + PARENTESIZED_EXPR; + POST_DEC; + POST_INC; + PRE_DEC; + PRE_INC; + QUALIFIED_TYPE_IDENT; + STATIC_ARRAY_CREATOR; + SUPER_CONSTRUCTOR_CALL; + SWITCH_BLOCK_LABEL_LIST; + THIS_CONSTRUCTOR_CALL; + THROWS_CLAUSE; + TYPE; + UNARY_MINUS; + UNARY_PLUS; + VAR_DECLARATION; + VAR_DECLARATOR; + VAR_DECLARATOR_LIST; + VOID_METHOD_DECL; +} + + +javaSource + : compilationUnit + -> ^(JAVA_SOURCE compilationUnit) + ; + +compilationUnit + : annotationList + packageDeclaration? + importDeclaration* + typeDecls* + ; + +typeDecls + : typeDeclaration + | SEMI! + ; + +packageDeclaration + : PACKAGE^ qualifiedIdentifier SEMI! + ; + +importDeclaration + : IMPORT^ STATIC? qualifiedIdentifier DOTSTAR? SEMI! + ; + +typeDeclaration + : modifierList! + ( classTypeDeclaration[$modifierList.tree] + | interfaceTypeDeclaration[$modifierList.tree] + | enumTypeDeclaration[$modifierList.tree] + | annotationTypeDeclaration[$modifierList.tree] + ) + ; + +classTypeDeclaration[modifiers] + : CLASS IDENT genericTypeParameterList? classExtendsClause? implementsClause? classBody + -> ^(CLASS {$modifiers} IDENT genericTypeParameterList? classExtendsClause? + implementsClause? classBody) + ; + +classExtendsClause + : EXTENDS type + -> ^(EXTENDS_CLAUSE[$EXTENDS, "EXTENDS_CLAUSE"] type) + ; + +interfaceExtendsClause + : EXTENDS typeList + -> ^(EXTENDS_CLAUSE[$EXTENDS, "EXTENDS_CLAUSE"] typeList) + ; + +implementsClause + : IMPLEMENTS typeList + -> ^(IMPLEMENTS_CLAUSE[$IMPLEMENTS, "IMPLEMENTS_CLAUSE"] typeList) + ; + +genericTypeParameterList + : LESS_THAN genericTypeParameter (COMMA genericTypeParameter)* genericTypeListClosing + -> ^(GENERIC_TYPE_PARAM_LIST[$LESS_THAN, "GENERIC_TYPE_PARAM_LIST"] genericTypeParameter+) + ; + +genericTypeListClosing // This 'trick' is fairly dirty - if there's some time a better solution should + // be found to resolve the problem with nested generic type parameter lists + // (i.e. > for generic type parameters or > for + // generic type arguments etc). + : GREATER_THAN + | SHIFT_RIGHT + | BIT_SHIFT_RIGHT + | // nothing + ; + +genericTypeParameter + : IDENT bound? + -> ^(IDENT bound?) + ; + +bound + : EXTENDS type (AND type)* + -> ^(EXTENDS_BOUND_LIST[$EXTENDS, "EXTENDS_BOUND_LIST"] type+) + ; + +enumTypeDeclaration[modifiers] + : ENUM IDENT implementsClause? enumBody + -> ^(ENUM {$modifiers} IDENT implementsClause? enumBody) + ; + +enumBody + : LCURLY enumScopeDeclarations RCURLY + -> ^(ENUM_TOP_LEVEL_SCOPE[$LCURLY, "ENUM_TOP_LEVEL_SCOPE"] enumScopeDeclarations) + ; + +enumScopeDeclarations + : enumConstants (COMMA!)? enumClassScopeDeclarations? + ; + +enumClassScopeDeclarations + : SEMI classScopeDeclarations* + -> ^(CLASS_TOP_LEVEL_SCOPE[$SEMI, "CLASS_TOP_LEVEL_SCOPE"] classScopeDeclarations*) + ; + +enumConstants + : enumConstant (COMMA! enumConstant)* + ; + +enumConstant + : annotationList IDENT^ arguments? classBody? + ; + +interfaceTypeDeclaration[modifiers] + : INTERFACE IDENT genericTypeParameterList? interfaceExtendsClause? interfaceBody + -> ^(INTERFACE {$modifiers} IDENT genericTypeParameterList? interfaceExtendsClause? interfaceBody) + ; + +typeList + : type (COMMA! type)* + ; + +classBody + : LCURLY classScopeDeclarations* RCURLY + -> ^(CLASS_TOP_LEVEL_SCOPE[$LCURLY, "CLASS_TOP_LEVEL_SCOPE"] classScopeDeclarations*) + ; + +interfaceBody + : LCURLY interfaceScopeDeclarations* RCURLY + -> ^(INTERFACE_TOP_LEVEL_SCOPE[$LCURLY, "CLASS_TOP_LEVEL_SCOPE"] interfaceScopeDeclarations*) + ; + +classScopeDeclarations + : block -> ^(CLASS_INSTANCE_INITIALIZER block) + | STATIC block -> ^(CLASS_STATIC_INITIALIZER[$STATIC, "CLASS_STATIC_INITIALIZER"] block) + | modifierList + ( genericTypeParameterList? + ( type IDENT formalParameterList arrayDeclaratorList? throwsClause? (block | SEMI) + -> ^(FUNCTION_METHOD_DECL modifierList genericTypeParameterList? type IDENT formalParameterList arrayDeclaratorList? throwsClause? block?) + | VOID IDENT formalParameterList throwsClause? (block | SEMI) + -> ^(VOID_METHOD_DECL modifierList genericTypeParameterList? IDENT formalParameterList throwsClause? block?) + | ident=IDENT formalParameterList throwsClause? block + -> ^(CONSTRUCTOR_DECL[$ident, "CONSTRUCTOR_DECL"] modifierList genericTypeParameterList? formalParameterList throwsClause? block) + ) + | type classFieldDeclaratorList SEMI + -> ^(VAR_DECLARATION modifierList type classFieldDeclaratorList) + ) + | typeDeclaration + | SEMI! + ; + +interfaceScopeDeclarations + : modifierList + ( genericTypeParameterList? + ( type IDENT formalParameterList arrayDeclaratorList? throwsClause? SEMI + -> ^(FUNCTION_METHOD_DECL modifierList genericTypeParameterList? type IDENT formalParameterList arrayDeclaratorList? throwsClause?) + | VOID IDENT formalParameterList throwsClause? SEMI + -> ^(VOID_METHOD_DECL modifierList genericTypeParameterList? IDENT formalParameterList throwsClause?) + ) + | type interfaceFieldDeclaratorList SEMI + -> ^(VAR_DECLARATION modifierList type interfaceFieldDeclaratorList) + ) + | typeDeclaration + | SEMI! + ; + +classFieldDeclaratorList + : classFieldDeclarator (COMMA classFieldDeclarator)* + -> ^(VAR_DECLARATOR_LIST classFieldDeclarator+) + ; + +classFieldDeclarator + : variableDeclaratorId (ASSIGN variableInitializer)? + -> ^(VAR_DECLARATOR variableDeclaratorId variableInitializer?) + ; + +interfaceFieldDeclaratorList + : interfaceFieldDeclarator (COMMA interfaceFieldDeclarator)* + -> ^(VAR_DECLARATOR_LIST interfaceFieldDeclarator+) + ; + +interfaceFieldDeclarator + : variableDeclaratorId ASSIGN variableInitializer + -> ^(VAR_DECLARATOR variableDeclaratorId variableInitializer) + ; + +variableDeclaratorId + : IDENT^ arrayDeclaratorList? + ; + +variableInitializer + : arrayInitializer + | expression + ; + +arrayDeclarator + : LBRACK RBRACK + -> ^(ARRAY_DECLARATOR) + ; + +arrayDeclaratorList + : arrayDeclarator+ + -> ^(ARRAY_DECLARATOR_LIST arrayDeclarator+) + ; + +arrayInitializer + : LCURLY (variableInitializer (COMMA variableInitializer)* COMMA?)? RCURLY + -> ^(ARRAY_INITIALIZER[$LCURLY, "ARRAY_INITIALIZER"] variableInitializer*) + ; + +throwsClause + : THROWS qualifiedIdentList + -> ^(THROWS_CLAUSE[$THROWS, "THROWS_CLAUSE"] qualifiedIdentList) + ; + +modifierList + : modifier* + -> ^(MODIFIER_LIST modifier*) + ; + +modifier + : PUBLIC + | PROTECTED + | PRIVATE + | STATIC + | ABSTRACT + | NATIVE + | SYNCHRONIZED + | TRANSIENT + | VOLATILE + | STRICTFP + | localModifier + ; + +localModifierList + : localModifier* + -> ^(LOCAL_MODIFIER_LIST localModifier*) + ; + +localModifier + : FINAL + | annotation + ; + +type + : simpleType + | objectType + ; + +simpleType // including static arrays of simple type elements + : primitiveType arrayDeclaratorList? + -> ^(TYPE primitiveType arrayDeclaratorList?) + ; + +objectType // including static arrays of object type reference elements + : qualifiedTypeIdent arrayDeclaratorList? + -> ^(TYPE qualifiedTypeIdent arrayDeclaratorList?) + ; + +objectTypeSimplified + : qualifiedTypeIdentSimplified arrayDeclaratorList? + -> ^(TYPE qualifiedTypeIdentSimplified arrayDeclaratorList?) + ; + +qualifiedTypeIdent + : typeIdent (DOT typeIdent)* + -> ^(QUALIFIED_TYPE_IDENT typeIdent+) + ; + +qualifiedTypeIdentSimplified + : typeIdentSimplified (DOT typeIdentSimplified)* + -> ^(QUALIFIED_TYPE_IDENT typeIdentSimplified+) + ; + +typeIdent + : IDENT^ genericTypeArgumentList? + ; + +typeIdentSimplified + : IDENT^ genericTypeArgumentListSimplified? + ; + +primitiveType + : BOOLEAN + | CHAR + | BYTE + | SHORT + | INT + | LONG + | FLOAT + | DOUBLE + ; + +genericTypeArgumentList + : LESS_THAN genericTypeArgument (COMMA genericTypeArgument)* genericTypeListClosing + -> ^(GENERIC_TYPE_ARG_LIST[$LESS_THAN, "GENERIC_TYPE_ARG_LIST"] genericTypeArgument+) + ; + +genericTypeArgument + : type + | QUESTION genericWildcardBoundType? + -> ^(QUESTION genericWildcardBoundType?) + ; + +genericWildcardBoundType + : (EXTENDS | SUPER)^ type + ; + +genericTypeArgumentListSimplified + : LESS_THAN genericTypeArgumentSimplified (COMMA genericTypeArgumentSimplified)* genericTypeListClosing + -> ^(GENERIC_TYPE_ARG_LIST[$LESS_THAN, "GENERIC_TYPE_ARG_LIST"] genericTypeArgumentSimplified+) + ; + +genericTypeArgumentSimplified + : type + | QUESTION + ; + +qualifiedIdentList + : qualifiedIdentifier (COMMA! qualifiedIdentifier)* + ; + +formalParameterList + : LPAREN + ( // Contains at least one standard argument declaration and optionally a variable argument declaration. + formalParameterStandardDecl (COMMA formalParameterStandardDecl)* (COMMA formalParameterVarArgDecl)? + -> ^(FORMAL_PARAM_LIST[$LPAREN, "FORMAL_PARAM_LIST"] formalParameterStandardDecl+ formalParameterVarArgDecl?) + // Contains a variable argument declaration only. + | formalParameterVarArgDecl + -> ^(FORMAL_PARAM_LIST[$LPAREN, "FORMAL_PARAM_LIST"] formalParameterVarArgDecl) + // Contains nothing. + | -> ^(FORMAL_PARAM_LIST[$LPAREN, "FORMAL_PARAM_LIST"]) + ) + RPAREN + ; + +formalParameterStandardDecl + : localModifierList type variableDeclaratorId + -> ^(FORMAL_PARAM_STD_DECL localModifierList type variableDeclaratorId) + ; + +formalParameterVarArgDecl + : localModifierList type ELLIPSIS variableDeclaratorId + -> ^(FORMAL_PARAM_VARARG_DECL localModifierList type variableDeclaratorId) + ; + +qualifiedIdentifier + : ( IDENT -> IDENT + ) + ( DOT ident=IDENT -> ^(DOT $qualifiedIdentifier $ident) + )* + ; + +// ANNOTATIONS + +annotationList + : annotation* + -> ^(ANNOTATION_LIST annotation*) + ; + +annotation + : AT^ qualifiedIdentifier annotationInit? + ; + +annotationInit + : LPAREN annotationInitializers RPAREN + -> ^(ANNOTATION_INIT_BLOCK[$LPAREN, "ANNOTATION_INIT_BLOCK"] annotationInitializers) + ; + +annotationInitializers + : annotationInitializer (COMMA annotationInitializer)* + -> ^(ANNOTATION_INIT_KEY_LIST annotationInitializer+) + | annotationElementValue // implicite initialization of the annotation field 'value' + -> ^(ANNOTATION_INIT_DEFAULT_KEY annotationElementValue) + ; + +annotationInitializer + : IDENT^ ASSIGN! annotationElementValue + ; + +annotationElementValue + : annotationElementValueExpression + | annotation + | annotationElementValueArrayInitializer + ; + +annotationElementValueExpression + : conditionalExpression + -> ^(EXPR conditionalExpression) + ; + +annotationElementValueArrayInitializer + : LCURLY (annotationElementValue (COMMA annotationElementValue)*)? (COMMA)? RCURLY + -> ^(ANNOTATION_INIT_ARRAY_ELEMENT[$LCURLY, "ANNOTATION_ELEM_VALUE_ARRAY_INIT"] annotationElementValue*) + ; + +annotationTypeDeclaration[modifiers] + : AT INTERFACE IDENT annotationBody + -> ^(AT {$modifiers} IDENT annotationBody) + ; + +annotationBody + : LCURLY annotationScopeDeclarations* RCURLY + -> ^(ANNOTATION_TOP_LEVEL_SCOPE[$LCURLY, "CLASS_TOP_LEVEL_SCOPE"] annotationScopeDeclarations*) + ; + +annotationScopeDeclarations + : modifierList type + ( IDENT LPAREN RPAREN annotationDefaultValue? SEMI + -> ^(ANNOTATION_METHOD_DECL modifierList type IDENT annotationDefaultValue?) + | classFieldDeclaratorList SEMI + -> ^(VAR_DECLARATION modifierList type classFieldDeclaratorList) + ) + | typeDeclaration + ; + +annotationDefaultValue + : DEFAULT^ annotationElementValue + ; + +// STATEMENTS / BLOCKS + +block + : LCURLY blockStatement* RCURLY + -> ^(BLOCK_SCOPE[$LCURLY, "BLOCK_SCOPE"] blockStatement*) + ; + +blockStatement + : localVariableDeclaration SEMI! + | typeDeclaration + | statement + ; + +localVariableDeclaration + : localModifierList type classFieldDeclaratorList + -> ^(VAR_DECLARATION localModifierList type classFieldDeclaratorList) + ; + + +statement + : block + | ASSERT expr1=expression + ( COLON expr2=expression SEMI -> ^(ASSERT $expr1 $expr2) + | SEMI -> ^(ASSERT $expr1) + ) + | IF parenthesizedExpression ifStat=statement + ( ELSE elseStat=statement -> ^(IF parenthesizedExpression $ifStat $elseStat) + | -> ^(IF parenthesizedExpression $ifStat) + ) + | FOR LPAREN + ( forInit SEMI forCondition SEMI forUpdater RPAREN statement -> ^(FOR forInit forCondition forUpdater statement) + | localModifierList type IDENT COLON expression RPAREN statement + -> ^(FOR_EACH[$FOR, "FOR_EACH"] localModifierList type IDENT expression statement) + ) + | WHILE parenthesizedExpression statement -> ^(WHILE parenthesizedExpression statement) + | DO statement WHILE parenthesizedExpression SEMI -> ^(DO statement parenthesizedExpression) + | TRY block (catches finallyClause? | finallyClause) -> ^(TRY block catches? finallyClause?) + | SWITCH parenthesizedExpression LCURLY switchBlockLabels? RCURLY -> ^(SWITCH parenthesizedExpression switchBlockLabels?) + | SYNCHRONIZED parenthesizedExpression block -> ^(SYNCHRONIZED parenthesizedExpression block) + | RETURN expression? SEMI -> ^(RETURN expression?) + | THROW expression SEMI -> ^(THROW expression) + | BREAK IDENT? SEMI -> ^(BREAK IDENT?) + | CONTINUE IDENT? SEMI -> ^(CONTINUE IDENT?) + | IDENT COLON statement -> ^(LABELED_STATEMENT IDENT statement) + | expression SEMI! + | SEMI // Preserve empty statements. + ; + +catches + : catchClause+ + -> ^(CATCH_CLAUSE_LIST catchClause+) + ; + +catchClause + : CATCH^ LPAREN! formalParameterStandardDecl RPAREN! block + ; + +finallyClause + : FINALLY block + -> block + ; + +switchBlockLabels + // local modification: changed "switchCaseLabels" to + // "varname=switchCaseLabels?" to match language spec and support empty + // switch statements. + : c0=switchCaseLabels? switchDefaultLabel? c1=switchCaseLabels? + -> ^(SWITCH_BLOCK_LABEL_LIST $c0? switchDefaultLabel? $c1?) + ; + +switchCaseLabels + : switchCaseLabel* + ; + +switchCaseLabel + : CASE^ expression COLON! blockStatement* + ; + +switchDefaultLabel + : DEFAULT^ COLON! blockStatement* + ; + +forInit + : localVariableDeclaration -> ^(FOR_INIT localVariableDeclaration) + | expressionList -> ^(FOR_INIT expressionList) + | -> ^(FOR_INIT) + ; + +forCondition + : expression? + -> ^(FOR_CONDITION expression?) + ; + +forUpdater + : expressionList? + -> ^(FOR_UPDATE expressionList?) + ; + +// EXPRESSIONS + +parenthesizedExpression + : LPAREN expression RPAREN + -> ^(PARENTESIZED_EXPR[$LPAREN, "PARENTESIZED_EXPR"] expression) + ; + +expressionList + : expression (COMMA! expression)* + ; + +expression + : assignmentExpression + -> ^(EXPR assignmentExpression) + ; + +assignmentExpression + : conditionalExpression + ( ( ASSIGN^ + | PLUS_ASSIGN^ + | MINUS_ASSIGN^ + | STAR_ASSIGN^ + | DIV_ASSIGN^ + | AND_ASSIGN^ + | OR_ASSIGN^ + | XOR_ASSIGN^ + | MOD_ASSIGN^ + | SHIFT_LEFT_ASSIGN^ + | SHIFT_RIGHT_ASSIGN^ + | BIT_SHIFT_RIGHT_ASSIGN^ + ) + assignmentExpression)? + ; + +conditionalExpression + : logicalOrExpression (QUESTION^ assignmentExpression COLON! conditionalExpression)? + ; + +logicalOrExpression + : logicalAndExpression (LOGICAL_OR^ logicalAndExpression)* + ; + +logicalAndExpression + : inclusiveOrExpression (LOGICAL_AND^ inclusiveOrExpression)* + ; + +inclusiveOrExpression + : exclusiveOrExpression (OR^ exclusiveOrExpression)* + ; + +exclusiveOrExpression + : andExpression (XOR^ andExpression)* + ; + +andExpression + : equalityExpression (AND^ equalityExpression)* + ; + +equalityExpression + : instanceOfExpression + ( ( EQUAL^ + | NOT_EQUAL^ + ) + instanceOfExpression + )* + ; + +instanceOfExpression + : relationalExpression (INSTANCEOF^ type)? + ; + +relationalExpression + : shiftExpression + ( ( LESS_OR_EQUAL^ + | GREATER_OR_EQUAL^ + | LESS_THAN^ + | GREATER_THAN^ + ) + shiftExpression + )* + ; + +shiftExpression + : additiveExpression + ( ( BIT_SHIFT_RIGHT^ + | SHIFT_RIGHT^ + | SHIFT_LEFT^ + ) + additiveExpression + )* + ; + +additiveExpression + : multiplicativeExpression + ( ( PLUS^ + | MINUS^ + ) + multiplicativeExpression + )* + ; + +multiplicativeExpression + : unaryExpression + ( ( STAR^ + | DIV^ + | MOD^ + ) + unaryExpression + )* + ; + +unaryExpression + : PLUS unaryExpression -> ^(UNARY_PLUS[$PLUS, "UNARY_PLUS"] unaryExpression) + | MINUS unaryExpression -> ^(UNARY_MINUS[$MINUS, "UNARY_MINUS"] unaryExpression) + | INC postfixedExpression -> ^(PRE_INC[$INC, "PRE_INC"] postfixedExpression) + | DEC postfixedExpression -> ^(PRE_DEC[$DEC, "PRE_DEC"] postfixedExpression) + | unaryExpressionNotPlusMinus + ; + +unaryExpressionNotPlusMinus + : NOT unaryExpression -> ^(NOT unaryExpression) + | LOGICAL_NOT unaryExpression -> ^(LOGICAL_NOT unaryExpression) + | LPAREN type RPAREN unaryExpression -> ^(CAST_EXPR[$LPAREN, "CAST_EXPR"] type unaryExpression) + | postfixedExpression + ; + +postfixedExpression + // At first resolve the primary expression ... + : ( primaryExpression -> primaryExpression + ) + // ... and than the optional things that may follow a primary expression 0 or more times. + ( outerDot=DOT + ( ( genericTypeArgumentListSimplified? // Note: generic type arguments are only valid for method calls, i.e. if there + // is an argument list. + IDENT -> ^(DOT $postfixedExpression IDENT) + ) + ( arguments -> ^(METHOD_CALL $postfixedExpression genericTypeArgumentListSimplified? arguments) + )? + | THIS -> ^(DOT $postfixedExpression THIS) + | Super=SUPER arguments -> ^(SUPER_CONSTRUCTOR_CALL[$Super, "SUPER_CONSTRUCTOR_CALL"] $postfixedExpression arguments) + | ( SUPER innerDot=DOT IDENT -> ^($innerDot ^($outerDot $postfixedExpression SUPER) IDENT) + ) + ( arguments -> ^(METHOD_CALL $postfixedExpression arguments) + )? + | innerNewExpression -> ^(DOT $postfixedExpression innerNewExpression) + ) + | LBRACK expression RBRACK -> ^(ARRAY_ELEMENT_ACCESS $postfixedExpression expression) + )* + // At the end there may follow a post increment/decrement. + ( INC -> ^(POST_INC[$INC, "POST_INC"] $postfixedExpression) + | DEC -> ^(POST_DEC[$DEC, "POST_DEC"] $postfixedExpression) + )? + ; + +primaryExpression + : parenthesizedExpression + | literal + | newExpression + | qualifiedIdentExpression + | genericTypeArgumentListSimplified + ( SUPER + ( arguments -> ^(SUPER_CONSTRUCTOR_CALL[$SUPER, "SUPER_CONSTRUCTOR_CALL"] genericTypeArgumentListSimplified arguments) + | DOT IDENT arguments -> ^(METHOD_CALL ^(DOT SUPER IDENT) genericTypeArgumentListSimplified arguments) + ) + | IDENT arguments -> ^(METHOD_CALL IDENT genericTypeArgumentListSimplified arguments) + | THIS arguments -> ^(THIS_CONSTRUCTOR_CALL[$THIS, "THIS_CONSTRUCTOR_CALL"] genericTypeArgumentListSimplified arguments) + ) + | ( THIS -> THIS + ) + ( arguments -> ^(THIS_CONSTRUCTOR_CALL[$THIS, "THIS_CONSTRUCTOR_CALL"] arguments) + )? + | SUPER arguments -> ^(SUPER_CONSTRUCTOR_CALL[$SUPER, "SUPER_CONSTRUCTOR_CALL"] arguments) + | ( SUPER DOT IDENT + ) + ( arguments -> ^(METHOD_CALL ^(DOT SUPER IDENT) arguments) + | -> ^(DOT SUPER IDENT) + ) + | ( primitiveType -> primitiveType + ) + ( arrayDeclarator -> ^(arrayDeclarator $primaryExpression) + )* + DOT CLASS -> ^(DOT $primaryExpression CLASS) + | VOID DOT CLASS -> ^(DOT VOID CLASS) + ; + +qualifiedIdentExpression + // The qualified identifier itself is the starting point for this rule. + : ( qualifiedIdentifier -> qualifiedIdentifier + ) + // And now comes the stuff that may follow the qualified identifier. + ( ( arrayDeclarator -> ^(arrayDeclarator $qualifiedIdentExpression) + )+ + ( DOT CLASS -> ^(DOT $qualifiedIdentExpression CLASS) + ) + | arguments -> ^(METHOD_CALL qualifiedIdentifier arguments) + | outerDot=DOT + ( CLASS -> ^(DOT qualifiedIdentifier CLASS) + | genericTypeArgumentListSimplified + ( Super=SUPER arguments -> ^(SUPER_CONSTRUCTOR_CALL[$Super, "SUPER_CONSTRUCTOR_CALL"] qualifiedIdentifier genericTypeArgumentListSimplified arguments) + | SUPER innerDot=DOT IDENT arguments -> ^(METHOD_CALL ^($innerDot ^($outerDot qualifiedIdentifier SUPER) IDENT) genericTypeArgumentListSimplified arguments) + | IDENT arguments -> ^(METHOD_CALL ^(DOT qualifiedIdentifier IDENT) genericTypeArgumentListSimplified arguments) + ) + | THIS -> ^(DOT qualifiedIdentifier THIS) + | Super=SUPER arguments -> ^(SUPER_CONSTRUCTOR_CALL[$Super, "SUPER_CONSTRUCTOR_CALL"] qualifiedIdentifier arguments) + | innerNewExpression -> ^(DOT qualifiedIdentifier innerNewExpression) + ) + )? + ; + +newExpression + : NEW + ( primitiveType newArrayConstruction // new static array of primitive type elements + -> ^(STATIC_ARRAY_CREATOR[$NEW, "STATIC_ARRAY_CREATOR"] primitiveType newArrayConstruction) + | genericTypeArgumentListSimplified? qualifiedTypeIdentSimplified + ( newArrayConstruction // new static array of object type reference elements + -> ^(STATIC_ARRAY_CREATOR[$NEW, "STATIC_ARRAY_CREATOR"] genericTypeArgumentListSimplified? qualifiedTypeIdentSimplified newArrayConstruction) + | arguments classBody? // new object type via constructor invocation + -> ^(CLASS_CONSTRUCTOR_CALL[$NEW, "STATIC_ARRAY_CREATOR"] genericTypeArgumentListSimplified? qualifiedTypeIdentSimplified arguments classBody?) + ) + ) + ; + +innerNewExpression // something like 'InnerType innerType = outer.new InnerType();' + : NEW genericTypeArgumentListSimplified? IDENT arguments classBody? + -> ^(CLASS_CONSTRUCTOR_CALL[$NEW, "STATIC_ARRAY_CREATOR"] genericTypeArgumentListSimplified? IDENT arguments classBody?) + ; + +newArrayConstruction + : arrayDeclaratorList arrayInitializer + | LBRACK! expression RBRACK! (LBRACK! expression RBRACK!)* arrayDeclaratorList? + ; + +arguments + : LPAREN expressionList? RPAREN + -> ^(ARGUMENT_LIST[$LPAREN, "ARGUMENT_LIST"] expressionList?) + ; + +literal + : HEX_LITERAL + | OCTAL_LITERAL + | DECIMAL_LITERAL + | FLOATING_POINT_LITERAL + | CHARACTER_LITERAL + | STRING_LITERAL + | TRUE + | FALSE + | NULL + ; + +// LEXER + +HEX_LITERAL : '0' ('x'|'X') HEX_DIGIT+ INTEGER_TYPE_SUFFIX? ; + +DECIMAL_LITERAL : ('0' | '1'..'9' '0'..'9'*) INTEGER_TYPE_SUFFIX? ; + +OCTAL_LITERAL : '0' ('0'..'7')+ INTEGER_TYPE_SUFFIX? ; + +fragment +HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ; + +fragment +INTEGER_TYPE_SUFFIX : ('l'|'L') ; + +FLOATING_POINT_LITERAL + : ('0'..'9')+ + ( + DOT ('0'..'9')* EXPONENT? FLOAT_TYPE_SUFFIX? + | EXPONENT FLOAT_TYPE_SUFFIX? + | FLOAT_TYPE_SUFFIX + ) + | DOT ('0'..'9')+ EXPONENT? FLOAT_TYPE_SUFFIX? + ; + +fragment +EXPONENT : ('e'|'E') ('+'|'-')? ('0'..'9')+ ; + +fragment +FLOAT_TYPE_SUFFIX : ('f'|'F'|'d'|'D') ; + +CHARACTER_LITERAL + : '\'' ( ESCAPE_SEQUENCE | ~('\''|'\\') ) '\'' + ; + +STRING_LITERAL + : '"' ( ESCAPE_SEQUENCE | ~('\\'|'"') )* '"' + ; + +fragment +ESCAPE_SEQUENCE + : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\') + | UNICODE_ESCAPE + | OCTAL_ESCAPE + ; + +fragment +OCTAL_ESCAPE + : '\\' ('0'..'3') ('0'..'7') ('0'..'7') + | '\\' ('0'..'7') ('0'..'7') + | '\\' ('0'..'7') + ; + +fragment +UNICODE_ESCAPE + : '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT + ; + +IDENT + : JAVA_ID_START (JAVA_ID_PART)* + ; + +fragment +JAVA_ID_START + : '\u0024' + | '\u0041'..'\u005a' + | '\u005f' + | '\u0061'..'\u007a' + | '\u00c0'..'\u00d6' + | '\u00d8'..'\u00f6' + | '\u00f8'..'\u00ff' + | '\u0100'..'\u1fff' + | '\u3040'..'\u318f' + | '\u3300'..'\u337f' + | '\u3400'..'\u3d2d' + | '\u4e00'..'\u9fff' + | '\uf900'..'\ufaff' + ; + +fragment +JAVA_ID_PART + : JAVA_ID_START + | '\u0030'..'\u0039' + ; + +WS : (' '|'\r'|'\t'|'\u000C'|'\n') + { + $channel = HIDDEN + } + ; + +COMMENT + : '/*' ~('*') ( options {greedy=false;} : . )* '*/' + { + $channel = HIDDEN + } + ; + +LINE_COMMENT + : '//' ~('\n'|'\r')* '\r'? '\n' + { + $channel = HIDDEN + } + ; + +JAVADOC_COMMENT + : '/**' ( options {greedy=false;} : . )* '*/' + { + $channel = HIDDEN + } + ; diff --git a/build/lib/java2python/lang/Java.tokens b/build/lib/java2python/lang/Java.tokens new file mode 100644 index 0000000..9adec21 --- /dev/null +++ b/build/lib/java2python/lang/Java.tokens @@ -0,0 +1,280 @@ +PACKAGE=84 +EXPONENT=173 +STAR=49 +WHILE=103 +MOD=32 +MOD_ASSIGN=33 +CASE=58 +CHAR=60 +NEW=82 +DO=64 +GENERIC_TYPE_PARAM_LIST=138 +CLASS_INSTANCE_INITIALIZER=121 +ARRAY_ELEMENT_ACCESS=115 +FOR_CONDITION=129 +NOT=34 +VAR_DECLARATION=160 +ANNOTATION_METHOD_DECL=109 +DIV_ASSIGN=14 +LOGICAL_AND=26 +BREAK=56 +UNARY_PLUS=159 +BIT_SHIFT_RIGHT_ASSIGN=9 +TYPE=157 +RPAREN=43 +INC=21 +FINAL=70 +IMPORT=78 +STRING_LITERAL=170 +FOR_UPDATE=132 +FLOATING_POINT_LITERAL=168 +CAST_EXPR=118 +NOT_EQUAL=35 +VOID_METHOD_DECL=163 +THIS=95 +RETURN=88 +DOUBLE=65 +ENUM_TOP_LEVEL_SCOPE=125 +VOID=101 +SUPER=92 +COMMENT=181 +ANNOTATION_INIT_KEY_LIST=107 +JAVA_ID_START=178 +FLOAT_TYPE_SUFFIX=174 +PRE_DEC=149 +RBRACK=41 +IMPLEMENTS_CLAUSE=140 +SWITCH_BLOCK_LABEL_LIST=154 +LINE_COMMENT=182 +PRIVATE=85 +STATIC=90 +BLOCK_SCOPE=117 +ANNOTATION_INIT_DEFAULT_KEY=106 +SWITCH=93 +NULL=83 +VAR_DECLARATOR=161 +MINUS_ASSIGN=31 +ELSE=66 +STRICTFP=91 +CHARACTER_LITERAL=169 +PRE_INC=150 +ANNOTATION_LIST=108 +ELLIPSIS=17 +NATIVE=81 +OCTAL_ESCAPE=177 +UNARY_MINUS=158 +THROWS=97 +LCURLY=23 +INT=79 +FORMAL_PARAM_VARARG_DECL=135 +METHOD_CALL=144 +ASSERT=54 +TRY=100 +INTERFACE_TOP_LEVEL_SCOPE=139 +SHIFT_LEFT=45 +WS=180 +SHIFT_RIGHT=47 +FORMAL_PARAM_STD_DECL=134 +LOCAL_MODIFIER_LIST=142 +OR=36 +LESS_THAN=25 +SHIFT_RIGHT_ASSIGN=48 +EXTENDS_BOUND_LIST=127 +JAVA_SOURCE=143 +CATCH=59 +FALSE=69 +INTEGER_TYPE_SUFFIX=172 +DECIMAL_LITERAL=167 +THROW=96 +FOR_INIT=131 +DEC=12 +PROTECTED=86 +CLASS=61 +LBRACK=22 +BIT_SHIFT_RIGHT=8 +THROWS_CLAUSE=156 +GREATER_OR_EQUAL=19 +FOR=73 +THIS_CONSTRUCTOR_CALL=155 +LOGICAL_NOT=27 +JAVADOC_COMMENT=183 +FLOAT=72 +ABSTRACT=53 +AND=4 +POST_DEC=147 +AND_ASSIGN=5 +STATIC_ARRAY_CREATOR=152 +MODIFIER_LIST=145 +ANNOTATION_SCOPE=110 +LPAREN=29 +IF=74 +AT=7 +ESCAPE_SEQUENCE=175 +CONSTRUCTOR_DECL=124 +LABELED_STATEMENT=141 +UNICODE_ESCAPE=176 +EXPR=126 +SYNCHRONIZED=94 +BOOLEAN=55 +CLASS_TOP_LEVEL_SCOPE=123 +IMPLEMENTS=75 +CONTINUE=62 +COMMA=11 +TRANSIENT=98 +EQUAL=18 +XOR_ASSIGN=52 +LOGICAL_OR=28 +IDENT=164 +QUALIFIED_TYPE_IDENT=151 +ARGUMENT_LIST=112 +PLUS=38 +HEX_LITERAL=165 +ANNOTATION_INIT_BLOCK=105 +DOT=15 +SHIFT_LEFT_ASSIGN=46 +FORMAL_PARAM_LIST=133 +GENERIC_TYPE_ARG_LIST=137 +ANNOTATION_TOP_LEVEL_SCOPE=111 +DOTSTAR=16 +BYTE=57 +XOR=51 +JAVA_ID_PART=179 +GREATER_THAN=20 +VOLATILE=102 +PARENTESIZED_EXPR=146 +CLASS_STATIC_INITIALIZER=122 +ARRAY_DECLARATOR_LIST=114 +LESS_OR_EQUAL=24 +DEFAULT=63 +OCTAL_LITERAL=166 +HEX_DIGIT=171 +SHORT=89 +INSTANCEOF=76 +MINUS=30 +EXTENDS_CLAUSE=128 +TRUE=99 +SEMI=44 +STAR_ASSIGN=50 +VAR_DECLARATOR_LIST=162 +ARRAY_DECLARATOR=113 +COLON=10 +OR_ASSIGN=37 +ENUM=67 +QUESTION=40 +FINALLY=71 +RCURLY=42 +PLUS_ASSIGN=39 +ASSIGN=6 +ANNOTATION_INIT_ARRAY_ELEMENT=104 +FUNCTION_METHOD_DECL=136 +INTERFACE=77 +POST_INC=148 +DIV=13 +CLASS_CONSTRUCTOR_CALL=120 +LONG=80 +FOR_EACH=130 +EXTENDS=68 +PUBLIC=87 +ARRAY_INITIALIZER=116 +CATCH_CLAUSE_LIST=119 +SUPER_CONSTRUCTOR_CALL=153 +'>='=19 +'=='=18 +'implements'=75 +'this'=95 +'volatile'=102 +';'=44 +'return'=88 +'for'=73 +'protected'=86 +'^'=51 +'>>'=47 +'static'=90 +'catch'=59 +'extends'=68 +'{'=23 +'package'=84 +'try'=100 +'&='=5 +'('=29 +':'=10 +'synchronized'=94 +'default'=63 +'public'=87 +'<<='=46 +']'=41 +'>>>'=8 +'enum'=67 +'transient'=98 +'assert'=54 +'finally'=71 +'new'=82 +'|='=37 +'throws'=97 +'.*'=16 +'='=6 +'%'=32 +'super'=92 +'case'=58 +'boolean'=55 +'<<'=45 +'<='=24 +'!='=35 +'continue'=62 +'--'=12 +'<'=25 +'['=22 +'&'=4 +'instanceof'=76 +'~'=34 +'/'=13 +'/='=14 +'switch'=93 +'%='=33 +'>'=20 +'||'=28 +'&&'=26 +'+'=38 +'.'=15 +'byte'=57 +'import'=78 +'++'=21 +'true'=99 +'else'=66 +'final'=70 +'^='=52 +'+='=39 +'native'=81 +'break'=56 +'...'=17 +'>>='=48 +'void'=101 +'>>>='=9 +'?'=40 +'private'=85 +'int'=79 +'if'=74 +'while'=103 +'-'=30 +','=11 +'-='=31 +'short'=89 +'long'=80 +'!'=27 +'|'=36 +'class'=61 +'null'=83 +'@'=7 +'throw'=96 +')'=43 +'*='=50 +'do'=64 +'char'=60 +'strictfp'=91 +'float'=72 +'}'=42 +'abstract'=53 +'double'=65 +'false'=69 +'*'=49 +'interface'=77 diff --git a/build/lib/java2python/lang/JavaDoc.g b/build/lib/java2python/lang/JavaDoc.g new file mode 100644 index 0000000..0265a28 --- /dev/null +++ b/build/lib/java2python/lang/JavaDoc.g @@ -0,0 +1,133 @@ +/* + * Javadoc.g + * Copyright (c) 2007 David Holroyd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +grammar JavaDoc; + + +options { + k=3; + output=AST; + language=Python; + ASTLabelType=CommonTree; +} + + +tokens { + JAVADOC; + INLINE_TAG; + DESCRIPTION; + PARA_TAG; + TEXT_LINE; +} + + +commentBody + : d=description paragraphTag* EOF + -> ^(JAVADOC description paragraphTag*) + ; + + +description + : textLine* + -> ^(DESCRIPTION textLine*) + ; + + +textLine + : textLineStart textLineContent* (NL | EOF!) + | NL + ; + + +textLineStart + : (LBRACE ATWORD)=> inlineTag + | WORD | STARS | WS | LBRACE | RBRACE | AT + ; + + +textLineContent + : (LBRACE ATWORD)=> inlineTag + | WORD | STARS | WS | LBRACE | RBRACE | AT | ATWORD + ; + + +inlineTag + : LBRACE ATWORD inlineTagContent* RBRACE + -> ^(INLINE_TAG ATWORD inlineTagContent*) + ; + + +inlineTagContent + : WORD | STARS | WS | AT | NL + ; + + +paragraphTag + : ATWORD paragraphTagTail + -> ^(PARA_TAG ATWORD paragraphTagTail) + ; + + +paragraphTagTail + : textLineContent* (NL textLine* | EOF) + -> textLineContent* NL? textLine* + ; + + +STARS + : '*'+ + ; + + +LBRACE + : '{' + ; + + +RBRACE + : '}' + ; + + +AT + : '@' + ; + + +WS + : (' ' | '\t')+ + ; + + +NL options {k=*;} + : ('\r\n' | '\r' | '\n') WS? (STARS WS?)? + ; + + +ATWORD + : '@' WORD WORD_TAIL + ; + + +WORD + : ~('\n' | ' ' | '\r' | '\t' | '{' | '}' | '@') WORD_TAIL + ; + + +fragment WORD_TAIL + : (~('\n' | ' ' | '\r' | '\t' | '{' | '}'))* + ; diff --git a/build/lib/java2python/lang/JavaLexer.py b/build/lib/java2python/lang/JavaLexer.py new file mode 100644 index 0000000..01384d0 --- /dev/null +++ b/build/lib/java2python/lang/JavaLexer.py @@ -0,0 +1,5285 @@ +# $ANTLR 3.1.3 Mar 18, 2009 10:09:25 Java.g 2012-01-29 13:54:05 + +import sys +from antlr4 import * +from antlr4.compat import set, frozenset + + +# for convenience in actions +HIDDEN = BaseRecognizer.HIDDEN + +# token types +PACKAGE=84 +EXPONENT=173 +STAR=49 +WHILE=103 +MOD=32 +MOD_ASSIGN=33 +CASE=58 +CHAR=60 +NEW=82 +DO=64 +GENERIC_TYPE_PARAM_LIST=138 +CLASS_INSTANCE_INITIALIZER=121 +ARRAY_ELEMENT_ACCESS=115 +FOR_CONDITION=129 +NOT=34 +VAR_DECLARATION=160 +ANNOTATION_METHOD_DECL=109 +EOF=-1 +DIV_ASSIGN=14 +BREAK=56 +LOGICAL_AND=26 +BIT_SHIFT_RIGHT_ASSIGN=9 +UNARY_PLUS=159 +TYPE=157 +FINAL=70 +INC=21 +RPAREN=43 +IMPORT=78 +STRING_LITERAL=170 +FOR_UPDATE=132 +FLOATING_POINT_LITERAL=168 +CAST_EXPR=118 +NOT_EQUAL=35 +VOID_METHOD_DECL=163 +RETURN=88 +THIS=95 +DOUBLE=65 +VOID=101 +ENUM_TOP_LEVEL_SCOPE=125 +SUPER=92 +COMMENT=181 +ANNOTATION_INIT_KEY_LIST=107 +JAVA_ID_START=178 +FLOAT_TYPE_SUFFIX=174 +PRE_DEC=149 +RBRACK=41 +IMPLEMENTS_CLAUSE=140 +SWITCH_BLOCK_LABEL_LIST=154 +LINE_COMMENT=182 +PRIVATE=85 +STATIC=90 +BLOCK_SCOPE=117 +ANNOTATION_INIT_DEFAULT_KEY=106 +SWITCH=93 +NULL=83 +VAR_DECLARATOR=161 +MINUS_ASSIGN=31 +ELSE=66 +STRICTFP=91 +CHARACTER_LITERAL=169 +PRE_INC=150 +ANNOTATION_LIST=108 +ELLIPSIS=17 +NATIVE=81 +OCTAL_ESCAPE=177 +UNARY_MINUS=158 +THROWS=97 +LCURLY=23 +INT=79 +FORMAL_PARAM_VARARG_DECL=135 +METHOD_CALL=144 +ASSERT=54 +TRY=100 +INTERFACE_TOP_LEVEL_SCOPE=139 +SHIFT_LEFT=45 +WS=180 +SHIFT_RIGHT=47 +FORMAL_PARAM_STD_DECL=134 +LOCAL_MODIFIER_LIST=142 +OR=36 +LESS_THAN=25 +SHIFT_RIGHT_ASSIGN=48 +EXTENDS_BOUND_LIST=127 +JAVA_SOURCE=143 +CATCH=59 +FALSE=69 +INTEGER_TYPE_SUFFIX=172 +DECIMAL_LITERAL=167 +THROW=96 +FOR_INIT=131 +PROTECTED=86 +DEC=12 +CLASS=61 +LBRACK=22 +BIT_SHIFT_RIGHT=8 +THROWS_CLAUSE=156 +GREATER_OR_EQUAL=19 +FOR=73 +LOGICAL_NOT=27 +THIS_CONSTRUCTOR_CALL=155 +FLOAT=72 +JAVADOC_COMMENT=183 +ABSTRACT=53 +AND=4 +POST_DEC=147 +AND_ASSIGN=5 +ANNOTATION_SCOPE=110 +MODIFIER_LIST=145 +STATIC_ARRAY_CREATOR=152 +LPAREN=29 +IF=74 +AT=7 +CONSTRUCTOR_DECL=124 +ESCAPE_SEQUENCE=175 +LABELED_STATEMENT=141 +UNICODE_ESCAPE=176 +BOOLEAN=55 +SYNCHRONIZED=94 +EXPR=126 +CLASS_TOP_LEVEL_SCOPE=123 +IMPLEMENTS=75 +CONTINUE=62 +COMMA=11 +TRANSIENT=98 +XOR_ASSIGN=52 +EQUAL=18 +LOGICAL_OR=28 +ARGUMENT_LIST=112 +QUALIFIED_TYPE_IDENT=151 +IDENT=164 +PLUS=38 +ANNOTATION_INIT_BLOCK=105 +HEX_LITERAL=165 +DOT=15 +SHIFT_LEFT_ASSIGN=46 +FORMAL_PARAM_LIST=133 +GENERIC_TYPE_ARG_LIST=137 +DOTSTAR=16 +ANNOTATION_TOP_LEVEL_SCOPE=111 +BYTE=57 +XOR=51 +JAVA_ID_PART=179 +GREATER_THAN=20 +VOLATILE=102 +PARENTESIZED_EXPR=146 +LESS_OR_EQUAL=24 +ARRAY_DECLARATOR_LIST=114 +CLASS_STATIC_INITIALIZER=122 +DEFAULT=63 +OCTAL_LITERAL=166 +HEX_DIGIT=171 +SHORT=89 +INSTANCEOF=76 +MINUS=30 +SEMI=44 +TRUE=99 +EXTENDS_CLAUSE=128 +STAR_ASSIGN=50 +VAR_DECLARATOR_LIST=162 +COLON=10 +ARRAY_DECLARATOR=113 +OR_ASSIGN=37 +ENUM=67 +QUESTION=40 +FINALLY=71 +RCURLY=42 +ASSIGN=6 +PLUS_ASSIGN=39 +ANNOTATION_INIT_ARRAY_ELEMENT=104 +FUNCTION_METHOD_DECL=136 +INTERFACE=77 +DIV=13 +POST_INC=148 +LONG=80 +CLASS_CONSTRUCTOR_CALL=120 +PUBLIC=87 +EXTENDS=68 +FOR_EACH=130 +ARRAY_INITIALIZER=116 +CATCH_CLAUSE_LIST=119 +SUPER_CONSTRUCTOR_CALL=153 + + +class JavaLexer(Lexer): + + grammarFileName = "Java.g" + antlr_version = version_str_to_tuple("3.1.3 Mar 18, 2009 10:09:25") + antlr_version_str = "3.1.3 Mar 18, 2009 10:09:25" + + def __init__(self, input=None, state=None): + if state is None: + state = RecognizerSharedState() + super(JavaLexer, self).__init__(input, state) + + + self.dfa29 = self.DFA29( + self, 29, + eot = self.DFA29_eot, + eof = self.DFA29_eof, + min = self.DFA29_min, + max = self.DFA29_max, + accept = self.DFA29_accept, + special = self.DFA29_special, + transition = self.DFA29_transition + ) + + + + + + + # $ANTLR start "AND" + def mAND(self, ): + + try: + _type = AND + _channel = DEFAULT_CHANNEL + + # Java.g:7:5: ( '&' ) + # Java.g:7:7: '&' + pass + self.match(38) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "AND" + + + + # $ANTLR start "AND_ASSIGN" + def mAND_ASSIGN(self, ): + + try: + _type = AND_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:8:12: ( '&=' ) + # Java.g:8:14: '&=' + pass + self.match("&=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "AND_ASSIGN" + + + + # $ANTLR start "ASSIGN" + def mASSIGN(self, ): + + try: + _type = ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:9:8: ( '=' ) + # Java.g:9:10: '=' + pass + self.match(61) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "ASSIGN" + + + + # $ANTLR start "AT" + def mAT(self, ): + + try: + _type = AT + _channel = DEFAULT_CHANNEL + + # Java.g:10:4: ( '@' ) + # Java.g:10:6: '@' + pass + self.match(64) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "AT" + + + + # $ANTLR start "BIT_SHIFT_RIGHT" + def mBIT_SHIFT_RIGHT(self, ): + + try: + _type = BIT_SHIFT_RIGHT + _channel = DEFAULT_CHANNEL + + # Java.g:11:17: ( '>>>' ) + # Java.g:11:19: '>>>' + pass + self.match(">>>") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "BIT_SHIFT_RIGHT" + + + + # $ANTLR start "BIT_SHIFT_RIGHT_ASSIGN" + def mBIT_SHIFT_RIGHT_ASSIGN(self, ): + + try: + _type = BIT_SHIFT_RIGHT_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:12:24: ( '>>>=' ) + # Java.g:12:26: '>>>=' + pass + self.match(">>>=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "BIT_SHIFT_RIGHT_ASSIGN" + + + + # $ANTLR start "COLON" + def mCOLON(self, ): + + try: + _type = COLON + _channel = DEFAULT_CHANNEL + + # Java.g:13:7: ( ':' ) + # Java.g:13:9: ':' + pass + self.match(58) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "COLON" + + + + # $ANTLR start "COMMA" + def mCOMMA(self, ): + + try: + _type = COMMA + _channel = DEFAULT_CHANNEL + + # Java.g:14:7: ( ',' ) + # Java.g:14:9: ',' + pass + self.match(44) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "COMMA" + + + + # $ANTLR start "DEC" + def mDEC(self, ): + + try: + _type = DEC + _channel = DEFAULT_CHANNEL + + # Java.g:15:5: ( '--' ) + # Java.g:15:7: '--' + pass + self.match("--") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "DEC" + + + + # $ANTLR start "DIV" + def mDIV(self, ): + + try: + _type = DIV + _channel = DEFAULT_CHANNEL + + # Java.g:16:5: ( '/' ) + # Java.g:16:7: '/' + pass + self.match(47) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "DIV" + + + + # $ANTLR start "DIV_ASSIGN" + def mDIV_ASSIGN(self, ): + + try: + _type = DIV_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:17:12: ( '/=' ) + # Java.g:17:14: '/=' + pass + self.match("/=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "DIV_ASSIGN" + + + + # $ANTLR start "DOT" + def mDOT(self, ): + + try: + _type = DOT + _channel = DEFAULT_CHANNEL + + # Java.g:18:5: ( '.' ) + # Java.g:18:7: '.' + pass + self.match(46) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "DOT" + + + + # $ANTLR start "DOTSTAR" + def mDOTSTAR(self, ): + + try: + _type = DOTSTAR + _channel = DEFAULT_CHANNEL + + # Java.g:19:9: ( '.*' ) + # Java.g:19:11: '.*' + pass + self.match(".*") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "DOTSTAR" + + + + # $ANTLR start "ELLIPSIS" + def mELLIPSIS(self, ): + + try: + _type = ELLIPSIS + _channel = DEFAULT_CHANNEL + + # Java.g:20:10: ( '...' ) + # Java.g:20:12: '...' + pass + self.match("...") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "ELLIPSIS" + + + + # $ANTLR start "EQUAL" + def mEQUAL(self, ): + + try: + _type = EQUAL + _channel = DEFAULT_CHANNEL + + # Java.g:21:7: ( '==' ) + # Java.g:21:9: '==' + pass + self.match("==") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "EQUAL" + + + + # $ANTLR start "GREATER_OR_EQUAL" + def mGREATER_OR_EQUAL(self, ): + + try: + _type = GREATER_OR_EQUAL + _channel = DEFAULT_CHANNEL + + # Java.g:22:18: ( '>=' ) + # Java.g:22:20: '>=' + pass + self.match(">=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "GREATER_OR_EQUAL" + + + + # $ANTLR start "GREATER_THAN" + def mGREATER_THAN(self, ): + + try: + _type = GREATER_THAN + _channel = DEFAULT_CHANNEL + + # Java.g:23:14: ( '>' ) + # Java.g:23:16: '>' + pass + self.match(62) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "GREATER_THAN" + + + + # $ANTLR start "INC" + def mINC(self, ): + + try: + _type = INC + _channel = DEFAULT_CHANNEL + + # Java.g:24:5: ( '++' ) + # Java.g:24:7: '++' + pass + self.match("++") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "INC" + + + + # $ANTLR start "LBRACK" + def mLBRACK(self, ): + + try: + _type = LBRACK + _channel = DEFAULT_CHANNEL + + # Java.g:25:8: ( '[' ) + # Java.g:25:10: '[' + pass + self.match(91) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LBRACK" + + + + # $ANTLR start "LCURLY" + def mLCURLY(self, ): + + try: + _type = LCURLY + _channel = DEFAULT_CHANNEL + + # Java.g:26:8: ( '{' ) + # Java.g:26:10: '{' + pass + self.match(123) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LCURLY" + + + + # $ANTLR start "LESS_OR_EQUAL" + def mLESS_OR_EQUAL(self, ): + + try: + _type = LESS_OR_EQUAL + _channel = DEFAULT_CHANNEL + + # Java.g:27:15: ( '<=' ) + # Java.g:27:17: '<=' + pass + self.match("<=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LESS_OR_EQUAL" + + + + # $ANTLR start "LESS_THAN" + def mLESS_THAN(self, ): + + try: + _type = LESS_THAN + _channel = DEFAULT_CHANNEL + + # Java.g:28:11: ( '<' ) + # Java.g:28:13: '<' + pass + self.match(60) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LESS_THAN" + + + + # $ANTLR start "LOGICAL_AND" + def mLOGICAL_AND(self, ): + + try: + _type = LOGICAL_AND + _channel = DEFAULT_CHANNEL + + # Java.g:29:13: ( '&&' ) + # Java.g:29:15: '&&' + pass + self.match("&&") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LOGICAL_AND" + + + + # $ANTLR start "LOGICAL_NOT" + def mLOGICAL_NOT(self, ): + + try: + _type = LOGICAL_NOT + _channel = DEFAULT_CHANNEL + + # Java.g:30:13: ( '!' ) + # Java.g:30:15: '!' + pass + self.match(33) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LOGICAL_NOT" + + + + # $ANTLR start "LOGICAL_OR" + def mLOGICAL_OR(self, ): + + try: + _type = LOGICAL_OR + _channel = DEFAULT_CHANNEL + + # Java.g:31:12: ( '||' ) + # Java.g:31:14: '||' + pass + self.match("||") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LOGICAL_OR" + + + + # $ANTLR start "LPAREN" + def mLPAREN(self, ): + + try: + _type = LPAREN + _channel = DEFAULT_CHANNEL + + # Java.g:32:8: ( '(' ) + # Java.g:32:10: '(' + pass + self.match(40) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LPAREN" + + + + # $ANTLR start "MINUS" + def mMINUS(self, ): + + try: + _type = MINUS + _channel = DEFAULT_CHANNEL + + # Java.g:33:7: ( '-' ) + # Java.g:33:9: '-' + pass + self.match(45) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "MINUS" + + + + # $ANTLR start "MINUS_ASSIGN" + def mMINUS_ASSIGN(self, ): + + try: + _type = MINUS_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:34:14: ( '-=' ) + # Java.g:34:16: '-=' + pass + self.match("-=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "MINUS_ASSIGN" + + + + # $ANTLR start "MOD" + def mMOD(self, ): + + try: + _type = MOD + _channel = DEFAULT_CHANNEL + + # Java.g:35:5: ( '%' ) + # Java.g:35:7: '%' + pass + self.match(37) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "MOD" + + + + # $ANTLR start "MOD_ASSIGN" + def mMOD_ASSIGN(self, ): + + try: + _type = MOD_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:36:12: ( '%=' ) + # Java.g:36:14: '%=' + pass + self.match("%=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "MOD_ASSIGN" + + + + # $ANTLR start "NOT" + def mNOT(self, ): + + try: + _type = NOT + _channel = DEFAULT_CHANNEL + + # Java.g:37:5: ( '~' ) + # Java.g:37:7: '~' + pass + self.match(126) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "NOT" + + + + # $ANTLR start "NOT_EQUAL" + def mNOT_EQUAL(self, ): + + try: + _type = NOT_EQUAL + _channel = DEFAULT_CHANNEL + + # Java.g:38:11: ( '!=' ) + # Java.g:38:13: '!=' + pass + self.match("!=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "NOT_EQUAL" + + + + # $ANTLR start "OR" + def mOR(self, ): + + try: + _type = OR + _channel = DEFAULT_CHANNEL + + # Java.g:39:4: ( '|' ) + # Java.g:39:6: '|' + pass + self.match(124) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "OR" + + + + # $ANTLR start "OR_ASSIGN" + def mOR_ASSIGN(self, ): + + try: + _type = OR_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:40:11: ( '|=' ) + # Java.g:40:13: '|=' + pass + self.match("|=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "OR_ASSIGN" + + + + # $ANTLR start "PLUS" + def mPLUS(self, ): + + try: + _type = PLUS + _channel = DEFAULT_CHANNEL + + # Java.g:41:6: ( '+' ) + # Java.g:41:8: '+' + pass + self.match(43) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "PLUS" + + + + # $ANTLR start "PLUS_ASSIGN" + def mPLUS_ASSIGN(self, ): + + try: + _type = PLUS_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:42:13: ( '+=' ) + # Java.g:42:15: '+=' + pass + self.match("+=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "PLUS_ASSIGN" + + + + # $ANTLR start "QUESTION" + def mQUESTION(self, ): + + try: + _type = QUESTION + _channel = DEFAULT_CHANNEL + + # Java.g:43:10: ( '?' ) + # Java.g:43:12: '?' + pass + self.match(63) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "QUESTION" + + + + # $ANTLR start "RBRACK" + def mRBRACK(self, ): + + try: + _type = RBRACK + _channel = DEFAULT_CHANNEL + + # Java.g:44:8: ( ']' ) + # Java.g:44:10: ']' + pass + self.match(93) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "RBRACK" + + + + # $ANTLR start "RCURLY" + def mRCURLY(self, ): + + try: + _type = RCURLY + _channel = DEFAULT_CHANNEL + + # Java.g:45:8: ( '}' ) + # Java.g:45:10: '}' + pass + self.match(125) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "RCURLY" + + + + # $ANTLR start "RPAREN" + def mRPAREN(self, ): + + try: + _type = RPAREN + _channel = DEFAULT_CHANNEL + + # Java.g:46:8: ( ')' ) + # Java.g:46:10: ')' + pass + self.match(41) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "RPAREN" + + + + # $ANTLR start "SEMI" + def mSEMI(self, ): + + try: + _type = SEMI + _channel = DEFAULT_CHANNEL + + # Java.g:47:6: ( ';' ) + # Java.g:47:8: ';' + pass + self.match(59) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "SEMI" + + + + # $ANTLR start "SHIFT_LEFT" + def mSHIFT_LEFT(self, ): + + try: + _type = SHIFT_LEFT + _channel = DEFAULT_CHANNEL + + # Java.g:48:12: ( '<<' ) + # Java.g:48:14: '<<' + pass + self.match("<<") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "SHIFT_LEFT" + + + + # $ANTLR start "SHIFT_LEFT_ASSIGN" + def mSHIFT_LEFT_ASSIGN(self, ): + + try: + _type = SHIFT_LEFT_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:49:19: ( '<<=' ) + # Java.g:49:21: '<<=' + pass + self.match("<<=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "SHIFT_LEFT_ASSIGN" + + + + # $ANTLR start "SHIFT_RIGHT" + def mSHIFT_RIGHT(self, ): + + try: + _type = SHIFT_RIGHT + _channel = DEFAULT_CHANNEL + + # Java.g:50:13: ( '>>' ) + # Java.g:50:15: '>>' + pass + self.match(">>") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "SHIFT_RIGHT" + + + + # $ANTLR start "SHIFT_RIGHT_ASSIGN" + def mSHIFT_RIGHT_ASSIGN(self, ): + + try: + _type = SHIFT_RIGHT_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:51:20: ( '>>=' ) + # Java.g:51:22: '>>=' + pass + self.match(">>=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "SHIFT_RIGHT_ASSIGN" + + + + # $ANTLR start "STAR" + def mSTAR(self, ): + + try: + _type = STAR + _channel = DEFAULT_CHANNEL + + # Java.g:52:6: ( '*' ) + # Java.g:52:8: '*' + pass + self.match(42) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "STAR" + + + + # $ANTLR start "STAR_ASSIGN" + def mSTAR_ASSIGN(self, ): + + try: + _type = STAR_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:53:13: ( '*=' ) + # Java.g:53:15: '*=' + pass + self.match("*=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "STAR_ASSIGN" + + + + # $ANTLR start "XOR" + def mXOR(self, ): + + try: + _type = XOR + _channel = DEFAULT_CHANNEL + + # Java.g:54:5: ( '^' ) + # Java.g:54:7: '^' + pass + self.match(94) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "XOR" + + + + # $ANTLR start "XOR_ASSIGN" + def mXOR_ASSIGN(self, ): + + try: + _type = XOR_ASSIGN + _channel = DEFAULT_CHANNEL + + # Java.g:55:12: ( '^=' ) + # Java.g:55:14: '^=' + pass + self.match("^=") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "XOR_ASSIGN" + + + + # $ANTLR start "ABSTRACT" + def mABSTRACT(self, ): + + try: + _type = ABSTRACT + _channel = DEFAULT_CHANNEL + + # Java.g:56:10: ( 'abstract' ) + # Java.g:56:12: 'abstract' + pass + self.match("abstract") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "ABSTRACT" + + + + # $ANTLR start "ASSERT" + def mASSERT(self, ): + + try: + _type = ASSERT + _channel = DEFAULT_CHANNEL + + # Java.g:57:8: ( 'assert' ) + # Java.g:57:10: 'assert' + pass + self.match("assert") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "ASSERT" + + + + # $ANTLR start "BOOLEAN" + def mBOOLEAN(self, ): + + try: + _type = BOOLEAN + _channel = DEFAULT_CHANNEL + + # Java.g:58:9: ( 'boolean' ) + # Java.g:58:11: 'boolean' + pass + self.match("boolean") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "BOOLEAN" + + + + # $ANTLR start "BREAK" + def mBREAK(self, ): + + try: + _type = BREAK + _channel = DEFAULT_CHANNEL + + # Java.g:59:7: ( 'break' ) + # Java.g:59:9: 'break' + pass + self.match("break") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "BREAK" + + + + # $ANTLR start "BYTE" + def mBYTE(self, ): + + try: + _type = BYTE + _channel = DEFAULT_CHANNEL + + # Java.g:60:6: ( 'byte' ) + # Java.g:60:8: 'byte' + pass + self.match("byte") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "BYTE" + + + + # $ANTLR start "CASE" + def mCASE(self, ): + + try: + _type = CASE + _channel = DEFAULT_CHANNEL + + # Java.g:61:6: ( 'case' ) + # Java.g:61:8: 'case' + pass + self.match("case") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "CASE" + + + + # $ANTLR start "CATCH" + def mCATCH(self, ): + + try: + _type = CATCH + _channel = DEFAULT_CHANNEL + + # Java.g:62:7: ( 'catch' ) + # Java.g:62:9: 'catch' + pass + self.match("catch") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "CATCH" + + + + # $ANTLR start "CHAR" + def mCHAR(self, ): + + try: + _type = CHAR + _channel = DEFAULT_CHANNEL + + # Java.g:63:6: ( 'char' ) + # Java.g:63:8: 'char' + pass + self.match("char") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "CHAR" + + + + # $ANTLR start "CLASS" + def mCLASS(self, ): + + try: + _type = CLASS + _channel = DEFAULT_CHANNEL + + # Java.g:64:7: ( 'class' ) + # Java.g:64:9: 'class' + pass + self.match("class") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "CLASS" + + + + # $ANTLR start "CONTINUE" + def mCONTINUE(self, ): + + try: + _type = CONTINUE + _channel = DEFAULT_CHANNEL + + # Java.g:65:10: ( 'continue' ) + # Java.g:65:12: 'continue' + pass + self.match("continue") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "CONTINUE" + + + + # $ANTLR start "DEFAULT" + def mDEFAULT(self, ): + + try: + _type = DEFAULT + _channel = DEFAULT_CHANNEL + + # Java.g:66:9: ( 'default' ) + # Java.g:66:11: 'default' + pass + self.match("default") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "DEFAULT" + + + + # $ANTLR start "DO" + def mDO(self, ): + + try: + _type = DO + _channel = DEFAULT_CHANNEL + + # Java.g:67:4: ( 'do' ) + # Java.g:67:6: 'do' + pass + self.match("do") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "DO" + + + + # $ANTLR start "DOUBLE" + def mDOUBLE(self, ): + + try: + _type = DOUBLE + _channel = DEFAULT_CHANNEL + + # Java.g:68:8: ( 'double' ) + # Java.g:68:10: 'double' + pass + self.match("double") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "DOUBLE" + + + + # $ANTLR start "ELSE" + def mELSE(self, ): + + try: + _type = ELSE + _channel = DEFAULT_CHANNEL + + # Java.g:69:6: ( 'else' ) + # Java.g:69:8: 'else' + pass + self.match("else") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "ELSE" + + + + # $ANTLR start "ENUM" + def mENUM(self, ): + + try: + _type = ENUM + _channel = DEFAULT_CHANNEL + + # Java.g:70:6: ( 'enum' ) + # Java.g:70:8: 'enum' + pass + self.match("enum") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "ENUM" + + + + # $ANTLR start "EXTENDS" + def mEXTENDS(self, ): + + try: + _type = EXTENDS + _channel = DEFAULT_CHANNEL + + # Java.g:71:9: ( 'extends' ) + # Java.g:71:11: 'extends' + pass + self.match("extends") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "EXTENDS" + + + + # $ANTLR start "FALSE" + def mFALSE(self, ): + + try: + _type = FALSE + _channel = DEFAULT_CHANNEL + + # Java.g:72:7: ( 'false' ) + # Java.g:72:9: 'false' + pass + self.match("false") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "FALSE" + + + + # $ANTLR start "FINAL" + def mFINAL(self, ): + + try: + _type = FINAL + _channel = DEFAULT_CHANNEL + + # Java.g:73:7: ( 'final' ) + # Java.g:73:9: 'final' + pass + self.match("final") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "FINAL" + + + + # $ANTLR start "FINALLY" + def mFINALLY(self, ): + + try: + _type = FINALLY + _channel = DEFAULT_CHANNEL + + # Java.g:74:9: ( 'finally' ) + # Java.g:74:11: 'finally' + pass + self.match("finally") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "FINALLY" + + + + # $ANTLR start "FLOAT" + def mFLOAT(self, ): + + try: + _type = FLOAT + _channel = DEFAULT_CHANNEL + + # Java.g:75:7: ( 'float' ) + # Java.g:75:9: 'float' + pass + self.match("float") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "FLOAT" + + + + # $ANTLR start "FOR" + def mFOR(self, ): + + try: + _type = FOR + _channel = DEFAULT_CHANNEL + + # Java.g:76:5: ( 'for' ) + # Java.g:76:7: 'for' + pass + self.match("for") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "FOR" + + + + # $ANTLR start "IF" + def mIF(self, ): + + try: + _type = IF + _channel = DEFAULT_CHANNEL + + # Java.g:77:4: ( 'if' ) + # Java.g:77:6: 'if' + pass + self.match("if") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "IF" + + + + # $ANTLR start "IMPLEMENTS" + def mIMPLEMENTS(self, ): + + try: + _type = IMPLEMENTS + _channel = DEFAULT_CHANNEL + + # Java.g:78:12: ( 'implements' ) + # Java.g:78:14: 'implements' + pass + self.match("implements") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "IMPLEMENTS" + + + + # $ANTLR start "INSTANCEOF" + def mINSTANCEOF(self, ): + + try: + _type = INSTANCEOF + _channel = DEFAULT_CHANNEL + + # Java.g:79:12: ( 'instanceof' ) + # Java.g:79:14: 'instanceof' + pass + self.match("instanceof") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "INSTANCEOF" + + + + # $ANTLR start "INTERFACE" + def mINTERFACE(self, ): + + try: + _type = INTERFACE + _channel = DEFAULT_CHANNEL + + # Java.g:80:11: ( 'interface' ) + # Java.g:80:13: 'interface' + pass + self.match("interface") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "INTERFACE" + + + + # $ANTLR start "IMPORT" + def mIMPORT(self, ): + + try: + _type = IMPORT + _channel = DEFAULT_CHANNEL + + # Java.g:81:8: ( 'import' ) + # Java.g:81:10: 'import' + pass + self.match("import") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "IMPORT" + + + + # $ANTLR start "INT" + def mINT(self, ): + + try: + _type = INT + _channel = DEFAULT_CHANNEL + + # Java.g:82:5: ( 'int' ) + # Java.g:82:7: 'int' + pass + self.match("int") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "INT" + + + + # $ANTLR start "LONG" + def mLONG(self, ): + + try: + _type = LONG + _channel = DEFAULT_CHANNEL + + # Java.g:83:6: ( 'long' ) + # Java.g:83:8: 'long' + pass + self.match("long") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LONG" + + + + # $ANTLR start "NATIVE" + def mNATIVE(self, ): + + try: + _type = NATIVE + _channel = DEFAULT_CHANNEL + + # Java.g:84:8: ( 'native' ) + # Java.g:84:10: 'native' + pass + self.match("native") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "NATIVE" + + + + # $ANTLR start "NEW" + def mNEW(self, ): + + try: + _type = NEW + _channel = DEFAULT_CHANNEL + + # Java.g:85:5: ( 'new' ) + # Java.g:85:7: 'new' + pass + self.match("new") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "NEW" + + + + # $ANTLR start "NULL" + def mNULL(self, ): + + try: + _type = NULL + _channel = DEFAULT_CHANNEL + + # Java.g:86:6: ( 'null' ) + # Java.g:86:8: 'null' + pass + self.match("null") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "NULL" + + + + # $ANTLR start "PACKAGE" + def mPACKAGE(self, ): + + try: + _type = PACKAGE + _channel = DEFAULT_CHANNEL + + # Java.g:87:9: ( 'package' ) + # Java.g:87:11: 'package' + pass + self.match("package") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "PACKAGE" + + + + # $ANTLR start "PRIVATE" + def mPRIVATE(self, ): + + try: + _type = PRIVATE + _channel = DEFAULT_CHANNEL + + # Java.g:88:9: ( 'private' ) + # Java.g:88:11: 'private' + pass + self.match("private") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "PRIVATE" + + + + # $ANTLR start "PROTECTED" + def mPROTECTED(self, ): + + try: + _type = PROTECTED + _channel = DEFAULT_CHANNEL + + # Java.g:89:11: ( 'protected' ) + # Java.g:89:13: 'protected' + pass + self.match("protected") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "PROTECTED" + + + + # $ANTLR start "PUBLIC" + def mPUBLIC(self, ): + + try: + _type = PUBLIC + _channel = DEFAULT_CHANNEL + + # Java.g:90:8: ( 'public' ) + # Java.g:90:10: 'public' + pass + self.match("public") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "PUBLIC" + + + + # $ANTLR start "RETURN" + def mRETURN(self, ): + + try: + _type = RETURN + _channel = DEFAULT_CHANNEL + + # Java.g:91:8: ( 'return' ) + # Java.g:91:10: 'return' + pass + self.match("return") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "RETURN" + + + + # $ANTLR start "SHORT" + def mSHORT(self, ): + + try: + _type = SHORT + _channel = DEFAULT_CHANNEL + + # Java.g:92:7: ( 'short' ) + # Java.g:92:9: 'short' + pass + self.match("short") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "SHORT" + + + + # $ANTLR start "STATIC" + def mSTATIC(self, ): + + try: + _type = STATIC + _channel = DEFAULT_CHANNEL + + # Java.g:93:8: ( 'static' ) + # Java.g:93:10: 'static' + pass + self.match("static") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "STATIC" + + + + # $ANTLR start "STRICTFP" + def mSTRICTFP(self, ): + + try: + _type = STRICTFP + _channel = DEFAULT_CHANNEL + + # Java.g:94:10: ( 'strictfp' ) + # Java.g:94:12: 'strictfp' + pass + self.match("strictfp") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "STRICTFP" + + + + # $ANTLR start "SUPER" + def mSUPER(self, ): + + try: + _type = SUPER + _channel = DEFAULT_CHANNEL + + # Java.g:95:7: ( 'super' ) + # Java.g:95:9: 'super' + pass + self.match("super") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "SUPER" + + + + # $ANTLR start "SWITCH" + def mSWITCH(self, ): + + try: + _type = SWITCH + _channel = DEFAULT_CHANNEL + + # Java.g:96:8: ( 'switch' ) + # Java.g:96:10: 'switch' + pass + self.match("switch") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "SWITCH" + + + + # $ANTLR start "SYNCHRONIZED" + def mSYNCHRONIZED(self, ): + + try: + _type = SYNCHRONIZED + _channel = DEFAULT_CHANNEL + + # Java.g:97:14: ( 'synchronized' ) + # Java.g:97:16: 'synchronized' + pass + self.match("synchronized") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "SYNCHRONIZED" + + + + # $ANTLR start "THIS" + def mTHIS(self, ): + + try: + _type = THIS + _channel = DEFAULT_CHANNEL + + # Java.g:98:6: ( 'this' ) + # Java.g:98:8: 'this' + pass + self.match("this") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "THIS" + + + + # $ANTLR start "THROW" + def mTHROW(self, ): + + try: + _type = THROW + _channel = DEFAULT_CHANNEL + + # Java.g:99:7: ( 'throw' ) + # Java.g:99:9: 'throw' + pass + self.match("throw") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "THROW" + + + + # $ANTLR start "THROWS" + def mTHROWS(self, ): + + try: + _type = THROWS + _channel = DEFAULT_CHANNEL + + # Java.g:100:8: ( 'throws' ) + # Java.g:100:10: 'throws' + pass + self.match("throws") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "THROWS" + + + + # $ANTLR start "TRANSIENT" + def mTRANSIENT(self, ): + + try: + _type = TRANSIENT + _channel = DEFAULT_CHANNEL + + # Java.g:101:11: ( 'transient' ) + # Java.g:101:13: 'transient' + pass + self.match("transient") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "TRANSIENT" + + + + # $ANTLR start "TRUE" + def mTRUE(self, ): + + try: + _type = TRUE + _channel = DEFAULT_CHANNEL + + # Java.g:102:6: ( 'true' ) + # Java.g:102:8: 'true' + pass + self.match("true") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "TRUE" + + + + # $ANTLR start "TRY" + def mTRY(self, ): + + try: + _type = TRY + _channel = DEFAULT_CHANNEL + + # Java.g:103:5: ( 'try' ) + # Java.g:103:7: 'try' + pass + self.match("try") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "TRY" + + + + # $ANTLR start "VOID" + def mVOID(self, ): + + try: + _type = VOID + _channel = DEFAULT_CHANNEL + + # Java.g:104:6: ( 'void' ) + # Java.g:104:8: 'void' + pass + self.match("void") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "VOID" + + + + # $ANTLR start "VOLATILE" + def mVOLATILE(self, ): + + try: + _type = VOLATILE + _channel = DEFAULT_CHANNEL + + # Java.g:105:10: ( 'volatile' ) + # Java.g:105:12: 'volatile' + pass + self.match("volatile") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "VOLATILE" + + + + # $ANTLR start "WHILE" + def mWHILE(self, ): + + try: + _type = WHILE + _channel = DEFAULT_CHANNEL + + # Java.g:106:7: ( 'while' ) + # Java.g:106:9: 'while' + pass + self.match("while") + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "WHILE" + + + + # $ANTLR start "HEX_LITERAL" + def mHEX_LITERAL(self, ): + + try: + _type = HEX_LITERAL + _channel = DEFAULT_CHANNEL + + # Java.g:985:13: ( '0' ( 'x' | 'X' ) ( HEX_DIGIT )+ ( INTEGER_TYPE_SUFFIX )? ) + # Java.g:985:15: '0' ( 'x' | 'X' ) ( HEX_DIGIT )+ ( INTEGER_TYPE_SUFFIX )? + pass + self.match(48) + if self.input.LA(1) == 88 or self.input.LA(1) == 120: + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + # Java.g:985:29: ( HEX_DIGIT )+ + cnt1 = 0 + while True: #loop1 + alt1 = 2 + LA1_0 = self.input.LA(1) + + if ((48 <= LA1_0 <= 57) or (65 <= LA1_0 <= 70) or (97 <= LA1_0 <= 102)) : + alt1 = 1 + + + if alt1 == 1: + # Java.g:985:29: HEX_DIGIT + pass + self.mHEX_DIGIT() + + + else: + if cnt1 >= 1: + break #loop1 + + eee = EarlyExitException(1, self.input) + raise eee + + cnt1 += 1 + # Java.g:985:40: ( INTEGER_TYPE_SUFFIX )? + alt2 = 2 + LA2_0 = self.input.LA(1) + + if (LA2_0 == 76 or LA2_0 == 108) : + alt2 = 1 + if alt2 == 1: + # Java.g:985:40: INTEGER_TYPE_SUFFIX + pass + self.mINTEGER_TYPE_SUFFIX() + + + + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "HEX_LITERAL" + + + + # $ANTLR start "DECIMAL_LITERAL" + def mDECIMAL_LITERAL(self, ): + + try: + _type = DECIMAL_LITERAL + _channel = DEFAULT_CHANNEL + + # Java.g:987:17: ( ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( INTEGER_TYPE_SUFFIX )? ) + # Java.g:987:19: ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( INTEGER_TYPE_SUFFIX )? + pass + # Java.g:987:19: ( '0' | '1' .. '9' ( '0' .. '9' )* ) + alt4 = 2 + LA4_0 = self.input.LA(1) + + if (LA4_0 == 48) : + alt4 = 1 + elif ((49 <= LA4_0 <= 57)) : + alt4 = 2 + else: + nvae = NoViableAltException("", 4, 0, self.input) + + raise nvae + + if alt4 == 1: + # Java.g:987:20: '0' + pass + self.match(48) + + + elif alt4 == 2: + # Java.g:987:26: '1' .. '9' ( '0' .. '9' )* + pass + self.matchRange(49, 57) + # Java.g:987:35: ( '0' .. '9' )* + while True: #loop3 + alt3 = 2 + LA3_0 = self.input.LA(1) + + if ((48 <= LA3_0 <= 57)) : + alt3 = 1 + + + if alt3 == 1: + # Java.g:987:35: '0' .. '9' + pass + self.matchRange(48, 57) + + + else: + break #loop3 + + + + # Java.g:987:46: ( INTEGER_TYPE_SUFFIX )? + alt5 = 2 + LA5_0 = self.input.LA(1) + + if (LA5_0 == 76 or LA5_0 == 108) : + alt5 = 1 + if alt5 == 1: + # Java.g:987:46: INTEGER_TYPE_SUFFIX + pass + self.mINTEGER_TYPE_SUFFIX() + + + + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "DECIMAL_LITERAL" + + + + # $ANTLR start "OCTAL_LITERAL" + def mOCTAL_LITERAL(self, ): + + try: + _type = OCTAL_LITERAL + _channel = DEFAULT_CHANNEL + + # Java.g:989:15: ( '0' ( '0' .. '7' )+ ( INTEGER_TYPE_SUFFIX )? ) + # Java.g:989:17: '0' ( '0' .. '7' )+ ( INTEGER_TYPE_SUFFIX )? + pass + self.match(48) + # Java.g:989:21: ( '0' .. '7' )+ + cnt6 = 0 + while True: #loop6 + alt6 = 2 + LA6_0 = self.input.LA(1) + + if ((48 <= LA6_0 <= 55)) : + alt6 = 1 + + + if alt6 == 1: + # Java.g:989:22: '0' .. '7' + pass + self.matchRange(48, 55) + + + else: + if cnt6 >= 1: + break #loop6 + + eee = EarlyExitException(6, self.input) + raise eee + + cnt6 += 1 + # Java.g:989:33: ( INTEGER_TYPE_SUFFIX )? + alt7 = 2 + LA7_0 = self.input.LA(1) + + if (LA7_0 == 76 or LA7_0 == 108) : + alt7 = 1 + if alt7 == 1: + # Java.g:989:33: INTEGER_TYPE_SUFFIX + pass + self.mINTEGER_TYPE_SUFFIX() + + + + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "OCTAL_LITERAL" + + + + # $ANTLR start "HEX_DIGIT" + def mHEX_DIGIT(self, ): + + try: + # Java.g:992:11: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ) + # Java.g:992:13: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) + pass + if (48 <= self.input.LA(1) <= 57) or (65 <= self.input.LA(1) <= 70) or (97 <= self.input.LA(1) <= 102): + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + + finally: + + pass + + # $ANTLR end "HEX_DIGIT" + + + + # $ANTLR start "INTEGER_TYPE_SUFFIX" + def mINTEGER_TYPE_SUFFIX(self, ): + + try: + # Java.g:995:21: ( ( 'l' | 'L' ) ) + # Java.g:995:23: ( 'l' | 'L' ) + pass + if self.input.LA(1) == 76 or self.input.LA(1) == 108: + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + + finally: + + pass + + # $ANTLR end "INTEGER_TYPE_SUFFIX" + + + + # $ANTLR start "FLOATING_POINT_LITERAL" + def mFLOATING_POINT_LITERAL(self, ): + + try: + _type = FLOATING_POINT_LITERAL + _channel = DEFAULT_CHANNEL + + # Java.g:998:5: ( ( '0' .. '9' )+ ( DOT ( '0' .. '9' )* ( EXPONENT )? ( FLOAT_TYPE_SUFFIX )? | EXPONENT ( FLOAT_TYPE_SUFFIX )? | FLOAT_TYPE_SUFFIX ) | DOT ( '0' .. '9' )+ ( EXPONENT )? ( FLOAT_TYPE_SUFFIX )? ) + alt17 = 2 + LA17_0 = self.input.LA(1) + + if ((48 <= LA17_0 <= 57)) : + alt17 = 1 + elif (LA17_0 == 46) : + alt17 = 2 + else: + nvae = NoViableAltException("", 17, 0, self.input) + + raise nvae + + if alt17 == 1: + # Java.g:998:9: ( '0' .. '9' )+ ( DOT ( '0' .. '9' )* ( EXPONENT )? ( FLOAT_TYPE_SUFFIX )? | EXPONENT ( FLOAT_TYPE_SUFFIX )? | FLOAT_TYPE_SUFFIX ) + pass + # Java.g:998:9: ( '0' .. '9' )+ + cnt8 = 0 + while True: #loop8 + alt8 = 2 + LA8_0 = self.input.LA(1) + + if ((48 <= LA8_0 <= 57)) : + alt8 = 1 + + + if alt8 == 1: + # Java.g:998:10: '0' .. '9' + pass + self.matchRange(48, 57) + + + else: + if cnt8 >= 1: + break #loop8 + + eee = EarlyExitException(8, self.input) + raise eee + + cnt8 += 1 + # Java.g:999:9: ( DOT ( '0' .. '9' )* ( EXPONENT )? ( FLOAT_TYPE_SUFFIX )? | EXPONENT ( FLOAT_TYPE_SUFFIX )? | FLOAT_TYPE_SUFFIX ) + alt13 = 3 + LA13 = self.input.LA(1) + if LA13 == 46: + alt13 = 1 + elif LA13 == 69 or LA13 == 101: + alt13 = 2 + elif LA13 == 68 or LA13 == 70 or LA13 == 100 or LA13 == 102: + alt13 = 3 + else: + nvae = NoViableAltException("", 13, 0, self.input) + + raise nvae + + if alt13 == 1: + # Java.g:1000:13: DOT ( '0' .. '9' )* ( EXPONENT )? ( FLOAT_TYPE_SUFFIX )? + pass + self.mDOT() + # Java.g:1000:17: ( '0' .. '9' )* + while True: #loop9 + alt9 = 2 + LA9_0 = self.input.LA(1) + + if ((48 <= LA9_0 <= 57)) : + alt9 = 1 + + + if alt9 == 1: + # Java.g:1000:18: '0' .. '9' + pass + self.matchRange(48, 57) + + + else: + break #loop9 + # Java.g:1000:29: ( EXPONENT )? + alt10 = 2 + LA10_0 = self.input.LA(1) + + if (LA10_0 == 69 or LA10_0 == 101) : + alt10 = 1 + if alt10 == 1: + # Java.g:1000:29: EXPONENT + pass + self.mEXPONENT() + + + + # Java.g:1000:39: ( FLOAT_TYPE_SUFFIX )? + alt11 = 2 + LA11_0 = self.input.LA(1) + + if (LA11_0 == 68 or LA11_0 == 70 or LA11_0 == 100 or LA11_0 == 102) : + alt11 = 1 + if alt11 == 1: + # Java.g:1000:39: FLOAT_TYPE_SUFFIX + pass + self.mFLOAT_TYPE_SUFFIX() + + + + + + elif alt13 == 2: + # Java.g:1001:13: EXPONENT ( FLOAT_TYPE_SUFFIX )? + pass + self.mEXPONENT() + # Java.g:1001:22: ( FLOAT_TYPE_SUFFIX )? + alt12 = 2 + LA12_0 = self.input.LA(1) + + if (LA12_0 == 68 or LA12_0 == 70 or LA12_0 == 100 or LA12_0 == 102) : + alt12 = 1 + if alt12 == 1: + # Java.g:1001:22: FLOAT_TYPE_SUFFIX + pass + self.mFLOAT_TYPE_SUFFIX() + + + + + + elif alt13 == 3: + # Java.g:1002:13: FLOAT_TYPE_SUFFIX + pass + self.mFLOAT_TYPE_SUFFIX() + + + + + + elif alt17 == 2: + # Java.g:1004:9: DOT ( '0' .. '9' )+ ( EXPONENT )? ( FLOAT_TYPE_SUFFIX )? + pass + self.mDOT() + # Java.g:1004:13: ( '0' .. '9' )+ + cnt14 = 0 + while True: #loop14 + alt14 = 2 + LA14_0 = self.input.LA(1) + + if ((48 <= LA14_0 <= 57)) : + alt14 = 1 + + + if alt14 == 1: + # Java.g:1004:14: '0' .. '9' + pass + self.matchRange(48, 57) + + + else: + if cnt14 >= 1: + break #loop14 + + eee = EarlyExitException(14, self.input) + raise eee + + cnt14 += 1 + # Java.g:1004:25: ( EXPONENT )? + alt15 = 2 + LA15_0 = self.input.LA(1) + + if (LA15_0 == 69 or LA15_0 == 101) : + alt15 = 1 + if alt15 == 1: + # Java.g:1004:25: EXPONENT + pass + self.mEXPONENT() + + + + # Java.g:1004:35: ( FLOAT_TYPE_SUFFIX )? + alt16 = 2 + LA16_0 = self.input.LA(1) + + if (LA16_0 == 68 or LA16_0 == 70 or LA16_0 == 100 or LA16_0 == 102) : + alt16 = 1 + if alt16 == 1: + # Java.g:1004:35: FLOAT_TYPE_SUFFIX + pass + self.mFLOAT_TYPE_SUFFIX() + + + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "FLOATING_POINT_LITERAL" + + + + # $ANTLR start "EXPONENT" + def mEXPONENT(self, ): + + try: + # Java.g:1008:10: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ ) + # Java.g:1008:12: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ + pass + if self.input.LA(1) == 69 or self.input.LA(1) == 101: + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + # Java.g:1008:22: ( '+' | '-' )? + alt18 = 2 + LA18_0 = self.input.LA(1) + + if (LA18_0 == 43 or LA18_0 == 45) : + alt18 = 1 + if alt18 == 1: + # Java.g: + pass + if self.input.LA(1) == 43 or self.input.LA(1) == 45: + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + # Java.g:1008:33: ( '0' .. '9' )+ + cnt19 = 0 + while True: #loop19 + alt19 = 2 + LA19_0 = self.input.LA(1) + + if ((48 <= LA19_0 <= 57)) : + alt19 = 1 + + + if alt19 == 1: + # Java.g:1008:34: '0' .. '9' + pass + self.matchRange(48, 57) + + + else: + if cnt19 >= 1: + break #loop19 + + eee = EarlyExitException(19, self.input) + raise eee + + cnt19 += 1 + + + + + finally: + + pass + + # $ANTLR end "EXPONENT" + + + + # $ANTLR start "FLOAT_TYPE_SUFFIX" + def mFLOAT_TYPE_SUFFIX(self, ): + + try: + # Java.g:1011:19: ( ( 'f' | 'F' | 'd' | 'D' ) ) + # Java.g:1011:21: ( 'f' | 'F' | 'd' | 'D' ) + pass + if self.input.LA(1) == 68 or self.input.LA(1) == 70 or self.input.LA(1) == 100 or self.input.LA(1) == 102: + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + + finally: + + pass + + # $ANTLR end "FLOAT_TYPE_SUFFIX" + + + + # $ANTLR start "CHARACTER_LITERAL" + def mCHARACTER_LITERAL(self, ): + + try: + _type = CHARACTER_LITERAL + _channel = DEFAULT_CHANNEL + + # Java.g:1014:5: ( '\\'' ( ESCAPE_SEQUENCE | ~ ( '\\'' | '\\\\' ) ) '\\'' ) + # Java.g:1014:9: '\\'' ( ESCAPE_SEQUENCE | ~ ( '\\'' | '\\\\' ) ) '\\'' + pass + self.match(39) + # Java.g:1014:14: ( ESCAPE_SEQUENCE | ~ ( '\\'' | '\\\\' ) ) + alt20 = 2 + LA20_0 = self.input.LA(1) + + if (LA20_0 == 92) : + alt20 = 1 + elif ((0 <= LA20_0 <= 38) or (40 <= LA20_0 <= 91) or (93 <= LA20_0 <= 65535)) : + alt20 = 2 + else: + nvae = NoViableAltException("", 20, 0, self.input) + + raise nvae + + if alt20 == 1: + # Java.g:1014:16: ESCAPE_SEQUENCE + pass + self.mESCAPE_SEQUENCE() + + + elif alt20 == 2: + # Java.g:1014:34: ~ ( '\\'' | '\\\\' ) + pass + if (0 <= self.input.LA(1) <= 38) or (40 <= self.input.LA(1) <= 91) or (93 <= self.input.LA(1) <= 65535): + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + self.match(39) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "CHARACTER_LITERAL" + + + + # $ANTLR start "STRING_LITERAL" + def mSTRING_LITERAL(self, ): + + try: + _type = STRING_LITERAL + _channel = DEFAULT_CHANNEL + + # Java.g:1018:5: ( '\"' ( ESCAPE_SEQUENCE | ~ ( '\\\\' | '\"' ) )* '\"' ) + # Java.g:1018:8: '\"' ( ESCAPE_SEQUENCE | ~ ( '\\\\' | '\"' ) )* '\"' + pass + self.match(34) + # Java.g:1018:12: ( ESCAPE_SEQUENCE | ~ ( '\\\\' | '\"' ) )* + while True: #loop21 + alt21 = 3 + LA21_0 = self.input.LA(1) + + if (LA21_0 == 92) : + alt21 = 1 + elif ((0 <= LA21_0 <= 33) or (35 <= LA21_0 <= 91) or (93 <= LA21_0 <= 65535)) : + alt21 = 2 + + + if alt21 == 1: + # Java.g:1018:14: ESCAPE_SEQUENCE + pass + self.mESCAPE_SEQUENCE() + + + elif alt21 == 2: + # Java.g:1018:32: ~ ( '\\\\' | '\"' ) + pass + if (0 <= self.input.LA(1) <= 33) or (35 <= self.input.LA(1) <= 91) or (93 <= self.input.LA(1) <= 65535): + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + else: + break #loop21 + self.match(34) + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "STRING_LITERAL" + + + + # $ANTLR start "ESCAPE_SEQUENCE" + def mESCAPE_SEQUENCE(self, ): + + try: + # Java.g:1023:5: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | UNICODE_ESCAPE | OCTAL_ESCAPE ) + alt22 = 3 + LA22_0 = self.input.LA(1) + + if (LA22_0 == 92) : + LA22 = self.input.LA(2) + if LA22 == 34 or LA22 == 39 or LA22 == 92 or LA22 == 98 or LA22 == 102 or LA22 == 110 or LA22 == 114 or LA22 == 116: + alt22 = 1 + elif LA22 == 117: + alt22 = 2 + elif LA22 == 48 or LA22 == 49 or LA22 == 50 or LA22 == 51 or LA22 == 52 or LA22 == 53 or LA22 == 54 or LA22 == 55: + alt22 = 3 + else: + nvae = NoViableAltException("", 22, 1, self.input) + + raise nvae + + else: + nvae = NoViableAltException("", 22, 0, self.input) + + raise nvae + + if alt22 == 1: + # Java.g:1023:9: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) + pass + self.match(92) + if self.input.LA(1) == 34 or self.input.LA(1) == 39 or self.input.LA(1) == 92 or self.input.LA(1) == 98 or self.input.LA(1) == 102 or self.input.LA(1) == 110 or self.input.LA(1) == 114 or self.input.LA(1) == 116: + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + elif alt22 == 2: + # Java.g:1024:9: UNICODE_ESCAPE + pass + self.mUNICODE_ESCAPE() + + + elif alt22 == 3: + # Java.g:1025:9: OCTAL_ESCAPE + pass + self.mOCTAL_ESCAPE() + + + + finally: + + pass + + # $ANTLR end "ESCAPE_SEQUENCE" + + + + # $ANTLR start "OCTAL_ESCAPE" + def mOCTAL_ESCAPE(self, ): + + try: + # Java.g:1030:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ) + alt23 = 3 + LA23_0 = self.input.LA(1) + + if (LA23_0 == 92) : + LA23_1 = self.input.LA(2) + + if ((48 <= LA23_1 <= 51)) : + LA23_2 = self.input.LA(3) + + if ((48 <= LA23_2 <= 55)) : + LA23_4 = self.input.LA(4) + + if ((48 <= LA23_4 <= 55)) : + alt23 = 1 + else: + alt23 = 2 + else: + alt23 = 3 + elif ((52 <= LA23_1 <= 55)) : + LA23_3 = self.input.LA(3) + + if ((48 <= LA23_3 <= 55)) : + alt23 = 2 + else: + alt23 = 3 + else: + nvae = NoViableAltException("", 23, 1, self.input) + + raise nvae + + else: + nvae = NoViableAltException("", 23, 0, self.input) + + raise nvae + + if alt23 == 1: + # Java.g:1030:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) + pass + self.match(92) + # Java.g:1030:14: ( '0' .. '3' ) + # Java.g:1030:15: '0' .. '3' + pass + self.matchRange(48, 51) + + + + # Java.g:1030:25: ( '0' .. '7' ) + # Java.g:1030:26: '0' .. '7' + pass + self.matchRange(48, 55) + + + + # Java.g:1030:36: ( '0' .. '7' ) + # Java.g:1030:37: '0' .. '7' + pass + self.matchRange(48, 55) + + + + + + elif alt23 == 2: + # Java.g:1031:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) + pass + self.match(92) + # Java.g:1031:14: ( '0' .. '7' ) + # Java.g:1031:15: '0' .. '7' + pass + self.matchRange(48, 55) + + + + # Java.g:1031:25: ( '0' .. '7' ) + # Java.g:1031:26: '0' .. '7' + pass + self.matchRange(48, 55) + + + + + + elif alt23 == 3: + # Java.g:1032:9: '\\\\' ( '0' .. '7' ) + pass + self.match(92) + # Java.g:1032:14: ( '0' .. '7' ) + # Java.g:1032:15: '0' .. '7' + pass + self.matchRange(48, 55) + + + + + + + finally: + + pass + + # $ANTLR end "OCTAL_ESCAPE" + + + + # $ANTLR start "UNICODE_ESCAPE" + def mUNICODE_ESCAPE(self, ): + + try: + # Java.g:1037:5: ( '\\\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT ) + # Java.g:1037:9: '\\\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT + pass + self.match(92) + self.match(117) + self.mHEX_DIGIT() + self.mHEX_DIGIT() + self.mHEX_DIGIT() + self.mHEX_DIGIT() + + + + + finally: + + pass + + # $ANTLR end "UNICODE_ESCAPE" + + + + # $ANTLR start "IDENT" + def mIDENT(self, ): + + try: + _type = IDENT + _channel = DEFAULT_CHANNEL + + # Java.g:1041:5: ( JAVA_ID_START ( JAVA_ID_PART )* ) + # Java.g:1041:9: JAVA_ID_START ( JAVA_ID_PART )* + pass + self.mJAVA_ID_START() + # Java.g:1041:23: ( JAVA_ID_PART )* + while True: #loop24 + alt24 = 2 + LA24_0 = self.input.LA(1) + + if (LA24_0 == 36 or (48 <= LA24_0 <= 57) or (65 <= LA24_0 <= 90) or LA24_0 == 95 or (97 <= LA24_0 <= 122) or (192 <= LA24_0 <= 214) or (216 <= LA24_0 <= 246) or (248 <= LA24_0 <= 8191) or (12352 <= LA24_0 <= 12687) or (13056 <= LA24_0 <= 13183) or (13312 <= LA24_0 <= 15661) or (19968 <= LA24_0 <= 40959) or (63744 <= LA24_0 <= 64255)) : + alt24 = 1 + + + if alt24 == 1: + # Java.g:1041:24: JAVA_ID_PART + pass + self.mJAVA_ID_PART() + + + else: + break #loop24 + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "IDENT" + + + + # $ANTLR start "JAVA_ID_START" + def mJAVA_ID_START(self, ): + + try: + # Java.g:1046:5: ( '\\u0024' | '\\u0041' .. '\\u005a' | '\\u005f' | '\\u0061' .. '\\u007a' | '\\u00c0' .. '\\u00d6' | '\\u00d8' .. '\\u00f6' | '\\u00f8' .. '\\u00ff' | '\\u0100' .. '\\u1fff' | '\\u3040' .. '\\u318f' | '\\u3300' .. '\\u337f' | '\\u3400' .. '\\u3d2d' | '\\u4e00' .. '\\u9fff' | '\\uf900' .. '\\ufaff' ) + # Java.g: + pass + if self.input.LA(1) == 36 or (65 <= self.input.LA(1) <= 90) or self.input.LA(1) == 95 or (97 <= self.input.LA(1) <= 122) or (192 <= self.input.LA(1) <= 214) or (216 <= self.input.LA(1) <= 246) or (248 <= self.input.LA(1) <= 8191) or (12352 <= self.input.LA(1) <= 12687) or (13056 <= self.input.LA(1) <= 13183) or (13312 <= self.input.LA(1) <= 15661) or (19968 <= self.input.LA(1) <= 40959) or (63744 <= self.input.LA(1) <= 64255): + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + + finally: + + pass + + # $ANTLR end "JAVA_ID_START" + + + + # $ANTLR start "JAVA_ID_PART" + def mJAVA_ID_PART(self, ): + + try: + # Java.g:1063:5: ( JAVA_ID_START | '\\u0030' .. '\\u0039' ) + # Java.g: + pass + if self.input.LA(1) == 36 or (48 <= self.input.LA(1) <= 57) or (65 <= self.input.LA(1) <= 90) or self.input.LA(1) == 95 or (97 <= self.input.LA(1) <= 122) or (192 <= self.input.LA(1) <= 214) or (216 <= self.input.LA(1) <= 246) or (248 <= self.input.LA(1) <= 8191) or (12352 <= self.input.LA(1) <= 12687) or (13056 <= self.input.LA(1) <= 13183) or (13312 <= self.input.LA(1) <= 15661) or (19968 <= self.input.LA(1) <= 40959) or (63744 <= self.input.LA(1) <= 64255): + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + + finally: + + pass + + # $ANTLR end "JAVA_ID_PART" + + + + # $ANTLR start "WS" + def mWS(self, ): + + try: + _type = WS + _channel = DEFAULT_CHANNEL + + # Java.g:1067:5: ( ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) ) + # Java.g:1067:8: ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) + pass + if (9 <= self.input.LA(1) <= 10) or (12 <= self.input.LA(1) <= 13) or self.input.LA(1) == 32: + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + #action start + + _channel = HIDDEN + + #action end + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "WS" + + + + # $ANTLR start "COMMENT" + def mCOMMENT(self, ): + + try: + _type = COMMENT + _channel = DEFAULT_CHANNEL + + # Java.g:1074:5: ( '/*' ~ ( '*' ) ( options {greedy=false; } : . )* '*/' ) + # Java.g:1074:9: '/*' ~ ( '*' ) ( options {greedy=false; } : . )* '*/' + pass + self.match("/*") + if (0 <= self.input.LA(1) <= 41) or (43 <= self.input.LA(1) <= 65535): + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + # Java.g:1074:21: ( options {greedy=false; } : . )* + while True: #loop25 + alt25 = 2 + LA25_0 = self.input.LA(1) + + if (LA25_0 == 42) : + LA25_1 = self.input.LA(2) + + if (LA25_1 == 47) : + alt25 = 2 + elif ((0 <= LA25_1 <= 46) or (48 <= LA25_1 <= 65535)) : + alt25 = 1 + + + elif ((0 <= LA25_0 <= 41) or (43 <= LA25_0 <= 65535)) : + alt25 = 1 + + + if alt25 == 1: + # Java.g:1074:49: . + pass + self.matchAny() + + + else: + break #loop25 + self.match("*/") + #action start + + _channel = HIDDEN + + #action end + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "COMMENT" + + + + # $ANTLR start "LINE_COMMENT" + def mLINE_COMMENT(self, ): + + try: + _type = LINE_COMMENT + _channel = DEFAULT_CHANNEL + + # Java.g:1081:5: ( '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' ) + # Java.g:1081:7: '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' + pass + self.match("//") + # Java.g:1081:12: (~ ( '\\n' | '\\r' ) )* + while True: #loop26 + alt26 = 2 + LA26_0 = self.input.LA(1) + + if ((0 <= LA26_0 <= 9) or (11 <= LA26_0 <= 12) or (14 <= LA26_0 <= 65535)) : + alt26 = 1 + + + if alt26 == 1: + # Java.g:1081:12: ~ ( '\\n' | '\\r' ) + pass + if (0 <= self.input.LA(1) <= 9) or (11 <= self.input.LA(1) <= 12) or (14 <= self.input.LA(1) <= 65535): + self.input.consume() + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + else: + break #loop26 + # Java.g:1081:26: ( '\\r' )? + alt27 = 2 + LA27_0 = self.input.LA(1) + + if (LA27_0 == 13) : + alt27 = 1 + if alt27 == 1: + # Java.g:1081:26: '\\r' + pass + self.match(13) + + + + self.match(10) + #action start + + _channel = HIDDEN + + #action end + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "LINE_COMMENT" + + + + # $ANTLR start "JAVADOC_COMMENT" + def mJAVADOC_COMMENT(self, ): + + try: + _type = JAVADOC_COMMENT + _channel = DEFAULT_CHANNEL + + # Java.g:1088:5: ( '/**' ( options {greedy=false; } : . )* '*/' ) + # Java.g:1088:9: '/**' ( options {greedy=false; } : . )* '*/' + pass + self.match("/**") + # Java.g:1088:15: ( options {greedy=false; } : . )* + while True: #loop28 + alt28 = 2 + LA28_0 = self.input.LA(1) + + if (LA28_0 == 42) : + LA28_1 = self.input.LA(2) + + if (LA28_1 == 47) : + alt28 = 2 + elif ((0 <= LA28_1 <= 46) or (48 <= LA28_1 <= 65535)) : + alt28 = 1 + + + elif ((0 <= LA28_0 <= 41) or (43 <= LA28_0 <= 65535)) : + alt28 = 1 + + + if alt28 == 1: + # Java.g:1088:43: . + pass + self.matchAny() + + + else: + break #loop28 + self.match("*/") + #action start + + _channel = HIDDEN + + #action end + + + + self._state.type = _type + self._state.channel = _channel + + finally: + + pass + + # $ANTLR end "JAVADOC_COMMENT" + + + + def mTokens(self): + # Java.g:1:8: ( AND | AND_ASSIGN | ASSIGN | AT | BIT_SHIFT_RIGHT | BIT_SHIFT_RIGHT_ASSIGN | COLON | COMMA | DEC | DIV | DIV_ASSIGN | DOT | DOTSTAR | ELLIPSIS | EQUAL | GREATER_OR_EQUAL | GREATER_THAN | INC | LBRACK | LCURLY | LESS_OR_EQUAL | LESS_THAN | LOGICAL_AND | LOGICAL_NOT | LOGICAL_OR | LPAREN | MINUS | MINUS_ASSIGN | MOD | MOD_ASSIGN | NOT | NOT_EQUAL | OR | OR_ASSIGN | PLUS | PLUS_ASSIGN | QUESTION | RBRACK | RCURLY | RPAREN | SEMI | SHIFT_LEFT | SHIFT_LEFT_ASSIGN | SHIFT_RIGHT | SHIFT_RIGHT_ASSIGN | STAR | STAR_ASSIGN | XOR | XOR_ASSIGN | ABSTRACT | ASSERT | BOOLEAN | BREAK | BYTE | CASE | CATCH | CHAR | CLASS | CONTINUE | DEFAULT | DO | DOUBLE | ELSE | ENUM | EXTENDS | FALSE | FINAL | FINALLY | FLOAT | FOR | IF | IMPLEMENTS | INSTANCEOF | INTERFACE | IMPORT | INT | LONG | NATIVE | NEW | NULL | PACKAGE | PRIVATE | PROTECTED | PUBLIC | RETURN | SHORT | STATIC | STRICTFP | SUPER | SWITCH | SYNCHRONIZED | THIS | THROW | THROWS | TRANSIENT | TRUE | TRY | VOID | VOLATILE | WHILE | HEX_LITERAL | DECIMAL_LITERAL | OCTAL_LITERAL | FLOATING_POINT_LITERAL | CHARACTER_LITERAL | STRING_LITERAL | IDENT | WS | COMMENT | LINE_COMMENT | JAVADOC_COMMENT ) + alt29 = 111 + alt29 = self.dfa29.predict(self.input) + if alt29 == 1: + # Java.g:1:10: AND + pass + self.mAND() + + + elif alt29 == 2: + # Java.g:1:14: AND_ASSIGN + pass + self.mAND_ASSIGN() + + + elif alt29 == 3: + # Java.g:1:25: ASSIGN + pass + self.mASSIGN() + + + elif alt29 == 4: + # Java.g:1:32: AT + pass + self.mAT() + + + elif alt29 == 5: + # Java.g:1:35: BIT_SHIFT_RIGHT + pass + self.mBIT_SHIFT_RIGHT() + + + elif alt29 == 6: + # Java.g:1:51: BIT_SHIFT_RIGHT_ASSIGN + pass + self.mBIT_SHIFT_RIGHT_ASSIGN() + + + elif alt29 == 7: + # Java.g:1:74: COLON + pass + self.mCOLON() + + + elif alt29 == 8: + # Java.g:1:80: COMMA + pass + self.mCOMMA() + + + elif alt29 == 9: + # Java.g:1:86: DEC + pass + self.mDEC() + + + elif alt29 == 10: + # Java.g:1:90: DIV + pass + self.mDIV() + + + elif alt29 == 11: + # Java.g:1:94: DIV_ASSIGN + pass + self.mDIV_ASSIGN() + + + elif alt29 == 12: + # Java.g:1:105: DOT + pass + self.mDOT() + + + elif alt29 == 13: + # Java.g:1:109: DOTSTAR + pass + self.mDOTSTAR() + + + elif alt29 == 14: + # Java.g:1:117: ELLIPSIS + pass + self.mELLIPSIS() + + + elif alt29 == 15: + # Java.g:1:126: EQUAL + pass + self.mEQUAL() + + + elif alt29 == 16: + # Java.g:1:132: GREATER_OR_EQUAL + pass + self.mGREATER_OR_EQUAL() + + + elif alt29 == 17: + # Java.g:1:149: GREATER_THAN + pass + self.mGREATER_THAN() + + + elif alt29 == 18: + # Java.g:1:162: INC + pass + self.mINC() + + + elif alt29 == 19: + # Java.g:1:166: LBRACK + pass + self.mLBRACK() + + + elif alt29 == 20: + # Java.g:1:173: LCURLY + pass + self.mLCURLY() + + + elif alt29 == 21: + # Java.g:1:180: LESS_OR_EQUAL + pass + self.mLESS_OR_EQUAL() + + + elif alt29 == 22: + # Java.g:1:194: LESS_THAN + pass + self.mLESS_THAN() + + + elif alt29 == 23: + # Java.g:1:204: LOGICAL_AND + pass + self.mLOGICAL_AND() + + + elif alt29 == 24: + # Java.g:1:216: LOGICAL_NOT + pass + self.mLOGICAL_NOT() + + + elif alt29 == 25: + # Java.g:1:228: LOGICAL_OR + pass + self.mLOGICAL_OR() + + + elif alt29 == 26: + # Java.g:1:239: LPAREN + pass + self.mLPAREN() + + + elif alt29 == 27: + # Java.g:1:246: MINUS + pass + self.mMINUS() + + + elif alt29 == 28: + # Java.g:1:252: MINUS_ASSIGN + pass + self.mMINUS_ASSIGN() + + + elif alt29 == 29: + # Java.g:1:265: MOD + pass + self.mMOD() + + + elif alt29 == 30: + # Java.g:1:269: MOD_ASSIGN + pass + self.mMOD_ASSIGN() + + + elif alt29 == 31: + # Java.g:1:280: NOT + pass + self.mNOT() + + + elif alt29 == 32: + # Java.g:1:284: NOT_EQUAL + pass + self.mNOT_EQUAL() + + + elif alt29 == 33: + # Java.g:1:294: OR + pass + self.mOR() + + + elif alt29 == 34: + # Java.g:1:297: OR_ASSIGN + pass + self.mOR_ASSIGN() + + + elif alt29 == 35: + # Java.g:1:307: PLUS + pass + self.mPLUS() + + + elif alt29 == 36: + # Java.g:1:312: PLUS_ASSIGN + pass + self.mPLUS_ASSIGN() + + + elif alt29 == 37: + # Java.g:1:324: QUESTION + pass + self.mQUESTION() + + + elif alt29 == 38: + # Java.g:1:333: RBRACK + pass + self.mRBRACK() + + + elif alt29 == 39: + # Java.g:1:340: RCURLY + pass + self.mRCURLY() + + + elif alt29 == 40: + # Java.g:1:347: RPAREN + pass + self.mRPAREN() + + + elif alt29 == 41: + # Java.g:1:354: SEMI + pass + self.mSEMI() + + + elif alt29 == 42: + # Java.g:1:359: SHIFT_LEFT + pass + self.mSHIFT_LEFT() + + + elif alt29 == 43: + # Java.g:1:370: SHIFT_LEFT_ASSIGN + pass + self.mSHIFT_LEFT_ASSIGN() + + + elif alt29 == 44: + # Java.g:1:388: SHIFT_RIGHT + pass + self.mSHIFT_RIGHT() + + + elif alt29 == 45: + # Java.g:1:400: SHIFT_RIGHT_ASSIGN + pass + self.mSHIFT_RIGHT_ASSIGN() + + + elif alt29 == 46: + # Java.g:1:419: STAR + pass + self.mSTAR() + + + elif alt29 == 47: + # Java.g:1:424: STAR_ASSIGN + pass + self.mSTAR_ASSIGN() + + + elif alt29 == 48: + # Java.g:1:436: XOR + pass + self.mXOR() + + + elif alt29 == 49: + # Java.g:1:440: XOR_ASSIGN + pass + self.mXOR_ASSIGN() + + + elif alt29 == 50: + # Java.g:1:451: ABSTRACT + pass + self.mABSTRACT() + + + elif alt29 == 51: + # Java.g:1:460: ASSERT + pass + self.mASSERT() + + + elif alt29 == 52: + # Java.g:1:467: BOOLEAN + pass + self.mBOOLEAN() + + + elif alt29 == 53: + # Java.g:1:475: BREAK + pass + self.mBREAK() + + + elif alt29 == 54: + # Java.g:1:481: BYTE + pass + self.mBYTE() + + + elif alt29 == 55: + # Java.g:1:486: CASE + pass + self.mCASE() + + + elif alt29 == 56: + # Java.g:1:491: CATCH + pass + self.mCATCH() + + + elif alt29 == 57: + # Java.g:1:497: CHAR + pass + self.mCHAR() + + + elif alt29 == 58: + # Java.g:1:502: CLASS + pass + self.mCLASS() + + + elif alt29 == 59: + # Java.g:1:508: CONTINUE + pass + self.mCONTINUE() + + + elif alt29 == 60: + # Java.g:1:517: DEFAULT + pass + self.mDEFAULT() + + + elif alt29 == 61: + # Java.g:1:525: DO + pass + self.mDO() + + + elif alt29 == 62: + # Java.g:1:528: DOUBLE + pass + self.mDOUBLE() + + + elif alt29 == 63: + # Java.g:1:535: ELSE + pass + self.mELSE() + + + elif alt29 == 64: + # Java.g:1:540: ENUM + pass + self.mENUM() + + + elif alt29 == 65: + # Java.g:1:545: EXTENDS + pass + self.mEXTENDS() + + + elif alt29 == 66: + # Java.g:1:553: FALSE + pass + self.mFALSE() + + + elif alt29 == 67: + # Java.g:1:559: FINAL + pass + self.mFINAL() + + + elif alt29 == 68: + # Java.g:1:565: FINALLY + pass + self.mFINALLY() + + + elif alt29 == 69: + # Java.g:1:573: FLOAT + pass + self.mFLOAT() + + + elif alt29 == 70: + # Java.g:1:579: FOR + pass + self.mFOR() + + + elif alt29 == 71: + # Java.g:1:583: IF + pass + self.mIF() + + + elif alt29 == 72: + # Java.g:1:586: IMPLEMENTS + pass + self.mIMPLEMENTS() + + + elif alt29 == 73: + # Java.g:1:597: INSTANCEOF + pass + self.mINSTANCEOF() + + + elif alt29 == 74: + # Java.g:1:608: INTERFACE + pass + self.mINTERFACE() + + + elif alt29 == 75: + # Java.g:1:618: IMPORT + pass + self.mIMPORT() + + + elif alt29 == 76: + # Java.g:1:625: INT + pass + self.mINT() + + + elif alt29 == 77: + # Java.g:1:629: LONG + pass + self.mLONG() + + + elif alt29 == 78: + # Java.g:1:634: NATIVE + pass + self.mNATIVE() + + + elif alt29 == 79: + # Java.g:1:641: NEW + pass + self.mNEW() + + + elif alt29 == 80: + # Java.g:1:645: NULL + pass + self.mNULL() + + + elif alt29 == 81: + # Java.g:1:650: PACKAGE + pass + self.mPACKAGE() + + + elif alt29 == 82: + # Java.g:1:658: PRIVATE + pass + self.mPRIVATE() + + + elif alt29 == 83: + # Java.g:1:666: PROTECTED + pass + self.mPROTECTED() + + + elif alt29 == 84: + # Java.g:1:676: PUBLIC + pass + self.mPUBLIC() + + + elif alt29 == 85: + # Java.g:1:683: RETURN + pass + self.mRETURN() + + + elif alt29 == 86: + # Java.g:1:690: SHORT + pass + self.mSHORT() + + + elif alt29 == 87: + # Java.g:1:696: STATIC + pass + self.mSTATIC() + + + elif alt29 == 88: + # Java.g:1:703: STRICTFP + pass + self.mSTRICTFP() + + + elif alt29 == 89: + # Java.g:1:712: SUPER + pass + self.mSUPER() + + + elif alt29 == 90: + # Java.g:1:718: SWITCH + pass + self.mSWITCH() + + + elif alt29 == 91: + # Java.g:1:725: SYNCHRONIZED + pass + self.mSYNCHRONIZED() + + + elif alt29 == 92: + # Java.g:1:738: THIS + pass + self.mTHIS() + + + elif alt29 == 93: + # Java.g:1:743: THROW + pass + self.mTHROW() + + + elif alt29 == 94: + # Java.g:1:749: THROWS + pass + self.mTHROWS() + + + elif alt29 == 95: + # Java.g:1:756: TRANSIENT + pass + self.mTRANSIENT() + + + elif alt29 == 96: + # Java.g:1:766: TRUE + pass + self.mTRUE() + + + elif alt29 == 97: + # Java.g:1:771: TRY + pass + self.mTRY() + + + elif alt29 == 98: + # Java.g:1:775: VOID + pass + self.mVOID() + + + elif alt29 == 99: + # Java.g:1:780: VOLATILE + pass + self.mVOLATILE() + + + elif alt29 == 100: + # Java.g:1:789: WHILE + pass + self.mWHILE() + + + elif alt29 == 101: + # Java.g:1:795: HEX_LITERAL + pass + self.mHEX_LITERAL() + + + elif alt29 == 102: + # Java.g:1:807: DECIMAL_LITERAL + pass + self.mDECIMAL_LITERAL() + + + elif alt29 == 103: + # Java.g:1:823: OCTAL_LITERAL + pass + self.mOCTAL_LITERAL() + + + elif alt29 == 104: + # Java.g:1:837: FLOATING_POINT_LITERAL + pass + self.mFLOATING_POINT_LITERAL() + + + elif alt29 == 105: + # Java.g:1:860: CHARACTER_LITERAL + pass + self.mCHARACTER_LITERAL() + + + elif alt29 == 106: + # Java.g:1:878: STRING_LITERAL + pass + self.mSTRING_LITERAL() + + + elif alt29 == 107: + # Java.g:1:893: IDENT + pass + self.mIDENT() + + + elif alt29 == 108: + # Java.g:1:899: WS + pass + self.mWS() + + + elif alt29 == 109: + # Java.g:1:902: COMMENT + pass + self.mCOMMENT() + + + elif alt29 == 110: + # Java.g:1:910: LINE_COMMENT + pass + self.mLINE_COMMENT() + + + elif alt29 == 111: + # Java.g:1:923: JAVADOC_COMMENT + pass + self.mJAVADOC_COMMENT() + + + + + + + + # lookup tables for DFA #29 + + DFA29_eot = DFA.unpack( + "\1\uffff\1\61\1\63\1\uffff\1\66\2\uffff\1\71\1\75\1\100\1\104\2" + "\uffff\1\107\1\111\1\114\1\uffff\1\116\6\uffff\1\120\1\122\17\55" + "\2\173\11\uffff\1\177\21\uffff\1\u0083\14\uffff\12\55\1\u0090\7" + "\55\1\u0098\23\55\1\uffff\1\u00b3\1\uffff\1\173\1\u00b5\6\uffff" + "\14\55\1\uffff\6\55\1\u00c8\1\uffff\2\55\1\u00cd\2\55\1\u00d0\20" + "\55\1\u00e1\3\55\3\uffff\4\55\1\u00e9\1\u00ea\1\55\1\u00ec\4\55" + "\1\u00f1\1\u00f2\4\55\1\uffff\4\55\1\uffff\1\u00fb\1\55\1\uffff" + "\1\u00fd\13\55\1\u0109\2\55\1\u010c\1\uffff\1\u010d\5\55\1\u0113" + "\2\uffff\1\u0114\1\uffff\1\u0115\3\55\2\uffff\1\55\1\u011a\1\u011c" + "\1\u011d\4\55\1\uffff\1\55\1\uffff\5\55\1\u0128\2\55\1\u012b\2" + "\55\1\uffff\1\u012f\1\55\2\uffff\1\55\1\u0132\1\55\1\u0134\1\55" + "\3\uffff\2\55\1\u0138\1\55\1\uffff\1\55\2\uffff\1\55\1\u013c\2" + "\55\1\u013f\3\55\1\u0143\1\u0144\1\uffff\1\u0145\1\55\1\uffff\1" + "\u0147\1\55\1\u0149\1\uffff\2\55\1\uffff\1\55\1\uffff\1\u014d\1" + "\55\1\u014f\1\uffff\1\u0150\1\u0151\1\55\1\uffff\2\55\1\uffff\1" + "\u0155\1\u0156\1\55\3\uffff\1\55\1\uffff\1\55\1\uffff\2\55\1\u015c" + "\1\uffff\1\u015d\3\uffff\3\55\2\uffff\1\55\1\u0162\2\55\1\u0165" + "\2\uffff\2\55\1\u0168\1\u0169\1\uffff\1\55\1\u016b\1\uffff\1\u016c" + "\1\u016d\2\uffff\1\55\3\uffff\1\55\1\u0170\1\uffff" + ) + + DFA29_eof = DFA.unpack( + "\u0171\uffff" + ) + + DFA29_min = DFA.unpack( + "\1\11\1\46\1\75\1\uffff\1\75\2\uffff\1\55\2\52\1\53\2\uffff\1\74" + "\2\75\1\uffff\1\75\6\uffff\2\75\1\142\1\157\1\141\1\145\1\154\1" + "\141\1\146\1\157\2\141\1\145\2\150\1\157\1\150\2\56\11\uffff\1" + "\75\6\uffff\1\0\12\uffff\1\75\14\uffff\2\163\1\157\1\145\1\164" + "\1\163\2\141\1\156\1\146\1\44\1\163\1\165\1\164\1\154\1\156\1\157" + "\1\162\1\44\1\160\1\163\1\156\1\164\1\167\1\154\1\143\1\151\1\142" + "\1\164\1\157\1\141\1\160\1\151\1\156\1\151\1\141\2\151\1\uffff" + "\1\56\1\uffff\1\56\1\75\6\uffff\1\164\1\145\1\154\1\141\2\145\1" + "\143\1\162\1\163\1\164\1\141\1\142\1\uffff\1\145\1\155\1\145\1" + "\163\2\141\1\44\1\uffff\1\154\1\164\1\44\1\147\1\151\1\44\1\154" + "\1\153\1\166\1\164\1\154\1\165\1\162\1\164\1\151\1\145\1\164\1" + "\143\1\163\1\157\1\156\1\145\1\44\1\144\1\141\1\154\3\uffff\2\162" + "\1\145\1\153\2\44\1\150\1\44\1\163\1\151\1\165\1\154\2\44\1\156" + "\1\145\1\154\1\164\1\uffff\1\145\1\162\1\141\1\162\1\uffff\1\44" + "\1\166\1\uffff\1\44\2\141\1\145\1\151\1\162\1\164\1\151\1\143\1" + "\162\1\143\1\150\1\44\1\167\1\163\1\44\1\uffff\1\44\1\164\1\145" + "\1\141\1\164\1\141\1\44\2\uffff\1\44\1\uffff\1\44\1\156\1\154\1" + "\145\2\uffff\1\144\3\44\1\155\1\164\1\156\1\146\1\uffff\1\145\1" + "\uffff\1\147\1\164\2\143\1\156\1\44\1\143\1\164\1\44\1\150\1\162" + "\1\uffff\1\44\1\151\2\uffff\1\151\1\44\1\143\1\44\1\156\3\uffff" + "\1\165\1\164\1\44\1\163\1\uffff\1\171\2\uffff\1\145\1\44\1\143" + "\1\141\1\44\2\145\1\164\2\44\1\uffff\1\44\1\146\1\uffff\1\44\1" + "\157\1\44\1\uffff\1\145\1\154\1\uffff\1\164\1\uffff\1\44\1\145" + "\1\44\1\uffff\2\44\1\156\1\uffff\1\145\1\143\1\uffff\2\44\1\145" + "\3\uffff\1\160\1\uffff\1\156\1\uffff\1\156\1\145\1\44\1\uffff\1" + "\44\3\uffff\1\164\1\157\1\145\2\uffff\1\144\1\44\1\151\1\164\1" + "\44\2\uffff\1\163\1\146\2\44\1\uffff\1\172\1\44\1\uffff\2\44\2" + "\uffff\1\145\3\uffff\1\144\1\44\1\uffff" + ) + + DFA29_max = DFA.unpack( + "\1\ufaff\2\75\1\uffff\1\76\2\uffff\2\75\1\71\1\75\2\uffff\2\75" + "\1\174\1\uffff\1\75\6\uffff\2\75\1\163\1\171\2\157\1\170\1\157" + "\1\156\1\157\2\165\1\145\1\171\1\162\1\157\1\150\1\170\1\146\11" + "\uffff\1\76\6\uffff\1\uffff\12\uffff\1\75\14\uffff\2\163\1\157" + "\1\145\2\164\2\141\1\156\1\146\1\ufaff\1\163\1\165\1\164\1\154" + "\1\156\1\157\1\162\1\ufaff\1\160\1\164\1\156\1\164\1\167\1\154" + "\1\143\1\157\1\142\1\164\1\157\1\162\1\160\1\151\1\156\1\162\1" + "\171\1\154\1\151\1\uffff\1\146\1\uffff\1\146\1\75\6\uffff\1\164" + "\1\145\1\154\1\141\2\145\1\143\1\162\1\163\1\164\1\141\1\142\1" + "\uffff\1\145\1\155\1\145\1\163\2\141\1\ufaff\1\uffff\1\157\1\164" + "\1\ufaff\1\147\1\151\1\ufaff\1\154\1\153\1\166\1\164\1\154\1\165" + "\1\162\1\164\1\151\1\145\1\164\1\143\1\163\1\157\1\156\1\145\1" + "\ufaff\1\144\1\141\1\154\3\uffff\2\162\1\145\1\153\2\ufaff\1\150" + "\1\ufaff\1\163\1\151\1\165\1\154\2\ufaff\1\156\1\145\1\154\1\164" + "\1\uffff\1\145\1\162\1\141\1\162\1\uffff\1\ufaff\1\166\1\uffff" + "\1\ufaff\2\141\1\145\1\151\1\162\1\164\1\151\1\143\1\162\1\143" + "\1\150\1\ufaff\1\167\1\163\1\ufaff\1\uffff\1\ufaff\1\164\1\145" + "\1\141\1\164\1\141\1\ufaff\2\uffff\1\ufaff\1\uffff\1\ufaff\1\156" + "\1\154\1\145\2\uffff\1\144\3\ufaff\1\155\1\164\1\156\1\146\1\uffff" + "\1\145\1\uffff\1\147\1\164\2\143\1\156\1\ufaff\1\143\1\164\1\ufaff" + "\1\150\1\162\1\uffff\1\ufaff\1\151\2\uffff\1\151\1\ufaff\1\143" + "\1\ufaff\1\156\3\uffff\1\165\1\164\1\ufaff\1\163\1\uffff\1\171" + "\2\uffff\1\145\1\ufaff\1\143\1\141\1\ufaff\2\145\1\164\2\ufaff" + "\1\uffff\1\ufaff\1\146\1\uffff\1\ufaff\1\157\1\ufaff\1\uffff\1" + "\145\1\154\1\uffff\1\164\1\uffff\1\ufaff\1\145\1\ufaff\1\uffff" + "\2\ufaff\1\156\1\uffff\1\145\1\143\1\uffff\2\ufaff\1\145\3\uffff" + "\1\160\1\uffff\1\156\1\uffff\1\156\1\145\1\ufaff\1\uffff\1\ufaff" + "\3\uffff\1\164\1\157\1\145\2\uffff\1\144\1\ufaff\1\151\1\164\1" + "\ufaff\2\uffff\1\163\1\146\2\ufaff\1\uffff\1\172\1\ufaff\1\uffff" + "\2\ufaff\2\uffff\1\145\3\uffff\1\144\1\ufaff\1\uffff" + ) + + DFA29_accept = DFA.unpack( + "\3\uffff\1\4\1\uffff\1\7\1\10\4\uffff\1\23\1\24\3\uffff\1\32\1" + "\uffff\1\37\1\45\1\46\1\47\1\50\1\51\23\uffff\1\151\1\152\1\153" + "\1\154\1\2\1\27\1\1\1\17\1\3\1\uffff\1\20\1\21\1\11\1\34\1\33\1" + "\13\1\uffff\1\156\1\12\1\15\1\16\1\14\1\150\1\22\1\44\1\43\1\25" + "\1\uffff\1\26\1\40\1\30\1\31\1\42\1\41\1\36\1\35\1\57\1\56\1\61" + "\1\60\46\uffff\1\145\1\uffff\1\146\2\uffff\1\55\1\54\1\155\1\157" + "\1\53\1\52\14\uffff\1\75\7\uffff\1\107\32\uffff\1\147\1\6\1\5\22" + "\uffff\1\106\4\uffff\1\114\2\uffff\1\117\20\uffff\1\141\7\uffff" + "\1\66\1\67\1\uffff\1\71\4\uffff\1\77\1\100\10\uffff\1\115\1\uffff" + "\1\120\13\uffff\1\134\2\uffff\1\140\1\142\5\uffff\1\65\1\70\1\72" + "\4\uffff\1\102\1\uffff\1\103\1\105\12\uffff\1\126\2\uffff\1\131" + "\3\uffff\1\135\2\uffff\1\144\1\uffff\1\63\3\uffff\1\76\3\uffff" + "\1\113\2\uffff\1\116\3\uffff\1\124\1\125\1\127\1\uffff\1\132\1" + "\uffff\1\136\3\uffff\1\64\1\uffff\1\74\1\101\1\104\3\uffff\1\121" + "\1\122\5\uffff\1\62\1\73\4\uffff\1\130\2\uffff\1\143\2\uffff\1" + "\112\1\123\1\uffff\1\137\1\110\1\111\2\uffff\1\133" + ) + + DFA29_special = DFA.unpack( + "\73\uffff\1\0\u0135\uffff" + ) + + + DFA29_transition = [ + DFA.unpack("\2\56\1\uffff\2\56\22\uffff\1\56\1\16\1\54\1\uffff\1" + "\55\1\21\1\1\1\53\1\20\1\26\1\30\1\12\1\6\1\7\1\11\1\10\1\51\11" + "\52\1\5\1\27\1\15\1\2\1\4\1\23\1\3\32\55\1\13\1\uffff\1\24\1\31" + "\1\55\1\uffff\1\32\1\33\1\34\1\35\1\36\1\37\2\55\1\40\2\55\1\41" + "\1\55\1\42\1\55\1\43\1\55\1\44\1\45\1\46\1\55\1\47\1\50\3\55\1" + "\14\1\17\1\25\1\22\101\uffff\27\55\1\uffff\37\55\1\uffff\u1f08" + "\55\u1040\uffff\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e" + "\55\u10d2\uffff\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\60\26\uffff\1\57"), + DFA.unpack("\1\62"), + DFA.unpack(""), + DFA.unpack("\1\65\1\64"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\67\17\uffff\1\70"), + DFA.unpack("\1\73\4\uffff\1\74\15\uffff\1\72"), + DFA.unpack("\1\76\3\uffff\1\77\1\uffff\12\101"), + DFA.unpack("\1\102\21\uffff\1\103"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\106\1\105"), + DFA.unpack("\1\110"), + DFA.unpack("\1\113\76\uffff\1\112"), + DFA.unpack(""), + DFA.unpack("\1\115"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\117"), + DFA.unpack("\1\121"), + DFA.unpack("\1\123\20\uffff\1\124"), + DFA.unpack("\1\125\2\uffff\1\126\6\uffff\1\127"), + DFA.unpack("\1\130\6\uffff\1\131\3\uffff\1\132\2\uffff\1\133"), + DFA.unpack("\1\134\11\uffff\1\135"), + DFA.unpack("\1\136\1\uffff\1\137\11\uffff\1\140"), + DFA.unpack("\1\141\7\uffff\1\142\2\uffff\1\143\2\uffff\1\144"), + DFA.unpack("\1\145\6\uffff\1\146\1\147"), + DFA.unpack("\1\150"), + DFA.unpack("\1\151\3\uffff\1\152\17\uffff\1\153"), + DFA.unpack("\1\154\20\uffff\1\155\2\uffff\1\156"), + DFA.unpack("\1\157"), + DFA.unpack("\1\160\13\uffff\1\161\1\162\1\uffff\1\163\1\uffff\1" + "\164"), + DFA.unpack("\1\165\11\uffff\1\166"), + DFA.unpack("\1\167"), + DFA.unpack("\1\170"), + DFA.unpack("\1\101\1\uffff\10\172\2\101\12\uffff\3\101\21\uffff" + "\1\171\13\uffff\3\101\21\uffff\1\171"), + DFA.unpack("\1\101\1\uffff\12\174\12\uffff\3\101\35\uffff\3\101"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\176\1\175"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\52\u0080\1\u0081\uffd5\u0080"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\u0082"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\u0084"), + DFA.unpack("\1\u0085"), + DFA.unpack("\1\u0086"), + DFA.unpack("\1\u0087"), + DFA.unpack("\1\u0088"), + DFA.unpack("\1\u0089\1\u008a"), + DFA.unpack("\1\u008b"), + DFA.unpack("\1\u008c"), + DFA.unpack("\1\u008d"), + DFA.unpack("\1\u008e"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\24\55\1\u008f\5\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08" + "\55\u1040\uffff\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e" + "\55\u10d2\uffff\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u0091"), + DFA.unpack("\1\u0092"), + DFA.unpack("\1\u0093"), + DFA.unpack("\1\u0094"), + DFA.unpack("\1\u0095"), + DFA.unpack("\1\u0096"), + DFA.unpack("\1\u0097"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u0099"), + DFA.unpack("\1\u009a\1\u009b"), + DFA.unpack("\1\u009c"), + DFA.unpack("\1\u009d"), + DFA.unpack("\1\u009e"), + DFA.unpack("\1\u009f"), + DFA.unpack("\1\u00a0"), + DFA.unpack("\1\u00a1\5\uffff\1\u00a2"), + DFA.unpack("\1\u00a3"), + DFA.unpack("\1\u00a4"), + DFA.unpack("\1\u00a5"), + DFA.unpack("\1\u00a6\20\uffff\1\u00a7"), + DFA.unpack("\1\u00a8"), + DFA.unpack("\1\u00a9"), + DFA.unpack("\1\u00aa"), + DFA.unpack("\1\u00ab\10\uffff\1\u00ac"), + DFA.unpack("\1\u00ad\23\uffff\1\u00ae\3\uffff\1\u00af"), + DFA.unpack("\1\u00b0\2\uffff\1\u00b1"), + DFA.unpack("\1\u00b2"), + DFA.unpack(""), + DFA.unpack("\1\101\1\uffff\10\172\2\101\12\uffff\3\101\35\uffff" + "\3\101"), + DFA.unpack(""), + DFA.unpack("\1\101\1\uffff\12\174\12\uffff\3\101\35\uffff\3\101"), + DFA.unpack("\1\u00b4"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\u00b6"), + DFA.unpack("\1\u00b7"), + DFA.unpack("\1\u00b8"), + DFA.unpack("\1\u00b9"), + DFA.unpack("\1\u00ba"), + DFA.unpack("\1\u00bb"), + DFA.unpack("\1\u00bc"), + DFA.unpack("\1\u00bd"), + DFA.unpack("\1\u00be"), + DFA.unpack("\1\u00bf"), + DFA.unpack("\1\u00c0"), + DFA.unpack("\1\u00c1"), + DFA.unpack(""), + DFA.unpack("\1\u00c2"), + DFA.unpack("\1\u00c3"), + DFA.unpack("\1\u00c4"), + DFA.unpack("\1\u00c5"), + DFA.unpack("\1\u00c6"), + DFA.unpack("\1\u00c7"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(""), + DFA.unpack("\1\u00c9\2\uffff\1\u00ca"), + DFA.unpack("\1\u00cb"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\4\55\1\u00cc\25\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08" + "\55\u1040\uffff\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e" + "\55\u10d2\uffff\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u00ce"), + DFA.unpack("\1\u00cf"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u00d1"), + DFA.unpack("\1\u00d2"), + DFA.unpack("\1\u00d3"), + DFA.unpack("\1\u00d4"), + DFA.unpack("\1\u00d5"), + DFA.unpack("\1\u00d6"), + DFA.unpack("\1\u00d7"), + DFA.unpack("\1\u00d8"), + DFA.unpack("\1\u00d9"), + DFA.unpack("\1\u00da"), + DFA.unpack("\1\u00db"), + DFA.unpack("\1\u00dc"), + DFA.unpack("\1\u00dd"), + DFA.unpack("\1\u00de"), + DFA.unpack("\1\u00df"), + DFA.unpack("\1\u00e0"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u00e2"), + DFA.unpack("\1\u00e3"), + DFA.unpack("\1\u00e4"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\u00e5"), + DFA.unpack("\1\u00e6"), + DFA.unpack("\1\u00e7"), + DFA.unpack("\1\u00e8"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u00eb"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u00ed"), + DFA.unpack("\1\u00ee"), + DFA.unpack("\1\u00ef"), + DFA.unpack("\1\u00f0"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u00f3"), + DFA.unpack("\1\u00f4"), + DFA.unpack("\1\u00f5"), + DFA.unpack("\1\u00f6"), + DFA.unpack(""), + DFA.unpack("\1\u00f7"), + DFA.unpack("\1\u00f8"), + DFA.unpack("\1\u00f9"), + DFA.unpack("\1\u00fa"), + DFA.unpack(""), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u00fc"), + DFA.unpack(""), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u00fe"), + DFA.unpack("\1\u00ff"), + DFA.unpack("\1\u0100"), + DFA.unpack("\1\u0101"), + DFA.unpack("\1\u0102"), + DFA.unpack("\1\u0103"), + DFA.unpack("\1\u0104"), + DFA.unpack("\1\u0105"), + DFA.unpack("\1\u0106"), + DFA.unpack("\1\u0107"), + DFA.unpack("\1\u0108"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u010a"), + DFA.unpack("\1\u010b"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(""), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u010e"), + DFA.unpack("\1\u010f"), + DFA.unpack("\1\u0110"), + DFA.unpack("\1\u0111"), + DFA.unpack("\1\u0112"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(""), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u0116"), + DFA.unpack("\1\u0117"), + DFA.unpack("\1\u0118"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\u0119"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\13\55\1\u011b\16\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08" + "\55\u1040\uffff\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e" + "\55\u10d2\uffff\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u011e"), + DFA.unpack("\1\u011f"), + DFA.unpack("\1\u0120"), + DFA.unpack("\1\u0121"), + DFA.unpack(""), + DFA.unpack("\1\u0122"), + DFA.unpack(""), + DFA.unpack("\1\u0123"), + DFA.unpack("\1\u0124"), + DFA.unpack("\1\u0125"), + DFA.unpack("\1\u0126"), + DFA.unpack("\1\u0127"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u0129"), + DFA.unpack("\1\u012a"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u012c"), + DFA.unpack("\1\u012d"), + DFA.unpack(""), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\22\55\1\u012e\7\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08" + "\55\u1040\uffff\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e" + "\55\u10d2\uffff\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u0130"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\u0131"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u0133"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u0135"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\u0136"), + DFA.unpack("\1\u0137"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u0139"), + DFA.unpack(""), + DFA.unpack("\1\u013a"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\u013b"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u013d"), + DFA.unpack("\1\u013e"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u0140"), + DFA.unpack("\1\u0141"), + DFA.unpack("\1\u0142"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(""), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u0146"), + DFA.unpack(""), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u0148"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(""), + DFA.unpack("\1\u014a"), + DFA.unpack("\1\u014b"), + DFA.unpack(""), + DFA.unpack("\1\u014c"), + DFA.unpack(""), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u014e"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(""), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u0152"), + DFA.unpack(""), + DFA.unpack("\1\u0153"), + DFA.unpack("\1\u0154"), + DFA.unpack(""), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u0157"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\u0158"), + DFA.unpack(""), + DFA.unpack("\1\u0159"), + DFA.unpack(""), + DFA.unpack("\1\u015a"), + DFA.unpack("\1\u015b"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(""), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\u015e"), + DFA.unpack("\1\u015f"), + DFA.unpack("\1\u0160"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\u0161"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\u0163"), + DFA.unpack("\1\u0164"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\u0166"), + DFA.unpack("\1\u0167"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(""), + DFA.unpack("\1\u016a"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(""), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\u016e"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\u016f"), + DFA.unpack("\1\55\13\uffff\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff" + "\32\55\105\uffff\27\55\1\uffff\37\55\1\uffff\u1f08\55\u1040\uffff" + "\u0150\55\u0170\uffff\u0080\55\u0080\uffff\u092e\55\u10d2\uffff" + "\u5200\55\u5900\uffff\u0200\55"), + DFA.unpack("") + ] + + # class definition for DFA #29 + + class DFA29(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA29_59 = input.LA(1) + + s = -1 + if ((0 <= LA29_59 <= 41) or (43 <= LA29_59 <= 65535)): + s = 128 + + elif (LA29_59 == 42): + s = 129 + + if s >= 0: + return s + + nvae = NoViableAltException(self_.getDescription(), 29, _s, input) + self_.error(nvae) + raise nvae + + + + +def main(argv, stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stderr): + from antlr4.main import LexerMain + main = LexerMain(JavaLexer) + main.stdin = stdin + main.stdout = stdout + main.stderr = stderr + main.execute(argv) + + +if __name__ == '__main__': + main(sys.argv) diff --git a/build/lib/java2python/lang/JavaParser.py b/build/lib/java2python/lang/JavaParser.py new file mode 100644 index 0000000..cfad286 --- /dev/null +++ b/build/lib/java2python/lang/JavaParser.py @@ -0,0 +1,23337 @@ +# $ANTLR 3.1.3 Mar 18, 2009 10:09:25 Java.g 2012-01-29 13:54:04 + +import sys +from antlr4 import * +from antlr4.compat import set, frozenset + +from antlr4.tree import * + + + +# for convenience in actions +HIDDEN = BaseRecognizer.HIDDEN + +# token types +PACKAGE=84 +EXPONENT=173 +STAR=49 +WHILE=103 +MOD=32 +MOD_ASSIGN=33 +CASE=58 +CHAR=60 +NEW=82 +DO=64 +GENERIC_TYPE_PARAM_LIST=138 +CLASS_INSTANCE_INITIALIZER=121 +ARRAY_ELEMENT_ACCESS=115 +FOR_CONDITION=129 +NOT=34 +VAR_DECLARATION=160 +ANNOTATION_METHOD_DECL=109 +EOF=-1 +DIV_ASSIGN=14 +LOGICAL_AND=26 +BREAK=56 +UNARY_PLUS=159 +BIT_SHIFT_RIGHT_ASSIGN=9 +TYPE=157 +RPAREN=43 +INC=21 +FINAL=70 +IMPORT=78 +STRING_LITERAL=170 +FOR_UPDATE=132 +FLOATING_POINT_LITERAL=168 +CAST_EXPR=118 +NOT_EQUAL=35 +VOID_METHOD_DECL=163 +THIS=95 +RETURN=88 +DOUBLE=65 +ENUM_TOP_LEVEL_SCOPE=125 +VOID=101 +SUPER=92 +COMMENT=181 +ANNOTATION_INIT_KEY_LIST=107 +JAVA_ID_START=178 +FLOAT_TYPE_SUFFIX=174 +PRE_DEC=149 +RBRACK=41 +IMPLEMENTS_CLAUSE=140 +SWITCH_BLOCK_LABEL_LIST=154 +LINE_COMMENT=182 +PRIVATE=85 +STATIC=90 +BLOCK_SCOPE=117 +ANNOTATION_INIT_DEFAULT_KEY=106 +SWITCH=93 +NULL=83 +VAR_DECLARATOR=161 +MINUS_ASSIGN=31 +ELSE=66 +STRICTFP=91 +CHARACTER_LITERAL=169 +PRE_INC=150 +ANNOTATION_LIST=108 +ELLIPSIS=17 +NATIVE=81 +OCTAL_ESCAPE=177 +UNARY_MINUS=158 +THROWS=97 +LCURLY=23 +INT=79 +FORMAL_PARAM_VARARG_DECL=135 +METHOD_CALL=144 +ASSERT=54 +TRY=100 +INTERFACE_TOP_LEVEL_SCOPE=139 +SHIFT_LEFT=45 +WS=180 +SHIFT_RIGHT=47 +FORMAL_PARAM_STD_DECL=134 +LOCAL_MODIFIER_LIST=142 +OR=36 +LESS_THAN=25 +SHIFT_RIGHT_ASSIGN=48 +EXTENDS_BOUND_LIST=127 +JAVA_SOURCE=143 +CATCH=59 +FALSE=69 +INTEGER_TYPE_SUFFIX=172 +DECIMAL_LITERAL=167 +THROW=96 +FOR_INIT=131 +DEC=12 +PROTECTED=86 +CLASS=61 +LBRACK=22 +BIT_SHIFT_RIGHT=8 +THROWS_CLAUSE=156 +GREATER_OR_EQUAL=19 +FOR=73 +THIS_CONSTRUCTOR_CALL=155 +LOGICAL_NOT=27 +JAVADOC_COMMENT=183 +FLOAT=72 +ABSTRACT=53 +AND=4 +POST_DEC=147 +AND_ASSIGN=5 +STATIC_ARRAY_CREATOR=152 +MODIFIER_LIST=145 +ANNOTATION_SCOPE=110 +LPAREN=29 +IF=74 +AT=7 +ESCAPE_SEQUENCE=175 +CONSTRUCTOR_DECL=124 +LABELED_STATEMENT=141 +UNICODE_ESCAPE=176 +EXPR=126 +SYNCHRONIZED=94 +BOOLEAN=55 +CLASS_TOP_LEVEL_SCOPE=123 +IMPLEMENTS=75 +CONTINUE=62 +COMMA=11 +TRANSIENT=98 +EQUAL=18 +XOR_ASSIGN=52 +LOGICAL_OR=28 +IDENT=164 +QUALIFIED_TYPE_IDENT=151 +ARGUMENT_LIST=112 +PLUS=38 +HEX_LITERAL=165 +ANNOTATION_INIT_BLOCK=105 +DOT=15 +SHIFT_LEFT_ASSIGN=46 +FORMAL_PARAM_LIST=133 +GENERIC_TYPE_ARG_LIST=137 +ANNOTATION_TOP_LEVEL_SCOPE=111 +DOTSTAR=16 +BYTE=57 +XOR=51 +JAVA_ID_PART=179 +GREATER_THAN=20 +VOLATILE=102 +PARENTESIZED_EXPR=146 +CLASS_STATIC_INITIALIZER=122 +ARRAY_DECLARATOR_LIST=114 +LESS_OR_EQUAL=24 +DEFAULT=63 +OCTAL_LITERAL=166 +HEX_DIGIT=171 +SHORT=89 +INSTANCEOF=76 +MINUS=30 +EXTENDS_CLAUSE=128 +TRUE=99 +SEMI=44 +STAR_ASSIGN=50 +VAR_DECLARATOR_LIST=162 +ARRAY_DECLARATOR=113 +COLON=10 +OR_ASSIGN=37 +ENUM=67 +QUESTION=40 +FINALLY=71 +RCURLY=42 +PLUS_ASSIGN=39 +ASSIGN=6 +ANNOTATION_INIT_ARRAY_ELEMENT=104 +FUNCTION_METHOD_DECL=136 +INTERFACE=77 +POST_INC=148 +DIV=13 +CLASS_CONSTRUCTOR_CALL=120 +LONG=80 +FOR_EACH=130 +EXTENDS=68 +PUBLIC=87 +ARRAY_INITIALIZER=116 +CATCH_CLAUSE_LIST=119 +SUPER_CONSTRUCTOR_CALL=153 + +# token names +tokenNames = [ + "", "", "", "", + "AND", "AND_ASSIGN", "ASSIGN", "AT", "BIT_SHIFT_RIGHT", "BIT_SHIFT_RIGHT_ASSIGN", + "COLON", "COMMA", "DEC", "DIV", "DIV_ASSIGN", "DOT", "DOTSTAR", "ELLIPSIS", + "EQUAL", "GREATER_OR_EQUAL", "GREATER_THAN", "INC", "LBRACK", "LCURLY", + "LESS_OR_EQUAL", "LESS_THAN", "LOGICAL_AND", "LOGICAL_NOT", "LOGICAL_OR", + "LPAREN", "MINUS", "MINUS_ASSIGN", "MOD", "MOD_ASSIGN", "NOT", "NOT_EQUAL", + "OR", "OR_ASSIGN", "PLUS", "PLUS_ASSIGN", "QUESTION", "RBRACK", "RCURLY", + "RPAREN", "SEMI", "SHIFT_LEFT", "SHIFT_LEFT_ASSIGN", "SHIFT_RIGHT", + "SHIFT_RIGHT_ASSIGN", "STAR", "STAR_ASSIGN", "XOR", "XOR_ASSIGN", "ABSTRACT", + "ASSERT", "BOOLEAN", "BREAK", "BYTE", "CASE", "CATCH", "CHAR", "CLASS", + "CONTINUE", "DEFAULT", "DO", "DOUBLE", "ELSE", "ENUM", "EXTENDS", "FALSE", + "FINAL", "FINALLY", "FLOAT", "FOR", "IF", "IMPLEMENTS", "INSTANCEOF", + "INTERFACE", "IMPORT", "INT", "LONG", "NATIVE", "NEW", "NULL", "PACKAGE", + "PRIVATE", "PROTECTED", "PUBLIC", "RETURN", "SHORT", "STATIC", "STRICTFP", + "SUPER", "SWITCH", "SYNCHRONIZED", "THIS", "THROW", "THROWS", "TRANSIENT", + "TRUE", "TRY", "VOID", "VOLATILE", "WHILE", "ANNOTATION_INIT_ARRAY_ELEMENT", + "ANNOTATION_INIT_BLOCK", "ANNOTATION_INIT_DEFAULT_KEY", "ANNOTATION_INIT_KEY_LIST", + "ANNOTATION_LIST", "ANNOTATION_METHOD_DECL", "ANNOTATION_SCOPE", "ANNOTATION_TOP_LEVEL_SCOPE", + "ARGUMENT_LIST", "ARRAY_DECLARATOR", "ARRAY_DECLARATOR_LIST", "ARRAY_ELEMENT_ACCESS", + "ARRAY_INITIALIZER", "BLOCK_SCOPE", "CAST_EXPR", "CATCH_CLAUSE_LIST", + "CLASS_CONSTRUCTOR_CALL", "CLASS_INSTANCE_INITIALIZER", "CLASS_STATIC_INITIALIZER", + "CLASS_TOP_LEVEL_SCOPE", "CONSTRUCTOR_DECL", "ENUM_TOP_LEVEL_SCOPE", + "EXPR", "EXTENDS_BOUND_LIST", "EXTENDS_CLAUSE", "FOR_CONDITION", "FOR_EACH", + "FOR_INIT", "FOR_UPDATE", "FORMAL_PARAM_LIST", "FORMAL_PARAM_STD_DECL", + "FORMAL_PARAM_VARARG_DECL", "FUNCTION_METHOD_DECL", "GENERIC_TYPE_ARG_LIST", + "GENERIC_TYPE_PARAM_LIST", "INTERFACE_TOP_LEVEL_SCOPE", "IMPLEMENTS_CLAUSE", + "LABELED_STATEMENT", "LOCAL_MODIFIER_LIST", "JAVA_SOURCE", "METHOD_CALL", + "MODIFIER_LIST", "PARENTESIZED_EXPR", "POST_DEC", "POST_INC", "PRE_DEC", + "PRE_INC", "QUALIFIED_TYPE_IDENT", "STATIC_ARRAY_CREATOR", "SUPER_CONSTRUCTOR_CALL", + "SWITCH_BLOCK_LABEL_LIST", "THIS_CONSTRUCTOR_CALL", "THROWS_CLAUSE", + "TYPE", "UNARY_MINUS", "UNARY_PLUS", "VAR_DECLARATION", "VAR_DECLARATOR", + "VAR_DECLARATOR_LIST", "VOID_METHOD_DECL", "IDENT", "HEX_LITERAL", "OCTAL_LITERAL", + "DECIMAL_LITERAL", "FLOATING_POINT_LITERAL", "CHARACTER_LITERAL", "STRING_LITERAL", + "HEX_DIGIT", "INTEGER_TYPE_SUFFIX", "EXPONENT", "FLOAT_TYPE_SUFFIX", + "ESCAPE_SEQUENCE", "UNICODE_ESCAPE", "OCTAL_ESCAPE", "JAVA_ID_START", + "JAVA_ID_PART", "WS", "COMMENT", "LINE_COMMENT", "JAVADOC_COMMENT" +] + + + + +class JavaParser(Parser): + grammarFileName = "Java.g" + antlr_version = version_str_to_tuple("3.1.3 Mar 18, 2009 10:09:25") + antlr_version_str = "3.1.3 Mar 18, 2009 10:09:25" + tokenNames = tokenNames + + def __init__(self, input, state=None, *args, **kwargs): + if state is None: + state = RecognizerSharedState() + + super(JavaParser, self).__init__(input, state, *args, **kwargs) + + self._state.ruleMemo = {} + self.dfa36 = self.DFA36( + self, 36, + eot = self.DFA36_eot, + eof = self.DFA36_eof, + min = self.DFA36_min, + max = self.DFA36_max, + accept = self.DFA36_accept, + special = self.DFA36_special, + transition = self.DFA36_transition + ) + + self.dfa43 = self.DFA43( + self, 43, + eot = self.DFA43_eot, + eof = self.DFA43_eof, + min = self.DFA43_min, + max = self.DFA43_max, + accept = self.DFA43_accept, + special = self.DFA43_special, + transition = self.DFA43_transition + ) + + self.dfa86 = self.DFA86( + self, 86, + eot = self.DFA86_eot, + eof = self.DFA86_eof, + min = self.DFA86_min, + max = self.DFA86_max, + accept = self.DFA86_accept, + special = self.DFA86_special, + transition = self.DFA86_transition + ) + + self.dfa88 = self.DFA88( + self, 88, + eot = self.DFA88_eot, + eof = self.DFA88_eof, + min = self.DFA88_min, + max = self.DFA88_max, + accept = self.DFA88_accept, + special = self.DFA88_special, + transition = self.DFA88_transition + ) + + self.dfa98 = self.DFA98( + self, 98, + eot = self.DFA98_eot, + eof = self.DFA98_eof, + min = self.DFA98_min, + max = self.DFA98_max, + accept = self.DFA98_accept, + special = self.DFA98_special, + transition = self.DFA98_transition + ) + + self.dfa91 = self.DFA91( + self, 91, + eot = self.DFA91_eot, + eof = self.DFA91_eof, + min = self.DFA91_min, + max = self.DFA91_max, + accept = self.DFA91_accept, + special = self.DFA91_special, + transition = self.DFA91_transition + ) + + self.dfa106 = self.DFA106( + self, 106, + eot = self.DFA106_eot, + eof = self.DFA106_eof, + min = self.DFA106_min, + max = self.DFA106_max, + accept = self.DFA106_accept, + special = self.DFA106_special, + transition = self.DFA106_transition + ) + + self.dfa130 = self.DFA130( + self, 130, + eot = self.DFA130_eot, + eof = self.DFA130_eof, + min = self.DFA130_min, + max = self.DFA130_max, + accept = self.DFA130_accept, + special = self.DFA130_special, + transition = self.DFA130_transition + ) + + self.dfa142 = self.DFA142( + self, 142, + eot = self.DFA142_eot, + eof = self.DFA142_eof, + min = self.DFA142_min, + max = self.DFA142_max, + accept = self.DFA142_accept, + special = self.DFA142_special, + transition = self.DFA142_transition + ) + + self.dfa146 = self.DFA146( + self, 146, + eot = self.DFA146_eot, + eof = self.DFA146_eof, + min = self.DFA146_min, + max = self.DFA146_max, + accept = self.DFA146_accept, + special = self.DFA146_special, + transition = self.DFA146_transition + ) + + self.dfa153 = self.DFA153( + self, 153, + eot = self.DFA153_eot, + eof = self.DFA153_eof, + min = self.DFA153_min, + max = self.DFA153_max, + accept = self.DFA153_accept, + special = self.DFA153_special, + transition = self.DFA153_transition + ) + + + + + + + self._adaptor = None + self.adaptor = CommonTreeAdaptor() + + + + + def getTreeAdaptor(self): + return self._adaptor + + def setTreeAdaptor(self, adaptor): + self._adaptor = adaptor + + adaptor = property(getTreeAdaptor, setTreeAdaptor) + + + class javaSource_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.javaSource_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "javaSource" + # Java.g:222:1: javaSource : compilationUnit -> ^( JAVA_SOURCE compilationUnit ) ; + def javaSource(self, ): + + retval = self.javaSource_return() + retval.start = self.input.LT(1) + javaSource_StartIndex = self.input.index() + root_0 = None + + compilationUnit1 = None + + + stream_compilationUnit = RewriteRuleSubtreeStream(self._adaptor, "rule compilationUnit") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 1): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:223:5: ( compilationUnit -> ^( JAVA_SOURCE compilationUnit ) ) + # Java.g:223:9: compilationUnit + pass + self._state.following.append(self.FOLLOW_compilationUnit_in_javaSource4461) + compilationUnit1 = self.compilationUnit() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_compilationUnit.add(compilationUnit1.tree) + + # AST Rewrite + # elements: compilationUnit + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 224:9: -> ^( JAVA_SOURCE compilationUnit ) + # Java.g:224:13: ^( JAVA_SOURCE compilationUnit ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(JAVA_SOURCE, "JAVA_SOURCE"), root_1) + + self._adaptor.addChild(root_1, stream_compilationUnit.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 1, javaSource_StartIndex, success) + + pass + return retval + + # $ANTLR end "javaSource" + + class compilationUnit_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.compilationUnit_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "compilationUnit" + # Java.g:227:1: compilationUnit : annotationList ( packageDeclaration )? ( importDeclaration )* ( typeDecls )* ; + def compilationUnit(self, ): + + retval = self.compilationUnit_return() + retval.start = self.input.LT(1) + compilationUnit_StartIndex = self.input.index() + root_0 = None + + annotationList2 = None + + packageDeclaration3 = None + + importDeclaration4 = None + + typeDecls5 = None + + + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 2): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:228:5: ( annotationList ( packageDeclaration )? ( importDeclaration )* ( typeDecls )* ) + # Java.g:228:9: annotationList ( packageDeclaration )? ( importDeclaration )* ( typeDecls )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_annotationList_in_compilationUnit4497) + annotationList2 = self.annotationList() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotationList2.tree) + # Java.g:229:9: ( packageDeclaration )? + alt1 = 2 + LA1_0 = self.input.LA(1) + + if (LA1_0 == PACKAGE) : + alt1 = 1 + if alt1 == 1: + # Java.g:0:0: packageDeclaration + pass + self._state.following.append(self.FOLLOW_packageDeclaration_in_compilationUnit4507) + packageDeclaration3 = self.packageDeclaration() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, packageDeclaration3.tree) + + + + # Java.g:230:9: ( importDeclaration )* + while True: #loop2 + alt2 = 2 + LA2_0 = self.input.LA(1) + + if (LA2_0 == IMPORT) : + alt2 = 1 + + + if alt2 == 1: + # Java.g:0:0: importDeclaration + pass + self._state.following.append(self.FOLLOW_importDeclaration_in_compilationUnit4518) + importDeclaration4 = self.importDeclaration() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, importDeclaration4.tree) + + + else: + break #loop2 + # Java.g:231:9: ( typeDecls )* + while True: #loop3 + alt3 = 2 + LA3_0 = self.input.LA(1) + + if (LA3_0 == AT or LA3_0 == LESS_THAN or LA3_0 == SEMI or LA3_0 == ABSTRACT or LA3_0 == BOOLEAN or LA3_0 == BYTE or (CHAR <= LA3_0 <= CLASS) or LA3_0 == DOUBLE or LA3_0 == ENUM or LA3_0 == FINAL or LA3_0 == FLOAT or LA3_0 == INTERFACE or (INT <= LA3_0 <= NATIVE) or (PRIVATE <= LA3_0 <= PUBLIC) or (SHORT <= LA3_0 <= STRICTFP) or LA3_0 == SYNCHRONIZED or LA3_0 == TRANSIENT or (VOID <= LA3_0 <= VOLATILE) or LA3_0 == IDENT) : + alt3 = 1 + + + if alt3 == 1: + # Java.g:0:0: typeDecls + pass + self._state.following.append(self.FOLLOW_typeDecls_in_compilationUnit4529) + typeDecls5 = self.typeDecls() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, typeDecls5.tree) + + + else: + break #loop3 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 2, compilationUnit_StartIndex, success) + + pass + return retval + + # $ANTLR end "compilationUnit" + + class typeDecls_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.typeDecls_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "typeDecls" + # Java.g:234:1: typeDecls : ( typeDeclaration | SEMI ); + def typeDecls(self, ): + + retval = self.typeDecls_return() + retval.start = self.input.LT(1) + typeDecls_StartIndex = self.input.index() + root_0 = None + + SEMI7 = None + typeDeclaration6 = None + + + SEMI7_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 3): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:235:5: ( typeDeclaration | SEMI ) + alt4 = 2 + LA4_0 = self.input.LA(1) + + if (LA4_0 == AT or LA4_0 == LESS_THAN or LA4_0 == ABSTRACT or LA4_0 == BOOLEAN or LA4_0 == BYTE or (CHAR <= LA4_0 <= CLASS) or LA4_0 == DOUBLE or LA4_0 == ENUM or LA4_0 == FINAL or LA4_0 == FLOAT or LA4_0 == INTERFACE or (INT <= LA4_0 <= NATIVE) or (PRIVATE <= LA4_0 <= PUBLIC) or (SHORT <= LA4_0 <= STRICTFP) or LA4_0 == SYNCHRONIZED or LA4_0 == TRANSIENT or (VOID <= LA4_0 <= VOLATILE) or LA4_0 == IDENT) : + alt4 = 1 + elif (LA4_0 == SEMI) : + alt4 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 4, 0, self.input) + + raise nvae + + if alt4 == 1: + # Java.g:235:9: typeDeclaration + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_typeDeclaration_in_typeDecls4549) + typeDeclaration6 = self.typeDeclaration() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, typeDeclaration6.tree) + + + elif alt4 == 2: + # Java.g:236:9: SEMI + pass + root_0 = self._adaptor.nil() + + SEMI7=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_typeDecls4559) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 3, typeDecls_StartIndex, success) + + pass + return retval + + # $ANTLR end "typeDecls" + + class packageDeclaration_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.packageDeclaration_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "packageDeclaration" + # Java.g:239:1: packageDeclaration : PACKAGE qualifiedIdentifier SEMI ; + def packageDeclaration(self, ): + + retval = self.packageDeclaration_return() + retval.start = self.input.LT(1) + packageDeclaration_StartIndex = self.input.index() + root_0 = None + + PACKAGE8 = None + SEMI10 = None + qualifiedIdentifier9 = None + + + PACKAGE8_tree = None + SEMI10_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 4): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:240:5: ( PACKAGE qualifiedIdentifier SEMI ) + # Java.g:240:9: PACKAGE qualifiedIdentifier SEMI + pass + root_0 = self._adaptor.nil() + + PACKAGE8=self.match(self.input, PACKAGE, self.FOLLOW_PACKAGE_in_packageDeclaration4579) + if self._state.backtracking == 0: + + PACKAGE8_tree = self._adaptor.createWithPayload(PACKAGE8) + root_0 = self._adaptor.becomeRoot(PACKAGE8_tree, root_0) + + self._state.following.append(self.FOLLOW_qualifiedIdentifier_in_packageDeclaration4582) + qualifiedIdentifier9 = self.qualifiedIdentifier() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, qualifiedIdentifier9.tree) + SEMI10=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_packageDeclaration4584) + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 4, packageDeclaration_StartIndex, success) + + pass + return retval + + # $ANTLR end "packageDeclaration" + + class importDeclaration_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.importDeclaration_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "importDeclaration" + # Java.g:243:1: importDeclaration : IMPORT ( STATIC )? qualifiedIdentifier ( DOTSTAR )? SEMI ; + def importDeclaration(self, ): + + retval = self.importDeclaration_return() + retval.start = self.input.LT(1) + importDeclaration_StartIndex = self.input.index() + root_0 = None + + IMPORT11 = None + STATIC12 = None + DOTSTAR14 = None + SEMI15 = None + qualifiedIdentifier13 = None + + + IMPORT11_tree = None + STATIC12_tree = None + DOTSTAR14_tree = None + SEMI15_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 5): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:244:5: ( IMPORT ( STATIC )? qualifiedIdentifier ( DOTSTAR )? SEMI ) + # Java.g:244:9: IMPORT ( STATIC )? qualifiedIdentifier ( DOTSTAR )? SEMI + pass + root_0 = self._adaptor.nil() + + IMPORT11=self.match(self.input, IMPORT, self.FOLLOW_IMPORT_in_importDeclaration4604) + if self._state.backtracking == 0: + + IMPORT11_tree = self._adaptor.createWithPayload(IMPORT11) + root_0 = self._adaptor.becomeRoot(IMPORT11_tree, root_0) + + # Java.g:244:17: ( STATIC )? + alt5 = 2 + LA5_0 = self.input.LA(1) + + if (LA5_0 == STATIC) : + alt5 = 1 + if alt5 == 1: + # Java.g:0:0: STATIC + pass + STATIC12=self.match(self.input, STATIC, self.FOLLOW_STATIC_in_importDeclaration4607) + if self._state.backtracking == 0: + + STATIC12_tree = self._adaptor.createWithPayload(STATIC12) + self._adaptor.addChild(root_0, STATIC12_tree) + + + + + self._state.following.append(self.FOLLOW_qualifiedIdentifier_in_importDeclaration4610) + qualifiedIdentifier13 = self.qualifiedIdentifier() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, qualifiedIdentifier13.tree) + # Java.g:244:45: ( DOTSTAR )? + alt6 = 2 + LA6_0 = self.input.LA(1) + + if (LA6_0 == DOTSTAR) : + alt6 = 1 + if alt6 == 1: + # Java.g:0:0: DOTSTAR + pass + DOTSTAR14=self.match(self.input, DOTSTAR, self.FOLLOW_DOTSTAR_in_importDeclaration4612) + if self._state.backtracking == 0: + + DOTSTAR14_tree = self._adaptor.createWithPayload(DOTSTAR14) + self._adaptor.addChild(root_0, DOTSTAR14_tree) + + + + + SEMI15=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_importDeclaration4615) + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 5, importDeclaration_StartIndex, success) + + pass + return retval + + # $ANTLR end "importDeclaration" + + class typeDeclaration_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.typeDeclaration_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "typeDeclaration" + # Java.g:247:1: typeDeclaration : modifierList ( classTypeDeclaration[$modifierList.tree] | interfaceTypeDeclaration[$modifierList.tree] | enumTypeDeclaration[$modifierList.tree] | annotationTypeDeclaration[$modifierList.tree] ) ; + def typeDeclaration(self, ): + + retval = self.typeDeclaration_return() + retval.start = self.input.LT(1) + typeDeclaration_StartIndex = self.input.index() + root_0 = None + + modifierList16 = None + + classTypeDeclaration17 = None + + interfaceTypeDeclaration18 = None + + enumTypeDeclaration19 = None + + annotationTypeDeclaration20 = None + + + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 6): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:248:5: ( modifierList ( classTypeDeclaration[$modifierList.tree] | interfaceTypeDeclaration[$modifierList.tree] | enumTypeDeclaration[$modifierList.tree] | annotationTypeDeclaration[$modifierList.tree] ) ) + # Java.g:248:9: modifierList ( classTypeDeclaration[$modifierList.tree] | interfaceTypeDeclaration[$modifierList.tree] | enumTypeDeclaration[$modifierList.tree] | annotationTypeDeclaration[$modifierList.tree] ) + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_modifierList_in_typeDeclaration4635) + modifierList16 = self.modifierList() + + self._state.following.pop() + # Java.g:249:9: ( classTypeDeclaration[$modifierList.tree] | interfaceTypeDeclaration[$modifierList.tree] | enumTypeDeclaration[$modifierList.tree] | annotationTypeDeclaration[$modifierList.tree] ) + alt7 = 4 + LA7 = self.input.LA(1) + if LA7 == CLASS: + alt7 = 1 + elif LA7 == INTERFACE: + alt7 = 2 + elif LA7 == ENUM: + alt7 = 3 + elif LA7 == AT: + alt7 = 4 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 7, 0, self.input) + + raise nvae + + if alt7 == 1: + # Java.g:249:13: classTypeDeclaration[$modifierList.tree] + pass + self._state.following.append(self.FOLLOW_classTypeDeclaration_in_typeDeclaration4650) + classTypeDeclaration17 = self.classTypeDeclaration(modifierList16.tree) + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, classTypeDeclaration17.tree) + + + elif alt7 == 2: + # Java.g:250:13: interfaceTypeDeclaration[$modifierList.tree] + pass + self._state.following.append(self.FOLLOW_interfaceTypeDeclaration_in_typeDeclaration4665) + interfaceTypeDeclaration18 = self.interfaceTypeDeclaration(modifierList16.tree) + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, interfaceTypeDeclaration18.tree) + + + elif alt7 == 3: + # Java.g:251:13: enumTypeDeclaration[$modifierList.tree] + pass + self._state.following.append(self.FOLLOW_enumTypeDeclaration_in_typeDeclaration4680) + enumTypeDeclaration19 = self.enumTypeDeclaration(modifierList16.tree) + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, enumTypeDeclaration19.tree) + + + elif alt7 == 4: + # Java.g:252:13: annotationTypeDeclaration[$modifierList.tree] + pass + self._state.following.append(self.FOLLOW_annotationTypeDeclaration_in_typeDeclaration4695) + annotationTypeDeclaration20 = self.annotationTypeDeclaration(modifierList16.tree) + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotationTypeDeclaration20.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 6, typeDeclaration_StartIndex, success) + + pass + return retval + + # $ANTLR end "typeDeclaration" + + class classTypeDeclaration_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.classTypeDeclaration_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "classTypeDeclaration" + # Java.g:256:1: classTypeDeclaration[modifiers] : CLASS IDENT ( genericTypeParameterList )? ( classExtendsClause )? ( implementsClause )? classBody -> ^( CLASS IDENT ( genericTypeParameterList )? ( classExtendsClause )? ( implementsClause )? classBody ) ; + def classTypeDeclaration(self, modifiers): + + retval = self.classTypeDeclaration_return() + retval.start = self.input.LT(1) + classTypeDeclaration_StartIndex = self.input.index() + root_0 = None + + CLASS21 = None + IDENT22 = None + genericTypeParameterList23 = None + + classExtendsClause24 = None + + implementsClause25 = None + + classBody26 = None + + + CLASS21_tree = None + IDENT22_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_CLASS = RewriteRuleTokenStream(self._adaptor, "token CLASS") + stream_genericTypeParameterList = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeParameterList") + stream_classExtendsClause = RewriteRuleSubtreeStream(self._adaptor, "rule classExtendsClause") + stream_implementsClause = RewriteRuleSubtreeStream(self._adaptor, "rule implementsClause") + stream_classBody = RewriteRuleSubtreeStream(self._adaptor, "rule classBody") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 7): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:257:5: ( CLASS IDENT ( genericTypeParameterList )? ( classExtendsClause )? ( implementsClause )? classBody -> ^( CLASS IDENT ( genericTypeParameterList )? ( classExtendsClause )? ( implementsClause )? classBody ) ) + # Java.g:257:9: CLASS IDENT ( genericTypeParameterList )? ( classExtendsClause )? ( implementsClause )? classBody + pass + CLASS21=self.match(self.input, CLASS, self.FOLLOW_CLASS_in_classTypeDeclaration4726) + if self._state.backtracking == 0: + stream_CLASS.add(CLASS21) + IDENT22=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_classTypeDeclaration4728) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT22) + # Java.g:257:21: ( genericTypeParameterList )? + alt8 = 2 + LA8_0 = self.input.LA(1) + + if (LA8_0 == LESS_THAN) : + alt8 = 1 + if alt8 == 1: + # Java.g:0:0: genericTypeParameterList + pass + self._state.following.append(self.FOLLOW_genericTypeParameterList_in_classTypeDeclaration4730) + genericTypeParameterList23 = self.genericTypeParameterList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeParameterList.add(genericTypeParameterList23.tree) + + + + # Java.g:257:47: ( classExtendsClause )? + alt9 = 2 + LA9_0 = self.input.LA(1) + + if (LA9_0 == EXTENDS) : + alt9 = 1 + if alt9 == 1: + # Java.g:0:0: classExtendsClause + pass + self._state.following.append(self.FOLLOW_classExtendsClause_in_classTypeDeclaration4733) + classExtendsClause24 = self.classExtendsClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classExtendsClause.add(classExtendsClause24.tree) + + + + # Java.g:257:67: ( implementsClause )? + alt10 = 2 + LA10_0 = self.input.LA(1) + + if (LA10_0 == IMPLEMENTS) : + alt10 = 1 + if alt10 == 1: + # Java.g:0:0: implementsClause + pass + self._state.following.append(self.FOLLOW_implementsClause_in_classTypeDeclaration4736) + implementsClause25 = self.implementsClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_implementsClause.add(implementsClause25.tree) + + + + self._state.following.append(self.FOLLOW_classBody_in_classTypeDeclaration4739) + classBody26 = self.classBody() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classBody.add(classBody26.tree) + + # AST Rewrite + # elements: classExtendsClause, IDENT, genericTypeParameterList, implementsClause, classBody, CLASS + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 258:9: -> ^( CLASS IDENT ( genericTypeParameterList )? ( classExtendsClause )? ( implementsClause )? classBody ) + # Java.g:258:13: ^( CLASS IDENT ( genericTypeParameterList )? ( classExtendsClause )? ( implementsClause )? classBody ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_CLASS.nextNode(), root_1) + + self._adaptor.addChild(root_1, modifiers) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + # Java.g:258:40: ( genericTypeParameterList )? + if stream_genericTypeParameterList.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeParameterList.nextTree()) + + + stream_genericTypeParameterList.reset(); + # Java.g:258:66: ( classExtendsClause )? + if stream_classExtendsClause.hasNext(): + self._adaptor.addChild(root_1, stream_classExtendsClause.nextTree()) + + + stream_classExtendsClause.reset(); + # Java.g:259:15: ( implementsClause )? + if stream_implementsClause.hasNext(): + self._adaptor.addChild(root_1, stream_implementsClause.nextTree()) + + + stream_implementsClause.reset(); + self._adaptor.addChild(root_1, stream_classBody.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 7, classTypeDeclaration_StartIndex, success) + + pass + return retval + + # $ANTLR end "classTypeDeclaration" + + class classExtendsClause_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.classExtendsClause_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "classExtendsClause" + # Java.g:262:1: classExtendsClause : EXTENDS type -> ^( EXTENDS_CLAUSE[$EXTENDS, \"EXTENDS_CLAUSE\"] type ) ; + def classExtendsClause(self, ): + + retval = self.classExtendsClause_return() + retval.start = self.input.LT(1) + classExtendsClause_StartIndex = self.input.index() + root_0 = None + + EXTENDS27 = None + type28 = None + + + EXTENDS27_tree = None + stream_EXTENDS = RewriteRuleTokenStream(self._adaptor, "token EXTENDS") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 8): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:263:5: ( EXTENDS type -> ^( EXTENDS_CLAUSE[$EXTENDS, \"EXTENDS_CLAUSE\"] type ) ) + # Java.g:263:9: EXTENDS type + pass + EXTENDS27=self.match(self.input, EXTENDS, self.FOLLOW_EXTENDS_in_classExtendsClause4802) + if self._state.backtracking == 0: + stream_EXTENDS.add(EXTENDS27) + self._state.following.append(self.FOLLOW_type_in_classExtendsClause4804) + type28 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type28.tree) + + # AST Rewrite + # elements: type + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 264:9: -> ^( EXTENDS_CLAUSE[$EXTENDS, \"EXTENDS_CLAUSE\"] type ) + # Java.g:264:13: ^( EXTENDS_CLAUSE[$EXTENDS, \"EXTENDS_CLAUSE\"] type ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(EXTENDS_CLAUSE, EXTENDS27, "EXTENDS_CLAUSE"), root_1) + + self._adaptor.addChild(root_1, stream_type.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 8, classExtendsClause_StartIndex, success) + + pass + return retval + + # $ANTLR end "classExtendsClause" + + class interfaceExtendsClause_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.interfaceExtendsClause_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "interfaceExtendsClause" + # Java.g:267:1: interfaceExtendsClause : EXTENDS typeList -> ^( EXTENDS_CLAUSE[$EXTENDS, \"EXTENDS_CLAUSE\"] typeList ) ; + def interfaceExtendsClause(self, ): + + retval = self.interfaceExtendsClause_return() + retval.start = self.input.LT(1) + interfaceExtendsClause_StartIndex = self.input.index() + root_0 = None + + EXTENDS29 = None + typeList30 = None + + + EXTENDS29_tree = None + stream_EXTENDS = RewriteRuleTokenStream(self._adaptor, "token EXTENDS") + stream_typeList = RewriteRuleSubtreeStream(self._adaptor, "rule typeList") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 9): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:268:5: ( EXTENDS typeList -> ^( EXTENDS_CLAUSE[$EXTENDS, \"EXTENDS_CLAUSE\"] typeList ) ) + # Java.g:268:9: EXTENDS typeList + pass + EXTENDS29=self.match(self.input, EXTENDS, self.FOLLOW_EXTENDS_in_interfaceExtendsClause4841) + if self._state.backtracking == 0: + stream_EXTENDS.add(EXTENDS29) + self._state.following.append(self.FOLLOW_typeList_in_interfaceExtendsClause4843) + typeList30 = self.typeList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_typeList.add(typeList30.tree) + + # AST Rewrite + # elements: typeList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 269:9: -> ^( EXTENDS_CLAUSE[$EXTENDS, \"EXTENDS_CLAUSE\"] typeList ) + # Java.g:269:13: ^( EXTENDS_CLAUSE[$EXTENDS, \"EXTENDS_CLAUSE\"] typeList ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(EXTENDS_CLAUSE, EXTENDS29, "EXTENDS_CLAUSE"), root_1) + + self._adaptor.addChild(root_1, stream_typeList.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 9, interfaceExtendsClause_StartIndex, success) + + pass + return retval + + # $ANTLR end "interfaceExtendsClause" + + class implementsClause_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.implementsClause_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "implementsClause" + # Java.g:272:1: implementsClause : IMPLEMENTS typeList -> ^( IMPLEMENTS_CLAUSE[$IMPLEMENTS, \"IMPLEMENTS_CLAUSE\"] typeList ) ; + def implementsClause(self, ): + + retval = self.implementsClause_return() + retval.start = self.input.LT(1) + implementsClause_StartIndex = self.input.index() + root_0 = None + + IMPLEMENTS31 = None + typeList32 = None + + + IMPLEMENTS31_tree = None + stream_IMPLEMENTS = RewriteRuleTokenStream(self._adaptor, "token IMPLEMENTS") + stream_typeList = RewriteRuleSubtreeStream(self._adaptor, "rule typeList") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 10): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:273:5: ( IMPLEMENTS typeList -> ^( IMPLEMENTS_CLAUSE[$IMPLEMENTS, \"IMPLEMENTS_CLAUSE\"] typeList ) ) + # Java.g:273:9: IMPLEMENTS typeList + pass + IMPLEMENTS31=self.match(self.input, IMPLEMENTS, self.FOLLOW_IMPLEMENTS_in_implementsClause4880) + if self._state.backtracking == 0: + stream_IMPLEMENTS.add(IMPLEMENTS31) + self._state.following.append(self.FOLLOW_typeList_in_implementsClause4882) + typeList32 = self.typeList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_typeList.add(typeList32.tree) + + # AST Rewrite + # elements: typeList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 274:9: -> ^( IMPLEMENTS_CLAUSE[$IMPLEMENTS, \"IMPLEMENTS_CLAUSE\"] typeList ) + # Java.g:274:13: ^( IMPLEMENTS_CLAUSE[$IMPLEMENTS, \"IMPLEMENTS_CLAUSE\"] typeList ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(IMPLEMENTS_CLAUSE, IMPLEMENTS31, "IMPLEMENTS_CLAUSE"), root_1) + + self._adaptor.addChild(root_1, stream_typeList.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 10, implementsClause_StartIndex, success) + + pass + return retval + + # $ANTLR end "implementsClause" + + class genericTypeParameterList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.genericTypeParameterList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "genericTypeParameterList" + # Java.g:277:1: genericTypeParameterList : LESS_THAN genericTypeParameter ( COMMA genericTypeParameter )* genericTypeListClosing -> ^( GENERIC_TYPE_PARAM_LIST[$LESS_THAN, \"GENERIC_TYPE_PARAM_LIST\"] ( genericTypeParameter )+ ) ; + def genericTypeParameterList(self, ): + + retval = self.genericTypeParameterList_return() + retval.start = self.input.LT(1) + genericTypeParameterList_StartIndex = self.input.index() + root_0 = None + + LESS_THAN33 = None + COMMA35 = None + genericTypeParameter34 = None + + genericTypeParameter36 = None + + genericTypeListClosing37 = None + + + LESS_THAN33_tree = None + COMMA35_tree = None + stream_COMMA = RewriteRuleTokenStream(self._adaptor, "token COMMA") + stream_LESS_THAN = RewriteRuleTokenStream(self._adaptor, "token LESS_THAN") + stream_genericTypeParameter = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeParameter") + stream_genericTypeListClosing = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeListClosing") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 11): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:278:5: ( LESS_THAN genericTypeParameter ( COMMA genericTypeParameter )* genericTypeListClosing -> ^( GENERIC_TYPE_PARAM_LIST[$LESS_THAN, \"GENERIC_TYPE_PARAM_LIST\"] ( genericTypeParameter )+ ) ) + # Java.g:278:9: LESS_THAN genericTypeParameter ( COMMA genericTypeParameter )* genericTypeListClosing + pass + LESS_THAN33=self.match(self.input, LESS_THAN, self.FOLLOW_LESS_THAN_in_genericTypeParameterList4919) + if self._state.backtracking == 0: + stream_LESS_THAN.add(LESS_THAN33) + self._state.following.append(self.FOLLOW_genericTypeParameter_in_genericTypeParameterList4921) + genericTypeParameter34 = self.genericTypeParameter() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeParameter.add(genericTypeParameter34.tree) + # Java.g:278:40: ( COMMA genericTypeParameter )* + while True: #loop11 + alt11 = 2 + LA11_0 = self.input.LA(1) + + if (LA11_0 == COMMA) : + alt11 = 1 + + + if alt11 == 1: + # Java.g:278:41: COMMA genericTypeParameter + pass + COMMA35=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_genericTypeParameterList4924) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA35) + self._state.following.append(self.FOLLOW_genericTypeParameter_in_genericTypeParameterList4926) + genericTypeParameter36 = self.genericTypeParameter() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeParameter.add(genericTypeParameter36.tree) + + + else: + break #loop11 + self._state.following.append(self.FOLLOW_genericTypeListClosing_in_genericTypeParameterList4930) + genericTypeListClosing37 = self.genericTypeListClosing() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeListClosing.add(genericTypeListClosing37.tree) + + # AST Rewrite + # elements: genericTypeParameter + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 279:9: -> ^( GENERIC_TYPE_PARAM_LIST[$LESS_THAN, \"GENERIC_TYPE_PARAM_LIST\"] ( genericTypeParameter )+ ) + # Java.g:279:13: ^( GENERIC_TYPE_PARAM_LIST[$LESS_THAN, \"GENERIC_TYPE_PARAM_LIST\"] ( genericTypeParameter )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(GENERIC_TYPE_PARAM_LIST, LESS_THAN33, "GENERIC_TYPE_PARAM_LIST"), root_1) + + # Java.g:279:78: ( genericTypeParameter )+ + if not (stream_genericTypeParameter.hasNext()): + raise RewriteEarlyExitException() + + while stream_genericTypeParameter.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeParameter.nextTree()) + + + stream_genericTypeParameter.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 11, genericTypeParameterList_StartIndex, success) + + pass + return retval + + # $ANTLR end "genericTypeParameterList" + + class genericTypeListClosing_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.genericTypeListClosing_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "genericTypeListClosing" + # Java.g:282:1: genericTypeListClosing : ( GREATER_THAN | SHIFT_RIGHT | BIT_SHIFT_RIGHT | ); + def genericTypeListClosing(self, ): + + retval = self.genericTypeListClosing_return() + retval.start = self.input.LT(1) + genericTypeListClosing_StartIndex = self.input.index() + root_0 = None + + GREATER_THAN38 = None + SHIFT_RIGHT39 = None + BIT_SHIFT_RIGHT40 = None + + GREATER_THAN38_tree = None + SHIFT_RIGHT39_tree = None + BIT_SHIFT_RIGHT40_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 12): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:286:5: ( GREATER_THAN | SHIFT_RIGHT | BIT_SHIFT_RIGHT | ) + alt12 = 4 + LA12 = self.input.LA(1) + if LA12 == GREATER_THAN: + LA12_1 = self.input.LA(2) + + if (self.synpred14_Java()) : + alt12 = 1 + elif (True) : + alt12 = 4 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 12, 1, self.input) + + raise nvae + + elif LA12 == SHIFT_RIGHT: + LA12_2 = self.input.LA(2) + + if (self.synpred15_Java()) : + alt12 = 2 + elif (True) : + alt12 = 4 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 12, 2, self.input) + + raise nvae + + elif LA12 == BIT_SHIFT_RIGHT: + LA12_3 = self.input.LA(2) + + if (self.synpred16_Java()) : + alt12 = 3 + elif (True) : + alt12 = 4 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 12, 3, self.input) + + raise nvae + + elif LA12 == EOF or LA12 == AND or LA12 == AND_ASSIGN or LA12 == ASSIGN or LA12 == BIT_SHIFT_RIGHT_ASSIGN or LA12 == COLON or LA12 == COMMA or LA12 == DIV_ASSIGN or LA12 == DOT or LA12 == ELLIPSIS or LA12 == EQUAL or LA12 == LBRACK or LA12 == LCURLY or LA12 == LOGICAL_AND or LA12 == LOGICAL_OR or LA12 == LPAREN or LA12 == MINUS_ASSIGN or LA12 == MOD_ASSIGN or LA12 == NOT_EQUAL or LA12 == OR or LA12 == OR_ASSIGN or LA12 == PLUS_ASSIGN or LA12 == QUESTION or LA12 == RBRACK or LA12 == RCURLY or LA12 == RPAREN or LA12 == SEMI or LA12 == SHIFT_LEFT_ASSIGN or LA12 == SHIFT_RIGHT_ASSIGN or LA12 == STAR_ASSIGN or LA12 == XOR or LA12 == XOR_ASSIGN or LA12 == BOOLEAN or LA12 == BYTE or LA12 == CHAR or LA12 == DOUBLE or LA12 == EXTENDS or LA12 == FLOAT or LA12 == IMPLEMENTS or LA12 == INT or LA12 == LONG or LA12 == SHORT or LA12 == SUPER or LA12 == THIS or LA12 == VOID or LA12 == IDENT: + alt12 = 4 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 12, 0, self.input) + + raise nvae + + if alt12 == 1: + # Java.g:286:9: GREATER_THAN + pass + root_0 = self._adaptor.nil() + + GREATER_THAN38=self.match(self.input, GREATER_THAN, self.FOLLOW_GREATER_THAN_in_genericTypeListClosing5045) + if self._state.backtracking == 0: + + GREATER_THAN38_tree = self._adaptor.createWithPayload(GREATER_THAN38) + self._adaptor.addChild(root_0, GREATER_THAN38_tree) + + + + elif alt12 == 2: + # Java.g:287:9: SHIFT_RIGHT + pass + root_0 = self._adaptor.nil() + + SHIFT_RIGHT39=self.match(self.input, SHIFT_RIGHT, self.FOLLOW_SHIFT_RIGHT_in_genericTypeListClosing5055) + if self._state.backtracking == 0: + + SHIFT_RIGHT39_tree = self._adaptor.createWithPayload(SHIFT_RIGHT39) + self._adaptor.addChild(root_0, SHIFT_RIGHT39_tree) + + + + elif alt12 == 3: + # Java.g:288:9: BIT_SHIFT_RIGHT + pass + root_0 = self._adaptor.nil() + + BIT_SHIFT_RIGHT40=self.match(self.input, BIT_SHIFT_RIGHT, self.FOLLOW_BIT_SHIFT_RIGHT_in_genericTypeListClosing5065) + if self._state.backtracking == 0: + + BIT_SHIFT_RIGHT40_tree = self._adaptor.createWithPayload(BIT_SHIFT_RIGHT40) + self._adaptor.addChild(root_0, BIT_SHIFT_RIGHT40_tree) + + + + elif alt12 == 4: + # Java.g:290:5: + pass + root_0 = self._adaptor.nil() + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 12, genericTypeListClosing_StartIndex, success) + + pass + return retval + + # $ANTLR end "genericTypeListClosing" + + class genericTypeParameter_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.genericTypeParameter_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "genericTypeParameter" + # Java.g:292:1: genericTypeParameter : IDENT ( bound )? -> ^( IDENT ( bound )? ) ; + def genericTypeParameter(self, ): + + retval = self.genericTypeParameter_return() + retval.start = self.input.LT(1) + genericTypeParameter_StartIndex = self.input.index() + root_0 = None + + IDENT41 = None + bound42 = None + + + IDENT41_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_bound = RewriteRuleSubtreeStream(self._adaptor, "rule bound") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 13): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:293:5: ( IDENT ( bound )? -> ^( IDENT ( bound )? ) ) + # Java.g:293:9: IDENT ( bound )? + pass + IDENT41=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_genericTypeParameter5093) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT41) + # Java.g:293:15: ( bound )? + alt13 = 2 + LA13_0 = self.input.LA(1) + + if (LA13_0 == EXTENDS) : + LA13_1 = self.input.LA(2) + + if (LA13_1 == BOOLEAN or LA13_1 == BYTE or LA13_1 == CHAR or LA13_1 == DOUBLE or LA13_1 == FLOAT or (INT <= LA13_1 <= LONG) or LA13_1 == SHORT) : + LA13_3 = self.input.LA(3) + + if (self.synpred17_Java()) : + alt13 = 1 + elif (LA13_1 == IDENT) : + LA13_4 = self.input.LA(3) + + if (self.synpred17_Java()) : + alt13 = 1 + if alt13 == 1: + # Java.g:0:0: bound + pass + self._state.following.append(self.FOLLOW_bound_in_genericTypeParameter5095) + bound42 = self.bound() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_bound.add(bound42.tree) + + + + + # AST Rewrite + # elements: IDENT, bound + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 294:9: -> ^( IDENT ( bound )? ) + # Java.g:294:13: ^( IDENT ( bound )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_IDENT.nextNode(), root_1) + + # Java.g:294:21: ( bound )? + if stream_bound.hasNext(): + self._adaptor.addChild(root_1, stream_bound.nextTree()) + + + stream_bound.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 13, genericTypeParameter_StartIndex, success) + + pass + return retval + + # $ANTLR end "genericTypeParameter" + + class bound_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.bound_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "bound" + # Java.g:297:1: bound : EXTENDS type ( AND type )* -> ^( EXTENDS_BOUND_LIST[$EXTENDS, \"EXTENDS_BOUND_LIST\"] ( type )+ ) ; + def bound(self, ): + + retval = self.bound_return() + retval.start = self.input.LT(1) + bound_StartIndex = self.input.index() + root_0 = None + + EXTENDS43 = None + AND45 = None + type44 = None + + type46 = None + + + EXTENDS43_tree = None + AND45_tree = None + stream_AND = RewriteRuleTokenStream(self._adaptor, "token AND") + stream_EXTENDS = RewriteRuleTokenStream(self._adaptor, "token EXTENDS") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 14): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:298:5: ( EXTENDS type ( AND type )* -> ^( EXTENDS_BOUND_LIST[$EXTENDS, \"EXTENDS_BOUND_LIST\"] ( type )+ ) ) + # Java.g:298:9: EXTENDS type ( AND type )* + pass + EXTENDS43=self.match(self.input, EXTENDS, self.FOLLOW_EXTENDS_in_bound5133) + if self._state.backtracking == 0: + stream_EXTENDS.add(EXTENDS43) + self._state.following.append(self.FOLLOW_type_in_bound5135) + type44 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type44.tree) + # Java.g:298:22: ( AND type )* + while True: #loop14 + alt14 = 2 + LA14_0 = self.input.LA(1) + + if (LA14_0 == AND) : + alt14 = 1 + + + if alt14 == 1: + # Java.g:298:23: AND type + pass + AND45=self.match(self.input, AND, self.FOLLOW_AND_in_bound5138) + if self._state.backtracking == 0: + stream_AND.add(AND45) + self._state.following.append(self.FOLLOW_type_in_bound5140) + type46 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type46.tree) + + + else: + break #loop14 + + # AST Rewrite + # elements: type + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 299:9: -> ^( EXTENDS_BOUND_LIST[$EXTENDS, \"EXTENDS_BOUND_LIST\"] ( type )+ ) + # Java.g:299:13: ^( EXTENDS_BOUND_LIST[$EXTENDS, \"EXTENDS_BOUND_LIST\"] ( type )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(EXTENDS_BOUND_LIST, EXTENDS43, "EXTENDS_BOUND_LIST"), root_1) + + # Java.g:299:66: ( type )+ + if not (stream_type.hasNext()): + raise RewriteEarlyExitException() + + while stream_type.hasNext(): + self._adaptor.addChild(root_1, stream_type.nextTree()) + + + stream_type.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 14, bound_StartIndex, success) + + pass + return retval + + # $ANTLR end "bound" + + class enumTypeDeclaration_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.enumTypeDeclaration_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "enumTypeDeclaration" + # Java.g:302:1: enumTypeDeclaration[modifiers] : ENUM IDENT ( implementsClause )? enumBody -> ^( ENUM IDENT ( implementsClause )? enumBody ) ; + def enumTypeDeclaration(self, modifiers): + + retval = self.enumTypeDeclaration_return() + retval.start = self.input.LT(1) + enumTypeDeclaration_StartIndex = self.input.index() + root_0 = None + + ENUM47 = None + IDENT48 = None + implementsClause49 = None + + enumBody50 = None + + + ENUM47_tree = None + IDENT48_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_ENUM = RewriteRuleTokenStream(self._adaptor, "token ENUM") + stream_implementsClause = RewriteRuleSubtreeStream(self._adaptor, "rule implementsClause") + stream_enumBody = RewriteRuleSubtreeStream(self._adaptor, "rule enumBody") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 15): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:303:5: ( ENUM IDENT ( implementsClause )? enumBody -> ^( ENUM IDENT ( implementsClause )? enumBody ) ) + # Java.g:303:9: ENUM IDENT ( implementsClause )? enumBody + pass + ENUM47=self.match(self.input, ENUM, self.FOLLOW_ENUM_in_enumTypeDeclaration5181) + if self._state.backtracking == 0: + stream_ENUM.add(ENUM47) + IDENT48=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_enumTypeDeclaration5183) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT48) + # Java.g:303:20: ( implementsClause )? + alt15 = 2 + LA15_0 = self.input.LA(1) + + if (LA15_0 == IMPLEMENTS) : + alt15 = 1 + if alt15 == 1: + # Java.g:0:0: implementsClause + pass + self._state.following.append(self.FOLLOW_implementsClause_in_enumTypeDeclaration5185) + implementsClause49 = self.implementsClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_implementsClause.add(implementsClause49.tree) + + + + self._state.following.append(self.FOLLOW_enumBody_in_enumTypeDeclaration5188) + enumBody50 = self.enumBody() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_enumBody.add(enumBody50.tree) + + # AST Rewrite + # elements: ENUM, IDENT, enumBody, implementsClause + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 304:9: -> ^( ENUM IDENT ( implementsClause )? enumBody ) + # Java.g:304:13: ^( ENUM IDENT ( implementsClause )? enumBody ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_ENUM.nextNode(), root_1) + + self._adaptor.addChild(root_1, modifiers) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + # Java.g:304:39: ( implementsClause )? + if stream_implementsClause.hasNext(): + self._adaptor.addChild(root_1, stream_implementsClause.nextTree()) + + + stream_implementsClause.reset(); + self._adaptor.addChild(root_1, stream_enumBody.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 15, enumTypeDeclaration_StartIndex, success) + + pass + return retval + + # $ANTLR end "enumTypeDeclaration" + + class enumBody_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.enumBody_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "enumBody" + # Java.g:307:1: enumBody : LCURLY enumScopeDeclarations RCURLY -> ^( ENUM_TOP_LEVEL_SCOPE[$LCURLY, \"ENUM_TOP_LEVEL_SCOPE\"] enumScopeDeclarations ) ; + def enumBody(self, ): + + retval = self.enumBody_return() + retval.start = self.input.LT(1) + enumBody_StartIndex = self.input.index() + root_0 = None + + LCURLY51 = None + RCURLY53 = None + enumScopeDeclarations52 = None + + + LCURLY51_tree = None + RCURLY53_tree = None + stream_LCURLY = RewriteRuleTokenStream(self._adaptor, "token LCURLY") + stream_RCURLY = RewriteRuleTokenStream(self._adaptor, "token RCURLY") + stream_enumScopeDeclarations = RewriteRuleSubtreeStream(self._adaptor, "rule enumScopeDeclarations") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 16): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:308:5: ( LCURLY enumScopeDeclarations RCURLY -> ^( ENUM_TOP_LEVEL_SCOPE[$LCURLY, \"ENUM_TOP_LEVEL_SCOPE\"] enumScopeDeclarations ) ) + # Java.g:308:9: LCURLY enumScopeDeclarations RCURLY + pass + LCURLY51=self.match(self.input, LCURLY, self.FOLLOW_LCURLY_in_enumBody5231) + if self._state.backtracking == 0: + stream_LCURLY.add(LCURLY51) + self._state.following.append(self.FOLLOW_enumScopeDeclarations_in_enumBody5233) + enumScopeDeclarations52 = self.enumScopeDeclarations() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_enumScopeDeclarations.add(enumScopeDeclarations52.tree) + RCURLY53=self.match(self.input, RCURLY, self.FOLLOW_RCURLY_in_enumBody5235) + if self._state.backtracking == 0: + stream_RCURLY.add(RCURLY53) + + # AST Rewrite + # elements: enumScopeDeclarations + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 309:9: -> ^( ENUM_TOP_LEVEL_SCOPE[$LCURLY, \"ENUM_TOP_LEVEL_SCOPE\"] enumScopeDeclarations ) + # Java.g:309:13: ^( ENUM_TOP_LEVEL_SCOPE[$LCURLY, \"ENUM_TOP_LEVEL_SCOPE\"] enumScopeDeclarations ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(ENUM_TOP_LEVEL_SCOPE, LCURLY51, "ENUM_TOP_LEVEL_SCOPE"), root_1) + + self._adaptor.addChild(root_1, stream_enumScopeDeclarations.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 16, enumBody_StartIndex, success) + + pass + return retval + + # $ANTLR end "enumBody" + + class enumScopeDeclarations_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.enumScopeDeclarations_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "enumScopeDeclarations" + # Java.g:312:1: enumScopeDeclarations : enumConstants ( COMMA )? ( enumClassScopeDeclarations )? ; + def enumScopeDeclarations(self, ): + + retval = self.enumScopeDeclarations_return() + retval.start = self.input.LT(1) + enumScopeDeclarations_StartIndex = self.input.index() + root_0 = None + + COMMA55 = None + enumConstants54 = None + + enumClassScopeDeclarations56 = None + + + COMMA55_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 17): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:313:5: ( enumConstants ( COMMA )? ( enumClassScopeDeclarations )? ) + # Java.g:313:9: enumConstants ( COMMA )? ( enumClassScopeDeclarations )? + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_enumConstants_in_enumScopeDeclarations5272) + enumConstants54 = self.enumConstants() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, enumConstants54.tree) + # Java.g:313:23: ( COMMA )? + alt16 = 2 + LA16_0 = self.input.LA(1) + + if (LA16_0 == COMMA) : + alt16 = 1 + if alt16 == 1: + # Java.g:313:24: COMMA + pass + COMMA55=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_enumScopeDeclarations5275) + + + + # Java.g:313:33: ( enumClassScopeDeclarations )? + alt17 = 2 + LA17_0 = self.input.LA(1) + + if (LA17_0 == SEMI) : + alt17 = 1 + if alt17 == 1: + # Java.g:0:0: enumClassScopeDeclarations + pass + self._state.following.append(self.FOLLOW_enumClassScopeDeclarations_in_enumScopeDeclarations5280) + enumClassScopeDeclarations56 = self.enumClassScopeDeclarations() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, enumClassScopeDeclarations56.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 17, enumScopeDeclarations_StartIndex, success) + + pass + return retval + + # $ANTLR end "enumScopeDeclarations" + + class enumClassScopeDeclarations_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.enumClassScopeDeclarations_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "enumClassScopeDeclarations" + # Java.g:316:1: enumClassScopeDeclarations : SEMI ( classScopeDeclarations )* -> ^( CLASS_TOP_LEVEL_SCOPE[$SEMI, \"CLASS_TOP_LEVEL_SCOPE\"] ( classScopeDeclarations )* ) ; + def enumClassScopeDeclarations(self, ): + + retval = self.enumClassScopeDeclarations_return() + retval.start = self.input.LT(1) + enumClassScopeDeclarations_StartIndex = self.input.index() + root_0 = None + + SEMI57 = None + classScopeDeclarations58 = None + + + SEMI57_tree = None + stream_SEMI = RewriteRuleTokenStream(self._adaptor, "token SEMI") + stream_classScopeDeclarations = RewriteRuleSubtreeStream(self._adaptor, "rule classScopeDeclarations") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 18): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:317:5: ( SEMI ( classScopeDeclarations )* -> ^( CLASS_TOP_LEVEL_SCOPE[$SEMI, \"CLASS_TOP_LEVEL_SCOPE\"] ( classScopeDeclarations )* ) ) + # Java.g:317:9: SEMI ( classScopeDeclarations )* + pass + SEMI57=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_enumClassScopeDeclarations5300) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI57) + # Java.g:317:14: ( classScopeDeclarations )* + while True: #loop18 + alt18 = 2 + LA18_0 = self.input.LA(1) + + if (LA18_0 == AT or LA18_0 == LCURLY or LA18_0 == LESS_THAN or LA18_0 == SEMI or LA18_0 == ABSTRACT or LA18_0 == BOOLEAN or LA18_0 == BYTE or (CHAR <= LA18_0 <= CLASS) or LA18_0 == DOUBLE or LA18_0 == ENUM or LA18_0 == FINAL or LA18_0 == FLOAT or LA18_0 == INTERFACE or (INT <= LA18_0 <= NATIVE) or (PRIVATE <= LA18_0 <= PUBLIC) or (SHORT <= LA18_0 <= STRICTFP) or LA18_0 == SYNCHRONIZED or LA18_0 == TRANSIENT or (VOID <= LA18_0 <= VOLATILE) or LA18_0 == IDENT) : + alt18 = 1 + + + if alt18 == 1: + # Java.g:0:0: classScopeDeclarations + pass + self._state.following.append(self.FOLLOW_classScopeDeclarations_in_enumClassScopeDeclarations5302) + classScopeDeclarations58 = self.classScopeDeclarations() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classScopeDeclarations.add(classScopeDeclarations58.tree) + + + else: + break #loop18 + + # AST Rewrite + # elements: classScopeDeclarations + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 318:9: -> ^( CLASS_TOP_LEVEL_SCOPE[$SEMI, \"CLASS_TOP_LEVEL_SCOPE\"] ( classScopeDeclarations )* ) + # Java.g:318:13: ^( CLASS_TOP_LEVEL_SCOPE[$SEMI, \"CLASS_TOP_LEVEL_SCOPE\"] ( classScopeDeclarations )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(CLASS_TOP_LEVEL_SCOPE, SEMI57, "CLASS_TOP_LEVEL_SCOPE"), root_1) + + # Java.g:318:69: ( classScopeDeclarations )* + while stream_classScopeDeclarations.hasNext(): + self._adaptor.addChild(root_1, stream_classScopeDeclarations.nextTree()) + + + stream_classScopeDeclarations.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 18, enumClassScopeDeclarations_StartIndex, success) + + pass + return retval + + # $ANTLR end "enumClassScopeDeclarations" + + class enumConstants_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.enumConstants_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "enumConstants" + # Java.g:321:1: enumConstants : enumConstant ( COMMA enumConstant )* ; + def enumConstants(self, ): + + retval = self.enumConstants_return() + retval.start = self.input.LT(1) + enumConstants_StartIndex = self.input.index() + root_0 = None + + COMMA60 = None + enumConstant59 = None + + enumConstant61 = None + + + COMMA60_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 19): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:322:5: ( enumConstant ( COMMA enumConstant )* ) + # Java.g:322:9: enumConstant ( COMMA enumConstant )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_enumConstant_in_enumConstants5341) + enumConstant59 = self.enumConstant() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, enumConstant59.tree) + # Java.g:322:22: ( COMMA enumConstant )* + while True: #loop19 + alt19 = 2 + LA19_0 = self.input.LA(1) + + if (LA19_0 == COMMA) : + LA19_1 = self.input.LA(2) + + if (LA19_1 == AT or LA19_1 == IDENT) : + alt19 = 1 + + + + + if alt19 == 1: + # Java.g:322:23: COMMA enumConstant + pass + COMMA60=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_enumConstants5344) + self._state.following.append(self.FOLLOW_enumConstant_in_enumConstants5347) + enumConstant61 = self.enumConstant() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, enumConstant61.tree) + + + else: + break #loop19 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 19, enumConstants_StartIndex, success) + + pass + return retval + + # $ANTLR end "enumConstants" + + class enumConstant_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.enumConstant_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "enumConstant" + # Java.g:325:1: enumConstant : annotationList IDENT ( arguments )? ( classBody )? ; + def enumConstant(self, ): + + retval = self.enumConstant_return() + retval.start = self.input.LT(1) + enumConstant_StartIndex = self.input.index() + root_0 = None + + IDENT63 = None + annotationList62 = None + + arguments64 = None + + classBody65 = None + + + IDENT63_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 20): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:326:5: ( annotationList IDENT ( arguments )? ( classBody )? ) + # Java.g:326:9: annotationList IDENT ( arguments )? ( classBody )? + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_annotationList_in_enumConstant5368) + annotationList62 = self.annotationList() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotationList62.tree) + IDENT63=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_enumConstant5370) + if self._state.backtracking == 0: + + IDENT63_tree = self._adaptor.createWithPayload(IDENT63) + root_0 = self._adaptor.becomeRoot(IDENT63_tree, root_0) + + # Java.g:326:31: ( arguments )? + alt20 = 2 + LA20_0 = self.input.LA(1) + + if (LA20_0 == LPAREN) : + alt20 = 1 + if alt20 == 1: + # Java.g:0:0: arguments + pass + self._state.following.append(self.FOLLOW_arguments_in_enumConstant5373) + arguments64 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, arguments64.tree) + + + + # Java.g:326:42: ( classBody )? + alt21 = 2 + LA21_0 = self.input.LA(1) + + if (LA21_0 == LCURLY) : + alt21 = 1 + if alt21 == 1: + # Java.g:0:0: classBody + pass + self._state.following.append(self.FOLLOW_classBody_in_enumConstant5376) + classBody65 = self.classBody() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, classBody65.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 20, enumConstant_StartIndex, success) + + pass + return retval + + # $ANTLR end "enumConstant" + + class interfaceTypeDeclaration_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.interfaceTypeDeclaration_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "interfaceTypeDeclaration" + # Java.g:329:1: interfaceTypeDeclaration[modifiers] : INTERFACE IDENT ( genericTypeParameterList )? ( interfaceExtendsClause )? interfaceBody -> ^( INTERFACE IDENT ( genericTypeParameterList )? ( interfaceExtendsClause )? interfaceBody ) ; + def interfaceTypeDeclaration(self, modifiers): + + retval = self.interfaceTypeDeclaration_return() + retval.start = self.input.LT(1) + interfaceTypeDeclaration_StartIndex = self.input.index() + root_0 = None + + INTERFACE66 = None + IDENT67 = None + genericTypeParameterList68 = None + + interfaceExtendsClause69 = None + + interfaceBody70 = None + + + INTERFACE66_tree = None + IDENT67_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_INTERFACE = RewriteRuleTokenStream(self._adaptor, "token INTERFACE") + stream_genericTypeParameterList = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeParameterList") + stream_interfaceBody = RewriteRuleSubtreeStream(self._adaptor, "rule interfaceBody") + stream_interfaceExtendsClause = RewriteRuleSubtreeStream(self._adaptor, "rule interfaceExtendsClause") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 21): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:330:5: ( INTERFACE IDENT ( genericTypeParameterList )? ( interfaceExtendsClause )? interfaceBody -> ^( INTERFACE IDENT ( genericTypeParameterList )? ( interfaceExtendsClause )? interfaceBody ) ) + # Java.g:330:9: INTERFACE IDENT ( genericTypeParameterList )? ( interfaceExtendsClause )? interfaceBody + pass + INTERFACE66=self.match(self.input, INTERFACE, self.FOLLOW_INTERFACE_in_interfaceTypeDeclaration5397) + if self._state.backtracking == 0: + stream_INTERFACE.add(INTERFACE66) + IDENT67=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_interfaceTypeDeclaration5399) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT67) + # Java.g:330:25: ( genericTypeParameterList )? + alt22 = 2 + LA22_0 = self.input.LA(1) + + if (LA22_0 == LESS_THAN) : + alt22 = 1 + if alt22 == 1: + # Java.g:0:0: genericTypeParameterList + pass + self._state.following.append(self.FOLLOW_genericTypeParameterList_in_interfaceTypeDeclaration5401) + genericTypeParameterList68 = self.genericTypeParameterList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeParameterList.add(genericTypeParameterList68.tree) + + + + # Java.g:330:51: ( interfaceExtendsClause )? + alt23 = 2 + LA23_0 = self.input.LA(1) + + if (LA23_0 == EXTENDS) : + alt23 = 1 + if alt23 == 1: + # Java.g:0:0: interfaceExtendsClause + pass + self._state.following.append(self.FOLLOW_interfaceExtendsClause_in_interfaceTypeDeclaration5404) + interfaceExtendsClause69 = self.interfaceExtendsClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_interfaceExtendsClause.add(interfaceExtendsClause69.tree) + + + + self._state.following.append(self.FOLLOW_interfaceBody_in_interfaceTypeDeclaration5407) + interfaceBody70 = self.interfaceBody() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_interfaceBody.add(interfaceBody70.tree) + + # AST Rewrite + # elements: INTERFACE, genericTypeParameterList, IDENT, interfaceExtendsClause, interfaceBody + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 331:9: -> ^( INTERFACE IDENT ( genericTypeParameterList )? ( interfaceExtendsClause )? interfaceBody ) + # Java.g:331:13: ^( INTERFACE IDENT ( genericTypeParameterList )? ( interfaceExtendsClause )? interfaceBody ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_INTERFACE.nextNode(), root_1) + + self._adaptor.addChild(root_1, modifiers) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + # Java.g:331:44: ( genericTypeParameterList )? + if stream_genericTypeParameterList.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeParameterList.nextTree()) + + + stream_genericTypeParameterList.reset(); + # Java.g:331:70: ( interfaceExtendsClause )? + if stream_interfaceExtendsClause.hasNext(): + self._adaptor.addChild(root_1, stream_interfaceExtendsClause.nextTree()) + + + stream_interfaceExtendsClause.reset(); + self._adaptor.addChild(root_1, stream_interfaceBody.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 21, interfaceTypeDeclaration_StartIndex, success) + + pass + return retval + + # $ANTLR end "interfaceTypeDeclaration" + + class typeList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.typeList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "typeList" + # Java.g:334:1: typeList : type ( COMMA type )* ; + def typeList(self, ): + + retval = self.typeList_return() + retval.start = self.input.LT(1) + typeList_StartIndex = self.input.index() + root_0 = None + + COMMA72 = None + type71 = None + + type73 = None + + + COMMA72_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 22): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:335:5: ( type ( COMMA type )* ) + # Java.g:335:9: type ( COMMA type )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_type_in_typeList5453) + type71 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, type71.tree) + # Java.g:335:14: ( COMMA type )* + while True: #loop24 + alt24 = 2 + LA24_0 = self.input.LA(1) + + if (LA24_0 == COMMA) : + alt24 = 1 + + + if alt24 == 1: + # Java.g:335:15: COMMA type + pass + COMMA72=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_typeList5456) + self._state.following.append(self.FOLLOW_type_in_typeList5459) + type73 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, type73.tree) + + + else: + break #loop24 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 22, typeList_StartIndex, success) + + pass + return retval + + # $ANTLR end "typeList" + + class classBody_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.classBody_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "classBody" + # Java.g:338:1: classBody : LCURLY ( classScopeDeclarations )* RCURLY -> ^( CLASS_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( classScopeDeclarations )* ) ; + def classBody(self, ): + + retval = self.classBody_return() + retval.start = self.input.LT(1) + classBody_StartIndex = self.input.index() + root_0 = None + + LCURLY74 = None + RCURLY76 = None + classScopeDeclarations75 = None + + + LCURLY74_tree = None + RCURLY76_tree = None + stream_LCURLY = RewriteRuleTokenStream(self._adaptor, "token LCURLY") + stream_RCURLY = RewriteRuleTokenStream(self._adaptor, "token RCURLY") + stream_classScopeDeclarations = RewriteRuleSubtreeStream(self._adaptor, "rule classScopeDeclarations") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 23): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:339:5: ( LCURLY ( classScopeDeclarations )* RCURLY -> ^( CLASS_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( classScopeDeclarations )* ) ) + # Java.g:339:9: LCURLY ( classScopeDeclarations )* RCURLY + pass + LCURLY74=self.match(self.input, LCURLY, self.FOLLOW_LCURLY_in_classBody5480) + if self._state.backtracking == 0: + stream_LCURLY.add(LCURLY74) + # Java.g:339:16: ( classScopeDeclarations )* + while True: #loop25 + alt25 = 2 + LA25_0 = self.input.LA(1) + + if (LA25_0 == AT or LA25_0 == LCURLY or LA25_0 == LESS_THAN or LA25_0 == SEMI or LA25_0 == ABSTRACT or LA25_0 == BOOLEAN or LA25_0 == BYTE or (CHAR <= LA25_0 <= CLASS) or LA25_0 == DOUBLE or LA25_0 == ENUM or LA25_0 == FINAL or LA25_0 == FLOAT or LA25_0 == INTERFACE or (INT <= LA25_0 <= NATIVE) or (PRIVATE <= LA25_0 <= PUBLIC) or (SHORT <= LA25_0 <= STRICTFP) or LA25_0 == SYNCHRONIZED or LA25_0 == TRANSIENT or (VOID <= LA25_0 <= VOLATILE) or LA25_0 == IDENT) : + alt25 = 1 + + + if alt25 == 1: + # Java.g:0:0: classScopeDeclarations + pass + self._state.following.append(self.FOLLOW_classScopeDeclarations_in_classBody5482) + classScopeDeclarations75 = self.classScopeDeclarations() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classScopeDeclarations.add(classScopeDeclarations75.tree) + + + else: + break #loop25 + RCURLY76=self.match(self.input, RCURLY, self.FOLLOW_RCURLY_in_classBody5485) + if self._state.backtracking == 0: + stream_RCURLY.add(RCURLY76) + + # AST Rewrite + # elements: classScopeDeclarations + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 340:9: -> ^( CLASS_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( classScopeDeclarations )* ) + # Java.g:340:13: ^( CLASS_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( classScopeDeclarations )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(CLASS_TOP_LEVEL_SCOPE, LCURLY74, "CLASS_TOP_LEVEL_SCOPE"), root_1) + + # Java.g:340:71: ( classScopeDeclarations )* + while stream_classScopeDeclarations.hasNext(): + self._adaptor.addChild(root_1, stream_classScopeDeclarations.nextTree()) + + + stream_classScopeDeclarations.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 23, classBody_StartIndex, success) + + pass + return retval + + # $ANTLR end "classBody" + + class interfaceBody_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.interfaceBody_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "interfaceBody" + # Java.g:343:1: interfaceBody : LCURLY ( interfaceScopeDeclarations )* RCURLY -> ^( INTERFACE_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( interfaceScopeDeclarations )* ) ; + def interfaceBody(self, ): + + retval = self.interfaceBody_return() + retval.start = self.input.LT(1) + interfaceBody_StartIndex = self.input.index() + root_0 = None + + LCURLY77 = None + RCURLY79 = None + interfaceScopeDeclarations78 = None + + + LCURLY77_tree = None + RCURLY79_tree = None + stream_LCURLY = RewriteRuleTokenStream(self._adaptor, "token LCURLY") + stream_RCURLY = RewriteRuleTokenStream(self._adaptor, "token RCURLY") + stream_interfaceScopeDeclarations = RewriteRuleSubtreeStream(self._adaptor, "rule interfaceScopeDeclarations") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 24): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:344:5: ( LCURLY ( interfaceScopeDeclarations )* RCURLY -> ^( INTERFACE_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( interfaceScopeDeclarations )* ) ) + # Java.g:344:9: LCURLY ( interfaceScopeDeclarations )* RCURLY + pass + LCURLY77=self.match(self.input, LCURLY, self.FOLLOW_LCURLY_in_interfaceBody5523) + if self._state.backtracking == 0: + stream_LCURLY.add(LCURLY77) + # Java.g:344:16: ( interfaceScopeDeclarations )* + while True: #loop26 + alt26 = 2 + LA26_0 = self.input.LA(1) + + if (LA26_0 == AT or LA26_0 == LESS_THAN or LA26_0 == SEMI or LA26_0 == ABSTRACT or LA26_0 == BOOLEAN or LA26_0 == BYTE or (CHAR <= LA26_0 <= CLASS) or LA26_0 == DOUBLE or LA26_0 == ENUM or LA26_0 == FINAL or LA26_0 == FLOAT or LA26_0 == INTERFACE or (INT <= LA26_0 <= NATIVE) or (PRIVATE <= LA26_0 <= PUBLIC) or (SHORT <= LA26_0 <= STRICTFP) or LA26_0 == SYNCHRONIZED or LA26_0 == TRANSIENT or (VOID <= LA26_0 <= VOLATILE) or LA26_0 == IDENT) : + alt26 = 1 + + + if alt26 == 1: + # Java.g:0:0: interfaceScopeDeclarations + pass + self._state.following.append(self.FOLLOW_interfaceScopeDeclarations_in_interfaceBody5525) + interfaceScopeDeclarations78 = self.interfaceScopeDeclarations() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_interfaceScopeDeclarations.add(interfaceScopeDeclarations78.tree) + + + else: + break #loop26 + RCURLY79=self.match(self.input, RCURLY, self.FOLLOW_RCURLY_in_interfaceBody5528) + if self._state.backtracking == 0: + stream_RCURLY.add(RCURLY79) + + # AST Rewrite + # elements: interfaceScopeDeclarations + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 345:9: -> ^( INTERFACE_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( interfaceScopeDeclarations )* ) + # Java.g:345:13: ^( INTERFACE_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( interfaceScopeDeclarations )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(INTERFACE_TOP_LEVEL_SCOPE, LCURLY77, "CLASS_TOP_LEVEL_SCOPE"), root_1) + + # Java.g:345:75: ( interfaceScopeDeclarations )* + while stream_interfaceScopeDeclarations.hasNext(): + self._adaptor.addChild(root_1, stream_interfaceScopeDeclarations.nextTree()) + + + stream_interfaceScopeDeclarations.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 24, interfaceBody_StartIndex, success) + + pass + return retval + + # $ANTLR end "interfaceBody" + + class classScopeDeclarations_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.classScopeDeclarations_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "classScopeDeclarations" + # Java.g:348:1: classScopeDeclarations : ( block -> ^( CLASS_INSTANCE_INITIALIZER block ) | STATIC block -> ^( CLASS_STATIC_INITIALIZER[$STATIC, \"CLASS_STATIC_INITIALIZER\"] block ) | modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ( block )? ) | ident= IDENT formalParameterList ( throwsClause )? block -> ^( CONSTRUCTOR_DECL[$ident, \"CONSTRUCTOR_DECL\"] modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block ) ) | type classFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) ) | typeDeclaration | SEMI ); + def classScopeDeclarations(self, ): + + retval = self.classScopeDeclarations_return() + retval.start = self.input.LT(1) + classScopeDeclarations_StartIndex = self.input.index() + root_0 = None + + ident = None + STATIC81 = None + IDENT86 = None + SEMI91 = None + VOID92 = None + IDENT93 = None + SEMI97 = None + SEMI103 = None + SEMI105 = None + block80 = None + + block82 = None + + modifierList83 = None + + genericTypeParameterList84 = None + + type85 = None + + formalParameterList87 = None + + arrayDeclaratorList88 = None + + throwsClause89 = None + + block90 = None + + formalParameterList94 = None + + throwsClause95 = None + + block96 = None + + formalParameterList98 = None + + throwsClause99 = None + + block100 = None + + type101 = None + + classFieldDeclaratorList102 = None + + typeDeclaration104 = None + + + ident_tree = None + STATIC81_tree = None + IDENT86_tree = None + SEMI91_tree = None + VOID92_tree = None + IDENT93_tree = None + SEMI97_tree = None + SEMI103_tree = None + SEMI105_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_VOID = RewriteRuleTokenStream(self._adaptor, "token VOID") + stream_SEMI = RewriteRuleTokenStream(self._adaptor, "token SEMI") + stream_STATIC = RewriteRuleTokenStream(self._adaptor, "token STATIC") + stream_arrayDeclaratorList = RewriteRuleSubtreeStream(self._adaptor, "rule arrayDeclaratorList") + stream_throwsClause = RewriteRuleSubtreeStream(self._adaptor, "rule throwsClause") + stream_modifierList = RewriteRuleSubtreeStream(self._adaptor, "rule modifierList") + stream_genericTypeParameterList = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeParameterList") + stream_block = RewriteRuleSubtreeStream(self._adaptor, "rule block") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + stream_classFieldDeclaratorList = RewriteRuleSubtreeStream(self._adaptor, "rule classFieldDeclaratorList") + stream_formalParameterList = RewriteRuleSubtreeStream(self._adaptor, "rule formalParameterList") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 25): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:349:5: ( block -> ^( CLASS_INSTANCE_INITIALIZER block ) | STATIC block -> ^( CLASS_STATIC_INITIALIZER[$STATIC, \"CLASS_STATIC_INITIALIZER\"] block ) | modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ( block )? ) | ident= IDENT formalParameterList ( throwsClause )? block -> ^( CONSTRUCTOR_DECL[$ident, \"CONSTRUCTOR_DECL\"] modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block ) ) | type classFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) ) | typeDeclaration | SEMI ) + alt36 = 5 + alt36 = self.dfa36.predict(self.input) + if alt36 == 1: + # Java.g:349:9: block + pass + self._state.following.append(self.FOLLOW_block_in_classScopeDeclarations5566) + block80 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_block.add(block80.tree) + + # AST Rewrite + # elements: block + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 349:25: -> ^( CLASS_INSTANCE_INITIALIZER block ) + # Java.g:349:29: ^( CLASS_INSTANCE_INITIALIZER block ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(CLASS_INSTANCE_INITIALIZER, "CLASS_INSTANCE_INITIALIZER"), root_1) + + self._adaptor.addChild(root_1, stream_block.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt36 == 2: + # Java.g:350:9: STATIC block + pass + STATIC81=self.match(self.input, STATIC, self.FOLLOW_STATIC_in_classScopeDeclarations5595) + if self._state.backtracking == 0: + stream_STATIC.add(STATIC81) + self._state.following.append(self.FOLLOW_block_in_classScopeDeclarations5597) + block82 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_block.add(block82.tree) + + # AST Rewrite + # elements: block + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 350:25: -> ^( CLASS_STATIC_INITIALIZER[$STATIC, \"CLASS_STATIC_INITIALIZER\"] block ) + # Java.g:350:29: ^( CLASS_STATIC_INITIALIZER[$STATIC, \"CLASS_STATIC_INITIALIZER\"] block ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(CLASS_STATIC_INITIALIZER, STATIC81, "CLASS_STATIC_INITIALIZER"), root_1) + + self._adaptor.addChild(root_1, stream_block.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt36 == 3: + # Java.g:351:9: modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ( block )? ) | ident= IDENT formalParameterList ( throwsClause )? block -> ^( CONSTRUCTOR_DECL[$ident, \"CONSTRUCTOR_DECL\"] modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block ) ) | type classFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) ) + pass + self._state.following.append(self.FOLLOW_modifierList_in_classScopeDeclarations5620) + modifierList83 = self.modifierList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_modifierList.add(modifierList83.tree) + # Java.g:352:9: ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ( block )? ) | ident= IDENT formalParameterList ( throwsClause )? block -> ^( CONSTRUCTOR_DECL[$ident, \"CONSTRUCTOR_DECL\"] modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block ) ) | type classFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) ) + alt35 = 2 + LA35 = self.input.LA(1) + if LA35 == LESS_THAN or LA35 == VOID: + alt35 = 1 + elif LA35 == BOOLEAN or LA35 == BYTE or LA35 == CHAR or LA35 == DOUBLE or LA35 == FLOAT or LA35 == INT or LA35 == LONG or LA35 == SHORT: + LA35_2 = self.input.LA(2) + + if (self.synpred42_Java()) : + alt35 = 1 + elif (True) : + alt35 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 35, 2, self.input) + + raise nvae + + elif LA35 == IDENT: + LA35_3 = self.input.LA(2) + + if (self.synpred42_Java()) : + alt35 = 1 + elif (True) : + alt35 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 35, 3, self.input) + + raise nvae + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 35, 0, self.input) + + raise nvae + + if alt35 == 1: + # Java.g:352:13: ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ( block )? ) | ident= IDENT formalParameterList ( throwsClause )? block -> ^( CONSTRUCTOR_DECL[$ident, \"CONSTRUCTOR_DECL\"] modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block ) ) + pass + # Java.g:352:13: ( genericTypeParameterList )? + alt27 = 2 + LA27_0 = self.input.LA(1) + + if (LA27_0 == LESS_THAN) : + alt27 = 1 + if alt27 == 1: + # Java.g:0:0: genericTypeParameterList + pass + self._state.following.append(self.FOLLOW_genericTypeParameterList_in_classScopeDeclarations5634) + genericTypeParameterList84 = self.genericTypeParameterList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeParameterList.add(genericTypeParameterList84.tree) + + + + # Java.g:353:13: ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ( block )? ) | ident= IDENT formalParameterList ( throwsClause )? block -> ^( CONSTRUCTOR_DECL[$ident, \"CONSTRUCTOR_DECL\"] modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block ) ) + alt34 = 3 + LA34 = self.input.LA(1) + if LA34 == BOOLEAN or LA34 == BYTE or LA34 == CHAR or LA34 == DOUBLE or LA34 == FLOAT or LA34 == INT or LA34 == LONG or LA34 == SHORT: + alt34 = 1 + elif LA34 == IDENT: + LA34_2 = self.input.LA(2) + + if (LA34_2 == LPAREN) : + alt34 = 3 + elif (LA34_2 == DOT or LA34_2 == LBRACK or LA34_2 == LESS_THAN or LA34_2 == IDENT) : + alt34 = 1 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 34, 2, self.input) + + raise nvae + + elif LA34 == VOID: + alt34 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 34, 0, self.input) + + raise nvae + + if alt34 == 1: + # Java.g:353:17: type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) + pass + self._state.following.append(self.FOLLOW_type_in_classScopeDeclarations5653) + type85 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type85.tree) + IDENT86=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_classScopeDeclarations5655) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT86) + self._state.following.append(self.FOLLOW_formalParameterList_in_classScopeDeclarations5657) + formalParameterList87 = self.formalParameterList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_formalParameterList.add(formalParameterList87.tree) + # Java.g:353:48: ( arrayDeclaratorList )? + alt28 = 2 + LA28_0 = self.input.LA(1) + + if (LA28_0 == LBRACK) : + alt28 = 1 + if alt28 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_classScopeDeclarations5659) + arrayDeclaratorList88 = self.arrayDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arrayDeclaratorList.add(arrayDeclaratorList88.tree) + + + + # Java.g:353:69: ( throwsClause )? + alt29 = 2 + LA29_0 = self.input.LA(1) + + if (LA29_0 == THROWS) : + alt29 = 1 + if alt29 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_classScopeDeclarations5662) + throwsClause89 = self.throwsClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_throwsClause.add(throwsClause89.tree) + + + + # Java.g:353:83: ( block | SEMI ) + alt30 = 2 + LA30_0 = self.input.LA(1) + + if (LA30_0 == LCURLY) : + alt30 = 1 + elif (LA30_0 == SEMI) : + alt30 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 30, 0, self.input) + + raise nvae + + if alt30 == 1: + # Java.g:353:84: block + pass + self._state.following.append(self.FOLLOW_block_in_classScopeDeclarations5666) + block90 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_block.add(block90.tree) + + + elif alt30 == 2: + # Java.g:353:92: SEMI + pass + SEMI91=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_classScopeDeclarations5670) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI91) + + + + + # AST Rewrite + # elements: arrayDeclaratorList, type, modifierList, block, throwsClause, formalParameterList, IDENT, genericTypeParameterList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 354:17: -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? ) + # Java.g:354:21: ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(FUNCTION_METHOD_DECL, "FUNCTION_METHOD_DECL"), root_1) + + self._adaptor.addChild(root_1, stream_modifierList.nextTree()) + # Java.g:354:57: ( genericTypeParameterList )? + if stream_genericTypeParameterList.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeParameterList.nextTree()) + + + stream_genericTypeParameterList.reset(); + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + self._adaptor.addChild(root_1, stream_formalParameterList.nextTree()) + # Java.g:354:114: ( arrayDeclaratorList )? + if stream_arrayDeclaratorList.hasNext(): + self._adaptor.addChild(root_1, stream_arrayDeclaratorList.nextTree()) + + + stream_arrayDeclaratorList.reset(); + # Java.g:354:135: ( throwsClause )? + if stream_throwsClause.hasNext(): + self._adaptor.addChild(root_1, stream_throwsClause.nextTree()) + + + stream_throwsClause.reset(); + # Java.g:354:149: ( block )? + if stream_block.hasNext(): + self._adaptor.addChild(root_1, stream_block.nextTree()) + + + stream_block.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt34 == 2: + # Java.g:355:17: VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) + pass + VOID92=self.match(self.input, VOID, self.FOLLOW_VOID_in_classScopeDeclarations5732) + if self._state.backtracking == 0: + stream_VOID.add(VOID92) + IDENT93=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_classScopeDeclarations5734) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT93) + self._state.following.append(self.FOLLOW_formalParameterList_in_classScopeDeclarations5736) + formalParameterList94 = self.formalParameterList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_formalParameterList.add(formalParameterList94.tree) + # Java.g:355:48: ( throwsClause )? + alt31 = 2 + LA31_0 = self.input.LA(1) + + if (LA31_0 == THROWS) : + alt31 = 1 + if alt31 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_classScopeDeclarations5738) + throwsClause95 = self.throwsClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_throwsClause.add(throwsClause95.tree) + + + + # Java.g:355:62: ( block | SEMI ) + alt32 = 2 + LA32_0 = self.input.LA(1) + + if (LA32_0 == LCURLY) : + alt32 = 1 + elif (LA32_0 == SEMI) : + alt32 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 32, 0, self.input) + + raise nvae + + if alt32 == 1: + # Java.g:355:63: block + pass + self._state.following.append(self.FOLLOW_block_in_classScopeDeclarations5742) + block96 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_block.add(block96.tree) + + + elif alt32 == 2: + # Java.g:355:71: SEMI + pass + SEMI97=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_classScopeDeclarations5746) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI97) + + + + + # AST Rewrite + # elements: block, genericTypeParameterList, modifierList, formalParameterList, throwsClause, IDENT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 356:17: -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ( block )? ) + # Java.g:356:21: ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ( block )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VOID_METHOD_DECL, "VOID_METHOD_DECL"), root_1) + + self._adaptor.addChild(root_1, stream_modifierList.nextTree()) + # Java.g:356:53: ( genericTypeParameterList )? + if stream_genericTypeParameterList.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeParameterList.nextTree()) + + + stream_genericTypeParameterList.reset(); + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + self._adaptor.addChild(root_1, stream_formalParameterList.nextTree()) + # Java.g:356:105: ( throwsClause )? + if stream_throwsClause.hasNext(): + self._adaptor.addChild(root_1, stream_throwsClause.nextTree()) + + + stream_throwsClause.reset(); + # Java.g:356:119: ( block )? + if stream_block.hasNext(): + self._adaptor.addChild(root_1, stream_block.nextTree()) + + + stream_block.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt34 == 3: + # Java.g:357:17: ident= IDENT formalParameterList ( throwsClause )? block + pass + ident=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_classScopeDeclarations5805) + if self._state.backtracking == 0: + stream_IDENT.add(ident) + self._state.following.append(self.FOLLOW_formalParameterList_in_classScopeDeclarations5807) + formalParameterList98 = self.formalParameterList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_formalParameterList.add(formalParameterList98.tree) + # Java.g:357:49: ( throwsClause )? + alt33 = 2 + LA33_0 = self.input.LA(1) + + if (LA33_0 == THROWS) : + alt33 = 1 + if alt33 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_classScopeDeclarations5809) + throwsClause99 = self.throwsClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_throwsClause.add(throwsClause99.tree) + + + + self._state.following.append(self.FOLLOW_block_in_classScopeDeclarations5812) + block100 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_block.add(block100.tree) + + # AST Rewrite + # elements: formalParameterList, modifierList, block, throwsClause, genericTypeParameterList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 358:17: -> ^( CONSTRUCTOR_DECL[$ident, \"CONSTRUCTOR_DECL\"] modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block ) + # Java.g:358:21: ^( CONSTRUCTOR_DECL[$ident, \"CONSTRUCTOR_DECL\"] modifierList ( genericTypeParameterList )? formalParameterList ( throwsClause )? block ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(CONSTRUCTOR_DECL, ident, "CONSTRUCTOR_DECL"), root_1) + + self._adaptor.addChild(root_1, stream_modifierList.nextTree()) + # Java.g:358:81: ( genericTypeParameterList )? + if stream_genericTypeParameterList.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeParameterList.nextTree()) + + + stream_genericTypeParameterList.reset(); + self._adaptor.addChild(root_1, stream_formalParameterList.nextTree()) + # Java.g:358:127: ( throwsClause )? + if stream_throwsClause.hasNext(): + self._adaptor.addChild(root_1, stream_throwsClause.nextTree()) + + + stream_throwsClause.reset(); + self._adaptor.addChild(root_1, stream_block.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt35 == 2: + # Java.g:360:13: type classFieldDeclaratorList SEMI + pass + self._state.following.append(self.FOLLOW_type_in_classScopeDeclarations5876) + type101 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type101.tree) + self._state.following.append(self.FOLLOW_classFieldDeclaratorList_in_classScopeDeclarations5878) + classFieldDeclaratorList102 = self.classFieldDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classFieldDeclaratorList.add(classFieldDeclaratorList102.tree) + SEMI103=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_classScopeDeclarations5880) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI103) + + # AST Rewrite + # elements: type, modifierList, classFieldDeclaratorList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 361:13: -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) + # Java.g:361:17: ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VAR_DECLARATION, "VAR_DECLARATION"), root_1) + + self._adaptor.addChild(root_1, stream_modifierList.nextTree()) + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_classFieldDeclaratorList.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt36 == 4: + # Java.g:363:9: typeDeclaration + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_typeDeclaration_in_classScopeDeclarations5925) + typeDeclaration104 = self.typeDeclaration() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, typeDeclaration104.tree) + + + elif alt36 == 5: + # Java.g:364:9: SEMI + pass + root_0 = self._adaptor.nil() + + SEMI105=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_classScopeDeclarations5935) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 25, classScopeDeclarations_StartIndex, success) + + pass + return retval + + # $ANTLR end "classScopeDeclarations" + + class interfaceScopeDeclarations_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.interfaceScopeDeclarations_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "interfaceScopeDeclarations" + # Java.g:367:1: interfaceScopeDeclarations : ( modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ) | VOID IDENT formalParameterList ( throwsClause )? SEMI -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ) ) | type interfaceFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type interfaceFieldDeclaratorList ) ) | typeDeclaration | SEMI ); + def interfaceScopeDeclarations(self, ): + + retval = self.interfaceScopeDeclarations_return() + retval.start = self.input.LT(1) + interfaceScopeDeclarations_StartIndex = self.input.index() + root_0 = None + + IDENT109 = None + SEMI113 = None + VOID114 = None + IDENT115 = None + SEMI118 = None + SEMI121 = None + SEMI123 = None + modifierList106 = None + + genericTypeParameterList107 = None + + type108 = None + + formalParameterList110 = None + + arrayDeclaratorList111 = None + + throwsClause112 = None + + formalParameterList116 = None + + throwsClause117 = None + + type119 = None + + interfaceFieldDeclaratorList120 = None + + typeDeclaration122 = None + + + IDENT109_tree = None + SEMI113_tree = None + VOID114_tree = None + IDENT115_tree = None + SEMI118_tree = None + SEMI121_tree = None + SEMI123_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_VOID = RewriteRuleTokenStream(self._adaptor, "token VOID") + stream_SEMI = RewriteRuleTokenStream(self._adaptor, "token SEMI") + stream_arrayDeclaratorList = RewriteRuleSubtreeStream(self._adaptor, "rule arrayDeclaratorList") + stream_throwsClause = RewriteRuleSubtreeStream(self._adaptor, "rule throwsClause") + stream_modifierList = RewriteRuleSubtreeStream(self._adaptor, "rule modifierList") + stream_genericTypeParameterList = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeParameterList") + stream_interfaceFieldDeclaratorList = RewriteRuleSubtreeStream(self._adaptor, "rule interfaceFieldDeclaratorList") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + stream_formalParameterList = RewriteRuleSubtreeStream(self._adaptor, "rule formalParameterList") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 26): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:368:5: ( modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ) | VOID IDENT formalParameterList ( throwsClause )? SEMI -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ) ) | type interfaceFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type interfaceFieldDeclaratorList ) ) | typeDeclaration | SEMI ) + alt43 = 3 + alt43 = self.dfa43.predict(self.input) + if alt43 == 1: + # Java.g:368:9: modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ) | VOID IDENT formalParameterList ( throwsClause )? SEMI -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ) ) | type interfaceFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type interfaceFieldDeclaratorList ) ) + pass + self._state.following.append(self.FOLLOW_modifierList_in_interfaceScopeDeclarations5955) + modifierList106 = self.modifierList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_modifierList.add(modifierList106.tree) + # Java.g:369:9: ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ) | VOID IDENT formalParameterList ( throwsClause )? SEMI -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ) ) | type interfaceFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type interfaceFieldDeclaratorList ) ) + alt42 = 2 + LA42 = self.input.LA(1) + if LA42 == LESS_THAN or LA42 == VOID: + alt42 = 1 + elif LA42 == BOOLEAN or LA42 == BYTE or LA42 == CHAR or LA42 == DOUBLE or LA42 == FLOAT or LA42 == INT or LA42 == LONG or LA42 == SHORT: + LA42_2 = self.input.LA(2) + + if (self.synpred50_Java()) : + alt42 = 1 + elif (True) : + alt42 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 42, 2, self.input) + + raise nvae + + elif LA42 == IDENT: + LA42_3 = self.input.LA(2) + + if (self.synpred50_Java()) : + alt42 = 1 + elif (True) : + alt42 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 42, 3, self.input) + + raise nvae + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 42, 0, self.input) + + raise nvae + + if alt42 == 1: + # Java.g:369:13: ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ) | VOID IDENT formalParameterList ( throwsClause )? SEMI -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ) ) + pass + # Java.g:369:13: ( genericTypeParameterList )? + alt37 = 2 + LA37_0 = self.input.LA(1) + + if (LA37_0 == LESS_THAN) : + alt37 = 1 + if alt37 == 1: + # Java.g:0:0: genericTypeParameterList + pass + self._state.following.append(self.FOLLOW_genericTypeParameterList_in_interfaceScopeDeclarations5969) + genericTypeParameterList107 = self.genericTypeParameterList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeParameterList.add(genericTypeParameterList107.tree) + + + + # Java.g:370:13: ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ) | VOID IDENT formalParameterList ( throwsClause )? SEMI -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ) ) + alt41 = 2 + LA41_0 = self.input.LA(1) + + if (LA41_0 == BOOLEAN or LA41_0 == BYTE or LA41_0 == CHAR or LA41_0 == DOUBLE or LA41_0 == FLOAT or (INT <= LA41_0 <= LONG) or LA41_0 == SHORT or LA41_0 == IDENT) : + alt41 = 1 + elif (LA41_0 == VOID) : + alt41 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 41, 0, self.input) + + raise nvae + + if alt41 == 1: + # Java.g:370:17: type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI + pass + self._state.following.append(self.FOLLOW_type_in_interfaceScopeDeclarations5988) + type108 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type108.tree) + IDENT109=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_interfaceScopeDeclarations5990) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT109) + self._state.following.append(self.FOLLOW_formalParameterList_in_interfaceScopeDeclarations5992) + formalParameterList110 = self.formalParameterList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_formalParameterList.add(formalParameterList110.tree) + # Java.g:370:48: ( arrayDeclaratorList )? + alt38 = 2 + LA38_0 = self.input.LA(1) + + if (LA38_0 == LBRACK) : + alt38 = 1 + if alt38 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_interfaceScopeDeclarations5994) + arrayDeclaratorList111 = self.arrayDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arrayDeclaratorList.add(arrayDeclaratorList111.tree) + + + + # Java.g:370:69: ( throwsClause )? + alt39 = 2 + LA39_0 = self.input.LA(1) + + if (LA39_0 == THROWS) : + alt39 = 1 + if alt39 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_interfaceScopeDeclarations5997) + throwsClause112 = self.throwsClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_throwsClause.add(throwsClause112.tree) + + + + SEMI113=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_interfaceScopeDeclarations6000) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI113) + + # AST Rewrite + # elements: throwsClause, IDENT, arrayDeclaratorList, modifierList, genericTypeParameterList, formalParameterList, type + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 371:17: -> ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ) + # Java.g:371:21: ^( FUNCTION_METHOD_DECL modifierList ( genericTypeParameterList )? type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(FUNCTION_METHOD_DECL, "FUNCTION_METHOD_DECL"), root_1) + + self._adaptor.addChild(root_1, stream_modifierList.nextTree()) + # Java.g:371:57: ( genericTypeParameterList )? + if stream_genericTypeParameterList.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeParameterList.nextTree()) + + + stream_genericTypeParameterList.reset(); + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + self._adaptor.addChild(root_1, stream_formalParameterList.nextTree()) + # Java.g:371:114: ( arrayDeclaratorList )? + if stream_arrayDeclaratorList.hasNext(): + self._adaptor.addChild(root_1, stream_arrayDeclaratorList.nextTree()) + + + stream_arrayDeclaratorList.reset(); + # Java.g:371:135: ( throwsClause )? + if stream_throwsClause.hasNext(): + self._adaptor.addChild(root_1, stream_throwsClause.nextTree()) + + + stream_throwsClause.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt41 == 2: + # Java.g:372:17: VOID IDENT formalParameterList ( throwsClause )? SEMI + pass + VOID114=self.match(self.input, VOID, self.FOLLOW_VOID_in_interfaceScopeDeclarations6058) + if self._state.backtracking == 0: + stream_VOID.add(VOID114) + IDENT115=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_interfaceScopeDeclarations6060) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT115) + self._state.following.append(self.FOLLOW_formalParameterList_in_interfaceScopeDeclarations6062) + formalParameterList116 = self.formalParameterList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_formalParameterList.add(formalParameterList116.tree) + # Java.g:372:48: ( throwsClause )? + alt40 = 2 + LA40_0 = self.input.LA(1) + + if (LA40_0 == THROWS) : + alt40 = 1 + if alt40 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_interfaceScopeDeclarations6064) + throwsClause117 = self.throwsClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_throwsClause.add(throwsClause117.tree) + + + + SEMI118=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_interfaceScopeDeclarations6067) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI118) + + # AST Rewrite + # elements: throwsClause, formalParameterList, IDENT, genericTypeParameterList, modifierList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 373:17: -> ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ) + # Java.g:373:21: ^( VOID_METHOD_DECL modifierList ( genericTypeParameterList )? IDENT formalParameterList ( throwsClause )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VOID_METHOD_DECL, "VOID_METHOD_DECL"), root_1) + + self._adaptor.addChild(root_1, stream_modifierList.nextTree()) + # Java.g:373:53: ( genericTypeParameterList )? + if stream_genericTypeParameterList.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeParameterList.nextTree()) + + + stream_genericTypeParameterList.reset(); + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + self._adaptor.addChild(root_1, stream_formalParameterList.nextTree()) + # Java.g:373:105: ( throwsClause )? + if stream_throwsClause.hasNext(): + self._adaptor.addChild(root_1, stream_throwsClause.nextTree()) + + + stream_throwsClause.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt42 == 2: + # Java.g:375:13: type interfaceFieldDeclaratorList SEMI + pass + self._state.following.append(self.FOLLOW_type_in_interfaceScopeDeclarations6130) + type119 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type119.tree) + self._state.following.append(self.FOLLOW_interfaceFieldDeclaratorList_in_interfaceScopeDeclarations6132) + interfaceFieldDeclaratorList120 = self.interfaceFieldDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_interfaceFieldDeclaratorList.add(interfaceFieldDeclaratorList120.tree) + SEMI121=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_interfaceScopeDeclarations6134) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI121) + + # AST Rewrite + # elements: interfaceFieldDeclaratorList, type, modifierList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 376:13: -> ^( VAR_DECLARATION modifierList type interfaceFieldDeclaratorList ) + # Java.g:376:17: ^( VAR_DECLARATION modifierList type interfaceFieldDeclaratorList ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VAR_DECLARATION, "VAR_DECLARATION"), root_1) + + self._adaptor.addChild(root_1, stream_modifierList.nextTree()) + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_interfaceFieldDeclaratorList.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt43 == 2: + # Java.g:378:9: typeDeclaration + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_typeDeclaration_in_interfaceScopeDeclarations6179) + typeDeclaration122 = self.typeDeclaration() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, typeDeclaration122.tree) + + + elif alt43 == 3: + # Java.g:379:9: SEMI + pass + root_0 = self._adaptor.nil() + + SEMI123=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_interfaceScopeDeclarations6189) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 26, interfaceScopeDeclarations_StartIndex, success) + + pass + return retval + + # $ANTLR end "interfaceScopeDeclarations" + + class classFieldDeclaratorList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.classFieldDeclaratorList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "classFieldDeclaratorList" + # Java.g:382:1: classFieldDeclaratorList : classFieldDeclarator ( COMMA classFieldDeclarator )* -> ^( VAR_DECLARATOR_LIST ( classFieldDeclarator )+ ) ; + def classFieldDeclaratorList(self, ): + + retval = self.classFieldDeclaratorList_return() + retval.start = self.input.LT(1) + classFieldDeclaratorList_StartIndex = self.input.index() + root_0 = None + + COMMA125 = None + classFieldDeclarator124 = None + + classFieldDeclarator126 = None + + + COMMA125_tree = None + stream_COMMA = RewriteRuleTokenStream(self._adaptor, "token COMMA") + stream_classFieldDeclarator = RewriteRuleSubtreeStream(self._adaptor, "rule classFieldDeclarator") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 27): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:383:5: ( classFieldDeclarator ( COMMA classFieldDeclarator )* -> ^( VAR_DECLARATOR_LIST ( classFieldDeclarator )+ ) ) + # Java.g:383:9: classFieldDeclarator ( COMMA classFieldDeclarator )* + pass + self._state.following.append(self.FOLLOW_classFieldDeclarator_in_classFieldDeclaratorList6209) + classFieldDeclarator124 = self.classFieldDeclarator() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classFieldDeclarator.add(classFieldDeclarator124.tree) + # Java.g:383:30: ( COMMA classFieldDeclarator )* + while True: #loop44 + alt44 = 2 + LA44_0 = self.input.LA(1) + + if (LA44_0 == COMMA) : + alt44 = 1 + + + if alt44 == 1: + # Java.g:383:31: COMMA classFieldDeclarator + pass + COMMA125=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_classFieldDeclaratorList6212) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA125) + self._state.following.append(self.FOLLOW_classFieldDeclarator_in_classFieldDeclaratorList6214) + classFieldDeclarator126 = self.classFieldDeclarator() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classFieldDeclarator.add(classFieldDeclarator126.tree) + + + else: + break #loop44 + + # AST Rewrite + # elements: classFieldDeclarator + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 384:9: -> ^( VAR_DECLARATOR_LIST ( classFieldDeclarator )+ ) + # Java.g:384:13: ^( VAR_DECLARATOR_LIST ( classFieldDeclarator )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VAR_DECLARATOR_LIST, "VAR_DECLARATOR_LIST"), root_1) + + # Java.g:384:35: ( classFieldDeclarator )+ + if not (stream_classFieldDeclarator.hasNext()): + raise RewriteEarlyExitException() + + while stream_classFieldDeclarator.hasNext(): + self._adaptor.addChild(root_1, stream_classFieldDeclarator.nextTree()) + + + stream_classFieldDeclarator.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 27, classFieldDeclaratorList_StartIndex, success) + + pass + return retval + + # $ANTLR end "classFieldDeclaratorList" + + class classFieldDeclarator_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.classFieldDeclarator_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "classFieldDeclarator" + # Java.g:387:1: classFieldDeclarator : variableDeclaratorId ( ASSIGN variableInitializer )? -> ^( VAR_DECLARATOR variableDeclaratorId ( variableInitializer )? ) ; + def classFieldDeclarator(self, ): + + retval = self.classFieldDeclarator_return() + retval.start = self.input.LT(1) + classFieldDeclarator_StartIndex = self.input.index() + root_0 = None + + ASSIGN128 = None + variableDeclaratorId127 = None + + variableInitializer129 = None + + + ASSIGN128_tree = None + stream_ASSIGN = RewriteRuleTokenStream(self._adaptor, "token ASSIGN") + stream_variableDeclaratorId = RewriteRuleSubtreeStream(self._adaptor, "rule variableDeclaratorId") + stream_variableInitializer = RewriteRuleSubtreeStream(self._adaptor, "rule variableInitializer") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 28): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:388:5: ( variableDeclaratorId ( ASSIGN variableInitializer )? -> ^( VAR_DECLARATOR variableDeclaratorId ( variableInitializer )? ) ) + # Java.g:388:9: variableDeclaratorId ( ASSIGN variableInitializer )? + pass + self._state.following.append(self.FOLLOW_variableDeclaratorId_in_classFieldDeclarator6253) + variableDeclaratorId127 = self.variableDeclaratorId() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_variableDeclaratorId.add(variableDeclaratorId127.tree) + # Java.g:388:30: ( ASSIGN variableInitializer )? + alt45 = 2 + LA45_0 = self.input.LA(1) + + if (LA45_0 == ASSIGN) : + alt45 = 1 + if alt45 == 1: + # Java.g:388:31: ASSIGN variableInitializer + pass + ASSIGN128=self.match(self.input, ASSIGN, self.FOLLOW_ASSIGN_in_classFieldDeclarator6256) + if self._state.backtracking == 0: + stream_ASSIGN.add(ASSIGN128) + self._state.following.append(self.FOLLOW_variableInitializer_in_classFieldDeclarator6258) + variableInitializer129 = self.variableInitializer() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_variableInitializer.add(variableInitializer129.tree) + + + + + # AST Rewrite + # elements: variableDeclaratorId, variableInitializer + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 389:9: -> ^( VAR_DECLARATOR variableDeclaratorId ( variableInitializer )? ) + # Java.g:389:13: ^( VAR_DECLARATOR variableDeclaratorId ( variableInitializer )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VAR_DECLARATOR, "VAR_DECLARATOR"), root_1) + + self._adaptor.addChild(root_1, stream_variableDeclaratorId.nextTree()) + # Java.g:389:51: ( variableInitializer )? + if stream_variableInitializer.hasNext(): + self._adaptor.addChild(root_1, stream_variableInitializer.nextTree()) + + + stream_variableInitializer.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 28, classFieldDeclarator_StartIndex, success) + + pass + return retval + + # $ANTLR end "classFieldDeclarator" + + class interfaceFieldDeclaratorList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.interfaceFieldDeclaratorList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "interfaceFieldDeclaratorList" + # Java.g:392:1: interfaceFieldDeclaratorList : interfaceFieldDeclarator ( COMMA interfaceFieldDeclarator )* -> ^( VAR_DECLARATOR_LIST ( interfaceFieldDeclarator )+ ) ; + def interfaceFieldDeclaratorList(self, ): + + retval = self.interfaceFieldDeclaratorList_return() + retval.start = self.input.LT(1) + interfaceFieldDeclaratorList_StartIndex = self.input.index() + root_0 = None + + COMMA131 = None + interfaceFieldDeclarator130 = None + + interfaceFieldDeclarator132 = None + + + COMMA131_tree = None + stream_COMMA = RewriteRuleTokenStream(self._adaptor, "token COMMA") + stream_interfaceFieldDeclarator = RewriteRuleSubtreeStream(self._adaptor, "rule interfaceFieldDeclarator") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 29): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:393:5: ( interfaceFieldDeclarator ( COMMA interfaceFieldDeclarator )* -> ^( VAR_DECLARATOR_LIST ( interfaceFieldDeclarator )+ ) ) + # Java.g:393:9: interfaceFieldDeclarator ( COMMA interfaceFieldDeclarator )* + pass + self._state.following.append(self.FOLLOW_interfaceFieldDeclarator_in_interfaceFieldDeclaratorList6299) + interfaceFieldDeclarator130 = self.interfaceFieldDeclarator() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_interfaceFieldDeclarator.add(interfaceFieldDeclarator130.tree) + # Java.g:393:34: ( COMMA interfaceFieldDeclarator )* + while True: #loop46 + alt46 = 2 + LA46_0 = self.input.LA(1) + + if (LA46_0 == COMMA) : + alt46 = 1 + + + if alt46 == 1: + # Java.g:393:35: COMMA interfaceFieldDeclarator + pass + COMMA131=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_interfaceFieldDeclaratorList6302) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA131) + self._state.following.append(self.FOLLOW_interfaceFieldDeclarator_in_interfaceFieldDeclaratorList6304) + interfaceFieldDeclarator132 = self.interfaceFieldDeclarator() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_interfaceFieldDeclarator.add(interfaceFieldDeclarator132.tree) + + + else: + break #loop46 + + # AST Rewrite + # elements: interfaceFieldDeclarator + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 394:9: -> ^( VAR_DECLARATOR_LIST ( interfaceFieldDeclarator )+ ) + # Java.g:394:13: ^( VAR_DECLARATOR_LIST ( interfaceFieldDeclarator )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VAR_DECLARATOR_LIST, "VAR_DECLARATOR_LIST"), root_1) + + # Java.g:394:35: ( interfaceFieldDeclarator )+ + if not (stream_interfaceFieldDeclarator.hasNext()): + raise RewriteEarlyExitException() + + while stream_interfaceFieldDeclarator.hasNext(): + self._adaptor.addChild(root_1, stream_interfaceFieldDeclarator.nextTree()) + + + stream_interfaceFieldDeclarator.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 29, interfaceFieldDeclaratorList_StartIndex, success) + + pass + return retval + + # $ANTLR end "interfaceFieldDeclaratorList" + + class interfaceFieldDeclarator_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.interfaceFieldDeclarator_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "interfaceFieldDeclarator" + # Java.g:397:1: interfaceFieldDeclarator : variableDeclaratorId ASSIGN variableInitializer -> ^( VAR_DECLARATOR variableDeclaratorId variableInitializer ) ; + def interfaceFieldDeclarator(self, ): + + retval = self.interfaceFieldDeclarator_return() + retval.start = self.input.LT(1) + interfaceFieldDeclarator_StartIndex = self.input.index() + root_0 = None + + ASSIGN134 = None + variableDeclaratorId133 = None + + variableInitializer135 = None + + + ASSIGN134_tree = None + stream_ASSIGN = RewriteRuleTokenStream(self._adaptor, "token ASSIGN") + stream_variableDeclaratorId = RewriteRuleSubtreeStream(self._adaptor, "rule variableDeclaratorId") + stream_variableInitializer = RewriteRuleSubtreeStream(self._adaptor, "rule variableInitializer") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 30): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:398:5: ( variableDeclaratorId ASSIGN variableInitializer -> ^( VAR_DECLARATOR variableDeclaratorId variableInitializer ) ) + # Java.g:398:9: variableDeclaratorId ASSIGN variableInitializer + pass + self._state.following.append(self.FOLLOW_variableDeclaratorId_in_interfaceFieldDeclarator6343) + variableDeclaratorId133 = self.variableDeclaratorId() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_variableDeclaratorId.add(variableDeclaratorId133.tree) + ASSIGN134=self.match(self.input, ASSIGN, self.FOLLOW_ASSIGN_in_interfaceFieldDeclarator6345) + if self._state.backtracking == 0: + stream_ASSIGN.add(ASSIGN134) + self._state.following.append(self.FOLLOW_variableInitializer_in_interfaceFieldDeclarator6347) + variableInitializer135 = self.variableInitializer() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_variableInitializer.add(variableInitializer135.tree) + + # AST Rewrite + # elements: variableInitializer, variableDeclaratorId + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 399:9: -> ^( VAR_DECLARATOR variableDeclaratorId variableInitializer ) + # Java.g:399:13: ^( VAR_DECLARATOR variableDeclaratorId variableInitializer ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VAR_DECLARATOR, "VAR_DECLARATOR"), root_1) + + self._adaptor.addChild(root_1, stream_variableDeclaratorId.nextTree()) + self._adaptor.addChild(root_1, stream_variableInitializer.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 30, interfaceFieldDeclarator_StartIndex, success) + + pass + return retval + + # $ANTLR end "interfaceFieldDeclarator" + + class variableDeclaratorId_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.variableDeclaratorId_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "variableDeclaratorId" + # Java.g:402:1: variableDeclaratorId : IDENT ( arrayDeclaratorList )? ; + def variableDeclaratorId(self, ): + + retval = self.variableDeclaratorId_return() + retval.start = self.input.LT(1) + variableDeclaratorId_StartIndex = self.input.index() + root_0 = None + + IDENT136 = None + arrayDeclaratorList137 = None + + + IDENT136_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 31): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:403:5: ( IDENT ( arrayDeclaratorList )? ) + # Java.g:403:9: IDENT ( arrayDeclaratorList )? + pass + root_0 = self._adaptor.nil() + + IDENT136=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_variableDeclaratorId6385) + if self._state.backtracking == 0: + + IDENT136_tree = self._adaptor.createWithPayload(IDENT136) + root_0 = self._adaptor.becomeRoot(IDENT136_tree, root_0) + + # Java.g:403:16: ( arrayDeclaratorList )? + alt47 = 2 + LA47_0 = self.input.LA(1) + + if (LA47_0 == LBRACK) : + alt47 = 1 + if alt47 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_variableDeclaratorId6388) + arrayDeclaratorList137 = self.arrayDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, arrayDeclaratorList137.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 31, variableDeclaratorId_StartIndex, success) + + pass + return retval + + # $ANTLR end "variableDeclaratorId" + + class variableInitializer_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.variableInitializer_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "variableInitializer" + # Java.g:406:1: variableInitializer : ( arrayInitializer | expression ); + def variableInitializer(self, ): + + retval = self.variableInitializer_return() + retval.start = self.input.LT(1) + variableInitializer_StartIndex = self.input.index() + root_0 = None + + arrayInitializer138 = None + + expression139 = None + + + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 32): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:407:5: ( arrayInitializer | expression ) + alt48 = 2 + LA48_0 = self.input.LA(1) + + if (LA48_0 == LCURLY) : + alt48 = 1 + elif (LA48_0 == DEC or LA48_0 == INC or LA48_0 == LESS_THAN or LA48_0 == LOGICAL_NOT or (LPAREN <= LA48_0 <= MINUS) or LA48_0 == NOT or LA48_0 == PLUS or LA48_0 == BOOLEAN or LA48_0 == BYTE or LA48_0 == CHAR or LA48_0 == DOUBLE or LA48_0 == FALSE or LA48_0 == FLOAT or (INT <= LA48_0 <= LONG) or (NEW <= LA48_0 <= NULL) or LA48_0 == SHORT or LA48_0 == SUPER or LA48_0 == THIS or LA48_0 == TRUE or LA48_0 == VOID or (IDENT <= LA48_0 <= STRING_LITERAL)) : + alt48 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 48, 0, self.input) + + raise nvae + + if alt48 == 1: + # Java.g:407:9: arrayInitializer + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_arrayInitializer_in_variableInitializer6408) + arrayInitializer138 = self.arrayInitializer() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, arrayInitializer138.tree) + + + elif alt48 == 2: + # Java.g:408:9: expression + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_expression_in_variableInitializer6418) + expression139 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, expression139.tree) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 32, variableInitializer_StartIndex, success) + + pass + return retval + + # $ANTLR end "variableInitializer" + + class arrayDeclarator_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.arrayDeclarator_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "arrayDeclarator" + # Java.g:411:1: arrayDeclarator : LBRACK RBRACK -> ^( ARRAY_DECLARATOR ) ; + def arrayDeclarator(self, ): + + retval = self.arrayDeclarator_return() + retval.start = self.input.LT(1) + arrayDeclarator_StartIndex = self.input.index() + root_0 = None + + LBRACK140 = None + RBRACK141 = None + + LBRACK140_tree = None + RBRACK141_tree = None + stream_RBRACK = RewriteRuleTokenStream(self._adaptor, "token RBRACK") + stream_LBRACK = RewriteRuleTokenStream(self._adaptor, "token LBRACK") + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 33): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:412:5: ( LBRACK RBRACK -> ^( ARRAY_DECLARATOR ) ) + # Java.g:412:9: LBRACK RBRACK + pass + LBRACK140=self.match(self.input, LBRACK, self.FOLLOW_LBRACK_in_arrayDeclarator6437) + if self._state.backtracking == 0: + stream_LBRACK.add(LBRACK140) + RBRACK141=self.match(self.input, RBRACK, self.FOLLOW_RBRACK_in_arrayDeclarator6439) + if self._state.backtracking == 0: + stream_RBRACK.add(RBRACK141) + + # AST Rewrite + # elements: + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 413:9: -> ^( ARRAY_DECLARATOR ) + # Java.g:413:13: ^( ARRAY_DECLARATOR ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(ARRAY_DECLARATOR, "ARRAY_DECLARATOR"), root_1) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 33, arrayDeclarator_StartIndex, success) + + pass + return retval + + # $ANTLR end "arrayDeclarator" + + class arrayDeclaratorList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.arrayDeclaratorList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "arrayDeclaratorList" + # Java.g:416:1: arrayDeclaratorList : ( arrayDeclarator )+ -> ^( ARRAY_DECLARATOR_LIST ( arrayDeclarator )+ ) ; + def arrayDeclaratorList(self, ): + + retval = self.arrayDeclaratorList_return() + retval.start = self.input.LT(1) + arrayDeclaratorList_StartIndex = self.input.index() + root_0 = None + + arrayDeclarator142 = None + + + stream_arrayDeclarator = RewriteRuleSubtreeStream(self._adaptor, "rule arrayDeclarator") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 34): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:417:5: ( ( arrayDeclarator )+ -> ^( ARRAY_DECLARATOR_LIST ( arrayDeclarator )+ ) ) + # Java.g:417:9: ( arrayDeclarator )+ + pass + # Java.g:417:9: ( arrayDeclarator )+ + cnt49 = 0 + while True: #loop49 + alt49 = 2 + LA49_0 = self.input.LA(1) + + if (LA49_0 == LBRACK) : + LA49_2 = self.input.LA(2) + + if (self.synpred58_Java()) : + alt49 = 1 + + + + + if alt49 == 1: + # Java.g:0:0: arrayDeclarator + pass + self._state.following.append(self.FOLLOW_arrayDeclarator_in_arrayDeclaratorList6473) + arrayDeclarator142 = self.arrayDeclarator() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arrayDeclarator.add(arrayDeclarator142.tree) + + + else: + if cnt49 >= 1: + break #loop49 + + if self._state.backtracking > 0: + raise BacktrackingFailed + + eee = EarlyExitException(49, self.input) + raise eee + + cnt49 += 1 + + # AST Rewrite + # elements: arrayDeclarator + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 418:9: -> ^( ARRAY_DECLARATOR_LIST ( arrayDeclarator )+ ) + # Java.g:418:13: ^( ARRAY_DECLARATOR_LIST ( arrayDeclarator )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(ARRAY_DECLARATOR_LIST, "ARRAY_DECLARATOR_LIST"), root_1) + + # Java.g:418:37: ( arrayDeclarator )+ + if not (stream_arrayDeclarator.hasNext()): + raise RewriteEarlyExitException() + + while stream_arrayDeclarator.hasNext(): + self._adaptor.addChild(root_1, stream_arrayDeclarator.nextTree()) + + + stream_arrayDeclarator.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 34, arrayDeclaratorList_StartIndex, success) + + pass + return retval + + # $ANTLR end "arrayDeclaratorList" + + class arrayInitializer_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.arrayInitializer_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "arrayInitializer" + # Java.g:421:1: arrayInitializer : LCURLY ( variableInitializer ( COMMA variableInitializer )* ( COMMA )? )? RCURLY -> ^( ARRAY_INITIALIZER[$LCURLY, \"ARRAY_INITIALIZER\"] ( variableInitializer )* ) ; + def arrayInitializer(self, ): + + retval = self.arrayInitializer_return() + retval.start = self.input.LT(1) + arrayInitializer_StartIndex = self.input.index() + root_0 = None + + LCURLY143 = None + COMMA145 = None + COMMA147 = None + RCURLY148 = None + variableInitializer144 = None + + variableInitializer146 = None + + + LCURLY143_tree = None + COMMA145_tree = None + COMMA147_tree = None + RCURLY148_tree = None + stream_LCURLY = RewriteRuleTokenStream(self._adaptor, "token LCURLY") + stream_COMMA = RewriteRuleTokenStream(self._adaptor, "token COMMA") + stream_RCURLY = RewriteRuleTokenStream(self._adaptor, "token RCURLY") + stream_variableInitializer = RewriteRuleSubtreeStream(self._adaptor, "rule variableInitializer") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 35): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:422:5: ( LCURLY ( variableInitializer ( COMMA variableInitializer )* ( COMMA )? )? RCURLY -> ^( ARRAY_INITIALIZER[$LCURLY, \"ARRAY_INITIALIZER\"] ( variableInitializer )* ) ) + # Java.g:422:9: LCURLY ( variableInitializer ( COMMA variableInitializer )* ( COMMA )? )? RCURLY + pass + LCURLY143=self.match(self.input, LCURLY, self.FOLLOW_LCURLY_in_arrayInitializer6511) + if self._state.backtracking == 0: + stream_LCURLY.add(LCURLY143) + # Java.g:422:16: ( variableInitializer ( COMMA variableInitializer )* ( COMMA )? )? + alt52 = 2 + LA52_0 = self.input.LA(1) + + if (LA52_0 == DEC or LA52_0 == INC or LA52_0 == LCURLY or LA52_0 == LESS_THAN or LA52_0 == LOGICAL_NOT or (LPAREN <= LA52_0 <= MINUS) or LA52_0 == NOT or LA52_0 == PLUS or LA52_0 == BOOLEAN or LA52_0 == BYTE or LA52_0 == CHAR or LA52_0 == DOUBLE or LA52_0 == FALSE or LA52_0 == FLOAT or (INT <= LA52_0 <= LONG) or (NEW <= LA52_0 <= NULL) or LA52_0 == SHORT or LA52_0 == SUPER or LA52_0 == THIS or LA52_0 == TRUE or LA52_0 == VOID or (IDENT <= LA52_0 <= STRING_LITERAL)) : + alt52 = 1 + if alt52 == 1: + # Java.g:422:17: variableInitializer ( COMMA variableInitializer )* ( COMMA )? + pass + self._state.following.append(self.FOLLOW_variableInitializer_in_arrayInitializer6514) + variableInitializer144 = self.variableInitializer() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_variableInitializer.add(variableInitializer144.tree) + # Java.g:422:37: ( COMMA variableInitializer )* + while True: #loop50 + alt50 = 2 + LA50_0 = self.input.LA(1) + + if (LA50_0 == COMMA) : + LA50_1 = self.input.LA(2) + + if (LA50_1 == DEC or LA50_1 == INC or LA50_1 == LCURLY or LA50_1 == LESS_THAN or LA50_1 == LOGICAL_NOT or (LPAREN <= LA50_1 <= MINUS) or LA50_1 == NOT or LA50_1 == PLUS or LA50_1 == BOOLEAN or LA50_1 == BYTE or LA50_1 == CHAR or LA50_1 == DOUBLE or LA50_1 == FALSE or LA50_1 == FLOAT or (INT <= LA50_1 <= LONG) or (NEW <= LA50_1 <= NULL) or LA50_1 == SHORT or LA50_1 == SUPER or LA50_1 == THIS or LA50_1 == TRUE or LA50_1 == VOID or (IDENT <= LA50_1 <= STRING_LITERAL)) : + alt50 = 1 + + + + + if alt50 == 1: + # Java.g:422:38: COMMA variableInitializer + pass + COMMA145=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_arrayInitializer6517) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA145) + self._state.following.append(self.FOLLOW_variableInitializer_in_arrayInitializer6519) + variableInitializer146 = self.variableInitializer() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_variableInitializer.add(variableInitializer146.tree) + + + else: + break #loop50 + # Java.g:422:66: ( COMMA )? + alt51 = 2 + LA51_0 = self.input.LA(1) + + if (LA51_0 == COMMA) : + alt51 = 1 + if alt51 == 1: + # Java.g:0:0: COMMA + pass + COMMA147=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_arrayInitializer6523) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA147) + + + + + + + RCURLY148=self.match(self.input, RCURLY, self.FOLLOW_RCURLY_in_arrayInitializer6528) + if self._state.backtracking == 0: + stream_RCURLY.add(RCURLY148) + + # AST Rewrite + # elements: variableInitializer + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 423:9: -> ^( ARRAY_INITIALIZER[$LCURLY, \"ARRAY_INITIALIZER\"] ( variableInitializer )* ) + # Java.g:423:13: ^( ARRAY_INITIALIZER[$LCURLY, \"ARRAY_INITIALIZER\"] ( variableInitializer )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(ARRAY_INITIALIZER, LCURLY143, "ARRAY_INITIALIZER"), root_1) + + # Java.g:423:63: ( variableInitializer )* + while stream_variableInitializer.hasNext(): + self._adaptor.addChild(root_1, stream_variableInitializer.nextTree()) + + + stream_variableInitializer.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 35, arrayInitializer_StartIndex, success) + + pass + return retval + + # $ANTLR end "arrayInitializer" + + class throwsClause_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.throwsClause_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "throwsClause" + # Java.g:426:1: throwsClause : THROWS qualifiedIdentList -> ^( THROWS_CLAUSE[$THROWS, \"THROWS_CLAUSE\"] qualifiedIdentList ) ; + def throwsClause(self, ): + + retval = self.throwsClause_return() + retval.start = self.input.LT(1) + throwsClause_StartIndex = self.input.index() + root_0 = None + + THROWS149 = None + qualifiedIdentList150 = None + + + THROWS149_tree = None + stream_THROWS = RewriteRuleTokenStream(self._adaptor, "token THROWS") + stream_qualifiedIdentList = RewriteRuleSubtreeStream(self._adaptor, "rule qualifiedIdentList") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 36): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:427:5: ( THROWS qualifiedIdentList -> ^( THROWS_CLAUSE[$THROWS, \"THROWS_CLAUSE\"] qualifiedIdentList ) ) + # Java.g:427:9: THROWS qualifiedIdentList + pass + THROWS149=self.match(self.input, THROWS, self.FOLLOW_THROWS_in_throwsClause6566) + if self._state.backtracking == 0: + stream_THROWS.add(THROWS149) + self._state.following.append(self.FOLLOW_qualifiedIdentList_in_throwsClause6568) + qualifiedIdentList150 = self.qualifiedIdentList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_qualifiedIdentList.add(qualifiedIdentList150.tree) + + # AST Rewrite + # elements: qualifiedIdentList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 428:9: -> ^( THROWS_CLAUSE[$THROWS, \"THROWS_CLAUSE\"] qualifiedIdentList ) + # Java.g:428:13: ^( THROWS_CLAUSE[$THROWS, \"THROWS_CLAUSE\"] qualifiedIdentList ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(THROWS_CLAUSE, THROWS149, "THROWS_CLAUSE"), root_1) + + self._adaptor.addChild(root_1, stream_qualifiedIdentList.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 36, throwsClause_StartIndex, success) + + pass + return retval + + # $ANTLR end "throwsClause" + + class modifierList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.modifierList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "modifierList" + # Java.g:431:1: modifierList : ( modifier )* -> ^( MODIFIER_LIST ( modifier )* ) ; + def modifierList(self, ): + + retval = self.modifierList_return() + retval.start = self.input.LT(1) + modifierList_StartIndex = self.input.index() + root_0 = None + + modifier151 = None + + + stream_modifier = RewriteRuleSubtreeStream(self._adaptor, "rule modifier") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 37): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:432:5: ( ( modifier )* -> ^( MODIFIER_LIST ( modifier )* ) ) + # Java.g:432:9: ( modifier )* + pass + # Java.g:432:9: ( modifier )* + while True: #loop53 + alt53 = 2 + LA53_0 = self.input.LA(1) + + if (LA53_0 == AT) : + LA53_2 = self.input.LA(2) + + if (LA53_2 == IDENT) : + alt53 = 1 + + + elif (LA53_0 == ABSTRACT or LA53_0 == FINAL or LA53_0 == NATIVE or (PRIVATE <= LA53_0 <= PUBLIC) or (STATIC <= LA53_0 <= STRICTFP) or LA53_0 == SYNCHRONIZED or LA53_0 == TRANSIENT or LA53_0 == VOLATILE) : + alt53 = 1 + + + if alt53 == 1: + # Java.g:0:0: modifier + pass + self._state.following.append(self.FOLLOW_modifier_in_modifierList6605) + modifier151 = self.modifier() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_modifier.add(modifier151.tree) + + + else: + break #loop53 + + # AST Rewrite + # elements: modifier + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 433:9: -> ^( MODIFIER_LIST ( modifier )* ) + # Java.g:433:13: ^( MODIFIER_LIST ( modifier )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(MODIFIER_LIST, "MODIFIER_LIST"), root_1) + + # Java.g:433:29: ( modifier )* + while stream_modifier.hasNext(): + self._adaptor.addChild(root_1, stream_modifier.nextTree()) + + + stream_modifier.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 37, modifierList_StartIndex, success) + + pass + return retval + + # $ANTLR end "modifierList" + + class modifier_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.modifier_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "modifier" + # Java.g:436:1: modifier : ( PUBLIC | PROTECTED | PRIVATE | STATIC | ABSTRACT | NATIVE | SYNCHRONIZED | TRANSIENT | VOLATILE | STRICTFP | localModifier ); + def modifier(self, ): + + retval = self.modifier_return() + retval.start = self.input.LT(1) + modifier_StartIndex = self.input.index() + root_0 = None + + PUBLIC152 = None + PROTECTED153 = None + PRIVATE154 = None + STATIC155 = None + ABSTRACT156 = None + NATIVE157 = None + SYNCHRONIZED158 = None + TRANSIENT159 = None + VOLATILE160 = None + STRICTFP161 = None + localModifier162 = None + + + PUBLIC152_tree = None + PROTECTED153_tree = None + PRIVATE154_tree = None + STATIC155_tree = None + ABSTRACT156_tree = None + NATIVE157_tree = None + SYNCHRONIZED158_tree = None + TRANSIENT159_tree = None + VOLATILE160_tree = None + STRICTFP161_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 38): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:437:5: ( PUBLIC | PROTECTED | PRIVATE | STATIC | ABSTRACT | NATIVE | SYNCHRONIZED | TRANSIENT | VOLATILE | STRICTFP | localModifier ) + alt54 = 11 + LA54 = self.input.LA(1) + if LA54 == PUBLIC: + alt54 = 1 + elif LA54 == PROTECTED: + alt54 = 2 + elif LA54 == PRIVATE: + alt54 = 3 + elif LA54 == STATIC: + alt54 = 4 + elif LA54 == ABSTRACT: + alt54 = 5 + elif LA54 == NATIVE: + alt54 = 6 + elif LA54 == SYNCHRONIZED: + alt54 = 7 + elif LA54 == TRANSIENT: + alt54 = 8 + elif LA54 == VOLATILE: + alt54 = 9 + elif LA54 == STRICTFP: + alt54 = 10 + elif LA54 == AT or LA54 == FINAL: + alt54 = 11 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 54, 0, self.input) + + raise nvae + + if alt54 == 1: + # Java.g:437:9: PUBLIC + pass + root_0 = self._adaptor.nil() + + PUBLIC152=self.match(self.input, PUBLIC, self.FOLLOW_PUBLIC_in_modifier6643) + if self._state.backtracking == 0: + + PUBLIC152_tree = self._adaptor.createWithPayload(PUBLIC152) + self._adaptor.addChild(root_0, PUBLIC152_tree) + + + + elif alt54 == 2: + # Java.g:438:9: PROTECTED + pass + root_0 = self._adaptor.nil() + + PROTECTED153=self.match(self.input, PROTECTED, self.FOLLOW_PROTECTED_in_modifier6653) + if self._state.backtracking == 0: + + PROTECTED153_tree = self._adaptor.createWithPayload(PROTECTED153) + self._adaptor.addChild(root_0, PROTECTED153_tree) + + + + elif alt54 == 3: + # Java.g:439:9: PRIVATE + pass + root_0 = self._adaptor.nil() + + PRIVATE154=self.match(self.input, PRIVATE, self.FOLLOW_PRIVATE_in_modifier6663) + if self._state.backtracking == 0: + + PRIVATE154_tree = self._adaptor.createWithPayload(PRIVATE154) + self._adaptor.addChild(root_0, PRIVATE154_tree) + + + + elif alt54 == 4: + # Java.g:440:9: STATIC + pass + root_0 = self._adaptor.nil() + + STATIC155=self.match(self.input, STATIC, self.FOLLOW_STATIC_in_modifier6673) + if self._state.backtracking == 0: + + STATIC155_tree = self._adaptor.createWithPayload(STATIC155) + self._adaptor.addChild(root_0, STATIC155_tree) + + + + elif alt54 == 5: + # Java.g:441:9: ABSTRACT + pass + root_0 = self._adaptor.nil() + + ABSTRACT156=self.match(self.input, ABSTRACT, self.FOLLOW_ABSTRACT_in_modifier6683) + if self._state.backtracking == 0: + + ABSTRACT156_tree = self._adaptor.createWithPayload(ABSTRACT156) + self._adaptor.addChild(root_0, ABSTRACT156_tree) + + + + elif alt54 == 6: + # Java.g:442:9: NATIVE + pass + root_0 = self._adaptor.nil() + + NATIVE157=self.match(self.input, NATIVE, self.FOLLOW_NATIVE_in_modifier6693) + if self._state.backtracking == 0: + + NATIVE157_tree = self._adaptor.createWithPayload(NATIVE157) + self._adaptor.addChild(root_0, NATIVE157_tree) + + + + elif alt54 == 7: + # Java.g:443:9: SYNCHRONIZED + pass + root_0 = self._adaptor.nil() + + SYNCHRONIZED158=self.match(self.input, SYNCHRONIZED, self.FOLLOW_SYNCHRONIZED_in_modifier6703) + if self._state.backtracking == 0: + + SYNCHRONIZED158_tree = self._adaptor.createWithPayload(SYNCHRONIZED158) + self._adaptor.addChild(root_0, SYNCHRONIZED158_tree) + + + + elif alt54 == 8: + # Java.g:444:9: TRANSIENT + pass + root_0 = self._adaptor.nil() + + TRANSIENT159=self.match(self.input, TRANSIENT, self.FOLLOW_TRANSIENT_in_modifier6713) + if self._state.backtracking == 0: + + TRANSIENT159_tree = self._adaptor.createWithPayload(TRANSIENT159) + self._adaptor.addChild(root_0, TRANSIENT159_tree) + + + + elif alt54 == 9: + # Java.g:445:9: VOLATILE + pass + root_0 = self._adaptor.nil() + + VOLATILE160=self.match(self.input, VOLATILE, self.FOLLOW_VOLATILE_in_modifier6723) + if self._state.backtracking == 0: + + VOLATILE160_tree = self._adaptor.createWithPayload(VOLATILE160) + self._adaptor.addChild(root_0, VOLATILE160_tree) + + + + elif alt54 == 10: + # Java.g:446:9: STRICTFP + pass + root_0 = self._adaptor.nil() + + STRICTFP161=self.match(self.input, STRICTFP, self.FOLLOW_STRICTFP_in_modifier6733) + if self._state.backtracking == 0: + + STRICTFP161_tree = self._adaptor.createWithPayload(STRICTFP161) + self._adaptor.addChild(root_0, STRICTFP161_tree) + + + + elif alt54 == 11: + # Java.g:447:9: localModifier + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_localModifier_in_modifier6743) + localModifier162 = self.localModifier() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, localModifier162.tree) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 38, modifier_StartIndex, success) + + pass + return retval + + # $ANTLR end "modifier" + + class localModifierList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.localModifierList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "localModifierList" + # Java.g:450:1: localModifierList : ( localModifier )* -> ^( LOCAL_MODIFIER_LIST ( localModifier )* ) ; + def localModifierList(self, ): + + retval = self.localModifierList_return() + retval.start = self.input.LT(1) + localModifierList_StartIndex = self.input.index() + root_0 = None + + localModifier163 = None + + + stream_localModifier = RewriteRuleSubtreeStream(self._adaptor, "rule localModifier") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 39): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:451:5: ( ( localModifier )* -> ^( LOCAL_MODIFIER_LIST ( localModifier )* ) ) + # Java.g:451:9: ( localModifier )* + pass + # Java.g:451:9: ( localModifier )* + while True: #loop55 + alt55 = 2 + LA55_0 = self.input.LA(1) + + if (LA55_0 == AT or LA55_0 == FINAL) : + alt55 = 1 + + + if alt55 == 1: + # Java.g:0:0: localModifier + pass + self._state.following.append(self.FOLLOW_localModifier_in_localModifierList6762) + localModifier163 = self.localModifier() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_localModifier.add(localModifier163.tree) + + + else: + break #loop55 + + # AST Rewrite + # elements: localModifier + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 452:9: -> ^( LOCAL_MODIFIER_LIST ( localModifier )* ) + # Java.g:452:12: ^( LOCAL_MODIFIER_LIST ( localModifier )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(LOCAL_MODIFIER_LIST, "LOCAL_MODIFIER_LIST"), root_1) + + # Java.g:452:34: ( localModifier )* + while stream_localModifier.hasNext(): + self._adaptor.addChild(root_1, stream_localModifier.nextTree()) + + + stream_localModifier.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 39, localModifierList_StartIndex, success) + + pass + return retval + + # $ANTLR end "localModifierList" + + class localModifier_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.localModifier_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "localModifier" + # Java.g:455:1: localModifier : ( FINAL | annotation ); + def localModifier(self, ): + + retval = self.localModifier_return() + retval.start = self.input.LT(1) + localModifier_StartIndex = self.input.index() + root_0 = None + + FINAL164 = None + annotation165 = None + + + FINAL164_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 40): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:456:5: ( FINAL | annotation ) + alt56 = 2 + LA56_0 = self.input.LA(1) + + if (LA56_0 == FINAL) : + alt56 = 1 + elif (LA56_0 == AT) : + alt56 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 56, 0, self.input) + + raise nvae + + if alt56 == 1: + # Java.g:456:9: FINAL + pass + root_0 = self._adaptor.nil() + + FINAL164=self.match(self.input, FINAL, self.FOLLOW_FINAL_in_localModifier6799) + if self._state.backtracking == 0: + + FINAL164_tree = self._adaptor.createWithPayload(FINAL164) + self._adaptor.addChild(root_0, FINAL164_tree) + + + + elif alt56 == 2: + # Java.g:457:9: annotation + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_annotation_in_localModifier6809) + annotation165 = self.annotation() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotation165.tree) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 40, localModifier_StartIndex, success) + + pass + return retval + + # $ANTLR end "localModifier" + + class type_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.type_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "type" + # Java.g:460:1: type : ( simpleType | objectType ); + def type(self, ): + + retval = self.type_return() + retval.start = self.input.LT(1) + type_StartIndex = self.input.index() + root_0 = None + + simpleType166 = None + + objectType167 = None + + + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 41): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:461:5: ( simpleType | objectType ) + alt57 = 2 + LA57_0 = self.input.LA(1) + + if (LA57_0 == BOOLEAN or LA57_0 == BYTE or LA57_0 == CHAR or LA57_0 == DOUBLE or LA57_0 == FLOAT or (INT <= LA57_0 <= LONG) or LA57_0 == SHORT) : + alt57 = 1 + elif (LA57_0 == IDENT) : + alt57 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 57, 0, self.input) + + raise nvae + + if alt57 == 1: + # Java.g:461:9: simpleType + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_simpleType_in_type6828) + simpleType166 = self.simpleType() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, simpleType166.tree) + + + elif alt57 == 2: + # Java.g:462:9: objectType + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_objectType_in_type6838) + objectType167 = self.objectType() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, objectType167.tree) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 41, type_StartIndex, success) + + pass + return retval + + # $ANTLR end "type" + + class simpleType_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.simpleType_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "simpleType" + # Java.g:465:1: simpleType : primitiveType ( arrayDeclaratorList )? -> ^( TYPE primitiveType ( arrayDeclaratorList )? ) ; + def simpleType(self, ): + + retval = self.simpleType_return() + retval.start = self.input.LT(1) + simpleType_StartIndex = self.input.index() + root_0 = None + + primitiveType168 = None + + arrayDeclaratorList169 = None + + + stream_arrayDeclaratorList = RewriteRuleSubtreeStream(self._adaptor, "rule arrayDeclaratorList") + stream_primitiveType = RewriteRuleSubtreeStream(self._adaptor, "rule primitiveType") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 42): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:466:5: ( primitiveType ( arrayDeclaratorList )? -> ^( TYPE primitiveType ( arrayDeclaratorList )? ) ) + # Java.g:466:9: primitiveType ( arrayDeclaratorList )? + pass + self._state.following.append(self.FOLLOW_primitiveType_in_simpleType6858) + primitiveType168 = self.primitiveType() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_primitiveType.add(primitiveType168.tree) + # Java.g:466:23: ( arrayDeclaratorList )? + alt58 = 2 + LA58_0 = self.input.LA(1) + + if (LA58_0 == LBRACK) : + LA58_1 = self.input.LA(2) + + if (LA58_1 == RBRACK) : + LA58_3 = self.input.LA(3) + + if (self.synpred76_Java()) : + alt58 = 1 + if alt58 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_simpleType6860) + arrayDeclaratorList169 = self.arrayDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arrayDeclaratorList.add(arrayDeclaratorList169.tree) + + + + + # AST Rewrite + # elements: primitiveType, arrayDeclaratorList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 467:9: -> ^( TYPE primitiveType ( arrayDeclaratorList )? ) + # Java.g:467:13: ^( TYPE primitiveType ( arrayDeclaratorList )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(TYPE, "TYPE"), root_1) + + self._adaptor.addChild(root_1, stream_primitiveType.nextTree()) + # Java.g:467:34: ( arrayDeclaratorList )? + if stream_arrayDeclaratorList.hasNext(): + self._adaptor.addChild(root_1, stream_arrayDeclaratorList.nextTree()) + + + stream_arrayDeclaratorList.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 42, simpleType_StartIndex, success) + + pass + return retval + + # $ANTLR end "simpleType" + + class objectType_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.objectType_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "objectType" + # Java.g:470:1: objectType : qualifiedTypeIdent ( arrayDeclaratorList )? -> ^( TYPE qualifiedTypeIdent ( arrayDeclaratorList )? ) ; + def objectType(self, ): + + retval = self.objectType_return() + retval.start = self.input.LT(1) + objectType_StartIndex = self.input.index() + root_0 = None + + qualifiedTypeIdent170 = None + + arrayDeclaratorList171 = None + + + stream_arrayDeclaratorList = RewriteRuleSubtreeStream(self._adaptor, "rule arrayDeclaratorList") + stream_qualifiedTypeIdent = RewriteRuleSubtreeStream(self._adaptor, "rule qualifiedTypeIdent") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 43): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:471:5: ( qualifiedTypeIdent ( arrayDeclaratorList )? -> ^( TYPE qualifiedTypeIdent ( arrayDeclaratorList )? ) ) + # Java.g:471:9: qualifiedTypeIdent ( arrayDeclaratorList )? + pass + self._state.following.append(self.FOLLOW_qualifiedTypeIdent_in_objectType6901) + qualifiedTypeIdent170 = self.qualifiedTypeIdent() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_qualifiedTypeIdent.add(qualifiedTypeIdent170.tree) + # Java.g:471:28: ( arrayDeclaratorList )? + alt59 = 2 + LA59_0 = self.input.LA(1) + + if (LA59_0 == LBRACK) : + LA59_1 = self.input.LA(2) + + if (self.synpred77_Java()) : + alt59 = 1 + if alt59 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_objectType6903) + arrayDeclaratorList171 = self.arrayDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arrayDeclaratorList.add(arrayDeclaratorList171.tree) + + + + + # AST Rewrite + # elements: arrayDeclaratorList, qualifiedTypeIdent + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 472:9: -> ^( TYPE qualifiedTypeIdent ( arrayDeclaratorList )? ) + # Java.g:472:13: ^( TYPE qualifiedTypeIdent ( arrayDeclaratorList )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(TYPE, "TYPE"), root_1) + + self._adaptor.addChild(root_1, stream_qualifiedTypeIdent.nextTree()) + # Java.g:472:39: ( arrayDeclaratorList )? + if stream_arrayDeclaratorList.hasNext(): + self._adaptor.addChild(root_1, stream_arrayDeclaratorList.nextTree()) + + + stream_arrayDeclaratorList.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 43, objectType_StartIndex, success) + + pass + return retval + + # $ANTLR end "objectType" + + class objectTypeSimplified_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.objectTypeSimplified_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "objectTypeSimplified" + # Java.g:475:1: objectTypeSimplified : qualifiedTypeIdentSimplified ( arrayDeclaratorList )? -> ^( TYPE qualifiedTypeIdentSimplified ( arrayDeclaratorList )? ) ; + def objectTypeSimplified(self, ): + + retval = self.objectTypeSimplified_return() + retval.start = self.input.LT(1) + objectTypeSimplified_StartIndex = self.input.index() + root_0 = None + + qualifiedTypeIdentSimplified172 = None + + arrayDeclaratorList173 = None + + + stream_arrayDeclaratorList = RewriteRuleSubtreeStream(self._adaptor, "rule arrayDeclaratorList") + stream_qualifiedTypeIdentSimplified = RewriteRuleSubtreeStream(self._adaptor, "rule qualifiedTypeIdentSimplified") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 44): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:476:5: ( qualifiedTypeIdentSimplified ( arrayDeclaratorList )? -> ^( TYPE qualifiedTypeIdentSimplified ( arrayDeclaratorList )? ) ) + # Java.g:476:9: qualifiedTypeIdentSimplified ( arrayDeclaratorList )? + pass + self._state.following.append(self.FOLLOW_qualifiedTypeIdentSimplified_in_objectTypeSimplified6943) + qualifiedTypeIdentSimplified172 = self.qualifiedTypeIdentSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_qualifiedTypeIdentSimplified.add(qualifiedTypeIdentSimplified172.tree) + # Java.g:476:38: ( arrayDeclaratorList )? + alt60 = 2 + LA60_0 = self.input.LA(1) + + if (LA60_0 == LBRACK) : + alt60 = 1 + if alt60 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_objectTypeSimplified6945) + arrayDeclaratorList173 = self.arrayDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arrayDeclaratorList.add(arrayDeclaratorList173.tree) + + + + + # AST Rewrite + # elements: qualifiedTypeIdentSimplified, arrayDeclaratorList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 477:9: -> ^( TYPE qualifiedTypeIdentSimplified ( arrayDeclaratorList )? ) + # Java.g:477:13: ^( TYPE qualifiedTypeIdentSimplified ( arrayDeclaratorList )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(TYPE, "TYPE"), root_1) + + self._adaptor.addChild(root_1, stream_qualifiedTypeIdentSimplified.nextTree()) + # Java.g:477:49: ( arrayDeclaratorList )? + if stream_arrayDeclaratorList.hasNext(): + self._adaptor.addChild(root_1, stream_arrayDeclaratorList.nextTree()) + + + stream_arrayDeclaratorList.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 44, objectTypeSimplified_StartIndex, success) + + pass + return retval + + # $ANTLR end "objectTypeSimplified" + + class qualifiedTypeIdent_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.qualifiedTypeIdent_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "qualifiedTypeIdent" + # Java.g:480:1: qualifiedTypeIdent : typeIdent ( DOT typeIdent )* -> ^( QUALIFIED_TYPE_IDENT ( typeIdent )+ ) ; + def qualifiedTypeIdent(self, ): + + retval = self.qualifiedTypeIdent_return() + retval.start = self.input.LT(1) + qualifiedTypeIdent_StartIndex = self.input.index() + root_0 = None + + DOT175 = None + typeIdent174 = None + + typeIdent176 = None + + + DOT175_tree = None + stream_DOT = RewriteRuleTokenStream(self._adaptor, "token DOT") + stream_typeIdent = RewriteRuleSubtreeStream(self._adaptor, "rule typeIdent") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 45): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:481:5: ( typeIdent ( DOT typeIdent )* -> ^( QUALIFIED_TYPE_IDENT ( typeIdent )+ ) ) + # Java.g:481:9: typeIdent ( DOT typeIdent )* + pass + self._state.following.append(self.FOLLOW_typeIdent_in_qualifiedTypeIdent6985) + typeIdent174 = self.typeIdent() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_typeIdent.add(typeIdent174.tree) + # Java.g:481:19: ( DOT typeIdent )* + while True: #loop61 + alt61 = 2 + LA61_0 = self.input.LA(1) + + if (LA61_0 == DOT) : + LA61_2 = self.input.LA(2) + + if (self.synpred79_Java()) : + alt61 = 1 + + + + + if alt61 == 1: + # Java.g:481:20: DOT typeIdent + pass + DOT175=self.match(self.input, DOT, self.FOLLOW_DOT_in_qualifiedTypeIdent6988) + if self._state.backtracking == 0: + stream_DOT.add(DOT175) + self._state.following.append(self.FOLLOW_typeIdent_in_qualifiedTypeIdent6990) + typeIdent176 = self.typeIdent() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_typeIdent.add(typeIdent176.tree) + + + else: + break #loop61 + + # AST Rewrite + # elements: typeIdent + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 482:9: -> ^( QUALIFIED_TYPE_IDENT ( typeIdent )+ ) + # Java.g:482:13: ^( QUALIFIED_TYPE_IDENT ( typeIdent )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(QUALIFIED_TYPE_IDENT, "QUALIFIED_TYPE_IDENT"), root_1) + + # Java.g:482:36: ( typeIdent )+ + if not (stream_typeIdent.hasNext()): + raise RewriteEarlyExitException() + + while stream_typeIdent.hasNext(): + self._adaptor.addChild(root_1, stream_typeIdent.nextTree()) + + + stream_typeIdent.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 45, qualifiedTypeIdent_StartIndex, success) + + pass + return retval + + # $ANTLR end "qualifiedTypeIdent" + + class qualifiedTypeIdentSimplified_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.qualifiedTypeIdentSimplified_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "qualifiedTypeIdentSimplified" + # Java.g:485:1: qualifiedTypeIdentSimplified : typeIdentSimplified ( DOT typeIdentSimplified )* -> ^( QUALIFIED_TYPE_IDENT ( typeIdentSimplified )+ ) ; + def qualifiedTypeIdentSimplified(self, ): + + retval = self.qualifiedTypeIdentSimplified_return() + retval.start = self.input.LT(1) + qualifiedTypeIdentSimplified_StartIndex = self.input.index() + root_0 = None + + DOT178 = None + typeIdentSimplified177 = None + + typeIdentSimplified179 = None + + + DOT178_tree = None + stream_DOT = RewriteRuleTokenStream(self._adaptor, "token DOT") + stream_typeIdentSimplified = RewriteRuleSubtreeStream(self._adaptor, "rule typeIdentSimplified") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 46): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:486:5: ( typeIdentSimplified ( DOT typeIdentSimplified )* -> ^( QUALIFIED_TYPE_IDENT ( typeIdentSimplified )+ ) ) + # Java.g:486:9: typeIdentSimplified ( DOT typeIdentSimplified )* + pass + self._state.following.append(self.FOLLOW_typeIdentSimplified_in_qualifiedTypeIdentSimplified7029) + typeIdentSimplified177 = self.typeIdentSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_typeIdentSimplified.add(typeIdentSimplified177.tree) + # Java.g:486:29: ( DOT typeIdentSimplified )* + while True: #loop62 + alt62 = 2 + LA62_0 = self.input.LA(1) + + if (LA62_0 == DOT) : + alt62 = 1 + + + if alt62 == 1: + # Java.g:486:30: DOT typeIdentSimplified + pass + DOT178=self.match(self.input, DOT, self.FOLLOW_DOT_in_qualifiedTypeIdentSimplified7032) + if self._state.backtracking == 0: + stream_DOT.add(DOT178) + self._state.following.append(self.FOLLOW_typeIdentSimplified_in_qualifiedTypeIdentSimplified7034) + typeIdentSimplified179 = self.typeIdentSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_typeIdentSimplified.add(typeIdentSimplified179.tree) + + + else: + break #loop62 + + # AST Rewrite + # elements: typeIdentSimplified + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 487:9: -> ^( QUALIFIED_TYPE_IDENT ( typeIdentSimplified )+ ) + # Java.g:487:13: ^( QUALIFIED_TYPE_IDENT ( typeIdentSimplified )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(QUALIFIED_TYPE_IDENT, "QUALIFIED_TYPE_IDENT"), root_1) + + # Java.g:487:36: ( typeIdentSimplified )+ + if not (stream_typeIdentSimplified.hasNext()): + raise RewriteEarlyExitException() + + while stream_typeIdentSimplified.hasNext(): + self._adaptor.addChild(root_1, stream_typeIdentSimplified.nextTree()) + + + stream_typeIdentSimplified.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 46, qualifiedTypeIdentSimplified_StartIndex, success) + + pass + return retval + + # $ANTLR end "qualifiedTypeIdentSimplified" + + class typeIdent_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.typeIdent_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "typeIdent" + # Java.g:490:1: typeIdent : IDENT ( genericTypeArgumentList )? ; + def typeIdent(self, ): + + retval = self.typeIdent_return() + retval.start = self.input.LT(1) + typeIdent_StartIndex = self.input.index() + root_0 = None + + IDENT180 = None + genericTypeArgumentList181 = None + + + IDENT180_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 47): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:491:5: ( IDENT ( genericTypeArgumentList )? ) + # Java.g:491:9: IDENT ( genericTypeArgumentList )? + pass + root_0 = self._adaptor.nil() + + IDENT180=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_typeIdent7073) + if self._state.backtracking == 0: + + IDENT180_tree = self._adaptor.createWithPayload(IDENT180) + root_0 = self._adaptor.becomeRoot(IDENT180_tree, root_0) + + # Java.g:491:16: ( genericTypeArgumentList )? + alt63 = 2 + LA63_0 = self.input.LA(1) + + if (LA63_0 == LESS_THAN) : + alt63 = 1 + if alt63 == 1: + # Java.g:0:0: genericTypeArgumentList + pass + self._state.following.append(self.FOLLOW_genericTypeArgumentList_in_typeIdent7076) + genericTypeArgumentList181 = self.genericTypeArgumentList() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, genericTypeArgumentList181.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 47, typeIdent_StartIndex, success) + + pass + return retval + + # $ANTLR end "typeIdent" + + class typeIdentSimplified_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.typeIdentSimplified_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "typeIdentSimplified" + # Java.g:494:1: typeIdentSimplified : IDENT ( genericTypeArgumentListSimplified )? ; + def typeIdentSimplified(self, ): + + retval = self.typeIdentSimplified_return() + retval.start = self.input.LT(1) + typeIdentSimplified_StartIndex = self.input.index() + root_0 = None + + IDENT182 = None + genericTypeArgumentListSimplified183 = None + + + IDENT182_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 48): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:495:5: ( IDENT ( genericTypeArgumentListSimplified )? ) + # Java.g:495:9: IDENT ( genericTypeArgumentListSimplified )? + pass + root_0 = self._adaptor.nil() + + IDENT182=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_typeIdentSimplified7096) + if self._state.backtracking == 0: + + IDENT182_tree = self._adaptor.createWithPayload(IDENT182) + root_0 = self._adaptor.becomeRoot(IDENT182_tree, root_0) + + # Java.g:495:16: ( genericTypeArgumentListSimplified )? + alt64 = 2 + LA64_0 = self.input.LA(1) + + if (LA64_0 == LESS_THAN) : + alt64 = 1 + if alt64 == 1: + # Java.g:0:0: genericTypeArgumentListSimplified + pass + self._state.following.append(self.FOLLOW_genericTypeArgumentListSimplified_in_typeIdentSimplified7099) + genericTypeArgumentListSimplified183 = self.genericTypeArgumentListSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, genericTypeArgumentListSimplified183.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 48, typeIdentSimplified_StartIndex, success) + + pass + return retval + + # $ANTLR end "typeIdentSimplified" + + class primitiveType_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.primitiveType_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "primitiveType" + # Java.g:498:1: primitiveType : ( BOOLEAN | CHAR | BYTE | SHORT | INT | LONG | FLOAT | DOUBLE ); + def primitiveType(self, ): + + retval = self.primitiveType_return() + retval.start = self.input.LT(1) + primitiveType_StartIndex = self.input.index() + root_0 = None + + set184 = None + + set184_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 49): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:499:5: ( BOOLEAN | CHAR | BYTE | SHORT | INT | LONG | FLOAT | DOUBLE ) + # Java.g: + pass + root_0 = self._adaptor.nil() + + set184 = self.input.LT(1) + if self.input.LA(1) == BOOLEAN or self.input.LA(1) == BYTE or self.input.LA(1) == CHAR or self.input.LA(1) == DOUBLE or self.input.LA(1) == FLOAT or (INT <= self.input.LA(1) <= LONG) or self.input.LA(1) == SHORT: + self.input.consume() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, self._adaptor.createWithPayload(set184)) + self._state.errorRecovery = False + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + mse = MismatchedSetException(None, self.input) + raise mse + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 49, primitiveType_StartIndex, success) + + pass + return retval + + # $ANTLR end "primitiveType" + + class genericTypeArgumentList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.genericTypeArgumentList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "genericTypeArgumentList" + # Java.g:509:1: genericTypeArgumentList : LESS_THAN genericTypeArgument ( COMMA genericTypeArgument )* genericTypeListClosing -> ^( GENERIC_TYPE_ARG_LIST[$LESS_THAN, \"GENERIC_TYPE_ARG_LIST\"] ( genericTypeArgument )+ ) ; + def genericTypeArgumentList(self, ): + + retval = self.genericTypeArgumentList_return() + retval.start = self.input.LT(1) + genericTypeArgumentList_StartIndex = self.input.index() + root_0 = None + + LESS_THAN185 = None + COMMA187 = None + genericTypeArgument186 = None + + genericTypeArgument188 = None + + genericTypeListClosing189 = None + + + LESS_THAN185_tree = None + COMMA187_tree = None + stream_COMMA = RewriteRuleTokenStream(self._adaptor, "token COMMA") + stream_LESS_THAN = RewriteRuleTokenStream(self._adaptor, "token LESS_THAN") + stream_genericTypeArgument = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeArgument") + stream_genericTypeListClosing = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeListClosing") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 50): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:510:5: ( LESS_THAN genericTypeArgument ( COMMA genericTypeArgument )* genericTypeListClosing -> ^( GENERIC_TYPE_ARG_LIST[$LESS_THAN, \"GENERIC_TYPE_ARG_LIST\"] ( genericTypeArgument )+ ) ) + # Java.g:510:9: LESS_THAN genericTypeArgument ( COMMA genericTypeArgument )* genericTypeListClosing + pass + LESS_THAN185=self.match(self.input, LESS_THAN, self.FOLLOW_LESS_THAN_in_genericTypeArgumentList7208) + if self._state.backtracking == 0: + stream_LESS_THAN.add(LESS_THAN185) + self._state.following.append(self.FOLLOW_genericTypeArgument_in_genericTypeArgumentList7210) + genericTypeArgument186 = self.genericTypeArgument() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeArgument.add(genericTypeArgument186.tree) + # Java.g:510:39: ( COMMA genericTypeArgument )* + while True: #loop65 + alt65 = 2 + LA65_0 = self.input.LA(1) + + if (LA65_0 == COMMA) : + LA65_2 = self.input.LA(2) + + if (self.synpred90_Java()) : + alt65 = 1 + + + + + if alt65 == 1: + # Java.g:510:40: COMMA genericTypeArgument + pass + COMMA187=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_genericTypeArgumentList7213) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA187) + self._state.following.append(self.FOLLOW_genericTypeArgument_in_genericTypeArgumentList7215) + genericTypeArgument188 = self.genericTypeArgument() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeArgument.add(genericTypeArgument188.tree) + + + else: + break #loop65 + self._state.following.append(self.FOLLOW_genericTypeListClosing_in_genericTypeArgumentList7219) + genericTypeListClosing189 = self.genericTypeListClosing() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeListClosing.add(genericTypeListClosing189.tree) + + # AST Rewrite + # elements: genericTypeArgument + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 511:9: -> ^( GENERIC_TYPE_ARG_LIST[$LESS_THAN, \"GENERIC_TYPE_ARG_LIST\"] ( genericTypeArgument )+ ) + # Java.g:511:13: ^( GENERIC_TYPE_ARG_LIST[$LESS_THAN, \"GENERIC_TYPE_ARG_LIST\"] ( genericTypeArgument )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(GENERIC_TYPE_ARG_LIST, LESS_THAN185, "GENERIC_TYPE_ARG_LIST"), root_1) + + # Java.g:511:74: ( genericTypeArgument )+ + if not (stream_genericTypeArgument.hasNext()): + raise RewriteEarlyExitException() + + while stream_genericTypeArgument.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeArgument.nextTree()) + + + stream_genericTypeArgument.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 50, genericTypeArgumentList_StartIndex, success) + + pass + return retval + + # $ANTLR end "genericTypeArgumentList" + + class genericTypeArgument_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.genericTypeArgument_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "genericTypeArgument" + # Java.g:514:1: genericTypeArgument : ( type | QUESTION ( genericWildcardBoundType )? -> ^( QUESTION ( genericWildcardBoundType )? ) ); + def genericTypeArgument(self, ): + + retval = self.genericTypeArgument_return() + retval.start = self.input.LT(1) + genericTypeArgument_StartIndex = self.input.index() + root_0 = None + + QUESTION191 = None + type190 = None + + genericWildcardBoundType192 = None + + + QUESTION191_tree = None + stream_QUESTION = RewriteRuleTokenStream(self._adaptor, "token QUESTION") + stream_genericWildcardBoundType = RewriteRuleSubtreeStream(self._adaptor, "rule genericWildcardBoundType") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 51): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:515:5: ( type | QUESTION ( genericWildcardBoundType )? -> ^( QUESTION ( genericWildcardBoundType )? ) ) + alt67 = 2 + LA67_0 = self.input.LA(1) + + if (LA67_0 == BOOLEAN or LA67_0 == BYTE or LA67_0 == CHAR or LA67_0 == DOUBLE or LA67_0 == FLOAT or (INT <= LA67_0 <= LONG) or LA67_0 == SHORT or LA67_0 == IDENT) : + alt67 = 1 + elif (LA67_0 == QUESTION) : + alt67 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 67, 0, self.input) + + raise nvae + + if alt67 == 1: + # Java.g:515:9: type + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_type_in_genericTypeArgument7257) + type190 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, type190.tree) + + + elif alt67 == 2: + # Java.g:516:9: QUESTION ( genericWildcardBoundType )? + pass + QUESTION191=self.match(self.input, QUESTION, self.FOLLOW_QUESTION_in_genericTypeArgument7267) + if self._state.backtracking == 0: + stream_QUESTION.add(QUESTION191) + # Java.g:516:18: ( genericWildcardBoundType )? + alt66 = 2 + LA66_0 = self.input.LA(1) + + if (LA66_0 == EXTENDS) : + LA66_1 = self.input.LA(2) + + if (LA66_1 == BOOLEAN or LA66_1 == BYTE or LA66_1 == CHAR or LA66_1 == DOUBLE or LA66_1 == FLOAT or (INT <= LA66_1 <= LONG) or LA66_1 == SHORT) : + LA66_4 = self.input.LA(3) + + if (self.synpred92_Java()) : + alt66 = 1 + elif (LA66_1 == IDENT) : + LA66_5 = self.input.LA(3) + + if (self.synpred92_Java()) : + alt66 = 1 + elif (LA66_0 == SUPER) : + LA66_3 = self.input.LA(2) + + if (LA66_3 == BOOLEAN or LA66_3 == BYTE or LA66_3 == CHAR or LA66_3 == DOUBLE or LA66_3 == FLOAT or (INT <= LA66_3 <= LONG) or LA66_3 == SHORT or LA66_3 == IDENT) : + alt66 = 1 + if alt66 == 1: + # Java.g:0:0: genericWildcardBoundType + pass + self._state.following.append(self.FOLLOW_genericWildcardBoundType_in_genericTypeArgument7269) + genericWildcardBoundType192 = self.genericWildcardBoundType() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericWildcardBoundType.add(genericWildcardBoundType192.tree) + + + + + # AST Rewrite + # elements: QUESTION, genericWildcardBoundType + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 517:9: -> ^( QUESTION ( genericWildcardBoundType )? ) + # Java.g:517:13: ^( QUESTION ( genericWildcardBoundType )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_QUESTION.nextNode(), root_1) + + # Java.g:517:24: ( genericWildcardBoundType )? + if stream_genericWildcardBoundType.hasNext(): + self._adaptor.addChild(root_1, stream_genericWildcardBoundType.nextTree()) + + + stream_genericWildcardBoundType.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 51, genericTypeArgument_StartIndex, success) + + pass + return retval + + # $ANTLR end "genericTypeArgument" + + class genericWildcardBoundType_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.genericWildcardBoundType_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "genericWildcardBoundType" + # Java.g:520:1: genericWildcardBoundType : ( EXTENDS | SUPER ) type ; + def genericWildcardBoundType(self, ): + + retval = self.genericWildcardBoundType_return() + retval.start = self.input.LT(1) + genericWildcardBoundType_StartIndex = self.input.index() + root_0 = None + + set193 = None + type194 = None + + + set193_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 52): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:521:5: ( ( EXTENDS | SUPER ) type ) + # Java.g:521:9: ( EXTENDS | SUPER ) type + pass + root_0 = self._adaptor.nil() + + set193 = self.input.LT(1) + set193 = self.input.LT(1) + if self.input.LA(1) == EXTENDS or self.input.LA(1) == SUPER: + self.input.consume() + if self._state.backtracking == 0: + root_0 = self._adaptor.becomeRoot(self._adaptor.createWithPayload(set193), root_0) + self._state.errorRecovery = False + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + mse = MismatchedSetException(None, self.input) + raise mse + + + self._state.following.append(self.FOLLOW_type_in_genericWildcardBoundType7316) + type194 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, type194.tree) + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 52, genericWildcardBoundType_StartIndex, success) + + pass + return retval + + # $ANTLR end "genericWildcardBoundType" + + class genericTypeArgumentListSimplified_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.genericTypeArgumentListSimplified_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "genericTypeArgumentListSimplified" + # Java.g:524:1: genericTypeArgumentListSimplified : LESS_THAN genericTypeArgumentSimplified ( COMMA genericTypeArgumentSimplified )* genericTypeListClosing -> ^( GENERIC_TYPE_ARG_LIST[$LESS_THAN, \"GENERIC_TYPE_ARG_LIST\"] ( genericTypeArgumentSimplified )+ ) ; + def genericTypeArgumentListSimplified(self, ): + + retval = self.genericTypeArgumentListSimplified_return() + retval.start = self.input.LT(1) + genericTypeArgumentListSimplified_StartIndex = self.input.index() + root_0 = None + + LESS_THAN195 = None + COMMA197 = None + genericTypeArgumentSimplified196 = None + + genericTypeArgumentSimplified198 = None + + genericTypeListClosing199 = None + + + LESS_THAN195_tree = None + COMMA197_tree = None + stream_COMMA = RewriteRuleTokenStream(self._adaptor, "token COMMA") + stream_LESS_THAN = RewriteRuleTokenStream(self._adaptor, "token LESS_THAN") + stream_genericTypeArgumentSimplified = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeArgumentSimplified") + stream_genericTypeListClosing = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeListClosing") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 53): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:525:5: ( LESS_THAN genericTypeArgumentSimplified ( COMMA genericTypeArgumentSimplified )* genericTypeListClosing -> ^( GENERIC_TYPE_ARG_LIST[$LESS_THAN, \"GENERIC_TYPE_ARG_LIST\"] ( genericTypeArgumentSimplified )+ ) ) + # Java.g:525:9: LESS_THAN genericTypeArgumentSimplified ( COMMA genericTypeArgumentSimplified )* genericTypeListClosing + pass + LESS_THAN195=self.match(self.input, LESS_THAN, self.FOLLOW_LESS_THAN_in_genericTypeArgumentListSimplified7335) + if self._state.backtracking == 0: + stream_LESS_THAN.add(LESS_THAN195) + self._state.following.append(self.FOLLOW_genericTypeArgumentSimplified_in_genericTypeArgumentListSimplified7337) + genericTypeArgumentSimplified196 = self.genericTypeArgumentSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeArgumentSimplified.add(genericTypeArgumentSimplified196.tree) + # Java.g:525:49: ( COMMA genericTypeArgumentSimplified )* + while True: #loop68 + alt68 = 2 + LA68_0 = self.input.LA(1) + + if (LA68_0 == COMMA) : + alt68 = 1 + + + if alt68 == 1: + # Java.g:525:50: COMMA genericTypeArgumentSimplified + pass + COMMA197=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_genericTypeArgumentListSimplified7340) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA197) + self._state.following.append(self.FOLLOW_genericTypeArgumentSimplified_in_genericTypeArgumentListSimplified7342) + genericTypeArgumentSimplified198 = self.genericTypeArgumentSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeArgumentSimplified.add(genericTypeArgumentSimplified198.tree) + + + else: + break #loop68 + self._state.following.append(self.FOLLOW_genericTypeListClosing_in_genericTypeArgumentListSimplified7346) + genericTypeListClosing199 = self.genericTypeListClosing() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeListClosing.add(genericTypeListClosing199.tree) + + # AST Rewrite + # elements: genericTypeArgumentSimplified + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 526:9: -> ^( GENERIC_TYPE_ARG_LIST[$LESS_THAN, \"GENERIC_TYPE_ARG_LIST\"] ( genericTypeArgumentSimplified )+ ) + # Java.g:526:13: ^( GENERIC_TYPE_ARG_LIST[$LESS_THAN, \"GENERIC_TYPE_ARG_LIST\"] ( genericTypeArgumentSimplified )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(GENERIC_TYPE_ARG_LIST, LESS_THAN195, "GENERIC_TYPE_ARG_LIST"), root_1) + + # Java.g:526:74: ( genericTypeArgumentSimplified )+ + if not (stream_genericTypeArgumentSimplified.hasNext()): + raise RewriteEarlyExitException() + + while stream_genericTypeArgumentSimplified.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeArgumentSimplified.nextTree()) + + + stream_genericTypeArgumentSimplified.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 53, genericTypeArgumentListSimplified_StartIndex, success) + + pass + return retval + + # $ANTLR end "genericTypeArgumentListSimplified" + + class genericTypeArgumentSimplified_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.genericTypeArgumentSimplified_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "genericTypeArgumentSimplified" + # Java.g:529:1: genericTypeArgumentSimplified : ( type | QUESTION ); + def genericTypeArgumentSimplified(self, ): + + retval = self.genericTypeArgumentSimplified_return() + retval.start = self.input.LT(1) + genericTypeArgumentSimplified_StartIndex = self.input.index() + root_0 = None + + QUESTION201 = None + type200 = None + + + QUESTION201_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 54): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:530:5: ( type | QUESTION ) + alt69 = 2 + LA69_0 = self.input.LA(1) + + if (LA69_0 == BOOLEAN or LA69_0 == BYTE or LA69_0 == CHAR or LA69_0 == DOUBLE or LA69_0 == FLOAT or (INT <= LA69_0 <= LONG) or LA69_0 == SHORT or LA69_0 == IDENT) : + alt69 = 1 + elif (LA69_0 == QUESTION) : + alt69 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 69, 0, self.input) + + raise nvae + + if alt69 == 1: + # Java.g:530:9: type + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_type_in_genericTypeArgumentSimplified7384) + type200 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, type200.tree) + + + elif alt69 == 2: + # Java.g:531:9: QUESTION + pass + root_0 = self._adaptor.nil() + + QUESTION201=self.match(self.input, QUESTION, self.FOLLOW_QUESTION_in_genericTypeArgumentSimplified7394) + if self._state.backtracking == 0: + + QUESTION201_tree = self._adaptor.createWithPayload(QUESTION201) + self._adaptor.addChild(root_0, QUESTION201_tree) + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 54, genericTypeArgumentSimplified_StartIndex, success) + + pass + return retval + + # $ANTLR end "genericTypeArgumentSimplified" + + class qualifiedIdentList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.qualifiedIdentList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "qualifiedIdentList" + # Java.g:534:1: qualifiedIdentList : qualifiedIdentifier ( COMMA qualifiedIdentifier )* ; + def qualifiedIdentList(self, ): + + retval = self.qualifiedIdentList_return() + retval.start = self.input.LT(1) + qualifiedIdentList_StartIndex = self.input.index() + root_0 = None + + COMMA203 = None + qualifiedIdentifier202 = None + + qualifiedIdentifier204 = None + + + COMMA203_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 55): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:535:5: ( qualifiedIdentifier ( COMMA qualifiedIdentifier )* ) + # Java.g:535:9: qualifiedIdentifier ( COMMA qualifiedIdentifier )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_qualifiedIdentifier_in_qualifiedIdentList7413) + qualifiedIdentifier202 = self.qualifiedIdentifier() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, qualifiedIdentifier202.tree) + # Java.g:535:29: ( COMMA qualifiedIdentifier )* + while True: #loop70 + alt70 = 2 + LA70_0 = self.input.LA(1) + + if (LA70_0 == COMMA) : + alt70 = 1 + + + if alt70 == 1: + # Java.g:535:30: COMMA qualifiedIdentifier + pass + COMMA203=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_qualifiedIdentList7416) + self._state.following.append(self.FOLLOW_qualifiedIdentifier_in_qualifiedIdentList7419) + qualifiedIdentifier204 = self.qualifiedIdentifier() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, qualifiedIdentifier204.tree) + + + else: + break #loop70 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 55, qualifiedIdentList_StartIndex, success) + + pass + return retval + + # $ANTLR end "qualifiedIdentList" + + class formalParameterList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.formalParameterList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "formalParameterList" + # Java.g:538:1: formalParameterList : LPAREN ( formalParameterStandardDecl ( COMMA formalParameterStandardDecl )* ( COMMA formalParameterVarArgDecl )? -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ( formalParameterStandardDecl )+ ( formalParameterVarArgDecl )? ) | formalParameterVarArgDecl -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] formalParameterVarArgDecl ) | -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ) ) RPAREN ; + def formalParameterList(self, ): + + retval = self.formalParameterList_return() + retval.start = self.input.LT(1) + formalParameterList_StartIndex = self.input.index() + root_0 = None + + LPAREN205 = None + COMMA207 = None + COMMA209 = None + RPAREN212 = None + formalParameterStandardDecl206 = None + + formalParameterStandardDecl208 = None + + formalParameterVarArgDecl210 = None + + formalParameterVarArgDecl211 = None + + + LPAREN205_tree = None + COMMA207_tree = None + COMMA209_tree = None + RPAREN212_tree = None + stream_RPAREN = RewriteRuleTokenStream(self._adaptor, "token RPAREN") + stream_COMMA = RewriteRuleTokenStream(self._adaptor, "token COMMA") + stream_LPAREN = RewriteRuleTokenStream(self._adaptor, "token LPAREN") + stream_formalParameterVarArgDecl = RewriteRuleSubtreeStream(self._adaptor, "rule formalParameterVarArgDecl") + stream_formalParameterStandardDecl = RewriteRuleSubtreeStream(self._adaptor, "rule formalParameterStandardDecl") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 56): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:539:5: ( LPAREN ( formalParameterStandardDecl ( COMMA formalParameterStandardDecl )* ( COMMA formalParameterVarArgDecl )? -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ( formalParameterStandardDecl )+ ( formalParameterVarArgDecl )? ) | formalParameterVarArgDecl -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] formalParameterVarArgDecl ) | -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ) ) RPAREN ) + # Java.g:539:9: LPAREN ( formalParameterStandardDecl ( COMMA formalParameterStandardDecl )* ( COMMA formalParameterVarArgDecl )? -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ( formalParameterStandardDecl )+ ( formalParameterVarArgDecl )? ) | formalParameterVarArgDecl -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] formalParameterVarArgDecl ) | -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ) ) RPAREN + pass + LPAREN205=self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_formalParameterList7440) + if self._state.backtracking == 0: + stream_LPAREN.add(LPAREN205) + # Java.g:540:9: ( formalParameterStandardDecl ( COMMA formalParameterStandardDecl )* ( COMMA formalParameterVarArgDecl )? -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ( formalParameterStandardDecl )+ ( formalParameterVarArgDecl )? ) | formalParameterVarArgDecl -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] formalParameterVarArgDecl ) | -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ) ) + alt73 = 3 + LA73 = self.input.LA(1) + if LA73 == FINAL: + LA73_1 = self.input.LA(2) + + if (self.synpred99_Java()) : + alt73 = 1 + elif (self.synpred100_Java()) : + alt73 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 73, 1, self.input) + + raise nvae + + elif LA73 == AT: + LA73_2 = self.input.LA(2) + + if (self.synpred99_Java()) : + alt73 = 1 + elif (self.synpred100_Java()) : + alt73 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 73, 2, self.input) + + raise nvae + + elif LA73 == BOOLEAN or LA73 == BYTE or LA73 == CHAR or LA73 == DOUBLE or LA73 == FLOAT or LA73 == INT or LA73 == LONG or LA73 == SHORT: + LA73_3 = self.input.LA(2) + + if (self.synpred99_Java()) : + alt73 = 1 + elif (self.synpred100_Java()) : + alt73 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 73, 3, self.input) + + raise nvae + + elif LA73 == IDENT: + LA73_4 = self.input.LA(2) + + if (self.synpred99_Java()) : + alt73 = 1 + elif (self.synpred100_Java()) : + alt73 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 73, 4, self.input) + + raise nvae + + elif LA73 == RPAREN: + alt73 = 3 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 73, 0, self.input) + + raise nvae + + if alt73 == 1: + # Java.g:541:13: formalParameterStandardDecl ( COMMA formalParameterStandardDecl )* ( COMMA formalParameterVarArgDecl )? + pass + self._state.following.append(self.FOLLOW_formalParameterStandardDecl_in_formalParameterList7467) + formalParameterStandardDecl206 = self.formalParameterStandardDecl() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_formalParameterStandardDecl.add(formalParameterStandardDecl206.tree) + # Java.g:541:41: ( COMMA formalParameterStandardDecl )* + while True: #loop71 + alt71 = 2 + LA71_0 = self.input.LA(1) + + if (LA71_0 == COMMA) : + LA71_1 = self.input.LA(2) + + if (self.synpred97_Java()) : + alt71 = 1 + + + + + if alt71 == 1: + # Java.g:541:42: COMMA formalParameterStandardDecl + pass + COMMA207=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_formalParameterList7470) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA207) + self._state.following.append(self.FOLLOW_formalParameterStandardDecl_in_formalParameterList7472) + formalParameterStandardDecl208 = self.formalParameterStandardDecl() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_formalParameterStandardDecl.add(formalParameterStandardDecl208.tree) + + + else: + break #loop71 + # Java.g:541:78: ( COMMA formalParameterVarArgDecl )? + alt72 = 2 + LA72_0 = self.input.LA(1) + + if (LA72_0 == COMMA) : + alt72 = 1 + if alt72 == 1: + # Java.g:541:79: COMMA formalParameterVarArgDecl + pass + COMMA209=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_formalParameterList7477) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA209) + self._state.following.append(self.FOLLOW_formalParameterVarArgDecl_in_formalParameterList7479) + formalParameterVarArgDecl210 = self.formalParameterVarArgDecl() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_formalParameterVarArgDecl.add(formalParameterVarArgDecl210.tree) + + + + + # AST Rewrite + # elements: formalParameterVarArgDecl, formalParameterStandardDecl + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 542:13: -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ( formalParameterStandardDecl )+ ( formalParameterVarArgDecl )? ) + # Java.g:542:17: ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ( formalParameterStandardDecl )+ ( formalParameterVarArgDecl )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(FORMAL_PARAM_LIST, LPAREN205, "FORMAL_PARAM_LIST"), root_1) + + # Java.g:542:67: ( formalParameterStandardDecl )+ + if not (stream_formalParameterStandardDecl.hasNext()): + raise RewriteEarlyExitException() + + while stream_formalParameterStandardDecl.hasNext(): + self._adaptor.addChild(root_1, stream_formalParameterStandardDecl.nextTree()) + + + stream_formalParameterStandardDecl.reset() + # Java.g:542:96: ( formalParameterVarArgDecl )? + if stream_formalParameterVarArgDecl.hasNext(): + self._adaptor.addChild(root_1, stream_formalParameterVarArgDecl.nextTree()) + + + stream_formalParameterVarArgDecl.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt73 == 2: + # Java.g:544:13: formalParameterVarArgDecl + pass + self._state.following.append(self.FOLLOW_formalParameterVarArgDecl_in_formalParameterList7534) + formalParameterVarArgDecl211 = self.formalParameterVarArgDecl() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_formalParameterVarArgDecl.add(formalParameterVarArgDecl211.tree) + + # AST Rewrite + # elements: formalParameterVarArgDecl + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 545:13: -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] formalParameterVarArgDecl ) + # Java.g:545:17: ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] formalParameterVarArgDecl ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(FORMAL_PARAM_LIST, LPAREN205, "FORMAL_PARAM_LIST"), root_1) + + self._adaptor.addChild(root_1, stream_formalParameterVarArgDecl.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt73 == 3: + # Java.g:547:13: + pass + # AST Rewrite + # elements: + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 547:13: -> ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ) + # Java.g:547:17: ^( FORMAL_PARAM_LIST[$LPAREN, \"FORMAL_PARAM_LIST\"] ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(FORMAL_PARAM_LIST, LPAREN205, "FORMAL_PARAM_LIST"), root_1) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + RPAREN212=self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_formalParameterList7609) + if self._state.backtracking == 0: + stream_RPAREN.add(RPAREN212) + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 56, formalParameterList_StartIndex, success) + + pass + return retval + + # $ANTLR end "formalParameterList" + + class formalParameterStandardDecl_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.formalParameterStandardDecl_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "formalParameterStandardDecl" + # Java.g:552:1: formalParameterStandardDecl : localModifierList type variableDeclaratorId -> ^( FORMAL_PARAM_STD_DECL localModifierList type variableDeclaratorId ) ; + def formalParameterStandardDecl(self, ): + + retval = self.formalParameterStandardDecl_return() + retval.start = self.input.LT(1) + formalParameterStandardDecl_StartIndex = self.input.index() + root_0 = None + + localModifierList213 = None + + type214 = None + + variableDeclaratorId215 = None + + + stream_variableDeclaratorId = RewriteRuleSubtreeStream(self._adaptor, "rule variableDeclaratorId") + stream_localModifierList = RewriteRuleSubtreeStream(self._adaptor, "rule localModifierList") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 57): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:553:5: ( localModifierList type variableDeclaratorId -> ^( FORMAL_PARAM_STD_DECL localModifierList type variableDeclaratorId ) ) + # Java.g:553:9: localModifierList type variableDeclaratorId + pass + self._state.following.append(self.FOLLOW_localModifierList_in_formalParameterStandardDecl7628) + localModifierList213 = self.localModifierList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_localModifierList.add(localModifierList213.tree) + self._state.following.append(self.FOLLOW_type_in_formalParameterStandardDecl7630) + type214 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type214.tree) + self._state.following.append(self.FOLLOW_variableDeclaratorId_in_formalParameterStandardDecl7632) + variableDeclaratorId215 = self.variableDeclaratorId() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_variableDeclaratorId.add(variableDeclaratorId215.tree) + + # AST Rewrite + # elements: localModifierList, type, variableDeclaratorId + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 554:9: -> ^( FORMAL_PARAM_STD_DECL localModifierList type variableDeclaratorId ) + # Java.g:554:13: ^( FORMAL_PARAM_STD_DECL localModifierList type variableDeclaratorId ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(FORMAL_PARAM_STD_DECL, "FORMAL_PARAM_STD_DECL"), root_1) + + self._adaptor.addChild(root_1, stream_localModifierList.nextTree()) + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_variableDeclaratorId.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 57, formalParameterStandardDecl_StartIndex, success) + + pass + return retval + + # $ANTLR end "formalParameterStandardDecl" + + class formalParameterVarArgDecl_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.formalParameterVarArgDecl_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "formalParameterVarArgDecl" + # Java.g:557:1: formalParameterVarArgDecl : localModifierList type ELLIPSIS variableDeclaratorId -> ^( FORMAL_PARAM_VARARG_DECL localModifierList type variableDeclaratorId ) ; + def formalParameterVarArgDecl(self, ): + + retval = self.formalParameterVarArgDecl_return() + retval.start = self.input.LT(1) + formalParameterVarArgDecl_StartIndex = self.input.index() + root_0 = None + + ELLIPSIS218 = None + localModifierList216 = None + + type217 = None + + variableDeclaratorId219 = None + + + ELLIPSIS218_tree = None + stream_ELLIPSIS = RewriteRuleTokenStream(self._adaptor, "token ELLIPSIS") + stream_variableDeclaratorId = RewriteRuleSubtreeStream(self._adaptor, "rule variableDeclaratorId") + stream_localModifierList = RewriteRuleSubtreeStream(self._adaptor, "rule localModifierList") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 58): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:558:5: ( localModifierList type ELLIPSIS variableDeclaratorId -> ^( FORMAL_PARAM_VARARG_DECL localModifierList type variableDeclaratorId ) ) + # Java.g:558:9: localModifierList type ELLIPSIS variableDeclaratorId + pass + self._state.following.append(self.FOLLOW_localModifierList_in_formalParameterVarArgDecl7672) + localModifierList216 = self.localModifierList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_localModifierList.add(localModifierList216.tree) + self._state.following.append(self.FOLLOW_type_in_formalParameterVarArgDecl7674) + type217 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type217.tree) + ELLIPSIS218=self.match(self.input, ELLIPSIS, self.FOLLOW_ELLIPSIS_in_formalParameterVarArgDecl7676) + if self._state.backtracking == 0: + stream_ELLIPSIS.add(ELLIPSIS218) + self._state.following.append(self.FOLLOW_variableDeclaratorId_in_formalParameterVarArgDecl7678) + variableDeclaratorId219 = self.variableDeclaratorId() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_variableDeclaratorId.add(variableDeclaratorId219.tree) + + # AST Rewrite + # elements: variableDeclaratorId, localModifierList, type + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 559:9: -> ^( FORMAL_PARAM_VARARG_DECL localModifierList type variableDeclaratorId ) + # Java.g:559:13: ^( FORMAL_PARAM_VARARG_DECL localModifierList type variableDeclaratorId ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(FORMAL_PARAM_VARARG_DECL, "FORMAL_PARAM_VARARG_DECL"), root_1) + + self._adaptor.addChild(root_1, stream_localModifierList.nextTree()) + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_variableDeclaratorId.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 58, formalParameterVarArgDecl_StartIndex, success) + + pass + return retval + + # $ANTLR end "formalParameterVarArgDecl" + + class qualifiedIdentifier_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.qualifiedIdentifier_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "qualifiedIdentifier" + # Java.g:562:1: qualifiedIdentifier : ( IDENT -> IDENT ) ( DOT ident= IDENT -> ^( DOT $qualifiedIdentifier $ident) )* ; + def qualifiedIdentifier(self, ): + + retval = self.qualifiedIdentifier_return() + retval.start = self.input.LT(1) + qualifiedIdentifier_StartIndex = self.input.index() + root_0 = None + + ident = None + IDENT220 = None + DOT221 = None + + ident_tree = None + IDENT220_tree = None + DOT221_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_DOT = RewriteRuleTokenStream(self._adaptor, "token DOT") + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 59): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:563:5: ( ( IDENT -> IDENT ) ( DOT ident= IDENT -> ^( DOT $qualifiedIdentifier $ident) )* ) + # Java.g:563:9: ( IDENT -> IDENT ) ( DOT ident= IDENT -> ^( DOT $qualifiedIdentifier $ident) )* + pass + # Java.g:563:9: ( IDENT -> IDENT ) + # Java.g:563:13: IDENT + pass + IDENT220=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_qualifiedIdentifier7722) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT220) + + # AST Rewrite + # elements: IDENT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 563:33: -> IDENT + self._adaptor.addChild(root_0, stream_IDENT.nextNode()) + + + + retval.tree = root_0 + + + + # Java.g:565:9: ( DOT ident= IDENT -> ^( DOT $qualifiedIdentifier $ident) )* + while True: #loop74 + alt74 = 2 + LA74_0 = self.input.LA(1) + + if (LA74_0 == DOT) : + LA74_2 = self.input.LA(2) + + if (LA74_2 == IDENT) : + LA74_3 = self.input.LA(3) + + if (self.synpred101_Java()) : + alt74 = 1 + + + + + + + if alt74 == 1: + # Java.g:565:13: DOT ident= IDENT + pass + DOT221=self.match(self.input, DOT, self.FOLLOW_DOT_in_qualifiedIdentifier7765) + if self._state.backtracking == 0: + stream_DOT.add(DOT221) + ident=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_qualifiedIdentifier7769) + if self._state.backtracking == 0: + stream_IDENT.add(ident) + + # AST Rewrite + # elements: DOT, qualifiedIdentifier, ident + # token labels: ident + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + stream_ident = RewriteRuleTokenStream(self._adaptor, "token ident", ident) + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 565:33: -> ^( DOT $qualifiedIdentifier $ident) + # Java.g:565:37: ^( DOT $qualifiedIdentifier $ident) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + self._adaptor.addChild(root_1, stream_ident.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + else: + break #loop74 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 59, qualifiedIdentifier_StartIndex, success) + + pass + return retval + + # $ANTLR end "qualifiedIdentifier" + + class annotationList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationList" + # Java.g:571:1: annotationList : ( annotation )* -> ^( ANNOTATION_LIST ( annotation )* ) ; + def annotationList(self, ): + + retval = self.annotationList_return() + retval.start = self.input.LT(1) + annotationList_StartIndex = self.input.index() + root_0 = None + + annotation222 = None + + + stream_annotation = RewriteRuleSubtreeStream(self._adaptor, "rule annotation") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 60): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:572:5: ( ( annotation )* -> ^( ANNOTATION_LIST ( annotation )* ) ) + # Java.g:572:9: ( annotation )* + pass + # Java.g:572:9: ( annotation )* + while True: #loop75 + alt75 = 2 + LA75_0 = self.input.LA(1) + + if (LA75_0 == AT) : + LA75_2 = self.input.LA(2) + + if (LA75_2 == IDENT) : + LA75_3 = self.input.LA(3) + + if (self.synpred102_Java()) : + alt75 = 1 + + + + + + + if alt75 == 1: + # Java.g:0:0: annotation + pass + self._state.following.append(self.FOLLOW_annotation_in_annotationList7818) + annotation222 = self.annotation() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotation.add(annotation222.tree) + + + else: + break #loop75 + + # AST Rewrite + # elements: annotation + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 573:9: -> ^( ANNOTATION_LIST ( annotation )* ) + # Java.g:573:13: ^( ANNOTATION_LIST ( annotation )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(ANNOTATION_LIST, "ANNOTATION_LIST"), root_1) + + # Java.g:573:31: ( annotation )* + while stream_annotation.hasNext(): + self._adaptor.addChild(root_1, stream_annotation.nextTree()) + + + stream_annotation.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 60, annotationList_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationList" + + class annotation_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotation_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotation" + # Java.g:576:1: annotation : AT qualifiedIdentifier ( annotationInit )? ; + def annotation(self, ): + + retval = self.annotation_return() + retval.start = self.input.LT(1) + annotation_StartIndex = self.input.index() + root_0 = None + + AT223 = None + qualifiedIdentifier224 = None + + annotationInit225 = None + + + AT223_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 61): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:577:5: ( AT qualifiedIdentifier ( annotationInit )? ) + # Java.g:577:9: AT qualifiedIdentifier ( annotationInit )? + pass + root_0 = self._adaptor.nil() + + AT223=self.match(self.input, AT, self.FOLLOW_AT_in_annotation7856) + if self._state.backtracking == 0: + + AT223_tree = self._adaptor.createWithPayload(AT223) + root_0 = self._adaptor.becomeRoot(AT223_tree, root_0) + + self._state.following.append(self.FOLLOW_qualifiedIdentifier_in_annotation7859) + qualifiedIdentifier224 = self.qualifiedIdentifier() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, qualifiedIdentifier224.tree) + # Java.g:577:33: ( annotationInit )? + alt76 = 2 + LA76_0 = self.input.LA(1) + + if (LA76_0 == LPAREN) : + alt76 = 1 + if alt76 == 1: + # Java.g:0:0: annotationInit + pass + self._state.following.append(self.FOLLOW_annotationInit_in_annotation7861) + annotationInit225 = self.annotationInit() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotationInit225.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 61, annotation_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotation" + + class annotationInit_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationInit_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationInit" + # Java.g:580:1: annotationInit : LPAREN annotationInitializers RPAREN -> ^( ANNOTATION_INIT_BLOCK[$LPAREN, \"ANNOTATION_INIT_BLOCK\"] annotationInitializers ) ; + def annotationInit(self, ): + + retval = self.annotationInit_return() + retval.start = self.input.LT(1) + annotationInit_StartIndex = self.input.index() + root_0 = None + + LPAREN226 = None + RPAREN228 = None + annotationInitializers227 = None + + + LPAREN226_tree = None + RPAREN228_tree = None + stream_RPAREN = RewriteRuleTokenStream(self._adaptor, "token RPAREN") + stream_LPAREN = RewriteRuleTokenStream(self._adaptor, "token LPAREN") + stream_annotationInitializers = RewriteRuleSubtreeStream(self._adaptor, "rule annotationInitializers") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 62): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:581:5: ( LPAREN annotationInitializers RPAREN -> ^( ANNOTATION_INIT_BLOCK[$LPAREN, \"ANNOTATION_INIT_BLOCK\"] annotationInitializers ) ) + # Java.g:581:9: LPAREN annotationInitializers RPAREN + pass + LPAREN226=self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_annotationInit7881) + if self._state.backtracking == 0: + stream_LPAREN.add(LPAREN226) + self._state.following.append(self.FOLLOW_annotationInitializers_in_annotationInit7883) + annotationInitializers227 = self.annotationInitializers() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotationInitializers.add(annotationInitializers227.tree) + RPAREN228=self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_annotationInit7885) + if self._state.backtracking == 0: + stream_RPAREN.add(RPAREN228) + + # AST Rewrite + # elements: annotationInitializers + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 582:9: -> ^( ANNOTATION_INIT_BLOCK[$LPAREN, \"ANNOTATION_INIT_BLOCK\"] annotationInitializers ) + # Java.g:582:13: ^( ANNOTATION_INIT_BLOCK[$LPAREN, \"ANNOTATION_INIT_BLOCK\"] annotationInitializers ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(ANNOTATION_INIT_BLOCK, LPAREN226, "ANNOTATION_INIT_BLOCK"), root_1) + + self._adaptor.addChild(root_1, stream_annotationInitializers.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 62, annotationInit_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationInit" + + class annotationInitializers_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationInitializers_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationInitializers" + # Java.g:585:1: annotationInitializers : ( annotationInitializer ( COMMA annotationInitializer )* -> ^( ANNOTATION_INIT_KEY_LIST ( annotationInitializer )+ ) | annotationElementValue -> ^( ANNOTATION_INIT_DEFAULT_KEY annotationElementValue ) ); + def annotationInitializers(self, ): + + retval = self.annotationInitializers_return() + retval.start = self.input.LT(1) + annotationInitializers_StartIndex = self.input.index() + root_0 = None + + COMMA230 = None + annotationInitializer229 = None + + annotationInitializer231 = None + + annotationElementValue232 = None + + + COMMA230_tree = None + stream_COMMA = RewriteRuleTokenStream(self._adaptor, "token COMMA") + stream_annotationElementValue = RewriteRuleSubtreeStream(self._adaptor, "rule annotationElementValue") + stream_annotationInitializer = RewriteRuleSubtreeStream(self._adaptor, "rule annotationInitializer") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 63): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:586:5: ( annotationInitializer ( COMMA annotationInitializer )* -> ^( ANNOTATION_INIT_KEY_LIST ( annotationInitializer )+ ) | annotationElementValue -> ^( ANNOTATION_INIT_DEFAULT_KEY annotationElementValue ) ) + alt78 = 2 + LA78_0 = self.input.LA(1) + + if (LA78_0 == IDENT) : + LA78_1 = self.input.LA(2) + + if (LA78_1 == ASSIGN) : + alt78 = 1 + elif (LA78_1 == AND or LA78_1 == BIT_SHIFT_RIGHT or (DEC <= LA78_1 <= DIV) or LA78_1 == DOT or (EQUAL <= LA78_1 <= LBRACK) or (LESS_OR_EQUAL <= LA78_1 <= LOGICAL_AND) or (LOGICAL_OR <= LA78_1 <= MINUS) or LA78_1 == MOD or (NOT_EQUAL <= LA78_1 <= OR) or LA78_1 == PLUS or LA78_1 == QUESTION or LA78_1 == RPAREN or LA78_1 == SHIFT_LEFT or LA78_1 == SHIFT_RIGHT or LA78_1 == STAR or LA78_1 == XOR or LA78_1 == INSTANCEOF) : + alt78 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 78, 1, self.input) + + raise nvae + + elif (LA78_0 == AT or LA78_0 == DEC or LA78_0 == INC or LA78_0 == LCURLY or LA78_0 == LESS_THAN or LA78_0 == LOGICAL_NOT or (LPAREN <= LA78_0 <= MINUS) or LA78_0 == NOT or LA78_0 == PLUS or LA78_0 == BOOLEAN or LA78_0 == BYTE or LA78_0 == CHAR or LA78_0 == DOUBLE or LA78_0 == FALSE or LA78_0 == FLOAT or (INT <= LA78_0 <= LONG) or (NEW <= LA78_0 <= NULL) or LA78_0 == SHORT or LA78_0 == SUPER or LA78_0 == THIS or LA78_0 == TRUE or LA78_0 == VOID or (HEX_LITERAL <= LA78_0 <= STRING_LITERAL)) : + alt78 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 78, 0, self.input) + + raise nvae + + if alt78 == 1: + # Java.g:586:9: annotationInitializer ( COMMA annotationInitializer )* + pass + self._state.following.append(self.FOLLOW_annotationInitializer_in_annotationInitializers7922) + annotationInitializer229 = self.annotationInitializer() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotationInitializer.add(annotationInitializer229.tree) + # Java.g:586:31: ( COMMA annotationInitializer )* + while True: #loop77 + alt77 = 2 + LA77_0 = self.input.LA(1) + + if (LA77_0 == COMMA) : + alt77 = 1 + + + if alt77 == 1: + # Java.g:586:32: COMMA annotationInitializer + pass + COMMA230=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_annotationInitializers7925) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA230) + self._state.following.append(self.FOLLOW_annotationInitializer_in_annotationInitializers7927) + annotationInitializer231 = self.annotationInitializer() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotationInitializer.add(annotationInitializer231.tree) + + + else: + break #loop77 + + # AST Rewrite + # elements: annotationInitializer + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 587:9: -> ^( ANNOTATION_INIT_KEY_LIST ( annotationInitializer )+ ) + # Java.g:587:13: ^( ANNOTATION_INIT_KEY_LIST ( annotationInitializer )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(ANNOTATION_INIT_KEY_LIST, "ANNOTATION_INIT_KEY_LIST"), root_1) + + # Java.g:587:40: ( annotationInitializer )+ + if not (stream_annotationInitializer.hasNext()): + raise RewriteEarlyExitException() + + while stream_annotationInitializer.hasNext(): + self._adaptor.addChild(root_1, stream_annotationInitializer.nextTree()) + + + stream_annotationInitializer.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt78 == 2: + # Java.g:588:9: annotationElementValue + pass + self._state.following.append(self.FOLLOW_annotationElementValue_in_annotationInitializers7957) + annotationElementValue232 = self.annotationElementValue() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotationElementValue.add(annotationElementValue232.tree) + + # AST Rewrite + # elements: annotationElementValue + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 589:9: -> ^( ANNOTATION_INIT_DEFAULT_KEY annotationElementValue ) + # Java.g:589:13: ^( ANNOTATION_INIT_DEFAULT_KEY annotationElementValue ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(ANNOTATION_INIT_DEFAULT_KEY, "ANNOTATION_INIT_DEFAULT_KEY"), root_1) + + self._adaptor.addChild(root_1, stream_annotationElementValue.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 63, annotationInitializers_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationInitializers" + + class annotationInitializer_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationInitializer_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationInitializer" + # Java.g:592:1: annotationInitializer : IDENT ASSIGN annotationElementValue ; + def annotationInitializer(self, ): + + retval = self.annotationInitializer_return() + retval.start = self.input.LT(1) + annotationInitializer_StartIndex = self.input.index() + root_0 = None + + IDENT233 = None + ASSIGN234 = None + annotationElementValue235 = None + + + IDENT233_tree = None + ASSIGN234_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 64): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:593:5: ( IDENT ASSIGN annotationElementValue ) + # Java.g:593:9: IDENT ASSIGN annotationElementValue + pass + root_0 = self._adaptor.nil() + + IDENT233=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_annotationInitializer7994) + if self._state.backtracking == 0: + + IDENT233_tree = self._adaptor.createWithPayload(IDENT233) + root_0 = self._adaptor.becomeRoot(IDENT233_tree, root_0) + + ASSIGN234=self.match(self.input, ASSIGN, self.FOLLOW_ASSIGN_in_annotationInitializer7997) + self._state.following.append(self.FOLLOW_annotationElementValue_in_annotationInitializer8000) + annotationElementValue235 = self.annotationElementValue() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotationElementValue235.tree) + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 64, annotationInitializer_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationInitializer" + + class annotationElementValue_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationElementValue_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationElementValue" + # Java.g:596:1: annotationElementValue : ( annotationElementValueExpression | annotation | annotationElementValueArrayInitializer ); + def annotationElementValue(self, ): + + retval = self.annotationElementValue_return() + retval.start = self.input.LT(1) + annotationElementValue_StartIndex = self.input.index() + root_0 = None + + annotationElementValueExpression236 = None + + annotation237 = None + + annotationElementValueArrayInitializer238 = None + + + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 65): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:597:5: ( annotationElementValueExpression | annotation | annotationElementValueArrayInitializer ) + alt79 = 3 + LA79 = self.input.LA(1) + if LA79 == DEC or LA79 == INC or LA79 == LESS_THAN or LA79 == LOGICAL_NOT or LA79 == LPAREN or LA79 == MINUS or LA79 == NOT or LA79 == PLUS or LA79 == BOOLEAN or LA79 == BYTE or LA79 == CHAR or LA79 == DOUBLE or LA79 == FALSE or LA79 == FLOAT or LA79 == INT or LA79 == LONG or LA79 == NEW or LA79 == NULL or LA79 == SHORT or LA79 == SUPER or LA79 == THIS or LA79 == TRUE or LA79 == VOID or LA79 == IDENT or LA79 == HEX_LITERAL or LA79 == OCTAL_LITERAL or LA79 == DECIMAL_LITERAL or LA79 == FLOATING_POINT_LITERAL or LA79 == CHARACTER_LITERAL or LA79 == STRING_LITERAL: + alt79 = 1 + elif LA79 == AT: + alt79 = 2 + elif LA79 == LCURLY: + alt79 = 3 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 79, 0, self.input) + + raise nvae + + if alt79 == 1: + # Java.g:597:9: annotationElementValueExpression + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_annotationElementValueExpression_in_annotationElementValue8019) + annotationElementValueExpression236 = self.annotationElementValueExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotationElementValueExpression236.tree) + + + elif alt79 == 2: + # Java.g:598:9: annotation + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_annotation_in_annotationElementValue8029) + annotation237 = self.annotation() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotation237.tree) + + + elif alt79 == 3: + # Java.g:599:9: annotationElementValueArrayInitializer + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_annotationElementValueArrayInitializer_in_annotationElementValue8039) + annotationElementValueArrayInitializer238 = self.annotationElementValueArrayInitializer() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotationElementValueArrayInitializer238.tree) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 65, annotationElementValue_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationElementValue" + + class annotationElementValueExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationElementValueExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationElementValueExpression" + # Java.g:602:1: annotationElementValueExpression : conditionalExpression -> ^( EXPR conditionalExpression ) ; + def annotationElementValueExpression(self, ): + + retval = self.annotationElementValueExpression_return() + retval.start = self.input.LT(1) + annotationElementValueExpression_StartIndex = self.input.index() + root_0 = None + + conditionalExpression239 = None + + + stream_conditionalExpression = RewriteRuleSubtreeStream(self._adaptor, "rule conditionalExpression") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 66): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:603:5: ( conditionalExpression -> ^( EXPR conditionalExpression ) ) + # Java.g:603:9: conditionalExpression + pass + self._state.following.append(self.FOLLOW_conditionalExpression_in_annotationElementValueExpression8058) + conditionalExpression239 = self.conditionalExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_conditionalExpression.add(conditionalExpression239.tree) + + # AST Rewrite + # elements: conditionalExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 604:9: -> ^( EXPR conditionalExpression ) + # Java.g:604:13: ^( EXPR conditionalExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(EXPR, "EXPR"), root_1) + + self._adaptor.addChild(root_1, stream_conditionalExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 66, annotationElementValueExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationElementValueExpression" + + class annotationElementValueArrayInitializer_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationElementValueArrayInitializer_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationElementValueArrayInitializer" + # Java.g:607:1: annotationElementValueArrayInitializer : LCURLY ( annotationElementValue ( COMMA annotationElementValue )* )? ( COMMA )? RCURLY -> ^( ANNOTATION_INIT_ARRAY_ELEMENT[$LCURLY, \"ANNOTATION_ELEM_VALUE_ARRAY_INIT\"] ( annotationElementValue )* ) ; + def annotationElementValueArrayInitializer(self, ): + + retval = self.annotationElementValueArrayInitializer_return() + retval.start = self.input.LT(1) + annotationElementValueArrayInitializer_StartIndex = self.input.index() + root_0 = None + + LCURLY240 = None + COMMA242 = None + COMMA244 = None + RCURLY245 = None + annotationElementValue241 = None + + annotationElementValue243 = None + + + LCURLY240_tree = None + COMMA242_tree = None + COMMA244_tree = None + RCURLY245_tree = None + stream_LCURLY = RewriteRuleTokenStream(self._adaptor, "token LCURLY") + stream_COMMA = RewriteRuleTokenStream(self._adaptor, "token COMMA") + stream_RCURLY = RewriteRuleTokenStream(self._adaptor, "token RCURLY") + stream_annotationElementValue = RewriteRuleSubtreeStream(self._adaptor, "rule annotationElementValue") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 67): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:608:5: ( LCURLY ( annotationElementValue ( COMMA annotationElementValue )* )? ( COMMA )? RCURLY -> ^( ANNOTATION_INIT_ARRAY_ELEMENT[$LCURLY, \"ANNOTATION_ELEM_VALUE_ARRAY_INIT\"] ( annotationElementValue )* ) ) + # Java.g:608:9: LCURLY ( annotationElementValue ( COMMA annotationElementValue )* )? ( COMMA )? RCURLY + pass + LCURLY240=self.match(self.input, LCURLY, self.FOLLOW_LCURLY_in_annotationElementValueArrayInitializer8094) + if self._state.backtracking == 0: + stream_LCURLY.add(LCURLY240) + # Java.g:608:16: ( annotationElementValue ( COMMA annotationElementValue )* )? + alt81 = 2 + LA81_0 = self.input.LA(1) + + if (LA81_0 == AT or LA81_0 == DEC or LA81_0 == INC or LA81_0 == LCURLY or LA81_0 == LESS_THAN or LA81_0 == LOGICAL_NOT or (LPAREN <= LA81_0 <= MINUS) or LA81_0 == NOT or LA81_0 == PLUS or LA81_0 == BOOLEAN or LA81_0 == BYTE or LA81_0 == CHAR or LA81_0 == DOUBLE or LA81_0 == FALSE or LA81_0 == FLOAT or (INT <= LA81_0 <= LONG) or (NEW <= LA81_0 <= NULL) or LA81_0 == SHORT or LA81_0 == SUPER or LA81_0 == THIS or LA81_0 == TRUE or LA81_0 == VOID or (IDENT <= LA81_0 <= STRING_LITERAL)) : + alt81 = 1 + if alt81 == 1: + # Java.g:608:17: annotationElementValue ( COMMA annotationElementValue )* + pass + self._state.following.append(self.FOLLOW_annotationElementValue_in_annotationElementValueArrayInitializer8097) + annotationElementValue241 = self.annotationElementValue() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotationElementValue.add(annotationElementValue241.tree) + # Java.g:608:40: ( COMMA annotationElementValue )* + while True: #loop80 + alt80 = 2 + LA80_0 = self.input.LA(1) + + if (LA80_0 == COMMA) : + LA80_1 = self.input.LA(2) + + if (LA80_1 == AT or LA80_1 == DEC or LA80_1 == INC or LA80_1 == LCURLY or LA80_1 == LESS_THAN or LA80_1 == LOGICAL_NOT or (LPAREN <= LA80_1 <= MINUS) or LA80_1 == NOT or LA80_1 == PLUS or LA80_1 == BOOLEAN or LA80_1 == BYTE or LA80_1 == CHAR or LA80_1 == DOUBLE or LA80_1 == FALSE or LA80_1 == FLOAT or (INT <= LA80_1 <= LONG) or (NEW <= LA80_1 <= NULL) or LA80_1 == SHORT or LA80_1 == SUPER or LA80_1 == THIS or LA80_1 == TRUE or LA80_1 == VOID or (IDENT <= LA80_1 <= STRING_LITERAL)) : + alt80 = 1 + + + + + if alt80 == 1: + # Java.g:608:41: COMMA annotationElementValue + pass + COMMA242=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_annotationElementValueArrayInitializer8100) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA242) + self._state.following.append(self.FOLLOW_annotationElementValue_in_annotationElementValueArrayInitializer8102) + annotationElementValue243 = self.annotationElementValue() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotationElementValue.add(annotationElementValue243.tree) + + + else: + break #loop80 + + + + # Java.g:608:74: ( COMMA )? + alt82 = 2 + LA82_0 = self.input.LA(1) + + if (LA82_0 == COMMA) : + alt82 = 1 + if alt82 == 1: + # Java.g:608:75: COMMA + pass + COMMA244=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_annotationElementValueArrayInitializer8109) + if self._state.backtracking == 0: + stream_COMMA.add(COMMA244) + + + + RCURLY245=self.match(self.input, RCURLY, self.FOLLOW_RCURLY_in_annotationElementValueArrayInitializer8113) + if self._state.backtracking == 0: + stream_RCURLY.add(RCURLY245) + + # AST Rewrite + # elements: annotationElementValue + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 609:9: -> ^( ANNOTATION_INIT_ARRAY_ELEMENT[$LCURLY, \"ANNOTATION_ELEM_VALUE_ARRAY_INIT\"] ( annotationElementValue )* ) + # Java.g:609:13: ^( ANNOTATION_INIT_ARRAY_ELEMENT[$LCURLY, \"ANNOTATION_ELEM_VALUE_ARRAY_INIT\"] ( annotationElementValue )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(ANNOTATION_INIT_ARRAY_ELEMENT, LCURLY240, "ANNOTATION_ELEM_VALUE_ARRAY_INIT"), root_1) + + # Java.g:609:90: ( annotationElementValue )* + while stream_annotationElementValue.hasNext(): + self._adaptor.addChild(root_1, stream_annotationElementValue.nextTree()) + + + stream_annotationElementValue.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 67, annotationElementValueArrayInitializer_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationElementValueArrayInitializer" + + class annotationTypeDeclaration_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationTypeDeclaration_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationTypeDeclaration" + # Java.g:612:1: annotationTypeDeclaration[modifiers] : AT INTERFACE IDENT annotationBody -> ^( AT IDENT annotationBody ) ; + def annotationTypeDeclaration(self, modifiers): + + retval = self.annotationTypeDeclaration_return() + retval.start = self.input.LT(1) + annotationTypeDeclaration_StartIndex = self.input.index() + root_0 = None + + AT246 = None + INTERFACE247 = None + IDENT248 = None + annotationBody249 = None + + + AT246_tree = None + INTERFACE247_tree = None + IDENT248_tree = None + stream_AT = RewriteRuleTokenStream(self._adaptor, "token AT") + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_INTERFACE = RewriteRuleTokenStream(self._adaptor, "token INTERFACE") + stream_annotationBody = RewriteRuleSubtreeStream(self._adaptor, "rule annotationBody") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 68): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:613:5: ( AT INTERFACE IDENT annotationBody -> ^( AT IDENT annotationBody ) ) + # Java.g:613:9: AT INTERFACE IDENT annotationBody + pass + AT246=self.match(self.input, AT, self.FOLLOW_AT_in_annotationTypeDeclaration8152) + if self._state.backtracking == 0: + stream_AT.add(AT246) + INTERFACE247=self.match(self.input, INTERFACE, self.FOLLOW_INTERFACE_in_annotationTypeDeclaration8154) + if self._state.backtracking == 0: + stream_INTERFACE.add(INTERFACE247) + IDENT248=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_annotationTypeDeclaration8156) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT248) + self._state.following.append(self.FOLLOW_annotationBody_in_annotationTypeDeclaration8158) + annotationBody249 = self.annotationBody() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotationBody.add(annotationBody249.tree) + + # AST Rewrite + # elements: AT, IDENT, annotationBody + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 614:9: -> ^( AT IDENT annotationBody ) + # Java.g:614:12: ^( AT IDENT annotationBody ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_AT.nextNode(), root_1) + + self._adaptor.addChild(root_1, modifiers) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + self._adaptor.addChild(root_1, stream_annotationBody.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 68, annotationTypeDeclaration_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationTypeDeclaration" + + class annotationBody_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationBody_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationBody" + # Java.g:617:1: annotationBody : LCURLY ( annotationScopeDeclarations )* RCURLY -> ^( ANNOTATION_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( annotationScopeDeclarations )* ) ; + def annotationBody(self, ): + + retval = self.annotationBody_return() + retval.start = self.input.LT(1) + annotationBody_StartIndex = self.input.index() + root_0 = None + + LCURLY250 = None + RCURLY252 = None + annotationScopeDeclarations251 = None + + + LCURLY250_tree = None + RCURLY252_tree = None + stream_LCURLY = RewriteRuleTokenStream(self._adaptor, "token LCURLY") + stream_RCURLY = RewriteRuleTokenStream(self._adaptor, "token RCURLY") + stream_annotationScopeDeclarations = RewriteRuleSubtreeStream(self._adaptor, "rule annotationScopeDeclarations") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 69): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:618:5: ( LCURLY ( annotationScopeDeclarations )* RCURLY -> ^( ANNOTATION_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( annotationScopeDeclarations )* ) ) + # Java.g:618:9: LCURLY ( annotationScopeDeclarations )* RCURLY + pass + LCURLY250=self.match(self.input, LCURLY, self.FOLLOW_LCURLY_in_annotationBody8197) + if self._state.backtracking == 0: + stream_LCURLY.add(LCURLY250) + # Java.g:618:16: ( annotationScopeDeclarations )* + while True: #loop83 + alt83 = 2 + LA83_0 = self.input.LA(1) + + if (LA83_0 == AT or LA83_0 == LESS_THAN or LA83_0 == ABSTRACT or LA83_0 == BOOLEAN or LA83_0 == BYTE or (CHAR <= LA83_0 <= CLASS) or LA83_0 == DOUBLE or LA83_0 == ENUM or LA83_0 == FINAL or LA83_0 == FLOAT or LA83_0 == INTERFACE or (INT <= LA83_0 <= NATIVE) or (PRIVATE <= LA83_0 <= PUBLIC) or (SHORT <= LA83_0 <= STRICTFP) or LA83_0 == SYNCHRONIZED or LA83_0 == TRANSIENT or (VOID <= LA83_0 <= VOLATILE) or LA83_0 == IDENT) : + alt83 = 1 + + + if alt83 == 1: + # Java.g:0:0: annotationScopeDeclarations + pass + self._state.following.append(self.FOLLOW_annotationScopeDeclarations_in_annotationBody8199) + annotationScopeDeclarations251 = self.annotationScopeDeclarations() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotationScopeDeclarations.add(annotationScopeDeclarations251.tree) + + + else: + break #loop83 + RCURLY252=self.match(self.input, RCURLY, self.FOLLOW_RCURLY_in_annotationBody8202) + if self._state.backtracking == 0: + stream_RCURLY.add(RCURLY252) + + # AST Rewrite + # elements: annotationScopeDeclarations + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 619:9: -> ^( ANNOTATION_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( annotationScopeDeclarations )* ) + # Java.g:619:13: ^( ANNOTATION_TOP_LEVEL_SCOPE[$LCURLY, \"CLASS_TOP_LEVEL_SCOPE\"] ( annotationScopeDeclarations )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(ANNOTATION_TOP_LEVEL_SCOPE, LCURLY250, "CLASS_TOP_LEVEL_SCOPE"), root_1) + + # Java.g:619:76: ( annotationScopeDeclarations )* + while stream_annotationScopeDeclarations.hasNext(): + self._adaptor.addChild(root_1, stream_annotationScopeDeclarations.nextTree()) + + + stream_annotationScopeDeclarations.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 69, annotationBody_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationBody" + + class annotationScopeDeclarations_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationScopeDeclarations_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationScopeDeclarations" + # Java.g:622:1: annotationScopeDeclarations : ( modifierList type ( IDENT LPAREN RPAREN ( annotationDefaultValue )? SEMI -> ^( ANNOTATION_METHOD_DECL modifierList type IDENT ( annotationDefaultValue )? ) | classFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) ) | typeDeclaration ); + def annotationScopeDeclarations(self, ): + + retval = self.annotationScopeDeclarations_return() + retval.start = self.input.LT(1) + annotationScopeDeclarations_StartIndex = self.input.index() + root_0 = None + + IDENT255 = None + LPAREN256 = None + RPAREN257 = None + SEMI259 = None + SEMI261 = None + modifierList253 = None + + type254 = None + + annotationDefaultValue258 = None + + classFieldDeclaratorList260 = None + + typeDeclaration262 = None + + + IDENT255_tree = None + LPAREN256_tree = None + RPAREN257_tree = None + SEMI259_tree = None + SEMI261_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_RPAREN = RewriteRuleTokenStream(self._adaptor, "token RPAREN") + stream_SEMI = RewriteRuleTokenStream(self._adaptor, "token SEMI") + stream_LPAREN = RewriteRuleTokenStream(self._adaptor, "token LPAREN") + stream_modifierList = RewriteRuleSubtreeStream(self._adaptor, "rule modifierList") + stream_annotationDefaultValue = RewriteRuleSubtreeStream(self._adaptor, "rule annotationDefaultValue") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + stream_classFieldDeclaratorList = RewriteRuleSubtreeStream(self._adaptor, "rule classFieldDeclaratorList") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 70): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:623:5: ( modifierList type ( IDENT LPAREN RPAREN ( annotationDefaultValue )? SEMI -> ^( ANNOTATION_METHOD_DECL modifierList type IDENT ( annotationDefaultValue )? ) | classFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) ) | typeDeclaration ) + alt86 = 2 + alt86 = self.dfa86.predict(self.input) + if alt86 == 1: + # Java.g:623:9: modifierList type ( IDENT LPAREN RPAREN ( annotationDefaultValue )? SEMI -> ^( ANNOTATION_METHOD_DECL modifierList type IDENT ( annotationDefaultValue )? ) | classFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) ) + pass + self._state.following.append(self.FOLLOW_modifierList_in_annotationScopeDeclarations8240) + modifierList253 = self.modifierList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_modifierList.add(modifierList253.tree) + self._state.following.append(self.FOLLOW_type_in_annotationScopeDeclarations8242) + type254 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type254.tree) + # Java.g:624:9: ( IDENT LPAREN RPAREN ( annotationDefaultValue )? SEMI -> ^( ANNOTATION_METHOD_DECL modifierList type IDENT ( annotationDefaultValue )? ) | classFieldDeclaratorList SEMI -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) ) + alt85 = 2 + LA85_0 = self.input.LA(1) + + if (LA85_0 == IDENT) : + LA85_1 = self.input.LA(2) + + if (LA85_1 == LPAREN) : + alt85 = 1 + elif (LA85_1 == ASSIGN or LA85_1 == COMMA or LA85_1 == LBRACK or LA85_1 == SEMI) : + alt85 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 85, 1, self.input) + + raise nvae + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 85, 0, self.input) + + raise nvae + + if alt85 == 1: + # Java.g:624:13: IDENT LPAREN RPAREN ( annotationDefaultValue )? SEMI + pass + IDENT255=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_annotationScopeDeclarations8256) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT255) + LPAREN256=self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_annotationScopeDeclarations8258) + if self._state.backtracking == 0: + stream_LPAREN.add(LPAREN256) + RPAREN257=self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_annotationScopeDeclarations8260) + if self._state.backtracking == 0: + stream_RPAREN.add(RPAREN257) + # Java.g:624:33: ( annotationDefaultValue )? + alt84 = 2 + LA84_0 = self.input.LA(1) + + if (LA84_0 == DEFAULT) : + alt84 = 1 + if alt84 == 1: + # Java.g:0:0: annotationDefaultValue + pass + self._state.following.append(self.FOLLOW_annotationDefaultValue_in_annotationScopeDeclarations8262) + annotationDefaultValue258 = self.annotationDefaultValue() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_annotationDefaultValue.add(annotationDefaultValue258.tree) + + + + SEMI259=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_annotationScopeDeclarations8265) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI259) + + # AST Rewrite + # elements: annotationDefaultValue, IDENT, modifierList, type + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 625:13: -> ^( ANNOTATION_METHOD_DECL modifierList type IDENT ( annotationDefaultValue )? ) + # Java.g:625:17: ^( ANNOTATION_METHOD_DECL modifierList type IDENT ( annotationDefaultValue )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(ANNOTATION_METHOD_DECL, "ANNOTATION_METHOD_DECL"), root_1) + + self._adaptor.addChild(root_1, stream_modifierList.nextTree()) + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + # Java.g:625:66: ( annotationDefaultValue )? + if stream_annotationDefaultValue.hasNext(): + self._adaptor.addChild(root_1, stream_annotationDefaultValue.nextTree()) + + + stream_annotationDefaultValue.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt85 == 2: + # Java.g:626:13: classFieldDeclaratorList SEMI + pass + self._state.following.append(self.FOLLOW_classFieldDeclaratorList_in_annotationScopeDeclarations8307) + classFieldDeclaratorList260 = self.classFieldDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classFieldDeclaratorList.add(classFieldDeclaratorList260.tree) + SEMI261=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_annotationScopeDeclarations8309) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI261) + + # AST Rewrite + # elements: classFieldDeclaratorList, type, modifierList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 627:13: -> ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) + # Java.g:627:17: ^( VAR_DECLARATION modifierList type classFieldDeclaratorList ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VAR_DECLARATION, "VAR_DECLARATION"), root_1) + + self._adaptor.addChild(root_1, stream_modifierList.nextTree()) + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_classFieldDeclaratorList.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt86 == 2: + # Java.g:629:9: typeDeclaration + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_typeDeclaration_in_annotationScopeDeclarations8354) + typeDeclaration262 = self.typeDeclaration() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, typeDeclaration262.tree) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 70, annotationScopeDeclarations_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationScopeDeclarations" + + class annotationDefaultValue_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.annotationDefaultValue_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "annotationDefaultValue" + # Java.g:632:1: annotationDefaultValue : DEFAULT annotationElementValue ; + def annotationDefaultValue(self, ): + + retval = self.annotationDefaultValue_return() + retval.start = self.input.LT(1) + annotationDefaultValue_StartIndex = self.input.index() + root_0 = None + + DEFAULT263 = None + annotationElementValue264 = None + + + DEFAULT263_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 71): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:633:5: ( DEFAULT annotationElementValue ) + # Java.g:633:9: DEFAULT annotationElementValue + pass + root_0 = self._adaptor.nil() + + DEFAULT263=self.match(self.input, DEFAULT, self.FOLLOW_DEFAULT_in_annotationDefaultValue8373) + if self._state.backtracking == 0: + + DEFAULT263_tree = self._adaptor.createWithPayload(DEFAULT263) + root_0 = self._adaptor.becomeRoot(DEFAULT263_tree, root_0) + + self._state.following.append(self.FOLLOW_annotationElementValue_in_annotationDefaultValue8376) + annotationElementValue264 = self.annotationElementValue() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, annotationElementValue264.tree) + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 71, annotationDefaultValue_StartIndex, success) + + pass + return retval + + # $ANTLR end "annotationDefaultValue" + + class block_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.block_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "block" + # Java.g:638:1: block : LCURLY ( blockStatement )* RCURLY -> ^( BLOCK_SCOPE[$LCURLY, \"BLOCK_SCOPE\"] ( blockStatement )* ) ; + def block(self, ): + + retval = self.block_return() + retval.start = self.input.LT(1) + block_StartIndex = self.input.index() + root_0 = None + + LCURLY265 = None + RCURLY267 = None + blockStatement266 = None + + + LCURLY265_tree = None + RCURLY267_tree = None + stream_LCURLY = RewriteRuleTokenStream(self._adaptor, "token LCURLY") + stream_RCURLY = RewriteRuleTokenStream(self._adaptor, "token RCURLY") + stream_blockStatement = RewriteRuleSubtreeStream(self._adaptor, "rule blockStatement") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 72): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:639:5: ( LCURLY ( blockStatement )* RCURLY -> ^( BLOCK_SCOPE[$LCURLY, \"BLOCK_SCOPE\"] ( blockStatement )* ) ) + # Java.g:639:9: LCURLY ( blockStatement )* RCURLY + pass + LCURLY265=self.match(self.input, LCURLY, self.FOLLOW_LCURLY_in_block8397) + if self._state.backtracking == 0: + stream_LCURLY.add(LCURLY265) + # Java.g:639:16: ( blockStatement )* + while True: #loop87 + alt87 = 2 + LA87_0 = self.input.LA(1) + + if (LA87_0 == AT or LA87_0 == DEC or LA87_0 == INC or LA87_0 == LCURLY or LA87_0 == LESS_THAN or LA87_0 == LOGICAL_NOT or (LPAREN <= LA87_0 <= MINUS) or LA87_0 == NOT or LA87_0 == PLUS or LA87_0 == SEMI or (ABSTRACT <= LA87_0 <= BYTE) or (CHAR <= LA87_0 <= CONTINUE) or (DO <= LA87_0 <= DOUBLE) or LA87_0 == ENUM or (FALSE <= LA87_0 <= FINAL) or (FLOAT <= LA87_0 <= IF) or LA87_0 == INTERFACE or (INT <= LA87_0 <= NULL) or (PRIVATE <= LA87_0 <= THROW) or (TRANSIENT <= LA87_0 <= WHILE) or (IDENT <= LA87_0 <= STRING_LITERAL)) : + alt87 = 1 + + + if alt87 == 1: + # Java.g:0:0: blockStatement + pass + self._state.following.append(self.FOLLOW_blockStatement_in_block8399) + blockStatement266 = self.blockStatement() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_blockStatement.add(blockStatement266.tree) + + + else: + break #loop87 + RCURLY267=self.match(self.input, RCURLY, self.FOLLOW_RCURLY_in_block8402) + if self._state.backtracking == 0: + stream_RCURLY.add(RCURLY267) + + # AST Rewrite + # elements: blockStatement + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 640:9: -> ^( BLOCK_SCOPE[$LCURLY, \"BLOCK_SCOPE\"] ( blockStatement )* ) + # Java.g:640:13: ^( BLOCK_SCOPE[$LCURLY, \"BLOCK_SCOPE\"] ( blockStatement )* ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(BLOCK_SCOPE, LCURLY265, "BLOCK_SCOPE"), root_1) + + # Java.g:640:51: ( blockStatement )* + while stream_blockStatement.hasNext(): + self._adaptor.addChild(root_1, stream_blockStatement.nextTree()) + + + stream_blockStatement.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 72, block_StartIndex, success) + + pass + return retval + + # $ANTLR end "block" + + class blockStatement_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.blockStatement_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "blockStatement" + # Java.g:643:1: blockStatement : ( localVariableDeclaration SEMI | typeDeclaration | statement ); + def blockStatement(self, ): + + retval = self.blockStatement_return() + retval.start = self.input.LT(1) + blockStatement_StartIndex = self.input.index() + root_0 = None + + SEMI269 = None + localVariableDeclaration268 = None + + typeDeclaration270 = None + + statement271 = None + + + SEMI269_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 73): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:644:5: ( localVariableDeclaration SEMI | typeDeclaration | statement ) + alt88 = 3 + alt88 = self.dfa88.predict(self.input) + if alt88 == 1: + # Java.g:644:9: localVariableDeclaration SEMI + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_localVariableDeclaration_in_blockStatement8440) + localVariableDeclaration268 = self.localVariableDeclaration() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, localVariableDeclaration268.tree) + SEMI269=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_blockStatement8442) + + + elif alt88 == 2: + # Java.g:645:9: typeDeclaration + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_typeDeclaration_in_blockStatement8453) + typeDeclaration270 = self.typeDeclaration() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, typeDeclaration270.tree) + + + elif alt88 == 3: + # Java.g:646:9: statement + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_statement_in_blockStatement8463) + statement271 = self.statement() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, statement271.tree) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 73, blockStatement_StartIndex, success) + + pass + return retval + + # $ANTLR end "blockStatement" + + class localVariableDeclaration_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.localVariableDeclaration_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "localVariableDeclaration" + # Java.g:649:1: localVariableDeclaration : localModifierList type classFieldDeclaratorList -> ^( VAR_DECLARATION localModifierList type classFieldDeclaratorList ) ; + def localVariableDeclaration(self, ): + + retval = self.localVariableDeclaration_return() + retval.start = self.input.LT(1) + localVariableDeclaration_StartIndex = self.input.index() + root_0 = None + + localModifierList272 = None + + type273 = None + + classFieldDeclaratorList274 = None + + + stream_localModifierList = RewriteRuleSubtreeStream(self._adaptor, "rule localModifierList") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + stream_classFieldDeclaratorList = RewriteRuleSubtreeStream(self._adaptor, "rule classFieldDeclaratorList") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 74): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:650:5: ( localModifierList type classFieldDeclaratorList -> ^( VAR_DECLARATION localModifierList type classFieldDeclaratorList ) ) + # Java.g:650:9: localModifierList type classFieldDeclaratorList + pass + self._state.following.append(self.FOLLOW_localModifierList_in_localVariableDeclaration8482) + localModifierList272 = self.localModifierList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_localModifierList.add(localModifierList272.tree) + self._state.following.append(self.FOLLOW_type_in_localVariableDeclaration8484) + type273 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type273.tree) + self._state.following.append(self.FOLLOW_classFieldDeclaratorList_in_localVariableDeclaration8486) + classFieldDeclaratorList274 = self.classFieldDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classFieldDeclaratorList.add(classFieldDeclaratorList274.tree) + + # AST Rewrite + # elements: type, classFieldDeclaratorList, localModifierList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 651:9: -> ^( VAR_DECLARATION localModifierList type classFieldDeclaratorList ) + # Java.g:651:13: ^( VAR_DECLARATION localModifierList type classFieldDeclaratorList ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(VAR_DECLARATION, "VAR_DECLARATION"), root_1) + + self._adaptor.addChild(root_1, stream_localModifierList.nextTree()) + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_classFieldDeclaratorList.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 74, localVariableDeclaration_StartIndex, success) + + pass + return retval + + # $ANTLR end "localVariableDeclaration" + + class statement_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.statement_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "statement" + # Java.g:655:1: statement : ( block | ASSERT expr1= expression ( COLON expr2= expression SEMI -> ^( ASSERT $expr1 $expr2) | SEMI -> ^( ASSERT $expr1) ) | IF parenthesizedExpression ifStat= statement ( ELSE elseStat= statement -> ^( IF parenthesizedExpression $ifStat $elseStat) | -> ^( IF parenthesizedExpression $ifStat) ) | FOR LPAREN ( forInit SEMI forCondition SEMI forUpdater RPAREN statement -> ^( FOR forInit forCondition forUpdater statement ) | localModifierList type IDENT COLON expression RPAREN statement -> ^( FOR_EACH[$FOR, \"FOR_EACH\"] localModifierList type IDENT expression statement ) ) | WHILE parenthesizedExpression statement -> ^( WHILE parenthesizedExpression statement ) | DO statement WHILE parenthesizedExpression SEMI -> ^( DO statement parenthesizedExpression ) | TRY block ( catches ( finallyClause )? | finallyClause ) -> ^( TRY block ( catches )? ( finallyClause )? ) | SWITCH parenthesizedExpression LCURLY ( switchBlockLabels )? RCURLY -> ^( SWITCH parenthesizedExpression ( switchBlockLabels )? ) | SYNCHRONIZED parenthesizedExpression block -> ^( SYNCHRONIZED parenthesizedExpression block ) | RETURN ( expression )? SEMI -> ^( RETURN ( expression )? ) | THROW expression SEMI -> ^( THROW expression ) | BREAK ( IDENT )? SEMI -> ^( BREAK ( IDENT )? ) | CONTINUE ( IDENT )? SEMI -> ^( CONTINUE ( IDENT )? ) | IDENT COLON statement -> ^( LABELED_STATEMENT IDENT statement ) | expression SEMI | SEMI ); + def statement(self, ): + + retval = self.statement_return() + retval.start = self.input.LT(1) + statement_StartIndex = self.input.index() + root_0 = None + + ASSERT276 = None + COLON277 = None + SEMI278 = None + SEMI279 = None + IF280 = None + ELSE282 = None + FOR283 = None + LPAREN284 = None + SEMI286 = None + SEMI288 = None + RPAREN290 = None + IDENT294 = None + COLON295 = None + RPAREN297 = None + WHILE299 = None + DO302 = None + WHILE304 = None + SEMI306 = None + TRY307 = None + SWITCH312 = None + LCURLY314 = None + RCURLY316 = None + SYNCHRONIZED317 = None + RETURN320 = None + SEMI322 = None + THROW323 = None + SEMI325 = None + BREAK326 = None + IDENT327 = None + SEMI328 = None + CONTINUE329 = None + IDENT330 = None + SEMI331 = None + IDENT332 = None + COLON333 = None + SEMI336 = None + SEMI337 = None + expr1 = None + + expr2 = None + + ifStat = None + + elseStat = None + + block275 = None + + parenthesizedExpression281 = None + + forInit285 = None + + forCondition287 = None + + forUpdater289 = None + + statement291 = None + + localModifierList292 = None + + type293 = None + + expression296 = None + + statement298 = None + + parenthesizedExpression300 = None + + statement301 = None + + statement303 = None + + parenthesizedExpression305 = None + + block308 = None + + catches309 = None + + finallyClause310 = None + + finallyClause311 = None + + parenthesizedExpression313 = None + + switchBlockLabels315 = None + + parenthesizedExpression318 = None + + block319 = None + + expression321 = None + + expression324 = None + + statement334 = None + + expression335 = None + + + ASSERT276_tree = None + COLON277_tree = None + SEMI278_tree = None + SEMI279_tree = None + IF280_tree = None + ELSE282_tree = None + FOR283_tree = None + LPAREN284_tree = None + SEMI286_tree = None + SEMI288_tree = None + RPAREN290_tree = None + IDENT294_tree = None + COLON295_tree = None + RPAREN297_tree = None + WHILE299_tree = None + DO302_tree = None + WHILE304_tree = None + SEMI306_tree = None + TRY307_tree = None + SWITCH312_tree = None + LCURLY314_tree = None + RCURLY316_tree = None + SYNCHRONIZED317_tree = None + RETURN320_tree = None + SEMI322_tree = None + THROW323_tree = None + SEMI325_tree = None + BREAK326_tree = None + IDENT327_tree = None + SEMI328_tree = None + CONTINUE329_tree = None + IDENT330_tree = None + SEMI331_tree = None + IDENT332_tree = None + COLON333_tree = None + SEMI336_tree = None + SEMI337_tree = None + stream_COLON = RewriteRuleTokenStream(self._adaptor, "token COLON") + stream_RPAREN = RewriteRuleTokenStream(self._adaptor, "token RPAREN") + stream_SYNCHRONIZED = RewriteRuleTokenStream(self._adaptor, "token SYNCHRONIZED") + stream_WHILE = RewriteRuleTokenStream(self._adaptor, "token WHILE") + stream_CONTINUE = RewriteRuleTokenStream(self._adaptor, "token CONTINUE") + stream_SWITCH = RewriteRuleTokenStream(self._adaptor, "token SWITCH") + stream_RCURLY = RewriteRuleTokenStream(self._adaptor, "token RCURLY") + stream_ELSE = RewriteRuleTokenStream(self._adaptor, "token ELSE") + stream_RETURN = RewriteRuleTokenStream(self._adaptor, "token RETURN") + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_FOR = RewriteRuleTokenStream(self._adaptor, "token FOR") + stream_DO = RewriteRuleTokenStream(self._adaptor, "token DO") + stream_LCURLY = RewriteRuleTokenStream(self._adaptor, "token LCURLY") + stream_SEMI = RewriteRuleTokenStream(self._adaptor, "token SEMI") + stream_ASSERT = RewriteRuleTokenStream(self._adaptor, "token ASSERT") + stream_BREAK = RewriteRuleTokenStream(self._adaptor, "token BREAK") + stream_THROW = RewriteRuleTokenStream(self._adaptor, "token THROW") + stream_TRY = RewriteRuleTokenStream(self._adaptor, "token TRY") + stream_LPAREN = RewriteRuleTokenStream(self._adaptor, "token LPAREN") + stream_IF = RewriteRuleTokenStream(self._adaptor, "token IF") + stream_statement = RewriteRuleSubtreeStream(self._adaptor, "rule statement") + stream_expression = RewriteRuleSubtreeStream(self._adaptor, "rule expression") + stream_finallyClause = RewriteRuleSubtreeStream(self._adaptor, "rule finallyClause") + stream_catches = RewriteRuleSubtreeStream(self._adaptor, "rule catches") + stream_forUpdater = RewriteRuleSubtreeStream(self._adaptor, "rule forUpdater") + stream_block = RewriteRuleSubtreeStream(self._adaptor, "rule block") + stream_forCondition = RewriteRuleSubtreeStream(self._adaptor, "rule forCondition") + stream_localModifierList = RewriteRuleSubtreeStream(self._adaptor, "rule localModifierList") + stream_forInit = RewriteRuleSubtreeStream(self._adaptor, "rule forInit") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + stream_switchBlockLabels = RewriteRuleSubtreeStream(self._adaptor, "rule switchBlockLabels") + stream_parenthesizedExpression = RewriteRuleSubtreeStream(self._adaptor, "rule parenthesizedExpression") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 75): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:656:5: ( block | ASSERT expr1= expression ( COLON expr2= expression SEMI -> ^( ASSERT $expr1 $expr2) | SEMI -> ^( ASSERT $expr1) ) | IF parenthesizedExpression ifStat= statement ( ELSE elseStat= statement -> ^( IF parenthesizedExpression $ifStat $elseStat) | -> ^( IF parenthesizedExpression $ifStat) ) | FOR LPAREN ( forInit SEMI forCondition SEMI forUpdater RPAREN statement -> ^( FOR forInit forCondition forUpdater statement ) | localModifierList type IDENT COLON expression RPAREN statement -> ^( FOR_EACH[$FOR, \"FOR_EACH\"] localModifierList type IDENT expression statement ) ) | WHILE parenthesizedExpression statement -> ^( WHILE parenthesizedExpression statement ) | DO statement WHILE parenthesizedExpression SEMI -> ^( DO statement parenthesizedExpression ) | TRY block ( catches ( finallyClause )? | finallyClause ) -> ^( TRY block ( catches )? ( finallyClause )? ) | SWITCH parenthesizedExpression LCURLY ( switchBlockLabels )? RCURLY -> ^( SWITCH parenthesizedExpression ( switchBlockLabels )? ) | SYNCHRONIZED parenthesizedExpression block -> ^( SYNCHRONIZED parenthesizedExpression block ) | RETURN ( expression )? SEMI -> ^( RETURN ( expression )? ) | THROW expression SEMI -> ^( THROW expression ) | BREAK ( IDENT )? SEMI -> ^( BREAK ( IDENT )? ) | CONTINUE ( IDENT )? SEMI -> ^( CONTINUE ( IDENT )? ) | IDENT COLON statement -> ^( LABELED_STATEMENT IDENT statement ) | expression SEMI | SEMI ) + alt98 = 16 + alt98 = self.dfa98.predict(self.input) + if alt98 == 1: + # Java.g:656:9: block + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_block_in_statement8527) + block275 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, block275.tree) + + + elif alt98 == 2: + # Java.g:657:9: ASSERT expr1= expression ( COLON expr2= expression SEMI -> ^( ASSERT $expr1 $expr2) | SEMI -> ^( ASSERT $expr1) ) + pass + ASSERT276=self.match(self.input, ASSERT, self.FOLLOW_ASSERT_in_statement8537) + if self._state.backtracking == 0: + stream_ASSERT.add(ASSERT276) + self._state.following.append(self.FOLLOW_expression_in_statement8541) + expr1 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expression.add(expr1.tree) + # Java.g:658:9: ( COLON expr2= expression SEMI -> ^( ASSERT $expr1 $expr2) | SEMI -> ^( ASSERT $expr1) ) + alt89 = 2 + LA89_0 = self.input.LA(1) + + if (LA89_0 == COLON) : + alt89 = 1 + elif (LA89_0 == SEMI) : + alt89 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 89, 0, self.input) + + raise nvae + + if alt89 == 1: + # Java.g:658:13: COLON expr2= expression SEMI + pass + COLON277=self.match(self.input, COLON, self.FOLLOW_COLON_in_statement8555) + if self._state.backtracking == 0: + stream_COLON.add(COLON277) + self._state.following.append(self.FOLLOW_expression_in_statement8559) + expr2 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expression.add(expr2.tree) + SEMI278=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement8561) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI278) + + # AST Rewrite + # elements: ASSERT, expr1, expr2 + # token labels: + # rule labels: retval, expr1, expr2 + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + if expr1 is not None: + stream_expr1 = RewriteRuleSubtreeStream(self._adaptor, "rule expr1", expr1.tree) + else: + stream_expr1 = RewriteRuleSubtreeStream(self._adaptor, "token expr1", None) + + + if expr2 is not None: + stream_expr2 = RewriteRuleSubtreeStream(self._adaptor, "rule expr2", expr2.tree) + else: + stream_expr2 = RewriteRuleSubtreeStream(self._adaptor, "token expr2", None) + + + root_0 = self._adaptor.nil() + # 658:77: -> ^( ASSERT $expr1 $expr2) + # Java.g:658:81: ^( ASSERT $expr1 $expr2) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_ASSERT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_expr1.nextTree()) + self._adaptor.addChild(root_1, stream_expr2.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt89 == 2: + # Java.g:659:13: SEMI + pass + SEMI279=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement8624) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI279) + + # AST Rewrite + # elements: expr1, ASSERT + # token labels: + # rule labels: retval, expr1 + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + if expr1 is not None: + stream_expr1 = RewriteRuleSubtreeStream(self._adaptor, "rule expr1", expr1.tree) + else: + stream_expr1 = RewriteRuleSubtreeStream(self._adaptor, "token expr1", None) + + + root_0 = self._adaptor.nil() + # 659:77: -> ^( ASSERT $expr1) + # Java.g:659:81: ^( ASSERT $expr1) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_ASSERT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_expr1.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt98 == 3: + # Java.g:661:9: IF parenthesizedExpression ifStat= statement ( ELSE elseStat= statement -> ^( IF parenthesizedExpression $ifStat $elseStat) | -> ^( IF parenthesizedExpression $ifStat) ) + pass + IF280=self.match(self.input, IF, self.FOLLOW_IF_in_statement8713) + if self._state.backtracking == 0: + stream_IF.add(IF280) + self._state.following.append(self.FOLLOW_parenthesizedExpression_in_statement8715) + parenthesizedExpression281 = self.parenthesizedExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_parenthesizedExpression.add(parenthesizedExpression281.tree) + self._state.following.append(self.FOLLOW_statement_in_statement8719) + ifStat = self.statement() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_statement.add(ifStat.tree) + # Java.g:662:9: ( ELSE elseStat= statement -> ^( IF parenthesizedExpression $ifStat $elseStat) | -> ^( IF parenthesizedExpression $ifStat) ) + alt90 = 2 + LA90_0 = self.input.LA(1) + + if (LA90_0 == ELSE) : + LA90_1 = self.input.LA(2) + + if (self.synpred121_Java()) : + alt90 = 1 + elif (True) : + alt90 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 90, 1, self.input) + + raise nvae + + elif (LA90_0 == EOF or LA90_0 == AT or LA90_0 == DEC or LA90_0 == INC or LA90_0 == LCURLY or LA90_0 == LESS_THAN or LA90_0 == LOGICAL_NOT or (LPAREN <= LA90_0 <= MINUS) or LA90_0 == NOT or LA90_0 == PLUS or LA90_0 == RCURLY or LA90_0 == SEMI or (ABSTRACT <= LA90_0 <= CASE) or (CHAR <= LA90_0 <= DOUBLE) or LA90_0 == ENUM or (FALSE <= LA90_0 <= FINAL) or (FLOAT <= LA90_0 <= IF) or LA90_0 == INTERFACE or (INT <= LA90_0 <= NULL) or (PRIVATE <= LA90_0 <= THROW) or (TRANSIENT <= LA90_0 <= WHILE) or (IDENT <= LA90_0 <= STRING_LITERAL)) : + alt90 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 90, 0, self.input) + + raise nvae + + if alt90 == 1: + # Java.g:662:13: ELSE elseStat= statement + pass + ELSE282=self.match(self.input, ELSE, self.FOLLOW_ELSE_in_statement8733) + if self._state.backtracking == 0: + stream_ELSE.add(ELSE282) + self._state.following.append(self.FOLLOW_statement_in_statement8737) + elseStat = self.statement() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_statement.add(elseStat.tree) + + # AST Rewrite + # elements: elseStat, ifStat, parenthesizedExpression, IF + # token labels: + # rule labels: retval, ifStat, elseStat + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + if ifStat is not None: + stream_ifStat = RewriteRuleSubtreeStream(self._adaptor, "rule ifStat", ifStat.tree) + else: + stream_ifStat = RewriteRuleSubtreeStream(self._adaptor, "token ifStat", None) + + + if elseStat is not None: + stream_elseStat = RewriteRuleSubtreeStream(self._adaptor, "rule elseStat", elseStat.tree) + else: + stream_elseStat = RewriteRuleSubtreeStream(self._adaptor, "token elseStat", None) + + + root_0 = self._adaptor.nil() + # 662:77: -> ^( IF parenthesizedExpression $ifStat $elseStat) + # Java.g:662:81: ^( IF parenthesizedExpression $ifStat $elseStat) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_IF.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_parenthesizedExpression.nextTree()) + self._adaptor.addChild(root_1, stream_ifStat.nextTree()) + self._adaptor.addChild(root_1, stream_elseStat.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt90 == 2: + # Java.g:663:77: + pass + # AST Rewrite + # elements: parenthesizedExpression, ifStat, IF + # token labels: + # rule labels: retval, ifStat + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + if ifStat is not None: + stream_ifStat = RewriteRuleSubtreeStream(self._adaptor, "rule ifStat", ifStat.tree) + else: + stream_ifStat = RewriteRuleSubtreeStream(self._adaptor, "token ifStat", None) + + + root_0 = self._adaptor.nil() + # 663:77: -> ^( IF parenthesizedExpression $ifStat) + # Java.g:663:81: ^( IF parenthesizedExpression $ifStat) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_IF.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_parenthesizedExpression.nextTree()) + self._adaptor.addChild(root_1, stream_ifStat.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt98 == 4: + # Java.g:665:9: FOR LPAREN ( forInit SEMI forCondition SEMI forUpdater RPAREN statement -> ^( FOR forInit forCondition forUpdater statement ) | localModifierList type IDENT COLON expression RPAREN statement -> ^( FOR_EACH[$FOR, \"FOR_EACH\"] localModifierList type IDENT expression statement ) ) + pass + FOR283=self.match(self.input, FOR, self.FOLLOW_FOR_in_statement8900) + if self._state.backtracking == 0: + stream_FOR.add(FOR283) + LPAREN284=self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_statement8902) + if self._state.backtracking == 0: + stream_LPAREN.add(LPAREN284) + # Java.g:666:9: ( forInit SEMI forCondition SEMI forUpdater RPAREN statement -> ^( FOR forInit forCondition forUpdater statement ) | localModifierList type IDENT COLON expression RPAREN statement -> ^( FOR_EACH[$FOR, \"FOR_EACH\"] localModifierList type IDENT expression statement ) ) + alt91 = 2 + alt91 = self.dfa91.predict(self.input) + if alt91 == 1: + # Java.g:666:13: forInit SEMI forCondition SEMI forUpdater RPAREN statement + pass + self._state.following.append(self.FOLLOW_forInit_in_statement8916) + forInit285 = self.forInit() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_forInit.add(forInit285.tree) + SEMI286=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement8918) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI286) + self._state.following.append(self.FOLLOW_forCondition_in_statement8920) + forCondition287 = self.forCondition() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_forCondition.add(forCondition287.tree) + SEMI288=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement8922) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI288) + self._state.following.append(self.FOLLOW_forUpdater_in_statement8924) + forUpdater289 = self.forUpdater() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_forUpdater.add(forUpdater289.tree) + RPAREN290=self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_statement8926) + if self._state.backtracking == 0: + stream_RPAREN.add(RPAREN290) + self._state.following.append(self.FOLLOW_statement_in_statement8928) + statement291 = self.statement() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_statement.add(statement291.tree) + + # AST Rewrite + # elements: forInit, forUpdater, FOR, statement, forCondition + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 666:77: -> ^( FOR forInit forCondition forUpdater statement ) + # Java.g:666:81: ^( FOR forInit forCondition forUpdater statement ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_FOR.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_forInit.nextTree()) + self._adaptor.addChild(root_1, stream_forCondition.nextTree()) + self._adaptor.addChild(root_1, stream_forUpdater.nextTree()) + self._adaptor.addChild(root_1, stream_statement.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt91 == 2: + # Java.g:667:13: localModifierList type IDENT COLON expression RPAREN statement + pass + self._state.following.append(self.FOLLOW_localModifierList_in_statement8962) + localModifierList292 = self.localModifierList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_localModifierList.add(localModifierList292.tree) + self._state.following.append(self.FOLLOW_type_in_statement8964) + type293 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type293.tree) + IDENT294=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_statement8966) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT294) + COLON295=self.match(self.input, COLON, self.FOLLOW_COLON_in_statement8968) + if self._state.backtracking == 0: + stream_COLON.add(COLON295) + self._state.following.append(self.FOLLOW_expression_in_statement8970) + expression296 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expression.add(expression296.tree) + RPAREN297=self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_statement8972) + if self._state.backtracking == 0: + stream_RPAREN.add(RPAREN297) + self._state.following.append(self.FOLLOW_statement_in_statement8974) + statement298 = self.statement() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_statement.add(statement298.tree) + + # AST Rewrite + # elements: IDENT, expression, localModifierList, type, statement + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 668:77: -> ^( FOR_EACH[$FOR, \"FOR_EACH\"] localModifierList type IDENT expression statement ) + # Java.g:668:81: ^( FOR_EACH[$FOR, \"FOR_EACH\"] localModifierList type IDENT expression statement ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(FOR_EACH, FOR283, "FOR_EACH"), root_1) + + self._adaptor.addChild(root_1, stream_localModifierList.nextTree()) + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + self._adaptor.addChild(root_1, stream_expression.nextTree()) + self._adaptor.addChild(root_1, stream_statement.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt98 == 5: + # Java.g:670:9: WHILE parenthesizedExpression statement + pass + WHILE299=self.match(self.input, WHILE, self.FOLLOW_WHILE_in_statement9088) + if self._state.backtracking == 0: + stream_WHILE.add(WHILE299) + self._state.following.append(self.FOLLOW_parenthesizedExpression_in_statement9090) + parenthesizedExpression300 = self.parenthesizedExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_parenthesizedExpression.add(parenthesizedExpression300.tree) + self._state.following.append(self.FOLLOW_statement_in_statement9092) + statement301 = self.statement() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_statement.add(statement301.tree) + + # AST Rewrite + # elements: statement, WHILE, parenthesizedExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 670:77: -> ^( WHILE parenthesizedExpression statement ) + # Java.g:670:81: ^( WHILE parenthesizedExpression statement ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_WHILE.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_parenthesizedExpression.nextTree()) + self._adaptor.addChild(root_1, stream_statement.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 6: + # Java.g:671:9: DO statement WHILE parenthesizedExpression SEMI + pass + DO302=self.match(self.input, DO, self.FOLLOW_DO_in_statement9141) + if self._state.backtracking == 0: + stream_DO.add(DO302) + self._state.following.append(self.FOLLOW_statement_in_statement9143) + statement303 = self.statement() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_statement.add(statement303.tree) + WHILE304=self.match(self.input, WHILE, self.FOLLOW_WHILE_in_statement9145) + if self._state.backtracking == 0: + stream_WHILE.add(WHILE304) + self._state.following.append(self.FOLLOW_parenthesizedExpression_in_statement9147) + parenthesizedExpression305 = self.parenthesizedExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_parenthesizedExpression.add(parenthesizedExpression305.tree) + SEMI306=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement9149) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI306) + + # AST Rewrite + # elements: DO, parenthesizedExpression, statement + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 671:77: -> ^( DO statement parenthesizedExpression ) + # Java.g:671:81: ^( DO statement parenthesizedExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DO.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_statement.nextTree()) + self._adaptor.addChild(root_1, stream_parenthesizedExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 7: + # Java.g:672:9: TRY block ( catches ( finallyClause )? | finallyClause ) + pass + TRY307=self.match(self.input, TRY, self.FOLLOW_TRY_in_statement9190) + if self._state.backtracking == 0: + stream_TRY.add(TRY307) + self._state.following.append(self.FOLLOW_block_in_statement9192) + block308 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_block.add(block308.tree) + # Java.g:672:19: ( catches ( finallyClause )? | finallyClause ) + alt93 = 2 + LA93_0 = self.input.LA(1) + + if (LA93_0 == CATCH) : + alt93 = 1 + elif (LA93_0 == FINALLY) : + alt93 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 93, 0, self.input) + + raise nvae + + if alt93 == 1: + # Java.g:672:20: catches ( finallyClause )? + pass + self._state.following.append(self.FOLLOW_catches_in_statement9195) + catches309 = self.catches() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_catches.add(catches309.tree) + # Java.g:672:28: ( finallyClause )? + alt92 = 2 + LA92_0 = self.input.LA(1) + + if (LA92_0 == FINALLY) : + alt92 = 1 + if alt92 == 1: + # Java.g:0:0: finallyClause + pass + self._state.following.append(self.FOLLOW_finallyClause_in_statement9197) + finallyClause310 = self.finallyClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_finallyClause.add(finallyClause310.tree) + + + + + + elif alt93 == 2: + # Java.g:672:45: finallyClause + pass + self._state.following.append(self.FOLLOW_finallyClause_in_statement9202) + finallyClause311 = self.finallyClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_finallyClause.add(finallyClause311.tree) + + + + + # AST Rewrite + # elements: block, finallyClause, catches, TRY + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 672:77: -> ^( TRY block ( catches )? ( finallyClause )? ) + # Java.g:672:81: ^( TRY block ( catches )? ( finallyClause )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_TRY.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_block.nextTree()) + # Java.g:672:93: ( catches )? + if stream_catches.hasNext(): + self._adaptor.addChild(root_1, stream_catches.nextTree()) + + + stream_catches.reset(); + # Java.g:672:102: ( finallyClause )? + if stream_finallyClause.hasNext(): + self._adaptor.addChild(root_1, stream_finallyClause.nextTree()) + + + stream_finallyClause.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 8: + # Java.g:673:9: SWITCH parenthesizedExpression LCURLY ( switchBlockLabels )? RCURLY + pass + SWITCH312=self.match(self.input, SWITCH, self.FOLLOW_SWITCH_in_statement9245) + if self._state.backtracking == 0: + stream_SWITCH.add(SWITCH312) + self._state.following.append(self.FOLLOW_parenthesizedExpression_in_statement9247) + parenthesizedExpression313 = self.parenthesizedExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_parenthesizedExpression.add(parenthesizedExpression313.tree) + LCURLY314=self.match(self.input, LCURLY, self.FOLLOW_LCURLY_in_statement9249) + if self._state.backtracking == 0: + stream_LCURLY.add(LCURLY314) + # Java.g:673:47: ( switchBlockLabels )? + alt94 = 2 + LA94_0 = self.input.LA(1) + + if (LA94_0 == CASE or LA94_0 == DEFAULT) : + alt94 = 1 + elif (LA94_0 == RCURLY) : + LA94_2 = self.input.LA(2) + + if (self.synpred130_Java()) : + alt94 = 1 + if alt94 == 1: + # Java.g:0:0: switchBlockLabels + pass + self._state.following.append(self.FOLLOW_switchBlockLabels_in_statement9251) + switchBlockLabels315 = self.switchBlockLabels() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_switchBlockLabels.add(switchBlockLabels315.tree) + + + + RCURLY316=self.match(self.input, RCURLY, self.FOLLOW_RCURLY_in_statement9254) + if self._state.backtracking == 0: + stream_RCURLY.add(RCURLY316) + + # AST Rewrite + # elements: switchBlockLabels, parenthesizedExpression, SWITCH + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 673:78: -> ^( SWITCH parenthesizedExpression ( switchBlockLabels )? ) + # Java.g:673:82: ^( SWITCH parenthesizedExpression ( switchBlockLabels )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_SWITCH.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_parenthesizedExpression.nextTree()) + # Java.g:673:115: ( switchBlockLabels )? + if stream_switchBlockLabels.hasNext(): + self._adaptor.addChild(root_1, stream_switchBlockLabels.nextTree()) + + + stream_switchBlockLabels.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 9: + # Java.g:674:9: SYNCHRONIZED parenthesizedExpression block + pass + SYNCHRONIZED317=self.match(self.input, SYNCHRONIZED, self.FOLLOW_SYNCHRONIZED_in_statement9281) + if self._state.backtracking == 0: + stream_SYNCHRONIZED.add(SYNCHRONIZED317) + self._state.following.append(self.FOLLOW_parenthesizedExpression_in_statement9283) + parenthesizedExpression318 = self.parenthesizedExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_parenthesizedExpression.add(parenthesizedExpression318.tree) + self._state.following.append(self.FOLLOW_block_in_statement9285) + block319 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_block.add(block319.tree) + + # AST Rewrite + # elements: SYNCHRONIZED, block, parenthesizedExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 674:77: -> ^( SYNCHRONIZED parenthesizedExpression block ) + # Java.g:674:81: ^( SYNCHRONIZED parenthesizedExpression block ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_SYNCHRONIZED.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_parenthesizedExpression.nextTree()) + self._adaptor.addChild(root_1, stream_block.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 10: + # Java.g:675:9: RETURN ( expression )? SEMI + pass + RETURN320=self.match(self.input, RETURN, self.FOLLOW_RETURN_in_statement9331) + if self._state.backtracking == 0: + stream_RETURN.add(RETURN320) + # Java.g:675:16: ( expression )? + alt95 = 2 + LA95_0 = self.input.LA(1) + + if (LA95_0 == DEC or LA95_0 == INC or LA95_0 == LESS_THAN or LA95_0 == LOGICAL_NOT or (LPAREN <= LA95_0 <= MINUS) or LA95_0 == NOT or LA95_0 == PLUS or LA95_0 == BOOLEAN or LA95_0 == BYTE or LA95_0 == CHAR or LA95_0 == DOUBLE or LA95_0 == FALSE or LA95_0 == FLOAT or (INT <= LA95_0 <= LONG) or (NEW <= LA95_0 <= NULL) or LA95_0 == SHORT or LA95_0 == SUPER or LA95_0 == THIS or LA95_0 == TRUE or LA95_0 == VOID or (IDENT <= LA95_0 <= STRING_LITERAL)) : + alt95 = 1 + if alt95 == 1: + # Java.g:0:0: expression + pass + self._state.following.append(self.FOLLOW_expression_in_statement9333) + expression321 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expression.add(expression321.tree) + + + + SEMI322=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement9336) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI322) + + # AST Rewrite + # elements: RETURN, expression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 675:77: -> ^( RETURN ( expression )? ) + # Java.g:675:81: ^( RETURN ( expression )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_RETURN.nextNode(), root_1) + + # Java.g:675:90: ( expression )? + if stream_expression.hasNext(): + self._adaptor.addChild(root_1, stream_expression.nextTree()) + + + stream_expression.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 11: + # Java.g:676:9: THROW expression SEMI + pass + THROW323=self.match(self.input, THROW, self.FOLLOW_THROW_in_statement9400) + if self._state.backtracking == 0: + stream_THROW.add(THROW323) + self._state.following.append(self.FOLLOW_expression_in_statement9402) + expression324 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expression.add(expression324.tree) + SEMI325=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement9404) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI325) + + # AST Rewrite + # elements: expression, THROW + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 676:77: -> ^( THROW expression ) + # Java.g:676:81: ^( THROW expression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_THROW.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_expression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 12: + # Java.g:677:9: BREAK ( IDENT )? SEMI + pass + BREAK326=self.match(self.input, BREAK, self.FOLLOW_BREAK_in_statement9469) + if self._state.backtracking == 0: + stream_BREAK.add(BREAK326) + # Java.g:677:15: ( IDENT )? + alt96 = 2 + LA96_0 = self.input.LA(1) + + if (LA96_0 == IDENT) : + alt96 = 1 + if alt96 == 1: + # Java.g:0:0: IDENT + pass + IDENT327=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_statement9471) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT327) + + + + SEMI328=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement9474) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI328) + + # AST Rewrite + # elements: BREAK, IDENT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 677:77: -> ^( BREAK ( IDENT )? ) + # Java.g:677:81: ^( BREAK ( IDENT )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_BREAK.nextNode(), root_1) + + # Java.g:677:89: ( IDENT )? + if stream_IDENT.hasNext(): + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + + + stream_IDENT.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 13: + # Java.g:678:9: CONTINUE ( IDENT )? SEMI + pass + CONTINUE329=self.match(self.input, CONTINUE, self.FOLLOW_CONTINUE_in_statement9544) + if self._state.backtracking == 0: + stream_CONTINUE.add(CONTINUE329) + # Java.g:678:18: ( IDENT )? + alt97 = 2 + LA97_0 = self.input.LA(1) + + if (LA97_0 == IDENT) : + alt97 = 1 + if alt97 == 1: + # Java.g:0:0: IDENT + pass + IDENT330=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_statement9546) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT330) + + + + SEMI331=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement9549) + if self._state.backtracking == 0: + stream_SEMI.add(SEMI331) + + # AST Rewrite + # elements: CONTINUE, IDENT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 678:77: -> ^( CONTINUE ( IDENT )? ) + # Java.g:678:81: ^( CONTINUE ( IDENT )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_CONTINUE.nextNode(), root_1) + + # Java.g:678:92: ( IDENT )? + if stream_IDENT.hasNext(): + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + + + stream_IDENT.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 14: + # Java.g:679:9: IDENT COLON statement + pass + IDENT332=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_statement9616) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT332) + COLON333=self.match(self.input, COLON, self.FOLLOW_COLON_in_statement9618) + if self._state.backtracking == 0: + stream_COLON.add(COLON333) + self._state.following.append(self.FOLLOW_statement_in_statement9620) + statement334 = self.statement() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_statement.add(statement334.tree) + + # AST Rewrite + # elements: statement, IDENT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 679:77: -> ^( LABELED_STATEMENT IDENT statement ) + # Java.g:679:81: ^( LABELED_STATEMENT IDENT statement ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(LABELED_STATEMENT, "LABELED_STATEMENT"), root_1) + + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + self._adaptor.addChild(root_1, stream_statement.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt98 == 15: + # Java.g:680:9: expression SEMI + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_expression_in_statement9687) + expression335 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, expression335.tree) + SEMI336=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement9689) + + + elif alt98 == 16: + # Java.g:681:9: SEMI + pass + root_0 = self._adaptor.nil() + + SEMI337=self.match(self.input, SEMI, self.FOLLOW_SEMI_in_statement9700) + if self._state.backtracking == 0: + + SEMI337_tree = self._adaptor.createWithPayload(SEMI337) + self._adaptor.addChild(root_0, SEMI337_tree) + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 75, statement_StartIndex, success) + + pass + return retval + + # $ANTLR end "statement" + + class catches_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.catches_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "catches" + # Java.g:684:1: catches : ( catchClause )+ -> ^( CATCH_CLAUSE_LIST ( catchClause )+ ) ; + def catches(self, ): + + retval = self.catches_return() + retval.start = self.input.LT(1) + catches_StartIndex = self.input.index() + root_0 = None + + catchClause338 = None + + + stream_catchClause = RewriteRuleSubtreeStream(self._adaptor, "rule catchClause") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 76): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:685:5: ( ( catchClause )+ -> ^( CATCH_CLAUSE_LIST ( catchClause )+ ) ) + # Java.g:685:9: ( catchClause )+ + pass + # Java.g:685:9: ( catchClause )+ + cnt99 = 0 + while True: #loop99 + alt99 = 2 + LA99_0 = self.input.LA(1) + + if (LA99_0 == CATCH) : + alt99 = 1 + + + if alt99 == 1: + # Java.g:0:0: catchClause + pass + self._state.following.append(self.FOLLOW_catchClause_in_catches9720) + catchClause338 = self.catchClause() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_catchClause.add(catchClause338.tree) + + + else: + if cnt99 >= 1: + break #loop99 + + if self._state.backtracking > 0: + raise BacktrackingFailed + + eee = EarlyExitException(99, self.input) + raise eee + + cnt99 += 1 + + # AST Rewrite + # elements: catchClause + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 686:9: -> ^( CATCH_CLAUSE_LIST ( catchClause )+ ) + # Java.g:686:13: ^( CATCH_CLAUSE_LIST ( catchClause )+ ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(CATCH_CLAUSE_LIST, "CATCH_CLAUSE_LIST"), root_1) + + # Java.g:686:33: ( catchClause )+ + if not (stream_catchClause.hasNext()): + raise RewriteEarlyExitException() + + while stream_catchClause.hasNext(): + self._adaptor.addChild(root_1, stream_catchClause.nextTree()) + + + stream_catchClause.reset() + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 76, catches_StartIndex, success) + + pass + return retval + + # $ANTLR end "catches" + + class catchClause_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.catchClause_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "catchClause" + # Java.g:689:1: catchClause : CATCH LPAREN formalParameterStandardDecl RPAREN block ; + def catchClause(self, ): + + retval = self.catchClause_return() + retval.start = self.input.LT(1) + catchClause_StartIndex = self.input.index() + root_0 = None + + CATCH339 = None + LPAREN340 = None + RPAREN342 = None + formalParameterStandardDecl341 = None + + block343 = None + + + CATCH339_tree = None + LPAREN340_tree = None + RPAREN342_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 77): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:690:5: ( CATCH LPAREN formalParameterStandardDecl RPAREN block ) + # Java.g:690:9: CATCH LPAREN formalParameterStandardDecl RPAREN block + pass + root_0 = self._adaptor.nil() + + CATCH339=self.match(self.input, CATCH, self.FOLLOW_CATCH_in_catchClause9758) + if self._state.backtracking == 0: + + CATCH339_tree = self._adaptor.createWithPayload(CATCH339) + root_0 = self._adaptor.becomeRoot(CATCH339_tree, root_0) + + LPAREN340=self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_catchClause9761) + self._state.following.append(self.FOLLOW_formalParameterStandardDecl_in_catchClause9764) + formalParameterStandardDecl341 = self.formalParameterStandardDecl() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, formalParameterStandardDecl341.tree) + RPAREN342=self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_catchClause9766) + self._state.following.append(self.FOLLOW_block_in_catchClause9769) + block343 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, block343.tree) + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 77, catchClause_StartIndex, success) + + pass + return retval + + # $ANTLR end "catchClause" + + class finallyClause_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.finallyClause_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "finallyClause" + # Java.g:693:1: finallyClause : FINALLY block -> block ; + def finallyClause(self, ): + + retval = self.finallyClause_return() + retval.start = self.input.LT(1) + finallyClause_StartIndex = self.input.index() + root_0 = None + + FINALLY344 = None + block345 = None + + + FINALLY344_tree = None + stream_FINALLY = RewriteRuleTokenStream(self._adaptor, "token FINALLY") + stream_block = RewriteRuleSubtreeStream(self._adaptor, "rule block") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 78): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:694:5: ( FINALLY block -> block ) + # Java.g:694:9: FINALLY block + pass + FINALLY344=self.match(self.input, FINALLY, self.FOLLOW_FINALLY_in_finallyClause9788) + if self._state.backtracking == 0: + stream_FINALLY.add(FINALLY344) + self._state.following.append(self.FOLLOW_block_in_finallyClause9790) + block345 = self.block() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_block.add(block345.tree) + + # AST Rewrite + # elements: block + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 695:9: -> block + self._adaptor.addChild(root_0, stream_block.nextTree()) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 78, finallyClause_StartIndex, success) + + pass + return retval + + # $ANTLR end "finallyClause" + + class switchBlockLabels_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.switchBlockLabels_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "switchBlockLabels" + # Java.g:698:1: switchBlockLabels : (c0= switchCaseLabels )? ( switchDefaultLabel )? (c1= switchCaseLabels )? -> ^( SWITCH_BLOCK_LABEL_LIST ( $c0)? ( switchDefaultLabel )? ( $c1)? ) ; + def switchBlockLabels(self, ): + + retval = self.switchBlockLabels_return() + retval.start = self.input.LT(1) + switchBlockLabels_StartIndex = self.input.index() + root_0 = None + + c0 = None + + c1 = None + + switchDefaultLabel346 = None + + + stream_switchDefaultLabel = RewriteRuleSubtreeStream(self._adaptor, "rule switchDefaultLabel") + stream_switchCaseLabels = RewriteRuleSubtreeStream(self._adaptor, "rule switchCaseLabels") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 79): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:702:5: ( (c0= switchCaseLabels )? ( switchDefaultLabel )? (c1= switchCaseLabels )? -> ^( SWITCH_BLOCK_LABEL_LIST ( $c0)? ( switchDefaultLabel )? ( $c1)? ) ) + # Java.g:702:9: (c0= switchCaseLabels )? ( switchDefaultLabel )? (c1= switchCaseLabels )? + pass + # Java.g:702:11: (c0= switchCaseLabels )? + alt100 = 2 + LA100 = self.input.LA(1) + if LA100 == CASE: + LA100_1 = self.input.LA(2) + + if (self.synpred143_Java()) : + alt100 = 1 + elif LA100 == DEFAULT: + LA100_2 = self.input.LA(2) + + if (self.synpred143_Java()) : + alt100 = 1 + elif LA100 == RCURLY: + LA100_3 = self.input.LA(2) + + if (self.synpred143_Java()) : + alt100 = 1 + elif LA100 == EOF: + LA100_4 = self.input.LA(2) + + if (self.synpred143_Java()) : + alt100 = 1 + if alt100 == 1: + # Java.g:0:0: c0= switchCaseLabels + pass + self._state.following.append(self.FOLLOW_switchCaseLabels_in_switchBlockLabels9839) + c0 = self.switchCaseLabels() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_switchCaseLabels.add(c0.tree) + + + + # Java.g:702:30: ( switchDefaultLabel )? + alt101 = 2 + LA101_0 = self.input.LA(1) + + if (LA101_0 == DEFAULT) : + alt101 = 1 + if alt101 == 1: + # Java.g:0:0: switchDefaultLabel + pass + self._state.following.append(self.FOLLOW_switchDefaultLabel_in_switchBlockLabels9842) + switchDefaultLabel346 = self.switchDefaultLabel() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_switchDefaultLabel.add(switchDefaultLabel346.tree) + + + + # Java.g:702:52: (c1= switchCaseLabels )? + alt102 = 2 + LA102 = self.input.LA(1) + if LA102 == CASE: + alt102 = 1 + elif LA102 == RCURLY: + LA102_2 = self.input.LA(2) + + if (self.synpred145_Java()) : + alt102 = 1 + elif LA102 == EOF: + LA102_3 = self.input.LA(2) + + if (self.synpred145_Java()) : + alt102 = 1 + if alt102 == 1: + # Java.g:0:0: c1= switchCaseLabels + pass + self._state.following.append(self.FOLLOW_switchCaseLabels_in_switchBlockLabels9847) + c1 = self.switchCaseLabels() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_switchCaseLabels.add(c1.tree) + + + + + # AST Rewrite + # elements: c0, switchDefaultLabel, c1 + # token labels: + # rule labels: retval, c1, c0 + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + if c1 is not None: + stream_c1 = RewriteRuleSubtreeStream(self._adaptor, "rule c1", c1.tree) + else: + stream_c1 = RewriteRuleSubtreeStream(self._adaptor, "token c1", None) + + + if c0 is not None: + stream_c0 = RewriteRuleSubtreeStream(self._adaptor, "rule c0", c0.tree) + else: + stream_c0 = RewriteRuleSubtreeStream(self._adaptor, "token c0", None) + + + root_0 = self._adaptor.nil() + # 703:9: -> ^( SWITCH_BLOCK_LABEL_LIST ( $c0)? ( switchDefaultLabel )? ( $c1)? ) + # Java.g:703:13: ^( SWITCH_BLOCK_LABEL_LIST ( $c0)? ( switchDefaultLabel )? ( $c1)? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(SWITCH_BLOCK_LABEL_LIST, "SWITCH_BLOCK_LABEL_LIST"), root_1) + + # Java.g:703:39: ( $c0)? + if stream_c0.hasNext(): + self._adaptor.addChild(root_1, stream_c0.nextTree()) + + + stream_c0.reset(); + # Java.g:703:44: ( switchDefaultLabel )? + if stream_switchDefaultLabel.hasNext(): + self._adaptor.addChild(root_1, stream_switchDefaultLabel.nextTree()) + + + stream_switchDefaultLabel.reset(); + # Java.g:703:64: ( $c1)? + if stream_c1.hasNext(): + self._adaptor.addChild(root_1, stream_c1.nextTree()) + + + stream_c1.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 79, switchBlockLabels_StartIndex, success) + + pass + return retval + + # $ANTLR end "switchBlockLabels" + + class switchCaseLabels_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.switchCaseLabels_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "switchCaseLabels" + # Java.g:706:1: switchCaseLabels : ( switchCaseLabel )* ; + def switchCaseLabels(self, ): + + retval = self.switchCaseLabels_return() + retval.start = self.input.LT(1) + switchCaseLabels_StartIndex = self.input.index() + root_0 = None + + switchCaseLabel347 = None + + + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 80): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:707:5: ( ( switchCaseLabel )* ) + # Java.g:707:9: ( switchCaseLabel )* + pass + root_0 = self._adaptor.nil() + + # Java.g:707:9: ( switchCaseLabel )* + while True: #loop103 + alt103 = 2 + LA103_0 = self.input.LA(1) + + if (LA103_0 == CASE) : + LA103_2 = self.input.LA(2) + + if (self.synpred146_Java()) : + alt103 = 1 + + + + + if alt103 == 1: + # Java.g:0:0: switchCaseLabel + pass + self._state.following.append(self.FOLLOW_switchCaseLabel_in_switchCaseLabels9893) + switchCaseLabel347 = self.switchCaseLabel() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, switchCaseLabel347.tree) + + + else: + break #loop103 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 80, switchCaseLabels_StartIndex, success) + + pass + return retval + + # $ANTLR end "switchCaseLabels" + + class switchCaseLabel_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.switchCaseLabel_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "switchCaseLabel" + # Java.g:710:1: switchCaseLabel : CASE expression COLON ( blockStatement )* ; + def switchCaseLabel(self, ): + + retval = self.switchCaseLabel_return() + retval.start = self.input.LT(1) + switchCaseLabel_StartIndex = self.input.index() + root_0 = None + + CASE348 = None + COLON350 = None + expression349 = None + + blockStatement351 = None + + + CASE348_tree = None + COLON350_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 81): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:711:5: ( CASE expression COLON ( blockStatement )* ) + # Java.g:711:9: CASE expression COLON ( blockStatement )* + pass + root_0 = self._adaptor.nil() + + CASE348=self.match(self.input, CASE, self.FOLLOW_CASE_in_switchCaseLabel9913) + if self._state.backtracking == 0: + + CASE348_tree = self._adaptor.createWithPayload(CASE348) + root_0 = self._adaptor.becomeRoot(CASE348_tree, root_0) + + self._state.following.append(self.FOLLOW_expression_in_switchCaseLabel9916) + expression349 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, expression349.tree) + COLON350=self.match(self.input, COLON, self.FOLLOW_COLON_in_switchCaseLabel9918) + # Java.g:711:33: ( blockStatement )* + while True: #loop104 + alt104 = 2 + LA104_0 = self.input.LA(1) + + if (LA104_0 == AT or LA104_0 == DEC or LA104_0 == INC or LA104_0 == LCURLY or LA104_0 == LESS_THAN or LA104_0 == LOGICAL_NOT or (LPAREN <= LA104_0 <= MINUS) or LA104_0 == NOT or LA104_0 == PLUS or LA104_0 == SEMI or (ABSTRACT <= LA104_0 <= BYTE) or (CHAR <= LA104_0 <= CONTINUE) or (DO <= LA104_0 <= DOUBLE) or LA104_0 == ENUM or (FALSE <= LA104_0 <= FINAL) or (FLOAT <= LA104_0 <= IF) or LA104_0 == INTERFACE or (INT <= LA104_0 <= NULL) or (PRIVATE <= LA104_0 <= THROW) or (TRANSIENT <= LA104_0 <= WHILE) or (IDENT <= LA104_0 <= STRING_LITERAL)) : + alt104 = 1 + + + if alt104 == 1: + # Java.g:0:0: blockStatement + pass + self._state.following.append(self.FOLLOW_blockStatement_in_switchCaseLabel9921) + blockStatement351 = self.blockStatement() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, blockStatement351.tree) + + + else: + break #loop104 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 81, switchCaseLabel_StartIndex, success) + + pass + return retval + + # $ANTLR end "switchCaseLabel" + + class switchDefaultLabel_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.switchDefaultLabel_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "switchDefaultLabel" + # Java.g:714:1: switchDefaultLabel : DEFAULT COLON ( blockStatement )* ; + def switchDefaultLabel(self, ): + + retval = self.switchDefaultLabel_return() + retval.start = self.input.LT(1) + switchDefaultLabel_StartIndex = self.input.index() + root_0 = None + + DEFAULT352 = None + COLON353 = None + blockStatement354 = None + + + DEFAULT352_tree = None + COLON353_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 82): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:715:5: ( DEFAULT COLON ( blockStatement )* ) + # Java.g:715:9: DEFAULT COLON ( blockStatement )* + pass + root_0 = self._adaptor.nil() + + DEFAULT352=self.match(self.input, DEFAULT, self.FOLLOW_DEFAULT_in_switchDefaultLabel9941) + if self._state.backtracking == 0: + + DEFAULT352_tree = self._adaptor.createWithPayload(DEFAULT352) + root_0 = self._adaptor.becomeRoot(DEFAULT352_tree, root_0) + + COLON353=self.match(self.input, COLON, self.FOLLOW_COLON_in_switchDefaultLabel9944) + # Java.g:715:25: ( blockStatement )* + while True: #loop105 + alt105 = 2 + LA105_0 = self.input.LA(1) + + if (LA105_0 == AT or LA105_0 == DEC or LA105_0 == INC or LA105_0 == LCURLY or LA105_0 == LESS_THAN or LA105_0 == LOGICAL_NOT or (LPAREN <= LA105_0 <= MINUS) or LA105_0 == NOT or LA105_0 == PLUS or LA105_0 == SEMI or (ABSTRACT <= LA105_0 <= BYTE) or (CHAR <= LA105_0 <= CONTINUE) or (DO <= LA105_0 <= DOUBLE) or LA105_0 == ENUM or (FALSE <= LA105_0 <= FINAL) or (FLOAT <= LA105_0 <= IF) or LA105_0 == INTERFACE or (INT <= LA105_0 <= NULL) or (PRIVATE <= LA105_0 <= THROW) or (TRANSIENT <= LA105_0 <= WHILE) or (IDENT <= LA105_0 <= STRING_LITERAL)) : + alt105 = 1 + + + if alt105 == 1: + # Java.g:0:0: blockStatement + pass + self._state.following.append(self.FOLLOW_blockStatement_in_switchDefaultLabel9947) + blockStatement354 = self.blockStatement() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, blockStatement354.tree) + + + else: + break #loop105 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 82, switchDefaultLabel_StartIndex, success) + + pass + return retval + + # $ANTLR end "switchDefaultLabel" + + class forInit_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.forInit_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "forInit" + # Java.g:718:1: forInit : ( localVariableDeclaration -> ^( FOR_INIT localVariableDeclaration ) | expressionList -> ^( FOR_INIT expressionList ) | -> ^( FOR_INIT ) ); + def forInit(self, ): + + retval = self.forInit_return() + retval.start = self.input.LT(1) + forInit_StartIndex = self.input.index() + root_0 = None + + localVariableDeclaration355 = None + + expressionList356 = None + + + stream_expressionList = RewriteRuleSubtreeStream(self._adaptor, "rule expressionList") + stream_localVariableDeclaration = RewriteRuleSubtreeStream(self._adaptor, "rule localVariableDeclaration") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 83): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:719:5: ( localVariableDeclaration -> ^( FOR_INIT localVariableDeclaration ) | expressionList -> ^( FOR_INIT expressionList ) | -> ^( FOR_INIT ) ) + alt106 = 3 + alt106 = self.dfa106.predict(self.input) + if alt106 == 1: + # Java.g:719:9: localVariableDeclaration + pass + self._state.following.append(self.FOLLOW_localVariableDeclaration_in_forInit9967) + localVariableDeclaration355 = self.localVariableDeclaration() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_localVariableDeclaration.add(localVariableDeclaration355.tree) + + # AST Rewrite + # elements: localVariableDeclaration + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 719:37: -> ^( FOR_INIT localVariableDeclaration ) + # Java.g:719:41: ^( FOR_INIT localVariableDeclaration ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(FOR_INIT, "FOR_INIT"), root_1) + + self._adaptor.addChild(root_1, stream_localVariableDeclaration.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt106 == 2: + # Java.g:720:9: expressionList + pass + self._state.following.append(self.FOLLOW_expressionList_in_forInit9989) + expressionList356 = self.expressionList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expressionList.add(expressionList356.tree) + + # AST Rewrite + # elements: expressionList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 720:37: -> ^( FOR_INIT expressionList ) + # Java.g:720:41: ^( FOR_INIT expressionList ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(FOR_INIT, "FOR_INIT"), root_1) + + self._adaptor.addChild(root_1, stream_expressionList.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt106 == 3: + # Java.g:721:37: + pass + # AST Rewrite + # elements: + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 721:37: -> ^( FOR_INIT ) + # Java.g:721:41: ^( FOR_INIT ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(FOR_INIT, "FOR_INIT"), root_1) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 83, forInit_StartIndex, success) + + pass + return retval + + # $ANTLR end "forInit" + + class forCondition_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.forCondition_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "forCondition" + # Java.g:724:1: forCondition : ( expression )? -> ^( FOR_CONDITION ( expression )? ) ; + def forCondition(self, ): + + retval = self.forCondition_return() + retval.start = self.input.LT(1) + forCondition_StartIndex = self.input.index() + root_0 = None + + expression357 = None + + + stream_expression = RewriteRuleSubtreeStream(self._adaptor, "rule expression") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 84): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:725:5: ( ( expression )? -> ^( FOR_CONDITION ( expression )? ) ) + # Java.g:725:9: ( expression )? + pass + # Java.g:725:9: ( expression )? + alt107 = 2 + LA107_0 = self.input.LA(1) + + if (LA107_0 == DEC or LA107_0 == INC or LA107_0 == LESS_THAN or LA107_0 == LOGICAL_NOT or (LPAREN <= LA107_0 <= MINUS) or LA107_0 == NOT or LA107_0 == PLUS or LA107_0 == BOOLEAN or LA107_0 == BYTE or LA107_0 == CHAR or LA107_0 == DOUBLE or LA107_0 == FALSE or LA107_0 == FLOAT or (INT <= LA107_0 <= LONG) or (NEW <= LA107_0 <= NULL) or LA107_0 == SHORT or LA107_0 == SUPER or LA107_0 == THIS or LA107_0 == TRUE or LA107_0 == VOID or (IDENT <= LA107_0 <= STRING_LITERAL)) : + alt107 = 1 + if alt107 == 1: + # Java.g:0:0: expression + pass + self._state.following.append(self.FOLLOW_expression_in_forCondition10073) + expression357 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expression.add(expression357.tree) + + + + + # AST Rewrite + # elements: expression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 726:9: -> ^( FOR_CONDITION ( expression )? ) + # Java.g:726:13: ^( FOR_CONDITION ( expression )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(FOR_CONDITION, "FOR_CONDITION"), root_1) + + # Java.g:726:29: ( expression )? + if stream_expression.hasNext(): + self._adaptor.addChild(root_1, stream_expression.nextTree()) + + + stream_expression.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 84, forCondition_StartIndex, success) + + pass + return retval + + # $ANTLR end "forCondition" + + class forUpdater_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.forUpdater_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "forUpdater" + # Java.g:729:1: forUpdater : ( expressionList )? -> ^( FOR_UPDATE ( expressionList )? ) ; + def forUpdater(self, ): + + retval = self.forUpdater_return() + retval.start = self.input.LT(1) + forUpdater_StartIndex = self.input.index() + root_0 = None + + expressionList358 = None + + + stream_expressionList = RewriteRuleSubtreeStream(self._adaptor, "rule expressionList") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 85): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:730:5: ( ( expressionList )? -> ^( FOR_UPDATE ( expressionList )? ) ) + # Java.g:730:9: ( expressionList )? + pass + # Java.g:730:9: ( expressionList )? + alt108 = 2 + LA108_0 = self.input.LA(1) + + if (LA108_0 == DEC or LA108_0 == INC or LA108_0 == LESS_THAN or LA108_0 == LOGICAL_NOT or (LPAREN <= LA108_0 <= MINUS) or LA108_0 == NOT or LA108_0 == PLUS or LA108_0 == BOOLEAN or LA108_0 == BYTE or LA108_0 == CHAR or LA108_0 == DOUBLE or LA108_0 == FALSE or LA108_0 == FLOAT or (INT <= LA108_0 <= LONG) or (NEW <= LA108_0 <= NULL) or LA108_0 == SHORT or LA108_0 == SUPER or LA108_0 == THIS or LA108_0 == TRUE or LA108_0 == VOID or (IDENT <= LA108_0 <= STRING_LITERAL)) : + alt108 = 1 + if alt108 == 1: + # Java.g:0:0: expressionList + pass + self._state.following.append(self.FOLLOW_expressionList_in_forUpdater10111) + expressionList358 = self.expressionList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expressionList.add(expressionList358.tree) + + + + + # AST Rewrite + # elements: expressionList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 731:9: -> ^( FOR_UPDATE ( expressionList )? ) + # Java.g:731:13: ^( FOR_UPDATE ( expressionList )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(FOR_UPDATE, "FOR_UPDATE"), root_1) + + # Java.g:731:26: ( expressionList )? + if stream_expressionList.hasNext(): + self._adaptor.addChild(root_1, stream_expressionList.nextTree()) + + + stream_expressionList.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 85, forUpdater_StartIndex, success) + + pass + return retval + + # $ANTLR end "forUpdater" + + class parenthesizedExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.parenthesizedExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "parenthesizedExpression" + # Java.g:736:1: parenthesizedExpression : LPAREN expression RPAREN -> ^( PARENTESIZED_EXPR[$LPAREN, \"PARENTESIZED_EXPR\"] expression ) ; + def parenthesizedExpression(self, ): + + retval = self.parenthesizedExpression_return() + retval.start = self.input.LT(1) + parenthesizedExpression_StartIndex = self.input.index() + root_0 = None + + LPAREN359 = None + RPAREN361 = None + expression360 = None + + + LPAREN359_tree = None + RPAREN361_tree = None + stream_RPAREN = RewriteRuleTokenStream(self._adaptor, "token RPAREN") + stream_LPAREN = RewriteRuleTokenStream(self._adaptor, "token LPAREN") + stream_expression = RewriteRuleSubtreeStream(self._adaptor, "rule expression") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 86): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:737:5: ( LPAREN expression RPAREN -> ^( PARENTESIZED_EXPR[$LPAREN, \"PARENTESIZED_EXPR\"] expression ) ) + # Java.g:737:9: LPAREN expression RPAREN + pass + LPAREN359=self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_parenthesizedExpression10151) + if self._state.backtracking == 0: + stream_LPAREN.add(LPAREN359) + self._state.following.append(self.FOLLOW_expression_in_parenthesizedExpression10153) + expression360 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expression.add(expression360.tree) + RPAREN361=self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_parenthesizedExpression10155) + if self._state.backtracking == 0: + stream_RPAREN.add(RPAREN361) + + # AST Rewrite + # elements: expression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 738:9: -> ^( PARENTESIZED_EXPR[$LPAREN, \"PARENTESIZED_EXPR\"] expression ) + # Java.g:738:13: ^( PARENTESIZED_EXPR[$LPAREN, \"PARENTESIZED_EXPR\"] expression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(PARENTESIZED_EXPR, LPAREN359, "PARENTESIZED_EXPR"), root_1) + + self._adaptor.addChild(root_1, stream_expression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 86, parenthesizedExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "parenthesizedExpression" + + class expressionList_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.expressionList_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "expressionList" + # Java.g:741:1: expressionList : expression ( COMMA expression )* ; + def expressionList(self, ): + + retval = self.expressionList_return() + retval.start = self.input.LT(1) + expressionList_StartIndex = self.input.index() + root_0 = None + + COMMA363 = None + expression362 = None + + expression364 = None + + + COMMA363_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 87): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:742:5: ( expression ( COMMA expression )* ) + # Java.g:742:9: expression ( COMMA expression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_expression_in_expressionList10192) + expression362 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, expression362.tree) + # Java.g:742:20: ( COMMA expression )* + while True: #loop109 + alt109 = 2 + LA109_0 = self.input.LA(1) + + if (LA109_0 == COMMA) : + alt109 = 1 + + + if alt109 == 1: + # Java.g:742:21: COMMA expression + pass + COMMA363=self.match(self.input, COMMA, self.FOLLOW_COMMA_in_expressionList10195) + self._state.following.append(self.FOLLOW_expression_in_expressionList10198) + expression364 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, expression364.tree) + + + else: + break #loop109 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 87, expressionList_StartIndex, success) + + pass + return retval + + # $ANTLR end "expressionList" + + class expression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.expression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "expression" + # Java.g:745:1: expression : assignmentExpression -> ^( EXPR assignmentExpression ) ; + def expression(self, ): + + retval = self.expression_return() + retval.start = self.input.LT(1) + expression_StartIndex = self.input.index() + root_0 = None + + assignmentExpression365 = None + + + stream_assignmentExpression = RewriteRuleSubtreeStream(self._adaptor, "rule assignmentExpression") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 88): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:746:5: ( assignmentExpression -> ^( EXPR assignmentExpression ) ) + # Java.g:746:9: assignmentExpression + pass + self._state.following.append(self.FOLLOW_assignmentExpression_in_expression10219) + assignmentExpression365 = self.assignmentExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_assignmentExpression.add(assignmentExpression365.tree) + + # AST Rewrite + # elements: assignmentExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 747:9: -> ^( EXPR assignmentExpression ) + # Java.g:747:13: ^( EXPR assignmentExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(EXPR, "EXPR"), root_1) + + self._adaptor.addChild(root_1, stream_assignmentExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 88, expression_StartIndex, success) + + pass + return retval + + # $ANTLR end "expression" + + class assignmentExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.assignmentExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "assignmentExpression" + # Java.g:750:1: assignmentExpression : conditionalExpression ( ( ASSIGN | PLUS_ASSIGN | MINUS_ASSIGN | STAR_ASSIGN | DIV_ASSIGN | AND_ASSIGN | OR_ASSIGN | XOR_ASSIGN | MOD_ASSIGN | SHIFT_LEFT_ASSIGN | SHIFT_RIGHT_ASSIGN | BIT_SHIFT_RIGHT_ASSIGN ) assignmentExpression )? ; + def assignmentExpression(self, ): + + retval = self.assignmentExpression_return() + retval.start = self.input.LT(1) + assignmentExpression_StartIndex = self.input.index() + root_0 = None + + ASSIGN367 = None + PLUS_ASSIGN368 = None + MINUS_ASSIGN369 = None + STAR_ASSIGN370 = None + DIV_ASSIGN371 = None + AND_ASSIGN372 = None + OR_ASSIGN373 = None + XOR_ASSIGN374 = None + MOD_ASSIGN375 = None + SHIFT_LEFT_ASSIGN376 = None + SHIFT_RIGHT_ASSIGN377 = None + BIT_SHIFT_RIGHT_ASSIGN378 = None + conditionalExpression366 = None + + assignmentExpression379 = None + + + ASSIGN367_tree = None + PLUS_ASSIGN368_tree = None + MINUS_ASSIGN369_tree = None + STAR_ASSIGN370_tree = None + DIV_ASSIGN371_tree = None + AND_ASSIGN372_tree = None + OR_ASSIGN373_tree = None + XOR_ASSIGN374_tree = None + MOD_ASSIGN375_tree = None + SHIFT_LEFT_ASSIGN376_tree = None + SHIFT_RIGHT_ASSIGN377_tree = None + BIT_SHIFT_RIGHT_ASSIGN378_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 89): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:751:5: ( conditionalExpression ( ( ASSIGN | PLUS_ASSIGN | MINUS_ASSIGN | STAR_ASSIGN | DIV_ASSIGN | AND_ASSIGN | OR_ASSIGN | XOR_ASSIGN | MOD_ASSIGN | SHIFT_LEFT_ASSIGN | SHIFT_RIGHT_ASSIGN | BIT_SHIFT_RIGHT_ASSIGN ) assignmentExpression )? ) + # Java.g:751:9: conditionalExpression ( ( ASSIGN | PLUS_ASSIGN | MINUS_ASSIGN | STAR_ASSIGN | DIV_ASSIGN | AND_ASSIGN | OR_ASSIGN | XOR_ASSIGN | MOD_ASSIGN | SHIFT_LEFT_ASSIGN | SHIFT_RIGHT_ASSIGN | BIT_SHIFT_RIGHT_ASSIGN ) assignmentExpression )? + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_conditionalExpression_in_assignmentExpression10255) + conditionalExpression366 = self.conditionalExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, conditionalExpression366.tree) + # Java.g:752:9: ( ( ASSIGN | PLUS_ASSIGN | MINUS_ASSIGN | STAR_ASSIGN | DIV_ASSIGN | AND_ASSIGN | OR_ASSIGN | XOR_ASSIGN | MOD_ASSIGN | SHIFT_LEFT_ASSIGN | SHIFT_RIGHT_ASSIGN | BIT_SHIFT_RIGHT_ASSIGN ) assignmentExpression )? + alt111 = 2 + LA111_0 = self.input.LA(1) + + if ((AND_ASSIGN <= LA111_0 <= ASSIGN) or LA111_0 == BIT_SHIFT_RIGHT_ASSIGN or LA111_0 == DIV_ASSIGN or LA111_0 == MINUS_ASSIGN or LA111_0 == MOD_ASSIGN or LA111_0 == OR_ASSIGN or LA111_0 == PLUS_ASSIGN or LA111_0 == SHIFT_LEFT_ASSIGN or LA111_0 == SHIFT_RIGHT_ASSIGN or LA111_0 == STAR_ASSIGN or LA111_0 == XOR_ASSIGN) : + alt111 = 1 + if alt111 == 1: + # Java.g:752:13: ( ASSIGN | PLUS_ASSIGN | MINUS_ASSIGN | STAR_ASSIGN | DIV_ASSIGN | AND_ASSIGN | OR_ASSIGN | XOR_ASSIGN | MOD_ASSIGN | SHIFT_LEFT_ASSIGN | SHIFT_RIGHT_ASSIGN | BIT_SHIFT_RIGHT_ASSIGN ) assignmentExpression + pass + # Java.g:752:13: ( ASSIGN | PLUS_ASSIGN | MINUS_ASSIGN | STAR_ASSIGN | DIV_ASSIGN | AND_ASSIGN | OR_ASSIGN | XOR_ASSIGN | MOD_ASSIGN | SHIFT_LEFT_ASSIGN | SHIFT_RIGHT_ASSIGN | BIT_SHIFT_RIGHT_ASSIGN ) + alt110 = 12 + LA110 = self.input.LA(1) + if LA110 == ASSIGN: + alt110 = 1 + elif LA110 == PLUS_ASSIGN: + alt110 = 2 + elif LA110 == MINUS_ASSIGN: + alt110 = 3 + elif LA110 == STAR_ASSIGN: + alt110 = 4 + elif LA110 == DIV_ASSIGN: + alt110 = 5 + elif LA110 == AND_ASSIGN: + alt110 = 6 + elif LA110 == OR_ASSIGN: + alt110 = 7 + elif LA110 == XOR_ASSIGN: + alt110 = 8 + elif LA110 == MOD_ASSIGN: + alt110 = 9 + elif LA110 == SHIFT_LEFT_ASSIGN: + alt110 = 10 + elif LA110 == SHIFT_RIGHT_ASSIGN: + alt110 = 11 + elif LA110 == BIT_SHIFT_RIGHT_ASSIGN: + alt110 = 12 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 110, 0, self.input) + + raise nvae + + if alt110 == 1: + # Java.g:752:17: ASSIGN + pass + ASSIGN367=self.match(self.input, ASSIGN, self.FOLLOW_ASSIGN_in_assignmentExpression10273) + if self._state.backtracking == 0: + + ASSIGN367_tree = self._adaptor.createWithPayload(ASSIGN367) + root_0 = self._adaptor.becomeRoot(ASSIGN367_tree, root_0) + + + + elif alt110 == 2: + # Java.g:753:17: PLUS_ASSIGN + pass + PLUS_ASSIGN368=self.match(self.input, PLUS_ASSIGN, self.FOLLOW_PLUS_ASSIGN_in_assignmentExpression10292) + if self._state.backtracking == 0: + + PLUS_ASSIGN368_tree = self._adaptor.createWithPayload(PLUS_ASSIGN368) + root_0 = self._adaptor.becomeRoot(PLUS_ASSIGN368_tree, root_0) + + + + elif alt110 == 3: + # Java.g:754:17: MINUS_ASSIGN + pass + MINUS_ASSIGN369=self.match(self.input, MINUS_ASSIGN, self.FOLLOW_MINUS_ASSIGN_in_assignmentExpression10311) + if self._state.backtracking == 0: + + MINUS_ASSIGN369_tree = self._adaptor.createWithPayload(MINUS_ASSIGN369) + root_0 = self._adaptor.becomeRoot(MINUS_ASSIGN369_tree, root_0) + + + + elif alt110 == 4: + # Java.g:755:17: STAR_ASSIGN + pass + STAR_ASSIGN370=self.match(self.input, STAR_ASSIGN, self.FOLLOW_STAR_ASSIGN_in_assignmentExpression10330) + if self._state.backtracking == 0: + + STAR_ASSIGN370_tree = self._adaptor.createWithPayload(STAR_ASSIGN370) + root_0 = self._adaptor.becomeRoot(STAR_ASSIGN370_tree, root_0) + + + + elif alt110 == 5: + # Java.g:756:17: DIV_ASSIGN + pass + DIV_ASSIGN371=self.match(self.input, DIV_ASSIGN, self.FOLLOW_DIV_ASSIGN_in_assignmentExpression10349) + if self._state.backtracking == 0: + + DIV_ASSIGN371_tree = self._adaptor.createWithPayload(DIV_ASSIGN371) + root_0 = self._adaptor.becomeRoot(DIV_ASSIGN371_tree, root_0) + + + + elif alt110 == 6: + # Java.g:757:17: AND_ASSIGN + pass + AND_ASSIGN372=self.match(self.input, AND_ASSIGN, self.FOLLOW_AND_ASSIGN_in_assignmentExpression10368) + if self._state.backtracking == 0: + + AND_ASSIGN372_tree = self._adaptor.createWithPayload(AND_ASSIGN372) + root_0 = self._adaptor.becomeRoot(AND_ASSIGN372_tree, root_0) + + + + elif alt110 == 7: + # Java.g:758:17: OR_ASSIGN + pass + OR_ASSIGN373=self.match(self.input, OR_ASSIGN, self.FOLLOW_OR_ASSIGN_in_assignmentExpression10387) + if self._state.backtracking == 0: + + OR_ASSIGN373_tree = self._adaptor.createWithPayload(OR_ASSIGN373) + root_0 = self._adaptor.becomeRoot(OR_ASSIGN373_tree, root_0) + + + + elif alt110 == 8: + # Java.g:759:17: XOR_ASSIGN + pass + XOR_ASSIGN374=self.match(self.input, XOR_ASSIGN, self.FOLLOW_XOR_ASSIGN_in_assignmentExpression10406) + if self._state.backtracking == 0: + + XOR_ASSIGN374_tree = self._adaptor.createWithPayload(XOR_ASSIGN374) + root_0 = self._adaptor.becomeRoot(XOR_ASSIGN374_tree, root_0) + + + + elif alt110 == 9: + # Java.g:760:17: MOD_ASSIGN + pass + MOD_ASSIGN375=self.match(self.input, MOD_ASSIGN, self.FOLLOW_MOD_ASSIGN_in_assignmentExpression10425) + if self._state.backtracking == 0: + + MOD_ASSIGN375_tree = self._adaptor.createWithPayload(MOD_ASSIGN375) + root_0 = self._adaptor.becomeRoot(MOD_ASSIGN375_tree, root_0) + + + + elif alt110 == 10: + # Java.g:761:17: SHIFT_LEFT_ASSIGN + pass + SHIFT_LEFT_ASSIGN376=self.match(self.input, SHIFT_LEFT_ASSIGN, self.FOLLOW_SHIFT_LEFT_ASSIGN_in_assignmentExpression10444) + if self._state.backtracking == 0: + + SHIFT_LEFT_ASSIGN376_tree = self._adaptor.createWithPayload(SHIFT_LEFT_ASSIGN376) + root_0 = self._adaptor.becomeRoot(SHIFT_LEFT_ASSIGN376_tree, root_0) + + + + elif alt110 == 11: + # Java.g:762:17: SHIFT_RIGHT_ASSIGN + pass + SHIFT_RIGHT_ASSIGN377=self.match(self.input, SHIFT_RIGHT_ASSIGN, self.FOLLOW_SHIFT_RIGHT_ASSIGN_in_assignmentExpression10463) + if self._state.backtracking == 0: + + SHIFT_RIGHT_ASSIGN377_tree = self._adaptor.createWithPayload(SHIFT_RIGHT_ASSIGN377) + root_0 = self._adaptor.becomeRoot(SHIFT_RIGHT_ASSIGN377_tree, root_0) + + + + elif alt110 == 12: + # Java.g:763:17: BIT_SHIFT_RIGHT_ASSIGN + pass + BIT_SHIFT_RIGHT_ASSIGN378=self.match(self.input, BIT_SHIFT_RIGHT_ASSIGN, self.FOLLOW_BIT_SHIFT_RIGHT_ASSIGN_in_assignmentExpression10482) + if self._state.backtracking == 0: + + BIT_SHIFT_RIGHT_ASSIGN378_tree = self._adaptor.createWithPayload(BIT_SHIFT_RIGHT_ASSIGN378) + root_0 = self._adaptor.becomeRoot(BIT_SHIFT_RIGHT_ASSIGN378_tree, root_0) + + + + + self._state.following.append(self.FOLLOW_assignmentExpression_in_assignmentExpression10503) + assignmentExpression379 = self.assignmentExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, assignmentExpression379.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 89, assignmentExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "assignmentExpression" + + class conditionalExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.conditionalExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "conditionalExpression" + # Java.g:768:1: conditionalExpression : logicalOrExpression ( QUESTION assignmentExpression COLON conditionalExpression )? ; + def conditionalExpression(self, ): + + retval = self.conditionalExpression_return() + retval.start = self.input.LT(1) + conditionalExpression_StartIndex = self.input.index() + root_0 = None + + QUESTION381 = None + COLON383 = None + logicalOrExpression380 = None + + assignmentExpression382 = None + + conditionalExpression384 = None + + + QUESTION381_tree = None + COLON383_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 90): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:769:5: ( logicalOrExpression ( QUESTION assignmentExpression COLON conditionalExpression )? ) + # Java.g:769:9: logicalOrExpression ( QUESTION assignmentExpression COLON conditionalExpression )? + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_logicalOrExpression_in_conditionalExpression10524) + logicalOrExpression380 = self.logicalOrExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, logicalOrExpression380.tree) + # Java.g:769:29: ( QUESTION assignmentExpression COLON conditionalExpression )? + alt112 = 2 + LA112_0 = self.input.LA(1) + + if (LA112_0 == QUESTION) : + alt112 = 1 + if alt112 == 1: + # Java.g:769:30: QUESTION assignmentExpression COLON conditionalExpression + pass + QUESTION381=self.match(self.input, QUESTION, self.FOLLOW_QUESTION_in_conditionalExpression10527) + if self._state.backtracking == 0: + + QUESTION381_tree = self._adaptor.createWithPayload(QUESTION381) + root_0 = self._adaptor.becomeRoot(QUESTION381_tree, root_0) + + self._state.following.append(self.FOLLOW_assignmentExpression_in_conditionalExpression10530) + assignmentExpression382 = self.assignmentExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, assignmentExpression382.tree) + COLON383=self.match(self.input, COLON, self.FOLLOW_COLON_in_conditionalExpression10532) + self._state.following.append(self.FOLLOW_conditionalExpression_in_conditionalExpression10535) + conditionalExpression384 = self.conditionalExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, conditionalExpression384.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 90, conditionalExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "conditionalExpression" + + class logicalOrExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.logicalOrExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "logicalOrExpression" + # Java.g:772:1: logicalOrExpression : logicalAndExpression ( LOGICAL_OR logicalAndExpression )* ; + def logicalOrExpression(self, ): + + retval = self.logicalOrExpression_return() + retval.start = self.input.LT(1) + logicalOrExpression_StartIndex = self.input.index() + root_0 = None + + LOGICAL_OR386 = None + logicalAndExpression385 = None + + logicalAndExpression387 = None + + + LOGICAL_OR386_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 91): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:773:5: ( logicalAndExpression ( LOGICAL_OR logicalAndExpression )* ) + # Java.g:773:9: logicalAndExpression ( LOGICAL_OR logicalAndExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_logicalAndExpression_in_logicalOrExpression10556) + logicalAndExpression385 = self.logicalAndExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, logicalAndExpression385.tree) + # Java.g:773:30: ( LOGICAL_OR logicalAndExpression )* + while True: #loop113 + alt113 = 2 + LA113_0 = self.input.LA(1) + + if (LA113_0 == LOGICAL_OR) : + alt113 = 1 + + + if alt113 == 1: + # Java.g:773:31: LOGICAL_OR logicalAndExpression + pass + LOGICAL_OR386=self.match(self.input, LOGICAL_OR, self.FOLLOW_LOGICAL_OR_in_logicalOrExpression10559) + if self._state.backtracking == 0: + + LOGICAL_OR386_tree = self._adaptor.createWithPayload(LOGICAL_OR386) + root_0 = self._adaptor.becomeRoot(LOGICAL_OR386_tree, root_0) + + self._state.following.append(self.FOLLOW_logicalAndExpression_in_logicalOrExpression10562) + logicalAndExpression387 = self.logicalAndExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, logicalAndExpression387.tree) + + + else: + break #loop113 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 91, logicalOrExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "logicalOrExpression" + + class logicalAndExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.logicalAndExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "logicalAndExpression" + # Java.g:776:1: logicalAndExpression : inclusiveOrExpression ( LOGICAL_AND inclusiveOrExpression )* ; + def logicalAndExpression(self, ): + + retval = self.logicalAndExpression_return() + retval.start = self.input.LT(1) + logicalAndExpression_StartIndex = self.input.index() + root_0 = None + + LOGICAL_AND389 = None + inclusiveOrExpression388 = None + + inclusiveOrExpression390 = None + + + LOGICAL_AND389_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 92): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:777:5: ( inclusiveOrExpression ( LOGICAL_AND inclusiveOrExpression )* ) + # Java.g:777:9: inclusiveOrExpression ( LOGICAL_AND inclusiveOrExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_inclusiveOrExpression_in_logicalAndExpression10583) + inclusiveOrExpression388 = self.inclusiveOrExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, inclusiveOrExpression388.tree) + # Java.g:777:31: ( LOGICAL_AND inclusiveOrExpression )* + while True: #loop114 + alt114 = 2 + LA114_0 = self.input.LA(1) + + if (LA114_0 == LOGICAL_AND) : + alt114 = 1 + + + if alt114 == 1: + # Java.g:777:32: LOGICAL_AND inclusiveOrExpression + pass + LOGICAL_AND389=self.match(self.input, LOGICAL_AND, self.FOLLOW_LOGICAL_AND_in_logicalAndExpression10586) + if self._state.backtracking == 0: + + LOGICAL_AND389_tree = self._adaptor.createWithPayload(LOGICAL_AND389) + root_0 = self._adaptor.becomeRoot(LOGICAL_AND389_tree, root_0) + + self._state.following.append(self.FOLLOW_inclusiveOrExpression_in_logicalAndExpression10589) + inclusiveOrExpression390 = self.inclusiveOrExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, inclusiveOrExpression390.tree) + + + else: + break #loop114 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 92, logicalAndExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "logicalAndExpression" + + class inclusiveOrExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.inclusiveOrExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "inclusiveOrExpression" + # Java.g:780:1: inclusiveOrExpression : exclusiveOrExpression ( OR exclusiveOrExpression )* ; + def inclusiveOrExpression(self, ): + + retval = self.inclusiveOrExpression_return() + retval.start = self.input.LT(1) + inclusiveOrExpression_StartIndex = self.input.index() + root_0 = None + + OR392 = None + exclusiveOrExpression391 = None + + exclusiveOrExpression393 = None + + + OR392_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 93): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:781:5: ( exclusiveOrExpression ( OR exclusiveOrExpression )* ) + # Java.g:781:9: exclusiveOrExpression ( OR exclusiveOrExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression10610) + exclusiveOrExpression391 = self.exclusiveOrExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, exclusiveOrExpression391.tree) + # Java.g:781:31: ( OR exclusiveOrExpression )* + while True: #loop115 + alt115 = 2 + LA115_0 = self.input.LA(1) + + if (LA115_0 == OR) : + alt115 = 1 + + + if alt115 == 1: + # Java.g:781:32: OR exclusiveOrExpression + pass + OR392=self.match(self.input, OR, self.FOLLOW_OR_in_inclusiveOrExpression10613) + if self._state.backtracking == 0: + + OR392_tree = self._adaptor.createWithPayload(OR392) + root_0 = self._adaptor.becomeRoot(OR392_tree, root_0) + + self._state.following.append(self.FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression10616) + exclusiveOrExpression393 = self.exclusiveOrExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, exclusiveOrExpression393.tree) + + + else: + break #loop115 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 93, inclusiveOrExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "inclusiveOrExpression" + + class exclusiveOrExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.exclusiveOrExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "exclusiveOrExpression" + # Java.g:784:1: exclusiveOrExpression : andExpression ( XOR andExpression )* ; + def exclusiveOrExpression(self, ): + + retval = self.exclusiveOrExpression_return() + retval.start = self.input.LT(1) + exclusiveOrExpression_StartIndex = self.input.index() + root_0 = None + + XOR395 = None + andExpression394 = None + + andExpression396 = None + + + XOR395_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 94): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:785:5: ( andExpression ( XOR andExpression )* ) + # Java.g:785:9: andExpression ( XOR andExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_andExpression_in_exclusiveOrExpression10637) + andExpression394 = self.andExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, andExpression394.tree) + # Java.g:785:23: ( XOR andExpression )* + while True: #loop116 + alt116 = 2 + LA116_0 = self.input.LA(1) + + if (LA116_0 == XOR) : + alt116 = 1 + + + if alt116 == 1: + # Java.g:785:24: XOR andExpression + pass + XOR395=self.match(self.input, XOR, self.FOLLOW_XOR_in_exclusiveOrExpression10640) + if self._state.backtracking == 0: + + XOR395_tree = self._adaptor.createWithPayload(XOR395) + root_0 = self._adaptor.becomeRoot(XOR395_tree, root_0) + + self._state.following.append(self.FOLLOW_andExpression_in_exclusiveOrExpression10643) + andExpression396 = self.andExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, andExpression396.tree) + + + else: + break #loop116 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 94, exclusiveOrExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "exclusiveOrExpression" + + class andExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.andExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "andExpression" + # Java.g:788:1: andExpression : equalityExpression ( AND equalityExpression )* ; + def andExpression(self, ): + + retval = self.andExpression_return() + retval.start = self.input.LT(1) + andExpression_StartIndex = self.input.index() + root_0 = None + + AND398 = None + equalityExpression397 = None + + equalityExpression399 = None + + + AND398_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 95): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:789:5: ( equalityExpression ( AND equalityExpression )* ) + # Java.g:789:9: equalityExpression ( AND equalityExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_equalityExpression_in_andExpression10664) + equalityExpression397 = self.equalityExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, equalityExpression397.tree) + # Java.g:789:28: ( AND equalityExpression )* + while True: #loop117 + alt117 = 2 + LA117_0 = self.input.LA(1) + + if (LA117_0 == AND) : + alt117 = 1 + + + if alt117 == 1: + # Java.g:789:29: AND equalityExpression + pass + AND398=self.match(self.input, AND, self.FOLLOW_AND_in_andExpression10667) + if self._state.backtracking == 0: + + AND398_tree = self._adaptor.createWithPayload(AND398) + root_0 = self._adaptor.becomeRoot(AND398_tree, root_0) + + self._state.following.append(self.FOLLOW_equalityExpression_in_andExpression10670) + equalityExpression399 = self.equalityExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, equalityExpression399.tree) + + + else: + break #loop117 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 95, andExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "andExpression" + + class equalityExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.equalityExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "equalityExpression" + # Java.g:792:1: equalityExpression : instanceOfExpression ( ( EQUAL | NOT_EQUAL ) instanceOfExpression )* ; + def equalityExpression(self, ): + + retval = self.equalityExpression_return() + retval.start = self.input.LT(1) + equalityExpression_StartIndex = self.input.index() + root_0 = None + + EQUAL401 = None + NOT_EQUAL402 = None + instanceOfExpression400 = None + + instanceOfExpression403 = None + + + EQUAL401_tree = None + NOT_EQUAL402_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 96): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:793:5: ( instanceOfExpression ( ( EQUAL | NOT_EQUAL ) instanceOfExpression )* ) + # Java.g:793:9: instanceOfExpression ( ( EQUAL | NOT_EQUAL ) instanceOfExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_instanceOfExpression_in_equalityExpression10691) + instanceOfExpression400 = self.instanceOfExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, instanceOfExpression400.tree) + # Java.g:794:9: ( ( EQUAL | NOT_EQUAL ) instanceOfExpression )* + while True: #loop119 + alt119 = 2 + LA119_0 = self.input.LA(1) + + if (LA119_0 == EQUAL or LA119_0 == NOT_EQUAL) : + alt119 = 1 + + + if alt119 == 1: + # Java.g:794:13: ( EQUAL | NOT_EQUAL ) instanceOfExpression + pass + # Java.g:794:13: ( EQUAL | NOT_EQUAL ) + alt118 = 2 + LA118_0 = self.input.LA(1) + + if (LA118_0 == EQUAL) : + alt118 = 1 + elif (LA118_0 == NOT_EQUAL) : + alt118 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 118, 0, self.input) + + raise nvae + + if alt118 == 1: + # Java.g:794:17: EQUAL + pass + EQUAL401=self.match(self.input, EQUAL, self.FOLLOW_EQUAL_in_equalityExpression10709) + if self._state.backtracking == 0: + + EQUAL401_tree = self._adaptor.createWithPayload(EQUAL401) + root_0 = self._adaptor.becomeRoot(EQUAL401_tree, root_0) + + + + elif alt118 == 2: + # Java.g:795:17: NOT_EQUAL + pass + NOT_EQUAL402=self.match(self.input, NOT_EQUAL, self.FOLLOW_NOT_EQUAL_in_equalityExpression10728) + if self._state.backtracking == 0: + + NOT_EQUAL402_tree = self._adaptor.createWithPayload(NOT_EQUAL402) + root_0 = self._adaptor.becomeRoot(NOT_EQUAL402_tree, root_0) + + + + + self._state.following.append(self.FOLLOW_instanceOfExpression_in_equalityExpression10757) + instanceOfExpression403 = self.instanceOfExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, instanceOfExpression403.tree) + + + else: + break #loop119 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 96, equalityExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "equalityExpression" + + class instanceOfExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.instanceOfExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "instanceOfExpression" + # Java.g:801:1: instanceOfExpression : relationalExpression ( INSTANCEOF type )? ; + def instanceOfExpression(self, ): + + retval = self.instanceOfExpression_return() + retval.start = self.input.LT(1) + instanceOfExpression_StartIndex = self.input.index() + root_0 = None + + INSTANCEOF405 = None + relationalExpression404 = None + + type406 = None + + + INSTANCEOF405_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 97): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:802:5: ( relationalExpression ( INSTANCEOF type )? ) + # Java.g:802:9: relationalExpression ( INSTANCEOF type )? + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_relationalExpression_in_instanceOfExpression10787) + relationalExpression404 = self.relationalExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, relationalExpression404.tree) + # Java.g:802:30: ( INSTANCEOF type )? + alt120 = 2 + LA120_0 = self.input.LA(1) + + if (LA120_0 == INSTANCEOF) : + alt120 = 1 + if alt120 == 1: + # Java.g:802:31: INSTANCEOF type + pass + INSTANCEOF405=self.match(self.input, INSTANCEOF, self.FOLLOW_INSTANCEOF_in_instanceOfExpression10790) + if self._state.backtracking == 0: + + INSTANCEOF405_tree = self._adaptor.createWithPayload(INSTANCEOF405) + root_0 = self._adaptor.becomeRoot(INSTANCEOF405_tree, root_0) + + self._state.following.append(self.FOLLOW_type_in_instanceOfExpression10793) + type406 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, type406.tree) + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 97, instanceOfExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "instanceOfExpression" + + class relationalExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.relationalExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "relationalExpression" + # Java.g:805:1: relationalExpression : shiftExpression ( ( LESS_OR_EQUAL | GREATER_OR_EQUAL | LESS_THAN | GREATER_THAN ) shiftExpression )* ; + def relationalExpression(self, ): + + retval = self.relationalExpression_return() + retval.start = self.input.LT(1) + relationalExpression_StartIndex = self.input.index() + root_0 = None + + LESS_OR_EQUAL408 = None + GREATER_OR_EQUAL409 = None + LESS_THAN410 = None + GREATER_THAN411 = None + shiftExpression407 = None + + shiftExpression412 = None + + + LESS_OR_EQUAL408_tree = None + GREATER_OR_EQUAL409_tree = None + LESS_THAN410_tree = None + GREATER_THAN411_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 98): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:806:5: ( shiftExpression ( ( LESS_OR_EQUAL | GREATER_OR_EQUAL | LESS_THAN | GREATER_THAN ) shiftExpression )* ) + # Java.g:806:9: shiftExpression ( ( LESS_OR_EQUAL | GREATER_OR_EQUAL | LESS_THAN | GREATER_THAN ) shiftExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_shiftExpression_in_relationalExpression10814) + shiftExpression407 = self.shiftExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, shiftExpression407.tree) + # Java.g:807:9: ( ( LESS_OR_EQUAL | GREATER_OR_EQUAL | LESS_THAN | GREATER_THAN ) shiftExpression )* + while True: #loop122 + alt122 = 2 + LA122_0 = self.input.LA(1) + + if ((GREATER_OR_EQUAL <= LA122_0 <= GREATER_THAN) or (LESS_OR_EQUAL <= LA122_0 <= LESS_THAN)) : + alt122 = 1 + + + if alt122 == 1: + # Java.g:807:13: ( LESS_OR_EQUAL | GREATER_OR_EQUAL | LESS_THAN | GREATER_THAN ) shiftExpression + pass + # Java.g:807:13: ( LESS_OR_EQUAL | GREATER_OR_EQUAL | LESS_THAN | GREATER_THAN ) + alt121 = 4 + LA121 = self.input.LA(1) + if LA121 == LESS_OR_EQUAL: + alt121 = 1 + elif LA121 == GREATER_OR_EQUAL: + alt121 = 2 + elif LA121 == LESS_THAN: + alt121 = 3 + elif LA121 == GREATER_THAN: + alt121 = 4 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 121, 0, self.input) + + raise nvae + + if alt121 == 1: + # Java.g:807:17: LESS_OR_EQUAL + pass + LESS_OR_EQUAL408=self.match(self.input, LESS_OR_EQUAL, self.FOLLOW_LESS_OR_EQUAL_in_relationalExpression10832) + if self._state.backtracking == 0: + + LESS_OR_EQUAL408_tree = self._adaptor.createWithPayload(LESS_OR_EQUAL408) + root_0 = self._adaptor.becomeRoot(LESS_OR_EQUAL408_tree, root_0) + + + + elif alt121 == 2: + # Java.g:808:17: GREATER_OR_EQUAL + pass + GREATER_OR_EQUAL409=self.match(self.input, GREATER_OR_EQUAL, self.FOLLOW_GREATER_OR_EQUAL_in_relationalExpression10851) + if self._state.backtracking == 0: + + GREATER_OR_EQUAL409_tree = self._adaptor.createWithPayload(GREATER_OR_EQUAL409) + root_0 = self._adaptor.becomeRoot(GREATER_OR_EQUAL409_tree, root_0) + + + + elif alt121 == 3: + # Java.g:809:17: LESS_THAN + pass + LESS_THAN410=self.match(self.input, LESS_THAN, self.FOLLOW_LESS_THAN_in_relationalExpression10870) + if self._state.backtracking == 0: + + LESS_THAN410_tree = self._adaptor.createWithPayload(LESS_THAN410) + root_0 = self._adaptor.becomeRoot(LESS_THAN410_tree, root_0) + + + + elif alt121 == 4: + # Java.g:810:17: GREATER_THAN + pass + GREATER_THAN411=self.match(self.input, GREATER_THAN, self.FOLLOW_GREATER_THAN_in_relationalExpression10889) + if self._state.backtracking == 0: + + GREATER_THAN411_tree = self._adaptor.createWithPayload(GREATER_THAN411) + root_0 = self._adaptor.becomeRoot(GREATER_THAN411_tree, root_0) + + + + + self._state.following.append(self.FOLLOW_shiftExpression_in_relationalExpression10918) + shiftExpression412 = self.shiftExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, shiftExpression412.tree) + + + else: + break #loop122 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 98, relationalExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "relationalExpression" + + class shiftExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.shiftExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "shiftExpression" + # Java.g:816:1: shiftExpression : additiveExpression ( ( BIT_SHIFT_RIGHT | SHIFT_RIGHT | SHIFT_LEFT ) additiveExpression )* ; + def shiftExpression(self, ): + + retval = self.shiftExpression_return() + retval.start = self.input.LT(1) + shiftExpression_StartIndex = self.input.index() + root_0 = None + + BIT_SHIFT_RIGHT414 = None + SHIFT_RIGHT415 = None + SHIFT_LEFT416 = None + additiveExpression413 = None + + additiveExpression417 = None + + + BIT_SHIFT_RIGHT414_tree = None + SHIFT_RIGHT415_tree = None + SHIFT_LEFT416_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 99): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:817:5: ( additiveExpression ( ( BIT_SHIFT_RIGHT | SHIFT_RIGHT | SHIFT_LEFT ) additiveExpression )* ) + # Java.g:817:9: additiveExpression ( ( BIT_SHIFT_RIGHT | SHIFT_RIGHT | SHIFT_LEFT ) additiveExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_additiveExpression_in_shiftExpression10948) + additiveExpression413 = self.additiveExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, additiveExpression413.tree) + # Java.g:818:9: ( ( BIT_SHIFT_RIGHT | SHIFT_RIGHT | SHIFT_LEFT ) additiveExpression )* + while True: #loop124 + alt124 = 2 + LA124_0 = self.input.LA(1) + + if (LA124_0 == BIT_SHIFT_RIGHT or LA124_0 == SHIFT_LEFT or LA124_0 == SHIFT_RIGHT) : + alt124 = 1 + + + if alt124 == 1: + # Java.g:818:13: ( BIT_SHIFT_RIGHT | SHIFT_RIGHT | SHIFT_LEFT ) additiveExpression + pass + # Java.g:818:13: ( BIT_SHIFT_RIGHT | SHIFT_RIGHT | SHIFT_LEFT ) + alt123 = 3 + LA123 = self.input.LA(1) + if LA123 == BIT_SHIFT_RIGHT: + alt123 = 1 + elif LA123 == SHIFT_RIGHT: + alt123 = 2 + elif LA123 == SHIFT_LEFT: + alt123 = 3 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 123, 0, self.input) + + raise nvae + + if alt123 == 1: + # Java.g:818:17: BIT_SHIFT_RIGHT + pass + BIT_SHIFT_RIGHT414=self.match(self.input, BIT_SHIFT_RIGHT, self.FOLLOW_BIT_SHIFT_RIGHT_in_shiftExpression10966) + if self._state.backtracking == 0: + + BIT_SHIFT_RIGHT414_tree = self._adaptor.createWithPayload(BIT_SHIFT_RIGHT414) + root_0 = self._adaptor.becomeRoot(BIT_SHIFT_RIGHT414_tree, root_0) + + + + elif alt123 == 2: + # Java.g:819:17: SHIFT_RIGHT + pass + SHIFT_RIGHT415=self.match(self.input, SHIFT_RIGHT, self.FOLLOW_SHIFT_RIGHT_in_shiftExpression10985) + if self._state.backtracking == 0: + + SHIFT_RIGHT415_tree = self._adaptor.createWithPayload(SHIFT_RIGHT415) + root_0 = self._adaptor.becomeRoot(SHIFT_RIGHT415_tree, root_0) + + + + elif alt123 == 3: + # Java.g:820:17: SHIFT_LEFT + pass + SHIFT_LEFT416=self.match(self.input, SHIFT_LEFT, self.FOLLOW_SHIFT_LEFT_in_shiftExpression11004) + if self._state.backtracking == 0: + + SHIFT_LEFT416_tree = self._adaptor.createWithPayload(SHIFT_LEFT416) + root_0 = self._adaptor.becomeRoot(SHIFT_LEFT416_tree, root_0) + + + + + self._state.following.append(self.FOLLOW_additiveExpression_in_shiftExpression11033) + additiveExpression417 = self.additiveExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, additiveExpression417.tree) + + + else: + break #loop124 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 99, shiftExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "shiftExpression" + + class additiveExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.additiveExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "additiveExpression" + # Java.g:826:1: additiveExpression : multiplicativeExpression ( ( PLUS | MINUS ) multiplicativeExpression )* ; + def additiveExpression(self, ): + + retval = self.additiveExpression_return() + retval.start = self.input.LT(1) + additiveExpression_StartIndex = self.input.index() + root_0 = None + + PLUS419 = None + MINUS420 = None + multiplicativeExpression418 = None + + multiplicativeExpression421 = None + + + PLUS419_tree = None + MINUS420_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 100): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:827:5: ( multiplicativeExpression ( ( PLUS | MINUS ) multiplicativeExpression )* ) + # Java.g:827:9: multiplicativeExpression ( ( PLUS | MINUS ) multiplicativeExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_multiplicativeExpression_in_additiveExpression11063) + multiplicativeExpression418 = self.multiplicativeExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, multiplicativeExpression418.tree) + # Java.g:828:9: ( ( PLUS | MINUS ) multiplicativeExpression )* + while True: #loop126 + alt126 = 2 + LA126_0 = self.input.LA(1) + + if (LA126_0 == MINUS or LA126_0 == PLUS) : + alt126 = 1 + + + if alt126 == 1: + # Java.g:828:13: ( PLUS | MINUS ) multiplicativeExpression + pass + # Java.g:828:13: ( PLUS | MINUS ) + alt125 = 2 + LA125_0 = self.input.LA(1) + + if (LA125_0 == PLUS) : + alt125 = 1 + elif (LA125_0 == MINUS) : + alt125 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 125, 0, self.input) + + raise nvae + + if alt125 == 1: + # Java.g:828:17: PLUS + pass + PLUS419=self.match(self.input, PLUS, self.FOLLOW_PLUS_in_additiveExpression11081) + if self._state.backtracking == 0: + + PLUS419_tree = self._adaptor.createWithPayload(PLUS419) + root_0 = self._adaptor.becomeRoot(PLUS419_tree, root_0) + + + + elif alt125 == 2: + # Java.g:829:17: MINUS + pass + MINUS420=self.match(self.input, MINUS, self.FOLLOW_MINUS_in_additiveExpression11100) + if self._state.backtracking == 0: + + MINUS420_tree = self._adaptor.createWithPayload(MINUS420) + root_0 = self._adaptor.becomeRoot(MINUS420_tree, root_0) + + + + + self._state.following.append(self.FOLLOW_multiplicativeExpression_in_additiveExpression11129) + multiplicativeExpression421 = self.multiplicativeExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, multiplicativeExpression421.tree) + + + else: + break #loop126 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 100, additiveExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "additiveExpression" + + class multiplicativeExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.multiplicativeExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "multiplicativeExpression" + # Java.g:835:1: multiplicativeExpression : unaryExpression ( ( STAR | DIV | MOD ) unaryExpression )* ; + def multiplicativeExpression(self, ): + + retval = self.multiplicativeExpression_return() + retval.start = self.input.LT(1) + multiplicativeExpression_StartIndex = self.input.index() + root_0 = None + + STAR423 = None + DIV424 = None + MOD425 = None + unaryExpression422 = None + + unaryExpression426 = None + + + STAR423_tree = None + DIV424_tree = None + MOD425_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 101): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:836:5: ( unaryExpression ( ( STAR | DIV | MOD ) unaryExpression )* ) + # Java.g:836:9: unaryExpression ( ( STAR | DIV | MOD ) unaryExpression )* + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_unaryExpression_in_multiplicativeExpression11159) + unaryExpression422 = self.unaryExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, unaryExpression422.tree) + # Java.g:837:9: ( ( STAR | DIV | MOD ) unaryExpression )* + while True: #loop128 + alt128 = 2 + LA128_0 = self.input.LA(1) + + if (LA128_0 == DIV or LA128_0 == MOD or LA128_0 == STAR) : + alt128 = 1 + + + if alt128 == 1: + # Java.g:837:13: ( STAR | DIV | MOD ) unaryExpression + pass + # Java.g:837:13: ( STAR | DIV | MOD ) + alt127 = 3 + LA127 = self.input.LA(1) + if LA127 == STAR: + alt127 = 1 + elif LA127 == DIV: + alt127 = 2 + elif LA127 == MOD: + alt127 = 3 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 127, 0, self.input) + + raise nvae + + if alt127 == 1: + # Java.g:837:17: STAR + pass + STAR423=self.match(self.input, STAR, self.FOLLOW_STAR_in_multiplicativeExpression11177) + if self._state.backtracking == 0: + + STAR423_tree = self._adaptor.createWithPayload(STAR423) + root_0 = self._adaptor.becomeRoot(STAR423_tree, root_0) + + + + elif alt127 == 2: + # Java.g:838:17: DIV + pass + DIV424=self.match(self.input, DIV, self.FOLLOW_DIV_in_multiplicativeExpression11196) + if self._state.backtracking == 0: + + DIV424_tree = self._adaptor.createWithPayload(DIV424) + root_0 = self._adaptor.becomeRoot(DIV424_tree, root_0) + + + + elif alt127 == 3: + # Java.g:839:17: MOD + pass + MOD425=self.match(self.input, MOD, self.FOLLOW_MOD_in_multiplicativeExpression11215) + if self._state.backtracking == 0: + + MOD425_tree = self._adaptor.createWithPayload(MOD425) + root_0 = self._adaptor.becomeRoot(MOD425_tree, root_0) + + + + + self._state.following.append(self.FOLLOW_unaryExpression_in_multiplicativeExpression11244) + unaryExpression426 = self.unaryExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, unaryExpression426.tree) + + + else: + break #loop128 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 101, multiplicativeExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "multiplicativeExpression" + + class unaryExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.unaryExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "unaryExpression" + # Java.g:845:1: unaryExpression : ( PLUS unaryExpression -> ^( UNARY_PLUS[$PLUS, \"UNARY_PLUS\"] unaryExpression ) | MINUS unaryExpression -> ^( UNARY_MINUS[$MINUS, \"UNARY_MINUS\"] unaryExpression ) | INC postfixedExpression -> ^( PRE_INC[$INC, \"PRE_INC\"] postfixedExpression ) | DEC postfixedExpression -> ^( PRE_DEC[$DEC, \"PRE_DEC\"] postfixedExpression ) | unaryExpressionNotPlusMinus ); + def unaryExpression(self, ): + + retval = self.unaryExpression_return() + retval.start = self.input.LT(1) + unaryExpression_StartIndex = self.input.index() + root_0 = None + + PLUS427 = None + MINUS429 = None + INC431 = None + DEC433 = None + unaryExpression428 = None + + unaryExpression430 = None + + postfixedExpression432 = None + + postfixedExpression434 = None + + unaryExpressionNotPlusMinus435 = None + + + PLUS427_tree = None + MINUS429_tree = None + INC431_tree = None + DEC433_tree = None + stream_DEC = RewriteRuleTokenStream(self._adaptor, "token DEC") + stream_INC = RewriteRuleTokenStream(self._adaptor, "token INC") + stream_PLUS = RewriteRuleTokenStream(self._adaptor, "token PLUS") + stream_MINUS = RewriteRuleTokenStream(self._adaptor, "token MINUS") + stream_postfixedExpression = RewriteRuleSubtreeStream(self._adaptor, "rule postfixedExpression") + stream_unaryExpression = RewriteRuleSubtreeStream(self._adaptor, "rule unaryExpression") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 102): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:846:5: ( PLUS unaryExpression -> ^( UNARY_PLUS[$PLUS, \"UNARY_PLUS\"] unaryExpression ) | MINUS unaryExpression -> ^( UNARY_MINUS[$MINUS, \"UNARY_MINUS\"] unaryExpression ) | INC postfixedExpression -> ^( PRE_INC[$INC, \"PRE_INC\"] postfixedExpression ) | DEC postfixedExpression -> ^( PRE_DEC[$DEC, \"PRE_DEC\"] postfixedExpression ) | unaryExpressionNotPlusMinus ) + alt129 = 5 + LA129 = self.input.LA(1) + if LA129 == PLUS: + alt129 = 1 + elif LA129 == MINUS: + alt129 = 2 + elif LA129 == INC: + alt129 = 3 + elif LA129 == DEC: + alt129 = 4 + elif LA129 == LESS_THAN or LA129 == LOGICAL_NOT or LA129 == LPAREN or LA129 == NOT or LA129 == BOOLEAN or LA129 == BYTE or LA129 == CHAR or LA129 == DOUBLE or LA129 == FALSE or LA129 == FLOAT or LA129 == INT or LA129 == LONG or LA129 == NEW or LA129 == NULL or LA129 == SHORT or LA129 == SUPER or LA129 == THIS or LA129 == TRUE or LA129 == VOID or LA129 == IDENT or LA129 == HEX_LITERAL or LA129 == OCTAL_LITERAL or LA129 == DECIMAL_LITERAL or LA129 == FLOATING_POINT_LITERAL or LA129 == CHARACTER_LITERAL or LA129 == STRING_LITERAL: + alt129 = 5 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 129, 0, self.input) + + raise nvae + + if alt129 == 1: + # Java.g:846:9: PLUS unaryExpression + pass + PLUS427=self.match(self.input, PLUS, self.FOLLOW_PLUS_in_unaryExpression11274) + if self._state.backtracking == 0: + stream_PLUS.add(PLUS427) + self._state.following.append(self.FOLLOW_unaryExpression_in_unaryExpression11276) + unaryExpression428 = self.unaryExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_unaryExpression.add(unaryExpression428.tree) + + # AST Rewrite + # elements: unaryExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 846:37: -> ^( UNARY_PLUS[$PLUS, \"UNARY_PLUS\"] unaryExpression ) + # Java.g:846:41: ^( UNARY_PLUS[$PLUS, \"UNARY_PLUS\"] unaryExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(UNARY_PLUS, PLUS427, "UNARY_PLUS"), root_1) + + self._adaptor.addChild(root_1, stream_unaryExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt129 == 2: + # Java.g:847:9: MINUS unaryExpression + pass + MINUS429=self.match(self.input, MINUS, self.FOLLOW_MINUS_in_unaryExpression11303) + if self._state.backtracking == 0: + stream_MINUS.add(MINUS429) + self._state.following.append(self.FOLLOW_unaryExpression_in_unaryExpression11305) + unaryExpression430 = self.unaryExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_unaryExpression.add(unaryExpression430.tree) + + # AST Rewrite + # elements: unaryExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 847:37: -> ^( UNARY_MINUS[$MINUS, \"UNARY_MINUS\"] unaryExpression ) + # Java.g:847:41: ^( UNARY_MINUS[$MINUS, \"UNARY_MINUS\"] unaryExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(UNARY_MINUS, MINUS429, "UNARY_MINUS"), root_1) + + self._adaptor.addChild(root_1, stream_unaryExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt129 == 3: + # Java.g:848:9: INC postfixedExpression + pass + INC431=self.match(self.input, INC, self.FOLLOW_INC_in_unaryExpression11331) + if self._state.backtracking == 0: + stream_INC.add(INC431) + self._state.following.append(self.FOLLOW_postfixedExpression_in_unaryExpression11333) + postfixedExpression432 = self.postfixedExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_postfixedExpression.add(postfixedExpression432.tree) + + # AST Rewrite + # elements: postfixedExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 848:37: -> ^( PRE_INC[$INC, \"PRE_INC\"] postfixedExpression ) + # Java.g:848:41: ^( PRE_INC[$INC, \"PRE_INC\"] postfixedExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(PRE_INC, INC431, "PRE_INC"), root_1) + + self._adaptor.addChild(root_1, stream_postfixedExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt129 == 4: + # Java.g:849:9: DEC postfixedExpression + pass + DEC433=self.match(self.input, DEC, self.FOLLOW_DEC_in_unaryExpression11357) + if self._state.backtracking == 0: + stream_DEC.add(DEC433) + self._state.following.append(self.FOLLOW_postfixedExpression_in_unaryExpression11359) + postfixedExpression434 = self.postfixedExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_postfixedExpression.add(postfixedExpression434.tree) + + # AST Rewrite + # elements: postfixedExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 849:37: -> ^( PRE_DEC[$DEC, \"PRE_DEC\"] postfixedExpression ) + # Java.g:849:41: ^( PRE_DEC[$DEC, \"PRE_DEC\"] postfixedExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(PRE_DEC, DEC433, "PRE_DEC"), root_1) + + self._adaptor.addChild(root_1, stream_postfixedExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt129 == 5: + # Java.g:850:9: unaryExpressionNotPlusMinus + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_unaryExpressionNotPlusMinus_in_unaryExpression11383) + unaryExpressionNotPlusMinus435 = self.unaryExpressionNotPlusMinus() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, unaryExpressionNotPlusMinus435.tree) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 102, unaryExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "unaryExpression" + + class unaryExpressionNotPlusMinus_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.unaryExpressionNotPlusMinus_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "unaryExpressionNotPlusMinus" + # Java.g:853:1: unaryExpressionNotPlusMinus : ( NOT unaryExpression -> ^( NOT unaryExpression ) | LOGICAL_NOT unaryExpression -> ^( LOGICAL_NOT unaryExpression ) | LPAREN type RPAREN unaryExpression -> ^( CAST_EXPR[$LPAREN, \"CAST_EXPR\"] type unaryExpression ) | postfixedExpression ); + def unaryExpressionNotPlusMinus(self, ): + + retval = self.unaryExpressionNotPlusMinus_return() + retval.start = self.input.LT(1) + unaryExpressionNotPlusMinus_StartIndex = self.input.index() + root_0 = None + + NOT436 = None + LOGICAL_NOT438 = None + LPAREN440 = None + RPAREN442 = None + unaryExpression437 = None + + unaryExpression439 = None + + type441 = None + + unaryExpression443 = None + + postfixedExpression444 = None + + + NOT436_tree = None + LOGICAL_NOT438_tree = None + LPAREN440_tree = None + RPAREN442_tree = None + stream_RPAREN = RewriteRuleTokenStream(self._adaptor, "token RPAREN") + stream_LOGICAL_NOT = RewriteRuleTokenStream(self._adaptor, "token LOGICAL_NOT") + stream_NOT = RewriteRuleTokenStream(self._adaptor, "token NOT") + stream_LPAREN = RewriteRuleTokenStream(self._adaptor, "token LPAREN") + stream_unaryExpression = RewriteRuleSubtreeStream(self._adaptor, "rule unaryExpression") + stream_type = RewriteRuleSubtreeStream(self._adaptor, "rule type") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 103): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:854:5: ( NOT unaryExpression -> ^( NOT unaryExpression ) | LOGICAL_NOT unaryExpression -> ^( LOGICAL_NOT unaryExpression ) | LPAREN type RPAREN unaryExpression -> ^( CAST_EXPR[$LPAREN, \"CAST_EXPR\"] type unaryExpression ) | postfixedExpression ) + alt130 = 4 + alt130 = self.dfa130.predict(self.input) + if alt130 == 1: + # Java.g:854:9: NOT unaryExpression + pass + NOT436=self.match(self.input, NOT, self.FOLLOW_NOT_in_unaryExpressionNotPlusMinus11402) + if self._state.backtracking == 0: + stream_NOT.add(NOT436) + self._state.following.append(self.FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus11404) + unaryExpression437 = self.unaryExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_unaryExpression.add(unaryExpression437.tree) + + # AST Rewrite + # elements: unaryExpression, NOT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 854:57: -> ^( NOT unaryExpression ) + # Java.g:854:61: ^( NOT unaryExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_NOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_unaryExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt130 == 2: + # Java.g:855:9: LOGICAL_NOT unaryExpression + pass + LOGICAL_NOT438=self.match(self.input, LOGICAL_NOT, self.FOLLOW_LOGICAL_NOT_in_unaryExpressionNotPlusMinus11451) + if self._state.backtracking == 0: + stream_LOGICAL_NOT.add(LOGICAL_NOT438) + self._state.following.append(self.FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus11453) + unaryExpression439 = self.unaryExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_unaryExpression.add(unaryExpression439.tree) + + # AST Rewrite + # elements: unaryExpression, LOGICAL_NOT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 855:57: -> ^( LOGICAL_NOT unaryExpression ) + # Java.g:855:61: ^( LOGICAL_NOT unaryExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_LOGICAL_NOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_unaryExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt130 == 3: + # Java.g:856:9: LPAREN type RPAREN unaryExpression + pass + LPAREN440=self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_unaryExpressionNotPlusMinus11492) + if self._state.backtracking == 0: + stream_LPAREN.add(LPAREN440) + self._state.following.append(self.FOLLOW_type_in_unaryExpressionNotPlusMinus11494) + type441 = self.type() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_type.add(type441.tree) + RPAREN442=self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_unaryExpressionNotPlusMinus11496) + if self._state.backtracking == 0: + stream_RPAREN.add(RPAREN442) + self._state.following.append(self.FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus11498) + unaryExpression443 = self.unaryExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_unaryExpression.add(unaryExpression443.tree) + + # AST Rewrite + # elements: type, unaryExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 856:57: -> ^( CAST_EXPR[$LPAREN, \"CAST_EXPR\"] type unaryExpression ) + # Java.g:856:61: ^( CAST_EXPR[$LPAREN, \"CAST_EXPR\"] type unaryExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(CAST_EXPR, LPAREN440, "CAST_EXPR"), root_1) + + self._adaptor.addChild(root_1, stream_type.nextTree()) + self._adaptor.addChild(root_1, stream_unaryExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt130 == 4: + # Java.g:857:9: postfixedExpression + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_postfixedExpression_in_unaryExpressionNotPlusMinus11533) + postfixedExpression444 = self.postfixedExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, postfixedExpression444.tree) + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 103, unaryExpressionNotPlusMinus_StartIndex, success) + + pass + return retval + + # $ANTLR end "unaryExpressionNotPlusMinus" + + class postfixedExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.postfixedExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "postfixedExpression" + # Java.g:860:1: postfixedExpression : ( primaryExpression -> primaryExpression ) (outerDot= DOT ( ( ( genericTypeArgumentListSimplified )? IDENT -> ^( DOT $postfixedExpression IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) )? | THIS -> ^( DOT $postfixedExpression THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] $postfixedExpression arguments ) | ( SUPER innerDot= DOT IDENT -> ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression arguments ) )? | innerNewExpression -> ^( DOT $postfixedExpression innerNewExpression ) ) | LBRACK expression RBRACK -> ^( ARRAY_ELEMENT_ACCESS $postfixedExpression expression ) )* ( INC -> ^( POST_INC[$INC, \"POST_INC\"] $postfixedExpression) | DEC -> ^( POST_DEC[$DEC, \"POST_DEC\"] $postfixedExpression) )? ; + def postfixedExpression(self, ): + + retval = self.postfixedExpression_return() + retval.start = self.input.LT(1) + postfixedExpression_StartIndex = self.input.index() + root_0 = None + + outerDot = None + Super = None + innerDot = None + IDENT447 = None + THIS449 = None + SUPER451 = None + IDENT452 = None + LBRACK455 = None + RBRACK457 = None + INC458 = None + DEC459 = None + primaryExpression445 = None + + genericTypeArgumentListSimplified446 = None + + arguments448 = None + + arguments450 = None + + arguments453 = None + + innerNewExpression454 = None + + expression456 = None + + + outerDot_tree = None + Super_tree = None + innerDot_tree = None + IDENT447_tree = None + THIS449_tree = None + SUPER451_tree = None + IDENT452_tree = None + LBRACK455_tree = None + RBRACK457_tree = None + INC458_tree = None + DEC459_tree = None + stream_RBRACK = RewriteRuleTokenStream(self._adaptor, "token RBRACK") + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_INC = RewriteRuleTokenStream(self._adaptor, "token INC") + stream_DEC = RewriteRuleTokenStream(self._adaptor, "token DEC") + stream_LBRACK = RewriteRuleTokenStream(self._adaptor, "token LBRACK") + stream_SUPER = RewriteRuleTokenStream(self._adaptor, "token SUPER") + stream_DOT = RewriteRuleTokenStream(self._adaptor, "token DOT") + stream_THIS = RewriteRuleTokenStream(self._adaptor, "token THIS") + stream_expression = RewriteRuleSubtreeStream(self._adaptor, "rule expression") + stream_arguments = RewriteRuleSubtreeStream(self._adaptor, "rule arguments") + stream_primaryExpression = RewriteRuleSubtreeStream(self._adaptor, "rule primaryExpression") + stream_genericTypeArgumentListSimplified = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeArgumentListSimplified") + stream_innerNewExpression = RewriteRuleSubtreeStream(self._adaptor, "rule innerNewExpression") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 104): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:862:5: ( ( primaryExpression -> primaryExpression ) (outerDot= DOT ( ( ( genericTypeArgumentListSimplified )? IDENT -> ^( DOT $postfixedExpression IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) )? | THIS -> ^( DOT $postfixedExpression THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] $postfixedExpression arguments ) | ( SUPER innerDot= DOT IDENT -> ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression arguments ) )? | innerNewExpression -> ^( DOT $postfixedExpression innerNewExpression ) ) | LBRACK expression RBRACK -> ^( ARRAY_ELEMENT_ACCESS $postfixedExpression expression ) )* ( INC -> ^( POST_INC[$INC, \"POST_INC\"] $postfixedExpression) | DEC -> ^( POST_DEC[$DEC, \"POST_DEC\"] $postfixedExpression) )? ) + # Java.g:862:9: ( primaryExpression -> primaryExpression ) (outerDot= DOT ( ( ( genericTypeArgumentListSimplified )? IDENT -> ^( DOT $postfixedExpression IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) )? | THIS -> ^( DOT $postfixedExpression THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] $postfixedExpression arguments ) | ( SUPER innerDot= DOT IDENT -> ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression arguments ) )? | innerNewExpression -> ^( DOT $postfixedExpression innerNewExpression ) ) | LBRACK expression RBRACK -> ^( ARRAY_ELEMENT_ACCESS $postfixedExpression expression ) )* ( INC -> ^( POST_INC[$INC, \"POST_INC\"] $postfixedExpression) | DEC -> ^( POST_DEC[$DEC, \"POST_DEC\"] $postfixedExpression) )? + pass + # Java.g:862:9: ( primaryExpression -> primaryExpression ) + # Java.g:862:13: primaryExpression + pass + self._state.following.append(self.FOLLOW_primaryExpression_in_postfixedExpression11565) + primaryExpression445 = self.primaryExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_primaryExpression.add(primaryExpression445.tree) + + # AST Rewrite + # elements: primaryExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 862:53: -> primaryExpression + self._adaptor.addChild(root_0, stream_primaryExpression.nextTree()) + + + + retval.tree = root_0 + + + + # Java.g:865:9: (outerDot= DOT ( ( ( genericTypeArgumentListSimplified )? IDENT -> ^( DOT $postfixedExpression IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) )? | THIS -> ^( DOT $postfixedExpression THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] $postfixedExpression arguments ) | ( SUPER innerDot= DOT IDENT -> ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression arguments ) )? | innerNewExpression -> ^( DOT $postfixedExpression innerNewExpression ) ) | LBRACK expression RBRACK -> ^( ARRAY_ELEMENT_ACCESS $postfixedExpression expression ) )* + while True: #loop135 + alt135 = 3 + LA135_0 = self.input.LA(1) + + if (LA135_0 == DOT) : + alt135 = 1 + elif (LA135_0 == LBRACK) : + alt135 = 2 + + + if alt135 == 1: + # Java.g:865:13: outerDot= DOT ( ( ( genericTypeArgumentListSimplified )? IDENT -> ^( DOT $postfixedExpression IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) )? | THIS -> ^( DOT $postfixedExpression THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] $postfixedExpression arguments ) | ( SUPER innerDot= DOT IDENT -> ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression arguments ) )? | innerNewExpression -> ^( DOT $postfixedExpression innerNewExpression ) ) + pass + outerDot=self.match(self.input, DOT, self.FOLLOW_DOT_in_postfixedExpression11627) + if self._state.backtracking == 0: + stream_DOT.add(outerDot) + # Java.g:866:13: ( ( ( genericTypeArgumentListSimplified )? IDENT -> ^( DOT $postfixedExpression IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) )? | THIS -> ^( DOT $postfixedExpression THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] $postfixedExpression arguments ) | ( SUPER innerDot= DOT IDENT -> ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression arguments ) )? | innerNewExpression -> ^( DOT $postfixedExpression innerNewExpression ) ) + alt134 = 5 + LA134 = self.input.LA(1) + if LA134 == LESS_THAN or LA134 == IDENT: + alt134 = 1 + elif LA134 == THIS: + alt134 = 2 + elif LA134 == SUPER: + LA134_3 = self.input.LA(2) + + if (LA134_3 == DOT) : + alt134 = 4 + elif (LA134_3 == LPAREN) : + alt134 = 3 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 134, 3, self.input) + + raise nvae + + elif LA134 == NEW: + alt134 = 5 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 134, 0, self.input) + + raise nvae + + if alt134 == 1: + # Java.g:866:17: ( ( genericTypeArgumentListSimplified )? IDENT -> ^( DOT $postfixedExpression IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) )? + pass + # Java.g:866:17: ( ( genericTypeArgumentListSimplified )? IDENT -> ^( DOT $postfixedExpression IDENT ) ) + # Java.g:866:21: ( genericTypeArgumentListSimplified )? IDENT + pass + # Java.g:866:21: ( genericTypeArgumentListSimplified )? + alt131 = 2 + LA131_0 = self.input.LA(1) + + if (LA131_0 == LESS_THAN) : + alt131 = 1 + if alt131 == 1: + # Java.g:0:0: genericTypeArgumentListSimplified + pass + self._state.following.append(self.FOLLOW_genericTypeArgumentListSimplified_in_postfixedExpression11649) + genericTypeArgumentListSimplified446 = self.genericTypeArgumentListSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeArgumentListSimplified.add(genericTypeArgumentListSimplified446.tree) + + + + IDENT447=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_postfixedExpression11731) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT447) + + # AST Rewrite + # elements: IDENT, postfixedExpression, DOT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 868:53: -> ^( DOT $postfixedExpression IDENT ) + # Java.g:868:57: ^( DOT $postfixedExpression IDENT ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + # Java.g:870:17: ( arguments -> ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) )? + alt132 = 2 + LA132_0 = self.input.LA(1) + + if (LA132_0 == LPAREN) : + alt132 = 1 + if alt132 == 1: + # Java.g:870:21: arguments + pass + self._state.following.append(self.FOLLOW_arguments_in_postfixedExpression11809) + arguments448 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments448.tree) + + # AST Rewrite + # elements: arguments, genericTypeArgumentListSimplified, postfixedExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 870:53: -> ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) + # Java.g:870:57: ^( METHOD_CALL $postfixedExpression ( genericTypeArgumentListSimplified )? arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(METHOD_CALL, "METHOD_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + # Java.g:870:92: ( genericTypeArgumentListSimplified )? + if stream_genericTypeArgumentListSimplified.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + + + stream_genericTypeArgumentListSimplified.reset(); + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt134 == 2: + # Java.g:872:17: THIS + pass + THIS449=self.match(self.input, THIS, self.FOLLOW_THIS_in_postfixedExpression11883) + if self._state.backtracking == 0: + stream_THIS.add(THIS449) + + # AST Rewrite + # elements: THIS, postfixedExpression, DOT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 872:53: -> ^( DOT $postfixedExpression THIS ) + # Java.g:872:57: ^( DOT $postfixedExpression THIS ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + self._adaptor.addChild(root_1, stream_THIS.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt134 == 3: + # Java.g:873:17: Super= SUPER arguments + pass + Super=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_postfixedExpression11946) + if self._state.backtracking == 0: + stream_SUPER.add(Super) + self._state.following.append(self.FOLLOW_arguments_in_postfixedExpression11948) + arguments450 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments450.tree) + + # AST Rewrite + # elements: postfixedExpression, arguments + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 873:57: -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] $postfixedExpression arguments ) + # Java.g:873:61: ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] $postfixedExpression arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(SUPER_CONSTRUCTOR_CALL, Super, "SUPER_CONSTRUCTOR_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt134 == 4: + # Java.g:874:17: ( SUPER innerDot= DOT IDENT -> ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) ) ( arguments -> ^( METHOD_CALL $postfixedExpression arguments ) )? + pass + # Java.g:874:17: ( SUPER innerDot= DOT IDENT -> ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) ) + # Java.g:874:21: SUPER innerDot= DOT IDENT + pass + SUPER451=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_postfixedExpression12001) + if self._state.backtracking == 0: + stream_SUPER.add(SUPER451) + innerDot=self.match(self.input, DOT, self.FOLLOW_DOT_in_postfixedExpression12005) + if self._state.backtracking == 0: + stream_DOT.add(innerDot) + IDENT452=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_postfixedExpression12007) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT452) + + # AST Rewrite + # elements: SUPER, IDENT, postfixedExpression, innerDot, outerDot + # token labels: outerDot, innerDot + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + stream_outerDot = RewriteRuleTokenStream(self._adaptor, "token outerDot", outerDot) + stream_innerDot = RewriteRuleTokenStream(self._adaptor, "token innerDot", innerDot) + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 874:53: -> ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) + # Java.g:874:57: ^( $innerDot ^( $outerDot $postfixedExpression SUPER ) IDENT ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_innerDot.nextNode(), root_1) + + # Java.g:874:69: ^( $outerDot $postfixedExpression SUPER ) + root_2 = self._adaptor.nil() + root_2 = self._adaptor.becomeRoot(stream_outerDot.nextNode(), root_2) + + self._adaptor.addChild(root_2, stream_retval.nextTree()) + self._adaptor.addChild(root_2, stream_SUPER.nextNode()) + + self._adaptor.addChild(root_1, root_2) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + # Java.g:876:17: ( arguments -> ^( METHOD_CALL $postfixedExpression arguments ) )? + alt133 = 2 + LA133_0 = self.input.LA(1) + + if (LA133_0 == LPAREN) : + alt133 = 1 + if alt133 == 1: + # Java.g:876:21: arguments + pass + self._state.following.append(self.FOLLOW_arguments_in_postfixedExpression12074) + arguments453 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments453.tree) + + # AST Rewrite + # elements: postfixedExpression, arguments + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 876:53: -> ^( METHOD_CALL $postfixedExpression arguments ) + # Java.g:876:57: ^( METHOD_CALL $postfixedExpression arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(METHOD_CALL, "METHOD_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt134 == 5: + # Java.g:878:17: innerNewExpression + pass + self._state.following.append(self.FOLLOW_innerNewExpression_in_postfixedExpression12145) + innerNewExpression454 = self.innerNewExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_innerNewExpression.add(innerNewExpression454.tree) + + # AST Rewrite + # elements: innerNewExpression, DOT, postfixedExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 878:53: -> ^( DOT $postfixedExpression innerNewExpression ) + # Java.g:878:57: ^( DOT $postfixedExpression innerNewExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + self._adaptor.addChild(root_1, stream_innerNewExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt135 == 2: + # Java.g:880:13: LBRACK expression RBRACK + pass + LBRACK455=self.match(self.input, LBRACK, self.FOLLOW_LBRACK_in_postfixedExpression12202) + if self._state.backtracking == 0: + stream_LBRACK.add(LBRACK455) + self._state.following.append(self.FOLLOW_expression_in_postfixedExpression12204) + expression456 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expression.add(expression456.tree) + RBRACK457=self.match(self.input, RBRACK, self.FOLLOW_RBRACK_in_postfixedExpression12206) + if self._state.backtracking == 0: + stream_RBRACK.add(RBRACK457) + + # AST Rewrite + # elements: expression, postfixedExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 880:53: -> ^( ARRAY_ELEMENT_ACCESS $postfixedExpression expression ) + # Java.g:880:57: ^( ARRAY_ELEMENT_ACCESS $postfixedExpression expression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(ARRAY_ELEMENT_ACCESS, "ARRAY_ELEMENT_ACCESS"), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + self._adaptor.addChild(root_1, stream_expression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + else: + break #loop135 + # Java.g:883:9: ( INC -> ^( POST_INC[$INC, \"POST_INC\"] $postfixedExpression) | DEC -> ^( POST_DEC[$DEC, \"POST_DEC\"] $postfixedExpression) )? + alt136 = 3 + LA136_0 = self.input.LA(1) + + if (LA136_0 == INC) : + alt136 = 1 + elif (LA136_0 == DEC) : + alt136 = 2 + if alt136 == 1: + # Java.g:883:13: INC + pass + INC458=self.match(self.input, INC, self.FOLLOW_INC_in_postfixedExpression12267) + if self._state.backtracking == 0: + stream_INC.add(INC458) + + # AST Rewrite + # elements: postfixedExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 883:17: -> ^( POST_INC[$INC, \"POST_INC\"] $postfixedExpression) + # Java.g:883:20: ^( POST_INC[$INC, \"POST_INC\"] $postfixedExpression) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(POST_INC, INC458, "POST_INC"), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt136 == 2: + # Java.g:884:13: DEC + pass + DEC459=self.match(self.input, DEC, self.FOLLOW_DEC_in_postfixedExpression12291) + if self._state.backtracking == 0: + stream_DEC.add(DEC459) + + # AST Rewrite + # elements: postfixedExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 884:17: -> ^( POST_DEC[$DEC, \"POST_DEC\"] $postfixedExpression) + # Java.g:884:20: ^( POST_DEC[$DEC, \"POST_DEC\"] $postfixedExpression) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(POST_DEC, DEC459, "POST_DEC"), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 104, postfixedExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "postfixedExpression" + + class primaryExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.primaryExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "primaryExpression" + # Java.g:888:1: primaryExpression : ( parenthesizedExpression | literal | newExpression | qualifiedIdentExpression | genericTypeArgumentListSimplified ( SUPER ( arguments -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) | DOT IDENT arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) genericTypeArgumentListSimplified arguments ) ) | IDENT arguments -> ^( METHOD_CALL IDENT genericTypeArgumentListSimplified arguments ) | THIS arguments -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) ) | ( THIS -> THIS ) ( arguments -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] arguments ) )? | SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] arguments ) | ( SUPER DOT IDENT ) ( arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) arguments ) | -> ^( DOT SUPER IDENT ) ) | ( primitiveType -> primitiveType ) ( arrayDeclarator -> ^( arrayDeclarator $primaryExpression) )* DOT CLASS -> ^( DOT $primaryExpression CLASS ) | VOID DOT CLASS -> ^( DOT VOID CLASS ) ); + def primaryExpression(self, ): + + retval = self.primaryExpression_return() + retval.start = self.input.LT(1) + primaryExpression_StartIndex = self.input.index() + root_0 = None + + SUPER465 = None + DOT467 = None + IDENT468 = None + IDENT470 = None + THIS472 = None + THIS474 = None + SUPER476 = None + SUPER478 = None + DOT479 = None + IDENT480 = None + DOT484 = None + CLASS485 = None + VOID486 = None + DOT487 = None + CLASS488 = None + parenthesizedExpression460 = None + + literal461 = None + + newExpression462 = None + + qualifiedIdentExpression463 = None + + genericTypeArgumentListSimplified464 = None + + arguments466 = None + + arguments469 = None + + arguments471 = None + + arguments473 = None + + arguments475 = None + + arguments477 = None + + arguments481 = None + + primitiveType482 = None + + arrayDeclarator483 = None + + + SUPER465_tree = None + DOT467_tree = None + IDENT468_tree = None + IDENT470_tree = None + THIS472_tree = None + THIS474_tree = None + SUPER476_tree = None + SUPER478_tree = None + DOT479_tree = None + IDENT480_tree = None + DOT484_tree = None + CLASS485_tree = None + VOID486_tree = None + DOT487_tree = None + CLASS488_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_CLASS = RewriteRuleTokenStream(self._adaptor, "token CLASS") + stream_VOID = RewriteRuleTokenStream(self._adaptor, "token VOID") + stream_SUPER = RewriteRuleTokenStream(self._adaptor, "token SUPER") + stream_DOT = RewriteRuleTokenStream(self._adaptor, "token DOT") + stream_THIS = RewriteRuleTokenStream(self._adaptor, "token THIS") + stream_arrayDeclarator = RewriteRuleSubtreeStream(self._adaptor, "rule arrayDeclarator") + stream_arguments = RewriteRuleSubtreeStream(self._adaptor, "rule arguments") + stream_primitiveType = RewriteRuleSubtreeStream(self._adaptor, "rule primitiveType") + stream_genericTypeArgumentListSimplified = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeArgumentListSimplified") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 105): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:889:5: ( parenthesizedExpression | literal | newExpression | qualifiedIdentExpression | genericTypeArgumentListSimplified ( SUPER ( arguments -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) | DOT IDENT arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) genericTypeArgumentListSimplified arguments ) ) | IDENT arguments -> ^( METHOD_CALL IDENT genericTypeArgumentListSimplified arguments ) | THIS arguments -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) ) | ( THIS -> THIS ) ( arguments -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] arguments ) )? | SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] arguments ) | ( SUPER DOT IDENT ) ( arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) arguments ) | -> ^( DOT SUPER IDENT ) ) | ( primitiveType -> primitiveType ) ( arrayDeclarator -> ^( arrayDeclarator $primaryExpression) )* DOT CLASS -> ^( DOT $primaryExpression CLASS ) | VOID DOT CLASS -> ^( DOT VOID CLASS ) ) + alt142 = 10 + alt142 = self.dfa142.predict(self.input) + if alt142 == 1: + # Java.g:889:9: parenthesizedExpression + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_parenthesizedExpression_in_primaryExpression12331) + parenthesizedExpression460 = self.parenthesizedExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, parenthesizedExpression460.tree) + + + elif alt142 == 2: + # Java.g:890:9: literal + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_literal_in_primaryExpression12341) + literal461 = self.literal() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, literal461.tree) + + + elif alt142 == 3: + # Java.g:891:9: newExpression + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_newExpression_in_primaryExpression12351) + newExpression462 = self.newExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, newExpression462.tree) + + + elif alt142 == 4: + # Java.g:892:9: qualifiedIdentExpression + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_qualifiedIdentExpression_in_primaryExpression12361) + qualifiedIdentExpression463 = self.qualifiedIdentExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, qualifiedIdentExpression463.tree) + + + elif alt142 == 5: + # Java.g:893:9: genericTypeArgumentListSimplified ( SUPER ( arguments -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) | DOT IDENT arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) genericTypeArgumentListSimplified arguments ) ) | IDENT arguments -> ^( METHOD_CALL IDENT genericTypeArgumentListSimplified arguments ) | THIS arguments -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) ) + pass + self._state.following.append(self.FOLLOW_genericTypeArgumentListSimplified_in_primaryExpression12371) + genericTypeArgumentListSimplified464 = self.genericTypeArgumentListSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeArgumentListSimplified.add(genericTypeArgumentListSimplified464.tree) + # Java.g:894:9: ( SUPER ( arguments -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) | DOT IDENT arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) genericTypeArgumentListSimplified arguments ) ) | IDENT arguments -> ^( METHOD_CALL IDENT genericTypeArgumentListSimplified arguments ) | THIS arguments -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) ) + alt138 = 3 + LA138 = self.input.LA(1) + if LA138 == SUPER: + alt138 = 1 + elif LA138 == IDENT: + alt138 = 2 + elif LA138 == THIS: + alt138 = 3 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 138, 0, self.input) + + raise nvae + + if alt138 == 1: + # Java.g:894:13: SUPER ( arguments -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) | DOT IDENT arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) genericTypeArgumentListSimplified arguments ) ) + pass + SUPER465=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_primaryExpression12385) + if self._state.backtracking == 0: + stream_SUPER.add(SUPER465) + # Java.g:895:13: ( arguments -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) | DOT IDENT arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) genericTypeArgumentListSimplified arguments ) ) + alt137 = 2 + LA137_0 = self.input.LA(1) + + if (LA137_0 == LPAREN) : + alt137 = 1 + elif (LA137_0 == DOT) : + alt137 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 137, 0, self.input) + + raise nvae + + if alt137 == 1: + # Java.g:895:17: arguments + pass + self._state.following.append(self.FOLLOW_arguments_in_primaryExpression12403) + arguments466 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments466.tree) + + # AST Rewrite + # elements: arguments, genericTypeArgumentListSimplified + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 895:57: -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) + # Java.g:895:61: ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(SUPER_CONSTRUCTOR_CALL, SUPER465, "SUPER_CONSTRUCTOR_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt137 == 2: + # Java.g:896:17: DOT IDENT arguments + pass + DOT467=self.match(self.input, DOT, self.FOLLOW_DOT_in_primaryExpression12463) + if self._state.backtracking == 0: + stream_DOT.add(DOT467) + IDENT468=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_primaryExpression12465) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT468) + self._state.following.append(self.FOLLOW_arguments_in_primaryExpression12467) + arguments469 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments469.tree) + + # AST Rewrite + # elements: genericTypeArgumentListSimplified, arguments, DOT, IDENT, SUPER + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 896:57: -> ^( METHOD_CALL ^( DOT SUPER IDENT ) genericTypeArgumentListSimplified arguments ) + # Java.g:896:61: ^( METHOD_CALL ^( DOT SUPER IDENT ) genericTypeArgumentListSimplified arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(METHOD_CALL, "METHOD_CALL"), root_1) + + # Java.g:896:75: ^( DOT SUPER IDENT ) + root_2 = self._adaptor.nil() + root_2 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_2) + + self._adaptor.addChild(root_2, stream_SUPER.nextNode()) + self._adaptor.addChild(root_2, stream_IDENT.nextNode()) + + self._adaptor.addChild(root_1, root_2) + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt138 == 2: + # Java.g:898:13: IDENT arguments + pass + IDENT470=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_primaryExpression12534) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT470) + self._state.following.append(self.FOLLOW_arguments_in_primaryExpression12536) + arguments471 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments471.tree) + + # AST Rewrite + # elements: arguments, IDENT, genericTypeArgumentListSimplified + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 898:57: -> ^( METHOD_CALL IDENT genericTypeArgumentListSimplified arguments ) + # Java.g:898:61: ^( METHOD_CALL IDENT genericTypeArgumentListSimplified arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(METHOD_CALL, "METHOD_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt138 == 3: + # Java.g:899:13: THIS arguments + pass + THIS472=self.match(self.input, THIS, self.FOLLOW_THIS_in_primaryExpression12591) + if self._state.backtracking == 0: + stream_THIS.add(THIS472) + self._state.following.append(self.FOLLOW_arguments_in_primaryExpression12593) + arguments473 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments473.tree) + + # AST Rewrite + # elements: genericTypeArgumentListSimplified, arguments + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 899:57: -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) + # Java.g:899:61: ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] genericTypeArgumentListSimplified arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(THIS_CONSTRUCTOR_CALL, THIS472, "THIS_CONSTRUCTOR_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt142 == 6: + # Java.g:901:9: ( THIS -> THIS ) ( arguments -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] arguments ) )? + pass + # Java.g:901:9: ( THIS -> THIS ) + # Java.g:901:13: THIS + pass + THIS474=self.match(self.input, THIS, self.FOLLOW_THIS_in_primaryExpression12658) + if self._state.backtracking == 0: + stream_THIS.add(THIS474) + + # AST Rewrite + # elements: THIS + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 901:57: -> THIS + self._adaptor.addChild(root_0, stream_THIS.nextNode()) + + + + retval.tree = root_0 + + + + # Java.g:903:9: ( arguments -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] arguments ) )? + alt139 = 2 + LA139_0 = self.input.LA(1) + + if (LA139_0 == LPAREN) : + alt139 = 1 + if alt139 == 1: + # Java.g:903:13: arguments + pass + self._state.following.append(self.FOLLOW_arguments_in_primaryExpression12726) + arguments475 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments475.tree) + + # AST Rewrite + # elements: arguments + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 903:57: -> ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] arguments ) + # Java.g:903:61: ^( THIS_CONSTRUCTOR_CALL[$THIS, \"THIS_CONSTRUCTOR_CALL\"] arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(THIS_CONSTRUCTOR_CALL, THIS474, "THIS_CONSTRUCTOR_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt142 == 7: + # Java.g:905:9: SUPER arguments + pass + SUPER476=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_primaryExpression12791) + if self._state.backtracking == 0: + stream_SUPER.add(SUPER476) + self._state.following.append(self.FOLLOW_arguments_in_primaryExpression12793) + arguments477 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments477.tree) + + # AST Rewrite + # elements: arguments + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 905:57: -> ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] arguments ) + # Java.g:905:61: ^( SUPER_CONSTRUCTOR_CALL[$SUPER, \"SUPER_CONSTRUCTOR_CALL\"] arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(SUPER_CONSTRUCTOR_CALL, SUPER476, "SUPER_CONSTRUCTOR_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt142 == 8: + # Java.g:906:9: ( SUPER DOT IDENT ) ( arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) arguments ) | -> ^( DOT SUPER IDENT ) ) + pass + # Java.g:906:9: ( SUPER DOT IDENT ) + # Java.g:906:13: SUPER DOT IDENT + pass + SUPER478=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_primaryExpression12849) + if self._state.backtracking == 0: + stream_SUPER.add(SUPER478) + DOT479=self.match(self.input, DOT, self.FOLLOW_DOT_in_primaryExpression12851) + if self._state.backtracking == 0: + stream_DOT.add(DOT479) + IDENT480=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_primaryExpression12853) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT480) + + + + # Java.g:908:9: ( arguments -> ^( METHOD_CALL ^( DOT SUPER IDENT ) arguments ) | -> ^( DOT SUPER IDENT ) ) + alt140 = 2 + LA140_0 = self.input.LA(1) + + if (LA140_0 == LPAREN) : + alt140 = 1 + elif (LA140_0 == EOF or (AND <= LA140_0 <= ASSIGN) or (BIT_SHIFT_RIGHT <= LA140_0 <= DOT) or (EQUAL <= LA140_0 <= LBRACK) or (LESS_OR_EQUAL <= LA140_0 <= LOGICAL_AND) or LA140_0 == LOGICAL_OR or (MINUS <= LA140_0 <= MOD_ASSIGN) or (NOT_EQUAL <= LA140_0 <= XOR_ASSIGN) or LA140_0 == INSTANCEOF) : + alt140 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 140, 0, self.input) + + raise nvae + + if alt140 == 1: + # Java.g:908:13: arguments + pass + self._state.following.append(self.FOLLOW_arguments_in_primaryExpression12877) + arguments481 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments481.tree) + + # AST Rewrite + # elements: arguments, SUPER, DOT, IDENT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 908:57: -> ^( METHOD_CALL ^( DOT SUPER IDENT ) arguments ) + # Java.g:908:61: ^( METHOD_CALL ^( DOT SUPER IDENT ) arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(METHOD_CALL, "METHOD_CALL"), root_1) + + # Java.g:908:75: ^( DOT SUPER IDENT ) + root_2 = self._adaptor.nil() + root_2 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_2) + + self._adaptor.addChild(root_2, stream_SUPER.nextNode()) + self._adaptor.addChild(root_2, stream_IDENT.nextNode()) + + self._adaptor.addChild(root_1, root_2) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt140 == 2: + # Java.g:909:57: + pass + # AST Rewrite + # elements: SUPER, IDENT, DOT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 909:57: -> ^( DOT SUPER IDENT ) + # Java.g:909:61: ^( DOT SUPER IDENT ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_SUPER.nextNode()) + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt142 == 9: + # Java.g:911:9: ( primitiveType -> primitiveType ) ( arrayDeclarator -> ^( arrayDeclarator $primaryExpression) )* DOT CLASS + pass + # Java.g:911:9: ( primitiveType -> primitiveType ) + # Java.g:911:13: primitiveType + pass + self._state.following.append(self.FOLLOW_primitiveType_in_primaryExpression13019) + primitiveType482 = self.primitiveType() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_primitiveType.add(primitiveType482.tree) + + # AST Rewrite + # elements: primitiveType + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 911:57: -> primitiveType + self._adaptor.addChild(root_0, stream_primitiveType.nextTree()) + + + + retval.tree = root_0 + + + + # Java.g:913:9: ( arrayDeclarator -> ^( arrayDeclarator $primaryExpression) )* + while True: #loop141 + alt141 = 2 + LA141_0 = self.input.LA(1) + + if (LA141_0 == LBRACK) : + alt141 = 1 + + + if alt141 == 1: + # Java.g:913:13: arrayDeclarator + pass + self._state.following.append(self.FOLLOW_arrayDeclarator_in_primaryExpression13078) + arrayDeclarator483 = self.arrayDeclarator() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arrayDeclarator.add(arrayDeclarator483.tree) + + # AST Rewrite + # elements: primaryExpression, arrayDeclarator + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 913:57: -> ^( arrayDeclarator $primaryExpression) + # Java.g:913:61: ^( arrayDeclarator $primaryExpression) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_arrayDeclarator.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + else: + break #loop141 + DOT484=self.match(self.input, DOT, self.FOLLOW_DOT_in_primaryExpression13137) + if self._state.backtracking == 0: + stream_DOT.add(DOT484) + CLASS485=self.match(self.input, CLASS, self.FOLLOW_CLASS_in_primaryExpression13139) + if self._state.backtracking == 0: + stream_CLASS.add(CLASS485) + + # AST Rewrite + # elements: primaryExpression, CLASS, DOT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 915:57: -> ^( DOT $primaryExpression CLASS ) + # Java.g:915:61: ^( DOT $primaryExpression CLASS ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + self._adaptor.addChild(root_1, stream_CLASS.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt142 == 10: + # Java.g:916:9: VOID DOT CLASS + pass + VOID486=self.match(self.input, VOID, self.FOLLOW_VOID_in_primaryExpression13199) + if self._state.backtracking == 0: + stream_VOID.add(VOID486) + DOT487=self.match(self.input, DOT, self.FOLLOW_DOT_in_primaryExpression13201) + if self._state.backtracking == 0: + stream_DOT.add(DOT487) + CLASS488=self.match(self.input, CLASS, self.FOLLOW_CLASS_in_primaryExpression13203) + if self._state.backtracking == 0: + stream_CLASS.add(CLASS488) + + # AST Rewrite + # elements: DOT, VOID, CLASS + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 916:57: -> ^( DOT VOID CLASS ) + # Java.g:916:61: ^( DOT VOID CLASS ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_VOID.nextNode()) + self._adaptor.addChild(root_1, stream_CLASS.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 105, primaryExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "primaryExpression" + + class qualifiedIdentExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.qualifiedIdentExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "qualifiedIdentExpression" + # Java.g:919:1: qualifiedIdentExpression : ( qualifiedIdentifier -> qualifiedIdentifier ) ( ( arrayDeclarator -> ^( arrayDeclarator $qualifiedIdentExpression) )+ ( DOT CLASS -> ^( DOT $qualifiedIdentExpression CLASS ) ) | arguments -> ^( METHOD_CALL qualifiedIdentifier arguments ) | outerDot= DOT ( CLASS -> ^( DOT qualifiedIdentifier CLASS ) | genericTypeArgumentListSimplified (Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) | SUPER innerDot= DOT IDENT arguments -> ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) | IDENT arguments -> ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) ) | THIS -> ^( DOT qualifiedIdentifier THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier arguments ) | innerNewExpression -> ^( DOT qualifiedIdentifier innerNewExpression ) ) )? ; + def qualifiedIdentExpression(self, ): + + retval = self.qualifiedIdentExpression_return() + retval.start = self.input.LT(1) + qualifiedIdentExpression_StartIndex = self.input.index() + root_0 = None + + outerDot = None + Super = None + innerDot = None + DOT491 = None + CLASS492 = None + CLASS494 = None + SUPER497 = None + IDENT498 = None + IDENT500 = None + THIS502 = None + qualifiedIdentifier489 = None + + arrayDeclarator490 = None + + arguments493 = None + + genericTypeArgumentListSimplified495 = None + + arguments496 = None + + arguments499 = None + + arguments501 = None + + arguments503 = None + + innerNewExpression504 = None + + + outerDot_tree = None + Super_tree = None + innerDot_tree = None + DOT491_tree = None + CLASS492_tree = None + CLASS494_tree = None + SUPER497_tree = None + IDENT498_tree = None + IDENT500_tree = None + THIS502_tree = None + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_CLASS = RewriteRuleTokenStream(self._adaptor, "token CLASS") + stream_SUPER = RewriteRuleTokenStream(self._adaptor, "token SUPER") + stream_DOT = RewriteRuleTokenStream(self._adaptor, "token DOT") + stream_THIS = RewriteRuleTokenStream(self._adaptor, "token THIS") + stream_arrayDeclarator = RewriteRuleSubtreeStream(self._adaptor, "rule arrayDeclarator") + stream_arguments = RewriteRuleSubtreeStream(self._adaptor, "rule arguments") + stream_qualifiedIdentifier = RewriteRuleSubtreeStream(self._adaptor, "rule qualifiedIdentifier") + stream_genericTypeArgumentListSimplified = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeArgumentListSimplified") + stream_innerNewExpression = RewriteRuleSubtreeStream(self._adaptor, "rule innerNewExpression") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 106): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:921:5: ( ( qualifiedIdentifier -> qualifiedIdentifier ) ( ( arrayDeclarator -> ^( arrayDeclarator $qualifiedIdentExpression) )+ ( DOT CLASS -> ^( DOT $qualifiedIdentExpression CLASS ) ) | arguments -> ^( METHOD_CALL qualifiedIdentifier arguments ) | outerDot= DOT ( CLASS -> ^( DOT qualifiedIdentifier CLASS ) | genericTypeArgumentListSimplified (Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) | SUPER innerDot= DOT IDENT arguments -> ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) | IDENT arguments -> ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) ) | THIS -> ^( DOT qualifiedIdentifier THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier arguments ) | innerNewExpression -> ^( DOT qualifiedIdentifier innerNewExpression ) ) )? ) + # Java.g:921:9: ( qualifiedIdentifier -> qualifiedIdentifier ) ( ( arrayDeclarator -> ^( arrayDeclarator $qualifiedIdentExpression) )+ ( DOT CLASS -> ^( DOT $qualifiedIdentExpression CLASS ) ) | arguments -> ^( METHOD_CALL qualifiedIdentifier arguments ) | outerDot= DOT ( CLASS -> ^( DOT qualifiedIdentifier CLASS ) | genericTypeArgumentListSimplified (Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) | SUPER innerDot= DOT IDENT arguments -> ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) | IDENT arguments -> ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) ) | THIS -> ^( DOT qualifiedIdentifier THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier arguments ) | innerNewExpression -> ^( DOT qualifiedIdentifier innerNewExpression ) ) )? + pass + # Java.g:921:9: ( qualifiedIdentifier -> qualifiedIdentifier ) + # Java.g:921:13: qualifiedIdentifier + pass + self._state.following.append(self.FOLLOW_qualifiedIdentifier_in_qualifiedIdentExpression13279) + qualifiedIdentifier489 = self.qualifiedIdentifier() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_qualifiedIdentifier.add(qualifiedIdentifier489.tree) + + # AST Rewrite + # elements: qualifiedIdentifier + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 921:61: -> qualifiedIdentifier + self._adaptor.addChild(root_0, stream_qualifiedIdentifier.nextTree()) + + + + retval.tree = root_0 + + + + # Java.g:924:9: ( ( arrayDeclarator -> ^( arrayDeclarator $qualifiedIdentExpression) )+ ( DOT CLASS -> ^( DOT $qualifiedIdentExpression CLASS ) ) | arguments -> ^( METHOD_CALL qualifiedIdentifier arguments ) | outerDot= DOT ( CLASS -> ^( DOT qualifiedIdentifier CLASS ) | genericTypeArgumentListSimplified (Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) | SUPER innerDot= DOT IDENT arguments -> ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) | IDENT arguments -> ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) ) | THIS -> ^( DOT qualifiedIdentifier THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier arguments ) | innerNewExpression -> ^( DOT qualifiedIdentifier innerNewExpression ) ) )? + alt146 = 4 + alt146 = self.dfa146.predict(self.input) + if alt146 == 1: + # Java.g:924:13: ( arrayDeclarator -> ^( arrayDeclarator $qualifiedIdentExpression) )+ ( DOT CLASS -> ^( DOT $qualifiedIdentExpression CLASS ) ) + pass + # Java.g:924:13: ( arrayDeclarator -> ^( arrayDeclarator $qualifiedIdentExpression) )+ + cnt143 = 0 + while True: #loop143 + alt143 = 2 + LA143_0 = self.input.LA(1) + + if (LA143_0 == LBRACK) : + alt143 = 1 + + + if alt143 == 1: + # Java.g:924:17: arrayDeclarator + pass + self._state.following.append(self.FOLLOW_arrayDeclarator_in_qualifiedIdentExpression13349) + arrayDeclarator490 = self.arrayDeclarator() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arrayDeclarator.add(arrayDeclarator490.tree) + + # AST Rewrite + # elements: qualifiedIdentExpression, arrayDeclarator + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 924:57: -> ^( arrayDeclarator $qualifiedIdentExpression) + # Java.g:924:61: ^( arrayDeclarator $qualifiedIdentExpression) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_arrayDeclarator.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + else: + if cnt143 >= 1: + break #loop143 + + if self._state.backtracking > 0: + raise BacktrackingFailed + + eee = EarlyExitException(143, self.input) + raise eee + + cnt143 += 1 + # Java.g:926:13: ( DOT CLASS -> ^( DOT $qualifiedIdentExpression CLASS ) ) + # Java.g:926:17: DOT CLASS + pass + DOT491=self.match(self.input, DOT, self.FOLLOW_DOT_in_qualifiedIdentExpression13416) + if self._state.backtracking == 0: + stream_DOT.add(DOT491) + CLASS492=self.match(self.input, CLASS, self.FOLLOW_CLASS_in_qualifiedIdentExpression13418) + if self._state.backtracking == 0: + stream_CLASS.add(CLASS492) + + # AST Rewrite + # elements: CLASS, DOT, qualifiedIdentExpression + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 926:57: -> ^( DOT $qualifiedIdentExpression CLASS ) + # Java.g:926:61: ^( DOT $qualifiedIdentExpression CLASS ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_retval.nextTree()) + self._adaptor.addChild(root_1, stream_CLASS.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt146 == 2: + # Java.g:928:13: arguments + pass + self._state.following.append(self.FOLLOW_arguments_in_qualifiedIdentExpression13488) + arguments493 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments493.tree) + + # AST Rewrite + # elements: arguments, qualifiedIdentifier + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 928:57: -> ^( METHOD_CALL qualifiedIdentifier arguments ) + # Java.g:928:61: ^( METHOD_CALL qualifiedIdentifier arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(METHOD_CALL, "METHOD_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_qualifiedIdentifier.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt146 == 3: + # Java.g:929:13: outerDot= DOT ( CLASS -> ^( DOT qualifiedIdentifier CLASS ) | genericTypeArgumentListSimplified (Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) | SUPER innerDot= DOT IDENT arguments -> ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) | IDENT arguments -> ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) ) | THIS -> ^( DOT qualifiedIdentifier THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier arguments ) | innerNewExpression -> ^( DOT qualifiedIdentifier innerNewExpression ) ) + pass + outerDot=self.match(self.input, DOT, self.FOLLOW_DOT_in_qualifiedIdentExpression13549) + if self._state.backtracking == 0: + stream_DOT.add(outerDot) + # Java.g:930:13: ( CLASS -> ^( DOT qualifiedIdentifier CLASS ) | genericTypeArgumentListSimplified (Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) | SUPER innerDot= DOT IDENT arguments -> ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) | IDENT arguments -> ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) ) | THIS -> ^( DOT qualifiedIdentifier THIS ) | Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier arguments ) | innerNewExpression -> ^( DOT qualifiedIdentifier innerNewExpression ) ) + alt145 = 5 + LA145 = self.input.LA(1) + if LA145 == CLASS: + alt145 = 1 + elif LA145 == LESS_THAN: + alt145 = 2 + elif LA145 == THIS: + alt145 = 3 + elif LA145 == SUPER: + alt145 = 4 + elif LA145 == NEW: + alt145 = 5 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 145, 0, self.input) + + raise nvae + + if alt145 == 1: + # Java.g:930:17: CLASS + pass + CLASS494=self.match(self.input, CLASS, self.FOLLOW_CLASS_in_qualifiedIdentExpression13567) + if self._state.backtracking == 0: + stream_CLASS.add(CLASS494) + + # AST Rewrite + # elements: DOT, CLASS, qualifiedIdentifier + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 930:57: -> ^( DOT qualifiedIdentifier CLASS ) + # Java.g:930:61: ^( DOT qualifiedIdentifier CLASS ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_qualifiedIdentifier.nextTree()) + self._adaptor.addChild(root_1, stream_CLASS.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt145 == 2: + # Java.g:931:17: genericTypeArgumentListSimplified (Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) | SUPER innerDot= DOT IDENT arguments -> ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) | IDENT arguments -> ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) ) + pass + self._state.following.append(self.FOLLOW_genericTypeArgumentListSimplified_in_qualifiedIdentExpression13630) + genericTypeArgumentListSimplified495 = self.genericTypeArgumentListSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeArgumentListSimplified.add(genericTypeArgumentListSimplified495.tree) + # Java.g:932:17: (Super= SUPER arguments -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) | SUPER innerDot= DOT IDENT arguments -> ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) | IDENT arguments -> ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) ) + alt144 = 3 + LA144_0 = self.input.LA(1) + + if (LA144_0 == SUPER) : + LA144_1 = self.input.LA(2) + + if (LA144_1 == DOT) : + alt144 = 2 + elif (LA144_1 == LPAREN) : + alt144 = 1 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 144, 1, self.input) + + raise nvae + + elif (LA144_0 == IDENT) : + alt144 = 3 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 144, 0, self.input) + + raise nvae + + if alt144 == 1: + # Java.g:932:21: Super= SUPER arguments + pass + Super=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_qualifiedIdentExpression13654) + if self._state.backtracking == 0: + stream_SUPER.add(Super) + self._state.following.append(self.FOLLOW_arguments_in_qualifiedIdentExpression13656) + arguments496 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments496.tree) + + # AST Rewrite + # elements: qualifiedIdentifier, arguments, genericTypeArgumentListSimplified + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 932:57: -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) + # Java.g:932:61: ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier genericTypeArgumentListSimplified arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(SUPER_CONSTRUCTOR_CALL, Super, "SUPER_CONSTRUCTOR_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_qualifiedIdentifier.nextTree()) + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt144 == 2: + # Java.g:933:21: SUPER innerDot= DOT IDENT arguments + pass + SUPER497=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_qualifiedIdentExpression13706) + if self._state.backtracking == 0: + stream_SUPER.add(SUPER497) + innerDot=self.match(self.input, DOT, self.FOLLOW_DOT_in_qualifiedIdentExpression13710) + if self._state.backtracking == 0: + stream_DOT.add(innerDot) + IDENT498=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_qualifiedIdentExpression13712) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT498) + self._state.following.append(self.FOLLOW_arguments_in_qualifiedIdentExpression13714) + arguments499 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments499.tree) + + # AST Rewrite + # elements: IDENT, qualifiedIdentifier, outerDot, SUPER, innerDot, genericTypeArgumentListSimplified, arguments + # token labels: outerDot, innerDot + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + stream_outerDot = RewriteRuleTokenStream(self._adaptor, "token outerDot", outerDot) + stream_innerDot = RewriteRuleTokenStream(self._adaptor, "token innerDot", innerDot) + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 933:57: -> ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) + # Java.g:933:61: ^( METHOD_CALL ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) genericTypeArgumentListSimplified arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(METHOD_CALL, "METHOD_CALL"), root_1) + + # Java.g:933:75: ^( $innerDot ^( $outerDot qualifiedIdentifier SUPER ) IDENT ) + root_2 = self._adaptor.nil() + root_2 = self._adaptor.becomeRoot(stream_innerDot.nextNode(), root_2) + + # Java.g:933:87: ^( $outerDot qualifiedIdentifier SUPER ) + root_3 = self._adaptor.nil() + root_3 = self._adaptor.becomeRoot(stream_outerDot.nextNode(), root_3) + + self._adaptor.addChild(root_3, stream_qualifiedIdentifier.nextTree()) + self._adaptor.addChild(root_3, stream_SUPER.nextNode()) + + self._adaptor.addChild(root_2, root_3) + self._adaptor.addChild(root_2, stream_IDENT.nextNode()) + + self._adaptor.addChild(root_1, root_2) + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt144 == 3: + # Java.g:934:21: IDENT arguments + pass + IDENT500=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_qualifiedIdentExpression13764) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT500) + self._state.following.append(self.FOLLOW_arguments_in_qualifiedIdentExpression13766) + arguments501 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments501.tree) + + # AST Rewrite + # elements: IDENT, arguments, genericTypeArgumentListSimplified, qualifiedIdentifier, DOT + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 934:57: -> ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) + # Java.g:934:61: ^( METHOD_CALL ^( DOT qualifiedIdentifier IDENT ) genericTypeArgumentListSimplified arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.createFromType(METHOD_CALL, "METHOD_CALL"), root_1) + + # Java.g:934:75: ^( DOT qualifiedIdentifier IDENT ) + root_2 = self._adaptor.nil() + root_2 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_2) + + self._adaptor.addChild(root_2, stream_qualifiedIdentifier.nextTree()) + self._adaptor.addChild(root_2, stream_IDENT.nextNode()) + + self._adaptor.addChild(root_1, root_2) + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + elif alt145 == 3: + # Java.g:936:17: THIS + pass + THIS502=self.match(self.input, THIS, self.FOLLOW_THIS_in_qualifiedIdentExpression13841) + if self._state.backtracking == 0: + stream_THIS.add(THIS502) + + # AST Rewrite + # elements: DOT, THIS, qualifiedIdentifier + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 936:57: -> ^( DOT qualifiedIdentifier THIS ) + # Java.g:936:61: ^( DOT qualifiedIdentifier THIS ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_qualifiedIdentifier.nextTree()) + self._adaptor.addChild(root_1, stream_THIS.nextNode()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt145 == 4: + # Java.g:937:17: Super= SUPER arguments + pass + Super=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_qualifiedIdentExpression13907) + if self._state.backtracking == 0: + stream_SUPER.add(Super) + self._state.following.append(self.FOLLOW_arguments_in_qualifiedIdentExpression13909) + arguments503 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments503.tree) + + # AST Rewrite + # elements: qualifiedIdentifier, arguments + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 937:57: -> ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier arguments ) + # Java.g:937:61: ^( SUPER_CONSTRUCTOR_CALL[$Super, \"SUPER_CONSTRUCTOR_CALL\"] qualifiedIdentifier arguments ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(SUPER_CONSTRUCTOR_CALL, Super, "SUPER_CONSTRUCTOR_CALL"), root_1) + + self._adaptor.addChild(root_1, stream_qualifiedIdentifier.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt145 == 5: + # Java.g:938:17: innerNewExpression + pass + self._state.following.append(self.FOLLOW_innerNewExpression_in_qualifiedIdentExpression13957) + innerNewExpression504 = self.innerNewExpression() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_innerNewExpression.add(innerNewExpression504.tree) + + # AST Rewrite + # elements: DOT, innerNewExpression, qualifiedIdentifier + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 938:57: -> ^( DOT qualifiedIdentifier innerNewExpression ) + # Java.g:938:61: ^( DOT qualifiedIdentifier innerNewExpression ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(stream_DOT.nextNode(), root_1) + + self._adaptor.addChild(root_1, stream_qualifiedIdentifier.nextTree()) + self._adaptor.addChild(root_1, stream_innerNewExpression.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 106, qualifiedIdentExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "qualifiedIdentExpression" + + class newExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.newExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "newExpression" + # Java.g:943:1: newExpression : NEW ( primitiveType newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] primitiveType newArrayConstruction ) | ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified ( newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified newArrayConstruction ) | arguments ( classBody )? -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified arguments ( classBody )? ) ) ) ; + def newExpression(self, ): + + retval = self.newExpression_return() + retval.start = self.input.LT(1) + newExpression_StartIndex = self.input.index() + root_0 = None + + NEW505 = None + primitiveType506 = None + + newArrayConstruction507 = None + + genericTypeArgumentListSimplified508 = None + + qualifiedTypeIdentSimplified509 = None + + newArrayConstruction510 = None + + arguments511 = None + + classBody512 = None + + + NEW505_tree = None + stream_NEW = RewriteRuleTokenStream(self._adaptor, "token NEW") + stream_newArrayConstruction = RewriteRuleSubtreeStream(self._adaptor, "rule newArrayConstruction") + stream_arguments = RewriteRuleSubtreeStream(self._adaptor, "rule arguments") + stream_qualifiedTypeIdentSimplified = RewriteRuleSubtreeStream(self._adaptor, "rule qualifiedTypeIdentSimplified") + stream_primitiveType = RewriteRuleSubtreeStream(self._adaptor, "rule primitiveType") + stream_classBody = RewriteRuleSubtreeStream(self._adaptor, "rule classBody") + stream_genericTypeArgumentListSimplified = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeArgumentListSimplified") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 107): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:944:5: ( NEW ( primitiveType newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] primitiveType newArrayConstruction ) | ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified ( newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified newArrayConstruction ) | arguments ( classBody )? -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified arguments ( classBody )? ) ) ) ) + # Java.g:944:9: NEW ( primitiveType newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] primitiveType newArrayConstruction ) | ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified ( newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified newArrayConstruction ) | arguments ( classBody )? -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified arguments ( classBody )? ) ) ) + pass + NEW505=self.match(self.input, NEW, self.FOLLOW_NEW_in_newExpression14033) + if self._state.backtracking == 0: + stream_NEW.add(NEW505) + # Java.g:945:9: ( primitiveType newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] primitiveType newArrayConstruction ) | ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified ( newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified newArrayConstruction ) | arguments ( classBody )? -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified arguments ( classBody )? ) ) ) + alt150 = 2 + LA150_0 = self.input.LA(1) + + if (LA150_0 == BOOLEAN or LA150_0 == BYTE or LA150_0 == CHAR or LA150_0 == DOUBLE or LA150_0 == FLOAT or (INT <= LA150_0 <= LONG) or LA150_0 == SHORT) : + alt150 = 1 + elif (LA150_0 == LESS_THAN or LA150_0 == IDENT) : + alt150 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 150, 0, self.input) + + raise nvae + + if alt150 == 1: + # Java.g:945:13: primitiveType newArrayConstruction + pass + self._state.following.append(self.FOLLOW_primitiveType_in_newExpression14047) + primitiveType506 = self.primitiveType() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_primitiveType.add(primitiveType506.tree) + self._state.following.append(self.FOLLOW_newArrayConstruction_in_newExpression14049) + newArrayConstruction507 = self.newArrayConstruction() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_newArrayConstruction.add(newArrayConstruction507.tree) + + # AST Rewrite + # elements: primitiveType, newArrayConstruction + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 946:13: -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] primitiveType newArrayConstruction ) + # Java.g:946:17: ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] primitiveType newArrayConstruction ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(STATIC_ARRAY_CREATOR, NEW505, "STATIC_ARRAY_CREATOR"), root_1) + + self._adaptor.addChild(root_1, stream_primitiveType.nextTree()) + self._adaptor.addChild(root_1, stream_newArrayConstruction.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt150 == 2: + # Java.g:947:13: ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified ( newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified newArrayConstruction ) | arguments ( classBody )? -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified arguments ( classBody )? ) ) + pass + # Java.g:947:13: ( genericTypeArgumentListSimplified )? + alt147 = 2 + LA147_0 = self.input.LA(1) + + if (LA147_0 == LESS_THAN) : + alt147 = 1 + if alt147 == 1: + # Java.g:0:0: genericTypeArgumentListSimplified + pass + self._state.following.append(self.FOLLOW_genericTypeArgumentListSimplified_in_newExpression14093) + genericTypeArgumentListSimplified508 = self.genericTypeArgumentListSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeArgumentListSimplified.add(genericTypeArgumentListSimplified508.tree) + + + + self._state.following.append(self.FOLLOW_qualifiedTypeIdentSimplified_in_newExpression14096) + qualifiedTypeIdentSimplified509 = self.qualifiedTypeIdentSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_qualifiedTypeIdentSimplified.add(qualifiedTypeIdentSimplified509.tree) + # Java.g:948:13: ( newArrayConstruction -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified newArrayConstruction ) | arguments ( classBody )? -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified arguments ( classBody )? ) ) + alt149 = 2 + LA149_0 = self.input.LA(1) + + if (LA149_0 == LBRACK) : + alt149 = 1 + elif (LA149_0 == LPAREN) : + alt149 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 149, 0, self.input) + + raise nvae + + if alt149 == 1: + # Java.g:948:17: newArrayConstruction + pass + self._state.following.append(self.FOLLOW_newArrayConstruction_in_newExpression14114) + newArrayConstruction510 = self.newArrayConstruction() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_newArrayConstruction.add(newArrayConstruction510.tree) + + # AST Rewrite + # elements: newArrayConstruction, qualifiedTypeIdentSimplified, genericTypeArgumentListSimplified + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 949:17: -> ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified newArrayConstruction ) + # Java.g:949:21: ^( STATIC_ARRAY_CREATOR[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified newArrayConstruction ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(STATIC_ARRAY_CREATOR, NEW505, "STATIC_ARRAY_CREATOR"), root_1) + + # Java.g:949:74: ( genericTypeArgumentListSimplified )? + if stream_genericTypeArgumentListSimplified.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + + + stream_genericTypeArgumentListSimplified.reset(); + self._adaptor.addChild(root_1, stream_qualifiedTypeIdentSimplified.nextTree()) + self._adaptor.addChild(root_1, stream_newArrayConstruction.nextTree()) + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + elif alt149 == 2: + # Java.g:950:17: arguments ( classBody )? + pass + self._state.following.append(self.FOLLOW_arguments_in_newExpression14179) + arguments511 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments511.tree) + # Java.g:950:27: ( classBody )? + alt148 = 2 + LA148_0 = self.input.LA(1) + + if (LA148_0 == LCURLY) : + alt148 = 1 + if alt148 == 1: + # Java.g:0:0: classBody + pass + self._state.following.append(self.FOLLOW_classBody_in_newExpression14181) + classBody512 = self.classBody() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classBody.add(classBody512.tree) + + + + + # AST Rewrite + # elements: classBody, arguments, genericTypeArgumentListSimplified, qualifiedTypeIdentSimplified + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 951:17: -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified arguments ( classBody )? ) + # Java.g:951:21: ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? qualifiedTypeIdentSimplified arguments ( classBody )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(CLASS_CONSTRUCTOR_CALL, NEW505, "STATIC_ARRAY_CREATOR"), root_1) + + # Java.g:951:76: ( genericTypeArgumentListSimplified )? + if stream_genericTypeArgumentListSimplified.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + + + stream_genericTypeArgumentListSimplified.reset(); + self._adaptor.addChild(root_1, stream_qualifiedTypeIdentSimplified.nextTree()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + # Java.g:951:150: ( classBody )? + if stream_classBody.hasNext(): + self._adaptor.addChild(root_1, stream_classBody.nextTree()) + + + stream_classBody.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 107, newExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "newExpression" + + class innerNewExpression_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.innerNewExpression_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "innerNewExpression" + # Java.g:956:1: innerNewExpression : NEW ( genericTypeArgumentListSimplified )? IDENT arguments ( classBody )? -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? IDENT arguments ( classBody )? ) ; + def innerNewExpression(self, ): + + retval = self.innerNewExpression_return() + retval.start = self.input.LT(1) + innerNewExpression_StartIndex = self.input.index() + root_0 = None + + NEW513 = None + IDENT515 = None + genericTypeArgumentListSimplified514 = None + + arguments516 = None + + classBody517 = None + + + NEW513_tree = None + IDENT515_tree = None + stream_NEW = RewriteRuleTokenStream(self._adaptor, "token NEW") + stream_IDENT = RewriteRuleTokenStream(self._adaptor, "token IDENT") + stream_arguments = RewriteRuleSubtreeStream(self._adaptor, "rule arguments") + stream_classBody = RewriteRuleSubtreeStream(self._adaptor, "rule classBody") + stream_genericTypeArgumentListSimplified = RewriteRuleSubtreeStream(self._adaptor, "rule genericTypeArgumentListSimplified") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 108): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:957:5: ( NEW ( genericTypeArgumentListSimplified )? IDENT arguments ( classBody )? -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? IDENT arguments ( classBody )? ) ) + # Java.g:957:9: NEW ( genericTypeArgumentListSimplified )? IDENT arguments ( classBody )? + pass + NEW513=self.match(self.input, NEW, self.FOLLOW_NEW_in_innerNewExpression14276) + if self._state.backtracking == 0: + stream_NEW.add(NEW513) + # Java.g:957:13: ( genericTypeArgumentListSimplified )? + alt151 = 2 + LA151_0 = self.input.LA(1) + + if (LA151_0 == LESS_THAN) : + alt151 = 1 + if alt151 == 1: + # Java.g:0:0: genericTypeArgumentListSimplified + pass + self._state.following.append(self.FOLLOW_genericTypeArgumentListSimplified_in_innerNewExpression14278) + genericTypeArgumentListSimplified514 = self.genericTypeArgumentListSimplified() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_genericTypeArgumentListSimplified.add(genericTypeArgumentListSimplified514.tree) + + + + IDENT515=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_innerNewExpression14281) + if self._state.backtracking == 0: + stream_IDENT.add(IDENT515) + self._state.following.append(self.FOLLOW_arguments_in_innerNewExpression14283) + arguments516 = self.arguments() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_arguments.add(arguments516.tree) + # Java.g:957:64: ( classBody )? + alt152 = 2 + LA152_0 = self.input.LA(1) + + if (LA152_0 == LCURLY) : + alt152 = 1 + if alt152 == 1: + # Java.g:0:0: classBody + pass + self._state.following.append(self.FOLLOW_classBody_in_innerNewExpression14285) + classBody517 = self.classBody() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_classBody.add(classBody517.tree) + + + + + # AST Rewrite + # elements: arguments, genericTypeArgumentListSimplified, IDENT, classBody + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 958:9: -> ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? IDENT arguments ( classBody )? ) + # Java.g:958:13: ^( CLASS_CONSTRUCTOR_CALL[$NEW, \"STATIC_ARRAY_CREATOR\"] ( genericTypeArgumentListSimplified )? IDENT arguments ( classBody )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(CLASS_CONSTRUCTOR_CALL, NEW513, "STATIC_ARRAY_CREATOR"), root_1) + + # Java.g:958:68: ( genericTypeArgumentListSimplified )? + if stream_genericTypeArgumentListSimplified.hasNext(): + self._adaptor.addChild(root_1, stream_genericTypeArgumentListSimplified.nextTree()) + + + stream_genericTypeArgumentListSimplified.reset(); + self._adaptor.addChild(root_1, stream_IDENT.nextNode()) + self._adaptor.addChild(root_1, stream_arguments.nextTree()) + # Java.g:958:119: ( classBody )? + if stream_classBody.hasNext(): + self._adaptor.addChild(root_1, stream_classBody.nextTree()) + + + stream_classBody.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 108, innerNewExpression_StartIndex, success) + + pass + return retval + + # $ANTLR end "innerNewExpression" + + class newArrayConstruction_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.newArrayConstruction_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "newArrayConstruction" + # Java.g:961:1: newArrayConstruction : ( arrayDeclaratorList arrayInitializer | LBRACK expression RBRACK ( LBRACK expression RBRACK )* ( arrayDeclaratorList )? ); + def newArrayConstruction(self, ): + + retval = self.newArrayConstruction_return() + retval.start = self.input.LT(1) + newArrayConstruction_StartIndex = self.input.index() + root_0 = None + + LBRACK520 = None + RBRACK522 = None + LBRACK523 = None + RBRACK525 = None + arrayDeclaratorList518 = None + + arrayInitializer519 = None + + expression521 = None + + expression524 = None + + arrayDeclaratorList526 = None + + + LBRACK520_tree = None + RBRACK522_tree = None + LBRACK523_tree = None + RBRACK525_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 109): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:962:5: ( arrayDeclaratorList arrayInitializer | LBRACK expression RBRACK ( LBRACK expression RBRACK )* ( arrayDeclaratorList )? ) + alt155 = 2 + LA155_0 = self.input.LA(1) + + if (LA155_0 == LBRACK) : + LA155_1 = self.input.LA(2) + + if (LA155_1 == RBRACK) : + alt155 = 1 + elif (LA155_1 == DEC or LA155_1 == INC or LA155_1 == LESS_THAN or LA155_1 == LOGICAL_NOT or (LPAREN <= LA155_1 <= MINUS) or LA155_1 == NOT or LA155_1 == PLUS or LA155_1 == BOOLEAN or LA155_1 == BYTE or LA155_1 == CHAR or LA155_1 == DOUBLE or LA155_1 == FALSE or LA155_1 == FLOAT or (INT <= LA155_1 <= LONG) or (NEW <= LA155_1 <= NULL) or LA155_1 == SHORT or LA155_1 == SUPER or LA155_1 == THIS or LA155_1 == TRUE or LA155_1 == VOID or (IDENT <= LA155_1 <= STRING_LITERAL)) : + alt155 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 155, 1, self.input) + + raise nvae + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 155, 0, self.input) + + raise nvae + + if alt155 == 1: + # Java.g:962:9: arrayDeclaratorList arrayInitializer + pass + root_0 = self._adaptor.nil() + + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_newArrayConstruction14331) + arrayDeclaratorList518 = self.arrayDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, arrayDeclaratorList518.tree) + self._state.following.append(self.FOLLOW_arrayInitializer_in_newArrayConstruction14333) + arrayInitializer519 = self.arrayInitializer() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, arrayInitializer519.tree) + + + elif alt155 == 2: + # Java.g:963:9: LBRACK expression RBRACK ( LBRACK expression RBRACK )* ( arrayDeclaratorList )? + pass + root_0 = self._adaptor.nil() + + LBRACK520=self.match(self.input, LBRACK, self.FOLLOW_LBRACK_in_newArrayConstruction14343) + self._state.following.append(self.FOLLOW_expression_in_newArrayConstruction14346) + expression521 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, expression521.tree) + RBRACK522=self.match(self.input, RBRACK, self.FOLLOW_RBRACK_in_newArrayConstruction14348) + # Java.g:963:36: ( LBRACK expression RBRACK )* + while True: #loop153 + alt153 = 2 + alt153 = self.dfa153.predict(self.input) + if alt153 == 1: + # Java.g:963:37: LBRACK expression RBRACK + pass + LBRACK523=self.match(self.input, LBRACK, self.FOLLOW_LBRACK_in_newArrayConstruction14352) + self._state.following.append(self.FOLLOW_expression_in_newArrayConstruction14355) + expression524 = self.expression() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, expression524.tree) + RBRACK525=self.match(self.input, RBRACK, self.FOLLOW_RBRACK_in_newArrayConstruction14357) + + + else: + break #loop153 + # Java.g:963:66: ( arrayDeclaratorList )? + alt154 = 2 + LA154_0 = self.input.LA(1) + + if (LA154_0 == LBRACK) : + LA154_1 = self.input.LA(2) + + if (LA154_1 == RBRACK) : + alt154 = 1 + if alt154 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_newArrayConstruction14362) + arrayDeclaratorList526 = self.arrayDeclaratorList() + + self._state.following.pop() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, arrayDeclaratorList526.tree) + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 109, newArrayConstruction_StartIndex, success) + + pass + return retval + + # $ANTLR end "newArrayConstruction" + + class arguments_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.arguments_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "arguments" + # Java.g:966:1: arguments : LPAREN ( expressionList )? RPAREN -> ^( ARGUMENT_LIST[$LPAREN, \"ARGUMENT_LIST\"] ( expressionList )? ) ; + def arguments(self, ): + + retval = self.arguments_return() + retval.start = self.input.LT(1) + arguments_StartIndex = self.input.index() + root_0 = None + + LPAREN527 = None + RPAREN529 = None + expressionList528 = None + + + LPAREN527_tree = None + RPAREN529_tree = None + stream_RPAREN = RewriteRuleTokenStream(self._adaptor, "token RPAREN") + stream_LPAREN = RewriteRuleTokenStream(self._adaptor, "token LPAREN") + stream_expressionList = RewriteRuleSubtreeStream(self._adaptor, "rule expressionList") + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 110): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:967:5: ( LPAREN ( expressionList )? RPAREN -> ^( ARGUMENT_LIST[$LPAREN, \"ARGUMENT_LIST\"] ( expressionList )? ) ) + # Java.g:967:9: LPAREN ( expressionList )? RPAREN + pass + LPAREN527=self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_arguments14382) + if self._state.backtracking == 0: + stream_LPAREN.add(LPAREN527) + # Java.g:967:16: ( expressionList )? + alt156 = 2 + LA156_0 = self.input.LA(1) + + if (LA156_0 == DEC or LA156_0 == INC or LA156_0 == LESS_THAN or LA156_0 == LOGICAL_NOT or (LPAREN <= LA156_0 <= MINUS) or LA156_0 == NOT or LA156_0 == PLUS or LA156_0 == BOOLEAN or LA156_0 == BYTE or LA156_0 == CHAR or LA156_0 == DOUBLE or LA156_0 == FALSE or LA156_0 == FLOAT or (INT <= LA156_0 <= LONG) or (NEW <= LA156_0 <= NULL) or LA156_0 == SHORT or LA156_0 == SUPER or LA156_0 == THIS or LA156_0 == TRUE or LA156_0 == VOID or (IDENT <= LA156_0 <= STRING_LITERAL)) : + alt156 = 1 + if alt156 == 1: + # Java.g:0:0: expressionList + pass + self._state.following.append(self.FOLLOW_expressionList_in_arguments14384) + expressionList528 = self.expressionList() + + self._state.following.pop() + if self._state.backtracking == 0: + stream_expressionList.add(expressionList528.tree) + + + + RPAREN529=self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_arguments14387) + if self._state.backtracking == 0: + stream_RPAREN.add(RPAREN529) + + # AST Rewrite + # elements: expressionList + # token labels: + # rule labels: retval + # token list labels: + # rule list labels: + # wildcard labels: + if self._state.backtracking == 0: + + retval.tree = root_0 + + if retval is not None: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "rule retval", retval.tree) + else: + stream_retval = RewriteRuleSubtreeStream(self._adaptor, "token retval", None) + + + root_0 = self._adaptor.nil() + # 968:9: -> ^( ARGUMENT_LIST[$LPAREN, \"ARGUMENT_LIST\"] ( expressionList )? ) + # Java.g:968:13: ^( ARGUMENT_LIST[$LPAREN, \"ARGUMENT_LIST\"] ( expressionList )? ) + root_1 = self._adaptor.nil() + root_1 = self._adaptor.becomeRoot(self._adaptor.create(ARGUMENT_LIST, LPAREN527, "ARGUMENT_LIST"), root_1) + + # Java.g:968:55: ( expressionList )? + if stream_expressionList.hasNext(): + self._adaptor.addChild(root_1, stream_expressionList.nextTree()) + + + stream_expressionList.reset(); + + self._adaptor.addChild(root_0, root_1) + + + + retval.tree = root_0 + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 110, arguments_StartIndex, success) + + pass + return retval + + # $ANTLR end "arguments" + + class literal_return(ParserRuleReturnScope): + def __init__(self): + super(JavaParser.literal_return, self).__init__() + + self.tree = None + + + + + # $ANTLR start "literal" + # Java.g:971:1: literal : ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | FLOATING_POINT_LITERAL | CHARACTER_LITERAL | STRING_LITERAL | TRUE | FALSE | NULL ); + def literal(self, ): + + retval = self.literal_return() + retval.start = self.input.LT(1) + literal_StartIndex = self.input.index() + root_0 = None + + set530 = None + + set530_tree = None + + success = False + try: + try: + if self._state.backtracking > 0 and self.alreadyParsedRule(self.input, 111): + # for cached failed rules, alreadyParsedRule will raise an exception + success = True + return retval + + # Java.g:972:5: ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | FLOATING_POINT_LITERAL | CHARACTER_LITERAL | STRING_LITERAL | TRUE | FALSE | NULL ) + # Java.g: + pass + root_0 = self._adaptor.nil() + + set530 = self.input.LT(1) + if self.input.LA(1) == FALSE or self.input.LA(1) == NULL or self.input.LA(1) == TRUE or (HEX_LITERAL <= self.input.LA(1) <= STRING_LITERAL): + self.input.consume() + if self._state.backtracking == 0: + self._adaptor.addChild(root_0, self._adaptor.createWithPayload(set530)) + self._state.errorRecovery = False + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + mse = MismatchedSetException(None, self.input) + raise mse + + + + + + retval.stop = self.input.LT(-1) + + if self._state.backtracking == 0: + + retval.tree = self._adaptor.rulePostProcessing(root_0) + self._adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop) + + + success = True + except RecognitionException as re: + self.reportError(re) + self.recover(self.input, re) + retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) + finally: + if self._state.backtracking > 0: + self.memoize(self.input, 111, literal_StartIndex, success) + + pass + return retval + + # $ANTLR end "literal" + + # $ANTLR start "synpred14_Java" + def synpred14_Java_fragment(self, ): + # Java.g:286:9: ( GREATER_THAN ) + # Java.g:286:9: GREATER_THAN + pass + self.match(self.input, GREATER_THAN, self.FOLLOW_GREATER_THAN_in_synpred14_Java5045) + + + # $ANTLR end "synpred14_Java" + + + + # $ANTLR start "synpred15_Java" + def synpred15_Java_fragment(self, ): + # Java.g:287:9: ( SHIFT_RIGHT ) + # Java.g:287:9: SHIFT_RIGHT + pass + self.match(self.input, SHIFT_RIGHT, self.FOLLOW_SHIFT_RIGHT_in_synpred15_Java5055) + + + # $ANTLR end "synpred15_Java" + + + + # $ANTLR start "synpred16_Java" + def synpred16_Java_fragment(self, ): + # Java.g:288:9: ( BIT_SHIFT_RIGHT ) + # Java.g:288:9: BIT_SHIFT_RIGHT + pass + self.match(self.input, BIT_SHIFT_RIGHT, self.FOLLOW_BIT_SHIFT_RIGHT_in_synpred16_Java5065) + + + # $ANTLR end "synpred16_Java" + + + + # $ANTLR start "synpred17_Java" + def synpred17_Java_fragment(self, ): + # Java.g:293:15: ( bound ) + # Java.g:293:15: bound + pass + self._state.following.append(self.FOLLOW_bound_in_synpred17_Java5095) + self.bound() + + self._state.following.pop() + + + # $ANTLR end "synpred17_Java" + + + + # $ANTLR start "synpred32_Java" + def synpred32_Java_fragment(self, ): + # Java.g:350:9: ( STATIC block ) + # Java.g:350:9: STATIC block + pass + self.match(self.input, STATIC, self.FOLLOW_STATIC_in_synpred32_Java5595) + self._state.following.append(self.FOLLOW_block_in_synpred32_Java5597) + self.block() + + self._state.following.pop() + + + # $ANTLR end "synpred32_Java" + + + + # $ANTLR start "synpred42_Java" + def synpred42_Java_fragment(self, ): + # Java.g:352:13: ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) | ident= IDENT formalParameterList ( throwsClause )? block ) ) + # Java.g:352:13: ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) | ident= IDENT formalParameterList ( throwsClause )? block ) + pass + # Java.g:352:13: ( genericTypeParameterList )? + alt162 = 2 + LA162_0 = self.input.LA(1) + + if (LA162_0 == LESS_THAN) : + alt162 = 1 + if alt162 == 1: + # Java.g:0:0: genericTypeParameterList + pass + self._state.following.append(self.FOLLOW_genericTypeParameterList_in_synpred42_Java5634) + self.genericTypeParameterList() + + self._state.following.pop() + + + + # Java.g:353:13: ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) | ident= IDENT formalParameterList ( throwsClause )? block ) + alt169 = 3 + LA169 = self.input.LA(1) + if LA169 == BOOLEAN or LA169 == BYTE or LA169 == CHAR or LA169 == DOUBLE or LA169 == FLOAT or LA169 == INT or LA169 == LONG or LA169 == SHORT: + alt169 = 1 + elif LA169 == IDENT: + LA169_2 = self.input.LA(2) + + if (LA169_2 == DOT or LA169_2 == LBRACK or LA169_2 == LESS_THAN or LA169_2 == IDENT) : + alt169 = 1 + elif (LA169_2 == LPAREN) : + alt169 = 3 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 169, 2, self.input) + + raise nvae + + elif LA169 == VOID: + alt169 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 169, 0, self.input) + + raise nvae + + if alt169 == 1: + # Java.g:353:17: type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) + pass + self._state.following.append(self.FOLLOW_type_in_synpred42_Java5653) + self.type() + + self._state.following.pop() + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred42_Java5655) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred42_Java5657) + self.formalParameterList() + + self._state.following.pop() + # Java.g:353:48: ( arrayDeclaratorList )? + alt163 = 2 + LA163_0 = self.input.LA(1) + + if (LA163_0 == LBRACK) : + alt163 = 1 + if alt163 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_synpred42_Java5659) + self.arrayDeclaratorList() + + self._state.following.pop() + + + + # Java.g:353:69: ( throwsClause )? + alt164 = 2 + LA164_0 = self.input.LA(1) + + if (LA164_0 == THROWS) : + alt164 = 1 + if alt164 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred42_Java5662) + self.throwsClause() + + self._state.following.pop() + + + + # Java.g:353:83: ( block | SEMI ) + alt165 = 2 + LA165_0 = self.input.LA(1) + + if (LA165_0 == LCURLY) : + alt165 = 1 + elif (LA165_0 == SEMI) : + alt165 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 165, 0, self.input) + + raise nvae + + if alt165 == 1: + # Java.g:353:84: block + pass + self._state.following.append(self.FOLLOW_block_in_synpred42_Java5666) + self.block() + + self._state.following.pop() + + + elif alt165 == 2: + # Java.g:353:92: SEMI + pass + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred42_Java5670) + + + + + + elif alt169 == 2: + # Java.g:355:17: VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) + pass + self.match(self.input, VOID, self.FOLLOW_VOID_in_synpred42_Java5732) + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred42_Java5734) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred42_Java5736) + self.formalParameterList() + + self._state.following.pop() + # Java.g:355:48: ( throwsClause )? + alt166 = 2 + LA166_0 = self.input.LA(1) + + if (LA166_0 == THROWS) : + alt166 = 1 + if alt166 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred42_Java5738) + self.throwsClause() + + self._state.following.pop() + + + + # Java.g:355:62: ( block | SEMI ) + alt167 = 2 + LA167_0 = self.input.LA(1) + + if (LA167_0 == LCURLY) : + alt167 = 1 + elif (LA167_0 == SEMI) : + alt167 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 167, 0, self.input) + + raise nvae + + if alt167 == 1: + # Java.g:355:63: block + pass + self._state.following.append(self.FOLLOW_block_in_synpred42_Java5742) + self.block() + + self._state.following.pop() + + + elif alt167 == 2: + # Java.g:355:71: SEMI + pass + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred42_Java5746) + + + + + + elif alt169 == 3: + # Java.g:357:17: ident= IDENT formalParameterList ( throwsClause )? block + pass + ident=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred42_Java5805) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred42_Java5807) + self.formalParameterList() + + self._state.following.pop() + # Java.g:357:49: ( throwsClause )? + alt168 = 2 + LA168_0 = self.input.LA(1) + + if (LA168_0 == THROWS) : + alt168 = 1 + if alt168 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred42_Java5809) + self.throwsClause() + + self._state.following.pop() + + + + self._state.following.append(self.FOLLOW_block_in_synpred42_Java5812) + self.block() + + self._state.following.pop() + + + + + + # $ANTLR end "synpred42_Java" + + + + # $ANTLR start "synpred43_Java" + def synpred43_Java_fragment(self, ): + # Java.g:351:9: ( modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) | ident= IDENT formalParameterList ( throwsClause )? block ) | type classFieldDeclaratorList SEMI ) ) + # Java.g:351:9: modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) | ident= IDENT formalParameterList ( throwsClause )? block ) | type classFieldDeclaratorList SEMI ) + pass + self._state.following.append(self.FOLLOW_modifierList_in_synpred43_Java5620) + self.modifierList() + + self._state.following.pop() + # Java.g:352:9: ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) | ident= IDENT formalParameterList ( throwsClause )? block ) | type classFieldDeclaratorList SEMI ) + alt178 = 2 + LA178 = self.input.LA(1) + if LA178 == LESS_THAN or LA178 == VOID: + alt178 = 1 + elif LA178 == BOOLEAN or LA178 == BYTE or LA178 == CHAR or LA178 == DOUBLE or LA178 == FLOAT or LA178 == INT or LA178 == LONG or LA178 == SHORT: + LA178_2 = self.input.LA(2) + + if (self.synpred42_Java()) : + alt178 = 1 + elif (True) : + alt178 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 178, 2, self.input) + + raise nvae + + elif LA178 == IDENT: + LA178_3 = self.input.LA(2) + + if (self.synpred42_Java()) : + alt178 = 1 + elif (True) : + alt178 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 178, 3, self.input) + + raise nvae + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 178, 0, self.input) + + raise nvae + + if alt178 == 1: + # Java.g:352:13: ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) | ident= IDENT formalParameterList ( throwsClause )? block ) + pass + # Java.g:352:13: ( genericTypeParameterList )? + alt170 = 2 + LA170_0 = self.input.LA(1) + + if (LA170_0 == LESS_THAN) : + alt170 = 1 + if alt170 == 1: + # Java.g:0:0: genericTypeParameterList + pass + self._state.following.append(self.FOLLOW_genericTypeParameterList_in_synpred43_Java5634) + self.genericTypeParameterList() + + self._state.following.pop() + + + + # Java.g:353:13: ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) | VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) | ident= IDENT formalParameterList ( throwsClause )? block ) + alt177 = 3 + LA177 = self.input.LA(1) + if LA177 == BOOLEAN or LA177 == BYTE or LA177 == CHAR or LA177 == DOUBLE or LA177 == FLOAT or LA177 == INT or LA177 == LONG or LA177 == SHORT: + alt177 = 1 + elif LA177 == IDENT: + LA177_2 = self.input.LA(2) + + if (LA177_2 == LPAREN) : + alt177 = 3 + elif (LA177_2 == DOT or LA177_2 == LBRACK or LA177_2 == LESS_THAN or LA177_2 == IDENT) : + alt177 = 1 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 177, 2, self.input) + + raise nvae + + elif LA177 == VOID: + alt177 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 177, 0, self.input) + + raise nvae + + if alt177 == 1: + # Java.g:353:17: type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? ( block | SEMI ) + pass + self._state.following.append(self.FOLLOW_type_in_synpred43_Java5653) + self.type() + + self._state.following.pop() + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred43_Java5655) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred43_Java5657) + self.formalParameterList() + + self._state.following.pop() + # Java.g:353:48: ( arrayDeclaratorList )? + alt171 = 2 + LA171_0 = self.input.LA(1) + + if (LA171_0 == LBRACK) : + alt171 = 1 + if alt171 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_synpred43_Java5659) + self.arrayDeclaratorList() + + self._state.following.pop() + + + + # Java.g:353:69: ( throwsClause )? + alt172 = 2 + LA172_0 = self.input.LA(1) + + if (LA172_0 == THROWS) : + alt172 = 1 + if alt172 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred43_Java5662) + self.throwsClause() + + self._state.following.pop() + + + + # Java.g:353:83: ( block | SEMI ) + alt173 = 2 + LA173_0 = self.input.LA(1) + + if (LA173_0 == LCURLY) : + alt173 = 1 + elif (LA173_0 == SEMI) : + alt173 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 173, 0, self.input) + + raise nvae + + if alt173 == 1: + # Java.g:353:84: block + pass + self._state.following.append(self.FOLLOW_block_in_synpred43_Java5666) + self.block() + + self._state.following.pop() + + + elif alt173 == 2: + # Java.g:353:92: SEMI + pass + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred43_Java5670) + + + + + + elif alt177 == 2: + # Java.g:355:17: VOID IDENT formalParameterList ( throwsClause )? ( block | SEMI ) + pass + self.match(self.input, VOID, self.FOLLOW_VOID_in_synpred43_Java5732) + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred43_Java5734) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred43_Java5736) + self.formalParameterList() + + self._state.following.pop() + # Java.g:355:48: ( throwsClause )? + alt174 = 2 + LA174_0 = self.input.LA(1) + + if (LA174_0 == THROWS) : + alt174 = 1 + if alt174 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred43_Java5738) + self.throwsClause() + + self._state.following.pop() + + + + # Java.g:355:62: ( block | SEMI ) + alt175 = 2 + LA175_0 = self.input.LA(1) + + if (LA175_0 == LCURLY) : + alt175 = 1 + elif (LA175_0 == SEMI) : + alt175 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 175, 0, self.input) + + raise nvae + + if alt175 == 1: + # Java.g:355:63: block + pass + self._state.following.append(self.FOLLOW_block_in_synpred43_Java5742) + self.block() + + self._state.following.pop() + + + elif alt175 == 2: + # Java.g:355:71: SEMI + pass + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred43_Java5746) + + + + + + elif alt177 == 3: + # Java.g:357:17: ident= IDENT formalParameterList ( throwsClause )? block + pass + ident=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred43_Java5805) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred43_Java5807) + self.formalParameterList() + + self._state.following.pop() + # Java.g:357:49: ( throwsClause )? + alt176 = 2 + LA176_0 = self.input.LA(1) + + if (LA176_0 == THROWS) : + alt176 = 1 + if alt176 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred43_Java5809) + self.throwsClause() + + self._state.following.pop() + + + + self._state.following.append(self.FOLLOW_block_in_synpred43_Java5812) + self.block() + + self._state.following.pop() + + + + + + elif alt178 == 2: + # Java.g:360:13: type classFieldDeclaratorList SEMI + pass + self._state.following.append(self.FOLLOW_type_in_synpred43_Java5876) + self.type() + + self._state.following.pop() + self._state.following.append(self.FOLLOW_classFieldDeclaratorList_in_synpred43_Java5878) + self.classFieldDeclaratorList() + + self._state.following.pop() + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred43_Java5880) + + + + + + # $ANTLR end "synpred43_Java" + + + + # $ANTLR start "synpred44_Java" + def synpred44_Java_fragment(self, ): + # Java.g:363:9: ( typeDeclaration ) + # Java.g:363:9: typeDeclaration + pass + self._state.following.append(self.FOLLOW_typeDeclaration_in_synpred44_Java5925) + self.typeDeclaration() + + self._state.following.pop() + + + # $ANTLR end "synpred44_Java" + + + + # $ANTLR start "synpred50_Java" + def synpred50_Java_fragment(self, ): + # Java.g:369:13: ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI | VOID IDENT formalParameterList ( throwsClause )? SEMI ) ) + # Java.g:369:13: ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI | VOID IDENT formalParameterList ( throwsClause )? SEMI ) + pass + # Java.g:369:13: ( genericTypeParameterList )? + alt181 = 2 + LA181_0 = self.input.LA(1) + + if (LA181_0 == LESS_THAN) : + alt181 = 1 + if alt181 == 1: + # Java.g:0:0: genericTypeParameterList + pass + self._state.following.append(self.FOLLOW_genericTypeParameterList_in_synpred50_Java5969) + self.genericTypeParameterList() + + self._state.following.pop() + + + + # Java.g:370:13: ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI | VOID IDENT formalParameterList ( throwsClause )? SEMI ) + alt185 = 2 + LA185_0 = self.input.LA(1) + + if (LA185_0 == BOOLEAN or LA185_0 == BYTE or LA185_0 == CHAR or LA185_0 == DOUBLE or LA185_0 == FLOAT or (INT <= LA185_0 <= LONG) or LA185_0 == SHORT or LA185_0 == IDENT) : + alt185 = 1 + elif (LA185_0 == VOID) : + alt185 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 185, 0, self.input) + + raise nvae + + if alt185 == 1: + # Java.g:370:17: type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI + pass + self._state.following.append(self.FOLLOW_type_in_synpred50_Java5988) + self.type() + + self._state.following.pop() + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred50_Java5990) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred50_Java5992) + self.formalParameterList() + + self._state.following.pop() + # Java.g:370:48: ( arrayDeclaratorList )? + alt182 = 2 + LA182_0 = self.input.LA(1) + + if (LA182_0 == LBRACK) : + alt182 = 1 + if alt182 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_synpred50_Java5994) + self.arrayDeclaratorList() + + self._state.following.pop() + + + + # Java.g:370:69: ( throwsClause )? + alt183 = 2 + LA183_0 = self.input.LA(1) + + if (LA183_0 == THROWS) : + alt183 = 1 + if alt183 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred50_Java5997) + self.throwsClause() + + self._state.following.pop() + + + + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred50_Java6000) + + + elif alt185 == 2: + # Java.g:372:17: VOID IDENT formalParameterList ( throwsClause )? SEMI + pass + self.match(self.input, VOID, self.FOLLOW_VOID_in_synpred50_Java6058) + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred50_Java6060) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred50_Java6062) + self.formalParameterList() + + self._state.following.pop() + # Java.g:372:48: ( throwsClause )? + alt184 = 2 + LA184_0 = self.input.LA(1) + + if (LA184_0 == THROWS) : + alt184 = 1 + if alt184 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred50_Java6064) + self.throwsClause() + + self._state.following.pop() + + + + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred50_Java6067) + + + + + + # $ANTLR end "synpred50_Java" + + + + # $ANTLR start "synpred51_Java" + def synpred51_Java_fragment(self, ): + # Java.g:368:9: ( modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI | VOID IDENT formalParameterList ( throwsClause )? SEMI ) | type interfaceFieldDeclaratorList SEMI ) ) + # Java.g:368:9: modifierList ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI | VOID IDENT formalParameterList ( throwsClause )? SEMI ) | type interfaceFieldDeclaratorList SEMI ) + pass + self._state.following.append(self.FOLLOW_modifierList_in_synpred51_Java5955) + self.modifierList() + + self._state.following.pop() + # Java.g:369:9: ( ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI | VOID IDENT formalParameterList ( throwsClause )? SEMI ) | type interfaceFieldDeclaratorList SEMI ) + alt191 = 2 + LA191 = self.input.LA(1) + if LA191 == LESS_THAN or LA191 == VOID: + alt191 = 1 + elif LA191 == BOOLEAN or LA191 == BYTE or LA191 == CHAR or LA191 == DOUBLE or LA191 == FLOAT or LA191 == INT or LA191 == LONG or LA191 == SHORT: + LA191_2 = self.input.LA(2) + + if (self.synpred50_Java()) : + alt191 = 1 + elif (True) : + alt191 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 191, 2, self.input) + + raise nvae + + elif LA191 == IDENT: + LA191_3 = self.input.LA(2) + + if (self.synpred50_Java()) : + alt191 = 1 + elif (True) : + alt191 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 191, 3, self.input) + + raise nvae + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 191, 0, self.input) + + raise nvae + + if alt191 == 1: + # Java.g:369:13: ( genericTypeParameterList )? ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI | VOID IDENT formalParameterList ( throwsClause )? SEMI ) + pass + # Java.g:369:13: ( genericTypeParameterList )? + alt186 = 2 + LA186_0 = self.input.LA(1) + + if (LA186_0 == LESS_THAN) : + alt186 = 1 + if alt186 == 1: + # Java.g:0:0: genericTypeParameterList + pass + self._state.following.append(self.FOLLOW_genericTypeParameterList_in_synpred51_Java5969) + self.genericTypeParameterList() + + self._state.following.pop() + + + + # Java.g:370:13: ( type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI | VOID IDENT formalParameterList ( throwsClause )? SEMI ) + alt190 = 2 + LA190_0 = self.input.LA(1) + + if (LA190_0 == BOOLEAN or LA190_0 == BYTE or LA190_0 == CHAR or LA190_0 == DOUBLE or LA190_0 == FLOAT or (INT <= LA190_0 <= LONG) or LA190_0 == SHORT or LA190_0 == IDENT) : + alt190 = 1 + elif (LA190_0 == VOID) : + alt190 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 190, 0, self.input) + + raise nvae + + if alt190 == 1: + # Java.g:370:17: type IDENT formalParameterList ( arrayDeclaratorList )? ( throwsClause )? SEMI + pass + self._state.following.append(self.FOLLOW_type_in_synpred51_Java5988) + self.type() + + self._state.following.pop() + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred51_Java5990) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred51_Java5992) + self.formalParameterList() + + self._state.following.pop() + # Java.g:370:48: ( arrayDeclaratorList )? + alt187 = 2 + LA187_0 = self.input.LA(1) + + if (LA187_0 == LBRACK) : + alt187 = 1 + if alt187 == 1: + # Java.g:0:0: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_synpred51_Java5994) + self.arrayDeclaratorList() + + self._state.following.pop() + + + + # Java.g:370:69: ( throwsClause )? + alt188 = 2 + LA188_0 = self.input.LA(1) + + if (LA188_0 == THROWS) : + alt188 = 1 + if alt188 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred51_Java5997) + self.throwsClause() + + self._state.following.pop() + + + + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred51_Java6000) + + + elif alt190 == 2: + # Java.g:372:17: VOID IDENT formalParameterList ( throwsClause )? SEMI + pass + self.match(self.input, VOID, self.FOLLOW_VOID_in_synpred51_Java6058) + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred51_Java6060) + self._state.following.append(self.FOLLOW_formalParameterList_in_synpred51_Java6062) + self.formalParameterList() + + self._state.following.pop() + # Java.g:372:48: ( throwsClause )? + alt189 = 2 + LA189_0 = self.input.LA(1) + + if (LA189_0 == THROWS) : + alt189 = 1 + if alt189 == 1: + # Java.g:0:0: throwsClause + pass + self._state.following.append(self.FOLLOW_throwsClause_in_synpred51_Java6064) + self.throwsClause() + + self._state.following.pop() + + + + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred51_Java6067) + + + + + + elif alt191 == 2: + # Java.g:375:13: type interfaceFieldDeclaratorList SEMI + pass + self._state.following.append(self.FOLLOW_type_in_synpred51_Java6130) + self.type() + + self._state.following.pop() + self._state.following.append(self.FOLLOW_interfaceFieldDeclaratorList_in_synpred51_Java6132) + self.interfaceFieldDeclaratorList() + + self._state.following.pop() + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred51_Java6134) + + + + + + # $ANTLR end "synpred51_Java" + + + + # $ANTLR start "synpred52_Java" + def synpred52_Java_fragment(self, ): + # Java.g:378:9: ( typeDeclaration ) + # Java.g:378:9: typeDeclaration + pass + self._state.following.append(self.FOLLOW_typeDeclaration_in_synpred52_Java6179) + self.typeDeclaration() + + self._state.following.pop() + + + # $ANTLR end "synpred52_Java" + + + + # $ANTLR start "synpred58_Java" + def synpred58_Java_fragment(self, ): + # Java.g:417:9: ( arrayDeclarator ) + # Java.g:417:9: arrayDeclarator + pass + self._state.following.append(self.FOLLOW_arrayDeclarator_in_synpred58_Java6473) + self.arrayDeclarator() + + self._state.following.pop() + + + # $ANTLR end "synpred58_Java" + + + + # $ANTLR start "synpred76_Java" + def synpred76_Java_fragment(self, ): + # Java.g:466:23: ( arrayDeclaratorList ) + # Java.g:466:23: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_synpred76_Java6860) + self.arrayDeclaratorList() + + self._state.following.pop() + + + # $ANTLR end "synpred76_Java" + + + + # $ANTLR start "synpred77_Java" + def synpred77_Java_fragment(self, ): + # Java.g:471:28: ( arrayDeclaratorList ) + # Java.g:471:28: arrayDeclaratorList + pass + self._state.following.append(self.FOLLOW_arrayDeclaratorList_in_synpred77_Java6903) + self.arrayDeclaratorList() + + self._state.following.pop() + + + # $ANTLR end "synpred77_Java" + + + + # $ANTLR start "synpred79_Java" + def synpred79_Java_fragment(self, ): + # Java.g:481:20: ( DOT typeIdent ) + # Java.g:481:20: DOT typeIdent + pass + self.match(self.input, DOT, self.FOLLOW_DOT_in_synpred79_Java6988) + self._state.following.append(self.FOLLOW_typeIdent_in_synpred79_Java6990) + self.typeIdent() + + self._state.following.pop() + + + # $ANTLR end "synpred79_Java" + + + + # $ANTLR start "synpred90_Java" + def synpred90_Java_fragment(self, ): + # Java.g:510:40: ( COMMA genericTypeArgument ) + # Java.g:510:40: COMMA genericTypeArgument + pass + self.match(self.input, COMMA, self.FOLLOW_COMMA_in_synpred90_Java7213) + self._state.following.append(self.FOLLOW_genericTypeArgument_in_synpred90_Java7215) + self.genericTypeArgument() + + self._state.following.pop() + + + # $ANTLR end "synpred90_Java" + + + + # $ANTLR start "synpred92_Java" + def synpred92_Java_fragment(self, ): + # Java.g:516:18: ( genericWildcardBoundType ) + # Java.g:516:18: genericWildcardBoundType + pass + self._state.following.append(self.FOLLOW_genericWildcardBoundType_in_synpred92_Java7269) + self.genericWildcardBoundType() + + self._state.following.pop() + + + # $ANTLR end "synpred92_Java" + + + + # $ANTLR start "synpred97_Java" + def synpred97_Java_fragment(self, ): + # Java.g:541:42: ( COMMA formalParameterStandardDecl ) + # Java.g:541:42: COMMA formalParameterStandardDecl + pass + self.match(self.input, COMMA, self.FOLLOW_COMMA_in_synpred97_Java7470) + self._state.following.append(self.FOLLOW_formalParameterStandardDecl_in_synpred97_Java7472) + self.formalParameterStandardDecl() + + self._state.following.pop() + + + # $ANTLR end "synpred97_Java" + + + + # $ANTLR start "synpred99_Java" + def synpred99_Java_fragment(self, ): + # Java.g:541:13: ( formalParameterStandardDecl ( COMMA formalParameterStandardDecl )* ( COMMA formalParameterVarArgDecl )? ) + # Java.g:541:13: formalParameterStandardDecl ( COMMA formalParameterStandardDecl )* ( COMMA formalParameterVarArgDecl )? + pass + self._state.following.append(self.FOLLOW_formalParameterStandardDecl_in_synpred99_Java7467) + self.formalParameterStandardDecl() + + self._state.following.pop() + # Java.g:541:41: ( COMMA formalParameterStandardDecl )* + while True: #loop194 + alt194 = 2 + LA194_0 = self.input.LA(1) + + if (LA194_0 == COMMA) : + LA194_1 = self.input.LA(2) + + if (self.synpred97_Java()) : + alt194 = 1 + + + + + if alt194 == 1: + # Java.g:541:42: COMMA formalParameterStandardDecl + pass + self.match(self.input, COMMA, self.FOLLOW_COMMA_in_synpred99_Java7470) + self._state.following.append(self.FOLLOW_formalParameterStandardDecl_in_synpred99_Java7472) + self.formalParameterStandardDecl() + + self._state.following.pop() + + + else: + break #loop194 + # Java.g:541:78: ( COMMA formalParameterVarArgDecl )? + alt195 = 2 + LA195_0 = self.input.LA(1) + + if (LA195_0 == COMMA) : + alt195 = 1 + if alt195 == 1: + # Java.g:541:79: COMMA formalParameterVarArgDecl + pass + self.match(self.input, COMMA, self.FOLLOW_COMMA_in_synpred99_Java7477) + self._state.following.append(self.FOLLOW_formalParameterVarArgDecl_in_synpred99_Java7479) + self.formalParameterVarArgDecl() + + self._state.following.pop() + + + + + + # $ANTLR end "synpred99_Java" + + + + # $ANTLR start "synpred100_Java" + def synpred100_Java_fragment(self, ): + # Java.g:544:13: ( formalParameterVarArgDecl ) + # Java.g:544:13: formalParameterVarArgDecl + pass + self._state.following.append(self.FOLLOW_formalParameterVarArgDecl_in_synpred100_Java7534) + self.formalParameterVarArgDecl() + + self._state.following.pop() + + + # $ANTLR end "synpred100_Java" + + + + # $ANTLR start "synpred101_Java" + def synpred101_Java_fragment(self, ): + # Java.g:565:13: ( DOT ident= IDENT ) + # Java.g:565:13: DOT ident= IDENT + pass + self.match(self.input, DOT, self.FOLLOW_DOT_in_synpred101_Java7765) + ident=self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred101_Java7769) + + + # $ANTLR end "synpred101_Java" + + + + # $ANTLR start "synpred102_Java" + def synpred102_Java_fragment(self, ): + # Java.g:572:9: ( annotation ) + # Java.g:572:9: annotation + pass + self._state.following.append(self.FOLLOW_annotation_in_synpred102_Java7818) + self.annotation() + + self._state.following.pop() + + + # $ANTLR end "synpred102_Java" + + + + # $ANTLR start "synpred114_Java" + def synpred114_Java_fragment(self, ): + # Java.g:623:9: ( modifierList type ( IDENT LPAREN RPAREN ( annotationDefaultValue )? SEMI | classFieldDeclaratorList SEMI ) ) + # Java.g:623:9: modifierList type ( IDENT LPAREN RPAREN ( annotationDefaultValue )? SEMI | classFieldDeclaratorList SEMI ) + pass + self._state.following.append(self.FOLLOW_modifierList_in_synpred114_Java8240) + self.modifierList() + + self._state.following.pop() + self._state.following.append(self.FOLLOW_type_in_synpred114_Java8242) + self.type() + + self._state.following.pop() + # Java.g:624:9: ( IDENT LPAREN RPAREN ( annotationDefaultValue )? SEMI | classFieldDeclaratorList SEMI ) + alt200 = 2 + LA200_0 = self.input.LA(1) + + if (LA200_0 == IDENT) : + LA200_1 = self.input.LA(2) + + if (LA200_1 == LPAREN) : + alt200 = 1 + elif (LA200_1 == ASSIGN or LA200_1 == COMMA or LA200_1 == LBRACK or LA200_1 == SEMI) : + alt200 = 2 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 200, 1, self.input) + + raise nvae + + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 200, 0, self.input) + + raise nvae + + if alt200 == 1: + # Java.g:624:13: IDENT LPAREN RPAREN ( annotationDefaultValue )? SEMI + pass + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred114_Java8256) + self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_synpred114_Java8258) + self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_synpred114_Java8260) + # Java.g:624:33: ( annotationDefaultValue )? + alt199 = 2 + LA199_0 = self.input.LA(1) + + if (LA199_0 == DEFAULT) : + alt199 = 1 + if alt199 == 1: + # Java.g:0:0: annotationDefaultValue + pass + self._state.following.append(self.FOLLOW_annotationDefaultValue_in_synpred114_Java8262) + self.annotationDefaultValue() + + self._state.following.pop() + + + + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred114_Java8265) + + + elif alt200 == 2: + # Java.g:626:13: classFieldDeclaratorList SEMI + pass + self._state.following.append(self.FOLLOW_classFieldDeclaratorList_in_synpred114_Java8307) + self.classFieldDeclaratorList() + + self._state.following.pop() + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred114_Java8309) + + + + + + # $ANTLR end "synpred114_Java" + + + + # $ANTLR start "synpred116_Java" + def synpred116_Java_fragment(self, ): + # Java.g:644:9: ( localVariableDeclaration SEMI ) + # Java.g:644:9: localVariableDeclaration SEMI + pass + self._state.following.append(self.FOLLOW_localVariableDeclaration_in_synpred116_Java8440) + self.localVariableDeclaration() + + self._state.following.pop() + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred116_Java8442) + + + # $ANTLR end "synpred116_Java" + + + + # $ANTLR start "synpred117_Java" + def synpred117_Java_fragment(self, ): + # Java.g:645:9: ( typeDeclaration ) + # Java.g:645:9: typeDeclaration + pass + self._state.following.append(self.FOLLOW_typeDeclaration_in_synpred117_Java8453) + self.typeDeclaration() + + self._state.following.pop() + + + # $ANTLR end "synpred117_Java" + + + + # $ANTLR start "synpred121_Java" + def synpred121_Java_fragment(self, ): + # Java.g:662:13: ( ELSE elseStat= statement ) + # Java.g:662:13: ELSE elseStat= statement + pass + self.match(self.input, ELSE, self.FOLLOW_ELSE_in_synpred121_Java8733) + self._state.following.append(self.FOLLOW_statement_in_synpred121_Java8737) + elseStat = self.statement() + + self._state.following.pop() + + + # $ANTLR end "synpred121_Java" + + + + # $ANTLR start "synpred123_Java" + def synpred123_Java_fragment(self, ): + # Java.g:666:13: ( forInit SEMI forCondition SEMI forUpdater RPAREN statement ) + # Java.g:666:13: forInit SEMI forCondition SEMI forUpdater RPAREN statement + pass + self._state.following.append(self.FOLLOW_forInit_in_synpred123_Java8916) + self.forInit() + + self._state.following.pop() + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred123_Java8918) + self._state.following.append(self.FOLLOW_forCondition_in_synpred123_Java8920) + self.forCondition() + + self._state.following.pop() + self.match(self.input, SEMI, self.FOLLOW_SEMI_in_synpred123_Java8922) + self._state.following.append(self.FOLLOW_forUpdater_in_synpred123_Java8924) + self.forUpdater() + + self._state.following.pop() + self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_synpred123_Java8926) + self._state.following.append(self.FOLLOW_statement_in_synpred123_Java8928) + self.statement() + + self._state.following.pop() + + + # $ANTLR end "synpred123_Java" + + + + # $ANTLR start "synpred130_Java" + def synpred130_Java_fragment(self, ): + # Java.g:673:47: ( switchBlockLabels ) + # Java.g:673:47: switchBlockLabels + pass + self._state.following.append(self.FOLLOW_switchBlockLabels_in_synpred130_Java9251) + self.switchBlockLabels() + + self._state.following.pop() + + + # $ANTLR end "synpred130_Java" + + + + # $ANTLR start "synpred143_Java" + def synpred143_Java_fragment(self, ): + # Java.g:702:11: (c0= switchCaseLabels ) + # Java.g:702:11: c0= switchCaseLabels + pass + self._state.following.append(self.FOLLOW_switchCaseLabels_in_synpred143_Java9839) + c0 = self.switchCaseLabels() + + self._state.following.pop() + + + # $ANTLR end "synpred143_Java" + + + + # $ANTLR start "synpred145_Java" + def synpred145_Java_fragment(self, ): + # Java.g:702:52: (c1= switchCaseLabels ) + # Java.g:702:52: c1= switchCaseLabels + pass + self._state.following.append(self.FOLLOW_switchCaseLabels_in_synpred145_Java9847) + c1 = self.switchCaseLabels() + + self._state.following.pop() + + + # $ANTLR end "synpred145_Java" + + + + # $ANTLR start "synpred146_Java" + def synpred146_Java_fragment(self, ): + # Java.g:707:9: ( switchCaseLabel ) + # Java.g:707:9: switchCaseLabel + pass + self._state.following.append(self.FOLLOW_switchCaseLabel_in_synpred146_Java9893) + self.switchCaseLabel() + + self._state.following.pop() + + + # $ANTLR end "synpred146_Java" + + + + # $ANTLR start "synpred149_Java" + def synpred149_Java_fragment(self, ): + # Java.g:719:9: ( localVariableDeclaration ) + # Java.g:719:9: localVariableDeclaration + pass + self._state.following.append(self.FOLLOW_localVariableDeclaration_in_synpred149_Java9967) + self.localVariableDeclaration() + + self._state.following.pop() + + + # $ANTLR end "synpred149_Java" + + + + # $ANTLR start "synpred150_Java" + def synpred150_Java_fragment(self, ): + # Java.g:720:9: ( expressionList ) + # Java.g:720:9: expressionList + pass + self._state.following.append(self.FOLLOW_expressionList_in_synpred150_Java9989) + self.expressionList() + + self._state.following.pop() + + + # $ANTLR end "synpred150_Java" + + + + # $ANTLR start "synpred193_Java" + def synpred193_Java_fragment(self, ): + # Java.g:856:9: ( LPAREN type RPAREN unaryExpression ) + # Java.g:856:9: LPAREN type RPAREN unaryExpression + pass + self.match(self.input, LPAREN, self.FOLLOW_LPAREN_in_synpred193_Java11492) + self._state.following.append(self.FOLLOW_type_in_synpred193_Java11494) + self.type() + + self._state.following.pop() + self.match(self.input, RPAREN, self.FOLLOW_RPAREN_in_synpred193_Java11496) + self._state.following.append(self.FOLLOW_unaryExpression_in_synpred193_Java11498) + self.unaryExpression() + + self._state.following.pop() + + + # $ANTLR end "synpred193_Java" + + + + # $ANTLR start "synpred221_Java" + def synpred221_Java_fragment(self, ): + # Java.g:924:13: ( ( arrayDeclarator )+ ( DOT CLASS ) ) + # Java.g:924:13: ( arrayDeclarator )+ ( DOT CLASS ) + pass + # Java.g:924:13: ( arrayDeclarator )+ + cnt224 = 0 + while True: #loop224 + alt224 = 2 + LA224_0 = self.input.LA(1) + + if (LA224_0 == LBRACK) : + alt224 = 1 + + + if alt224 == 1: + # Java.g:924:17: arrayDeclarator + pass + self._state.following.append(self.FOLLOW_arrayDeclarator_in_synpred221_Java13349) + self.arrayDeclarator() + + self._state.following.pop() + + + else: + if cnt224 >= 1: + break #loop224 + + if self._state.backtracking > 0: + raise BacktrackingFailed + + eee = EarlyExitException(224, self.input) + raise eee + + cnt224 += 1 + # Java.g:926:13: ( DOT CLASS ) + # Java.g:926:17: DOT CLASS + pass + self.match(self.input, DOT, self.FOLLOW_DOT_in_synpred221_Java13416) + self.match(self.input, CLASS, self.FOLLOW_CLASS_in_synpred221_Java13418) + + + + + + # $ANTLR end "synpred221_Java" + + + + # $ANTLR start "synpred229_Java" + def synpred229_Java_fragment(self, ): + # Java.g:929:13: (outerDot= DOT ( CLASS | genericTypeArgumentListSimplified (Super= SUPER arguments | SUPER innerDot= DOT IDENT arguments | IDENT arguments ) | THIS | Super= SUPER arguments | innerNewExpression ) ) + # Java.g:929:13: outerDot= DOT ( CLASS | genericTypeArgumentListSimplified (Super= SUPER arguments | SUPER innerDot= DOT IDENT arguments | IDENT arguments ) | THIS | Super= SUPER arguments | innerNewExpression ) + pass + outerDot=self.match(self.input, DOT, self.FOLLOW_DOT_in_synpred229_Java13549) + # Java.g:930:13: ( CLASS | genericTypeArgumentListSimplified (Super= SUPER arguments | SUPER innerDot= DOT IDENT arguments | IDENT arguments ) | THIS | Super= SUPER arguments | innerNewExpression ) + alt227 = 5 + LA227 = self.input.LA(1) + if LA227 == CLASS: + alt227 = 1 + elif LA227 == LESS_THAN: + alt227 = 2 + elif LA227 == THIS: + alt227 = 3 + elif LA227 == SUPER: + alt227 = 4 + elif LA227 == NEW: + alt227 = 5 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 227, 0, self.input) + + raise nvae + + if alt227 == 1: + # Java.g:930:17: CLASS + pass + self.match(self.input, CLASS, self.FOLLOW_CLASS_in_synpred229_Java13567) + + + elif alt227 == 2: + # Java.g:931:17: genericTypeArgumentListSimplified (Super= SUPER arguments | SUPER innerDot= DOT IDENT arguments | IDENT arguments ) + pass + self._state.following.append(self.FOLLOW_genericTypeArgumentListSimplified_in_synpred229_Java13630) + self.genericTypeArgumentListSimplified() + + self._state.following.pop() + # Java.g:932:17: (Super= SUPER arguments | SUPER innerDot= DOT IDENT arguments | IDENT arguments ) + alt226 = 3 + LA226_0 = self.input.LA(1) + + if (LA226_0 == SUPER) : + LA226_1 = self.input.LA(2) + + if (LA226_1 == DOT) : + alt226 = 2 + elif (LA226_1 == LPAREN) : + alt226 = 1 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 226, 1, self.input) + + raise nvae + + elif (LA226_0 == IDENT) : + alt226 = 3 + else: + if self._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException("", 226, 0, self.input) + + raise nvae + + if alt226 == 1: + # Java.g:932:21: Super= SUPER arguments + pass + Super=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_synpred229_Java13654) + self._state.following.append(self.FOLLOW_arguments_in_synpred229_Java13656) + self.arguments() + + self._state.following.pop() + + + elif alt226 == 2: + # Java.g:933:21: SUPER innerDot= DOT IDENT arguments + pass + self.match(self.input, SUPER, self.FOLLOW_SUPER_in_synpred229_Java13706) + innerDot=self.match(self.input, DOT, self.FOLLOW_DOT_in_synpred229_Java13710) + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred229_Java13712) + self._state.following.append(self.FOLLOW_arguments_in_synpred229_Java13714) + self.arguments() + + self._state.following.pop() + + + elif alt226 == 3: + # Java.g:934:21: IDENT arguments + pass + self.match(self.input, IDENT, self.FOLLOW_IDENT_in_synpred229_Java13764) + self._state.following.append(self.FOLLOW_arguments_in_synpred229_Java13766) + self.arguments() + + self._state.following.pop() + + + + + + elif alt227 == 3: + # Java.g:936:17: THIS + pass + self.match(self.input, THIS, self.FOLLOW_THIS_in_synpred229_Java13841) + + + elif alt227 == 4: + # Java.g:937:17: Super= SUPER arguments + pass + Super=self.match(self.input, SUPER, self.FOLLOW_SUPER_in_synpred229_Java13907) + self._state.following.append(self.FOLLOW_arguments_in_synpred229_Java13909) + self.arguments() + + self._state.following.pop() + + + elif alt227 == 5: + # Java.g:938:17: innerNewExpression + pass + self._state.following.append(self.FOLLOW_innerNewExpression_in_synpred229_Java13957) + self.innerNewExpression() + + self._state.following.pop() + + + + + + # $ANTLR end "synpred229_Java" + + + + # $ANTLR start "synpred237_Java" + def synpred237_Java_fragment(self, ): + # Java.g:963:37: ( LBRACK expression RBRACK ) + # Java.g:963:37: LBRACK expression RBRACK + pass + self.match(self.input, LBRACK, self.FOLLOW_LBRACK_in_synpred237_Java14352) + self._state.following.append(self.FOLLOW_expression_in_synpred237_Java14355) + self.expression() + + self._state.following.pop() + self.match(self.input, RBRACK, self.FOLLOW_RBRACK_in_synpred237_Java14357) + + + # $ANTLR end "synpred237_Java" + + + + + # Delegated rules + + def synpred193_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred193_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred43_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred43_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred121_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred121_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred76_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred76_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred221_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred221_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred229_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred229_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred114_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred114_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred116_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred116_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred97_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred97_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred102_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred102_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred117_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred117_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred79_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred79_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred101_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred101_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred130_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred130_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred16_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred16_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred42_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred42_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred145_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred145_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred143_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred143_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred77_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred77_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred51_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred51_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred100_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred100_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred52_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred52_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred15_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred15_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred123_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred123_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred32_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred32_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred149_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred149_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred17_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred17_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred92_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred92_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred90_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred90_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred150_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred150_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred58_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred58_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred50_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred50_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred14_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred14_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred99_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred99_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred146_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred146_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred237_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred237_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + def synpred44_Java(self): + self._state.backtracking += 1 + start = self.input.mark() + try: + self.synpred44_Java_fragment() + except BacktrackingFailed: + success = False + else: + success = True + self.input.rewind(start) + self._state.backtracking -= 1 + return success + + + + # lookup tables for DFA #36 + + DFA36_eot = DFA.unpack( + "\27\uffff" + ) + + DFA36_eof = DFA.unpack( + "\27\uffff" + ) + + DFA36_min = DFA.unpack( + "\1\7\1\uffff\14\0\11\uffff" + ) + + DFA36_max = DFA.unpack( + "\1\u00a4\1\uffff\14\0\11\uffff" + ) + + DFA36_accept = DFA.unpack( + "\1\uffff\1\1\14\uffff\1\3\3\uffff\1\4\2\uffff\1\5\1\2" + ) + + DFA36_special = DFA.unpack( + "\2\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\11" + "\uffff" + ) + + + DFA36_transition = [ + DFA.unpack("\1\15\17\uffff\1\1\1\uffff\1\16\22\uffff\1\25\10\uffff" + "\1\6\1\uffff\1\16\1\uffff\1\16\2\uffff\1\16\1\22\3\uffff\1\16\1" + "\uffff\1\22\2\uffff\1\14\1\uffff\1\16\4\uffff\1\22\1\uffff\2\16" + "\1\7\3\uffff\1\5\1\4\1\3\1\uffff\1\16\1\2\1\13\2\uffff\1\10\3\uffff" + "\1\11\2\uffff\1\16\1\12\75\uffff\1\16"), + DFA.unpack(""), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("") + ] + + # class definition for DFA #36 + + class DFA36(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA36_2 = input.LA(1) + + + index36_2 = input.index() + input.rewind() + s = -1 + if (self.synpred32_Java()): + s = 22 + + elif (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_2) + if s >= 0: + return s + elif s == 1: + LA36_3 = input.LA(1) + + + index36_3 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_3) + if s >= 0: + return s + elif s == 2: + LA36_4 = input.LA(1) + + + index36_4 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_4) + if s >= 0: + return s + elif s == 3: + LA36_5 = input.LA(1) + + + index36_5 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_5) + if s >= 0: + return s + elif s == 4: + LA36_6 = input.LA(1) + + + index36_6 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_6) + if s >= 0: + return s + elif s == 5: + LA36_7 = input.LA(1) + + + index36_7 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_7) + if s >= 0: + return s + elif s == 6: + LA36_8 = input.LA(1) + + + index36_8 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_8) + if s >= 0: + return s + elif s == 7: + LA36_9 = input.LA(1) + + + index36_9 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_9) + if s >= 0: + return s + elif s == 8: + LA36_10 = input.LA(1) + + + index36_10 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_10) + if s >= 0: + return s + elif s == 9: + LA36_11 = input.LA(1) + + + index36_11 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_11) + if s >= 0: + return s + elif s == 10: + LA36_12 = input.LA(1) + + + index36_12 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_12) + if s >= 0: + return s + elif s == 11: + LA36_13 = input.LA(1) + + + index36_13 = input.index() + input.rewind() + s = -1 + if (self.synpred43_Java()): + s = 14 + + elif (self.synpred44_Java()): + s = 18 + + + input.seek(index36_13) + if s >= 0: + return s + + if self._state.backtracking >0: + raise BacktrackingFailed + nvae = NoViableAltException(self_.getDescription(), 36, _s, input) + self_.error(nvae) + raise nvae + # lookup tables for DFA #43 + + DFA43_eot = DFA.unpack( + "\25\uffff" + ) + + DFA43_eof = DFA.unpack( + "\25\uffff" + ) + + DFA43_min = DFA.unpack( + "\1\7\14\0\10\uffff" + ) + + DFA43_max = DFA.unpack( + "\1\u00a4\14\0\10\uffff" + ) + + DFA43_accept = DFA.unpack( + "\15\uffff\1\1\3\uffff\1\2\2\uffff\1\3" + ) + + DFA43_special = DFA.unpack( + "\1\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\10" + "\uffff" + ) + + + DFA43_transition = [ + DFA.unpack("\1\14\21\uffff\1\15\22\uffff\1\24\10\uffff\1\5\1\uffff" + "\1\15\1\uffff\1\15\2\uffff\1\15\1\21\3\uffff\1\15\1\uffff\1\21" + "\2\uffff\1\13\1\uffff\1\15\4\uffff\1\21\1\uffff\2\15\1\6\3\uffff" + "\1\3\1\2\1\1\1\uffff\1\15\1\4\1\12\2\uffff\1\7\3\uffff\1\10\2\uffff" + "\1\15\1\11\75\uffff\1\15"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("") + ] + + # class definition for DFA #43 + + class DFA43(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA43_1 = input.LA(1) + + + index43_1 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_1) + if s >= 0: + return s + elif s == 1: + LA43_2 = input.LA(1) + + + index43_2 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_2) + if s >= 0: + return s + elif s == 2: + LA43_3 = input.LA(1) + + + index43_3 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_3) + if s >= 0: + return s + elif s == 3: + LA43_4 = input.LA(1) + + + index43_4 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_4) + if s >= 0: + return s + elif s == 4: + LA43_5 = input.LA(1) + + + index43_5 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_5) + if s >= 0: + return s + elif s == 5: + LA43_6 = input.LA(1) + + + index43_6 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_6) + if s >= 0: + return s + elif s == 6: + LA43_7 = input.LA(1) + + + index43_7 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_7) + if s >= 0: + return s + elif s == 7: + LA43_8 = input.LA(1) + + + index43_8 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_8) + if s >= 0: + return s + elif s == 8: + LA43_9 = input.LA(1) + + + index43_9 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_9) + if s >= 0: + return s + elif s == 9: + LA43_10 = input.LA(1) + + + index43_10 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_10) + if s >= 0: + return s + elif s == 10: + LA43_11 = input.LA(1) + + + index43_11 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_11) + if s >= 0: + return s + elif s == 11: + LA43_12 = input.LA(1) + + + index43_12 = input.index() + input.rewind() + s = -1 + if (self.synpred51_Java()): + s = 13 + + elif (self.synpred52_Java()): + s = 17 + + + input.seek(index43_12) + if s >= 0: + return s + + if self._state.backtracking >0: + raise BacktrackingFailed + nvae = NoViableAltException(self_.getDescription(), 43, _s, input) + self_.error(nvae) + raise nvae + # lookup tables for DFA #86 + + DFA86_eot = DFA.unpack( + "\22\uffff" + ) + + DFA86_eof = DFA.unpack( + "\22\uffff" + ) + + DFA86_min = DFA.unpack( + "\1\7\14\0\5\uffff" + ) + + DFA86_max = DFA.unpack( + "\1\u00a4\14\0\5\uffff" + ) + + DFA86_accept = DFA.unpack( + "\15\uffff\1\1\1\uffff\1\2\2\uffff" + ) + + DFA86_special = DFA.unpack( + "\1\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\5" + "\uffff" + ) + + + DFA86_transition = [ + DFA.unpack("\1\14\55\uffff\1\5\1\uffff\1\15\1\uffff\1\15\2\uffff" + "\1\15\1\17\3\uffff\1\15\1\uffff\1\17\2\uffff\1\13\1\uffff\1\15" + "\4\uffff\1\17\1\uffff\2\15\1\6\3\uffff\1\3\1\2\1\1\1\uffff\1\15" + "\1\4\1\12\2\uffff\1\7\3\uffff\1\10\3\uffff\1\11\75\uffff\1\15"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("") + ] + + # class definition for DFA #86 + + class DFA86(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA86_1 = input.LA(1) + + + index86_1 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_1) + if s >= 0: + return s + elif s == 1: + LA86_2 = input.LA(1) + + + index86_2 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_2) + if s >= 0: + return s + elif s == 2: + LA86_3 = input.LA(1) + + + index86_3 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_3) + if s >= 0: + return s + elif s == 3: + LA86_4 = input.LA(1) + + + index86_4 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_4) + if s >= 0: + return s + elif s == 4: + LA86_5 = input.LA(1) + + + index86_5 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_5) + if s >= 0: + return s + elif s == 5: + LA86_6 = input.LA(1) + + + index86_6 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_6) + if s >= 0: + return s + elif s == 6: + LA86_7 = input.LA(1) + + + index86_7 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_7) + if s >= 0: + return s + elif s == 7: + LA86_8 = input.LA(1) + + + index86_8 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_8) + if s >= 0: + return s + elif s == 8: + LA86_9 = input.LA(1) + + + index86_9 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_9) + if s >= 0: + return s + elif s == 9: + LA86_10 = input.LA(1) + + + index86_10 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_10) + if s >= 0: + return s + elif s == 10: + LA86_11 = input.LA(1) + + + index86_11 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_11) + if s >= 0: + return s + elif s == 11: + LA86_12 = input.LA(1) + + + index86_12 = input.index() + input.rewind() + s = -1 + if (self.synpred114_Java()): + s = 13 + + elif (True): + s = 15 + + + input.seek(index86_12) + if s >= 0: + return s + + if self._state.backtracking >0: + raise BacktrackingFailed + nvae = NoViableAltException(self_.getDescription(), 86, _s, input) + self_.error(nvae) + raise nvae + # lookup tables for DFA #88 + + DFA88_eot = DFA.unpack( + "\55\uffff" + ) + + DFA88_eof = DFA.unpack( + "\55\uffff" + ) + + DFA88_min = DFA.unpack( + "\1\7\4\0\6\uffff\1\0\41\uffff" + ) + + DFA88_max = DFA.unpack( + "\1\u00aa\4\0\6\uffff\1\0\41\uffff" + ) + + DFA88_accept = DFA.unpack( + "\5\uffff\1\2\14\uffff\1\3\31\uffff\1\1" + ) + + DFA88_special = DFA.unpack( + "\1\uffff\1\0\1\1\1\2\1\3\6\uffff\1\4\41\uffff" + ) + + + DFA88_transition = [ + DFA.unpack("\1\2\4\uffff\1\22\10\uffff\1\22\1\uffff\1\22\1\uffff" + "\1\22\1\uffff\1\22\1\uffff\2\22\3\uffff\1\22\3\uffff\1\22\5\uffff" + "\1\22\10\uffff\1\5\1\22\1\3\1\22\1\3\2\uffff\1\3\1\5\1\22\1\uffff" + "\1\22\1\3\1\uffff\1\5\1\uffff\1\22\1\1\1\uffff\1\3\2\22\2\uffff" + "\1\5\1\uffff\2\3\1\5\2\22\1\uffff\3\5\1\22\1\3\2\5\2\22\1\13\2" + "\22\1\uffff\1\5\3\22\1\5\1\22\74\uffff\1\4\6\22"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\uffff"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("") + ] + + # class definition for DFA #88 + + class DFA88(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA88_1 = input.LA(1) + + + index88_1 = input.index() + input.rewind() + s = -1 + if (self.synpred116_Java()): + s = 44 + + elif (self.synpred117_Java()): + s = 5 + + + input.seek(index88_1) + if s >= 0: + return s + elif s == 1: + LA88_2 = input.LA(1) + + + index88_2 = input.index() + input.rewind() + s = -1 + if (self.synpred116_Java()): + s = 44 + + elif (self.synpred117_Java()): + s = 5 + + + input.seek(index88_2) + if s >= 0: + return s + elif s == 2: + LA88_3 = input.LA(1) + + + index88_3 = input.index() + input.rewind() + s = -1 + if (self.synpred116_Java()): + s = 44 + + elif (True): + s = 18 + + + input.seek(index88_3) + if s >= 0: + return s + elif s == 3: + LA88_4 = input.LA(1) + + + index88_4 = input.index() + input.rewind() + s = -1 + if (self.synpred116_Java()): + s = 44 + + elif (True): + s = 18 + + + input.seek(index88_4) + if s >= 0: + return s + elif s == 4: + LA88_11 = input.LA(1) + + + index88_11 = input.index() + input.rewind() + s = -1 + if (self.synpred117_Java()): + s = 5 + + elif (True): + s = 18 + + + input.seek(index88_11) + if s >= 0: + return s + + if self._state.backtracking >0: + raise BacktrackingFailed + nvae = NoViableAltException(self_.getDescription(), 88, _s, input) + self_.error(nvae) + raise nvae + # lookup tables for DFA #98 + + DFA98_eot = DFA.unpack( + "\22\uffff" + ) + + DFA98_eof = DFA.unpack( + "\22\uffff" + ) + + DFA98_min = DFA.unpack( + "\1\14\15\uffff\1\4\3\uffff" + ) + + DFA98_max = DFA.unpack( + "\1\u00aa\15\uffff\1\114\3\uffff" + ) + + DFA98_accept = DFA.unpack( + "\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1" + "\15\1\uffff\1\17\1\20\1\16" + ) + + DFA98_special = DFA.unpack( + "\22\uffff" + ) + + + DFA98_transition = [ + DFA.unpack("\1\17\10\uffff\1\17\1\uffff\1\1\1\uffff\1\17\1\uffff" + "\1\17\1\uffff\2\17\3\uffff\1\17\3\uffff\1\17\5\uffff\1\20\11\uffff" + "\1\2\1\17\1\14\1\17\2\uffff\1\17\1\uffff\1\15\1\uffff\1\6\1\17" + "\3\uffff\1\17\2\uffff\1\17\1\4\1\3\4\uffff\2\17\1\uffff\2\17\4" + "\uffff\1\12\1\17\2\uffff\1\17\1\10\1\11\1\17\1\13\2\uffff\1\17" + "\1\7\1\17\1\uffff\1\5\74\uffff\1\16\6\17"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\3\17\1\uffff\2\17\1\21\1\uffff\4\17\2\uffff\5\17\1" + "\uffff\3\17\1\uffff\6\17\1\uffff\6\17\3\uffff\11\17\27\uffff\1" + "\17"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("") + ] + + # class definition for DFA #98 + + class DFA98(DFA): + pass + + + # lookup tables for DFA #91 + + DFA91_eot = DFA.unpack( + "\24\uffff" + ) + + DFA91_eof = DFA.unpack( + "\24\uffff" + ) + + DFA91_min = DFA.unpack( + "\1\7\4\0\17\uffff" + ) + + DFA91_max = DFA.unpack( + "\1\u00aa\4\0\17\uffff" + ) + + DFA91_accept = DFA.unpack( + "\5\uffff\1\1\15\uffff\1\2" + ) + + DFA91_special = DFA.unpack( + "\1\uffff\1\0\1\1\1\2\1\3\17\uffff" + ) + + + DFA91_transition = [ + DFA.unpack("\1\2\4\uffff\1\5\10\uffff\1\5\3\uffff\1\5\1\uffff\1" + "\5\1\uffff\2\5\3\uffff\1\5\3\uffff\1\5\5\uffff\1\5\12\uffff\1\3" + "\1\uffff\1\3\2\uffff\1\3\4\uffff\1\3\3\uffff\1\5\1\1\1\uffff\1" + "\3\6\uffff\2\3\1\uffff\2\5\5\uffff\1\3\2\uffff\1\5\2\uffff\1\5" + "\3\uffff\1\5\1\uffff\1\5\76\uffff\1\4\6\5"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("") + ] + + # class definition for DFA #91 + + class DFA91(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA91_1 = input.LA(1) + + + index91_1 = input.index() + input.rewind() + s = -1 + if (self.synpred123_Java()): + s = 5 + + elif (True): + s = 19 + + + input.seek(index91_1) + if s >= 0: + return s + elif s == 1: + LA91_2 = input.LA(1) + + + index91_2 = input.index() + input.rewind() + s = -1 + if (self.synpred123_Java()): + s = 5 + + elif (True): + s = 19 + + + input.seek(index91_2) + if s >= 0: + return s + elif s == 2: + LA91_3 = input.LA(1) + + + index91_3 = input.index() + input.rewind() + s = -1 + if (self.synpred123_Java()): + s = 5 + + elif (True): + s = 19 + + + input.seek(index91_3) + if s >= 0: + return s + elif s == 3: + LA91_4 = input.LA(1) + + + index91_4 = input.index() + input.rewind() + s = -1 + if (self.synpred123_Java()): + s = 5 + + elif (True): + s = 19 + + + input.seek(index91_4) + if s >= 0: + return s + + if self._state.backtracking >0: + raise BacktrackingFailed + nvae = NoViableAltException(self_.getDescription(), 91, _s, input) + self_.error(nvae) + raise nvae + # lookup tables for DFA #106 + + DFA106_eot = DFA.unpack( + "\23\uffff" + ) + + DFA106_eof = DFA.unpack( + "\23\uffff" + ) + + DFA106_min = DFA.unpack( + "\1\7\2\uffff\2\0\16\uffff" + ) + + DFA106_max = DFA.unpack( + "\1\u00aa\2\uffff\2\0\16\uffff" + ) + + DFA106_accept = DFA.unpack( + "\1\uffff\1\1\3\uffff\1\2\14\uffff\1\3" + ) + + DFA106_special = DFA.unpack( + "\3\uffff\1\0\1\1\16\uffff" + ) + + + DFA106_transition = [ + DFA.unpack("\1\1\4\uffff\1\5\10\uffff\1\5\3\uffff\1\5\1\uffff\1" + "\5\1\uffff\2\5\3\uffff\1\5\3\uffff\1\5\5\uffff\1\22\12\uffff\1" + "\3\1\uffff\1\3\2\uffff\1\3\4\uffff\1\3\3\uffff\1\5\1\1\1\uffff" + "\1\3\6\uffff\2\3\1\uffff\2\5\5\uffff\1\3\2\uffff\1\5\2\uffff\1" + "\5\3\uffff\1\5\1\uffff\1\5\76\uffff\1\4\6\5"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\uffff"), + DFA.unpack("\1\uffff"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("") + ] + + # class definition for DFA #106 + + class DFA106(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA106_3 = input.LA(1) + + + index106_3 = input.index() + input.rewind() + s = -1 + if (self.synpred149_Java()): + s = 1 + + elif (self.synpred150_Java()): + s = 5 + + + input.seek(index106_3) + if s >= 0: + return s + elif s == 1: + LA106_4 = input.LA(1) + + + index106_4 = input.index() + input.rewind() + s = -1 + if (self.synpred149_Java()): + s = 1 + + elif (self.synpred150_Java()): + s = 5 + + + input.seek(index106_4) + if s >= 0: + return s + + if self._state.backtracking >0: + raise BacktrackingFailed + nvae = NoViableAltException(self_.getDescription(), 106, _s, input) + self_.error(nvae) + raise nvae + # lookup tables for DFA #130 + + DFA130_eot = DFA.unpack( + "\15\uffff" + ) + + DFA130_eof = DFA.unpack( + "\15\uffff" + ) + + DFA130_min = DFA.unpack( + "\1\31\2\uffff\1\0\11\uffff" + ) + + DFA130_max = DFA.unpack( + "\1\u00aa\2\uffff\1\0\11\uffff" + ) + + DFA130_accept = DFA.unpack( + "\1\uffff\1\1\1\2\1\uffff\1\4\7\uffff\1\3" + ) + + DFA130_special = DFA.unpack( + "\3\uffff\1\0\11\uffff" + ) + + + DFA130_transition = [ + DFA.unpack("\1\4\1\uffff\1\2\1\uffff\1\3\4\uffff\1\1\24\uffff\1" + "\4\1\uffff\1\4\2\uffff\1\4\4\uffff\1\4\3\uffff\1\4\2\uffff\1\4" + "\6\uffff\2\4\1\uffff\2\4\5\uffff\1\4\2\uffff\1\4\2\uffff\1\4\3" + "\uffff\1\4\1\uffff\1\4\76\uffff\7\4"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\uffff"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("") + ] + + # class definition for DFA #130 + + class DFA130(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA130_3 = input.LA(1) + + + index130_3 = input.index() + input.rewind() + s = -1 + if (self.synpred193_Java()): + s = 12 + + elif (True): + s = 4 + + + input.seek(index130_3) + if s >= 0: + return s + + if self._state.backtracking >0: + raise BacktrackingFailed + nvae = NoViableAltException(self_.getDescription(), 130, _s, input) + self_.error(nvae) + raise nvae + # lookup tables for DFA #142 + + DFA142_eot = DFA.unpack( + "\14\uffff" + ) + + DFA142_eof = DFA.unpack( + "\14\uffff" + ) + + DFA142_min = DFA.unpack( + "\1\31\6\uffff\1\17\4\uffff" + ) + + DFA142_max = DFA.unpack( + "\1\u00aa\6\uffff\1\35\4\uffff" + ) + + DFA142_accept = DFA.unpack( + "\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\uffff\1\11\1\12\1\10\1\7" + ) + + DFA142_special = DFA.unpack( + "\14\uffff" + ) + + + DFA142_transition = [ + DFA.unpack("\1\5\3\uffff\1\1\31\uffff\1\10\1\uffff\1\10\2\uffff" + "\1\10\4\uffff\1\10\3\uffff\1\2\2\uffff\1\10\6\uffff\2\10\1\uffff" + "\1\3\1\2\5\uffff\1\10\2\uffff\1\7\2\uffff\1\6\3\uffff\1\2\1\uffff" + "\1\11\76\uffff\1\4\6\2"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("\1\12\15\uffff\1\13"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("") + ] + + # class definition for DFA #142 + + class DFA142(DFA): + pass + + + # lookup tables for DFA #146 + + DFA146_eot = DFA.unpack( + "\60\uffff" + ) + + DFA146_eof = DFA.unpack( + "\1\4\57\uffff" + ) + + DFA146_min = DFA.unpack( + "\1\4\1\0\1\uffff\1\0\54\uffff" + ) + + DFA146_max = DFA.unpack( + "\1\114\1\0\1\uffff\1\0\54\uffff" + ) + + DFA146_accept = DFA.unpack( + "\2\uffff\1\2\1\uffff\1\4\51\uffff\1\1\1\3" + ) + + DFA146_special = DFA.unpack( + "\1\uffff\1\0\1\uffff\1\1\54\uffff" + ) + + + DFA146_transition = [ + DFA.unpack("\3\4\1\uffff\7\4\1\3\2\uffff\4\4\1\1\1\uffff\3\4\1\uffff" + "\1\4\1\2\4\4\1\uffff\22\4\27\uffff\1\4"), + DFA.unpack("\1\uffff"), + DFA.unpack(""), + DFA.unpack("\1\uffff"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("") + ] + + # class definition for DFA #146 + + class DFA146(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA146_1 = input.LA(1) + + + index146_1 = input.index() + input.rewind() + s = -1 + if (self.synpred221_Java()): + s = 46 + + elif (True): + s = 4 + + + input.seek(index146_1) + if s >= 0: + return s + elif s == 1: + LA146_3 = input.LA(1) + + + index146_3 = input.index() + input.rewind() + s = -1 + if (self.synpred229_Java()): + s = 47 + + elif (True): + s = 4 + + + input.seek(index146_3) + if s >= 0: + return s + + if self._state.backtracking >0: + raise BacktrackingFailed + nvae = NoViableAltException(self_.getDescription(), 146, _s, input) + self_.error(nvae) + raise nvae + # lookup tables for DFA #153 + + DFA153_eot = DFA.unpack( + "\56\uffff" + ) + + DFA153_eof = DFA.unpack( + "\1\2\55\uffff" + ) + + DFA153_min = DFA.unpack( + "\1\4\1\0\54\uffff" + ) + + DFA153_max = DFA.unpack( + "\1\114\1\0\54\uffff" + ) + + DFA153_accept = DFA.unpack( + "\2\uffff\1\2\52\uffff\1\1" + ) + + DFA153_special = DFA.unpack( + "\1\uffff\1\0\54\uffff" + ) + + + DFA153_transition = [ + DFA.unpack("\3\2\1\uffff\10\2\2\uffff\4\2\1\1\1\uffff\3\2\1\uffff" + "\1\2\1\uffff\4\2\1\uffff\22\2\27\uffff\1\2"), + DFA.unpack("\1\uffff"), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack(""), + DFA.unpack("") + ] + + # class definition for DFA #153 + + class DFA153(DFA): + pass + + + def specialStateTransition(self_, s, input): + # convince pylint that my self_ magic is ok ;) + # pylint: disable-msg=E0213 + + # pretend we are a member of the recognizer + # thus semantic predicates can be evaluated + self = self_.recognizer + + _s = s + + if s == 0: + LA153_1 = input.LA(1) + + + index153_1 = input.index() + input.rewind() + s = -1 + if (self.synpred237_Java()): + s = 45 + + elif (True): + s = 2 + + + input.seek(index153_1) + if s >= 0: + return s + + if self._state.backtracking >0: + raise BacktrackingFailed + nvae = NoViableAltException(self_.getDescription(), 153, _s, input) + self_.error(nvae) + raise nvae + + + FOLLOW_compilationUnit_in_javaSource4461 = frozenset([1]) + FOLLOW_annotationList_in_compilationUnit4497 = frozenset([1, 7, 44, 53, 61, 67, 70, 77, 78, 81, 84, 85, 86, 87, 90, 91, 94, 98, 102]) + FOLLOW_packageDeclaration_in_compilationUnit4507 = frozenset([1, 7, 44, 53, 61, 67, 70, 77, 78, 81, 85, 86, 87, 90, 91, 94, 98, 102]) + FOLLOW_importDeclaration_in_compilationUnit4518 = frozenset([1, 7, 44, 53, 61, 67, 70, 77, 78, 81, 85, 86, 87, 90, 91, 94, 98, 102]) + FOLLOW_typeDecls_in_compilationUnit4529 = frozenset([1, 7, 44, 53, 61, 67, 70, 77, 81, 85, 86, 87, 90, 91, 94, 98, 102]) + FOLLOW_typeDeclaration_in_typeDecls4549 = frozenset([1]) + FOLLOW_SEMI_in_typeDecls4559 = frozenset([1]) + FOLLOW_PACKAGE_in_packageDeclaration4579 = frozenset([164]) + FOLLOW_qualifiedIdentifier_in_packageDeclaration4582 = frozenset([44]) + FOLLOW_SEMI_in_packageDeclaration4584 = frozenset([1]) + FOLLOW_IMPORT_in_importDeclaration4604 = frozenset([90, 164]) + FOLLOW_STATIC_in_importDeclaration4607 = frozenset([164]) + FOLLOW_qualifiedIdentifier_in_importDeclaration4610 = frozenset([16, 44]) + FOLLOW_DOTSTAR_in_importDeclaration4612 = frozenset([44]) + FOLLOW_SEMI_in_importDeclaration4615 = frozenset([1]) + FOLLOW_modifierList_in_typeDeclaration4635 = frozenset([7, 53, 61, 67, 70, 77, 81, 85, 86, 87, 90, 91, 94, 98, 102]) + FOLLOW_classTypeDeclaration_in_typeDeclaration4650 = frozenset([1]) + FOLLOW_interfaceTypeDeclaration_in_typeDeclaration4665 = frozenset([1]) + FOLLOW_enumTypeDeclaration_in_typeDeclaration4680 = frozenset([1]) + FOLLOW_annotationTypeDeclaration_in_typeDeclaration4695 = frozenset([1]) + FOLLOW_CLASS_in_classTypeDeclaration4726 = frozenset([164]) + FOLLOW_IDENT_in_classTypeDeclaration4728 = frozenset([23, 25, 68, 75]) + FOLLOW_genericTypeParameterList_in_classTypeDeclaration4730 = frozenset([23, 25, 68, 75]) + FOLLOW_classExtendsClause_in_classTypeDeclaration4733 = frozenset([23, 25, 68, 75]) + FOLLOW_implementsClause_in_classTypeDeclaration4736 = frozenset([23, 25, 68, 75]) + FOLLOW_classBody_in_classTypeDeclaration4739 = frozenset([1]) + FOLLOW_EXTENDS_in_classExtendsClause4802 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_classExtendsClause4804 = frozenset([1]) + FOLLOW_EXTENDS_in_interfaceExtendsClause4841 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_typeList_in_interfaceExtendsClause4843 = frozenset([1]) + FOLLOW_IMPLEMENTS_in_implementsClause4880 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_typeList_in_implementsClause4882 = frozenset([1]) + FOLLOW_LESS_THAN_in_genericTypeParameterList4919 = frozenset([164]) + FOLLOW_genericTypeParameter_in_genericTypeParameterList4921 = frozenset([8, 11, 20, 47]) + FOLLOW_COMMA_in_genericTypeParameterList4924 = frozenset([164]) + FOLLOW_genericTypeParameter_in_genericTypeParameterList4926 = frozenset([8, 11, 20, 47]) + FOLLOW_genericTypeListClosing_in_genericTypeParameterList4930 = frozenset([1]) + FOLLOW_GREATER_THAN_in_genericTypeListClosing5045 = frozenset([1]) + FOLLOW_SHIFT_RIGHT_in_genericTypeListClosing5055 = frozenset([1]) + FOLLOW_BIT_SHIFT_RIGHT_in_genericTypeListClosing5065 = frozenset([1]) + FOLLOW_IDENT_in_genericTypeParameter5093 = frozenset([1, 68]) + FOLLOW_bound_in_genericTypeParameter5095 = frozenset([1]) + FOLLOW_EXTENDS_in_bound5133 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_bound5135 = frozenset([1, 4]) + FOLLOW_AND_in_bound5138 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_bound5140 = frozenset([1, 4]) + FOLLOW_ENUM_in_enumTypeDeclaration5181 = frozenset([164]) + FOLLOW_IDENT_in_enumTypeDeclaration5183 = frozenset([23, 75]) + FOLLOW_implementsClause_in_enumTypeDeclaration5185 = frozenset([23, 75]) + FOLLOW_enumBody_in_enumTypeDeclaration5188 = frozenset([1]) + FOLLOW_LCURLY_in_enumBody5231 = frozenset([7, 53, 70, 81, 85, 86, 87, 90, 91, 94, 98, 102, 164]) + FOLLOW_enumScopeDeclarations_in_enumBody5233 = frozenset([42]) + FOLLOW_RCURLY_in_enumBody5235 = frozenset([1]) + FOLLOW_enumConstants_in_enumScopeDeclarations5272 = frozenset([1, 11, 44]) + FOLLOW_COMMA_in_enumScopeDeclarations5275 = frozenset([1, 44]) + FOLLOW_enumClassScopeDeclarations_in_enumScopeDeclarations5280 = frozenset([1]) + FOLLOW_SEMI_in_enumClassScopeDeclarations5300 = frozenset([1, 7, 23, 25, 44, 53, 55, 57, 60, 61, 65, 67, 70, 72, 77, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 101, 102, 164]) + FOLLOW_classScopeDeclarations_in_enumClassScopeDeclarations5302 = frozenset([1, 7, 23, 25, 44, 53, 55, 57, 60, 61, 65, 67, 70, 72, 77, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 101, 102, 164]) + FOLLOW_enumConstant_in_enumConstants5341 = frozenset([1, 11]) + FOLLOW_COMMA_in_enumConstants5344 = frozenset([7, 53, 70, 81, 85, 86, 87, 90, 91, 94, 98, 102, 164]) + FOLLOW_enumConstant_in_enumConstants5347 = frozenset([1, 11]) + FOLLOW_annotationList_in_enumConstant5368 = frozenset([164]) + FOLLOW_IDENT_in_enumConstant5370 = frozenset([1, 23, 25, 29, 68, 75]) + FOLLOW_arguments_in_enumConstant5373 = frozenset([1, 23, 25, 68, 75]) + FOLLOW_classBody_in_enumConstant5376 = frozenset([1]) + FOLLOW_INTERFACE_in_interfaceTypeDeclaration5397 = frozenset([164]) + FOLLOW_IDENT_in_interfaceTypeDeclaration5399 = frozenset([23, 25, 68]) + FOLLOW_genericTypeParameterList_in_interfaceTypeDeclaration5401 = frozenset([23, 25, 68]) + FOLLOW_interfaceExtendsClause_in_interfaceTypeDeclaration5404 = frozenset([23, 25, 68]) + FOLLOW_interfaceBody_in_interfaceTypeDeclaration5407 = frozenset([1]) + FOLLOW_type_in_typeList5453 = frozenset([1, 11]) + FOLLOW_COMMA_in_typeList5456 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_typeList5459 = frozenset([1, 11]) + FOLLOW_LCURLY_in_classBody5480 = frozenset([7, 23, 25, 42, 44, 53, 55, 57, 60, 61, 65, 67, 70, 72, 77, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 101, 102, 164]) + FOLLOW_classScopeDeclarations_in_classBody5482 = frozenset([7, 23, 25, 42, 44, 53, 55, 57, 60, 61, 65, 67, 70, 72, 77, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 101, 102, 164]) + FOLLOW_RCURLY_in_classBody5485 = frozenset([1]) + FOLLOW_LCURLY_in_interfaceBody5523 = frozenset([7, 25, 42, 44, 53, 55, 57, 60, 61, 65, 67, 70, 72, 77, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 101, 102, 164]) + FOLLOW_interfaceScopeDeclarations_in_interfaceBody5525 = frozenset([7, 25, 42, 44, 53, 55, 57, 60, 61, 65, 67, 70, 72, 77, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 101, 102, 164]) + FOLLOW_RCURLY_in_interfaceBody5528 = frozenset([1]) + FOLLOW_block_in_classScopeDeclarations5566 = frozenset([1]) + FOLLOW_STATIC_in_classScopeDeclarations5595 = frozenset([23]) + FOLLOW_block_in_classScopeDeclarations5597 = frozenset([1]) + FOLLOW_modifierList_in_classScopeDeclarations5620 = frozenset([25, 55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_genericTypeParameterList_in_classScopeDeclarations5634 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_type_in_classScopeDeclarations5653 = frozenset([164]) + FOLLOW_IDENT_in_classScopeDeclarations5655 = frozenset([29]) + FOLLOW_formalParameterList_in_classScopeDeclarations5657 = frozenset([22, 23, 44, 97]) + FOLLOW_arrayDeclaratorList_in_classScopeDeclarations5659 = frozenset([23, 44, 97]) + FOLLOW_throwsClause_in_classScopeDeclarations5662 = frozenset([23, 44]) + FOLLOW_block_in_classScopeDeclarations5666 = frozenset([1]) + FOLLOW_SEMI_in_classScopeDeclarations5670 = frozenset([1]) + FOLLOW_VOID_in_classScopeDeclarations5732 = frozenset([164]) + FOLLOW_IDENT_in_classScopeDeclarations5734 = frozenset([29]) + FOLLOW_formalParameterList_in_classScopeDeclarations5736 = frozenset([23, 44, 97]) + FOLLOW_throwsClause_in_classScopeDeclarations5738 = frozenset([23, 44]) + FOLLOW_block_in_classScopeDeclarations5742 = frozenset([1]) + FOLLOW_SEMI_in_classScopeDeclarations5746 = frozenset([1]) + FOLLOW_IDENT_in_classScopeDeclarations5805 = frozenset([29]) + FOLLOW_formalParameterList_in_classScopeDeclarations5807 = frozenset([23, 97]) + FOLLOW_throwsClause_in_classScopeDeclarations5809 = frozenset([23]) + FOLLOW_block_in_classScopeDeclarations5812 = frozenset([1]) + FOLLOW_type_in_classScopeDeclarations5876 = frozenset([164]) + FOLLOW_classFieldDeclaratorList_in_classScopeDeclarations5878 = frozenset([44]) + FOLLOW_SEMI_in_classScopeDeclarations5880 = frozenset([1]) + FOLLOW_typeDeclaration_in_classScopeDeclarations5925 = frozenset([1]) + FOLLOW_SEMI_in_classScopeDeclarations5935 = frozenset([1]) + FOLLOW_modifierList_in_interfaceScopeDeclarations5955 = frozenset([25, 55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_genericTypeParameterList_in_interfaceScopeDeclarations5969 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_type_in_interfaceScopeDeclarations5988 = frozenset([164]) + FOLLOW_IDENT_in_interfaceScopeDeclarations5990 = frozenset([29]) + FOLLOW_formalParameterList_in_interfaceScopeDeclarations5992 = frozenset([22, 44, 97]) + FOLLOW_arrayDeclaratorList_in_interfaceScopeDeclarations5994 = frozenset([44, 97]) + FOLLOW_throwsClause_in_interfaceScopeDeclarations5997 = frozenset([44]) + FOLLOW_SEMI_in_interfaceScopeDeclarations6000 = frozenset([1]) + FOLLOW_VOID_in_interfaceScopeDeclarations6058 = frozenset([164]) + FOLLOW_IDENT_in_interfaceScopeDeclarations6060 = frozenset([29]) + FOLLOW_formalParameterList_in_interfaceScopeDeclarations6062 = frozenset([44, 97]) + FOLLOW_throwsClause_in_interfaceScopeDeclarations6064 = frozenset([44]) + FOLLOW_SEMI_in_interfaceScopeDeclarations6067 = frozenset([1]) + FOLLOW_type_in_interfaceScopeDeclarations6130 = frozenset([164]) + FOLLOW_interfaceFieldDeclaratorList_in_interfaceScopeDeclarations6132 = frozenset([44]) + FOLLOW_SEMI_in_interfaceScopeDeclarations6134 = frozenset([1]) + FOLLOW_typeDeclaration_in_interfaceScopeDeclarations6179 = frozenset([1]) + FOLLOW_SEMI_in_interfaceScopeDeclarations6189 = frozenset([1]) + FOLLOW_classFieldDeclarator_in_classFieldDeclaratorList6209 = frozenset([1, 11]) + FOLLOW_COMMA_in_classFieldDeclaratorList6212 = frozenset([164]) + FOLLOW_classFieldDeclarator_in_classFieldDeclaratorList6214 = frozenset([1, 11]) + FOLLOW_variableDeclaratorId_in_classFieldDeclarator6253 = frozenset([1, 6]) + FOLLOW_ASSIGN_in_classFieldDeclarator6256 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_variableInitializer_in_classFieldDeclarator6258 = frozenset([1]) + FOLLOW_interfaceFieldDeclarator_in_interfaceFieldDeclaratorList6299 = frozenset([1, 11]) + FOLLOW_COMMA_in_interfaceFieldDeclaratorList6302 = frozenset([164]) + FOLLOW_interfaceFieldDeclarator_in_interfaceFieldDeclaratorList6304 = frozenset([1, 11]) + FOLLOW_variableDeclaratorId_in_interfaceFieldDeclarator6343 = frozenset([6]) + FOLLOW_ASSIGN_in_interfaceFieldDeclarator6345 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_variableInitializer_in_interfaceFieldDeclarator6347 = frozenset([1]) + FOLLOW_IDENT_in_variableDeclaratorId6385 = frozenset([1, 22]) + FOLLOW_arrayDeclaratorList_in_variableDeclaratorId6388 = frozenset([1]) + FOLLOW_arrayInitializer_in_variableInitializer6408 = frozenset([1]) + FOLLOW_expression_in_variableInitializer6418 = frozenset([1]) + FOLLOW_LBRACK_in_arrayDeclarator6437 = frozenset([41]) + FOLLOW_RBRACK_in_arrayDeclarator6439 = frozenset([1]) + FOLLOW_arrayDeclarator_in_arrayDeclaratorList6473 = frozenset([1, 22]) + FOLLOW_LCURLY_in_arrayInitializer6511 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 42, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_variableInitializer_in_arrayInitializer6514 = frozenset([11, 42]) + FOLLOW_COMMA_in_arrayInitializer6517 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_variableInitializer_in_arrayInitializer6519 = frozenset([11, 42]) + FOLLOW_COMMA_in_arrayInitializer6523 = frozenset([42]) + FOLLOW_RCURLY_in_arrayInitializer6528 = frozenset([1]) + FOLLOW_THROWS_in_throwsClause6566 = frozenset([164]) + FOLLOW_qualifiedIdentList_in_throwsClause6568 = frozenset([1]) + FOLLOW_modifier_in_modifierList6605 = frozenset([1, 7, 53, 70, 81, 85, 86, 87, 90, 91, 94, 98, 102]) + FOLLOW_PUBLIC_in_modifier6643 = frozenset([1]) + FOLLOW_PROTECTED_in_modifier6653 = frozenset([1]) + FOLLOW_PRIVATE_in_modifier6663 = frozenset([1]) + FOLLOW_STATIC_in_modifier6673 = frozenset([1]) + FOLLOW_ABSTRACT_in_modifier6683 = frozenset([1]) + FOLLOW_NATIVE_in_modifier6693 = frozenset([1]) + FOLLOW_SYNCHRONIZED_in_modifier6703 = frozenset([1]) + FOLLOW_TRANSIENT_in_modifier6713 = frozenset([1]) + FOLLOW_VOLATILE_in_modifier6723 = frozenset([1]) + FOLLOW_STRICTFP_in_modifier6733 = frozenset([1]) + FOLLOW_localModifier_in_modifier6743 = frozenset([1]) + FOLLOW_localModifier_in_localModifierList6762 = frozenset([1, 7, 53, 70, 81, 85, 86, 87, 90, 91, 94, 98, 102]) + FOLLOW_FINAL_in_localModifier6799 = frozenset([1]) + FOLLOW_annotation_in_localModifier6809 = frozenset([1]) + FOLLOW_simpleType_in_type6828 = frozenset([1]) + FOLLOW_objectType_in_type6838 = frozenset([1]) + FOLLOW_primitiveType_in_simpleType6858 = frozenset([1, 22]) + FOLLOW_arrayDeclaratorList_in_simpleType6860 = frozenset([1]) + FOLLOW_qualifiedTypeIdent_in_objectType6901 = frozenset([1, 22]) + FOLLOW_arrayDeclaratorList_in_objectType6903 = frozenset([1]) + FOLLOW_qualifiedTypeIdentSimplified_in_objectTypeSimplified6943 = frozenset([1, 22]) + FOLLOW_arrayDeclaratorList_in_objectTypeSimplified6945 = frozenset([1]) + FOLLOW_typeIdent_in_qualifiedTypeIdent6985 = frozenset([1, 15]) + FOLLOW_DOT_in_qualifiedTypeIdent6988 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_typeIdent_in_qualifiedTypeIdent6990 = frozenset([1, 15]) + FOLLOW_typeIdentSimplified_in_qualifiedTypeIdentSimplified7029 = frozenset([1, 15]) + FOLLOW_DOT_in_qualifiedTypeIdentSimplified7032 = frozenset([164]) + FOLLOW_typeIdentSimplified_in_qualifiedTypeIdentSimplified7034 = frozenset([1, 15]) + FOLLOW_IDENT_in_typeIdent7073 = frozenset([1, 25]) + FOLLOW_genericTypeArgumentList_in_typeIdent7076 = frozenset([1]) + FOLLOW_IDENT_in_typeIdentSimplified7096 = frozenset([1, 25]) + FOLLOW_genericTypeArgumentListSimplified_in_typeIdentSimplified7099 = frozenset([1]) + FOLLOW_set_in_primitiveType0 = frozenset([1]) + FOLLOW_LESS_THAN_in_genericTypeArgumentList7208 = frozenset([40, 55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_genericTypeArgument_in_genericTypeArgumentList7210 = frozenset([8, 11, 20, 47]) + FOLLOW_COMMA_in_genericTypeArgumentList7213 = frozenset([40, 55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_genericTypeArgument_in_genericTypeArgumentList7215 = frozenset([8, 11, 20, 47]) + FOLLOW_genericTypeListClosing_in_genericTypeArgumentList7219 = frozenset([1]) + FOLLOW_type_in_genericTypeArgument7257 = frozenset([1]) + FOLLOW_QUESTION_in_genericTypeArgument7267 = frozenset([1, 68, 92]) + FOLLOW_genericWildcardBoundType_in_genericTypeArgument7269 = frozenset([1]) + FOLLOW_set_in_genericWildcardBoundType7307 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_genericWildcardBoundType7316 = frozenset([1]) + FOLLOW_LESS_THAN_in_genericTypeArgumentListSimplified7335 = frozenset([40, 55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_genericTypeArgumentSimplified_in_genericTypeArgumentListSimplified7337 = frozenset([8, 11, 20, 47]) + FOLLOW_COMMA_in_genericTypeArgumentListSimplified7340 = frozenset([40, 55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_genericTypeArgumentSimplified_in_genericTypeArgumentListSimplified7342 = frozenset([8, 11, 20, 47]) + FOLLOW_genericTypeListClosing_in_genericTypeArgumentListSimplified7346 = frozenset([1]) + FOLLOW_type_in_genericTypeArgumentSimplified7384 = frozenset([1]) + FOLLOW_QUESTION_in_genericTypeArgumentSimplified7394 = frozenset([1]) + FOLLOW_qualifiedIdentifier_in_qualifiedIdentList7413 = frozenset([1, 11]) + FOLLOW_COMMA_in_qualifiedIdentList7416 = frozenset([164]) + FOLLOW_qualifiedIdentifier_in_qualifiedIdentList7419 = frozenset([1, 11]) + FOLLOW_LPAREN_in_formalParameterList7440 = frozenset([7, 43, 53, 55, 57, 60, 65, 70, 72, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 102, 164]) + FOLLOW_formalParameterStandardDecl_in_formalParameterList7467 = frozenset([11, 43]) + FOLLOW_COMMA_in_formalParameterList7470 = frozenset([7, 53, 55, 57, 60, 65, 70, 72, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 102, 164]) + FOLLOW_formalParameterStandardDecl_in_formalParameterList7472 = frozenset([11, 43]) + FOLLOW_COMMA_in_formalParameterList7477 = frozenset([7, 53, 55, 57, 60, 65, 70, 72, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 102, 164]) + FOLLOW_formalParameterVarArgDecl_in_formalParameterList7479 = frozenset([43]) + FOLLOW_formalParameterVarArgDecl_in_formalParameterList7534 = frozenset([43]) + FOLLOW_RPAREN_in_formalParameterList7609 = frozenset([1]) + FOLLOW_localModifierList_in_formalParameterStandardDecl7628 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_formalParameterStandardDecl7630 = frozenset([164]) + FOLLOW_variableDeclaratorId_in_formalParameterStandardDecl7632 = frozenset([1]) + FOLLOW_localModifierList_in_formalParameterVarArgDecl7672 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_formalParameterVarArgDecl7674 = frozenset([17]) + FOLLOW_ELLIPSIS_in_formalParameterVarArgDecl7676 = frozenset([164]) + FOLLOW_variableDeclaratorId_in_formalParameterVarArgDecl7678 = frozenset([1]) + FOLLOW_IDENT_in_qualifiedIdentifier7722 = frozenset([1, 15]) + FOLLOW_DOT_in_qualifiedIdentifier7765 = frozenset([164]) + FOLLOW_IDENT_in_qualifiedIdentifier7769 = frozenset([1, 15]) + FOLLOW_annotation_in_annotationList7818 = frozenset([1, 7, 53, 70, 81, 85, 86, 87, 90, 91, 94, 98, 102]) + FOLLOW_AT_in_annotation7856 = frozenset([164]) + FOLLOW_qualifiedIdentifier_in_annotation7859 = frozenset([1, 29]) + FOLLOW_annotationInit_in_annotation7861 = frozenset([1]) + FOLLOW_LPAREN_in_annotationInit7881 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 53, 55, 57, 60, 65, 69, 70, 72, 79, 80, 81, 82, 83, 85, 86, 87, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_annotationInitializers_in_annotationInit7883 = frozenset([43]) + FOLLOW_RPAREN_in_annotationInit7885 = frozenset([1]) + FOLLOW_annotationInitializer_in_annotationInitializers7922 = frozenset([1, 11]) + FOLLOW_COMMA_in_annotationInitializers7925 = frozenset([164]) + FOLLOW_annotationInitializer_in_annotationInitializers7927 = frozenset([1, 11]) + FOLLOW_annotationElementValue_in_annotationInitializers7957 = frozenset([1]) + FOLLOW_IDENT_in_annotationInitializer7994 = frozenset([6]) + FOLLOW_ASSIGN_in_annotationInitializer7997 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 53, 55, 57, 60, 65, 69, 70, 72, 79, 80, 81, 82, 83, 85, 86, 87, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_annotationElementValue_in_annotationInitializer8000 = frozenset([1]) + FOLLOW_annotationElementValueExpression_in_annotationElementValue8019 = frozenset([1]) + FOLLOW_annotation_in_annotationElementValue8029 = frozenset([1]) + FOLLOW_annotationElementValueArrayInitializer_in_annotationElementValue8039 = frozenset([1]) + FOLLOW_conditionalExpression_in_annotationElementValueExpression8058 = frozenset([1]) + FOLLOW_LCURLY_in_annotationElementValueArrayInitializer8094 = frozenset([7, 11, 12, 21, 23, 25, 27, 29, 30, 34, 38, 42, 53, 55, 57, 60, 65, 69, 70, 72, 79, 80, 81, 82, 83, 85, 86, 87, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_annotationElementValue_in_annotationElementValueArrayInitializer8097 = frozenset([11, 42]) + FOLLOW_COMMA_in_annotationElementValueArrayInitializer8100 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 53, 55, 57, 60, 65, 69, 70, 72, 79, 80, 81, 82, 83, 85, 86, 87, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_annotationElementValue_in_annotationElementValueArrayInitializer8102 = frozenset([11, 42]) + FOLLOW_COMMA_in_annotationElementValueArrayInitializer8109 = frozenset([42]) + FOLLOW_RCURLY_in_annotationElementValueArrayInitializer8113 = frozenset([1]) + FOLLOW_AT_in_annotationTypeDeclaration8152 = frozenset([77]) + FOLLOW_INTERFACE_in_annotationTypeDeclaration8154 = frozenset([164]) + FOLLOW_IDENT_in_annotationTypeDeclaration8156 = frozenset([23]) + FOLLOW_annotationBody_in_annotationTypeDeclaration8158 = frozenset([1]) + FOLLOW_LCURLY_in_annotationBody8197 = frozenset([7, 42, 53, 55, 57, 60, 61, 65, 67, 70, 72, 77, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 102, 164]) + FOLLOW_annotationScopeDeclarations_in_annotationBody8199 = frozenset([7, 42, 53, 55, 57, 60, 61, 65, 67, 70, 72, 77, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 102, 164]) + FOLLOW_RCURLY_in_annotationBody8202 = frozenset([1]) + FOLLOW_modifierList_in_annotationScopeDeclarations8240 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_annotationScopeDeclarations8242 = frozenset([164]) + FOLLOW_IDENT_in_annotationScopeDeclarations8256 = frozenset([29]) + FOLLOW_LPAREN_in_annotationScopeDeclarations8258 = frozenset([43]) + FOLLOW_RPAREN_in_annotationScopeDeclarations8260 = frozenset([44, 63]) + FOLLOW_annotationDefaultValue_in_annotationScopeDeclarations8262 = frozenset([44]) + FOLLOW_SEMI_in_annotationScopeDeclarations8265 = frozenset([1]) + FOLLOW_classFieldDeclaratorList_in_annotationScopeDeclarations8307 = frozenset([44]) + FOLLOW_SEMI_in_annotationScopeDeclarations8309 = frozenset([1]) + FOLLOW_typeDeclaration_in_annotationScopeDeclarations8354 = frozenset([1]) + FOLLOW_DEFAULT_in_annotationDefaultValue8373 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 53, 55, 57, 60, 65, 69, 70, 72, 79, 80, 81, 82, 83, 85, 86, 87, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_annotationElementValue_in_annotationDefaultValue8376 = frozenset([1]) + FOLLOW_LCURLY_in_block8397 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 42, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_blockStatement_in_block8399 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 42, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_RCURLY_in_block8402 = frozenset([1]) + FOLLOW_localVariableDeclaration_in_blockStatement8440 = frozenset([44]) + FOLLOW_SEMI_in_blockStatement8442 = frozenset([1]) + FOLLOW_typeDeclaration_in_blockStatement8453 = frozenset([1]) + FOLLOW_statement_in_blockStatement8463 = frozenset([1]) + FOLLOW_localModifierList_in_localVariableDeclaration8482 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_localVariableDeclaration8484 = frozenset([164]) + FOLLOW_classFieldDeclaratorList_in_localVariableDeclaration8486 = frozenset([1]) + FOLLOW_block_in_statement8527 = frozenset([1]) + FOLLOW_ASSERT_in_statement8537 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_statement8541 = frozenset([10, 44]) + FOLLOW_COLON_in_statement8555 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_statement8559 = frozenset([44]) + FOLLOW_SEMI_in_statement8561 = frozenset([1]) + FOLLOW_SEMI_in_statement8624 = frozenset([1]) + FOLLOW_IF_in_statement8713 = frozenset([29]) + FOLLOW_parenthesizedExpression_in_statement8715 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_statement_in_statement8719 = frozenset([1, 66]) + FOLLOW_ELSE_in_statement8733 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_statement_in_statement8737 = frozenset([1]) + FOLLOW_FOR_in_statement8900 = frozenset([29]) + FOLLOW_LPAREN_in_statement8902 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 55, 57, 60, 65, 69, 70, 72, 79, 80, 81, 82, 83, 85, 86, 87, 89, 90, 91, 92, 94, 95, 98, 99, 101, 102, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_forInit_in_statement8916 = frozenset([44]) + FOLLOW_SEMI_in_statement8918 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_forCondition_in_statement8920 = frozenset([44]) + FOLLOW_SEMI_in_statement8922 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 43, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_forUpdater_in_statement8924 = frozenset([43]) + FOLLOW_RPAREN_in_statement8926 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_statement_in_statement8928 = frozenset([1]) + FOLLOW_localModifierList_in_statement8962 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_statement8964 = frozenset([164]) + FOLLOW_IDENT_in_statement8966 = frozenset([10]) + FOLLOW_COLON_in_statement8968 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_statement8970 = frozenset([43]) + FOLLOW_RPAREN_in_statement8972 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_statement_in_statement8974 = frozenset([1]) + FOLLOW_WHILE_in_statement9088 = frozenset([29]) + FOLLOW_parenthesizedExpression_in_statement9090 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_statement_in_statement9092 = frozenset([1]) + FOLLOW_DO_in_statement9141 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_statement_in_statement9143 = frozenset([103]) + FOLLOW_WHILE_in_statement9145 = frozenset([29]) + FOLLOW_parenthesizedExpression_in_statement9147 = frozenset([44]) + FOLLOW_SEMI_in_statement9149 = frozenset([1]) + FOLLOW_TRY_in_statement9190 = frozenset([23]) + FOLLOW_block_in_statement9192 = frozenset([59, 71]) + FOLLOW_catches_in_statement9195 = frozenset([1, 59, 71]) + FOLLOW_finallyClause_in_statement9197 = frozenset([1]) + FOLLOW_finallyClause_in_statement9202 = frozenset([1]) + FOLLOW_SWITCH_in_statement9245 = frozenset([29]) + FOLLOW_parenthesizedExpression_in_statement9247 = frozenset([23]) + FOLLOW_LCURLY_in_statement9249 = frozenset([42, 58, 63]) + FOLLOW_switchBlockLabels_in_statement9251 = frozenset([42]) + FOLLOW_RCURLY_in_statement9254 = frozenset([1]) + FOLLOW_SYNCHRONIZED_in_statement9281 = frozenset([29]) + FOLLOW_parenthesizedExpression_in_statement9283 = frozenset([23]) + FOLLOW_block_in_statement9285 = frozenset([1]) + FOLLOW_RETURN_in_statement9331 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_statement9333 = frozenset([44]) + FOLLOW_SEMI_in_statement9336 = frozenset([1]) + FOLLOW_THROW_in_statement9400 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_statement9402 = frozenset([44]) + FOLLOW_SEMI_in_statement9404 = frozenset([1]) + FOLLOW_BREAK_in_statement9469 = frozenset([44, 164]) + FOLLOW_IDENT_in_statement9471 = frozenset([44]) + FOLLOW_SEMI_in_statement9474 = frozenset([1]) + FOLLOW_CONTINUE_in_statement9544 = frozenset([44, 164]) + FOLLOW_IDENT_in_statement9546 = frozenset([44]) + FOLLOW_SEMI_in_statement9549 = frozenset([1]) + FOLLOW_IDENT_in_statement9616 = frozenset([10]) + FOLLOW_COLON_in_statement9618 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_statement_in_statement9620 = frozenset([1]) + FOLLOW_expression_in_statement9687 = frozenset([44]) + FOLLOW_SEMI_in_statement9689 = frozenset([1]) + FOLLOW_SEMI_in_statement9700 = frozenset([1]) + FOLLOW_catchClause_in_catches9720 = frozenset([1, 59]) + FOLLOW_CATCH_in_catchClause9758 = frozenset([29]) + FOLLOW_LPAREN_in_catchClause9761 = frozenset([7, 53, 55, 57, 60, 65, 70, 72, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 102, 164]) + FOLLOW_formalParameterStandardDecl_in_catchClause9764 = frozenset([43]) + FOLLOW_RPAREN_in_catchClause9766 = frozenset([23]) + FOLLOW_block_in_catchClause9769 = frozenset([1]) + FOLLOW_FINALLY_in_finallyClause9788 = frozenset([23]) + FOLLOW_block_in_finallyClause9790 = frozenset([1]) + FOLLOW_switchCaseLabels_in_switchBlockLabels9839 = frozenset([58, 63]) + FOLLOW_switchDefaultLabel_in_switchBlockLabels9842 = frozenset([58]) + FOLLOW_switchCaseLabels_in_switchBlockLabels9847 = frozenset([1]) + FOLLOW_switchCaseLabel_in_switchCaseLabels9893 = frozenset([1, 58]) + FOLLOW_CASE_in_switchCaseLabel9913 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_switchCaseLabel9916 = frozenset([10]) + FOLLOW_COLON_in_switchCaseLabel9918 = frozenset([1, 7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_blockStatement_in_switchCaseLabel9921 = frozenset([1, 7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_DEFAULT_in_switchDefaultLabel9941 = frozenset([10]) + FOLLOW_COLON_in_switchDefaultLabel9944 = frozenset([1, 7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_blockStatement_in_switchDefaultLabel9947 = frozenset([1, 7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_localVariableDeclaration_in_forInit9967 = frozenset([1]) + FOLLOW_expressionList_in_forInit9989 = frozenset([1]) + FOLLOW_expression_in_forCondition10073 = frozenset([1]) + FOLLOW_expressionList_in_forUpdater10111 = frozenset([1]) + FOLLOW_LPAREN_in_parenthesizedExpression10151 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_parenthesizedExpression10153 = frozenset([43]) + FOLLOW_RPAREN_in_parenthesizedExpression10155 = frozenset([1]) + FOLLOW_expression_in_expressionList10192 = frozenset([1, 11]) + FOLLOW_COMMA_in_expressionList10195 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_expressionList10198 = frozenset([1, 11]) + FOLLOW_assignmentExpression_in_expression10219 = frozenset([1]) + FOLLOW_conditionalExpression_in_assignmentExpression10255 = frozenset([1, 5, 6, 9, 14, 31, 33, 37, 39, 46, 48, 50, 52]) + FOLLOW_ASSIGN_in_assignmentExpression10273 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_PLUS_ASSIGN_in_assignmentExpression10292 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_MINUS_ASSIGN_in_assignmentExpression10311 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_STAR_ASSIGN_in_assignmentExpression10330 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_DIV_ASSIGN_in_assignmentExpression10349 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_AND_ASSIGN_in_assignmentExpression10368 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_OR_ASSIGN_in_assignmentExpression10387 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_XOR_ASSIGN_in_assignmentExpression10406 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_MOD_ASSIGN_in_assignmentExpression10425 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_SHIFT_LEFT_ASSIGN_in_assignmentExpression10444 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_SHIFT_RIGHT_ASSIGN_in_assignmentExpression10463 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_BIT_SHIFT_RIGHT_ASSIGN_in_assignmentExpression10482 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_assignmentExpression_in_assignmentExpression10503 = frozenset([1]) + FOLLOW_logicalOrExpression_in_conditionalExpression10524 = frozenset([1, 40]) + FOLLOW_QUESTION_in_conditionalExpression10527 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_assignmentExpression_in_conditionalExpression10530 = frozenset([10]) + FOLLOW_COLON_in_conditionalExpression10532 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_conditionalExpression_in_conditionalExpression10535 = frozenset([1]) + FOLLOW_logicalAndExpression_in_logicalOrExpression10556 = frozenset([1, 28]) + FOLLOW_LOGICAL_OR_in_logicalOrExpression10559 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_logicalAndExpression_in_logicalOrExpression10562 = frozenset([1, 28]) + FOLLOW_inclusiveOrExpression_in_logicalAndExpression10583 = frozenset([1, 26]) + FOLLOW_LOGICAL_AND_in_logicalAndExpression10586 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_inclusiveOrExpression_in_logicalAndExpression10589 = frozenset([1, 26]) + FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression10610 = frozenset([1, 36]) + FOLLOW_OR_in_inclusiveOrExpression10613 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression10616 = frozenset([1, 36]) + FOLLOW_andExpression_in_exclusiveOrExpression10637 = frozenset([1, 51]) + FOLLOW_XOR_in_exclusiveOrExpression10640 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_andExpression_in_exclusiveOrExpression10643 = frozenset([1, 51]) + FOLLOW_equalityExpression_in_andExpression10664 = frozenset([1, 4]) + FOLLOW_AND_in_andExpression10667 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_equalityExpression_in_andExpression10670 = frozenset([1, 4]) + FOLLOW_instanceOfExpression_in_equalityExpression10691 = frozenset([1, 18, 35]) + FOLLOW_EQUAL_in_equalityExpression10709 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_NOT_EQUAL_in_equalityExpression10728 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_instanceOfExpression_in_equalityExpression10757 = frozenset([1, 18, 35]) + FOLLOW_relationalExpression_in_instanceOfExpression10787 = frozenset([1, 76]) + FOLLOW_INSTANCEOF_in_instanceOfExpression10790 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_instanceOfExpression10793 = frozenset([1]) + FOLLOW_shiftExpression_in_relationalExpression10814 = frozenset([1, 19, 20, 24, 25]) + FOLLOW_LESS_OR_EQUAL_in_relationalExpression10832 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_GREATER_OR_EQUAL_in_relationalExpression10851 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_LESS_THAN_in_relationalExpression10870 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_GREATER_THAN_in_relationalExpression10889 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_shiftExpression_in_relationalExpression10918 = frozenset([1, 19, 20, 24, 25]) + FOLLOW_additiveExpression_in_shiftExpression10948 = frozenset([1, 8, 45, 47]) + FOLLOW_BIT_SHIFT_RIGHT_in_shiftExpression10966 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_SHIFT_RIGHT_in_shiftExpression10985 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_SHIFT_LEFT_in_shiftExpression11004 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_additiveExpression_in_shiftExpression11033 = frozenset([1, 8, 45, 47]) + FOLLOW_multiplicativeExpression_in_additiveExpression11063 = frozenset([1, 30, 38]) + FOLLOW_PLUS_in_additiveExpression11081 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_MINUS_in_additiveExpression11100 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_multiplicativeExpression_in_additiveExpression11129 = frozenset([1, 30, 38]) + FOLLOW_unaryExpression_in_multiplicativeExpression11159 = frozenset([1, 13, 32, 49]) + FOLLOW_STAR_in_multiplicativeExpression11177 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_DIV_in_multiplicativeExpression11196 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_MOD_in_multiplicativeExpression11215 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_unaryExpression_in_multiplicativeExpression11244 = frozenset([1, 13, 32, 49]) + FOLLOW_PLUS_in_unaryExpression11274 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_unaryExpression_in_unaryExpression11276 = frozenset([1]) + FOLLOW_MINUS_in_unaryExpression11303 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_unaryExpression_in_unaryExpression11305 = frozenset([1]) + FOLLOW_INC_in_unaryExpression11331 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_postfixedExpression_in_unaryExpression11333 = frozenset([1]) + FOLLOW_DEC_in_unaryExpression11357 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_postfixedExpression_in_unaryExpression11359 = frozenset([1]) + FOLLOW_unaryExpressionNotPlusMinus_in_unaryExpression11383 = frozenset([1]) + FOLLOW_NOT_in_unaryExpressionNotPlusMinus11402 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus11404 = frozenset([1]) + FOLLOW_LOGICAL_NOT_in_unaryExpressionNotPlusMinus11451 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus11453 = frozenset([1]) + FOLLOW_LPAREN_in_unaryExpressionNotPlusMinus11492 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_unaryExpressionNotPlusMinus11494 = frozenset([43]) + FOLLOW_RPAREN_in_unaryExpressionNotPlusMinus11496 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_unaryExpression_in_unaryExpressionNotPlusMinus11498 = frozenset([1]) + FOLLOW_postfixedExpression_in_unaryExpressionNotPlusMinus11533 = frozenset([1]) + FOLLOW_primaryExpression_in_postfixedExpression11565 = frozenset([1, 12, 15, 21, 22]) + FOLLOW_DOT_in_postfixedExpression11627 = frozenset([25, 82, 92, 95, 164]) + FOLLOW_genericTypeArgumentListSimplified_in_postfixedExpression11649 = frozenset([164]) + FOLLOW_IDENT_in_postfixedExpression11731 = frozenset([1, 12, 15, 21, 22, 29]) + FOLLOW_arguments_in_postfixedExpression11809 = frozenset([1, 12, 15, 21, 22]) + FOLLOW_THIS_in_postfixedExpression11883 = frozenset([1, 12, 15, 21, 22]) + FOLLOW_SUPER_in_postfixedExpression11946 = frozenset([29]) + FOLLOW_arguments_in_postfixedExpression11948 = frozenset([1, 12, 15, 21, 22]) + FOLLOW_SUPER_in_postfixedExpression12001 = frozenset([15]) + FOLLOW_DOT_in_postfixedExpression12005 = frozenset([164]) + FOLLOW_IDENT_in_postfixedExpression12007 = frozenset([1, 12, 15, 21, 22, 29]) + FOLLOW_arguments_in_postfixedExpression12074 = frozenset([1, 12, 15, 21, 22]) + FOLLOW_innerNewExpression_in_postfixedExpression12145 = frozenset([1, 12, 15, 21, 22]) + FOLLOW_LBRACK_in_postfixedExpression12202 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_postfixedExpression12204 = frozenset([41]) + FOLLOW_RBRACK_in_postfixedExpression12206 = frozenset([1, 12, 15, 21, 22]) + FOLLOW_INC_in_postfixedExpression12267 = frozenset([1]) + FOLLOW_DEC_in_postfixedExpression12291 = frozenset([1]) + FOLLOW_parenthesizedExpression_in_primaryExpression12331 = frozenset([1]) + FOLLOW_literal_in_primaryExpression12341 = frozenset([1]) + FOLLOW_newExpression_in_primaryExpression12351 = frozenset([1]) + FOLLOW_qualifiedIdentExpression_in_primaryExpression12361 = frozenset([1]) + FOLLOW_genericTypeArgumentListSimplified_in_primaryExpression12371 = frozenset([92, 95, 164]) + FOLLOW_SUPER_in_primaryExpression12385 = frozenset([15, 29]) + FOLLOW_arguments_in_primaryExpression12403 = frozenset([1]) + FOLLOW_DOT_in_primaryExpression12463 = frozenset([164]) + FOLLOW_IDENT_in_primaryExpression12465 = frozenset([29]) + FOLLOW_arguments_in_primaryExpression12467 = frozenset([1]) + FOLLOW_IDENT_in_primaryExpression12534 = frozenset([29]) + FOLLOW_arguments_in_primaryExpression12536 = frozenset([1]) + FOLLOW_THIS_in_primaryExpression12591 = frozenset([29]) + FOLLOW_arguments_in_primaryExpression12593 = frozenset([1]) + FOLLOW_THIS_in_primaryExpression12658 = frozenset([1, 29]) + FOLLOW_arguments_in_primaryExpression12726 = frozenset([1]) + FOLLOW_SUPER_in_primaryExpression12791 = frozenset([29]) + FOLLOW_arguments_in_primaryExpression12793 = frozenset([1]) + FOLLOW_SUPER_in_primaryExpression12849 = frozenset([15]) + FOLLOW_DOT_in_primaryExpression12851 = frozenset([164]) + FOLLOW_IDENT_in_primaryExpression12853 = frozenset([1, 29]) + FOLLOW_arguments_in_primaryExpression12877 = frozenset([1]) + FOLLOW_primitiveType_in_primaryExpression13019 = frozenset([15, 22]) + FOLLOW_arrayDeclarator_in_primaryExpression13078 = frozenset([15, 22]) + FOLLOW_DOT_in_primaryExpression13137 = frozenset([61]) + FOLLOW_CLASS_in_primaryExpression13139 = frozenset([1]) + FOLLOW_VOID_in_primaryExpression13199 = frozenset([15]) + FOLLOW_DOT_in_primaryExpression13201 = frozenset([61]) + FOLLOW_CLASS_in_primaryExpression13203 = frozenset([1]) + FOLLOW_qualifiedIdentifier_in_qualifiedIdentExpression13279 = frozenset([1, 15, 22, 29]) + FOLLOW_arrayDeclarator_in_qualifiedIdentExpression13349 = frozenset([15, 22]) + FOLLOW_DOT_in_qualifiedIdentExpression13416 = frozenset([61]) + FOLLOW_CLASS_in_qualifiedIdentExpression13418 = frozenset([1]) + FOLLOW_arguments_in_qualifiedIdentExpression13488 = frozenset([1]) + FOLLOW_DOT_in_qualifiedIdentExpression13549 = frozenset([25, 61, 82, 92, 95, 164]) + FOLLOW_CLASS_in_qualifiedIdentExpression13567 = frozenset([1]) + FOLLOW_genericTypeArgumentListSimplified_in_qualifiedIdentExpression13630 = frozenset([92, 164]) + FOLLOW_SUPER_in_qualifiedIdentExpression13654 = frozenset([29]) + FOLLOW_arguments_in_qualifiedIdentExpression13656 = frozenset([1]) + FOLLOW_SUPER_in_qualifiedIdentExpression13706 = frozenset([15]) + FOLLOW_DOT_in_qualifiedIdentExpression13710 = frozenset([164]) + FOLLOW_IDENT_in_qualifiedIdentExpression13712 = frozenset([29]) + FOLLOW_arguments_in_qualifiedIdentExpression13714 = frozenset([1]) + FOLLOW_IDENT_in_qualifiedIdentExpression13764 = frozenset([29]) + FOLLOW_arguments_in_qualifiedIdentExpression13766 = frozenset([1]) + FOLLOW_THIS_in_qualifiedIdentExpression13841 = frozenset([1]) + FOLLOW_SUPER_in_qualifiedIdentExpression13907 = frozenset([29]) + FOLLOW_arguments_in_qualifiedIdentExpression13909 = frozenset([1]) + FOLLOW_innerNewExpression_in_qualifiedIdentExpression13957 = frozenset([1]) + FOLLOW_NEW_in_newExpression14033 = frozenset([25, 55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_primitiveType_in_newExpression14047 = frozenset([22]) + FOLLOW_newArrayConstruction_in_newExpression14049 = frozenset([1]) + FOLLOW_genericTypeArgumentListSimplified_in_newExpression14093 = frozenset([25, 55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_qualifiedTypeIdentSimplified_in_newExpression14096 = frozenset([22, 29]) + FOLLOW_newArrayConstruction_in_newExpression14114 = frozenset([1]) + FOLLOW_arguments_in_newExpression14179 = frozenset([1, 23, 25, 68, 75]) + FOLLOW_classBody_in_newExpression14181 = frozenset([1]) + FOLLOW_NEW_in_innerNewExpression14276 = frozenset([25, 164]) + FOLLOW_genericTypeArgumentListSimplified_in_innerNewExpression14278 = frozenset([164]) + FOLLOW_IDENT_in_innerNewExpression14281 = frozenset([29]) + FOLLOW_arguments_in_innerNewExpression14283 = frozenset([1, 23, 25, 68, 75]) + FOLLOW_classBody_in_innerNewExpression14285 = frozenset([1]) + FOLLOW_arrayDeclaratorList_in_newArrayConstruction14331 = frozenset([23]) + FOLLOW_arrayInitializer_in_newArrayConstruction14333 = frozenset([1]) + FOLLOW_LBRACK_in_newArrayConstruction14343 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_newArrayConstruction14346 = frozenset([41]) + FOLLOW_RBRACK_in_newArrayConstruction14348 = frozenset([1, 22]) + FOLLOW_LBRACK_in_newArrayConstruction14352 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_newArrayConstruction14355 = frozenset([41]) + FOLLOW_RBRACK_in_newArrayConstruction14357 = frozenset([1, 22]) + FOLLOW_arrayDeclaratorList_in_newArrayConstruction14362 = frozenset([1]) + FOLLOW_LPAREN_in_arguments14382 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 43, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expressionList_in_arguments14384 = frozenset([43]) + FOLLOW_RPAREN_in_arguments14387 = frozenset([1]) + FOLLOW_set_in_literal0 = frozenset([1]) + FOLLOW_GREATER_THAN_in_synpred14_Java5045 = frozenset([1]) + FOLLOW_SHIFT_RIGHT_in_synpred15_Java5055 = frozenset([1]) + FOLLOW_BIT_SHIFT_RIGHT_in_synpred16_Java5065 = frozenset([1]) + FOLLOW_bound_in_synpred17_Java5095 = frozenset([1]) + FOLLOW_STATIC_in_synpred32_Java5595 = frozenset([23]) + FOLLOW_block_in_synpred32_Java5597 = frozenset([1]) + FOLLOW_genericTypeParameterList_in_synpred42_Java5634 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_type_in_synpred42_Java5653 = frozenset([164]) + FOLLOW_IDENT_in_synpred42_Java5655 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred42_Java5657 = frozenset([22, 23, 44, 97]) + FOLLOW_arrayDeclaratorList_in_synpred42_Java5659 = frozenset([23, 44, 97]) + FOLLOW_throwsClause_in_synpred42_Java5662 = frozenset([23, 44]) + FOLLOW_block_in_synpred42_Java5666 = frozenset([1]) + FOLLOW_SEMI_in_synpred42_Java5670 = frozenset([1]) + FOLLOW_VOID_in_synpred42_Java5732 = frozenset([164]) + FOLLOW_IDENT_in_synpred42_Java5734 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred42_Java5736 = frozenset([23, 44, 97]) + FOLLOW_throwsClause_in_synpred42_Java5738 = frozenset([23, 44]) + FOLLOW_block_in_synpred42_Java5742 = frozenset([1]) + FOLLOW_SEMI_in_synpred42_Java5746 = frozenset([1]) + FOLLOW_IDENT_in_synpred42_Java5805 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred42_Java5807 = frozenset([23, 97]) + FOLLOW_throwsClause_in_synpred42_Java5809 = frozenset([23]) + FOLLOW_block_in_synpred42_Java5812 = frozenset([1]) + FOLLOW_modifierList_in_synpred43_Java5620 = frozenset([25, 55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_genericTypeParameterList_in_synpred43_Java5634 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_type_in_synpred43_Java5653 = frozenset([164]) + FOLLOW_IDENT_in_synpred43_Java5655 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred43_Java5657 = frozenset([22, 23, 44, 97]) + FOLLOW_arrayDeclaratorList_in_synpred43_Java5659 = frozenset([23, 44, 97]) + FOLLOW_throwsClause_in_synpred43_Java5662 = frozenset([23, 44]) + FOLLOW_block_in_synpred43_Java5666 = frozenset([1]) + FOLLOW_SEMI_in_synpred43_Java5670 = frozenset([1]) + FOLLOW_VOID_in_synpred43_Java5732 = frozenset([164]) + FOLLOW_IDENT_in_synpred43_Java5734 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred43_Java5736 = frozenset([23, 44, 97]) + FOLLOW_throwsClause_in_synpred43_Java5738 = frozenset([23, 44]) + FOLLOW_block_in_synpred43_Java5742 = frozenset([1]) + FOLLOW_SEMI_in_synpred43_Java5746 = frozenset([1]) + FOLLOW_IDENT_in_synpred43_Java5805 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred43_Java5807 = frozenset([23, 97]) + FOLLOW_throwsClause_in_synpred43_Java5809 = frozenset([23]) + FOLLOW_block_in_synpred43_Java5812 = frozenset([1]) + FOLLOW_type_in_synpred43_Java5876 = frozenset([164]) + FOLLOW_classFieldDeclaratorList_in_synpred43_Java5878 = frozenset([44]) + FOLLOW_SEMI_in_synpred43_Java5880 = frozenset([1]) + FOLLOW_typeDeclaration_in_synpred44_Java5925 = frozenset([1]) + FOLLOW_genericTypeParameterList_in_synpred50_Java5969 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_type_in_synpred50_Java5988 = frozenset([164]) + FOLLOW_IDENT_in_synpred50_Java5990 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred50_Java5992 = frozenset([22, 44, 97]) + FOLLOW_arrayDeclaratorList_in_synpred50_Java5994 = frozenset([44, 97]) + FOLLOW_throwsClause_in_synpred50_Java5997 = frozenset([44]) + FOLLOW_SEMI_in_synpred50_Java6000 = frozenset([1]) + FOLLOW_VOID_in_synpred50_Java6058 = frozenset([164]) + FOLLOW_IDENT_in_synpred50_Java6060 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred50_Java6062 = frozenset([44, 97]) + FOLLOW_throwsClause_in_synpred50_Java6064 = frozenset([44]) + FOLLOW_SEMI_in_synpred50_Java6067 = frozenset([1]) + FOLLOW_modifierList_in_synpred51_Java5955 = frozenset([25, 55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_genericTypeParameterList_in_synpred51_Java5969 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 101, 164]) + FOLLOW_type_in_synpred51_Java5988 = frozenset([164]) + FOLLOW_IDENT_in_synpred51_Java5990 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred51_Java5992 = frozenset([22, 44, 97]) + FOLLOW_arrayDeclaratorList_in_synpred51_Java5994 = frozenset([44, 97]) + FOLLOW_throwsClause_in_synpred51_Java5997 = frozenset([44]) + FOLLOW_SEMI_in_synpred51_Java6000 = frozenset([1]) + FOLLOW_VOID_in_synpred51_Java6058 = frozenset([164]) + FOLLOW_IDENT_in_synpred51_Java6060 = frozenset([29]) + FOLLOW_formalParameterList_in_synpred51_Java6062 = frozenset([44, 97]) + FOLLOW_throwsClause_in_synpred51_Java6064 = frozenset([44]) + FOLLOW_SEMI_in_synpred51_Java6067 = frozenset([1]) + FOLLOW_type_in_synpred51_Java6130 = frozenset([164]) + FOLLOW_interfaceFieldDeclaratorList_in_synpred51_Java6132 = frozenset([44]) + FOLLOW_SEMI_in_synpred51_Java6134 = frozenset([1]) + FOLLOW_typeDeclaration_in_synpred52_Java6179 = frozenset([1]) + FOLLOW_arrayDeclarator_in_synpred58_Java6473 = frozenset([1]) + FOLLOW_arrayDeclaratorList_in_synpred76_Java6860 = frozenset([1]) + FOLLOW_arrayDeclaratorList_in_synpred77_Java6903 = frozenset([1]) + FOLLOW_DOT_in_synpred79_Java6988 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_typeIdent_in_synpred79_Java6990 = frozenset([1]) + FOLLOW_COMMA_in_synpred90_Java7213 = frozenset([40, 55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_genericTypeArgument_in_synpred90_Java7215 = frozenset([1]) + FOLLOW_genericWildcardBoundType_in_synpred92_Java7269 = frozenset([1]) + FOLLOW_COMMA_in_synpred97_Java7470 = frozenset([7, 53, 55, 57, 60, 65, 70, 72, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 102, 164]) + FOLLOW_formalParameterStandardDecl_in_synpred97_Java7472 = frozenset([1]) + FOLLOW_formalParameterStandardDecl_in_synpred99_Java7467 = frozenset([1, 11]) + FOLLOW_COMMA_in_synpred99_Java7470 = frozenset([7, 53, 55, 57, 60, 65, 70, 72, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 102, 164]) + FOLLOW_formalParameterStandardDecl_in_synpred99_Java7472 = frozenset([1, 11]) + FOLLOW_COMMA_in_synpred99_Java7477 = frozenset([7, 53, 55, 57, 60, 65, 70, 72, 79, 80, 81, 85, 86, 87, 89, 90, 91, 94, 98, 102, 164]) + FOLLOW_formalParameterVarArgDecl_in_synpred99_Java7479 = frozenset([1]) + FOLLOW_formalParameterVarArgDecl_in_synpred100_Java7534 = frozenset([1]) + FOLLOW_DOT_in_synpred101_Java7765 = frozenset([164]) + FOLLOW_IDENT_in_synpred101_Java7769 = frozenset([1]) + FOLLOW_annotation_in_synpred102_Java7818 = frozenset([1]) + FOLLOW_modifierList_in_synpred114_Java8240 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_synpred114_Java8242 = frozenset([164]) + FOLLOW_IDENT_in_synpred114_Java8256 = frozenset([29]) + FOLLOW_LPAREN_in_synpred114_Java8258 = frozenset([43]) + FOLLOW_RPAREN_in_synpred114_Java8260 = frozenset([44, 63]) + FOLLOW_annotationDefaultValue_in_synpred114_Java8262 = frozenset([44]) + FOLLOW_SEMI_in_synpred114_Java8265 = frozenset([1]) + FOLLOW_classFieldDeclaratorList_in_synpred114_Java8307 = frozenset([44]) + FOLLOW_SEMI_in_synpred114_Java8309 = frozenset([1]) + FOLLOW_localVariableDeclaration_in_synpred116_Java8440 = frozenset([44]) + FOLLOW_SEMI_in_synpred116_Java8442 = frozenset([1]) + FOLLOW_typeDeclaration_in_synpred117_Java8453 = frozenset([1]) + FOLLOW_ELSE_in_synpred121_Java8733 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_statement_in_synpred121_Java8737 = frozenset([1]) + FOLLOW_forInit_in_synpred123_Java8916 = frozenset([44]) + FOLLOW_SEMI_in_synpred123_Java8918 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_forCondition_in_synpred123_Java8920 = frozenset([44]) + FOLLOW_SEMI_in_synpred123_Java8922 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 43, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_forUpdater_in_synpred123_Java8924 = frozenset([43]) + FOLLOW_RPAREN_in_synpred123_Java8926 = frozenset([7, 12, 21, 23, 25, 27, 29, 30, 34, 38, 44, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 67, 69, 70, 72, 73, 74, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_statement_in_synpred123_Java8928 = frozenset([1]) + FOLLOW_switchBlockLabels_in_synpred130_Java9251 = frozenset([1]) + FOLLOW_switchCaseLabels_in_synpred143_Java9839 = frozenset([1]) + FOLLOW_switchCaseLabels_in_synpred145_Java9847 = frozenset([1]) + FOLLOW_switchCaseLabel_in_synpred146_Java9893 = frozenset([1]) + FOLLOW_localVariableDeclaration_in_synpred149_Java9967 = frozenset([1]) + FOLLOW_expressionList_in_synpred150_Java9989 = frozenset([1]) + FOLLOW_LPAREN_in_synpred193_Java11492 = frozenset([55, 57, 60, 65, 72, 79, 80, 89, 164]) + FOLLOW_type_in_synpred193_Java11494 = frozenset([43]) + FOLLOW_RPAREN_in_synpred193_Java11496 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_unaryExpression_in_synpred193_Java11498 = frozenset([1]) + FOLLOW_arrayDeclarator_in_synpred221_Java13349 = frozenset([15, 22]) + FOLLOW_DOT_in_synpred221_Java13416 = frozenset([61]) + FOLLOW_CLASS_in_synpred221_Java13418 = frozenset([1]) + FOLLOW_DOT_in_synpred229_Java13549 = frozenset([25, 61, 82, 92, 95, 164]) + FOLLOW_CLASS_in_synpred229_Java13567 = frozenset([1]) + FOLLOW_genericTypeArgumentListSimplified_in_synpred229_Java13630 = frozenset([92, 164]) + FOLLOW_SUPER_in_synpred229_Java13654 = frozenset([29]) + FOLLOW_arguments_in_synpred229_Java13656 = frozenset([1]) + FOLLOW_SUPER_in_synpred229_Java13706 = frozenset([15]) + FOLLOW_DOT_in_synpred229_Java13710 = frozenset([164]) + FOLLOW_IDENT_in_synpred229_Java13712 = frozenset([29]) + FOLLOW_arguments_in_synpred229_Java13714 = frozenset([1]) + FOLLOW_IDENT_in_synpred229_Java13764 = frozenset([29]) + FOLLOW_arguments_in_synpred229_Java13766 = frozenset([1]) + FOLLOW_THIS_in_synpred229_Java13841 = frozenset([1]) + FOLLOW_SUPER_in_synpred229_Java13907 = frozenset([29]) + FOLLOW_arguments_in_synpred229_Java13909 = frozenset([1]) + FOLLOW_innerNewExpression_in_synpred229_Java13957 = frozenset([1]) + FOLLOW_LBRACK_in_synpred237_Java14352 = frozenset([12, 21, 23, 25, 27, 29, 30, 34, 38, 55, 57, 60, 65, 69, 72, 79, 80, 82, 83, 89, 92, 95, 99, 101, 164, 165, 166, 167, 168, 169, 170]) + FOLLOW_expression_in_synpred237_Java14355 = frozenset([41]) + FOLLOW_RBRACK_in_synpred237_Java14357 = frozenset([1]) + + + +def main(argv, stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stderr): + from antlr4.main import ParserMain + main = ParserMain("JavaLexer", JavaParser) + main.stdin = stdin + main.stdout = stdout + main.stderr = stderr + main.execute(argv) + + +if __name__ == '__main__': + main(sys.argv) diff --git a/build/lib/java2python/lang/__init__.py b/build/lib/java2python/lang/__init__.py new file mode 100644 index 0000000..6e37576 --- /dev/null +++ b/build/lib/java2python/lang/__init__.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.lang -> package marker +# +# Clients should import values from this module instead of our submodules. + +from java2python.lang.JavaLexer import JavaLexer as Lexer +from java2python.lang.JavaParser import JavaParser as Parser +from java2python.lang.base import StringStream, TokenStream, TreeAdaptor, tokens diff --git a/build/lib/java2python/lang/base.py b/build/lib/java2python/lang/base.py new file mode 100644 index 0000000..40d67a6 --- /dev/null +++ b/build/lib/java2python/lang/base.py @@ -0,0 +1,269 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.lang.base -> lexer and parser support classes. +# +# This module provides the following: +# +# * `Tokens` +# +# This class is used to create the single `token` instance in this +# module. It is used to map between parser tokens and their ids and +# vice-versa. +# +# * `TreeAdaptor` +# +# This class is used by `java2python.compiler.tool`, where the +# `buildAST` function associates an instance of it to a parser. The +# `TreeAdaptor` class creates `LocalTree` instances. +# +# * `LocalTree` +# +# This class provides a slew of extra utility methods that are useful +# when inspecting and printing tree nodes. +# + + +# ANTLR notes: +# +# recognizers: lexer, parser, treeparser +# streams: string, file name, file handle +# +# Parsers use TokenStreams (CommonTokenStream or TokenRewriteStream) +# +# Tree parsers use TreeNodeStream (CommonTreeNodeStream) +# +# Lexers emit Token objects (buffered in TokenStream objects) +# +# Parsers build trees if their output is AST. +# +# token types: CommonToken and ClassicToken. Our tree adaptor +# creates LocalTree instances instead. +# +# Tree (CommonTree) wraps Token objects. We provide extra functionality via +# the LocalTree class. +# +# TreeAdaptor (CommonTreeAdaptor) is used by the parser to create +# Tree objects. Our adaptor, TreeAdaptor, creates the LocalTree +# instances. +# + +from io import StringIO + +from antlr4 import ANTLRStringStream as StringStream, CommonTokenStream as TokenStream +from antlr4.tree import CommonTreeAdaptor, CommonTree + +from java2python.lib import colors + + +class Tokens(object): + """ Tokens -> simplifies token id-name and name-id mapping. """ + + def __init__(self): + self.cache, self.parserModule = {}, None + + def __getattr__(self, name): + """ tokenname -> tokenvalue """ + return getattr(self.module, name) + + @property + def commentTypes(self): + """ Well-known comment types. """ + mod = self.module + return (mod.COMMENT, mod.LINE_COMMENT, mod.JAVADOC_COMMENT, ) + + @property + def map(self): + """ (tokentype, tokenname) mapping as a dictionary """ + cache, module = self.cache, self.module + if cache: + return cache + mapping = [(getattr(module, k, None), k) for k in module.tokenNames] + mapping = [(k, v) for k, v in mapping if k is not None] + cache.update(mapping) + return cache + + @property + def methodTypes(self): + """ Well-known method types. """ + mod = self.module + return (mod.VOID_METHOD_DECL, mod.FUNCTION_METHOD_DECL, ) + + @property + def primitiveTypeNames(self): + """ Type name of well-known primitive types """ + return ('bool', 'str', 'int', 'long', 'float', ) + + @property + def module(self): + """ Provides lazy import to the parser module. """ + module = self.parserModule + if module: + return module + import java2python.lang.JavaParser as module + self.parserModule = module + return module + + @staticmethod + def title(name): + """ Returns a nice title given a token type name. """ + return ''.join(part.title() for part in name.split('_')) + + +## sometimes you really do only need one. +tokens = Tokens() + + +class TreeAdaptor(CommonTreeAdaptor): + """ TreeAdaptor -> defered tree node creator (for parsers). """ + + def __init__(self, lexer, parser): + # CommonTreeAdaptor doesn't need to be __init__'ed + self.lexer, self.parser = lexer, parser + + def createWithPayload(self, payload): + """ Returns a new tree for the calling parser. """ + return LocalTree(payload, self.lexer, self.parser) + + +class LocalTree(CommonTree): + """ LocalTree -> like CommonTree, but with more stuff. """ + colorTypeMap = { + 'CLASS' : colors.green, + 'JAVA_SOURCE' : colors.green, + 'VOID_METHOD_DECL' : colors.green, + 'IDENT' : colors.yellow, + 'TYPE' : colors.magenta, + 'EXPR' : colors.blue, + 'TRUE' : colors.yellow, + 'FALSE' : colors.yellow, + 'NULL' : colors.yellow, + } + + def __init__(self, payload, lexer=None, parser=None): + super(LocalTree, self).__init__(payload) + self.lexer, self.parser = lexer, parser + + def childrenOfType(self, type): + """ Returns a generator yielding children of this tree of the given type. """ + return (c for c in self.children if c.type==type) + + def colorType(self, tokenType): + """ Returns a color suitable for the given token type. """ + return self.colorTypeMap.get(tokenType, colors.white)(tokenType) + + def colorText(self, tokenType, tokenText): + """ Returns a colorized string from the given token type and text. """ + return self.colorTypeMap.get(tokenType, colors.white)(tokenText) + + def colorComments(self, token): + """ Formats, colors, and returns the comment text from the given token. """ + ttyp = tokens.map.get(token.type) + text = token.text.replace('\n', '\\n').replace('\r', '\\r').replace('\t', '\\t') + item = '{0} [{1}:{2}] {3}'.format(ttyp, token.start, token.stop, text) + yield colors.black(item) + + def dump(self, fd, level=0): + """ Writes a debug representation of this tree to the given file. """ + extras = lambda x, y:x and (x != y) + seen, nform = set(), '{0}{1}{2}{3}' + def innerDump(root, offset): + token, indent = root.token, ' ' * offset + start, stop = root.tokenStartIndex, root.tokenStopIndex + idxes, ttyp = '', tokens.map.get(token.type, '?') + line = token.line + if start and stop and start == stop: + idxes = 'start={}'.format(start) + elif start and stop: + idxes = 'start={}, stop={}'.format(start, stop) + if line: + idxes = 'line={}{}{}'.format(line, ', ' if idxes else '', idxes) + idxes = ' [{}]'.format(idxes) if idxes else '' + idxes = colors.black(idxes) + args = [indent, self.colorType(ttyp), '', idxes, ''] + if extras(token.text, ttyp): + args[2] = ' ' + self.colorText(ttyp, token.text) + for com in self.selectComments(start, seen): + for line in self.colorComments(com): + print('{0}{1}'.format(indent, line), file=fd) + print(nform.format(*args), file=fd) + for child in root.getChildren(): + innerDump(child, offset+1) + for com in self.selectComments(root.tokenStopIndex, seen): + for line in self.colorComments(com): + print('{0}{1}'.format(indent, line), file=fd) + innerDump(self, level) + + def dumps(self, level=0): + """ Dump this token to a string. """ + fd = StringIO() + self.dump(fd, level) + return fd.getvalue() + + def dupNode(self): + """ Called by the parser to create a duplicate of this tree. """ + get = lambda v:getattr(self, v, None) + return LocalTree(self, get('lexer'), get('parser')) + + def findChildren(self, pred=lambda c:True): + """ Depth-first search that yields nodes meeting the predicate. """ + for child in self.children: + if pred(child): + yield child + for sub in child.findChildren(pred): + yield sub + + def findChildrenOfType(self, type): + """ Depth-first search that yields nodes of the given type. """ + return self.findChildren(lambda c:c.type==type) + + def firstChild(self, default=None): + """ Returns the first child of this tree or the default. """ + try: + return self.children[0] + except (IndexError, ): + return default + + def firstChildOfType(self, type, default=None): + """ Returns the first child of this tree that matches the given type. """ + for child in self.children: + if child.type == type: + return child + return default + + @property + def isJavaSource(self): + """ True if this tree is the outer most type. """ + return self.token.type == tokens.JAVA_SOURCE + + @property + def parentType(self): + """ Returns the type of the parent tree. """ + return self.parent.type + + def parents(self, pred=lambda v:True): + """ Yield each parent in the family tree. """ + while self: + if pred(self): + yield self + self = self.parent + + @property + def parserTokens(self): + """ Returns the sequence of tokens used to create this tree. """ + return self.parser.input.tokens[self.tokenStartIndex:self.tokenStopIndex] + + def selectComments(self, stop, memo): + """ Returns the comment tokens for this tree up to the given index. """ + pred = lambda k:k.type in tokens.commentTypes and k.index not in memo + ctoks = [t for t in self.parser.input.tokens[0:stop] if pred(t)] + memo.update(t.index for t in ctoks) + return ctoks + + @property + def withinExpr(self): + """ True if this tree is contained within an expression. """ + self = getattr(self.parent, 'parent', None) # skip first expr + while self: + if self.type in (tokens.EXPR, ): + return True + self = self.parent diff --git a/build/lib/java2python/lang/selector.py b/build/lib/java2python/lang/selector.py new file mode 100644 index 0000000..d277c20 --- /dev/null +++ b/build/lib/java2python/lang/selector.py @@ -0,0 +1,241 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.lang.selector -> declarative AST node selection +# +# This module provides classes for simple AST node selection that can be +# easily combined to form complex, declarative rules for retrieving AST +# nodes. +# +# The classes are similar to CSS selectors, with a nod to Python parsing +# libraries like LEPL and PyParsing. At the moment, only a few very +# basic selector types are implemented, but those that are here already +# provide all of the functionality necessary for use within the package. +# +# Projects using java2python should regard this subpackage as +# experimental. While the interfaces are not expected to change, the +# semantics may. Use with caution. + +from java2python.lang import tokens + + +class Selector(object): + """ Base class for concrete selectors; provides operator methods. """ + + def __add__(self, other): + """ E + F + + Like CSS "E + F": an F element immediately preceded by an E element + """ + return AdjacentSibling(self, other) + + def __and__(self, other): + """ E & F + + Like CSS "E F": an F element descendant of an E element + """ + return Descendant(self, other) + + def __call__(self, *args, **kwds): + """ Subclasses must implement. """ + raise NotImplementedError('Selector class cannot be called.') + + def __getitem__(self, key): + """ E[n] + + Like CSS "E:nth-child(n)": an E element, the n-th child of its parent + """ + return Nth(self, key) + + def __gt__(self, other): + """ E > F + + Like CSS: "E > F": an F element child of an E element + """ + return Child(self, other) + + def __div__(self, other): + """ E / F + + Produces a AnySibling. + """ + return AnySibling(self, other) + + def walk(self, tree): + """ Select items from the tree and from the tree children. """ + for item in self(tree): + yield item + for child in tree.children: + for item in self.walk(child): + yield item + + +class Token(Selector): + """ Token(...) -> select tokens by matching attributes. + + Token is the most generic and flexible Selector; using it, + arbitrary nodes of any type, line number, position, and/or text + can be selected. + + Calling Token() without any keywords is equivalent to: + + Token(channel=None, index=None, input=None, line=None, + start=None, stop=None, text=None, type=None) + + Note that the value of each keyword can be a constant or a + callable. When callables are specified, they are passed a the + token and should return a bool. + """ + + def __init__(self, **attrs): + self.attrs = attrs + ## we support strings so that the client can refer to the + ## token name that way instead of via lookup or worse, integer. + if isinstance(attrs.get('type'), str): + self.attrs['type'] = getattr(tokens, attrs.get('type')) + + def __call__(self, tree): + items = list(self.attrs.items()) + token = tree.token + + def match_or_call(k, v): + if callable(v): + return v(token) + return getattr(token, k)==v + + if all(match_or_call(k, v) for k, v in items if v is not None): + yield tree + + def __str__(self): + items = list(self.attrs.items()) + keys = ('{}={}'.format(k, v) for k, v in items if v is not None) + return 'Token({})'.format(', '.join(keys)) + + +class Nth(Selector): + """ E[n] -> match any slice n of E + + Similar to the :nth-child pseudo selector in CSS, but without the + support for keywords like 'odd', 'even', etc. + """ + def __init__(self, e, key): + self.e, self.key = e, key + + def __call__(self, tree): + for etree in self.e(tree): + try: + matches = tree.children[self.key] + except (IndexError, ): + return + if not isinstance(matches, list): + matches = [matches] + for child in matches: + yield child + + def __str__(self): + return 'Nth({0})[{1}]'.format(self.e, self.key) + + +class Child(Selector): + """ E > F select any F that is a child of E """ + + def __init__(self, e, f): + self.e, self.f = e, f + + def __call__(self, tree): + for ftree in self.f(tree): + for etree in self.e(tree.parent): + yield ftree + + def __str__(self): + return 'Child({0} > {1})'.format(self.e, self.f) + + +class Type(Selector): + """ Type(T) select any token of type T + + Similar to the type selector in CSS. + """ + def __init__(self, key, value=None): + self.key = key if isinstance(key, int) else getattr(tokens, key) + self.value = value + + def __call__(self, tree): + if tree.token.type == self.key: + if self.value is None or self.value == tree.token.text: + yield tree + + def __str__(self): + val = '' if self.value is None else '={0}'.format(self.value) + return 'Type({0}{1}:{2})'.format(tokens.map[self.key], val, self.key) + + +class Star(Selector): + """ * select any + + Similar to the * selector in CSS. + """ + def __call__(self, tree): + yield tree + + def __str__(self): + return 'Star(*)' + + +class Descendant(Selector): + """ E & F select any F that is a descendant of E """ + + def __init__(self, e, f): + self.e, self.f = e, f + + def __call__(self, tree): + for ftree in self.f(tree): + root, ftree = ftree, ftree.parent + while ftree: + for etree in self.e(ftree): + yield root + ftree = ftree.parent + + def __str__(self): + return 'Descendant({0} & {1})'.format(self.e, self.f) + + +class AdjacentSibling(Selector): + """ E + F select any F immediately preceded by a sibling E """ + + def __init__(self, e, f): + self.e, self.f = e, f + + def __call__(self, node): + if not node.parent: + return + for ftree in self.f(node): + index = node.parent.children.index(ftree) + if not index: + return + previous = node.parent.children[index-1] + for child in self.e(previous): + yield ftree + + def __str__(self): + return 'AdjacentSibling({} + {})'.format(self.e, self.f) + + +class AnySibling(Selector): + """ E / F select any F preceded by a sibling E """ + + def __init__(self, e, f): + self.e, self.f = e, f + + def __call__(self, node): + if not node.parent: + return + for ftree in self.f(node): + index = node.parent.children.index(ftree) + if not index: + return + for prev in node.parent.children[:index]: + for child in self.e(prev): + yield ftree + + def __str__(self): + return 'AnySibling({} / {})'.format(self.e, self.f) diff --git a/build/lib/java2python/lib/__init__.py b/build/lib/java2python/lib/__init__.py new file mode 100644 index 0000000..efd7b1a --- /dev/null +++ b/build/lib/java2python/lib/__init__.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.lib -> common library bits. + +from functools import partial + + +class FS(object): + """ Format string abbreviations. """ + l = '{left}' + r = '{right}' + c = ':' + lc = l + c + lr = l + r + lsr = l + ' ' + r + lsrc = lsr + c + + @classmethod + def op(cls, op): + """ Returns a format string for the given operation. """ + l, r = cls.l, cls.r + if op == '>>>': + return '(' + l + ' & (2**32+' + l + ')) >> ' + r + if op == '>>>=': + return l + ' = bsr(' + l + ', ' + r + ')' + return l + ' ' + op + ' ' + r + + +escapes = { + 'BLACK' : '\033[90m', + 'BLUE' : '\033[94m', + 'CYAN' : '\033[96m', + 'GREEN' : '\033[92m', + 'MAGENTA' : '\033[95m', + 'NORMAL' : '\033[0m', + 'RED' : '\033[91m', + 'WHITE' : '\033[97m', + 'YELLOW' : '\033[93m', + } + + +def escape(color, value): + return escapes.get(color, '') + str(value) + escapes.get('NORMAL', '') + + +class colors: + black = partial(escape, 'BLACK') + blue = partial(escape, 'BLUE') + cyan = partial(escape, 'CYAN') + green = partial(escape, 'GREEN') + magenta = partial(escape, 'MAGENTA') + red = partial(escape, 'RED') + white = partial(escape, 'WHITE') + yellow = partial(escape, 'YELLOW') diff --git a/build/lib/java2python/mod/__init__.py b/build/lib/java2python/mod/__init__.py new file mode 100644 index 0000000..aa73853 --- /dev/null +++ b/build/lib/java2python/mod/__init__.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.mod -> provides simple modification routines for the +# library and projects using it. +# +# The java2python.mod.basic module contains various functions for +# sprinkling generated source with docstrings, comments, decorators, +# etc. +# +# The java2python.mod.inclues module contains functions that the +# library will include directly -- as source code -- in the generated +# output. +# +# The java2python.mod.transform module contains values and functions +# for transforming input AST nodes. diff --git a/build/lib/java2python/mod/basic.py b/build/lib/java2python/mod/basic.py new file mode 100644 index 0000000..0806160 --- /dev/null +++ b/build/lib/java2python/mod/basic.py @@ -0,0 +1,252 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.mod.basic -> functions to revise generated source strings. + +from itertools import count +from logging import info, warn +from os import path +from re import sub as rxsub + +from java2python.lib import FS + + +def shebangLine(module): + """ yields the canonical python shebang line. """ + yield '#!/usr/bin/env python' + + +def encodingLine(encoding='utf-8'): + """ returns a function to yield the specified encoding line. + + Note that this function isn't wired up because the encoding is + specified for the source directly, and adding this line produces a + syntax error when the compile function is used. + """ + def line(module): + yield '# -*- coding: {0} -*-'.format(encoding) + return line + + +def simpleDocString(obj): + """ yields multiple lines for a default docstring. + + This generator works for modules, classes, and functions. + """ + yield '""" generated source for {0} {1} """'.format(obj.typeName, obj.name) + + +def commentedImports(module, expr): + module.factory.comment(parent=module, left=expr, fs='#import {left}') + + +def simpleImports(module, expr): + module.factory.expr(parent=module, left=expr, fs='import {left}') + + +def commentedPackages(module, expr): + module.factory.comment(parent=module, left=expr, fs='# package: {left}') + + +def namespacePackages(module, expr): + source = module.sourceFilename + if not source: + warn('namespace package not created; source input not named.') + return + initname = path.join(path.dirname(source), '__init__.py') + if path.exists(initname): + warn('namespace package not created; __init__.py exists.') + return + with open(initname, 'w') as initfile: + initfile.write('from pkgutil import extend_path\n') + initfile.write('__path__ = extend_path(__path__, __name__)\n') + # wrong + initfile.write('\nfrom {0} import {0}\n'.format(module.name)) + info('created __init__.py file for package %s.', expr) + + +def enumConstInts(enum, index, name): + return str(index) + + +def enumConstStrings(enum, index, name): + return repr(name) + + +scriptTemplate = """\n +if __name__ == '__main__': +{indent}import sys +{indent}{name}.main(sys.argv)""" + + +def scriptMainStanza(module): + def filterClass(x): + return x.isClass and x.name==module.name + + def filterMethod(x): + return x.isMethod and x.isPublic and x.isStatic and \ + x.isVoid and x.name=='main' + + for cls in [c for c in module.children if filterClass(c)]: + if [m for m in cls.children if filterMethod(m)]: + yield scriptTemplate.format(indent=module.indent, name=module.name) + break + + +def outputSubs(obj, text): + subsname = '{0}OutputSubs'.format(obj.typeName) + subs = obj.config.every(subsname, []) + for sub in subs: + for pattern, repl in sub: + text = rxsub(pattern, repl, text) + return text + + +def overloadedClassMethods(method): + """ + NB: this implementation does not handle overloaded static (or + class) methods, only instance methods. + """ + cls = method.parent + methods = [o for o in cls.children if o.isMethod and o.name==method.name] + if len(methods) == 1: + if methods[0].overloaded: + yield methods[0].overloaded + return + for i, m in enumerate(methods[1:]): + args = [p['type'] for p in m.parameters] + args = ', '.join(args) + m.overloaded = '@{0}.register({1})'.format(method.name, args) + m.name = '{0}_{1}'.format(method.name, i) + # for this one only: + yield '@overloaded' + + +def maybeClassMethod(method): + if method.isStatic and 'classmethod' not in method.decorators: + yield '@classmethod' + + +def maybeAbstractMethod(method): + if method.parent and method.parent.isInterface: + yield '@abstractmethod' + + +def maybeSynchronizedMethod(method): + if 'synchronized' in method.modifiers: + yield '@synchronized' + + +def globalNameCounter(original, counter=count()): + return '__{0}_{1}'.format(original, next(counter)) + + +def getBsrSrc(): + from inspect import getsource + from java2python.mod.include.bsr import bsr + return getsource(bsr) + + +def getSyncHelpersSrc(): + from inspect import getsource + from java2python.mod.include import sync + return getsource(sync) + + +def maybeBsr(module): + if getattr(module, 'needsBsrFunc', False): + for line in getBsrSrc().split('\n'): + yield line + + +def maybeAbstractHelpers(module): + if getattr(module, 'needsAbstractHelpers', False): + yield 'from abc import ABCMeta, abstractmethod' + + +def maybeSyncHelpers(module): + if getattr(module, 'needsSyncHelpers', False): + for line in getSyncHelpersSrc().split('\n'): + yield line + + +def classContentSort(obj): + isMethod = lambda x:x and x.isMethod + + def iterBody(body): + group = [] + for value in body: + if isMethod(value): + group.append(value) + yield group + group = [] + else: + group.append(value) + yield group + + def sortBody(group): + methods = [item for item in group if isMethod(item)] + return methods[0].name if methods else -1 + + grp = list(iterBody(obj.children)) + grpsrt = sorted(grp, key=sortBody) + obj.children = [item for grp in grpsrt for item in grp] + + +def defaultParams(obj): + return iter(obj.parameters) + + +def zopeInterfaceMethodParams(obj): + if not obj.parent.isInterface: + for param in obj.parameters: + yield param + else: + for index, param in enumerate(obj.parameters): + if index != 0 and param['name'] != 'self': + yield param + + +normalBases = ('object', ) + + +def defaultBases(obj): + return iter(obj.bases or normalBases) + + +def zopeInterfaceBases(obj): + return iter(obj.bases or ['zope.interface.Interface']) + + +def implAny(obj): + for module in obj.parents(lambda x:x.isModule): + for name in obj.bases: + if any(module.find(lambda v:v.name == name)): + return True + + +def zopeImplementsClassBases(obj): + return iter(normalBases) if implAny(obj) else defaultBases(obj) + + +def zopeImplementsClassHead(obj): + if implAny(obj): + for cls in obj.bases: + yield 'zope.interface.implements({})'.format(cls) + + +def moveStaticExpressions(cls): + name = '{}.'.format(cls.name) # notice the dot + exprs = [child for child in cls.children if child.isExpression and name in str(child)] + module = next(cls.parents(lambda x:x.isModule)) + for expr in exprs: + cls.children.remove(expr) + newExpr = module.factory.expr(fs=name + '{right}', right=expr) + module.adopt(newExpr, index=len(module.children)) + + +def castCtor(expr, node): + expr.fs = FS.l + '(' + FS.r + ')' + + +def castDrop(expr, node): + expr.fs = FS.r diff --git a/build/lib/java2python/mod/include/__init__.py b/build/lib/java2python/mod/include/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/build/lib/java2python/mod/include/bsr.py b/build/lib/java2python/mod/include/bsr.py new file mode 100644 index 0000000..16d5f2c --- /dev/null +++ b/build/lib/java2python/mod/include/bsr.py @@ -0,0 +1,26 @@ +def bsr(value, bits): + """ bsr(value, bits) -> value shifted right by bits + + This function is here because an expression in the original java + source contained the token '>>>' and/or '>>>=' (bit shift right + and/or bit shift right assign). In place of these, the python + source code below contains calls to this function. + + Copyright 2003 Jeffrey Clement. See pyrijnadel.py for license and + original source. + """ + minint = -2147483648 + if bits == 0: + return value + elif bits == 31: + if value & minint: + return 1 + else: + return 0 + elif bits < 0 or bits > 31: + raise ValueError('bad shift count') + tmp = (value & 0x7FFFFFFE) // 2**bits + if (value & minint): + return (tmp | (0x40000000 // 2**(bits-1))) + else: + return tmp diff --git a/build/lib/java2python/mod/include/classmethod.py b/build/lib/java2python/mod/include/classmethod.py new file mode 100644 index 0000000..cb97954 --- /dev/null +++ b/build/lib/java2python/mod/include/classmethod.py @@ -0,0 +1,6 @@ +class classmethod_(classmethod): + """ Classmethod that provides attribute delegation. + + """ + def __getattr__(self, name): + return getattr(self.__func__, name) diff --git a/build/lib/java2python/mod/include/overloading.py b/build/lib/java2python/mod/include/overloading.py new file mode 100644 index 0000000..bf340b8 --- /dev/null +++ b/build/lib/java2python/mod/include/overloading.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python2.5 + +## +# Dynamically overloaded functions. +# +# This is an implementation of (dynamically, or run-time) overloaded +# functions; also known as generic functions or multi-methods. +# +# This module is from Python SVN, +# http://svn.python.org/view/sandbox/trunk/overload/overloading.py +## + +"""Dynamically overloaded functions. + +This is an implementation of (dynamically, or run-time) overloaded +functions; also known as generic functions or multi-methods. + +The dispatch algorithm uses the types of all argument for dispatch, +similar to (compile-time) overloaded functions or methods in C++ and +Java. + +Most of the complexity in the algorithm comes from the need to support +subclasses in call signatures. For example, if an function is +registered for a signature (T1, T2), then a call with a signature (S1, +S2) is acceptable, assuming that S1 is a subclass of T1, S2 a subclass +of T2, and there are no other more specific matches (see below). + +If there are multiple matches and one of those doesn't *dominate* all +others, the match is deemed ambiguous and an exception is raised. A +subtlety here: if, after removing the dominated matches, there are +still multiple matches left, but they all map to the same function, +then the match is not deemed ambiguous and that function is used. +Read the method find_func() below for details. + +Python 2.5 is required due to the use of predicates any() and all(). + +""" + +from types import MethodType as instancemethod + +import sys +if sys.version_info[0] < 3: + # Make the environment more like Python 3.0 + __metaclass__ = type + + + +class overloaded: + """An implementation of overloaded functions.""" + + def __init__(self, default_func): + # Decorator to declare new overloaded function. + self.registry = {} + self.cache = {} + self.default_func = default_func + + def __get__(self, obj, type=None): + if obj is None: + return self + return instancemethod(self, obj) + + def register(self, *types): + """Decorator to register an implementation for a specific set of types. + + .register(t1, t2)(f) is equivalent to .register_func((t1, t2), f). + + """ + def helper(func): + self.register_func(types, func) + return func + return helper + + def register_func(self, types, func): + """Helper to register an implementation.""" + self.registry[tuple(types)] = func + self.cache = {} # Clear the cache (later we can optimize this). + + def __call__(self, *args): + """Call the overloaded function.""" + types = tuple(map(type, args)) + func = self.cache.get(types) + if func is None: + self.cache[types] = func = self.find_func(types) + return func(*args) + + def find_func(self, types): + """Find the appropriate overloaded function; don't call it. + + This won't work for old-style classes or classes without __mro__. + + """ + func = self.registry.get(types) + if func is not None: + # Easy case -- direct hit in registry. + return func + + # XXX Phillip Eby suggests to use issubclass() instead of __mro__. + # There are advantages and disadvantages. + + # I can't help myself -- this is going to be intense functional code. + # Find all possible candidate signatures. + mros = tuple(t.__mro__ for t in types) + n = len(mros) + candidates = [sig for sig in self.registry + if len(sig) == n and + all(t in mro for t, mro in zip(sig, mros))] + if not candidates: + # No match at all -- use the default function. + return self.default_func + if len(candidates) == 1: + # Unique match -- that's an easy case. + return self.registry[candidates[0]] + + # More than one match -- weed out the subordinate ones. + + def dominates(dom, sub, + orders=tuple(dict((t, i) for i, t in enumerate(mro)) + for mro in mros)): + # Predicate to decide whether dom strictly dominates sub. + # Strict domination is defined as domination without equality. + # The arguments dom and sub are type tuples of equal length. + # The orders argument is a precomputed auxiliary data structure + # giving dicts of ordering information corresponding to the + # positions in the type tuples. + # A type d dominates a type s iff order[d] <= order[s]. + # A type tuple (d1, d2, ...) dominates a type tuple of equal length + # (s1, s2, ...) iff d1 dominates s1, d2 dominates s2, etc. + if dom is sub: + return False + return all(order[d] <= order[s] + for d, s, order in zip(dom, sub, orders)) + + # I suppose I could inline dominates() but it wouldn't get any clearer. + candidates = [cand + for cand in candidates + if not any(dominates(dom, cand) for dom in candidates)] + if len(candidates) == 1: + # There's exactly one candidate left. + return self.registry[candidates[0]] + + # Perhaps these multiple candidates all have the same implementation? + funcs = set(self.registry[cand] for cand in candidates) + if len(funcs) == 1: + return funcs.pop() + + # No, the situation is irreducibly ambiguous. + raise TypeError("ambigous call; types=%r; candidates=%r" % + (types, candidates)) diff --git a/build/lib/java2python/mod/include/sync.py b/build/lib/java2python/mod/include/sync.py new file mode 100644 index 0000000..ddac055 --- /dev/null +++ b/build/lib/java2python/mod/include/sync.py @@ -0,0 +1,13 @@ +from functools import wraps +from threading import RLock + +def lock_for_object(obj, locks={}): + return locks.setdefault(id(obj), RLock()) + +def synchronized(call): + assert call.__code__.co_varnames[0] in ['self', 'cls'] + @wraps(call) + def inner(*args, **kwds): + with lock_for_object(args[0]): + return call(*args, **kwds) + return inner diff --git a/build/lib/java2python/mod/include/sync_test.py b/build/lib/java2python/mod/include/sync_test.py new file mode 100644 index 0000000..d7d62ea --- /dev/null +++ b/build/lib/java2python/mod/include/sync_test.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python + +from threading import RLock + +_locks = {} +def lock_for_object(obj, locks=_locks): + return locks.setdefault(id(obj), RLock()) + +def synchronized(call): + def inner(*args, **kwds): + with lock_for_object(call): + return call(*args, **kwds) + return inner + +class Main(object): + + def __init__(self): + self.attr = object() + + def b1(self): + r = [] + with lock_for_object(self.attr): + r.append(0) + return r + + def b2(self): + r = [] + with lock_for_object(self.attr): + r.append(0) + return r + + def m1(self): + return id(lock_for_object(self)) + + def m2(self): + return id(lock_for_object(self)) + + @classmethod + def c1(cls): + return id(lock_for_object(cls)) + + @classmethod + def c2(cls): + return id(lock_for_object(cls)) + + @synchronized + def s1(self, *values, **kwargs): + return [values, kwargs] + + @synchronized + def s2(self, *values, **kwargs): + return [values, kwargs] + + @classmethod + @synchronized + def cs1(cls, *values, **kwargs): + return [cls, values, kwargs] + + @classmethod + @synchronized + def cs2(cls, *values, **kwargs): + return [cls, values, kwargs] + + + +if __name__ == '__main__': + x = Main() + expected_count = 0 + + assert x.b1() == x.b2() + expected_count += 1 # one for the attr, used twice + + assert x.c1() == x.c2() + expected_count += 1 # one for the class, used twice + + assert x.m1() == x.m2() + expected_count += 1 # one for the instance, used twice + + assert x.s1() == x.s2() + expected_count += 2 # one for each instance method + + assert x.cs1() == x.cs2() + expected_count += 2 # one for each class method + + assert expected_count == len(_locks) + + print('[PASS]') + diff --git a/build/lib/java2python/mod/transform.py b/build/lib/java2python/mod/transform.py new file mode 100644 index 0000000..9b2e567 --- /dev/null +++ b/build/lib/java2python/mod/transform.py @@ -0,0 +1,196 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# java2python.mod.transform -> input AST transformer functions and constants. +# +# This module provides several transformation functions which are +# simple callables that modify AST nodes. These functions are not +# responsible for selecting nodes, only changing the node content. +# This gives us AST generation decoupled from AST traversal and +# modification. +# +# See the java2python.config.default and java2python.lang.selector modules to +# understand how and when selectors are associated with these callables. + +import re +from logging import warn + +import keyword +import types + +from java2python.lang import tokens + + +def invalidPythonNames(): + """ Creates a list of valid Java identifiers that are invalid in Python. """ + ts = [getattr(types, n) for n in dir(types) if not n.startswith('_')] + ns = [t.__name__ for t in ts if isinstance(t, type)] + return ['None', 'True', 'False', ] + ns + keyword.kwlist + + +def keywordSafeIdent(node, config, invalid=invalidPythonNames()): + """ Validates and possibly renames a Java identifier. """ + ident = node.token.text + if ident in invalid: + node.token.text = '%s_' % ident + + +def makeConst(v): + """ Returns a closure that indiscriminately changes node text to a value. """ + def xform(node, config): + node.token.text = v + return xform + + +# Create transformers for mapping well-known Java idents into their +# Python counterparts: +null2None = makeConst('None') +false2False = makeConst('False') +true2True = makeConst('True') + + +def syntaxSafeDecimalLiteral(node, config): + """ Ensures a Java decimal literal is a valid Python decimal literal. """ + value = node.token.text + if value.endswith(('l', 'L')): + value = value[:-1] + node.token.text = value + + +def syntaxSafeFloatLiteral(node, config): + """ Ensures a Java float literal is a valid Python float literal. """ + value = node.token.text + if value.startswith('.'): + value = '0' + value + if value.lower().endswith(('f', 'd')): + value = value[:-1] + node.token.text = value + + +def lengthToLen(node, config): + """ Transforms expressions like 'value.length()' to 'len(value)'. + + This method changes AST branches like this: + + METHOD_CALL [start=45, stop=49] + DOT . [line=4, start=45, stop=47] + IDENT foo [line=4, start=45] + IDENT length [line=4, start=47] + ARGUMENT_LIST [line=4, start=48, stop=49] + + Into branches like this: + + IDENT len(foo) [line=4, start=45] + + Notice that the resulting IDENT node text is invalid. We can't use a + METHOD_CALL token because those are always bound to a class or instance. + It would be best to add a new token type, and that option will be explored + if we run into this problem again. + + """ + dot = node.parent + method = dot.parent + + ident = dot.firstChildOfType(tokens.IDENT) + ident.token.text = 'len({})'.format(ident.text) + + expr = method.parent + expr.children.remove(method) + expr.addChild(ident) + + +def formatSyntaxTransf(match): + """ Helper function for formatString AST transform. + + Translates the Java Formatter syntax into Python .format syntax. + + This function gets called by re.sub which matches all the %...$... groups + inside a format specifier string. + """ + groups = match.groupdict() + if groups['convers'] == 'n': + # Means platform-specific line separator + return '\\n' # Py converts \n to os.linesep + + result = '{' + thous_sep = '' + + if(groups['idx']): + idx = int(groups['idx'][:-1]) + result += str(idx - 1) # Py starts count from 0 + result += ':' + + if(groups['flags']): + if ',' in groups['flags']: + thous_sep = ',' + if '+' in groups['flags']: + result += '+' + elif ' ' in groups['flags']: + result += ' ' + if '#' in groups['flags']: + result += '#' + if '0' in groups['flags']: + result += '0' + + if(groups['width']): + result += groups['width'] + result += thous_sep + + if(groups['precision']): + result += groups['precision'] + + result += groups['convers'] + '}' + + return result + +def formatString(node, config): + """ Transforms string formatting like 'String.format("%d %2$s", i, s)' + into '"{:d} {2:s}".format(i, s)'. + """ + dot = node.parent + method = dot.parent + arg_list = method.firstChildOfType(tokens.ARGUMENT_LIST) + call_args = [arg for arg in arg_list.childrenOfType(tokens.EXPR)] + args = [arg.firstChildOfType(tokens.IDENT) for arg in call_args[1:]] + + # Translate format syntax (if format == string_literal) + format = call_args[0].firstChildOfType(tokens.STRING_LITERAL) + if format: + format.token.text = \ + re.sub(r'%(?P\d+\$)?(?P[-+# 0,]+)?(?P[0-9]+)?(?P\.[0-9]+)?(?P[scdoxefgn])', + formatSyntaxTransf, + format.token.text, + flags=re.IGNORECASE) + else: + # Translation should happen at runtime + format = call_args[0].firstChild() + if format.type == tokens.IDENT: + # String variable + warn('Formatting string %s is not automatically translated.' + % str(format.token.text)) + else: + # Function that returns String + warn('Formatting string returned by %s() is not automatically translated.' + % str(format.firstChildOfType(tokens.IDENT).token.text)) + + left_ident = dot.children[0] + right_ident = dot.children[1] + + # Change AST + arg_list.children.remove(format.parent) + dot.children.remove(left_ident) + dot.children.remove(right_ident) + dot.addChild(format) + dot.addChild(right_ident) + + +def typeSub(node, config): + """ Maps specific, well-known Java types to their Python counterparts. + + See the `java2python.config.default` module for the default type + mapping and further discussion. + """ + ident = node.token.text + for subs in reversed(config.every('typeSubs', {})): + if ident in subs: + node.token.text = subs[ident] + return diff --git a/build/scripts-2.7/j2py b/build/scripts-2.7/j2py new file mode 100755 index 0000000..b398856 --- /dev/null +++ b/build/scripts-2.7/j2py @@ -0,0 +1,259 @@ +#!/usr/bin/python2 +# -*- coding: utf-8 -*- +""" j2py -> Java to Python compiler script. + +This is all very ordinary. We import the package bits, open and read +a file, translate it, and write it out. + +""" +import sys +from argparse import ArgumentParser, ArgumentTypeError +from collections import defaultdict +from logging import _levelNames as logLevels, exception, warning, info, basicConfig +from os import path, makedirs +from time import time + +from java2python.compiler import Module, buildAST, transformAST +from java2python.config import Config +from java2python.lib import escapes + + +version = '0.5.1' + + +def logLevel(value): + """ Returns a valid logging level or raises and exception. """ + msg = 'invalid loglevel: %r' + try: + lvl = int(value) + except (ValueError, ): + name = value.upper() + if name not in logLevels: + raise ArgumentTypeError(msg % value) + lvl = logLevels[name] + else: + if lvl not in logLevels: + raise ArgumentTypeError(msg % value) + return lvl + + +def configFromDir(inname, dirname): + """ Returns a file name from the given config directory. """ + name = path.join(dirname, path.basename(path.splitext(inname)[0])) + return '%s.py' % path.abspath(name) + + +def runMain(options): + """ Runs our main function with profiling if indicated by options. """ + if options.profile: + import cProfile, pstats + prof = cProfile.Profile() + prof.runcall(runOneOrMany, options) + stats = pstats.Stats(prof, stream=sys.stderr) + stats.strip_dirs().sort_stats('cumulative') + stats.print_stats().print_callers() + return 0 + else: + return runOneOrMany(options) + +def runOneOrMany(options): + """ Runs our main transformer with each of the input files. """ + infile, outfile = options.inputfile, options.outputfile + + if infile and not isinstance(infile, file) and path.isdir(infile): + if outfile and not isinstance(outfile, file) and not path.isdir(outfile): + warning('Must specify output directory or stdout when using input directory.') + return 2 + def walker(arg, dirname, files): + for name in [name for name in files if name.endswith('.java')]: + fullname = path.join(dirname, name) + options.inputfile = fullname + info('opening %s', fullname) + if outfile and outfile != '-' and not isinstance(outfile, file): + full = path.abspath(path.join(outfile, fullname)) + head, tail = path.split(full) + tail = path.splitext(tail)[0] + '.py' + if not path.exists(head): + makedirs(head) + options.outputfile = path.join(head, tail) + runTransform(options) + path.walk(infile, walker, None) + return 0 + else: + return runTransform(options) + + +def runTransform(options): + """ Compile the indicated java source with the given options. """ + timed = defaultdict(time) + timed['overall'] + + filein = fileout = filedefault = '-' + if options.inputfile and not isinstance(options.inputfile, file): + filein = options.inputfile + if options.outputfile and not isinstance(options.outputfile, file): + fileout = options.outputfile + elif fileout != filedefault: + fileout = '%s.py' % (path.splitext(filein)[0]) + + configs = options.configs + if options.configdirs and not isinstance(filein, file): + for configdir in options.configdirs: + dirname = configFromDir(filein, configdir) + if path.exists(dirname): + configs.insert(0, dirname) + if options.includedefaults: + configs.insert(0, 'java2python.config.default') + + try: + if filein != '-': + source = open(filein).read() + else: + source = sys.stdin.read() + except (IOError, ), exc: + code, msg = exc.args[0:2] + print 'IOError: %s.' % (msg, ) + return code + + timed['comp'] + try: + tree = buildAST(source) + except (Exception, ), exc: + exception('exception while parsing') + return 1 + timed['comp_finish'] + + config = Config(configs) + timed['xform'] + transformAST(tree, config) + timed['xform_finish'] + + timed['visit'] + module = Module(config) + module.sourceFilename = path.abspath(filein) if filein != '-' else None + module.name = path.splitext(path.basename(filein))[0] if filein != '-' else '' + module.walk(tree) + timed['visit_finish'] + + timed['encode'] + source = unicode(module) + timed['encode_finish'] + timed['overall_finish'] + + if options.lexertokens: + for idx, tok in enumerate(tree.parser.input.tokens): + print >> sys.stderr, '{0} {1}'.format(idx, tok) + print >> sys.stderr + + if options.javaast: + tree.dump(sys.stderr) + print >> sys.stderr + + if options.pytree: + module.dumpRepr(sys.stderr) + print >> sys.stderr + + if not options.skipsource: + if fileout == filedefault: + output = sys.stdout + else: + output = open(fileout, 'w') + module.name = path.splitext(filein)[0] if filein != '-' else '' + print >> output, source + + if not options.skipcompile: + try: + compile(source, '', 'exec') + except (SyntaxError, ), ex: + warning('Generated source has invalid syntax. %s', ex) + else: + info('Generated source has valid syntax.') + + info('Parse: %.4f seconds', timed['comp_finish'] - timed['comp']) + info('Visit: %.4f seconds', timed['visit_finish'] - timed['visit']) + info('Transform: %.4f seconds', timed['xform_finish'] - timed['xform']) + info('Encode: %.4f seconds', timed['encode_finish'] - timed['encode']) + info('Total: %.4f seconds', timed['overall_finish'] - timed['overall']) + return 0 + + +def isWindows(): + """ True if running on Windows. """ + return sys.platform.startswith('win') + + +def configLogging(loglevel): + """ Configure the logging package. """ + fmt = '# %(levelname)s %(funcName)s: %(message)s' + basicConfig(level=loglevel, format=fmt) + + +def configColors(nocolor): + """ Configure the color escapes. """ + if isWindows() or nocolor: + escapes.clear() + + +def configScript(argv): + """ Return an options object from the given argument sequence. """ + parser = ArgumentParser( + description='Translate Java source code to Python.', + epilog='Refer to https://github.com/natural/java2python for docs and support.' + ) + + add = parser.add_argument + add(dest='inputfile', nargs='?', + help='Read from INPUT. May use - for stdin (default).', + metavar='INPUT', default=None) + add(dest='outputfile', nargs='?', + help='Write to OUTPUT. May use - for stdout (default).', + metavar='OUTPUT', default=None) + add('-c', '--config', dest='configs', + help='Use CONFIG file or module. May be repeated.', + metavar='CONFIG', default=[], action='append') + add('-d', '--config-dir', dest='configdirs', + help='Use DIR to match input filename with config filename.', + metavar='DIR', default=[], action='append') + add('-f', '--profile', dest='profile', + help='Profile execution and print results to stderr.', + default=False, action='store_true') + add('-j', '--java-ast', dest='javaast', + help='Print java source AST tree to stderr.', + default=False, action='store_true') + add('-k', '--skip-compile', dest='skipcompile', + help='Skip compile check on translated source.', + default=False, action='store_true') + add('-l', '--log-level', dest='loglevel', + help='Set log level by name or value.', + default='WARN', type=logLevel) + add('-n', '--no-defaults', dest='includedefaults', + help='Ignore default configuration module.', + default=True, action='store_false') + add('-p', '--python-tree', dest='pytree', + help='Print python object tree to stderr.', + default=False, action='store_true') + add('-r', '--no-color', dest='nocolor', + help='Disable color output.' +\ + (' No effect on Win OS.' if isWindows() else ''), + default=False, action='store_true') + add('-s', '--skip-source', dest='skipsource', + help='Skip writing translated source; useful when printing trees', + default=False, action='store_true') + add('-t', '--lexer-tokens', dest='lexertokens', + help='Print lexer tokens to stderr.', + default=False, action='store_true') + add('-v', '--version', action='version', version='%(prog)s ' + version) + + ns = parser.parse_args(argv) + if ns.inputfile == '-': + ns.inputfile = sys.stdin + if ns.outputfile == '-': + ns.outputfile = sys.stdout + + configColors(ns.nocolor) + configLogging(ns.loglevel) + return ns + + +if __name__ == '__main__': + sys.exit(runMain(configScript(sys.argv[1:]))) diff --git a/build/scripts-3.6/j2py b/build/scripts-3.6/j2py new file mode 100755 index 0000000..4da1be0 --- /dev/null +++ b/build/scripts-3.6/j2py @@ -0,0 +1,260 @@ +#!/usr/bin/python3 +# -*- coding: utf-8 -*- +""" j2py -> Java to Python compiler script. + +This is all very ordinary. We import the package bits, open and read +a file, translate it, and write it out. + +""" +import sys +from argparse import ArgumentParser, ArgumentTypeError +from collections import defaultdict +#from logging import _levelNames as logLevels, exception, warning, info, basicConfig +from logging import exception, warning, info, basicConfig +from os import path, makedirs +from time import time + +from java2python.compiler import Module, buildAST, transformAST +from java2python.config import Config +from java2python.lib import escapes + + +version = '0.5.1' + + +# def logLevel(value): +# """ Returns a valid logging level or raises and exception. """ +# msg = 'invalid loglevel: %r' +# try: +# lvl = int(value) +# except (ValueError, ): +# name = value.upper() +# if name not in logLevels: +# raise ArgumentTypeError(msg % value) +# lvl = logLevels[name] +# else: +# if lvl not in logLevels: +# raise ArgumentTypeError(msg % value) +# return lvl + + +def configFromDir(inname, dirname): + """ Returns a file name from the given config directory. """ + name = path.join(dirname, path.basename(path.splitext(inname)[0])) + return '%s.py' % path.abspath(name) + + +def runMain(options): + """ Runs our main function with profiling if indicated by options. """ + if options.profile: + import cProfile, pstats + prof = cProfile.Profile() + prof.runcall(runOneOrMany, options) + stats = pstats.Stats(prof, stream=sys.stderr) + stats.strip_dirs().sort_stats('cumulative') + stats.print_stats().print_callers() + return 0 + else: + return runOneOrMany(options) + +def runOneOrMany(options): + """ Runs our main transformer with each of the input files. """ + infile, outfile = options.inputfile, options.outputfile + + if infile and not isinstance(infile, file) and path.isdir(infile): + if outfile and not isinstance(outfile, file) and not path.isdir(outfile): + warning('Must specify output directory or stdout when using input directory.') + return 2 + def walker(arg, dirname, files): + for name in [name for name in files if name.endswith('.java')]: + fullname = path.join(dirname, name) + options.inputfile = fullname + info('opening %s', fullname) + if outfile and outfile != '-' and not isinstance(outfile, file): + full = path.abspath(path.join(outfile, fullname)) + head, tail = path.split(full) + tail = path.splitext(tail)[0] + '.py' + if not path.exists(head): + makedirs(head) + options.outputfile = path.join(head, tail) + runTransform(options) + path.walk(infile, walker, None) + return 0 + else: + return runTransform(options) + + +def runTransform(options): + """ Compile the indicated java source with the given options. """ + timed = defaultdict(time) + timed['overall'] + + filein = fileout = filedefault = '-' + if options.inputfile and not isinstance(options.inputfile, file): + filein = options.inputfile + if options.outputfile and not isinstance(options.outputfile, file): + fileout = options.outputfile + elif fileout != filedefault: + fileout = '%s.py' % (path.splitext(filein)[0]) + + configs = options.configs + if options.configdirs and not isinstance(filein, file): + for configdir in options.configdirs: + dirname = configFromDir(filein, configdir) + if path.exists(dirname): + configs.insert(0, dirname) + if options.includedefaults: + configs.insert(0, 'java2python.config.default') + + try: + if filein != '-': + source = open(filein).read() + else: + source = sys.stdin.read() + except (IOError, ) as exc: + code, msg = exc.args[0:2] + print('IOError: %s.' % (msg, )) + return code + + timed['comp'] + try: + tree = buildAST(source) + except (Exception, ) as exc: + exception('exception while parsing') + return 1 + timed['comp_finish'] + + config = Config(configs) + timed['xform'] + transformAST(tree, config) + timed['xform_finish'] + + timed['visit'] + module = Module(config) + module.sourceFilename = path.abspath(filein) if filein != '-' else None + module.name = path.splitext(path.basename(filein))[0] if filein != '-' else '' + module.walk(tree) + timed['visit_finish'] + + timed['encode'] + source = str(module) + timed['encode_finish'] + timed['overall_finish'] + + if options.lexertokens: + for idx, tok in enumerate(tree.parser.input.tokens): + print('{0} {1}'.format(idx, tok), file=sys.stderr) + print(file=sys.stderr) + + if options.javaast: + tree.dump(sys.stderr) + print(file=sys.stderr) + + if options.pytree: + module.dumpRepr(sys.stderr) + print(file=sys.stderr) + + if not options.skipsource: + if fileout == filedefault: + output = sys.stdout + else: + output = open(fileout, 'w') + module.name = path.splitext(filein)[0] if filein != '-' else '' + print(source, file=output) + + if not options.skipcompile: + try: + compile(source, '', 'exec') + except (SyntaxError, ) as ex: + warning('Generated source has invalid syntax. %s', ex) + else: + info('Generated source has valid syntax.') + + info('Parse: %.4f seconds', timed['comp_finish'] - timed['comp']) + info('Visit: %.4f seconds', timed['visit_finish'] - timed['visit']) + info('Transform: %.4f seconds', timed['xform_finish'] - timed['xform']) + info('Encode: %.4f seconds', timed['encode_finish'] - timed['encode']) + info('Total: %.4f seconds', timed['overall_finish'] - timed['overall']) + return 0 + + +def isWindows(): + """ True if running on Windows. """ + return sys.platform.startswith('win') + + +def configLogging(loglevel): + """ Configure the logging package. """ + fmt = '# %(levelname)s %(funcName)s: %(message)s' + basicConfig(level=loglevel, format=fmt) + + +def configColors(nocolor): + """ Configure the color escapes. """ + if isWindows() or nocolor: + escapes.clear() + + +def configScript(argv): + """ Return an options object from the given argument sequence. """ + parser = ArgumentParser( + description='Translate Java source code to Python.', + epilog='Refer to https://github.com/natural/java2python for docs and support.' + ) + + add = parser.add_argument + add(dest='inputfile', nargs='?', + help='Read from INPUT. May use - for stdin (default).', + metavar='INPUT', default=None) + add(dest='outputfile', nargs='?', + help='Write to OUTPUT. May use - for stdout (default).', + metavar='OUTPUT', default=None) + add('-c', '--config', dest='configs', + help='Use CONFIG file or module. May be repeated.', + metavar='CONFIG', default=[], action='append') + add('-d', '--config-dir', dest='configdirs', + help='Use DIR to match input filename with config filename.', + metavar='DIR', default=[], action='append') + add('-f', '--profile', dest='profile', + help='Profile execution and print results to stderr.', + default=False, action='store_true') + add('-j', '--java-ast', dest='javaast', + help='Print java source AST tree to stderr.', + default=False, action='store_true') + add('-k', '--skip-compile', dest='skipcompile', + help='Skip compile check on translated source.', + default=False, action='store_true') + add('-l', '--log-level', dest='loglevel', + help='Set log level by name or value.', + default='WARN', type=logLevel) + add('-n', '--no-defaults', dest='includedefaults', + help='Ignore default configuration module.', + default=True, action='store_false') + add('-p', '--python-tree', dest='pytree', + help='Print python object tree to stderr.', + default=False, action='store_true') + add('-r', '--no-color', dest='nocolor', + help='Disable color output.' +\ + (' No effect on Win OS.' if isWindows() else ''), + default=False, action='store_true') + add('-s', '--skip-source', dest='skipsource', + help='Skip writing translated source; useful when printing trees', + default=False, action='store_true') + add('-t', '--lexer-tokens', dest='lexertokens', + help='Print lexer tokens to stderr.', + default=False, action='store_true') + add('-v', '--version', action='version', version='%(prog)s ' + version) + + ns = parser.parse_args(argv) + if ns.inputfile == '-': + ns.inputfile = sys.stdin + if ns.outputfile == '-': + ns.outputfile = sys.stdout + + configColors(ns.nocolor) + configLogging(ns.loglevel) + return ns + + +if __name__ == '__main__': + sys.exit(runMain(configScript(sys.argv[1:]))) diff --git a/java2python/compiler/template.py b/java2python/compiler/template.py index 4f4dfe1..39cb548 100644 --- a/java2python/compiler/template.py +++ b/java2python/compiler/template.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 # -*- coding: utf-8 -*- # java2python.compiler.template -> Base classes for writing Python source. # @@ -322,7 +322,14 @@ def __repr__(self): def __str__(self): """ Returns the Python source code representation of this template. """ - return self.fs.format(left=self.left, right=self.right) + self.tail + left = self.left + if isinstance(self.left, unicode): + left = self.left.encode('utf8') + + right = self.right + if isinstance(self.right, unicode): + right = self.right.encode('utf8') + return self.fs.format(left=left, right=right) + self.tail def dump(self, fd, level=0): """ Writes the Python source code for this template to the given file. """ From 5898b96138cbce14f5cc0f9597c10457d3e515d8 Mon Sep 17 00:00:00 2001 From: Changsen XU Date: Fri, 3 Jan 2020 13:52:51 +0800 Subject: [PATCH 2/2] add antlr-3.1.3 --- antlr-3.1.3/BUILD.txt | 422 + antlr-3.1.3/antlr.config | 1 + antlr-3.1.3/gunit/CHANGES.txt | 81 + antlr-3.1.3/gunit/LICENSE.txt | 26 + antlr-3.1.3/gunit/README.txt | 56 + antlr-3.1.3/gunit/antlr.config | 0 antlr-3.1.3/gunit/pom.xml | 168 + .../src/main/antlr3/org/antlr/gunit/gUnit.g | 330 + .../java/org/antlr/gunit/AbstractTest.java | 83 + .../java/org/antlr/gunit/BooleanTest.java | 63 + .../java/org/antlr/gunit/GrammarInfo.java | 87 + .../main/java/org/antlr/gunit/ITestCase.java | 63 + .../main/java/org/antlr/gunit/ITestSuite.java | 45 + .../src/main/java/org/antlr/gunit/Interp.java | 91 + .../antlr/gunit/InvalidInputException.java | 34 + .../java/org/antlr/gunit/JUnitCodeGen.java | 325 + .../main/java/org/antlr/gunit/OutputTest.java | 67 + .../main/java/org/antlr/gunit/ReturnTest.java | 69 + .../java/org/antlr/gunit/gUnitBaseTest.java | 456 + .../java/org/antlr/gunit/gUnitExecutor.java | 620 ++ .../java/org/antlr/gunit/gUnitTestInput.java | 45 + .../java/org/antlr/gunit/gUnitTestResult.java | 77 + .../java/org/antlr/gunit/gUnitTestSuite.java | 76 + .../gunit/swingui/AbstractInputEditor.java | 28 + .../org/antlr/gunit/swingui/AwAdapter.java | 30 + .../org/antlr/gunit/swingui/IController.java | 8 + .../gunit/swingui/RuleListController.java | 133 + .../antlr/gunit/swingui/RunnerController.java | 209 + .../gunit/swingui/StatusBarController.java | 66 + .../gunit/swingui/TestCaseEditController.java | 605 ++ .../java/org/antlr/gunit/swingui/Tool.java | 27 + .../org/antlr/gunit/swingui/Translator.java | 171 + .../gunit/swingui/WorkSpaceController.java | 274 + .../antlr/gunit/swingui/WorkSpaceView.java | 76 + .../java/org/antlr/gunit/swingui/gunit.stg | 19 + .../gunit/swingui/images/ImageFactory.java | 59 + .../org/antlr/gunit/swingui/images/accept.png | Bin 0 -> 1516 bytes .../org/antlr/gunit/swingui/images/add.png | Bin 0 -> 1510 bytes .../antlr/gunit/swingui/images/addfile24.png | Bin 0 -> 1653 bytes .../antlr/gunit/swingui/images/delete24.png | Bin 0 -> 1468 bytes .../org/antlr/gunit/swingui/images/edit16.png | Bin 0 -> 775 bytes .../org/antlr/gunit/swingui/images/favb16.png | Bin 0 -> 842 bytes .../org/antlr/gunit/swingui/images/favb24.png | Bin 0 -> 1417 bytes .../org/antlr/gunit/swingui/images/file16.png | Bin 0 -> 831 bytes .../gunit/swingui/images/filesearch24.png | Bin 0 -> 1653 bytes .../antlr/gunit/swingui/images/floppy24.png | Bin 0 -> 1586 bytes .../antlr/gunit/swingui/images/folder24.png | Bin 0 -> 1345 bytes .../org/antlr/gunit/swingui/images/help24.png | Bin 0 -> 1471 bytes .../org/antlr/gunit/swingui/images/next24.png | Bin 0 -> 1507 bytes .../org/antlr/gunit/swingui/images/redo24.png | Bin 0 -> 1305 bytes .../antlr/gunit/swingui/images/refresh24.png | Bin 0 -> 1546 bytes .../antlr/gunit/swingui/images/runfail.png | Bin 0 -> 869 bytes .../antlr/gunit/swingui/images/runpass.png | Bin 0 -> 904 bytes .../antlr/gunit/swingui/images/saveas24.png | Bin 0 -> 1622 bytes .../antlr/gunit/swingui/images/testgroup.png | Bin 0 -> 808 bytes .../antlr/gunit/swingui/images/testgroupx.png | Bin 0 -> 777 bytes .../antlr/gunit/swingui/images/testsuite.png | Bin 0 -> 936 bytes .../antlr/gunit/swingui/images/textfile16.png | Bin 0 -> 859 bytes .../antlr/gunit/swingui/images/textfile24.png | Bin 0 -> 1493 bytes .../org/antlr/gunit/swingui/images/undo24.png | Bin 0 -> 1323 bytes .../antlr/gunit/swingui/images/windowb16.png | Bin 0 -> 948 bytes .../gunit/swingui/model/ITestCaseInput.java | 7 + .../gunit/swingui/model/ITestCaseOutput.java | 15 + .../org/antlr/gunit/swingui/model/Rule.java | 47 + .../antlr/gunit/swingui/model/TestCase.java | 43 + .../swingui/model/TestCaseInputFile.java | 35 + .../model/TestCaseInputMultiString.java | 30 + .../swingui/model/TestCaseInputString.java | 32 + .../swingui/model/TestCaseOutputAST.java | 30 + .../swingui/model/TestCaseOutputResult.java | 36 + .../swingui/model/TestCaseOutputReturn.java | 22 + .../swingui/model/TestCaseOutputStdOut.java | 26 + .../antlr/gunit/swingui/model/TestSuite.java | 86 + .../org/antlr/gunit/swingui/parsers/ANTLRv3.g | 619 ++ .../gunit/swingui/parsers/ANTLRv3.tokens | 126 + .../gunit/swingui/parsers/ANTLRv3Lexer.java | 3638 +++++++ .../gunit/swingui/parsers/ANTLRv3Parser.java | 8727 +++++++++++++++++ .../org/antlr/gunit/swingui/parsers/StGUnit.g | 212 + .../gunit/swingui/parsers/StGUnit.tokens | 37 + .../gunit/swingui/parsers/StGUnitLexer.java | 1984 ++++ .../gunit/swingui/parsers/StGUnitParser.java | 740 ++ .../swingui/runner/NotifiedTestExecuter.java | 44 + .../gunit/swingui/runner/ParserLoader.java | 79 + .../gunit/swingui/runner/gUnitAdapter.java | 53 + .../org/antlr/gunit/gUnitTestResult.stg | 49 + .../main/resources/org/antlr/gunit/junit.stg | 83 + .../test/java/org/antlr/gunit/GunitTest.java | 38 + antlr-3.1.3/lib/._stringtemplate-3.2.jar | Bin 0 -> 197 bytes antlr-3.1.3/lib/antlr-2.7.7.jar | Bin 0 -> 445288 bytes antlr-3.1.3/lib/antlr-3.1.3.jar | Bin 0 -> 3415952 bytes antlr-3.1.3/lib/antlr-runtime-3.1.3.jar | Bin 0 -> 150774 bytes antlr-3.1.3/lib/gunit.jar | Bin 0 -> 49633 bytes antlr-3.1.3/lib/stringtemplate-3.2.jar | Bin 0 -> 172023 bytes antlr-3.1.3/runtime/ActionScript/AUTHORS | 1 + antlr-3.1.3/runtime/ActionScript/LICENSE | 26 + antlr-3.1.3/runtime/ActionScript/README | 66 + .../runtime/ActionScript/lib/antlr3.swc | Bin 0 -> 81262 bytes .../project/.actionScriptProperties | 26 + .../ActionScript/project/.flexLibProperties | 58 + .../runtime/ActionScript/project/.project | 18 + .../org.eclipse.core.resources.prefs | 3 + .../runtime/ActionScript/project/README.txt | 14 + .../runtime/ActionScript/project/build.xml | 84 + .../ActionScript/project/lib/FlexAntTasks.jar | Bin 0 -> 557873 bytes .../project/lib/FlexUnitOptional.swc | Bin 0 -> 5063 bytes .../ActionScript/project/lib/flexunit.swc | Bin 0 -> 467648 bytes .../src/org/antlr/runtime/ANTLRFileStream.as | 36 + .../org/antlr/runtime/ANTLRStringStream.as | 212 + .../src/org/antlr/runtime/BaseRecognizer.as | 813 ++ .../project/src/org/antlr/runtime/BitSet.as | 267 + .../src/org/antlr/runtime/CharStream.as | 57 + .../org/antlr/runtime/CharStreamConstants.as | 7 + .../src/org/antlr/runtime/CharStreamState.as | 47 + .../src/org/antlr/runtime/CommonToken.as | 183 + .../org/antlr/runtime/CommonTokenStream.as | 371 + .../project/src/org/antlr/runtime/DFA.as | 225 + .../org/antlr/runtime/EarlyExitException.as | 39 + .../antlr/runtime/FailedPredicateException.as | 49 + .../src/org/antlr/runtime/IntStream.as | 122 + .../project/src/org/antlr/runtime/Lexer.as | 323 + .../runtime/MismatchedNotSetException.as | 38 + .../antlr/runtime/MismatchedRangeException.as | 44 + .../antlr/runtime/MismatchedSetException.as | 42 + .../antlr/runtime/MismatchedTokenException.as | 45 + .../runtime/MismatchedTreeNodeException.as | 16 + .../antlr/runtime/MissingTokenException.as | 28 + .../org/antlr/runtime/NoViableAltException.as | 56 + .../project/src/org/antlr/runtime/Parser.as | 104 + .../antlr/runtime/ParserRuleReturnScope.as | 55 + .../org/antlr/runtime/RecognitionException.as | 183 + .../antlr/runtime/RecognizerSharedState.as | 93 + .../src/org/antlr/runtime/RuleReturnScope.as | 13 + .../project/src/org/antlr/runtime/Token.as | 64 + .../src/org/antlr/runtime/TokenConstants.as | 35 + .../org/antlr/runtime/TokenRewriteStream.as | 509 + .../src/org/antlr/runtime/TokenSource.as | 55 + .../src/org/antlr/runtime/TokenStream.as | 70 + .../antlr/runtime/UnwantedTokenException.as | 25 + .../src/org/antlr/runtime/tree/BaseTree.as | 357 + .../org/antlr/runtime/tree/BaseTreeAdaptor.as | 313 + .../org/antlr/runtime/tree/CommonErrorNode.as | 84 + .../src/org/antlr/runtime/tree/CommonTree.as | 166 + .../antlr/runtime/tree/CommonTreeAdaptor.as | 172 + .../runtime/tree/CommonTreeNodeStream.as | 438 + .../tree/RewriteCardinalityException.as | 49 + .../runtime/tree/RewriteEarlyExitException.as | 38 + .../tree/RewriteEmptyStreamException.as | 37 + .../runtime/tree/RewriteRuleElementStream.as | 200 + .../runtime/tree/RewriteRuleNodeStream.as | 27 + .../runtime/tree/RewriteRuleSubtreeStream.as | 67 + .../runtime/tree/RewriteRuleTokenStream.as | 60 + .../src/org/antlr/runtime/tree/Tree.as | 96 + .../src/org/antlr/runtime/tree/TreeAdaptor.as | 253 + .../org/antlr/runtime/tree/TreeConstants.as | 8 + .../org/antlr/runtime/tree/TreeNodeStream.as | 102 + .../src/org/antlr/runtime/tree/TreeParser.as | 159 + .../antlr/runtime/tree/TreeRuleReturnScope.as | 66 + .../project/src/org/antlr/runtime/version.as | 3 + .../ActionScript/project/test/Antlr3Test.mxml | 33 + .../test/org/antlr/runtime/test/AllTests.as | 14 + .../runtime/test/TestANTLRStringStream.as | 131 + .../test/org/antlr/runtime/test/TestBitSet.as | 30 + .../test/org/antlr/runtime/test/TestDFA.as | 29 + antlr-3.1.3/runtime/C/AUTHORS | 41 + antlr-3.1.3/runtime/C/C.sln | 53 + antlr-3.1.3/runtime/C/C.vcproj | 1064 ++ antlr-3.1.3/runtime/C/C.vcproj.vspscc | 14 + antlr-3.1.3/runtime/C/C.vssscc | 10 + antlr-3.1.3/runtime/C/COPYING | 29 + antlr-3.1.3/runtime/C/ChangeLog | 550 ++ antlr-3.1.3/runtime/C/Cvs2005.sln | 53 + antlr-3.1.3/runtime/C/Cvs2005.vcproj | 1067 ++ antlr-3.1.3/runtime/C/INSTALL | 237 + antlr-3.1.3/runtime/C/Makefile.am | 81 + antlr-3.1.3/runtime/C/NEWS | 2 + antlr-3.1.3/runtime/C/README | 1924 ++++ antlr-3.1.3/runtime/C/configure.ac | 215 + .../runtime/C/dist/libantlr3c-3.0.1.tar.gz | Bin 0 -> 456449 bytes .../runtime/C/dist/libantlr3c-3.1.1.tar.gz | Bin 0 -> 497221 bytes .../runtime/C/dist/libantlr3c-3.1.2.tar.gz | Bin 0 -> 517852 bytes .../runtime/C/dist/libantlr3c-3.1.3.tar.gz | Bin 0 -> 517937 bytes .../runtime/C/dist/libantlr3c-3.1.tar.gz | Bin 0 -> 497875 bytes antlr-3.1.3/runtime/C/doxyfile | 265 + antlr-3.1.3/runtime/C/doxygen/atsections.dox | 143 + antlr-3.1.3/runtime/C/doxygen/build.dox | 207 + antlr-3.1.3/runtime/C/doxygen/buildrec.dox | 269 + antlr-3.1.3/runtime/C/doxygen/changes31.dox | 56 + .../runtime/C/doxygen/doxygengroups.dox | 243 + antlr-3.1.3/runtime/C/doxygen/generate.dox | 57 + antlr-3.1.3/runtime/C/doxygen/interop.dox | 327 + antlr-3.1.3/runtime/C/doxygen/knownissues.dox | 3 + antlr-3.1.3/runtime/C/doxygen/mainpage.dox | 104 + antlr-3.1.3/runtime/C/doxygen/runtime.dox | 35 + antlr-3.1.3/runtime/C/doxygen/using.dox | 62 + antlr-3.1.3/runtime/C/include/antlr3.h | 56 + .../runtime/C/include/antlr3baserecognizer.h | 371 + .../runtime/C/include/antlr3basetree.h | 143 + .../runtime/C/include/antlr3basetreeadaptor.h | 151 + antlr-3.1.3/runtime/C/include/antlr3bitset.h | 119 + .../runtime/C/include/antlr3collections.h | 384 + .../runtime/C/include/antlr3commontoken.h | 357 + .../runtime/C/include/antlr3commontree.h | 167 + .../C/include/antlr3commontreeadaptor.h | 70 + .../C/include/antlr3commontreenodestream.h | 336 + .../runtime/C/include/antlr3convertutf.h | 166 + .../runtime/C/include/antlr3cyclicdfa.h | 97 + .../C/include/antlr3debugeventlistener.h | 398 + antlr-3.1.3/runtime/C/include/antlr3defs.h | 606 ++ .../runtime/C/include/antlr3encodings.h | 38 + antlr-3.1.3/runtime/C/include/antlr3errors.h | 53 + .../runtime/C/include/antlr3exception.h | 218 + .../runtime/C/include/antlr3filestream.h | 50 + antlr-3.1.3/runtime/C/include/antlr3input.h | 270 + .../runtime/C/include/antlr3interfaces.h | 234 + .../runtime/C/include/antlr3intstream.h | 205 + antlr-3.1.3/runtime/C/include/antlr3lexer.h | 195 + antlr-3.1.3/runtime/C/include/antlr3memory.h | 36 + antlr-3.1.3/runtime/C/include/antlr3parser.h | 93 + .../runtime/C/include/antlr3parsetree.h | 85 + .../C/include/antlr3recognizersharedstate.h | 218 + .../runtime/C/include/antlr3rewritestreams.h | 180 + antlr-3.1.3/runtime/C/include/antlr3string.h | 273 + .../runtime/C/include/antlr3stringstream.h | 36 + .../runtime/C/include/antlr3tokenstream.h | 293 + .../runtime/C/include/antlr3treeparser.h | 81 + .../runtime/C/src/antlr3baserecognizer.c | 2234 +++++ antlr-3.1.3/runtime/C/src/antlr3basetree.c | 489 + .../runtime/C/src/antlr3basetreeadaptor.c | 802 ++ antlr-3.1.3/runtime/C/src/antlr3bitset.c | 680 ++ antlr-3.1.3/runtime/C/src/antlr3collections.c | 2159 ++++ antlr-3.1.3/runtime/C/src/antlr3commontoken.c | 577 ++ antlr-3.1.3/runtime/C/src/antlr3commontree.c | 542 + .../runtime/C/src/antlr3commontreeadaptor.c | 486 + .../C/src/antlr3commontreenodestream.c | 968 ++ antlr-3.1.3/runtime/C/src/antlr3convertutf.c | 542 + antlr-3.1.3/runtime/C/src/antlr3cyclicdfa.c | 204 + .../runtime/C/src/antlr3debughandlers.c | 1047 ++ antlr-3.1.3/runtime/C/src/antlr3encodings.c | 50 + antlr-3.1.3/runtime/C/src/antlr3exception.c | 190 + antlr-3.1.3/runtime/C/src/antlr3filestream.c | 183 + antlr-3.1.3/runtime/C/src/antlr3inputstream.c | 619 ++ antlr-3.1.3/runtime/C/src/antlr3intstream.c | 66 + antlr-3.1.3/runtime/C/src/antlr3lexer.c | 880 ++ antlr-3.1.3/runtime/C/src/antlr3parser.c | 193 + .../runtime/C/src/antlr3rewritestreams.c | 832 ++ antlr-3.1.3/runtime/C/src/antlr3string.c | 1396 +++ .../runtime/C/src/antlr3stringstream.c | 206 + antlr-3.1.3/runtime/C/src/antlr3tokenstream.c | 1042 ++ antlr-3.1.3/runtime/C/src/antlr3treeparser.c | 247 + .../runtime/C/src/antlr3ucs2inputstream.c | 202 + .../runtime/C/vsrulefiles/antlr3lexer.rules | 199 + .../C/vsrulefiles/antlr3lexerandparser.rules | 201 + .../runtime/C/vsrulefiles/antlr3parser.rules | 201 + .../C/vsrulefiles/antlr3treeparser.rules | 201 + .../runtime/CSharp/Cutting a new release.txt | 43 + antlr-3.1.3/runtime/CSharp/LICENSE.TXT | 30 + .../Libraries/MbUnit/MbUnit.Framework.dll | Bin 0 -> 487424 bytes .../Libraries/MbUnit/MbUnit.MSBuild.Tasks.dll | Bin 0 -> 9216 bytes .../CSharp/Libraries/MbUnit/MbUnit.Tasks.dll | Bin 0 -> 20480 bytes .../MbUnit/QuickGraph.Algorithms.dll | Bin 0 -> 180224 bytes .../CSharp/Libraries/MbUnit/QuickGraph.dll | Bin 0 -> 126976 bytes .../net-1.1/StringTemplate.dll | Bin 0 -> 163840 bytes .../net-1.1/antlr.runtime.dll | Bin 0 -> 114688 bytes .../net-2.0/StringTemplate.dll | Bin 0 -> 155648 bytes .../net-2.0/antlr.runtime.dll | Bin 0 -> 114688 bytes antlr-3.1.3/runtime/CSharp/NOTICE.TXT | 35 + antlr-3.1.3/runtime/CSharp/README.TXT | 103 + .../Sources/Antlr3.Runtime (VS2003).sln | 37 + .../Sources/Antlr3.Runtime (VS2005).sln | 41 + .../ANTLRxxxxStreamFixture.cs | 423 + .../Antlr.Runtime.Tests (VS2003).csproj | 120 + .../Antlr3.Runtime.Tests (VS2005).csproj | 66 + .../Antlr3.Runtime.Tests/ITreeFixture.cs | 457 + .../ITreeNodeStreamFixture.cs | 660 ++ .../Properties/AssemblyInfo.cs | 69 + .../RewriteRuleXxxxStreamFixture.cs | 392 + .../Antlr3.Runtime.Tests/TestDriver.cs | 64 + .../Antlr3.Runtime.Tests/TestFixtureBase.cs | 44 + .../Antlr3.Runtime.Tests/TreeWizardFixture.cs | 515 + .../CollectionUtils.cs | 129 + .../Antlr.Runtime.Collections/HashList.cs | 501 + .../Antlr.Runtime.Collections/StackList.cs | 77 + .../BlankDebugEventListener.cs | 95 + .../Antlr.Runtime.Debug/DebugEventHub.cs | 370 + .../Antlr.Runtime.Debug/DebugEventRepeater.cs | 102 + .../DebugEventSocketProxy.cs | 422 + .../Antlr.Runtime.Debug/DebugParser.cs | 112 + .../Antlr.Runtime.Debug/DebugTokenStream.cs | 189 + .../Antlr.Runtime.Debug/DebugTreeAdaptor.cs | 294 + .../DebugTreeNodeStream.cs | 183 + .../Antlr.Runtime.Debug/DebugTreeParser.cs | 133 + .../IDebugEventListener.cs | 367 + .../Antlr.Runtime.Debug/ParseTreeBuilder.cs | 126 + .../Antlr.Runtime.Debug/Profiler.cs | 522 + .../RemoteDebugEventSocketListener.cs | 633 ++ .../TraceDebugEventListener.cs | 126 + .../Antlr.Runtime.Debug/Tracer.cs | 87 + .../Antlr.Runtime.Misc/ErrorManager.cs | 101 + .../Antlr.Runtime.Misc/Stats.cs | 179 + .../Antlr.Runtime.Tree/BaseTree.cs | 455 + .../Antlr.Runtime.Tree/BaseTreeAdaptor.cs | 382 + .../Antlr.Runtime.Tree/CommonErrorNode.cs | 120 + .../Antlr.Runtime.Tree/CommonTree.cs | 233 + .../Antlr.Runtime.Tree/CommonTreeAdaptor.cs | 239 + .../CommonTreeNodeStream.cs | 663 ++ .../Antlr.Runtime.Tree/ITree.cs | 182 + .../Antlr.Runtime.Tree/ITreeAdaptor.cs | 323 + .../Antlr.Runtime.Tree/ITreeNodeStream.cs | 138 + .../Antlr.Runtime.Tree/ITreeVisitorAction.cs | 22 + .../Antlr.Runtime.Tree/ParseTree.cs | 136 + .../RewriteCardinalityException.cs | 81 + .../RewriteEarlyExitException.cs | 55 + .../RewriteEmptyStreamException.cs | 50 + .../RewriteRuleElementStream.cs | 466 + .../RewriteRuleNodeStream.cs | 133 + .../RewriteRuleSubtreeStream.cs | 227 + .../RewriteRuleTokenStream.cs | 163 + .../Antlr.Runtime.Tree/TreeParser.cs | 201 + .../Antlr.Runtime.Tree/TreePatternLexer.cs | 167 + .../Antlr.Runtime.Tree/TreePatternParser.cs | 189 + .../Antlr.Runtime.Tree/TreeRuleReturnScope.cs | 55 + .../Antlr.Runtime.Tree/TreeVisitor.cs | 46 + .../Antlr.Runtime.Tree/TreeWizard.cs | 542 + .../UnBufferedTreeNodeStream.cs | 695 ++ .../Antlr.Runtime/ANTLRFileStream.cs | 150 + .../Antlr.Runtime/ANTLRInputStream.cs | 120 + .../Antlr.Runtime/ANTLRReaderStream.cs | 149 + .../Antlr.Runtime/ANTLRStringStream.cs | 319 + .../Antlr.Runtime/BaseRecognizer.cs | 1008 ++ .../Antlr3.Runtime/Antlr.Runtime/BitSet.cs | 413 + .../Antlr.Runtime/CharStreamState.cs | 57 + .../Antlr.Runtime/ClassicToken.cs | 161 + .../Antlr.Runtime/CommonToken.cs | 207 + .../Antlr.Runtime/CommonTokenStream.cs | 488 + .../Antlr3.Runtime/Antlr.Runtime/Constants.cs | 51 + .../Antlr3.Runtime/Antlr.Runtime/DFA.cs | 272 + .../Antlr.Runtime/EarlyExitException.cs | 59 + .../Antlr.Runtime/FailedPredicateException.cs | 68 + .../Antlr.Runtime/ICharStream.cs | 85 + .../Antlr.Runtime/IIntStream.cs | 169 + .../Antlr3.Runtime/Antlr.Runtime/IToken.cs | 92 + .../Antlr.Runtime/ITokenSource.cs | 72 + .../Antlr.Runtime/ITokenStream.cs | 82 + .../Antlr3.Runtime/Antlr.Runtime/Lexer.cs | 410 + .../MismatchedNotSetException.cs | 59 + .../Antlr.Runtime/MismatchedRangeException.cs | 70 + .../Antlr.Runtime/MismatchedSetException.cs | 61 + .../Antlr.Runtime/MismatchedTokenException.cs | 71 + .../MismatchedTreeNodeException.cs | 61 + .../Antlr.Runtime/MissingTokenException.cs | 73 + .../Antlr.Runtime/NoViableAltException.cs | 71 + .../Antlr3.Runtime/Antlr.Runtime/Parser.cs | 125 + .../Antlr.Runtime/ParserRuleReturnScope.cs | 76 + .../Antlr.Runtime/RecognitionException.cs | 324 + .../Antlr.Runtime/RecognizerSharedState.cs | 160 + .../Antlr.Runtime/RuleReturnScope.cs | 74 + .../Antlr3.Runtime/Antlr.Runtime/Token.cs | 84 + .../Antlr.Runtime/TokenRewriteStream.cs | 664 ++ .../Antlr.Runtime/UnwantedTokenException.cs | 64 + .../Antlr3.Runtime (VS2003).csproj | 464 + .../Antlr3.Runtime (VS2005).csproj | 174 + .../Sources/Antlr3.Runtime/AssemblyInfo.cs | 111 + .../Antlr3.Runtime/Messages.Designer.cs | 63 + .../Sources/Antlr3.Runtime/Messages.resx | 101 + .../Sources/Antlr3.Runtime/default.build | 132 + .../Antlr.Utility.Tree/DOTTreeGenerator.cs | 226 + .../Antlr3.Utility (VS2003).csproj | 100 + .../Antlr3.Utility (VS2005).csproj | 70 + .../Sources/Antlr3.Utility/AssemblyInfo.cs | 108 + .../Sources/Antlr3.Utility/default.build | 78 + .../runtime/CSharp/Sources/Antlr3_KeyPair.snk | Bin 0 -> 596 bytes .../CSharp/Sources/Antlr3_PublicKey.snk | Bin 0 -> 160 bytes .../CSharp/all.antlr3.runtime.net.build | 329 + .../CSharp/antlr3.runtime.net.common.inc | 62 + .../CSharp/dist/DOT-NET-runtime-3.1.3.zip | Bin 0 -> 219401 bytes antlr-3.1.3/runtime/CSharp/doxyfile | 264 + .../Antlr3.Runtime.Debug.csproj | 97 + .../Antlr3.Runtime.Debug.csproj.vspscc | 10 + .../BlankDebugEventListener.cs | 166 + .../Antlr3.Runtime.Debug/DebugEventHub.cs | 366 + .../DebugEventRepeater.cs | 196 + .../DebugEventSocketProxy.cs | 445 + .../Antlr3.Runtime.Debug/DebugParser.cs | 127 + .../Antlr3.Runtime.Debug/DebugTokenStream.cs | 204 + .../Antlr3.Runtime.Debug/DebugTreeAdaptor.cs | 301 + .../DebugTreeNodeStream.cs | 237 + .../Antlr3.Runtime.Debug/DebugTreeParser.cs | 136 + .../JavaExtensions/DictionaryExtensions.cs | 141 + .../JavaExtensions/EnumeratorExtensions.cs | 44 + .../JavaExtensions/ExceptionExtensions.cs | 99 + .../JavaExtensions/IOExtensions.cs | 94 + .../JavaExtensions/Iterator.cs | 115 + .../JavaExtensions/JSystem.cs | 89 + .../JavaExtensions/ListExtensions.cs | 239 + .../JavaExtensions/ObjectExtensions.cs | 123 + .../JavaExtensions/SetExtensions.cs | 89 + .../JavaExtensions/StackExtensions.cs | 84 + .../JavaExtensions/StringBuilderExtensions.cs | 75 + .../JavaExtensions/StringExtensions.cs | 156 + .../JavaExtensions/StringTokenizer.cs | 87 + .../JavaExtensions/SubList.cs | 423 + .../JavaExtensions/TreeExtensions.cs | 53 + .../JavaExtensions/TypeExtensions.cs | 102 + .../Antlr3.Runtime.Debug/Misc/Stats.cs | 143 + .../Antlr3.Runtime.Debug/ParseTreeBuilder.cs | 140 + .../Antlr3.Runtime.Debug/ParserDebugger.cs | 49 + .../Sources/Antlr3.Runtime.Debug/Profiler.cs | 565 ++ .../Properties/AssemblyInfo.cs | 68 + .../RemoteDebugEventSocketListener.cs | 728 ++ .../TraceDebugEventListener.cs | 135 + .../Sources/Antlr3.Runtime.Debug/Tracer.cs | 85 + .../Antlr3.Runtime.JavaExtensions.csproj | 72 + ...ntlr3.Runtime.JavaExtensions.csproj.vspscc | 10 + .../DictionaryExtensions.cs | 102 + .../IOExtensions.cs | 94 + .../Antlr3.Runtime.JavaExtensions/JSystem.cs | 89 + .../LexerExtensions.cs | 42 + .../Properties/AssemblyInfo.cs | 68 + .../Antlr3.Runtime.Test.csproj | 184 + .../Antlr3.Runtime.Test.csproj.vspscc | 10 + .../BuildOptions/DebugGrammar.g3 | 100 + .../BuildOptions/DebugGrammarLexer.cs | 691 ++ .../BuildOptions/DebugGrammarLexerHelper.cs | 32 + .../BuildOptions/DebugGrammarParser.cs | 1551 +++ .../BuildOptions/DebugGrammarParserHelper.cs | 40 + .../BuildOptions/DebugTreeGrammar.cs | 858 ++ .../BuildOptions/DebugTreeGrammar.g3 | 88 + .../BuildOptions/DebugTreeGrammarHelper.cs | 116 + .../BuildOptions/ProfileGrammar.g3 | 100 + .../BuildOptions/ProfileGrammarLexer.cs | 691 ++ .../BuildOptions/ProfileGrammarLexerHelper.cs | 32 + .../BuildOptions/ProfileGrammarParser.cs | 1554 +++ .../ProfileGrammarParserHelper.cs | 40 + .../BuildOptions/ProfileTreeGrammar.cs | 863 ++ .../BuildOptions/ProfileTreeGrammar.g3 | 88 + .../BuildOptions/ProfileTreeGrammarHelper.cs | 116 + .../Antlr3.Runtime.Test/JavaCompat/Expr.g3 | 110 + .../JavaCompat/ExprLexer.cs | 617 ++ .../JavaCompat/ExprParser.cs | 533 + .../Properties/AssemblyInfo.cs | 68 + .../CSharp3/Sources/Antlr3.Runtime.sln | 36 + .../CSharp3/Sources/Antlr3.Runtime.vssscc | 10 + .../Sources/Antlr3.Runtime/ANTLRFileStream.cs | 80 + .../Antlr3.Runtime/ANTLRInputStream.cs | 85 + .../Antlr3.Runtime/ANTLRReaderStream.cs | 97 + .../Antlr3.Runtime/ANTLRStringStream.cs | 293 + .../Antlr3.Runtime/Antlr3.Runtime.csproj | 128 + .../Antlr3.Runtime.csproj.vspscc | 10 + .../Sources/Antlr3.Runtime/BaseRecognizer.cs | 1148 +++ .../CSharp3/Sources/Antlr3.Runtime/BitSet.cs | 388 + .../Antlr3.Runtime/CharStreamConstants.cs | 41 + .../Sources/Antlr3.Runtime/CharStreamState.cs | 56 + .../Sources/Antlr3.Runtime/ClassicToken.cs | 192 + .../Sources/Antlr3.Runtime/CommonToken.cs | 255 + .../Antlr3.Runtime/CommonTokenStream.cs | 489 + .../CSharp3/Sources/Antlr3.Runtime/DFA.cs | 291 + .../Debug/DebugEventListenerConstants.cs | 46 + .../Debug/IDebugEventListener.cs | 387 + .../Antlr3.Runtime/EarlyExitException.cs | 52 + .../FailedPredicateException.cs | 65 + .../Sources/Antlr3.Runtime/ICharStream.cs | 72 + .../Sources/Antlr3.Runtime/IIntStream.cs | 158 + .../CSharp3/Sources/Antlr3.Runtime/IToken.cs | 94 + .../Sources/Antlr3.Runtime/ITokenSource.cs | 78 + .../Sources/Antlr3.Runtime/ITokenStream.cs | 86 + .../CSharp3/Sources/Antlr3.Runtime/Lexer.cs | 439 + .../Sources/Antlr3.Runtime/Misc/FastQueue.cs | 124 + .../Antlr3.Runtime/Misc/LookaheadStream.cs | 231 + .../MismatchedNotSetException.cs | 53 + .../MismatchedRangeException.cs | 58 + .../Antlr3.Runtime/MismatchedSetException.cs | 56 + .../MismatchedTokenException.cs | 62 + .../MismatchedTreeNodeException.cs | 58 + .../Antlr3.Runtime/MissingTokenException.cs | 73 + .../Antlr3.Runtime/NoViableAltException.cs | 70 + .../CSharp3/Sources/Antlr3.Runtime/Parser.cs | 148 + .../Antlr3.Runtime/ParserRuleReturnScope.cs | 79 + .../Antlr3.Runtime/Properties/AssemblyInfo.cs | 68 + .../Antlr3.Runtime/RecognitionException.cs | 223 + .../Antlr3.Runtime/RecognizerSharedState.cs | 149 + .../Sources/Antlr3.Runtime/RuleReturnScope.cs | 78 + .../Sources/Antlr3.Runtime/TokenConstants.cs | 74 + .../Antlr3.Runtime/TokenRewriteStream.cs | 696 ++ .../Sources/Antlr3.Runtime/Tree/BaseTree.cs | 509 + .../Antlr3.Runtime/Tree/BaseTreeAdaptor.cs | 348 + .../Tree/BufferedTreeNodeStream.cs | 627 ++ .../Antlr3.Runtime/Tree/CommonErrorNode.cs | 142 + .../Sources/Antlr3.Runtime/Tree/CommonTree.cs | 266 + .../Antlr3.Runtime/Tree/CommonTreeAdaptor.cs | 239 + .../Tree/CommonTreeNodeStream.cs | 250 + .../Sources/Antlr3.Runtime/Tree/ITree.cs | 173 + .../Antlr3.Runtime/Tree/ITreeAdaptor.cs | 328 + .../Antlr3.Runtime/Tree/ITreeNodeStream.cs | 144 + .../Antlr3.Runtime/Tree/ITreeVisitorAction.cs | 88 + .../Sources/Antlr3.Runtime/Tree/ParseTree.cs | 167 + .../Tree/RewriteCardinalityException.cs | 61 + .../Tree/RewriteEarlyExitException.cs | 50 + .../Tree/RewriteEmptyStreamException.cs | 45 + .../Tree/RewriteRuleElementStream.cs | 253 + .../Tree/RewriteRuleNodeStream.cs | 81 + .../Tree/RewriteRuleSubtreeStream.cs | 95 + .../Tree/RewriteRuleTokenStream.cs | 86 + .../Antlr3.Runtime/Tree/TreeConstants.cs | 39 + .../Sources/Antlr3.Runtime/Tree/TreeFilter.cs | 104 + .../Antlr3.Runtime/Tree/TreeIterator.cs | 177 + .../Sources/Antlr3.Runtime/Tree/TreeParser.cs | 205 + .../Antlr3.Runtime/Tree/TreePatternLexer.cs | 162 + .../Antlr3.Runtime/Tree/TreePatternParser.cs | 186 + .../Antlr3.Runtime/Tree/TreeRewriter.cs | 123 + .../Tree/TreeRuleReturnScope.cs | 55 + .../Antlr3.Runtime/Tree/TreeVisitor.cs | 82 + .../Sources/Antlr3.Runtime/Tree/TreeWizard.cs | 736 ++ .../Antlr3.Runtime/UnwantedTokenException.cs | 77 + antlr-3.1.3/runtime/Delphi/LICENSE.TXT | 31 + antlr-3.1.3/runtime/Delphi/NOTICE.TXT | 35 + antlr-3.1.3/runtime/Delphi/README.TXT | 265 + .../Antlr.Runtime.Collections.Tests.pas | 134 + .../Antlr.Runtime.Tests.pas | 183 + .../Antlr.Runtime.Tools.Tests.pas | 633 ++ .../Antlr.Runtime.Tree.Tests.pas | 2136 ++++ .../Antlr3.Runtime.Tests/TestDriver.dpr | 37 + .../Antlr3.Runtime.Tests/TestDriver.dproj | 115 + .../Antlr3.Runtime.Tests/TestDriver.res | Bin 0 -> 5280 bytes .../Antlr.Runtime.Collections.pas | 431 + .../Antlr3.Runtime/Antlr.Runtime.Tools.pas | 998 ++ .../Antlr3.Runtime/Antlr.Runtime.Tree.pas | 5063 ++++++++++ .../Sources/Antlr3.Runtime/Antlr.Runtime.pas | 6563 +++++++++++++ antlr-3.1.3/runtime/Java/antlr.config | 0 antlr-3.1.3/runtime/Java/doxyfile | 264 + antlr-3.1.3/runtime/Java/pom.xml | 119 + .../org/antlr/runtime/ANTLRFileStream.java | 78 + .../org/antlr/runtime/ANTLRInputStream.java | 70 + .../org/antlr/runtime/ANTLRReaderStream.java | 95 + .../org/antlr/runtime/ANTLRStringStream.java | 228 + .../org/antlr/runtime/BaseRecognizer.java | 879 ++ .../main/java/org/antlr/runtime/BitSet.java | 325 + .../java/org/antlr/runtime/CharStream.java | 57 + .../org/antlr/runtime/CharStreamState.java | 45 + .../java/org/antlr/runtime/ClassicToken.java | 141 + .../java/org/antlr/runtime/CommonToken.java | 185 + .../org/antlr/runtime/CommonTokenStream.java | 379 + .../src/main/java/org/antlr/runtime/DFA.java | 229 + .../org/antlr/runtime/EarlyExitException.java | 41 + .../runtime/FailedPredicateException.java | 54 + .../java/org/antlr/runtime/IntStream.java | 122 + .../main/java/org/antlr/runtime/Lexer.java | 335 + .../runtime/MismatchedNotSetException.java | 41 + .../runtime/MismatchedRangeException.java | 45 + .../antlr/runtime/MismatchedSetException.java | 44 + .../runtime/MismatchedTokenException.java | 45 + .../runtime/MismatchedTreeNodeException.java | 49 + .../antlr/runtime/MissingTokenException.java | 56 + .../antlr/runtime/NoViableAltException.java | 57 + .../main/java/org/antlr/runtime/Parser.java | 98 + .../antlr/runtime/ParserRuleReturnScope.java | 52 + .../antlr/runtime/RecognitionException.java | 180 + .../antlr/runtime/RecognizerSharedState.java | 119 + .../org/antlr/runtime/RuleReturnScope.java | 42 + .../org/antlr/runtime/SerializedGrammar.java | 170 + .../main/java/org/antlr/runtime/Token.java | 91 + .../org/antlr/runtime/TokenRewriteStream.java | 566 ++ .../java/org/antlr/runtime/TokenSource.java | 54 + .../java/org/antlr/runtime/TokenStream.java | 68 + .../antlr/runtime/UnwantedTokenException.java | 53 + .../debug/BlankDebugEventListener.java | 77 + .../antlr/runtime/debug/DebugEventHub.java | 292 + .../runtime/debug/DebugEventListener.java | 323 + .../runtime/debug/DebugEventRepeater.java | 88 + .../runtime/debug/DebugEventSocketProxy.java | 354 + .../org/antlr/runtime/debug/DebugParser.java | 97 + .../antlr/runtime/debug/DebugTokenStream.java | 150 + .../antlr/runtime/debug/DebugTreeAdaptor.java | 250 + .../runtime/debug/DebugTreeNodeStream.java | 153 + .../antlr/runtime/debug/DebugTreeParser.java | 109 + .../antlr/runtime/debug/ParseTreeBuilder.java | 109 + .../org/antlr/runtime/debug/Profiler.java | 506 + .../debug/RemoteDebugEventSocketListener.java | 527 + .../debug/TraceDebugEventListener.java | 96 + .../java/org/antlr/runtime/debug/Tracer.java | 65 + .../org/antlr/runtime/misc/FastQueue.java | 93 + .../java/org/antlr/runtime/misc/IntArray.java | 87 + .../antlr/runtime/misc/LookaheadStream.java | 163 + .../java/org/antlr/runtime/misc/Stats.java | 144 + .../java/org/antlr/runtime/tree/BaseTree.java | 349 + .../antlr/runtime/tree/BaseTreeAdaptor.java | 278 + .../runtime/tree/BufferedTreeNodeStream.java | 478 + .../antlr/runtime/tree/CommonErrorNode.java | 108 + .../org/antlr/runtime/tree/CommonTree.java | 185 + .../antlr/runtime/tree/CommonTreeAdaptor.java | 168 + .../runtime/tree/CommonTreeNodeStream.java | 167 + .../antlr/runtime/tree/DOTTreeGenerator.java | 224 + .../org/antlr/runtime/tree/ParseTree.java | 119 + .../tree/RewriteCardinalityException.java | 47 + .../tree/RewriteEarlyExitException.java | 39 + .../tree/RewriteEmptyStreamException.java | 35 + .../tree/RewriteRuleElementStream.java | 211 + .../runtime/tree/RewriteRuleNodeStream.java | 70 + .../tree/RewriteRuleSubtreeStream.java | 83 + .../runtime/tree/RewriteRuleTokenStream.java | 76 + .../java/org/antlr/runtime/tree/Tree.java | 127 + .../org/antlr/runtime/tree/TreeAdaptor.java | 263 + .../org/antlr/runtime/tree/TreeFilter.java | 91 + .../org/antlr/runtime/tree/TreeIterator.java | 131 + .../antlr/runtime/tree/TreeNodeStream.java | 101 + .../org/antlr/runtime/tree/TreeParser.java | 168 + .../antlr/runtime/tree/TreePatternLexer.java | 135 + .../antlr/runtime/tree/TreePatternParser.java | 156 + .../org/antlr/runtime/tree/TreeRewriter.java | 106 + .../runtime/tree/TreeRuleReturnScope.java | 41 + .../org/antlr/runtime/tree/TreeVisitor.java | 42 + .../antlr/runtime/tree/TreeVisitorAction.java | 19 + .../org/antlr/runtime/tree/TreeWizard.java | 528 + antlr-3.1.3/runtime/JavaScript/AUTHORS | 3 + antlr-3.1.3/runtime/JavaScript/ChangeLog | 2 + antlr-3.1.3/runtime/JavaScript/build/README | 22 + .../JavaScript/build/antlr3.properties | 55 + .../runtime/JavaScript/build/build.xml | 185 + .../runtime/JavaScript/build/license.txt | 10 + .../runtime/JavaScript/src/org/antlr.js | 504 + .../src/org/antlr/runtime/ANTLRFileStream.js | 63 + .../org/antlr/runtime/ANTLRStringStream.js | 318 + .../src/org/antlr/runtime/BaseRecognizer.js | 954 ++ .../src/org/antlr/runtime/BitSet.js | 706 ++ .../src/org/antlr/runtime/CharStream.js | 20 + .../src/org/antlr/runtime/CommonToken.js | 147 + .../org/antlr/runtime/CommonTokenStream.js | 321 + .../JavaScript/src/org/antlr/runtime/DFA.js | 149 + .../org/antlr/runtime/EarlyExitException.js | 23 + .../antlr/runtime/FailedPredicateException.js | 34 + .../runtime/IndexOutOfBoundsExceptions.js | 7 + .../JavaScript/src/org/antlr/runtime/Lexer.js | 284 + .../runtime/MismatchedNotSetException.js | 13 + .../runtime/MismatchedRangeExceptions.js | 20 + .../antlr/runtime/MismatchedSetException.js | 15 + .../antlr/runtime/MismatchedTokenException.js | 19 + .../runtime/MismatchedTreeNodeException.js | 17 + .../antlr/runtime/MissingTokenException.js | 28 + .../org/antlr/runtime/NoViableAltException.js | 24 + .../src/org/antlr/runtime/Parser.js | 71 + .../antlr/runtime/ParserRuleReturnScope.js | 26 + .../org/antlr/runtime/RecognitionException.js | 181 + .../antlr/runtime/RecognizerSharedState.js | 90 + .../JavaScript/src/org/antlr/runtime/Token.js | 42 + .../org/antlr/runtime/TokenRewriteStream.js | 461 + .../antlr/runtime/UnwantedTokenException.js | 26 + .../src/org/antlr/runtime/tree/BaseTree.js | 282 + .../org/antlr/runtime/tree/BaseTreeAdaptor.js | 210 + .../org/antlr/runtime/tree/CommonErrorNode.js | 68 + .../src/org/antlr/runtime/tree/CommonTree.js | 135 + .../antlr/runtime/tree/CommonTreeAdaptor.js | 171 + .../runtime/tree/CommonTreeNodeStream.js | 405 + .../tree/RewriteCardinalityException.js | 19 + .../runtime/tree/RewriteEarlyExitException.js | 15 + .../tree/RewriteEmptyStreamException.js | 12 + .../runtime/tree/RewriteRuleElementStream.js | 148 + .../runtime/tree/RewriteRuleNodeStream.js | 24 + .../runtime/tree/RewriteRuleSubtreeStream.js | 38 + .../runtime/tree/RewriteRuleTokenStream.js | 28 + .../src/org/antlr/runtime/tree/Tree.js | 11 + .../org/antlr/runtime/tree/TreeNodeStream.js | 6 + .../src/org/antlr/runtime/tree/TreeParser.js | 124 + .../antlr/runtime/tree/TreeRuleReturnScope.js | 12 + .../JavaScript/tests/functional/Python.g | 601 ++ .../JavaScript/tests/functional/all.html | 122 + .../tests/functional/rhino-python.extensions | 277 + .../tests/functional/rhino-python.input | 210 + .../tests/functional/rhino-python.output | 24 + .../tests/functional/rhino-python.prog | 80 + .../JavaScript/tests/functional/t001lexer.g | 6 + .../tests/functional/t001lexer.html | 57 + .../JavaScript/tests/functional/t002lexer.g | 7 + .../tests/functional/t002lexer.html | 58 + .../JavaScript/tests/functional/t003lexer.g | 8 + .../tests/functional/t003lexer.html | 62 + .../JavaScript/tests/functional/t004lexer.g | 6 + .../tests/functional/t004lexer.html | 78 + .../JavaScript/tests/functional/t005lexer.g | 6 + .../tests/functional/t005lexer.html | 85 + .../JavaScript/tests/functional/t006lexer.g | 6 + .../tests/functional/t006lexer.html | 69 + .../JavaScript/tests/functional/t007lexer.g | 6 + .../tests/functional/t007lexer.html | 66 + .../JavaScript/tests/functional/t008lexer.g | 6 + .../tests/functional/t008lexer.html | 74 + .../JavaScript/tests/functional/t009lexer.g | 6 + .../tests/functional/t009lexer.html | 75 + .../JavaScript/tests/functional/t010lexer.g | 7 + .../tests/functional/t010lexer.html | 87 + .../JavaScript/tests/functional/t011lexer.g | 19 + .../tests/functional/t011lexer.html | 87 + .../tests/functional/t012lexerXML.g | 127 + .../tests/functional/t012lexerXML.html | 187 + .../JavaScript/tests/functional/t013parser.g | 23 + .../tests/functional/t013parser.html | 45 + .../JavaScript/tests/functional/t014parser.g | 36 + .../tests/functional/t014parser.html | 91 + .../JavaScript/tests/functional/t015calc.g | 50 + .../JavaScript/tests/functional/t015calc.html | 66 + .../JavaScript/tests/functional/t016actions.g | 31 + .../tests/functional/t016actions.html | 33 + .../JavaScript/tests/functional/t017parser.g | 91 + .../tests/functional/t017parser.html | 68 + .../JavaScript/tests/functional/t018llstar.g | 110 + .../tests/functional/t018llstar.html | 61 + .../JavaScript/tests/functional/t019lexer.g | 64 + .../tests/functional/t019lexer.html | 43 + .../JavaScript/tests/functional/t020fuzzy.g | 95 + .../tests/functional/t020fuzzy.html | 62 + .../JavaScript/tests/functional/t021hoist.g | 37 + .../tests/functional/t021hoist.html | 47 + .../JavaScript/tests/functional/t022scopes.g | 132 + .../tests/functional/t022scopes.html | 167 + .../JavaScript/tests/functional/t023scopes.g | 18 + .../tests/functional/t023scopes.html | 39 + .../JavaScript/tests/functional/t024finally.g | 19 + .../tests/functional/t024finally.html | 39 + .../functional/t025lexerRulePropertyRef.g | 18 + .../functional/t025lexerRulePropertyRef.html | 72 + .../JavaScript/tests/functional/t026actions.g | 41 + .../tests/functional/t026actions.html | 36 + .../JavaScript/tests/functional/t027eof.g | 8 + .../JavaScript/tests/functional/t027eof.html | 33 + .../tests/functional/t029synpredgate.g | 16 + .../tests/functional/t029synpredgate.html | 29 + .../tests/functional/t030specialStates.g | 22 + .../tests/functional/t030specialStates.html | 69 + .../tests/functional/t031emptyAlt.g | 16 + .../tests/functional/t031emptyAlt.html | 69 + .../tests/functional/t032subrulePredict.g | 8 + .../tests/functional/t032subrulePredict.html | 57 + .../tests/functional/t033backtracking.g | 519 + .../tests/functional/t033backtracking.html | 45 + .../functional/t034tokenLabelPropertyRef.g | 33 + .../functional/t034tokenLabelPropertyRef.html | 54 + .../functional/t035ruleLabelPropertyRef.g | 16 + .../functional/t035ruleLabelPropertyRef.html | 60 + .../functional/t036multipleReturnValues.g | 25 + .../functional/t036multipleReturnValues.html | 56 + .../tests/functional/t037rulePropertyRef.g | 15 + .../tests/functional/t037rulePropertyRef.html | 57 + .../tests/functional/t038lexerRuleLabel.g | 28 + .../tests/functional/t038lexerRuleLabel.html | 41 + .../JavaScript/tests/functional/t039labels.g | 18 + .../tests/functional/t039labels.html | 62 + .../JavaScript/tests/functional/t040bug80.g | 13 + .../tests/functional/t040bug80.html | 41 + .../tests/functional/t041parameters.g | 16 + .../tests/functional/t041parameters.html | 54 + .../JavaScript/tests/functional/t042ast.g | 359 + .../JavaScript/tests/functional/t042ast.html | 463 + .../JavaScript/tests/functional/t043synpred.g | 14 + .../tests/functional/t043synpred.html | 51 + .../JavaScript/tests/functional/t044trace.g | 12 + .../tests/functional/t044trace.html | 76 + .../JavaScript/tests/functional/t045dfabug.g | 31 + .../tests/functional/t045dfabug.html | 52 + .../JavaScript/tests/functional/t046rewrite.g | 56 + .../tests/functional/t046rewrite.html | 82 + .../tests/functional/t047treeparser.g | 113 + .../tests/functional/t047treeparser.html | 129 + .../tests/functional/t047treeparserWalker.g | 68 + .../JavaScript/tests/functional/t048rewrite.g | 9 + .../tests/functional/t048rewrite.html | 285 + .../tests/functional/t049treeparser.html | 182 + .../tests/functional/t049treeparsera.g | 9 + .../tests/functional/t049treeparseraWalker.g | 9 + .../tests/functional/t049treeparserb.g | 9 + .../tests/functional/t049treeparserbWalker.g | 9 + .../tests/functional/t049treeparserc.g | 11 + .../tests/functional/t049treeparsercWalker.g | 9 + .../tests/functional/t049treeparserd.g | 11 + .../tests/functional/t049treeparserdWalker.g | 9 + .../tests/functional/t049treeparsere.g | 11 + .../tests/functional/t049treeparsereWalker.g | 9 + .../tests/functional/t049treeparserf.g | 9 + .../tests/functional/t049treeparserfWalker.g | 9 + .../tests/functional/t049treeparserg.g | 10 + .../tests/functional/t049treeparsergWalker.g | 9 + .../tests/functional/t049treeparserh.g | 10 + .../tests/functional/t049treeparserhWalker.g | 10 + .../tests/functional/t049treeparseri.g | 10 + .../tests/functional/t049treeparseriWalker.g | 8 + .../tests/functional/t051treeRewriteAST.html | 454 + .../tests/functional/t051treeRewriteASTa.g | 9 + .../functional/t051treeRewriteASTaWalker.g | 10 + .../tests/functional/t051treeRewriteASTaa.g | 9 + .../functional/t051treeRewriteASTaaWalker.g | 14 + .../tests/functional/t051treeRewriteASTab.g | 9 + .../functional/t051treeRewriteASTabWalker.g | 13 + .../tests/functional/t051treeRewriteASTac.g | 9 + .../functional/t051treeRewriteASTacWalker.g | 10 + .../tests/functional/t051treeRewriteASTb.g | 9 + .../functional/t051treeRewriteASTbWalker.g | 9 + .../tests/functional/t051treeRewriteASTc.g | 9 + .../functional/t051treeRewriteASTcWalker.g | 8 + .../tests/functional/t051treeRewriteASTd.g | 9 + .../functional/t051treeRewriteASTdWalker.g | 10 + .../tests/functional/t051treeRewriteASTe.g | 9 + .../functional/t051treeRewriteASTeWalker.g | 9 + .../tests/functional/t051treeRewriteASTf.g | 9 + .../functional/t051treeRewriteASTfWalker.g | 9 + .../tests/functional/t051treeRewriteASTg.g | 9 + .../functional/t051treeRewriteASTgWalker.g | 11 + .../tests/functional/t051treeRewriteASTh.g | 9 + .../functional/t051treeRewriteASThWalker.g | 9 + .../tests/functional/t051treeRewriteASTi.g | 9 + .../functional/t051treeRewriteASTiWalker.g | 10 + .../tests/functional/t051treeRewriteASTj.g | 9 + .../functional/t051treeRewriteASTjWalker.g | 10 + .../tests/functional/t051treeRewriteASTk.g | 9 + .../functional/t051treeRewriteASTkWalker.g | 10 + .../tests/functional/t051treeRewriteASTl.g | 9 + .../functional/t051treeRewriteASTlWalker.g | 10 + .../tests/functional/t051treeRewriteASTm.g | 9 + .../functional/t051treeRewriteASTmWalker.g | 10 + .../tests/functional/t051treeRewriteASTn.g | 9 + .../functional/t051treeRewriteASTnWalker.g | 11 + .../tests/functional/t051treeRewriteASTo.g | 9 + .../functional/t051treeRewriteASToWalker.g | 10 + .../tests/functional/t051treeRewriteASTp.g | 9 + .../functional/t051treeRewriteASTpWalker.g | 10 + .../tests/functional/t051treeRewriteASTq.g | 9 + .../functional/t051treeRewriteASTqWalker.g | 10 + .../tests/functional/t051treeRewriteASTr.g | 9 + .../functional/t051treeRewriteASTrWalker.g | 9 + .../tests/functional/t051treeRewriteASTs.g | 9 + .../functional/t051treeRewriteASTsWalker.g | 9 + .../tests/functional/t051treeRewriteASTt.g | 9 + .../functional/t051treeRewriteASTtWalker.g | 12 + .../tests/functional/t051treeRewriteASTu.g | 9 + .../functional/t051treeRewriteASTuWalker.g | 12 + .../tests/functional/t051treeRewriteASTv.g | 9 + .../functional/t051treeRewriteASTvWalker.g | 13 + .../tests/functional/t051treeRewriteASTw.g | 9 + .../functional/t051treeRewriteASTwWalker.g | 13 + .../tests/functional/t051treeRewriteASTx.g | 9 + .../functional/t051treeRewriteASTxWalker.g | 14 + .../tests/functional/t051treeRewriteASTy.g | 9 + .../functional/t051treeRewriteASTyWalker.g | 14 + .../tests/functional/t051treeRewriteASTz.g | 9 + .../functional/t051treeRewriteASTzWalker.g | 14 + .../tests/functional/t052import.html | 175 + .../tests/functional/t052importM1.g | 8 + .../tests/functional/t052importM2.g | 8 + .../tests/functional/t052importM3.g | 7 + .../tests/functional/t052importM4.g | 8 + .../tests/functional/t052importM5.g | 10 + .../tests/functional/t052importM6.g | 7 + .../tests/functional/t052importM7.g | 7 + .../tests/functional/t052importM8.g | 7 + .../tests/functional/t052importS1.g | 11 + .../tests/functional/t052importS2.g | 10 + .../tests/functional/t052importS3.g | 14 + .../tests/functional/t052importS4.g | 11 + .../tests/functional/t052importS5.g | 11 + .../tests/functional/t052importS6.g | 11 + .../tests/functional/t052importS7.g | 11 + .../tests/functional/t052importS8.g | 10 + .../tests/functional/t052importT4.g | 10 + .../tests/functional/t052importT5.g | 11 + .../tests/functional/t053hetero.html | 339 + .../JavaScript/tests/functional/t053heteroT.g | 9 + .../tests/functional/t053heteroT1.g | 20 + .../tests/functional/t053heteroT10.g | 22 + .../tests/functional/t053heteroT11.g | 20 + .../tests/functional/t053heteroT12.g | 21 + .../tests/functional/t053heteroT13.g | 9 + .../tests/functional/t053heteroT14.g | 9 + .../tests/functional/t053heteroT15.g | 9 + .../tests/functional/t053heteroT16.g | 9 + .../tests/functional/t053heteroT17.g | 9 + .../tests/functional/t053heteroT18.g | 9 + .../tests/functional/t053heteroT2.g | 20 + .../tests/functional/t053heteroT3.g | 20 + .../tests/functional/t053heteroT4.g | 21 + .../tests/functional/t053heteroT5.g | 20 + .../tests/functional/t053heteroT6.g | 20 + .../tests/functional/t053heteroT7.g | 20 + .../tests/functional/t053heteroT8.g | 20 + .../tests/functional/t053heteroT9.g | 45 + .../tests/functional/t053heteroTP.g | 19 + .../tests/functional/t053heteroTP13.g | 28 + .../tests/functional/t053heteroTP14.g | 28 + .../tests/functional/t053heteroTP15.g | 21 + .../tests/functional/t053heteroTP16.g | 21 + .../tests/functional/t053heteroTP17.g | 20 + .../tests/functional/t053heteroTP18.g | 26 + .../tests/functional/t056lexer.html | 150 + .../JavaScript/tests/functional/t056lexer1.g | 5 + .../JavaScript/tests/functional/t056lexer10.g | 6 + .../JavaScript/tests/functional/t056lexer11.g | 4 + .../JavaScript/tests/functional/t056lexer12.g | 3 + .../JavaScript/tests/functional/t056lexer13.g | 4 + .../JavaScript/tests/functional/t056lexer14.g | 4 + .../JavaScript/tests/functional/t056lexer15.g | 4 + .../JavaScript/tests/functional/t056lexer2.g | 6 + .../JavaScript/tests/functional/t056lexer3.g | 6 + .../JavaScript/tests/functional/t056lexer4.g | 7 + .../JavaScript/tests/functional/t056lexer5.g | 6 + .../JavaScript/tests/functional/t056lexer6.g | 6 + .../JavaScript/tests/functional/t056lexer7.g | 6 + .../JavaScript/tests/functional/t056lexer8.g | 6 + .../JavaScript/tests/functional/t056lexer9.g | 6 + .../tests/functional/t057autoAST.html | 495 + .../tests/functional/t057autoAST1.g | 6 + .../tests/functional/t057autoAST10.g | 6 + .../tests/functional/t057autoAST11.g | 6 + .../tests/functional/t057autoAST12.g | 6 + .../tests/functional/t057autoAST13.g | 6 + .../tests/functional/t057autoAST14.g | 6 + .../tests/functional/t057autoAST15.g | 6 + .../tests/functional/t057autoAST16.g | 7 + .../tests/functional/t057autoAST17.g | 7 + .../tests/functional/t057autoAST18.g | 7 + .../tests/functional/t057autoAST19.g | 7 + .../tests/functional/t057autoAST2.g | 6 + .../tests/functional/t057autoAST20.g | 6 + .../tests/functional/t057autoAST21.g | 7 + .../tests/functional/t057autoAST22.g | 8 + .../tests/functional/t057autoAST23.g | 6 + .../tests/functional/t057autoAST24.g | 6 + .../tests/functional/t057autoAST25.g | 6 + .../tests/functional/t057autoAST26.g | 6 + .../tests/functional/t057autoAST27.g | 6 + .../tests/functional/t057autoAST28.g | 6 + .../tests/functional/t057autoAST29.g | 6 + .../tests/functional/t057autoAST3.g | 6 + .../tests/functional/t057autoAST30.g | 6 + .../tests/functional/t057autoAST31.g | 6 + .../tests/functional/t057autoAST32.g | 6 + .../tests/functional/t057autoAST33.g | 7 + .../tests/functional/t057autoAST34.g | 6 + .../tests/functional/t057autoAST35.g | 6 + .../tests/functional/t057autoAST36.g | 12 + .../tests/functional/t057autoAST37.g | 12 + .../tests/functional/t057autoAST38.g | 6 + .../tests/functional/t057autoAST39.g | 6 + .../tests/functional/t057autoAST4.g | 6 + .../tests/functional/t057autoAST40.g | 10 + .../tests/functional/t057autoAST41.g | 9 + .../tests/functional/t057autoAST42.g | 9 + .../tests/functional/t057autoAST43.g | 8 + .../tests/functional/t057autoAST44.g | 10 + .../tests/functional/t057autoAST45.g | 6 + .../tests/functional/t057autoAST46.g | 7 + .../tests/functional/t057autoAST47.g | 8 + .../tests/functional/t057autoAST48.g | 8 + .../tests/functional/t057autoAST49.g | 6 + .../tests/functional/t057autoAST5.g | 6 + .../tests/functional/t057autoAST50.g | 7 + .../tests/functional/t057autoAST51.g | 8 + .../tests/functional/t057autoAST52.g | 6 + .../tests/functional/t057autoAST53.g | 8 + .../tests/functional/t057autoAST54.g | 9 + .../tests/functional/t057autoAST6.g | 6 + .../tests/functional/t057autoAST7.g | 6 + .../tests/functional/t057autoAST8.g | 6 + .../tests/functional/t057autoAST9.g | 6 + .../tests/functional/t058rewriteAST.html | 732 ++ .../tests/functional/t058rewriteAST1.g | 6 + .../tests/functional/t058rewriteAST10.g | 8 + .../tests/functional/t058rewriteAST11.g | 7 + .../tests/functional/t058rewriteAST12.g | 7 + .../tests/functional/t058rewriteAST13.g | 8 + .../tests/functional/t058rewriteAST14.g | 7 + .../tests/functional/t058rewriteAST15.g | 7 + .../tests/functional/t058rewriteAST16.g | 7 + .../tests/functional/t058rewriteAST17.g | 8 + .../tests/functional/t058rewriteAST18.g | 8 + .../tests/functional/t058rewriteAST19.g | 8 + .../tests/functional/t058rewriteAST2.g | 7 + .../tests/functional/t058rewriteAST20.g | 7 + .../tests/functional/t058rewriteAST21.g | 8 + .../tests/functional/t058rewriteAST22.g | 7 + .../tests/functional/t058rewriteAST23.g | 7 + .../tests/functional/t058rewriteAST24.g | 10 + .../tests/functional/t058rewriteAST25.g | 10 + .../tests/functional/t058rewriteAST26.g | 8 + .../tests/functional/t058rewriteAST27.g | 8 + .../tests/functional/t058rewriteAST28.g | 8 + .../tests/functional/t058rewriteAST29.g | 9 + .../tests/functional/t058rewriteAST3.g | 7 + .../tests/functional/t058rewriteAST30.g | 9 + .../tests/functional/t058rewriteAST31.g | 9 + .../tests/functional/t058rewriteAST32.g | 9 + .../tests/functional/t058rewriteAST33.g | 9 + .../tests/functional/t058rewriteAST34.g | 11 + .../tests/functional/t058rewriteAST35.g | 10 + .../tests/functional/t058rewriteAST36.g | 14 + .../tests/functional/t058rewriteAST37.g | 11 + .../tests/functional/t058rewriteAST38.g | 8 + .../tests/functional/t058rewriteAST39.g | 8 + .../tests/functional/t058rewriteAST4.g | 7 + .../tests/functional/t058rewriteAST40.g | 9 + .../tests/functional/t058rewriteAST41.g | 9 + .../tests/functional/t058rewriteAST42.g | 7 + .../tests/functional/t058rewriteAST43.g | 8 + .../tests/functional/t058rewriteAST44.g | 8 + .../tests/functional/t058rewriteAST45.g | 9 + .../tests/functional/t058rewriteAST46.g | 7 + .../tests/functional/t058rewriteAST47.g | 8 + .../tests/functional/t058rewriteAST48.g | 8 + .../tests/functional/t058rewriteAST49.g | 8 + .../tests/functional/t058rewriteAST5.g | 7 + .../tests/functional/t058rewriteAST50.g | 8 + .../tests/functional/t058rewriteAST51.g | 8 + .../tests/functional/t058rewriteAST52.g | 8 + .../tests/functional/t058rewriteAST53.g | 8 + .../tests/functional/t058rewriteAST54.g | 9 + .../tests/functional/t058rewriteAST55.g | 11 + .../tests/functional/t058rewriteAST56.g | 8 + .../tests/functional/t058rewriteAST57.g | 7 + .../tests/functional/t058rewriteAST58.g | 8 + .../tests/functional/t058rewriteAST59.g | 8 + .../tests/functional/t058rewriteAST6.g | 7 + .../tests/functional/t058rewriteAST60.g | 8 + .../tests/functional/t058rewriteAST61.g | 8 + .../tests/functional/t058rewriteAST62.g | 8 + .../tests/functional/t058rewriteAST63.g | 8 + .../tests/functional/t058rewriteAST64.g | 8 + .../tests/functional/t058rewriteAST65.g | 8 + .../tests/functional/t058rewriteAST66.g | 7 + .../tests/functional/t058rewriteAST67.g | 7 + .../tests/functional/t058rewriteAST68.g | 7 + .../tests/functional/t058rewriteAST69.g | 9 + .../tests/functional/t058rewriteAST7.g | 7 + .../tests/functional/t058rewriteAST70.g | 9 + .../tests/functional/t058rewriteAST71.g | 8 + .../tests/functional/t058rewriteAST72.g | 8 + .../tests/functional/t058rewriteAST73.g | 8 + .../tests/functional/t058rewriteAST74.g | 8 + .../tests/functional/t058rewriteAST75.g | 7 + .../tests/functional/t058rewriteAST76.g | 9 + .../tests/functional/t058rewriteAST77.g | 9 + .../tests/functional/t058rewriteAST78.g | 9 + .../tests/functional/t058rewriteAST79.g | 7 + .../tests/functional/t058rewriteAST8.g | 8 + .../tests/functional/t058rewriteAST80.g | 9 + .../tests/functional/t058rewriteAST81.g | 7 + .../tests/functional/t058rewriteAST82.g | 9 + .../tests/functional/t058rewriteAST83.g | 10 + .../tests/functional/t058rewriteAST9.g | 7 + .../JavaScript/third/antcontrib.properties | 33 + antlr-3.1.3/runtime/ObjC/Framework/ANTLR.h | 60 + .../Framework/ANTLR.xcodeproj/project.pbxproj | 3374 +++++++ .../ObjC/Framework/ANTLRBaseRecognizer.h | 141 + .../ObjC/Framework/ANTLRBaseRecognizer.m | 452 + .../ObjC/Framework/ANTLRBaseRecognizerState.h | 58 + .../ObjC/Framework/ANTLRBaseRecognizerState.m | 133 + .../runtime/ObjC/Framework/ANTLRBitSet.h | 69 + .../runtime/ObjC/Framework/ANTLRBitSet.m | 207 + .../runtime/ObjC/Framework/ANTLRCharStream.h | 49 + .../runtime/ObjC/Framework/ANTLRCommonToken.h | 71 + .../runtime/ObjC/Framework/ANTLRCommonToken.m | 255 + .../ObjC/Framework/ANTLRCommonTokenStream.h | 86 + .../ObjC/Framework/ANTLRCommonTokenStream.m | 353 + .../runtime/ObjC/Framework/ANTLRCommonTree.h | 60 + .../runtime/ObjC/Framework/ANTLRCommonTree.m | 170 + .../ObjC/Framework/ANTLRCommonTreeAdaptor.h | 36 + .../ObjC/Framework/ANTLRCommonTreeAdaptor.m | 68 + .../Framework/ANTLRCommonTreeNodeStream.h | 34 + .../Framework/ANTLRCommonTreeNodeStream.m | 32 + antlr-3.1.3/runtime/ObjC/Framework/ANTLRDFA.h | 62 + antlr-3.1.3/runtime/ObjC/Framework/ANTLRDFA.m | 146 + .../runtime/ObjC/Framework/ANTLRDebug.h | 35 + .../ObjC/Framework/ANTLRDebugEventListener.h | 275 + .../ObjC/Framework/ANTLRDebugEventProxy.h | 112 + .../ObjC/Framework/ANTLRDebugEventProxy.m | 370 + .../runtime/ObjC/Framework/ANTLRDebugParser.h | 47 + .../runtime/ObjC/Framework/ANTLRDebugParser.m | 128 + .../ObjC/Framework/ANTLRDebugTokenStream.h | 50 + .../ObjC/Framework/ANTLRDebugTokenStream.m | 148 + .../ObjC/Framework/ANTLRDebugTreeAdaptor.h | 45 + .../ObjC/Framework/ANTLRDebugTreeAdaptor.m | 225 + .../ObjC/Framework/ANTLRDebugTreeNodeStream.h | 67 + .../ObjC/Framework/ANTLRDebugTreeNodeStream.m | 173 + .../ObjC/Framework/ANTLRDebugTreeParser.h | 48 + .../ObjC/Framework/ANTLRDebugTreeParser.m | 128 + .../ObjC/Framework/ANTLREarlyExitException.h | 37 + .../ObjC/Framework/ANTLREarlyExitException.m | 52 + .../Framework/ANTLRFailedPredicateException.h | 44 + .../Framework/ANTLRFailedPredicateException.m | 88 + .../runtime/ObjC/Framework/ANTLRIntStream.h | 88 + .../runtime/ObjC/Framework/ANTLRLexer.h | 77 + .../runtime/ObjC/Framework/ANTLRLexer.m | 248 + .../Framework/ANTLRLexerRuleReturnScope.h | 42 + .../Framework/ANTLRLexerRuleReturnScope.m | 60 + .../runtime/ObjC/Framework/ANTLRLexerState.h | 65 + .../runtime/ObjC/Framework/ANTLRLexerState.m | 130 + .../Framework/ANTLRMismatchedRangeException.h | 39 + .../Framework/ANTLRMismatchedRangeException.m | 53 + .../Framework/ANTLRMismatchedSetException.h | 42 + .../Framework/ANTLRMismatchedSetException.m | 77 + .../Framework/ANTLRMismatchedTokenException.h | 43 + .../Framework/ANTLRMismatchedTokenException.m | 71 + .../ANTLRMismatchedTreeNodeException.h | 39 + .../ANTLRMismatchedTreeNodeException.m | 52 + .../Framework/ANTLRNoViableAltException.h | 43 + .../Framework/ANTLRNoViableAltException.m | 83 + .../runtime/ObjC/Framework/ANTLRParser.h | 44 + .../runtime/ObjC/Framework/ANTLRParser.m | 64 + .../Framework/ANTLRParserRuleReturnScope.h | 41 + .../Framework/ANTLRParserRuleReturnScope.m | 67 + .../Framework/ANTLRRecognitionException.h | 60 + .../Framework/ANTLRRecognitionException.m | 155 + .../Framework/ANTLRRewriteRuleElementStream.h | 69 + .../Framework/ANTLRRewriteRuleElementStream.m | 187 + .../Framework/ANTLRRewriteRuleSubtreeStream.h | 36 + .../Framework/ANTLRRewriteRuleSubtreeStream.m | 27 + .../Framework/ANTLRRewriteRuleTokenStream.h | 35 + .../Framework/ANTLRRewriteRuleTokenStream.m | 26 + .../ObjC/Framework/ANTLRStringStream.h | 86 + .../ObjC/Framework/ANTLRStringStream.m | 221 + .../ObjC/Framework/ANTLRStringStreamState.h | 50 + .../ObjC/Framework/ANTLRStringStreamState.m | 73 + .../Framework/ANTLRToken+DebuggerSupport.h | 17 + .../Framework/ANTLRToken+DebuggerSupport.m | 38 + .../runtime/ObjC/Framework/ANTLRToken.h | 77 + .../runtime/ObjC/Framework/ANTLRTokenSource.h | 37 + .../runtime/ObjC/Framework/ANTLRTokenStream.h | 50 + .../runtime/ObjC/Framework/ANTLRTree.h | 108 + .../runtime/ObjC/Framework/ANTLRTree.m | 209 + .../runtime/ObjC/Framework/ANTLRTreeAdaptor.h | 128 + .../runtime/ObjC/Framework/ANTLRTreeAdaptor.m | 231 + .../ObjC/Framework/ANTLRTreeException.h | 42 + .../ObjC/Framework/ANTLRTreeException.m | 58 + .../ObjC/Framework/ANTLRTreeNodeStream.h | 52 + .../runtime/ObjC/Framework/ANTLRTreeParser.h | 45 + .../runtime/ObjC/Framework/ANTLRTreeParser.m | 68 + .../ANTLRTreeParserRuleReturnScope.h | 37 + .../ANTLRTreeParserRuleReturnScope.m | 52 + .../ANTLRUnbufferedCommonTreeNodeStream.h | 108 + .../ANTLRUnbufferedCommonTreeNodeStream.m | 462 + ...ANTLRUnbufferedCommonTreeNodeStreamState.h | 66 + ...ANTLRUnbufferedCommonTreeNodeStreamState.m | 140 + .../runtime/ObjC/Framework/ANTLR_Prefix.pch | 29 + .../runtime/ObjC/Framework/CHANGES.txt | 15 + .../Framework/English.lproj/InfoPlist.strings | Bin 0 -> 204 bytes antlr-3.1.3/runtime/ObjC/Framework/Info.plist | 26 + antlr-3.1.3/runtime/ObjC/Framework/README.rtf | 34 + .../runtime/ObjC/Framework/Test-Info.plist | 20 + .../Framework/TestRewriteRuleTokenStream.h | 42 + .../Framework/TestRewriteRuleTokenStream.m | 178 + .../runtime/ObjC/Framework/TestStringStream.h | 16 + .../runtime/ObjC/Framework/TestStringStream.m | 24 + .../ObjC/Framework/examples/LL-star/SimpleC.g | 106 + .../Framework/examples/LL-star/SimpleC.tokens | 17 + .../Framework/examples/LL-star/SimpleCLexer.h | 56 + .../Framework/examples/LL-star/SimpleCLexer.m | 1000 ++ .../examples/LL-star/SimpleCParser.h | 51 + .../examples/LL-star/SimpleCParser.m | 1165 +++ .../Framework/examples/LL-star/SimpleC__.gl | 37 + .../ObjC/Framework/examples/LL-star/input | 12 + .../ObjC/Framework/examples/LL-star/main.m | 29 + .../ObjC/Framework/examples/LL-star/output | 2 + .../Framework/examples/combined/Combined.g | 26 + .../examples/combined/Combined.tokens | 3 + .../examples/combined/CombinedLexer.h | 28 + .../examples/combined/CombinedLexer.m | 328 + .../examples/combined/CombinedParser.h | 33 + .../examples/combined/CombinedParser.m | 141 + .../Framework/examples/combined/Combined__.gl | 22 + .../ObjC/Framework/examples/combined/main.m | 21 + .../Framework/examples/fuzzy/FuzzyJava.gl | 160 + .../Framework/examples/fuzzy/FuzzyJava.tokens | 19 + .../Framework/examples/fuzzy/FuzzyJavaLexer.h | 76 + .../Framework/examples/fuzzy/FuzzyJavaLexer.m | 2174 ++++ .../ObjC/Framework/examples/fuzzy/input | 13 + .../ObjC/Framework/examples/fuzzy/main.m | 21 + .../Framework/examples/hoistedPredicates/T.g | 49 + .../examples/hoistedPredicates/T.tokens | 4 + .../examples/hoistedPredicates/TLexer.h | 30 + .../examples/hoistedPredicates/TLexer.m | 396 + .../examples/hoistedPredicates/TParser.h | 39 + .../examples/hoistedPredicates/TParser.m | 268 + .../examples/hoistedPredicates/input | 1 + .../examples/hoistedPredicates/main.m | 29 + .../examples/hoistedPredicates/output | 1 + .../examples/lexertest-simple/Test.gl | 16 + .../examples/lexertest-simple/Test.tokens | 4 + .../examples/lexertest-simple/TestLexer.h | 28 + .../examples/lexertest-simple/TestLexer.m | 171 + .../examples/lexertest-simple/main.m | 23 + .../Framework/examples/scopes/SymbolTable.g | 73 + .../examples/scopes/SymbolTable.tokens | 11 + .../examples/scopes/SymbolTableLexer.h | 44 + .../examples/scopes/SymbolTableLexer.m | 680 ++ .../examples/scopes/SymbolTableParser.h | 46 + .../examples/scopes/SymbolTableParser.m | 463 + .../examples/scopes/SymbolTable__.gl | 26 + .../ObjC/Framework/examples/scopes/input | 12 + .../ObjC/Framework/examples/scopes/main.m | 29 + .../ObjC/Framework/examples/scopes/output | 3 + .../examples/simplecTreeParser/SimpleC.g | 113 + .../examples/simplecTreeParser/SimpleC.tokens | 30 + .../examples/simplecTreeParser/SimpleCLexer.h | 62 + .../examples/simplecTreeParser/SimpleCLexer.m | 978 ++ .../simplecTreeParser/SimpleCParser.h | 159 + .../simplecTreeParser/SimpleCParser.m | 2268 +++++ .../examples/simplecTreeParser/SimpleCTP.gtp | 64 + .../examples/simplecTreeParser/SimpleCTP.h | 61 + .../examples/simplecTreeParser/SimpleCTP.m | 937 ++ .../simplecTreeParser/SimpleCTP.tokens | 30 + .../examples/simplecTreeParser/SimpleC__.gl | 47 + .../examples/simplecTreeParser/input | 12 + .../examples/simplecTreeParser/main.m | 79 + .../examples/simplecTreeParser/output | 1 + .../examples/treerewrite/TreeRewrite.g | 19 + .../examples/treerewrite/TreeRewrite.tokens | 2 + .../examples/treerewrite/TreeRewriteLexer.h | 26 + .../examples/treerewrite/TreeRewriteLexer.m | 167 + .../examples/treerewrite/TreeRewriteParser.h | 48 + .../examples/treerewrite/TreeRewriteParser.m | 249 + .../examples/treerewrite/TreeRewrite__.g | 13 + .../Framework/examples/treerewrite/main.m | 38 + .../runtime/ObjC/Framework/tests/TestBitSet.h | 36 + .../runtime/ObjC/Framework/tests/TestBitSet.m | 53 + .../ObjC/Framework/tests/TestStringStream.h | 34 + .../ObjC/Framework/tests/TestStringStream.m | 42 + .../Xcode plugin/ANTLRCompilerSpecification.h | 49 + .../Xcode plugin/ANTLRCompilerSpecification.m | 195 + .../runtime/ObjC/Xcode plugin/ANTLRXCPlugin.h | 34 + .../runtime/ObjC/Xcode plugin/ANTLRXCPlugin.m | 45 + .../ObjC/Xcode plugin/BuildSystemInterfaces.h | 280 + .../ObjC/Xcode plugin/DependencyGraph.h | 337 + .../English.lproj/InfoPlist.strings | Bin 0 -> 204 bytes .../English.lproj/org.antlr.Tool.strings | 64 + .../runtime/ObjC/Xcode plugin/GrammarFilter.g | 75 + .../ObjC/Xcode plugin/GrammarFilter.tokens | 14 + .../ObjC/Xcode plugin/GrammarFilterLexer.h | 60 + .../ObjC/Xcode plugin/GrammarFilterLexer.m | 1523 +++ .../runtime/ObjC/Xcode plugin/Info.plist | 30 + .../runtime/ObjC/Xcode plugin/OutputParser.h | 93 + .../ObjC/Xcode plugin/Specifications.h | 466 + antlr-3.1.3/runtime/ObjC/Xcode plugin/Xcode | 0 .../Xcode plugin.xcodeproj/project.pbxproj | 552 ++ .../ObjC/Xcode plugin/Xcode plugin_Prefix.pch | 7 + .../ObjC/Xcode plugin/antlr.pbcompspec | 184 + .../ObjC/Xcode plugin/antlr.pbfilespec | 36 + .../ObjC/Xcode plugin/antlr.pblangspec | 64 + .../ObjC/Xcode plugin/antlr.xcbuildrules | 33 + antlr-3.1.3/runtime/Perl5/.p4ignore | 8 + antlr-3.1.3/runtime/Perl5/Build.PL | 19 + antlr-3.1.3/runtime/Perl5/Changes | 0 antlr-3.1.3/runtime/Perl5/INSTALL | 0 antlr-3.1.3/runtime/Perl5/MANIFEST | 67 + antlr-3.1.3/runtime/Perl5/MANIFEST.SKIP | 10 + antlr-3.1.3/runtime/Perl5/Makefile.PL | 27 + antlr-3.1.3/runtime/Perl5/README | 28 + antlr-3.1.3/runtime/Perl5/docs/design.pod | 66 + antlr-3.1.3/runtime/Perl5/examples/README | 16 + .../runtime/Perl5/examples/expr/Expr.g | 50 + .../runtime/Perl5/examples/expr/expr.pl | 24 + .../runtime/Perl5/examples/id/IDLexer.g | 7 + antlr-3.1.3/runtime/Perl5/examples/id/id.pl | 25 + .../runtime/Perl5/examples/mexpr/MExpr.g | 28 + .../runtime/Perl5/examples/mexpr/mexpr.pl | 20 + .../Perl5/examples/simplecalc/SimpleCalc.g | 29 + .../Perl5/examples/simplecalc/simplecalc.pl | 27 + .../runtime/Perl5/examples/zero-one/T.g | 4 + .../Perl5/examples/zero-one/t-error.pl | 27 + .../runtime/Perl5/examples/zero-one/t.pl | 22 + .../runtime/Perl5/lib/ANTLR/Runtime.pm | 116 + .../lib/ANTLR/Runtime/ANTLRFileStream.pm | 50 + .../lib/ANTLR/Runtime/ANTLRStringStream.pm | 205 + .../Perl5/lib/ANTLR/Runtime/BaseRecognizer.pm | 615 ++ .../runtime/Perl5/lib/ANTLR/Runtime/BitSet.pm | 324 + .../Perl5/lib/ANTLR/Runtime/CharStream.pm | 31 + .../lib/ANTLR/Runtime/CharStreamState.pm | 13 + .../runtime/Perl5/lib/ANTLR/Runtime/Class.pm | 155 + .../Perl5/lib/ANTLR/Runtime/CommonToken.pm | 167 + .../lib/ANTLR/Runtime/CommonTokenStream.pm | 411 + .../runtime/Perl5/lib/ANTLR/Runtime/DFA.pm | 231 + .../lib/ANTLR/Runtime/EarlyExitException.pm | 8 + .../Perl5/lib/ANTLR/Runtime/Exception.pm | 41 + .../Perl5/lib/ANTLR/Runtime/IntStream.pm | 7 + .../runtime/Perl5/lib/ANTLR/Runtime/Lexer.pm | 361 + .../ANTLR/Runtime/MismatchedSetException.pm | 6 + .../ANTLR/Runtime/MismatchedTokenException.pm | 37 + .../ANTLR/Runtime/MissingTokenException.pm | 36 + .../lib/ANTLR/Runtime/NoViableAltException.pm | 20 + .../runtime/Perl5/lib/ANTLR/Runtime/Object.pm | 206 + .../lib/ANTLR/Runtime/Object/Signature.pm | 19 + .../runtime/Perl5/lib/ANTLR/Runtime/Parser.pm | 102 + .../ANTLR/Runtime/ParserRuleReturnScope.pm | 20 + .../lib/ANTLR/Runtime/RecognitionException.pm | 90 + .../ANTLR/Runtime/RecognizerSharedState.pm | 84 + .../lib/ANTLR/Runtime/RuleReturnScope.pm | 20 + .../runtime/Perl5/lib/ANTLR/Runtime/Stream.pm | 38 + .../runtime/Perl5/lib/ANTLR/Runtime/Token.pm | 49 + .../Perl5/lib/ANTLR/Runtime/TokenSource.pm | 30 + .../Perl5/lib/ANTLR/Runtime/TokenStream.pm | 24 + .../ANTLR/Runtime/UnwantedTokenException.pm | 34 + antlr-3.1.3/runtime/Perl5/port.yml | 4 + antlr-3.1.3/runtime/Perl5/t/author/api.t | 95 + .../runtime/Perl5/t/author/perlcritic.t | 19 + .../runtime/Perl5/t/author/perlcriticrc | 5 + .../runtime/Perl5/t/author/pod-coverage.t | 10 + antlr-3.1.3/runtime/Perl5/t/author/pod.t | 10 + .../classes/ANTLR/Runtime/ANTLRStringStream.t | 24 + .../Perl5/t/classes/ANTLR/Runtime/BitSet.t | 64 + .../Perl5/t/classes/ANTLR/Runtime/Class.t | 96 + .../t/classes/ANTLR/Runtime/CommonToken.t | 23 + .../Perl5/t/classes/ANTLR/Runtime/Exception.t | 29 + .../Perl5/t/classes/ANTLR/Runtime/Lexer.t | 15 + .../Perl5/t/classes/ANTLR/Runtime/Object.t | 83 + antlr-3.1.3/runtime/Perl5/t/examples/expr.t | 85 + antlr-3.1.3/runtime/Perl5/t/examples/fig.t | 70 + .../runtime/Perl5/t/examples/simplecalc.t | 87 + antlr-3.1.3/runtime/Perl5/t/lexer.t | 126 + .../runtime/Perl5/t/lib/ANTLR/Runtime/Test.pm | 151 + antlr-3.1.3/runtime/Perl5/t/version.t | 15 + antlr-3.1.3/runtime/Perl5/tools/antlr.bat | 13 + antlr-3.1.3/runtime/Perl5/tools/antlr.sh | 8 + antlr-3.1.3/runtime/Perl5/tools/port.pl | 203 + antlr-3.1.3/runtime/Python/AUTHORS | 2 + antlr-3.1.3/runtime/Python/ChangeLog | 38 + antlr-3.1.3/runtime/Python/LICENSE | 26 + antlr-3.1.3/runtime/Python/MANIFEST.in | 2 + antlr-3.1.3/runtime/Python/README | 90 + antlr-3.1.3/runtime/Python/TODO | 82 + antlr-3.1.3/runtime/Python/antlr3/__init__.py | 171 + antlr-3.1.3/runtime/Python/antlr3/compat.py | 48 + .../runtime/Python/antlr3/constants.py | 57 + antlr-3.1.3/runtime/Python/antlr3/debug.py | 1137 +++ antlr-3.1.3/runtime/Python/antlr3/dfa.py | 213 + .../runtime/Python/antlr3/dottreegen.py | 210 + .../runtime/Python/antlr3/exceptions.py | 364 + antlr-3.1.3/runtime/Python/antlr3/extras.py | 47 + antlr-3.1.3/runtime/Python/antlr3/main.py | 307 + .../runtime/Python/antlr3/recognizers.py | 1487 +++ antlr-3.1.3/runtime/Python/antlr3/streams.py | 1452 +++ antlr-3.1.3/runtime/Python/antlr3/tokens.py | 416 + antlr-3.1.3/runtime/Python/antlr3/tree.py | 2702 +++++ .../runtime/Python/antlr3/treewizard.py | 614 ++ .../lib.linux-x86_64-2.7/antlr3/__init__.py | 171 + .../lib.linux-x86_64-2.7/antlr3/compat.py | 48 + .../lib.linux-x86_64-2.7/antlr3/constants.py | 57 + .../lib.linux-x86_64-2.7/antlr3/debug.py | 1137 +++ .../build/lib.linux-x86_64-2.7/antlr3/dfa.py | 213 + .../lib.linux-x86_64-2.7/antlr3/dottreegen.py | 210 + .../lib.linux-x86_64-2.7/antlr3/exceptions.py | 364 + .../lib.linux-x86_64-2.7/antlr3/extras.py | 47 + .../build/lib.linux-x86_64-2.7/antlr3/main.py | 307 + .../antlr3/recognizers.py | 1487 +++ .../lib.linux-x86_64-2.7/antlr3/streams.py | 1452 +++ .../lib.linux-x86_64-2.7/antlr3/tokens.py | 416 + .../build/lib.linux-x86_64-2.7/antlr3/tree.py | 2702 +++++ .../lib.linux-x86_64-2.7/antlr3/treewizard.py | 614 ++ .../dist/antlr_python_runtime-3.1.3-py2.4.egg | Bin 0 -> 171760 bytes .../dist/antlr_python_runtime-3.1.3-py2.5.egg | Bin 0 -> 170718 bytes .../dist/antlr_python_runtime-3.1.3-py2.7.egg | Bin 0 -> 170197 bytes .../dist/antlr_python_runtime-3.1.3.tar.gz | Bin 0 -> 76468 bytes .../dist/antlr_python_runtime-3.1.3.zip | Bin 0 -> 92105 bytes antlr-3.1.3/runtime/Python/doxyfile | 270 + antlr-3.1.3/runtime/Python/doxypy.py | 227 + antlr-3.1.3/runtime/Python/ez_setup.py | 228 + antlr-3.1.3/runtime/Python/hudson-build.sh | 71 + antlr-3.1.3/runtime/Python/mkdoxy.sh | 20 + antlr-3.1.3/runtime/Python/pylintrc | 321 + antlr-3.1.3/runtime/Python/setup.py | 308 + antlr-3.1.3/runtime/Python/tests/t001lexer.g | 6 + antlr-3.1.3/runtime/Python/tests/t001lexer.py | 57 + antlr-3.1.3/runtime/Python/tests/t002lexer.g | 7 + antlr-3.1.3/runtime/Python/tests/t002lexer.py | 50 + antlr-3.1.3/runtime/Python/tests/t003lexer.g | 8 + antlr-3.1.3/runtime/Python/tests/t003lexer.py | 53 + antlr-3.1.3/runtime/Python/tests/t004lexer.g | 6 + antlr-3.1.3/runtime/Python/tests/t004lexer.py | 70 + antlr-3.1.3/runtime/Python/tests/t005lexer.g | 6 + antlr-3.1.3/runtime/Python/tests/t005lexer.py | 75 + antlr-3.1.3/runtime/Python/tests/t006lexer.g | 6 + antlr-3.1.3/runtime/Python/tests/t006lexer.py | 61 + antlr-3.1.3/runtime/Python/tests/t007lexer.g | 6 + antlr-3.1.3/runtime/Python/tests/t007lexer.py | 59 + antlr-3.1.3/runtime/Python/tests/t008lexer.g | 6 + antlr-3.1.3/runtime/Python/tests/t008lexer.py | 66 + antlr-3.1.3/runtime/Python/tests/t009lexer.g | 6 + antlr-3.1.3/runtime/Python/tests/t009lexer.py | 69 + antlr-3.1.3/runtime/Python/tests/t010lexer.g | 7 + antlr-3.1.3/runtime/Python/tests/t010lexer.py | 78 + antlr-3.1.3/runtime/Python/tests/t011lexer.g | 19 + antlr-3.1.3/runtime/Python/tests/t011lexer.py | 78 + .../runtime/Python/tests/t012lexerXML.input | 21 + .../runtime/Python/tests/t012lexerXML.output | 39 + .../runtime/Python/tests/t012lexerXML.py | 189 + .../runtime/Python/tests/t012lexerXMLLexer.g | 132 + antlr-3.1.3/runtime/Python/tests/t013parser.g | 23 + .../runtime/Python/tests/t013parser.py | 35 + antlr-3.1.3/runtime/Python/tests/t014parser.g | 35 + .../runtime/Python/tests/t014parser.py | 74 + antlr-3.1.3/runtime/Python/tests/t015calc.g | 54 + antlr-3.1.3/runtime/Python/tests/t015calc.py | 46 + .../runtime/Python/tests/t016actions.g | 31 + .../runtime/Python/tests/t016actions.py | 20 + antlr-3.1.3/runtime/Python/tests/t017parser.g | 91 + .../runtime/Python/tests/t017parser.py | 58 + antlr-3.1.3/runtime/Python/tests/t018llstar.g | 111 + .../runtime/Python/tests/t018llstar.input | 12 + .../runtime/Python/tests/t018llstar.output | 2 + .../runtime/Python/tests/t018llstar.py | 76 + antlr-3.1.3/runtime/Python/tests/t019lexer.g | 64 + .../runtime/Python/tests/t019lexer.input | 13 + antlr-3.1.3/runtime/Python/tests/t019lexer.py | 22 + .../runtime/Python/tests/t020fuzzy.input | 13 + .../runtime/Python/tests/t020fuzzy.output | 12 + antlr-3.1.3/runtime/Python/tests/t020fuzzy.py | 40 + .../runtime/Python/tests/t020fuzzyLexer.g | 96 + antlr-3.1.3/runtime/Python/tests/t021hoist.g | 37 + antlr-3.1.3/runtime/Python/tests/t021hoist.py | 38 + antlr-3.1.3/runtime/Python/tests/t022scopes.g | 127 + .../runtime/Python/tests/t022scopes.py | 167 + antlr-3.1.3/runtime/Python/tests/t023scopes.g | 18 + .../runtime/Python/tests/t023scopes.py | 20 + .../runtime/Python/tests/t024finally.g | 19 + .../runtime/Python/tests/t024finally.py | 23 + .../Python/tests/t025lexerRulePropertyRef.g | 18 + .../Python/tests/t025lexerRulePropertyRef.py | 54 + .../runtime/Python/tests/t026actions.g | 39 + .../runtime/Python/tests/t026actions.py | 66 + antlr-3.1.3/runtime/Python/tests/t027eof.g | 8 + antlr-3.1.3/runtime/Python/tests/t027eof.py | 25 + .../Python/tests/t028labelExpr.g.disabled | 5 + .../runtime/Python/tests/t029synpredgate.g | 16 + .../runtime/Python/tests/t029synpredgate.py | 21 + .../runtime/Python/tests/t030specialStates.g | 26 + .../runtime/Python/tests/t030specialStates.py | 47 + .../runtime/Python/tests/t031emptyAlt.g | 16 + .../runtime/Python/tests/t031emptyAlt.py | 21 + .../runtime/Python/tests/t032subrulePredict.g | 8 + .../Python/tests/t032subrulePredict.py | 44 + .../runtime/Python/tests/t033backtracking.g | 534 + .../runtime/Python/tests/t033backtracking.py | 33 + .../Python/tests/t034tokenLabelPropertyRef.g | 30 + .../Python/tests/t034tokenLabelPropertyRef.py | 40 + .../Python/tests/t035ruleLabelPropertyRef.g | 16 + .../Python/tests/t035ruleLabelPropertyRef.py | 47 + .../Python/tests/t036multipleReturnValues.g | 25 + .../Python/tests/t036multipleReturnValues.py | 43 + .../Python/tests/t037rulePropertyRef.g | 15 + .../Python/tests/t037rulePropertyRef.py | 47 + .../runtime/Python/tests/t038lexerRuleLabel.g | 28 + .../Python/tests/t038lexerRuleLabel.py | 33 + antlr-3.1.3/runtime/Python/tests/t039labels.g | 18 + .../runtime/Python/tests/t039labels.py | 53 + antlr-3.1.3/runtime/Python/tests/t040bug80.g | 13 + antlr-3.1.3/runtime/Python/tests/t040bug80.py | 33 + .../runtime/Python/tests/t041parameters.g | 16 + .../runtime/Python/tests/t041parameters.py | 45 + antlr-3.1.3/runtime/Python/tests/t042ast.g | 353 + antlr-3.1.3/runtime/Python/tests/t042ast.py | 688 ++ .../runtime/Python/tests/t043synpred.g | 14 + .../runtime/Python/tests/t043synpred.py | 39 + antlr-3.1.3/runtime/Python/tests/t044trace.g | 20 + antlr-3.1.3/runtime/Python/tests/t044trace.py | 96 + antlr-3.1.3/runtime/Python/tests/t045dfabug.g | 32 + .../runtime/Python/tests/t045dfabug.py | 21 + .../runtime/Python/tests/t046rewrite.g | 54 + .../runtime/Python/tests/t046rewrite.py | 55 + .../runtime/Python/tests/t047treeparser.g | 113 + .../runtime/Python/tests/t047treeparser.py | 122 + .../Python/tests/t047treeparserWalker.g | 67 + .../runtime/Python/tests/t048rewrite.g | 9 + .../runtime/Python/tests/t048rewrite.py | 482 + .../runtime/Python/tests/t048rewrite2.g | 12 + .../runtime/Python/tests/t049treeparser.py | 499 + .../runtime/Python/tests/t050decorate.g | 29 + .../runtime/Python/tests/t050decorate.py | 21 + .../Python/tests/t051treeRewriteAST.py | 1557 +++ .../runtime/Python/tests/t052import.py | 435 + .../runtime/Python/tests/t053hetero.py | 896 ++ antlr-3.1.3/runtime/Python/tests/t054main.py | 318 + .../runtime/Python/tests/t055templates.py | 509 + antlr-3.1.3/runtime/Python/tests/t056lexer.py | 49 + .../runtime/Python/tests/t057autoAST.py | 1004 ++ .../runtime/Python/tests/t058rewriteAST.py | 1518 +++ antlr-3.1.3/runtime/Python/tests/t059debug.py | 770 ++ antlr-3.1.3/runtime/Python/tests/testbase.py | 429 + .../runtime/Python/unittests/testantlr3.py | 7 + .../runtime/Python/unittests/testbase.py | 27 + .../runtime/Python/unittests/testdfa.py | 63 + .../Python/unittests/testdottreegen.py | 74 + .../Python/unittests/testexceptions.py | 96 + .../Python/unittests/testrecognizers.py | 67 + .../Python/unittests/teststreams.input1 | 2 + .../Python/unittests/teststreams.input2 | 2 + .../runtime/Python/unittests/teststreams.py | 658 ++ .../runtime/Python/unittests/testtree.py | 1222 +++ .../Python/unittests/testtreewizard.py | 682 ++ antlr-3.1.3/runtime/Python/xmlrunner.py | 378 + antlr-3.1.3/tool/CHANGES.txt | 3169 ++++++ antlr-3.1.3/tool/LICENSE.txt | 26 + antlr-3.1.3/tool/README.txt | 123 + antlr-3.1.3/tool/antlr.config | 0 antlr-3.1.3/tool/pom.xml | 106 + .../main/antlr/org/antlr/grammar/v3/ANTLRv3.g | 625 ++ .../antlr/org/antlr/grammar/v3/ANTLRv3Tree.g | 261 + .../org/antlr/grammar/v3/ActionAnalysis.g | 133 + .../org/antlr/grammar/v3/ActionTranslator.g | 809 ++ .../main/antlr2/org/antlr/grammar/v2/antlr.g | 1247 +++ .../antlr2/org/antlr/grammar/v2/antlr.print.g | 372 + .../org/antlr/grammar/v2/assign.types.g | 332 + .../antlr2/org/antlr/grammar/v2/buildnfa.g | 743 ++ .../antlr2/org/antlr/grammar/v2/codegen.g | 1444 +++ .../main/antlr2/org/antlr/grammar/v2/define.g | 646 ++ .../tool/src/main/java/org/antlr/Tool.java | 1326 +++ .../java/org/antlr/analysis/ActionLabel.java | 56 + .../AnalysisRecursionOverflowException.java | 40 + .../analysis/AnalysisTimeoutException.java | 36 + .../src/main/java/org/antlr/analysis/DFA.java | 1061 ++ .../java/org/antlr/analysis/DFAOptimizer.java | 265 + .../java/org/antlr/analysis/DFAState.java | 776 ++ .../org/antlr/analysis/DecisionProbe.java | 915 ++ .../java/org/antlr/analysis/LL1Analyzer.java | 446 + .../main/java/org/antlr/analysis/LL1DFA.java | 179 + .../main/java/org/antlr/analysis/Label.java | 382 + .../java/org/antlr/analysis/LookaheadSet.java | 109 + .../src/main/java/org/antlr/analysis/NFA.java | 73 + .../org/antlr/analysis/NFAConfiguration.java | 152 + .../java/org/antlr/analysis/NFAContext.java | 294 + .../antlr/analysis/NFAConversionThread.java | 65 + .../java/org/antlr/analysis/NFAState.java | 259 + .../org/antlr/analysis/NFAToDFAConverter.java | 1732 ++++ .../analysis/NonLLStarDecisionException.java | 38 + .../org/antlr/analysis/PredicateLabel.java | 85 + .../antlr/analysis/RuleClosureTransition.java | 55 + .../org/antlr/analysis/SemanticContext.java | 486 + .../main/java/org/antlr/analysis/State.java | 54 + .../java/org/antlr/analysis/StateCluster.java | 41 + .../java/org/antlr/analysis/Transition.java | 84 + .../codegen/ACyclicDFACodeGenerator.java | 190 + .../org/antlr/codegen/ActionScriptTarget.java | 134 + .../java/org/antlr/codegen/CPPTarget.java | 140 + .../java/org/antlr/codegen/CSharp2Target.java | 57 + .../java/org/antlr/codegen/CSharpTarget.java | 57 + .../main/java/org/antlr/codegen/CTarget.java | 276 + .../java/org/antlr/codegen/CodeGenerator.java | 1332 +++ .../java/org/antlr/codegen/DelphiTarget.java | 147 + .../org/antlr/codegen/JavaScriptTarget.java | 47 + .../java/org/antlr/codegen/JavaTarget.java | 44 + .../java/org/antlr/codegen/ObjCTarget.java | 109 + .../java/org/antlr/codegen/Perl5Target.java | 92 + .../java/org/antlr/codegen/PythonTarget.java | 219 + .../java/org/antlr/codegen/RubyTarget.java | 73 + .../main/java/org/antlr/codegen/Target.java | 360 + .../src/main/java/org/antlr/misc/Barrier.java | 62 + .../src/main/java/org/antlr/misc/BitSet.java | 574 ++ .../src/main/java/org/antlr/misc/Graph.java | 107 + .../java/org/antlr/misc/IntArrayList.java | 153 + .../src/main/java/org/antlr/misc/IntSet.java | 84 + .../main/java/org/antlr/misc/Interval.java | 142 + .../main/java/org/antlr/misc/IntervalSet.java | 689 ++ .../main/java/org/antlr/misc/MultiMap.java | 44 + .../java/org/antlr/misc/MutableInteger.java | 42 + .../java/org/antlr/misc/OrderedHashSet.java | 103 + .../src/main/java/org/antlr/misc/Utils.java | 73 + .../org/antlr/tool/ANTLRErrorListener.java | 42 + .../antlr/tool/AssignTokenTypesBehavior.java | 311 + .../main/java/org/antlr/tool/Attribute.java | 133 + .../java/org/antlr/tool/AttributeScope.java | 177 + .../antlr/tool/BuildDependencyGenerator.java | 265 + .../java/org/antlr/tool/CompositeGrammar.java | 519 + .../org/antlr/tool/CompositeGrammarTree.java | 155 + .../java/org/antlr/tool/DOTGenerator.java | 405 + .../java/org/antlr/tool/ErrorManager.java | 961 ++ .../java/org/antlr/tool/FASerializer.java | 217 + .../src/main/java/org/antlr/tool/Grammar.java | 3103 ++++++ .../main/java/org/antlr/tool/GrammarAST.java | 536 + .../tool/GrammarAnalysisAbortedMessage.java | 59 + .../tool/GrammarDanglingStateMessage.java | 73 + .../GrammarInsufficientPredicatesMessage.java | 87 + .../tool/GrammarNonDeterminismMessage.java | 128 + .../java/org/antlr/tool/GrammarReport.java | 383 + .../java/org/antlr/tool/GrammarSanity.java | 325 + .../antlr/tool/GrammarSemanticsMessage.java | 88 + .../org/antlr/tool/GrammarSerializerFoo.java | 191 + .../java/org/antlr/tool/GrammarSpelunker.java | 254 + .../org/antlr/tool/GrammarSyntaxMessage.java | 80 + .../tool/GrammarUnreachableAltsMessage.java | 93 + .../src/main/java/org/antlr/tool/Interp.java | 117 + .../main/java/org/antlr/tool/Interpreter.java | 453 + .../tool/LeftRecursionCyclesMessage.java | 53 + .../src/main/java/org/antlr/tool/Message.java | 128 + .../main/java/org/antlr/tool/NFAFactory.java | 733 ++ .../java/org/antlr/tool/NameSpaceChecker.java | 270 + .../antlr/tool/NonRegularDecisionMessage.java | 66 + .../java/org/antlr/tool/RandomPhrase.java | 222 + .../antlr/tool/RecursionOverflowMessage.java | 82 + .../src/main/java/org/antlr/tool/Rule.java | 602 ++ .../java/org/antlr/tool/RuleLabelScope.java | 100 + .../src/main/java/org/antlr/tool/Strip.java | 239 + .../main/java/org/antlr/tool/ToolMessage.java | 75 + .../src/main/java/org/antlr/tool/serialize.g | 238 + .../main/resources/org/antlr/antlr.properties | 7 + .../org/antlr/codegen/templates/ANTLRCore.sti | 375 + .../codegen/templates/ActionScript/AST.stg | 404 + .../templates/ActionScript/ASTParser.stg | 190 + .../templates/ActionScript/ASTTreeParser.stg | 296 + .../templates/ActionScript/ActionScript.stg | 1289 +++ .../org/antlr/codegen/templates/C/AST.stg | 562 ++ .../org/antlr/codegen/templates/C/ASTDbg.stg | 58 + .../antlr/codegen/templates/C/ASTParser.stg | 206 + .../codegen/templates/C/ASTTreeParser.stg | 312 + .../org/antlr/codegen/templates/C/C.stg | 3191 ++++++ .../org/antlr/codegen/templates/C/Dbg.stg | 240 + .../org/antlr/codegen/templates/CPP/CPP.stg | 1351 +++ .../antlr/codegen/templates/CSharp/AST.stg | 415 + .../antlr/codegen/templates/CSharp/ASTDbg.stg | 97 + .../codegen/templates/CSharp/ASTParser.stg | 220 + .../templates/CSharp/ASTTreeParser.stg | 315 + .../antlr/codegen/templates/CSharp/CSharp.stg | 1456 +++ .../antlr/codegen/templates/CSharp/Dbg.stg | 300 + .../org/antlr/codegen/templates/CSharp/ST.stg | 173 + .../antlr/codegen/templates/CSharp2/AST.stg | 415 + .../codegen/templates/CSharp2/ASTDbg.stg | 97 + .../codegen/templates/CSharp2/ASTParser.stg | 220 + .../templates/CSharp2/ASTTreeParser.stg | 315 + .../codegen/templates/CSharp2/CSharp2.stg | 1444 +++ .../antlr/codegen/templates/CSharp2/Dbg.stg | 300 + .../antlr/codegen/templates/CSharp2/ST.stg | 173 + .../antlr/codegen/templates/CSharp3/AST.stg | 423 + .../codegen/templates/CSharp3/ASTDbg.stg | 97 + .../codegen/templates/CSharp3/ASTParser.stg | 194 + .../templates/CSharp3/ASTTreeParser.stg | 300 + .../codegen/templates/CSharp3/CSharp3.stg | 1501 +++ .../antlr/codegen/templates/CSharp3/Dbg.stg | 299 + .../antlr/codegen/templates/CSharp3/ST.stg | 167 + .../antlr/codegen/templates/Delphi/AST.stg | 445 + .../codegen/templates/Delphi/ASTParser.stg | 220 + .../templates/Delphi/ASTTreeParser.stg | 307 + .../antlr/codegen/templates/Delphi/Delphi.stg | 1805 ++++ .../org/antlr/codegen/templates/Java/AST.stg | 406 + .../antlr/codegen/templates/Java/ASTDbg.stg | 87 + .../codegen/templates/Java/ASTParser.stg | 190 + .../codegen/templates/Java/ASTTreeParser.stg | 296 + .../org/antlr/codegen/templates/Java/Dbg.stg | 259 + .../org/antlr/codegen/templates/Java/Java.stg | 1348 +++ .../org/antlr/codegen/templates/Java/ST.stg | 163 + .../codegen/templates/JavaScript/AST.stg | 391 + .../templates/JavaScript/ASTParser.stg | 161 + .../templates/JavaScript/ASTTreeParser.stg | 253 + .../templates/JavaScript/JavaScript.stg | 1326 +++ .../org/antlr/codegen/templates/ObjC/AST.stg | 513 + .../antlr/codegen/templates/ObjC/ASTDbg.stg | 46 + .../codegen/templates/ObjC/ASTParser.stg | 189 + .../codegen/templates/ObjC/ASTTreeParser.stg | 129 + .../org/antlr/codegen/templates/ObjC/Dbg.stg | 178 + .../org/antlr/codegen/templates/ObjC/ObjC.stg | 1502 +++ .../codegen/templates/Perl5/ASTTreeParser.stg | 258 + .../antlr/codegen/templates/Perl5/Perl5.stg | 1369 +++ .../antlr/codegen/templates/Python/AST.stg | 458 + .../antlr/codegen/templates/Python/ASTDbg.stg | 59 + .../codegen/templates/Python/ASTParser.stg | 198 + .../templates/Python/ASTTreeParser.stg | 312 + .../antlr/codegen/templates/Python/Dbg.stg | 317 + .../antlr/codegen/templates/Python/Python.stg | 1431 +++ .../org/antlr/codegen/templates/Python/ST.stg | 181 + .../org/antlr/codegen/templates/Ruby/Ruby.stg | 1353 +++ .../org/antlr/tool/templates/depend.stg | 12 + .../antlr/tool/templates/dot/action-edge.st | 1 + .../antlr/tool/templates/dot/decision-rank.st | 1 + .../org/antlr/tool/templates/dot/dfa.st | 7 + .../org/antlr/tool/templates/dot/edge.st | 1 + .../antlr/tool/templates/dot/epsilon-edge.st | 1 + .../org/antlr/tool/templates/dot/nfa.st | 6 + .../org/antlr/tool/templates/dot/state.st | 1 + .../org/antlr/tool/templates/dot/stopstate.st | 1 + .../tool/templates/messages/formats/antlr.stg | 42 + .../tool/templates/messages/formats/gnu.stg | 42 + .../templates/messages/formats/vs2005.stg | 42 + .../tool/templates/messages/languages/en.stg | 299 + .../test/java/org/antlr/test/BaseTest.java | 888 ++ .../java/org/antlr/test/DebugTestAutoAST.java | 32 + .../test/DebugTestCompositeGrammars.java | 32 + .../org/antlr/test/DebugTestRewriteAST.java | 33 + .../test/java/org/antlr/test/ErrorQueue.java | 74 + .../org/antlr/test/TestASTConstruction.java | 365 + .../java/org/antlr/test/TestAttributes.java | 3459 +++++++ .../test/java/org/antlr/test/TestAutoAST.java | 823 ++ .../test/TestBufferedTreeNodeStream.java | 71 + .../org/antlr/test/TestCharDFAConversion.java | 552 ++ .../org/antlr/test/TestCompositeGrammars.java | 870 ++ .../org/antlr/test/TestDFAConversion.java | 1677 ++++ .../java/org/antlr/test/TestDFAMatching.java | 106 + .../java/org/antlr/test/TestFastQueue.java | 131 + .../java/org/antlr/test/TestHeteroAST.java | 517 + .../org/antlr/test/TestInterpretedLexing.java | 180 + .../antlr/test/TestInterpretedParsing.java | 186 + .../java/org/antlr/test/TestIntervalSet.java | 395 + .../antlr/test/TestJavaCodeGeneration.java | 131 + .../test/java/org/antlr/test/TestLexer.java | 255 + .../java/org/antlr/test/TestMessages.java | 78 + .../org/antlr/test/TestNFAConstruction.java | 1209 +++ .../java/org/antlr/test/TestRewriteAST.java | 1461 +++ .../org/antlr/test/TestRewriteTemplates.java | 323 + .../test/TestSemanticPredicateEvaluation.java | 242 + .../antlr/test/TestSemanticPredicates.java | 934 ++ .../test/java/org/antlr/test/TestSets.java | 292 + .../org/antlr/test/TestSymbolDefinitions.java | 918 ++ .../TestSyntacticPredicateEvaluation.java | 423 + .../java/org/antlr/test/TestTemplates.java | 375 + .../antlr/test/TestTokenRewriteStream.java | 797 ++ .../org/antlr/test/TestTopologicalSort.java | 113 + .../antlr/test/TestTreeGrammarRewriteAST.java | 1101 +++ .../java/org/antlr/test/TestTreeIterator.java | 134 + .../org/antlr/test/TestTreeNodeStream.java | 324 + .../java/org/antlr/test/TestTreeParsing.java | 343 + .../java/org/antlr/test/TestTreeWizard.java | 394 + .../test/java/org/antlr/test/TestTrees.java | 409 + 1709 files changed, 324966 insertions(+) create mode 100644 antlr-3.1.3/BUILD.txt create mode 100644 antlr-3.1.3/antlr.config create mode 100644 antlr-3.1.3/gunit/CHANGES.txt create mode 100644 antlr-3.1.3/gunit/LICENSE.txt create mode 100644 antlr-3.1.3/gunit/README.txt create mode 100644 antlr-3.1.3/gunit/antlr.config create mode 100644 antlr-3.1.3/gunit/pom.xml create mode 100644 antlr-3.1.3/gunit/src/main/antlr3/org/antlr/gunit/gUnit.g create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/AbstractTest.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/BooleanTest.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/GrammarInfo.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/ITestCase.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/ITestSuite.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/Interp.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/InvalidInputException.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/JUnitCodeGen.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/OutputTest.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/ReturnTest.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitBaseTest.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitExecutor.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitTestInput.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitTestResult.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitTestSuite.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/AbstractInputEditor.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/AwAdapter.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/IController.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/RuleListController.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/RunnerController.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/StatusBarController.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/TestCaseEditController.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/Tool.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/Translator.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/WorkSpaceController.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/WorkSpaceView.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/gunit.stg create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/ImageFactory.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/accept.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/add.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/addfile24.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/delete24.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/edit16.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/favb16.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/favb24.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/file16.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/filesearch24.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/floppy24.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/folder24.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/help24.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/next24.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/redo24.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/refresh24.png create mode 100755 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/runfail.png create mode 100755 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/runpass.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/saveas24.png create mode 100755 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/testgroup.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/testgroupx.png create mode 100755 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/testsuite.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/textfile16.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/textfile24.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/undo24.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/windowb16.png create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/ITestCaseInput.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/ITestCaseOutput.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/Rule.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCase.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseInputFile.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseInputMultiString.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseInputString.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseOutputAST.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseOutputResult.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseOutputReturn.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseOutputStdOut.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestSuite.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/ANTLRv3.g create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/ANTLRv3.tokens create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/ANTLRv3Lexer.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/ANTLRv3Parser.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/StGUnit.g create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/StGUnit.tokens create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/StGUnitLexer.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/StGUnitParser.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/runner/NotifiedTestExecuter.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/runner/ParserLoader.java create mode 100644 antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/runner/gUnitAdapter.java create mode 100644 antlr-3.1.3/gunit/src/main/resources/org/antlr/gunit/gUnitTestResult.stg create mode 100644 antlr-3.1.3/gunit/src/main/resources/org/antlr/gunit/junit.stg create mode 100644 antlr-3.1.3/gunit/src/test/java/org/antlr/gunit/GunitTest.java create mode 100644 antlr-3.1.3/lib/._stringtemplate-3.2.jar create mode 100644 antlr-3.1.3/lib/antlr-2.7.7.jar create mode 100644 antlr-3.1.3/lib/antlr-3.1.3.jar create mode 100644 antlr-3.1.3/lib/antlr-runtime-3.1.3.jar create mode 100644 antlr-3.1.3/lib/gunit.jar create mode 100644 antlr-3.1.3/lib/stringtemplate-3.2.jar create mode 100644 antlr-3.1.3/runtime/ActionScript/AUTHORS create mode 100644 antlr-3.1.3/runtime/ActionScript/LICENSE create mode 100644 antlr-3.1.3/runtime/ActionScript/README create mode 100644 antlr-3.1.3/runtime/ActionScript/lib/antlr3.swc create mode 100644 antlr-3.1.3/runtime/ActionScript/project/.actionScriptProperties create mode 100644 antlr-3.1.3/runtime/ActionScript/project/.flexLibProperties create mode 100644 antlr-3.1.3/runtime/ActionScript/project/.project create mode 100644 antlr-3.1.3/runtime/ActionScript/project/.settings/org.eclipse.core.resources.prefs create mode 100644 antlr-3.1.3/runtime/ActionScript/project/README.txt create mode 100644 antlr-3.1.3/runtime/ActionScript/project/build.xml create mode 100644 antlr-3.1.3/runtime/ActionScript/project/lib/FlexAntTasks.jar create mode 100644 antlr-3.1.3/runtime/ActionScript/project/lib/FlexUnitOptional.swc create mode 100755 antlr-3.1.3/runtime/ActionScript/project/lib/flexunit.swc create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/ANTLRFileStream.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/ANTLRStringStream.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/BaseRecognizer.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/BitSet.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CharStream.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CharStreamConstants.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CharStreamState.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CommonToken.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CommonTokenStream.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/DFA.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/EarlyExitException.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/FailedPredicateException.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/IntStream.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/Lexer.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedNotSetException.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedRangeException.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedSetException.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedTokenException.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedTreeNodeException.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MissingTokenException.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/NoViableAltException.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/Parser.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/ParserRuleReturnScope.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/RecognitionException.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/RecognizerSharedState.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/RuleReturnScope.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/Token.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/TokenConstants.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/TokenRewriteStream.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/TokenSource.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/TokenStream.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/UnwantedTokenException.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/BaseTree.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/BaseTreeAdaptor.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/CommonErrorNode.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/CommonTree.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/CommonTreeAdaptor.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/CommonTreeNodeStream.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteCardinalityException.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteEarlyExitException.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteEmptyStreamException.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteRuleElementStream.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteRuleNodeStream.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteRuleSubtreeStream.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteRuleTokenStream.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/Tree.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeAdaptor.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeConstants.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeNodeStream.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeParser.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeRuleReturnScope.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/version.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/test/Antlr3Test.mxml create mode 100644 antlr-3.1.3/runtime/ActionScript/project/test/org/antlr/runtime/test/AllTests.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/test/org/antlr/runtime/test/TestANTLRStringStream.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/test/org/antlr/runtime/test/TestBitSet.as create mode 100644 antlr-3.1.3/runtime/ActionScript/project/test/org/antlr/runtime/test/TestDFA.as create mode 100644 antlr-3.1.3/runtime/C/AUTHORS create mode 100644 antlr-3.1.3/runtime/C/C.sln create mode 100644 antlr-3.1.3/runtime/C/C.vcproj create mode 100644 antlr-3.1.3/runtime/C/C.vcproj.vspscc create mode 100644 antlr-3.1.3/runtime/C/C.vssscc create mode 100644 antlr-3.1.3/runtime/C/COPYING create mode 100644 antlr-3.1.3/runtime/C/ChangeLog create mode 100644 antlr-3.1.3/runtime/C/Cvs2005.sln create mode 100644 antlr-3.1.3/runtime/C/Cvs2005.vcproj create mode 100644 antlr-3.1.3/runtime/C/INSTALL create mode 100644 antlr-3.1.3/runtime/C/Makefile.am create mode 100644 antlr-3.1.3/runtime/C/NEWS create mode 100644 antlr-3.1.3/runtime/C/README create mode 100644 antlr-3.1.3/runtime/C/configure.ac create mode 100644 antlr-3.1.3/runtime/C/dist/libantlr3c-3.0.1.tar.gz create mode 100644 antlr-3.1.3/runtime/C/dist/libantlr3c-3.1.1.tar.gz create mode 100644 antlr-3.1.3/runtime/C/dist/libantlr3c-3.1.2.tar.gz create mode 100644 antlr-3.1.3/runtime/C/dist/libantlr3c-3.1.3.tar.gz create mode 100644 antlr-3.1.3/runtime/C/dist/libantlr3c-3.1.tar.gz create mode 100644 antlr-3.1.3/runtime/C/doxyfile create mode 100644 antlr-3.1.3/runtime/C/doxygen/atsections.dox create mode 100644 antlr-3.1.3/runtime/C/doxygen/build.dox create mode 100644 antlr-3.1.3/runtime/C/doxygen/buildrec.dox create mode 100644 antlr-3.1.3/runtime/C/doxygen/changes31.dox create mode 100644 antlr-3.1.3/runtime/C/doxygen/doxygengroups.dox create mode 100644 antlr-3.1.3/runtime/C/doxygen/generate.dox create mode 100644 antlr-3.1.3/runtime/C/doxygen/interop.dox create mode 100644 antlr-3.1.3/runtime/C/doxygen/knownissues.dox create mode 100644 antlr-3.1.3/runtime/C/doxygen/mainpage.dox create mode 100644 antlr-3.1.3/runtime/C/doxygen/runtime.dox create mode 100644 antlr-3.1.3/runtime/C/doxygen/using.dox create mode 100644 antlr-3.1.3/runtime/C/include/antlr3.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3baserecognizer.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3basetree.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3basetreeadaptor.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3bitset.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3collections.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3commontoken.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3commontree.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3commontreeadaptor.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3commontreenodestream.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3convertutf.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3cyclicdfa.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3debugeventlistener.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3defs.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3encodings.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3errors.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3exception.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3filestream.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3input.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3interfaces.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3intstream.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3lexer.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3memory.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3parser.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3parsetree.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3recognizersharedstate.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3rewritestreams.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3string.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3stringstream.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3tokenstream.h create mode 100644 antlr-3.1.3/runtime/C/include/antlr3treeparser.h create mode 100644 antlr-3.1.3/runtime/C/src/antlr3baserecognizer.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3basetree.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3basetreeadaptor.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3bitset.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3collections.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3commontoken.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3commontree.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3commontreeadaptor.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3commontreenodestream.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3convertutf.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3cyclicdfa.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3debughandlers.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3encodings.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3exception.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3filestream.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3inputstream.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3intstream.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3lexer.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3parser.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3rewritestreams.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3string.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3stringstream.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3tokenstream.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3treeparser.c create mode 100644 antlr-3.1.3/runtime/C/src/antlr3ucs2inputstream.c create mode 100644 antlr-3.1.3/runtime/C/vsrulefiles/antlr3lexer.rules create mode 100644 antlr-3.1.3/runtime/C/vsrulefiles/antlr3lexerandparser.rules create mode 100644 antlr-3.1.3/runtime/C/vsrulefiles/antlr3parser.rules create mode 100644 antlr-3.1.3/runtime/C/vsrulefiles/antlr3treeparser.rules create mode 100644 antlr-3.1.3/runtime/CSharp/Cutting a new release.txt create mode 100644 antlr-3.1.3/runtime/CSharp/LICENSE.TXT create mode 100644 antlr-3.1.3/runtime/CSharp/Libraries/MbUnit/MbUnit.Framework.dll create mode 100644 antlr-3.1.3/runtime/CSharp/Libraries/MbUnit/MbUnit.MSBuild.Tasks.dll create mode 100644 antlr-3.1.3/runtime/CSharp/Libraries/MbUnit/MbUnit.Tasks.dll create mode 100644 antlr-3.1.3/runtime/CSharp/Libraries/MbUnit/QuickGraph.Algorithms.dll create mode 100644 antlr-3.1.3/runtime/CSharp/Libraries/MbUnit/QuickGraph.dll create mode 100644 antlr-3.1.3/runtime/CSharp/Libraries/StringTemplate.NET/net-1.1/StringTemplate.dll create mode 100644 antlr-3.1.3/runtime/CSharp/Libraries/StringTemplate.NET/net-1.1/antlr.runtime.dll create mode 100644 antlr-3.1.3/runtime/CSharp/Libraries/StringTemplate.NET/net-2.0/StringTemplate.dll create mode 100644 antlr-3.1.3/runtime/CSharp/Libraries/StringTemplate.NET/net-2.0/antlr.runtime.dll create mode 100644 antlr-3.1.3/runtime/CSharp/NOTICE.TXT create mode 100644 antlr-3.1.3/runtime/CSharp/README.TXT create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime (VS2003).sln create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime (VS2005).sln create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/ANTLRxxxxStreamFixture.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Tests (VS2003).csproj create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/Antlr3.Runtime.Tests (VS2005).csproj create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/ITreeFixture.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/ITreeNodeStreamFixture.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/Properties/AssemblyInfo.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/RewriteRuleXxxxStreamFixture.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/TestDriver.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/TestFixtureBase.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/TreeWizardFixture.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Collections/CollectionUtils.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Collections/HashList.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Collections/StackList.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/BlankDebugEventListener.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugEventHub.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugEventRepeater.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugEventSocketProxy.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugParser.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugTokenStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugTreeAdaptor.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugTreeNodeStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugTreeParser.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/IDebugEventListener.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/ParseTreeBuilder.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/Profiler.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/RemoteDebugEventSocketListener.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/TraceDebugEventListener.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/Tracer.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Misc/ErrorManager.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Misc/Stats.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/BaseTree.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/BaseTreeAdaptor.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/CommonErrorNode.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/CommonTree.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/CommonTreeAdaptor.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/CommonTreeNodeStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ITree.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ITreeAdaptor.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ITreeNodeStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ITreeVisitorAction.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ParseTree.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteCardinalityException.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteEarlyExitException.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteEmptyStreamException.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteRuleElementStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteRuleNodeStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteRuleSubtreeStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteRuleTokenStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreeParser.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreePatternLexer.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreePatternParser.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreeRuleReturnScope.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreeVisitor.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreeWizard.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/UnBufferedTreeNodeStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ANTLRFileStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ANTLRInputStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ANTLRReaderStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ANTLRStringStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/BaseRecognizer.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/BitSet.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/CharStreamState.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ClassicToken.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/CommonToken.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/CommonTokenStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/Constants.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/DFA.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/EarlyExitException.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/FailedPredicateException.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ICharStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/IIntStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/IToken.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ITokenSource.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ITokenStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/Lexer.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedNotSetException.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedRangeException.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedSetException.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedTokenException.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedTreeNodeException.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MissingTokenException.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/NoViableAltException.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/Parser.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ParserRuleReturnScope.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/RecognitionException.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/RecognizerSharedState.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/RuleReturnScope.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/Token.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/TokenRewriteStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/UnwantedTokenException.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr3.Runtime (VS2003).csproj create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr3.Runtime (VS2005).csproj create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/AssemblyInfo.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Messages.Designer.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Messages.resx create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/default.build create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/Antlr.Utility.Tree/DOTTreeGenerator.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/Antlr3.Utility (VS2003).csproj create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/Antlr3.Utility (VS2005).csproj create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/AssemblyInfo.cs create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/default.build create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3_KeyPair.snk create mode 100644 antlr-3.1.3/runtime/CSharp/Sources/Antlr3_PublicKey.snk create mode 100644 antlr-3.1.3/runtime/CSharp/all.antlr3.runtime.net.build create mode 100644 antlr-3.1.3/runtime/CSharp/antlr3.runtime.net.common.inc create mode 100644 antlr-3.1.3/runtime/CSharp/dist/DOT-NET-runtime-3.1.3.zip create mode 100644 antlr-3.1.3/runtime/CSharp/doxyfile create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Antlr3.Runtime.Debug.csproj create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Antlr3.Runtime.Debug.csproj.vspscc create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/BlankDebugEventListener.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventHub.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventRepeater.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventSocketProxy.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugParser.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTokenStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeAdaptor.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeNodeStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeParser.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/DictionaryExtensions.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/EnumeratorExtensions.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/ExceptionExtensions.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/IOExtensions.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/Iterator.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/JSystem.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/ListExtensions.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/ObjectExtensions.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/SetExtensions.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/StackExtensions.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/StringBuilderExtensions.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/StringExtensions.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/StringTokenizer.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/SubList.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/TreeExtensions.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/TypeExtensions.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Misc/Stats.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/ParseTreeBuilder.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/ParserDebugger.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Profiler.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Properties/AssemblyInfo.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/RemoteDebugEventSocketListener.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/TraceDebugEventListener.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Tracer.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Antlr3.Runtime.JavaExtensions.csproj create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Antlr3.Runtime.JavaExtensions.csproj.vspscc create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/DictionaryExtensions.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/IOExtensions.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/JSystem.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/LexerExtensions.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Properties/AssemblyInfo.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Antlr3.Runtime.Test.csproj create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Antlr3.Runtime.Test.csproj.vspscc create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammar.g3 create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarLexer.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarLexerHelper.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarParser.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarParserHelper.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammar.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammar.g3 create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammarHelper.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammar.g3 create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarLexer.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarLexerHelper.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarParser.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarParserHelper.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammar.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammar.g3 create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammarHelper.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/JavaCompat/Expr.g3 create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/JavaCompat/ExprLexer.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/JavaCompat/ExprParser.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Properties/AssemblyInfo.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.sln create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.vssscc create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRFileStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRInputStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRReaderStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRStringStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Antlr3.Runtime.csproj create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Antlr3.Runtime.csproj.vspscc create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/BaseRecognizer.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/BitSet.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/CharStreamConstants.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/CharStreamState.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ClassicToken.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/CommonToken.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/CommonTokenStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/DFA.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Debug/DebugEventListenerConstants.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Debug/IDebugEventListener.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/EarlyExitException.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/FailedPredicateException.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ICharStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/IIntStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/IToken.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ITokenSource.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ITokenStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Lexer.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/FastQueue.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/LookaheadStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedNotSetException.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedRangeException.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedSetException.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedTokenException.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedTreeNodeException.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MissingTokenException.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/NoViableAltException.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Parser.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ParserRuleReturnScope.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Properties/AssemblyInfo.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/RecognitionException.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/RecognizerSharedState.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/RuleReturnScope.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/TokenConstants.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/TokenRewriteStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BaseTree.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BaseTreeAdaptor.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BufferedTreeNodeStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonErrorNode.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTree.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeAdaptor.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeNodeStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITree.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeAdaptor.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeNodeStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeVisitorAction.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ParseTree.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteCardinalityException.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteEarlyExitException.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteEmptyStreamException.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleElementStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleNodeStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleSubtreeStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleTokenStream.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeConstants.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeFilter.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeIterator.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeParser.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreePatternLexer.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreePatternParser.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeRewriter.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeRuleReturnScope.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeVisitor.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeWizard.cs create mode 100644 antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/UnwantedTokenException.cs create mode 100644 antlr-3.1.3/runtime/Delphi/LICENSE.TXT create mode 100644 antlr-3.1.3/runtime/Delphi/NOTICE.TXT create mode 100644 antlr-3.1.3/runtime/Delphi/README.TXT create mode 100644 antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Collections.Tests.pas create mode 100644 antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Tests.pas create mode 100644 antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Tools.Tests.pas create mode 100644 antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Tree.Tests.pas create mode 100644 antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/TestDriver.dpr create mode 100644 antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/TestDriver.dproj create mode 100644 antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/TestDriver.res create mode 100644 antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime/Antlr.Runtime.Collections.pas create mode 100644 antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime/Antlr.Runtime.Tools.pas create mode 100644 antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime/Antlr.Runtime.Tree.pas create mode 100644 antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime/Antlr.Runtime.pas create mode 100644 antlr-3.1.3/runtime/Java/antlr.config create mode 100644 antlr-3.1.3/runtime/Java/doxyfile create mode 100644 antlr-3.1.3/runtime/Java/pom.xml create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ANTLRFileStream.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ANTLRInputStream.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ANTLRReaderStream.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ANTLRStringStream.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/BaseRecognizer.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/BitSet.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/CharStream.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/CharStreamState.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ClassicToken.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/CommonToken.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/CommonTokenStream.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/DFA.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/EarlyExitException.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/FailedPredicateException.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/IntStream.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/Lexer.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedNotSetException.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedRangeException.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedSetException.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedTokenException.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedTreeNodeException.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MissingTokenException.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/NoViableAltException.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/Parser.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ParserRuleReturnScope.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/RecognitionException.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/RecognizerSharedState.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/RuleReturnScope.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/SerializedGrammar.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/Token.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/TokenRewriteStream.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/TokenSource.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/TokenStream.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/UnwantedTokenException.java create mode 100755 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/BlankDebugEventListener.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugEventHub.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugEventListener.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugEventRepeater.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugEventSocketProxy.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugParser.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugTokenStream.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugTreeAdaptor.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugTreeNodeStream.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugTreeParser.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/ParseTreeBuilder.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/Profiler.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/RemoteDebugEventSocketListener.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/TraceDebugEventListener.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/Tracer.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/misc/FastQueue.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/misc/IntArray.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/misc/LookaheadStream.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/misc/Stats.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/BaseTree.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/BaseTreeAdaptor.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/BufferedTreeNodeStream.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/CommonErrorNode.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/CommonTree.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/CommonTreeAdaptor.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/CommonTreeNodeStream.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/DOTTreeGenerator.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/ParseTree.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteCardinalityException.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteEarlyExitException.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteEmptyStreamException.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteRuleElementStream.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteRuleNodeStream.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteRuleSubtreeStream.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteRuleTokenStream.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/Tree.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeAdaptor.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeFilter.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeIterator.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeNodeStream.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeParser.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreePatternLexer.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreePatternParser.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeRewriter.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeRuleReturnScope.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeVisitor.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeVisitorAction.java create mode 100644 antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeWizard.java create mode 100755 antlr-3.1.3/runtime/JavaScript/AUTHORS create mode 100755 antlr-3.1.3/runtime/JavaScript/ChangeLog create mode 100755 antlr-3.1.3/runtime/JavaScript/build/README create mode 100755 antlr-3.1.3/runtime/JavaScript/build/antlr3.properties create mode 100755 antlr-3.1.3/runtime/JavaScript/build/build.xml create mode 100755 antlr-3.1.3/runtime/JavaScript/build/license.txt create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/ANTLRFileStream.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/ANTLRStringStream.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/BaseRecognizer.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/BitSet.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/CharStream.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/CommonToken.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/CommonTokenStream.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/DFA.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/EarlyExitException.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/FailedPredicateException.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/IndexOutOfBoundsExceptions.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/Lexer.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedNotSetException.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedRangeExceptions.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedSetException.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedTokenException.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedTreeNodeException.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MissingTokenException.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/NoViableAltException.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/Parser.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/ParserRuleReturnScope.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/RecognitionException.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/RecognizerSharedState.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/Token.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/TokenRewriteStream.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/UnwantedTokenException.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/BaseTree.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/BaseTreeAdaptor.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/CommonErrorNode.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/CommonTree.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/CommonTreeAdaptor.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/CommonTreeNodeStream.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteCardinalityException.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteEarlyExitException.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteEmptyStreamException.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteRuleElementStream.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteRuleNodeStream.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteRuleSubtreeStream.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteRuleTokenStream.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/Tree.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/TreeNodeStream.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/TreeParser.js create mode 100755 antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/TreeRuleReturnScope.js create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/Python.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/all.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/rhino-python.extensions create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/rhino-python.input create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/rhino-python.output create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/rhino-python.prog create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t001lexer.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t001lexer.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t002lexer.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t002lexer.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t003lexer.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t003lexer.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t004lexer.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t004lexer.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t005lexer.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t005lexer.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t006lexer.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t006lexer.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t007lexer.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t007lexer.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t008lexer.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t008lexer.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t009lexer.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t009lexer.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t010lexer.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t010lexer.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t011lexer.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t011lexer.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t012lexerXML.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t012lexerXML.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t013parser.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t013parser.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t014parser.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t014parser.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t015calc.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t015calc.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t016actions.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t016actions.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t017parser.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t017parser.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t018llstar.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t018llstar.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t019lexer.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t019lexer.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t020fuzzy.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t020fuzzy.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t021hoist.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t021hoist.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t022scopes.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t022scopes.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t023scopes.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t023scopes.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t024finally.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t024finally.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t025lexerRulePropertyRef.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t025lexerRulePropertyRef.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t026actions.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t026actions.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t027eof.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t027eof.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t029synpredgate.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t029synpredgate.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t030specialStates.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t030specialStates.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t031emptyAlt.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t031emptyAlt.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t032subrulePredict.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t032subrulePredict.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t033backtracking.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t033backtracking.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t034tokenLabelPropertyRef.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t034tokenLabelPropertyRef.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t035ruleLabelPropertyRef.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t035ruleLabelPropertyRef.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t036multipleReturnValues.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t036multipleReturnValues.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t037rulePropertyRef.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t037rulePropertyRef.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t038lexerRuleLabel.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t038lexerRuleLabel.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t039labels.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t039labels.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t040bug80.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t040bug80.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t041parameters.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t041parameters.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t042ast.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t042ast.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t043synpred.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t043synpred.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t044trace.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t044trace.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t045dfabug.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t045dfabug.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t046rewrite.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t046rewrite.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t047treeparser.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t047treeparser.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t047treeparserWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t048rewrite.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t048rewrite.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparser.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsera.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparseraWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserb.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserbWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserc.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsercWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserd.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserdWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsere.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsereWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserf.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserfWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserg.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsergWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserh.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserhWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparseri.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparseriWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteAST.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTa.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTaWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTaa.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTaaWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTab.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTabWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTac.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTacWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTb.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTbWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTc.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTcWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTd.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTdWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTe.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTeWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTf.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTfWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTg.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTgWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTh.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASThWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTi.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTiWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTj.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTjWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTk.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTkWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTl.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTlWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTm.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTmWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTn.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTnWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTo.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASToWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTp.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTpWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTq.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTqWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTr.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTrWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTs.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTsWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTt.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTtWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTu.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTuWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTv.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTvWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTw.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTwWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTx.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTxWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTy.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTyWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTz.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTzWalker.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t052import.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM1.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM2.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM3.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM4.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM5.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM6.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM7.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM8.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS1.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS2.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS3.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS4.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS5.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS6.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS7.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS8.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t052importT4.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t052importT5.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053hetero.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT1.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT10.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT11.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT12.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT13.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT14.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT15.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT16.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT17.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT18.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT2.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT3.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT4.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT5.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT6.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT7.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT8.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT9.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP13.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP14.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP15.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP16.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP17.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP18.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer1.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer10.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer11.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer12.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer13.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer14.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer15.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer2.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer3.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer4.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer5.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer6.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer7.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer8.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer9.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST1.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST10.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST11.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST12.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST13.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST14.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST15.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST16.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST17.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST18.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST19.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST2.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST20.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST21.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST22.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST23.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST24.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST25.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST26.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST27.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST28.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST29.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST3.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST30.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST31.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST32.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST33.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST34.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST35.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST36.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST37.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST38.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST39.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST4.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST40.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST41.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST42.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST43.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST44.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST45.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST46.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST47.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST48.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST49.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST5.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST50.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST51.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST52.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST53.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST54.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST6.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST7.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST8.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST9.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST.html create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST1.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST10.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST11.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST12.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST13.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST14.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST15.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST16.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST17.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST18.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST19.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST2.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST20.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST21.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST22.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST23.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST24.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST25.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST26.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST27.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST28.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST29.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST3.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST30.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST31.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST32.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST33.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST34.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST35.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST36.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST37.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST38.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST39.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST4.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST40.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST41.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST42.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST43.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST44.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST45.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST46.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST47.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST48.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST49.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST5.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST50.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST51.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST52.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST53.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST54.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST55.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST56.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST57.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST58.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST59.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST6.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST60.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST61.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST62.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST63.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST64.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST65.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST66.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST67.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST68.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST69.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST7.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST70.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST71.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST72.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST73.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST74.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST75.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST76.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST77.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST78.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST79.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST8.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST80.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST81.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST82.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST83.g create mode 100755 antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST9.g create mode 100755 antlr-3.1.3/runtime/JavaScript/third/antcontrib.properties create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLR.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLR.xcodeproj/project.pbxproj create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRBaseRecognizer.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRBaseRecognizer.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRBaseRecognizerState.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRBaseRecognizerState.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRBitSet.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRBitSet.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRCharStream.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonToken.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonToken.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTokenStream.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTokenStream.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTree.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTree.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTreeAdaptor.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTreeAdaptor.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTreeNodeStream.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTreeNodeStream.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRDFA.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRDFA.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebug.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugEventListener.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugEventProxy.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugEventProxy.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugParser.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugParser.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTokenStream.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTokenStream.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeAdaptor.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeAdaptor.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeNodeStream.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeNodeStream.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeParser.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeParser.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLREarlyExitException.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLREarlyExitException.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRFailedPredicateException.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRFailedPredicateException.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRIntStream.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexer.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexer.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexerRuleReturnScope.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexerRuleReturnScope.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexerState.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexerState.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedRangeException.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedRangeException.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedSetException.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedSetException.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedTokenException.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedTokenException.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedTreeNodeException.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedTreeNodeException.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRNoViableAltException.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRNoViableAltException.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRParser.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRParser.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRParserRuleReturnScope.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRParserRuleReturnScope.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRRecognitionException.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRRecognitionException.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleElementStream.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleElementStream.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleSubtreeStream.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleSubtreeStream.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleTokenStream.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleTokenStream.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRStringStream.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRStringStream.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRStringStreamState.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRStringStreamState.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRToken+DebuggerSupport.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRToken+DebuggerSupport.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRToken.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRTokenSource.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRTokenStream.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRTree.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRTree.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeAdaptor.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeAdaptor.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeException.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeException.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeNodeStream.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeParser.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeParser.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeParserRuleReturnScope.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeParserRuleReturnScope.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRUnbufferedCommonTreeNodeStream.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRUnbufferedCommonTreeNodeStream.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRUnbufferedCommonTreeNodeStreamState.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLRUnbufferedCommonTreeNodeStreamState.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/ANTLR_Prefix.pch create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/CHANGES.txt create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/English.lproj/InfoPlist.strings create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/Info.plist create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/README.rtf create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/Test-Info.plist create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/TestRewriteRuleTokenStream.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/TestRewriteRuleTokenStream.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/TestStringStream.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/TestStringStream.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleC.g create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleC.tokens create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleCLexer.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleCLexer.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleCParser.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleCParser.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleC__.gl create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/input create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/main.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/output create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/combined/Combined.g create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/combined/Combined.tokens create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/combined/CombinedLexer.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/combined/CombinedLexer.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/combined/CombinedParser.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/combined/CombinedParser.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/combined/Combined__.gl create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/combined/main.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/FuzzyJava.gl create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/FuzzyJava.tokens create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/FuzzyJavaLexer.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/FuzzyJavaLexer.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/input create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/main.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/T.tokens create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/TLexer.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/TLexer.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/TParser.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/TParser.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/input create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/main.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/output create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/Test.gl create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/Test.tokens create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/TestLexer.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/TestLexer.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/main.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTable.g create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTable.tokens create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTableLexer.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTableLexer.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTableParser.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTableParser.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTable__.gl create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/input create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/main.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/output create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleC.g create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleC.tokens create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCLexer.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCLexer.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCParser.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCParser.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.gtp create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.tokens create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleC__.gl create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/input create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/main.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/output create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewrite.g create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewrite.tokens create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewriteLexer.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewriteLexer.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewriteParser.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewriteParser.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewrite__.g create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/main.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/tests/TestBitSet.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/tests/TestBitSet.m create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/tests/TestStringStream.h create mode 100644 antlr-3.1.3/runtime/ObjC/Framework/tests/TestStringStream.m create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/ANTLRCompilerSpecification.h create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/ANTLRCompilerSpecification.m create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/ANTLRXCPlugin.h create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/ANTLRXCPlugin.m create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/BuildSystemInterfaces.h create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/DependencyGraph.h create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/English.lproj/InfoPlist.strings create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/English.lproj/org.antlr.Tool.strings create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/GrammarFilter.g create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/GrammarFilter.tokens create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/GrammarFilterLexer.h create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/GrammarFilterLexer.m create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/Info.plist create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/OutputParser.h create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/Specifications.h create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/Xcode create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/Xcode plugin.xcodeproj/project.pbxproj create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/Xcode plugin_Prefix.pch create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/antlr.pbcompspec create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/antlr.pbfilespec create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/antlr.pblangspec create mode 100644 antlr-3.1.3/runtime/ObjC/Xcode plugin/antlr.xcbuildrules create mode 100644 antlr-3.1.3/runtime/Perl5/.p4ignore create mode 100644 antlr-3.1.3/runtime/Perl5/Build.PL create mode 100644 antlr-3.1.3/runtime/Perl5/Changes create mode 100644 antlr-3.1.3/runtime/Perl5/INSTALL create mode 100644 antlr-3.1.3/runtime/Perl5/MANIFEST create mode 100644 antlr-3.1.3/runtime/Perl5/MANIFEST.SKIP create mode 100644 antlr-3.1.3/runtime/Perl5/Makefile.PL create mode 100644 antlr-3.1.3/runtime/Perl5/README create mode 100644 antlr-3.1.3/runtime/Perl5/docs/design.pod create mode 100644 antlr-3.1.3/runtime/Perl5/examples/README create mode 100644 antlr-3.1.3/runtime/Perl5/examples/expr/Expr.g create mode 100644 antlr-3.1.3/runtime/Perl5/examples/expr/expr.pl create mode 100644 antlr-3.1.3/runtime/Perl5/examples/id/IDLexer.g create mode 100644 antlr-3.1.3/runtime/Perl5/examples/id/id.pl create mode 100644 antlr-3.1.3/runtime/Perl5/examples/mexpr/MExpr.g create mode 100644 antlr-3.1.3/runtime/Perl5/examples/mexpr/mexpr.pl create mode 100644 antlr-3.1.3/runtime/Perl5/examples/simplecalc/SimpleCalc.g create mode 100644 antlr-3.1.3/runtime/Perl5/examples/simplecalc/simplecalc.pl create mode 100644 antlr-3.1.3/runtime/Perl5/examples/zero-one/T.g create mode 100644 antlr-3.1.3/runtime/Perl5/examples/zero-one/t-error.pl create mode 100644 antlr-3.1.3/runtime/Perl5/examples/zero-one/t.pl create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/ANTLRFileStream.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/ANTLRStringStream.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/BaseRecognizer.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/BitSet.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/CharStream.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/CharStreamState.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Class.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/CommonToken.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/CommonTokenStream.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/DFA.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/EarlyExitException.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Exception.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/IntStream.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Lexer.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/MismatchedSetException.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/MismatchedTokenException.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/MissingTokenException.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/NoViableAltException.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Object.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Object/Signature.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Parser.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/ParserRuleReturnScope.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/RecognitionException.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/RecognizerSharedState.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/RuleReturnScope.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Stream.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Token.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/TokenSource.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/TokenStream.pm create mode 100644 antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/UnwantedTokenException.pm create mode 100644 antlr-3.1.3/runtime/Perl5/port.yml create mode 100644 antlr-3.1.3/runtime/Perl5/t/author/api.t create mode 100644 antlr-3.1.3/runtime/Perl5/t/author/perlcritic.t create mode 100644 antlr-3.1.3/runtime/Perl5/t/author/perlcriticrc create mode 100644 antlr-3.1.3/runtime/Perl5/t/author/pod-coverage.t create mode 100644 antlr-3.1.3/runtime/Perl5/t/author/pod.t create mode 100644 antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/ANTLRStringStream.t create mode 100644 antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/BitSet.t create mode 100644 antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/Class.t create mode 100644 antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/CommonToken.t create mode 100644 antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/Exception.t create mode 100644 antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/Lexer.t create mode 100644 antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/Object.t create mode 100644 antlr-3.1.3/runtime/Perl5/t/examples/expr.t create mode 100644 antlr-3.1.3/runtime/Perl5/t/examples/fig.t create mode 100644 antlr-3.1.3/runtime/Perl5/t/examples/simplecalc.t create mode 100644 antlr-3.1.3/runtime/Perl5/t/lexer.t create mode 100644 antlr-3.1.3/runtime/Perl5/t/lib/ANTLR/Runtime/Test.pm create mode 100644 antlr-3.1.3/runtime/Perl5/t/version.t create mode 100755 antlr-3.1.3/runtime/Perl5/tools/antlr.bat create mode 100755 antlr-3.1.3/runtime/Perl5/tools/antlr.sh create mode 100644 antlr-3.1.3/runtime/Perl5/tools/port.pl create mode 100644 antlr-3.1.3/runtime/Python/AUTHORS create mode 100644 antlr-3.1.3/runtime/Python/ChangeLog create mode 100644 antlr-3.1.3/runtime/Python/LICENSE create mode 100644 antlr-3.1.3/runtime/Python/MANIFEST.in create mode 100644 antlr-3.1.3/runtime/Python/README create mode 100644 antlr-3.1.3/runtime/Python/TODO create mode 100644 antlr-3.1.3/runtime/Python/antlr3/__init__.py create mode 100644 antlr-3.1.3/runtime/Python/antlr3/compat.py create mode 100644 antlr-3.1.3/runtime/Python/antlr3/constants.py create mode 100644 antlr-3.1.3/runtime/Python/antlr3/debug.py create mode 100644 antlr-3.1.3/runtime/Python/antlr3/dfa.py create mode 100644 antlr-3.1.3/runtime/Python/antlr3/dottreegen.py create mode 100644 antlr-3.1.3/runtime/Python/antlr3/exceptions.py create mode 100644 antlr-3.1.3/runtime/Python/antlr3/extras.py create mode 100644 antlr-3.1.3/runtime/Python/antlr3/main.py create mode 100644 antlr-3.1.3/runtime/Python/antlr3/recognizers.py create mode 100644 antlr-3.1.3/runtime/Python/antlr3/streams.py create mode 100644 antlr-3.1.3/runtime/Python/antlr3/tokens.py create mode 100644 antlr-3.1.3/runtime/Python/antlr3/tree.py create mode 100644 antlr-3.1.3/runtime/Python/antlr3/treewizard.py create mode 100644 antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/__init__.py create mode 100644 antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/compat.py create mode 100644 antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/constants.py create mode 100644 antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/debug.py create mode 100644 antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/dfa.py create mode 100644 antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/dottreegen.py create mode 100644 antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/exceptions.py create mode 100644 antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/extras.py create mode 100644 antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/main.py create mode 100644 antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/recognizers.py create mode 100644 antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/streams.py create mode 100644 antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/tokens.py create mode 100644 antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/tree.py create mode 100644 antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/treewizard.py create mode 100644 antlr-3.1.3/runtime/Python/dist/antlr_python_runtime-3.1.3-py2.4.egg create mode 100644 antlr-3.1.3/runtime/Python/dist/antlr_python_runtime-3.1.3-py2.5.egg create mode 100644 antlr-3.1.3/runtime/Python/dist/antlr_python_runtime-3.1.3-py2.7.egg create mode 100644 antlr-3.1.3/runtime/Python/dist/antlr_python_runtime-3.1.3.tar.gz create mode 100644 antlr-3.1.3/runtime/Python/dist/antlr_python_runtime-3.1.3.zip create mode 100644 antlr-3.1.3/runtime/Python/doxyfile create mode 100644 antlr-3.1.3/runtime/Python/doxypy.py create mode 100644 antlr-3.1.3/runtime/Python/ez_setup.py create mode 100755 antlr-3.1.3/runtime/Python/hudson-build.sh create mode 100755 antlr-3.1.3/runtime/Python/mkdoxy.sh create mode 100644 antlr-3.1.3/runtime/Python/pylintrc create mode 100644 antlr-3.1.3/runtime/Python/setup.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t001lexer.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t001lexer.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t002lexer.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t002lexer.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t003lexer.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t003lexer.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t004lexer.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t004lexer.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t005lexer.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t005lexer.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t006lexer.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t006lexer.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t007lexer.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t007lexer.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t008lexer.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t008lexer.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t009lexer.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t009lexer.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t010lexer.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t010lexer.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t011lexer.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t011lexer.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t012lexerXML.input create mode 100644 antlr-3.1.3/runtime/Python/tests/t012lexerXML.output create mode 100644 antlr-3.1.3/runtime/Python/tests/t012lexerXML.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t012lexerXMLLexer.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t013parser.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t013parser.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t014parser.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t014parser.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t015calc.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t015calc.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t016actions.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t016actions.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t017parser.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t017parser.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t018llstar.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t018llstar.input create mode 100644 antlr-3.1.3/runtime/Python/tests/t018llstar.output create mode 100644 antlr-3.1.3/runtime/Python/tests/t018llstar.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t019lexer.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t019lexer.input create mode 100644 antlr-3.1.3/runtime/Python/tests/t019lexer.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t020fuzzy.input create mode 100644 antlr-3.1.3/runtime/Python/tests/t020fuzzy.output create mode 100644 antlr-3.1.3/runtime/Python/tests/t020fuzzy.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t020fuzzyLexer.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t021hoist.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t021hoist.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t022scopes.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t022scopes.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t023scopes.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t023scopes.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t024finally.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t024finally.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t025lexerRulePropertyRef.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t025lexerRulePropertyRef.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t026actions.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t026actions.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t027eof.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t027eof.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t028labelExpr.g.disabled create mode 100644 antlr-3.1.3/runtime/Python/tests/t029synpredgate.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t029synpredgate.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t030specialStates.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t030specialStates.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t031emptyAlt.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t031emptyAlt.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t032subrulePredict.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t032subrulePredict.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t033backtracking.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t033backtracking.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t034tokenLabelPropertyRef.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t034tokenLabelPropertyRef.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t035ruleLabelPropertyRef.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t035ruleLabelPropertyRef.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t036multipleReturnValues.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t036multipleReturnValues.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t037rulePropertyRef.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t037rulePropertyRef.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t038lexerRuleLabel.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t038lexerRuleLabel.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t039labels.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t039labels.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t040bug80.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t040bug80.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t041parameters.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t041parameters.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t042ast.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t042ast.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t043synpred.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t043synpred.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t044trace.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t044trace.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t045dfabug.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t045dfabug.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t046rewrite.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t046rewrite.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t047treeparser.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t047treeparser.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t047treeparserWalker.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t048rewrite.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t048rewrite.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t048rewrite2.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t049treeparser.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t050decorate.g create mode 100644 antlr-3.1.3/runtime/Python/tests/t050decorate.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t051treeRewriteAST.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t052import.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t053hetero.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t054main.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t055templates.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t056lexer.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t057autoAST.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t058rewriteAST.py create mode 100644 antlr-3.1.3/runtime/Python/tests/t059debug.py create mode 100644 antlr-3.1.3/runtime/Python/tests/testbase.py create mode 100644 antlr-3.1.3/runtime/Python/unittests/testantlr3.py create mode 100644 antlr-3.1.3/runtime/Python/unittests/testbase.py create mode 100644 antlr-3.1.3/runtime/Python/unittests/testdfa.py create mode 100644 antlr-3.1.3/runtime/Python/unittests/testdottreegen.py create mode 100644 antlr-3.1.3/runtime/Python/unittests/testexceptions.py create mode 100644 antlr-3.1.3/runtime/Python/unittests/testrecognizers.py create mode 100644 antlr-3.1.3/runtime/Python/unittests/teststreams.input1 create mode 100644 antlr-3.1.3/runtime/Python/unittests/teststreams.input2 create mode 100644 antlr-3.1.3/runtime/Python/unittests/teststreams.py create mode 100644 antlr-3.1.3/runtime/Python/unittests/testtree.py create mode 100644 antlr-3.1.3/runtime/Python/unittests/testtreewizard.py create mode 100644 antlr-3.1.3/runtime/Python/xmlrunner.py create mode 100644 antlr-3.1.3/tool/CHANGES.txt create mode 100644 antlr-3.1.3/tool/LICENSE.txt create mode 100644 antlr-3.1.3/tool/README.txt create mode 100644 antlr-3.1.3/tool/antlr.config create mode 100644 antlr-3.1.3/tool/pom.xml create mode 100644 antlr-3.1.3/tool/src/main/antlr/org/antlr/grammar/v3/ANTLRv3.g create mode 100644 antlr-3.1.3/tool/src/main/antlr/org/antlr/grammar/v3/ANTLRv3Tree.g create mode 100644 antlr-3.1.3/tool/src/main/antlr/org/antlr/grammar/v3/ActionAnalysis.g create mode 100644 antlr-3.1.3/tool/src/main/antlr/org/antlr/grammar/v3/ActionTranslator.g create mode 100644 antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/antlr.g create mode 100644 antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/antlr.print.g create mode 100644 antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/assign.types.g create mode 100644 antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/buildnfa.g create mode 100644 antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/codegen.g create mode 100644 antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/define.g create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/Tool.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/ActionLabel.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/AnalysisRecursionOverflowException.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/AnalysisTimeoutException.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/DFA.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/DFAOptimizer.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/DFAState.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/DecisionProbe.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/LL1Analyzer.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/LL1DFA.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/Label.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/LookaheadSet.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/NFA.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/NFAConfiguration.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/NFAContext.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/NFAConversionThread.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/NFAState.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/NFAToDFAConverter.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/NonLLStarDecisionException.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/PredicateLabel.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/RuleClosureTransition.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/SemanticContext.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/State.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/StateCluster.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/analysis/Transition.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/codegen/ACyclicDFACodeGenerator.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/codegen/ActionScriptTarget.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/codegen/CPPTarget.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/codegen/CSharp2Target.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/codegen/CSharpTarget.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/codegen/CTarget.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/codegen/CodeGenerator.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/codegen/DelphiTarget.java create mode 100755 antlr-3.1.3/tool/src/main/java/org/antlr/codegen/JavaScriptTarget.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/codegen/JavaTarget.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/codegen/ObjCTarget.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/codegen/Perl5Target.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/codegen/PythonTarget.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/codegen/RubyTarget.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/codegen/Target.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/misc/Barrier.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/misc/BitSet.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/misc/Graph.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/misc/IntArrayList.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/misc/IntSet.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/misc/Interval.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/misc/IntervalSet.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/misc/MultiMap.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/misc/MutableInteger.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/misc/OrderedHashSet.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/misc/Utils.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/ANTLRErrorListener.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/AssignTokenTypesBehavior.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/Attribute.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/AttributeScope.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/BuildDependencyGenerator.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/CompositeGrammar.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/CompositeGrammarTree.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/DOTGenerator.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/ErrorManager.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/FASerializer.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/Grammar.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/GrammarAST.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/GrammarAnalysisAbortedMessage.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/GrammarDanglingStateMessage.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/GrammarInsufficientPredicatesMessage.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/GrammarNonDeterminismMessage.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/GrammarReport.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/GrammarSanity.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/GrammarSemanticsMessage.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/GrammarSerializerFoo.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/GrammarSpelunker.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/GrammarSyntaxMessage.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/GrammarUnreachableAltsMessage.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/Interp.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/Interpreter.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/LeftRecursionCyclesMessage.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/Message.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/NFAFactory.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/NameSpaceChecker.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/NonRegularDecisionMessage.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/RandomPhrase.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/RecursionOverflowMessage.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/Rule.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/RuleLabelScope.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/Strip.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/ToolMessage.java create mode 100644 antlr-3.1.3/tool/src/main/java/org/antlr/tool/serialize.g create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/antlr.properties create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/ANTLRCore.sti create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/ActionScript/AST.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/ActionScript/ASTParser.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/ActionScript/ASTTreeParser.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/ActionScript/ActionScript.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/C/AST.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/C/ASTDbg.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/C/ASTParser.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/C/ASTTreeParser.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/C/C.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/C/Dbg.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CPP/CPP.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp/AST.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp/ASTDbg.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp/ASTParser.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp/ASTTreeParser.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp/CSharp.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp/Dbg.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp/ST.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp2/AST.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp2/ASTDbg.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp2/ASTParser.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp2/ASTTreeParser.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp2/CSharp2.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp2/Dbg.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp2/ST.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp3/AST.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp3/ASTDbg.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp3/ASTParser.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp3/ASTTreeParser.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp3/CSharp3.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp3/Dbg.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/CSharp3/ST.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Delphi/AST.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Delphi/ASTParser.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Delphi/ASTTreeParser.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Delphi/Delphi.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Java/AST.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Java/ASTDbg.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Java/ASTParser.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Java/ASTTreeParser.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Java/Dbg.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Java/Java.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Java/ST.stg create mode 100755 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/JavaScript/AST.stg create mode 100755 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/JavaScript/ASTParser.stg create mode 100755 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/JavaScript/ASTTreeParser.stg create mode 100755 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/JavaScript/JavaScript.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/ObjC/AST.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/ObjC/ASTDbg.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/ObjC/ASTParser.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/ObjC/ASTTreeParser.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/ObjC/Dbg.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/ObjC/ObjC.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Perl5/ASTTreeParser.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Perl5/Perl5.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Python/AST.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Python/ASTDbg.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Python/ASTParser.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Python/ASTTreeParser.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Python/Dbg.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Python/Python.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Python/ST.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/codegen/templates/Ruby/Ruby.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/tool/templates/depend.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/tool/templates/dot/action-edge.st create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/tool/templates/dot/decision-rank.st create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/tool/templates/dot/dfa.st create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/tool/templates/dot/edge.st create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/tool/templates/dot/epsilon-edge.st create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/tool/templates/dot/nfa.st create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/tool/templates/dot/state.st create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/tool/templates/dot/stopstate.st create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/tool/templates/messages/formats/antlr.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/tool/templates/messages/formats/gnu.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/tool/templates/messages/formats/vs2005.stg create mode 100644 antlr-3.1.3/tool/src/main/resources/org/antlr/tool/templates/messages/languages/en.stg create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/BaseTest.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/DebugTestAutoAST.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/DebugTestCompositeGrammars.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/DebugTestRewriteAST.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/ErrorQueue.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestASTConstruction.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestAttributes.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestAutoAST.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestBufferedTreeNodeStream.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestCharDFAConversion.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestCompositeGrammars.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestDFAConversion.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestDFAMatching.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestFastQueue.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestHeteroAST.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestInterpretedLexing.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestInterpretedParsing.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestIntervalSet.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestJavaCodeGeneration.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestLexer.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestMessages.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestNFAConstruction.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestRewriteAST.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestRewriteTemplates.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestSemanticPredicateEvaluation.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestSemanticPredicates.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestSets.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestSymbolDefinitions.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestSyntacticPredicateEvaluation.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestTemplates.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestTokenRewriteStream.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestTopologicalSort.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestTreeGrammarRewriteAST.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestTreeIterator.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestTreeNodeStream.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestTreeParsing.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestTreeWizard.java create mode 100644 antlr-3.1.3/tool/src/test/java/org/antlr/test/TestTrees.java diff --git a/antlr-3.1.3/BUILD.txt b/antlr-3.1.3/BUILD.txt new file mode 100644 index 0000000..8694f21 --- /dev/null +++ b/antlr-3.1.3/BUILD.txt @@ -0,0 +1,422 @@ + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + Maven Plugin - Copyright (c) 2009 Jim Idle + + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +============================================================================ + +This file contains the build instructions for the ANTLR toolset as +of version 3.1.3 and beyond. + +The ANTLR toolset must be built using the Maven build system as +this build system updates the version numbers and controls the +whole build process. However, if you just want the latest build +and do not care to learn anything about Maven, then visit: + + http://antlr.org/hudson + +And download the current complete jar from the Tool_Daily +Hudson project (just follow the links for last successful build). +At the time of writing, the link for the last successful +snapshot build is: + + http://antlr.org/hudson/job/ANTLR_Tool_Daily/lastSuccessfulBuild/org.antlr$antlr/ + +If you are looking for the latest released version of ANTLR, then +visit the downloads page on the main antlr.org website. + +These instructions are mainly for the ANTLR development team, +though you are free to build ANTLR yourself of course. + +Source code Structure +----------------------- + +The main development branch of ANTLR is stored within the Perforce SCM at: + + //depot/code/antlr/main/... + +release branches are stored in Perforce like so: + + //depot/code/antlr/release-3.1.3/... + +In this top level directory, you will find a master build file for Maven called pom.xml and +you will also note that there are a number of subdirectories: + + tool - The ANTLR tool itself + runtime/Java - The ANTLR Java runtime + runtime/X - The runtime for language target X + gunit - The grammar test tool + antlr3-maven-plugin - The plugin tool for Maven that allows Maven projects to process + ANTLR grammars. + +Each of these sub-directories also contains a file pom.xml that controls the build of each +sub-component (or module in Maven parlance). + +Build Parameters +----------------- + +Alongside each pom.xml (other than for the antlr3-maven-plugin), you will see that there +is a file called antlr.config. This file is called a filter and should contain a set of key/value +pairs in the same manner as Java properties files: + +antlr.something="Some config thang!" + +When the build of any component happens, any values in the antlr.config for the master +build file and any values in the antlr.config file for each component are made available +to the build. This is mainly used by the resource processor, which will filter any file it +finds under: src/main/resources/** and replace any references such as ${antlr.something} +with the actual value at the time of the build. + +Building +-------- + +Building ANTLR is trivial, assuming that you have loaded Maven version 2.0.9 or +better on to your build system and installed it as explained here: + +http://maven.apache.org/download.html + +If you are unfamiliar with Maven (and even if you are), the best resource for learning +about it is The Definitive Guide: + +http://www.sonatype.com/books/maven-book/reference/public-book.html + +The instructions here assume that Maven is installed and working correctly. + +If this is the first time you have built the ANTLR toolset, you will possibly +need to install the master pom in your local repository (however the build +may be able to locate this in the ANTLR snapshot or release repository). If you try +to build sub-modules on their own (as in run the mvn command in the sub directory +for that tool, such as runtime/Java), and you receive a message that +maven cannot find the master pom, then execute this in the main (or release) +directory: + +mvn -N install + +This command will install the master build pom in your local maven repository +(it's ~/.m2 on UNIX) and individual builds of sub-modules will now work correctly. + +To build then, simply cd into the master build directory (e.g. $P4ROOT//code/antlr/main) +and type: + +mvn -Dmaven.test.skip=true + +Assuming that everything is correctly installed and synchronized, then ANTLR will build +and skip any unit tests in the modules (the ANTLR tool tests can take a long time). + +This command will build each of the tools in the correct order and will create the jar +artifacts of all the components in your local development Maven repository (which +takes precedence over remote repositories by default). At the end of the build you +should see: + +[INFO] ------------------------------------------------------------------------ +[INFO] Reactor Summary: +[INFO] ------------------------------------------------------------------------ +[INFO] ANTLR Master build control POM ........................ SUCCESS [1.373s] +[INFO] Antlr 3 Runtime ....................................... SUCCESS [0.879s] +[INFO] ANTLR Grammar Tool .................................... SUCCESS [5.431s] +[INFO] Maven plugin for ANTLR V3 ............................. SUCCESS [1.277s] +[INFO] ANTLR gUnit ........................................... SUCCESS [1.566s] +[INFO] ------------------------------------------------------------------------ +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD SUCCESSFUL +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 11 seconds + +However, unless you are using Maven exclusively in your projects, you will most +likely want to build the ANTLR Uber Jar, which is an executable jar containing +all the components that ANTLR needs to build and run parsers (note that at +runtime, you need only the runtime components you use, such as the Java +runtime and say stringtemplate). + +Because the Uber jar is not something we want to deploy to Maven repositories +it is built with a special invocation of Maven: + +mvn -Dmaven.test.skip=true package assembly:assembly + +Note that Maven will appear to build everything twice, which is a quirk of how +it calculates the dependencies and makes sure it has everything packaged up +so it can build the uber-jar assembly. + +Somewhere in the build output (towards the end), you will find a line like this: + +[INFO] Building jar: /home/jimi/antlrsrc/code/antlr/main/target/antlr-master-3.1.3-SNAPSHOT-completejar.jar + +This is the executable jar that you need and you can either copy it somewhere or, +like me, you can create this script (assuming UNIX) somewhere in your PATH: + +#! /bin/bash +java -jar ~/antlrsrc/code/antlr/main/target/antlr-master-3.1.3-SNAPSHOT-completejar.jar $* + +Version Numbering +------------------- + +The first and Golden rule is that any pom files stored under the main branch of the toolset +should never be modified to contain a release version number. They should always contain +a.b.c-SNAPSHOT (e.g. 3.1.3-SNAPSHOT). Only release branches should have their +pom version numbers set to a release version. You can release as many SNAPSHOTS +as you like, but only one release version. However, release versions may be updated +with a patch level: 3.1.3-1, 3.1.3-2 and so on. + +Fortunately, Maven helps us with the version numbering in a number of ways. Firstly, +the pom.xml files for the various modules do not specify a version of the +artifacts themselves. They pick up their version number from the master build pom. +However, there is a catch, because they need to know what version of the parent pom +they inherit from and so they DO mention the version number. However, this does +prevent accidentally releasing different versions of sub-modules than the master pom +describes. + +Fortunately once again, Maven has a neat way of helping us with change the version. +All you need do is check out all the pom.xml files from perforce, then modify the +a.b.c-SNAPSHOT in the master pom. When the version number +is correct in the master pom, you make sure your working directory is the location +of the master pom and type: + +mvn versions:update-child-modules + +This command will then update the child pom.xml files to reflect the version number +defined in the master pom.xml. + +There is unfortunately one last catch here though and that is that the antlr3-maven-plugin +is not able to use the parent pom. The reason for this is subtle but makes sense as +doing so would create a circular dependency between the ANTLR tool (which uses the +plugin to build its own grammar files), and the plugin (which uses the tool to build +grammar files). + +This catch-22 situation means that the pom.xml file in the antlr3-maven-plugin directory +MUST be updated manually (or we must write a script to do this). + +Deploying +---------- +Deploying the tools at the current version is relatively easy, but to deploy to the +ANTLR repositories (snapshot or release) you must have been granted access +to the antlr.org server and supplied an ssh key. Few people will have this access of +course. + +Assuming that you have ssh access to antlr.org, then you will need to do the following +before deployment will authorize and work correctly (UNIX assumed here): + +$ eval `ssh-agent` +Agent PID nnnnn +$ ssh-add +Enter passphrase for /home/you/.ssh/id_rsa: +Identity added.... + +Next, because we do not publish access information for antlr.org, you will need +to configure the repository server names locally. You do this by creating (or +adding to) the file: + +~/.m2/settings.xml + +Which should look like this: + + + + + + + antlr-snapshot + mavensync + passphrase for your private key + /home/youruserlogin/.ssh/id_rsa + + + antlr-repo + mavensync + passphrase for your private key + /home/youruserlogin/.ssh/id_rsa + + + + +When this configuration is in place, you will be able to deploy the components, +either individually or from the master directory: + +mvn -Dmaven.test.skip=true deploy + +You will then see lots of information about checking existing version information +and so on, and the components will be deployed. + +Note that so long as the artifacts are versioned with a.b.c-SNAPSHOT then +deployment will always be to the development snapshot directory. When the +artifacts are versioned with a release version then deployment will be to the +antlr.org release repository, which will then be mirrored around the world. It +is important not to deploy a release until you have built and tested it to your +satisfaction. + +Release Checklist +------------------ + +Here is the procedure to use to make a release of ANTLR. Note that we should +really use the mvn release:release command, but the perforce plugin for Maven is +not commercial quality and I want to rewrite it. + +For this checklist, let's assume that the current development version of ANTLR +is 3.1.3-SNAPSHOT. This means that it will probably (but not necessarily) +become release version 3.1.3 and that the development version will bump +to 3.1.4-SNAPSHOT. + +0) Run a build of the main branch and check that it is builds and passes as many + tests as you want it to. + +1) First make a branch from main into the target release directory. Then submit + this to perforce. You could change versions numbers before submitting, but + doing that in separate stages will keep things sane; + +--- Use main development branch from here --- + +2) Before we deploy the release, we want to update the versions of the development + branch, so we don't deploy what is now the new release as an older snapshot (this + is not super important, but procedure is good right?). + + Check out all the pom.xml files (and if you are using any antlr.config parameters + that must change, then do that too). + +3) Edit the master pom.xml in the main directory and change the version from + 3.1.3-SNAPSHOT to 3.1.4-SNAPSHOT. + +4) Edit the pom.xml file for antlr3-maven-plugin under the main directory and + change the version from 3.1.3-SNAPSHOT to 3.1.4-SNAPSHOT. + +5) Now (from the main directory), run the command: + + mvn versions:update-child-modules + + You should see: + + [INFO] [versions:update-child-modules] + [INFO] Module: gunit + [INFO] Parent is org.antlr:antlr-master:3.1.4-SNAPSHOT + [INFO] Module: runtime/Java + [INFO] Parent is org.antlr:antlr-master:3.1.4-SNAPSHOT + [INFO] Module: tool + [INFO] Parent is org.antlr:antlr-master:3.1.4-SNAPSHOT + +6) Run a build of the main branch: + + mvn -Dmaven.test.skip=true + + All should be good. + +7) Submit the pom changes of the main branch to perforce. + +8) Deploy the new snapshot as a placeholder for the next release. It + will go to the snapshot repository of course: + + mvn -N deploy + mvn -Dmaven.test.skip=true deploy + +9) You are now finished with the main development branch and change + working directories to the release branch you made earlier. + +--- Use release branch from here --- + +10) Check out all the pom.xml files in the release branch (and if you are + using any antlr.config parameters that must change, then do that too). + +11) Edit the master pom.xml in the release-3.1.3 directory and change the version from + 3.1.3-SNAPSHOT to 3.1.3. + +12) Edit the pom.xml file for antlr3-maven-plugin under the release-3.1.3 directory and + change the version from 3.1.3-SNAPSHOT to 3.1.3. + +13) Now (from the release-3.1.3 directory), run the command: + + mvn versions:update-child-modules + + You should see: + + [INFO] [versions:update-child-modules] + [INFO] Module: gunit + [INFO] Parent was org.antlr:antlr-master:3.1.3-SNAPSHOT, + now org.antlr:antlr-master:3.1.3 + [INFO] Module: runtime/Java + [INFO] Parent was org.antlr:antlr-master:3.1.3-SNAPSHOT, + now org.antlr:antlr-master:3.1.3 + [INFO] Module: tool + [INFO] Parent was org.antlr:antlr-master:3.1.3-SNAPSHOT, + now org.antlr:antlr-master:3.1.3 + +14) Run a build of the release-3.1.3 branch: + + mvn # Note I am letting unit tests run here! + + All should be good, or as good as it gets ;-) + +15) Submit the pom changes of the release-3.1.3 branch to perforce. + +16) Deploy the new release (this is it guys, make sure you are happy): + + mvn -N deploy + mvn -Dmaven.test.skip=true deploy + + Note that we must skip the tests as Maven will not let you deploy releases + that fail any junit tests. + +17) Reward anyone around you with good beer. + + +Miscellany +----------- + +It was a little tricky to get all the interdependencies correct because ANTLR builds +itself using itself and the maven plugin references the ANTLR Tool as well. Hence +the maven tool is not a child project of the master pom.xml file, even though it is +built by it. + +An observant person will not that when the assembly:assembly phase is run, that +it invokes the build of the ANTLR tool using the version of the Maven plugin that +it has just built, and this results in the plugin using the version of ANTLR tool that +it has just built. This is safe because everything will already be up to date and so +we package up the version of the tool that we expect, but the Maven plugin we +deploy will use the correct version of ANTLR, even though there is technically +a circular dependency. + +The master pom.xml does give us a way to cause the build of the ANTLR tool +to use itself to build itself. This is because in dependencyManagement in the +master pom.xml, we can reference the current version of the Tool and the +Maven plugin, even though in the pom.xml for the tool itself refers to the previous +version of the plugin. + +What happens is that if we first cd into the tool and maven directories and build ANTLR, it will +build itself with the prior version and this will deploy locally (.m2). We can then +clean build from the master pom and when ANTLR asks for the prior version of the tool, +the master pom.xml will override it and build with the interim versions we just built manually. + +However, strictly speaking, we need a third build where we rebuild the tool again with +the version of the tool that was built with itself and not deploy the version that was +built buy the version of itself that was built by a prior version of itself. I decided that this +was not particularly useful and complicates things too much. Building with a prior +version of the tool is fine and if there was ever a need to, we could release twice +in quick succession. + + +Jim Idle - March 2009 + diff --git a/antlr-3.1.3/antlr.config b/antlr-3.1.3/antlr.config new file mode 100644 index 0000000..00ac54e --- /dev/null +++ b/antlr-3.1.3/antlr.config @@ -0,0 +1 @@ +fred=99 diff --git a/antlr-3.1.3/gunit/CHANGES.txt b/antlr-3.1.3/gunit/CHANGES.txt new file mode 100644 index 0000000..af7758e --- /dev/null +++ b/antlr-3.1.3/gunit/CHANGES.txt @@ -0,0 +1,81 @@ +gUnit 1.0.5 +Nov 25, 2008 + +Leon, Jen-Yuan Su +leonsu at mac com + +CHANGES + +Feb 17, 2009 + +* added new interfaces for GUI editor + +* recognizes invalid input as a FAIL case instead of throwing an exception + +Steve Ebersole provided a patch for the following two fixes. +* allows setting an output directory (for JUnitCodeGen) + +* allows providing a classloader (for both JUnitCodeGen and gUnitExecutor) + +Nov 25, 2008 + +* fixed external test file path issue. if an input test file is not found under the current dir, then try to look for it under the package dir also. + +* fixed multiple-line input indentation issue. + +* fixed bug: FileNotFoundException terminated gUnit tests due to any non-existent input test file. + +* display escaped text for newline characters in the test result for comparing expected and actual string. + +Nov 20, 2008 + +* added new functionality of testing lexical rules + +* fixed bug of using PipedInput/Output Stream and changed to ByteArrayOutputStream. Jared Bunting provided a patch on this issue. + +* improved jUnit translation mode and moved supporting codes into gUnitBaseTest. + +Oct 31, 2008 + +* fixed bug of testing a tree grammar's template output + +July 9, 2008 + +* fixed bug: program exited upon InvocationTargetException + Sumanto Biswas pointed out the issue and provided suggestions. + +* Better handle on test rule's StringTemplate output + +May 10, 2008 + +* added exit code functionality + +* fixed string escaping bug for junit generator + +1.0.2 - Apr 01, 2008 + +* fixed grammar bug: multiple-line input, AST output + +* adjusted the output of test result + +Mar 20, 2008 + +* moved test result to string template (gUnitTestResult.stg) + +* added the display of line of test in the test result + +Feb 19, 2008 + +* fixed bug of displaying test sequence and error message from ANTLR + +Feb 8, 2008 + +* made compatible with ANTLR 3.1b1 + +1.0.1 - Jan 11, 2008 + +* Kenny MacDermid helps with code refactoring + +1.0 - Aug 20, 2007 + +Initial early access release diff --git a/antlr-3.1.3/gunit/LICENSE.txt b/antlr-3.1.3/gunit/LICENSE.txt new file mode 100644 index 0000000..b6ea2eb --- /dev/null +++ b/antlr-3.1.3/gunit/LICENSE.txt @@ -0,0 +1,26 @@ +[The "BSD licence"] +Copyright (c) 2007-2008 Leon, Jen-Yuan Su +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/antlr-3.1.3/gunit/README.txt b/antlr-3.1.3/gunit/README.txt new file mode 100644 index 0000000..f8d83c9 --- /dev/null +++ b/antlr-3.1.3/gunit/README.txt @@ -0,0 +1,56 @@ +gUnit 1.0.5 +Feb 21, 2009 + +Leon, Jen-Yuan Su +leonsu at mac com + +INTRODUCTION + +Welcome to gUnit! I've been working on gUnit from 2007 summer and +this is a project in USF CS, sponsored by professor Terence. + +You should use the latest ANTLR v3.1 with gUnit: + +http://www.antlr.org/download.html + +See the wiki document: + +http://www.antlr.org/wiki/display/ANTLR3/gUnit+-+Grammar+Unit+Testing + +Per the license in LICENSE.txt, this software is not guaranteed to +work and might even destroy all life on this planet: + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +---------------------------------------------------------------------- + +EXAMPLES + +See the wiki tutorial of gUnit: + + http://www.antlr.org/wiki/display/ANTLR3/gUnit+-+Grammar+Unit+Testing + +---------------------------------------------------------------------- + +What is gUnit? + +gUnit is an unit testing framework for ANTLR grammars. It provides a +simple way to write and run automated tests for grammars in a manner +similar to what jUnit does for unit testing. + +---------------------------------------------------------------------- + +How do I install gUnit? + +Just add gunit-1.0.5.jar to your CLASSPATH, and also make sure that +both ANTLR and StringTemplate jars lie in CLASSPATH. diff --git a/antlr-3.1.3/gunit/antlr.config b/antlr-3.1.3/gunit/antlr.config new file mode 100644 index 0000000..e69de29 diff --git a/antlr-3.1.3/gunit/pom.xml b/antlr-3.1.3/gunit/pom.xml new file mode 100644 index 0000000..ce4cc64 --- /dev/null +++ b/antlr-3.1.3/gunit/pom.xml @@ -0,0 +1,168 @@ + + + 4.0.0 + org.antlr + gunit + jar + + ANTLR gUnit + + + org.antlr + antlr-master + 3.1.3 + + + http://www.antlr.org/wiki/display/ANTLR3/gUnit+-+Grammar+Unit+Testing + + + + + + antlr-repo + ANTLR Testing repository + scpexe://antlr.org/home/mavensync/antlr-repo + + + + antlr-snapshot + ANTLR Testing Snapshot Repository + scpexe://antlr.org/home/mavensync/antlr-snapshot + + + + + + + + + + antlr-snapshot + ANTLR Testing Snapshot Repository + http://antlr.org/antlr-snapshot + + always + + + + + + + + + + junit + junit + 4.5 + compile + + + + org.antlr + antlr + ${project.version} + compile + + + + + org.antlr + stringtemplate + 3.2 + compile + + + + + + + + + install + + + + + org.antlr + antlr3-maven-plugin + ${project.version} + + + + + antlr + + + + + + + maven-compiler-plugin + + 1.5 + 1.5 + src + + + + + maven-surefire-plugin + + + + org.codehaus.mojo + findbugs-maven-plugin + + true + true + true + + + + + + + + org.apache.maven.wagon + wagon-ssh-external + 1.0-beta-2 + + + + + + + diff --git a/antlr-3.1.3/gunit/src/main/antlr3/org/antlr/gunit/gUnit.g b/antlr-3.1.3/gunit/src/main/antlr3/org/antlr/gunit/gUnit.g new file mode 100644 index 0000000..156df40 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/antlr3/org/antlr/gunit/gUnit.g @@ -0,0 +1,330 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Leon Jen-Yuan Su +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +grammar gUnit; +options {language=Java;} +tokens { + OK = 'OK'; + FAIL = 'FAIL'; + DOC_COMMENT; +} +@header {package org.antlr.gunit;} +@lexer::header { +package org.antlr.gunit; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.StringReader; +} +@members { +public GrammarInfo grammarInfo; +public gUnitParser(TokenStream input, GrammarInfo grammarInfo) { + super(input); + this.grammarInfo = grammarInfo; +} +} + +gUnitDef: 'gunit' g1=id ('walks' g2=id)? ';' + { + if ( $g2.text!=null ) { + grammarInfo.setGrammarName($g2.text); + grammarInfo.setTreeGrammarName($g1.text); + } + else { + grammarInfo.setGrammarName($g1.text); + } + } + header? testsuite* + ; + +header : '@header' ACTION + { + int pos1, pos2; + if ( (pos1=$ACTION.text.indexOf("package"))!=-1 && (pos2=$ACTION.text.indexOf(';'))!=-1 ) { + grammarInfo.setHeader($ACTION.text.substring(pos1+8, pos2).trim()); // substring the package path + } + else { + System.err.println("error(line "+$ACTION.getLine()+"): invalid header"); + } + } + ; + +testsuite // gUnit test suite based on individual rule +scope { +boolean isLexicalRule; +} +@init { +gUnitTestSuite ts = null; +$testsuite::isLexicalRule = false; +} + : ( r1=RULE_REF ('walks' r2=RULE_REF)? + { + if ( $r2==null ) ts = new gUnitTestSuite($r1.text); + else ts = new gUnitTestSuite($r1.text, $r2.text); + } + | t=TOKEN_REF + { + ts = new gUnitTestSuite(); + ts.setLexicalRuleName($t.text); + $testsuite::isLexicalRule = true; + } + ) + ':' + testcase[ts]+ {grammarInfo.addRuleTestSuite(ts);} + ; + +// TODO : currently gUnit just ignores illegal test for lexer rule, but should also emit a reminding message +testcase[gUnitTestSuite ts] // individual test within a (rule)testsuite + : input expect {$ts.addTestCase($input.in, $expect.out);} + ; + +input returns [gUnitTestInput in] +@init { +String testInput = null; +boolean inputIsFile = false; +int line = -1; +} +@after { +in = new gUnitTestInput(testInput, inputIsFile, line); +} + : STRING + { + testInput = $STRING.text.replace("\\n", "\n").replace("\\r", "\r").replace("\\t", "\t") + .replace("\\b", "\b").replace("\\f", "\f").replace("\\\"", "\"").replace("\\'", "\'").replace("\\\\", "\\"); + line = $STRING.line; + } + | ML_STRING + { + testInput = $ML_STRING.text; + line = $ML_STRING.line; + } + | file + { + testInput = $file.text; + inputIsFile = true; + line = $file.line; + } + ; + +expect returns [AbstractTest out] + : OK {$out = new BooleanTest(true);} + | FAIL {$out = new BooleanTest(false);} + | 'returns' RETVAL {if ( !$testsuite::isLexicalRule ) $out = new ReturnTest($RETVAL);} + | '->' output {if ( !$testsuite::isLexicalRule ) $out = new OutputTest($output.token);} + ; + +output returns [Token token] + : STRING + { + $STRING.setText($STRING.text.replace("\\n", "\n").replace("\\r", "\r").replace("\\t", "\t") + .replace("\\b", "\b").replace("\\f", "\f").replace("\\\"", "\"").replace("\\'", "\'").replace("\\\\", "\\")); + $token = $STRING; + } + | ML_STRING {$token = $ML_STRING;} + | AST {$token = $AST;} + | ACTION {$token = $ACTION;} + ; + +file returns [int line] + : id EXT? {$line = $id.line;} + ; + +id returns [int line] + : TOKEN_REF {$line = $TOKEN_REF.line;} + | RULE_REF {$line = $RULE_REF.line;} + ; + +// L E X I C A L R U L E S + +SL_COMMENT + : '//' ~('\r'|'\n')* '\r'? '\n' {$channel=HIDDEN;} + ; + +ML_COMMENT + : '/*' {$channel=HIDDEN;} .* '*/' + ; + +STRING : '"' ( ESC | ~('\\'|'"') )* '"' {setText(getText().substring(1, getText().length()-1));} + ; + +ML_STRING + : {// we need to determine the number of spaces or tabs (indentation) for multi-line input + StringBuffer buf = new StringBuffer(); + int i = -1; + int c = input.LA(-1); + while ( c==' ' || c=='\t' ) { + buf.append((char)c); + c = input.LA(--i); + } + String indentation = buf.reverse().toString(); + } + '<<' .* '>>' + {// also determine the appropriate newline separator and get info of the first and last 2 characters (exclude '<<' and '>>') + String newline = System.getProperty("line.separator"); + String front, end; + int oldFrontIndex = 2; + int oldEndIndex = getText().length()-2; + int newFrontIndex, newEndIndex; + if ( newline.length()==1 ) { + front = getText().substring(2, 3); + end = getText().substring(getText().length()-3, getText().length()-2); + newFrontIndex = 3; + newEndIndex = getText().length()-3; + } + else {// must be 2, e.g. Windows System which uses \r\n as a line separator + front = getText().substring(2, 4); + end = getText().substring(getText().length()-4, getText().length()-2); + newFrontIndex = 4; + newEndIndex = getText().length()-4; + } + // strip unwanted characters, e.g. '<<' (including a newline after it) or '>>' (including a newline before it) + String temp = null; + if ( front.equals(newline) && end.equals(newline) ) { + // need to handle the special case: <<\n>> or <<\r\n>> + if ( newline.length()==1 && getText().length()==5 ) temp = ""; + else if ( newline.length()==2 && getText().length()==6 ) temp = ""; + else temp = getText().substring(newFrontIndex, newEndIndex); + } + else if ( front.equals(newline) ) { + temp = getText().substring(newFrontIndex, oldEndIndex); + } + else if ( end.equals(newline) ) { + temp = getText().substring(oldFrontIndex, newEndIndex); + } + else { + temp = getText().substring(oldFrontIndex, oldEndIndex); + } + // finally we need to prpcess the indentation line by line + BufferedReader bufReader = new BufferedReader(new StringReader(temp)); + buf = new StringBuffer(); + String line = null; + int count = 0; + try { + while((line = bufReader.readLine()) != null) { + if ( line.startsWith(indentation) ) line = line.substring(indentation.length()); + if ( count>0 ) buf.append(newline); + buf.append(line); + count++; + } + setText(buf.toString()); + } + catch (IOException ioe) { + setText(temp); + } + } + ; + +TOKEN_REF + : 'A'..'Z' ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* + ; + +RULE_REF + : 'a'..'z' ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* + ; + +EXT : '.'('a'..'z'|'A'..'Z'|'0'..'9')+; + +RETVAL : NESTED_RETVAL {setText(getText().substring(1, getText().length()-1));} + ; + +fragment +NESTED_RETVAL : + '[' + ( options {greedy=false;} + : NESTED_RETVAL + | . + )* + ']' + ; + +AST : NESTED_AST (' '? NESTED_AST)*; + +fragment +NESTED_AST : + '(' + ( options {greedy=false;} + : NESTED_AST + | . + )* + ')' + ; + +ACTION + : NESTED_ACTION {setText(getText().substring(1, getText().length()-1));} + ; + +fragment +NESTED_ACTION : + '{' + ( options {greedy=false; k=3;} + : NESTED_ACTION + | STRING_LITERAL + | CHAR_LITERAL + | . + )* + '}' + ; + +fragment +CHAR_LITERAL + : '\'' ( ESC | ~('\''|'\\') ) '\'' + ; + +fragment +STRING_LITERAL + : '"' ( ESC | ~('\\'|'"') )* '"' + ; + +fragment +ESC : '\\' + ( 'n' + | 'r' + | 't' + | 'b' + | 'f' + | '"' + | '\'' + | '\\' + | '>' + | 'u' XDIGIT XDIGIT XDIGIT XDIGIT + | . // unknown, leave as it is + ) + ; + +fragment +XDIGIT : + '0' .. '9' + | 'a' .. 'f' + | 'A' .. 'F' + ; + +WS : ( ' ' + | '\t' + | '\r'? '\n' + )+ + {$channel=HIDDEN;} + ; diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/AbstractTest.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/AbstractTest.java new file mode 100644 index 0000000..158bf04 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/AbstractTest.java @@ -0,0 +1,83 @@ +/* + [The "BSD license"] + Copyright (c) 2007 Kenny MacDermid + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.gunit; + +public abstract class AbstractTest implements ITestCase { + // store essential individual test result for string template + protected String header; + protected String actual; + + protected boolean hasErrorMsg; + + private String testedRuleName; + private int testCaseIndex; + + // TODO: remove these. They're only used as part of a refactor to keep the + // code cleaner. It is a mock-instanceOf() replacement. + public abstract int getType(); + public abstract String getText(); + + public abstract String getExpected(); + // return an escaped string of the expected result + public String getExpectedResult() { + String expected = getExpected(); + if ( expected!=null ) expected = JUnitCodeGen.escapeForJava(expected); + return expected; + } + public abstract String getResult(gUnitTestResult testResult); + public String getHeader() { return this.header; } + public String getActual() { return this.actual; } + // return an escaped string of the actual result + public String getActualResult() { + String actual = getActual(); + // there is no need to escape the error message from ANTLR + if ( actual!=null && !hasErrorMsg ) actual = JUnitCodeGen.escapeForJava(actual); + return actual; + } + + public String getTestedRuleName() { return this.testedRuleName; } + public int getTestCaseIndex() { return this.testCaseIndex; } + + public void setHeader(String rule, String lexicalRule, String treeRule, int numOfTest, int line) { + StringBuffer buf = new StringBuffer(); + buf.append("test" + numOfTest + " ("); + if ( treeRule!=null ) { + buf.append(treeRule+" walks "); + } + if ( lexicalRule!=null ) { + buf.append(lexicalRule + ", line"+line+")" + " - "); + } + else buf.append(rule + ", line"+line+")" + " - "); + this.header = buf.toString(); + } + public void setActual(String actual) { this.actual = actual; } + + public void setTestedRuleName(String testedRuleName) { this.testedRuleName = testedRuleName; } + public void setTestCaseIndex(int testCaseIndex) { this.testCaseIndex = testCaseIndex; } + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/BooleanTest.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/BooleanTest.java new file mode 100644 index 0000000..4426e77 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/BooleanTest.java @@ -0,0 +1,63 @@ +/* + [The "BSD license"] + Copyright (c) 2007 Kenny MacDermid + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.gunit; + +public class BooleanTest extends AbstractTest { + private boolean ok; + + public BooleanTest(boolean ok) { + this.ok = ok; + } + + @Override + public String getText() { + return (ok)? "OK" : "FAIL"; + } + + @Override + public int getType() { + return (ok)? gUnitParser.OK : gUnitParser.FAIL; + } + + @Override + public String getResult(gUnitTestResult testResult) { + if ( testResult.isLexerTest() ) { + if ( testResult.isSuccess() ) return "OK"; + else { + hasErrorMsg = true; // return error message for boolean test of lexer + return testResult.getError(); + } + } + return (testResult.isSuccess())? "OK" : "FAIL"; + } + + @Override + public String getExpected() { + return (ok)? "OK" : "FAIL"; + } +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/GrammarInfo.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/GrammarInfo.java new file mode 100644 index 0000000..7d22ef2 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/GrammarInfo.java @@ -0,0 +1,87 @@ +/* + [The "BSD licence"] + Copyright (c) 2007-2008 Leon, Jen-Yuan Su + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.gunit; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class GrammarInfo { + + private String grammarName; // targeted grammar for unit test + private String treeGrammarName = null; // optional, required for testing tree grammar + private String header = null; // optional, required if using java package + private List ruleTestSuites = new ArrayList(); // testsuites for each testing rule + private StringBuffer unitTestResult = new StringBuffer(); + + public String getGrammarName() { + return grammarName; + } + + public void setGrammarName(String grammarName) { + this.grammarName = grammarName; + } + + public String getTreeGrammarName() { + return treeGrammarName; + } + + public void setTreeGrammarName(String treeGrammarName) { + this.treeGrammarName = treeGrammarName; + } + + public String getHeader() { + return header; + } + + public void setHeader(String header) { + this.header = header; + } + + public List getRuleTestSuites() { + // Make this list unmodifiable so that we can refactor knowing it's not changed. + return Collections.unmodifiableList(ruleTestSuites); + } + + public void addRuleTestSuite(gUnitTestSuite testSuite) { + this.ruleTestSuites.add(testSuite); + } + + public void appendUnitTestResult(String result) { + this.unitTestResult.append(result); + } + + // We don't want people messing with the string buffer here, so don't return it. + public String getUnitTestResult() { + return unitTestResult.toString(); + } + + public void setUnitTestResult(StringBuffer unitTestResult) { + this.unitTestResult = unitTestResult; + } +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/ITestCase.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/ITestCase.java new file mode 100644 index 0000000..437b789 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/ITestCase.java @@ -0,0 +1,63 @@ +/* + [The "BSD license"] + Copyright (c) 2009 Shaoting Cai + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.gunit; + +/** + * ITestCase object locates one test case in a gUnit script by specifying the + * tested rule and the index number of the test case in that group. + * + * For example: + * ---------------------- + * ... + * varDef: + * "int i;" OK + * "float 2f;" FAIL + * ... + * ---------------------- + * The "testedRuleName" for these two test cases will be "varDef". + * The "index" for the "int"-test will be 0. + * The "index" for the "float"-test will be 1. And so on. + * + * @see ITestSuite + */ +public interface ITestCase { + + /** + * Get the name of the rule that is tested by this test case. + * @return name of the tested rule. + */ + public String getTestedRuleName(); + + /** + * Get the index of the test case in the test group for a rule. Starting + * from 0. + * @return index number of the test case. + */ + public int getTestCaseIndex(); + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/ITestSuite.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/ITestSuite.java new file mode 100644 index 0000000..c01673f --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/ITestSuite.java @@ -0,0 +1,45 @@ +/* + [The "BSD license"] + Copyright (c) 2009 Shaoting Cai + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.gunit; + +/** + * A gUnit script file is an Antlr "test suite". The interface is defined to + * allow the Swing GUI test runner be notified when gUnit interpreter runner + * runs a passed/failed test case. + * + * CHANGES: + * 2009-03-01: SHAOTING + * - change method return void, parameter test object. + */ +public interface ITestSuite { + + public void onPass(ITestCase passTest); + + public void onFail(ITestCase failTest); + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/Interp.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/Interp.java new file mode 100644 index 0000000..07001b0 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/Interp.java @@ -0,0 +1,91 @@ +/* + [The "BSD licence"] + Copyright (c) 2007-2008 Leon Jen-Yuan Su + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.gunit; +import java.io.File; +import java.io.IOException; + +import org.antlr.runtime.*; + +/** The main gUnit interpreter entry point. + * Read a gUnit script, run unit tests or generate a junit file. + */ +public class Interp { + + public static void main(String[] args) throws IOException, ClassNotFoundException, RecognitionException { + /** Pull char from where? */ + CharStream input = null; + /** If the input source is a testsuite file, where is it? */ + String testsuiteDir = System.getProperty("user.dir"); + + /** Generate junit codes */ + if ( args.length>0 && args[0].equals("-o") ) { + if ( args.length==2 ) { + input = new ANTLRFileStream(args[1]); + File f = new File(args[1]); + testsuiteDir = getTestsuiteDir(f.getCanonicalPath(), f.getName()); + } + else + input = new ANTLRInputStream(System.in); + JUnitCodeGen generater = new JUnitCodeGen(parse(input), testsuiteDir); + generater.compile(); + return; + } + + + /** Run gunit tests */ + if ( args.length==1 ) { + input = new ANTLRFileStream(args[0]); + File f = new File(args[0]); + testsuiteDir = getTestsuiteDir(f.getCanonicalPath(), f.getName()); + } + else + input = new ANTLRInputStream(System.in); + + gUnitExecutor executer = new gUnitExecutor(parse(input), testsuiteDir); + + System.out.print(executer.execTest()); // unit test result + + //return an error code of the number of failures + System.exit(executer.failures.size() + executer.invalids.size()); + } + + public static GrammarInfo parse(CharStream input) throws RecognitionException { + gUnitLexer lexer = new gUnitLexer(input); + CommonTokenStream tokens = new CommonTokenStream(lexer); + + GrammarInfo grammarInfo = new GrammarInfo(); + gUnitParser parser = new gUnitParser(tokens, grammarInfo); + parser.gUnitDef(); // parse gunit script and save elements to grammarInfo + return grammarInfo; + } + + public static String getTestsuiteDir(String fullPath, String fileName) { + return fullPath.substring(0, fullPath.length()-fileName.length()); + } + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/InvalidInputException.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/InvalidInputException.java new file mode 100644 index 0000000..d6e9dfc --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/InvalidInputException.java @@ -0,0 +1,34 @@ +/* + [The "BSD license"] + Copyright (c) 2007 Kenny MacDermid + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.gunit; + +public class InvalidInputException extends Exception { + + private static final long serialVersionUID = 1L; + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/JUnitCodeGen.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/JUnitCodeGen.java new file mode 100644 index 0000000..140134d --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/JUnitCodeGen.java @@ -0,0 +1,325 @@ +/* + [The "BSD licence"] + Copyright (c) 2007-2008 Leon Jen-Yuan Su + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.gunit; + +import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.antlr.stringtemplate.StringTemplateGroupLoader; +import org.antlr.stringtemplate.CommonGroupLoader; +import org.antlr.stringtemplate.language.AngleBracketTemplateLexer; + +import java.io.*; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; +import java.util.logging.ConsoleHandler; +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class JUnitCodeGen { + public GrammarInfo grammarInfo; + public Map ruleWithReturn; + private final String testsuiteDir; + private String outputDirectoryPath = "."; + + private final static Handler console = new ConsoleHandler(); + private static final Logger logger = Logger.getLogger(JUnitCodeGen.class.getName()); + static { + logger.addHandler(console); + } + + public JUnitCodeGen(GrammarInfo grammarInfo, String testsuiteDir) throws ClassNotFoundException { + this( grammarInfo, determineClassLoader(), testsuiteDir); + } + + private static ClassLoader determineClassLoader() { + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + if ( classLoader == null ) { + classLoader = JUnitCodeGen.class.getClassLoader(); + } + return classLoader; + } + + public JUnitCodeGen(GrammarInfo grammarInfo, ClassLoader classLoader, String testsuiteDir) throws ClassNotFoundException { + this.grammarInfo = grammarInfo; + this.testsuiteDir = testsuiteDir; + /** Map the name of rules having return value to its return type */ + ruleWithReturn = new HashMap(); + Class parserClass = locateParserClass( grammarInfo, classLoader ); + Method[] methods = parserClass.getDeclaredMethods(); + for(Method method : methods) { + if ( !method.getReturnType().getName().equals("void") ) { + ruleWithReturn.put(method.getName(), method.getReturnType().getName().replace('$', '.')); + } + } + } + + private Class locateParserClass(GrammarInfo grammarInfo, ClassLoader classLoader) throws ClassNotFoundException { + String parserClassName = grammarInfo.getGrammarName() + "Parser"; + if ( grammarInfo.getHeader() != null ) { + parserClassName = grammarInfo.getHeader()+ "." + parserClassName; + } + return classLoader.loadClass( parserClassName ); + } + + public String getOutputDirectoryPath() { + return outputDirectoryPath; + } + + public void setOutputDirectoryPath(String outputDirectoryPath) { + this.outputDirectoryPath = outputDirectoryPath; + } + + public void compile() throws IOException{ + String junitFileName; + if ( grammarInfo.getTreeGrammarName()!=null ) { + junitFileName = "Test"+grammarInfo.getTreeGrammarName(); + } + else { + junitFileName = "Test"+grammarInfo.getGrammarName(); + } + String lexerName = grammarInfo.getGrammarName()+"Lexer"; + String parserName = grammarInfo.getGrammarName()+"Parser"; + + StringTemplateGroupLoader loader = new CommonGroupLoader("org/antlr/gunit", null); + StringTemplateGroup.registerGroupLoader(loader); + StringTemplateGroup.registerDefaultLexer(AngleBracketTemplateLexer.class); + StringBuffer buf = compileToBuffer(junitFileName, lexerName, parserName); + writeTestFile(".", junitFileName+".java", buf.toString()); + } + + public StringBuffer compileToBuffer(String className, String lexerName, String parserName) { + StringTemplateGroup group = StringTemplateGroup.loadGroup("junit"); + StringBuffer buf = new StringBuffer(); + buf.append(genClassHeader(group, className, lexerName, parserName)); + buf.append(genTestRuleMethods(group)); + buf.append("\n\n}"); + return buf; + } + + protected String genClassHeader(StringTemplateGroup group, String junitFileName, String lexerName, String parserName) { + StringTemplate classHeaderST = group.getInstanceOf("classHeader"); + if ( grammarInfo.getHeader()!=null ) { // Set up class package if there is + classHeaderST.setAttribute("header", "package "+grammarInfo.getHeader()+";"); + } + classHeaderST.setAttribute("junitFileName", junitFileName); + + String lexerPath = null; + String parserPath = null; + String treeParserPath = null; + String packagePath = null; + boolean isTreeGrammar = false; + boolean hasPackage = false; + /** Set up appropriate class path for parser/tree parser if using package */ + if ( grammarInfo.getHeader()!=null ) { + hasPackage = true; + packagePath = "./"+grammarInfo.getHeader().replace('.', '/'); + lexerPath = grammarInfo.getHeader()+"."+lexerName; + parserPath = grammarInfo.getHeader()+"."+parserName; + if ( grammarInfo.getTreeGrammarName()!=null ) { + treeParserPath = grammarInfo.getHeader()+"."+grammarInfo.getTreeGrammarName(); + isTreeGrammar = true; + } + } + else { + lexerPath = lexerName; + parserPath = parserName; + if ( grammarInfo.getTreeGrammarName()!=null ) { + treeParserPath = grammarInfo.getTreeGrammarName(); + isTreeGrammar = true; + } + } + classHeaderST.setAttribute("hasPackage", hasPackage); + classHeaderST.setAttribute("packagePath", packagePath); + classHeaderST.setAttribute("lexerPath", lexerPath); + classHeaderST.setAttribute("parserPath", parserPath); + classHeaderST.setAttribute("treeParserPath", treeParserPath); + classHeaderST.setAttribute("isTreeGrammar", isTreeGrammar); + return classHeaderST.toString(); + } + + protected String genTestRuleMethods(StringTemplateGroup group) { + StringBuffer buf = new StringBuffer(); + if ( grammarInfo.getTreeGrammarName()!=null ) { // Generate junit codes of for tree grammar rule + for ( gUnitTestSuite ts: grammarInfo.getRuleTestSuites() ) { + int i = 0; + for ( gUnitTestInput input: ts.testSuites.keySet() ) { // each rule may contain multiple tests + i++; + StringTemplate testRuleMethodST; + /** If rule has multiple return values or ast*/ + if ( ts.testSuites.get(input).getType()==gUnitParser.ACTION && ruleWithReturn.containsKey(ts.getTreeRuleName()) ) { + testRuleMethodST = group.getInstanceOf("testTreeRuleMethod2"); + String inputString = escapeForJava(input.testInput); + String outputString = ts.testSuites.get(input).getText(); + testRuleMethodST.setAttribute("methodName", "test"+changeFirstCapital(ts.getTreeRuleName())+"_walks_"+ + changeFirstCapital(ts.getRuleName())+i); + testRuleMethodST.setAttribute("testTreeRuleName", '"'+ts.getTreeRuleName()+'"'); + testRuleMethodST.setAttribute("testRuleName", '"'+ts.getRuleName()+'"'); + testRuleMethodST.setAttribute("testInput", '"'+inputString+'"'); + testRuleMethodST.setAttribute("returnType", ruleWithReturn.get(ts.getTreeRuleName())); + testRuleMethodST.setAttribute("isFile", input.inputIsFile); + testRuleMethodST.setAttribute("expecting", outputString); + } + else { + testRuleMethodST = group.getInstanceOf("testTreeRuleMethod"); + String inputString = escapeForJava(input.testInput); + String outputString = ts.testSuites.get(input).getText(); + testRuleMethodST.setAttribute("methodName", "test"+changeFirstCapital(ts.getTreeRuleName())+"_walks_"+ + changeFirstCapital(ts.getRuleName())+i); + testRuleMethodST.setAttribute("testTreeRuleName", '"'+ts.getTreeRuleName()+'"'); + testRuleMethodST.setAttribute("testRuleName", '"'+ts.getRuleName()+'"'); + testRuleMethodST.setAttribute("testInput", '"'+inputString+'"'); + testRuleMethodST.setAttribute("isFile", input.inputIsFile); + testRuleMethodST.setAttribute("tokenType", getTypeString(ts.testSuites.get(input).getType())); + + if ( ts.testSuites.get(input).getType()==gUnitParser.ACTION ) { // trim ';' at the end of ACTION if there is... + //testRuleMethodST.setAttribute("expecting", outputString.substring(0, outputString.length()-1)); + testRuleMethodST.setAttribute("expecting", outputString); + } + else if ( ts.testSuites.get(input).getType()==gUnitParser.RETVAL ) { // Expected: RETVAL + testRuleMethodST.setAttribute("expecting", outputString); + } + else { // Attach "" to expected STRING or AST + testRuleMethodST.setAttribute("expecting", '"'+escapeForJava(outputString)+'"'); + } + } + buf.append(testRuleMethodST.toString()); + } + } + } + else { // Generate junit codes of for grammar rule + for ( gUnitTestSuite ts: grammarInfo.getRuleTestSuites() ) { + int i = 0; + for ( gUnitTestInput input: ts.testSuites.keySet() ) { // each rule may contain multiple tests + i++; + StringTemplate testRuleMethodST; + /** If rule has multiple return values or ast*/ + if ( ts.testSuites.get(input).getType()==gUnitParser.ACTION && ruleWithReturn.containsKey(ts.getRuleName()) ) { + testRuleMethodST = group.getInstanceOf("testRuleMethod2"); + String inputString = escapeForJava(input.testInput); + String outputString = ts.testSuites.get(input).getText(); + testRuleMethodST.setAttribute("methodName", "test"+changeFirstCapital(ts.getRuleName())+i); + testRuleMethodST.setAttribute("testRuleName", '"'+ts.getRuleName()+'"'); + testRuleMethodST.setAttribute("testInput", '"'+inputString+'"'); + testRuleMethodST.setAttribute("returnType", ruleWithReturn.get(ts.getRuleName())); + testRuleMethodST.setAttribute("isFile", input.inputIsFile); + testRuleMethodST.setAttribute("expecting", outputString); + } + else { + String testRuleName; + // need to determine whether it's a test for parser rule or lexer rule + if ( ts.isLexicalRule() ) testRuleName = ts.getLexicalRuleName(); + else testRuleName = ts.getRuleName(); + testRuleMethodST = group.getInstanceOf("testRuleMethod"); + String inputString = escapeForJava(input.testInput); + String outputString = ts.testSuites.get(input).getText(); + testRuleMethodST.setAttribute("isLexicalRule", ts.isLexicalRule()); + testRuleMethodST.setAttribute("methodName", "test"+changeFirstCapital(testRuleName)+i); + testRuleMethodST.setAttribute("testRuleName", '"'+testRuleName+'"'); + testRuleMethodST.setAttribute("testInput", '"'+inputString+'"'); + testRuleMethodST.setAttribute("isFile", input.inputIsFile); + testRuleMethodST.setAttribute("tokenType", getTypeString(ts.testSuites.get(input).getType())); + + if ( ts.testSuites.get(input).getType()==gUnitParser.ACTION ) { // trim ';' at the end of ACTION if there is... + //testRuleMethodST.setAttribute("expecting", outputString.substring(0, outputString.length()-1)); + testRuleMethodST.setAttribute("expecting", outputString); + } + else if ( ts.testSuites.get(input).getType()==gUnitParser.RETVAL ) { // Expected: RETVAL + testRuleMethodST.setAttribute("expecting", outputString); + } + else { // Attach "" to expected STRING or AST + testRuleMethodST.setAttribute("expecting", '"'+escapeForJava(outputString)+'"'); + } + } + buf.append(testRuleMethodST.toString()); + } + } + } + return buf.toString(); + } + + // return a meaningful gUnit token type name instead of using the magic number + public String getTypeString(int type) { + String typeText; + switch (type) { + case gUnitParser.OK : + typeText = "org.antlr.gunit.gUnitParser.OK"; + break; + case gUnitParser.FAIL : + typeText = "org.antlr.gunit.gUnitParser.FAIL"; + break; + case gUnitParser.STRING : + typeText = "org.antlr.gunit.gUnitParser.STRING"; + break; + case gUnitParser.ML_STRING : + typeText = "org.antlr.gunit.gUnitParser.ML_STRING"; + break; + case gUnitParser.RETVAL : + typeText = "org.antlr.gunit.gUnitParser.RETVAL"; + break; + case gUnitParser.AST : + typeText = "org.antlr.gunit.gUnitParser.AST"; + break; + default : + typeText = "org.antlr.gunit.gUnitParser.EOF"; + break; + } + return typeText; + } + + protected void writeTestFile(String dir, String fileName, String content) { + try { + File f = new File(dir, fileName); + FileWriter w = new FileWriter(f); + BufferedWriter bw = new BufferedWriter(w); + bw.write(content); + bw.close(); + w.close(); + } + catch (IOException ioe) { + logger.log(Level.SEVERE, "can't write file", ioe); + } + } + + public static String escapeForJava(String inputString) { + // Gotta escape literal backslash before putting in specials that use escape. + inputString = inputString.replace("\\", "\\\\"); + // Then double quotes need escaping (singles are OK of course). + inputString = inputString.replace("\"", "\\\""); + // note: replace newline to String ".\n", replace tab to String ".\t" + inputString = inputString.replace("\n", "\\n").replace("\t", "\\t").replace("\r", "\\r").replace("\b", "\\b").replace("\f", "\\f"); + + return inputString; + } + + protected String changeFirstCapital(String ruleName) { + String firstChar = String.valueOf(ruleName.charAt(0)); + return firstChar.toUpperCase()+ruleName.substring(1); + } +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/OutputTest.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/OutputTest.java new file mode 100644 index 0000000..71359e5 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/OutputTest.java @@ -0,0 +1,67 @@ +/* + [The "BSD license"] + Copyright (c) 2007 Kenny MacDermid + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.gunit; + +import org.antlr.runtime.Token; + +/** OutputTest represents a test for not only standard output string, + * but also AST output which is actually a return value from a parser. + */ +public class OutputTest extends AbstractTest { + private final Token token; + + public OutputTest(Token token) { + this.token = token; + } + + @Override + public String getText() { + return token.getText(); + } + + @Override + public int getType() { + return token.getType(); + } + + @Override + // return ANTLR error msg if test failed + public String getResult(gUnitTestResult testResult) { + // Note: we treat the standard output string as a return value also + if ( testResult.isSuccess() ) return testResult.getReturned(); + else { + hasErrorMsg = true; + return testResult.getError(); + } + } + + @Override + public String getExpected() { + return token.getText(); + } +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/ReturnTest.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/ReturnTest.java new file mode 100644 index 0000000..8ec5a4e --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/ReturnTest.java @@ -0,0 +1,69 @@ +/* + [The "BSD license"] + Copyright (c) 2007 Kenny MacDermid + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.gunit; + +import org.antlr.runtime.Token; + +public class ReturnTest extends AbstractTest { + private final Token retval; + + public ReturnTest(Token retval) { + this.retval = retval; + } + + @Override + public String getText() { + return retval.getText(); + } + + @Override + public int getType() { + return retval.getType(); + } + + @Override + // return ANTLR error msg if test failed + public String getResult(gUnitTestResult testResult) { + if ( testResult.isSuccess() ) return testResult.getReturned(); + else { + hasErrorMsg = true; + return testResult.getError(); + } + } + + @Override + public String getExpected() { + String expect = retval.getText(); + + if ( expect.charAt(0)=='"' && expect.charAt(expect.length()-1)=='"' ) { + expect = expect.substring(1, expect.length()-1); + } + + return expect; + } +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitBaseTest.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitBaseTest.java new file mode 100644 index 0000000..a8b5492 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitBaseTest.java @@ -0,0 +1,456 @@ +/* + [The "BSD licence"] + Copyright (c) 2007-2008 Leon, Jen-Yuan Su + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.gunit; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.PrintStream; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import org.antlr.runtime.ANTLRFileStream; +import org.antlr.runtime.ANTLRStringStream; +import org.antlr.runtime.CharStream; +import org.antlr.runtime.CommonTokenStream; +import org.antlr.runtime.Lexer; +import org.antlr.runtime.TokenStream; +import org.antlr.runtime.tree.CommonTree; +import org.antlr.runtime.tree.CommonTreeNodeStream; +import org.antlr.runtime.tree.TreeNodeStream; +import org.antlr.stringtemplate.StringTemplate; + +import junit.framework.TestCase; + +/** All gUnit-generated JUnit class should extend this class + * which implements the essential methods for triggering + * ANTLR parser/tree walker + */ +public abstract class gUnitBaseTest extends TestCase { + + public String packagePath; + public String lexerPath; + public String parserPath; + public String treeParserPath; + + protected String stdout; + protected String stderr; + + private PrintStream console = System.out; + private PrintStream consoleErr = System.err; + + // Invoke target lexer.rule + public String execLexer(String testRuleName, String testInput, boolean isFile) throws Exception { + CharStream input; + /** Set up ANTLR input stream based on input source, file or String */ + if ( isFile ) { + String filePath = testInput; + File testInputFile = new File(filePath); + // if input test file is not found under the current dir, also try to look for it under the package dir + if ( !testInputFile.exists() && packagePath!=null ) { + testInputFile = new File(packagePath, filePath); + if ( testInputFile.exists() ) filePath = testInputFile.getCanonicalPath(); + } + input = new ANTLRFileStream(filePath); + } + else { + input = new ANTLRStringStream(testInput); + } + Class lexer = null; + PrintStream ps = null; // for redirecting stdout later + PrintStream ps2 = null; // for redirecting stderr later + try { + /** Use Reflection to create instances of lexer and parser */ + lexer = Class.forName(lexerPath); + Class[] lexArgTypes = new Class[]{CharStream.class}; // assign type to lexer's args + Constructor lexConstructor = lexer.getConstructor(lexArgTypes); + Object[] lexArgs = new Object[]{input}; // assign value to lexer's args + Object lexObj = lexConstructor.newInstance(lexArgs); // makes new instance of lexer + + Method ruleName = lexer.getMethod("m"+testRuleName, new Class[0]); + + /** Start of I/O Redirecting */ + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ByteArrayOutputStream err = new ByteArrayOutputStream(); + ps = new PrintStream(out); + ps2 = new PrintStream(err); + System.setOut(ps); + System.setErr(ps2); + /** End of redirecting */ + + /** Invoke lexer rule, and get the current index in CharStream */ + ruleName.invoke(lexObj, new Object[0]); + Method ruleName2 = lexer.getMethod("getCharIndex", new Class[0]); + int currentIndex = (Integer) ruleName2.invoke(lexObj, new Object[0]); + if ( currentIndex!=input.size() ) { + ps2.println("extra text found, '"+input.substring(currentIndex, input.size()-1)+"'"); + } + + this.stdout = null; + this.stderr = null; + + if ( err.toString().length()>0 ) { + this.stderr = err.toString(); + return this.stderr; + } + if ( out.toString().length()>0 ) { + this.stdout = out.toString(); + } + if ( err.toString().length()==0 && out.toString().length()==0 ) { + return null; + } + } catch (ClassNotFoundException e) { + e.printStackTrace(); System.exit(1); + } catch (SecurityException e) { + e.printStackTrace(); System.exit(1); + } catch (NoSuchMethodException e) { + e.printStackTrace(); System.exit(1); + } catch (IllegalArgumentException e) { + e.printStackTrace(); System.exit(1); + } catch (InstantiationException e) { + e.printStackTrace(); System.exit(1); + } catch (IllegalAccessException e) { + e.printStackTrace(); System.exit(1); + } catch (InvocationTargetException e) { // This exception could be caused from ANTLR Runtime Exception, e.g. MismatchedTokenException + if ( e.getCause()!=null ) this.stderr = e.getCause().toString(); + else this.stderr = e.toString(); + return this.stderr; + } finally { + try { + if ( ps!=null ) ps.close(); + if ( ps2!=null ) ps2.close(); + System.setOut(console); // Reset standard output + System.setErr(consoleErr); // Reset standard err out + } catch (Exception e) { + e.printStackTrace(); + } + } + return this.stdout; + } + + // Invoke target parser.rule + public Object execParser(String testRuleName, String testInput, boolean isFile) throws Exception { + CharStream input; + /** Set up ANTLR input stream based on input source, file or String */ + if ( isFile ) { + String filePath = testInput; + File testInputFile = new File(filePath); + // if input test file is not found under the current dir, also try to look for it under the package dir + if ( !testInputFile.exists() && packagePath!=null ) { + testInputFile = new File(packagePath, filePath); + if ( testInputFile.exists() ) filePath = testInputFile.getCanonicalPath(); + } + input = new ANTLRFileStream(filePath); + } + else { + input = new ANTLRStringStream(testInput); + } + Class lexer = null; + Class parser = null; + PrintStream ps = null; // for redirecting stdout later + PrintStream ps2 = null; // for redirecting stderr later + try { + /** Use Reflection to create instances of lexer and parser */ + lexer = Class.forName(lexerPath); + Class[] lexArgTypes = new Class[]{CharStream.class}; // assign type to lexer's args + Constructor lexConstructor = lexer.getConstructor(lexArgTypes); + Object[] lexArgs = new Object[]{input}; // assign value to lexer's args + Object lexObj = lexConstructor.newInstance(lexArgs); // makes new instance of lexer + + CommonTokenStream tokens = new CommonTokenStream((Lexer) lexObj); + parser = Class.forName(parserPath); + Class[] parArgTypes = new Class[]{TokenStream.class}; // assign type to parser's args + Constructor parConstructor = parser.getConstructor(parArgTypes); + Object[] parArgs = new Object[]{tokens}; // assign value to parser's args + Object parObj = parConstructor.newInstance(parArgs); // makes new instance of parser + + Method ruleName = parser.getMethod(testRuleName); + + /** Start of I/O Redirecting */ + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ByteArrayOutputStream err = new ByteArrayOutputStream(); + ps = new PrintStream(out); + ps2 = new PrintStream(err); + System.setOut(ps); + System.setErr(ps2); + /** End of redirecting */ + + /** Invoke grammar rule, and store if there is a return value */ + Object ruleReturn = ruleName.invoke(parObj); + String astString = null; + String stString = null; + /** If rule has return value, determine if it contains an AST or a ST */ + if ( ruleReturn!=null ) { + if ( ruleReturn.getClass().toString().indexOf(testRuleName+"_return")>0 ) { + try { // NullPointerException may happen here... + Class _return = Class.forName(parserPath+"$"+testRuleName+"_return"); + Method[] methods = _return.getDeclaredMethods(); + for(Method method : methods) { + if ( method.getName().equals("getTree") ) { + Method returnName = _return.getMethod("getTree"); + CommonTree tree = (CommonTree) returnName.invoke(ruleReturn); + astString = tree.toStringTree(); + } + else if ( method.getName().equals("getTemplate") ) { + Method returnName = _return.getMethod("getTemplate"); + StringTemplate st = (StringTemplate) returnName.invoke(ruleReturn); + stString = st.toString(); + } + } + } + catch(Exception e) { + System.err.println(e); // Note: If any exception occurs, the test is viewed as failed. + } + } + } + + this.stdout = null; + this.stderr = null; + + /** Invalid input */ + if ( tokens.index()!=tokens.size() ) { + throw new InvalidInputException(); + } + + // retVal could be actual return object from rule, stderr or stdout + if ( err.toString().length()>0 ) { + this.stderr = err.toString(); + return this.stderr; + } + if ( out.toString().length()>0 ) { + this.stdout = out.toString(); + } + if ( astString!=null ) { // Return toStringTree of AST + return astString; + } + else if ( stString!=null ) {// Return toString of ST + return stString; + } + if ( ruleReturn!=null ) { + return ruleReturn; + } + if ( err.toString().length()==0 && out.toString().length()==0 ) { + return null; + } + } catch (ClassNotFoundException e) { + e.printStackTrace(); System.exit(1); + } catch (SecurityException e) { + e.printStackTrace(); System.exit(1); + } catch (NoSuchMethodException e) { + e.printStackTrace(); System.exit(1); + } catch (IllegalAccessException e) { + e.printStackTrace(); System.exit(1); + } catch (InvocationTargetException e) { + if ( e.getCause()!=null ) this.stderr = e.getCause().toString(); + else this.stderr = e.toString(); + return this.stderr; + } finally { + try { + if ( ps!=null ) ps.close(); + if ( ps2!=null ) ps2.close(); + System.setOut(console); // Reset standard output + System.setErr(consoleErr); // Reset standard err out + } catch (Exception e) { + e.printStackTrace(); + } + } + return this.stdout; + } + + // Invoke target parser.rule + public Object execTreeParser(String testTreeRuleName, String testRuleName, String testInput, boolean isFile) throws Exception { + CharStream input; + if ( isFile ) { + String filePath = testInput; + File testInputFile = new File(filePath); + // if input test file is not found under the current dir, also try to look for it under the package dir + if ( !testInputFile.exists() && packagePath!=null ) { + testInputFile = new File(packagePath, filePath); + if ( testInputFile.exists() ) filePath = testInputFile.getCanonicalPath(); + } + input = new ANTLRFileStream(filePath); + } + else { + input = new ANTLRStringStream(testInput); + } + Class lexer = null; + Class parser = null; + Class treeParser = null; + PrintStream ps = null; // for redirecting stdout later + PrintStream ps2 = null; // for redirecting stderr later + try { + /** Use Reflection to create instances of lexer and parser */ + lexer = Class.forName(lexerPath); + Class[] lexArgTypes = new Class[]{CharStream.class}; // assign type to lexer's args + Constructor lexConstructor = lexer.getConstructor(lexArgTypes); + Object[] lexArgs = new Object[]{input}; // assign value to lexer's args + Object lexObj = lexConstructor.newInstance(lexArgs); // makes new instance of lexer + + CommonTokenStream tokens = new CommonTokenStream((Lexer) lexObj); + + parser = Class.forName(parserPath); + Class[] parArgTypes = new Class[]{TokenStream.class}; // assign type to parser's args + Constructor parConstructor = parser.getConstructor(parArgTypes); + Object[] parArgs = new Object[]{tokens}; // assign value to parser's args + Object parObj = parConstructor.newInstance(parArgs); // makes new instance of parser + + Method ruleName = parser.getMethod(testRuleName); + + /** Start of I/O Redirecting */ + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ByteArrayOutputStream err = new ByteArrayOutputStream(); + ps = new PrintStream(out); + ps2 = new PrintStream(err); + System.setOut(ps); + System.setErr(ps2); + /** End of redirecting */ + + /** Invoke grammar rule, and get the return value */ + Object ruleReturn = ruleName.invoke(parObj); + + Class _return = Class.forName(parserPath+"$"+testRuleName+"_return"); + Method returnName = _return.getMethod("getTree"); + CommonTree tree = (CommonTree) returnName.invoke(ruleReturn); + + // Walk resulting tree; create tree nodes stream first + CommonTreeNodeStream nodes = new CommonTreeNodeStream(tree); + // AST nodes have payload that point into token stream + nodes.setTokenStream(tokens); + // Create a tree walker attached to the nodes stream + treeParser = Class.forName(treeParserPath); + Class[] treeParArgTypes = new Class[]{TreeNodeStream.class}; // assign type to tree parser's args + Constructor treeParConstructor = treeParser.getConstructor(treeParArgTypes); + Object[] treeParArgs = new Object[]{nodes}; // assign value to tree parser's args + Object treeParObj = treeParConstructor.newInstance(treeParArgs); // makes new instance of tree parser + // Invoke the tree rule, and store the return value if there is + Method treeRuleName = treeParser.getMethod(testTreeRuleName); + Object treeRuleReturn = treeRuleName.invoke(treeParObj); + + String astString = null; + String stString = null; + /** If tree rule has return value, determine if it contains an AST or a ST */ + if ( treeRuleReturn!=null ) { + if ( treeRuleReturn.getClass().toString().indexOf(testTreeRuleName+"_return")>0 ) { + try { // NullPointerException may happen here... + Class _treeReturn = Class.forName(treeParserPath+"$"+testTreeRuleName+"_return"); + Method[] methods = _treeReturn.getDeclaredMethods(); + for(Method method : methods) { + if ( method.getName().equals("getTree") ) { + Method treeReturnName = _treeReturn.getMethod("getTree"); + CommonTree returnTree = (CommonTree) treeReturnName.invoke(treeRuleReturn); + astString = returnTree.toStringTree(); + } + else if ( method.getName().equals("getTemplate") ) { + Method treeReturnName = _return.getMethod("getTemplate"); + StringTemplate st = (StringTemplate) treeReturnName.invoke(treeRuleReturn); + stString = st.toString(); + } + } + } + catch(Exception e) { + System.err.println(e); // Note: If any exception occurs, the test is viewed as failed. + } + } + } + + this.stdout = null; + this.stderr = null; + + /** Invalid input */ + if ( tokens.index()!=tokens.size() ) { + throw new InvalidInputException(); + } + + // retVal could be actual return object from rule, stderr or stdout + if ( err.toString().length()>0 ) { + this.stderr = err.toString(); + return this.stderr; + } + if ( out.toString().length()>0 ) { + this.stdout = out.toString(); + } + if ( astString!=null ) { // Return toStringTree of AST + return astString; + } + else if ( stString!=null ) {// Return toString of ST + return stString; + } + if ( treeRuleReturn!=null ) { + return treeRuleReturn; + } + if ( err.toString().length()==0 && out.toString().length()==0 ) { + return null; + } + } catch (ClassNotFoundException e) { + e.printStackTrace(); System.exit(1); + } catch (SecurityException e) { + e.printStackTrace(); System.exit(1); + } catch (NoSuchMethodException e) { + e.printStackTrace(); System.exit(1); + } catch (IllegalAccessException e) { + e.printStackTrace(); System.exit(1); + } catch (InvocationTargetException e) { + if ( e.getCause()!=null ) this.stderr = e.getCause().toString(); + else this.stderr = e.toString(); + return this.stderr; + } finally { + try { + if ( ps!=null ) ps.close(); + if ( ps2!=null ) ps2.close(); + System.setOut(console); // Reset standard output + System.setErr(consoleErr); // Reset standard err out + } catch (Exception e) { + e.printStackTrace(); + } + } + return stdout; + } + + // Modify the return value if the expected token type is OK or FAIL + public Object examineExecResult(int tokenType, Object retVal) { + if ( tokenType==gUnitParser.OK ) { // expected Token: OK + if ( this.stderr==null ) { + return "OK"; + } + else { + return "FAIL, "+this.stderr; + } + } + else if ( tokenType==gUnitParser.FAIL ) { // expected Token: FAIL + if ( this.stderr!=null ) { + return "FAIL"; + } + else { + return "OK"; + } + } + else { // return the same object for the other token types + return retVal; + } + } + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitExecutor.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitExecutor.java new file mode 100644 index 0000000..50740ff --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitExecutor.java @@ -0,0 +1,620 @@ +/* + [The "BSD licence"] + Copyright (c) 2007-2008 Leon Jen-Yuan Su + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.gunit; + +import java.io.*; +import java.util.List; +import java.util.ArrayList; +import java.lang.reflect.*; +import org.antlr.runtime.*; +import org.antlr.runtime.tree.*; +import org.antlr.stringtemplate.CommonGroupLoader; +import org.antlr.stringtemplate.StringTemplate; +import org.antlr.stringtemplate.StringTemplateGroup; +import org.antlr.stringtemplate.StringTemplateGroupLoader; +import org.antlr.stringtemplate.language.AngleBracketTemplateLexer; + +public class gUnitExecutor implements ITestSuite { + public GrammarInfo grammarInfo; + + private final ClassLoader grammarClassLoader; + + private final String testsuiteDir; + + public int numOfTest; + + public int numOfSuccess; + + public int numOfFailure; + + private String title; + + public int numOfInvalidInput; + + private String parserName; + + private String lexerName; + + public List failures; + public List invalids; + + private PrintStream console = System.out; + private PrintStream consoleErr = System.err; + + public gUnitExecutor(GrammarInfo grammarInfo, String testsuiteDir) { + this( grammarInfo, determineClassLoader(), testsuiteDir); + } + + private static ClassLoader determineClassLoader() { + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + if ( classLoader == null ) { + classLoader = gUnitExecutor.class.getClassLoader(); + } + return classLoader; + } + + public gUnitExecutor(GrammarInfo grammarInfo, ClassLoader grammarClassLoader, String testsuiteDir) { + this.grammarInfo = grammarInfo; + this.grammarClassLoader = grammarClassLoader; + this.testsuiteDir = testsuiteDir; + numOfTest = 0; + numOfSuccess = 0; + numOfFailure = 0; + numOfInvalidInput = 0; + failures = new ArrayList(); + invalids = new ArrayList(); + } + + protected ClassLoader getGrammarClassLoader() { + return grammarClassLoader; + } + + protected final Class classForName(String name) throws ClassNotFoundException { + return getGrammarClassLoader().loadClass( name ); + } + + public String execTest() throws IOException{ + // Set up string template for testing result + StringTemplate testResultST = getTemplateGroup().getInstanceOf("testResult"); + try { + /** Set up appropriate path for parser/lexer if using package */ + if (grammarInfo.getHeader()!=null ) { + parserName = grammarInfo.getHeader()+"."+grammarInfo.getGrammarName()+"Parser"; + lexerName = grammarInfo.getHeader()+"."+grammarInfo.getGrammarName()+"Lexer"; + } + else { + parserName = grammarInfo.getGrammarName()+"Parser"; + lexerName = grammarInfo.getGrammarName()+"Lexer"; + } + + /*** Start Unit/Functional Testing ***/ + // Execute unit test of for parser, lexer and tree grammar + if ( grammarInfo.getTreeGrammarName()!=null ) { + title = "executing testsuite for tree grammar:"+grammarInfo.getTreeGrammarName()+" walks "+parserName; + } + else { + title = "executing testsuite for grammar:"+grammarInfo.getGrammarName(); + } + executeTests(); + // End of exection of unit testing + + // Fill in the template holes with the test results + testResultST.setAttribute("title", title); + testResultST.setAttribute("num_of_test", numOfTest); + testResultST.setAttribute("num_of_failure", numOfFailure); + if ( numOfFailure>0 ) { + testResultST.setAttribute("failure", failures); + } + if ( numOfInvalidInput>0 ) { + testResultST.setAttribute("has_invalid", true); + testResultST.setAttribute("num_of_invalid", numOfInvalidInput); + testResultST.setAttribute("invalid", invalids); + } + } + catch (Exception e) { + e.printStackTrace(); + System.exit(1); + } + return testResultST.toString(); + } + + private StringTemplateGroup getTemplateGroup() { + StringTemplateGroupLoader loader = new CommonGroupLoader("org/antlr/gunit", null); + StringTemplateGroup.registerGroupLoader(loader); + StringTemplateGroup.registerDefaultLexer(AngleBracketTemplateLexer.class); + StringTemplateGroup group = StringTemplateGroup.loadGroup("gUnitTestResult"); + return group; + } + + // TODO: throw more specific exceptions + private gUnitTestResult runCorrectParser(String parserName, String lexerName, String rule, String lexicalRule, String treeRule, gUnitTestInput input) throws Exception + { + if ( lexicalRule!=null ) return runLexer(lexerName, lexicalRule, input); + else if ( treeRule!=null ) return runTreeParser(parserName, lexerName, rule, treeRule, input); + else return runParser(parserName, lexerName, rule, input); + } + + private void executeTests() throws Exception { + for ( gUnitTestSuite ts: grammarInfo.getRuleTestSuites() ) { + String rule = ts.getRuleName(); + String lexicalRule = ts.getLexicalRuleName(); + String treeRule = ts.getTreeRuleName(); + for ( gUnitTestInput input: ts.testSuites.keySet() ) { // each rule may contain multiple tests + numOfTest++; + // Run parser, and get the return value or stdout or stderr if there is + gUnitTestResult result = null; + AbstractTest test = ts.testSuites.get(input); + try { + // TODO: create a -debug option to turn on logging, which shows progress of running tests + //System.out.print(numOfTest + ". Running rule: " + rule + "; input: '" + input.testInput + "'"); + result = runCorrectParser(parserName, lexerName, rule, lexicalRule, treeRule, input); + // TODO: create a -debug option to turn on logging, which shows progress of running tests + //System.out.println("; Expecting " + test.getExpected() + "; Success?: " + test.getExpected().equals(test.getResult(result))); + } catch ( InvalidInputException e) { + numOfInvalidInput++; + test.setHeader(rule, lexicalRule, treeRule, numOfTest, input.getLine()); + test.setActual(input.testInput); + invalids.add(test); + continue; + } // TODO: ensure there's no other exceptions required to be handled here... + + String expected = test.getExpected(); + String actual = test.getResult(result); + test.setActual(actual); + + if (actual == null) { + numOfFailure++; + test.setHeader(rule, lexicalRule, treeRule, numOfTest, input.getLine()); + test.setActual("null"); + failures.add(test); + onFail(test); + } + // the 2nd condition is used for the assertFAIL test of lexer rule because BooleanTest return err msg instead of 'FAIL' if isLexerTest + else if ( expected.equals(actual) || (expected.equals("FAIL")&&!actual.equals("OK") ) ) { + numOfSuccess++; + onPass(test); + } + // TODO: something with ACTIONS - at least create action test type and throw exception. + else if ( ts.testSuites.get(input).getType()==gUnitParser.ACTION ) { // expected Token: ACTION + numOfFailure++; + test.setHeader(rule, lexicalRule, treeRule, numOfTest, input.getLine()); + test.setActual("\t"+"{ACTION} is not supported in the grammarInfo yet..."); + failures.add(test); + onFail(test); + } + else { + numOfFailure++; + test.setHeader(rule, lexicalRule, treeRule, numOfTest, input.getLine()); + failures.add(test); + onFail(test); + } + } // end of 2nd for-loop: tests for individual rule + } // end of 1st for-loop: testsuites for grammar + } + + // TODO: throw proper exceptions + protected gUnitTestResult runLexer(String lexerName, String testRuleName, gUnitTestInput testInput) throws Exception { + CharStream input; + Class lexer = null; + PrintStream ps = null; // for redirecting stdout later + PrintStream ps2 = null; // for redirecting stderr later + try { + /** Set up ANTLR input stream based on input source, file or String */ + input = getANTLRInputStream(testInput); + + /** Use Reflection to create instances of lexer and parser */ + lexer = classForName(lexerName); + Class[] lexArgTypes = new Class[]{CharStream.class}; // assign type to lexer's args + Constructor lexConstructor = lexer.getConstructor(lexArgTypes); + Object[] lexArgs = new Object[]{input}; // assign value to lexer's args + Object lexObj = lexConstructor.newInstance(lexArgs); // makes new instance of lexer + + Method ruleName = lexer.getMethod("m"+testRuleName, new Class[0]); + + /** Start of I/O Redirecting */ + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ByteArrayOutputStream err = new ByteArrayOutputStream(); + ps = new PrintStream(out); + ps2 = new PrintStream(err); + System.setOut(ps); + System.setErr(ps2); + /** End of redirecting */ + + /** Invoke lexer rule, and get the current index in CharStream */ + ruleName.invoke(lexObj, new Object[0]); + Method ruleName2 = lexer.getMethod("getCharIndex", new Class[0]); + int currentIndex = (Integer) ruleName2.invoke(lexObj, new Object[0]); + if ( currentIndex!=input.size() ) { + ps2.print("extra text found, '"+input.substring(currentIndex, input.size()-1)+"'"); + } + + if ( err.toString().length()>0 ) { + gUnitTestResult testResult = new gUnitTestResult(false, err.toString(), true); + testResult.setError(err.toString()); + return testResult; + } + String stdout = null; + if ( out.toString().length()>0 ) { + stdout = out.toString(); + } + return new gUnitTestResult(true, stdout, true); + } catch (IOException e) { + return getTestExceptionResult(e); + } catch (ClassNotFoundException e) { + e.printStackTrace(); System.exit(1); + } catch (SecurityException e) { + e.printStackTrace(); System.exit(1); + } catch (NoSuchMethodException e) { + e.printStackTrace(); System.exit(1); + } catch (IllegalArgumentException e) { + e.printStackTrace(); System.exit(1); + } catch (InstantiationException e) { + e.printStackTrace(); System.exit(1); + } catch (IllegalAccessException e) { + e.printStackTrace(); System.exit(1); + } catch (InvocationTargetException e) { // This exception could be caused from ANTLR Runtime Exception, e.g. MismatchedTokenException + return getTestExceptionResult(e); + } finally { + try { + if ( ps!=null ) ps.close(); + if ( ps2!=null ) ps2.close(); + System.setOut(console); // Reset standard output + System.setErr(consoleErr); // Reset standard err out + } catch (Exception e) { + e.printStackTrace(); + } + } + // TODO: verify this: + throw new Exception("This should be unreachable?"); + } + + // TODO: throw proper exceptions + protected gUnitTestResult runParser(String parserName, String lexerName, String testRuleName, gUnitTestInput testInput) throws Exception { + CharStream input; + Class lexer = null; + Class parser = null; + PrintStream ps = null; // for redirecting stdout later + PrintStream ps2 = null; // for redirecting stderr later + try { + /** Set up ANTLR input stream based on input source, file or String */ + input = getANTLRInputStream(testInput); + + /** Use Reflection to create instances of lexer and parser */ + lexer = classForName(lexerName); + Class[] lexArgTypes = new Class[]{CharStream.class}; // assign type to lexer's args + Constructor lexConstructor = lexer.getConstructor(lexArgTypes); + Object[] lexArgs = new Object[]{input}; // assign value to lexer's args + Object lexObj = lexConstructor.newInstance(lexArgs); // makes new instance of lexer + + CommonTokenStream tokens = new CommonTokenStream((Lexer) lexObj); + + parser = classForName(parserName); + Class[] parArgTypes = new Class[]{TokenStream.class}; // assign type to parser's args + Constructor parConstructor = parser.getConstructor(parArgTypes); + Object[] parArgs = new Object[]{tokens}; // assign value to parser's args + Object parObj = parConstructor.newInstance(parArgs); // makes new instance of parser + + Method ruleName = parser.getMethod(testRuleName); + + /** Start of I/O Redirecting */ + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ByteArrayOutputStream err = new ByteArrayOutputStream(); + ps = new PrintStream(out); + ps2 = new PrintStream(err); + System.setOut(ps); + System.setErr(ps2); + /** End of redirecting */ + + /** Invoke grammar rule, and store if there is a return value */ + Object ruleReturn = ruleName.invoke(parObj); + String astString = null; + String stString = null; + /** If rule has return value, determine if it contains an AST or a ST */ + if ( ruleReturn!=null ) { + if ( ruleReturn.getClass().toString().indexOf(testRuleName+"_return")>0 ) { + try { // NullPointerException may happen here... + Class _return = classForName(parserName+"$"+testRuleName+"_return"); + Method[] methods = _return.getDeclaredMethods(); + for(Method method : methods) { + if ( method.getName().equals("getTree") ) { + Method returnName = _return.getMethod("getTree"); + CommonTree tree = (CommonTree) returnName.invoke(ruleReturn); + astString = tree.toStringTree(); + } + else if ( method.getName().equals("getTemplate") ) { + Method returnName = _return.getMethod("getTemplate"); + StringTemplate st = (StringTemplate) returnName.invoke(ruleReturn); + stString = st.toString(); + } + } + } + catch(Exception e) { + System.err.println(e); // Note: If any exception occurs, the test is viewed as failed. + } + } + } + + /** Invalid input */ + if ( tokens.index()!=tokens.size() ) { + //throw new InvalidInputException(); + ps2.print("Invalid input"); + } + + if ( err.toString().length()>0 ) { + gUnitTestResult testResult = new gUnitTestResult(false, err.toString()); + testResult.setError(err.toString()); + return testResult; + } + String stdout = null; + // TODO: need to deal with the case which has both ST return value and stdout + if ( out.toString().length()>0 ) { + stdout = out.toString(); + } + if ( astString!=null ) { // Return toStringTree of AST + return new gUnitTestResult(true, stdout, astString); + } + else if ( stString!=null ) {// Return toString of ST + return new gUnitTestResult(true, stdout, stString); + } + + if ( ruleReturn!=null ) { + // TODO: currently only works for a single return with int or String value + return new gUnitTestResult(true, stdout, String.valueOf(ruleReturn)); + } + return new gUnitTestResult(true, stdout, stdout); + } catch (IOException e) { + return getTestExceptionResult(e); + } catch (ClassNotFoundException e) { + e.printStackTrace(); System.exit(1); + } catch (SecurityException e) { + e.printStackTrace(); System.exit(1); + } catch (NoSuchMethodException e) { + e.printStackTrace(); System.exit(1); + } catch (IllegalArgumentException e) { + e.printStackTrace(); System.exit(1); + } catch (InstantiationException e) { + e.printStackTrace(); System.exit(1); + } catch (IllegalAccessException e) { + e.printStackTrace(); System.exit(1); + } catch (InvocationTargetException e) { // This exception could be caused from ANTLR Runtime Exception, e.g. MismatchedTokenException + return getTestExceptionResult(e); + } finally { + try { + if ( ps!=null ) ps.close(); + if ( ps2!=null ) ps2.close(); + System.setOut(console); // Reset standard output + System.setErr(consoleErr); // Reset standard err out + } catch (Exception e) { + e.printStackTrace(); + } + } + // TODO: verify this: + throw new Exception("This should be unreachable?"); + } + + protected gUnitTestResult runTreeParser(String parserName, String lexerName, String testRuleName, String testTreeRuleName, gUnitTestInput testInput) throws Exception { + CharStream input; + String treeParserPath; + Class lexer = null; + Class parser = null; + Class treeParser = null; + PrintStream ps = null; // for redirecting stdout later + PrintStream ps2 = null; // for redirecting stderr later + try { + /** Set up ANTLR input stream based on input source, file or String */ + input = getANTLRInputStream(testInput); + + /** Set up appropriate path for tree parser if using package */ + if ( grammarInfo.getHeader()!=null ) { + treeParserPath = grammarInfo.getHeader()+"."+grammarInfo.getTreeGrammarName(); + } + else { + treeParserPath = grammarInfo.getTreeGrammarName(); + } + + /** Use Reflection to create instances of lexer and parser */ + lexer = classForName(lexerName); + Class[] lexArgTypes = new Class[]{CharStream.class}; // assign type to lexer's args + Constructor lexConstructor = lexer.getConstructor(lexArgTypes); + Object[] lexArgs = new Object[]{input}; // assign value to lexer's args + Object lexObj = lexConstructor.newInstance(lexArgs); // makes new instance of lexer + + CommonTokenStream tokens = new CommonTokenStream((Lexer) lexObj); + + parser = classForName(parserName); + Class[] parArgTypes = new Class[]{TokenStream.class}; // assign type to parser's args + Constructor parConstructor = parser.getConstructor(parArgTypes); + Object[] parArgs = new Object[]{tokens}; // assign value to parser's args + Object parObj = parConstructor.newInstance(parArgs); // makes new instance of parser + + Method ruleName = parser.getMethod(testRuleName); + + /** Start of I/O Redirecting */ + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ByteArrayOutputStream err = new ByteArrayOutputStream(); + ps = new PrintStream(out); + ps2 = new PrintStream(err); + System.setOut(ps); + System.setErr(ps2); + /** End of redirecting */ + + /** Invoke grammar rule, and get the return value */ + Object ruleReturn = ruleName.invoke(parObj); + + Class _return = classForName(parserName+"$"+testRuleName+"_return"); + Method returnName = _return.getMethod("getTree"); + CommonTree tree = (CommonTree) returnName.invoke(ruleReturn); + + // Walk resulting tree; create tree nodes stream first + CommonTreeNodeStream nodes = new CommonTreeNodeStream(tree); + // AST nodes have payload that point into token stream + nodes.setTokenStream(tokens); + // Create a tree walker attached to the nodes stream + treeParser = classForName(treeParserPath); + Class[] treeParArgTypes = new Class[]{TreeNodeStream.class}; // assign type to tree parser's args + Constructor treeParConstructor = treeParser.getConstructor(treeParArgTypes); + Object[] treeParArgs = new Object[]{nodes}; // assign value to tree parser's args + Object treeParObj = treeParConstructor.newInstance(treeParArgs); // makes new instance of tree parser + // Invoke the tree rule, and store the return value if there is + Method treeRuleName = treeParser.getMethod(testTreeRuleName); + Object treeRuleReturn = treeRuleName.invoke(treeParObj); + + String astString = null; + String stString = null; + /** If tree rule has return value, determine if it contains an AST or a ST */ + if ( treeRuleReturn!=null ) { + if ( treeRuleReturn.getClass().toString().indexOf(testTreeRuleName+"_return")>0 ) { + try { // NullPointerException may happen here... + Class _treeReturn = classForName(treeParserPath+"$"+testTreeRuleName+"_return"); + Method[] methods = _treeReturn.getDeclaredMethods(); + for(Method method : methods) { + if ( method.getName().equals("getTree") ) { + Method treeReturnName = _treeReturn.getMethod("getTree"); + CommonTree returnTree = (CommonTree) treeReturnName.invoke(treeRuleReturn); + astString = returnTree.toStringTree(); + } + else if ( method.getName().equals("getTemplate") ) { + Method treeReturnName = _return.getMethod("getTemplate"); + StringTemplate st = (StringTemplate) treeReturnName.invoke(treeRuleReturn); + stString = st.toString(); + } + } + } + catch(Exception e) { + System.err.println(e); // Note: If any exception occurs, the test is viewed as failed. + } + } + } + + /** Invalid input */ + if ( tokens.index()!=tokens.size() ) { + //throw new InvalidInputException(); + ps2.print("Invalid input"); + } + + if ( err.toString().length()>0 ) { + gUnitTestResult testResult = new gUnitTestResult(false, err.toString()); + testResult.setError(err.toString()); + return testResult; + } + + String stdout = null; + // TODO: need to deal with the case which has both ST return value and stdout + if ( out.toString().length()>0 ) { + stdout = out.toString(); + } + if ( astString!=null ) { // Return toStringTree of AST + return new gUnitTestResult(true, stdout, astString); + } + else if ( stString!=null ) {// Return toString of ST + return new gUnitTestResult(true, stdout, stString); + } + + if ( treeRuleReturn!=null ) { + // TODO: again, currently only works for a single return with int or String value + return new gUnitTestResult(true, stdout, String.valueOf(treeRuleReturn)); + } + return new gUnitTestResult(true, stdout, stdout); + } catch (IOException e) { + return getTestExceptionResult(e); + } catch (ClassNotFoundException e) { + e.printStackTrace(); System.exit(1); + } catch (SecurityException e) { + e.printStackTrace(); System.exit(1); + } catch (NoSuchMethodException e) { + e.printStackTrace(); System.exit(1); + } catch (IllegalArgumentException e) { + e.printStackTrace(); System.exit(1); + } catch (InstantiationException e) { + e.printStackTrace(); System.exit(1); + } catch (IllegalAccessException e) { + e.printStackTrace(); System.exit(1); + } catch (InvocationTargetException e) { // note: This exception could be caused from ANTLR Runtime Exception... + return getTestExceptionResult(e); + } finally { + try { + if ( ps!=null ) ps.close(); + if ( ps2!=null ) ps2.close(); + System.setOut(console); // Reset standard output + System.setErr(consoleErr); // Reset standard err out + } catch (Exception e) { + e.printStackTrace(); + } + } + // TODO: verify this: + throw new Exception("Should not be reachable?"); + } + + // Create ANTLR input stream based on input source, file or String + private CharStream getANTLRInputStream(gUnitTestInput testInput) throws IOException { + CharStream input; + if ( testInput.inputIsFile ) { + String filePath = testInput.testInput; + File testInputFile = new File(filePath); + // if input test file is not found under the current dir, try to look for it from dir where the testsuite file locates + if ( !testInputFile.exists() ) { + testInputFile = new File(this.testsuiteDir, filePath); + if ( testInputFile.exists() ) filePath = testInputFile.getCanonicalPath(); + // if still not found, also try to look for it under the package dir + else if ( grammarInfo.getHeader()!=null ) { + testInputFile = new File("."+File.separator+grammarInfo.getHeader().replace(".", File.separator), filePath); + if ( testInputFile.exists() ) filePath = testInputFile.getCanonicalPath(); + } + } + input = new ANTLRFileStream(filePath); + } + else { + input = new ANTLRStringStream(testInput.testInput); + } + return input; + } + + // set up the cause of exception or the exception name into a gUnitTestResult instance + private gUnitTestResult getTestExceptionResult(Exception e) { + gUnitTestResult testResult; + if ( e.getCause()!=null ) { + testResult = new gUnitTestResult(false, e.getCause().toString(), true); + testResult.setError(e.getCause().toString()); + } + else { + testResult = new gUnitTestResult(false, e.toString(), true); + testResult.setError(e.toString()); + } + return testResult; + } + + + public void onPass(ITestCase passTest) { + + } + + public void onFail(ITestCase failTest) { + + } + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitTestInput.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitTestInput.java new file mode 100644 index 0000000..4e3519f --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitTestInput.java @@ -0,0 +1,45 @@ +/* + [The "BSD licence"] + Copyright (c) 2007-2008 Leon, Jen-Yuan Su + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.gunit; + +/** A class which contains input information of an individual testuite */ +public class gUnitTestInput { + protected String testInput; // a test input string for a testsuite + + protected boolean inputIsFile; // if true, the testInput represents a filename + + protected int line; // number of line in the script + + public gUnitTestInput(String testInput, boolean inputIsFile, int line) { + this.testInput = testInput; + this.inputIsFile = inputIsFile; + this.line = line; + } + + public int getLine() { return this.line; } +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitTestResult.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitTestResult.java new file mode 100644 index 0000000..f8263b6 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitTestResult.java @@ -0,0 +1,77 @@ +/* + [The "BSD license"] + Copyright (c) 2007 Kenny MacDermid + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.gunit; + +public class gUnitTestResult { + + private boolean success; + private String output; // stdout + private String error; // stderr + private String returned; // AST (toStringTree) or ST (toString) + private boolean isLexerTest; + + public gUnitTestResult(boolean success, String output) { + this.success = success; + this.output = output; + } + + public gUnitTestResult(boolean success, String output, boolean isLexerTest) { + this(success, output); + this.isLexerTest = isLexerTest; + } + + public gUnitTestResult(boolean success, String output, String returned) { + this(success, output); + this.returned = returned; + } + + public boolean isSuccess() { + return success; + } + + public String getOutput() { + return output; + } + + public String getError() { + return error; + } + + public String getReturned() { + return returned; + } + + public boolean isLexerTest() { + return isLexerTest; + } + + public void setError(String error) { + this.error = error; + } + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitTestSuite.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitTestSuite.java new file mode 100644 index 0000000..d4e7f19 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/gUnitTestSuite.java @@ -0,0 +1,76 @@ +/* + [The "BSD licence"] + Copyright (c) 2007-2008 Leon Jen-Yuan Su + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.gunit; + +/** A class which wraps all testsuites for an individual rule */ +import java.util.Map; +import java.util.LinkedHashMap; + +public class gUnitTestSuite { + protected String rule = null; // paeser rule name for unit testing + protected String lexicalRule = null; // lexical rule name + protected String treeRule = null; // optional, required for testing tree grammar rule + protected boolean isLexicalRule = false; + + /** A map which stores input/output pairs (individual testsuites). + * In other words, it maps input data for unit test (gUnitTestInput object) + * to an expected output (Token object). + */ + protected Map testSuites = new LinkedHashMap(); + + public gUnitTestSuite() { + ; + } + + public gUnitTestSuite(String rule) { + this.rule = rule; + } + + public gUnitTestSuite(String treeRule, String rule) { + this.rule = rule; + this.treeRule = treeRule; + } + + public void setRuleName(String ruleName) { this.rule = ruleName; } + public void setLexicalRuleName(String lexicalRule) { this.lexicalRule = lexicalRule; this.isLexicalRule = true; } + public void setTreeRuleName(String treeRuleName) { this.treeRule = treeRuleName; } + + public String getRuleName() { return this.rule; } + public String getLexicalRuleName() { return this.lexicalRule; } + public String getTreeRuleName() { return this.treeRule; } + public boolean isLexicalRule() { return this.isLexicalRule; } + + public void addTestCase(gUnitTestInput input, AbstractTest expect) { + if ( input!=null && expect!=null ) { + expect.setTestedRuleName(this.rule); + expect.setTestCaseIndex(this.testSuites.size()); + this.testSuites.put(input, expect); + } + } + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/AbstractInputEditor.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/AbstractInputEditor.java new file mode 100644 index 0000000..ddbd47c --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/AbstractInputEditor.java @@ -0,0 +1,28 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package org.antlr.gunit.swingui; + +import org.antlr.gunit.swingui.model.ITestCaseInput; +import java.awt.event.ActionListener; +import javax.swing.JComponent; + +/** + * + * @author scai + */ +public abstract class AbstractInputEditor { + + protected ITestCaseInput input; + public void setInput(ITestCaseInput input) { + this.input = input; + } + + protected JComponent comp; + public JComponent getControl() { return comp; } + + abstract public void addActionListener(ActionListener l) ; + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/AwAdapter.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/AwAdapter.java new file mode 100644 index 0000000..b600e44 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/AwAdapter.java @@ -0,0 +1,30 @@ +package org.antlr.gunit.swingui; + +import javax.swing.JComponent; +import javax.swing.JSplitPane; +import org.antlr.gunit.swingui.model.TestSuite; + +public class AwAdapter { + + private JSplitPane splitMain ; + private RunnerController runner; + private TestCaseEditController editor; + private TestSuite testSuite; + + public AwAdapter() { + initComponents(); + testSuite = new TestSuite(); + } + + public JComponent getView() { + return splitMain; + } + + private void initComponents() { + runner = new RunnerController(); + editor = new TestCaseEditController(); + + splitMain = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, + editor.getView(), runner.getView()); + } +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/IController.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/IController.java new file mode 100644 index 0000000..ceda3d0 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/IController.java @@ -0,0 +1,8 @@ +package org.antlr.gunit.swingui; + +import java.awt.Component; + +public interface IController { + public Object getModel() ; + public Component getView() ; +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/RuleListController.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/RuleListController.java new file mode 100644 index 0000000..b14e7c4 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/RuleListController.java @@ -0,0 +1,133 @@ + +package org.antlr.gunit.swingui; + +import javax.swing.event.ListDataListener; +import org.antlr.gunit.swingui.model.Rule; +import org.antlr.gunit.swingui.images.ImageFactory; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.List; +import javax.swing.BorderFactory; +import javax.swing.DefaultListModel; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JScrollPane; +import javax.swing.ListCellRenderer; +import javax.swing.ListModel; +import javax.swing.ListSelectionModel; +import javax.swing.event.ListSelectionListener; +import org.antlr.gunit.swingui.model.TestSuite; + +public class RuleListController implements IController { + + /* Sub-controls */ + private final JList list = new JList(); + private final JScrollPane scroll = new JScrollPane( list, + JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, + JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + + /* Model */ + private ListModel model = null; + private TestSuite testSuite = null; + + public RuleListController() { + this.initComponents(); + } + + public JScrollPane getView() { + return scroll; + } + + private void setTestSuite(TestSuite newTestSuite) { + testSuite = newTestSuite; + model = new RuleListModel(); + list.setModel(model); + } + + public void initialize(TestSuite ts) { + setTestSuite(ts); + if(model.getSize() > 0) list.setSelectedIndex(0); + list.updateUI(); + } + + + /** + * Initialize view. + */ + private void initComponents() { + + scroll.setViewportBorder(BorderFactory.createEtchedBorder()); + scroll.setBorder(BorderFactory.createTitledBorder( + BorderFactory.createEmptyBorder(), "Rules")); + scroll.setOpaque(false); + + list.setOpaque(false); + list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); + list.setLayoutOrientation(JList.VERTICAL); + list.setCellRenderer(new RuleListItemRenderer()); + } + + public void setListSelectionListener(ListSelectionListener l) { + this.list.addListSelectionListener(l); + } + + public Object getModel() { + return model; + } + + + /* ITEM RENDERER */ + + private class RuleListItemRenderer extends JLabel implements ListCellRenderer{ + + public RuleListItemRenderer() { + this.setPreferredSize(new Dimension(50, 18)); + } + + public Component getListCellRendererComponent( + JList list, Object value, int index, + boolean isSelected, boolean hasFocus) { + + if(value instanceof Rule) { + final Rule item = (Rule) value; + setText(item.toString()); + setForeground(list.getForeground()); + + setIcon(item.getNotEmpty() ? ImageFactory.FAV16 : null); + + if(list.getSelectedValue() == item ) { + setBackground(Color.LIGHT_GRAY); + setOpaque(true); + } else { + setOpaque(false); + } + + } else { + this.setText("Error!"); + } + return this; + } + } + + private class RuleListModel implements ListModel { + + public RuleListModel() { + if(testSuite == null) + throw new NullPointerException("Null test suite"); + } + + public int getSize() { + return testSuite.getRuleCount(); + } + + public Object getElementAt(int index) { + return testSuite.getRule(index); + } + + public void addListDataListener(ListDataListener l) {} + public void removeListDataListener(ListDataListener l) {} + } +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/RunnerController.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/RunnerController.java new file mode 100644 index 0000000..5177970 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/RunnerController.java @@ -0,0 +1,209 @@ +package org.antlr.gunit.swingui; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import javax.swing.BorderFactory; +import javax.swing.BoxLayout; +import javax.swing.JLabel; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.JTree; +import javax.swing.event.TreeModelListener; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreeCellRenderer; +import javax.swing.tree.TreeModel; +import javax.swing.tree.TreePath; +import org.antlr.gunit.swingui.images.ImageFactory; +import org.antlr.gunit.swingui.model.*; + +/** + * + * @author scai + */ +public class RunnerController implements IController { + + /* MODEL */ + //private TestSuite testSuite; + + /* VIEW */ + private RunnerView view = new RunnerView(); + public class RunnerView extends JPanel { + + private JTextArea textArea = new JTextArea(); + + private JTree tree = new JTree(); + + private JScrollPane scroll = new JScrollPane(tree, + JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, + JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + + public void initComponents() { + //textArea.setOpaque(false); + tree.setOpaque(false); + scroll.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY)); + scroll.setOpaque(false); + this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); + this.add(scroll); + this.setBorder(BorderFactory.createEmptyBorder()); + this.setOpaque(false); + } + + }; + + public RunnerController() { + } + + public Object getModel() { + return null; + } + + public Component getView() { + return view; + } + + public void update() { + view.initComponents(); + } + + public void OnShowSuiteResult(TestSuite suite) { + update(); + view.tree.setModel(new RunnerTreeModel(suite)); + view.tree.setCellRenderer(new RunnerTreeRenderer()); + } + + public void OnShowRuleResult(Rule rule) { + update(); + + + + /* + StringBuffer result = new StringBuffer(); + + result.append("Testing result for rule: " + rule.getName()); + result.append("\n--------------------\n\n"); + + for(TestCase testCase: rule.getTestCases()){ + result.append(testCase.isPass() ? "PASS" : "FAIL"); + result.append("\n"); + } + result.append("\n--------------------\n"); + view.textArea.setText(result.toString()); + */ + } + + + + private class TestSuiteTreeNode extends DefaultMutableTreeNode { + + private TestSuite data ; + + public TestSuiteTreeNode(TestSuite suite) { + super(suite.getGrammarName()); + for(int i=0; i 0; + + return String.format("%s (pass %d, fail %d)", + data.getName(), iPass, iFail); + } + } ; + + private class TestCaseTreeNode extends DefaultMutableTreeNode { + + private TestCase data; + + private TestCaseTreeNode(TestCase tc) { + super(tc.toString()); + data = tc; + } + } ; + + private class RunnerTreeModel extends DefaultTreeModel { + + public RunnerTreeModel(TestSuite testSuite) { + super(new TestSuiteTreeNode(testSuite)); + } + } + + private class RunnerTreeRenderer implements TreeCellRenderer { + + public Component getTreeCellRendererComponent(JTree tree, Object value, + boolean selected, boolean expanded, boolean leaf, int row, + boolean hasFocus) { + + JLabel label = new JLabel(); + + if(value instanceof TestSuiteTreeNode) { + + label.setText(value.toString()); + label.setIcon(ImageFactory.TESTSUITE); + + } else if(value instanceof TestGroupTreeNode) { + + TestGroupTreeNode node = (TestGroupTreeNode) value; + label.setText(value.toString()); + label.setIcon( node.hasFail ? ImageFactory.TESTGROUPX : ImageFactory.TESTGROUP); + + } else if(value instanceof TestCaseTreeNode) { + + TestCaseTreeNode node = (TestCaseTreeNode) value; + label.setIcon( (node.data.isPass())? + ImageFactory.RUN_PASS : ImageFactory.RUN_FAIL); + label.setText(value.toString()); + + } else { + throw new IllegalArgumentException( + "Invalide tree node type + " + value.getClass().getName()); + } + + return label; + + } + + } + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/StatusBarController.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/StatusBarController.java new file mode 100644 index 0000000..8f5c92f --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/StatusBarController.java @@ -0,0 +1,66 @@ +package org.antlr.gunit.swingui; + +import java.awt.Dimension; +import java.awt.FlowLayout; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JProgressBar; + +public class StatusBarController implements IController { + + private final JPanel panel = new JPanel(); + + private final JLabel labelText = new JLabel("Ready"); + private final JLabel labelRuleName = new JLabel(""); + private final JProgressBar progress = new JProgressBar(); + + public StatusBarController() { + initComponents(); + } + + private void initComponents() { + labelText.setPreferredSize(new Dimension(300, 20)); + labelText.setHorizontalTextPosition(JLabel.LEFT); + progress.setPreferredSize(new Dimension(100, 15)); + + final JLabel labRuleHint = new JLabel("Rule: "); + + FlowLayout layout = new FlowLayout(); + layout.setAlignment(FlowLayout.LEFT); + panel.setLayout(layout); + panel.add(labelText); + panel.add(progress); + panel.add(labRuleHint); + panel.add(labelRuleName); + panel.setOpaque(false); + panel.setBorder(javax.swing.BorderFactory.createEmptyBorder()); + + } + + public void setText(String text) { + labelText.setText(text); + } + + public void setRule(String name) { + this.labelRuleName.setText(name); + } + + public Object getModel() { + throw new UnsupportedOperationException("Not supported yet."); + } + + public JPanel getView() { + return panel; + } + + public void setProgressIndetermined(boolean value) { + this.progress.setIndeterminate(value); + } + + public void setProgress(int value) { + this.progress.setIndeterminate(false); + this.progress.setValue(value); + } + + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/TestCaseEditController.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/TestCaseEditController.java new file mode 100644 index 0000000..8a0162f --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/TestCaseEditController.java @@ -0,0 +1,605 @@ + +package org.antlr.gunit.swingui; + +import org.antlr.gunit.swingui.model.*; +import org.antlr.gunit.swingui.images.ImageFactory; +import java.awt.*; +import java.awt.event.*; +import java.util.HashMap; +import javax.swing.*; +import javax.swing.event.*; + +/** + * + * @author scai + */ +public class TestCaseEditController implements IController { + + private JPanel view = new JPanel(); + + private JScrollPane scroll; + private JPanel paneDetail; + private AbstractEditorPane paneDetailInput, paneDetailOutput; + private JToolBar toolbar; + private JList listCases; + private ListModel listModel ; + + public ActionListener onTestCaseNumberChange; + + /* EDITORS */ + private InputFileEditor editInputFile; + private InputStringEditor editInputString; + private InputMultiEditor editInputMulti; + private OutputResultEditor editOutputResult; + private OutputAstEditor editOutputAST; + private OutputStdEditor editOutputStd; + private OutputReturnEditor editOutputReturn; + + private JComboBox comboInputType, comboOutputType; + + /* TYPE NAME */ + private static final String IN_TYPE_STRING = "Single-line Text"; + private static final String IN_TYPE_MULTI = "Multi-line Text"; + private static final String IN_TYPE_FILE = "Disk File"; + private static final String OUT_TYPE_BOOL = "OK or Fail"; + private static final String OUT_TYPE_AST = "AST"; + private static final String OUT_TYPE_STD = "Standard Output"; + private static final String OUT_TYPE_RET = "Return Value"; + + private static final String DEFAULT_IN_SCRIPT = ""; + private static final String DEFAULT_OUT_SCRIPT = ""; + + private static final Object[] INPUT_TYPE = { + IN_TYPE_STRING, IN_TYPE_MULTI, IN_TYPE_FILE + }; + + private static final Object[] OUTPUT_TYPE = { + OUT_TYPE_BOOL, OUT_TYPE_AST, OUT_TYPE_STD, OUT_TYPE_RET + }; + + /* SIZE */ + private static final int TEST_CASE_DETAIL_WIDTH = 300; + private static final int TEST_EDITOR_WIDTH = 280; + private static final int TEST_CASE_DETAIL_HEIGHT = 250; + private static final int TEST_EDITOR_HEIGHT = 120; + + /* MODEL */ + private Rule currentRule = null; + private TestCase currentTestCase = null; + + /* END OF MODEL*/ + + private static final HashMap TypeNameTable; + static { + TypeNameTable = new HashMap (); + TypeNameTable.put(TestCaseInputString.class, IN_TYPE_STRING); + TypeNameTable.put(TestCaseInputMultiString.class, IN_TYPE_MULTI); + TypeNameTable.put(TestCaseInputFile.class, IN_TYPE_FILE); + + TypeNameTable.put(TestCaseOutputResult.class, OUT_TYPE_BOOL); + TypeNameTable.put(TestCaseOutputAST.class, OUT_TYPE_AST); + TypeNameTable.put(TestCaseOutputStdOut.class, OUT_TYPE_STD); + TypeNameTable.put(TestCaseOutputReturn.class, OUT_TYPE_RET); + } + + //private WorkSpaceView owner; + + public TestCaseEditController(WorkSpaceView workspace) { + //this.owner = workspace; + initComponents(); + } + + public TestCaseEditController() { + initComponents(); + } + + public void OnLoadRule(Rule rule) { + if(rule == null) throw new IllegalArgumentException("Null"); + this.currentRule = rule; + this.currentTestCase = null; + this.listModel = rule; + this.listCases.setModel(this.listModel); + } + + public void setCurrentTestCase(TestCase testCase) { + if(testCase == null) throw new IllegalArgumentException("Null"); + this.listCases.setSelectedValue(testCase, true); + this.currentTestCase = testCase; + } + + public Rule getCurrentRule() { + return this.currentRule; + } + + private void initComponents() { + + /* CASE LIST */ + listCases = new JList(); + listCases.addListSelectionListener(new TestCaseListSelectionListener()); + listCases.setCellRenderer(listRenderer); + listCases.setOpaque(false); + + scroll = new JScrollPane(listCases); + scroll.setBorder(BorderFactory.createTitledBorder( + BorderFactory.createEmptyBorder(), "Test Cases")); + scroll.setOpaque(false); + scroll.setViewportBorder(BorderFactory.createEtchedBorder()); + + /* CASE DETAIL */ + + editInputString = new InputStringEditor(); + editInputMulti = new InputMultiEditor(); + editInputFile = new InputFileEditor(); + + editOutputResult = new OutputResultEditor(); + editOutputAST = new OutputAstEditor(); + editOutputStd = new OutputStdEditor(); + editOutputReturn = new OutputReturnEditor(); + + paneDetail = new JPanel(); + paneDetail.setBorder(BorderFactory.createEmptyBorder()); + paneDetail.setOpaque(false); + + comboInputType = new JComboBox(INPUT_TYPE); + comboInputType.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent event) { + OnInputTestCaseTypeChanged(comboInputType.getSelectedItem()); + } + }); + comboOutputType = new JComboBox(OUTPUT_TYPE); + comboOutputType.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent event) { + OnOutputTestCaseTypeChanged(comboOutputType.getSelectedItem()); + } + }); + paneDetailInput = new InputEditorPane(comboInputType); + paneDetailOutput = new OutputEditorPane(comboOutputType); + + BoxLayout layout = new BoxLayout(paneDetail, BoxLayout.PAGE_AXIS); + paneDetail.setLayout(layout); + + paneDetail.add(this.paneDetailInput); + paneDetail.add(this.paneDetailOutput); + + /* TOOLBAR */ + toolbar = new JToolBar("Edit TestCases", JToolBar.VERTICAL); + toolbar.setFloatable(false); + toolbar.add(new AddTestCaseAction()); + toolbar.add(new RemoveTestCaseAction()); + + /* COMPOSITE */ + view.setLayout(new BorderLayout()); + view.setBorder(BorderFactory.createEmptyBorder()); + view.setOpaque(false); + view.add(toolbar, BorderLayout.WEST); + view.add(scroll, BorderLayout.CENTER); + view.add(paneDetail, BorderLayout.EAST); + } + + private void updateInputEditor() { + JComponent editor = null; + + if(currentTestCase != null ) { + ITestCaseInput input = this.currentTestCase.getInput(); + if(input instanceof TestCaseInputString) { + this.editInputString.setText(input.getScript()); + editor = this.editInputString; + comboInputType.setSelectedItem(IN_TYPE_STRING); + } else if(input instanceof TestCaseInputMultiString) { + this.editInputMulti.setText(input.getScript()); + editor = this.editInputMulti.getView(); + comboInputType.setSelectedItem(IN_TYPE_MULTI); + } else if(input instanceof TestCaseInputFile) { + this.editInputFile.setText(input.getScript()); + editor = this.editInputFile; + comboInputType.setSelectedItem(IN_TYPE_FILE); + } else { + throw new Error("Wrong type"); + } + } + + paneDetailInput.setEditor(editor); + } + + private void updateOutputEditor() { + JComponent editor = null; + + if(currentTestCase != null) { + + ITestCaseOutput output = this.currentTestCase.getOutput(); + + if(output instanceof TestCaseOutputAST) { + + this.editOutputAST.setText(output.getScript()); + editor = this.editOutputAST.getView(); + comboOutputType.setSelectedItem(OUT_TYPE_AST); + + } else if(output instanceof TestCaseOutputResult) { + + this.editOutputResult.setValue(output.getScript()); + editor = this.editOutputResult; + comboOutputType.setSelectedItem(OUT_TYPE_BOOL); + + } else if(output instanceof TestCaseOutputStdOut) { + + this.editOutputStd.setText(output.getScript()); + editor = this.editOutputStd.getView(); + comboOutputType.setSelectedItem(OUT_TYPE_STD); + + } else if(output instanceof TestCaseOutputReturn) { + + this.editOutputReturn.setText(output.getScript()); + editor = this.editOutputReturn.getView(); + comboOutputType.setSelectedItem(OUT_TYPE_RET); + + } else { + + throw new Error("Wrong type"); + + } + + } + this.paneDetailOutput.setEditor(editor); + } + + private void OnInputTestCaseTypeChanged(Object inputTypeStr) { + if(this.currentTestCase != null) { + ITestCaseInput input ; + if(inputTypeStr == IN_TYPE_STRING) { + input = new TestCaseInputString(DEFAULT_IN_SCRIPT); + } else if(inputTypeStr == IN_TYPE_MULTI) { + input = new TestCaseInputMultiString(DEFAULT_IN_SCRIPT); + } else if(inputTypeStr == IN_TYPE_FILE) { + input = new TestCaseInputFile(DEFAULT_IN_SCRIPT); + } else { + throw new Error("Wrong Type"); + } + + if(input.getClass().equals(this.currentTestCase.getInput().getClass())) + return ; + + this.currentTestCase.setInput(input); + } + this.updateInputEditor(); + } + + private void OnOutputTestCaseTypeChanged(Object outputTypeStr) { + if(this.currentTestCase != null) { + + ITestCaseOutput output ; + if(outputTypeStr == OUT_TYPE_AST) { + output = new TestCaseOutputAST(DEFAULT_OUT_SCRIPT); + } else if(outputTypeStr == OUT_TYPE_BOOL) { + output = new TestCaseOutputResult(false); + } else if(outputTypeStr == OUT_TYPE_STD) { + output = new TestCaseOutputStdOut(DEFAULT_OUT_SCRIPT); + } else if(outputTypeStr == OUT_TYPE_RET) { + output = new TestCaseOutputReturn(DEFAULT_OUT_SCRIPT); + } else { + throw new Error("Wrong Type"); + } + + if(output.getClass().equals(this.currentTestCase.getOutput().getClass())) + return ; + + this.currentTestCase.setOutput(output); + } + this.updateOutputEditor(); + } + + + private void OnTestCaseSelected(TestCase testCase) { + //if(testCase == null) throw new RuntimeException("Null TestCase"); + this.currentTestCase = testCase; + updateInputEditor(); + updateOutputEditor(); + + } + + private void OnAddTestCase() { + if(currentRule == null) return; + + final TestCase newCase = new TestCase( + new TestCaseInputString(""), + new TestCaseOutputResult(true)); + this.currentRule.addTestCase(newCase); + setCurrentTestCase(newCase); + + this.listCases.setSelectedValue(newCase, true); + this.listCases.updateUI(); + this.OnTestCaseSelected(newCase); + this.onTestCaseNumberChange.actionPerformed(null); + } + + private void OnRemoveTestCase() { + if(currentTestCase == null) return; + currentRule.removeElement(currentTestCase); + listCases.updateUI(); + + final TestCase nextActiveCase = listCases.isSelectionEmpty() ? + null : (TestCase) listCases.getSelectedValue() ; + OnTestCaseSelected(nextActiveCase); + this.onTestCaseNumberChange.actionPerformed(null); + } + + public Object getModel() { + return currentRule; + } + + public Component getView() { + return view; + } + + /* EDITOR CONTAINER */ + + abstract public class AbstractEditorPane extends JPanel { + + private JComboBox combo; + private JComponent editor; + private String title; + private JLabel placeHolder = new JLabel(); + + public AbstractEditorPane(JComboBox comboBox, String title) { + this.combo = comboBox; + this.editor = placeHolder; + this.title = title; + this.initComponents(); + } + + private void initComponents() { + placeHolder.setPreferredSize(new Dimension( + TEST_CASE_DETAIL_WIDTH, TEST_CASE_DETAIL_HEIGHT)); + this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); + this.add(combo, BorderLayout.NORTH); + this.add(editor, BorderLayout.CENTER); + this.setOpaque(false); + this.setBorder(BorderFactory.createTitledBorder(title)); + this.setPreferredSize(new Dimension( + TEST_CASE_DETAIL_WIDTH, TEST_CASE_DETAIL_HEIGHT)); + } + + public void setEditor(JComponent newEditor) { + if(newEditor == null) newEditor = placeHolder; + this.remove(editor); + this.add(newEditor); + this.editor = newEditor; + this.updateUI(); + } + } + + public class InputEditorPane extends AbstractEditorPane { + public InputEditorPane(JComboBox comboBox) { + super(comboBox, "Input"); + } + } + + public class OutputEditorPane extends AbstractEditorPane { + public OutputEditorPane(JComboBox comboBox) { + super(comboBox, "Output"); + } + } + + /* INPUT EDITORS */ + + public class InputStringEditor extends JTextField implements CaretListener { + public InputStringEditor() { + super(); + + this.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY)); + this.addCaretListener(this); + } + + public void caretUpdate(CaretEvent arg0) { + currentTestCase.getInput().setScript(getText()); + listCases.updateUI(); + } + } + + public class InputMultiEditor implements CaretListener { + private JTextArea textArea = new JTextArea(20, 30); + private JScrollPane scroll = new JScrollPane(textArea, + JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, + JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); + + public InputMultiEditor() { + super(); + scroll.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY)); + textArea.addCaretListener(this); + } + + public void caretUpdate(CaretEvent arg0) { + currentTestCase.getInput().setScript(getText()); + listCases.updateUI(); + } + + public String getText() { + return textArea.getText(); + } + + public void setText(String text) { + textArea.setText(text); + } + + public JComponent getView() { + return scroll; + } + } + + public class InputFileEditor extends InputStringEditor {}; + + public class OutputResultEditor extends JPanel implements ActionListener { + + private JToggleButton tbFail, tbOk; + + public OutputResultEditor() { + super(); + + tbFail = new JToggleButton("Fail"); + tbOk = new JToggleButton("OK"); + ButtonGroup group = new ButtonGroup(); + group.add(tbFail); + group.add(tbOk); + + this.add(tbFail); + this.add(tbOk); + + this.tbFail.addActionListener(this); + this.tbOk.addActionListener(this); + + this.setPreferredSize( + new Dimension(TEST_EDITOR_WIDTH, 100)); + } + + public void actionPerformed(ActionEvent e) { + TestCaseOutputResult output = + (TestCaseOutputResult) currentTestCase.getOutput(); + + if(e.getSource() == tbFail) { + output.setScript(false); + } else { + output.setScript(true); + } + + listCases.updateUI(); + } + + public void setValue(String value) { + if(TestCaseOutputResult.OK.equals(value)) { + this.tbOk.setSelected(true); + } else { + this.tbFail.setSelected(true); + } + } + } + + + public class OutputAstEditor implements CaretListener { + private JTextArea textArea = new JTextArea(20, 30); + private JScrollPane scroll = new JScrollPane(textArea, + JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, + JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); + + public OutputAstEditor() { + super(); + scroll.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY)); + textArea.addCaretListener(this); + } + + public void caretUpdate(CaretEvent arg0) { + currentTestCase.getOutput().setScript(getText()); + listCases.updateUI(); + } + + public void setText(String text) { + this.textArea.setText(text); + } + + public String getText() { + return this.textArea.getText(); + } + + public JScrollPane getView() { + return this.scroll; + } + } + + + public class OutputStdEditor extends OutputAstEditor {} + public class OutputReturnEditor extends OutputAstEditor {} + + /* EVENT HANDLERS */ + + private class TestCaseListSelectionListener implements ListSelectionListener { + + public void valueChanged(ListSelectionEvent e) { + + if(e.getValueIsAdjusting()) return; + final JList list = (JList) e.getSource(); + final TestCase value = (TestCase) list.getSelectedValue(); + if(value != null) OnTestCaseSelected(value); + + } + + } + + /* ACTIONS */ + + private class AddTestCaseAction extends AbstractAction { + public AddTestCaseAction() { + super("Add", ImageFactory.ADD); + putValue(SHORT_DESCRIPTION, "Add a gUnit test case."); + } + public void actionPerformed(ActionEvent e) { + OnAddTestCase(); + } + } + + private class RemoveTestCaseAction extends AbstractAction { + public RemoveTestCaseAction() { + super("Remove", ImageFactory.DELETE); + putValue(SHORT_DESCRIPTION, "Remove a gUnit test case."); + } + public void actionPerformed(ActionEvent e) { + OnRemoveTestCase(); + } + } + + /* CELL RENDERERS */ + + private static TestCaseListRenderer listRenderer + = new TestCaseListRenderer(); + + private static class TestCaseListRenderer implements ListCellRenderer { + + private static Font IN_FONT = new Font("mono", Font.PLAIN, 12); + private static Font OUT_FONT = new Font("default", Font.BOLD, 12); + + public static String clamp(String text, int len) { + if(text.length() > len) { + return text.substring(0, len - 3).concat("..."); + } else { + return text; + } + } + + public static String clampAtNewLine(String text) { + int pos = text.indexOf('\n'); + if(pos >= 0) { + return text.substring(0, pos).concat("..."); + } else { + return text; + } + } + + public Component getListCellRendererComponent( + JList list, Object value, int index, + boolean isSelected, boolean hasFocus) { + + final JPanel pane = new JPanel(); + + if (value instanceof TestCase) { + final TestCase item = (TestCase) value; + + // create components + final JLabel labIn = new JLabel( + clamp(clampAtNewLine(item.getInput().getScript()), 18)); + final JLabel labOut = new JLabel( + clamp(clampAtNewLine(item.getOutput().getScript()), 18)); + labOut.setFont(OUT_FONT); + labIn.setFont(IN_FONT); + + labIn.setIcon(item.getInput() instanceof TestCaseInputFile ? + ImageFactory.FILE16 : ImageFactory.EDIT16); + + pane.setBorder(BorderFactory.createEtchedBorder()); + pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS)); + pane.add(labIn); + pane.add(labOut); + pane.setBackground(isSelected ? Color.LIGHT_GRAY : Color.WHITE); + } + + return pane; + } + } + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/Tool.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/Tool.java new file mode 100644 index 0000000..288b6de --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/Tool.java @@ -0,0 +1,27 @@ +package org.antlr.gunit.swingui; + +import java.io.IOException; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; + +public class Tool { + + public static void main(String[] args) throws IOException { + try { + UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName()); + } + catch (Exception e) { + } + + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + WorkSpaceController control = new WorkSpaceController(); + control.show(); + } + }); + } + + + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/Translator.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/Translator.java new file mode 100644 index 0000000..e24e48a --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/Translator.java @@ -0,0 +1,171 @@ +package org.antlr.gunit.swingui; + +import org.antlr.gunit.swingui.parsers.StGUnitLexer; +import org.antlr.gunit.swingui.parsers.StGUnitParser; +import org.antlr.gunit.swingui.parsers.ANTLRv3Parser; +import org.antlr.gunit.swingui.parsers.ANTLRv3Lexer; +import java.io.*; +import java.util.ArrayList; +import java.util.List; +import org.antlr.gunit.swingui.model.*; +import org.antlr.runtime.*; +import org.antlr.stringtemplate.*; + +public class Translator { + + private static String TEMPLATE_FILE = "gunit.stg"; + private static StringTemplateGroup templates; + + static { + InputStream in = Translator.class.getResourceAsStream(TEMPLATE_FILE); + Reader rd = new InputStreamReader(in); + templates = new StringTemplateGroup(rd); + } + + + /* From program model to text. */ + public static String toScript(TestSuite testSuite) { + if(testSuite == null) return ""; + StringTemplate gUnitScript = templates.getInstanceOf("gUnitFile"); + gUnitScript.setAttribute("testSuite", testSuite); + return gUnitScript.toString(); + + } + + /* From textual script to program model. */ + public static TestSuite toTestSuite(File file, List ruleList) { + final TestSuite result = new TestSuite(); + try { + final Reader reader = new BufferedReader( + new FileReader(file)); + final StGUnitLexer lexer = new StGUnitLexer( + new ANTLRReaderStream(reader)); + final CommonTokenStream tokens = new CommonTokenStream(lexer); + final StGUnitParser parser = new StGUnitParser(tokens); + final TestSuiteAdapter adapter = new TestSuiteAdapter(result); + parser.adapter = adapter; + parser.gUnitDef(); + result.setTokens(tokens); + reader.close(); + + // if the tested grammar exists in the save directory, load rules. + final String sGrammarFile = file.getParentFile().getAbsolutePath() + + File.separator + result.getGrammarName() + ".g"; + final File fileGrammar = new File(sGrammarFile); + if(fileGrammar.exists() && fileGrammar.isFile()) { + //System.out.println("Found tested grammar file."); + List completeRuleList = loadRulesFromGrammar(fileGrammar); + //System.out.println(String.format("%d / %d", result.getRuleCount(), completeRuleList.size())); + for(Rule rule: completeRuleList) { + if(!result.hasRule(rule)) { + result.addRule(rule); + //System.out.println("Add rule:" + rule); + } + } + } else { + //System.out.println("Tested grammar not found." + sGrammarFile); + } + } catch (IOException ex) { + ex.printStackTrace(); + } finally { + return result; + } + } + + + /* Load rules from an ANTLR grammar file. */ + public static List loadRulesFromGrammar(File grammarFile) { + final List ruleNames = new ArrayList(); + try { + final Reader reader = new BufferedReader( + new FileReader(grammarFile)); + final ANTLRv3Lexer lexer = new ANTLRv3Lexer( + new ANTLRReaderStream(reader)); + CommonTokenStream tokens = new CommonTokenStream(lexer); + final ANTLRv3Parser parser = new ANTLRv3Parser(tokens); + parser.rules = ruleNames; + parser.grammarDef(); + reader.close(); + } catch (Exception e) { + e.printStackTrace(); + } + + final List ruleList = new ArrayList(); + for(String str: ruleNames) { + ruleList.add(new Rule(str)); + } + + return ruleList; + } + + + public static class TestSuiteAdapter { + private TestSuite model ; + private Rule currentRule; + + public TestSuiteAdapter(TestSuite testSuite) { + model = testSuite; + } + + public void setGrammarName(String name) { + model.setGrammarName(name); + } + + public void startRule(String name) { + currentRule = new Rule(name); + } + + public void endRule() { + model.addRule(currentRule); + currentRule = null; + } + + public void addTestCase(ITestCaseInput in, ITestCaseOutput out) { + TestCase testCase = new TestCase(in, out); + currentRule.addTestCase(testCase); + } + + private static String trimChars(String text, int numOfChars) { + return text.substring(numOfChars, text.length() - numOfChars); + } + + public static ITestCaseInput createFileInput(String fileName) { + if(fileName == null) throw new IllegalArgumentException("null"); + return new TestCaseInputFile(fileName); + } + + public static ITestCaseInput createStringInput(String line) { + if(line == null) throw new IllegalArgumentException("null"); + // trim double quotes + return new TestCaseInputString(trimChars(line, 1)); + } + + public static ITestCaseInput createMultiInput(String text) { + if(text == null) throw new IllegalArgumentException("null"); + // trim << and >> + return new TestCaseInputMultiString(trimChars(text, 2)); + } + + public static ITestCaseOutput createBoolOutput(boolean bool) { + return new TestCaseOutputResult(bool); + } + + public static ITestCaseOutput createAstOutput(String ast) { + if(ast == null) throw new IllegalArgumentException("null"); + return new TestCaseOutputAST(ast); + } + + public static ITestCaseOutput createStdOutput(String text) { + if(text == null) throw new IllegalArgumentException("null"); + // trim double quotes + return new TestCaseOutputStdOut(trimChars(text, 1)); + } + + public static ITestCaseOutput createReturnOutput(String text) { + if(text == null) throw new IllegalArgumentException("null"); + // trim square brackets + return new TestCaseOutputReturn(trimChars(text, 1)); + } + } + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/WorkSpaceController.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/WorkSpaceController.java new file mode 100644 index 0000000..d9cf7cd --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/WorkSpaceController.java @@ -0,0 +1,274 @@ + +package org.antlr.gunit.swingui; + +import org.antlr.gunit.swingui.runner.gUnitAdapter; +import java.awt.*; +import java.io.IOException; +import org.antlr.gunit.swingui.model.*; +import org.antlr.gunit.swingui.images.ImageFactory; +import java.awt.event.*; +import java.io.File; +import java.io.FileWriter; +import java.util.ArrayList; +import javax.swing.*; +import javax.swing.event.*; + +/** + * + * @author scai + */ +public class WorkSpaceController implements IController{ + + /* MODEL */ + private TestSuite currentTestSuite; + private gUnitAdapter adapter = new gUnitAdapter(); + private String testSuiteFileName = null; // path + file + + /* VIEW */ + private final WorkSpaceView view = new WorkSpaceView(); + + /* SUB-CONTROL */ + private final RunnerController runner = new RunnerController(); + + public WorkSpaceController() { + view.resultPane = (JPanel) runner.getView(); + view.initComponents(); + this.initEventHandlers(); + this.initToolbar(); + } + + public void show() { + this.view.setTitle("gUnitEditor"); + this.view.setVisible(true); + this.view.pack(); + } + + public Component getEmbeddedView() { + return view.paneEditor.getView(); + } + + private void initEventHandlers() { + this.view.tabEditors.addChangeListener(new TabChangeListener()); + this.view.listRules.setListSelectionListener(new RuleListSelectionListener()); + this.view.paneEditor.onTestCaseNumberChange = new ActionListener() { + public void actionPerformed(ActionEvent e) { + view.listRules.getView().updateUI(); + } + }; + } + + private void OnCreateTest() { + JFileChooser jfc = new JFileChooser(); + jfc.setDialogTitle("Create test suite from grammar"); + jfc.setDialogType(JFileChooser.OPEN_DIALOG); + if( jfc.showOpenDialog(view) != JFileChooser.APPROVE_OPTION ) return; + + view.paneStatus.setProgressIndetermined(true); + final File grammarFile = jfc.getSelectedFile(); + //final String sName = grammarFile.getName().substring( + // 0, grammarFile.getName().length() - 2); + currentTestSuite = new TestSuite(grammarFile, Translator.loadRulesFromGrammar(grammarFile)); + // trim ".g" + //currentTestSuite.setGrammarName(sName); + //currentTestSuite.setRules(Translator.loadRulesFromGrammar(grammarFile)); + view.listRules.initialize(currentTestSuite); + view.tabEditors.setSelectedIndex(0); + view.paneStatus.setText("Grammar: " + currentTestSuite.getGrammarName()); + view.paneStatus.setProgressIndetermined(false); + + testSuiteFileName = null; + } + + private void OnSaveTest() { + File file; + view.paneStatus.setProgressIndetermined(true); + try { + + if(testSuiteFileName == null || testSuiteFileName.equals("")) { + JFileChooser jfc = new JFileChooser(); + jfc.setDialogTitle("Save test suite"); + jfc.setDialogType(JFileChooser.SAVE_DIALOG); + if( jfc.showSaveDialog(view) != JFileChooser.APPROVE_OPTION ) return; + + file = jfc.getSelectedFile(); + testSuiteFileName = file.getCanonicalPath(); + } else { + file = new File(testSuiteFileName); + } + + FileWriter fw = new FileWriter(file); + fw.write(Translator.toScript(currentTestSuite)); + fw.flush(); + fw.close(); + } catch (IOException ex) { + ex.printStackTrace(); + } + + view.paneStatus.setProgressIndetermined(false); + + } + + private void OnSaveAsTest() { + + } + + private void OnOpenTest() { + + JFileChooser jfc = new JFileChooser(); + jfc.setDialogTitle("Open existing gUnit test suite"); + jfc.setDialogType(JFileChooser.OPEN_DIALOG); + if( jfc.showOpenDialog(view) != JFileChooser.APPROVE_OPTION ) return; + + final File testSuiteFile = jfc.getSelectedFile(); + try { + testSuiteFileName = testSuiteFile.getCanonicalPath(); + } catch (IOException e) { + throw new RuntimeException(e); + } + + view.paneStatus.setProgressIndetermined(true); + + currentTestSuite = Translator.toTestSuite(testSuiteFile, new ArrayList()); + view.listRules.initialize(currentTestSuite); + view.paneStatus.setText(currentTestSuite.getGrammarName()); + view.tabEditors.setSelectedIndex(0); + + view.paneStatus.setProgressIndetermined(false); + } + + private void OnSelectRule(Rule rule) { + if(rule == null) throw new IllegalArgumentException("Null"); + this.view.paneEditor.OnLoadRule(rule); + this.view.paneStatus.setRule(rule.getName()); + + // run result + this.runner.OnShowRuleResult(rule); + } + + private void OnSelectTextPane() { + Thread worker = new Thread () { + @Override + public void run() { + view.paneStatus.setProgressIndetermined(true); + view.txtEditor.setText( + Translator.toScript(currentTestSuite)); + view.paneStatus.setProgressIndetermined(false); + } + }; + + worker.start(); + } + + private void OnRunTest() { + if(currentTestSuite == null) return; + adapter.run(testSuiteFileName, currentTestSuite); + view.tabEditors.addTab("Test Result", ImageFactory.FILE16, runner.getView()); + runner.OnShowSuiteResult(currentTestSuite); + } + + private void initToolbar() { + view.toolbar.add(new JButton(new CreateAction())); + view.toolbar.add(new JButton(new OpenAction())); + view.toolbar.add(new JButton(new SaveAction())); + view.toolbar.add(new JButton(new RunAction())); + + } + + public Object getModel() { + throw new UnsupportedOperationException("Not supported yet."); + } + + public Component getView() { + return view; + } + + + /** Event handler for rule list selection. */ + private class RuleListSelectionListener implements ListSelectionListener { + public void valueChanged(ListSelectionEvent event) { + if(event.getValueIsAdjusting()) return; + final JList list = (JList) event.getSource(); + final Rule rule = (Rule) list.getSelectedValue(); + if(rule != null) OnSelectRule(rule); + } + } + + + /** Event handler for switching between editor view and script view. */ + public class TabChangeListener implements ChangeListener { + public void stateChanged(ChangeEvent evt) { + if(view.tabEditors.getSelectedIndex() == 1) { + OnSelectTextPane(); + } + } + + } + + + + + + + + + + /** Create test suite action. */ + private class CreateAction extends AbstractAction { + public CreateAction() { + super("Create", ImageFactory.ADDFILE); + putValue(SHORT_DESCRIPTION, "Create a test suite from an ANTLR grammar"); + } + public void actionPerformed(ActionEvent e) { + OnCreateTest(); + } + } + + + /** Save test suite action. */ + private class SaveAction extends AbstractAction { + public SaveAction() { + super("Save", ImageFactory.SAVE); + putValue(SHORT_DESCRIPTION, "Save the test suite"); + } + public void actionPerformed(ActionEvent e) { + OnSaveTest(); + } + } + + /** Save as test suite action. */ + private class SaveAsAction extends AbstractAction { + public SaveAsAction() { + super("Save as", ImageFactory.SAVEAS); + putValue(SHORT_DESCRIPTION, "Save a copy"); + } + public void actionPerformed(ActionEvent e) { + OnSaveAsTest(); + } + } + + /** Open test suite action. */ + private class OpenAction extends AbstractAction { + public OpenAction() { + super("Open", ImageFactory.OPEN); + putValue(SHORT_DESCRIPTION, "Open an existing test suite"); + putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke( + KeyEvent.VK_O, InputEvent.CTRL_MASK)); + } + public void actionPerformed(ActionEvent e) { + OnOpenTest(); + } + } + + /** Run test suite action. */ + private class RunAction extends AbstractAction { + public RunAction() { + super("Run", ImageFactory.NEXT); + putValue(SHORT_DESCRIPTION, "Run the current test suite"); + putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke( + KeyEvent.VK_R, InputEvent.CTRL_MASK)); + } + public void actionPerformed(ActionEvent e) { + OnRunTest(); + } + } +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/WorkSpaceView.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/WorkSpaceView.java new file mode 100644 index 0000000..1216fd9 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/WorkSpaceView.java @@ -0,0 +1,76 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package org.antlr.gunit.swingui; + +import org.antlr.gunit.swingui.images.ImageFactory; +import java.awt.*; +import javax.swing.*; + +/** + * + * @author scai + */ +public class WorkSpaceView extends JFrame { + + protected JSplitPane splitListClient ; + protected JTabbedPane tabEditors; + protected JPanel paneToolBar; + protected StatusBarController paneStatus; + protected TestCaseEditController paneEditor; + protected JToolBar toolbar; + protected JTextArea txtEditor; + protected RuleListController listRules; + protected JMenuBar menuBar; + protected JScrollPane scrollCode; + protected JPanel resultPane; + + protected JButton btnOpenGrammar; + + public WorkSpaceView() { + super(); + } + + protected void initComponents() { + + this.paneEditor = new TestCaseEditController(this); + this.paneStatus = new StatusBarController(); + + this.toolbar = new JToolBar(); + this.toolbar.setBorder(BorderFactory.createEmptyBorder()); + this.toolbar.setFloatable(false); + this.toolbar.setBorder(BorderFactory.createEmptyBorder()); + + this.txtEditor = new JTextArea(); + this.txtEditor.setLineWrap(false); + this.txtEditor.setFont(new Font("Courier New", Font.PLAIN, 13)); + this.scrollCode = new JScrollPane(txtEditor, + JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, + JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + this.scrollCode.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY)); + + this.tabEditors = new JTabbedPane(); + this.tabEditors.addTab("Case Editor", ImageFactory.TEXTFILE16, this.paneEditor.getView()); + this.tabEditors.addTab("Script Source", ImageFactory.WINDOW16, this.scrollCode); + + this.listRules = new RuleListController(); + + this.splitListClient = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT, + this.listRules.getView(), this.tabEditors); + this.splitListClient.setResizeWeight(0.4); + this.splitListClient.setBorder(BorderFactory.createEmptyBorder()); + + + + this.getContentPane().add(this.toolbar, BorderLayout.NORTH); + this.getContentPane().add(this.splitListClient, BorderLayout.CENTER); + this.getContentPane().add(this.paneStatus.getView(), BorderLayout.SOUTH); + + // self + this.setPreferredSize(new Dimension(900, 500)); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/gunit.stg b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/gunit.stg new file mode 100644 index 0000000..c17178c --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/gunit.stg @@ -0,0 +1,19 @@ +group gunit; + +gUnitFile(testSuite) ::= <; + + +>> + +testGroup() ::= << + + +//------------------- +: + + + + +>> + +testCase() ::= " " \ No newline at end of file diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/ImageFactory.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/ImageFactory.java new file mode 100644 index 0000000..a896b22 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/ImageFactory.java @@ -0,0 +1,59 @@ +package org.antlr.gunit.swingui.images; + +import javax.swing.ImageIcon; + +public class ImageFactory { + public static final ImageIcon ACCEPT = new ImageIcon( + ImageFactory.class.getResource("accept.png")); + public static final ImageIcon ADD = new ImageIcon( + ImageFactory.class.getResource("add.png")); + public static final ImageIcon DELETE = new ImageIcon( + ImageFactory.class.getResource("delete24.png")); + public static final ImageIcon HELP = new ImageIcon( + ImageFactory.class.getResource("help24.png")); + public static final ImageIcon NEXT = new ImageIcon( + ImageFactory.class.getResource("next24.png")); + public static final ImageIcon REDO = new ImageIcon( + ImageFactory.class.getResource("redo24.png")); + public static final ImageIcon UNDO = new ImageIcon( + ImageFactory.class.getResource("undo24.png")); + public static final ImageIcon REFRESH = new ImageIcon( + ImageFactory.class.getResource("refresh24.png")); + public static final ImageIcon TEXTFILE = new ImageIcon( + ImageFactory.class.getResource("textfile24.png")); + public static final ImageIcon ADDFILE = new ImageIcon( + ImageFactory.class.getResource("addfile24.png")); + + public static final ImageIcon TEXTFILE16 = new ImageIcon( + ImageFactory.class.getResource("textfile16.png")); + public static final ImageIcon WINDOW16 = new ImageIcon( + ImageFactory.class.getResource("windowb16.png")); + public static final ImageIcon FAV16 = new ImageIcon( + ImageFactory.class.getResource("favb16.png")); + public static final ImageIcon SAVE = new ImageIcon( + ImageFactory.class.getResource("floppy24.png")); + public static final ImageIcon SAVEAS = new ImageIcon( + ImageFactory.class.getResource("saveas24.png")); + + public static final ImageIcon OPEN = new ImageIcon( + ImageFactory.class.getResource("folder24.png")); + public static final ImageIcon FILESEARCH = new ImageIcon( + ImageFactory.class.getResource("filesearch24.png")); + public static final ImageIcon EDIT16 = new ImageIcon( + ImageFactory.class.getResource("edit16.png")); + public static final ImageIcon FILE16 = new ImageIcon( + ImageFactory.class.getResource("file16.png")); + + + public static final ImageIcon RUN_PASS = new ImageIcon( + ImageFactory.class.getResource("runpass.png")); + public static final ImageIcon RUN_FAIL = new ImageIcon( + ImageFactory.class.getResource("runfail.png")); + public static final ImageIcon TESTSUITE = new ImageIcon( + ImageFactory.class.getResource("testsuite.png")); + public static final ImageIcon TESTGROUP = new ImageIcon( + ImageFactory.class.getResource("testgroup.png")); + public static final ImageIcon TESTGROUPX = new ImageIcon( + ImageFactory.class.getResource("testgroupx.png")); + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/accept.png b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/accept.png new file mode 100644 index 0000000000000000000000000000000000000000..e7d91e5ebbb16083402bf14f3106f4edc72770f2 GIT binary patch literal 1516 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 Wd!1T#%5awe0000DZyGA}nTFf;)y z{P+L>0$52zK~#90rISra(_t9EfA9Z4QCo8iGh8aQKx;x);?z#2gb{+Ico8WjAuQ<7 zp+iZBg1*0$F6qHeCSpP%MA9vz&`>ifUCR7S!A?QyV_ZA~VwiB#vj17A!DC2+VSLW-HAzY%+ErKRXCHVa5fs)A0Ho3{GPY1}MGv zRQ9eJp|()O8MmA2Q}QzmdQ&@c(7}=uoGx&=q4OgQjWQ(NlrO_;1e+76G$vY7%*jXb zjTrGy`~=-D=<0>RVa7umCvLrvovTMy0Pd6tvl1D3+IA!tK^#F{A+9Aet{Ld+1G|Iq zK!D@7pUI9tccueS6b^edQ_`d-o|r&4(l^TJltRxNm~`^V=cl5kUA|rKV!y7S=1k0) zIeYFUMVbA?M||Ub-**-k>C-eSYuaV^dhm*1F(ki+7Dh<$4=~!}3r*?h^#^GbDlONa z$S>jG6@k~U-Hp|`?dGjA+Uw`TypMi^k=cune*d~~@dJ!0^1n9MVUGX+002ovPDHLk FV1gQyP;USL literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/favb16.png b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/favb16.png new file mode 100644 index 0000000000000000000000000000000000000000..3c252de678458b0e257f35686dbe5f7fa5b758f0 GIT binary patch literal 842 zcmV-Q1GW5#P)DZyIWIRaFf?oH z3_Ab-0-H%hK~#90rIXuB6mb;CzrUH;buZ5Ds(W!=+x0@5W?F6}i3UDI4?zS`4_iS# zMGt|LMg)?9Z$%>g0UC%Jm&H1R1Fr3A3J9w_~tiLworx~=EiTyD40qik?;>-EcaLC&{t=H*O3~Lrj+t%NHdml5Y_i*}xy~l|PKL0v^Z;T^ zgRbz{S=FJ)tR}^GzpX{YzUZd->hasmJO==(%60^68^WdaH=%0_Fj-SbC!T`EB63(8 zG*(1$zz>xz=Zra~>ba4j>XE3}1fY=vfM03myCTVmMfxELGcX#K!1D<(gn-dSNKp=g zumRqkk35G3N5I*Yd6 zc^cif#@5#~GCzrK6JNxdY<1Y#$^&Bxfe;UpVj5IUfr3Jk(DS!=AAk_T9Iy8^1Zrwn zB`Lvb_d*s4)>mW@mWSD0iqgseyv4?=;YwmU0BEj&)nHby*z=4)@+ZWNb&L*7V0=tK zOi;mFIk;UG7z{M*@F4%dA^DENu)QS&20wfRG8&c_qvEchw`&DZyIWIRaFf?oH z3_Ab-1lmbNK~#90wUt?DoK+Nnzw`h9EdR{ppP9@|mL|3?skYH7T|iMwaVe-!L9L)D z3ZjVOg1)#yZBX1r5J6u=!KI>Au@8c%xQphYsf}%Itxc<$Nhg_Pl3D-lULVBLv}gYASGsVcS zp~s4n_8N4jdbqXs^oxlm&!xQMHUiHhT^Pja8m0VOYt6<><;x&srhJf@m$&KJBYAT8 zn7;pjoGZdbahnUGHcP%GM1rxcYiPGl#qQ{*IeCDc-|lC2Mpc7Ajn(VH zwz&$!a}B=RRcGr*!+(Mg3APN$?WW1&*}hJvaLP)OnWb2E3Ojo~soY9h)w`)2*o50U z8NC zFq}f9j4+Mg9KvtCO)M^;W(eFSI;h}e3ncQL_->m1ffJF4!QLOfDSY|S)}eA;?Ep3( z68M3H>7FH~6&qmR$YZ$mFNoQb*eRE|4JZ%cMmKh*3e*6qezlJcaT?{I;T9xA1~IR;G)% z(~aZA@um;(W$^G%9?hgl3#SzVlq8x#4=E>!f(4MJd_842YyTN zyf_l=BHg)wWFkVXGQrOyd)d8nCTz6yolkzK$B&w#*Y1_eftT%+*^@sZOSUITHm?wA zqTCwF_fet7YnZg$JZ54cVHjbmSYm8Xk@AG=xgPgE_P&1cFXp_5cH?vULlLf?n+{+9 zb=y?4UWt)AVIA#;#mtmYuV?UD2}0jQharY;Q=2NYW8?q_i|+PNaqZ#oqXYmqJgdK+ z7-vWuF>BF^b=diHsEjvh`wIw-6H%%_=tl@$53kWAnSf}_LK}Rx@g4o%k-Vb?%fyIS ztSl_(iuNsD#{Q9yX?qTd>{4u}fLI*_p-m8&c!7nT&eGeTM&QCbE|i{Q3VJ(9*eUb+ z{=qZA(j45ki%j2{IN21{Qib2grZLP2X52xdX{?Se77p}bCu7T^G0r%qAZpX;qNj8^Ywz!w=-|uAm)(J|*IKv zVVUG2Da^x}a^%u~;szPeidRC#YD5sUtKn1Ng=m~l%r;>yV1?Ff(3;B-G0_?k5aD4F zp5CxYdw(kc7`j%{qBvV=@=7smSd=zw()A;95`MsGCg6u literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/file16.png b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/file16.png new file mode 100644 index 0000000000000000000000000000000000000000..2e13243507e96b707156e99f4721a17822488c60 GIT binary patch literal 831 zcmV-F1Hk-=P)DZyIWIUbFf=oW z9Blvq0+2~WK~#90rIS5~TvZr`pYPmr?!7a!JCn`oY7FZ}12HHffoLHKEChpvc7lz4 zh!U_9QdmT^FpVUQR+d@>Od$%Q1QCJ=8U@9lurOKU-zFh5vvYsWoIk7RPMxoNi|^s( zeR(CN#NC|UDZYF|R_c}`Sua0^k;B1D*9F$x_stBN*cfgUg$q~xWBY^k`zC})jwgU zV_Y@H*HcpTD3#Ic_waF6R8xO8MxFsG1(21jmrIWW-!ZFxB!(OzN2EY>2bC{y@ad;G z{^C&{dF+0iOOqH0|A(kKn3ucp%~kAV3@Cza2(}?bkLaAD=untQRe8MU(pwi(`yapu z9#Xl%PByWVEf7O=mgp>qkSRm(5j&Z1>^)WCSSN0(_O}N29$&Q*t@!fj~tl;w2q%|Ub~9U4ccgoR+uc1s~JYMXsOAt z6x}ZS_OGzmSI@tCTpr!o!e_%@hwFRx{X(p7G8)Yojar&2AemyJ-(|2oV6dx%*@$i_ zgWdw~0Y^1}QhZod@#I&Ze6uPfS{to*Y3Lk(#Y8_P_Q#|KWQxK-RRxS;d2S2mPRPqK z@LEi~pCTWJz?QY#7DXo}_IStMB&-96v}P#6o3DS6hH|%a{ug5)IZq@<@FM^K002ov JPDHLkV1j9DZyIWIUbFf=oW z9Blvq1;$B4K~#90wUupbm1h~pfA{k|=bWeKoSqi?a{59++5(fdINcaiQ=`UZ(-{n! zpvh)7U7f~#kYL;*egG50T;fcebIYb-A-YgC%gkIPu!07P2&I9tmbO4!w9p>P={fCr zd(QK6-?tx7pi<)}ujERuq@bX3_{%AT3;%Fzak#j@S{*Xu_n>nMXY`k6;*B6@mfSE1}Z=+2kEDo zxp0(|?;fU5QYg&z8$N)3o%up^D@rpAD zJp6Kw!~6F!f1`*N5J-NZe0J=7LkG)xpnM*VMW}24_zq^QuQN3@!HvubLf$a#i8RfX z1&neYr{E%$!YP#SJRhY%YEX)26yoIG$HakMZ)&v^@DpJ~6y4?ec3wFD5q>{>hS~IG z@{Y#T9n@J1e4-)6w>Dp+vo=e~)%eoDv@8r$A+#nyAr(Icjsmkw0a0R;h2;G&Ui&T+ z(^WjQ%HZ*PAH@?9M$#@vMrYVJILg7%3SRrdIFGE$;mSB0w|tm#v4rySTpGDXD&?4W z?!7hixn0rcoyXRuR&M9WmlAX)Esjh|hEin`VaY=s^-QiwaJ*m8^Scs%>X~9g5@MS= zASmNx|IWpcS(IdO*PD9!F2KXHJ3mWhr~U5d;&jwoynfnYU^+*-P$cVnq)Q&v4J+B$ z-NA*oXV`lrPw$f%a-K%|0hx4xLeWKO&fMv%am(N!{JoDgR?<}$=9K}5p_GRmGKkqB zBBn*i3X%6+Ry5TUTfc_B@hIbS5$q5cD00~Xfh#pIzAOM~Z)}Nc22z@#R1v8?a;`_g z3vhf%$yY=w!ql#`scLG#^I*|$uBy%o>oBdPQY!Gy)s2N;PQebU2s5aydWU& zdSuH1I$}|qj1#d#NY6tcK`69V2qh^MeS8ls49sN}7+!j8IJLlhpjkwcab4yep9N2% zqZTdeSJ1Miid;dFotz>T4bf5~@Ra}!T4@vrt?`ys&}LqI=hBttdxqLmtXtpA^giw?eaAFb7SDAd9mjTPj%hT=|3LDPPS0@ zfi`Ly>WC+7^7-Ot_Iz2y_WV{CmjKQcxV~D<$-V7wm~X2m=o`Gs$WS%N2xte?BCW{~ z&pm4LwFeFnTJ;3$vJo!zzeBvHhj6r#RV{I@&z3qsZ{g;5aT_q}lZ~5#d z7a$6Yf#U4kBAqkmPOx>;YPRqXvUy0&Ep;j8ZtrI@}lkCGDCk@!ADY{Z2P0gT!FIVaP_LoAKn^6`nOWk23mnrOY=Z-P{Wv#`kw1^9$EmJ^ICJ+2s0sz z-iE&(>f7oT(lj^QWadf?4W=lRAXjn`fN}FK5C5z0j?9;y7MnFZ3(TT9s5Aq@pkx{Z znKYJ!?^~hpv(ZXBT*?*kJh{&baR@<^fI46jcx!jBURV|Y@WPYAj)VzzynZ|S{#`%V zCQRSuL%_X;$rTO9VlgBFp)~@~yL)e@8NfdQ6H@H-PXUqc00000NkvXXu0mjfoe>!< literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/floppy24.png b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/floppy24.png new file mode 100644 index 0000000000000000000000000000000000000000..1a46470095d7714d641f485c17c9f6e42170a755 GIT binary patch literal 1586 zcmV-22F>}2P)DZyIWIIXFf@5y zqtyTa1%pXMK~#90wU*m&Tt^+pKXY!o-d$&Ry|LrFjRS6Js0<-#qBcUorD~+A5Q@@1 zp-Pn+RN)6o1&tK`0g(DYOd*J-mj@J(N<^a4M4}OnqSTGs+6qp$A&%E})|a)to4sGo znRCwY;9!v&9`loaPc!rV=y#dlj8IB(KTW%@>VWb87M^6KP0-?%O1;&xtO1|} zK-a0du6@fe#F~^&E}5LS=jKj(|4T>wcZyzp^^dwzB5In(o@_R^7sMlNZ7pAqMnk>L z%|XIp6W4XAR3!O)m142Hp3UYzwr%H1G}`ou>-(R0u3vcT&7b;P0LPF2X}gr_`;A89 z1z`W+;7$ex+Ue*>(A5v~Mn=BFo;^D`ckUuHGY!gR$mO6=fN~j% z#SLFy--tv?kKg^_0$+~r;MfnJ<;i{f(RBSe*Yl3R-7a!nc~%HiM@NKe6%vV^DCKbJ z(gc=G`1h+< zXSjXaLrROm!JQ1JU!RNT<)~EFXf)Pw-8*!5d(`SR-a9|RLw)_UY-?s|t-uG@ zrm*Yvt4eqm?9G5R&qN^)Pe}50D)GAU+lu}rh$-qDx z^XWAfW>-1<*rR;4yNlIIfj7^eM@sqQx8Hi@x0?|FluFJ-sZ<(ECTEDnEHq8y;fHsT z%lV{IB_fd)VzE}5o8t%(U}|!a^jwy`4-FEFgb4;LCT{)<*L91UCO+75(R{z=d0y~r zI=y^oXy^d~0YNObodXAUV44=b?;@o{N(VFtdZ2*fyixQk#Y%=>@4!u(2x{+@Q4flMMTegYCq99;lVV+{KKz2PtJm%Bc36Thd!y1vuHcI&#ng$2< ze+|<#yM5n#ZVSLL^nJRncZGr>s&{NG1+}_OYIYS(hyK1^T2+<3K?(HHWK6E_y!p&6b&~j#lN~3|V z{3W~5cwf`BX#`73sj?8lMWDH^7tIy&kAvY z+C1O?nNsR|z+WuWcnu{A2z)7}I(6#h&CMetCq=H1*L~qxnkSA6AzsmS-O+^jg@E6` k{m#$rEr9!B_x)G#Z%J&t$&&7h9smFU07*qoM6N<$f{{)4kpKVy literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/folder24.png b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/folder24.png new file mode 100644 index 0000000000000000000000000000000000000000..179998b97842725659f025842ffca11033bc6f41 GIT binary patch literal 1345 zcmV-H1-|-;P)DZyIWIIXFf@5y zqtyTa1d>TaK~#90y_QR8T~!!`zkS~Kk(--Dle9?`(@LAx*Tm{XMG+iG1#v8jjuZq1 zi)gHZ6CbmJB5f6M(UVnN|y8n^sh&QMKEHFc}Ye@yoks z02d?nJ7el&%}yQW%*;FIbeSRZ0T| z>KD%Q>xsEv)|TX+ViiA**dC_hmO?@793JM@(9cF24qw_`p5F7mtZk^k@A5!(YHZ8) z-Opl_Mu9ejEf7BA7A&4!*wM9}&#FUOu~N|)9MY&(VXPV;@cHTp57+A4^V~z?>zNsf zsZ@*v(RyKD;%WfBuK07LP{b%$5Z57WL*j!7&=iHOw@qs|&A8gwcnM7lLG>VYz>UaM z7#@V-s`>a06Y66lBgS2-Dkhd{-iP<^RG-%Xf>@q&n+<}s^H@V8koq7)NPN^RVSLLt z2oFLV>30Y^HZt&uy)wRE#44NYy1VemU@^lqC1erxhWE_WxO_J!h-d{~;6`qI}S-9>rVKjhZjgsj_28NeW(q$sQOS`_t>T1I38r(R^Rt-SW z3Egh87`Tm@iX6xZi1C~n_F4l~n<7ki;Dr^WFj1`nQMy9=(j19@36V4qX@;(YRfJeT zFQO*kjMi_p=k{3joW=~v2uP2>bC^HVrnKovq*}oD9nvJmSvrQZbetpxMFm}hQW;7W zFm*^0sI?$X`J#4#c@1FkBE3x$*(KL;z;8hk;nUeuZr5PY-$n3NiTR3S-a-EF%NcZj1NoqE9V)Xkhd{wDLMj#3>1 z)d2d@B?PD%=sIW`DE&;hSc5pFmBGpNcOXF~nOt%^K7$)-0ZxPr5dT|H6=FfCmZA#@FSkXXL z^4qF?|1X1^8l0~~F8~BbOr03|VK@7clu1V0>7>Lx8^0$Jnu@(VhoOUIfN6kb=I65S zA07z3>ekj9MOPU#FL{!7IR~Z-p!|W>%xg~}HNeb;Q zw7Ouo^T}}oP!;wWaPDte1P~`QwV38gUEMrb6~yr}St2P9=FL)T9;Bvk3l-MODhculDB!tnr^i?T2ECfFQbBe;Eq7c4%P{td9{v!dvYfp&# zq~IL^p&~d5d?y4yDhf7`?)~83{SvMs_^<1lFa5s&IFLc4VbT@}00000NkvXXu0mjf D8PQwR literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/help24.png b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/help24.png new file mode 100644 index 0000000000000000000000000000000000000000..fcdfb43ca5899f678d6733ee88839a21d01894ac GIT binary patch literal 1471 zcmV;w1wi_VP)DZyIWIIXFf@5y zqtyTa1rSL@K~#90wUupbon;xvfA@1g&vTyB^V0U%!PeT%tN{&iPTdq@5D*M3Yc?Qg zqQ7F&Y!6U?PdxaGPXVx-10D3V|`%+7ULkwtHz$yK{O@ z&+~TQ_vHr@LP;xrkn8hx{eSuYuRHgpM1&8sybo0!@IR>G_qVBQy9<1|SmbMX+~hp^ z5(ly4rH*672z$Txyo@h5ua=AG&`*`tukqbdnTL8-53Vh(_!xyk7doG(UB5{E;sjS3 zjw?Bh#HinD_{D>NclG}Xuzy(f^;X!sa{anZ{dataQf(zP&LfQr*!fG4E}(5j^THY4 zdh0A_nov*GDTVsRjsy0@e+4}AB~@Lsisy%h@4sc`@Gdxe0Q36O=+-2zlaXhTJ4mIQ zpnMIa36tlic)c!MPC2LWZrgdtTv!rt zx$$1?_+K#-C&_{1R|fgy1N+&qaW&VEJ<8ybEmU89g3|i0vTFOEAPh<4j7~1}h8`8I zFvzxtZ&v;y2WzX`-rfI^&vcg~TCeO!d635teEdH8dP7eCYAXY@a2n$AcX(&)ET7+f zoN!=0^QT5}fhN!%wSr|Ple;Qft_7yvbx`hNd(Sm%$R8 zdlNc``3_v}_;`SLAr3$X_&T7fH4eH&v0+g}%Hwm9ugP1pm=vr5EUdclN1`h)GFVNq z^$AX#hc|j|X5)^(V5Uycnixld0-j&M3kqmY0}6qjMG=X|pr1A|%3&->3R;6|&eHka zy|i<9rJ?X|-^1PCdK`ChA8$YN1LEc!s#3!bBD67x%5b6(`H!)80R|+VZ>XXHabRS6_INsY3^eQAoK;5S1yG%7j6PIGD{GAc=LnvB*IzYILTR z-OwNTsIZE44ksDbWH@W-(T?+f{yxFvD5fXG6)S|r3dKq{g)oFp%xsb~lNvmc!-->Z z5y0X70z`p-teLwb=i2s;bzL5QR7Q$Eo^yyb)cl;!e*H0+KEuVCllaP_gCe9U zrqyO_uFd2^f;e~DIrc627d?GX*R8&%{&7QJcQmx3hF7Ve!U(j7r#$Fik9H~P#eboc zkL$$5a}C~{o?~pbNheMcXWiC4N9FL60Dxa_jduBd@U!cCE3ECSQL0u5q6mTjN!y46 zr$Ul;o9V_p<1-B=nr*T)L!5p1$0PE~_v$Tq51t$@?D4gJyjJSsqt!CCQjstW0Y#eU zG~zfcH6B2S}$*g6uEW3n7) zthM5v72&BpBl7A}I?Dn8cHXEewW|K2^3(&MHi$4F;*3}~CL$x&viB#)WOP}94+8u@ Z>faBeeGLQPBNG4s002ovPDHLkV1mTtwk-ev literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/next24.png b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/next24.png new file mode 100644 index 0000000000000000000000000000000000000000..1258622cdd808c4f3804384e56209585bc2fd1b3 GIT binary patch literal 1507 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 P00000NkvXXu0mjf=HplM literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/refresh24.png b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/refresh24.png new file mode 100644 index 0000000000000000000000000000000000000000..2683e981492167c691c3df19496a9cf3efc71ee5 GIT binary patch literal 1546 zcmV+l2KD)gP)DZyIWI9VFEBK= z`id|B00mk}L_t(|oVAvFY}E%9$3N%yx{u!5%e_D!v{3iZLfFbF3fWX|tgt(~z zOt!kP5gAPky6lgcSpCbOE}2d@7GBGMKQ!C2WE#*6-5@%Ft}9(AFjk=S7TVJLzV~07ERo1S=Jh&+=9U=-}es^a8P$> z`TqgPH3jmJBnA0xsw?%t%AQrskIbhUR2ZB*#>Mf8L)D76{j`dsNMlfCs4YnOe4fxCY~ z_HvGA6FsVfD0 zfJVWCkniXY9g#<5g`2A%&QFB) zVD8^g3^2SnRwa$;8m4R(Q=ie`(*On$mKu)9OfX5zF)=V8M0K~0$ivc3z!RCSM6$cL zjhL0d44SxF%ad+ih!Z#|YS`C?$t@BW5&5VB8?WdVX_o|>94;CsLBtw#iFj!YF z_zb;qfzfCdD`HT?rQ^CUVR%M{5C?E&v#jAZ*7HTOvOx~%etrFYfQcain4!=ViIQ2E zz)4ursQN2_qX-+z=iQd_8MhOgHY{4PXgP4=k1aK7NgOh=O;*^==8N+>n-Za~tZ;xr_-EXl4bT>DWgsFTDnK`vPt?Y+wDMGJ7m#w~lG zyo|w4-LA8Qh*uBDRm!MmkT4SvV1Hy?1L*Tw{h+9U7YmGLyP295$8s!c4VP?ohWeye zBF``M8NDq1ax*c+bPQ%IB_wo+5TR5qjeY{~u?W=-kRaf`&wrP+bWk;B@crGyOgnn+ z^vq7#EaM2>3zsw#NtzU^9@pE;crW|f6mj1Dp8)-(*5$`CYlbFwIQR3&zAf}F?dC^c zeVjin*lQneIo+GRQ0NuYB(pe1u90U|$2v|N8NzeDSLo*ITnZq-JvQ<--#^~R(UV8s zJ2L#n^|e}!4Xd}(JO3??O&nvkmP37u+gjIh=FAu;hfhL+{rWQvWv-hnTjaQf+2Q-a z(^Pnt2zNzHXID?pa&zMy>sj31i4ifVy8(xW4|Cw<{ZvcUJ*3&Bzfpf~z{7G64aS(| ztiGb2JSqlNR^stkJQ`b@>P*m@YUg6^5~YbUUf9@6l&$)EEy0Iw@}~kG5YfG#Y?3}n w5V97ZJ5iP)4CC-ugjaQ!`XBUt)^E#y0H0%Yg?L^~(EtDd07*qoM6N<$g3V^?mjD0& literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/runfail.png b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/runfail.png new file mode 100755 index 0000000000000000000000000000000000000000..186f17ffa0a23db843b6f00dbaf1e3a66a7aa2e3 GIT binary patch literal 869 zcmV-r1DgDaP)DZyIWILYFf_s9 z#IOJW0=7v+K~#90rISl&RA(H;f8Tx0y)%k?Eq# zTcA`9$(R-yzm4cFkn8PXV4#PhAMF5cYXEupF*`H}ldqY)JI36m-7GqPi>bxy;ip6N zU%F1ZVHhP9$~19u4vwL3>6EC!HlwhJ_{DRSQ()-8KJse^*>Lq1x+cLgvHuw1-N^4K z1$M?l)3yE&UQn>ia!kC^40(5+iDO5Q^$L0#f$t&T%}~B_8R@zR$Hvq(l$5JFfC$zS z_^4`~QaME5x*d%Kk`R&@6-NYdiZm>A!yuFprPAyGLYVXB76>afOv`4)j_<(IP^~6u ztAU<%SUEaM*AF`pNsJdp#8MVJfHu6T&y-P0BbO#rE?*>i_Kew6Cz(8b28lowC$NYR zwvFqy@PoM6DX{@}OS83I1APVTgzVt&<{m0yuBPo8Jmk zA9Zrh_kG-wuj0PJTV1(y`9~07r$$=iq0}Fn=>L)@EVo vq*4;cNh1!T#}fIMf=B0+n*Qh!UpnXaJlRo`e$hCf00000NkvXXu0mjf%87w~ literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/runpass.png b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/runpass.png new file mode 100755 index 0000000000000000000000000000000000000000..34c38935d240345dab9254cf9723e5c501cceaab GIT binary patch literal 904 zcmV;319$w1P)g7)?YiUath+mN=FB;BerM+EqIPM^ zi+Vr4n-{+4doNx@g#WUPpxnt^On1Hne&DJ>NVtcre!+-AJQdr{b2mWtaK9be6fP1=BLUeGB>4c^Q`W zD!`tvw+=mc_e0|^Zh0+sq5T=xts;i)&}i8>wvg8f{80X$`Ja}sZEtsTz#o@kk?`{O zOlIBa^P7*vz6wqeC=QCEusqW@=9pB%vQ&?e}#`SD_zm->$}`s4(b-$IFpA+B!Hu7~yjr~qA6*&mL?sI)3HZHK1q&~iOy zXX@;ZKgE$pk8-IoP6&;pmO@KLkgn_i2m=Jt-S)dRiRm~@Px%b^TWQ^UgPSFjbB9jS z^bF2Sogkvb>4~PWG?z|bJg}0$bK8lERl%}72BHN%-g}n(Z#y~u$eU#189tf*h+9^b zY-}CLNE)>rLWJp+1fJcg+-}td{EkXBHiO|bIPvUh0`a-DG{L*SoT7itT@0oRRLyzZ znhSpcQ~=+SZ|i!4Y-j^L(X|{a9;Iy0GV9*tY7b1W<@;yBKjh&(4FV%!k`5Pn&GEU_kWC=!l7-RXAIwrd-%=Z*oVWkkN? eANm*I|LPA0dzip$zt~~`0000DZyIWIIXFf@5y zqtyTa1*b_wK~#90wU%3Kl*bjvfAd{-*WS zQx&OEsUmo28?`~A>U%3yRpQblZLU%)^5CLE8$b#urj$6CV3!)U1mj(s^=0kY?8Up@ z{jSr8Qme%6Bjjupu{5BqM@6|Nu>gr_Y&Nz)>jojrkEYBB6oge1U{ToRS52MQp z#=_s(v#XI^k3T@9ww8_U?Y%Wd@b|zQFTC)p`Za*-x&w-$fBlIkwsG*_<80l!ffFar zGBHtM;nLsu?3DvdpBluJ27#71W!E5ea*)((2bdrEE3f_TG+&N1a_BqXX3zFs6jgoB zaov4uCOeLOJP@erYi>3~sRYsJ2Bb`I?%W7_pZqFf{}ICR9)gXH7(W}t6;;@JjLwJJ zm?%d{PkhWHJGxPA$^8vY90$j7oY}Pu#>Z2ytgPfeym)bfTenXgMJe2~cbWX+i?2Tx zjYiKt{q(LtsRWtKGUv~qqqQ|eS64g9{X3fs01y!*~ezgf!wpir_br$HgDd<^0G%VS->#r2!|V}sfi$j zpRv&y(y1l3Js2l!1PS(bCd@?s?Stt1tq73U-<4%mSY0ji^H2`j75f21kz`lBQ{ml}e_w zvQnh3u9{-8gp`s@W`WVsafXLS85>J5d2^avE{iGz#Z{AVD9BPN&uY00a81*7cOBqP zyOu1=c1+VI5;0H|$+fHhWN7Fd<#LW_RKYML`TT8$hex?SnZiM0gsLzd6U(;oJed`! zYnoq}MM9HOszL~SejgJzCP>ewc=p+y?B2ZvP$?A3SXPM(7ZRL0J%VGoeB*16pzAt9 z2tXR(igkef-#;Q0g^fPHro|c>m`^XTn3-eWzJ9*4rH7%Rt8{jD(9sdW?+>$gZ!3Z7 zASXY#z|?$(uJ$IX0s+j5)$Tan+ALZtQLdO*HBH?Ui$+9Kb1gHIv$V9e(9^Sp!NDO0 z2HxZNiL(@o6{Li07PddyOMQKeo5>m4z7(N376D|R?YK?r06~9Md%&;tZ`yP}UKyMf zlW;f$0;Z>@$meq`eV!o__GoDV!+>B=!7yqmWLHrX=<9t5UDw+@&wXwkK-1Lis;ahD z2dXLEHt|VVEt@1K7f@8_>g>R=Jq8B;#F1A|F!a$S(&++1cvuxlamk{(Du|}52*LNB zfBqMZcX=S7Y?(G!M*l&jtBVp2>6tXgjvd3cEgE7`q?9C6896DX(6mXa&R@oJJi70z zeNK%mE;YwD}_5!;^)8&eBnjgzyH;k>v=zxQa%Ix(Wh&_M2Z{& z&$ey()>}VZ+kEig>tZ>VRXySQ6jvM;LcFA^s-+0=Qvq+h``%B?b%1*j_xxA!FLe#A U4wl+e_y7O^07*qoM6N<$f*m&u`v3p{ literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/testgroup.png b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/testgroup.png new file mode 100755 index 0000000000000000000000000000000000000000..65aaaa7e9199df6bdaacb932524889c65128a7d3 GIT binary patch literal 808 zcmV+@1K0eCP)DZyIWIIXFf@5y zqtyTa0(nV9K~#90rIWpD)NmY!pX746BzLuzvo8p~P+w5Nq6KjfQ73V7adZ%O{{=yG z5CuUH9UTNg7rUq+V%5Qlq9R&fYpbn#=D5q{l1nbh{qp-c6bpj5^b4Qy`wSmGkEWDj zIj1k{8!!N#UevZIibu?q&Q`7H>`1%GHs5QXnYboT507H2g1%;OSdQyOYF@yDlUG&# z2cRjXn7U$4t{&UFzq(;NjtyDl^5XX7*SU}0!?l~Ojg<;J`<$peKQDhxf8tQJ>dco) zn(j6e&j65`S*(tZQ5jhW@dBo8vt`%D^_#{T$5!8nodj1YHk3_ZS#9QF4f+716F)WLcTqEEG16x(6*I;Zv9sr)swW&}^u0 zk?(?Rk|%Y1w@Xj1rPWBta+@@67egs}L6lWnKo}sb=92=|>6bm3Fv;%nm4T6|=BIoH6An6g-TUw(NYly6dmM08V zL22NJQ1=!SbRkKpOT~!`HSex5_sC4Ih;W-bl$^ku#O{cwrc{&RPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FZT01FZU(%pXi00007bV*G`2iXG! z052%6GW{|D00N0gL_t(I%f-{nZwvtd$MNsX&TRLk)lRjIpi(7B+EhavN^lSw4Hqur zz#kw^&Ll|0g@}-dhy)id97H5u6+wyDqR|qqR;^vTv$ONsd5?of;tvqNKj3rv{@{O4 z0C;?Yr7`mM~N>fAkWf$%Tj(P{bK z+}^e8l|?;d(%@M|p5M4PIWeZ*U$7+Aoy)OeR>sOsO-0|{jWehynW=^bK`d4rRRV~F zq^xxHlI!RMdzxfA&C*rf3m5m6cegeLh>`|kgb*=DcQQwn*qrG~` zz_C29H-fhk&Uwv&qM&jW!l#D0DT(IN)QJ=pPruLdp*zd9kAjiw3^VF zhsHN>X9x_3TW79Ql>nRo)6h-Tt(4mQK%qEsn}i6BEnv37mkrQ&9%LOp?S)ATypUl4 z5x{cenxO|Xx@uvY27&#NTq9)Dpfp2$GbAfu&4Y&$=r*H4$df;S<71SnLfNzh0=s|^ zI~A!*Md*;EEU^@k`6@`dLDrEo#4`D zuC2;4J~YC#v_kJ00000NkvXX Hu0mjf9}`)j literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/testsuite.png b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/images/testsuite.png new file mode 100755 index 0000000000000000000000000000000000000000..a85fe14f3d7fbdf4337696835f69736d12712919 GIT binary patch literal 936 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 literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/ITestCaseInput.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/ITestCaseInput.java new file mode 100644 index 0000000..b247280 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/ITestCaseInput.java @@ -0,0 +1,7 @@ +package org.antlr.gunit.swingui.model; + +public interface ITestCaseInput { + + public void setScript(String script); + public String getScript(); +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/ITestCaseOutput.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/ITestCaseOutput.java new file mode 100644 index 0000000..c0da191 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/ITestCaseOutput.java @@ -0,0 +1,15 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package org.antlr.gunit.swingui.model; + +/** + * + * @author scai + */ +public interface ITestCaseOutput { + public void setScript(String script); + public String getScript() ; +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/Rule.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/Rule.java new file mode 100644 index 0000000..4e1e435 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/Rule.java @@ -0,0 +1,47 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package org.antlr.gunit.swingui.model; + +import java.util.ArrayList; +import java.util.List; +import javax.swing.DefaultListModel; + +/** + * ANTLR v3 Rule Information. + * @author scai + */ +public class Rule extends DefaultListModel { + + private String name; + + public Rule(String name) { + this.name = name; + } + + public String getName() { return name; } + + public boolean getNotEmpty() { + return !this.isEmpty(); + } + + @Override + public String toString() { + return this.name; + } + + public void addTestCase(TestCase newItem) { + this.addElement(newItem); + } + + // for string template + public List getTestCases() { + List result = new ArrayList(); + for(int i=0; i[%s]", input.getScript(), output.getScript()); + } + + public void setInput(ITestCaseInput in) { + this.input = in; + } + + public void setOutput(ITestCaseOutput out) { + this.output = out; + } + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseInputFile.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseInputFile.java new file mode 100644 index 0000000..108e31d --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseInputFile.java @@ -0,0 +1,35 @@ + +package org.antlr.gunit.swingui.model; + +import javax.swing.JComponent; +import javax.swing.JLabel; + +/** + * + * @author scai + */ +public class TestCaseInputFile implements ITestCaseInput { + + private String fileName; + + public TestCaseInputFile(String file) { + this.fileName = file; + } + + public String getLabel() { + return "FILE:" + fileName; + } + + public void setScript(String script) { + this.fileName = script; + } + + @Override + public String toString() { + return fileName; + } + + public String getScript() { + return this.fileName; + } +} \ No newline at end of file diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseInputMultiString.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseInputMultiString.java new file mode 100644 index 0000000..ee383ee --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseInputMultiString.java @@ -0,0 +1,30 @@ + +package org.antlr.gunit.swingui.model; + + +/** + * + * @author scai + */ +public class TestCaseInputMultiString implements ITestCaseInput { + + private String script; + + public TestCaseInputMultiString(String text) { + this.script = text; + } + + @Override + public String toString() { + return "<<" + script + ">>"; + } + + public void setScript(String script) { + this.script = script; + } + + public String getScript() { + return this.script; + } + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseInputString.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseInputString.java new file mode 100644 index 0000000..2a1a1be --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseInputString.java @@ -0,0 +1,32 @@ + +package org.antlr.gunit.swingui.model; + +/** + * + * @author scai + */ +public class TestCaseInputString implements ITestCaseInput { + + private String script; + + public TestCaseInputString(String text) { + this.script = text; + } + + @Override + public String toString() { + return '"' + script + '"'; + } + + + + public void setScript(String script) { + this.script = script; + } + + public String getScript() { + return this.script; + } + + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseOutputAST.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseOutputAST.java new file mode 100644 index 0000000..7cc4548 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseOutputAST.java @@ -0,0 +1,30 @@ + +package org.antlr.gunit.swingui.model; + +/** + * + * @author scai + */ +public class TestCaseOutputAST implements ITestCaseOutput { + + private String treeString; + + public TestCaseOutputAST(String script) { + this.treeString = script; + } + + public void setScript(String script) { + this.treeString = script; + } + + public String getScript() { + return this.treeString; + } + + + @Override + public String toString() { + return String.format(" -> %s", treeString); + } + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseOutputResult.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseOutputResult.java new file mode 100644 index 0000000..2ec8253 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseOutputResult.java @@ -0,0 +1,36 @@ + +package org.antlr.gunit.swingui.model; + +/** + * + * @author scai + */ +public class TestCaseOutputResult implements ITestCaseOutput { + + public static String OK = "OK"; + public static String FAIL = "FAIL"; + + private boolean success ; + + public TestCaseOutputResult(boolean result) { + this.success = result; + } + + @Override + public String toString() { + return getScript(); + } + + public String getScript() { + return success ? OK : FAIL; + } + + public void setScript(boolean value) { + this.success = value; + } + + public void setScript(String script) { + success = Boolean.parseBoolean(script); + } + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseOutputReturn.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseOutputReturn.java new file mode 100644 index 0000000..ae3cef2 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseOutputReturn.java @@ -0,0 +1,22 @@ +package org.antlr.gunit.swingui.model; + +public class TestCaseOutputReturn implements ITestCaseOutput { + private String script; + + public TestCaseOutputReturn(String text) { + this.script = text; + } + + @Override + public String toString() { + return String.format(" returns [%s]", script); + } + + public void setScript(String script) { + this.script = script; + } + + public String getScript() { + return this.script; + } +} \ No newline at end of file diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseOutputStdOut.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseOutputStdOut.java new file mode 100644 index 0000000..74ce689 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestCaseOutputStdOut.java @@ -0,0 +1,26 @@ +package org.antlr.gunit.swingui.model; + +/** + * + * @author scai + */ +public class TestCaseOutputStdOut implements ITestCaseOutput { + private String script; + + public TestCaseOutputStdOut(String text) { + this.script = text; + } + + @Override + public String toString() { + return String.format(" -> \"%s\"", script); + } + + public void setScript(String script) { + this.script = script; + } + + public String getScript() { + return this.script; + } +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestSuite.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestSuite.java new file mode 100644 index 0000000..09feb66 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/model/TestSuite.java @@ -0,0 +1,86 @@ +package org.antlr.gunit.swingui.model; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import org.antlr.runtime.CommonTokenStream; + +public class TestSuite { + + private List rules = new ArrayList(); + private String grammarName = ""; + private String grammarDir = ""; + private CommonTokenStream tokens; + + private static final String TEST_SUITE_EXT = ".gunit"; + private static final String GRAMMAR_EXT = ".g"; + + public TestSuite() {} + + public TestSuite(File grammarFile, List rules) { + final String grammarFileName = grammarFile.getName(); + grammarName = grammarFileName.substring( + 0, grammarFileName.lastIndexOf(".")); + + grammarDir = grammarFile.getParent(); + } + + /* Get the gUnit test suite file name. */ + public String getTestSuiteFileName() { + return grammarDir + File.separator + grammarName + TEST_SUITE_EXT; + } + + /* Get the ANTLR grammar file name. */ + public String getGrammarFileName() { + return grammarDir + File.separator + grammarName + GRAMMAR_EXT; + } + + public void addRule(Rule currentRule) { + if(currentRule == null) throw new IllegalArgumentException("Null rule"); + rules.add(currentRule); + } + + // test rule name + public boolean hasRule(Rule rule) { + for(Rule r: rules) { + if(r.getName().equals(rule.getName())) { + return true; + } + } + return false; + } + + public int getRuleCount() { + return rules.size(); + } + + public void setRules(List newRules) { + rules.clear(); + rules.addAll(newRules); + } + + /* GETTERS AND SETTERS */ + + public void setGrammarName(String name) { grammarName = name;} + + public String getGrammarName() { return grammarName; } + + public Rule getRule(int index) { return rules.get(index); } + + public CommonTokenStream getTokens() { return tokens; } + + public void setTokens(CommonTokenStream ts) { tokens = ts; } + + public Rule getRule(String name) { + for(Rule rule: rules) { + if(rule.getName().equals(name)) { + return rule; + } + } + return null; + } + + // only for stringtemplate use + public List getRulesForStringTemplate() {return rules;} + +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/ANTLRv3.g b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/ANTLRv3.g new file mode 100644 index 0000000..5657072 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/ANTLRv3.g @@ -0,0 +1,619 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2007 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** ANTLR v3 grammar written in ANTLR v3 with AST construction */ +grammar ANTLRv3; + +options { + output=AST; + ASTLabelType=CommonTree; +} + +tokens { + DOC_COMMENT; + PARSER; + LEXER; + RULE; + BLOCK; + OPTIONAL; + CLOSURE; + POSITIVE_CLOSURE; + SYNPRED; + RANGE; + CHAR_RANGE; + EPSILON; + ALT; + EOR; + EOB; + EOA; // end of alt + ID; + ARG; + ARGLIST; + RET; + LEXER_GRAMMAR; + PARSER_GRAMMAR; + TREE_GRAMMAR; + COMBINED_GRAMMAR; + INITACTION; + LABEL; // $x used in rewrite rules + TEMPLATE; + SCOPE='scope'; + SEMPRED; + GATED_SEMPRED; // {p}? => + SYN_SEMPRED; // (...) => it's a manually-specified synpred converted to sempred + BACKTRACK_SEMPRED; // auto backtracking mode syn pred converted to sempred + FRAGMENT='fragment'; + TREE_BEGIN='^('; + ROOT='^'; + BANG='!'; + RANGE='..'; + REWRITE='->'; +} + +@members { + int gtype; + public List rules; +} + +@header { +package org.antlr.gunit.swingui.parsers; + +import java.util.List; +} + +@lexer::header { +package org.antlr.gunit.swingui.parsers; +} + + +grammarDef + : DOC_COMMENT? + ( 'lexer' {gtype=LEXER_GRAMMAR;} // pure lexer + | 'parser' {gtype=PARSER_GRAMMAR;} // pure parser + | 'tree' {gtype=TREE_GRAMMAR;} // a tree parser + | {gtype=COMBINED_GRAMMAR;} // merged parser/lexer + ) + g='grammar' id ';' optionsSpec? tokensSpec? attrScope* action* + rule+ + EOF + -> ^( {adaptor.create(gtype,$g)} + id DOC_COMMENT? optionsSpec? tokensSpec? attrScope* action* rule+ + ) + ; + +tokensSpec + : TOKENS tokenSpec+ '}' -> ^(TOKENS tokenSpec+) + ; + +tokenSpec + : TOKEN_REF + ( '=' (lit=STRING_LITERAL|lit=CHAR_LITERAL) -> ^('=' TOKEN_REF $lit) + | -> TOKEN_REF + ) + ';' + ; + +attrScope + : 'scope' id ACTION -> ^('scope' id ACTION) + ; + +/** Match stuff like @parser::members {int i;} */ +action + : '@' (actionScopeName '::')? id ACTION -> ^('@' actionScopeName? id ACTION) + ; + +/** Sometimes the scope names will collide with keywords; allow them as + * ids for action scopes. + */ +actionScopeName + : id + | l='lexer' -> ID[$l] + | p='parser' -> ID[$p] + ; + +optionsSpec + : OPTIONS (option ';')+ '}' -> ^(OPTIONS option+) + ; + +option + : id '=' optionValue -> ^('=' id optionValue) + ; + +optionValue + : id + | STRING_LITERAL + | CHAR_LITERAL + | INT + | s='*' -> STRING_LITERAL[$s] // used for k=* + ; + +rule +scope { + String name; +} +@after{ + this.rules.add($rule::name); +} + : DOC_COMMENT? + ( modifier=('protected'|'public'|'private'|'fragment') )? + id {$rule::name = $id.text;} + '!'? + ( arg=ARG_ACTION )? + ( 'returns' rt=ARG_ACTION )? + throwsSpec? optionsSpec? ruleScopeSpec? ruleAction* + ':' altList ';' + exceptionGroup? + -> ^( RULE id {modifier!=null?adaptor.create(modifier):null} ^(ARG $arg)? ^(RET $rt)? + optionsSpec? ruleScopeSpec? ruleAction* + altList + exceptionGroup? + EOR["EOR"] + ) + ; + +/** Match stuff like @init {int i;} */ +ruleAction + : '@' id ACTION -> ^('@' id ACTION) + ; + +throwsSpec + : 'throws' id ( ',' id )* -> ^('throws' id+) + ; + +ruleScopeSpec + : 'scope' ACTION -> ^('scope' ACTION) + | 'scope' id (',' id)* ';' -> ^('scope' id+) + | 'scope' ACTION + 'scope' id (',' id)* ';' + -> ^('scope' ACTION id+ ) + ; + +block + : lp='(' + ( (opts=optionsSpec)? ':' )? + a1=alternative rewrite ( '|' a2=alternative rewrite )* + rp=')' + -> ^( BLOCK[$lp,"BLOCK"] optionsSpec? (alternative rewrite?)+ EOB[$rp,"EOB"] ) + ; + +altList +@init { + // must create root manually as it's used by invoked rules in real antlr tool. + // leave here to demonstrate use of {...} in rewrite rule + // it's really BLOCK[firstToken,"BLOCK"]; set line/col to previous ( or : token. + CommonTree blkRoot = (CommonTree)adaptor.create(BLOCK,input.LT(-1),"BLOCK"); +} + : a1=alternative rewrite ( '|' a2=alternative rewrite )* + -> ^( {blkRoot} (alternative rewrite?)+ EOB["EOB"] ) + ; + +alternative +@init { + Token firstToken = input.LT(1); + Token prevToken = input.LT(-1); // either : or | I think +} + : element+ -> ^(ALT[firstToken,"ALT"] element+ EOA["EOA"]) + | -> ^(ALT[prevToken,"ALT"] EPSILON[prevToken,"EPSILON"] EOA["EOA"]) + ; + +exceptionGroup + : ( exceptionHandler )+ ( finallyClause )? + | finallyClause + ; + +exceptionHandler + : 'catch' ARG_ACTION ACTION -> ^('catch' ARG_ACTION ACTION) + ; + +finallyClause + : 'finally' ACTION -> ^('finally' ACTION) + ; + +element + : elementNoOptionSpec + ; + +elementNoOptionSpec + : id (labelOp='='|labelOp='+=') atom + ( ebnfSuffix -> ^( ebnfSuffix ^(BLOCK["BLOCK"] ^(ALT["ALT"] ^($labelOp id atom) EOA["EOA"]) EOB["EOB"])) + | -> ^($labelOp id atom) + ) + | id (labelOp='='|labelOp='+=') block + ( ebnfSuffix -> ^( ebnfSuffix ^(BLOCK["BLOCK"] ^(ALT["ALT"] ^($labelOp id block) EOA["EOA"]) EOB["EOB"])) + | -> ^($labelOp id block) + ) + | atom + ( ebnfSuffix -> ^( ebnfSuffix ^(BLOCK["BLOCK"] ^(ALT["ALT"] atom EOA["EOA"]) EOB["EOB"]) ) + | -> atom + ) + | ebnf + | ACTION + | SEMPRED ( '=>' -> GATED_SEMPRED | -> SEMPRED ) + | treeSpec + ( ebnfSuffix -> ^( ebnfSuffix ^(BLOCK["BLOCK"] ^(ALT["ALT"] treeSpec EOA["EOA"]) EOB["EOB"]) ) + | -> treeSpec + ) + ; + +atom: range ( (op='^'|op='!') -> ^($op range) | -> range ) + | terminal + | notSet ( (op='^'|op='!') -> ^($op notSet) | -> notSet ) + | RULE_REF ( arg=ARG_ACTION )? ( (op='^'|op='!') )? + -> {$arg!=null&&op!=null}? ^($op RULE_REF $arg) + -> {$arg!=null}? ^(RULE_REF $arg) + -> {$op!=null}? ^($op RULE_REF) + -> RULE_REF + ; + +notSet + : '~' + ( notTerminal -> ^('~' notTerminal) + | block -> ^('~' block) + ) + ; + +treeSpec + : '^(' element ( element )+ ')' -> ^(TREE_BEGIN element+) + ; + +/** Matches ENBF blocks (and token sets via block rule) */ +ebnf +@init { + Token firstToken = input.LT(1); +} +@after { + $ebnf.tree.getToken().setLine(firstToken.getLine()); + $ebnf.tree.getToken().setCharPositionInLine(firstToken.getCharPositionInLine()); +} + : block + ( op='?' -> ^(OPTIONAL[op] block) + | op='*' -> ^(CLOSURE[op] block) + | op='+' -> ^(POSITIVE_CLOSURE[op] block) + | '=>' // syntactic predicate + -> {gtype==COMBINED_GRAMMAR && + Character.isUpperCase($rule::name.charAt(0))}? + // if lexer rule in combined, leave as pred for lexer + ^(SYNPRED["=>"] block) + // in real antlr tool, text for SYN_SEMPRED is predname + -> SYN_SEMPRED + | -> block + ) + ; + +range! + : c1=CHAR_LITERAL RANGE c2=CHAR_LITERAL -> ^(CHAR_RANGE[$c1,".."] $c1 $c2) + ; + +terminal + : ( CHAR_LITERAL -> CHAR_LITERAL + // Args are only valid for lexer rules + | TOKEN_REF + ( ARG_ACTION -> ^(TOKEN_REF ARG_ACTION) + | -> TOKEN_REF + ) + | STRING_LITERAL -> STRING_LITERAL + | '.' -> '.' + ) + ( '^' -> ^('^' $terminal) + | '!' -> ^('!' $terminal) + )? + ; + +notTerminal + : CHAR_LITERAL + | TOKEN_REF + | STRING_LITERAL + ; + +ebnfSuffix +@init { + Token op = input.LT(1); +} + : '?' -> OPTIONAL[op] + | '*' -> CLOSURE[op] + | '+' -> POSITIVE_CLOSURE[op] + ; + + + +// R E W R I T E S Y N T A X + +rewrite +@init { + Token firstToken = input.LT(1); +} + : (rew+='->' preds+=SEMPRED predicated+=rewrite_alternative)* + rew2='->' last=rewrite_alternative + -> ^($rew $preds $predicated)* ^($rew2 $last) + | + ; + +rewrite_alternative +options {backtrack=true;} + : rewrite_template + | rewrite_tree_alternative + | /* empty rewrite */ -> ^(ALT["ALT"] EPSILON["EPSILON"] EOA["EOA"]) + ; + +rewrite_tree_block + : lp='(' rewrite_tree_alternative ')' + -> ^(BLOCK[$lp,"BLOCK"] rewrite_tree_alternative EOB[$lp,"EOB"]) + ; + +rewrite_tree_alternative + : rewrite_tree_element+ -> ^(ALT["ALT"] rewrite_tree_element+ EOA["EOA"]) + ; + +rewrite_tree_element + : rewrite_tree_atom + | rewrite_tree_atom ebnfSuffix + -> ^( ebnfSuffix ^(BLOCK["BLOCK"] ^(ALT["ALT"] rewrite_tree_atom EOA["EOA"]) EOB["EOB"])) + | rewrite_tree + ( ebnfSuffix + -> ^(ebnfSuffix ^(BLOCK["BLOCK"] ^(ALT["ALT"] rewrite_tree EOA["EOA"]) EOB["EOB"])) + | -> rewrite_tree + ) + | rewrite_tree_ebnf + ; + +rewrite_tree_atom + : CHAR_LITERAL + | TOKEN_REF ARG_ACTION? -> ^(TOKEN_REF ARG_ACTION?) // for imaginary nodes + | RULE_REF + | STRING_LITERAL + | d='$' id -> LABEL[$d,$id.text] // reference to a label in a rewrite rule + | ACTION + ; + +rewrite_tree_ebnf +@init { + Token firstToken = input.LT(1); +} +@after { + $rewrite_tree_ebnf.tree.getToken().setLine(firstToken.getLine()); + $rewrite_tree_ebnf.tree.getToken().setCharPositionInLine(firstToken.getCharPositionInLine()); +} + : rewrite_tree_block ebnfSuffix -> ^(ebnfSuffix rewrite_tree_block) + ; + +rewrite_tree + : '^(' rewrite_tree_atom rewrite_tree_element* ')' + -> ^(TREE_BEGIN rewrite_tree_atom rewrite_tree_element* ) + ; + +/** Build a tree for a template rewrite: + ^(TEMPLATE (ID|ACTION) ^(ARGLIST ^(ARG ID ACTION) ...) ) + where ARGLIST is always there even if no args exist. + ID can be "template" keyword. If first child is ACTION then it's + an indirect template ref + + -> foo(a={...}, b={...}) + -> ({string-e})(a={...}, b={...}) // e evaluates to template name + -> {%{$ID.text}} // create literal template from string (done in ActionTranslator) + -> {st-expr} // st-expr evaluates to ST + */ +rewrite_template + : // -> template(a={...},...) "..." inline template + id lp='(' rewrite_template_args ')' + ( str=DOUBLE_QUOTE_STRING_LITERAL | str=DOUBLE_ANGLE_STRING_LITERAL ) + -> ^(TEMPLATE[$lp,"TEMPLATE"] id rewrite_template_args $str) + + | // -> foo(a={...}, ...) + rewrite_template_ref + + | // -> ({expr})(a={...}, ...) + rewrite_indirect_template_head + + | // -> {...} + ACTION + ; + +/** -> foo(a={...}, ...) */ +rewrite_template_ref + : id lp='(' rewrite_template_args ')' + -> ^(TEMPLATE[$lp,"TEMPLATE"] id rewrite_template_args) + ; + +/** -> ({expr})(a={...}, ...) */ +rewrite_indirect_template_head + : lp='(' ACTION ')' '(' rewrite_template_args ')' + -> ^(TEMPLATE[$lp,"TEMPLATE"] ACTION rewrite_template_args) + ; + +rewrite_template_args + : rewrite_template_arg (',' rewrite_template_arg)* + -> ^(ARGLIST rewrite_template_arg+) + | -> ARGLIST + ; + +rewrite_template_arg + : id '=' ACTION -> ^(ARG[$id.start] id ACTION) + ; + +id : TOKEN_REF -> ID[$TOKEN_REF] + | RULE_REF -> ID[$RULE_REF] + ; + +// L E X I C A L R U L E S + +SL_COMMENT + : '//' + ( ' $ANTLR ' SRC // src directive + | ~('\r'|'\n')* + ) + '\r'? '\n' + {$channel=HIDDEN;} + ; + +ML_COMMENT + : '/*' {if (input.LA(1)=='*') $type=DOC_COMMENT; else $channel=HIDDEN;} .* '*/' + ; + +CHAR_LITERAL + : '\'' LITERAL_CHAR '\'' + ; + +STRING_LITERAL + : '\'' LITERAL_CHAR LITERAL_CHAR* '\'' + ; + +fragment +LITERAL_CHAR + : ESC + | ~('\''|'\\') + ; + +DOUBLE_QUOTE_STRING_LITERAL + : '"' (ESC | ~('\\'|'"'))* '"' + ; + +DOUBLE_ANGLE_STRING_LITERAL + : '<<' .* '>>' + ; + +fragment +ESC : '\\' + ( 'n' + | 'r' + | 't' + | 'b' + | 'f' + | '"' + | '\'' + | '\\' + | '>' + | 'u' XDIGIT XDIGIT XDIGIT XDIGIT + | . // unknown, leave as it is + ) + ; + +fragment +XDIGIT : + '0' .. '9' + | 'a' .. 'f' + | 'A' .. 'F' + ; + +INT : '0'..'9'+ + ; + +ARG_ACTION + : NESTED_ARG_ACTION + ; + +fragment +NESTED_ARG_ACTION : + '[' + ( options {greedy=false; k=1;} + : NESTED_ARG_ACTION + | ACTION_STRING_LITERAL + | ACTION_CHAR_LITERAL + | . + )* + ']' + {setText(getText().substring(1, getText().length()-1));} + ; + +ACTION + : NESTED_ACTION ( '?' {$type = SEMPRED;} )? + ; + +fragment +NESTED_ACTION : + '{' + ( options {greedy=false; k=2;} + : NESTED_ACTION + | SL_COMMENT + | ML_COMMENT + | ACTION_STRING_LITERAL + | ACTION_CHAR_LITERAL + | . + )* + '}' + ; + +fragment +ACTION_CHAR_LITERAL + : '\'' (ACTION_ESC|~('\\'|'\'')) '\'' + ; + +fragment +ACTION_STRING_LITERAL + : '"' (ACTION_ESC|~('\\'|'"'))* '"' + ; + +fragment +ACTION_ESC + : '\\\'' + | '\\' '"' // ANTLR doesn't like: '\\"' + | '\\' ~('\''|'"') + ; + +TOKEN_REF + : 'A'..'Z' ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* + ; + +RULE_REF + : 'a'..'z' ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* + ; + +/** Match the start of an options section. Don't allow normal + * action processing on the {...} as it's not a action. + */ +OPTIONS + : 'options' WS_LOOP '{' + ; + +TOKENS + : 'tokens' WS_LOOP '{' + ; + +/** Reset the file and line information; useful when the grammar + * has been generated so that errors are shown relative to the + * original file like the old C preprocessor used to do. + */ +fragment +SRC : 'src' ' ' file=ACTION_STRING_LITERAL ' ' line=INT + ; + +WS : ( ' ' + | '\t' + | '\r'? '\n' + )+ + {$channel=HIDDEN;} + ; + +fragment +WS_LOOP + : ( WS + | SL_COMMENT + | ML_COMMENT + )* + ; + + diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/ANTLRv3.tokens b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/ANTLRv3.tokens new file mode 100644 index 0000000..81466b2 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/ANTLRv3.tokens @@ -0,0 +1,126 @@ +CLOSURE=10 +DOUBLE_QUOTE_STRING_LITERAL=50 +TEMPLATE=30 +ARGLIST=22 +PARSER_GRAMMAR=25 +BANG=39 +T__73=73 +GATED_SEMPRED=33 +T__72=72 +T__70=70 +ACTION_ESC=62 +LEXER=6 +STRING_LITERAL=43 +OPTIONAL=9 +ACTION_CHAR_LITERAL=60 +RANGE=13 +DOUBLE_ANGLE_STRING_LITERAL=51 +T__89=89 +WS=64 +T__79=79 +T__66=66 +ARG_ACTION=48 +TOKEN_REF=42 +WS_LOOP=63 +T__92=92 +T__88=88 +XDIGIT=57 +TREE_BEGIN=37 +T__90=90 +INITACTION=28 +POSITIVE_CLOSURE=11 +T__91=91 +T__85=85 +CHAR_RANGE=14 +RET=23 +LITERAL_CHAR=55 +DOC_COMMENT=4 +T__93=93 +T__86=86 +NESTED_ACTION=61 +T__80=80 +T__69=69 +RULE=7 +T__65=65 +LABEL=29 +SYN_SEMPRED=34 +BACKTRACK_SEMPRED=35 +REWRITE=40 +T__67=67 +TREE_GRAMMAR=26 +T__87=87 +BLOCK=8 +T__74=74 +ALT=16 +T__68=68 +CHAR_LITERAL=44 +FRAGMENT=36 +INT=47 +PARSER=5 +EPSILON=15 +SCOPE=31 +TOKENS=41 +OPTIONS=46 +EOR=17 +ML_COMMENT=54 +SRC=52 +SL_COMMENT=53 +ID=20 +COMBINED_GRAMMAR=27 +EOB=18 +T__78=78 +SYNPRED=12 +EOA=19 +ACTION=45 +T__77=77 +ESC=56 +RULE_REF=49 +T__84=84 +SEMPRED=32 +NESTED_ARG_ACTION=58 +ROOT=38 +T__75=75 +ACTION_STRING_LITERAL=59 +ARG=21 +T__76=76 +T__82=82 +T__81=81 +T__83=83 +T__71=71 +LEXER_GRAMMAR=24 +'finally'=86 +'->'=40 +'returns'=78 +'..'=13 +'=>'=88 +'$'=93 +';'=69 +'?'=90 +'tree'=67 +','=81 +'fragment'=36 +'='=71 +'^'=38 +'scope'=31 +'::'=73 +'private'=77 +'|'=83 +'lexer'=65 +')'=84 +'grammar'=68 +'@'=72 +'protected'=75 +'!'=39 +'+='=87 +'('=82 +'catch'=85 +'^('=37 +'throws'=80 +':'=79 +'.'=92 +'*'=74 +'parser'=66 +'+'=91 +'}'=70 +'~'=89 +'public'=76 diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/ANTLRv3Lexer.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/ANTLRv3Lexer.java new file mode 100644 index 0000000..8c443b0 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/ANTLRv3Lexer.java @@ -0,0 +1,3638 @@ +// $ANTLR 3.1.1 /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g 2009-01-26 16:22:51 + +package org.antlr.gunit.swingui.parsers; + + +import org.antlr.runtime.*; +import java.util.Stack; +import java.util.List; +import java.util.ArrayList; + +public class ANTLRv3Lexer extends Lexer { + public static final int CLOSURE=10; + public static final int DOUBLE_QUOTE_STRING_LITERAL=50; + public static final int TEMPLATE=30; + public static final int ARGLIST=22; + public static final int PARSER_GRAMMAR=25; + public static final int BANG=39; + public static final int T__73=73; + public static final int GATED_SEMPRED=33; + public static final int T__72=72; + public static final int T__70=70; + public static final int ACTION_ESC=62; + public static final int LEXER=6; + public static final int STRING_LITERAL=43; + public static final int OPTIONAL=9; + public static final int ACTION_CHAR_LITERAL=60; + public static final int DOUBLE_ANGLE_STRING_LITERAL=51; + public static final int RANGE=13; + public static final int T__89=89; + public static final int WS=64; + public static final int T__79=79; + public static final int ARG_ACTION=48; + public static final int T__66=66; + public static final int TOKEN_REF=42; + public static final int T__92=92; + public static final int WS_LOOP=63; + public static final int T__88=88; + public static final int XDIGIT=57; + public static final int TREE_BEGIN=37; + public static final int T__90=90; + public static final int INITACTION=28; + public static final int POSITIVE_CLOSURE=11; + public static final int T__91=91; + public static final int T__85=85; + public static final int RET=23; + public static final int CHAR_RANGE=14; + public static final int LITERAL_CHAR=55; + public static final int DOC_COMMENT=4; + public static final int T__93=93; + public static final int NESTED_ACTION=61; + public static final int T__86=86; + public static final int T__80=80; + public static final int T__69=69; + public static final int RULE=7; + public static final int T__65=65; + public static final int LABEL=29; + public static final int SYN_SEMPRED=34; + public static final int BACKTRACK_SEMPRED=35; + public static final int REWRITE=40; + public static final int T__67=67; + public static final int TREE_GRAMMAR=26; + public static final int T__87=87; + public static final int BLOCK=8; + public static final int T__74=74; + public static final int ALT=16; + public static final int T__68=68; + public static final int CHAR_LITERAL=44; + public static final int FRAGMENT=36; + public static final int INT=47; + public static final int PARSER=5; + public static final int EPSILON=15; + public static final int SCOPE=31; + public static final int TOKENS=41; + public static final int OPTIONS=46; + public static final int EOR=17; + public static final int ML_COMMENT=54; + public static final int SRC=52; + public static final int SL_COMMENT=53; + public static final int ID=20; + public static final int COMBINED_GRAMMAR=27; + public static final int EOB=18; + public static final int T__78=78; + public static final int SYNPRED=12; + public static final int EOA=19; + public static final int ACTION=45; + public static final int T__77=77; + public static final int ESC=56; + public static final int RULE_REF=49; + public static final int T__84=84; + public static final int SEMPRED=32; + public static final int NESTED_ARG_ACTION=58; + public static final int ROOT=38; + public static final int T__75=75; + public static final int ACTION_STRING_LITERAL=59; + public static final int ARG=21; + public static final int EOF=-1; + public static final int T__76=76; + public static final int T__82=82; + public static final int T__81=81; + public static final int T__83=83; + public static final int T__71=71; + public static final int LEXER_GRAMMAR=24; + + // delegates + // delegators + + public ANTLRv3Lexer() {;} + public ANTLRv3Lexer(CharStream input) { + this(input, new RecognizerSharedState()); + } + public ANTLRv3Lexer(CharStream input, RecognizerSharedState state) { + super(input,state); + + } + public String getGrammarFileName() { return "/Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g"; } + + // $ANTLR start "SCOPE" + public final void mSCOPE() throws RecognitionException { + try { + int _type = SCOPE; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:7:7: ( 'scope' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:7:9: 'scope' + { + match("scope"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "SCOPE" + + // $ANTLR start "FRAGMENT" + public final void mFRAGMENT() throws RecognitionException { + try { + int _type = FRAGMENT; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:8:10: ( 'fragment' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:8:12: 'fragment' + { + match("fragment"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "FRAGMENT" + + // $ANTLR start "TREE_BEGIN" + public final void mTREE_BEGIN() throws RecognitionException { + try { + int _type = TREE_BEGIN; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:9:12: ( '^(' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:9:14: '^(' + { + match("^("); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "TREE_BEGIN" + + // $ANTLR start "ROOT" + public final void mROOT() throws RecognitionException { + try { + int _type = ROOT; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:10:6: ( '^' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:10:8: '^' + { + match('^'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "ROOT" + + // $ANTLR start "BANG" + public final void mBANG() throws RecognitionException { + try { + int _type = BANG; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:11:6: ( '!' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:11:8: '!' + { + match('!'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "BANG" + + // $ANTLR start "RANGE" + public final void mRANGE() throws RecognitionException { + try { + int _type = RANGE; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:12:7: ( '..' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:12:9: '..' + { + match(".."); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "RANGE" + + // $ANTLR start "REWRITE" + public final void mREWRITE() throws RecognitionException { + try { + int _type = REWRITE; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:13:9: ( '->' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:13:11: '->' + { + match("->"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "REWRITE" + + // $ANTLR start "T__65" + public final void mT__65() throws RecognitionException { + try { + int _type = T__65; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:14:7: ( 'lexer' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:14:9: 'lexer' + { + match("lexer"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__65" + + // $ANTLR start "T__66" + public final void mT__66() throws RecognitionException { + try { + int _type = T__66; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:15:7: ( 'parser' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:15:9: 'parser' + { + match("parser"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__66" + + // $ANTLR start "T__67" + public final void mT__67() throws RecognitionException { + try { + int _type = T__67; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:16:7: ( 'tree' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:16:9: 'tree' + { + match("tree"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__67" + + // $ANTLR start "T__68" + public final void mT__68() throws RecognitionException { + try { + int _type = T__68; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:17:7: ( 'grammar' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:17:9: 'grammar' + { + match("grammar"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__68" + + // $ANTLR start "T__69" + public final void mT__69() throws RecognitionException { + try { + int _type = T__69; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:18:7: ( ';' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:18:9: ';' + { + match(';'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__69" + + // $ANTLR start "T__70" + public final void mT__70() throws RecognitionException { + try { + int _type = T__70; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:19:7: ( '}' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:19:9: '}' + { + match('}'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__70" + + // $ANTLR start "T__71" + public final void mT__71() throws RecognitionException { + try { + int _type = T__71; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:20:7: ( '=' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:20:9: '=' + { + match('='); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__71" + + // $ANTLR start "T__72" + public final void mT__72() throws RecognitionException { + try { + int _type = T__72; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:21:7: ( '@' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:21:9: '@' + { + match('@'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__72" + + // $ANTLR start "T__73" + public final void mT__73() throws RecognitionException { + try { + int _type = T__73; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:22:7: ( '::' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:22:9: '::' + { + match("::"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__73" + + // $ANTLR start "T__74" + public final void mT__74() throws RecognitionException { + try { + int _type = T__74; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:23:7: ( '*' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:23:9: '*' + { + match('*'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__74" + + // $ANTLR start "T__75" + public final void mT__75() throws RecognitionException { + try { + int _type = T__75; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:24:7: ( 'protected' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:24:9: 'protected' + { + match("protected"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__75" + + // $ANTLR start "T__76" + public final void mT__76() throws RecognitionException { + try { + int _type = T__76; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:25:7: ( 'public' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:25:9: 'public' + { + match("public"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__76" + + // $ANTLR start "T__77" + public final void mT__77() throws RecognitionException { + try { + int _type = T__77; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:26:7: ( 'private' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:26:9: 'private' + { + match("private"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__77" + + // $ANTLR start "T__78" + public final void mT__78() throws RecognitionException { + try { + int _type = T__78; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:27:7: ( 'returns' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:27:9: 'returns' + { + match("returns"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__78" + + // $ANTLR start "T__79" + public final void mT__79() throws RecognitionException { + try { + int _type = T__79; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:28:7: ( ':' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:28:9: ':' + { + match(':'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__79" + + // $ANTLR start "T__80" + public final void mT__80() throws RecognitionException { + try { + int _type = T__80; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:29:7: ( 'throws' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:29:9: 'throws' + { + match("throws"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__80" + + // $ANTLR start "T__81" + public final void mT__81() throws RecognitionException { + try { + int _type = T__81; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:30:7: ( ',' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:30:9: ',' + { + match(','); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__81" + + // $ANTLR start "T__82" + public final void mT__82() throws RecognitionException { + try { + int _type = T__82; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:31:7: ( '(' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:31:9: '(' + { + match('('); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__82" + + // $ANTLR start "T__83" + public final void mT__83() throws RecognitionException { + try { + int _type = T__83; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:32:7: ( '|' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:32:9: '|' + { + match('|'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__83" + + // $ANTLR start "T__84" + public final void mT__84() throws RecognitionException { + try { + int _type = T__84; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:33:7: ( ')' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:33:9: ')' + { + match(')'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__84" + + // $ANTLR start "T__85" + public final void mT__85() throws RecognitionException { + try { + int _type = T__85; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:34:7: ( 'catch' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:34:9: 'catch' + { + match("catch"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__85" + + // $ANTLR start "T__86" + public final void mT__86() throws RecognitionException { + try { + int _type = T__86; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:35:7: ( 'finally' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:35:9: 'finally' + { + match("finally"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__86" + + // $ANTLR start "T__87" + public final void mT__87() throws RecognitionException { + try { + int _type = T__87; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:36:7: ( '+=' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:36:9: '+=' + { + match("+="); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__87" + + // $ANTLR start "T__88" + public final void mT__88() throws RecognitionException { + try { + int _type = T__88; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:37:7: ( '=>' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:37:9: '=>' + { + match("=>"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__88" + + // $ANTLR start "T__89" + public final void mT__89() throws RecognitionException { + try { + int _type = T__89; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:38:7: ( '~' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:38:9: '~' + { + match('~'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__89" + + // $ANTLR start "T__90" + public final void mT__90() throws RecognitionException { + try { + int _type = T__90; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:39:7: ( '?' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:39:9: '?' + { + match('?'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__90" + + // $ANTLR start "T__91" + public final void mT__91() throws RecognitionException { + try { + int _type = T__91; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:40:7: ( '+' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:40:9: '+' + { + match('+'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__91" + + // $ANTLR start "T__92" + public final void mT__92() throws RecognitionException { + try { + int _type = T__92; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:41:7: ( '.' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:41:9: '.' + { + match('.'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__92" + + // $ANTLR start "T__93" + public final void mT__93() throws RecognitionException { + try { + int _type = T__93; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:42:7: ( '$' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:42:9: '$' + { + match('$'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__93" + + // $ANTLR start "SL_COMMENT" + public final void mSL_COMMENT() throws RecognitionException { + try { + int _type = SL_COMMENT; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:465:3: ( '//' ( ' $ANTLR ' SRC | (~ ( '\\r' | '\\n' ) )* ) ( '\\r' )? '\\n' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:465:5: '//' ( ' $ANTLR ' SRC | (~ ( '\\r' | '\\n' ) )* ) ( '\\r' )? '\\n' + { + match("//"); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:466:5: ( ' $ANTLR ' SRC | (~ ( '\\r' | '\\n' ) )* ) + int alt2=2; + alt2 = dfa2.predict(input); + switch (alt2) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:466:7: ' $ANTLR ' SRC + { + match(" $ANTLR "); + + mSRC(); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:467:6: (~ ( '\\r' | '\\n' ) )* + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:467:6: (~ ( '\\r' | '\\n' ) )* + loop1: + do { + int alt1=2; + int LA1_0 = input.LA(1); + + if ( ((LA1_0>='\u0000' && LA1_0<='\t')||(LA1_0>='\u000B' && LA1_0<='\f')||(LA1_0>='\u000E' && LA1_0<='\uFFFF')) ) { + alt1=1; + } + + + switch (alt1) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:467:6: ~ ( '\\r' | '\\n' ) + { + if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + + default : + break loop1; + } + } while (true); + + + } + break; + + } + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:469:3: ( '\\r' )? + int alt3=2; + int LA3_0 = input.LA(1); + + if ( (LA3_0=='\r') ) { + alt3=1; + } + switch (alt3) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:469:3: '\\r' + { + match('\r'); + + } + break; + + } + + match('\n'); + _channel=HIDDEN; + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "SL_COMMENT" + + // $ANTLR start "ML_COMMENT" + public final void mML_COMMENT() throws RecognitionException { + try { + int _type = ML_COMMENT; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:474:2: ( '/*' ( . )* '*/' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:474:4: '/*' ( . )* '*/' + { + match("/*"); + + if (input.LA(1)=='*') _type=DOC_COMMENT; else _channel=HIDDEN; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:474:74: ( . )* + loop4: + do { + int alt4=2; + int LA4_0 = input.LA(1); + + if ( (LA4_0=='*') ) { + int LA4_1 = input.LA(2); + + if ( (LA4_1=='/') ) { + alt4=2; + } + else if ( ((LA4_1>='\u0000' && LA4_1<='.')||(LA4_1>='0' && LA4_1<='\uFFFF')) ) { + alt4=1; + } + + + } + else if ( ((LA4_0>='\u0000' && LA4_0<=')')||(LA4_0>='+' && LA4_0<='\uFFFF')) ) { + alt4=1; + } + + + switch (alt4) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:474:74: . + { + matchAny(); + + } + break; + + default : + break loop4; + } + } while (true); + + match("*/"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "ML_COMMENT" + + // $ANTLR start "CHAR_LITERAL" + public final void mCHAR_LITERAL() throws RecognitionException { + try { + int _type = CHAR_LITERAL; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:478:2: ( '\\'' LITERAL_CHAR '\\'' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:478:4: '\\'' LITERAL_CHAR '\\'' + { + match('\''); + mLITERAL_CHAR(); + match('\''); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "CHAR_LITERAL" + + // $ANTLR start "STRING_LITERAL" + public final void mSTRING_LITERAL() throws RecognitionException { + try { + int _type = STRING_LITERAL; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:482:2: ( '\\'' LITERAL_CHAR ( LITERAL_CHAR )* '\\'' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:482:4: '\\'' LITERAL_CHAR ( LITERAL_CHAR )* '\\'' + { + match('\''); + mLITERAL_CHAR(); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:482:22: ( LITERAL_CHAR )* + loop5: + do { + int alt5=2; + int LA5_0 = input.LA(1); + + if ( ((LA5_0>='\u0000' && LA5_0<='&')||(LA5_0>='(' && LA5_0<='\uFFFF')) ) { + alt5=1; + } + + + switch (alt5) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:482:22: LITERAL_CHAR + { + mLITERAL_CHAR(); + + } + break; + + default : + break loop5; + } + } while (true); + + match('\''); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "STRING_LITERAL" + + // $ANTLR start "LITERAL_CHAR" + public final void mLITERAL_CHAR() throws RecognitionException { + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:487:2: ( ESC | ~ ( '\\'' | '\\\\' ) ) + int alt6=2; + int LA6_0 = input.LA(1); + + if ( (LA6_0=='\\') ) { + alt6=1; + } + else if ( ((LA6_0>='\u0000' && LA6_0<='&')||(LA6_0>='(' && LA6_0<='[')||(LA6_0>=']' && LA6_0<='\uFFFF')) ) { + alt6=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 6, 0, input); + + throw nvae; + } + switch (alt6) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:487:4: ESC + { + mESC(); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:488:4: ~ ( '\\'' | '\\\\' ) + { + if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + + } + } + finally { + } + } + // $ANTLR end "LITERAL_CHAR" + + // $ANTLR start "DOUBLE_QUOTE_STRING_LITERAL" + public final void mDOUBLE_QUOTE_STRING_LITERAL() throws RecognitionException { + try { + int _type = DOUBLE_QUOTE_STRING_LITERAL; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:492:2: ( '\"' ( ESC | ~ ( '\\\\' | '\"' ) )* '\"' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:492:4: '\"' ( ESC | ~ ( '\\\\' | '\"' ) )* '\"' + { + match('\"'); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:492:8: ( ESC | ~ ( '\\\\' | '\"' ) )* + loop7: + do { + int alt7=3; + int LA7_0 = input.LA(1); + + if ( (LA7_0=='\\') ) { + alt7=1; + } + else if ( ((LA7_0>='\u0000' && LA7_0<='!')||(LA7_0>='#' && LA7_0<='[')||(LA7_0>=']' && LA7_0<='\uFFFF')) ) { + alt7=2; + } + + + switch (alt7) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:492:9: ESC + { + mESC(); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:492:15: ~ ( '\\\\' | '\"' ) + { + if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + + default : + break loop7; + } + } while (true); + + match('\"'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "DOUBLE_QUOTE_STRING_LITERAL" + + // $ANTLR start "DOUBLE_ANGLE_STRING_LITERAL" + public final void mDOUBLE_ANGLE_STRING_LITERAL() throws RecognitionException { + try { + int _type = DOUBLE_ANGLE_STRING_LITERAL; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:496:2: ( '<<' ( . )* '>>' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:496:4: '<<' ( . )* '>>' + { + match("<<"); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:496:9: ( . )* + loop8: + do { + int alt8=2; + int LA8_0 = input.LA(1); + + if ( (LA8_0=='>') ) { + int LA8_1 = input.LA(2); + + if ( (LA8_1=='>') ) { + alt8=2; + } + else if ( ((LA8_1>='\u0000' && LA8_1<='=')||(LA8_1>='?' && LA8_1<='\uFFFF')) ) { + alt8=1; + } + + + } + else if ( ((LA8_0>='\u0000' && LA8_0<='=')||(LA8_0>='?' && LA8_0<='\uFFFF')) ) { + alt8=1; + } + + + switch (alt8) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:496:9: . + { + matchAny(); + + } + break; + + default : + break loop8; + } + } while (true); + + match(">>"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "DOUBLE_ANGLE_STRING_LITERAL" + + // $ANTLR start "ESC" + public final void mESC() throws RecognitionException { + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:500:5: ( '\\\\' ( 'n' | 'r' | 't' | 'b' | 'f' | '\"' | '\\'' | '\\\\' | '>' | 'u' XDIGIT XDIGIT XDIGIT XDIGIT | . ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:500:7: '\\\\' ( 'n' | 'r' | 't' | 'b' | 'f' | '\"' | '\\'' | '\\\\' | '>' | 'u' XDIGIT XDIGIT XDIGIT XDIGIT | . ) + { + match('\\'); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:501:3: ( 'n' | 'r' | 't' | 'b' | 'f' | '\"' | '\\'' | '\\\\' | '>' | 'u' XDIGIT XDIGIT XDIGIT XDIGIT | . ) + int alt9=11; + alt9 = dfa9.predict(input); + switch (alt9) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:501:5: 'n' + { + match('n'); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:502:5: 'r' + { + match('r'); + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:503:5: 't' + { + match('t'); + + } + break; + case 4 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:504:5: 'b' + { + match('b'); + + } + break; + case 5 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:505:5: 'f' + { + match('f'); + + } + break; + case 6 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:506:5: '\"' + { + match('\"'); + + } + break; + case 7 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:507:5: '\\'' + { + match('\''); + + } + break; + case 8 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:508:5: '\\\\' + { + match('\\'); + + } + break; + case 9 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:509:5: '>' + { + match('>'); + + } + break; + case 10 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:510:5: 'u' XDIGIT XDIGIT XDIGIT XDIGIT + { + match('u'); + mXDIGIT(); + mXDIGIT(); + mXDIGIT(); + mXDIGIT(); + + } + break; + case 11 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:511:5: . + { + matchAny(); + + } + break; + + } + + + } + + } + finally { + } + } + // $ANTLR end "ESC" + + // $ANTLR start "XDIGIT" + public final void mXDIGIT() throws RecognitionException { + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:516:8: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g: + { + if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='F')||(input.LA(1)>='a' && input.LA(1)<='f') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + + } + finally { + } + } + // $ANTLR end "XDIGIT" + + // $ANTLR start "INT" + public final void mINT() throws RecognitionException { + try { + int _type = INT; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:522:5: ( ( '0' .. '9' )+ ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:522:7: ( '0' .. '9' )+ + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:522:7: ( '0' .. '9' )+ + int cnt10=0; + loop10: + do { + int alt10=2; + int LA10_0 = input.LA(1); + + if ( ((LA10_0>='0' && LA10_0<='9')) ) { + alt10=1; + } + + + switch (alt10) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:522:7: '0' .. '9' + { + matchRange('0','9'); + + } + break; + + default : + if ( cnt10 >= 1 ) break loop10; + EarlyExitException eee = + new EarlyExitException(10, input); + throw eee; + } + cnt10++; + } while (true); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "INT" + + // $ANTLR start "ARG_ACTION" + public final void mARG_ACTION() throws RecognitionException { + try { + int _type = ARG_ACTION; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:526:2: ( NESTED_ARG_ACTION ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:526:4: NESTED_ARG_ACTION + { + mNESTED_ARG_ACTION(); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "ARG_ACTION" + + // $ANTLR start "NESTED_ARG_ACTION" + public final void mNESTED_ARG_ACTION() throws RecognitionException { + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:530:19: ( '[' ( options {greedy=false; k=1; } : NESTED_ARG_ACTION | ACTION_STRING_LITERAL | ACTION_CHAR_LITERAL | . )* ']' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:531:2: '[' ( options {greedy=false; k=1; } : NESTED_ARG_ACTION | ACTION_STRING_LITERAL | ACTION_CHAR_LITERAL | . )* ']' + { + match('['); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:532:2: ( options {greedy=false; k=1; } : NESTED_ARG_ACTION | ACTION_STRING_LITERAL | ACTION_CHAR_LITERAL | . )* + loop11: + do { + int alt11=5; + int LA11_0 = input.LA(1); + + if ( (LA11_0==']') ) { + alt11=5; + } + else if ( (LA11_0=='[') ) { + alt11=1; + } + else if ( (LA11_0=='\"') ) { + alt11=2; + } + else if ( (LA11_0=='\'') ) { + alt11=3; + } + else if ( ((LA11_0>='\u0000' && LA11_0<='!')||(LA11_0>='#' && LA11_0<='&')||(LA11_0>='(' && LA11_0<='Z')||LA11_0=='\\'||(LA11_0>='^' && LA11_0<='\uFFFF')) ) { + alt11=4; + } + + + switch (alt11) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:533:4: NESTED_ARG_ACTION + { + mNESTED_ARG_ACTION(); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:534:4: ACTION_STRING_LITERAL + { + mACTION_STRING_LITERAL(); + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:535:4: ACTION_CHAR_LITERAL + { + mACTION_CHAR_LITERAL(); + + } + break; + case 4 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:536:4: . + { + matchAny(); + + } + break; + + default : + break loop11; + } + } while (true); + + match(']'); + setText(getText().substring(1, getText().length()-1)); + + } + + } + finally { + } + } + // $ANTLR end "NESTED_ARG_ACTION" + + // $ANTLR start "ACTION" + public final void mACTION() throws RecognitionException { + try { + int _type = ACTION; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:543:2: ( NESTED_ACTION ( '?' )? ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:543:4: NESTED_ACTION ( '?' )? + { + mNESTED_ACTION(); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:543:18: ( '?' )? + int alt12=2; + int LA12_0 = input.LA(1); + + if ( (LA12_0=='?') ) { + alt12=1; + } + switch (alt12) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:543:20: '?' + { + match('?'); + _type = SEMPRED; + + } + break; + + } + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "ACTION" + + // $ANTLR start "NESTED_ACTION" + public final void mNESTED_ACTION() throws RecognitionException { + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:547:15: ( '{' ( options {greedy=false; k=2; } : NESTED_ACTION | SL_COMMENT | ML_COMMENT | ACTION_STRING_LITERAL | ACTION_CHAR_LITERAL | . )* '}' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:548:2: '{' ( options {greedy=false; k=2; } : NESTED_ACTION | SL_COMMENT | ML_COMMENT | ACTION_STRING_LITERAL | ACTION_CHAR_LITERAL | . )* '}' + { + match('{'); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:549:2: ( options {greedy=false; k=2; } : NESTED_ACTION | SL_COMMENT | ML_COMMENT | ACTION_STRING_LITERAL | ACTION_CHAR_LITERAL | . )* + loop13: + do { + int alt13=7; + alt13 = dfa13.predict(input); + switch (alt13) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:550:4: NESTED_ACTION + { + mNESTED_ACTION(); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:551:4: SL_COMMENT + { + mSL_COMMENT(); + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:552:4: ML_COMMENT + { + mML_COMMENT(); + + } + break; + case 4 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:553:4: ACTION_STRING_LITERAL + { + mACTION_STRING_LITERAL(); + + } + break; + case 5 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:554:4: ACTION_CHAR_LITERAL + { + mACTION_CHAR_LITERAL(); + + } + break; + case 6 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:555:4: . + { + matchAny(); + + } + break; + + default : + break loop13; + } + } while (true); + + match('}'); + + } + + } + finally { + } + } + // $ANTLR end "NESTED_ACTION" + + // $ANTLR start "ACTION_CHAR_LITERAL" + public final void mACTION_CHAR_LITERAL() throws RecognitionException { + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:562:2: ( '\\'' ( ACTION_ESC | ~ ( '\\\\' | '\\'' ) ) '\\'' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:562:4: '\\'' ( ACTION_ESC | ~ ( '\\\\' | '\\'' ) ) '\\'' + { + match('\''); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:562:9: ( ACTION_ESC | ~ ( '\\\\' | '\\'' ) ) + int alt14=2; + int LA14_0 = input.LA(1); + + if ( (LA14_0=='\\') ) { + alt14=1; + } + else if ( ((LA14_0>='\u0000' && LA14_0<='&')||(LA14_0>='(' && LA14_0<='[')||(LA14_0>=']' && LA14_0<='\uFFFF')) ) { + alt14=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 14, 0, input); + + throw nvae; + } + switch (alt14) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:562:10: ACTION_ESC + { + mACTION_ESC(); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:562:21: ~ ( '\\\\' | '\\'' ) + { + if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + + } + + match('\''); + + } + + } + finally { + } + } + // $ANTLR end "ACTION_CHAR_LITERAL" + + // $ANTLR start "ACTION_STRING_LITERAL" + public final void mACTION_STRING_LITERAL() throws RecognitionException { + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:567:2: ( '\"' ( ACTION_ESC | ~ ( '\\\\' | '\"' ) )* '\"' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:567:4: '\"' ( ACTION_ESC | ~ ( '\\\\' | '\"' ) )* '\"' + { + match('\"'); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:567:8: ( ACTION_ESC | ~ ( '\\\\' | '\"' ) )* + loop15: + do { + int alt15=3; + int LA15_0 = input.LA(1); + + if ( (LA15_0=='\\') ) { + alt15=1; + } + else if ( ((LA15_0>='\u0000' && LA15_0<='!')||(LA15_0>='#' && LA15_0<='[')||(LA15_0>=']' && LA15_0<='\uFFFF')) ) { + alt15=2; + } + + + switch (alt15) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:567:9: ACTION_ESC + { + mACTION_ESC(); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:567:20: ~ ( '\\\\' | '\"' ) + { + if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + + default : + break loop15; + } + } while (true); + + match('\"'); + + } + + } + finally { + } + } + // $ANTLR end "ACTION_STRING_LITERAL" + + // $ANTLR start "ACTION_ESC" + public final void mACTION_ESC() throws RecognitionException { + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:572:2: ( '\\\\\\'' | '\\\\' '\"' | '\\\\' ~ ( '\\'' | '\"' ) ) + int alt16=3; + int LA16_0 = input.LA(1); + + if ( (LA16_0=='\\') ) { + int LA16_1 = input.LA(2); + + if ( (LA16_1=='\'') ) { + alt16=1; + } + else if ( (LA16_1=='\"') ) { + alt16=2; + } + else if ( ((LA16_1>='\u0000' && LA16_1<='!')||(LA16_1>='#' && LA16_1<='&')||(LA16_1>='(' && LA16_1<='\uFFFF')) ) { + alt16=3; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 16, 1, input); + + throw nvae; + } + } + else { + NoViableAltException nvae = + new NoViableAltException("", 16, 0, input); + + throw nvae; + } + switch (alt16) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:572:4: '\\\\\\'' + { + match("\\\'"); + + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:573:4: '\\\\' '\"' + { + match('\\'); + match('\"'); + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:574:4: '\\\\' ~ ( '\\'' | '\"' ) + { + match('\\'); + if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='\uFFFF') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + + } + } + finally { + } + } + // $ANTLR end "ACTION_ESC" + + // $ANTLR start "TOKEN_REF" + public final void mTOKEN_REF() throws RecognitionException { + try { + int _type = TOKEN_REF; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:578:2: ( 'A' .. 'Z' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:578:4: 'A' .. 'Z' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* + { + matchRange('A','Z'); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:578:13: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* + loop17: + do { + int alt17=2; + int LA17_0 = input.LA(1); + + if ( ((LA17_0>='0' && LA17_0<='9')||(LA17_0>='A' && LA17_0<='Z')||LA17_0=='_'||(LA17_0>='a' && LA17_0<='z')) ) { + alt17=1; + } + + + switch (alt17) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g: + { + if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + + default : + break loop17; + } + } while (true); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "TOKEN_REF" + + // $ANTLR start "RULE_REF" + public final void mRULE_REF() throws RecognitionException { + try { + int _type = RULE_REF; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:582:2: ( 'a' .. 'z' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:582:4: 'a' .. 'z' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* + { + matchRange('a','z'); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:582:13: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* + loop18: + do { + int alt18=2; + int LA18_0 = input.LA(1); + + if ( ((LA18_0>='0' && LA18_0<='9')||(LA18_0>='A' && LA18_0<='Z')||LA18_0=='_'||(LA18_0>='a' && LA18_0<='z')) ) { + alt18=1; + } + + + switch (alt18) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g: + { + if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + + default : + break loop18; + } + } while (true); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "RULE_REF" + + // $ANTLR start "OPTIONS" + public final void mOPTIONS() throws RecognitionException { + try { + int _type = OPTIONS; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:589:2: ( 'options' WS_LOOP '{' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:589:4: 'options' WS_LOOP '{' + { + match("options"); + + mWS_LOOP(); + match('{'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "OPTIONS" + + // $ANTLR start "TOKENS" + public final void mTOKENS() throws RecognitionException { + try { + int _type = TOKENS; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:593:2: ( 'tokens' WS_LOOP '{' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:593:4: 'tokens' WS_LOOP '{' + { + match("tokens"); + + mWS_LOOP(); + match('{'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "TOKENS" + + // $ANTLR start "SRC" + public final void mSRC() throws RecognitionException { + try { + Token file=null; + Token line=null; + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:601:5: ( 'src' ' ' file= ACTION_STRING_LITERAL ' ' line= INT ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:601:7: 'src' ' ' file= ACTION_STRING_LITERAL ' ' line= INT + { + match("src"); + + match(' '); + int fileStart982 = getCharIndex(); + mACTION_STRING_LITERAL(); + file = new CommonToken(input, Token.INVALID_TOKEN_TYPE, Token.DEFAULT_CHANNEL, fileStart982, getCharIndex()-1); + match(' '); + int lineStart988 = getCharIndex(); + mINT(); + line = new CommonToken(input, Token.INVALID_TOKEN_TYPE, Token.DEFAULT_CHANNEL, lineStart988, getCharIndex()-1); + + } + + } + finally { + } + } + // $ANTLR end "SRC" + + // $ANTLR start "WS" + public final void mWS() throws RecognitionException { + try { + int _type = WS; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:604:4: ( ( ' ' | '\\t' | ( '\\r' )? '\\n' )+ ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:604:6: ( ' ' | '\\t' | ( '\\r' )? '\\n' )+ + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:604:6: ( ' ' | '\\t' | ( '\\r' )? '\\n' )+ + int cnt20=0; + loop20: + do { + int alt20=4; + switch ( input.LA(1) ) { + case ' ': + { + alt20=1; + } + break; + case '\t': + { + alt20=2; + } + break; + case '\n': + case '\r': + { + alt20=3; + } + break; + + } + + switch (alt20) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:604:8: ' ' + { + match(' '); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:605:5: '\\t' + { + match('\t'); + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:606:5: ( '\\r' )? '\\n' + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:606:5: ( '\\r' )? + int alt19=2; + int LA19_0 = input.LA(1); + + if ( (LA19_0=='\r') ) { + alt19=1; + } + switch (alt19) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:606:5: '\\r' + { + match('\r'); + + } + break; + + } + + match('\n'); + + } + break; + + default : + if ( cnt20 >= 1 ) break loop20; + EarlyExitException eee = + new EarlyExitException(20, input); + throw eee; + } + cnt20++; + } while (true); + + _channel=HIDDEN; + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "WS" + + // $ANTLR start "WS_LOOP" + public final void mWS_LOOP() throws RecognitionException { + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:613:2: ( ( WS | SL_COMMENT | ML_COMMENT )* ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:613:4: ( WS | SL_COMMENT | ML_COMMENT )* + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:613:4: ( WS | SL_COMMENT | ML_COMMENT )* + loop21: + do { + int alt21=4; + int LA21_0 = input.LA(1); + + if ( ((LA21_0>='\t' && LA21_0<='\n')||LA21_0=='\r'||LA21_0==' ') ) { + alt21=1; + } + else if ( (LA21_0=='/') ) { + int LA21_3 = input.LA(2); + + if ( (LA21_3=='/') ) { + alt21=2; + } + else if ( (LA21_3=='*') ) { + alt21=3; + } + + + } + + + switch (alt21) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:613:6: WS + { + mWS(); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:614:5: SL_COMMENT + { + mSL_COMMENT(); + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:615:5: ML_COMMENT + { + mML_COMMENT(); + + } + break; + + default : + break loop21; + } + } while (true); + + + } + + } + finally { + } + } + // $ANTLR end "WS_LOOP" + + public void mTokens() throws RecognitionException { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:8: ( SCOPE | FRAGMENT | TREE_BEGIN | ROOT | BANG | RANGE | REWRITE | T__65 | T__66 | T__67 | T__68 | T__69 | T__70 | T__71 | T__72 | T__73 | T__74 | T__75 | T__76 | T__77 | T__78 | T__79 | T__80 | T__81 | T__82 | T__83 | T__84 | T__85 | T__86 | T__87 | T__88 | T__89 | T__90 | T__91 | T__92 | T__93 | SL_COMMENT | ML_COMMENT | CHAR_LITERAL | STRING_LITERAL | DOUBLE_QUOTE_STRING_LITERAL | DOUBLE_ANGLE_STRING_LITERAL | INT | ARG_ACTION | ACTION | TOKEN_REF | RULE_REF | OPTIONS | TOKENS | WS ) + int alt22=50; + alt22 = dfa22.predict(input); + switch (alt22) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:10: SCOPE + { + mSCOPE(); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:16: FRAGMENT + { + mFRAGMENT(); + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:25: TREE_BEGIN + { + mTREE_BEGIN(); + + } + break; + case 4 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:36: ROOT + { + mROOT(); + + } + break; + case 5 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:41: BANG + { + mBANG(); + + } + break; + case 6 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:46: RANGE + { + mRANGE(); + + } + break; + case 7 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:52: REWRITE + { + mREWRITE(); + + } + break; + case 8 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:60: T__65 + { + mT__65(); + + } + break; + case 9 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:66: T__66 + { + mT__66(); + + } + break; + case 10 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:72: T__67 + { + mT__67(); + + } + break; + case 11 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:78: T__68 + { + mT__68(); + + } + break; + case 12 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:84: T__69 + { + mT__69(); + + } + break; + case 13 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:90: T__70 + { + mT__70(); + + } + break; + case 14 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:96: T__71 + { + mT__71(); + + } + break; + case 15 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:102: T__72 + { + mT__72(); + + } + break; + case 16 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:108: T__73 + { + mT__73(); + + } + break; + case 17 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:114: T__74 + { + mT__74(); + + } + break; + case 18 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:120: T__75 + { + mT__75(); + + } + break; + case 19 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:126: T__76 + { + mT__76(); + + } + break; + case 20 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:132: T__77 + { + mT__77(); + + } + break; + case 21 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:138: T__78 + { + mT__78(); + + } + break; + case 22 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:144: T__79 + { + mT__79(); + + } + break; + case 23 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:150: T__80 + { + mT__80(); + + } + break; + case 24 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:156: T__81 + { + mT__81(); + + } + break; + case 25 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:162: T__82 + { + mT__82(); + + } + break; + case 26 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:168: T__83 + { + mT__83(); + + } + break; + case 27 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:174: T__84 + { + mT__84(); + + } + break; + case 28 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:180: T__85 + { + mT__85(); + + } + break; + case 29 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:186: T__86 + { + mT__86(); + + } + break; + case 30 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:192: T__87 + { + mT__87(); + + } + break; + case 31 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:198: T__88 + { + mT__88(); + + } + break; + case 32 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:204: T__89 + { + mT__89(); + + } + break; + case 33 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:210: T__90 + { + mT__90(); + + } + break; + case 34 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:216: T__91 + { + mT__91(); + + } + break; + case 35 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:222: T__92 + { + mT__92(); + + } + break; + case 36 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:228: T__93 + { + mT__93(); + + } + break; + case 37 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:234: SL_COMMENT + { + mSL_COMMENT(); + + } + break; + case 38 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:245: ML_COMMENT + { + mML_COMMENT(); + + } + break; + case 39 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:256: CHAR_LITERAL + { + mCHAR_LITERAL(); + + } + break; + case 40 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:269: STRING_LITERAL + { + mSTRING_LITERAL(); + + } + break; + case 41 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:284: DOUBLE_QUOTE_STRING_LITERAL + { + mDOUBLE_QUOTE_STRING_LITERAL(); + + } + break; + case 42 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:312: DOUBLE_ANGLE_STRING_LITERAL + { + mDOUBLE_ANGLE_STRING_LITERAL(); + + } + break; + case 43 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:340: INT + { + mINT(); + + } + break; + case 44 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:344: ARG_ACTION + { + mARG_ACTION(); + + } + break; + case 45 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:355: ACTION + { + mACTION(); + + } + break; + case 46 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:362: TOKEN_REF + { + mTOKEN_REF(); + + } + break; + case 47 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:372: RULE_REF + { + mRULE_REF(); + + } + break; + case 48 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:381: OPTIONS + { + mOPTIONS(); + + } + break; + case 49 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:389: TOKENS + { + mTOKENS(); + + } + break; + case 50 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:1:396: WS + { + mWS(); + + } + break; + + } + + } + + + protected DFA2 dfa2 = new DFA2(this); + protected DFA9 dfa9 = new DFA9(this); + protected DFA13 dfa13 = new DFA13(this); + protected DFA22 dfa22 = new DFA22(this); + static final String DFA2_eotS = + "\22\uffff\1\2\4\uffff\1\2\4\uffff"; + static final String DFA2_eofS = + "\34\uffff"; + static final String DFA2_minS = + "\2\0\1\uffff\26\0\1\uffff\1\0\1\uffff"; + static final String DFA2_maxS = + "\2\uffff\1\uffff\26\uffff\1\uffff\1\uffff\1\uffff"; + static final String DFA2_acceptS = + "\2\uffff\1\2\26\uffff\1\1\1\uffff\1\1"; + static final String DFA2_specialS = + "\1\5\1\13\1\uffff\1\0\1\2\1\6\1\26\1\12\1\24\1\15\1\16\1\25\1\17"+ + "\1\4\1\20\1\22\1\3\1\1\1\10\1\21\1\7\1\27\1\30\1\14\1\11\1\uffff"+ + "\1\23\1\uffff}>"; + static final String[] DFA2_transitionS = { + "\40\2\1\1\uffdf\2", + "\44\2\1\3\uffdb\2", + "", + "\101\2\1\4\uffbe\2", + "\116\2\1\5\uffb1\2", + "\124\2\1\6\uffab\2", + "\114\2\1\7\uffb3\2", + "\122\2\1\10\uffad\2", + "\40\2\1\11\uffdf\2", + "\163\2\1\12\uff8c\2", + "\162\2\1\13\uff8d\2", + "\143\2\1\14\uff9c\2", + "\40\2\1\15\uffdf\2", + "\42\2\1\16\uffdd\2", + "\12\23\1\22\2\23\1\20\24\23\1\21\71\23\1\17\uffa3\23", + "\12\30\1\27\2\30\1\26\24\30\1\25\4\30\1\24\uffd8\30", + "\12\31\1\22\ufff5\31", + "\40\2\1\32\uffdf\2", + "\0\31", + "\12\23\1\22\2\23\1\20\24\23\1\21\71\23\1\17\uffa3\23", + "\12\23\1\22\2\23\1\20\24\23\1\21\71\23\1\17\uffa3\23", + "\12\23\1\22\2\23\1\20\24\23\1\21\71\23\1\17\uffa3\23", + "\12\31\1\22\ufff5\31", + "\0\31", + "\12\23\1\22\2\23\1\20\24\23\1\21\71\23\1\17\uffa3\23", + "", + "\60\2\12\33\uffc6\2", + "" + }; + + static final short[] DFA2_eot = DFA.unpackEncodedString(DFA2_eotS); + static final short[] DFA2_eof = DFA.unpackEncodedString(DFA2_eofS); + static final char[] DFA2_min = DFA.unpackEncodedStringToUnsignedChars(DFA2_minS); + static final char[] DFA2_max = DFA.unpackEncodedStringToUnsignedChars(DFA2_maxS); + static final short[] DFA2_accept = DFA.unpackEncodedString(DFA2_acceptS); + static final short[] DFA2_special = DFA.unpackEncodedString(DFA2_specialS); + static final short[][] DFA2_transition; + + static { + int numStates = DFA2_transitionS.length; + DFA2_transition = new short[numStates][]; + for (int i=0; i='\u0000' && LA2_3<='@')||(LA2_3>='B' && LA2_3<='\uFFFF')) ) {s = 2;} + + if ( s>=0 ) return s; + break; + case 1 : + int LA2_17 = input.LA(1); + + s = -1; + if ( ((LA2_17>='\u0000' && LA2_17<='\u001F')||(LA2_17>='!' && LA2_17<='\uFFFF')) ) {s = 2;} + + else if ( (LA2_17==' ') ) {s = 26;} + + if ( s>=0 ) return s; + break; + case 2 : + int LA2_4 = input.LA(1); + + s = -1; + if ( (LA2_4=='N') ) {s = 5;} + + else if ( ((LA2_4>='\u0000' && LA2_4<='M')||(LA2_4>='O' && LA2_4<='\uFFFF')) ) {s = 2;} + + if ( s>=0 ) return s; + break; + case 3 : + int LA2_16 = input.LA(1); + + s = -1; + if ( ((LA2_16>='\u0000' && LA2_16<='\t')||(LA2_16>='\u000B' && LA2_16<='\uFFFF')) ) {s = 25;} + + else if ( (LA2_16=='\n') ) {s = 18;} + + if ( s>=0 ) return s; + break; + case 4 : + int LA2_13 = input.LA(1); + + s = -1; + if ( ((LA2_13>='\u0000' && LA2_13<='!')||(LA2_13>='#' && LA2_13<='\uFFFF')) ) {s = 2;} + + else if ( (LA2_13=='\"') ) {s = 14;} + + if ( s>=0 ) return s; + break; + case 5 : + int LA2_0 = input.LA(1); + + s = -1; + if ( (LA2_0==' ') ) {s = 1;} + + else if ( ((LA2_0>='\u0000' && LA2_0<='\u001F')||(LA2_0>='!' && LA2_0<='\uFFFF')) ) {s = 2;} + + if ( s>=0 ) return s; + break; + case 6 : + int LA2_5 = input.LA(1); + + s = -1; + if ( (LA2_5=='T') ) {s = 6;} + + else if ( ((LA2_5>='\u0000' && LA2_5<='S')||(LA2_5>='U' && LA2_5<='\uFFFF')) ) {s = 2;} + + if ( s>=0 ) return s; + break; + case 7 : + int LA2_20 = input.LA(1); + + s = -1; + if ( (LA2_20=='\r') ) {s = 16;} + + else if ( (LA2_20=='\n') ) {s = 18;} + + else if ( (LA2_20=='\"') ) {s = 17;} + + else if ( (LA2_20=='\\') ) {s = 15;} + + else if ( ((LA2_20>='\u0000' && LA2_20<='\t')||(LA2_20>='\u000B' && LA2_20<='\f')||(LA2_20>='\u000E' && LA2_20<='!')||(LA2_20>='#' && LA2_20<='[')||(LA2_20>=']' && LA2_20<='\uFFFF')) ) {s = 19;} + + if ( s>=0 ) return s; + break; + case 8 : + int LA2_18 = input.LA(1); + + s = -1; + if ( ((LA2_18>='\u0000' && LA2_18<='\uFFFF')) ) {s = 25;} + + else s = 2; + + if ( s>=0 ) return s; + break; + case 9 : + int LA2_24 = input.LA(1); + + s = -1; + if ( (LA2_24=='\r') ) {s = 16;} + + else if ( (LA2_24=='\n') ) {s = 18;} + + else if ( (LA2_24=='\"') ) {s = 17;} + + else if ( (LA2_24=='\\') ) {s = 15;} + + else if ( ((LA2_24>='\u0000' && LA2_24<='\t')||(LA2_24>='\u000B' && LA2_24<='\f')||(LA2_24>='\u000E' && LA2_24<='!')||(LA2_24>='#' && LA2_24<='[')||(LA2_24>=']' && LA2_24<='\uFFFF')) ) {s = 19;} + + if ( s>=0 ) return s; + break; + case 10 : + int LA2_7 = input.LA(1); + + s = -1; + if ( (LA2_7=='R') ) {s = 8;} + + else if ( ((LA2_7>='\u0000' && LA2_7<='Q')||(LA2_7>='S' && LA2_7<='\uFFFF')) ) {s = 2;} + + if ( s>=0 ) return s; + break; + case 11 : + int LA2_1 = input.LA(1); + + s = -1; + if ( (LA2_1=='$') ) {s = 3;} + + else if ( ((LA2_1>='\u0000' && LA2_1<='#')||(LA2_1>='%' && LA2_1<='\uFFFF')) ) {s = 2;} + + if ( s>=0 ) return s; + break; + case 12 : + int LA2_23 = input.LA(1); + + s = -1; + if ( ((LA2_23>='\u0000' && LA2_23<='\uFFFF')) ) {s = 25;} + + else s = 2; + + if ( s>=0 ) return s; + break; + case 13 : + int LA2_9 = input.LA(1); + + s = -1; + if ( (LA2_9=='s') ) {s = 10;} + + else if ( ((LA2_9>='\u0000' && LA2_9<='r')||(LA2_9>='t' && LA2_9<='\uFFFF')) ) {s = 2;} + + if ( s>=0 ) return s; + break; + case 14 : + int LA2_10 = input.LA(1); + + s = -1; + if ( (LA2_10=='r') ) {s = 11;} + + else if ( ((LA2_10>='\u0000' && LA2_10<='q')||(LA2_10>='s' && LA2_10<='\uFFFF')) ) {s = 2;} + + if ( s>=0 ) return s; + break; + case 15 : + int LA2_12 = input.LA(1); + + s = -1; + if ( (LA2_12==' ') ) {s = 13;} + + else if ( ((LA2_12>='\u0000' && LA2_12<='\u001F')||(LA2_12>='!' && LA2_12<='\uFFFF')) ) {s = 2;} + + if ( s>=0 ) return s; + break; + case 16 : + int LA2_14 = input.LA(1); + + s = -1; + if ( (LA2_14=='\\') ) {s = 15;} + + else if ( (LA2_14=='\r') ) {s = 16;} + + else if ( (LA2_14=='\"') ) {s = 17;} + + else if ( (LA2_14=='\n') ) {s = 18;} + + else if ( ((LA2_14>='\u0000' && LA2_14<='\t')||(LA2_14>='\u000B' && LA2_14<='\f')||(LA2_14>='\u000E' && LA2_14<='!')||(LA2_14>='#' && LA2_14<='[')||(LA2_14>=']' && LA2_14<='\uFFFF')) ) {s = 19;} + + if ( s>=0 ) return s; + break; + case 17 : + int LA2_19 = input.LA(1); + + s = -1; + if ( (LA2_19=='\r') ) {s = 16;} + + else if ( (LA2_19=='\n') ) {s = 18;} + + else if ( (LA2_19=='\"') ) {s = 17;} + + else if ( (LA2_19=='\\') ) {s = 15;} + + else if ( ((LA2_19>='\u0000' && LA2_19<='\t')||(LA2_19>='\u000B' && LA2_19<='\f')||(LA2_19>='\u000E' && LA2_19<='!')||(LA2_19>='#' && LA2_19<='[')||(LA2_19>=']' && LA2_19<='\uFFFF')) ) {s = 19;} + + if ( s>=0 ) return s; + break; + case 18 : + int LA2_15 = input.LA(1); + + s = -1; + if ( (LA2_15=='\'') ) {s = 20;} + + else if ( (LA2_15=='\"') ) {s = 21;} + + else if ( (LA2_15=='\r') ) {s = 22;} + + else if ( (LA2_15=='\n') ) {s = 23;} + + else if ( ((LA2_15>='\u0000' && LA2_15<='\t')||(LA2_15>='\u000B' && LA2_15<='\f')||(LA2_15>='\u000E' && LA2_15<='!')||(LA2_15>='#' && LA2_15<='&')||(LA2_15>='(' && LA2_15<='\uFFFF')) ) {s = 24;} + + if ( s>=0 ) return s; + break; + case 19 : + int LA2_26 = input.LA(1); + + s = -1; + if ( ((LA2_26>='0' && LA2_26<='9')) ) {s = 27;} + + else if ( ((LA2_26>='\u0000' && LA2_26<='/')||(LA2_26>=':' && LA2_26<='\uFFFF')) ) {s = 2;} + + if ( s>=0 ) return s; + break; + case 20 : + int LA2_8 = input.LA(1); + + s = -1; + if ( (LA2_8==' ') ) {s = 9;} + + else if ( ((LA2_8>='\u0000' && LA2_8<='\u001F')||(LA2_8>='!' && LA2_8<='\uFFFF')) ) {s = 2;} + + if ( s>=0 ) return s; + break; + case 21 : + int LA2_11 = input.LA(1); + + s = -1; + if ( (LA2_11=='c') ) {s = 12;} + + else if ( ((LA2_11>='\u0000' && LA2_11<='b')||(LA2_11>='d' && LA2_11<='\uFFFF')) ) {s = 2;} + + if ( s>=0 ) return s; + break; + case 22 : + int LA2_6 = input.LA(1); + + s = -1; + if ( (LA2_6=='L') ) {s = 7;} + + else if ( ((LA2_6>='\u0000' && LA2_6<='K')||(LA2_6>='M' && LA2_6<='\uFFFF')) ) {s = 2;} + + if ( s>=0 ) return s; + break; + case 23 : + int LA2_21 = input.LA(1); + + s = -1; + if ( (LA2_21=='\"') ) {s = 17;} + + else if ( (LA2_21=='\\') ) {s = 15;} + + else if ( (LA2_21=='\r') ) {s = 16;} + + else if ( (LA2_21=='\n') ) {s = 18;} + + else if ( ((LA2_21>='\u0000' && LA2_21<='\t')||(LA2_21>='\u000B' && LA2_21<='\f')||(LA2_21>='\u000E' && LA2_21<='!')||(LA2_21>='#' && LA2_21<='[')||(LA2_21>=']' && LA2_21<='\uFFFF')) ) {s = 19;} + + if ( s>=0 ) return s; + break; + case 24 : + int LA2_22 = input.LA(1); + + s = -1; + if ( ((LA2_22>='\u0000' && LA2_22<='\t')||(LA2_22>='\u000B' && LA2_22<='\uFFFF')) ) {s = 25;} + + else if ( (LA2_22=='\n') ) {s = 18;} + + if ( s>=0 ) return s; + break; + } + NoViableAltException nvae = + new NoViableAltException(getDescription(), 2, _s, input); + error(nvae); + throw nvae; + } + } + static final String DFA9_eotS = + "\12\uffff\1\13\2\uffff"; + static final String DFA9_eofS = + "\15\uffff"; + static final String DFA9_minS = + "\1\0\11\uffff\1\60\2\uffff"; + static final String DFA9_maxS = + "\1\uffff\11\uffff\1\146\2\uffff"; + static final String DFA9_acceptS = + "\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\uffff\1\13\1\12"; + static final String DFA9_specialS = + "\1\0\14\uffff}>"; + static final String[] DFA9_transitionS = { + "\42\13\1\6\4\13\1\7\26\13\1\11\35\13\1\10\5\13\1\4\3\13\1\5"+ + "\7\13\1\1\3\13\1\2\1\13\1\3\1\12\uff8a\13", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\12\14\7\uffff\6\14\32\uffff\6\14", + "", + "" + }; + + static final short[] DFA9_eot = DFA.unpackEncodedString(DFA9_eotS); + static final short[] DFA9_eof = DFA.unpackEncodedString(DFA9_eofS); + static final char[] DFA9_min = DFA.unpackEncodedStringToUnsignedChars(DFA9_minS); + static final char[] DFA9_max = DFA.unpackEncodedStringToUnsignedChars(DFA9_maxS); + static final short[] DFA9_accept = DFA.unpackEncodedString(DFA9_acceptS); + static final short[] DFA9_special = DFA.unpackEncodedString(DFA9_specialS); + static final short[][] DFA9_transition; + + static { + int numStates = DFA9_transitionS.length; + DFA9_transition = new short[numStates][]; + for (int i=0; i' | 'u' XDIGIT XDIGIT XDIGIT XDIGIT | . )"; + } + public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { + IntStream input = _input; + int _s = s; + switch ( s ) { + case 0 : + int LA9_0 = input.LA(1); + + s = -1; + if ( (LA9_0=='n') ) {s = 1;} + + else if ( (LA9_0=='r') ) {s = 2;} + + else if ( (LA9_0=='t') ) {s = 3;} + + else if ( (LA9_0=='b') ) {s = 4;} + + else if ( (LA9_0=='f') ) {s = 5;} + + else if ( (LA9_0=='\"') ) {s = 6;} + + else if ( (LA9_0=='\'') ) {s = 7;} + + else if ( (LA9_0=='\\') ) {s = 8;} + + else if ( (LA9_0=='>') ) {s = 9;} + + else if ( (LA9_0=='u') ) {s = 10;} + + else if ( ((LA9_0>='\u0000' && LA9_0<='!')||(LA9_0>='#' && LA9_0<='&')||(LA9_0>='(' && LA9_0<='=')||(LA9_0>='?' && LA9_0<='[')||(LA9_0>=']' && LA9_0<='a')||(LA9_0>='c' && LA9_0<='e')||(LA9_0>='g' && LA9_0<='m')||(LA9_0>='o' && LA9_0<='q')||LA9_0=='s'||(LA9_0>='v' && LA9_0<='\uFFFF')) ) {s = 11;} + + if ( s>=0 ) return s; + break; + } + NoViableAltException nvae = + new NoViableAltException(getDescription(), 9, _s, input); + error(nvae); + throw nvae; + } + } + static final String DFA13_eotS = + "\34\uffff"; + static final String DFA13_eofS = + "\34\uffff"; + static final String DFA13_minS = + "\1\0\2\uffff\3\0\26\uffff"; + static final String DFA13_maxS = + "\1\uffff\2\uffff\3\uffff\26\uffff"; + static final String DFA13_acceptS = + "\1\uffff\1\7\1\1\3\uffff\1\6\1\2\1\3\5\uffff\7\4\6\5\1\uffff"; + static final String DFA13_specialS = + "\1\0\2\uffff\1\1\1\2\1\3\26\uffff}>"; + static final String[] DFA13_transitionS = { + "\42\6\1\4\4\6\1\5\7\6\1\3\113\6\1\2\1\6\1\1\uff82\6", + "", + "", + "\52\6\1\10\4\6\1\7\uffd0\6", + "\42\24\1\20\4\24\1\23\7\24\1\22\54\24\1\16\36\24\1\21\1\24"+ + "\1\17\uff82\24", + "\42\32\1\31\4\32\1\6\7\32\1\30\54\32\1\25\36\32\1\27\1\32\1"+ + "\26\uff82\32", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + }; + + static final short[] DFA13_eot = DFA.unpackEncodedString(DFA13_eotS); + static final short[] DFA13_eof = DFA.unpackEncodedString(DFA13_eofS); + static final char[] DFA13_min = DFA.unpackEncodedStringToUnsignedChars(DFA13_minS); + static final char[] DFA13_max = DFA.unpackEncodedStringToUnsignedChars(DFA13_maxS); + static final short[] DFA13_accept = DFA.unpackEncodedString(DFA13_acceptS); + static final short[] DFA13_special = DFA.unpackEncodedString(DFA13_specialS); + static final short[][] DFA13_transition; + + static { + int numStates = DFA13_transitionS.length; + DFA13_transition = new short[numStates][]; + for (int i=0; i='\u0000' && LA13_0<='!')||(LA13_0>='#' && LA13_0<='&')||(LA13_0>='(' && LA13_0<='.')||(LA13_0>='0' && LA13_0<='z')||LA13_0=='|'||(LA13_0>='~' && LA13_0<='\uFFFF')) ) {s = 6;} + + if ( s>=0 ) return s; + break; + case 1 : + int LA13_3 = input.LA(1); + + s = -1; + if ( (LA13_3=='/') ) {s = 7;} + + else if ( (LA13_3=='*') ) {s = 8;} + + else if ( ((LA13_3>='\u0000' && LA13_3<=')')||(LA13_3>='+' && LA13_3<='.')||(LA13_3>='0' && LA13_3<='\uFFFF')) ) {s = 6;} + + if ( s>=0 ) return s; + break; + case 2 : + int LA13_4 = input.LA(1); + + s = -1; + if ( (LA13_4=='\\') ) {s = 14;} + + else if ( (LA13_4=='}') ) {s = 15;} + + else if ( (LA13_4=='\"') ) {s = 16;} + + else if ( (LA13_4=='{') ) {s = 17;} + + else if ( (LA13_4=='/') ) {s = 18;} + + else if ( (LA13_4=='\'') ) {s = 19;} + + else if ( ((LA13_4>='\u0000' && LA13_4<='!')||(LA13_4>='#' && LA13_4<='&')||(LA13_4>='(' && LA13_4<='.')||(LA13_4>='0' && LA13_4<='[')||(LA13_4>=']' && LA13_4<='z')||LA13_4=='|'||(LA13_4>='~' && LA13_4<='\uFFFF')) ) {s = 20;} + + if ( s>=0 ) return s; + break; + case 3 : + int LA13_5 = input.LA(1); + + s = -1; + if ( (LA13_5=='\\') ) {s = 21;} + + else if ( (LA13_5=='}') ) {s = 22;} + + else if ( (LA13_5=='{') ) {s = 23;} + + else if ( (LA13_5=='/') ) {s = 24;} + + else if ( (LA13_5=='\"') ) {s = 25;} + + else if ( ((LA13_5>='\u0000' && LA13_5<='!')||(LA13_5>='#' && LA13_5<='&')||(LA13_5>='(' && LA13_5<='.')||(LA13_5>='0' && LA13_5<='[')||(LA13_5>=']' && LA13_5<='z')||LA13_5=='|'||(LA13_5>='~' && LA13_5<='\uFFFF')) ) {s = 26;} + + else if ( (LA13_5=='\'') ) {s = 6;} + + if ( s>=0 ) return s; + break; + } + NoViableAltException nvae = + new NoViableAltException(getDescription(), 13, _s, input); + error(nvae); + throw nvae; + } + } + static final String DFA22_eotS = + "\1\uffff\2\44\1\52\1\uffff\1\54\1\uffff\4\44\2\uffff\1\66\1\uffff"+ + "\1\70\1\uffff\1\44\4\uffff\1\44\1\74\13\uffff\1\44\2\uffff\3\44"+ + "\4\uffff\10\44\4\uffff\2\44\6\uffff\17\44\15\uffff\11\44\1\167\5"+ + "\44\2\uffff\1\44\1\177\2\44\1\u0082\4\44\1\uffff\4\44\1\u008b\1"+ + "\uffff\1\44\1\uffff\2\44\1\uffff\1\u0090\2\44\1\u0093\1\u0094\3"+ + "\44\2\uffff\2\44\1\u009b\1\uffff\1\44\1\u009d\3\uffff\1\u009e\1"+ + "\u009f\1\uffff\1\44\1\u00a1\1\uffff\1\44\5\uffff\1\u00a3\1\uffff"; + static final String DFA22_eofS = + "\u00a4\uffff"; + static final String DFA22_minS = + "\1\11\1\143\1\151\1\50\1\uffff\1\56\1\uffff\1\145\1\141\1\150\1"+ + "\162\2\uffff\1\76\1\uffff\1\72\1\uffff\1\145\4\uffff\1\141\1\75"+ + "\3\uffff\1\52\1\0\6\uffff\1\160\2\uffff\1\157\1\141\1\156\4\uffff"+ + "\1\170\1\162\1\151\1\142\1\145\1\162\1\153\1\141\4\uffff\2\164\4"+ + "\uffff\2\0\1\164\1\160\1\147\1\141\1\145\1\163\1\164\1\166\1\154"+ + "\1\145\1\157\1\145\1\155\1\165\1\143\13\0\2\uffff\1\151\1\145\1"+ + "\155\1\154\1\162\2\145\1\141\1\151\1\60\1\167\1\156\1\155\1\162"+ + "\1\150\1\0\1\uffff\1\157\1\60\1\145\1\154\1\60\1\162\1\143\1\164"+ + "\1\143\1\uffff\2\163\1\141\1\156\1\60\1\0\1\156\1\uffff\1\156\1"+ + "\171\1\uffff\1\60\1\164\1\145\2\60\1\11\1\162\1\163\1\uffff\1\0"+ + "\1\163\1\164\1\60\1\uffff\1\145\1\60\3\uffff\2\60\1\0\1\11\1\60"+ + "\1\uffff\1\144\5\uffff\1\60\1\uffff"; + static final String DFA22_maxS = + "\1\176\1\143\1\162\1\50\1\uffff\1\56\1\uffff\1\145\1\165\2\162\2"+ + "\uffff\1\76\1\uffff\1\72\1\uffff\1\145\4\uffff\1\141\1\75\3\uffff"+ + "\1\57\1\uffff\6\uffff\1\160\2\uffff\1\157\1\141\1\156\4\uffff\1"+ + "\170\1\162\1\157\1\142\1\145\1\162\1\153\1\141\4\uffff\2\164\4\uffff"+ + "\2\uffff\1\164\1\160\1\147\1\141\1\145\1\163\1\164\1\166\1\154\1"+ + "\145\1\157\1\145\1\155\1\165\1\143\13\uffff\2\uffff\1\151\1\145"+ + "\1\155\1\154\1\162\2\145\1\141\1\151\1\172\1\167\1\156\1\155\1\162"+ + "\1\150\1\uffff\1\uffff\1\157\1\172\1\145\1\154\1\172\1\162\1\143"+ + "\1\164\1\143\1\uffff\2\163\1\141\1\156\1\172\1\uffff\1\156\1\uffff"+ + "\1\156\1\171\1\uffff\1\172\1\164\1\145\2\172\1\173\1\162\1\163\1"+ + "\uffff\1\uffff\1\163\1\164\1\172\1\uffff\1\145\1\172\3\uffff\2\172"+ + "\1\uffff\1\173\1\172\1\uffff\1\144\5\uffff\1\172\1\uffff"; + static final String DFA22_acceptS = + "\4\uffff\1\5\1\uffff\1\7\4\uffff\1\14\1\15\1\uffff\1\17\1\uffff"+ + "\1\21\1\uffff\1\30\1\31\1\32\1\33\2\uffff\1\40\1\41\1\44\2\uffff"+ + "\1\51\1\52\1\53\1\54\1\55\1\56\1\uffff\1\57\1\62\3\uffff\1\3\1\4"+ + "\1\6\1\43\10\uffff\1\37\1\16\1\20\1\26\2\uffff\1\36\1\42\1\45\1"+ + "\46\34\uffff\1\50\1\47\20\uffff\1\47\11\uffff\1\12\7\uffff\1\1\2"+ + "\uffff\1\10\10\uffff\1\34\4\uffff\1\11\2\uffff\1\23\1\27\1\61\5"+ + "\uffff\1\35\1\uffff\1\24\1\13\1\25\1\60\1\2\1\uffff\1\22"; + static final String DFA22_specialS = + "\34\uffff\1\5\42\uffff\1\12\1\20\17\uffff\1\13\1\3\1\14\1\6\1\11"+ + "\1\2\1\21\1\16\1\15\1\4\1\7\21\uffff\1\17\20\uffff\1\0\16\uffff"+ + "\1\10\13\uffff\1\1\13\uffff}>"; + static final String[] DFA22_transitionS = { + "\2\45\2\uffff\1\45\22\uffff\1\45\1\4\1\35\1\uffff\1\32\2\uffff"+ + "\1\34\1\23\1\25\1\20\1\27\1\22\1\6\1\5\1\33\12\37\1\17\1\13"+ + "\1\36\1\15\1\uffff\1\31\1\16\32\42\1\40\2\uffff\1\3\2\uffff"+ + "\2\44\1\26\2\44\1\2\1\12\4\44\1\7\2\44\1\43\1\10\1\44\1\21\1"+ + "\1\1\11\6\44\1\41\1\24\1\14\1\30", + "\1\46", + "\1\50\10\uffff\1\47", + "\1\51", + "", + "\1\53", + "", + "\1\55", + "\1\56\20\uffff\1\57\2\uffff\1\60", + "\1\62\6\uffff\1\63\2\uffff\1\61", + "\1\64", + "", + "", + "\1\65", + "", + "\1\67", + "", + "\1\71", + "", + "", + "", + "", + "\1\72", + "\1\73", + "", + "", + "", + "\1\76\4\uffff\1\75", + "\47\100\1\uffff\64\100\1\77\uffa3\100", + "", + "", + "", + "", + "", + "", + "\1\101", + "", + "", + "\1\102", + "\1\103", + "\1\104", + "", + "", + "", + "", + "\1\105", + "\1\106", + "\1\110\5\uffff\1\107", + "\1\111", + "\1\112", + "\1\113", + "\1\114", + "\1\115", + "", + "", + "", + "", + "\1\116", + "\1\117", + "", + "", + "", + "", + "\42\132\1\125\4\132\1\126\26\132\1\130\35\132\1\127\5\132\1"+ + "\123\3\132\1\124\7\132\1\120\3\132\1\121\1\132\1\122\1\131\uff8a"+ + "\132", + "\47\133\1\134\uffd8\133", + "\1\135", + "\1\136", + "\1\137", + "\1\140", + "\1\141", + "\1\142", + "\1\143", + "\1\144", + "\1\145", + "\1\146", + "\1\147", + "\1\150", + "\1\151", + "\1\152", + "\1\153", + "\47\133\1\134\uffd8\133", + "\47\133\1\134\uffd8\133", + "\47\133\1\134\uffd8\133", + "\47\133\1\134\uffd8\133", + "\47\133\1\134\uffd8\133", + "\47\133\1\134\uffd8\133", + "\47\133\1\134\uffd8\133", + "\47\133\1\134\uffd8\133", + "\47\133\1\134\uffd8\133", + "\47\133\1\134\10\133\12\154\7\133\6\154\32\133\6\154\uff99"+ + "\133", + "\47\133\1\134\uffd8\133", + "", + "", + "\1\156", + "\1\157", + "\1\160", + "\1\161", + "\1\162", + "\1\163", + "\1\164", + "\1\165", + "\1\166", + "\12\44\7\uffff\32\44\4\uffff\1\44\1\uffff\32\44", + "\1\170", + "\1\171", + "\1\172", + "\1\173", + "\1\174", + "\60\133\12\175\7\133\6\175\32\133\6\175\uff99\133", + "", + "\1\176", + "\12\44\7\uffff\32\44\4\uffff\1\44\1\uffff\32\44", + "\1\u0080", + "\1\u0081", + "\12\44\7\uffff\32\44\4\uffff\1\44\1\uffff\32\44", + "\1\u0083", + "\1\u0084", + "\1\u0085", + "\1\u0086", + "", + "\1\u0087", + "\1\u0088", + "\1\u0089", + "\1\u008a", + "\12\44\7\uffff\32\44\4\uffff\1\44\1\uffff\32\44", + "\60\133\12\u008c\7\133\6\u008c\32\133\6\u008c\uff99\133", + "\1\u008d", + "", + "\1\u008e", + "\1\u008f", + "", + "\12\44\7\uffff\32\44\4\uffff\1\44\1\uffff\32\44", + "\1\u0091", + "\1\u0092", + "\12\44\7\uffff\32\44\4\uffff\1\44\1\uffff\32\44", + "\12\44\7\uffff\32\44\4\uffff\1\44\1\uffff\32\44", + "\2\u0095\2\uffff\1\u0095\22\uffff\1\u0095\16\uffff\1\u0095"+ + "\113\uffff\1\u0095", + "\1\u0096", + "\1\u0097", + "", + "\60\133\12\u0098\7\133\6\u0098\32\133\6\u0098\uff99\133", + "\1\u0099", + "\1\u009a", + "\12\44\7\uffff\32\44\4\uffff\1\44\1\uffff\32\44", + "", + "\1\u009c", + "\12\44\7\uffff\32\44\4\uffff\1\44\1\uffff\32\44", + "", + "", + "", + "\12\44\7\uffff\32\44\4\uffff\1\44\1\uffff\32\44", + "\12\44\7\uffff\32\44\4\uffff\1\44\1\uffff\32\44", + "\47\133\1\134\uffd8\133", + "\2\u00a0\2\uffff\1\u00a0\22\uffff\1\u00a0\16\uffff\1\u00a0"+ + "\113\uffff\1\u00a0", + "\12\44\7\uffff\32\44\4\uffff\1\44\1\uffff\32\44", + "", + "\1\u00a2", + "", + "", + "", + "", + "", + "\12\44\7\uffff\32\44\4\uffff\1\44\1\uffff\32\44", + "" + }; + + static final short[] DFA22_eot = DFA.unpackEncodedString(DFA22_eotS); + static final short[] DFA22_eof = DFA.unpackEncodedString(DFA22_eofS); + static final char[] DFA22_min = DFA.unpackEncodedStringToUnsignedChars(DFA22_minS); + static final char[] DFA22_max = DFA.unpackEncodedStringToUnsignedChars(DFA22_maxS); + static final short[] DFA22_accept = DFA.unpackEncodedString(DFA22_acceptS); + static final short[] DFA22_special = DFA.unpackEncodedString(DFA22_specialS); + static final short[][] DFA22_transition; + + static { + int numStates = DFA22_transitionS.length; + DFA22_transition = new short[numStates][]; + for (int i=0; i='0' && LA22_125<='9')||(LA22_125>='A' && LA22_125<='F')||(LA22_125>='a' && LA22_125<='f')) ) {s = 140;} + + else if ( ((LA22_125>='\u0000' && LA22_125<='/')||(LA22_125>=':' && LA22_125<='@')||(LA22_125>='G' && LA22_125<='`')||(LA22_125>='g' && LA22_125<='\uFFFF')) ) {s = 91;} + + if ( s>=0 ) return s; + break; + case 1 : + int LA22_152 = input.LA(1); + + s = -1; + if ( (LA22_152=='\'') ) {s = 92;} + + else if ( ((LA22_152>='\u0000' && LA22_152<='&')||(LA22_152>='(' && LA22_152<='\uFFFF')) ) {s = 91;} + + if ( s>=0 ) return s; + break; + case 2 : + int LA22_85 = input.LA(1); + + s = -1; + if ( (LA22_85=='\'') ) {s = 92;} + + else if ( ((LA22_85>='\u0000' && LA22_85<='&')||(LA22_85>='(' && LA22_85<='\uFFFF')) ) {s = 91;} + + if ( s>=0 ) return s; + break; + case 3 : + int LA22_81 = input.LA(1); + + s = -1; + if ( ((LA22_81>='\u0000' && LA22_81<='&')||(LA22_81>='(' && LA22_81<='\uFFFF')) ) {s = 91;} + + else if ( (LA22_81=='\'') ) {s = 92;} + + if ( s>=0 ) return s; + break; + case 4 : + int LA22_89 = input.LA(1); + + s = -1; + if ( ((LA22_89>='\u0000' && LA22_89<='&')||(LA22_89>='(' && LA22_89<='/')||(LA22_89>=':' && LA22_89<='@')||(LA22_89>='G' && LA22_89<='`')||(LA22_89>='g' && LA22_89<='\uFFFF')) ) {s = 91;} + + else if ( ((LA22_89>='0' && LA22_89<='9')||(LA22_89>='A' && LA22_89<='F')||(LA22_89>='a' && LA22_89<='f')) ) {s = 108;} + + else if ( (LA22_89=='\'') ) {s = 92;} + + if ( s>=0 ) return s; + break; + case 5 : + int LA22_28 = input.LA(1); + + s = -1; + if ( (LA22_28=='\\') ) {s = 63;} + + else if ( ((LA22_28>='\u0000' && LA22_28<='&')||(LA22_28>='(' && LA22_28<='[')||(LA22_28>=']' && LA22_28<='\uFFFF')) ) {s = 64;} + + if ( s>=0 ) return s; + break; + case 6 : + int LA22_83 = input.LA(1); + + s = -1; + if ( ((LA22_83>='\u0000' && LA22_83<='&')||(LA22_83>='(' && LA22_83<='\uFFFF')) ) {s = 91;} + + else if ( (LA22_83=='\'') ) {s = 92;} + + if ( s>=0 ) return s; + break; + case 7 : + int LA22_90 = input.LA(1); + + s = -1; + if ( ((LA22_90>='\u0000' && LA22_90<='&')||(LA22_90>='(' && LA22_90<='\uFFFF')) ) {s = 91;} + + else if ( (LA22_90=='\'') ) {s = 92;} + + if ( s>=0 ) return s; + break; + case 8 : + int LA22_140 = input.LA(1); + + s = -1; + if ( ((LA22_140>='0' && LA22_140<='9')||(LA22_140>='A' && LA22_140<='F')||(LA22_140>='a' && LA22_140<='f')) ) {s = 152;} + + else if ( ((LA22_140>='\u0000' && LA22_140<='/')||(LA22_140>=':' && LA22_140<='@')||(LA22_140>='G' && LA22_140<='`')||(LA22_140>='g' && LA22_140<='\uFFFF')) ) {s = 91;} + + if ( s>=0 ) return s; + break; + case 9 : + int LA22_84 = input.LA(1); + + s = -1; + if ( ((LA22_84>='\u0000' && LA22_84<='&')||(LA22_84>='(' && LA22_84<='\uFFFF')) ) {s = 91;} + + else if ( (LA22_84=='\'') ) {s = 92;} + + if ( s>=0 ) return s; + break; + case 10 : + int LA22_63 = input.LA(1); + + s = -1; + if ( (LA22_63=='n') ) {s = 80;} + + else if ( (LA22_63=='r') ) {s = 81;} + + else if ( (LA22_63=='t') ) {s = 82;} + + else if ( (LA22_63=='b') ) {s = 83;} + + else if ( (LA22_63=='f') ) {s = 84;} + + else if ( (LA22_63=='\"') ) {s = 85;} + + else if ( (LA22_63=='\'') ) {s = 86;} + + else if ( (LA22_63=='\\') ) {s = 87;} + + else if ( (LA22_63=='>') ) {s = 88;} + + else if ( (LA22_63=='u') ) {s = 89;} + + else if ( ((LA22_63>='\u0000' && LA22_63<='!')||(LA22_63>='#' && LA22_63<='&')||(LA22_63>='(' && LA22_63<='=')||(LA22_63>='?' && LA22_63<='[')||(LA22_63>=']' && LA22_63<='a')||(LA22_63>='c' && LA22_63<='e')||(LA22_63>='g' && LA22_63<='m')||(LA22_63>='o' && LA22_63<='q')||LA22_63=='s'||(LA22_63>='v' && LA22_63<='\uFFFF')) ) {s = 90;} + + if ( s>=0 ) return s; + break; + case 11 : + int LA22_80 = input.LA(1); + + s = -1; + if ( (LA22_80=='\'') ) {s = 92;} + + else if ( ((LA22_80>='\u0000' && LA22_80<='&')||(LA22_80>='(' && LA22_80<='\uFFFF')) ) {s = 91;} + + if ( s>=0 ) return s; + break; + case 12 : + int LA22_82 = input.LA(1); + + s = -1; + if ( ((LA22_82>='\u0000' && LA22_82<='&')||(LA22_82>='(' && LA22_82<='\uFFFF')) ) {s = 91;} + + else if ( (LA22_82=='\'') ) {s = 92;} + + if ( s>=0 ) return s; + break; + case 13 : + int LA22_88 = input.LA(1); + + s = -1; + if ( ((LA22_88>='\u0000' && LA22_88<='&')||(LA22_88>='(' && LA22_88<='\uFFFF')) ) {s = 91;} + + else if ( (LA22_88=='\'') ) {s = 92;} + + if ( s>=0 ) return s; + break; + case 14 : + int LA22_87 = input.LA(1); + + s = -1; + if ( ((LA22_87>='\u0000' && LA22_87<='&')||(LA22_87>='(' && LA22_87<='\uFFFF')) ) {s = 91;} + + else if ( (LA22_87=='\'') ) {s = 92;} + + if ( s>=0 ) return s; + break; + case 15 : + int LA22_108 = input.LA(1); + + s = -1; + if ( ((LA22_108>='0' && LA22_108<='9')||(LA22_108>='A' && LA22_108<='F')||(LA22_108>='a' && LA22_108<='f')) ) {s = 125;} + + else if ( ((LA22_108>='\u0000' && LA22_108<='/')||(LA22_108>=':' && LA22_108<='@')||(LA22_108>='G' && LA22_108<='`')||(LA22_108>='g' && LA22_108<='\uFFFF')) ) {s = 91;} + + if ( s>=0 ) return s; + break; + case 16 : + int LA22_64 = input.LA(1); + + s = -1; + if ( ((LA22_64>='\u0000' && LA22_64<='&')||(LA22_64>='(' && LA22_64<='\uFFFF')) ) {s = 91;} + + else if ( (LA22_64=='\'') ) {s = 92;} + + if ( s>=0 ) return s; + break; + case 17 : + int LA22_86 = input.LA(1); + + s = -1; + if ( (LA22_86=='\'') ) {s = 92;} + + else if ( ((LA22_86>='\u0000' && LA22_86<='&')||(LA22_86>='(' && LA22_86<='\uFFFF')) ) {s = 91;} + + if ( s>=0 ) return s; + break; + } + NoViableAltException nvae = + new NoViableAltException(getDescription(), 22, _s, input); + error(nvae); + throw nvae; + } + } + + +} \ No newline at end of file diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/ANTLRv3Parser.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/ANTLRv3Parser.java new file mode 100644 index 0000000..dabf4d3 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/ANTLRv3Parser.java @@ -0,0 +1,8727 @@ +// $ANTLR 3.1.1 /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g 2009-01-26 16:22:51 + +package org.antlr.gunit.swingui.parsers; + +import java.util.List; + + +import org.antlr.runtime.*; +import java.util.Stack; +import java.util.List; +import java.util.ArrayList; +import java.util.Map; +import java.util.HashMap; + +import org.antlr.runtime.tree.*; + +/** ANTLR v3 grammar written in ANTLR v3 with AST construction */ +public class ANTLRv3Parser extends Parser { + public static final String[] tokenNames = new String[] { + "", "", "", "", "DOC_COMMENT", "PARSER", "LEXER", "RULE", "BLOCK", "OPTIONAL", "CLOSURE", "POSITIVE_CLOSURE", "SYNPRED", "RANGE", "CHAR_RANGE", "EPSILON", "ALT", "EOR", "EOB", "EOA", "ID", "ARG", "ARGLIST", "RET", "LEXER_GRAMMAR", "PARSER_GRAMMAR", "TREE_GRAMMAR", "COMBINED_GRAMMAR", "INITACTION", "LABEL", "TEMPLATE", "SCOPE", "SEMPRED", "GATED_SEMPRED", "SYN_SEMPRED", "BACKTRACK_SEMPRED", "FRAGMENT", "TREE_BEGIN", "ROOT", "BANG", "REWRITE", "TOKENS", "TOKEN_REF", "STRING_LITERAL", "CHAR_LITERAL", "ACTION", "OPTIONS", "INT", "ARG_ACTION", "RULE_REF", "DOUBLE_QUOTE_STRING_LITERAL", "DOUBLE_ANGLE_STRING_LITERAL", "SRC", "SL_COMMENT", "ML_COMMENT", "LITERAL_CHAR", "ESC", "XDIGIT", "NESTED_ARG_ACTION", "ACTION_STRING_LITERAL", "ACTION_CHAR_LITERAL", "NESTED_ACTION", "ACTION_ESC", "WS_LOOP", "WS", "'lexer'", "'parser'", "'tree'", "'grammar'", "';'", "'}'", "'='", "'@'", "'::'", "'*'", "'protected'", "'public'", "'private'", "'returns'", "':'", "'throws'", "','", "'('", "'|'", "')'", "'catch'", "'finally'", "'+='", "'=>'", "'~'", "'?'", "'+'", "'.'", "'$'" + }; + public static final int CLOSURE=10; + public static final int DOUBLE_QUOTE_STRING_LITERAL=50; + public static final int TEMPLATE=30; + public static final int ARGLIST=22; + public static final int PARSER_GRAMMAR=25; + public static final int BANG=39; + public static final int T__73=73; + public static final int GATED_SEMPRED=33; + public static final int T__72=72; + public static final int T__70=70; + public static final int ACTION_ESC=62; + public static final int LEXER=6; + public static final int STRING_LITERAL=43; + public static final int OPTIONAL=9; + public static final int ACTION_CHAR_LITERAL=60; + public static final int RANGE=13; + public static final int DOUBLE_ANGLE_STRING_LITERAL=51; + public static final int T__89=89; + public static final int WS=64; + public static final int T__79=79; + public static final int T__66=66; + public static final int ARG_ACTION=48; + public static final int TOKEN_REF=42; + public static final int WS_LOOP=63; + public static final int T__92=92; + public static final int T__88=88; + public static final int XDIGIT=57; + public static final int TREE_BEGIN=37; + public static final int T__90=90; + public static final int INITACTION=28; + public static final int POSITIVE_CLOSURE=11; + public static final int T__91=91; + public static final int T__85=85; + public static final int CHAR_RANGE=14; + public static final int RET=23; + public static final int LITERAL_CHAR=55; + public static final int DOC_COMMENT=4; + public static final int T__93=93; + public static final int T__86=86; + public static final int NESTED_ACTION=61; + public static final int T__80=80; + public static final int T__69=69; + public static final int RULE=7; + public static final int T__65=65; + public static final int LABEL=29; + public static final int SYN_SEMPRED=34; + public static final int BACKTRACK_SEMPRED=35; + public static final int REWRITE=40; + public static final int T__67=67; + public static final int TREE_GRAMMAR=26; + public static final int T__87=87; + public static final int BLOCK=8; + public static final int T__74=74; + public static final int ALT=16; + public static final int T__68=68; + public static final int CHAR_LITERAL=44; + public static final int FRAGMENT=36; + public static final int INT=47; + public static final int PARSER=5; + public static final int EPSILON=15; + public static final int SCOPE=31; + public static final int TOKENS=41; + public static final int OPTIONS=46; + public static final int EOR=17; + public static final int ML_COMMENT=54; + public static final int SRC=52; + public static final int SL_COMMENT=53; + public static final int ID=20; + public static final int COMBINED_GRAMMAR=27; + public static final int EOB=18; + public static final int T__78=78; + public static final int SYNPRED=12; + public static final int EOA=19; + public static final int ACTION=45; + public static final int T__77=77; + public static final int ESC=56; + public static final int RULE_REF=49; + public static final int T__84=84; + public static final int SEMPRED=32; + public static final int NESTED_ARG_ACTION=58; + public static final int ROOT=38; + public static final int T__75=75; + public static final int ACTION_STRING_LITERAL=59; + public static final int ARG=21; + public static final int EOF=-1; + public static final int T__76=76; + public static final int T__82=82; + public static final int T__81=81; + public static final int T__83=83; + public static final int T__71=71; + public static final int LEXER_GRAMMAR=24; + + // delegates + // delegators + + + public ANTLRv3Parser(TokenStream input) { + this(input, new RecognizerSharedState()); + } + public ANTLRv3Parser(TokenStream input, RecognizerSharedState state) { + super(input, state); + + } + + protected TreeAdaptor adaptor = new CommonTreeAdaptor(); + + public void setTreeAdaptor(TreeAdaptor adaptor) { + this.adaptor = adaptor; + } + public TreeAdaptor getTreeAdaptor() { + return adaptor; + } + + public String[] getTokenNames() { return ANTLRv3Parser.tokenNames; } + public String getGrammarFileName() { return "/Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g"; } + + + int gtype; + public List rules; + + + public static class grammarDef_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "grammarDef" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:94:1: grammarDef : ( DOC_COMMENT )? ( 'lexer' | 'parser' | 'tree' | ) g= 'grammar' id ';' ( optionsSpec )? ( tokensSpec )? ( attrScope )* ( action )* ( rule )+ EOF -> ^( id ( DOC_COMMENT )? ( optionsSpec )? ( tokensSpec )? ( attrScope )* ( action )* ( rule )+ ) ; + public final ANTLRv3Parser.grammarDef_return grammarDef() throws RecognitionException { + ANTLRv3Parser.grammarDef_return retval = new ANTLRv3Parser.grammarDef_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token g=null; + Token DOC_COMMENT1=null; + Token string_literal2=null; + Token string_literal3=null; + Token string_literal4=null; + Token char_literal6=null; + Token EOF12=null; + ANTLRv3Parser.id_return id5 = null; + + ANTLRv3Parser.optionsSpec_return optionsSpec7 = null; + + ANTLRv3Parser.tokensSpec_return tokensSpec8 = null; + + ANTLRv3Parser.attrScope_return attrScope9 = null; + + ANTLRv3Parser.action_return action10 = null; + + ANTLRv3Parser.rule_return rule11 = null; + + + CommonTree g_tree=null; + CommonTree DOC_COMMENT1_tree=null; + CommonTree string_literal2_tree=null; + CommonTree string_literal3_tree=null; + CommonTree string_literal4_tree=null; + CommonTree char_literal6_tree=null; + CommonTree EOF12_tree=null; + RewriteRuleTokenStream stream_65=new RewriteRuleTokenStream(adaptor,"token 65"); + RewriteRuleTokenStream stream_68=new RewriteRuleTokenStream(adaptor,"token 68"); + RewriteRuleTokenStream stream_69=new RewriteRuleTokenStream(adaptor,"token 69"); + RewriteRuleTokenStream stream_DOC_COMMENT=new RewriteRuleTokenStream(adaptor,"token DOC_COMMENT"); + RewriteRuleTokenStream stream_EOF=new RewriteRuleTokenStream(adaptor,"token EOF"); + RewriteRuleTokenStream stream_66=new RewriteRuleTokenStream(adaptor,"token 66"); + RewriteRuleTokenStream stream_67=new RewriteRuleTokenStream(adaptor,"token 67"); + RewriteRuleSubtreeStream stream_attrScope=new RewriteRuleSubtreeStream(adaptor,"rule attrScope"); + RewriteRuleSubtreeStream stream_action=new RewriteRuleSubtreeStream(adaptor,"rule action"); + RewriteRuleSubtreeStream stream_rule=new RewriteRuleSubtreeStream(adaptor,"rule rule"); + RewriteRuleSubtreeStream stream_tokensSpec=new RewriteRuleSubtreeStream(adaptor,"rule tokensSpec"); + RewriteRuleSubtreeStream stream_optionsSpec=new RewriteRuleSubtreeStream(adaptor,"rule optionsSpec"); + RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:95:5: ( ( DOC_COMMENT )? ( 'lexer' | 'parser' | 'tree' | ) g= 'grammar' id ';' ( optionsSpec )? ( tokensSpec )? ( attrScope )* ( action )* ( rule )+ EOF -> ^( id ( DOC_COMMENT )? ( optionsSpec )? ( tokensSpec )? ( attrScope )* ( action )* ( rule )+ ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:95:9: ( DOC_COMMENT )? ( 'lexer' | 'parser' | 'tree' | ) g= 'grammar' id ';' ( optionsSpec )? ( tokensSpec )? ( attrScope )* ( action )* ( rule )+ EOF + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:95:9: ( DOC_COMMENT )? + int alt1=2; + int LA1_0 = input.LA(1); + + if ( (LA1_0==DOC_COMMENT) ) { + alt1=1; + } + switch (alt1) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:95:9: DOC_COMMENT + { + DOC_COMMENT1=(Token)match(input,DOC_COMMENT,FOLLOW_DOC_COMMENT_in_grammarDef347); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_DOC_COMMENT.add(DOC_COMMENT1); + + + } + break; + + } + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:96:6: ( 'lexer' | 'parser' | 'tree' | ) + int alt2=4; + switch ( input.LA(1) ) { + case 65: + { + alt2=1; + } + break; + case 66: + { + alt2=2; + } + break; + case 67: + { + alt2=3; + } + break; + case 68: + { + alt2=4; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 2, 0, input); + + throw nvae; + } + + switch (alt2) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:96:8: 'lexer' + { + string_literal2=(Token)match(input,65,FOLLOW_65_in_grammarDef357); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_65.add(string_literal2); + + if ( state.backtracking==0 ) { + gtype=LEXER_GRAMMAR; + } + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:97:10: 'parser' + { + string_literal3=(Token)match(input,66,FOLLOW_66_in_grammarDef375); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_66.add(string_literal3); + + if ( state.backtracking==0 ) { + gtype=PARSER_GRAMMAR; + } + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:98:10: 'tree' + { + string_literal4=(Token)match(input,67,FOLLOW_67_in_grammarDef391); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_67.add(string_literal4); + + if ( state.backtracking==0 ) { + gtype=TREE_GRAMMAR; + } + + } + break; + case 4 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:99:14: + { + if ( state.backtracking==0 ) { + gtype=COMBINED_GRAMMAR; + } + + } + break; + + } + + g=(Token)match(input,68,FOLLOW_68_in_grammarDef432); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_68.add(g); + + pushFollow(FOLLOW_id_in_grammarDef434); + id5=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_id.add(id5.getTree()); + char_literal6=(Token)match(input,69,FOLLOW_69_in_grammarDef436); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_69.add(char_literal6); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:101:25: ( optionsSpec )? + int alt3=2; + int LA3_0 = input.LA(1); + + if ( (LA3_0==OPTIONS) ) { + alt3=1; + } + switch (alt3) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:101:25: optionsSpec + { + pushFollow(FOLLOW_optionsSpec_in_grammarDef438); + optionsSpec7=optionsSpec(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_optionsSpec.add(optionsSpec7.getTree()); + + } + break; + + } + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:101:38: ( tokensSpec )? + int alt4=2; + int LA4_0 = input.LA(1); + + if ( (LA4_0==TOKENS) ) { + alt4=1; + } + switch (alt4) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:101:38: tokensSpec + { + pushFollow(FOLLOW_tokensSpec_in_grammarDef441); + tokensSpec8=tokensSpec(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_tokensSpec.add(tokensSpec8.getTree()); + + } + break; + + } + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:101:50: ( attrScope )* + loop5: + do { + int alt5=2; + int LA5_0 = input.LA(1); + + if ( (LA5_0==SCOPE) ) { + alt5=1; + } + + + switch (alt5) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:101:50: attrScope + { + pushFollow(FOLLOW_attrScope_in_grammarDef444); + attrScope9=attrScope(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_attrScope.add(attrScope9.getTree()); + + } + break; + + default : + break loop5; + } + } while (true); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:101:61: ( action )* + loop6: + do { + int alt6=2; + int LA6_0 = input.LA(1); + + if ( (LA6_0==72) ) { + alt6=1; + } + + + switch (alt6) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:101:61: action + { + pushFollow(FOLLOW_action_in_grammarDef447); + action10=action(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_action.add(action10.getTree()); + + } + break; + + default : + break loop6; + } + } while (true); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:102:6: ( rule )+ + int cnt7=0; + loop7: + do { + int alt7=2; + int LA7_0 = input.LA(1); + + if ( (LA7_0==DOC_COMMENT||LA7_0==FRAGMENT||LA7_0==TOKEN_REF||LA7_0==RULE_REF||(LA7_0>=75 && LA7_0<=77)) ) { + alt7=1; + } + + + switch (alt7) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:102:6: rule + { + pushFollow(FOLLOW_rule_in_grammarDef455); + rule11=rule(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_rule.add(rule11.getTree()); + + } + break; + + default : + if ( cnt7 >= 1 ) break loop7; + if (state.backtracking>0) {state.failed=true; return retval;} + EarlyExitException eee = + new EarlyExitException(7, input); + throw eee; + } + cnt7++; + } while (true); + + EOF12=(Token)match(input,EOF,FOLLOW_EOF_in_grammarDef463); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_EOF.add(EOF12); + + + + // AST REWRITE + // elements: tokensSpec, id, DOC_COMMENT, action, rule, optionsSpec, attrScope + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 104:6: -> ^( id ( DOC_COMMENT )? ( optionsSpec )? ( tokensSpec )? ( attrScope )* ( action )* ( rule )+ ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:104:9: ^( id ( DOC_COMMENT )? ( optionsSpec )? ( tokensSpec )? ( attrScope )* ( action )* ( rule )+ ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(adaptor.create(gtype,g), root_1); + + adaptor.addChild(root_1, stream_id.nextTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:105:12: ( DOC_COMMENT )? + if ( stream_DOC_COMMENT.hasNext() ) { + adaptor.addChild(root_1, stream_DOC_COMMENT.nextNode()); + + } + stream_DOC_COMMENT.reset(); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:105:25: ( optionsSpec )? + if ( stream_optionsSpec.hasNext() ) { + adaptor.addChild(root_1, stream_optionsSpec.nextTree()); + + } + stream_optionsSpec.reset(); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:105:38: ( tokensSpec )? + if ( stream_tokensSpec.hasNext() ) { + adaptor.addChild(root_1, stream_tokensSpec.nextTree()); + + } + stream_tokensSpec.reset(); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:105:50: ( attrScope )* + while ( stream_attrScope.hasNext() ) { + adaptor.addChild(root_1, stream_attrScope.nextTree()); + + } + stream_attrScope.reset(); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:105:61: ( action )* + while ( stream_action.hasNext() ) { + adaptor.addChild(root_1, stream_action.nextTree()); + + } + stream_action.reset(); + if ( !(stream_rule.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_rule.hasNext() ) { + adaptor.addChild(root_1, stream_rule.nextTree()); + + } + stream_rule.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "grammarDef" + + public static class tokensSpec_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "tokensSpec" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:109:1: tokensSpec : TOKENS ( tokenSpec )+ '}' -> ^( TOKENS ( tokenSpec )+ ) ; + public final ANTLRv3Parser.tokensSpec_return tokensSpec() throws RecognitionException { + ANTLRv3Parser.tokensSpec_return retval = new ANTLRv3Parser.tokensSpec_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token TOKENS13=null; + Token char_literal15=null; + ANTLRv3Parser.tokenSpec_return tokenSpec14 = null; + + + CommonTree TOKENS13_tree=null; + CommonTree char_literal15_tree=null; + RewriteRuleTokenStream stream_TOKENS=new RewriteRuleTokenStream(adaptor,"token TOKENS"); + RewriteRuleTokenStream stream_70=new RewriteRuleTokenStream(adaptor,"token 70"); + RewriteRuleSubtreeStream stream_tokenSpec=new RewriteRuleSubtreeStream(adaptor,"rule tokenSpec"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:110:2: ( TOKENS ( tokenSpec )+ '}' -> ^( TOKENS ( tokenSpec )+ ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:110:4: TOKENS ( tokenSpec )+ '}' + { + TOKENS13=(Token)match(input,TOKENS,FOLLOW_TOKENS_in_tokensSpec524); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_TOKENS.add(TOKENS13); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:110:11: ( tokenSpec )+ + int cnt8=0; + loop8: + do { + int alt8=2; + int LA8_0 = input.LA(1); + + if ( (LA8_0==TOKEN_REF) ) { + alt8=1; + } + + + switch (alt8) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:110:11: tokenSpec + { + pushFollow(FOLLOW_tokenSpec_in_tokensSpec526); + tokenSpec14=tokenSpec(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_tokenSpec.add(tokenSpec14.getTree()); + + } + break; + + default : + if ( cnt8 >= 1 ) break loop8; + if (state.backtracking>0) {state.failed=true; return retval;} + EarlyExitException eee = + new EarlyExitException(8, input); + throw eee; + } + cnt8++; + } while (true); + + char_literal15=(Token)match(input,70,FOLLOW_70_in_tokensSpec529); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_70.add(char_literal15); + + + + // AST REWRITE + // elements: TOKENS, tokenSpec + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 110:26: -> ^( TOKENS ( tokenSpec )+ ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:110:29: ^( TOKENS ( tokenSpec )+ ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_TOKENS.nextNode(), root_1); + + if ( !(stream_tokenSpec.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_tokenSpec.hasNext() ) { + adaptor.addChild(root_1, stream_tokenSpec.nextTree()); + + } + stream_tokenSpec.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "tokensSpec" + + public static class tokenSpec_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "tokenSpec" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:113:1: tokenSpec : TOKEN_REF ( '=' (lit= STRING_LITERAL | lit= CHAR_LITERAL ) -> ^( '=' TOKEN_REF $lit) | -> TOKEN_REF ) ';' ; + public final ANTLRv3Parser.tokenSpec_return tokenSpec() throws RecognitionException { + ANTLRv3Parser.tokenSpec_return retval = new ANTLRv3Parser.tokenSpec_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token lit=null; + Token TOKEN_REF16=null; + Token char_literal17=null; + Token char_literal18=null; + + CommonTree lit_tree=null; + CommonTree TOKEN_REF16_tree=null; + CommonTree char_literal17_tree=null; + CommonTree char_literal18_tree=null; + RewriteRuleTokenStream stream_71=new RewriteRuleTokenStream(adaptor,"token 71"); + RewriteRuleTokenStream stream_TOKEN_REF=new RewriteRuleTokenStream(adaptor,"token TOKEN_REF"); + RewriteRuleTokenStream stream_CHAR_LITERAL=new RewriteRuleTokenStream(adaptor,"token CHAR_LITERAL"); + RewriteRuleTokenStream stream_69=new RewriteRuleTokenStream(adaptor,"token 69"); + RewriteRuleTokenStream stream_STRING_LITERAL=new RewriteRuleTokenStream(adaptor,"token STRING_LITERAL"); + + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:114:2: ( TOKEN_REF ( '=' (lit= STRING_LITERAL | lit= CHAR_LITERAL ) -> ^( '=' TOKEN_REF $lit) | -> TOKEN_REF ) ';' ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:114:4: TOKEN_REF ( '=' (lit= STRING_LITERAL | lit= CHAR_LITERAL ) -> ^( '=' TOKEN_REF $lit) | -> TOKEN_REF ) ';' + { + TOKEN_REF16=(Token)match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_tokenSpec549); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_TOKEN_REF.add(TOKEN_REF16); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:115:3: ( '=' (lit= STRING_LITERAL | lit= CHAR_LITERAL ) -> ^( '=' TOKEN_REF $lit) | -> TOKEN_REF ) + int alt10=2; + int LA10_0 = input.LA(1); + + if ( (LA10_0==71) ) { + alt10=1; + } + else if ( (LA10_0==69) ) { + alt10=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 10, 0, input); + + throw nvae; + } + switch (alt10) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:115:5: '=' (lit= STRING_LITERAL | lit= CHAR_LITERAL ) + { + char_literal17=(Token)match(input,71,FOLLOW_71_in_tokenSpec555); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_71.add(char_literal17); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:115:9: (lit= STRING_LITERAL | lit= CHAR_LITERAL ) + int alt9=2; + int LA9_0 = input.LA(1); + + if ( (LA9_0==STRING_LITERAL) ) { + alt9=1; + } + else if ( (LA9_0==CHAR_LITERAL) ) { + alt9=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 9, 0, input); + + throw nvae; + } + switch (alt9) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:115:10: lit= STRING_LITERAL + { + lit=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_tokenSpec560); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_STRING_LITERAL.add(lit); + + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:115:29: lit= CHAR_LITERAL + { + lit=(Token)match(input,CHAR_LITERAL,FOLLOW_CHAR_LITERAL_in_tokenSpec564); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_CHAR_LITERAL.add(lit); + + + } + break; + + } + + + + // AST REWRITE + // elements: TOKEN_REF, 71, lit + // token labels: lit + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleTokenStream stream_lit=new RewriteRuleTokenStream(adaptor,"token lit",lit); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 115:47: -> ^( '=' TOKEN_REF $lit) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:115:50: ^( '=' TOKEN_REF $lit) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_71.nextNode(), root_1); + + adaptor.addChild(root_1, stream_TOKEN_REF.nextNode()); + adaptor.addChild(root_1, stream_lit.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:116:16: + { + + // AST REWRITE + // elements: TOKEN_REF + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 116:16: -> TOKEN_REF + { + adaptor.addChild(root_0, stream_TOKEN_REF.nextNode()); + + } + + retval.tree = root_0;} + } + break; + + } + + char_literal18=(Token)match(input,69,FOLLOW_69_in_tokenSpec603); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_69.add(char_literal18); + + + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "tokenSpec" + + public static class attrScope_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "attrScope" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:121:1: attrScope : 'scope' id ACTION -> ^( 'scope' id ACTION ) ; + public final ANTLRv3Parser.attrScope_return attrScope() throws RecognitionException { + ANTLRv3Parser.attrScope_return retval = new ANTLRv3Parser.attrScope_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token string_literal19=null; + Token ACTION21=null; + ANTLRv3Parser.id_return id20 = null; + + + CommonTree string_literal19_tree=null; + CommonTree ACTION21_tree=null; + RewriteRuleTokenStream stream_ACTION=new RewriteRuleTokenStream(adaptor,"token ACTION"); + RewriteRuleTokenStream stream_SCOPE=new RewriteRuleTokenStream(adaptor,"token SCOPE"); + RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:122:2: ( 'scope' id ACTION -> ^( 'scope' id ACTION ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:122:4: 'scope' id ACTION + { + string_literal19=(Token)match(input,SCOPE,FOLLOW_SCOPE_in_attrScope614); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_SCOPE.add(string_literal19); + + pushFollow(FOLLOW_id_in_attrScope616); + id20=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_id.add(id20.getTree()); + ACTION21=(Token)match(input,ACTION,FOLLOW_ACTION_in_attrScope618); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ACTION.add(ACTION21); + + + + // AST REWRITE + // elements: SCOPE, id, ACTION + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 122:22: -> ^( 'scope' id ACTION ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:122:25: ^( 'scope' id ACTION ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_SCOPE.nextNode(), root_1); + + adaptor.addChild(root_1, stream_id.nextTree()); + adaptor.addChild(root_1, stream_ACTION.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "attrScope" + + public static class action_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "action" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:125:1: action : '@' ( actionScopeName '::' )? id ACTION -> ^( '@' ( actionScopeName )? id ACTION ) ; + public final ANTLRv3Parser.action_return action() throws RecognitionException { + ANTLRv3Parser.action_return retval = new ANTLRv3Parser.action_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token char_literal22=null; + Token string_literal24=null; + Token ACTION26=null; + ANTLRv3Parser.actionScopeName_return actionScopeName23 = null; + + ANTLRv3Parser.id_return id25 = null; + + + CommonTree char_literal22_tree=null; + CommonTree string_literal24_tree=null; + CommonTree ACTION26_tree=null; + RewriteRuleTokenStream stream_ACTION=new RewriteRuleTokenStream(adaptor,"token ACTION"); + RewriteRuleTokenStream stream_72=new RewriteRuleTokenStream(adaptor,"token 72"); + RewriteRuleTokenStream stream_73=new RewriteRuleTokenStream(adaptor,"token 73"); + RewriteRuleSubtreeStream stream_actionScopeName=new RewriteRuleSubtreeStream(adaptor,"rule actionScopeName"); + RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:127:2: ( '@' ( actionScopeName '::' )? id ACTION -> ^( '@' ( actionScopeName )? id ACTION ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:127:4: '@' ( actionScopeName '::' )? id ACTION + { + char_literal22=(Token)match(input,72,FOLLOW_72_in_action641); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_72.add(char_literal22); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:127:8: ( actionScopeName '::' )? + int alt11=2; + switch ( input.LA(1) ) { + case TOKEN_REF: + { + int LA11_1 = input.LA(2); + + if ( (LA11_1==73) ) { + alt11=1; + } + } + break; + case RULE_REF: + { + int LA11_2 = input.LA(2); + + if ( (LA11_2==73) ) { + alt11=1; + } + } + break; + case 65: + case 66: + { + alt11=1; + } + break; + } + + switch (alt11) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:127:9: actionScopeName '::' + { + pushFollow(FOLLOW_actionScopeName_in_action644); + actionScopeName23=actionScopeName(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_actionScopeName.add(actionScopeName23.getTree()); + string_literal24=(Token)match(input,73,FOLLOW_73_in_action646); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_73.add(string_literal24); + + + } + break; + + } + + pushFollow(FOLLOW_id_in_action650); + id25=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_id.add(id25.getTree()); + ACTION26=(Token)match(input,ACTION,FOLLOW_ACTION_in_action652); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ACTION.add(ACTION26); + + + + // AST REWRITE + // elements: ACTION, actionScopeName, id, 72 + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 127:42: -> ^( '@' ( actionScopeName )? id ACTION ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:127:45: ^( '@' ( actionScopeName )? id ACTION ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_72.nextNode(), root_1); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:127:51: ( actionScopeName )? + if ( stream_actionScopeName.hasNext() ) { + adaptor.addChild(root_1, stream_actionScopeName.nextTree()); + + } + stream_actionScopeName.reset(); + adaptor.addChild(root_1, stream_id.nextTree()); + adaptor.addChild(root_1, stream_ACTION.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "action" + + public static class actionScopeName_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "actionScopeName" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:130:1: actionScopeName : ( id | l= 'lexer' -> ID[$l] | p= 'parser' -> ID[$p] ); + public final ANTLRv3Parser.actionScopeName_return actionScopeName() throws RecognitionException { + ANTLRv3Parser.actionScopeName_return retval = new ANTLRv3Parser.actionScopeName_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token l=null; + Token p=null; + ANTLRv3Parser.id_return id27 = null; + + + CommonTree l_tree=null; + CommonTree p_tree=null; + RewriteRuleTokenStream stream_65=new RewriteRuleTokenStream(adaptor,"token 65"); + RewriteRuleTokenStream stream_66=new RewriteRuleTokenStream(adaptor,"token 66"); + + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:134:2: ( id | l= 'lexer' -> ID[$l] | p= 'parser' -> ID[$p] ) + int alt12=3; + switch ( input.LA(1) ) { + case TOKEN_REF: + case RULE_REF: + { + alt12=1; + } + break; + case 65: + { + alt12=2; + } + break; + case 66: + { + alt12=3; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 12, 0, input); + + throw nvae; + } + + switch (alt12) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:134:4: id + { + root_0 = (CommonTree)adaptor.nil(); + + pushFollow(FOLLOW_id_in_actionScopeName678); + id27=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, id27.getTree()); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:135:4: l= 'lexer' + { + l=(Token)match(input,65,FOLLOW_65_in_actionScopeName685); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_65.add(l); + + + + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 135:14: -> ID[$l] + { + adaptor.addChild(root_0, (CommonTree)adaptor.create(ID, l)); + + } + + retval.tree = root_0;} + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:136:9: p= 'parser' + { + p=(Token)match(input,66,FOLLOW_66_in_actionScopeName702); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_66.add(p); + + + + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 136:20: -> ID[$p] + { + adaptor.addChild(root_0, (CommonTree)adaptor.create(ID, p)); + + } + + retval.tree = root_0;} + } + break; + + } + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "actionScopeName" + + public static class optionsSpec_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "optionsSpec" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:139:1: optionsSpec : OPTIONS ( option ';' )+ '}' -> ^( OPTIONS ( option )+ ) ; + public final ANTLRv3Parser.optionsSpec_return optionsSpec() throws RecognitionException { + ANTLRv3Parser.optionsSpec_return retval = new ANTLRv3Parser.optionsSpec_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token OPTIONS28=null; + Token char_literal30=null; + Token char_literal31=null; + ANTLRv3Parser.option_return option29 = null; + + + CommonTree OPTIONS28_tree=null; + CommonTree char_literal30_tree=null; + CommonTree char_literal31_tree=null; + RewriteRuleTokenStream stream_OPTIONS=new RewriteRuleTokenStream(adaptor,"token OPTIONS"); + RewriteRuleTokenStream stream_70=new RewriteRuleTokenStream(adaptor,"token 70"); + RewriteRuleTokenStream stream_69=new RewriteRuleTokenStream(adaptor,"token 69"); + RewriteRuleSubtreeStream stream_option=new RewriteRuleSubtreeStream(adaptor,"rule option"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:140:2: ( OPTIONS ( option ';' )+ '}' -> ^( OPTIONS ( option )+ ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:140:4: OPTIONS ( option ';' )+ '}' + { + OPTIONS28=(Token)match(input,OPTIONS,FOLLOW_OPTIONS_in_optionsSpec718); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_OPTIONS.add(OPTIONS28); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:140:12: ( option ';' )+ + int cnt13=0; + loop13: + do { + int alt13=2; + int LA13_0 = input.LA(1); + + if ( (LA13_0==TOKEN_REF||LA13_0==RULE_REF) ) { + alt13=1; + } + + + switch (alt13) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:140:13: option ';' + { + pushFollow(FOLLOW_option_in_optionsSpec721); + option29=option(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_option.add(option29.getTree()); + char_literal30=(Token)match(input,69,FOLLOW_69_in_optionsSpec723); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_69.add(char_literal30); + + + } + break; + + default : + if ( cnt13 >= 1 ) break loop13; + if (state.backtracking>0) {state.failed=true; return retval;} + EarlyExitException eee = + new EarlyExitException(13, input); + throw eee; + } + cnt13++; + } while (true); + + char_literal31=(Token)match(input,70,FOLLOW_70_in_optionsSpec727); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_70.add(char_literal31); + + + + // AST REWRITE + // elements: option, OPTIONS + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 140:30: -> ^( OPTIONS ( option )+ ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:140:33: ^( OPTIONS ( option )+ ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_OPTIONS.nextNode(), root_1); + + if ( !(stream_option.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_option.hasNext() ) { + adaptor.addChild(root_1, stream_option.nextTree()); + + } + stream_option.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "optionsSpec" + + public static class option_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "option" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:143:1: option : id '=' optionValue -> ^( '=' id optionValue ) ; + public final ANTLRv3Parser.option_return option() throws RecognitionException { + ANTLRv3Parser.option_return retval = new ANTLRv3Parser.option_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token char_literal33=null; + ANTLRv3Parser.id_return id32 = null; + + ANTLRv3Parser.optionValue_return optionValue34 = null; + + + CommonTree char_literal33_tree=null; + RewriteRuleTokenStream stream_71=new RewriteRuleTokenStream(adaptor,"token 71"); + RewriteRuleSubtreeStream stream_optionValue=new RewriteRuleSubtreeStream(adaptor,"rule optionValue"); + RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:144:5: ( id '=' optionValue -> ^( '=' id optionValue ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:144:9: id '=' optionValue + { + pushFollow(FOLLOW_id_in_option752); + id32=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_id.add(id32.getTree()); + char_literal33=(Token)match(input,71,FOLLOW_71_in_option754); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_71.add(char_literal33); + + pushFollow(FOLLOW_optionValue_in_option756); + optionValue34=optionValue(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_optionValue.add(optionValue34.getTree()); + + + // AST REWRITE + // elements: id, 71, optionValue + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 144:28: -> ^( '=' id optionValue ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:144:31: ^( '=' id optionValue ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_71.nextNode(), root_1); + + adaptor.addChild(root_1, stream_id.nextTree()); + adaptor.addChild(root_1, stream_optionValue.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "option" + + public static class optionValue_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "optionValue" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:147:1: optionValue : ( id | STRING_LITERAL | CHAR_LITERAL | INT | s= '*' -> STRING_LITERAL[$s] ); + public final ANTLRv3Parser.optionValue_return optionValue() throws RecognitionException { + ANTLRv3Parser.optionValue_return retval = new ANTLRv3Parser.optionValue_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token s=null; + Token STRING_LITERAL36=null; + Token CHAR_LITERAL37=null; + Token INT38=null; + ANTLRv3Parser.id_return id35 = null; + + + CommonTree s_tree=null; + CommonTree STRING_LITERAL36_tree=null; + CommonTree CHAR_LITERAL37_tree=null; + CommonTree INT38_tree=null; + RewriteRuleTokenStream stream_74=new RewriteRuleTokenStream(adaptor,"token 74"); + + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:148:5: ( id | STRING_LITERAL | CHAR_LITERAL | INT | s= '*' -> STRING_LITERAL[$s] ) + int alt14=5; + switch ( input.LA(1) ) { + case TOKEN_REF: + case RULE_REF: + { + alt14=1; + } + break; + case STRING_LITERAL: + { + alt14=2; + } + break; + case CHAR_LITERAL: + { + alt14=3; + } + break; + case INT: + { + alt14=4; + } + break; + case 74: + { + alt14=5; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 14, 0, input); + + throw nvae; + } + + switch (alt14) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:148:9: id + { + root_0 = (CommonTree)adaptor.nil(); + + pushFollow(FOLLOW_id_in_optionValue785); + id35=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, id35.getTree()); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:149:9: STRING_LITERAL + { + root_0 = (CommonTree)adaptor.nil(); + + STRING_LITERAL36=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_optionValue795); if (state.failed) return retval; + if ( state.backtracking==0 ) { + STRING_LITERAL36_tree = (CommonTree)adaptor.create(STRING_LITERAL36); + adaptor.addChild(root_0, STRING_LITERAL36_tree); + } + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:150:9: CHAR_LITERAL + { + root_0 = (CommonTree)adaptor.nil(); + + CHAR_LITERAL37=(Token)match(input,CHAR_LITERAL,FOLLOW_CHAR_LITERAL_in_optionValue805); if (state.failed) return retval; + if ( state.backtracking==0 ) { + CHAR_LITERAL37_tree = (CommonTree)adaptor.create(CHAR_LITERAL37); + adaptor.addChild(root_0, CHAR_LITERAL37_tree); + } + + } + break; + case 4 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:151:9: INT + { + root_0 = (CommonTree)adaptor.nil(); + + INT38=(Token)match(input,INT,FOLLOW_INT_in_optionValue815); if (state.failed) return retval; + if ( state.backtracking==0 ) { + INT38_tree = (CommonTree)adaptor.create(INT38); + adaptor.addChild(root_0, INT38_tree); + } + + } + break; + case 5 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:152:7: s= '*' + { + s=(Token)match(input,74,FOLLOW_74_in_optionValue825); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_74.add(s); + + + + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 152:13: -> STRING_LITERAL[$s] + { + adaptor.addChild(root_0, (CommonTree)adaptor.create(STRING_LITERAL, s)); + + } + + retval.tree = root_0;} + } + break; + + } + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "optionValue" + + protected static class rule_scope { + String name; + } + protected Stack rule_stack = new Stack(); + + public static class rule_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "rule" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:155:1: rule : ( DOC_COMMENT )? (modifier= ( 'protected' | 'public' | 'private' | 'fragment' ) )? id ( '!' )? (arg= ARG_ACTION )? ( 'returns' rt= ARG_ACTION )? ( throwsSpec )? ( optionsSpec )? ( ruleScopeSpec )? ( ruleAction )* ':' altList ';' ( exceptionGroup )? -> ^( RULE id ( ^( ARG $arg) )? ( ^( RET $rt) )? ( optionsSpec )? ( ruleScopeSpec )? ( ruleAction )* altList ( exceptionGroup )? EOR[\"EOR\"] ) ; + public final ANTLRv3Parser.rule_return rule() throws RecognitionException { + rule_stack.push(new rule_scope()); + ANTLRv3Parser.rule_return retval = new ANTLRv3Parser.rule_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token modifier=null; + Token arg=null; + Token rt=null; + Token DOC_COMMENT39=null; + Token string_literal40=null; + Token string_literal41=null; + Token string_literal42=null; + Token string_literal43=null; + Token char_literal45=null; + Token string_literal46=null; + Token char_literal51=null; + Token char_literal53=null; + ANTLRv3Parser.id_return id44 = null; + + ANTLRv3Parser.throwsSpec_return throwsSpec47 = null; + + ANTLRv3Parser.optionsSpec_return optionsSpec48 = null; + + ANTLRv3Parser.ruleScopeSpec_return ruleScopeSpec49 = null; + + ANTLRv3Parser.ruleAction_return ruleAction50 = null; + + ANTLRv3Parser.altList_return altList52 = null; + + ANTLRv3Parser.exceptionGroup_return exceptionGroup54 = null; + + + CommonTree modifier_tree=null; + CommonTree arg_tree=null; + CommonTree rt_tree=null; + CommonTree DOC_COMMENT39_tree=null; + CommonTree string_literal40_tree=null; + CommonTree string_literal41_tree=null; + CommonTree string_literal42_tree=null; + CommonTree string_literal43_tree=null; + CommonTree char_literal45_tree=null; + CommonTree string_literal46_tree=null; + CommonTree char_literal51_tree=null; + CommonTree char_literal53_tree=null; + RewriteRuleTokenStream stream_76=new RewriteRuleTokenStream(adaptor,"token 76"); + RewriteRuleTokenStream stream_ARG_ACTION=new RewriteRuleTokenStream(adaptor,"token ARG_ACTION"); + RewriteRuleTokenStream stream_79=new RewriteRuleTokenStream(adaptor,"token 79"); + RewriteRuleTokenStream stream_FRAGMENT=new RewriteRuleTokenStream(adaptor,"token FRAGMENT"); + RewriteRuleTokenStream stream_75=new RewriteRuleTokenStream(adaptor,"token 75"); + RewriteRuleTokenStream stream_77=new RewriteRuleTokenStream(adaptor,"token 77"); + RewriteRuleTokenStream stream_69=new RewriteRuleTokenStream(adaptor,"token 69"); + RewriteRuleTokenStream stream_DOC_COMMENT=new RewriteRuleTokenStream(adaptor,"token DOC_COMMENT"); + RewriteRuleTokenStream stream_78=new RewriteRuleTokenStream(adaptor,"token 78"); + RewriteRuleTokenStream stream_BANG=new RewriteRuleTokenStream(adaptor,"token BANG"); + RewriteRuleSubtreeStream stream_ruleScopeSpec=new RewriteRuleSubtreeStream(adaptor,"rule ruleScopeSpec"); + RewriteRuleSubtreeStream stream_ruleAction=new RewriteRuleSubtreeStream(adaptor,"rule ruleAction"); + RewriteRuleSubtreeStream stream_optionsSpec=new RewriteRuleSubtreeStream(adaptor,"rule optionsSpec"); + RewriteRuleSubtreeStream stream_altList=new RewriteRuleSubtreeStream(adaptor,"rule altList"); + RewriteRuleSubtreeStream stream_exceptionGroup=new RewriteRuleSubtreeStream(adaptor,"rule exceptionGroup"); + RewriteRuleSubtreeStream stream_throwsSpec=new RewriteRuleSubtreeStream(adaptor,"rule throwsSpec"); + RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:162:2: ( ( DOC_COMMENT )? (modifier= ( 'protected' | 'public' | 'private' | 'fragment' ) )? id ( '!' )? (arg= ARG_ACTION )? ( 'returns' rt= ARG_ACTION )? ( throwsSpec )? ( optionsSpec )? ( ruleScopeSpec )? ( ruleAction )* ':' altList ';' ( exceptionGroup )? -> ^( RULE id ( ^( ARG $arg) )? ( ^( RET $rt) )? ( optionsSpec )? ( ruleScopeSpec )? ( ruleAction )* altList ( exceptionGroup )? EOR[\"EOR\"] ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:162:4: ( DOC_COMMENT )? (modifier= ( 'protected' | 'public' | 'private' | 'fragment' ) )? id ( '!' )? (arg= ARG_ACTION )? ( 'returns' rt= ARG_ACTION )? ( throwsSpec )? ( optionsSpec )? ( ruleScopeSpec )? ( ruleAction )* ':' altList ';' ( exceptionGroup )? + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:162:4: ( DOC_COMMENT )? + int alt15=2; + int LA15_0 = input.LA(1); + + if ( (LA15_0==DOC_COMMENT) ) { + alt15=1; + } + switch (alt15) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:162:4: DOC_COMMENT + { + DOC_COMMENT39=(Token)match(input,DOC_COMMENT,FOLLOW_DOC_COMMENT_in_rule854); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_DOC_COMMENT.add(DOC_COMMENT39); + + + } + break; + + } + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:163:3: (modifier= ( 'protected' | 'public' | 'private' | 'fragment' ) )? + int alt17=2; + int LA17_0 = input.LA(1); + + if ( (LA17_0==FRAGMENT||(LA17_0>=75 && LA17_0<=77)) ) { + alt17=1; + } + switch (alt17) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:163:5: modifier= ( 'protected' | 'public' | 'private' | 'fragment' ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:163:14: ( 'protected' | 'public' | 'private' | 'fragment' ) + int alt16=4; + switch ( input.LA(1) ) { + case 75: + { + alt16=1; + } + break; + case 76: + { + alt16=2; + } + break; + case 77: + { + alt16=3; + } + break; + case FRAGMENT: + { + alt16=4; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 16, 0, input); + + throw nvae; + } + + switch (alt16) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:163:15: 'protected' + { + string_literal40=(Token)match(input,75,FOLLOW_75_in_rule864); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_75.add(string_literal40); + + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:163:27: 'public' + { + string_literal41=(Token)match(input,76,FOLLOW_76_in_rule866); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_76.add(string_literal41); + + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:163:36: 'private' + { + string_literal42=(Token)match(input,77,FOLLOW_77_in_rule868); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_77.add(string_literal42); + + + } + break; + case 4 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:163:46: 'fragment' + { + string_literal43=(Token)match(input,FRAGMENT,FOLLOW_FRAGMENT_in_rule870); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_FRAGMENT.add(string_literal43); + + + } + break; + + } + + + } + break; + + } + + pushFollow(FOLLOW_id_in_rule878); + id44=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_id.add(id44.getTree()); + if ( state.backtracking==0 ) { + ((rule_scope)rule_stack.peek()).name = (id44!=null?input.toString(id44.start,id44.stop):null); + } + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:165:3: ( '!' )? + int alt18=2; + int LA18_0 = input.LA(1); + + if ( (LA18_0==BANG) ) { + alt18=1; + } + switch (alt18) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:165:3: '!' + { + char_literal45=(Token)match(input,BANG,FOLLOW_BANG_in_rule884); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_BANG.add(char_literal45); + + + } + break; + + } + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:166:3: (arg= ARG_ACTION )? + int alt19=2; + int LA19_0 = input.LA(1); + + if ( (LA19_0==ARG_ACTION) ) { + alt19=1; + } + switch (alt19) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:166:5: arg= ARG_ACTION + { + arg=(Token)match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_rule893); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ARG_ACTION.add(arg); + + + } + break; + + } + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:167:3: ( 'returns' rt= ARG_ACTION )? + int alt20=2; + int LA20_0 = input.LA(1); + + if ( (LA20_0==78) ) { + alt20=1; + } + switch (alt20) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:167:5: 'returns' rt= ARG_ACTION + { + string_literal46=(Token)match(input,78,FOLLOW_78_in_rule902); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_78.add(string_literal46); + + rt=(Token)match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_rule906); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ARG_ACTION.add(rt); + + + } + break; + + } + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:168:3: ( throwsSpec )? + int alt21=2; + int LA21_0 = input.LA(1); + + if ( (LA21_0==80) ) { + alt21=1; + } + switch (alt21) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:168:3: throwsSpec + { + pushFollow(FOLLOW_throwsSpec_in_rule914); + throwsSpec47=throwsSpec(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_throwsSpec.add(throwsSpec47.getTree()); + + } + break; + + } + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:168:15: ( optionsSpec )? + int alt22=2; + int LA22_0 = input.LA(1); + + if ( (LA22_0==OPTIONS) ) { + alt22=1; + } + switch (alt22) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:168:15: optionsSpec + { + pushFollow(FOLLOW_optionsSpec_in_rule917); + optionsSpec48=optionsSpec(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_optionsSpec.add(optionsSpec48.getTree()); + + } + break; + + } + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:168:28: ( ruleScopeSpec )? + int alt23=2; + int LA23_0 = input.LA(1); + + if ( (LA23_0==SCOPE) ) { + alt23=1; + } + switch (alt23) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:168:28: ruleScopeSpec + { + pushFollow(FOLLOW_ruleScopeSpec_in_rule920); + ruleScopeSpec49=ruleScopeSpec(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ruleScopeSpec.add(ruleScopeSpec49.getTree()); + + } + break; + + } + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:168:43: ( ruleAction )* + loop24: + do { + int alt24=2; + int LA24_0 = input.LA(1); + + if ( (LA24_0==72) ) { + alt24=1; + } + + + switch (alt24) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:168:43: ruleAction + { + pushFollow(FOLLOW_ruleAction_in_rule923); + ruleAction50=ruleAction(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ruleAction.add(ruleAction50.getTree()); + + } + break; + + default : + break loop24; + } + } while (true); + + char_literal51=(Token)match(input,79,FOLLOW_79_in_rule928); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_79.add(char_literal51); + + pushFollow(FOLLOW_altList_in_rule930); + altList52=altList(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_altList.add(altList52.getTree()); + char_literal53=(Token)match(input,69,FOLLOW_69_in_rule932); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_69.add(char_literal53); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:170:3: ( exceptionGroup )? + int alt25=2; + int LA25_0 = input.LA(1); + + if ( ((LA25_0>=85 && LA25_0<=86)) ) { + alt25=1; + } + switch (alt25) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:170:3: exceptionGroup + { + pushFollow(FOLLOW_exceptionGroup_in_rule936); + exceptionGroup54=exceptionGroup(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_exceptionGroup.add(exceptionGroup54.getTree()); + + } + break; + + } + + + + // AST REWRITE + // elements: id, altList, optionsSpec, rt, exceptionGroup, ruleAction, arg, ruleScopeSpec + // token labels: arg, rt + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleTokenStream stream_arg=new RewriteRuleTokenStream(adaptor,"token arg",arg); + RewriteRuleTokenStream stream_rt=new RewriteRuleTokenStream(adaptor,"token rt",rt); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 171:6: -> ^( RULE id ( ^( ARG $arg) )? ( ^( RET $rt) )? ( optionsSpec )? ( ruleScopeSpec )? ( ruleAction )* altList ( exceptionGroup )? EOR[\"EOR\"] ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:171:9: ^( RULE id ( ^( ARG $arg) )? ( ^( RET $rt) )? ( optionsSpec )? ( ruleScopeSpec )? ( ruleAction )* altList ( exceptionGroup )? EOR[\"EOR\"] ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(RULE, "RULE"), root_1); + + adaptor.addChild(root_1, stream_id.nextTree()); + adaptor.addChild(root_1, modifier!=null?adaptor.create(modifier):null); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:171:67: ( ^( ARG $arg) )? + if ( stream_arg.hasNext() ) { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:171:67: ^( ARG $arg) + { + CommonTree root_2 = (CommonTree)adaptor.nil(); + root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ARG, "ARG"), root_2); + + adaptor.addChild(root_2, stream_arg.nextNode()); + + adaptor.addChild(root_1, root_2); + } + + } + stream_arg.reset(); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:171:80: ( ^( RET $rt) )? + if ( stream_rt.hasNext() ) { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:171:80: ^( RET $rt) + { + CommonTree root_2 = (CommonTree)adaptor.nil(); + root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(RET, "RET"), root_2); + + adaptor.addChild(root_2, stream_rt.nextNode()); + + adaptor.addChild(root_1, root_2); + } + + } + stream_rt.reset(); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:172:9: ( optionsSpec )? + if ( stream_optionsSpec.hasNext() ) { + adaptor.addChild(root_1, stream_optionsSpec.nextTree()); + + } + stream_optionsSpec.reset(); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:172:22: ( ruleScopeSpec )? + if ( stream_ruleScopeSpec.hasNext() ) { + adaptor.addChild(root_1, stream_ruleScopeSpec.nextTree()); + + } + stream_ruleScopeSpec.reset(); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:172:37: ( ruleAction )* + while ( stream_ruleAction.hasNext() ) { + adaptor.addChild(root_1, stream_ruleAction.nextTree()); + + } + stream_ruleAction.reset(); + adaptor.addChild(root_1, stream_altList.nextTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:174:9: ( exceptionGroup )? + if ( stream_exceptionGroup.hasNext() ) { + adaptor.addChild(root_1, stream_exceptionGroup.nextTree()); + + } + stream_exceptionGroup.reset(); + adaptor.addChild(root_1, (CommonTree)adaptor.create(EOR, "EOR")); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + if ( state.backtracking==0 ) { + + this.rules.add(((rule_scope)rule_stack.peek()).name); + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + rule_stack.pop(); + } + return retval; + } + // $ANTLR end "rule" + + public static class ruleAction_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "ruleAction" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:179:1: ruleAction : '@' id ACTION -> ^( '@' id ACTION ) ; + public final ANTLRv3Parser.ruleAction_return ruleAction() throws RecognitionException { + ANTLRv3Parser.ruleAction_return retval = new ANTLRv3Parser.ruleAction_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token char_literal55=null; + Token ACTION57=null; + ANTLRv3Parser.id_return id56 = null; + + + CommonTree char_literal55_tree=null; + CommonTree ACTION57_tree=null; + RewriteRuleTokenStream stream_ACTION=new RewriteRuleTokenStream(adaptor,"token ACTION"); + RewriteRuleTokenStream stream_72=new RewriteRuleTokenStream(adaptor,"token 72"); + RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:181:2: ( '@' id ACTION -> ^( '@' id ACTION ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:181:4: '@' id ACTION + { + char_literal55=(Token)match(input,72,FOLLOW_72_in_ruleAction1038); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_72.add(char_literal55); + + pushFollow(FOLLOW_id_in_ruleAction1040); + id56=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_id.add(id56.getTree()); + ACTION57=(Token)match(input,ACTION,FOLLOW_ACTION_in_ruleAction1042); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ACTION.add(ACTION57); + + + + // AST REWRITE + // elements: 72, ACTION, id + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 181:18: -> ^( '@' id ACTION ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:181:21: ^( '@' id ACTION ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_72.nextNode(), root_1); + + adaptor.addChild(root_1, stream_id.nextTree()); + adaptor.addChild(root_1, stream_ACTION.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "ruleAction" + + public static class throwsSpec_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "throwsSpec" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:184:1: throwsSpec : 'throws' id ( ',' id )* -> ^( 'throws' ( id )+ ) ; + public final ANTLRv3Parser.throwsSpec_return throwsSpec() throws RecognitionException { + ANTLRv3Parser.throwsSpec_return retval = new ANTLRv3Parser.throwsSpec_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token string_literal58=null; + Token char_literal60=null; + ANTLRv3Parser.id_return id59 = null; + + ANTLRv3Parser.id_return id61 = null; + + + CommonTree string_literal58_tree=null; + CommonTree char_literal60_tree=null; + RewriteRuleTokenStream stream_81=new RewriteRuleTokenStream(adaptor,"token 81"); + RewriteRuleTokenStream stream_80=new RewriteRuleTokenStream(adaptor,"token 80"); + RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:185:2: ( 'throws' id ( ',' id )* -> ^( 'throws' ( id )+ ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:185:4: 'throws' id ( ',' id )* + { + string_literal58=(Token)match(input,80,FOLLOW_80_in_throwsSpec1063); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_80.add(string_literal58); + + pushFollow(FOLLOW_id_in_throwsSpec1065); + id59=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_id.add(id59.getTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:185:16: ( ',' id )* + loop26: + do { + int alt26=2; + int LA26_0 = input.LA(1); + + if ( (LA26_0==81) ) { + alt26=1; + } + + + switch (alt26) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:185:18: ',' id + { + char_literal60=(Token)match(input,81,FOLLOW_81_in_throwsSpec1069); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_81.add(char_literal60); + + pushFollow(FOLLOW_id_in_throwsSpec1071); + id61=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_id.add(id61.getTree()); + + } + break; + + default : + break loop26; + } + } while (true); + + + + // AST REWRITE + // elements: id, 80 + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 185:28: -> ^( 'throws' ( id )+ ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:185:31: ^( 'throws' ( id )+ ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_80.nextNode(), root_1); + + if ( !(stream_id.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_id.hasNext() ) { + adaptor.addChild(root_1, stream_id.nextTree()); + + } + stream_id.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "throwsSpec" + + public static class ruleScopeSpec_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "ruleScopeSpec" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:188:1: ruleScopeSpec : ( 'scope' ACTION -> ^( 'scope' ACTION ) | 'scope' id ( ',' id )* ';' -> ^( 'scope' ( id )+ ) | 'scope' ACTION 'scope' id ( ',' id )* ';' -> ^( 'scope' ACTION ( id )+ ) ); + public final ANTLRv3Parser.ruleScopeSpec_return ruleScopeSpec() throws RecognitionException { + ANTLRv3Parser.ruleScopeSpec_return retval = new ANTLRv3Parser.ruleScopeSpec_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token string_literal62=null; + Token ACTION63=null; + Token string_literal64=null; + Token char_literal66=null; + Token char_literal68=null; + Token string_literal69=null; + Token ACTION70=null; + Token string_literal71=null; + Token char_literal73=null; + Token char_literal75=null; + ANTLRv3Parser.id_return id65 = null; + + ANTLRv3Parser.id_return id67 = null; + + ANTLRv3Parser.id_return id72 = null; + + ANTLRv3Parser.id_return id74 = null; + + + CommonTree string_literal62_tree=null; + CommonTree ACTION63_tree=null; + CommonTree string_literal64_tree=null; + CommonTree char_literal66_tree=null; + CommonTree char_literal68_tree=null; + CommonTree string_literal69_tree=null; + CommonTree ACTION70_tree=null; + CommonTree string_literal71_tree=null; + CommonTree char_literal73_tree=null; + CommonTree char_literal75_tree=null; + RewriteRuleTokenStream stream_ACTION=new RewriteRuleTokenStream(adaptor,"token ACTION"); + RewriteRuleTokenStream stream_81=new RewriteRuleTokenStream(adaptor,"token 81"); + RewriteRuleTokenStream stream_69=new RewriteRuleTokenStream(adaptor,"token 69"); + RewriteRuleTokenStream stream_SCOPE=new RewriteRuleTokenStream(adaptor,"token SCOPE"); + RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:189:2: ( 'scope' ACTION -> ^( 'scope' ACTION ) | 'scope' id ( ',' id )* ';' -> ^( 'scope' ( id )+ ) | 'scope' ACTION 'scope' id ( ',' id )* ';' -> ^( 'scope' ACTION ( id )+ ) ) + int alt29=3; + int LA29_0 = input.LA(1); + + if ( (LA29_0==SCOPE) ) { + int LA29_1 = input.LA(2); + + if ( (LA29_1==ACTION) ) { + int LA29_2 = input.LA(3); + + if ( (LA29_2==SCOPE) ) { + alt29=3; + } + else if ( (LA29_2==72||LA29_2==79) ) { + alt29=1; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 29, 2, input); + + throw nvae; + } + } + else if ( (LA29_1==TOKEN_REF||LA29_1==RULE_REF) ) { + alt29=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 29, 1, input); + + throw nvae; + } + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 29, 0, input); + + throw nvae; + } + switch (alt29) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:189:4: 'scope' ACTION + { + string_literal62=(Token)match(input,SCOPE,FOLLOW_SCOPE_in_ruleScopeSpec1094); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_SCOPE.add(string_literal62); + + ACTION63=(Token)match(input,ACTION,FOLLOW_ACTION_in_ruleScopeSpec1096); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ACTION.add(ACTION63); + + + + // AST REWRITE + // elements: SCOPE, ACTION + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 189:19: -> ^( 'scope' ACTION ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:189:22: ^( 'scope' ACTION ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_SCOPE.nextNode(), root_1); + + adaptor.addChild(root_1, stream_ACTION.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:190:4: 'scope' id ( ',' id )* ';' + { + string_literal64=(Token)match(input,SCOPE,FOLLOW_SCOPE_in_ruleScopeSpec1109); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_SCOPE.add(string_literal64); + + pushFollow(FOLLOW_id_in_ruleScopeSpec1111); + id65=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_id.add(id65.getTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:190:15: ( ',' id )* + loop27: + do { + int alt27=2; + int LA27_0 = input.LA(1); + + if ( (LA27_0==81) ) { + alt27=1; + } + + + switch (alt27) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:190:16: ',' id + { + char_literal66=(Token)match(input,81,FOLLOW_81_in_ruleScopeSpec1114); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_81.add(char_literal66); + + pushFollow(FOLLOW_id_in_ruleScopeSpec1116); + id67=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_id.add(id67.getTree()); + + } + break; + + default : + break loop27; + } + } while (true); + + char_literal68=(Token)match(input,69,FOLLOW_69_in_ruleScopeSpec1120); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_69.add(char_literal68); + + + + // AST REWRITE + // elements: SCOPE, id + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 190:29: -> ^( 'scope' ( id )+ ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:190:32: ^( 'scope' ( id )+ ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_SCOPE.nextNode(), root_1); + + if ( !(stream_id.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_id.hasNext() ) { + adaptor.addChild(root_1, stream_id.nextTree()); + + } + stream_id.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:191:4: 'scope' ACTION 'scope' id ( ',' id )* ';' + { + string_literal69=(Token)match(input,SCOPE,FOLLOW_SCOPE_in_ruleScopeSpec1134); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_SCOPE.add(string_literal69); + + ACTION70=(Token)match(input,ACTION,FOLLOW_ACTION_in_ruleScopeSpec1136); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ACTION.add(ACTION70); + + string_literal71=(Token)match(input,SCOPE,FOLLOW_SCOPE_in_ruleScopeSpec1140); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_SCOPE.add(string_literal71); + + pushFollow(FOLLOW_id_in_ruleScopeSpec1142); + id72=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_id.add(id72.getTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:192:14: ( ',' id )* + loop28: + do { + int alt28=2; + int LA28_0 = input.LA(1); + + if ( (LA28_0==81) ) { + alt28=1; + } + + + switch (alt28) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:192:15: ',' id + { + char_literal73=(Token)match(input,81,FOLLOW_81_in_ruleScopeSpec1145); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_81.add(char_literal73); + + pushFollow(FOLLOW_id_in_ruleScopeSpec1147); + id74=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_id.add(id74.getTree()); + + } + break; + + default : + break loop28; + } + } while (true); + + char_literal75=(Token)match(input,69,FOLLOW_69_in_ruleScopeSpec1151); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_69.add(char_literal75); + + + + // AST REWRITE + // elements: ACTION, id, SCOPE + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 193:3: -> ^( 'scope' ACTION ( id )+ ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:193:6: ^( 'scope' ACTION ( id )+ ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_SCOPE.nextNode(), root_1); + + adaptor.addChild(root_1, stream_ACTION.nextNode()); + if ( !(stream_id.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_id.hasNext() ) { + adaptor.addChild(root_1, stream_id.nextTree()); + + } + stream_id.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + + } + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "ruleScopeSpec" + + public static class block_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "block" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:196:1: block : lp= '(' ( (opts= optionsSpec )? ':' )? a1= alternative rewrite ( '|' a2= alternative rewrite )* rp= ')' -> ^( BLOCK[$lp,\"BLOCK\"] ( optionsSpec )? ( alternative ( rewrite )? )+ EOB[$rp,\"EOB\"] ) ; + public final ANTLRv3Parser.block_return block() throws RecognitionException { + ANTLRv3Parser.block_return retval = new ANTLRv3Parser.block_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token lp=null; + Token rp=null; + Token char_literal76=null; + Token char_literal78=null; + ANTLRv3Parser.optionsSpec_return opts = null; + + ANTLRv3Parser.alternative_return a1 = null; + + ANTLRv3Parser.alternative_return a2 = null; + + ANTLRv3Parser.rewrite_return rewrite77 = null; + + ANTLRv3Parser.rewrite_return rewrite79 = null; + + + CommonTree lp_tree=null; + CommonTree rp_tree=null; + CommonTree char_literal76_tree=null; + CommonTree char_literal78_tree=null; + RewriteRuleTokenStream stream_79=new RewriteRuleTokenStream(adaptor,"token 79"); + RewriteRuleTokenStream stream_83=new RewriteRuleTokenStream(adaptor,"token 83"); + RewriteRuleTokenStream stream_84=new RewriteRuleTokenStream(adaptor,"token 84"); + RewriteRuleTokenStream stream_82=new RewriteRuleTokenStream(adaptor,"token 82"); + RewriteRuleSubtreeStream stream_alternative=new RewriteRuleSubtreeStream(adaptor,"rule alternative"); + RewriteRuleSubtreeStream stream_optionsSpec=new RewriteRuleSubtreeStream(adaptor,"rule optionsSpec"); + RewriteRuleSubtreeStream stream_rewrite=new RewriteRuleSubtreeStream(adaptor,"rule rewrite"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:197:5: (lp= '(' ( (opts= optionsSpec )? ':' )? a1= alternative rewrite ( '|' a2= alternative rewrite )* rp= ')' -> ^( BLOCK[$lp,\"BLOCK\"] ( optionsSpec )? ( alternative ( rewrite )? )+ EOB[$rp,\"EOB\"] ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:197:9: lp= '(' ( (opts= optionsSpec )? ':' )? a1= alternative rewrite ( '|' a2= alternative rewrite )* rp= ')' + { + lp=(Token)match(input,82,FOLLOW_82_in_block1183); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_82.add(lp); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:198:3: ( (opts= optionsSpec )? ':' )? + int alt31=2; + int LA31_0 = input.LA(1); + + if ( (LA31_0==OPTIONS||LA31_0==79) ) { + alt31=1; + } + switch (alt31) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:198:5: (opts= optionsSpec )? ':' + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:198:5: (opts= optionsSpec )? + int alt30=2; + int LA30_0 = input.LA(1); + + if ( (LA30_0==OPTIONS) ) { + alt30=1; + } + switch (alt30) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:198:6: opts= optionsSpec + { + pushFollow(FOLLOW_optionsSpec_in_block1192); + opts=optionsSpec(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_optionsSpec.add(opts.getTree()); + + } + break; + + } + + char_literal76=(Token)match(input,79,FOLLOW_79_in_block1196); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_79.add(char_literal76); + + + } + break; + + } + + pushFollow(FOLLOW_alternative_in_block1205); + a1=alternative(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_alternative.add(a1.getTree()); + pushFollow(FOLLOW_rewrite_in_block1207); + rewrite77=rewrite(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_rewrite.add(rewrite77.getTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:199:26: ( '|' a2= alternative rewrite )* + loop32: + do { + int alt32=2; + int LA32_0 = input.LA(1); + + if ( (LA32_0==83) ) { + alt32=1; + } + + + switch (alt32) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:199:28: '|' a2= alternative rewrite + { + char_literal78=(Token)match(input,83,FOLLOW_83_in_block1211); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_83.add(char_literal78); + + pushFollow(FOLLOW_alternative_in_block1215); + a2=alternative(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_alternative.add(a2.getTree()); + pushFollow(FOLLOW_rewrite_in_block1217); + rewrite79=rewrite(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_rewrite.add(rewrite79.getTree()); + + } + break; + + default : + break loop32; + } + } while (true); + + rp=(Token)match(input,84,FOLLOW_84_in_block1232); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_84.add(rp); + + + + // AST REWRITE + // elements: optionsSpec, alternative, rewrite + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 201:9: -> ^( BLOCK[$lp,\"BLOCK\"] ( optionsSpec )? ( alternative ( rewrite )? )+ EOB[$rp,\"EOB\"] ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:201:12: ^( BLOCK[$lp,\"BLOCK\"] ( optionsSpec )? ( alternative ( rewrite )? )+ EOB[$rp,\"EOB\"] ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(BLOCK, lp, "BLOCK"), root_1); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:201:34: ( optionsSpec )? + if ( stream_optionsSpec.hasNext() ) { + adaptor.addChild(root_1, stream_optionsSpec.nextTree()); + + } + stream_optionsSpec.reset(); + if ( !(stream_alternative.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_alternative.hasNext() ) { + adaptor.addChild(root_1, stream_alternative.nextTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:201:60: ( rewrite )? + if ( stream_rewrite.hasNext() ) { + adaptor.addChild(root_1, stream_rewrite.nextTree()); + + } + stream_rewrite.reset(); + + } + stream_alternative.reset(); + adaptor.addChild(root_1, (CommonTree)adaptor.create(EOB, rp, "EOB")); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "block" + + public static class altList_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "altList" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:204:1: altList : a1= alternative rewrite ( '|' a2= alternative rewrite )* -> ^( ( alternative ( rewrite )? )+ EOB[\"EOB\"] ) ; + public final ANTLRv3Parser.altList_return altList() throws RecognitionException { + ANTLRv3Parser.altList_return retval = new ANTLRv3Parser.altList_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token char_literal81=null; + ANTLRv3Parser.alternative_return a1 = null; + + ANTLRv3Parser.alternative_return a2 = null; + + ANTLRv3Parser.rewrite_return rewrite80 = null; + + ANTLRv3Parser.rewrite_return rewrite82 = null; + + + CommonTree char_literal81_tree=null; + RewriteRuleTokenStream stream_83=new RewriteRuleTokenStream(adaptor,"token 83"); + RewriteRuleSubtreeStream stream_alternative=new RewriteRuleSubtreeStream(adaptor,"rule alternative"); + RewriteRuleSubtreeStream stream_rewrite=new RewriteRuleSubtreeStream(adaptor,"rule rewrite"); + + // must create root manually as it's used by invoked rules in real antlr tool. + // leave here to demonstrate use of {...} in rewrite rule + // it's really BLOCK[firstToken,"BLOCK"]; set line/col to previous ( or : token. + CommonTree blkRoot = (CommonTree)adaptor.create(BLOCK,input.LT(-1),"BLOCK"); + + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:211:5: (a1= alternative rewrite ( '|' a2= alternative rewrite )* -> ^( ( alternative ( rewrite )? )+ EOB[\"EOB\"] ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:211:9: a1= alternative rewrite ( '|' a2= alternative rewrite )* + { + pushFollow(FOLLOW_alternative_in_altList1289); + a1=alternative(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_alternative.add(a1.getTree()); + pushFollow(FOLLOW_rewrite_in_altList1291); + rewrite80=rewrite(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_rewrite.add(rewrite80.getTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:211:32: ( '|' a2= alternative rewrite )* + loop33: + do { + int alt33=2; + int LA33_0 = input.LA(1); + + if ( (LA33_0==83) ) { + alt33=1; + } + + + switch (alt33) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:211:34: '|' a2= alternative rewrite + { + char_literal81=(Token)match(input,83,FOLLOW_83_in_altList1295); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_83.add(char_literal81); + + pushFollow(FOLLOW_alternative_in_altList1299); + a2=alternative(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_alternative.add(a2.getTree()); + pushFollow(FOLLOW_rewrite_in_altList1301); + rewrite82=rewrite(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_rewrite.add(rewrite82.getTree()); + + } + break; + + default : + break loop33; + } + } while (true); + + + + // AST REWRITE + // elements: alternative, rewrite + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 212:3: -> ^( ( alternative ( rewrite )? )+ EOB[\"EOB\"] ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:212:6: ^( ( alternative ( rewrite )? )+ EOB[\"EOB\"] ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(blkRoot, root_1); + + if ( !(stream_alternative.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_alternative.hasNext() ) { + adaptor.addChild(root_1, stream_alternative.nextTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:212:32: ( rewrite )? + if ( stream_rewrite.hasNext() ) { + adaptor.addChild(root_1, stream_rewrite.nextTree()); + + } + stream_rewrite.reset(); + + } + stream_alternative.reset(); + adaptor.addChild(root_1, (CommonTree)adaptor.create(EOB, "EOB")); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "altList" + + public static class alternative_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "alternative" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:215:1: alternative : ( ( element )+ -> ^( ALT[firstToken,\"ALT\"] ( element )+ EOA[\"EOA\"] ) | -> ^( ALT[prevToken,\"ALT\"] EPSILON[prevToken,\"EPSILON\"] EOA[\"EOA\"] ) ); + public final ANTLRv3Parser.alternative_return alternative() throws RecognitionException { + ANTLRv3Parser.alternative_return retval = new ANTLRv3Parser.alternative_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + ANTLRv3Parser.element_return element83 = null; + + + RewriteRuleSubtreeStream stream_element=new RewriteRuleSubtreeStream(adaptor,"rule element"); + + Token firstToken = input.LT(1); + Token prevToken = input.LT(-1); // either : or | I think + + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:220:5: ( ( element )+ -> ^( ALT[firstToken,\"ALT\"] ( element )+ EOA[\"EOA\"] ) | -> ^( ALT[prevToken,\"ALT\"] EPSILON[prevToken,\"EPSILON\"] EOA[\"EOA\"] ) ) + int alt35=2; + int LA35_0 = input.LA(1); + + if ( (LA35_0==SEMPRED||LA35_0==TREE_BEGIN||(LA35_0>=TOKEN_REF && LA35_0<=ACTION)||LA35_0==RULE_REF||LA35_0==82||LA35_0==89||LA35_0==92) ) { + alt35=1; + } + else if ( (LA35_0==REWRITE||LA35_0==69||(LA35_0>=83 && LA35_0<=84)) ) { + alt35=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 35, 0, input); + + throw nvae; + } + switch (alt35) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:220:9: ( element )+ + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:220:9: ( element )+ + int cnt34=0; + loop34: + do { + int alt34=2; + int LA34_0 = input.LA(1); + + if ( (LA34_0==SEMPRED||LA34_0==TREE_BEGIN||(LA34_0>=TOKEN_REF && LA34_0<=ACTION)||LA34_0==RULE_REF||LA34_0==82||LA34_0==89||LA34_0==92) ) { + alt34=1; + } + + + switch (alt34) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:220:9: element + { + pushFollow(FOLLOW_element_in_alternative1349); + element83=element(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_element.add(element83.getTree()); + + } + break; + + default : + if ( cnt34 >= 1 ) break loop34; + if (state.backtracking>0) {state.failed=true; return retval;} + EarlyExitException eee = + new EarlyExitException(34, input); + throw eee; + } + cnt34++; + } while (true); + + + + // AST REWRITE + // elements: element + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 220:18: -> ^( ALT[firstToken,\"ALT\"] ( element )+ EOA[\"EOA\"] ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:220:21: ^( ALT[firstToken,\"ALT\"] ( element )+ EOA[\"EOA\"] ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ALT, firstToken, "ALT"), root_1); + + if ( !(stream_element.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_element.hasNext() ) { + adaptor.addChild(root_1, stream_element.nextTree()); + + } + stream_element.reset(); + adaptor.addChild(root_1, (CommonTree)adaptor.create(EOA, "EOA")); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:221:9: + { + + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 221:9: -> ^( ALT[prevToken,\"ALT\"] EPSILON[prevToken,\"EPSILON\"] EOA[\"EOA\"] ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:221:12: ^( ALT[prevToken,\"ALT\"] EPSILON[prevToken,\"EPSILON\"] EOA[\"EOA\"] ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ALT, prevToken, "ALT"), root_1); + + adaptor.addChild(root_1, (CommonTree)adaptor.create(EPSILON, prevToken, "EPSILON")); + adaptor.addChild(root_1, (CommonTree)adaptor.create(EOA, "EOA")); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + + } + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "alternative" + + public static class exceptionGroup_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "exceptionGroup" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:224:1: exceptionGroup : ( ( exceptionHandler )+ ( finallyClause )? | finallyClause ); + public final ANTLRv3Parser.exceptionGroup_return exceptionGroup() throws RecognitionException { + ANTLRv3Parser.exceptionGroup_return retval = new ANTLRv3Parser.exceptionGroup_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + ANTLRv3Parser.exceptionHandler_return exceptionHandler84 = null; + + ANTLRv3Parser.finallyClause_return finallyClause85 = null; + + ANTLRv3Parser.finallyClause_return finallyClause86 = null; + + + + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:225:2: ( ( exceptionHandler )+ ( finallyClause )? | finallyClause ) + int alt38=2; + int LA38_0 = input.LA(1); + + if ( (LA38_0==85) ) { + alt38=1; + } + else if ( (LA38_0==86) ) { + alt38=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 38, 0, input); + + throw nvae; + } + switch (alt38) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:225:4: ( exceptionHandler )+ ( finallyClause )? + { + root_0 = (CommonTree)adaptor.nil(); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:225:4: ( exceptionHandler )+ + int cnt36=0; + loop36: + do { + int alt36=2; + int LA36_0 = input.LA(1); + + if ( (LA36_0==85) ) { + alt36=1; + } + + + switch (alt36) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:225:6: exceptionHandler + { + pushFollow(FOLLOW_exceptionHandler_in_exceptionGroup1400); + exceptionHandler84=exceptionHandler(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, exceptionHandler84.getTree()); + + } + break; + + default : + if ( cnt36 >= 1 ) break loop36; + if (state.backtracking>0) {state.failed=true; return retval;} + EarlyExitException eee = + new EarlyExitException(36, input); + throw eee; + } + cnt36++; + } while (true); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:225:26: ( finallyClause )? + int alt37=2; + int LA37_0 = input.LA(1); + + if ( (LA37_0==86) ) { + alt37=1; + } + switch (alt37) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:225:28: finallyClause + { + pushFollow(FOLLOW_finallyClause_in_exceptionGroup1407); + finallyClause85=finallyClause(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, finallyClause85.getTree()); + + } + break; + + } + + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:226:4: finallyClause + { + root_0 = (CommonTree)adaptor.nil(); + + pushFollow(FOLLOW_finallyClause_in_exceptionGroup1415); + finallyClause86=finallyClause(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, finallyClause86.getTree()); + + } + break; + + } + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "exceptionGroup" + + public static class exceptionHandler_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "exceptionHandler" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:229:1: exceptionHandler : 'catch' ARG_ACTION ACTION -> ^( 'catch' ARG_ACTION ACTION ) ; + public final ANTLRv3Parser.exceptionHandler_return exceptionHandler() throws RecognitionException { + ANTLRv3Parser.exceptionHandler_return retval = new ANTLRv3Parser.exceptionHandler_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token string_literal87=null; + Token ARG_ACTION88=null; + Token ACTION89=null; + + CommonTree string_literal87_tree=null; + CommonTree ARG_ACTION88_tree=null; + CommonTree ACTION89_tree=null; + RewriteRuleTokenStream stream_85=new RewriteRuleTokenStream(adaptor,"token 85"); + RewriteRuleTokenStream stream_ARG_ACTION=new RewriteRuleTokenStream(adaptor,"token ARG_ACTION"); + RewriteRuleTokenStream stream_ACTION=new RewriteRuleTokenStream(adaptor,"token ACTION"); + + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:230:5: ( 'catch' ARG_ACTION ACTION -> ^( 'catch' ARG_ACTION ACTION ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:230:10: 'catch' ARG_ACTION ACTION + { + string_literal87=(Token)match(input,85,FOLLOW_85_in_exceptionHandler1435); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_85.add(string_literal87); + + ARG_ACTION88=(Token)match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_exceptionHandler1437); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ARG_ACTION.add(ARG_ACTION88); + + ACTION89=(Token)match(input,ACTION,FOLLOW_ACTION_in_exceptionHandler1439); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ACTION.add(ACTION89); + + + + // AST REWRITE + // elements: ACTION, ARG_ACTION, 85 + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 230:36: -> ^( 'catch' ARG_ACTION ACTION ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:230:39: ^( 'catch' ARG_ACTION ACTION ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_85.nextNode(), root_1); + + adaptor.addChild(root_1, stream_ARG_ACTION.nextNode()); + adaptor.addChild(root_1, stream_ACTION.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "exceptionHandler" + + public static class finallyClause_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "finallyClause" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:233:1: finallyClause : 'finally' ACTION -> ^( 'finally' ACTION ) ; + public final ANTLRv3Parser.finallyClause_return finallyClause() throws RecognitionException { + ANTLRv3Parser.finallyClause_return retval = new ANTLRv3Parser.finallyClause_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token string_literal90=null; + Token ACTION91=null; + + CommonTree string_literal90_tree=null; + CommonTree ACTION91_tree=null; + RewriteRuleTokenStream stream_ACTION=new RewriteRuleTokenStream(adaptor,"token ACTION"); + RewriteRuleTokenStream stream_86=new RewriteRuleTokenStream(adaptor,"token 86"); + + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:234:5: ( 'finally' ACTION -> ^( 'finally' ACTION ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:234:10: 'finally' ACTION + { + string_literal90=(Token)match(input,86,FOLLOW_86_in_finallyClause1469); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_86.add(string_literal90); + + ACTION91=(Token)match(input,ACTION,FOLLOW_ACTION_in_finallyClause1471); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ACTION.add(ACTION91); + + + + // AST REWRITE + // elements: 86, ACTION + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 234:27: -> ^( 'finally' ACTION ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:234:30: ^( 'finally' ACTION ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_86.nextNode(), root_1); + + adaptor.addChild(root_1, stream_ACTION.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "finallyClause" + + public static class element_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "element" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:237:1: element : elementNoOptionSpec ; + public final ANTLRv3Parser.element_return element() throws RecognitionException { + ANTLRv3Parser.element_return retval = new ANTLRv3Parser.element_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + ANTLRv3Parser.elementNoOptionSpec_return elementNoOptionSpec92 = null; + + + + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:238:2: ( elementNoOptionSpec ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:238:4: elementNoOptionSpec + { + root_0 = (CommonTree)adaptor.nil(); + + pushFollow(FOLLOW_elementNoOptionSpec_in_element1493); + elementNoOptionSpec92=elementNoOptionSpec(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, elementNoOptionSpec92.getTree()); + + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "element" + + public static class elementNoOptionSpec_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "elementNoOptionSpec" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:241:1: elementNoOptionSpec : ( id (labelOp= '=' | labelOp= '+=' ) atom ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] ^( $labelOp id atom ) EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> ^( $labelOp id atom ) ) | id (labelOp= '=' | labelOp= '+=' ) block ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] ^( $labelOp id block ) EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> ^( $labelOp id block ) ) | atom ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] atom EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> atom ) | ebnf | ACTION | SEMPRED ( '=>' -> GATED_SEMPRED | -> SEMPRED ) | treeSpec ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] treeSpec EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> treeSpec ) ); + public final ANTLRv3Parser.elementNoOptionSpec_return elementNoOptionSpec() throws RecognitionException { + ANTLRv3Parser.elementNoOptionSpec_return retval = new ANTLRv3Parser.elementNoOptionSpec_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token labelOp=null; + Token ACTION102=null; + Token SEMPRED103=null; + Token string_literal104=null; + ANTLRv3Parser.id_return id93 = null; + + ANTLRv3Parser.atom_return atom94 = null; + + ANTLRv3Parser.ebnfSuffix_return ebnfSuffix95 = null; + + ANTLRv3Parser.id_return id96 = null; + + ANTLRv3Parser.block_return block97 = null; + + ANTLRv3Parser.ebnfSuffix_return ebnfSuffix98 = null; + + ANTLRv3Parser.atom_return atom99 = null; + + ANTLRv3Parser.ebnfSuffix_return ebnfSuffix100 = null; + + ANTLRv3Parser.ebnf_return ebnf101 = null; + + ANTLRv3Parser.treeSpec_return treeSpec105 = null; + + ANTLRv3Parser.ebnfSuffix_return ebnfSuffix106 = null; + + + CommonTree labelOp_tree=null; + CommonTree ACTION102_tree=null; + CommonTree SEMPRED103_tree=null; + CommonTree string_literal104_tree=null; + RewriteRuleTokenStream stream_71=new RewriteRuleTokenStream(adaptor,"token 71"); + RewriteRuleTokenStream stream_SEMPRED=new RewriteRuleTokenStream(adaptor,"token SEMPRED"); + RewriteRuleTokenStream stream_87=new RewriteRuleTokenStream(adaptor,"token 87"); + RewriteRuleTokenStream stream_88=new RewriteRuleTokenStream(adaptor,"token 88"); + RewriteRuleSubtreeStream stream_treeSpec=new RewriteRuleSubtreeStream(adaptor,"rule treeSpec"); + RewriteRuleSubtreeStream stream_atom=new RewriteRuleSubtreeStream(adaptor,"rule atom"); + RewriteRuleSubtreeStream stream_ebnfSuffix=new RewriteRuleSubtreeStream(adaptor,"rule ebnfSuffix"); + RewriteRuleSubtreeStream stream_block=new RewriteRuleSubtreeStream(adaptor,"rule block"); + RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:242:2: ( id (labelOp= '=' | labelOp= '+=' ) atom ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] ^( $labelOp id atom ) EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> ^( $labelOp id atom ) ) | id (labelOp= '=' | labelOp= '+=' ) block ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] ^( $labelOp id block ) EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> ^( $labelOp id block ) ) | atom ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] atom EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> atom ) | ebnf | ACTION | SEMPRED ( '=>' -> GATED_SEMPRED | -> SEMPRED ) | treeSpec ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] treeSpec EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> treeSpec ) ) + int alt46=7; + alt46 = dfa46.predict(input); + switch (alt46) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:242:4: id (labelOp= '=' | labelOp= '+=' ) atom ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] ^( $labelOp id atom ) EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> ^( $labelOp id atom ) ) + { + pushFollow(FOLLOW_id_in_elementNoOptionSpec1504); + id93=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_id.add(id93.getTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:242:7: (labelOp= '=' | labelOp= '+=' ) + int alt39=2; + int LA39_0 = input.LA(1); + + if ( (LA39_0==71) ) { + alt39=1; + } + else if ( (LA39_0==87) ) { + alt39=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 39, 0, input); + + throw nvae; + } + switch (alt39) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:242:8: labelOp= '=' + { + labelOp=(Token)match(input,71,FOLLOW_71_in_elementNoOptionSpec1509); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_71.add(labelOp); + + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:242:20: labelOp= '+=' + { + labelOp=(Token)match(input,87,FOLLOW_87_in_elementNoOptionSpec1513); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_87.add(labelOp); + + + } + break; + + } + + pushFollow(FOLLOW_atom_in_elementNoOptionSpec1516); + atom94=atom(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_atom.add(atom94.getTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:243:3: ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] ^( $labelOp id atom ) EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> ^( $labelOp id atom ) ) + int alt40=2; + int LA40_0 = input.LA(1); + + if ( (LA40_0==74||(LA40_0>=90 && LA40_0<=91)) ) { + alt40=1; + } + else if ( (LA40_0==SEMPRED||LA40_0==TREE_BEGIN||LA40_0==REWRITE||(LA40_0>=TOKEN_REF && LA40_0<=ACTION)||LA40_0==RULE_REF||LA40_0==69||(LA40_0>=82 && LA40_0<=84)||LA40_0==89||LA40_0==92) ) { + alt40=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 40, 0, input); + + throw nvae; + } + switch (alt40) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:243:5: ebnfSuffix + { + pushFollow(FOLLOW_ebnfSuffix_in_elementNoOptionSpec1522); + ebnfSuffix95=ebnfSuffix(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ebnfSuffix.add(ebnfSuffix95.getTree()); + + + // AST REWRITE + // elements: atom, labelOp, ebnfSuffix, id + // token labels: labelOp + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleTokenStream stream_labelOp=new RewriteRuleTokenStream(adaptor,"token labelOp",labelOp); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 243:16: -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] ^( $labelOp id atom ) EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:243:19: ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] ^( $labelOp id atom ) EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_ebnfSuffix.nextNode(), root_1); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:243:33: ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] ^( $labelOp id atom ) EOA[\"EOA\"] ) EOB[\"EOB\"] ) + { + CommonTree root_2 = (CommonTree)adaptor.nil(); + root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(BLOCK, "BLOCK"), root_2); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:243:50: ^( ALT[\"ALT\"] ^( $labelOp id atom ) EOA[\"EOA\"] ) + { + CommonTree root_3 = (CommonTree)adaptor.nil(); + root_3 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ALT, "ALT"), root_3); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:243:63: ^( $labelOp id atom ) + { + CommonTree root_4 = (CommonTree)adaptor.nil(); + root_4 = (CommonTree)adaptor.becomeRoot(stream_labelOp.nextNode(), root_4); + + adaptor.addChild(root_4, stream_id.nextTree()); + adaptor.addChild(root_4, stream_atom.nextTree()); + + adaptor.addChild(root_3, root_4); + } + adaptor.addChild(root_3, (CommonTree)adaptor.create(EOA, "EOA")); + + adaptor.addChild(root_2, root_3); + } + adaptor.addChild(root_2, (CommonTree)adaptor.create(EOB, "EOB")); + + adaptor.addChild(root_1, root_2); + } + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:244:8: + { + + // AST REWRITE + // elements: id, atom, labelOp + // token labels: labelOp + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleTokenStream stream_labelOp=new RewriteRuleTokenStream(adaptor,"token labelOp",labelOp); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 244:8: -> ^( $labelOp id atom ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:244:11: ^( $labelOp id atom ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_labelOp.nextNode(), root_1); + + adaptor.addChild(root_1, stream_id.nextTree()); + adaptor.addChild(root_1, stream_atom.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + + } + + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:246:4: id (labelOp= '=' | labelOp= '+=' ) block ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] ^( $labelOp id block ) EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> ^( $labelOp id block ) ) + { + pushFollow(FOLLOW_id_in_elementNoOptionSpec1581); + id96=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_id.add(id96.getTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:246:7: (labelOp= '=' | labelOp= '+=' ) + int alt41=2; + int LA41_0 = input.LA(1); + + if ( (LA41_0==71) ) { + alt41=1; + } + else if ( (LA41_0==87) ) { + alt41=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 41, 0, input); + + throw nvae; + } + switch (alt41) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:246:8: labelOp= '=' + { + labelOp=(Token)match(input,71,FOLLOW_71_in_elementNoOptionSpec1586); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_71.add(labelOp); + + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:246:20: labelOp= '+=' + { + labelOp=(Token)match(input,87,FOLLOW_87_in_elementNoOptionSpec1590); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_87.add(labelOp); + + + } + break; + + } + + pushFollow(FOLLOW_block_in_elementNoOptionSpec1593); + block97=block(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_block.add(block97.getTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:247:3: ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] ^( $labelOp id block ) EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> ^( $labelOp id block ) ) + int alt42=2; + int LA42_0 = input.LA(1); + + if ( (LA42_0==74||(LA42_0>=90 && LA42_0<=91)) ) { + alt42=1; + } + else if ( (LA42_0==SEMPRED||LA42_0==TREE_BEGIN||LA42_0==REWRITE||(LA42_0>=TOKEN_REF && LA42_0<=ACTION)||LA42_0==RULE_REF||LA42_0==69||(LA42_0>=82 && LA42_0<=84)||LA42_0==89||LA42_0==92) ) { + alt42=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 42, 0, input); + + throw nvae; + } + switch (alt42) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:247:5: ebnfSuffix + { + pushFollow(FOLLOW_ebnfSuffix_in_elementNoOptionSpec1599); + ebnfSuffix98=ebnfSuffix(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ebnfSuffix.add(ebnfSuffix98.getTree()); + + + // AST REWRITE + // elements: labelOp, ebnfSuffix, id, block + // token labels: labelOp + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleTokenStream stream_labelOp=new RewriteRuleTokenStream(adaptor,"token labelOp",labelOp); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 247:16: -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] ^( $labelOp id block ) EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:247:19: ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] ^( $labelOp id block ) EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_ebnfSuffix.nextNode(), root_1); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:247:33: ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] ^( $labelOp id block ) EOA[\"EOA\"] ) EOB[\"EOB\"] ) + { + CommonTree root_2 = (CommonTree)adaptor.nil(); + root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(BLOCK, "BLOCK"), root_2); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:247:50: ^( ALT[\"ALT\"] ^( $labelOp id block ) EOA[\"EOA\"] ) + { + CommonTree root_3 = (CommonTree)adaptor.nil(); + root_3 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ALT, "ALT"), root_3); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:247:63: ^( $labelOp id block ) + { + CommonTree root_4 = (CommonTree)adaptor.nil(); + root_4 = (CommonTree)adaptor.becomeRoot(stream_labelOp.nextNode(), root_4); + + adaptor.addChild(root_4, stream_id.nextTree()); + adaptor.addChild(root_4, stream_block.nextTree()); + + adaptor.addChild(root_3, root_4); + } + adaptor.addChild(root_3, (CommonTree)adaptor.create(EOA, "EOA")); + + adaptor.addChild(root_2, root_3); + } + adaptor.addChild(root_2, (CommonTree)adaptor.create(EOB, "EOB")); + + adaptor.addChild(root_1, root_2); + } + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:248:8: + { + + // AST REWRITE + // elements: id, labelOp, block + // token labels: labelOp + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleTokenStream stream_labelOp=new RewriteRuleTokenStream(adaptor,"token labelOp",labelOp); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 248:8: -> ^( $labelOp id block ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:248:11: ^( $labelOp id block ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_labelOp.nextNode(), root_1); + + adaptor.addChild(root_1, stream_id.nextTree()); + adaptor.addChild(root_1, stream_block.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + + } + + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:250:4: atom ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] atom EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> atom ) + { + pushFollow(FOLLOW_atom_in_elementNoOptionSpec1658); + atom99=atom(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_atom.add(atom99.getTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:251:3: ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] atom EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> atom ) + int alt43=2; + int LA43_0 = input.LA(1); + + if ( (LA43_0==74||(LA43_0>=90 && LA43_0<=91)) ) { + alt43=1; + } + else if ( (LA43_0==SEMPRED||LA43_0==TREE_BEGIN||LA43_0==REWRITE||(LA43_0>=TOKEN_REF && LA43_0<=ACTION)||LA43_0==RULE_REF||LA43_0==69||(LA43_0>=82 && LA43_0<=84)||LA43_0==89||LA43_0==92) ) { + alt43=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 43, 0, input); + + throw nvae; + } + switch (alt43) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:251:5: ebnfSuffix + { + pushFollow(FOLLOW_ebnfSuffix_in_elementNoOptionSpec1664); + ebnfSuffix100=ebnfSuffix(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ebnfSuffix.add(ebnfSuffix100.getTree()); + + + // AST REWRITE + // elements: atom, ebnfSuffix + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 251:16: -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] atom EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:251:19: ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] atom EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_ebnfSuffix.nextNode(), root_1); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:251:33: ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] atom EOA[\"EOA\"] ) EOB[\"EOB\"] ) + { + CommonTree root_2 = (CommonTree)adaptor.nil(); + root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(BLOCK, "BLOCK"), root_2); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:251:50: ^( ALT[\"ALT\"] atom EOA[\"EOA\"] ) + { + CommonTree root_3 = (CommonTree)adaptor.nil(); + root_3 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ALT, "ALT"), root_3); + + adaptor.addChild(root_3, stream_atom.nextTree()); + adaptor.addChild(root_3, (CommonTree)adaptor.create(EOA, "EOA")); + + adaptor.addChild(root_2, root_3); + } + adaptor.addChild(root_2, (CommonTree)adaptor.create(EOB, "EOB")); + + adaptor.addChild(root_1, root_2); + } + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:252:8: + { + + // AST REWRITE + // elements: atom + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 252:8: -> atom + { + adaptor.addChild(root_0, stream_atom.nextTree()); + + } + + retval.tree = root_0;} + } + break; + + } + + + } + break; + case 4 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:254:4: ebnf + { + root_0 = (CommonTree)adaptor.nil(); + + pushFollow(FOLLOW_ebnf_in_elementNoOptionSpec1710); + ebnf101=ebnf(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, ebnf101.getTree()); + + } + break; + case 5 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:255:6: ACTION + { + root_0 = (CommonTree)adaptor.nil(); + + ACTION102=(Token)match(input,ACTION,FOLLOW_ACTION_in_elementNoOptionSpec1717); if (state.failed) return retval; + if ( state.backtracking==0 ) { + ACTION102_tree = (CommonTree)adaptor.create(ACTION102); + adaptor.addChild(root_0, ACTION102_tree); + } + + } + break; + case 6 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:256:6: SEMPRED ( '=>' -> GATED_SEMPRED | -> SEMPRED ) + { + SEMPRED103=(Token)match(input,SEMPRED,FOLLOW_SEMPRED_in_elementNoOptionSpec1724); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_SEMPRED.add(SEMPRED103); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:256:14: ( '=>' -> GATED_SEMPRED | -> SEMPRED ) + int alt44=2; + int LA44_0 = input.LA(1); + + if ( (LA44_0==88) ) { + alt44=1; + } + else if ( (LA44_0==SEMPRED||LA44_0==TREE_BEGIN||LA44_0==REWRITE||(LA44_0>=TOKEN_REF && LA44_0<=ACTION)||LA44_0==RULE_REF||LA44_0==69||(LA44_0>=82 && LA44_0<=84)||LA44_0==89||LA44_0==92) ) { + alt44=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 44, 0, input); + + throw nvae; + } + switch (alt44) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:256:16: '=>' + { + string_literal104=(Token)match(input,88,FOLLOW_88_in_elementNoOptionSpec1728); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_88.add(string_literal104); + + + + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 256:21: -> GATED_SEMPRED + { + adaptor.addChild(root_0, (CommonTree)adaptor.create(GATED_SEMPRED, "GATED_SEMPRED")); + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:256:40: + { + + // AST REWRITE + // elements: SEMPRED + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 256:40: -> SEMPRED + { + adaptor.addChild(root_0, stream_SEMPRED.nextNode()); + + } + + retval.tree = root_0;} + } + break; + + } + + + } + break; + case 7 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:257:6: treeSpec ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] treeSpec EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> treeSpec ) + { + pushFollow(FOLLOW_treeSpec_in_elementNoOptionSpec1747); + treeSpec105=treeSpec(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_treeSpec.add(treeSpec105.getTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:258:3: ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] treeSpec EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> treeSpec ) + int alt45=2; + int LA45_0 = input.LA(1); + + if ( (LA45_0==74||(LA45_0>=90 && LA45_0<=91)) ) { + alt45=1; + } + else if ( (LA45_0==SEMPRED||LA45_0==TREE_BEGIN||LA45_0==REWRITE||(LA45_0>=TOKEN_REF && LA45_0<=ACTION)||LA45_0==RULE_REF||LA45_0==69||(LA45_0>=82 && LA45_0<=84)||LA45_0==89||LA45_0==92) ) { + alt45=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 45, 0, input); + + throw nvae; + } + switch (alt45) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:258:5: ebnfSuffix + { + pushFollow(FOLLOW_ebnfSuffix_in_elementNoOptionSpec1753); + ebnfSuffix106=ebnfSuffix(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ebnfSuffix.add(ebnfSuffix106.getTree()); + + + // AST REWRITE + // elements: ebnfSuffix, treeSpec + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 258:16: -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] treeSpec EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:258:19: ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] treeSpec EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_ebnfSuffix.nextNode(), root_1); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:258:33: ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] treeSpec EOA[\"EOA\"] ) EOB[\"EOB\"] ) + { + CommonTree root_2 = (CommonTree)adaptor.nil(); + root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(BLOCK, "BLOCK"), root_2); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:258:50: ^( ALT[\"ALT\"] treeSpec EOA[\"EOA\"] ) + { + CommonTree root_3 = (CommonTree)adaptor.nil(); + root_3 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ALT, "ALT"), root_3); + + adaptor.addChild(root_3, stream_treeSpec.nextTree()); + adaptor.addChild(root_3, (CommonTree)adaptor.create(EOA, "EOA")); + + adaptor.addChild(root_2, root_3); + } + adaptor.addChild(root_2, (CommonTree)adaptor.create(EOB, "EOB")); + + adaptor.addChild(root_1, root_2); + } + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:259:8: + { + + // AST REWRITE + // elements: treeSpec + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 259:8: -> treeSpec + { + adaptor.addChild(root_0, stream_treeSpec.nextTree()); + + } + + retval.tree = root_0;} + } + break; + + } + + + } + break; + + } + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "elementNoOptionSpec" + + public static class atom_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "atom" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:263:1: atom : ( range ( (op= '^' | op= '!' ) -> ^( $op range ) | -> range ) | terminal | notSet ( (op= '^' | op= '!' ) -> ^( $op notSet ) | -> notSet ) | RULE_REF (arg= ARG_ACTION )? ( (op= '^' | op= '!' ) )? -> {$arg!=null&&op!=null}? ^( $op RULE_REF $arg) -> {$arg!=null}? ^( RULE_REF $arg) -> {$op!=null}? ^( $op RULE_REF ) -> RULE_REF ); + public final ANTLRv3Parser.atom_return atom() throws RecognitionException { + ANTLRv3Parser.atom_return retval = new ANTLRv3Parser.atom_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token op=null; + Token arg=null; + Token RULE_REF110=null; + ANTLRv3Parser.range_return range107 = null; + + ANTLRv3Parser.terminal_return terminal108 = null; + + ANTLRv3Parser.notSet_return notSet109 = null; + + + CommonTree op_tree=null; + CommonTree arg_tree=null; + CommonTree RULE_REF110_tree=null; + RewriteRuleTokenStream stream_ARG_ACTION=new RewriteRuleTokenStream(adaptor,"token ARG_ACTION"); + RewriteRuleTokenStream stream_ROOT=new RewriteRuleTokenStream(adaptor,"token ROOT"); + RewriteRuleTokenStream stream_RULE_REF=new RewriteRuleTokenStream(adaptor,"token RULE_REF"); + RewriteRuleTokenStream stream_BANG=new RewriteRuleTokenStream(adaptor,"token BANG"); + RewriteRuleSubtreeStream stream_notSet=new RewriteRuleSubtreeStream(adaptor,"rule notSet"); + RewriteRuleSubtreeStream stream_range=new RewriteRuleSubtreeStream(adaptor,"rule range"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:263:5: ( range ( (op= '^' | op= '!' ) -> ^( $op range ) | -> range ) | terminal | notSet ( (op= '^' | op= '!' ) -> ^( $op notSet ) | -> notSet ) | RULE_REF (arg= ARG_ACTION )? ( (op= '^' | op= '!' ) )? -> {$arg!=null&&op!=null}? ^( $op RULE_REF $arg) -> {$arg!=null}? ^( RULE_REF $arg) -> {$op!=null}? ^( $op RULE_REF ) -> RULE_REF ) + int alt54=4; + switch ( input.LA(1) ) { + case CHAR_LITERAL: + { + int LA54_1 = input.LA(2); + + if ( (LA54_1==RANGE) ) { + alt54=1; + } + else if ( (LA54_1==SEMPRED||(LA54_1>=TREE_BEGIN && LA54_1<=REWRITE)||(LA54_1>=TOKEN_REF && LA54_1<=ACTION)||LA54_1==RULE_REF||LA54_1==69||LA54_1==74||(LA54_1>=82 && LA54_1<=84)||(LA54_1>=89 && LA54_1<=92)) ) { + alt54=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 54, 1, input); + + throw nvae; + } + } + break; + case TOKEN_REF: + case STRING_LITERAL: + case 92: + { + alt54=2; + } + break; + case 89: + { + alt54=3; + } + break; + case RULE_REF: + { + alt54=4; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 54, 0, input); + + throw nvae; + } + + switch (alt54) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:263:9: range ( (op= '^' | op= '!' ) -> ^( $op range ) | -> range ) + { + pushFollow(FOLLOW_range_in_atom1805); + range107=range(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_range.add(range107.getTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:263:15: ( (op= '^' | op= '!' ) -> ^( $op range ) | -> range ) + int alt48=2; + int LA48_0 = input.LA(1); + + if ( ((LA48_0>=ROOT && LA48_0<=BANG)) ) { + alt48=1; + } + else if ( (LA48_0==SEMPRED||LA48_0==TREE_BEGIN||LA48_0==REWRITE||(LA48_0>=TOKEN_REF && LA48_0<=ACTION)||LA48_0==RULE_REF||LA48_0==69||LA48_0==74||(LA48_0>=82 && LA48_0<=84)||(LA48_0>=89 && LA48_0<=92)) ) { + alt48=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 48, 0, input); + + throw nvae; + } + switch (alt48) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:263:17: (op= '^' | op= '!' ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:263:17: (op= '^' | op= '!' ) + int alt47=2; + int LA47_0 = input.LA(1); + + if ( (LA47_0==ROOT) ) { + alt47=1; + } + else if ( (LA47_0==BANG) ) { + alt47=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 47, 0, input); + + throw nvae; + } + switch (alt47) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:263:18: op= '^' + { + op=(Token)match(input,ROOT,FOLLOW_ROOT_in_atom1812); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ROOT.add(op); + + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:263:25: op= '!' + { + op=(Token)match(input,BANG,FOLLOW_BANG_in_atom1816); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_BANG.add(op); + + + } + break; + + } + + + + // AST REWRITE + // elements: range, op + // token labels: op + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleTokenStream stream_op=new RewriteRuleTokenStream(adaptor,"token op",op); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 263:33: -> ^( $op range ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:263:36: ^( $op range ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_op.nextNode(), root_1); + + adaptor.addChild(root_1, stream_range.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:263:51: + { + + // AST REWRITE + // elements: range + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 263:51: -> range + { + adaptor.addChild(root_0, stream_range.nextTree()); + + } + + retval.tree = root_0;} + } + break; + + } + + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:264:9: terminal + { + root_0 = (CommonTree)adaptor.nil(); + + pushFollow(FOLLOW_terminal_in_atom1844); + terminal108=terminal(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, terminal108.getTree()); + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:265:7: notSet ( (op= '^' | op= '!' ) -> ^( $op notSet ) | -> notSet ) + { + pushFollow(FOLLOW_notSet_in_atom1852); + notSet109=notSet(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_notSet.add(notSet109.getTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:265:14: ( (op= '^' | op= '!' ) -> ^( $op notSet ) | -> notSet ) + int alt50=2; + int LA50_0 = input.LA(1); + + if ( ((LA50_0>=ROOT && LA50_0<=BANG)) ) { + alt50=1; + } + else if ( (LA50_0==SEMPRED||LA50_0==TREE_BEGIN||LA50_0==REWRITE||(LA50_0>=TOKEN_REF && LA50_0<=ACTION)||LA50_0==RULE_REF||LA50_0==69||LA50_0==74||(LA50_0>=82 && LA50_0<=84)||(LA50_0>=89 && LA50_0<=92)) ) { + alt50=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 50, 0, input); + + throw nvae; + } + switch (alt50) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:265:16: (op= '^' | op= '!' ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:265:16: (op= '^' | op= '!' ) + int alt49=2; + int LA49_0 = input.LA(1); + + if ( (LA49_0==ROOT) ) { + alt49=1; + } + else if ( (LA49_0==BANG) ) { + alt49=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 49, 0, input); + + throw nvae; + } + switch (alt49) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:265:17: op= '^' + { + op=(Token)match(input,ROOT,FOLLOW_ROOT_in_atom1859); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ROOT.add(op); + + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:265:24: op= '!' + { + op=(Token)match(input,BANG,FOLLOW_BANG_in_atom1863); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_BANG.add(op); + + + } + break; + + } + + + + // AST REWRITE + // elements: op, notSet + // token labels: op + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleTokenStream stream_op=new RewriteRuleTokenStream(adaptor,"token op",op); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 265:32: -> ^( $op notSet ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:265:35: ^( $op notSet ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_op.nextNode(), root_1); + + adaptor.addChild(root_1, stream_notSet.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:265:51: + { + + // AST REWRITE + // elements: notSet + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 265:51: -> notSet + { + adaptor.addChild(root_0, stream_notSet.nextTree()); + + } + + retval.tree = root_0;} + } + break; + + } + + + } + break; + case 4 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:266:9: RULE_REF (arg= ARG_ACTION )? ( (op= '^' | op= '!' ) )? + { + RULE_REF110=(Token)match(input,RULE_REF,FOLLOW_RULE_REF_in_atom1891); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_RULE_REF.add(RULE_REF110); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:266:18: (arg= ARG_ACTION )? + int alt51=2; + int LA51_0 = input.LA(1); + + if ( (LA51_0==ARG_ACTION) ) { + alt51=1; + } + switch (alt51) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:266:20: arg= ARG_ACTION + { + arg=(Token)match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_atom1897); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ARG_ACTION.add(arg); + + + } + break; + + } + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:266:38: ( (op= '^' | op= '!' ) )? + int alt53=2; + int LA53_0 = input.LA(1); + + if ( ((LA53_0>=ROOT && LA53_0<=BANG)) ) { + alt53=1; + } + switch (alt53) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:266:40: (op= '^' | op= '!' ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:266:40: (op= '^' | op= '!' ) + int alt52=2; + int LA52_0 = input.LA(1); + + if ( (LA52_0==ROOT) ) { + alt52=1; + } + else if ( (LA52_0==BANG) ) { + alt52=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 52, 0, input); + + throw nvae; + } + switch (alt52) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:266:41: op= '^' + { + op=(Token)match(input,ROOT,FOLLOW_ROOT_in_atom1907); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ROOT.add(op); + + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:266:48: op= '!' + { + op=(Token)match(input,BANG,FOLLOW_BANG_in_atom1911); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_BANG.add(op); + + + } + break; + + } + + + } + break; + + } + + + + // AST REWRITE + // elements: arg, op, op, RULE_REF, RULE_REF, RULE_REF, arg, RULE_REF + // token labels: op, arg + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleTokenStream stream_op=new RewriteRuleTokenStream(adaptor,"token op",op); + RewriteRuleTokenStream stream_arg=new RewriteRuleTokenStream(adaptor,"token arg",arg); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 267:6: -> {$arg!=null&&op!=null}? ^( $op RULE_REF $arg) + if (arg!=null&&op!=null) { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:267:33: ^( $op RULE_REF $arg) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_op.nextNode(), root_1); + + adaptor.addChild(root_1, stream_RULE_REF.nextNode()); + adaptor.addChild(root_1, stream_arg.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + else // 268:6: -> {$arg!=null}? ^( RULE_REF $arg) + if (arg!=null) { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:268:25: ^( RULE_REF $arg) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_RULE_REF.nextNode(), root_1); + + adaptor.addChild(root_1, stream_arg.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + else // 269:6: -> {$op!=null}? ^( $op RULE_REF ) + if (op!=null) { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:269:25: ^( $op RULE_REF ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_op.nextNode(), root_1); + + adaptor.addChild(root_1, stream_RULE_REF.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + else // 270:6: -> RULE_REF + { + adaptor.addChild(root_0, stream_RULE_REF.nextNode()); + + } + + retval.tree = root_0;} + } + break; + + } + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "atom" + + public static class notSet_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "notSet" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:273:1: notSet : '~' ( notTerminal -> ^( '~' notTerminal ) | block -> ^( '~' block ) ) ; + public final ANTLRv3Parser.notSet_return notSet() throws RecognitionException { + ANTLRv3Parser.notSet_return retval = new ANTLRv3Parser.notSet_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token char_literal111=null; + ANTLRv3Parser.notTerminal_return notTerminal112 = null; + + ANTLRv3Parser.block_return block113 = null; + + + CommonTree char_literal111_tree=null; + RewriteRuleTokenStream stream_89=new RewriteRuleTokenStream(adaptor,"token 89"); + RewriteRuleSubtreeStream stream_notTerminal=new RewriteRuleSubtreeStream(adaptor,"rule notTerminal"); + RewriteRuleSubtreeStream stream_block=new RewriteRuleSubtreeStream(adaptor,"rule block"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:274:2: ( '~' ( notTerminal -> ^( '~' notTerminal ) | block -> ^( '~' block ) ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:274:4: '~' ( notTerminal -> ^( '~' notTerminal ) | block -> ^( '~' block ) ) + { + char_literal111=(Token)match(input,89,FOLLOW_89_in_notSet1994); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_89.add(char_literal111); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:275:3: ( notTerminal -> ^( '~' notTerminal ) | block -> ^( '~' block ) ) + int alt55=2; + int LA55_0 = input.LA(1); + + if ( ((LA55_0>=TOKEN_REF && LA55_0<=CHAR_LITERAL)) ) { + alt55=1; + } + else if ( (LA55_0==82) ) { + alt55=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 55, 0, input); + + throw nvae; + } + switch (alt55) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:275:5: notTerminal + { + pushFollow(FOLLOW_notTerminal_in_notSet2000); + notTerminal112=notTerminal(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_notTerminal.add(notTerminal112.getTree()); + + + // AST REWRITE + // elements: notTerminal, 89 + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 275:17: -> ^( '~' notTerminal ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:275:20: ^( '~' notTerminal ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_89.nextNode(), root_1); + + adaptor.addChild(root_1, stream_notTerminal.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:276:5: block + { + pushFollow(FOLLOW_block_in_notSet2014); + block113=block(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_block.add(block113.getTree()); + + + // AST REWRITE + // elements: 89, block + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 276:12: -> ^( '~' block ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:276:15: ^( '~' block ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_89.nextNode(), root_1); + + adaptor.addChild(root_1, stream_block.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + + } + + + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "notSet" + + public static class treeSpec_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "treeSpec" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:280:1: treeSpec : '^(' element ( element )+ ')' -> ^( TREE_BEGIN ( element )+ ) ; + public final ANTLRv3Parser.treeSpec_return treeSpec() throws RecognitionException { + ANTLRv3Parser.treeSpec_return retval = new ANTLRv3Parser.treeSpec_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token string_literal114=null; + Token char_literal117=null; + ANTLRv3Parser.element_return element115 = null; + + ANTLRv3Parser.element_return element116 = null; + + + CommonTree string_literal114_tree=null; + CommonTree char_literal117_tree=null; + RewriteRuleTokenStream stream_84=new RewriteRuleTokenStream(adaptor,"token 84"); + RewriteRuleTokenStream stream_TREE_BEGIN=new RewriteRuleTokenStream(adaptor,"token TREE_BEGIN"); + RewriteRuleSubtreeStream stream_element=new RewriteRuleSubtreeStream(adaptor,"rule element"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:281:2: ( '^(' element ( element )+ ')' -> ^( TREE_BEGIN ( element )+ ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:281:4: '^(' element ( element )+ ')' + { + string_literal114=(Token)match(input,TREE_BEGIN,FOLLOW_TREE_BEGIN_in_treeSpec2038); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_TREE_BEGIN.add(string_literal114); + + pushFollow(FOLLOW_element_in_treeSpec2040); + element115=element(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_element.add(element115.getTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:281:17: ( element )+ + int cnt56=0; + loop56: + do { + int alt56=2; + int LA56_0 = input.LA(1); + + if ( (LA56_0==SEMPRED||LA56_0==TREE_BEGIN||(LA56_0>=TOKEN_REF && LA56_0<=ACTION)||LA56_0==RULE_REF||LA56_0==82||LA56_0==89||LA56_0==92) ) { + alt56=1; + } + + + switch (alt56) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:281:19: element + { + pushFollow(FOLLOW_element_in_treeSpec2044); + element116=element(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_element.add(element116.getTree()); + + } + break; + + default : + if ( cnt56 >= 1 ) break loop56; + if (state.backtracking>0) {state.failed=true; return retval;} + EarlyExitException eee = + new EarlyExitException(56, input); + throw eee; + } + cnt56++; + } while (true); + + char_literal117=(Token)match(input,84,FOLLOW_84_in_treeSpec2049); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_84.add(char_literal117); + + + + // AST REWRITE + // elements: element + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 281:34: -> ^( TREE_BEGIN ( element )+ ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:281:37: ^( TREE_BEGIN ( element )+ ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(TREE_BEGIN, "TREE_BEGIN"), root_1); + + if ( !(stream_element.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_element.hasNext() ) { + adaptor.addChild(root_1, stream_element.nextTree()); + + } + stream_element.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "treeSpec" + + public static class ebnf_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "ebnf" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:284:1: ebnf : block (op= '?' -> ^( OPTIONAL[op] block ) | op= '*' -> ^( CLOSURE[op] block ) | op= '+' -> ^( POSITIVE_CLOSURE[op] block ) | '=>' -> {gtype==COMBINED_GRAMMAR &&\n\t\t\t\t\t Character.isUpperCase($rule::name.charAt(0))}? ^( SYNPRED[\"=>\"] block ) -> SYN_SEMPRED | -> block ) ; + public final ANTLRv3Parser.ebnf_return ebnf() throws RecognitionException { + ANTLRv3Parser.ebnf_return retval = new ANTLRv3Parser.ebnf_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token op=null; + Token string_literal119=null; + ANTLRv3Parser.block_return block118 = null; + + + CommonTree op_tree=null; + CommonTree string_literal119_tree=null; + RewriteRuleTokenStream stream_91=new RewriteRuleTokenStream(adaptor,"token 91"); + RewriteRuleTokenStream stream_74=new RewriteRuleTokenStream(adaptor,"token 74"); + RewriteRuleTokenStream stream_90=new RewriteRuleTokenStream(adaptor,"token 90"); + RewriteRuleTokenStream stream_88=new RewriteRuleTokenStream(adaptor,"token 88"); + RewriteRuleSubtreeStream stream_block=new RewriteRuleSubtreeStream(adaptor,"rule block"); + + Token firstToken = input.LT(1); + + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:293:2: ( block (op= '?' -> ^( OPTIONAL[op] block ) | op= '*' -> ^( CLOSURE[op] block ) | op= '+' -> ^( POSITIVE_CLOSURE[op] block ) | '=>' -> {gtype==COMBINED_GRAMMAR &&\n\t\t\t\t\t Character.isUpperCase($rule::name.charAt(0))}? ^( SYNPRED[\"=>\"] block ) -> SYN_SEMPRED | -> block ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:293:4: block (op= '?' -> ^( OPTIONAL[op] block ) | op= '*' -> ^( CLOSURE[op] block ) | op= '+' -> ^( POSITIVE_CLOSURE[op] block ) | '=>' -> {gtype==COMBINED_GRAMMAR &&\n\t\t\t\t\t Character.isUpperCase($rule::name.charAt(0))}? ^( SYNPRED[\"=>\"] block ) -> SYN_SEMPRED | -> block ) + { + pushFollow(FOLLOW_block_in_ebnf2081); + block118=block(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_block.add(block118.getTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:294:3: (op= '?' -> ^( OPTIONAL[op] block ) | op= '*' -> ^( CLOSURE[op] block ) | op= '+' -> ^( POSITIVE_CLOSURE[op] block ) | '=>' -> {gtype==COMBINED_GRAMMAR &&\n\t\t\t\t\t Character.isUpperCase($rule::name.charAt(0))}? ^( SYNPRED[\"=>\"] block ) -> SYN_SEMPRED | -> block ) + int alt57=5; + switch ( input.LA(1) ) { + case 90: + { + alt57=1; + } + break; + case 74: + { + alt57=2; + } + break; + case 91: + { + alt57=3; + } + break; + case 88: + { + alt57=4; + } + break; + case SEMPRED: + case TREE_BEGIN: + case REWRITE: + case TOKEN_REF: + case STRING_LITERAL: + case CHAR_LITERAL: + case ACTION: + case RULE_REF: + case 69: + case 82: + case 83: + case 84: + case 89: + case 92: + { + alt57=5; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 57, 0, input); + + throw nvae; + } + + switch (alt57) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:294:5: op= '?' + { + op=(Token)match(input,90,FOLLOW_90_in_ebnf2089); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_90.add(op); + + + + // AST REWRITE + // elements: block + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 294:12: -> ^( OPTIONAL[op] block ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:294:15: ^( OPTIONAL[op] block ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(OPTIONAL, op), root_1); + + adaptor.addChild(root_1, stream_block.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:295:5: op= '*' + { + op=(Token)match(input,74,FOLLOW_74_in_ebnf2106); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_74.add(op); + + + + // AST REWRITE + // elements: block + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 295:12: -> ^( CLOSURE[op] block ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:295:15: ^( CLOSURE[op] block ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(CLOSURE, op), root_1); + + adaptor.addChild(root_1, stream_block.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:296:5: op= '+' + { + op=(Token)match(input,91,FOLLOW_91_in_ebnf2123); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_91.add(op); + + + + // AST REWRITE + // elements: block + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 296:12: -> ^( POSITIVE_CLOSURE[op] block ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:296:15: ^( POSITIVE_CLOSURE[op] block ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(POSITIVE_CLOSURE, op), root_1); + + adaptor.addChild(root_1, stream_block.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 4 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:297:7: '=>' + { + string_literal119=(Token)match(input,88,FOLLOW_88_in_ebnf2140); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_88.add(string_literal119); + + + + // AST REWRITE + // elements: block + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 298:6: -> {gtype==COMBINED_GRAMMAR &&\n\t\t\t\t\t Character.isUpperCase($rule::name.charAt(0))}? ^( SYNPRED[\"=>\"] block ) + if (gtype==COMBINED_GRAMMAR && + Character.isUpperCase(((rule_scope)rule_stack.peek()).name.charAt(0))) { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:301:9: ^( SYNPRED[\"=>\"] block ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(SYNPRED, "=>"), root_1); + + adaptor.addChild(root_1, stream_block.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + else // 303:6: -> SYN_SEMPRED + { + adaptor.addChild(root_0, (CommonTree)adaptor.create(SYN_SEMPRED, "SYN_SEMPRED")); + + } + + retval.tree = root_0;} + } + break; + case 5 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:304:13: + { + + // AST REWRITE + // elements: block + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 304:13: -> block + { + adaptor.addChild(root_0, stream_block.nextTree()); + + } + + retval.tree = root_0;} + } + break; + + } + + + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + if ( state.backtracking==0 ) { + + ((CommonTree)retval.tree).getToken().setLine(firstToken.getLine()); + ((CommonTree)retval.tree).getToken().setCharPositionInLine(firstToken.getCharPositionInLine()); + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "ebnf" + + public static class range_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "range" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:308:1: range : c1= CHAR_LITERAL RANGE c2= CHAR_LITERAL -> ^( CHAR_RANGE[$c1,\"..\"] $c1 $c2) ; + public final ANTLRv3Parser.range_return range() throws RecognitionException { + ANTLRv3Parser.range_return retval = new ANTLRv3Parser.range_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token c1=null; + Token c2=null; + Token RANGE120=null; + + CommonTree c1_tree=null; + CommonTree c2_tree=null; + CommonTree RANGE120_tree=null; + RewriteRuleTokenStream stream_RANGE=new RewriteRuleTokenStream(adaptor,"token RANGE"); + RewriteRuleTokenStream stream_CHAR_LITERAL=new RewriteRuleTokenStream(adaptor,"token CHAR_LITERAL"); + + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:309:2: (c1= CHAR_LITERAL RANGE c2= CHAR_LITERAL -> ^( CHAR_RANGE[$c1,\"..\"] $c1 $c2) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:309:4: c1= CHAR_LITERAL RANGE c2= CHAR_LITERAL + { + c1=(Token)match(input,CHAR_LITERAL,FOLLOW_CHAR_LITERAL_in_range2223); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_CHAR_LITERAL.add(c1); + + RANGE120=(Token)match(input,RANGE,FOLLOW_RANGE_in_range2225); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_RANGE.add(RANGE120); + + c2=(Token)match(input,CHAR_LITERAL,FOLLOW_CHAR_LITERAL_in_range2229); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_CHAR_LITERAL.add(c2); + + + + // AST REWRITE + // elements: c2, c1 + // token labels: c2, c1 + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleTokenStream stream_c2=new RewriteRuleTokenStream(adaptor,"token c2",c2); + RewriteRuleTokenStream stream_c1=new RewriteRuleTokenStream(adaptor,"token c1",c1); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 309:42: -> ^( CHAR_RANGE[$c1,\"..\"] $c1 $c2) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:309:45: ^( CHAR_RANGE[$c1,\"..\"] $c1 $c2) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(CHAR_RANGE, c1, ".."), root_1); + + adaptor.addChild(root_1, stream_c1.nextNode()); + adaptor.addChild(root_1, stream_c2.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "range" + + public static class terminal_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "terminal" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:312:1: terminal : ( CHAR_LITERAL -> CHAR_LITERAL | TOKEN_REF ( ARG_ACTION -> ^( TOKEN_REF ARG_ACTION ) | -> TOKEN_REF ) | STRING_LITERAL -> STRING_LITERAL | '.' -> '.' ) ( '^' -> ^( '^' $terminal) | '!' -> ^( '!' $terminal) )? ; + public final ANTLRv3Parser.terminal_return terminal() throws RecognitionException { + ANTLRv3Parser.terminal_return retval = new ANTLRv3Parser.terminal_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token CHAR_LITERAL121=null; + Token TOKEN_REF122=null; + Token ARG_ACTION123=null; + Token STRING_LITERAL124=null; + Token char_literal125=null; + Token char_literal126=null; + Token char_literal127=null; + + CommonTree CHAR_LITERAL121_tree=null; + CommonTree TOKEN_REF122_tree=null; + CommonTree ARG_ACTION123_tree=null; + CommonTree STRING_LITERAL124_tree=null; + CommonTree char_literal125_tree=null; + CommonTree char_literal126_tree=null; + CommonTree char_literal127_tree=null; + RewriteRuleTokenStream stream_ROOT=new RewriteRuleTokenStream(adaptor,"token ROOT"); + RewriteRuleTokenStream stream_ARG_ACTION=new RewriteRuleTokenStream(adaptor,"token ARG_ACTION"); + RewriteRuleTokenStream stream_TOKEN_REF=new RewriteRuleTokenStream(adaptor,"token TOKEN_REF"); + RewriteRuleTokenStream stream_92=new RewriteRuleTokenStream(adaptor,"token 92"); + RewriteRuleTokenStream stream_CHAR_LITERAL=new RewriteRuleTokenStream(adaptor,"token CHAR_LITERAL"); + RewriteRuleTokenStream stream_STRING_LITERAL=new RewriteRuleTokenStream(adaptor,"token STRING_LITERAL"); + RewriteRuleTokenStream stream_BANG=new RewriteRuleTokenStream(adaptor,"token BANG"); + + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:313:5: ( ( CHAR_LITERAL -> CHAR_LITERAL | TOKEN_REF ( ARG_ACTION -> ^( TOKEN_REF ARG_ACTION ) | -> TOKEN_REF ) | STRING_LITERAL -> STRING_LITERAL | '.' -> '.' ) ( '^' -> ^( '^' $terminal) | '!' -> ^( '!' $terminal) )? ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:313:9: ( CHAR_LITERAL -> CHAR_LITERAL | TOKEN_REF ( ARG_ACTION -> ^( TOKEN_REF ARG_ACTION ) | -> TOKEN_REF ) | STRING_LITERAL -> STRING_LITERAL | '.' -> '.' ) ( '^' -> ^( '^' $terminal) | '!' -> ^( '!' $terminal) )? + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:313:9: ( CHAR_LITERAL -> CHAR_LITERAL | TOKEN_REF ( ARG_ACTION -> ^( TOKEN_REF ARG_ACTION ) | -> TOKEN_REF ) | STRING_LITERAL -> STRING_LITERAL | '.' -> '.' ) + int alt59=4; + switch ( input.LA(1) ) { + case CHAR_LITERAL: + { + alt59=1; + } + break; + case TOKEN_REF: + { + alt59=2; + } + break; + case STRING_LITERAL: + { + alt59=3; + } + break; + case 92: + { + alt59=4; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 59, 0, input); + + throw nvae; + } + + switch (alt59) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:313:11: CHAR_LITERAL + { + CHAR_LITERAL121=(Token)match(input,CHAR_LITERAL,FOLLOW_CHAR_LITERAL_in_terminal2260); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_CHAR_LITERAL.add(CHAR_LITERAL121); + + + + // AST REWRITE + // elements: CHAR_LITERAL + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 313:27: -> CHAR_LITERAL + { + adaptor.addChild(root_0, stream_CHAR_LITERAL.nextNode()); + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:315:7: TOKEN_REF ( ARG_ACTION -> ^( TOKEN_REF ARG_ACTION ) | -> TOKEN_REF ) + { + TOKEN_REF122=(Token)match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_terminal2282); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_TOKEN_REF.add(TOKEN_REF122); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:316:4: ( ARG_ACTION -> ^( TOKEN_REF ARG_ACTION ) | -> TOKEN_REF ) + int alt58=2; + int LA58_0 = input.LA(1); + + if ( (LA58_0==ARG_ACTION) ) { + alt58=1; + } + else if ( (LA58_0==SEMPRED||(LA58_0>=TREE_BEGIN && LA58_0<=REWRITE)||(LA58_0>=TOKEN_REF && LA58_0<=ACTION)||LA58_0==RULE_REF||LA58_0==69||LA58_0==74||(LA58_0>=82 && LA58_0<=84)||(LA58_0>=89 && LA58_0<=92)) ) { + alt58=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 58, 0, input); + + throw nvae; + } + switch (alt58) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:316:6: ARG_ACTION + { + ARG_ACTION123=(Token)match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_terminal2289); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ARG_ACTION.add(ARG_ACTION123); + + + + // AST REWRITE + // elements: TOKEN_REF, ARG_ACTION + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 316:20: -> ^( TOKEN_REF ARG_ACTION ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:316:23: ^( TOKEN_REF ARG_ACTION ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_TOKEN_REF.nextNode(), root_1); + + adaptor.addChild(root_1, stream_ARG_ACTION.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:317:12: + { + + // AST REWRITE + // elements: TOKEN_REF + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 317:12: -> TOKEN_REF + { + adaptor.addChild(root_0, stream_TOKEN_REF.nextNode()); + + } + + retval.tree = root_0;} + } + break; + + } + + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:319:7: STRING_LITERAL + { + STRING_LITERAL124=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_terminal2328); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_STRING_LITERAL.add(STRING_LITERAL124); + + + + // AST REWRITE + // elements: STRING_LITERAL + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 319:25: -> STRING_LITERAL + { + adaptor.addChild(root_0, stream_STRING_LITERAL.nextNode()); + + } + + retval.tree = root_0;} + } + break; + case 4 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:320:7: '.' + { + char_literal125=(Token)match(input,92,FOLLOW_92_in_terminal2343); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_92.add(char_literal125); + + + + // AST REWRITE + // elements: 92 + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 320:17: -> '.' + { + adaptor.addChild(root_0, stream_92.nextNode()); + + } + + retval.tree = root_0;} + } + break; + + } + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:322:3: ( '^' -> ^( '^' $terminal) | '!' -> ^( '!' $terminal) )? + int alt60=3; + int LA60_0 = input.LA(1); + + if ( (LA60_0==ROOT) ) { + alt60=1; + } + else if ( (LA60_0==BANG) ) { + alt60=2; + } + switch (alt60) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:322:5: '^' + { + char_literal126=(Token)match(input,ROOT,FOLLOW_ROOT_in_terminal2364); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ROOT.add(char_literal126); + + + + // AST REWRITE + // elements: terminal, ROOT + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 322:15: -> ^( '^' $terminal) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:322:18: ^( '^' $terminal) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_ROOT.nextNode(), root_1); + + adaptor.addChild(root_1, stream_retval.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:323:5: '!' + { + char_literal127=(Token)match(input,BANG,FOLLOW_BANG_in_terminal2385); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_BANG.add(char_literal127); + + + + // AST REWRITE + // elements: terminal, BANG + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 323:15: -> ^( '!' $terminal) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:323:18: ^( '!' $terminal) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_BANG.nextNode(), root_1); + + adaptor.addChild(root_1, stream_retval.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + + } + + + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "terminal" + + public static class notTerminal_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "notTerminal" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:327:1: notTerminal : ( CHAR_LITERAL | TOKEN_REF | STRING_LITERAL ); + public final ANTLRv3Parser.notTerminal_return notTerminal() throws RecognitionException { + ANTLRv3Parser.notTerminal_return retval = new ANTLRv3Parser.notTerminal_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token set128=null; + + CommonTree set128_tree=null; + + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:328:2: ( CHAR_LITERAL | TOKEN_REF | STRING_LITERAL ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g: + { + root_0 = (CommonTree)adaptor.nil(); + + set128=(Token)input.LT(1); + if ( (input.LA(1)>=TOKEN_REF && input.LA(1)<=CHAR_LITERAL) ) { + input.consume(); + if ( state.backtracking==0 ) adaptor.addChild(root_0, (CommonTree)adaptor.create(set128)); + state.errorRecovery=false;state.failed=false; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + MismatchedSetException mse = new MismatchedSetException(null,input); + throw mse; + } + + + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "notTerminal" + + public static class ebnfSuffix_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "ebnfSuffix" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:333:1: ebnfSuffix : ( '?' -> OPTIONAL[op] | '*' -> CLOSURE[op] | '+' -> POSITIVE_CLOSURE[op] ); + public final ANTLRv3Parser.ebnfSuffix_return ebnfSuffix() throws RecognitionException { + ANTLRv3Parser.ebnfSuffix_return retval = new ANTLRv3Parser.ebnfSuffix_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token char_literal129=null; + Token char_literal130=null; + Token char_literal131=null; + + CommonTree char_literal129_tree=null; + CommonTree char_literal130_tree=null; + CommonTree char_literal131_tree=null; + RewriteRuleTokenStream stream_91=new RewriteRuleTokenStream(adaptor,"token 91"); + RewriteRuleTokenStream stream_74=new RewriteRuleTokenStream(adaptor,"token 74"); + RewriteRuleTokenStream stream_90=new RewriteRuleTokenStream(adaptor,"token 90"); + + + Token op = input.LT(1); + + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:337:2: ( '?' -> OPTIONAL[op] | '*' -> CLOSURE[op] | '+' -> POSITIVE_CLOSURE[op] ) + int alt61=3; + switch ( input.LA(1) ) { + case 90: + { + alt61=1; + } + break; + case 74: + { + alt61=2; + } + break; + case 91: + { + alt61=3; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 61, 0, input); + + throw nvae; + } + + switch (alt61) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:337:4: '?' + { + char_literal129=(Token)match(input,90,FOLLOW_90_in_ebnfSuffix2445); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_90.add(char_literal129); + + + + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 337:8: -> OPTIONAL[op] + { + adaptor.addChild(root_0, (CommonTree)adaptor.create(OPTIONAL, op)); + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:338:6: '*' + { + char_literal130=(Token)match(input,74,FOLLOW_74_in_ebnfSuffix2457); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_74.add(char_literal130); + + + + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 338:10: -> CLOSURE[op] + { + adaptor.addChild(root_0, (CommonTree)adaptor.create(CLOSURE, op)); + + } + + retval.tree = root_0;} + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:339:7: '+' + { + char_literal131=(Token)match(input,91,FOLLOW_91_in_ebnfSuffix2470); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_91.add(char_literal131); + + + + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 339:11: -> POSITIVE_CLOSURE[op] + { + adaptor.addChild(root_0, (CommonTree)adaptor.create(POSITIVE_CLOSURE, op)); + + } + + retval.tree = root_0;} + } + break; + + } + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "ebnfSuffix" + + public static class rewrite_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "rewrite" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:346:1: rewrite : ( (rew+= '->' preds+= SEMPRED predicated+= rewrite_alternative )* rew2= '->' last= rewrite_alternative -> ( ^( $rew $preds $predicated) )* ^( $rew2 $last) | ); + public final ANTLRv3Parser.rewrite_return rewrite() throws RecognitionException { + ANTLRv3Parser.rewrite_return retval = new ANTLRv3Parser.rewrite_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token rew2=null; + Token rew=null; + Token preds=null; + List list_rew=null; + List list_preds=null; + List list_predicated=null; + ANTLRv3Parser.rewrite_alternative_return last = null; + + RuleReturnScope predicated = null; + CommonTree rew2_tree=null; + CommonTree rew_tree=null; + CommonTree preds_tree=null; + RewriteRuleTokenStream stream_SEMPRED=new RewriteRuleTokenStream(adaptor,"token SEMPRED"); + RewriteRuleTokenStream stream_REWRITE=new RewriteRuleTokenStream(adaptor,"token REWRITE"); + RewriteRuleSubtreeStream stream_rewrite_alternative=new RewriteRuleSubtreeStream(adaptor,"rule rewrite_alternative"); + + Token firstToken = input.LT(1); + + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:350:2: ( (rew+= '->' preds+= SEMPRED predicated+= rewrite_alternative )* rew2= '->' last= rewrite_alternative -> ( ^( $rew $preds $predicated) )* ^( $rew2 $last) | ) + int alt63=2; + int LA63_0 = input.LA(1); + + if ( (LA63_0==REWRITE) ) { + alt63=1; + } + else if ( (LA63_0==69||(LA63_0>=83 && LA63_0<=84)) ) { + alt63=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 63, 0, input); + + throw nvae; + } + switch (alt63) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:350:4: (rew+= '->' preds+= SEMPRED predicated+= rewrite_alternative )* rew2= '->' last= rewrite_alternative + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:350:4: (rew+= '->' preds+= SEMPRED predicated+= rewrite_alternative )* + loop62: + do { + int alt62=2; + int LA62_0 = input.LA(1); + + if ( (LA62_0==REWRITE) ) { + int LA62_1 = input.LA(2); + + if ( (LA62_1==SEMPRED) ) { + alt62=1; + } + + + } + + + switch (alt62) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:350:5: rew+= '->' preds+= SEMPRED predicated+= rewrite_alternative + { + rew=(Token)match(input,REWRITE,FOLLOW_REWRITE_in_rewrite2499); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_REWRITE.add(rew); + + if (list_rew==null) list_rew=new ArrayList(); + list_rew.add(rew); + + preds=(Token)match(input,SEMPRED,FOLLOW_SEMPRED_in_rewrite2503); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_SEMPRED.add(preds); + + if (list_preds==null) list_preds=new ArrayList(); + list_preds.add(preds); + + pushFollow(FOLLOW_rewrite_alternative_in_rewrite2507); + predicated=rewrite_alternative(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_rewrite_alternative.add(predicated.getTree()); + if (list_predicated==null) list_predicated=new ArrayList(); + list_predicated.add(predicated.getTree()); + + + } + break; + + default : + break loop62; + } + } while (true); + + rew2=(Token)match(input,REWRITE,FOLLOW_REWRITE_in_rewrite2515); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_REWRITE.add(rew2); + + pushFollow(FOLLOW_rewrite_alternative_in_rewrite2519); + last=rewrite_alternative(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_rewrite_alternative.add(last.getTree()); + + + // AST REWRITE + // elements: rew, predicated, last, rew2, preds + // token labels: rew2 + // rule labels: last, retval + // token list labels: rew, preds + // rule list labels: predicated + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleTokenStream stream_rew2=new RewriteRuleTokenStream(adaptor,"token rew2",rew2); + RewriteRuleTokenStream stream_rew=new RewriteRuleTokenStream(adaptor,"token rew", list_rew); + RewriteRuleTokenStream stream_preds=new RewriteRuleTokenStream(adaptor,"token preds", list_preds); + RewriteRuleSubtreeStream stream_last=new RewriteRuleSubtreeStream(adaptor,"token last",last!=null?last.tree:null); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + RewriteRuleSubtreeStream stream_predicated=new RewriteRuleSubtreeStream(adaptor,"token predicated",list_predicated); + root_0 = (CommonTree)adaptor.nil(); + // 352:9: -> ( ^( $rew $preds $predicated) )* ^( $rew2 $last) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:352:12: ( ^( $rew $preds $predicated) )* + while ( stream_rew.hasNext()||stream_predicated.hasNext()||stream_preds.hasNext() ) { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:352:12: ^( $rew $preds $predicated) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_rew.nextNode(), root_1); + + adaptor.addChild(root_1, stream_preds.nextNode()); + adaptor.addChild(root_1, stream_predicated.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + stream_rew.reset(); + stream_predicated.reset(); + stream_preds.reset(); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:352:40: ^( $rew2 $last) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_rew2.nextNode(), root_1); + + adaptor.addChild(root_1, stream_last.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:354:2: + { + root_0 = (CommonTree)adaptor.nil(); + + } + break; + + } + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "rewrite" + + public static class rewrite_alternative_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "rewrite_alternative" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:356:1: rewrite_alternative options {backtrack=true; } : ( rewrite_template | rewrite_tree_alternative | -> ^( ALT[\"ALT\"] EPSILON[\"EPSILON\"] EOA[\"EOA\"] ) ); + public final ANTLRv3Parser.rewrite_alternative_return rewrite_alternative() throws RecognitionException { + ANTLRv3Parser.rewrite_alternative_return retval = new ANTLRv3Parser.rewrite_alternative_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + ANTLRv3Parser.rewrite_template_return rewrite_template132 = null; + + ANTLRv3Parser.rewrite_tree_alternative_return rewrite_tree_alternative133 = null; + + + + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:358:2: ( rewrite_template | rewrite_tree_alternative | -> ^( ALT[\"ALT\"] EPSILON[\"EPSILON\"] EOA[\"EOA\"] ) ) + int alt64=3; + alt64 = dfa64.predict(input); + switch (alt64) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:358:4: rewrite_template + { + root_0 = (CommonTree)adaptor.nil(); + + pushFollow(FOLLOW_rewrite_template_in_rewrite_alternative2570); + rewrite_template132=rewrite_template(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, rewrite_template132.getTree()); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:359:4: rewrite_tree_alternative + { + root_0 = (CommonTree)adaptor.nil(); + + pushFollow(FOLLOW_rewrite_tree_alternative_in_rewrite_alternative2575); + rewrite_tree_alternative133=rewrite_tree_alternative(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, rewrite_tree_alternative133.getTree()); + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:360:29: + { + + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 360:29: -> ^( ALT[\"ALT\"] EPSILON[\"EPSILON\"] EOA[\"EOA\"] ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:360:32: ^( ALT[\"ALT\"] EPSILON[\"EPSILON\"] EOA[\"EOA\"] ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ALT, "ALT"), root_1); + + adaptor.addChild(root_1, (CommonTree)adaptor.create(EPSILON, "EPSILON")); + adaptor.addChild(root_1, (CommonTree)adaptor.create(EOA, "EOA")); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + + } + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "rewrite_alternative" + + public static class rewrite_tree_block_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "rewrite_tree_block" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:363:1: rewrite_tree_block : lp= '(' rewrite_tree_alternative ')' -> ^( BLOCK[$lp,\"BLOCK\"] rewrite_tree_alternative EOB[$lp,\"EOB\"] ) ; + public final ANTLRv3Parser.rewrite_tree_block_return rewrite_tree_block() throws RecognitionException { + ANTLRv3Parser.rewrite_tree_block_return retval = new ANTLRv3Parser.rewrite_tree_block_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token lp=null; + Token char_literal135=null; + ANTLRv3Parser.rewrite_tree_alternative_return rewrite_tree_alternative134 = null; + + + CommonTree lp_tree=null; + CommonTree char_literal135_tree=null; + RewriteRuleTokenStream stream_84=new RewriteRuleTokenStream(adaptor,"token 84"); + RewriteRuleTokenStream stream_82=new RewriteRuleTokenStream(adaptor,"token 82"); + RewriteRuleSubtreeStream stream_rewrite_tree_alternative=new RewriteRuleSubtreeStream(adaptor,"rule rewrite_tree_alternative"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:364:5: (lp= '(' rewrite_tree_alternative ')' -> ^( BLOCK[$lp,\"BLOCK\"] rewrite_tree_alternative EOB[$lp,\"EOB\"] ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:364:9: lp= '(' rewrite_tree_alternative ')' + { + lp=(Token)match(input,82,FOLLOW_82_in_rewrite_tree_block2617); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_82.add(lp); + + pushFollow(FOLLOW_rewrite_tree_alternative_in_rewrite_tree_block2619); + rewrite_tree_alternative134=rewrite_tree_alternative(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_rewrite_tree_alternative.add(rewrite_tree_alternative134.getTree()); + char_literal135=(Token)match(input,84,FOLLOW_84_in_rewrite_tree_block2621); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_84.add(char_literal135); + + + + // AST REWRITE + // elements: rewrite_tree_alternative + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 365:6: -> ^( BLOCK[$lp,\"BLOCK\"] rewrite_tree_alternative EOB[$lp,\"EOB\"] ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:365:9: ^( BLOCK[$lp,\"BLOCK\"] rewrite_tree_alternative EOB[$lp,\"EOB\"] ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(BLOCK, lp, "BLOCK"), root_1); + + adaptor.addChild(root_1, stream_rewrite_tree_alternative.nextTree()); + adaptor.addChild(root_1, (CommonTree)adaptor.create(EOB, lp, "EOB")); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "rewrite_tree_block" + + public static class rewrite_tree_alternative_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "rewrite_tree_alternative" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:368:1: rewrite_tree_alternative : ( rewrite_tree_element )+ -> ^( ALT[\"ALT\"] ( rewrite_tree_element )+ EOA[\"EOA\"] ) ; + public final ANTLRv3Parser.rewrite_tree_alternative_return rewrite_tree_alternative() throws RecognitionException { + ANTLRv3Parser.rewrite_tree_alternative_return retval = new ANTLRv3Parser.rewrite_tree_alternative_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + ANTLRv3Parser.rewrite_tree_element_return rewrite_tree_element136 = null; + + + RewriteRuleSubtreeStream stream_rewrite_tree_element=new RewriteRuleSubtreeStream(adaptor,"rule rewrite_tree_element"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:369:5: ( ( rewrite_tree_element )+ -> ^( ALT[\"ALT\"] ( rewrite_tree_element )+ EOA[\"EOA\"] ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:369:7: ( rewrite_tree_element )+ + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:369:7: ( rewrite_tree_element )+ + int cnt65=0; + loop65: + do { + int alt65=2; + int LA65_0 = input.LA(1); + + if ( (LA65_0==TREE_BEGIN||(LA65_0>=TOKEN_REF && LA65_0<=ACTION)||LA65_0==RULE_REF||LA65_0==82||LA65_0==93) ) { + alt65=1; + } + + + switch (alt65) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:369:7: rewrite_tree_element + { + pushFollow(FOLLOW_rewrite_tree_element_in_rewrite_tree_alternative2655); + rewrite_tree_element136=rewrite_tree_element(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_rewrite_tree_element.add(rewrite_tree_element136.getTree()); + + } + break; + + default : + if ( cnt65 >= 1 ) break loop65; + if (state.backtracking>0) {state.failed=true; return retval;} + EarlyExitException eee = + new EarlyExitException(65, input); + throw eee; + } + cnt65++; + } while (true); + + + + // AST REWRITE + // elements: rewrite_tree_element + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 369:29: -> ^( ALT[\"ALT\"] ( rewrite_tree_element )+ EOA[\"EOA\"] ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:369:32: ^( ALT[\"ALT\"] ( rewrite_tree_element )+ EOA[\"EOA\"] ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ALT, "ALT"), root_1); + + if ( !(stream_rewrite_tree_element.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_rewrite_tree_element.hasNext() ) { + adaptor.addChild(root_1, stream_rewrite_tree_element.nextTree()); + + } + stream_rewrite_tree_element.reset(); + adaptor.addChild(root_1, (CommonTree)adaptor.create(EOA, "EOA")); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "rewrite_tree_alternative" + + public static class rewrite_tree_element_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "rewrite_tree_element" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:372:1: rewrite_tree_element : ( rewrite_tree_atom | rewrite_tree_atom ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] rewrite_tree_atom EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | rewrite_tree ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] rewrite_tree EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> rewrite_tree ) | rewrite_tree_ebnf ); + public final ANTLRv3Parser.rewrite_tree_element_return rewrite_tree_element() throws RecognitionException { + ANTLRv3Parser.rewrite_tree_element_return retval = new ANTLRv3Parser.rewrite_tree_element_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + ANTLRv3Parser.rewrite_tree_atom_return rewrite_tree_atom137 = null; + + ANTLRv3Parser.rewrite_tree_atom_return rewrite_tree_atom138 = null; + + ANTLRv3Parser.ebnfSuffix_return ebnfSuffix139 = null; + + ANTLRv3Parser.rewrite_tree_return rewrite_tree140 = null; + + ANTLRv3Parser.ebnfSuffix_return ebnfSuffix141 = null; + + ANTLRv3Parser.rewrite_tree_ebnf_return rewrite_tree_ebnf142 = null; + + + RewriteRuleSubtreeStream stream_rewrite_tree_atom=new RewriteRuleSubtreeStream(adaptor,"rule rewrite_tree_atom"); + RewriteRuleSubtreeStream stream_rewrite_tree=new RewriteRuleSubtreeStream(adaptor,"rule rewrite_tree"); + RewriteRuleSubtreeStream stream_ebnfSuffix=new RewriteRuleSubtreeStream(adaptor,"rule ebnfSuffix"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:373:2: ( rewrite_tree_atom | rewrite_tree_atom ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] rewrite_tree_atom EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | rewrite_tree ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] rewrite_tree EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> rewrite_tree ) | rewrite_tree_ebnf ) + int alt67=4; + alt67 = dfa67.predict(input); + switch (alt67) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:373:4: rewrite_tree_atom + { + root_0 = (CommonTree)adaptor.nil(); + + pushFollow(FOLLOW_rewrite_tree_atom_in_rewrite_tree_element2683); + rewrite_tree_atom137=rewrite_tree_atom(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, rewrite_tree_atom137.getTree()); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:374:4: rewrite_tree_atom ebnfSuffix + { + pushFollow(FOLLOW_rewrite_tree_atom_in_rewrite_tree_element2688); + rewrite_tree_atom138=rewrite_tree_atom(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_rewrite_tree_atom.add(rewrite_tree_atom138.getTree()); + pushFollow(FOLLOW_ebnfSuffix_in_rewrite_tree_element2690); + ebnfSuffix139=ebnfSuffix(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ebnfSuffix.add(ebnfSuffix139.getTree()); + + + // AST REWRITE + // elements: ebnfSuffix, rewrite_tree_atom + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 375:3: -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] rewrite_tree_atom EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:375:6: ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] rewrite_tree_atom EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_ebnfSuffix.nextNode(), root_1); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:375:20: ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] rewrite_tree_atom EOA[\"EOA\"] ) EOB[\"EOB\"] ) + { + CommonTree root_2 = (CommonTree)adaptor.nil(); + root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(BLOCK, "BLOCK"), root_2); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:375:37: ^( ALT[\"ALT\"] rewrite_tree_atom EOA[\"EOA\"] ) + { + CommonTree root_3 = (CommonTree)adaptor.nil(); + root_3 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ALT, "ALT"), root_3); + + adaptor.addChild(root_3, stream_rewrite_tree_atom.nextTree()); + adaptor.addChild(root_3, (CommonTree)adaptor.create(EOA, "EOA")); + + adaptor.addChild(root_2, root_3); + } + adaptor.addChild(root_2, (CommonTree)adaptor.create(EOB, "EOB")); + + adaptor.addChild(root_1, root_2); + } + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:376:6: rewrite_tree ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] rewrite_tree EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> rewrite_tree ) + { + pushFollow(FOLLOW_rewrite_tree_in_rewrite_tree_element2724); + rewrite_tree140=rewrite_tree(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_rewrite_tree.add(rewrite_tree140.getTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:377:3: ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] rewrite_tree EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> rewrite_tree ) + int alt66=2; + int LA66_0 = input.LA(1); + + if ( (LA66_0==74||(LA66_0>=90 && LA66_0<=91)) ) { + alt66=1; + } + else if ( (LA66_0==EOF||LA66_0==TREE_BEGIN||LA66_0==REWRITE||(LA66_0>=TOKEN_REF && LA66_0<=ACTION)||LA66_0==RULE_REF||LA66_0==69||(LA66_0>=82 && LA66_0<=84)||LA66_0==93) ) { + alt66=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 66, 0, input); + + throw nvae; + } + switch (alt66) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:377:5: ebnfSuffix + { + pushFollow(FOLLOW_ebnfSuffix_in_rewrite_tree_element2730); + ebnfSuffix141=ebnfSuffix(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ebnfSuffix.add(ebnfSuffix141.getTree()); + + + // AST REWRITE + // elements: rewrite_tree, ebnfSuffix + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 378:4: -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] rewrite_tree EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:378:7: ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] rewrite_tree EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_ebnfSuffix.nextNode(), root_1); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:378:20: ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] rewrite_tree EOA[\"EOA\"] ) EOB[\"EOB\"] ) + { + CommonTree root_2 = (CommonTree)adaptor.nil(); + root_2 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(BLOCK, "BLOCK"), root_2); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:378:37: ^( ALT[\"ALT\"] rewrite_tree EOA[\"EOA\"] ) + { + CommonTree root_3 = (CommonTree)adaptor.nil(); + root_3 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ALT, "ALT"), root_3); + + adaptor.addChild(root_3, stream_rewrite_tree.nextTree()); + adaptor.addChild(root_3, (CommonTree)adaptor.create(EOA, "EOA")); + + adaptor.addChild(root_2, root_3); + } + adaptor.addChild(root_2, (CommonTree)adaptor.create(EOB, "EOB")); + + adaptor.addChild(root_1, root_2); + } + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:379:5: + { + + // AST REWRITE + // elements: rewrite_tree + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 379:5: -> rewrite_tree + { + adaptor.addChild(root_0, stream_rewrite_tree.nextTree()); + + } + + retval.tree = root_0;} + } + break; + + } + + + } + break; + case 4 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:381:6: rewrite_tree_ebnf + { + root_0 = (CommonTree)adaptor.nil(); + + pushFollow(FOLLOW_rewrite_tree_ebnf_in_rewrite_tree_element2776); + rewrite_tree_ebnf142=rewrite_tree_ebnf(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, rewrite_tree_ebnf142.getTree()); + + } + break; + + } + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "rewrite_tree_element" + + public static class rewrite_tree_atom_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "rewrite_tree_atom" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:384:1: rewrite_tree_atom : ( CHAR_LITERAL | TOKEN_REF ( ARG_ACTION )? -> ^( TOKEN_REF ( ARG_ACTION )? ) | RULE_REF | STRING_LITERAL | d= '$' id -> LABEL[$d,$id.text] | ACTION ); + public final ANTLRv3Parser.rewrite_tree_atom_return rewrite_tree_atom() throws RecognitionException { + ANTLRv3Parser.rewrite_tree_atom_return retval = new ANTLRv3Parser.rewrite_tree_atom_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token d=null; + Token CHAR_LITERAL143=null; + Token TOKEN_REF144=null; + Token ARG_ACTION145=null; + Token RULE_REF146=null; + Token STRING_LITERAL147=null; + Token ACTION149=null; + ANTLRv3Parser.id_return id148 = null; + + + CommonTree d_tree=null; + CommonTree CHAR_LITERAL143_tree=null; + CommonTree TOKEN_REF144_tree=null; + CommonTree ARG_ACTION145_tree=null; + CommonTree RULE_REF146_tree=null; + CommonTree STRING_LITERAL147_tree=null; + CommonTree ACTION149_tree=null; + RewriteRuleTokenStream stream_ARG_ACTION=new RewriteRuleTokenStream(adaptor,"token ARG_ACTION"); + RewriteRuleTokenStream stream_TOKEN_REF=new RewriteRuleTokenStream(adaptor,"token TOKEN_REF"); + RewriteRuleTokenStream stream_93=new RewriteRuleTokenStream(adaptor,"token 93"); + RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:385:5: ( CHAR_LITERAL | TOKEN_REF ( ARG_ACTION )? -> ^( TOKEN_REF ( ARG_ACTION )? ) | RULE_REF | STRING_LITERAL | d= '$' id -> LABEL[$d,$id.text] | ACTION ) + int alt69=6; + switch ( input.LA(1) ) { + case CHAR_LITERAL: + { + alt69=1; + } + break; + case TOKEN_REF: + { + alt69=2; + } + break; + case RULE_REF: + { + alt69=3; + } + break; + case STRING_LITERAL: + { + alt69=4; + } + break; + case 93: + { + alt69=5; + } + break; + case ACTION: + { + alt69=6; + } + break; + default: + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 69, 0, input); + + throw nvae; + } + + switch (alt69) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:385:9: CHAR_LITERAL + { + root_0 = (CommonTree)adaptor.nil(); + + CHAR_LITERAL143=(Token)match(input,CHAR_LITERAL,FOLLOW_CHAR_LITERAL_in_rewrite_tree_atom2792); if (state.failed) return retval; + if ( state.backtracking==0 ) { + CHAR_LITERAL143_tree = (CommonTree)adaptor.create(CHAR_LITERAL143); + adaptor.addChild(root_0, CHAR_LITERAL143_tree); + } + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:386:6: TOKEN_REF ( ARG_ACTION )? + { + TOKEN_REF144=(Token)match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_rewrite_tree_atom2799); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_TOKEN_REF.add(TOKEN_REF144); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:386:16: ( ARG_ACTION )? + int alt68=2; + int LA68_0 = input.LA(1); + + if ( (LA68_0==ARG_ACTION) ) { + alt68=1; + } + switch (alt68) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:386:16: ARG_ACTION + { + ARG_ACTION145=(Token)match(input,ARG_ACTION,FOLLOW_ARG_ACTION_in_rewrite_tree_atom2801); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ARG_ACTION.add(ARG_ACTION145); + + + } + break; + + } + + + + // AST REWRITE + // elements: TOKEN_REF, ARG_ACTION + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 386:28: -> ^( TOKEN_REF ( ARG_ACTION )? ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:386:31: ^( TOKEN_REF ( ARG_ACTION )? ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_TOKEN_REF.nextNode(), root_1); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:386:43: ( ARG_ACTION )? + if ( stream_ARG_ACTION.hasNext() ) { + adaptor.addChild(root_1, stream_ARG_ACTION.nextNode()); + + } + stream_ARG_ACTION.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:387:9: RULE_REF + { + root_0 = (CommonTree)adaptor.nil(); + + RULE_REF146=(Token)match(input,RULE_REF,FOLLOW_RULE_REF_in_rewrite_tree_atom2822); if (state.failed) return retval; + if ( state.backtracking==0 ) { + RULE_REF146_tree = (CommonTree)adaptor.create(RULE_REF146); + adaptor.addChild(root_0, RULE_REF146_tree); + } + + } + break; + case 4 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:388:6: STRING_LITERAL + { + root_0 = (CommonTree)adaptor.nil(); + + STRING_LITERAL147=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_rewrite_tree_atom2829); if (state.failed) return retval; + if ( state.backtracking==0 ) { + STRING_LITERAL147_tree = (CommonTree)adaptor.create(STRING_LITERAL147); + adaptor.addChild(root_0, STRING_LITERAL147_tree); + } + + } + break; + case 5 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:389:6: d= '$' id + { + d=(Token)match(input,93,FOLLOW_93_in_rewrite_tree_atom2838); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_93.add(d); + + pushFollow(FOLLOW_id_in_rewrite_tree_atom2840); + id148=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_id.add(id148.getTree()); + + + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 389:15: -> LABEL[$d,$id.text] + { + adaptor.addChild(root_0, (CommonTree)adaptor.create(LABEL, d, (id148!=null?input.toString(id148.start,id148.stop):null))); + + } + + retval.tree = root_0;} + } + break; + case 6 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:390:4: ACTION + { + root_0 = (CommonTree)adaptor.nil(); + + ACTION149=(Token)match(input,ACTION,FOLLOW_ACTION_in_rewrite_tree_atom2851); if (state.failed) return retval; + if ( state.backtracking==0 ) { + ACTION149_tree = (CommonTree)adaptor.create(ACTION149); + adaptor.addChild(root_0, ACTION149_tree); + } + + } + break; + + } + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "rewrite_tree_atom" + + public static class rewrite_tree_ebnf_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "rewrite_tree_ebnf" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:393:1: rewrite_tree_ebnf : rewrite_tree_block ebnfSuffix -> ^( ebnfSuffix rewrite_tree_block ) ; + public final ANTLRv3Parser.rewrite_tree_ebnf_return rewrite_tree_ebnf() throws RecognitionException { + ANTLRv3Parser.rewrite_tree_ebnf_return retval = new ANTLRv3Parser.rewrite_tree_ebnf_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + ANTLRv3Parser.rewrite_tree_block_return rewrite_tree_block150 = null; + + ANTLRv3Parser.ebnfSuffix_return ebnfSuffix151 = null; + + + RewriteRuleSubtreeStream stream_rewrite_tree_block=new RewriteRuleSubtreeStream(adaptor,"rule rewrite_tree_block"); + RewriteRuleSubtreeStream stream_ebnfSuffix=new RewriteRuleSubtreeStream(adaptor,"rule ebnfSuffix"); + + Token firstToken = input.LT(1); + + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:401:2: ( rewrite_tree_block ebnfSuffix -> ^( ebnfSuffix rewrite_tree_block ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:401:4: rewrite_tree_block ebnfSuffix + { + pushFollow(FOLLOW_rewrite_tree_block_in_rewrite_tree_ebnf2872); + rewrite_tree_block150=rewrite_tree_block(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_rewrite_tree_block.add(rewrite_tree_block150.getTree()); + pushFollow(FOLLOW_ebnfSuffix_in_rewrite_tree_ebnf2874); + ebnfSuffix151=ebnfSuffix(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ebnfSuffix.add(ebnfSuffix151.getTree()); + + + // AST REWRITE + // elements: rewrite_tree_block, ebnfSuffix + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 401:34: -> ^( ebnfSuffix rewrite_tree_block ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:401:37: ^( ebnfSuffix rewrite_tree_block ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot(stream_ebnfSuffix.nextNode(), root_1); + + adaptor.addChild(root_1, stream_rewrite_tree_block.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + if ( state.backtracking==0 ) { + + ((CommonTree)retval.tree).getToken().setLine(firstToken.getLine()); + ((CommonTree)retval.tree).getToken().setCharPositionInLine(firstToken.getCharPositionInLine()); + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "rewrite_tree_ebnf" + + public static class rewrite_tree_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "rewrite_tree" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:404:1: rewrite_tree : '^(' rewrite_tree_atom ( rewrite_tree_element )* ')' -> ^( TREE_BEGIN rewrite_tree_atom ( rewrite_tree_element )* ) ; + public final ANTLRv3Parser.rewrite_tree_return rewrite_tree() throws RecognitionException { + ANTLRv3Parser.rewrite_tree_return retval = new ANTLRv3Parser.rewrite_tree_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token string_literal152=null; + Token char_literal155=null; + ANTLRv3Parser.rewrite_tree_atom_return rewrite_tree_atom153 = null; + + ANTLRv3Parser.rewrite_tree_element_return rewrite_tree_element154 = null; + + + CommonTree string_literal152_tree=null; + CommonTree char_literal155_tree=null; + RewriteRuleTokenStream stream_84=new RewriteRuleTokenStream(adaptor,"token 84"); + RewriteRuleTokenStream stream_TREE_BEGIN=new RewriteRuleTokenStream(adaptor,"token TREE_BEGIN"); + RewriteRuleSubtreeStream stream_rewrite_tree_element=new RewriteRuleSubtreeStream(adaptor,"rule rewrite_tree_element"); + RewriteRuleSubtreeStream stream_rewrite_tree_atom=new RewriteRuleSubtreeStream(adaptor,"rule rewrite_tree_atom"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:405:2: ( '^(' rewrite_tree_atom ( rewrite_tree_element )* ')' -> ^( TREE_BEGIN rewrite_tree_atom ( rewrite_tree_element )* ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:405:4: '^(' rewrite_tree_atom ( rewrite_tree_element )* ')' + { + string_literal152=(Token)match(input,TREE_BEGIN,FOLLOW_TREE_BEGIN_in_rewrite_tree2894); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_TREE_BEGIN.add(string_literal152); + + pushFollow(FOLLOW_rewrite_tree_atom_in_rewrite_tree2896); + rewrite_tree_atom153=rewrite_tree_atom(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_rewrite_tree_atom.add(rewrite_tree_atom153.getTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:405:27: ( rewrite_tree_element )* + loop70: + do { + int alt70=2; + int LA70_0 = input.LA(1); + + if ( (LA70_0==TREE_BEGIN||(LA70_0>=TOKEN_REF && LA70_0<=ACTION)||LA70_0==RULE_REF||LA70_0==82||LA70_0==93) ) { + alt70=1; + } + + + switch (alt70) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:405:27: rewrite_tree_element + { + pushFollow(FOLLOW_rewrite_tree_element_in_rewrite_tree2898); + rewrite_tree_element154=rewrite_tree_element(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_rewrite_tree_element.add(rewrite_tree_element154.getTree()); + + } + break; + + default : + break loop70; + } + } while (true); + + char_literal155=(Token)match(input,84,FOLLOW_84_in_rewrite_tree2901); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_84.add(char_literal155); + + + + // AST REWRITE + // elements: rewrite_tree_element, rewrite_tree_atom + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 406:3: -> ^( TREE_BEGIN rewrite_tree_atom ( rewrite_tree_element )* ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:406:6: ^( TREE_BEGIN rewrite_tree_atom ( rewrite_tree_element )* ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(TREE_BEGIN, "TREE_BEGIN"), root_1); + + adaptor.addChild(root_1, stream_rewrite_tree_atom.nextTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:406:37: ( rewrite_tree_element )* + while ( stream_rewrite_tree_element.hasNext() ) { + adaptor.addChild(root_1, stream_rewrite_tree_element.nextTree()); + + } + stream_rewrite_tree_element.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "rewrite_tree" + + public static class rewrite_template_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "rewrite_template" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:409:1: rewrite_template : ( id lp= '(' rewrite_template_args ')' (str= DOUBLE_QUOTE_STRING_LITERAL | str= DOUBLE_ANGLE_STRING_LITERAL ) -> ^( TEMPLATE[$lp,\"TEMPLATE\"] id rewrite_template_args $str) | rewrite_template_ref | rewrite_indirect_template_head | ACTION ); + public final ANTLRv3Parser.rewrite_template_return rewrite_template() throws RecognitionException { + ANTLRv3Parser.rewrite_template_return retval = new ANTLRv3Parser.rewrite_template_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token lp=null; + Token str=null; + Token char_literal158=null; + Token ACTION161=null; + ANTLRv3Parser.id_return id156 = null; + + ANTLRv3Parser.rewrite_template_args_return rewrite_template_args157 = null; + + ANTLRv3Parser.rewrite_template_ref_return rewrite_template_ref159 = null; + + ANTLRv3Parser.rewrite_indirect_template_head_return rewrite_indirect_template_head160 = null; + + + CommonTree lp_tree=null; + CommonTree str_tree=null; + CommonTree char_literal158_tree=null; + CommonTree ACTION161_tree=null; + RewriteRuleTokenStream stream_DOUBLE_ANGLE_STRING_LITERAL=new RewriteRuleTokenStream(adaptor,"token DOUBLE_ANGLE_STRING_LITERAL"); + RewriteRuleTokenStream stream_DOUBLE_QUOTE_STRING_LITERAL=new RewriteRuleTokenStream(adaptor,"token DOUBLE_QUOTE_STRING_LITERAL"); + RewriteRuleTokenStream stream_84=new RewriteRuleTokenStream(adaptor,"token 84"); + RewriteRuleTokenStream stream_82=new RewriteRuleTokenStream(adaptor,"token 82"); + RewriteRuleSubtreeStream stream_rewrite_template_args=new RewriteRuleSubtreeStream(adaptor,"rule rewrite_template_args"); + RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:421:2: ( id lp= '(' rewrite_template_args ')' (str= DOUBLE_QUOTE_STRING_LITERAL | str= DOUBLE_ANGLE_STRING_LITERAL ) -> ^( TEMPLATE[$lp,\"TEMPLATE\"] id rewrite_template_args $str) | rewrite_template_ref | rewrite_indirect_template_head | ACTION ) + int alt72=4; + alt72 = dfa72.predict(input); + switch (alt72) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:422:3: id lp= '(' rewrite_template_args ')' (str= DOUBLE_QUOTE_STRING_LITERAL | str= DOUBLE_ANGLE_STRING_LITERAL ) + { + pushFollow(FOLLOW_id_in_rewrite_template2933); + id156=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_id.add(id156.getTree()); + lp=(Token)match(input,82,FOLLOW_82_in_rewrite_template2937); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_82.add(lp); + + pushFollow(FOLLOW_rewrite_template_args_in_rewrite_template2939); + rewrite_template_args157=rewrite_template_args(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_rewrite_template_args.add(rewrite_template_args157.getTree()); + char_literal158=(Token)match(input,84,FOLLOW_84_in_rewrite_template2941); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_84.add(char_literal158); + + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:423:3: (str= DOUBLE_QUOTE_STRING_LITERAL | str= DOUBLE_ANGLE_STRING_LITERAL ) + int alt71=2; + int LA71_0 = input.LA(1); + + if ( (LA71_0==DOUBLE_QUOTE_STRING_LITERAL) ) { + alt71=1; + } + else if ( (LA71_0==DOUBLE_ANGLE_STRING_LITERAL) ) { + alt71=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 71, 0, input); + + throw nvae; + } + switch (alt71) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:423:5: str= DOUBLE_QUOTE_STRING_LITERAL + { + str=(Token)match(input,DOUBLE_QUOTE_STRING_LITERAL,FOLLOW_DOUBLE_QUOTE_STRING_LITERAL_in_rewrite_template2949); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_DOUBLE_QUOTE_STRING_LITERAL.add(str); + + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:423:39: str= DOUBLE_ANGLE_STRING_LITERAL + { + str=(Token)match(input,DOUBLE_ANGLE_STRING_LITERAL,FOLLOW_DOUBLE_ANGLE_STRING_LITERAL_in_rewrite_template2955); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_DOUBLE_ANGLE_STRING_LITERAL.add(str); + + + } + break; + + } + + + + // AST REWRITE + // elements: id, rewrite_template_args, str + // token labels: str + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleTokenStream stream_str=new RewriteRuleTokenStream(adaptor,"token str",str); + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 424:3: -> ^( TEMPLATE[$lp,\"TEMPLATE\"] id rewrite_template_args $str) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:424:6: ^( TEMPLATE[$lp,\"TEMPLATE\"] id rewrite_template_args $str) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(TEMPLATE, lp, "TEMPLATE"), root_1); + + adaptor.addChild(root_1, stream_id.nextTree()); + adaptor.addChild(root_1, stream_rewrite_template_args.nextTree()); + adaptor.addChild(root_1, stream_str.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:427:3: rewrite_template_ref + { + root_0 = (CommonTree)adaptor.nil(); + + pushFollow(FOLLOW_rewrite_template_ref_in_rewrite_template2982); + rewrite_template_ref159=rewrite_template_ref(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, rewrite_template_ref159.getTree()); + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:430:3: rewrite_indirect_template_head + { + root_0 = (CommonTree)adaptor.nil(); + + pushFollow(FOLLOW_rewrite_indirect_template_head_in_rewrite_template2991); + rewrite_indirect_template_head160=rewrite_indirect_template_head(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, rewrite_indirect_template_head160.getTree()); + + } + break; + case 4 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:433:3: ACTION + { + root_0 = (CommonTree)adaptor.nil(); + + ACTION161=(Token)match(input,ACTION,FOLLOW_ACTION_in_rewrite_template3000); if (state.failed) return retval; + if ( state.backtracking==0 ) { + ACTION161_tree = (CommonTree)adaptor.create(ACTION161); + adaptor.addChild(root_0, ACTION161_tree); + } + + } + break; + + } + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "rewrite_template" + + public static class rewrite_template_ref_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "rewrite_template_ref" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:436:1: rewrite_template_ref : id lp= '(' rewrite_template_args ')' -> ^( TEMPLATE[$lp,\"TEMPLATE\"] id rewrite_template_args ) ; + public final ANTLRv3Parser.rewrite_template_ref_return rewrite_template_ref() throws RecognitionException { + ANTLRv3Parser.rewrite_template_ref_return retval = new ANTLRv3Parser.rewrite_template_ref_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token lp=null; + Token char_literal164=null; + ANTLRv3Parser.id_return id162 = null; + + ANTLRv3Parser.rewrite_template_args_return rewrite_template_args163 = null; + + + CommonTree lp_tree=null; + CommonTree char_literal164_tree=null; + RewriteRuleTokenStream stream_84=new RewriteRuleTokenStream(adaptor,"token 84"); + RewriteRuleTokenStream stream_82=new RewriteRuleTokenStream(adaptor,"token 82"); + RewriteRuleSubtreeStream stream_rewrite_template_args=new RewriteRuleSubtreeStream(adaptor,"rule rewrite_template_args"); + RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:438:2: ( id lp= '(' rewrite_template_args ')' -> ^( TEMPLATE[$lp,\"TEMPLATE\"] id rewrite_template_args ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:438:4: id lp= '(' rewrite_template_args ')' + { + pushFollow(FOLLOW_id_in_rewrite_template_ref3013); + id162=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_id.add(id162.getTree()); + lp=(Token)match(input,82,FOLLOW_82_in_rewrite_template_ref3017); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_82.add(lp); + + pushFollow(FOLLOW_rewrite_template_args_in_rewrite_template_ref3019); + rewrite_template_args163=rewrite_template_args(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_rewrite_template_args.add(rewrite_template_args163.getTree()); + char_literal164=(Token)match(input,84,FOLLOW_84_in_rewrite_template_ref3021); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_84.add(char_literal164); + + + + // AST REWRITE + // elements: id, rewrite_template_args + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 439:3: -> ^( TEMPLATE[$lp,\"TEMPLATE\"] id rewrite_template_args ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:439:6: ^( TEMPLATE[$lp,\"TEMPLATE\"] id rewrite_template_args ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(TEMPLATE, lp, "TEMPLATE"), root_1); + + adaptor.addChild(root_1, stream_id.nextTree()); + adaptor.addChild(root_1, stream_rewrite_template_args.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "rewrite_template_ref" + + public static class rewrite_indirect_template_head_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "rewrite_indirect_template_head" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:442:1: rewrite_indirect_template_head : lp= '(' ACTION ')' '(' rewrite_template_args ')' -> ^( TEMPLATE[$lp,\"TEMPLATE\"] ACTION rewrite_template_args ) ; + public final ANTLRv3Parser.rewrite_indirect_template_head_return rewrite_indirect_template_head() throws RecognitionException { + ANTLRv3Parser.rewrite_indirect_template_head_return retval = new ANTLRv3Parser.rewrite_indirect_template_head_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token lp=null; + Token ACTION165=null; + Token char_literal166=null; + Token char_literal167=null; + Token char_literal169=null; + ANTLRv3Parser.rewrite_template_args_return rewrite_template_args168 = null; + + + CommonTree lp_tree=null; + CommonTree ACTION165_tree=null; + CommonTree char_literal166_tree=null; + CommonTree char_literal167_tree=null; + CommonTree char_literal169_tree=null; + RewriteRuleTokenStream stream_ACTION=new RewriteRuleTokenStream(adaptor,"token ACTION"); + RewriteRuleTokenStream stream_84=new RewriteRuleTokenStream(adaptor,"token 84"); + RewriteRuleTokenStream stream_82=new RewriteRuleTokenStream(adaptor,"token 82"); + RewriteRuleSubtreeStream stream_rewrite_template_args=new RewriteRuleSubtreeStream(adaptor,"rule rewrite_template_args"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:444:2: (lp= '(' ACTION ')' '(' rewrite_template_args ')' -> ^( TEMPLATE[$lp,\"TEMPLATE\"] ACTION rewrite_template_args ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:444:4: lp= '(' ACTION ')' '(' rewrite_template_args ')' + { + lp=(Token)match(input,82,FOLLOW_82_in_rewrite_indirect_template_head3049); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_82.add(lp); + + ACTION165=(Token)match(input,ACTION,FOLLOW_ACTION_in_rewrite_indirect_template_head3051); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ACTION.add(ACTION165); + + char_literal166=(Token)match(input,84,FOLLOW_84_in_rewrite_indirect_template_head3053); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_84.add(char_literal166); + + char_literal167=(Token)match(input,82,FOLLOW_82_in_rewrite_indirect_template_head3055); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_82.add(char_literal167); + + pushFollow(FOLLOW_rewrite_template_args_in_rewrite_indirect_template_head3057); + rewrite_template_args168=rewrite_template_args(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_rewrite_template_args.add(rewrite_template_args168.getTree()); + char_literal169=(Token)match(input,84,FOLLOW_84_in_rewrite_indirect_template_head3059); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_84.add(char_literal169); + + + + // AST REWRITE + // elements: ACTION, rewrite_template_args + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 445:3: -> ^( TEMPLATE[$lp,\"TEMPLATE\"] ACTION rewrite_template_args ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:445:6: ^( TEMPLATE[$lp,\"TEMPLATE\"] ACTION rewrite_template_args ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(TEMPLATE, lp, "TEMPLATE"), root_1); + + adaptor.addChild(root_1, stream_ACTION.nextNode()); + adaptor.addChild(root_1, stream_rewrite_template_args.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "rewrite_indirect_template_head" + + public static class rewrite_template_args_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "rewrite_template_args" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:448:1: rewrite_template_args : ( rewrite_template_arg ( ',' rewrite_template_arg )* -> ^( ARGLIST ( rewrite_template_arg )+ ) | -> ARGLIST ); + public final ANTLRv3Parser.rewrite_template_args_return rewrite_template_args() throws RecognitionException { + ANTLRv3Parser.rewrite_template_args_return retval = new ANTLRv3Parser.rewrite_template_args_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token char_literal171=null; + ANTLRv3Parser.rewrite_template_arg_return rewrite_template_arg170 = null; + + ANTLRv3Parser.rewrite_template_arg_return rewrite_template_arg172 = null; + + + CommonTree char_literal171_tree=null; + RewriteRuleTokenStream stream_81=new RewriteRuleTokenStream(adaptor,"token 81"); + RewriteRuleSubtreeStream stream_rewrite_template_arg=new RewriteRuleSubtreeStream(adaptor,"rule rewrite_template_arg"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:449:2: ( rewrite_template_arg ( ',' rewrite_template_arg )* -> ^( ARGLIST ( rewrite_template_arg )+ ) | -> ARGLIST ) + int alt74=2; + int LA74_0 = input.LA(1); + + if ( (LA74_0==TOKEN_REF||LA74_0==RULE_REF) ) { + alt74=1; + } + else if ( (LA74_0==84) ) { + alt74=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 74, 0, input); + + throw nvae; + } + switch (alt74) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:449:4: rewrite_template_arg ( ',' rewrite_template_arg )* + { + pushFollow(FOLLOW_rewrite_template_arg_in_rewrite_template_args3083); + rewrite_template_arg170=rewrite_template_arg(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_rewrite_template_arg.add(rewrite_template_arg170.getTree()); + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:449:25: ( ',' rewrite_template_arg )* + loop73: + do { + int alt73=2; + int LA73_0 = input.LA(1); + + if ( (LA73_0==81) ) { + alt73=1; + } + + + switch (alt73) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:449:26: ',' rewrite_template_arg + { + char_literal171=(Token)match(input,81,FOLLOW_81_in_rewrite_template_args3086); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_81.add(char_literal171); + + pushFollow(FOLLOW_rewrite_template_arg_in_rewrite_template_args3088); + rewrite_template_arg172=rewrite_template_arg(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_rewrite_template_arg.add(rewrite_template_arg172.getTree()); + + } + break; + + default : + break loop73; + } + } while (true); + + + + // AST REWRITE + // elements: rewrite_template_arg + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 450:3: -> ^( ARGLIST ( rewrite_template_arg )+ ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:450:6: ^( ARGLIST ( rewrite_template_arg )+ ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ARGLIST, "ARGLIST"), root_1); + + if ( !(stream_rewrite_template_arg.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_rewrite_template_arg.hasNext() ) { + adaptor.addChild(root_1, stream_rewrite_template_arg.nextTree()); + + } + stream_rewrite_template_arg.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:451:4: + { + + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 451:4: -> ARGLIST + { + adaptor.addChild(root_0, (CommonTree)adaptor.create(ARGLIST, "ARGLIST")); + + } + + retval.tree = root_0;} + } + break; + + } + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "rewrite_template_args" + + public static class rewrite_template_arg_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "rewrite_template_arg" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:454:1: rewrite_template_arg : id '=' ACTION -> ^( ARG[$id.start] id ACTION ) ; + public final ANTLRv3Parser.rewrite_template_arg_return rewrite_template_arg() throws RecognitionException { + ANTLRv3Parser.rewrite_template_arg_return retval = new ANTLRv3Parser.rewrite_template_arg_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token char_literal174=null; + Token ACTION175=null; + ANTLRv3Parser.id_return id173 = null; + + + CommonTree char_literal174_tree=null; + CommonTree ACTION175_tree=null; + RewriteRuleTokenStream stream_71=new RewriteRuleTokenStream(adaptor,"token 71"); + RewriteRuleTokenStream stream_ACTION=new RewriteRuleTokenStream(adaptor,"token ACTION"); + RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id"); + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:455:2: ( id '=' ACTION -> ^( ARG[$id.start] id ACTION ) ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:455:6: id '=' ACTION + { + pushFollow(FOLLOW_id_in_rewrite_template_arg3121); + id173=id(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_id.add(id173.getTree()); + char_literal174=(Token)match(input,71,FOLLOW_71_in_rewrite_template_arg3123); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_71.add(char_literal174); + + ACTION175=(Token)match(input,ACTION,FOLLOW_ACTION_in_rewrite_template_arg3125); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ACTION.add(ACTION175); + + + + // AST REWRITE + // elements: ACTION, id + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 455:20: -> ^( ARG[$id.start] id ACTION ) + { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:455:23: ^( ARG[$id.start] id ACTION ) + { + CommonTree root_1 = (CommonTree)adaptor.nil(); + root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ARG, (id173!=null?((Token)id173.start):null)), root_1); + + adaptor.addChild(root_1, stream_id.nextTree()); + adaptor.addChild(root_1, stream_ACTION.nextNode()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "rewrite_template_arg" + + public static class id_return extends ParserRuleReturnScope { + CommonTree tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "id" + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:458:1: id : ( TOKEN_REF -> ID[$TOKEN_REF] | RULE_REF -> ID[$RULE_REF] ); + public final ANTLRv3Parser.id_return id() throws RecognitionException { + ANTLRv3Parser.id_return retval = new ANTLRv3Parser.id_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + Token TOKEN_REF176=null; + Token RULE_REF177=null; + + CommonTree TOKEN_REF176_tree=null; + CommonTree RULE_REF177_tree=null; + RewriteRuleTokenStream stream_TOKEN_REF=new RewriteRuleTokenStream(adaptor,"token TOKEN_REF"); + RewriteRuleTokenStream stream_RULE_REF=new RewriteRuleTokenStream(adaptor,"token RULE_REF"); + + try { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:458:4: ( TOKEN_REF -> ID[$TOKEN_REF] | RULE_REF -> ID[$RULE_REF] ) + int alt75=2; + int LA75_0 = input.LA(1); + + if ( (LA75_0==TOKEN_REF) ) { + alt75=1; + } + else if ( (LA75_0==RULE_REF) ) { + alt75=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 75, 0, input); + + throw nvae; + } + switch (alt75) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:458:6: TOKEN_REF + { + TOKEN_REF176=(Token)match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_id3146); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_TOKEN_REF.add(TOKEN_REF176); + + + + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 458:16: -> ID[$TOKEN_REF] + { + adaptor.addChild(root_0, (CommonTree)adaptor.create(ID, TOKEN_REF176)); + + } + + retval.tree = root_0;} + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:459:4: RULE_REF + { + RULE_REF177=(Token)match(input,RULE_REF,FOLLOW_RULE_REF_in_id3156); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_RULE_REF.add(RULE_REF177); + + + + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.nil(); + // 459:14: -> ID[$RULE_REF] + { + adaptor.addChild(root_0, (CommonTree)adaptor.create(ID, RULE_REF177)); + + } + + retval.tree = root_0;} + } + break; + + } + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re); + + } + finally { + } + return retval; + } + // $ANTLR end "id" + + // $ANTLR start synpred1_ANTLRv3 + public final void synpred1_ANTLRv3_fragment() throws RecognitionException { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:358:4: ( rewrite_template ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:358:4: rewrite_template + { + pushFollow(FOLLOW_rewrite_template_in_synpred1_ANTLRv32570); + rewrite_template(); + + state._fsp--; + if (state.failed) return ; + + } + } + // $ANTLR end synpred1_ANTLRv3 + + // $ANTLR start synpred2_ANTLRv3 + public final void synpred2_ANTLRv3_fragment() throws RecognitionException { + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:359:4: ( rewrite_tree_alternative ) + // /Users/scai/NetBeansProjects/gUnitBuilder/src/gunitbuilder/ANTLRv3.g:359:4: rewrite_tree_alternative + { + pushFollow(FOLLOW_rewrite_tree_alternative_in_synpred2_ANTLRv32575); + rewrite_tree_alternative(); + + state._fsp--; + if (state.failed) return ; + + } + } + // $ANTLR end synpred2_ANTLRv3 + + // Delegated rules + + public final boolean synpred2_ANTLRv3() { + state.backtracking++; + int start = input.mark(); + try { + synpred2_ANTLRv3_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + public final boolean synpred1_ANTLRv3() { + state.backtracking++; + int start = input.mark(); + try { + synpred1_ANTLRv3_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } + + + protected DFA46 dfa46 = new DFA46(this); + protected DFA64 dfa64 = new DFA64(this); + protected DFA67 dfa67 = new DFA67(this); + protected DFA72 dfa72 = new DFA72(this); + static final String DFA46_eotS = + "\14\uffff"; + static final String DFA46_eofS = + "\14\uffff"; + static final String DFA46_minS = + "\3\40\5\uffff\2\52\2\uffff"; + static final String DFA46_maxS = + "\3\134\5\uffff\2\134\2\uffff"; + static final String DFA46_acceptS = + "\3\uffff\1\3\1\4\1\5\1\6\1\7\2\uffff\1\1\1\2"; + static final String DFA46_specialS = + "\14\uffff}>"; + static final String[] DFA46_transitionS = { + "\1\6\4\uffff\1\7\4\uffff\1\1\2\3\1\5\3\uffff\1\2\40\uffff\1"+ + "\4\6\uffff\1\3\2\uffff\1\3", + "\1\3\4\uffff\4\3\1\uffff\4\3\2\uffff\2\3\23\uffff\1\3\1\uffff"+ + "\1\10\2\uffff\1\3\7\uffff\3\3\2\uffff\1\11\1\uffff\4\3", + "\1\3\4\uffff\4\3\1\uffff\4\3\2\uffff\2\3\23\uffff\1\3\1\uffff"+ + "\1\10\2\uffff\1\3\7\uffff\3\3\2\uffff\1\11\1\uffff\4\3", + "", + "", + "", + "", + "", + "\3\12\4\uffff\1\12\40\uffff\1\13\6\uffff\1\12\2\uffff\1\12", + "\3\12\4\uffff\1\12\40\uffff\1\13\6\uffff\1\12\2\uffff\1\12", + "", + "" + }; + + static final short[] DFA46_eot = DFA.unpackEncodedString(DFA46_eotS); + static final short[] DFA46_eof = DFA.unpackEncodedString(DFA46_eofS); + static final char[] DFA46_min = DFA.unpackEncodedStringToUnsignedChars(DFA46_minS); + static final char[] DFA46_max = DFA.unpackEncodedStringToUnsignedChars(DFA46_maxS); + static final short[] DFA46_accept = DFA.unpackEncodedString(DFA46_acceptS); + static final short[] DFA46_special = DFA.unpackEncodedString(DFA46_specialS); + static final short[][] DFA46_transition; + + static { + int numStates = DFA46_transitionS.length; + DFA46_transition = new short[numStates][]; + for (int i=0; i ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] ^( $labelOp id atom ) EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> ^( $labelOp id atom ) ) | id (labelOp= '=' | labelOp= '+=' ) block ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] ^( $labelOp id block ) EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> ^( $labelOp id block ) ) | atom ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] atom EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> atom ) | ebnf | ACTION | SEMPRED ( '=>' -> GATED_SEMPRED | -> SEMPRED ) | treeSpec ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] treeSpec EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> treeSpec ) );"; + } + } + static final String DFA64_eotS = + "\15\uffff"; + static final String DFA64_eofS = + "\15\uffff"; + static final String DFA64_minS = + "\4\45\1\0\2\uffff\2\45\1\uffff\2\45\1\112"; + static final String DFA64_maxS = + "\4\135\1\0\2\uffff\2\135\1\uffff\2\135\1\133"; + static final String DFA64_acceptS = + "\5\uffff\1\2\1\3\2\uffff\1\1\3\uffff"; + static final String DFA64_specialS = + "\4\uffff\1\0\10\uffff}>"; + static final String[] DFA64_transitionS = { + "\1\5\2\uffff\1\6\1\uffff\1\1\2\5\1\4\3\uffff\1\2\23\uffff\1"+ + "\6\14\uffff\1\3\2\6\10\uffff\1\5", + "\1\5\2\uffff\1\5\1\uffff\4\5\2\uffff\2\5\23\uffff\1\5\4\uffff"+ + "\1\5\7\uffff\1\7\2\5\5\uffff\2\5\1\uffff\1\5", + "\1\5\2\uffff\1\5\1\uffff\4\5\3\uffff\1\5\23\uffff\1\5\4\uffff"+ + "\1\5\7\uffff\1\7\2\5\5\uffff\2\5\1\uffff\1\5", + "\1\5\4\uffff\3\5\1\10\3\uffff\1\5\40\uffff\1\5\12\uffff\1\5", + "\1\uffff", + "", + "", + "\1\5\4\uffff\1\12\3\5\3\uffff\1\13\40\uffff\1\5\1\uffff\1\11"+ + "\10\uffff\1\5", + "\1\5\4\uffff\4\5\3\uffff\1\5\30\uffff\1\5\7\uffff\1\5\1\uffff"+ + "\1\14\5\uffff\2\5\1\uffff\1\5", + "", + "\1\5\4\uffff\4\5\2\uffff\2\5\25\uffff\1\11\2\uffff\1\5\7\uffff"+ + "\1\5\1\uffff\1\5\5\uffff\2\5\1\uffff\1\5", + "\1\5\4\uffff\4\5\3\uffff\1\5\25\uffff\1\11\2\uffff\1\5\7\uffff"+ + "\1\5\1\uffff\1\5\5\uffff\2\5\1\uffff\1\5", + "\1\5\7\uffff\1\11\7\uffff\2\5" + }; + + static final short[] DFA64_eot = DFA.unpackEncodedString(DFA64_eotS); + static final short[] DFA64_eof = DFA.unpackEncodedString(DFA64_eofS); + static final char[] DFA64_min = DFA.unpackEncodedStringToUnsignedChars(DFA64_minS); + static final char[] DFA64_max = DFA.unpackEncodedStringToUnsignedChars(DFA64_maxS); + static final short[] DFA64_accept = DFA.unpackEncodedString(DFA64_acceptS); + static final short[] DFA64_special = DFA.unpackEncodedString(DFA64_specialS); + static final short[][] DFA64_transition; + + static { + int numStates = DFA64_transitionS.length; + DFA64_transition = new short[numStates][]; + for (int i=0; i ^( ALT[\"ALT\"] EPSILON[\"EPSILON\"] EOA[\"EOA\"] ) );"; + } + public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { + TokenStream input = (TokenStream)_input; + int _s = s; + switch ( s ) { + case 0 : + int LA64_4 = input.LA(1); + + + int index64_4 = input.index(); + input.rewind(); + s = -1; + if ( (synpred1_ANTLRv3()) ) {s = 9;} + + else if ( (synpred2_ANTLRv3()) ) {s = 5;} + + + input.seek(index64_4); + if ( s>=0 ) return s; + break; + } + if (state.backtracking>0) {state.failed=true; return -1;} + NoViableAltException nvae = + new NoViableAltException(getDescription(), 64, _s, input); + error(nvae); + throw nvae; + } + } + static final String DFA67_eotS = + "\16\uffff"; + static final String DFA67_eofS = + "\1\uffff\4\12\1\uffff\1\12\4\uffff\3\12"; + static final String DFA67_minS = + "\5\45\1\52\1\45\4\uffff\3\45"; + static final String DFA67_maxS = + "\5\135\1\61\1\135\4\uffff\3\135"; + static final String DFA67_acceptS = + "\7\uffff\1\3\1\4\1\2\1\1\3\uffff"; + static final String DFA67_specialS = + "\16\uffff}>"; + static final String[] DFA67_transitionS = { + "\1\7\4\uffff\1\2\1\4\1\1\1\6\3\uffff\1\3\40\uffff\1\10\12\uffff"+ + "\1\5", + "\1\12\2\uffff\1\12\1\uffff\4\12\3\uffff\1\12\23\uffff\1\12"+ + "\4\uffff\1\11\7\uffff\3\12\5\uffff\2\11\1\uffff\1\12", + "\1\12\2\uffff\1\12\1\uffff\4\12\2\uffff\1\13\1\12\23\uffff"+ + "\1\12\4\uffff\1\11\7\uffff\3\12\5\uffff\2\11\1\uffff\1\12", + "\1\12\2\uffff\1\12\1\uffff\4\12\3\uffff\1\12\23\uffff\1\12"+ + "\4\uffff\1\11\7\uffff\3\12\5\uffff\2\11\1\uffff\1\12", + "\1\12\2\uffff\1\12\1\uffff\4\12\3\uffff\1\12\23\uffff\1\12"+ + "\4\uffff\1\11\7\uffff\3\12\5\uffff\2\11\1\uffff\1\12", + "\1\14\6\uffff\1\15", + "\1\12\2\uffff\1\12\1\uffff\4\12\3\uffff\1\12\23\uffff\1\12"+ + "\4\uffff\1\11\7\uffff\3\12\5\uffff\2\11\1\uffff\1\12", + "", + "", + "", + "", + "\1\12\2\uffff\1\12\1\uffff\4\12\3\uffff\1\12\23\uffff\1\12"+ + "\4\uffff\1\11\7\uffff\3\12\5\uffff\2\11\1\uffff\1\12", + "\1\12\2\uffff\1\12\1\uffff\4\12\3\uffff\1\12\23\uffff\1\12"+ + "\4\uffff\1\11\7\uffff\3\12\5\uffff\2\11\1\uffff\1\12", + "\1\12\2\uffff\1\12\1\uffff\4\12\3\uffff\1\12\23\uffff\1\12"+ + "\4\uffff\1\11\7\uffff\3\12\5\uffff\2\11\1\uffff\1\12" + }; + + static final short[] DFA67_eot = DFA.unpackEncodedString(DFA67_eotS); + static final short[] DFA67_eof = DFA.unpackEncodedString(DFA67_eofS); + static final char[] DFA67_min = DFA.unpackEncodedStringToUnsignedChars(DFA67_minS); + static final char[] DFA67_max = DFA.unpackEncodedStringToUnsignedChars(DFA67_maxS); + static final short[] DFA67_accept = DFA.unpackEncodedString(DFA67_acceptS); + static final short[] DFA67_special = DFA.unpackEncodedString(DFA67_specialS); + static final short[][] DFA67_transition; + + static { + int numStates = DFA67_transitionS.length; + DFA67_transition = new short[numStates][]; + for (int i=0; i ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] rewrite_tree_atom EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | rewrite_tree ( ebnfSuffix -> ^( ebnfSuffix ^( BLOCK[\"BLOCK\"] ^( ALT[\"ALT\"] rewrite_tree EOA[\"EOA\"] ) EOB[\"EOB\"] ) ) | -> rewrite_tree ) | rewrite_tree_ebnf );"; + } + } + static final String DFA72_eotS = + "\22\uffff"; + static final String DFA72_eofS = + "\10\uffff\1\12\11\uffff"; + static final String DFA72_minS = + "\1\52\2\122\2\uffff\1\52\2\107\1\50\1\55\2\uffff\1\121\1\52\2\107"+ + "\1\55\1\121"; + static final String DFA72_maxS = + "\3\122\2\uffff\1\124\2\107\1\124\1\55\2\uffff\1\124\1\61\2\107\1"+ + "\55\1\124"; + static final String DFA72_acceptS = + "\3\uffff\1\3\1\4\5\uffff\1\2\1\1\6\uffff"; + static final String DFA72_specialS = + "\22\uffff}>"; + static final String[] DFA72_transitionS = { + "\1\1\2\uffff\1\4\3\uffff\1\2\40\uffff\1\3", + "\1\5", + "\1\5", + "", + "", + "\1\6\6\uffff\1\7\42\uffff\1\10", + "\1\11", + "\1\11", + "\1\12\11\uffff\2\13\21\uffff\1\12\15\uffff\2\12", + "\1\14", + "", + "", + "\1\15\2\uffff\1\10", + "\1\16\6\uffff\1\17", + "\1\20", + "\1\20", + "\1\21", + "\1\15\2\uffff\1\10" + }; + + static final short[] DFA72_eot = DFA.unpackEncodedString(DFA72_eotS); + static final short[] DFA72_eof = DFA.unpackEncodedString(DFA72_eofS); + static final char[] DFA72_min = DFA.unpackEncodedStringToUnsignedChars(DFA72_minS); + static final char[] DFA72_max = DFA.unpackEncodedStringToUnsignedChars(DFA72_maxS); + static final short[] DFA72_accept = DFA.unpackEncodedString(DFA72_acceptS); + static final short[] DFA72_special = DFA.unpackEncodedString(DFA72_specialS); + static final short[][] DFA72_transition; + + static { + int numStates = DFA72_transitionS.length; + DFA72_transition = new short[numStates][]; + for (int i=0; i ^( TEMPLATE[$lp,\"TEMPLATE\"] id rewrite_template_args $str) | rewrite_template_ref | rewrite_indirect_template_head | ACTION );"; + } + } + + + public static final BitSet FOLLOW_DOC_COMMENT_in_grammarDef347 = new BitSet(new long[]{0x0000000000000000L,0x000000000000001EL}); + public static final BitSet FOLLOW_65_in_grammarDef357 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L}); + public static final BitSet FOLLOW_66_in_grammarDef375 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L}); + public static final BitSet FOLLOW_67_in_grammarDef391 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L}); + public static final BitSet FOLLOW_68_in_grammarDef432 = new BitSet(new long[]{0x0002040000000000L}); + public static final BitSet FOLLOW_id_in_grammarDef434 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L}); + public static final BitSet FOLLOW_69_in_grammarDef436 = new BitSet(new long[]{0x0002461080000010L,0x0000000000003900L}); + public static final BitSet FOLLOW_optionsSpec_in_grammarDef438 = new BitSet(new long[]{0x0002461080000010L,0x0000000000003900L}); + public static final BitSet FOLLOW_tokensSpec_in_grammarDef441 = new BitSet(new long[]{0x0002461080000010L,0x0000000000003900L}); + public static final BitSet FOLLOW_attrScope_in_grammarDef444 = new BitSet(new long[]{0x0002461080000010L,0x0000000000003900L}); + public static final BitSet FOLLOW_action_in_grammarDef447 = new BitSet(new long[]{0x0002461080000010L,0x0000000000003900L}); + public static final BitSet FOLLOW_rule_in_grammarDef455 = new BitSet(new long[]{0x0002461080000010L,0x0000000000003900L}); + public static final BitSet FOLLOW_EOF_in_grammarDef463 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TOKENS_in_tokensSpec524 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_tokenSpec_in_tokensSpec526 = new BitSet(new long[]{0x0000040000000000L,0x0000000000000040L}); + public static final BitSet FOLLOW_70_in_tokensSpec529 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TOKEN_REF_in_tokenSpec549 = new BitSet(new long[]{0x0000000000000000L,0x00000000000000A0L}); + public static final BitSet FOLLOW_71_in_tokenSpec555 = new BitSet(new long[]{0x0000180000000000L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_tokenSpec560 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L}); + public static final BitSet FOLLOW_CHAR_LITERAL_in_tokenSpec564 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L}); + public static final BitSet FOLLOW_69_in_tokenSpec603 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_SCOPE_in_attrScope614 = new BitSet(new long[]{0x0002040000000000L}); + public static final BitSet FOLLOW_id_in_attrScope616 = new BitSet(new long[]{0x0000200000000000L}); + public static final BitSet FOLLOW_ACTION_in_attrScope618 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_72_in_action641 = new BitSet(new long[]{0x0002040000000000L,0x0000000000000006L}); + public static final BitSet FOLLOW_actionScopeName_in_action644 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L}); + public static final BitSet FOLLOW_73_in_action646 = new BitSet(new long[]{0x0002040000000000L}); + public static final BitSet FOLLOW_id_in_action650 = new BitSet(new long[]{0x0000200000000000L}); + public static final BitSet FOLLOW_ACTION_in_action652 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_id_in_actionScopeName678 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_65_in_actionScopeName685 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_66_in_actionScopeName702 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_OPTIONS_in_optionsSpec718 = new BitSet(new long[]{0x0002040000000000L}); + public static final BitSet FOLLOW_option_in_optionsSpec721 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L}); + public static final BitSet FOLLOW_69_in_optionsSpec723 = new BitSet(new long[]{0x0002040000000000L,0x0000000000000040L}); + public static final BitSet FOLLOW_70_in_optionsSpec727 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_id_in_option752 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L}); + public static final BitSet FOLLOW_71_in_option754 = new BitSet(new long[]{0x00029C0000000000L,0x0000000000000400L}); + public static final BitSet FOLLOW_optionValue_in_option756 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_id_in_optionValue785 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_optionValue795 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CHAR_LITERAL_in_optionValue805 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INT_in_optionValue815 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_74_in_optionValue825 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DOC_COMMENT_in_rule854 = new BitSet(new long[]{0x0002041000000000L,0x0000000000003800L}); + public static final BitSet FOLLOW_75_in_rule864 = new BitSet(new long[]{0x0002040000000000L}); + public static final BitSet FOLLOW_76_in_rule866 = new BitSet(new long[]{0x0002040000000000L}); + public static final BitSet FOLLOW_77_in_rule868 = new BitSet(new long[]{0x0002040000000000L}); + public static final BitSet FOLLOW_FRAGMENT_in_rule870 = new BitSet(new long[]{0x0002040000000000L}); + public static final BitSet FOLLOW_id_in_rule878 = new BitSet(new long[]{0x0001408080000000L,0x000000000001C100L}); + public static final BitSet FOLLOW_BANG_in_rule884 = new BitSet(new long[]{0x0001400080000000L,0x000000000001C100L}); + public static final BitSet FOLLOW_ARG_ACTION_in_rule893 = new BitSet(new long[]{0x0000400080000000L,0x000000000001C100L}); + public static final BitSet FOLLOW_78_in_rule902 = new BitSet(new long[]{0x0001000000000000L}); + public static final BitSet FOLLOW_ARG_ACTION_in_rule906 = new BitSet(new long[]{0x0000400080000000L,0x0000000000018100L}); + public static final BitSet FOLLOW_throwsSpec_in_rule914 = new BitSet(new long[]{0x0000400080000000L,0x0000000000008100L}); + public static final BitSet FOLLOW_optionsSpec_in_rule917 = new BitSet(new long[]{0x0000000080000000L,0x0000000000008100L}); + public static final BitSet FOLLOW_ruleScopeSpec_in_rule920 = new BitSet(new long[]{0x0000000000000000L,0x0000000000008100L}); + public static final BitSet FOLLOW_ruleAction_in_rule923 = new BitSet(new long[]{0x0000000000000000L,0x0000000000008100L}); + public static final BitSet FOLLOW_79_in_rule928 = new BitSet(new long[]{0x00023D2100000000L,0x00000000120C0000L}); + public static final BitSet FOLLOW_altList_in_rule930 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L}); + public static final BitSet FOLLOW_69_in_rule932 = new BitSet(new long[]{0x0000000000000002L,0x0000000000600000L}); + public static final BitSet FOLLOW_exceptionGroup_in_rule936 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_72_in_ruleAction1038 = new BitSet(new long[]{0x0002040000000000L}); + public static final BitSet FOLLOW_id_in_ruleAction1040 = new BitSet(new long[]{0x0000200000000000L}); + public static final BitSet FOLLOW_ACTION_in_ruleAction1042 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_80_in_throwsSpec1063 = new BitSet(new long[]{0x0002040000000000L}); + public static final BitSet FOLLOW_id_in_throwsSpec1065 = new BitSet(new long[]{0x0000000000000002L,0x0000000000020000L}); + public static final BitSet FOLLOW_81_in_throwsSpec1069 = new BitSet(new long[]{0x0002040000000000L}); + public static final BitSet FOLLOW_id_in_throwsSpec1071 = new BitSet(new long[]{0x0000000000000002L,0x0000000000020000L}); + public static final BitSet FOLLOW_SCOPE_in_ruleScopeSpec1094 = new BitSet(new long[]{0x0000200000000000L}); + public static final BitSet FOLLOW_ACTION_in_ruleScopeSpec1096 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_SCOPE_in_ruleScopeSpec1109 = new BitSet(new long[]{0x0002040000000000L}); + public static final BitSet FOLLOW_id_in_ruleScopeSpec1111 = new BitSet(new long[]{0x0000000000000000L,0x0000000000020020L}); + public static final BitSet FOLLOW_81_in_ruleScopeSpec1114 = new BitSet(new long[]{0x0002040000000000L}); + public static final BitSet FOLLOW_id_in_ruleScopeSpec1116 = new BitSet(new long[]{0x0000000000000000L,0x0000000000020020L}); + public static final BitSet FOLLOW_69_in_ruleScopeSpec1120 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_SCOPE_in_ruleScopeSpec1134 = new BitSet(new long[]{0x0000200000000000L}); + public static final BitSet FOLLOW_ACTION_in_ruleScopeSpec1136 = new BitSet(new long[]{0x0000000080000000L}); + public static final BitSet FOLLOW_SCOPE_in_ruleScopeSpec1140 = new BitSet(new long[]{0x0002040000000000L}); + public static final BitSet FOLLOW_id_in_ruleScopeSpec1142 = new BitSet(new long[]{0x0000000000000000L,0x0000000000020020L}); + public static final BitSet FOLLOW_81_in_ruleScopeSpec1145 = new BitSet(new long[]{0x0002040000000000L}); + public static final BitSet FOLLOW_id_in_ruleScopeSpec1147 = new BitSet(new long[]{0x0000000000000000L,0x0000000000020020L}); + public static final BitSet FOLLOW_69_in_ruleScopeSpec1151 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_82_in_block1183 = new BitSet(new long[]{0x00027D2100000000L,0x00000000121C8000L}); + public static final BitSet FOLLOW_optionsSpec_in_block1192 = new BitSet(new long[]{0x0000000000000000L,0x0000000000008000L}); + public static final BitSet FOLLOW_79_in_block1196 = new BitSet(new long[]{0x00023D2100000000L,0x00000000121C0000L}); + public static final BitSet FOLLOW_alternative_in_block1205 = new BitSet(new long[]{0x0000010000000000L,0x0000000000180000L}); + public static final BitSet FOLLOW_rewrite_in_block1207 = new BitSet(new long[]{0x0000000000000000L,0x0000000000180000L}); + public static final BitSet FOLLOW_83_in_block1211 = new BitSet(new long[]{0x00023D2100000000L,0x00000000121C0000L}); + public static final BitSet FOLLOW_alternative_in_block1215 = new BitSet(new long[]{0x0000010000000000L,0x0000000000180000L}); + public static final BitSet FOLLOW_rewrite_in_block1217 = new BitSet(new long[]{0x0000000000000000L,0x0000000000180000L}); + public static final BitSet FOLLOW_84_in_block1232 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_alternative_in_altList1289 = new BitSet(new long[]{0x0000010000000000L,0x0000000000080000L}); + public static final BitSet FOLLOW_rewrite_in_altList1291 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L}); + public static final BitSet FOLLOW_83_in_altList1295 = new BitSet(new long[]{0x00023D2100000000L,0x00000000120C0000L}); + public static final BitSet FOLLOW_alternative_in_altList1299 = new BitSet(new long[]{0x0000010000000000L,0x0000000000080000L}); + public static final BitSet FOLLOW_rewrite_in_altList1301 = new BitSet(new long[]{0x0000000000000002L,0x0000000000080000L}); + public static final BitSet FOLLOW_element_in_alternative1349 = new BitSet(new long[]{0x00023C2100000002L,0x0000000012040000L}); + public static final BitSet FOLLOW_exceptionHandler_in_exceptionGroup1400 = new BitSet(new long[]{0x0000000000000002L,0x0000000000600000L}); + public static final BitSet FOLLOW_finallyClause_in_exceptionGroup1407 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_finallyClause_in_exceptionGroup1415 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_85_in_exceptionHandler1435 = new BitSet(new long[]{0x0001000000000000L}); + public static final BitSet FOLLOW_ARG_ACTION_in_exceptionHandler1437 = new BitSet(new long[]{0x0000200000000000L}); + public static final BitSet FOLLOW_ACTION_in_exceptionHandler1439 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_86_in_finallyClause1469 = new BitSet(new long[]{0x0000200000000000L}); + public static final BitSet FOLLOW_ACTION_in_finallyClause1471 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_elementNoOptionSpec_in_element1493 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_id_in_elementNoOptionSpec1504 = new BitSet(new long[]{0x0000000000000000L,0x0000000000800080L}); + public static final BitSet FOLLOW_71_in_elementNoOptionSpec1509 = new BitSet(new long[]{0x00021C0000000000L,0x0000000012000000L}); + public static final BitSet FOLLOW_87_in_elementNoOptionSpec1513 = new BitSet(new long[]{0x00021C0000000000L,0x0000000012000000L}); + public static final BitSet FOLLOW_atom_in_elementNoOptionSpec1516 = new BitSet(new long[]{0x0000000000000002L,0x000000000C000400L}); + public static final BitSet FOLLOW_ebnfSuffix_in_elementNoOptionSpec1522 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_id_in_elementNoOptionSpec1581 = new BitSet(new long[]{0x0000000000000000L,0x0000000000800080L}); + public static final BitSet FOLLOW_71_in_elementNoOptionSpec1586 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L}); + public static final BitSet FOLLOW_87_in_elementNoOptionSpec1590 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L}); + public static final BitSet FOLLOW_block_in_elementNoOptionSpec1593 = new BitSet(new long[]{0x0000000000000002L,0x000000000C000400L}); + public static final BitSet FOLLOW_ebnfSuffix_in_elementNoOptionSpec1599 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_atom_in_elementNoOptionSpec1658 = new BitSet(new long[]{0x0000000000000002L,0x000000000C000400L}); + public static final BitSet FOLLOW_ebnfSuffix_in_elementNoOptionSpec1664 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ebnf_in_elementNoOptionSpec1710 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ACTION_in_elementNoOptionSpec1717 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_SEMPRED_in_elementNoOptionSpec1724 = new BitSet(new long[]{0x0000000000000002L,0x0000000001000000L}); + public static final BitSet FOLLOW_88_in_elementNoOptionSpec1728 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_treeSpec_in_elementNoOptionSpec1747 = new BitSet(new long[]{0x0000000000000002L,0x000000000C000400L}); + public static final BitSet FOLLOW_ebnfSuffix_in_elementNoOptionSpec1753 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_range_in_atom1805 = new BitSet(new long[]{0x000000C000000002L}); + public static final BitSet FOLLOW_ROOT_in_atom1812 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_BANG_in_atom1816 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_terminal_in_atom1844 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_notSet_in_atom1852 = new BitSet(new long[]{0x000000C000000002L}); + public static final BitSet FOLLOW_ROOT_in_atom1859 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_BANG_in_atom1863 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_RULE_REF_in_atom1891 = new BitSet(new long[]{0x000100C000000002L}); + public static final BitSet FOLLOW_ARG_ACTION_in_atom1897 = new BitSet(new long[]{0x000000C000000002L}); + public static final BitSet FOLLOW_ROOT_in_atom1907 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_BANG_in_atom1911 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_89_in_notSet1994 = new BitSet(new long[]{0x00001C0000000000L,0x0000000000040000L}); + public static final BitSet FOLLOW_notTerminal_in_notSet2000 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_block_in_notSet2014 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TREE_BEGIN_in_treeSpec2038 = new BitSet(new long[]{0x00023C2100000000L,0x0000000012040000L}); + public static final BitSet FOLLOW_element_in_treeSpec2040 = new BitSet(new long[]{0x00023C2100000000L,0x0000000012040000L}); + public static final BitSet FOLLOW_element_in_treeSpec2044 = new BitSet(new long[]{0x00023C2100000000L,0x0000000012140000L}); + public static final BitSet FOLLOW_84_in_treeSpec2049 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_block_in_ebnf2081 = new BitSet(new long[]{0x0000000000000002L,0x000000000D000400L}); + public static final BitSet FOLLOW_90_in_ebnf2089 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_74_in_ebnf2106 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_91_in_ebnf2123 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_88_in_ebnf2140 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CHAR_LITERAL_in_range2223 = new BitSet(new long[]{0x0000000000002000L}); + public static final BitSet FOLLOW_RANGE_in_range2225 = new BitSet(new long[]{0x0000100000000000L}); + public static final BitSet FOLLOW_CHAR_LITERAL_in_range2229 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CHAR_LITERAL_in_terminal2260 = new BitSet(new long[]{0x000000C000000002L}); + public static final BitSet FOLLOW_TOKEN_REF_in_terminal2282 = new BitSet(new long[]{0x000100C000000002L}); + public static final BitSet FOLLOW_ARG_ACTION_in_terminal2289 = new BitSet(new long[]{0x000000C000000002L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_terminal2328 = new BitSet(new long[]{0x000000C000000002L}); + public static final BitSet FOLLOW_92_in_terminal2343 = new BitSet(new long[]{0x000000C000000002L}); + public static final BitSet FOLLOW_ROOT_in_terminal2364 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_BANG_in_terminal2385 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_set_in_notTerminal0 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_90_in_ebnfSuffix2445 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_74_in_ebnfSuffix2457 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_91_in_ebnfSuffix2470 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_REWRITE_in_rewrite2499 = new BitSet(new long[]{0x0000000100000000L}); + public static final BitSet FOLLOW_SEMPRED_in_rewrite2503 = new BitSet(new long[]{0x00023D2000000000L,0x0000000020040000L}); + public static final BitSet FOLLOW_rewrite_alternative_in_rewrite2507 = new BitSet(new long[]{0x0000010000000000L}); + public static final BitSet FOLLOW_REWRITE_in_rewrite2515 = new BitSet(new long[]{0x00023C2000000000L,0x0000000020040000L}); + public static final BitSet FOLLOW_rewrite_alternative_in_rewrite2519 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewrite_template_in_rewrite_alternative2570 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewrite_tree_alternative_in_rewrite_alternative2575 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_82_in_rewrite_tree_block2617 = new BitSet(new long[]{0x00023C2000000000L,0x0000000020040000L}); + public static final BitSet FOLLOW_rewrite_tree_alternative_in_rewrite_tree_block2619 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L}); + public static final BitSet FOLLOW_84_in_rewrite_tree_block2621 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewrite_tree_element_in_rewrite_tree_alternative2655 = new BitSet(new long[]{0x00023C2000000002L,0x0000000020040000L}); + public static final BitSet FOLLOW_rewrite_tree_atom_in_rewrite_tree_element2683 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewrite_tree_atom_in_rewrite_tree_element2688 = new BitSet(new long[]{0x0000000000000000L,0x000000000C000400L}); + public static final BitSet FOLLOW_ebnfSuffix_in_rewrite_tree_element2690 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewrite_tree_in_rewrite_tree_element2724 = new BitSet(new long[]{0x0000000000000002L,0x000000000C000400L}); + public static final BitSet FOLLOW_ebnfSuffix_in_rewrite_tree_element2730 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewrite_tree_ebnf_in_rewrite_tree_element2776 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CHAR_LITERAL_in_rewrite_tree_atom2792 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TOKEN_REF_in_rewrite_tree_atom2799 = new BitSet(new long[]{0x0001000000000002L}); + public static final BitSet FOLLOW_ARG_ACTION_in_rewrite_tree_atom2801 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_RULE_REF_in_rewrite_tree_atom2822 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_STRING_LITERAL_in_rewrite_tree_atom2829 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_93_in_rewrite_tree_atom2838 = new BitSet(new long[]{0x0002040000000000L}); + public static final BitSet FOLLOW_id_in_rewrite_tree_atom2840 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ACTION_in_rewrite_tree_atom2851 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewrite_tree_block_in_rewrite_tree_ebnf2872 = new BitSet(new long[]{0x0000000000000000L,0x000000000C000400L}); + public static final BitSet FOLLOW_ebnfSuffix_in_rewrite_tree_ebnf2874 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TREE_BEGIN_in_rewrite_tree2894 = new BitSet(new long[]{0x00023C0000000000L,0x0000000020000000L}); + public static final BitSet FOLLOW_rewrite_tree_atom_in_rewrite_tree2896 = new BitSet(new long[]{0x00023C2000000000L,0x0000000020140000L}); + public static final BitSet FOLLOW_rewrite_tree_element_in_rewrite_tree2898 = new BitSet(new long[]{0x00023C2000000000L,0x0000000020140000L}); + public static final BitSet FOLLOW_84_in_rewrite_tree2901 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_id_in_rewrite_template2933 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L}); + public static final BitSet FOLLOW_82_in_rewrite_template2937 = new BitSet(new long[]{0x0002040000000000L,0x0000000000100000L}); + public static final BitSet FOLLOW_rewrite_template_args_in_rewrite_template2939 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L}); + public static final BitSet FOLLOW_84_in_rewrite_template2941 = new BitSet(new long[]{0x000C000000000000L}); + public static final BitSet FOLLOW_DOUBLE_QUOTE_STRING_LITERAL_in_rewrite_template2949 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DOUBLE_ANGLE_STRING_LITERAL_in_rewrite_template2955 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewrite_template_ref_in_rewrite_template2982 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewrite_indirect_template_head_in_rewrite_template2991 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ACTION_in_rewrite_template3000 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_id_in_rewrite_template_ref3013 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L}); + public static final BitSet FOLLOW_82_in_rewrite_template_ref3017 = new BitSet(new long[]{0x0002040000000000L,0x0000000000100000L}); + public static final BitSet FOLLOW_rewrite_template_args_in_rewrite_template_ref3019 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L}); + public static final BitSet FOLLOW_84_in_rewrite_template_ref3021 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_82_in_rewrite_indirect_template_head3049 = new BitSet(new long[]{0x0000200000000000L}); + public static final BitSet FOLLOW_ACTION_in_rewrite_indirect_template_head3051 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L}); + public static final BitSet FOLLOW_84_in_rewrite_indirect_template_head3053 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L}); + public static final BitSet FOLLOW_82_in_rewrite_indirect_template_head3055 = new BitSet(new long[]{0x0002040000000000L,0x0000000000100000L}); + public static final BitSet FOLLOW_rewrite_template_args_in_rewrite_indirect_template_head3057 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L}); + public static final BitSet FOLLOW_84_in_rewrite_indirect_template_head3059 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewrite_template_arg_in_rewrite_template_args3083 = new BitSet(new long[]{0x0000000000000002L,0x0000000000020000L}); + public static final BitSet FOLLOW_81_in_rewrite_template_args3086 = new BitSet(new long[]{0x0002040000000000L}); + public static final BitSet FOLLOW_rewrite_template_arg_in_rewrite_template_args3088 = new BitSet(new long[]{0x0000000000000002L,0x0000000000020000L}); + public static final BitSet FOLLOW_id_in_rewrite_template_arg3121 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L}); + public static final BitSet FOLLOW_71_in_rewrite_template_arg3123 = new BitSet(new long[]{0x0000200000000000L}); + public static final BitSet FOLLOW_ACTION_in_rewrite_template_arg3125 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TOKEN_REF_in_id3146 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_RULE_REF_in_id3156 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewrite_template_in_synpred1_ANTLRv32570 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_rewrite_tree_alternative_in_synpred2_ANTLRv32575 = new BitSet(new long[]{0x0000000000000002L}); + +} \ No newline at end of file diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/StGUnit.g b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/StGUnit.g new file mode 100644 index 0000000..44458bb --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/StGUnit.g @@ -0,0 +1,212 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Leon Jen-Yuan Su +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +grammar StGUnit; + +options {language=Java;} + +tokens { + OK = 'OK'; + FAIL = 'FAIL'; + DOC_COMMENT; +} + +@header { +package org.antlr.gunit.swingui.parsers; +import org.antlr.gunit.swingui.model.*; +} + +@lexer::header {package org.antlr.gunit.swingui;} + +@members { +public Translator.TestSuiteAdapter adapter ;; +} + +gUnitDef + : 'gunit' name=id {adapter.setGrammarName($name.text);} + ('walks' id)? ';' + header? suite* + ; + +header + : '@header' ACTION + ; + +suite + : ( parserRule=RULE_REF ('walks' RULE_REF)? + {adapter.startRule($parserRule.text);} + | lexerRule=TOKEN_REF + {adapter.startRule($lexerRule.text);} + ) + ':' + test+ + {adapter.endRule();} + ; + +test + : input expect + {adapter.addTestCase($input.in, $expect.out);} + ; + +expect returns [ITestCaseOutput out] + : OK {$out = adapter.createBoolOutput(true);} + | FAIL {$out = adapter.createBoolOutput(false);} + | 'returns' RETVAL {$out = adapter.createReturnOutput($RETVAL.text);} + | '->' output {$out = adapter.createStdOutput($output.text);} + | '->' AST {$out = adapter.createAstOutput($AST.text);} + ; + +input returns [ITestCaseInput in] + : STRING {$in = adapter.createStringInput($STRING.text);} + | ML_STRING {$in = adapter.createMultiInput($ML_STRING.text);} + | fileInput {$in = adapter.createFileInput($fileInput.path);} + ; + +output + : STRING + | ML_STRING + | ACTION + ; + +fileInput returns [String path] + : id {$path = $id.text;} (EXT {$path += $EXT.text;})? + ; + +id : TOKEN_REF + | RULE_REF + ; + +// L E X I C A L R U L E S + +SL_COMMENT + : '//' ~('\r'|'\n')* '\r'? '\n' {$channel=HIDDEN;} + ; + +ML_COMMENT + : '/*' {$channel=HIDDEN;} .* '*/' + ; + +STRING + : '"' ( ESC | ~('\\'|'"') )* '"' + ; + +ML_STRING + : '<<' .* '>>' + ; + +TOKEN_REF + : 'A'..'Z' ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* + ; + +RULE_REF + : 'a'..'z' ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* + ; + +EXT : '.'('a'..'z'|'A'..'Z'|'0'..'9')+; + +RETVAL : NESTED_RETVAL + ; + +fragment +NESTED_RETVAL : + '[' + ( options {greedy=false;} + : NESTED_RETVAL + | . + )* + ']' + ; + +AST : NESTED_AST (' '? NESTED_AST)*; + +fragment +NESTED_AST : + '(' + ( options {greedy=false;} + : NESTED_AST + | . + )* + ')' + ; + +ACTION + : NESTED_ACTION + ; + +fragment +NESTED_ACTION : + '{' + ( options {greedy=false; k=3;} + : NESTED_ACTION + | STRING_LITERAL + | CHAR_LITERAL + | . + )* + '}' + ; + +fragment +CHAR_LITERAL + : '\'' ( ESC | ~('\''|'\\') ) '\'' + ; + +fragment +STRING_LITERAL + : '"' ( ESC | ~('\\'|'"') )* '"' + ; + +fragment +ESC : '\\' + ( 'n' + | 'r' + | 't' + | 'b' + | 'f' + | '"' + | '\'' + | '\\' + | '>' + | 'u' XDIGIT XDIGIT XDIGIT XDIGIT + | . // unknown, leave as it is + ) + ; + +fragment +XDIGIT : + '0' .. '9' + | 'a' .. 'f' + | 'A' .. 'F' + ; + +WS : ( ' ' + | '\t' + | '\r'? '\n' + )+ + {$channel=HIDDEN;} + ; diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/StGUnit.tokens b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/StGUnit.tokens new file mode 100644 index 0000000..38297d0 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/StGUnit.tokens @@ -0,0 +1,37 @@ +RETVAL=10 +NESTED_ACTION=20 +AST=11 +T__28=28 +EXT=14 +FAIL=5 +WS=24 +STRING=12 +OK=4 +ACTION=7 +TOKEN_REF=9 +ESC=17 +XDIGIT=23 +RULE_REF=8 +T__29=29 +NESTED_AST=19 +T__30=30 +CHAR_LITERAL=22 +T__31=31 +STRING_LITERAL=21 +T__27=27 +T__26=26 +ML_STRING=13 +T__25=25 +ML_COMMENT=16 +SL_COMMENT=15 +DOC_COMMENT=6 +NESTED_RETVAL=18 +'->'=31 +'gunit'=25 +'OK'=4 +'returns'=30 +'FAIL'=5 +'walks'=26 +':'=29 +'@header'=28 +';'=27 diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/StGUnitLexer.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/StGUnitLexer.java new file mode 100644 index 0000000..9a331b6 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/parsers/StGUnitLexer.java @@ -0,0 +1,1984 @@ +// $ANTLR 3.1.1 /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g 2009-02-15 15:43:43 +package org.antlr.gunit.swingui.parsers; + +import org.antlr.runtime.*; +import java.util.Stack; +import java.util.List; +import java.util.ArrayList; + +public class StGUnitLexer extends Lexer { + public static final int RETVAL=10; + public static final int AST=11; + public static final int NESTED_ACTION=20; + public static final int T__28=28; + public static final int EXT=14; + public static final int FAIL=5; + public static final int WS=24; + public static final int STRING=12; + public static final int OK=4; + public static final int ACTION=7; + public static final int TOKEN_REF=9; + public static final int ESC=17; + public static final int XDIGIT=23; + public static final int RULE_REF=8; + public static final int T__29=29; + public static final int NESTED_AST=19; + public static final int T__30=30; + public static final int CHAR_LITERAL=22; + public static final int T__31=31; + public static final int EOF=-1; + public static final int T__27=27; + public static final int STRING_LITERAL=21; + public static final int T__26=26; + public static final int T__25=25; + public static final int ML_STRING=13; + public static final int ML_COMMENT=16; + public static final int SL_COMMENT=15; + public static final int DOC_COMMENT=6; + public static final int NESTED_RETVAL=18; + + // delegates + // delegators + + public StGUnitLexer() {;} + public StGUnitLexer(CharStream input) { + this(input, new RecognizerSharedState()); + } + public StGUnitLexer(CharStream input, RecognizerSharedState state) { + super(input,state); + + } + public String getGrammarFileName() { return "/Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g"; } + + // $ANTLR start "OK" + public final void mOK() throws RecognitionException { + try { + int _type = OK; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:9:4: ( 'OK' ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:9:6: 'OK' + { + match("OK"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "OK" + + // $ANTLR start "FAIL" + public final void mFAIL() throws RecognitionException { + try { + int _type = FAIL; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:10:6: ( 'FAIL' ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:10:8: 'FAIL' + { + match("FAIL"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "FAIL" + + // $ANTLR start "T__25" + public final void mT__25() throws RecognitionException { + try { + int _type = T__25; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:11:7: ( 'gunit' ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:11:9: 'gunit' + { + match("gunit"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__25" + + // $ANTLR start "T__26" + public final void mT__26() throws RecognitionException { + try { + int _type = T__26; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:12:7: ( 'walks' ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:12:9: 'walks' + { + match("walks"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__26" + + // $ANTLR start "T__27" + public final void mT__27() throws RecognitionException { + try { + int _type = T__27; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:13:7: ( ';' ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:13:9: ';' + { + match(';'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__27" + + // $ANTLR start "T__28" + public final void mT__28() throws RecognitionException { + try { + int _type = T__28; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:14:7: ( '@header' ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:14:9: '@header' + { + match("@header"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__28" + + // $ANTLR start "T__29" + public final void mT__29() throws RecognitionException { + try { + int _type = T__29; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:15:7: ( ':' ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:15:9: ':' + { + match(':'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__29" + + // $ANTLR start "T__30" + public final void mT__30() throws RecognitionException { + try { + int _type = T__30; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:16:7: ( 'returns' ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:16:9: 'returns' + { + match("returns"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__30" + + // $ANTLR start "T__31" + public final void mT__31() throws RecognitionException { + try { + int _type = T__31; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:17:7: ( '->' ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:17:9: '->' + { + match("->"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "T__31" + + // $ANTLR start "SL_COMMENT" + public final void mSL_COMMENT() throws RecognitionException { + try { + int _type = SL_COMMENT; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:108:3: ( '//' (~ ( '\\r' | '\\n' ) )* ( '\\r' )? '\\n' ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:108:5: '//' (~ ( '\\r' | '\\n' ) )* ( '\\r' )? '\\n' + { + match("//"); + + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:108:10: (~ ( '\\r' | '\\n' ) )* + loop1: + do { + int alt1=2; + int LA1_0 = input.LA(1); + + if ( ((LA1_0>='\u0000' && LA1_0<='\t')||(LA1_0>='\u000B' && LA1_0<='\f')||(LA1_0>='\u000E' && LA1_0<='\uFFFF')) ) { + alt1=1; + } + + + switch (alt1) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:108:10: ~ ( '\\r' | '\\n' ) + { + if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + + default : + break loop1; + } + } while (true); + + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:108:24: ( '\\r' )? + int alt2=2; + int LA2_0 = input.LA(1); + + if ( (LA2_0=='\r') ) { + alt2=1; + } + switch (alt2) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:108:24: '\\r' + { + match('\r'); + + } + break; + + } + + match('\n'); + _channel=HIDDEN; + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "SL_COMMENT" + + // $ANTLR start "ML_COMMENT" + public final void mML_COMMENT() throws RecognitionException { + try { + int _type = ML_COMMENT; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:112:2: ( '/*' ( . )* '*/' ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:112:4: '/*' ( . )* '*/' + { + match("/*"); + + _channel=HIDDEN; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:112:28: ( . )* + loop3: + do { + int alt3=2; + int LA3_0 = input.LA(1); + + if ( (LA3_0=='*') ) { + int LA3_1 = input.LA(2); + + if ( (LA3_1=='/') ) { + alt3=2; + } + else if ( ((LA3_1>='\u0000' && LA3_1<='.')||(LA3_1>='0' && LA3_1<='\uFFFF')) ) { + alt3=1; + } + + + } + else if ( ((LA3_0>='\u0000' && LA3_0<=')')||(LA3_0>='+' && LA3_0<='\uFFFF')) ) { + alt3=1; + } + + + switch (alt3) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:112:28: . + { + matchAny(); + + } + break; + + default : + break loop3; + } + } while (true); + + match("*/"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "ML_COMMENT" + + // $ANTLR start "STRING" + public final void mSTRING() throws RecognitionException { + try { + int _type = STRING; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:116:2: ( '\"' ( ESC | ~ ( '\\\\' | '\"' ) )* '\"' ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:116:4: '\"' ( ESC | ~ ( '\\\\' | '\"' ) )* '\"' + { + match('\"'); + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:116:8: ( ESC | ~ ( '\\\\' | '\"' ) )* + loop4: + do { + int alt4=3; + int LA4_0 = input.LA(1); + + if ( (LA4_0=='\\') ) { + alt4=1; + } + else if ( ((LA4_0>='\u0000' && LA4_0<='!')||(LA4_0>='#' && LA4_0<='[')||(LA4_0>=']' && LA4_0<='\uFFFF')) ) { + alt4=2; + } + + + switch (alt4) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:116:10: ESC + { + mESC(); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:116:16: ~ ( '\\\\' | '\"' ) + { + if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + + default : + break loop4; + } + } while (true); + + match('\"'); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "STRING" + + // $ANTLR start "ML_STRING" + public final void mML_STRING() throws RecognitionException { + try { + int _type = ML_STRING; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:120:2: ( '<<' ( . )* '>>' ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:120:4: '<<' ( . )* '>>' + { + match("<<"); + + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:120:9: ( . )* + loop5: + do { + int alt5=2; + int LA5_0 = input.LA(1); + + if ( (LA5_0=='>') ) { + int LA5_1 = input.LA(2); + + if ( (LA5_1=='>') ) { + alt5=2; + } + else if ( ((LA5_1>='\u0000' && LA5_1<='=')||(LA5_1>='?' && LA5_1<='\uFFFF')) ) { + alt5=1; + } + + + } + else if ( ((LA5_0>='\u0000' && LA5_0<='=')||(LA5_0>='?' && LA5_0<='\uFFFF')) ) { + alt5=1; + } + + + switch (alt5) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:120:9: . + { + matchAny(); + + } + break; + + default : + break loop5; + } + } while (true); + + match(">>"); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "ML_STRING" + + // $ANTLR start "TOKEN_REF" + public final void mTOKEN_REF() throws RecognitionException { + try { + int _type = TOKEN_REF; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:124:2: ( 'A' .. 'Z' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:124:4: 'A' .. 'Z' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* + { + matchRange('A','Z'); + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:124:13: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* + loop6: + do { + int alt6=2; + int LA6_0 = input.LA(1); + + if ( ((LA6_0>='0' && LA6_0<='9')||(LA6_0>='A' && LA6_0<='Z')||LA6_0=='_'||(LA6_0>='a' && LA6_0<='z')) ) { + alt6=1; + } + + + switch (alt6) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g: + { + if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + + default : + break loop6; + } + } while (true); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "TOKEN_REF" + + // $ANTLR start "RULE_REF" + public final void mRULE_REF() throws RecognitionException { + try { + int _type = RULE_REF; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:128:2: ( 'a' .. 'z' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:128:4: 'a' .. 'z' ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* + { + matchRange('a','z'); + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:128:13: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* + loop7: + do { + int alt7=2; + int LA7_0 = input.LA(1); + + if ( ((LA7_0>='0' && LA7_0<='9')||(LA7_0>='A' && LA7_0<='Z')||LA7_0=='_'||(LA7_0>='a' && LA7_0<='z')) ) { + alt7=1; + } + + + switch (alt7) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g: + { + if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + + default : + break loop7; + } + } while (true); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "RULE_REF" + + // $ANTLR start "EXT" + public final void mEXT() throws RecognitionException { + try { + int _type = EXT; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:131:5: ( '.' ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )+ ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:131:7: '.' ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )+ + { + match('.'); + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:131:10: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )+ + int cnt8=0; + loop8: + do { + int alt8=2; + int LA8_0 = input.LA(1); + + if ( ((LA8_0>='0' && LA8_0<='9')||(LA8_0>='A' && LA8_0<='Z')||(LA8_0>='a' && LA8_0<='z')) ) { + alt8=1; + } + + + switch (alt8) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g: + { + if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||(input.LA(1)>='a' && input.LA(1)<='z') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + + default : + if ( cnt8 >= 1 ) break loop8; + EarlyExitException eee = + new EarlyExitException(8, input); + throw eee; + } + cnt8++; + } while (true); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "EXT" + + // $ANTLR start "RETVAL" + public final void mRETVAL() throws RecognitionException { + try { + int _type = RETVAL; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:133:8: ( NESTED_RETVAL ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:133:10: NESTED_RETVAL + { + mNESTED_RETVAL(); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "RETVAL" + + // $ANTLR start "NESTED_RETVAL" + public final void mNESTED_RETVAL() throws RecognitionException { + try { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:137:15: ( '[' ( options {greedy=false; } : NESTED_RETVAL | . )* ']' ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:138:2: '[' ( options {greedy=false; } : NESTED_RETVAL | . )* ']' + { + match('['); + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:139:2: ( options {greedy=false; } : NESTED_RETVAL | . )* + loop9: + do { + int alt9=3; + int LA9_0 = input.LA(1); + + if ( (LA9_0==']') ) { + alt9=3; + } + else if ( (LA9_0=='[') ) { + alt9=1; + } + else if ( ((LA9_0>='\u0000' && LA9_0<='Z')||LA9_0=='\\'||(LA9_0>='^' && LA9_0<='\uFFFF')) ) { + alt9=2; + } + + + switch (alt9) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:140:4: NESTED_RETVAL + { + mNESTED_RETVAL(); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:141:4: . + { + matchAny(); + + } + break; + + default : + break loop9; + } + } while (true); + + match(']'); + + } + + } + finally { + } + } + // $ANTLR end "NESTED_RETVAL" + + // $ANTLR start "AST" + public final void mAST() throws RecognitionException { + try { + int _type = AST; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:146:5: ( NESTED_AST ( ( ' ' )? NESTED_AST )* ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:146:7: NESTED_AST ( ( ' ' )? NESTED_AST )* + { + mNESTED_AST(); + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:146:18: ( ( ' ' )? NESTED_AST )* + loop11: + do { + int alt11=2; + int LA11_0 = input.LA(1); + + if ( (LA11_0==' '||LA11_0=='(') ) { + alt11=1; + } + + + switch (alt11) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:146:19: ( ' ' )? NESTED_AST + { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:146:19: ( ' ' )? + int alt10=2; + int LA10_0 = input.LA(1); + + if ( (LA10_0==' ') ) { + alt10=1; + } + switch (alt10) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:146:19: ' ' + { + match(' '); + + } + break; + + } + + mNESTED_AST(); + + } + break; + + default : + break loop11; + } + } while (true); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "AST" + + // $ANTLR start "NESTED_AST" + public final void mNESTED_AST() throws RecognitionException { + try { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:149:12: ( '(' ( options {greedy=false; } : NESTED_AST | . )* ')' ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:150:2: '(' ( options {greedy=false; } : NESTED_AST | . )* ')' + { + match('('); + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:151:2: ( options {greedy=false; } : NESTED_AST | . )* + loop12: + do { + int alt12=3; + int LA12_0 = input.LA(1); + + if ( (LA12_0==')') ) { + alt12=3; + } + else if ( (LA12_0=='(') ) { + alt12=1; + } + else if ( ((LA12_0>='\u0000' && LA12_0<='\'')||(LA12_0>='*' && LA12_0<='\uFFFF')) ) { + alt12=2; + } + + + switch (alt12) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:152:4: NESTED_AST + { + mNESTED_AST(); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:153:4: . + { + matchAny(); + + } + break; + + default : + break loop12; + } + } while (true); + + match(')'); + + } + + } + finally { + } + } + // $ANTLR end "NESTED_AST" + + // $ANTLR start "ACTION" + public final void mACTION() throws RecognitionException { + try { + int _type = ACTION; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:159:2: ( NESTED_ACTION ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:159:4: NESTED_ACTION + { + mNESTED_ACTION(); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "ACTION" + + // $ANTLR start "NESTED_ACTION" + public final void mNESTED_ACTION() throws RecognitionException { + try { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:163:15: ( '{' ( options {greedy=false; k=3; } : NESTED_ACTION | STRING_LITERAL | CHAR_LITERAL | . )* '}' ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:164:2: '{' ( options {greedy=false; k=3; } : NESTED_ACTION | STRING_LITERAL | CHAR_LITERAL | . )* '}' + { + match('{'); + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:165:2: ( options {greedy=false; k=3; } : NESTED_ACTION | STRING_LITERAL | CHAR_LITERAL | . )* + loop13: + do { + int alt13=5; + alt13 = dfa13.predict(input); + switch (alt13) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:166:4: NESTED_ACTION + { + mNESTED_ACTION(); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:167:4: STRING_LITERAL + { + mSTRING_LITERAL(); + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:168:4: CHAR_LITERAL + { + mCHAR_LITERAL(); + + } + break; + case 4 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:169:4: . + { + matchAny(); + + } + break; + + default : + break loop13; + } + } while (true); + + match('}'); + + } + + } + finally { + } + } + // $ANTLR end "NESTED_ACTION" + + // $ANTLR start "CHAR_LITERAL" + public final void mCHAR_LITERAL() throws RecognitionException { + try { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:176:2: ( '\\'' ( ESC | ~ ( '\\'' | '\\\\' ) ) '\\'' ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:176:4: '\\'' ( ESC | ~ ( '\\'' | '\\\\' ) ) '\\'' + { + match('\''); + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:176:9: ( ESC | ~ ( '\\'' | '\\\\' ) ) + int alt14=2; + int LA14_0 = input.LA(1); + + if ( (LA14_0=='\\') ) { + alt14=1; + } + else if ( ((LA14_0>='\u0000' && LA14_0<='&')||(LA14_0>='(' && LA14_0<='[')||(LA14_0>=']' && LA14_0<='\uFFFF')) ) { + alt14=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 14, 0, input); + + throw nvae; + } + switch (alt14) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:176:11: ESC + { + mESC(); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:176:17: ~ ( '\\'' | '\\\\' ) + { + if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + + } + + match('\''); + + } + + } + finally { + } + } + // $ANTLR end "CHAR_LITERAL" + + // $ANTLR start "STRING_LITERAL" + public final void mSTRING_LITERAL() throws RecognitionException { + try { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:181:2: ( '\"' ( ESC | ~ ( '\\\\' | '\"' ) )* '\"' ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:181:4: '\"' ( ESC | ~ ( '\\\\' | '\"' ) )* '\"' + { + match('\"'); + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:181:8: ( ESC | ~ ( '\\\\' | '\"' ) )* + loop15: + do { + int alt15=3; + int LA15_0 = input.LA(1); + + if ( (LA15_0=='\\') ) { + alt15=1; + } + else if ( ((LA15_0>='\u0000' && LA15_0<='!')||(LA15_0>='#' && LA15_0<='[')||(LA15_0>=']' && LA15_0<='\uFFFF')) ) { + alt15=2; + } + + + switch (alt15) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:181:10: ESC + { + mESC(); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:181:16: ~ ( '\\\\' | '\"' ) + { + if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + + default : + break loop15; + } + } while (true); + + match('\"'); + + } + + } + finally { + } + } + // $ANTLR end "STRING_LITERAL" + + // $ANTLR start "ESC" + public final void mESC() throws RecognitionException { + try { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:185:5: ( '\\\\' ( 'n' | 'r' | 't' | 'b' | 'f' | '\"' | '\\'' | '\\\\' | '>' | 'u' XDIGIT XDIGIT XDIGIT XDIGIT | . ) ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:185:7: '\\\\' ( 'n' | 'r' | 't' | 'b' | 'f' | '\"' | '\\'' | '\\\\' | '>' | 'u' XDIGIT XDIGIT XDIGIT XDIGIT | . ) + { + match('\\'); + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:186:3: ( 'n' | 'r' | 't' | 'b' | 'f' | '\"' | '\\'' | '\\\\' | '>' | 'u' XDIGIT XDIGIT XDIGIT XDIGIT | . ) + int alt16=11; + alt16 = dfa16.predict(input); + switch (alt16) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:186:5: 'n' + { + match('n'); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:187:5: 'r' + { + match('r'); + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:188:5: 't' + { + match('t'); + + } + break; + case 4 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:189:5: 'b' + { + match('b'); + + } + break; + case 5 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:190:5: 'f' + { + match('f'); + + } + break; + case 6 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:191:5: '\"' + { + match('\"'); + + } + break; + case 7 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:192:5: '\\'' + { + match('\''); + + } + break; + case 8 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:193:5: '\\\\' + { + match('\\'); + + } + break; + case 9 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:194:5: '>' + { + match('>'); + + } + break; + case 10 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:195:5: 'u' XDIGIT XDIGIT XDIGIT XDIGIT + { + match('u'); + mXDIGIT(); + mXDIGIT(); + mXDIGIT(); + mXDIGIT(); + + } + break; + case 11 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:196:5: . + { + matchAny(); + + } + break; + + } + + + } + + } + finally { + } + } + // $ANTLR end "ESC" + + // $ANTLR start "XDIGIT" + public final void mXDIGIT() throws RecognitionException { + try { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:201:8: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g: + { + if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='F')||(input.LA(1)>='a' && input.LA(1)<='f') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + + } + finally { + } + } + // $ANTLR end "XDIGIT" + + // $ANTLR start "WS" + public final void mWS() throws RecognitionException { + try { + int _type = WS; + int _channel = DEFAULT_TOKEN_CHANNEL; + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:207:4: ( ( ' ' | '\\t' | ( '\\r' )? '\\n' )+ ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:207:6: ( ' ' | '\\t' | ( '\\r' )? '\\n' )+ + { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:207:6: ( ' ' | '\\t' | ( '\\r' )? '\\n' )+ + int cnt18=0; + loop18: + do { + int alt18=4; + switch ( input.LA(1) ) { + case ' ': + { + alt18=1; + } + break; + case '\t': + { + alt18=2; + } + break; + case '\n': + case '\r': + { + alt18=3; + } + break; + + } + + switch (alt18) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:207:8: ' ' + { + match(' '); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:208:5: '\\t' + { + match('\t'); + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:209:5: ( '\\r' )? '\\n' + { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:209:5: ( '\\r' )? + int alt17=2; + int LA17_0 = input.LA(1); + + if ( (LA17_0=='\r') ) { + alt17=1; + } + switch (alt17) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:209:5: '\\r' + { + match('\r'); + + } + break; + + } + + match('\n'); + + } + break; + + default : + if ( cnt18 >= 1 ) break loop18; + EarlyExitException eee = + new EarlyExitException(18, input); + throw eee; + } + cnt18++; + } while (true); + + _channel=HIDDEN; + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "WS" + + public void mTokens() throws RecognitionException { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:8: ( OK | FAIL | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | SL_COMMENT | ML_COMMENT | STRING | ML_STRING | TOKEN_REF | RULE_REF | EXT | RETVAL | AST | ACTION | WS ) + int alt19=20; + alt19 = dfa19.predict(input); + switch (alt19) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:10: OK + { + mOK(); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:13: FAIL + { + mFAIL(); + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:18: T__25 + { + mT__25(); + + } + break; + case 4 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:24: T__26 + { + mT__26(); + + } + break; + case 5 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:30: T__27 + { + mT__27(); + + } + break; + case 6 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:36: T__28 + { + mT__28(); + + } + break; + case 7 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:42: T__29 + { + mT__29(); + + } + break; + case 8 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:48: T__30 + { + mT__30(); + + } + break; + case 9 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:54: T__31 + { + mT__31(); + + } + break; + case 10 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:60: SL_COMMENT + { + mSL_COMMENT(); + + } + break; + case 11 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:71: ML_COMMENT + { + mML_COMMENT(); + + } + break; + case 12 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:82: STRING + { + mSTRING(); + + } + break; + case 13 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:89: ML_STRING + { + mML_STRING(); + + } + break; + case 14 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:99: TOKEN_REF + { + mTOKEN_REF(); + + } + break; + case 15 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:109: RULE_REF + { + mRULE_REF(); + + } + break; + case 16 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:118: EXT + { + mEXT(); + + } + break; + case 17 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:122: RETVAL + { + mRETVAL(); + + } + break; + case 18 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:129: AST + { + mAST(); + + } + break; + case 19 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:133: ACTION + { + mACTION(); + + } + break; + case 20 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:1:140: WS + { + mWS(); + + } + break; + + } + + } + + + protected DFA13 dfa13 = new DFA13(this); + protected DFA16 dfa16 = new DFA16(this); + protected DFA19 dfa19 = new DFA19(this); + static final String DFA13_eotS = + "\116\uffff"; + static final String DFA13_eofS = + "\116\uffff"; + static final String DFA13_minS = + "\1\0\2\uffff\2\0\2\uffff\1\0\1\uffff\3\0\1\uffff\2\0\1\uffff\2\0"+ + "\74\uffff"; + static final String DFA13_maxS = + "\1\uffff\2\uffff\2\uffff\2\uffff\1\uffff\1\uffff\3\uffff\1\uffff"+ + "\2\uffff\1\uffff\2\uffff\74\uffff"; + static final String DFA13_acceptS = + "\1\uffff\1\5\1\1\2\uffff\2\4\1\uffff\1\2\3\uffff\1\4\5\uffff\37"+ + "\2\1\3\4\uffff\1\3\5\uffff\16\3\4\uffff"; + static final String DFA13_specialS = + "\1\0\2\uffff\1\1\1\2\2\uffff\1\3\1\uffff\1\4\1\5\1\6\1\uffff\1\7"+ + "\1\10\1\uffff\1\11\1\12\74\uffff}>"; + static final String[] DFA13_transitionS = { + "\42\5\1\3\4\5\1\4\123\5\1\2\1\5\1\1\uff82\5", + "", + "", + "\42\13\1\10\4\13\1\11\64\13\1\12\36\13\1\7\1\13\1\6\uff82\13", + "\42\21\1\16\4\21\1\5\64\21\1\20\36\21\1\15\1\21\1\14\uff82"+ + "\21", + "", + "", + "\42\27\1\23\4\27\1\24\64\27\1\26\36\27\1\22\1\27\1\25\uff82"+ + "\27", + "", + "\42\34\1\33\4\34\1\35\64\34\1\30\36\34\1\32\1\34\1\31\uff82"+ + "\34", + "\42\52\1\40\4\52\1\41\26\52\1\50\35\52\1\47\5\52\1\45\3\52"+ + "\1\46\7\52\1\42\3\52\1\43\1\52\1\44\1\51\5\52\1\37\1\52\1\36"+ + "\uff82\52", + "\42\60\1\55\4\60\1\56\64\60\1\57\36\60\1\54\1\60\1\53\uff82"+ + "\60", + "", + "\47\5\1\61\uffd8\5", + "\47\5\1\66\uffd8\5", + "", + "\42\110\1\101\4\110\1\102\26\110\1\104\35\110\1\103\5\110\1"+ + "\77\3\110\1\100\7\110\1\74\3\110\1\75\1\110\1\76\1\105\5\110"+ + "\1\107\1\110\1\106\uff82\110", + "\47\5\1\111\uffd8\5", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + }; + + static final short[] DFA13_eot = DFA.unpackEncodedString(DFA13_eotS); + static final short[] DFA13_eof = DFA.unpackEncodedString(DFA13_eofS); + static final char[] DFA13_min = DFA.unpackEncodedStringToUnsignedChars(DFA13_minS); + static final char[] DFA13_max = DFA.unpackEncodedStringToUnsignedChars(DFA13_maxS); + static final short[] DFA13_accept = DFA.unpackEncodedString(DFA13_acceptS); + static final short[] DFA13_special = DFA.unpackEncodedString(DFA13_specialS); + static final short[][] DFA13_transition; + + static { + int numStates = DFA13_transitionS.length; + DFA13_transition = new short[numStates][]; + for (int i=0; i='\u0000' && LA13_0<='!')||(LA13_0>='#' && LA13_0<='&')||(LA13_0>='(' && LA13_0<='z')||LA13_0=='|'||(LA13_0>='~' && LA13_0<='\uFFFF')) ) {s = 5;} + + if ( s>=0 ) return s; + break; + case 1 : + int LA13_3 = input.LA(1); + + s = -1; + if ( (LA13_3=='}') ) {s = 6;} + + else if ( (LA13_3=='{') ) {s = 7;} + + else if ( (LA13_3=='\"') ) {s = 8;} + + else if ( (LA13_3=='\'') ) {s = 9;} + + else if ( (LA13_3=='\\') ) {s = 10;} + + else if ( ((LA13_3>='\u0000' && LA13_3<='!')||(LA13_3>='#' && LA13_3<='&')||(LA13_3>='(' && LA13_3<='[')||(LA13_3>=']' && LA13_3<='z')||LA13_3=='|'||(LA13_3>='~' && LA13_3<='\uFFFF')) ) {s = 11;} + + if ( s>=0 ) return s; + break; + case 2 : + int LA13_4 = input.LA(1); + + s = -1; + if ( (LA13_4=='}') ) {s = 12;} + + else if ( (LA13_4=='{') ) {s = 13;} + + else if ( (LA13_4=='\"') ) {s = 14;} + + else if ( (LA13_4=='\'') ) {s = 5;} + + else if ( (LA13_4=='\\') ) {s = 16;} + + else if ( ((LA13_4>='\u0000' && LA13_4<='!')||(LA13_4>='#' && LA13_4<='&')||(LA13_4>='(' && LA13_4<='[')||(LA13_4>=']' && LA13_4<='z')||LA13_4=='|'||(LA13_4>='~' && LA13_4<='\uFFFF')) ) {s = 17;} + + if ( s>=0 ) return s; + break; + case 3 : + int LA13_7 = input.LA(1); + + s = -1; + if ( (LA13_7=='{') ) {s = 18;} + + else if ( (LA13_7=='\"') ) {s = 19;} + + else if ( (LA13_7=='\'') ) {s = 20;} + + else if ( (LA13_7=='}') ) {s = 21;} + + else if ( (LA13_7=='\\') ) {s = 22;} + + else if ( ((LA13_7>='\u0000' && LA13_7<='!')||(LA13_7>='#' && LA13_7<='&')||(LA13_7>='(' && LA13_7<='[')||(LA13_7>=']' && LA13_7<='z')||LA13_7=='|'||(LA13_7>='~' && LA13_7<='\uFFFF')) ) {s = 23;} + + if ( s>=0 ) return s; + break; + case 4 : + int LA13_9 = input.LA(1); + + s = -1; + if ( (LA13_9=='\\') ) {s = 24;} + + else if ( (LA13_9=='}') ) {s = 25;} + + else if ( (LA13_9=='{') ) {s = 26;} + + else if ( (LA13_9=='\"') ) {s = 27;} + + else if ( ((LA13_9>='\u0000' && LA13_9<='!')||(LA13_9>='#' && LA13_9<='&')||(LA13_9>='(' && LA13_9<='[')||(LA13_9>=']' && LA13_9<='z')||LA13_9=='|'||(LA13_9>='~' && LA13_9<='\uFFFF')) ) {s = 28;} + + else if ( (LA13_9=='\'') ) {s = 29;} + + if ( s>=0 ) return s; + break; + case 5 : + int LA13_10 = input.LA(1); + + s = -1; + if ( (LA13_10=='}') ) {s = 30;} + + else if ( (LA13_10=='{') ) {s = 31;} + + else if ( (LA13_10=='\"') ) {s = 32;} + + else if ( (LA13_10=='\'') ) {s = 33;} + + else if ( (LA13_10=='n') ) {s = 34;} + + else if ( (LA13_10=='r') ) {s = 35;} + + else if ( (LA13_10=='t') ) {s = 36;} + + else if ( (LA13_10=='b') ) {s = 37;} + + else if ( (LA13_10=='f') ) {s = 38;} + + else if ( (LA13_10=='\\') ) {s = 39;} + + else if ( (LA13_10=='>') ) {s = 40;} + + else if ( (LA13_10=='u') ) {s = 41;} + + else if ( ((LA13_10>='\u0000' && LA13_10<='!')||(LA13_10>='#' && LA13_10<='&')||(LA13_10>='(' && LA13_10<='=')||(LA13_10>='?' && LA13_10<='[')||(LA13_10>=']' && LA13_10<='a')||(LA13_10>='c' && LA13_10<='e')||(LA13_10>='g' && LA13_10<='m')||(LA13_10>='o' && LA13_10<='q')||LA13_10=='s'||(LA13_10>='v' && LA13_10<='z')||LA13_10=='|'||(LA13_10>='~' && LA13_10<='\uFFFF')) ) {s = 42;} + + if ( s>=0 ) return s; + break; + case 6 : + int LA13_11 = input.LA(1); + + s = -1; + if ( (LA13_11=='}') ) {s = 43;} + + else if ( (LA13_11=='{') ) {s = 44;} + + else if ( (LA13_11=='\"') ) {s = 45;} + + else if ( (LA13_11=='\'') ) {s = 46;} + + else if ( (LA13_11=='\\') ) {s = 47;} + + else if ( ((LA13_11>='\u0000' && LA13_11<='!')||(LA13_11>='#' && LA13_11<='&')||(LA13_11>='(' && LA13_11<='[')||(LA13_11>=']' && LA13_11<='z')||LA13_11=='|'||(LA13_11>='~' && LA13_11<='\uFFFF')) ) {s = 48;} + + if ( s>=0 ) return s; + break; + case 7 : + int LA13_13 = input.LA(1); + + s = -1; + if ( (LA13_13=='\'') ) {s = 49;} + + else if ( ((LA13_13>='\u0000' && LA13_13<='&')||(LA13_13>='(' && LA13_13<='\uFFFF')) ) {s = 5;} + + if ( s>=0 ) return s; + break; + case 8 : + int LA13_14 = input.LA(1); + + s = -1; + if ( (LA13_14=='\'') ) {s = 54;} + + else if ( ((LA13_14>='\u0000' && LA13_14<='&')||(LA13_14>='(' && LA13_14<='\uFFFF')) ) {s = 5;} + + if ( s>=0 ) return s; + break; + case 9 : + int LA13_16 = input.LA(1); + + s = -1; + if ( (LA13_16=='n') ) {s = 60;} + + else if ( (LA13_16=='r') ) {s = 61;} + + else if ( (LA13_16=='t') ) {s = 62;} + + else if ( (LA13_16=='b') ) {s = 63;} + + else if ( (LA13_16=='f') ) {s = 64;} + + else if ( (LA13_16=='\"') ) {s = 65;} + + else if ( (LA13_16=='\'') ) {s = 66;} + + else if ( (LA13_16=='\\') ) {s = 67;} + + else if ( (LA13_16=='>') ) {s = 68;} + + else if ( (LA13_16=='u') ) {s = 69;} + + else if ( (LA13_16=='}') ) {s = 70;} + + else if ( (LA13_16=='{') ) {s = 71;} + + else if ( ((LA13_16>='\u0000' && LA13_16<='!')||(LA13_16>='#' && LA13_16<='&')||(LA13_16>='(' && LA13_16<='=')||(LA13_16>='?' && LA13_16<='[')||(LA13_16>=']' && LA13_16<='a')||(LA13_16>='c' && LA13_16<='e')||(LA13_16>='g' && LA13_16<='m')||(LA13_16>='o' && LA13_16<='q')||LA13_16=='s'||(LA13_16>='v' && LA13_16<='z')||LA13_16=='|'||(LA13_16>='~' && LA13_16<='\uFFFF')) ) {s = 72;} + + if ( s>=0 ) return s; + break; + case 10 : + int LA13_17 = input.LA(1); + + s = -1; + if ( (LA13_17=='\'') ) {s = 73;} + + else if ( ((LA13_17>='\u0000' && LA13_17<='&')||(LA13_17>='(' && LA13_17<='\uFFFF')) ) {s = 5;} + + if ( s>=0 ) return s; + break; + } + NoViableAltException nvae = + new NoViableAltException(getDescription(), 13, _s, input); + error(nvae); + throw nvae; + } + } + static final String DFA16_eotS = + "\12\uffff\1\13\2\uffff"; + static final String DFA16_eofS = + "\15\uffff"; + static final String DFA16_minS = + "\1\0\11\uffff\1\60\2\uffff"; + static final String DFA16_maxS = + "\1\uffff\11\uffff\1\146\2\uffff"; + static final String DFA16_acceptS = + "\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\uffff\1\13\1\12"; + static final String DFA16_specialS = + "\1\0\14\uffff}>"; + static final String[] DFA16_transitionS = { + "\42\13\1\6\4\13\1\7\26\13\1\11\35\13\1\10\5\13\1\4\3\13\1\5"+ + "\7\13\1\1\3\13\1\2\1\13\1\3\1\12\uff8a\13", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\12\14\7\uffff\6\14\32\uffff\6\14", + "", + "" + }; + + static final short[] DFA16_eot = DFA.unpackEncodedString(DFA16_eotS); + static final short[] DFA16_eof = DFA.unpackEncodedString(DFA16_eofS); + static final char[] DFA16_min = DFA.unpackEncodedStringToUnsignedChars(DFA16_minS); + static final char[] DFA16_max = DFA.unpackEncodedStringToUnsignedChars(DFA16_maxS); + static final short[] DFA16_accept = DFA.unpackEncodedString(DFA16_acceptS); + static final short[] DFA16_special = DFA.unpackEncodedString(DFA16_specialS); + static final short[][] DFA16_transition; + + static { + int numStates = DFA16_transitionS.length; + DFA16_transition = new short[numStates][]; + for (int i=0; i' | 'u' XDIGIT XDIGIT XDIGIT XDIGIT | . )"; + } + public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { + IntStream input = _input; + int _s = s; + switch ( s ) { + case 0 : + int LA16_0 = input.LA(1); + + s = -1; + if ( (LA16_0=='n') ) {s = 1;} + + else if ( (LA16_0=='r') ) {s = 2;} + + else if ( (LA16_0=='t') ) {s = 3;} + + else if ( (LA16_0=='b') ) {s = 4;} + + else if ( (LA16_0=='f') ) {s = 5;} + + else if ( (LA16_0=='\"') ) {s = 6;} + + else if ( (LA16_0=='\'') ) {s = 7;} + + else if ( (LA16_0=='\\') ) {s = 8;} + + else if ( (LA16_0=='>') ) {s = 9;} + + else if ( (LA16_0=='u') ) {s = 10;} + + else if ( ((LA16_0>='\u0000' && LA16_0<='!')||(LA16_0>='#' && LA16_0<='&')||(LA16_0>='(' && LA16_0<='=')||(LA16_0>='?' && LA16_0<='[')||(LA16_0>=']' && LA16_0<='a')||(LA16_0>='c' && LA16_0<='e')||(LA16_0>='g' && LA16_0<='m')||(LA16_0>='o' && LA16_0<='q')||LA16_0=='s'||(LA16_0>='v' && LA16_0<='\uFFFF')) ) {s = 11;} + + if ( s>=0 ) return s; + break; + } + NoViableAltException nvae = + new NoViableAltException(getDescription(), 16, _s, input); + error(nvae); + throw nvae; + } + } + static final String DFA19_eotS = + "\1\uffff\2\15\2\16\3\uffff\1\16\13\uffff\1\33\1\15\3\16\3\uffff"+ + "\1\15\3\16\1\44\3\16\1\uffff\1\50\1\51\1\16\2\uffff\1\16\1\54\1"+ + "\uffff"; + static final String DFA19_eofS = + "\55\uffff"; + static final String DFA19_minS = + "\1\11\1\113\1\101\1\165\1\141\3\uffff\1\145\1\uffff\1\52\11\uffff"+ + "\1\60\1\111\1\156\1\154\1\164\3\uffff\1\114\1\151\1\153\1\165\1"+ + "\60\1\164\1\163\1\162\1\uffff\2\60\1\156\2\uffff\1\163\1\60\1\uffff"; + static final String DFA19_maxS = + "\1\173\1\113\1\101\1\165\1\141\3\uffff\1\145\1\uffff\1\57\11\uffff"+ + "\1\172\1\111\1\156\1\154\1\164\3\uffff\1\114\1\151\1\153\1\165\1"+ + "\172\1\164\1\163\1\162\1\uffff\2\172\1\156\2\uffff\1\163\1\172\1"+ + "\uffff"; + static final String DFA19_acceptS = + "\5\uffff\1\5\1\6\1\7\1\uffff\1\11\1\uffff\1\14\1\15\1\16\1\17\1"+ + "\20\1\21\1\22\1\23\1\24\5\uffff\1\12\1\13\1\1\10\uffff\1\2\3\uffff"+ + "\1\3\1\4\2\uffff\1\10"; + static final String DFA19_specialS = + "\55\uffff}>"; + static final String[] DFA19_transitionS = { + "\2\23\2\uffff\1\23\22\uffff\1\23\1\uffff\1\13\5\uffff\1\21\4"+ + "\uffff\1\11\1\17\1\12\12\uffff\1\7\1\5\1\14\3\uffff\1\6\5\15"+ + "\1\2\10\15\1\1\13\15\1\20\5\uffff\6\16\1\3\12\16\1\10\4\16\1"+ + "\4\3\16\1\22", + "\1\24", + "\1\25", + "\1\26", + "\1\27", + "", + "", + "", + "\1\30", + "", + "\1\32\4\uffff\1\31", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\12\15\7\uffff\32\15\4\uffff\1\15\1\uffff\32\15", + "\1\34", + "\1\35", + "\1\36", + "\1\37", + "", + "", + "", + "\1\40", + "\1\41", + "\1\42", + "\1\43", + "\12\15\7\uffff\32\15\4\uffff\1\15\1\uffff\32\15", + "\1\45", + "\1\46", + "\1\47", + "", + "\12\16\7\uffff\32\16\4\uffff\1\16\1\uffff\32\16", + "\12\16\7\uffff\32\16\4\uffff\1\16\1\uffff\32\16", + "\1\52", + "", + "", + "\1\53", + "\12\16\7\uffff\32\16\4\uffff\1\16\1\uffff\32\16", + "" + }; + + static final short[] DFA19_eot = DFA.unpackEncodedString(DFA19_eotS); + static final short[] DFA19_eof = DFA.unpackEncodedString(DFA19_eofS); + static final char[] DFA19_min = DFA.unpackEncodedStringToUnsignedChars(DFA19_minS); + static final char[] DFA19_max = DFA.unpackEncodedStringToUnsignedChars(DFA19_maxS); + static final short[] DFA19_accept = DFA.unpackEncodedString(DFA19_acceptS); + static final short[] DFA19_special = DFA.unpackEncodedString(DFA19_specialS); + static final short[][] DFA19_transition; + + static { + int numStates = DFA19_transitionS.length; + DFA19_transition = new short[numStates][]; + for (int i=0; i", "", "", "", "OK", "FAIL", "DOC_COMMENT", "ACTION", "RULE_REF", "TOKEN_REF", "RETVAL", "AST", "STRING", "ML_STRING", "EXT", "SL_COMMENT", "ML_COMMENT", "ESC", "NESTED_RETVAL", "NESTED_AST", "NESTED_ACTION", "STRING_LITERAL", "CHAR_LITERAL", "XDIGIT", "WS", "'gunit'", "'walks'", "';'", "'@header'", "':'", "'returns'", "'->'" + }; + public static final int RETVAL=10; + public static final int NESTED_ACTION=20; + public static final int AST=11; + public static final int T__28=28; + public static final int EXT=14; + public static final int FAIL=5; + public static final int WS=24; + public static final int STRING=12; + public static final int OK=4; + public static final int ACTION=7; + public static final int TOKEN_REF=9; + public static final int ESC=17; + public static final int XDIGIT=23; + public static final int RULE_REF=8; + public static final int T__29=29; + public static final int NESTED_AST=19; + public static final int T__30=30; + public static final int CHAR_LITERAL=22; + public static final int T__31=31; + public static final int EOF=-1; + public static final int STRING_LITERAL=21; + public static final int T__27=27; + public static final int T__26=26; + public static final int ML_STRING=13; + public static final int T__25=25; + public static final int ML_COMMENT=16; + public static final int SL_COMMENT=15; + public static final int DOC_COMMENT=6; + public static final int NESTED_RETVAL=18; + + // delegates + // delegators + + + public StGUnitParser(TokenStream input) { + this(input, new RecognizerSharedState()); + } + public StGUnitParser(TokenStream input, RecognizerSharedState state) { + super(input, state); + + } + + + public String[] getTokenNames() { return StGUnitParser.tokenNames; } + public String getGrammarFileName() { return "/Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g"; } + + + public Translator.TestSuiteAdapter adapter ;; + + + + // $ANTLR start "gUnitDef" + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:51:1: gUnitDef : 'gunit' name= id ( 'walks' id )? ';' ( header )? ( suite )* ; + public final void gUnitDef() throws RecognitionException { + StGUnitParser.id_return name = null; + + + try { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:52:2: ( 'gunit' name= id ( 'walks' id )? ';' ( header )? ( suite )* ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:52:4: 'gunit' name= id ( 'walks' id )? ';' ( header )? ( suite )* + { + match(input,25,FOLLOW_25_in_gUnitDef68); + pushFollow(FOLLOW_id_in_gUnitDef72); + name=id(); + + state._fsp--; + + adapter.setGrammarName((name!=null?input.toString(name.start,name.stop):null)); + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:53:6: ( 'walks' id )? + int alt1=2; + int LA1_0 = input.LA(1); + + if ( (LA1_0==26) ) { + alt1=1; + } + switch (alt1) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:53:7: 'walks' id + { + match(input,26,FOLLOW_26_in_gUnitDef82); + pushFollow(FOLLOW_id_in_gUnitDef84); + id(); + + state._fsp--; + + + } + break; + + } + + match(input,27,FOLLOW_27_in_gUnitDef88); + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:54:3: ( header )? + int alt2=2; + int LA2_0 = input.LA(1); + + if ( (LA2_0==28) ) { + alt2=1; + } + switch (alt2) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:54:3: header + { + pushFollow(FOLLOW_header_in_gUnitDef93); + header(); + + state._fsp--; + + + } + break; + + } + + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:54:11: ( suite )* + loop3: + do { + int alt3=2; + int LA3_0 = input.LA(1); + + if ( ((LA3_0>=RULE_REF && LA3_0<=TOKEN_REF)) ) { + alt3=1; + } + + + switch (alt3) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:54:11: suite + { + pushFollow(FOLLOW_suite_in_gUnitDef96); + suite(); + + state._fsp--; + + + } + break; + + default : + break loop3; + } + } while (true); + + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + } + return ; + } + // $ANTLR end "gUnitDef" + + + // $ANTLR start "header" + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:57:1: header : '@header' ACTION ; + public final void header() throws RecognitionException { + try { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:58:2: ( '@header' ACTION ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:58:4: '@header' ACTION + { + match(input,28,FOLLOW_28_in_header108); + match(input,ACTION,FOLLOW_ACTION_in_header110); + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + } + return ; + } + // $ANTLR end "header" + + + // $ANTLR start "suite" + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:61:1: suite : (parserRule= RULE_REF ( 'walks' RULE_REF )? | lexerRule= TOKEN_REF ) ':' ( test )+ ; + public final void suite() throws RecognitionException { + Token parserRule=null; + Token lexerRule=null; + + try { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:62:2: ( (parserRule= RULE_REF ( 'walks' RULE_REF )? | lexerRule= TOKEN_REF ) ':' ( test )+ ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:62:4: (parserRule= RULE_REF ( 'walks' RULE_REF )? | lexerRule= TOKEN_REF ) ':' ( test )+ + { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:62:4: (parserRule= RULE_REF ( 'walks' RULE_REF )? | lexerRule= TOKEN_REF ) + int alt5=2; + int LA5_0 = input.LA(1); + + if ( (LA5_0==RULE_REF) ) { + alt5=1; + } + else if ( (LA5_0==TOKEN_REF) ) { + alt5=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 5, 0, input); + + throw nvae; + } + switch (alt5) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:62:6: parserRule= RULE_REF ( 'walks' RULE_REF )? + { + parserRule=(Token)match(input,RULE_REF,FOLLOW_RULE_REF_in_suite127); + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:62:26: ( 'walks' RULE_REF )? + int alt4=2; + int LA4_0 = input.LA(1); + + if ( (LA4_0==26) ) { + alt4=1; + } + switch (alt4) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:62:27: 'walks' RULE_REF + { + match(input,26,FOLLOW_26_in_suite130); + match(input,RULE_REF,FOLLOW_RULE_REF_in_suite132); + + } + break; + + } + + adapter.startRule((parserRule!=null?parserRule.getText():null)); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:64:5: lexerRule= TOKEN_REF + { + lexerRule=(Token)match(input,TOKEN_REF,FOLLOW_TOKEN_REF_in_suite154); + adapter.startRule((lexerRule!=null?lexerRule.getText():null)); + + } + break; + + } + + match(input,29,FOLLOW_29_in_suite168); + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:68:3: ( test )+ + int cnt6=0; + loop6: + do { + int alt6=2; + switch ( input.LA(1) ) { + case RULE_REF: + { + int LA6_2 = input.LA(2); + + if ( ((LA6_2>=OK && LA6_2<=FAIL)||LA6_2==EXT||(LA6_2>=30 && LA6_2<=31)) ) { + alt6=1; + } + + + } + break; + case TOKEN_REF: + { + int LA6_3 = input.LA(2); + + if ( ((LA6_3>=OK && LA6_3<=FAIL)||LA6_3==EXT||(LA6_3>=30 && LA6_3<=31)) ) { + alt6=1; + } + + + } + break; + case STRING: + case ML_STRING: + { + alt6=1; + } + break; + + } + + switch (alt6) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:68:3: test + { + pushFollow(FOLLOW_test_in_suite172); + test(); + + state._fsp--; + + + } + break; + + default : + if ( cnt6 >= 1 ) break loop6; + EarlyExitException eee = + new EarlyExitException(6, input); + throw eee; + } + cnt6++; + } while (true); + + adapter.endRule(); + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + } + return ; + } + // $ANTLR end "suite" + + + // $ANTLR start "test" + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:72:1: test : input expect ; + public final void test() throws RecognitionException { + ITestCaseInput input1 = null; + + ITestCaseOutput expect2 = null; + + + try { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:73:2: ( input expect ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:73:4: input expect + { + pushFollow(FOLLOW_input_in_test188); + input1=input(); + + state._fsp--; + + pushFollow(FOLLOW_expect_in_test190); + expect2=expect(); + + state._fsp--; + + adapter.addTestCase(input1, expect2); + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + } + return ; + } + // $ANTLR end "test" + + + // $ANTLR start "expect" + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:77:1: expect returns [ITestCaseOutput out] : ( OK | FAIL | 'returns' RETVAL | '->' output | '->' AST ); + public final ITestCaseOutput expect() throws RecognitionException { + ITestCaseOutput out = null; + + Token RETVAL3=null; + Token AST5=null; + StGUnitParser.output_return output4 = null; + + + try { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:78:2: ( OK | FAIL | 'returns' RETVAL | '->' output | '->' AST ) + int alt7=5; + switch ( input.LA(1) ) { + case OK: + { + alt7=1; + } + break; + case FAIL: + { + alt7=2; + } + break; + case 30: + { + alt7=3; + } + break; + case 31: + { + int LA7_4 = input.LA(2); + + if ( (LA7_4==AST) ) { + alt7=5; + } + else if ( (LA7_4==ACTION||(LA7_4>=STRING && LA7_4<=ML_STRING)) ) { + alt7=4; + } + else { + NoViableAltException nvae = + new NoViableAltException("", 7, 4, input); + + throw nvae; + } + } + break; + default: + NoViableAltException nvae = + new NoViableAltException("", 7, 0, input); + + throw nvae; + } + + switch (alt7) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:78:4: OK + { + match(input,OK,FOLLOW_OK_in_expect210); + out = adapter.createBoolOutput(true); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:79:4: FAIL + { + match(input,FAIL,FOLLOW_FAIL_in_expect219); + out = adapter.createBoolOutput(false); + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:80:4: 'returns' RETVAL + { + match(input,30,FOLLOW_30_in_expect227); + RETVAL3=(Token)match(input,RETVAL,FOLLOW_RETVAL_in_expect229); + out = adapter.createReturnOutput((RETVAL3!=null?RETVAL3.getText():null)); + + } + break; + case 4 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:81:4: '->' output + { + match(input,31,FOLLOW_31_in_expect236); + pushFollow(FOLLOW_output_in_expect238); + output4=output(); + + state._fsp--; + + out = adapter.createStdOutput((output4!=null?input.toString(output4.start,output4.stop):null)); + + } + break; + case 5 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:82:4: '->' AST + { + match(input,31,FOLLOW_31_in_expect245); + AST5=(Token)match(input,AST,FOLLOW_AST_in_expect247); + out = adapter.createAstOutput((AST5!=null?AST5.getText():null)); + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + } + return out; + } + // $ANTLR end "expect" + + + // $ANTLR start "input" + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:85:1: input returns [ITestCaseInput in] : ( STRING | ML_STRING | fileInput ); + public final ITestCaseInput input() throws RecognitionException { + ITestCaseInput in = null; + + Token STRING6=null; + Token ML_STRING7=null; + String fileInput8 = null; + + + try { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:86:2: ( STRING | ML_STRING | fileInput ) + int alt8=3; + switch ( input.LA(1) ) { + case STRING: + { + alt8=1; + } + break; + case ML_STRING: + { + alt8=2; + } + break; + case RULE_REF: + case TOKEN_REF: + { + alt8=3; + } + break; + default: + NoViableAltException nvae = + new NoViableAltException("", 8, 0, input); + + throw nvae; + } + + switch (alt8) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:86:4: STRING + { + STRING6=(Token)match(input,STRING,FOLLOW_STRING_in_input264); + in = adapter.createStringInput((STRING6!=null?STRING6.getText():null)); + + } + break; + case 2 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:87:4: ML_STRING + { + ML_STRING7=(Token)match(input,ML_STRING,FOLLOW_ML_STRING_in_input273); + in = adapter.createMultiInput((ML_STRING7!=null?ML_STRING7.getText():null)); + + } + break; + case 3 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:88:4: fileInput + { + pushFollow(FOLLOW_fileInput_in_input280); + fileInput8=fileInput(); + + state._fsp--; + + in = adapter.createFileInput(fileInput8); + + } + break; + + } + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + } + return in; + } + // $ANTLR end "input" + + public static class output_return extends ParserRuleReturnScope { + }; + + // $ANTLR start "output" + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:91:1: output : ( STRING | ML_STRING | ACTION ); + public final StGUnitParser.output_return output() throws RecognitionException { + StGUnitParser.output_return retval = new StGUnitParser.output_return(); + retval.start = input.LT(1); + + try { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:92:2: ( STRING | ML_STRING | ACTION ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g: + { + if ( input.LA(1)==ACTION||(input.LA(1)>=STRING && input.LA(1)<=ML_STRING) ) { + input.consume(); + state.errorRecovery=false; + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + throw mse; + } + + + } + + retval.stop = input.LT(-1); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + } + return retval; + } + // $ANTLR end "output" + + + // $ANTLR start "fileInput" + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:97:1: fileInput returns [String path] : id ( EXT )? ; + public final String fileInput() throws RecognitionException { + String path = null; + + Token EXT10=null; + StGUnitParser.id_return id9 = null; + + + try { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:98:2: ( id ( EXT )? ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:98:4: id ( EXT )? + { + pushFollow(FOLLOW_id_in_fileInput319); + id9=id(); + + state._fsp--; + + path = (id9!=null?input.toString(id9.start,id9.stop):null); + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:98:27: ( EXT )? + int alt9=2; + int LA9_0 = input.LA(1); + + if ( (LA9_0==EXT) ) { + alt9=1; + } + switch (alt9) { + case 1 : + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:98:28: EXT + { + EXT10=(Token)match(input,EXT,FOLLOW_EXT_in_fileInput324); + path += (EXT10!=null?EXT10.getText():null); + + } + break; + + } + + + } + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + } + return path; + } + // $ANTLR end "fileInput" + + public static class id_return extends ParserRuleReturnScope { + }; + + // $ANTLR start "id" + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:101:1: id : ( TOKEN_REF | RULE_REF ); + public final StGUnitParser.id_return id() throws RecognitionException { + StGUnitParser.id_return retval = new StGUnitParser.id_return(); + retval.start = input.LT(1); + + try { + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g:101:5: ( TOKEN_REF | RULE_REF ) + // /Users/scai/NetBeansProjects/gUnitEditor/src/org/antlr/gunit/swingui/StGUnit.g: + { + if ( (input.LA(1)>=RULE_REF && input.LA(1)<=TOKEN_REF) ) { + input.consume(); + state.errorRecovery=false; + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + throw mse; + } + + + } + + retval.stop = input.LT(-1); + + } + catch (RecognitionException re) { + reportError(re); + recover(input,re); + } + finally { + } + return retval; + } + // $ANTLR end "id" + + // Delegated rules + + + + + public static final BitSet FOLLOW_25_in_gUnitDef68 = new BitSet(new long[]{0x0000000000000300L}); + public static final BitSet FOLLOW_id_in_gUnitDef72 = new BitSet(new long[]{0x000000000C000000L}); + public static final BitSet FOLLOW_26_in_gUnitDef82 = new BitSet(new long[]{0x0000000000000300L}); + public static final BitSet FOLLOW_id_in_gUnitDef84 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_27_in_gUnitDef88 = new BitSet(new long[]{0x0000000010000302L}); + public static final BitSet FOLLOW_header_in_gUnitDef93 = new BitSet(new long[]{0x0000000000000302L}); + public static final BitSet FOLLOW_suite_in_gUnitDef96 = new BitSet(new long[]{0x0000000000000302L}); + public static final BitSet FOLLOW_28_in_header108 = new BitSet(new long[]{0x0000000000000080L}); + public static final BitSet FOLLOW_ACTION_in_header110 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_RULE_REF_in_suite127 = new BitSet(new long[]{0x0000000024000000L}); + public static final BitSet FOLLOW_26_in_suite130 = new BitSet(new long[]{0x0000000000000100L}); + public static final BitSet FOLLOW_RULE_REF_in_suite132 = new BitSet(new long[]{0x0000000020000000L}); + public static final BitSet FOLLOW_TOKEN_REF_in_suite154 = new BitSet(new long[]{0x0000000020000000L}); + public static final BitSet FOLLOW_29_in_suite168 = new BitSet(new long[]{0x0000000000003300L}); + public static final BitSet FOLLOW_test_in_suite172 = new BitSet(new long[]{0x0000000000003302L}); + public static final BitSet FOLLOW_input_in_test188 = new BitSet(new long[]{0x00000000C0000030L}); + public static final BitSet FOLLOW_expect_in_test190 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_OK_in_expect210 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_FAIL_in_expect219 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_30_in_expect227 = new BitSet(new long[]{0x0000000000000400L}); + public static final BitSet FOLLOW_RETVAL_in_expect229 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_31_in_expect236 = new BitSet(new long[]{0x0000000000003080L}); + public static final BitSet FOLLOW_output_in_expect238 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_31_in_expect245 = new BitSet(new long[]{0x0000000000000800L}); + public static final BitSet FOLLOW_AST_in_expect247 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_STRING_in_input264 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ML_STRING_in_input273 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_fileInput_in_input280 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_set_in_output0 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_id_in_fileInput319 = new BitSet(new long[]{0x0000000000004002L}); + public static final BitSet FOLLOW_EXT_in_fileInput324 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_set_in_id0 = new BitSet(new long[]{0x0000000000000002L}); + +} \ No newline at end of file diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/runner/NotifiedTestExecuter.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/runner/NotifiedTestExecuter.java new file mode 100644 index 0000000..8cba661 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/runner/NotifiedTestExecuter.java @@ -0,0 +1,44 @@ +package org.antlr.gunit.swingui.runner; + +import org.antlr.gunit.*; +import org.antlr.gunit.swingui.model.*; + +/** + * + * @author scai + */ +public class NotifiedTestExecuter extends gUnitExecutor { + + private TestSuite testSuite ; + + public NotifiedTestExecuter(GrammarInfo grammarInfo, ClassLoader loader, String testsuiteDir, TestSuite suite) { + super(grammarInfo, loader, testsuiteDir); + testSuite = suite; + } + + @Override + public void onFail(ITestCase failTest) { + if(failTest == null) throw new IllegalArgumentException("Null fail test"); + + final String ruleName = failTest.getTestedRuleName(); + if(ruleName == null) throw new NullPointerException("Null rule name"); + + final Rule rule = testSuite.getRule(ruleName); + final TestCase failCase = (TestCase) rule.getElementAt(failTest.getTestCaseIndex()); + failCase.setPass(false); + //System.out.println(String.format("[FAIL] %s (%d) ", failTest.getTestedRuleName(), failTest.getTestCaseIndex())); + } + + @Override + public void onPass(ITestCase passTest) { + if(passTest == null) throw new IllegalArgumentException("Null pass test"); + + final String ruleName = passTest.getTestedRuleName(); + if(ruleName == null) throw new NullPointerException("Null rule name"); + + final Rule rule = testSuite.getRule(ruleName); + final TestCase passCase = (TestCase) rule.getElementAt(passTest.getTestCaseIndex()); + passCase.setPass(true); + //System.out.println(String.format("[PASS] %s (%d) ", passTest.getTestedRuleName(), passTest.getTestCaseIndex())); + } +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/runner/ParserLoader.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/runner/ParserLoader.java new file mode 100644 index 0000000..8c55566 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/runner/ParserLoader.java @@ -0,0 +1,79 @@ +package org.antlr.gunit.swingui.runner; + +import java.io.*; + +public class ParserLoader extends ClassLoader { + + private String ParserClassFile; + private String LexerClassFile; + private String ParserClassName; + private String LexerClassName; + + private byte[] parserBytes = null; + private byte[] lexerBytes = null; + + private Class ParserClass = null; + private Class LexerClass = null; + + public ParserLoader(String grammarName, String classDir) { + ParserClassName = grammarName + "Parser"; + LexerClassName = grammarName + "Lexer"; + ParserClassFile = classDir + File.separator + ParserClassName + ".class"; + LexerClassFile = classDir + File.separator + LexerClassName + ".class"; + + prepareClasses(); + } + + private void prepareClasses() { + try { + final InputStream inLexer = new FileInputStream(LexerClassFile); + lexerBytes = new byte[inLexer.available()]; + inLexer.read(lexerBytes); + inLexer.close(); + + final InputStream inParser = new FileInputStream(ParserClassFile); + parserBytes = new byte[inParser.available()]; + inParser.read(parserBytes); + inParser.close(); + } catch (Exception e) { + e.printStackTrace(); + throw new Error(e); + } + } + + @Override + public synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException { + + if(name.endsWith(LexerClassName)) { + + // load lexer class + + if(LexerClass != null) return LexerClass; + + LexerClass = defineClass(null, lexerBytes, 0, lexerBytes.length); + resolveClass(LexerClass); + return LexerClass; + + } else if(name.endsWith(ParserClassName)) { + + // load parser class + + if(ParserClass != null) return ParserClass; + + ParserClass = defineClass(null, parserBytes, 0, parserBytes.length); + resolveClass(ParserClass); + return ParserClass; + + } else { + + // load system class + + return findSystemClass(name); + + } + } + + private String stripPackage(String className) { + return className.substring(className.lastIndexOf("/")); + } +} diff --git a/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/runner/gUnitAdapter.java b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/runner/gUnitAdapter.java new file mode 100644 index 0000000..e9b283f --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/java/org/antlr/gunit/swingui/runner/gUnitAdapter.java @@ -0,0 +1,53 @@ +/** + * + */ +package org.antlr.gunit.swingui.runner; + +import java.io.File; +import org.antlr.runtime.*; +import org.antlr.runtime.CharStream; +import org.antlr.gunit.*; +import org.antlr.gunit.swingui.model.TestSuite; + +/** + * Adapter between gUnitEditor Swing GUI and gUnit command-line tool. + * @author scai + */ +public class gUnitAdapter { + + private ParserLoader loader = new ParserLoader( + "ini", "/Users/scai/Desktop/gUnitEditor/ini") ; + + + public void run(String testSuiteFileName, TestSuite testSuite) { + if (testSuiteFileName == null || testSuiteFileName.equals("")) + throw new IllegalArgumentException("Null test suite file name."); + + try { + + // Parse gUnit test suite file + final CharStream input = new ANTLRFileStream(testSuiteFileName); + final gUnitLexer lexer = new gUnitLexer(input); + final CommonTokenStream tokens = new CommonTokenStream(lexer); + final GrammarInfo grammarInfo = new GrammarInfo(); + final gUnitParser parser = new gUnitParser(tokens, grammarInfo); + parser.gUnitDef(); // parse gunit script and save elements to grammarInfo + + // Get test suite dir + final File f = new File(testSuiteFileName); + final String fullPath = f.getCanonicalPath(); + final String filename = f.getName(); + final String testsuiteDir = + fullPath.substring(0, fullPath.length()-filename.length()); + + // Execute test suite + final gUnitExecutor executer = new NotifiedTestExecuter( + grammarInfo, loader, testsuiteDir, testSuite); + executer.execTest(); + + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/antlr-3.1.3/gunit/src/main/resources/org/antlr/gunit/gUnitTestResult.stg b/antlr-3.1.3/gunit/src/main/resources/org/antlr/gunit/gUnitTestResult.stg new file mode 100644 index 0000000..40aec57 --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/resources/org/antlr/gunit/gUnitTestResult.stg @@ -0,0 +1,49 @@ +/* + [The "BSD licence"] + Copyright (c) 2007-2008 Leon, Jen-Yuan Su + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +group gUnitTestResult; + +testResult(title, num_of_test, num_of_failure, failure, has_invalid, num_of_invalid, invalid) ::= << +----------------------------------------------------------------------- + with <num_of_test> tests +----------------------------------------------------------------------- +<num_of_failure> failures found: +<failure:{<it.header> +expected: <it.expectedResult> +actual: <it.actualResult> + +}> +<if(has_invalid)> +<num_of_invalid> invalid inputs found: +<invalid:{<it.header> +invalid input: <it.actual> +}> +<endif> + +Tests run: <num_of_test>, Failures: <num_of_failure> + +>> diff --git a/antlr-3.1.3/gunit/src/main/resources/org/antlr/gunit/junit.stg b/antlr-3.1.3/gunit/src/main/resources/org/antlr/gunit/junit.stg new file mode 100644 index 0000000..d2c162a --- /dev/null +++ b/antlr-3.1.3/gunit/src/main/resources/org/antlr/gunit/junit.stg @@ -0,0 +1,83 @@ +/* + [The "BSD licence"] + Copyright (c) 2007-2008 Leon, Jen-Yuan Su + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +group junit; + +classHeader(header,junitFileName,hasPackage,packagePath,lexerPath,parserPath,treeParserPath,isTreeGrammar) ::= << +<header> + +import org.antlr.gunit.gUnitBaseTest; + +public class <junitFileName> extends gUnitBaseTest { + + public void setUp() { + <if(hasPackage)><\t><\t>this.packagePath = "<packagePath>";<endif> + this.lexerPath = "<lexerPath>"; + this.parserPath = "<parserPath>"; + <if(isTreeGrammar)><\t><\t>this.treeParserPath = "<treeParserPath>";<endif> + }<\n><\n> +>> + +testTreeRuleMethod(methodName,testTreeRuleName,testRuleName,testInput,isFile,tokenType,expecting) ::= << + public void <methodName>() throws Exception { + // test input: <testInput> + Object retval = execTreeParser(<testTreeRuleName>, <testRuleName>, <testInput>, <isFile>); + Object actual = examineExecResult(<tokenType>, retval); + Object expecting = <expecting>; + + assertEquals("testing rule "+<testTreeRuleName>, expecting, actual); + }<\n><\n> +>> + +testTreeRuleMethod2(methodName,testTreeRuleName,testRuleName,testInput,isFile,returnType,expecting) ::= << + public void <methodName>() throws Exception { + // test input: <testInput> + <returnType> retval = (<returnType>)execTreeParser(<testTreeRuleName>, <testRuleName>, <testInput>, <isFile>); + + assertTrue("testing rule "+<testTreeRuleName>, <expecting>); + }<\n><\n> +>> + +testRuleMethod(isLexicalRule,methodName,testRuleName,testInput,isFile,tokenType,expecting) ::= << + public void <methodName>() throws Exception { + // test input: <testInput> + Object retval = <if(isLexicalRule)>execLexer<else>execParser<endif>(<testRuleName>, <testInput>, <isFile>); + Object actual = examineExecResult(<tokenType>, retval); + Object expecting = <expecting>; + + assertEquals("testing rule "+<testRuleName>, expecting, actual); + }<\n><\n> +>> + +testRuleMethod2(methodName,testRuleName,testInput,isFile,returnType,expecting) ::= << + public void <methodName>() throws Exception { + // test input: <testInput> + <returnType> retval = (<returnType>)execParser(<testRuleName>, <testInput>, <isFile>); + + assertTrue("testing rule "+<testRuleName>, <expecting>); + }<\n><\n> +>> diff --git a/antlr-3.1.3/gunit/src/test/java/org/antlr/gunit/GunitTest.java b/antlr-3.1.3/gunit/src/test/java/org/antlr/gunit/GunitTest.java new file mode 100644 index 0000000..3df86d0 --- /dev/null +++ b/antlr-3.1.3/gunit/src/test/java/org/antlr/gunit/GunitTest.java @@ -0,0 +1,38 @@ +package org.antlr.gunit; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + * Unit test for gUnit itself.... + */ +public class GunitTest + extends TestCase +{ + /** + * Create the test case + * + * @param testName name of the test case + */ + public GunitTest( String testName ) + { + super( testName ); + } + + /** + * @return the suite of tests being tested + */ + public static Test suite() + { + return new TestSuite( GunitTest.class ); + } + + /** + * Rigourous Test :-) + */ + public void testGunitTest() + { + assertTrue( true ); + } +} diff --git a/antlr-3.1.3/lib/._stringtemplate-3.2.jar b/antlr-3.1.3/lib/._stringtemplate-3.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..d7755e396cb586902dc4f2e01fcb0662dae99738 GIT binary patch literal 197 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@nj$d@s9#A5x_AdB#7bnqLV<SARRM+ zSQkwjBSKs>IX_n~v7jI)Rj;r#u_!UGBr`9Sp-|rd2&_#k%+oBB4HK<{6VnolGC}IB KYY-YBq6`4XJt2Mo literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/lib/antlr-2.7.7.jar b/antlr-3.1.3/lib/antlr-2.7.7.jar new file mode 100644 index 0000000000000000000000000000000000000000..5e5f14b35584eac2a9f0f888769f0ab93ca6d849 GIT binary patch literal 445288 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%0ABk)k*Sp9TJ7Rri(g@0eh=<jb zsH+{YE86JFJokMS0QBBgdpa#1;o2mGk4ttfG7gPnj}Duy`JXjAJ~kYK<_XP)-X|J$ z;Dfi5{#%GAcjy{H(^FD81DW*Hj+U4apPo?RG^gHL=W%)h0%w@0j2_%Z&rGp8l1ZI? zHF`Fd$NUIv;f(bhZ>;Bftg&JnJ&zLP0QXExJ-*?g7<xWB`rtlX&~@NO0{;DbZi{TW zjb3PxB9*Nkq3fD=@61-)>AE5vLj-r)vUMB1*w88B{<;L0ZDM$}?7pBKfufYC1{~LW z8JD)v%Zel$tDt8G$w~NTko-rH&eo5Rjm^71iS>WE>2W*R*hZTT3LD~jeK5~>rbVFg zuILE<xF~$G5#a-vOnPM-y=nt^580Y!skMrFGH|tXQ0NH{dj+63f?Uu|n6;f$wbE<a z=(TP1x+qU2kK6m5q;;=%9-H&%7J8s(K&&C;Y%m~)k#xS0bmfak7C(~o;zyHyd<iMw zK{AS01H7eVDnAAc%5pN7*OEoNjx6Ezq=tt`18*QJc_TTIhso)@iJZq*kW2VVvVpH6 z*YMTkMt&T*gRcPtbUb;GpFkexCz5CQN#rGdG8my#$ou?M@+m)!e8bn0pZMwIPkshv z{7mZOXVGr_Y}%8bM~CnWX%1gUNAZhj313eS<CoJVd;_iHSJ4ys)$~-pk)Fq|rC0Fl z=q7$Wy_vVr$M`MuOMWZ;f!}6ve!G>%?*u>PE~_8E#~R1mtciT9br8SLn!_KoBK!&K za=yd5n(wr(=TBO<@PAs*^XIKs`3u%t{6*_S{xXyNRo0ci#(MEL*Z}?}8_NI1hVi%9 z82&yxjDNt6;vceQ{390PAG6i`6Lu2+jGe(hXXo)R*k$}1wuyhsTKISDcK$uv!hd0} z@?Y6c{4e$=-^HZ>6D}z4Ei67*Fg{XnK0ydRNhm&3Xud$C@uP%~uM=JP2GNyo5}EvF z(VgEVdhiFuK770A$)AQ`=QYubzbkqRDf)^|Vvy)2hQQlU;TJg~PvnZRB411q1!93H z6i10sVwo5%Y9aR&vA;M=j29P+B5}ExAg&b?#f@T;xLX`3wuw^lkeHINa`+H?*!9+X zI{qVhJl{Ao4+B%)kV-9i;^gdGqN=zNgYn}Nl?!CwM9FmYJWZIo*!4NjcWlkUSS6b~ zD#I9>{n0_X8J8@*9&T}*FBH{V9os{1HotC*MRFMBZtVC#)`6rexH!{@5{Hn^qJnf6 z(@8%ulaz`%WV)D37KnKyAm)>5v4DidVdP|SIJph-?-56l2gPFYm<SlB$=$I|n*%gT zhj8bac&Ewr0Nt~g|E<?_dxF>GIze|hk2{^mUC!ffSNDO7F+C6Hb59#>oe?7!ZnF*> z_7JZcWr)-kT~UiO3Ym1P^SIY}Y;zv>Igk6D#{<seLFe(1^LV%|x_#Lner<O$A8{U! zI*-TN`%FdLbDFxiZ$-R?^zYbfiniE`+k`w5?-~^&bHw>BV53rdPV&F<oDBEHx%u%v z6Lf(-lT7FrtY3o9^mud`)a@-<n&MohsGT@2YUPq#0b`F88>_RGXYZ6}@6xi<Qrf$; z4((k`W?aj+SD($}&L>iPH#_2^A#^Bq##`_9e$11py&;jx&3Y<ncAowpxLJF4+@5iN zw~|v)n~g~BAT^X^yq^7E$LqQO5njnq{<#+@e;ZBu{NY`zw$c~2&=))6%W3WT5+n~f zvB;N~?aTJH(wD#}Y;c#Gv-Dcs&Trb{ED_hnM)Y!QZ8(#@(lP#CgID7lycTQFA;-Pm zksFTuTnQE4NL@iR$1iri8Q*QpQaLX6zfvRcR;uj$Hu^T$l6O3x(KEK-GA4SJ|2q!k z3UU<~%cUe;)Q}!xIq5CxNq^BmhKVp4Eh3~uG?8gy6`3JclX>Dea)ekzD#h{S7;yqQ zR-8yyiIc&Ao<hzRr;;sVEqOqk4hHlL^0YXUyeQ5hZ-}$Wd*U4OZ*ea9TAWAzBhDv( zhzqDCE~IH<9qlSEqWg$T>0og=%@NIXl-NKgiYw_tv5{7ZO*AB~qo;`L=^0`(T_<j& zo5W3Yv$&bwA#S5jio59d;vS2MR!fU5R!`Ap^%YyKv0|GwLEL9e6%Sg6ibt$P;!$gf zc+9F5PgtwO4r`6rX`L>fv@Q})S<T{U>k;v+^^ADVdP%%!{U~0ueiyGZD&Am9yve$W zf3cq8Z8lK6!*az3Y_#~06^W17WbrXONc@}47N4@i#Aj@=_<~i7FWEWbE4EI2%{GW{ z*fru?c8mCq-6g(f_lh6cm*PL{d+`(dMf}WmiQo7@@jK5EfACS_Pd;A!#Y@F5UM_a? zS(5V8q{Yvcj9(}@zf4O0lvMnAsrj2SjlVB_{0o`RzmqoqMRpckb`xD?hRBqeqOa^O za%GknDSL?h<vwDe%oYLJTP&0P#o5v?E|ddAvm7YylY_+La$oVZ94uaxdEyP3FW!{} z;xjo+{2&X(Z*sWUEl0>SIZ}3&qvaSmRu;=~vP|wT50T^LZ1{DAoFJFT61h|!AeYNh zd6Jwe&z95V`SM`79%@}JE9CWZhP++QlCAPk`H-9|pOEw9({g@-L;7HJqg;#wSIb8T z`(Jdm-fiz{C3sIUPsDMbV!!v~L~T!SqVC><FZJ->besPBr6zYY|G%v`{ZE&g9#2|o z+JoElKVNC;coQq?%k04hZl&)fT0lG{4dvhg3eOCR<mCt;BrZS{rR8OVVN5cEa;^OT zzzjMR>e%pf(Coi6HFP1F4^h++BwZdwddS73w_HN{%PKNVE+wPoGEyRI$TV3?X2?1+ zPu7zoWQbfS8^~qySaOwYB-hI@xkX0E-Li>nlPkz}xsvRZtH?j)YVxW)j=U|`kdNev z<a>Dv`B9!q{*tFrEzh8X<XJRNo=eBb^XMdbA)O`H(Yf*>dX!vG>*S@hQC>!mm(BE2 zc@=$7UQM5u8|f=@6a83TLqC_-T9({wX?cT{A#bw!%3H08@-AzMyxUqP@39(XtF>Bg zu}+h1*4c8awN7rcu8{XzE%E{DX8E9XhkVG|CLgw*klU^2<RjKA@=@z&`MC9$+{w6n zh7Fd_vV8d*+fV+J&6m%!qvZ>%TE58Y<g2VnzQI<@x7hjeUG@+89=l4u&#sprvfJgy ztW|!(9+IE2C*<esY57H*I_3CZYH{QHUe2B_X>-nX42+%Y$fWPLr8pExKbY?Ay(k47 z$|v%%oSV-9vSh(S*OEXM=bMbS5Jp>|gYzLCz3>2kguGXfB@3OSJ(=|5Xa|>N@xGf# zrqgyQKn2(>ByBCHY^*T5uUBV@4F)7uNZR(4-;p8mN0KjpBE|A&GEx3QCd*&RA@VnJ zsQjHQl7EsVau+#M?k4BMpw}x({-G>#l@er=lH@w5dy`5dw<{mnqVW5oN7-WzozlJl zvy(xHI)+VT=3veJ^b?Twe;3IVg!{BT;V?)Zt72y^=x51iE_Ce7MSLO8H~VX-Q+nqo z?yWuObZtY|ne=m~lioak8~uWjqBQ4QtrSPS=C|$ns28d$pSNeWkE3eRGwGK_z80c0 z=~qR**ii9^R<=0>kcXP<n>PBbvqim!^IF;RP8j2N_-W`Sazs9Bqu&=9z4yZolII-O z_|ZMAVG5z3js7S0`coTe?E@soCO_{WT}{tF1D$?pBV*wQ0RI*GU}MwRSYMXU?dw|7 zCqK)FeWhoo-%EdMCUR{WUF*a15Ls!UkAA;~j?d#;=^sTtJOL9$dN2_8&tyCBSE8!) z$gwL*j!e2cg%Wm-Z?UoIS?T$$7BN`0=4YiNR(7@xSZyG(g<O$sw_22sD(aNo32AD< z3=Yrk)JD$OU=FEw%e0tFAgD<`YO}ce1f|>BLKfw@?c^TLkY(FQr##&Kc9BbQ3@S;j zuT2MPP0h=+RJ&-%C<ON`{i(>hNO~OT6>NpWr~TqY#KMnrVBFCoV{ELQWk*TECgo?@ zNRmz|8m3`G+iREw64NiclbO#Rrn>b9%7X=yFsjA+mW}P=VRtG}#Y!LBHLEM0XtP~h z@i)JQ?1P0gtE+PqE^Tes-7UL6&+3|$zR{e$2e{Y8qk&#RR#!arV0B6yN{e+IkRQsd z&d|5>)}^R(3mE`EqOrDH=KX{Urhh)lneVPAT~Fq?!#bqzhPYjB3lGX<cTQri7P>uF zqg(14S7&u;CL@qDe%?uP@cF||;_r)xOx<%9pjNF6BcN;x9oRx^P30ZrCik1)qOOLq zjHsb6l?}K|F6!nGxOsy!{f5*ty-2joLn||iR;Jb6D2!IpDZAS?D+^}b>VeA-c)C2h zo2lWR%0as2r-INkMb*Anlf%uhcHns^Gm_Mtk97c!m5nEU$QdapXErgt5WUKU+AXeW z3z-qGBCKA2Q$?hnzZiCF8I1#z-N^{)-#hZS)}}3g-oG||cgvsWq7qN%C{<bFIx;ru zuN%#Ls7tW)4xk~N-B0CZDRcZygAGC{n-{|(TgJo7wA=$uTj<~pAZAOxh3=azVTN40 zMh8LYk}b2-p^;&?q*Bn|-U38DfmHP&mg-A{>PNKdPr4~T8K(x3616XxtA>z;YA88Y z<&pE$Fmk0T1Uo*0Y*i!4J8D1jp&Ca%Rr{0g)p+u&DxyS9ph6u$N2^j=qRMEgnntIp zL+GJuIz3Fyq(`em>6z*<dahbXFHuL*O=>Z1QAg98RUN%e)zb%51ASZ_OP^JZ^m+LG zs#;0kRmag!)EfGkI)VP6PNKi5lP#uBv3%-OtGiljjaH{y<JDPKsXE7+t<JL+stc_p z>LM$sF0ty>dg~N*nYCG6Y2B`_vRc*E)<bHe^`zQlJ+H2@UQ^dvpQ-DtuhsR|FKV;( zmpX?rbtChsn^<?XjpeKR*cf#`o39>VLG>W3QxCBV)nn{R^#r>^J<aY`&$0*93+yrV zB70iB!d_Odu}{^T>}&N7`;U5${h{9H`>Kz4q57B?tIzns>T`a$`i6(q_k5-Lk*`z# z;mzt7ez*FS->?4QFKEVJ(VV}d75`YL@vn6k{*%t+yL5Mvse6l&x~~Z90pbchL~PVU zMT^c6x9ePSug(*X>U{B>E)Xy4;o>JfTKuKQ$aFnkX6Yi?M;FT>dV(CLOXN5`NzT#- z$oaZV9<8UzN_~*5)8#Uv50)qD3b{^CmzU}p@(T5Uyhhz8Tl8#stDYm<^j!I@o+sbc z^W{hI`*Xceeyfj^Kk1|8?>eBkUZVQxN;N`Psr__N73*qMp_i*Ux>g;o>(o-+Kz#V0 zQgn}E9qe9A0lt-$4(<xLV5mO#%`?i{Smd6035xqVmx*spJO!sC#9}+xP6sXzI(|1> z?J1EJ?jptpQVTM_-%e76{@HX-Z}f3IHlMLMeI1FLf%4`<RpHCaAGX!%7dxrsMs^sQ z4>LmAzx~F~UD0Js>p#X#w7z!y(;f~2>G^GzUv7+k`tAO*^B=JWG!wx~@}eKkrT2;Y zs}r&14w8Wn{C*fx(PGd!x`?M53hE&d8wCJ5Am1F9D$K_tQW7^(ig(~871_ePw^;*m z0Rn!SG2*YzalfL9NtiLaWCABWKU*SsqQuTkNhoI<$QtAksBbf2&WMh5u=2JcO;yK> zMntoDo3(FS(z&tR6qT{!;KYg!vDd@U*Ew|hf7g{a{vnAwUxqo%VoqXZ;Dy(4+RbN) z<oUSo5_`MvO&A_*Al>68%}m(7F@rZGO4<1H9OT4Ug`p`c9JzPMIVl^)Rme?Qf#I~q zLdSoRu^^r&lJ0sf>8;Noetj01sLv(`>2t{peLgu}Ur0{S7n2M0dUCVAl5Epgll%21 z^1Qx*yryp=Z|j@MC;ATZrM`=DeK+l_+h~T~Mzi((w7-6U4%H9QvHCGOML$Jn>gQ>- zeu>uUm+4CV8of%tMX%8x(Hr$A^bY+geOrHNS^7Jxlm5ZV)IVCi^iS3_{hL*%|NK9# zJ$IZGMb@vXx@V@V)55Ug0!tDQCM-EEuw+45Rtd6zBoPrMiVAohV!(uwMA1b_64n!x z1$SpbQ1F!C5mW?35d$jVDP|Ci->d4LnVx0vy!(CsO!ahERlj=mQdPb8nobS;K^JL^ zF4t7LO$*S&noiGYCabDhteTd=nrT7SPs?OCYZtLwwd!n|RtH7SuDHm7=Um6zkq*Hr z>(Sm0B^UEzMH1Rb!}3nViE4H>1?7SR@7xkCh4rFwj7FUeyR7r}eX?)?<w;%93QSx) zH-v!J2uv*mRkbkG(xMR7a-gx+7}{!0;WDim^wOHc)mjU<Mr#SzYON9OH`u@2EsE<< zfC{+35n*GcG)JzQJ`-0pgzo@toILENV!<6PrA_6IY0jUWXT@dL1wwh_7OxTtVSmlA zKc|p;h=Nmu3vQy5PUqpl<G<{+3Tg8{J&<wjI1%wywSo(%)&UXN5wf(-&|d2TU9_%{ zuXTd~T6Y+tT?Qky9xzVp1-EJWFkib8p3?fjDy=W9(fYx9tv{4&SHr8?K-i@Xg8kZH zIIInYW7;q{iT!@9jX;F&P7ul(mr$<z|09%YIP?~2FjA3Hu0u*0g#*1FDP=TL${3`S z8<A3OLP{BjlrkPEWdiioCc;2%5)OJY>YP0Zz#F)cq^Jy~TqmCXWug~t3TWC?*=DcX z=2B2(P_P~n4%RIrs6#3?x&yfOciCv4+vr+1*_4Q+(NI9PEJ7@KlS4TABqC*NE3ZV= z@GZ1;VTC|G?QYPud%(~hfE;ZWw9y{M*S(p@Z8b%1+yM+u61wnp-ay;R7v#zpPH>c} zSdCRGrKl&{CvFF62XB@5RyWN{S^^b@JP!tGk0DXKm4Kn1YX}8!COf8S@dWs_C$Yub zX<Kwk)8Z*?@idNee|$3%vf>IRSykFj+EQ8V9k<$6cbcc7CDOS_rtxwqGla<PQVb(R z*|iu3Vufx+a{ZoKL4+SxO5n1)yIm(yu@x8Uj)fDiTsbU*S@G{S_%KE<t4OoY;5b%5 zC2b`#CpOlegNE7~Xr`@&Tx}iF=>{0Cy$CmGr7%G&gDF}$4(337Fhq=4(BDd2vGq>q z=S*kUjR(n>y^FygBwr=@&l6;MphA!(a%PVr2vj~*3_h_pN5+dtiG_H(XOLbVBa5YP zC%r=ETo3^bw5N=T8|NMf{Yn3+d3$8!gZ2_A+Gen{Es&|b3^lZ^P+NNqIrVkuplye) z+Ab7NZ=g)y17oy(Fj;#W{-(VHcWDQqNIL|JwRd5K_8wy6U}9>QxuR#xf5HYS@Wl6t ziR$I-B|E-CiQwr}bi{3(ba68>6OnclNAw|%=p!7_$2g*6IHKcFS37|t`ZvzumstBy zoWfD`GI18^d!DsN-4s9d5$dU_`$uXhAs%C}499^wBtJ-d%ZUgm!s%bi`kmDm!M_p? z2ecr)>bQVLxhn0c4egV@cHi{1`=zhlKYi`1FMLoWmlW>cgLJ?~T8Jx{rGtXx>2f*{ z(Le`9QN#|82I)0rROXt)dqW&WS{RXu#9ApNSH`UhXIMJ4$ng=Ae}>_MKSz@yb{^!G zNRT>C`*egL?(`A0L3*uIXQXQ!$6vV%?_DQ$!qgqGMLft-QRBtvs6`+*;Y;cD3Gp#H zekvKHH^d1GrO4D|GpQowT1MoD`KukY%JO;0rQx5n8k1;+VBhGB=q9Ha>lEYCkA8fb z+s-*oj82e*+&_}(i&5#p7GLoeL0kL-pKc>L;sCQ07H_1Ja<vqZD!t@13EX5CIC_gb zzgZomw{E1j;gT%kMEeHml-zhCCYiIzU6M?7xjEpO7g9s`_ucNT9i-FZ6;p5Dp8odV z(%-%#{q4WUZx_SssZXXSA-ywsIU{*_S8{&tPTsvIZL@ommot->_a!gyPhQ@Uy!1fV zAQigGv1IzH_;z0)l;zI~hzM#gZwU$)`@Ro2gz}(MJe1^z7@Z~jiOT82c>fXS@$B?+ zVa|CbcKkJ4#Jsh`Ds$5l;ykB=`Dywsh8Y)b_o#=;6U4V574vcb4EmT;Jnj?=okAwn zN^6EYHav2|lSR-X&AW@74(6qWxn@e$MX7cEgZ+;Uo^pz(ono<5EOCmZPO;2$GkrG~ zkkE;J)%#&NDzP7dYNw&Hb_PwCpP;377FuiP&~!NsowQ$}oAw);+`psA{Ra$0T{n^w zxRFzs$Qj(u6}XG5FpK+O9{0l&JOGQi2F0Ai3tWed+<;fO3EQ~^ySWVqc?NvIE5UJI z8NT8{_<>h}-*_fr{3616Rig9iB%5cGhP)<;@LHrPuT9$UI;0c7gj~rRkiPs<GMqOg zV|kcN<`Hr`kCGWYhdjiakU6|5S-_i-MZ7s#&RdXT-jY1eTaj|!n!Li>knOxJ+0S#y zd%PX_kar-bcplB<ooNH!h34?CbO7&8NAb((L;P|&k6%Hb;JxV*ekEPSucB*sA6mxy z(=GgJ`cFQ9?%{*z5k8oH%CDi{@}cx+K8z`RIBUQMu?Qc<TJY;xdp??V=404Uej~ey z-^3>JaqNCRo-O7RSSg>#cJoQ>bAF3*FTY1w&1Whv@CTG_{6S?WpQG&KbCrX9o^p)O zSB~??l~a77@*^)&e&>r+g+Hb0{Ao3lFIMaFCF-SoshY!=sV(?&HIF}|cIPY9e7;g0 zz*nim`LpV1{ttB=e@>mk*QnF^T6HFWUR}XoP@m)L)b+eX-N@IgTlofcJ1<q=<YnqX z9#fC-P3kfJl6sPFR=?+4)N}l0AMjUvoNx67`D?yx{<^Oo-|oxdJAG~VE?*ws?d!?+ z_zL)5-_?AdZwP<WcO8GrcN2fxcQfDbo5tVq&EN-o_wjdqbNON4<NSzkDgVH?iXZi@ z<s#e0yX>%IQt`JO_pU%hX!7>X`ConS!JEtg=D04WCTl{?S~o=pJ(H~IC`Vk9(iI}= zQZ2(3yLjZJ%+O+Vr97Yax##mJ6k~Li_kdpBkcaVf^$y2!UM<Xuq@kIgSoJy1Nm;7Q zUY6L!3&|UzpJMUzY>fURrG>D_g&cm)<0;`n?;L!&`71)Dbd4xQLD!tUbC74jmNnXC z+qP|X*|u%lw(VcpuIjSgW!tu`t}c9aXYR~5@4mS6BHlT1BJxD!KY7;KnS1Trxfi-1 z*=0IkuW)uv(YXHUr}aL!ghzbRU^28(L8Qy<>|p2!e{c_BGlXusPnGk)Nj1I{X|*cy z1sKqi*UJ*;zFs86lXB^SC{?PoWyQ!~g(_1FqPIlPA|9}m-i?6HAbCs2(HAsNI;0Pv zs$a^o8nTok4cS*14cFPyGf5`MrN}(1?gZ@IMyhw^wC2F^R@R`X%mcHSflSRX%M<}$ zqNVL8B@=QbV}7wF4!=5HLIw%~EW^mA4b&qVLc$&>tn0k$Rwgiw+co~7)TFAQKx<Cf za*j=~<;yIJg%?{Iy{_u}AkezeNL&?(?^IFu!pqT`5K>fk-uu-JbrY>>3M;kEVopBH zwbwk*`x9y(n5(UOwj8)wg^Wh?fDf5@$V23T7%}^c)L9(n`Zkc~zV^)8!aCMV3nXU` zr5zQnqL3yKl8IA`Mkzje73SU!MH-WZeZ~CXQg*JWm<dD3Ny!e1ATc<$<&g*#IbDtx zX=X?JS%Yc9^;=#mI}(#U=?pNsAOeP+DB-Do)~Ox11x?r>rmj0at{`y4Psa&9Q)#>- zxUH;f-P8pyna`KMrGG!80#VB75X8IA$ckF29gdviZoRaT6=SX$g3b-w552^hsl<z3 z1nRB-4r`W^uybbM4-3O{^=54s^U&@Po2oaG`Y_Y(@-E%_UB2r8SNQzV&E&v!j6#?$ z3xk1<De~7f!0k@xL)?9oC0rz#;d_TsTF@S$Vf)IY!x?`}^^9{mEviGdjj$Iy+7X2R z!q>Vd$S3$hdV6SO%*YEydjGDi;U65y-Dk@kxYhv-<H}FF3{oe>VVIQ*)cHu5z044# z|72BMnJa5`#wMxUjc!?^FT{NgH){G;a!B1x^u3A^ubdGv%gqoaKbe`dY-jTpv=UA{ zshPxXXWGm<k4by++;?o};;!&0Rl1jCZpW^Bxo4KV6uUl7SbG1=b6bG12=pVvE7und zzwkZn_Tty7M#%4c?04zqOYtj4DAGSA$*9mDp}r{6Q1vCQDv~!c{4h)VC2t1usJ&YA zrt+N67dy3NZ!Y@g(jt`CzrA#0mUsHnko@*>iSr>?Qu$ezRKs7WQ#hk0^u}8f+9PmQ z&0qSsNTB|9E;`QmVQJdbqk;8{L6Q7IIu+}U`3T6j{l2<K%TrOmsH>F!*X5kP0{j_H ziu{w(QHoyad%nHW^m&$QVQ;n78#`NZZzcQOSH<!9ud1!bt8=tB_$O-LGHwlj;cm6B zbZ)hss_EI63g<_TCD%6~wo(F>*3<AsytmGC{Es>>34i$y0scb#mH5h?bAk%<$M_}v zCwU(g{$rL$d0)W~7X6mb_8a7nVunipJ?q-Md)L|CXSjvlm)JS~TiHebd)cL#H?#8- zAB2nEw`1%<brXdh=HNeSI8na_6?~7vW?rK9Uapvddwj!=c`Pz|io%XKVx&IT#Z3K2 zA>XnvRo`o3W&Cr$i^-KG9^F{0JRmSt{w>2{dq==r`&1R9`{FKY@lRG9@n0-I`P#C; zgv5*mPD6syu@M1bi_I4BEwUuEX#ySJjyA_6H{aq-aQB?&p|7>r8}j@GNdB#w0Zl+Q z`8ytO;|8Va!(<-Ui`MWh^zdWwfOu5GS0^*+*Q#gB@Xr%!MD#1BJ(X1|YM+i23#!LH z43Q%WJnj-qrvYycpcnJFw41}jov0FNC0ge*+LS*&XAeAvMwGsMJA@zaz&}&a512PC zuQ{8@4Y_h{@>)vVtv6DiDY~o;FzMj&V%Qb7EFhj@;Srhc^Hb-rxG{AL`cA<=VkZnE z9Km8Zy!z>eQyt<R(RfWBga3&6YuM?)UBn2zj$^{^;0W)j8*^G(#gJdcFqy<KrO7ao zCs+=PF#m4DN=LeBB)KMkF${+`Fh%~uwx5BaU1+AkJv3yjSH^ROOw+MSwzV%eyt(ih zf}*?H$UQC(y}__44wcuQVvCXpJpZjR0=*BdPsC^!8sLbd!c;0`djLPm@(EuQ%VSu| z1fquNzDLO~f%`S-C~pZKK4@+*I^Z+-kxo@f_34==Hl`ZDS>VLCj2t{%QBVOf4I^6v zx#0`B@nL|2Adq%PxX6Ydlsim&YRwB993zg{QgkWIvEUw<43*IV2<V>Pc&u9eGrbWR zUPjtI_p1c|oxGdtt_GrtdC!panIOJUmt(-As(Wn3qv3Zc<@8Ngf=`|qxBso$>s%*- z8@Htrs^AoBF`1a-aA+blCe`*U6`F;Pbly*SnlcvEFPp=&z^7fd*idyKRSMqnd#^#A zq|5j0vT;rZV!vnNLUnABCONnJ=(1$;Z8<;L%o@QrZD8vn&}I6Fyq%v1KWCJAC0D8n zkmjFoEes~Z@rQv=jd{UAVkvgj4kTZ*6hnMoSSOj#g(K@>x7pPSQMJHMV$3B~54e;T zJaSoC^$25QU5jfJh3;dXip%bZsThqY0pnve!(vWl^^vq}?8*L^+N0dYG;1a{B;qkE zqYT6FQn4Hsw#FP+CYJ?2W4fDK>*Jp}wo8A<e7M9oCde_uFSHMPKYr`9hCCN>?j-kL zBW<sYC1>)_YZS|oNBB^nISjKXAlL4h1R>Ufy6#695$74l#>PO_50(d)2bCkD!tN~7 zQ(HyQy!6>hEso(4<-lhauo`QGnE)VZXeh&?xA3F-qR4Ng;}1{COO+xL?~v(D7w1Dh zU0O&E19kiJMhp8LkfzrhZ*eI4nB@kBhSke8<phlna4d{{V6I|s4D0SlWEkasyBxqy zGW!LU#pW3{-@#OK_yyMt-`s}XL3CLnbB0{;F{*Ofz3rx)iDNx8{T+k~A$`*Q^JX=W zwmRs;{B;DLCPA0*vNIw~u0W8`@Y=<<Q0J&2viTveI82;fBZL@lDb!*qtlP-U%2*`; z(@1@oi6P9v0s}p1)3#O(raZOo(5i`X&2jOYw-Jbz6=#5%1+;34F(rdb!HzwQ&J1PM zj9nJWn>$TFkBV5nxZx7Z4LK<!NG7>yoD<!T<0n)_dQxu4s-{%7-E;UBD;aTC;w1On ztaS$C&jJ}u;{4k*qt$5XpJrYQ0LF>6S0myW0q$#4byQP%=wH-kJQZYGDi&v*0xWy< zn!}Su@e7a>5g@4+i2kC|xPS@C0%!&W`deT?`SnLsI5hm9EV@4X7Vrrh5P%u|BJ+kI zN#oDM47~iBH6(f#9zlji78&Nw0oF#GYG&`g2Q&Fq13jP{z@OU+Pco>C4~f}Jd8a9z z`7vAxuZ&<N;vjz0y!NnR2@Vod40CIST6q+wE=oTSsZv5N^};$xdO6to25aQK45@*! z!BpmwLQj;CDaqNfF1Q=N>A21t8d1!Uhnc22l+s8{O2@w!c#@H-5%y;FA+CAKm`IK? zoR+aLsUEe<;E`%h7%FCVv7JSSsN*{9;Ur3DsA5LjkD2$<zQ-<uPdWKn?t-&jI9i!6 zLgLQkI(FL-MfJGmd_P(<5XO<R9YkG(2h$Pf^2lZtN`e4Nh})4)49G=KqUCCxc+6bA zg9b6CULw_W#BO;gs%nCrDfQ9bPL~+%x;$%M$gR3CsG)Zbb8`l3bMU8G*p~%u?Y<ci zFA?OKBH0zSdH5UK9do2DCdmHI_$n*}p_#|P<>q{G51p9Y8PW<3w4#;`u;>{RhRN-~ zWFu0XX0>S=&S&5H<e89=92$eM8ISL%m!7iM+k3#o$ct|SSc#Yu$dOiON|522rP#(x z&;!InwCnQLcku#6tx2!QN|n?P$+Tb87Gb>+(W<kQXo7wWL7T7V+x}pJcO8kOLC}N| zkn3Pkf51T}w<v>N2$P-%N{+J-nRmj>j{Pi*dxBvde;~ObLQe@ZF8UCNWr!OV{vq15 z^aG`tiZ_h?19i#9FB<5b<h#c#%heDQ!GcFaIF6}0U5P<ilTr?%Q6NLFXAI^dya*}& zrlVil0O_)LJ)qi^(5y5Fa^@WXtxX&53>{5Gf<2BZw@0geA33_+Np^lK$r>u}l$h7g z3$)4m9R}H<OzshZeuai`gC;&+DL3v3T|TxvwaE?id7y<IIQc!LpWyG89Q@kK6M>^U zeG^ccm77jiIO<})aF^SKEreW`NmhY55=9KS5ysz_2vU_bS#EHkv-l&>$_l9kuF`B% zZl^l1;y2dg1T`Zzuu%8eq44B%FD*za#)o9mn7D+jXSo#Ws@w_cnF>7v2L%36PKr_y zv7`yFXkv6PTje42q)@suML2ohp_3FaQ9~@W`~mO-d}_Qtn7xT+*x3;-^n%9FvW<p# z`xvHSyG9XKo#;r+1P=iGvO`yfo_!XeLrj-I^Hd>VtLRng=>xIVgv+hjf~0E@Lux3S z>YVa(mN3IKr}n_Bz+_sq`dzB%cx{dbiqv>K#;p)&Za?{}c`u((|E@PqqBhvLfZo-Q zx(b;-DQ<{q$mx;ZM=?{Er6zIH0LLOj46yx7xe_C4lvd7#I=NRcd%plVk<ESFXz~i! zIfqKErXgH72U}CKZ(`_?Je2Z-IjSanJ1j#EaWB>MMX?qEYJc=fU$_&C2x9a>iITKX z1*mFvv0@wV>5x$)Q|@QCql?Fg;zkQh+#Bj^#wE`3G@w+UTQDBb>8I_R+5;XZsX^`F zLZWMkX8W+AiL5bQzOxpumnBA9#f0@Qz%fl?`!(B;#54~Ks@d?#wNMNyU18p*GJ{P1 z(EXjp+hWDdk$_vFg5w~xH>X~s$@eP_veA{U6D);IOiWPL0;SgGQ5MwVDkKFlEk?+7 zg<u~1-tI0X5uOylZijKI?kq@kMQG~(@?7?fIJiOK%ssaHvWsjcYA|df4ZNE?-+$l{ zOjB0UO~r^sp&id`<K**qI|>VWLfp4P*H|Wr__fB_>6{<OhH%GDa7W%{>@TrO_@EoU zD;V@HrMa-J)V|O>UT&V>tZ?eg-e9)x486~6{HmlNi5nA9b$>Fb;Y^fJ(zA2@xKIcQ zT#l>dRW>I$j|{0HotT&=NOFN?lAk&Y_Vv=Fc7Td5TtMcA>u*xFMLQddcSeH(>beeP z)fRFT>YU6p?OEV)sVFc;6E<wbVp(HP#)@cWScPeQwTambTWLZy`9ad0o<#9bHxbN2 zk=o=Ejp47b#&uR~iYPB#FoA&~xMhQ@oTijb=sF@57k-{1!9?E$2~yZEJMf%lDS$tt z#8JmybtJ@KY1S&6xz=6}&6CKqDkWuNkkCb;_o>e=rf^_6jpt8%j4y%?GN3}->zsMo z8Q$8mVBP6)^=LfxB<f(8(hb=Jxqd!NHW98%PNC&z+(!)tH|4NJEzZ3e;qr>?G>D#( zsqHxM1?5}4lAreku48`{MzxIJwz3W}v-@RU6O7mh-*0xo*ky(nXkT4)oAZPObm5F# zFPDIOAw9qG76)7JN9bHbFa~_V>N&tIjIMn$%6#Eoe8mEV@W+<kRvx-{d>unjjIt}X znIW{5_^9dFOKBGrYSG!JwC0vwt1QKpGQn<vRJ;wzo`kEUu8r{gatpkWvueKx=052N zZ5$?BYY$zY_Q+kJEyBz9@F?8q>c^|CN)mfGbqg5AS}Ng2E$q`J_3Ua7q}CdSaIP*$ z$LiYbMlBe~<+?++FO*CZPX6LsWR7d<8Dfg25IF(-4Pu@r%EswvbkHZ6KIt^#l*2HY zMcSO{-2$VI!lGkIl)EJpf3~9hqBb;wjTs(9Xps`UJF<v2$uPI{8%owZ)3T_ZdQ^R_ zCUxbdoluB-d}89Cp@eu|Vmbi+9x_0YSh6^s0)w)A;q$;)=Qm>;h*`gl8-O;?<fp0T zbnR{J>}6^G##CREHW9lv3A=N_uPrRGRb9iTEjaRxtv&coicMR6_{PgX#*J$@=PO{1 zZ$&Zrbzg(TEsXI?KLtB|xU5Schd%lc;b(*5Ea$t$f=A=QrdQ0TvARvwD%7-$14Amu z4j$mz75MTFz)`1Bqk7B}y*U^|()1o-C-ZPEb&$<TW&CT85t$;&6d=(KFY>FR&Fn@y zEX_FKDVc6yI@LyzW`Bx;RALsj7Pa!VPMSlfqlJoOs^0gDd0vXvWa5-Uu6~$m{B~{0 zlo2=@$kYW7J=B!3Ekg%4t&$AE9@fPR^YAJVF70QXbvC|}k{2eiSAZ})dP`^DL=dZd zOhKeM?9()ku;~nD;h0%;er4Ob%rN};tzr0)jYSL`jZ92DoO?db9+p0sIi_2UJAiS% zfCf}Q_ot!vjX-TOh~rg_qJ)p6-%ohk#DOruQeTk8h7kd0Z(f%=3ITU-VjVmAAfdl< zm}WBqpItD29_%u#c7hk(7<f%)M5H<q@SAVKDK0hZ2EVns*5doLyxF@fW&+bM+ixp> zBDk$R81{Dm*lr{Uj=vh&3+YDeX~_#%cuu~p(iO?*j&S%(r8J}`Q@J56q3ca$X~IA< zb#+vn^8tHi@r$tgDz!MiI|{Z=J=yxwh<QLy*sftEiRTJq)c2YDK0;Rref46D*c(LC zu2-UE!_*`mkK|_c=&<|)naj|=f9`YA&yjz3Y5QYP?J6Oh|Hu%=dBJgL)xy4kgaUfl z509y7tFf_v?H5#)QNhNEi9aOR5;SI(qou^*svh`?87vgleI;X&BqZ8ZHrgytQFE6T zyl%aogcd=ARCL1mr|}XqFwPp>Sn35P72j$s4uF$Ai2x5xiZf+VC>0E0qqCr>o1nG< zp^x;huFpNr->uO4P8eg7m9(iH88d{A-8d629Bm~aAOhh&^bIF}Qn|SG_CR6cr%B`J zgw0@^?1LpR<%!+;Co}_|IIlfYjb{wXp&rn}2zf(Jysce&?ksz=1Bg(PBO4*0%IwGi zc3;g^v^JrUujHtFr?gBedi!e%-$nTXCwVroEBk<r9igxfJe6ku0ITPCg%LgwqQ4Xt zMtQ<jk>vRZ-zO4K0wbK*|A;P!<u_F_-Y}w1Xd`JM{r#@U`Sq<k2?2>Bl*l_{_v6RH z#s8*_hx0EwlyZi)rpgY6#-{(NL20X`Esr9I`dOO3<*F&DEkLj5rKsIedXda0Adw$Z z7M8In;FI05z-`9U36S$;`lQsCDvab0AQ0sh#tBT5ea>dt$$rS$(9!++gvpPb6%UZb znDH^GJ2Koj$0MLwZC-XJV7Q(CO@ly&VTyqUej-3^36I5oer5m86K_--rZ{3z5%$;n z1h!pm9s}0ewqkJ2WD)I+<z_g97m37DPK4n&69-Vv^m{p5n0$_cm=Qw@yTIN8_+l$6 z`A!7p{*h-)<Ylm;N#>$vTD^9Gg%3F=<way63DhG-HEe3AFpeTPaQ3-HiZ#k;n7tHr zmu(x=BU&qf+lu}fn3Wdfui%%wRRRslg#{6YEBo&o!nKZ?)jdmUmAt(z;bhGqGuJDY zHeo|rtS41{Hxh^$QkJZO*S@w0qUN%1cQXsdpqDly2V#tkTh#)9H7`ff1^QPMy(YNW zKX^Hz4C;rxV#Z$r#jb9uaQ}oqPLVc59HKo;p~6<s?$8Xhyu_Z;%~C|ql2?R6P&Z@r zpJi3k3!R4jy%?+$UqJAD$PIFC;5h#YHEZgwVd1yrXzo8HN1?w#{qg^ji-rAfs7*|b zT+P3QX8)bAEcw6m6!}Mg^KVVrf2foy8ynhvYbX9wqg36~0QCsXKiS4DdFrrd6z_V9 z95F6vRFw!+atl-j7*Y?9U0CB=;yGCtxw5;$VkpZ>u%cO`NQh2lRYkELf3Zrdrp2nN z#j07&dnf(*r3Wy1E$0U8f0+e%>E5~V-g()6*>08hf9(4$!m3>9w9wwPBf8_D48D~n zY<-$VYiIt{s^K0mgh$&mwJ(SMoA%nskt5oBQvlaxjtJa0ob9FIxKqZ3GdyngMZ=vS zx`;NeKB5uR@XoiTGj9mQj$00)<CKV;`&;YvVFL<1{`Lex=aG`1!1!Wh>k%~Pu%4jd zS`uBp{q)SnYgl&bu{z67Wae(;f&PsttGf@Kq2ZXc_anrW;cjDs)^9wI|6opCqieil zMdLji!mppkD~Er_;Ep_6zu^@vx>ciVY99~1*X-_FF9!23j-Pklj^Bhm!R<zP*Wyn5 z=?nc^aP%joqNB(hxJr#}Cw7$E2ytQ^dTM!pSxBK^O^Nyz>V>r?%dk<Rh$lw)z#JOy zHqx~!SrWTcO3_e|RoVP6cnKA!9{Z{WT}vqHf}XVNa&*WiATosV4{O%u6-Fm|_z>W^ z6693x7_1H9L=6{Dn+G#h?Zq}ZV(}^ihFdTpEAwjq<jN<?te{!e7-FCEgi2R?#Xjo3 zEk&|QXq)=^jg10$SW4eY21Z0x;mWj-g%vX_4#%8xLV3&R#uykKB!@RWGJ~gFR&78K zHHRXe)M76gP)-tjrjc>~OGs-)f%2}h4QLPet6eieDG+}+`R>RknMPLyZA)5ERa(1S zNMRKJPtD}e$z_!~w4fSs<#$O?*9uUoBH)AjaAA;oKT?U(@ZK$3VLvuxIDzQwE!^3~ z76p~14x?;g&D>`<_M}ihO2nll*LN<n0^5yL1K1h8Vmb#LoWxtU0jEi7HR?dZjipio zu`sKkvTZZo<CiKc2JOS=iUBG<2IN%Fb)1EqN*@hZ3V3vQBmFjtO+1w)NJ?N3$r02} z;9eG=35TY>W#|n*(=6(FV4i7|Qyf~>-Rbj_7~>1I?Mlfapxf|Z!6gRv7P46as1{m; zzVLELA%J;xdi4ytPL81pW~;|lP+){`6`_0RVn3lA8YXKqf0r(vvlrY)#)4+$MNQc+ zW=&fzJu2h0BIRH4vCg#Eu+ff5-69<ICJwcwPGGhRO?7EaIe39U^(0pIG*SRSlhMY# z%cz$qj3I?6l5A}k{ES%3csM&c(i@-QF|LTg3Ngs$)?UW3x;i*#JB=(%Zu!Qqklke& z_;eYZGar+$*OI)NPf}%$r_rXg<+~G6W?h-QG|2*4=06qc<f-fvi{jcQ(6efQ7Da_p zKj^VXus33zS#!h(aW>U6j&vI33}WUFz$fv-$>{_0N9yNsVeiBv!dsaP_J?#SWi;l8 zcBx<swo!fXkQcXnDV$4g^e4%JKh#C7G^rsEffpTmf4y|(r9Ug-Li*_h^HuS$(MKfT zNiv%*k5LPkBwAAm0R0$|v}RIreL4tDyT@dxmyN7%cb23`mwKm;QVZ>ogq`L%7*Z-} zbu#XTWM>9*Jk^6~2k^Ee7_TD{sIH{GX(gmGYP~Mg2HJ!R+J#g`XNtQC2gH#T{5TtK ziZvJIilaj9N&aS^U^|jv;&`zW;8_CA<G}MpKmz6Uirla2u*OD0F3JUKaEk$HNm18T zD<fAWjk(@yK`jL(@upn|U0eKuGo6b55U8=8MB?Dt&w0D)H>I#I(;}LqSg~7oW;B(K z&hkb(AG+2@5Kgev4+M(8!%HmT`rMD}5pSudBt?MVgEbx7NUGrhHLP8F%WDT0QqyoA zI)*Hu_C<!efz&6G+Mg%h>+*^zBZVRQp=xYC@RbEUr|5H(9`-2`B5(yrszvYdhD_ZI z^2)bEu(_-t?4=Fu1%-mBq&FqAtYsI}&wQ#LTDE3R1-fq{Sx5jgRutp$+QWNZBG2)~ zLL0ry4i*14gjNmMVl7m%)5-a(!4j@I&v0X6yQh;R5#7VSDcm7c|0w3R-2Jm%CGuRH z!A2;z^2r2@UF$>vL{*P0F^PNpvKY8+q;Xy`cm|PWBv?roA`>RqNNB2Pr}BtR75Fg` zj1m&3+@x~S$Z}MY^6!&SDzl7=aW9lynfr%Q0$WD;*$oxI*pCo65-n&-P!edYr{wGj zxHQG!30fAj-Zq4GG{yJ{;1;tLHiYeJqoe}l!ofXeAc-{z6#+8A;JUNmN#>y*KP*GQ ze=dM0*@v<M&BMZBQ}$rZN1Bu8s)qi>@Wykb*5H+igCA^*;Ho@O@d14XL{!GG&b3#L zj``0N*arHcAI;ee`oQlqrPCvEMOFe;%mwVN0{h(2qI5Y@uSt^y;S@enrY;Ru@a~!S z)Mbg&XU4m5g0!8UHK=H4PJ>Pe)j1%KSabsBHHp=$T+^8Qm6WY-2Q3E*)`igv$q2Qg zj&i_u30veSGUIEKIh|dJ>kY}JOO^m?4%PY0Rv;s@XO1eGT+`qq)DBI-#v|Wv+Fa8> z;Rv{RvwmUpY@Fw@la4?d%0Ex)pq!x3mlD!T*lO{tH$_p-8cW?9?-rez<y=SUc90AY z18|<G;%Y+e@a~;|HnlASsOX^n@=m5U$Lqi=nBX@|wgDlhi;<L=2ggB0cP)`D)``U1 zXOk~${PqIc#ZUr@(sf$iuQZ?3HUF-WAd*}?0V}*OW+CH6m5{9(JxHWA5HU9P2dj+g z_u{Oj&(%V5D>)Ol?J(3fCI!5DjRvbcE8Ix5LrgX&XuHH7wTyB!Y_%}BX95rmVt**) zB-ua(>@IYuaypLOl~|?uUOV)HOnh>gFlTFuwI|7p{>GvW_by)P7z|#if64M)sZ{ta zV_xa3%YrZiGz^i>8l(mvu|m*QR#4Tci^p8V6aYqFZI<5TI@P#q)70Y+CwpA?rc-t% z2kH!F0RXRDmrfe*0napU9YkgQlFpeh$uYCpuS^*G^Yypkcu<wb5U%2>48aNf!eTL7 z%7cY-HeX_028CK;U_M77;<Ol&b{q;<M`ox7$X?Lp@HE;kH7^jy-k1mbJ~S^1##Xxv z%jFA5JqFEs_^}U+)=Z5BT&t#<dnf=i9V@b)GZFKFuAbj`b5esb6Kg5L+sbSc{tC!s z7!R`(qR4$;0`B)lr^4H{SOJg89rPCz>@Rq1@1CjAi1SP&Zsm~dU`8RBX!Ai!r13A> z>}<_dp#{9ha4<>lO%JVnGO>HkIkIC-bVr7!@HyQ$0~^qymx6PG5>pr04Qz3c?wy8+ zs>ylg2}++(3w3GHrRW8U1DCYsL%b0q0ucd%Ah*`5Sd;JU=v)Cce&DI47LKGNwb7yg zUhpZl@3tDvA(ViekaNv<r%<$eQbKt_=bWq9;wflP@C5UM_U&h}hIwdD_=J;!_Woxv zrxvt(U_u5V=c4casc84egbc!s;XP&oX4nZnAoJ4@AIi%aJ;0k)ZJu4^b)7bKCydMH zLp|`9IDI`(SF$au@WXCe_4Yu2+3Riuyjgs=`n+Uqo-E>}+VL)|eKFcz^4F}*97^i? z7z`^p(qHC;UjSw(vE&({p!&9^A3xSUh*(<@zj)f7zW%{|X!)k|lfS*-pIHAJ_xZPO zuB4rVtBa7Unc084xyrioIO3>3FLdAA!5(z2ghnCiGEhNmlgKgW2Z^X+bBc+g7Q0le zdE2tqt()`~K2tw~dL9cThElaE;(br!E4{8gg6YB~JOS;_C%Miy?e51rU!U(decXDb zOu-veG6yi4*Q5>{a4;KAlu^wjK%G#V$sf{pn-~{?8f5kOQOy*~B=z_c_o=uqLvP%H z6i_K}gH<_2Bxsl!w4HvdkkEfW9VvYBb2h-ux<4InME>jvp1ii9g@C6OzGhasod=iq zGcp&u2$ZNQgU77MXgvBbY_c&P=p;Bkr2<tI2ak;B{>pXBR7LA@se<z|+tjipY`bh0 zK9as#$$3G0U>8H7fY<ixTp&$8I~5VvE9#$GOIP-~DHC?Z^@=ID?to^<-<wKl)bcyX zZ3~q<WrO~;Xt<grX4>`qyGP+(*=pWeeRCH=l?9Pz=Z1{h(R#kZ_!({zta6Q85o0_G z;#_=&V%@IFAz;f%?;;36D`!{X=Y27U^IOmLpC_P7SE|KfGM(1M-(9hqJ~q4S5U_Fr zXgJQVgTrV#&39DGfZ}jk-y3iU!~D%-&j}lyWK#LN$zkL)TTYE;M-XfF+yfjOFq>5m zB8;qo7P4iaG&ov#bmv5Hkb@gu6p#fudq}vIUl_TnI}Wg3g8&i+g_2g|mh2?XgZ&hs z7*4XE=f#}VUeK0I`lo!#r>tKP2E^n!g=op}r#V*#cE1gb(cAQnD+c3H4|2b$8Hs%k zQJOwaFyISjxz!~$o5*k6I_i)+7^$`>#3W$=vxc@}#B<_PEJV5(WkBWAeQ>2i;&IQ? zmno98^whACWYqmJYg4@;TC`B6D%#`@Lj#S=CGi;jFBTTjq-!D<*<^7H)AB5do`8_L zxl)7doTgN+sVPiKm&{z)WU^$~1&gFP!b)r38@+L8nrLtFE>8rt?xCH7ycC_T&*KIc zd+mpM+i^X*sD4zTxJchG;R52%Vb4=SCbD>V@m~%{53#J9MM}yDHDyHY3)YErrc(<{ z>^l@0`S5j>sL7@Pr#O+|^VjMk;+Dc?na8M6^rE=<lQ)|p?mKYrCdn2$FOC`UUZlOo zpuc4tj6DI73q+5yaTn+#?pb=Dg^=A?1tTPi$%@YvhOc<!y%UEUkA7h@B(F=5_%kQ3 z5#iw-ztcOVXJkK+>^>0wVaaH&fp=~oKYkR0|8JH|^zR6(f}xZ1e;F~)ll=-GI5_xE zaC$dzcsFo4G4Sih#iacCY?a=@O%*Y4ML2ocyz0RQk&o=bE|-tpq{7KA7i%$azWmDF z#m#`iMbrqP+THj0!b6qTNnAqlK{B=q)}MIgtc3ODoXrvlCcq@YE=GEia*2M>5=sQJ zP$a=W2C%=1s}~QE*~P%cz{$Z84U7y;49pA+4Svj56Jk^T21hnGfcTGijnD_ISJwA9 z2ELzvPt7s@Wu&5Rrgkp>jMXGe$qgtVhR)bZ)06~I5{l@aM&*U@1q{c|g@l|64fKTK zC@Dn;rVY9~8Sl&Q4?x@&#FVvuikQv;+RJtT0Pme`eLbMZ*``F{rLaJ)+yXnp5h3Be z2z&eDfK!-^5kb^J3gG5tgX0=rj>p0Z@3WahPCl#n(cEbYlZjx$B#g0U1`OdDgo?!# z%(sf)nd2Vi;HNe0;u;gb8t0S*atB6XP}))JejSe)(ar=nmH4(KDQ-${aIXq%3u0x# z%V+?jF+}|i<w^8oc10V>Spt^C4FM$C8sgs8a`6QOq<Lu`X*3cPO)U_)#;#qu<Plw? zX&N-8X7*?b-c3{Nl+?0dpzf@B2R$28SLlmoN`*|QL{~E(@HI+|xZ~&V_-f0LslDEL zeYvgshJ3o0QE#lIn8STp=fv12*ek6W)foN-`Ntmzf|>&={2fd|`e!f&^#|nly{}2m z_WkMq`y%*m8QQtnI5GTZFh$(e)Y<tvLh}E>qhD@705R;#RvN|@j0%|8pioar@)X3P z3zLmh1OfY+&L%TS3)#Yxnt_};5`v&FoOzl(BBFE+ux9_|Z`MhWXMgj<i*vD{fPTOa zh#I?)d$z*L%EHou<uEv9=EM+}v5qg;3w_woX<DHf0>yr>JrM)qx`uzR=&*^!M1j84 zcv=BFgsE4Oz=yB%<vl{;ia=POGbVsy<$|bTtAJ_PCz;BPoE8z+3&}7ndut}ck3-g+ z#1AbBX}R^tssEsuVi+)M7@@$LDBdpumKMoO8y1E^F*k|l%n!GzFBf)ytT~)Q;)NEA zA1jEQQ$DUJyG51R#6wQ6sFrh$d`YEzt+2?FN#RPgfT8||GWrOVxnN62WQzlfZH`Q3 z=x%DEY-Uvb0Q<+0PMt-gSk(XNgnkNRbfad%1tZ!C%$vqHy{#>Jk2PH(dzr?GztqT0 zg-kgXdofbYlA+)k>>p713DP9#eM2Sozd}X&FHrrD)m_lU(81-u=7-RP4XNJ(hyvzb z(cL?AqAG8te5?fdkj<2kcR}bo98*npwj8F(i#PX@xBUpWMT3%b>``P0T**1vfSk#Z zlMS99E(NK<q>FGCn6s<~I7H6GsgLqVNf6-(kQF@_h(c>gQMJJUSues%D)ales#7%! z`AVjN=|Hj+{-si3H%4{{E!Z<3!Et{0ti|F?h)+#M?8NKNaTv4B{D;m%r<!V*=tQBa z5o3{Qbs>Ht6%qiCSK7EBBWo<HXFO!PH^;1SN5bA<%_!PW@k!tLtw@as;9{cSx>m!? z)F=fgQ)lYM)vkI9)<>jgjzx|62gyV^SHk|kM{M^EaB)5;3%d*S;)fZ0USK|Z7$J0K z$2?<`LUtuBe<VYO_30)ig^A>7n4<5rax|k>uqU0mmQB?BK3lrq-{O~z)Y5-i>Hh<e zk+$Y0{%=51{#QVV|2-i8!+czot(B1tQT_C4X=++!yFf{;unC3IbYUAEhKP}r7fUVQ z>PDk5>0xQ7AJyMLe9wfZP^TAV`11*tT&9J_2>n)_w;#GrvR}B;KR!-I7=AEadNYQJ z<Hs1a#}68#Lk+88dJh;a#g^eqc#so~dBqB<4s?W|5^!Mp(C>laShDL$t(xRG8c)Pl z2XGe4qhZpjQ{OZj>(Y?Q)4=^EWu@CyYi(@*s7Vp%)nYm?HOqj|YA@J`Bm%VokmiL1 z7}K<Oj+ti#SaUpa=jfVG$Sq5aQ39%fw-t^>coz0erzpScXHvWs03Znz%C)FYMF^Fd zA8ig;f2}+>`2Z5`@PRDZrkJh^?J7sKWc%=;QM^MhW!!;WhR7Db+PQ_ON2s6hd*TvO zTjQ^*fiFaO7yV?IX}B8In4^G63LGHH&@&Nl52<6<3wjid*0-A!Z8NN6i%7cDxEJ79 zhLM=fm?#eDug5S)LSk@k>)R<8$`6>Y4HONUc-(1VM(ki<ow4vdgY8Yb2I69LX%U~E z%L@f7$&+KiO+^@I@VPQgRm4zXY_1ZY<c5*2VO}kBkF>h-PjH4jIBdP@9y($bl`F{T zYqXYPg9KPz+6mIN7soR#rfhG7Q#%fe40WzfiX3%Zqp7rxnY8FJd>5tkM6b!mpk5_m zKs}HglP|~Mc_f}y!hgy>%Y^$zf5P+|6MJSQSPs~{%b9%Q?pHP65hdZn;Dw<?9TC|5 z9oZ#>#jJZL`3zW@3%Me;`{5Q{pS*oVF&qT37zdYtUYwI?U+4cxu-_oSFPW)_pf28e zQ9MNAR{^}^zS>EXK~Bz6Z29E%ho|Gie9S+N^~zzxKhgo>tRUhh`}H*o70Y747pX$y z#V{&HA<Yw3i6|)jSB_ygGvm!sUcz>Ek^CL2Bi($+J5tj87nGc7J{T-JQ!#Aov=qup zDiSxx-pBk>0OlCPGAF_3e@t7VT70m}-xeYT_P?$4RR14VqU`G6VDI$LwLetNT3J~g zRX3fNJ|tR*R1wkwwT1}vKpRGFC;}T2NU(l29K6kdmGo>1j&J?V;)>u5!<>5oz^wdR z!@RPHg?k}yPW}VUcBO}d)bhuK%rlpFp6~LS`Azf8QGBoeU%Wn`_gz7RB<kUx7JVWp z&$|r~l1R$bwI2DzRQr{jGTs(FrTYtJ78yv6x`XD#eCl_hQ4BwCiPs`<n72_Atp=-O zobj6s_3~YiV2IIGH<3qOSUMcF&D;mG73+(MtNL_D(PFuD134UdnzN(Kl-7n$UoUNa zr*TzgbEl7^kK6YLg6v4=!IWpt#R~SdSr-7OtUsN>eYLH9!qcCsD-6tuQ`uO=T=eqj z=*13PFE)#Yhm)1nN5ar39l_}8by^IZCS0hM7x5<XQCUgDOiC#o;^1WC#=8Oy<>B?C zDQ2RN^WCU(WV6c9UWG2~=Xj=S>Nk0B+Sn4O&&T%XtL=0or_3zw%8pMCE^f*V>@6Bs zSA1x9k3*XZq*sT?3b}-tnAjs7>A(tJ{R5WW@}$vRVEUCE&5S-C_0qNOoTAl@Bm!wr zqoWHHVU4K{;<B-S{g6F(Us&@5+rV&j4$klt@h*2SI<E-pF*ps?Ucy}tpVfLU?{^9@ zDfm5`?lkchX89<i`Ph+=X5zlYVo;eea{~JikX^P%DR%lmG#oL*1V{8}wHob<%{Sl& zu0~KBmfd!Amm0RfS!A&Cm7)|J7zC~?qBzLx(fL!AdWZ$fmnjvC8C~<Fn#;#tZYJvt z_wR_lYbJB7i`$$SIh2|5gW!Xo9)eX{v^ViJ%kr+!G^Cmo{=O*wu66qg2X@bpFkJkt z#%~m#GJ_Gbt~m$jJd3snB&2j!pZGFpFTRv^r_z-q)dhlTByR)GA_h$#Tk2D{zf3^a z3Y+9vt)<O0COh4h;j3G8INDY_2o3Jmv3AL=HNy>JdhXPDE2hX5w&pzD!QB@!&t^`X zePXLV&2y7$X_@%tV71;qm*WoTbesV?YQJ{WJV|pxA3?UPz<Ug3J95T|lyCQO>@4bW zN|PSo^lL6wr$#!$5wgc;fY;~|@({PN*MM<55yc30Mk7ow%KY-h;+6O{iU<n*+Qj$= z<fDl3L_M?9fH*C|-uF}~_tGsg&a^`hxU%<pP8@19e%(PyF?{qf#3nbY*#sk8>2O8H zPjCi1XmAGJ{&MIYK^LlEsj~2aZ`F8{vZxHQ4eZ+U6S5VjaGT{8_<?h3!Ikf3=gbWp zhs<jjE|4;-6F&=u01R6it>z|<Wf%(iU2yO=*+<p^<T-EE?GEGU2G;)|ab@-}1;fI! zk3~lHiLP*@@=a|nUgb$`&Reh0_L!`z>zLi%8>&YD%J0TaPHMG2Do%aL!M!1uI2d-9 z@JMsnGbpuZ44dD~7tOO_eD7;gVCZi{k_veC9sp=1Yt*|OueSADWRP25Sk~zib_&EU z4)0q1<EC!Mar4OeDIM_@DbO#kDx`Mh^!QpJyfGw4UU$6F|5Jyk?!6JQX?)E#R#1sn z1L}cs3~0VOP{cWr6+dZMI?6T4hzJ~?C`WFdMhrXFfzNR6ls3%D>O`X|hh>(m+1XC1 z6Geo7Y#l0a8fi|9Q?0f~9#N;JKR}?3JrGlbWn$Y7?el#Y@tQfr8zq7zgi{)_y`Paj zg{Xsz8n-6czrw~*dl>WX&yRFnf_vKZN5vhPd)YkQyn4U15tiLc|BXE#G|%w-0~hzf z%2@t++w@~FH!6>F1I<q@qM+oxCe4qdMzOzLKP`&8Mwg^%WwK+Lg(~Bd7@*J%QYvtY z%(K;a(tJgdAhQOZZG)FKysA@TP#l8N=A<_83w71jO-6X4x96)me=Sj1C1qzDo#+>^ z8FrHze*yo)1-f5YT?qT0*ss3BPye3Ak^TG0UB=Sc#q_^7SpP3+<#PkKa|6eB1J@G+ zFPQ8Knny01Z)#d3K6&rjpZ^Da6@|+i>`KZe{zzFYo_Fz;4?$jOSnNW!o?;XO*CUPP zi;IDMm+;vcEVK~=7bH#0U%a2}LKOr5zl=7Y4Os&GuL*j3@o@?InJHNs88h?fK^;M9 zOrqeAVg-H*CI;OdekvNac2Eoa2J#H4vcY|o|0K4AX5epmp`nR^p@C?l1||l<^Op*l zAR-`3j=+-S;Pn4NaJ2)9#74fy&HU{k{{Q+iN~Zr<@czqPk4>7B!xqF0or&mZ6H+aw zLq)6CQIOq)m}RXfm6d6!p(=d=f#rm5G|5<c)$p1l?>+^2ERdP8Yf>VH!uUJ$X+G1+ z;%xT0`Sk{8K;TLM<Ix<lLivaCAT~TI91bB1I68dY;zf^e!Q(~O;FI&5GB8yE=ZOrz zDdlH!4PWY!oXKKE6N#-CaH<$(?8QcYk(MI^XJbPRpB~i#d{Q226V~uG<+WStPrmfh zGH&4Juf$}E2~<YrB9A`6gR#+Tpf%0~zqB`19eb&d^2)jc_e^E2YLPQgFV;{?4d0mw zPD!%k1!IHU+6Rm$ne%PJQ(dYs+6KNA*X3@Ffa`cBfo9-R2>jco>20%X!Mfdd9i&8M zGhnN21zg52O7af;QhgWHY%N=z1x+#t2;d=e6Fa927hmC8B)Qt)$ii=p3toA^3gN_@ z^aXOKY+TU6z_omYb`K-v@{r189X-j50o?;Y8aJ6ek1ZYpp@myElFmE4y_;Z^xBWv! z9(h_>69Ax0pj6V#0Z=AVDr;r|$`e-el`;UU#EK<K@9CyouDmD;IZvjU+i(9t4em8G z6{^0GkNFPf{Co8A|HUr;%NT?Vo&TAUA{#da9VCDnI-_bm4sE463$r@x8Q>;Z6BJbV zQO==k65{x{r}g;br%JKV?7l<$&Ii}YhiA`^kPN6-V3a^A!=#kVnQ;|>9Mr{bc@tfX z3}>aXCmZ##@9%Xx4vz0!QVyM;kan|ApC#3@li}3{1N#}OX>3_Jm7J5RMUYir=3mYO zT^k9Z^A)_JTq9|9mx{KHLeIIq!9;<(O->t+apJd(Ki0WJET9Y*9b<a`F(b&R>0H%* zk8Ah)`S&CLSC%RxWBuQ07ymPg6{`;Ap{$Dj{a49m@lnz>m9&%qMHO3Gf}th?k1G|g zr%6T0I4(ksS$nd|8r=)^ueokIV&P#ZEY2ahT$bk-$CRIbUok8PZSfbUmw$WgzuIru zJUu0&^m}f)x}2x|uiH;@k9sgZ|DK|VEK;krmnY-9%nQqL?-okB%!-0N)<sVjiD$cv zipoi)&9<`+A2K%fP9G|gi)*}LCXWDk`wuCTDFD1fhdA_oxn@V^uTNR;Z?sunwIMyC zGb}e?<U3~fc;pPsf9R8M>bGA2U5ABmk02D?lVQ1LYcw{esu<m3zgTYIj=Rr_3GN^0 zj=QG5whiy;dwWK{w$1NJ$O#z#B#gxa-b2RZ0q-$mGl2IX!`?&x-hKbxWB=Yg|K6h# z|B=I&p+^XekHk+EA^*}|)CGOrM~=5n7=|y(Qh)9<{mZ|-(P#YC@A`g!^y>+ELn+ad z5#1GcQQ^}mQAOqUT%wFHY*ERE28L#o$f1+RhK!(r3CFXIDwR`sL__nV%K6dNjqx^? z>aL|liV`#EN4Jg;E($cX6}FNvZ7!zfEihRBygP{K|GvMLP(UMP|6QO#T>ShRzSNd) zdE#RGVE@t@`o7oCo`=6M5G+9D=-S3n3NBkREHFwC&oMrPePk4?t1CQzPWWSZAZVPf zRE-5VP0EMo_nVsP3UE+mjoBNquoWgu<>#JGl4@iiP>W`h42<;~v>?2^`NEn<b=n5y z#r%MkypcyV_QiueR3OWSG5GJ>;npRDFP`6XA=e8Z9qaUSO9xVEY)+D}y|9v@{Fs+& z2aaF)>m@_3Y?F5FKd}m0$2PFk;j{Oov6pwp9F4HbD^V*qenGU97R0vaV{x;0ZH_YC zVsRtuLv+dGg;k>O!p?pt{H#ZDEJ*3eT2|%S?!A5lZVqSK4&PTwSt}dXFdQRjz)nuG zCJ?1!niC?&QG_MpgW>zRyIw+;E9!!*P?Z*NgEwWYBP}njhJjKj7L+OHwiEy1VcjyA zIb5mkcC&d2NA>_uEa|hg6S7>AoT`qkezGQ7u9~3}3mY!Z3FEyNA<VB7T&BcRDN)w> z&OuQ`Z9jL1Zt^)p7Q=!Udn4{is1!34iq^&k1_tTX)p~yfO~P~#Ozu#_ep-%<fOU@2 z9H&8q3SA6<HOykig=?;vuS=o-txKEgO>7~X%H+z~pgTpKeFnaxhsmbaLifO8(o${5 zXo6x=y|I`<h){+_-SW-4D>j9BjOrtrojA$^M+vo%ffJ<2+y6+(KT9(DHyD~H^P{KD ziP|@_n}nOQSjz%&AjvkXpgPs6k<sv~ml+8v(+lF0h?0B~xsoImjGlG{9UnXKiwnE| zA&%4#(5-SbR56baR12dt;*KSLX6Ix!wk1V^F9i;tm#TUcDW1o6?NiwAqbXEUp+YU} z%rH=z%=Xw9lvbg6gu16`3I&FZVr~zRlquj8Boo{~!!E#szAA=6dn5IgDv)0=M}4F9 zl`CMFi-q>hrB@n+#a26wcIhUz8g!IXtcu`P{54BvR4SCt)ULxy=|X0$J7j{9OjrR8 z7XZnjn^NB^cg<2Sf|{BO9YAb0R}z&$cg!hTM0|X2W*>y**p-pKZqtgM9$Er^#H7`S zKR5Ws(b$u&-wnMraBBuB0weAI5chH$XMcpZGt9F+!PArD?gQaQdmOD6dR@$LKrr%0 z4smYy>)Na#{#yBz#s%R#<fWmAjW6i8-A`jxp%oItGEPAx7>h+JbZVnSPQ_Vnf{86H z+*Ef#;1Al<Ws++V9oLBiZf#|8txauYZtGpU{kY*pPWaiH&@G-st?MOS8sDDnRNss2 zeNs_cGjqA)<X?&X7O5}!SB&$S%;6USbaSZK#We?a)~RFjnK_lvTk=KFw#G|N!b?ir z&~R&DVn9?zk(^);l-<W~bQ`nCIYt%4>qE>e3Spy3=c><d%u_@xT#6<=oqt-2{s^y! z;{INQPw)74U8)V7Dv9M#RD;r9!c_Q!tXwc!d(ieovV8+1YCD+}1_En9GO?js+F~zO zW-WhP40d^069&O*QeiZ!Dc92I0t$Z2ah5GZkInPbSAl2(@8U)b#yB1h_%Mruhy_uc zz)qZ&iG`S6P#<Bnd->FMHZ7tdYye)NM_aR?4m0$FE3hcJV=L%?fym+C<nU79k@&$a z)I|91QgKyOAprW6R~sB@RjfS0@HeiM-G68d^w}8~f0tu!e97tYi&5{+$I{@7KQ>y; z@SvA(6S2}s*Ho8rX4eqkg}n$gneMr7a<ZBR5UrM56Zr_Ggb;t`S5L)^-(3y1i8^BB zv+R$?f;CBKGw?1=A+hVp18hXt#_fp)R|>9omG`s}D8lfiL0z6b5>K+Lq0FY5Gr0Sh ztQ!OBw7#pmt!ilCoelCx!E&)M7{}i6PMHx|zR#6o598GyVHPc~<E`7CbD`H&U|b*t z2cymDHwWgh!sr*CB<4TdNnY&kNrWKyPm1&6@zx(Y3-Cp^y9%k3B-w8;Z->#^PrZf% zV6lg_d1z$@8rQXX#6-7A4liHg6z_<r@6d6HSAZfwMFnW`B~&CsSpnk}F_pK*!io#C z%%d>3*?YFNI7RcuTA6~Pbt*v8ODZIEx(N$OPBPNX=+dt9O0;DqV<Szh3q}<{$T~bS z(#}Yv@XC=dNYs{c^C_&0WMGYmM{B#gNl6e&X5p;B%ow;jmiGds>qHMf?gD~g6!0b5 z@%F(&;&E3>coU#`O!x?Ec6XgpA(*G&xquSDc6X`MAegt{H9<!scXy}5+{3CFiBy$e z=pVR~RN7&~Rfk^JNma}4R3(H8lO3C+%R}V)6X`^aS{8;H@Iifn9+5j1T}&jYp^{jQ zIb@Tc1+4H34$hNQvRZgV&*{XQYXpF^p*KwlmZWmF#-%hg!Dy-iJF{ygRJ98d8^Thh zEK6#)o05y)=H3*u3g9udqM<b*c2gl!4K0{}$v9EN3Y^$e8kiTZCjoVHp@^=(hgAut z#Dcemy;e^{V;c>OSHv6lS~hO`#RzO{KwqpnhMVRL@H<iZG@D@vqynRg&t&sgj#YAV zYPzsOJ#@!;rX@%ql3C69xjNt_$RIW?CLJzyZl{I$auMizaFwWNi$6`OkJg3dAY@Qu z*3}+^w-bUqWJXn3AX`razt5iy8IgYibN1V%IHTltZjMHg;^~{qhY|G&Tgd-T)4_N@ zGQ?gFecxZ#7&&5Lkj%By6sK9WOJ?0j;>Nr2%WPaU?71#DqpfWn)waSF=h8EcSmIq1 zB5ufO6L4MB1x`ZBj5}V6;A29-tALU<Lt3B2c8Ob<gQid0$N{b1JDMs@SI^ROTkp2P zFZwedd)$Om)4tg>x}jt@E&9l^)dgy&2R(M=@BlsfD|A>j;Y#SB9Xr((uJW8aE336Q z2(Tgx`T*+PgpNy+2}9xV;ML{{Ldr2Pl||SKhutdBf@60bnAJKk)y>Y~eu5_(eHr@< zPx_p*dpX9FDc2-?4g9@5Y&Z4YZV<i(G9ln>J^Jo+mEaB3j*#8$DZVh~Hu@0|6Xfi@ zJ=Zh{@A)GEqQ9Nw#)5kYp6kb`pu?@Bt&o=NC@M-rigWYU_6|Hy`XDEE@@nV3K{}IL zJKkT)I`IHs*v-xdBh%Pys}X##XGw!RV2r$X^5v|7<v5OCF+B10D`kP+;Mu-SJA+e! zvPDDC)gGC6x3mqnTu^NsFtfByKXM^<!C0$&@9TgN7y9<by)s~|Oou9eH+e1iWv)9X zEUUPXTGkve=IGVKZ|43HjaN4J?-%4g;G(YLd|-5a;+HYMEF*UC`G^Z%oO;I(-l6-m z)$=(J+?4yL8{EJ9@Yf63|KaQ%qch#MZqZb1n-#NS+qP}nwr$(CDt5)TlZumyom6n& zwf6qb*=x0Z*1h-qcw0--^5cExGv}CN^wE1Cr`08~*bvgTCv?}q+ptUM^*-v|5o&yb zIKM|u&Ld?cURU2p9>^`2HVwW{Gi-7Ce?wEG1fH3po|Sx^oT}vqL+OURl#1^Kk4fwI z0CV$Ka}e>t3p$0<rq}^J;>q6@^zy(V^niGIp-sH-8STx))^3_)Pz>*XaPZ>h<EP;p zir9&hq~}}`yaS@@3X|YobP0xjb#RPjpyIZK?-JxFTev%hyEEdST?yx-!hh!bqqZ0e zm#KsX5WCHB|Eae43aC8(vsozv=v5k+nf$H$B_j(gfEc0|ME?dINjqC_A4Z!FqAwlY zkM===tn);F$PVfyE;HDzozZp;gg>s%BO8s4jQ-xydFG{(^7`!U1wr5E3ny~!zWOkG zQ(q>}8zW;qgBtn1?-f!LMM4s?%+BiE?F}DJ4p5gC<CBHjvH;ZGsPMmyY|gXa;{#0& z<kaOXnu(0UYQsnFN0WIYqAU{X@fgUfXMg|dC}dumqtm;~@}0GAq;2Um9#iUw-U7<O z<wJNFKt?e2EWx2DsJ5>!wTz`~#ygp5iFnJ>7geHOsQWqMU^#}k4+*A`U@iEllBmTQ z?s@xbtVa9(0PRc!9~y1W5#2eJ%93L}Mah21Z_?tu%#dxOwx4?rJTt3OMff|Lk;<HE zs<j_rA}<7F0}iV^A)ttb`p5p(-;3CPFZX};wiGvHQ4~;h%D!jFhN+JKAX2$xhYi_# z7X+KjXYDtH?#J98Y{tz@<g_VOTI{`<QbYR|LFVgEV6y3j+0go6FwJXr(Y>r|miO}V zYXbpjVs(~27z|D#T|pE5CH?1qVxS2elCes)eb>OQN^N`TUPmO3cTdG0I=LN_uUNkh zSQRj#T8|4@qE^^)LQ0K>D{1FGr%I<F$Ki`;Lp&WfI-*CwwP{0}4r=&8rR$Oo3MK=m z_(qA4hN~LJqxh|Xj~+BhYh^1<vu;{(lU0gkFs2XW%l2?}fpT%@FAf}5^jA--56b5e z(J<j;s>f<gDONDin9qBKt=H3t)^^9KUX9t^>{cZ^4wIMi@ok8_anps$(J5k!&WY+0 zBUlV)X(Q1QdQtbZ1%?Pp%ayHP0>5_oIVaQ0aCn-sOPx8v$o0<J!dUQrwbdD+9*<4q zOf*Df7DPymRB&P8rO^x6-AInmkU1B((U`2+PK{koC{`t2B$G_!P!hmkdGu%wSuz)Q z)5V{%b>W{ZepG(aTw%}SDBvsIlf%u`VF~+-@pn>WJsFNiL4(FcEIV+@DCzhc4ry}- zJPUILFxO;;Swa#YE$Q9=Vk*WhEcbda^{j~L(^JiE>;r1p8<Iklyt~P${z?%#MF;82 zT_ntHAJ6MqrmLifbk52meM_vn6s^}Q&dwH_u}=<}k-<8!m8&R>P5h<j={%#1JbC|- zdI!nF0hqL+6^UhImY4Vu-%|0@-`;T-HA+dG%-mvM`};ey@}$AGTFxDPru#K!!z=@M zryXJ`65|cy1qi+GpEQOj+xm4qz&4cy{in!4_}?SL|G+N)CYH=FKm&*jV6%MKF=Wu_ z=z*(N`}lpb;VMIdvz|+Y!ULkFY#iAk5ZCgCf#5VWp$K_wAa~wd1VE{n&nLejy@P}0 zpHrivgdGVdj~ZBMQCxm1C6s^DszQmCWVLN!M+_zKSu|8kLJaiL9nD~~7!JNk8>w)y zR!>#au^hOc`4NgJ%A%OT8nK>J>+Kpmb|px>vhJA1Z?3XXyKU|Pih!3tZkwZWwZh|R z_s1bk>sv&t0zB6#;PVIG^54}kNPl~B8w)3+e~`rdeWCvRcL613QAdDaiiF``3+1Dz zBZVV?%41~6s-adhR~fTh%sT!WU?uErfkdK=IR8k9Tws@U9xuH*8JZJOz*mJ3vm12Z z&R2Oqt$7i}S^qQ*d%Wp%nFDB8Kf?EYY1KJsQ1%a6p-pYr(_a!nx3i|;P<N{Dk7wek zs0xF%f~%EI1}!j;>*(h{leJ&&;+A{n_tvLi?xkKp5p@l}RRH9YSgdat>|EbMt$E<V z2EB!-ZcLcXqYe_k6L)0bNudqzd!kxZbikVQ&K<9C?;4?mTNOy#rvUS=`Dl*Y3>Os> zPn$^k$#c}xAmESVL)+sib9W7r4Q?8>qaOd{sl;!UFBQ#u(5_+d@9&hCBzXw8`o=u? znlwEv$jeM*F#5c#d+PC<xvQ4`=@BdSE$6o?acxKcimRS8?9|HAKyz{GsdM88o7MtU z3I4EVzMx!sSc_`2j$&?rj?%qHddVH`1?#D`-R2ff{Z@Bg`fGyY5#<pD$d?~#>d#?( zgwCOk4t9Z)bjEyFW@PExd0(IM)Qa`M*hwC+PjQi+($#+`dm-7?U=!vn!hQS+&Yu-? zq~rkNx5q!mZ?^xoHU8JTmhn(_G%-;!u{JSswy?AP>rshO-cnqUNBoebl)(w&FZl`# z*1!*w3`9jFf=UIc8Q%a)ysxs3zfNy6FQJ(1W#<EB*R_l_7(IOr#2biEbSYu*oKToC zwsxMo_3qls!@=k4!v#zq;DTjvA2u8N1?xKl<^bLh3GA4;s2}2>VC-l(F=3DB4@NR0 zTnU3LNI|smV)asz%@lg#pI?OfC{JCj6AQ?Tuw>U1VYt<(E77*5tD@Fw(4?xaQH3Y~ zojKCW6A$Q&6}T-8{qW(sa0zRs=LORMre;&;AiG5>4qF?Gc1De4pBnA`(?nBLj{riX znRAQZ>s(8|RX8FkS5AWp-)W|sx+d>pZLuc?4i1x>OsB^0&~y$gI0CW|Z=gHqtMWmR zpb*d|2}uof`-$aias~vxq2y<}&<JW&UR*j#9o*5o8`$#q8*wMpm+M1W6mYB5N25W_ zpjI2o7<*6eO3_ld6E3PuN{-S?vltV$`r6mVMB8$0BG&7`xh1m%8Fy5#v3|!|mxb}m z*dR6wP4J6%$*iKJrHFb*Xopoy;L6HWGCYYQpN1PEw4)QYE}LFT=J{F;O_;$ViF7ld zyrs+*VHB2rq!|JXtl2USmwE5*Gj9fwAo*reITO0qfuq_#D{yGayg|)jqgq+|(`60` z;0i6PaRz+d@BqD=Z?yak0|kF&(tbZtHe#@Hb{t&6L8EMAAlKbVBVbCGq-FD(-oXFk zogOlCyPo}sgo_ZLpj)R+!jsJhE|Hez_JnZtWL52%H)+^DY8gnvJ(uT%=kXJWPY1nk zIz6iNf$rK*>~5M6*kDY=ep6&L<a{p^CL}pErWDI>D3AL!ynv~8WsC*uMlP?dwdbix zuGcRyEUH!MSpd}Hg0M}uW3UiYl#i^U0d`ES`FAEQ3&CqwYGE5)X8x$F^gjMI#2*1u zvZWQa0dOK<{*jOHcgEXaBH+K{pR$h90zWE`loqlOkk;V@g7BN96d@56ya+1rsv(Re zwfbz>?4^D-vq9q5lcLYjG}qy2c3#d8ijht@3W^q{Zm+A$_NQE)&NTwQUT-k^05)h^ z1MPv}K=>16Td8zq#6dhT1!+pmAswtI)XkCRU<l}r{HQT314d+1wEMk+XbuM6#B258 zu0SXCc!N>(<a!b#4gEaGq?C9gObTxbk8F(gDe8bjPLBzMwm}|nmg8CT)zT}cJi^ul zEgBOnOi~w|+I@&pl<KTU{5Zs?E7+X1lFcOR2%^+d^JT|s{aC`9!<~#PnJv~FylzbQ z)TX2{rOJy_v=!d-vtM^V6v^7B5m`2=%uc4X;PtkuY@F(hZ8w-vYBEv>XX|X<wd6>s zMBHYou1%!;J1aID&6b~o`zqT4&_c)Rty1i+E>2h`>Q2PUf7u8lM#y1>eo6oob>qIK zoSPp6`TU&?A{kxuU}#n9#162Rpqok8(m$NK^xIZ**GWK>Q56(#keg?k2$id|Qu-cv z!v}DRXQEnI2D$_@7GW4dwW`|T39&e%CD5`)VXk87m0*QzvKWWP@GNW$jZgckFV?l2 z+baxV>adUnmq505$ZsA}29tY~;5Bh4>r?GE%E8+5-;a5X2P?&<fDMabG`|@zkuN`c zDXQ>2eAO!Pbam&)NFxJwu-&626&gSC&5uIsFbL+^+!@md4cDk)Bx%{FY|&XMaLh2` z(%bMA>(+wXPi`>aP;vX5QDgC>;Un=zo|8=W#z(D*6J{tqbTlL@gxb)!X~VL=Q8<)E z>WqnoWkh1w)?~d=E5GkJ)cVO*Vnep#kb)m1br0t@>kdY&&rDpX5Lt&8Rkx5Ap~e4* zKIL7UR*^J(xTp?N9TDqT88B*zGUtfW;Mfr$yX?=5BC|v|GZbnlG&hvNnXHVW16;X0 zmlL_~m0j}d<V89Klew`der&t&jPhPT8nd|KnBCcvkm>&Mn*p|2eDPBJ2)QS25wqg) zwj+qyol$~tSL_g5Hg)kBAHl23eMI@EF!ME+rD1(GCeb{G>PV4`_FI-*=s68fDS|`{ z$KGvtmxpnKKQOGKX?2ML_8>FaC}8FsSuae@4j>PKfb5nK?3DmC%MSkWRQ|nf^yjIR z{NsiKTv#%8#wOPPI+`IWJ4z^Om^@OfYly(}{EPCl;U&R{kokpyDS{-}aQ)cB@Vx9z z612uSQ?*TNU%Oo2q&Ss)ZUS7_8PB9oQKs+tPOU!uTaRs@73deo&bKx@cig65rrn+{ z3H*A0!}YO46ACkI$LbcdNP{w91tKV6*E)aoufnbcW55$cRC4s?3CF><1!q7JBrgq2 zw;B27jW%?Fcy!$o>H!CX%?PbL(y9Y?eA{uDDcfP4RZ7trYO}O(_aj9EEI=#Nr0qM} zJ*jL2mWOnDv<?#V^Z}d{Dt1evz3P49Sc-19qJ~4T`koV$-J*^Gl$Zcff?uiKN!IBr z%%G-R6r4f(Y1|(7$!>=|lgeN<1*WZOiA)a1M2VR)Ll(}9yNtlGfa0*NdNtiTkrRnn zfAoX~T0?u+BOh*!6U!0r?dC6;W>h5lGmnD0oPm$vTCPG<yKwZ6d+QTZA!D24f=g8< zl_Mz2EcVOH3GNwYtVKzZEf}<mP$hH?Ay#5XJ<%pJ{EaqgNa9c~gX}>Muplu=j#hUa zw&R=!(U=;IO`53V#(n4k$HAc(&rQqp(n(!opKolUm>QcVRdMpicw#%2>s$6|E9k3P zlJ9)0-RLeqsyO>E+%+BtkyJ6CNTe6{TXK$G1AxFB5PE)Mn|A19;2fS6Qp$>7-sqcv zBi)k$!Ek7k#)fKRKHc~`RuyJO_Li^TDrm6DaN@aDWiPg_;+awFqS!9gPFjqHHIPj7 z&eHS}Nya=lPnD-FjCiZg`ZTh5XKAuJ@@=QZ*KoC3Mb-|A*OfThnZcF$UaJnZ{g(Ce z>crGS%(9)M7!!<@pd9zKG;YGVg|kS+a(yMt(7uK077fltpV<68b2!;-9|56=3O#)r zxG9Re@xm9%8=L2py3esR{F~nqLQ?Ss%%+H7_65IZDZB&Z)7CLrijR?BfNz8sU+-&q zBxFD#ch9tE{d=%7y+6$FdInu&RSrowckEXVU14v&bFN0IKCr~sl#96?B#P+nkWzio zn2Ox^UCUx0hytCRX1>zPpWcf*pFBhi58pVA7o~b{U-S5k&K?P8*g4sCi-*`7AUHas z@x28SgtFnBr1gP`+agHhHc*>r9l9$<^6~kul160WJ5m*MYXj{x0h7_5(ns{%D-u8I z%3qJ-KcrrPk;~JCF>2#qsdPF;?Mfw_a}L-j975*+R)7+}Eq6l8io9kOAr^mvoXKe* zD=G0c*ONRz2b6zKc{$gLcDUM`KFRMh{|4VYdNPmo$u@()Fjo)typ-2U9lyE_az=>S z#7B7k4en8$-*-;9yt2sM*J)kO_rkQ^D(C!yG-8mt4m;JzO>h+yR_mH){{X`Lz@og9 z5QBsb$$j+v%|^Q<M()}8U;*cxa)d<mX)qL%q+-Kwz${_3?t}vx!Q+KfhQfjL@Mp|B z%pXz6HQ5P@8BjvbLHtu0`HxXZ-oW;MqEL#GmK8R@PGT5SZN;W0lNkd=X+hh$$o47? z6FLG>QUOO^@wV;kE6%cx#)$f-;HON1ih2GY0xBw=B6KRr0vfOMyBwz@uJ3=~9&SJ$ z+2!FzQvI#a1g*+L@yhi@hFA!K#l?ZEaC-%dPsOWh_W6QIx!CY3#R*V?X$E4@jnIy; zzCRtN5$SZY*p9@CHoj-4-qecf2N2pDa-_NsUbFHTr7?uwQ+CSOVwhULg>o5MS3730 z1s`&fR#CSN0_@fkA)`<S5h*p`>+aWGE|(@dWWqIFymW)|v=k#^l-O&QX{Ez9JS6ge z^4`K$-CC#n7-YBWCV7!M?LG#BgT!GLI;o77k6^3TOJ*C9*r7P7z>>)9E?TU0Rs4j? zwR8_XhP7f+Q^v`)+F*o&qq|n@rv{9Kmrf9&O7c=H5+#)pTg{z2c+j0N*V+nYNa9;! za{7g;EjbYy+@UQUsV^@5%1vt*m?AS`Eu;1QZiZ4k&b*8~vQ?x)$K5u}%dpR$y?cR` z^2p~s(^N5C%=o@z&6*Y$SBUjpPYC{dTU)bx@4lz<k|-xrr>>uL$SM0V>>|#1h`?tR zfynnQ2fV#+#^?dC86neAk|L40{MovwMR}@5-iFPTRwOGDzd`wY_(cc;PQPF4#MCnf z=fzH_i4lYL2+sBLM}Qd>5H6l01eavu5qZPJWM3&e3T>vWA|@bs(z@D(pByvHfJ@*} zjbS=ee-*5TvfcyQ2qw2cQ(_;coo)zYe55o?^7avb1OH=JzDAME2m>-!aKO&|KT|6H zj>E~CxJg^sn*0TalabrtNA$@;*kB;zhbFWTe6h_59!}dX_cULU6i4EbCnOx|CzLWa z#x=HnEo1iw6}2q+@c$^Uw99FZLH5kZ@cC_eG&TM4_HY5=&x(uE<Zdu9U>RU4Bl3%r zRr;X8LSO2|#zYs}y`-zAsGx{4{;r!JI-KXrMGc1g99IBor_-fwXY3WY&#}{!cCKh= zjF2NAtmnbBOL`-Lp0mmGkBe8~aXFIn3fOMCBH8t?R&1++y{}HwYm^22yR#2Q9;Euh zK|vJvfjxbNTbNbs!fs%bK?1nB<8rx{9rbj*m6`-~CWtL)8w1?vGyua5`JwC(6J-k9 z#@XM`=hC5(o5&QgY8qUv^+7A+%`ar+=($B?@(w|x2sydu!#-x&a!C7X#L-2Lj8olR z$pUivBf0n{o*e}g)9U+!Z&&EQHh<Bu(Z(yFFwSE-S*|0?;S4cB+qB{nUMe0jX)=kx z(e}jOVu-z=-_X2EkJ~My7=MtWg{et5=6_)DfsYprp?M1A*=-Yh-LZ*C36w<1@s(6O z`kxn<B2QE)Jy7}vZj$s$e=s7^nhyC1X}i?;iG7?PX-dfHQ)oazlO{O?W^6!(sH}7P zfK&JW3DA~Hrb$l$3Vh*zWEuS(%=!1m_-iTuznOOc+T9;=F;{R}09!7461jKLF>kU9 zz_`=+E90)b%}T>kH=@N9Q{KVe*FwRuQp*%xz5!BsoxG`ygoUm}oQ}GICLuupI|_=P zG#VE8tH>)ygvaUYhlEDO7~l`cquBaXIml5;YnWJ=Sn2-hSSOaE=%V20;HrpG0dV4s z4D}#@{SE=SW<1B74nQep{|#~df72-ai$?TU)IV{`7KH(EWaQh_QIo_1dS<ZvKo}%$ zCIk?nii(${lrRxH*EV6BbyvcQR=<&h;9eidwS0KP_xNJ1YlBaGFW<ZGE4g{SJ)c1S z#O|7*GACfy6#gS$xDDjpNmH2Xu&f{RdX4OlN#GL%d??U#i|;7Upz=hU6`_nmh-*<Q zOkp|S3DwBvgAmJ3t?B2qcTdr%?&dR-Dfr)6TU<omXk^fr(UoIgNmL~`%RKD1j1L-< zo>3}GR2ZtT@E4#Oud{J(ZU}zRey7>it!N9MauguDn=~===@$qXM!-fHS7oL(w2^Iz zWeK``jXh2$@ov3cX^HloX>oL0l(m-yQ;cQ~RkRnPiBrTD0-sr)8uqx4yAZe)!J<`7 zGSe1aF7_KFfuPmV^hj&?xt>$vBt?q`%+S1c%P!l}$7GRLpRsl4Fp6<MAeQzPsb&BJ z-7N6IQcDRAHvvafYZ}D1Acg8YcEQb?93c>b?O87%BiSvE*C|B&k_68DYkt&x)AI&y zRSmjaKpe()E;TvdJErwyqkc$c((*?fSg{J9DoIU$D*|=G@_YJL?az;wUiFaX(~-*J zPTy+Lj^mN@pHH7X!V@NT{b$8)KXYel1Uz>~&MP!$9}Q&Y;WwWQI*WDqTE$-b;x3Z# zI}QeS{@6NJ3%EX)fD@wkk7WhX-ypDmZ5<&yTW3c*YwQ1^V4B1=`~eILo3UWWK(n$M znxSMJfSjY&fP(dZL`RWv&^ER|JD>yl7NolM_2LXPuy&@aPscC7hz1A5*9_MTB%ot4 zN#3N@j)Gj;*^o(z7XlJvjUM$4BWJ#JL&!%zWwEMAd#>9%hGmR3%7Tm(BnCE=o2p&~ zehsKoHk(E;KF9}aG@Z;K4zr+Hnbh8VWIOB)mrV`Pe*1=#N*gfiXxVwCiQg{-VgDUw zha*_`qUiHa{RKv$-$xVR0f7L^@PEEN{+`qPYYG0mJpLlRh|z@6P9ACD3)4|weRrp# z`g%*h*OC7mc_RU;odO91%uCPE)<<4F5ZD<tM<Qcwn0REPYh#o(oY~46M>Ype(-1?} zdNjv8)&2dnQ)a!?VtwPWwEM!w%Pwp4^Q9+l%kHO^yq}lpbVkN!b_U1sWQLCJ@9P(g zaPu#{m&JqC#dA~Hm%Fg!YwSwtG!SN7lp<!1xZFP^EI65#`rBm{olP@?%D5<%%uLzY zXCyc{ldg7w$q&yar3pg>O*z^|C0?o_DP8R&lAzm_N39dIiF}UO+a@JS=F5_gISC!2 z+;f9?Xfr1c2b9Czd*Z<asX}N_8^uQrPaB0t6$#UzHOLMcnQ4sLt4%`gwK76OsuP#0 zQ`c4?D;#eQyHv$nf~<<wY9>2mJ3R5awnbRF1V%+6R@z4=)F9Umc0Dm{4!{X{31b8^ zal6(;;5N^9(J@#YtKz>2wsN{>MQOTs#<OCm+`vQVofg`7rv$liK3kGs=#!>wlx&g? z<&EPhx^h;;bQ;?!6LyL;*v>VHp<{>-B3(LM>ykg%*JYdKi3bY4hQLCuk&}=dqsR_Y zie+<Cv{82Hty&$3BaABGCu1##yRMAGu8e`}&^5+Ec?HGegy16IIuNo!wQGzTK<w=8 zYGo)6yayG?rcjpo#`*R3Hm(qy*IJ*i7P*S5GL*PIKrFrTvloId$){7QT`^-q-K*N( zhj|fw#Ok8GGrqnhOyet!;3|#O^qnCTsHx^*!~gD_^2bW}=(ePnMZ9&(^fC@v>M4z1 zM<eIN#HEI=Tv>$Jb9S-h^mwZ3hg_)k^rN50sXSNY0`H{GdMl{MwhV6-V*4>Wb&^N0 z(%Zin+9NA-3Kg$abP;Gx(|6)0q5X;8f?%Dm#0kpzj>N($saM2cDf?C))F0lvV41G8 z!D}=d-6l{ohaSN8IN{jNtCXeh`UpW>@UgASV%)vCZqDV&Wr^eSO$)nAS{njHP>Vf~ zQ0u)rs1i;g2I%CW#WQOo>-(aY$bhuP_JvE0f&j9TqEE}Bwe%R=QcVj^NJCNHaPx0$ zEs^-i<aPNK<cs(~mzdikAKZ8ruPp2=t&Q%fshBAusgMk;Mw_Ln9?l)`gi?VgbUPuX zCbyh=S!YX&JE)DGo{n1Gw2pK}v662!OH(x+>IUPnk>3}WJ-dJ1hdP&^+}T>y)!kW0 zP55*E!uHvIEIm6yH`<e~re<EPs#Ss@;<+AO3ef+m2xjIK=Qie{m2uwku4BI{%|X1Q zuLp51vx$i8r?$eGG{}h7u^(&ITrf<a%2JLSZ659>S!(z_<tDCGY~*E+$9A)g;bOhb zI(or|jJ0~y#z4`bs8mFZC4CUqd(6^YJC9*sYif?H|GABK{W$}ZZ(6~K0{>}<7B5VN zLVbUe4P5mycW7aMw$Xpt5<cBt{>i;A4rhNI53*t}HOQwPtFu!!ID-gvBY_7Jv@^rn zHlZwP69+J2@<@Q80o6?>hxMzB6}@17r>!BAlPDK4t(?%6Lt4<iVzVv;Fp?3K!LKT$ zFPo*5EemKGHDsMbI#$wKlwTmZLPAu)U%@@8t$-8ISsEpOvEpqR_ADYp8ANzaG?rgR z03pL>^L9i#d|TLr!cIN`_I^iNo6z(@Vyf?h3IiSRd2QT6pM?@N%@nh|15DU*FPYn} zhQALZ+LkZpBe6`+?}Fe&imk_5pF7Z;ta@>RHO}HgU4%7D9i_Qs(FUUEL^NsG#B;fG z?Q3YR-Iw<6=9{I)gQ>~VBKn92S5D6Nsc%wJ>1?hLJiCm?zKp2Rubwl(;+brh62JJh zQ#UL&udTyQtB!r^&~IN!OMr8JJGsX&M^kGfT}(B<K^89fLo^P`a00b^BHjO|^&Dg0 z!xx8+)7SINx>i{D(SF)^AElG5d!~@-1qY}wlw!sC8!hN9v8Ta&<U@IA9)1K(;2(_S zA^3%IlIN|`2B@#FKB*PXx7q*><Xl;Xsh;ph@$8_pbM*R=ws?Wqi4*je;CCu#93NmD z%LF)TZ=51Zt|K}Z$h<8}@t+$n@N2nw6y5+0`fQFf#JOFy3YGVF>s{*mN<p#WuphKP zkZD7%etMyKCdX3Vlf7pNe#(9p%v#;sg!qc{DV})UrwZ<r5l}dD8QgXTZxSEq61u^> zaO0^xLw489(w(Y7cb7MK=M6mFfk5+(B5*t>LHkAW)m#t0^`&1hgn5Q+7wA!VqlOOT zAqi1t9yqEzH@$@q<n4>;zd_M`3n4f(g7(Xe(;yn=NEjG-VF>B{dJrYpGZaVY(Nq3Q z<0s0SNoiwLr!SgscAosR1fkpwiZmF?fi$#VNS^957U9e|Cp4LOGAi#_nf^K%$bf{~ zZ?7t$t+vLX1atFHx9FI0mY`0zD5Wx&=gvrC2#7_)klyhbD6GH+w5v-5G%-4(C+?82 zm*&-j9n=r(>LjsekC2%@(37>GFlzZ=GpJN$b*ee7<Q2$}ixzY(wh0^3T=x+~mSc z`Dww~E8k!qKV&#BckLurV4!=ewN|O;A9Do>#)S#y#Q@g2fUnH*(He-+Uj<D*n9BiG zI!Q@yDI3Jo1oAjpaSx)+v@g?-+ak&{k<3k8cB(2cQGIJ!wPI)4=l<P%4N;e=H9#O* z&z9kX2q|ZDrK{UAFO~H$bSXS#uc@X{(Fx;XPjb*)roG;`=!`?r(af%Q^HOOm^={*- z5@L?eu306DYy0aY)xip_m$}KBzjwh1f$d4y;mKK83r|1ZC3GbO(Hsj0m)GKSHw)oX zFUGj}6*ox&NRfin42KkQ>DFtK5_)1~T*4cjOw3^(82Va`MLhNtz79ykNxZ)3!f!or zvvg7Om-+IqnLZ{XFwL?rKcN_N+LO9q4U>*TP|7$i$8td#(y{gpM3X9jqp%Dk5~+=+ zL1Dh>`8Qb13*AuWRZYA(+CPF4%`rF4-YQ@QN!}p9mJ6868>AS<qMY8?q+kkef!0(c z`06k&qrmFB3$okSP_>q5*|t0zaT`xs985rYxY||Qra~yyoai9sHN_!-6tzFc;;k1+ zfq!3FY-x4>a=6%bWVr)Q=c=!qxw+mp_A4mAq@{iOyTF@RPeXWA_tC1|15iRc?r<9R zoU~S}hTMB|QIaGLqz2d^p0Xg@f&md#3CWn-ffSa6M>BFpu<Eu&vK!XnmZ(RZ!nRei zSTr(6fhy6{g5-glX2hE`b%M7ADI-^naAQe|xUKwjvT#T`{(`X{(5DE>C+Ri0^jlg# zpY2{A&}VUkAM~4=^xML29>dK{AfLsaT)<~#gdhA{d;|fw-};ar+*^2rAO0H_%BRcq z4*d<CKcCg!On~3qP;W3ot<qweU??iiJ#gE|Xe@dmVBn--oK1Klx7p~js&D4GP;#_q z<RYF>a-?VGVvf*(piYA4E22q$F6Bct;kYP|*qKtOIn`OaVjipT0?(lk^M3K;*4D)B zAZR;3-H*j6%9vCIS{?8p4cR*ju#Y+tx|+hN=1kXl?6Z8TXhBvh3U2-}OtI$WJKV$W zYMHzp*G%Y83OSO))lnzqRe6VidFoJ$R3Eh^D9Khe3mdcY`kHHIG&rT3)^ygUQ9}1* zp{4Sb0pk?~u$r(`oD;|Oa9#1Rn6;GznT=Y*-ISB2G{eU=A!Q=uN#6(vV_8@pv4uzI z<SdH3vx;!+*;`JZ5#R<I_y%bbC?p&O)-MiBh*@*D;65w-(Li#DX=%OUP6VZ!w@%C} zOoEprx8g40M^O1<;_dO!gm)n{h>BQQV?wgCs^>H4<E1spVjB%YHq2SIBy2h%ck2-- zUD#zSu}JQ`>eUtoo0;g5BtJ9XD7flNWveS-zPU%Kf2EBS(k4j^4)0WO1!;f?|I)n6 zVHD8D4)4$)j!bkZvIaB6`xSgH@OuK-ULyMtDUn1tyT2m=q7Xl95!e+i%utC#xRgjD zq66Zg?^j)rArSKyhW8<UZPT{j%+YQ+g;Ez_gUyphNj$iv6Nc<qBziP@QqVdOS6%pu z#dqMtTGxHX$v&7V4w0!F)~yDb{STYF7I)pnohIXNcjP6k($q5wzVCn^N89IlKfQC` ztzW=0K}ytKj^bu5MQ3wk$FW6+DlM;#O$IFJ_-^LBFuAXQDHWq<HAQJ!1QIlqBO;=9 za}`zRk!u!JY73=jaVT=&3tUlPAL&Im1Gm2q#M=$d+liUCgV6erXTQ?2Pi@ivB&Kiu zZJ+-Ha(H~-+8|tqWGu;TGoz5`lNKyu)35}_1k<1%r}M~XJ93}nhlqcNC^PayIoc}X zP@qca7RP)f*Rg&V>Ow5qbN<uBvPXI`ZYJirdEbeSH*W6^me*_!!>0}M;cD+r@3|{x zMl8N&xU6vxcWKljR^A3VXSW)&SJoZ)3hhwLoX7q3>#!Z-2i`SKKY5&d&b8g}Gj%W@ z#y%U=r*(84#s}sz`1Km`0m=vDv*@*wSh>Wr5QA^iH3&nG#<R|@R$p1HeATrKgKyNe z6}7X;cjzY2n2kO;f`W^I8D1e98#8l=?7i{qs!$8^$(OTiSLINP6^q-vn4Gw{Qh(m) zbdO|LLJ>@UPkTtH0VEQLk$7zGsEHfg+CjDi^e*Dx!tN6b``IFLjto3MU`{P`g=XwQ za`t$&cW8E8F^?J%$f@xg0)5)tj#g9GoG$A3WA~HQ608VHWmj8gl;{aceO9N*c|F~_ zT;eJ<LSYi(;l#n?17W|8w7p0vxa|+u4axN4iuT{zE^2<qS=KDrFi$fm8Vij%W8Ey- zu%B0ObPtt?nM#lIfNU4!bPTo_MT$(on-uYthqo@(TktBKHHZp{-2!7GbuK1>#H;)2 z+y(vV1vkGl`x{)8rNpwvQG+b6@G_8TaY5BS6PSA;)MtI)Vf0=9%M+*f8JGM89Ngu1 z@J-3Sv4K06wr(&qZFYv~tmF_aDg?Hu-M4A%GB?NUt1rjjcD?lmU*tf{(Cmlcp`EjP z0wZ7AA0q;M!`UB*v-{&%@^`Wx$M84G^aG4(SIYpij_+S7A5YCz%kr%3{pf3E(6#h> zYrGrZeIb7R23vlT68{WOH>ybW^=3MJhQ7eowghf-D_E{8SoXr+gaFr$Y0xP-QUR`o z>||xw{>=;`Dqo1Vn^$<Ygn5<{t0q@l&XZf64C>w+=IaNvO~BH%lNq~!&n27WK??c` z^!t$<_c#yml{7#ebU|nJfbP|R-s8ZTJB(U}W2ahI8zfSn-K^L65Jf-KKyX`Dm%w)? zZ_u+4PxI*4{1m?UloP(MdB(iAM&3#+hhJy@kbcPyKJ(L?q&yQ%Na-_QlU?A*kYpDb z>`dp$0;NwewZ~3rM49gub}A<oRb>^SCDLXG$*qQ!So#KpDtYKU{u5UGvofaysG1(= zpg++w@{te+8cu07iS$U<@Jo^iRyLfDBXfGM2uS0%%n2-d6n$w@jAKPwxuE;22znw; zQBB}ztiDkYQQqRuSsDrYRGgPx*fC)Hr_mU;lQBn0Y`FM=vf=zmk`NdR?3uv(&%(}* z#aZLZ18`RBU%qmwQn#isJdzYKQWnrNq4#+xL=;enM?eLzkWPf}E5VSbfZx9Kg9JNb z{t6o%b`Hj&*L^fJ;ZQWNK4Lj8Z|={2C*q@MRY5yj>u-(}<l(?90Fe%}5r^C6g97C` z8U>eRrJX%L=_;W&-UBl}mOS4TTpc9J9E+-mPMbwergpD*qm*WrdrD$Q{~1!8^&}AI zTdmnXN|6STr4<b+BE))N-!ZD+m|QO%raOY6-AOv$QE7(XCmlw)8g=}NrYTnS`?4yR znYZ6cMYCDKGul}R9j912=YG+OvTjT6nPqi~s3s6FVL??F0#HThFZPYC%;7%H6K#L> ztA-FsEVR2%8UC$i-61^FcwpeW#p*$=!$)RxOg-A4Ro~{h%A$K@9n~{A#cskWt6`We zy372<jLH5QUyL5xCyou9U4-${NYED1u_#_hkeBwLw4rlba;z&PyDNp!0|&h~=e8}z z^akFaTr6+hloaDkl2*F<Kt<k>Jh=;7a&L^bH%fh%X5Imvbod6O41_(WuU|;VSEZp( zqk5l4Ho6IieXH;E3w-YJ?O-(6G%}u<gkg4f-zk_Zf&Dc_TAnA3ed-yz6v{p<kQsr! z;O+OMzJxly#MOV<5*j#=36moOKqu;d0-nD9SM2St;Iz-Q6#N$fMDX3-?(q%%kPtK} zCm3qM0Wis`XoKeBG70UefiJj{(M!>YE#;D=J9-r(cdiih0%`KZi%@WaNwY-m!K?*E z@;W)wsuRr7!UdhiI8iwv4JgE}jmI$5_iJsVuUc!_AfHMAi`jiKYhb^IwJ2BUqH4V{ z1`VO^=0-RcE{USSt4=3Z&$LJZ)k)G=j^{kRJa|LJxrxXYlN^aSzMd}Zk=K<hQm_zQ zNr0`SAtRJYmsCOGJ#OWn^oE!Xw4XhICpG=Q0O4c|oQ=%?iem%3&wv3qcG*`{*93%K zNCwNc0Eovg%w)qSPzl0&-JM*9P|gzHuXS^!xu1b}lN~ycF`|tT-sQONvf`$XSAIhP z-RGb3<3DoX+Or?n59Pa4rZB6)-sW7Q1m$E=2!pruD6^|idM^_HlpEU*O&BPcZBRA> zAIa&FH?8bOeE+eEV}Z1Lft=D_FS5zuP<|BxrHk3jwq}4W#Z+m96*O85k2T|4$;^re zHN?Ve6-{}@EeeCTo6}sxx}vEaW@sz_L}o}yCGSrZwD4`AS{~d5#!IPScsq!%-=8zb zX6$rgHD3_UW^~Tb!mrsxHkC8M(K9FB#2Dt-u21)LAYWKhI-9iwb{g7dZcJm3&U7h6 z65SN%%G8K--jY?7tj5I1_4)P6PD|pRV3O2^gypg4&vwZXVp%*B;046|BOmg=gTa5k zg#YNJr6}vD;i#Z)fk>Dli<%P`gvLoq)fiwy*1XRvqDo3Cne&I6SG35E@`Die8wb|x z>>cY}PqFEF%Nq@9cBJz45ga<^jghPp`q-P8<as@9J#9M8aJYSZ9LMznMeqMcgzdr` zpxA~&zJ#uZ+C*_z+wBqGMi~PMcmk6SsP5~C)P~%uXSNRCLcJ{r?F#*dWot!YzM5bF z7zECIZu!iAWHP75yvkTHZY(ECVChbhG(z+#zH1a92g-}~EdAq{sz-izhGv?40XjK3 zuuqz*DRGkGdaI44yE<QLGKdUIeT=4T-U(U|zMDHISBgsh?gvkmcEgE5OcUOMuAli~ zdF#||sR=bCoppwnX`wzk8%osLH><6lVWp=@!4xm=)`!s|jfRPrJu;SnF>eMtIm+;% z*bYpc6bdPh*AtCVj2dSba;p?3(^h`d%BfK0GYYr+#l`hZcX-CzXdFK~Yru3A<plPA zzHjCsbqe+CZ6;>c$!l;&)D@<+qtzUfIi@{=XcM;IejCbS4zz&wj~hr^mUuiXwL8qD z)@YWvbkL<bUM?C_LGLwurod0pvOvO<ufW)9xI;uZlqi3z(_*_zd>&04d!CS;9OJ1n zkBgGRtNWQ5OWIYjk4*ckEmF-zTR?jRtgCRpun)OsF=4nc)&prrP;$g30BloX_888l zw4=cw<p&cN(>agpb8f7UcZm@^8<x2R*EF;76t0{!^u83GX($^1$V&Q>1H6O9>U^up z0sqvI%~9k!PGeh~-ReemcPyLnV@>Q8z0_GxtjXjFW>Qo%3<)S1=ycSGK$AJfctmze zjV)OhAyxQ?n@6lm#kKBbW*%7LIr!w3PE~qRWJ|>zQe{GlsT=RMi3GU%yV<Y3i`?a= zLmlUhXw<T2EQaSV=YsN#qYCnlKUW=A$h5hBuHVI8#CLE#7Fw;L$9C`4HVK(~<%|D9 zB<J9g=?P-h&*t*Kr51y(MG=DEfZ-#G^&MZ*3mrxY;1#ojg%|Nr@FPJ~AlAgg3;W$U zClT%F$HxO3Z&IQ|Ak=)0@*J}>_abE_)kkRJfX!r6%v<N2K5A=8{P2065R150Y*YND z?w-b>wnq6uQtah8i!*UNfE?0Y3CoOX*xc^>N|mlp;49Sni))Ezplsa-@Pndj&$+8- zo|<2Trv-v9-ujRIr?Wamx{E=C*s7WOA?yn*qpy2>{-&_YNX)}$kXQ-)csioOH9~BK zJ)F5*_pZoP4vFqLdXbd4W=7fiR<I3c#IjpyT1z{}P>IJid~-feKs-N<TyWXWAU}b= zy}ij@hk4-$3y1R($})#z_zK;NIld3TF|&uVq4KU__NtHAJ9$e!FW{~)?AbJEY}<#h z*$gE)v$wjK!71p$nZ2=ep_c!w)*PJBglibIdRz!#zqu*I_T$u>Vkm7)qtoiwn)cFu z$M~Z)l`82h&I{=1UqJrT_4s$|lz;VQ{)|R{y(9m31NT3zQ!WFC3ilR?c7_rUVE^u! z@(vW7{XZ>SVi1Bv_}(|<V182v+96Z{<uCO_|H~>R8_@iPA_?+gjFM8kQ;fQAM4mv# z!a8tRMNk?Z{R*U5o|lxKR(q9~oRSI4tPQMzB3+_n=s<--3_=Wog2)8IGd(ac+BeV# zZA{NtFJR$HG4-V|;EX+h1O)`+&jxQ)bf|wD;C7_`$J_D0X9|C{NhwMCbArprr%=E* zsfn6Rx^WSG81e2Xbcy&rB>^JP{e5SyT|=&o$;-s+2If+d%;zs}^21D>iRi7beLdM3 zFL_SBPDhiIbvrwL!0IEZ5xU$b{Y0s-G+E-OAy85?x9ipBO_qjm2yoRn6qxQqv)!lS zBRhuT8ZRiJ(|F&BFkhu&Q6U6sXcigh)Fj51+i!!{9ZE13&3VjH+U~0=<&h3|tL-s8 z<F;l5FLfbLF<5Bu4wGB4Jc~|wpDyG+#o>JbgGExKL00UbW7VQ4g4jan%he(}s@`-; zw13b$Ipz8M^mvnIei{{>BWO#E<u*#c7mh*3{Vg96Y2=h==)scTFi`J};);sUJsj(m zHh=6|<rK%I0@q+GU>G1XE}ZRn;Dol!xHOEh+KPyF!4kL0zh*cyhmjW5@tc>sLjKqB zTcBCINM67Q7I(i=s6q`|rM99#PoZoVoUB~P_%2qi*)=d-%i8EJnl287X?+CSV%0O8 z?o~hi;u*K<=CWZ{bmIPtpye^Y6kHm~@`*^tm#q_V%6oR(pYf7+75x2HBA#ur)$ zb@LauEom#i1QqF)tJ}B;k_tgE>_U2}^I$eU_1xFph(iokBS#d3Yh@l_MRn>b6Ju9u zdr&3?{LDgO-!Eulob`-<Td)Wb7d2QNLZ8FPl)D*s3NeVdA`1Blv6*iP?BA<7zww{# zqj9SB6jTLVE`djb&%@m_Lz!Y)=|fv6Iz~{CDLB6jVoLCjA&U@rF(aAyQv?-9lNKI? zGfI!U6OB_S42x&<83T`lDmZ^A6OA(;{u*J%Tkll7L@`NC_G0ejGRdWYDV`)Nq(L@` zNNyKKjiT^SJhIph2>Da4s0KqL9|6cU4E}$y$^Lc1mF=udZ2y+@O~?+?BZ|~%W!_6n zNR<ovcTm%0A^@lhXw^jJ!auexLK71?Q}*wB)d?GRL7pjw*p<74mqO|;ZrYjlJ-qxp zz-9+^(L}7<S6v(S4b}QM;*^bPK_j=4xB>u{riuIuai}_GP5$@d;0$7x28HGnF4z?j zeF7_K<3sB(l%r(Z;u8!ywBi{|S;Y)yvG-pUELe@~j@fu7^~A=AE9~T67WSXOv}K+$ z=OF^lY!XiybVOQ%-U)hqDUL&(?WiysW07$KiqJ??%lRh;bZM4`I-yFLS%F8WxqXwd z6^rKt0*-$e{rs8Yek@r{y94im!Rq-6dou*_0bG>?QBx9lhHP_3r4C5<T0&nrCrxas zN5-qO^xj+UR{ZLrt(a!!UjGaxojef;B!EDI{(q6>{kiJ@k>$B4{@ayPUBCY!bPtZ= z3Ye&PO{Hm;nR4Eg*(|dZ0j3r<Gzuh&={?JrpMVO+%(9eVHqO#>+e8ZFwf;EUXWFUu z>R+-&N^Tf^Og3Q5fx<jPiO4Kut<=?Tl(te1Vw{(+_H_P0msRQso+_UB;#M+0gkJ8% zMMOX9s#fEX;(S)`4W#;<O4ELY`j0}pKO{+RHG^umNBi3uxtU!Z-pTA$kv19EKm{AN z8@)@*rMWbvZ%+~6fLW3He$BU5hR-NsQ)7(Dd6n2Mzx?&Wn2-SfWzAZ3_&F*x#o?^o z$RSlN0++e-W`#CKa`LFE#jmSX!^n<-JkL_)vD$Ks1{!vFPi>ra4vkS2#>5N}-B?_| zPO%O>x+c+@<zBFEdDZ=}#=tfgt28B%l3Cb6MhMmc&Iogfo=60?3EQ+dJ!uc{nu8gr z=od9zyM3LFl}%DZ;7Nz|ju|E3HbyPelO<YjlH~-<v6Yy&&BgU~zs}>Um#4S9MkHvH za1cp}IWJJDErf~o=t_UT1$(XQz?&Qix$5O&Ihe@H#Xc(FXI$=Se>7n&1GFx@vpzi- z`nhn97^v;XTIL+b@DzU^wp!ykG{<|Dc1`z6+-fgw550j6k!u3)Cx5}Y2!zO-%Cmo_ zRK1peT745H!B)h!*BO53lUb9JCFq!wOYU?vELsd)PkIJ^3hO1*#lg+bz7$u{tPpy0 zN3=l+?j6|T?5E(uD$4yesiygYbX&B@Eg04-tzB>_6->7(SKL2p4$?C*ntwrHb^zKW z?dZt?9yd0o&lq&>MLy^MiuLi7{u$d>1>+3X0^Skv$UKX4ZngeC4?l0Kzq?Pctq-9$ zF>R*qg)VijC4vkidx6!-sJG<<-|HAF|Eo`z^@=#LQI6~#=Z}0M-9$C99I)q6|B>qQ z-}8w-_x)e<370s4^OQVl@Ns&DhQNgDTrKM>Pz{wODJtqkoh#y0t;4%V8#<t~h^7Nm zAQLs%mu&}r^wPlx<c_&|vSx2{4>g!24_4(u8+A4wd`g4ZIGOBsR38b@`gu*#(Xg>h zI5O}dW!sUdBX0`nR)l|-C~ev&;1rKcB&DW9Yxyeuk=%-Du;}kgW_*4%kX)qr^d73| zNDAEw2`Z!~cEuna7(tuAWU2hyb$`&~PX(yw)b&U;AcwdGeE!cgm%k4|_%qo4p&$6u zed=GK_g@l%7}W_y95qB9Vkpqtp`#e2XAxu?P|@i@5(dz$vKnFTXk*+TvIAdrhWwd} zqD5<y)n1U*T-S_|)UcG%Dit-3ixfF{f)e6QFkoJ{PdA?KPcNB>Ki;qEdcQ~);P$gj zhB(j#0$sZ8Q62rD3D-z&B4wB`R3*CSiQf`pkYLym-~65<ZlD6RJfNOd9z%~G(y$ib z4C*r~JR3E#w-cF<BR6DB^2WuW!LSo{!yIjf{pzSPqLA8Yz>b#Uki6b(qbB5Lx#Mn2 zQdz4ZU93awMqgx5Z>+W{lj6nI!DpgwJ14QYwN#jhquSD3l>M+pdYC=~x6)kGTs4jc zr>Q9PyV@e-GCNeBhNI_)$=ozGT$*BO$#Pc|mQk7bjCnQEj>HvK>^OOi;}R*0+LZfu zh#gRqa}bkn%5H8c3uh!3oZ}QP<emacQggF7ICiwbBEneBkF}hE4GyaFs*IbPxuK)C zbQ~(F`;wS^!8b-APuV&&mDz5o^iqe0hW*Y9<2gw9c-!wR7AA|M#{g$5cV{M75CKyo z=T(>JY)Q>?uSo)>xq4{aBqL2Qf|)4wI%K-U)+$-qn)Lb60;Ouw7Nu{`7um>=ct&kw z+iWsAn*b4YEDopWO+jqjb;I+XA=!}h*|VS^Z@&zKo3r%9CAoE&z#?A64B^aCYkW9- zh>m6b=_qwJ_Wf3rYlX2EdC%_cYh-aZb!om4LTRi|ygAZ$mt_6ZdeSYIPe<J|>1L{| zAFqTJi~Tq=DmzV<s$Bu)U1<-_<%~I|ge<tClS&fEXYYwi^tU}uvGwvQDbNt(PleTs zUpj?dmdm<(n&eoJ$m27gcD|m~|B9aHp#)XLx*;E#$wt(3ZZ$(+t2C#Mm@Z@5ewY8@ zT@WnPA{Y?&W4m-VQKjBG%^^rH-|FoQ3<(*^0RtJ$gF0kLC5&vKDCWi@A>m8y;LT6$ z=4S@rHSEAJ$R902%|C>~%>8~C!R<GLm>1!d;0a@h&dw++1j6XQf!as-3)B+dL?mDj z91G$KaUpd^u=5WY#NoDVBRA}8hu@G5K_NIak{TYjBbH?%qHuSM)Wx}nR1LR$`@pvG z%hk1c%Fdf7v+oo!|4krMu+Z#X!;zS-Cenu^OX54k2Y(`%vm{a%*opfKmXl$EBoL|3 z?0IvrZ2{S+5WE{}AD`h8#i$3$=yi*m*L+x=Xqb^fby`38fXgNDhPsm?0YT&O$4c8h za)H`rXzc6*g5PWN68m?af*pGI=<Rcc*G8Uq7T87lwpXr>A@VP2haQHvkU}otMw2ks zUjxP3{F#rF`c1e?pTDn$(4b$VB3w@zq3_{UTu{4CA3qFusrZM0>yDgEH!97k<n3Nd z-7i<vZYAE|PP!aOa8EFVw$4xtn>EXbf@2*%UkT*amF%t2qBV`wrk_84V2Lu7MIXs_ z;Mtrf=Y2xoDdj&%^WeKhWmucOVhPz#=TAEl^sRjU8LT)8`^Yo^wI2-BKLsl)Kq&i9 zBMT)H8^Es?M)Hm(#ui2f&VRSG_yZIKSOp&1A<AEy1%-x0h#L2E`wtIc>L8H@v|UYV zHyBftF8ut{)8dOa#eNP{CIvVK&-d>4X$z+vKHVLl`vx^3q;Cit_^#aN$W+Jc=57KM zu5wpUB~>0n!AJZ!Ju+rrHX5J}PZx{Ye-<=Gu%ZkIxaCJj)etzu%f2<J5bDvbwl&cV zHNEL`c#xcv156RageDT;Q&1#-R4j(u-!d6DNBV*-i{34UdKWe2Iji<fi1To?zE^0L zgO8UZ#x9f5!3C?D-WZvXedy31&LYLGa6)i8Sg-COf@KuLN)Kx$Qq@IzI-ZG>Rvd1_ zoM^BHSDKUBnWn-mrkZQ15)%6wWi0oiY`k0$q?51r9r;<P%+<U#zCitPLss7!MB)Q7 z!+-X(p!k1V_5a8ZeH1O^lmHTVp(jRv<#APc^tlzq3Yb0MLV5H&RT6&j>YG6;u6VI= zY74y=72jFm4Pg{Nf4*_|BLz^Y{jm0l3@5Y8?Dk$?zfUNAcrAsY8~&^?Bv^gjEHO@< za7NGSsU*Z)QKaD}dh`~(`CTWxZ(%or<a92Lg+)vBjhq@V20X!V0Vf}l)7n~VOy60- zf+=T{YS>v;95;QcwAFZ7zcjYGEw4;gn_37%3P+-q8F#w=K!Q|NsnK=S$TMp+=4$Pv zL1c3jTdqi<)S5Op()lTlw)Nwn$DdD&k}{wt`=Y$&)j>ezsah~&R6h(@No`c<(3GzB z4ol(@i?D5>BMs6nwZ+fecaS=Ek=EUp*bm;Lt_ms`c45+Ms9tN$rK;75f?l75uEjBw zRxxBtvRhLbr}dJxp(?f_QD?KZGEt{lyT!K>*G+asVsj{%6%Yn66ER2NBA8i8VM$08 z(+{0C?9^)raLX%cy-4XdU!EfnkjZqVHV2|(x8?7fhio?IG-UU_nL_#`<K{&7p~g|D zF_Eg2-=)TqLq}_q*(j!9XIWf;QN*E#K`(&UB%vH8gU%1D_|!_eK7NHx+f{qBWBbh8 zvi-R8P)a|59O3Zyjn+pL%APbZ)tMBf_oS4wS8%5*eY`igyiqbI&yYd7Dnuy#fB5>R z_{zF<TO5vU+qP}nwo$QJF)Frg+fHU|+jc6fq{4sRwa@Q-d$05DbusSd#T<Q%-kxVX zt+&=JvXBhBvGWRJysbDv;tBjahx5V^y>CS;)*C1~H(<Sy#R!r8WU7p^4dx(K4ENt2 z(+D2>{d7LHAS?TFc>0GEIu_gyaDA`!;Tr5dd=)e)d;4+(W&DB!V!G%*K?t$)<4RDR z{FCrw*tK|fgw6^%B<_TzMUy2}=KM5Z`0Z*~o%wV<1inD`pXJ3&<{>&&;m07nO?oVy z3_(|C4*g<Au{a$+TsALT-k-Y_yTAS=d)`bPG%EXU50U?4d-zS&{AbAdpH1S=*?;Uw zksxoslC9TEOkK|~mWO`^*bC=`fE2t{23M~^TwV;iodJ87Tk%5$&KV0B`LQzno_zo( z0`T>-_0tJSX)XJvZB$<U;L^-!_WfbL+@6Wr+O;-KL+Y%MB|;`Tu|e>MQzV@aC+SXG zT}}(psQSlbru_F-L*ekR`;%UO)?QxBFhowz-4t^C`v+rOqeY$&RtHuW;W(*hx+}hK znj}>3KU@FkyB?K%-`nT+^}lzA|Igif*}EEl`yTvnh^ss)1ImoXZ*5n`X!p~E8ipbH zqVNGYlE_3;9G3oub-blCy26YFTyQdF5AaWhh8b04Yjad~))Aj`lCNKnKhT*`T@YU@ zh%MwAbp51Kx024fY?$xcW3KVFH%Uanj%ud;V%e{$c*%y%iiwC)0nUg8(lCv#(Uur_ zDry<Y{W(WrPSu4!Tj5|~1aRbWaBt&Lt$JGIuVKX~TPkT)>13jB4nsx?FIlVEir8BA z)p6GJdn&}giY;k_rGJ3ArSt*z-?23l1$9|+nDg#&V5nH|7=QmbF|zVh#B$+>`CZ5i zJ?YrEwV@h8E)O9&)?w%vcimfj_Jeq^zXn0iycT0-r{7>Zq<{^TxG7mVLpsa;sQaLA z%Jhk{A)^7-EN~EKMYALY&%Qb}1%E|z()S@Idh5R=O^MaHTb$oeob(?*(*HdaK=uE5 z9{&xC-4b@~QIwHJ`U1_@88%HCN>s}4%a*}$+V5&(FmddpaO{GJt)nr+kA+$XO0;J< z?rI((P~?3B1k?_*>2W}=bImN=XWn~rGJ1O6o*;!_M>#l@=PV4fOmN6?ArR>JRzE}G zA<gmC>C{^4N}SS1kO%mlKn;6{uR2dP4<wpLNw8W3pX!Rs6fXFK?(A9OL#{dq$KvMO zdf^14KGRwMLI%WAaFnV%4RIx^icDM&am&hg(mVzu8;{m720pK&25skv6;KMk=yWZ8 z5K!$??{+~Q_dkau{&q0S*THeE53T0lhE!}A%&DH}i3t<MzDP_90g&n(Ga?uaxG71B zO3H)$bgPfzE1&>jN7w{ikJEZE&P_?Hn(^GB_V;m0bA4JXZSPGT2yncro$c-od+YVW z&PY)E0yC{aC^&N`AXnNa?1uipBI+S*ReY(51S9OXWjoE!!$WRe-*DoHL91>TXe+NH z9uIfGnO?w)Q11_mfb%hU!%;FL>VUCj&iC1`VF*~wru<W~%fxUhbv%VV$g0I^dt@7H zIrjciXEM^VY5TlJd3*IQMl^iBhU_1Q<cI(G2GIRG9{oRWz`p^K5--emDpd9pW}i`o z)>;I|36Oh`MvzFq-%o8al-%1!<nGLWta}b%si2Ufwy7=LEj$QkH}U)NdVsEha)9&! zL|r=OMG@=V5vYSSHVP^c(2M6`HKh#E$MJ-N<z#yLLl-8klyH*_35|;Yi^t%}7~}}p zR{R_nOS5ZI=tJibigC5-_P-H~a_R58XGIi`us_oq`NK8`rK4X}`z!?~$SoI$kZ5`< zKlzt&3c`5y8tz8&g=RT_*5yC_%e2Kr)!g+TrdaxWZT@$p`ggIPn)7#v`M-?|8~zy= zhWWR#Sucp_8WD-W*@hN)1(1-17)1gJ58seUI-=tpk)hWOhYbBo=j2k3MWq7y<ssnz zwSGEV_lyXHdi82$dS-HDvN;?Z;8NIJsQ|ulSmYBJ^FTr#C|t~@zpTidkrC}u`?w&o z7{gYwkkS9imDo8UpRS^3xj!`)!hlg+RbhAFBy!T)+RM;WenII5&yPhz2>#wx$N{ZS zqf5Yk)1)TQWX+NWyDkYC+rKk`E-PhZ)xea-16y~<O`alDFCtl4EtNDtti#8SIBGbz zKenx{zk~0H*6RHZaW?@in7(WsxpFXISO{E~O8#l0;d9BH*3w6C*=YaS%V?$WHNdx0 zQ#!i$uNg_k(by;Q_rh-d$Ho12m-`<@@L!Aj-;qYmTJhV@j6cqPkwpv3s-@XnHJ@JA zX)rXh5v^KeU;!zH*<u5sxEO;a2jzp)?;(m%t@)d20DV^;c_=lP9-!!X-hP<T-|=F6 zIQ>1l3sjo$Kpe6upf`xmIIVAOLGG?-@?7GzHy}!gHbpHZ{UsIjO;&0Rpn}7)7$oz` z!latVYt)k*s!My*$d3eD67XT(rawg{)bybuVFO!Ax48mq@?<HVVwD<N+=E=)OK^O+ zyAZdfjMu`ns~-PY&%}fpTKV%R%C9|N)ioXi$W?AWIoOob-C)E9`D}4kPi4TeFkn>s z6~Z7rc1xMW*A>=c>)|nUfHyqK<-w9w=H7T7y>4rGy;Ykw&}vYD%g$m-365^#Kglw= ztRL8`^{#hF!6PYAsb!5H%5T10^U<lzrZM5H<-fBOCGk2}uCvIZJ&Y8lE@z}74rYx0 zu^?w8FAm~_&O8JjbZv)m$;%r??P3YmEWcf?9J2@zty8Zitug^Mr746`)dz%ekIORc zq|yJuNz=VtJA!BS4rFH7DNhG9M*?#L^5tMJ)T>M=WF-oEv-oU;re__hRf=%Req48$ z$X9H=4g@OGL(7dYT(~NCo@AV4dZd0i3N-+_Q@<W~#(Aw{j0O6Tb~|D5RYYoeigO<g zDgv${b^Pj&Lzi;hL*}9W;y>OD4KWXC)`Hb8zS^ppZ!={17Y*kTAC&%X{Tm_0wg=aa zbH+8<4FXw{*KNN+P*{XzV=j3fn$2;CA3Iw{ZI63Zg5Q^XVOs|A_Y}6nG3*wRYhxDa zfb8QjV)E~dyI;sV6@Q*Zl;9+4$61RQm-kd434AF;HoWJIGdq`cIM*%{PsXyS+L+~X zWr8I<x7P(`vgYXRk6s8KRQU4UxhLdE_hVGO%)SUW&bcD%X}3DPXQyqUJ=rXnqIW2A zFVblQRSpPO?%26wK9M=MkgDs|gOhZEQfe`Wjkx2Lf6*2bP%f66->6LgA3Mc=H^}+d zCi$OWY(6vaPj?8h=Rc*_f-qlk27Xb9I7eTegrw$bXon;Yx1#Rditx`2@ft&9&iExG zFU~l(?hRBZq(O)X2__l}cr|mmpeDUui=uHQC6Y0_)yr3f<<QQu-`kDi#h3OGGi=nR zie(4gJ;P5=g)P%YLz$XaI{gd(0@&C@T5p^u?%8@ggJR0hi;=U@I8MlM3U2B&R@RXj zOwOA_p3xTZ3;v(p@H1ZwvgmuuZ+&0?JK|#f{{sc*|KkLdXydS;gf;pVt}9z%ddPu{ ze%lJ5coInA_86B-MPj$tF8mF{KgggYWsUj4(|gw<(Iti|7(h7jf;Z8v)QI$X?Zwdd zp!fQ)+C~V3v!+oW&=@U)@=#9G9#kb#OYVfvNk&H<uY^$uT>)J|t2GiSa>p6UX7+6p zB;8KGk01(Yl(+AK%UDTpvOVJ;yt(kHHC^AP@LHwYbY8_S)VU5IZslj<7VR`&fA3gz zaIxIAdLBz;@)D9xbUsa?j3%!!U$dW`m*4r*`Pysh`ZB`|&IT@f@|%tmO6?Cs?&AI| zos(3|VRl%#gg5~>MEMvA<$i6XPkY?~um(Aw+8tCJHq4^AgI9R?mh${iW;`X$%AFb@ zEK=SUT18k~*@!d+rUjp7-k6J!#XfUn4!zc7Y`IZ_p)J(GuM-VNE^br*`Pws}i!C={ zl|Ww4%dU;X=HyFd2engi95l`%3$d^!@H0_FUuI9jkZv3cp~H@)+RE7ACDKS>y5bh| znsmo$7A9?bz*>{r&f<6-`-xdf)ahcq@DTe6KVQc17{m(wF?@~9I(x_Zxj4#IN5t$( zc3H9iB4bQbOmIE{L%cE`^%n`pC;AuJb-X;8`lTV#6LOS)0M3!0SSLfY6XD&L5;h1B zi;9#AI<?x_q-lG=0$7Kzl#})`E6Of$k3b+^f6}A?8X<LF?XA-dqf;zPNNT)9#;aL7 zR;lvD7WR;JW;u&&^VW;k#?3|X_5$^ZeE)c{G!&bu1^5rU1iG{{{-DYKQgnM5zU2Rt z?`QrWrT+gvv8I^0g|VBhtAw?!`9ETR2?u98W7q#18ses`D+?lw#a~oan`UpI>(+xd zlvyw*YqTI5MkK{3j`G-eLWO%tGr6&Q&bSmMA{+<)QGSNI3bTOmCp&}HrT6d5chcVj zZ2*kBC=@Ay5D6IK0Z1Z?N>H0QRnQ^}3$Pie685{>AWJqXM4d*bNjy#wf#sSNE{0$p zT-R3bQdg-G#FlmJRl$uOSF15R7F*5FvfWE{)iwxqO+Nb;nMo4SGZVH32d_n>lqJ@k zRmxIQivz5-%E9YMM+u|>9MOA+ltt;j*=s20G1ht=FmN<%UkY?8D7Ww>5K)CTyv5p2 z4=~Y*?Rt~py13D;3ue4(s8+m5yI+9unX@;UgN=z7Y`ftWx_2s(?z9&^BND!So@q4` ziL1@LK>qoFoq#z(Owo|6H67a=04!m{2gvLb+)k#NpQuIx#^ODi%912gXkLBN6JNf8 zpQKhoAuutOiaSh4QR3%iCa>B8Cc|(IG1nOjJ>Tb}n^aBkCy`sT!~}txrUaV$kYfm# zLc9p*X1g#BKa3@b;>;PJ`_;cZMg}=8tP{TbkM952_;UPTxcNViSjO1hSoGWBNb;Yw z9Aj4pXC-HAdsj_o>+h#6Z*2c<aQlD2C`R2z71tci4+8`@HO&U7B%q`vZHtJ$wG~}v zvL<;#UKpungIt>^-S*(7RE5#5$M1pj1@b+gl_J`GgmLC9T5#gd%R>~ZgG-L$wA*LL z<>w4{*Vp^o8zGRyT~F9Ux~h|+DCmifBf<mD_)jmL_@lru&W3Um>ET8Qc$dWLmj;@@ zx;Q%{nPC{!vfCbH>+xo)6FVtpvWd@Z-ErZ5zC<}c%lAq762;QYbZLgjrJDi$v3%E+ zYpMxq4Ru1>Esw4`ZD_7^7o|y!CJ(trdVv;YPggQC<0p9Fpu?BywAMUX8Vk(T)5T3~ zt!yna%dMU>jc|+H3pe^(tAv*gW~F+0-U5_K($q-emY2THpytjRTUrZEty6>S)7;}~ z(I^HUXgRyGrP1d6c2sA7Tva+daCKd<jMIKhqe`=$%h6cDg>hj0ph#jW?kcvXJ6+fe zYpHc8qq1&+r_`*pq0`Eh1&1i$F}HGobRxYZV=b*YFa=*#<f)LU&COf?g7x#}1h~6S z5^HJyXt>`C0yCORsZ~y9S<wq1M<b`7W<o82Y!JP=>LFFyaEG_7sixE)P*T_QE@xHU zaXa4z_Ya)mw^?TfZ_qZCoGr<Qd?d<ZaYzp<;l-}1jwIh+@_@HdlR*A13~=6fcfIz% znJb0RNI_N|Wr?DH^@HoFC7?(Rs?8aC2%$f!n{elBt~1jG!ZpHVMj8tSRs@OQ#!eAa zIzp#`KXXwaiAn9jN5jfVIpb=o^I^QGS!}S;aEk8<Z3rU2z~#aE1~P)@9%S^p_>$kU z-&DRx?CJVaGKE@$Yj*o8BE|;I9I|M%KF4tBqThFCPw+Xi3Bb~p09!OEM&nxwb8wVw zwzk>uOZL>Qal|4}N(r-Rd3*~YN^^F{Jy8(G@2+UAX6JG^rFND=F5YT%0)*;am6ON8 zp_Y^^nhq+W=?y{YR3%upX?ST(@0P8w*OLiO%?%wbN-3afLdLb3P)7zPV%t2jKQMUP z>@a^ms;EuQrHz$vd!i0xf~)H;1(*z8s#(jgkD<~|sJnXnwcw83S&G(_6<H?nvzobk zDA`kIdw3YuKjf?tt__*&Kw>y0>CCP=ceaP^kl?jvKF7){v^s)5gCi7y?h_hZA;x*Q z{Se6rTGji2P!aUCDmuccebClHP+g#M03?*F2rbT%M_H_zVtz}p?|cVay0q=e#BA1{ zG}g9hHa_}&2>)tuB}%$*Wrp+IbH2Oo8(JLD>n32%rT@H?0xs-|DGvAp!h<lMA*tCu zVotEVe_MApK`Mm7rEtVI3H~}C!b<0lbd4nfWU2kigaQ4*!#<I8G+739Do#PW|0BT< z66UO8=nh5Su+*%uR@$LNI-LSp#y&06Jy6eyxL6waX9`A<()thZq~_cHx1<i4+uU&x zSkDN#4_FFq7i27I;$)QEG}$$J?}g72tJA?5EnrJeBHVPmA1}x?^TfMFAP{M07zu^^ zo6JK+abNa~U7CJ_>k_tM=m6jBGprC<b%7StH7wwsfnEKXaXz13DW%m2<sd13V`4?8 zQ?MhC^7BAuHLxP-uo}El>jmmG?;;P7w*5Ss=2L0QE%l85iodqjLHyhHUHPd0W11N0 zzeA&%gM+QOv$KP<l(D_p|Fvs~(eP45lSKQ1r<)pZY;Vj&o@2k$!iXOdE7}_-5Ap;< z6I<fy+Uy^@f}5Hl$=pmIOi!Q0voc|$n18oMXNb^HIjK`SW+fveF(ewlTt^1OpjCSF z?tIJX^ZV`gbvN5%2yELQ2g6aQE|wL<*F50~(Zy|z*&r!Q%tPjS@5D%{pM90oKnO{O zr*;d{iJti=#Z_zsk1%;AZipP4pZ6R8cndTe57kL;z&Ts#mPBD<4jC0WO*t?GBup4u z6eWxt3q?U1E5RsIismS^Bwiv*HpZEyv|l*V#x`Y7MoJbd%~59nY&Wkz{TD0AOr)oD zK(%h|IbNfkYQV;^{KemD<^Dv~*Y+KjYThn8%8D)q7qAfDRPM<k-S+8vIFImvg|Q-; zN*{1Aohz`S7=}TUx5aTR7ld=>B#mM*9`237t>l2PF(J%04Tp;rrJr$^SSw1V;dK?; z^GVX%)_fbxdv&hse|`x}J%(83Up3!o$(L>>M`Mdx5Au^5X`1C$3z9ROXm#2|H(4yk z#vLuK&kwYuzUgdIL`$-_F&3_?u3EMa;*TpY8bLF-D|v*w=<Y!z6YyRSt=oTlU#w3+ zJT;#?FKytBy8k)T0GQ1{#70KadusRJS7*-rEh{u(&DFfa<AB!UARIn<+#|AF57GoX zinHCVJy7o+8NbZ#CO*iH<a9C!P@+AcM|U{HNB?~g6p&~)C9||1>{iPUsK%$+85BqU zUG)N#CgxjyK<Zn4fa*IjZjPSkgj%9a*|lhaVT_)481#!#%{M|CSyN4KSTp2?PL~tc zmQ_1ZyEd}UNq&fvruHx_poJpq+Xe%>)s}XEYL4t!iv~NE`I*gBV~u!UO-o2Pz5agW zvD{ACfIpd33ln)+K20_?<a)p{y6ZeDbvj&em;=dd_x{EHpfK_`7sPJW3ve5lQ2&A# zMx*zVBwPai^h12N^B}Wi+rc2KyZ9D{QVO_f0$Tdva^M;@hR1ofWt1(0gWph9$FDS# z(AP7noPvOjF~EJLL4EQxdgTcWivO1Vq^Y~?DLF4UYr4tNJxw3nL94Y2T$o+S1w2ja ztHodm!yH%eAPF2uP;CzT$YphwE$a{b7;cft^<s?Ish*h4)GAz!N;@|5^!GEU{-TiV z@oHj^wJdiis$A6v*IonZt3~>szk&?}79T7$rM(>YX)16`?CbDXO|4Zu$_uJv)fge< z7^iJ(rM$7)16qd%_2mRC_l^^?Ct2{-(+Iuiq}&>yPuNQIyK=O<H7rpa{76g4O4<pu z?GB_T7Oj8<`?N9WR8q~7%!fsQ`*`EC4=xZg#=TLdj=xmCj?O2D(=v)sfzYZ4M>3L3 z47l{X`*O+PFF!Ta<5x&nCf=HlBO=%i)36J~4e47m6jXMon$V@`-tTW`XfrP@CY@Hj zo;vUEJfH!ts}9Ab4|F}kLEZboU&_yvIQhF6wk6vTuN#rR2f!lp)==|rW0!dnpZZ{h z>>kRFklilqDDd7U!(zcy;?NTjCwHl*Re!VG(Qq8LB#r&GO>j(tvDWB9i<JiC^%jQm zlLPTc3X|E*l$J1I<O<bk;iPfP@*$#%RH4k27KnUgv6B@FgF+^x$`zAXwVdI_Gqp4( z#n}_;#(uWdM+#V~Ey)wVu%^O{<!3vrs^!k2vM~oM#ZjDC)?am#ZM}NfaunmEft;nN zhqOQ$<F73G)03=4{BR|Sv|rkzsu@y>Bir{1oa>g;G9doE3@H)9akm)6%p~&O_{@Yi zto(qVq-0im1Da&@G(j1)5e>z*f_Ju)Iw~q0SJk=$LjV3d2mTd0^Jp~wBI=?IrLTtM znP__Fz{J+WY!I5r^D-}*Tv3CimC`}q2gqlf!SkkK3jqDnAX|s0s?5AUBNash`^OFI z!+_Er*dv0`mXCzw)v5B)<xJ^wBm*f{&FW)`3>EvNAeNiv+!p_W`apFesG(@t)Taep zkSP5z#^g8Rbpi@^L>fI?=20-Tbiz8Fll&b-nl2`2ZwlmL^-K_Z=#kx@$0eQVQ7}GR zS_M`nR)i0O=4l`48iKcBEk>;o`G^4%#Eu7YFF(`CIMZ1d!6#ryq&2EKJ8Cj0>Q0b< z2C1dkS9S{49+W%Ok7edfD49^$=`?=LMh7D)#Cm;PaQv?sN!hCXpf<$!^cwa*%?ybC zd!_pRJd^ykPq#C6R`s$oaj<pyui3%2j+d|6@{{1H0?Px77x8$ARM@nn**HQ_J_MM^ z8i;g0S-={NLSmYk84Icf@WG0PUS+G*rHXJ>`-na=3P(w;Q;n={n#NY;a;HW^OO&kt z>DKefG=OaI_w(EP=il>D*55lmGaaXXvmK|oK8LKk*StVL>V^H#&j(bHvF<_r%G!>I zvBoT^<MRkhXn3b!kQgp+Sm2`%zriR_GvrKE0L97D*h$V5=m^!W0BfxjaLxTA+wx&* z1ilq$ajq2H#g|L2&&(OKFwi&;fL8Xz5f^1dcK=Csx;Rc{4i~DW)2_6f1+QZ)D#gCu zcPexNnj|$>oWD)Rlw~Y9-)|9$sO)yE%XA+aM7sUD5^b@I47Pgs7#IfA+T*Pkg3U&e z0Sb<y40^+Hvy`B!_3WgKYNtKw>Z><|_dryPy^1ZbOw`qba~N+lTVuN#g`oVHmUFp{ z3|Fpt)~M72bLTMB)I%N$e3)0XD--IzAYe-OLvI5arGfY$V{lT0t^NxRmh~ajr`y#G z1*}+0>RTwrM_UZu@bM0qPo)7u^Mp=9TF=~|EOfp+UCeK9ZpIT5aR0)+VHktLy%LyD zwShe9cJYD9^mAu$|Czo%rCXTKp2Tr=7=xNUM)dBmn61h^4)8klTOM%#lD#LGo%}s_ za0j(p3UCLFTMWpZ$~`-nKP+->w4RVr+v6O&$NgRC-I4=7=-r9~Z(h*6jlbA#S3%|6 zS-1n=+^N@2`~AQ@Xxm4jIayBCr@YWz3_^K3q~(0jx61bXC~XJu5q#$Y5xH-Hf)<b; zUEREbh(iFctbDk9Nu<Vg4)-RC<*ZlMcjv6g&VWF-&c1=eXV<f-QzmgF=S%+2dPXj< zgn8j^?0upB@cc~B>7_!0P_v)>mKS6yMzKq)bydu~+Eb`kMAP8AoN~8b@Ayes0O7j6 zV2JGpOuA}q?cMHHuk{7+7<l#=_9%>Mtxc`PdZ2+68KN?dJ;YG!Ty+9Nu`>6v8|%ej z_8MbGc%q|l-lt>X?M3lRR-TB_#`Kj5ilzyu8Z6>T!t=^i&hZvg{Gg<bNoeME=4hO0 zVf{9qtEO&02Tu;bW1=ULN;MrgN=X$|)P_*j%$oOyw`p;eI3h<A>DX0^aL;yp&2!jO zet3XDC)vPFh{QH^HA7U18KlS)(pE610yA1gZmJMdH`RrYF0=;?y?6Mk;UR3&HhH35 z`c=jC<Lkyn5Ag+KJU%Q(%f&X_Q=t*jf_$v(mEFaPF7iFfbyAZ|Z>iK|B$O$W`!95? z$&~jiWas1(funxIBx^fw-oS}W9DaT8ps3>3LA`H<tv;W0Yr&Y9+Y}N9bDREin{<fU z>n~7>yv*_Xqv2=le6ET~ksRE~&S@@prNMxbda{;+DSPA5D+nf;GRkHmEVy`)Wx{gn zAFZDEAm3D0Ju%W!P3=}d_UvJk_r0jMC%L!}oB<%GkghXL?GwRWENie_d-EJxN4N_9 zSd4W|E(5)pD6`=}3UoDohV&d<phxyO9KIe&Lc&A%m$Ez#9k0q$b$39Dq-O8hp~Hid z!DPwKu#<I|H_xM^$?TAtflNw2OrjV!I^2QTgd{hc8~!n#jmZzrvuv(H{=Z8}*|+I7 zp#-sDAM*r|&r*<iw}KO>ZY&2}lIQwtx>@_-#UUj_jmip-i>@p#F20Sy-PZ;Z>{*=} zi(%GJV4Gn(@6PvA`3eQnHl#AZ?Q#s3p*!{=bfb%vLRDqt2j5{&NRdSsI-ml1_IL<M zJ^I_d;}6~Y6#R5OIif+ZJp%kVG)dt>6vqTpr0^%7F*L>{wmQwzbj@8sPWlQw{XxcF zS44Dj`+wP35fj^sH4dvy(%XmQ>;Al~IK`1J9dhcWDUK==QKNEYfg~7J%{bmx(7EJy zG?wPprUo#o4L4OX0Wm5em6cPdwG+CR-vT9p)(4j|YbfKMUBJ9dw*#pJAXeSlc&00) zkgFV$-sZ!^0ZeK5W{#jKe$Lea4A#m3_G?7|g*EZfNUu^B`%-HffuOj`7c7C=15_@d zR9rsjK<l;H)V{idq?hDK#Y0vafvDMv7hK;R7PU+(mP6R;XK`QY;az|!!h23+U$}qO z3yVPA0qqOT-(@6|$3hmyLmMbba$ZY=;+~v4MzSkx4Mxa7469WxGB)(D0DrYRx7-_| zB+j*d&O2(z-jajO7X;i_O7z`OOf}!Qcz__Q7a^fIm3~6;yd|C1!z;V?YG`v)Wo6|| zMX9!ck-Wb#n7~jR5(Rmb%%@rqVH5wR*G$%)@W!Dz*=fWJfW|K<ukr=E*UYPwyEawr zuI`0fB;g!!$J-mgH9UYxLjYjJf8j*`ip@*3U#!9rDO$O>djmDDS!@zsmCBqz?dWSk z%DKs;EY7g73Y2Q+MOon(8$fCDU49=@=TUudf1w`RthD-QcJ+)Ceuw!gI1t2+@CRNO z7^$yk;1EAx`J9&h$`o}4>MQtJ;t;tm(oQVbAQ#E%Qo4c<*F4vHHt&g!%gb+ELy0uc zv0!_o;h8rvZ35|6b>Q(r7zqrl_FLUXg1O4e46wi_FmY+epQ)U1J0gFQF7`7C;dC<g zAslA5zlnwqvQHTtroaS(U3nN!eQm6TMAWPjz`$}&6q`Dnsf=!=pP-~=Gv5*)ZAy={ z)NSY5nEAIWKWgn~XU8~IQ?n0e1z<o}CDVkeMI|y`%A<{-`YGfQf_lk9CiDe>9DPP( zj{#Hi<$kfCo&f&g8a94lXhRtVk<@x(jBneSe46<y8~x%>^M(9A2g6;_G)`Fb2(PPP z8Jj@rIGC;-r@B39(Fo-G(HuNMUYopvfv&*}4amI$N_2A=sIM%Q;+2$vXOJ+B{r+;w z$ZV#>o(cw)jKzI=K&2-$<Q4f<7@duiTKNjcJo5VVKF^sB8;xi4hG{d3;&LZVoP|_! zC18A?r*g)DWf58Ve3A1^Kvk994urQPhC?9Q#r*RZZ)C#`R%SMv5llFnVmwECh0h;p z9eGoi4;Z^2%h8q8>I(8jI&6N1^0B*q1|S(AeKL!wZ>})F^u?$;Ih`vQRxyt7XZzS% zvaD|IkWcVCLS$z0-O6PdqQDy}27=GwUP&CPWqs<aI=mf@)=3u}?hw8_*6T>Dy|R`N z4&_nKaCQzG@ATg3BykI6)HLKJpw0Q=y}{MHiaH_*sZ7L#qss($Z8+xboLi(x%x<+0 zkQ}c?tqUkwAOl9<KG-8a=bdffo5WRn&($2L;8W>T@$wF%Ol=x~O5jk!Spn^yOEte9 zD2s!yxEK?}d?yIRKvs#PnOIZQ%e2~v`7n&xo*j}uh)E4Zn|Gz_T5pO?)f42`;bL_~ zty?A+O`|6dgKoGp<Ep@7oP#m=QMl}@S~T(~(H7Ja1|b8IY%;P#JP<O|6EB#Pu*QqK zC#ZKs&$kTES!FoG>BPC95fz6ODZ{WzBlQx>B7HLz+S|`EayNGDwcFr-FqP;I$`$oC zMdJ%L7i?Rwmt&dO{&2haI~d~XO)3+f8=InL&vrSTeWDdbNnlM!q;4&}tXBO)XT=!; z{mK;&=ba@?-n}EziwFDq_^k$;&y~CY(V@!CsfeVyn87XKDt}Y6sW)N?kx|-<U-gi1 z=vUR}?Lt_4SVN{(ht!kW#O1EB8@Zs-Uu*C6<*mh<$u^A6(+Xn#Ue+S99j_}0KzA-$ z=aIfnCa<9PZCSTOE{S4`BmLW)CvF4eQ*A#4|M|)fpgcz#_O2JIRCjbS*;kIA2{&a! zs1|}~N+ZPt9k?clOxio~=9(DOgrSwLP~|89lTxto>NcOV_~*9qvLMoSGhA@azK2jy zd5e^UZDYNs_XW0Cki(tnuw@9}1cu(!;oQgaow*p!WVIE79aYM0b*v|qD;1;erFa*5 zs;k@;4gMiUz8Y8NLff(5&1SJ>;$_zOxctI>&05gfIbQm?Hzz_O-6_Q#>?7e)k|I{- zZ4hTh#d3XWzolW)t$>h@T4T@jySR-7qp74@h&?l%M77N_O^Rgndxh{gPLacm4ert2 zLD~dJs)naD3<LBt+Z*VWA!~-Arfho)R6%qlpySu*ZAI{i<k9$c<kd7N-5K|ind``y z<>JnM<VFkoy~DeaZ|DCl$gpX<2^GGd;!~u>kCKh0x`@3UwnigQ8sLn`LHII~UmN3Y zu?R~}IEdCx;Tc#i&1R5|#J<F`NTnn`L=Xz69o9${>tC~|JWru0l9?{FcuXng+8%@& zwYK0?XQ+W%ToBtOn&otrKAhG<y^4P_`Ne7%x$1l9MJ^Bwcd6j%9PH$XxFze+{ze4J z@<I$2;77>h?*U-=y9xQx|8*6{fA7I~MXCe#wlAFc^H(qU6nQVG3c^c@*r$NVA>9`h zAB8_5r+;32AFH%GP%hakT1%@aMGR23UMp_Bt>7>Au7MRu?1tH?wXz%md>dN^b566T zz^18`ZO9+k@JCG8BV=vW-H7)SG_OQ`)s2XHw%CA0G0Qm};L<r;NnwT>6Ee9FXeE%v zd^m*=m~{9QC0O-(tk_V9bQoGIGj=@51y@q`njS3M{JG!H6YjzTq)fiJODWHy#%>gC z9s|lZQ$0)~bN4LnSK)>1H&fetwXIpfKE`AKxbRJbv$JqzW#~5pEP5h~6R|N8Z$7T^ za=vm3&FLT$>n*$>dxoiC94&<~lHCOPCXRUR^~bLIpcv)C%9I`^iGB_)j)8#c4<`4R zEF!+njdOPli>F`=bVrJH77RQw+<t@@CXh_%+7z%onnrtex&Zc}C%$f@je4*b<$x<o zb5N#C|5xKJp!PG`LE9(My9<`9;Gi`;hVxHVVnPK_c!e@<KDK+3ZnF!wNhZ>p^k4c4 zOA?Q5E06ZvnL#zdXTKMkYDiywJh``v{R->)tDJ1HE7n#}f5tRN6tslyBdUM`2+#Xg z_w$JZj+?2urVN;Zs(dl=k~Ev~akesijJnZn`K-J>b%MgLuZ#)I33<0-MSQa3@E1n6 zoGt$hhSbzEz4G4~r>og{pt_7}q$~D#y%i*L7-U4bsxv``YL@Je(_CcAeaWAPoB9|J z`K5mgi7Sz>s!ef{4!7JlA{MvZJtPRHe$o3wci`{Y2JMG8WBSYSI<qDN{-SAN_WQOY zr2@p!3<SaPTZNz)!khL^9eMS{GtPfZ(61_mt;=AW;fC(EKqK`6JK)qJpW+}L0NV~- zMBf7|Va1O`0*@tTkqzcB2Q(Gtn~mAMF`=njcCtd|S2zPTdJT*s3aRrUQ8FQ6LkrEF z9>G8lMes^hkL75uBQBR7$S6Ru+6jSTN^~8mMLz(6ZU2$Xx2jq)pJt9)(nR0^FY;c1 z3!h@Z&ek6@%1}f(IkuK(9Mx_hRiI%uk_!Kcgm3n`F755TAH8Nm^|`=6gh5AnBbCmT zMB0)#n0!k$6%D(1)a=QajM|gHF(!Yso<%La12VYB5m{s~aqKaG)t;rY$j_8xQXDo@ z=jQ7D_w4ARRMiGFM+-CFgR!)|BTS*ha9-M#mi+vbI?N#7->|^!0pU2YPpR-F+WngI zmd0YxrW_!Q2kfv1=7~zXN1qMjaH!`Ac{<qD4kIw+{sP4q9CzpZf>swkd+Yu}`<+dA zDC+pD+K=|<!e8F`w#BB8q%+?0^<IkCvPaup<e!}MxGHyph;tCSBNa<Fp!LhxpBW!y z*`~hJUMM2(<`gdi>GFmdwH+TyP3VywtL&V$E<1xty0blK2oKZ*nAOba&Op~;p(|Lh z>7q+|%^ONYf*xXa{nDlIpj;<Rxb3@USK-6D#@@caR+K$;BvnFfB9Lo7>XUiTeKS>8 z5TAHWIHnRND-_S-WvO>z;iU@HH<gSPS}}3J)z<z1SWLgv$rwsSYK;Wx(qK8S8(cN` zfOeBy#cjW|_SlxwHeU<4!C5d&P@e77pz&i<TVlpd2e|N^%}r5xKGPI%w!qZr!z0ib zXd*o3WfsMq>j5n^7lq4Tg54%|oJTk~@n4jcwp1f{<p4b{f(Ijk&U^w`D{|63SGpht zJm@S(Hro+qM}gR2n|dt!!Mpmn`$b(X5JDsB<3g4fu&O=X?8pvJyiO+`g`vX+6vg~H zR3~7KLy_#5QzQCZ$r{5wldUk>JC5p6{B}6PehR$)loy)X5kx0=KVi&#QP0e=p%xNI zeiOLXNEKVuQRA-kSj%5Lj}fX3vf1I=2QY9Ey38augYXB!TVw=-1b1|~)CQwXL&AKk z8Ua~$;+}yuV2q9O1G2VFw<?<?TPC`4e^K{mZ@<%IVe5!qg<pr<*ysC-EjMKz2On)$ zkw2*TH{rzu6=vO0=M@*4wq+g{9|N`&9-ErkX?MgQ>(19-1YWp(kw+~Qhg*Zsh+kOn zHyH~3qclttr&A+i7=F6K_@$KQj{Fq+N-)?I75lPoxF(}mao6~p6o0IO<3pTgBeXhR zoAlhDDX|grM<zp9L#-1nBOo?HR!GnFX^^`1w{Aokri^OzSAVs;UfGBxl}|~63LWTi z3j$#<oG)HB7m(yWD-%LqD2p#b>fXa#3?m?8EG^f6pl=#{ibV2`CrZn>W6G|KU5yXg zJ<VAVv*B5H<Cq-AACaaP&g%sx$GC2OY*lR>E7Kw~Q-aKTqIrAzvYl6YURdS3FZV{( zd*O)j%@Xk5A$`^NZbkg{Ich>nL1EGKP_m7E=;qAm2bS@|j7f67>?dLS3t*-z8?_g8 z$)<h2Njr6!v}kvFndBy#Q9n(EeRMpmkcQdWJcJf^)IQP|jQ<7P@xti5wwj#V7g!+$ zj<&I|K~^4cAZU<fi(2tx`luu&MKhYZn09ER_!tJ#3_8?|rN-tb__omtPP!yZ%1yKg z%|geLAip*Xr1LOSVzch%Jze6VT}Lu#ZY-su!JWGw&Hx-kqplTYvN3m!2!~>wlu;#9 z`ie{`OceFGx)7RBEEa-2GYAC~ryM$|aVr+6?9jZ~FH(M<;h|C^jm#KE3Z$$>ne^ck z++hB5_<?`|G!}8}JIk`Xp2RgZ9vk>p6jnHMw|gcy$~m2+6va?m=9uEJ`E$Aw+qdX6 z+PfS%8atLiHsoaQ+@HL5+7Rq@o`}t?=VzcTn%yLlQT9OUe#!P_i2>i1*akE7wKEfI z=D*hroT8SlQ#vh&Tv08>>5`rXuzL>VsCyZd_0kRms0}E|JC8UuNxWQ1pPwVW8hMc} zTgPvli&D?sYwDu=&Z9son5C{ZjgsFH#vMqT!nENPh_#o|6F$(Lu#>d8l<k>N%!5p} zDA8?`-KSdQwjmDb-dcqV^bSj3*mabcJP02j4_?#Bt<iG0LkgR`8;1Jd!jf&cHuXgL zwr*3vXEes*Xs&`?y!Z3Lmo+?@Ih^eo`Di5ls3aNUKySeQeiR7{zdOMo5#R4}ba2?e z9u|c?4SGdb=Gd@~XL=VVWzv|u9Vt*1Z8M>&F~h<PODj>F^wTk8Vnpb?1ZqL$m>^eU zM(v9<pw*(s%+aO}C^X<9{6fEtwhBrcrg>4T9`LQC8vV8CSa7=sGcTfUL7Pjzam!M0 z*iwk^5sBa{;(B0Xg5OK(3!nx$pqi&2iFz`Lgo<1@Dbgb0h`?|vZCA^ttwj?=L5!F_ zuy*S8RM(^HMNeB0n2Ab-_Jq7P<-u(b7IE^^<1!>N#-<HE1`O_)P+3XJwnkM?!U{r5 zg8L<k012dmV9ExrOQ8I+0OiTQpU#37AGtDkX;E{LreT-RX=m%n<nF1LuKa6F!(JxC zE|~P=1oy;YorX3`WYru6(v&)_3}s~sSAqEHJ^M#dcZmCfYF;}?<WLHeylpU#6Ml2V z^&Gu@(8JKQV@Esu4T?v<y%QxL{Y{YOaF3(ZRlx5dP%gbIz_<zLOaZKT50{Yrq@pfZ zq~x#Zl-z446WacL3naQiqP@g@QyuY{Cub*(+pnO)UI5IeUwfe~JhOTBjKBL?IBf)b zkw~hVCU#vo?RLh!A}I9gdX=e+USBiY(}Zltu&X@Y;tE&k@|*Ds4uR3h_wk~byvY~o zCml{r*1sQ)Ia!mPh7I(38+x;5^FO#Ru7YtBKkW}%De>~cqH;mPJ#j{&EDL1#Bq3j6 znIyZR9)@L=82w~<pUvBK-jVGw>jr-w5M3cV%+35n^&{O0(;VWx&Gp0-K=G$gf~8kV zLs`-b^_A9ulLc|}p-~EFE+2$|d>SDZ>Y+xcdpOLnCjeV&0h@@qE8khLTndJ}syXpN z5%$T#Uh6S$=rhF<9HHM0c=;pt%XE(+#24gQ6y%u{<QWy@Srz2j1>_kP<QXaOjXdxT zJ@Acvi@LWU`Gp?%4Il2;S3jXG)bDjLyhd}RddU(n4o>JbUKQZ1$^H`rgsW8IfF2hn zqu)3nYxH;hJ0Jd#)$+jM^spnFjRg~>05x5PsfObLUtNKvO}+XZ4Jge`2|!M(a{VF) z4#L_<e}Ekwa20a>A=H{F)Ect2!%=I*kVbNDP4b%Ad<5y&zm7$D=m8wSuz`T;xc?KQ z^53|BYhz1$2bXVg&i^<S^<Sh)j}ElwzetsCGM6O2R%l~Gh<JK3V`L=&2{4ElY7kk# zUQp5zId;a>PzE%yPFv*4k7XUrdWK~hjZGRD<>niDotBoGH;pPchvgqORW+Gk+|NCn z4-~8g*I#d+UyQrY_a_XexlbN5J<t4iPd$i0LLE+Wz%zq2f4MLR@2#GVi-DZ4Qp@>x z?(fW^(T(s>L)RiUkLHgDuNPMJfhclG;#6Vpa6L1-a~SX~(e^StQvnVWUrnI^1j1ZZ zsKL7}kekm`#Mz`=httEqo`HbhQiq}Uha_HITKgWyU*sYeKKJew-TJAsM~rEqwMw2P zY=$L{mI60`Ds(?XKSNT%+LTc@f$m-)i+zny!T2xEu|tVa!DM4j>TYgAk3)JGf3h!! z@1MXpB+V?MeQF)OM9}?J-M@GD+9DQw9t+?_-zjmdV`{1c^0~DSeWu!~yEVvg&jaLr zX9?_svg`?G+{OdK(FF=`l|uzJUtmKa(F96wov^=T2?h2CDPi}xd}a3Qj=t(bSIf{p zB`Cf$_J4;gu!6tPQTV>-2{i9Lz!*~Xi{5^hl|(=q>@B*l`o2wJ_Aafj{yrgEZ^5m6 zsK44vDxeL$x9C<s^f$GyAfaHt;P`>R#!JEbi`4!o%oj;r9@TquK-x<cppW`pZhsg3 zQ*`B>kFc-bpXNOc!1(he1yG0n#~C+}L`^I*+IPbE`r(jAyyI_jc-z>ahL>X$V;-6T zeVonl0R3M&Ds(CuH8UEVe5?FI;YbKtoWilXa;f<_5Smis$gn0eHj#NL@uGWcwwSy5 zH4vQ99f?CL-*28CO@6E_f=zm!_}-s|HoBB5v(gHuDx#E@hI;Q0HcOA1az>%EI4k<J z3Y+dco_P2~ea8a7;=HeTI5m&nJcu}YB!<i`i5Hzlv)DXxWNPGX3SgCm1BpIu20gO! z{!UJ(!YZY3IkFNRpBi40x>8xK%1RzMSI#YRWr9Z%bB?D{bBRcB1=sTN&mWi`_(%>K z9*KDh@ho(FU7^wWJ6kj!VFKMFr@}%a-B6tM=%wOv?SztYapkH)4sl{}O6rYDD!Nu* z8Rf3RUxnp`2;!8q2c7~U2azZuRjTtG;`))Tv=<t#k%g-0KZ^oNc;%64U*LFDUA<D{ zdMnOs#d+_YpmK`N^!|R)i=R@zwibS;;S$lrYn8%sFP)PhV0UWGd!XwVp7}&Fq^wN( zx^@)OqUl$hRf23tccJOmoW1?6j<kU}(=i!sH<(96+g6g|TtF0W<D~A?p0_95J}4q2 zemUGu5UZy~{-J~0lxb6Kr-AhiB@k?qq6sTFHgBCX_2{Rq(@<VfA_+<+&_T?0uMi>G z$MY7j#!B*3CN<xA%FQP510zgrST!18#zW1SMr6pb)7578^HS<-KiWtlLRnl~8)>ua zO%jYqnx}OzVma)Vdy2LUw$;$B|0v*Jx-&Syj{Fee<Hwqj(Rp13C#^|s^Jw3k4AO2; zZ!q%lVJh{3schxc#s^Tr@-E<OU^ZNsw9Kc6cNJ^d1UGo{#2m5Buk%z5cinro)d?V@ z4qG@2jNs2BZT}Ew(IQOQ$x-;J)yQh0y&mB_I%4E$!!s&fh%35(QfgGqeHocmqt#r8 zbH6rX%Rjq7pnHKF>=i;Vn~QF{8p|A?l`6TpS>z5$n}n+&F}QD~*^{D$9TRboU0Yya zUb-@Uid|J>)Pycdb@H5P<!VzOgKG<tS+bvTji8+5v!b<$suK<+@JW4?k?hg(dh=(* zYRw&%KzSEGVei&6ZZYxT2N2>S8*V2rnNC<4b`=K}bgNG5$VZJvVPmf`_a&L}dT)SZ zId6A_oAJ40#4KEkM~J2Uo}qHCwu_3RuA@bI4!|it6bg1rJ64<)b^cFi258d^{wi`5 z$9K*tepYq<D?$}D8r)`K6PVi~OPRW*78yMN*JMDdn`Z%Ky4TFlr(U$XK9jwJ3-;+N zEcIe94J=FJy>8=}*4ky$^=W=aE2)Kr><@ku37Tz;*dd&2kWN)KR5+nctKP3Htw31$ z?6~j@Pc8<dhxNzUBY{9<4MiWOfgQVr8rLjo!P2~!voeZp1&<f2IBAaseSr;|1%V6Z zbNkNl58`Piit92T`OY{$i-nKJfH(rSb7JqcVo6VJ?_|H5BExjo0B^0#%IgBKNi3_I zW{?Q0{>b6N2G0)ZxcNhhkHi}z#ED0`q};udJFu-FrQ&7u$eHR|S&>X>#RXM?*A(eK zj61dC`>=~nc68vRT#UxPg5AtVUhnMrCIRGVa*+9NZW4VuP@;kT;Wir1PoudRAuaO} zkKbVdmSjEZ5e2XnGoTfsT?fV19D0xe2C{_}Au*9je`9qjM>4|HK#<0wu>^rCZx=|R z!9ht%i*Y+YNzp?xby8hnV<cgi(qf1z;jh?d&i~{VX`Vw*9|T>=hJ?VOvp-DHqu|eU z4)2W`_^?AL-o5`bEdqK%<MxL`#$)STiF4`$z89?{6gUPX5)6Jg@?`oWLyz@>4`A{Q zunhS~ne-_~nAr}z&MBFaoDAmb2i-n~S)bF1XWUVP`@uSg4igSK5Q{*I1<R&GA6*wH zmW6KBnh6lrjt;LU?_7@oHI|RtJiLQR5-5!O`G}b$fV>aVNMI?Ao#m!&IaVs*Iz%8Z zJd$<NuO@L&5lFO%bOLfWBjE$4n*C#;tPw`u{H6>l=PCPX?H7IaQx?8A!hpMMWPm3) zpfQYt)*d`4R?IzIv!1IB5|u=^pM3a!v$0d<Gev;o+`*&`n*f=YHBC`>dw=0iq|n+- zlT*gXf;by5K939OlqG|gwzMD%$Bv~;+VGX-j43}|Mf5Lt-r#*9)FSEp<<KM{&1TlE zDQBC}M4%fe$gE}*Eqn&^kkDuY<rP;E7>cxR(P8u|Hl(->oyKkQn`lw3B}+0^;;L4g zQw1mnFqG^gkbxB=DilSlgPRS&$AGITD%zlUAv6I>n)-$oYDr)|*7Su%kF*EX0$Pll zm>owm*T#ak_?=*QVv?mNKSK5F83RN)n{6{H!m5IHC27}eabFZD4&E<{k6?kc{!fsC zsYBGC^kv{buKr+656PosnX=-o#ipmDbzC`r75o1^lN~AQ9S)E-v{tf;YhMnQHdL(} zH@|CuLe(>PCBJ6vXH(L`auBuM&a7<gbTe;pyQ~CRoS2*}o2^$)%<!DghhvM8sBW~X zuGVKN^k++XAJFr(-dvj=W1!n0x53cTx$6rd*X>Xk@_y|9SYLG>vAy8s#*b!kqOh}t zv6OiO4YNH&4)aVl+6;9G3Kt76o5appIb?-f95deIbdKTsgK`%Kly-nekU%j*TDp(Q zh)vdjg4hB>iib&uq`(eOt`FKlyRt#e?yiTI$@!Z7^uR_;pedk^hU`Mkkp_Xoi^>57 zrP?}=%3#*Gk8xbrVq!OdfS)<ed|lw#J&0nL3Sp~;?rL|OF%`?tjU;pXsQpoQN{0^D zyb)L#k(MP9sC>pMw}?e_5M7t}S}byvfzm;aVTag`g3r=Y2WKZ-Fcn3?V;aq^$CO4H zh4Z^L`YAmcIBg@oVunvzbu(yRVUi63h7=S}Vk>ZvJBMBRsc2QEGFy|T)h57o4C*CX zI9jfS0L)Dm)Rf5qw;Nx;6e`PrW<B|!IN5vqmN!G=b)xgpf>yR#{fp6*e!t)XVhb%U zisIF98M~dDHsf(FD*@R%16AdYv#amr(gQ^_dFt*@R{~clp>eh&UTRO4=|rnST2tr~ zws<MCnx+KDl6|d?=BnTd2I-XS=!U9i*BfErwc|cTOlM51fN8ol9H&HmlR5v`EjFpV zX)-f_O#;_ci)jaOBX(}=(k%>t=jL?R-B8M`!0X{gcBBCe!g6?SSc;rK>xG+Exk{=n z<BlLm?F6{#r9x^$>70@Im0fFvPC-B_{!$#KRs}|l8B~qtPJ(E>m~JG;79%}Etan7d zOaX+N25%<&%Wn2zOO#yUOT(o+!X{*?k>E#(Ui4X|>R=3)9~;Vz0;-spi)Ug&Z6=oW z8c$F_(wpP<4z@xF&q4>rZ<=b;*M?f9Y+7uEqZ{i`_LxII??ihNDq@44L`pRC@>sVx z+&inqbUF=eIw9Iz%6jb%i%?rs75S-kM`SAdmL^0`_JLx^U(F2)lR0JCyL{FmxycoR z91BjK-4Ql-RtR04Vaw{592%>dPCU@n5%y5h_~RttbRLswiRJVd*Ct?8&LX2#7z|x3 zy4%;e%)@)t?9=J?IOL6|Hp3hW?I|`mKUPvoVCFD(3|J9H#4n@EaNf3~jd57Tltop1 zehW3T&d-l`{SgX=&rXc#Sg1MHr*k;a1zpzT4@1d;u63q#4@I#HBrUQ_5Q3jHaZ7`! z+~5t0XuT2o*-Sn^EKW7rdqP<sm>?d)5u>8r;Am|0Cuk5ec{+pLhTs$f7~yS-DinbJ zQQ$aNn}#}%pv$-~)LGw+%{c+rkPI2OP@Xj+XPP>jZinMS)`7XA!9i!JuTEHAUBMh9 zs+}^T7rc&>u|Y`@B@^R@-bvshd-o_1fqI9qqZp##<Wj>#oxf&L638T?&ZQod3JJ2T zHz%np3i4;W+w#{C_UI!;T-BtIX*v63uD)%*Mq3bEy){r>hIRAM$@$!1=D6bh73)dX zi1Elig~qMIx>f+Jd=bbh=?jlZfnBxgq88Qh5=liNBIb9nF|<U`zP*GA{vyMTjES`i z+|fKpkyL3a%PkKRy_$VW8qC^v!($o2D;g1xo>$uzgwmz)|MB&XL7D{Ly6?1Y+qP}n zw(XwAv~5h=wr#&{W7@WD-~OL{V&8ir&fO7}5mg^+t(6&>RqJ_vvzzJAnk#FuEkDf8 zM&n(>u*$;&AYct!s^D43Wwhi-nbO#Y?oPYlhs!^a=l?MA6Dqp{CkC3Q#n~i|>gHWN zRr(zOY@Ib_*?(1qG}FZpy$m&Gbxy6?J8X%vFH5UEhYz@v>%cCBnTkLL!5t8YsNmA& zn^*?4XJIr{Z4i$yF&zFB>cU9B=5x(jwrp~ZL$kV{4bZf+neg5CYSN51cMqeA_t<68 zq^oRM3|Ex|ThN@Y_0Od`t65`5k<nC)lVeeqJ4ZNyg3NMvF8u@BZ+dZ^+u4=xPs`~r zJ_Tvs5Mqi2jp^Lz`oLBY$?A>(gaiq~+lt6t=;zF<6Xf4qY04|0d#sj87G_jf^O<I4 z^QsuZ%H&Q=PsM~J+w0LF%ej$CyTnX_aF~=UjddQ&SvlLRCp9~T!s#$++yu*nyVp+0 znzXCp(L__zYhF~4dv>+0<&0SBCX0u0Wla|s9{@adG#50b2war>y5tWocI9C2b-ghw zi?m8hS=mW7(QE3o1G5vBmHCYQINHhb+gWE9(Gv>!EZ9OhgAb>D>C;j7|5yp}tLtp2 z*99vOqb_}!=7J?lC6oSj&`O{JE>|gdcpIBzvN!_Qb=X7JwZ^VIm0KuF!7Ylz#?C@x zo+d#|vF16wXXi3=(pzKy6Z{&*WcssH)V108D;e%CN;37fmN$=&Yi*8!$TJLja1K_B zJ9dyY%!f*~sES=(Vps~#jh6}Q?ObHi$>@+YFSXcqOeI{(wKj&N=jLpYv^d3eBe_pm z6Yz!)a2`6PTX@GXU?+Vd3xDZS?Q^4sv0dQ6e;bVmt5c}&ufA(rMEXZz%O8|zS$$w2 zg{6yxWfRSvTff8_%f3W}se{3AWFfYr3d)^qbMj}wl5r_>7~F)URq|9KU}1&31?Jg> zCZ4zGY=Jv(%nPUQu=}`%X_a;vB?jGwl~iSzQ$*b|Sf1x0a>B^zyIXb`Xt1rSh;4H$ zhuh^h<5md*JVr<9=jjyhTmuL88?{S^g>|wUZFlX#*pL<vrzn@exSfGoLgdd`$voD4 zOhdj<ch<Ak{0v*c7!Yw`e`LP9;gz0IeTA01(5h&kQ!SdSK67cGLiHy9m*TNr>W-hi zdb6kEG7f$DyL>S{nIFUIPlI!P$T`;LI%2YmG>d0F23#X5Sh)dj$YTjoyo!eeBeBll z9xaC6+W_Nkdyf$qM)2NwTWHz-CBnIY`EOB^2+|(nB#$xD^+vrXJIOcuwPqd|q{wBR z%O^4OnjU_XtIG*?b{ZR^b+OELF@)c7NZxN6Y1_^#i+j#N8N5}eg(9)KvF=Mg(x)JA z7r6*`SbaxDkIdJvt9b1nJ9m~*B%#Jpt?R-EXFNDpiProB1u5n%g5rrjUZh)@;T?i0 zSKH;4BXm-DuoGX!K<6EE)^J?bk4!jEnXBW|G!{fQftMF*BFY%U&JtQ=BH(K&1~^eI z%(IQY5aL?V+}&0U49um^3<{LoF4c7{Oy~_pmVzo2$5E06)2ps%&n)(aVJ^A{8J_;n zPZ<!Xe|*n$?t|&(e)(2jU(^|E)1pfeJpMaN#7|W>$^bzdg~ix*ehu3Ik1|depEXpW zn^y8c<T>OH6W;%x8uCOweaGrMB^<;((4ufZi%M_u_{}JnRZkgplonOu$ZC&w;DwaK z#kx*GR244DIBdLbKyX0OJf9oTxRD;t5Sl^rSWYuSk{ESPX|Q|s<&1L~haYOHyYABT zWMxdULRMx|=3R2!6L<DKk$j-%IV?dl2B_uVu6%%!(ir*7?BG1d`1wMD!sgcW{9O!< zV<-teT-Ra>NRd{|;eQ56BmFXcx_t<D`|jUsWtymPKeH6-w_11~oUXe-q==u%q|q2M zf2)^`y|B3i<3*vloWU!xaGpAU*}Jl!7HRY;CI-=c!I0E0?A^pZa)O%)Q^!T5Ik&bx zW0yWEpXMJvBz~L&Yuv=&m`*_Bmg*O$-DZDx3{3{?tx%ASnVfz@W|M7Y2Ff`<o(ix} zGz7h|I>9WzK($9!orQ-DG|cxM@cV#K%&;G+VGm+ezRL+~r8sAmv$riuryz*Qb;Qc~ zYM73=`fL~MZ4;_}D_zIvl<On_)x3o5%X$iRA0A@7Q~DbWs28b$CUZK8qsdK(yFe;f z%A=$0O+rZIH|4`5K8h1Sk8ch$rEngWy*M~=S5Zt1=a0!{kOoM*DQ1)22ihO@E3e3j z{AeWj_C+l_v!mF5#6vOJyN1zGWl&OD?=x^)moo0WM$J*z+6lf~rDSQ6@-n(TOlKSu zv@l~5k`QCePru9skgB7H0)?H|9!x4#aH1dJ#PS<;5|3c@iX)jFZqp*4n;fPLfv1N& ze+kBu7_i^!#CmTGep3LCLnwUc4)&%50F8c2ByYfJ8ef1Ugef@_9N2c?I6n(*;a`dA zPR<y`Pt5!}xY6N{4h~=p$Q5>wO4u?;(}(~5mLJo<xddATd1YgH5&;^J*BoF7fkX(< z(iz_b`D18kC4~T+@I3#?n3mTB5qiVmhk$x{;iJ6uA>x(i;eH*&-fkpY)AEmqqvmIL z%dPri2GmtPZzeS0W43obKW^#{jy_<mfD}GkLMenb8YYp9{oOgXfI=OB#e^<qgf|~R zO&jVp2k@rBz!>t=h5_>6(E;X~z;ceDO#tPU;WutPb(Z4f8#zrd48i7<FGz{Ep(=;H zZxV}(5GEcX2ac$Hf_0F6={6&81W@Ji2OG9UA)tQ%LrZ_8I-x}Ev-mSpF>K+6L4kY- z@)X-Om_%p!4TwZ(^M@OHF9z8y7!}QY6)5z$Rj^mGFDvF~p3-%bOix?ub}CyY|9wJ) z*yBTae`8K0av{VLVUi>vmPsHObfGBo{COjzq9=lqc;duTHLOKI3KyUwO#!Q=Yj9=> zcO+qYh3cb@X+reM`D^Ce9N)kGLcMXN+Wh_ap)Y@a`1_Ax4eZ0rdBAIV2zlVV^r%TT z!VcMw{iis9YQvZM-ZP^mh_Qad$T$-)m~ns{wkm@={rv%R@eJ+GW#pWnnk)9?AM$x; z^8N+Cw9i#l>$3WEEJWw6b6*E6>A~o{TErU}IRqUw^r?F%lU9>f1rfW`%41aCDQ^~G zp}B-K@l<aNSML=&XogTVTO~((t8scf?s{B@XQGBsCEpT7lJrvfXvw#5cs9yf^C3az zw=_DVoeJWf;TPk(WTxX-t$$;A9eB>ma{kyTB(Qvb4F0)MmOFBCT;kf1@po#>(BKUG zz20UVKXl*ismI_65m)2yJ~Rt+DMTzri^5LW$I3hi#oER7RrmIUhT_s`fOu+aN%Ze$ zVHX6=v0{ognbs<*b(rd}7JSIdGas3}qoU33+CNt7sIB8J47Aq)j!@i3EXp+xUWlAM z@p^~E;8{^dblwO{fMQry4M)SP1H%n4ivGn}plyq=-cY<tZG0y@T`-QD^_Uyh4cM7} zdk--C0FE7r8;Ulx9{=@Oe*zQ!jo6?ac-l}tPVB2eC`SzWkZw)z_Z!8NT~J4kut{HD z=&K>{HUtI#_qjj_M;hMn)IJgqHr_}9|B+jA4`hd+QqDWSkmvpdk6*q)3IK;&vKPD_ zxS5@>8{jVx{lVHDGUgpMYX4<R#E+cNfpbl=u}~-DB>325dH<Z<9jrpp_x>B&guzBj z@|@%so;If9apX`1|5hxrEhAO0RHaKk@#bf&MgASiPnN>9uxNAwCT;JkbS*Op>M28T zEZ^Jc?@Y-@(9^LutapSU)*P&&h;L>|p6^P+&7<_y$7^7t20mswWF5Dsulit-dNBw< zRC<5iW}~osZl5HUGX@Avp8*#+|9;vF&&VJKE{eeb`AG;}mNTvBN+f9Z#i4}>yl!~A zBNg?^82&eC#zi*Bjwdc;ZNqbKP|&UeCuonjz>y&n`VJ#*G{6b<TW)wxGuEVy6MN(e zv5z{--{ux^W0H?z57oBc3Ul}r6QF!C%*>lDQTl#wy`Fn3ww}vG8@cz-Ng5$*+`3E- z`wGWRnrkT2MV@D;{^In>e_=4zf)oXzHS2Ur)?&4A`XVu18bJ_<V#VQV@5V7KCtG{2 z7qE|cEIFCfQ0-Q))d0uO!Q~M*buc;KeN)}-xMfmD#<jbi19eP6aj~?^@@mv(nCd3G z239<6T3fY!E8D}!wVJYs<u_-NbBp0M?8h;rH*di1A`G4d6V%p}9UBIq6>s6D7v`w5 z<939y-6uYxtx>G8XzENyd9WYO&uzH$4OzUg5$`>&OZjUJN4(U?!MY>75zgiTYd<u# zHogdN&Bkpu^nv_MCXe;Zw=S7#PGv!V+3Jlsgb3zAd|-qKZcKt|f--4(kR9eW_S>}A zY|@PVbb`-p672^c%q)ZDa@aqC2@62A4P%b(qrULh=GD4)R5j;wPwpO`Zu(=NTJ2xi zNV#(swCu7n1ib<eQil_Hqly``?H}QRO*_D1h?P^GUgngRcFxE|+&=hh7J=V3oWd*C zE;ziq%82W33EljCjp<kItN%=3{PCEM`5p9)yzlT*%lIWeGfD83Yxp6TgJ#dqIlS)~ zA9W0X?fSK}CsvnJ87t?3W%6+teXGGZY%qrDhi392Km4K>eY^bgJc0QQGW>#rx$j^a z{Y_-@As2ni!7_Yp9^ISF^u<2>LclVxJuT@AQTT*E{L;CC_rx^(%s6~)5#5{0^u<5? z@{YAnU>NO}#`J|W{37vg_<{YSlHrus)Zg2t`#THLYATA;`k86z6`lR%<o0GTpz57a zctzDMu4k_IP#Cl*)=GX}u->pJCNNzUb>rT3!@`J}Yu4roPriFU*#|S(C&LI~a8%|M zQh22{`ZsPI*L-bLj$-6a!J5nL!xaN|udO$m=q+|_v)gai>>1ZzP#Mg9je4c9n;xWi zBp}Y<yARzDMAkb>%QNx$^t#W(J2llWH&s7%<C@;Zl}>7xzBc7~ZPqze=KBQoGk_b! z51RjjMz(K8aCReKf@d`+usvb!=}}N&`f+Ds6^`qt>G@h-qv<;bcIaB+H0Al0_ds7t zLmXkF6~mW2V#=@g=?TIWnwI)jAWeKglX*$&3H-%*STjfcFAH<nZ|%P}BV#MshAA%u z#-(d?<k=MMLufBXDXzBg4*K#B0(;O?ug7z)<YsaA_o%7DpBQmM`5zYG=`TR3Ka^A@ zcLGDrTLJpPF4Hyumf_5MG0$~`s*6>`_t>PTz<EGv7e6J8RgZ5opl{RQxg-AOoRqf? z1jEyUcM}4~FY$<f2Egn42_0(40Bf<GCJ3n#VaV>lb)*7MTg<B|#Lt<4T6Ih}TCWN@ z)dj~D0WK04xkI}Zn<X*i$Q0v0VMTgTq~r(^6QX0ui<|e0R}5vxGh=i;Rq6&F57@7C zY*uE0F;&{>SF#aO^1fz9go-74%7QI#^wFNNw!fNcfW(}zu0qresCKkn6DUa&tfw4r zi26>tYRK`t^ap(P@U=4ARRPKEpNf8+a`bCLpj2?(>$Xp2H<gGsf0R?M3y$7RgkF}s zC7}lkXU<=_m-`P*_#aI`!wcf@1#n{vt<PBtU6l#b4_VnVA6~nj3fP|gAS(=K$1+>q z4-G6<``I^<rg<7H%(FIcukX>Y2Z>+H@1%JGq!cAZn!rJtktRm8co2yvKVlM!KG`+k z`x8;l&_G9Ewg$S)m6R!4nJBweU<^eXU12*%vJlO)7^#09ef;hLg=s)06tE^}J%0gc zW0^epd4t~)rByyQx0v7S%Od%Oi$h#8!?Ep3x&OME+~mdN$I|NeI%XozpL$Y_n{c7i z=iDd@Aft;YqYDzXE}7C~vlYel7*ksS#AoIb7se92$rgBtgH1em!`jh9`l4y)Lcy)U zr2+H`okoM0n}0wK&cCDBc;Z&O<Q=_DX-k9LVNU?}1j@V`b&0>S;Y4{15wk%6C%TZc zt%lgy5G*I&N3XzTJ3Ym&OjQNf1L7T^EjOKFsmvjAQtoe~QV_?T=6)Ii+Y2+#kM}`I zDvU1jLc8A!d^g7#?|Ej4y_fbcbt!l+h05ZKaWbENs}Q-Pl=g3|mxwMH(e$_9YAWxU zzP=^7ehTC~-vaZvmUysWt9A!-i-z;hT(~s>NUn6zh37kn9e?po%{c?z0L~p?>I-p( zaGTILCls^70wIi>@Jt;bEerUZ*-rzj|3J1&I@9mWd6!Z)HK$tk6Ov<Pq(^FsKXR`_ zb-yvn^|l1KSf$CtzsxKK7*sNGx_NZ;_P(WI?wWm{#v38~zru3zXoSyF|K+I0*Q5B% z2ThK*{TsyP5%JyA!ge{ViflE!R{`9$8DOjQSD8_piF>mPNLw_{xxN3gA6<q6`%v$5 z;C(Fs*$RQNi^M3VOewZbVYXX(<r?DZWCdF|&D9@<9s)vZCvidOL)&0t<oi86Lo<z& z-iZNmstJXDeCf)3AiAlYwHy>gFhGRXgG%6Qp2w+BI!R2M03x`pk88b5DyErbtgsfg zigp*v8=GFq%cvF%Xl^1A{m^3!#t~n!#yUN*PQ_=V#(Nn5<Jc4?eRe5OZ!@215c+yy z^W4ZG@N4LS5LX_d{+S<E?Ew;3EN)=#!6kIaz%dEm(7^}RZI)q|_z!YTLFo?t8{CG- zOkdCgZI|p!Kh6Vhmjpv!=>xR4P;G%wtqD+fh{%Z@ZSk`c`zKcFd|1{n{{Z$IYFx>T zBZ|*-`2|eVNiJrw-!9ez*;QWcjrTMK58NOH+yF+~CmRXGHk<P;3Lq>O2ihyfdz=M) z{+9_N92@uorwODS^M|TA>VnZQBli;Kw4x6#{x#t^a_Kk@StRisp_A)A<~zlC%-cph z=6+ruCPGm3uV_|s#%dJDsP2BiZ}<-1S$78x6M@)dM4ktET=#f5{ck|S<z1v>*C&JF zcjnKPb_6Huj4WL3Ft(zMb1E}p?Z7A6_w_6KIY)h6V$mdV<RA86uB6N8*ymL-yCBoK zIrJoB$-o~IZd-QgT~HHrR-8toN+t;7;rv;<$q<$pPsbi7PF-VK|H>HXwlPh}R_v&q zU*EptWx>ZWW;Yp1U=CO`yFMmrYy2mou-xjI`?@wU(r*u_cv>pg{Z=j0SCYL%%+`+| z;uc@|ygGNICkG#=^0KH#Qf|O-wrAwFZjg*TYyVgauiN%tQi~CkHk`zloR|yH*0TVe zcI<6{QfpuNRee(g+UilfY(P2*S_`aNSnOQ5at^OUeZ3=jZ_K1m9_Miw<NVg0CkKl1 z1WP#9z0VLo{%?@1K}D4;io(xnOZRBFCXzuath-2`!*?h2dWn=v^Q1+_$i`-gQ~CA8 zHjRZTs~&k4z;F3gc!JJpvsF#$tND@JS&;?yQYK8mpNK%CEZ7pHFd}i_BTT)zzLQYt zeN;`eENBUwZU2~ItP6dMK(j0`yI~F@>nynJVR+6(P6&C99<XD~<9_;m;1vs9NCa$* zdYkOAnnym5r8ZQ3c6yWL4qSf5nqY<KN{_>MO$dcIg8vx7X{c2EWB&2hVwd}$T9E!f zqHYHhVFw4B|4aW-GxvY`j~0(N(oMHy^^q|l5hZt!S{Sv!Q5A)eA*K8U(MkV8mc1~0 zN`aHJ7?}^8&1*Nes8=_u)&B;7+1Q~)I<?vl6*pf|E_P^C%bd?Ib<De5c{Q3VeqX=C z5LjIC{0A54JJU@N=lgqv@0TJKxb6+;5!bHMqy=MOza&J5Uc6a>1eaqI4C<sy|EFf3 zVRWDg7K?npFxUtUr%*q!I4Vn8*$%0GDVGy-N}D6J{8YacXLdg<L`sJt@3iTTQ3W$b zib+Ud^2hn_9onz#>K!Ed4Bq(&7sr~w`<H#nFU|~!d$cO&J>V+!x==qGtoHbRVzBeH zbK@g}T0;;Q8`HYrIT<WklL2z@iEPp4K#3{n7Rr_J$~9Eou`&}6=VX|5rwS0BEXBAH z>b8u<>x0vM-8S%L>NffQeLN4~LV4G{KfDp1C(v$8!=;9;fuSf~j`Tr=*(*_tu-4ft zBW?Ukl0v<KIH((ChJ7KQn65^U5Lv8i2Yq!gBqikq^4M_PPAv9D^)1wGQ(^?`XdC%E zV_n-+&^Z-5R<y6~Suc9Ld=R~17B|P~ygn&`+Zs2v_+Ntk1k9yEU^7ZL63{u7JD$)v zwL5WWU4s3&lpgtk0%|uF(E3IHCH|HNV^F&}hW--npU5)(H-Xj_=vS+HLk;Fm<<T6t zOzBY_xJ=ci(|?ZkQ5?uoN8ana8}niV<_93)Se55-Jwb$VZw&N8-KgAg_>Xv-4jR7w zM!joF?5QWa9}o6Q^@jebZ_{?e3-g`_>{{)HAM9G=21uN@Z09=NG$io-^_>WeK>Y>@ zj6m%M0s4yxf&d^;k49i|6C9{O{gM=@@YANFz&C-;x6^lw>Yan<tk^HWBejR2`$GIB z)}M;%t<|sLe52+abNSj4=s@|R0nu~X*NV9D*RH?pD(cOL1|aU<SicHMXow<g?><U! zVaMK5gAI#`G*B&uxw?-aQ4j-ExD6?u8TdPZQg~W$Wkr@`m^j*DDQHe`MFx@t_g~@H zRH#_bFQU#hf(Hp3B->&Z4U&~}kxg)6-$nt;Cio|JtX=qS8bQqEhS-#&;XDO-1qQpV zJcp%jAikAzySPxPGBB2~Ld!*_p!~9WQdIl161+b#gad8!X+J(Xl$eRZ9Jz|zy7NN; z@eYMqcm$crWy6N<ck_EIrarm&_D>7WeDQzTW@?GCVh&d8>$RAxk@T^b-rpbVvYgoL zAF)7aDbqU{#h1`o*9PeF9TQxgn$^#CC8^_Hn4i|D3n@I0rRupBOtDBAB9&Z&*|GbL z3gQ&9<q!GE`LWoeCuOY)R1j=slR2lG76?wBPIs@Od1}}O@?BX>6XVPvW5;%6r2a~v zKIVUYDJs?wPaqjfQ6fUxS#cDgQrnW*Si3eHB4-{fL>7zBLcaT;8x0weP>AFqLr^$r znxAZnW9Iu0Pvy^wcgG=?Kq?2-18$e>si&H-bqePXAmQIkfg;ozx-Qq>I)#B)BEt)O zbmAMis8(oYg&EBM<-b#{x_Az5@U*}=7R1TjI!EFE^MYGYLxC6|%0-GuTNPz)LBQni z#b<OcEw;mQZnjF(QgLn|se&Mp>(5a<Dsp?qp6hsueXGltfJ2FLG?f)5XrGU_CD!-* z7VPWH=n>wXtU4M|*P7G7fP1uX)+%Y9_Vw`xq{_(1fs=hRP*Z`hh9@L)Ic6FkMR;wy z8hcqXUa+LRtS*GW5p5f1963{oC{f_iq&Gs(0EEzTf=g9Buyd4lfALDdvvSc>0M`f} zl=|{X=U4pblsVQ|^-6|<`1p9=;d?6gyk7W)mt4F33<DzlM*I{r<hDgak|&-Ys2XFl z6hPh|1XaHt#L4C$sC~l;=8%-i_eNe6AiiXV{Pro}KjI>D_blK)bcYyjWYBsCL{J^5 z^cBG%RYM5*g5_55h-J`LU&ta>+ZGAPPMfZTM501jNpRsqNRlglI$n&DR0jy|*qetc zOQ^F3LVi(y;P5+z<EoY2z)JnDpmq)^h~)iSI}mk)A#4TDB#cHP#vfQlnq!}VT$pCr zM487j#mwSR8_8r`MLk>}sFnP8>&u@SI^DS|EiaN-sVXwU_WQdIJkdkg#5_@J{B{xK zk7lhM<DZuu5~OCuIP{&4+P^vz&2&D#2DwLZmL2F=7k6L}lEGA}N&}r#$&32!`XMvv zuc%CmL?uMgk~3avvKDf>pZ%KoibJqU6$2PI#UhicArSBh^JcEBX2_O;ImD!MWvDZn zU1NC=cm=X(hgIq!Wkng9csCFn*09lr?s5^(4E1VaP<WTI);|Jsyn%DXMqFcduy9Ub zp@}A!BxUOQ?lMw;{4h>sG?zi$u(Z<1!W$Ab+$kl!_*+4@@K<VHnS6$d9j-9Vyhv*% zH8i#tdYxSPHs5czLY|#CQ8r~O6FDhHR90zgH6<GK1hPuc&~j_JTgmW5HZ*=v=HB%N zei~Dx`m-(5l0nPAWiH`E6=fK3@N;F6WX9#xDN3SwFfNk0%6nSUyaJ&br#9pRO=lrG z?;vaDB)CK@|B@zaveXL13jWmTAjCV;8jlIDot2%9!P!0H*{HKy>m_}zjhkR_a4g!8 zq3Jv5=y|DhF0aqd<!Lnw>G+r)+Saz#C;KoKXw&bY)>1JAMmtL-<who`2L6M>Y)&a0 zJCkl+7DXy9Q9BQs>rqVOC%1ek)pqj{>fR>QAswz?Rcwlj6XMFmRKZGU{M)~xYb$D3 zlr`t|=L4vBx?Zr2cS_XFJ?u1?XwVYH=wX3Kta8dAVN=u#CD<P3?*P3-fwA?$$l${q z7A4QDZu=+(v@+O5!8P|+OT*U5Qb&u`Vi5Bv1Rx+Ip~uoSZ~T0-!A!<X&qm_DVqCFp zSx1>>WKmyA^6%`R)QPD$->#y7*{!qqLHZt93wD2Q`8+D3wP9Ul<`cP^2?_VdDzV;Q z%QS4)H&s?T^b&b<;~1CX8mNXWYlno!?8P2_AOCT`gng4O^&#lF3q-mK%fp1s1?6R> z-l}@NN*jB1F`S_~O{&;@>BC14*3}y8Tj;`&@()!a+6CT>r8x^tGrHe7GC11|Z_$tz z(N-9Ii1F<THsDmZG#%}vj*at!RkG||oXX`^a!PcFXOHieQ|vLanE6?WWC_S(=XcM@ zjUEUkzn!dRTV4u%ARE(C^HqM!Z2?d#CU!b%AQCZD)Eceu8PaKL0z|5m#X3*&L{ci> z>U9G(0KH{{b3i@mxJ8lj^bsTdsTG=lrwQ^Iun+#86U`c>gf3M)CLOe?88VfsL*(nS z*y3yw_46TaC*I^}YKq^LNvua1YiDC<Xxh<2P}!nn+F~J-HVy;b@C&!9UJ8ms5xQK< zjs6r)nCM=kVam0TnWCYboqbh3kWt)kqgr>A35)Z0imGqSoGUYMbuC&5u-Kx=7b%H9 z)#B_(h<cG?r<E;rab41Jaeb@eLxRu}_C`nFL@#S(yv0p?m>`q7yC8+_!ja8g;5q1? zxm23S6O_-Yz7#Tauz*LbgM+q_fw}1#cwQib#xG>VO5ELRw7g{L4X?z)mV7CA9JX=i zc%ck(-&U+rZGT)U^fB-AjuB?z}M=ucQo1!TCd8mL$}<Ds{kRq1Si3BFSLTJy_p zM(ETdnY*PbR6<Rx6YH}+5Xs6!fSiU!N0!BX19wAecaxPlpU*i6h$|{dl3(R|!|E;F zPNntd@+9?~;$&c<49jza9{B6{Oa`h}!UW2e<S7v`406jDqm1nzIniJ^!d9&4H;^r} zKSd1V3cxVNa0b*F=-B2sgbb4`i7D*k@yVq?bo8T~LXUL{aW~lwOw%Egohi^n7(g)T zHC{T);L;+-+{DJB3td>fX{9@6615N7VKB*<QVU4XbB8i9+s!9$;-^_J1!SZ@(6jE~ z>$yT#H4Xu2=GU~^3L_Ij)Y##7BTxlqGhDwkud_A)pLM)iAW`7z`QcOuC`t7j�*D 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�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�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 W537O9MJ9WKf1(CsaGK5j_5T6T(ZJ#W literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/lib/antlr-3.1.3.jar b/antlr-3.1.3/lib/antlr-3.1.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..0ec52f864ebf29a8d3ba8fa21364c3ef687c7fdd GIT binary patch literal 3415952 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%0D~qZ&@Kjj==KG<*#BE9|3ctqFY* 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%0Ap7=2mU37|ucI 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Ǐ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� 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%0DQ`NAaumCY%ZRqIdAh;cSN5Y7O1Xk^Xg(uX+gIf{ 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≫Z)pTP~8NYjLq2(ds>4 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%0Dy!#(%PW#^@EMjV7>S8MI@b5s!_sI=1AdK*r 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≫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 $_n>F0U~1Zi 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¥ZE-$m)awcojN#o35Y!(5(lk4W?c=xl6v7 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�Of}9aW4YpQ@QHZyj zLo`9t0*H2hL>}D=_upJYAuljU$VHD96>%6|QT3u|WPQxb`P&lor7p4#l^cIa>TB@7 ztv`gK%Z}Vv5X3X@{?h{if8YgR{N|4EAGzcFpK>Q@We>D-5CR%o+x-W98Gl-Fs2_#( zw3bOqF=@WOT7WerHIa5SSMUCONs<uOtCL2V({1K88Iyt!3OyM_KZHS(AMw{Rrs30H zO~=Virk*E(o%RRgRa;v>Ks1J&a3$B}y9Yn#0g+vT_c_$IF<H_?;9X(LB*Sy`J<QQ{ zV4^U^?%iibqic2GRr>Dp9}>!hN(P{uX?h^&w{DclShto!-6=#zmywl@ECcCGn&Xw8 zmtT)sIw^22zTGD;IWW0*BW}P&a`cI4N_>#>l-Q|Wm+}$C?Pni6Lu4WkUid2Z#Sy8- z(pBEUS3!hcvSFRY#_OEFd@CCm>Ec8!7+;{CSCJVe*)-NCvq!Zy7tRa%>Nl{~j&4TG zdil0nR4eq=sn;!|%plP$T&0hzZ#^3^u-^-@6#ECAjD1}P>XJ-hgl)cs458)j*8@79 z#u^_A^skmY11vc9&A^{65g0C#s^IljdBJpXPoaQa{y|}7JnAy@bGDY7dPq{?R*ckR zek3iLs+GN)V8Ft09fKc43RYm+iv8!=z<dVj0Ier0&HC|z!b)NXcQ`q_RVv`?1&Aw6 z23m@pTL@Z}<FqJ*lQ)@L_E%nmM7gw6ayn4si}XFX+6SZp1k9=ZF5mqdm;mcwk7Iw? zSQ&u75e(CJYLp#vO=&y}T;*giE^IpJ0i1}3;C5J;<~d%0XiJX(j|*6m!(e>ufD9tB zt{E5&q__TMupQV#30!Q(my26A(4yeH2%yIaVsZ=ZQ<A_Z=NgG2(csjPHgTlvGsyc+ zU(;F3m#WV{{+zCGpnhJE`wi{PKSIm;KZRBaXk!5|{7<!1`Pb!xI^EU+S|u1IL<Nz4 zOBg!JCqWou)%sNl&@a1Twrg^yJ5EiSjiYr0Gs#c#9@8RHxgk+}PkG_ajSWnuO!vTx z6z<1$`@@Tk=jYQ?XAqd?t+2RcIO1?lA7lebaHc3Quq5BBT|1DlUiy$Y8c<!hZ7q-` zFdcY8G7GJqQePa{j>67M;|gMaeSJ;vuGjhHtW1;Skrg@4679-k(u~x7Y_!bvnk-xM zur3?eB<nW#B^oM&e7G?ibu6{|3(6G>EBPOl6tWxC6zsR|?c0U9ZLoHO^mc(h>40m9 z2B}PLZnsTRc@7f{2YYpA*cxjtpd#f$*Fag}x9v1la5i(z^^xg_2Tr^RXVpmunok>| z^qfusf_9cf-3U5Fn`*Rvy$CKj2TE9mt9pm=Gu5M~4N4*0C6tbHNmU7$Vv#Ta$Y!U$ zKE`~}wH-?0X3M2?&@IOP0+RE4iZ9{=RIp{i+l8TmuqDa8u3)Fs%*~?ZPOg2lcH)Ru zEO!OkbQ&n(aA?jVk+2s^G{{g|iADX1^rW&CrPGM2Hc>>^Ki+{FC$Zb-U(42Kbo&}H zh0ZG-n)()97X!I}Af+02Xzi=T0Mt&qc|L?+SYw<jJ+ZlB+aFNMhQ7bK?rJ^g0qk`b zZz#N4(-!q(H-i{EsF01ASOq9a2ZMR|rl<A&7Zq0%j@yII^l7~y(ZiymM#ZBIP=c;J zAC8Jl;gk`tVnOwC2&znffgA3HxPAzR@6vAPNXEwUI7CKI3A0wBiU;fpDLbSYh^UZ0 zfZZSz+X7CHTqPDM_@9@N`F<9-z<^yM_PWbEGz(gWh%x$w#V3c%SVHp@Vv0Fk<Ge*h zX8V73yi>Z-$MXa<_;`XovNMKcK_VbllH8RPTs+!&T&XOGbrzP2sAHJpnzTPi%%7vl zxVV7*ThyhL1o%6D?~mDk^mTLp&-cflfATg!JHUT><T6yum5~)Oz2KJu)QI|}Lx5s~ zWTJE|U=#DSq51Q)U99vr{i+)2K&l^-UAYKsai=m9cb{JrWiK_qGU!LlG1_mw-hNy8 zbGel<QkI|>^Dz$x#kY+n(_JY2ZkMm{&BfdFdOVooTyzkDpPY0Ynv3FRPWCM_K2$3q zKyjLkA+f`y7g435HHSSkP;0JMD};ctn$}O-@`m1z024N6z4GRpq$+Af`Y48z>x=}8 zOE_KwKAs`w<ieeu)J%A2<}6NXj+(1kN8?a~>W82@T&MAoPDyBRcxlNXt}wY%O|*sk z<`cMTg9eRlpn%-MlT@D8_Dic$v5lfhMX}0PR9&>%3WpG`5@j5&t|>>+`Y}QiwusX( zw1RJkdrXcwxw#b_^T|mBR|b9AM(;JsWXj&92^iRGYdZ2nrsb1DhG{vM*7UHkisojR zy)`arS;+v)AEG5Ub=;gaV&?<TOJ;B#!%3=4KAR8pVxraIULr=Y+a=+Accaa|Wz4lM z2Ltw4oTMEtM229lSPa)vgVc+V<sB{!N;_P5a$<vA-%wZ>Fty?hjU{ZXgK<*hVi1F^ zvB-a!PuBM?nrDX$_6te?tu)Myj<{I9N=w>9)fayUqR!$PRW}eZYblS<RqE7~Yor(T zHq_P_?vu=@Tce&dTFcX>@%~UA{oq@Yf+aa;kFkoX9+L2hS?2VnIAF2)@qza1D(aij zDrWwa6uYO5&fTeC)xiBq{3IwO_&`JS8R-N_rO!_;$;)j*EJ%vjApH;$4&)eN4iu6g z8&9GRzi6N6{W>rLREJz|dQ@9KRzH8S8q8k0?i~@ipn;Hbxl!iuHK$6`+};B@kAT}b zrskme?ntoZIR_4K2a-UJl@ty>oCA`c(E1jCs3s_RdaUr&t4VT_%8Gob5r2k9ypIVI z9q18qE{P?ilYH@fHY7-}wDz(7eT85b6x}RstqnhaXwc%>>3ZdggR@am+Mn=Z#knBH zOlEB70;57$!tupf766_>*=_c}wplLJYUIc7Z3g>~PZIw9b4&kyoBjJW5lwdwm4%F7 z9~V3q<9px+5)$CZPzXfhq&)FKf#Q2)`O#lou|2j)vGnzmB`Hu8%$G3M?iEYQYRh`H zt^z8p)M>sTsh_r~mRSyzo|furmn}4|wwjfpzr1F+A08OvW4@meq;npw+jn*yK4)A) zP2sv;0YKtPc)j7<e~NQ&#viDEvieXT(*ERf6^PKac%25~;nD`#HNai_plj+yF}4}k z^62>13F&tYk@B3!N+59yKswlwpM9-kB{+WS0-?UDf#r+2&w7~&?vl8yVt!0v%?bn8 zJ9<isB>5DM`YisOL<sjRaT_xxZiVFvT1-?W=LQ0}xi-F$Mu{$zpdj&<R2hfcOiU5< z{V2HuKUG2QW^E_(+trYy-Y0^K86>d>&c;i#s1!jrMpJ7_LZ7hGdW&Jxv#5%y$PQu5 zK$gZBlcovf<zvw?8XDa~d8rKREL#lTC}>LWx&(JU6|0qFUgky9;?imN*4orZop`8J z&3z$|h1G|1^<<?Ih!f=`FrVl^0bWaT$<COT%FRJ`KF_$Y;#r;(W6Fkzu(C1WA74Z| zp}dXd>Rw9(y|5Nj&EUxv9EvTGDVyaQX*!rwlfUMcNN^>}AdVg|a9B=`lF=;E>n^t1 ztfU__(AlSAAW9`!gj<Bjgo`7eQqap68HC)kKn~o-hFmz1#(YByc@%*f0zR-duvTca zwVT3O=aXYlXi@-d?3Kq>(JI0)>aPx;VJ4$Zs}FQb_FhzsSjxDT<7eU`2PnRZw`vH0 zX~#4==)|m}%CeGi<sF7-Zl=_T(DJ5jm*V{&&b~1?vuN$IW81cECmlN-TW{=i?4)Dc z_8Z%_ZQHidbMKuyHQ!Xt+^YGio~rZf{8+nAo&9L7)f2IslX@8iD?*QAd$zVoC|?!U zI8s>PR!@d%fFV6(Vk6(afM*oN;wsJB<V#vX^h;juiG03pYA#$Rf+GGZN`kWi*DhWh zTTRDe;NIj{IT^1gJB`eXJhFuM7-Ih^6PPWkYL~HS&;YKvUva{nyH}AhT7_Cgck&=N zbXg8!c<wzCz{1w9b#a|^VuK-msxq5WpW4CQN4k=a!Qo1Et#MITmU;%PWY&l__qbA4 zQY8omf+2lxb$h*=Wj$VfBisj<zE!dxU4Usz=&5qc2%zGt_-oR+ugt^wJK}xm_`&GA zSYpzlezi_oP<H_;N#D3Wb{9Upj%Q?UPUZOSs6lZ<^=GS>9_^UY{JgXv*7zqzQ1D3D zu!hsXtG69>p3H{E{kz7(fVCM#Xqo^Cnp&`Y(u_(^2$YF|xW3oXME_r`3-B^WANDSC z16vh{s<PhrgEx|xGoTo6yI{tCP}wCTv?NP6pH_xX+Q^~kbQQ>T5G~4x^jW0%ejVKV zxUe+uT1G@wECs29lh6)s)4_utvM7b}o1pvay42m8t2mlBN9(%Ravcf}+{tsLPRZp% zaUzbiF<ixtf!Ov!rU9OOxmWrCl)NQRlr+i}7m})S^#n?ph50Y24mX~g$QOdO;<==w ztN5n19Q<6TvNj`S0w7`~?_*D$2bb+(!EADbofai^BBZu4JtA@UWt5A(+%T#QYt<gN zTLpKAGH6MrY1BnbzF68uJ43j9eUa1?>qOW>-wuj&i))o))BEB2W<%x)`w1MV_^Scm z-^3z;T#nr$y~$~Ny_NN$1cmXtN-(jy>`tvt8cG;f-D&OqBqk`E@xW8t7OPG=8Y_&F z#D~HwfeW@X9A^8g1*3j8T1Qb9;U5T(hLQg0?FdE1ZOA&BV}e?dq+590TB|qNb1v~Y z++MCyJ1ab8s)yc6lD`=jEZc>t7HC*so7u7OTG9VnD1z0s2fpJO&dOz&?!xL??$YW~ zO+7(Q4QE5T{*KMOSY0w8W7A^hz<ovf?9Eewu){-zoXT&5v>SXWUbCI$*PW&xSL)rr zJAIe(R<QD!Ikq6}+U<<7NF5WQbCeaP-=?82oNq_Qvr_)#&_<KB**jlcQ#79S)+U~^ z^v<J_+m%{!by~_8T4Uet1$)hZJ(dB|7+ej80pJiW`>y6U0ftQ1<AdW`!3f&qW;+vz zy*{nE)&}2Jln$1xr+Ae}7wwwt9R?Xt2>el!t&H9b^M<pi86>k)mmUAOH=7hIgk{g1 zvr}*yv(!%;=kxwigXFQ5PW3k7vw9<~gc(`G;}6q8X43%pBd5)PW<1@LYibKQm(tFx zB{8lm<SR5YxdV>Y2|5L3?nM=5*7RNZ66a#{YYTeDyB?jrR0EX^_1Sb~|G;HJvgVaG z{?cYIOq+Z-8hg4OcNy-sOpbQ<V7;yt8#EuRr)caTc-pv}=M;{#YK<De0(M8Ca=U5z zkdVnmg+__cqP~Pg&FphiyYK6gdm*kdvqBrkdF0|CJlXy?rb+ka+A@`lDb-1(TSk4- zT>;44Kx}aSmymW)<fySOC4PFE{yjl!uq9ffE9USE^Xy#N&F|~awbRAx4Dx*H3F6HM zzjdAjdTl>egF%Cg^4>}~<F!hv{?-rq+R-R3jIBv3@vOxpA;-_bt5XypA3xSw01D&j z7HLF18=ZCbUiJvmphf6Y67>WZlbJTWB=`F3=VS@HTZ+pD@|m5II@>Rd_c+DC@6Va$ zqHEa%jtMqjk85*_-z_E|t(`NS-Ua7S)U=7z6l)c0H26v`cMrB3GlYo<hUDvWAiaUa zoJMHS4uqDo9-TNaURj3@sm7o3tw+@--8$7?-&H5}av-f+<ArAW14D44B2Yg`){*3K zHA=CrKhS$UHW5whdaK|a*gn0{5c+MYhpxDD%@LgV7<*fi;^1sgUAHNA&P76ZE%|=b z{J9BKFDDA9sVaK-@d<_U8{o3zrja|TJPdj*hH@=}@J#^Nyo%E>A45~=wjJXObhG-@ z!GtCHIag=<2GYVs*4qp}>{tK%LVKBi><g#k`S(vGwqB90jr7?cxcigBd&SoCA5q4U zZAAK*DuYHcwXu88bSxZ{e;9z9sAOHT+^(qcvJUAKx2pOKR&OH3@3;EsFJsW9Z&2J& zh`ft0YpsGLA~HV5CYb9Gm8smWm13mc$bsyi(1AMVx&4Y9DmUf4VW?P>qb8vTlKAhE zZGW*9deLOeM#UOTV}{&RU1jVu>rIhq?|!vrRS_TirXQwR9c53eKkc{L6y}(Xe66C` zZ^dveNWvA&IYtq}cHF-n@r1mV4KTG=722IiP5$h$_Gd8TBd7IUrqW%BoVRJst>g2% zhR)pyc{s4L(a?Sm?xP;4?iV@%A)M|Nt@lS_yOo9bQ=@iwf#jVHu{qqk|FN&wdQCju z3VQ_N7yR{7PNq1->0U=rYE;|<^ducF9@MoD*D?)<`Q6<yV~TUM#;R}rwCy|!y~+yO z9QB7)T%{{2iU1;8h+St;=d#cMY4wc{mRCsfWry{a56tyD#+X+K>Qlh=`@>-1jnC%f zFI=vA&81LKM6;sW7l<lntLUCSI3B;S+pH7vKv?AXEpaSjfs9j*W&@~CFR%9~#Pu(1 ze<5RjLFM;JP9<9(k!C>>K1C8)BCwGL!oTB~@WK#wyNUFsUlJQ5vhJ74F#Up<R2t?V zduXnEC5TjfXygZnf36Pk91^oV3F)4&+sXxz?#-h<J^U9pEXi)hrMvL17M-k!Qa1Sn zb%s$=92);T|1~?xQTfPxupp|gm=UK$@O8vk^zEqndd9!%u^;2^cUXLT*)KoWQPOHc zGhO0SQl3io4w8u$NOOVaunlESxLHvuF7#pnmSa&R#T+R#IS)IG=rf=-@y|uxK_Pn{ zBKK!GEeXGXEONL{Rz5faJ+3MrWFVhs+7HBu?(bm<=ti0TQiWh++=(vtimO&u>Y1F| z=y=s-`(Ra+T9#8OIhEzCUYYR%j`N{d=#aX`u{szGYz~<c?o6NKRc&XpGr3d)NK}E& z=|<NMx^Fmo<Erp-BE&4e%W}#h-8r3vX7=h*%2>RGSIprm{>0J}U@6%}qqOSWCs&s9 z{~o}pF8?{UZkbxChZ(y%(8!=M!wlsl!g&h~Sxu8yl70&6rsJQH4aSwRH;lgM)KPWf zDm$~mu$#QxcJ~mhBJUBv72|JBFft621(UO*K;DxqMY<oOi{kQ>bYc>sCARfL%%(-$ zMuYU36~G}bcRgZHxor#=R|FwHIbgeae?pLHYBg>tESOadFQ2)n`@+t@E^v7@=JO{a zeNGx%Ohr*fh3BM%uamHm14%mr$w)B6P^9XvyTew$b-X;#RA!e%&dS);%ZL+>y^AgI z*Nj|f)Mv>FA;yoEPp#>MIZGUlN}?C^!cUR4Uslx}TodII&F8AkR*1BgIimZ_I{VDP z8=zW<QTjc2>q?4yjQBF$6_#W}f}T0<aU7S_@|*~`1xko=qNsW?L&bao#_kf3zTf9H zpTat$91edmjvoTp%IC$>gtP<i)j)O`B5!$f;1&>G7fK-`V8tI~sasdl0-t-#=yoIK z)7EjW9!2N2(e#c9ej$3KyP+T$rc&h0Rk?i(?2<%!5N9j=RY?ls%v<un8kK*P*58BB zIM3)Ko>mG<A-!#Zw>}z+(GbV(n4QY}&YW$EuPFW9TPK&3ZtJL{pGdR|B>|-Okb57X z7X)La!#lK*)EYNc0!_W!?XSE~2g9IIOn6=^cIr{%CF%{NEaglR2J3WF?HRQF{i4@+ zJ-xxa%95ei1V^}1nfF114##mYmYD{lswS(f*>}XJ##pk3uw8EH**4Af3Uu5;*=-2a z=LtP(=M9rFGY+iTIV|&j8IN)NB0e4sXhZnUyRn2nvR>aw#pb;VMtOt~=t|>~-|=z| zRk_>JB-eQN-jAavt_9x_&Z6YHAU|Uur&u9+ycr-JX%@gH7kSPv!`jj8dO39pxE}3v z6=ck#hFpLQq7IR6go#EsKLpo4%hZ&&tjs4Qw}4|TtZL1f9<X&5ye_cMPh}hwbw<f4 zlD##4N7M(>-E!)MBc0NEE9?{#>&dG<3Sf-EaaS-7=!zqFd-FxB25DR5OJjYyXF9zg z6YkgG_sI>mnJ3d;U$Nc5USDar4H@DVK!@N}xhoxYK~>z*f5UBMiCe##(wa-0+#nsG zut{#(-<F0&|Lw9?S6huDW<b!;a<H^1JE6ML=WY8|3bIew2LI5}q!w_po?ae8AY5U$ zZ(A{XZZUM7Rk?0jR%1UE_903E-};#Cgj#yeJ5o;yGF_B`s!O_9=Va0d2nA=a{Mp4Q z%^caf74Q+L&j;v7wI6QyX>BrV<c|n5aq0}`%;b3)+gU%jz3hnR{G#8gxA5ts*rBux z)x_68ta#l6gEkJv1?WsnWi+0rkpy_0!JfUfnmZ^;ZxzC|ST??l3LuWeOgUT<yV?Xh zR&IQ&JHU@jGwrTYbg=NAB1*dz%T-?vm49ibUu<s&TzAn=bOn^-H{cZp2*PEIRA4-w z|4zQz_3*KNG0YIyReW?>!D;STzi+dya9m-k5-R8DFw@Yn8#voLkJ`Z96mH>0T(~I8 z39A%O=N;g<KwfT4&hhwRE--)7ki^=?-O{Exy%lrufFNj`Hv*VNE6t;F;1>wi_RP4+ z%)Kr1gJgK5pDsA54bC}P_=c~}Gq?@+Lur`@Y)UfiX?fz*%+k3>>knW(@~SOlvd8#} zPd$<{l#G-`Z|75Y$?84wt;^iZQ9KH+{1KW(c$8e1C7Shpk0UIMJ*9Y0+um<;JFDS; zms>b>stW3!EkCngC+9857Lja9$F;0rm+y${F_5{jNVOKc!kwzQng?Ca){b|rF|+t( zHM9=5Zg|DT|2IdyoOTLJE`Pe8`+2+2`}yQv?EzZ@gvns1<CZ&T_x&D1VI=WVP)N-f zHRo9W58bS&Rra)RdKqm(WEX3I^(dMy3+@}vJ=#-IcMjbc+qqKVoK+(KobRI362P(% zZ3@U<1@6$aBAI(jrcTnJAtP_nj!Q)MwdoADJ>V1|M|4*xPO^}$YENqI*1tGZr5DMz zm?dka0pxZ3bxvftQadDcR8A#!?a^tdSAV~Vk-?h(c$qTafVa6<vU`9v#KYiX!`HCj zguAI;y{uD4Yd=n}-rrI#Tk)q_tw0RUD2;RSjyThBXA<p}Ek&~Y#ff4qnAx|lX=6x` zVC2ao@m*&U(3$ka8s9S&R26!)Pmi0Y#%J*-QHi=i?IzV-E8PdXMzeROtfvKxp`Q}T z&=yRC{a0JbJLV+)i^=rr;qSH)L6hw~4TAc7VSA?Ost(c7KZ`IPZ1xYgIG&`Z*9&r8 z*-c8f)`dz{(ZW)EAXHYyb$>=8o3uZ!@cVyb@G}|sMAN$O*JEx({4*wC&$`M3E=NE= zTiVy5YX~Ao#p?ysQ&UH~%-Cx5Fx_lN_p6&CI%3X8^d{)9X%~g(mNgz`)ooF|*G;14 z6b8k<v&-cjW|!mSb?|ID@N7_53>TKs7}m@8{LtSoG)H<0-OZ^~lBiz>K09*!=w96d z3p%gDK>Yrtv~v&faDIXM<3|Dge`=wT{l8miD)ugp#{cG7xJ0wS_Wwi{|2vqL7G?;b zdR}kU+|UWfyaTnyPKh3aOo?{qghSfRAKWUcb<FU8*~#_r%VGM#C#PaU<0xYGy2p4G zjR0ud#@DF`Vy|xQcO5<p5huEaVH>Kp;M2L6=9JTP??`Z?v9e5}&RUZ2U?9p0tnOmF znE+dZOs{=^0K|D8xjlGSwK~K2Ba_IXqe+B;^o&UHlN9+I-$VQpZXt#KYtBEwtpE7$ z!u>C;LKnr3f5OdDGxiq3#cQgKj1Fz;LWb5nMapsv8axCYIUCV>1@TR4JqCx9ci^k# zYGCV#J-I?OjIN9IkIj!o$;TvsZXni`2o4Wk<YepDZIpMUKpfIKL&ztjlg0kc!1u9l zq!3XHO)DPLKcB+zyiCqZDHjl@r|gkTn#hY;J(Fdtc&7Ju=cYKaW|tVX5Uq=BoiwRo z&kE2_ZYHlg<a2V9TMAFj`IZr}&CZkF{kW@mQ0s!s2SGBl@tu{d806$7x@1k9J<t~Y z`>*36y#aHb{s;ItkpF)ZvVR<m>3=XG`@dWM{OctVfRpJzmG1scBGdG8PCO#;-PX-u zmu^EBp+P{l@aL4LX;G(lv~F8nBb9=1hzL5g#*<29lx{nv+yLLqig1I#z(}$~!@y9X zQ@Dks%~Y6S%-PDy^s_Nfb!u*yy0Vdc?!0+9l06mY7x1X*d2#FU@i}Qo)dyk5BWkTh z{(#-<C9vBJ?>PM30`}4h80kXXJlUW6Lge2a^u>a8__-}a%|w(iFmV5#hff$kAnK@S z9y_kn?KK%L%IN;&7J78s+UeULPKNl{zB}M{wD)pomD~B&jh~Y=pv1#})VqMlf6&i< z>9n7gm76@^q`=Q~a=@s%`zOe|FFcC>%xPB~%j|6Cg97i@*pdU3zGJ?E5f8~p>d`Hj z$5#Xz)lmp?33%4tv;}>_;y!4hc5_g3u$9;RoTjZTd$K;U;%{koLU|_CT6Og*v|0`d z(v05G6boIQrG+Lf+2&x*5qIUy1n5ws3z4zXO}x-%XLEK6=3<KY%Tk1)g*p@4da9fl zSIefeBH$8dh_W^wR?$HXKB5!|^}2(&*Zv8pat<QH7P)wWRAvR^4~BwI4!G8ank3Q) zx(djOe%UyTITM*s9U^(R=BrCeQBnp9wTS}y6d<@IO)*Lf8+tf4emJuqxngM&qX+TX zWfQ3Y(2>}b;$zt&D8m^jw+2+@G*C3Y4#QlS&$#QSYs&vUB61hAKEY)_*FQd}Q&^WK z@h4uoiVqXkn#W9rHZv1SD8BRxAezUJ08l`$zr>3hYr(gUI)ToS5dGrZM3Heo!yru% zC08seoqb^jL&Z#*tl)e?gpM?{Or4!+(RnaG_`Iy>UDB)hAZ4|~?>g9Y6++uK?jRK4 zT{$jPt3q^!d={LjO>H|)(=<6@VWq|nv~g|vQzKAT%-i&Ojtnv{dk~M`gNpztWGo8~ z5cA@b7x^U{j7`ax$=h_h49Jmt^G4Em9S;SwlyP>U*bkY(bf$y#xHdbjqjve;CR{oZ z>96A4maFbmltKqO&R$O|T3PZ}&KXJTS)C8(EO+S*%U#bWwiLDo=WnhjDpbl-S#oa4 z7}Gs`DfW=)T^#4Q`rids<9e-cG?9bg7ZIby5=O{p=O3Pn(PqR@?oT;<ZKhL@?`mhB zN{2LID5Zx*)Tf&P#jg8M>7NWyF!^rFp=$D{0#_Wef3BTS4+nD1N<8TiCwtstDB_?w zis<GCGVGu%w^P(KI#OpZx3@2RJNM75zEmjQkDLbIlV>Pc*13)yWD;f#;~=>LilMlO zuY_gpx1uKmT2bjBfXAimY(ab?b;V;bIgHwju^Bxy=(+LF3#H%a9B2#ho(Zj_=Y2Zv z8-Z@Wv&nxJYKXbyK1m*Ih}2n__zUISnpc1$Ezy~k>*i=@$c4BzQ|ro-=ax7u2R13! z81$PG+6=fNb%)@UbqnLy$g`n7tTN!(_@XYCE=ad;lzheqp_kGnA-XZ%TJyE1Gc|_o z1QP8_I=ZLk?Ax1zrkJ<vn;})Frc}%hO^<W(C%j-+V8M$b+4Y-(9)!569}mfdpN}}Y z?*w+Wrc0{HS%IMuG%UWI<tU{@=>N)XavdEc_0eZy+aB)|CUXi&W@O*x%q+pFP*2V= zQ$<W34yA{buA-}pJ{(4P6FcrybZfz+8q3JX#wGPke#3<SLlh9|f7|_VvDAC9i$!iv z9$P;S1lZfEtTHixv*G!1rem+tytkU=?5>V(=}reU2+Ts=(PLq<J2*Q)f_ke)o9cQv z6Vs2tPNVk8fccBr;~@6gkfs$PM=kingFCv=WMJ4zB=}pQ0mxOwce&|HSjy$5ziMIm zAv?G!-Aun~wSL1s8&eje)H+rUXf7s>fAU*lP&UCf=BX*^1WzDXH31I?GetG>5V4SG zo~#m=yr69l_;=bB&0SMwOrDX)kJeL7UDV`-U@b}|0X00$8>F5yT~v;blyRi3xRMbG zd+9|SksqGr=IMYySjYMhFS?ycl>(`|<IMf35sVP`NqNZ7352_0DgEhQI{_<JcjrIX z+Gi9MuhO-=zfM_zvl?dd40fcACeJocIIB5Tf)J9{%wQ+Jo7ESFoml~&1j2JL=yueu zPklbDrPt3F#2Szda`g4f8=cMJp|zTX9=2Mx9MoP(>mPe{hCXEiv$3RbGFOx@%~C=V znzb7e;@#_!6d-Tk5SpMkQI|tDdb)0ZHk9s@HmnFV;v@?LJ=|HTr+F^TqE6fqntT`- zd<h8L(Im)%9Jd#L7H)6U{UA`4rAo#alCaq`fR}a#aLw2WgSOO7Z$`2c_AB6<x%#3S zh=)MzgWH+lyoV^?ke2@@0~!-t(FEoxtu07&PSoYlS;jR0O=oC38qN>YbcfjBR`7l| z0S@rsndn;>AJy=>HMFyxI)BPT8Yhi>2~wSMCqO*^G`m6Fob;}RQn|BTSd($jb>Zwe zvpJ%aJ$hvw5anIrP)(j5JqSvP;({zT2mfGEH|%i+y$RWO@S*162~rz}=G>;8Dxk-w zS23Hq!^xX9%x+Msa=k39*%n6I3Lb04V=FywYehn6%}u`q8R{@N={;<i3-f48xR+Y8 zEdsd27;nnHN=vw>ofWH=RdXn&^abtKfoOXv`r@)FBPz?rDm%p<Ddm_b=a?umk~~rd zI)>R5QS121ghyb@U$~67CyW;*c$=bZ06ldOz$)^8vUAJ8sXAjMV<Ol0%|#}l-P+bZ z0Z4D$t%JfuwYs-+^tih?YXp=HP8s<Bm@a#2XmxE|JQGOhl?`05dJoL)#vgWFE63Ue zE5}B~D95f$m9Ac)c5FRnG<3Od>$oG^4(_{nWQXo*Xy3PUrnf$xc+YuV7qZqkB?hrW zdt$((&YyV(-~N)R>S|S&wCF$<soAoQL|&w1@w^IU)`D`A{oMj0I0hU1*#he^?H`jD zalppj&mwW}<eYQBJ_VN+Ah_Kr1;yKU{=~YlK_}-!g`-hoQN4nFQNxzAV>s|Zsk6A? z+{5PF*7Ey@{Q)3{$V`<G@b`gyo1*!}#5@G)R#5QpmG2YW@8}ch6aH`C%$?Au2>NcS z5$TEJr#AR4o>FM+plR01u5le=E;SbKP*6wYX7HH^p^d3TD&rv~5ghW~cyNgp#N$#8 z^%$?q2Z`z2;#%8fRod8(WI8TOi1da-hHQq5EM1pVK%ZI(;ihgCK%&8@Q*$zlvSH3@ zj~J`U`CWS72yz0}tcs=}r_GM#sSPBTWLk&n>51k+pH8%&^23d+^_V&pDr?^0gW1E- z<x5mQ-ytJ7ga~{1BTuP=ez_1#|C{Hgc*r}QbtBya@+jcX6TiXiMtqM_PR|K|dUPOe zy5f>`(X{-YiC%|&jw;*P2vP;trnotrRyuk8F{^1qrsacM(iGJN>@)G^uQ+V(Jn*js z&R1U62kobZQqIT*3%0l{mx?(eaN9*<87U2h{12fi86U7LgV=Q4Y+O^)Vyugdm>x%t zfcnrJ{X#b<4pBwQw;DUS^G}f}#g2|V%|!0cU2s~?tX_6pYtOqVc-jiKQrcs^;?5J^ zz;i+HU+=9|9*5qy=|T6VikT4RQ)L{z#jsPnH*oH@i~BT_R<#XT6H_*7gF-lQ55W)$ z0P(8Y15(F!C2kbV;4m1hW;iZahb~F<^dV<HJ?ba|Rdqh=0p6qTq)F9dear*1;_xmB z4!8wk&oYdAv~v*!DhZ@BXRb6xm6GZBo$qs`kz<a+eiNx$y4em6UtUCVM##YkY$5VH zJ+r?8^bR}BgDcoRFDq+tr_{L7-CjX*c}@xgfQw+;I84fuJv_iZp1(bA|E3A&$VT)! zFT?COu8>9^hdXYua0477AzO^s%$I{9)g-+o3I;X$f+9JvP<8TWTj@Am!-CxW0{lE? z2Aj^VTPDw`dLczRnSdsSI~h*Xq0>=SGo%^>3(vc(OH5&zGeelxp&6${Bo8*(u~9(U zNS0>k*<?t=;3xm|F?Lq8nfi92b`gv7D82coDrdlqwX?0;Im4Y)1DU`Ns`PA0iHlJS zA2_aQurx(IZzafwl?lb{63oI+9NkXAkE6M`zeh?=->IQD#JZ5~96chq;N+l7DBWeo zZfaOeic)N?<W%ltXy}6?u$^Jz0GLlB8nZBoNp$(BF;h))^*s5?K{E%Mb#b<K%~{vm zONqJhRo!5nA*+VmO}X5;k1>j<6&oRsl6-ohh3}SC9~q?fBe+4MjkvwrY^K}$@;)Y8 zk#8b#K&yQA_W#tClj~-xbb<fzLjmXiU&-wMsAGgp0Kc8>|IHd5($I0nHzoKxwN1H} zO)j4i1YD8VS)Vd%@mHp!)U=pSv7559&V*F?nRbad#+jMU%(oF4K)s6*;fMkuOotAu zTnsHQRoGY>T7L4{8;B%$n|Jb>cXFx}o67a{_pcf2nvHql>)`~~&XM2SSIrJr&*#gK z+YjB?+~D}Zz$U5Pd}aisiC1rI5O3jOEHdal+0Hjp!tVY7GJgK?0UAQWgS`rV@91!% zlRX&1oTNKdgl@uNNB*e```cT2O7D<RbFx>=oP#|Nec#MqJ!A*Y2;F$Y+L=cXg!+ej z@P%H|!xI4ANGLMyNDY%tTnYG{gFTLI9;$;6R$t-+7ntajGE1;wfPkO9wCt5k1sW>u zdu;j0Vs%0?lk=QJEO;^bG@C?>1-TRrOn&CQ=k_{DAJGMN67p#wo7vQbHjrJgG9B#v zx4&z~dvv8Xw(1mrP4?6ujtnN5uqV7@snl{Eh=vLJGj(6x3nPBLE-NLxys_ylUH}dy z$?e5kK+v&fXmnNHIho!^Xsnf1B%(FP0{djt&)?&+r+-+0XQ5J!yxS^QuYSDTrKZs+ z^+NWi9luPPU~(Sajo^--!V@R}TcovN^%iB6O3i8zA~AH@km6GFo!KWak)u@*-dpBT zv1o6VP!NYkAzfRj9qV~9WcUL62cw>8bSE-sVEgWgSS?r+(S$*=CJ1Jd55ZYMwbcYd zs<_P<vL55pFiVThtU5q6bDdPh!ed7t&WYn<%i={uq(qI8roa&4dvDKWOe-eS!ng)= z6!RJNW?)9kTiPE<e8J52F?x(fFo`){LtL#Y&B+V0LsON}WH}fvjj6L@UfQH$@&>7; z6wUH-`kVFoSDW2KaF&&AW88xP^?n98Xxc>4HTh-tNJPzb7;9fbo<sbcMbzR^vJBIK zhe-`9HAjb(f~7!GiuF{A>0o*gtGY`Uf7rbM)A*>2CjZ8zxD1GS<|9jU`8m@F4;Bw9 zd-4(tc3CIv3p0!t9E$1~=qhs^As%5Y0(N$Q)rfmnr<{pQOCw4&UtMf0sjDDQTkQ~^ z=F-M$^Epfxvd(Lq5^KYH4*w3x6h`VGrbON@q>ajH`F8owA&-cI`F6sGE)u{Js9MFY z`ln*wNSyjD<vT`aa3L&XUY;RpC<gvXad<%hh(4lW#LM<^mn96{$*0q7$|a`-jKD!i znRu0wS}blm<`J{ll2H=gPj=2)zm@On(^g)fc#~Gjsf9k98XKQyePFzS3A75lnM5Bk zSSJzE=xclc%XYe9z{ed9gh!{m#I*1jcBstST%%buF3%nu%oUI5j*a+;^MSkSLiGHo zg(?B3jCzs}aURX=oiPOFw$g9-RCMP(UQemXE}ZA`Atg_)(bmdcy~mlH<dgV-+*)fp zLw6zZcF!!@0D6FyX@;z3&(B5O?n4op6D7NsFQOfkz<o8B!EX60^Jtwm8iA7RJQs)W z_LOC)EIuafr)sR0STez(AetISx}MVGr^R|q%&_oo4|xn7x?C%}4x5)w&f`Gqa1XcM zc8?il)&Or2AC?-OK&yN)h5H3rx>*IJUGh?zK1qA0ae2>ns8+IBH;5~hz`Q%r#`bt> z^7oJfmAHL>xZ5saI-=$WLLYzm!SvoxOW<nK-~-CL%&9~y*%7a#3^k*Czu$H;GHQpO z=_X0)2c`GoUU#ai=%a0xuwf}%ybYWj$tr;jTu#j&N4WDjx}d9C9DD%(hJR*ofJDJM zO(|ZuE7hmba;Tn(gg}+6F;ak-2i-I8x!Y{&*+6zGN=69%o^CLRSJ1S2=J*nh1nkGD zZh`OW&FDD^f*i#N-xwN4a?Yv-rIahgm}$U#Or8+xChof#Zw)bZcC4F10Vmq8doKQP zDgN}dp#F;XE0Dj>hO)I3x1h@-d^!P%r8kH}8zRo?3k)NPw)f<?gorZce;<S$5ogpR zpnk_S;*;8hTDsuvy@RV8L*xApsy}fp=m^a6q)PV-g71_y6p|`!HpXEM;ub4meO{0Q z(ys-9k#mfu=}oX6Ui<Xl!wV{~5uKe;;CzhA<IPI9x1fTC+ry1q^M!?oF0a24W}w{w zaG)qiKpQ4Q+cqn)R3%}iu(g>PYsGC9G`uP*y3}@$@Clp+J_VJWP>Z!hL)4t1P!BJs zAEe{KXNZLpC15VMdMy{Jz7{O*Nt`ezEDzw%&1$_%%RFEiQmIWLx>=#@g@cAAM@eGm zFVS&tv5)o+G{dQC34bZW2#Pc30w=v=`oB9fmoDZM@@omwUFD@!ENoQf(TO=Jq~5%O z0uHIpx(=H+g2`^2+3p$-M)f(F<Z~_+xXtu(k<A1macO)o@h&lNR#R#b<fw`)8{gw@ z<qvS*C)XNbn%KLg+Gp}$m;f01lqEd@-1-!QH7LtYsy;QT5QQsEd04sVnBZlXH>8cO z%-627z_5%nGKXnPA&QrX@pX>|Ih#QYJd%-1^b?d37E}Sx5P~|0xxb|+L()b%ymeN% zbUwSmxq<qa)s(_q;_X1C(8wefHW7o(W4EWOpDA+5gY;Cm2pSJ|DA3E5JQ+l&B%tdj zmd8=r98h_DvzTdtv$WWZC_xk8dwT2(ABGHF@YutgI%#l)TfuYJy}N4y*d*B2;;9V} z!b7ECQYCsRbNB}0>l!Ldcm0N`OBl4Lxhl=y1#)f;6&-6!TlDPjVeJZew`en2*Zj#P z=An8{E}>s)$%q{rmQlv&GCIrpR4V;!ntY3mcCd4@81>ssvPl)DcQ#qKP6emTohZ$+ zrE)z6OaZ?Gs_TkLKc@<yZF^)sQ(Wl=t52ZGbQxfqQ1_wKXid~@#GEZKt@97VjyjLv z?U9WV``@2@RRuwPWz+9E>H{o(4{^2b<Kf@&PlRDI&26;eej{ic{QXL}BdST!j@Bqy zCc=c-gwa@rka6Z@B=Cd7tH~1-473gf)}DcK-YcB2bAFU^8gI&5mxl39&o$eJa%T$L zSWKbsFPuIeG`}JffL{Yw7BhIbU0*)Y)FyJvwmyU5zvwvk?N57m&YEALmS%*`C|@<w zQzt(DN`r98U_F%FS|+qYT>K_#8z72%?Frd-`}Fzo+4x>L`_}gNU-CSC&cV#&Fh71Y zV*ID<OXNRfUoK{5rjGyHGv(jA^Z)Z9?flQx`Tv!Z7604aVqwemtbSe@1VS~Upix}& z=WXOXHeDJe1{w+Z>!C8xRGQD)tOfjwr~7puj1oD3^8GrNb$iYB6_#m`-K*opc$(*B zdripC?-P_cP#JX#n+>qn?dcUa$nCf_T9`K(<Vb{@cG;g4&bSH*M3}@*Gc{xszz7km zy?QrZfOlO=MA$$PR#~rS0Bsq%`srxbW3zIhdtb%jsNTuYEu&P@^iwjj`gb7efX#J; z`NIXgXS#QY>Jo-`@z(mG<J6jsGP%l=m4ee&eDyt_u-=%-Y4{IXkW__TX~+sv@YEyV z!AI78aRm$xACja1&PGg6{|hK2L#p4ePEzN0$G7vChKp5sN%qT@OukOc(sOMc8OBm# z5|4?EqdgX@Y2Byw`r%Z)VxL#Xdm0D}l4yN6oG9&6;qhKFIHxqO+tq$F{-#^_83y{i zQD$e_UA@KidHrZVc->#jQH%H_oy2%!qp(JI4K8O*^}bR-YD}Dnzifmdk3%@K&Haje zzcZgLw+@pnu=n%z`)hIv)btFZTTi@$IQKhp3wai<mT<E~zS_o%FXmb`G+xdURQ;~y zl1y3)gj-MxA5pXnTSKsY3>uM%v(@QHf0Y<OuFz~qZj-8&W~c)8kt=@(X$tcNJ!gxs zJSK7sJd!3*1O9BI(<dK5hMeZwLD;$EjjNV91_py!Jl2Apj)bv!`{(-wSNrgR$Oi>8 zP5(g5`LR8mjkrr?LGsoKN{`7odQK#@dFyez9mD4xB?kWyZ+@8@hd`|GjIl;B-xY<@ zIZRGV^7d0~mL%3Vqn@U~d~_a}49AIFRGQtdz?v+PKj7^{gv@@L-N?1ps1<MBYcV5& zReOxvPUP>u#&E5AQS<*a0(kmwuuuQP*Z*&#hz5+i>Wa(vj0L8pyA-j15dY|()xoHs zPJi28ZsI^3vY<fCC{!$@c`(Q#92Q(a*a9%z5|=A7lieXA+BgcUUJ(k7U6Zm;)@F1c zn~!pOe{gEO(K3@=KGV)}^Y7-%u_b#{t;$*E$F<K(j?;I;rqlGt`b{oB!mgtw!k#Pu zS|M~Uro`EuH;RK>uWyZwm%m~l)y17L=wtx;Ac}E1<$&(sR?S-;%YbPF?)_7OM}P5z z=jb89u7@9SXONDUujZz^xIx3^*>>wS261QU=*8JxKJ@0|HqgPHz^|gxw-jAy-c4xv z=$G@eO7<6hP!C+8v_IG03GZhY;$P%`rhbb)A=)jW;M*C1ZpgyXYq6kT@j%b%t@YNo zM)nsF^lykC(}*H=&yZixZ7#{D2DWU{anIA65P*L8#`(GD=(S7GuZn7CmzWp}g}^%^ z^1PGLwEZ!Zg19d(NJN=10an=5oYR=<eP4?&aTLe~N|z(EmfpNQ*!xF-IBc`l=%^my z>Y`<kZ~x+8V!efar`GW(!bOMoK#vX_6)VbKwgj?1T-DXMz-^YX@WB(@<?X<BVtu2< zx!Pd4c|GpbRde@7dM5`}wdF?cQo8Y(Qh7sX#cs>e%^VBPJMb%jm9I-4S*q9zeGvR) z(~xs*V?76dR^?lcHyZ=I;Y`mpLK4_i!nUCkUcj}Gfg@*{=;M0fx#jdoCQdz<c*;dP zP3w?SBGn5>cZvW{gi;yX3Urk;`sL_FnkiSpi_bnkM8pzeS$LTtW|k_S<9{t?&%|Y( zw7Zpxe`*(9Qa{0(J}AhF$S4g=SSwDNb<PJlwk>kBO(HL~`USj<>Fcg?HS;mDuBn2Q zRhb?Zqb#$2DHiG=lOC%wwrukLy}`+6{8H*#9$=2rV+U7l>q+-a9ql~#H<7b?5N!#5 zOsod1mhFu(0LEVSxt$3cLf(^pwu@|SA}zu0`}Cn+wLX<?IJRkPx?JK;HMYwQ-icL& zLRwE{xCjkRK%kIdyoxfAGH&Yn;)FFx=F)+4d{n<}_#`=M;rYp=D{^kk*fuadDtp}Z z`eGx4vQ=8%IFA0rXU~B{!Q7L1!Isb3d^`TMA=2`!(!`3-k}lbXJP*f`|HX{OfJaem zQFGiNnB6K|25YbWGdNvESv8!__z**R+DG;-U!>$x3f_j=XAc{)(@|yAD+=rz$Y_dk zZbpf#iub;r%Hv!7^5xT65CVghAGKvo1?f({n%dJQP30MY^Wmx>&1|?qe*1!icuB11 zr~RNLAxaWg2laSH#9XJH^H^_YyKPA+dDK9|pqyOy;f1#4nmNoYD#lzRmNa}&T%%Dd zln)T+oUBc+1nfh49sT6oGI%vI;<UwY%Tc-%Ljc$lnBZnR3iI<|Mcoc}h<OC81Km4K zULoLrs0ma&Q_lb&$XAkPOM*Cy)6{L7TBuYY|5OaR^DU{gKAT^4t<44Z7b5btn3*ak z8WuUHWY#zb09gWR8ManZ6)=Jdf(b^?XKM!R;B@9}^Pw*2HzRcDHz6G>aPAtV&$JUB zU%lu%!EVS;@s{n*p`}+79E`M9gLJUt@$8ywwaiWFma7|Qi#H+T8cjM?LyE=|V3aM# z#5MtYzec6YizSfa?h3gr_Iz3w`bX|y;D~0|d<g`DkU~uof_r+Q7(P*&HCeUBh-M#} zMSK-WY{9bGujI=Uf(JaGNfKljEbb`$6j{<a+9UH=il+O`Z?z;;&sL4kv+Tyu%U1SK z;Y1gONm<oW5lGq=6D(N;$l2&ElhWl}?azNc<73I}Unwf>c{eh$vYM9_t?_1xj<7#$ z>848ypGQ+_D;}5Og#O-4C><1;w~>yV#A^H$<^%w!yCDMBu*O1yi=ypwIMNB)J-Dr{ zQ=$#rg=N(9emdrfR+x_|kCE%}w9gqe)*JG2j2~t+Kjr}o??2Z~UQw62k}g9c)d`Qy z82EtTQ0?hOWxE*0>ai@IxQT3NUti6~cgMg;ykcq$i3}MNLHibd1794-VjC`XEj`^J z<4NaJY1*)iX&*4H%oG|~BrCH0S@MM{u0-MsjJFKb8p|nPy(eIVcXrFbFsT5e5s_1P zls_ZT)UqOKiox)fr78B2gP!?KoAaJ^>!zD+4^ZBh)k0oAnq=1mdo@>+)U?5PdZ9}? zx%)DY>+9xf$bWw4T6xf!Xuu#?dEzPB=SlXNvBC3VZN@dj_%g<8nA6g3ZDxK-bP=l6 zP?<(W7wNHnoj8^;qm@(#CLP1qrtQxv12!!AOPDh^h{+YzG!_rK<I!o{W*Y?VMuN$_ zX&UfIVk#CRnL#{Qd+DZC4W#};uLv8?pnA*->Pg%3Qj8JexCHV+3AkcNK(VlyUb02G zbwuS78w=%L%_TyMO@tsvy@w!2a3baN<Kh+cszBS@afdsI))v(Le0l|_rm(E2iyQZy z!(1B~u^(4dyJB&WtrmzurHBa4sS*duY=+}5_tU(xtzUk%;`_xE)5ldfr1lZI)Vi;3 z2wYw<x@MbNe6Z%2)VVadXU@TvMoIk2;}4ZCm$m?xEUp{dYMhg_+>XW3N)g=~N3FVI zY%#cVj+?P#tq4Ofu18vt?@FEg)w^H694ddUkc}kUX3XIou?&02Tx^r?SKqV8j63N+ z_6=A}1t<|~&rC^wd^sLQ=enN+@(Y1Fkobe-_Hu6q(t4w&?&?nt`&je|>-J#+SP)63 zAps00c(=@8PbiQ_D23z7{m~CxQfLshe@JRWDV0@Ry?~d)SCr+$4x1Cnv74zzxz^)u zEQAC{NWUd%uoMI1ZjePuLS@IRGt0-3$Ve~wNO^O4qsj!G8wUx+4bSJk1k0b>Z%RuP z$ZQcl5k^KV&Wyu$9VYu625%wCo#8b|PdvO4MId!?x>zz(jk50^K#|@-KkNLjS0pBa zJ)%mMN(kyHQMrR83T(Ll;Bt5gO03}b=~h>~W~tX^$7**oo_Ox#E&<mZtQ`(>j?ZZd zyfQ{}`ik9SG<!ro4TfCYK_(nx(oc#5bXN8N*SofhlLy9~-78%#HZXdR*}4@mF2NG& z_$bCp#^U}Tuv6|iX5LN228$jA=TT$q2A413_|7V`<su;QUMO+K@qy5iWNY}00>I4p zjZc9bdm?tqvN;609<3k?L?+f-0aDNCFyB8g?gUG(BuZb<2(L6Xk2Ba4LQFr~$3@#C zR<?!Tef7Pe&P=bD5G1~M<nZFr*zNt4eyasC67{$)GB#bE^9;;Q8D8_8DiB~qV3ZzV z_%mk=hUUF0QGm!LDT3_c5dJed_<O6&5X@wO8Kj-8)j#ZeWf?AC^!6)s_nE&~e6ZQT zhw#f`xq}1{KOLz_y6e(ffkm&e%nv++vRkciR#x`(<s{0I9r84_qO%R6vx}k_pQ)31 zSfFLpkf<~;hsLiJ%0Fo%{N>2v&WwLJzy_R_sKF5T6^j2fO96L8LbG9sgSIwciE9I& zXNN?-f>ymX@KUot2vlNhUCL~`-Qg_9SF;XD#vU)mNtu+aYQ*fVd@v+5MEI@Q(&nIF zJRBq8t`fqs5Nc#wL*1)=1gN@49rTfdM;vInZmJ*(P9CTvnLO@TlZ>2YBww!xf7X^u z5Qnh15NLey8uReaKk68Xywx-K^NZg*;8)u#;q5I3FNbR7@qL1Vz~LCvZ!1Kni0t+R zg)Rs9l4F1T`z+5U>rz--2D4N{H#CHX_8*GDP^ZF3v%FY}Pt?|uGT`D+ZB@nTJJVT> z)jv#{pz1T!9e)x&zuLPE7*oE@2uvs(p=YeRPvfy-DEj5&7l<$aM%`n89y3#&;F~4B z5i8u(CUyo={UaVpX2dJ>irFboj*)eYUL_^6Oe0dARSF5CusXzSQW}~CFIjyD**r?H zGS`RB@=$nQ;2VJPi@KGf34~kWwU-5Ro-E?Z6bBDVNN=<nKW!b}IK*o;{kK$!MN>`S zT9-X_V|N!ASMatjgxcaRXc}$ItOa^Xizf70w<LjX=*-!dEMM?~7pzx>0jek*b!?aQ zO=Vf@iZjji9DfR))wd@So&`M}djKBEqQ@S!khyH~Nz*ay4C)AYjV{1}QWk`?+>cm~ zrt_jR_;gx{3nv_~i~Hv}0zhLPS(KVV{6KQ15p462Ng00ix(V)}Qyo4gdK2nBi1t3C z_I{uoJyE~h8}spmWbM!EVFcYBa-yeqF-n=1UzNq4Z-Ne075n7Pqq*ihOPZcp*}%fV z3OlA9HIeX`FxLwRD_x#7p(m2YQ#{+PvZ;cfk%ckcm8D4V#`)(?Pm~K2LOaSLxn89+ zRAn<D=T1yUjzrb*fvx)2BihwmqhR_Iz6dH`S3uL6gZC}FiS47d%E+#J-h+C^Ear8E zewo5T$aQ1~YyuziRz#)yy@OWZ`#L@*i@L~^`2&KI{>3VrruPpeLf&AC#lP+6#XP!1 zUbvA??mCDQ<*82TqB@9N_`+!;r&SnJA*CS|$De%|({^m;>w#G;%}X`;$)C9MG?{03 zKANX)CsBWPNfO^5<JNeL&SN^Hy${0d)$&H-*f~qD4otZz2~5Qit*C!Tzdb?|3I{t3 zSy%tUf{-Av^c@VUf!vpWG^-VK$85MiU#MG&6+1)IygHpx@qf?b&CY^rBk(wAjr6q9 zpEACiXX*{m^gw?&tqaAbLoyEF@3-~>PaQ3BDDy^aIHF!ZVsRcnnWGq~Rf#cf$?Da| z>Ca9W*kX<PIFiOsX4;p2L(NGp`K^#MG;wd5m3ne(>_OO*#P%AUHDurRo$aj$dLJN{ zWG_|KNgeH|a6B$sFVjuKH9<E|b7C6lE!#ZaLP4<;5As&+t*f6Hc<+N&v7vc(edsnR zok)Luyz-2OTQNUclLz20dyz#vDNJc#;tmgKKs%l|G5zLydFI!5-p>+v`Jzk!lUvqk z)Ai;yy?hYgv?;H+m95Br+4%dfxtnQTr(GuEj~^z)|IN9ZsJ*SNy`8wDqrKxlOW%Ks zh^X(V;Hja1+d;1(r--P4qtxbOK>H)>%wa;WisVNll%){CT3saA42aZc+HpeQ|BdHA zTMX@fRWz63J&juEe%%fH8^ZQQhCj0=PnrNR3}}7Xbn0=McAFM>vHO1gNZt9N+vod3 zRMR4uD3X8Eu8;WoHg0zhjqqAVN=DO498Q^kGx4@8XhwT3<inR<Rx`d9x7UOIwQl&~ z1jKn4E@k;^b@xpc#^CMF<%fWK??tGuHyZIuM3B7DJj3YE<lE8MN+KOpc9;#&sSJH; zEzmFNfyrU?t?_i0h9Vtp{b&kj>orz23L*K{g5tEG3x~ccY`$^@Z2LJ@SWtqLGIUrg zGXPT+CjHbbL_eeY%Ti<f5(ngB{NW(hiWCpsZFXinLAlJi80BB{f#ji4TnaXO6IK7` zB49<Cvabq<M$#0%Wq>qU)!{O_%7Kg8SyOXkfme>0dh`_D8^1WS{D54%!T7^I&KeAK za%@T3yd$XmUOWN_O@%hy2gH&-Rk^iGY)mm5f5N7E4s~5tfw}Ra$U?)VNTDAnEU%@d z${6=<9^RroP7FP=CZ~*<w%#Il!?f|@$eQ{vx2wq^Glg+NC?Lo*ikQ?mDU?MFqWzat zT*lSnqUqt<5kB;qmxzFd1u{0jX=>Z@=TslEMR@8X!Pe?hSxX2WLTaN?e0_@t{@LdB zL2(A1Wm}Y$viaacjPz&$Svu?(^==(}VjI@aDPl7o$E@}Omi6*(Sy&DyeqEg`g;7=K zC2EYd;$T!SFOkO)5uo<w$^siJaLsy<Bec_~xCQr1->`nED{d%Lg#@O9^%)rj+sZka zb@}qUJH6psw5F)S3xY#_u|#B%-68oSKpcz6E}Mz@H|;Esrj>nrfbHh?BuBpaqJXbK zqrGJVU6xd<>&MeA%2n5tZ2`|#sRPH;U1YI2c){NAl|-Z!THGGbzNR(7huL$m-so2( z5~^>L{=m7<Y4L{FeFLtG^hF~wBh}vX_}qaJ7bxT@9*fux4HNi|aRRu3sTX0@v~#|t z9i=5c3+_(I5}Ugen4E;Zh?t+G!6PzZ!1{qo<3hc3?}I?bh;sZKm^+y<ltqjf(r)CV zI}-7i+%VxgKWOS{1vKn=@gK0)AE|dFC~si_`U7gZB|Xv^{xDR;B$PjNa4CywDS(%C z6qH*gvX}k~?Gl9e^TzCK+Y65>0_`))gICb?4LZ@puP%HG_aPM&dh_K+27|-0PD<ot zOtYW3->k=4^>iGf2{S2X1mTg-V7&jR?t)W9!LtbTAD@T{nqbDvq4{zSSv|A6IMulk zr`MnjY6W=SI~AU2QNZoyto)0_o%c9JT16pb6eHX$<>q%#m*WCrO!<e)v(<x2-ISEs z(kM2Nli!RJT04iV$_e|od*wU$otlb<z|Y!<?ZXluaS2S}zat(lm{8#LOY;(&YG#%C zbTFJDI;2(lHf9KHe&J|Xt-77B=D>Q=ox(jg00Z1CdClDFqV6*EO08Z%!AkJ-c#WLj zYzlE71yZ{_t3pqq@M~j!aF*H<D&h$i5gAyPTSJ=i_s5Rz|FR*n%;b7%PH*YjeE(Pb zFMtzPw+#Hp5B~q?!SjDNLisPh!2hyDt!Ar&VT#@T-08S`i%3f-uB58Fn3$0v0#w9} zkP0Y0l!ej+9Mwj8VGaR-NN-d1b!YOnjd!BcNh+(*h#U)#H0JLZUkT^!Zm9wncf>wz zFTOcjC+*cIz8gK?Z%=MNHdyo`mbi0%;&&Nsqd18?zYku-9+=SNf|+s$FBnaS;Usmr z4P`M5@W796d)!S&x(O?EYlOgu48l*ikr}bGU>#kRx*Jo>9(lBbr|x5GAU91pOexOJ z+G-b`MFGsK8aYf?--A-FQ#EX1Wt?1x>pP-QY_<L8i;3eKrljo&GAA`N0CbuL;C;>P z3|p28a%mDmdVRQr3k_s&<{K`eEiZJ?EjEOT$Y<=5>=4OY?fFk~^6-}GerD7Y*%@|D z+=&FEn(dWcQ(*$Y6LcG!H=<6&_Px9s+UG7Wl{c9^c^L_gjvWNqa?=M{P&A_Sj7tZ_ z74)y^_&q)T@)OU;N~a~^9P|k5#EgdP`{i}^v5PQg8YhaxX|t#~=Um&fVT;TU|3PtK zfv)Mgs3q%TXC1C+#(}LGEyXRYQFZz1QM00A*=pRSEmN28yxgVp%}6hVO+L#gykoTi zk0pQt4%uY*Fg-P|ikDK0W76<vy;wcY4wD=D$wJO<`$|QI7~@Ti9(%Gcss<Cv(f#Iw zDn;{INZkGVB#pHuUy<yc>T#rTrWjv%^lH+eHakU~!XzXM-dwU6*)p|-cKz_-1%rc0 z;%c;jbZ1D{{~+xh!+TqwY|&)JwzXp0&Wdew#kOtRwrxAV*tTtJg?I0N_jyit-+OlV zdG6QwZN8&wRK2rmjv;Z0Vk;O0%p5aDvTkIr5f!YB>w>J*&=ycB;S?6&qJfXth(9IK z6`@0eBm`YrrPD~WkU(WJQl%j*FGf}xjte${QNAI-$Cdu8cDq}-+Sr^1X@5~lw{sPK zO7KUPPis)ic=ZLP)=Wv~Q<h9s#EGkV2Ir@@IdnnYyohuUMht?^e8?3Wi@i_v@y}?% z_`}&q@%^k5u9I@{+pH6CQysC`KgHI2=a7PrZIyh%1tBI#$SCM2?vtO0YzxbXaH}Gn zXlSe9nr~FD3D+7;9<Y-gp`Ov?LS8m1TDe4;KvgY#zpT(1-MMUEVIPch>f%>^T#!i) zNFp!m)2r48WoWQysbdKCOp@M?4sA%v*&A6s7-c;ev7ol+tV=?<j~kPKJVRW+f~(fO z-7CZKsesH!HOqGo=%q;|yDU!zjZaLy)-jqkG9%WM5!B!n*(2Ntueztc!rd`1YAQn7 zaR9~L0<R+B_u<EOYp>=K;=6~5zbXKa&H;(HBQ$Jq()_e_|Jh6@&hjCi<xYZnm`_E4 z#zDt#Ma7BaSM@}=b{i=`#Y|^Z9+3WH6j(5a=rFw??%gZ-KzGarqljPO>_-Y^Tj0?- zZo-Rve#nVDUo7;wZkv$CExb+54AK{m>i!RIVn7TgJfiJO_=eYhl~@;mw8p`o8ZD@Y z+NcJaL9J($XFLF32%1aEIcpUK_!y7Rv2$kgf{`7WQMiRm?N_^$yvz@Gg|xy6E4;{N z3y4`9@5dF53%WO-S_uP-2)KlsFhx_>jEGvWj-SV_zoPKw4-a1i6pHtTl0smTeFTaL z6wky&lJRM3ShUL?4XL_&g63m_$4ZM<&j!4611xg#HHh3WiivKt7Aq@i-Rx9Dluqs2 zcu8}o3sw6;WKrMB-4}yzA@&{1dTS^UzCSlaC{dC+v+}<DJy)rH-1Y=ot3F!e<AXm9 zEiQ0V#<JF#LXT#290&rzHh-sj1$cOkM|urMZW^5OpSZOJ8@~Q9y(5LWp#Bo-9hUJD zx?wB7;rgZEuAj^wC`*p2=JqUOs=F<Ww$Zc(wdT!#8v2n04xv?KSF}mZwF>_pNbBY% zvM28;|9HD`dJj+VIG-)Ag_WUEMKSsMLeUQp7)J3KMls^sw<Dm{<&77tBB0nCA+0Fg z$hGWnt(Cca57`J?s>;ew?GUnEnw&7nem8v&e>O$t7iIO?V{jYLXP6-PvmhYM_6Ldc zIP3Zk!r$dVk4r*o91IAE1@8ae7w5l}hyS#j7Ok@5i1K%j+#r!bK*}<&YDEo(HlK@B zCISs+Zed=8T34*;+s~#UDVY(SNt+^uNAL(t@c0YQdlm~%&y9j_RM`aAyC3VDV#M)! z+a~pzj1j?fru!x9#^;6mWc%ac=EfI@BW4N|eqR&TmJDe?5H=FZtPLNa_(P#<=-30< z)-XMFNB@B?^JTSb<`{&Ho#TwmlPeRAO@xh<4LnoJO4YCpPe|jZM~gP?#tG=anm;Kp zt!)ad|D$%h#iVUjE#`7Tk79oMWR}JvwN!`7aec<(<;GD*-)@$9_3>kcPQAmj=n`Em z4(A3_l=il^9(!fvp)SQ4>qgTw<e(%@vwQp4+~sD5kJ^mN<GIE4_;`jw(+uouDQM8t zI|PkzWJ>-9C~E>-UY*%CV?}>heTGl1!8xgaARG!<0(=)Pbd(7Uei_&Xm6{q<x4p-v ziRqngG-Sk&N@J^Q&Tv5_OiLF(GOf*qN#`MYC3dSb*>s#GWVG?Td2QI)HbPxP=tZpX zj%uxzb!y$#sf>GK2mhE6M`1&iIrZH$!Db^XXeaRG43e`|I5tZvwqZxba#gtf3UZ~Q zX=`r32J#;bIF@7Oe>RSwS%>QV76t7r=g};7BqkGYg}G%9Dm#qDdwVV*^1<avstZ|@ z_XVk~*DvH^JAZ^D3l?317SR@}&P9euH>juh=Oqa;#5U1Xy8^tmjc$Yu`Zwz$hNaVY z0_k>w35+*UbA)0A<O0<K07@KDto{I60_5Qi;@J}fWkzio_=>^096>Y_XjZSZfT3el z1i8j^0p8%oOPK-LJsvj2w0(ViOG@bj8)yu7jtTSB+jxQJZ$5{`HaNl3$BsMY-Fz!~ zv5pG)z$Z3$%#=3Z0DMx-Q=7P>$0R2eu(LgSH(i9A=B0*)bguI+Esvi#ZYZ8V5Sko^ z-k@rS+}{JIJ8^!-rodgRS>&6Z(I@$0L0)q<bhC`lsm-!8y+ZC2auPnqM~{yY^2o6r zf$k!{ok>N95mULR^bo#X6TIOd)w4d53vNKdShaINwfiL84wI;+qSV%{dIHl+LeuY+ z31$nciw+S8Y2kYWjV|MB)_Uaa(<$SQ#3jpvU^+orfQqu<6L)Mfe?ZoEt1lo|?u0wk zBRf6nx99Xhic$tDIQj%Akgc|0IF$qUr=s;AaOCIt6sJ*mlZ*el(s$E_i4_aU{mI!C z-PYH}CioS0Af~=8YmF0*ScJ1C$`rJff%gk%4M({=^YBdE0BnmQVStn?;Fs%r%Axc0 z+T0OqzD3`*gaKy4Hm1A&0H?p2ICS)^1134WV0>vAC@>zP$F7rr<ZgcsJjFteB`w#k zljEWbzeTeA6nYs7$3m6X%b(6>*)kWH#m0VZK!oM`jB}#=O|w9D(K<(2Dw@T}tln&o zNW$;tojPBs%Y-d*&u7EITd4WhMUbsMLD#m~le>%n-MqBAAQ$7)Em5)2Qh@2;tK-bm zEug{G-y@)QMA=b<$w%ZG<qLxrb&TEDGUrb1MoRFr0_>bcSFJ2kGHP-bMUZS#Kisp= zvle%=_N;2hZE>`%4NEN=)@0O>m5xoVaG`eCb@2Tiy~|WVzH9~chULyijr8(9@yoyC zPz>R$2`0luqVz6=YL9f1@)cU=HB2pKyC?AR-pMitFYD_)oXD5V+$X*>ic<sM+(g@) zZbD}@lbrq%x^(UhE!^XY|8I`92~ypH{EK66|B++=zwM#^3&;M~`Fpb3yB6vSmXE2c zeyVX0q(Y&1;crxzXdJDDL2;RQfllLKRm4E+2mn*x>Gh<E%d%OOjBWUH0!ueZ^|1k6 z^jY`11EoanR~nz(ci;!J_0G*?Th&Ba(#hT=r(@4U_l+xW<M-E$*f(e$0m0Cn7cw>- z$sI#aa^H}N7Y;p1J;ILpe&)^iEiYCNJpf_fjWOKB_l6XUj@8~>;*fq~*x3CAK*DuL ztnsDp;!6aWD0o2w{$tLpJ2WGFebVp|Z1uquvvN2K=Kk3+=|k$-o3e(6)RxhQbARlB zYfDy-gMsWOm18?$C*!gmzt(Brg)#DO{~;<gq7*3fIpTPrv=)Eq*22&3eE2#$yIWsg ze>wIGPE!>S0z5+J8FD3q861IC%x}VC)lSMcn>!&B9sPm;TS?rIy@=?DH?lCB!fl<! z$^-_;nTV3jWqa5rgp1B`9B!Jx#-HT8)((k)u^Fyj%~4@tK4@S+ZZA<NGTTgJl*~D> zSVbd}qQu{wy^*>T7$iCua!s7_D6xDUfO9XD{~4Q2crQ|!HDhF5yW<@FkR&sWbA(iB zC!JoLeYh9kzDzTl!8g&;1;A!|s$y+%4XDAiGm(a?=A2*?qZ%?_z+*3gDd89)^oIg8 z8{u_Dxj&#&@_Lb@fM*%Z)eprXRaA3Pk!51TKUa;&?D61eH(JfNnZ;IRSU+U3t20EF zOu4?iJcfuU9xQ|KIBmA%RHqRSYgkU-(u|;6un;XfDk@u71liiAG4tlL9xHEloz;H+ z2~%LX_+?&UJcHCE5>ssg1rTfZBvq7Zzm``^E47$`d`R)r|E{Ll#Dhjl2!*bFKFo0z z5fvbA_p#S$Ni8nb$V#C)a{rDN9&0e2bc|9QqbyffpgNb_)YNHIX1G7@>rzRxm(dck z6&E#W+?%td!K#6Frk2`zN=m3gSW<k>QoM=`I(eO&y>){Wh7?f8#X&`cLwUkx^N4Zy ze*Kf+F6HUe!88G@<@hFU?6Qo?ZW&X=Cue4c-FR#TsBFtRxlx|w9N{#a%p8s)IP7Uw zMj+_W%Cf0!FUqYFN?E*Gt{d1SKWBa1Y)lD!y};~KzzQ*c-#wMbB{*%1K{#4c;_3<W z!4s>~8#%d4iy;?4-nuYz=6bsY!|P2J;soZ1B6t3fHR&BGi{T#~CNO?Q`Kmeq&51dn z=ZY~D968`9I{>#if2IB!PVtVFEjRr2Dnndrr~r=A$aUP$6SI!>X5i>XgEfxFl~P9o z*m16cY$r-fJNqs~Y7kh#aN9<@h+ujj?5<21N-V82l}t8WDe*A7h{~9*+7tj=$O}kw z(n|3O4o1wh&uJ{4J?d!(G!ML&KGa-Et&g_hPKOkX6xWwGK&jAYi=`#WJit~nOOh@e zXZN<ATn{gynT}lTI(Odj^iolYpm6_DX^72L#bVK?#@`!B37NU4CJLCb_s%o<q%cVM zlQlv@Pv}eYquC^+l3YoPSA+U|%wf-w*tsr<1Kxo(jG`GBN0C4%Q(KgzJL*&hjFBXl z-r_+*yx%*#ajJ)*C#ou7)2}uzs6-haf=Z7($?NU0cs{;m6&kxhUDS}OBdiTJd~sWZ zrFcG49J$e*soAf@_%yPpF7HbVeXe6X4+bg*M3^g#Eu$rPu@%LX+?9Z^ROpas(&aTx z#l(9YFCznL1oDLD)$gE56QomdqD{^&wXQy7@5eeHAunIbY|pqc4mKzJLJw}QT<kty z)Nd5gx#(Id_>NlU-8_3&mcDluy9W`1i!W_WGMH5-ysh#vFcJf1KAU~2=Ub%S06hQG zXaT1OXAiOPoQepOSMd_HI?@2@Q^}!0KcHPU1%i9gr8w^*1nJpkxk9|e4<o)Y*mv-7 ze!yKO0|OXLsr>Qfk9*eqUQEnXfnd@1{BP_SFcZECM6<Vw8SG>^6H8^YB}{WnLyL%r zyNXgK3pf^W-OVy3X1#;skc!N;tUv%n0AOqp8DG6$748XJcEwCwm9=gvw9mGZUmG$w zx9H&mASbU$W0iEdt$G8}ISdi4LcmgSk2YJo@MI}Lav_l<D8U0L3yu?CPPDrb7@$Xw zw&zDX#e!69Q4ufVN|~(>xI)^FZl!*-Ky6V)Yhki~rVj4<`Vs8tKVVZ{>6;(Cv@;g- zkS@|RhV#YWHdsYIKdrKyX-<60vp)%7GtndWU31<G#-6>VGGjOSA-~-Od}_BFt=gN` z`Iht*qe88zyyF%R^@;2`S&V3j44Mmr`tS^oiXkCg)?CW3e-X#Dx!s<;RnrN~ev#BW z8FB}`)?1N8a2u<l(aKCtpj2Zuf;Aw#Sk<SYJXJJquu0G4?`1}bwHDcORUsF%V&S3R z1dSAoA|Ra3=R@z+qRH~T%Qb8oBl0jivO1M^IaX`{`>IfHSquHXH$BSwShV4hGV4jS z)gH766;Zkp=KZ=Ow;;8uwPR6(yaz{imFWb~g5BSM-DiE=$2)%OwBo&~2j3=tK|uXZ znjzn%ca5D;9n=e#R+78BIc$$`PyjVWTXy6q%{lqE-MUdRgLh8|AfPhD|9gY$e^qv2 zIpx30x|p%ee_SGMR(p3<UPAk_VM=dzbd2XfbfRfFU<ff{l7NO57p!CK8fZ+$4EM7m zca#7pW41qrr*AGWsHAP7NNHJCTe1+ba_3Ac64BDq<9BX<`zZF6+_25{WOhduTCrFj zZ}-e?obmDU%=Mo3`nuVx1WMUu2D!5PL4jT7hcZZoo3t0_kH%pY$3+BCNcU6^5exEW z@w3HY*n@mfXN}pj&(E2?E4t*SW0nKE#RGZRJ6$E+xrrED5acBWya*q^bIG2bF2yGd znL1z2-GS8K3*nJF!-mPtfZcZab7dv$fu;Y6k6GaIvDzhnEsw!){*WG#;?iBdi-=J( zeq+V*sX1`|(}UEP$>l>B(_MUEjn@min+-H=26<_J-_qT!B?LIu?&%#G=SugI>K`j@ z{EXq{NUF!}H10I$<ZY30F?OVErmh>2eWJFgk#;_5L5E0m@rh(D(%(M*T>e#Ad|Jdz zi&HfKMBcuF$f+h7xLn-dOO-9dUCFAv%>HP0>+Fzy&Q{u(qu!c4X-C$?xngSUQRSuS zW;=fZTLgoWJ%iCG>oIE+->123b#Z;{+MV6}kdipD;7>(9q5+3-q4Uk8+R|&R<<Prz z(xf95eR?XcAylBh%rT{T>yh^o&i`W=btfHm!dXGcip?MKZSGL(n;3oN;7`a~I*V>< zg_h}JQNC!gTXeUaMcC0Gw8U3$BW<(R5_{ZqQP{=l-R%6wj0HnzRadrii^syjr`E)S z(071^WvlmUdYbl%<VIPas%6~TODsMYV4>24cX$cuvUTFP3M-yoj0-IHLL&TF+?r}Z zlrht%%&b#(>h1%R_pW*2FyCJ%k7z^X8q=bh`eOC7McLd=@2$>KPDtld*$TTPu#!k- z^-0AWtF|3;!*R$fx0{Yur_jYg%M2ZkY+1iM1gF%A7Ud;xVGz5D^^R^jqm6)Dnuh{l zv1wf(6hgaNk^hCw;d%@X;kagR7U|^*bd&yy2A@_}AG<`XqQr1#nZ<06kHNCZ!dd4T zQ3agYNxz>E{@L(Ew9T$CV2sk+kCqam1xnU1s!)syt>OdX%FL@_GC0T}DjJB3&=kJ2 z@A{)(1%+T&$b@A)rOQ%{#cwC`6@-tdq?2R}=?f}bWkQ4SA)+XPKO%yE&+vX~YD&<j zK>v=WQhY&E>FleEl?Bm#l_8*=hxo|Bv*xr3tG_FmSH3QEJ@bYn@$zQE*x}E!8QB*9 z?&HZ7@mxz-9{@-|x4*`k24-Ez<+IVX9nnBXy;AU_LZ^3bGUaO4s4?CUy~a6HfVihq zU^b^2_ZeR$W%@)>!F7V^&veRl1!7E|Bw0?7t0}2eQX-HROy{$Pq$O7Ywi0G6+w)n0 z^?FVfyBH%gA=OLNHEpt~Sf-}Tc<}%t?rJYSS8?}c9+mRa{w)K{cyVboNok7YowU0$ z!t{4#Ar3OaAtG*O)%ocrF+&FuLjwswM4A>(z4*epxO8)(dQmYca&$CnjJh&<VZ8%; zgh(_LR@R-1v1z7P+ZOz6GA)N{%gpvLlWkRRP7m_u{q#}BDQYaYW0HO+?W%03kjfa* z1axGnIrf4RA)B4I@?4Qjj<_1YX{BZd8@r)#bDpL0_%K`FMq7P{b)n(<P;_Ja<IOx% z+wZ#Ls>i0Ig=;HC(&mrDor9GJ*Tthc56HRuF#1*D3}}TznK-MfjBEL{to@YH&T7E} zTjRE=s}WP8vfR{~boEYdy@mov7YFo^QNL18UXLYq-NvC{$MOfuv4<T_?(x;fntX5` zi?8CZvzqgb{GPZCL2q|`JC?k$p#gi4_NOuuu*G3|p~%?0f)^&LolyGe{Bs@*s@b7C z@Ce|EU4ZE1kxqSl)|t&9nbomcBF>1CM}&iq4+d-Uu5Gnq$9{CUoeGryT@-!|ml~UW z<of*79iMU`#DiP)Ruo>??^veRb(OPp6bqc5a&7e>+dW+iBuR!c<s@Nxo6U%;qKc%z zt(?Hj(a1$yE(hR#7zW8Qe8-{M#r1KkK{T4oY$Z1C5oYR$n+H_aS)<@eH&C+rETsXs zL^J}G2#mG>6x0{HE%KH2N?DjV7>DZCJCxUHa_rjQHef057T)v;(d5`tW#-iu&|4J0 zL#R^UEkB!kR_2n-s-E=vyCj>y_rvW3ik#x-DbWxhkfo(|+w?r&`SqfV+mboK@k{&3 zA*byf<QT!^9$fdJXa*a@_DC}Ba8>u+(HAL0ZhsW=OQ^|J+PTclB|{dbo`O;+1VTV| z#teOkbS4Iqk6qA0Y-owrw`O(eCYMQSZVOvmo{b5nJliDm<nq|^$m<fCD*Cu_$%``N zmaT-KC)p`wy>4m?wgqWvRtjHJqnSOa(IG5?gO-RvD)j|R$OSpOa&r9g|H)R-FR!w1 zTMe%kicZxhv5C#5y<d4(*BeyZE=__D-yyAZ+G5u%sDrWibO2oNb%=TXf~>boD*DJ& z=#^aGE4sL|d#PnMz^xv`%rkw19N$<~{}Olbeu=1OG-3xobF1KjjX~iZkDSVp(~rj2 z%~pZT+-@phEOasr;U4zPB*e)E9GUcswla>SWodGqF*)Dwx90S$9j6fB2o^4t*=cz~ z9)-Fv_O0Ud%)Utc59h>5p)3BhXLep8WB%=y2e1P096RvwU>i@ccfJT+M~^(s_M!fH z<|cU!LzO=I8YK3symmw-&mV%Q3lzK~0j{L?jDj~TMKISI5*AM^ak$6_;3abGRm*uQ z#M~}J-WNGH?*djIC_dGND}n+WseQxKN4Gl-R?dJ9U1XJ11wBE)=bi3+Pxt&mka%|X z;fq+DnmL?aLGx>pDn9`4)l0k3oc4XIqU-3ue}pdZm&M%}@%n>RP}b;;4XUpTiQpaL zr<9dM-C>4K0qLW2syeb}MHupRS^75_Ht!`$GAqpuce>v!6FgLNO{t{1Y)t!V0wzee zY;!(;;(LJpN3d(39@OfN+vf+K{YT)hk3`nTT6_OXI*0}wA<&c?2T91w1i#R6j9E=m zxJ|wQwC?;)I>RFoP_(Uz)3SmMRO>7?jH%V&rhrqY`FQ87DQZ)gf76ZPp{9X_gaQH* z`$uy(vVYKx(s%ez8c-@aYB(yWTkKF0kN~w;vwRBL^#ppzYO_iKk-R2zAv3W2Vinv` zFz^M5ENS)XnJ*}Bhd+u0UVhC<bWXIXJx=W(z;CvT-sFH=G<5IL$#&Oi&i702>Fz%l zJ9<7Kc4!kwPP-<&>v#G=v3H1k76L#h`qC9I%Al=_$4;P6Dy<uEZGll9n<}0!M56|x z8V6K-rTC5GH$IREg0Jd7mFIIYB0O||W^66CK05tkUs-6R&U9G9N1A1e^3u(C7@{xI zKsPIYQ?@FMo5nUiLc(R02J}$QB5|kx?D>h9Msr*&;JD0STyyUvqWSP9`HQM=zd~1i zmR6{GYs#-%AF+&Ht7&<m!yKckNrln+pj>(*CF$(FLnY;*2~tOGR?WyC_dZ#18u%=F zNDjuyQ1D_t$5*$YmLGkl&GOGAx|!)Eus`Pp)1))FaB^S)zv)FvHsixR7W)J%8%TZB zzLu$SYQUNnLO>+xN_DfB1HBbSr5~&zr4Fk&2VvF8N6$rpzU?OGeD?2VjY<8uZAs(k zZE^}3<>lp~Az}T*1eJ0zOC;N-NUTQX`WF~W-EFaHNpC6S8^Oz_OUckt?RtaiadV;O z=CO;7Jm|UEXim6nj#9#CAAiSE#N}HyI;Dj<t;Pj*R_$NDkPknyo9$V%#MB^j&D8sh z;UeA2_K;Ep-KzGW_?B*gMOn0kdP8PrN$u{c2oHp__nGo<JndpeTaI2Y6CdUp2Y@MY z^vZ$YgSqI^-KtSA7Ntnd?|DjOE4UpT1iM{YaK8tX?<XR3DRLcHQaOH9;)oL3N}!~= zkvrXv-~B49nMIbA>S5K~YU?vaP+NGsy~C5}3KA#r4Y3^w_XwOJd;KGQuPb>sfYq0& z?X2287a8eisAJ$FOYwG_lF58jl`dlC*&Z-G9hWFn>ErAO$%-^W{K=0WiCcp;c4tq# zU}L0Xfbn%u#|{s+;@)4s;)hoag(Ef)?X|LYvOQhjcPC^4B}e;<wemMeEij)3ir1~x z?S`peDeqd#<}(7BPrwZVXwR?O1|PAXnVUk{emC5ph5goaf<HFSH|Pc+-ds?S+9nv= zLMgs8JQ#$!G}w;))r67?IR?M^RMzsu4l>jLxsOn{-M7@|1l__UQb{3dZRZ3R3d{H` z{x@@_mpQyFZ++(uW5A^aIxMt4S19yf?_y8hWN2{L1%I>_$(7Ef9584hnsxUOK@gCR z(dMH_mtWF6c>0~!4b_K1`AnBOlwKH4NP@w;03DxZ#k`ZbiWdFGh@vrYZn3yzqc>cp z(s<1;ysDgPYh@!5OHKIIWgdNOX%hm(YzWS@=lR0gsQK4i>@Ns421>ds*olV(Dp{@{ zhMU%&!EK7QQz|p{FH4p)aAlgfTVH%>*?a}SWJr-_Lg7_3F`DU<R_BKHxUE^xD1$w} zyhGIUbD!Yd)}`GW*^X3r&kqUS3I1j$s#nBsNl+l5A5j0qP8|PdcKUal5FvdBBXb*l zD|07z5jR6)yZ>#)lN>K41;U6LEVsTsqF%k+5<sm}=A9R~FN>7FuHrl=`C{&gMZ6GI zR37WA@(W43&1o+d`9>NhBI2k2Va{O=edyuU=O3^>_!K;nxS5|Ze>KmPs9^Vp3w}+! zCHgaE)RjM`GN+{6X?650W~{Xen_B7Pc;q$Lg!~QuoY)r=$CW{NBagBsmo(1hNgZpu zcthL&l6%85S1v2fg!0S}`QbU$=T@`0%wB_KUI~7vDRkI!I!qzuZ2l%GrMK3ZxPdPM z%o%kM&s)4F?-50nMBNMKvfe-XSe8F<q58dR9ePZoNMXzvSk!m@%?wrLC2A%ktp|T_ zBne^paSQbY*&lebM>VVhZJxtig<WOX#kE8pW^sj7|6Vq-=bqEu$Mw$M=8Do-C7Ebr z#0Vj*A`W-<Fe;NS7H{JF1YECH1Tdx<-f2^jRWO`Z9h{QIRjTO|T<m`RmoMWxAM2PJ z@L#3nAC27E{#)=w^c}4Jg3a9Nzd{!`B`e5?7%cZkML;2nPKG5Tk4%^Kn!yTDjh$|= zjy@GC=In~Kn1UyT8U=&T55d?9#{NLg0OLyfB&&A8{oBnO#4aKl`d*#dusbS5;4FZ3 zqeY;{eHMelseuq`(Qw&`R|3Mw=18DDQ#6ZI@u^rpm!1yhIcDUCslAD4{Gw|5sC3g& z5|L$C0geZgRXKHZhI6S^=Ry!ZjcEsI-CESmQDIclVquvn+=aq~>+DYvN^?(%gF!p_ z_my6AFsg1V1LO{ao$=>dTRcxoI51@}*{_YV_syM@7#5*r#rkaT^t!;T%z8b}Hp=|d z=Y)xAA^0TtA(%nOveYeId-ANxFddrqGB!2+H5Ek2C9wRfq;>(0H~+d5$anubRyA5k zz6$*zMo`tj(l4mL0ZBl1XrcWJ5QKjO<iF1*5o<dq_kSCc{8vciWuyQCh~7Ac1@)S= zr)wVfAg~dwlJw0v0T9&PwhM$YB$*9cWuF>3pa@?;zDXS6`y%q2!E5R458F7;SD!~{ zeNbFTDYNkPSO!vr9HxMp+Pd!C%`;EDlXauJQ4KbYo8MKt2;-ELO(<+mDrhJT>>dd) z^Ah9ACx+JTHN65mTld;~G?dopmIn?v8{-^w6fP+gJtYtmF(E^fw1YuTj9${_$89XU z@kLqCOxFR&<wxMv-aePbh|%NYB~D|_XV>%<BdqOU1QXDu-+JeA^8y=`IN6O_UWv28 z<i6Sjq-tHH;EGRRFNbjOu{rrUBoBy^QP@q?j-KlARws_omGi$6tMix4s@b!m|Fr?o zB+`0_@YkVF0sqsXv;Mb-uIOxKEMjGBZEWN8A174BD%Q5BDyTjtE-f22r8iwGs`7)z zF8aV=B2;1WMT+b9suTqbTiq%BS2oPtFsLYcuLcEk!u-grzYV;gEHY==#1~(|V2A%g z<2&MxllkDX1vT*PXw&l~$1~?7>tU1I_50&X3@B5dy#9wLP91Ky!E?C#ugNbGncOrC zV|M{*Ut)NJpZ@(M*o-8ep@X>SjwJqt5>5MQG$AM)Il>SzWBw=x@T3e0eG+ia?GajZ z?buCxa5BcF9IEo&V5~I}IU&zqj?eDgT6K|zYyESMR3}%n^0fh14I#_Fd-pkmt$LMG zw%oSuyCp&lFP~=}YpG7OO$Qt$hyF0ey3ql<Q|X^vLCKj_UD3B2YIL5WZB}VfdQ7*C zd(<ed6|!`K(Bqd~*hj>)DgmAs1996h96#&84dp0nS(+ZXMOfvr2vn{WJe%@@3@J@9 zLabNfonPl}r@1EGA3ks4D`9F5$^pq`enE=Q9BcTmu_QONy|c0@5liS#pS80~(-OOF zmE#eNhLjpZmtMMn`Ne$_CzU+Zi1Pw+4(yboWqLC7XuQ~5boOZ}*o<0fGxb*W*`b&f z_u`*k`&Bylw}o-I#l}h5Qsa8^EmMXTJ;TR|;mRpIiWO~~%`@>XE?c#FI7da{BXwhg zl2uH1462#xfnw4;5zP(t(}yx!1_dYx>8FCOKj_C&m9V)gRJN`<o{N%HWxK2l$X(Li zptWSIMwqc%J{luDM##Iy{N!$ivhE)e1ZvY(?|?>LR&BN^*TF_It2lkIO<9b-i@n?@ zFxW!Sa%*$mM}^;#&QY2tH)`7b>lu#-uC<EZhp~IKsb8s<`{P9IOvJ}N<5gb7o`(t6 z@O_O!IWlI8WSU|fpRk<<Icl1Y^EB$QP7MrHO~6BvbAEYcWO6AsRYHQpGR&&7<Y7!< z9yW3cV~5t|a90Kj)Wv~+qyt%eNmHEi*^z<riP#FAs-I2bo>##&iYwP=e5#X&aSWWi z7ZL10e-yr&pzgpPOjv<LB0j{kg@{uLTfoFOVJ&Lmn9RxtTfX2~4MZc;jpzyWfH%+v zSVjKaAR1-s-Tsk2RDyV~!LO0WSXR~_K{r|L$1xl)JO{x9@`5OyNR1lO@eBF~b5ak8 z;d+OE$c9-wp*M;I-pG;CCmxG<<9TVdmKkn&Zs6GCpadI8@6W3YN2FY9vjXREC9+cJ z_N>x2y1LrLq*+q353b5T;GEszI&LtYcWm6gYbV__yXa_UkaBfjUemWED#%8+vJ~}A ztdS-7ieWmxs3E!^u(`ORE6t8YAAV6YN2XBvW~6KW>~NL1<Q+ftR(%6Oev8{B5Wzby ziS2_<b`mF*4YoZnkJj~Qvm8Z1Nq7rP3Q`^;UvdYdZJp&3R2{}$_kmt>hT>jGAet`l zK1b&gj3wPy@Wq*^Lh`^iEgJLn)X?90%2cli)Pq;ewm^od_+kwA8Q6HFOxdRjc8V@| zi-Pi!t<byI_<(-DW4&2nM?Gp?oN#4juSPBQpp#}D+2*A!#}45s`YJwPEGE=&@a zQ`1=d)A62PlIpQ2#d~gy0ERb+2_Kvdb#I%*6K$!EcIwbhW9)%4!EzkW(Bp^H*#mTS zf<0tPH1vRhXwZdye;M-xN?~6}9=3xz)U&M-jV*r2rq%`i8r*tHNB>xR_@yPIyG58V zee<iCg(q~2&}3P!F=c)y_~=h}h#e2nN7qgB3H{%kdw113iv$J)l=F{ExlI2f&i$_| z0mX^mati{O!?`$ycw4AhKLaAr?05W@ZbTU|iPI1<#DOF}#+)|7#X2q=I;nh9$V3as z-a37g?z&rKvzWtL#x^dt9CJ^)U#xq5-e0l$ST`Hu0ca=@WJy-56tVJUhw?*R!ND}> z*6L*%cC^~Yqnj9tr^X?jM;>`DI&v0z?NmvcP3@IvC)aGjp|rJyAkE4<54!F(H)A@k zQq+X5sZ`vsXJWr1nWL724=?mP`<Gf)Zp};N5i)Xm4=DAw6UUl-C_7-A`TtnouSlBp zV7+-|w;ckypOFKPh9np!KV>Qor@gn26>D#8l)_`s{aGkKT|h&~zujJim~o<cw-*&S zF9q(GR^QZmg#mTXdOrE+Jz5xBtF)O}36fmPy|R@FHy2N3yaz|)dD=`|3?;Bb_kIVk z>+$=10D0=mS%uaBdDcIM`q<pOb&jk;qr|Z&WYQT7*`>D5WU&jFt#-VzIChwl{Mk9< zHmhf#k`K$Gq0}=@HqO0ciRkEK>*gK}McLq`{x=UP4@B}YC*lpx9rd;L9b<KNSu;`n zyqY<W&m%E=CndwMjbg1yd<NsZHY39Bvok?b48Aq(OutJkQ03+~utQG4tIj_LfLFD! zOBf{QO339&+@TCv91O5z^AYuFluQEB=0K<8)_;?uT(ZqOfoKfS;s0Eksh*=_-&Zx% ziOsySZ-iQjnl^~|hz30V4$b!o-8i&6!Gu4t<8x^9OCRhnE>(b2+adle37rv6d?9k; zLnk?9p;JuXpF$9~?rT5ihMn;hAPe>xbO;LjbnL!#SgfGblrwCB&?=dX8vg>l&>-~m zi>LRlN*1E&9BDv72ONp>zu^5H;IW4X5&r+JOX>ftsZeq@`1{d+igBe2*?-wiZ@EZm zpaCP5Yge!0=pc6eRxkuLH0*~ABKTt5a0w7<=``ZLxWe-K;d_Sj+koU10CAfiW$Lmb zS}#1ib$FT1X*&IqeKYCv{&hs{$GIsB=tDDh7(ZM%70C~kR!C3KoTjMVgh6Q>pFC@; zFw7xrC&4AWVW2s-sA;v<jA`Osc)+97+)TnhIVMZ@l(AIn&@FB;?5>mEaA=u=JA*Rq zOxQ7)z3!BmwksjS?Ky5e-`r?AXS;e_*$gqZ)yR>*FjGpL5y{lQrs#71nny{feP`Rb zy|9SPYg?*dI8_}DB=p2>5%$~Y8p3Oz+<=q2l-%QrSR&A2;CUPQ@?CS+-r0l0qDXMT z>p>R$j=?x$Q2vIQNgZIbEWj%$E})ZG>H*kCaD60e!;rD0O}HK)AFzQC8>=T1Za=zW zl{o5PU%0S!@4e{;@*`R_6^c#ORLNp<1TT!kQYSLj`B{S39EA91rZLrp*@Faflpdt` zLpOk@#2GWlxyi*i6Jbx!plE7!5q{li=b(zS1e5C}V#}R<o4x94>9h?plM(|KcS=QH zl2~BT)N-Kp6TbLC&L#XP2}g7CRnY7`fV<^st^&PD*hBal%-?>b#tEaFj%7kF%*OiX zMb#7)5RKyuxR0wEhZZ(u&YprPD!Z5v)B~I&ohnclX@lIeJIZCZl$F)oF&G42p$Ql8 z2z@a1a}d#G{p^qmfd?>$iGx~E6?kXR`GmBnyaf00-cA!Iz547#J!65PPb-@esqpg1 zL%M(KtY0u-5kC1DCwK*OxrsMdjuwV6sd7&an=zmym8(yR;-VDIkd%apr9T78L>os% zC$Hx<k6x%Q_krhwwt!{8t9hY-LI#>-F9=a}Xtm+*OaINtT8i<PY2IHcF!+xt@DI8x z{~-nbU;Y5a$~STg@~FJFQO!wIqqb?1B1VRW%JTA<{g}a^8b5(a?h?;h$k97p&bE{I zrBH|!P@Wq9;`p8x_$<<}nz1X-n{Cf&_m}PK_gFbSph<m^z?du+cXJaKr^3A7Es@(M z>^6q7{aq2<*vgwKb$P$z37ZW%Thxu!$5VK|`<k@(UQ2eIf^`l`ZaLXsMtQ0<o%j9> z&F4R@GvQ6}GPnlYc0vrDd50Vl*N$U(NVZJ0W;8Rsyi_#^k$aQY8gRa+*iLvmrJ>Sa zfd{&y@4)*WYy{k}Py#%Mbcps<t4H(H^Pxk=dgmk`H}_btBSyLu?yfrOc-1W44&Y%k zzun%I$TyCJbdi4XvdkP=5<cB{DZm1TeeYO<uhK|6ks8Y9Xv<5wuYB%1KE$oSKCwn+ zN6hs}99TqU<-P7*C4znf;>f}piIoNt@3Bf67=yzPWbH!p3)icZ=3Kf<^!6@Vvf`aS z5GN%e@lx$HGLX#YxvurI^j~2$xWF08c6(w-X_$><g?XHDraZPDz-nz)+HJ?~)VV8e z&19L1#>>=gL@|wJVMg{;4uVf`QV2=v<{(KWkem_+f=kkezdv5hf_#jf_)?>Pr*Zf? zl%b(XA}fyxZWaZ@MP7~mX1m52fqO%lBlLw%vjSSfU$@Q+#OIniGL7lqo@4UYZNTpK z*Amx<Rx>jW(mxgQ1r_opL~O?%U=Wd7jfZqWknjLX{tYuC-gJOYVae7v6>Lwd-5gvg z+UCF-!ML9ad*&7r;}Qa9pxy-pP|=3LtTE&<SS5*ld^+L#`3Ek$c+<1!o*<v(wk6ss z9Vh~LO+F1dzFgTk&_a%YlFW|zM-IZXq6ef`KnnCU0jRhK38S#2K|%)7G5x$&1IhhW z`b8-Vi6(}uJj}>wu5d|ky<}>#!n$eM%v(oHzPB~N!vR{#Qr{d2U5G6#_unr5S)NWl z6MyAO??1Zj68@ia<$r(Q4_3DPmjD-_5J6oRO&Ao^%f`E|NAKr4sx%v0a8QVFZ(1?; zU$;%GMsC*E#zh3Oj8~8kg<<Z6a*<!Bp}dZ^Gu@uo?VaxrE3E`T*Lg`pfjs#8bBLJu zCyZg_8az`5!TooY+{F>SUo9Q&J^c)N;fWy_;%KD0^C^-n?WM@m-Pk%|IhJ-R+b9a7 zb*FDbN~^>=E}SL4SZ`YeGjXMts&RJN8g_CQ@p7J*A}_)Y_M!T2^x{$t(@JRMupmWu zaHMB3-9?TRl336r`uwkmZq}qkwM2@}>h1JGJ_7b{u2nb-TgTg^JX;41#C0S9{LoSp zU817^hNhgOdH!eG_OCNQ5YK+ZMg*mGn*ugi!=Cl^^+U%pSIVs_>LNGGd_Tk0+m}Mg zH3!9fMOYNmeX)Sj^8SmqP32DomnK0EX@`Q5D6K7R50+H8jcN;A2d=Y-*y`(Wg4r*! zEdYpBrSRymWT-q+LYdO=^Ut*irF>x;@3k>*s_VLDRwG09q5}(FWW_Spb&0i2H|bR6 zjVYa+#el6aCZP>`?(&CJK?wIP1C7c&ybn|0qqeoEVltEZ^IfcET%Hja2#rHb6FGGp zz-w>M0#^(==FVyTd5?GVlp2moNV*|Dln`kuQ>Dvv`@wbqd}Ui=J|3}<EidbW!x;;= zfRZ8PPuvhgJJ3S#5e6H(A7Fu|G`7e};4_+EEYnz7{qBK{EjI8E;Pk)ycZpJ9bq7fU zQ>{PIw0xI_SFA2I@kBCvV{pK2*I!eHj5A+Y=9OC|APVVm$_)7*Z6CQ;FJ?~PBfjV{ zUyX3vq*h=F%Mbv(1ALp`aDNAI`ynu`!(Rc6{*Po&@y`MLpMIc7RvB|x5J0>dGjQ)G zVU$>f0u3|%iSDUz1R@2QRH4|9h6BHeT0TKBip_|vbWHq82=4_%ATpN`W%#pj@VVbM z#b?X5!&9`^=lc~32w}GzESA=7Aa57uk%Vcr$+hj2Q<sK#FYFf$fR9V(3+q7D@TBkk zoHHKdCCl|4;&cKXgc_5iljrAgh_@Gi>O7iw(i%q;Ce4OuBQkXVQ2xzLdj(fQ(2G`k zLFwA6Q0~jVd<f4r{#%+6$OF<bz==Jv$AIfW3|xdBvV|{Lp)b#dfiaGcf#OE#gYVj& z4vQx<$^=;rB@l9hC)v8+TY7=vnz8Irz9$wy58|YEa_WM`GgJE&)SubHtpn1{;eVUT zyOchy@1j7Ck*J}W6nxzp#5FD{R;VIGw^@Zhjv0FYxV%i*tR}))d`TRST9Ot#7E?)= zODL=BQZ`>+(z74PaVs1~8Q5Afs-zbytzlhMMa)aM#nDF?SbRq$_o(R-gtETHx?GTk zA8&;+<|RP|EJ~q(Qd!uil>{{I5q@kfmxo<?a2KDAt}XMOO%EweG{f&i-Jr-Ko#4Qd z%<c8l%L_$xQ8sdI;hE_cc}#?v*|g4wXYA2Jp=2aw@O{VGA2<+e)W_2CQFQ<pXpaXK zRTDc>UQs<HVt`p*#SI-Dm2MzmAftsJV#32)WRIrGf~WQ_U?6h+8d+P_4XlQ$3)~XA z762D~VW+f5YwfFb0KSN}J}d7gHgj|S>8UwWvb?r<5fkH@%O@v*<tF~ke0%z@&wB!O zm!HCaMP}naQY+;@N2aK`m6Ndp3FE(yP?dFT7Z^}^Z3G)lu&9HhZCBOR-uhGE?$`tb zi^au*c^RIZC6#I)lGfu7{9e_5!o|7mLfjT2u2_>6DLBg{Wo8~+IL6*IKfKS(=m9<7 zH3bpjzuw-~1$nOCj#+8m#D~%%s32^>ia1g=oZ|yj)z0)WB@$2NPv*mr5TcKHc!(ZE zNkT3_pnd6z80fJqp1}5Tc)?q%!L#(6sY!fuW8bt1L_UM!B-Mr#<|CWxc9dqD9WeV4 zyOI+wT#${i$c^6botC_jPm3~Qm$F3&3K_x=8F(&p?^bbHzCtn6>IF?;+senyCcpC> z@HRkQ;JzKM)+vLWjIzq4NB6jGWS9DcX!{HoL6UYM)J2H}P`H6zkib^~@JsIg&J0QP zk_Kfn>8mK|43fPO(eerU5A(Q-WBzX>4@vsgs?}xovRmtYWs9QtxkaL$Kh0~N#HWA2 z)yFGOC?=JRod{tm!RbwowooK4HO{LImnr1n%NZ@AXGX$t!Qfk0lGZt_xrD}q3C%G5 z5L6rW4EeF;w`1iEV)-SoN9~PfmuwYp;K!yq25z_`hP9&4ehyb9gT*yyhE>Bl)33Rl z1^5Hs`gHVT?t*ddjl@mTsM~q7$Ua2Nk+OEO;BvCq$<7nk7sB=IYMy_WkLpkblG?zb z8PZ#k=JQ{}cx~xo_Ge%qApU>U68xV96Vty3lj4TWx&R_C40zy05$HV3RB;g@QnBKu zsEQu;5m>Pzv3L>7{#F_s4O6FCchjG0@osVNQ;5gHib<}rLqcTrjJxT(bY_g39pBz> zAh%EtBzRr7QGI|AS|(kKwpFLwSRA`h{NfJNWlJ(XXg*6l{G&29<FWr-7DVbHU-+us zXZ)#{AhhFT-Hv*|cgMtTlX5OIj}6S&OvwTMN~%6RS<$Ad0;a1FtrZUl-Ud7f=Esbp z!&U@<WH0EFmQIbo2po^MnQJYi`YKyn%*!AsAv_W<qPMI(hGxr!WrhbcSWie$)(G{l zs`)E4GylBP?Fb;!FNTCh&{;N{kzy8@Zv+;|krcSw#l9b(A51ITm4PXPve}Klt9L67 zXZFc5^WBf>f)35xCMxrGo+%tnCm7R`2|=BFY30PvWF+Di#8<H389}?xy7K{K`6YNv zcJz8k8Tmn}I{JRL2B2F0{jG+DW}p#_fVyTIeC%46J39T)t=ul-%>BXw%^dB_6dFf9 zx^JHG06U{pCD|jaN;cWQl}O%{Lcjel@l@uwJD;q-AV2)anauwTa_0X9xt7#{0P5H9 za7ncNRg12gPNj<oHKy?pMyfXwSiY|OnJ4xLSHg7Cn9*7<sT(lC2k;lg8gsci0lLL* z*5sf2>>F(+`dYaepcZ-Rfqr%bK-v>SAScEHT~DX_@6k-l_(e9X6dcLcK=}-H2(DyN zC%4}$C;edUAV@ehuHj!&;`%<!RaHI#y~{>+&x@p{n3j-Zu?w=17m;;nD2g^^6j7P^ z=xjd!j<*nH`*!5tcz<AO*E}a;J2_c6J5;u`w0^Vi>kubNYttxt)hOa=bX=9?w%en8 zK|!shDpVm8ZisDaS4v?>@oA%ap(@<fM?qJgp;$8{RsBW`ZNSTFvT-vq(+@<c?GRl6 z?OySHHRVyX*5sdh;KKy$3+RUkN?{dpnPaGQKmnSzdDP2|LJMJ-gjIvYP9d{fC|knR z^m-vG`3+9l4*m^r(XscnH2{WJ@Tb19a+ooi3q`{Y^b>a-#Npc?-4ZWR=NW!8)NPjG zF<e2iIDk<KbMP5#CZQe?HOg_`%OO<tapd>E?yc(Gt&kai0e<w4fd7ML%6|ad#Lns8 z+nHdwUlu=pAy%<vX18UWVt^t!+TX$v3d#nAY>pJ`sIoQAb5px#LJ-7>fq5c65*5)e ziD0NK_4<yW_;H4Sr}r}x#<v&@03M$r<GQ~OyAX`8Z~`%oE;^F4FpQI6`GOCy)lIlv z?Z80>ic$u+2&n4k-{gH7;iwwfuiQEj3OF%Necfj6RohGULKvb%TO4}oCZ=K@>{jfD z+;v`=o;%P<qQ0VKp@QJ|<qP<U6u!!63@R`RJt5>ysZGMp={(F|VE;ZG3J#S^z+bOU z_K(A|e^68S--q+Rv}COR){^m|Bhi4IkTSQdSKpQ-BxzDFYe`Ol&Tn>76cC83sFqp{ z2{vN4VaxM*X?;ys_)Wzevy*iv#>r>e*ww6stZ#DD&VIr<<2cRhnc(~Nc_0VWT8|>e zZo<M7SqPsl>a^D$vc^%6JeB3evlB#L|8qm6K4tJt65xP4r5-=Ef~|UB27p=fB3^E_ z*W6*vhoEQen!oJ^Cys%y8ng$q#BQ*6A|lRohARnK!FGU-UlEy6nKiZAa9VILRA!Qb z#=u({*Jz2?b7+zFoO6^Z%$v=&-`ot-_jGq1q}|9-VGxt$jG}JB-y>UzE;wPZ^MwrA z2E9jeLn`x>wclE+*HbwpnHJ)$zt1^)jwFwtvWz+540d4j8^%{}Ig+6unSo=vsLJ%e z%r{OUoZ@{lrP;`$#aNbh9aEopDB?XZivDQW(`-P1C*BSjqSC3YN%&EiqC?{e9mqPa zpkAfo9<~vX?(ER=)Obc`gIUwwbBdL7R*Fd*Ue2J*ESWz?f&RchwWhI;PsWrv+`^c^ zez`fixn7d~Gyoc;n|Mpj{GkhCGvjbM!f!HFfLWxPgZhmpYO%gn*MI|K+#Z(pDBWIW z$0?j8*P&AkmRg;lV*YDt6q@yhRRiQV6VB;kz_d!49Hij~2b8D<hlOkoJ(n>%wMsl6 zH{~qtTs3hxDo%w5rx@DLZ5%G}_%bM_5<^HR;ArzYCo2P~5jfb>(Zaj~uD7);*5@GM z^ksX9T#BM?p==juuo1qEihxFE_+AA(_y{f^zskZO^I-pVO~L%yx9U1TMFez648^@g z#f~+eab2uOWk=2pvuzvc9h3yeWpTbCoZ;-vJq~L$OmIrpSvHkFLy$~h+@DKgIbV#& z5TY3$oK1eUZ-v`ijMm~ubbUSbx&^O*4&lY5_^o?wJ{s;+#?~pG6K8{Ag8LeN7I4di zqu5DnbL!wf-<)sL(_#6p{ijE+&g{N$!ml$Jv#qa^f?uz??-y~s!+Ay=x15t(Qg2K4 zSCS?0c?qFqS~B=~J_tzb3iXDbvo2=}p_yJS3k1Sqcd!@?v6fK|k>mu*1;0TF-nDh^ zEfR#<hJV!Pg;k$$rAWgO<n4JIjV<D^P+bzzsV1twh5J=X0~JLn2ylZz8V3{=lAsdu zqD2@I8u}yFa~NZa>?v)+k$esdljJ*{+X}ms7q~wG(R!K{ueD@+;Mu1f4dAbvw|ob) z(Y^7}krBVQv3!81rt9)f=^>?W8IMwsF`TUk7QyGm&v5f}Pvk1SP+akm`iK%9G~v&> z{!nr|oRC!<MqTmz5Jna!Ade$6*p&MzBRwFuOBkOF%JV&({!Ca?g<lYO&(G7hbP{@+ z<l)1@oz>AEYe{Xpvx};URSTk5XPJXf9e0m+_YB%q-E|`Nnso}#!q7>1t~4n7V6=Jz z_IkbuB{Ipc{scHrMhL8n{Tx=Ni62NjC)CZtDTp~A`lftq`>V4Ky_&_beDqZKD(GL= z(D(xRo5L2r1-)(mYT%e){(n^T|Ezi*t-K+JYmEBs?U`weMYr{%MUc8!K1Jiy!cwKE zNgnzN8jLD6Mb$EN3juR8Tf@|pl2I4g`)+D5l<e*IzLFkGe^FCE88&Nv__rTI&+B#J z%{eDC;Cj8L1;KIJm2QW#*D?JjwYTRTzYoSut6v=UM<FBbKszS9VN;B(q4YE}mMK&I zt{|*)&Xob`nMYTM1bRt9+n^U$1lDomrAzwQ#U=BIQO*z;StO0FzJp4?BJ35Wik(cq zGng$Tg@-CVM+)sMukl(X<(89!%Q#(nOnfTkND33{U!C^@HZtT|$`RyX>GBgCZ}P&_ z(&FTO$0Uc9p|5`j8i0=L0aZXi8wD~6+Gs+vRoXwVNfmUUBsp2czXqH0L6k8uV>WX7 zD1k;I0-Mu1EyPhYkM+)NzDER_S9A_EqXbq-HuZjDK4&G>G2xdc7H@0W2KYn|(_s}> zQpd^nxD5CFa<>Nrirhl#dfz|`jiiMtLw`a;2}bEr3AvJ%U<q{-$(zL!lj5wkc|v#k z)^XHPmVQmiRMlotNy(VaL|5~#r@`Z@gzR_}aE#Vk>`!}m>bO^g4?|Tx+jJF`veOYt zGIEv2-Lwc<T!p#lLaGis<-7+8fMPzOL~wR)J5%+p3>y1wN(AT*9L;3K>5-D1mx-VV zfmrw0nG;Rr=+8<)ga3z>cZ|+#4Yo#O+fK)}ZQHi(<c)3Hwv&$8v28n@?%2ldy^rr1 zW1n-s?~bv4tiS7-^;FfYHEW6uQ$wi2nJ5n9z@eXw!Q89AHW^~bga(=MF!QMFF~d*d z?M{t>5Q4?=4=Yxd#y@7O538l(k)&5WyYYG6vPQ(vxrKY}W=m?oJI^#)8H%u3;LaSC z$ZLp*9qRqA1BGukQsXwU5vS)dPX%1EwdKB_jybIC#+tPFSewC}YMq+6GJpsBZqe!8 zS!1Vn`EUv&&KP-h=ZT;Z?I3wA2zL|GUp;cwB0BY>dUy_;`1a;Lh5$lXKd`=e<&-#q zA%EK`;0w^~j2FD+586#44nUjFu)zz7(zxNx-QczGQcwW8j7)~*IFb@L;z*&E^il4L zPr%p^*Oaj*DSB`aF+wR-bxWacjrF3#j;rRegfhmB)n-O<xD7R@!;ZMR3k85Dh$jRr zrWEDptsAi(z&#$)A{d4Q#Gs71l;9VKKXt>lF9s_^@cwpJXr~AxD7cH}JQm4!H7i&S zuH6<(5!w~|;5)Amh*0s`0~u(S#Fs1%U2tMv?mDMH1wb>r1q$4O8kB18&sK6rb;FXm zLKg0=;`w9B>1U-eAR{zNdqy<aL^m`9uK+#D_Lk8FIL9!zvI~Rj63Z?&L$QR|q-i^M z!0awF_i9*vr{}+E;$WFS+{c{@()D+{WN63-UcmejZlT%JA_3)NgYDDf!QF72igXOC z6R$d7d_fh&!#Rek{=OE4+2wR*pe9e|!K6ITi!1nxJX(rlN8{I{1IOJ(31;o-W9|=s zX@1cza%#_aoW}rlNCNkMG9GIZ7l)MWo}ge+%mTy2EN^i9r7eBhd3*hG^4)@#x$z`2 zfk?R`!bO=kXukTk#8E!YXJl}keV%7@1V0hzA10vwdl;WX-oz14Vt9lRBF_!q$BRY@ zckFzme~^B79j%5Ey^;X>!zQzR1`OJNfi^GxSh*3wb{SgsS8YL>zZK4L>Y4eMq?lYZ zu;2S9DYE^ekdx-0lj8sTSG=#1oB{|FS`OqG@kBU`^uc(rc}M$=`N4QbhOO{5kk_?( zp;ojEZ0YqO@83h{wl16qTi)hmR+c++eSsf40zkTjhlLmWYlF~*SW*&}Z$@n#$TY}9 z!V>+1lcI53@P%`@DAuyr+EkF{RuV~bw=NwIA?7<J1e`R(DUKt&CdGo5n45j{Eh;M5 zwu*jY=e|4`EEcr;#2Q1c>UEwq=d>l>OV+(9zKzO>juXFnu_wU`j|4pOq0lV=aSO=% z8@uw|AK$fTRBm&^Qkyhmj<&0#M%Ar_IYw#WT+TT~*mO2}qCA}>q=HFJ)W4XOkY>Ir zyU0<q{2`I#+e!=FGYe$*z7AE61nN@&G;6?ElLEgAlMd*ss4k5JhH*}**ym(#fWpuF ze!tKcJp4UJWq=8Or2o@fi~l3}_#gV~zZL)g)?aHx`lDH3`<XXsun#7NHam-g*b%J@ z5=$21EeN(_2n$OUI5%_KhM5|9kmu%x20#*^#ap)!l&ablE*Gs7>q@CuGqlvIo%!1E zeIng>{>ZdVGetRIc=5gSyX(2S+qvR+Tk$slK=&!XQv`N7G6#D3$X3Kp-bPB>3uuLM z%8%a~!j&JtRATYx3W87^KF9D1&?qAg-*Bz_@P~z)JPU(J`7i}q^AckjR1KxyplkI~ z1I4TF!x5mK)+ol0Uble#JU9!wi{;F#2nnS)<is3(;mk|gUIh7==IkZQwlHr0HtR5X zi!bzCr#K7qz}NWp_WfNjjd0{92g{KuPUf~drw?5h-C8iMA1iMaX=lyJp$mep)=0YA z4qbQ9`3b9|NUMJ=gf+zd3av_5q<Pc*rJiWreT~za^#rcEykpVryZS5+eCoFQjp5AJ zkvY_n(<Q6!sw*vg6K`Nq_B0!hdHnkBIiZrhmsH&l!ML`s*s0c%IS=1-GsOujkJ#k& z&uQ~jrs<#b^cU`JQpaV96q2rXD-)e(tR<%uRErJab#2b|M%p?n%$w0K!DWkPb7)R; zGguvbVacgIU(Dx^=CC;S*^>S8gH#y^@TWO7_`tSZQ!(2nW(pbd7WMlX+qrf7SrdDb zLXz<C$!SF~CK$31O-1@hRZ_c_z`GAIzN?CaB_y2BDwMlcn7J|Q_D5FRvJ((!lJM)= z(Qzi)_S(0bp1l5ZGgg{7XjRR}2ozOt)rWgVEQcu7?!w3z=x!Hd7%)q`H6yv2)6d9m zO|31J0w#~pjpX=!?L=qpS@sR3IG`vcTu3<`jBjt0mhK+w60+520K(zo@N?Z6{xYM- z=gxKix+KQ8%rn4_BTLU&?IF&oJ&N9nDC?%ldYmd?rZs+RZHG*NnCq@0lcrKBY})<T zkkaD%`I@J=4%GwQ>KuFH!52py@~Rp)YN;i<G1dZOYUa)nXKT|kYp0yV;D(e0PlI$h z{NV*7EO>D^4i7neyFaaAL0rbX-F*jpY>#gdxz3f7(zn7O`t4z0RuVyYCcV+I3@eDw zwAaQHt8tets-N!|wP?(CZrL9`wWK_zdn2pn&Y$1p0QfyzG{p`ZW41OZw)i>?G7=Q6 zFb_d--lkp9*>1Xn(cF)F`tTmI)_%X9k@XiG&n%NU(3-eXXD3=b>l4phyJIw5yQ5au z)X!YsHJhghC1k2|XE)P+9W-N29umrE4u|HC-KyZ@uVD|Kaqs-K_e(yh^Xv)tW9~+# zyY^7y;Aj0!YZ#dc(Ij`@Q-dmY&?heb5A@)NWjBo3Q-nsVUkg{)<UDhnL)rE6pe6GF z+?%~8O*(|Hz}}>167~42Gf8(+=r`AQXg==Gm><8MX+Fyiub#u>Ao~_g01~6&*9a7* zD%M{ga!>e{+;gO}Whrr8^8=^W(&Idz=s0}BaVy1SVg9Gjn4h&KpxSP>qBP+$f{3`_ zE=SZ04UWz|#YQ(^b{LN6VX$T6TIh8erTEro2jC*ymad|)z5I)(<_jR)Cbq$^sV4@u zdS<yAD!WK)-cGBJmR7y40SMZh9AkXob#a(-3m!OT6RsP_a{34WyZkLAh_~j=>@c(9 z;Qjn(0zzyiSo@h{@RFAFeXEvn5@2lHD+oWy5oWwuF>F>QCQ10qk=KGmft_-#BxfBw zl6($4Y@wZ{tbS2$cmFgy^9c@}4Q|uPS}|pioIJ|(ak$|2Mf!^GGCFqB<hGTFeb0`0 z5~*Vi5{KsUbz}<mD`33T5U2Y3SP=w@N)JLTyn^nt*GG77R<+*~u2k;4g9Z?v$wz%Y zIoqRm-<hTcsB3;IYLol`Z%BK4O1)UU;eZQ=_}wlG^>E~<I2(J4ohB1FYn8GdRI9tV zWmje!F)M0~q+R6%R2U88fV*0mV1PSG<w-%^2(sDHHGC+J>kbr!qAF+9`j+vOAVFHK z91W?24AlvPjFVq*1EPJ>m@ZiDqgV)lS5!{6nGSbQ@y-%X9;~E^=#Hbht-umy4MCQZ z!a;x_pXyU(B4vY%uw3M`GRP*^D39-+K@?|Q2B0S*mxOqAWwJX^!3sB<Iy9q&(4Rjx zW-Sv$L|DzH78IQxw=#<mlZgP--UcRp_d}o%iOP&vg}t!{9N7l|0*|jy9&dH3Y`sAM z090xr6H?cNPY2WE8-QTM5AV94piorRFULT{`086#(kqY%e?Vo+q$Fv%6L#PIa-vPe zjyL>xPfHVVa0XLECJA*9(&Zp;kiABsdH`9AjBktZcK93mld?~Mm~vqS;y{7aUB*(d ztXW77wyXC~E1Ge9qE%1v>aqiB*g@|d>iIjL-F@&|z3$C0Mw*b(o+Ru6TX;;GmDKzh zXd|(9ay&1TP3wVqmx$#&F_}nDJV^seXN1&p>Sowg1JwC5hP<kFzx~&~h%#l))_LT) zKu%fNQKBg!#I%BRxwK*Fqjf?IPusAP_&EN)+~8!&J)w30ltgBt31=`W=O{zOMU|l{ zkn}#Uf-dw4UJkhzVoM#dS3S%Ldzx07YKDKfQ;0><;kGrRY)4p!_lfi}T+!pP5}AuO zm5gT$nVE`oM|Kciph#3wjM^M}rA#b>rEB>t1LbP{491TFO_{4S>8#Px8<^7>;=CMx z;KU;kPw(uf$4B6;MBQKW(UMI^;_3H;W@OvS-|NNHQe4plx_w~tN<#qiiC*Xr7LAD+ z@b_BBO+8M~ZIwi<VUFn0QVf2eusEgPKS0Yi%hN*olqoc-5(n$7h6>iJ`UsEr_=7V6 zaIlUT@HJhvfFiV^%qg9~{sfdO%FNCEY#P<Xjx;L|xR2ib+^ObkjdGlmIJCoWSrYNp z<(irb>9MP)NkP_l7P72jxr#3fn&KQP*Lm|Wd4)l+$*M@B;WBsLJ>0<7$ubNkTDLvv zjqfOFeDORCCc|X38bcG&*2Hl!H^a@=(C8dSVK}vfN+Uk^e;ZkI`N3umLIDA>qx~Nm zP5et=<obuT+sm2(%>JFX%Q*byWF42^$YT{NwU8ocC9}Df%qm|fcxPF0$Z6j<<e5lq zFO%8M(W+u$D>p(`7#*alR`UYtUMjsV3RN;B_N~z*7|D1Pq|q#J?Yp34h>HbzY`>Us zNyn3q#mr&XQx41S=fm+T(2NOt1X36XXONMAc#z|!p(=g)5i`aRZaZx$AR*n!Dk;HH zSX%1EZ6Q8|Py_1H)I3R0CFD_5%YcJzTX#uXZGY!5d=FottgLK1C%xq2J_Jn<Y&C_f zLkl}!MrvN<dY1GAW&AfdbkBMASP4s7ef%^zbK1_VIr=nfXd&vrZ?%g!3>qshes%{O zF+PC-UF!Fr&t{;rulTj1zw8@v>+5Quf@^yQ7$+cfETDVmi}YDXp>h*f`sT$D(kXXQ zLP&lW(U(=*Ob%$yrO61RP@Oa{6q%!uxu*~`De6*)E}D@L9(q$@GZj~553?b&z!Mq6 zc2BKINJYa(%L!uQ{uF*`HN3o(OmSGwKh&wMgN9`Z-Sg?NJ{mGrGXM4N5dkcvBP5`& z;s{|Ryt;^3_bsRb1l<=#f51wh46Qp77RC!%{kqE4AJz)og3JeZ5r#Q~=>Bsy8A%w@ zlV!4+*y2;fOl2RI0h-SN<9X|BK$hn_1v44q=^{0H;V$vLD9Zd-T|R@xTui%F7nx&H z7weFnGuG%e+`u<p8e9bY7@llL%)?^2_UxNR@^`%AJo0zmL(Hserx6DBebg8Q_I;J> zvFKD^I#{C%i`<^o4XL!gjSd)RG|kgdE`3O>ZL{-(9tB@GWxX!PN`wBMd#pS?fZ7wi zkM%D7yR`wRT^CdZJeWWm$|!&@lwCiZQ%wLwcN(F4<~}U*9x55@I3%5M3`5Ty=98=& zPBW=wswqIjv7h{4;yXOkWc)HdU>hFqK+kE}QsuG`l?|^g#1K9=ZB9Sf7&?$UC~0M7 z2N7e1fSZsXaP&O%#I`OG=hzfiG)2-+0pDzp3as4?sndM{2!6{dECWdB9N1m>{@iTk zmpFZ#_O!)vD_9M)z*{pPG&<oW8uc_Je6#bZjXOu}<gk|18hGGdGPmn0LG846vLbH{ zol}WmKN`6)1ETMqZMoR+Q$ALxZS9z9iF28ZcNs=$kASYbA%&4FjG|dPs{918@);C) z$Dh4^${3E%7*xm@odrPtFhu@wK<zh(;wOROzlZZV1b@4yXFVv#4HnDYAiF)Lgb0>9 z0wb1Cen&aS7{wZ<CcV!-Z5+$0Dj6=MmeCwZy*>Qqiiqn<n0+6BtL>g+{FJolMDSAX zgv0Lu59BDXw-Gpbmv{b*e+JKcRCWlh*ovf%{Z`r=I9S7F`9cry><RzIf5i0_Ve!Dv z@f93g!mH)3d|;HIkNE}hSFS;CH|j<HLxqtb{|_xe|5L8{FH}r@(*;!x>nnGQT?&)3 zM@R;l(sHqc480>5syQH)RaF}X4Xtf@!CvaSSre5VI&f<C6Sk{pSR(&;wn|8vkU3Vq zX&Cmd@6X{IhHJTxTsdh6?20B9i`kbMkKU^%y;;xOS%!F^?x@*d%|Jfj?vNhmHHvVK zV9S0T=T?C+BJ%JRpaaf52^}PdLqp_^`TfyCAZ(ss&KMGyxYv1fQKmR507Zmy4pafo z)k`7xd@O+{G4hbpFK2gU>kG9x3Qsuj4;Xo9Fx$J7Ja%zcnF4xq?H(mMJBr$hRJl!Y z>G+MbItd=mW~<g(o!=S!B|4j6-K~7Q1+Wnqz`NKcqD?3u)%g^A4TD3)QE77!w#hK7 zyz%}TanX=Io3YJCS4d+aKVuyUB!3on*QxX^nvz@oF3Lz;Ib2t5vv;%HmQt2BHjhs` zU!oPMyAzGywlD=7xD(tc)50FjoDhurrif7${a_QU&01ONT@2az_CSygm)8thSTd(? zC>WJ!OhuV|(VCmtRz54qOiD1xdLdN?m`PyS`dtXQ(Y#+$nOON9Xbm9~6U~4Xz9C>E zN&ZY-MS0THRU6y4F?&^(hvAOA((P<Kv#fbDE%9=jJu}9M?)X`Wkl3-!{6V=Eje6dL zQwr0Tqe(r!cQpZ_KI3q{MY%Z&DT!L$I5mn5pfyZWp_ZVW7*+r}K*hgV1W~Ql9VU*R zJy&5UIBdm8^kL<4e98BweE`EuZEK1SSH&4jL{8N9IFzjhXCm7FM$O-+6?p7&;lQjy z#d6Uef83~k@T}O+6$sDpxV-OUYX02a45TK_SAXEvK)q!}Qn?ot6@T3bBZu<<O<&a> zGD%&xS0y<36_pgFaFZ!$*$Yjp$jd_qO-(9O?w)r%F;|X#*}Vv8H4B@2+>fa(Z#Och z>f}x54#T!H*;$(+(34^EmWE9*vl~}SGM*H1agh(I@pK|IG`EZtRjDhn7IB$$q#yo` zmnjt6(d!zwv%Q{7kvmaO*)8JRnn^Ns2|XKCO1z}JmZ!!L(<<mzD4#{+NmT@BHT?O* zkGq<TrD==P$`;e6Sz{KQQKJ~VhmIkdU}Siu6c=`%VQK$8<-8eh1Q5o6M~ofht6diS z(j@Z;Gastf&8u-;^>A$h>S$gAIGNSodtXP$5kSRv!yD9v?-zqn#P3B!j*A&YuOkfS z*<wUc;A95A;`H%ozY-2HLHEJ4@gxobGNUbtQNE-V;S+E?9uo##0hy6CMxK!^a^zx( z9F((0i(OP4>rs3r@X1qp9z<0fIU3-IVy1s*>Trx5z{N&=&m*b|%r{9fA;B=jpIASr zYRJ2XUuuu+Y~>uI9y0(>RY-J0$WtUJPM~877q%s*=CI<xM{8@?vjCG0LZw78F-p?q za^SQij^9T&@$9vR{6z<Hyz38J^^QqXyq3aIE}XSE5lW%_1yqIG_T@`E+`OU?mAUaO zm3Q+ql_8^+m)Xn{(+*^_kdWsY&kK}nE%bOzZZg}_jfKv3zb*f&0*iZof*xA}#Ewx? zYX6(8t07ppW7<_!G-nWlBbvcJmi_euEB2&3+I;$1#eAQ!muoI+X}0I?^7Xs;Xuj|c z6&FKi>vfK>gLnuk%NJ!<xi`Z}RnBsqw<c%5#z@V_0q-C!HU0);>?6{!#5P&<RdLA! zk#zjZu7novE$%zK?7?kVqi~dVIetAuWkz4pRimKS7jPO(%<|~4dOWX$++?}D-Gi#v z0ZV`T8HHlUyv}706ZQ{hhe1%)j>csPI2meRR894$Q^G>^S3j|q5Y^vQ4g1)mx6-?+ ziVlpfh84O#QxNlmuJVi(ojxNA9lmgZ{f<v26iILwKq3Gf3d6*t{q*A=zA+syC_?A% zp*j72F5N-T_W;=T>CIb&tMRU_%sw;TgG*H1;j8ZV&%SiP#PwHX{SBtVd#pnU;%=1K zvwTgT8!|C-Cfcah;|JxSd0J{TPPC@trrCUiBtMmIk^IiQY?w{^O!JmdZ<lCuG7HCp zd1e_;2C+hBPS<)t_fpFal?)+QHl6~j3GNqJj+)A$`YG-4mmb)^%w93SAqJ!WB~OF< zznH!Lt6KiQi_~PA!eY!pC!PsvHeZ1!*&o?MLLek1@kLBhMycd_W>l;t;wGE@!56Sl z5Z{6P&<;A!KvSxui#RDppYptY>vIi$_`icS1lFS9@wzev52IWjCdv$&M5obKacjCa z92lk+TE>ZK>se^pQ*FZvTN&g33S=#s1uf=6M6g^tDc8oTYa8G1NEqlgtXO9DT-t;S z#a}*#J5Eb@-!9nQfBkkoG&I$wiZ*hg2>ZrI49iXi!3c0DJ@TSJSWH1}$|5s#3r?D% z$O=)nu1&sn!5S(&2lviJCCI#Z{Xzp}VNZod4HYeAJ@Hcn#lPVgDC2nYXl6STrSYaK z)+`l%bnoC&*Mnq3bW`PRZ$Ir985BXaApoiIULq9EZV;Po{s!UC%R&8xw%RHgs`P4R z8j=JjgI%O((sinefI_W5{W!%!-8i+cWZWEVp$Zp`g_GH7Xjd6f$|!Zv#D}f4zoTF& z;a(dVn|(oPqUxW3N01rfOoKRhaTgLE=5g5c+w7GB2;=wI)La=&;7jiXZf*%LAAxyf zkGLf)S0`}W{5!<TbKI83>qMcfNuq5){B<}1Mpwol{F<E)YHH#DjdC-L-yvR&Rk+I$ zgW@xD*&@NID!rWqH^%k=$TZ7VUKQXNWY}p~K?VJ;ou&ClwD&#zoWKEa9cmWEO#ksi z$XfaE!rx8}RoPmEa3DZHrvE5i``-o`^M5FrNSM$*jYs8qc&zPu>O5+-X*lbie;!1) zHz=a3`lw{co5ac{CrK^mm+pc4TtlA6qbO8Gv@@V`Qg9i}csSF)JiWey>|tWuIbJV{ zFp%@cm@EvZL|b99z-hS<CEaol8q57QN0LT86Z9xSrX#?b_H>jzO)#)AYTqFqa3Bg@ zH?L4tW>S~O%E4dWg9BwFdhsh)J9*`-84W?Rp@un3R)n?j4~UbC1cv)Gpz7F({7cD1 zTkhG=EhNR=X+i?8rf!|Sul6UdY#|^YWC*Z3AKV>?ci4r;hlcUiC8~-^J|#3~_ErsT z(&QqqCMeY-6Q=p>=~V}ZyAd(D2t8?^DT_rvWKwZO_PvFd##xu{TIW^Q-dgVk4ihA* zq>>A(_$N&?C6Tj;R2o&BW34%sT83yp()6wUF=`YW+!iQKiN*&>?jdv8$6F&b^n8J; z`3q0#&JL5wF@CGuCq8yrAbwzl;9DY--F`=AAN%gnamu$w!rZp|Y+>-+f%u6ODKf^$ zjP?69-nb?@Hkm#F4cg_p_j|~U`JKaGxL?QjZsh|50fB@5|AG6zE7&&WahZ_#$Yt2q z>B+z>Cu_Haaf601Hrj~wkt9<=Bm)3X^!AJ!Yl*8m&$QI&34lG&XUZYY0+{|u?X1QV zzzl%C*T207v>~jNnpYMAYe+Q!TJ|mD=4O4AR%AVIqUI*nsIpd$;$WhToVnxscN$`w zkcc=*{0JA4T1J7$2BOsFY`AH2qLEvs;I>i)ut7&1>c(^r6Qejl4vMnFSxEWlmZXJ1 zaGuN`-1iwuL)N7|)1ZZWF+3Y?a+B_5FNtH>(l;&M5#yEXxaa+R$Wdh4`X9xJz0|E! zUot4(6i>*Jc@~_+^&xcJY^8m4$SP+_PS0Vys}y`_L#~yem4=NYAjB*EL!C`3dgLRx zwL)IIEa1@}n|(beIguhS=S(ZAzK)q_F`%XutvjjIjO}VKfAUSudtjG*ruSR3X;6L? z0Vh#|2=C7ShFnL0)~3-gti^?UzjzBNi4@B+iEv#LfCR)Nw@0opN$b-OaBE%GExbay z$1WVx_`L@ic>at}1cbyChamcX#Xm2Nl1r{io`!e=w9SN1CYB}s0)F`S20_6e;357I z`2T^%{5$afp=67d{}(0O%5+@a2-Y=Zm?1p^*9j$Zh@jwIpp#X4;&jdZ4EbMLw!LCu zbEF_r%r|8{S2Yd%A5V}#@mSQRFsmV=SxL~v<AakcK3IA<8oyQ_(p<ho$MSwS?|ABT zXd59tS6P#ubj0Ruav15~mTS&3$J&SD4wNJb<DSUOFK{~SYQ241Iyvo{o{@nP5c1#0 zo2+4Vn`Se5ZiCwY{F)^@QQNmYf7D50?ES_|hNK-K0$mtOdR^T|T((~{up<ol5rAFP z8LhwZ@wX2O*-&2b%%5}M`$tjR{~!qYx0CueuJ@*aW`^Yl;qGCGCv;O6SWwgeYaiw* zRGQFSgC4_%Iyu?E(>KQ4G&2*l_F??g>}_>SM%|SslB*f#BtM#ep7R;=nQ;1I9*%Ar zXva16<hR?Me$wN2w<_@C3)m3WPkk=pkXfFRa-dR~RWNzJwl9BsXz1)2<kv6cO?{yU z=!pa;?SA3=XgT4LfFLo(;Sm&7Wg<6oVD`bZL=;?!e&-T&IO7U53ntpboFKMe={GS! z(!4b6v#EQYjlBhXV%?;NW<<|XF&bt$8V$%FFxEF&F{|iHhbe2_M2B+N4&wlwpn8hm zYbZ;gWtE$D&~&K_Dky21t@Ab++6N8G_1Q|JD=om#HY91=xGS<0M&TFDzp+5Q05F5} z(8tNnwN7-uHC4Nb;^8`|#==L%gq9nVoNUH;Gec2xWU5pMzr#zkaX{%$(4V*Bjp9gB zC_HjX!9cp>mhCqy%53XeZ`8J50@n)+2sS$@AQFdFwv|J6y1g~5<nBp{4MkZ+l4RLM z^mzPod4(IPY(>fm`Nc71x{=sWDJY0i6ly#>xKcS<qrb>mzB$i7y>h4|;o`a~<u9Fp zatfQ4q*z6k9J!CcBHkh5mbkc4fFW;b?$BQR)=c1X3!Fiw_P`QKCOM@!n8UpQed@H( ziXE#Z6(~uZ<g<Un>j*cw<-uM?0Zz1rpE$%@CKLV|qnST9+ufz_ekzr#KZ-htCL^Qy zO|khwNjm=S2rF7f)ry<S$Rtnk$ivYwkDk-GB*qqVOk37aetHooPtaz{Me#99Vql@O z8!1JXv!c`VyB>g`Wx-u`*C7ImHZQATS~xlie{GzYfwccgDqzoFV)$cCy+AQJ>SB$2 zNZYKt`T&H!%5p#*{c7JgH8@S116{LHcoLHOu}DtX664Trr7yrt-r*b3Q(+Y3b-`c6 zF-qaOGHTW_MT)YUT1|Jr3_bs_B8EZLCz6J_uBtuk3`Kow97+zy{A#B;G2*P|Ez8rX z>KTTFx_5*lhif^OZkf7wI3fm@x_9uYW?-OGa9CuG!f5+lY<MOMGlip7?8uLjaZyM0 zJtCj9h9SW7u^p;TBrA8}B!J80Ji%>7D+_ngSa9ZeDmN=paiy9^MVM$rs5dj~q|Ak^ ze5Z=dldOEVde{wQYliD1gEi5DR;iWNEq&eXB}J}<x+G26x*p@q!<JvO1KC$mp#kL# zp<ScwB5p=7egqiBL&;fqLf?{<wi6fH^MS>RuAi!zcK4Z=U5=bP$Jv#bu61a+gLcwE zb6@0~hyoMGkIS@++Q#J-Y^s+?Bj8YvBeJp4{^waHihj6qgQ+r~K-4WzL6=mcOom4X zYh{+vhN|Mm)|saw>;Bgd^Kt_y&pM!`>+FWa-8%kHr<zVQNV=i;yA8dzu4*``7+?PE z4j!Ri;yShdInI(ju&B<ULrQ|+_-2E-K&G)D3B^!d&o$o!kPgzXooK^G9F`!?e~#bQ zV4Mp@+f+-#>24skYV+xwQ0YvyP+?hPNsQZ$1QljerZPf^DZ+x4?f^I70P}O)dFB|h z;=mLmJS`m4(I=eNMB*ioBSsVeJQSlz&CM{9mZT*@L`Vt+_S40oO^jAKCq@+Ios~4M zIVfW$513RFYT84^beG`Lz<jZ3?b;*FQ0$F7y&Ez%4Iyag`w4OEx?@)qO(1AkG~KW_ z!Q6274H~^bY$`tT=IB(-6;t~+qOAFc-nOJ5*syDg!)|LdBQ?cEiZ2S4xH0-nx}8@@ z24E#?G#r=pnhLGNvGaAtTXH+r`?J=@_gL>tF@qbkXRZoOVLP#tVBtp4^K?xp>r8&& zcGkj$0lEkg7gyZ!c!NOgIVGI;@%oF0zICXEJdh4}Ix^?9OWF&pY8%KLlc}=IV%u6i zhN{18DUS8xUZc0w+=|)1zj5GaO<AEwqp0eNE(2H56;DVvv!vs@UMeE!VzcbX6C^fn z;FbJ&v=Nn&OSvgErWQx%e+SBRO#?5<7PQ)c;ATe29aivg26`!Z^*=%+HY=LKG}yKf zigV@lNxK@+#dR14X^C+`u@QtgON)*hh+ZmB;5iZTMi%oTBjIet6}bP7iw*EzI5|~o za^UOHv&X!XKmKY2am8{ur5sSXd|9-`FvM5jP|@I2Jaw;oe(7o9?|T2+cpJ@PU_kc| zWkf*yr;^3^Ka?yt+dpN?)y>&n#l*q!-~1u})gfxLOiHJCS$o(9QCMeaxamObS`{s8 z;f)=^Nv1RLqU?u^5YpeGodeQ`rJvtm9Zn8=JO_QgeEfjh2dr=jI_Z|2@Cq>ZL<<_7 zC%6MI0fj5lWfP>gPQ3+dda%zN8<rk4iiB_$AUk@Gq9D1A?Dq)_C#L1rdCEjH#;G$Y z%VM7z_ghW+(7G`!*^*|u)}_<2i!w<wDC1OvqzYET^lju(O_;`$=EC$FHA}c~)oIoe zTJ|QLtD)ms!zq)(XvBgnqM*HfzrJvx?mfnJ@a|s%2nbcLO+e$U@frzDqFJ=u14e#< z9@N^lVSjuF#PN+ditPFSz;g|liF?LxS*5!vQ1;RM9_ROWi+}?wHiPn~JvjNt7U6%` zZ&bH(vHH)FQF&A)G`+>m=G;IK?NaTO?B-kyYW*sZpcV)wt2s(5;`#8x7{)bsM{crS zoOc*PxtRK_3NSYQ*FA~KGg;UoG@@y)?bVjm^|zdto4Y#>pu=`_aSCN3SHa{&gu!Ul z3~BLx$`LeECw<97<F0Rbn4zvxob;1p<L$&kE9nnzqu<HkFzLL>s#kNOa$9iOMr&}i zM%iP|LE3y+td)fgCu%ZhnnOfyDWNNqzzq7e*-1sC%%?LPRMX+Sg$%0Z7F3!iyh=+p z%jR^%^P8+!5DQh9&&-qKIH;(fIYNX6dQ6?<cITSVds>rvx|+>Xa>q&bjwa)*mdRD# zlA-nV*=Qz%Y;emDR(c$kaM9J{+Y4VP;*8R>d`Oee5HODeF4YqY@N<zTvmZR0ghRyW z$-@aX;k#_7vWnF7yqQP9_|Uh1sUZucha3T`!Kk-bFF#I6l0J;JR~ciin#xvW45dV! zWvDX+<5C-QmJ-KjQ^RB=F#<S!mEYQQzGf${wgxP-q02B3`KNpHZlr5A&!;7M3fx)F zHJNgPuyp&0uYut>2lwQ2ydR!Ix2#|ZYOcu1HpyD3$Oxu7)jSycFgM3N<n?4zlG2$i zhCi@cv;fbb0~;8mbRWohPfNU<Gd;<Tf)SZUmoP<3@~p)#{wR)Qfz%xtJ#<q!I-rUz z4A=ZyK@PB=0u_N}vtlYb&Zu%I=_QdwvEQvDTIDW4d4Jo1@n+2UNR(Wmr@*<b2OCeK z-+w!~`}wZqzx0FyzKZkUKyoxJDi{sUoR5^3@Wl*i;!OJtu}x<pyAyUWDD&g~adovv zO;ug$$7X4s35!q^jC`_b&KowVV;bSSpZ+cIlo1jc+&&Xwzsg4b{2PeWQ$;)=2ir6Q z)dKb>*0O|@xlanE6IkIsyUXi7=ID;yHM!HFeKva}zbH9O9_klfcFwm`C>Ec43f;8v z-M{V$lF_j90tgV$>ObxQ{|}_&U+;;K$$$9PnaT4Y1PP+$ghNT29V5fB+Sk<D*2vPb zKGLiwkhRMYAR=1q1M{XhwWV5-XDXQU@2=wZA&A9^#gQ4UG!fZOs8r``yKS(Y`Z&nZ zy;)NuFYF)+Q_}k#ZQ$8qPMp!;x-<o&&xUK)cx<kbrsUz4=DOAZT#X6Er6Q`N@)}-u zC!j*Wkfm_!iNQf;Ngyerxo`g-s?crgk0k&3m^q;T3+A9<<z?h-`tNf)WjO~_CL~{Z zcCDlgdo;_Jur%@nTk16Z1f&QV;K~IM$ST!?pQduB)@P~R@(3RqsoH9edr`mQg=097 z(a}=snpqA{PBL%qaz5T);rqzhtt<BOSf0)*4un9fHSccbM!7}os25siP%>Fq4}F=? z=ZC6TqtxsT7*#LwCN>qYR}QCQNDA$&iCN~=@yEt+sEYBKyG|7|hUN{ZYtL!IEVgB? zzvx$S838&=up&q_bh`=&VGHLGM$(crGvdVfP{mtb2wru35RBJ$wWaIQVtHNFt{CYK z4$6b6l@qCEnwK+KQlSJAgkf*atTy3V8ZQGFA|EE~Oe8Pr9qd7OH41p?2^?N2<{b-% z9t)Rdk?{zlB)mT>3TO5YVI)BH2>IfWd>5WjKA7(@njkKPGmWnOC2U|75|i>%$yZ;( z5jK0GU6d}l-O@gXpfRLw37G`um((oZ1C*P7g8_{t;~*6N0G6Kxq!yht(<dVid_rrs zI|V5NqHdLhbcuDyh_CU1we*L8v)UmzAXgiC74EXu=$R1Xl}`NwH3lv{<GdQ5f+zCO zJ=M*(JP9ys_aMxu56zu^V%R4?IYN5O7gdO9f;ZJmTW(f={JlZQ)p=$(^QUe&{UZ_o z-v!CP&fRiV&*W8vkUm@K_?q!#j*B3wgU~L(IRl`q69q(*$;ITpC0vi%Zlb5*JtpvN zhCP$>hecZ6ha>LEV8zZF<?z`JOhc`eurxL8`myk^Sp4|-yhZP$O;d4HY%Vet<BHXn zEpsAN@y!T3F&ycy3Fd-moBrrtKN*3l#hYTeueBl4cf)HoP?P?Jo*!Nah25=P(8gC6 zQ_r`pEPe?+i?q`e&VH;@m;GXLLbDBIRBf*$noxUj%l@P-{;Dq*7KS9%L^AjeH~9Q= zgwacy$~p;G<OuvucE^{i=M+rTh{6gk;x9*iQ`Dk?>6N?cdkeP|1o6btp60&oMt*LG z)yL=*xaQ(onAZwdYNSc)TJ)xC=gn}|Rb)hM!MAKeRd@SADPnHRY*C<E?OPXGwC!pl z@j6{)9R(VsVKsW<wjcheP4NQNh0*LP!khlc{UI?fuk+0_uQH4<MA@z$rU{i5pVzf9 zKnzoZX^%KICfd(b5AGl_dK7R_a9|9rP}z@32^Bl`JDPDS$KR1mQ5-J=UT0E}#Z;cB zjGhe|&gA5va^0bXxaIn4rWRXnxe9GI&ac~WGu=nd4yJO=#{cl;3OKIJB%0cZnO5vr zPTK34p+8CotMsWTy^JFiz;4q8olq7go~12|C>!$`j77Y}s5RLvpFlvJir6om93GKc zhJeiAD}3M^(ksp^Wx2;wm+VU74aLC-@>aSfS~s~&UPiFcu>je?9EtT7k>@d%fX(19 z&Kx#PG6Q!&>aS=o5P7IE#J9_}d)&H0w-tAA>=<67X&P%x%bh)_7o#%8d5e4oc9|$Y zC!^Je{$1R%JYJptoM+>u)bit7=Ih^oEpQJp8w38Ndb@v2_5ZuDX8E_Uwo^bALh@_v zd9?Kwr0WF|Mx)fOqZ`dG3aY5gVg+UkG`x>qZ^h+wK2PkTBl-mYk^RgfTO%&;w|ab? z28>Evo1r6feSO{2+x+RI{z?F7YTpTlDupd`erVp5J(l$+bH=DJju@?ZLcblVhb(Po z`(y(Dp8n1u+kPk<s7=><0FT_U*9`ZrfqBDy>&A(6q+nM2Xu>*N2w+`(&QDDmS(TR{ zEC`R&#;@VRv9h}lI!n33dqBzb>X%6UmItrp(HExzFf(^wAa3UbBGxNSuj+xK9X`#^ zE=RyC+>2}#KF8E7vuvKfc6NRHf?72kA&lOdM{~t!kT-*cS9E{HGkoE`Qz>9)t2)v! zd6jqJXyu*zsTHty`jEIVcgzxCR2A(AyA&u21~jN#sFyo>+<I5kN^@%cQd71u50Xoy z!kx)dwzTC-043G+`!(*2t?D}w!g#lI@nXufB5RxlL(e`(a3|pBDGG!<O3u8z)Sc=I zpMdM}W2YjI-{6ohEJuUwK1`i<!<<DSAs1|LyR8uv4LO0P=5SPKIG{vs)QX_f5>lkK z2`+41-^hgWi4_a(@MMFf`;&tom%8Bd{Ul}>HtR7rD2=@M5?X$lbQdL#h^XnN4b7_? z6#wuptWRp5Ml2pU##Y?~8i|6FL_R`1C!oxNUi=FwY}_lPgrZp<iLf!6j<IV=c#6Ia zsVzJf1MZCmCBKMeHG;g5VHitXs<l~`V8jvswQLT6=jo&H**yCF1G~{dk~yI-O7uYc z4*aJCT#_l8jEP+`EOZXoc>gzlRV3U|%51^N<Klp5yK)KO7S_OV%1Gv0(qUpN7!Kt4 z5}hTm;3MH9PaJlqV1jEDdhy6nCc$c2HhPhFW#u0a^G~>c1--DLa9G}-phx&eH;I3+ zO#V+nFXCYDY6fuqFRUOmt_J~F2rYE>p=t8f7d$d(M3E{5B{GB(>S0e@e57V-CJMkB z3VE$)oGvW9kMWe}^OEF!8Gi;Zh=@)IPDm#FSwega^|4~gprCAN<!;=%b2kF-H~t)J zT;7~9aahnp3U<fXic3H>9kMaNT)!l?VMn3nn*zN(cNxMeuVZ9#xD*&F!+PVCJvhh7 z-({vv-W+nuK^Y%w#IwX4#Yw#MqZ%2<{|5j}7~;2LT!I+A6!ww9rbxmTP~~CqpK9>e z8DRla_VxWa0os4$O8;Q|^`Fk@KS^o+b+D?eWAm5uoxFW^iA`~%cJ%{_-61)fo)4Sy zT!3PvvSr1u%@XW|`Dxn>S<w$Q^b%ljLf>nNNDKC8^iAGp=gSkHT`m>@f8P&;J)+i0 z&4CM)iT1-nb#V-j==PI)apY`zEf4u^k-b8pF^M7u65*CN^=?cf(tF0OHu2v^*^2xq z$$9UF`58okJ4i6`sp{_G4Fs+xEO4Q%iO|!kI&4Ws41N@DT~2~yZU=#+s-4o4>5EDR zS$V%C7W#+6iMf%)xdh;Uo+oA@rFn@@@EO&zX6;>B)5%ewBu5^Z0ub_!U+36*l=DNd zZQqw?k9r!Pv4)KWHFd^P6`OB-^aiBoIG>>2ZkF&SEGCp{a|Z0Xv<Wet#>3-bLzexs z^X1i86GoO<U;MK9TdxCRCHU<Pw?(4oUh8Y2TEHK20jyCiG-RfrPhj9o1Txc`Z9z>s zxq7U}8~Sig($H+}@nEKc_HM0ElNBY%y-<_X-aO|PnwVKSEORHM{+VW6k(b2rCz?iQ zr`<3bj_{H-Y`Q1dN0%voXu0h-TR)+nkf*x|zI-BeSpxevc*bfEIea3C%h1xJGrXUm zom0C6zXk?jSsT-V-tH2q93ePRJz=Y%rTo0NESyXK<_||utu32>;zs`;dnNw=ud(yr z+=X(L*QG(3(D*XxP0HP>ZMF;cMATfb<+cQ2f)rI7RKbuJtmfvelowRz>KDp`f(Z8{ zB022(!7*78J@`(xj*?E&!zqBOGwu@lGNPdo5uEAEbY)pcIYh9t?7}pS3I~uFs<I5R zXhW6H+fLOAC%bW!$aIu}<EeGS*{{$Ke-hg=$E3F)g>PXMmcn~jcN?XckDW_VxiTG0 zmwnsvlKSnEFN11j&{hI{Hoy_`ME9Gs`?!<+t7Qp7k995x7pGJAS-7mGE@VrSQt#I0 zQbITH4RToq8H>0R-Vc>Z-(<{J#`HQ)RR+?SqxlNQr)w@sZR#8J>M$Jq*CH&|!WDBh z^JK&0E*T?QZy|<SPaVJT-4A)Aj2EM1^dsbQM3Z<>b4<b3c;<Xwl6+0u;BAi$s_*0S zH)sUwvX}v^5Mzt{OiLsVMB;#N4^Stjm9cBv6oE}~eE`fQ)P{M+?@Jzx3;pp$`95hy zoJK559%Bl`4={hh8$GWK<MIdI%YR&NV)$Rd`(LLi%5pL!LP);3F)ZeIv7NX-1lX$~ zWA`X&&xuaSzJV1HqyTOfq;Tx4yi3YaO}|pp_11y~`UuI?6@vN^=VW?Lt2FAXI^S-7 ze}M+*)r4L*U=hcc0?`1ggT5PHKb53C1`z#dTsOV8mXcsZ!&Qzxyp)s4VA)Yd%d{u8 ztIOJw^dJD^^CnXXE1*)bLLEd}Zow!k17yKS+p?j!V7u6*M#^dEc#;^~ghb4a<xC1} zxvoIAsD&lwxnTP_u-19Tk4BwMK9{)BZM44fD_@0os#iTn?5c0yPjw3IDp^hH*oTza zuJtBWsjT8VN!)Xrp*cXOcBUGfF{SWl47x!pB-dF*i~O!D;M6tSY$SPxB1U7v+@l!$ zna&VkbZf^EmODFX6WMw&(_10i4WA;gd_8eb#XAQ(Cozt?0Anig8x56tAaO#V!Q0uH zGU1`g5S?hfLZJ_f9O}0?BNt`wx7Or)8Xf;cT=npfKK^3_=1>FQ6~TT_m5doxUmp^N zbkAL-qWv6>U@bu28Ed-LjD<V!VMtu=C^K=rVAUk$Td2if_#3*X)D{21ALJjeH_!hH ze+?^JQ<Fb0|E)yiD)mbb3Zms;niy|bvo1&NmF@}A;qXR;OEZ8AQ4(uv*KeB7FT0X# z))x35OI`0lJ}Vu_pp__6wZp#c;F|x0KOa5W<Ov|LO=}2XBUB?i1G`eSGSdmU*p@f9 zH~zznjsGy?SktZP%ToKx2Pk_U8B(HiN;(Ge;y_kCCQ0l_?sdfyJ|k8BuYkH9H51{M z`UO);*#$ObeHfe4`H+c@m4#-NKiQW&cWTWhlklXd*US861}>kx-yccAiX3HNC4U{d zwA$7<>{j-;f52dIkmrVy+OhFhu{h_a2FyUe&o<f*Ubf|vDy8s2!ZgBzNvD?wfHl*l z<HI9veF5er-t&7JO!I8F4Xu;Ln>mqSspCyU4Em!Z5=NF<N{4u;&d_N<o7kG*_1~UG z)LD~PG=DH*{=Zo{{1;6A)tghx+ec*?|10l^oC6*hhRiSoCIy5{iY_In?puUfi8cXD zD~2NUMT_VrSh5ZnTKI&Itw>oBs!u^~M1CX)s!n6nj9mj4$CIH;w)_c!y-T*gUH(P9 z-KF<TPluFD0abGRNuKvD&yUfkr|#<&e*-QULkRu{6AX8ZLI}k1V<Um|`iWy?{I2(F z<MOy|zvt^;NW5XA$G0Iq+ay+bctPcJrH3}$d5^_dJmH3%j}wCyN8c4joBY6T+@#)e z;y(OxLQmYf3l0MaO&S;Do17Hs!(Dv_<8J^;)-IZ(GPk8V67ht`04;q1W-ynVs5pHA z>gy_APdR#tXvybJw8yaSTRDN9p|+#-w&OF8BWKwK{M8#h{9RP69%3`BN#ioB5)|jI z0=Cv2*)lMYhscn`Dx3JyMRDzd5~`h@4HTJ{pL4Kq<DQE*X#qP}3ZtF|qfg*r%Vel! zjq}a3&o;D!J>5i^*40sDQ;(`@RV+p$JTcVC-Br%686=DgvOAWfX+zvG=;P?wE4a}n zXW(HRTS%Ko)u*h77izrUGCk~hkvUGFWos!zuA0SxYw6dmCG~GY8cUi?Y7@1Qbv9>` z6XD0xG`&q|(bKOU3(f1IQA4E44|mXZWdRk_=RqmIEJBtlTMMGAYqBpIMRk^)S<n@l zD<}ORsejk<ir%{oQ(eYcO1aluu|hLzN#=|f@iN><&DlUpr&Js#o-oPXq98rI{|F{p zHqVHI3N#cW04Ak#rY*EUhb2fmnp<J1+JM6*%mWlHuSt#`eb?@MgeV@KDz0XHqqas> zo^WH&zvcD0<(ydj9=9$S<^-HSZ|{l)ot%JvlE6N+nABvLWVxE$)px|(eO8|9Gn{N_ zTBe4TE1a(4Ib>c?KU-4Hu-&0PqQDJm?bFnMl<nTh*woa~zgB_tSQlTqaI4%NATx<Z z=kOvc5ndJOQpOt&&VVRKmfYc_OnRe(rBEuDx>pX?Sg$Zk2<PKl@5MeAMAkr=-vBc8 zTjx=A=oc<CTZ7j%oN2%YbuD*~8aCOiqRemGFy`n;m}@T@sw`OHTR5`T(G{GF7=`$# zCgI{<fB8Dn0eq$=vs|JkXR}Yv@xzZ)6m6Z`TOSPw%r4KRTWV4ZQ}$&L`ecW?5bdgC z&xwf46ag{=t|^_`m~3tnl%`2on6M!31L;bQhk$l7>FS}k&KR7}<MA2Q=tf3*p5tp; z){_ZuVBL^5(2VdGVBH9CVA_6VPj~Dtd5l`I#(VDNO^F=UW3n4W*LTJMkLzL}znFZm zYn2?RJ#F3cLkr+{yesFWUpnCH4BsJPl`GfCJ#qRNt|x)~LOnnMh~M)O&-FW@l|!FE ze+@x^s2cuG@$jQlRI;2m?Z;8AIR+?1y?zVe<VUN(LrVto3yueQrt_m<wAst{6c>d4 ziVO;<Nwfas50G1<EqoUdN;jX7A%tvzH-Or^Tf^xibdmt_AILwxjg0#N)}Z%#U*9gw z{TSkUz6;V$_yjGBmmr|y{<UWAfu~7lQIN~ORz$H^r+8=~*5d<rp~Cn~Qr-Zpqp|x^ z=3wXOGIXjTEiZ8yO))j1>0MrUe~_WZ?$~H}I>~i;giKEoVY}71vZC@nvA~q_bY{v{ zBjY|{e>mBV$jY-x;{KH=L7eH4apd{h4EF}d6Dmo6eP*mG_SsLIr;p;Gp;_NNowln{ zqwf1_nP@yVsE_jy<Jizc-$+C(Pw07Hs8ePKw`RbCRpWVec!37c`fb^Kl*Rx;9`0nZ zv>r6~@Zi(pzB0=YjGVDpq5KR__Q>Oj7Kq;RJE3#=c-q*BCDcj>cOB-P9TAnT&+8x` z(*Br?BffGQ{XRFGeI3W$PjR%yG<wxGbT;~7V!;bik3zu8CU3SBi35TMAgq|7Ki7;m zi8fHDeMfpkhw>NuuuqWNv=RT7IlYInXF7^YCf!dQWtrEcnheKgTx|j+osJ!OC6DWm z89XJjxC#^rRcLyNU^?qYI&1#Q(rqtIQLnx6?@!f-U3<gZT-U!4bo7{#uN~1EGu`?J z1q9_7x~KW(FeTy!QTZxnX=3p%2A(CY+-fo4t$ME6(jN<cLA~3v+POsg=KG@Y{gR{) zjz4p+dvY>g6N0-czlUVRKqQ{<Wg}3=Syo)pjOk<66+(*gyppEX7+K}iURl$A1-OL9 z-l<tOKd{+(q=h05%BgL?9g{nQiRc1Adxz&uu92Vm{GR+Ix|$-P8nPb+q}K>Xv3P~( z9+4i)o%a}ASSdwNA5cqhgR0elplgPxb%Mn=7l*Nj29RO!vVz0VtKO{o@3wv<kQA>a zD#a|vU|W^WwkjvP<dTWV9%YNV!uAy67lqPmb54bN&exEn^bgv!B)H?1_E475ll-cN z6OwH5L0<s4mB7ler=wt+dv7)M2sz9xhPo_S&3S_rZ&fT066tMxpQic9hOg1i0`8V9 zMOX~nR_%pMzGkL&1Y@~|F}YLYzF-@0M`P-aBW2s{`=|w|VEdEBN}+tRv1(DIn3ZVP z<$NCoHjRdl*wP9>D;`9Mm+Ef9pi9{ep|U*A3{QcmYtuua(8$yx!VM$aA8XeK%N|VS z!`hBzO8xL1{MPUE`eawCzt(wPf#R$RO$Dx7LJ-JKy{B%xx^Dbc*A3ZhKJ<7{^V1Sh zxMeE6DO*Il9n<7xu$>@f#Y;HPKIaZ%WYtS##{>)i*4<>l9xiz{l8n+Dg1||!S2n9Q zoJ6Px^LTncAss{Z(xxA6gz=ee?{KtFGN;cJp-3&~iedPT){Bs_jh|GLkf%>YVD!8C zpC`yY^t&yay<%D{=|ij~1xB)#F?YhZF*VvvshaZYG$S;7VhnDF@`P68_5_8<av9Ty zJL=E;BhjA8#4G2cE?ZMF4i`cDe1x&-@8V+$=oAV)6ZM~tqV1z<?k3V-(k}|cFZDT4 zV|Jw2Gk!V>9bK8VqjJ&+x2-Y$iedNSDnEGPtrZrU@+6y8@%mK}ot<aT@@gR;3ff?g z)h~amU%m_w5gG(##UxX0x|;8KYlRM?A--o1e2KLAgefiAbvp)@8KuoBQt)by_!iHl z3RPFC<A+tn-0ka{Tg!6AS8<E8bBVJze&`j)*c#7hgLg<_*Hz}SZUsZZI#*BVK;L2D z2F+4R2^+rq_t)cppR}sACku?1+B*{iPZrd$VvMy)02eh2qzp5N5v-)_S4AH3K^_P- zrac|z3{r|xXBq|$hT#swjoS~y=Ww?0T%F~1FcYGxtfkGEaJMxR;u~?|))f4fPE>K* zFTwxL+w}i%_Kv}oc3rz@C+XPcN;<Y}+fG(&+wAVxwr$(C-LdTzvvZ#B+2^aX_dZo` zowI+=Sv7u)c@NBSU)LO?pGyuecUc}DoRlEnY71sEZtSUYzJW9nZ=EBuC0lai*f^x^ z2W6p4r`bpf-e?M5abXkr<tocay;+&vB!bH346&Fd*5+B1VTQBdUTlQDSOc(J4g=nq zW&Xr+&!y>h4QP2cxqNNT36l5T6*|OuD6?Kyp1kp4X3b>d%WRVT^u(FhgIViUt1y_k zl32EXA3YmYQt?6<q&*TaZf?&)Sd<blX`w8G<d4W+zHDNUyV<xb5QYLaKLjd{q$%=< zgezU$0O)Pr&}NKKQU@vVPLqnKddyrWlG~){Mu!VfWrvrw$Tjlit0Y3(pi0`X@Q3hh zF`4~iYKIx-1G)<^-#wqYEL{Tb1US+<)f6{}M_f6#_D!71ojMM{pm!nKMxkDQIp@k= z(Q&rMAL}Pq0xpLPnmP|sZ_PG}Th~apzvCul;fO|>$w>^NA&wlNt^36gkT!^GPL~I` zw5$d(8?y%9Vp;em&dge}3v=ttB{0*>>H1=o3%Rf!ZqiT{U9>K$$fn9(?uFAcys?-+ z#n$*Z7szT-h+es`j$BwXrMUU?_82$nnl?U27AzF->3SSGPFI7Tx!C<fX?~tNC|;&z zD_Eyn=?q4#g<&=t(aKd@ZY6S8G{w9)im+9IJL$8b#}x}t$A~G;sjdfGvJpIJDW675 zu;`?4#~3W_z=<FS-ij%pFdQO)*Cz_UpakBcMqzfIrb%k!5)R7ML%R$mB8-$erk{!g zdg5t@cWaU6^hX;L1%k9~57+GWxl1Fe`n73Zx?H!EpmGrgi!Wc8F@^3}$pgPMpueg) z{<@UScULIuMzzx%vgHWmx%#1;fV@!2qs;oIO5P`5_=xUyjBReY1#Dik3Nb<Ehzz$_ z^$EbQ<c(Rl3y|QyY}S#rRAq#3-!cgQ{{zeF_8$Lin3?`NMc{uMi1uI4B+!I0_*Dh4 zPOa%zjAbkH?DVMWh8^te(B<W&l!)@=eRU0sBAH}c0`GJ_FqhfbtoJL!1t&Z$)+*?w zf(~c4cuzLDpQi?5a}9dHsEjE?w5!S;X(MEr*i4OKjOhcafPd7POB=f2f?=j$IMjeq zyH9M_yEP#`c-O2!t+qy!b|Jsw*DPQJT=24tN^If(HvB1fYPDWoR|`+g?pWS#)z#sD zAI{^eL&j||8@0<wiL?9T>Laoau)hv}R@;rPxKD}P^3V1tz6z5MX;Q|6V1(6<XK3Zg zlo3yQ?(AZ)n>RHi4~e7i;2*E!i<c(J)V&TTUK7k9wlW==>yj@JD-w0RDdGlisq#o! zYY|%{(11nF^SA!X{7)ga=yLJVUOgohL)4z<$+O>9H4qR3?Ku|5wR2@PYtPv>$&@Xd zjTE;4f{AsbBPnl?2T&K`3Q0r>PI?|Zh#iE3JH)%-A|^S|#(;V`#ag-H{EUd)>9hrL zAVUx54ufH_LaXglBcVjMaoC-foOfVJ7;uZFH!Rk>E1Jg|!>`c3;>PmkeN>P9!r4CU z&GQ9>ozt(Q_6hjYn-V}UW{Q0RDlEaY7=!xE(Owa6D8IhffD?N4Q>LQiG3J>iwxi2^ z=8sxJYLrb^{2^fvdZkyB;Jj&Gt_v~~VbvXcM3o<fA;?}djan9~jaB?BX6fd6K^su3 zh!PPBU37yJ4^{v%G(q$E%h4BT_WMREd*5}S9*m)C5wBP3_nhQU2bvFyDJCU<s0W=r z607gdMKp>B7*dN+XY|IYe^ZmrU-MZE+`ut6`{W%~F>6Q9{~dfJ4_vsi`KQo^{=Y#p zxPQ&|Pv-w>#<>5B8N0YTTiIK<n%Ozp8o8P={y)~=#XZUOKZ`N_Coy5yf7Zrsu4XD` z_NHde|4mf3i(y6z5JD0E`T?$@?e)D7tELz>IXXE!Jj<{j_IH)xO8=m?=Qm`t@3v7) z(~A1rvd549d|<XHZ!o@cFu&F6SG%TQ?uYZ|JgTD@Sl#5{6v%;p^J=kCTOf>g@Z|>E zD(oiSH<^rD5<@7PZ^I{9by_Ysh^uHasr4f2&sUNMQY+^NDl}0_zIr{s2LwJ5q%sA- zyYkw@^xJTM{M)~~C_ZvK`ya*N{}(jje^;IHKdSEL>LC4(()O;J{}V;qPvgu*RUPB2 zyXx>UIVGiT6$>?}rFQOzjB@^R#E;=Q4frJWw{^aCp^Tx_KO(5glAEbc=}w|%E+LHP zWhRkSBnJarzH?4XP9HxQSl@&tKau-(yu9?#0usmDpL2X>|MF6Dd+ZG^e#6@H$81DJ zG_Hn2E+Ezo*C4hNSr6VMK2#tEh^)YB8w4SqCT)#KuNE1zwv_SNVm@&YdqCFft?D^5 zsU;QaNX16r$a!^$x_38Rprc_osE*bAKofp|j#op8qBJpIn4zMIzGj1p9{UAQ6e|El zbw{O2G?X%$ffgEz#ebg@wpuK}VXy>9yLgb~uwf>d1*1zea4s0>fJ_;OyUW3R<Q(`g z&zkmItUv{;b-cEN4IA!a04uXb@aodpx^>m`Hh|)MZQSWq)aa!EBrBzU^Od8x=C!mA z9QfqHc-vNyp}u@iwya*oR$gB#31;CqTKy)^+>RaaBI^1(_faZU+zD``sqmoY#Tpo- zlR!B3(9D(2+VD5T1}-x*OQG0>P@%e<K8aS+q%m>lNsVv3%gaXM$Yu4YyM$jj{{ow+ zk?`-<{)<^wJb2CKqDhH39lBV=MD{ble7z2Vci2_~8-=c_VhZ)DDeB=nNC-=AjV-)8 zX6e_mNlk>T|KK!)JI#d`NAF{S)*!p3soKG+O$(ig)VDGtq+{zgynD7O$z~{k8y=Qn zeuy`>L=c^b8;TX8$KZleAP|attb8`g8&gaoFdB@xNo(+j{Yo9aPuS!~8ykXAZHP~u z<e-3;JL40yQ*Ma)W}Z>AV@AE&7(Jdnx^v>KMqvC(N!4~(d=t6`*#TAK^k3J3x@jr@ zCGL=o4v!4}sXqgg5f*wnCxnvfNwFl&#dcLiQGBhx!{JD=CPhV8_8Zox+hK7g<_ZEx z0xGv;isdH>RhW8FqTqi2Ne#a-3x-Hp%f)lO{iEVjF3-_S+<YZnT&~Nwt1b(cvgn}y zCjJSVm`=P7!Ge;ZmsO2}=v(FFgc-VNOQkD%3md@|;s;J<L7tM8Z0V#iFrghzXHo5O zLwemYrcJ3zgevAuuQ)q6iR{?v4<7Lsl`m7Fj~5|VzamE^bng%UAk66mQ$U9UPNM5} za8T()jZ|%7<nx}Yg2;WIssU5fzDK!2zgrO^6-9SoiGvVq22-|B<xn+(1$lPt!dA0u z1){7YrM(z*`$Zkp1pqp=4M}5>A6avqCi4SKMj_92^Vhkq-C;*~78IRZ@Npa?Cs=nt z&2jGzoM2153;)(cPp#9A4VtVTM~ZJbAqL1oD!*`2w_My+eve1A=+FmERcm5ZI?2ls z>gXoQ3Wn>(TROFHKADhA^P#4|wC|7jxuD;7m+a*o51HtR8J!b1oSs$aG@7-ii_EMO z6-@mwy59U2CkG2+sg6iD1w*K}@MyC5IP)eC)_yDl_UKooD+#5fWxT?bk2>f!q=Z4# zJvg_-n}d$k&dm)iZmehJsd&F5>7eXW9qgQ7V7=q_#f}uBTdGmUze*tUoJ7&3CTvx% z@|wfEj7jd|`>8Kn-{HL>oqCVo3UBQ_*LDva>dVS|%6tZz>;Y$pJ$1EBFDPmZ=SEFt z#4@fSL)FI2TVwJ}K54|lAvEb7abbXwa~cCp4Lwyrs~Qy$i|CeSwEh=MqP~Q5u|Poj zl1P)HF-8IXC4N6<3<I^ORF1)>Iya#X?N`?~<oWl|{5{khLehOA%Kh9Q`?+KdxyB5+ z6bre;WI1Nx`iHtd!?iur<B5g>J(Fwo2jP=`VuscYSm_7*71sSK)J|uIatdK0ZqzOV zOvYP}&}hn7FciBdK0=a~*;Y6Qb#6~pzUnO9xyOWTNL<kfTgR;f?qsahXNkL%Jg{b^ zJM{a}1H_Gp`aeyY@d#=$7xAaZ3s@B-l$Lj&Ibh--pwBWQFWy3gxKN&YiN#@{C73EJ zL0oFBKSr7Fe@=i-gPd)J(jNFb1gEsUBdA}}4vyH~_t4$%a6_J{fw#D$b0-9%2960? zX1PDdk$6UT{?yhH?d*d2Mnb&A1i$AD^9=8Qq$LvmE$M*WKB0J7`8b|qw2EPA<tBr< zHs_MRYett27GudTyXXG;ooji(w{c|AGRbJ0YJfZGkac*1J9$GlN8}~Y+$K=%Wbr{@ zU}84RoD|-_ur`%p0@?|{D&?ksrj-4}mT6ZQ+?m=I<i=WYyy?IC`j=9i)gM&q3-#?A z5yF2;Z2vK*i~e&<b+DIoc5ri)b1*Xf@6491Caa1rjPjSFHrUJyoebs<O=^HNBH|7u z7zQW&*DosU$`sRI!={|q_89y=Pm-RX2z3n-6<|)&1X1x*+;>=50y%4+5}&t=v%lWv z{-1yE5c@FslJ~?@QMQsTMHDd^3N^z7U_a45SjfHy!Dtu?MFp~iFwu!gQGBT5lD1JC z@YqY?BvTK`<36^L8_5lD1zM;qvin3BO%btAUBy*wz_OaIm6SMa@TJR?aUfR{mfLu_ zt*{}oR%mnlY3D}OvTzKJ=CUY@w&pRAqvULFFR`Z>YuJswu3%hN5?OA&SEl&;6JK#4 zY#w~jFum?~mNcsf>sd9u{oM<k=0T8YoW-*-pP5aFy)?>OMLdUzuL3$XM`*O^!rX~G zX?6r2I5QnMwdDvTF%VO3za@wo(!)`+pUoWST){!nNg>nODh$O4@|kI}PXz9miE*zd z0EUoCOGs@%6f#mPp{{BdRfDXGMoY8_rLKq&GPa(fK)?tlN7_tU8R0K$cB;Bh=~#1p zotx=d8qc}2E-QTnzohH>3L5b|AxTrosz^=BQ%IZJ8w6^?MwXoZPcp{>8`;cGK8m_S zQeb6?if(M~#yXlktez2mFcjOX>?cJ8u(`zqEf`_BzRAjYi{W&5EGs!qe}dQclw+rH z5O%o%?(!vKQ;`l<ZVl2n$++6_;&fA9Cy78a5#hJXtdp2x@l}?M6M*}=%ric3HF!Vu zSS)Q_mEv3tOhu|H9D$N!BAYn`_2(Mf1cit1EZ*1eyOutlj?;0F$VZmpzDm3;aWy{D z8$`~o5Y{E>beML+U3@d1{Sv`z>+z=#%uSIp91?>09v7nJ?@%^uhJt8UuosyOu>+fv ztCn3#F63Qf&)5^=ZTD}j5IcL?d_hg|;=@W%$%riBU~epCcpiQs3Br$U8z)cgEM>UQ zFMNV~h~`R}!g}$q(C5g?y{HdfES6&hPG8l5elPbiS45>;;K8QQ*7M=+#->RX=>?p= zgxz5UvG%TlImEwk0z8HNYfm5TDT5+!Q%^7Q+99%k{_Ad~q4%Pw5Z}IGLj9+kH_3l; zH(Min3pXQ+|8xcC{{JNZKbXzp?nbt5|J6hKzp203%9H<+63!M^lx^%lpIU8cExT&p zIWhCY0+`MV3U(Q?LpaE%ljKTvE!vg(ga3<_;4zY2lho%&_MGK&GyX4b$>A<LmJgI5 zq&17M7GH|gGND?Hk9yibko30<A^f9(%h(`so{yPWzOUgKabYwSI&cA{5%T6cqCRD3 z$%9b5UD!fuWG19WsUqt$;duEsu+nKXju##}z-T-bs5_e2!_?YUds?yyZ-O2MpH9|H zG#AL6>m-tWAry?t-ihXpffS+TQTJOO8WIDLRCi>E&)amC8@eHA`Yq6<yqU=&LNY!K zM<by}-?sR!W8_xSKq6)DcJ{KVRVJVQ&leO_z6uF_M3?<d%i`^#2JCN-MWRJ?>0CGT z@djTe!?Mm^T0G>{!rU2B-0qApA%7$(mpDSRyL*iGu{kiB=@nM3d(3nSAK|CJ)YYzI zSZHGA5p-BolZL3Whc0D?xRn^>a_vdD2LELc;&3>)*8fGz1^-X+SN#9zgDM!=nQ8p9 zFjF$J`tKK^O8<pQqxfxPjEpR;0AmTiBcJzEc{Wn1U<9cI%iJWk1<_|l+j4v|Dh7o5 z{~{t+cuLDmP4{zf-|kA!-MOLvMN1%lYAiTJHI&~MlP>}nbz-xwR4{%xzMyS(r}NuT zv;amxxxd36(_o=_iU8Y3)hwwK{WK@LR?9-8=l;*0E^d2Sq}n>C3_I(5LzNvxt{Mad za=L1<mu=8^@>2t9Onsz(Sa_eG)qPOZB1d@_EM+9Jyu#ZW`w@#3Y!<`n--`NInF%-q zAeTRf#Cm#3MM834S$A09W3R>jcYpvf*WEVE%kYWNX`^Mz9u70l6AlbR&kq4VuUM1W zM9xh@pLnp5EK+k`oc(W~|NhOP4y6``{pai}|6@_d`G0cu|Kqf)fzZBc>MLKlK8fk6 z<FYUiU?F%S@Y1J#R6If7;@J|vNvIJdNaIME@0*G=8Vxo?)U8s%m7!oNi6O|K=xNo{ zbr>66F}Mp(TJ-l+?zB6|P#B>NUO&GdWj|m0ooxGDbAPE`XYze*{0;mTvd94cH%in= zD{?U6Lp{EfouJ;3EJr!o0@F(&{$%<kGx$bQ{QwePe`sggQ~Hr0a&*#DJYG}%p8e5P zm-$1K-9YmYQG8qNkY0S7;{X8PaS#VQ(SzR}6jZ+t!oAU%gC<G?<wN>8jYY-MotCby z?3=J3P+Ef&>9wL~_d$X$o8a(0N>v6Gtp?@CUlpab%R@V9plZlLP&O{5`n!*~|J-e1 z$Cv5IELN1N%U1xp^;E5O^3U?ppR{+GB)zP}R3Z^DtkUo$Ds+qr6s+m=V-(RxrCd3Q zbP+@MY(=!!-&x6laW-L!01Rmr1OR3|%>s1}kE%1DTYgQ1D{JDk+!lRWq$u9wF7Kn7 zZ8zI_^|jwpCi*!wc}jIERpNq&&5~xJTJ)RMl0hLD9^#T^oP-q~;tG{sAwo0@J6^%O zQgnzFn{FX0Ui6Y>l0+dpUg5k}^oSLkejzO08hb|BJXth_4V!o&D;tk0X{dxM`^17} zhQu14{2$8@30C%r`BS=RbE_nq629hkUk-T8wDLJQi_G#dx#6H7UyEj&n8u13^;6e( z81I<TgF7>IZW|lD=Abm7raGjNW6d8;?x{17=4;6Eo1eX6@s7Hl>d`}I2qyk?f}snE zu=mABkkJ)@`OnEyr!OBvi>*<%1v7EsW4yY8qFHw10{fJ*ZbEmJM07;%%`=0$*Aj!) zroz25Hg_r);>a$KJl`<G*T-IvK>P3Z$u4#E8kXLTi*ms6F=U9m+k1NOt9;@nVe3yg zBXwZsvmc&FZizY6tP!iJ*Q8z$QoDUDZEubD?@7&lU8P}ukbq|NpOe|A*Dl*G0jvIQ z%=U?{<SyuK-KPc?&1i2XiUg~OjI5C!*sa9^s=%WxF0RmQ8a_3!{^5c~Cm;YN|0Mu2 z@&%K&LDkYCCL@E!Bb~L*GHY@6U03NulNZkE&~u{Ve2K6*f=5xQBaOy`UQ`+$gu<eu zBT(m^y`#r&i}dURVSS-Bd0yo#k34gFtKKlOiK(rx*!~`i;mA-quD5sVQweKcTFde$ z?r1;*(vnjtgKXMmCFlXm9=)ndORstIz+-8pgO>k1T<PJf$3D?pgf7Gztpc0#J|(TG z|9-|8Uyh~{jwiTyRp*4(Mc#w<!_6J1!IW_iX5X|KS-tXfHNqRvdVmDDs23iUuq7eu zOrsvYacNhv&gubbM#%owC`HStK2X>!UL+7dUf>Q={&^`s-8xz^R}aDKMpNuE&8Ap- zf9lKOaB-byg5Q#P2A+Mq7|g?M^;^MAttL^HowiJ6lpzNhndUBzq!ZH%hu7;*2*cKP z9txP`vK4Xrbdyx+uv)PyyVt<QiO)$}axYKC2kM0bIU{j7x#OBmMhAgFu1mW}P7J@N zSSenI)Tp`b{J3PZ`5mqBg)2}*)(t2z=>`<WzHo*0a_vZBSUhtEj+@)xO%cTIsE-%i zt!tt{HKX%Je9C0k6jZ`?Q*iU^&)!)(=-J7H@skIwQuF8)Qd|Sl*k<)~t{zh9U6WI( z#DZJxOVoMvWdEG4R?@liZ{;oKVzevAXJTkqk4?LZcIM522YyPT<eBOhE&|_Jjrxcb z<BuLHQ7>FOg6)^jI6Cx7c`dtR{A30Y)v#3xjZ)HQ)`Ks_c%BNCN5LqX;yKP-DVcw9 zE@H9TEuYzUjLJQqH^~#*@Gghi0^&1a^nmX2)s<zA%rN@{6U%1;9R{V)7&#*)YJZmB zRIzwc>)z=OsPvophA*6o)ja){FLiB0F<MK<8O-!so>>GH>qUhN#MUGf@MaX~8sSSS zPvSo|seiiLUw<SNTwcDmLqawZur>k~xd6Oy@Gi34`p45V^yBG7w!>Tz=8nsTGvl)p z+5GgGyeeCm<x~8l@w}OtKxub<qnbi7eudoZT=fLiI7KPCnep8COuO6L?|d|zrENi_ z<BU}4<F##tT)eTWG1RSd%1P6ta^n5a^vmk%7jRYa>T#(jKf(yGW)G<tX42yw9*!&6 z$!3S|F^*@<Uk}-qnMyU<{F?m<tz{nD1CVvs%Ao0+Cx(Tz(kfOlXsn|sdt+V1^J;5G zjt(d*Nqc|vveg>8gFZ^S(<5Xf5ZcWY{KL_Ftm8>-QqXu`P)5PO|K%zQ8JR|=noY@_ zPVQ@Zou^o7h-^Hzn0Cbgah%YI&(b4t_%v%bpL&8rV+L^ZM04528d*ZU$a3*uSL{yd zp)2~}4Nl6Y{3(;Uj9T>Az)H5PqE%WdD$NEiia#XLJ$R*7>{=JG$(piT9#`enO`{;2 z&l-j%#Isg&?3~<H(xZ2@B<Qz4*m)R@av4;x{4Ol-Di??bze{>MbG;CI$~`RWH0-C* z`|BI?efSzuU1GDo7}4Hs)ZAPHkEKF9hiwIBKZvk;`3JYmJuIJfhjVLH@O6bV;RT%q zj{yBdkHT3vkk6WL4<Wa;CWMKvdJ7uG<a_K4AHcswkP%D1^1GxXbk>z<guqo{^zm~D zxc^C0|9lKp^`HEzbpZv2+-R1(yZ~94)Y-vg*F~17hu1I6nGCc{AZZ7?+%kjPr4po3 zOhq($CbIFVczu)crDufsGWEVIQWBPgihDAx5{#rCMOEQk8JdHV4zZ>wfSy|qz;0Ev z1yNWrb4%&o^NRs|D_DTB6#L6L;J%l0i>M=E=0ZZO__s2N^^(*0JdXC7_Eie^Zp^&J zneN4%#eMy3WehQQ4zPDo6^rYjS!atcGTlNM)T8Z%xe7+<Ao@tJkcR(78Xd|q`_qxd z>gSMBu5eUFad7-Pi+vQ0-ICE-xqXR{_TW8^IO0xpLWt}rhx-;#h6AIj{0CMUT1SyM zp{7f~=XqYPy9~-+{CL%;Z4BPgQO#YPA3O~V=2tYBf@CTH2R~+at!PCm=wPETm<meG zyA1K95VbV?=Rw`HaM?Jltgl<e`7L)U7H2rlUO_2fZV>vNBeFQ`*IIO|>S<NA`lG7e z(ZHA#ZlZh5zS0cq7ME6#+t`K_?_;F6NF&n7uJIq|Z4KGuzR~6&bHF)#p%0|P>g6+D zs2-*()NEwNZ?1t(z9WfWmaM+wghc^+oG3ru)FfcJhW#zp_LbaY<TE{1cDYX@n_pOA zE>I$I9sv-$@7}gd*ZB3}Hyn@C18w(SSvT2fKWVScy^&jwMVKh(82yN-vI&Eg#AwhG zbMiCN&#hpd`KN4ye9}uqOn8E!6@&;brG~_Eo)BCI(@!CxdvhnUHtP7>#(qfYLxm~s zz#BzRTmCAyVu=LNWZo<yj-LkxnmY>S#?F&wnEDv{V*nS)wv1Rp*itPio=@^fuLnQ* z(lcDqU8rV6xVcS`_ge<#9+@ooAY}#Cyao}&PB!#U+vS!5>!@k)<CxkB^)BnrT2`T4 z$GE^{M-HS&4r$2G_&pj3#&Lq{yPSmz;(Z&SoxQevwUoykWarQu*Gyf~90*-<0zp(} z^f{9(IitEK2VjG?x{Y;HymhQU8o8$YV7ulusTd=sOk>GA!!M7cEDVqTw9{!yvXtyI zYvQmrc)fb_JL39LLU^15x*~V^sXb$z_YSbG*h`<p@zL8@E;ABV2~%_8m#V=uQW_HT zyJ4d7XX}lwHjI;Mcu&@vHuGvOKxM`<GpwHH%C$f}k?O~aW%i}FL~A$rW(IY7owB3o zB#N41Hj2PXt7QpS#;s67_s9TI2=8?|#8b0aWQZZtNDI%X<;2I%xGMdpnaa@ZFo9y+ z_qe;Ffanza#ezNx7f$?6PWHJ2qg8@YoDu~NKit8QV8SvX2f6_vx)CtXTe2=sJa(># z$XhsHPxNL_WPc53fWRo)M_BO-<YZV~ma!wQwj;M&pG?C(&w0p2IktTsMpeo0wse-d zkdS>Wyl5ROaQi~(RUy^-cymMa>|pw&(a{IvP5G03Lg#&bV3?g+^p#qmH!$MeikvWS zc~v^IKJt1vun9g^1p?{Tp0HHnva~lZK4u@5CnRt>ubUR(DzrUzE6BYW>Pq6lY^!u# zKKgVN`BP`WSMu92q?{PaIsdDQp!F82k*SL;KC}|WC@@1Y)pQNq#yezs=@*!A6&a<D zam#=jvdwCNrcT-4=aYe_SoKSY%>D<*p>^QmI_kw$e_me#qLfZ-PQ1$6RLklpvzDR# zMI|R*qYh4w9{6IVTeJX@v9w?2n=Lb<RO=|TPzGwsn(YJUkH+-XD`-2O>U=k&xxdJg zx=eJCIYx5=ll9kLGmt+Iv^+4*Ji|@)m}C5Fog2KO3pbrYo&<3gYFUGJ499wck36w8 znW7wq1i6#5cZVK{0}s(JM@l_|ECi?K1Ogau!FvwZdW?2|PLlQ>pi<(#2=20eOm+7< zw!9=yy<nfcaIV252`7Z8AVmK_k0xc6Cys8Qjxmo9j-bksq5jQKBvw&`)D*xoU%ZrF zQ)1eYB3YY{0hH`M)i{^OFGsd3?P&^B$pm}tM~O4zcy_wPfVCU7eC#aakGaHZ7?p&) z6BWL7Kfc(JSb&naUrybjXJTQb;zgM)cL>qrl*{R(Xl)kr%=%qy8Tk@0gEsmnXcx#o zuzI#hz$<#0;%#cNijEk9G{0}=`>i>gm|$%`HZPH0AJG;(NglZy$%IK^cp{&G78%cF zl*52;7f2@r5yCtR6*xM?_nF~|$K0jHy%Xn$)6XZ1K*)MuBw-ui_Y<a<j$PlHzDrb< z5z+hm0UmP$8^!^<$%?Z3Rta>6#D?od8dOyCS*e%@|5i!sHI>1l2eIUyD{tVL5R6P< zG8Ae0!hH0BBl5%{AJca~E1b7QM}z`YK4%1p1uZov+ouG88yjk>V^mKBg$qLN0O(zA zQvr!jV$m^97{n$&svNUbJ10j_s@v5Mdgq@Q9VGzt7KvmPHG)_%>wPd9b&{A4Wy|ri z75PuWWr|<f67-A^k{89C=hZ6m2!K*9mZ&aXFV(3&)@2zC#*(1=Lc07)OX@A5NlW_Y zO@-7sD4?{?DO^P<?U}H9VYe$HAWz*jYU@nCBSvBF@qsw@B}nhWh7bhU64`0=`IKpe zMc*RcxAJ2>@utcm=W#Y5xv+Eg$)X*!XQl(pro_O!&lBwB!$_trrjUNW9akOVG$ts` z2PtygqfBGjaQ+#@Jc}*$l%69(#E{ISz9eel8i|h{Roo4ix88?gYzS&+b8o1lwSqf( z;)9fs?QpI<HN2c<t~TJZz8O{0IL}5HnMN3)M;NI_80o}~dS=0CWyWc}4}->u;$;eQ zH)f-J2`9*Ju;iRLL!~R|ZVRgfnPojN7WyGfjMk+jeo?H)PP@jzhf+Eb@dt;tp;+dL z>cS9=5Wmsp6qkZ%0R1`-2;0RLAXNU)n=`KuF-ElcNrGB~z10sq@_DC}XTbUBEv}G* z6Wh<sk%dl#x#tWpGY=dpk9+PwMGAyr)n5tyPw?V#FDr)qjSEx<Y+w(2Hs1`yef4Jk zDD-UaK9@Mgoe`o|tq!4+A|b(HC$170grxg4P4lIv=fbf*+h%&fvDU(~K3iwLBAC~} zus+*ozRH>BpqO7Tax@ld|7aTKSVpbRNkqT^a{E>x6yDMbl>Zhm#PA<-5U{}T?}zz7 zD}TU*TKt0}ytB*46At;nzxe=R9VV;$7B0Fst0ms+DE*EfI<Vt}?{k+OaDoB;3?D8j zhJY6o0zrZl8Vorb=}Caj6BGIULzQeF!f4o{0KEq*8&oJY;!prDJ)evw#wmlwUmkfX z-Yw>E&iJMjB9*^az_=z(Baa0^EsIdlD2A6!54FhcOUG|us#H8yByP;L95LS{7L_j> zoUIYz<XViQ_$M5;NkQ)L2WL61GZ7LgXHGo+thW{c`%rMi&MJZr`Ue`xg$(_~+09j0 z<Ief+;}g-Q2UM<(eq~{k&OfQmL^nQ^PiG1h!)crVy~43^5W0S7Y)GIvDfUy_9ljAr zILaoXDqfYXf@-6SnmE1WYB<TzJbXRqO8O&XK|OqKeT_D^(HJJ8QZ1dF0EGlzBR<-c z8PGkfeM)O?6gM`k6d%f5@a;exbp~VDQ=JQxqSfa}Gb%X{>>!TmkGA}x=Q&1ZjU$1r zOr$JZZcH7GMQfSWmPYJKEqcn5LBUY!>%=a43P*#bsZ!n+F)_@3h*g;(Y>JHC2NuT0 zB*w!c){?7_)YKFY(Y~;|&YlM50nKW-v)g<pI2P0oEHCBnPcbB;sEIURMYju=bX-a) z6B(G2!{6X8B!nK=<7yyeEnk#rJKpC?ODsP&{ENSlsW+`$M4Iw@@qA1Oc!iR{GM-{8 zwMI;5h9+x;B)gWBR7knUad$On+pAXNZVy*@0WD`vyB$PUkC#0(eM+*@N3l{+sue1* zk5v@G%Oq4K8M68--k6jkjCT*k!zh0h4!N|2#|fDM^?6^W9<g%ReUs*Tkito@B^<g= z^0H5$9vym^fsgcQ9}+}W*!X+?6=xee`bCDIPueLCVvG2L1POh}V4N<eM9e8DVVHGE zk586*pL+shc9F^{X(R&MvcNOGB%*hb4ul5XZbERVZywY$Abd@vMz2rV>lv65;lVYQ zomV;Z?i%<KWRFI)FuhOOq3$cEGgR6n@4JF9?IQ|?{Ep*sF1p!eS<XY@`(sWAhldeI zjD#K~v8L~jOie!q*8oMDb=G{3A@o-S-~-?N)?r@MceFxqeE!G>0bS6r=>_#*NHLA% z@AUZ>r1rk%Vc5@nv5ycHkWb?k-$bd039s(scbZsc<zCu^Jr??ddkf|LdyA_!$xf1; z<<_*?YUaHcUyaB^0UKxjJJLn@KgTIBAWreE+c89@(Irv|1$!?AYjQMvBE?RSc9G<& zQluIz1$j_ZuzJS4{0OP|`6_K^q4HCoY6E3XYWHoxWn`);P0Xafr{vRUsPi|0R0vQr zLC}pUo_~Cxbn4lXFjBF-Gs0sWX?ZGv_~)S|9?j?i6?aX#@N+Q83wLK(c+;Oofb`eP z=<P*t(rwLx(Vm|Cp`QG)UiNsWb6#rJ4DX~!MOFw~dbF}L)W~G|bdh&dqQN(Fg=^K^ zZ37dfW|T=n-l3VdpAu($sU`-5E?LgU?OdMw$~mP1^ks@mk)+kO*7Q1L<PH+Xw@$lQ z0^X*k6?P}kOSkVf@?2$_28~gvkivjwc*qu<;yN(ffKQ{~*QHTD?J23W=ox2*jtQ4J z)fD4jUEf3xeHnbQ@`O^1TIfc-7J^yMMvU8GG{=V9^fipC9}cjzL!+HxuM=qN^z@?u zcW8W6n#Q?ZSno&6Tt902iQ6OcT><(je>hb?{Mn!|Z;Y7A$X?B5tD#jLnhuUK@){DC z>l12!`@XVX9^ZzB9m1GNzJsH^vab^eyrjn%7EA!sMWbd(WzvHmrQkCi4Hps8ZG#$h z&UdnESag?ymNB70sdZ19d7L&s5qTz>t3KVTJ~!qiw|}!9NtlkykHvcwC~XI~JG0KD z>L@X^Hay*gC~gN9-|1JyZLFd_YLVXzdcUG@Om5l!4y~8H?k9YOAxwUERJx03Kn*<t z<D<;&tGtu$BF?oo4~8(Jr8A<X8tWmNhKpyiPv;OZ&=~yDJWSZHu1hyw@05;6wa>HY z{9RPNTwAVgbYq_=^o_Ec{<MnF0{w8TlxehPc@Tq@gFz_qV8x`UL5%dcVKCc--mb5m zZ-cK#d)5Svigo6s6iRpQ*XyGc9G-$|39aoQeiA#+0ZfjKQ8cM-w8a{p<Qg8M<E<y^ z=h03)vB7|p7sA2eWZk6ZZd|QV2j2{qcedXlBE~r9nvBDq$Sa4=DL|J*ao713tR{(Q z5APM$J}!6P>6JWY>}CyaXW!wDmmrZ6)basFc^Heja$57(kMRXUk3vWEQz#X~=SPp4 z`$%wbF|$)}<AORdE@)9-jt9+zh0B&7_suF+0^bXHiJtl%c8WTA1#-BUd8J{0LCeO= zseJsLhJjs&HbR!&#>~koVZ0-*eC^!4LK~Yox{<-$x?Y1hx>bX9xtg#9R)cX-%m#50 zX(cj^LfcP{7ig0XtoAR-u5y#()k$TNZ(%T7AMS{<(!6jk*{Y&VTd%@qy|V8PvO>Nn zmh%BJnygQHb1!bMB+I>P)f#3PcPCgGT&T;bR%^0eS#*b3{k)(lfvEb!0<i3kIs0+( zD7RR}$po<dL|=5hh?Zlm;=~jLcOlhC6$r_EHku~IS=t{}eudXI4!K=al@NP{w?F7i z&b99cZcaE^RiHZD{yX7DLM8>i2It$iDE9vZi3tCnKqCM0Ue&xD&0PKmIO4XnX1^|k z0kxYR7j*e9@#JT<9(OI<!9DUTv%jQ8I)kA>_fSa%JB~U2&AR&(;vv7{uL&FvcJ<J( z@7LuhssHC+P$IMYlmPi!DB1g%wg_uumQ!}4a<jgTgg!mbb3jUNAJfcQlQP<X8=bsM zuvHGVm;Crx&36kwnR+S)a&K;YhNPgv&aJZ8M*ZQ5wT7)(Z52*6<q69K=_n0((n8)2 zD=HBQ2(2q!)Z(_EagAV-v>3trLxcg1<f6%g#i88zjc%lrO`dS>@n<j`7#&w*PgERi za+I;c2_~lv%>fJ>2U(Ai1;$n&74*2}Wil+RjzaAS$IrYo&015Q;Kp+E{5&Z+mzBa% z$h3a7;g&~TJ~s|RvUTVzQT6(6+ZmIK0;*v%Euk!{QEIi$#zl2@TL~83L)#+s5Px1B z67AjQMl<KBzFPGHMixC{S&qWG^|(D6*upw>+DXUg7+dxarI3p(dFl`=U972utA#s< z-GUaA&*~!zhJ1Vwd5bBvBE2|&;(AK)rFCed@MiO8Vm|}NRn@sW;RvAxwP+)N{@}0A zji0agw1ysgt=0lG)t5NmBbERtc<YMm&~~h*b)X@)8cM*TQii)?#bzBbrvZCewDj+C zE%y$-|NZHDCy0x;JT#eY+Z(0CtXWC?ONaE9L=fQFEHhd8a`wg0zZRrRMwreaXz+dn zqevi`cw$VQV%V)jv^4m(M+W-FC&l+289lbIaLDAA3-p~&nh#PDeYUT0$mNy~1fE5r zACwZ7x`(;1?iuX~*#5B{)Ed^h2iVv1jP)cE_>uC+L)L@1Lo5)mI5c{zx9@Z7w-0?Q zx-WTavQK%dx^Hm{3vzjZ1j)W&f^4*i1%lQ05vouv_6VE^SHgGtEQY`tQ1I)db%S=$ zbn4_U`^fiQUIJdSKXfcoo!&qHZM@a3BoEX3|LVi>zk3Vo{||5ZpQb`B17UrW#2dae z{anmgf}~+22N1!>ze&f5!hDAz7W$DY{cX^QU;qW2+mQtfH4bx4To-!_6B$Vl=}#FI zjbwmWKRO|y=hgn((6XM!pU}>n$^zO$^`H0CrU^n1(*7U*ikIg#*EQ!qH8njne<r5R z0QkQD2w%|wMF4^{uU-H#I-m>yMVI|BzPpyAu6mEvD8Q3dPR4=yDOTfS90^*XETgsh zr4jLFb)N9cZn)E3Y_G`LcQ&MV^|l9*X!TYT|F8KVHU3}w!BCk&$%qfp_}Ju_FXiIJ z2;YJ+LCn`wl3bd*bdp@!yI>Lnn!99@FO5SR@gC(v9q}2eyKE>nwz7rih>y_-A~k=F zc$WyN4W@wXFfG(+84B9;D;!ZQTJ37nMinibk@&3`5QaT@D8QsV8(@V&>{;HOorOUi zK_wH96d|TlURZH$I?8rl)#R>h8)Y4-E~0m(rMQK$q1Vq_dhQ+6FT!uPB<pr%S17=7 zZc{jEyQFA!R@;G~M5YivOuMgQnpc5eBokPjWEdKXhM8DY5lYn(nat2?f~r78AUbG; zgQ#goiqS6O2CynrrcvbJWMlh~T)<Vge347gSNclVgofLv`2G;Owm#=*pH0@d;@H_+ z;*vLV>NE1;E`+?h^sZ&qgl8R<@iT%ZTHQ2@<N#Az-86v2N+ZLv*p*hkVZl_yGrrcj zzLaF=fL4a&VaiqWWuhy5IN8iB$JoHiOkCaA>NTNZ2)0<@jHN^Ri&(yGGSg8s({V7v zaWK=76efka7_+#iK8V37J#tfaE4(;492Zlz!tYg}c2rM*#~-RcNrQVw)G}8axHn$I zkb45cYCB1mmJgLk=Zp2}8LjlV!LXPT`@@>=-49-vubD@@=#o8}**kajIK?^Q{Lbf{ zS_e1l)&m}_I1(Aj`F4S6{LSahZ8(R#!wLrIH6qrJ#VH%Al@qTgRF`sseQ0JHX*W2r zc)u92P*QY^I_1>(pa7UqZFFgXZ*(p>!Nx4II5IE6DncijfH*2x>KcEw)@a=Sysvml zP9Zl>(V#xqn6Nm;e>0wJT)c;0pv1~n%x>m$5z)6^XH%bmPhoLUy<cd2<SG0o#7&M* z$f(az9-q#s-ruuQ;M1pbt1zXWm@CX`dii^6gq){Wd#@+|`ub@WoW4+~_qtEfV;T{e z%ipa17-#-*H2so4{bDrzvN!GNM7WW*&ob!O#ARmW<8Rj7y2@Iv<`v4S{%q`5kDkO| zJkgtjp7PG;-|M(5@Sz`{-9N$xiX0gM1l3e?MV~wO29_v=1eWX*Yj=$VXYSVkPgP?o zcmOVQY!hUz545t=3}aKOfT3wwTA85{^<~)yRO(2Sa$0H^&7?5ocRupJA-2#*N({ec zv8BEsi??ZVwK}G%E%ak2rUV?^#OoI*tW(ESQoLwneBq0CsVnc27#!!4;iL(VcyE6Y zIxB(6d+Zuf8>NzTVy;z=35Y+@s#Hp4lPJ<SE5&<@=cpW7i6hZEOT|OToFTA}$aO@_ zZ3u2$PT&?#pp={SNGI!??e0oAD-lmS&)H@i<h6^K=4k4aj|u-N!{ZFcA9+hY^opRB zHLVw?qLM$wZV>&H9C>}CZoY?Mj;6i5!7nJYxo?Teid(U#4}rCES7M&l6!i=+6y*tV z)%l^CY)_5^lq%K$9`@}l(_yQo2Tn-ys3p*4G&((gZtvyUNI(CgfqqSLZGHhK>@P&x z4DJLpC8cnm@{spt)p*Ro0i}O*25Q7}VKpaWP>fTI@8#iJHbXpz;c!r|8Bk>khKvGS z3spL_+4=GbygZ9r$>s&qX#l~qq^ZB#x?-x<_4b+PFmWE=k}xOOkuH^c>L5Kh*O1Hg zYkk^zrU_ipryCZ4(4PtZM|~RX$K7yKJOqi^S#fcBQ^c#Ct=^>Ew+K1v5Zjl1E)@@5 zB#cyd1tgLf+z}SAfj@m2h%JIIdr=Ii+%?t8I^qS@C2KZx$T^c5B>L~jb1L#WP;%p3 z@>cbZ#-G*H!V4K5O;g_Z^gYrainaH@sS_FiEgQ33&H4!etg|jdW00s8x*^0dtUQgw zVjtMnx*-#6+{32E`Oe(;SmDKztySR;+T^KOSv-UWzjf1{Y0OIAFiTMh#Pwrq*L93^ zi>@;C3Rlj_8#rAk%5@gHS4|$ABWxRE_Q(lyc_wK$kBkFP+g?&wG3*wk#i8B+KU&q& zZmp8dmX9!L%A{<l6Y>=W_)MvK(VBrO6>v%3Py@mD*;E~X_9m7#LK=H3J~RnVL`&z4 zi8Zq(Iz{zluIRB`i>(LoyEFIbafEi}k7)@h(No{w6mF88e#7whV#SifL{?TZh1#`h zl|_y50`08eITm7S)?kSEP-^9!x+_a~oV?Qx+%}HWgGEWWZAKIPG%WX(X~p}P>{{-{ zu8pZsH?nJs)gy)^nkw`u^EYB>WLVD$<T(+qEaxg7+Rc;}zge`_y#W1c*G~*su(cN2 z<q4-msZKe7dAhm<N;R}JC9y>fC+g>q*Xb0hI%3n96}Z_3maWHs!cytTtdN7(`zF|k z#3n4Q@e+ux-Y<&B;n6oS-htzeUZQ7t>}L61;0`aYPVAIpZ~v%yETPq9IS>wd<@ZG% zf4(4Y3w-lMH1!<`L1p9>S8SSec={|UhyIX?TYdHkY9kf14ZwDKctOmzfWf`jAj-VI z3P?3TPGZEc=)bC00t|}8k~9LWUr7ep5RshE_b^SIRfwAM7r<qApU>rE&9er|0|Mn+ zj^(oh<m;z1d7v{p*d5N%Y|q!bs3}&L8og9)>&hkXOKSQ{uBS6QATtZ1N+deTNkvY{ z>K9Dw_b|MsEPi0AG7~JuMat1hVEG5zo@J6csWWVkB)_0}Eg`)Y>>+y!RnfY0Tm_1| z3h7YQo2GEAs7GE;%<vOJc~(ZDP*?>gIj}BhkOrqPa!~8pm>L`C<@x<8GLrDhFIp<O zdYD&~<<n7VCQjXw8|6)<aN;$YS{-p>JbO{9+)&l6(lkfZD@ogiTGVFtLy*|9_4`Da zp*dy=eAQ+CL^w_|e#4)F9Y$bEGl>XiO)JGfcVLR89x-F$#bBK?yjGj~5!kNH9EfNh zY>b9bBI2QBF~Bj@F(olxevTH6q}`9??Uta-FH#$W*MRs>Xl3-Ec0cuhs1R=TMxb5N zDK=^=LQSYC8yp*yd7z?W7xXQYX~tpKINGv_ueuvelz+rg#WAT6o!B!~jXKkg+6Y2= z#9?%sHQW>^S}_{f^Dcrlhzxg=5~S;#u5tSlV$!rCi(lfLtvIZet@-LmuYUA5TS3{G z1)SCN4DN_3oBZ9a<?^NS%tURjS4rBy7}hVk_<=t~8KTByM5e_Ulh+ZVbrdgVM4lk9 zc@vS-#i8otZ(Hy|{cm(feB|LPK5%?5w(CPsTjXM0dZ{72g%RzEF}~ucdrmNb4;%TG zZ^;ps@KD?{h!#ZkUYD6_gj_qM--G(@Nsn~v%{Pwk822+$)E67+9*b}Ac@J_s9Q#$6 zU{8;0Bou_!`z!SovulFVF>7bo#uv`vPP?nvZ2-0!dwXU7)`A}PCd_Snxu#FLe&ij9 zCoosCSG#We0bn;qO<bi!j6YvH6P#?qbQT8=jrJDXYG+F~r|}IOMk&B%SzyqsIJ@t9 ze_pH>OV3ZMwEaG~kd4<>XuW>}%9Y3S@5;H&EJS|l&J+Mmo6a9YhQC*8N);G2sz@*X zG`?#|DA6xi^4+wF^4%<!65hz&z;60%57nI^JE7|K%&kW_xpw77e;lZ0pVQs4W@azG zpddpOh!Ea-d3Mf|S)RM>e@xRjeLkOxp&0Du%{cx;T#2<-)9)O^4h606iv9*W08)fS z7of!NA*JjoMKUd@F)bmy^Y4wiWcx*8$>(<1ycFnAoa2i>e7|+LKb<thYYFr9JLH}L zufLNz{dwN9rqIbZj^d6rX{L68%s-Oi9y_UjC#-!rrAavPz_zM~o(RcS7M8#24!Moq zRp&{5UP9~R#C5^l6_hG*l~l%HNc?bN$!wR}i0#L4T4qD9ws^ZVoMH3*P@{w{NR@+x z3ORni|I-pGp-hRSggZ^a#R(I$pOmmEZBt8ecva|LN6t&rabo99k>o?bb;3^t+^lhO zO)^Ed9&iLT37Ykv;o#EEz;Lm_6W9r)eOw0~+9g;o3-*@mWy4#wX`#!Zz2u=W_lq$1 z8@raUxRyFUl-dj<=tq$dQK+&zTVcYTL1D~W(-j%yW!MkF0R!cmu%71`Gt<d{eyVqw zLAlt8t7JE_<0ZRvSs;^URE<=Zn2bpKpa?sh(w*~^tA?ox6!kjQ0C0=opB;<OMkD6l zc^ee#^OgeCV$)T_>g*5ry;wKFO`f97x}?Bkwq=zvoAk>+`<-!E24yK)^9$wWDcT)a zcQ)xB#Ps(fO}nvM9D9!?KyzC9vS%A@M`C(-k!D*I`c}4O7Rf&<)i$VWzCTgO8gRkf z4g$|VP!s5+mQb8p^H$;u+_ccE0oBk<nwq|QvSPZ<mQiO^XdRJ?Bb{XCcoiZ=O0{gz zT?+)a6F92qt((7kR6Y<1n!v8k+{NZ^=7KqlxwgXRU9lI=?8AdNBH``(qnj{$OMILJ z?FJj00FqYF+j-es^2l+?)@1;Gsq8ainF2|wNWx;@b$ORFW}u9ZCGAylc9SCTS++by zzcBED8BpMG%9LGf(T2}I>Ua8z#q00E^wcJ)FXP;LKQaf{;SElpPqIZ^Yo-<PsOA`G zf!5@_zNhw4Dq;+oA&(@l#YHv8Gg75hrjj-4Fc&m$YXY`etn{VWVtZ+h)&ZyB-P0HW zJnI}rsoS(`4ba2U=ZWC70zcaJxA61B`#yd&;DyH`#yUaqkKB>QH|*#{obOS)KK0z5 zp_`Ns2AJAJvA<hHp>a{8f8>8f*u4#s8E$dQE2wX+vLlXW!dF|XTP8C!QBy6k8a68k zSB^7RpN+aE_on8-Xg<-FTRGnJ4^Tiq(|qpc;IYmA!nr_w2(NE(=SdC8(^<wE<?D|| zqeJU`ys2E2O7U|Oi+L|}-s~mg+@1_8IdDGg4e5E{ftt^hDr#kl{u@Snrbv~C?l}2g zAM`gs+!f92A*YLPJN4iTqAI`F2#}qC4-)00xVeOQK<1;bO*C=EyP1SPLhuuo`zrB# z%RoEhl_@1UwO$#UqyYAtcf`}X!t0zNAr<1aEFKUjG+*WoZpQqL+*k~~EK=l-m~n)L z@;HRK9?EWqem>UUG_d4(KCq?6y#1Cl>C_c=;04?134y%N>**Ltd&bOnz0;_XLQ9QM zw|Y@uR)-YXn4v2VF)}ezY^uYAqp?Hza6?RkC16xk8-)SvSzSu$@V9^aKr6nF_8A{R zrfVq%-8P<v8q5-LpCM2ms74sb_@T_jdVdKx2vUszBO54{XVTh7Uo7*HAO+f?llxV3 zK1&xF9#<#gO*woooj*6q1RX36yQ6&Lil!omuL&@?wCH}rsCCEpB7i`GxM#Be=H=$% zn%qo*PO&rJ1N{cj#`dTk7?B{aqf!+8=>fY%Cwm8rv#76E+1{imq5+}xOT&bw%tVK! zfj;i}q@ds}!GkB$-3Lq|S%z#tbm)%^MoA085G}%(Yd#hGf_XW<5c;fvD=#`pr<hII z*Q`F)SGXP-Al#8g#_*yihvEtMWy;UWwzOvuxPON13%C9lqYE|BiL-xT?a`v{v;j!v zZ%nGy)TBJ6SMiysz8TLnXIjtxa*4x>`=UqJJi+jDTIU^w3*)wJ%nALm*tRv{@N-6~ zWArQbN1Ye{4U5CB<dnyK;qmlG(5wEoL(LK8bm(i|t9T73(MjnP<*U^_wScLS|A_H{ zh0bP-;&&2Y1p9Vfs0iu$Z|Z*boa&!}Hr_yaHVx0F`T-Dw1>>iVYR4pQ3HC@^*44v+ zQtBe%o9h|vWXGZ8Hahm>P<8~B_B=M~j3i3`C{u_*|95}Pvk#~eQ0CY%I@N9~bK=gh zu0S}NKQg8-+{Fv2?cq;D)}K)jzIclFl=M|Cl$Oox{+03kOV&=*61!ht9Nx>1`j>EY zLQz$Hr48V@<8Z#z@8|eKpjMm#3rEPGp`Z_bmKW&yzuI)WE>s6lYBqg{cqWl0d;Zf= zTN#ke8HkLQMxN@CLpneVfjORCQu_akvUiHng^Auhd$(=dwr$&Z+qTWU+qP}n-Meku zZ`-!H=ljph#mQWp%(<x4MOB_kDyy=RmFHJ0OCCT4yTse>ReFsOkgj9@_S7=J(kZWL z>47I-AOF!?I6|s-83kPnRn(eyR{J~%Qp>g2+M7|OzX}TMT`hb@vvS>p2Z97*Qq4oc zwupe*HweoiTgiahOT$@x>V}`7TRGc9+GhykG0scEwy1zI=oG|aTG4>o+re42)`~@= zTix43GH4ViAX}Y-+9wHT)6bVdw^V}K1K_OOYsD@T4v@NmkbpMfDHJPjPzJ*S4Ct2s zHkJu@RYA0X{U?B81@qqlZNk}P^HJbH4$v8f`4gCychH$7P+;<Z0@U-WKzN{NpeF77 zBsic`xEk3i74#Yqcw+zS+URng7pCQiGgy;hJ`J|z81&jFuuZg}7Tt;qx@Co-V5J?g zHd+{O-C}+fx+NPNSPu^54fJRh)@7OxV3>FKPoZ+PuocUy_`fT#2fg+P^avN;q@KS) zxAKH(@dXE#Vb13{5CAL#SG#5k>@lofVO#7$?Yo3GN#;FZTZEunpa8;r%e*Z=G<6lW zw)^&YR!A@{;Sj)LQ2TaaU-<$7#`zcMmL7%z0z^q}ozXd-+fY$gh~KjdL;rY48jXoR zl(<ZWSS0PvV28st0@s-Zkn!TIG4T)|#=?Z2p$ad9gDiT_b{Fd;Em<^cv8xqhG~%VN zkw<OkOp;#kSzE})7ve~jd~vj_>y6r8c(;If+BH2e^)Hro%R3|6KpDH$AJT!TPcPw5 zx)+<@L&-pz?pptdWT4axJVEsj_{!T<W#_1&B0^-#e&wAtBLl8RC!-pBmFtY@UrC!& zkD{JxTlTc$I*QEa(>m!|65J_Q{n+{p?PGDEwRVfr-uzD_^|fKsWIn0Nr#vtZ4v|Ck z9|u819D5?mGOT}vMj^0hIm^Z{vh8<tTfM|4SJCnNYD>*(>(;vJ)N9ePP|-2ef{SKL zH}Z0lkyWHsP^pTbXbc3}fQbpWeAamHde(%)BFfjpKMU66E5T%i<#3WovoR1gZd3(C zYraL?X?F%=UJ0d=vq;p9;#wS=ZHQ_63vyiE=rG10a!LN<KBwt<mug%Q`!=5%CjLLV z7k8IE9gA~YRcu<HnY(B5iTN7^Y$E|DoVhw@mJVx~utJZzxs`TXPy)+kYrVpJ*YGB- zkd2WzL-Hun80#Blb&Ho26@5%T@Ba_lm4J8QT!R4uQqK9mD+aUw9~6WC*S6iQeo#i} zD=)9NTbUcVAqX;@FeHVc^P;F#f25H}go(k)3&F*;2Pwf9x5!hdFt7el7g4WMBf&(a zq6*Vfzl52Hj0EYc<j)x(zvc6>bxk;UfW7r9?dEj;4@I)&`_YNFD@R4-4=Svbh#M!i z%n~C~?j&D0YYhK)orVG**L{UXqj%{@`mddPa_tT8Gjw_0vRwHNs*qIN(?X>q_fAQG zOQkEt8IzXaoFdqfuMsz3o_Iq*yXgC9ISv&*(O>MEogUx5vKoIX!KfoApGKFAe7tE% z`kjzs;LORb=!!W{XjIYkco-jMbfQs@FE*V{5xV%%y69>m*{au0A*ps^-z%zYd{uoz zi+F$?rfjMg&dgSlTlHLYBa7zKVq*d$uJGi<LQa{w>-6j>4J|rLg=HpHfWpNt&u%8Y zR+TR`)RaE;Qk~>gizYGJY>Mo>>gZS1ai#6i6@-gXA-REB`AAZ&KE+!)I9B))Ds57& z+?AU(w#B?TYNsA!vpT9F$v`Tq9)(s1psg;k)|R3}v1rQ7w$rY5{@h2VQ<aqK%&l0l z+U$`MMsv!VYigB&w|3!NbE8|KytV0fE_k~w^FNfPg_~O|Va~8T**nfML&j;I!8PV^ zknIxLLG0Uv6)Vq0Ksis*v}BSA0!5;uO9#jBWxt~5nOnJ{=eb+E;-x#VU`aBU^Zdy% zm-EssUQySrYQ?%*@%6$jUvbmzf86eFKFa0cZa&)OQf|PyCB$5hix#<Z-dvB%7OC<c zUV*A5!Cb<nbLZT=`E!}vm&>OVMWsu(e#JTIHhwydbDj+!gCHz&FO{Hlaxa}AEpji7 zpfz%C>VZqtZju2Kn4Oe82EHEqa?dNbi~`M0xoBv8S6coN0lnju(mX<qmAs^f0~=2r z^U7-AHrbr;BZC`p;l}hu)cehYo>pd86f&EDWu9$dwNzzw_j;DD5Y?Q%Kr>aLeq5)E zv4nMHSHs_uqV6gwnEEwSFBuM{`~2N0q|58@+{5ta`=O5y<L|Eq*YAd(fOT(hso?t8 zCn?|e;-2pX*DsZw1bbx}Z<%N0!Flw{`S($$*0F0^Jg-r`8{SNbWF3|<g@|by8qd?! zlo=1-2mNNb&hpGLeVzTv*#|FL{%O72aLT`MbW!hz(>pa1p*OM{%$QNHo0E50MWpSP zMs4`kD0U?*k*%M^<f{?*R<{Hhdk^ZJ0^Y9rgs(YQ50hCJ-8Q$0c8p>lA!jLdWx!?i z^pqFu(<(Cp=-2DNlZv;fq}|h%lK}MzC=Jyk)P0Q6l$@k0n-g&v6$^>?98_18Y#wo^ zGH`l_h9&!&B=z%$4s8TEHh#i26Q&_HS~@v7SbfUQn{VdZB@F|W-j150GTPlWOFEj# ziaP4UdMzK>Nxi(0lNZt+^^N1uQVvy@s;Lajwtfx3At%+j1jjKZ+_LH+bmUiH%%V+u zc}|}}{jZa!2HG21cT2CROoC%OC)bO1V^8lW1xE2yW;lL3?dRZ`qXV7N8&*#qC8vjF z+>PmqDq0#wE<QAiwUm@umXeIVj>X)>^n9I*swxwY`}WC`Pn?FVMfZ=4KQ{)yylz3h zazMJ3Kz6u5Zn6I4<NbL>>fdn4{=6=?G?J?CkJ||(I0g5(qkI+#ElooRKh;?Fg54&Q zD_N1S#13L>?dn=)g6bWJN9>OE#D5~}xh)`j`h_Q5z{fr#tN4?gU;_BFJV@)Aq?>iu zPhNjQj-i>N)rF-&m8wp`b0+pNE<&`V0_9ISQ2vBd=x+K@lJrnwq9mbUo|G%-IgjO* zqQM>+zjwmXTT*`{YWUbD>KE4j91IqIUl-h)NGyB9I@w~j8kzVt06S*_MNsVM&FFtx zaC<J)^c)=gBPZ0P?B`0=A<K{W5gFjIhxBz`V0fkl^)1=QcZU^VuE0fgqAAaq7!Z@X zV|j=85uCBdBuG{7w<Yp>Ds>L#oPomAR&ONGA^CN$0L^Vtr2K7(n=w8K8_2^84!#lU z1T9g4=!Yb@=Igaf!fx!k7h$&%deaZpgfW^kOe2^Eolf<U@ad#lG=ojy1V^;*ubJ#K z#|G5kNS~Pq>~kIz5mkI&&ludSHOL|VR#6RYMS~(}jfM`lVk9Nto{UZ=J^f9pOFp;2 zC=PwhhL<PLdgICY<(%yD&}?ZTpOK)}-;Jz-h{BMAh(cyUK&sf{6yf!;Kmw3`XHVV> zk#^cs>#Sw8#LmGdRcUdFSS^axZ*h<CAdQ@VwUaP^BM7%*N+Ku<K08Cs6~}|xIF7SJ zJ$rb{pIEAHdhRrP#X?;n|0uQNA=kCj;7GNLLtM~l_$xKe=o`8A%Qo!PUAaTAv6K8u z7By@_XXdfVRqEJGVRk$-C6&b){gXS)8!?JKZJZ!qC~J)14KUdoEp40)-C`Rj9qiMT zuG};lpK`sk6*rNalFY{T+eCA9I_Lgy%pzuX5_{m2d3a#T;?&|q9yf7>NRE+4_T<;$ z<CW_}^Qgl3#CZBlVzLX{WAoVQLrKn6w_m`qdF<3l@`?O-M#ji?TcoC#l1I8`=S(Q; zSUg_32=c}kkFKPF!Apf+F_#o$$(^%TE(}ld12zr`im!`GWO-GVjQs>*`-;&&COjXP z%4`a5E*-_>gBo_g3SpeSMg9>_dk#+Lp)1^IY<>z?^AAW{_gCaJ?~k&FL+{qhT_jGX z>2X`FB(`J!7ZD#4)3*GCKcZ}>j`zC`nFXY-_T1!DP9_hpDJhXF>|CqTMDskSLRmUu z6eU%5_}N7Pwu4FyxHD=?0<l3*8Y;PT0<{Po3_xyPGN=u;C7C!fC*-Dl?Imm=$Q8`h zMRC^8QR!c^?jTlKwI5-v$j|Yk)pUu8=QA}90<?hIEO#{*H8+Iov@=$xjcgB{n~<(g zc6HODzF>Gl-eL#s8L(nXmV2Y~zOH%QhR&=vS>Hh8nwH7U6{yX<YirX;6FUJlsa`wC zC+3>{?qrjo#C0~2e_5$beHfpJUY0-eOXt`tzv;%<aqqZU9?>k!;i%lMtX8!to7>83 zXptsx?GA>sZ;%Nr`c*E$oV=2gQ^6_|)vbR#b|awn&&+5h8uoA|_dC1H-^7D(@2wS% zya)Jmzk}cu2mXG!$Q<}gY>O!|F4vh%vUZ_#Hd#hWHJ2}!pg@w<gx$qSy_HbcnNZ3p ziT7-kq)>zuz18q(+KF?Q;P;6Dj`4otD#}NHB?*Y~&Nk6D<V;l07pe=~2cwxuy+?Ce zmW2W&rhDh``8MmDiLaVSXX{*!n<`o{{m2cA(~=&OKsP9{EcydQH9@>ojZ9t52uiZ@ z`)Ii2_pNJZCi+B3>v|J?Qw}zF?)+vUkKO<YR61tI6ah7{PaGj%!r#tDhk13eT_r1) zP;8&dF`C-8&|s>fl~NU^zG``aqb#RgVm13hTu+>&@Y@GQR+WyTvS*!uLLMq0hh^ZC z3ZzVcM4FkiNe_^da=F?spi^sdqf>)sXT6FTanY&S(zSTLCh!+CrN*EZ%P7R-`eICn zhnXS9O8@zIRdPJ~*gz1$?l`PcW^}c6^I!^>C{3X2G4H|`$3F%gS?dau=nLckX2uY# zW!19yb6%WlXK2TuJItcONm+Q|pc;!9E~>}T&xq%rexKh~Jwi=8M7p=dtDk6>-<8il z(>}i)diol63<0<GHLq)<T~N2Dc=)Do45sJGZ-)JeS!LIdrDeB4ULnqdo}&;Y_;}!W zki|G*PE1-Pn8(|g$3e@v$nMIcrH<i$A@s@rA^`>*)^lEX&rY1M+b@vwG{Y@g$8EUB z_OpwZNrF%;T@97Y2#RtR1~4mkP2mo4*}-_j$WSx6p~zH%7p5H<32J*3&E#)dU2OoD z+fHSu`K<1ICLSc5t%%N*pYuh3@b0@7T(D3t))bGD!Ax=T#!lw~(GK5yJI_MyA+i41 z*6s#sVSTmX>B-j^5^tU5jl&(`;C-;1g#mJp!zgv}vIg<8Ch=(Z5ER%rpVa0NRQAFw z?m)3{!G*Zi6PUS%!E5JS#29VGn!UwBy9;@`Nw_Y*nBG#gj-N+N4Dye~yQrn=wk?Q& zO;4M##arsFh%&De5OA?_&IM#byIEcpP+Hp80l&Nwye(hu_JPf56eVm{YT;(4x|=cC zFFz->0{PfyQ%dAQwW`J1JbcU=V>w}Ftr7JSSAuS|32<&F_l#YM4`v^VZrkz8TL3*J zFm)Lt_%)JP-<h~4@EaMW*u~=}6_t~N?XNcUk+S*1fXbL<>QfvghwgHK8+-4TDV5L8 zENR;A?T8bf&)R+tU>$XtO0BE0W|8ouSZc`y5P6ffek(>h)H$8z-C!!%T#_=PAK2P~ z?s>p!H=^48r}_@J&H~B{p{v1mL%-H&&5bNzXofpdH=-e}`qUjge6y0^ra-YHdC>{$ zxqq7-`H}_<j~Wk;2I_TQ+^(>)q7<$n_2j^ScFey8WYda;u;|z;#j`EgVOS9muHQoF z-h$wJCUR9w;1$ycrKvRF`!DzP4eF;w-G#iGyc%!DwjzONn0A6x^}~8|VN5xQ_enoI zadUx5<I&_hGyL?Wx$>KRq7T%ffY%nw$Hnm<;0)|aJ{Q-rddRzXpNAj6yjDz?M{1I0 zCP^)erqH={{q%K!uiaGm8_LnBDG*^ICQ^lgvtT&Ex(@$xRXKN&-ra`8eTeR;0X$Xz zf!M&#>2Sn^Gv}`m2kq!GMc+M8P3p28M=!A@07F2$zbvW*Cu$fT--IUVr39Ydp3r#K zvKcP7zbT^BIOTk)T&fd-e}wVCT6_=Wa*2(;+7e|7fF6&vQQ0?)cw&wyQGW*u<sIAZ zl`3}CwlhqQShK{_GJD(r7!`RYMRZMfQtpWZJGVeA($)F&a7pkB0y|=>33PNa;vW>b zM?;L*#T9(l^-$Yw6#Plg+LwwNRjNrAQj<bm4rbr6L^oH(Hdo<}Ew^Bg#6K!JVGoCU zMRkEZTQf9BAKO)qnOAQ`64Pl7<8blAA7kyVkt#0;7(frt(e}N#+rY8oAM0-vgghk; z(-1)99U%(>kj9}RE7dM!CCz67i|Hs#LEQV9FCyqUM;4Z$Oe^t5RXpX5lXFA_R787J zWc{5{eD(i{5xwGK=nqMjK5SwdsS7gA{kuA(ntXV4rQiBwA7+9(6Dkf*b@6ig%o6VW z1<!fc;t-ZQob5vt#F?>3b^Kw5k_=RcD%$ig!%dq1>y448of_Zt;C-w-?2WzNW6d6M z%#5AL4j*mBpEeJ!Cv|Fy(e*dmnss#^-NRSyo*1J+H+%HPjyKQv^%ZueU&LjfI`x3f z<<OOO@OMSViaVp?B0uBSq_+7K*wG`GqV|J#WGUL{?GcE%+4cYYKG3iL(&enEhF2Pe zQ&o{kBFjc9S97G{@0W6~)_8Cz@inY{%bgi94<evk>+Z_1txY$3)aB-2e^fBT6yc4N zlV^lyR4+kgC`ES)y|JLp*o(7Z?b5CT^U{M|X(a1Uer09XZz=xQSp35yrYT06D^_~4 z4kJAJP;g_r-x{ML%Uo-yNw>dA7n+K}L>CZ~=Eee8FqbZyT1ZZ7V$dIGbHg}UY|T(w zYxGOs$3@gwTY^oyf5v~&Z1Qv5yK^TCuhwnMcNltf!`dm0eM{kNqyxqXo&CZuXW$lT zH7l=07kO0$wJ%<MB5o}Y2Q~9sv<>DSSv0~MjuOVJ89Ezv=sSkY*(@<{VW(gR3X$^b zI^v5Uknly2bZkiZX7a=?i97kNT2ZmNVzId*nOHFa7Y?st@`P~(A_H59$j)eD3d<Aa zpqOLxjHRAfx1KQBUNk(U>kFe0n|}4g(VZjLm9;nK?7$dJ)8xDQM1QlCSEr!TA3#ZJ z;|%r8cD6DxekfE*WOFNQL+di2;?W#v;I8BWch%h#+lpKXM&BYwrluneFsBy$v32`1 zI}`0LW}V%~j}v)glupYL(T-Z!Pu$j8o=%Zxa!-ZAo!+ZLC%4gfLXKACu3`>3(qFDL z$EjLZ7Oj^)>08O@TamPFh+Hh*P^2D}*1-iOq(1QV&*+|t>UFAnjbR8)&;8?ho($2K z;xnX#ijx8cD4yu*N_QKQ0>%`cpe+4=yLh}}We+)bi%~g+C>~JFcK${KrIKJHEleV1 zk3!~*Lh-Pn8l=|Yu85AfOK<zCoJx98WkcT=Z%{V#VVos0nvP_ZHNLZ+@l1Mln443! zaP93|?*gB!kx_CBpyrVbT{B+%M?6{(#>Eq{PjHelPB-YS*DN9~hNdVUfh`{81&>zC zBHA(lzJTdXilZhDg&q}0jY^|Uz1XPkHpIF>fD}o%PUCZ6zJLcML4=PPeBXN(PIjQ@ zNAhu)!Hv`x75JtPKd@_J^~Y+QD$C)j&}{onSXs;tXa?kxw}QGILNCkZ6_%U#ONWNo zd1(QUP0uh0hwEr0V)Hl{<eipRE*+fX?ctC|v_Q~u;W)&amY{5Q0dHoF*5N^2FhMsN z!6uJtJR^0Pmx~$dB*nrp0UeEaWYLiymQM`tBqdrgL1n~Lb1rq-$7MlSi#*q6VC)C5 zfMt)!FGp>37@|WqsJ!8SOHM7s+g_c0e=S?HQ)<sHhQjgRvOpE^5H)AS^Q6b?435!D z#88Xzsmx00MX0MpvOA-Ez#>6L(3(Z!#-K(g3~BWJTgA9tT_NmtUIlR`cgvGTJPa6^ zMuUR*eUuZ16mZnsg$vagf{>%ZfpLWTrG_itW)pCZ&B`z~&#QiZqoI(Al{stta-Ji0 zU5T2nZUyy<35kJSs}Yt#6#<C%YR2dyM6sZ=29vZqO<B{Td||s#)gVCCPWx+XOjK|W zaJDhh0FKhjZV&YBy6{C^L@%DU6?gpD`exWUKpSw4R0?~Xa_l`bN3X${mE|C4%}-;r z{0m*fHg9wVTQu*v=9Ay-PyG>jFhn(y4uY-BIB9&4iqbcUUn}T{ncPP+9E5bI!CN-x z_krlzIUdKNW0u>B@HWAa9Z}FG)jYIuX48z|xPn@3`qU5qKJe%!zv;g`Q0%7RY=GN| zm>Z__qiJi{>_Pe+DJ30oT@uL)i`GS>cvZ-0!bA}{#%&^~*m(dmiKVn?)|d}F@{1Oe zX`cTcKQ-#KQm<Qj<$wY}YfxA{Qr#loEonO}0wmrk7#k)5GVPRT4IBGNb<5pGzMf@x z<p-choiW`PTG7NsX&#^@G74gR4_lffyy?MX7)HzA$6_<ZMMfS76)As_M-As6kUHzp zqy3IfJqXdJQjD5`jnt14yHa6q)M|_bi_-5dI6F|F(Ce-hk9bWz`4uPrynQfzkfXSB zPy>r8JDoIIZsn*GDx2cGW<(3{r2{JQD6B_vu(f*sOnRu<s3$o?oNAoSmZiy3C_JXJ zS;Mq_aCF-&F%F#cfaV)Q=_^jK-nL&V1K;FSm!@X9kH_IMUDk7t|JmMHIbt(hOSZK5 zrtYR0)gzHbs*6+fGOLC=Ob1Z0Q$V7~(vzlgi_<Y6R}YgJSVxMNa)i-bcL3x>^A-u& zQq0h436yKx#8Vex;8N<ei%Je)DG;Vo+_uWx{!5j7HmQVO;^&cCsXJa`JWxcm{!Z%W z@pGw<cZTL50h(b6Rq*8}vXrgLlJm$E(X6S7><TyvShS`U(i6p~6yYayhZT|&rO~PP zZnZ9g3|bH8lIE&^PON*$Pa51;7D^+(9>D1Oo=#F#HwjOuGV?2&_)ku&<^v}dGks3# z?Ohz2cDEKOPd)Ck`D!LQufI?78u{oQa<q^e&wVfsG~G->sf|K2MqycUF%CpEL9oK; znpsq6hTY5&^`h`7WKm>Oy{WZM4pmFh*J#bPD^pBkRRddPF&wn2oby$K2_`|WG%ycn z%u(`G()M_cQM-%vqT*Ah?m}I7dbQG;MD-L(YD_}4C9|4xNK-M;tM!zwQ}8N!T+rM# zHKCxlPSCtcQd@UC+H`FH-bVHI7<RDNon11~qb^r8@WRU~=VDxeD(2^7LQN@6DW99( zg+^FH?oPt@#^Q9R;dI9_+<3Hgbgct#B(cl|d}#Fk(c!TuZ-l5!_OU2##L!F%IMKCI zs}V|;x-jui`rCPLu0Pz2Axs8$$asUd({6%co4>vv0j5}AI1;x8WN(1?$%9Bz;yXM} za6-N%$Ly7fk&;ip3nzGLV|cQ&bC!S^uHMP6Kx|h=D;GswQ^kLjr!8zJ;Lbqz3V6W3 z@H)Kg@81=8!8(_?fJ?P9u`@6oed|dF%`$-+`FP`m2l6oL&%|o}5!pxft}C#NQvUdj zNw^wzrUR2>3VIELQH@Cvz2fd!*+<A#x^SoX2g)|u@C}>Yk>W{T?t<=ktW+{DiFfRJ z8marl2bf+}LG$SE7={<RuM$56(f6<{nlWm?dm6(F)J4gcynd=-Mg0REf<{2G%H*wj z*_R06u@ayRzdUsk22c#-4i=QSRG;tDD5|Y0AgGe<Qs)z>y7&cK^GWaDVSXO}115Ki zZMB5*%sGSFRpC5%<vDP~W#D^ZWus0dbc;8MlLGDvS?$!U6mV=c(m4K0Ayzm9h@WUf zUbI3zT*V@-Zn_{5E5_6cF{^QySlBk~#ew2&LpQCyStza`8VV%TuwkuJR&&nH3e&J5 z+N$vw!foYSbrtZ82cpGS^fannNB7wDGl4(E0~r1b4zI3bdB%M|Ay@N%LT{PXFUxUD zj|*rq@p4X?zZdEejRX<R1QAUH5iJA}jRh?VN_p`KRua$Z;zWtu*&kW(OjlUA4GE&p zZ4mWr7`HCG)T`AR#B)QZmO<$?%8f&L3Aie;_86Z<?UePWr#60l!M)zs!%=m!mae0m z>GiObRYhW>@iMt_SO078zLU>|)ocQMY=c%yOi!CwoakAc_zhQ<N-Iyz%P>e~0Rnq% zC?Kn`SPuC!$~9SrY@AyEBGau*>A+yI9sY#!Ek|cM%QYzUpd(etHR|_}{t2A%ga2CU z_9=)_9<`@%+~umkMAYHYgQ^B(_){KR8=)G`RX@j0hAp8JK1&2&Xt7r)U?4p2UZQC8 ze>La32J1(t@KbyYPtZU_KjLDZw$jgDYUfO?bEY-h*9;T8V}w<483+BvU0Tj&k?VnQ zUFN7zcN`&o=G3d%87S&OTdVSHw7MO=zVNZr<k}N-C;LoM@Y3IoX<znrQr`}$Ujg`4 zI}9ORd~??c3P*hqZ!BM<*9$5}+7PsAda7BvBb8SBR`&gkhpbYXXMUalNp*TdP1C9& zg4{t!YZ&he!WoqiQGbFw((yR4)M_ay)R)-E;V5IsUG=lE?zjya>zF=wg-qv3E$^AG zglD|;^fLrn=8bj8vI26s3RX`=Fmos+8Ke<nR4mWT{9@kA6;JXFM~u+g_6)o+#5Q%t z19W12{&2kDtgc(?m>LR0JxjQ07>Xi2o9C4G4jO!EtOD1VWdtHrpAq7M9E&CW!&{%2 zrTRU2KzqX#E}+(n0)l*3;x}Lj%&DGeJSy^y`#vD@RQiVDF0^WT3=d78u@x(Jn??hq zJf3}{RDPFmUMMY#d}scx=u;MYcEl~oD@eSMnbc5P07Y<XlxzX0ooOl*$7U&RwqgTI zc`6j63%&uaKAO=bYpqtiB_oT*42;54WPWkChBe0?gnXC>RV9sLw%TpuhL)}q-Sbx5 zQx-D2Zi4pRKU3)A%fcEB-WnwGl;UZ$4fCUNS{`K|PH8&x0r+<lzQ2GV08;i^4APd> zh-Dx#z&2XDR^Xu3ti+07UjH&;2S5cs&uiMS3egFGeQ2%As45*SEj8{<i=(Z@<Fwj# zj$Z|fx9({$#ESp}5b;+(kBHO~?X1p@PyxN)^zcF)TLylyTHhp3Tx(XQtPk(X;kN`K zYfWX??mu+0f;hfS3q+qz&i7$WKRA2;$q%=^(enx;ydhe@DI%5`Vw&dagO{H&!a=me zv1o#qGKu7bNw-aQ?%{-Jw^DP?<^;oQg>$awMDuOY@zQhMXQ)NKwQ;~-iMq?=MC!BR zc+;mFBLYCc)Fxd4C61P>s5NzkVSs}mnGzpnZG&IBl3!cHBXgRUikolSfAVL)=y|Rs z=FaP84uj0REPW!E-t+Yjyn>()HM(!mMoXK5))*~}>5Yx`1_wLv1zPDg{?rXRUE9R0 z)D64?TkV9`25K3^Lfh~;fUxwdbz>_)*_vgCep-7DO<OM0WDmGDYumdB54snd_D19F zK&@5=FMZv3t`-FDB73ua`@wdgg<t*30hN7qeuDaYemLOweAcx8L(;&TSjot*-yqcl z``-b7#NYD`-hYq*Y$sCI@f>u@CinF)5H{-}jg?4H$^kJaK$Wr>7@1CT@Z(eYcL=r7 zu##?e@MA7{?--gxQB?!Npa&uOcQCa!Xc=z_=*j%d2duIfBpGiF=t-fB2c<GQoTP^= z<P@rm2XZyakdkgj?ox$<P6gx1;e?baF=b$;s^z362~9nc$hpxZbeSDN(nA<>%7Xm4 z*(4_kjaF!Z-9XB{{01la@da{9ZAKG^S{s~<w;c2&d70f@iVO*jBZA0ABn_Wf`HMj{ z`h?^;tPcb2w{s1Ha?a%gtorG-H$>KBTsLU;<7_u**JE8b=r#{yy>MAH{Pk=X&c*CA z{7?=ab{HQQtKG@gaKfc#7|QH#wxfz+=EcrT<CI6ju!UI$_}p1Q7|U!eylL($YmDp8 zSVO2Q-jLVnH@q${kx|B;UxIPbBS~0o4icN)wO@!a-l<2JeJ&q%o9m5P#?jVDLr-&@ zag!_85aO%=JRk2X>(!B8im~OXV3>YRJd3=u;A}(nBTQK3EEP@}&+F;6@U$SmMgx@6 z?PwsunLX(owloo%_p0zm=C~^)Yrl9NR{{y;Lr|bu)_61|>!i2=Yl0n`_l7WK_Bb6R z>zKF!M*=CD_l$6q!cjqBO2+sl<N-?}7rdEDk0*h{m(Z$RvD39$)LL&*9ME%F?lUpW zs&7I2np>eYaEmjRzs>3IG^WhjripbfLtxuFa1l`#3g{^JEAh)+Tsi#T|J`T34bj2R zj~E0bL*{?yZV>!Gb~pTgsZjgn4Tq)wp+a#MIk#W^cd=j<Hm2e(xg*bq5e)#7q*LM! z(kwDZ+|u2+So|PJp>Ja(3!N1y(eD9s)0sSN52v^FyD^QXFFZ4XWgAqps#%$bF_$^9 z70&>+7u)+zqP8IPGUwSccrEC;M)n!BGVd~Ub_zP8QtnF)Sqf*Gg`o}Q1&p{G_hN%t zA9Om$DQ6-}>uu%G>=p8*jM^+oO;5Ka<&c<<#?4OBt)q7k%kMZ%dYBOze&|y@vDBr~ zaBjR-cQU3HGnlGzH*APd2R;}6prEjGbY>YB^mx14im7{SOaG!0Z9vlsx0yRfU~K4( zRT^nGu^r?JU8drJU6l?!Evj11_F^)mylJJ$rjMWwZ?Zh<HP~!XH8oSXE44nV!(y2C z@P<eC9|uobeT`xZ`XPzgFg|1SmS&2i&;UMN$}#w00L2gO5=N6bTU-?aPF)gn9H6xc ze(h{plPtolV|Js&BxBTk!OcFt?Kc=!E5YS&CN5`~ZE40v3SDm-nv2ZkHal}Iz8r+T zy6b#+50#eY>a};~7j9i<_RWQ+otf6x`wI@;=j9+18KQ!3tck@<uMsSd*8vjCV2>V* z)L=ahcy3+QN#|Arx_1?}h@6l1f|D;h@R?%Uf8lc*G6Gd*cZK09l5MaI@V#83LWrz| zhSe=!vI(8u0+xp^;bwr*FBgIoQ@<_l6n+$4BbrsPXVG?Tq8!SbaHt5VeUbxXuMjVE zLNdZ|stBrmngeUEFfYtJvb=Dt2&_Vi19PuXFAM`RgK(}0u6>3Bd#`XWtR1qQaHI(H zKE%k|e$UAGJ@|VTzxX%7uRm`jUlDICUm<Vc0kU840g7Ls0Wx2(0SaG`nh{FIsoZe3 z!#vzddVkyx+V5~0|3nW%+M%ZJc@AURq471y`5_u2_oe?nyJE%p{RZ_v4`nqmOr-}D z1O)nj%Y^>_B&Z!M?aW18j7@FL-PHfz)&GSM9npo+TN!x~va|?z_2haA>LAYQ7=jqV z!1yIGJdBJbO~D}AP2UKKmHsl)G}AII-`uSunaQ9k$|Ps+o3>JI=l=|RwKL4CeGq!w z?7#|qaJ)_SznRX-<arcuJ(=b?ef?YrBtyFX^#|oG1C8*{E`d6JqgXWBuSB1O%JEzy zF%lRFiEK3dyRN7zG`)&(#V$0D!d&bH61eg!*UB>wQSh*dJjSN-YI^=8`1D%njf;~I zdu*DC8~lP&i8i0{qVlL7GXjd}ou&v6QK75D;a;yG^3Ms)n5b_J{Jjuu{E7o&45(`E z;a~UM%P=t5)h0P;-DmEiq@!{j;8ci1`?Qom=Mc0}qi#Lxk}G_Qa49*L82Zu4m1K2% zs<BZ%5)7(wla4FJG&IV|cbX<?4VD?0Ol-<7s)<!Iof5fO8W%OGBjK<dUJcAlj~q&0 z#g;=i9m@^pFao6}(>4OjNf;iF915)r`!ODuK|P(LNz%DEs!iuSg43xX9pbJB4gL`r ziH`ZW=qs-(0;OitKmw(7(@;gd7zqzO6RG@?Xmb_PXw^tHN?prw%}#n+GZmU>T0YIq zMoG@O6jz(ndflTwu6SyOQK4hMX6JeXB9-xwgn)wnjEMpcR)DbM{4GDycS_I6QCiyW z^XN_*nZ=wV@33(dc^>$;1|F}SiM=%sKItgRF^8*5G*4$~>nWFgT$H;DT7b3nb5pB2 z=9F2Z9wwcca~l0@+6Ye*w-)B<#DSlV9&t3BMz{1xw1!^g0R^<N#B*zFFYRy56;xUj z(xy3TJwS%Ginc~l#$`Q2HEm`D@r5782(<IYN-ITVsK!qeaG2MA`nI~JlKSa0rqUZy zhQ1E;w|i$j?b<05cHlgd?kR0mUBw;7`&3o+1?rTQ!$AtGkOEAu5Nil7hG;Be;b@4m zsaQn`vW*@zhhRw7pFKoTA{5y;cnTSOU0EHCOd$jkiWen1@iiMA_X9n{eN@Bi;STST zm6!_(!H~KQbB*4dkI9i<VE5n%#`0m+^NRY~2b-;JwXKY2W7xyVM^u#@bY@F>XZN@k z86Hsd<|C`<LN;h>dUmG7-L&~YQN#(5d~udhOT(kqTn4dl9&kZIBF{V4UK4aAa)x0$ zk)xrZc3Y0{4ok<;?a+8_Umi|V&gn1f@7&0OY>H_1nf7VpDhFrlFBd~mYIB4xmFn0j zq(qx39vRDaVoP9#_cD1^(>>jJzTx6nKK^cFt~t9rox{(Qmdqo>M@OaRQD%8$J~LT( zOv~oV2FqGjKDWZddej}G!)A#~ud@WpiZxv(QmR@XYDO%fd6LIZ!Q^^!b@kLO-zjg~ z1-E~6Vy?)Lkt@i>My1sxKc^=gRYQ-|=!SyV?j)IglW2dYVt=+^f5u{e)@XlL!uiy} z`Siy51Wps+T@e}X5o5P0LJCxiqJ<YbZB#v<-MaVylJ2&!S{GB5Xr-#Zl`Ugprha~v zW!ggV>jA^?5c_Q%yr4bEp5$=^{k#D3D%SoQ-twV2sE5gAwFjjRdZFo^_b%O_1I0ui zDHs9y4*V{$TITnEIWj~>i;+mhJx$b;E_WTgkbm|^>F#N{>cZN`9XP6MU(+?n6`5-2 zo~Je`Eq@M1tDR%<)>Pqk0^7H|5DYHEJS!oPhR7WBpqT#d3%Ts^@^}jv#LpXs&sFAW zQLf3<-zinsr9SAa&Bo&0L2@|^D>!r~!gBw~*65yy<(kT4z;-%h=)frS99zRPcAD3i zuQ&32JYvj~im+Kp66CTfJZm%6X%3S7#D_p*zZ%uO=cM`Jlv^)|6j^d8|6Xi?<k|`J ztm@c~_1vdq1<9pa(~^m8Dk5Gt*f?(_JNzg|)K}+o8%K_=z`YnH@M_1q9jJ9!CyO_N z+PMsCKStRK=SmQ0iB)yjii}153g8kXrdX#ya%E~96!Z$|R?~%C8r=zg-Chrwaqv^l z(?q);gnBq4O6`u9G0@bchp;LzqgX{Cl2sezjsokA;x)t>kr>fx6<-zg=-79TrQ%d% zd_nrlKQU41;H8r_Pp7^o=G7iUk{lUXr@1!S^p_Wvs%%wDls1y&mZ&&><PA>l=$qJE zFew3sU=+8r`eP84h=5U_<=U!*^6a8fLZhi7HPjH3rK!Sm==3fv3aRTJWlKze=DYGN z|0FE_cvL8H#Ingtv}#Xn!$-C4hbH>F$xC+AL>3mqdibS<zp$qRsnD_9c?ThU4~_;{ z?C_@A)|)i4*7PQcxjT8lr{l*IO=NaoO#ed{J=F9D(<_|uHdb{uFF+CkwH;D4SVg;$ z?u}1p13Raya#-EGiujihTI`=$5;1}d()-SOadSgKUiTvK!hG@EsxjHT{E{UfRQt7P zkk_!TzAA2ONY&6Ib5~1OTf~Iq7%Y!BUx>^rL(eaiquAGjZ#L1SzIauO>a}Z&>9GKi z-`CqV3B7D=KiE>cNR^BYJN(RXlx?AqjMCDuWhwuf5Mj@)M<Lh;Po)u>O0GZ-@#B%C zluBuCO9K;HNDoLpi@AvUkUbYNVT-evm`t*9h7dWA9w#e8d-%NgDzk_Qk+X@{)V!RQ zX%eeys{t;?Oa}w>4~FN#tu?JgPsm#`d;jvX;vG1iGPgd>)zffH&dc~H8oX>7t+6k- z<VYbT*2!2?{HSIQpnpWmmJZ_pNF{W~Il~}_e?(Sm%~dH*&SiVDrl#n_re$LFGYW0h zT4RK3S=q#OjTI1hXki&b{Fe!971qC3e2_XDUep(0%G=s=Y(!&YXD*&(!OuCmTe+$y zZ|M?08`scRSKphCz!c*>%;pt$D+^~z9lX&@+1UMQ8{sU6XM%t3K(0U`73SgfMaGAN z2q8nK9V_CJbb>T*SuT1cd*&*LI4;IwKAejK1}pN}FMi`b2NVZPR^+c<kUW|BfaDcE z=oB5u5c)7erE?YH%;PCNTrU$E<QF$ZbEe45)hzYHP^sSb?Rf_~Q^&Hz-v2T};qQeJ zrz=*&%My8(Y3ak-lPIECLJg+b#M=gsqM`u7*|Bo|YxfDtJd0OrbsYsV>|1OP=wbx< z?p~<kDbMBt*0nBy7DPcJ`-O+vEai2&?iG}2xcpJ?H8ak)HagW^Zw_uK&sx{`h3#m< z1S1?2sgL;w8?B2QByq<ozSdR5MGV~geU94LB>~k>M79D}budY&I0S-Zy<U6W8uA61 zfR7$TU%~Da6MD%vm!S49wUvgocs*_#vXsBe3iGW)!|@nbFcAKwZB-e>fm`3yx0Zl2 z+|0FYs4ZhXioI=Z)7Vvp(~~Wv)%+1fw{i5vF_>X<-6tkp`>z*G>*WPTSN|b~0<xl< z#1WTRyFT*9UsXpSr!Y<CZ{Avfq~{BKM2O276bAbtf|r^W?M;C<><VbJGo{iar-)}~ zg$tImQVG#o3FzN{<Si=Y^Nt-kE5SEPb61cRsp3q*cO0TAZQ^K8JJ7)`WmI->Ppi6a z>RIaxqfg|ud`0msF_dSQsYftf1(sk>8wlSIttz+?g@(UB5Uj!ieJL&j8aP^}lWHlk zQ%<fo!Go8`C1OdMdYN>t!q&g27vP<JlO<BT&=0so+qV;h{XdC+eqpb|553-mi5F!X ziL=FQ$z?eWew#UoP0aNatRw|Q%S$dc1td<kv!f*e>Vm9jt7Xz#-5T6W<b<5*gHfC? zV?vuraApJ5J3z|%Lyv+ON$Xu;&i|?YovSv2(ED|{C%gVjYw5yv+_jFv(F-AWvNgno zVEgAe#0^X!&b}nX4UOVAmkwnP^!|gjypWg&QN=^d9o%$bZoEy<f{dubh*@^&C$re= zFX&AK(+9FqPO(LUyppV?Yt?2MME}(yklZ>Gy<3qJ^pQ)QWpS>Y@f&vTol6;#reDRI ztflUgDU_Lehi&rFyyk!smg|;`53WJ*SS7Ybhf%)^yPzY;4!!)-hBgAUKaouwDnN;* z+AcA0qd$V;d{@V@O&lUo-KwYyiV+A2mD`Pw(g-Xk%!3h&%#fa1BMfGN%mrd(`jsX_ ziMk$QHod)#EjNSf#-5EOIFuX%M+yZE%V)97ChGyxXG3lM%8o=$KRL#^&ZWNL3(r<P z=dlUG$M$<c_HJT${a~Jh#OsJd6HStX{${~^#;iKdgc5gZG+|hYts2Vc_2tk3JR`TZ zG(o$<_n(+i4VyF$w}lx!`3KLg=+%a$+~0^JCqwAzzr)LwLoJzc^G2|}5X0vmJy5$N zlJ|)7z?n=LyTd~79O=uYT37BE>q1|h2>gV7zL1H6<L_wRu!X{u?vVv_Wcb>W9dTs2 zXcE5`H_I579@Az2{n8^co65VX<e#v}E#16~T!1&}cAf{Mi(TSwZNG${nhb@d>5o-E zvp-aT7$&Utm8c);{*4z(V0uer|DD194=pCxkc22sdEGh?RJ=m?0cG5nfwqCr-ku$q z(eN)e?%SUiCjZwkVuW=yhH`lxWUEGDpX0zVt()uT5bMv|waU#W?qdP#Aet<9qI%dQ z>%%{YPK9WL4RGW}+%bdD*wF$;{4ZfVUZB%s0ZzP`auhG&y!aq%d&IoJ0V(@``mUdO zY6B$gC%rW5Aa<2m!A&~pFZpSkULA?5$l2avx7H<g(j1lj4&x=`+zdL$M+bmyIoSr^ zeUX6ru5_+}NSPOEjgP?d$5IiVpZNlOGiBf4G$puugC>#~N%Y9H6>zrYWym%2RSVVU znJ1)vD|;&NvlUzvs%=^2s+|=z+wnSP8gtHKj<PJ<j&X|F7QLeC?8dk$>$*cwS6as9 z{Yg-6DZJ7YWTj=y*J0`W%2pFF?!PE5-5#bg_*c(own<~J*wIB}mkXt0**i%G-@wGO z9+c)RYG;nydl->Nlb}<MmhS7=46^b?!BZbH7xQMYXP;$tx_ag<f9?Kzl}mRVA~*d} zz*?z$YXkC;P=|1>-E2baLaL3^vNrB&Fq-*5Mulw$sqlx|vlQrJ{x&wk8V61M;C#OP z9N&WBj$yr!FW*PA<0syeC6V#@obd$`!0mg1Z8-k#&l$`?LY<ILh4<V%5zV!R*zXj7 z{-wqr#T$9FSr7KY9qC^b1$F=Mo(e~`5f3cohzzq|z=<+nz#X$*z?pDAq>~Yw#3-gO z<zeDHQjEHK-9MR0tp3T2{uKYi`fS(v)Z#q<%*R(=<s9^z+N8t6=~dA&{*WvMs6o18 z*dlDSjz8&5>P@-QP<i~9%6=vajYU(}NjmqwOeY|83AtLSZ@ApB;T~4P<S9WcT0y1g znH4K)g$t#QW$lss+_^6luesBxs!3EPB9d6SkEL=%LkUabIKiQ<phUX13ph&J4ei5f zQZ>hU>BjY_<*ZuMox^&b-VN8`j;}=1%?f^`Ws<}*AAIP&?Q?%AXBm}&p)d6VPWw)H z4FQ*a#86lcMVnI3MX`HHWa2_gaX?!67t&|}A#JHf5nf!o^RsnT-b6FUKe%cTFllFC z@>kSwUDaGcO+9LzN79#0=R)ak_}-<t-*p@;S~?l0KLnhG=VmFDXz``ViuU~ve;doz zVB%U(${}`VAhnI^^2}=U3aYhwb=e&>#eeD3e*5G)7}O66rIBctV=rv?q740naf5Sx zHCAClSmvj2;4+ddxxk?DxwWSh(cg?mx>G(nP*2`2HAa&a*|O2gXcjN$%%<_oh7$)M z;TKuZ3xJP^V9EcHmJg}q2DLbp9v@SAy5ho>b*4`_^r{$xaYCdVqLmNjb7sBjck94n z+Y`xw^<_qTIb`?3Qz|(<ImeFG!476~VzxN6n;r;v!W2}jEq6vF9PWJMogI3079<>m zcw;y@ywx7(X0-62H_>;3xr`KC#fsiQrZ;xh9#w73VHl)68M4ug<Cu=OY%<rLn;pck zBgmWLJoL7s%bU9ygwrOgGwIti&pABa3e>uT?oN6g<nRNjJHGcqAc|ajP~RG6yOR_o z;CjUGj+`6Iey{8Z#WMYqzONa;xHHOS3bq^OdDnHP_ygi_I^%`(8yfFjZhiP)@XVLL zUjotK@4H*4eCbgs2}nW8raNaAtbAm+I~kRTf9Mn)hRb_uMTkfdD{nRHfpgLNZ$ay^ zOi@&K1?%zkQDARjZy>vvhI@Pme12MAQMWYkLK>9&mXmH@dJ_X;lYU>KJQ#iIQTKGE zpnaMb_ju+!0p)t3LezYB4NY*rRXq;pCehxan~376p|I5ijX00t%4m04x*q6U*Rdbh zVYNGIQzX`_w7E7}F|E7)xVP(1`mC=u7_`~yv@rC40Na{>+AKGSHy`a9u8E^t{f7?h zg_^;2;qc0U8%`WK6jcHn&>Ug0>QGH87szQPlugbT+MEUorV}>2*%f({s>^U2<nCN@ zTK|U1s)!oppOLf6e)<*Fk(!g24cF;?xzcQJhaRrL)+b)PIOhbT7#f(&;I0ESjSNR& zuPqxXUZ8XuzX>!iKr|KcDxA2rV~1wG;s)$G$?|HQV$3c1Fq>TQL$CCtV7mI9e|0T4 zrt06UkJdSD4QTS^S=!?7HrNsfHM_@QdgLz6uJY;I6*t3mP4J{_AK(wP@g}d=&dOYI zT4Hu>>-68aF<QQI*PFcZt~Gz=a5d%5LVEN)lDzzJCE7gx`Xg}m6)SLXG5hj&v|&uI z^2%8Y(swX*CeLlgM5*hf=~VCdN+La<z%6&gz(s%Bz(apv$76d^(CItc|I8=W|HvoW z|LP;d|A2Q`(EYn#(Di#z&~tM={U+dw?=|wu_Z9x7*q4&;iqWF4<8r<J2IGqB71Cq4 zC$km*`Q%){Yu79K1FmAP=r7!cM^l4d(pYlX1TEzz%SPaY;-!X2HzC2<L`fgd+DYtP z=E6XkkP7==sXdR47*CWK_h1BBJwv!qN-=rJkO)2)&}BHpB_+&hxP-Hx3v<ksSIQrR z5b1y#?!@Yvs*EkD%a^h`7XiqJ=jO(F20tmIW_H(t*E&>@>!VP(eCUllS+DR7MkT~6 zdlkO#KQT2n;Rr!B&ICFTV8HU-ZSwI>EfUwObZJ?_b##bm+0Px$s3*+bE<&zVNYyUp zc=M-s3xcc@FUcEQ{zRWR+A~y#A3w?qT>Z{Ld5Ub`Zij&JNWfU&7J}=Mx+C^Atjn8y zYwmL}AON(x|8t<4A982^d!I}YIp8EX;eNpCRE#+XX=H~V^YflN=GXvVvDXV<sUKYs zp6%U<Ka$FXkSOr|C?D%lMSD`}Fw+m7@!0g<FE1qh&iTkT`JQ;=wTmA?Xg@h4ww#SC z-(|V>t^cEqS?@PdbURdE+@*1ETy#Z)f%Fp+woIGfM+x|)5uf)ykA;D@<#DLFMV-^% zRJ!TUYPG|#G*C7<xyGgzl`?wgH2QCO9Utwcj%U5P!qR%KqD7$Xcp2t67dSJQ^jV<@ zD^e3-V!Xo1p+8R-`bSc$A{drXVvReb&V_u_Vy9VQr}C^)SoIrdN7`vJMIJ2Io#^_6 z|NL~cF%nbg5c)u1ek7+sI7>Gn)#EXDY<)j{)Wyb^=+nJiLylq8$`>tvc>QSf+Y0*g z+5u<4j7r*5p|woMP(#VOk=%t%&&Ha1JI<33t0yiJjIks`?H+Fek@GLfg<HE1eG0X) zD#(s^rd2;Mv#Hc-Jfo@_TU_E&lvz9fJ5OH$=SA|Lr}nVGG2gV-`S95XUf!u^w=}$o zN4v0dKe*|mUl}v)A_#q8X%BqH5Pf*F`+Vo}o&&MuADBDvy6+BFdq_hby+}95@uFnE zL0|5v_N{-=@ek(uwZ3%T(*D84-JPo3VL5>aMTou2N#!0&o$w@mTb)X8n9lQrh2|Y< z5cjEFoH9>xhpUXfd&fTNR^}7^ylLeV?Nt3YDs~sVF5Ai=3)Ej#z|8XBW7+1Ch<Eza zpFuuKC$ZQKl&XI0CoUt`aC4<a`dc;m5q~kx@6RIkPt@WmLJ#6u?L7-h^0O|FdffTN zhNZ8>c>EYf$iUg&_M8FU#Ofq~je60$hJrh`&ca#fzf<c*Y~2`kN^I{rA$DGgllzp` z4$-KO^TjZPz%3u@2j=?1SH75Q4uu9Ff7t8}`j(!#L3JSpe+}%b83)&g!0y6g;bS_y zNq9A6M+{pnfKf#lbO?(dS{ET<Mq$&VeBZ;fU^8JldzD6vb&W9lFyn|Ik&)eFuwd?@ z%RDhB#e|QLhnc`$(z0qZvBXkD)2Go|G)$0Y&!DsE)QuZkMs3(tX1Ff9f3APvdv)IP zI4Rz_!zpp}dfP6XdtvZ^<GblU_ERW^F`E1mkMcWXPz)?IA%RDW-XnL$oyLTaf_aam zIKm1`-~xx+hz;S_h28M!oB3=VZ|G@m{j9}tp343!WaV9nav?T-p~nCsRKqb!aBEQh zC;a7a#tT5)m!YgD@0Y1Kg*>uG0;vs&{_=o&Bl<~{d4qBeQs@C_1u9mMp&s~JRBD5W zo=Xa$Ajh+Cq1;k%1Jq?<^z(h1Uu*C0bKRq8!}oM{*Y3PuWoc%jH>^*0_GI)33qv3Z zNRDSqcwVtwCOV%u6W<m#&D*l}p#Mz+vi6$UM3`CtBFukfSnb!nVrtW#ohSbnY3~@M z*}H9frfu7{ZQHhOyV5o)^`>o9+IrJQrL)quDxLSg&pFZE(b2JE-`gKoto3dDo;jZt zbHtcf#nX&FwTvGze|^&9ky;iPy)sQ=%R1~Ivu8nS*{t)eXC8Ck=-MAOZ2}w$32}(= z<Gqd16uyxd^(P2z>(pCYO7W%fgYDGufj_yhvcZn^z^t;tl-eK^n%nYCCO8Y#m&vbs z`};OV`bUO@H%A&;Z{-y~z~F^xmOnY0K4n5}>3=ckPjHmUH<jXB%3)i}uFj>`M^WZw zZ+(B|aGUWOmVNK}i@BYmk24!c1)aFv^J|NS>VTJw@ZIySru28_f6PGLbL)@)fiQ{b zK%7Ns7ys1(ZiMYU=x+ucKz1GJJR*48YZLw*OLa*{G-PDPolinETC|T!!1S!9;ujyf z2nr`N*T}T5`&(UL>@D_36Y0M1PZ}c=b6^~UB7sHrzGa(k&rn;8_PXId=X0=6-W8U! zOZN+M66VeA-oBxbTEO^NwDPOM9poIQ@xA)U>W9}IV!!ssh<8lEYuLW`S25U!Bjjro z9J&Ikm}YuOz=5^a7qR_^<sAB8A8V?a1OuUy%=21K$#_qH5-Kwk?)r-c`Ax;6IndSO z=z=5iAd%YLHmPuJu#BfLZa-3{4E|AL$g~Fywo1-Bt5!m^d=bB#KF~DZ4Ge?kb5G0? zrB(xKn9h=>R?EyZ4GkI;2=AW`;bVa7m5wCb?(q^$WZcN66NTy*u&(rZ@03tz%=#(x z?k+sBw16CB^Sz2YXZ#xW^Et?94rVT#ibp<Z<F3@d+;*nONV%v&$NuYvsp(nTcoK&1 zGR0%fe3#o242}|4(-O@~lgd0iHKsSic1=4wM0QePTE&e;K0AVPlAu=QxQ%yh=l&a# z?Q4L0^`(3F#f4wsl5c|k59SOO?ZVzi^oJ2PA?(SlQH({~AD>}gc?y8=rhfsY7IL-^ z&BH+XG<172$Q%7DN(Dd+#MleUWsemMAO!*m;lc-sfi_?U_A&{E)9`6ZCt}ed0={b| zr$n}wx|>0EXkMhIK%X%$SB6rQzCdT}-8M<*m@$=PRF<k$RjgTUn}Mfylsn7if5hta zTRCoZX<y#<*Obk#DcIf3Sr9E^@&R557bZ}EG{_1103^h%p*4toBB}``sDT(rCfWcU zSVufaUpt5rCx}!Vm_Z4x-?qb%@{r9Bvw8zbmKxY&JH7}`77bnam`P5KXK`zl3(iW! zF__l;!g}gTL<moCQAdhOMUH24YZd%&<L<8P!Zs9*;6f+T$~p*7`h?GR_DX!t%G^ZM z>X5=~l1hG9JATn^NfmyZOBZVueU3`~MAUPk&<$CY1PD)IQ9%)vZkx-B*+Qq!AEKXO zg+yeP+YnDIqJm;7{^PHo2>m!Je{8><K?k0<8yUYvJ9=^PuA^x3I>gDTPDk?aQi{+w zInAn-w#rc1J<Xz|4o^q6@mP(iuNR`(J@<_gDwks3Iffe0`8kV?sPQ<>s+6`GQ0eu+ zMN_AZG9*#T8A5jCc&{3;Mro`?yWCI@X|xB#ED6);a*K@Cp|ENH4&asHa?!s>ziTu8 zdcFDv`PYzG>;YY~jSvK+M)KbciRJ(Q4T=BX){2BBef1>~4CvcmkEx4lG#Dy9MQ*6h z5Krjghs#z9X-ds7&e`+p6CkXXi^~fQ$6>?+$VWb0z&nAr=kL5U!S!v0e`Ri?gDCBW zf!-kaFc(G+iUhkrdR*BG(Wmu%04&@!OUA;3`+gkzHX)#zGs6h!inkDKSHrRhXq(yi z=6Dt-o#bDXSc!`)HJ9PP=qZBAUyD$Oou5i}sK|>L%AZ(*B0lCxmM|6)?n~<tMd@hr zebdbrHy2|Y$BXB6gXy73o6n`LG-_@n@JD~QtyU(a5N?XsxG5L#HG3LV@QlC{azl6& z|56vKP|n;pr&x#?(~1r%jm!0bTJ@gK)YE^Y<Ht$3?ofP>FMlvAhSJVPbFnzGEmw-O za4V6k>f5rCtrB=r#B}p3aeMvLnn`R(Ylr~>U{%Ss7hoROGSuI<^!RU0rwZgzSFwGY zX9edIY1graP1$qOp1qxcpY{$REf*@;CI2jx<;v1Ov^?hO9Pat2Lp7wXX89j_9wWLH z_@?y$dldV|0t$MDKY|~VUr}FKAJFfa9@OvIk53K-j|1;PA4p#zA5dQ@AL#GxkGT)q zr^nu~L4QqB|M)L*0(WaW20=kU^uYfeIh_9)Ic{#IzOo*cZvXejT2HkFCp1wE!C@wc z^?DUsdb=u>8mzVr$AFbA9CdQo#i(l8K(|72hhLYerfpTi=Ecl?FNLzQ__=G|!jnGM zq$u=OY}U^^yzbZ8-47RklL|oEnjD8kdE<OFIBM5B5<EXW$A%2?ann7I^CJ-Pb<-I& z7?&A35T+}1t!3P4U!fz#4*t1#GVhv>Z8{Rhw)shfCzC#`AqPH%n|8i2mpw-g24E4w zL<S5aOR`_Lh6e!kK`m>Uh&g~wW-QgM?GgxSCRKX5n)Kw7%zS9D*&0{9G(R2hwpQgL zDmE+(VJ9>x+8=G9<7jxtNpDO*wHY1wI+CD~;KtcCQo)+;!5eU|fLGT_Bz|NX{9}#_ z+Cdn6YoTL}tep3J1S6k86d62gR~KR<IrF$ZGF}2i)gpf2l%I_y5)H&Il&MRsH!wHM zX$bI{%(8#8HgfJ`)$=iKz{wKRaheH>@IvK0zn22ven7dN60v(-uy4e3`r#wt)DHw# zbxY5UFC!}a9^$cD-l80`j5Q*W1gGh&FmbYrPM?Zo*_wfvH9<=GQhG;Ng>hcY1+U81 zpp@5iEA5mqr(B@lf75v)wPl;}R!(O7gIX?3UXhv9IL*wG(11RpFvNhiL-M)snt5n! zZGRm^R_K^V!Tt&Ra58>bFw|8zKYzwP9hf_gIZiO1oPZ`<w@9-z3nxi_Ho3O3#oJtJ zW^BOLtkfZA57++nUjz!Sj=mCufq+E+TLSt1a{{&9OkG?oEo7Y(Y~4Nnr&OsKIxn$c z2s$lUO|U(ywt<<41ybWO2;4$}kwU1I!4Zj&>`rVe+@@1yT#zLc3=!`}KqqH$g@pSY zOOw|34oJYFsku2A7r5Wtwf29%d|(c6QV0bY-0$u+Ct=p+tmkCcb+5TJoecwj#?4EP z%<szGfk$>;3;mc$i$AfwZ)|7wdP0Qyx%9`>W+%OKxgF<txZidG9qPoXi5jQ8n++RT z>N8&@$(OlAMi6sjoKICV$eQL4jv9_Csy5Qi6ZG3aeZi6*wzpExOw>Xg-D~)=n5!X8 zWJDta%OaaRpCy3jtHi9-3m9m-)#5l*5sM6E){y3Xq;i9!8EiWON`>07hU5aN4X&`K z5RB!8qn80p6DxzA^DIv-(qdC?Jw;}#k2p&3p+nQZ%EVSTkKB9vG5N(JOQeKs-L71` zOk)@HzMO}~%-)=tp72olZYauW^m%Yzd8LneSG`&M_h6wL%+5uj!sa-OYGDn6J&GJq zw&G~EY~wH{ZNkbg!MM}r68}aDNNSOsOK<^29Kw}DS2@>}<CJc~x@vQ2Q)pA8de~R4 zWF#uN+iTy_;FLYJ!9om-kwSMw+4dEd>J?cV?M&@bRjWXFVl+4*1iW=vWZ(8+;!Wt$ zW^-8e70LeT$kQB>G+=<dsNA%<g}i1b=NlU7FiUfpX!Crf{ugF^`-Jh|{}j5Re~TIG ze}<X5hNO?n|Fz*hA$8_o8}1{NH#Ts`svTF}qJFGM>JO@J!NgWds@ixi6n7|86y>qa zq$@}TGIGPg2?Zll?%-OHcFc=hEB0*x2vP%rdILe$faQ?z>{M2W)7dn-GUhu&JXi`0 zIXY~O4kj6-{)ckf#O$T?EBcWN+c$8LXOZ+kPo7Jdm1DxB=#_i%qiA^UoI@r3tA~n| z4cuF3rInM#yN`j4-tzgtetQ$fDA+@pJo$<n`p7`zCkLk1ic1mt>SZ&Y`wpzOF-zt{ zLDP1#9VMPT5vLY7Ns89|VW>$6B1~ddmN?UQXW+=uZzAyV$BcBb6+t2hG7}n!ohy~@ z{J@E@Aoj(&Fa5M4jZV7}v;{S@FP5&MN19~>=nUc-?z|9}$317Y&xA&$BnwhI3;r&t z$utf-GW;~VE6iFgg<kT&0%mOX1{{CU=Xxy;G&8D0-k({;Iueolut4>6mq@ttN5b-$ zvSjHHw@ABS%yX<O+@vJ#{{ITd5{=d;bpJ<Dg@3#1{(nzVw*OHyc~A+A6(#Z;tQo!- zCRR@4(1grnAFlxqU7V#b7&;oy8S=cj)I+wtrtc@VqQDD?P`WEt0EmB9Kl{?hACJBt zLj53sLVy&UFaCw?+FGM(W0S4<)M#5oafD&yVP}Pa`yfh##tjad=MM^;W=G{1CmuqW z?Gtd>439bFClv!<)zr?*C;SHXK!LqEfD!ky%3DaqRw9e}4+~S~Fpi%Sc{O`$tGMZn z%Ij$j6<a8h5o&CuV5|o@_{QpIk`K7UDGi2E^yIDRIEsl<3f8IkdouM~$=yS*=EMND zU@2Q#N)N+(5)@Ezrkruu1nN90<WWJ<mh*l=TlfGDGa8Kz_kzlsEhH*4o7w6lnk6*# zXr!VNWT}8IK@zS84Lf3!)__aGyLUaIrsT2+3T!jUdoFLCBArmlrWgplL$3q@Cl!fY z8A5{MI3BGkVsR|{QrJV9>*@7)tC+-3_<xB9MbGJA^pAL#p#M%h=Kme>{#&{_J=g$^ zl@;NWKJEu2D<d>E3o>z?NWp9d5|aT_MA={)G%#3xIB_;vsMKs8cF+U0mf}{uzk2v} z@+)YqOsJf}suI;Ejw@Zie|Kru8P>Mx)#<&?`rgc>S`-%+9DCn%Z+4yl{Aa%b{!!HZ zelEfw3h1i%evKl7VvunTB&Mv`>W;SrO7daWcRozz?yO;P*#>|C$(V##T`xcab@l1d zC;{Y&n?DivF@47X)Ots9oEjuHt&UX~s!pvL?<%I3LA?BneHEfzQz~};2ylW<i#5a! z(_X`%+^ml9qhl+PzHt`mNM{Zx2dT}9UeoEH5Nn@3%Ew<nh6tB$7G|q6ouH^NK4zTj zD+aE<QD{ca{b9gy_hyBupOq3EtFN(TH>~BL&SEo+(njx-gNS9?6l!Wjpvqcp5{3A4 zmkYC<J!Yx%^l%?x=Tu?mo`Gpr>(+m(H!RM*gGU>9^Dyp9cdc<3@YN#%Bz6fbLd4of z)-8?G=*jXAD&3{zT8qwfJvpK?8pNo#psH899iuavp${tF=iGWyXX@&(u8Li~kG*i% z9V}SC_3H_->`uw$cD-}QbhdhHuk@i`?N@QhjNPW&Dc`?xfFC&`H26-HzR|d4!o1PC zBZBnT=+OrL^VWL!{SFk;zq4;L(!ZlA^CA#VXx#oCBS2;_%FzY)TKg82-yj4(>l>Ua z00X)Dg&vdG{65M3gp>)1{v|xN|9FmC^8<0UU-OQ(zMyTe^#x&b^hT%IS~DQAyFmLE z691Acj53GWZBBm6z;5i%!IZ!|vcX46Zo}<r0Y-o(aMd9>qM_ymirGgU*sc+fEBrkT z<aemOxsRu00QwtzM8y5Y{HQ^EKKSGC;{5>~r#>dtmZ03DG>GhQi?cZ{jQOE5n1u0> z8T)NzBy3g9aT|k}zyBu8<r8_KjQN2;TG3<XdNx`8mQeQeL{EoZSKF|rqpoKdvRk>a zzj>UyaSqR=To)G!K6uOvb7om&LU9f+rTwbM{{eHL*07^vq}p9vT-(xDOhC%bRnc7D zV>UCYSw>GMkF5!8!(DOq*cjO3@n0!x<<M$n<4VpGaB&0b_38t^(UO{o0{O&(G-<X3 zGJKp6l@m@wB|aUm>iR1Gq}S{?qz33odOCh?Buv>|&}XiYAUHpAzw+soOl_2esHkM} z07F2$zlJ8;+LV*y+2rY6*;iN&lM!BB6}c?`v6&`dshTA&ldb-Ke0B+3Q?}!;pERi; zUEVl%p4V1jtgESzm7|dwXcN4&=f;tcf%j@@%i)`gf7uK)HRixbOt4cda>-@Jv!AuI zd6FbUmpzYp<3fLz7i{WZMwidc9saU<6C0P~dtjpyBPd((geqbDvMB^DI?bY4I>UX) zK9!*2V;wE_bRxlto|V=~@m{WA51)l1kouy7=ww(PkFAD-_~ayX%>CT+`*W;y-o*7@ z(gHP@ktuwLs?!z)KK=1#ZgNFKU2iqH$NQS$(SupR{bFvNx3Uk<)%Hd|F0v1$;q$op zYuY^U>Z&fUss2qxlLXE1w+3EWb}oOhL)&JeXnwd-_N?j@H?{CY@K47bvDiFx^BIfE z3=EV<$uulfd;Fw~)<Z-nw%nYkXkk5UyC-HVWm`r>Zts@Yu!T1j%NC$V&AD?K5m)En z`(21dN*(UZhD+r(aiSO5OJ6tOvrU%L)@!XjaALRasxK1i2Sqc_uCt?rPJU(!$EC9w zc2;##;Cn)=h>N~WP5%b5BP{26zMv1h`R(R)(e6pObm{6E5&S(A=<nUi3}Fsp4>^k; z3muuuQR`>`U)m1cD3Vt^+qrdGsU$UVBr`#;fsDb(-$+tb7kwFuS<Q&O>DHbvInawH z(fmJyvx>q@4Mbra|4f7@5mFO=IUW`)kL}7pDeOi!UUsvj2<s$RKsPy>&5KkX+Q2}z zr~FNi9PU#BS4E|&U`y195+rToTf=oMQlyh5GfqE1DM>U&-o=Q9nwBG)!uO*m^fzPY zwc>;vn$A<8+mAH}p@Xj}&pWs2AeY(O+&HI}Y{e0>fXD#_D|5;25V7OHfd8}ZOPgWC zIV3n#>RgCB#kkywSZ75>a>Q!0aV|!<2lc%VB5j`#pP}5Fg-!Po5ox?n0r3}vkF)4> zUq!l+l}H73l%jk&{89Gki^^P$hXBt0RvA#d_kBzM7W!>>%k`lf=DmxExD$cR;gb~C z?{X)E=>tJc1I7^|mK@(_A`YJ-!ks9db;tOjjE;7NQ~-KZJ@(__O-+!uie*~;#Be;P z5r%$9#{3BGhj?Xn%lHx+-#D%hSR7wY&WDB8ER?Z}+%h4%k9WG7T7y1%tO{mIIV`@? zyo&(l5EF-D>4P?u5^2qTyoNY5QiZdU%tZ2jCynjsxEN;&Z6qz3JUSAq0s8t-RSbbE z0p$cZ?&7YZk32g0d?E|qJOP4hMK?K)a{0Ct+w^oN#2vR9dZ!r%Wry_H2l~bN!MLT5 z^Kl_j9UIPLlqde3G)Iqa{BIYCE)G_y_?2+|Thew&81HCKV+8!Ikit!D1W5i(F+x;t z2k&c2@5DFdB($+|s0b=57`K?q!u;qiaYb1RoimFCpwmW(#_Ih3&SjF*-}e~5czJL7 zCfQt0Dy~v;h0Y2xDtoio@rw$(;Xurk2G}GTl0y02F*W1Th<j|XuEDJ07%>Iu0TG7? zrP@?3yXOloop2JcB@R`Fayv6T-V`1qg;f>t?ntHSg<GC!(JZ%g>arMIvvMjW6v~{e z2=wvB{YAT5OoF``oK+o0JgZ+93W<?o*IdSp?6L(#h40h*`}@BR&PkU<Ln>p|_azX& z;C`?h)azJRbqLD?#kb=)0OK9(Ee%M4MRM|FZtRImyTsE&=_MAT=tiuG*r`-Y??-^r z*t)OTXsYAJ2c7maZgs>4RCi9+r0zwo9PQNvyboBTm63oZ5mb0iRXVJul?+=Rt@uTW z&O-cVi9Hc<%q5)}iP2C9reXB4{BXMADUaJi$ZIe5c8@gIZhjAF+odHsqC7kj_SUZ4 zp&~9kWpef->o6!Z+a{gjqHs51l7>=w9rmLmzr-8_vr#Xp>ztkg8*iFRCxq~cwrxc~ z`{;2N|8pFOCm|xEpIffPdUdzJ48fk$o#fVFGQZd_w4f8uU%4sXKtaYmD|t>;S|zb@ zMKO*a;?R_gd3S^uu57mUpSvQ}F?6bmLhV5+0;S|AoF1CE<6SAWRCoD@DRE*RRd<k_ zO$t0`1ZYxfSpBPZ#aay7BXEk#uw8G7<S)pP#fN<QpH9N2YUbpmj+X&A1><XPu=Rt~ zGA@0oDFGQe+ezXNyXVDzkw1CbMH*wkyZ;bc0bPC{Cq}~D{BCr&R%4DJ6TTYbSO2TW zn$dOA5fc+xhmjJ17}TJMegPv6YY!v78i$A%FfdzUuFvZ1<QGS!gjz9bfgG;j%%LWu z=zx(M{bNsk#46UVI0PS`V?hRz^K;7~7MGu~-ry$%5QdFsa&==10P!m@>XH1=XBmN* z9E5#!$Tr^fX@OJP27^80H3x>}L4Q0BsI^cX!}Z%VxltzkrN@d$^5x{vofC4$>xa2z zvN@LXMt$@W2P#$y&c$2yg?mCH)o*P#S2XOnPMQ;f_PRVkR6)`7c=h1LEtJ@xYNKhX z8G4d%`T7#-eUcxS=o|MOCzTvT(8&0%zaeFwcvzBTO@;fdbQ%)7dvG@?O?u<<%LY#Q zy4F+xA!`5Eb!wLGA2cM#6F{%=Th3`2Jld5Su0!eV0sAv8UpYV0-O3KC?V0poHl4qb z<t)R>(%gm$iA+Vn;P)8%%78o1vHk|#Y%D&)j`T6&UHzyxFTK8Nqib-Y`WA93y4GS7 zJEiR8wi!3t@G)bM(lx38ZDoa!`o2Jk;PQ_0`__W;gce&HpKzeX5#^u0c<JrOAVLVp zke4S$YUk*w95K*}$X(I?$Jzq}J?F=M4a#~$1gbs|VOYA&z`epC(5ch!V@VFO5cUtg zK{>9%$@J1vm|r}U4fi-Z^l!phl2CSoKHo%B^;ixzh^|;FwvnlPqxWkGsxgrs9%je) z>JmUuF4jX$K__(Fm=rtWKelCUAbI(e4b7>V$pP!9@yVd>auWy~;T!zWS<#)kaCIn* zY^YVeVVr;p?nTcZ+!O{<DJ3K~I{E6&<g^%)vE|oUu~YGDqItfw`EBgE=<MWO=+kd} zP<_XkGT)@8Aa(1;VbsQd3nk)dN3uZ6=>oH1_yw3(>IyWoK3E)|3V!d|mnEToD$u74 z&g1z{!z)=GwsW<-43!-hr9Vw+PT7PHM5n9}A=Xh0z-GSUtRD5S<>$z+%xh&}ovjhD zDsn|B(yp*W!`t+gU<HCFKmE{?<Z+57Rf8jr%pZb!ETB8=@vQxgD&A|DiWXlAzBhs~ z3K#;ab-fH>fFaB(^gqLDZaN$m9`p0rTg&n+i+ZQqO5fnW!AXUfXDgcw4VWJ{P8h8} z8WL$H0gD_#CnrJ|>^`9@R71w$$hWtTmG_Ru?&FXmBDP9b_uYPo+kgN0XjT_x+V+o> z*!NSahShw8HdLayKvU+XWlxkdPwS|tFPvAD_2)VI^}c%QfCBmqP6ps3q~o+zXCj(n zPGlt(%?etMRr0fWCg=tE^Flt5Osn`IDJc8;=dqZ;nD^-7A*a+`eifCDAm(Q)1dhRE zq8@1^arvxph77_!;SBA5h8S*pO1uLe9qdP2e<R{7PrAs+G<BqF2W)F=ROm;Tku`sl zHL`@=a0pk|FGu|I6M$wD2C1v-zRY194w}LwKAs4AKgSS{4^}>S@ZN6d$sVMLPl_Ix zmg;+1>9d{Pw@_7Y)&?_mD}B{xRH+wz>vz_2P{hWMQ0=o#$Og(MVOhtn!Lv{2A^m~x zUc?{2FT5XvcCj6MgXU_#&3@lpv`!|ON!;A{6-?f!%hn;M>N&l=Q3uEzNiT1Rbx&zv z`@=m4uY@574@FE$;$d?!T^iWrixDvvFZkO+4)s?)1}98<H4eDFRYxi4K(EisxH*Kd z&O@Q^a*T(uV2Flmec%gm{Uuc7H0&AN?<7vo=i#l{>CBr{-W49%knSqPQmO1qt{?*Q zA0$<QLk^Sd`Zd1<fA&ry9z2$^4nK?}qNTV%Dnq{ojRY1NYJ{@`y>1UL5aB;?mQjWl zCvQd8o2+hj7CB*LFG?J*(+zEqn9`d(CH`)L0T%do$R@KDdlaRr38qG|`s1fXXIck+ z7#`XSPuc}AS@P(W;sf&0lk{*%k_DD2GT;SOAwu4i$^Z#|PfqX2T<@>C-Ya@#m^}%c zp$nA(JpV4AUZ7xroQ6g5y7-axt+BXfmNH|86cH!VAnR;$OV=$*slNbZL@!JJ+$1Y$ z5$HAZ;=3c!m_*4R`tC#VWKnV^UE*ecg0yMUxG6Iv-AB>{jUuAZBZI5337B^ixX{(} z=Iby4ihAoiZJ{C1Tc3<=m0dC*CL9_icfIO{@M;-O^<~8VHF*+straFuRZj-eGj?f< z;i31o1#0^+Mh7_DZl(*^mLyy^KHV-+WyE$P(RGyKEr<i9)X*(S0P&klD{=}QF%{f< zm4L`MF~xboFm~jI1U0TYm7@>#nJvzlM9D*L>_{=B|2+NQK@PJAp9V>~Cce7SwV7R7 zk5rQ-NFPk>^_-=$%LrVf2tVDSY_!@PTi`YM9NvR`EyW@1=(0z?%FyH3s3uEXDK$BO zP<<$7ZTOc*pr33(wfy!?%MJ|v0sZl*+)~BkkinRM9p5o>X>r2_JiOc@z;+~HW4LkN z-n}Yyii&sXS*&X6ShFm(MMy`2V`}Z%Q7vZM)?3dxG7T=z%Wwc(<$A?ngEZ@Waaug@ zP%ZEIETHskOM2{L#$}@3Lwi)Hl4PNKuxlxj|Ee??8o*WYMAhgeo*?hVa2-ZzpJ#ht zF4(x7C6|{WW!)2};hDO6-JC{4-F@j0rpXi+msLe&u$?U>k=e}vOW}hOTNM!dac0Yw z^hXp4^id~tiVW;f7h=dA)@KUF!M?H~pTrY<@X!iuZV5(+nd-DB9OQuyY)T(SIG^&= zKZ4}W6Ku#E_Cu(c5XV?3Yz}1)K7CJqI{4d^DIkJ~CzKsF_n6d-60TMZH*?`dPQwMf zx&ze_N0R>wgtG@?>5guCz@8P|8ECqepz8yTL=D>){+(^*6Ftom7VgJr6)E{Sjneyb zs8>Z@5!ie_Bwf@4FAY>!(i@K|m7%1|4G)qazQ-n3$f3VtL7@I_AuLztxu^Q!y9B5f z?d=`WI&8^4F__B#13%T<wWz%RGYG1AY6qU)Ov`L<5Ph7Yvf6$522AoAiY?CrS+S*K z(a*Guy%(Oqfvw9oxz1R5)Xufmtt>mr$+cGLjjL8nu?;TH7Sk@Zh~-ej*JqQHsYagb zN|e%n9>>DNP&cKiqC!S4nj_e`hP1fYT|T+Pt&pHv-SWC_x_9Mp2e^ezmBoBH*DVn3 zY75hM6u#Xju?xwA);yjQd0;a>$htdp#{xw?00Dp?0)VlzBsG!{AE&l5j)Lh#MyMo7 zHWJ0{X#k)ScnHOKz-NcnU5N5wu#2#n#&}&2XCrc5h&&Dg*5cszNSH!18xeMf++IMi zOTy(@pfmSvnzvv(5aJrKD)!s}A@t+<7cQi_uDJPP<Q4mP&4&pcu(|V5q+9VPg~UG; z>hPPg9e9F~_pk!++V|tuVjE2GfrSmb(YQUxp{3HLH`tBmPaTW0kp}a|2XCgS`A7JJ zdo5mrbiV?@HC)}@9A18x7B>C7OVZ$5mEhBj5|h#)WThm`V~AjqPjN+vNmfJfdP7L7 zk{C!-9UnkieD%sos2Ene3|D*+gxN(}OFS9q^dU+<cqm{}hLpA5D-93Opyivcmvzkm zu_uI=zMjzBk9PNAGeV*>0_Ez7Nqoh^iD?g=7FNZhC_|5?V5Oj&z*@a<x=!^TjvP)t z<FRB0bUh2LiMYrKcJFqOVa4VJl2;Jq^5Ffwbs(PGahQHS`xV%2f;Llg6#?ZHEq<&A zEQ_j;g46H$X)^K$GILR)e^u|$<~-t<Y22d5+E8u(fZ45uf)8BEx^7BNZkr6oGV-i| zuhS{(YM-Wkg#eGpKD&h6P)oXo_orz<uES+yo1qEgA}`rrP8`m;^)i`Wlr8uoBO7m8 zwhGvaC$Y6?7o&_GIx7@ZE*MU%w_=7TQ=D9mBJ<mD@ypELVqWu((+3ATEgd0wL{oAE zc})?C><T6PY53OJ6U3l9Sxz0}W$fN<+%pGqOSC~rw6k{``xtYwqIX*w7><0vb=he^ zrhub0VD|MBtZx=pS_-y(ud^eK;RQB;$T*bnC3+l1Hyr`j$`_?PMR!Mv$c4Xj&oG?J zTfMRa+R6-hT1-rO3;e=`*<mDbcMQ6S@SP+yX$aQ`Wp>bb5c!U^0}pu+(Ff;xz<3z^ zg@Sb2dC&WWqbCGI{Eqhp!?^V21r7IY%4TqthA2qx?uI=!s{s9XfauFTWqzdb9vA7Y zLD8-f=>g<WDDuKza<O4*2`VAx<~z!i2xfTbyBjoJGHC?tu^6BkMrX3b!rJ&dw(5-0 z84U@h;XEQ%!}P>;1gE6n=t>C7Df9#r?P!>!0+gl#L~a(?u!NC7$&P3`qYWo5Gu4OL zB(K726qTg_2=>zuP+Xmv>U=5YjiXoyycwvF$G5Z<0=J;eIx~{SmiFb6cb??8mzv|G z0t0C_;+U+o8fvj`M8-$F2s9YScp#ByAn|A}+NSVfTnRn*gna9**j4SQjbjpn-fcGO z0OV?WgrwzYUxv}+njk_PgZ8uTa;I>!s_a0Xaj4W&V|h<{KSQgjA~);6YBlBf=z%LW zAxXtNsW2#oppR5FN;rh#?S*j`hrBGaY#;v0=}5249|^#EzGbW{9Bc7vKCQD@h>((u z6a-NLVr{t5JFZJr!-P_8#CSki<&@5m4QW+pqUF^*5=7E`W-T1C90CQ;?aZSL#*`6= ztL2q?8N&_e1ujSIQ`u+k2&P7KTOQU+KW-K#u7h>=4R}-m(C{Nll_)3Z)Wa-Oha-wu zKy9m)Xw+2-jfy`;KuwM}S%)^C1U*~7FK?XY_<#hZWZ~*EwCuvJHh3co1#49v=1q9v zt58a&DWlW#P{=@+tBov|RaP;SzryCA4cz$LSy%Wo&x(;F{<|kh^HjD`B)_6B0$qLu zqxF5NeYMq_aBmF_9%+$xY!yRi>ig|sLk0M~n_yq9U1{p9BgnNc7y^gZyxz~rkhpqX zpwl*>`_oUE+^N&NCcV$``V7An4u8#8Rx}07x#>=Gv_<ycCkzB-UDpG8&f6=`0Jt5M zj=~bMVbirsh<i++xpEerBXZap5t>TtfJ=?4hWGJpjM+7e-|T;}X3@{+a;?X+6{}1D zip+*uZk6W5Ta1rVc)7)^b~d!RBW#ZzNfJXI;(n-OqgfW)ERpxQYoc5BI=IxdwfC$X zA+<}gzH6Xe-TjE)^B2f8QTu$f%oyCM34b8G?%dsK^an_TMC(@+>pk(~vHyzXuOU*J zA%_FW=V_4!UiY<c$?tGHmKgVy?kEIEg216i)NjK{B(UZNHurg7a(zIBQ2L{O#AWWe z-$4(>2p3Zr4SL*BPop-N)%zfh#c;bc`=D3EwKr+>gdOc0)}r3*$=wOnqy7Ls?cbbY z6Pv`nP`AY(v(gC-Jpjji%3ctD&<Ty<1F_f0`-Y$?2cjt9iIOP<XeM4_Ehx9#Pq~Sn z<An%0LEEs-c`*ooXkk0h97@MzNltW0PB^Gy9XO6!?v3Hr<ZB<+9&6(s*&AD8AVo>+ zCK3q=YuzB+4)wg4E5Mr4%OHhz?wMo&l9`Tz#qmHpQ{k!POH3j;uzD6DvZxcnAQyes zC=^4fXbT`F5(PWwITw7~-e6t30mOO^EvwhVB!A=yxszF1?RAmH0{wS`MvHO!kttNh z7VyLJ1(`Z!`kfcXjk?$y*O=DB7`R>oOhXp>=j<7GKN_m>M-hFpif4!w{L;EIJ03+b z+QuyN=a>l>5yXCGvnbGoFxUzm%D|hXwj?hes`2RRK|HDPzLe_0$W4*b)rDWF5qiiy zxwN*#E<#ctXEk#t)4Ip!?6IPmZnwU5nH1kWsW1y{LFy4-8egn~Cq4SmI4u4#;+a2? zH95!8Dp(eaLMaqqlT&CNvZ+cyB7qo_uL${?gPTG0&Kj&ks1fj^z&~CfUoRQ&8h^kM zoi2fH0uj!`0na8PG}OSOY1sEUIHQ$eDeRY*BP1zxOr~<AcJx34w;s?qW1vZyjpSWK z;`?+j)OZs*{Z?7FIQC1;CtusR8C78Vvv>C8)7Uj{zGVaJ9Tbr~z3(v}4TO&d5~IXn zqs3vP#$lt!WunAoqQzyR$7v6!oyk>Z)Q7Gtu3$t-Q4wOCyH*y82v>%lgAHxbk+&r6 z&Ks#)4As@iNN=7GjU1=((#Q&zfOq91ol2>c<&LWdA+0aY?4~+}+%486GjB`bACGcx z$&ZbY`l!buDqn|<jT;d+>?N#IKGr>HBYl-`Yv%?US^%Yz?k+1aU0F;pJ&ApLE1}am zmx;B?{G+Fc_T9K$eTiLtg<W4k;*04=e7cgc<@}3u{E{_(L&KLv6{`7VX|xjmmQ5Of zIwJwl2`Z_@$I35QRM+uDV03;i|8%OZdmoPq<M_*Q_lR)!$Z+>aaQ7&1_XuWtExCV2 zxqp__a&r2TFU+C74(C2MlE|*utNC}+H@)eXYwK?~^9HhQ=^X|F2hj#}dS?`R=MY1` z+`{WQ7BxTUQMntj{6`{%v@fuSvcD7a-*A?Te`4xbUE7#g*Q*IeeqW|LbecN=`BHWL zTN|OFo1ameo|(<A%+0RQ&946WN30mxupZg?5z{(nn(_!qx}4c4@fNFtk8h3$ei#uT zr;KW^cX?JOoo`**GQ3ZF)#KE$GX5h9_+WhA4R~WZ53L0Q&$EktRzJyJ_8mVJkoX~G zjqXXr#fQ99u+RzMD`4R(C=@PnXY%~oIQ`)K#LZJj2<-F}lzlLZ#kI1rdr}J7mi`+2 zNHY66IPZ*ZR!TnmO;VH0v`M1gCZ1S32*C?3;6^o_`pcy6G8lO8Qknj%NX|<v4*-5~ zbg--83-Mxs-7-#IWH=iUEdbXxQL^XYivVCwih#G|Heg5!qd&THsS^OL&!iqwyr($* zNv&Qi40-+Y!6XTQ{BDUXK!u&MvCT8v5{+pECX8E?PyjOOqFHEsUIS04d>#6@eT!eR zopy*pj*D}6AUeK8s#w06B7iP6Nj)Ip%e6q9gs$**FjElda91g`+fMAuRQWO2GLyUE zQO(Q6Bj69}PvaqHkwGBCm~`s#vMoi?P~qS3T7s=KN_$)n?|}zm&g*g$@@EIyG4K{6 zP%x1AqZ~QEsNv5xG-S+JDS{#FFWN|kU<VyAu!l-U7Gmymv2l-;dZ79sBz{$2`gujX z;vR0vm+-&F=S^eiX8S}SAZVihZhTJvAC1q&P5;Lw6``T8jIN6ErR2Q%lhGSxqu2nV z-5cW$3<j$>C45&LKc*+kkvARK?ATTT5%8>hI|<KvCyEY<YW}z)Z2CdI4{&5$4d=)f z<Uh&HcJ9l*YUnra2gd={5?|rm7a?-zvc#j>I>{E4lk7)9=MbxoV2tGMii_oxj+A1= zzo90tf^PjhP7Gy*^v3P!8Rzbxr9-HLzj!OpuZAnh(qo}BOLamVWHd}?h;(9fI}hr+ zrjEC-ZyCbX!$L@7*5Y>Cnmq3$^94XM;dHgU`kAP5!&jYjdgf<V8DbtJK-i}ELd~U{ z;+f?XiSsLy-G|ylt4ZlZ>YAJ`D_Ph0(&h@QSL^wHEhk6xx_8OQCC4&()SQY`gt}t( z!c@bM))piGt^6%p)?#_K*$fDMrz6@W6@Ld>X)2hg0WpZGvPKbX-SQ_KJUuheuUQxA zoC*s}J1j8Ox@cpys?Ee9{?K514qi1@8|~7Xy$fq5C?qEP8OaDC%ve7)Vv@^}X`d)s zH!HVIaOl%$gl*!#RODJp&I!taZdmRmyZizGR@^G8XG15KM=cJqBkX;Jm<<ExN zsA{MkXY8Qh1^PX@W#>Xf8>@b{^rhhxDi`Jn!O}5R$WwFY*{)eMEa(#pW<N?H4+yOd z5H%BR;*!YMs6-(RiV7FfzQHEWlLC+c$TsBi_UgzuwI|P0!Qve_I|akuDObZ!d|&v0 zL+IEMAfaIB$q{J!oC^<egt^xX6I)ZGp%3dF<PLB|`Nb<);Un02Xyt-0yucKi)Yr}| z%Vnyo_gcIXiQ$UydtLn3BZXaJJ5rnX$F+Ib0*BuCbFxye2b>x)sU0su0#14K0Z-i- z!rNUu$Bde@yhpdf4_rWF11#_mZ<XIyQmpfo*DD-^bD>9skwaolQYHT)VFc~nrYhx? za8vpsrc_iv9;YW-eGwu<K`onST~!QWJ`X(Xzx~lo0yuuZ!9YOnA^zQQVf)XHi;bs~ z{eO9(|0iKi&CvP3EUsf<Q&@103maPU3(d6yc*Gnj=V26zIUId0tY-%;3ahOw@@>Dq zm=rP46yLz#O5(k}U^xe-viYrVI!|`^{lEYIB@EVfQK&W59?pk_SB8g}b6ew1Q9SKR zM7p;*yfcV;A}~618CQ8c5|IIB5X(fKpJ{(3bc-_y{#A(Rd-OvXO<@jv3L$lD7h<<~ z8x&zlR}Q2Vk}Q!&&3~98Wo-*=W-zw$NJyn#p7<Wk^|H_KJo6%To-#6IX$U<WHOYrm z^`T4*+*a@WrcC8N8B9nvWNc|njEyXhkoIvX3TG2{Y&sr0ebWoaYE%7XQUX-rk;8iG zn@F}>WZMuu?KG%1J>40_qm()z)h4S)cUA5{-a*KqXeEx93IVvbYQirq;RFa^xrtEK zj2afFI{8;F)if-8i#V5_6w}DFA}Z*V>E|hx>srG-lPhhJaHNnqq>RTbaa*4`md1cH zSXT&2PM#?w2dQM7($9y4FvYsWY>PRTZ{^~DN*uo%n2j9Ti|KtbJOxj;_U`q3L`<8h zJKKb|k2uW9|BYVN#QTxlo0aMiy9M!T7b4PqwnmXv*kSXLcnh0Hd-?HSnS{{SGH0Wp zARxT|)*{IJpHbrMWMTWSSVB{W|EE<jPkqyANd!gkB7AEtm5XuJtwA3RTZW!UG@1)S zwd!^sCZGF`i*=)({-!I`c-J|(k?tu3dA9`Rms1E_c)AC%)p5L6qV=&)|2NMUlnJ;f zp{9ZNaU}Z`;<C$<WILeK5ST}I&CWmsca(%i2;@>~Q3=zKi+tLqAoPxCqr1Y(9rbfK z`U*kQ^2(S$P>8qmrYCq5CMs3NJ>R2tq+T2)k1Ri6U%y=qjGX=M90Eg9B4yRQq~Q93 z8cw6dJN-O+Ye|{>r8D--JACrYdv2ZOd!E8~gEQGnQ7p*eZO-_|>Rmh=X+%Y}9F<C! zFSWr8`sbJ3$sM#SO=We1G#%^6tJH=pn&zH+ty#hWS`L9H2M^CN&+%Pw$(0GTd&@xf z$zN{VfdTK9pSH@d=B1`<`FRx$@muTUk<;UuLyIU6-{oA^$7Pr?G<>FTb6+Mm6{zn9 zlNlQkLCr5+)(qE+OH~UGbVWy6$`@TQ-g-)5?9nZ+2{ttpvtX}Sk_~%B3OmTZ-5YmJ zk(hnbOE3tE2q292jyiS&Xr+(jReN<<x^l2FoK0~zbwrc=bcz8{QypS`@iiTh{y@W| zE&*Q7$@<`Lh<~vn`RvIF{D&3He_K&x{*PFZba1znwGwwQ^>nwCF!eC~Z*($L6y=9S zPy#m_Y~tJO1pQD1bR^a1VhdZvicU!f-`fa>e_oYeI*s%n$=>cF-%7`%?aHFMB0u;z zTOZF%zmHwu2Mc+LEjOVSqMPU!iYm*~yKu}pV#y!0CginGTI6HNGYSIra%z)tftj*= zhllJTIS*jHf8<kR%Z=0F^-d;fevqmNpKkv;BPmD`@vlYL#)^Yo*HGf1H%-O%lH;zX z*cNrNnylH9F~lpFJ}QZC3|#>+45{g-{`zh5qmnRz2ucqtvA!%5EU!R~gDsMQem3PG zezDaK_mAQ+$I*=P_f@>$^2_-y49C30s~!x`J?CTwj<{8Kd}x#J3)r1OV1s5=na}i* z>WT%SemrRnXG>GeDf+*}V6xg<$Noo*oqua4<o-Vq<A1iLYHz!vYhrwFTcjy2mPIUL zgau$6mdNUXVSu-(gr|yeI)-S;frdDCDPp&EyLzinMg?eTXndGR0ip9;NB2aDJfN0n z^IQYy*!y12OV|^?BmJ(+&!lOxVyV*HZ}R=Gc~87&*WI0iz8?0HK)4PLK)6gAh%Xj~ zCWMsG$n?N(P5Pt3L8E=j5E{rPv^OL@AXFk}*$75Rh4=|bys)uPj}JLfr9Ubqk_wjF z9@ZB?{9NPH4gi4NLr*0oH@DcdB{B=tK+xKuAY!$E%M&OJA^cr5ThuTzjYuHujM@g2 z9tW>I?Yo7(Rq}?1A#04eZY)s6%JSX8lBQ&$Z3smP&x()gqRncQVN>JD!<6y&k${)7 zAQ!6!UE+0p_GhV+>wUZc!&q}$H88c>GR*)o^CHI)*sZ>z*_~Zf)@I>9(W5ds&p~Nf z6X^te_VDD6NMeCuloGbBld0}nOd&j1pLXh0CRge#TXRQP&2UPhuTOn{M+cJN`sEi( zragIRDba6rj>wEU=p_%{d!!66Y(QFuw^7H28QRVaKLXe_g@}wrz~nG4_i|>+UGT+8 zSX0&5l$s>~Mf)zbspQ*BiSb{~Na;jA*S47{oa%BllT+o@!1;I0>$ciE0;hdSMpN`z zIT&&>(pWy&r)U<2ysBrxa@v9u$~j8T$jBe{DP;T?Z7jhzL}*3wEXgUiPzsTZl<Bz- zN)(ZnjP#q46Rj%K6PXN=lz`#raI4FoE=1TA1|yV_z3_h<I<jSa&@(9wL?uQvVOJXs zhdeoCIzm)oo%hPa+g~pUh3rSV5vCrXkm+g3>-eiH<im?LV5!=LGKzcGLqH>Lq1BuF z7V1^+Pt)->HPT1%VB2r=!~foegl_@@qLbueHBlMP{V4lqBjRhMYU|v8UPKjirp%n@ zUb&5)L0#)9IcF?7#*zq@y%aQw&Rks|lDEppsW`e(dFKUM!|15L;DjlY!f&TDMp`Nl z%(y)C+kk%KX%!iwcI@^Lu`v|4ZB*y{+-9q^3+Iwhe3dnsTn;%iQ0ZJ1I$JB=h56|x z>e{S;IIhU$L$EoNB%LaOS@B#9KQOnu|GKVYhI3D|=`r>5DSeSw#4x!4-%pO60gawP zMNZbC-`0X1Ay-})03bX}o6FhhEjw&E;l`dFLt590%AlqE2rn33(`){%dy=j_Yk|@G zr;`}tZ(;eZd2N6`8Aqz)A@8eqQT4N{Zek~i<XF8~4iqIDTT-4b;97KvXRLt*0?+<* zs3YV$-|21P4E(DId>r>8&zcyg^&Mwn=CK7ol)Re(t<K!s1oau*0MNmU+E+mdC$wPK z)eMH{VT!m^g+7R;rk~*0(v{KSYiYk%%)FZ*Av-m_6Fj`Fgy)4~jc)`<6_y|f;m7j@ z`AeQIO|^SQ7?xS9EOJSiIl6nX8~1c@+dZ#-Im_f$kzGH?Y)<)HgaxaYkXF?5mcg-z z3yW;)63E@Va>0U(vd!91slt#$@wWIu5@D7MJ<%XOVk?0zm?qFI4**FBQX|Zg(Dgtw z+a~wf`b(|y8$SU>s%n@Jd&|{HfF)6~WmBK{{#b<wJ8a(&f)<593<=X!G}`~VC~3?B zZS0jL5r|-1yhQjHGH@xrVPX12^bgO^j$3p({Ld%SZ*Ydd;A-AjUUr!re*)l_DslJU z)#1Vuc#c~Yg;0Ggw@RnSh=2uxpS+Kq1Y)xmzDRRX0iL|I(eQs8ix$xH2I%DW&L?vS zejnb|S{C{uF^3EA*22U6r4^{T!w>Q<o)za-VBe*oJDnRx0}Q|cC}Nf{&V}eUFjl5O zAUP7W5Y*Ua_c1suSi);OE;<!|@q668!cm2^-6GZn#-YaVferRW%Nh(Zdpx{gW=<R< zHv1v|*yVdL!{DE&77@B6llz+&Ff^}3&RqZWM9_wUMzAIZ+NKiB=(6@Vj_w}4I-CD7 zG$58ls6<$&V2*9Sm=AJ6P@}4_+H=8KkSn$2w5Q+&|6g5Xfo)D<4-y1~2kGB+5rO}x zi%3{nnR+_>e}?Sx!y060KA&v)_y6rh4A_meDJ~Wux~8QAi;0dQ%}JKGi+&MFW%TJN z&B(Bfb8PFdcx{enn`(wgqssl+R9n?l?&!d-Z`Dj|Pe)DvTJY}J6BYf|{;Ju36ZCh> zf6i@AaPyPsTCnXx7X&A~8*s}*;HvUq%>Qv2UUC~p@TwW{2VfFrj%K5V3fK)Mrz=J` zn3o6}2i!uiiAgZwla66vIx0m=X(p~6MT>JO!FE~9G5Vt_t%awcIgEkkaM%&8OH|=7 z{<*ST66GSyn+NCTZDRLIF^RwQ)MV8HIw{?nd1KD0HATg`BFPNpE1gF5YFu7H5RdYk zl02tezVWew_R>*pES!WFtx2oNrG|YTdi;PzN}dss4NSg7)N+kBaA`wdbggvgadXN7 z$p4fXwqzFrrYPY=RTC(s^r|+?W@OpAS*!VGF=ghPk1e2$Hy+@;&bA!r@LR3B0tn|a z;72!E^~sbQ4}9H36CJ2FSXUF%E_t$NA?Gs1)itKwhYY6M4<Nk&c4M|)0H-lrw`(!# z*%4hYfa6#kg#k$}Z!>K=!||k1%H>R2f-x7cnYQU5fdA*@HPCGatgNc)Y_q)lbId~e zUAc4U@>E@M45OK-6dD7E53dEu87xT%%!T)fsRG!~X&ZO;`up@_qf}MM3`MQ-RWg^) ztofzmOa|w#`DFL;K9#$x`onm`1|H^A>E+R48=Xai8kc5srv%qZb5)9>2v=*fE={gv zvo1p}C7n_Az8Yp`l@G3%gsP)wYd=}CA#0Le_$eR`9vcgZfxeaoHw(Lxsg4FWg2e8_ z5(pE+o3TO(4o?qexdLwA(iz;}Q(eol%l-2hpQNY*4lD!y1Jn0QWRN7Bh?h@G)lxUR zpGHMbSCzdn{WlVUI$j~=-UW1&sQ6Ifui?TX)A>dg8eRlEBB%tIFe$PQ@eX7-Xjwdc zJ6lOx5<=1y|4F?06&*cZm)L%n{C+=;eGN5pt0Mtnv2MU3+z%(mSA!p(L3>+lc&?i7 zHFP!Lx+^OgE2Rt#MRl}a#gl0J3g?r028Ru)gbB&rZPk^{fHljbLrYXcXRrMTjGkIa zPLKNEsas9!2V%SNAPLDRRDcU(4XJw)k2^g!Yi*4cC>!ywA-4o$e`ov6GmFV8Mq+h+ z0|$kXY;@i);MaN2YsAWzFO+N*UgwDFo-x6ArW}=OPt2&FV{rVSQGQxp0VgH7^!1fk zrxD}aEMaa&F7t`ouks^{6RU~A`00;J*-nXi0ea?NB<=yD7=+~N^-};2*W!>=!Fm$= zH;WvN$*1;Yn9}k49{ABiYefJcEv0~Rg5xiFjIvSC@3qhgT=izR2a3s;+OvN?f;25> z?1^EgZowhi0wY=k6Y7Q(Xn_={g#`TbxC2JC07gU$G)8e++5@L35^SxUZnVG7;PX1x z{H=xkI+h`q7LR+u%v8$=p9NJ%cm!e#>Er{u;~_4{LE@1}%wi%EV6gD95ew;R=_U&> z#%qer?7o9Dxc*mME<{pLkNHoCkFIPPymyO-pPbpUR>jI>BW<QaXcsq5K5$+gcXkGQ zqxQRk%_=iO_TXif;A7aor;%m)Q|W)W9JF>UCakI=e}Ud~-ud+mBEDBa^Y7Vm@4z&4 z?iunn$uaf8I!m2a{hF%-=+T{7q(hEsYRSJcK)W9>`qbb%53e}&<l*_i-l*Iuaqmz{ z|K8Q(t{;AaF;u=BhY1vmH}Y=#{d>ajvh2a;cWNJ3xQfG6=cO#^ukA#0bhfL}Zr3o3 zZzB1%<OtHK>$1<q<^(5%{XjY=w}a1)90ZZEiHA(}iWZu1$4mgi&F)CPE$pvq^tb2M z;8+N5q2S!@7m|AKVJ2S)Pl%!Sdl;frxj+zNsuG**h^-Dt;(zL!=Rt{D{Mca(7n+a& zxUxEnU5p9d2J~$ae*4~mQ-GM-AE}Pp6oD^cSq?2d23{u#kp_IBpXK2(7<ZqRoL_2k zzOnsg`TvWtcYdw}`1Z9YlSwiY+qUhAv18k|ZA@(M*fw`;+qP{xdC&LMd+XkxPMxam zKcH(>b#<-v^z-qC;o1o?W5cz}FKo#AASWZ6gtHSzdBf=dnBNvy`0xaS?&i|5k%_C< z^n}*J3J?iOrUxOQr3$U$P;<m>KV?(p4|FYIq&}Rh4|LYbMn3r^eomCf$uwI3tPf9= zslwq4eOC4!i~d`i4cPNioM+jBgF0~K2Tq#RuhIcs<)5+>JNd_tJXSk$FX`EU=?~5v z9h3+qU~a_Db}U})yD%?`5dhLJDzEQ^Nws<|(u^9Dd%IO{k_<Z&Cw2Di(Ic-HWTMvt zO>;VYB9Y)!Uj+lvU|cCKE~dn>gT6EDu|CD-SE=$3HuPRZ3ITD>!9s>fQMp~d>su4$ z5%I5&voTR-ka=s|q45b<CbHsiejm19c6WYAK#!20tVNHWjyk}Q=+I3rnm-PUTZXA) zLUWd>1c)f!x}b1L(cvxGTwh)G1Z7!46E%P{OMJOD_E}GvH=wB{iex^=nT7;|@e+NA zk6Z^4QZYaf_nMzyn^|}&5Z(biQz#PU(hL{$AkQ#I&eYIQ)uJy5;<$HDy09)oSNlzq z6~;r%o#)?8u5UR+nOpc2R<CJ9p8&4dSOiQqHP)HOeE|ex@Fe!Z&{8;LoYa&NX%T&> z!Yk1n|4dgjg3U5MI69X86U|#tdE>r;dYYc3ik!+olh7wH>rLfQtcp2{?ifYY&JNVV zVr;6ZJ3r)=psP~IJ0z#j$c-~8+e%AoGgKMJUx03SX+Tp|QE<=K7Ba+b*0JJ$5-8#m z`d7hLm5DijK508oCiH;4$dj&vbdxe7vr<u5Vmgi^S)z(*RdT(sz!n@*MB&N8=0m-e zhJsuoB-ggX4+h)RpNRNJC>g=o52ZdL&n>DF0`yG3ziHl)!?fkcyfuw|y*c#Gwf||h z|JiZt+w0z4+W9_1c1QLC)9CeEl9=mc50+l98&W`T4qji*{COg!EPA21{=}0DKGU8) zy6dMG+`zANBkVn;o_r5Q-Y`><5_YzKTgS6qy1~o8lg0003vu<Vc`37B2#wzi2XR-Q zp$u9WRA=8z1jX+L*Fe59h@LNoDo!$9dX+vg|0*K55xpx07mIabopx)|*{N<6-rEM> zkprJ$BcBftw~S=A&;&6J?y@n0e95op2nW(SA_Hf7G0y86>BMzY3GFf?kO85Ty#)C| z5r||Hf6>UK5%xbhBHh}0+iRx&692xG-kOR=%!}og6LC@ftzsea4yz?z$RxqmxBR;a zO9C#J-M_Pl4b>m#$lTnnDc~s1d`flZ2w5{e<VlsroId=>);}!S+*gQZY39o|_YhMn z_8v*H5W#I`X%PPAMTA!bsq6#`ZpIhN*}QlG*aXLzGr=ENnk@9U1(Uny=LwhzXwSx7 zOpV&M$OXC+;%G-C`>G-|CZY81w?S-vsFfnvEAJnhj{Q?CLNyoS@6${rs72%x!yjLl zhz0Sbq1ESvy62w6>_TdtVq!(%cviG>OCbgA662+zSA2i68^O7k1)BjUOu`vO;hdhH zbMqBop4Z8xUOlSItP)RWM0}geo%nBsQeoUahwrzjv%j~nnDW7p-AckRZ_UItp)PUq z2%>qRB;*9YAu(&)ksy(^5dyLGZ*1p+68F~lpb;O9-S6mj5k`$kX}8}?Kjm47$_}B! zikcFfHDsW)gxg>dhlnwMrSvhXLsQkl&gpYS{iC7!r6a0vh&}h+crZ<4@Mq&kbANO# znl1TRv%E+LFn`0w_^Kj&9M7294Y{OIS*j+G!GIU{pBF6({%?i5>Y^MX8c3CFq{Z@9 z&^^(ky=%SvJmaA0DPP}=4<a$P!AaDK0bE>121Uh@WBY=2y|5k|jd)1~COx(ty@GeP z#^b^6FW16RBtAKwe=av3QiU2e#FKMz_|0*9P5t6<at+DmMxBLOicrhv<G4$ZdjX7+ zPk>Pr**X{JFv5qq67ePaE=(=nLdoMe*vo-h_<B~mvOo}HL(~nDI)a7EOi2Ot6^T}W zE(L2d8ub#MS2NO_*~vS1NdY7Kio%4I|LkL29X@I@dOJMi<2LwbTU~VA&N;v}bG@6c zlBw&<_+*mLi(wU~2Ye@B^1#Yv=U?dPa#PQb`uN@?HzmsZ7;>+PlFGjsceY5YGFXS3 znq$$+N<%s_tFCk=Ywwifws{k8JSK}NR0UTBv~OIiOKPYJ@csA^AvL*ySABS=<%@V* zJ)|q4{W~_9fag+}U7t+2_gm-}fBHLuJ<FHh1fg=`p-`;n4N4;7gzp66vj;x&KTo&v z=e~cq1*_+l7-7pbX&fItdF+822n=w`*$-wy-kd>M53tti%b<N}woF+E#FM)tVjq#Y zN9u?x<vQo0h?4PzA9IuTF9;L<Ig}c>d8ywl7SEI(PYefX-SHgwR(by@Ux@~0dIZ<H zqgt$lSoP%^gs2{hLb2*V%}7%1Z#+nAUtS=r3m(~1<i{k7BC?z^XhrjVe`gv2NF?(> zUt?(DnLquE$N+uT%-Ae_Y}XL36^Jn=NXuH9jgZX~^LB#f&(EVL-iH5{=29&Du(r@t zuhW2k!=Mr3X~-%^&p3^awV~ipk)d4qy-%5wm67iVEj<}e%Ey{;6KB3SJA7{7UC#>u z^5yW#U?=StLLL$ZuK5t(X^LTHVItcI@n)73FSb@UuqPJV6`LVWEx8K8`e;&cANv{> zoe5_(#^6T8Dasm)7*$I2FS4+{wXWefYs)6az)TczDw(Na58O9uP#@fAN4HSO4vAGA z!|koE6D^x@h#L~*h?RubdB%q24<G-xE;n)S(@{u8M6SHVasFYyL1<|(xVpmXZ3M%o zOIz|ib1!l#aT8_cq0~Z^O+V-<EO-Cj)C~)1kG`MQ&7v3`Y3P*{ej(}zb{(@-Ijdl7 zuGSY>xqVMSr{6?yE~gyhu8_Z-38%<P5kEMOUqiV$ulr+L&+kd~!EE~j>SUU4WG<(F zfq?b&tzhh1Ovg|8nPBcwOf4Qf<V)P*8uN|B>{Ktv#1chEr=c$diLCDcAFuAQypc z3L24L>+NL;L{Xj$>lN@>%-hQ+OrYt{lZRZ~RP;-XMzVHuvBL)wtNz>A=)3Ma@^iiN zlji*KGZvn@**4Td6{J?pY*<h~5EU(1R1Awvy~OQko{ZI+M5TJ5IAueli?d(QKOaQx z5xVFzFI#eD<=MNC?>;w^*YPEtKP)9D&9Z-TI`pRzmGYxh+rnjU8D*+%UN&=FX`!~# z*jOSh(^N!HJUY8DhU3?7ODMs1odOqQQ1_^`22Ev>i$z$gJaEREp&!oc^r^cRL-Io? zrLfr-iB!T++JiT_qp1l~K21LvJZZis|2|RTcpE({(9!Y8^N!DRS`&(%OZcXus<diC zgrR=MEa+?mC%=F%IYzdo5M}g<yOddFW*WIOW%TdR-sTjB%%U!I3g#&VsgGswbX~L7 z>U9<QG!T7y{Ofndj5G7VLiq5UL<YOQs7?)*ix7*=!-f2IW#B3Kqj97szfR{}WbUrU zEJnQ2>6MCp+j3^&IAXa{)RnnjD3YH5en2CI+G1sGyIVCDa(!hS<5|#dvSd;picAxk z6Uju@?BxJajK3?Kd{X{UX{${<SHBdZA1u5AM-06nFA?&79yocA`a_?wbP(1_;LkRc z>EW;1A5emH@F6Cgzf|Y&UJY=;v>ZsS`xR<Yly)_w3*Mc%H{+-OfpcOTF@f*f!#?%a zabgYc((_>G_1wNdo9<_Df^GL}f1pzA5~Y8_PY-X~L+-m1HS9~Hhc~F3Wlpy3i&iqA z*NV^@Tc{718Zg}({n7Hj*Z3i|N=$2(vPX8|T4{n~PqZEsxkA#CYBNl;qM$v+r8|n} zjutyq;enw&>b2{_^QY!G@D?&Vq{4%IYif8Oj|b!WVE%@l4`=ztP<vd;fwvo$;|8uJ z-foD{@7MLd+%EZ+Kf;|(OK^8^>@9*l&NnK-ap=vTFWxIusu$46fDSPZ&LFBcKzf)z zT*zBBX~$L}csd;0TX!RfA)=~9?4l<{l%$JTcc9Y{p^N@$FJq6ei==DFZSeUe`vqcK z4bwM2GY~52_N6Q#5(;SXlE#d~uNH9&Qv}<sY<ZhAX80kg5v)g}b*p6pg|CWz`}a`v zLw7ZhpUUgD)Dbb3O3x_qju-q8BZPhEqUq;R?WCEk7KGC(I#aU^S7fcuII&GLW2_CE zl^sldOcNdL&=dB#saK#&bLZ%ub*P5j`ZVp<(!g7(>ylcu;U7!0Bb9yi{I!hNg)VD< z?l?H*&^kd&Zk$TfTB0*+*CtOgDOH@+-;dzzlAoDH<)P~7Z{SjDv9(NR3hYx`*)p|m zM#rmOb+}&08Ri6i<f~@&R8K!LEcFJ8*BMM$F8{7tzYkaTfLT}f4@Ka@tM1u1K*aD> z&czRu<MyjJ8j)8xpw{~r1kpMES3$Yh>keZkFC>SBt%LXBT&wmO+qZ66+IwdQY@OFu zsY@a^&!UXoI8jzKj|rQm(k7PvP8+!WZCK@<`ibsLZ<>)+u@X4-S0n4*_9?C*#>U~w zFqSjNNGl6!mHoKpf=W$H^%{FD+qI}pr&@aHWXxc?g}m-qTWKY-8sfr4&A)T6E$Pxl zXHwT?vuDe7bNXx7Gwaf=bDYoKXN1q$r<czW&yb+qS3jpErXJiD=Y3)`@N?XU{(X%1 zpU-9XNS6af!}SK+h1WCk6Tvg~Q-K%w`)Lb<96?X$Q1f&_Zb0N#yzx3!AG8F%9CvYP zs^KsyR553j9E60YYi@>woKw{#2JiF)Jo_g=A#}NEpcH=iCe%O#5#TEoCBO-Azzhjw z^lTgmgBhm$(;rrl{#YA)tA<y={+l64e*$699G{|aZf19i%2F%wsfirVMuuD1a!xso z=W=M>pd;%oL$PeQ0fk;S%Qb<}&oycV9K1~_NiIq6WjbN|R(QX|aL8jY>Ygd!r%&?{ zf!`NV&EE?%ePgQl3yd(sZb2wlSndY$lQFP1C&)mqk~Ya6^J)S1=3Y|UP~t0p=Bpsf ztAL^nIJG<Rmc-^juU07h9fcdp*boX2sFnV|ecSF7?xAiWu^t#NnQp;39<<C`aF-o_ z0k;jcG}r%l-EloV<ZuOU-8rwL%Xsh`+zEJMp9j6O{aIQtj_*V=r+wW244wyf5a{;4 z@3VRT;FGC)m*GR@-|fGV%AT<H{^fKZKkP9mw#4ug{NcLpMgQcuMfT{p<pg30Dm+`T zU?lnR2b#KFlOhH^%XuGm1wAdBRWO%o731SGee`)c^aM5CV)<N1YCWlD{R5-PsqyIE zl2vP4@m1FevsH~jMml{rVowrc9*U50Omp=}3B`SyZ>G-g%`$EYa16On@oX@>7xnr% z>-w2Lwf@IF)O>$b??;WpUu%=)LMdKo&377hHFST7z2N@hBe3}}jM_KhOjq0E)D2$c z@#pepdV6Ko7QpIC(2E{_fi6d^&ZF%{=D0tPX()`9k?N}oA@dNXE6aK`(No%locWGe zx6no=j%o%4{1y0mfMyKJE_$d;C^GWE+j#$L)dlZJdKkftNwW=fiEG<zQMXvET0fRp z@Kxeo+{X6IIn_`V=HMR3Ii*#b)!2eo_;AIXz77cYhLb+R$&IiJ3g-DO^#WcS#V=yk zhIVxn+XpC@<+#0+AI=G)>i}!I&8p4f06{>$zvy%Nz;X}14iWzFcnRtLv3;AegZT{u z-38@!tH${6n)eEqpJ_V&`1DwO(P)GV5R|h|9oJ2NcFZ`y8A>$t`WkhwmG>V>u2&Ah zR?UCys(15*!zv5G)SBT^T}SEjB1od`1j5lBhV9N1iFv*W_qm7dWbbU!s`(Jqffr;N zf>0*<nN>QtK8Q)2D~!IH=H8lfi#rnG%`IsDZ`V@Wt^}EPJP%}p%XW-bQJGY&ft(nv zkEdrAm&ne!!WX?!I$erp_r#4o8_AAqL3F>IjeU~TX#@d?Z&dnSJpq3|2##C39oH|q z%H2={-tT`K`(lo<-+j8is9&RgBx;<H+kYU%euWkY4L<b+*Af2|i*V)C5!n~b=S7d0 zQYUWP8O+DgrQ5p!%)$_$-M*xY=SqcPY@>hLcb~)(g!j6Okg}kXX#9=uYYSsdCI&RH z#`gjurP&ptOgxAqb%>`-U<P0IH!l4jopv6FrvDv>wrMG+-`+PRXH6-``}7K4dE&Q- zz>7pk%m_+{RPT9<BP!)~j|AQiKrm`Z^U99M(GhjC2WjI_8+#!;mZ8?KcFTOHo2+ap zPIj}A*sj$K2NpLs2@_6K($6E`uxOgSq+Pj0eUu0pLS8-!t({x1SrNga-Rl?L2$xd^ z!#XfUp&c@cD)&g&Awmxlmm)?I5hnLo)}bzinGB!q=9WQ8>ZIcb@hT(4FU2-{H`MuI zX&IhK0HMzBADA0SVH{KPLa&>IZBp?)Ej(XByE<ajUh^@UbmMs}lG(K?=g7^I*{v$) zj>zvr2ho-gBK>AU*HydosE(SoonV-b(0P{7Wq1GTdd?6Mc~vF+N0Gb!0GuMMWL49( zt%6N`)6_q$n0cxD=c@m)qVN5lFfnw-KO@g@D57blL??qaGz*zGw*aUsiq<Ih_el0% zE%q;<152!`dTuy4TO?mLs`BaXT0QWK9`q|4?OxmC-#*aOzeSL6>6WwQUz!F1C6cR* z)8>ja=ir!%q(Ft|29nF82~)IJeqPHMonhLielJ;wU2*)G;WU(2v?VQ0Y!4{QeTWX= zgPAx~TN@&`N2U=RZVDY5;P(TY_H`{#*aHA}IqLxMJ>M5ao*$uurZ2JXn7+udhJSB= zxgxFK(%zDihn3j-mzEShu#y$=D+zgKi$-9mo81zh)9V`g4C<{2)P=&KFf=&dLXRWY z)WhwuHEDbRd5Lw+<ia`B3s#0N_vo(Bu5ZBhbokUSj)ez@z4JLo?gz|1gl-}H<h@6m z!|h(-9a67R`EPvoet(O9r1+8hqDy}eE8m_w)ZMaFd_80Pt==1&TVDup^+|=|sPeKe zQ`TQyn;t~E7hn@uEqp5b(((nCf4IW!M%|C1u91Y1+bdkeDswu^qn=c*7zFJFunxi% zpdlDjDKP4u{!jwO$mcr$qXDX`=Q#%g$29B{=fIa}91xW~`x+$e+y%q=WkYkcxIYrJ z^=f&PLuWmGSB3WHnjvSEq^G-OFXK5WJa<Bua+>UYr=ij{y}Yvpv*RCYMZQ4$qc>6W zZGZUwW63@Ly3SO8FJK`12fr>An)R!jI#8Z6P(dZ3E{hqr0H}OXUTEM(2A&A4OD!`t zXkvz!O1f1qHg4uzslFpP#q>+gF#BM$Q%u6kcE~#3$J?13C1zufAV}<99(46LNmL_D zyEM>4wLANfBKO2=8@?!kjz1<+OVzrgN-ij8!c0nij1uVAG^qb-!QA4HDNP1BAJ*$^ z$QX$EF>c5x^zNkS53leO4pL3QVGc|+NHHRLS;&N4p)HIOO#s9kTI#)s4zyyUUdEF% z!B@CN0UG8j3Ms=kHm>5xIyJzAxnm(QluWA5n9_vzF557vyQITfh6(y(E+7X659lK? zy)+N%H}&e<vjk?a@osQyaEY?7ZQIaDg-<dYI$=?rI*Q9z`~MqrOn)z?Q>|cAb;~5L zKpQy2Hgut@)0C*JCQ)6U-)Od}YdimLtjGvkoE$hqH*}$?Yl~K|DsJt!sne{e)AUQP zydqY$3R~1PY>ZK_qEL04-*B_3Tg$C$duG+JAypMLbRno)6REtSP(_&8c($p7{_0le z6{*B0SJetzBpI-zsq;)SocE*bIIn~^_p3#)mm{%GuS2=A^M}d~!o*vt1S4_T5ro66 z0C&NTD*{Kb5U7UdsRWyM){lf#KJ6jFmahWWV#@_U;V=68!}An_HFDR=fTMGS9ue&n z+Z+l8F{89mJ6T8-F)FwIVooB9tI&pE0pb{RIYKQ^KliAN1=>f}M>F~@oJHk)A^bPT z$G^(2hxg+LP~?9a<kJ4H2D$&20Rk$H%k~MN@+v`#i^>l?uLpy%E)4($Hz@(g3&8-4 zYG~<nA`{86T;F7JY!nP%e*%+^`2{g=(w39XtiQ+EURR?X9eljtD?JIpoW)9vOa=Yc z$W9UyEK&BWHy_n;S6Fs#JYo(ZhLZ@|>+xeS7uC=wvZ8KJ7Vh4m$ykuV){bSkWZt83 z6^)rR!%w)U0QmsYreIXd6oaZ64u{*!-i`Z=LUJvX1cK)^7yL{vmsslCa{=?Ll+XJ| zn2wnV!B%yXT51lstywRZM0Nd<c5M~k^hV8>SRE|lGG7;3xyx?%<Wt}NXf)qGki=5i zHVpQMfVq((FhjPs+QC9yUE1hJ87s0lbLB^w0?QL_%6eOx!Hd&`MCTw*gaIq<pY7^w zZ}&b#8r11YGEXT7Pkl&}bYZ_@d`T{N<WRu~3vL_azT8YY-T>eVc+}h(xS^Y}A!dGR z0U%e}A#$xbzBfjKolxqzpNOtg<;@W@n(~;Eg}2l>cI6UEftdD6X~O6Nqx2TfQ``X; z1<9EUIeq3WO3p`By=qodOgRl!E!*?IA<iffeX|0vA3t>eM~IXCe^q>douiF`wV<P! zi;aox|51r5TPdvrP<bPx$zZ?$LGmXsb18ZQtTt<;?Bx2=_Ipq(kVDRE%KE$1BMCH8 z7IQgsIWwbBZV7Q|rfU}6AeK*stSule;lRWK%Ub*Kl}~2-bM^P@^YS(rt)W^UEwe#T z-9SoZm<dv|Xl0l>T0BZExxr5luybTU-0nCY5{@?di=$c(FOnz{8IlPS8oseoPjZk2 zzqN`$v|y$65)AN8GX5VLCcr6q)kS%JRRK;71`!3ozWA}^nwPG(?;a+&HLgbUOtbi2 zB*`}IA{Y`c$>pa?mY}uF%d<dWp%XG%6M?W0YB?r9sak%t(zYte@_YTz>u}6A&0vV% z6>n1<&E;O)%C>a#TGBGKGN5>E2{TC$X()Xy?+lx7T{DYF6?CB*@q*)8ey+i#*=|%C zv*cF(OvDw++*bBiBc$vkqt57W5|<ep)jcQE+?cJGUc>oWmtgwEkI?U|R54Y}^hBl0 zV%zeND;|0;G+9xYIziD8(6!FuN%p?Rs$VW1=jjT*4#?<r2sR}jTsSNZyg<*IaO{sb z+jt`a$R#U<rPX%TW>LLP%T|jetAfWr3SuJ(Nmv{3Qv%w+1$UFUYr*O=-g5^t_Lw%Y z<B))DU9<KgxXA<sm*|iRS^Itj<jaVK&d@<1yQre2dFF!6%s1>3GJZU+QB*c(jpbrJ zKS6&x856~DLneICL5D@ll5SAT>GKDRVAm+*6edJwh$5^DeX!fu^55F2xoIL1m$~wm z{447G@r0hs1+mk_d`0G=9TbZ@&Nbqt+iPIISI{<p;PLP2oL;rxe)f=l;;GO@KB;O0 z1Wa~?6lE!-!XT|46-}j}y#p2z#fa|QNJ*aI8HVgj;wqz^npg6G7SY+c?Clbt?&*=p zoS2-K!Nh4KP8Zb?IQ4ussi|?)3-(c~gA*vuy)2?uo_CfPhD(n-7=Jh4s+#t#l$tIa z$=VXw=OlSKB+rPIzY?5MKrpVg8ifQNnL%!c?m$@fk$|JJoEL+fSIa#H@o;{muRs0& zD8l&>=?8NRC?&R;NaZ9r1ppFq()JG=#ssq#H=`0)H29aupO48*5i-=ik=!a|pX|VH zsUnV%gd@=OF1^Ff;Ls=RJp<F6I~dp1A->9x`7XsUCO@EXc(KIgP3IN+XIGxApH!Ni ze3tJ9@Ace2Ytj!Ka%?bFt6ykEOPH$UR?&z=g00F{VW4n(RHPSTYNf`KmJj6lf!(T- zR4$wRgUKP>O^WMxI=jBP@Bg-ik^$^JLH~6pl>Co5+W)&R0Ah}IF82Q~(~}OPoizA1 z>^BWtTT9zQSn6NA2d4_xI42?qrZ9VmoEu^a+JmNS$D}=K>?k^<YpkD8T!^qOk#@Qb zGD$OOp5Gk1Q2(ZP<<cmb|8{Qc`%ZJyO9rx)cYE{r^4)jbPw=qZXC0@dxor(%;1KvB z_Yk(N`2US2+%OS=Xu_%O5BsrzT{|B}Xss699%Zku_WRhC=Ft}Xim5NiOGP3J>=|O; zmxOx<3>=@87#X2#tozsgu0Bux#WUq?DYBPJq!0CTD)Kwfo<^Z&0F3Obd|+RamC`{z zoFd6xF<e-Zr)Xea5?6H(i!6rnwi0=o%0c<3j12X22QmZZO}=MW;lQ}$$7C3h`(T*b zZ8~xd&P@oI9d>+FGc2cR&pKoWN&sqyl?ZhV&P_HFi9=r)Ye&t|jT?#V9{A#HsN_d1 zG6B|29rf2h7_E1?CvVZhbkgTBAZZWA<grNc8!4(L$x+jQy?kT2_k|qu8+NF<{7bL= zq+S2Rj`0g`WntlgrGy+f`vsx9oT;#vkz9@<1L<9p{v`(Y960t_Iv@x6Vco+3`C%zQ zLIhe-;Tpc8t!<BhLTb~pkyR5_QIs$d4elIJ(LJq{rFNUB5|?Cfs~Zhtxq!;agCqJC zP3xB2uJ}g>xw66L-df@iD4{Xc%2xeT4Y+xP8PA!97^lEBFMFa-=eFi#iOX`K65ND^ zraf0zB-6FYKCfGp<|a844)UF|GM${G@nls~zr4RxfiP*JewX&4%^0sv3*x-I*9ne@ z9hMSbxNQ8H9meG38}3uhE*ju$9Bt4PR92qVt014617wM@!9CU3PY1@tfHF5S^Dj0e zAO?feRy~$LebS4}Rq||gM@5HbN2S_b9A+}pa^tC`z|&SjF@UYBD>lL*X5#o|AD$8O zu<4<33>EzZo$T?|PdtdURSkS$E87@V`PAf^Y>y=gi1HdxKtQE~Hp<?}B+bOwq(p-w zE-u89;i8MFY~EbG59?`a-(?@J(^QzVfY2W3PgMj|^Bh-UFNqZOL+;qGLtG<46B(6o zAM4f#jZg;_Ae&R;Z|%|mF-EV<%&s1j=U?N$Ff5bQcd90K^c$6@C<YplBuwgOg2)5H ze=j>=f>aduscXcs?JDS<$`%Wvn$pGNNJYH3rN*g1M>OENUWZePt{c+tv|2L3kv3HR zh<Pqb22RO$bB?Q0Y?#oj3W!)M>qVA^JX(z}m+<ZLDmMB0Y=GZbGA-!KX_QIQ<g|yl z$y9aP;b@YT%6pz<s#JBF;W$Yx3gL~Cm1>58$Q)F43gH<*^@0I%GIp9eSvb_<A-EFw zpzQ3{LuFZdwRzbJ`{=4l#jA&E6O=TnK9Tr^SrG+VciCCUGvoZJ@<JF0WJBJpgLNrt zDX#jBk@fVMVY5Vc*UQxl<z}X!)MR&0Yai|iE1eYJxzhTg9cGRt%AjH<c76rM((uf1 zC5{|$lAck)?aUxIn><3T;X<@iW+C(~y_A6LrratVWJZ@t8Bbeo;D-VyUj^m3!Gxif zaUvwiJWFUBL9H!=NFr9Ay<*JRRG(hnB<Sb}ZI+lIU8*YcHiKBCsji;zdvlFPK&Azv zxjc`7*&uRkGeqkTICX_&BF|+xn@~zt#?9Vxsg-rnQ(<!Skks;UBN=;%5)ke^Q0HK^ zy!>@U<%(9Daas5Ba&ox8BUI9Q@#$xKLwY~ov@M<6YK1kLwUp9o)}pIgh#eaNGMa9r z`ME|DMNZS7x6><>5G2)Z5BDv^KN@F5ufGVj&(`VPhOD1Xe}5;4d=v8#R9r-9j$HqM zk7k>kcYw?x8B}pqlL0FEu>>`GGGJOB-APX4RluvS<F?zH95q$J3QJwmyTEeWz&{Bp z3*~>qwsNp5)^K0G960d?Jw}a1V23JolCgYb7+WMFJYtQ_hex0vmuEO_W^DVJt>>f@ zh<X%p;Gc<Z)b|21UqhyN8?xfX#+%gC?$dXl%)&F!NmGuNF)OAm&dZjzXM?7?6$TkN zTs6xoq&xL&suSwHuQEcRrAJ2Ob)YPRskPIwck9*K(^GPN)#T$BvQ{@rJaZiE;r`4s z^U$-p2NLvgRqz?c^;civX4AW~L0JVJD%Yp=T67l+!KirmU26xjP6Sz?AX5}j=#}9j z+UFx9Go4}XMmk4v^MlM9pE~?&7C!Kexndhdx|CpiLo~1jL_g1o&WH#OfA+D_Mr)ct zZ)Yeqn%+;((F(A^@JKbxZqUkDHSN$&1}L)#^9E>fjPIBlflOf@P5&a6E>6_hCn8Gq z_+rw5*#<c>6z6*eU5d3FG6iwu3M&+@D#nIEilC<zoX^fimr`w&pBzyOpQp=i0VY-G z<ZpkQawQ`TG3~g2WseBalJ6i(i_ll5Mq4*&2MtDz)cz}YJtsws6C06SWnSC^m_e)` zf(f*=mLSSTa{6^=Z&ck~#y@nOEZ8j!JDv@fh0Ht3a(TXjzK7LKc&6MwIwY2_4^W3p zhNtC_G0yjkPo4O-?sypXg+)0+QWPs2W0I-KWYx-nb1G`4R7Dxps8okPb?T^#+N+}! zB@uM6@{_XL=ESIO+vY^6I-SXssXBR~v4L}9YF#RldOEKnRG-d=ctxZqW08^)3qXn_ z!&xBj+8i6jGVu~}>G4E)Ww)(;;xOT;Ra_ws><nCH6&!6_ufQhZ`rjZ`?>t=|Wtx}+ zS3D0GxOz&L8{dJYJS*@JbNGusGz^Ef)OoT;Oiyt(-iX{bJzHfij*y~qGY$@Vm1*8l zFgS7gh(D#nVZx(eOki>(CN$jaguwA^p)n&&mDt%(?6{#eoYTh<&Vj$Hlo%s2nDiLq z(Pw3+ZU%+L702WrDW0CPFp^^U*VjC{=n&pZXm=Wn;d0UAr%p+;7D@Bnj2T~W6rVwo zmVMepJIIg=zfq3D;ngYgYsClj>rNty@+p$TyVU8C>m;?q7WarZ2ty3BF#kOova*N4 zTBGkfG>i<<5hFB5N~};9@4++Stq;OpAQqLPH8?bv4)FE`dkwO=3(yV)8e-ui)6|J= zgozD8UZ7>{pliu9H0}DY!~`00WFtQBO575{NAkJ@E{2gDelUbl+~jjcr3^H<i{cJf z?2+oCl-z{8{IQE5?;wM7*BaWzTLr%!`_(}ax)X#O@_b0?O&EETSJ^l0$ix><b6chz zs&p|qeK`3N(D@A9_%~k<uQ%@L9Z7c4`{T(Bn|R?k`dAxCqpxo##Hs)<<`jjKCJY{+ zlpd=p&kDl_{!#??#r>C`s!fIY6n8r()|hF10%j9aYq-5X(=@x><XwGY&^F4-DTTEi zcA%?IVAIS5Uq@>GTVHbpFvc%e_Sm9!KJ9Q!;$bxN62}1<{g>`Y@Mu@lHFA(gKDfZ4 z6F+4L=n|J)Z5t&Qz8)b69&0F|Ru>p+LXVxvQVXUbn!U(N#4VtAGz-RZ&NK^GVM3VW zM~9I}?QHT2E_6%McS8fAgy`phQ%WK#kL%~ECy-Uj;b;A9WWzcb>9U}=Ap|~P!>W9d zYhZ{`6b419@)0~Y$Tx;)i%kJP=k5?zxyPtOo?YVY5CuK(hZ>cC&UjW_2~>qOkutvP zy;FAC3i9xpJIuZepY~}gX%&`q;+rvyIew*KOV<N`%kvYZ%XwbYBI;803S?W?bqJ|i z0#%=)*%jb>#TPU>k+{(iyLg!-t1T-xW29IlYZjHYy6@ZNWm@4@i<nKxic-o5bJhU{ zPXKCp43i?vtMP&jaiT>d$8_w`rUmIo`d}*hTwHbW)UQ@w*cbV)EwSi33c77_bHuoL zgD+v#gJ#ZIInyZ~u>-M>B)2$vIT=3Q_-WSwL7E&Kx0^?;@!&<ns-r<0^*mk@7&oJT zs?WLH`0gU+&$c8bd1q@=R8zyz23@w5!q3|t92^`h*+|+P<cmbYRt?eD9AMmH7+Dh+ zWH4`=!jqYr73&q+@_1FZvJZ}Ob#=)YvT?SILxwX>qup#}>}45C=lE5F?pdy&6xY%e zBY(G^m!@_pUMYXmQ#`%X%a&R)0Uw{ed8t^rN;AlA47lkR%ax&ms%JyX3@;{?zeDWj zU{W`b7eBK=i75-l;nIp)HM3U@#1!w<BTk#11iOk;^v6}r0nJ;~Tb>mj=bJrRc5sy- zcr<4eOLG$RS@O!lNp%^m+K{Ur+qIZbbEqdpI&5<a_<37z!RLhBP^u98Jk~W~loN%q zf=*?TcXLQyfC(t4nw(>@1l*b66KF+H;%S*%azcn#L~+W>OD6pg6;?<>oSu!Lb7I1j zs*BQp;u0@u7vb$GC0$_D2e6A=eTXS7-uFiBrm#FEap3o%#m|!)0DDvBkt!LGdPsW- z=t9(+Pw`#%YkeO1jA`cg%TNrzeu|aOJ0O%~fB9t}|J~azVuO&$Gaf)Q-|r6Oh)VR4 z{YCmh+sgNraQ<eNqCKCmBxNg+A!Qrx`Vsq$B2_*5oT@pOUGmv@GPOG2anN-{_Do0o zB1tf)_GbIQ>pAPk=<nNW|Asc`-KjUW{H`Lj2k6?XLCN!myY5-GW6^6Rxy?KoQ9Gf; zMVaNK;@)M^Wy~WE$rq73Bi}1aIT^e@+hWyz$WzE?kiq!F8psc!$q<S*IsPvvo8v}g z`%quHE>-OQW7=hHt%lI>htQxvP^4fOa^S2ItRVjv^(bnJ{!hO&5I}2{Jw1FDc@55n zvw)066S|;?d5sc)GiiPrmAo73>a%Wc5S6@QYi@*PgIge@4+@VmH33-z#!Wyx{2&#Z z|9~bImm#V>=D|_y!L#&cAYwqqn7JC`nlnFW(WXF@Y3;#PxIJRlI*L7U_9BWsa#j+n zDs$HKJ#TY{9ovsG9SVe#9ypsB<;qr|!lcPo(28k;U!b!e>T0xZo)_h6(4I$U3=)lU zr7O@GHkZP(!78ZI2LXM}t=0fAa&;oIyU#A~xmBhh984R!f+{1>V^q_>S$5_%a(+;w zO+j$&G60mZY-<40!n$+?tdE(yF|M%#+9PM1-t(%gaOlEj6V~BuC<-nOL0*`bx_}BJ z&^zWO7{F@=!REgXpM^O&XKRkYvPKfslrsCov}P35lrwvVb?HyA7Sc4!&7%43Dr}_> z3XF0Mo6R-^m0(>m7T_6x%syvqEpg}qW);`qE<FHV|7LYfLETJiG*M5~1)Wpob}xB0 z);Lu#1<{rqAfu=!_5wUJ&@<-cuY%5La|*0WaDI@?R;0Nd-lc~g2$PS8{<z<WAwsij zsGqj7jj6Hvl)$Xj>*!^J_5D?w)yu1!_xnXusj#%-sP)a{Co$GO$<z4oMT*iz3Ih^D zSKp6YUO*&)J@5sqVSs@$MIacq=aCuH%7l}B6n=$%vPBE9Q+p9sz&tkXm(lr^aePY< z{Qky}{K+BXLkr>V$7c8SFRSLt<r`=>Se(x91VvyMeh}&XkMmfsjhqBKE(?jeoltv- zNb*U*ZxtnFR5z98-7xzi6r!FVeVlZInxT)~gUNL?&s`S2zrqnUW^~qFtaukCEr!7a z5@K8$I??Ep*s+0wxY<Dj_T%CLC%y%hi?wvHpfU63?rY%I@6CqQOzF&_6MR)q1X*F) zBmDG|W%UUnP1CeN>pAB8_0M}~pZvg|uH`Do-x)_Vfu+?JC#|7F;hgX?=%J=RL&>3# z?wF%ef=A*LIeA1=iAxO2JCM~z4U<OF)TyNE0LccOl|2A1jAtnf{CKt%isN27j6I#! zUla$8oKz`$!mY3+hmPJ9YVtuH+1#TlRYK?$UkH(3VtYS7?Z!Vz0vs5f^Ml<s9y<Kv z9gylBIJnjK^5rv|6Wo`+K_Vl?lq+|%ULEr%g`cCYZ~+IJsifPo2cD#3a6CQe*FWYT z!64t^_5XwkN$Bnn;F7D_IJKsQ{%1kN->E(%YQ>S-?YFJ3rAL0sO_|^zI8q=uVoaO- zoi>4LzjU=;gu<MrUs%!tmyCqZt;9ckkK0!;wHh<QH;E}mZT!Wf-I#=fMBYrSdUY`O z7sS^7|7Yk)i078{BK`Q$Li0a0h*<vj4I+61N2mYOAp&arCzYi2+mB*&V)B4IZG&`2 zAdZNTG%;ESE(7H^Vj8XSPfUS6Qdol#W(U)N9eVmwmx}h5V9jV3h#(PBhvo7rANs~C zKCP;%uC|V+)wPnj>kTh6<}}jZcNy2&ms(TJAJbg7hXe$Ff9q3kW=5Rf<Ok@j-yrMC z4${0tqjfhDLDW#cWPN<4kk&}twZYl#$lzqYbiys~(~Z7CNo+MSc}T@{l4xCzEVb7^ zW|Lm8-+=KY-SH=EekWJOR=pHle2j)Ly@<qkQ@8siAF$AT5qJ9m^Z8S%7z%^F<14<% zM^m7?61Hp5yh$$K^dS7yZV<R0{8YWIgsF6aS$@<nDHq-)JKNA-dhk9qJ5aBm3NZwR ztG{fKB#7Mu64a^4#=}up8!3%d#N#KGxy%#iEuhO1h;;H`Uni3Ws^ybW-x`I|g;wid z<8i0sN!1b*65K$*n7UpXxQ-aygs6Dq%FOY^DhCT^+UOLW5+M}Sv1TH1lqyz<ynSo) z{0HT9X(dJd4~hwZW7n#EpS3h2j;jdHFB&vT<<dB*JmTO8G-`!X<vix#Vro{Iyi@2& zdGlhS2GsPbnOo?r+?jA_APuWnUMuvZl6jX93@Wz-QL_*lG@Y_}JdnERFw&+aGkIi5 zQKFobOC!M~!M#%1rU;v65m`}Fxc7=)sEh*BlJ4FGuqJG>D^5AHihb+m-1tuX#ay#x z!`Lo$@WvGcDi*Ju+}7AXzX|=bYQ>Y`qvdUK*)^q_XrLdxOkj~NiFwU5(EMwC{gW<U zpq51&T|dtR?cZ+(tPbC`+^q+}POLyr7N|#42Zn=d=n!IHo;>4#CX96B<5#l2m6^a< z)yCT1bwV^(FwLJ)m_VG5AZfYWdA<3~*$V`=m-Kay0cMV#^J5f%m<g*m8`>rg$D6QI zIq7xjuIa&mKKfJG_A(Q0Bo_$<xd_FXcU~?3!R7(XD~Ga+tBY6%l50nosb=r&pv2vZ z;X0gFSxl}7mwPB)S2f&M^aZ$HDX?GNdtlFHRAOQ<DHyRH8af*FB<9!Jc)1U=7;1Le zJ%kXg290<s@WV30Z(UN)t67hpcx4q;&&`X}Ry@3#5VbCVge@j+YnGkzH30^CIWv=y zhc1twH;<nrkDn!Py0v)1#)2b}v`oOQiDL!N@|FR9<X8Q<AY-2fb#u)gU_%5GrE$GX zEvG@M+WyU?Pt&4R^6{WiF;J35{7A~s0868I&z47Q1V=-;RjEkDIf68rx~iB>RkLEQ z3?y4buF3G~rLqx~Mg5v;|Ewlms!@c#mYa~nu34s1Bm)8z`5UiE+fX;ob2n{=3Ch@; z2&hK1^CC+z0l8EE9oo~3XuJP@u2_kFH`4B3%!|<5kwt6XQ3bZ0umXipRjGtFscrJ+ zx#XfJ%Rs;-`{_}>=kxY;K&tZ90r#yPEGBbSZ}e2EoY0plKDAr6NUq|k8oTcp5_!C& z*-V<YgCfuS`u6Ic8z7)q{P^_WNU=akL%Y)Q#WvzRRi|$<h^xxG2R<g>DUspgBI>sJ z1@jlj&051LuIr@u-?+J{qI+fT9HRi<m5Mo6o{~8TW<rd+U$#a$1_VzP&PY1aBQi+? zWa?9I6j3K6>{5CKbMS2<gZ-7@&HJi+`Q&Uiw~ZV!3A4uCMJK#K`l4~=w=~?m)(&&Y zl~Kwb>>=*SI~Ut{h;vvs4l$PrwNuA7p|MuQdflQu_%cGPA4th>eHoZ&$`5&ZgCq$& z)Dp29n?{`aMHMP<Tsj4YDF@Ov%r0yWn@l35&UCk*1|THWn(jcHf63~eNVqmdRbS$P zepZFKwF`cl%{9E*ann(+!K!V#MK~vb>ZJi8qgAJpv9an(9oqHz)-0WdzI_YJ(wa)^ zyM-lsCx$9#21AB}^FQfwh$<U08tUg|RR-SUDaRSz{o7c7j?eoS7j1`#?Mz(I7+g4N z7epJS>9V=qe8`;C&n5wH`D24BY{1BLY|9L4YLC8kc|Dbepk`f#M$)yWmd>qmvJOqB z<%K0y)#d6Nb~a_zWseQGgh3^RYuy%UXf~X(*W&fNA|$vg&#wg!Rd=jm%X92<OREk1 zaQ$p@3v&}V9Mg)J^DvbT#|;An2ejDzKUgOj%D72Y6l5Nf2_<A6kaCEUfJ%YW4_m#8 zZd!QGS7Y`iPad1u`2ASP0N)vQ>+=K*Ad~RaRtqf^UwQ*@|CFN|vpOIzC8s66w>kQS zb{*XmA`_f8lxA7~&#&<_b)kU{O#26K9i6W!xVK#%5t-dMqI>v++Kwg<7O`{taiBP3 z`Xd*F@bYcMg~7%C!gWHY>yz%4{nKp>OMBE~S8`KGTut!wpb>P)W`(cs&^GnG-yWcF zyF`)OJ3d+FE@-*EuRqQ5*!6=>YKv~a&AKrhas&FEL^12Y8Aq{&ecoeXee)0@El+m; z@lN`BLG1{kt#1;`cU`mcse+s2YX;zRyo8wJt7Qy5&41DPKv6xW*tHSRQGdpPz|Ix= zzGw|jK=b&9Wpr^C)K767<}pA&{wD|nt3*r1tiM=b<zcYaLDvS;_ym_`li#q|1Oydm zv#A4Dr*+a{fbu?a?WrkM%d!XK9J2qMWrRC1G~-`=MB+F+6JK7yMA<*Xo7?#GJJ9}s z`XV#elgC&U+k$awMssx*ZMBIL^X#UvUAStK8I1QIqnW3s`jPiS;YBZd+d6nxZHM_N z=^mjRE|&Ek{YzO0VwTZdm=~`1u^G(<Qnu|?vZ*vzhgp70BQyF;?_Z-0OEx^gRL=v3 zpc5L`U4^ca5QfLsew#gWe8tnij{&qv#1#3qVhZ@!(<8*;*_M4$RI8-G$i|xzIr--1 zJVz@GVHMBD_G$|a6Qg;_W-|yq+8A;<CFrG0?G|Jdd%S9>T}Vpt<XFNV@UJg3-QL&B z-OXv+>yy`bN6o_@S99G38u0uWsb2|RCB%OMx*N3L1sHnh`O_)SgcTXcuSD;_3R$1} z^EKXcZ_F(TtbN33_R{!Dy;9@tG3FKCa!iwZp%EPABas&j$j?^QeaX|xB{fu#{aCa` zJwC<VE=7lYjp0W|X3W%j0)XPf)cBn^_KGAvcq#8Uhh;L_|q?rbbov%pVFbrTH| zO08jUnM&)<>WeJ{phftYW~xQtl)YXivjL@1$OTeTBl9-7D!KrA=#B4@zAln!LsiEO zUwJV$wOsKXs@kk?TqJMyz9GZ0YCEbeI@+^=G67&b&*+Nni@C|)5B;m?%#R-YDBZ|O z$5kq+eQ1Y%wiT}vb2Bm%9CN-@uI-JniNHhdOz3*v<n3U4@8IZ_V=1X~$|P1pDckzD zGwC_<@M)!MQ7Fqu^#FQNYNTS6XlLjaj%robJr#vTlPE_1Mz2JkRKsKL9MBLpdI`r> zMfR*J3LmwFc2;7wwq#VI6Sx(~igA2e*ICLK^rY_{#jvcNWJ8a=9qG`Te4tbNU^s!e zPY;s6&ij#}W9z_`YWH)#bL6^zfERa3+V^2&LYCv_2Vq1i<f?-X?$rE>2a#;@Z{|AS zxB<@44s6tLT53Q;tH9KLA16VH{$I6ih?{*O*+{9`5E^^*>Rs&4?DKobsRJC1E18qy z_>$Hpy@NJipw$~(^>Hkx&sW&y%U^z-?tQWCXZNJ?8%(<4{e@AxAUgMm>Y)Z_y6gg+ z8)mIH;>`fPdHN2K=RGu@T#6X|cY*_BZ_4zj(e>7-O991G0cOS4;IXPZgp$KDWm~EA zEWly;RVklzdKMq4<KCV5!GwDmuc4N<@2rh!0F!=gXML$ZPs%1c=cdjRC<r$B)z0|V z;m|T(__F^Xqpp$?T3!j(pL!=&b%d0o6M;Tj47I=>HM%>3NMKf>^5BPLT4UwLl2m38 zmT9mI-L$iDSJ)~)k;j_9v9RXd1*}*xk>8uF^2e|DD9(OUa_pgeM;2Sak^jGun9Cea z471U^$J@u!lzo4_;(>)}(=tc<k?h@r!G+L$6EAZcZfk~~qgn|oIr~)=7EDvbNGQY7 zKoRb5@>bl+odMm0QM=ch$L#7*b`o99Mk*R5{(=Yodm{j<=tY{N9XpEH(Su<-laa&f z<xmtEcY}qyveA!J4DcUH)r-<~QJA_^<ho1~(T<dDBdrx7>j49Suqh<M!+}wqsb+hE z1_>lo3=vSuG1yy!Rvk6VSO{DCJno72AI}#h&F+4F0_<D6B=<U7*Ipz2?@@3BxrhY! zy{{C2IDR7-J|o%}n1TVlI`AA8X7ApS8;<G^1}u!OzLJ-a@6W(*pGbmRImy0mbI325 zhFe~h9Vl+7&=YUsw$xub!c-41il_AT^PfqgUg8B}l%d(h+Mc0+*^+}?2CCRDq7p<_ z3F8?D;?Ux-v;*WrWzr*sw9?$N`~=eopmTt_6h(w-I>}VQt05E}qS}na9>6g&OPR`b z)^JuzY5-r8`YB$FM{ay@U73N8xaK7Yd*B!(<Sk4y*bJhU$Xk?vzau-GZ7Vb?qq0D* zlB3Q$`enU_H%RW?7g{>eEJex=Cj`wK<&&ysq<Ry8!P#8!>ZfR!^<-Gw8gp)}pXGJJ z&8F#u#(XwPuVIAyc<`^3f@GpDBKs#AvzrCVFB<^!er<Gsx2!W!iflh7^gd@qZa`gY zy6mtiH@E>efflE#)~R-;@Ua1ujoiv7{so&G0qZr3$=!}7=3nQA31Kz(C;Yd342{KV zLkp8zU0UYoUqf{*rSXY};j$@2!PUn5)rR}kL!51BvV5fEGqTc0f%!>-p0z{>VsLq8 z6YpaeE$@=rjL!Y_o-?Kk+NKEJ^j=FplFlLM1jQ>ZhWGAJ#Uh#pdb*10S3{}ABw0x* za7J3C4GSsY87c~x%1;LynWFiG3zh;^9I&~pT_=@C>n&X}FT}DIyjeXXq*JzgyJXny zu#<Ox2u)*!tBs@7z(1PuShM~kAKXJS{PAORRN`JrHoaZHNLSZ^phcaF9U(ssUkK}R zh;}WI>wyt{o{zTVlQTHa3yL>F>xAhdAG{?Le>l)N4&jU97L8XJ-7_07FI9Q2k}gs+ zWBdk(Hg9Kv{z*^N^j^CyUGK^=8iCL=o^5f{a<OXaT4lfL)WSvCYmA0^dE`S0YwYm{ z>xmoH69#KQU(Bvwkbp3D>rmPY;q`$}`@tXp&BuF|iP;+0EEQzvxAD(Obc2WpAyfNH zhxAetizc|PE-I2H0@xYK7lYD&jVv5P%z*bXzMEsE&n5h|pz9${o=rNmVLvRG$uAp@ zwvqM08P--1GK>F!g|TuR^+Rt@<P93;#ELfWx;DH^jN-FL{D!3I_dlDyfN>GXYUH#Q zfbqU86Qo<@><QZNj_+;{9}|18O{~afh?KN<CQfLqXJcCIKR#CM9~yU*suZW|SV0z6 zhN<ij)v1s3dG*8O0%76e=t}x15Ves)QONXBXriga#eHOw^0bmnI!OjGsmc1g1xzsg z)&}(hjE3WmP#UT_g;jJhYe1EK>UdQkY>P5%A7e@fYXr(lX{-DIk8#-R2s#X-ENy^N z3zML-e!Y5_qC%Sf#D6`RO;<J9MZ2=LNMpl|!95&9JsRV?=~=W~(^s1}I`XAC8qCZV z7F|(H4q)0=eqhNlq@y^<$)*exW5BoeTa-K*Y|0iA2q+aabrEz?Jm;sWagVUf`H&8h z-G&sT8j2{?j4I<Em<cZ!Wz|~_C_b%>;trYA{zgy~rIST|RHyB@34^ReqnRPa-o>bx zC12W+u0uZ#du$PZ;iSrNC@}A(uLE=Y!+(X8;ZS4V4^A8wXb6*i<aW_O9FQWyp^H(1 zaQBA!%Fi~D;>h%_j2^~&cncaT#04#|k(VsdIbGs^459yjti4l|Zr!pim^N10HdorV zSK791+qP}n{?fMXTxqRz=Kc3y=bm<U-B!D*_BjvpWz05TBKnBYBW52FZT2#DCNn`K zj&I_7mj*LBQ?Ezi*)=5gJHy#-%%@5uju2vd-D#XRMl)sNN7gt24@4(h)7i7pW9y6{ zr+g<{vl*|nxy&3D@;~YKxV?5zpxDSQbaqCJuUPDiBGK>JG@I+&<|{?JV<K0sY?`&2 z>11j)&SlVSXcm=iaFnuKAr@J#WJ)Vt(HEVstV^*rIAxeyoH90A9@0%MPMMdRuVk89 zVAD^`F_@;8=?%H0y3)_hZ6Ftonx)gZnx!*h=jn~ORNph64UBR7k7MHYB7L=A8SZ0d zR6Nac=Q}iSXqmY9SGk|WPO*EOBIi3)Z>q6gf+id8BZ+5@P<!w`59D|#t_Q3RfW0aI z9Kg=cR^_fD24Z~uEqg4LvEI``1_I(E|5w#3-v7VVtH1l4Dtp+QIQ>Vn(?t!tMS&kc zd+R51amA8#&0Ejw$xYdaa*fccHg?9`gt@dzsg%Pm#G`@-b$9)Ud*Vc<v@LMRb`R6B zW@c{3dVPK$VE&-)T7j!%?j(d1Dti75;MJ~WcRcWik3N`m&Ipsi{-w-~)%|WIaI__{ z(QXT8^NI);bc<=V2H=Oro#_fpKlR6_Qei=0bWEti<Wc81s&cYth<z##o#kjss;64v zg){_ql3FDlz`3#bL{)Gb${Ou81m>}^Yo|JE^S7L84tRLi+40t4z0sUW$yV!!9&{G5 z;w?d_@tkhi6-G?}4^x6G26$yGxX0ej%VV(K7Kn6!*$o!+-B>H<I0@N}XKfr1OEa_g z>b~G8%92O&oMCqD$TkLiO_I0+8(<UGN7-XcbPsWX<tC6$&~xK3YlD$5il!*HJEC{b zxXQAqBlTyB1oV3D{49ddaczpP$Ew)R8)n{Je(1gs5QMVv_Lw>>vMY~FnFEK)yK8`Q zTM+~P&%p-U?`J1q7t45+mgO=OpX>wB12`6#W<p30W#AStQRj$`=voG~`N=7oGnEro z=a`OIT{GMKtSOu`*%P`)wg-gHVVQ?(Mm+&N<KE!jDQ|F}lvnIGt_S!>*%Pg^%_+Az zw~U*D8)kk1e&ZeSwhY9%xO9S|JO+MIek0#lK4V`&e!A|d12w<Di=`W8P-|cyKtPxO z11eidTW1qTQv;*_+9j(;9oAiW812i<HEG-0Rv!fldypB*nto3VRXLH6=pM=zpPUM_ zydRl<e30+p1Oj@47{(IKn?zL8!=kAC3D|mwl2TRvqDZAey}Cv9qKZ#Jt45aR^m^J< z(y%%t&U-hT+w6qri_`36$~xD^#~9Hc*V{t42lOw8p_$hkRDh~#TLYLNk>~q^Vi1%I z86!L=GkS(XrSar%neksc;At+~rvi4=Eda*|#rrV1+9sox=)H;KDl)aEcY5|W*yO8B z8USOuq>FUz*&_&Yc1{0Qw(ISoBU2pP{TnXwHYSame*2Gw0QmNp^_Z>q6!^Z@eOE}i zVR9U{&HCZc8c7cLO<c?<ZtM0%!Hdrr(8IYQ{cFcPTWhl?uk<Y|fDg~T7UaD>KaO{Q zETqQ?QR>dV0G2CLSCr&XtSQ9$#1z2wQqG+D3!yC|r?oX0&2%(WT)i@cj>i&U#CF+W zPzN6eOFFwKEZwXhQaU?{gn4-f;o`TZgLnVlV!4e0v(n`gz}4r~_=_SzJ79=MZ?5bY zD#!Y<#-+}0mv^D-LVcYe-GVSyJ3@A^QvVi)W_gset2^+P#L#{aI_-0vy|M&8Jg(zR zw*qvwq4y4%y3m|)_$c%Y6yXgDo((2CZG{VXD_B`QT^(kT#J~-vo<uc)FYWcxZbkup zJf&0>E0+-_Fxr4ZC+I9Iwu^O;+{VCrDzYsacCUzl!G(hZkbq!;;pBtDGyk$=(?n3T zTn`@3lH$aU1CANwbQPj_WOYYn!kXGkPG+!6k7ZwGU383h7v*5=!Q~C*Jfzsd{Mrx< zk1AH9fHFsGu<UtO8QY~6b6Qko1Gc1&hH;@t(b1z2kPKe1NYN82caV2fo`{g6RSBV> z>xZr~uL~;|IRw~csu#RmWQjOz8p?{t<R+k!6^!Zv{r8Q##z)@(WkCEcPPM~>qGh2y z0;N0l?A(E{*jbM+_-y0V?ja}mvU>TRM|Zx!;SMo5tBhsFOZrO&t!ZQMcvST}<cEU3 zIjWkZd1)LG#>-Ph0YeyZsww!-eG~Ayz5GCa#)`ozHeAJ9Y-Ya^1Ms>-e}V7v62}@Y zW#Mz8>2&CTeTOW{&Z@2?qfI}gu`>w?Wwsf4)6<T^h4yt|ovk5R8h21X6AZhN{t@Vr zh|ic+t&ld<4?Mfg+t@(ATgBaBFPNQC$YvuhN7U(}K*YOWE3Xm*qwdlIo!hk1<fi)| z;CXvWru<5`oWI>wRqTW5B$w$J>PJBe2!TkL^q`J{2U)MnoqP7xS0&>A6akkGXccwD z?R+=q9e}7_!9#e^K8vSQJ%nCVtl8&N<6Jbqr4P5S&Ht(Wvtos&S)YsCsr>LFv3^0J z!I)L3Qg<G5x7Zx>$r$1Mi=86ucl2bnm4m{}le30&Gh1imi%|i9%3ifw_dIYIb$+Xs zWL+ohj5d@tP*ZX_4*8HO9Gf0h{v?F8hX|L&%228-(%h=Nh*z5{1rDrRnnh_svNH!P z$%-YXN_h?^AM?@0#7&1tgM^6wUd*K^Fhj)KU~KmX)cvRYno7x-y0>F?RXNfOI+^t9 z@25ZB>1q%^qi8pOZ-zj$>A`H{Ns$aKU__Qg+LgsBrFcEIsCYK#2Kl2}Jv}v-Nc3eT zW4|uO#GAPvSQ<NTbhm@az2#DM%2VdDdeU{kxIg{gaBP&VMb-`pvE~}UJR-xPg>2GE zs6&yeon|d#z!uV?eT@K)v0F1QHitCp@ZCdTUkch7_9by}1z1Q*nBh8^8qW^Ndr~P2 z9Z;l8)-}S>!#v74DdyD@6*`4amQrLE+eL1GD6m#yHDaYgS_tfwiQtVG^YH@6u`MxN zi%d;gf^C<`6Ep(~*xGPfL{ytt0XrHs@k=wTOD7qYX+#6*R7#R$k}cPP!YyL)GOEdy zrp1>+KV2w1Tk_phGL>w^EMXTa$DH$^-ew}Fi`!;7Hp{qp5Cdb*l<%2i<Ymg(&5_=W zAZGeKC_}=EPXN-GP%+0^p3~%WYDoAB)*0nub8++8&3N&g#$*v2j=vF^wdBga?#%i1 zrMpG1k~qFLzZZY;TT1R89_~e0Y`^k4d~r5WETT``vKa6)f6AJ&GiQ)H{bUA}F-2hp zl|3Ohg~*t)G=<2TVlrCf*v=X^4qSJ-U;Ck?uWAOojEZRq6U`2`(8yMVXftR)-Bfld zB!&XftnZ$}D2+l=9#ec`DfUNKmDhi$^jq#w7wor)i#}KpIg@zK{D+TzU<-Jes)>5m z{tov*rhyMgnT<dmdUQ#{sKbU__D(eOpH_X`JEUm4kqobM5f0-hZ+N34e2?%xh;IZ( zxZJ+Fakm$%+;%8Q|Cv+~PP7mhE~OObd(((E1(F@{niovIJ1md`8n9u%AILT3Y3OGQ zu@D*2V&_AS8L`qw<LX3^2TU0uDUKYf(r9W@?6rwT4Pv<wElh~3<4*QP#k+p@AX~Jj zMmb9kRn|kE9ms9tF>91=2d*8ESx3Issj~)A-r!mm;BI4p_M{)XWV^%L_bAqBHtmS8 zP%SAd3<wn;U~E=GB+GFk8)<q`$dP**NZGtQma}$0VSk*9z!bU&hNCPkaI+2%-7QC$ zS1w*?;|~OrAC=F5oLU!gYrD)u5w?wfuH!R7MW!@}bC|X$?3iPG#o2fu)_j1q%=rFf z>RXf(i8{`I+EGW)Y%8C^JzW=jR$b-{U7YV+nUcP!Bv)r*Cp4P^j>acsSI~rzm!!g4 z4D7Bv>z(=4mWji&-C2)?Lc$@AC(K%QNDWV%bS6h?grQikwbt;9<F5ED=v0(k_eaoe zA_w@-s04QvnL!*!_??utJ>CxdyrfYQN1EQ$&AXUx#2QD)4Pz1YqoP6TXPB-n3dN(S z!ZaRA&q)$ul`pMgEXV}}Seq2wLwU=qFl3s-Fyzx=JSmDCsj?_^uj<Ju;xg~tL{a`n zWUMoqHzP_q`(jLgs^&2)LwgMKD9_MTk-5e=oMzfUw&?sALUR)6%&2@5lx77m8)po2 zR$gJJAI<Zl@R?cp$3L1Ep*OI=Y;Xl}e$CAgo13`>sBSVhiv*^6ZRH;$HG2oLMdYLX zXdVZviO-iMGFR#nczA-N%gC4Iu$_y9+JFmGm6?-*(xeikAu&G&t0{zS9=@78s~0Wc z#Y2=GS6d_(mB0N#jzh*CI0*kpOTiZCl(oSZ-OG!cWj=LQVl5Ui-xX%XET)(=5{1VR zLh!i6q+%ASunqaFzL$f5ocKEQi*u!YN&wr%Oi|lZLEBVG`-E6}YSg>|GbxzhK@=)V z1h0qG`DK`?8a?em(}B|#Rc+6;0mdzSSvk9Q5ZJ*b?S(F4*v^8*w@}UdLy^)~iOP5W z4D)BxA8~C%l*~@(U1DK<k`wIRW{XYvb)-2YhdW%;k*4psa0>CJikgA=H7K=50||PF z47vB=Y-&qQRj|dZjnXO$(Pp3wziN$iXkQ&|X$^H@jrQC|dswju7Y@B@@tk&e>0vRJ zNZEE}YXH}LaLfU{HQHu_-c}ICFaj<r_c`@iNSi1aLAa>_Mwe)$d$F|GM?-XVS@hfu ztAnDqnCG$92!*SNGjj{r!>W2M*1DnPBTS)Q+B_69fAEI-GUrhEBWoq|_*u1bPUO4> zdfWMa<m7_=;)p*%78%^HU(L4rI*Cs`2UW<TN}Df6zhWFPqDCoMy(n4V<Ee88o$pwr zhM1FcPtQ9(K}@64&hopXEghh$h77bxbVoJs$Zhk>UbYW-w|>pu;T?dAoJsnI=N^R( zpSlZs2e1#Py@cnUiVyXPRK93FqU<_LY508+6uzSL4t^Z-Q!mGgC(SC+`7jnuWu|3V zT5N~zSeoj&PpCp`K9yNkmel-|nplD~oID%NDAogtD1?X6z@i3kEFo1RTFO8Wi`V)p z+I=%oK|K60O}^<rij^l_z(~})#=z2m^Mm{c|6l!h(#eJe0&2tl?{{4PPyYX31rs@H zpKhpTXujm@mojX^>Y+fgK+yX%8DwDf&8!8@z^Sv_vY9&lHcQTp8MM-DU7PFBLKdIY zt$!w4Etf0l<h2$x6`<-1WVNho^sVULl4{<9zJu`N@Z)M`xw)Yw*ZkQ|FMas)ymp^E z+^)SIuEpzmf%WNp^&$urVGv#z{GG`l5)u-g3P3o)-J({IiGK!P0e&F7)nn>C8sH#6 zpBWHc-znfCJBf?jgr9BGcs@hlkrDJp*Fk;ip#kck9r~h+3O_p$UEBpmf(&or3oeM} zz0^lY_-IAt;PBDrMu#@oO?a*WQanT}xv0#$l>&El*4+=;n^Zy3b~G=sfn})PY6H)x z-g*OzFuwVFVKBbMdsyJJ)EuRI?SUvTxk-0M2G<@0wxh6x&nQHpCf$^WWLW$ud$OAA z1zU2^>|u?njl*MW7FA?+S`{)2Y>-YC05+|{8HN*tHg5lD8_iF#LF**>Wg`GkK(D_u z$SIj2OqK`a6W1^VOvsqj<^;*kF&eMJ((NYI!9@9aIpQq2ENJeO=_4)0rJY7j6Q{|g z&x_LN6({42j%pJ~IvOhlwW6x(Ng3m$jO00Vo@556!o`(lwLmlJ*4bnR?&OK|gn|Lx z#Yn6kiy3$J(ssY3VDLjO!@;SOf-m1i%T22K2kDydkcuBWi!2b*f?H?}_0HY}i}m-V zXxnz`rn@sTwqvmyN6YI<IoX4?!7C%b&M*q5*#$*(M<$Vz9VjIkt4VuW>KiJ~YKgd0 zY>9+HO?MGU`uMGn&O$VTK$SjDEUbU;u-bTTH#6cDTgw#dm`>v4IEgd~s}63ZB3G}< zWH*cfunqKv5g4G-;t1+@_6zt}dt3M@{;XsTo-+BC9+3LdA7W6;?Xytj;X8<mSA-Yn z4NiQET3Gc&B4r~TR7W~dj$x`e;MbMAqZtV;;-hudYYkfo4b}e&UsdT2fTi}0U^nS5 zIZ&f4ch~awjftY}^|ys~5#1GS^im?e+*te*tfs7u?2qZo+)$&8T6H#rM=b<Z<qmnn z^kQnC5sAN5a?s}fOBBoi+R7{%PjDqZfkms;q(+cr+m<X0Vmg`*0kHUua8q^m1N&pK zqU0BQEm|(Tt2N5!)8%Z;C3J|Vq0WH*uks=zxA$26cU9jqcoZ3S3ChiJs$VRarCC1k z8mES0nXo(ZW?pIxgK}w`6>AGfe?i5joP>CgVu_?QFaZ;CUoxoCM*%vjE<;8c^9*gZ zvznO5)8{Ou{`zf523CnY{@_dAT;IF&>U-tjD0po@do0;Stt0|EPI~P&qSw>W6n(L9 z$K3@xmxY;CSkCo+pNDR~VTr^*7b$U~)mbs<ik!J~V(fTICNFrIY>GvP_4s7kVw2kw zaZYb_qjqimF2Bm6+mpa;iq3%#+EFfgq1ZvU;^A(j$!Yjg%#hHOb7*@`{k~T2E%T$7 zRhuG;+fHCO-+<yzRPZ_6q)@a9|9g@i#NC7}_WhFNVr)j3^`HAvx+!R5F9q1XOzPSw z)Jz9e>{1?Po02*zEg1?((Q@0)6K0Q`=QWRvw<%w~{DugOVv`Xln!D63D&^!PQs}ni z@Bl0E5N=UToGv%kE0Y3LV^(qlZdi^ucMf%&<;bJUW|<^89EVMWvYg@1slsF(Tp#@7 z>QaCBHw_7leT*1Ybjo~h%t^65EMZY^R9#tmfqiQe;9ihQ5N#>}UfKL$%46^FiA&W~ zlPvilR~92?+aXo_$k`ApOL*CorkWMdC^1H90>LNFsouh(4UKJtpFf$R)DptCFAUQ< zMw6fX-B7=12=kcnh$$~IH`Nx_vazCFkli3-TsTMgv=-9Yw%70j|8V)gkQ$kY8i7sa z45(+fb6Zs7IIX#&5Y_t~HSk(LD5@i72NfrsW9MAXz+S*~1uTP4{nQV*es)yum89Ly z$0hMAJWPu#k}5N@3~MlNI0fqll;a5NY|ZCm)Z3#*(c{vkh4TBFVLB0eIsxY`WQo@o z`@b#n<W7kf#EJUd<#**PVDo7HRFf$`JC#9(ttXI<AA~`_sEQY)X>_h1mWI2t;FlQc zS#nGd_p%2PZ+9f%6PMMs)SSZ1B7yNg2q6nvP3ibkfSO8dq&{(LY5pWpgEkYQ>-ziM zv}_~{MY;19%nw#a@gp$bfEH71S_Q)e0x67ryRKcNlS@r@p(DOe>MIqcy?U8BiOsL1 zNaDw@os%|IFiRRs-m0HM<U>lj{f>j0J)Sjc^_mxW12Ac-{8o9=D9xt0LC=dH3c6pw zBmF^Jca-14UbyW0(AGmq?eM=67RoxlvBV~tNG~y|cm;<Z+%bRdF?J8-P;fe71FEOx z4rpiUdAx9pnw@ix=V;oeV6H$@O_VCk$c{!fOmua%`EM5Rk?GU%t&G&MFs>+7(dOFg zFim?8q0W4F-ObUd5Lmi4v+Aq~zFrUmQQ~wj960Wx^CPms<Pu;~Mmwwmlc$S;+JV6B z?g5^#g^Ek|2@S5$z^b-5xA+_Cel3SSC+(9%Um0hJm>C32*x$ijcWG1@H7Lh1?}D`_ ztYocUk*k#l$E<VQhq)6o+iw*XdH1_77GF7IL(yZ)%!J>PM}6U!Sx6nG5J!IDAK`6m zuQq52Ke?cRIDY4Sa;=O^wz$l<i)#_YsF~-*j`VEA%(qwDgpZ(Im6~teEZdeQw`ftK zT`?!8XwsDYvMQ=xU{kEzs7Y>WmQ7yXu$gBr#|K>9J(v>=pD?Q{;#xaE&_o8+%;cX- zEi7a!eWu`k2kCwFImjc^NS@MceCz##mB5&;Z81Ut0U7=HSFA+v-(e;H_d>YK!nhoO z;RnPXqea$rb8-!>Nf*j>cHu!JR9VFW(CCCRxfHZyO1nfiHYC1(m{2qcS_Wv_tLc}z z5slt1K^~AjI0kukhP_;W{!TcM15|UUMWS@>7$kmOZ~&uFK6|g3HTp~PO#12edfQU3 z0!ffS8Yl3R4O<j4Rihc-&t58|HTy`33;_!%9r0x}kQ^5toe4@=_v$zD0GO;bK0F!~ zg|9kGunFN=7n=}I;1jeYh=8}`>81Es&}9q5(a%MTef&5jl@=8)9TO+UNJByWz3S(j zTUrc__}*|*cfH6D$AMjrfD0B_I`1%!CdUj>Ny_01rV~YV#$SVIh#^lmNbbK}Bodmt z%R<tnySc9mRRj4j<%LodaO4HEGONxqPq;b@IwEW>Y>U`g-R5+rwa#)+Y#w7zbRKh0 ze4O<jfPc$BAib$S2z(OTD=wA&J=L&~<gicy7zjuc<iCGMTh7GI+QQaE(ZuvWh8xCB zTY@m6hWz@#$)V;Gc39+EaIR}d(uSw6bSAiP2_KS)!1AG21IOU=M<m-(A4o~>Kh90M zIUy~3*oWFfslhZELeeE>0k;ITX(51t+g;c)QPi-@-f}OqIkEV(N~YlKnOK+ovzW3$ zZIL`}OY!+^7cfDo7caoQoJv0IDQ8=H5}M<liE$k^!WI4}*flibr>1YPRc3iU^_*8a zo*_(1LN_7|>FnKi8e@!F^2?|J^bYQ5%Sa`__O{4&;XP<gFCg4%3REDiAUKEXnT&=0 z9~LXtkGWg;%N_#%a`F-5|0jzn{k{I52K&!`C-FiRg*@K;><}=TMI#|9Y+@+Lg%Q{~ z?bMoCnG1<blmx>dC^7RP(ipzUcXA3Ce1-I$H(ShRGud8cvp*5zfKnN%2t&0&d@$t< z!HOKB$1&3w2Yy)G`xEK(F#MF=X64o5-wQZghY+>~+~Mk)Ql3`%>R*(OZVT9jZf;ew zYbR;hT>{z`UMiJ148v_-&CrD_f4i^PR_Qhc3OAh~FSwy`WZ#eT+rE(8sZ&CV6%6KE zxBaStaPzLCGD;+x`NU5n%KGWO+UdC07N}%3ibM|SdE4vKOIc2hoUTYjLT{ug%5RF< zFaI&07H^yJr%Q0bApJY1XWMpe(pbnXwodI2U#C9hr;o1T7wmT?mN5PIG`A{)IKMnx zp+@*0DlzjMe<4Om6(nRL0Y#df0E-eWiB%$<5{@6X$C8BtkSs#)&`E<q7s*A*VJ$ck zzc6VdyyL=y@0BSQUgspjs!ck*LsqKB4B@GS3Y+;Qc7GJ`(r}p=FfS`bM=i;UcjaAH zCnXC$kr!Z9k{Rp$-OE7ORG293FOReS4-BgNzr6mx2bBmaDgTG}6*i>+0zY`ON@HRg zTK*iAsMe#(E*etvwL&TWfEi9h-&KMqN|csVn(tGbgW-Dt_D$x%5iZdc(3_c=n&EVE zJ$<@*1s8zjW>TaqP7qNbr*u$Ht0yu@5=;+<d+H@n@7xcO%l|dl|EGG+c{CO&^Nmm{ z%wfY+!o_+PAr1@K@-tiT@-2;AxYf?<WPJ%QV_*)GQ<<uw=PSj*<}7w!qd_K%*)bK1 zzLJS$>05nFwwH!wnIG03<-R`;0^_6tPeaF=0}BqZ-3i=c42G1JYE4LEfQ=eXyf1bi zF$a5P)q_<0`(fbht@gr8L9|dD&Tf=NSJ`VzQJKNc98dJAEDu0`MJI|w2Ei_xAi?NC zs$D7*B!EO{^-CYyE7+dEg(et_6v}F-9JvVnPSsF1%>AR4;nd<73t7_%;!deRWHF#e z-5?KD<w&7y6RxpAF+}c~u!2{hJxfVRp+T}eQhQ6YqyVIE5gS(QxO}6~AWT`KNL}Cy z?;rk!7FZ(o_{+bO|1u78{~P}OFLNth6m{$t8Blp`7mFtwe{C>gM!N<jm~IEM@GTF3 zCdJ27yQ_x`6?J(ih-E5Q0B%4mtcqn1Aa9GvYm=agtH%}^e7t9RR{wnZI6cAkGds)B z>I)Bmf+L>l8!YydptNM$R;YBv(y`jnm}9wH??DHR7}*WhZ}Fe*c4SHL+rNK_{K0$_ z=6^iq4z1jN6&fr$Q)Zxj`jq#U5)(#3d|@Coo&HMC0>$^dZixPzyPy(Z%$>fOVoH9X zG0+ivr4j~QZ~b9NA5}ok3rFmwHs&pZG-N?&M-4j5f_hFFA7oNRWkF@3qcx29O+V_D zmz@)_HmFmrwKkvxQM9T!`=DxL6N;g5*};=6cqzveMyqI|fP4+@CI$^h({W0P9aC7p z=gfy6b(>tkeUW0T;9=8~`0;S7ojvwFIbSNLo{w+9a<<T1IUlJTWS`=Cbs4Nq0sfu= zee)x;{KvJBFnba^%qv?Z3lL!ath78Cp5FPln29-hDBZzw#PwxqdFm6S^7MmDpXyl` zs&3Kx1PX^&+T2$Mdec!I<)qcrA$-H5O2`A5s51L{x7d}H6tohi(vsRKR5q-+Qo7RA z_Y02n>{3|pvw7{_7s22E|6Tm^C;ozr-2cE2+5Zie|5}eJQHS+bI!61>%W8fm@1fgY z2&5tgMv@9dy$u1LR}2(c2$TgPNy6UPWMd)KNd!S~$;w*Xcal@K2i0rJvQr3*Jh1vr zzPXhxS7xhp%9gXp>Ebja>pCN=sA*pCVeR+4b>pye>V4|XKI{86M-Q}UUJ6>}kb%Od zeXVaF5=oO&f5?qpoA~Tza%zcXlRVFgUF&kdWxY_Zak4r&^UUJC8$sF%RaFCGYtOVs zY{fotCWf_5T9gI8MZ5<|ZR=79$?t5);!E0XtK`syVr0^Y?N;8dwBrWd)n(!w7wMIg z9&Qupm51_d)D@W>iO1w8&>w`2pZF{%=(h&_6CbHw8c=laD>Ho9_z;XTx-SXO?|R_O zL$+rDJPUPB&Uj4$;#;||;c=6CoM-XU5vn)#!3o^AbV~z23%g!t@)a100dCi3{+@-b z?nez1)Id<~E(w^#_O04SgRir6mj&FgeCPrQSh{QX;o<EpUy4H8SUw~Hd8{9zfKBY3 z`CB#k8_Soh&}WwJx`P|T0Z6%_J47s>@&ghyf~psafm}uuo8a*R<<1_q)G6|XmJDmI zT<h7)sxIV)Y7Ly$(u6^0^nz;6tlun2F%8S6p$vu|<|@{*)oe)8tr+&t2f@?U4=jUg z^0`jZ)Cmk)jd#jSN;qb|El!6TV&`%EIc643G$}I>3+Kw26;?1uvZm6NyjU1-{hjDd z(hyDLKTSw}E7g!2s8i;$;B=|gu`DL6O@P%U&%`o+;SQD)$AyPyY;LcZmYRWwxE={` zH_qn;(=i)WK@wA4j*YY*j2x(Q8I=O?8k*O!Wn5j%02+5Wd*-5}$fZkg>lZ@jm#kbx z2YS}pQ;uW>-Y#bRZktx*KlyF)O#W1|b&)C9ht-T2V#>LcX-&O4I4p-3R(D@3k(G0G z-kRX$?d@{$4g0O#`v~Ver^P<43EZN$JUc@p#!=m69iQviNRl<3bXHU3-krU`eJ|hf zd)FEvf`TCJhX-J~A4vZ4;#%H5R*;+@51n0iM$|I&bZ%6FZYoq%wP6svaHx%CVdAQQ zbNA!}U2t}cS1My#aG@@P3ACG25AWG-_+u!aImMO|dVYj_yt-(g1BX2@&%@zU)S>!l z3c*D`1Rnf*07Yw5vwAT>v`sEWnU(bG32%E`j)uwwn@Sf?G_2xir6N-dr4%thkb2#+ z0!bQd#pP~2i)9E5O&qs&5tC8MZpOKe_TbzZEN11-MLT~{9T*>5+&&{BdY!<=o4}8y zG<D<{XqBwd>r+tt<dZi5kavE4fVzB6nOVL_Is;r;FwW&MUbcwJl_{Ua#`$yFIO=@7 zl*ghehtqv!qzNxuW_w(<DF!gNk;UK}N4jU8Q@S7$Si~O3QN@GT5KXZ@Sx7d5R-H0$ zWsxbjXaONukue21al<cJW^|^W6I*l$EuNtrqN#<|B48fTtbH-wTs+;<y|`Us1mC%i z^PWq6!tRxcyVzg&%9J~Bh!i6&RB$4pL^y}5*=%mG9VoEP6Nn8X1|sW1gwG0*8WI=- z{6|j5hqS#sffbg?#extOVXU7XR7f)4Ay+0xHb4ohs)K6IjOnL7QEo$f#H1+cTs?;} zh5<G!M_)%hCe$kX>d$g3<m167I1I3vy+Ax&CbyrS9!7+?&{I~r+N-GMa7{1+BOU=G zP!AP)OLO`$Be?ZMXD{gViRyXzhlbiB>8`g+S9-neSV!~11v3Yc-|`vi6jY9KY0VwK zKdF7~OdHiUrY|cL3)L4hiP{vS{t7BH9Y_~)sGKsq%5MwmYH1nPEpOw#HSYJm(jn-h zJ}E5-q*}-oaCHz#8P?Hpu<VtoGluA@E0@3cq&3wm!xaoqyqevB=6zI&@y?etIp<YL zaJm!W^$E@3FR0Ss`6xyCr6&_j?OYlO4V-0ffkL_7chp7*ip90?bfK3eao}O>$cA2j zBLn*=`gf#O$C_wy-J8oOu9&gcIR$I|FqoOk`T&|wf)%cAS*E_+Dn#h7Vh<~^*9x}G z+?>E3|KNn|7Q{PpB(J7k%O*^lChZ!Vcwwp%Tt%ZNq(Dq}hg55coeVage4ZsDX=2Lo zNv^<_;IY!-H(ouBTj<xOW(LJY`D0s}o>KVB-HyfxCRW`aN4vge_r9?}r0y(HxDyMz zkQnxoqBh!y{FKy!inDh&$K{7oj<q&dmd1#W<Bz)B@#9d9R@lIxcehe`NU;?#NR9y9 zHGp~)**JvmVXuZV*G*f5FtyrL5pjZ)i>sTcr!4pR+`UcTPfTI@@CJ9LMPt^}ZmyJS z3&GjmNoGXtb%f&Q{Z}us_~Q|+gLR(O9@S=_f(d)5lS&6Zx(oCccx0tohZGOl=jGe% zpN0EhGy}p4oyDfF7D;J_xPEoyf)WEW-yfWVc_X$RGg@}Ncv?5CD_zldFAGz*xVbg~ zG2a2KJMV&=l<-Qe1FkgW<IWV9^LUhuQcm&@o7i!V_Aie1e+cI=%BnHM#|2L#6n454 z695bV)*ne;8ch2%aN?SJj}$^d1ONuuQGEm}FBmO=9yz#98M<@L?Hj^w!2XU6L#xq{ zE<W0dEw2<K;xW|iZ_jMCeBQ)o)Ys$wi>4caV_o91mTv!uz|{H&NK{qU@cJK%to8L` z(rapvsBDgU24&0&Nuswce1pl|4CI)9y(g1tOAes}*uN_4!<3c))}0QzyvhTxdwQ=3 z>v+Qewn=&7Y_~?I;-_X1{86tR`M1_*59(GzC$_ha)|Ecoj9kC75<#>0$iqlH|7@9D zv3YX3FQfaV8C~Scz9u+b<kF-YS}(aZi|#j2&OA8=k3L<F|LI=|lIq*OFuf$fvIPX= z#&)LJIPH1P^xuKgWXX@;(zaTGTluivv^qgl4|+Qr5+SS4X!Hg;b)_(K&uIAIn~kMh zKE_;*Ufjx_xL`SL`s3I`+YXns<D?zpOf@8P#-4ue-*aX>XMP&}(E!)KK(0&JmHR@z zPy6FJ!?svB=`}O?i=|K1+ngkSOW`&>3Q^)Id6a=MOwxDRQ44|9ce<uyJtN7-Ru;F= zTiL!~^8R+-qk44jsfv3)s<8=mBY;Y1<gjR4bKm?JNyW(WYwbw>0;N^lJ>-g|?Tsbd zR%K-IVSdiGUrHL;Ym03EK4O<H2KN(;b6ZY2zKO8he?={E^@?_EP9s#<l-cu-bt~Am z?I#e%zBtqBz^pk9fU~cMp1k&&Vrt)2eGqqq5nWF_;D%#A3(&xeIV{<TGAc^9-NT97 z2TH;7+ofUbH~vOKTlvt%fsoP_y@Bi}^(*V<9YUMs)YSfvY&#wQeU#e==hS_a2Mm9c z6UVq7ISRYd?A?X!CsuTlM}ue16#As@&ZW}jlnRE?1)GtjUU!EmPm!+JOfM>LdO8Nt z<ip4CZG@DnJJ@2~lYVhY3ME$jk9tqvnu!LipY75xR7a0!B*exeABD--ej2&lWy%@F zsJ3HWB}*3z!*nI7T5IrSC-r;oHBwEx;plCaRSQFSmlf1CkC#4MBnl>O5E*V3g1tL5 zeN&FQ{Ad%~$F|#w1zU;+(X$+MVIiR4zvOy;qj`A$UbcZklk@4Y>97&KTUw;f9_Mso zHJcaXds-D3Ziy%GoqXk)J$c~4(CXmX9aDKAuLWW^BC{2Q%)61>8fn>cy*6>XU+=|H z+t)4K2z`I~7PKBM8Z%(WAB<XySiNP~8KUnF8@<KKB^*p*f%r9_;GS7}h{c6Is{l5; znBktlb&E`P$K-N|rWvPZ0jgUzd5dl{u;~oDQ-I$s?zZpKNkHKE{2uPQZ{&%aH)rcD zRkzRV3He<VcgN`y$ty*cz!Ygc!O=+bP@xQ+ARM8Xkyz+RCQE<p&6EsVA+;`0lw5Vr za7^z=vst0JE?JbK!y@MqIYQHA5qQsoSJEwolEQADcu&7fnU^qoQheSjm1&SAH@arJ z(9p{1oLv(uSDz#0yJ^8P+L{g0ipH|)%C@|@VV+AT`tYs-uzY>ZpYtoVXC?LRlESBt z+Mu4V=dg66)jjJe^E)k6RgND|#z2(nF#j>Zp;UWt{bf@->oH+gJp=aGF2)<USj1LD zh1-I&Z{Iu=9$Zv1l4!5Yni^V^*+7fyl7el<pd3RfJk60*08pQqv+#~E$Z$Xx-c}!| z-!eB<H^`p0Pe(F3V^U?pwQXi#iB=6IflD$dnIEa2FgN2^ID^`SG@>||hpe}R<hlU_ ze~=o;3ca%!!5k=Bj*?5={w7mJ>VEwG`>wv1zG5UC5YQ{uzshz5{*7$s|ETjW>M8w0 z@O;brMp05CPnlmH4g>W?Qf}8fY;46`nkMH6WtTCw<=mgnWbr#%ZyJ){pJ2k_=dgpG z_vY^PwyB-j{l#-!9*{kZ9i6+)01hxK93)8a&-@Fy2aSxA<1&`43v4_TkhgnUC}cDu zazRXA=g>3vQe_l<@ZP~OXt)cJh|_?d^Yuje=j{`SB??OYiTn%+q8@OD+T~>Vw#El0 z!0^dCg>&e0vA3W)zlf`ua{RFD5;PdoevTwWbb)BXh#&SVs5Gf$ju4RgO<F0BtjTT_ zD0P_W;&qX0m)VD7kZ=8%i<sSc;PcUp98xbxi_U>Eu};i-gwXS(OqoabnSd8B(z0F5 zzH`>q{ym^l3Vuob`9v-)%_|p`LBI4EHM9JT!^_<v*H;3vBO4VVOEU}OrHZchTHMWR zXJ)~dQHEmkT^Hn^d#-@j447SgYb+LBtejS^2W2f!!Y(E=Poz6R_sHmwy=JJ3@0zMQ zVm-n4$ngl;GTR}wW3)@UVb~@6>mk`T^A*@J@s-#y@)hx&`Uvix^%meW_Lbr@<Rj-d z@|E))_(=SSd>#6L(^tDY|2roRLMxAG|0^dJ`H!3!=5JK2W;t;ESCruYE0ow+I2rx? ze@2+Z|LeC>%8n)`|6GHSwKF!cCjCcaX*EX!d;9-XJg9!!DXC!k&b&Enc1`*Z_TMv7 z$gNR;qb>z1mE*Xk%4&c^9JE{6jpn$uHT4V|M3ZCt-I6E-WljZy6^#(6Pch7aOZ+fo z8TlUe8+gg~>OvP|htPV<U3~7&oAugxe$4x}-2$nHy(u>z*kSlsE8EimpRL-$m%j}R z)I}5QE*2UP1P@a#mtZ+Cd6ZoEIc^}Sn?PDI7zT`1M_h6M1tE+Hv(E}%SGDHfLxh`h zQBP_CZdc9`>I^lCmi^-vXHf|};E!@I1OB4TDD_aJ+(7dvo{{6k0v?I!`5$*l0(L{6 z<gK4Sc=R_)7is3Uax>><&uay&&8-K=INrHq=Z%T;Siw}wWHvErWn-~In)yr<ilTAk z@-AwddW?<{R^_kU1@khQ8gnrMo|gJ%+XTWBBbrK6(AE?v+KqKeRA8kdyvJQrC1}RI zDbt#pMjqvDu?U`Af=n4r&N|4V^Nf$=eAh$`9BlE^3@QPyibO__S;*rxpyz=G?q=sO zw&LNPElQS_?jRJbJh7?)S2RHy15^RR(i3u-!!p)Xc{U6FYJ{n+ce!?&3#~Cig9}lj zMdkZc));G_d-2E~+*VwsJ1cZIgS0+csfbs)x~$bFo!;<v2hCu1SpuU$K|CDUsRI`7 zuthL4=5vgtL_rGh8j^6A^YKZ>xMgVB%ld{w1Dn{iGBCmG;-}7&Q;jKuHl;ZYQW{0F z`hbH20_tN&CiD5y0Wn>G?IqHgr@epfn*vFhzLfrUV4rH%Tr<~c8Jy>}kBEMiJoR!; zosR2wuQ)U1+|U;`eGFYVGvGLMsE7PWy^xEB_(w@*S>m`BI!^RzIc1b+!AU3Nj<FQV z5B7*+c9geiAqRuZu{DSo3$r!crY-Vi^fy)$^qfe(+4UaBk%rXQ1D$;b<!S~byHGs( zBkAh3+7!?|ONN2#umlQxCQZ3B>y<I`tHPp9ETeEE>b5DbdZ^cTvt?lw*&VzrD7Us% zX5~J#qpW)O$ifsvGuU0_0YnM{i*T<$Oy@}-t%&d+ki<C;KXMMRvAMcz0i#cmRm<eF z=Ah~1J{Shsqnh2LC<rx?F*VvHp8}^UEK@4Wf%FeP3wY*w5ock=cxTn&Uz4L+$DRpy zFOyJkf3^heAri9W#XN0E)Wyv4_c<Mxv1F2pMm`l_*hWC-`(4aMggb)g>C!9?QTdsq zUomR(=gCS`p|!=6NUOk4DzjNZ?(~0QSsh9#Q;{GeiV7=`N#$J}7+?vo(E5n4tSX)j zTQ0;w-HdMe2+i@6iR2Z)<{2UO?!BgQ1k^DGzy{yrc>CK?J>m5Z!u5`dYMu+Zkv$c` zt&F;KiHuKk?d7F-k&lDLIjb$gf|>d>En~7FN$epTyaQwV4vBpX34KpB=~2!H<)FPg zru@mW{NvLE&&n-(eQvUmQIexK9&;z2QRY>Oyjk1j(!+aE-{G6wtKm283G3GdtY-en zuGu${r?=`(G&$v)o3NdaO5riQ88Y#NTjMFQ#8cc^i65A7(vh{sz!VpgFgg*w61+8$ zc-T0(#&W8$!4o9bL1Q$jZERH&y{Rs+haU8fH{CuR+W`>x>IeD~!S=hO`p5$2z1k@= ztKS9R9-VPVaImD-);ro5bQvOe`#TCluXblFfdK){!ThVUTKeCQq!I>B=CTI%{~SzJ zY?N?RP<`bZ$3u++gox5p(=_9s>uu<o;n8eJBsNIP^%LIMU_1I-4FH!r=66Yc0KL65 z-*RTn=p2W)X{_(iZ(&~cE?F|@SU^~|*UkDvcG_vK)5EA<-xtIlOm8GfM00Eh!XqHM zsXeh@MSJni6_-dm&Ilit%XVl!Ao{JbeCP^uXTAYd9AjbPavN+1kOOv2Ts8DQVX842 z8LJ{BqPb}z$dTt~>|>LmVv#njGP(IvJuE8t%x1IU7`ec2;aj&go7c(aJz*^&N(m84 zvsKa1*=@&Fq`|YEZVP^Qw}Y36UFYIfKH1wzX!l6D3PmWIuIb&iLnPfCg=`gl=@llq zMj6jT%9m3v`pQvGl1F3nGY<2rL1A+e*6JDc6p_<OLnE#B>XLQ!#ENs84?&OOC^oH) zx1-fd57#4jM{UKWa~Y#GrcSN$I##^_%}4l|O`FJ@ALn4N-da*YzjD$E#*8q;D>yfm zhMB>i9ZtqTbJPda1NDVG^Fi^gFqRdRpin}+qTQ?Xc&yRN^XY~u+zfwhC)Pug*a+8l zJ>fdRZ<5|=yO7Z_mSoF%{hnvPqL`oQmT?8%dXEXiTGF*kCnb>T{GFX(#z;Z28uJAV z(b*dN1yzd+ANvI^59b900MR?dVelH=0qM+&d}XOhn=|hK2-sN*p;*p$&gr&Ob+Rg7 zvE1D~ywa@A*&kd-J|6!JMfuo0%op2k>O*^SbZ2wkB%sbs96d1CNm+0ztk5VKc?=Gu z7)c#$F%Gei%w?Db_Z)d_wdCCCJw_Ww(TJNZD&zbbpiZ%m*c~SAOB>?1^-E>kDYFka z7Ue5>g@?P_;PipZ%=L(vn}zyThlFdq6iRRVoTG#ef>7rU-Us3us&d51_=4UygO^aI zq8fG#E_yG`n#+H%bVRL5$FC+r9+Vbg&KxXlKAmGuP(H#KVw%S|Ta&V=IAc7h%OOYF zzak`N3C71BA&k*aPJU;1;Dlltr!j*S2B(@@i6`W-ahH$dHBaV^ZZJhP0=A5N(i8wH z8(|<>0?E=(cl<^l0Zl*nb%zeaZ&T?VdMv_=W#Yz2NVT=OE;EnIy*En9@Dck<n?x0j zq>tndL`Q4%%(pal)`6ZN8<v@s9B9}Xz9;y`A%OjK{M3=HWO)u_@C4ECoAaG(gX0@G zuvVzd>a6qvGv6b64n(Fi0B&0()z%<{3D-{yEm&i#5(Cq8i^tXx@c8fsTqmjPq<Q&w zh*(C8f2sV7qy<6#s}S+uAX_pPPR{=v9~7nkagXt9#e+k3>rrr$gyn}+fh6|tT+jS+ zNMa)JlE*nHQd_x3cr8vjV>{|0{(XLXpop+R;1n8UL<b;;z5al{fb<qw5v5Z_jokH& z&t5xM(`P_l+YOMlK1mE%YAHiVcdRtlkiEtzT8g&90INyug}RA;7+lj6=*1ipq~e;X zj=N(Nk%u&gkS#MUdXVg<BiD)TgMZtR>N%fq_lA{IXhx^~OOIgN_;%=WGZpjpe&d_O z+Lfi<-WW6pt08jjN%QOBwhzHfJ$69!N$J;eIQg;^h0_vQ0)D${-|VJftU&>0gbYmG zOwA{>ncrCa&ISAydLM~0;I#`r?Sc0krfhL<yVpjtR~XQ+ini(>kQl(i1h;-@#3nzI z84Ck&oxMs=C9zq3^v1*bovyRrG9?MF8tAGG;nU1y84K91wDG`yhRYu21Z8J1)5jwR zTq&U|j^d?^;YJyXesj7XKtF?a=1woF6tIch5=w;AOHcFvrdG&z%gJ|}IV&4TlwH{9 zXIZBe&6+y{J(;xYpSVP8zTZGHJkooq#%c-USpQ|rpSWQ*wGVqWm59iaI!+Vg{7TkL zbO1LiwpFb6O0({f4SmNBjYpDK)h&KN#gsxqs!P&Qbe2Noe8um(BJLX$dxQF&e+hyv zoKsaGCx(<3Dq-Qyr}{#n(YYEQPf^zhEs7cTMeK!-A!JT}DH#>>e4lmC*%B1x48n>R zL$2NL$RoN)l^?$Jx4bAmo)N$Z0tBQD_OD<n^Y6p-uTxCa*4feHpP{NOYlp0W${Pm^ zan?*|v#e-2zk*KbTFGj=u>{@#9l9YJL4FP4K3oA12rbyiJMhyFh!8y-JX;|+6qjM4 zx9+yXl!RRzaz?)PaoXuQ-Eq6d;mhm(2GWOjBY`4B69Zcf=|CC)K{we#wbx9KW>|+( zjZboj67-yj!#o%Uy^>dgpRTUxItJBkV8;Xr%bY)f8<5>zx}pm`el%aBO!S!An`N&| z#-jU8?zdE%)}gX60YTJ&-Ik}W*)(4DX&+kQJW}<>A$pQ`F2=fRo`uSGrNE<<kBzFv zQ1x+q-HY<IYolm;rU!ph9B5`F*rRf^@x_V9OQzb@V5Zfnfy1XoKo&WsTV$j1(n?R7 z;icZladVU6-eY0TwoCLHt&&io4^kP(NC`7iFs80#kK=~fimfWUEVEg^l$vDK)nTb) zr?T`Qf${!Z3+`UO1XU(U%R|_z#a(&;wG>Tz1Pxq`k;F(x5ZMWC6N9$Bh?O9{)rEx; z15dEHxt-;iUe(`r6PDOe{XR2n70d{LsrVxge6NT=68<ilTNk1TT4a3W%qEAJ^nU(Q ztNwC=(R+Q1v3M1XQJWYiEbkJdQ4eW^UFuVg+d-xijOsqxoAMoEf%~N^XevMGn^5|# zYaT~gu9=0Vke}!l#-ZUY+~1xTjQeZGUw`oYk|O5_!}K;wKC?i&S<=gpos%$=M>P3D z@LB>O;}?Do22C#C2}Qr?lV-7#M71tlPJ_PPWIPoI1^Xi-o;g4xjaE=Md)BS8y$BSC zM7nK8m{kvPpJ-V<S-qC?Fl)4t8Jr--30V5;#}NM>wUFQ6(h{GwnMBLKFis5quQ0Co z?_>O**ZvREhN6b*YpdQ!L`yo<W;oDRNeZk}LuWHwx*U!SHwSX~&Ov{Kt(GQh>UPNS zN%4pMC19qRVJQQ_*Kvg4_+{%7IZHy*1aoHH>xOgIX~yZ<dZ+jOodD>xK3xR+(C2J8 zIF?!Rt%+;qyggn7u~(KjR`Tglhrf3ek&FI!`ho*h1h7nHO<-&u>YzzWd!m2>xE@;g zYk)wl_CsaqF+{A{TYy>DvOw)J9!>m-qEiPhT^ZOxn)NCI3<zZ7F~th=q%&=sC4Dtd zLe+rsb*aB<wMwx-rFEBMZ$m3_kBQarzFa4DkXEir-J}#IeLa8HJEn+!c*4~X$l>~I z1(RU#fzf6KRP>dinT6U$Ku)n?%|3(<7i|OUNXk~Eckk^PKZomV%%-n~W?ZNLuF0_= z-DRm#j(wU5d734>or-Q#N_kP!WNz}+=j<Iwb`$ktKamU$hksD@9m+B@LnH}TEwuBh z*YqE?Y1=7^&F4Xy=QW2kpQ5AA1sbl@8)-d#&$w#l)Nl8h$~Jw-O?Ei#(ddOkSWvR5 z-|YtZ(VPK`I<Lu>@Kw~)=cg_pvEP3B>Z^rEpStTtIDh46!ry(W5GM_U@@pivuu69O zJ`qTueS5(Ip~9b2j+YY+c+G(UdI@M}<CPh?TR0XRifN#^)hr+`9m3po&Ls7CNo|1V zjyg_P_-CqFW}8!!O*JRZwO&ABdI7olGvkW)JNtTd_Cx9Be*S%g<ikql5Th^m;zudW zmlKmYiuXyBAotWVso@7G)2nQF_X}*p#|xY1*|)hVo~qfLxtV!gQQXbq4^s~zL6T?% z&yd}$UH{e{sVH{#$>!{aIH7NmYG&tvKa?~G!aBZ9UgxmYWoi8nf3ct^m^*GWwtPF{ z2Dx4KLY3C|Xak&2j243{)@Y1yM5~KB275F0&7nQWSduvljP-A1xUFK4wgdog_Nb3{ z5M(r0EDF-Ida;yLiex5TG365=4G&zaS#RGsnPnQ4Z0RmyRiaPedx&iT2QxE@fxI=| zpdT=JHi=+DQ!PUrLfzHo;RsVkG6s08j8*?d(IU(pYK{8rLTV-E&?CsxWXEf~{ax@a z_#1j@Ohp_S-@yq6%fmD%$4Ys#7#o@?U72)1PYH#8q3qmm1^MRhElyluJ7e@0+sgfy zY)j<d-{SwgsS~FEAtMZ#6(|TNEZ;*69SVuq8|-u>F)%<$!cGPkL2(1cvy{w8v|!{* z#!(}u_XZ-EaMzjxPmPf!KRtQua+{g*_U-Wl;s6NZTPQnUo~@aUwQ8S-+Jrh6d5q>~ z^wMEU;i*M#t{W37=OOYqM#e%-i?24x`jHEVS{5;%{Mx#0caFZ+rw!c~T`ZJ4ptXoP zy`~(&ibWYa+S!`LAD2~qs2i0pE%h2MQ!<$44V5BEnCcW1znzb~M1*_I<yR7RI2MDf z)q76)(Ielna2_?jbXd?{FnK3ev;)Fo?7W1z(d!6DFZ>Hj5H1XMExmnUPM!7GJXeG9 ztWRYiQIT@-P>>LWYu!;I^x@m46pvUm4&O&Z6BUoP_IGhKi_<;CA1UzRh=MU|i$_v* zlH6K|iw1Q0Xcy3ubb2Ev#!9hFVp)ry(oXc_yOCe|I9|oC>D7j6lRkg<{V2|<IM)IO z0!sOpQZb%?+nN8N{!x2%Ls>=p!bi_+z+}LTwt`Ux7L2wgrD&$ApbF-2rHfB9ggltD zq2-r8j5ST3ACpcZm)&HMe(pK%T_kUIkujt=ZkF`3m^ts8`z|Sao{8qgCR$wj!<ox{ zL%*xDljD~6^_185g(pC;f-Ir0DySex6@ZTUk#04N<;@nrmQG8569}#)7_$DW+#Xq^ ziq-*b2|0Z<Fi=#LUEN4>;8d9>qaT>3WbXmm`M?5vmUJ%U=k1{enx63+8JeEyn>I~v z;HgS?e1DX?<bWCq2ZHeMD(2+{b??A+U&Vn|_g8D=P5BFbpYN~XXO$0sJ-_k;acW)F zTO)9Og<GWnUVvu{OQBjVr)SCkV(lGcd}+Tf;kIqtw(aiI=4p5T+O}=mwr$(CPuuQ3 zZO{GupP5N!KHP6Id6W83sicxC`&xDFwN`5HO@a?hZ>G73&GclcrjGt8n;$bAlzK@A z&I9AiP)}>8x(z?d7|z`O+kr!oheBtpJ~F9MhuKBL_AW)SsGmXNsWH15l;Vxp?v2|= zZ*Em*Xd0zRpXg-0mG(|?$2C%O+fj~E`)Pg~h+mtdGUTd6T5_^{3)xE|vjQk5zSdnp zB{=D?y|Pj^+F>!r$Oc)7k8gjeEqasQ#<<euaN==lu@xFvXxlNH^2*d!pyi+QYjE|p z9}q|%Dh9Dg*aV!c+$8YL=Jmj#EYHTSTB+XZpXD67MM5HbTacl|qL#nS&J<4;NnH0% zp(gF8;GSKaw?XFFUuCs0c=KkaT;Po6v6@<V_HBgofYweS3{7rEdQPvf+^~F%5?)1? zY3u;6tl|W#%&{AnBH%7lC48PtbRx-!M7`O}geapXxBG=Z>cm^LJ7o^}T^2|VMVV>u zR}?#hm}kz$8@Xw67fpV8oK}wGuA?q(Y>Fhj(hX1IRVRr#8f@y87-VXUH*TT*5${-^ zF_F#v?`1`~wCMxtZO*JBfWcaBaBgFJT)d5HLe}Ww{j_=TMELTeR$j3!Cf4@f@#t&y z^Z`W$ljYac{3K>R<YNu^@J3YTujsxt`@}lScetPGL$`Nc;GArqz#f|&5R^C!hKdG^ zO{~+iuWIvm*op>z!?XeQy<#wWEB2^<g@Iv(F-+`y(ZB&l1yp94jpbRGIe;2jeC@RO z(J<r1a*CQv3&&SKjP;9vjmLbW={~6J-5ug;Ly#mK0&pAaFwDklGT1+FhF5EMSjR>Q zn&Vxu3RJ&W?{L)54(TV9?Hmh?o4WI}mKjHiwF|{PB5>9<Wl~GD8_gJ~+DrCb7)E;S z%fZHod@Pb>Mt_l`%KdW*4Uu*?y~(X`KTQ8<&v4e$*juW|?%ZVRC1*sTCh>u?c}EAi zyGIF&jfSsTVKYdCM(zKFt};x&hinVq<<h>;(Q(G}iBQ0R@3<~T!shZ4{j7S#-x&5Z zu*#vfFF((~fP!pWzl{OM-XxJ9+MZ(ERre=3-lCBzj!D+s+W)}Sb$jh6n72|ppE<qj z&ZOgh25HkcDo5-Xa6W!W@+|Gz;M=1<^@@=1FbJM6kNJaXVHpp+ZH2woO4XIQOJLSn zw;P}rcRH?_#6zuZCblPeQz_J@_lx1kyha;*qUqz^tNYZMEh|)mGh<nUG|4D%uASxB zV(k^Me~Ihrnk}RgnCRKz=aVb8p*jsyC!2{$kKQWqvBQAt)@YCTm1!Q-4_P2|j1B!= z<RPw*f+(8^@4=U%P}{j;Z=4cU&9G9#)_lP7x0#?|<sqC@;?a?ZQ9>O_p-x0I<Q+rH zZ4aMJ!qdo46i{gb-nApH-Stf2s<1s+iyMw=20-_cP)HKlQvH>Q;q}0YgnO+?afZc> zH!9$XOMYjB1~N?K8csYs%)}#(U<N+-#0(e3=LpDV8)G5>W0!yC4KH1^GFOP=tnWM3 zz3PntRk_Bu;(B#`=in*xT)h)W?3VECO%qLq83yxc_g80**gjDD>kL0OVpM$ZpaVVM zb(XgvZjM6<<B*ffCIQ+a@J_rb;>`HAL!IiiBdjsEuZE|!Q@=Un$Sj8d8xAY2li3&W z6ec|?&r_7(MOEegGXsGXBy>_QnLb>?jqjfgE5h~XL4m60QYehm-&4b(7`XyOjW57e ziTnnQ05LumsRXTo^^513k@KiWNTCx7ta3>BXd-4j&J*D$pf;@l9NK%&l+M{3iTC_T zT4tYGX5Yd&+{|8;@7JQj_idq|<eb9(Qots(@<Ft=M!a>O8Ty#W6WCT1CRGn+Mb6n@ zNh^+yJSx(*vfbd{v%3;g%QyhE!`Zf;WFxfgSkE-$hHqWjA|$Twwik4ux}8ynMuqJI zgt&jS=76;Ar`Ol0;5qyEMBDs!pcS29OCZ~nm$%1eQkkg7EsT5<-{F*k*WaZAzOF!l z)ZNpm4?Yils=gnFzx8aA=k-7=s)Zl%rJzSB0>Rvt18H|edcuMwf`=*kC~-@1NuO{8 z`5@Wk??el6NY|8}v1gJIt|<Hp%~59|>F@t>2fA3p3yJ=rRCUPzzh`1aL)-tAiBnW; z6i|hcd{f(K$1F<1{lSs-^WD%8#G{k}By!=*;L<Wo-hW!NPR5^WH*AH!1Aj)v>LSQ| zAA<xZxxAK#LoEReoEsjdrg<J)go1s(p!EUxxGL#w^#(>z4;(D*W`+x+R5x)+jmd*S zXaqQ43CMBubX)e(WkKk;-0jrv6xJ&uJA*hw;p!qxvMCC0*gt!1b3yg{ef%W#<4mon z!2!M_cNA-8oXoxV8*vvR7$4RLvcWve>cMF2_+p0K=2plsYR+*H^<vC$=Z;8`LGn#B z%gA*yB3ClYO6(1oSSG~M1%>Fk9%PyH6D?dv1@V`mQv>+btg=~6b8{_yxD}m>Cceln z&7g$1a7k-0EJ_M^e@59BD91aC$!OjOnPPhoaFv(w`9?~E%-m<0mfXZkN=c~YP!M3& z8}9}Oep#y+N6=tQnlCqr6ypdWwy65@O6$KYzGMk^o&3}=gvt_XBjU|w<i@mx^wPu< zd$C6rU(s6Ug>^4n-W&)*n($F*<Lf2@mw1;KrYgP%8kV?~9ictcdde8l>PgBz($%d& z&ZZLQebn)%n?w2Fg+HhlmsfUVZ}kQA$&Ku!*I}1)Cc_53ND9g*HKB(LYdb>*z}*O) z3YP#P^d`{wc_ajDWE}y`!mMOw(jVc-@BW~5uqV2Jv*M_IEK+AYe$8vZ6)fE?Yqcy5 zE5XpL-&nBH12YA~e*8mBPzx3(JO=64j`q}_Nai={{S4Cc0g4V0Jch+_(qC3RvQy`V zNyfli>w^R}e*|){ZW3>i8vFj!&Z|ssjX?Py21)&|&es1ocK@$pgMWamZeij^#{55} zfXbHbk`NOAR(d=0O^BkcO-D1BeIg7dw3>)`2#QvPG7Mrw;BXddTw+bO%h5K+L6bX? z6dzIU8`W?%u0z6R+V8*9SLP?#+f7Y^em)-v2DncsI)DB$#cdJX7_5wBLPB1y{&8`b z8wnL!fGe)GhP`52swR|}B-1RHqfpzOw@(%e9V}SxsZTlGT+-nsy^zAWg-O=ROU8~* z;Fs{CPGR!`VGP{ZtHcK`OBf}qUrvtP$wBB!ZYi=I%m`^vb>Oijt2ogM_z->|<B1wH zw-(_cH5o+o7zl`QqN+>DHRb0?ZuPka%$8vUog=8;;=QI%6UFFSzu(=@OG4+y&@d3Z zxkpoiMERK`HknHafT;Q`D;i>(al0O80D*mymQY!dC9D>MuQKxe@x_aQGXa@1GelX> zicA%&6r|tm`K<kxoM5L1Tdmcr<%<)`o9_4vLM!}4IQX)SdV!sbqmXniMgI`x5*UZE z6jMS_l6mJ3=|-TQ*r=BGrM7Mt>qiLNt#@Rew8n9`a-mOTsn7hveX9x3Hb(3QbVXY& zz2nz1)HAM8QhoY6b*rWCO|F8C^!b?h;`Upa?waLt{`pAtn&f_Qsjhdk2j%n#8-F=I z`53hOF90zZ-9@hbBSW13wfunR{}Dj{+a7XSl0fohXdorVBPx`JE=Cfv`3x1ODnY`< zwETOpN7l@NAWx;*Iu{$L$C4;({v+!r+PBX7BrEt|Q<rZhCXf&<G68XOZC-6%b4^`t zFKfGgpU`_8J5=ovyePe?_8J3Jy-G}hUNE)$+So7XeEosJ)q$+zu*Yryce4G4=v(yY z!`SG+Xi7jQm67ylV=y|lIC#?UlzUYPY1uX7>Z$ekd)ZM$6yIbej940gJ43-F(l(ty zMKx1B$&mYi%V)oRV5OnUE7iXD98+uKZymjg_~AveW7#pdzi@Bv7HjTSXQ}(mPmX&T z^1RxPJ+1O5sbwDp6noFPCSaciqQ^qh6jb)bdmP+DZ;9u3PqDhEdL!l9#S!bF=S;FA zZGy2xa4C&j_c-1YXjye|UbXJo8gjjP$f?X^4HNda`brz6yYm_$Gxcd^p+hwa%sQkp zsZbvxa4lG^^>W;__LO_M!D-B&!5Tm3ukJFNd_^ck>dtsK=yXFb9gKzDvHNC7Ydkn` z=PK$38&14ls-LD~t$qc`Yr0j^Pjf2|naE(dsY{n{Sef~7aVzl134aN$?lwdXZ;}JB z^iEtswkBye``K*yswtcQ=;;kR!ev>(;*>>d8_LdDkJvC|20W*G)Ex5&kC<D5>dIp} z3Y0CuxMiCDLWMR*_T3K`uC$Nig(ncj<%KIkU!#aEaD#A}yX)Rl8k%$dhry5EnT9ob zKz%Sbn6`gVhZv?~>!ri<8oA!*2(w@!sW7LnlfxC#@1B1PT(4@Rbt63;F;hxEdhmSr z%`Q#$&lJ4)6P<xbt|x62uz#oGu;|b^MR9^GxyY0f+S4eUUFc*%I-|#vAV~^mj|>A9 zH4vTwLgcBg`H9%7OS*C8EK9{c%OiSDd5##of-fX|(g0z=gxNw*!P8-_sAx7z&Y3sg z#E_x5k^sbUgj*<h@;peB2aQ6^7|bZ*TM9em5X7D?hd<;m4h{0Ul%azaQ8)w(hlR-V zSi+e2R;#=qCx0fG;>fg!hbqsrf}%KjQ_2r`_`x~PD+ve4&0iC1)9XYmVvk;txrGHO zJTpewEOv-w^og=$pZediDxR3Ne!U<W@{6q{=|<Cwm6EopR={#^jAdvwLY71|O+a_& z8Jsf!`b7Vjx0!dtM2vnM*#oPL8$uvL%jWJ(kT23L(WVFZBE52oF-iQ?ePGp9oO(V6 z7cawJh+$r6$@G-_N+dlAP*_pBREEugLp>$(Y>yn<JDM<MDD`2<)}ka%`RG(tG%Y0% z)G~^d6(um(dIO~mXyRxT>`^lmitVjZv7%2OatBlu`pao~2=CH&4{{uzyQVjIkN`IV zzyv=(|6_I-%UbSz|8v58{i}0D|8J*^yq&bIv5Bp-hNFe^|FWoDl%`~cgwXhxBmqmy z>P9|&G?8+!qdwwDN>It2<!3xLVLXZQGCWFxlQBdv44*)PGTjww=J}v*Cp$yjFYN!R z=Z;lk&Nn0uqr-sz{hLK`v@sSPzY1<MB3>ki<@d@-&&wV+iM_38f%|&B9Tv-}a2zXI zmdIaqwzIpt&CAzdV?rYoQ4f*_{tdTH8nnjUdR>UagNmsz88F9UqnHC%q!3+SYCyvZ zjLycP@|QYKBy0LSvl##%mxn{{sG-DYYZ$>58zHFv)?N9nfE6cA(VOX!e<bHz4DMO> zM6(!0=h9B^<)TkB)ES97RM`<5?qO*>dcnf1giJ;NCqUT0`<c7NQF5cIH44TjB=oho z|DfS~R;gLiAyThK-4D`>IPO`ZjalMF+C@l;fMSGsH}?*<MWgt_PAbVH7qyY5q)my4 zQS_Bh(?O^G@jtu7Q=iKD>z`ae^skl_!@up4qM@_-e-GKVGc^9+C1@HSZfGm`KYy-_ zII;qSfDDoCiHU<}eyI>N@+FJaCy;d~_=|^aOE=bMY~0L>0Bppg;#Sp5HfhwVQ(7BJ z;-C`279)Lxt#+T&a)-|Q_8D_kK02D3=E&xYyH5Y`KJ@H<yb0XAIGh&!=zIb7Z@-oi z`h-*eSH~SfhT-G+TS?r5WAhMV$fdAgLVYpi-eR=h0>xj74k8GY$4vPKiUWtfs>FH$ zjQh|NZzhDj2dAIKfhxXqiSto+$%qP5Z&i-R&4_d3Z<>Ouhuq+EA9w6;-!9;cuS!97 zuXl29--UR3fA>uYXQ^IO37_0Y!Zb>X?WXp51-eW3Tm)|hG`YPs25^0=6BujURR*{t zeo_N(-x`4JXkU8~Z&mmBd==%Ze9wmBKCuS7d_S=SmF$HF6wp6q`|)GQRY070Vl60} zPnyxAINgSoS0#Y!a%D3eZFIvju54D}XmhRQH7C*+tj@n8+D*@Aysp=LW-mE9gl|^i z`K5!o`5W4IR?EoSu#s71Bmyd<v)fG{d9o(j*iqJ$D{y2g8cLSYepMv=v8d6g+pv5b zeOfKX;I7ryEWm&F&qYhu2Kqy>AFkc&HedhlOp8&#o&}JY-Xy6nur)oY77#LP$xzbG zZzMH6(>?z#@^s8|Ws{$b?Tm1p(UJA|vs{QsG2<+<S1}R)OYTcwd?OuKLm^I==-%%) zr)WY=Qg}AUINkY}>(F8nzm{>NN+y9hg6xUppXhjoc_!*=xyX!}n)6%&{tC&LGp*%W zn4i{w@Z5Sp>A;`N-74*C2@)HJyxJ$TbTF+8#}8O_SVhV!;yXToO<ugi!=<`Hs?&pV z5;J4^G@3;5SS>h6fwrX4EQ?nXXVNMNZJDd0Qt$gq=DD$0nx)dMZsv*^Z_iLN1c$UQ zxS+;8tUdSd#-6F>)+`IsOch}R&D@fy<_v;)FBaKF9CTeQ^?L$_%JtA|8iL_dY}Q6o z_VZXtG#%x80fs8`F;S2J?*!+-A--DNhOy&>h<Y$QCFV$GbPfBIr@Cd!PX4%h_Kal+ zlO0+tjr(7pG9w7iP}asm92>wJs(A5o8$9c5CitqzDYG3#s`eC6YTo`<)qvq^wR>U$ zwS^c_)k&tH3g=?Rb=qzGWCEy4E*QCyI_7LOEs5<}ke6EXCAgvHz=ZaU#UM>`Sf)V^ zC@Z@mXJuK>d(P@p<eA?l;3g2f@ifnXJiKQ!*>GsOX&Qp56B7xKfELzCOX`od=|GST z4`cMcp<6YbF?a&kCjZQ*$Y_m@q?>op(Q>tY5#hp0cQE~Ng4y6nBINIM_=X7<9Tsmg z#Uzt;yW+)&;Ed)+bB+L5c{7hL2a%|;LhLZH^kc2yRIsK5d<2@;B)&Yss#n<WNdtP< zXq}&|$i5)%7esWzDX#LY#R~EcEwp#uID#co469A&Sh6S;&BPNBnYfIr#dqxETAnV= z$=;pP5|xq^cYXauKI$zerJ4zqs0XL`uQvVsKz3)1McFfHE5-b0ju2W6xl3DJO#DgW z3Okd$)C;zx_ty5EI$ZV1)*$KMhG(FuqI5Nz*qF+*R|ncSFP01D(i^Vn<fR(F$ec+% zr!d$HWE7+4Sen46jLO>jAKqe**s`&AMIssbmb#_pgRW84GTvesMlNg!g?S|jdYw%_ zihEx!K>tiUWO54kiowY3G*aG{S(z5z*=*Sf537Vm@n@|bHE)VPSF3}w_xMjA$&9zP zC+ITXT)^#!g=XcL5yD2s9)CWY2la#6Kg@AV-qN>S6~_y5$i)h5tc@>OEScU{!18k6 zG;&YALZ*gF?88S)DIV>?s-?sY_+g_Lc=q;4LIiB%VGd2*%SV=raGw})fcy?8|72`2 zeBr9U?H>}fH>X*L=#3G*uC2>F#u>S)9Yt2n6(=p@CIr~7<9iZL!cQZ_6jgemJ&*xW z1HYh8GY$=j=J{l=S>Vfos3)JP%H>!phNYNG(BF*E{26NtLmCA3U3V!8=-QZLc~8YJ z)kO#6qZ_nEe%2Wd#4WGxG=hWeVl*5;>MjoMfnVFVf%2+YCZRzuCmcAa<mHYwn1D(R z<p-XFznZ93r$3Zop3)_$2IE^(BD{+x;tIZ~XB_J(4CdX#6?PHACXkeK>qos?^wvM5 zQV-pJHYG069Rr6v_x_!MBTc-BB#&Od%tN=K2K|%{>T>t2Xf<>^V)|OPv!8Z%yasY( z__`2u$b{82)E><|%RX<P^nk5Xf2y#tp^M#Feq4}fJI8q+ku6?ij%?MSvmD8jl?(0P z=HAW%r}O#!{CCTXdT@AMDw%$L+Q@F?iz~1uxg`k4SvhQb89<4`_m27I9g6Loi~Y#( za0=oPI^mS@$oyA_e6H`+JBj<r&UA%R=LanZWL-|q4F=IQ!ct%j5N1x+6EbHdt*`Lz zD?r#R8tq0w$s7o$k~Te|*kg`0P`RItt~V=-mG$92<b&y9;!1NwAgoLMfE<f>m_Ot_ z!2m2&cSaXEztRD9ZP^`g+))H$5@+cmAb@TAv>n5;DzPxn9Zasv{XFVDeb>-wxL%8g ztEri4gnAjC%{m$4zPLA28lAR3GT#ubhgg)R!~FLt>4A$M?=(_4!~>MVtkk?c-(KKk zvs=vc1Dy>Tg)m|6S8aYrw8lw?ZmfWEPG#2vPssLRdl~N@f%p`ZfE&huLv@4xS|~p; zcKPMtjzje=g1e-{?cF&G^Wz40f}1)0FUWWia=KB4%mwGb1^Yx#`1ygLW{MC2zJMWD zpW~-kQoE$sOVZfOEb&t=4(BzM!$_sz^L`T#NZZ0fN8(ePPR030nbn#Y@uw%W3WcO^ zIt_Uvf?Q$JT+%UQz6+@26?F-JNs!dg5m-Dzqh_<;8eHf*w7)#Wd#&GXE`HH1F(x^( zjp^&6Ijxl7>J`LmT*D`1-!t$QuT9l=#CAAV+O-GHFu)a@khB`(+v|TfOV|rWRSd$d zYi;W28NqeOg1dvtxueo^jWxMv@kbM?%V#%pVW@?S5{2@P?vr$9jptgme%WrSsvjl5 z%ip3#i>Z4(eq;U@z0&=%F$0AL0?I`De{Q|_f2wRUVKXyF6SIHr{+nmTC~w(r3L)`F zQIGC%fJwpj=u@@jw|A?NRH}+sYEjz|hT|MNNNbFaudjMexREP^D3d&a{#8;k16Bk3 zoQIsli<{%#$;jF2x)cNw$j=Q5iHxvBpjM?bzE>?W<KbJ|4~fvA*kL&$!IluAQ5c3R z8A293oE7uveMlJ_y5+lIHh%8uSINVQHoe3YeJA>)$7)6B5&BGzh7=*V4^TiS&7=yI za56l2=y!RS@eJ6~uK2`@9<I2sARR&<uA{uu&H@RohQZ9ko}5`N4fi|`L-nBPb$@3o z5r314Ce5R5D0}0u<}+U3Ia`!K@W2J{Zc-APk-+Aq*kN@RJ?G(5>~%iq$kTe~ez~^F z)75}ULkemMytWf2ItrLO{EgUNzk@k6c4FED{UDPm#V?#GW&LS}dA3;kyII(I%9A8` zG1$T!jc`F55`s8?J~yDnE}kc2pk3r0P`goBo(8*Dj61K=|E#=0R3gm1+bibT#yS#o z=#ucuLn?(t=GOvl<t5{)4x9MNXC4`=;8-|`?n>f!W@D`>yAO<04nIZHSh9+{$m)Ar zvzohf=f!`#=kM-XwYq;OH_yM?FaJ9I;s3&fimI^lKTiNI&L;o$^W^_ThT@D2C^J^} zRcn{4ZjBZri6=@mKNi0SasgVf$bDnfOLZuUbW@@+tUzj6AS7Xb7)oDtPdTPj`h@Js z2Qguu-7OG9eO^HjU%z^!ZzO-{krwu`9Tv~f`3C<&v2QZmR|d=9T20l()WXH1;i0>1 zbQdGSqZ*ji{5$mw4{FRgEq9M^vQ!dDOlg0;NZ=tgn^PUEI(j#o^}3-?vukOkSblD` z!(&-)1>8@EzZJ}j^3C@0JedTe_oK8kW2=#AxAW(MkOwHtU!q*dzkg>kk-Nz9kjP7f z(bj8pGFyYm!Lix2w#^bCL$>j15x?W>DrZ&O^hM|%ME}9sS|1qr&*%56eCq?~pHL_K zYsaO3)u8`psQ){(Eqsvfs%opJJ0Ck)X%n!-Ng$*){y>JND3wqF`A8sOiT=<d{>j7{ zXws$!)4?PMoAqfeHG#Fdhqax7QY51wje#aMmz|x*yM?tjS+&~Mv_IT0Jr&qYSKorW zX<oZFr@3D59c}`8pC=Jzzy^g-n}(1d!=nN%4SgHJ^>gK~UJ%I*e(Q$RAJM(v6-|Ch zUmf^SjAxg>XnG3|tZ2S-fW6i^A6?L35mcFIxX=S(z}Fm8fV@o)GiO(~1}1ElD^wDM zovu`kl?@dW#7BT=8Y{4*#1ZJ7<|B1z{#x_xj>2B;ndY5)BdvNfJ@LBuqOgaq8}bp# z@DG(^$rDM;r$y~WH{UC{a)r$5j7pjfo_5b8nEhquA+$O?EN>b|(DmkvX|FgJPPAtP zre5`cev+-fkKhoXM#Z?Ba7~{pQ)EVm1>wodvp!t9Qk2^^`9#CblYfH4Wo!|x>A057 znOpS8m^HinRK*pXL3p}i1>qbUJp}}%U3wE3stJ#H<Lc)>gt*?_%g|sbHKa>aI_t@~ zz}N6=p8j&~P2S71J#68rTY6)$q;C`DC6qbUEO<!a5e(wFWR1tD3MZ<n@Ss4qvi7dQ zpWVN-)^VJa4BHVRg;!-$-Y+YRkjSbqZ@5>_bV;4%RNgLqa7AMvsCPhXq)mYD4$8AR zB+d!Dwug^fcQ3=QJ<KX!w?5Q%?o~TIJ@dvL;9nbUTk?nx;(hbr_{Qh`Gdj2S2Ck}K z{t#6zC=wG@v7Ru&xSzK9YU0`+r*C_xfpl2gd|&14+Y+O16z21}DGTx0mGQ~r%a6{f zn71`*C$@3SxsbYBbYP0x2QDdla#ak#L~q-4ShZ<34vF#0^Rz8v-IdoTWqrf{oQ3nn z?9)DdS%2&K6u98lIDNV7o|+}x6Se+?bal`DiN`_Qd=+(dhwg}e<&y>SEq;)6?$ti^ zDu>N@p>jCW%DG*6Gve7Td$7%16@7HqIsI_?4xaUL`7WN#Bcb-wI-NWF^q)msY&Mey zAy|DQw)|spDA+m_R*XM){>cQ7PfSc8QlGo_2Fv58bjo=CNeOmlqV*RBz3$?ZJ*Ut1 zP>@`8XZ%R;aChY`i;ZmM{Is0&Q;Q}(*zWw(=HfGC*0170|NL`}=Z7%oN8+@v<Yrgt z-U~2}fa^Cl`p-LFuBjtG24)a`c~~#P6hHBPVk2YApQPx1B!S<Wr+x)1e&hhZK-EJ^ zR3E{T13NZ<>q_#Os$(bTZ#SMHLFaD;6kf`ix3t*_^Ls|?&tJT_k~%Jb>sa2_K6jVD zVqyqa!1u}wxTeF-0uSMcv5eQ~vrr>~wK$z6KGkaWp+JjRknX}Jx4if31*eIO<ei+x zcdw#evDejAmsiyoDh&6^d8XPXI16Sl&2tsQra)&{v5iw8LHENMku>+ME*~#Ngzs9= zVeJPxCof9WQjSxmu<B(3ATmb6Xev+Dr?WJe<2pS=Ua(JKE+qJzPL}B^D(dtayKQy1 z8(r9)DrvFKY-$3eT<VdTjjFJYLO$ib;|1sU?4t3Z5t-)2T38o1IRfOv!)bu^c^M{S zU$=NS?~IQJW`%|c0S0l;s<T7%$g0{*(PmZ2W0w8ohgE?EC(!Q0t@FY4d~VJm;-Mz$ zsBRO_A(^~eUja~w<OjQf#WV6kC7WvjPSI!CciB8-vlC+w3dJ{%>}5AWQ|48r2Ibpp z9F#E80j%fC0WsgBA-(od9q08zW*-oK=F&@ieo1vr^eDO%8=+PYyzwtnS|S6pC#hmG zrV!o<t8(AqT=N6@#eK!`4-VQb8#?Lamv1#TRQAAq#ztHRh)7>$Pnf3SRA_K&nwLne zHA9%f2oUihy<pM!4H7ki^WlTYgYq>6C9L(xf{lu`+Cjj@gN-%#!BST3>d!=cPE^^` zO+13qaSP^&Glim>pcOL2BzjcHjIt8lOxX8>0`I9w`7+9v_EFKD|AaM4aB;Ig|2258 z2q*mk+T75pzJB%Aifj>s?Sqt^Dr8F8L=P>dPAr8g%`;h!t|H-}VY;nghOvd_N}<aV zJke3zDxaMNSG=^mPB<UhXzB5Vn^BIAk%!qqrf)m)2S)~^tq4ZcU!1hT)1z--?&?J> zFgK(-Vl$mw4vtTp5@7b%-bGwrg&nRdEk8MAGicxW&||-Os{2cjwBV*+_oR5U18-Px zWs!T(f`TVf`2>0V3M{@<lkeF5k*n7bu52*VH~Rq}5{=lD6g@GQl+m-_7?O)A;pjwG zo2ye|OnAyz_DayNXjBDpOkIITn3!@IQfe8s`o-T~W~`se(_x5@=}*}&>Pj;E3}^~q z?U@LAtrX*2?CCSk(Fxa_R+4Vzez{x0H|4Kjni}jN;ol7KZwrZs4T*yxSMh!P?GuET zB3=qCXm+u@z0%r^`*ePyVugC~rln-N(Y^svh|c$Z?Hv5g>_2Ani$jRtf`bZuMoO9Z z8fAGr#Y31dA4c~!(PJ+7zK>l?u@Rnp$+A}9jiS9XF482d^efX(8i5d+`E;<UK#tqc z?S((qc17IhaOZq)uf4QNBOGB`76V7VM(v3h`K?A+fV%a?z1#5gf;4jqHC@L-$}e>| zNE@g(AKaoU8qfrT4s>MGOq2zr1mV33i@4A09ndfFkyHd0PEF|41m(zTu}o#hkn6LZ zSh6w;6PnJt1||9Y{Cq;~DIXIlWci(l&&SVYvH)+#yx9VAX>+nt1Tc4|T5gG*_%#eT zTQR!?u!MonpZMqr`*<vFpILvUSc^g0O<of1q_OEUo;f@P-PF8V+_-q{Wyz8I>87QO zK-7rDaPwbFlxi{yG?@u`<8{HtCPd^UXT2f|0uW{703(U{F^N({*$4$ar_60-u${;m z1u!<6zC1jJQ2s2R0w8(QJ%L_GqDbpfStC=n+VV*9r{`6n?f_`Wlh+^;V*R1f;GCLh z!jaU(w$NEcEYZv#mg*6o(6XqCOOo~%7BQfGc<K2o4`101kzOe#V-XQHR0+&UFgl*Z zxGVWnwn!YUPk3A_o~=zlSk}^&)kx0A_}SIZB$2W|{fkKZlp>BvBIiN+Sj>T3c13i_ zn5KE^v>j`!3!8zM!a9X(=?t_+2C}Y=<B1%zk&K2q8P{B2K@)eRkUUv<UJiW1Y`mcS z^knleUNrBtb|ahu*W9k~Ah!8>C(+TRIWhNd7m^P2j2QtYN0sf4<-I?#v*V2h?3*L% z7D%`bN3XR%?GDrZ2x8=kVj#MSLcW%!iE{?iZSBWrF@XYA1v8T?*DeFIia~jSp2IwE z<K)eYNHia)pc*jAnM9KSvwY^0LM6Ea70W<Jl)rP?Vy^uLHr7SNY=*4s-s+b1j-m2Q zLzqwyt*wx}Ll9L4OK_{hneeUtqnM2{LG*wqc=eG=_<|;Kh^hhrbxiK;363?mwnhC@ z^{l~Exw(<B@kPXuXfuUD{jUuZh_28U-0IwCZSfK8;2BGfIfE83FM4gWdiLh?jP{;! z1LUBbnLE`itj>6)`zDRn7DF)Xr3Ek$^kNn>TQilU?pTXEaFBuUsomaz-LuGpOO{|= zW1K4xSK_}DD>(Ko5`*8Z6hS`I3}nN|+fiqiG9(+0B$J|2hOYcw!0g3yD<K1Vrgd0@ zNSdKoM2*O1R%;l$6n$1Y6I`3buHq+!+DgrghwsvIK{lq^aLh;rO@zu0m|a^)+=GTp zgj@cayo1yU_A-h4$#_39(*}NI_q-)}=8ru}xbatm@Cm<`EsZpANfeH73x(h!m8XpL zi4N?ZN%iea+wu=eDoLMqV>400cqq~S+ORA21Z_tc+t|S;9Xq=O2jYJ#7OxPxf{WJ5 zu`oEY@1Jr(!2M*O%v8~?Cv%}^_#3?)>X1(9+(Tzoms=|Pog@7+4#y8lLIBLN1t%f= zUdItyuZdyMcNPwW8;?4YqJ}w;280ubvaoT?2IDF^P3=ke<v-zhAhyqR;akv#VgtA) zHldQ`_et(ew&0i(sb;!g!;*51dz6Yu3|GJ|d2qF8Hb1F(l5n9q2f0wjDwji!h*?G+ ziwC-e9kH)4n+sH;MY>RM#S#5U2wY2mgPRQzaR6+VEmUYmaIUE5bH1U#&+FeIYY>+x zMsa3NfF`TYtc4ThctE&A^BP_wx!qD|T_S~@$tl*==@q>wTEu;*JuKw=30jd=y~JXP z!`Cu-(3?f)vVY>LL4?PL6;zxM#gX)Sjc`=dNxB>wZlRd0Pz;lT%FY4oN<t3Nvu9j~ z-D5I23x5KNVR%G!&cLu;nJn6NNwRH17E%%%bB0ZXWd@&Lpp^0SAV0{!46w6)My)>~ z=z&BcBm`vvfg#k=P2qHmDia0RA>1>FSA?*GAPPsuo!VPldb_Nl;^MCOJ*un;)A3ft z%BkrB5+&+_yud;U#z<KKT!hN7b5^=xxbotv(N+}J#qofU5v}2^6)SnCoIyBK?`{S? zeR@bUC#BIkzBPiBdxVzG4QzCjRBL``Vst!)_Aj!(?gV{x{H?=CCV*CAdGxZ4VLZ`k zaw}zqlc!&~iAKhvs)~3Hgk8G^3h@ir&e6fE2K-kJLHsia%Kxn5fXI~YYt9|cHJINH z^#T5w#HuX<JoGme&4K|%Q{}RWiD(H!)^FqRk>NYx3Mb<eF}4G?8W_~?cADT%Ih(VH zc@-NNj@NLlDR1J)jl<z84EE69B&p94pckJ~@k=8_K|R8z9^q9`Lm!I4I<i!mOdU9_ z9L;ZIMLDfS(u~y9!l(x^Su^$<mSR&;?F}rSS>#O(OK{In?`ld@I|Bl$vOUo{2bNmV zM5_jr-zFZq4Q3nm*dd%QP?j9FLy>nu`OZyF^BgIiOpx~bwhS<eJVW0Sh2nZNr?QB3 z7{syR4Dqaz=voZwWa~cwFuh3b^0!$HiMncNN@6^w;7|Mzr9R3(9lucUl_q6iR^S~% z%iEx*f9Kj*+mz1lrc5^_5BIms5cI3AwD9~nxV%e4pRAm}q_MW4+5EGKWr3|vRmIXo z^N4Y9v05sU_9@w<^;t7RpKu>ys%yG(A0c=4G<fDV1yiISVr9As`xP_uZGX=3(@_NT zMZT{nx=*EXZ;i=LQgAY;^n4w%bq(<W>Lqv{?Bd*!O23wBJ*1|W-JJu-(UsDV;N?$- zJchM#<}F?-mQMFc4=2u`#JMuNk_+<b7bu3bTM7W%+6n@GTTe_{Cru&PSd5G?H7m-C z9=D{KWgEt6SfyCS2Jln&D9CaSL(t%iw{a#)z?&Bq51P=6Gxi4Q0_yAUa0{W)HQ1n| z?*vE~XUT$?f2pjsYYkzI(P7ktKjZL@%-=pb1fFac5znIF+7!+pU1O0qGCT_{qwWt+ zl0%!?EQ2J^1`}XzyUO&TCg)*wCF}}=n~^(n>5!Br%Z?fu8JnDpU?+#Ad?*edw}@?a z#W(jr8GFneWRlZbouy#Lm<{K>zgE5RNKvQ&l}*5+HX(ymXVei;uXQgtvu%^pG&U^s zh3L_q%at#7gRTc7*TBW5fy;@PNHSuNDXwNSFsjKmEPBVpIBjmuJ5!uY9S?A@cuARh zI1t$@Pqv7l4XODsfC9o{rl%6l_GjS@X+0RIDrNob@>|{(HrtB*#Ll)zm%i!X*s6kv zmk5_qZ2bu~<dih*31k9K1iO~jFjDQ}z9znxa!A?|Y(Wa6^%k)c%5X01>|%7;RuVK7 zI+=cd`TgkO_f+ZM|G?mnSV;X{2*j7BTvDt(`kFj5n(`Ptbn+ea$%cEN%P2NedMhID z{9WiZMJ-;nq!aM$G7KGc2FX5_BP5u8Zx^dC9!o3pLXeVr{x~gDX#D(J3KLE3DWZ@} z^igUWL9DKP-aEsvH{0H_GlkMQfqr-CGIb?Cuc>~)d({fMK@7)-lBN^7j<~dMANs`0 z+jkTA!D74n<?;tn*p$EsbFk^TFEsHa40==INBx{V$#2)-n?{Oq;z`;SlMG%%>&rQ7 zy$v%i7NS_<8%G3soaSu|oY@e|;Ok0Cj{#+-^qbOdZ(<EZy8#tGxqlti0~Ix+#QDiQ zLNbt4_N-K2N2!WFKDlwkJH^8(6Qvk1ukB1Xm%42T61Q8A$RHCHhxT~p!dggNCp`}D z(Kq5$;?Cy`a?YrCO)QvLGr+jL@aW4O*gR`2rSx`>XZz@BW}jG3=H6Yr$GMXi=`q;z z-B0$!;rFr-Y>T51Xkl5r5(b&6=}cE6y{nJhpG<Sq#N_C+g%{mI?<Yk85?7WayEcxA z=lPkvivuG$sjanzL!Xm|!WeioJt=>cQ$MHMLn9u3kl^^%nRnwrB=OU%Gz{}_Op&7i zV4`G*Q{r?9w7qtBLq30Dn|@*Xk&(gbeJZ15R`O3!g!lz)0LHa3VU5G&8u{sR?QA_~ zP}1-$Ydt4po@VIfD)OOforj^1h@HPgj^Rt|oW^(wg9ll^1m0)OSbq^xt-Knw4$#zS zu+&_uCvViVoZ;OL)R?+3?wPJkn{vp9_1h2-y(yY^>8aMxe6oa%W2JYuqI0*};HhRk zs{yjgxhcNKg9k&^j*+JK6S2Z?KNkntqF<*OR9O-{RGLqI@)90;Cw>DxQRivF+Xm** z3FOTg;n1p*07<G+4WNB4mhFQ<Ysc~01T57J`)VoP+yG}~U4w34kFP_zz8uDPAi`Zt z6as+IH*O>i_XNfrqI~x9NzyzY>N))g(S|v*AT(dO;W&8_-&}!>hguYYI0uo=KrpXD znD5x!_mN}+)9h~`nUdhcI;?}ms<%a~*`Oj=NRH0~gsCYFjf9MhjsyK$3^2-t`ql}e zDY36^z|DFN$?Oo}&O-}q6*%FdMD2+H{iCEsfA$Oru!g%)l;;E4P~C{6I>08Ju%r)& ziFU|{z}xXD3ZRTp935DU8!Di#jG@biK#s(jU>xSJg=HZ+qFx5>xPpP3p)UePO@%2Y z`$QP|RwoI6Q@wWQju{LKU<tQa5w@2TbRbG7=LA*fZwCCy-;DJx>IBLVek%82ioD=E zLS89)88EMeeGw*JF?t?IS1qOQAEFBmC>ILaAh9pV$84ZU4~JpPS?RYZ7lPeT{yixl z#`>E+-k%l26dCrq1Y-$CGX?iWFd7h~#u;665h(jfm#@H?;FN9VW__9@G&HwT{%DrC zC`3>>q<9jhR1IzBJerRvDow7bhODga-64^4MQ3djDVJj`H&aj%cD$pxt=PQP!yEDm zTu;2)w6U??m0{D6x<;~fhDUBY_r=tTIlA@|*wqWkhkzCcaN|riI8OH$=ajt)ke+Mj zFQ=?PS%s$A3Vz&z8M(s4+n||RPJ)x-pK!IdF*?;!kt8Mwj+D@blTr(UwU2^rFyrNA zgg?7do#(B8!guxMnct|$XOx`RFqi{(3{stcR-HFiXZUAzmU1({3V)8a#X40nbi(M` z2{i3VpY`yTe#nllD#o`1$FGNT@vjou#?gyO+;CeNOwvj~b>m^)<-vR~pLKFE9?Mnd zUjUbpkNJ`%fxbY(KR{l!(HpOi&Y6FaR#gaP3YLbX$_R;bT#atk5_cwe5jG%IRNTDb z-2Q~|uMMAFw4Q81i(>vgJW`E%<f`3>i+lxp*2_wLt5qf83#qv!AzeZuW<)Oug8J6H z>d4)W4~6oOEDQx~+FF*vOgTvf4@m`|HoT0cW6};XQ^4CWW(Rum@K4NVetd()TurSz zsSMIM>3=z-H^3(IR|LDm%ROAS@8Yh1^k4x~{w|vme+<pSux&RJOm_U8(Rn<#K-wL` z&so$xIdVn924{Y?r@u2~@PIcU#}B%YI^B)lI6lc`Ds2>q6i2l8s@V-$U`+{kN8rzL zw0^}f-xD`fv9h{a=1@*u3f>rlVL3~nUYT!^`9YOT7+^itJyuZY%b4t@1gGRHh&2Lf z;9Ic>UWQ2+49;r^(u$c}*~8SgQ*k2+i^#92S;>W7wh14lo@t*019B6%&sGJAkwyc( zEx%b~S)w6AYfrQDVStnhm9pv<fRD>YET8XWz~$Q;w{rrD))E)5NLV!UgBoq>7mD%> zojoleZufv#ZlGV-_6C#MP-jU0!C8F>$6=3f>HwVPh+ezT(VlQ=&p78F){gJ#PQf<- z*-tEhq_@v~M==+o|KRN&hS{(GCVi(Mpvq!wCW}8^Zs@<Y1iSJi>Xl!Ln_A42*hLf- zmwf4}c_|YgbF_(X8~2VzSA)6J=~>cViz~07%ZuRXo}lAZ)#3_MJF*813KExE->T<A za}MO5@9#zKzeNYMgbXB&48hT=3iOnzA_r*#0=JJ!o_wpVIEfSrf0<w#my03OGgDCl z$_}pMO%qDX*|bI9Fe|Ke#`UerxLjzzywc83g)}9Dj^<SKTV|O7E9Xoyt?2eK9#t3F zt#GGoroxR(K^Hs6Q^MPlartn)Qdv!Q=`Z{3lG_lST`xz+@=3F_+Jx&SpcCM>si<i$ zML)atJY<OgxhGpzgS)Cz-B4Q;_NO$PlF5ewZrErREN3n-pc^jqenW9oAt=Nfq4~~{ zD{C&urW=G|?_uAu7s&P?YL7z?TyXGv%pIO@B8|x7Mo0sYNEv-KE7YEsF)84+{vsW7 zK&fMuGtZMP33nOlQW9yF-bm23rXs3VYSFVN`sHk`=$RiNzX>11yU(lo@yn%b2VPE< zJF~06gp!T&#VhCC*IXQT#q3?vv9nBnsVlZOmX>1@J(KKf_Aqz2V))t(XvlAGYG71D zh(aIQ=#7SIzsit85Y_a7U2$Y>fTfq<?NAhc7s#d?c(5CJcHg%>oO1xZ8@u+9-k#Pj zr0Y%d4zw4U;Mk@<udS#Ra^GYJxb7ax(wowIu#E`x2H>V$NFe-1W}_QUK?~`W{$aop z@?awg6l3iL_W=Zu2hJrmm+-(}NXq__ZD?N6Lz|D6VtZt9J;n?O(uZMvO`)RD*te(+ z0RPm=c8G&RgbIRn@LPOC&!vKBk`_k_vWUP6mV2MLV+j;@@U+f`DLABer8&RvK)>(6 zr+MYC58s82di$!+cH58sSpUKhAO)PGiy!7tBjo%bY3pLu*;DsL*|Th9y-ctQLS(rX z7L71!b!f(?+6?s7061J@`QTm<inJ{MZrii^AT~AM;Qgg;w%lT4*WU&wA94-A4dFBV zM&j1jWYoY5c5)LL9SL+1CZ7>>NndoQon|Uy8!e0e70TR>2nTNnH>0tZhFo1#^+90t zQDna(PbR_XZD!7QQyIcn3=YwSr=q(9`u6Ey|M$xrG1s5E8}sBZWkS1xD5W1p>z$}M zYObV%H}=zy8dtbe?A_YF%eTra`49GIY#;RPeH+s^C>l70$}C|cB)zM52pYwGJBATR z%601c+0o>j89M>%Z2ly!({m8gIc#{gxxqrm==+1c)(yjWVT(-|G=^*J)A*TVaF!+B zS#gLY(U4pdgEI}gE)!JQ@!}ma6IIA?K$K<VA)o;URd4SHB*YH^=LZJvoBb&Na2g#> z9tCd{3Vsw8R~Cs!w&W*P#CSkC0kLHe+G^O|9GNs<x1ESiVt|4fr^JL#hc0r@a$i`^ zhYBajkjFYH*ga}c7R8YjtGhk&&sD7FJ(Z3K@=S@Tm{UZwIfHQD6P1p{S6bFr+Qj$N zyoavRHTzc+F6Gl;$`e={WbI%<6=FX-`$()+*M3)zy{?Y~q7LJ66Rz!9;5*Hj+{!C= zN2oGJCuo0V=PQ%xe0eZ^mqB<*<D#DToU)qgoTZy;nq90G>eLAFnC(W;X33B%7olx4 zR2Ni|IFd>~MQI?z{BAf)Ihs?xrYh0ENl_rZ|1|(Rn-OCG9KeiH1H*v1a;K{V${A5& zpT>p%9L4k6@jDiYa1?HU?1+er)Z+!x%g~G;AFpjU1oAdOyUJ_7)w8Y(vNvw5uLt+$ zj_2kov}-#3{ze&n%1eg5%oVF!-Z}k+1*?1)I##c}Zs&U0bI%tB-^sHeDpS4%k{~~} zqr~#+OptA6o#A2cNZ0N>FkviDs5dYOGczCEm*|pqZ-9(srKq_k)DQq4jbWv<xf-DH zYS6e2v?LBHqeF@^i)a>(VUA)ZT4f#-Q;5$na!V_QREvUt=bsOoDhW8(04N*rC0m1z zP*`8fXEh=!FsB7lTpPxfX7I4MT!61{MtNj#yVRP5hApYGo}>XU3q()Wj~VgoCr5!d zfR-Gi*oRNWW2GIA_dd3PS5U{d!>9^-7`bh#92XaQ^0#_2;md;ZP@+G+AU)2kHwmWd z_84==*g$PIOf4S)OIytNr*l%&OrM8_Ro?X@vX)DDJ(EK48Y1}e4N~b<6<|}*b|Ll? zEG~}iDY2NZH?^s{R7x82aOD3+NEc|hJWFyQGZW<?@nBrM7Fcd%7{@@&-*_iRi-c4P zCkWI$FidA82;gaeR4+={AbKu@5QyDegFS_kvCA{)SsjpXx;Z&&0cf|Z{lUGa^+=+- z@~YnK;teqhW72tN#+g2~UnAxEYYeAVAg->JeaMWMJ{g`?|D?KU>_({E*oEt<ym3!s z9JyA1dd~JzL9hxRSH|EDiu{TF%r}Ja8+NweH!>sAIFn{F)RXSz;t?)JVu5|w{|nQ} zx$<_D7=dz#bO%JdJ4X5b7vFQ8LHR3t^zg020VhgL&?*DHx-kbnYY3eie`I8%FX2We z|C6)XyI2f4>C3Nygt2W(yC+8~?+e|G&dXbeH8%r)cSMLN!G5ZH0kkN@eYAVzS<h5_ z88?f>ESV?;<jX$8xwxgOmGI@ayu(k%`crP#^-TTPVG3mIfbdwUM30Tb`_fRG(quev zTy=zyA$xES*}l6bpj?xQKWq}xKjA}(V5HN3et`HiW0qBVx{^ljs4X$~#+DpBaKtS# z6M-M|#7(F&n4~5GiDfw8RQ~2GPJ{tWm}b5Av6P*DO-`ij=Tke|`~a+lYg+QbzK&VL z42jgjPk<40nI4t6uv~!VMo~j-xspYoOwdpOY)8~a$OR-3^S_XKusEr`TA>9c2PGZ9 zfA2w9CBQkMaCk6eauaaq-Y2Yw?gZU^%8x%1_@8#|hgdQ)T!dmKDS6*uQN@<%$lnu1 z>Wynq_^V_<HKj-^7RZKLn$T3M$_F5nps}ng06;idEX@=)VNXkx9T2D{b+W%%yhbtw zmOY0D>QB1S+KN>Tx*sj0cOnqP6dZ|oo{HUwCP~D6nPIfpS$ZMdd}DfS2dwJJe6n#t zm4sj7HPr}SzVc}hJrIIO-=(*8B?XZkj{dk~DW>i#r4}hx2g@GAVU;f*QkaPZG(wbE z)7!QZj8Z-BJT0B|kc{Dp3h-UEj_a+!G8%p*S-Q#H8@j@p=rB4tgNGE~))Dcld*an) zu2`8q@u=xm=ahb<A>wBJmJMLd+H>d@re~Hbi2b@_g;<=5-(~uOQ#qS*W-HO^b>v;= zkL9#j7=d}<YN29^3{~6*w8524Xoo6qAHH@(Olmh48g~p|x$~~xM~&^LneNt+_1d!o zYu2N>y5seg5(Kv7t70y(46}Ll=AhVH*sk$Bd3Uk3mt@S!cG!vgN`ORSPiIJ*V>Num zEPuraeCS(CX8B}|-3y{**a^IF`5NUY3r0uyAGSF%uy^gdwV%DLnybsLahesV%SLY{ zzZgO|_Ch<CU~}&T;@OGE=7BSqkVb248Wb)flu-dMClF05&4$X5gSE(DU8F!&Yw#2Z zZ-8y3%-DA{g4Zgw4$4h(w2O0N-YB*XiB5XlrT@i0Q=1JlOM%@3KNfKp?SS&F(19bQ z;@xAMB)_Y0r1mb*85Qct-bkiR*X>B;PO17`;K=?!vsN!X*<#)4h@VxVGj~G6Sub-e zp<ec9Se<&;Xl8PT&i{dQlA%?uBPOTJJMUWY#z2GGtr0i5Yu#p&|BB#P?>S$j;0(86 z>kgKlT@x*3lj?e#d9lx^b*6um?4WCbntEEQw9G=EK-lvp)Y=3QPJ)(6WCNBU+J=Jm zBR+Q9+{$wv?lZc_Vt>i}Ev!P+RU{%rrG+yx+CwGh&_(h%Z~lI<bmEqIF$9oWOr;Q5 zz!$Q5ZGlzE2WopvB&&$9A1j#lveA49o_bg-akQI+z%ysmK}b8*ZI4JU8K<PaxvQPp zp2LE_Qf8nb5QKMpYoGX+J2Rfqu=p=}W_(?N40q&NH$H5nZCkDuXL{Nx%O=}gCXULi zTqL#9=C5**t$Rp>E~cy2`DlT^J%kF^o%=zxMLk}La=DhES(QPxn*#-=fhseBN*6$P zl^gb%7yd1l1h2~=I`>iOcf(R^u!INdglZiVehQ+Q$;<A+ErQqQBRam6XR&czLN1>R zVgSKUX&?k+HMjpk+dBsN@;2LoZQHhO+xWF@+tzMtw{6?DZQI;!+ueKq=RNnt+_^FH z#+?&0U+P0eR8-ZoRz6u7l`9wiH}vAqTx^r&86&lTK7JS#JY*LS2t+x<xSHf3oEzG- zy5taE3z9``1b5ajUOv;vR{4>ye};fP4dC9S5>vGW%f~Nel{bc?CyDLm(~#}i6A+wp zn6n%qwID4uL(K%pi6rea{|ma1M&k094>k8Z9}2GXck(HV8;?i^F!lxD>RWCz+5vE3 zq%gATu+&!_Bh7EiP2f)O^2IQz-ip*#68*WxoQ0I~)|VM1FF$cFt(q$JDcI8Na%414 zp~8&vZWa4QU)!cJEY_ht{gPQLTaYD4J^N#H1Oric_p3FLhn}%ig0pP9Q}ct;Mk7e# zCKeBy;(f8;s4z(sa}nO3(>F<vr)RGwdCiPdr<Zs`W&)Pj4OnJFgi4v#D5w*vv?9u= zRvSLW8lFxqt)Iq?I=dnl0k{Q2#2VjLEo}(F4Sc({HUx5o)v!(*F?^ZzK-`VKySg@b zZTa~wRpx%+)?|`p`y(*&1Y_qeE_qtYF2!Z9fy)tVgc9{~LJ78fnt<bo0PD={OXY)) zXQqs~D%}_X|8Hc{S6xFv=Amj(UxL)J>oDD&j4^`JD(N5vze5r6(=$3-WBxKl>G^x- zlDU^>-BM~@7J<M}h7rr~<+N0gQ$uWf-y(Pm*!g2l{cj>)`Gj%5H<0@!YW=rFX()`s zKWDJW^ew#CO8GCQ!?C>^Zm!*&5p|eBu;-hxzu<*haY8_<!z(R@u-L&=mYF2vkei8e z>NR)3Y?f!{EA0d2F4Vac_#tam+J@wx`Px;!5%>yo5f#cY`<pI8?^JC2YHk7yD$@G9 zE=ukiys>|k>d&%0!=%>ePe4>?G&o(bPuJ*=MXGsY_@(t&-2cs^P&jZO)39Wmx?raM z>Kv6RlR<A&!Cr*_TPiv3Fzp$eUZRvwVO5{rOJ}~34bx+e$B#t5HY9z7W1bLIx*6qy z?XsEuVn5my`_p=PMsS7H0oSG#WMIv(G|i~Puyjr<-}fFL{Nw`?;td4%OmtK=NAis@ zVEN3w95+->D48$e3!F0;HDB8crn8*a&+%+lyhrPp@j;_o*9*~BffoBWu*YF!oH4%{ zu^(Q*8S&a2n_XFAV?RAQb1(yKVK6NMxrSHnibs327OYOy!zYqi%*=h`7&{W|I>?@u zuO?=!<Q=;q-xUI)1iN%xqGXCZR2F2KEFc4Ho&fx}lJ(j`uwH#^f8p1p<Eu*&qJh}^ zT?uvdDst%}=7a;=mD>cD#*N`T0>pJZw&?rWqn;$U#Cs{fFNJ}$CrZAfp=mFQPq>f> zen@SOV=(H*vN*`n42!H?&vf~%nbtFCLLI2LraL0;Z>mis=~NTzQ@<0UZS^IM+E9k6 zq3EDv)Y7;{kg1oWM&WW}sZdK0?2?GCEO-X?Y>2Q8`C#wt60KRfODGSc!3DRc=JqBp z@X~y)ZvwVw{Bh;I(18n|eWkxZW#zX+e9xfe%7P&&7i0DE-=vj?dHHhRuwu)7g;KsC z8s&L|au<91pBEN)0UwC#H9x3o52#%Eeu3t%vYyi4FlvuBs#E?$2Fnin1{X?Pk?t$C zPABtVxRn*QA*D@9+7z@aaII2P#x0vb>UCyK&znN472NCZ+6-MHQzo32?^g^p0sIy4 z#)7L5O_=PIK5D!XJvH!VeJf#29!R6%n^Msm0)~X6_UY4-h;?H&dZyi`0su5kBaw>3 zdx^aEGfIf7;^j03J2<RO&GCiN0cmYyG;8}iOM>isr7Q6Rmu+xR>s72%xn<%sGVUW$ zE?|BZ+#t7UOv1>~B(^tByy&r%!s%$b32~{wZ|k#bA(VjGba?vMiae4P1?Ck67=lS> zB|KafeJ8}3uz0Cdw<aS!M@Bgbe7^8bYgu;YnN$Z-C44_lHm;UmI-Iylm1RPcW(;&z zwx$fY;w-;0tnE2*a~h-Ue@cfdBt1x%C*aWZZAG!SH^5C|V@T!HtZ4MUootUAnb&(L zH)1TwnUu4D{<K6e$z_3=ZJMUn$c4UdPSmSrL9}dA*9&JM$Zf(wS+W{calkSxOzz{@ zaq#8m!1%Ou%vYrhHEr^Fs#OKFwY=K~v<9GC!fr^}G2_<Fn4mV}aA@gFRyHqfu-IYi zRM1;gHKSJx>qMmg%BG0k-?6oo!78Xpbg5wisck)K>`aTPx-}AaJys9k!#7ajGZl1k zaV(<pp0A0M*d1N&SqGre$;h&#pt*1puF0>*;KEC=Nld2oY37#Ifa~eRfm{U-XoJG7 zWhR*VVb!n?;MtMVEpG~y{Y@VH6%jh24!Cd>M6mTxV}#n)9T*4rN)W^mWOyAeaK(Ku zzRfk5T6F>hfgqxK90|VV*S}h98M4-gD6T`lk_klyI=KFlgzSsa{eV1OUiCFnv*@0l z-A=BXI*RbGstmmM{YM*b#eh_ZEiDkxi~fIGu>OB-;}v&yc5wcWR%tW){}L?v#x@`T z3nPX7J>ZfrTA)?Z485_Yi8y5VAWw2>d@-eawTD66FBqmrfnlB@+xzAJ)3L*-0fg!* z(kv<#0uhBKf(4Jk>$^H>nN=|?ZQt}3RjflT)5C#>s1Z`XY)l(G|B3u4k&H&UamU9A zIO{{8zD1Pa&3zvg_j9$?8WoUF$4I2M%RzSgHF-l{C8#Cxs?w`_>-i@WOa$J~8n_@9 zsN5ZNCQ>!dCwBE;!p&%ESfA>D-Wc-Vwl=f<@2|<fB%J>>{UJqp%6>@*jXx<(#l(^b zZL+9PNPCg3Qdq<odAO7Yikh!jY)4^H>0<R>><=`0p19CKgW*I_oJh7)kVpw#f8yz^ zZ?=o%>vmpWuP@{sk{ltys=6cmns4==u(+)D<Lxa14nAA&c3MSm9P$KTiuk%)JQ%c> z=L8f@JIM%deu9_e^GW?_DJATp7@?wFfrMLAtSM6@_v(m5;mbOy*Yz{ja7%8ETR>(A zI*5&|VeR1US;KkNX~JcLfUN6^BbscLJ{CX0H8&QaYy6W*4$G&^hKcXdfqnq`8^H}^ zxzW^+djMp)XF24$Flj$SE7(gjb_h#D1N2h#)@;WRd5v`(7!gu80LARZB%_oDy_|0M zyVRrbLw)~Vu#uoWp`~b<1_g%g?<w;sj>m42iBt>~hy^#US@BR?h*nSvUMpCo?BKHD zQ8(9nk{}~0C2ywM)Q{ELcyCfcZ*yQ0ZQU3~7L`*2*yMI2pZ}!LEr<hdb2f2g%p4M7 zyj+q6H7rX=R684^Z;&oTt$h4e4$0mZaNooyS}6D(3=ALT)k{LY!c*CFbs-C7MFN?m zPHz606o!;wlt1wU?UwEdzoctQYd{s>ttq>%e|y~*?tc)56WP3f?jN$S{ae|=zx8YW zzah+j(q%^5>zC?ti{L3|(zIziF%xuPJP;}r5=Byo9+b^GTfDgRx*A?$mMK|A1S=|1 zbL~oJTZ?*Bm%2Dz4IN5;^N2cOb4!b_ou2+ynZQ<Mom<7~rn-*rp37|xJ1E6<S>D_y zX`j#St%u*K$BT=f#luis-#b1@W@T*qnbPjfeiVN9kT}OK^$<BXTOgy`gN3fAKE=>6 z!{!t({;$xeuseCJUgfYV({}B!xk<+uxV6bUZtU8m18;2m`h?T-uA^%SY<uU28HV0a zK}JG@_=Bhiuc~feD=7Svt)uHH`QDuYkMVnh1fw)Kk4ZzrP931zggKw%M*+$`!4SfI zNc=A~Ott%2;x8mYI@&lc&$a-5njr#6!IMI*lZUmCsvh~D&ZNGB!qayr$Xl0%U&w=C zyNnKyN7wmq3P<~o@kyUxclFiy2?ynHd&wOpEWc#K9C+V&5d>}uy-}Bv9$xe){S|V3 z^qM2{63@%b-Vm|np)x3QzI=sWKr`M8lJcA$;zC9UdEd1*-cT{^j`LuC{<=QQWq-K@ zeul!$P26=y8SG=4y)k0`P4p+P{?<<Z+(Yn_2GURct{dO_JHAzg@Dr2dPrKLW@?azH zr>DQ?`0#fUxzFQ{P}h}N@OYn7uQ_SY`EE<zZ*0OJt=uDY_SN()3GR04&O+-=X!nO? z$iVC^YucB}fpFr^<NYf<Nzna)(o^k7^-2{+c9J4kkD>{WW=p*7o)+QQap8KBS~OO) zBis77ij{l{tWkM^V%}tuQF>Hq)d5R;4$WQ#%-y5{&k9r-O^D`-R5%X#97!1tyi>Vx zIE_;Uvvsv-j0;ViXiBGL9u6ZBs%|Af4vmC@d)d@0m3KLrcyj7>vYs;BK?z;{*rh^7 z?YK~{66Zrn#q5$TJoBcI(n#GJLXd7+AcB*9sluFl#kPz`^eyX;s!L9#Ih3#Hj7#Oa zb3aIWr8d<m1By8YuUd@?eZsc_yprq+3-&*EfGOiqVag^K%~7dwtyGg&V>E!5U!g*= zaxQPudxE(&ZG`;Z;YsTH5&6sE@0KRGuC#*(4;h62nC@KY?V*q+SSgwQ00`K%%&+Pk z*b7$kY3qZ8y}?rK@oON^-#m^pboNByF@d=gxAX4mYopyv1l~nP2rZlfF)A$(QII{G zb}Vm$JO%3GR>F+FIB@r`vIlgM^zeJH0~uFVB8Ku-eh*k`wDTCx6Oc|Ale-rJBg*Io zVzJ=y(?v9V2$4lTA9C$YJ-rAiI#j{p=xBg-64C6AC-31d49)O++vM}-x7ENx1|T-s zeWdQbS;_S*<nB@}jT>5KOmj+pA6UAuEt{aEP%N42$-93RX>Kp#u4r5iaPU`$19KFM zBGe(iZym*F1Rt($gHO*g+?7It4_yTsYZ4%Y4?eF7>{IEs{t~~={79Xd(x|i7?&;{Q z?J)ED^RNQYHc^>6L6@_^Nwc%JH_Bw02Mush)pS6-Opq7t+xpUT8!+!-N3#Xp(}hGH z5Ga)8eO|5c-f9#wr8U<OvACWeUX=Iu^r~lHh6n*X>Wm~#Iyz=JIci-Dm>Ea*{2=t$ zYC+J3RB+xxN$@^f=BHG+=a*Xt<LiAS))Nkw{GnxX`t3IbQqY(lYC4Aq2D%UmNSgZO z)%}}6ZF68QD{9xd4g=TF(B>0GV1Ms`%$v<hg!YZ6<QO|%uXaM2Ltq9X+zXBcrB=5J z51X{n>DTl(y9Bzn@u!^yx$%B!;KvK6_S1s^PC&80m{7N$g>ALK0xtXgScN4-8!{g^ zrd>b2ks$6WRtk;?(_uz>z*YNwKf(o)smSAUz>-gfbp;MV=~r1Ga~o+&WyLXQEOi5s z0SMaYrxq~(6=IwFjS!Iijx`7=q@kA^-FZ8SG$DA65x%E#1B)75c8C`RsM~<lGNJ8C z)@H^gBwY-^$Pfv#E7f4T@>LA9fT-F;m_m>ctnou-G}sfL3Cq=ZcnW!7bCaxuB80V> z7HxBLD=FShxJvA6r6MD6LY<+tz>T<!+;A;BQKJ1iaredDbfHx<9tW&JB{5D58NrP) z@baT5CpCvHG;MW_gELQW%NYX(f{9`zusu0ov^9evmAcaWY4VVaGOi%9z|0y)a}o<I z3Op>KP--CZ=9VLLn2jI#B~jgktZY_0NSvrqEIu>kku<|RycOF_EwOhdV#OQsii5ew ztR8zdvjR67$^DBq_nk3U&-g(vJVMBZD08;&tZaZ$Tq3K(6lbs>#a{vz7d+Y~2xC^2 zc1A%>#!jO@4oVqGYPp|2C-66V94iJAuF6t!10zua)Ug^KJc(+YAl?GKm`U6DfzW5H z=Tlvj8A>1e;5JGbD;UUf*o{;exsO*4ScH+L>_i8^1+x0=C#AnW*6-{Dj*qZ-ZGn{h zv{Y#LVkqb#T5WbbR>iJd?yZuW{SL@*K-7w;jAN*0NH3S*QXIudlY|R;3~1>vOAUjZ zBC}PuyiFpe$9V1=!B{&v@LYv;0TGyMoC6R1gzaFtfaClm(<HOAp~x19T3#xy!A_5` znnh5M!`J)){W^LeMPL<QE_NcJ*ra3hpIzQ-tTI0ra0Or6k9(D%fpCO!?@&stag?qa zUHg${mQk*d(dg=ANpXA59iw4<kCce#R3fXKYnx>bnJ;yVAf~XuSfA#A2FPtyG=U0L z#hcaCM~0zfk&G~m@WuI^D3rkgPjU*+kO}2GQV|~Rtvu^4A=<Epyici;I?2H}2S61p zagN;a$Zr4E!L-qEDd*g-%&N&$!bZ~~-(qjcBvw?wq5175Ue39Wv4)4D3R28$3PcQ& zE@TXb!@E&dVZKt>kh5!;3Gbzb{ZJ{BqM=r8r<hU!THusU8UzT|BC|cD^DjmvmMYp? zyk+y23tKyfkMUFJTR5Zl)+zEhi^J)Wy|sGkh4U|qWBX7HQ&6O4Z3<$QYAcp$n`8{v zE~;qZlQYR8@<I>RE?c#Ef;7~?U6zPx3Qh3Jn;p0MAnYA@OTEjfb3%?=_2fRa>IPvc z`3qiToy4Q@2ew_UsBdvET>?^+pa}QmoF%A~62t$QBb-O!kGq>dkh6$i%R#+=xT${l zW_1N@vOy8&xd))>hk9+TJzbW~-lSqCu`6t##ycyUMACMlJzSEdAufV#WpeQvd*2Di z$E$GEj87Qik6mNwX2_v!(I2f6>YOyo%A7IlO3(-89Gd(J*cEj-w|lM33-$Vqd+4m1 z%Zo+cFTIw7SpAC1M7S=dou=uo#L-YbWfkI3IJS+Y^Egi;=RdY8caMC5L@+f%S(Kxq zF_KSdRZif|qbehfmBJj~!2)5|Gmp(-M14_3xkAH56;T1%V-de3rkmI{u)FeL!N9tf z3A6E@iG(R*`$y}?U8uTs>mtv}iN2MV-qo#XNWdiFv-4N@Xw%nuu{+b@mXJ_R@8Dv} z9@)Y#R+c$h^i(jb@DW;6RMN_2*`Kiq3M!_SW7Azfc8J(>Cz_5lv8>2NanoS6-tVK7 zR1yPZ`=yxBo}1l6NxXyboFtI7cu7HGd3o_RgMu*KuP{#mkf7%)&Wmu%-D<`L8s)S~ z2&1z}RB5i*qAy&>=<s4yRf;#mK&xN{%ejhNm2D#o=F-h+t6DM`EPOTXJ?}aPV7Zz| z$dfWUaz8xZTSP~d6VxJUrTm8*o()Gz@!g%;(a%kV!D_m7_aOS^6*gGrJ~iccF2)!x z9TF;QM&X_M`zMWJFZE9M8{HYwcDvR0%3(Y%HA&yjlECCed<*fA$Q#{8WVofB!aL;^ zS^L;`)e~i~vJLs_cB!W3XjOPbZyU}<%woTqO6?C8n3JUFK^1prZsG0W!&)JcQDJ=O zR;JvfR2{rQ-_SZmFCH^Lf;^unp2g*MDtn77wwBY1ms|Q}6d}$IbCeXo(n_RwzbG-v zhhwbyb^@iyHcG`*^-Vgr2<@&zioet~e|w6|>y_o2mN}|_Bpn5IH{(?_h?a&=x~dVW zno;=4`D*RNl2G>Cc$D+9J)^f=x;9S#YRa&jpga^lKtmT`8It3EmMh@IsSH*FE5eAG zpUc7d4)r@#^su_HcZ(an^yCj=xtj_b#XWk>+fK#}65Xk)_+0+p7fcz&i4*0|uYeo@ z?xk@X6vdlAn|l)OBa1tnD<D{1CY?ltg=#KZU+N-xut5!)wkL>6dw&aF;-f(pnyE`= zb4jRgmQ;zWsI#)J`{2Pi>B#?Nq2gd+B%s8MevM&tDR;2EaB>Rwwf2uJH9k()bGNz( z;3==5TqefTi0z{WASlSqfXscpXI>;x+32*-lVf<NS6DN7HQVCIBz79kTkFe$Us)oC z&b)}mE<4D6_Y5{Mc3jz<!-cm_F%nRx7#MS;q~KFQbRJW(@<+}`R-=nE5$<l{A`HQ4 zgY0;V=2y`oF>6E7GUN2km$0c;e_Ds(+Ww^`>KC@+++PZu`?BDH$n##1LRrwBVnyw< z2$JyE(b1lwkRSzg)ORyH+U=mP3jb59ZmopIy&)zcTcu6KkTfzNT@O2rI>0aVw`$6c zVK?C1GKrlJf{_CU9cqrP&EE>u5sLf<EeY^zV2dp2PzlFcFEN3fosD?1kI-C&6}Vv8 zqxj<IzuRSN;xS8`2E46v){=tWQ}+>@wz!}F)F%{w**$#XQ4K45L`sWrYo-*NVHZ5- zd`v}i+dPk_Wuhk?kT>LtDE%e$KJ2@W9d9>$G1a(4{v)D_8?geVB2ORI9LvasYCUa` z88)hKvfdOu2+>O+xUf2+n%uyunZ|U`Ov>^XftxMSTt$>50ypek4U<`?(7bBy*Vss< znPi;(ZcCP7)xnM8@JEgf;6W84YdSQEj8iKo@C_IW9ak>fY78xPEsJ9tWwR2}#Ljs> zZ^bC_`ZKvb-rVU$%CL-qq<RXAPb>%CTt03B#9NDRo$%`8Z=YyE#Cj!6q9Y=E46>$= zPSN6hx>7H-XdMGH>graPkgeMy#Xg~nHqaSsxr2hGvGXK$Sybu!cUGQ_$*$pD8{0B@ zSw_xL_js%!Er}VDh&`*ff36?=tY6LGd9cILfZ-F<D6-SxEQIM`*#j$pbo_Z-19O_b zZY*0e-wGOcr|PQaBi4L^RoX24{yMoUMUZHloA*$O)20hbR7Ap;LMi>P8j|pNUcBKT zj_Cq*;}dQrHNZ+~MeFe)kLKHA0PH3z=C|&HgZL;Z`}hbtrQA1qfuqNv@n#*ad8C1? zy`2ArzZ@BP9Wnj{a8diObLyQ~87q)$@<NhESxztqcdIt6xwY!k%O{9j35CJ8pB`X~ zCqVRR7RI*DQ|tY&@E=RQy^`1H)4XcmTb(^B;Fwc`XkP{^d#pXeMM=*SDO|`olnznc z$2_J9l@IO*k{VpT>_umi6S|Bc4fn}3((@_;2l?57v%xjINs_GnSM@gp#TV&G7v9)- zmm%TFUAc{PZUFb^F&2TbBBjMoNaT4L1jfwZ1D@mh{nax8McOMC{DxzCvuJXbC;r8; zXfovx6L#3t{>vtUQZF3%E-2d}61w*eDdGZ^!z?k)L#HHR!J(+gIx)_l=ZR5LHVj%w zOWn{{DlgmSSsmzN=m#8X!as9DGW5p_FgS8<Y_Zzq(Hu)?n<8pxh1kvT0RJ3}1(oLP z+|raMQ0vmXCGQXL97u`HGcTbYAtmnxL*_N(1~|=7ud=ov?qEfI638CgE3C}sA@l1y zv-Nu#_pj0Q1dD4;D6{cNPlpj;8g#vAPB$g%vqChHLrSYbBO2MUXUX)NE{IwqjN129 zWB#)KV_xvmSK<ai-1IP=^htUE4j@FK;j)em%$&AsTe|CNwRTeF>Vwz)duTny;bzbt zHzH&A^OlK>H{ciLNC3-tkuZR+?g4CBjT$QQ%9m|HXF)Q_&|#O-Fer86dEp3*P{$HY zA3wN_%YD(?@fSmVh>^*b5qnxcLT$iuT_~D;h?u(*@XipaqjDf~q-q&Tt&t}JsJNF1 zEx{*(;(ITbxTv^>E&zdnIA+YaHC|G?YfQ7NDI{+=)i&ek{tXA6^YvaazMN{yv5#%! zo^0}PBAxnhA!9$hY{&=Lz^H%hZV!rOq+C6Mldyz3(vSqc7d83Mv+&&~Z3wG?h<*kw z8c`m(zt*lCDS{$+GE})pTU?xSNeoK3`atdPG8Klo;sd@Y7%z^PqYl+ccD97m1=U;y z7f)pRqmkysG-D0sVl$LhFjHt!lfX@1loR*pN<*&|W3zPN8Wr>!+3aHs+EZ5I+otgu zS}V9Zmb($Go>gPl5#US=6Ibu-1?*4S*m*$InAHT|EEZDSX~3BI-8u-tTELi_>fq(X z5N>%8=OUay+{wdxbN2T-`)GZbD=${AJ*3?m4kl*?JjQ#<m?g$AQ`fGlROk#ODvylC zIuzp&uDkyOg|1nwPi<Fe+zGj2EQInQkn()!(P0f+a##89u7U_8B0g+-7fl{<<X<V~ zt<y&5sjc{_?#$++k6^HViQu<95|0A|K_8L6Rz3{iUU|Y2^nW6XtA%XC3Pix_1hm(G z*XOIfEEMASB={0izF@+j89*KzD2Tp6P#sFp>}MSiCRSt&qfNpoAXopPTXOcq9@NgB zJ+Xsu>;Tt=R*cB&Knb?SrA5w3RW0p$-$|Z%-9PeS<|UW^rl7^ua4eeZX^u<1E;JHq z)b-TbZpRH=`Bf!Gr=t{+!kUB>C$3K72Uq?Aa_@&TqA<_JWsD8y2;<Kh(W3kwI>?7o zuN780Wdh0Z+bSoYWv{+cfXAl5A^IC6TWd{{HU?d^I*cuDp%Q+qoFLN*h&#r2`A7g4 zbT#YaEPJT=gR3;FfpX2lYwl}wGRYN-_1!~+=a81(w^@Qhc3M<&e8@ryo_O)-A>^R9 zqgQ5W$bIQ}^b}azM!wy~`U;)0e4S*Z2jNtd<x-Bt`bwy=fMQBJWqbZ;_jdsmEkyiq zxDP4?eP<?|W>k_4-YXQGt3hJ-5Y_c>e<|)SIQTz=1L6Jv)Hkil!&6I~z5u|ztoB$R zNshl9uwR7t8~Wx%-6H#!PG_h=na(?WXYgMkk9*!HtiKVlcb`x6Kdk%{g!55foZb<F z#eMgZd=kiM)F;xDxyHG>D(R<#Y>%q)o=`B@uw14oqETXqUE{rkb4p#7%gCgT80Qb% z+b<HQ>}@;Z2%q+iTPK*eBC%ofaU_=sYE#z=ExaWOqQ{9U#|awnWi%-Y7Udw?<uFd3 z<QiHKKSWgEY%N`LqSlxjYYtcp?5pqWT1cNK@G(q5g>;^_OPz&uqM(=mkTQ(wGFzZC zpQ4Kjx7Cv}#oGkuG3&zK*@3xbMY5)QPKVgh4qDg~nMo=oV3awzZd5q}M-nv|(lvDf zk39jSO4_wH6L4BZ?S%ar@NkhHU4YxQFH~rU)VGRDzME6LM_BM8aDf!wZ)+i^uCyw> z%;Jl7Rs^eJVZ^VS<Qv^;e+MI|7hcgtv86+u41pWjs4&0tfU_yrw!(FIrDxgzIU9-R zi?%Dbm8ec?RTX4b6IycLtXaCs1@4&$&euvoN$MC&<VNs%{ir^wi*Fm%UIbk(aA9|M z9jwo}0KN><L0{P7N}h{2Pue{8Apl*WFYSRlXQ9+0826r3UM4^4=1ObLsLU!=kx^f? zkz6*LpJ0s;qvBElSWzs=lx$iCsZ@fs>eU8BEu&bg%39S_7Rgzo>*Z&btFgz|;+(T| z8&sq&tyqKa#5_aR|3IC*7=GJm`s3VEGXJGJ@sE8yW&TTYvN!ViY0d7Nzv@_^4Le!- zz&7RdOPz<Np3F#dheHMIoWX;jw{*;dp?T2TNIY1<-PVBXgu(gU)`YD5V=*ytkvPzO zQVBn~il;(I&(d=q4tC9HDwxBGH0rNzH}Gy#5yez9^-^!7<LjmUlX`zl5W9OcvBX2V za#E-vPr;(1Cp3Uj>!7#&m8dazhOV;oTyX(UR}$mE3Z*?HEU+I5>Z*VaJuH$$Q7KtQ zjgjPwqui2Lt*Xkhb5odgMZSHtL~#XOam7rvilOZJ!kUQ{H8f`eKs!tlRB;k!((DqP z97`U4o(O?uYLeYOCj}T4$rh1{7B(iJX_rl^LVxB)a_9funX!E#@%Ao9bcP``J*!!h zTughd{wpV;Lz`N<N`3iy|1SdBBDd3st{JtLc&MtD#6x$KGkHflV^iY6aZF-U9n&LD z7%eUFOBGEC;Hs#Kd{A9etCoe|bqCSJ6R7crMr2Ji{&k2=nqLGRCbya(H2Za)<r&L; zTD-t^QN;pVrb3DJ*J?e|S+ATi)!_xZ_y*}+dn*<1&JV)irz5JOFV_uIjG81|^CMle z%ZxX08*BXow?PR}M=b>`;o6_{f0(&Qga53DQ%QvEhSKz?<UU+%qc2xd=(Gkj7IVJo ziC_ThSpY5wtBm=^%v{w@jq&Oruj#-Osd3jrbrX85eu%41oOMZKdg|_J_))u-zdGX7 z(yC)!lhC-2QK3dLO8@xCjME!`C_FBhp=PCho|Rm)OOob|oAH4EP~lO~`|4;;&)6`l zYr)LB(T_@-8~uP^_R9%#GEbm$#ZS;|<7M-8^QE-p5RvG<uOIwJM*Ko_eNs}&jc`fK zkS--}cd7ESfI7SwdMGut&dh1>L^}i?^Vt79M2+yu4hZ^CtwZs>()4(X$z-aCZ;Pq@ z`@ysA2sRaP8Mk1EOM|eKcJSRMi`O+&Zrj(0i%I*M6Qis)DTf^=#?}sNochr3+eZE9 zL*&9Y_z4dqAu`&Ph(D$-#od~4)EZNm(5j4MM_X#F10B;66DTyAxOP&Y)_R|BFWxQm z(c%``zQ<v36GLgK(ZCnC*c1J6OyR{SAoHrVCamb;Ulff<w3wTJ?j%B(TyM5AV!&?Y zE453=f!$7tVW%)3t+4a>TP;>QOJJ(|GwDT4iiJBzEVOk()jSKNwwrB6UAW0sz`99I zrJp0k-RN6j3vk7S`nvP8;JCcYHj@`v$D<pyRAh8djFW-^Z`V>U){vm4n@8=9Q98s3 z`2{o0=4b+;46_tdk6<A8%bjAmYe^{&e)-h!1W(^?U=N(m*zQs@GHr*_GJ@}FuT+wA z9bulpii+QyBl!gjzJ!0q_o-!62Iy+Xu&RG-Ew9*th#cPPsgp4LWUx1>7{AEZxZ@Ky z+B8`d*3v2SU?9To(&!hi)2Cn>#yUg(Nb6(8YHP-9qg{cw4sA`t`TD{%eFhe9{H!J? z7Ob&3d|k`Fh9>9N{r+jcG*`)rHLnO{g8_w!T|{$fIK2#l4r5HcU72#$cE{SiH>^e7 z@c}F#do*;KN-w6%fRMjouHPm!N)$d`yw}TP$rxz@eTM9Jm~GlY`xG*CZN5=!RmHeF zy<DrFBzo(mRp+%trbQB7Pavl@nQpS!;5;1J)5O#~7IZjk{CpZ<(9=06#7B70m*~JR z{*Fk>6N-#4`k&N!9|z)$nrDMAIFe{x>m(xxoH^;4&9)`5{WTk<V`jA-fT--n^Cm1d zK?&q1;4llMpMc<pwJ!<e7r5{pv2zE8$H`|^Q^GsW4C*Nxc4-K)e~Z&!gK-C_TGMk3 zP;5UkdV*P!yh`3?U@m%prQUi09bU8uD2Q=`9dgB^XzqZA>j*la!dJt7`3v^x4+H)M z*K~a^Vk45h4Z{KARmqe)R*D%7kAGjeusn~ALMz{YbB~lsYuB7Li7?M;a`2@2fPbtb zm4^Vf>_CaY^w4mf#uQ^PfURFhvo*yOp<&s2%_)_VgZG=aw1O_p3;G8^r4wK<v=-XU zu2N4YWpPH&^{|zG9w|%I;o`M@r7Hjp(d+X&b_x#g?eoo>*6Jbr>N7w3$u>&i`_~>p zyY0%N`pY}~O2Ei-%xV0fqNx3KKF2kst5iu~=kJ2#)D0U0i$aG2)@{q89glGCFuFxY zO00aQ^Dw_L!1(^tDyldA$luV+N|+u<kPSF?k(D|+z4ski`Eg8YCU4$Vk$-KrdDXs* zpexwE?UYP!EJO5foaWa8k!JJhf>c+Q#Ma}0F|Z~cFotB{h;cm^Md(QGo1R(qvBrkJ z=?`I<R`!lbzrLv(WhN1Vn6~#$VJ)$JMa&|29Uov$hV>BYyLj9$*>6%c>3B-j^~+*f zCv#PLY2~|V=*dMFt1)(w5$pY0+sh{w**&k$X&hNRR`Wpf51lhXehcD~xfL~CqE6Un zD2WAO&${GabY9s^M7bLS8FtWopY1*wJdN(C(U0xERE<2_PlrD<--!#rgJxdoRdM?I zZJ$YYy~!f}^f3WUljBx-Qud!@Gz|)+%0Ap)*D97JJF+%c=*=59MKv!nox}R#8e3K8 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%0A3}D7(b?SLQr=l$c?4_V`IFyl<oUR+8~B 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ν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 U&8zv6N0rH5R|^%oh+o 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 (A)WNttmbW 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 hHqDy*?l3pxL!)~I%X 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 no?(0 z;Y=rjBjc*V*@b;d3(KbU$*ry|DVs*cY~?l8&dTJ{>a3cX2$+swOerldnvvn0?JTA2 zg6i@a&N9(J6+-ZYMw@Vz$#qs2^hM~9;UcG~ytLF=R9#YDR@J9uW<_bAl#*&HLgkf# zC1oYmgAlSJnj*icv0s31J;owPspZ8q&}JDWWlkE;6lY~#;gnKy=;cL)rDF>#OT@c{ zl&Ytf(4czwG-@%n&+O<vd6iCQUO9D;T3$BWSxHPH(s3Fwp|H4k7!9s`PF`hUSyhP` zB0_XTL)J7girnhLYNtsrQpI)`EJbCUf~Sp?@%B!ov`Wu3>r+kQhybcgG7?gsX+k1| zm^sUeX|`RZ(~752Rb?v8Ox1MCixA|=qEX^dkZWi))g`5UGD@n%90r!v%uFk*uADcz zyris}%GfHM73G!HX_b}b)MtkXOA2zFMdj1VOe)jn7C9?Saz)$BITxYrg-TKXrd%Ne zSjF<hE8$y5G$Lckxp^)bC@83oL1@)P5u&tuW<|dON*9!rHL?^f5p<Omjm5gEM0=_T zWSk2b<A;oQA!9vAR!~i>vV_WmH9TV!e6w<ME1X3%Vrr#dw5yqTPX+PT-}7dcv4~3W zE0gG7hRCstvG(<#&DVbZuhD)@#ChHvK7@IYyl5tkNH46euFNeeuW-7?onSQ;<KJ?u z|Ess@AWwY{N+~ERtB$65vzs#KWvh6#8c6VOufN}GbiGj~`sex&I@&vEEEaM`ihvZf zTvc6IS?%Ipbez?YcN+MV(iv8L??`QeK<|W?P;;FcTdn4DPA#pevJ}Y_TC+3Di%X`K zI4iA2{rMFg=l>e-|LPrmGj}r{On{)t<gZJr%nJStiRtSnD>2p-MtgbO!mkl;Y129& zBsIAPFJbg11=0SK9~<u?B{s&&_n)#DAK@}d@XjC^OR2C_D4{^7du0u;EU&4sT8^U@ zL;Q2Rb6VxBwmOLOp@&va-&hOpKP@rdc~C{;{rbkcD@0o*yi;RP>z)_QS?ZkWG?is5 zA0EvtsVeG|US`=w8x6!+SyotGGTZ4Uzpup@YmQ>PbL8+T?Io+yIj6Fu+FCWS{_7&v zpR2La{;&QkI5yT#NaFih1b9U$(CW+Exiv_uhNXgH<NO=yZ=vJ;(bfQC{a1Euf`6$* z3+*q^asC3`zpsVv=a06A5Et!_wx%x5fBbR&Qy=HQBICT&2U?@{>Vcwu0#LJ3MWs`y zm@4Zz#d=P2J%c=QIij$vxK!u@K~S8<xHx}S#QCehI4=uY)o;hE49KPzmX^*-EiJ66 za$3z>oR0Swj(9J#TKLuSs^h}ya&i+hnp*q~eV|KG2dvT>c0zyGGtm<H#2D)tXFc8d zmJGyur%|sGs><a7*#wn7CZw>ETp?aqMRS7H!tZk<XnwHBOi@QzWu|D^;~X<3I<0b9 zxn^dI<&_0x<<%}0$ko;JM2<?BWD}!QRcD#*r#TX8x@EmeK3uG-?&o??zmjuG*;Gpo zEu9k|<1e0;EsFQbV*suE6rl!9R$9d@p^5j(sZF%)Rd&wuDPs8K*;+N+a^UN0P_9>w zMGPPnm(LMtp->H?xuB|M>eQ0CR#krqjrU4ub8k^Ug_!2n5dE5zqQ<qO@a|O8DhZu! z>fC5+;l_Jcf<|4KuCcp_Wl#EhWu4Q65Pe=+yyF$sq-my6PzmOk-bdd{v334>-0aa` zef0NNAN~Cq*WWt=lk9$$j_mKh<P*H3aG9TeiEi^_&1HXo4d35i!}pJ=*Nr7{{r%mG z1ph`7yp6C*Vo0FH8m|JZc2>FMF}W(&ZBY~IS=4B2ND2OYNvLm8quoPt`(O$FYB|Bn zxe)(;y{o1y+2s(3{9GTIGuw@|2Az=LPhhOOzeN8IavKVY&BEt++|xvVA`|@wnb_aI zs~AgzCHnI{F`*tWV*9x(Se7f%Uu7ryPgG)by>2X)C;H1?qIZA+W`y8v)ZsHQZ=snp z{9=45qQ``hLNOFplk>$yS{qnYYK8SiZh1{*k#ksyU`?xraddBCB<$D$W9`@iL+t3l zU^@n3bCu`Xc^)65^09V44kPXS3Z8H0<M{-N(=HGtt9+uJPvTcnFnz%|nfl}fc0QRC z(Jg#K+OiqWViDNd`4nEH@?tx8@~L({jZe4p5^SaNtL%IRCso+q)plk{)y%@`qUp|J zGbHuIb9Nkvmr;D`DwS0}*4%C&QS_7`hSWEaDK#af#lr9#Q$(t4YGG1GJD<tR?7W;; z*!e78X~&k>%8sEJX2;e7w86G^UL`;^uR#cFGKN+8Y&)OB=i2!^KHtu-<_qkYfrIS) z8XRKh3&m>(dc_!w_0Zi|G;YTPOtj;8Q8rG1DWZ`@g1*IkjGZsxOYLM^DPz6>i*bn^ zuNOs@@#S`YEni{hEBPvwUuWmn^VN2~hDO0}5L3JsQ&fJVo!=y0*72L|{1(36&Tr)# z?EE&q(avudxJ`Vsop0fH*!i8J++BPtNw~@UDm&lCx7+as(d9+~?hyU%AROPxciHi{ zAm|j5V76|kt(}##3rk6=?fh<DYiG!qo!`TE+xZ^q2HRnKJHMCjwd38?Fu#xAZ|4v2 z2krbJzK{AZuc@x6p{ft_{dRtUm)h|;eBRFM_(3~A#1Gr~5q{K;p9q@15#U$R$Rqqw zJAaG-{w?S{#vd0lf85TW;3w?-NsL5@Xhe#|dQ2@Xud1nZ`U-S+jIi^kM3W~4IK>}T z`Dr_UTD&|Xz_Wsw=lJs~KV#=F@E7g;CH}I&ydp?`)y`kzuiN<>VuIe}E65>@=n>hm zw7k4xN@3BAj^$HH6yM@++xa_IW>me*r}(>e{+^hV9io_%xX9n<AK3Ya{H)49vh$Bg z09a2k)KB<c5`WjYa-B0NQBvfyFj{x2>^;4(D#sO3MELAW_7DqqgYdP4Rv#oZVM!Uy zTS;+8;SLDKrr23D^}#xcc@C<-#K`0i>`NIuEqj<qM^idDYfMH)L0(Q;T0us3_Ne3$ zX~{#$jSMe$?aYLeN((o2o-0{VSXt$)q@<jYc12naDZiXC8EN#Il98P{ib`aU&P&hE zO3olMQ!}!2$K+6E(CF;k^t|-3X$2mXnwy_BIwy^~l5>)?h7-m}9g&<<V7;hmqjS?U zva^WF<cvI%;v5sEm@t{NZTe7=nKPUU6U<1@6~%JW^29!wAgy3{PI6{uGF1y4ot%^F zi?Ex+^}Gh9W@o0PXQd7GqKx#c^t|L$F%)WVSawb-<+|VHjO3Iw8laY!mN_~jIZx0V zZhFWji%MpS9Y9J345z%I1-Vqp9I1`Q?0svVlAJm!FNc5^XM|6!ESx4RELG=2vuQAj zyI0%L?9>9HG&3!W&=S>27yXtx=bH1OgbR-~Tuhy{V<pnbnWNKka+9+JpHs6<hAKI! zV{$U`Ma#Ll>B9*Vn46cAo;AE6BRwxIN6ehvoC?n?Pj~g0CpaSu5{UnLUiPT8tb&|0 zk|bMrMP+$4d4$elmypy<DJ>~7X{o3znN6mN(ozadEe(+-%fm@MywX`+Q|T77>6PVk zL{iD18B3#lCT3m9vEJ11B4KUJcCEOK(zekVV{!}JV^KZ4RMTm4($jK<h-M2;YU9!~ zhNdRxP@X1))<rwd5_yIx5h-cI)2R*Z@-b<-E&?UdI4zRw(KObyj5NXg0+)!B?G)0S z)&Q;Mq>al-7gE8~@=}TZq1hQ3f^}_%W{*jselH)BotIWnpXu&g;!;M#TsAIOtSI;N z8@U-?SuiqvUIM6Qa(+RI5UezF<>V3#^3e3*=|Y;WuoBI)Xoy0leP$!TjkDf^U5NsJ zX$Y~f^(izgyxE^RE?20N(bN$MPg)KsgaR+m70M-U5plUWRJh#*PfF}8l?@e|?^A^C zmv}@W_Eue6<&-trR9O^fU1DX^oaRwfOOA8P#ytvg_T+YYdo*(5(W8m8hTulfB4)2H zudo7GquS>%B|IX%(R~BIBM(J{@gmk}-Q*U-fQGJ-_r!?gz05hs>b^rnqaFI3!?ce` zZ@M25ng$dW7w7p6;vz#3l{AZ;#PU!g!RwT!dW1rpw)mgF(AcT3<Wh1-!y+25(_=hB zGt-|eAe(0rDbDXA>YwEFAYCeznY$)!>T$|E%E=_crwJi)pJI$FtSmDv>Ht4}_@CbS z9@qE?N%oYhh&*%LN?}EXdH&R^Q7LM|M-~TN)#YxR-Xfx5L9vBeHLt9?aISR{HSRwq z^I|7hhVRL!O1`#mD2T^aJqsb$6A=~C=mvsoIpvufNjyT#g>1$ZG#O28Ii#DSMzw~O zR901|PA9$yDd^GUahFz5DK<pJmQNs6%W}@G&MhG`B{*pIP6(opQsx<H>Aay%vN6tL z*Af+xeyaB%Sx9N4OI%Q8qc%uyjV&y#ak^+~YImfaOEQzayVqt6KdiERrn!4Cw9%#G zw`+JQ`-)1@bP9sRjvwh0(zn6hIZmY<QUgM=Z6#G1<#U{ssfA*DREkIyYe#bJ?iuEZ zkfkG<7gkl37nM-DSWK?D*Vo}9R8UK$&Z$H~JHdPNNIH9}@M4FRR}OU+l~mD8k&;2^ z*yxbGr^O^2!PXLVX>Ru_=-bpGx|sg)jjj+esY9JrMU^F%>mAbABBU90m<3%_dWPKo zLLG`)Er?Gg)5<)<Ge_<2)n~|^8rP_PC*;9Cm0bHgV%2nLa#6c!kSj~3O((V+B~@cZ zpkRvC@Q6!3>c3F)Bp!-$R!w1PRXxtR_1k!{eOyfIvSs6Pju6vO5nqBl+p2sQSnG%j z?33!Qp3Py8X{z9b26+kOH1}LIa8DUAW~S3M+hWNPA2f>t6uvkwzNr5zt3JRodlgkB zr9!wnH*VVN)e07I-^`Nv&Sc*MxGtBVhy=H3ac5g=soO;ink6I@Y*-R#87jNb#cmI* zi6u!&z~&lV4xy=3*NF7SJ*9f1vs?k8^{kr18@sRaAD!OVttl>YjepPu)x#yU*UBxr zt{sBWmCoXlB9{WToTXeJrJVYokHg2g8}M(p;_Ka75+~kroKx#9IB&rVE4xdPY*%T| z*bR&G=J8XAcZxGgsC;3m3-4y9IRw9)mW|UxYTs359D$<3%3{lT@JEt=OS2(*Gu4qW z-PSz&P(UOWl~Y7xZN9hmckBIqf{;ctNRyXTWtEhg{?T}s3qxqpoy#A|`!{s@1t-*> zn!Zgc*Cwm<xI|A=C=9XKGYUQaTf2w`qUCoD$y&b2uDvP2S4#~f3;)D*lvUr{3I#mY zTd;zp2x0Jr4d*4uU=XoX@OEhVoH9!cS@~4qzoa)hx$X^Cah<EQaEdrjY&2fW5P4K6 zw5dF@Ev~sIq4I7MQmYXYM)nvBoiG3c0kIiqAc?~S0D3ww*nGCY5cAm*Tba*L3^Sjt z&1aa{PdA_KusuCHQac?`z)tj53JfHAwun3k7#Vc{SY*!wz$1Gd0O=vZGYlu#(!4aA zMkR-V4#Oc3MnEv6V`sufy6R&W>}uYtZGqj09yC*eLT07}&75fJjuEb&k={V1ylIj9 zfkoAUoYiYTC`nS7B-Md>5?Z(t`$2mg^dzbF{Fh-8H*>mB4azc-<fCBA5Bf7qJ_z<C zB}@ua>L4IYPLf>so&qfsS|+r2FwtNqIE4mM1kIorLcs|=U>f1Cf&nmthE@vMFcWg2 z915TUrot?9pgF|+0T7BkFp}6Y0&EzCJwXve@C<$$_M%BZGu4~QG3w<??1O!2@Xg=~ z?1zF~1)yOx)s=}MF&Jx2#VX3-^o&0Wf%ylaSw@uLOdSLrhUN^$i9r*a9GA7-1R>4g zdXb3&?1$h((84>u)+SBWL~RXC+-&FobD%TKg*dpz97ji2FBZ)j^u{=hCz?AzE9_4q z!-$>)Oth%lOjL^UX_y&x971k~z^KO|WIwdbtOW;QTHOvd!nE2Cp_xI&f}Wm7A&ls6 z?Pya6ZHeM`^r(aOQHP*|m&o?!+%KlimJo}ULJL?9ZQxoWbR`Uh8+-^&^Ds9JlW+hL z${<x7MVW+l@UX91ybF0GN$wblB)<Z10hj=tBKZLb7oc<GKIn1)x_YVUMl=Adr3vUy zsU(u`%SgTllV~JEJ4k_WxRFHUCX*_=s~3x^=Ct|-Q7c3Nn?dx_I>F$mebDW0P_Y(N zVomqVs8gU4DkJJJL?G-DV>u&MB>lBDc>yqz{$|tP_NXjTB}s~m3JR-(9#ka~AtRFb zD8!*>MlaDyFGAJAO+IB?U!-iYPuVsXDVyL^w(UjA+K)o3{HTM_`&eWh^r?jwS&_Z! zpkLHUFsw2{sq}n^m=*+oz+ceUV)<jxhv0g`ZX`C}4g+Be41zmo^6!LEa2Kt%tuPL@ z!9>^&SHccjqdQ?b+(T=0H?7G%B-8i8Lf8w-;67S8_rvw@0IY)tsm1-U0S-`WbyVvh zl{`c_hY5RxFh}80cmy7&|DS;4aGKx?Z~|V3C*d7<3O<CB@DZGXFDd66cn*Gn7m4QA zi0YT&Z+Hb6yov$vIy&GDQxxWtFbpEz48|ce^+TZxCSwW-(N%;?HE|V$8*1V<5H8Kc zZ6Vw+6ZZt+hMTz4gd1Vv{)Qk^%()OGx9C$Uoyrjpk>f}z$8eNT@r3D1BADS8L1_)u z(?}F|))ztaPHBj1O2ypx3+BD94<jbgpK7)aFrNNo>#14KPS!KrdiJ2dq4d{Vyo+A4 zsFNPvPHLf<ubed6=hgJ5SbYw(`kZU^IoIlQuGQyUtFO6HNwPU8B{E9&im8cGsTbQ( z2q8TbeaxaGOwPDuiYhG{#9z5ZN4Z5uxkX2`MMt?09YNv$T|%Z?JdrIv3p$(@9Zsu% zr%(Udf3N$XPFo>Jtoayo&DWm)xL$tmt<c)+M5b}~_L=YVZ;5KLu4>Sdgf2{KLMJ%b zDz@6K6R;bk(|Fz?o$xL=-~-YNACgr%OX~S!8tErA^Pj^t@CBKQFJU!&MGE^TTJyib zCR(A}Y2|!En)!1?_?A}cPvl^nLkR(8w4*{RNF@hJBPU45j@TSKV+i&n7b%w9qf%^- z<zz}~C}#n7!etna*HMXEY5i@%u6P%@G<TEhvYTxBUb5T=$WA^=Hu4)BfZvlT`UNk; zKXDLaIGAZTgtfqA)&^5pdrW0raVU$xkt_<cSS*fV192=Hj^kJcUcvIPh)u*|HVvI@ zCQfD5IE`J6)7e5SXUnjHt->0%8Y|fiSjBF^YIY~iW;<|>se85)mp+F?%p|=a!?zHF zS)>;f;y_2trj&~1kc6W}F4jOSUT)@IN4Ys>?)OwT*UbHe>gI`Drcv$~k;`U6AdaP! z456$7#|h2EZXit~G?OIsi(4~M%F;}1JzgO+6V2((m`^G0r=!NZbrkj^9VPV3tOjP% ztD`#AlViD_-f}Ou2rtgZC|%G9jU%PyHbPls<pHlIwYm@-xQLv)#n1tlKsQ_pJ#iT^ zW;rqOS{Q;WU^uRXEL;VniHYNIEsV$2Fag)VWV``p;Ehm$H+kGd2l*-!OvN4wgK?s% z*n2`0PBK|KgdD9a1;b&2SJ{)3>GpGGxmgN@SkOS($GI6v=82oip{PD1`Jj4BRkN0I zoV6xfw3D`hLJpi~?Jwt8d;YnLur3`kJggf;{wyHbZ`??%+YGI73v|UhXv*${Xxv6F z+D;gTyC_Jw7c%f3$i&@{gL_~S?u99MpUJ9NVul0y<7DzWIb`}UqsYUIA`dfiv9JL% zrns4*jG(px0r>ugmJgF8Op-B4iApk2Ng7E`Jx!VAFJQ!jcoMKMMfi>6cniN)L>K+* z$UADFrIRfU-O}WXa3=x!(O-h~OthX!;wk1K(V7Q;^(#oziH?>RGSD$%(a~Qh{q?o1 zWtdsjpsE9#HoNZDLoaOpGp(^mmQ$)*&ra5}xAheL##~Cjjr1|pYG3?CS$!m1eI#3b zB)bV#|2<D4mj1ZaW<RUVE>@c+?~@wkeG{flZ(!Qo=sFlcT1hn3kc@s74Gyc{6pM~j z@f1}DHaY)-nGSD<VR{{0b`k=G42m#z5XG|!MZtp)!H`WRn!>+iX)A2<NNAER%(fp= zlI&r23gT14?Cv0WKMbXSm_lK*sCcb|G-)TKnQ1d}qn3x&!Eh5Hx*p+EG(Fy|7!qK; zkF?&X*eKDXl4Ry&SltD<`U+FMYPn^S8X2ZGp<UYWjeN7m6WAcU8+?c~!amY2`yqq^ zxKONvHh2Wu<5BXKA0c)6C~2C<NPirILHIbS+~Y6`Pr&8)Bq`2QP=cpnE1rQ}_yX*~ z7vVm96&}Pl;V`}j$MAhPi66l8cots6kKkwgl)Qz{5b<;J5xzhh+4eyE0bAj(<T3n4 z+UR$R_RmqY{wH}0|6nDa$9WWQE@p_!$mXwLcD#`}@HQ5Vr&&up!&>31EEL~iVfa4l zfM;1}{EGa5f3Y5{E$hiTv0khj>rHPl^wyunu|e!IHkgfILs%9|W@A_io5)gG0UODj zY!oYH8Eh8i%wySXE6ZiOSRUI$rS4<->_Ik(9cG2>7@NXQvLg08)p(6fXCJbw*l(<i zGgi)ZR>7OGSv;Io^JrGXQ`u~u$>#70Y%VWh^LRD8hF{GV^0jOUU&og6jcg^~%$D;z z*tL8ITfy&VtN6q0I#X-EPkQbg>E0sJ#s(aNE3lYSI#v?SDR9^hDsifbJ3})#O{7>B zc@)z{icf$rEFp~_z!|K;tFSNFxDMCi42%RjzZ!zgU6KH3&*u}bhmfz(g;(QDs;e<4 z%|Myi-Z6NKd^YNh-(mSBs?h#!yFn?-Zt$I0;qpuPcAO>r5(weKqpKwS6Uw(>6{Td7 zzuU17wjv+N*S=JHyq3ExV|(Jl!M&-4mRh<^*nv{Z4n$gZV2EW0#=5Oeg0Ftda$^&H zu?cQ$k}o#gjqT=(_3D$081vl}JiCqgRnVHO$_?bi-9!%GIvBy$LngZw^4JELz;1&p z*=8tWTi_~o2h3u3LN(hC^Vkkp%yz;`whOLjyWvK*2R5*K;SRPJwz3CdH#-P>Nju%g z4!}NE2amEt@B};T@sTo#y*1`^6j5rnnVLtbIcDlcO3gJ>_xZR5Cp>P!36ERwFwSe> z7R>id+dWiI1eT{S(b;Uwqztmux%eAEe<9X0LYNkhdm3?xb}A^uH*N~?GcK3v!`=@M zdFHMR+R)rRN^|!(x!%WV{+@si>;!aUPeE^X60TrR)BHUHPWCL6vge?jy#$r)HMp9+ z3(MGhu$H|K>)8jenSBV`*;&}dzJOZxCEU-xgNNAHG<V;?LG~@p-S=>c{ot9uD~Zon zoBr&2TG|WDlmoWlHJ0DI0T-Hn?>?XTJMEdj)1LV|go_%?-(vE?&H3YYsz;_AcVcF} z85C}vwNpx*%-;{4rO9G%Pb9X27AYN|72?l%eXAMFGQru*+o3z9J2|rIAbS(E5oURG zrfHX5jTKX4wdn9x{U?e%NHeIWdDAZ<GjW!iCe(n~;}bjf(QfCnX_tn_YxQVuz7-M# zZI>rWF5)PiW2VC7FzGPly0(VJn8O9(;erd{wGa}bHSqB@^6__gJm6p-H$!m?p4-vL z%k<%bpHgXQ`o)ciX3qy{_Tq3QUhk33Gs0bEKLKOEkZk@2A?$Z(&;Ec2b`Ij$KX4g4 z50g2<R5ArKIET4hhGkrV6<mciT!UN4Fl^#B*iLfrByR@K@E~}RH-|U41K#E>;XU3O zKI0wWOCAnC^3L!V?}D6nMU8jE0Nx!Pya%@Bk=T#-##G)9hw*4k=dqa0<8UmG$4Q)m z51xS2cp}c?Nq99MfD8F$xRMXW>v=M+;VF1CPsKZU8gA#qJez*ckW4QX1_{2T_-`2* zGYwY2FSwj!T7fn2Jzi@D+1V6Dt`OxYPIMV5#gt|Dww^n9X1LunNMxk&X5ye}r0_;u zWg4mW)W&rfPocW+8oA!1<7zF_boLTV(^g9^g-hDna!GG#5HF@!@#2_^#ET6(=wY?* zu*{!mKTI?=)@rIN87}Xhu}{V&8?IBtez$;Cip9l8k(JLPTb>OGJQtGqSV-aHAd_DK zIXoZ6^NA!}1yIH(!z^9|^LR0A<kR2|KAi-s1a|S6a1Wma5Ak_W$LGUQ@<ATsi{KPr zK?1i7p5@C)=&pr#_)7SYuku8$N#uF1HY3+(eN^08kBU3%QE@Nfng%NF2Dgf%Wx>Hl z)3~e&6*rDl+!aZ3FR?81g%0vBWSTG^b;RS<hAQM}RFdWiXqsPGce(d}MFb`Gcbi$y zuGVx$TkkQ}v%mEeQQ>$`5Yx3u9TyoTMl#+NJGqOu@KHvZ*9wM&s0}2KMt;7dM-g8@ zi-}#w37KJ1Pl`$oz(m(UVE)B4SQm0#OFRO0QUr5+H86eyIgo3~b-alj({<#M-U{9M z1`@d2U@+eZ!}umhCs*`xekV-icR>N)3QoQaO8IuE;ydALzKb;2JtR=O;U&HY-sJa^ zK<$V3`62k6KLX$JN8u;_82rJHA@Ijh<;T(BPhfL?0$cE>up2*(J^0hulRt~m{5eeI z&*Kn&hP2uXIFi3a+U#X4;IH6R{uY+-*Kr1agEZQkxPZTnOZYpc(5{6*S~|^ft?9TI zz&_G2Lr8NuVK3e!oND-kf~<9BZaRESnkb9}p*s%7TZCT2Xo$u2re2%jqs^9iwAnI` zHe2G+X0z~COPiIEqn%=EGbe7q+v;hvjqc@uTU|#OP}k^k@ZD=~-l)*;gGnxFu7fLY zhjv266u50CiA7H#6_YcY7Of-R{qdfsT#<Jj6jBA7S-lRX2nmuSg)lWPK_PHEZ1MNc z_y;6GXGwxSCJFkSRMi(GMPEW!{uT7(-#{P!J@n^4kQDt$YU^L5wtgbJ_$yTMKcI%6 zBfIz)NzmW0l%Izcr0Um69B!8k*dnQLr=-D7Nrwj{8|;_t=1fndx$Fb!c)K}+p|Auu zncKwe;cDD$?mXUU&7f>@+O4wc+%pLK-7^R~af@pPVH<_OWRLvj?GDfB=Tn3e^04T_ zRw!unR!kF4n4_o;icg87>|4#fhyCCb{@5Xy>f@S^zObrtZ&o$8)K5q28DTxsEH!nx zc=!0+Y5&%a(n`yV6MaNkeWX}@<Xdf5c-n66+xF!ibVpxwQsXg0XAk=F#sfNUbnwsp z7q*eK#HM=$unv0B2%1BX)CxkSP;%;8Lm#OPBugD2Rq6=oQYRQKg~K?h3lvCQVWSj5 zLe&FyNs+KuiXy>^hJ8{z9F+#Z327kwEDeTp(hx)`88s;dZPGAoE)B;}X#{qV(lK1h z#0V)1`$*XsFO9}TDGvurV{n)>7Bi)BI9i&3`BDK+kS604sSuq~DNdJ4utd5F%cL1N zPnwAfr7}~HE66emQN7a)FT}3HT_T0eDYey1MNn#+nHo%~?Pj@D?0`GWFeDwr$jKtL zLn_^SuDZyhvKD#HRm*W#0~>v}TPbNB2uF5MYTQP<c9$_p#Uu@rbWAcZ$=1lBKS*6I zyGp%~OYHYYZmsD#v4vDlah3gd|9D{|xKHVC2mL+idS{<gddS7w!uhVU;?Eaf|6OqG zqHR4&eJ-`qZN2T9wD71TyD9nsB>Kbs?;8}jBC;^MNA%fezQqSzwD>{a;{EC!D+T&T z;7v49?c2oA|EP(6zD)%BG||wP!#bEY&gC4{%anaHy{&uBC&*64*THnxo~<ig2PK)c z_^@y9&FT$6Skjn!M{BA-&aW@mhBFqJJ{EaV@nTDt`nrlb8YzZ9!!`U`94OvO-EY0c z+f4UcM_-Zx{AY1M{Snr}k7ilBzsfWzu-8Eu8Rr*01==@W-~mtEn^v!YRtM!&V6DeL z?ozLS?kX^|G2hlKV7LmncxR&mo$D2_xe7#ihz#;C;BqkhqilPmAiZ%9BT||wd3;os zM4lZ;vw%re;E<{zM5-Z0KO5RebD+I67dlDvpo=sgx=UA6&4myxEy6r$DUKs`Hc48J z#nQDnLt25eq?I^ZT15)@I$SJWkISUBxI(%S*GM<vEz&yNB;AZ#rCV^9v>xw~Zp8<r z4Y*I*ga@R}cvRYgPe^y*)6$*zf^-+YP9pN2v<*L&w&NGl4*Xi$iT{#z;V;r|{9W3E z|48>TS=!6&(tXS!-A}^%0P83{$ht`nu_$RD>n%OZ;-vj7K{~_+NQYUnbcBtNj<Rg& z5jI(RlueT!W2MqDc8&BnTP_`E*GW&XHPQ)oi}WOWSUSn-q-WS+=~;G6dXAlxo@dWX zXV@#!3+!#_MRrztiG41;%)XOeVZTVPvfriG*m>y<Zb)zP4$`N*tMnO<ls@OZr0;l) z^gU0Ie&7S7pLw$M3m+!^%G0HDJVW}E=SY9?eCcmKS^9@hmCo}SGVn4Pd5z5YTv_1@ zWtCqmYkZBY^9{1WZ<ho4U2-#iw;aUplbiE{vV$LyTk^-{R{WG4%FoDQ{7tzve@AZ5 z&&nP67jj4bz1)faA&2w7<Zcp^yGyzpAqB}jq}Fnz)K2a#b(Z@`k#b+DpWIIxAV*7s z<alYQ++P|cCrCMRqBLGkk|xQ6q^WY6R3fKHGvrihmONBiAP<w4$isz^C9~HN$3ai5 zB~xg}Nze`NAzT2iAlz;fw}x<gOxyt&g7=!ZqmYDqP23BVdmp6&@psC--^~4oavu=6 z%t5&iid;5;yw8V3E=z_Q+-K$<hN<|li8}_9algRv4C?oQ!0{ZaTW8`HLK{3tDLchh zZSastNkbtF51T1>JYqLZv}N2SPdp-d;t^>U9&vfI<Y25a<B?EuIjT&zp^Y>hkDA_b zd&!B9h)9Rl&J=vq-0A5;F3V$Pl+<0Ch{wz*DN@SE$0=p=a~qETTUQ-Y8oBB)u%15t zZ(VheGayLL28TQvLgmY$gG>yTbD^i42Ql&(NRr3G5P2L7m#=^<IUh#L<6)d!0ORF} zFhQOKljSR6hCCT6<U+rz4o`TlI-Kxab$HTq)#0g2yy|eWf&X>N!${TI#-DTnMy58x z$p3(8sW8mLv=n*=*-1>BPE0Eyrd>r$n?Xz~C8o_Jrj-%X%3+{f0jY8g43jH~c~y`h zR}<rA!$jG2S!V=Efdl&CX^T-&__W2SR``s`sNp{BndD*5BoBKs@!1CKc@Cd<u}9A_ z<1>&qU{(W<qEY7*lkAujfJuRv)C`lT>*kGxKC*~$1lzk)ryshuerP3{F%>)Q+WNuk z&GCUGwuQv?t$|TVjz&C}p!AFEm=Ck!EN*Qx4X~c#qCrpk8!p~GtKr|jaNs_{Nw(VV zY_-|BKC!CsK`I(Mp$~KT`awM{Cu>$xa9Hq334C#tNi9sn-y$ry4yv-k<X+Yult>Ic z0M+6lZnGbUn%kj`+pW3_g3Nt|cu~9#X4mpPjc`*qG5s&d&7nTLbdNXL;$@^YZqEga z|4m*Rm&i-kC5AyR7HU3hH4kY#xcY3>EN<4arEXVljteW8UCT-v;hxRw+cqhSX+C32 zvBucN8e^CG4ch;$F$TFE!ns+s_?-KNsJ6MO#=1tR7H)F%1*uN;p?Qc!bGSuwc>U%A z{{x!IOP@zHhq_;g<^T`PtPz@<5zQn1do%}K8qIt^%qOxHH`x^LT%A=5h3=OH^pYp2 z6>SC+iQVhjjpp?uy0GS^@J-8dg(VKJA@TRv9g$&<M$Aet;jt&l^W+5{kG%{wlXhJI zOkN1V@*-#{FNQFA3AB}$l6_eQ;qr3mDqjl`@(PHOS3+-j74(y@gIM``=r6CP*49Fb zd?PHEZ-$lfEwE8u4|mD8!rk(1aKF3}K9o1ZXYv;KR=xv%mhXh$<ehL%z6ZH{AKK*m zF;?D(Y4XE3Qr?f*@&U||591j5QM^(<j)n3QI9+}c=g3dt0{JAamQUer@@d>EKaIQP zXYdL6d3-^B5nq;H$JgXH@H6>M{8oMof0p0DzvOpWPx%8DEq}-o<+E&v{1Ho)zhJ}U zZ&<ecBO53Gi!GLaW$WbM*arD`wpspz-6{XgwkgQ=C^EZGQP_S(W5*Pooly+-ieh6Q zDR%aq62N{_nzM6CFqf1TJV0s1gOoNrSZT|<DD8NZ(w;{v9eI+{i5Dwfd5zMI&sVzh zMM?x;s`TX7Dt-A{C6=#K;`m0TKi{Dw@CTIv{D?A;pHK$#lS(RoS{cgUR?_%cWf=cL z8Nq*0(xp%(Q|h5)NxhY9DMlGB#VdJIqH=|lqD++1lu1&CQXq{}CQHRikyNG>OLLTI z(tKrxbd6FftyN}9w<=}Q7NtVksmzj|Q);C5l-bfp${gu)Wv=v<vOxM)SuFjkESLUJ zu9ZPqDF-U6<TlD`xvR2Pj!<rvqm*0Ze#&||LAg~PtZb0el-uMCWuu&{+%8|KY?6zV z&GJ-bi#$`gL#|M^$@7$Z<ORwud7*N*yj-c3Z&Y^6>y<sGm){%O<7ya+XRt4{fR#83 zUm)MYfpcJjdG#ikeFPz{Ty_R}xN!Iy4!{>hIUWoT<4b1hX?O@<7Aff(xEEg$DLIPV zz*o&wKXL<KBVQ$$WZUJHJ50~S@@XjL@@Yisb!<gmIg{6${yC>Q%kT};GolrNeN4|N zOuh!+G+oHH@_c;D^vXMsU-h=>m50mK_>Sq7ca>-1yQWtjA(!EM!Yik>GXvij5dy8C z>G*+&BxoHu@k0@h&}y23XDQW;)>Hw0gu>fPk|*NFlxpthX?^0}2qZ^X5>W;pbkU8# z2I`J|39f^+?v~|@ww^K8v%mEmVLj8Wr`X9J?b`dXwollus3g6ybHI@oP`7L(c&<j` z&sM*ktbTv+_-Vd-LH|RItu(2zdA#9cUQCzg5L^>))IxLL?JHNQ5TgzjiffIBVG+XZ z(5gACc3(_%T6L$oEUD|ruNJ3zwz2wO_`2)A<;`dp8V`BZ-XRS%ubEgoV~Yjtr=WFn z>z1Y}$W~os*FvO;BOhQ%lC2inx=J)U{F4ySkO#hv`SAdz_*`ibxTU5;CN`@sqt*=3 zWxh|}o~9k{rX_0n5G?a=)yL|34p#N1ETSGMHqRR0!|KF4@h+YVpE;06p~n5dln23~ zJOm-iJ_uDFhBnH6XfJMID~F(mau_O<<1j~g0v0GIV3BePmMW*=7UgN!q&x%Ll;>c# z@;tn#ya=x=FTs1t%kYWvDtx27hAou0u&eSmMk?=MALU()RzAcy<r5sFe2K}*SD2xE zjrq!VI8FHhE0rH{f$}fBN%;-8D1YEx%HOz4`3LtZ=kZ|`@u<r16IH=qR29#u8lG2m z#?$~NtIb)U+LAR_Td@{uDC?kxvEFKH7NfRdBh^mq3biYns&-?u)Cjg%?ZMWoz1dc^ zFWaHUvfXMNyI<|k4yj4(m^y%+R0pw_)WPf>bqM=P9m;-Hhp|7@k({Yn+@@ypKy@?^ zQ7`AA>KNWhoyfbW`MjGtp7&HI@c!x~K2W{Vj6C;}_DY5;@ly-~gLG^!{0wgc8*2_X zyKt-p+-TtrK{9?WG$=a;Nu(_a2TR!o{DSng&bwLKTsO6!`<mq-_Z|x$=-y-DJ@HHH znq?2{;o4*2-As)vu32`*uUva9yrZeZRg#2u__cXU##iTl<I%Y*sGg1bif>fs_DYh4 z4p<(f-z7f&wdCByU7MsdatgzQ-ZcQs&w$&|-!78BYTs`IjC%Xg*733TF0*Ldb1hpE z*Rmydaz$oO>o#>S>o&D@x@lga*3AX2_w>0zt&7G+2~4j#7*WgOeJQd14=7ogDOPZX z`)k})buQ&%ktIIKwTLr|`A}!Q`;up(#BTqHo>t&$eV0x8M35b3gwR62PGou#=5TPD z?{Mt@gW+87Kb+P77lu;{yBpphZ0B=>u(^+lt%U{NLeqVR=O)U!Z$HdTy9}87!o9!< z%0~E<O^;Vil2z+{r1j<+K!fvwChpdox;BP~@wOgaJ5`)pt5blf#o$n<LWnvILe=RI zu9iSgbq2(!<uE|4fQf1q6sXnURBNDAoefp$9GI`pg+=N-SgOv4>(m9XPF)0B)Fp7Y zx)kcv<#0m17G6|Wz&q+n_*lITK2vXiFV(g1y?P`3s@?>DtLsowZ$@3c1?}p33|2Q_ z8}&BqrrwTy)y<fzZoxwJ4lGyi#QEx7xLn<a>(%YJN!@|l)Sb9T-G%$qT0EfMi-**` z_?UVhKBeA|dKE9!&zruq=Rqwd3x)cyFCdVqBFLDJ7hSh#wW^;I8XgVaY^y80N) zRUc<X>Ty=0KEW!~Cs~zxie0UqW;d%(vyJLAq?ey#_o~mced-x@P<@G=QeS3osjsk) z)mPb%>TB%0`Z_n%H+hiyE)P>b=55svd3*IN>EVxfAN3O+tA1+g-)G3zE+B9FTk|5j z6PDn2rr&x3I-8f^b@&pV!|%=9@8Kl=VCum_$aCf5dgz2dk|%E9AvlWv66NqQIDkKy z*Wvp@s;e9;f*@Bp_M>&ZUghn5F2=`uG<Lj4W5;?lb{G8F(%7BM>+nKjw>K}^%OpD- ze=$EE^wrM4dhY9dN%e#_edod+vF`=6Q4M!$J*TE(xtq#+4Y`lzeH}&I*J=EAPiLR% zjok4$Z|<)suGUmnjw*6`g(>F7(G9+L&03O*5<5tZFQNAE7##O(3@?NZw1mE-CG<5d zp>JskeMd{^duXrz1fA5Mp}YDE^j3d`IQ2JLO20$0`UebC|AZX%ADE<ZaB31%YckB& z6j-9EutL*dz1AGIYQb=?76SXVR&Y=Yg~zmZa9nE*C$u*3wAL10)!M^bS_jYFh)!?^ z{$^g{>JGQz?`9x$!kTu?oD}y~@;jcZJ#Trg_B@S$SXX;ax~}#>D4f7^E<+8E<DY~h zLk*AOUzAe)1mJJa-h3bH`svC`xPB@&d70&A_qE*Y*6!~ZhBx|k!+`(j>xP-c9`|I8 z6cMP_1%kBh5UNE$f))jrX+2@6)(b{yy&+4BhFmQM#%r-qsKr6CmIyPoAyA=R2D7w5 zFk2f;lax%8lwvY|5HaO4V!=Nq^KvP5-b~H%*~4GyVf;$Z9{wB#_4n|_Z*p5+j-7Bp z#GNA-y<lQA7RWI1Ik;j)cRzx8Z4>9YqD<^%MSBCSXm6`4s$^lFz%j<}K-v?SNmgK{ zy8|=pjzPTMGekcOYndw)dCn6rST&}a**7w%#g{yhW&g(dNOVO?vK1-W!|Xnhl5c=l z3$~tN_QP<KXmo*Jl-L+CzE!=%4D}o!MEetC-ehR1Ek(4Y)N2cVztF9UdN(LM9?*qv zRlrUwl)ENA(A@GCsb)Px0z;Y|f_1L3!(!9vFr!U!ooto^lVm6E?1!7{;1;Xg6~6TO zYz(+>6dRFIA{ZR+^-&BF2nO~H3p88sy?=2@R};j_3ukw-Z5~f!B;?S_8$l~C9fGxy z&{7)(q;jFHmI)oS(GaeUfk<sElxq1<sf~wu+5}jvO@h_hm9SAOguAsOct|UTr?e7y zUYh|gYUS{{Rsrv6v)~i03clBB;2&)^a%~Q_)~>;DZ4q|WmSBvw6bEU`Fh^U3<F(Z| zNxKn?w43lMZ5__iZox&`dc0n{74OtG;oaI6+^ucJz1lY1r)|f>+75hN+leQ&UHH6q zH@>RX;@jFicvjnuUub*qYwceAmv$fit=-R5?E%(Ydyuu)9%7xegDgTj#CmB*Sb}zx z4b#Ze(2lbV?Fp8nonZOelWel~6f4nAvI^}KtI?iji?wIiD(yM8T6><|tes)EYA>@p zwYS(d?RB<8dxP!P-emi=x7lIMb%XZ{Xa%<dHzPM4{(&xxQ<P?BDzw5?gbSp&E`Tg} z7&ODZP{SniEPfx9Gub?CPaut>U{9)%0qION&)st%m1$<~VhCY6wHL^Cc+b<>5znXo zN8CGiloB_183eIC%rJFdFsn5qJPBH|on~AoLm1m;?zt(@mfdNdtgFz0Z8lHVHMpC# zu*MP2HZmKvXRrvknc2zI_?@S-02XL{<Sl*?h;$^cv}CvmkHhyvo%+9sanWBu`7eIV zt=0RO`;tDvP66-7(LG%H90prEb>b;LC?4!ST>F3eakSC!<7l!??lZRk{0k}jg};!p zH~hTeNK{gQ=QiH|`sWSJF7kOpPrt7ln$`QdA;9<R277}m=yt3<-^p`N%=haCBcn-~ z`5%069#HRtbHz)ZmZXF!$9!C1Uc{$*bo<><Lc0BZ(6kT9t2zs9w2z>@_9=AIK7;Ps z=g?dG0^+nUVSx4(q-bA5y7nzxu6+lqw4dPy?H9ON`xS20&XJz~2e#>CuyhXh>k=H$ zWjLxU@Pw|y)4C2X=>~!xfQlZ7cD)$}>p|F3Z;4@gYYf*rV5Hs=^YqS`uXn*K^{!Z` zM`E$w8)xcqSfj_|V!c1E&=c?mJrURINqC!{jGOcn+^VNytv(d**N0)9J{;fFN8<bX zDEvgvz_0a8{7%0df7Hj|Iek3-txsaIekBXi3s|r|nT6?vtfM}Kb=QkoAKl63>eJam zy@Xw>U&YqwGuVxKHM?1#%Qou^*f#wdcDKHe?bR2thxNtmh`xk9sxM_v>dV+E{aW^x zzKXr8U&lVsSF=y`HS8Px2KJM_mi?;V$o|&Xaaq5a_tZD=e)?@ZUf;+Q^(}m$zLlrx zJNYPm7thh}=J|RppQzu%i}byGs=kL$*YD*s^!s>)e!tspphDWZnfZD43exaFX6k*y zH5cb2Y$54chd2vi!SE0ZCOsd(!r)%g(c<RTUI=9&A{YOLj~MZuEJG)r!djW%yLIOS zS*WSqYuO_#%+&5j**&ba`3d+Ye44ePat3b26RfQ`mtmj6Le|c_%{7WzZg1Z3nhu<G zaD7w4D?QO_rDbz8ewAf&Liu>s(X=^j_&D=}Ziyr_&)l!{`=&(vb1Bxh3GZ8<Sd}&W zr4-Zs+z*|^FDLkYU2?Hcs$Ty8>XWKESZ^-z<s2{kO;wl(lf&!a*4rWAC~U}g+;$K) z9&7q@7`@RitvsK|w3BvN?cDBaM-yAG$2|UE2b_#Wo=EHo5%lQ?A&7ivhkgV)=#N3T zeheb?$DxmY9OCs8kf@)8Wc?Im=%*oDe;UT<&%i|eSt!z<hZ*`A*ss3?NA#EBxc&;9 z)?bBZ_4nY6eiq))KZSSo&)}^7Ieemj0bl7~!jJk_@Vovs{HcF~O#c=G_3toL{~p`u zKVmQaXY8y0f-(AUn5h4bL-apzxPA^t>VM+p`d>I!{~IS8h(-E&bQ*xu4Tduf?)j4H z2uWDDdES@}PqWTu5IzP@ur6j0{uT6QUCrD?ILEq~-{FMgAlBXd4krQ=ScJK!k_g>d z5A&NUrzQX57X-^ZA1IW0K2W%lMY?{*04K62^RvSam~H;Fq~8}g;$I`OzMYP-q<-B6 zeiFypnW-<c*wXTXgv7pMN$ic5g!Z!}bhss<U${ecpWvnzgFNn5qjBGlKH;RCq=(Ur zlN|NUcWgQcn~z0?>HA?z9o$h1r^QjHTcrP!%j-U;QwzjGxzn<R<-QI3#7Ex6<Xbhl zo(72C3SGU|w!9zoM>n-yp@~6y7l!ziu@#<$@s)5V4Gn?}9UO)MA%+b?4Lh_k0-(Lo z3_2OX(8Fi}lZ{s3G(w@&2!kr4HOw~J!vdoNEHgU7^+q_{YIKGjMi;op=nDIc2smo= zfX9qJaNOt%r;L7Z#)yX3j2L*wh=q@gIQY_thwqL4@T-vke;bJiMiQ#V05puj*vuG$ zEsSJrWu#$iV;FWchGTbQ1ok%4F~%5)3C1WKU}Rv5k%?)>Xv{P&$08#KON?BsF!FG| zF%Fj*lW>JG0aqClakX(J-eeS*3uq$=)D8&6DI~r+9H(HUmpEjCQxuH!HceA&h+=&N z4m(0u*4M<XvX+S0;#lWdBI`U$WC`nMEs;fLFd{xXTwn$x67@CD3`S&VgR|Y&d?{42 zuK8jGir)N=pu|7AWo^zZp|-@YONBM^yNYBs+>?LdAC+pvGNkwf8-uN2Biaf!qOD*f z+6p$JFC1(rjRYI&e=pd$;LjHPUkEm|MuH8m{q-}}MnhwLI4a5JajO5<jdj2!8f#Bs zUrTNCjSq|lHrXJX9PUwD!Ht>tMg|q_6Cm`l<~`gRPxyrc1Y5lTLGld{q%g^=(j45z z13mG<LMR}WRzxbTm{i&{Qfbpkos~eiaTTeu8PMA(g*am-3^dANs8K;`Y&I-0=D-SL zE?j3UfHlTqQfJFyvvDnKH&(!IV<kLbtb#h@I(XDr4Nn<s;Ai7TIA`2MYHJ;-t(!@0 zZNva$3$`@2VS8gcjxctSTDlu^j9MIH?8PgL2eHsNNGj?ORvU*&MIFH<#!*sFkC1vg zfoqK?alP>rZZ=NhcH=beGM>fzjOXx>@jM<i&fsz51w3uMh%Xo~;~T~+tfTQd>t?*c zdKquBSmQ0$-}s0n8K1FK<1048_?l%J->_WcTQ=VKjujf;vtr{1HpBRll^H*=#m28} zneiK2Vf?|?80Xk6#-D7H@fW+p_?zuC&a=HXV6WOF_Lfa%@7ol1)@HCzY=P`sn}hvi z3ufnREjZdjxMXX|ZMN1t&=$&rY+*du)`o}L+Imi(&XJEFW1cF_Cr>`sJU8k_$}P_P zcH<~K$l^)y+3+~*Vg1cmAeVgd1T%LRoMnmPmH>pXUs)2Blb{XzfekPf>1I~J2AYcW z0XC6cW_mGe@ftSBRHW;14jU|dA+`n<u_5NYf}f~m@e{c=9%QL<Nhnp1w;$&D(I%ax zxKue;T|e67qnKNZe>=?j)o1auf8zI;TdR-Q@_7rmYjnQU0=A9Lm-W&4iavT&<b&Y; zm1jfjH`uO&P}}vMUvdrw#?qKLmeAO6_istFO{PKwwlHYwqp%~NJ9g&gOO9Q+`Lg5g z+<e7Ro13pX?#a#99J_P#gA~Uef~w<Qf|_G5LEUj5LBnxBL7U?Nf_BG)1Opro5e#(f zBiPLGFu@?leuB*%2M9VGtetgCCEd2*yOHML?hcK+J2dXlxVyW%H8k$-?(TNb#@*fJ z;O-7ReD~f-CNG(nm&sHmRV$V3O8rr5@3oiwmJ7shd?@H<dpr`XT~3+WA`qZQHM#&o z7(WIH&WTs5wh6=(V1qXVXm;V1tIYy&_B=#W09@@eiI!)szxT*RmjHr!<WSDeI7MqC zK&(C0(IwEXpMjp*c92E@a`YkK!Jb#1an>PNKM@2Oz=zL(a<=atrf)Yi2Jy<NOT4^v zP2J-gy#x^B(WSrwx&PL$1jz<CM7ID2c{a(Hx2_R-Acoo@Q1LI3WgI)??SFy51HkbK zQ98yQlDCP5#37(~_{ll@uc3R4he{xn@N$r4T)gG%OF^&!7SRmQ2u|Lj_N^eR08+dy zBpEkvY5PJDPe1|Q7V5bD+YiRMYtkOtp>BXFk1q-5>NQKx7=Aa>xWk(i<I**55AV<= z#1Q8P5$B>q^fu>E4n&Rpn<(SfHAl~Nv>!muK9hoz3Co`#AprT<!Gw|76Agm2WN1%6 z@kjwHl9{g<qChAnUtjrH0WT7VFSDogkRMJbIzP@2U;{Pt!6<{$Eg#Jvzvi#9y!eIL zK_Is7?l1U1EFO`fV>@f%FJH!@{yQie$NwDT@n3OlKK}*BHh|BbA=&2Kka1y4y&RwX z6DIGt$im;r?eoCAh;{<K5w;z6v6OxC*e+6dZ#~Rh_wYxa{U)<fh2}%MD+Y2Fb{T|~ zB^fOKjbmG$QJHi}#B~h1@J9a!$980jPXXgYMLKkQGOlSsuB?(oT;3^T?q!?Hxr`(% zTqCE-3Nf1MOXO3O7mT$#TntnGiDR4M{uhqz!d*4%9~@hSvpM%DDdVqwcfrLa8*v;% z?LpYHY1>%j0r5PI=`&OBf8p3(iZf<ijNq7h%h}#b1(-3aOvr2Tr&RDl_A}&4!$B_O zcW4wxhT7;9C;4UJ32;oqi$*f4de2lUnE@X^ozH%_F{86}%@0@%m*_et-b^^J&hyE0 z^ruSca&q?}6*vb_v7?SPbvUoPngoCvYQL{F3C}5}DaNf}Q64{ItinSamL_I6l(BGO zroo$VgHrS4dU=(<C8x}!##GhMVNWeJ=>D2iG*1o%^PbL_3kt>xLvu2ZBOV-*t)RcV z?n94YQk~^cvN%3LNFgGHmd8vnEcC~w7cPOG3a=gRY94c7oldG6rBQx4`}tCgihfga zONOo;CUOrsR@A|tUjfI|%&@3Bn#G$oC#!~Q*qSyeA;74^SI4H_xPO1)1*ddfRe8xu zQ>B6m3&vA)YFR5Tc(i6qeR8fQx@2JPlStW2VAVjQw3S;-pxSI+Kmd(fTnl|W{YY|S zq6o=O>g02KPK!SFyy*B5TD~0M@JiFB1#@0S-IkQRq+xkEl5}6*V$i{f&_r!F6!!<a zaAQl5FzIIhLQy;g=CTlZbVzDIiMtK9!p)wt=);*q&SM|rOo8hpCZmzC3g~#sgdRD^ zDZa+z7}Sf6-dx*+O@S){E-728#ceP3JyiH`Sy2E}@}As1Nh!Yft7T(Wpvg;{1zqK4 zMAzF+R=FdM?4#k%%VxjH=wjb|o`a9-H=i*3>ALhV>XPf^o$>ZK=R$4=h5b4Om1<)0 zG73@M{K-CLpOvGvr1k^_L?QDsLq3$mE4-5W(=K9D@(yb}mZ~YwyhwU};hz8C*obGh zN=q_S{=u=C|Iq~h#Icc*9K({x{tL$@?%+a4bNRC&-9DG10}+bFpu`$~D`th`{`8An z(f`J=A^jW2Mx2B$`nMA`j+p#WRi~q^@1#(b+N&h7j~W;JekxwUx`)-ipfKj|uTZy6 z^afEL>xfz8N~$XtD37ERL$@-v9BYOzx56E;1~anhPb{Y+DWlJd>b!B6fGOvL_C>s@ zd;R`&!!o+yZlDm=;;Ui5=i<P}r7-W{$(%az(hSC}W;AGaS03K0h@7-If|>~n2MiuX zc*pXF(Vf!+f;XNQhCr48Jccah_fP`GAJmbA?U6mIE9DzjcW#ewtO>lZ*|OQ-Q)E-W z4-+u|z>Y+05A2a$Dc&%<b9q2^#CO2x%Ibm-4O{Kt+;F?|d4PAsbwF>*Y=YU5+5K)w zaQnkE(!Ra1$5$&E-G{;TRoW3nF3!pzqXV;=l*c~(te1cbd?~?)lPJVKdHoAVe8#rv z4Zpj<^B3<}Z$R{L$POM5(w3~^Hiv>RXl;0C+x5ob2?F>f=eye<QAY}IY#@YN+?YKF z5Q<-vA3ldz4?$0`3#BXEo6Q^kS@Vhe=KczP4|gYHn4_;H)-K47bPHiiunV;-!kfbz z@mcqY|K|M)d=F|TWEin8CYCUWkW>IcK+qS(H~fwD4enXviR<R}3U&{3CuNwSuO?P6 zNRPA|p<B=w)i>ge{SDz+=ZWv;^$KbaaVKV&urDW8AV`2TCrE(8@2j6AKa`*72hK<E z8{HfJv)2>UP0W@2Ue1o*@ZpZ$NcYYXQupZ%;a{+S=6}lDJ>`r~7F*7L%VJ~uf13Y4 zDQqUnW43Eja2vNY5P1=6qNtsOkna9<ybeK;WG<%btTciSN%N&P*!7vsetuLM&7Qan zGLyt1yC8d8yC^r>IU$@$S$9;NznsbF>UHQHf6aNb*w^e{4^IvTo~~;0*4h?jU5DaL z|7y1AY@8g3cP@1!-d`8LE_D8GA^7(G`Hq8me7UTd`;S4ZhU)A{pQZ|82Iq7$n2CdF zoAmb?5kzO-DKB$-^8Szj$pNzTkaE7os<5wskECBnds6n1`s6oz1Ry3nRCBG^Q0=Pk z;%mVqYGrcWS2y8YxdaVDH(aaq63KLcTcYQFW3FuP?I0=9>^%H0s5s|H?({R!664d+ zl8nx@5{F02fA+xeOE5`PaPY%NCEX8Y#)6E;$P$jU!_#8FH12tGhs5rUX{2922a3j; zmYGWG;d3*s?=us>0$MQu>>w~5Tvk1dPa}gqDRmE0{I=B=p((5y_PBnyNX)5$ht)<r z77F$zD<$0ae!~8}i(!uG7q;|8Q(-qW+>TuRK)e~+F|bP4^}Z_xy@z+{Xpqr#UjyPh z89Ga=C;QJpG(ISia-ebk`eOG9#)RPX_C`e>DbCE>agP2aOn2jgt=deK0&xMNwT69} zI=eVS?&LlAZ7Al5RJiyZiM~`3Y_H)@&El1Oyn;NttV18ZwRz(x{(D)aDW8^{zW6)= z=K91p1fRd@6L~gmo*N5Wp(&V2!#FYsB_-#kvWtT8RBxb*gQk;{kAvLUI0>14VSx)S z=QL}5otj1$H_JzHR`H<bKiN1Boi@Jl=d>dtvgFwg;oD$w>{mac56gbJEL3$DZ~@ww z$v!$()Yi`J(l0cKjQ~OFWscUSNIgODg6j=Zh1v$@{^Ma_dGLs3sT4AkOwPgR_@0<; zvG=BzGEdlgh1kLT-ntHK%DCV9)EMC`;>vckud=!KJt~+YgR>6ou2Nmk1r=|wH2$~* z#L3R11{7m)6;_!h_8h8Idpu)8kvtj}Z$`A3A`+m9@oP)qLFV=+%_;!K1mqN^7$4Lp zUtIF`V~)apLJu}V9g{3ztzEgy;|-S{`2H@@7`i~m`)a3MbmPYx^$z={*6d)<1eXI( z^{BY#;qUO*I~I{Ia^D5VVSTME=uTBL*H~ya`0u}%x@W(w<o=<s!T*QC2J@+?U%t$x zJ8=I?_|FCX^KR#8#$aIUZ0*Qk=4fDJW8lc(%EItd8XN-c3*hs7{x3tQ{%=DBjhrp) zYz1u%tUa78oc;}M>(ub_o?l4%n>{Xb5J!lDsvCFZi-nSKg+fN0ILv|qjw15oJHki| zBV!sg3o4vM-6DOP=GH1kQ+Uj1x%!NdqA~huv%}IxTXXZ;BE1z|Ra1@6eVvV4%h}`l z7DIw$>W>$3j%WKz;G^4xM~>4JyxseC($bglc-%L4y3ho7zQCI8C?p6!)Lxe-%h<jp zp`)G*nD;6KzY=#ls=MU;Hy?tJuX>0EsGAQULSd}v7MEB24G)T6c9gpuw^#IC=-+o+ zT%P3x4SmEzE>A)(sqV6cw$zSt(7B7IyN|BA=>2l1p}60EhUF}F5*}X}>G&QE$vb~Y zgyc|za*nT@bUuVa^iHm7eBZPHEZ3L5Z{lB;pssR=#|LYa-#7xE*nClY?XLBRg}Uc< z9tC*=1&*$^%K!d7+Wh<NT0C=yXgeDK8K3z@6MPr?4?^e?Ll;uAH2rg!UdS)KfUnR& zwTd^+Hph%IA+XL^1c~0jX$DAQ*4^`8XpYIq+>!GJ$`WE@SfaEyW1_y;G*^{&t3<Kf zJ+%YZ>dffTMT<cN_{|}<chHU}$&`C!yR#}|yk<|rXYg%@6t%kk+SyG;6Ep72C{{Xi z$W4%>r=YM!so8LHYNc!UM#Yv2$d5&l)+)M8q)6=0y7gzF!VY^UYLu9&sLNWT?>d)6 zX+^$KZiQzeHmnQNGvvcMNMWLiu#hxT-$>QF`8sH{vEhd_X>gUG!`1l!rZ%9}6YNun z&4Fu-6UGjHl!g)Gh%9y7&3sMt`Js%y8J8Uqk)?}bjwZTzG?_7?6KV~hm7GbHLJ>Pg z^o5*QJeojkE*Va*P4K!#Jaj<xO`<5{175&vvO!T>NZ==DuDK9G6q^DCzfQSuLJrqf zQ8GCuq9q7*&n9Fo@}x_mvh%m|U=FT|{k})2$#dJFZFI{ZiPxD3>GfIipfaZkk9GnK zj49kRTGWzdiMA7M#GR(I$Vg-*d(=u66-VY^vN34Ziqt@2|GNZLhG#Y9Np?}zgljw4 zNeFv89f5*?%%p2MeX^sCqFTvlG!F$r(88Cph^FPN09dr*!LY=32Ln#2#^jBPzOcfL z-91g!Zd3cLx;VjA)7kYkg6QvWinPNuh<0@a(gm&=_|jDe)qlz(2G06-%{kK=6W+7p zu)UR_vRMUf>|Bbj$udCanG|rmx*7RA&5Uli=>8#<o5InTU|C`_z!cPVn?KTr@!Cq3 zE%C6dY<93pU6ei|Jj1rC<Bh14Hgan(tYKpZ$LS}*C&}Z?Jhu!+@%BA+RkmT#lC!iE zhAkB&BhB{Z9=PBWaweWDxY5P#n`(MI6&A(Z8-X&jXXCcJn0D4`?y-L?LTgyie~VfX zjjYgrjn7P7$G0*IoU%O8V@+=+@2#>t<4;`qT@XnCF`yh4C09)rdMNM8%CRPSF*ewx z1nw~x9CaNn(on@kPI>mXNytf-ao;-13U_g_#^GiPTDUv1!I;<3H%)&;<g8_yK7n)F z6qX0+e#}_9cvu-0*}7#qI5miqU8@zo<<%seY;NChV3VfRJ(NvoMqs3kH?UrN#&QR> zb%22^c|2B8dbD<`x9TY|ykja}nlda=39RgAsbXFl%!HzOvyjuY#fY|!Zuyvp`#>*d z-BSG6o}=^ujdIW$<XniVDs5RZWb(ZIpAv_ZpjZ2DGT5ZWp?Q?4a<V~_vOm|&?2iY^ zundN=IZ=(YGG@({#d#zXtjg(B?`xMhIm)P~p<+pLReII6#!TGr_5JZh_2cpT^}U8m z_C;hgWfk)kA8IrHvqTkd^{ep}E?!XxQFo1%1ExLsw09J8IsA27u8=hClf{#XGUt^N zb)Hl9v5+(&QoZX7?-6n%^KE4BWl3;NV5R8Qb@pHz7;V#83vny6+F$tECVRmnzw%b~ zv2f${>2_;djd&X5;qYC}w&jze*wi&qim$GMMvMcEE66ov7EYa)jYsa6FEPb56N+aP z;6tc{L!IlnwJto{l{9pC`#q=Vji#Fe@5%Pp8$7UeG9G+fE$QH=CTsW3a5ZZN6jm&5 ze$+4&w5Kd<t;7Q{CnBu_zgh4!P-ao30u9s&Rv<8QDk^rG6!pg1bQDWU1=;&$t<<Wt zSAQ@cuZ7_!0?S~d@W;;!Al6^Cl4kZTgUerv=!<2^S0084o-~S_b75bQvf%ATQx~MQ z&h=ZZp*b!k$T+9*&Z1k=l__Ft?F#jy&rX$fH`DPw&ppqZ0aJ%$XAkZqO{{UDa|b5E zwtjGR5Z!09NH=NYd05ry)r)hJbF_;KTvapiPHxN^IM0=N%Bf_4J70Div5!BbtkInf zq<FFjp%W@v&1(~7mYpo(CJYn-T*6^J4Y)buU=*d;FmX<-dZbyHeK=kfS^DUW3G^EQ zBA0SvDf@07b4c|4P9tqtR>{|M8u9Z$d>3(Ql&Z>@?@9~r^x3pHiun?Xb}3!fE{_bO z>l`W+AW&mttHs(KaS50CpA6@!Q4AV25k=b76#_yZg+gRzj*NVlL%w8ep7sQ)49FfM zibgT6J(BCug~ElUvBTiCH5=LXn@WCy!V@*bKbKMcPTNq5*PG__<0LTeo7ENOa0&MK z?AJ2{BFNQ4rhxR;(H?m15SB%)R@+JS7JD1B$`;3s^t#Q#xK7-=5csULmBF;MEW9DG z-DV?-AqX|Mo-sXr)nn-4;G2Ts<A4&}P1`4_v1sC!#<O_(rx@a&<y+CjrA|j!H@eJc z@pueE^g~qNdC?1);8B_I$y%{kxQd^O<_$ip-Ixu>nFGT7ZAB=`C>wFTws$UMmrui0 zrx;%7x*K6teO4UcjCKUv50-o~8Ge0i6oBz78*)BVwJ1ztr(_^{JaIn6<x_7+dwg|B z^eb(|#Z2^ku>ehHil<RbbKSzpj`g@&P#0zBNJ)p4yagvEXZ^W?-x$6e4D#t0Isol| zXA}@_HLy^EoAX^lzeu1TVMF^NT5JAdi)M^olTM!VW5E(`Aq>Gcy?kF$C3K@f;enxc zt4PoG>1%dCFR4X6(A3HxxH-GA`RqNbpnl|j*s4gJsn-jS6vzwsJBH;F$WyS7HFzWw z7U8T~32K#CHjX;i!aViV-tz3Irf5B+;Py&@fOQ`7f=kc|SHgl+(pf&kA4mibo(ioS zVxohZ961gUCO4$-S`@@_+M7-re3`AMAD_;<n@%g5Hzh>?0YGyzzAPY&)__5saZ26M zP~G4W_2?D#o(=A{J*n(cvm2d(VVm3}RVG`txp6CdD4c7e#a*K60nAzg21eu<MxdUd zrd!+%bhTI3ypX1!Mf^Qk@F0Hcocc>sW6^WJeb)S5u}NM*zwzZ9++zK%!v-ZTmQEF# zhn84AdNC+B7Hrc-9c`DOeu8PbGmv%WDbXRV%8Arg#Lsl2b+7jD>WeMUFkL#b3+e2- zSRpXV9;j0~!ESbQWi9l}AM#mL-@ha{CV|?{;$xmZv4ro~Crqv)^$?_<R_6i6!cl6* zmmT*~*1I+vr2${`jIJ?xfZ)r{;gcL0Lvlr4+&;=bDB?t71A{ou4h3_7Hhw->MB#Pr z@RM93Nv|AipRaZ_#whz+np)ztg7#w27-DYy-;(lQzO*+F`s#5UoohkQDj&j}<y$Wx zx4d#FHM5Nx7z{`%9T$ZwN(`(vpr}9nymC;u5MOI4B`YB1oAAUL%IIltFM+a2+-#8; zy%b$)l4e{t)PU$m!P9cz@SMlYS0i?(X4MJS2dwI8U@FiL;9uU6-;u!3Gi6R0k2pc5 zU~nL%ZFJzWY<qz3-aj5QYLT@s{5)KlmFo44g|peIDWNV)KTWEh(k*_~c5sV8u|4d# zEoGj6a?P2rY-61J1)6+?&OLG3K(*UewM$LCU)Kctl|JEube&3foot|0{9s!*E#}o2 z`Qq^P`Kv}0R1tbk-1$@GS>IP6F5=i%sVA&`p5UQ<I$o;FU9M;T?3B4D5;7k_-)Kx( z{xkoNX9N0(o<pSXO@?^ee0aMaP%yjbRK0!ffvO%VVhUYy2mK<?DEw2_*9Hmep+kUu z5^?@Npkf*KeIE>ri6U*TAd1qwkjAaPgusq;S=$G`qQ4wJ-cSzK=Q_E>kHJ3!PR~H{ z<9f49x2wu)Q)9f}WkZSA4WxIxBaN;4lHJD4qWsdCub(*k!<Brh7Rr>Fy#o5r*v=4B zYybFuW5*=^UG-!Q2%d#!#)-@d-5uzz9_kYbF7S~~p*P^3yzZE3T<4edzM$s*0>2rf zXJT@e$7oj{=$BQpNq)c)dX3N(Y=?u$P-us6o#VMIPW@QBZCAX(7s)WB$M3yzpOV9i z?>F<I(QzlUD$UTQ%bj)k*U8i3!=t0IQD4K4VZpd4U-zV^kR(S7*1H%(yR?Z&2cZEY zPzE#GQOAAMWrqsX`#A0mbD6Q?U;xfQ%V@**L@?DQF5EelAdq`4usuRJ8&q=KOL%=3 zbKILV9VAdxC{R$~7uIrx%YD(pd+(+AhF|wLc4v@^9DN}w1n9W_l+}pao#hJpERS1? zDrsoFUeV<^(C*{2q-eRn7kh4!uk}0Cvh~JcVM&&aF;X04ehYN?dFeQ%)CoW9tn^0~ z(HT&r;nV8<TUU&<t*+OZyU2vX2lmB$0qt<g8?0yd?OEPPu}(@fwKtMh6+0M{=Cs3b z|LB$;>$L+ofj!Ka0&I;EtkGt9Jr#+E_tT9Un<{V+w%}r;7Z@4mbtab=p3vGeDYal| zRI=SkjWx|G5`9Q}#sDsy@enr$eTBT%C$kG`+7(WKa3=}PAPbb2BzTbKx5a#5Rvd2Q z1EVm3>mnOaBn26#MW$4kpis#tXEBSqjwl}|G6N+?N37_%CgR>5%b?qVa4{L!Kc{v) zLeHFu5$%ffm>}5B2(~xw0_I9aY|J1tjtJ{N7pzd?$``(rwXF#y#C#bJZ&M>;SmBMY z5FM}xOv3H<WCnx=dh{Xjm8Lqtyxh%02U;%`;pdUMsWg4{oo@lfJ?e87V7HQW#5!^0 zR%x0^x)>*pE@GW0r<$@V$<&*U3*Ivexj!*(;A;VMg&0NkSPh@S-w8+U$+cF^#auz0 zI*rAhZyGV3-T~`W6CFt{AdS`9rE1U$a)<egX458e^Ah#3Q#HI(YA*vWEFwtfmF#yy zTEDp0`RMF+N7T*haWYlsaX=Aj-+poAkfLw$tUWEwg34j8Cr#Of0OA7urjgvzhyPlW zc;fE2sud1ShJwvUCCqC6KnJzXNH&V;;gaLk0IRmz=&5I`_S!C3Ty05$;H|OUi?ZX# zL`TYI<Bsld#Dr_}Hb3u|4dosR$~}a(Yq_q?i(YkLN_7V=>K;McC4Xh?Yn>Q@z7$`m zst4t}MA|Qs+m{(A(S8+2)-6Rnb~#OdNzO?c6+$G64>T8!kM7b}u5zzmC;Xo+v<uo| z6gQ@nHipVB1j}C`7JTAQ`0ptyGWx8fNq1Ge7yARZi60Ph{ND)w@ism)T;!4=efcs) z`hP~7{;ThS>A&|qC_5V1I$0Yy+c|z05ffx){<jYzNqI#PRS=CY>xYmKD#<r(du-(K zUK9*S2oYl905OqV_njWgVB%<UmU-h`+LWAY*!gm*3hyfohn6>jF)s=vIv*sxNiHAH zi*uH_jfO|iJ?<A_^=Kl0W3+RLIw=-ok|R;V3SU+5%KFN08t`>Erfj_@Bo)$?Vj59( zIA$(DXjB84U?wso$IG;Z3qgP58CNL{6QBu&mZNe}e&*SQgsYgF?3(5$oQsZT$(6j! zc(hT*O*1!@+jzn*hKncJN;UGVvK(hD*fxdsHf~3zcnJc>@u8S_T9cK|$f2a(fV0A~ zKt@h$W>LjMmWw>*apD^S{d6kBI2<DEFyt6>rnZJk#kZCB5b4EpwK*QqEKdyoYQIDD z&?GnxJ7t%l^@D7%Fy%IPz4LNw4UM9+@Y7V)FrJ!ao@iS%8H9}wvtM7UV~_qYg@Ia0 z91wI+=2~$E*}|~LrS`CH;GEzfwNp~f)b(3?>=P)$;aadTux*VbcM*~y4wQ}~Rh!Sx z;fn;O&**Hdy`2rcg`_QDJ<h|D@g$gwy=7jP4?#wRIWNme^Rw9gn}46m?>@b~V(G|$ zV)u5Vj9^>UvfAb)FhjxI!=JDKkvFmnoMsv%b-ldouF5s7t_Br1>f!;!gW-pL|0;s| zK1!?T&%j#-cMyVz^hAxVlBNm<U`eHe9pp&c;QB4#G?VOQEI{nBD(j*lbjTw`5|YTg zLLMo*aE1j3DhxJF7m?%^#$P5UM4x<fCy)3RC5k{u!~juN1Q}5w-xM*vbU-+=bU`@t zC^V!Q)Az4j?^jmv8#<C3d_zY>=x2hg8}O{^7>O}?ti&89@@{=i-+|1xU?t@_!KOrr z5~@$oP|3`c7s1A>$7>j*L+$y|?TaCC^PXFGSf%VG2XyYx5G<!OUJ(%DJ!tZaz`r^v zsGnvSHiLcnatQJNPboP6qZDcy&Pq$@8;=_Gw9h(7zoEsDAPla4)tQ8T9sBXg<UuEH zk3YkbAt88ZKyD^`lq83c5Dq4%JC1F$fhm$D&MT5MmsadYTK$ecM~)xQYQybwS7X&A z@NV9nzHo=fCz+Z{UA;8h<(1=f!FQNd;^p$b>Zj`s{R_&ku>jwVYkOd0d>78^e7ZJf zg{Xnpl)J&elyv-oMVgW4k9Fb-R)d47q-hzoj54Tzk^0x;rctu#Fejyc{0>ncA6y95 zg$d_4v3M%JNo&lG5!@pSo{{^n9l_ubECSOf&OTDO7-sK)odmccYyzVvw7wE-{=O>> z9)h96R9U9i4tPELpEG*Sx$yFgukr8{)|^y7(^hgMYRr+<@ujdyCp4K^Oj%>FR-al; zSqZh5&Tz-SD~_b*k<A%tlAE|&NQslA4O=4v7AEW`8ySt5(<CELC)OGp31*;_NJsh& zHm(*Qq1E5Yh;{T`DdXn*5<sucq{ZjBq+{zpEq~&k&P76;cFgn!!K(ALylQg5l=c`a za=aO7a#tk)EliWDh9`>69I*y8A(H*<JHZ;n?qo``30P53JBt6jwY^M#J<na_EhZCB zFTf^^!^>-hJcjmR%!?9b(G;69kxRWEI|(4Wfk?nkFSi11z7REWi|h|@Km$-7L>wgq zj4kJ86p5<lI{G19a+$Lw<YY`Ck`pI{@W+R!9MVlB3Fb?IE@TIRN<P4k*Fk1~;oqJY zWk4rU!8!by`9h{rJNYZzau2_jB}Xr1XZ?n7x~KYZdT)sVsz95k@bH>lNpw9U&I$YA z9V*_cUE01S?5-aBX#6c>_uw6k;6r=effjpR%Fb+8`F5UUoP`7nx6#TmA7kf+q0`M0 z_-IqOfC+3P#mBZwr<V59^_d^E1b|oJjT!w`8iHeZ$Xx|LH+iCqhyjv|f(u9fY~0gL zWWbg=y}|Bq#^IJV^m8+$(6xj<&$WId&t3#1_bt_?864ybII@%MTpyLthOb^}>!Ned z=A@3n)@1JA!AP>t9OyzG!*p)YdwX$E5V%g4dMyJIVlYoxz~pSibF)HPXWd_974KkN zM<);%kJqyBTt1WD@)Wx!F&6Yw*$i1GFlA{Ab)*V!T@3qn@VJdLj`Vpa|6`Z*Ae&A; z>^|5nu>G>ot%U~f_WtnTVQBqc7q_cwm!~y%*P|nMxBYFuGqf^X8ZHI9no--tJ#Gi5 zt7P|eT-VS&Z3jJ=knt^cM;uPT^a;989$VMs3A=9!Ti3`vYX=jq+xQ8+uLgVbPX>EO z(Jlv|!X4MH{E5z&qSn&XOHCAs@F40bI(!R+2p08sC{D8d^?-H{xwI72;Jt{1?`e^4 zPOt|?W7f!tZv@;2d4|gu`cqb=6o}s1PcmyaMpDG%9Z@(%V~np7H#3$Oi{kDb7CY7b zD72U&oC0emaZ1k~Z|rL`{AJ}J!vP${t58-9_59>p-cZ?2;7<S-uhMLf9%BXd6<#*? z0`m|(*az({zy~g}G3v`iBzjg>6(^6WK2xR+t!Z`|3tfEXy%{~nnu2bmL@>OI6w$m- zN1ql`t~YcC)yhu-?1ZuP%2Iw_C7pJaXg~7pw_Q>#`N)@TqGc7OD>)~h$jxY!^NE_3 zeV}zC>^n9mj~;JlB^QsGz-}m!uyoQarnGu$ce{%|S|!rErR28{onQyg690U=F40=K zpXJro+^-dTL|=^!a9w|C%V2QmL2NCZk*hrk?wMNW1Z61s5Ux8TKhFN8>OJ0*My`Va zaL2ZwYzm%GQ5t`3=3q4?#-SIsP)`sQ{q5v{ksOSvKan5*O$$SXb-BTQ`e#;<)bDXa z4ETly`&mYc2;kJ56pVMEl>+>5Q0<uJczgt-UfXtjM4dLhU}pz9og)>y1V{6*31E1C zS<DGzTDu&=_l0Qa=thjar<>&2Gs7J14bACLhmyR)I6*s3ON4FXSro#RNJN3PX;%;J zFqf)iF;K?_W2u4Hhhbbmt|OFR{OHy;VW0Yd#=L<VpH21fvkzXqbEYunby9y-e`mj1 zX7GjuMP2itCk#UUx+{jXg}MuQ$+t;E1bDYB|H`__Di55bNizIurCqz~+aQP}S+%+! zxf5a_I_GRRR_(ynz#s|*6-n3-Sq<q~F~<rj%(zOD6+@{dN$TGP8^yZg>3vznx{mQE zYA&n`%hkK8kjg)HJ-@0vgPn0;)Fv+3J7=Ok<Jm4Q6y9<r*QrV#I?<ZZN%qaR)MbmZ zz4gu0s85l<V=C1cpMQT3E>o+^7JfljsxjqDxr0<%s>>FCX)HU{n4)-ZEyGn`isk== zF)hMM$ftV3pK3{5vbmt11{HeAbSAsd9rMU+jC;=96SUO2>Rf)NYVV@(H6MDxRh;s+ zSLfc7Eb>_l>hyR@W3<p5*5ui!^^sZI(^uEA>I@FLS_xO(qp&Y%>e2faZS{J-NYw<B zoa!gt+mDH@a>$w|T3Kv0{$bFXAzcE6TK9oFqDGG)$c#*I5+8RH0MVx;2&*Lobd$bz zkhWi`VfPD|04_(fgyQ(}HN^&au~D1q)mn{n%oE>xY1|_49b>R!-69l#YIt$4{YH)w znelzQTtGeT1gQQ~N0~QC@`0`Wz^4}0M9VY<?VH?LN<=DM5A_w|80z;MUy~Z%Vz{x8 zM57x66Dj`u%-EQN=0k{b(I%`va)AnD2Vs<LVJiwX)?$cEG|>?PAkuznCbCVjz|<%X zn;m5$46=;jIxNpJy>LeqpMGk6mFz!Rdrg!|jiv&wGoI}h@j<(5l#WD8TYP}&BO)yx zR%fukkpGzO)Ot(Q;(#w-#*zO!D~0BNYP$d1J~{7%(pDCK6!4xL@ASH)kDw)@CRwgE z5LWJ|C!t23`QjQSsE#hI5MD=7j8#B2$SRG(#zZWOiaW?UM<6R>SL`NxIg&uJ@i@NT zo}$xAyDbpYz4iK`_s)2j4P-Gp;BlHvYil3+@V!#_a#Uc<Lmb>$T9=Y}X7Ugo(K)K? z^wp@Qo${sC{V_P9b7T`m-VV6Dc7}g_R}I)i<=VuQzl^{n48<c1u8mn9BDp~A$(~-8 z#AG$g39g-5J|uY(s?`hMrlELE_bI5eV|&PgU9G(o4JOn^doBR@qV!DBKiEA)xWB|C zypQ@iDO|Nvo*~9P%VRE_F<`!CWRc9^X)g!)lsh;JA_}I#dOFCt?1T@hVBRrdg$%M` z-Wla6dT5vMYA*qmIvj$okS<*7W86zoU#?9_0H_WG*J$+FB>hT-?w0h~`6AOowR8hY zG{_>bz$#JgNWdz9T@~aI(2Op~qhRWV?2KeBj@%!Sn=r`JPL$$?ETe|(j5_h04y%%# zdwsz@x#)q2DRanI#^%m|zqROL7e&!V6ysBV%P-;)uiu4|_Npj+?aSSDw)^f;KM8g8 z)E+9IC$<kB6e!3|Sb0m#O-N16FEiwQ?b|vje#EPCNLsezksgXerdV>yse4$E_1z^k z6c5y2@}!=}M0lE-cMFH?kvz;IcbLXq(yzh&u<#6l%%M=oul0Ro(IYy#(<Qs&R+2lX z@|KD_ryS(LokNZSKlkjMH8q`9ZqznucETxp*x>9N9qqwgLe8lsUXIT<H3O`4@CS5o zd%Eze9o{<AE<Stb$<@RKUkP2i`cF#wB13VyNP!0EmxrWTbx#7oz4M}jxb+Hend54; z8(o6{)Gl4>djfhQ3^UJ)_<Hlt%vlVW$TX~7vygvxE1Z4(C0z0Vs<27z5*=OYM;YF2 zA`mIz`cVLS)E-S_ZTbKg5_N_E8WH;<Ks8Fw0?9H_fR#wC0>o1IHaD_1LjbObeF1<y zOuqrp9I9Udutn*aAZZnaSj+V0*~+`s3W{Gp*yVXXCwW0YRu0>iLtZBfXcx7Q0bHQ> z&?BE=^!Sjp>Opvk)T%+eiqz^sK#BaM3;0dq{sSUJ<SG|HfYQ@P;w}P;IeDwCZ5?v{ zXpIo)$w3=e;{KbGEAH&8EW%HhYUb=KGi~Pbk(oPn`UWYeH-7~qs5kpO#_cD{+f{zM z1mU9tG34?QoNITY{X{R9Ou~!lr*?P=P5p-P_XmiOq_jY+guIBTl|@Rb!^A?=V}F0s zk%b#N&qZvpH1h1OaeW1N45BbCJ}91=93CB!osg0i{{t5|-8dV66W$RYKH?#oq&v%K z{u?QokBY^|Rc<vf?6^V6$*DoK5!b)uurO@M6%faD3~aDb3?g#IW22*S@fKS>tGr_> z17atLh84_~6vvb&HA14(7XtW=_6k3jZEW$N5;HUTVRn?5bUv5#P+PemGvod6A-Tkf z-gthO{KN$eL5_Ot<2BM&W{SchQ_Z3vQcB>lQc<XTU}$6}v`}y93J`U$$ZTR#j*xDX zRahUppg$pCn@JaPag{9Hpx4|t{DYVk^UGO07cyR%1rQsx9s=|Cw6)^mC%sIGa-*?w zeZGvOnG~I!Oq{puJ1d)4q<f?opk_{GSJWynS+$6zjISZ;fy0VGELFrrBm#onf|ji; zG?kBw%}G%<feXpdB)GD19GVMT!|1F{sUSQ;#NXyvFccwOR@|Jp{+X5d$_9e13YiqW zuUr9bzaHtEF}j@=F(-?Xc(K_FQV5FSD;Nnfs}e56T8})1lDOj61jp04k>q)s=UW=- zNmA4sWBOsO%%%4F{Mu4CQv;6yeMMe7NnZsE4}+18vr!TTA!SpGm5xngUQv@y8Y$@r z&j@oVOhrwN9Xe^c^5JsY;<j;`F&g?w8ewx4o_8z|yotl)ZT$OzN}^)@gYU?VG;GIR zxf{+5Q`h(W(2lq8-r4x|+1m~><vJPCCgbBOO-2s+R6ltENmDvchKn_xg<-8^HAUU; zdjryTJ7X!cjows=Q)H0i56P-~KWnhy)e_a1Yuw~Sv73_p!hu{EO4{nXLwj_@<n#JB zH@BUzL6xT8^tz@q^itJCkaxsHf=Y$+O5q1YCu?bDEEdAfti_`B`n6BfEQxfB7eqb> z>YeC8SIC*-OE6ig`B%CP!V$)!HK5a)+QNgNK6{neOVRzIYWi9N0p_X+`OG)flubrm zq7n{GNrv=OitY#1*I#(TFw!tI!Ni#xO@bzsYfty39+q+!+qMZK$PsUQNzAa)9md2? z9VS2zr$9bY<K%-wblFK78nh1VGUaiG?@nj4oJobzOJl<@4L9LbHFLEn)L6vi5>-fI zSr~GD6=O)#y)@(L?oQHkGU6yRO<Fo?0rQA6zM{!0$;xOLUUaaongQmC*U$iEds_I$ zCTJ%N_uHZ~p*X*;CAF{oC63kh{7oj2m6<$CG@7*I)Z^xIflt*g(v5;U!z^<ZCS>(J zI_RqMvCF-V&=hMt90h?L#9T5wb#o&Su&@&Muwy}gD<$#Sr?ld9_vjvym5mQ3t}!g$ zNOzJ43b6T@YGOyREwwaWH=}E^vVMvjPCXvvm<=jiCrH6yswlRkD6KWs#_{Rgu`=8$ z7Fd#tSULyf{lwc3%lCx+USB#7Gs;?`cn1RDYDAR+$pnvF37CRyNr~0QZly72oz^^W z_d+2Ond-;2bTu27c`T`1lns2N<7(`TG^?X&OK2Aw89xhQLp+08-1GA4;awzwkvByg zN_*+F=y_Nt{iBlb>G3gc=st5@6;UQd6H_z=cbgrC$AR;`@j*%7`RLsh0~>IVOmErO zGW57>3hmQcXhUW_U>&JN&W+3V(d&KM*tjuQILi{sItyUwrc`%z6b;ICWz={a_~ipw zAq`9t2M|IuiWztB$PArxp+*bPy&|N`$N~6gjwXr9soN}tOA+wt!PGRoj$)GjDTDc@ zyJ@*eDyhgj9-@hr`p5kp^^SJ_d6LceM{4C)*bW1NB{hZ7(#A~hsK*Xv*Qqk;NovY7 zA>1S^O;gsMsJlA#wK82Y7xHxtG|4dS(`JWLQw5Od@X-<~{Y8oL-@ikdv7usnp6&)m z5OV&y!X0>&Jd>WxTeh9}VG+6K6aQ_o@N#Xd)Gof#F22;x-C?8BGR~frjpW;11#+B_ zM>^(O<znTYq|b}`NWu#oqtqFV^cjtmGKLhz8d}H+xd5ft?6iu!!^YrsQEA!Wul{sP zxZG$*bgem`lj2APpS_AMAH{x6d$a|v`qm2)xndb+#RutlDk^Ig?Ws{o@=L4l@^Z-| z&>rdz+v(!PCuW5>sphOd1y+8%i+}^^&`)^ma}xy_gu|`&FBz2Xq?xHj@z?5?eZ!2K zB)Wa6R3q+Ax27mtx@lYd^nvg3ui*y(ax49)%8#&jk(_x=Q!UBY$9w73nD{|V4ntAB z1f51B*@c%^Dx<%N-~B8E7Y&me_xitBjQGUUT8v1};#t;wFY|~PldM9q<{f_Oz1i)6 z!8wO@G&kKjylh>P*5F<<mYkxY(M<0uWF!I}g&MCQkIV|)NJISdQTNpC0xP8rN0cYN zQuqqi4Wy(HB@#VU4YH!Rlq>%HuD^_-0IKNOk)^-2HS*DChC*W}>54g*A7W%Smn1fq zMz^LykIY2BV<StdiujS{ccaHyi(uI(WTx|pQ5tPb0GRMos$xl`irBIB9l>R|z~Q*S z!IF5$!uE`^tvRG-DmnG%hG!EKKYZvGB#s59(b5b<Wy;8yxkS}}ROukIjQt>uu)a1O z_^Ks~5#XO+tyx#sXS65H>`6j3V;*#u$;uR=k*PNICqso>gWl0R|FlL!NGNB;M<&k4 z8@ZPa<CVR2m@Pe;UqQKVA6GlR^sBQTb+^cSp)~BeA2X~3b6FmwWH1I=gb(v=P#(Nw zFnerz1VA^FY1G@MR7lYe+(|5%AtMi2azvGVM=PRaFSRBrS`J6QGr5Y2f_C2&<s=tj zUs@VtmbY~3Y&D`|#cAy3AndxBTtU$Y<=#dn-#1EfzMCm59yh`KhY?B<EBVYH{V?tq z9F{tTvVdk_6191O)~C?+DKz{ew0{bH{|FtQ!kkta&ccIal;vxoSd))p!76{5LRI>F zsj4i@YI)VE9RrX$!?x0Al(I}!H!X(&bLsOLe|L(@*u9rVOP!_eYVPBhM$1>^{8Kiv z?nsyWVsfKtlvA7lJ)PfRWfh!kqN{8%mpY7*J(flwGE3&g1&r><9-Kd7Q*XN8`j9I} zezR-Weyg2Rh7HkC(eY5U1EHc?tdCx-4#STW)84Pdf9A!%gc{xvKZ_oyRyGvYtCN2p zbJ$N*P2Tq!@clwZWtFlbeb(7}P5PEP-eP-PrUCp+xL6FU%UygLvi*Rro_~Vo5D0r+ zcgOvk2<AN%HD(VS6mXhjb}t(gaJyxAO0li%AF$Q-r`d4lf3Ux;5m|@kExWGSc*Fgu z!X2yYjcUK<55#zAj~04q$N4)s(Oq))2K7;p@wea4_0|u>AN6;4u;t1yP%g^Sur7pX zt}qD$GsBDotk+M3xPARi?IR=OFMWW(Rp{Vf=iBb5En8n0y*V^{n$W2>^kVy#{B0{+ z(E+vfaN!wNQ8yYn@42ehM5OeYMQh*U<fMH%be>$mMuvTtP?N&Ct#%M5E0tb2E<^tU zKnJHx4D2rC>&WlKX{&79tsz8KviT}jrQY>$s7HXxGDx*obP7Y^kP`W>P$azMV3$gY zw+Ts}?%J?rR;qR;z(y8+gnhf+mQ2h7q-r>zgqK|yqyl2kUYF7;%F?os|LW^ssJON3 zW?S?-b|DVNAZ525P{*F(@O7iQzkLN=nN^Eu^z!=)eV%RhjE6BdBx>0V%x&3BB{$I- z9Os^uKx1KjX{pZPB)wVt%f|r2vC58);>=ikDRWI}ht-b{T|?3at*bYG>;n&)Jtm3m zW~-&AqWV}{u^@=aN!ub=ei{Uc(f*Sr6CGh1TI#Fhuui?Y{e!Ahb+Ld^>SR-|!%1>0 zrM9+f_`I!+r;_yeZPhj!zJ8K~Q5VqfC#1Bn*}1Aa6q82HRB@@jDk9liRdu#846SVi zlg;qa`grbZ#{#>=7T)ekdt!@ptz%j40QqgB#yganH!ESqN-(e@5v<vF(hVsR0tb+R z_juJ^j~bG1%VnLbV@QjdspS&?yroXCEA%F;&Z+b7c}igC!orzh!@XK1fTTpHN(qt1 z4qOvyd8?B;5Dw&!tv9zg^P8fKF7bN@=5-1=&Bb3DVva8(&aR#PVz#e&2jnIU!1E<~ z%23S^S&U#^-BbPH(mZR5_|2xZ={!fuB%URc&Pv(gzm8m7z!k$jE*4S_J|4D)4BVLA zxk4xyx?QI156_ugErWZb+%y-9!m`#RU!j_pgx^Dl*N}marzhbq{VLKb0N?gM1-x25 zwS3>Lys7$d<LcGYQi^dt|DSU)MCPq~fHJjXJUbm}W`?}EK2J0K4gGbp$y&FwR+`Kw z*A_N#KZ<Fd+cKW1JQ`gcJD@3uVe2Pqe0!)VJzEoOl>+*RJizovA=N$APn%D)4Tgb# zcYmJC_eJI;F|NAR6BQ-(hCk7Q%Vwmpnv<7$Hb3v9|M>I$6qk4{mONHbr!OYl1O}09 z2FU1DP5jpQfu$xdog=3s8CT^BJ+H!UjwD;xZ~a%r8$NIPAhosGLwW-Budy1$7}9tY zDQk-Okjnx54l}p?A9>Yptt&)K?{m@}x8uKso2GMhaNB1X$YrSj*HJ6`m=;j8CnFfT z=YuvH5@F^T8rwNC%9#^LPSb*h!My6&Ld(I4s;Y^Y817!lljl?&{fsTl%Gd{{MPOQi z4jH}Oq7u#6R3*+g^`;soU3GYD2z_%Yw1p!J_QZcovu#?YXltW#{qqyFB#VNJ^b55l zmBfHa&L*FE2qoO091>2l;+b%OGqStLv^E5t=(Hw;Vf++#cy0s0Gc>ma5HAu-8xTh# zf!QO1JdP&l4+t0iNghB(qD~)>M50ayR>!YA*qT%)^^L2lcQ>eLe?KVD_$LpO8=th& zATUWrQM*~GaFaM7L&UxWV2ja%fxJ!~a4Kpa0k}ZwIVWlT&mP(uy$7CTnLMCf#J=U9 zjdTH^T%=Y5VolV_%Tm4-8D*x-*X@asx|CTEpHhfG(7>uV)GYW0o9$W54Yc2i(Bpsf zT~}$aJ&D#N0Cx$5&Wi4)kcnG^Hid9Tq}ZAiHo9Wl0aJsaKx2Yti=+)pH611)YOnB> zS{oHoo3sH|fhGj#K&rblXm!nflXzX1m`OH7;`?}HQ>Tn4WuYY+l*sw)ogm@UfP@qj zqeCg}ekK$mm_CNqGM{L3>zd)tqu6CZ)dz^|Kfns2t8Ln|T1cke>qT-lqGa!5ywm4w z?lq5e06qMY%B2lr;}ASYTIf*uWvQ_QR%ivUjtIrqB^Fx!n2q(E2?H7x4c(exaOg`g zwcJBG0dBKm=h=X#jFrNlOS9RcN@D6YIwvxzV>N`@MgiN6bR`zXsr+rgpMS@;5V|kf z8aqya*?GmuC63_|XU;<BVsD&XWOLnM(BCDa5#1eWKDumJSudiqcIMBUiNvvE^@~=* zy%xhi(rFFvBxi68aj!JW22Z@R#jMc#YPig-56%-8tBTH!jY^FT9wzNgpu+64m#{Ho z7%(o>WUqC8U4pRD4EoVnOE?7H%wtV&gbbE0sxIwBI?BhO|K)h0kVki(a-!d-Ab*z2 zL$vsZhtH6F>t&Y;7gtAhR96;Tab=?;aoFWd;vK6%5g5y!IND7os=4Q%TNoJ2m9!fC z5>jJ!SG7e`C0AozV2i1^tgCc}K1a9tO=6mqsbKPtgI$>%#?{skp<?3=g7D8?e!JVk z#;j)ay@ilGb@Q!u844uTy^0S0Wmer77?!+j6_Vy6l<2eXln{@+Cxu)d&xb0B3PkXu zOlr2SGs0<)Z$bu{`I8Bvd=~r)RMkh6o4Z1zgo+0`>YAzs<<5^{TUZIbqel~l2H549 zUf6BBA#F<Fn8(b_k!!{XMub(1S?g^re{fvV;`c<K<s07*mibP*L7HxuQD`j*P0_bn zkI#EA*xD&#)SPTTJ$@CrLi-BLPw7Mo*q9kH)VS0(g&MAh!NM;Sps4v&o#Pl<vNIqJ zu6k^Jt5I9qbZ~vGG1<4(KZoRdp6tE3k+KsT+3m>h1=Ao@@|&`p_t9D-Zn&7Z5Of{o ztgj6)J$0Qd6qAjDEyIQ{c0luxR5^&CX-aY$ov4cy>x5eiwor1KSywLk)zm|~Mqet< zCI|AZrkCYyGNuv|XwSz9UR&*6q9tYYq93R}#95MG6#|yXPgd&KKN4p)OZN^JD@w%7 zR|o&S&RJrhD`7`^>>KTu881~fu(%9UE=WJE;=|=yxaNwNz-6l6?MI)Hp)I#<5|1j5 zBd@PFCVsxVLoxUP$(0<w>|FH3DFv0W2P{gE8ihTKOM)HJntFe*Wtq+8>(|Hpf(1Ua zjPLcuP<|KdfuyU2Fh|0hP=G(|sms?}VE6U)dZZum3ZxWDcr=7a;#*575crhm`^LB% z@_J1gDt`|WN69%DiXq|Oh#{1H!xHeNy~g%^)98=61+jz?UJjWd3-rX~NW881db3}1 z`Fhh|C%iq4^vhp^N>BtQVshl(-~@chuN&T;oI-QXhjOI7vk3)4p1cLRe!15W3Zy)F z_`Z4X!oEL2_U9Z9VIu3D4W%IIoeVL2_l+ae6O-Rp7n~xJ3nSyp*@SI_NReuTOOb8^ zQyZ1ntnP*V-if64*~&~O5L4^Md6(fDBplj3AA?Bd8%20Y{J|{1AMn)V>+Q5_F+w+% zC)!-7mY%4(5O2$P%x3x~mM~kdF?;&HH-O|PO!pxsz#si2>+8+4%kg@RAG)<WG=$o{ zP`M>*3gpPR!)VZ5lWE(C+%lNeGI^gQ)o9s~gR!HyApdzJ@FzAf<d^IzkkFlt5=xK{ z5FK~{^+Wooi|`J7TSj6TagtzRoBInfG|9?WdsrOLFX`uTZ0*9{yqK&o;=&NmLCK65 zt3uzLLmF}!B7gV9hN;}K_fR5U_P2{L%q1MzCCa;@Dw5}1^mzG?rC%^xdBW~1g*~uX z;&h}N)Tif1D}>9!I}yP-=5fgcurp$}^`ad?E0rbB8N<I~@2j(&nJv`jsPy?N@&LV2 zUMhalxq*C4btn{Z;>taQ*xZ@h2~h|cOxNV!Wtt*dx5}ki()<vTlI8EIVoh2YZ_-RE zkb)mU1k|_=3>OWW0cms!@NsE~g0~h>#Fo5-7}AhUKU&d0Ly80e$#CDO`0|r1&Dr)* zqE$-x^IXHax>cpeDI{Tu5*tZy!gImVggHDf;9;whkG|ks41otS!mS#x8SML36$sh! zN<7Hi3LFI>ZWEW|hR+!^RHyu=e{DyMrnn*&FVzY?3t0pa2BcctRo=S;R%LFT&wY^$ z!)#oUcI!)>NUf+>g#xOGdXlyS2aph?bD=7)l#2OP)$V&jg6e**Za#&cl@sLd7Tl>) z&V3qwm8##a^YaQsY}z6mEAq~frxU4vK6R?jAgr8XzTC?sswkuJ(?<w7nBt3Ax4-o3 zuK!x5xDKUqEiIFiqiV)k-O`hu#}QDFlTMsNaY4&r7q#Iy_kl2NT7irExN0c>1Jb*! z%oZmqE>Wg3p$PP%M`{-JySPC75%O8o6+Nme-vkV>bYOE1w8}-a4&1RX(Bp`zwPXj& ziDN^RAG*?jw!`8V_x#>=?BU&0d9JB6#}knc?XIpWuecliJJEa}AR<EZO6&{UnvWiS z<}9$NnwBA{WBV1+`nP&7K4Qy@hMQRheO8fdfw!kZc_gagH5pC@=e~_U1BfR7VfU@C za)DWj)H=69qheBgcq%pK@zs*MYv_M5_6@+91Yw)Iv2EKnHp#}ey|I%owryj>jct9g zwXyZZwz1*mzyDBmb^p~>&2)8Fzcbx$&ok9sJ@Y;f>Wue!IMc_2wLBvP06OF+re|J9 znSuMf+$qs9LWk+b8m?1yyX(-h*@iJGM7(M&PHd3Fc9yw-dDcS&mbn_De))=h|6ejM zf*=SeRj&m%PVZhs?=jY^J9>sSItCq3c|ku2CCXuse=fmcz<shGu549|oRWed<Z?gA zJ7Jy_8ecfRt0Z!C6PhG3Loi92@0;(_!f9N1IWDwlhBthZqXQ-PU0qe^dV=+mNXm1r zwlQBZHXLE*%sc6^<j{i<%owML{_Q~_#dclZW4I1LWN3)8{JnK2Tw}T%%_TnMQUIwx zU_R)E=V9j;3^k4;L?Qo=ljRJ7syXkB;^@-&Ym?QCJT0Qm(lTsiqC}PTl)PITO#9}) zus^I!i(&J2;E9Ukh{_0pga_@R?U)g;D#G{6!eM0g?v#YZD@09o0pG%wugM|ubOz!v zd@_Igr=X_Cg;C%MNoJvq%mlD6`J_3%8cmp&`+=Jv2}6OCA8Et%r>YGAX(b9spEPs+ zj>(a{6EFu=Rj8hXIPihspF~R{KM3Yz14^Y;^YTvy8cpe@XJ_tyQ1rpGpc#bNdPF*P zig-QKA*$8RdR+6xf{*NocqC^}>jDTn<t09dKuA{uOgz#_LS(+55EVNRKOm^973cyG z-qhrzPO9OB2Bytqg{+(Jv7d|048kg7IDW=ZQ6I}3Z&E#y$dy%xZYibqJlwe?rV)uH z5&2L?M-0}MYf<HOCl=B~!P}Y}B}b-jnWAZ}2xoZIZuJ_aJc6e_7UnH+w#wMpr!IjQ z81)F2mF?+72}MmD+2<-!iR@sAqqKRX`h=~6sJro|TD(+OMG4b$&i}BCFyE4nVirF9 zoGKiwv@PByk^3uiecv!vxtOQfc#EX6VA>@So}8ns5bq2Pi~w3Tk)pNBJ6*H{i%KsQ z-g`szKNciU^uVBTt@Z$>m9o}=G}*?6_?q%|Ww=nwe;G>YX*poptx&S*Ty%t;Z&eWI zxyDaqB5)!^3Nh)w$0|r304Vuxuy~nZ;PFI<6w-$zCL%ICQOpS+AMV_I(4j*Y$gLCj z*Sd(ORuK#r{BT*bPU|3zPY3hp&syU2w20bTcv1f?Dk*6?33GZ>8r3kY;KJ179g2U+ z(A5%ZOC`de!lBI`QHoWP89YQY7ig+qYx01Ovp6B(su)kc)6@iEL#!oDCM-1Ba!1+T zWRVJx7N`X!sk<&$+m?o%@(Yq0=PUM;%~A`3<guw<xDUUjz^;X5J7OLOixi3?U*-1^ zlceP_mnujn&Gn1UohXr6(GsNJBR<Q`P46g5fA)I_*Q2M&>h#e=930&h-*)X##EJUD z`I9bR6XVtS6`!m+?DP1Q!oJYnyi23R!}um967RDRV)9_C(}+XMleq#3asUF11y6tQ zA5GXjGO<P-esTE3Rgd)zDIu=?a*ip+8#E$n8G$?hIez8QiN`<B283r^Z{HO>mk`wl zgYUbnB7FSyUQazfXkh!Ds$r5R;G#G1oRVN_a}f1hRL;zQS85Y)-V>T&(t8&tH_*iM zyTZ0OPom~8Bq8F)e{d72NLOfhOWeEkPJU=2#e_-o?A(KQsL$ZMKcKV6G2aq%Ie^(+ z!9ugiNXw1bHx^z_{jIjFA6dD2z5mGG#N)u}n1?>4EXr?;-%`_b3G{rve@H08h1_~R z^9z*sJL1J*eg4Uu35p-C0XU-e18RN9Q}+uLM(>XWpRBKR7hm2B*Ag7;QVdIiK4qsW zJ6rDlN|jyE&~b^b1Av2@epUwo!A&onIYia64w}}UwSWI?$~Hb3Wad20*>-7SR$-bY zO`o73VK3?)(T$>yjgC-Ih%uyz%LcZ0>6Qf*g+$!>jxk80QH1BT0wnmybR&k;ZMZV~ zagG_S$mG&o;IgT$P&*k;=o#ddxH4l?J9iLUW_G~<e3O(GGcq1jjE5Gpofb%gzXY2` zz@)^OV}{#UAdmVOvXRBLr0C}%Im(&BH0vM)heNLs(?|!L8vaq5-pM+mFbyOE39z@} zI=^Y|x&q<c_d>N|v1fx0*nE(eccnYCX+0pF_fo4U4TfHJA8c7Rd*=Y`__0|lJRmYg zFDgdWb(4@LOGM~Chq(e*%W1M}<_4KmYgdBLw3f+Ln7qjbBf%^)Q6H{xs7x+dE=!a0 zQlGTH3V3NzuRo?f9c9&%IeWBG<eg)*6YM8~TuiWvvKmPkWjZ7kUahHwcMuhVis&<R zR3j{oxkgdyn`2GKlr7aqveWIuxV(*i$F6a0)1^sP!2mF4I%o^M-l29dpaMG(f)i2@ zL{!*dq@$%AA$>6g6Yn9+;iGt)=CEC`H>vj!!L{WoZF(<EN%%*9+EY??#v<%1uqAYi z{=B3DZwp7*H(*Q9FN*3I`*}$YzA8F!V6Y-J<2IjUg-lcwx-NQ6Cn#Jj5J`SbllsVU zxW~%ScO<nKzgOMl)RVQ~gU#6Zw97AeP|B7zw>zVBpN~*nP}_GHGbU_Hei}0_9AlEI z`0vIo?{<D|NzD&*sp^Lpa7NPuEVe*W)yx`5S>Agg*7OtQuC<9`n`+b?CQqPru@S1G zkk8Vk-m7>A1cKJPXV`z?SL+9NDz0Ja)oM!WVemlkfra7@WFclFHp{42?CiEn4;^OJ z=Q&5>2*mX_0e~|WT-`=DDtO>F=}IW|C7XRoVRd||_hao0$0)L*PJ?fj@(6}rgJ7>M z4uj8}>jXXKS$oU2&TnW<5r^SoR$)A<N?ch7V;%!PG=+7&o>0p_M~a^F68`3qn0*FK z+{v=#)Q<k>p}Knuo4C_u`*S6=_GFqX^a}x3f|)JS=o#94Mv5(VI6>UhGCd)3Lt@yK z`uAe1+(6IoXjgO6DsJaSIjlY>ZHmQ0$VIX!%$d;x{KAqxMY*A9tIiXIoC8bB;j+sK zqs&WpigBF65^a+O44art(^%!zC7gq1R@Du*`E=>-ES1UYkY~mv$Ap1RE&S%gnh~vs zm%G#N<f-!xMNZ;vF^PZ8V$_&SikyCvV=^8ccoFhF$EqjB;#ZQrjZ|FpRXf@Z9t0N3 zHRL>0;}<Q>`G;#Yw-qeD*X3p|Fh%El=C@tMK&&rFl1y>s?rRErT<_H2)mZ*w(8qT? z5c-ie2bUf*Pf3Mtn*`E4VYXtMNO8epNNPgZOuHw1mYJ)yG9`;re(ospud@|irQj0p z=8k#9Iu?nqH$`wXg|Zv_ww8G69-@SWOtch>K>fYF?lNJ*>nGJ2Y@-(Qs6|(P4CPz{ zBW%qtUnBH0<X3Gr0#n*+0(`KmI*#YeSdrm5)~J$%oE0q{rQA>xOFG_ADj)V$j|mHl zy(5Nj>r`1Pf!`AzbogV3b&Xnri_T1obK@nAo^xf`b0VGa(MAfqQ-^!d6O<#X^mUnO zHOBQo*sGG0N<D@K*fiz%))=pBvjr31Xz{cu5p8xS7$Q3E7*MEaMqO;aca?ry{b3D= zE&kO%G9O;t{wHZ|6!7H}tg)jaZFR?_d7Gzjv3-xv0iai!c+<mK1MfIxDajcEi;mn< z%rlhv-4=!q9Pp1~D%x#Ut(Ue0ti}s#eti<L6K{3-&7?u{cZW|L9Zm*Hy|Q`f;Ic$G zPTO0<a-**1XIeJX8%Zt8+n=I+Xi7>U8Y^57-H9DgL#Z=++{2&`d)#B-stXzXxIW`e z9M&^R<rWowj6WsWu#6<WF6C{L?Ur|Z?5diir#0zqlkV0VJ7KFM;ce4;rI#saePyUF zULP*LVSL-Q1xuk}d`Gqg$?uouj&Vz1+T!vI+KUcotY+l>9O}m)*N(F-yWddD_LD8W ztoizir5iqf)`jWa>V++7N3fl-x-E1^^2X$)v0}aViu1X_Bm4T$hjB++@W#k`y+9{F zfA4F9wO|P0{>l0G+!3TZkw+ZE!Q6e!bJ*?_TuId|k{G)nA}6?gW1-hvfY4<UItBF= zeAh&)MPYd8-WS>K-DGGNe*3j>Q&YNN`uikVY%?NrJ=b1T)g%yd$sF{<hP|fu$gte6 z#Q$L2_RYpQ&wr>#TJV9n<vK*>)A~vy^+msM_ekU5jiUbYb_Zr~VJ|O;FXN1?2HB;M z{WOXy?_>p;o2Nw>{@))v^2INB+VQugMBs-~mZ_s8q0~zYN>rj|ot^uyo(M8BBaO$( zTSgMW=_(s~?Vs!)B-IQk3C{+jCULv?u!+s?vCiFCNRQ-^6Z+%o)N7K&b-@X&+9V7c zgx{@Z)x~u|>aOqu_`Qjd>XD_=g#wXRORsrf2|kRsq7;7`(Yz*d>_g*C`zN)h$_qRY z$v=cXmR<9T{Z<VBm2&P5J=h1$AhX%JbKI~r(B4esR)?ixQPyMER8U-u*^{L+`*;34 zZw9XI8U$sB2wATUw1=&M(IsnvqU#UZCXcXgOv5lyhVBs_GRJOgD<>~fLCq>$lsFa- zDaS@tVb+jpM;m~kthQwG6lE?Eh4*@kz29}8ixwL7qotON*hBDgLbB2egwzX71%20a zBII(!CfFwh#B}V46TxlWN<D{ihpYa8;@pH9@X(Ffc3eqnO>SpR`!USigo2K@6A;Xz z;f0^du}i-6cLAog7?nwu+y%?dT8th)*3zyJ)#x)r!nW3soDOd$B8$xaLud|W(=rx# z&{Kih$?o~Yw7=YuBymp>dn}GOo5ewv$Wef7B_=c%@lk{dE=3NNB!NH{izA1}8p2^r zVI_uVHK<*Lx+g{6AVof$EFov9L~a~pEtW-shk7;-W0u+mA+&Sz2F`D0{Qcru_ot0= zW_`d?3}llz!yiuP?-vnH9KMyy++(#zow`qkBr8Pj$TD?8nY>^Zr=H|T-ol)ox`U6s z+V>S+Vv+x{voi%9yesV7*93Hl%o%O=ty<?fAoeh94Vu`EyN58*EWEofVt8ufZtzNn z7X6~H`8d}}<4bBWBP{1K&57js&1h@96q3)Ft+PE@7;kltq)W*wKDxfO)hd`Y*DF7D zgUULD=kW7o=J<Dvq=^F+DFg!FA%;HA358c*&qZ+^wEQ_ep|_JqU#OEG6iLtWWZ2uZ zQ3j?1AAPteZk>$~^1v-_d@?4wl!lK)DD#kQJW)ZT<2wqOnpcOZ*D!_%wYPUW5Qag7 z&ravln!orAL(%_PGkh^lk@>M+Zl`avzp3~H*Y+j9vAreNnpHpZab*||%soqR#Tkwt z-khxry-Bp>Iv8_bPuenX_2(Y&uT;KiJR+59!)=WT?zn4>OicGeoM>m;5)@@9o*9MQ zgoN@)PFd)4l=fr|jmh^mu2?T=*n=sUr|uqSz0KQWjj!Q5>phk<hXX)sq8{=@Owj@% z>DtiFCf6acnx~e82JhB!s?47KpZWi)E*6^elecxr?ctlO*CD+mO&(>q1n9TrTBpdC zo0OW<LMy&wRY)+DvDa4z2^2s$iJ(`Zxk1tAE3;X^{x)sZpWHJ@v=MG9bd%Yu<DUI- zjv2|YSH<lsx_8Fv>?1%mvJ59pe^d6y10gTD)5r)rayD>F7ON$i!IoQlMG(*MY5v(O zV0hUY&#;{J8QfGod|TxM#dbSh1XBp%>1Jfx^@GQ!KQDmzIr(`1vmf9G0exL)s;#)k z;D^xlrp<6Ty~FoGX1~w8Gx=urV{~h9;EnOe->o5&H$tDp9_nf{Chfknndywmy>HIm zdPBw$oOxU#)Xr3f;+3#Q+#JcJ>b9M{GD2ptbBbDp_a;@zyfQteCdfI}vA6uO@9azc z=r@WR*3rN&yi1<y*w)YY)-~%&(?!%{1MY^CkuG-$5GIeIzLsVMj#ZpeGx;Uf;clGU zy8Z$nd1qw;i4XTm;jSGM{cM>>DyfNCF4=`IMM?*5gwhvWF!|p3S#_?5#X#vi1T#rv z4ljk~t`0_{ktof3;|;x`AKf&RdJIme*zuAb=D;wS(hvORP4{@bCm7*FK<-GWzwM2h z=0Iow?*m?M>JxnVZtEBFC*k9r(2kYUrvnY1PtEal^=?QH1~!+bNL}*oFs}@Im0JI` z3MBzIO(Ia$D$bo&87OHLD4CM>Tt5f*slvyieljYOIyF(~VyrBKZS!Lt{P!Hx1`xeO z8XqCh!zbF6wMKqtvZ~V2E^5Y&{VVU2_De6TpJizS1ly{yF`?ti9^Q;TRh<L4*3U9_ zqrV|q^3bq07|uA1e3P6iw2N)6KbrkyJOh@txXLxuBjG{DeeH-wcvlB6w=d-<yIPjI zLPhf)rbZIn{S}MzG$R}7WFtMU<WW|d=#x(3R`dDZRFZoJt9JrfF^A7ViK-{#AEBI- z-^KO~EfoWd6QzVE*eHz+A}S>xP|t=yq$<%{DMRN|P?X45O0FtVSQ696V#Y8`kIN%6 z)>kjXq@Y&vD~=7fluot!Zi(gCB)g&D*)l>&6LHN%cWIu-p_tZ^d9M?5L^pVZ$L4yp zu0}kjrAAz?QF&l<>GspgL<cg@EAw-@GXIN{??f2^rXxntC1S|$S`?A>9px+$;va7A z#)Bf)Ahfd1KzNvflnfs!?MX<H_;qd(asNmXUV8%KWcj}-QvD41b^z0f2+>Ku-dw0> z5&WGrHeC53ycBlS*CCB9BZV!qLuZBxDoW|Q`^)B`uZ?syd;214MwzX~REKqUv15>C z`FJI=G;(a{vA*1MT~h161FZFzHktegRkVBI9&=*vD08=>=@n6o_CLRUjnVNG5IEzl z>!{uF6b-V_sGexSTL6;(XqE`RmG>vph~xSQSxVsgsGdTxsiD1U)h1al$6?%`oIlW- z;Fd6u9-?NrI~eWwId``WCe2*rY1FM}BuH{X>R~X4eXS?VO5Bz7)KOooCqoAeQ@dtU z>1!?uN*672!W^X46zy#I{zA9>Gpqr%gnqf-^RH{2R2vbKntcF%D*ldw89ISVORtd` zediyL7@Y^ZPpxgRp%o^2#d&Yw-|GFOOA2=v?A%IF^uNCXJcg@gldk@h_fD8ndltw` zniVHx&jAm~dq+mVum^4j+sOvKd4zFJ`9{5YQ(lodE$PcgZj-7aS2KM|g_abL;POFL z0me@onYT~QoQ-*k99Nl~NiJ8e^@UYilNK5)S`f)eY*FLta7{!}{5FIzE50+O!?87P zQ+^ysvb{ae<>A|jHRs8x@Z4g!v?ejBzHf@l1Ix*&Nl|6|K-*t*rHUW0HYuf2nxEqB zUKnoliUZ_-*{?I55CoNSgQruDb`%dF&nr4322z(DW1I-6X&j7NZmATMH(T!S*@XmR zjlg3(iB7Dd>e+?8_+}R7<zyA78}41Iic3$@a^srrT`FR8ks6@pM`#ofShns+PiHa@ zX6ja|w__eAK(I#jxz27srECW`*UPlST39dP`Y`>@{v2}tYk|^(EjYh;*Gigi3&RA{ zrFs?&qk7Twv9E?JS)ZDElusrO;D>pY{yijF+*pu0!1@=-aTGMpH4<n=6rNbD;{*3_ zO&OtHx*PH_bNX4win8%F^*!I8z$bM}y^|cLUpE)|dGGy&{q@)44^5tE#x13bN_P;` zUw0O<f3R5eLIaS0dyH~!=|NR*P){^H14IYNE46GMS_jt!6}_(&;DRcyJo$V(?2F)r z6-L)NcucSUIL)5|+or**C>8Us91g^P!^V)Cd`H8^iI9SqS7H9~azIi4ev3nxHQ{>a zn>$^WmC_wFy){y-{JiTb<)Z@i61@Bx1P^pRc7sI?uVT!R$noGSAnf+VD&u<8rnrz+ z1zGbFT_iW*5hW}fS2mJ>{j`JCvxBU_L(Ig3u3l(CDQyYPwf2@$<?mH%CeJP%9&l=A zuTt*lSGVQ{%3mNpl||MmUcfI}qx~p)Y<xMSJF{g+VluND7K8yg$h*4fs^)mF(wGp3 zyvc2JOSdY}-_oY@RMR{)m2^vAyHw1xfA}VCpWr<k5FWPL<%`h{w}g_lFutI|Za@h{ zHmyVDL>A#)m0X2rh?zSC1IRr2d*w}k*Bu+x_ZQT!_#2AKYrIDR#CT)K2!^L323Bw# zGx*7^Q><S?;=T*!FKtS3{y2`$pVEIJ`dB_3IvRUtCin7MunzM72r~KgUJ+vGsFsuY zF>UyArE$bD!jZ&K?}cLCT8T$g5f%<zjv9}nSsSBR9qp?$W;08MaTICqi1b`mPk@LH zpI|wu<G0}K@iPiqS<b~BJ|evd{XU%ow>#yY{#kx*i&b2SAmWTdKR%0cBS=W*1${4w zEtD~#DI@i-k6)ghDs&<(5|t_e65|5ujI?~HDJP=Jf-;K?AtH9A$+ik7I9IuLoqEnU z_0!esqD(}|1w9YV95}=B#vOM~;tv)0ner*|cs^wE#k;ynoha}{aUL<ofqH95tg=)d zMFC>XvT?^QFI0PF=Ao>`W}v=)cx$=lF5#&<P;(=IxomlR{IuCaqzlzw#hp#OD<`yE zy(-6xI$HC}cw@0cTj;?cE&tL;`_zC-UtsXC47maFl)OsIHzTz?UZxd5?*V|x9*~G; z#3q1WwT%He{e!nRF&RpTRRAWMjgorPE0|e~rK(_>v)zP>AzA0$FsPQS!<WnX&?Zi; z^^yFG#i5H1H~l9Ljg<C%XSmdkB-HhnwiC=(AZs0L7`pLY6(UjXNyupV3NSY^?M&OW zJvUmw&Q@R1&QNsCgQx5<7xqZZQs!NM{PQaJgBmpdhwoAvNH)(5`9dD<A|4l}r_6p5 zr6HrapgqU5{~s9+ojFz(@wxI9IVFSvE$KZ#Nl_!9wdiSwJV{VySU9EGRG;GFZ<=&_ zl0L}+PR$9V4sE~-Mq7!0qK#LW-aPAZfuL;72`^5epdxz+wo&^F+Jw4c;QFHG7-N?L zdt2*H-3!u>%5F(^;FA^96Y1&(EP`rJKhFcdZLMFtz#?&d-U~XC(r57RQ(_+3clc@b z&tWp?Z5`-cFX)jAB*ZIcjsZ!+oo8Snui$}Ypd{g}$HXjNJpbBue4N%>Ya!!2A)&Uc zB-z>N@xTk;OM`Np-#Nj^&z4@+>{MQfI<q*AmO0iW{e7H+j<fKiBw0S)_98MT>D7Kp zBX1{Z-nqqliu4qE{W&8i>Et3=uQa_m)03pQMA=NTc|z)R4)yjT<(X9%>7#)4&JNZb z&lQf7h{L44JbS)^J4Q)0E8c==JAzq+Jo2Ek3FZ;08us;a?=UAGr91YHti~tv1TiC= zrqm|F`y`G?FYd8Zn|}gKaW^Q3qd{(Quruqdut@}MGh3{yS7-c5cBg#ve66Qe*}6Nv zxhnz9J{z7{^=VJFS3;k52&bPF&h$f<UQs8kaOh-2$$7K2u6L`17a9c{`{F5JJCdMT zQq)FtF|ouO;rEfVOO%Yft=dK*l((N_D@$mGK++Z%2uxiF_rQ8_63hQ%Z~sfd`Wi|4 zs^8nRGhYp#G&jYX3NXT;M0gZ%n1RSN(uQ(+Es|}*G{}D_Y&haG3c%=h83E&2b|gyS z`-;yggkW+{>3@h5uNzT@dL_iXZZd)G+yQ<Qbk~E~;?o!~jEk;o+cQ4j2Y#`>+pr8d z;>NjF4bjGp*Z0;VrSmWCA;#HUV~t334mb*Ie*H(}&Tn6b6tA*PaL4{+LMoeCi@#eR zGs%V=pR~$*xT8#yWk*Cr%D>F>BZyx+*U=-SRU03XzbZD&&Ni-X7LeRLTlf1Q3m@@m z6-PPHObjj+L&kyIa~ID{>~q<_IMPaNRgfG_!}v*^IG+2WQt-Sg6k)C*Ew-fDmZRFN z(25aX-e%QOXIx@lhbwcbL0M<~>udkunQ5mH<JsWEup_$m_@pUgYeKWqI$uk2Ge}{{ z30hkgQ+qtel+iu086>~tgseT@Wy;twrgKSdvnsmOkX~gbq&*I9${0STLqu-lnO$`N z+mJ>*rjtu%!z;4ngfYUOOC{?G#SG|-Nar=^uOzJ9l^CJ-DBR<;q8ztmkqu-GOHHtw z_+>E9wbsxUX4lJXn`?yMM3w2VHq2Qy(-ce3u&!mXI;>-ZeyOt6M`y6luQepk)l%Pk z^%Wf5FD6&zKyD|sEwNT7VOK=SQI|;7b4XkHYUC;vTa|Cu64V%LF{1!uvxnONF0zL6 z>L+R(^1TW+gLg@FSvb&@aIUQV(e_V`HmpE-jR5kv_SLG0#ZX!<D<TgzI?aS=>mQsb zeG2(rBDT$$KHixqmumr>eGlR}0^*-(dnTjKK46q_=t`G7u&Hs(J3b?tfW$rgmHlU| z79PJ4Z^EA5(zwrF_c+5H_Yq>8(`R&D{*V5axSsm1664MiBkXEiD$D#8UHHcCh8hTt zw%_3^Yd*UG!E@u=ajhLPU@9iADurCrY?QGq{q2PFRCR94Ay#fqt=efG0K$Nn{e3JT zB!YThLoa9An-}BeACa??n^+~PB2`4hOLmwe4=vvx%HNUoqSTg(ctnt0MD{5Q#{sh_ zNPon?FY5$UG(*VSfLAwZMa=L1DP6*vYjR5{b`2QQk<6$Z5-nbWWtwXr;H!qVUGN%s z&|zLFpwxj*NS;(|EMvi58#Pk!+5Hocn(^wasrz;6ygHvv?nGxUl<de>hdI!8cg1g3 zDO@wuHrK(kU{3$N_){rbK{8yIi8*JjvDlKyH!!T4CMI9AudtE4t&OXNBA(oWKY8}O z-UXJL5Q~F2O{N`9LwGXD97jG_7$0V5O(|j_Ot~>Gz=IL9-O7qZ4<E98O>1<Kjnr_w z<Zv=n#Ey+&-n?JN4oa_VvZ1?x0nKSeWEJ4ZlE%n(kD;;7q4}G$fw`ardznDdb1gBK z&)VVJ1PE!jV&msxM8N})I(JPTR|7Knq%GM})Ju?FW<y4_=JbRH>eu4ehqn;%@&ZCv z=&noqGm;NZM&od58P@DU)HW-EAGA-Dm=@pa-N(B^Kg^e5h9bT@Rv-cFf-KB0a^lwT zkJF@mnbSH@)A7bP=$=QZ9PGxMZ!gn5<6mw!4Y(Zy>|0F!WL><)1GO_FBQSliI2GhE zLral6SC!(KQP3k)-Vg_=-CCvEF*j511)e459O_g5;KXixAyQA8dgr@z<(M_(JK|@; z3F5&f;)ZnF-IzN@!c~TBw+RugC+U}B-%pF`h&M@A3aerkC0&?-Cbo=<)By%NR)&Qs zYT^b2rbUfj9Xm|hMWz7#HE}?X8|;tL>d>dA@f}?|!ncxYN&OD2!sfHl--hw;&G>*6 zH+Y4)mYu~lH&D?<?|M^?R`o`lqLuqLYc*Wn@?}4FbH|OU9kO5L#gHL~$e)Xmo@VQ_ zR}rRyR7c)QlDlJsMk_N04N%7f4`v?Qw2xY*(wnI~jb9xV##a51Qx0Kd9?PD0^w^*+ zf@9?5P{!jYemC=eUK`Gx%lpftzYD8`cgFn*>RhR$bRJT$tT&u-lfSU{1q_9?q*2o& zhumx~sQ@38_*x^N{*gehxa%9Y6?6aH8vb?rBh|??|8@Q&SN6gtA`qu>p&h63ocJpP zI^9BD=m5Jz%tiVf^mS_VPr^IR>;3Q;t`V|UP}A*)a%QR%o`S4NaRHx%<yye25-fTA z3|aexX#T|Jz<y4Gs;(VP>nUmL<^C!mnOkqoe|w-`y>b8)KT_MyeEjk3HCz&-kE^l{ z<=w1p)bXfZ?6;Y~D#2>BT25X1h9y~D5!nb(l(b&v<6r5Xwf-jXDp5&dA~*geG6?ET z)4ZPuEQ$S>t^Ao0<QUkc5}NM{g&MDV89Xj7%1MAuUP&;s9iSa|4cTSp4K9a*ZuX)J zvCGAW2)J)$|Ea2RQEqlU)a?Fbv9w7<)LOc<^z=udxkPT`aUpZ9sUQOB1N9K2%s*Dd z4IzXG2_JnT{xV_|`cH5U6yDKLeuy=VAPuV_&5892<%#{X?wl$P6^&P2PSHhue33Md z${fc;A_q1+#e;EiQS{B9BIG%}J7L*mhX93z2?C%3JWo!O)G~>RyNJyOq@63b%aUk* z$7P_A7mwURmT2527}jaEQ8N*^=5alsaTC(*Y{RH_6CCMGV8^=)IeSiZrVx4L@x@YZ zZp0)rH@fWw;r`SaP%lWFehLo=H3&&Rq4el7h*E!H>r^z1gMLtd{?m<ye8#zaPxT^! zzXC70N_UdZbJ;49)wN{lEY#6UVCU8VKRJ8IieIU1w*kO|j>>+NzaC6pyf(6K*tPiL z^mD1HX3aqdA(%LE+dzllCG&@q*~;NatD9h@Q`mWISB-pL#PsscR{0-xM~X59H%Rpv z;{zS$==wSx$eNUWl0Ub$vWGcjfU}w`;DdyQ;!0|cO+~mo3d67ZT64^l2fCtvTXR#c z=m000qVVr{D!|x;imh*LFIYg$EjZ}=tZi0b{LTu8@c4Ve>)(F#KIL1GLZ|M96<fiR z5Be)AJ;=IePbO8}*d3>@EZY9x!cW2hO&=`g$H+!$9}y3;SMd{L(coEG*ct@eBFG(5 z6$<cbD?=))9OsiviBUsiO+MD?r~DMXuv~O*<;BLy6TXS#Z+x7bb>pR15Iy?nj$y~O z-#x$MkxXHHw#A|;?jqG6<4f@^ODsg?ma{3_i4j`jW>BXE4%3#jAwYQaDh|Cf$-_#2 zWJsAV`C~gKx9Ez1wd!JxZMo47_y~{5)+D)b8Zhj=x9HxJvnUA3&^>cZEaio=z4HQp z`V%qD8U}E_RMu(uBi1a&50Jm$@4s#aF5e>q%05WT*Cjn#{J`MvlYvs7DL$JPK(SA( z^s}u!x_2R<&L`yZagR=80DRR&n)s62xXyEAb>d$)MxQAr_S6eDd^25}$r`Ur?j5Ew zUvvc*MX4%_KU?pu3g79y6br(kwk@hjtEY3rm`a)-dEw5C*A@fk%MwZaeo@C#B?je! zM^oy<jZ<>sc~W=;OrT__LJpk-u#_UPDo_vdiIUFZB3VtPu}rPPO*u-4*0V!l@tNd< zaG|4fa(<Pw6KU}B>&9xGyI)kL=-V6c)Bie~u(80j?ee@h2g{P^?6)4Io{)H}S0Lwe zkAM&Tk`iZe$?~vo?J5zjg|VE$dv}F8?WUjUOD6birMT|#$!951=xK&MZ`IwlfotuP zP3lH4lzQRxp)cPG6|o?D&^0`5^;>Wln;GK$*3Jt(fN})T+9mj2nNto3b;huDE*W4t zvRpYL0AHM9@L1seZs4X6f}FE@9m$R@=&BIJoXx&tbA<5R$2;EM)H2?#^qg-v?Ke@w z;r)o{mb%)QS6?}q`(CdwO}75)-!66xxb9LPIyvZ<p~=!ePy&w0)L8%ICOSV2{jq~U zghLY~aQxm|QWyja#v|=7q^fe`D10LhaWN!F^Nv{B!{At?=r4ZXn*FgfyJh~;k^F%) zw}txRo%5j(u`a1bRk(BSnYX&bSO4MJXPgfIC?3s-b}oy>FI&f~Yn%4VuzqDH$am2g z9r87Es0I7{3=5xhWe;l{@-^%L!4K;^3(H%j&O!U!v9H^%UJ~*(Zb*=1#hvkysju6j zUKirEd#DEc92%=bq>lJS@vw4-JX%1qj#&2`qR-E`o*crve>xA<d(N02=20~|7USH) z?<^@ZPcLB$<|G>&^jlHK;3u8{aSNa9j{T7_&%Pe4B0qB=clMcdG<SbbPL{Hx{fLwW zrW@dLSa1rQr~e;|0zfeGh$r5t{?1Hq#|M3xU#ORHO7Vv2i2FI<&f>@E8+d#NPOb~@ zjYWF6qoyp@PL#=oevY-DZHOz2zeiwW%Q;^D)%OpZLRUs392}viotx#VZ*sTcgn9xb z6N~FtV1XmU^aeKc51}L~&<P8|h*Dis8mH01MR646Ctrn4jZ@jL0(Ch$eu7tU^+I~E zRE~^_1qaE4gl>5)M54^vQRaHUf_#gLAtG6GND-6u&r|cS8py=<l%g8TpQl(~1?WUC zSm~~+@8!C7#YD(t57tTT_20|6S7m(3BNiAb9uA?3Hf`x2CP`ErsLS2CNFKf}a)3<q z5|Z9n4p^{jQQ1Nwdmv4Eu>@CXU6=8tj#wb4c=!!fbXk}BVvkbJoV>7%m*7=dz3>zy z<(ppQHxsb1Zd=?<EOu%^@i6{n*OdAqj8ZO?wBXN8^5CXhP7Ia!f*lh26I|u$>lVuI zDxxk)cyj>@bYE4_iFnc~x?c_|=$2ClNyU<vUwpZqUcHbkT;xVxF7VY-YxRO+uvD?O z&uG9`&j&6!{Y6g6@2HFR+g>>81zc)w*!8=K?<&HkD@okm44(U+#AyvRM1|w6pJn{G z|1O)$w`BBa(rD@|U3uZ6!N2(-R3Ty_Fj`p?S-eMRGT)pGCiJ1;u|epBAp~b6s71iz zBH4*b{FE7$!og31S|u&~<tD{90gr3<ZmgjjktQ@m`B*!t_%mtWwndhSY*@s*MfXGI z7f(kmEue>&9Ka59sSUxMysbb2+=KlJZOM@WOj7|@A-Kc04|AbFuUTME>+E3eaD6#4 zfKqgjHiSD=Uyd|jniSXwd)WrT9lt%riwN}21bgaW2V0f}9HD{!eFY{2=}G~xQ9xut zx^e(n7<<}2eGfdq6Bp#=lLdr5Z(lVDFdFt!CCFQ_PhSL(jtV+}aEI*Emj-C&K!JSa z178Pl13NOe4a5M<q`<FgS=dXwppLX{0|me`D(C^?DQZ5TqlXsY|AQP*O9jM-xs(X< z7U=8xvXBHgkN~;SK=Kgo?0p+fcmQM$$V){Fh|5WcC#;~3ob62sfIA9E7xq#i$eX{f zD|lN26~wOyZttqP{oy0Ay(tQ~q6BupUJ?a)6ZduHZC_FXUtuo&g1iH^HS(Z9!C$?* zVh4Ld>GMt47L)@Zqk|-2E(;-^Sc6`9`h0`71*HLbe2BpRXqNe_S>>Qtjy?eiKpr)4 z8Vz&=a|sXeBp&pN*5~_syZb-7#|e4qKLrC?hP`wQdZp^~4d3n-2W(LRuh2kGFqf|o zPvAkXJ665EbzklZkOPEBfz&XUr4Uc>L9e)d@7dda(tw^X<_&a^1I%S>>G!AnlHT{P zMZ|mH_J<U}p9=U%3jCx3_Mm_aVJ{sZp4@|8q5IzNIJN~r7{H!9RA4E|g8ZT@dxT>p z%F*G>QuWWM_3tJdc%~h$85eH-KU&YeOy@9w{@Jj=OQoRom~Af@dx}0pY9J~^D{o&c z8ITdiUN&g`^vi7R%Pbca$O_Sl*cVF<ynwaW4O)-eb|V22!rK4nyAT8Le~sY4*9b1- z2Cm0$Q=x!}AX>TmE~Ek8s35VR_3&*fR8TiW>(-aQRkVOlL2>{z3J4>JKVln+5*Q47 zi4w#gvyDUzB!{u5>m&5U0}wmFfmFXR#n(qD4;VoMIYMv;Z|8~w*kLa{g0jQ`)F`0H zuR)2V>cwmooBjqO2+EQLP@{vaApRGoaUtBP`f|hp(_cVV<bq`S^1u_q9jT9z1b7Ei zlfFGg3A}@~C+*Y!3794aihtd$yrkFctIaP|O994V>?!*gsezaf?yP+RdD~2+z%R5m z%m=*Imh>Kc0YE0GBWl|~3cySStc1N3hj>B@^8UI~6u?Xlv{3}VOf2bD|9bvkpoR<b z#_a0~+cuB~aHD`?A)a)Cyb1fda<?~U)PO`egl39a0Pn1<hc8anOXw}6E>Ve>JjJqe zT+#$KV*ZPXKaCbQ`sD0c5}a7v6OSHx@qhSYB@4(cGSTY45<0MO7!K59vTLbLa`GP% zG0FYDW#R=N-}s*L>Cr^@gZa@!iF?goSs2g+Zb^Tjk?&WIO4%|I7d#d`9&azj|BCiq zNkWda@}+NDiDopR;iHOF*&mITG4$M>sA#@bXGAN+SLgmcwU;Cpfv~}bkZQz^8#XpW zJ^;X#7-dljn>53r9Kd3;r5(^<i%B!G!5tp0i$yRoD{P7z#EEQ-y&~m8+cVW|iXC*j z&G)5nOQ_|OFz)m@Zo<}m#Vc-Hq{%5))_LWYndF_)izp%LMi1+#l%_@QU%iC>)&7dI z-$5Kg_9UuwB8V^!itn?2+N)c7htN}WseGk44C4c6l!ZBqx-uZT?j|W=*B~MGx#k;r zxRyaXz#xufiIQL27d(Y?wPL&(TZS&G{7z3~6OvR6$ntUYXl6#j@iqu!{>6<#?7lMt zZCqE$QH}FYdbxCE{h7J<6Z$`hr^fEO^hspCeUqL3e-TeH{+Gm43TkpHZtQYq9%lcY zFP4@4KdGl;HMSh^)v-P<2OncLk_Ta3Ep2G*b#&J4&S&nSDXd84lNYM?=2k*39>d*F z73RL^Fk*7-W#M4*gHS|7NODnvL?F<1jfC0CNWRZ?|M_ttSUuByIq(7g+J4UKoXmk1 z!Id=qubcfS_jQB)iO1l5t91+91Hk}?p9N2tU<85?`_2?c(MWCvR(LN+0WK4TgVs`J zhE|wYSP}ju_)q5_D`80Z($;O<?2~VP|Aq$TLV|~2UX;-8t0J}0r)fiUG`|R4g+n*~ zg>mOKpH)|+=RBS3Og=U&hc%dls`wqQDQ&i0dXQ%eo-S=HIfkl^y^e0B>@qIu+E0$< z)@4n_s9H@dZ(#F~b5^3@IOw@ywBOlp&@wDC@fwVEs~t!=bSu|aHntqW8Nx$})rnm1 z@2{AM!lhI$6FPKSb7vuit3GKoj~I?wM0()!VZ2;btLNKnTIIN8VovMZw#ByhFPYN$ zFLs+-RJ!>J>e_nR`{v%gWJW6tHCGO$Z8*u~>N~Xa`D?O0;lJ*mG8&w&G$*RX>1JDa z9t^-)2P4!3=eq(Ti0>Rl&04#G3o0JZ?&D4!OSds>wQviytDv!chbmeQ^LO)jbzSsj z`Z#|%t3{}tgG6JKu}Yrgn$Eb~$?8cdW*Fohqke_A#5!c@er;2^w@3ie5iItg9)>E` zodw{7k`<FReTe7wm%>D62EDPK9wozeMZfo$8lSQq2Nv^cYN(hAljHMs;!f~Dq-jAu zBvsmxz(||V-b%K<9UpmQs0p+r8Z%WGdT6Av)vl?hZD$I<z7$9f<L=;QetsT36fOB= zQmiy3y7;%AQAPH2DwX;0t^3|y>99GMID4epnpmn5c+YOv)3TZfoYjd+a9zX^=HtfE zkb1<s7qnl&Ok#@FY5Rm`?HK>D@-DyobU&O?kISmnC?>DwzK$RWX8K=ZTddS%wd^iW zxG#{XrB+sq;Uq#o@$Ob!A3BGxn~MbQ5Gv}Fx>|m3&QYOBj4OP%$9Y;?CHECY>d-U} ziPB#nv&}n(_=)-0!ys6<;j?>$oHH82zj*i`zP@;&(<`p)&zo`I5WAq&5f&aWxss>W z{JE`ODPqe)a>5H+@`Mk#J}!~-2`&b=9WJu-mL}nIp5kbIcYI|x0lRy@u~dX}<E%cc zfH*R__`>MiUJX2nY>64gLaA9+ggHloVrs|i=Pl^i{JiD+8y$_HjTQLkh|&}j8T<Xr z&F_yg3bU`hhTL56(h<Y&WJScam^=16-z;wC;?$?$?~)XeF?J=vZl=xtF&+z9^(lOS zb|^RAv<YEAeH!4BLBo~|IKDUJT7k3E*Km7g!@|R|F^w^zG5W*rG4jLMI9DdNtb*w9 z-SIHcZq?fm9UHB_E$)!vE0mn$Rlk@!geMKO`ncS<g~X6M((Mb`vCd<CgOoTp@ca$m z$v=kLn^0uoBSQdckAy}^SY-GX#-yt}81mKIsBW(guQ9EsM%*;&qFEJ8Th-Q1>Z(Wt zac++J@fi&8C+4?I=>9!4$;%n{@Fzx2!DE7?U2+w2Q}CVv(!AzTXsSBb2>d;eB~4#_ zDl*5liYV9pB{3~6I&lm+`4*PZPFi9gQC{p|cJh2v;}Tu0>vfdDyfJrld{?adLV)}- z$LJep*X<&kXVSsEf!3U+VPo}wPs(D48I<wkF1K%U2==&6YRGXuclqyg<o#oz3v=pw zd%0J*2;>}){bDcHgN1BCmx}*hf~kyVFoIm*ypOFAl!&x5hhcJtF>-_xqiE(Ewf-Cd z!l!nj`Qr1A$u!Di{F7q+RmEMC3yodGFN!MZgyF3NtgSQftfO)@DXr<U($sQ33N%i_ zUidfEgyv;W4euLXkh=;#WNY!DHrU!vT=z)52DD1JV|DM-Zm7EKe12Zx<jr(^+)t7g z_zi3RD8bdjVPPU0r-{g0*kT!_DRQg8`|O<PO_A0kc9nqUE%D(95%qBz(CRaiAcVnd zbqvXaib3}9i{Evud4gbu19bbCA-v|`^%b6z6Rh|3a6Enc&-o^^{)!CqOHOV4OH1v) z)<<Lb|DA9C2R(VLCOlwa2>0{xvva*`{9@z4-%}4v@+VMiG!X&?ETVHzDkAikl1PlC zQ^>$RSUP+yS%eCKO*3B%J7Kvh?uAy>;u32V%ffF3-HQ1Um+Th7k~s3}Q7wK#467WC zSKn6mCm|cjv5Cu%$JeVXZ-)lYgZX43$N((hI(&0onkdE+>S>8p7q)!}kqAD_hS;&W z2tMos+L~Bd{0w8r3+#prjkG0u{&!>qIH^7?!tKUsTbx}Q&|gw8E0J|u;AEH)l!m>H zm+hJ@lq$buqiCcl6?e8gf>|;-`IxP-g|4yH^2?Mf|2m&)hw5smhmSH}@|6DMcKfqg zHZy+`;q?9-dHG<&zLvGV^)DBi<jrVmJZ~JFaY<-Z1hAYFxe6N}Q)jvk!8T7E%KWL> zz<q!sTULp$uw}vkunOpAMGtN$NtOJUiC7^nwphsvS3#bfOrpP$k{O4?r@0h?E=;8j zv%Egg*2|koAk#<**WnzL2Kp_BK+P^1d8x;hgWK<%SbtF-=;8$APoF4WvPk}2-^3?G zxq0J%?qcdBB~K}d#pTAr!k^yqIBn63q8p;C6aC8#wF%>=jjl3V56mG}pSpP6pFhsR z$}F`ohZw@j@-{cBXCN>uHzURzOInyHo10(CnrGQTe=K{Nn@N6dAkdpWl(MgnI3t|) za9~Q&WzWBqul>#$TR0lm-FJz7++R020oWg02C8*)sBO+copgG;{NPV$=aNUnV7Ll1 zugF6_{j&+3{A&=Jo#ZkYfn%NJH29)!0Q&2-v-~^DfyD1y7hST!aglGu?EB0o|7zKu zQ}Pbzg?8`#4#ntPV{MbSP82<2K3H-POMYz7`lE#zYfEuXeib*u!uIb(1m`ebmT@c> z!F^v206X|39lH)0FF%ruXFu4XcW3&h`<#dc&~5omh-GHag_9ntKKU!guRVRG|BI+M zFr4G5RHEFYYom+~IeL!KvoEdS7e!9K$+&W6IHZ*mH>@R=r?681+0Y{`n4y6l&<f!k z4Q^j(|8GssrmVrWlk&Z+7xKo*AOy}0QhU7fu3_gcp`l|etD`wx7U7Vdp64p#`U*Jf z+YrG}54@brsgxKW3&W{twh53Q3Qy*n2A4kX_o@@fnM`wqfK5|{fZ2P7ZQ~td#Q<pR zD+qwzAjC7^M)4;kQy^>t5Q3WI9$l@d4<kEE_}jJM^{wuopeNCcEx6_%u&U4I5qICE zu7xv3RO>Pv0x^AH@Dk94nfSm|jre{N?F<Ry7D_Mx`QbGsghTp;m~b1V2IoB~1s~e} zKqN!5-(aW=IsV{=?Jb->kD6jHP~5e6Whl$DCeS8O-0{G+^2mMonwP1RDjzxGo|G7k zeKF%Szat36F%dX?%P=Cy;V}@k2;$M$;|ba0L25FJ-{lb;_duoN%&@SICQuzFf~>t~ z_5!2gKUChP`TfQN;rQDL!6y#ai3ogN4@1D3IZ9C7RA;owG%bT{x+%hHjBv1NABUAO zy}V5h|91-kNeT0GQ>4}S<Y3bQ3F`&g{7dTiJ;^*dFDoURNnCga(FtXVWR%Ia`;WmU zQ%dD4=W>H0FEeoE0jZ6^EcqtbU2_y}zcmOz<9BXK_+@^BhHXlCct>IQraJ+oMnJhz z2W`9wf&s7kh1VE%?K!z&=ihXcfBkxfJTLv@1KXw{l`KHG;0~jV9+z^ka*-*LiezNb zvJA3+EFo}(bi`pwSQU3hFbyPXI3l5>|2x@txfLJf`A3$*%(*YyaTbm2dy{C8XN^tV zEZciCYZV`9{!Y`s)L_cU+GqBXc#>|iPc-cwkhkz`miBeV@%0*>ek)}7fHTz~fILx~ zv0y$titNufxy=7Y1P8?Y@=T=x+EJD64T}0_*jM1(_tf-&zp_6MDF57|DS5({-9nXh z&cV_Ui~LgpSA&7ig7<aQGo*MS8;hV27uG9LNix+=Dl*m}QT3lUgG$7uFju0Az)iUr zL`cg>rOA|kfc*=pmPbSDv7(M50-1lChMd~!Q`UJPdca6bR!EwfobXrrOF*#52~C9; zwmdsTO+lpMK-7Nx46}yW=$=w;a+~!Q5;-}x?li0Jg%h0#Q|~ocwo1&nST9P9U$Kh9 zxVSScBGm~Om0o|>UB4h$th5t0`<4m->a^{Zr)6H|N5TcD-N!|3D$nxMc}a?2l^qje zb`=)5gN`{*UeJUM$(-<@j1Gb$5@I8=WhNpzgMuPbf`0isMXF0xC7q4&4^@$wr=C-p zr*<Z0s59N6rfbJeSg(ds33wWFqE;T@k!g(MM`&H3LF*eMqS+jWExt`7n#h7gn?1@j zYRG$1UUXCp>6epUbXMh0ZS)^X#$(9Xb-w=e^wcgmFpEq}r<8#zs9;c5Pb;I7RZFF; z_=~1)7Fp3CrmkIJul+0jOqTFPg_?gX!n%f!O@&$$y;-3qpXO9X`KR{V!)TSJKUbHh zxd7{#y3lf^Uyb{3oKM;a5a|Ag+V42lGsrS~?kwwxqx_O#pYmsy8Lw?pA3lWOVaeWo z+?C1J0pZ-xj%S=7y(2rc-SD{w-a8mu(53$_uHl5fUEKy>bNj(C-3|aEw<Zz%kfU$B zS6%#sWUryM;QbTyC*$i3K2T(Duj=gHjJPJ^8wB1^-7@^+33o<T3g1}W;{5Y`d;NO_ z4;35yZ;7p`J`<OE^JaJ7w5vmfN}F$BFYrEsTEcqD?Dk8WNd0uYGkb~zM*K^14uzHt zc6(+vcP*Npp2yd={?#_izO}CPJYTs)e;PP!*Pc3lNOpzxl(gO~Kcv3N`(l1Jc8B#; zKV7@uXFY2R41HEu{NsK9CRE!qv9)Y?Kzv+#=YM>44gX^J93D2sjOXV!26Lwv!}sA} zg7z6-pW$!r0&8A{9X3nNP-wU^Tz8G<9m0YH-{U9-5yLGu<DsjDcO*XOVW@_iE*6W6 zrQ9eX$A&L9kxf;S(Kw{msH$gFgYMX<$?@BFSH?Lj!|W0b_AbGal^DbB(8jptUs{Gk zF8alxXZ=hk4VJEO{a^*!cvXg$5obiIhDcR|Ml_O5^>Gtd6q8Lduy2iSNhe&a^+A5t zgb<Zm8#ywonp&*ZRqtMVIzqP^-MG<J1wqR~>@OdESk;|zma8y=E^#DkR-|%=$a!6% z@kCs-qqo|5!^n_<ch8E&7O8#f6*~0!-tM3G7#`C+l<<q>UHjJ<;D{joW%G3O>xJSV zI1vi+oNCHs_}C+?WgoW<yI?2snl5SJXo#vC`-FsPpZFR1+a>~+tQK`XW@5NqBhpWN zGUnHnH<Uw?U7cu8u*1159e%s15YGsoHOf6Oz0lFxRvhYIf(3A0BRpX6D3JH=2>5HL z(uE42hzw#F9543{ePm*!dq29LvB}}G5Z7>lc*@1Al^e*iD7=Tf^1(JJ;#D}_xM^e+ z4O|Tl18ic8OQ=iW<EV>T)LQUWKh<pX17x3d9Ky=Fi0y-IP#0%KJD!syo8ZhC;%kDD zI=wT)`yL`(SS}QeIQ=-!6?@@x>Y&)aBsf{Ff4oZqL_cc$5Nmo<3#+i~L#)32CzCfN zofB2~*W&gH?f<pF{r}!j`JVzju^RBUx{J6USM&9I&Q63!?eYWUzQfX1oATKlO+4l3 za{8q!3OdIFt}4_(3b!+!;<J^onWE~oU{{lX<A9>ru;IVQGho4N8B{H-YOvK=I4X-) z%q<n7I>P^rv9|z<Blx>T6C~Iofe;*m6Fjg4hv4q+?(Xie1X&2~?k>Sy!lHr2U4pZ? zJ6!%>-LLB1_ujpAtIkZ1Pgnh>yL$R`pQBb3S+)B5xUw*3*bsMe-+kKsdYf~a?c?mb z-t_=Gd<TWYTr@&i*$E_E5Tz6CH|GsC`UU+g?12-B6^R}Bk&pr?Ysrvj7kWbO%93{+ z>Yms;?!18Lgt)Q9L3HG9$oB6YW;7OIV=pNY6*bi5wy0PgC{xRqI2^-CJ=GdvJMH=X z8+Y2!cM?mRi*S>?p`a$k3q!Vcj8Pxu16BJ@1P^bA+^#|@-mLK=ngqGdh%!?u?sNi$ z5)31;=UN1719MECGUTGE;j^o4Nj4&xXj#KzwnPHCx7KO>*G+Y0>V9lXqQ~c|Dr~Nh z16Q_X&bZWcY2&t+hidihq&vnK+um@5(dtt*IDzajJ6U<Kxyqw+nXGm&y@Q{n!{(2C zD~dQ$hsfRfvMa7Rui_hO36+QlOXfHkNPWbWs`L!Y^#?(-Y(t*#DN|!-JwHV_9pvKy zKN4(7#JNeWAE_*(1<8#zc=38wh-o!}ZKxg@Xr)DgOP>{W{#Dofx~yW7ol^dFw}du4 zx5=0lX39H4?ThHmm$b&2m9Vk<HUPvoOg)QOA}L+qS5Ncd^Cvkj_RRHnFA=&M8<uR{ zS62_H2s<&B<~+RVM+%dloszmv#JvUOTTtxX`<PgFLwU}4jED*C9CL7#Yv)mJr&)#i zsnD&4xQxiqAFYO_Sj9M<fwI$%fgq%fTpR%;Bx)}u84no`J4TlPHh#5by~8Rnf^j3} zocQC1W(3w7i6{6Bcq8cnil84IoUB*?$_N04a`ikJ=@(E?Ib~2)oMH5@oD<MfXOQ9w z8TbQ|Bo3;$$@%N>z-Eh3<^FHul%H9D)otsHD{z-97wiWb)sJfPXKSWm^H$fFTF<`f zf;qDj7XP2kZsrPul-Zh5*u2<texB$0hPlno_muc9-sd<^WR0(zm`X;B*Z|B#s_z&W z*C4p__V5oTL3gk1QHLZCiS4~lfR~{kE9-b@7*lX~KWrUUz7WSEJRI<&=V|x!GPw%2 zDgH3DX=w7#LdW3#cX^hJP+@PY!<$D+Xqn^Ri((MUBBkgNGMI+2OKZ`?i%qA`V{%W* z_p8|PgHz9@l<O)4d*QNbYZ&mHU>|E-!^c=Sc#&2oY|fTc+$SKr_fMF|=@%Q2M~vp1 z^hA`z0GuI(14)Kw%co!DC)?5(N@l!XPKm|V0$YVbGUU2QvqXi{jjNBt@VuT`A_Vga zGUmStbmM0^eSgeizG)0W=Qd6|Oz~Y`z9|3bOYvcdX&j0PiY5qr0nJ{1;phN3_uF0O z0`arG6p8c^>_}Y!O<r{UhB-(`pbIZYW5dgyZ>nP<LA@N9NrDi0HpYRvk0b9F=6lDx z-e>yZlrK;!_IDwUE_^JtSO=NkknEer_IcmvA=eHX5?J$<iqX~*tH0m=n4OTCU@4*P zKW~`0|CN4~7A@f*(O6+SgKNO90;T%%3P_Ev(P5xXOw;$N$x$v``;r)i?8Et9pACKu zC0#Gk)Z@Yfmj0!u-XHghbHaX`&oyZ8VA37#TW+6!TyBK%90PBNGz+@m)Yx1tony;L z5a0A$Dt3FqdU?@6Woqezz4k{iuh00qF!LXroBSLSjiVg2p9^`U-6;7(+>|QYBdKJl zK-(fz+!P{`FCf#<A=Y@oF9ekJxWmhm$sZR%+ZK|rpDQ8TRPiLDCt}XT!`>9jaeN@t z^dStYaJj6pL&y|2SE$jwZT7zcS;I3__ebKRzFMK$W0zXQe)(Q(7ig4`YV9_0g9$#K ztuuzY(GYS|0LEvNRPPTOQk)oLn|=EY(hI0~;`|!A_(aUna(vRn{B!BwFD!A;Y$-Ly z8c+_H<4GB$M-{crfz#1u;`78Sk-aRMf@P!82%Xt%Ceiu|AKD$nlv82MzmF`t@JqDA zdl?GlTxvgvG#h&SY=RFy{%kimtg039RUK$1p>i{|S2s=Ne$MxXn|xJnl|&vz7+n&N zBn(SA{1=aOVJu$J4joeo%vni~+1=dhV4RWVMAl3~2_{;WP$*CChFbPp6~-9H%p^@9 ztyN|u?w7jXA8MoyWPI(U+o9Vrp1#R%nB1n?q3XmHdC_xR@@EF{mVLwnKa@_Y42a_{ zlm<888ZW)|oaWE?i%oX%DJK%raY$Mtmys8Wm(9?{&EXa?C$>q#upi&(+$fnNyp#nN z<~jr21_Qvfn(cCMtGUu7HS9U~I?8*ci5T8qCj*VNudE1Xpp3x@HZmnvLq(Rf`H_Ag zU*j{L-jYFLn-Z+py4msgbM<OpqfU!E+PwY0B|X>@lWu#M&3_+Xc78^dN2lI1z?Iii zgSAEas-n!R^|`4{a%9p=%O$3(+M&)DJN`db$!*`mY*bqQdo}Ismss3Yz}1LUa+BD0 z^9wW9@%UpkKXr9uI!;NCi$cFl?a)~&EIq}@sd-MZsuN*$c8Lg0(C*Hp0WV-FCU~q1 ziO>htz1HH(u(?qtNk~mCH&<U5X6$dW9>60xu?g)4;ti!II4g9$7Vn?l4bB~d4+?XA zPG7)6MSMsn4U=(=48y`i(cS_}VZu?$6vNT{)YqHjtIs|<-Z@#xFT-nb%ysM1DT@SN zxR0GHkhLVty4&sW1+9BlUfKZgvyy-CvsAW4K%7F|?GERn;I={C<;Cd&;yuOVkFK#7 zY6BB8dhAC@tr6z06^mv?VR}k!i-XdbkInTVdTJ0ZIvic4;?`om9=Dy*4%xIFj2*4< z#DorEuQ;L+q7LQOo{GdM-#F(m4F<AHYHRdvDZOC_C5_7>YhHtD_cL4=t3lDpuD)Az zjXJw8xGjgXeB#pln$bb+b!@&I&$Hy=jfK?kY~KCHza-}y(iH#L$g@@fz5p+MT&v+9 z4_N}N7m{p|A0v{^$zL)p5s=P~UyvUYlg(A!fA<SquW;Dqy*479Z$4l3j*s2PyySn- zxNmu(QaE7ub$GelqSUO!6k+f$0dC&PDjQ(P{RE~?j*GBU=y{9zA!%bR7Rta1G#8Q0 zE{t{v8_4TN9q1i|c`3qu<+uSh2fWe;>V43lp)y$p`+d>SL#l2h0a4vn3PCu%pY${C z+#gnd0yro&`guf|uY<3ES6|9!)TIj?c`2H|!|xgK=hGiE@?jETrCn(?oUMlKV~k08 zZHMcxMAQqQ`ThI^y(%%HTvNNI?ZtTiBtC8UPK<tT`gS?%K8pz9=?5IrZt@R&^><Hr z|Ka7z{mER9P~N?>|35Y(|F8Q=x&ND%ld&aI`@}zSzEHOgbP~Z%PY=E%e*uEwr2?d2 z@c{suM5@r_LUbIDP5HV(GrkDnSq^L)s_%Ml2Jei9O21Z6v1&KSen<w=V+kX_;XQUR zA|u^xOah%+1yFy*<;3f@tM#;tm$K&R_Ce>}iO^bj7T3N6)|+wA!qtN#GKzV4+Uj6s ztd`*K_vRsEpj32rBBSpkjKfF%=9sD!)aPFy^no_>9iBr9n;!*X=d8b-SZF#@Kb<X< zL<`G=|8SvqFxyPGvZ(TeOgVG^jbw3$JVIzxwxY7W`bjl=({;?VqVtlo5-tiqfv{|P z8^D>Qr}L-}E!pE1vRjN|q9q6`@b?LAKio!Guj|5AGVSH8U9^;~mG2vpv!)nBp4BG* zBH{orZb?2VCKQ+Hz-v`0LZw!Pm6$RmY0q^I)sTU!ZOTFA(e{|Ium-ctI&jBVMWTpe zd7CJ0zKXQ8yHGm<bI>LX&El#d&y3dg?;I`DUq<|$JBZ{3&4g6?_ac~fHEsGQMP)xE zivu16Cn4I4F~Z$6L><HV;<CgR!oBpJlhmkme?Q(iXUK($Jnv)u4OCg%Bc|_I(}QkR zFwUTM>Y=t5eZ8yB=h#;t*TXO+lK1>)Br64dG4y1hfIen3HF9u4_IH|*3o)(gSiM&! z7-AlSH)ShdKe;$YS+Mzu4erv17sJ)VJ)9!1mH;CQEsSY!DJIM1sKX?Km=}k+KN=oo zkU3OD0x5xVcsQfKRndnI7M8aO%*L`@)lN|r{kUafp|)+PpVGWoi!!r%_f8wD^yk@= zMpmKIS19~Qzk-YNs2?J|*Pa&t1g8MMkPf%2T$V@ZJqNi(D)ILp<suqtb`gk8Qy&|E zIf>@>;L?~5o^iM}H}zx21tRly<MfI%hs59v0Ao@@{)ZMyDbk1PA@Hfv#phF04*5wY z28GUr&K>Spd2&&M?k|46VqbbpWGmr<nXj4a$uIN+qdvXqy|yEKY=_gRtO||P?9mA3 zy`fLU=0jM+rbm&y!WqI=4Ys3J{ivFP^<_a{_%B040vgzKnf(1dhVO-*>hP^1!@7i` ze<000dHw~Z>k#fy3K=E2VDGP|PjZPW3azRr>655j(fXWI2nw6loj%BjIr+OyGKZL# zwN!#G-<3v3D>4+Dq2fx3^e=f_nExb~H63$!@32`?Oh&rX`A_B*5BmfLW_3ys#>`aP zd<_0{|6$rhJztMl{=@$#;ERC7ip&%Jxz}dWAB~@!O#OHpxtzl&zx$O^hSH3}`<det z3<o8~UA7r(w`kuCes=ht3W1-Ul5_8aw;DgkQU6Tr6cNk(!u2-OKZ;A(vE#@}><XuF zG+SR3PpJ54C(@F7D5aA&YC%ZRlXMy7GmD{4ma>Y+$Lzo(^z3kK-+S~KvM4>s@q2?T zp9$QfeRX5>5i=l=&Y`9`fVgqyW#V7F!H+lt<M571@q66#o%x@m4p7SOfuBzpI2S%+ zBV=(&g8#nWvu7uFZ)n{!B=0!ntG$pfZRb#szhZ}6IPB3&{1Yqq<+^vQc(*x66QY?3 z{8x+dVDc|m2Jlbc7*|nLkjHA43HvM$&F8BJ8FlN|Y+BoHmD~3#a{IJ)w9ny|?_d6F z+`^$dFF)kX(zEEzH0yuQBhmif@JRpDEX&u!S5@ud*2O-}$DA$5h$b-<iV~`bEsUNQ zhV=ytTNX|dogCq3p&|A!il2zK3+?&Axh7gfsP2lDhvn@}jn$o;rn3W05B@nWr?U2j z$=6x8w_fW3`hq!+e&e@mE))0Jd)(LZ+l%X@D-xn1;2VK&!jHd;_zx-N9-}k>^Vz=} z_WVqjwh?6>D`E@fUd*jn9_V^$ShSW#1*{967m+SdQ!XNB^plp>)4Czt`nQ|sL;wfr zW2UlBrpAD?eviVN>Y25KrAOt*AJ$~j$CPD$jExF~H)S&d2}^s*kHXdl(#H&CeoT!H zEwv$)r#fXMo7gXDxqc;nH8{^Nye0m%4FUI-KiyMvp6MEM7G4+|4HjOktzMIt90Ul9 zo-wKuX2NDT?Ef{7xqaxLk|WzWB&GQrVtU4Q*YZqn0~eA*t^~6yTuV-PU)G%9{VRc7 zM&Uv!Z7o|02^4e0d~Ht)G6j7CjRVR6diZT@t|t5A(2zV@5f;!IzzX1p|G-wreq}Ob zxIe)fX!NE33rH5k2<ina0z~jZYycDdan@iXDiMr+I*=}C@@*f&7Hxt*@oSJZh&;!L zLgalv6=*nFKnxb9oI`(YrOXol;97<!(<usLFZ9oxktx!rxppp_NPJ){n@D~*SI(il zZdJ|+*F3x|>gp+BnPEs}jQ6Hq9#F2?%#cY{mGS$!Y^H25-XspAt<^KK`n;@NHZRqg zoq(=vFnl9g##wI{@6Eofrfl%{hN`T_s9ha)xKM4ur3E7@>{5c2Nc!Qdb0z%)f~Jf7 zKP>-MUhlh+Ez23Wu`SE#ztII%DGMsV_GF&n$_(hPqYC}&W?14Lij=!$VJR}tsAUFU zuPX}u8)s_b9=?|uFkBxN`ghJW%lL)QIQ)8$FFTEY04sM(!Hmk*8LxE;{VQf15*~62 z{o7|we?4R=cgw&$Wc-?EPU9XrmDee+JC(Z?V7D^Q@5=<~uEPsoYG=se9t6rxQyvPG z17u-Hg)c2LIlmqflmnz;3Np_GWv^PW3F&7R<p6ougv>Ky*{d2XAmJfO`K^h-BJ+$} z)=huiE%VG#*3Ep)S@=>svmXDjto#~2vmW=*t{k8MJC%8cFAJc%jxBttn-PqAC^<@+ zD16~wW+{B3Ual#8;aGMk^#66-tStEFCP(=-=J*yMsQJ*%_+0zNWwWs3$X4j3@8JOk zd0HANE{4%O-fWNu0~Uyvzo@jMc->Er$h^ljL!7oq{4D#43Kfxhmve@bLt~C}qP$X1 z4NMT~jSAzdGu;i%5032E9PX*VnCjac#uW?OK`inT%QVAZW1#2i%55-qwpzP7@GA2C zo$#eImnt@aTu5F2U^~CB-np1$CPC`q^bS)Y^Wk2KQz*OR>7p;**gTDX9YOvBqSvTQ zG43agxA$)n!9!~=A|o@&Wj}M7vL<+WRy6!jo0)9Q`D@yh`&~kYY~OU)m<_K+n3i_A zqD@U?3FYFSy;xN3(dQIm&fkT6$ugk6fdNFb9Yh=k?QULe#UXRtdzB06)zj$4#%NV- zb1u=w1FrB=P$I?8BK9a$F1xz#?G3^8zFq8V!{x*(pzjky3`{m8X{HTTm8v_WF{Va! z&U1#JiasS#jFq2#N0#r6uJ5DJ@zN>THj*{xF{Mjz4v#iuTPE*M8x#Img!o%#QnJ`D z%Ys{Wm&=qYVGGgf_b3-fZx_EXhi|=zYJUkb>UN53j-n=@rfq3@ak%j5JBsMF7!7Gd zS!F34iyTX>4maFZK}SPw&$EBzWtXxp!oa;4wHdoil5x(ZEQdE?TgkD!dGV!Wt6{lF z;xZaZe!A8s*6f&ZIGuuA^RVN!X}-t|FCvE0;>EW%3casOV2IOe1EqlUuT0f+PVT8c z`i^FKgz{3BUDijT!NXy&#x>9666d0=#Vhq{g5l0?Nox4gZpLm?kh73ROC_Cyu#l3N zzLwTMQ#E-(Aru^$i`5z;$Cab{$o%+t0@+JN(FR)TJ}2wDa^zcy5Sl$FA6=1d-g)C# zL=M(FQUwhh#SbNqhCj{`l${C_0Yb-F<c?RY#Qi2kg`z03AvvBaqQ$?+`EJL)#vq?< zISm7t2mNQ!gd}31LMyE;{xoHtdBo^+Bfoh)@a_<HT8U=ij|KdV|7{CXf5CH5praqo zfr#d_Ptbj3U}VWuQ~U>WL{T&wRqPrOhEHa!`V*a?KLc%H#9?=_Guf?&jI_0lK*nZ8 z*e)YSqog%3zn1H(tS)5i-RM4oGX<Z-F%J8PIwY?iO=<w7n;rd!f607lGm^Zxm6TSY z(P>{bU4?gGBV$V=4`yj*f59Brqq+pi$zoG(9M?<-BOH>CYHju9<=)gO38j|PBe3%H z5$&_U&A;HJYdMa;9OzH(mim=#rlNok10D6ByMXbcvrlw_BMkG7-412^`2%ITip!KR z$ggzHiMX7t2HtpmLb+z(x53#znR9Yu-1!mQRT*@Y91T<{;_>AqY|0(0p_%G(LstKl zoR$6Lg%y}uq19bW{Ivd&FPG0`X>yrN)9~A&!8(LfJC30fn6Cc!Ox&g}NrE9_j=)Z8 zV~E}sytr6hY--V-9-nn=E$!Y^@pW;rDkDD2PgJG;cdWg%ySvQWhR)mR)v3gzqvW@1 zo8PW;KP)zFKGDpc<hbVeyTHDG@LW4ac#keq{;@MZ{Q<VA<`z{!G|GTCuYSpDQ(9h` zrM9TqztU<2WU1+0tDO%ZYs07IU%`>uDu38bZ-b3J?IeNmrDl`dT6H_MRJxsULp}K2 z)rC}EWsJUMC#!34FjmxPX{>63d}n1w(it);j<qwm7QIn<ZgkED>tVaY?mD!yGwOI6 zb9sS<SN?V8$ORa@QmQJG9q!c5!;$4XNejA^U%G-hh`);F4^IV%0%0@W5xH|>bH>rX z+mdJTie}EG|0K@?{l%(c>6*qDDae!EyoTa5_w={Fw4RhE#TsbvhDsWnQpIgiiJOXH zhfqcwNg7L1eFMhhf0hEoQc+OH{!HYfP`((F9HykCj*U*_WBdQz*%Or>k4VhK`O0m9 z{P^39eXz?~SeDH=)Zbf9MbFG-))}F*jhm1z#=^|*(y$SPSv^#5)no@MZ5O$-7hZMM zU~1uQFs{wADi!(7C3@2N9-^mr_&5BykM+8b^%3#*<U{PChK72xegWl06p?vZUAl%( z;@!XUo`1TA)~nxQzPO)!q`&>C-fEKdPqis7PCdqzj<*!UNA{6f*mQQ$hoH-#ltNJt zOmh`685%qSS!zVIvDW73F+Ft&{rAGiyjEGR!HEsi9+zBMj^*LvKE-HSSF8IC)8-#( zA~U-z`0iHKG%AlF%2mb;86NfGn_>Qe*es$qhF+B5lA7g`x~icqZ*X(`??^n!!E^h= z#XT&)L}Tv&`LPT&rkS~(#f>zkfvg;Vh{u9=$gYWVlK36*My)mD000zGRmV+>gh(@I ze4*j$sQ#Jk{=P1E8~;7MgQijy4{mp#iIsbribsr|M+_<!CKj#YqIA^nehsgBBn^Pm z1t4ZcF-|FrlRFlRfV-`HPODNBJzb}}T>dXa&X><db5>K0Ukb%;Pv7&yx$n`uxRv7K zUhFYzoX+boi$B)uLqW~<-GEWhLHjA$%FV-o!seb}IzR6+i~q;&rV;<K*$AB|7sGjz zBmqkTz7@^Yj`F&$;hNXV*Ufp<1}Xn%jc;=`uR3R(p~dAN8nv11Ds|O0^d^><!wxcU zISW7h0~DZ(ey<Y5kT7S85<62@|Nh;nuZKR`gQ>*Wlql@7$ivJ;#Kld`<r;gu&DzOM z4)>zcwo<Dq*+Aj)0s>0l+EC*=-kh9De;8R>YV`C2Xe6Z_%+pxj`#*bxe5v$tm`y$L zKPF|GXA5120#+UHiD6fQJX!r(paV`m&;YLK9r|#M4M8dFit=Hsjz&EwflT`1p%HE7 zu|NVI5_4^XXVvQ8Z?VBQ_ZU0op!;*ZMlY<nK@Y%-Uu|J&tT}<Dt~PdxhRLyzfz;g; zd+L>*MP9(kp?(h*Edb{-f4h-FcXLC(w)S-LvwL0|&^>|&gaHNs)Btw;7!x`(IukmJ z)M3^rqwoFa02lmSwlR~`iP}ITauLLS3Xn8t0H6kt!7nFBW@9wb99QgjgzHBIX@ht` z-k=YlBmgZNkS(*XHsT*6$c3QVbOGW>)K3ENU_UZXL5x|caT=To<!X8LMju{Fhhm;| zgA%;bSuswQ2ZxR2Qju;~{|-CLd19QjgA>HkYv0oFgrf9cZ^x?_!@RQk(t-bYTO1f@ zi8$gM9oOFk2c|+_H@fWP*F<R@6yzGXTVA!P5`2X|LWA?|lodmrgY#E={dhx${>fkm zg*@I;kuSZ~qMN?M`3cF4JT%l%7~=Jo0gkUp!|r)s<@2=CYc6}Ab%5RGmNZK-x3_42 zm4BL_G)D)nTUsDIr%UvEvMM`G)JVxU&y%hqlpHx&5XIU(i4RF$*y#VIElq&zIDQ`V zCO(|UzVlM#pPy05%SI7Q%st|p6mQtd%&$U@$la$~ijo&bB?kt1V}~lF_A&7FVI_}z z#v%!2ju*{8V_y$+N-ov%uL93~)@jW~=?i&p;U<Z-#*8AIj?xFk3ALg|evdY>Wrnax z3>f(?AjrACrJ%Gw&r@sSD^N`>q_W9NuR&GrN-Iw*oS4FHx=0Y;>Sm|;v#oumE2Gb& zoxXJigJe?<*el%L0b_pq!{u=a(*LyYu@pCQyx(`cKZAq*oez5a@d1cAa+a%e!uvM_ zk++|cid5(!EVqn5L6nzL3W3Qr;=L5b3<pZKtT57&hc>pL{KsMO$TQ8a`O|@)CcA7< zbu%e=Hk=|24y)4qnZOmt{l-f_0L|~R%0sLr4eTWYsVkOSjvfz~&>Ik9<DY}YV8t*= z(rFAoL1y;tL@S^Ckm(sf^>0DW#*b>3TLMC1j;fq$_T_EMxN--9_WwloY855$3_M&@ znkWcjWItww$sSO9mu7w_NT%W0oDw6VME@p>(>W<Kr8*mt4V=WuVhB7DOWz;;72`zC zM%BF*>lFYB0;B;#2tc(upz=vJSv6p$L$qoZm&7W5@1pp(vl&JRYxGY1CBUDL^!{<z zB?Gh@g@WI6pZVWEV*nL=RD$A*L$M>dZ{T}ZkTD1wL;x84mgt;g@Fj-x^G|M)&p*BN zKL2dph5IIB@WosQO_ad4Rr8B^<o*67nxgf3SUy}rzp%g8M-l3NV-P)v8ZZlxAxQql zXi;j!6=Z}c!X!chKi5sgtj2uBp^3(i{<Y<;I7rVrQouXB7sY`;eRJmq%>rn@RT^!W z=~r%fF@nQQrPD8T(-p1!-P!s-fWUx~Tmv(vE0Tp!R7_iGquPp@fgly!?BX*(SO#u( z*%@P)1p}YNzgE;{dcKLTw{Xn=L9k^j9({-8zX4PhCC{|JQAD?C4BaB0KS342O;#ou zR!vIx)$Z0UAe;YyM!Wxe*!<U(>XBuul;&w>hZ4Ot`Sy-1`gO2BQ$|S@?Sh7PI)3hl zi7#*3LPOuDRIM8bu1oOWjF;WkCAYd*j`^%sik6GdP4{GQ4v#s%g<@om*A7U!SaUgc z)sl%S5w|4%)+NW#E#o$efS+g6Wg%`7`TG&c9*c<w<ETCY^*Siy=&K2`0>N%jEro~> zD^2HqtlECSL3J^BfVDz=U5}X%m#m0Tv&=bK-ObE!O^H*Z9Pl^)eeB_^ra=g^R)~NB zdb_ad(uCHB8kfKOxeSx14CgH<wj6EV9QxJb4mHw_yY++}!<^Pi{G+8oH41%_r6FH@ z-2M<<w`hSGwT5)V;>!~U(|_?tvCkHGj%&uQIY?A!soH2++81mNO%>Xkf7NEHcjYA_ z^~~bLPr;vTFdza&5FCI<%)sAto1`BVFh;kpzVXdrO`Euno3t{<A6n*AMLmoyGSQV( zsmSYiBu>w9uUQ{Ax{cTz{_!5P@#QFMKO}Chnm+c8J`|H#x>@E~cIfvK@)>EsV-v5O zv5v&#YEQsQCf0XU#yzaArA@~3IfuonnPBl*N|@H-myhhKtz&oA=HAzCR@4={bJ-&O zB-IR=QaP?(QmA5io*A+=IUQDQwGN?ZqtlCkVVuT*_HVqcS$;*6)KZz7EN%gBOesA- z$(@XhEsu^r?iV*@o*Att=Bh)7l11^9?M9!Zg^4%@5U>*w#PusBE{wDKqugR&y{&O) z&i6&aFR372Biw&3gdlF&=@&@;9+B5+9>QiSZliSzFI_qoIkd|qWY2EuepgN1quP@b z_2S;->w}XG-coY7>Xj#T0=2kvoDu?hCcX0fbGMe28e(4Vtzo(!V{9w#Le5JycjQa0 zASfK_%eoxn%6qrvpxL9Dm%7M^9rf#M)svx$!C+n>NCFk@)#k5&n($YBVWP1s;hied zgV$%V*Ls-wjkM8oJd6XziPS=Q-0eHc!q~uI8Q@wSk+3lfEq_Q#Qe!}cRS+hh(PBM* znkQGUy_aan{#KvDIacXVuBC3!8G2~<py05lf@%9Kjx~v!7+vPdi1H0X7H6yXQr8#G zvnxsgfyMD$Y9m3<7u7Q_N&zuvcT;R*TCW4Y<IjLaAlcq#(S{kbK8C>bfJM-R`}tPy zUdx^CnHRGFnQu@O3qp<Kx!6V$a~FQc$UsV<M*E%enHh5zaR+2T;hn+1&BhHkW_`@H zjZKDL1=n-&Ga5XH4+cA%6}<}1=Nub0dcGug-gtrpz9CT#2!aCxoIyFT&61#;lTC|2 z2lsQP4U4urtqqIzJMN9WwmbE+OWh~mGc?^N;j<{+C*w02-6!R<QQar!GX~u!>9Y#m zC+jmCU0<TRMrMDKyKCky65sHs^><y<10F%^`<t9W;d)QzXF9r1>SxQkPYN5&?RO*_ z9&LAe8y@X<_Gdo2Px@#4%w2d-0(jkIPw(*pu%5{A0`Q+c;;kcftq+hP28<101`3{R zDg+81Y$^l^9&b(rzAg^rAihRL2_n68M0LM=(ZG8px{G3d!M+=1enGvfV1Ds9o7a7E zJLA-Sk~?eGeX=_XXu0FvIBmQ0**I;#L)su~yOY=;Yrmu2$Z5N?*vM(W!`m=uyVKY( zXusp!K+=2CITK-iQ8+u*eez+u3+Z}*FX-QtFblvIWO$6aOS;2Ee`WHI+Agu_4e&TW zo{^%&>wd4>atGc>j|%T~!|O&|fy!2gcUOI7AUT}%9iicxJ6%z5wI!;ms(-KH<q_2E za=yADgx8J7x4r4po1pvTe|E$C^2HNL!a$;AO+H4>-L;6T>9>pEY@HslpI+>lMl+?S z2VMYNM|hMV;@b2;&im7y&57V!_p2iA>l-Iq0||{blSl4bcH-srNzU9NzDZ2q+^Ab5 zvh7XyUUoe`9KO*3q!3K^bMlSFm@abpP7xB`u}O}VI?BvPN|KC%D><s(Zsqq9Az7j{ zC<~d<kCLW*qDz^8!Yh8$z|=_3n_q|&xaTM2WRk%YFZ_v~oTF2acPc~hx<Vk9u%&w* z6%7OW>sz<HxCUXOC|dt^3cJkjq{(92+!Uxofrk;;><@yXcDpMQcBchDWO@azYcUXK zDuQ_y(z1fNID|$e{^@RumJD4&nXe^m37(NwB#vKbwVUGkEVYoC4r7whMMuSz3b1EZ ztLf?K=0E-^gR{flMzyQ|J`nf)S5Y6VcSCQIo)4y;Fsjt1qRabIhR}L9TSYe#cucU* zrA?Ob5pY~o80}N$x5qydWCtUK;nOIb_dI(rkdY(zRL{t1wHIeo1=)P@V)AVW!rlj> zP96-kBes55!Q^3Iq9f@vr=PGNS`^yyqexkrRxidquLOz9g+n&+3ESzxS(|g7q%c7; z4g&yK<HuIgkPo`E9y)k=6RL?VV!~4NjoTi~nfsDe$_)Sq1VfhN-lVD9a0pLhM7E;w z34IvAU!813YX<pjr~09H_(0MhYqW8PD3-qT7~sJHXexvd9_?0n?+z#s{*WW_mqmE1 z0($4M?FZkg9}eN%f@%_qn2;6KNvsgAi#(qe?8fGuyI4NKd3B3d*W{jOZ~>Fw9#U$Y zMd(r4E%7XvyPK1H&T09S#e)WJLnY1#BMpaK;1fR5gY`CN={gG0$kOuBsefXHiDCoY zLm?Q@g|8T3b`wikjXF{?he|OG%cBqA&fGc{V6livfaO>q<h_$+Ca#Fdn{u!03gPcO zCuCquAVk-a7#+No>%<6*i51y8!Y5=`t!#&o97;jC2nb7rwg8rV7=)vFbpS#ONZ$D! zKH+5&#NNp!6A65o=kyV%F0!R;Ss4V`fqDuP6Yl+iaw%CIkv2n;pq>=K>R^Z)w1t$A zQ+VrxB_A~g*u}(>QIXK+Pn8op&^`#_l6wwk*?~pK5(J6LJD=hLjz{G=#ZN7;+k-Vk zwm6`k{J@i72vOd-xg|hki|H-<WFlLp9Mvvcr1KuaTY6AW7T_8t81u*0TR^aY0@&dY z#BV@(B|^?WRp(BYzHo#&L6E)Nb1%y$BH#-yp+U6BRv$hgnp&mL0LkHe?zx+#FA?E- zI0Q5I+{E$;nNTo7#6%1LR!Jgb-@Mt<fZlNcNrNF|x#tGZI~?E(GFWgh&q)aYo=zn5 z89bB#Pf(N+l*qq0V@+X~{+<K1Sx3x>*bs$7M(_!v5+MyO98KYGfk}k}ujbbA0&jvL z+0X@E3~-c*Wo9+-CPK&L1MnssB5O&E3hvK!qWVufGP!{215nM%hpkf2$Aa$|go7em zqL!I(;4r8r0(d&t$(xuk<quRd|7n5KUNBk6gd0eT2}a9xA_uAqZ&6t45{E-z_=Fa8 zf*3!SW8VVzf$%W*T-4Gw6ru)Q0DvpDpe;ZUWGfMJ)xwbt02Ae&t6HuAz&g3-ww8Qo zgcA`WTlM&aGD(nxtvOF}pgsaPMQBS6>d67rM*}bCp0{xUnPc<nWUY?ynjvo?paibL zfty9PNT8maz%@j0``ed}BVy7@$bR4yoA#J@{@&6Tf$%LxThO~tKmio6!eHKc=vxly z!Oxp>cYMIEcVHHwEgR?^53man>>#|g>}09?QDlp;=o_UynC!<^IP~r-&>s<OAhOjA z^~55?9LTHt4uUL}3))Aw3zC8$WO?Tr($EOuw%qYHAw9P&?|pM(!b4+AK7A`<k{WUT zAlFreV$whem8C5vI4ie~5=b+cS0?~^lb+sMXyI@Vft)}WhzO_i>d1f?fshv{7b^xB z{TpyxjSy*|>aCn$ghAq<T!e&!KejwAiIKowZ#g6o+2Sj5(p@2>71{b^$rubFfO--G zlSNDjfRIb{jX(H=dko;`tvN1C!ab4y1O^T~3vGD|o{)(gF(HwOrEV_pCPv2u9#|a; zF}Ku(2ixSGn_B8(f{8Yv3!f%St04RWU`EVn#mhGbY15c69(cU(Lhys`t>`RMM#_Wl zuOCGt6HYQd691V#&>sOzkM25NN1nekvjVQzI_QgZ-I({ZN451*9Vw1=M=kX>EDA*& z|J~Tg+WrP2I!0GR%sNe+&?qgcw4qxNZs~Ahj&xpCQ1Zvb6XVy@p_`viK7fD1EC?+d z6#<&YY!KZ}LY1<kO(*mTlaCf-Q$qvDoK=0`B9?WA)%<_%%Z(sYIeWqj80K1!O*$nP zRGN;)G?ZdR1w{>DH^~=H2vtf6lEewX#|fat38Y|OS0z^FNQhiVStk0UfM;1s_@1@X zOARF0uZ|nU*M$zRi4KIHKR?KJCw0xAVx{|+{Cd!%5b9QFm?XnGzJjNa3ea_(&-vtc zT_Os4iN>!Hq@_7viK2MMRm$&XHa~RuiTZ3;rx_r_IQ^REJ>z?U3hvNmcdsE$mz=P! zm@ELK3q1l~+CL{?4<Oi~E4NAJ>w;gK2C!DYs_2wt!;Jk4IU`%+*65N4_rZshol3e9 zd{0q3>_KtmoEXg-hmu_EO$iO+lzfi0u)?_gFEme%pVrxQ;F2Srb{AMZezdb=)VCYV zVO%V)P5@_2Ldb}M{GS$(ul5E(mzr*`^3{^fA^~K*dZ9kU!vwu?-#k7!CnE6=lg>XL zygPfxpI1q8jMH+vPe!psM!u9ozGR@N@Js}&A}eHk#sWiMrS2bYfoiWo(pUYe1+S6} zR|aMJubf#$ui|_7gm&zF4XbBU^8E^&1a|wMDSvnn9v=u4z#ntQ9|TTDWPevy1rAbx z?h~uCDvhTz<frc(z^)_tvrFQ*8d;<<<D{747O@t_e-0D(0UlZG{piR5Wp-TyQaGQl zgHj|W)iMRHhCJ6Qb2m~S?iEqY*$R;Oa>P-@$*gUzif+UMV8(!4AZ5Z7SZHQ_$oa1q ze?fV>gc|10Ja3hTlxtDa7cCDtLqmpH3HPt<Dpz&9Vh>7L!SQ;X!JNt5ar);y0oL8b zW;7WwNQ9*y7bO3VERoU`V<BLMBZ=px>v|dj`B<};2)xdI2!L5>lw-byMMhJk8zm~H zDM|m1c1|}L%SSa~W@6t}3aR@=2u5^`SIX-M<%er5fIC*jJ!MWT$lCqW{vFnelb@}F z)9+Fu!S6xx1PKT_>*Q`5P%}}6zx)OT0LH$R&Hv&|(wpN>;s;%I=*@iRs5L}tlrr0s z!dc|u6D`<9aDgXX&GwZj&~Y_S(Lc~Oi_dcP@N}0=oqH`o%u_f-B=5WqX05pnuH8sQ z6PCCQR?Pf{HQL+rOw2*K=$L==CbRzp>Qb8{X)G!v7^Rym&HLp9=f-Ajm8c}K6`k}` z6(@<XqI6DEh5?*VHoPDj@J+sGKKk!fTwRy|=XfCt80~;)3+`dOg^sY1fbJELIpOy3 zlaT}S5PH_yBqqibw>CNMnt$ULU7CdpUTSX%*HR0G6HyB|jp#byc79ML|6|I<I(6!E z)@O&{eXMAk&5!!IAsTL)0Fe)^L6m7$>bAbX9TpI&9XqFVcpZS%I5*mo7H50GX1_G* z8M(S*A`gAqgY}3`CRgFi6s^1mGq8TD`J=c3%4;F%T@@OJ$iwW9`b=GM<T(3OgI9l4 zInlzk69uhC^{j>W2#AsqVN#aHekoOel5c%|Sn~w=f6vBAKkqmr2*8Pe7>GeVzwvMf z95FU(svl4u+j3|o9Jn15`_!T`w56s`4gfz<9_@+ucMWUFo}vR(q7D{@=Eg~G>LhB? zO=5L91{W%JTV89eW9r%=Ed{iaYg28_lGR}@cH)jJ0eV~x1-yYCP`#11tqa1<3m$rJ zA}230r~7wK_sCB7_~6Gx5Pr_2<Q5vBjiqdbOY%3^;Xrf?Yx5F5%j`*12W)Tvx8>2c z@X0l;Y?`CEFsnGlp8eT1JnhGAYQ$s<peMg|cI^aee#}S9Y}0s|C3UsCPvx!RirvX6 zuFL!rV#a=PW`NG0_AzxLV*nvrhRLU$-`{mlXVHO^S3stR164zSnc0q}I;<u6<Et9> zq_%F!KOVgK>gXT*BWTkX(LV~LRZS7n)r{4}4eO+3Cy*J{A|h^DkX5QX)x*9nC*u_R z-wbm{r*YPf=o4P9Xy6+kOUjdNAXt;}fA9r7W(?*B@t_~Fr;!YqxKq@m$sYgxly2l+ zq-BnoZc?limL?zd_kF|4SRw8%7SANH{NG(VZHt&ZbaT=yd-+19-A_x_@&#yP*a+o` z)j*3$w_V~TBj()NR;>3Gxx9bHkTt1SEtvC={_ZqP*cK0t(Rlai;y!15V>zB=Ry7J< zHbL0S-;de#!&P-w(CyH3RgmYdDyi<6Q=o0kZll+c(+esZ)O3twbG##*3+P_1JG6v% zgtt?jbE5)szDXB;(zec)m)j+1fUE!p?ZURki{y5_CPAFsXh@t-Gx+G;TuThJ3rIps zpYWp>g~@!b&S_;xmf*OnFzxh){VdT;5uI<Q5M)R6ST&4GJ^X)O>>>EN<ItAZ`GJ`G zx=;Cb-$%#`kG5XZGT1b?C&oihWF$FR24F6@TD#vb(&m+sF1=xP_9b1r%!GDpvN(U2 zE$h9Il2SdUgfH#Ofv0)YyPXXH7u}HiFIlDna0dLcC8>{zImL#_x{__~5$<0h?XkPo zDP?u5L6ME4vqR06aqeM+_dFaDgFYs%9S)KI78wfkV8j*)EBwFyUY_aGbIn1xw3zbB z7D|gqKc3S<FK8z(1Wma36^_U7=oWqBl>c@sab8l-gIYvXjg(c5Zt+oTA|d`E1!w2c zJ$wMqMQ@kpcZWfLs_mG+yNnCeP;o$A+B;J+QVI8?3Xz71eQv{x{0!-9_HX2CB}{3# zJn*!MQUmx;k?>A(5gN&WOcoHLoh$PG0~M>54;zGi7-$t*mdct{<O%(W`})!&Y;b5Z zzO$Qu!ku<EUFHi$mgH?s!_ys%1ibM^)(d_`i1k1HYD*_8c=Q#19-E+>e#!);8%)t% zG7wt$zsZ06Qcqi-EZQ|1;}<l^y8~C>BDeL19IR0ue2&erzilXL=M!ohOc3?qC)qbr zpg+EKEr!o#p3IeOlWW&Tq!wLnw8_lnBc-HU&R^Zt*-K<&_+{mh@l}FpZL6t$ZfRx? zK2C56u?;M6Ltx5tlNwr~s<o_OQpOZlf_IR;X6ijPd^ntopb!AtCy><R4=HV@jd~+T zrsyVE3AYF&5VOyLs|gD1d^ncH7RIi(=|2{i8m*zOg#t@%<Idb1OWY-*ynB`S{w)Ga z+{@gfJ4?|$-u4Ltb{C7IW_i<I=3K|-0oUX&B06(F5~FP3s)gOjYHWS1tW&-FWO>a~ z+U8#1QEp{dBr5_dEF0^aDt3)yetf?0j0wq*F6%6b7WXlq_MFfixn(RI&X!Jxl@%LL zIP;9FpxpwY=h-yrr&@Bj*>0*ki$7%eGfE*YgtOk`x#APt4I?h!tIjhIwc9>hEoT+k z*a0MtfAYZeA026cK4Pyq-1&{%7eB>aIT~$md3mkettMalMYK(Ewgk$bMV|!qo}|0K z+DO=bZj|`LI^n}SnCXTX#;2iFzh~`wWcPEaaer*tD%pZI-<6WX$6ko)Mf8y0V{$aR z{XlPm^kL+83WnE7!71P40qsP>RmC0(IiG?U?{npT+;PQzoZJ-o@dt~ufc#_En-lG5 z%@b!oWcC@MN1eTf&%DWg1vvJ5L!m_ABKFSof>^Iw@v-kO23+|?e*`p53X3Fe@=k{Q zqz&G62V!<}Q8)*PZR?9~>kDna#0+(UhB||WI;C*<P7QVaenjz+ndth-V|sPvmhi7b z8L~sJKzlmgqb{jy=TD-iKK^+MOhN`5mafn#)or$oV-4N&hj#Y@oSJS+PVR)6=5L$0 zG5+GG;dSA|64AUo%4$r56?J+u+QWGnOVn+_F^9o)?n+8W`S}ZB;WEq2e9}v<N|f;$ z^YY_A0r=xTRWWP`%HH2f?r5FM)2_AQTxPd?us|r;TEHzvJ6`qw^H{<ItgeQZxM@hn zo)XEps$utwVX#VU*Sqy~$8aJhrvOJKB9e22)hXN>my{hCemqxxG1Dd|v~DcXQb$U+ zpjOFBl4hu?o-uVRVXxG07?3VFRu^m=CX{T}3^|Zz$hgt$-}h$-ztJiXMPksnYJfz@ z+H~Ms??n8YQ;jphjjWq%*r%z($Pgu6`OuJP%~{cS96c0>m&UYi`A6~i^CJ;>zho5# zxO4i(1GSrc|Jrg1rXgqj;a4z>HZ~yeP>L%!`a&2&DM^;fmtkZwi&DJl?S@gKx_8#o zmh5uZSe+%*Zjx;i`Fh#<A<49rj-D6t&0_Txf|p)B`0~8~MSuFvfQwZp2cdFHvRS$= zC^HP>TgsC5W$Ew6z{tulRa>TFu{q_3-;L4wjq1>FbtXUi*+~s`cF2?ULrG({f0O*@ zbhk*>DsZ2LU1avHV6=a@mCUJCfU?kuY>j0zFH!1x!CO5h(cMq=2l<%fn=r3vSQA_A z$!qw{Lf&dHG&=&C9R<}7gzEo<>PJKMgQ5CCQ2h|7y@+KqWdkqP5)syt4%X5#)>8W$ zJ}&vZ0c(l>mAt`2T*PPo)!gzl=KN72`QeYc?JKdiv4h&y!*jnkvRweaT|gpsCA{V1 z*36oBdYk5iV)`|nbaQsm%bbhT(@PyM2=*d<9sT-#mPP1#RPmWmwfp_7gYY%4;xn^q zz`NN~k?U}$(k|Na2VTapj&6f5k$<k<4A&TWpsOzeYCOre7nn+m#3vDLYhkAZGA9KW z`N@3!=o@3nvd3V{>Vv9Su^k{0SH>=#4X4YeMj>{=LAWbKf;piJt#CTSXPm!JG4WNW zR==*{Kj#Ka(jBsb8~qEN4>{BAo-=lJx+OfqkF7G@YhdmLbYjZ|ZCRiq(;9a&T_Y&q z*uPM-HyFR#^9xVG)243)H*soi*R1A=1IKvEyl(x(l)mobpH~LzNlD#^nB#E_P7smN zMMg9!=7cZ|C`Q}jj?vM73bx5T9%8*=e_ta##u1)T%{?}~w)G@z-^6M6@q}zh_-%=O z5=i`XFYxD^;(9pS>$1cC6*>tVsc<*fC-nFSbiMRK8R9TgIIVj0ds7`kmXJi21k3m% z$uPFGNK-uexXx1bn<DWvp^EJ<+AK)Z;@p|?NtFA1X(A~jO0HqVaslyMR?V5Rx1(iO zzcS@xM~%Iu#&b2yzIHN??lW;Gti`$P<8Y^R#i8y0%2arbM^l5!d@NS63cbmFh;}8t zp1*s&yM@Y(@6q5Gy)ikOZU|BO)1*!UY<>hJBsmfiga7dLj13xOqD4uw#hSINICJ&g z=+DYjgf_1;Pe}Rs&Q7=ZwU6c5vzV-e@m{!BuNDRmg(PgLS`V)V7ShbfvP+i2_pIXj zFN^0g?x(HL9MQ6hDi1dp6~4$-=Zb1cSk-5<ZA*{D(<)cn=JPE^YgUP8%I6!m#wE)T z|JpIP{$-((up(Wt6V@RA#+PjGG)U=7m5d%*MRmlCCoLBcJ?NrZJthfqES2)Zp3LV8 z`FHPJ4wYU$Ed~7)1pgZf(Op{UQFOP=f9^DDy6g;U5FVs`O8UpYNr_fwfbcdd+&Lb4 zZ$W*19V|+#yXtt|%YlWr_OTU~z<`oSX}-}XO8I%S9HJIgfilmdTe8W6HjmiCJQ#*( zaMTy}p2mI4``vs&OE%;hu3E#X6MQJ5%f*KhjsDV%{O1%Jy{OWEHecIkjX$TY;O0oq zgf@??dzPslC`n58d6w0s&zO8{rS@&A1`DHk&lo1!OKSZWMw%W*K$LE3WGz1GZ#u>g zeX1ZaveW^iN%UfRMxI_q6ttKA2w3e|FC#h{iMdv)f0!0&F`1!t-xc~8iqXR-bFtL5 zkTUdXB33seZ<JyI*?=G`<Y^pMhW;z$u?V9jv}yceUZeCrS9V#KRQH}r)ahB)ihfs= zF)5=Z)Za9+8Afv#iykahXwy=xhy4xMyW6a@J+{cx#_cu}zuVop$HZTrO<A(Ai=|li zcef1X(WfQ#HTt-8j*F)I65qRcYd*j87Ee_+`W{}!KbFke7{opOc7ys=02`hM6g3(| z^vz~f)XprmE2(+%_5y>4(PNs$8S|Nj3@hDNGxb90Us5bux34zB_HPO*11yrAC<?JI z`nHjIG0giW$%NBL*ZVyDFM=P_F3`S-`ZIw>MT`@l^rPbhBl+&5Qt1NlR65dAcdvh9 z*Jvbq;|wr5{1`i@i9lS7F^+5gt+{zjpX}umiMs|=Iz6T(?1cYA?~tr{NJ1fh6N8n} zQSj$rt!`7+A)9MZ=gau5{6{>ms6S?F*iJ>wvbLAw*z-Pnky&eqn=}qZEwk;SD<^u) zCpXntx86j5p4Y_Be|a=6oa!-Pcyj(M>B#t#(`oT@uhSy3+iL>1#&ZI%#*5{%gBJ_V zsb>u~nP+oEZ0GX8-dffsgM+5;VW*n!UZ)80%^H*c&B@1ZuhaR^Tcf{MC-a53PJd7R zq-_rU)X}_h=6O5~W|TW>EcH5SZ1_7ItU5bStq;~P8(!8F8e~uRw3}{i>{@Phm<As^ zze9X9iB6xzGWMV4GLEJjtOQgTZoC?ma||*L&@5eiNpxPQ;q0m}17L?swsOxpjMa;x z)(WC8Rfw(nOjo9IXoUj87Jny0EK>e{3*Jlo`z@r^%!RMlWpr1wx5~`L^sJ+v`@O=M zZ!T`fJGu}&xX#|Fz^;vfp3n{I9|32|hQ?=Xh8Y_>Jx#p~fk7KdJ?^~~fkJMApE?Lr z|KK7nRlI3HxvSpumOTx_<fYFD4K21i!kZ9lI&-Sq!>cjvHQXi6K#x{?{0(oW9rc`u z{jit6y*i1VZk%?@DH#{YtL~W3Qe>;#J0D=R880&g&Ab+r5{m?I6%Q#vqV3PkE{`q+ z#}hj@d(Mw8YX1vP6^|#>jxCZrKAb8yu9K`(9r5@2B(=Rs#g44ubr`G$e7Vc5$2>0P zrKBf|Dfh*vKea8IikPCTQadq8deqt}7*tJLmZp~Ysv-9O#yoD3?*EDv%S2L_e3zcO zSfm`qV}G{0#Cip!9HrY=Vqf*e?xW&CisJz0rI$VE%izkfgM`uY`-$K1`i4kPNhD{S z?mbaVM&1W>NF9~LXOYf56(jEhG%!5nxHql~h|eHojy)O7NFB2y?_J=^P}>pKKe(g6 zz%R(H9#q$c_hqB{d_5xZMM^E6^80jy-i0QM*@bk3=S!CQ@#)=y0Y6EuV{V@iDm$+E zSK>-moqxYJ!h7<1V*~qx$>7701mDLX`=b&QJONU1o`|{V?+{rvIytoerEaA3)Y0?H z|MLv<LZwCMhTBEz{vZ$Vhi614MUY4JN6RGUL&(H_qOE1UBXP7o^Vw+F!0gH2=nk9? z2@e|RB@3eN%?V@=7KD#Qdx2v_e?etb*-2r@EOSimTSSf3;Cf@@!Y)6JW4;iz{3ybs zZ^T8#Lkxgd{}6!0jDeEb3a3U+ZkQYz`ay*Rn`dn57pq}%SSZSGJ}N#|4sxU3Oe}0{ zb1_LzBWsa9Bo#bt6xM6<f8kch5u&L{<>UW@wXc4wYTv$AQt3_!kq+r*(;(fF3T$AL zn~;>2mXvM@X#}K8LK>t)q>*k=x_Q^ebI!fz+<U#}d!P3oSig*C%+H*2j4>Ck#5;5a zW0}eTi}HCJjNm(cg^}jS6;n;FYBC7maev8srq(jlEk&ro$81|qb?Aa5krUA$4r7}d z%Q*V-OEu0$@B~P5Osh*!1?*Tn98TKVxU>`$ctou>34H7^v}U4a&~Z+fiMqZVBuHIf z2Ao{<E-|hNlys?H3y{RDUYq`4fQ18^)F;AeoX}r3Y38GLt7vRrNSK;rMGfYvP7tj5 zP-<&nk@6nuP<8N~B*H*&iU7xRLf=ZHalqBBQL!dS(x6%p>gH$dJY||-ZR4n47i>ls zMUHdzatfRH;jjS>l7G8sT4H-fWVc3eQ6y0jIV7kZD~_mMFI&(dmWUuJtG#rfb|)=M z_c}Z+&zvoy27X<0o@;7{=^e7?=*FuLiD^f1L-I|;hq)h8=Z^Zbl|3rft>&TUlf3dO zt<LO^7HnR4wAz%>FOZiBE$EkVfZu4xlxjicUaCNqUdlifUur*#{{DIb!#!qx$n<oy za_P#mQtG;C%HF%adSqT%Z)tFd=M32*<tk}P(>vZd*t@iv?3nguG|d+0t1AXwNe%rE zlirlt78F{WN&&hwqa!7u+0BHPfpKxQlO$2K9m)3uxqlR``~2YC%r5Zm4xh^*pHi2J z;uEn~hDOYczB{R02QdlS4{j3HA+v&tzY`zvH_}y8-8ZWJW_t%G-rI#2eCF<h6uR^I z1`ZYm%_K?=N#we7N8RmLVJDvd5_VDn+dBYPTEWJS7PdA9_7F!Wdz+uxr#RK;@^E5! zpsdx^YSSdorlY$Sn2IaL*#1}up#dQu*lqlZw+A}6i<;ky-*a0>KFoTzwJKqX1?syJ zIGN$+Jh@srLjS~G4P91YpbUMAx<$Z4WG^k>Q@SNxKN!H_vnrt4iAh88r~x|woGpL{ zG*W{eD=7|v(5i77n@9DJY<iC3ptNA+&4_hG4Tg_VbiO4+*L>-C4y$u-h(lUAy|Qhp zxPmp&2IADzc;T?SqQAx1il6KHXAXI2uMze~Op}b;`bXr<rI3i#7d3IcJtT{>>?eDj z`OQbg(`%MgW>Cd%HUej-M_%M9FZZ_H%<iYw20#8~7AVJqD=ql8>+Ks)?&@gK>XF=P zLeS8Wpf_e0Pci)yCSyk#yh*f<>?o)YhmvpyhW@8CwF%l33c`v(?Tm?}NV3=wF?sE@ zhi@WXFU82O#0N4`r|_AhYwq_Np-bTj--SVU`GK`m>+YR9I&i;&PUQarow~8D9YhIi z4fzv>Z-2)yC8ZjYG})y`5qUg>B^&^NDDzJs@@?%g-t#3tzk8LxzPl=sgLTMua*!%$ zw%X*~&~%rtMd>cVXIGOlu<>XofghwY7VW|&JLnlbu6c<u<WglnyDdePNV@O|*zcjs zD${%_r^)*&;TI{xWG_NXK9~q%Agi6UQ)bBZgbQIG1{}wD=vMYMikRl#8$6BLbQ|`A zhN{e2S{M}*rN#qL!n2dhw{kZzkXT{|iXX_nHK=sAF;i>Cc4Izjxzx!XBbOVMH_$8@ zpNUGmM}Cic`Kw>lA=+J(S^Dv`hC}s6kz8^*J7gXLGG<CM<CKNNc_ShWv*zQ_;b8bl zSuuuS@ZO$Ysr+<>c}f^Y!K0MS#P;ZZ_0FEW#w^0pyvpa4De@tjsPcG%>g9e$0_ONu zoXch=<la#qRwFs-bDYVTmQlxg-}yq8MQ(xQac5+B1_0^!OCSaRCXi4^h`kNi(Zcz! zAS%kYiDG$9cXn0}TNbDDihLUP3&s19aZe4)UnPe{A3~at7!5V4=-E>Pw3+KW-m!e) zpnQA;OhG};y~fF!kG6ZPAMRk3s`>;-6H5WV2CFLTG$dxBX{#o+N=Jo=_d69TU;)2g ze@PedP8*#bWJ>=Qfsri_t;2LHx$^C4d?h!pN_mR3L;<o9ky_qvXWG3F0T`V}*%nD3 zDIY5MOIy+?MD~!fC>G-TIb_C;y;Y$OrXCn3<ZU8QrREx(x-1g3bJw|$TbJB?yTQLa zbeu!H%xlS|w<}}f8zg>qY0np(_E0>BB5x{YO>FmIy8ViM)+byCnUj7}+l=or0XuMZ zW9`!9WJKlIUTr>fucvK%p3X4FtM46!No6;22i%HDtWgr9l6%As$Pct?7hq&D<M=sW zZC9Zk!}2Txky$A?UFGHJ!;)*N#~Eo|G<~D`4~t&o_hnw*Vz{Bmte^*AX#PtKdH*(s z3KkBIe<I;O3Tdv5u4%fhr|6V~->EjjLxdKi%+L?)Q-(|*E7%3M3|?O=ieViNVXi-s za^a=m@LLD(eyv*@NUGbT_+Wb{dEzluknUZbBAtoS(w<08UAaII-PohYu|K%KmT~A) zy83>1CPK)xXAm;&PJj8CGY@UjElYXE`K826$P&Y3u%FLZ3DK!Wfxv>wsb^**bvl8= z>Ub#8=T_bb!Xzse#Ugw^PXIk@1IZ}rh9kuunNUisWM$pUq9uV@*)6$sna!(7;_N;W z*`-|8f-j^4+6o9K0VF?qTeLCIx$)e=MM3*B@<;s&f^t*V+S-+6uNnea0#}=**dFwG zFKC(Z9z%GoH__V!>%C9*HYPGzR?Mvc3Q_?Sl#FIk0Vp`JfI6X$LfEq!W3)j|6SBiF zDNRFG85YOC&&lydq#Lt2k~2To86UDQ)mpCIg@cj~E2Zwh51MoU^q&2HLeCCtVgDb{ zTdjxu_6(vg!k$6N6xcI(iynvIpDXBJo<UJEK_2^jyvUCF07X<iH2$m{lL;3I(6TtO zfdd)S5@IynJ=;Jrtis0ubZBSl%C4(n5A}+VUQeU#1?$;^X!KqTCDb#W3qSpA!-wUi zY|h$~*OBV_ohlHrkW%*j@NGQpct}f~hTLW@>pK~oxzk*ed?~DZ{dDMFbDQ-$vP+r( zc7C_m$&D%+s1@AS&RtaQW!|f(2Sk>og5V<L{nlITl%~kEwH-?V?5qRNVb~48uoFCn z2wHEVwX)APpPV>ukHp(oa!UtkMD?pEQ1uYdFD<KYuOn_V1X!1!WotKxM;V#PIjhJa z7aKZ7T!!^6VeTKXE~9-ec;3e0no`QlQ|jMJ2g9z1I7%P(4E`EBpvAdkYj4I1wsC~o zvzpn1t*ycKtj?UQVn5H!|K7nk+FJhwxL&z7Q9RHntZYu{rVCOSZoSKLEcjV9(Puw% zVQ|wVb(@U9swSb=D+-#q&c~bZ?Hw~eNq1W`Bg&rp2Do9n7EMl+mi62g%{0<2Y{Jj} z$y*vpl+hj`-<2LnmF?3Df$39`7}?Cw&ZHegXOukTXF^EnCl#|Y$I^%bH45s=SX+ID zTDa2jSsVzd(IDW(b!qt+%Z_i)7-^j7@MNj(3nj;}k5Gm9ug36*?77+4jx-SnM7ep} z+_5NsGV*egbTd3xkN~$uB2)U(k}tj~Gf+)Lsfv}=S79<iwb<e#JZUHffl6sv$Iy8? zT%cdN$jRimyu@U0^0}9Xa>Cv<h(xgRL1=u(dL(r@e~9eENh(OHM<AK7AIQ`$7z)-c zT2;xNNQxrUC>LYOzory<c=A0Q3Un`-@sm%PV_31{y9DA@E`d}%@;w<8t@x(^Z0f(H z9RJ^i&C&k0cli@`Z&iQ8ZoG5c+^Tr+EoQ0H0%b=Wm5dmccpQ($vmP!C_J09y48=FJ z?t{a?N?+gfMK9AUcxbGuXrsSSJWG+TwlO^s?8U?V^NS}4ym)mQ<m`BF;PDf213j`P z>8u5tXskQ#$8Kj2i&|=-i6@VxPT+zK)(vNr0})~1Jq3sDy8dWv7#_*iWuI7+lbywo zik2~Y;PqqC3R_D2Ks7Yo`B|Qz<#Uv`GK~igsC5+{7BkyCN7AFjAyMBlRfL;~&~nUP ztL%0Z953qtZDO^pw?YjVJl=^GLNHFOdsEs{DtHx{K4U}j*+%*^0-B!pUKj1vQ=jXI z;fDrz4jM6vAvBwOD`?a1NbY^#I64+zCN{S|_;M@>&5C9zG<qR-=|9tk`QwOn@qwkz zvsSnj4zO#HA$bla484eCdv+M<jDCq8_uoU$2x@C=^(W-w{()SldDZyZ0P;k=9sP4g zUp$0|`IVV^Nu8Oww75x1=lF{?^!I#GMLxa3u{9$6g0g6|yEWsm);DwV<}2?Vbm$a) zhORg{6Tvuh5hq?)d^ET#-05et@(yTL(x@8npQsiIp<oh+Jn=#4W0z>s+{3BCH^8mg zMv_aTQ&qN9J`^w1n3*61YpqlEcXjyI-48@lVhy{RW@1r%ho55x;D*v+M}Oa1VSW84 zZZYYp?l$gY4R~(!N4v`iYLKIxALUvaR!%OI(m<zjbS7m>=_!HkOs7=Is_dsQU892x z5D&Ei!&IfRwB^$cgAdsD{GjQ4N|t_FN4@LK-um%Qvzc+|v3iClyFhj@G{PuardpDi zE**TqYN$*MjRAC(3vvfMLE~~idmeLadG%$pWpeLG3a^K2Dm~jA1l`mAD`g?Bu|LNK z&Qo8IHUORGFQI$<_n?!M7USaiIq4NYwYHts!1J;hp;cUU()k*Z@WW_3jCNzH(rPk8 z58id_UT^Y<<OPm(%+ef!pRrc8o}zhkpurs(0vwskJ6^cZRO38i+!)>VCZRR{LH?7v zHQoBJ-a<D=E_X=zx(%^=b(k|h6?Ln8Hbmr2EauQN)-<gifci};nx^zsCwjJS6I4w1 z2}6!2A5@Rl#&kaS(fA&|vi22m-})<Q96DWT<9;`1r*RuoIyC;hd*g9S&uY`c*~mwU zD;Jh76h^q>R#$?{tS&)kI4kB}?zRNv5yvMHM<6FW3Y5OFSqTQa0&9Nzy_Z6f`h!Fh z+02#CM@uP4(mKv0Qx~ETO-Vm~Db|CN>wS@}Rf9gCK%Fqat|_c5m)GMqDuz&55rm&e z(UbAebF?A?uGa~H0JY<|rZZTz8r@7|7b$HeY@%+9+&y=u>YZ^z`2|T0Q*B5MUPCw; zB88Z`O3RvsM`lJyvaf)IUuI8fs5?rNi8;GRhg~|Vbs#dDI~v(G(<#XX)sN}^{^Ff* z>!(xp%x^_!HBk$l@(G~Elsf~%5%mofMZ)R^xlFNyPaoNJjWHk(l)4K&&{h8OCFJ}R z-=|#nqk8lF*LN8pqnxSTBW_>5US+6jS9e)HkKmUkX;JjlF}?yR*{IIfysrHmkJF5| zeRh)P8z<|GdvAnKHv~$Wd_EBCr1G~dTY*AT88o&UHO=10)SMaKWK61{KDu^{gV;1_ z?QoMS)5dvu9nv53Swm7j#gw~K_uueej;;2=D+tPF_Nw#k;S*?|pS;Zp5iS3O*?XDE z#ge{jaanlpHNosb#VjI6)D7+i5?ruX0@@>ixS%MGR7T_8g-(GUY*1WyUJ)B(nNeb{ z5LMn7LmknUFxfl@)aNjEWl`=MafEHh2gUNi3KIi4l?^e2cNBr$E2pv#<6mXCtdO<3 zFkJZTQ+Ldc$lX&tM+_bb$LdkDVQE*`FzXAHQI!cw%!<4pm1FnNUwpynwJS=3_%i)7 zjI!_Q%iiI3=!AE6luas|**<`}-W|hzb&PiOd6)L7KCRu_6A9mwKoJyhV&4B$S3c&O zXEF(PRvv4z))Oy|Jw_=p_By+jt_@R$_`|wx$>3hx7=)51r|iPni8)hLSF6Hzu90B1 zmPhF@>nZ%5J2J?>n)ClYVR`@fk<P3Zt`^qKY$PU*mJB|WMOTx6JGk=|edVjM?x4=x zSN_sbmi7Mf&t!QVD<~PSt}Cmnj!zeVqzWJAU>;@eu<K4cObMU7+1%)(MFQD#xh7tG zY!-Cc?VAy-I6G+;xrQ4G-@6)O!x5#ECJry-+wHnfP4w2}5Gji~i<dZ@Gue=<XB{t# zL7G8&G;Gc&)~4NpVgM?RYO0+IVJFR4snJPY+HjR77Mb%IFpp3j4?4TElW@1v*hh6B z2vwK}PXEGJb#ohMU4fwZnF8-l1AecLTV{q{SzMa7hlc=v)d**S9*qTh<aGv^<Tz54 zN@Fmv%drSD%7en;tiamCki@d8u!LgaKMJ?Iu-JfSu0)diz~FJ8td(whFKz{mPT%HP zr46yrhiDsToll$`1bbW9Dmb|e#S0DkjI!?@In{pIfaaLPY4&6LM63xi4aLSBzh;K8 z829jm<ciAEr#9q&STAd^Sv6vq=IDE{Va>$SQ<S-;UTxEBA<ru>E#<96U)I8Ze>AsP zjTOxwH+Gr2E`gt#(tMG(&$UkXt@^9EFz{oRX*j`jiy$10FIMxSw)M62{mHpZ63(-$ zAxe|z))^pu1wlfr!Rf5`IvbJ$lkXMH-6@|wt1h?iv)kPXcBJ@rNk0(|LOEW1=lj@^ zNn0`<(-jdh5ha8<Ub~^URb1Am-zcdAB~-ql^z$M|C=+vukz$LxHg4_c==ALT><8Wb zXvhRd)|$0NQoVJNOqKQz)kc9lGeYaocI;{0c=%0s%Vv^7>oN$KLAfTUq*y)PV`MCu zgiLKPXzZoETeY8L7r&DuN1TjO*r2n<U3J_S$x7|_1HZ6AEY~<~MO!XTMO%VSWm>vY z)0Mv$_zr4&M6lv{1X~Gv<a`r2$MXocLTPHLfpg#dNRNm-+!oxN`Au*po3x}x6hSv# z*jE#QMEqH`;=y6NyrX1}X@PH=ZPHwYvEZZ7L$2o)3>>SUNE*Mfp>pRMCKmB2RKimX zpEGhY$Dw4I@f$HlJ~4C%_@Mdj)rUaeIQ)yUdT1iV0Pc-?33b3G@LM%%kP^N?l!MO* zJa8c<?s1BIeCpnSMwTPjKnd%EX9ji&+0TlIvX>DjdU2}e9$PlyI&qJFN6M+2OI0Iu z6d2s#JzP8<FOZvj{}j=w#HqP{l6B8l=}6%P3d)Ac`i6AEOC`=MQP4<vh~wVH<}ULB zm&UoY)5up11iu;Hd)%*l#b28wnu@eap|KH6Y6ZR)dc{=U92O|UrWz=?Pbvg?Y4JU7 zSjMk8><)U$XBG2_XVSRn{SX9;mziNK&CxW3RMeP;xEW*t2BBH9f`J6qMAlRH1S(bi ztJobax`y-Keu|9$l<$mlVLr$+C7)&}V)V){zZsjZ_Iu&Av<2RSj`-r{F^mI_92&Am za*#Sp|LE|xY$?4C%8j$vAFFOCD#L1y>ZiS&BV+~L;^xQmFCOYXUq6zhFiH{qkkCoE zfru%+D>l<5U$cODj_fV&0BO475eoMk*4&e5*cP8AdpWhc|9Q{+V-T5$icxBhk_+*N z+TH8m<D_oS{1(agg6DTWo`a%x(k|8~cF#T%^kOA5#NU5eDa&P<S1KV7u8Eh{5DX{Z zLBp`(j4jnk9T_l|?xoD?Unr07a8g{%t^T%bh!XBNd9^M@ArxEg_cAUr!T1Bs34#72 zCBA$Lc*lBVUbfedVn0e-Mo3g{<|=J;ZSl!jy%=$f@e;HkcW5BXl}CbWw>Z3^N4dOh zcyYzkkr)u~+^GW&C;sQ7VE>0A{Cn4=p{I<iigk@4CASrV-*N%jc~||E{<W@@)HGa3 z$t%&97O@XDEuN3s^h_d#{}_DP+##vRLo0j=f2rD;#G<K+`||rrifvO8Cnuetdz0tQ zKK>^xQ{(lPAAD|6M)9WI?RIc<Nk^QdhVc-dZs_Yt2Gh1aB~HP%ZRUyx6%Ks^E=JTL zsH)HK*1zxZ>(6J1rq2$2DRR6@9?+~R`kFIPf?;-`esH|K`8{kbZG@2i=G~IOb^a$4 zOHO33-eIPay|Jg&lpyZ+pTi5cgx-Z6`ii=jz0kT3ts&D=1pa&)o0cHYtyaGytus!L z?L1+CJMC)X!(xnkHluUbc*H60@p$$cLo{a!(R)@QxtiduaZ0$J@F4v4LPl=|SI7?Y zg;E>-x@^wQh5b`gtC3>UHIJRzrzJvPwTB_x3;tiVzk0qJMc;0<fp@p-`Gif49=2$Y zr-inx%BEsMWK3k1_~|M9S0Y;C63&@#ulns`z#(7~P9z(!^y{RBXErA0?PHrh&K_0k zRyhPu6~Dx7r93jV^b|c0uRlAbNY=Gya$t%JIT+fe;NHvjBJ5_G80{d<F)@#>(dn5! z$f3UL>a9hZK9CTNfTs|nZkUH9upv^PQgAcw=2xQO{`@#ShS^?^Q_+B{YO)b${mMOx zo(fC$N43lBQ%G0VibYBNtHkV;>Dqcx=A!0&k|t3-iwKm!N*XQkoDsFnh~8kSXo++6 zcuXBIS8@n*!WWLGo2RnX+)lPh(sA5A=Aksn*aq@n9g>?xv)e1$y=B=p;x=-$6sU0; z*4n2i%_mQAb|39AoMD&aCgI+dT;-hNpo5p>xGyN`zKUCouuh4KJ|s&^K&fPEb;qx- z`p$EcYGj$nN$iXZV{LDdg*(-7<GAfbdF$nAnO$xXSL3ME#R)QcAK1(rr3c*nRJT|< zi(U9c&76mIk`a(CEd9f-yX^E)J*^IoWAIHL%?gTCCOegyG-8Gl^?%om;(37ng9sxg zT)il0ZcgIUEv1lbSJF;^A!HVy)&CDl@v;9LM8Y+8Y)GZ>K)87?c5KvfqxV&X2|lz~ z@dg{?n9HWTTH<Rdb;9Y|NxxTA0D3`K{B?Yrma={HJHo3<@kM0JPwsbC^cwCg&N(e2 zAr_oD>?S$v&G5gk6BM~Tm_51k**upm)PuyKGzp(5gkh##r~=V6v`?-N_=`wVV-GZG z5~ZRhv9bSl7@4aJ`$D}-{X)x-(PJ5@j>adIbEq-;P(nGuP51ahEg>R7K2EyVf}C|v zj*Q+jXmhW=iL?ZDY$p`Tr=IoZa%kuMNFbVqx)Ty;{wkFb1rvexy<Z7V?P_h4<%1&% z#@T30keX?#*b_I*Y-d+bDy4FWk9>+=+%)8F*6xLz7Kj)jWO)%0y0Tb&$ZY}Qp^EgZ z*YVj%L*acoG`!2^h}`t4=((M6R9E@3Y_rxBX4Te7?ZNdo8JDqmQtwW0C4*&q_^&@w zeb&lMzj2$O7cI?F&vB}>1o|+x(Mp7aQKymS%<?%sK7D^k_aM+64Ly)-n`EM`1gju! z|Ffm*m$6Otoxnn}!t0@!Ob#u@X~&Pbyw5lfoUflXu{g1^9RxI3AZO}x^1AHW@>Lzr zUA@&TZk)FqC!My=n=9mIiZ}~!t<D~qa2|-m>kDu?FrJ2f+1(L{)7+t4Ltm@Nd%yhz zx^ly^obTcj!I$s_C{Wwy&l7gpJfgj`O%hNTzi4{qfeF?bw?i@fKh2!o&j=H3U1fi} zTNpt)RQ$$NLv+l-GHvcTCH{%+dog;p7p2PR#scw}#w&J3htJbd-&1!TYQ(3PwVH?F zO>X2rbV?SW(R$*>M*V&SS0+NoH1>YgA-oIM$6)y5XfLXk>@{#i8bwsk_g6S6uQC`s zeZEWSddhAgbQCZ4-+On;LK|{`jnmPm@87e?TZ;z{5$9-ypcLG*K+&Qi!Yh$Z%(Y_? z4{YVcHf@Tyn5TT!j{oT#n_-JiK~KbZ+%1fBoV8oG`JLfaAkCJ`O!@Vv`Xf5aaf6q^ z$ItQ_ml0TFtlGo8vL`+S%mmLPhWHv8txkUE3{osJxgz6bm)?k>#eE6t<o(Xr!L?$# zG3<eOdV2?0t+-~N8kj5Mf62eUxj2Ow*_i%ih4Y8-3v9gOj>eI*L3{ykq_D)XnDH5# zI?ZDM;dgAir1?GNZ^G}#6wG)rKr{TO1y0aJWt2qDD`riWBE5W$WvWLsZ4vMLBT@0s z0#mf5Zq<r-47lQYJaYEsH=q?MI<!gM#wRoJO%DO#H@4xmUlZ5!;gbS2=OfWm5V(OF z5PpZ>5^~@{3}*F7i94j(`GCdS=)M$@92{n@30n9)IPht0k1}h$jr&Xk4sEQdizTo* z4dmF&wap*f+?5GK1jLH{-fI~QDq!I)zyt5Pn)A6S+>&|+gSk&IQDUwYNn*(xh3MGS zd-r`Y*+uzV9w(&pw8!(;?p)R8{QSBESrXCRru4J{CaAG5_8F>g;ErQkc_uy7iY)OM zoM}yva~y|o;?24TyM=)D>E)kvUsQUJTgl!Cee#*+f8Cr4{JjMZ3^#QrQ&WqVe?sq1 zt5fUZH}wa1s~<neUX;epro1PX!vgHRm5k*$qGZ)B34T1nLud)0`1T~2w+yw)_nXn~ zPt~`vxdCpX!xEcc1GU>|_*1zLe&DlgK(i=?+p)`}Qg$GF-+e@*EYN^|>XiW?$hM66 zd`0>ROmBKJqiH8K6TQOdN^s#>@bTTAYK{?N^>;V%kFvs#SKnFjn$Y()kvJ~4d}?eQ z;|QrTVpEQbu3rgei$$2cq3RrNJqcLNq7@O|(%n%#5MNi>><?zo9<(zVQ=C^X<}J!3 zy1#pW<@>?4$`tn9khhfM)j}`S<K~fesqJu)aupRG+Gcc?o=}jX>BV@T-M8sVgXU#K zkj+H;A2qXnA}MBivIWTZL@@b2=2pJnu@><I<?c|yV4MX98aXKNsLCPtX9<aUiLWjo zpIsB$BgKt9HjMCya?@c369n8oe?@_n_yz!skYDcM{-$CGfkLbyHvd5}1Y~>5KWR=s ztrx#5hQF)!DeIv6k7tp@l9&$710a`yKF_O{UU!E+Io~BH1ax~-<F-!PTixE>CjZGZ z`Xwtsw{H;LM_4FkyC?o7>wDrumqmubR1OoXBjFc%3+OL;OY#8S9tqIxKjq1Fpa-?? zq3+O}RhlR1u^Q3K8X&3tCK$rxUY1+I@a%WNF!{1*)<H04HEt+s?4p8GCJ7Xso6wZ4 z`~IUbJN68rWjiY}5Ro2JSr05D|Lnl}g_m=O-onMuc(?`5o~N3K<c6Tdj_oGE;O*Oq zgtwIif@pi|*R#!e#zEC4!{bC`YEnEB?7`G2d0{ciWo>k&L3ocN`)N8BN#p6Ab4`#} z9EUhGSG(VI&)iTp-vA_xo_ZSFO?a=@h)n7?&7P$Ba^t@%hM>Pm!k_3V+x?4u=B=t8 zV4ooZ>@&I6I=QoR^|z`omMTp4efNj#`zPUWx<BZ#_)we2SBEBk&iPvj1Ian0J5x=R z;3;YfLG@4n%$~nndjLn%s(@xEDm9FRNMiZVPzH(i*V6X;5GATL_i$_Q=df#*U&>W4 z8B$g;Apydn5+9zI0U#Wjb)?pvPz8n@LMY=l6v7A#^?nM!#lPV=wm}Gb#NsPzE^NKu zTfOC&*H4=Hr~q?Skt%LnhJ@GiX^y5#rx9Z<>)2}-BmhSQ`r}q@%$2wV%PXD(KA-8* zQgh?GuBg*!bT_fBcBdEWB0pv)5@zwnNCR=z%1%zmCUP2A%-@7zSirm&**}Hf#w@ea zuFB`sDas*VkmBj9%}hvvV#+w~6_p<8dMai!@X$;}X-7b_o3J3E11Vnh^j3!QXKQ%# z9AKf%FIg!3Kj7%_mxB8Ha|i>{vk~TlLSK+i{0ZcuRT$62=iQ>df%A_jz8OJYq9Tj{ z7gZP#03(#pAL9K$X~GkvoChQHdK1;9ZISGNcrQUW1QYMMzD9ABu)5AH^nW^m2e|0_ zaM~`;>M`+1oMn1#|F^VS#IC31_-F71?nd8KbJh_g7LEd(mpnB45|M#oDzAL5mUP@+ z>w~ga$rYuEb{q~^Xh7J3(S}F1zS6p<O+y~KOIpQgqe<g70T?;Lx_lvyx{oZ}dOpg< z6><`&w}3LG8$d+8nGZ#qNG09qKg>$*yvfXCp9u_rkji)KPC)o>J`e;hoq1nTIZ`P* z<EXe0DadrT%qJM8YbInq<q)8bfQA^2$niV@WQ{{5zzr4coCf829KWfZIgu7+jTbGp zHIev8<k8V-=!~|gQfA_WVo}tfI%_yf5!K0k*p^fXci9>S<ct3=K)y7F+>-H$y{(ho zUx4hDgJ;JBS#(8^b-8R=t-(W|6Saru-vch*iRBQ~L`Q%hB+1GpGkC@OsyHqnpQ<kI zOa!oEJzEwYtmE(T^mO;STN*%viNOfLQ*~nBGxBLEla>qoBAW6V6@uHQm<vsn6JGxw zsH9%3i?_=jdu)t94IgM!>?J!B*hIT)g2m*ToMUaF`|hm@gmx%X=5atU@>%KnL`rS1 zN}NmP_JsC(<E)B-xF{aZkQNbDxnyao`scExv&z0yk47|z=B8JJ@`^Jir-cb~nfj+b zWXa@_%1(cte_HUxPj47k2%B-yY)6k+7w#pY0B5F9h(nb@pbf@1;b&pzL}EQ1RBZ#^ zRcu8!mtQf(Ips|_k)Qk5OK@mjHzD*^3Iu8PtVi;dBZkN_O>zLj@Z9veA86V74b(#A z@Pa67f+E^eVbw2}?aJ@+b?X)H{wV7*oT<HF=>2{2qmaZlzR!CwARk!hh5vUTMgJxv ze+N<qY-0k2{MnT8hp%llw^+wi=QmF3$zu5uF%tkSYAr@}xggV0(P70OoU{RH5Qt$q zhz!;_nC|v&jdH#+hMGl*v-?qxv&1q(IkI6I<KX?HNK}YNzf*P?p^Wg>cQ?RLv#Iv- zb7YC@XHGM;9{ZdpGj4p8Hgi8>p;BT7n<eWP8Vr1yOqXdxbIdpNxqachVEP_Ct%z{K z!dw-2gH6C!ll{|I<7A*f8~v(EIXX}m!3SXF%35*BXqx5+|1_D#n_jjNOZ1$LPFtpU zrU4m+-+R^iz&n#lL>5{+4cb2v%ARo6qN9fL5JXm&cG&HEbE6?2G+!uLJZXY<Wkirh z$ae3}e>DsuNPHInu<{Mm*GNsCM}nA+;sk@DWp~Lr9_psq$6YE}b|qFF_2#EJ<5l}C zul)hCJzT&<2{_3k-c1%t8PrD#19QoQX$jWkxcripfAg6%wXgw0p{^28u#>}I&29fs z`o}DPSNfm7riTf}8Ws{Y9O1@_va}qsC|=>G$SA(wS~0(8wWmx3O#P!>g_#s5+I0V= zU9E(hT@#l|176CgE%`LZmz>|PL?`jcIhNl%TaoU94IJ__ra-$|zQQ;ea+Nk#z3!?} zpzZUhp=8J=`b|jPdM7$@;nxzJG?%Z3k`F%1vt(&AAsr|%6ci8zMynvtA0AeH_sl#i zZBf>({zA_4*dHTjE}1J>gT#|~a^rnrRXsPB1W;hlFB^Cxl_Xyo(Y>yEq&%y!^(N`# z{TY8B3taVXQf<h@O&(t0&JX3Q)*55wYIT*a`!=#2o%1e+Z;#`%KpX<u;m|;%Xt`=p zpuiqG0|j=(ISMMw5WmYVQN~Y|LZ9ci$|fT1CB6EC@C*#c?<Z$T$R^(;)5sjJBEEnN zgE9yt{nYTkzLbA+?D)-qBMJHQ(D=vL(b?H)Zv8us_`D&M_+s~-PJPqNbqZtXk))Mv z7QZAw6tlZ6uh!e*#gw&)4raR`*h_iqxN$BuY7wn^Ewrl0oUCoch69*3>TxaJpvEBp zjvE>;`m@qjnA`Mo&W^Ce!Y3^+`|ijOUsz?P!%AfI>^*4oEGFWn@Mm9f;L~jee-k(N zeo0OfzTEkS_;VTonEtS=p=pdmw#uj!Hg*ud=8Kn{yf89tU-d&0v8+>aAL1hvh<7tC zLO<gKCDl&40~n4H!neR@3VDt1^y-TvyvNO{r&GS{Td4`0mZ(R^jp3nHVJqt^y`Z2# zOIh+hleNk7ftqD2vDVX|T6r71dJ3GESu(EdCIUwsFUOS1&?&LMw+38_rjXFmNSZx1 zDf2h&JaRf&I<Z~t%H5z#toa+Nfz0TI2d4D88okDMN9nz8n;q(~4>~ZD;;%;zj=xu0 zElmFOF8<+9OqrgFH$6U!N3`&l_}!lf^fv-Pe*^tfe`A9a_uII?2j1P9K0tkCyuA$0 z+@=h5B259BcxITv?SKljD4rzh@RoilC|VhNF07SJ?Kz4vk$qm%em}89weA*n4KaGK z-gf{r*$J4z?e0@KeJ(69WpnT3!I1d6BV(j4iaB!&oMNIG`J8MUB&rA+u_IP0>06Wc z$Ty&Xeof;l2>?vqH`y`d?$nCBUkpmd8_I5t!HZf~Wq`S@+vS}k=5j!K;W<yfu(b== zc(?;LXAnnRSEMf(UJnW<PsvhFTd131%?@vVp7$%0H!E9L2qV7_GbSEJIo+DuzTe+| z7;s?XFlv<ZnkHnHcv9*inMV8OgEQ=;3yS3tz}zMWnA=d!gupsbL*fBJ80p$abL`as z#1wy7KmVpZ-^SKa9r7P$M3_Cl0A|m({F6QZuQTGUv->Z;M8KYJy{y7Q8On`HO29*W zYtLT`{O9okYYxSaQUipdOuTOfj2HY8)pP5=jTdgW<Aswlnnz*mtR4Mj(~y3&awxyU zo)nrCesT#{jczhfF4yE33iO&@Q^|hs;eGgXvar|>bspSNNahuPqP8~}M)`bPCRzVH z!m@E8qC?WoARoJ#JZxnMu;-&2gJKi(3vEm%z$1V?|D7KqV9#fV+4Ci=uWy=21j|?j zE!16zgolnk0``22U)b}NL*ht&PKdx{fugzgb4|nR1)D6a5qp=d0ZZu<>;PpLa#_i> z?657(uig27)6@+hrvb6IhP{7(BHdfnKTO@@fKO^L1#l;}NQJyqL14Hio<9-@Gj%7! zOx+v*Fm(t28&h|gj!%Fau~gB7c1791tv@k>bnD?C{zM^(moST)Yit@@tP)^x;|w(V z-QxBI{inrE8BKh14Ca$ESf_kXr`S7#cpuEjlQyQBA^9>Z2dI^HkAYfA7D64>&VRjV znlFWSzrTycYwpL)ZmkoGBh}IF;RAbf%$y(lq+duCU8p+&s}%a#7ei`K34b}(TaV(* zT1_xA@$aVY2}8bfz|`FcGj+R+syI8S4ZZ<P-N%5bJM`a~x`7o9%+$?bHSWXz`EBro z7&k@b>l}t3xG0z+?Ewbuh-3S;VTe;q{`fGfl*nzpywR*F`|qaizsWw^f1U1OHaFNT zv0()zD;__eIlH4rD7~Ww+p$T+RXe`7KwpYY%Fa&mO7Nwu{SJRg|HFB^RaflUa?=2a zm+q&bJEH8VDAJ11h_+MduA$#U<M3Ftk7+!@gr5U}73n14Ee-o#A3;?-1<S?^z~N6g z1UlwSJ+yf~k6W{jD95vy&!nj5C{Y+IG>Z#<l4zK!97247g+@$p_z6jOmc+t1i)e-^ zC%YiXh%Xi)-2-=#6kDqGyK1-r*Ob14#z$;Z`u@4Gdm}5SBh@i3u}n`tu)<7kXP5QU z2_Sj&fcOYSWqqXJ`T}s!k~1O3>NArlhteLqLj!cQi;A0*FB4%BlM2bYAW+7Z%Qbm~ zwXSNQX6Je&eK|vj?4wB`V2JP~Yj_2svGal2JnNeSry043JF6-nv4C9zFT=)`FzrtW z?NM^tOAMntd`h{-OJ7~ynu0BB7fAoVvF|5x4(fIg<G--)k5RBV>&vY-*a?h<O&CIn zC`P0)wWvA5KE}W)+hcP6{AbHa*lvKm7xozDFrArkALQqy>p7TS!hJ=?to1EJUmDxt zF~Kut4!&`jp3+sT(IxT8Zo3#p(#~kJd$yZ=<Ao9%cO^F1G%`U(^gKMQveRQ<vy0C& zqs=U4;&LC=V>?+kVMsbMC?tMKSL~YezYlgZlqilq7DdvMo*JV^+S6dLNRE=hkxji~ zwQ-YfFJtql?R_&S;AK_o{!oFc|9t&{{rYkC&N6QyFV9sI5eoVJFH38)O=!&6jMi_H zMbrH225oU`IO~xKm&iL+?919qPgozJk!B5^wb<lDL07V!Gmw|TM|-%X;v%a<m>jyx zVMado9CBp}_<5kNYVuFJ_O;?=vD|M76;yUTLqHk_Vxx(~*z;L-7ZR7}p|!7c$<5fM z+yhFfR@sC1Z=b)bpoCg|posoDRq;2A=ua3m!BD5a4iAd*@a$Ng8(*jDb&HP<R*@&% z*krIVVK8bJR_18QTIK6G$3&Z6d;}KV5<j-z;Fx_S2S5x`FkNlrb(Ni)GoZZ_QTp$A z==nGn9gR1t+>727;30-Y@l-5~haM}_KY3{Vd_Jmr{Y;MMT`7!*@S89miaj9`Daq>( zYdm@4zma)VwfUMdx<-1cn;z*zj=^HnhbWx-g;G=P1}S!6>-QHwsrU?_B6a`VHh|$_ zjx`-GqgLUZXc!`<|K`EguIMo{HVO+_5|C}eO`oSF?{xeJ6)yn{FDeGldTgY9ptRYV z%9uTE13(c?@nV(`={Aqz3}N`(L*F6vH1!xk@FkMF!Z)~%XES|DY|3?l_#f$M{o+f7 z9(jpxE(Dz(5xzjlp$4dU3<tI-0^dEm-E-?{h7bMsBFg#qn$8#hsp|y#7g(-BM~q|) zOPE0Ho>-~II?#1)!BR2Yu&o+O=FhE~jW`9;aNEoWhrzd;4hHjS26rA9jY?yzz?Ey4 zm70RzJ~RW8Y11}E?m#llvIH06E3?nuO8Nq?<8#*c*AKlP<bO(K1CnVxFGyb`)JpNH z>{A5`sJXwxRm)lKY`Qlsj=bcd)|ZrG_{ne{aTXZd-vM!^lGw3u6*Q!1wreRV<xqN@ zWX!G0!&Zlsw)40l_yQN<v+V9o*`*v-dMzs(12ja;fXyGhN(SeFB-@&)<_2kq1tqpI z7@aVUNgz=S(3sk;n-SQymAt2)XmQ?$a9UfQ{a~4GJUTJaFz4i-!po8f=>{|=pWiel zUO0Cda0=AxS&<Mp!pKbASw#Vv#mFM$@^#-8=KeY$PUMU|Huh;y)FybJ_+)_$*1Zta z2Oenv#8dfY-}yKF-S%J`vp-WV?jL;%%-^lscy_m%{F&Sv80CODZ|FUANliUE92$N7 z7*Xu|H_Y!(f@3Bms(fEgOeVSR^*7CW-n{gLAL=YYgs<WVncyh1e%E414Xi`q=|+qn zYv7odsK=dVE)%zYydClmV>2CBnMC-_=y~)cMx3(*M>HQ8^yrgBWIK1zXDEFM7Q#jg zIIeIT=Zbb0F)gi9F?M|qiMEtl0aBqZ@IWeb=s5LF88G>Ar8}QW0ay7(2f~NS#)1xT zyW{xdgHz_;jYIiy+3|%ak($XBvlFmdNF)JQeongk1<w|B)-+og)c8IPt{~cFIss7x z0mWYES7rFgL0NcKw~Wz~o3wDyIfdVK=rENs9%^iiR0yPyZ-?Lc63_<Q2s+fpi@uhL z*MV@S^Oya`%gQLdq!)e!)&2kqrX@LVne;~~ZEUBacb7l6phrb-V5y2<o4Y0c9@*?6 zF7_6V5Ciakh!p0iK3B#Cvc03@k6GTw`TDNh=Pq0E30_eBlt@cUogzM!`@uxlHr~S7 ztbYf3rWc)<c=`$R+Y@Y?1mXNIr=Qwp1|4=&lib};4v;>%S8nDTz7OQkN0`7U%~JWH zko}$ZGjJ&F%%6L0U^@2jUDijPWK$dZ1>}IuD5vps`q=5WQFb3E2^V;%w(=A5j2APB z>C`NwC)=qXwK+$zhT?l$n4z%bGF7KNR#*&v`@>m@P(j!%4=YXJ$&6wjRND9IG_){L zF_~oiK;o)^H|+eN&7qBRvF0X?F2pbKvh?MG=0{w`{+admTJ7}kJgy&b`IzOYbcd4! z_1-BSrLThSl@cu8FTAVI@IXW^vi0K^TQ9?-1OIbGbGDwQkod1R&G+5QdqSX^J=g(8 z@;IS}W!ycLr|)WR;5X~dzjkO6c03Po3T~s}m&_tMd_c;yyhrbO;rHwswa(uZ%=<&Z z<GCB8p<R7!_cmTwFQZLu2H^VYmwZ(Ezu{_OV`5<sF?KX?gjm}_!2r_c5b&R;`eGpZ zOA0_71FcZ3A1_q3N<WwV5`;nXCSLshsVYGn^(hH$4^71Oz~_GGr5*u73$nMUckD}- zBe4`;&-J#{I)k-2hq`9ll9Ia~9Vtj~TwD1@{Oy*nzoPh<Q3YVW=rp!YRn~UcZBUdY zB%U1@;c@`6*Wg*s7gbz;6nFAmlBwN+QqP=C2uux*-hDBMh7-)(IXOiAB+z<c9vR*n zN{5o3I56S1smEKcATfUun?@^5)ny{>Nt<4w{`xrekqw<G$HUAk4@$c}T1E6N3;COg zy^gmQz(q~}(<PCrcu*_*nSPy%gXbe*cJ(aWrOtChJ1S-dbH|F*pi1jrYjX56wb&>3 zeh9U4j)@mBY+tilqokYd*?rB3p&Mfet#8}bFlqF5qo3<3fah<FrZYlhG75EWseh?^ z%~9ie|LDB}FM^fS_Z<xV*JQIXkNOhA^}*mk51-Fx6w8gxkxbgmFYdFh*vgcI07+6W zR9NXf6~qDC0#IlE66(LH3;#~xe;>&Qq$pE^+eki;MSK_li{w8BoEg7G@~?`0Dc3V8 zhTeqi+6bHc<I$WK(VxG=rNTlLBzIQ_sy$I&+JBoP_5AlaQgC;=+h<OeKxpwCosD1v zjZM#w*zNWfSSkvb`QQH2%)cgu#-uB3KG+SUfMGe(g5Ptb|0D}Hz;dJqx_@L5Z*!z$ zo4@Bs-~UsN^!F^{?>SPkz|KFih`;AZ-Rr&gfE;PgzsZpf|B)lD3iz2LWgx2z0j})b z=19$e94UPsEXp0~4=D?V{Fcdg+LWt+g=>BtMwI-&@$?URg6+-zG=Sv%Ha}Web&Ug= z?!7q7?`3Q<2_f`9=MQlNSu3KvK9kSZx!3W3OpuP5nvM%pC$0nivOg6JGG>BXla1+v zKK?|)Zk-Wb!!Myd37;n-scAZqqT>A`iaJ#BQfPxd!ksmKLU1;q{8;8XFr(|yKNC$z z<QXl=qNw-<rB3a5u^MF%AJOkJE3txCOxZB_kOfiGK!?mpqQi&kCZtla`(ABVr+HyO z;nz_#;Zy2fI((@RlV(Ot<z)Rv1CaXIXytLQ==k>O6wfFx@Yk=#h)pJ9#--j-%_lW1 z@FC%RnbpE5YAXiPwwT`@KM1QQ5}RxB{d9eUcfSbp=1{OW&A&d)mt?25*9g#~P<k8s z9<XYC2M0qrA5<7sBMwksRMs5bdy!rp3O(>!+(+!>a~A1-EVq#%tAHLw5m|R3-E`@b zD#l+mnrLXStWQuu^ke}YMo5P;+s8%#rhdO9q}2b8>7SKi7^t_2Qy{f?T6h$UYLEe> z79Zp1z@&_Vj$(x^tVcbPHnc}I8o$|YYRXUz)>}Jf*7#wj4OdS$q|)#J4wU@($gWC1 z9b^YMM0s7*A~*IkHDc1}?6C>Tk@ESdaJ~?u(N#OGj9S9PPrIl<mfoz-x}C6(>;x_= z#bRuDO!I9d6F%#1;dceqp+V#h-$pbXAE^;uJZ(=KCr2_y47{@*ev6c7Y`ZsM!(;cJ zMw?526<Obxm5QR8oQ^s&owho1R>Gr69`{P=E+jLUc0T^RDc%234MZaW@o=4~8+qRQ zYTqJNO^X64=~%g<=G=}DBk(y|=DMN&w{Pju2;<G($ATZ?0_)>^ls^98ey?+O@tFBQ z7`4HmC5XGc|3zQ)WISKYcE#N4qxR?Hk1JS?L*-A17AD9dpNE<G(XyR|U%r~zA>41n zTz<fq^tP4gg5zXAv4vjF7KZ8U8!#Riz%=lenEtOkwf~E(k)t{*ckAM~J)m)AASn{* zJdCAJpazU7+W9X@vlM>{jg6XOSdPQ+ha|&RlIbagajJyRJ#N-K986cwc7ELdB&^9< z8mas!7?D(-C!Y9rJ#H^CyKtNTW&rZvm~;&|fQ^GBmYgjc1GJLFAyKXZ#i_y3$Kl;_ zlhe$~pmCC@^w?aUDP_6L9hxg8=Vo!(IU*jfY#2_9B9uk~8K}Hl!A}aVG_q3ymUWAv zUIsX)>oG+U1Y(q26tSl-susqPavU-*)NF6cBe|x@EJ%Kk9R$3a#)oh5%oMmR`Vwa? z@k#*{=BStUvTUFA{YfBjM1z)0ff8aIka;O0g(kSfdL{N=s;Q_W!%c8IDzU%$O)HXT zu2gz&w+z)8!b*0cM>3-ld)kihtJ#hvw6n3&x@%vC&u_6O#d!3&LhIP~K{z$@-5*3E zal1Rb$T{&ix#W$oM`fDfVW1B37U&uOSE7pkk3{|FC-fi6F>LIFAY#L=F-V+h;{1Nr z=C?e*mG>X+M&PUs1pAMRC{3W|JAAFcPr^d@v&)P!O~By~je)uIqfP$BKb%!Bg1)v< z-g}zTiW>;+S5M=I$Rse4EsnR5F0MXT?vZ}rm}3)Kq8#T-dh9=sJw>_}W7Ik0hAko6 zE4V}KYHh-Hh=}-edoIpUum#(mf109`^}O}v6z*3@Pg_S6YQeVWR~%uLx}FwOJ<}m8 zA%a+s05H!l%LOAr5_dl0ch=JlHcA4*agcHCZAvw=s&v5a5)h6rMw>6hEION@v>BSL z527RAHh*a0VPTU%g*eKPPvUiC$3r84<2D;)LOvjB>lCQ-vze*(2OR_c+mz{Oy6q!) zXV?W7w#&s7-3)j*AHxv$d5%W3JA~|ST>v^kWZ1CH&##4Jng1h}_K;sqGre+;fL1rI z{gAr4^W;?fb=Egy@WaPXkhrMOxER@M(c}7P;vKbm6`fXVOhvJt)skP*CruZl8hmS& znmyrnviWk=wnGLi^Tt(M6wo1kNT(!*`k9MKGGK1Gx)0$8>{bJ*HTO3ffbtrhUBa^9 z60n)(G=8H(ZwpOBtxmeefj%mah^WYxpW&I+W>i<5;`~tuPFYj#2x%^b4}j#(LqSgV z=Mll6GR`@Sg0^K&XOsoywbv<S#Aq^if(EmXCaHtLpqVchT|4>QGazmuO8tvh8kNYN z`#VNolfwJgN6^9}!nd|!c4>|p(8dNw!rUEALeceyY}b|^!g<_h_qBY57~nVfUQOHk zV)M<ACV~2UB7v<OEvohDuCHJz;c6<1;^o&0Wi-K3RTIf3x*o&R^*-l%m0L#dU0-Za zNYh}Xe|kuQIE+9$|LTM4`2mW@4MwehL93GSGuSlK2S%&9f$=o0jr!6Q!1m2Ai?7)K zg6&_=Hvl8*ALpk47cwH~@YZ*gh3}7jYl7tXDR2!;&HwZ1BFM1B?;ej^T~Y!%(VdYf zK?2K>#}aYC?oTZRx_!F!|axi^9h<Urw_!W$<le*y?x_a*9|ZD7@q>*Mn7xdFSq z3_2&hLytndnNrrvh#`I0j@@A?oJdZ0&SJ3JMyQENfyl86X1p2*P*eNr$xb3GPVPOz zHAHpKe|3pb#JX~JwbqU1P-b&>J~v9&ic(R~^?BK|7ePkMfQ9ar!Es=@?LEVqR+*EP zx&-rUjuXm2!BVy@LnIy4Ewn1{Ztz6P^*2l<&V2~y-Kz5i7KX{|3v%c%24|(ZbkJdx zqN;*@&nh5M#>`#gPDqSY_n0m%t`e`(!~Do+CPP&5x!rGMX1yP!-vG|5$O#B@WKBUr zC*x|AJ2DJTKdDm|m@&ZZmvD;z4{-kLVSs<?cq5kHH#x1qS3X7?$&rfmr9@+_s%6<A z+8j%g<VZT#``zRrXiR8{Px#nAeQhRnxd~QxC%OtlaaNh=japiw{UCwS+-e-q^QpsH z6&{Y6?9YK^%Q`{4P7kcU<bHpZIdku+IdB|6uu6WB=Lr8r-jzzvDA%ssD8cM&#-|3z zRP}hYef!`tlMikF;ErxVT;0i@PM7*93>$%;J9o+7cJ4!M%I|*e+*Q_|<XJa!=cl8_ z$W$C{@r`U9W?QfArOX$cd9q^(;S_ca)_W3b!_^WBaQg^hID9cc+Jo3(VswJSGPex_ zGJjBj(5ADzFU2fjJNJxG(fR1u@MhLlf#NbrE1>dHPQrC$CqM&$%DcBC>;w3(5}^D{ zB^`+w6Qt1~g*87@HbHSO$%SiDog2}|8OhW93Q;ZvTJ2P{s;;+i;)Hqa!z??Vzl8ID zVduYO1pdKJ*dz)8A^dzs^Y7mtHClWh#xn_+2Er<iYyL1`0j5Zu!=c|+M;GVEmvG;R z^mMXSx+#NU@^c6p1I#tx00%pZ16a%%m(HV~kj>rm5K$pRd5^Y{{QjA`nN0lW=ZieP zOpB`zw0ca}PjYr&H$91Kz(w=_ia!;;Z@~_+nPHbu1)foo$<WRd6NBd`m0X#CEwT=< zMG66z#l+J*M!3dcF7p@^5o_nv@oamBL+#D0TXxbb(s@14)NqzIqN=4Ei!?ZVVsCga z(i%CFyqlAE{1UROiU6GHnCpBn0*K{>H<4|2Y!@vQshaCOnrN1ozItlq7bl>JOtM__ zyfBQ7M=2SJ%hCP7WuvY}m{Ga*Elo;9$TT;z3RJm=$NonKq^K{FBC7UAx&&Y+CB^hp z=BPn6)?g=QssjudI}P74iT`(Y{$D#?*hBj7Jm-HNUiP{=k<Fj;y_U}bCenLPEnn#6 z9szsZU<F`!`6Dwh9H2WK5L$P;3%uArKSVRc?1kX5>4}p&U=TcDM!_q3h%@n>YBWY} z`jbqI`Bo71XhhKyFwq7<5Hehcguz8MZRC83K1U7tb9R@J18(l<Qi<FgfxB9a`eRR9 zayYz_z41_wr`{lHqRo=bs|k|L=e`mjskZK>l}4@2(~T)WW{e1Kd6I5&6ow)JSvE8v z=hfABDD^H;P%u46@F|+yh_Z&*rp}hQd2*|8r~vJdfaj(zQY`DccE^qO!B}tN#+26Q zd_+#{zVG~Ke5QbT6p9X;N0Si7`a}t5*8@9>ZaneFUnU{ymwao(nOx;F?SRUs${y?3 zu3;|<TO~{qj4p0I{5g-(R*0!5l2eILx}1bRyYNYspsC;l=FwGs@&lqL8@Kc5i#?P~ z7^1(PM}_`}di&=V_n&5#f-8N5E72(_iF??1Fl_}GT9~rXfuV(Tsi;xm5DigmND6aE zLTcVdUjs>u@Zc)#pg-vh(8cucZX2^8qvkM=0JprL#sMuHz>=PYcMQ<QfP-UEu!CbW z3stcEz&k))ao7g(18mv7aXc@q7Vuvj0QmtBO1)Z*<kvj87IgPkThyJ7vs&{cE8A|B zv3*T<Y3IcsWVhZ(n8X7705B+8G{|82u<9OM=2`w{<t>&P_CkFWP^{ZUf>`$OuKcLn zoCc%Tj1Le1LH)8uIP0@b47Z#N&UWALlaKWxts`tBn@DtK3kVB;8t8Y!0G>#?99Dk$ zXdm+EF1Pyvdho>M1qyU%gjts=OJbxum!3AqqyotC$l9I|Z?jvhb(=0Oo|Bo<J9pkb zoI(V&-O4hcOUn5haoEF2wc5RwpU{b88g+GRFNhe}U4d0vt6x^yzZt-?cY^*$jV1T@ zgMSiQ8>%pOL8ct3Tb%VXOSy93=MD2Yl=sLl?_Sftz;Vyl#QNjj-|f9PrBdS-(Z(>U zaYbnI#7`q#6Yd5!A>)0nuLW|z*+#U5xAbU_R@B@+s|Xy#rKfV@k@nxU5F946cpve> zgcm(X?V}NqO5Unu+C3!k3muR(NlzmMr-ma*w;oH31{2Z+VC@m~d2KBF?MGO6)UC!+ zc_#JM$t~s>rm-M%!gt5;M*|v5=A5|z5dILtvTXklWV}HmS$eKo2y)$68vp`W5Jys4 z0&C_B6Qh*OBN1e@paa$usV(gH2{GsThoV7yS0Iv)hx|yM1X)t?^#6~sw+yO-Th?`P zC%C)2yF-GzhKakoTX1(LxJz(%4-zc6ySuw{XY#GR&pCIWyYBkIk6A^HqUhOU^yq%y zXJArOg`$tDIxIW=1&)O>L=;tMz$xafW=GfnhthO_EHt5l%f~MjJ}6j<qdT}M7R@kp zhTt;PzJL8!+YJ)O|NrEw|8SuBH*8LSu$%vwSCbY0rRXURA2hdmYoQ}lofPv_{j29O zl&NM7msthsd2X({`C<PRv*2wh{?oAx54*1Wotra)9voM1=h`EK(Y_`>BWe|}K6??4 z;UrnolA<|E9xQvNhN-<G;fG7}@o9(mp=qBV(dnuhg{M*Z4GiN((g(&aXdmQR*HTzu zU6smriv3S)2LX6SNdzUT=n*_P`<(H{BeNs@$|>>5capktrd!?uZDd;1UNsd5(XSS| zO8}h{*Hfk~3nyU^tn5$%|3u$LOl<m#?r2O}M#%dQTYmxPM=sFb36W|s`Fe;Kj2QBl zkQ0LL&mGK%`pK0m<ZBRuJDXa59M%orx*NeO>L1ch^oP<n|Mta~M}3nqf!Wdn{Q3X3 z3;&1u(?9=qk^f1n{a^R`<0g~ze`vLc2Di!(q<<)jz<KhD@gK_K|I4L;^WQFwe-N3q z7G$B8C>j+2Kz+^l-_|$**Yp?0Bw)(avI3O=(_59mlmWUlf=GOifuvKGe;iX&hz>IU zJLz=bze%TKX?(t8it`S{8QE84E|o>$f8<n232hi*R{+%A$H>&Yzj?#%UjN551$?E` zsMO7DFiy~lT8_zEq4BGmgdwRrF|Zc-BtFdsQPZweA>eUdLfehVFS+@N9vy#-#Lgga z>rjXnXk7fbMq4GZrh;_oJj^Dy{_qBEGS}hJBr5pwa|k$7&N7Y!?spb;AHe<2X2tkM zs@6WxBO;4tNd(v&54uKpf=vr0+Fj8b!ckRjj}il3>FWRkU=c)rDv{39-pxOjsei9N z{SUR^e**ZI`1XHM<^0!`?@v+r4=D4?BeIex#ec=H2IxE;`QM$VC%gZHR@-k16oSJI z84mnR4|WOB&IcBi4y0!ec?m!%YFR%JIqc$22G=L)0z~!=<vfoljAPf$X?|~sKFn^R z_@!Q#79vo}mye}bbShc})AsqL;G6as1(MI0;*<sPiY<HGnZNTzgRF8T_Nf(6lL`UU zq~^tRA6+%Td;u!K$C=UzN;oPu;0R<o`D{>28~D?l$I5Bv(r2)~{8bUpoXBvI2-gx6 zEhnpYO+6d!_rlor{j7+_0V*4r@!wS7`qp<#e73Y8>~P{pSb#x<ZZfyyStcv^viv8A zrGJG1#mzwTsqwN{-IG$SeGE^;8OxIR@Sna6#1l^1FTLGS8X#?P5GV}z<65jRB>YF# z2zrobqzMe-zxPXV|7XPqkW~9WHI2#tN3(QkLg!DjRMA!aAJXZz&0nX~A0;vFR0cYP z2$p~_5{7rXhZ3$Ru<pom5*#1v_{$sa5&wrbY-lt$i2K*KxMKSQ`hRuTAhx3a)E#-( z|Lt2WZ)CK<+d{O61lApFpFEY_L?=q5h7n(WUcjAEyt)7JEs{3H^Ij%hRyVTO{&QRB z`i3Hw03)$cfza@`=op_!Curs<(}N|D>SU`8>R1A|;62hAnM>zG|I=54dadJ10!kV` z^F_JnWqXzO5uMzlwSnUS>2GmB>81UnFBU@kO!cFf%|MrRQK73)2N}4QZ}l%q?<6sz zUx#rF5jbVT6a)M&nT`=>oqhsE_Wp*9IA70MBpTT;`KXH{F>Bc=fGU26&##w}+=0rt z-)n_ig#nltV`LwH1p@S1l{bIlr}uAbj{k5MbvAdjbNj#P;{GcG%WTsAD+94R|5lEw zKOS*+I1m4N-TrC1MCiUKO}X6UvBG$!zIcoSRXH2$IoZIvvC|KM)}yf2*kIr%?UzAw z8l0v~#fKKf!3FJKBkumYJD===fV5N2V4!8#2uM2(BGIXI30r}&3)6Dur(oL7rE}48 z_6ANECoy~^%<cX(U1or$#e}1iOHQCo#_R7kS~CG`bZ<pcCqVGLk`|Zz0iH^@_;^ma zrWXLUIq|bADn^nybBV=S9VN<@Jm4&-t5{{fnA*XQaKX?u4Jvdz_9=kd=qg^H4Pa;~ zRb>7rZeOpjGxMqJ#~xJ+&P!dIpQbH0Icx?{#E+<{9x@LMA@d(?Bh_DR<MfI*M7zQ= zWZjYj%R_)h#2M_8I15gLAFwqFTG~#uyP!8jlZ4hD=5Y;qTvQvyv-^)MbqZ;<;14hQ z-*2S<Av)99&dS90|FVhxtNI7}PAyEk-ToH;lIs6*@2?NGAg(O`wJUN@0o~vKN<v%R zq`$@g|B;0M_-U4YmIZT!WKIEFEqw9!EsB(r+EgPzg$`K|R{?XBYUl`A$ZKu&H>aO* zm2>TdHsV}`3_M*4SW=6LZDgLHa<uZh5xH~?LdU;=l7c&<kh<{mLQAAVU<{=i4FAUP zj|-!p`*nX{h7=)qzYj{N^N_pJU`P58aGW*FuseQTcvRS2I)5zxM_(0m{b*9nr1K@n zkWadSZsK)zC)WFgtPK&qp3^k0xn_LwF%%Jqiw=F={=;rpR$hsQ+SNa~cv~#&9+}!; z;oXfi46&?}sud<E$u#r=LKtbZ3sZ>@*&b30mI)(mlBUH>{@|kHJu;DnUP*!W;Xw*| zMMl(=0l0moM~FXXq102E!k-ZSdw%ABnudQu`0vuN_)i)#O#ulE>_Jm9|BJof*VM#E zS6}~L^<RVjstlxLk^k<l+`nJLZ6f1|{T26{z?Wmr|KlCr5nbN-Z%+oW_lW~!@3*06 zGw&*R?`5$48T6CcvbFsg^e0<W82s_KL93Q>$I}I5|BJmp4m8qGwtc5PM=0_Fio<~+ zWCEt)pAbUuyps<84PgP4key4`{SOBQXZpMIS?p;uk7?(b2Ovk&j95GX`m@JtnNVC6 z@DxO&SWd?BDZ5_j3H)O?)xcvL(gG5{pJP7(#o^tr5Y36gfBaC<A>;-x7w|P=CnHnO z*aWEJKnM5{xmGUF0q*rOp&x6}F3BmxXv)bVQ7b^QLR}PysgzABL~?T(*l`E{#}D<r zM);2(>ML{X&%b>#);`ds|9>;he|i!E8!G=J3I9(DYEzf1V9$JT;C$A<__fY-Gu*RD z#>$jZzF%I^{>u#|clx=Um~mflf+sW0!^_tL(%ugd4N_HRsK8Wzt_SxE$viLzSMmt$ z^9=QzvVJTA-QQe)-QW1Mu{aS_+1J}DA>TTu$ZY94NNktxldP#k^eiQAz0*}sfg33h z8+}IA_xan2SdhF)JK2%06%Lgq3jhm<LA@43mjc80u4VnFZA~d;#ph}Uq-gLac$!HE zb>M*G@Ga?--GvCC8~t+-3MJXfg4E+tE+-%8?q6oC`oJ~o>(Bp0h=7{M`SfuSVDNB2 z=ku8_oQV(T$4LkoYt3CVKj%>a+^s{@r=|SVf^=<VdZk}9X6>Co<F~bqGJSF1GQs|j zCQ4)YJy{?IRcHw4g_4cG@cn~9-Dbt4&S)4lg1n*j{(Jeh>~FOGQ;q)ngOK_^DrEk- zx>a~Xe^V2?zZ^TeSkL%OEG!%mHVfk6!E`|(5(k1Jk`Ccz01goq0+Hw!5m8YNSg5;S zAJ9dn$v3>vQFn83!CI(myVp6<>;jH^*ZCg0@Z2vyUWa*{OvlGEEe<kifX#h9BKK6} z1ZM?l^BuJBso^p<`Q(iC{w=HX_p;iylvOq1@hu36)$C~MOXR)b<-hwmI33UyNFB1$ zTGlDWGFy6OSIrYq<yVa<ZJVTMsOE`V2BcRlDQ)Yeh;%2<<hNt`vtWrYSkc_H!o93n zi5;qw0ag^}^{6Km{cm3lJChgnDLFO6<v4Ld!jS;szrSva&|SqPyJN#I28am+I0{)( z63PgZ5lUP_VBQy|xsOQm+ay|V;~0Bk_Bz32OI(5lV4-vbJ?V*G!kPNaef5#<2;mS6 zFRdnX2Uq#9PUJ(YCV8Svuv;pOPV^PIuIA*)NVFq+ijia7-`$A&wm@k|smq3Tv1Huc zzrpfMw0K|nb=$k*C`W!fus_svo2;LR>=8@cHy}@;mgPhI5+`7SWorXQkPA(3(HP~H zD(RM@&L?=&itP&V>k|>g$3Uvx?|wIGdgdmI^E%WGt#G1>{#fb(1(^5HOre!s2*yjM zp(c#p@21=8Q6W)O`hy$v834{kYsg1y4F3>e34P+3ucMqwBff@F!7O^|u3+s@Biwi+ zH8!KJ%u`~De!0jhO{5^}q^De)o!B0c4DA^v--%V+AOwUJ+h-}cSVYdUVLV9=qj8!@ z{YXdRKqFdc9I%S-L?*F@E3ua$zx2!@Nuafy_eVTy-Gj*Dhv}<Vn8e8uZZ@8V=rgn0 zih*dj{bC<_1~DZF82*BS@P!$lEw*MjF%AbCxF9_l3sfC{xW-7l13GI=Q?i{qgOPsj zDI5X?iYloj$;Vd+#m~!>)qSWGu<auaY}{G7EnKxN6(;IhuF)n7n)iUw^}f1a8u#v_ z>oav!0M{%Ng@#ipz`F66PHbK$vaCoAS3oIDvB9w*Z0f5Ui65*>sDOZoZnK&Gu`EPA z@|buHQvlCm5LCwfwp?nYzEIT4Msc9~DySr(`3$K%VbG?26kmVw%T>!46#Ni}(3J+9 z_A|Lm@f-RVw-i@+SDAt$otWB5_?y}vqo^Q@i;TiG$RcQiHew*!k&2X?$H8m$i*>QW zF{Tg_q}*^K@RW99AUG+xJ#hxeOidUfcnQ`c^kVkx0j>}PFuW-AUuy7sSzuzs?C}FI zU}AoO<zAv$YX%3a=dn|1-b;@P4%exZj9#E*Mr|U&$oJ}U&lLmTXsr;p#|@ZadH5<r z6td<JQpAEAA&BOYcW9w~UeElo#3>MU@IjVvuqZ7M*K<t~P+9EF=qg~m9Baml)cXYU z9^{~fB0Pnq&(h<9E$vN0sTVY$V?8qmST!Jyxi2rOY-os<6p4|se<YS*V|q|F?j9>1 zZDIaS<`FEX?szS|`+^E8>5SnhGHwD`m`nYJ2-ZM&?}FWl0jlaCun#?$Jmd~exe>NW z8MPDv;%+Mr>u<(!T~T|gMgQ`3wCi`BUGpg)5TD1a$BA}n3-LhQg4L^uekqu-J_@NF zy8G6|`bn!D*KF5QwJpbB843aq#rpFlNS*DVk|__7=p}MMD2jFOtc0}*wt_c$uMy0j zq%Ib;nAvbYRsmqKZ(AgR<2o>LZsUyl%-7}ATeEB5!>8_uX`z&Vs{H;|SGkz^4YId9 z6@}cCrJAe{kJH<q?G>jt17`j6B^HFQ*d?cFK-q@K*B{T270-4lZ&fDUp-1M8r@s0I zS~ky&OsC%D9~LvQHHo^L<$K@|M5M66-a!?Li|yg<iaFm9pyuDdTlgBzJe(=8Jj*~Z zL%v4`gX~BEPRvr?T1|ZYA-%&l=^*rsNGm{#1-eBpf!Qv0$q;Z62YURvUc6zXv~lC{ z2oA>Xdar=pi~(x@hV+8p;?oD`JGiTd{2H;z1@ftvJ#|-z_<h=$`u@rU7Q{{C6Rt2c zVs0SRqzL#Sc52g{qwHucJ(WMYalJz!G2SsLG(%2c$^=ah_9;^dvIt6mA;cPT?y%G3 zE{_0m66s+$Pi~JccXDoz0YKkwl%`LV-BDgI%Gl&QAeSiMy-9Nup(e|JyefrlXd0Sq z;yWkL?9y)%8Z+jAH53F9=2_>Et)$THU$yH_Ax2@zJYc<&<RW2?v$Q>Gv7e*rGN)3x z2c2oHO>+88ViKJv19)g4EK<qklPmGZ_oEU;;sz=v)#p-Fz~2K@taywV%wi#!MNYW^ z7V->r!fHD#2PUbGSlk)bN4#E!@o3h2gu2EA31~J&1d^M9vWeD^E+`;zcC6RAYfh8r zJSxndbYS|ccut^3e60Bd&cy}>FN-5r0019r6WNY)6zJeiyhF&|7=+n(cs6*pv8H6F zR%UbDES{mEwn|WygXIz2>^7o+H<oh{tyZ{lZbBI$<oYj12Zl%H6j^~N_yL=WQKlvY zA)EFPH^{G_M97Li!`{?#Q*Y7IgP!HrBU@SgjM3*{`q@wk<LAW!2eE4PNL}FXJSog; zPMlT1YykY@Y<g{>=Dlh*DN<%Ed2BXUZkh@#oG00N&j4DXl^wsVzPudfdON2WeZ`(N zqW4Cg{zbau&~%M&rtQCb)pX5Er66qk<4)ArPcvr+tV-0c9RvET_{K|iF#-gjFgVup z%xfklbDSBlsS05(O2D2!el%2v0cy+(P7y47VNgEaZ_J)OzSMM0gS8tAGcE!(30jW) zrOJr~$I*MF{PWCF?veA~?Ez!~@^B7xfh!X}y2J@3Ad=-=20}~j0Cm-DQ+KEp{f&XM zC#nO#7bBN3i%zMq9CdtdoTJ#OveGhql>UIXXZ#MvR@lDaY;|`vYSk+41#_l#&e66$ zbA{pH(`f6=G>42A@B!EQTOIl{8yO;lBX9b(x(1h&`>Y}zON#@IW!Mzg*rHAg3nq<c zVHv6v*NCF_l&00`cdH`-hR((5?3#ugdY#%^RGDUmGg+DT$>|rZWlI??I}3G9Pdl0R z<>{}0Wlb5czG<JP+s`sDgVUja<;IltzUivwhHCmVMj0;pGn`TXnC=zF^V&==2D8e& zRWqIw`U9U)4Lcq@db5H(>$*&6db9dHesdlqjq$#e`T<A6+Dr+C1C~*bRmbd_Oe%&0 zno*Bs$J`z>h6A2ak99|TyMqpM9;T)7(NCJ92Wk-28sjI}H&Cd)P52D~<60?!oRd%G zdmYh_1S)3F+jc28ReK#~Jig7DzJO1%n-2^JIVm^(d*94?h)70%rQ9&}=MX>6I=)9g zvW-6BUty&LHjO@wIChCgVU9k<?!7KJb~R>R&>wh3J@z_IvhxUOjDH}1So4^NWa=?M zN5{#~e<%G)k5w5RIX^hZuu!8t<H#^72dJ`XjoE8U(b8`XPKhk;XK2!9C$|mX%g1r> z0x;sDG?(mchYX+Dw3>6R3Z|@JvEU*!=N#QHz<yi+v^qBkHkHuyrP1r-u<E6$!db1r zNCrrYmlc$WkqwKn6+2QlJp9%2z`P>;z*z2;d8Ehy?E^;6yaqpMg^o}#zqljZf#ISo zu~1T*fkC}u)4Eqwk8AB+nNxX<Vd(ln`K$3VK^mdvX`?~Jjv9T1{Atw@v8~pjg;1?r z>Yu)lxn5D!fh4LAhV&ZqP__>lmPD}PAIPPM#S@MN*qft2=9#$&_s32}PMY!x_~DVf zK;bhjEY?75o`}&;t!qYyjfT!WiL{9QgIEOhI^(>mm=C6SV7K$QEHSA?MN2DVnW~Z9 z)tTMp^3Ym*6aAM(F4}MSgGMeFMk_nui{P51&rMteGwZ8M?A7%a!_z6^FziiC_bP7T zGG~{GZVw3=T3DRTTnvW@k1^(!t6wS3<RV{Zby-UJi`sLh*U|g$KMipHw$qsvQ#LYN zNx;SdRHYPC$W><f9Q)Z1ri>Tg&kv68?}=2Jki<MO*uckJ&pf+ZIN-o{iZbQnMXc6X zPv!3$y>U~`Mv+pRNI6*<MH1~aaWyg8CSVJPg%rubzoruAi`A#NayB<UPZa^>s=Lyf zE4&BdbTocLA;q~WnTpVu;x84yNXOP3@nySA2>h)((_?fd`^#3^Yh4UvRNBd-zOxo} z+AK{Ar!LwC4jug_$jS>VivBI)VC#<T*}!CFVF{RQVqaxh<Bc`9<0~e^53O*4|17Yl zuU#XKJ?CHK{|)%s#2cPg3M4+H%~m$1>{f&)XPtDaDjVK+$yU6+Ml3E@*Cw_m;<Ea) zAI0;MTFkW5DFbKGGAZm$3MpTcem~ZHR)k$cO7k(^xgKO;U=AE)cW&ZpW+a4PqMVmo zHao`$xxqa)8_QM^N<-zvfXINbIkdJuGp<w<+3~A8;`5mIK`U99D9_-5)bCs6Q8ANG z<MKXUedckQi7$e?ma7)3@fq)+aXK~~`;ieC-$|o%Vm4<`!$)DdmPs>H!Z{{ZM<uf) z^M?2yh^{15jF8*^BZJ-TxFSt5+Ta@+3jmDP`n<yX*lavQr5j5;DbO~9&rVkkF1!yS zUUVCIh@&K1ZC0jVoz#I^Hcxv>0yYJX{8LB;F%^`I###l*TJ9GTS6yO&$t1<gIhU2K z_V>cPNV9pavC15Nrc5^^Y!vz584Yf0_&gKtj4~XFCQZbEjQb+djQWjRPlOCoe-6tS zVgMI=Zf?inbBGi+8|X5ByRG~ecjJ*<8$>5;@KmUba2Dvn6bwC>a22z<bMPC(`3c)p z-Ygki^5e44hC(8R@u_rS^r+A<q=EhK0Y5~xiK*@6-$0#m2P8jXSj<V{ONKiNgNIOF zAJSVrqKniFo+CyYPFLWdm5c}JCNIyZGuQg8z{7B2#WUx6AkG|!6yw}=$Z1UCIUUR{ zj6S`Dy~=JM5$_fr)#Ki0^aVAD;ac4aG7EUPkrqXg&qK~Y^g<by5d+H2U;{XuiirUV zzc)ogiexb%Mpc+#203BBe&<SlwP>IkR}dU(OagfQF3s5HaNs%|DYfRg^V_c<l&{EP zO*X+puyBd8!Y=#`<08i~{(eLcK)B<QP3OpP5%E2&J90rgDVZp@GEe0VPG-YL-`~|p z+&#s0UIj(GDV|8@z#HbJ{+Xi+Iq6{iREI(ci<qt)dKRDZE?f~@4cWxZTm@D9CQ1$7 z_eEbM4=fD}!vq2wljX$e`xdu0cfBbKs9UJdPqE$7IP~M}KvPe!mN<SZ&Xm4-O5xl? zID+Uz_!9|3tRZGBT;|T0i36WWD#h&8A3Aw!(DK>5CbVcEvsHo)&lOTH#0I^_*#hMT z$E&3;3loWync&I}EC4+<kfoLy2MaSTK8nDS=0+w$@R8OcZ`qf+`SE=UIipE5Y&I-m zf`gyZm~Mojt}@uQ<AabA1_vy3H5K)(kQE@JBs)LFq7MmT;zls`jmNHMQ`^#<N+vY2 z)7KW)r)C9HJrYRK+ESiOM~XXS`4m;=%VE7&zp<%NktF`!&0K(}LcreRo;h%$x4eY4 z4<gUM0uaM-Pqlz}W9Gv1tbq<Tx7I?Ewq1qE+yCZGPfLR)+gtbqe}>Fs7*7<^#_XVs zJmpS5#?i{#?W%+~mTYcP13=;t9m<pozklw}_k&3f3EE&M{wxR1yUHFmWPw{P3CDEZ zSD^;mjk!+TjoLk~82DKY28Yd2Wmjorq#!9-f(8$#$l5unj-?>!x1?M=6m>>?I%%{V zCqL)X(4sLLk6fv|w4A};wF81S(1B}%@~)x-*M|FNZ66hPh7KAZ3ZJaJ;-Ioz<K|9N zxg5b0KaYgA(6{xDo-<jK9>?2oB{{SV2R=}`s#t2$#OU3zuQK6t@%`yhNdPo?St`1~ zerqxET3QV9pSoNL0E#_XakP4oK$B3xpO7IIahnO+*UTzV<g04Tkn7$-(8fm>SC<4L zL7=?mSiL<B9^5!;mU{6Bgf8TbyaY+(l}xM<VCqHXU?_oW;z3k&F6t)awQyrI!mUsZ zm4Zk{!(Sl;Xfw`Xu-J{=dNG=|4FuVtbuH=~V(dlQM?QZ!Eis{;5s78Rf=+z98ZIoX z_;xI5F^TaentsXs^N5+j)APtW{*vYQrs^UC`&e&`;&vHaU7%?aYMn?xTsW0+V(+3P zShy$v0^HE?NzKgC66{kKI~o2`L{z^L!7rsWI8#4+tvESNzNIA9=tXu3?&;)S_Wd0U zX*rqFWS-KwsqwASr3!Kl=WP#qHKpN4LcQ%FsQNwgR`)?b^c!2ls0E!9Wf3f4Rtu}1 z3FQxa+Jy#3M`_K=C1-XFZyq4IZ<d2L)-sbxpkr0d$GH(d3pQUx*_kse<+h~x3<kAc zgm7JlzD+!R`Eb$;mIGrrx3yPrNkKl~ni^xcrUYr*swoYTs^~jC!H4^Bsqv&73dO|C zOm71W5$zNHQjKQSjSH8Iyt<@-I)SK6+W_C%^-N*Rj*Oqg0z@LWqvw8YZtYF6Xx4_9 zcD^xWdRZ3__;!(Lf{09?_o0(yky#qbCth|9rL33~Lg{2mD;F{L#$rP)4=eJMqw=Fk zee%TNvL1xcqVH*SD@@dCDA*&piN+x#e*VqmBZ`fksCA%Un7dHF@V0vMlwVues}Uj& zI&2iTaG$PN+f&weqLww!Y+9S-qLtx*^G(Qo{aRR{xulmJK$ez3Z_=0<hq#~Qrj1{i zfAnBgk%U&(oQ!A|n!`XrF?62zEhySF;d??wKgRY^`eu`;^mo-J)kZ}mW;T*eH%U_= z*yNq2I?5u7-K@16X9eZdrpd&D{O19_X6XHzaj9YlYjK$O%PU_5C)QT7F%JKRxg+Gz zII1*p1w;3W<%zw4y9Tdu&G4;6Gv4}e5~W0oTQWy1oupD)Y|1Wt(O9Y(jwNE>S){Af zGFn=23DSckx-puwh{ZQqY9&srUWUZ6gj40|GHYHWsd|nlX-$T-Pd;jB(!Z_MXVXWj zGSW+>ZJB(FrI*`kUN~r2v`C&{re7};_68_E-Tpk%u+TC6ER{SRb$xMU9O7*0m2Wna zuyoG^zGPZpBUOjnNm=da!-7pN(tLl-U#wBT4@DzIGjP-EE^Q*V`8|wISg4YAP0hoc zbbEAEQge~d{!YcJX6I#q(J)?jPAr;ZxQx-#_&xW#@^5Xm^%!Hs5msjN741?c0Zi@9 z^>cbh9a<+T+iIbV&i?d{h#&D0hnrdS;i@Qr&SOgp*06vcdTBWx-UerIOp9_g9kgFc z$*Z~?Y3YY3lKARhX+tv}@MD~H_l%pU99&|YFt>lmeg)~Pu_<TBQB$suN7PGVBS<aS zgbVg4HI!1Pq@y5`WUWE{a_5RYS$+GJ(2b#x-J+#{PrT`nE)mCKtF9fBr_%9diOs)j zBCC;5<&INcyMMN_qF=1t>${lLx2392QQuNjT_$e~-jFXhq3Cjs6=!UB0K*5Pg*S9a zUSlVh=@It0w%#{11)9od**-TaDpD2`yGJd=926Q^J%s_V{<?`xBOFpRUA$ojR8aJS z(PaBK>QGn7$s!%h*7SlD;RHz&a_S~(CcK`EBqbvym?Ap5w6qKp#9=1}oF6UC+8V*3 z{Vc_c3e{Bz9Y0$_xk=W?noi234)nev4yoa6-Q_StMmhSVnolk+n-?Eu6jZUQOVK9V zr8yE&sF_}_c9=q!!R#e}<x`hr(bkx4G1{?=OVU>7P&d7Dry!uqxxCtrs2I!typm?E zVG)Yv*wnTe3W|%SE~m~@MyJfD`h|n{s21_++w7xt%M*}NpC|EBkdSrf!NyZ)vEyDI z7_GU>&G5ZdleM|d?fdA6{DZh#sm~6pDl}#(rQ5SZabZIqsss{??Bwtl$5?4c90#|Y z`iMX(AD%w{ks9E4bjj9gh^O8-=x0^XnD+4N<n=cycM2y-BPvU*NMuLJ2dvh}_BtpD z*M-Lz3`+(z5+YhrRmGmf@U+c5=)$Wd@;)MziG$wCh!Vl(E3op&u{oZ!9o>cjGx5sg z<1(ekOb$*g!iMNkp7(HXdb|uFEflv1ls<K|%K;>UkyOK9W$kuOj}Sx%26r)^@`f}S z)KK`MqGDUmj10xXFLKeHN>p@Q#noGt9R*4|997SM7<2Pb?yu<RU?waXh?F-ANY`e? zZWk`z_sqm@`!&N4mSt6wwXaFRMwLo?P>OQd>+Hs9cU654-jtK5F4VutEUT!1%WtKd zC@42-bwKsddWho~=x=C<Ok^M}R#O`^w-}Z><*stE@S6F#%YT&~?iIGgzseO~&pH%- zo>wd3WaV_=UK7`6sB1iCvaqSBxsy=a_fR65G22uVo{)d^yHbwrJ44#WtYEW)54@m9 z_Igupt;xsWy=kFX;k<{alf)y2ruszf<=t1OlWCKzn)Zzt{G`)*0VSh^19k>;t<~j@ z{L;>?F!95X5cxyJdCE@kKxU!qaWN?a36+xDkeGx#2hu(M#=c`XEQz{LIGE~AV{DyZ zV>AM@j0Bwg_oc3|mvUQg9qLZ-?XICbaE<+)Ht^ZLJ#~mu(|e<>nb5n6G4pL5D3;+T z!D%)x^-@X;(;639#YUe}v(-*LjORMw<V~^DM3ikT1GYo@(bYE=*B!OrYJc+tn`oTV z?{hA%Eb|_0&BRuDx+<?EP}o#1b}!ZvSTE~arR)?G8>_eOU+!^0GZm-&Hj`jl&lH7C zkPRqY$dryzrsv!nD8@-M-3|Dfq-k-Hf6#y0$2k(s!Oz3S$EVrhD-70#&90;#X+huh z4yOw#d=kOC*papXmNmJ)sGNqDI1=u^k4f*>xHH8)cvpY_xmnRh7Y0q=SupxiNceNw z?gD=9^Yw7fOC==wE(B6y+0E%#<^_#C>=TlwFpBz~iuCOYB6Ytd`olp@>rgq&lM^y$ zJ~P$Tdj)CE>U0TRsvAo^)}yW>t_{ip8SC!VRO#bkLl`6MZx9rVdJE#PAV9z&Sk$o5 zQ!wJ^@F9j_CJYU-V1ry6l#t^<h}(=edsY}OrXX9CE&WRx8cc_G#h=dC4MVIA-r4e7 z;22@lzeP{M>@?imiMGO$_|+U%zll<){7#Z>EHN&-+T-z>4CUGizBb<^2;b>;l_|c- z{5fS8tr+Ra5k_)GSS8-?`SvrdNWL0@cMj<DDzbNlekQLI73(ENxX8hs7vfkH;-$51 zz{zc;OFc5sj=5;uI%i)sSu%&XX9^NSi!7?B^^T8@uEeY@`n-5aiPj?4@ht_df5gXr zGO>$%GI3h<cRiKSt*V2&|4wQ60Ku^|fJ5`<^Q!%K@wATG2X4qSPlf??s@~a6ZD!K- zWvK%iTUDx`VU$zwoBq-)^TR`jYG3!+;T1|cO?waBBKZyb;a6&(WYFKz?dUIllnp`r zs7Rs|mQ0m=Fd^lwmsfUmr<`Rg^n6|JWk2YTT8Yn&wtzlSJQRXkhtU~Xfh_McM<K<P z5$l0H>P&wvi*8)57(pje-B&%z-DD;u$xhskp=a-D!Gf3QK?hPIk~utZS0@)TTEH)@ zBDKa!BNhR6+gK4Os3s69ISXLXH((y}Z}>-_=ZY75HfhBCox{V;koh+GhxO`XqB+NA zo($-I)jb+9{UE@7ku0)46|sifuj8&Dx?(O={2J|kSEP`|gEhhLyqc&UED*_PC8+7j z8U4vlNxb|9id(znV5KI4>;#>uh2xw+b$<cYKq$IVu#d%(8UUJnq~ETBv)DR#KOoY0 zmPKlXp~tS)H8*-4Rzalno2=|D43}^VZ$#RbnvU)jrb?GC(MOab_Qx&Rqh_V-6N+|> zG-YUGp^d>!{yya*bh)f$QI@v}Dz~G1EVj~wdj?*#^uGAs@tyPROD~p(QudG5>ImE@ z+OF)&v{pQRk%0xwr!$iLjqkB{3lvN+;(64!_b3YPme*NKQ%uVaztH(72auSr6Ic%- zA8HRjUzP;8izkna+6D;@OFWRgMj#>OTHer5--m+KY;+uvrKAT#NAa6CdA$Rq%sB_} zmYl_~u7(-6+nMK&02f?3bC7NozJTPYXgRUD@P_YcDoigROZsd93Sf`f_%s(!o&8!E zr*;7u{4@e++=W{rara{HLHl^Zc4)g3{XLuEuqeBT#c7YPvt-w+AOmtUmxh(sIy~Rj zp--A<(ax62Y68{vtQ=ZRp3a91zjDoZ;#A!&9(@(vQxy}y{8kc}FwY$1_PJ;Z-$8|3 z1tp7gdLE1E1dg<imGeVBMu~1QGu<OumzV~3q*A)bPK~xzt@O51+9dirMKj%Hx(EVR z7gkhpaRC8_+I&lItSQ_*_0lR_z0z5B^fHV#aKZ(4B^9)yCVG^aH>?_Brb3C)eb08Z zND?&%lXlEF5_Vcqr(<4gT_HX^cwAP|jO*;0hnOzdEk*j#5|MgCbIwrs&5mS%N@m3E zlk%#!B+COyE7}}2gUpl}0GFWtutV6S)Ia`g^DDweS3&yNLWEQ|8QWJ{P}7v9x>+u6 z8KW0ASJ8T<17sqKr>!J(`H%*xuaSC>UU_BwT=r9x=#t;R{J^<hhS_~T{p1?b;`CYM z=6L*a0xx>6a_cL}$9&Kl9A|P%PMV>QsrjjfTLhv0+G+4iyh!OiW)M&J-VYv|$M6QS zMxKjK8EYXHoYsYGX|I>BQTni}K+tIpHwmHfW~h_Lo%v&E${-Y)IJqB%*6iwfFH>yp zYtfn9s8|cL<?O>yb+`_XaRtljEYR{nH&9G5Aopd23z5baS9y#*NwmAMr`gTxG>&<T zC=Sda;&YD9X5?tc>tPE~*$6|W=DnHNTvF6V@29bN9>d(rrxLst(?^WV8dHu|ACX2g z<hEg+pW^wHIBEj!5@?p1>)9e$1Q-^d<@9H-w!AFZIY{+prv_Z~pH+Ai2;%E0A1Qgx zAeDP*Ei5uOW?8LDQxjHsq@J|a*|`iYHo}Tpe@njrKQvofY?KwX(*FIR_i)re)Vtud zyb-xmHFFCob(t->EhD1EZ(zbS*1Ok(RRYy@`Li1Qy6r69CmE3|u=j=STSMZ4Df0pJ z;UfyAPpL6$V3eKvZom|C9TUT4sklg7TtAi%<@BkAx9+w~xAQN?v;M#bazRP?gS~`M z-xphJQPM*Q_1g|N{sXt}Flx9#;r`qEn6&~ucF38Lk2H2)LbCvG99Q`oc({JpPXoaZ zdp2tw;+t=fqZtP%%I=p2<7!0*QV&`-hRY?bmhvxUJipbPmLHa9z8Mt01uG3;i6?h6 zmp$_SxLy#!(4$d%moD9gFBs9ob_dDLMTmL$L>cbJ0_lG*z3tJt(`l}-{Q&ZW==t~y z?kXbLJ2$SMs=&h|{hEn7KZmSqq;%+^pZj(v>~O!q<E9*7S>Yy*Vp;2Eetvdt_B$PK z41&ptSuM4&mxQ$%+jALy*CPxcBNY)@T~)0szifN3lXgeqGEHT`R9@*&9NrEJu81im z!Cf}zdr8`hRpKLB&{j2h!f=N|?6%Jgsu{!wBNmdl(@2QveHc5XWlCMIM>Bb~vo0zv zY6x3@atRa83feJh!_@VJw#UORTRL9~yDKAiz6A+_$>EeF^w=6XAC4iY!kk#}*uuw2 zzKjE<yBQd=qz9-2x8gvfbaJ&?nI(VB>XHgUbm`bu@6LgwEG-pO$>r2<_(b>gtWD@j zDgNU7zN5_Adsj07(z{<0R67MKS5s<J9;yt%Rsn3C1y^SxB0mal?nk$MR$Z*K$L+8@ z$g(1u=_X6uE7Yjh=4!Z_<DtBqe#2P<C@1<F@JFMaDEkl<ihr)?>5DcGWw8;m28#{$ zL9e{%W5!Z~kq$G-^*tF$Fzs1@PB=p&-HKr5h28M8gyUi>ZG#Q-Ga-MU$FY@S8%v-a z%F|C65Zsp8p64p-u{X0|yfiIt?QyH?q>txw$BZ`GrTg*i7qtW*i+?NJ&|{ZyNO?e% z-80)N)%c^JLr6w?l$|B(>a6iMl|VB)1Sf_B1I<FoE<dC0@-3(fCi`DBd}u9Or<h&C zGQ~~}aJ;wism}7UQBytMw({C?w)p47j@y^NoJi%aiqluKv3+~H%}>*2>K1uUH*`ev zXRfA{yo31^5e4QuyeDg*C&X(g-3IdEY3W(dL-OHSv!X{xvQoFcE~a!I@++L|aB@=X zak|Ox0t%dCLPTP@r#-Gh$O)>o%Q~)D2XHjj+t)JLH~@r8g=Q}GQcU@uJ&Wg^qnwQp zRCD1k)7&L`mZqsU7WEBp0tUy6gY)gXrt7VXtU6SaF-jsGD=>Wk&`JZ-u@T!Sgk8T4 zO9L8*s5)rbbzidirr~Q3?3%P`2{k>-dje|Qw)*<R_@|L`yp^Y^4$I9srWGba4NqLH zAKUo3`(?t<rzSuXTDnJ0{3;@e#)$CVlD(cvbnUsgJVN1OeVjJcl@ngF@F~z-E35)4 zL|S(~sv$*F>^w8x;zu;9vVY<ur(sWZ@c5bu%P(6|J?EWx{EW7o7t$XL)6MI6uP*Wf z&8X?)IKVHzi?(X_1uT#WdTz@%@RXR&>z=b2d*^^M`TR_-GooH?j9Iy|{gjo}kCB0x zL!nk%f`_Vw`oJ~Er|obmg5lX3|K9J!em}4o^I$qe?iP#FzZpeWvi1m#;<$6anih_K zY{2RF%1v@YB)avRKnMHoX0ki!mH(E}L<lKsbW;*mVD!gA=y;LaSj0QIt?6VpJEmtb zkFs7B+y2IBN|5C^&+f20q3W#A4U-qVw@ALAJnizr>eX^u*C!+oiz;2&e09nR?%RNo zZAyQ|EnD}l+4CU9t=fZ7Pz_gXWEZ4*9xd-#8<t2^f&};E1A!PsEWDEllQ)B?<?#+X z_cqS9>>0=~u8#Bz^YXU>)ec!T4adUaCH;9r%FM>ol77SPAF}zJ6)Q9vMM5iVobOEM z^wQfSt1R#dFALvtFLj#V<}6Xo1{w%TO*4G8VPfBMjdq{~@HArQvcCvQMlEs*l1vyx zyr^a-=;WVBojZ64%6K>KK(RFy^r^tw4LCe+s-74=Z<=_-N>Wadyfv>aCCP5Egg0}U zz86j`h3%Z_lT#+5sjRu+)lb|1y6`J6-!5RgntIpDVhnMgmX9%Umttk;ZPuN8Cz0V0 zGA@<h%P!uo5^%%$k|xFPwAyNd|GHNVAn*^~8SIb{MV=Dk$u3A@vL&fG%+i4&Q6dva zge%6<t=i82F`V}FUg?}SK})LYs+cjRP&2vX$Z5Q4R4xAtK|>ryg~Fawg4zy_min`p z59zLCkN2VF{udcRjP)ZZL3G_C*F-d@)lA$A#RB^0=;scxv*^gygX&LxcDbYZ8~HN$ z15@lNNBZwsoPwXY_)-`Ele3_7;e_}#RN$`d@kK~gJ);L2eb<MHwS3oS&5qV$iqP$w zP4|FF(ysiH-|i|c*04r{vCp{6DUD3#KQC&g6q4u&q9sVGrffl0Ci%<VqRCLpL9r!N zSgqT0I3pE)>3BB?LQ$&kUbMD&Dpw<5)Sn6Mfz7qGw|Yt|9AwdCINs3;BntTs&eeOm ztiR4lsaH=~=~Sv{L2+7WrHKb#OJ0l}Ojk{r(sQi!R<*bD^~+^iXv+`(Ab1wWP?(Fy zO&vBQ`gHfsxY9FuP)4XAhg@;r<%>VmrG_zenCvAoS!LvUspZ126V&4WgJsbS3ViQE z9$q8rwp2er?6UeRem1qPIToArvwg2iXltL&8}=JufnX~JB5`scbgxP)n|sAY!s1uU zxj9zxe%z}MhaYMH0buL+mk5C;<nDsH{-HYr6)`sookCl(?RI~^^n#oLhDGzpoVww$ z6o_meyN)+TP}HwzD($xi?B|}x$vK6=$%8?xs(0vJJc|?+R_+`kV&Odf{p<i2vuL)C znC+Y+Bg4j{`4-#C$nKAhHMNsAqcs6-w@kiumj{TcHCWrM6M5Opt+vFt%uE1co6kxC zAz6Wzo%VT~SF4J)o1L4bb<VH1b-xpNrw50%qjQ9XtfTP}JCuRfC6VtFfQx!PJ1})m zmGKYDg*k<RJk999tFo)~@|<EK87WID!B<GDVXN@xO$vVASCYywgzi0>ghFw$gX59{ zdoyBgv|bJBOhBQ2vd-J-x1!%~;4v|ADZYqwyis0wRqqlNXZR2YhKLwXv&ip>@%f`C zU^;;>TZGf;_d=J>cQ-Y~Hx39s96nBWLL?rb0r0i==~?flvvW*8l^MnDVKLPjRW|&U zm3uNaeMOEWmxtz<2CkX<)U++{o$p5DJ4iQtB46|5H708LY}LC_N890g=KvBy^&c_p z<gacbowbtf&m4*XLk+{$a=pkh;|ji&x#~X6DhYe=5g}TlgM|;3!m9RazTku@zWY)G zVikSAMQCwd=lPe~0RPvU{Lk_bdRQJ&YU_Fw1k}D-yG7e>+!b~Oc5%TP34&cTSCw(M zcM+o{RS)hRLkC+#5UtPAi;+%>FB?Gw?rZ@ZFt#H0bj6&x;#nu>2W>AWUM<fysrGyU ze8{WeKx)=D+VA8lAFhN4Vvi7y;_{8iygf?nyv9^}qJ)XGiS}n+@(YRUi+!P2M&lQ( zsr!3*{B`i_nPQ#|?$&3|3Ip(fXl}ae>ETx2`FXssp1mJXD{Zim-XOiE5J-lQOIfed zLvutwSqa5!AbZJR2*ob31Ad|K`)^7?D3G}0_Oiibi(TT+3sJ^C_xY|ZSSgwy%R=@R zvU^>sfT;Tto_K=xM#AX+obvklZF){m{2BwI`dZ9`*!te}F%e$f7g6Th+PA(rz0kP3 z;=8Zwdy+(aEzfw=BRMD?Y1Qvzos8G%O!DG7ZwyK2SU2j@Wp4L(-Q^#U@K37{(8tx- z&*QJ_a~t9$R&MVi-<VBvi8p#pKM;G{pT<WXyLrx%Vav7z=+7?z+JXfrZyEEQK?`v& z2moyA4~!ahlfj$Pr%Kob&FdM+dz@Wihko52wLEv|y*B7p==NtJ#obDnb%{%bOof7q zsj7F-5ZwmdYb&gabe*>^#;-8FzhK^jcbwWiLd$&vc1vL1qc_>;x1>&J)IactnUKE$ z<!Z9rePE3b9QSI1loYoMJ;A-33L3$^FuHZuoRJ4At4TKtKdRmlzkUmJDJcJd{(_}} z)&A_Oly9f>X{y|2vj2kFqp7jF+&6Yui1-nu_m7Ho^Wd9~-w+Y!!yw~{2YBB1%(cBD z^7WgRXC}Z_HT4XbRbKf=NS^75<O1=b+SIoN+w&KN1p)HfWfvs5Oad<`<PR`(H<Hl3 z)|Q<Qu#N@jIT7SDD61D>jjHoyz|{iA83GCn%|Dpfzh~TSZm?6t84-Ha9tB-rB$@9$ zVDdpCz|5;kDU1S>gj#%(K`)T3d*i0l?LKClL%OE$9LAHFI(eVAYyBobKPzdf;Ko|o z9rrPKR<%W3p`s8gU>#-z`4*^!?PY{{COM4N2MO?hsxmxUX8yriQ^p~+u!sSVAEeI( z5r}dcGk9(9mVNX-?t-`WG&$)|lc%%E=)6Yh7JtI%8f(91ia>Bg7!Txa+-Qz+gy`!4 z#j>O7!J!+{Pi51-`!ibB>rUCbEra$I1zz?sUl-Qb-SIWeW(443S@r9Mz)Wz$Bj2n} z@D`{g9MMhD;Npbhq#q#|$0*)UQ6_R*{5P3$A_CDb?xtHlW)evku%ln1YQqJzjS%3T zwE`6DetqoGAX2=2&cgIA+{VRNM3RC?Uc^EBxM0$yrWviAxiO1E=bVxSBt?C63$XXT zJeYGN-9}k30{9jrjXFC~J9P@+@G^i3z82&BX^yh^3XwW~mWYJfkI)0uUNG5KafTE= z%w9s6K@#j(eFX?K<XMB}3;W=_fepImDQnc0LD5WcA%IZZAbAC4y;C)awh^neW~@FF zgv#|DL3@j3iLv@ct_$8mlR@^Q){5X(@u<3ERV~*DFGepr{_;~eWK}Iv!VJn-oO~EB z?~0BQCF@y6>JDx_v$OEF@Iq>|EFZgylbySckzR$}rvNAjr`pNR4_}?1ZG%35!*`fZ z!uG@gfynq#7-vtu9W!GZ6R5FP_yIa|>E=$+Uup;YT-&+>B83;Y@gvhiH{G7HD<K}- zs;0tt4#)t0OQUYP=f62H4F@S9B9ZCEy_VqinH@BNCsR}Fx$=WKz-emZG^?ee)r7>y z?39y9V|jjRiod(4)HU~{sU4{N)p4tG=s03@TH8Bksq&%+EcKVV8*1Y-z?$w6{;nLw z(@MvRDG}W$@R`rNdi0u1G$UX}16wA1`3+_K$;N`WsnnbLFe6V!gN)c5VZa35zh7}m z6{h^lFIIO_VH<NB1~PFF=MY94yOSV~xdxzE%i2fg1}w$P!t2Hn8)Hy&6!nP(GLqWN z9y^eVnfn_xTm#6OR*H`GIRIFJv85y<oc9vP;s9S~Lx?f9XYN6no$Okz3r?r}T=qj% zou%;h%a0=%wP2A+5mhl$xgu<XDF_pEN;*ro@HvnlWwenc^c^Z`9tfuA1-!Ddq2VTM zwfKYQEzhDIchlOrvJcz~I$MMn$BDPYRl3!EAv0>w#O=y4r&V47Uisx0MLP}z0sx*Q z3WBkO+fJ4ys_Ilr)e<NU4Fb5LDnSf*wwe^QU+vHA^u9y{&W1d5IA|9VWrwOe0z=Ej z<nDaj^Suk`r@SW!m|vX-X}1wM@griu^Y=~lP3+kE7-!)%Gt=(U&S5~==Rb^*5AvHv zB6kJK>-&SKPLaoV=a$)i#Im*NX6<S7rz;kI-K#m#sc}<ko6x1sPt%S#KSs3fhhO~h zdmw%h3A&`6GgYuIVoo5{k^A@D!!M<?DuR6q0&yPx**T=1LewlImK<+YlVHNIJq%_X zA`O#p79kibUhH4rasf<mvS`wXf+hfHO<k_oVothA(>_x+%nU@lScMu3TO$_ffaMw@ zB(u##uN4jY<2oN2`#bS@vS8WAC+csoTDqKfk*YT8dOesyf~hGpz4W#<<xKtZ_IG{e z5rl)=pPcR}qv$w0lXKnI>cT4hKTi=w)(XY+ydQ$zWFNsxx%HH(QRDFkPE3M+Tl-=S z=Cs(7gkFM&HaS=mZNbP{E{xKF$zYro$y|yp!liC!WW!*9${-eQ9f^^k&mv(Y>#JFH zItoXl9x{{Xi~v7jI*ZM_GPhD2-2Nl81k?}@LIGTkB^yfpLO7c+TM&6B2)80dejbe? zpDM*bf&N$aVU`yvOKn=#W)GBEkrlN$DYVUo=wQk&h1~BG7Kt&fnDA%<x!ypyd%oAV zwwBC$+u`IRr@Vp?xo9uk?Kgf;Io<B(oR{_&KsRgWCn&U$9Js;nS&N$mt*O_=O|Fh< zgYwZ<I48Tc*Rd}X>AvLHTCXtXN=8obw%BV=(eN?H*3dntUCS-@B=1jttNhdePe4_V z%1+rQh(7E4X%hm8)4BQSX;%biTkS9WN>>+>V_LJd=+>=|S};>W3Y*RP3kECIfE}&6 zMIpHOUx0qMpSfq>A>S64SHU_vKty}pdJBw#_nau2T<*W6Cdi~eG9jw{LXe2EcGv?{ z%KeJ)Y0x*PA^>G1eMv-rLWhawh&4Y=g%t}+Fs<vp%4_Cw*^GrYC&+pPM?8hHb=8tM zIKAim_S8=~9oIsGPGuk!`Z$Auwvy7wXl-pb*sP?o4RKlq-hRIHcGcfvVWH(^=IzDz zX>_RLBL&Qg|I~dsrNDK`Yo**y0#1%SkGg~GqXo^k(wNU?Tq~)i7JIIU|LPT&(K_{1 z#sSw{CL<jPVn<r1G_0<Q94*g=x=@HWuRNtH4gE<wqL%6qAh$T^Ia&{sNL1d-PSkSN zE5TsHXl``|2w}yn*~;pp8h3cy`?7Fs+x|S-LzU%{wTdl!J&u)@nMhoOaxcfsleHi7 zmcnRbnKK(E^p=a55u`xMaKZFbahmJCddNKl4uj$SH{pE>YR2@|6o3Xs2@U~(S7FZ? zTHJKKJ00`*`18^&QwNY3NJi-uI_G$qM?G_^e;x~WVH|tnmnHDtn(BI3pqyRWYBOd{ z-FIU2+Dd-dIv;F(Z0DpK)U;?s_R8|iFtQ;~?87<iXK4}boUjXzeJ1ydy}+-i)tkeE z=@PAt$w~)qzP-x@^hZ+g`t%8o`YH*cey8E$LDSj7@>EAlqXkKfnS^?)0oZZhr!>xQ zzIElCx+{suo|rU!56M9wx>W>Uez?*HVVrU2s!QHp3Fi<`QGs<T=PQ7DCX0R$9wt&e zBMIk_PL+UlYUV3|KRbsDf*-O`;O_Bj<$u83@}PP%P98|zJ_&zF<uidie-7`0IgF%u zM$KhPJ{<My($232d6o|Ef;%jyc*f1GPCh*G>(b4)19=t??}9zdpzuVTY?i#O6yBhm zY6kZX72SZn)j{><ntYJF?Gy(7`iq|~)zkxcr*1wMNT*Uh7wDUxs2$X^NVpHoVJL+s z{A8@;ZGo^5<y0*ATac&_?5zsw8~fyh<ZZpM5Y^NK_*;NzH_WXJ>Kp51wd8HNa5v>t zHTYYI=m*Xr7sWF}?g#0VFXXdLxDWJUx72OBa5vSIFZ44JYA43w1I2TWurKix5!hS2 zs4v28H~BMKu2Ax!FZf%UsPCs+EYvrONj<6C1z}&ZsSnWSZqzr1$qlL72jLImDIu`8 zM9~kV!yJldtX$vZ!wtzac`#hpA(J-JDcZ?&(Gy`jR2wiGDQ7Tqt$c!9op45wHpTo% zKgN_pTjB4L&ThG0lFl@f0u*gnlbsZ82#12GYgmUm<ZVQgZxo&&li(Dd>bcNTx3<Da zDTizRgrrkn{0S+i`uqt=rpWvmzaJ`z_Jw{RQ$DKV#)UAw<H#Rbgp}VR^l5aaZ{c=g z+S_?obcL$NEJNJ3zzFE(XZWwH<ZJn56HiqNFG$@g=TfnHP2(xh;Z$L{GkL@HdBO9m z^(&yc6M6IYu@zp+gL#?;Wm8O1feUEmD}Z|Hh3g{T;)e?o9R5FSePvJ`LDOzHxVw9B zcL^@R-6cqH3+~Rr-46tJcLD^51cwCo;LgF}00+Ok_kQ)>x>dKTcl)W{*_|Idwc9iE zbT<O^rjf=)5a5DiPe@`5R_0j}K*_o%{F(Veq!1HyBn}h!{j(_&WE&@tYx;)vQL`|Z zVI~uHopCRR18hunDMhW9)*tuz*&LXJb<L-=zYc(;-~^IR%PBy}CEf>$u>?oTk$;F2 z=%`iVC-Or^tX~pAyYc7(wM#{`DgC7zy(w{!bpNF*paBc&160F;eg^8H1f=%Yz`geL zGoU^r0@bjg+CV+jfb9MX)PTr-8<c>IejC(hIp7pF)Cf3*3k?9i(O$v>Oc^g_0H&;$ zbO2N4ODljW`z1cWl<86jV9IvM2QX#1^aPl4T%rRu881};o2-{4Kxb^IF3=el>IJ;O zf~o>9aG*}W3v8$fa0w-#p#KD}*L3R^;Ed%{(w_qtB(e1uAkKIx4G?F&Bmh!kLp6Yu zxKLMM0TxsNSbzhy0~TOI4S)r>P+y=a7E}iKo<!CPXo?Nh0h;1MJ%O88&?!J4)8!Yy zo6J@p%5z))1=6zsa1$RY3VdU~6o=bjzI+0_X>DP`y{c~|!M*Bl1tUMl^cSE!I|IdW zq3*ywET|H&4+rW1?8AnN1K#wuoZ(+pw=UpcCATQyUlq3Ake`3__aQyk^!K^OJD(Dj z16Tkx00+PcfE17e_yS;nYlHWK^MYr`YFFR-2#kY2r+10zUxz=ZcB$$Yg+HfraRyGn zozu9O0===@3;JK+DX1<bfZq5%$^Bi(BKlkF@Dv{})qzpSB1T)-fF!(jqb&_U5`j;A zKR$o~z8+7I&c$$x8OQ^$fv+cMm)$Z1j-Yf$_3y$_a9rjC)UeuBw_*TlI6lq&w}1<} zOFZB`flqb+9NdQ7)-hlT%cs2m2V6eeWiMa~yIpdt18~7``3j(<x!X)k{PC_i2n z0VwG&w*l{O-5Vf)B4WA)58%LSSJ;vPa9I1W77b&|^7PXHs~Jc%J`lzeb!0IjI#PiV z06B7;x5FAA95dSE+buh007dz^EBfXwIKQPFhc%@PQsm-3Ix`4qz+4EMTRtEZCoL<Z zF)no%=wm5MO!pQDVtHVaaGAq0wHM$4GzO!0o)iSA6p3bDf@Wc(HDw{)1rU@$lFzIm zBRFBX5}lG|U1)x>Xp|7%F*LtOWfBN$mWnQ?E25iZfa^W}j(O$!QOK}*$(%kt93>_% z{}d4yPI!XXZ-wbv9Zd$Jpelr$!6w`c(vj$9B6NMqrbPXFs0=adwWV(S1o3CCdBH_N zRZ9vsZig*LnVWp({e|almiS$n4ULZthMEL_I}OLHV{6yrapQ4;sLcebaJ?u}wL5=H zG10U(k7*>K#w{wP1ybh>FUM#?X^ZwPx)rSmb$oVpG7h*ci{-5tb)I&PFm-IDtuifb z-xs|~TIpKagzL^E9hB@Gr~X>@OD^Nn!3rcBJNQ5BQPKK8?K#P3JnVg?eS+?t%irCO zQOlq2q)Dfo{>(z#-Md7${OlN9Ko+z2p@3D+txzpd%1y6;EMbqTfGlj!$<Mm+C<!IP z(u-q#y*q=*(AwpA>)#45mH)PSbg-x_RYOMx?NZvfoP4z|Y<4}(@r1m&<ymqw^}S0c z*v&limVIt9Ek27FCq0-nT?77&KF00oSKs>9rc3S@L+eoz%?cVa2dY|b>_luC6ZAMF zsnr)+(Pl5(m1%$ev{OmCh0fR^XDU9TpJg7Sj#AoUpe@s2=ufOyv)_8kuR9733U#(2 z>;fN@KqS+sxgx1oG)}}CYfnMkUg#Z>ncTi?E7Ixa-%8TOtRjuZpRtFmYSY7fm~I`$ z1T|ti5;Vuhl{?anW%2IK$~^8%aA;zmr0_UA8(J+zI6SR0Bk0Gyh$F1(>HO;%aAj*5 zJX`tcDOwVh=Lt5{=)JOj6xIf3_2erXs?pzo%WLUwi?J8^NoE@UgreO3QMVgLXCc=$ z`c=L*JzFHWZ>?}sM~d{5kkCo7Zm!H_U?Otj_nGcNErWlUi=TD7_FVKV_7IJM%79YT z%~(%^ww`yT19O9eVckC~W10!saZhwc_ocKzePf!k&T*xQxThbTvKfhco_`bO`SO<d zO4<r1I%Po#C}6M&e`D=e(JW-oI%<U1w|}2HKp3bxt5gdH0ME%C&&hhWKR+iWts+jw zdNuP7tFu!4%8jbMw2v8YNVrQqw6C0&l3_x|8>o9=%Ic}tKb*OfGkxIQMZiP*{Q1|x z=V2d=%$lOMN~I3j%mj?RZ0$A&gBd^W%rOuXd6jY0Y}pPk{J}rvJK@UZJwNl{_!YNt z`OX7@UfuN8y$@X8xNZ^qR{Pg$XJ0as38?Z!nxBK*3LBI#NgnW;<mzb<>#0fBB{1rT zFq-*Oq#1p~$%Lfo?d7QHUK7Y$W5~)=xh0}%B<)u!n_o}Hx>fePlNbF(?YiUHJmL}U zdnx-0zx}+mG)r#JDL|G|v4WL~fqfo?`7W4DcZU}P+cU`5_ktQz-Yi)Jk#u{cQr^U$ z<zSe!ZbqsF@36&VK)pc^K-=F?w{HxCO}!R8df3)bq`r!%B+J|!`5&P#F!AyhOTYVG zFE651_T&>n$|}i4ioad@&Hk3fmR6FDHCcx@2-}%JaQ;}=$>@mQWIvLgu)=*!!5w{9 zdh=IrRHG%Pcl45F+$kDFt;jRLHolJ5pu;y<U6p9lu6kw(CAuY#+?*??S}eD_=jt}0 zjMb+sayEl<z4%84b2DR+GNmmc-hM&WM^G0ZP!~6^EikKm7fP<hDbD%-BS}OjHbh{# z_*)*d{|L?SBX&-MK7u)m*{A3Z)3R<gekrKbr7Q=a;Sy&y$4K@udE%F$DNOGn=xbBM zN9oapudNN#`+J6$C=CptJ=w-nfi!zJROrr6;F2#x6^(bw*q#%2#F}(@ivJi|GeN-e zlLSj0&5hY~68*^-b2Bg(_10L0UosJKG|ZC6mtyPR9`!Y{@AqekHuW?SDgV?8TVmhr zbJhGZnlX0|USFUpeZw^UHM6nmM)^pJ_fhMfs2}VDVo%m{+J>T7sdsYlOxIY22irsL zhFWha>DUqk{~CQ=vA2venG!GIxfYGOkI~>dM^i3_JHb#9RfUm3Q|?nj=eTc6RC7iK zbJCp2cwEcRYkKm^=dknYfX`7i^yEc%#ryWbLW<<dBb5q<MT;|~os@OjNkvSz9@!dG z#Rj)Hh9xE{4htto6ks7C$#vzEdAVcSTRI_wz@){R&1qurPmglh<8Ob9pX@Olrx9jh zTZ$kOj(DQ_HDyt@b4Nw1+a4*4@`Mgbwm%jXlI9bO>Q+};jJra-Y%^!9R{wf*wB=Kj z^vJ8tn-nqFHOy(X2pm_fK0$cTaQ!;(h(*6JKt$F{4^QABfF8^qbxKK&*^?vuM@v7D zScFN9T8Y3B&r!moB*gl~vQt(Zv{7%Wc(K?}bbll;)B0%WSMW+?T=51HE9_GfI1!&g zOn?hqb~&bz#SWZjEJ`9}dJN~v>izbow1Eg6qEiCubs|%HGtZTLv#%|>AR;~L8YXzm zzv5oE@0NVCdrk=Y8Xzmq-&<ZlBtEP57w%<^wbV3Q^jPn}<&n~z_hs?V^u?blh@3n9 z%h+1M>y$|Dt2ujdU-k&oyirx<K~}6)evROPjv}x_mWf+{dFUWck@5z=tm`3rcHlWq z)4sO>(t=i&1X3Tbl`7*nCr&q`MRk|t(<Na@DKez7<GHN&E^P~E<qX0saywI*wa@*t zv%zqaApSKsC4{Vks3LXd5$*ar@Mq8dqoiezD@nMlq;QpMrz=9Z;c@+N*04coZpJSR z6lY(=x%C8^1aT=_Z@=7`x&E9DYVdo(rd-sbA}}2o6Jg^HL#t1RLtrv$+9jd-kjQ6O zSgN3Wo|LeV^}vDF(a6^5Gs14Y?5Pjy1UEZBJ51c_zvo}=c(m&BlsCe=+`DeeY<E0w z7Dh1C323~1-1Xtfs$M+e0`;NEl9AsFNc5yfX$Sr$B{)!7rnud}?iwP|jS{)nxaPTv zo)WVBy^kl2Cyjy4e-Iv48UEXNQqBKnUd!b~4R2ZdV6&^c%daUvoYO%3lhix;qoz&o zw>9KuytJ_c)L~;Rux$DFDH3n#%5Y_#0`7C5x;OVgz*;+@l<4TU8*B@<a7Bf%hh$gE zaKF@t1LI*K*tYRK+Zz%K(Qv;sode%t1SC+3``=AcQtJ6ABgZz<9IE-uH9K}rijZmc zJxTZaCSs|V(HrZYE2?<8;On+5E{f3U57#lD=6#5yV8<}6oh?wqy~@h7I4OWw`iQ#> zyBbJm)*{1qIO$~Y!V~YCdeBKtVamsPqJx>390k(l{<7`7{h67(vc58h5w^VjG;(?R z0KH<|pH}?$HFEWI6Xt6^6@OCJeNfkZ_;!zo_1q><6j5U*vILGYI-54O+|E782LvRW zO!UkQicURO+G&JzeT*mhyV?JYbhA&~bW&MQFk$!@M_ren^<<C{{*3XMFj_fNY*Z<w zbfxaZU~yZk$It(_?{(&d&p8FhPjxea65w3(;hu|HU^ruqD1)S(tL<VK59;(MHks7@ zecRy=%Jy(=NU+>M-)^A5Ffs56e|uOETj0QUEWs5ZU=82NC1WLXG~CYFD95t<)y*r_ zn<yyBOAhUP2rbfvrInT9A!A^RhSGcw_74<`hVrXb?(DBiw|)KLk)$tTANjDz6j{}C zMM2o5KQ&b!8A~KuW-JR+X}g#}meHvnbriFeb*tsWG?j!vO?!A&BJXidG&an*V?*PX zZXivydY$rA&vCS7gDeFK9qY8r^uRIyakA?=H>wAnPtkYU80B3oQL|>_+a9IdNr}27 zlARAN8U|8Hnuf=kWeNFZWGWmw8FM)xizDlO!N>OIP_c$w2~$Ma*Ocbi*Ds&4f-obW zZT6LibSHKF7!Mh{SPrE~Il>5D6;`x5B&zh-wXK;5CH*<V7EP+j8jL0r(-zZkT=?3H zIcRNCPvRLQZ#(zQ-BN&<A}IZ1%b84%06&6H*-U<!xw4tWYSPsur%c){Vc=g{GvnOq zGXf>Cy4fQ5b*!BE+suX!c~`7@Gvj8%?!z~g#h|bR!VpaD7PpYAkKxKk>pcmX5=92n zBYeXXSc(#ANt`Ay$fwE0ehWScEX=zUj70+NF=~$V4E?O)T(y<DUcPV#HI-@VGM~gc zP!yIJf|D#Ip@Y@a3~I8?(HxK0t$UcRalP%e`X&&WZ!;%Z<_dY9EN8kR&xWbf+(Qnd zf>h-nifA;jD?${<6$fE7n$8NaB=<6A&C5|i05~b)yM41qqD(iap_}5`6;=k5f<b>` z6ht|O*6M!te5mAmIvu0c{mzW?cq)78sm9_!8uzvma>^G)CG~MoYP{7)k+2Ctd$vz} z!`xqiz0telWG!e8^4W*PJsGtdCi$PUgqh{G^A9i&j!XEHdF=i77`Ns`;Eh&W0R%$$ z_%3RuFgK(5?Ky}43?=WAkKO)I;jz#2&Sg3^C)cysDY}(1VcMJfzTDLC>?U4+q%j#y zyp|$)tF7mIwUgQ{KzP&r-S;CP!BnKUc6kXpgq_f*ISU;E4vVAn1vNCAR9-2KqPS&s zlIT8w_BPRiCGS5gGtAx)_a^sFT}COY4Ju}3f37WG5a$f~(+6*jdmtD80Q2KHnoHdL z59arM#6Q<GCUs(?mjt&O83hJNh6?4<m)6rB4*gPVD1PT&(=Of;TIX<eUW7+K{3X)X zl_FUj6gu1}iA!o}c0o^LXjY=1v{yd3InlDDM~#8T3EV2Ki8|zbb44me6e#raKTa`E zCF`ZzjOC1@?x8LxV(;TuGdKLoI8_nS@QveVbe?+wc^?Jr8?V-O%l-RW(`K}ysHQGf zNXSeX3W5^$=scv06$QZ5J*K`E1~jBIi8Br?gr{mcmKl1c_vq*u6cR8iEu4=lwnn)D zSG77M&&t*+GMK*1zmDUACHC!FjeK>;%et!)b$fML(oGlA4GXOoa6HK%lRm8`d8Pax zM3nQ2+p7JggZ~0IR^>#E^Xl_UCe=A~Y@{~-0`vdr1xh(eI7r7Sm?{p+mcp^3V&1Cj zrV3eG_%ZvZ;l?jXF5RmWB+FVmDjvVKEcA~A(|L&HIX@Fit%DknH$BoNHjOQ}wEE4D ze(}Wrq?%U|HP$aPZ-LL((WFGEfruE=-Lg+HS9uc!Z|f@bEI?U)DuVwG{|neH-1yo( zAb<gG9p3z|LsD;I)s0HMEZD!eFN*YQSh8mjDjfce+eGx89VLH}Obm7%)<x>rQ@@qp z4Mf84uN4XJIEt{05L$;agvUyGox<))JB?^x3IO96J$OEmo-R`kc%A05lb^c}VBGtf zMftbyx!jv7O-{{iBOpGiZFKl9VR$gwz<3vixxZH)8H0Dd<4k86K^BAOTZ;H(cp;^B z^2zw*tAI<Wu_@w>ynu@rd>+!t*QKRw!bt5c8RMFM)CiPrtk*o)H}>(VV^M~U;~p%X zuaX8Z)e@w629J#He$F;f_GZvF=FtF}#iQDvm7Y8^Wx4p{kmC}_yEk1d{=?^dZ$nnL z|8oxF#Ey4qg%Bmdkd!`#N+TA*FC5#*v0z%|rxJP4suX>Vl6=^zs?Y+4TWn{1ZW%kn zVa-Tt&BE@eF&O3gyPwE|geWkeCSNv4ORXZ?4}rWeUuI(A#<tE+EU(N&;;@QvmjBk= zuiFpaxXeUlN~57H^S#8_mj%+J0dO8f<JS7Iy)#m*W<$zU&$(<<dQA;X4iV6=J*v!? zMzO0?$7Ls{N)MB!%p_9>vw1$!u-<-gshU&kE>jiff2TR-y?bbXGKJRdpHaP@8|RPx zhZ)vj$}Wfs+z``yzdq*(7ec6adCo&-yOuYEPD6s60)7$J2T`U^!#?tLWf`HN-ltyv z?(ulSII=QBgmgE;`gOQS?86%$rRh;IkxiR9jDfgLg!h8!+yCLYi4Pgumb7cJ6257| zZIWC*{TbM%>_rkGb3X>o34zXj{Zb>J)&WSJXXKN05O&0}e6Q)y!>Re&3Gz(CSH|vS zT!NxlgALsrb3>8$rSx=nNzR1SO0phw^`i;Xs1v*bb1%rMrqNC7Ori|;BgqoH!YXDu zJ?mz^$3>A?1{uUO%qUJz+%$+0(bbE^4pLBjM3n~D!*N_&dg|@ebdgGd&xh+5*3qTb z*FU_mM+6HT99|idTwJY(fb0DYytTc*l8%*)-#6CQe^5i@)PLh45+fBM8C07qAbOQ~ z;Mj!?Y6X;IU((11MFI=Vwrq%?*eshhC0I51_H+{?qMiAIJqw5u<W2~lP^`)Uwn7X_ z7*8l;<-mvpxfl%i(ysAsDr7&H;M=SF*Rujd;WvOjl<-$uADr%sr(47$LWgl6>imwW z1YNImujVG*X3a%P!F=5w;Vo>ox_I#rc%-H4k?E`|NOEHSEhPInzkHt3HsKL>UFn5# z-Sj1kqUu#@N;kMn&kmtSgXh@MFw|-K+hfbYv^Q_&YcW1!grRfUPu+6J+#}<{D!XD& zTg_}Cx@O|EmtKawbh^%}%f7Z_xLXRpW`_c4*;<Vb^GPf7J~CTPcj*FS@RB{~%{~ou z(ds&$wCb}j;Hbt|q@pfom$rc7m}*$Iz_ai~ajeh_0KKo>>+-@-KWi7|%t~O`fZIP; z(X(U;oy(qUvhF%ShSMqOC|OUQzFJ6dZ4L)C!t`P;PC;d%UjyUckSJ?2uS~bYZaI7T zdM(8C1$O<_7mvd5NyL#T|8NE2iG8<v9t`B%m)i|qL(~$pvL_AT+$Z0)IS*sv;DpDx zQT82$!b_P^p6cxixE{sWAUAsJQfw$Y0d#`g^+65CvxuZbcfXcNzlWzZl?Zv|mYU0< z;0tS3E|;n|8L(M2Q2QSt@gV$OUgz`EF!w%t>~e@+)3o0lHi@pqsn*4}`5;KJ8Kv{r z&}|~|ldlJ(9_7*DRhqORxKF5q&vbLPWK;IV{Y#>Gcb$V?lCcQk{nq_B*0BTEsC(O+ z%l;kty^zgWEu)oTJu7vBpWG73Eq{@Qb6Bv$)+TwcY^z*hA2V+?`Anq)ZGt`G`^EW6 zr>qGz6^1m@uTh?O9a){xcG!92mmZHo1J2ANKRovSec*w8_`oAJI2uLt@PUN|<ca32 z&d(KeuHLIwZ6<Z0#OjD~T=kc(r}agF^6bN`ns74OJO*`_T~sRds#&R`aIW&=K^oI4 zz%8`xdu}OTT3RcCTlJ!%>QW-TjUD+OnImzB!53A2`;nBttH^sCtIXF$Ufd7LPp}WN z!l38!x^kISJC9N?jJ*0hCCml(intb*BaKy%N2?cKk3?7EM$!7`CA*(<0<FSFBdZ9H zt!*hm6^@#nb~&Ke)qz4TO08i#HI^saDds1;DVDev!t~u%0T5_)qVSWchOR>c^Pyb> z(+QPR*qzP3<QZEzItQJMWyx}fkOv>}7`a9nDbpb}w~Rs#lnYc>iz75GE4ovVSdT~! zB^M^|SrI4inJL}zfCy<}SCr`GFng<lSd>+A6HV;F?^ZM~o$!hhmgQD;sYMHD6kfQJ z5Yn}0)T8OL@;RKSm!5voI{8Iv<dopqCBEub{szsOR+IL*3}Q=2Lr-k0rDHq}()y2R z9zi~>N}E`~OSJ08-nu53vhNrA+J=Ma2jJ16$v`8kx`|CkR*9ciK@Xx!k7u0;xL*Zo znr?=a?Y8;PLpgD~P??FS&qMz+A&Kz#>m2snRfz7YYN26}Qk$IHI5(O|FL1zEnvgHW z3|_TkJrFkXAc+gCXd;@Tm-d!~pEbr(LO%~hdB4ltw8jz5u2sd@p*2CO#xXqDd!SF{ z-P<4oI#o^EM_|`^{VZKTfvs!9ZY7~`<PpC@YBu~tdhkfR_n#kK3Dz8nP{B66AKkzb zqfMj7UNFu9`t|!qu0Q@w;f{A-F*1d+(XH*8Xh4lwjVGvnKj`DGS;`A;%Nk<gz8HY* zo@3grASB}nuVt-Iav~7M@LY-8=qWbc!8EODRlqX)j?yjp&eSdZj^>l}Q;bphi&XtQ za))fio|iFQjz@w><(EDDbvox`_&wvE=zwa%v;v4zi#kUUzMr>{!G*NVQJ`H~FY4L+ z)0_na=n>J&BC4^OU{Zovet%?f1nURCUd(X(&o4HpR&UPvmSkvggqiM<LXk4Cn_GTU zt7?{kx%JV~iX*VPIZ4d;lYBuH>$D9^-ed1L@gw#4%A?UfS)lm7RABJF{mX}au4sQv zaeZG^@pQXB0ePk~ynC7TQNBHLT=6GXK*50(4={-GMR$!5f9~f{paynF>W1UaVPVAh zCn=hp<3-e7*#H3VPJ%K`{SDua;T$%}mD3zP$rZ+r5dVnrI_n~XLEfFe)?DIQT27o@ zt_|uPi>ziQ+xq(fUOU!lcH?8G7-Q6kOyt(y2ly04ti1jq0r1p+4eammDqI}G5s_9e zVe}bt2C{E{B_E(|VrOl$b?&EOQfGbmd)s*U&Cb}Kz3Wc~UuJ|5<8m;DsZ!hE(UN-k z=PV|SON#9U(N6SDc1>e|=d^{s@e%L&6&W9-y(03oegVrp%jHdkGN~h+WG4lKVpidw z7NXkj!MhsK6HbbnpTsq;$s37S^(A{1MS9C0oyzj#+{p4Xax4GFokJ#FVD)cOn5Z`= zVDORw!W2nu{Og28-iBzFIMQPfV(>_6E~CLqFtsplxQ1{fho$69FM3;Y$)Y+d=S=qk zDYGoxko1}pRw(O@pFf@$`}X4F77_&bq-?5?IIs4R1){S@_Hw`H^kUg8BOW1AR-kAy ztws~PpvF*eWb<B}2(_}xRNnaIqmXuAc=;{M@#hz2zmOnw<62YH>OH?l#6WaW<Guuw z+D*xZg^S{Qu=iXAL<M3H$QEeQm(*L`P;zl}Keq`{i7j^4R(^pg$55q)_b3(wxgV*! zGTY1@(v2`|bGX|Zp~VrX?f2fjAH4oCS{+k=Hnz^Us@52+vsR+=#se+ytP<7e0^`Vw zb4nA%2KZeFvQz}Jx+EA+p%9)Y)Dat+;MQV_?ko}HiTkR{>p;IRo6^vl2jYV*{jAW@ z^D~K1Q>)9rq(LB2lvfoh=rLmOMG|TIvAI^%@!ZxX8JkvP<Y^sEt}WHtz~}ExSi?@I z&=Z`tCKiZ*7qq{$CB*R*PeoArtIF~{JT!WnE}8`JrYkGpGv!8ixyC=)ZFwKR(N9Rl z`tNWE;o{jPg=P@`4AqrgyOQy)4gX$_qnU1;f=YS@S;I+1xuaw$HFGDROufU%<|wFx zpJVA@Kedi)pZ?vvTQ4D<f6P{EG{CWx;yFX&hQMLJYIv=fFIKNM^;zZ4K9L}BVXipB z_>^64-^s%i{di!hb1|v`B@oK|>`(IAb8s>cihZ<&9H@^q6Q!o~*hn=U)u5>67OOzM zQhNsk-E*?ZDUVEB5Sd7tT0{A)7|pH1-FOG`>^X*$9xn3;4q*RWQx6A3b5VZHz~nlB zt-aH*;aMv@AGyBS?GkGTLn<VK#n2yb45kaF!d?SlAct{<;--L?2X5lxKH12VhBUVq zbZ*%<o})Pd$%0-L`jd;~x!b<9ACS62IdQ7P6UrCyyA4?7So0@RF&*;iPXF=>2FM?b z#>NSp%<g`ijNG)(WAd_+c#_GqA8}|aqfwZtaNu!&!AnZQ59naaZ~_6caM)Ptk{ZcB zt2=GHtYLS0?%#qgo&q<;rcN8GyE;!iyceq6RTn<Nqk?cRzq{dNFpB@;-e;{<4+1WX z`|8&`BQ!Ae@o1c>LG>R{gY>vGwTXST;o-GI6|3-cwD{&tTGcuDLg;HGd9~1sBB~Q~ zYpQJ13{e70%Zmo=g@np7WP_`-zE^`>%MIa|G;4MU?D^JI>cU2<Jg<~nKjk;H^(R%b zT_LpcZ4|W)6jYL59oh>77@Z|fRf*Eo-lcv7f35nys>fV(m!?=FAP-u2)wJ=d%@L9Z zmtkNBJo?htp1Ff`ah+X2x@k;Flxdm)SxMTz_m@p3xpoga>*Fm5aSuAJUEPgwQxCFF zNK!qPjPwf9z5aT7%0~)Y8OEhkTSau#BQPCipH!z_*LT$8R8jr$G|+_COi7}c){ae8 zX8%rib)#6?JTN6q(&ga)VHakRl{o74`xQj3?RSN!cfSp*FI83#<#W>7y7~)JbwMat zPUFSAGRRfC53af(7M%I{R;lRGF1jn5PN*N0Xd`~O67O?|n$LziMX|Hee06G;&z4zh zpP6Knbonj9=T0fVj%X@q=ttJo>5|A7CIfIS*;LTL51pMAXWuq^ktgygU8TE>8j2~3 z{S}g{(|eJeGRq}p^(BXuRx;DhY%dk>*Gh}fVv74RVcn3kN0x<#zkLU~f*U-B!W!`G zY`TSvE3LTTv9=!_hY1D1%hoZkKu7z3tp=?}E8#*fv|Xyb)L)2nt-N#hhL`T@f3=1Q zo0uLF8J*OId7->*O6|XqV!!q|1$ZPLBusklmM$eE%<2ZD*OS(D&D9UsO2LfY%<Kk* z1g<!9J(0U0q}+8}O2hOC24Ao5avapz%4}2q#Ap-N^B#@Bg(sVh?R?y@rQ81AhEXo4 zXPSvBPT+#f3<mShH2>y{?!i3-#~TSAo7BCXE%>zn2-`cj-I&Xt@V4QGoHQ7M;)G%p zWAx|eMKqYIPVq!~P{k4-Hwa8CKF|Mz588Q~>_)SBaA7MU+|Es1{@8r7>RIPjJhRwz zBBEFL7a@;<^}V|;HCx(LJq}fqo<RoIk%~k8lDbTFjliy65FK;1%@QuYai--U&aLJC zZw`1%MqM@4?)=<AKkjv_uusUhyp5##*cxhyc{JcGt;T$L_Gj?ou0m~vS$BS9%x(I1 zM#-sQ%pq#Dg^X$TaXs<3?-J%TT`3C+$;;DDN8L9Y3Kt@T?1C!00%q;Z-FCc*ddq@M zcG~+t68ccz28WS7`I~auO)?YCh9j1IxemOKIhrTSuY_{w7Y#(gNe`y{DwRL7*8kkb ze6tr|>z)+P6?((_(HXI{B4T25GbmIe1N&t=wep9rR36(YLA{ctdsl~+O<#bgi5K{} zCa7^#=*#fQx2z-5EPQmQ2o~htlzSn^VheV_PZgiH3=h%lUv$dDAFy!Jsf@%SY6ZQr zye;?&$Om6&yWqYrNl5rQ+5KUM?$jTaD4^CnflKc*FLJ2ggHQ04#NU2B-N@E_KC6qS zZDcb_8@pf>Qy}_msC{sv^5uYhrUXTNmbtGy#8z3$)>uL-`rnt;c1@91c`RZMnk03y zV#l2}LJg`_dc#j+ceCZ=|EO4pb;5TBSlkG3Tk!I;$kV{Kqzwa;Inda)1U>3WxqsIV zxCGs8+jMJRFk;%w?~MTn_jZ=|&L)?y&wsY0oK~wZbJ}(U*aqHoRP+gEA`jQBuys1* zY;H@_7IqnGZqgP~RdwSEYKPUV>4?VvT^i*ViLkV76|1z!J{L192-Kwdtg*3f6pBZ8 zH#MYxeYD5by2Vn_zD*`}{_>zBO52O%Os5<yJUWe6ZBlDcAI5&`U@hw~tkawQpxqnh zyYTrPi@ECEBj~<(UCC}F)`Vo)3avW0T*OUX872Bqi?LtYRI$ocb@G1RVzevkKP)Q& zOpWpgj^FI30XP`f1({z!4*)_IJ;CZuA>A!)oi)9eEXcmR6KxG#J;Nrdh!T(BY_&&K zf2(XpVceVm=+;7&Qd*KyPIXhe3CA*8LiHW~NB+0%|2hBH_+KDhQbb)ZP);%zU&RH| zeI#aY@=t&*@I(AOf2FRQhqS*irmoS0%Uq*XnC(YsS*2CPuXPNro}-fMK_sb~E2<I- zi>c=+Y866Vt-Am12_`$LoeXmVzf4Q#VfHM*PpbtIA#hqbH$F0=X;Fr4gLhAR*dsNR zJxNR0BV56_oRY=}X$uV7?4F;Lwe<SYJn2Mg>q9|c`{mMlU>;bjQO_7vZaLXSF_7d{ zyFjw@ku|n@st5&qQ<>OF(W)s>cn+53)m{%DuI4B_2J`bO1tN=<I>{wf2~XqP>XhU3 zCEm@x9=YG5LrOXk^K>`m2p4*mwZ#X6JjK~df+8ns5M9J?QAH#~;}L62x6Qx;KJ9*Z zN!m%<8en7*S<x}=gE=4evn0Z5@$FXdr|0-bmLR<sa!Q+#AYBecW#P>6*;h@^&@zJ0 znUReUMsxW&1$D!**{QT-2s0B~j|_L|y}ZHk2POt`tC6YX>*mkQqb8aflk}i{ztY&X zRP8k3WUw1UDjg=>$~D@mX}%hGbV32w7vGNAnd<L8p#tgy-K=6zK}(ui^9`ZAe?;;L zex8Tk@6w7?ML#CH(j?6|h+gN+t70&>L`MRe=D`n$Ik&!VM!fc7+L!dqF-9xG4i(?D zcnyqH;q-Ur>b^g>#zU5}X8rVQwJLoL-Ixbo-XHavWCMFPw+6$gKN`ZxPYX_aFs%Z< z>OCo}>Lbm~T4U1S0n4V&XjToqREGJAG49(>%|`1ox-}Qcd|*V&x<`0}ie~R&!>hT^ zbRC~*a$;0WXz50EHDkXqw2nH^MxD~CjGdIy_=Z8sUJR6i)7E6X((EiTvn0i+YL=UB zEjd^^lAhyEZREu15yu$z{Jox8AJWI)gTf`B=BoETI4buR{vD-WO(83K8O`+g@Q|HI zBX^uv3lZHD%u@?0R5Dm;-Gf_KWuN^yO6ei+kVf$_^T^K4pky!BTFYRfFm^E%=gd#B zl}mexUZa6OCwo=M-tM2RgnwLQ>pHK@Q!c?$;vCK@ouTIaG_R=Q#1WmHfoNF963YyV zA4XlNK#>lFzomL3ZgJYVknh&4B_jy2u0*Z;7INIu+Z)Y4pE)i2_@gBzUnvLdJWcQ@ z+*0;R?pRk)L=G{vV}PAwkBsu-(LBDDB{*}QuYiq@Y^j*}e#dP%yCKW4I`VaMusw~u zVEj@{C^^Tzbat9}M0a>;Xn&@pwnrsI=yMoyDYFtE1OKk)f_`-bKPgEn7;I!)LmtH{ z00M3h9zgjaSc$15;JE43{NZrRCT*64Vy)khIg-D#PBeTg#`eWgE!3q1N()jId{Xv5 zv>iQCUdL8%;YKq~s)Y3?tno(K77|L?l@>sHRmKXU8PyEV>R(bGS#?ZjK$Hp?O8bmv z`%1GRWh9IzpvBVns90?iT{n4}4ExgZ3Cgr#)&>2#k9`A=6L7Z0?5T*2COp8adXSsI zY<yYvjJ06q?Z><B78;X@M;w0>ngd7Ov>c!jjm{uZgIKlL)L_f?a6)}bbum|Z3!ZHC z_%PM1B2iT}@r#0kS?M_UV=Dh|d7XbpGOH+2Tb;7rv#Nq{heXB-{@Yk<qeq{G8q+aU z-pM^e8QetZjtX)a*AfmT_{W2qCbl-b40#6Q;V1F*rKr0pVn^S2X^j;G8VhqY3XG<p zWt4tIp7P$auz=}*l`?**CRpJ?vgorp5Fi#BXLV|CDdjTfa^+_yER0_R@hGL@N-|&D zH8Rk?R^buZrPIS2Fr$>jYg%F{;fHa_B6EK)iyaW8QH*TVM*jXad`vw<F=9+M8O@?9 z)g{v`h18%LPnoBCk3K^&j5ty?@`tvNNbMU_ZlcnF;tL+}FHPb`1#u}S>niR>txYA_ zW^IGznhV;WjoP0Ci=A<9YWBC&dsElOHSxF9Ud*^-%a}hJ7f3o;R4L;vjHJx4>LBY( zN5vfHj8`UZgvFaxF;{{%vezaxbu_$t*oh}J7pB#Fid_`y6NkY=qk<XL!15D>j<B-k zRJ8Ejv2cJ1?&y*~X>%%T=&0#lY|qfrDW3*4A$<Lc0|5Tby#X2T@xGfr*;vB4@y**; zg-TdKADxh`cD26I{zpN<%kQN<KHxL5lzsjZTyX!Js0l8Fpb(;qH204xA`xf~@scmI zpiW4PLKA`+pNUb=Q4J;V;Pxo-9uO2lx1K$Aq0EE9oH4kh?IGl!Ub#fbgOxir5>zAn zjo*nh2GP)t6-#8Ev#Jye#PKX<nf}m;vo5PwB78h&OA?6jx8h`G*Mr6{(n+de=IqF` zlekCWXW=?T2Ew%-8)Px^TF6nt;xW>9$oK2JrdR_qH`f85B>hk~{rAyrKb2%*3lm&R z#WjbWDTk}<uYdt<@2az1rvRX@uzI-XTKZlhDcfLrK?MV$yT1dg>6&q4#<D+pg|O$i z3?0gGk3u5UP}|+#8N7MFQOeRY*<5$<n>S5dO!BZ43O6>f4Ck2Vt})h^BV%Q3?EONh zUPa_7(-5H4$vax9MGiKX%?-Lr3jh);vh;J!)_+<K$q-)-NpS{drQm(*m!Ho`2>pei zZis`Zz>ytR+CfH}@KSu5NpVP(uk6(A@hO^t5;2C}1xt+rQ9%iXe;Rdo*Q>TnHB<#4 zP(me#Crb|R^{Z~k)x-(mDYctS&crDaiGNyyiem)p=fE7?WdD!PpQ1{hN0$(%y@}*} zGhNf~-&KKYIwq0a%7oy!*sz9}HQ7FHrM!5AAB4wN2~&c@kBEMThBGq=9`$JHlJSK= zckbdVk0{E;H0744A3&^xVH-&l-gNHACCdwb#Idh-{%d6Q?4}0WBci?H+h^k=I$omz z+fw=xjciPnc~+0i1GyvzNl1D|D8GXSq+XZoY)-K-%uoT+s*Cbc43h10uxhN;8O+ut zmTRdNG_Fbf(L&PRni2NTuGIyxj{m&cYB$J`TqJ=!r)Xisy#?VaYxMprUB{PjVkjCx zirvRQ{RckZfg=`X2rh`3O1^^5(G4H7Cfl_In)FZapyo|8dlcSH%XP~5ZUk}bfABuq zJe;an(kopJnM-Gd?y(Y(4$jkxF&JQaQ~!X^w2#Z-ZjIp}IEnZH*T<a-T`=OF+Sc3f z2;wN8PFe;k@&tiW{xpm~FO^fIy$Hn}TDZYW+t8zM(xn-EW#SWN12UBTJ6`+T!^ShE zRnua;THOXfxR$PVXB?Q^D&zG!6SDoqjSnqeL#ruqc~)aFpHa-R&06-*XFkj`7m6oe z8@te0HCX<V&2hSr{_!FO`)~B7bmDp#`I^D!huN9gtLrN!K`)nzJbHrhkZ3bXcOc`h zpx`EcPmu%ExN!n*_Dg^Ic+{bq!9%I<M!NN!)_EQg6l__vnPUxZle)bhGTA71o6F)3 znu$YQ2@Z|;X(p}m!iYseOp3`eun&v(m&P1-)%1%RTX`Rl*w1T)CuQ(0N|a`(Nz>T( zx2b!Yni@Q$gm>9SiJ$auI>(nY4VGicHj;5FS+)lW|H^>O=kdwcxQ=J3N+$n^-&u9u zAc9ci6tXXRO6iAahx%TBikC*4eit;#P$XjKx!xhZ-fq?oXjguo_WAlOt;fVFW(UMn z!6kKH`2Aao!1j;fGmfrOD*(4IVqr%aS_}^6+5V#Mer^24J#+=$#?ipPTI1_tTjQOj z;GWgcD2w@Q(>td7S<!oSr~RY<+1~7IEUmJ!?xDaM?alQ`5og36pDhvOJ=Ao4su%fU zKQz?TqD=8^4u53!I>y2ZXRxV7#I;t0aAaI|!p*goOl$6U=||kI;>x6c(rFPOCMR9^ zuE6q6bl5v3-+5aJ&>#;hs2Em82gp<?KowyXpU^PjcqjL_eyrCERrCjvgAxGlAWHar zT^2WOmNYjqc+oI}u3d=B-v0<E-v1x`*Z$t}9dpv+$Fy@0D@VF{NE@j}GQhO(OSHCO zEv`z(dXeMJ2}xBiBG0x=CKq`E-3;|AD?P);S8vr-PB07%F)QnC!#fR~M`s?TXwDF9 ztI@*=R;g_3&?CK8-x>9!D0!`B(<)uqezpRV&W?hRIobXXXVyez3E@?%Y?mQkEFwh- zp@%J8jgnpDZ4SFzo@W?PiJT7wwz%64j@)ER=izg!#+McR`0q*Y@D|ET6jxcbb#fBy zZQa!^9NF!w){~s3DI|W{p-!Kz4jf@PQu|4K3D0myD$!ZRX;JdW2`pigJ8S_7R@VKt zYPoH%Zi88x=if<OMQv|r!%v!S+pb!j@ab)X<(To>)>-`rWjiB(u4*HtT-+Ggw7=Np zSw(!GAL^mlQ!1F9SyZ*$RcUKHDOcA9QuEF9rXx6*Dp<5SmyWIeoaH^MgoNDnv?vSH zJI<&o{A(#FJzF(6ZuC+WsxwXvnqybWZ0XyJ#&9DxPWj=X<5Z{Bkybw@>M2c8=)d>R zvp_`heu4+m7*Jp$WztYF-f&#D*Ko`GkZWRy3?^12?y1#O;Ha3NW?@W##45^(Y7y7! z=|mncq;vV9TNUS*tyS5uph6xM-)R=zRRY=@bEHg95c+ZKo+>v(=kjqsQqa+vw(&)w z?qY)$DY$2T(a*UxY(uU`;i4jO4zX(P_7~XVQQb37OnJR>v(jlUsz&%08!Y$828Ibt zf6NopeUU7vG?`|=ovy&@3nFByn4-tOwJS{x!mKJ%WBBxl#vMXVTDz&_G<z5w%|S?o zs^eC-VzuRPB!6zP6NJ$DS2P2LvR^A4F@ZH9qiaNQ7h7GL5tg`}Mhmr_Tip<arwkaC z&dLU|R)oc5%A&UEP?U}&a|K1tj&thE_<SFm9VhZhzvN6K273_grE58d`scbeO6JM? z9F6fV*KbI@YY)va9l_al7fLO`QL1tm2o?-O*C4E_*T<xG7zW|w2&ewBHp>)Jmu7t5 zd33>*T#*BW+;378-mt3tv~lYpX}4oIW~P%LJx4XoOzTzbQy9VnJJ_ovGq_qK5OZr4 z^DUVuT$*tV*iR=^6yTdf%Y6FBnk~!TpT}#kkC4kMquT|;pp?w_-VLMgIJzJ)y+cG` z2O@H+=kMON9Q{2zGt+aq?mc2NQwj->>)J++B+WOxBF@+W?b}lIRK<Q+u$jQt9xfR1 z_p}yHzLqI&tX386(DA41?h?V2#nU`I3x-qjN`9@}<}~~Yq2LBVI*u0J8{Xp1k5EIC zUW%zNz7LNg7fA_ClIa7WVu|ZwIlX|R)HssoKnQ0at`JQ+Ro-%&qt4-K!e2gG`qJ>z zWSY`%ig=por!K!`u!VQn)lvR!Oa1;`64|t`Ak(m_7E?}(q9(~+-xl*FMfjjtHUjxg zLGS9jY5nB|+?bpS8FKS9%D{|^c?1l-YH_)g;l!J*F)n2t=XRe1yS?uB%Yq~!Q)Q?# zMTu%x+Y+|ryd8$;L-?ChN2QFJq0#KXu?EXZXV7=l&upkj4r~^`4cl$a*iwnVa7ov| zY1CwDI2hDs#SGH@L^8F-H|6~3b{?8SWg3Vx$}kL%GuVzawIAaOTn6B3RN+UDOU~2l zT7<R{#i07KrG<C5$-HZ0>IS-}1+%_3S89&*v4NEiDHFzmWIYDSQPh28U$%~9!UWko z7w4qk1jky#ylq9QWEy(BN?T+tN?SRCVKnSfPw&YLGLem_18M6mmL}*Oj86R$pZ$QR z|B?R-W-FS1Y4BSqt&Lo<x2H6~&k+I^2qpD{(KI1L>dK~osz*)vxq=Y1K;rbdOlg@w zI_<?J3BDJm(b**_$3XJ=g@VY%N1kb|U;?Mvf-vOA8_qALm`UJ{MwLyp3r_N5(LmCG z@;)@V+cOuVV0iZ9h5`H+bju^>qL5b(%ae;jlt&6}m0-$+#rtCG$EeDhUd;7MN(pyJ zm~GQ5pJ7pO*dlnd=<lNjr2JJ>sIWl7^hmte;*rV2P&{E0eArl9FtQIpZBKj^b}BU; zWP^yi629P2l$s9Xq9bqGG5S<XUZRBU5XMt&n1x@m4-7}eBfb7&1ac5nX~w3|mk}Rp zdX~g%|6^p~;~iIEOF)_Rl$Eh7)G#2i)=se|S|~+KFr1YtNo*OfWDs@UlW!nFFHMTq zovo0yI1ZWlEM(3LN+kVjIbchdBdheuwuJy7P0U|t1f;VRB~2a}4S5K^NF$XrZQKqn z5%h{je+y_>L+bqyH`GY+D{9M%t2Sy|^qImJn1}w$2FmyQe!8^`_Pmi|M_TQherC@% z{Y};YQudKR(pTCqMw^kFV{!G)1HR1*w~o-PZ|;GllgXL$e7}Eg<N0QNBkV<I7{$og z=|vwIWqEJry{EJNPyNedcK7h%*TQ;_@Y6jnRa>?*{IptnNV*A4mye)eyTYo3i47Af zy}Vkgfc`k<kFtk76>RXi#<3F@6Nxg3$>zs5w@5vss2SOIj=vc5iRcYyX;DiU=a<=k z3f*QrG33sco8%*_KZ8UP8Kv-a>YMRB-InFq!KZ756FLC~Y3Eoj`bpjRo}TS$A9s&+ zd3QTDtVEW6m?GYt5ZH*s>N}lsQ_xZF9w+zvq>Bu@i`t0TYwyQLHOnp$Pe$AQih^ek z)dH-zYQy-*A4kDA?*gU@o5?ib)0wUlx!$~-40$_Y`0Aq?XJ9qsP1OG!!B!1_9p#Ob zLbo8YBo&Z!w-EH;k?oh?wQgT0LdH$_VwS;$LO}fU7lH+AxA_{3Gb!#?2p6_0@!WR2 zD?=_%dB5|pF%q$shJl4p_1CqqY9gL+jUMc$%fmI<`bz|?f?1X+k_RuYGQt?O<CQ(f z>%{M~sL9@APRVK6bN-e|!fZ=(d1?hMu%0%5tK{6=!3LFYKUiW?0#Y-CPxk|3!mpB^ zq)SYi%w8xTq`Rc#q`u{S8{ju8lK$x__n56S{dur7aU)n9|Hx0RM2u^v-j$hiG+Haw zDv@-DVd>^qn==ed@daO(hC__l{91A*E$%d27S*qx*%NTQ^teQc%2c$WfH>9N*TqU_ z&5=_*kCD?8uRpz~OKC5U#%X<g;H+t`o9DWR9Qp4flt@2ZMHe{_e<cCbO1Q~1d~?~Z zpP$c82d;0(9(*HrM5K){H|a0EL{xLVg}|BWQJ(XN26D#zLg0bg5_U^+PwbP*B+2Y1 zIPUl|^*NtV&v_8%v_7H$vD!f0@DI)vAB+Ryse!a%dVRa@4<`wK8;6zw|Kc;Z0(bER z9lKF76Y}Kwy{OlHU}fS3G<<j2=0|-n`S>>E*y3R;OI)!$dBo&O;-!yNcO7__pa^Vy zz0x%aB}bojiB`Xn$vKmX7mE%nc&rH~1aSq)_K_Yo**{0J?S51hc<o=IAYS5O-zD4S zSetJT{pbH-b2xGRJmnHD2?taA2aYaQ??orZi5c}nNYtsU`?mFxsXyKy_vcnu)zH4X zQmFDjqG6H8=&Ux$tE@H{%Ld`O#iW2yebfTG6P3Frymuve7kB%C&y|I%7~3}S$Iy|? zd+oi{r1pDLoUVuO0Xqm67{aHrt3P4a`<GSTEWLO_e&mSMb0@pwe`*Lh%677-ZeU)a z1=6YK7?x#7vmsbzNaG`b^tjm)3>Ow9m=O3L_*Lh@zl|p<7u-7pm*oDqrg%<+tj2}u z429`B>*3-ge=Y<d#Nlz#l*zO%$7{<5$i|Yd+2Ka9Z2zO;IPyehNH9rhZVi1_#&Q-M zB*nOjl<waCABeypmIUK9S)q>M*1ob;Jn}?qy~xV^<5y607h$Lu2rBT*jr~^cQBL|6 zDW~$is>oBXdf54%<d9VwwXv^gY5W!Lq`6oT3q6iSJ?2?`as+dqHi(hoTKZEKB|_NI zaLu)}?Cv7eUF1z*stEsu%<s2*Wz1C3NP#q7Ozc}m5@Bam$oWA&Td2Kg5}20V1oEn7 zTRAZl)x7!PZsK2XtfgCA=){nM7`qr1FfL7mU5qy-P9W@O8GLQuh3wp?VuK?qV1qnn z^zQSs)1ugahUv4@3?;=DBU|#IuieiUxpa3(bLuon|1KgJSz;MC6i<yP*0(tMm<eMg zA7}bc8UmZ>@$^s{jJv4SmZaJzpGhqWlS|9rPHJ?5dsQf=e$@kXYL4wYRdJ0K6x^bp zDnS)6_9u3skG_V5)cF~<?G=2T19J#}uUll4MDwOe)NCNJ6{xGb$B}n_oh2{%6i2vI zRFE<o&c{g}xR-t6Nc5?{f?(npQXi)wHjxq+#3|c=9vigYF&>P~oetQkE9HJvQLRh! zDedQQ8w!(?4ovaG4$8i>tR(R}k<h*?)^y9M5>2})3r(6S^Qyc<g{m~0R*$elrepdk zA-m#3yJHx&`j-BiTu9@g@3HHYpB>0148kwm_U|UNW$A}OJfMpTDavS|I`Xc)$X^6$ zASyg+b}<FnIdy8#8bhOfj-2>4v}|(pgWfdG?=X7@C@B&3BpB-Won_K~TGL({qxlD1 zr#$-TA*)PT)Ou66iwVU&ZE$7+-35~4Nm+YaD=0vc$T69zjxK8D#d0(wBbi3(pZ#!4 zK1W9zh}SScrq?TCj@-#5U(Tx#`&&!<C*KyLEQVa>6?=d%9e-0jVXg8069HCDmwr?s z!LK2^^x<}&4naa2MDNw=fuWgHsdk^P(q0ZLExIpCg}^H-RoLC>?7FLe9#bPl&aQ%x zIvMw)QvAX?3z8K^0TG!tm4@HtdA2F>Dw#1&b`;ER^j6<G)g-057;wg4{phDj%v&}N zriC7vL;Z1@e8)G5GFP1*@Mr&7{A4v;JJ_UqV*@R-r4el`7ZYy?W^N}~^rf5%@K0XO zD?2%P5a(wnZ6_#y^|7ZIAkD<09}VX{O6qE&7e-=7>W*#}EMB#3?QfMQlOuGsam~-{ zqm)QL9G&37+y8WZP3G$x*`5<^Km1+<hj5>~>5jwp57Cb5FqSu0Box6S+WB4am-=l) z@J^YGUIrj7h&&OyKO>R&hyf4s)r#s4snD(iFf2r)%(@Si^p740bp3jx`0^>g<{iR) zyUPtf%h$TBK4d+;c}77LIoxhM6cF5gAZPbuFHSy0QM~0=>_KY1RIF^(lRWEY?wqVC znlvH5z44pIY9L%cx-DYbpvvAxFY4If^qVJ@bm(EStq>sZ*=CCqgJj4R__7oZY$$vD z{(@`_(H;I@guP`@9YNPFngk0DL4&(XkOX%N?(XjHuz}$2?(Xigad&rjhmCKX%lo~z z?m2(%IaOV~*0Z{2e#}($tm^4!Jzs4xWo{RHQ#Y+L_A33kJkxh=HlJI7Y%t*aKiz%p zh}T*!=iatxuQAQ3dTsz2ql&RBDvKRvZhx<(g?-$~VLcXZ(M}A(YaFEvz)&jYDME8> z{wv)njL<N6*9y8yFse2IZo!U|V{!%W@{*Y?u|BIM2S8|O^A?Z;Fx8UF680vd49MZm zdi^T{C*V%UF`yvvLy}8+eS2pX?YxS&bKec7&A+zcdW6opS2?L?aH(P_;VN`QA6KN| zyDP@|eXH5*R(YpKBIJ}U>l4nO8fH8$_ab1?{$y_v9^AQmA-Y-%Z{feczYo%qb5Ea= za!m%4(<#`)J#HDbrZinR$wM92m06Ecb{(Rq&)Iz6F58-ni_w0ti}lvcQD-<_mB<Jx zox-~2TvQlK1vr1p4rGKR5Lkn}x$XKAa@!R`exmz*|LAAl#c@Tq?zFr8`VK;Q&bNQf zq;j^D-#vl+Va>Scw>rqBo0l<%7qCA!b>t@3aA`bV__b|y&Gs%}csl&`^IX4=UnBXO zcChs#f$Z3K@xSu95A}dHxwh+Exh1Y;gpE5~bJI3UOCnuyP7gX@5W$oDd+m<XWFRlI zCh*t07_dOYDDaE*ErY;XM|6&AJG^?dZonp(H*B)bu*(fAf2%{%P=dDXgh36Qhwj?b z2GbGOjE??>+HCVS{=5OJzw!LXX5%?6!yc=Gkl1ts>P$DrF$xw7pNJ0#zsN`2#V#o@ z<9$=E2B(45vBRKd>+dk)UW?v9sX-4=i%a&?A?j+SSn68tV3#g;$tkUv+RR)xEyf@q zwez(k3BOlCWr^X`F7{+d)A<YDKQ$5r7l?<W!f#m6oWSu+>LUO({G^XsO&SDuFN zkty)&qcXk2DGQlU+*hiLfGbmNw$ett=ay|%+HK8K+t1p(B*&JTi^%Wj>8oug_PxT# z*m_6T5TNsV&f$@KKNCzr2*{f~$rbRy5Xa3P!i?TsOLw7JD*NSKp}Sn#J-Le^Xs&{h zXY6_Qwt}(J)XSXoOfp?f*W+tld+YT0%MS$ob>j+G7`mIzZ<ZaPZVC|aD$kYe{Pt4c z%bYOd?ow>~4O@LvRvs3FMYZ7xseJ1lc<SDzpMTtJ_79AXbN)tvcuye2<{4e@eGlQ0 zfv<VW6RP4S8_vs;+Sna`83v30&`L|e$~u3+0_fXNzUHkDxKEAGn;H)Xr*iDOHcyR{ zU~TZSWL~+Qwok1~zdQL~MPk1B^RuwVe1=#{RkbL5I6CtBg;m;q@ax?nIWeAL)W>@c zWcc{_I_YGmj=e~+bDW!yf$q4oWJkufhHhu}f6olujEjSB0oU!X5Zt;XjC|Qginlk& zHvsW)quUOKN9Oq-nlpaq3NF;OtIN-07%{1E{agO+c>M6+uwPQ0RD#}$zNAQ}7Q9Sv zfdpeQr6n6Yu);3{bJ5kNw3(V{fW%`)I?nFSy$&ZgPf3#SOdpq!g+(dpm)PN4VFd5M zfmy`-*n+p^<#^s3FnmQ{Rijrf={sZF=(9hdT;$0?<<2a(Tx882s1~%4oPN$+;a&bj zOVfd5QX^G*Fr6fjdN3U!@N^K<$B(_l++tq|=br`uf)Q-Mv;#Tej#X<o_G4L-8jrlY zBFXPBjaL}EjA_+@SYxXA{;Xsdp256^)!R%*7~I~8B1q!23LWy3C^NhLD5S)b&dK}t z{|XJnfXq;8?{U~;jGC-tjFc^0mV2_oV*~2mtpy|pEPLU&{p(S<4h4XAx2J+#jNJix z{jZMUsv%g_F-q-uMEsBtrPz$Scoo?6N&6{kv5dje!>Ze={Vb^>tK)eG?ibfmCb5cS zGY+q%yFyy6k0?W%`!|o2>UX+6Z@VYA9p0jnH*?97-p@ui-2Uoo8kl<=&yBZuZ(U=K zH1CdCxBFc^j!C*)Q|dcTEs2wU*OogRrBapr<?qNx9H}4wjw+(A@uog6nEIG<TnC(f z6uZk<%y0+4_OC9cEyw6I@X7OLDRQ4iBAz_CM;+^&$bcnWfvPy5|9WkzZF3#7nU{%| zPSsAuo`qZ+v>PY?-_Tk|m2b2%O+a++8`KkaTXKhgvB6upS#=?RF32__X1;6s;u418 z)bqWvIOJI7iCbh>WE6cfbF@D^S)4|v>FQGHkB%04NYVrwL2`$LD^*{0lxfv0J~O*= zU`spwNSFB~pQmQxt(o&>k&-M!eE1?~w*7`OAoWLj9bmAv+LqR1wbpe^EY3Fdgywn* z-Q<^K+XBw@v3pOI&}601rI#s3GfiT67QK~#wF1msKDEuih1ZVqp|FpmXT^iweLu&* zVJOQ?v5VMnxQ#99Y@jmh%3bYwHXHoRk2$zY&|P+Ob3%Z0n!0#<`0v`IOp2y=ns>9O z7UPkUMhxpmz6?zj>hrU2&n+>q4IJn6RuR`@B)txpgN$z<)!WJBAB?-n<nfQjagmIm zIrN%q`Vl89faJ0*(u;N2+M|TA1G4bapejvvq^->6MSkJU=U_`DBTL$dHDKk6+=8G4 ziBz8UKkL)6m~XMYcoaK6_{XxUARf8;DQ!(xU1WZp_Pw2wmxYh7|NQ65rm%(eNZjgA zn);U){V`T2G+#&gLwNgZK8_gan4@q0QC>5(m@Pc$?HeKMm>ug_IvS+R!~Nm$nW=tM zk^v$LJG)$9zFQV*h3wVQPhzWBKDhm<J~?h=v3G8Sfm^%(0-<Yeyr=&Gv3$t?1;5az z`u+<(r~NPRIqg5-|Gfdk0t6cz9xC?8Ol|2XmYk4FbvS>A5C5_!tU|kw022t~@9(d( zQjk9>f*gtvFr+bP($ULOIgL^YO03i5mKunL5co-1Af+dMHT=q-UZsP+7~i$aRR6}A zUixdA4z@Y9aNC9jk$`n>N4%cZ>KDuQ?|Ovu-($VWCQy%y72i$ArIdOr!kEV`O7hep zjMLRi64lY}nJn{h$E{d<E5b$7@2A~ZU^a~Z@Ux5$nw73VR<fn%OPfgEb*^A${#n!i z1>AM2$F0(T7;v8OZi!tXY-WSm?mXlNq;p_z*&y{OPUt_P-io#_<3&ZMl3r2YVv7H< zP3%21qqf*&SYRHK<T!*ZE#(kDHIqqtPIr}PPOmSZKJ1v~IkY;_cZ_P-%%HSpBTU%* zjrCV-JaAUrG4`AZYiwYg+#%|zV0}@G0nDa4nm?|5qvRL~$Zl29G3BMVWy($jr%sKD zjYr<VI)(!#0YdL{0L8Dj^aHl<lBHIi`SUDWsv7BpRBz+RiJIeHqv*G!#!>G4?%l5v z>U!SA+$IFdNvT5#rW1RkF1Iko)ld0#Tim61OtQ3M6WIxb6ZNAUw;4C-Pvxg9Q{^Xz zAd8>3$c>>-$(+OOc~Q5h&au&DvQKpP?%BE%_fQL&oiWe3Qz~7zBJ+lw==Y|&OoD)c z(4}OF=SPV+-%cmy8P&A$+eC8Y$I<v=uf$<dUE`a)Y8v-G)kwg8xlGj4X?%Srp2OzS zzp~CC){UhUmHWmVL;$@xmaZme_fnM1t#iSxSLU&(F57b%$m2P-8s=?rDgOQZOuG8< z*<!$p%?two(SX@0pn<g|cLBZi-8#kA&n4Y9@6RNgc=|zlMdg+B%;L-CjLTz@<qLqN zvD&M?p}uovm3-@s^M-!jcx$h1N3-I^OY%Ohlk%>t)7XP$%b}ytHgI#GS)yyES)*$J zobX;}TiH1Wj_~dVS9td}>+l_{naORL^c}4kEO%Clns5Cf9RtVBjDmw^R=`Cw8{j0S zRdADivTd||Hpt5`&^Eiar+Mpf8eD4M4^F*K2IUOhd0md&;or<(<6k@7dL8^cepz%3 z2ep`HfZ9#VKz^n{AhxOa&hV@wKr;6l{ndFx$r0k%-qSQQPqsSml>QiqLm!G8t1@S) zDa>6`lf0e2LdjOFyr8*DdDOF9dGjSlxd+%=wy$li{9w~i=FzON&|a<fTWVsI*-OQ` zzCF=;vHmm_u>!9?d0{!j>NgXpel<P30_pI_8RxA?dHhq*!UDI|{jX>Zp^5AY{X@pZ zNZvV|OIn-AJ7bOJr!sXkfcj!)r^h0?uAyaFwZAjl9^D)uzw)HBb`fD~W07u4@Jwgx zhh-F~<@b{7YFoB_224drV>gWnkJUmWK_iZ4v^ss|fQqVR=<j6>i^%4zx*~PUO7%rf z%fS1H#?4i|i<&<gFBKDu$%~k0VfS%cmL2ES78h4+bvoDJTAkZ1ql=rVn$0W5n)d^r zUXQ7+LC)hXJ+I3xE3cg`OZ*4Iy3U&qGp{2)!?*n|t4u_cvm^end&!(IXAZfIHk9Ey zZ$px4kgv(&KzHQ%^7k_Zy@dPZkjG`DDzP)e&T0krLwefgK$HD2PAr<y0X<l#q%xw+ zfNYVBp_^GCmG<~!LOg-!8`Un;bHRN{Y03+Ad4tQ5+!(cY%5H`-4Y0n{cm~nIIjj{# zi$k28`vdGX&@4GnI{s#Itu!KrvBQ>5kRLW4E-#`RDKBy~RFVf_pfm%`R91qMA67I} zGV9V`GHWtWGON;GqVT{{rX-W-5FjtYu6)WQim|0%)$q)c9|roBoSPjYZ;a>5>*rTD z2tAB}p1^eJZ;Pj^Yse}XRb71~?m`(mtGPRp01{3v`mB3d(sTCfY~a$g^Z0T{ebscZ z>Z(c<tccvz3q+O9*YOU-2-V&J4^q{1M#$@3gvjevhRAPk;R3U5>9Pc+z4^8_+*t3g zUwWF~ALb286@2MjC#%r2dBP`Fpn}Sy<AeZ{4AZoKOtFpy-X=4&bJE+EQ|sZKioTj= zaoOP`a#l(By0Gq_r{S4NTjLylB1~36#g=k~9O}rrdMi3a*1UmXlgl#n;oN~0b>w-( z`9kt#44q-v`J&R#0-TZG)Emg?2Y6y27R+#@j|hf+M;lnV&Vm<x!&v*S`H>P7m$*KI z2pWT*py2aRHH5ofcizGB5^|sQSF%43Vci?=jt$(Bh28$|wq{UCVZHJ1(E)t+Ov~Fo z{whYLyH{y^$tHD5u*+w<BDA$iG=LMI6cv-wxX|0!2Dr-8aWUw_dbZe6qZCB0Y50!j z-1YsZ;fbXNjAeb->bVqqYxpV8+Z#p-cQP(X8-P1YkmgfFZesG*;H`HY{_xxqUSP-+ ze%ZDay$f7M<pBFl<$y!?io&_8EAi&k`BHH9XSTnG-r%34dTiwDe8oQY>vuJuKeLuQ zyvD&2zbSNLCZ6JL8dJ%La~F~7tp$_W&{8T4zBS`;V}}BQ2WP8}78qW`tA+EY)4~Wp zY8xRq#l^Yn+zo}&#qNl+XzaQir{vY=5A_XFkJ&Hp;FgDB*RW;?K%O%0H+RkQ1fwpd zi1bARW>EE0<sU|l(fu)1*yN$JFmpN_`vzQR+SN-n)nj*;Wc*2Ooz_t&>s{>>2@8=C zmAf*zaevq__hBS;<0o1K^@Dy|gew1FwIHvuEQA!%%~S#Rs_ftlS&ZFmnqUFx_ejB4 zMP>czsIw#DBgMeSVhR1}`0`icBiz7#HU&4Rz)pQGi=j=s`$t@p&kZ60RlbiJls7<8 zoHZr4%rcUuap1=AA&Y>1XFXi`97EpZU)CSx^&0ImpGQHgf#FghYBfqH7b{+4#~I7O zPnAv2!7b0e5;k*&5-kQAtLpIr%Nx+#pK#g+;7uF&tT%~(ItL#VW<EqMvi2iS5GLAA z(}T6@f(s^}J5Da|f*WV4$Q5IH!WBass2yTsLw<S)Tr5?ufbH60-C?U{Zq2HOeR<k{ z*8Ff~-Kp@C#_rG^1}yP>R6c0#ZJBp{JhQEW);@-sbU!}SUhXNIbx&N5tmnr?K<Fm- z(iY9!S%LN93h$z4R)gpf*KC)9akk~moxArNy%pE(h2-<wj$n40=>)fOMBqm6;ReaM zQ+UlBeXmUOcdq{<a0$0GD{O=}FKhu2-ztqIp8xIbD_Ews=?b~>j@^9-|BL#&ZV;us zR;68(V6`VoOR;NN`!DVhxLu>m4Fswh*<w_|SY^x;X&yHa0f+C(U~RwUxwY%E!-U_4 z_}kq5&R*W2I3@s-6A<n;-0g;D9(J-<f?uVJL(!$vjwk$r%p@`z637%3;K<3zqZ7z1 zFSGJ0TY*}ZmkbYU<KCXTi|hOp$illCju1~3t?6hLt-jo!V>T1?sPx1SNxo2K2~2RJ zc}!;U-4iX4Vp?#>nCwz;b_rG|I=+sDpIa@l(ouD~)MN6cIRKigoYk=WRTXU#yVN$- zZEuGF(x<dPhkw&&6u(WGy>VFhH)#1XS`0yE{StLRzpFGvOq&~uog0#y{$Krn;r}%< zjcr_k+A`@Dln-o{qFqMbUh;iL{LX^^X8`1H;0>?v=Kc2;hNzFw&*A--(w$gtT^F{} zEmkm{53Jd#Y#_sX+^=C>IMJ6my)-_2%*U~A()T*MY2B|;&n!CyT|Y8zRRuO)mE~=H z5LpMa15F++^F803XS95ToVvQ0Jf^o0c+PEoF`qQ^hu*Ab6ns1zR<^#rjcvhpoPol; zufY6AZynR*KDH5WUbRzO$jLWb{~TY1>{&j3tq=O3U0xDK1wV;xi@(RZg?(Uh5AnhA zopvGe?GXC=+-^lNzJOw^KHN&%ec}>Mx)d$;vMCzDTcr1QQ!&pkrV>JLU<uN<`a-66 z_gSqEuUUl;z=`<Bw-byH!IKc5Sf|A<sfU;Bgt<4|1BrKO2j>rX2SuN%^{Flqf*l|A ztnDp^Es&3hckf5qYr}`Md&h_F4aJAIJMe?lz4*iM3I3z_#{NU#$?v1)wfLjtHTeTZ z<T_gp;X|B!z(=BVo3E1fDq9}sWs2tFjgPkDt&0lc^(gV;9e$MIL*yXm1NlJg!}y@# zBTNFK&H@ts_YWeAkuS<)kWP&X-Ex+YQjON##Se&(^Y6Yfoa8Zi4DiAW(!Ng4J~<7~ z(m6#Q%yN=ExFynZMCl3N=gBc35XCe3NoR?t1Mc8iN&6rwM=E`rjGS_~Qt^%jE|KoY zB)@fxwDI%R{r(km{vCm`8p?)P7siJC=v)3swJ#I;H$!UJh<pz{ZfSU_qKR*=vo^k| z4Pttj_;@MOVlao(*S_vfKHIz=M8C4LV7W_jyZh4c)Jh7WFfD)jl4~?}qiMM4r7jZH zXju}d<u)Q#EJ8yqni)czHC+3eHU#?KuZH^~t^$24S3|r1To`O?Yr~x{ns4*);4J5V zR$R?tLj)AK!T~Cf5dme<@Oab3kVvOs7^D+qsHo$yZ(FD3-^A{VznR`g`Z_)*bx%D9 z`|95J`G!A7`|{n<`i?=vz8VYr4O5{eM8FAHD8WKUX5?5mAc#f~^q?CW)if~CsI6n; z)9FVbf08Er$RmHBFSqHnT?2mkYl7@B=S5hwJmtPeeO96do51Gzv<~?xxU(5cN^U3x zB-$-niX9Z$!B<Yw6FKm?9=L?f6Cf7-7CuhPDuJ2U)wkVe)Pj$TEZzoEZ?%$#9BtPo zfYyH~ct<ScK141Eoc5m*QK`UCqm~Q(R>KEWV`)a#a6alV>erE}1kYm2<^q<Ib7l#m zi#}~kkb&!>!MpM&cf$$Y8GR}Lm+Cy~f@KeteX@ZDbX)q3mjQ{!Z`Pzwt8hn{8{0x6 z@`3Uk?tpqzt`vRKVd#fmK$8H%N6X{6`Z@}Zsy)$b5B?1IUWItaeA;h=W=k@d+bWqU znd55Zyb^uuGA7(O_3=O9&C!NFUEy?27iL3V>%--dh!-=*Rll{72#yAF>wycSLAuqn zrk&4GPU|x(RjYOBH4b902<nE8dhJ^K@@1$22<-@5Gnk~CUZOotkIe5UEURW@ucClo z6D1N{b;S*OzVdM{2Gl-riDfJoyP`vT`UCDEdAnTGFQ4fMa$Kd7XLTE5Z?JfJ666eT zt);k*ch@ou@s^)UG^yzQxCkKziKu)2=C>CTs+CR1r|AZ1hCU61GC2LEu>s+^Q<DDv zyg!X#5icgDS{*H^eR;5TH457GC?s`l3vDWrQQO&2)aCPtvX=DI=aW_K)c*FYbX?U5 z*+#!s=K=e>+w=u*ra{sVvzyKHb-eVfTNxntChzmUK{(yh-(gO;t1y2A)!#g2xSQT( zb}ik~z_~^Pxx1V0_$#IvH5^zeIL%{2M&RoI2)(<zesm@W|DdPauhNET{Yl*Y!LyFg zbc&;6V2~5~rTkRx93Rt~f%Xb%<fF*-_zAqJANLo~Vix=8s7m&p@%B)+wbSzVd}2R# zRy%e%U6yP!o#=<>t?=$t>)-K-EGe=kJ;?DSq|gv{UD#L513Tf!X-?m%U30u^1c1V} z?5u!%lr|;HLvJ<OaMj-M|JGCC$Gzbl#Nc5ranxej9KDP|mow=o;P>{>{e@lhGw4~3 z!Kr{S@9~I19rtzU5tU<F#y*8g=U>xPJjS<zCiSb-*Qr6IgKY{n?m@besv)(4ckxs8 z*WRwwQ*~op#_vRY_^0dNvD2)liw=jxKj04`?_u|=3<u8-2P!zPss~pdye(}eX9tNx z(Ec+LVbiY&N-Te+hw0dNTdjeN9f=3G9ijs>BXAROGo1JPq$nTcQQmFOlNuavh@v0z z4qT6z-Tk)UI@u$(%}=ceAY^twj~}faXd8$7*CTo-QwvfwB5$NAWOh$9RCb@F-_%}X z52Blw9qA@I;A<BK02KslGw|ZixWnkrxR>p>Mve!Ny@3S(ecygjIM~)H)wwb(b-qF? z)xBalN!k`L*Sc~vH@T`|WqT}apnA+~Aaj%O;Czfvz~!dx_{mL)kMK^75BE-k51W<T z39l0)1LG6_*28xocZJM>(@vJr!61O{?HsI2n6$pb_Rrf6Mw{<63gu!HTAUCE^2nSm zsjgtL)<NMwjiVj%Ye!acpXH9~YG$&(@gws^4|wmN=@rLne4*4y2-m#F(=>W?7M78a zH7@V`sDf2VBI?C~=+sO2Ly?#8T|1w-?y9Wt)Jx_j|DW(<_ak#3mk6<`msBJ>mz|i- zLWoRl_JZhRB2@Rh<~wNoao3%Hs0vjn$Jb<t8A8W$OR)7xxZtXHB&Ptx3|$K33|$Ny zFoRBxA%X0kzj|>19qxSE)%n=5CFJ!a1Hv~0alOQ4h4GX(_)k?pTf6{`v;M<<s31N9 zI9r(KCbl0!gwIig%c=dUQJ52|ovu%#;Bzp>3w}ovikmL^Rbl{&+ZJU&_a2&&Y!Bi2 z1TSJ2tdV;^WxATqHem^;m=f9oru)#(8xtFDIQbl6#9m?uh0h~pm^T6z!$IS6kQTuT zIhs^(Z-N8cRdV)fC^WFL!4f@-ayadHG%%n5n(lWw3IJ{yWLKa?A7O5p9kmkTj-2y8 z>;nISP(_m*y%Jjj{i+Y{Lt(R@aPSPSdU;y{%3YQB`T$dSqcmzWTw)ZEy=W#~3u{Pe zv>7M~=OHFGou1iLfNx;y2a7){#5K*dm=s0XTu4~8;LPN1n-sv`Pr1(DU;7%(O*o7; zE)({*|N1KkDhm;#f$2fRS2%>0oN?afV1Gih<+_RuYf_<tw|uYZ0)3}Wv0>p?Pf#-2 zR(s&u)nbpJirB=53%-Q|eqhqkHNfy-?>6LIPyPUnE}J88<)|=25ORDmif)}2EA!b? z5xC`y%X#sr(BYc6l2AbFZe`Mj@z8I`0-hA%!!Q|>X$va_iqocCLo$SCP!pkNwyFS$ zKGYZdkF5Zx7JiY_jfl|k6VL7@JuGL_w%4xCRliu=d3WDxyJz{hY%Rx>+i`9?Dp9bu zbkOrmy@5`a#2%u%MF$*E6OWaSGmL?i0kU<-w_m1g%uaL-?=UWYCOetO%oKCo4fJw9 zg!(Mr242uAZr4*>(n8R_Q}WS94`rZZ(<h){OJ_{LM_`79cfw}#n1{5<-Jv)S;^$4) zY$2b!67veLq{?%B_D?}2gg=6)xNJi>`+`dhW()u!G+)7ewh~x_H6Q$59C`1@yuP<H zNWRtj@uUxXf4;5lm3{-oI<QMb7F>U$6c2{<rVi#9m2U-h>qv;%`{+z@Gwt6WP@V1! zpM5s{{~t%c#7W)+KBIV@@zhcHj8XraW#7bd%xVT=Dg8>!Y8qmx^(Vrd6}%uKohKL# z<m4Za6Dz?xMOYBrAfk2R!L<MiZO9=H!`=so=IYpKm$0p)oI*4QJ=f(n6Rs2Dd_fL^ z?wy_1Q^UadhAY^&Jun@4<zdDSz{dHS9VFVjGfi(r)ftJ{m%nnwh501tn!|6#9Tr59 zQ<p1lMU@qC8d#J=kqeY7pJtus`>aNepB6e8bSbhY<T(90t<^x{#HWFu7QGmRnX@E_ zoa>bvc)T~Ae{5w2`w*P8dpFIjMSMqAg`?r?C`fDnGEKux)PS>vrr}SBWZf?t@MkA6 z7wd{Pcf!r}m>fWK$NbLIAe5J@S}1pnSSoz1T`F(ZJWt&qc8cnudy2J68~NRfN*eAW zp5VI|3H^638Xi<mqDmzEgvB5v$?Aa4q)r4c(o9${O6~9Xi41{JBO1poc!+OAs>p9- zO9+{X^+J4O9fDoMq=G&phC-_Qp?`*>m(_Ii(cJx|50I_3dG&B_RGU<JZPITDn{+!3 zU@-b*<mtGSsm+rWXqHbTcz_MFGgTE%wPQ3J=MECKz;@>Ts+@6?p~IEL1egmNlJR?X zs&H;5TAX$y{FA>n_(J)HLvrda=a}|Zfu3|we}4JCtDquz>W*UuBl8OlWd-T_;^KLx zHGEN-lW)(sgX9*q-E)m)tEtb+c>TV9kl+t<km<zQT-&4I&Vt`(Z6(2`T2R-Df{s?2 z&?;5%12rl^oGDf!mEYD?n8p|n|4eN$fypVuP+d`UhARWZZ1gYZ<_d(+PZ`RXy7jsu zgnYEnXwAih9;Y9YCozQxIq{i#D-wJj#b|VzC(^|sdMg|f$R1ddsndT?M2qVZkgF6m zLhz~RS_Dc(K$tysw#uW^=5!eUfC(ra!7yV%FBpLVYBULCH`2u{>n)OJ>v9gONO!ns zPu{YaPYjp@eFs?uzlLP^VR5E9N9(z(t_hiJ&wS9A*!7XO!&;B01R>)J!f!}0bREh( z-)KzA0SlqnQnqAiTEf^xV^Bf4V@r5BDMSCnBSxr^DEdiUZZ+xxVzEqb9cJZjRcC}I zj9p7w$Gx#uK-HGvTmUBh67di&00;5EbfirEZ>tkHqegBz+oJ3gSCAf>L|oCW2qTm5 zMn_O}w|Fx)PJyI@YM4X#*3`+2XZ2@a8_$H6ZN5;ukW!hj1t|fk3s&ff`fOm;U1-fL znu8`?V2;goVc3>4w@rX7Qcb{a0Fc(I0oWr0<Z8DD{{vs>T(xfC$}D?r*YTjEdSc%! zv*q19*eQ*5V*IWb%guT)bBgDImaZAf`}rWuI@F2AW3d&evh13Vb#8ua?Mbj|J;m>N zo@&;`1CL(^5>Y*O$6j+}ss*8GEJ<DEnOyE_LnOK;pP!n^3a;zX6CfcnnJ_6H>mKbs zFa6{kTj-LR@mx?Q=^uyXOh-o}Hi??yun9?pFyNr_Ejre&y^9w#y<?{CfmkJT-fErS zh*UJ6th%j#W(4u8df4{G%zH7lm94bvIIOcq#JeE7^dSI!=SKGpPBb8j4-8f!>t3ds zkTLCD3aw-XxPT#FtvH$fNt+&oob-SBlZoA3ga)zf^m-%323@nnROTuj6ZICsNiMqa zTf;X!{K9`v{vVGjEaOQE7zl2{F>2c(Z?*O*f~f>5a5P=RslY3G#8KeESy@gN8cN;N zlS>&`jcBrJGVjgWrxF#}pDahzQ{9%~Vy25&t66=%Gm20;cuSEwIw`!Q0fuEi)EDz5 zbPl9^$fQIpjwn9vN?Q?n%0naD!8jcZx-%$WO*zV_652F+I|2{wZA~{I`_z~&3f(!B zZ~H4$t@)^xZ#%b`P8P8@#s|sOw|DIX*$@tMzCpFsy@*13efn$I!Pz9Hqz5uXb6RXk zO~ixq-*PkFaHlJlxs@GA9&1x9E=>f7E4Vwvo@m@AN4+?nELOG6-9Rap<v!Mb9iKXi zz1~nz=c=*RT~Rd4AA$?#&GObS+Jm3+22~H9W&s_@8#W-Z+w<sYgBP^BfVZC-HiZ1; z=TkG94_L>FFP?XaUI_S&(JV<W-#pK=?U-H=CTpj54j-mkI^Jk6O|pmBR=f6M9|+z2 zyr5)Z4Y?WV_5$@W_%JBkJeQ+&5zpLAm%BgUJg<WF8Q%l(fhbK^**pAn!weedqG@+M zI?J*kG|_p+ZQTTrwaKnQ)tzx3ZPndDAkQ(>s4MI3b|x$?zHU_g%xy$uQFuw*)=<8L zx7ZPIXQ`_QxeXVeFc*H97}fg?{uzaX><=d|KcNd7=X(I}u8q@c(y~T?ty6m-1NzK` z$KG#}D;otTuC@@~Q|J|*{qeuM)?77{YUQ!x8a#oxeK#$oY#eY0tf+y^TNwphFzUat z(tY?~%=ZI3ZVwG~^#_9iQo^ng$hDjmmfKuGK)YXjFqetLa`5BW20m6zXW7yf<P$Cz zN9|-W;BWp0_8OZ_ChX{mPpIWza1pf50#fw+O%jQk_VkC~C!?O?NKBv~B@A41Qz*@w z=xi}36z!T2VB%5?TFi>D?NSZ?y>Xvobr!8KpNs2-xz`)ND)*a?aZh7W?7&v2%laNc z+WcdL^7hwo6u!7(k3Bkg{A2we?qn1xV{_<`lgR=0F05New=}zIhHJ`pvm6$Y)(^85 z^nkvTm>-k>40f1fa2VjtcN}6+tG*xfrphsC!O{fN3i;b%m=RXNdG-C)muSIUC!7pI z+~KTY(L(No{oLm6L)-zhpbG9#gaoCNkgnqu25RQt?EEQ_Xu&Tdw258~<jQ&9@iudN zgm$uQ;Y-6I_=gz)lXukXKO?!5KE1ZHa~ym%aSXotE7jL*K+6qR95}RHw^Q39>P9k& zv=you0P4l>bKU#8WA3KqMv#S)<x3f8x(n>9zgoZQaO2@>qUOfx!gks31``Er2E|@x z%qh8r@(yBg<UrLV@lGl;-QletjWhPR&nGZodICw6(iu>#>=ZV&er#fzI^q7zw<O2j zxM9!N6isf6uz~gJHFk=gF^+Nw#hRr|<sALFA>`CLc6>O8;Wwi^2%bqaSP_K)P->H7 zYkLC1pAnJwV7=`5n938llN-{i?A5ZKFoBlpqVs9^?7eC_63k=a@9DYld)!wxlMok1 z#d&tj!Q<fuA>jw%1}y`T2FIA$ll22}+EHOgd)4HBT`UMl9o1AF?X*l<!sQX|v?5Ob z?HMS+;w9$=Ik=p1niXArAS%7{rC)snYOG6&N)FOpPV8a2{)amGOcy`xNHir)nFy?_ zul9*E?z8XIYDd|evQ6uLA)S1VkAv0vRNojq7$v`mtHNiOpG9P9(jpm5s^(b#sfr!H z!mJw{t_Xj%K94;mO`CR9WIC8USv<62<<TJg4HttWIWj4ve&&uHS6Z9$?XtaOw6(=Z zA3|+5eKvn!{VUx^`KSaynLduyPs((Ki{ai?z-$-Tj}^hX3kYRps}buQAY!L~z^~%y z#o5Z{dg9`KV%ysJBu1c*bzOU02i#AS93eT<{U$phHAa7qW&XkY<MOb5fToqbqeeX# zKse&E2YQ`*(Bga`2uGSz$>H&QU%Oa&pIT)p+iox8ZDr4|F^>aO(}+mLzfP2oHe1s$ zpn1wJ;W<RWV}Bfg6K)7QC_lI3k})Q+$(MYSjYn&TR1Kn|Dagmo2YbmbLR(d~>n<&e zR8N-VZF0lU)=JKOp08#A$RJ)Pjk*=aTJ3IlrY<C{NpiJMnO}VyK`A8jH$qgr_hLxO zk>-Q&BwI!8r$33G6lYalhOHu#n`QSZKzf>NXC%dNbE*4{HBGXuJGU4U`2$0lU@$XB z6K5KO9VRFB73C|pSi3wkyF?MI%C=i8yx5b6dvNzs0ySPDFcAbvpa@kqG%Ogk&%_y$ zUt;>xQl~x3*dRD7{+l}wg2;aw-v2oNd;g#KiCmlTHgj7>J}~kP$}MqZDVpi&*`7j| zQUB&1O{!C8aQ}=l70{6}vP7E#=!hFxD*rS%Wr5j#6<3@k_}<W`L7%^QKGSjZ%`eh@ zxVa*3XbnhRUoLuE?X=xk?%-{GV|TFhnP1*-d)M^DAIaT<N{JW)oBMz}+BKA~oPJlD zf8n|!=dWxE0>MPGZj3j9;9UMkL!)3m5$YX?5|2kB3ryYsji4@Jp}ws=^&QZ3-WAiG z+atRM8gI}34dG1C74@CUBi$+*Z}3B~kAQBF&u7uPDMLK@8p=EapMdRARK%t5losdy z;1`i^Zf0a5Ln6Iy3S>}IVFkPHu?mmAf1x+Asr_9=M)%lAF|LARrC!wwe!O!lKxK!` z$Bh3?Qlg0?O^jlVDHFvJZzPQ@Y>O>Y2>vTss#%aY&owLB#x$#fLugJp5q=koDf%oC zPWo0rANxLg7E3%E9Gg2kGb}w@I&62MU{nx6(mbkRlz<l*5i2P=IGP$8>d-iB#6iof z+{x?E%uUCvO+b)J934I$2Z~sym5m&a#S*<tP8KDIQ57XfU=zk1t`;GP;|r@uKo(OO z*%DS6OD2(}*4S4k|KToEino$8A7-VbA?%RY6iY7w9v+j(9!5F{8kRY@9A+>U*q1(t z9o8JZ8D1M*9p)NkiQO2bjYUpiBlS$&i1ivZjeQ%f9TpoUjI~wfxXCONi7GQD`6zD& zN5$v4y$6>AO<heHwk85IS6G2uBw0pelq26HL>;2w;QWYsLjL_A5B-<p7Z;EBeOMfc zCWOfE9|_6#5+hVOxmRcK_~pdrI;?jV=<Lbxp+ghD$h4`vtqfTHTv6||=x!QW0Y90f zo}7taSH=EftnJ7f@4WFOxJZBWm(3x{#qbEdc{}68g?-B&m;t|@=UB@%**cfG&wVE2 zvguULu>a7KVN*?e`~Z|_>8mQU*;p9Y?q68Yp1)53wpi8xE6(V_LRABoI8}JyzN-7n zv?~A0)hfdE=oW@H+>qsszfz8T6wezI12w=7wbc#zirq^(-qTAG7iT`|2Rm0R&sNWn zw{@NY;!B-fD~a?oZ@~=EC9d<Y5@QDNlf9SY3jhU+rFqKIjN+AoA?G2H(CdroKp<TV z<O=ddBoVq1eZ((8*=_ui?3R#&z885cd!{KY!O-0wm{EQS{C~AZd*#{dNWduXVe3N2 zLZI4+M2xILu-fD(r={=>$NgX4A=VbUx_ZyIDA%2a;mJ$Hma?>{?*gjRPJGi^Sosb9 zs5s}&ji@U>yLgYx?xKb#AMd$}b4p3Lrr3xcn61SK>nBN?NE;DNL!47CsANKxqjuSu zhHCH!mim7OT~I~+Si)(_e++w!t^GyaNma#yNil#*!nKmT8nr8D5AjAJAZ}mt$kfQR zmlMG*xBj<lK!~HZD@C%4oL{6i`w{jn>AP}2Wxw=bZ^5$U`ZyMaW!Q#@%b+dXJSs3m z^Q2j+gwX}P`DZRuzss%*DQnQO#(IyCp%V(BeOAGPIrJR{t$nkf6gGp2WBPCS!O*gn z_~5}5`ayeD2&kkM8!p*7TN*1n?d>XPg2!>^jJ2js>@}C<mbLY@KiRy_IEk$t4)*dE zYrH6yYbHm{*0<-=Fi&4G+`GaLxNJ-S=fYd2PZZBmrvAqrB{E6=;bMRCusZqU3djZ~ zlQ|+Hj}4v*xCcVS)?t(aydjSle7%<<wwRJthFxhVJTO!qK6dLClbw<QPiy&@S9ByD zvw=6_;oGP%FBJzy*~;4I_3gvFpu-S(wnbFZ&@LtBjd@D^JGi+s_O~aB#J`c|8W2Lt zmf8N2=z74Rai_FS(%7wnABtHLtLTk!s3P>Ob|UoTT+D&g7}1b>N(y;2xUwn=H;3ei ziS*=Ub%|O5j*&rZ<2{9!n^$g@eb-|jScuUty0}r1L9W9+g`iElnN_>HlMj);y^o=w zeCSU-&=x6ydMqaT=sjMpq$0}CA`PnI*X=OpDPxb$cJ{P@4$P`J=azG5DbQj?jF@DM zed}@EHV^MQ$<=LkyI)Sk*pToBD*=!0mw=B4Ec7uTBO|V%wG!3(DwVkgF8N8KbT!=i zYR!JJ_?evu`L&@IY|l^&Gc<fD9I5iaI;Z%k3Bi7mb6mm{=SY(prMUZ|xVTAX0ZnO8 z^(bx4vU)(2;8;yKaa7+1`vVz4P`@maJvWJz0hN?}kh`}^6-y#}1)hjb6^m=}!>|1V z>^cW@caE^h&*Tn|iwk&jGZ@t7n#1<*g#%?nh<J_%Z~gK}z`5%SFE~7>RoA!1lMLOy z3+`YeKPStRmHUzaf@h<;M-Qy#Ht+`Bewl?3zpl7r4Q5q4%tF#!XVC+`&^rzD;Nsg) z32e1(iEIIna^o+Nr_I5FPKzCoZ@W4{3@wf`#$bxObWivwN814%FcO{}XwZ4x(@qww z!@c~5=sn^E8SOwg0BY+R7~A06j=YS2OnE_nA9zFSynKiHxagF6y`(J&c==O${2s34 z_#wU8@<Ggl;ftVvXH>RJa*GjKp%gdFNuG%(&pgZ_LaLfb)S4R*pd^CzItn4kM6PL8 zfR46GOCGQ(p`P2NAfA$^gn3Bo9C#qXqu;2Y`zUBmgr|rD>q8@r$52?BUoyKcFK>QQ zlHcGkue!?7MxBW#OY?>|MI*}*L@mozL<@m;n;;N{oOpysNX^LQLPd)Ik{}<2HflEX z`{4J`)~K3k81v*$l}#s1c?ynj8e4Wrs`yNdMCwVTghln#%k$jvZQR|A90S|=YGYER zomG7}@8r{3DK04re-hSN3PH3m5i>!HfJ3`f++BqL#&Jcdc>Fo(p+%!*1}!u`V@uS@ zydvJze%8DY-jj3T`;jkml$nvF&jq(LA@HU3zK^N7vYcn3*}%nLUbE`yT%ihHvrjcG z!PO!Ou1P<@b$hWnS&C>~+u>EwT#9aT_3Xzd!c|tCm`uy|3s;uDs(7Z4t;L~CX=}XK zl8(`m&Kf>&7a;1^7Mz9kvLOqb-|yDZ;koVNPYKPhqiG@>l6D%&ypiU^4pR6zszM$- z{M8RdqWq2YR3mS^<qpA9H<N-Jys6Bl7P$9$tI%Bc45YD^xMumK)-^9R+E4JuQ?v5) zdpq9-+p*t%)!kDt+ufN6))z@{FGhS{Cj)l>Mu%_eA^9`TMjx;)-<Yc+;IAg7m={be z`hDvy+B%fBhW;0E8SFfRStqZq=1peZ^1hFiBtXDA^k@7Hg^abKg0!PlnRqqMU74dT zZToLJ!wBQRW(r)xl)O<@H&1>BUj8Rz772q8g&Ddi$15)cd-?Y0;yHkD-dotA;qZ-p z!4q~J01p|3QivqhEo)0{r{n9wmxL!JLN`L@M5t{QOy4p(=<GU3R^y)mi3f7R>R*wm zXmjK0;Bcr21#yiL@8lMRY>gqLR2_EcjnT$cntHX2x!Q}*{lJN``nfk8Rw@tOUyTU? zm3aSXM~M^4@I(a;$UNkpP!knoaz#gFOClYR5S1qLcSe<2#hwr=<vtI*Byt_29S}MR ziyTub^SdgcaxIW)DM=3|Dq$?C@I0a}gagaHx%m-y?N7ZP5r5-ODTnWfSirUm(1(Ic z6R*BDBJh?Z4TvoSUr{&W*_S1T6sVAiTO1t!oQ*{s5-*AUNyY+;ANon8Al=GgyClCf zE$@8P+tgqb56yz0S9m%-wCwN^Uh=RFff;YywA@ua)Bs^z=d><*%D=A0R6nX-$9(!S z+*URg9KGc9Yx6hM$qn|?(6+x0ERowYBrlg6H*Nb#i~8QAHOiAIA|?i$OO-0IXqC@C z#x!g<9c(*EkK%6j&q-@hiR>W=zRr@EDdI04M|0cly@67{V&MMV!B(#rI25fIzyzf; z;e#+OuVYJ`jB7DjW)ZTBVd&2wil)%6xkigMabjX)dvLmoGx6Q4OulxG$7RJ%F8vHh zapqwNzMSeogpUhNl`yetp`$><I4X{b3CEoQzfs-tC<R1c8)9pSAys!r!v8RTDwEhH zk+xSabD(Az&{s+HPrn+0TEEj(@iHtkipAMm+%Y-Ji6YUkz`%%|iwu)y%;xgUpW0~u zCm;HTkt9#OvW~J!GF#Bwk!>JRM<Fg6pJ%ASM&YD+=v=D;@R9Q%*s&jIC1`HSh!0t# zVh|l^fPGDpZ_aCHSXGI25o#x?9Jt8S-?>p(quuqeg7ywaLb0N+p}h@Mh`>*<!YDkW zGs7@6w@+3#T#$>@P=%I17-Mixk5p2LU079^h)k|md%C1+q@<ng_=j771%PlBz_?*+ z{jOj@Kw-juruJyJIEy!_F<Z{t!MUl}Pph@XoN*x1ZZLsD>xmw%&&&hE6#%UycOhE& zGtb40cL?g3bBNE*FsS9Hcjlg3F2U5)Xk>xZ$f*4Pd~6WZIl|iUgjAyPrup4M_x|dm zGuoy|?d9P9(?Aw(<TWZo?5_OtP1y?_aB7%S8cAI7$Ct!H(T(34dSD(?PQe=1cwR+L z#tV<8tTH!j6&k11I=5pL>A4Jlo1+mPK^54G-N+@S<k`*Ih()L3*(Y%?zFhebn14EV zmC5<#T`t>y?Nn}GAvmAR8B$>ZOHR%U_2kq{Ngh9ZwRBHT*ZCVxk&JM4nQac#sZoPW zW|&La+;sA3`f&{>gjeyTFkgB7G~uaLMowp>vNKYrt{1XtIcRV9^qZE1c0hV*xV@?~ z^<_RopKLkp)puudg6gVXP#NJK`Kf5T!o+~)yzG_gDFr}dBLY;S8KSx&AyKmS7sDCL zJl9*att>m9_*92k^v!Qvu8Zt;;myd`BZf}7i=up9$f(jIz)Cebj`Xy7Kf@zKOVNj{ zdBM@IL<gODVa%^c2ScK~3-*4#D**b`IXBir$gF4+eYM=@JEQ#S-}|Pkv}ZQ9Xo5f@ zyh!1nf;9c1V(!8jYb6nG5d&ia3`)YUNka&y7B=&$BQB0{+5?($<kwuBR7HE$({H=> ze-<KS^AWB+KP{-6e$H_ierN!V8(JQAne?5%i~3gvfH=!Y-c=7_g{F>W-Z)oY=M`Vy zij}IHcJgP{l)KzN(>#H%&*8-pJ=({VS%08icVMq64ehWzLQVVYt?aPc!jF#GI9uSg z`?F8jP(P_!1G@dXD@N_pGTgFV0|Femg>Jr{u*&FZp;)cSau~U_ZlRvAzkih7V$X_C z>rfHv9A3LV!+BrBMR(n1#0*AOEI)Fo4s1#B<?J-zOMSgN+?7#!c8yYoX-hf%SI>=` zx;%ZR9SlrzHDWJ$@_SZ~z``_6ScFM8_<e%6K7swMjg7$xG6%xI36dWGcCXz%vqKhw zBoTXu^Tfe;c*X*eSVq>&#r*5#TwlxR8x1X@H~CSUX`K>+1SylQjgr_|b>0Y-X|)$7 zVUQ)TlTAIsd}_^?Gx(SGDk0sVf<)1vIXrgS3od#3LJD>xN=N&6;VA1H`8ES4Y$g_! zZwF-T$+to3Szc`4sJYHtlJh;cFZg?ZPuTt6K?#$wvp@6p*dvK2yVWynu+b%n(=7~s zgk-S~-;w=Wi-#<ugaTwqO>?Wut?vbiaqE~JTnoX-erfaYyK10>Wc29$H5QKu&oiJG zSj=8=oe)r&rC`^sh{NDU5QLkRX1AsYZ|rfJQ&aqv=E6KA&67Yx){{VJk6U^gL00mv zshD14*F1XBjWaJZOXfJG7@70(BuvJwEjOEcV}@K7IpgrepM|@l_SD@E_bWcXU|}w0 zG9^O-Y<_FMonH_yX0?3kHb3Q!ACsP~lcOo8@}tiITo;P+W9=i*Et3o4jdT;m_EXmH zD)_N@BsSgrO}ycc4}-U#!+v}%-b(W{6m4Ji(C(2U#~*IY%b`BQpB7s6c&|!dEwtKy z*y{EU_sEK=Rb3gEr^JN<;5jexosTVJ{a>&O=!X)*Sk}MXR=9NDTmOsXf)Q?E>9o6) z3UMe_%g9zVwt0~WsiU0ACEJHeV)njeHXnHMRS^9NFH0fp?!b>A%d5yPi}cIg;Y-K! z>{%+6?4T)2HBLO`-tD!KF1+mE(e?h9!T3;#yqzjAJGbNu;hdj}gBBv6J$G>D-rqTU z%nL)-Oj7BizjHtH(AYDH599*pD!DmRZjMn#^M$CRk&3xF{cetL6U21=YL1MlcHN;y zJw*k1rpm8cj-1^lSuk~OBZ9@VV1I3}z#h79{#(czsTpH|nshJfCCqC5?zt(zFa@OA zPYssvz|6DA5-F)Sg*^qShf%mC<)>yXm{pn5YaFTv^WIqT19=GZLEKzaKHh#Z9)EJ{ zvnGziOyOm~=iTaA7t3cWBkoQ=evg)?!hgV088N&L<;PQ)4zlQkIhar!jB94FWXeyX zYgtMw;)OO(#BYN_eB=p?Z9JN_v$2cVpM_r6Qci{W9IJnzp62FPT?{HwK1;RttwR{L zJQMzDaHx9sTkOVzraj#CO(=&MaJa9JD8FTQ{<Wv%o8Zbm%0=H)M%y<4*a?%{?zCe# zgg+{hOZqwS=?sP7w_co%+cB>#w2>!Tqv9FV+&Bgz4=L>*T^rGh<QQJd%|T6GGcwp! zV7vNSrdYRi*VY;)K+r!ITQs!EVuKLs?eA(n;;)lnqp^Md^z2RzD&D@XKsthUI-+{| z3?9AQc3yeM_rdyi9!WZVAZrBgrfnuS>^)bS;7BHR+{1i6vo4J<L+k`%OB@QE3=@>m z(e?#SLG#blJt)b8#vB{lpbNRM8}QfBEnWHd_p}?Z{^*t%@tUJwR2QEh^%Ql<=@YDn z`(!s-mhQIul!)7cBdiWs%a@HuRp0lBZTSB6D;JMXul*D~JLn0X!TqvZd5Z4}$cA+3 zwugF6LDa<t%X3`V7srO*cx#epvq^VXpeg{-L4$K~pKGtfr*XU>7X{{R*wjS7xG~9p z+cY>XXl8G_to-+Wl_c2QUdZG&w#{y<uGOpgHTfZF=%53GV+*-h<H~*RL#kk^L0ZsB z*hNtJ@vp(rYl|E?wn@~wcZzY;`oIi(=vC}XlJR~Ob|P|N37}=<z#lUa*;_mYPl?xP zk8DKTGW2IFc`{j=rZn`=EW^o1EpES?$J<)&cR^oxOw=TwSgxrfYr<4)+_4{B{h1Eh z2P<C^ZH{*slVykh>QzC14YB|I<(X_*+UIhrnzPH`*T-;g>eeYH#d+BAZgpC5WmTbb z1oPP=);-r?GhJ*o{I+T;LyW(e7*Y$JR{XGPn)weV7%ez*Y@w)H*jOg;Df*Ze{-GMa zzF{5NkvY;L1VeoOiXmnt{n-hV!ANHo0b#yr0Xl<Af{|nG#-lzJ85DtCYQF{shKhSs zt087A`*W2p%X{h4#{dW87BC6@h?6@hm|zt2eR=w--o{p#_W~spz)3<1Tc5Ag8t;Mu z2gYSsbMIUgLD026tkd3dTKO}p0qD-%>ll=_R+3v+a+>BH2>+CG;bWMcfs5`l4^Ka( z*(O`?IWu!z6EJXU0B94ZkvDEfCE-jE>@Aqt8%3O$x$q69prA>tb~!aD&DqX8UNhp; z2R4@d^I|ZxO6Pf>Tcb%@QmJpkd?H_T%SV=dOx81G@?xJT`K&KQiF2<Jd?6l)yk<DA z?}^Z%le1Ld=_v2h!)&FgH9w@*&NP=pzt8z_)5xh8^1W=bmO^I~rJ5)bJ8sYjb*M0^ z_$OzUJz#Kb=0?W1dgrT<N){>oR7|4j@Tg<K!OyxIJTND!Q1Q0YjYq`DWTaKf)#BF~ zO)Tb)`<@HyFJ;ZBkL}UEht}WpZCR*xt-m6>5e7?aE>3r^L9cqO3BlOHxb?1~>VRDW z**Z4#qncsHZy)>;H#cim)?lLCU;4yBU)ay^zc01>m(X0%jou&?opz%Xcn0UqZt9m5 zxw2av;0JPg{y(gJWl&r}*Jcs|2_D=-ATYQM?g=h~y9al74;}_*u)*Ek2@YX!cXxMp zSl<1<-P&JU`(y7t)pfe7``4|fy8E7Uo<}_A>k7*r<>{fBzbkq2aay3NdqK9$iuqpP zErU}hFBX-DsbR*gwRS%*-t1*tShM@?`pXLX+2>Qtr(#!}ue;A*<ZgD>npW7|f?OF^ z#Kd7~E7y0wZw<X*%@`TCK0;FNoG}+GWw}+ZMEe`dl7Bs2A&IS?eU>Y&M%k{U(BtP= z`s)*_l-Axp(-qr(fm7El)6?6nzqfHeS_<GBZd2v|J=Vytdj2%qZly*!*TsdoReZi| zZAUC=X-D>K<qXVO5e&*`aScRn`?wy=q|kUQ?O^nvNUWc6M7=rapnL{T9Ph0!?!D?A z32P&dOlZrFEN}ZnJbG76vgwsa%<64SeCdtOJ##m}EpRz)cXX}dbabiW;B{Pbbho0` z6Y9mD>R<6!>4Kklp4Xo->C<^$rp(SyuYR+7_b+;w9{qfOm|~nlk617?p_CJW<R+oY zeo2&yeWNC!M&c$$r=M3sKS^ThE%N>Lls>}mq}W^AqpC9eh(-K(k$RVQKK@Mck2`=C zL~l1yXSSAGqUayj2S=q78@tDe%eCJUNB`G-EjJ?%n<oB~EYJ5m1w!OhC#l#xr}~wB zE^6aSb?UK>sx;C7yie97+=?bXR6aD)4n)OCjR6Ul6K$j;J+|^HRt}}K9NX>gwL1*- zGVE|_n%)ZA>UvXGb7v9+G$R*KcS9PYTArUP`mXF9XCl@ggQ+Yi>l;3X2b`$4jQ_nl zkf<;bx*rl9``0Nz#5HefjrUjzs2)Y4Np))Ih>kFX6E-1i{?m`|cxPlyD^-zrf5P&E zb4aHm&oIcLe!q?9*oK8zQbEA&bIk85Se&#Gt}#YTHd^}RDOq;5mB+80s8DqP0AQf= zC}j;Le%j#|5dm?MlfxQ2hbtpYSjlrVj{JWONm$c&_TSHJ&k5;F9ml=`ml-E>ddIdH zCWh4mNAS*O26xsPPH+t{w((u8uga*1;;B+D_a~7G8{E*+HKJ>@L9Jdc8W=g(`Ra9k zqJ>}um0n`L!;>nJ$)V7m`4|cPASR97ut;bp;K)LY1h-*zJEK}Wn(gMsEsV~-IU>lH z(uP6XfHYAsn9eHb#}AeoUzpwpYa};kO2@NB_@?6?Hr@`sG;D9@B3OxZT?w@#lA3}^ z672wrhfLONY9TllI*c14gG0%h0S5MDXB+JlQM1w?RzS~?y1LAZW4XrOMFz+-_72Z= ze|bFDh-{BOK#`QW;ORX#;_cPxVh--Q?2-&F75IeHUMdh-`yYGj{qOd_odOah;gH#N zSGOG6A;tQQEl+HbRm13g%MUhstn%K&ox7IrlPf3#y~{HHoZ7o}%o2j{7k)_Uc~Wm4 zzT5U9$;z(4Qa*PMK4@c<pPa=xxcmE4TF-Uw<nTS5H~%`09x48@=Ldny>wwm_f_3Rt z*0XrqFT@w9e&5@&&dO{*dYyW{mwnI;o@|S;o8ct%xo$<k^EQlm(*!lX2ar#55=@`V zh!1<Qj(uCz+Jj#Ov5j*g51$VUr+8nE`>cL&8f*BHcE%uP>Look+Gf1Rv`Tw)>-|Ui zp?+Pe?YQx;?I)YV#URi7n>AB!&vW(FL^rUlVEQiaAG`;&b>dZ)mX%wQmA%LJz6XyO zuN%BU75B1O8;_y6_l(iMPce)3n?Z#4<<U27C0mlK8AdIqxbBO$c+k_w6#AQIVS$TD z&J*#iB*FC58>;Ax=g<%5RLC?hY+2=kN^V1^I1BgBU6(JvnPC-(tWR&1T<wKtS%O+~ zdrW|%Ydk#J2fEJ%&v}8YFB4tvz69%k+e?Md)$H7!w@H2qW>o#8?1-w)W+BdCCn-{1 znsLfiEM#{TQ*<ls#j*n_x}%7HxE}6{$O*cM4aq=ugemg^=f99f%<g4bh?A@FZsb^m zP`D4fMJPK0H`y`!ZDE!lX?`_|BKk@vuj5iK#rg+p#n~w#5!fhnohr_8v8XrF?u)gE zt;afLU{ok@G2yUmup<dd-x9q|ASfz)Taz05m3b*UkTloo1b13-j)}i-lidZc-XR1) zfPhreB&@{KLO!(na}8*qoMND8?+9q3v$o~)PDyk;*DhXY!75p3u`K4eH;E;7XO%py zS{-QtI#Ks`UZU_?zVOQ;Q&Ep>9G*SGQb#^vC^erEWF>Wlf&)kt4A|>X1$W>%$lAV< z|Lf@r(F#RY`@~w8w`XVhW!_6{hy$O7b_DO=pXH#Sux0rCIh`LBuKRUkCmNN%n=l#; z_>jpdN=*HdhEs=SSQvJ&CQmj0)h1Ep<1w?46#OH=>OjpD)D&&*{-Hi%j{}Sz_svfW z8Yckqh}I&dt>3Xe#7{CH^Z8iZ-xqD~79?b3X!`u8LnLhPi&eN|i-7u6mQ~b_T6@tD zVDoarJhu8??2)(Yqc2s`!Rd$7hvqI?U(UJp(@&32a-Bb4C+)@s-`U)M`aUlB@%~9z z!T!}wx&IZj_=Gg{>vfb+)MIbv%FFE7<x7=WxG!Jw_J0KLR)tEQAmbLV*tIKyIM$bP z!lu;6rmrYY<AM;mE41Hk6v-((6pdycvS711nvY3TbK7RbPmao;b1%8V#k1}4(WNQ> zX?g8mXDY{P;(fpt52jrIZ9y$g+fxuslo{kz5=a+(E+uU|)bXoeC@IX-;hcQHEzFR> zw*NITDGUad^J?2)2{c22<+-9`;f8iL(gOuOM_EgUdZI^17fhe;EFjJtqt-(^d4w@| z!}q+>ft9!{53XpsHjJFhmcN;yz1nPeso`fE&)L#_bT7T{z;xCQ#@nxw?|Q5ZF*#nV zcy5V**c*qVXsR@#XqpdX#$Ra)RjAz7L%c#o^VMBqD{4Q=gMLwMt=T^rrCAfZW&=<Z z9N9uQv8{4zym;Ta2?W!Vil#@A4T@t#b!%~-bTqpO2=6>0#TO0T{~kz%SKgt|2AU$q zb4wQuX&@x~!UsN+3SqojxOHT}#XngVK4~CZKa+N1y+kmNWFXf(r~FFyWu?Ec4XS&w zuAFQqiF|PFc72gsPknWaJ6H{vc-G6#ehDbdeYI2`@x`CM@C`_QjLM{XTFvo!A(i)i zjWPqjVke)rOKgu&(mFEcFg>Y_v%I1@jrd}Py$Dt<`Vv{bwA*RC3N{+NTjzOCW%DK4 z?(hfS38BP4I5^3>y5B@m$hjMcer$Z~-!{4ZoLb^1Ts~HxnZ6GiEOmCWdqvBaFm{*t z=g6#SAU;Ex<v1SwM^8kEd;>Az?w4mavch5!vGg{w0{3`OA$p#}j?gtyQA?AlSCO(G zEx*<19eGjq)|w|wFq#(X3EP#7ALidw%J%!B7m6U{70hJXGwCxEKbrsVh#;|8LS=Y9 z4!o0oe%y2?Ona}|E7g|jnJm)}@wOb|-(aa`Ij#ND!m(;j7H=qv%#yFN#iwwOA;|Er zM-F)%0(W@EQ(v~2y6iSt{gx)r$(N#wNAs*tn>HgpG}?uScyXMRprM}L@?(0~;Vk%r zh$ASA&+^t#7~ke8vH!@cLE4mczG=pqEn}%$_8i->_#g1}AG);rAKO~f8nG*J?zR)f zxzd>JyO{iOjqff`5@PuTIp(#->y!?q_KrDF^zAhn_)rT~^I9l+isvStD7i|)U}wsy zCOEAW<NMky^UuGO6_-}*{-S@a$$bY~N0#hjPU#pot;cnQZ;q!~sDkh(xmntmXP%d5 zpd<_7yj7@uov`~Wx8C-n*r@vuPUyf9Ps`-ecq6@Ud~-Oh>uL#82ShC1{_w28Bt8h_ z;-xyKtO-(q8HKR&%*SA}9%+cTj3Ses*C%~n!S&c4JG}Jdk%!w=7i(#OW1o|bl67g+ z=g`IyQ$%!y!!iEzRpc#XD8kC!7U8q)hB5o=kL7wNaY*bsN<Xp@X)m0AO4izXO8?`9 zha(MMr3cN02SN3J+kg50)jG~M8P=|7w@G@#^=j*5RjejG;g9UZz}@=cQ-6T^Wv`(b z1rWM@@$xgsga-?A$$tQUl<I`@1Ip8%eThR+{tfg4%QMO&(jw3b$N#`F!!ATRhMUf` z&EyIHJoVe&FGSxZlVb>V$}i9F@0n=kdoL2R&%Ga_y5>6!?Y@uU_rND-eu9%xi2vcJ zOgHv{AJZ&I6aK3>KU~>(<qx7OmrMrDuY12$;d!!`ewfzskHLH6?gig``kT}3r@Lp6 z$@xHaMgjBlQAbAUsQWOw)(h8tHr8Rs$HDwn4jI(J3Ws$*(LvEd$4o$q(h@3%VDg1H zNpj*tjRZAwN*v-4*)-gx#Bs-CuI?`ka}0H%1^9$mM!)T?q7I}Bp<k3xoV!2tD5X?% zABg&rJH)ElqovV43XtJ_;O)!s)A6UO)M{ipE0SkCgUYj3>X~8QNtqGdX}SUJB;081 zgzyQt$itC{abWO~h?8)uNJP{OoM)|->}PNpLu2z|BYk8zcN9)QD%ON9`Xa(GEq~X} zu$@{MEt}3pNK>}<)!%<;j>G;<TX9#+i+>rz2Y9`N=DsegwvBTOw~REzGey|Y=@HKt z0_dZM40VF;W8F(j&dQY+Q-_kiPuq{|LI`Sd|0?neKv{%~nfSY?So0-ObA!ErhQQSY z7=RTZ6*1HwZa<N;V+6CDF!TcE#GIv0CE3#1GF|OxiXa_dm*oMT&O$MSyxZUzQDKNU z_y2-WYJ##AC!a#(B!+W$@+nm&&yIR@9M8WN%N<2bQ?=bOCB$Ws{Ohs!bbenO@R1hd zRuuN&Ss$iu^)OfUGU&<KeIx!hu;SH8{=GNy`qN8uYj-4CkKQ~&d&LW+6^r+79yNWg zj9&6ySagekORwk8V?a>YV+F|m6{oc=bGFly)vk?tuH&8-rc#gI;ula0CmWPTEEvR# zf+2)%U;6twb>yPzTO~cIa6%OMXm9j(&Yyrr_Fk7pxKUGlu4WDS`3`s5NG5rEuTbzN zoiedr-o_m#ZKQ9(#vK5s*H_;DiAou1$sfUQaSU*VcQyXyYL*#g<|BR)_pjoez@TJg zfoT!0?4C|UhOa&onCry}fzb)!z*=nOpVFdHX1Y__msvB(q^MJDSFtXn$%QySOKP*t z!fxIzRPg_4o0Q6eXlgh~(uKT?(f*Pw`SYyFKs;5vR;h|3n5oijTzAmOo>w<%u`!}) zZPPLog3UJ0$H$6@%7#7)`llb3HNkFCSeqA&B#4d0`G=79I)~TdP=Wy@oR>cpi$rNs zsGO*&ko6BGo>u!Ei*R1{Rik+!b_5}<4WoLJW63{wX}+tUz7Cz3mW8zm3rS>fK(n%; z!(X<HFUd#=!d3p;XUnMZUJd}7jMRSK4ZCXd+JAk}slwd5{CAQu`MLAn6yH6jWBlFt z^FK}=2AN^devQO6LfWE>H9~}!OK~p!cFdp`V{~c8^>n;E9G{dOs?0fRTkfSc=8#tw z!I<)y*9J?!_d7X#nH>fIkGyNE@H1<I-ge8{$<FDNItD;obnYA<<HmcP{HT$pD{}IX zxwWmG^R}-W7sJFpif=>&-_e-kErR)P(_AeBF~eaAu7T?%0?aCsCr=vbJ<dzKyFTmA zL)QQSBGL6m#~b$j@Ay?y+K>#U?Pep^>CQbWhO2+i;7s!GLiQj~8TXr<NTx+uM*%-t z@(f{@CJ}Y^8*6+mnmp+6Gi9Buyx1Yib}gg4!XZ+W*>YyY42g#&{~Gr(Vp0)5VpyF| zrMM?j+vG#{>cYFYTvU;~+Mk8_97*6tvcf73?7G?DthNO^+6}Qx_k~MpaZgn5?AFM7 zbHj0aYrY53lyDmhrOIrX9CB-(^4#GL=eh=a;bW2|F;8^Y$(_xg3y*is*6?2|82(|^ ziMl1%<Bv`!tXap^D``av&Z;_$yM6|a$tYd*?={jqOq~7Wn-y%~q<wIaAD@j5Yhza! zZ{VSQP?fTl8E*htm_A%HB`gr}5bAz&X2wlD^D4^8%2{`9;>zVAO#kkjy;>L<Y$}<C zN`g8X{TKgj4B))Yv+(^+g^?ao_=oskkTLKI#-EDU7<of%(;s9UewZ;Ob6|rss9Q_Y zKeh6Cdjm^Z{pAZCy&SIF$E0vR7SrGTcj7*ulX6;&pjLkd|47ro@<TS~){A20bqyTR z>}eS8QUjFxQsEpCfV;$+BD=)Y_R_)sTF+jqhPaZ(eZ~!F3uFl#4zAiu1-CC{4SdAz zs021iY|UMS#Dt`j1ky+{Fxu&P24h^;-jrEn9M7Q5hkiTjMt4@Z_P2#D14vqf8xdik z-@Erls|J|+sWNQok8)@VP~ZzUPm1+<h=H^s%L!JtF$XW%DFrJ>%G=Gb=2AP`jBY_x zYvD?;p*E?^-krU-Z%q#=v2zzh;1#J$wSO(Gj37O4RZ&C}kmm)w%N0eCb_d=OLptfz z(bc|Nb|2nhZ)cv{C2wjdN0C|l*4??Iees(#7wF<3pY$R&|IZ0jJUNO?Ky(QuG~~`r zpu2d~h&QP=LK(KBNYETQFvp+_v&jRx@Wxj)7ltpR8rR8X)z^PIF!#)Asz?88rYFR7 z{Ejcr8$O^`m|2$>#j!5uEd7STD?9Bs$pZRW)6I9UoHYNM1@p$dw4CZ2QwsC;Z0uvc z*t)^OLKjr_F&}a3I-<fb7p&`v7m<Kktv!`vj${%MGn?qlTYpJ2b7q1vr2I_&PBtfs zq@a<H%X0+E_KITxtN{W?=nwY$zrG}*2iuqZQdnYE|Js0}+F>1lb6(Rqa2NlJosUW# zYZQ5=yTm_gEh+%@JpI@AC*evQ0UWDvUnGvsc7&9T)qvqYymMeTe}+(8FFu|Ef!W%| z&2?Khxr3j_yKWSnPDNCU5r0OKY7P<2qPUyCMr8zTz&H!Vjm?>o<@|TtvZqpf!ny^a z4rx7Yh@zWyh01SbF5D8@BIQ^L2ZrgFC(-HA>07%khDA)zu&oC{MZpsaRa`xn){#+% zk_g}Ebc4e<mWf;QqV}fn_D-iur`-*`qAPw<I&UWIogMSkPHNaemSXAsAjhj-OLLRf z??ICxg7CYEWqy$!e9D^({yVoFR`pdA6rUadb@>xjOhOiy`e*cB&BlMXHljitE7OaR z&<}@v*6D1`nBN`CaTy)UlYqNOt&C%b2d&(0x|MyzVFA1G_@72`nTbjAo_FBYdssgC zY~5k;48`PcDlasf@rWmn#N@Mzh}&Zdr-F@T8%ke4HT&Top+P&-*U)Yd*ylcZbyEF6 zz6r29qoKz1A{>B!6i!=vXNEzHa_ldhDQ!p1heM3O^f9D6ZtZg)q5%4008^J-XX2WN z9q|(uaa7>iN9@nCLOuSI^4n`pQ*>N#sEBPru#cu$MV+o=TAl7@KhL~rg>f^>I)nD? z&V-%V8b5jyX@g}E60`II28-zLzZ4*-DY#ej9IR;&EF`6p{Lab`*loc5B<HG3C7sps zNHN?0?eB}PIN`7KZZ|CtnA6#lFrise&fc5o)tfKlk&u$JJ!bAhp7YsxjI3Nna_qxf z-M(3PKmnUNp~1!F^G<y#d($1~!04>O{rxSzPvr3=_ua!XI>?!ZF(na>mo?s1{Y|b) zGy;QF<no({T5wni%jukJPyJvgC(<ul$(Re9ZbNU}DA_IEh-RL*T(nNkQ$_=WVn?EF zk{DI-s}vrV(i`#h(wl;Q3*U)DSC3~5V|F!;8ZsGG$8E#9Rff`?0mC{$1})2tZzyHs z-yRa{1BQtkvP6QZ;ZfJxH69$^rH@4CDQ)c!-lO$W5+~-w^DY0X3!=CCWrt;4Hyk%z zuc*2xt6}}gxK1Z-S|F$NhB6N6>u;paicHNjOEY{v5shPJ6r`^KWSzG9MrT~%s6Oae z{(@beovf7%Zn!rHqn!<%8S7SOYK{1O=(GNK7$2Fk;?|4@TxJ#e*JP9dcX%FLZlBmu z-dm6gnf;*tii(72X4mH@7MN=0)EAT>zi=T>tVtrZW;GMm7DRSdbwzxc78p}0L@3oB zYF62A!Z_2EvuKsTZQ6LUxoEW#Sv^m0p44x`n!CPZUoe@A0Z5Tam@9&f;NQ6a^cYXY zbV=I9m>unDpnhD6)F*9J{=;$+V;-)4yNPEMrXCSpeQOa|OWXIE#)MO7?Rih^rv1eE zU-;8YLIiugW61fc>m+0{Y;gngg(M<Io#WGLQ%KAl4lgF>y<SR}%iXSRSbW~P!#cfn zx(Nt*tm^S++xy3_Y%Yz;m9Vd#$@UCx1kGlgo;YX@eBnIIB573}zBN}N`>VYZ1l3Mp zzBF=|bqiurSe@J7&WRMLuUH?dfrQ^s^rs~<(n2!9J0U`|tZ#wBWYk1R!ewL6@|?=p z$wAdwGJ8MwuxZiwg()*_3)xx-Y2j>x2Reu3;nj(XKZFRYtb+;#w9)uKw1*I8ZpnY& zLS+}*78+KllP8+uo=T{;Luccg!fM4n2r>zI$P~?LGt(**Tp;nlB|$>{NhKsazCFfF zAE?_?K6a^&)cPAD%w#}$g;_3UjvgYm@i$8$b=p+1`E~dYAR>1Cr=v)kwHRA?$X~Ot zE6myWlq~j%L2b2!3nyc3L7tTvyOB(k5!hnvICu2M1l<m?L_OO?DqNGEM|?g|M<Y=T z`q$y_9sX>*rT(W?1fmkUs00{(*L$AHzxdtD;^Jw(LvBK4$X}fTr%Q5tRREXAXfhww z%rGee0RfoFA3V%>eBlwrf?$UKmTv0&ZKOL;{2WFb(u8e!6IX6@JQi>FtXJCyt@RRN zA2u5JMQsO#X!*@oic`n7zf<>mJoSDgD@<;UToYaMr4NbLCa=|zBL>=+e=j#U{L>gI zaVU{GUpl{rNqrk@QChldh#5tuX^fsDB~mzb$yi|B_W}LRTsqv8y3+|dhADx<5L7zm za2BZQCs_O8Lsq;z%@rBj=dxhjEaE*(O*n5M%ljJRNmIn%1CO7v!sL>@DUdZKHqFq5 z#@_i)xS4;Dk%<SqB<{-Gz3#ftPVO%M$Z-Acy&`kvzTbiQ5GZhJ^3bBScWIM1+8iNp zdh`0wLX*uV>Cx@A63Z5p!Q8O`aZSyKU@6fr|09zz!I|h%dfDyzCZ%K^vJ>>YOkFXa zKnthDV@)1v9SVxoti>^kUCL(gE}&sp;4zL}$S#uxm@_PZfiYUOGFiD!NQ?wMO25hn zuqmKM@_!(bfFL)hk%B~YXo^ra2pdTfs6bQMr-q$03Jg*vpj7;&3&T!Q0|q%k-KdTF z{z>}{zf<Uo4UO{G0{9?-K_9S{p=Q{8Kt#o}0Sb{$s!eO`Cm^EI=RT2w%>FF_Bzh74 zplA?S{`26L50VuxRnVi6Vw?~Ll<&v757bDBnilejhVL810K3{)F|{iINb@r*2_&UR z%?MG%mg>u83yKBO2xrBGm&;Q#K&r6^`nJfBjExl|yM%%I5!6%=B<z8~T=F0!V39~x zHi%ZKkOD%BO*@!N8$=5%63Z$E6)P12AcWY(gIoGY>_&=^u5MtFXjVSRLaC4v!h>xw zn9CT%1Jr+2(1A`B$jbqabY>GJ;gF*Ga>;@afaW4uS)i|ZV-kQU1vh0t1Pvbm0>CC5 z%%uqe0L{g+ia^OqW&j8-cJg2@We_gVTr?{W^tE723Q$JF#|YuT)*Q@b2;u;mi)WRA z7L?4WAZXYNgSp>>(180QSveq{26ecTxQ{h*F6-Xabf=JIvkXwq>0pn5$W2U_Z-L#1 z<H+3RaT0=m_L_Xp+QJ@vxw{AxmZ<wA_Y>j(Ije7S<z(K*6H&hIQUJNj+!r80M>`)x z*u$zk+lCx&Hu`67v3MFfl-npeB$nUUED|^8i{{nneVj;5(db1!+KvoK*ZeN`h=A}V zyDFeNd<M<5Y@2O>_dCjp`^s7xo>_@rT)%V+8IyQh3ppg_O=fz)2>TVN2{3e<umrlN z`4XfE>xS2QXxC0}zRe9ccaEJuIB%K8ax0;_P?cLNOYeaC#CBd`UFZT|*|e-%48C)B z{uV*7>>~m~hf-KY0ZR9Y=0NC3%2Phb<c!I--v}U=ObMBP8eHVwijY{`6<HJrseg`0 zsxN?AXACaBpxHk1vZM(EP6-)&N8L7032eR6#|3wKuh3U+ZX@b_e|;{2*H*Wei0Kz% zEHz7DH;Mt_Ugk5#^ees?LqQ3by&7bY_@_Zys8=6Eb&w*&R|6u9E1GU;ebqEGv8!q1 zU9Nqhpw&xtZXG&RTNW)l!>%L8QR+8w-$zQcH2@DO!3CAW`aXOwfM^FO^XrYsAT)`^ zrOMWy1zL*<Eq7ra;3SM?RtAbAOPeXG3pq+Zy5i@~;7%|Gu+1rY;W51w#W4TV^-7{V z-JQWZE2ccv4PYx?Q)B=8>jM9A7&fo>ij8cZ@iW<iiEDUbK-&lMEY_9kb^9{#ZM1H6 zkN+`ZXWo`=RaVoAilGXUFn^k)bmpmH=!tu|s$p8;+!}P%^mD<A=7pWfXHH_yfT?X- z_F+l(p-c8*LUzHHilmZl`%hg;dR=>X#&NFRQLf%`?qxy>@h0c}h(zOCsn<&KSqkO) zC(AB&>0?2{+*Jm5Iju|G2Fg?xOdEB~5e=-DT8bwFnMM`$uGNIVOTKk-xgYYsMt}Cj z`hJpYw4(T2|BAqEWs8|N&-JeV#()3DUw6^Ff)G)_Q`cAD9qy)i)wJCc!!ttkvNhZi z;r_kn$dSLJfLXf?i>D!2OJWvP5%G~h3fC)4@h0`YmyXqxz|(L*Q+Hk_{Z{Tf+3PnG zCnDvtN*jnTb+dJ}C3Zr)YUjP>Vv2gN(8J<4ev{GZshibTLyB6OQg~}*x^YIPpFd_W zb&xmxd~R;88XyP@BJT)IPLaEh;l<}1BWic6QIbEfNGQ?EZTv#T)fVfT>cY(5_7(XF z#LQo`y-Rowb~JodAzS&@uEc!5++}l<{%mrJmv9T`xdQJpA;fDQS_TvOu3yA|THSTh zwv_G~pH|y>ksphySk6Cd!fPJZy5{0puH!OcBi*SSa8=Y=K6(WImc+GSxKCew{mN_R zNk<^oHG3n~MniwvaMQ9nFCmnm)2GunTeO65pWWIfebc3OiKB{oVSAH0i!^fI{LC?H zjf7Q=)~*_axLl9-I(U)Xidz*RsgEf1^0CvFg3GGTuwZ+27DX{O2pcHTAM_;6)uU@z zynWI?)AChIygNZ5)kR$T?Q6t;Jc>69+D2Wt3`QCxs^6VH9yOUov%^>{8IK6uxM`t0 z%2jkxH0SLX5ZVkm&ee2@HD1C7<L3q^sL981axF@jSrN%s_3UARH7*w-1eUsF4@{`8 z=}Tb+7w1Zd0Z+B9;FkniDUFiKl-Rp?uR6jFf~e|UV(UlJ;g*W|%g7oCY*BKO{<JOp zXLVG<oeb|j1Fw0$%)51s8||9o+y-Qy_b#khzQ5ed(9c`8BLeg4+e@=!DoZOrKJJC6 zVRKDwUMDo9TRyLHVlR;h)VE9yAnap34s*;)-u%Q~6bD(6vYea3b9(9NqrO(J1ux2| zcy;8rt=l3odgZQh5Hpmb_9B(T1adb{FK#_1*}4jjNKQcd?q&IPEFJ4%H>S--?T^N9 z>Fn&7<%_32Ih8G($JZ~$RLfP6m#Uc0B5I$4Sg0l13pVz%Y|r+`D(-~#_}aey{e2q9 zh^e-RDT$~9klG_W5AmV84JwBiWD(_J_7JYq1L?H=htLx#2D|e57VONcX|#in&=M&h zyK(xm>_jhg8Zo(X%0Y}uEnmOV*CMr(IU&j6dV~~whU-!a(qA|4>N|7N_j1c;=H`=j zqvO+Zqk5{Z4Bt37GZ8;On~l6!7mg%c?~WAjTIEU(isD)bisJbj62<!v*zS6To?(ZA z_`2p6zcF`)+UvQV5_!EYNURt9>XeGO>hOfob__y$-KHmeS=3<l>YZnNigJub8$sl8 zU>vJ*43JIrbnd)|oY<{QrIlkZZzCOMmsB%0CGXppfAwfN<mT^Wmz8rGo`z^2UKz~_ z@b@??$~o&yPKp#ThJn)=aVJ^-5qjj$X^&!Nj4f|S=wPf)sn}PYU^MLOo=2ZxjqdxL zCwz^@be5U8%2ZZGmy9~lFRCe*hP!^u9rwU6&-ZDs)nuYQ9w&{KJ)ECFeeP^DYE{=( zXm!(;X%*4tZ8ci@)~dYpvDInm(F58jcU5iwcpb7KyT83rez?6U+A7o{UV;A_txMC^ zrpw(Hrc3D)t;_BcuFK$)pv(Uv+$#2j_Pl;)d!2lacddz-IV&4|&4Va<^%rsa$^%j6 z`T?=^S{yU@5EV0j9~CR%AOh26FACsQBA8$&W1EU!z$tmPFM}n$Ka6R4IE=-+$AJ0i zkO7NozYG&^KZ?p`T8ql3tU;2mq(SCM$u==Avq27Nk0f?rj|6gXkQTeJmj+26Z>ETt zYzDMexJqjlxXL|fpT;;To<g0JPUBOvZ)MRAy<<xb<S01DGe9T#w=!Q#Z>7_71>^bT ze0kn@;so6@1iszpzJM;+y?=p~NaM2iM)R>JKfMWjhUBu%W=QWBq00~yqe~N1pv$?7 zlg3o*`U-6Sei0flf9{EEze-euTqi0CKhPCzU&Rzf9aQAI%!ucqO^FvoPWR@HjO$73 z<g};%)gn#t0Ffp>qzDKMXUR!i9%4<>?m;G!4{URtXQ>KM#|v^JrVH|iXAAPYbLHe7 z6@6Kc#l6KA7@iq4W=sb}uQVJ`z3Z2>eYH+XMq~7*b_bNMT({7#T(@N&JTKmRr+aB; zFs+WQ$|YW*PqaSxU&TIjU1>gKU#UK9ToqhX?pN$dPnsSMPN?k-PBt9SO|;Lb<?D^9 z8Gm{14hMNVi%IfR<s`HLa?08`axz{NU}oMrFp#%54CpNkGkM+&uegdJ5ZrGf;JlUt zZeGbi1-u<iXuPFOti3Hwc)hiDlpbz|SRNvWT(8rhL{~ac&+BDq!Id1V?O}#--hPJZ za=~eTapCE(MXqnmwB%~yb@+?%47IoK%;JMzY2AaGhUayF2GvzXP5D8{Qnt?=$ymF+ z+Ei3y%AWZ0@|EEU#zVu2<b&&p=!5;O*t6%Yz;obZ?n}U<+;eVh=4;_nL53pjK|#FO zgPauAGm0LK4H|h9>CyySy{635m$>{%+aGOF6KJAlU8SF8l8Cdo(?iFIy~)`+CQ_ap zgXOW_4F^|8lPTlPy+GN(b<_Z*H%{&%nwcyOTZK|&%$EoQesH^DsoeR;9&u_PnX30a z{MbZ_PtgY7!C}+_Qud5Jz0_?#t5|w4uv6rTC8}t8sHiz|=0Xh|!Ok@Gnd%V+(qK`V z`s^gpb9=BowpKvkOV(WQh78!6COz-1O7#|dQR&H_ocEg<dru^Gul$k7xhOb|1}%Rs zh`iZX4NOAgk~0T3a0R2%++?ap8pwgkz^&BPE?4<|D@vr%YeZl<d85;HNr~S&*pCyd zL^L-!js6=-*m&|@$r~u(XByc|uHPG%*cn-K85=*qv^_t+JqyZ9fBLMEG1?fj{_Y(j z`G<G%(r_QK-+g|2@00C$-u)jB{hM#=V9KO#<7DN)Wa^-AZLROX<ig7IQ&t(I=)$V( zU~EhwBKDJ&^({eC-_bEbc~KTi0b3{JL!L1L?FZd6;5Q+rAD!9M-!vEe;}tW@?tYL% z6NE{uP5Yd_!OmD<O!AP>P;{T)q{d60NborbdNZ1)$Bs9p`}1j}g6-a)m;;2~J>#Pr zywg|32sV4i0;)_lV(+0Hu}GdqDe)}DEH%+sHog8mO<WRE`qf!~B??{;7oI0=R?N^z z^B0Bb{B)xY4?C}J-L;2K!=`ws8&GcmClZrVYXE+s)hsEvhN6<N&F!&?<R)t$-<d#f zhN$`*o$55(inJ$LHN#kX^-b;%+Yx5tmrC6P7fGhszWqTBoYuD>H$sKnkV_=pSd6YD z0P};?3|n4W@qR=w#p8y2&dN^@Naiy5{PB$hw)lsf3Xl1G;T+7*P(A;LFITK*4(a}R zvW@DdXfMYQtt+Euh>K`Bek!Na$-GjFM(4M3>PB!cQZP&QFGRT~x8iT1#_%-3Y{J3% z@Fhs;EJg(Btfls3y_F-;Z<I0l{tQ+~UP;ij^bF{%k<3iqzS*Uwx+e|*-<PkP#B!4* z`%i+5<#w`)yY$7~squ2vf$lU`Z!&$#qe#CpO>+#D!ceL0+Z9Z)q+b!x>RF%fk|zYH zX-?G`-YL2?kCh025Z${acx>mz#J{^#EF@n;zFfLG>IaW!hMA#7{O&_C!@I`)?6&Nh zxBa>H7`rHqO6#U=_oyNDul@xLdp@17?%MT;nN~);LV4@G^8p`@#iT8<ynHKQ&9+Fs zW@GN}JacmQ*5W#SCo3}Hv(l$M>2E@0=>&?_U)Z>2KUYj1d@u9<M>n2?jPVSv-wQ<6 zV`DqY=6`@EVdM#YV*LB(1EaslG9xzmv?#hlMc9{dN<8n3))(PGr9Ffx_K#D<9#hU& zCGIFiMEDAv7zz!{Ww^`*xK+6c(F%HN2x$blHE|y~Y1sKhYmT>D1I8gOkbnMjv#$3_ zhx%z&MNF*#sT!||TvS(n;%@7WZ_^L^kIu+<@c%)Nu{D5Y>%+TuWbp6)f1ro!f1yXm zmPizvAFIIr_#_`7Ga!CH7aU!;%n^y0M@d6dZrGf!RiM-CT{LA@ot6ym$+@sB@>%5x zZ-DbNVzjCR-&y#b!XMAsNUTp%4-O|yyDLqeChV-f&(Dvf?*=MalY*c<#1}(IC_N~Q zYveW3LkUUoNerxXtez?JNHwlWIwm)aHFQJeK+jVO)k$^f&EyW{s~93idgLK3pD_kW zrUUpqn{SVAD!MnSQt_(2)wilVeu|b;-ow{RW;&TMf^E<8;+2P@HhS?kee&}I=gsMl zP^1~8TX;ap%Xdn<1qc4=g=5>2%<m1JxkKu0-#u@Q*Bk_}spiW&LL)qkw~K$zT=C&3 zdje5#`g>C}C2%KXt2_H(cPknCD!=}gWTWEn_%&lSwNWvrFsYLc@@pJOR%ls>`yD#F zJ1nlE605k*+n$UyBsOYvYqS)uQ?^vB^X;&gZh8=sniZ}E2h(;V2uEZ^1_!60$ONMk z*w}X(G!Bm$%>5%lb+s4&BRH5iShB4mEatPS&VB*w=JUHBV@t>1ai63{p@o+!Qf$?z zYB-WAQ6Q2pnJ=2hvE=I~@~K|0Y|SCgvGew=x^FUf^O;ikxq5AM>ibyl*>>5_%6sIg zYCTv!9RXgRD^}(m9#&N(+?Ruqkhra?y@iTeYurm_2pRKM0<O$9)z8OvGa8~Sk0Y0@ z*kQ{g<B^f9i9_q7WEZ6Ec|Uf|&hJO6JC@qfnN&V1y0_^~M#XIgv-#LHeH2mZ;IgUz z0f4sUJxTo9_?ZHubfOTHjq82;Y4V;^RZ@1Zjb6|=NP&oY!hQ-(CV7GC;Rm|;ZTS&m zt~fnsp@`p=kn0<F2l|}!%@6;dObf)VN#u!}&7xKx{2Av411scj;x4dzJkEts6rNDA zdcs%~dzK8s`!_1MFbu&$JTOTlD82?#fq@zJ75*f)Y;T`}8yRefssG6_P?`&VPw!if zU{CD}rO9=Lo$M>&<pU@6-l~DdE1KHXX;t~_@8p;7x_RuT<_z4OmRp2~Ih^0l9|5?* zK1>SO*h;LXK3~19z?9DgMt?Y{(L+FMWgqd*5qjvSP4?4#N$x)V2aXavs!Hr|@7_rw z{QrO>+y4PaEb%uuhTx|x{}TFujkKIkGl#J8aZ(5?d8R6D%E{ip=FC5koePV#PglGq z1)IzVwLP<}w)h{M9N)EV?G>EnHK}r|Yg&>r29oCf66=2u>9TwB@^pHM_s(QoLZ29K zBI!qhMkHBAm#DUZ3v`~X=0gpENzG6>Gaayb;E2^EgS8oU#8bnBX2=+NPhs;pJP_TP znf*KS{tc-4+jFHMlJ)my9do3`9-*R>rikNg)41e<1EPi5b^i{Bo3#u6H@Z)BXEhvL z<4nThY0JllP~c@#^M~&3mA{x=2NrtM4S&(&&bI>4Xbf#CD0yA;##>e}Lf!zGHK4eE z;QYR1=W!s87x)>w|5Hjbm~#U17Tt!uW;~Oq!iz1^mKJ6jUzrqowsp91><Yv#R*%K_ zG*{vh9yc^yYT6FgPQ{wEL-}vhcMOoJ>?XQsyv)}PL7M6vYLZ^oS%IR+#=%I!@%o5^ zxNZ7{EK5dr30REX48c6zNU97=u;PwEx}J@tqg2BwSFw;{g5nbs@!$cdWA(^$>86Tp z*;_W(!4&PIMe;-~9BoPIl7>^s@S>|~i-qH`<<!BTOv8=}5#_A=-xP-F#AWY!Vja2L zTXqY>sM2R=874um6yL%v9-O!VUF*D)tv!---*!jrq&Z)^I1C9R_j<8e73oh->d&2+ zU)bO8X0CiFYV=gP7V^vTw47qhhjag~%7GxI_Nc86;LdNZ_8LOUnN~9@$>S)R>|?BY z^r(~+GZz2G{R`>?V4FaH<3z{2os)hj`xw%;gZQBJ2Nb*up8N6<b@o$Wf%$d#3?f+i zJ`6+Tg$iYxNmOEsl@%lSQgA~)5Cf_Ia|lf?c`glc=r4uJ@8ODEgk-|&>VZ|H8!x7x z3+z8u`u-ev!O6Ly3twzs4}azb91BL*y#5P+CY(LuRIhwvvU?#Sok+*3O-x;*ZxS0a zdogU!_+`<1Y7F)_FgUuq4M>ToG<wD2ta{i_0|?)-!7lIq7$iGvUPbYKditN>G6h0+ z;NHL``hVT)0RIms#sAvnT3SE-!tI$96sU2%<-1k>fX+a1r8`N)|Ks<Vzhohp?8k2j zM2h#FV6cut<*!dP{?vs(-;0VWl+Jamc&Z(>KAGIyxTg;~%DsDiz4gBLVa-UJU!Lcv z;cajY9euj&=zbTybJ2Xw+WPxJL-$Esa53!lz_j@qN0<4^k&l9Vwk%^8e$qho@AYNt zT1^silD63a9*gc!9h1HTO--V^#O8LYW=}O8mvf$+URlNZlnSVPC)|?DnW13D;ebb0 zXS9fj%lUhO&BoNQ%`+~O)5L7k_4Ux|fDs(sQXhl0!(mG6m{NNLot1udJo3`XOat_R zL|0<^)M(uWz?-zxvt<LgWiB$ThV-|BP7JHV`fUK7NlT+!?*X1rzPEq%0Cd**-eLZ( zB604z45cU*_tgIP3H+T!R8YR2E%OBa?jlntvC#!FWEa}f(Zu9%KnVy*;vXtX<i18K z(A}Q0O!Y`pvb8&q0oby*r}XoJR*WycLT;g69b3WxQkMIqekzcF@dW{76zbI})xI^Q zmimyaw90&+(2oIFWw}r9M+f<AISASxm;&0F@8kPzK|Z@nf?U^B1uq*@tDqPC3nmP> zq;FV1cTCMvC!qMs-FEf^!~cwCx@nlONNap#;gdc>*$iSka#;u}@`@25Um*FQWES(0 zTzE)ADP@dOSrP?{q{&3GBoV+GT5C9wF8K*S0(CN&fJ)*4bf8X#6KRs@0DkC|!9<EA zDS!r~2+d`YG>z?~fJov(tN`2~2j~{d{$MUC<OPJlOwiX#`md-HbOA-tpO=?K-Bf;G z5X?%@X+!}L0^}rxn*f9R)fxFBl|(@>R?iOwU~ZMJB1Ku5wJ8x<nT;tUfKn33*nu1Z zNdg%<03krYBs7i{+GzxUXn<&whD?AV{n`trrOqWr4oDF9r3EiphP5dnSrvN=i~?NN zA``{#+=PBifHX99z=!~{t-Z-6n>MnA0x$(~hxN~cRGGPZty3)tccCz;Nv>5kM&_RB ze04K0LH?d4m_NU961yO2<Gqp<Ymak2z704gU)>n|HQ&q}oJmtC#i>M*l$}QNl#g!( zp3mo+$97H09>G>iΜ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�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%0DO|IyYAx>U+a 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�_ua4gCTlu>J3eCE)| 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 literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/lib/antlr-runtime-3.1.3.jar b/antlr-3.1.3/lib/antlr-runtime-3.1.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..b0a9ea69f5c29097145a48c26e127972920db440 GIT binary patch literal 150774 zcmaI71F&e#k|lg>+qP}nwr$(@++*9m$F^<Twr%6Tue;};{$}3vj@pQ*RZ+P!a%E*9 z6{LYdpaA}LJ!Uv^{l~|DJs|(SWkpp4X(i>v=oS781_AK!7iQ`Gf^7D;+UM_$^50>y zf^w2#qRJ|CvSJUilM^!1v~+W@(zI05lQRuU42#UWM@}?S)1x%fv_cTzhlOfMXw<zV z9&K5XO32bm$}ZVdRVX;nNQul!s6NOON)LZ)q?nzhdiO!YMMX&wexvBtB-zBBnR$WT zfgN}1bm{>7FS!5!X8sTHLH^2R?_~b}Oa6Z&{`K4cLKxb)*f{+UIHZ5zoLuc(ENxBy z2Rz2V#haKKx&BYmp#R%ewwBJu|3g>*zLATQ>Hn4w;y*Mq?xCOn4-5cM1quK_{%?B{ zlv9yW60@{1RsP%D(3Z~F#?aY0SY<;FSrJ9I<jQ571En%x5gPqYskoPd$_fyXnyOe( z8FF}HVinF*CY^Di52L4-|4tS8PdJ9}!eA^@HM266ML7M*rLWml*K&6w|1aNfs9mCK zYmO*LSWFqWIi@0S!68vtsNzFM$sto%N}00Oe8GW6o@%K}R!iL*BMU(-W-2q)Nyx(G ztoAM&+f|_SdFhKL(`DKgGd?Jvk*X;O5_8-YNIQtfqwg=CW~w*}FIBLYB%Bq!?M)BE z59;Meue9k3jVIL!_re`78ITJ(VS~oQH`WEGz;^rhOuJp1)#LtqsWP8XtF+B#w$Uou z?y}Vypb=+mDvCWHaL8=YBAb?d)wB4zYfaVPtqZrHav}~R%&D8|nSz5V%~j=BiSm_@ zg&Po*!Li{X4=MdaNY0g#S8Kjuyq*x()oXpk_6s$QT3#&d%VlL+LGgEkpQ^8gFtc-^ zf}WEX903JfA&eAxH>N52AFi8&0ljs=B#KwRK__0d?<vk(qeXGu9n?p7vli-tJb%ak z#DqEX03fTjM{><C-{$cux-pZJCs%IR(Q3eNeE^A7F9gA*-3ypIv?i-k*Mb<$L^QsQ z!zwt<L>On~6SOFmdBb88e;S&+P7sN?rK<(7ZA4(i%w>vaq2*zD&IP?nFoyu<XuaAH zg!9xlz7u1_9DpEbF=h9Tsf{ZeuJ@^}m&jnBY+17)GT&>5VZYtkl6)V|FhHg4a)#5T zo%RLCnR7%~KRh;j6tap?H^(}9q$--crR<|~{{*sdE94wzO3=yM2>Y^UuL?@N>jodb zx|_J=@s5#=WOAq|Y!l<Q$)17^ol5&CHqY9cpdKK%x5RG?$*Zl2-FUm8FV2pa@9-tK zz?r5{O8eq%D{6ukdg}d2v;5Z7EpX4aP5<+#8O3B4vB48cgw_^kx;bQAeW1LpYF9|p zGf5=VYyeV%Ipee*UAqxos~s)D?1f?;c0C}RHN;szO}G+)yWgB!lDfH4%NU~)M9kzl zVN*Z*8tMi(c3X!MF-I&Q9k5F#vG{8Lzr4+Va%!iey~ZC10KoAtrzrm4oRYM2aCP|y zsS^6^kpxkOdnh|-bS<pQ7KNl$rBL1eY>0I&7Dq2(F&2^)mEE-l)5iSXGSiH@`(e!K zlE@DihyPX_W*=x5g^C~OOdnz2x#?p6xOi#72XL#c5*Ak+p<x?xlBaoLO>!wED#)i{ z3IS6V4kqj#(Z#!D9+Wy_20JQSal$}5-*k=n*m54>Z<^swl3eL3-r{WVrJFWXg518x z6Rx{{vz>4YjIn?7W#82u@pAIf;xB7U{mMgpjoI>@tW_%SY1r97d#Rk`2T?mB>WfP+ zHJFX%W67TI_qLN4PA24DD<{)Fy^B@Bu3*GSG#xM*aoa#MZQV#=CBbPqYdR&#=qff~ zC}AM)P%SPk88z-aVXl;Gcivy69Vr1iK3n9v)Yswg6K*bL@9f@j$#K3zOTP=Zhpa(K zkO(IwPwCWHw)9bE6pE8GghmtI`>7ePWfWy;{HV~1@UO{FElfT4aEqks!BSndj>bcB zKVx1Z^mAmG1FLd&@e+tvREY*$MPHvZ$WhBCQV0r=rJ1E;McD&Gql5}%p$zH+G*YU- zB*Qi^+sqf~tZ&r78yAAE)9#n8AD`9x(@JA&AKXk&iC&P#Fv)r!9sQwp>Zkg?jd@PA zBXUaZMm?JFt}jGKvM3y2mlg>{g^aPm(vXc9g2(t6_Qx32dIjSx?k+>DSV2Y!9i$8{ zFG?6s$%lk+SOH5g0g(igjmQlM9ebcEv{gPSQkiAQ*ep3$;#cVV@FW%Rp!?EHTH**` zqwdmZx%FF(gidl|qWa6IQSLh*!66}(hnOku*uCEDAahW+?1BO)3Dsg06l;Ny?E8Mb zlT|T|CSlFm?X|@n=-AFH@IS4XRc)J4;_t{X^Vf<g|KC=uWNK()>h#~uI9l0O9$6E` z&yIT`o{Jz%)Ui+0C$LQEE?8HPQA5ytp|@DnC`lJ{9Wp8fGfNKjv-uM~@vC;sk4$q8 zqu-C^PP}ZUOWDd}%_Q+T$9cx{+IiaZczZ^l?-~GOIGbg@HAxH_?2u`-e@Kcra>7!l zPXW4t^GuhO!Dcr@z}wMj|GU9Ewz!xqaz^SoQ4-J)y73se2aVH@<wWJe4r!KP)>3|> z;aS9xp2v0Lq02&tfRllPJntwlg4&^S_wCxn*K`inJbQ?Wcm!H-t!$d}5BW=U9vZDT z>u=~_0-f<X9oETUSN?mo&CS6_n?D*Z*%8<&`LnKS!>fG)du<QnW1fO^(@|pyM29#Z z$UtXfP4yjEo>_yvuD_AN;Wo<mGG0QmP2kK_+mnl^-;UaU@(UfbSRJT<LT<XNIpT@q zJTg)@-XnO1&D1p8P!<R3xsS#WJK$iLNTAa##6xwa(@qm7U>~ttEsa3<F<;jPX`?bQ z0xkF1xIm`A;Df)hhdNK_ukyLv$(zhGupH|>a@>+DxxSUE8}%Y}_O-JZT$U&L&fEQ$ zW+eg5&~iJDEGGF#3J0w>s41<3q)3c+Eps6BSo-?C+OQUNvVuEv1c0_Upc2umRj<}t z`J2sa7D~KyVws(?)n?C^y~AWd&ki$+LBTwoX|wXohY3t(MX4d>kO(2Kk%{Yyldoob zcf3iSA9M_*g(FI+huJ&|-6LS3vcx{6{1i5MVXuLVCC7|Rz2VI9j#pPuob{t@m`boG z=PyjN2fMM%u~?5W7gT;w{9V0T;y(3?Wb3vG_Q}jK6q744ei?wB4J8-85dVzvvVOQ( zM}(@}Loj2n$<MNRZ};!IxO*9M+dbJ_+~kppzb-I)-2^<rH)i)Z=xO?TYU9gFvae-J zmCu6vbzP&xnjEE&H^*W9nX-T;nML~Lx7Ezl-h2xu<_0bP9l}|jWp}V6>z33fU0IjO z+NsEv;}hd}3u);i$TeK{psV)>QZLJUl4qB_p7VhI^h6!2pGAKYhPcOxR%t;q=?(%9 zFVP#%^;7KF^Yiykasa#`!p@NNMl6bE1c!JN%e9$9P7Ym@<$1^4qI*Hv%`oA+o<f)Y zC)hvf$f0r=$OZ-ga0>H3((x}5E$z(zK}S_d2NYA3Z!acjW)?{ZNewa)gx~3s1_BB& zfGi+$@rJSh!W#2qEMvVibseFyfE7viCZ4yuA<(V6zm;ke6#TW+%8t~I`U1hL=BaMB zc`9};u3bV51>hgPi*|mxUViO(|M>j8M9%<L4yHq(<<UoZ*UHQEq<tB|iCDZ7S@a2N z;w7y4PqMr*P&E8OU_zV}*l{`KpfTeJiia@c;$CAg{}_CXtW%5~-77G1GP*Z{B18f8 zRl&)D>VxQm=~LRBu}CTIUD>G;puA1pw@><Lvk_FEWnjt2<c=^~9!G;N6I$PfIbl6G zCG%axQbb5-vrB_IUl4CJ)~Yu#bslqBZsbB0amui?ZNd%Hn7t1;Z9Qu2cc>p>st-2g z0$VYK*0c@`$k6bC*X@YJY+sgawJrM0vwO4(<os}Ol$f}hi>j>LlI>wlF#Q}l%V*45 zgi@Q9z$ywzp1K&Tw(UC8l|#|eonTf|zI=uuu^`aKppB0=sO;e;#eRTtJG~0+2&qg+ zxgbL}E1xyRSeNv|ZZBKlW>KL@BW+8g-x|^}Dr;p(OLnb+&6ty4ec5l`naoKD3TF0W zrk&b%QcNBsO-po)<$x3o@yjxhgD@*O#N3>9ZZ|_BPRlh}TXZ!Fotn?H+>sS@rb&)a zH`YaBC<K$KkQfslXg`A39Mp72-4iZ8F;sgg#iUh=z~tFcroj|`XVZQd)>wK)95HuR zQ?comtvGTL5k;a_q3JV1l^z-#92`n=kQwUIDBS00SJ@=@zNpm`1+s-QlT|ICO;0j` zAXmv6q(sFQtV8=IzoE(*W~N#P^@7Gzjz?<Hlp$BEJ*KuNJ<Cz6gPAD1_$eLHCTNDo zn+q)!pV+!rV%VY@pQjc1MMKwxJ$V*vXgRvB-4T~ykuD>;#QmG=;N#U*qr8>UO**)B zhqCn%XaW}c&4vbmQW(RJFdIHopQ2@i^tyEs*Z3O4T^!0N_Uc&+(Tju4NzBnw-Khzk zZ`!{t+*$#N_28ED^Pn_7U0-IGivQh#|B4615}$OJski~CNh4U(1Hrj;lFCmJm!NVO z*sYbMhf~lExo@N{TreQK88T>?QFi#2gGd<=3j&r$up`*O(yV<6%+3w2qnAm0Ad|u^ zEOZmW_pxkG<0J^-GlgoG+tQu!1J7*7I*{HW#&g$|Z7PEIg1}K|Mk}`ZicVM7y`&ry zaNTeHD{L3w58ORl=(vT|y~X)s?+g>_TQeV{*d?O~osnz4J&fOve-Oq&_N$?*?;$SB zs9*GD$6edw*gSi(2(?h7a9Rw^z**-KB9(j6&b`g*T)oM%_gHQGmWiGTlaROgqbrCN zo%oFL@<Rj>qzL$D`UAu(oje`M67=<O<Ji<vYL`e#oI@|k6PolX1}5ip&oVMiRw7OL zLgh+B<>JYB<Mr*~X)jm=ffoN|QS&lwi2)JU?=xk`fM-)ZiUCM34ng=6M3*)WNpDyX zk`t-4)bUqHk58LQFAgQo*Q4^#j;?`U?T0xBhELdRJF=6f9U<$ErS%0m;@R-tqKp1v zSPJu-DH7+di`1?DZS0JR;8-U5w$7XMe-zdBJ#ia+UV)ewY@M1MS;j}XEED2IH?k0F z94Au@sot6{p>|Q1rz$Q}R~Yc^Zyh=1e{UBe*fV~$tO24k`oAy)yl4vJD-26}py8*) z`%QN_WDWI%-vr+dwrq60W40)6kglAX<ZB~e8Czua;$UVLmUFU68!GR&CEL%M9={<L z_)cQ=^xwCS-@g@BW^VAVZQQledeicfqUUB$m<&`oc5u?TOy=}<mI)w!Q2B^4C>EQp zE-)SGQe0VS=7uRziZ@Ks)(BQ*FT$$zm-s;PQ5TeNOE>1+<S6HA^BfM?Ww(fl4!NhB zsbFnh*G7hskRfzE&gdr}`iy1u82$2{YTaR)c2Bwstxv1cn^b!aKxUpwT@G&x#7M9m zkZpXF<QLb@$NcGKo$OIkJm613+}<^0GsujlY`D69Xe+Q<SX5z~l2^?%GhZ6`9v|RW z=k1(0a2i<5>^m=Cd_&K9dxE<eR!S|%IoJ4>s@w^C`oOLA(yiQDRX$RxN=Ernd{XkZ zts(yb{pa9g@%~Xp@^|@Sl@$Ph?BB+MLWa(!N~Xs4=604|rcVF4NKmB(>7lap#DCJ2 zKAA9rCP6?FkEkHTL>MrRM1VmMFTvDD;t$0JGZq*nW41pD6287ZMAz)Lu+FxwRj0M6 zWK9c3S><Y3w4|kN&0f(|<yN;;-RxF(|C9Z(-RX%L;{Q|Qhi`w~b(7=#%bfpZXk`0! z99X1LArqnS;>`x19xh?n9Q>3^52@Fpj3;HRKoD=@s7?rv`e+Vguv>M=2abKrxJhOO z<jhEqy1)#xY4kuRy*g36f@eB$#0$R#)DkS0Hr9<_{IErM+XiC(%cnb*`)d<5PjmC? zB-(EqWzeCav!{0k{rxo`U@B2v`?Hf3ARyBBGX)^nv}|N#14xB_p!CxYeYuP8`k~?M z0M~E(?7)wI1gJ5I{_d_CfHrlfH5VMHF#*|6Zu}-Mm;T9FDy<|~cz8ybX-!u~{nqq; z_29&iU;p}q`qQT<cL(dR<xbVluOoM7@5KH6P1moRtM}&k1>~*klTUGum8kdQ=nl|R zhdLI1{6LuRySDV)X6{1V<WW(xTduHMPYgeC1or;b10mrT5rk$9e83y|kQ1?Bcf9@m zT}eQrw2Bw*uk{gja7w~N-OqG_oqq2xp9+G{N*TL{hbyKx9mbmj?nB3t%Wi40+?P8) z{9l9;>Jj3bxP>ia@91xMn7)!}JJj_)Yct>`PPw__Up@+MoAj~VqKCqM-w_hNtAEXW zr{?VqkpI`#4E*~mAwK^kOIuf4S3!xhv9`0kw6eAKgBF>cX+|wsx`cUt_++t#&*)+- z9`8HYLel1Tbo^6%%oL)hV^Ucs>-_rG`r`7!{M_<#U0X>-hvn3JPW5tRhHI-UzVg}n zaY}Kt?H2DA?nNdsuk|vkDAAPdeL`Bqa#OYL22Q*t{X(O}1L&IXd8vf5H?y+j2I<_^ z+`9)$T|+l@Vg#uho%ubG(XdIzPKwM`CHT5WIUj4%=pfkSyIcc%8#7|Zri|;8xU!jk zstu^@T!aQuilxbX#fiPqeWm2{?}5T*js7SYSQ~cbt+^{lWjL8<v4hO~vb4!7QTby2 z6tfK7-Oi=C#&m9E@Zbu0tYm<@;>pJJ-_OPv@FL7zUoy7A8jWO33jUb58rxbBVl)e; zW+^l7WfjIBq-OSFi>T5taC>3pj%`NzWXwDemXU5G2X}|2GR(2R5OhR;2U83HZzSH; zr8vdFvE7`pf-^IEB*)?#-c#on4>BlQ_z;S+FMu0aiq2+ir?tXxPjz1((lPhBoI|p( z{16q_<G6a$WQSa=4#FNF#}?>1RIS@`hSW;6P>4dBzlxv4wMsdT<H!^<O_ixI4XJR) zFo&t(JW+UJK9b7<JUtH02i~35el)q-7(b;L9~@5+K$?kkOStp~ZOGI1!Z<GOgeE@z zev}KElUqn=-I6IO;3gCsk(^NUfBOtLft4IxK{4PSX5WN@;!uK^Juro7ac(Ue2!2_& z`!(q{BS7{W`Fx~AD%}hueMA-l6;Het2e)%ZR*C)kSb{0BMSq9TQCA`_#e&A}*;YU* z;)#ef+L0b(Nh%tbyFCOs{S?o1zftN>DJpV<n7+B#hs<k#M56n%5LgbFUy54rnbt%L zp*3N(mA)Zcl#IHc4pL_*K;qPIjhulLHS}9ykpOy7K(|Pbi*1*64m%G^$}Ei9d7D&| zpZ%-jX^s2^8F+F9XkfE^dhVR<OdNq{Hq>=F=!x3=vP!zcDLFsBB{C7wnKbX(Gzs7_ zJLUN#)fz*g%e5FNiz7yg;_~-=$8@<UX;+&uz?Tf~{4S;LIIJfbCj`*}H4SMh&Ny_s z(Vsezbs0jnbTgFAlC<I<_6)y7(|VNe7Bh-uCggNA%Cxoq=39{9a)g?(UDK0fn#{=` zu~K&J&yqB6Fvfb?*(#{cxkxV_76UsF&rgzwvtk>nrqQ3DC*&xXr7IBd(D^S~w@gLV zu-wQXcLr4(%o$o<Zj==!3*F5Q);erEs&k>-r4HyW$)>7ILI|B5G->F$!afVA=~gm4 z*^(-(y2)(d_7CN;iNZyCe!JgJ&J|b<&?Rmq`CVqtn>hab;qIs=(fb)rTEgf^_E1I= z`CQKgmVTne%FS83B4Z^Lby<D)ba{5n?wPgEjV^tr@=f*3<b^-VqJl@BK~F(8dd(ZZ z=g;3ju>+7Ux!F;1F~W+q1neQ1s@e?_&~kLg{;1S+!CsqoCDL_p>7N3f(<yz2ZFRe( zR1Y@$b#TT-=~hp|+p4xSOVvRYCh0$>d&do$z(f}@Jqs~JPZkZYaxMj<%h_J5=zb+x z;7o6^cMAFx&saSH!C@M}lq$=D{@S!qvdW<-lqzHM9je=15s63WK#|WSu#1Ho4<;>v zq5(*khk=}%<wBz{tQt86;oPBzp<O~B*&Lg$X>}cSCA7eluz{?K>N=r8s0P~-Yhj+^ z9=nJUY?(KQ{RZ1IxMe@12jizIP{PEGpKCe1v-O+ITRF|;^V{6LxkU#1m1@U+YX2x2 zn0t7G`N;Iuw|n!T4EEz+g2j_<j`0ZlUM$F8U=HgQg(p5Xxzd0BM*{~pqEG$-es7;J z@Yf(S>^o|g!ELN38H;<pENN7?5k(z!d?(GE#jX4)7>J~^c%)RrtWLiST#>NUACAM4 z&nUr}xtTu)amm5INmUdKLA@2)=rk_~?t}9CAIu-2A0x<j(ty_dAI8N(a?WL+N~<eS zJbI(26o7890ZufrP^<VxT;A(wh{t5ls~1sbT0N$uNQ9ShsZgTLCsl~3bi*Z5McH38 z)TZWCd|Ex_C#Oy?lRVE9V75`q^=b|JKGzj^(s5v(hTi?@kd+*S=LQ+7uNCqleF2Tp z?HUnn={g8)Lk17Q9V)z$x7-D-aceG`k@=@N1D}aJLn>u(uqLl<Aao6HXO6O;msMAB z#UDbpW~5JfrW|1H7+zDEK2UkG^z+PXEkSu25o^?Tb3eiM8ns)<d_MF0dX9GtOart8 zV<!Mv6GH5AVt-lR-n^3H|7`E_OH_8sIGpYf1Dv@dCDkk_2I?iuQ9p{axQtNGg7x&{ z1^$d?2!@_jNML`G2jUfm!n|Yg8qD^b?$ke<2mbW`Vtuv$ERX%MyX7ZgDnTpF07HkI zE^CunO_CA~En>p>#3FY8oY?&Z?Fvais}P5_8i$7QiSM_y`!jwa0Hj#4KeWsKS}IR0 zY|Lk6kpba_eIHqDjYpDnut|oX!wGYdf998*UxK5|?~|d<fr^;{AH_LXf|Ze5lK<fJ z4K4WvAu1Z9K!Ym<Gj#9=cMQcwn@*zS#8!s5Wt{I-f};`Fu4<EvtVtvVmNpL*wkl0u zs7Qp}AOJDx2M9{uqNC!u24!Hoy8SgRD1<(V_N!09tF&c><--JtYtEdWh3d_;*g%Y8 zagM0z=~6=29$DrERs0%juF+Mp!MZRW&l#F^GhvlfcAUJ|hO<~oElN2NQN~tQ4Ls=m zrXkbV0<L_Uu73=hMJU5ZOOr>hflDt|D+#E1tDlXFBMdsHeJy9O1ir(AHg(;GU6LVo zlfGVk#XqsIlFY)`NM;6p4|*G=0o}-cc>PGSR6gHW!BjiMQ9;%rL76=t(uRb5?5fd~ zr#wNA1q?gE@(8*roK5r~QBIjrk=S)DEo%n2zhttHqdlpZ11qHnG|3}DKWVcvbO94N zCT{>dTaP!Ta>u`_4Zctrng;kHZ*m{<>5nRBxo?BI0q}k|Hb}KjBh=RRu-^mE1Bf@& zi!)#{r&nTNSY`$g7|kr0R&=R8U6<31zl*V!YZFCFVJGPXo7zQbyT{2fVXn(b?x~Uz z<Fs{<3tIFLzAtCS<KwYL@ec>S#pQ)$NBWukv!;mXDOCQQ3!b2wIzbx8GZSEe_y<CC zPNP-RQ?^qg4emwPw5?ZvT4w-`dw_u>#24d-J(W|O<^FeZh5fxWGy{iZikA|GNAioO zT+zj;7ty^Ur*D)UL2;~c@f<nBPoXtmz*}_nn{3*zan>J}WA={Y+`dn=^^3{SQDR%3 zVO9;{pV*TV25ng`F_A=TIHVOEva9~U!X5D(ddhNN4>^)I=^3ZlnmozIgzMhPT8mS; zcIhw4Q?~ccsT(2%%U4=tzb5h0RkJlUW$qAbOwT(V(CU-8+>Bmp*yMSwp{~h&1LxFu z0M58O?7z~sw_WgLPTM28gpE57@2dJu~G6F%?jmS4cn_6quh1;8qw6jSB3q41kh z%2$S<?z&T*H>b{=qmcw`iqtZ$cmyqgPTW&@5W%H^<(9zNg4vBp?F{E3SnU?rwoZeV zc?)OI<2?SCrB`<EMBCvUu|kOX2&I-uQDE{_CkV2$rT1v%mAoRz@i;n0;T%Uf-ZX`M znU?ucJkLh9rdt%UR<{P11o{F)9?!s@QBtQ!dE20ij(K=_T2k|CED!^FP|Agb`eJ|h zCi)LB{zPB@p{M+`b)hGjTRfd`0SLKOWZn`lh}$Dj<6U*-|HjR)Ssh-t;U0SQp`=-J zqM`$2oMTw@=3Mj!RdFwxATH)MDBdv8cvt#}gS$kO&sMsaI-fpS3w3_xzKlfqu0WZH zYg#kp9E!J(pv9L?wPx<Y?f_jszeT)1{}{+o%-|7HWi4PKMGEPcUZ=J8uqW#2%))A> z4fADJs_WXhSi2EY78c~$0qwp4thYw6xG5=n1O&NmVhQDgxY(44hPZb|SamP`!t10j zs-e!7J~gYWajUISLqoi@Sg^gM<W{kw2@@rDYt-@Z2g<Q^lkga%LNLertYI;aOBWE^ z#SHR|G~B|hwSjQUh95eCQ9d9j`xAPGXo|6Ub@fow_qH$H#JZ<Q6}cGXIQR$#pD+bu z65?cGZzc(fccd^ssaTFvRPGb&fxv(l5P&xf7~8tpu*}(tM(83^mZv5-E8vLb3yrA& zu8Zo6P3$;1a_R`3LMIjEphdi!g;eGnW)`g=eig`4(Wi`Lb(<orT4L3rP;25A=#GzR z*i>8EXFWid4&2BZ;CW4vO~#Z($K*kaN%ZmBV!&x1L}b88KT^+?YuXff^hpz%fMuxX z?Qcc9jW&Ya%V^^WbHcHF<Xq|OsKbyV&o|7vtHCdH(O1Veau?+jW8TU^r;@@Y5Gi&x z$>a7&wVKT;RATm$qbmUAg_Mcb!A48jct&TV#U*48xH=Cub62QoW^4(77D)%%euTDl zkGxRjaEc|+;uJIuvNevQThL{njF4?CpJ7tJE~b?#T^~Cy#FHDW&lf6m=j?I)01>M{ zOY=^e@Dr&b-}5KB)nDJg!X4i3fb0wK?A0{rgnHEDSF!uNe&31x?TI?#<S+5sFJQrE zETFU8+qIwBg-89(*4X)rFuH6^c1zfoU)d9@1FDw?3w8A|k)FKRn`6oz2<S@_x6fdk zBK*M}r&T(Av4$teK2ZEq4X>DRmRK{(ojl^q9@T$WKP;(RwM19Q70;v<;(LVU39QBy zN_rw+?|>exyb`)Yn=q6To7@zteDSSA8?12vhLj(H?{7g|;Fi~`BrN0?;Om~Fu)ZLk z+Cc6;jo-ruTbI+KO`|GFh={|jqC3}_Q2XX9K9h3lkSB<eEk?_)B+NX+b7owgsQgM! zzhT(0v{Q~vuDZa~f-@^|i;fe}tbOQ)86J5(D^uI+cW}rdryT2doE-oz;zj_q>Yo6t zwz!JjP~w6y_WL6!pp&vzy6MrOE{<fL<PaJ)`IhnMEa}6el)%BTrKVfJvPpHBMv>f% ztu;RDH}c2&c(Z~0J5qc$Wrj9|ihSr)Z#^5MHY{1iEqL7(*zFyX2LZ*i06lK$2|{As zdP85z>+h+(`p_<Mw7tK*Es24wmFdjEO|#keCuQka-*CJAOr;eUA|I_YH)P#@>l&@i zgR|P0xzzsF`7oxHlxCMg7rAY%Ek+wUAc|@}gv*6}9^_?7|0s=epT*ghT-ua3jF}_q z4nljNE6LdB0AEBZ3853rlL9OgL-<r%(n`58W1H1F5_wJKo_7kD*4-YCY3Xt?>X!i& ziuI{(fSgf?7`evsO=>>&-dCnOCklN(0$R*5E^9InJXb%BWqU#{kITPk+Q>`}Ju~vy z)Fw)f<Soj{w1{uoRz4RDFHKactuhK4AMa8dU~XD;W`4UUBy3-IcG;ODzqrp(vL$+J zl4Q}$lwoe9WKpLsz_R6{ogKFfSCgb}q_XPoaBf;anHBR-kF@$GPaBFfJEd7ti6qp< z6>cU<{RX`~QoB=M8kH?JZ6@Ts2ZyXUI(BkEn46E%D@4;3cL_qnE!IR=TgEHA(g+M( zn+6A0PVQbgpYB?AYJ0&u^7kcXX(?{rB#v&O40giPNb-iChhtDQS@lfokGPXNo9wx! z_yf8{W_cm8GEFS3Ex*w8P$qOCaxy1cV!5SKVVf_yZl+bPD=^VS+o-l7g}Xk~sOk-E zyW%yv*u0RpT#?iO_q!cpk1o3v{mKCoYOK^MaX!XrJ|?v!n~u-c{f^5HFrjDI?e3R2 zX8kn<@GfaN-Ha5kC>GZ#NoC~WOOUfsS+#7WvViogh%JIqk*=WnbuXp+ZqkNsW)uwv zCj#EvK*CjA<Q;Vf%e4DZg-)B8v)t?@GS7X}`te+}zP%tGarO4S1|HLR{-Q#>y~3N4 zvIpqdMd|D^q`HwRNw)P45LN|?&S(V{f8e*)o1B~P&fLz?RyZpN3|nd**W~Q;JkC`E z-PDvT!@o)qdlKQ7N|{VKHHo+_iTawvaa+7fNX25;AqGRwG`KT(@1|tY`pI7M$C=BO z9eSE4+<z1g90dcjH3J?CRTk{Y>|IK#4I6Xh88&WTp4wD2lhEz&nz^B8*K%?Ai?yeZ zGX0RfkJ1sndU{3!XGFU1CSA`Jv@5-gV&8N#Yw$Sf>jKqv!S%we8<qAomEh~Kg37iv zL{nyOLI5jd^tzdlEi?6YO9_xV#rDE0hASbYsFiJbU`}`?Re5g^sE?2d<dU_lFOyn* z)h_=})WPG=@@%~iIAtK5#48R%hJ5<xMc&=B2Bu3-SE?2%tFA^8R;e>Ys&#Q_lN?G+ ztfDO|zX-3`%f=6}bUCPsm(WwDXts(;Z-y-4b$@I`%N_9f5`!0ff)75}hi?SQ6Y<eb z{^H<u`7%Xsu=E#AtCgGr*!2eq4te6e&-t<blKdL)oIon2_ftbUwe<^Q;jz<_s#96= z{Z7c)Q<5AQUwN@j&9w~A@jI_p13mbXE{)RA1Ed_Qzo&(43+U=lUlbW?+O2vVF^PB6 zIC~csS1^v1=%`_aa^a7P0u+iLU^4k^7VtCGzAy6^amJl;JcY(rVv0lrRQ;7WRGgBh z_QX1Tttxo~)IRVW$p@eD#L#f<R<J87$EsMUb+lc>=vEvGx`mz!nj=r|%O;M9sQeMi zMY$GObPM9D7mPluXS?LUC>nY!&&EmXGi(Q+jEEFu3$S#U20=Bx9n20sSx!OBm7ke6 z@`>Bz?LyC_K>D;hvfM+@Y|+*53M=5|HbCz-h+O03He#(FV!k{TN)rCa7f5x%FqkU@ z>cN$wR+}sx0@&=YJ%_fE<rFZT7`Y5Pzp;#E`LsXqo((ihU0739O*<!ThhKU|`uvn- zd=AsL&Dgb)t*Ci6<L0{)t{nSk2YAVNvHDMyP<p}2E)A$u)91Cl6O}K_IQ_10?_J_f zZ`A8sH2C1;nUT8CnR=jg;DP*2{-<T-c?t1e-p?2xRa=78eN~D_s9`qO{035eLewK^ zJNs+4zKrSP$eBJ^_hXy*<C5J8)sy}>d07@h<T-O(G<F`xoTj-vpz5$?u^{T1FPrUz z_1KG8r8eUD^kkOGm$hnTMM2EIxaES@CDJda;{DoHrG7<mOi!DXDWgC|N$%zVi@Riz zi_>(l+H>L&^<C<O+I}_uNezm#me@5mK~d2?tlDtBdEW}w@wO|%2iuN7mOt0*JiAsG zUG-wC5#fRK-E1Vp*%BzUO|ES+or((Nm`NKVI)&rS3~*(G;iew9@<Gq*m)aeE9Jax8 zphotSr%_V1E8o+!+tpW|aiPI7%gX)}g)c=-#D%s+b9Zw8`;dYMe0Gh!^P65t!KvI^ zE_zZvH?FArz0hmd>oyViOCsBKA@oG3yubGnqyx7d4<fcSUjQmc0}Q{G0L26aH^HJD z#1i};qej`Dp!X*Z(nr8l2TAePLSmhHM7lEw_hPAT^Dq2=?la{6%+jkv0{{S{0RZ6r z`+WvW7iCkI|J+}QR`+&LS;G98zTVopG=n8HfgHO|DCC*s>(^2gAtVGrM0+R~%+K#P zbB2V@>@svtO?~<;rd^~|mlQ!^)hO#5m<%AbB**Q#UU$Xs`#Cq_a_+KT_r2i8Wn98M zzvF&AHf0uWVdix0=@Yy2!m;E2e3IM!1c&IGzI`7bi+49i#C1A!iQUPgAs0JOh}V7g zXT<05&p_u_YiRdT0r8`)9?sDoHxEzW03%+`;a+QOPJW4}TR?cO;hZ?{V`XU0gCZ=h zi>|^i8K<z&zmS(%Xub@2@QKro&o4aq10J8;P;}nMgit-S!X|R|XDB2|!PF{7Ct@=y zb2}+h=yv4eMo6lQQ@xg8OOLDJ_J)sl+UyE%`@<)y+ZXdmM8TLTY>+l}GbhXj)wl-A zdPs5WC_vrW$`~2B8!DKmi?`^qZyL99t|%9(4$9=2TP<6w<7XI<C0C5MJ`e$uhj1T4 zbF+{~5%1y4r76?^9obCwS`&2YEg}m!<&l`hYn6Nhv-<Fu$*{Hn`60V34e&J;JBIkl z^!L0R@SahBcH?tl1r^P4C<s|eO5PG1re;Ve;~S+o94|B{LEaupPfMxz{$D+LUI>10 zrdkTX%D!-G0LGKhTFZ}XCaFogGOz+6qlC|ap2jm`#Oc!J&^RpQIs~JM3onmm&lk&+ z_Yo_j<j%ZnDq7|zIzo&*XE@^m&E_KPw3OGIc*Ohwgm|OpGSQcfJ~4}TMg!xBf=6jD z7{r*&#{L`0(^#ChYV4vBM(bOD15;`8T?@y#KCI$vrpfL8+uC^cr{7K93-1h(`v9>L z7!vY@9m5&~0PESn?*y}F9Z+R7v!EGt%P4KI3NX&xz?B)066riaM+hv1+9|b;yUr(1 zgvKq?ZS3>OV^RRC)uX5(@2mLO(NAJ-y+rc$HPFIW^D7MvUUsvaIg_p!ZGC)4Tnif6 zGbPWAo+iwrx?XBzje+QJ*@2c=yk(DazIkB?YVWJNlH{rBVm0YAhhWmY)>r*`6PaxK zoxH?FGc0cBZPkl$a2U>JyZb&=yG&CZr=?xBwwaw7+lam#$@1x9;lFGlmo}6;p73Z8 z7M9wYYBgv2R)At2pRj^`w0Z~!TnjhHdq`>eV*@sa2a^4yW>N9HhUCAJo);<}u{ymK z!*3TZeAcIe?YGTMn?vQ^&rrJdO1Lc}bM1;{{obj5zff0Ru&rN~=qA0)!hb%JWj`;_ zc5aE=LukE<&Z{U)x#+y<P<627vgZ*>3;VTaUZb+On~C@1JMzoUV&YBTJH%jK3${_q zYKoMD#HfZ+7pIB_*~K|?^}0F~H_nv$F^*Bjaw{LZb$^$2=`<!XRYf8^USkU)ip?r# z<yjhINMdF0&6Aq1CXlXYW8p13w=(q=v!a(2W~<y4(<k(?c{;R5FUXa}w?5>r#)%QO zXJs(N=7DojM7UO3;EuGnS#*KmjPgwiuL?66=|n6oaUj2X<tN*kOJpSssvAD;NvE|5 zI<cDhMMkB}vA))a9Z3zs=9y^eKf-Y4*DV}oB`67Q=BEn3H60dR6c)CjH6;u-SOdyP zq_0q>!~Yf=V24W2Xdp%57N-+5Mu`ZXj^7Zxi7%mE=MgkTKE!nmyMz9fGp`9gDN?no zFPgk4Ca5I~%@8|_RmLBYNRT`Sr3L9?m(|p(2<OQZP6_p`3Z<OczX)qpoI!jAV+EXi z{k6XQaKwz!iAR;7B8nXWlVc2>3oL+xN#6vVK-vk7BcuAn_GVYL&`gAeTgRn=&aFw* zkvJ}>3(28eUvcUsL6YTRLEETNZ?91AI%+nZmxRkBeWc`Po^>=5$Rk5pmf&|&q}do> zuBc&UnW(a85T56%ggCP-O>9QUtWhLfE<=^vq4H^^Nh-9uG})e^sqP#WN*U}t7JSDB zV#2H|)&ks%>!Gx5844w2Q`96yIm0%Zmpo@vwoSRTQ@Y3>fSl5<P}U<?v4kN|g_dM2 z5o5?HM_7kcf}b$YVC@fds}t9}w+t)AqOQqg%L4tkpkn2?8Vp+mAf<*p$PG^PCxgLu zFd}&8>dYn1LEiU>cTaoR1kgpMwv#{~6ACaPyc&{BRp)bnT$(@uz=3xP1?SW_w`4bf zy{2~~D%My)itdn{aL*`eqS*bNam-#pW~tzva;oP0un+Shw4+D72%qVSj$_*%MKj$f z=qajt6@r7f6BK;{JahUXmZ@!E!{+>18|_Y+eY>aIc4p%~n$s+gV3Y3<Lks(eKZYlO z7IzfK4|)xaNFXu_44aij5+O~<R}Ux+QD@69=BSHYF5T^f(`Pv0;?U<tH6Bv>fIf^J zU&7R}{T`-~S)wJh&13b+I=-`eeFnJ+MF#g0%SIoj_hA8bW6YO*WC-F1T8$+NgeQED z1za^uiXGXD9cYadx4E4HSSM-#F|c7?E)x*DohX&h*xPNc>b+6yu7uB_zk#8uQEic; zAI>&>Ht+$1#{*wbhB#PI@B|9TrMx%js%p=%OU65FAN6zgH*SV0MNS2(fdn;bD)--R zA6I>;d<1>zl3Lgp!bsxNS4r(`o$*n}_`p>P-UW|Da>w|%3@oB31>6jbNo$l=Q?bP0 z-kgqeym#-GWo?~)*cMehv~GbQI-vr1i2o6x&nM^%O7g`tuQ_;BZGB(`*(=QMMpUpV zN(yRG@yvs%TA<1d$Tfr72HABKv~aF&MDoZZb-^)sTPIn^?h=nt6h109t@gj*SYmkx zs`h=k&+%3XQ$#l(Ed@TP38-0>i|CgP0#6T=8yG+yooBv%)kKMQwwSj6LzydD!xO#z zP_655j>tJ}k6wzNM{!o$7n(Shvs7&3;BTGjbVp#@VuP@$#sQxb{gvcXhaZ0<>BOlY z?l>3EHbjm*)+PgOvBwDY;3gnFSOtFx_*EJL_wmOBqDLUUwmG@%$ScYUCA1~%x#oa` zl;O=t6i@x|4s*1L65o~3ON3vH`U7&k@1s?QUwD&GVAJn+%$M})7huM5jiTAFz|K!v zn=f2bhM9#M#lmlY>Q`|tsbBfz4E%!lQvB88b~OGd&*>pRtol>e4d%CTzSudzow&F7 z`Ulzd`E364?XUs4JyiV970p=id_yTR6}1}Lp8ZRz#lhm(BhqH$au<HzuuR`EG#?Pp z-@xAZ=*erX(G=C=Hk?q`Ch1daMTX$_sb|;`2vLfzik>ya>)_Y4RCj8zKja9X(4MdM zhpWFL9@$pCurKfN8lSLEMN_tuyy{uXH|m%?vX1Y0EWp)wfqZmObfoXdJ(xbxEx#a9 zerBrCOi$lw%X8)2(x|>s3l^&sW@O|Qx;u)4+DRvZ^Xm`lXm2T?L84b*yvn@py-2U6 zUbc}G`!yeTpVr~^7SIfM)dXollbk*xTDRET0dbf1`9R1U&{Oh0z-K<VvS_E5Z%L9E zS+IGeg+?5-g*{e7I>fVE34T#}fsPB2A18<}#;H#hU@1yJ<;S2I<DnaN^g7qexTTXq zg@X5BKIfG@d^jLpDHCqRMj9JRQ%vYYotT6hMvI2DCG~QBFIh5c`?)R=3KZ#SvP8d; zt)YVaP&N9VEAXKrqtL11rq7kUB9^!EC&PQ{1h-i7VTt&fs|ur2X?5OLLt0%rJ4NT* z-;P`KlIm{aIArHV_`AWt8+@j`D&a>QR(jCvwkMz;97Zzl1@PIXvz-f}_+iv^W*!ZZ zTkN6qt97DEvM8r(2ptg#qV7XMg;86^Ye-2Csy6EA$X4xRS)osqNmu4&ib8J%JaCI* zpBXhZR-&Gs>_yKKLG$XLje%_co_7XNOZmgN6+03K?6?&GJ{MTq3bge^_@3co?5Df$ z`TFzEko<(UBkKKcDDDji06_F_LvmpY!+)IrwpEao9uPqAO&lClv%V0g%I7EO!ti?5 zprHYwQt{eJA+?iauU&gR;CTi9R6IASc+7(yIOy`VH%p71X>kWo)*)||iX+27?jIS- z5(r>OTPk*(Z%wY$LiM{Ne#~&&;;4|7#4s0<iKy~P_9T@}r|<d}fQT>`N(zT`my|k! zvPE&9=CSwlG}k~>LNlYE=Ua+)YiH}f>{+<~)zwp}-J$5L%ZTX)ms4?g-K`zupuWL$ zQbe7(vCPq>{MILofxE0**<y77(eewqztxxESealKs?82zFO2cH08|1&JjnPFV3<#i zC&y^_4n{b(0H5c^Wm@m`@`(MPnu{<R#(4RwF}uH-`}e6;|66m)E`~0q|CL&$&?g1V zh~T?m*U?_xy!<UN7wE;{(d<Eq0u>2G-DSQqTWo?X+3=l8-WQ0!D;_Sno`??2ocMCw zg_&@ZJ3|l9f?<BT&oV?Yg!x;~mj)s{K?_0bDPx1YAz2QqYgUxxL%FP|gWQF_CPj~n znLY<M=va6|rJwIX3e?%qsybzJ-2cU7f7wZzgFZ@^u{yhcvUz<>tTuf|m5bU#nd^EG zmylZ4+L|%7kMnz>XYH0f=KvryXsl-eVj#~v;sVvXk}cmYE$?6_1_ROyqNJzBvhtg` zA1IeOR%1}$<{kL)njRNNRGNT3?j!34gkxB;5kBAQ75bmLWB53;!vC9ipz!y!Gs(ZV zx__miSsJU@TbtVb*K|<L))`q9#gEN0(N+SQ#`aI=TK+r>EGz`YyaENN6+saM>Y?mv zv2{o7)}qNkWGO)&bIdo8`E7;%CjqmPSoU23{$G1^cB8j!x0yYAymp@HI^mh&JlWp( zetNP01+W@8LJ6}k1n#ykj7e852$l+>i{>I4Qo-~kG0Q5r0-7FR=9-k4CjAE*-9_X6 zOC!V+6HRH;Q8KjZKn#j~?^I)P@4WO>WBx8Yru?$>?AB$`b#vZPdjz*mcfpZ8Tt2Zi zb<iAZo#!H^q>o~Y!9Lw{#O37Sq_g~LI(B@0i&Q#Ljl{(!b(VrYZHYNK<7y4H<ut{| zI6-Ws2?zG7ncIA8E{<Zg`YL*kRvCwDW=6y`276`vd*NwFvx3WbnhU8$g)(#6v%zXY z2Xmtnw4?Y>k4o9}iR_AV`J2_&)1@di|6W>ChHg&TW}^<&W=8lbG7VIfp5yUndPsK) zHtVBV1id-^H+BKqXHddJ3i|;%c@CzLX9DYl@=zRVPvKVjpVIvCWdmV(vJ5pLkUp<4 zG9s#N<;doefG<I2rKaNWnRDoCl-~)SjHjyRwojdr7ozTE*NX9`boKC)#QDgD@NNtx z)mo$G1m%pfbO~he(7Y@*KQ*WA>X79FS&NDXSw$~}5oONFUQIUHwMVCw_Iw1yN?R;7 zdncBM@zTZ`A;cK+#t>^PaE3I|#!Qz9!3P0iAhJ;F(OF=(2tnR1jdtA5Xm8w3Qd56e zx_f;w@d_Q$4mz1A$2**cWcMdn@b(dDv%7=sv_fMkx(asH-jBZTiU;ZNB@akIj=<Us z8Ps>x<XFdN;qG6kq@T{Q{}^sXte&l5tEH1*YvcI*oYuoaI$Mr8ov>U+aK+H4t2}=n zQFmK;>UxA%m1{}IXf_Yy=8OU(y8MXuQh>ciz}7QklFX7-9cpioO+EE=EV_&MKAd-K z{MhB~;B^i;(wi@Y-GOUl`ohs-{|eD?n_wQyoktnqivh#!L$D<|GYF&Ox+y7QcNp04 z0Kbi&wf4IOrh0X!@-QTQy{)lWxP`e2KnmCoNC<Ed#0^jiScZtGqF4jWKF}*N!AD+; zwLQcy1lq$H>X03Wf;9zQho>?vkXoa88GO6a%XVWEH>Hm1vN+)=$AF&vLeL!XN%`*W z>6@>*M<;;|fAawyQa{l-Uq$ar-D;+qn!2R)5C@)jOu!>O17W+%hjL_tSR}Z%MtGq# z5}beFsOsF4656H*9DRY_=Vv`d>UNxm&xT_woyCG<j~PolHxV+qpf*zOenRn;l5LV_ z86^E2pcwRVAqr~z!9iler97l~fQQD^TPhbA<$RxPL?CKH+&7L#of|-HL!dnLD0HT} z^x>R;6LH~G-lM6WJMoI75mVtLCk`I$7aETj+Kxm+f`(2nnGu2}^dv3Bz@^5EaZRkt zLaWp3#33h6lnPBO7a?<{(vsk!DHOx6369&6l7LjEQj>!Wx7<tg>W~zz{Iky@@37mp z)3Wf)a_CVLu45f%%@O$GTi+0!c@JMx+sPy!HJ#w{0&eq-tBam%Tvca>c`?)oV~mL{ zwPxxffAl>lFn!ACm0IUWWp2at4ph6gO0+9Z5>=&44`h=FFtIufFl;@@`Hl4@xY&vT z9u_*(O3ZL><imUGC48GXc&Jw<oq`JX0~&U~HwXNk>^0h>9Bc7w(xrRf_?0zwoBeXJ zMOOY4Sv7#8`{XN`yFIZfTT%WL-0$(>2k4&;wp^@eTljA}i3>ac0P(+fu=cjL_ICf> zzovft%fF8FWS+1Uf&vwFj$>oZ3xJ?VYf~wR00jpOjbksk(f&4JC!xGY!1vE9%_}AN z_GkVkU>>L7D1_lUIHl(}xcTOe*>QIN&|)(%f8KP~Kk=JBxGw(n^Ko$lpth$5BKf#t zKm{g(L9~s+NU>iURvBhY6eHgcbtrNun#N=nu7=<!B*GXq|2M)bJTSqq7iGZx;*yi} z)*8e_G$-CnTexeEaYpP6ba(A6Iq=0jan+f1R2%`X&(AwZh?(HxTfB>pp=NRu8W}P4 zK^iVG)LBBH$fd);YGhf`SuVu7;Lo7Eu9sSKT4q`>OT~h5o@I&73Ncuwfk|eayr_=| zEQ`{dMpYgnY{;6zE|a^yq(qOF>6WFzE@`D(cBOG<N*p(x>_a)JKQ_o@Vlv1w(xx(x z&_SU{t_lcI@Lrxw;a-g`Nqwn5YXtLnH8EV}OuAu?@MiMmG`y^TXKve;VWjpoXHekF zptVf90W~{%NNF44vP<LfwfsE0wEP~sW8Oa_-!nC;P6ga(m$^{06L?~oEN_ov#AO-x zR(broJBs?%YLb*~F%cE9{rKus^E#&FE$F+6tthiPd|u}2RoK{l$ctCEvauGEH0-)q z2GyEk?M32h$sOBN6#iA3(E>%hH6K)csV0cg;_cHD^I%!V#Ep-I#sD=_+T5OCJ=1Sa zqDfkAvqo4@Aosgr#wUriF&@vlbk*KwOv+IfQ(cIfbYHP?PYb2uP6x$Wq%lk)+yjqZ zq)x6;4bl3}2xX&|H$uIZH6oixZER3)u3hwUSPeE>zG{PkFLK{mX9WNj_BzWRYy21t zCVzzlSA1Fg4zwHPP8B7zF58_)Xa)|iun1dmb8rQxOqF=Ec!?rfZ>2GF8K|wjGo%|B zn<M#fVSM_XtlCnlxnY9y3L%gwWNyoS^7Q06gz9NpNiDKLt$bv+Y07kFwI!vAp8edi zjY!3^wC2zxqJ`<olTs*MsE+}hrSi5NSssRy&^qzr($K-iE5bXXNRb7qO{S-gam0FV z-*NK?&|*NSJ2vt5uBr!#6++_aHWMlCT;a;9M7Ll)Qc0tHCPK+JlDTKvQd@PS7syhW z`^f8=sqw~`oB9qxt6%*${a#Hky%qsuNx-hJ-21E`CpO`D6H8+nhqQutr6rFQ8N63G zGqa8Gs(-ZqJcx$!h^<r1N4oW()c8f~F_chv8xQjwh4IsGsQ&PG1JHL25g^2IHFObd z!u7dPVl+q9EDq{$LIvDs#{vaPR8m>XfD`2mk=YuSa8&_Iq^i7t8<*V~$EHdx9a=Rv zc1^)4j9a49q)eUOY>;i4-BivV(cg5nvatblZu#UHB#R{qY}^z-9F`N_!*_@tsgi{2 zBy$1zqM{Y3RdOs%cJ&r~bH!oD_TR|L_H`H;KfR0K5Yj+4s=0B&YVCkFuAIrm!W*+e zSCzAL{nvTk+;3nPV)Slx^KQhUIgUjM_^xa-$=WJqx45URX-d9vUw{Gb;<0dLeR`&3 zR`d>&79bdu7jWc!gk#cI7#<?g*C#o^2LeI`1ca__hX&p8xZ0lWWl$jmtg(Njonwg} z(F4}If-HRceICWb-c)x@!!P!6#4yCevJ4B~6=DIG>lvq`7fZ2qqp~)lk0C`(I}GPx zD<ZI!nD&R|W;~YL|3AjwF-Wr@TGOrSQkQMpwr$(C^_9_O+qP}nwrzLW>RU7Co|ri& zF6Ph9{U;-K#Lif`a;^7$@=)_J%DnZ|EZ6Hna(242D{<f1%Q3`jM(xh1IWcNGhrpM8 zj5~**)-&*Ro8YwlR0uVW6;2|ywK{Keg><7sXLw~y+cCCO*|1evohRFK8k^(_ynTXq zwZgB;S-_K55Wqg>A|JQf{Xbq{uiJlI>&w9Fmyk#ff!>FZ4YSxJd*JQUyt`_^mW~3? z4^Ouw5@$KkN8IvpfgDFJKEif!H|?i#s0bg##pCqMn<*=OH-X-SRP~m+N*}F^AM7%_ zF9=Wdn1dE^`G!+CC%q`)hEqH7-ciBhYgubshAh_-BPYWrn-c+RLW<V}DB4ZNLw!b! z3{j*k2-;TI(2+e;D=zbyW#n%|2hRoy;Hk>?DT3zef6r<RNkmd5nWDjFzJ31*sQVVV zruI7e4lsSwNbKR!ult<bqN520+wtSPXjXCL-#I^rc{b7-tM=}DqcKl-?*93&d(iis z`19aTx2FyB|IN}U{J-{~|6*xWxBM}dVEW3R%)q4UApMSvVpd#dfq?`zRZI!{F_sWO zA!4CU$F--!kR$?_fQPJXMXS`bn_EzuR2>DitI9|i7diltE|$%a(v_;0vESC#+PS4Z zInVJuyX|gvc4Wwpqgh@lH{KsFzUF#wkL{<xG=1WPG=sLo8WEeOuOTqIFb6RRpKZ!$ zZowQD0rulp*GS&jyOjNIj`ENNYxEEh0d4F-Ok0`(AGf^eKKe7)sf`d)w*+t#_k@^u zDVMRo3&l-cB|=66+<C(AgB1KXg9hOPIdBFr8{Fqge2BvE$6qApFIo`H_QPQ0$8Vc( zc$8&!#7$Sog?nK@h`u$`VJB|0&b(#J_~8!7329Ki6?y0z(M{YHQ|Q6&772XOhGtQv z8g#j<9!qL=WGagtJcZTCG?C@axtUngcK~e5mdh-#$TZ5oE#C2hAz?QUxer;p*Hy%2 zg)7J>8}C=1-MMUCSgxCx(p3hu@Nd*89_AbaP4Y!5N?CIxZ5kSgW83==^9Dr)m#MQ3 z5ZGIqt6N?&aln?2O_mXF#%p5DT{ST66toOHsIn(ks9vc~ZPXal+(>B<6Qs1UJ-J&o z(@S1k;I5O{0nH=aY@^JSn%tRUExe*5jnEv1F6!py>Km@2Y{tXf<!4b7v$rW03=fTA z7r_-xqZ4c%Ac$7dE`X{FTWjRO5l*~(ZnE|3i?Gr})~EBT<R+#Arcp_#Zxt@Xza{i% z8@Cz>&54~0yxrMJEbZpv6`4EB<S~)wpoI;-aL45+e=LI~2rHt|K(>YP5}hvCbr)@` zXM$(-HEW|E%p14NMmV%Ol3Gw8m5-0_Ddo6qD0;h`X3jt}X>i2tKfD_5U|`ui8+51q zJ&LFd-YZnpkgDc<=3|-UaX-+6hr&#%qmsugIi!b<?x^~_p~j&ob(iLf5Q@LZ!xJ_L z0hMXflI6(-A<z~k<cqqe?1RWt8n|jYLI`JoioP?+zws_38^bzzj+m9B3p4dJJJhl# zrW=nFjI0ikzC85nk+6>0%<X$;JSKug3z7-ZldkK|!R3STSdxdEE1M+@woCEZmn3D_ zjRq;v9tsLdV=HZRq{X~0D!{Xe)MP99{X<ww>21HQWp$#sN*)~Q=*CPARwagl8m5Qd zG%St4tW4V(!}QZIgoF`BWj~SVGu^?wWORVUY!1q}U=LK0J8v_>^&yvQgSV}8ForJ4 zcKYmPKGj<OkZ<;;9;@k?9&oL12D3v38Dr!k7cc8#-&m55Ww=Az$8s6qWwyb<0{&@u z*cISrlkN255B2e9xTD{suR-E{LaL{QMauCu*q{wx4BNAZjp+BQ%Wj2rli3aMb#ywo z%XZO|;O`0NA70I_35R{+I7mNYn60<jb}mmO)nHKDXHypwN5(YIO<0X*9Tg}e4_jKh zt=!p}T)iXUBs(oAu=$E)Dswb85b7TydR*AlTPdAiow$qF=J8Q42hZLSV-*7YYXEFH zNN4FvVXaMrMK8W^Ntb_9_9DrVuwtOB_AjrCqnx1`zO&3gxoFR8*-DgCC6f#L;t}+h zhA(O<qCDxA(0-~OogL+l+ZnJiftavRVQy~P0T!ysg_AxkzuNqm_|Bg|N*)}WV4x-$ z;X;y_^ut1yn!g)dpHhR%dqu#%NIA~zyBm8n{*)%d0|y;?)@ZfWzGfq0`$fFHE06@z zt1UqgyTW{*gkK~AgT5npN2rLd_1&p}a@3qm4^xbIP!xkFQh0HZvfmFiaULM)Ow>wj zo=H>^hZ6Y;C$Z77wZab%>PYV&wy9le%jgC#s$_2LlQ7roTIOWp<fJBu*`*Afz{NQx zksUGX&W@gg>)9>I%+`(TmXN|Jr&rHYQL(gB*}JH~S-TjEBjSjJ2mB@2{cWgB3BEKr zdsz%xEx8tDxpq)bas>s;Ed&e9uAO9cEXC1vq%Fre9LUhF&l(h{8i+B=(uM!>YUQEC z736Wx8PZ_(VF82;&RGAOzQCp&ku5|)3zh9%kuOYAl;He`P$pG=Cz?`pE!I)&FQJwj zO3xR?>AngnJH?d!k{V85Q^gp8+`LWzPqtbRtyePE%FSFjnqwehq+=}8U>1C*33G`< zS43rHIvTA^HplLLby_&+w7oGBsbnjzB><_Q(}B6e5t^wjyRtKW`0H#~@Ht^{Et<R@ zLfnxy`ZK}xT!^a@4Vl6i8W(*S_x0DJxY0+#;R#Wfz*KFam+a%dlTN;|S8?X2wj`}1 zzqCrLuvbMvmqS%Lw%BBvS+X)gUF?8;iKPBudfRg1n>ptJtYv6S8LwQ*jN5Qkm<W8s zRa;RYF;ZvQ=-V*hJ|7uh1nzXaE6~!LoXQdXWL|LaoM(5s>J8AGhEt$M%asjl=^yhW z;>k7_zveB!MGlqoK0~xyo#*`|Zp*FjTuoeP)a`G??T6aLFx1|n8<DV6lkUM2rz9*c z@Bk`(a=b8c2r8%8Et4Bx^jS-|ITc43D$L>!q2jr&Z{I-God#4a_SCvcuNir+OKBVx zs3s%TC36Hy$=nPc=_rac-C~Ls2IH69l5_k~`reE&bQ`GuATn#DZCG)1CO{+1fO~*B z-!?x>F2vIVPE{8OY`L`(pV)8K$^?-~lA-Yg>et{mlRAqz3Jy(+Fi#Jh^>A`5h#dG! z!<=cz3)_gujHF6$q{eRs-w1VPJsazv#ErwAnm6dkysHQ2t?G!I)Np%&>GJR;nAGk} zTu<bL|JidKe>QkqNxWbI?r@?++_1*~qoMyD83c&nPtBADSr$&yz=gB8x){~`VC1tI zQ#y>#Exxx}o2!B+$O8olrL8DL?jyh9z$sPMBYW%_Nb3&a^j@49zNATGcVNq{oxCN> zT+;@<X-((4K?vVDqQ2MdLESy1zVrDT-`rFeu0gDUWRNtw%z3kF5cjaaw<`UCLqAR< z3wTf*;kwr?&$Q$2IRiC;_K>VeW+WJ8sBHHHN(KwKk5?l!OYAt9&~Y@aX=94eF7L0- zHn4(TAMy%8eu^+>EcNs2bqCF&xnN4nLI?KN;QsYJ-n=E_b%@VNaA#U4TrbgrUr+3W zVabS;)AgG#y4~{+7`NOJ0Wz;u6M~ca)e~bKzBqIocwzezMvEcpKE^Bc;V1jZn{mx| zf5#WP^%e5LN^d>TzkZ_6RQd9McZ5%rue~TwQu&H+4#iA!1;6k<7HhsNp9$*!P;$>K zZ+st5rJ~vP68>Yx`H1CyuEn<PW#e+xx2yQ;EwPz?CayX&v*kf}n9?wkFB7GFxb8a1 zASf%)P9-iPD-@g&fq8*4rDQmzh)AQLNTXP4n9hYuy#$C=ywoXN;S`%Tz+4lXHrlmv z4Ct6-wMqstDJJ$5)jKGYf=^5CV3OJnsoVU^f6D!t7W`GVa_r3!tC<{{&JOK7Rb$B9 zoX*NMhJoiFg>&+hAL7O8v8_B^`VVdHI!)|udVU1Y*)hpusa&t!M${Ui5mVXo7Y zvUl>@yYA^lt3vH@d*<Yxw|1&m((iUDmQEZi95~;4hJW``v!=aXZ=S2a<bRBZpIu}{ zbS5p;n1ztXGVMD)RJ4vdx->WW8NaSp7Mh>%f+KW;d#;!?_ZcYb^`mgC?sG0G{I#mZ zC2Vi&s2nx76~<Z+>6x|DrN>PVF<Mx;TkdxM0F$GimOh(;WqT7p$3!^tqrn{51bf3x zgBg1#PUg?QL8~zmMf&8Jt;agwdv<R~x#<tf*xfPI-ZJc-GW_GVAMb4@+4T}cH{|Q& z#UB)MJrczxij1ZN$G*4Oj)QF_{HPqfnu#pNq+f4XCGhRm-i~z+UFOM@5+p4v8FnCp zRQu~~U^gn$48mHG2sDgV+~E*@LH1r!FKgOF+03O;a$V;;pjTYu1zcN%Jyf(ApCBi$ zH9+UfjDNsq`$>CkyjrTy5Z^BRiO)QAy0ayiHOhbJiBenP-Fsa$(21b7>W(LXsO}IH zP&*eujAHXIyG_;k_5C04e?18Z?Q_Y&{DAo|;eddCEav|keeXZ1djCPm6S6V1vljUu zz&ue`Q#*i+r8B_P?mzA3$tl`yi(&|)=E&SVBykBserQmS2^4HYK}b+RWO2|UOR!6D z9%Gp_v}WN=6Pl8QUm89aoIYm|XQ3D8SHooFDGld=MeEz^yHnq8u7Cf0e_h%GX#{k0 zMG2Sw+J?GP+r#w_H;-xrB=@y7)`{meAwnee0Wuvs5=D8bT)Xwcc$xpMy$tZmGpw^^ z7e9hX|E6g+p11elffbcD;W0(D1#3!u(!R_eg=Z^ncM<W}Fq4$xM5P9`S}Q6@l$`2X z{653=paopFc9a`*^)hV`FJ@jt(?{^!B?JRTBUSW>V?Zm2u%pz^8Kqs)DxltoWEdSs zliM8S*}|j^q@rCKb6mSI6mm&vPP9ONB_c87^yGE1N5^JG7v^RzBQ#4TYr5*7mZKEp zVcar^b(egmk!y;$9fCygv1j3YEv0EWb1vJhLU${G32&JR3bgOXG`m4=0k)XWgZ7D0 z1y$kea6rF?-2I>)EpqQ%X89$+dKjYP@aBJN3t3mLTR!9E<moqyBp$i>@ayCbnhN~a z#<uxz+M|5DO93noXq)4X%j@}Or#XI|MG4n)M{d`ZNYLQV#X(|W2H)C(AR(QBdz$9_ zy%P#SB#Ft2+@DvvPlpr*TjGr&nfQz~9pusX+!tFqoSNhIp7`atR0mTQtx-28Ug{js zthHjnVZkkzJ$V>P>}bxvvfF1#YY2H&=nAqq<m9tEfr|);-z8_uhYa(oE6_o)@ioGR zm5?e*uP#qygp^S|cxT-G)WL@fdNYt^a-%I(_qLai%O^oRqlV2r4}=#LZ${E@%XyyN z^`PvMMaOdkm}C$vzGkt*`_M}piRUN+qGm$58A8~prTkZ~Y(I_AUTX|0gY^S;oet#* z{^T)&t9r|q&EV&S+)(}na!DJa&tYscAgkSHru&eS&r(LVzZ7Iv)IvAZiardO!y3FH z<+l0Ws>6I;=u1H*hB%>EtHR>}?u1cKLTYp!5&}M`5Y%ZT#zGr%;V!Tg^fndWY9{Cj z!EWhpSFdAdM-|fA%_Ds|Nulaue$b>DJB9PEynmaCvCu@=HI~&*0rVP3IuDXg6U)$z z*GqS)#LZ^KyZ6Vq8;HWpI4M7!68Q2s#*E+MuwT{VqYc?*thv<#(KykekFDcOw1;() z9e2fAY2JJM%mdLWm^#hZjm&jw)@YIU&f>m9{6!1JL#eP=-{D>SG_<8J|5uY|dfI51 z&ym#afcbU3<W0-}<e|<gW+_9~|MZkYsZz@S^x2z@_N}XqxP>Onh5Miwwcb$qSk<2@ z6N<5|xrj;|W9HW;onJTBKuh#c4ekkApB}tnFNOxTFDnCjt`go=a{%k(UYOFth9W=W zf@fgLXYRckqwfd&e+@5dgj!2_zkz^Uuz`T6|3AXZ|B5UUE=K>+R4h*Y<A7s|Ihxyz z-+k0TLPA<>nXoX2-@et%2^qGLBDL8xJsvNVP(n&OvAr|tlGxb|u&<SchHB3LoV#x% z(DJnqtRq-p;$US`#x$Rs7aYYj0r=g~1F{51d*>X%=WiaaPp}qf5_SKzo#yzwY@fb$ z?Y?;I`n;^-|9iwi)D<)@SP~5-ete<;J9D5NK9j(eUC_0OX=vvbdRbD0-JU$*W7{=& zkYyWP+nPNAW`l3=2%8?X!83Hunl7}#Gk&0Di*0;k%e<-M>_35IlW*{dm|nE$nLP2b zk!$b>nQpY{nLXiTn-xEUK;$Y`uoa}&9zZbD%#U0wO#ezZ8D4-MXUSNlY%=J!J6iz{ zPN)ZrPmwc+s4^s)4c9#uNSuhYB*;HEY&Ym*sBMHd*H~-h&z&gAQ7px+z|QMangw$v zjib#iB+*%>4>*i0y=_>+XnMI20A`4#^+}-{GAtc})w~3iEm}+S-EmtI`sphbbjebs z)e)`dWz#@V@vO|JR@&nj@5covm!dyAptVhCaC=c$rZUrw7>(_gp$qtxld$w|fk+ss z7hkN0g6!7MtxPVW!Jvsom2lY7_Muf<;ME#jTi>(h9vk$SuG$BHI7FVFMH}2|7ejML zwjWYi!KTVdw;gCm8-t+I+)1$M4fRy3O_HcZ8C9^5&lcHMQO3NSwhSk)R}MCyp*Rpf z9(Cj}<hBGnCGwv&E*1+f#pGlJG}S;WV)CbC9f7Lzq8(%3tHv%zN}|}z(iz-~2%aMY zmT1@;Ia9FqzvrDq7e(5=t-*Yf5QFI$gViRCj|Jjskuxw_izTO6ulzYXHX7ldPQHLn zq=n$a?gfPt!BR7yu_p_{5IS4~DV?}ZApOyY#ZGECB@}BMe3oKzZ*&WjBSZ}?9IO?= zMYrRoU1o3|CzE%08f#k3#e>bp!(`FfoWGa0x`{*d>JFEo7HQI3@Rw!$lb%IiaKiaq zMubCfNuZA-jPg_(%&G^@3Ft%){Jvz0RL0izVAXzf1)jj9$V{fv8jbXs69Wn9?8#JO zaG6;GZ~9!~OkT+>V@mi<OeM(;lMOqTl+oO<^ZiQ0OQ7_=LH~yM)}|FzwPZU{wA_6k zb}TZ|1H0bJP)bFD^c2oT-}9yD=VMho)8(j9a{twoETCIdORYAnOJu5Cm^LO)v$6Tu zC_R!U*OdAu+nF#61X961L}$0G7ca<O{Vn08@(H$6lss&~!4_<-C~9P%FpGl1=~E~l z+TqCbX#tKDMNKAK+Y)P~ZgSGAh3?ugn}pBie``3jWlVK0H=;RL(BvmM0{4gIOhZR= zlXcNuOXqUHI3rs6?Ms*ggo8mB+MBV`=Xz+x4(4b@U=^K9O8SijX2&JnkFQMeO%;r! zi~=_|!`z0OM`D8<fPe=}r~rbeAFwi;XBv<D%RC;B=v-G)oe-G(y()1`sDR*Gy`9|1 z?dd8jl7dE_({%>#s4GE@i0f3>OuXtuS5$qn>&gdC59s@}QuyyMt8;~O3@z17bupI~ zyRnQFYl{{xvejJpE5SXpuA74}H$-*;7*uu<-1BBB1ybH>xtVPlX;NRERUiwdO3uF< zeDhda?2%=0X~nke+toQ2rhlq!tw~m<D+ur8ea(6?t(_A~va568oI5|(S022Z=I^rt zJHS`oCR_rxz$$!)|G!AM%9VWX0PC6(k=u+GOn~&deP+p}{vwyC3vdPu(BJKK3vNF) znZFu~)O(}#RhYCfb$?OfEp#>+!$%U+%L+&>m^a*+ynKMl?F77l0L%%0Fn>m;NQgXI zxH&a^0rYlYOP~qDcAz-$xGwlSTRy*wZ9g$!mXISbpy*#ix4=uMAZ7iq7WjTLB=jH_ z_ySaXezzlc9Y<RJZuOf9nLvwzG_}GSPRJTgtzH^VtCD2T3ke$g>iO*Lb*yY1<1P?$ z*Fh|ygsZr5=V1`-EynPM?RJmAOGn@U6ahElH(nqvsJIVrp#88tkMBBDIzVQxu|WsE z^Apg?4aUh0A^ZcoN_H=9-r*bev*LAX+qeskMXXT9D8Z`Z*kc<+dq|ek?m0-=I_w#! zUyi^%IWXWCf&9m>jbk9$Ja}p>_!|3cV3N}Y7pybSscoWQGSu5H_RLcf_Z-1%b4$)o zI?o!<Ig3)Tgiv_I>;&=nBDUCpP^sAloeQ!_N`o%HBzmC~Wr_O)2u(2@O^3dxMp{}| z>dQp~u0SMTutEOl2H$02%~+Mmce5_s_A1Bw=Pu}`pKnC7;P+=yj=Q8W@th9S!JLq4 zXSq>r8mf+%@jo>m`{JrN!>KqseW)qOa*I%7k6;(LgEsjjrPu))u04_Uzaik~Hp<jK z?}AL&&6Dwsw6QM$_@3qi?kO-j0nc2a65E|(f9<fk!5VgjV_Wm*wdc;@A66`uxQCV4 zBisb;=$LvS{>NDAp}dE@{J_*PWsBJjAH`36tX~(kBc9OfsUgN)cGe{W%U|3$RSn<+ zTHIA2`!jmWFL3@jcskicAzgYTTm#46&Ih`|PdMF6uo@b7zRP!n^#TlN$DR`hdWTQ= z1Ctj^5tHu)v2hAw(GDGlR0Iw-p3G3~hp$f5<0r$9-$bngB^4e}4kxWxEca@i<OvU^ znj&*$>n3N8)`Q_aR}Cn%2GvDALkp-u1We<dJ*%I?aUApQ$J!-hZyU`u``JOBp#|1V zgKYOxZ4-uGvw5$t0p$1F!Cr45^>D4=ruVdGe4WdnFzg`7H~Ka)3&s(C@8-z5W3p0B zmI<Hdfqqga9Va+|6u2p<AcY97&_cGic~u1Q$_>}QsFvb+omo4PK=HY9%x3@lZ^TtC zbTWATA8s(vkMN1%|0qrQuLmHXBu)8Efu92qVO(WXoYSM<0yYRO-6Nemj$kwj;!zRL ztrF)mg>K#I@<z#H<x@U>9)87zdzT2Jq(|7F?;9L$?#7wi-d<mjJ~A8hePKjCs5Cw& zt?U)O%D1Ps>n7}KVc_PIa<A(R|4L6+?s=uB7BHE=qEvD^$vB;Y5u~pqd2^0EOJHFm z9K|TV$lzQv{(6!L2w<uPY)FEj)EU8=<LGJfqA47dWfSCIsS)e9$4Ta#fMai3vZpRj zEvPHoY>CT{Fe#-oYeE!>AD0rk7BG{vTd)#uH=c9&x42XwVHQlY(G{9?@k{TDn;MN| z-~vml9d3*Xon0^kCu04PIEKb(ZCK9Ky^?Ic^fV7IfxsWek3&{F41&iN$;ou+ZyGwy zT|N`#C2d@O4-VaRet0hf;ULy&ub{fQG5A#W;KBNL??W~cmmqN?QAls;Y<1k_a-Vzd zu82`^KUOL;4OeXRui|{g@F+0@8^^WMD?)Fe|6!>;KBOQ)5Kl|2nmD^xohLep7ag0} zNsl{3Dpd=y09kZA`O*!Ow;?Iv^22M_L?EzoIL)DFn?kjxl62%3nwZJNsEVa{`SY!S znVX{_ey3%vubg@V<sm5QMKq0E--g4y?};_M_*|)n3;p{_3)wla@nd-Opzb@WglrsE zpyYxm#gj`qz*Iopuw4Khz62<YeILzv;|#OVI;0iW9QM>8r`^Ckw86Z~{OaXH$Ak{^ z3n(QWejo9Hk;jma)pr&qcMxik$#dBOc4gX^K8-$lhoR}idw45|_QZOS{Wj%a%#I`c z&VOI5tOgLJ=06J+4e|eUu_~E5nEt37|8F>4a>|=Jjwr&YbqeVfqd)*8<F5>iWLSbq ze-hB&LCR=q1keefvH;f-O>i@F2Uqa07oXkMKOr~g5Bu=nz~72|m7XENsW~$Tlar|z z*B7%Y>QD9mK0j7>fo^F&GXfs=$oC!B<OY%Jgd3!tVvkr8RwZ``JQ9y+6IvyA2t87d zcoSYE`3T<Pj))UtCHV;7l8%@YW+i(F-V%<e6KW-U2;WkUxD#$9eF@&`fqkv~a<TW& z!H`lk@6x7qz&!6`v?r`u%-c0rTX`F&8o;UFi?2w|m)IJ+z0Y`y`sxiA*}4(I8q)tU z-wj0kx`P}wfMPk7&7A%?CUQ<~E(qqO^$=gJLY-zU$8{a)c4>5Kx`ncdw8Vp_50^bb z^CkkA-D7XGq%^a1Ch6YmEYiV-^P*@vk1tP{PG_^xvehPgNCXg@O+USiBHOG!2F#MY zl8@5B8_yj5Rxec)9;eK^uP5!rXk){aVW%!JhL}_*kWIUAAb$C=m|C#K;ISa1m5d*n z`H+qFqO>xkzV_2XC>LME=-y4*tgoA#E#j#X@QtkM+<@7c7wM%1$8i{Afj0`<(ezdc zh?BhtbQm4{nfPtyg6#IwbduTZlVE1qP%$B0#9MuoofYjjplO+=$)P`Va3gD#`Yw;C zy{uBwe3%#4RNX6@1e6A0BQ`QNS2k7?&~7VA(}}c!Ga8-5@Bmv62h!C|@M@o8Pp`Gg zt7u>%mh_x44Gv)uwy`#1b+0m@qUJt}J6-m1=W`!3HM+1Qwt-EQOm{9CexJVebGo?m z)1$DbT{{{@uF3Asih8lHm7v}xOu68)*C}^Mi&I!Uig};;FUM>G7lox$HwGNKzhw9L zgpm-nAWvC3&=A)lWf;m-Wun=ow@rFoJmsw`8RGrBZ#&!s-@$}w{XP$i1tTv?w|^j& zcka%zt<&A|HjHgVbuCK4*<HrO^(6^km7>pAJqzlBk{?i}dK6L%=1cHxD;fYACm2T< zXBcP2P&9-YQB5OC4>?syEB0>}KzQQOgsv+aK%%L1NPM@8-wIJhy^eE9Ju-C<1`<UD zG{7LCjb%Vx8dMm>bJP_Jtj^m@gT?ITHWE+o_Ac(@^thc0_LqW1ilq0q-qLJj#|d`( zRa=Jb^ZTi+=H>xh{sGtT)}aQ{Es>Q8`(T+r3n4YkMOUx%VSCo$w~4ColqcQCaYjB^ zlx#e44|RAw=heW$m5t6t>K)nPLBCWksJMfRquA++P=~nYW?`eZqsLASM<Y6k58@Ps zZ?-@@F#>P8S=^mdvB9S9L+O9|p}5KfJxLp=3$Nv&tPl*)E&IVr8bTtvwu9SfKuJf` zQL`Gj0~JDTuJk}q*4Kd~48%BLX|B!}3>>7#KsEe$@r~ltNd@KlNZ_5Mpp-?|3}7*K z7~`o&s<$X=+$9<g(k~*M$BI#Br6w0hz&U9koyce=vrtxO25Odrj)gV&?H5G@>v%b8 zepeyRD1p?*70=<)K%NF+%#@L2y)oc)O`2-gh|=`ANCKZ!g0%sI=>d7;k#rsrGLA7y z#?kjd!QYqAn3E4@MT?(Yr9?SMk;sT3-TEi~T~cFIOiU2z4m*cLdQx&f--#D>)rzvA zVruAQ8W<!p<Vx_XZ7$L<A2OPjibw{b<yjEbEWkrVW_1f9uD%mFUm(~VB0#qSwUjXY zOJq|I9wljrOLQeByOwd~_(w%XUofEusWhGyaVP9GQ+mWl=7>(R4O{ivOao1NhL_qY zm2}G~**a9`(-gzW{&2RM<J<OV>p6y(1DzjK?oOo!=nIR~U42g{m_4MN^iuVkAmO+` zHMARb=I;ByWf(>8q0ezY0Xu^V2#ERrD8o>;H?}qfC^*@>d;CX1Bw5qaKxNg1Pdwvz z`m7$703ku(cU&<hB(UMGjcZVF9H~D7+sNRQa1`eBSYw^LbO17Uy)iO2MD39DRhwky z5=ROJS!Cx>o8`h%bs|7ElTCZE$py*W8LM=+{bo8d^ihn0AF!)C!+Xj-$@{W3ufF4R z94XS2mP<|kzMvkMl&=p#DSZPv_aPhi9qUWo?N<DTi$%uo9QR9yOtyW>J>beTm&KRg z8Ve$TB|Ol#=C%>9sGNsTf-r|52|3szA(tG&l1%>2nL?t`y`oBH(Y+&1_1!}(?qrS| zYj!BLvM8ODdf9J;6^oZ{S1Uc8cFXL;L(cEg-7aoGhyL@#l1Kj#42ykir;^2PsZH{* zZUiwp)6^|;1e(=u**$(Fl2xx@-XnUq@J=Z@_07X0j?E!`g!-tHX{^%SC2sY01E}`! ziOH?`u_oRu5XRgRAX&J|x<gSYOJwkaBuu<Xf!dkaELx|N%^cxA^0EbMeUP){GHH`O zltW~eKD=bPPI$A6_F~zozQc?53jV8?{x{Jqmu1!3J8<MfbR-%Jf9|z}K>RIlgfaRM z3mXgn-nlmyo>_Lc%k(m2`!6p9oBev5*JcZ?E(DjG%M*hm_F|Cixe6P)?D4ZmqDSC3 zbK1;N+GABbr<F;^Vm&c<2=j)03|@3gNtBLttFa+$BE5CIjAI-M8u^oX0SL(a)QZT$ zSs0w3&sdR^nDSTkcDoGGGJL~501u`lQ#u@AO@89soh~vnX3$I%Z<Jw4Z#RX{WnvQL zo{AV<`D8E>R{WtHt_>?<=Htb+xC`ZykiH_rmn;o~QH@=wSvXnJ5BG-!4|l3qkZ(7b zCzUa31&;+=hDy=NmMD3w+T6;zi|OB8oy`V_w7t}*VZ7wu@TB>8d=3i}&jN_V39)kx zmUi+C$+5MJ$0IoM2AOKQt;3Oi??0DjmaRCfN}P+I+3AmW$bCJ=IB}aJk(>@384>32 z;;}%A9)(j$#r_ow&oedNb_}_J=Fw+<_cqTM%F&k%gZ-MNFPloKjuIyOKOmuHBTySo zJZ5lbND-z)G--GkjB*SF@V-9;@ewDWwnVl%WTvUzl0_oM;&rU4;Ux_qkdPxI^Zry9 zp0M={8ilM(x*m?xs&q})oy{^m4hSs62Es^PJkhod8hFY6W;pUkGCdtc=QH>$p~#0~ zH1S}1%o=G_K}&i$c|T}JmImy~7(<wqad-^g^Pk_vYNwdLf}#MPP?3Pr=gIKrx4+fh zR!-PxbkcBp6>fTQ%RFrn&L^@0b~v!ui)oZ`xC+iYF3US|dGsyl7Qyu`nc-DYgYXvT z_F9X)J80vZ#?+V@{ITHRhd~F)jI5j`G?uBdJW?pM0|cp5sb;v4gv}|l=$6d<v5*xJ zM5m*D-9rj7!qjJQF;uaAYCLazM7duC`nz(&2v8fjQTCW~cv{5n#E8!|BiM)O0}`iy zKaorDaXMVG5gqi2E`&Xs5oa?ii>DT7bGveCvuz5C2~KL<bT&p(+8}Lw7+Jiqj38~H zd_Zvxx3v9CRC?ZfOYy;oqsgfXk!1rkM!F1_@pB*}&RZ6#d48mj@kl1QDHG>!dRPqI zbAa7YJuQP{@VPwZ=oIfafXVLp*Gd)!sll|Ae&onuCLDRfZwq-bMNi|Cxzu`zPb(qM z{Hl0m0``)Jat@>(e}?S+fXS#6$qAY5b_+7|b*lo_L_8Xq-=jtgYFaVOt@2m+_09S9 zmfov}BHS=lICD&5u8!0|5spiR1J*i@M;su?(Ka+(766RVqb_r>4(NRA^LS*B{%Zgq zGINoPVaBm%B3;rn*S747w6j#Hang&k&}rsdm|W{3E|-rVU)iD~mp{m<7VY@Rsf*mb zpIqyLt*_j9)`?)Yy`hGe+Br8;ep9FUrPP)A8QXHP%s@S^CVo0}14O`0(aS~FY2nxf zDZLUQ@5w+}o2O3c%lrpoA2yfgM(0J!nRh^rP+!b5>VdWZSk-%NjozvD8(X%0X#Fc3 z<F2M9pPc-;H+i-b#c^Be7tGwv;mf6W!p*`PNYoL2)6F)JlVhF(;vpVvSQz|7kc&S! zlv{y|D0mfjJx7-NdUE+0uA7-aY3mtz8ek`jAcO0DWzfdM3tp>s%kuSoS{k-nGIiIA ztgOu$heAi&Kj2P0xcf}EE@I)qj(@lCA@p_7w@3Z-<25Xozu@63DRmeE;Hm0aN>Qsc z71k-j_*y2%Uz~gXNaiy*3xDy6kh}6`_?<Rm{@P@*2;3n4s>sh@@^JVWG$SwNtcJ!) zEeHXsMks8ope!@5&3q1QnocVTGOR%dZHIqKeq_{O`Rf9T=E#^)gwQ1-Uff(P_=6Jo zH-WtLL!F3-W?oJ>z%$b~CQJk93OZ#E@+E3!_MV&pIVoKfdoDB2Q=*f$R~<IGpcCaw z%>6>bQQ3<qlUeDYrh__p%K>KLZ%h1ap=ET9<^+0l_={o6!29uR6{0d#{)wkiAny6J z7?Y=vl#D8qY=Dfpr=X9L0Y`^xEK5giTj^f8s8wYh{T5}62yv>ma<~xx)>(&xsO1W^ z!1iKb0%9U1<Jw*xp=j}>?12-a2BdW~5AebX%FKPf37?n7^^FM^^sbES6&J9$aHdnx zzp~KE>iHr;=P=`)z(%{UW?jkYQs74m^<^vA9S~yy8@y5}we)j8TQuZ2uv!}_u|`dC z0m@&jmJlkAP$k1?%p%w$>K_Akkc}keuIi%!=n=RvW?YM!&7HKST6tLeTAtEh$&pA! zXh1vJQd<e^MRQKoew#AQQwfFr(LW-O3fhWyRAw}2ywvUDU3q3Hn)EAK;yoYOpv7Tz zIx;BKAnwV2$l&pofOGa}!_mBPuH*#qm7{o*i_qkLk^@&^q)Y12moZ#kQD;hFO(G}- z)ME;H8F5Cc!Bt{Wly|)Hj3so_`1gVwCH*DZi^v9HANd8{i%2EtT?Y3p*_XU81hG}4 z9-X5gVnRDUdDGLRH26Z;18D%PWt0E4XzdJ1(Z?CFNCkP6=2MVMx{-J9@GIyDp11Yj zX*mzh0pWcR@!%0Ik$#(L*yldh6iV<k5&nkk+5%L6CZ&kB1-NZ7)<#KCsH|Dbt(LZX zb%S{N1!R=d6rVsT0|>?zOpjg_FSc)blQe+MJN}o?nb(Z6Ls(Ot47~C%!ui>Gj$sDD zu3^TSZ#>zPs8HhUVp8@R%0;Jy@`pj5<*DU6f@+2eGZ)>$R1aEyh1Or-^{O5!hZ?*B zECiJht5C}p0Np}X&w~nj2Di);#>XvYiO0$T!!$hnVn6}y$|6Y<_Za+*iW0YxAvvoe z1Z|0KQwrC-o_P0?DC0$m;Dvv=+al&h;6+_(PClP$ZSkBZqZ+>y`~aTycwXok%j-+P z&EO-W1|>MB`5B_=syS^ZU&TR?Y7`GRc1BIqo;=O8Xc!-By?*$@v}h#Q;^FfMPT4S{ z%f7-OgRUvnrbR~0Iaq~7Y?nw__=$5~uE65nZQbx6wj}ZnNT&jgaKmc+O7Q6-VU|!h z>h|QkY{(AsGs)n*8KJ#+rgb5Q#9#xgpcNQp>6_o>L1#5}#cCA_l16q2jg&tZgp>m! zX=U9cGR>rgdF>=G9VIHGlAP>+$Q%%q9vtr!Bsf0+hBv7jOB{<N1BZ*olpqWo@=^!8 zHUuSTL}>(7d@IpKo!?cJVt9wzhB=!!qwY1dW;GMoRi3#5@-cVLk6om7$V&}>N@yJr zO;q3)jodih24rts%9s~Zm=pQR?=cpkjmsKMyf3nXu-u}xv-vTEvtOdhXSNkibC52) zCzMVXjUDv4$X>kqzj~-0{tYs=(PJlmfb98RKyCfAfVrL=J^Dsy%kBB~GCOBZd+j(m z-*^nCQNNf{-w>2aPIbY|@h_I3n*ZYV(MEg5=H1v6@zW>HedhjAT0N=FN+w+1Z!<B@ z-E|9zUz}bWX>mn$W9bviNmp>kYBGW<Z!oT_py;-=e-G1Y=$rz|z9E=>K8~sK5j5mC zKHi{@^$1}1!C{wNy3KyfY4?q>trj=&qqOg9QT<3yVqr3gE+~VbX(o8x+~8)G%MPp8 zXYq3!186lC@)ifEN9ETZ81x=BVE({&D597w^J7`Ac7;dGcNY4HlAhA;w;nFt{xWon zI={TWLdq+VPq~S2*9lWUDVUyLp1Rc0s5-5`^SQk0{?McO<7rCYtoE-Log!GD#MG?P zXzonm%n(awd*+z=6vK^*cOu;qy%O8Orfp6;Y{nfzW5^F{df|427iz(6f~4$UF4q30 zd=5=O<4W()TH^X*h_6^sxzZGNdTtgCqbnxxXFV`mf=Lpm0@N8gPS6#u=pbLH0T-1u zf=?aTk=b-KJ#c7$4kr%i&#BQO6Z>ddeFAM~V^S1CF-pPowwAH&{4Kc#X^H<Drwsmq zkhCA*+ZAZ?MP_?Pqs{AeOB#f2p~cFZLq~}KFC$H-3|r8wB09cZJ*%bVp`7e>k^84d z?mlp^S2Lf(WL@wFxYr(Jy!Y35Z~m{3m_cF}wg@hgl3MCml?}W%92=7fU*sjFWtTjv zdv^W2YbGsw7q5xm$BpZ|x?+>vY+cJeRQeXNKvnmul^PZItk82*yAnmP?x6@i=<!dy zd7pgKh4=(Bz7mt?{D|`WLOfsS2j`<uZ?4GU(OrXbHMmltOb+WJ_69XLU21c?10{G4 zQGMhd8YYAQR9K%hALMUEtb5!%I4LLG&=ACjC=n~s@&SVm^>T}ZC!@$(oAzFtcC}-# z=o0lex;ed)W8d?~{KECk&s4^F9GPc9wLU$_vSbO=9nNgg!M}l>Vc+Ofy<nz)ezE?E z0Q$hBEojYupS_cN1=EA=4Z8CU7WuHo8FM=mdxw>}-zCc12^RDfZyj`XV_c-9D`eJ@ zGhY{;tyjnVh_gi5T$`m{tiM2w`f9Vig0L~pZHnp+tPy|h{cU_x)J^5{=5O38rH>_N zO$sN5H)D<yBa}y8C6G(*8b+aB)tGqpMCw%95z-z&rBUjcvln*f!S?E*7Nx#d;yyT$ z`_CZK2X)Cw&y{27KxcbS5ynD3nY>9Ktf^FN%ipk)lZO3pbCHNr&>P_49XcGvgLzgm zX9B0lDqrlu6FtC_o#H@ReSisooh@RkX~^}vkD~br=ES`lLVW3J)W)gGtU22UC?20* zh1Jt;bwnN(y^CRH=yzL&E~Ht!qF-IAJ9E)egtg_ls|&N-+s0I9tf-G2dQdtbVAkac z=7V6)Wx<ygn6t&rI`Wwwc+C&q7bjo<5OxaE)l48;(w9vsS4}Ck1vcq%Ppv|ti9l<! zc%{|Kr7v>n?ZuRb6x3ziSYiN>__XopjBHr;#sC-%R&)f>Q_mq;8DdE}PJZ#$)$J$~ z_65_sIhd;Ft_oOom&mj+1FAu9aUPS?O)ITmtOk%eClH!)G>8cxi$ELL32}OFxG5o( zL!hQXutsQt{pWGOK6@bq8sedLdA>^<_wVi_kcUGqZW73eQ=kTDESXfmcNP4N7yIbN zHjcke;2VM6AM#!h`Y3`(0-`|!I8N8JT+VhpsXhdtCq3zr4YC7;y#qx}R{TPI*;;|x z76qCULwyVjy%T%hOY2@)jgRELKZfuo{&_WkjT>A!n{uGs>npkc&OdfcmaE1}b{~;J zA7jusuGs1RSD$%j0L;Ly$E0`;SiBlRaa3^GJ<&0J$jfvDgVot$X=+E2+2=$?<Na&l zCTXMacLQE~wmUVL2ln!<tJavUggtjzWNq=+mRzVuDX}2@nkz;fo~5A5tQq1#{J#xN zDOdxV$L07rL)Ah(B7KT_<%^t5H?a&;D-qO@)%e^_gurc<crQz=AC}J6DT1zTWK9cw zi&e6d$m3?4fb9H7HM^8834kOCr^NqRf&x`4GrNC|wnBMn7v>wAqVI!ph@EH~-{E!p zP5O+!DmUD>{Q3LhzYFPjRy^TQe}r_%KX=&vKVRDSA40nSsdP~=baMXBa(uO_t}?bN zhOZo-Mq-s@P(XEgOR|bEn`w1ROY#O0FbnCg1PSf3!pv#LZ8jUGPHdE$Pt5OM_RE&% z3g$T7PvV?CrzVinjRagfU8lyo4?MFUjx*nHs}H+CIwK%p%#sXSGDa}?WDF7716y(l z>8K~f^;yVtjgU!<xkJCu5??WLixm2C4O4>3p&rT^CZW_&s+dGFqtS%RHypJ(483f{ z-8@^&Z5_MEvAa|F=&uIYTDvQbJ-2=wK*B3dliX%M5QlclcC}G618f*#cG}H*J4SEi z-~E+tc+Q<CoLg%dZ|nfV9_y{ECYwv{>m@uaIQtcz!9!-{OPG46(s4{C)yb2|?rLzi z3$a33?!x65%cfP>Q6%d>%qP4}Iw6sxlbWnJ>LIwTS9Y_;953+mKL95bMwx64p23Ab z5*zd38sGfV1VD{+FGr<cy5PJ~hwgDJ2x9<38p%->{fYhUm_u3)xzLzgIu(4(%@8}6 z$BBu7R<aw<rPzchMc@(PUL=XYRvNG9PVN@T)I5Su<So1Fo1)_v&Oz@hPLncKDAavq z`v=<{vMZ=Ssc+y|_xuJzodmmCmi9~EZDM{}8d2ZnprpYF`70TkX1Q6$w*u044(zi< zOGE}i+{{G*;xdltE`~%ZIYXUcP(4*gMEme=W~!O}u7FvUs{E3?ngi!5>bA-Qyld(; z1xLt5DuCfmzbUG^gX%C@4WmrXo|58MNcS_psp<Jf$o7IYx5_sy6^dJyfucI@<TH4y z9gRt*;CX~<=1!SouR6(*)FC1}Z~Ak699}+q(WZF*!AkkSr$Q}QIGD)Y5$%-21Y|iS z-5fTb*o_Y;qvG!jMnz~WWtKv%IG<>>U1B-BJ{83ekShp^jaY?0V4bzeIfPE<m<6KG zDD_5<ln28LbYi|Kd7KT%02Gxf=CMOq8N&oCwLJVO%?;XT!8<M=|18DhaHXlBtgtNI zzRWNw&cq&^Ool?1lh7lE1Z6IgQ-Sd^lTIWBC)Em$-BGNvF?f|DQa2H&Q=e;k?`s_k zDk%~H&ODh3gqp>EY~YG5KPvXTi8o+oM_BI)SuJsrW#lfB@dcx2?zEOj5ye6T{itg; z#TleI9N;9<V-b8J0m`s5*8WYEP`-G&)w~T}!K+f>qp&TVBnGS9{?Pnh7}VN7?&Ip| zZ(x!O$qN=+!Jc_Ew1GV!!8(g&;3}rz6-;vq2~=lxAAPGns*?Fu@bt`GX=|t?by#t! zIAe>kLXz->OTUZpB7|xqW0jr*WgwHb@R;HW(>hsppg~iyKvM@g-Q_3pQYRpEN{Ygo z%8+ia@EYa`hh(|l2<F%?fE1q)hp&7(Y7sT#tqqNudApcso~5yRxrC}tPOn0E9{P9x ztBUS4wXfgvr{jkJ3j{>>|5rTzpT6<`-LsdiCT)+bj`DrIRv*Y4guqZs0tQ7pBFP9U zF-gty3pg+l2r_m7Lgs)_#whmO{a2Y)afQ*mD7r3Sk+xz9Hj+q?%55Hhu2)g@qSoRg zn|pAG!!<AY_{Tu*eaao{^>_E*_Y*r1#4SZ|D?>B*R~nilt*9e!^xrnZ$;^gNg_Kqi z@1&8@R}r(^iK~_{?uI6jsj%Uyt7MV22J^|QnyC|!E#&>*Wr-s^XhR;F&s0QPBo&fd z@(0Yp8kS~qhIJZGC-*6rsoh<zXYX>uGpSeU!|k7%@uzreHTnRnp1&JAjKOfD-Mwej zHui>Wy1I4Sl)H`9P^?}!t9Q7SI5skGDfZN5+EC>Ust=>I_WjRoiV6}q=*x(~;aAoQ z|Dad9S5XfNmyx<_sJUu*>owBryDhCtrm}O4Tvn*`TY1D+_RY3>PnS@fD!n{dC$2O8 zUj9w>MZK>s&`36OYPncJqb@?2oY3O@)cRza*WN4+nput-Xqjt4F!=~jrdqF2GoaAE z=F*$a1&H5h)>x-Lx%Shp$D%|XGzsaq)VZO07rJL?=EFszWHyeI=^1XbOb1+p!6x5c zg=T?Q6y=r$4a<7EuD4hvY-HHdkL`KSsG`>gu&AMTYua5+wG<<k#Z75pfki?}D>cWn zJ*<FG>$hyR^FSZ8IjdYgR`%-{Dz_+DlrJhi(8?E-zb$`28QX5ws1AZb&^jsu_cDri zP%duKehdwWpb3+?9^xX~8>fczJZEx57?Zggl!n6}J+jE9dvk;&+{!HNWnv%(i>Bia zgCLJO4h%`od!l=puvs0*5Lob$H9k0b0tb`eWweD!lSTMrpgU?3ew66Wkm<*`IGOF_ zm|ncAcb9dE*!zN^Ox1<51^`Syni{)3h5m-9k>}d{?A|TjF2i++H^<t0jUgQTRiOHI zq+kaasaEIl<0ozY<eFE-Q;x?20#U~L*XU(BpI}j2eb7Trfzn~{Lzia^4u_bturLaC z!U0UuRk|9&QFKN&eO_n7d@%PW;(o)~K7Kin5XI&L6MI>>$nSXj8+&O8so|#dl-*uH zxEKp%nZK%kv*y>o`bs1QYy6pah8TU@a>n2%NY_4i;WTmqP~oI%B22m0wTGzD%ZqbJ z!>q(J&Fy0MJ`gt~4c^Ig{eyfzmSJILk;g6@WVz+2@qIsyHSG~*poAw5H!Si1W8x4B z5l_!G=Af9KnbmZCBat&qDGXG^T_t3qQ+Ob_L_)td48qhoT*nh@39SB;RtD~}b7~G> z7&S=>UHF}0J^uQAtYA$3?wMPcMR?N#z5#CeFFmq;WEz!sHcP+HvtfOjF;u!riLs(= zd<Q8;Dfo+U6s7Y#?4<1IJ=FVTT&~HfR*i6;TE)`^_(B7F@c#ZZOfq(+pQO<}U9)RK zFUP9Pm#)HB&Ka>cVg286>tx>|Sugw93)$CB0zYHz9XHaj7t_@q;CGfC3`IWnKUWY9 zu3ysPKL|VFI_h^%piO5%)>X<b0XL1YYpxaSfnKk4kJOqknw5efu8oa&Oo5=7q^@DY zPr|=3$&sGNmdL85z=WuTw}y5E6ow`MtIIP+Ju*O`zqxD^RggnH;&R9<v*IVFUKqhQ zvm!J4z$-hnH!gM{HP+D1fd43ZnV3PZ|I<m>Q+wExq3vk5x$HiljX?>K8I=(mnqU-L zGUwtLnR|85-m7V*QZ5|uY-{CkNpkaRg(>Z8;2M@;qt?88tTxeYDFAE$sb#6&g>-<O z7BK>GKp||75+|judi{G7{9^|E<8JQT=+!fwtJ=HV)0mpWd-b-{NQ{$}G2fZ0QSyrk z^7>e<4a9r>L+!wK7tM`h0C%NLz3F)Q&wsO8d_|L-B|-uL6=MCLL~$omQ$Z6$2Y~&5 zsy5WM0XnLf-!nQ)vQ7y}b8L_#CFoG&B<BL6{%A@WElUO&DI~NlPL52@5~VU`3+c?o zqQ^$iO`<6Fc}ge>0w@fs8CY`_WrC3_lY!Rff$$wEHO2INXIgyayS=kHiRV+C*#MWP zS-#V&FQ46Sd#~B`e?1=HeXOsxxYOv?j;uW-CzDU^;N(L*)F;#~-Y?6ZRm09tKZJ>~ zGi#>zjwrpPTKe(B$@^DW#@ew%cGE{%#@dNPYbH<KsP|i24|dwZ#9y~r7*G4$Mm^MG ziamrUNokmjrNiFxQ&m7+l!dKB-uhGUpvO^Bz7!|oM!qyBwv7CU4~xHj(fV~jZ!mt7 zjgrGW!kIcF*Sn9%of@?ZjmXJr)fchqrG?p|bsqaA*M};3Y))vjKY<h7nRrjkoWSVp z*U!yps@X)D6*5OcTiMB&D!KOh&(}m6YW;S9p##a6T`w}tv!qC_4}nfRRI{Vu%Q?wB z$+scO*+HExKGN)kS@%-*0GWrTrrZ=DG9R|3yMEZ{(|FdSZtU^0(Ek+RNr^EhGuj+| z(S+32VMXOnni)w1-|$9PQWCSxTZhhHnK*7}H)P$1)PGjwBI7$hW(++v;)~J<zXCl> zo-k{{k<n0Qy4}&`NKU6(1Lvw7JDBRiopm&$us1J-!Ptsg)#E8YA2u<R`en2?Q6q($ zvmn%xVISAXnwvpWgvsZ>mNb3zSBH>r3_QiNpRsTtyt|ww(5&e7PuxG|nBU|uk)WHH zSXn4jMGN35fVVaZewy5$%n*S(N5;-+tmZ!LfVS2y%QvG*tU=T6<~^A9VQMDIB^Lx~ zyd-g^j8k1go4dioOPnsV?*2_B1ePdCd3VKK@ofbp*zT4-6--KJk=5N1Ro!~BwO&{` zO71Uj`&Chf_1+0IQ1Tvwal3JERs-C|X=-^6T|c%Cft1NW1FlC7XTMG44`(mMV+uos zc2;c{H3dnvnn5QYN{6;Q!G4%G&NhCI!|v+g=+54D+M^plpgl&i9!~qbQ;nV|jxJNj zwXELMqGd_v`IFJ{P$7deOJ3&rOP}bQl|FK>Z-PNN%rS>V-d`8c)r#(zYUegBq}ZMZ z!-^ir{$HfM<9DWEu<qGOI<{@UamTi8+qP}n=-5fecJjt{IyO7DbF$Bzv*zsmVb83Y zwVn_6AMo6DSJhQ@{qEs_iZjQ*GZ#ODSlcqacNgM3rjr;hW$4=3_`m*`RdP`Kf08|# zJ+xAr%a-gzhqF@FoIWa@leSB~w4${t=IFc{F)dY)HhS1e&v}&$g4>}*-=SmGM|S`s zmc=43-|OjEcgcbKeoE|FbO$KQbkyyHv~>JmD-q^0I^lWQ9t<_CH+)_ELHZdS(eAP) z-@ED3s2>?<jl@CvnH-Q4gJw3!&e@T~Hq7<HV#kAcg3E)!9;1W5+a?C-UpjETW!|-V z{IJ|J+HeVxfwj;tYw^%bZy^cRWp(-*wy5BEjE;l|SsWp6L+`_bBc|hEMg+r@GI$t; z;s-a1fnG9V;@~fB`93J}jM120*hbaks6&0@XL?6WtK@=KHx*`-6H5xm=*Ng@gjIH! z(eym*SbE2gM>&6ybC;*fhZ+$&+zr8NXIJ`mR5=3@LUMYMgiu^Rb*G+IcD>ecpPRCo zgWlKCc;QLcoM8ejuBd;?->UxjXOZ2G6as}@oQ4$pQ*(xW;<srVGCPPB8A})rv|@m9 zX;P_YM5F2FTCQdYTuxsSmAK(I3kJdrDKoAokSGrWye<|fz%bG*crVu}l}0S%4W?Q> zVrrr*`(8E1SZnsD%8br#Sj?$b3=E=9vcizwnl&D^BFtZ%dU~s;WtR4AKm*ebcBVk_ z@A^PvIbuE?kM2<fokomy9h$ZzXL<P>K2^FGdau1|oJJ_3f`~vY1Sd@8+@EKnM2vkU za@xsES~|LOVJ@7hHSAK3B6kRQayttZ=9U72R%Fv+leejwFf%yRY<z5F8})TW$qTDA z%V`XCgi*P%d8~jVYnYu<1Ap;1*b^mtF0*=$2-gA&?Ff=ZmzyPWK|E+2hOaBcJIe-? zXbXFB{HMAU&80Zr6EnhyT?D|!)aG_cik|e5-M7<OC6X4>_hNa<D~S3>!2Bd%7~lDU zI`kI(inzNKVY9{5)KG{bZiRzNjvN-HO5va)9la_nId|MI>Wwkf7A9HN0dwf>Uj<o1 zC2*;3t4Tk+#xp6}Ub;1cQjD~YsuyKk2MHBq!dS#(dj<Db{{5ka-%-VE5<8qVf!64z z>C_upNw}=)|J5;=_B2U6|Art$`TIO~sDUWuTo1kdC4&>ZIWKXdzT8HNAs-b|3a@#? zRHw$6qzL(fip^u{_nu8fTnmY*G!jsBdYR~T+}AbYvn_AytDGd7D_XaKO>BzT+W0(V z(ggqNfNHcAnjL-oV+EtnCG(5m{ziZPA@A@gwJ{umx@{t?h}W07?cF5v5*We@${Bs+ z%HCE7Uz3b;LPq_8gJGcfwAm)Ee8{S5-XyN5=$p6SwBG&u=sve7gnRhL(WNeQ3iiYW z+-2SoH#I=+q7A2`jw*n%4x>&T)&l)(LUN^Mf2l00oJ1$@C@rrTlV5pY?W~~%#a^bq z<rgYjr32^bW!>dMHDsIIubNFma&>Wutmymo1QI*gRA&D`|GYhdT(?fhmCnfvdgo5F zw7G5xXIs)Q_;Pwu9EuOO&s^B=rp@KSPxnuorQfjsUbv5WM<^A!X<$D*^F%glP*b1C z;n}KTH&qNS8a4E^7F}U>MQeO2iW6ip=Uki@O;)+5Qop&&1vCJfvs8eP=kGf-DgD}N zv{xMU9zE6aeQja8NIoHTRTy4PQ7ZdvoO4DXATajyt&g?_D$v$N^a_vb^+-iqS#_*R zI<KKo17GNc{1h#9nh{mb7=8;dmYyL^;QWMU{LlH8H7vfOGmto4FK<&<Gn2u*^86A+ zzpe_<zf}V|9Nh!a+066e!B6G>uCwG3cQ&|xxYZpV=JKT4cJHKKPNF&OblR!PT?=-3 zZ%~GW*m>J(@semE{|47Fk(x)NNZ{B{O7AhK>NmL3E&J`Bt&9G|w+D;y=jU5DqQ;Ha zP5IT$Uu8{F|LVeXCVkWH)bURh@bhwS^@<ZX-_+l`GdeHnm6<Lw+oExAts|_dfBnfH zw=0eKYmBG1({a}KUPvhwl7lyiN7QI_K)&1w2)?K|>!ke2@fWUTpHrq6C<tneUso30 zd<}TVik1svs8>J?PX!Nm-^xgsenV#s_L<*scDLz6{t^3Vph<sWsCjXhoV3!(WPKgU z37on6S%Zc`i+M{ZPb^=dDgQ<IpNsTKTW8_V?;?Hhdy|&w|FKB_PVeOGO-%oDoo?%n zDvIW3cBhtA(l3?Yg@GiMg+`)*WbtPiLyCybKw1#ZVLk42-b9%#`?fH@aIe!LE_XjZ z0nrIzCz9|T<dZ7?X_|h$d3AX&d~zeR{chv9XX>c7_v;z84}`~N2tlS+kkZT}LGpYs zoHkV>%a(lX;E+{s`bI&n5Hz~P3gxbCI(SMr77>rH{4N$;Z)@jJHqEZyCAwst)^`v% z0_RT|+4&rj?(XrN5<Y{{mfm*^?L&-|nF)ZtN2_w9w%3qbonCjHV50fOPg-_X^3E7P zf?0fsHkCz6XZZw87K3fPRj~%zDNN7RlJWwL1EEXTfyDghrGvE2o&2HxEC#PERj~l~ zqSTbDRMCxn7$2Ajx|bwiy;{y$6vj(A)<p$1_@?P9VDPI^>K@av#aoGpOT-;qNpvB} z_+dPyi87|**F_U%)q<Gke4VVGcebMWay9h1_Nr7e@SoMZBIS%M>;Vu@E74M0k}Gf& z*2T0#J-uMiWvOzBW{^KgkxzU4_;HWbxPLSqzAA;E*;Q7KyBL?42J}>>fcsn}160c~ zC~SaHTzJdnGgg>BTdg8~#%@Yljesn3mMU`&##GIbs=P8Yk)0aY(j{0}C9<)H&hP=P zomQf_pTAO^vp?1)Th*+GHC*NDowfXrxj;s9N)?+KAZx`Zi@tc4)3l)jeGUh2B@jyQ zs=zg)ee}R($dEw}WU9hA?i|+BF=Cj1xZY2pJDwPB!pmZvU~Xyp*}*(@4jX#Ji=OQn ze5o*~%sNts53b|@{Hx|%dDjmwXhkQt<f^hG5s`^RYDgSKZH(vtOOW?W>>*_AV-{KI z>J3|195L=>G+$dB^YM%$1jyxP93KarvvPyu<$69q!v!&0yYGr8xg(ALbdws#cTaiU z9A|(1C+_OHJC0BTr!Sr>Za*ZB)`=F~CFc5;Oqz04C$U6v%NueZnrGG#<Jd)~PZU4h zQIzNj)K}WJlSKg3TkQb`+C+VO15~n>e?&#QR9I<fb^BqvTTY?mxMU0-2S#)%eWy~r zdmX(LSq=Ow%IXw8({$W<J<3;jyHxJgKq;I!jOsYIr%;g|npHWmJQE-`m13N=lI(~0 zIM<e^=3YQ7<V^9#EyDJSrp5MzmS|HGSl*{R*dUJ-$%eF&aN!v?Xgt4^Q0B;ua+W>S zX6=Avs}g{JLXHtWdTH1tRmQDjGtUJ@70C%r&ZHe{0?>}1`0<A|YhR|obWW*ijaQ0~ zK)D=OhmMf7rmmd7os_4#OH24B{^Lk^Xz2(SM$8?Z2df``U$^HB`Sd<Vzo=l;2<(qa znEb5JoTQb8$zM6e9}tOy>uB4=QBw{9mSyH7lIG%LkY-}=r`X;L%xNaD+BmbUw1?a% zKcrvnD97S+Kyk18{YnBxEHCf+B3`J(^UDI8aUgi=Wr6kOlw~Y<M?}pw1w$QBUKp|V zY6@jz3W+iCN+~0wqu95*)g&xCS+~#+o*_vt<9=2y)`&0Zq)MH2(DsTUg&}omg(*dS zuu+S3;_r##U0?pF@*@OvhJ1oD)2QK+4Ss>uI%H~B5E)NzlW)F9kUmGce0NiPcWil_ zyjcWy&XrN^8XG8{k?W<uBj;+n1JhaQGap5rY%8hhm9c7&?w17U++LeG_JB`bp&Ms~ zwU`<rPF2QS0kdbMv#<n2qp8Vi{Z>SOpd1s}e_H=7Q6-7ctW;)JaI)l=v&^}bx-8zN z1)uqfh1>2ETOvkYc|rm+^`Zs*v;o(!zt_xr)Ff1TvbefIaj%8UfX>Uj&P4Z(C?Nm6 zglw|U2Y_YS)+p^1<LR3_bgHl5#B3FIW)hQKc&8OjYkAq6HIL+Ll|9NcbOzHFSrB$) zSmg0-1LFT(i*evb3;filMP2Z4mLZ&dcgW0;n=gx?p52B-R7k2~%2I~QSnse!?QUH+ zlFjE=e0i@H@YZ!DWD(`{mAR4KMJbU{p7*YF*YwJhD{_(ZSK~=8I|-R_F-_8ozep_Q zct?5mJME$Sy|&a`vJdtk2ZeQZw8;OT9}@?;!ky7?HR<8oq>b+X&13R^DoV|2w%>{p znxCCs1R0IOmQ7aSpAr@_>Nz!A@`$wbwI*r>6ve(ZJGS&X^3|zxyE?~V$N!L&dRydR zgQq!Omk19%E~ijHHTCdD7>;|++h^`_oG;tQ^!>kHxdWaG!Wju6fSZhA*PiSUj`A5c z8I!(-1QDikZ5vm^!n7gv5haWShMYk>FnfP7jao=1(+7OWCo37PiL1k}S%Z63Xqk(h zN>$~m!j$Xh)ixdO0rKe{^?GtM(A>RK@RVii2<&aCh9?Ubt6^$$&73u-Ep|9?Hn9cP zQtU3~S-atFkh#W=x%3H|jM6;vG|k`YQWHVXgbwpW*e8DLZFc35w5PbMhnY_(F{3mY zTsP<D4(x+fqBeN5M#1mToQjH6^riWswM{sV?2ai$zXrSlU&&^h%%FU`#WMt8Gqac! zrA@(f_7FEx*t@^P!OfWF3;#H2z?;qGsQg<eoFzj|vfwyA5$cVyl=FR%7_A;No%vRS z43{5Yu6L<jmF1?4Ip%Smb=T4C?^Kf*m|q7ksl=z`n^WI8WQ>d1u~`VB>-uu6Q;#BD z7COYpKaXVxIl3#u^Xl;Zn9GCqWNdpeO~qIzulna0YXoX+&cxJRJbyh>c|Aae_68M; zRSJDtiQG0L4f>sS80-jYQW^E@R4|*;f$65kksEOK1Uf4E-PO6Msds_2ccy$T%{Z|D zBGx=qzHXqE(^Q&xyQQ|@!%fx)Vck`BzolD|GS6YFS{tXgDjI^2XTA?r2u<~Q(U0E( z0vwZ(Vp0_x=po(jDT1yetaCnurZe10%%gS<pBr+m5*TF!l@)~I0fh@QE<tl&xvfwa zSr{Z~f+hof2VIKp6UKd?mUHuB*ybbjb@_IWPsX>MKV7a=+HTss{X{NpPxBZs!X{i! zp@#0Y7rytq8O@UL+Jex_%UTw#QXz1B5V6^iyFNf7r@ONvBW+}<Ou8g9Ot*GCNs$%e z^ceA)n5a^enF2<vNQfDLwHn>@iY$2hV;FUezu!-Y>V-LFyH72-Lif4mY9P;`7Fpt1 zpEN__BLCYT3!j)<MttbX1<lw4S5l`Re$X-bNT3ip%H07vfw_Y~gxX9fPJX(^0L_p3 zxRPdsNQOVQ2;T{7OcFoIIloxH!FRFrAWg-wB63NIX-$a<(C(Y$J$dMN?li)qoJayv z05)C+XP6XczE*BTSE&&VID(iIsclpF*Yqe^sqP`1^boO1XfTHFLYaiNH+OQ0bO@K~ z5=V7Re&~Q&7^{RdS0$V&+a_Y!4zYBJ4$7dFpzCy(8={znKo8dqEzurM*aq<S7tC-G zO=7te;8a*94W1?z`Rehin=P$uEvdv@VIo!~E5QNb`3EW<Qh7kIb-!z2MmX2D0fA)+ zA_jHM3knl4G6?>jd+$DnB}=AEI@d?<MPWKPw?p9N8v&t@H`gV_X#KOBp1L$UTpLXh zuqB(BR!(*|whH;IkQ+NM+bMdFJkSvvADI=oGMVbMKINfteN_<e8uIva(_<~|)q&<g zd88ocpU50k$w8#hRfT%4vG>W<q;ux*l=1C5H8`!w?D{z<y#lBR3>vhDBO=%*!XO=& zrsY5AlF;(D2qQLOOEg|48u^)z|FS{hHjUh?{+(ZseTT&VP6Yd(kx=D3zZP<}v@!YL zDtoM|wKA$YmLCRa_Jk3O4w}`FRuvO6>EfE&T$*)Bm;-wB6FFyCs0sU~je_^b-<gXM zxw77ZX^WiYOga81ao5+JMsDITMo{4DUG81a%v)D0u=nfZfjvO+9c!plW4<0w6f%v3 zBMu$EO3~$IfUdpzv<+YMr?jCDdG9~Njl}IvMZK-$u&2XYfe|1TiU(R4^&vd<!J$$@ zlu#~joI)46Fmg5*ExtC+9&<E}^J?e@a47QOd|<FCOvG(sgNd1Zf!<7wXQd%po%LRZ z(`|{_)_#h1DI`o{i#An_hq?F9ZiKzUUA2-JzT)=ZCKzzTTCVkh8Y_;C;-u!v+{M57 zrN>SMknn3cVc!F8EnWX`UX#5!bF>$bvYcRC2xhceMwiBM2XtB4rG%W^BrK*}=%^vX ziR~8(uT+*Dqp_73+Ob>Bywx;KV2p~?CTX+mRI59LWR|Oy1lvr|X*$f>Z8|s`X_0kC zZdh`xf_LU@Fay%O6g`}(c3o~a1mQaFY8ZLX^zGu@42`7^x~m|CW@(NZlZ-L8sx<@p zG(<|QQt`OUl9owr<l7cV>{aPT%xuOuGnHbO!#u1!JK3{_UI7<}S(E##Y)cmUdDq5O zWHzZCb<*1W(cyqnX%6Tk<(sSbKQ0%YOt&`mTAJm#a}GSK6yRra?Ps?>&HcX3CZJM< zGBZ6@A_4x!t<0?V?Ic%dtFAFVN0xdjJgGr0+{Y8PD(IN8Cy;Cj?XJ2b50awlIa%45 zjcJnt{?@{J37TvU7d6A9QJh-EDImjv={H7_!9>48s<YkiO$MY|T(1)vu5ScqO9 z#epc}aQht~xN(7qj$;Dg`nV4LAY3mkYAJBM&{!;Zj#ht}u7AqI^8nc)_=YnA?dyy7 zxxu#gA&>s$3s(>~=ADrN*K*U=Gx5_j!{}`+=Q2}FPuXbD4I6vK*LW$t<J<@X>yDqr z&*KmDM6E&q&1a=y%(j%RQ&eI>ayi!r`)n&}Wxe<rKKB42o7P{J8lh7{hE~awnq_Xh z<$#hc*vKWIxRj+lXP0{9Ugx@|BLHuKJ<oyw)r(Ne{jbl+OD!yvArd7cTu0erAYYA* z%qXE-!D|C@`*684hGfk#)km1zCun1Z`m9pzT>U4^ZwBPOmgx1%^jYN;U<zqUQKSaG zSeAbz0lh0;B`IH?SK#am7s9q*jZaxyZou>diRW)|JW{Ly@CMu=j$uaNwA|fe@l_@c zY1DT0{9HMzXjlvWM!eFtxtHcx0CBhLvf}|E*{8+xKQ;Gs^qSp&;B8qsML+g&c-^jX zJ!1#GUeUd@L29T2K=dmFX@laSrp8jh(7xMwF83;h@thXmSr$fx>=`~m@?du}pcM6s zudpG)@fmx^bV$syI!5sHOge_x<mpv!f#_=iQ<q?D1Od9hhaczWXD&C{X1Ty#(tDkw z&N#nP?sTKneRUzyU>>Z5W2Xh3N8%2!Bc$Q<lOfr0%{0$kcTUlrB*aak1d1m^QO4Mr z_J8?HOcYlnq&Ne}GL;zfj7#}XsIEe9v$z%eC$$l=#b+ECNY%y;h~4D#+NDM4<5f9{ ztXrFE_ey;C+9$FAFPu_MlDtKRl#;{0dP;ZHa?(8P1E?S5VOd9KJf{dva+CN@oze_X z95YXx{fMK7#Mu{$sJ-<Ny-dpwuudoBt&*%v!SCJ3*V)$B+6S@KKKiKqydRWXrvl1u z2o;`_$%26qg%!rHI0SE?@i?$P%mV%>DJCA<C)z^z3c7WY;u!e0iMMP(2G&rH4F`@% zge-MpoLHpJRaw6XSQzIU|Noq|mRhF4%A@`GA^e@PQv5er>-SQdnWfGD4$V_q-ad;< zsr<+6$(ds&qsc#SlR$nBkRd5RM_>^U3$Q?ETtf^I-%0<<$c$u8#%eMW9b|{ud;74c z2dL5gL~6G3<=3iuXl_|r+SF>@wDN7*ytLcAYVY0VVFr23`#2AmpYDG0zT!Q8|6Xm| za7NYp7(tasopb5gmNa~&$eu2-4}BLM)en7_9rgcvdL`F@3;U@&>JR;5PyB^+iw~8I zgi#1x4^<B{hGK+jgt>>5L^nuHCLSR@8i6-`$U}MT9GEbGN599z9q*Eq9qrr}B5n#s zK-aBAY$`{848yI?RsX^vI6SJ<3O53SeY|rc$Cpd_*VBk?S<cA`UEWQJ&f7$T&f4l{ zHc6q>Z<fe1sam%1vKtp-N{)(9`IN|HlN&hh70!y>9>;5$CLZb0F}d8SG7e9KJOI!u zkwblyhxiU$o2VONw@x7})=kgkcnCpnuUO3v#VIRc!Bn&{SQ~HSY^MZ4?`Ve^Z{ujk z4U)nA8V0h~<r)B4>voL;S?hYu1zGEUor%CV(T|Jg(-Pc`uywM70QrVj&E2-puZwW$ zR<}K!eeQ#h>{~(*_be<}I&dVr<!5gj&;D0+odEtVShtKZ)&dHgRMDQXV}5<1j5)RG zkA?2m;(S|y@5}q)1uh0FD|^edy`>4jLU*o#*fc3Jo7SOBibA`V9d8aOgPJA0TccI? z4|*l+ElAN{p!VSu_pQSU6Gpc*P0+@ztybKA`R#$Ad}o3Cy|9q82F?RAOSr(fYqMiz z1<mFJHvGZBrJx-u>)wNO?y$i5KL2D3bJkbJ_}8c{6gX%>z7|wuJ1<k(g`zzqT(W&e z5yRP4h3%twp@uTnIc$?){dcdv9Ecm*1f`7KH{|O@1{w^XNgG&Gu_M&Yz6MWTZ=L8b z@HBKEhjot2=6?Uooz!O(0GqGC0+$q$K2$xwhp!N`N6}y0QWIIhV;TBQK9m%lw|P6- zX>b69^F-+GJ-xU91t{icW5KL$#JD?#%7<=Pg>T$=e^|e9htv}4*F-b@+{O#>T%Zs$ zGAbglTksa%Ex)ve3l}!*D+$oP7Z~;LY0wGAJlB3tjIhB@HMEQ5x5^cNl`%&8q+Pdh zei!s_${kZ;^(0SjCO!yOK4yIj_NtmUY<D+~r>_s#Khr#ge>1fSTDE8<<Qazl2b>rv zkn@js+NrEGzI9O~!QG0Ezd}V$t_*|NRS<DIbPeqe3}Ekq0@dyYId_$q#M(sh?ZfS3 zhh8AlX8fHY`KQzXEymS;C#7_<q2axMtA~o@Dk6KT+!p5b9^{^MPN8<S6*2`u;k>wL zlu#^C$1tW1PFyw)!MBf)RfbI{lL7g2xssxp{Ahc)eSiXa6){e-UHHZcx^~cSUCduS z-NwNc>r@#02Pj4Inb@NOTNKWORJiWY!966Z(@voEu0?4=v4-$78$)<~RaP9;EOH`G zGtVL{>LB0L_y0jgGtlOh?j)JsW}m%<&7JRYFXWk*nEE%K5YOdOtb2kmrVO9<gvqH^ z8u2x0x3aXkFq(OOWiAly?`k+}%nT0pGPjT}6swQbz5rxfm3_^$39toDdI|HF+*1ZS zQHj{RGXg@lm91HPL+FEqJ|Z7$Cwn~?Zd^#6qHi?+Pc57C$8f9cG>VDwpds>A6Y=|# zUw3vBv0+-mivGuD!f-JPtegv}S*P?$BRKJ-6T>}nrE|h;3@882Rm4vt!i<D&caJ5E z#4dGCV!fCt6UYAjsxW$}fNzoO-6GZOrP>G3fpVu(>V^-;%wsFk!N^XM{X(tX$p4i{ z1&~xvvieIX5LK?VvdE%YL)ZD^Z2oBJ85#y9ix9z^Jz8{u!L&K_1|BY*V5vkr)<J(Q z)6278F`L4;1Opv$`)9l@;zKC6%UEtip2l7-U_;l1bn~F_?i3W$Hy%RAr67S$h`#U& zC;^S0qE#3kO<($lzC#4V7S*XD;X;TW)u}y!=0plpm;As=(<jz|J4A=(fQy(r^c=;h zJ7H7EE+2&Zsg0vgkULywLt4M>SqEVqn^29BY+m%E+byo6E&ff{hoJjB$To<6Yw~#g z1r*aio<YQo(}?$=P>^e9kIttjnqffi71d<E^Pa%Qls>PLq;GoL{btBTeG*U+xVQJm zC-Qe|`?J#4<=(`z6Q+KDdfSQct4bY>u1~5(OK5G&9V`77@%IP>FQz_a_ivIH{Zn_S z{mI0DBA))C&Sx*;&I_O5X#0cjXxA8Rk4)eBtcJNg+}in!K<s|28?<?`=RI5GU&J3l z@m%`u@+h$n^x_UNi;nI8r^ht!n;_C#x=jRi)Jkt}=iG`7;e<=<8MW?0->PZRnJ60T z^cR27G}f?vxA9V;O#70vm0wZN$n6Z->_hOWjlS^_?-+py(E!M?m~$$<DacEL8KO<@ zMa#v9b-YHsRK%_K*<p-X29+1*lEJcs*)K)3WyoH^oAA}U!Mwg+8{Vz!HC}Cjv+heq z{_ikw?=B4d;t6*<`ijd9LKWKB1Bm<4wlR<$uBpWyBN!yUQNd=`GOozJOgP0NuI$-g zpK)v<LqRE1{IpLU!99N*HyGvV{*IE`%nIa`4STS9Vf;+;e2FPqHOBfQ$A`fT*Vrl) zs!XIP*~xvNxf@4BY~W?Y$SM*}e?GiGwlo)}iKTFry;vd%!A_H-ash)Pt%?lzd-8Mn zkKMqaik?v=*cDsr4WqQKjU1VyVj8x?zcbq~>ZdsZL78SCoo0ZFcbpdl>tm5uI;;xf zc-$>155gj|h-yuFj$>*(f7lcHnRUufVLie2AISjv()#knIJFehHYR0{gHkmLg@u2~ zBMwfcO)mQs-C&}yfCC?YvWGwMN>qhg5>&Ea1%A|gH%ZtXoDUsqa0`MSE$V>8I0c3% zGI@wdS!|*QnT9^Ja>|bz{c9Dt51D5ZNIOB*>!TdZNAW2u)XrUmG11#!8!3^;28s|^ zOFFeNUO~VNvD}vKVK2|Eo!=lOV(O-71$;zg3=4ZQ50qx&gK}#=_bL&R;r{utIA$;p zBv`C2-ob*N;H#lkd_US-2zdXJGf-mYKMqE(99>)tDMOE4WWelu80zaSIfSgfyEyM2 zh}06;i$p!89EX9{Q!>E+YGU`3RmeRvu$-rr*jM7LRZeXL*VOXq=$#nE82=0v|7#yD zk|_P^2(`H-Ax%|15_NM<WK#ygk~Uq!h@7fSElMRN<BMg<g1G-#e1jG<Qxy2@!R$pf zJJ%`|TeAi`<rckKsG&{=aBiX<YPV|5yeKj2+_d?IUQA439CldM{#vh+<y*<P<DPuf zYV4l2anHJS&)okv<<`2omA|HRe?9%98+!+<Az!>{!8zbB@J;eg<1tw@LRBKofNjRG zp_Wr1?jwaRUs)m!DLnyM$SL%|6XxWQ^7k7x|1!0N4P6SlsE`;8HHH$2NlL<;kW^?2 zG_}7><{QSWtO`U28ljr>std{CyrhZ<vjxkNBKcGyAS>9ID^)JvD@)RuDNFqB#vYlj zuLj~9>RS<vQ-LcHfU*BKeMchO!KZ9DLT-eK1-MAZxc{pIJxM1_@Pw^HH}gWQ1IV%r z&6oypKKx}re5)dy9x@c<U|rbq1s2^5tVpA&O2tZJ`a{7BjoPJoBG)ldM+iD0bQ}Ew zn91@rsn4Zr5uW*`ZbKsZ={x~7=EJ*D^i_m3^Q*=rtu4s@lrS~LQOs#dHLUMor|XEi zSN%xa;ytlE*_M9F<l2Z_8nDJNu|Qu6FAusos;+Lt&~ENDlsi!dyrxJoh<kB*J6K?) zjOEi7C}Xb*e54>E(iIS#AP1-d>nv1GU6Y6@YgTAG^8E7evqbqtsH`d}akTo1q8@)V z8hwJiCRS9fEV7CZrbj;)*Es+nFbg-6$ml8Q|JN5zATm?vMWQjti^iXeap&O_vwySe zF+Zdm<7S<-lsq(4or~J~3T#?2p(`}$7T3@|l&&`V66Cr>iZ$dy4?YJT=qWn}3=<SO z;{1`4pdZu|ns*tv5+jzB6AO~D*om~>DG*mFBmmd{s(&>o6*tDY&SZ?Q_7^_5EV^kW zI?tD`IZ3k4y@tY$LDD@qM#5+4E$0$J&5tW+omter$cxsa_k+pp2_LRxt9p|(kG`j6 z#Q^_yL&?R7{O5Z{xpD?JrPUFBl#ed>a<ujSyyatT?`LD*1836Qu0BZ0HeBVC%&0`e zm*qgpft*s5@G?Te_zx-MF5y%@7(~rzX_ZkM>L`k&z;?v(VnA>+Zq@^;|Axxvu*{)9 zeaEjB2x6}a(QGs$;RW}U5SCg`5QD}3id#CDNl=!T5zb3!ZKB#z_KKYq5|eQ$>OB@{ z8(E!*Z=NpuX3=ZJE&(ay#=Mk~(p~MIwAm3}off`NYis4CuXIL$EWZgEuUjTOdm34E z;sQkj=jI>6z&Ts<1gEq_=MW##yC~gzizK^zg6%XTcXQW4D_`N7z%!&7tfFg9!!XUI z9qT*9rvJP9FFmCXzYA?k8Q!JHi2w%yH*d7DU)=EA9ZRg90E9nu=Ci9-ps|LyJ>X(J zUmf}O!4Umq|HQ;ADR)3nuE@#@M+3tRA5ssDQHS|Za0KLfD1ETkowpc{O1LJx`U4Q> zhY^1OafhHHNg@wQ!LXT<SNM@mrc6N@c`R%18K}pCUBjj<49(Z0;1qyGER4hG;V(DD z=tuG{z1Jlzvo-G>si$VuD^zQy<lR)x%N5JIK05YjxabG3hS9v8pEt6^mSkG63j**@ zf!a>`xvitwFW2CVfPNi8)(pGf1$&CAkfwSi%WVJoOD(s;f!S_Su+ow~=bKhkdRZ`# zHe#tYMI>7*$Spz1BS&epS1g!ygY{@CxUIAC9)_?#D9@SK(3arjfp&N+F}`mE*hQ&4 zm}7~Q-uF5*+}6Htd42usn<ct`st#ym?nbQ&QDDc~HIc63fs<Af&@xRTx4o%t9;ym* zKjjThKO}VcVd8P&#;lY@S2o_QL)rR>V$gzV=@;4*%yP$9SyjU!(#T@<+bKfM3<{q# zjR9o>Q?eH8*+!DE><9H$=}qp{qi4*fv&o!9JY||9<f+P7ZLWr!+I|pFB_74bPFi-i zOE9aql7inm0i(K-Da9JAIMlM-IRPhmq^9X6qRH`7P>Tgkiw8~XmxQe4tfi%b-C9jh zK^JV;Ej`wFrvcSfSBfr5POys?*B3_@2XhX95}|AYAh|Frk>TnTL+zos=3%nd#$n6D zWvi3MMlXwdTpT;G<dKj?80*PVSc;6MIJ9p`LMX572|9HU$&&Xyr&7myULaRf>Q_^6 z!4v9st<n)_ed?AghIr%Rg;yH^^db44W|_0*3EtY{dQC8&r{szL9Hd-m<;l*JH-wzo zP4oezJM+r#wezGN-^k>~&w=vA;y%OajhZ`=zIh-&-5T-5r(ctA45}MFdhz|XKQ!}8 z(0*pJJ2dyC?wy=?_C0@%Sbv7KJMO)9`ixVzVAHFJ-BVq2?9$2}v~H^CQp+Cu*W{&F zOLxTFti~s;J%roT_-ykhx?3xO-Rjseyd~6k&9vH@yG^+>vU898L?tWV4j$I2U&%Gu z0%hF{!oi|bF|CIoUV|>3FW+D3<r1ht-xodD_76YlDq()ljlIT`kMcCjJ%eY7P;m02 z6{|g@^jMuwlx`}#!Zo(c;S@w`*{EWKGdHlZwgcsN%cCuZNf-m*j^;|J!K;ajSVFf2 zj|BIL#4=A>6tDDG+^j|%iRR-18ehDXr*oH35aTNyN^!Y{EaBXULdlQQ`@B<B2igJC zx9X0l#>05|u&ia(;lqN92fX6PqqB68P?0UonqM-_hd)UdI8xa$Y8Vx)0Uh%KjY@N> z5Lx=UFtuz3+JKH>fs2Y0Eil*O!hbTumbA;+4mk15vK+BvniM&|VeA<V%>h0w(8t9C zdZ=zC1GustB7hCUf%b~JnUFgr!_AO8<y|>cdWq0ZnKnlBOSau8mB01_B^B2csPxjI zGfcaMDs3Yn;-v#1sPuB7!4x`4FyS&DDu4~^fg<Id6g(_3Qwbm9E;m@yJJE6)da(=} z(F`4-eGgpOBWX(<`!Y=*?5V>EOJse)KR)DtcB(9R^<}yAg?YPzNqp#Z`&Q=Ewj|ZB z>DR_q7N)wgFZXaQ5Vs}buVtI^>`TjDFuVfoOIBXkyu$6v^zZQRskbHl4?0h*d$K>L zpXx%dOewcVz<v1BZxB6bzY?lE5ao{{JutqYu<r#;M#B@J36D~{(%G*`H^%sne(;Zf zj3!~;?svud53F4CZB4zsuo3($1N-ZU#2o(2$lpH`*fSu1tNo7V-zR@J@~-@ulef!| zX!tcgL!9~{(|C8MMc*5c^Gf1$CcXC451aD=-4>#^a%y*_Nz6~z`iQ;B?X$fl*T2B^ zI(v=cvjk(ewdwA~_QL2h)s4Kj=;FY=Is1k8g1}GTJAhweF>Xx{Z6(RBp$T%*MY(v> z>PV^TeRXXzRM5m&Ql1=rNq$=z99^DEyNXVk7TrTb&Qeaw<IJ7r9ha<YyAbp<0_MdS zXDn|JH3#*JPnbMQ&+dyLL($H^rlCvqv(9$BXY74y=-%o9FtD(!q;GkDRWg27e5@#2 z;srvd`tn?q6{2;vLi5he@z-2svRC}`1266Y+v$pMFMUcw2NdkgGg){f+f(h<QD*Ga zgT{vZg|J`s{;D#=?1d1#G-<|=RzA-&&8zV!!<Mdg0x%6|&N@6U-m8v!v#_aX=8#7J z-Dq3F)_C3|xNEC9`*JZpsJ%$l(n}Wm6_fuQweilXddJQZ+$+lHBl_^pUh;-A`e&G1 zm0k)r>eBMQ#4AfMz3uXDZ>G-k-rUpx-t_7C4A<ErtV8VZiCv%iRR8P07?4kd;w}n* z3+W}_YnkHzO-oYA)Yjg`^#8UYSN@;wTmReTlk9)maQz=d&XN>c=l>ucd{M49e4Bf~ z5%U~C3n`C4x6Ojmg`i0UU~M3wu=Ait84-&0C-NlaP%OyL+s|V9&P^{Gmi|8dCLb96 zO{JGpNO383rSNvI+U(xG+}h;7`g+Ih6J=@Oh-`<G%b(oii-x2H(Ds-z+3y(Qz-pQ> zn(rXTN7JThsKEQAlNXtS#l!P3T`%@AtMRa3cL!oxz9$S<v3wg$o30#&1yI3~eN3gH zNvv#Tw9sW2TWGZ?wZX=XU^oFWN7dD)TpJfzF2pRy-03<Ubp`SoY$oz3iiA9UGQ+UT z<fg*`XvRI=EhL+j?ei(;7mJfe4X0XNYU9OU!-en-ur-bKnyy<?+C=IUaPFm+Ub)5g z%;+PwDKhK!9ptUHZ_8P<ONUaOidrewaSZ03e&)JspGnHzG#^oiFG-*|>yeTfWiY0n z7gGV53-G7v!D#X5!~01x-s=#)p<qHkU1iXQC&o!N%6wF}AsWF$A6m?Pi?gAtY+llg z(``$h_8uZJT1j!eLZ`;PIx%=<`mxi2kB=UNwce-Rt9H%4B<V+4eNcy;tzBKN7J}_h zUdVaOp~1RscrHDo!UiYXg}6PaYKgxTArqFHG@RD#WVf21Q(_1<PGL6^@x<zrfR=Cv zjH5;oLyXbL80HRYKR`d`9yjf@r#g!1n3G|4#1L2)HAnHx90O~{?(nAXL}+B^qU1U= ziodKmb%x02<+h5^H)~fwTR)#H(K)(+&km-l%jF3l-avpcm%WO^rcHCPE+z+|yTDVq z%KTygNJk5#PtWc4e1TJ5{z%LvzKhp-InB;?K2G=|NA)l=t5UKA0dcQl4(SW^pVERk z!UVdWV5;0pfw$jkIKvWWCSV)G=4A2VYE%X!5vlNQ=z`Uf=>ISqBo{cAV^#4^h!pY8 zi8Rlp-4XzgC0w)7ln)5=+;2Idg0~1sZPHigy!S>3;)<nkSIP*8RBq%38L&m}*u!XG zGaT-88IF&U2E#9u!Px3V=#y;_IheoMMRj2se)N9?-rFZ090$ib7X+?pBupG9-kuIc z#w(3Otcf2qwpICfVd^3Zc<e{Fp@Ahmvw|wcg1;Ea6S~%Tlfc|&_~f30-Iko~A8I71 zpdEZ86H-0?;{g8BwE=0O5vUUjK37CkYb4kc1^Inoy{)(cyKM$-$AC?W3F?XiZzn+f zK4=^?b|8)>fM!O4&lM6)X(Zs@5NV+e66Y=R5v{xX;%t{|B*TcH&e7~&7S48{u{%n8 z>LJ`0NAs~<=w?S>9t9EPXBsrFUZ!p;MOGij!nhxp=e&Nyimwu;{2M~?s#<0nL$}6T zUXiL=9Wuh+6KBZ;DPDM{C^bA;R7y2GX<07!Uv3m?Z@Ti1&|D~YeXhISC1$1|&>fR6 z@8vt4G}JlCcINhnTXl;d<9x3Quu^nqnLknXM}2<$XX(Ue;rP$`w*zt1HyK#$|8Jc7 z7Qg=&LqS<v9#s&HuW{4O@{i8AXgf7~^Pj#b&@77>5EeE|sQM6g!ZbHp8q;)}vf{4F zNO$3`k?oyeGBygn=e=zHagS-2h6K|@k*D1pX6ECZtGDUN&)1I+$R9HOsXxhfeDL-d z<;;R6$*_|r!G9^!Im`uEf|+4iw1Y#?jtF3`XXEJ(xy@n^u})|^Rl%VQ=pM^WQ{Qlr z-*gxxjBmHL&^8)znl=*gtW)coB6XT^x3o>?GyE>PGLSO^=br2&Ki^Ih&lp-820W$x zS%N9cwVSJ~*2tB$Zmx)C#pN7K=V|TfK6l)ZI>HP0zC*9lI`m*kckgbn<Sg9F)SE(n zgkYEUX;x#qx`tQ329L70a}-D0*yF<V>;!PIVcltyxbprcwX67rIZ@m~L@Q4<mgoXe z_T2!-6TK+C`dj79zN9Jsu#>A;X-hBlQnrwZv<14F5tSs!dl)+^5!Ve{B?PfevSAjJ zuIgZ|m$=<v=~3jL*GJYYB}6$%QGlK#X+gRmcZ8L>Z^A_s`s3-Fg0~q0l8(Lcyd7Bd zF5EPusk$}USFs;D`H71Lw@)g+vyB8Mrp0JPCjP2+xSnFKPLNtCZ?FihYtiZWfXc!+ zJ7dxdG9iYOZ`uqYGJ3N52_e!51|MMxd77_XmV8Nt|1gYWaBfrp!D~U8__NP=b{7Q2 zI|7Y>codZbTHX*Tw;zfpoTaO;E1eO(cIT(rwjHRk9DhKJ1XMDz<eZ6!5y>wS&W;!f z1r;$eY6@_8Dna-9IDj`IYLj?}INK_8!dBveSC*`gQ+E`eFlQNB3iV0=^DE4&d9SUE zT~C^AmRDgVJRfY{am?gM_ol#Zw(s-gh&f~Nb-3@lV`!~t(2o66pf%s~=-kd#+z-Og zdLoWDl#?4iw0D`4zea*bghC^37}KF>xPk}q1w)p-9zy8iN_746@^4b4l`6q8O`0dl zU$S`gyV4Q=)qSB?GhVR~<HwK2Z{?Ba|MT_vzb;L)CbW;r(h~o1H#;)}P`b|`K%y{! zmKZvkO1o*ark_jzB_sd}I4S*$F*CBUPGhlSy;8LaV4;e}NMCM2&ZHE*41;khWxYvL zxLgt?{bKWH;)(xBmLi$4{Lgkc|5f*u&6Ca3hBKvikIy-#h)d8iP}==whjwj1*aQmz zWW<g#!J-$g#}tkXm+np(3O+Or2@v<Pgo;mEvIzW51jNFYyT6vy<VhRx^yHDhR-%`` zcgReCy&n6OLjru_;Tbzn?skEbf4oLRlz*77=b4fY<&hPU!z{!m$UQCDe_=t)qt8yA zV3f8ngZ4@bpGo)tgcK-+RTA)IA7|WW%}%BktN~f|aDc(GHL0GtaOP1)&a$~zCAc1e z*Nd553P++8d54EXJ}o}9Or8~!e97r!=j@zBjkZqRlkgPm<9IBd?I-mE(wNQ?M6wj& zrg0e?w0E2o;-+z#c<G$PK&fQ)v97fP)?aznw@=+&X*0>YK8X4WqULvqCT$8~(IH1h zi26piB}Rj$dbiQW4D2s346LKK;S^t^-?k)$W9l#usucQkck!}4Vn^1pddG+Vp1tNC zDH}Qj``EL5k_DD0Mj(>y(_S!={m*u_yIuIUDYjd)yA=5@udja_9pi&;nB1CWwr2RG zPts9r)7|k>Y}4HNQrM@y`0ch$0TDec@%gEMY^&GAi2Ss~&zW%Xqjj6WKNPK=mSFq< z;ZC^t%r4+T9_*)MvcKW2Tyh@cizMRLJW$^ASzSicxiE3b+N!8!$|N-$=;op|iW$Ai zL{S?YRb2;^X-`$gpv`nVim6;9X9k$57}Xf=IhCGUCOXhw!j8<`hoZE^6&e1@EHI$8 z6UI`u6eU|@gn3qQQDH%jgUmix1o74^G+cDSHm`01-b9f-jLGCu<n=OPg|W4xPx#XK z776t@0L!yHSg`DVtXaf~?C0OIzvf#<oKl4YY(~VFMBZu6IU?>QKv_HyD6p_uAt!HM z<_vT$^1%(|deNM$3VXKV)&i~8F%>-0=>UfDsctM7F#&Dn!iy`52hr1TVdnt-<dbE* zW_1YC$c$S#PY#1xvom~o-@o;@*HZdaSOM`EzuM)Y!-8)lWt5{oQSI?A18#TC2Ot+n zKu%^GLG3D~Sm+vyntM!%59=egF}W5n;m6%kECz9dp^idG?R0F}Mfco}ALDQrg!X>d zui3MY?81!Jr?|^Kg@O@B*65Mp)c<yBoo5^RahW60h%XiwV(YKtiAw7bi4j=GS3xx? zH<*p;sA2h*rSj9bDg)+M;Q}bObi9*iTXcv4+}XoSh^*)us`T@R8=R8Yt8ik*rs#yh z;3bK#TZf{iM6W>gTq`Jx=6D4<z`SwEOKj9GD4D4BsZd68gEUhfL0;U=)#;S)3nr&P zfN}Xe`VF^0Y;M;mWjnES;d7!7;gV-lfto)!1tEtfBxAokQ__8R)?8}eYMszhAPXpb zTJ!6D*Gq$wY6?`<u#)5^Gf{*iL9Pn?yZyjjLVog(UKR1RBRNdSEtr8tv?4?9tX}=? zxAH%P@zrYN=$#iFRav7983n4}N{7YDvQQ4<7aAl#)t}^q<zhvITI3JRi!go$`RQ-e zG^+=XLsji_K6DO&gJU;vLY1Y+rz>}rYT}zUhqC9Yx#>8T37Lmps4gW+=!`a!6bOv0 zC5ITNhD1r?OQ5YQ2wWhkVx@!bFc&8+G%0JYG8>H8q@*ca>vT$Gw&ha^d!-|O^)hbY zSJcL@&QeNi9_OU!sC=B{NXQ&&c%uBJk^OU^tNQd+pgv-lARsYKW=}L$YVZqbRJA>4 zo}p$<OeH6PjJ74D0p3l=cFyx}xGC2<_Jmjsp!+WPW;g<18bAVg=(nKdV+R3CddVN! zs~AX+fE1Pl8UOJt0h31%UBvMy6=FX4-ecA|u17u>_Dh(VI$08vm)`R)<;QR~O0#l$ zZYxDn#H(#PV`ki!*H;|c4F<1ZZ_5etn%&%f(^8@StXwofu`LF#2%`2qbKphEcD_={ z<(o;n+;7)tJv8iirOqMwJNjq>)aj4=4$)fZJ%)ShoL#uqlyG<Lcet-Lpf{~w+LP8h z?kAnj`k%&txOeVo{~7<f=lHJp(+pC5c@BX)D|0!dG=5i`wPw`7r;b)41R;-48%3IC z&3C-765yVUdqx6Zo}dEdBY3p_IZNk1UNcAiOY=E|oB5ejL&RQ_n+XRre%SOInt|n3 z?~^hL1$>d0E)fq=js^ga0Db`ofOP^w;~ns|w724cDMwG_*2IO}K({rMz>$You7w-J z-4{CDsvrwJ#QPpLWPhuTkvHU@%qP6V8fl7fp%nOlw1sAo8PI^f>atE4Lmdr@z;ME4 z_yEc*d=iUSh5KSV`#d*ImX(ua=qP__dc*x*Gc@tSTfu_xcyB;t5T49p*l&T}jKO}l zjcl;7N<$kL<)VXJr2tN=GwKf{s+rI<WB&<Mc1#^9!lKnnWuZxc&<0*b7jdE9fJGzT zhGX~-67IA3bxJSqZE@h+j3<x+Dc=!GLAG7C_Zsfr27r5DX9X`mdS}a@@y`abUm(Q5 zF0LVzEx4%*Y21gUu}@DN-q3i4{tCBOuf_d=exvJA>WUzParsfB_9LW|8f(}OL!UID z$jB|(Vkd9G5#IaRpY}85%krk)CuiuZa9g7*jz9R_MCI_Y;qL@5ZBOKrluQ*_>6h5* z{l3ExdjF(Fu_Sm;ql)}z4Q6)E=nUN!RrWVP8->xyc-*}wPvjocX&+KJ?%RX9jFuZG zRs_FK*Xp0?Xd#8R7D)8f5rZR_PhcNQ`!ijSdXKZ?6ChHV-1IuX&KSe~u-3uSrFT8Q zOALdM4*d}uTB7!n6*#Z4Kr6cfC+&RGi4RV<uo)6ZDgCp9ZYsFWvJ?%)cl3l>z=MuX z`mR#Gi6)1xipjVhXMp9h*I5_S)SN*(ZvAJAdr&3nZrxqfuOXGPU5*Z_{n!k<N1O=z zAU}t9!>idv*b;XLMxzy4{Q`&9(rraK)(_rnd@r;FEfr*o#agO;451B5U}z0N;wp-v zzq6`I2mb9JK~@^A@{l4y$=)fE=WEjLd8w#h#=rR0yxf((XU9RO`ok=raB6azK05eL zqoRM2^f<O2c+2P0KTHRg+ke5Nt1--nz!2rSErp{n@r-Wtm~~mroy0t=!7JY`hrpZh z%+IyAUpS-mD4atD>SeSuPuiR-o<4Bdu~YrY_MOAxYIsJ@jXy+jPKBu{bfP53Nebs% zmDnplC=8OZ=Pkp<C><!gtsN3>OV-$|AvN*hjY{%Lhkt>fbmJNH+9BWH5dQ>D8_wJR z5NFm&1gQ5OCaX5#CsLE?qb@i7AR`RBeM@{NV(a{bqVpSWEpDFFtlXYIxTl}QyXL$0 z8s2k&Gm7-jY!@@DJF^aEr$rSW_I)$UcWJ1EEiK9i5X5`2M+TE2Ct7LN4>oAry4)ug zPpX)25_4}LjbPKhs*MPf>$?>(s9{HPP3g(-rmBx5$BWu8+94Fg$U%o@Q22C`x^qN8 z%wu#!XK0NU`neF=4!!!3%%6b7c#I~z1GUAbJf_RBukcxmR@Ire=&k%@=IZZ{tUf)H zu5QQ(^~AB913ZIr2MKxyS8OxjCyk@lBceUIEr-_J=A$1jOwiJ8DAgTL-JCEn?I`6P zX)@WB<MC5eSH!k{BU1C`4QR;d#kdPhON<vn|1~6eDCIVsqW~07u|TmQgvV0O^4`;k z*18p!S*Fih$26oYN!ctdN>wjevM)n83<QgT(9C)9TO5e*d(KvfJKm6*G%G#2jrRl0 zG0|bj%2K^R*J<F_Z<qcB;4KM(0SHRB$p5&wKp&}%JLhjnWl9@nl(T0IE7xSvFvXQ+ zTGbQ-Sh>UG3v;oqAV0t~cqM!dhU*y(kz%l79dbexV#Mnxh*Zi*G?+oM!8OQ_v_iyl z<{%peO}$Sv4}&}<Td{5(Tqh5E4u<_jpg&Uf@E6MvDB5p&%VJ-p`Ur@pEK2--wJP}? zB5;+~u(bN)qN@aU)Y(DeYqJ-|##tAEtXt*_vzAZ(6&zVP#1&$1n*<*qc73T~!|C`< zyPtw_rU<=~G9davPRVLjjP4L_?1sHaevlMKJ02Vq8h{YUR8;WFLZu&AzC^6`5TQ;w zsR6Pt#K-^<Jb17$2KH)sul<T|5)<~)TgFe6i>@NzU+l}+jd1yn`jM%#b4RrzAxD-} zGe>mFc^;2KG~+xXxyCsr^Em+h%qVFF`!Dd13faHnL*Q>R$SL}tTg0L5_}Ij7ouljh zkZHOu{z;9YY_18-v#*z&_jwXJDM=iy%6pUJKob=Z&ONAKw@Sa1Op-eF0R6kz(O}B( z?75+t7L2S!9>;U!E}T8=MYB8!A=0}R`KeZZD8$|v*R7{SzA^3inrpe^4<in3(7W|W z`F>E-242wI-7(#ILv{=c9A2S4;<a-wc+<=$KivGm-g?2|xAKSXDZuOO1peY6H$d^m z^XdnQF$kBb7c5P<fIruQe8ukcqQ7VNyAyg4^t}^3YuDRB&LrpiLh#HOZNcXH?sy{e zy!GF)Ss(^o8c*g095Yw*m$|FXt0qI^^ZtDSC!5?`tYmV1tdZy^koogSq0V*STAg52 z!Td@xKSN!tRITI0k@Qenh^0tZK}*j%Y*RK*R#%B-2%u(;x`PLaR{%dlc4}UbD4h=C zLNiS{@wIpdY2uC$ek4X%6~BHNQGt;aTi{nPLZt4Lb8?flG9e*gD0s~mg*cqJj)(Xk zgq>5ArO}eDE3+zX+qP}nwrx8rZQHhO+qP}nd9%AukK5;r)Ax?CANKRVVj&`Cd~=Hb z<y`NC1$FVL+6PT*?98IHjvZ=2-ajf%a2#t<JU=snBUhmj^U&unfA3#88dg=s8qA^u zg{S%RsGf>XS<s>uX4WavO(C_yx0FrAkbq4-1Ka3~6c2fdNFZlRib#vXTNr?Bj@(3I zYgw=>zjtvhgSAr0Vq}#{Tp4amw=mpch&vChnCQ6zXLhCEcc^^Q+?Z@YqWchh(p;Eq zQZdzF_HVl*XnvmJF$^#wS;Qmlf85&mpRNV@^@QZ1Gb6(T4U_QE0wv7~8OmaCk#d$; z;?yihh$w%x#^UJ-awvrzfa{gN$*dSdXk^t)%2@^u7E<e-FF*)7<i>sF{$P5o<)H{q z-v6kT$MpNGEG8Oe#aKGrp?xZZcd3mW<4{}p!fI2Gum@5)!-{Q3Fa$KwPSY~S4V&T# z*c1omt#R(E7O+0~<bxj=372|Erj{=-6irMTWx++ysTpN?%1}^w`%O_Z+)sM`hHsvS zuh2AaM5Jg|e>F_^tj|p1!xB$OH4{VQ<v&WVG~`fAwJF2b+2&W$8bN1>1JW>6MX5tV z8|9};3;P>iS5mys@{mNOF4`08Xj|`-_<3C5pAVQtxRU}1qY@Rtk;NBl7N|CsJ`$Ap zD$G&ohtp`Or&@{nR`#H#kSH1NunYFZJF~5F;yc<?VyU(tLXOC0fft;O+;@+-TVM^R zC`UHs5(-#_<>-yoS8A5#h>DWXnz+At`S5%73NY3_H;%q59dU3)7$r0${QNG0xs7nN zVuc2Yh#2DCD9lSXj%%>!0m+FbIr0tk5NVrl6GuGjL%ZPP1Y?m)r_@8PtxbhrOP%CG z<&)(?1;V4T=3BKkn$xc_idD5BYK;lF1w2aAT5K7;A##oQuG|fVspOSF{R+|33Rx>S z?~CYdy1E4A?8A1bvX?#5$Y0ukMX5d*FhdCLX)e%mRw+ZO*-oY{*kcxYs!(eqJ?og0 zy~pbW_Ss<1GXlty6J@W{jxzdiza;|XP7!+m$!F@Qw<9LFCOX(YB>0w%Gh^B3PM>;r zyd`1z7F2th;ME#?@cGu%`Vip-jXU=FR_p_?pmP}EMS)vw{sr;UG^+q>xY%64t&Taa z*mT~tj5)s8%)zaVIoiY&!mX$&KxQ7$vu&xTzJZuqKw~g*El{&iYqY)*!!@cY7R4gH zMSZ=GX-&Fn(RtqkCcE_V@O4e2gZKT{HqI^oC4zQ=$-SC8c6R0SKGEB4ha%44_yhgZ zIm7DGv3+M(3dW-_^ckFX)v#M&SCYV6BIeTH2{^CcEaw=nn4j8FXU`6je-rlKq@_>V z-3q&+RZgdGf28Eqv)e}wk1((AZ+P0}e|wM7*gU&pr%_OWK7JdZ>X=3xgh$wUhSH_d zFiq`@|9rC6+K_76v)5o@gzpj6K^1hATcx2w&qg~c9fOU5W%TBIb^`_-6U)Q%$l+I# zAqG$XTgq)y&S4g`>KpfcsV!a1gY?Mh7v$vNzh`%Ml~tTwlS)0!?ZEfK%c5QVOtIIF zlLt~&_FETahg4NUp2_1!$jj<o(@p@}*Xq+S;`Ke<Lgfk(D04p$dG>et@<&q==p2*z z#@rK?tvGLSjL@lL8&$M5a!%amoNk6jsvTDluFTTQ!85Km4&`j!M{ai_h4kR!OTJU5 zhCo*nuaLxCD!%I%IAv-oAMA63iVgMOZ(}kuLT(SB*jT|Qe?^z~7m~S=pf&Tf8(6;q zElIE<i9y;<+GmeICuX*X1fI6RpYR&qG#}<+a+}}ypJ?q%g7X|O2xhg&*bOir-sMjs zMo%(<&grLeEHg@2c$fcBV6`cUY4^938o=!TIO{}AmU3asT;76D<(+XwvY5e27tLT5 zcvqBiapzlRD9*Hk^O}HWTF{<o@*ksvu{Y1O68lZ%pCHfjn&>1$*^p`#c%8eJwKLb0 zwn;RfyJxtaQbWDQi`M=195#C{DJtOADGO5&^Q~Pd{Xxr7n;epp*>X_0i1`kyxru{M z6dH_8=(iHtA&^MeW>HLM9*?rf1vdXQO!!s;Ui8NHvgK^N1Hf;yFosO!TO)~Y@)=Xt zl~ml5^2N_og3t?T%M*bRn08FqhU9J1E?Ch@S)hR|DbmjL6v_Xh3hZ*=p>e}#mwhUM zN~UZg08P1Nne4ZN98k*}tB|FSWBQL{T8v{VjJK_`@kdO{Cu<~~DJsV2y~TS*L(+b( z(c5%2&wD-^KwJ~D@c5Q+iHY3Pl=AQdmVALXzM8e@p+p{UHvA%y+L*a0NwV+HOTa)T z+T1B}J1aOD86oEum;P1v#kgR7fDV~eAsvk&ol+tl4T8o-d>VAisQMKJszUv%JHwEs z_Ct*%6|VkQVzI{*w7QDQhVZh|&Q)vIx`W>{UdmrTroYmk`1q(I`;;fPzn(#;p*L`` z>}3*c#6&xCyywWKC@MZU^X~cA#s?A+2k(l{4JVKR&j2i~My>5{o3xMi9R-L~5+BeP z#95*k?jkfwas;OZ92^n!L$n>q5Otz|{OeT)q1R+p;ymiNgqssuAMC8nFulX5d8RkV zJAPYTHO+AXwKpEYvow1;=?+lS1E9;z^RF5SckO=Y%eFzS9m!JhCxpW?maf(s;AQZB zkYBt|0Cr|mdS}|dK%Mp5;ICZwoL=M4T+fPqa7*pNn6l#(fPcZJe$q|u|D9R&1Wmpx zUKsf<ApQcp-0z;H@RmNlOD?UaLtS?30=L6Sn;tH?$o9*)o(A%f5{cnaSj7=aIrOFM zuB?zMoK=6cAn5O(9OaMk-)fXCjK%xQF9mFFM-KolVQ(|u*_p_!oN%xe>rq_4lF+V3 z#a_>$(lqNhHU~Mj7~_@3K}7<tu#R%~tC8!zCrW4ZX3NQ*f4;fspcN?3Z9b0g`~@x) zr1aLcP2{qC_O&7KD#(C($dktCljfg$Nr1qlRX#tHl6yb6P^SM!F<jAJ&)|Qwy#Kq| z{g2j>vW3bIHFPr`BsCxe83?f!|0SeDzVanRoB}tE85lwiqOnQ99z!HPl~vO7q0;L+ zjk;Z3(`xx_*!v{<?5xX$7_aZodYh`l@dn57RsHnp@z%}qcK0X14yw1PE>G3qEqT?j z-S6w6ngrfI%Z`-e&mQ(IsXgy4KQr-I2<%bkFS1qW?8@wNf@0A8&^V{0=Pi}}3w9#I zT3AR}i_)q!P7973^Sc8z=>Fw+#t9K=798l%N0!AI%#_W01(|J!X-cuqSa@?l&?ubM z_2}$VsY$2OW~^~<EErMR%dn}n68!y78D^oLoo)CTezo$u;x1Fv=!xe+24k(=sCG8# z<>*mBImrX!oszEkq{fAAw_P<G8LemF5~9|2(t-7|$+TRh8(8~Yu~n$bY@H|UMM}zs zj=|aY!b*YL2ff#Oxu@>1VnEHRI=4l!ipqeFiGs75OjhF(LjFmMGh{AIT#w-Q_NRGx zX=7ztvEcE`uvM!QmG!0?<&R|}<!zk9j^2k+q-|lPN8B>A-vxLHnTba5Fj}wfiUh)> zDl;?bV@-VYWDQ2j9j>8y1dz)x+;Fg*Id?$sRW+P+RE;!eV@OaQYwQd$ccbb=w=wZZ zat-DBy-iw+9O?PM^3iI0zRe`YD&kp%7=?2aR`v4u7$TK|;ad$JN-gAX4O-3O7Zknb z&p?0f1y`#;soR3~-zeKZklL4WI!%`|^HLZJtA1Ol+wkv^&;_`|`?JFKe-dK*w7)Ym zuQ+CM8qE`?RkEiH5O`(`ki0MkO~<`p64b?iQezfuo)90t0v%2a+!(<}-x7va-#Ec< z?|`*87MA{aZ6Qn{v7U9^F&bn&H1MObML-SRSix`adN3ch@zR^-4>h=0SCOmCf8Tmq z*BYcDwP7?6WW>>5nwIVnc$eM%3?W@`Wz`gAc8%?|QP$Fy-9^!xGwIdh4Ea<0N=bB) z-rck}H5cfqnAa0<IRgtCYFXGT@4BJx5Y-C#<f7=LD&|pcSR}bsQy=ibbYQz44xA{- zy7cVgM&sU@hquwZt!1b~t&erBd;#SAQN!H1p7Z{aHuGHB!E85$(M#Fqn>vEs!-+w4 z1GX}JKncjQNAANrL_2Z~=~fJe8-|PGtv;Sq1D8z_G@9Qd751Fqd={(z%7*>IiY+t= zadxS|V;(bsdPCnkr(;K~&!<}Xl)CVa(3jMUwh7H#f%iB7T0szfUpf9%9|+ytMEk|G z28d+CKX{A&4HY9h?4KJ4AZtM5<Bmn*N$QU#ffb}dzcpm}T$Nky!4V07-dh@7j_bem zWE`U>S%y2uE=D2vjwt=Un>EKV_WUt24I23shJ}~$JgLGz@^0(`N<u&t;QYqf_A@Ac zoF9=T`m0eJ=r3mGL~XJfbgXoi;17mb`-FJWErTy;fSoS9KFpj(WvbR)?+U{tHM*9A zNpcq|`z!lnuJ^f)kiF<c=9T!=1iy>wRYc?EnGu}a?Aij=1AkI7&x(Ofz!~i!cAGYp zDmH$?aLizK!Vt~oO-M(XEwIHx`w;PH3oTJ00JK<9TFzbDRNUTQhaZDIC%Iq=$$T9E zMSZQJ@png^d5X8#<~w@Zwe?AtiN&T#>a)<A!@@PZQ}>5_n@qhu_9u?lrpeN&Oy&Hv zV2NAzQ^%1PRH=&%)y;ZAY`&<9YwQu4eV5QqD)Awj{A5YmG;J>%(amX5k3m<@yVz44 z&5e<v*B#7@P}b}yva<&Zcm;X;)*^r-g7^`Ta{Y|`4M{p8$!(I1U7VQFLhrPdnEuXp zTnit(gq5hKS=`7w;gQ`U$!!WDK8EN81R>oF?NcL>T|A*R89V{DDMToP6#R9`SKN{x zyhMLqAKAyh48PA&yrr}M{+X=&kp~d||Bm#35JMvsSLJ`2|6E+5((uBJe1bqsS854% z+p3DT7?C-Cq&Cu`DyXRwvikvZF5SG@o=?3hjf@HEMyKW9do(4*BxD7kIf>#l&C{*V z51q}&!`0I|0GPv$;9Ms%`WTW-m=bf&_`dOE8GUA0Ch{}0**$7Z*%CXRVL1@y3^_r3 zKp5h>s>6fO1$JV?htLtajDggevvx|uOukT2EIKei&WRs6=4;v~z{axA{Kdpl;}9f$ zylagBdz!7dS^#=rmY9y5B$&t}M@vSB#eeqly@kLnsoAnH%a_OKQyRvpsZ!&34B8c( zcS^j*QDICnNgmq6*25^5%a06or$>C;<K`fYY^$qOH(TcnJbIb6*2~i(E?pN%n{5BU z1K=4rQ-!Sr?X`NI1xT@EDxs;9V<1eM8*M9jSANh>xxUtBfQ`aA0G5JvV^54&MCm&- z8a+}}_;PEq)F5;MHyH#+VE|KZ5K@%yC;7rdgFaL!(#yMSghBpk*sbtgN6pWuIDdC| zs%W5S-G9aV?S{B8+v3a7VzHBDUjSvS*8XHE_2w{Vk<{DshZv~sD+n{Qu{8N~-fp`G z5u0@K=i^joI{`RQ^?-g(X~~V3Lr_YNy1|Rf(CM=&g;0%Gy+?>JVZW4}x22ytdEP_U z-!!kcDbv-194|(FnoLhiRO8z^Hug2As<&dP`r0HqaCzcCq!asAwmRd&xf6~)s)oYH zZxpi|N1DTKwoh5eVN>4&&G;7<&3+(0-SIu&DCF>!Xz!6%p;M%xLAJAA9a(39M&2Lw z;S1tD!KvrIz}33IIl&A=g6aMqv_lm`oC(FRYp}GKLp8;LtyDyPB7fTF9e<Um)6b}U zk=5D#-LNd$Ey7u!>l-=EbbItHbJfM0tu2TjZ;7jPz%$>Q3v1J3s;lrj6G}XtnB^;E zO?m9hL>8f+H3;LQhfGZkc!Bf^_qyzlx&$B<<{nZ)k7j$1aR|7;NALobg@hK_4Wc}& z6o3io%|#sVJ`UikrUqd7L!PXVd6<{T8`7NlBh=}Z%!sM$JCN4=Sl^{G6b<t1r?VKp ziDNTF0&Nc`6cvSr9hqrt_ZI0%Y>3OlzeosMwnO;WfA-yf(AP2k?cNg<=KHTlQ>3zm zCFUa1*VWZUlnaB~%2XQRli&W$O_f#BpLHs?6jo_KXktdYJ!U)Y{moJ1y~hd;4h+Zy zmHn<9S@A@kKX|yJxUu4q2SG(*@xX|%v9P!~NTP}4x9MM}-$mP<4B8x{dk4c?9#^f$ zSq@h&T@EhP-`Ca002Kq*d!qW&oEL*#sA)AkQ@cKxlBF220?O701%_g$Ihc3$tb`yO zkeaRdh5h!Zk-0v#sF;X{v{n1XbLkY%;&zllB*};9n4$Y}k|VoxSkdRM{J54#T)s0m zIq)#{nDtntC-He~c(6?MY8Dy7?q(ZfYsP%ISFJ?~bzJSD^EWk|9k|1t@JJft1_VhI zxNm01>Z|%&wK&OPNxpgM(<xCZKdSxJ+Y361`d&)4bqZ#SKlp4G1sTVun}GN4VbY`f zzIgSrO|C{hs}+q{>*snaOA9eRODYp;fDj;-!*>MNv?AaO3s8vl#(E=;R;|zpX)Ytw zU>ov8@sa5sXxca~l^L0bM(G;msE-_5ImhZpD`|)}C}eC)f21ORCG$-`pb8qk61c;y zqtQ5UuoV*!Ga0w#bM_7Fr4th_2-X(tn*iQt?8S_AH}i^&YrG#%iS6xT(xnPC9yCwA zlm*0wXjEw!x~*BiMMTWgzE5!&*X{<1!M6apjjx*~)>Uy`;izw<p|e_I(=h<ekD8d8 zakv#J>o^ZhUYrn<jN>1BG6^(m+oZ=KA~OFCe$5xL3;3w5;{F-03R1?uXFZghCcJcb zn3X5Gh}x6Zrn^>c?Gh-`c<Z86eR|QYy)dqvY$DWzGIMHfV6cTzK69Px`E(uY!D^Z0 z<!M4a=@<Sjvyb+BTEEbD{cvd7ZlTA%0aX<*n8PmFSL0B)9&^rgp3ZCs<)tu62knJP z9@yI-+Lyzo$_E&`&&OBU?FyUIWCwtA#M_>}DC!vMLz(ymP#aNH(F(y=h=Jv=;Xw`2 zdZGA9PPNg1xT)_D+emI&+DAy+Qhrmsfs*<=(dq*wMjodyr@-&dt|aA27I$gG;5Vw& zGX7Dtc0OgrrPLzA0WB7@u`V1ui5GZd5v0yM5UHgMH5cVv;qOQdm)XYPlR8~Cw`<ry z%HPlKUz_hEk;GsAzwAuoP!kwOp_t-X%(dYrnnB(;{8BCD8OE!P=R)u08}j|9&o>hU zMskAa(Z=nNn9!#D90)(L2gr=<X@-AbLo=hZH&8Qy){oNPzjz9eV1j|s2!)l(E+P2= z&-=Je$pYfFHr4q#qMjW2EjXYmNzmM}piT)7MO!%LmK=d+Vc}!rISU~=ybckv%EX+_ zY;boaRM5;!U?Fx7uSD_tHeKuPp)Qp6It-7&EQ@ssRiv&D+uHI&Ps&GZ*?3l+Fdw^S z7_i1OrUbH~bF(D{Db_K%t~JTwN;PiSm1R3+uV~^^-yniAo{+fMF1?e?ouqJSDqDGV z4NOt$`ZiaJj`So;UpXOq)dqw*)8hA-3!fqGz{?>l1EQoJYJeIq9)LeWFjvL6A!`+R zj5DKWa0t-FLgUcfK=na_gs`uae#c#}4>`^RhSF!NpGw~?=V2HS6J!HpzmpE$d5 zsr3PIcIh;aLTPRYyLuH~Saj-aUSmE{L`H)Q@S~Ck@ISN{?js0C{U<JfD*C-92*cF% zbeV`E?Y{k(CP?wk;AKU{&u0Y4PxAs(i(H3OOo!aX^&ZHtz%6%1NEV9GwF^`t@5%MM zOu-u!N<5$-`~#m%7P8sH2ixb0kpj`t*SGtrH0H62e|8@~P`}XwUTntnI!$l+Ma1$7 z9?1%nO({pgC+NJId>k4W(Ws|DL(+>)R^p+4l&7J;^_hIFtrtmWJ|N>udg3pBws@!! zo`{{i^VT>V!Q7cq3(pU^SJNjK3U2;HLIJ)whElLs7ubR&I7ast>(lHiJ5O`v^x)sa zbes{DUvhNWYv^ZB!OKC*OmO=~HhE2Sn~vy_AWPCg{5CqTRkxZKyS6f_%w65vqesWy zE&=t<yy9||8ZsxLBVY@SBqaU#aG(7%1=Oyt^7-M>>n3yRkwBQ!_D)e|pOGwV!+Tn| ztKU=aI)t;^CSy1^P0662!Gy0wbKm$pr98?itNjm5d7mM9%GKrxh!V@A%Bw{qEB$*m z#fXK*jdk&b+tGX%vT7Gb8e)nzho^Yl)p$dl*>r?_1}|Xg6Tw5EIjbxvjIrgptuD}} z=D$sy$qm2qV_H42=(Ft~(PCdSMm&WLyL7X3==-ZfCU{)O|K54)Af(#3URS4ns|X(G zD8-5?#+a4j)))9qcp(`+DaEWR@ELP)HIo{;0~-Fp!8T*~_!rX0v>^S61i-IfvOkhl z@_&0L3hCKfx(T_OISRQN7}+|S*;xPMij>om0Q`BC=2vB>CwZ-a_{y&k&(77)N}z(m zC+xnrK{MB0jj>`p)w_e{27B}Jkhd{_0|`IcA5C>0XR$p`y$_#b_%K`?>FEjd8$**> z8p)38rsuNmbftulc0`GIQKPA*<9Si@=Tf7_P1!}`IiW$Z3X~G?a~E&AefrQJN*{Re zO~><Zql_lBp&$gglf(%uLnz^Dp#_Uaw5;D5-YlenFQ&bDR-7yn3rw1Q^I8R$l@mS- zOI`NB@3JaGzIW53-EER4ad*S7i5k7O&VyXf*2fA-_eVuC(nAJ++leDk&0DwPK$$5i zehXKy|Ah=d_wp6`=09ITCKZ<zYy!P^bdUn7L1(BjQJ{t`lDhlFoXbU`3nWC4AY?Y{ zDR4oU88|cw89KBD5vKz$q)?`?4;PC?pp-d}BF{dTl@h94Yuu3-+4n~B&s87gCA#>J zpCvi^NfT)Q?UD%V{Xka?W$ld&%?$J$jsA6E<gF|a_+Y)6TM3u%_2=r<%ZHk}7RH%I z)owHddz1ZO!x{>AhA%haRj6Ht-AI6LdB|3P5&wfaYv+v6$Y^#uK5=m|!7$C)&hyvn z9Y7a?3&N>_yuRrd#`)Mr>26gZxU$rS!dF))6atLm$<j<!uK{g6K0JpfA!<f1$CvLr zTy*f4cGjrtib+XvDyUJ9LoH2|ebAW!+V}^Uz^WAvE$Vc9j5@||wD3%QN76bkZ&b6I zA8|FnbOF0eyzrNDm&plaoaM<qYcxF%#hzwVK=-5(Vc+uKpiWM3!L)HgVsM%bw#Vwd z3|4UNv+265NzyVTv|=EunKsx+#L*x9P=DNdR&i)!GNKx8Q{h^v6ZU=9Swk(TNU9V@ z@@&nlpugTL<w-riaPA1I@|1vsmE(*NsS|hHQ+8I9)y4o7@b!10;YteC77`zQ0m_fN zcAy1{MAbpX9V3$6$c)qR30HiY^~x~2*95!QDtwB30Dh4mo=#E70=`F}G`E{@*Is0A z*GUjjol>TwU19|nSq~GXMT(GSHgm9|Rg8^$x<Nw66y2EiGwKizrpWel$$D^Lu%NDl zfqQ%xSy7m>t-!RIc^eTHSzj16SFht<m3Byqm&oBHs#38t;QV_SJ)4OhJO+8wNXE|G zF#`q{dt>aoOMX&S+b709N74rNJnr641PT2_6W+g#Br$8p|4A+uimsLJr$rRHrZ9u_ zO#(F91BnX^Neu-elLrzYaz@C)Zw@73gU02K^o7~UhouPx!uIrhjH<r4&Yq_E#nPhK zBCCp^xVlzllVTfVEEBML6a`x-qzsCF`IATVZLFYplMF;{AFztq^RZQ_xyZvhO}qmf z3C!i`cUyU=-1%dlEt@s1o~mRnuPMJSaTt_q@YAzB7a^OdsnQ@UO+MzpSE;KUuDz`t zRyA)iW_*(cEdJfzzmJl@K{x<GRfZq!hXd$i+lvJcCWr<^zyy)r5*rEcF}jhijT7!m zy<o`r2K?s_q~7FF+z0vVmkZXfUq8QJHufeode)AX_B8fR){bUYMl_N}uK$fUs#FDY zRs6{bt_|bV?r>p6RpDtvVrb)m{>0Xd!Q0|Opo01#vx{Nt5&j3=h;c=}aZP!_T&pav z(nm>Q0~|aQfP%WRMY+6bX>G7dz1{p->Mi?O+nBf?V!(Uyd9wAK?fK%kgY$cLcNkzo zwotpGpBrXrk2`gfX2;i(GbGsX`W*XW7ytkU!d0+`4<Pu@1L#TOcr^G4f~{%~91M0p zO9$aii%))?XI~(R(QSfHvDQmb#E`_c{Vtjs=6xRQwDJ9w17H@)jUQ&m$)LnblTY&D zpvoW5;Xsv6(jg1}T_=>T^FWyG_(2T6J1+p6wwvEH<TcZg&4wSjAp182Y_GK#Jh!m# zR;yp77(5QU$JQTxfjVus6fj4-SZuD#fjS;Fpx3UV?_4b21p78Z0^JD4-q%Ao8!!17 z*X_5y7=Po2zbRe++U-~0jp?a<Oh$H(=gHiB;q7Eoe~btIZNI?@oRDqlB&edTWrw#a z1r6G-oDDM-VZ}C|r%1Af5<cIT<62>s!L#rt#SEiS93f3z%GuFGH(NroFB8z~Y|5{c zi>`uVZn7t7W}ic}v;q|tsB2=*ysgYl>0?b7DSM>m5`T*qm!9(FY`a5rv6P;kPsgX) zogs2>$a;P_dUK_%!Wj4wMJc5)8&d8GKBh=px%IiLcv=~zV=I%A*5>PC!V?f|pefeu zw=>V_mYCXEbd;5g*+d89`|X6BJv~!p9jKpqnOJI+X!R}{cZd>sAQWpt610l}*=^F> zY8j4y{OX4g_bMP*D_90zA6Yle(?q<0RBiz7r$XvL25$z%an}e*BWp0&R1C^}Xenjn zkU3FF#ZR4R((N!S=hq$$wE@eFV5ZY5g-T45o#<IihjK41lc%$j!Prs?>Gttk@6p8E zlC~2Eyo)l=<B#0D59uXgkN^aT_dOv)qm>1w<yDc5WJFdX_ci!~usvB{QO6F?aDf4u zUYyp51Ilu)MZBiYj%`x=mC9fZxhmJm1s|y*lpkB-_jlyWV1(38at_!&5<477Xr>Ks zzNKeKunD_Q7B<!?)3yxiu}rtY$wNuSl$X=6VbHbnq9Cj)a^U<CK(#A=OQ!vTDMP*^ z9h!bj7}Gx-IZN${ma&l%(ZUAG8U+VxW$ZjmUL%wJayLxGU&`IbJKJV|I*6w=AFEQ? z$IZ|@m2+Km`f+_7ouIPAaHcfg^O8xx-c59_d|5Q_kYBAI*m9u;`*{390BUmOq|Z(Y zAlbrHFkXTT3hQJc;din*xqy!XZ;=lrpk_2yn*FXh)H3LbSkA`SzPz@S5duQxogkzJ zW87H*RdCV<qbD4T>54ywrQC(5ME_vU7x79#iKvDKp=CfzkVW7mlzB=~P<X<!UVD+f zA+o?mp|GiWK}bxwu$g&-Xln7@DZaoo7Qbgi(UAT=*$l97M^5DYf~!(aDL)gR0>Yvh zxWOEju9!$kquK^xH5Fe;NvJilW!U*Fz7$fa7&<pWQY%9HDT0u@O8XWf2|0`miZ5|^ z5^*qrP-f6lxL@S}B*=cQ^wd7t0OAy?_y(Dx@MAa!Kc$xt(c$6Y{D)9wtf+^aLrE(s zW+)1pCNfa}y4v#Sk5c+88n#@Li)@d!GF0>o63!j`d`C84wg1?TEZoGcHK<%rfo0cN zN=j*PV&%U4EUDhcP7@Uw7KPWUR9`BQG@6q!a#Ko<g5e5K?bVf8rC<AS*|z#_Ue}+I zsv?UdixO<;!SGr4ye-Hkb$1-xK9131z5y|-LREqx=X@P8ELc>2Z1~9;nmUaJb179{ z7_Bv?cy?h-fz_6!QyNMJJ00VK9EwxqQNKO`*mBX-NfsO3^nR^PNvSbzSs6(AnWiWs zZyVyzgg)irj3+CNv5uHX0SK1VR#~vd-UVIVfD6j7lyGw088dKtlUUKF@zy%LVVqTw zie&;dlWxB}E~d<>yq1(@Cp%$$_LT8%!ZKHF)KJQxLYE_obE9BdO(U5Sd9`7hRVMnp zrE=kdq50Dv2nkDAZt?UOBuks+{sn<lEg9#&q{PLMcoMj6`Ck0bHyoS$m$(?hU^g?H z1tx95kNB?LGsq_A6DJKp1_>*slM-!;&C*G|IPqL9A{p%D6(k!BZj6lhm(E6LaHtQq zLezVOW*>(o<35O%w9!~5wA3!`lHVDuws^V81TR`Af?(W3sm9uU#Fj^-f4HsTRHxGI zmnr^uehJtTmO_dE=SC}j+~h3eB-m^<k&a5P$OBL22suDqgBmwgH=v+32~vzqIO0#! zh9IXdBM8=0<<T2d^GOmxg$Q~7fCbS<>gHWwqfBTegCe*M*?ZKM=vZM!N}zj*42JMp zDrX7u_hAp2hAk}?D&G6!GNy)T`_vHsGQYB7xRo3Pe`-qhcuMvHCg|Z!?U_6RX84m+ z3PUB$s7ojyZpFy9L{Skxmkr6kTrmPe4GBhYL#ouEGA^^#O-WaYjIj6CT(G^<#u+~M zJkr`fzq`|lOT+XzMYwXIc6M>p-qYS)2`N9{QdB&CnP+!{82pL2<lZu_YKvx3xQJZo zB~OVSS4A>Pc%(u#sW4((T;Lu2MX@_X9>L2LsV49<3Qgw3ic;>@6_jF88s@Yzro<uD z?!RS^wrGcx*ceZ;EGNY>JJ386Y+X3oJ>k}Ea8Z!n0IP6Ih=8YQSmNx$-?$DRC1=JK zluJG)c32cF7+~NL7D$=xKyD`7IzPlkGHmw|h`=XrvPwBD639_9b89A@DM7e{a8Ml{ zTbC*AEhgS@K#0jf0!IZ`rw3mx8bAxx%EL!LzOtc*(RE==b)be^xBL(R80ZL|Tr7J- zOj?uQNJ`mc$nY_3lV4YEwrU|?a7$QlI|Aa<%UiMCd5g4_q;VdVW9v_A)RwxA$$7L> z2u{M9?m_o6RdHqN#X1RKL017I6e{G5Lrhn8nppfEUl&>Im?MC=&wQqfQrMD7?E-Rk z$}Xn7tX6@XpD{$IcA4jf30!V7W2)aYi3R~K=6$E7njJy(R}W@tCDJ}Vl*}dV_J}i} z6eKFg)!&Y?*+WkLoWkHD0jqN^SCXOzuEEdU{Q36kA)qd}ymR4FOOjY;P;o=*=qeY* zkwO27E_Ndr$<^of0XNVs1n`38PaLHuwB|#(4Em_OLmznhEm<2F1;Vu#db0h6%bxxh zwS?f0FGm$W@jTThD3$xnl2+S^aM9dTY+Xk;ercKC<_%O{5uk(+Q<r>M$-@cQn^@h> zz5_3fz_DBe5ZA9@I<ROtw&?mXETbZ?xYs8#<cea1(%cRC5ZZ41+!&<0*m(HyydVnO zLZTjp2!dict~kJp!I6Wqn=9{S354P1+?<(&;cc5cg|U0e$PdiO4^B5PUt#ai#XX~? zP?Z|UYI?aYVH__my&a&0<NBA3+?}8RPN+LM{l)llVAPdi9G>z^2Y~W{-)5~lP#XK% z45)z_2xJ{b61!`?q>wzZed|q#T`?o3D5!A&^A(ym5vfyb>)Dbd%7CW=X2Rlq3>x7s zqEA}J2hZ}@X-TdjIFJ5>U3#axH{1%VAU}W4BV!cqszJjy;JK}T5aE>(uLYcu*snLF zOri)*`EpAMo;GO@nB!tJ2zQOL=YQb`+i8ct|AZa0N9X7Z&=eg{o%E)1fAdXT^ioPY zOvgR49`j8wv$)$jTQ#TgZhUBw5?g!2yG-$F?vr!xEQ;To8{M60wwDjPI&D!;>@B+a zJ1}PRqN>mM2NG{R4rmzeQL!^^v4M3w4%}bz`?z++@1vosT3S(_ZmXt^bu1s7XtY%{ zQJ%8uIWNjevnmo>B?t|>=w;a(<lg0oyVZ(A4I?M|$DsQ<Gr?z?BU;Pm+trWtW07a$ zyc*nOpogO@vUU^=?Mo@;B#<jgGw~Ufhng3#OD&d(nMbBoOsOb9;;itOAJ>#7eH<E| zEBesXj@s3UBh^5)CDwOZZrK=EIqXRpICHEg#7@A);brWheSY<)p7PMQ`y<6fRZf|Z zZSmpA-)&=$i)7cJ-%A0paEFzp`MtC0khUJMen-&4Z38<{MO-NLW+zm*wT@e~#iqCW z$&Pa+(^9a=&f5ehDq5AEcodfI7idRfmK4>>JnFTP4@xQpt(E~MnzJ93Gt`Ps4!}Dh zJ8_a6a_B1HQ!}fja)wLABeI!YKNSdO)Ztsl_!TA1rHuoJw!|RWd8ma*xpP!{=gh%R zkb{+Dw$y?wwleKWag|*1X<eB+bOkxsk!N?;RG=IedL5J?rQ}WxVj_tWx}M6ttCbi& zZtEEqi$DE}TQZ^D-7rAA-1^4Qcs#XKimybkQ+nsAS+tsYTl-fVLoU+&V(uTJ0?&_? zA@RRWeyq$K3}}S)9317GjGX>4iJYjk{lniz{IZ6RgH`4y;M3>@u0&@}P?abIF9-uH z6r_ZL&u=mkLsliRJTcxk&F1*zFxO$vJoV44)r&!U-|Ei$E4F@Zo%G>c0MmMW#rFJT zKD*7;{(7FRQVrl4PzftsgW7Y9=UTH8u17g~7|u;efVFoOwNW{urG9k<d}H*h9FJ5L za*x7{!CnnwFRS4k?*WfOW(#b`8&r;RYy+uv9O#yJE!bWSW=HOq4#W$1S|u1{0gi=C zgW(`^*l2@XQ!$V`!%$P{Dv|_BNK>H6(o&HEC&AN;2K>!5YLQ;?pN`vFC%-Lnq!c7+ zjG`|2)y;)UCaZc;8A7cwi$SMJ`h)uOhgA+?wH?hiLn{)dd1`gBa{aZTs;mvBvDX7X z<t7yhcOjGBTxA~<4-wqttu(KJ*5SGFHmRwkE)Dm-h29s{%FaAvYm#eg?xp*>zjAS& z?SDG{;7fW=)M{7C=J4K5#mj^J%?QR68yk9V%ZE9<yF5XU?^ur$VeDGy?82K*Hdk`L z6Vj^x<L69fpb^x%DcydQ=*di>0a(nz?~qtYwHen^#OrB%>25Nq$bz0LS*m~d2qaLp zp`+r!kF9hAKn<E<2{|k^K9@BLCTEL$O~D#`58#=P8wdejWuV@R$gM;hY6GMn*^nq- z6t|s9bJpHwHqA46?$IQNKdq3dg*xabjhApu7@nes{7_5>gfVkaCl;t*nzE2KHEk<E zKjC26R*t9O3eyLm>rvZ039FOf97-yF-hLaT=i0Nr@bu&u55yDUvZZ-!)Yf?i9i$;r zz=e4UJe-PgJ+wdRPv<SEJY^Sg*G}ITodUw`wwU8SHBXxDcE0gEH~hNe9xKD<+WI^1 zj61*`RK^--i)Tln_2Fa62PL`XX&!L@Pbx2JGTd>zyu<*i;+kN%Nk)?2(l}+jUqm35 z<|C0O$PEM|_)F$ZBJqwbh;0irr!OG@(M|Nk^NhA)r_!G}^D82EPmD%%>&%=U8PF1? z2V(7obEw?lbET!szF$>xg=S^+=L<Mxcx{iL5n4ytezqx$`umS7iEU#z4lJQEn%2># zhh{=|qL{b`d`+GE7*a?`&3PM*DvBFnjjH*3N>?ve&Lf@+tqHj|8XB{$24kL;)b|+> z7cPe0vq3KHVAI>a$1b<%@VDXnd)&uNBTw{k$ElI*m&Ylbf;v~Q;K#Ru1>I*20|-ix zf?K7`Orj!4v0fP;3T@`W(6lFf{)Ser$#8t=%{6lcu0>U@zzm)of(VzA5SMCi^4~5Q zD$%73-67OB)f3ON(pdOoQ^9kX>k9Q-3nM>UK&pfQu{&&j_2(4C$`w4=B;OkU+Cl36 zcz4MQV~EU}#_xH=_EQ}OGo%Z7e>ha79Y1wDfmKi=pQtiAmd_<i){j~Cj#r^hDV49i zzi8s~7%RNAOKgpF8>apM`RDQraV=3t%TM9C{pS=S`rl8WpCT2Xy}h2>f7P7><*#Mt zWf8e-EI3MxaL@h(ODj4mssf48?uz)4N;pC9kL11ZVQc&*(r9kL3j2->4b}P3M`R4T zSseJ`AZ)Ln#KgQ5UU$tqOmjVNJ-<&+6Z}$0nVa>m)h4vnD4xcGGZJE~>L1wrLkyo{ zNPCgjX-tE(m2mMm3^`$ZqG9dIH_}-%VL?SAZO-m5e~4!i(n$<xL2r6rbsQ89d3)iS z>P^E^1}*Tn_c24iyzBJE!n0m@L^oG%w~_u?%kJ7oyyX%YGCwe=+ej`q&E}Pg#_>E# z$;Cg+$YVF|`o5Db?s$=$$k0kI@KS!o5@<bu1w%?L<Ac=qJxg&>d~%mtVD8p0>6-GM zxVmK*TcFQjD~V7@Fxrry>|80+1=78A_KspIjKcE~3uWr^M$20F*D=(C08317j4wAK zl;)5uAlq-`D>}ok`Ct7$vUTPg>vhU3E*au4Fp6ss{KZo<<3R0mrt(3lR2fsL_0vA4 z_^5?mPcwddsKPXkv>EvtkibF*N%}%B#SDC)jRM<zZCtp}2;ofK{;9QI16?B>5P<mz zDLIl5C}i|&lA8Qs(!{_sa&BUny;yXUHX&pfAR!7lDb)v7nTqq}TAPFe3TecJ@1h36 z=EZBTSXOXQ<J72Cf=bAt1gdGN+&=DW$CQd^MdgJ;>golF#G6e^5O=t$WT)|#M@Q?{ z<$V{&3fjk{f3q4;q)&?3-`FP)Rlm&(Y(_b9z%Q#Zh<k%chDwF^JCLc2is}(BCju*E zrN09FkjV`5<h+QY_)WAMo*~2>czG6{b3OYk)mLG6W<exJ6gIU*qdf)vZUSQkI!Sw8 z3O2T9Vd`kb%(NhiJOyM<khlu@r%U$nhib%M91cv&=1KLyEDY-?snQG$BD9a4%)HZT zW~U_YXT9%QW>dGN)Q*>Q{yFp!e5Ya`ex#k;Kh;Od|2_02ZEP&`OpWvm|7VppQt>}+ zfw);#31Q{MV_7f|#jP;rifR|SRCC1f%oG$%i2~==`r<To@m6<?6-pSCv9N~G9>epa z6gZ-27@op$Y>Q?}r%JLvcB0|4>(!WTE?4wgo-epqj@_mlrntU8-q&#i9V3)K8<MG8 zx7W9}tP76KGLpfxsq6Q{aF)_P*hVGFLaXKwv!(9sBa_jztM2XnJ8fQ1jDK(5&10t> z_Ood#Y9F!jr&UHo7epifdDO&`i6D^=jWyhJx3pwthRcp5GDz0nFI^pYQN2jRjfHKn zV5~-wRAMP!u#^K|qq>Kvt(XwolsrLer5=ey;Hw-pdTc_UEPK;;)b~~^n&jh)j9<&E zN)!6c<5(=udTX-yGdjkkTmaw#J(Qx!l>Emnm{E&i8r&RaQRFNez98a=AtHOhkxhGI zQi7mx%7lpEc;4JuoQd(P2?ohQi~<y#=zd5a@uFUMf%L2>DSkFXSyUwc^&_l}aB-r* zOq2=47;91Qs^TgjjME?jkI)s_w*wD#V#Q#@k1^IQq&v;A)p~6V%pBs8M~qgcWIJxu zVnp+cxkpGlh9(jo(IG==H!5ogSzI;jMBdm|D7ZDpsGgRoE5DO~N>*_?QL;8Kl*BI- zsmoScc07+!Bs>VfINrtn-c9h%v~Z7H6JM6rP`M0f;PL2U&vy@<nl2}yg`P8kT_M{3 z$!u?M7DOeij?~5QUgjuVSbd0TsiRVOJs*>m7v$vdSEuMEz*+9rug(GGglXi{$6r*p z#lqv<>R>apnNYGxUd1PlKH9myzo6=zA}TTY8U&1*RPb)j%(rNbjP;e!%SsO)SKQGn z!31P$bZbc;%7QK?X&#Utk+`~xp6eDS$Z>KUCU%&#hfv*k9K>eK_&~BNJ^nm?Wy_PE z;XlW#2A-fTD$2FS?FlK23&*Sbmal1g`N<c_u_I1Y8q>?TX)jw$@rli&%npokOGb32 zC}Cgloe}fV?2HHU1VR94*izM8)la?Kc5Sn(v~aFG_qg~#_ql-TxKwV#UqbQV!&y67 z#c@zFi-EPXj3RJDo~yWSBJOb<47vlx_8k<1UKZ^y2$S?4AU^ib%Z2^9*25nsr(=^p z3}@})4nCAqJ;A7$Fasn3^oXB4hI1PyOshr61W4qIL9O%oU3kuX6I+JRL*|!00l)zb zacKf^!?s7)D7w-q)Me;;gvUhckiG!xZTiW=P28PxU5eIpjQ!fDvEb<1pF8g>4m-$8 zB2DE8fJfseSjQh7@}rI04n^m}Z^9<h(LoxFkHS92;!2<b_vxuRt;5zHcY0NG^oeXX z0nrkWRjv!ZhnylqBUz51XW97tAsBAu9jWgYmu6Pw&KpzqY{`Qb?{PhpEyiDxPNJz+ zfx~k_hw=pvY`=8+aaBROfc(vaJ81IY1SB4tZpa3!eN9o<WW;iQAwy#v{9TS485?&` zknCFXsgi1e!=&3O#@z<=pyqgrIi;Au6`5*_@EC{uO*`{j_B|jmG+cOAc2n7CPg>fJ zBHn&c{Q13NVqaPs)y7%c&XrZ?`?|rTsPPew>)AxAHi;tau$m%iJ2dpvX!v8!dd_!; z>n<d6$LlWG{|LF!N>Oq8(|@sMOqg}V3SN=k^du5p%6>!@BwA^wBT`Kl{~rIS7hQIl zqRqKy^skR_#)kwXh-DBsj9PlG^>l0%yg<0}QI`?DoX%yq8%lQ<1opK-nCCBS9A#Y> zwiPX>6|E@t{H1u~3x}uoo4a>Y8iK@yuNHnQo6I$BlC2blUbu^kdt2o0g@E@0{ETAi zjA1YohrZ1kjJ$Z0@L-d0k_h4Jm4Q)#Gs@oy+AGB+6DA8`y^6qR6~E6MefFj-*li}E zGZv+TX~+kVqFMlXN|04p`Dj@AY*s6m<@K}mo=&Q()_QM{O#epedn@=Z?&&rz=r#V> z!9unLXpIPaUt}ubdQ<E)pX|OPwJ|Q8&Yc8Ev62y9ZaoC~r<^zLeW>!SoWnll;go@0 zJBE#C&7zz_S;&0-%fo3JKaHd8=k}oef#Ko*@3)77qn@L~Kf3ja|7n{v{GD!D2g@%@ zC=MyRfXx4AuTmAZ0$e?R;}1}4LmMFkCE;pIJAh^JqM4bQ3A@*N>f4lakxfSJC4{YE z5X?;V?6S1U8-Vz?2||BkQ~auf*OY_z^yR^Gw~qBM)<_x85`k=(#*=5gU;bAj>FMcL z!y5<|&4`e%Il8Kh%|Z?$y&*70s7kiW!9M^~)aP74gS=GO$pY0ZMEZDe?gzY(E_ly_ zey$A^gvJE*BJmj5_yRzw-iCml!>{#Df&AYBEWy{01HpufPgA83=9GoT#`^tDr6$JI zqNLZ%^huS*7jR68^MtM(j}g{72|H1Yk)ko}k%T|_*ki;}wuFq?k(Cp9A()Xczf@#N z5%p1^&}!Bq6_`_J5F0}NR00}<1Db}6MQwvMk!!iRM#qB1>gW$qsuv+Ogym5*#?jl( z+l8owcmP+*N<yJ*6z^GU2@Sp!g28g$y~vi9+V~7!gF?hDR3(`zt*sKuOs&6xh*9_{ zt;0oVMUB3)xFI49S(s2sBhi*Ovo1n$YN-mzg>ZNA!)-Gp)Jac5nW+(y#z6+-4{Mvj zUtALt2j=V91xBMyg`oYcWqcL;`T4X`BA3wCx&(0KLSV7h#?$t;gqgagsT#5z9_UHa zr$eifPiXUg?j)8=l)u|Gu?z@PVsvl-=1BV9n8RQ^Q}|`NOE6dt-UD_5et+A&_|3PX z5$C)Obwx|QSk40tmH8*rB~j>MOlP@+-u1%5DKlbh4V%$a?A^&r>6FABl8l?C(9M*6 zE=8bOK2&@1a3o5Kouq}S(T_R~hXp(((^wA46m-w?d`sD=^lS{mVG#Fw3Rd7R6fV_{ zVjg)9vN2ELR<Sl{P$k>!gREypvpU{k1k;`jRouBt(~}gU_AA;(q<!sji5nVQ2x14a z;*hu{L&L-hASKrI7H$N_msDAe{Q4Q|(#&`c63v;*jpE?dzf_=+GGvzIB@C!antDYO zR)oDZ_>~N^2m0x_1D!nKL!+Bzr@v55r~~Bs=p3Ri*EK_HlUF?QEMmN!1h@3goscnR zdzP|Mb}0M05T!zpp}Py{1HEJ%^BE|=L1lK_9)L7&dD}0n?}0mai%Tk#^7(Ae#SM#Q zCP~%~jjA8+k8l?4Ri&#?FYOyY0I!Y*+w(n#eeZ4exz22kF95esq!shRUr<6f0$uDv z^T(mL+3JAI_QV+D(-}?qC_Gr64K(-f#a|UZj&0?J(Y~Ywim*(=ojG?m2r}SWus2&& z-~DL^Hi<zF*NRzJP@%>uDMHW3>2tp=Aw9qU5Jfgp4BhuwA6R5~@d_=Ma!&EYr<d^4 z{J2Jl@MN;^)@VT6C!hegP{bIKfV&x@cmRw!=0*6pC@iz>9rJbP2gKNvByi+oXfY8w z@i^#IRJw(gnOaeNR@R(rIwL$Py{N@j`>OkJEHLw<M8-W)_p?U{r1Z#1(kl#=es3{1 z^+Ttxv%Rlnl8EAOoEFvtrH8ApKk40Hj6cm|tims37Z^uc&Ksr^rAs%l)lJI(edAeO zd#cH#siRWhuUTw&$yW*hbK;SCTxKrYm*m<3Fd;V3lS`irp{DgkmYeK~qS>&>v&W=_ zUqm5L8-B2I#z&)uZ_M}a#C0EZ*bCC2M77ywPpCa&N_c3l$ZHUQ9xcC#tjf2n5YqPV z?yrx!tBo;%@`b);Cm-V9V!}L;<sTbW!h|F%FM)JZu_HZD6IxV;%Fe~`l>xg!%X|ts zeM*7;%<#~m9ZgbG(y8O`(qF5h73v<s?Xr_ZAM>~C#<msCocg_|NAF^Hkk@3by#3DD z5=N2C8dutwx>hB7hM1jZt(=>T4!uwQNI?l9D@>j+6v?j|R3gzq73=h8c*(ZqZUjQH z8vg+!s;&|eC0Ne8yyVqr`TgOt>6uJ^C($%K=IrxdPWqd5g<qdP@(s|R6#3tqQA?RQ zSm`+$m>L;M+c+v1{i{qXQC`aiUJjP4f4Q$MY>-@i9lU7`Xst>qThOayHXvY0&>R5= zr6sr7w>|xGaN%!ZsIMTxUmu<^Ru?>T9$Y&d<Ee=(HkYf3&)4&Hm|q;O<^<7kbVd-* zR)lh6`janC7|S<3Il*d{2duVIvZHzCo|An=fmHlQt%~y9goK-8czBQGC*b^DWQi*{ z&};bYH|t(gh-rMo*EnynjJJ%bb0T*EHH(mWS;rKc(H*8G4Va)dGFgzGn{4o#pS;Zh z-d<~Pxk<id2wAPkh!^4l<vMr8xsDPdeK-qJ!EAQuVNpqCBC2VX0-_Q~&`f$pRfKru zzlUnK@-)n_-*LREugkMoM(O*lf%;1bwnQC{7gJf*nG2z-40==Wb6vG9Tu9%w;OzDp zgfv0cZ!kIgqWGf0Lhm3zn(c-IWIz?|Y9f&MFL{EbZI5fG<r%zD!50rZ+fa(_?0DxT zZZnYG`MXu(KSQp1i)9C<%lK5CG48>qF&~<|CLSH2`BQZqu#Y7CCOTG;S?^X5-W{DF z-}-QUF)SJE>H>tCrUHD@TL!lfQHlqlkR|Gx%Ni%?;Qx+WJ@ufER}8}!f?1L4!P1Z< zHP!^QPY~DVlwP#60&iT4dZQ93iAKkiM(IYzP#r*ifqMi{00rNIs_<l6c<g64ZSq)E z4^?<{1N?K&i7hH%PWn@B0r`oge=jWizp*5*XKnItgk?7HKf<ykm#O(VgvzEIL@KVT znfkD|+#wirDbX4naVz}@;^Ep{3*Bf<6ov0ZVq|!!|In4~U+}FJsXq2kaWZf)aNJ*f zd^}!)_)u{&#|Wr}bEr}7R3TfKDMAv;P3dY`tmB#}5s>&tLYkv3G&ZINr4MldAI+N0 zozfO$fs!pK1hr^wnuv13v}Ne!5)p2rL9ugg+_QV#saEzpzrAadHgGu*FZi+=mNfd+ z9J|Xu3b0^`5dm*_5kZ4w-NCrJEXQ+w?Ts7@5COJM$~L7>@)$A}nwQ6T_*-p?%8%@d z(jk7MkH*LW=;3)ly0x#p?RY(GaCe?acOvRF_{*K#C-b{#c9c|0Wt!nfTc}&6ss<SC zky8d0-V0?%3U-eR1Rc(sbNHG&ILS{j+u^`SGTzAMi$Jc%K`M%k%xU0v4Z(V-Fxf#g zqh)-XMCa1ubc}!Ih-8aCn*d5Y@vup|_2VUL1+{U>Y;Y#m*M`mwVyjdW@u1u5++J-J z<3&FOE0^iA&`1xEQyE7+u>u#p5)Cj87VHOvc*HG_+KVyFiJ1UC5s9nfr-o%1ZQz<o z|F%UKmrMOWjJ*SQWewIfnu_gIY}*y5V%ttmY+DuEwr$(CE4FPXmE3gqi`!2>-x%*W zzu@dW_u^c0a;q4RYKO_hOmRFw=}(O@?#k?7gwAuSIChJypkb&L7oC?BF;AxdUJzp& zB`R2p5H9i2U!eQ5aX$Do%g49J6=y>xrhdZ6G=;Ik2zwScq>Hq)oUt1)lnfPZcW~Ew z@?%PBi9NLnRk-p4{NGW>k?SCX{DnH&FVy|L-RJ+J?mxp<q~e<OJRc%Yx`)=hoFc_N zu(+h+aA(RH3>aP*Ul=MMixnvzu1BJEVg;>>|Cp{XXecN$evc@jaVF#{nNY_>Mka^D zO6o>-ch?^vTl{Fa1i8gLg#j9sJ2mDQ{#KuMjcRPe3iAeepGv1nAkni)?xx#iV~X4Q zkT;2uAN~5o5o=ZC%H+;_SxR~18$7vbS{F?FS<sXV4nYmtT>2v&kRVfX=8&UX_ieOz z_^y@k>J=i#9+|}S-(R_zj2CLzjcmzKU1??7vu>l^_?&dIUbq#A5|pk(|6Dnfxt=Pp zDo=D?R$0?i8!jlqQY)syf}tVHSpT$H!Xn><n7(kWyMV78U`PYdKfX}sUe&U+uHoXE z^!2gQI!kE{;`H|&SbFfxLb*z1jhb1a&|RiBEJ0xL7>X%pncau@{+6OK2<-jXLSj-H zE`3`^SZffy%_dGFk9^(bbI?Jx!(^~r+f&5CUq3Em>2Cd@8f^bO=4yM*xI2nc#!R#J zVCIVs-D#C6_nsh7GNVX8Tbv_*a)Tm)l9w2hQ5>J{>QliC^d?0Rct+w7YKO)qmL>@N z-IiJ0aA%R?8Mk)6z$Byco5IwgYQbkwinP`ls#>6LB#E+{7=GcL*wX-VLkMY@p?hZj z{o5#JO*iqKw@*dl8S&M<{Bgc1Ce|<hwrI?8lJ((4+2mE1sYaVmvrp%~w!6Pj9C@W{ z8z8>Wwe|lb%l<FA{we$YA7okWe+cXH%wJVm<e~`&NKk7ONdg8{XCNZUq{|R|NM4&P z$&DH^H)!g?zXIASS=uwmyZjK>8XUjH@8nbmlS>|l%hb0&!^t*4&Nn>*U}r{J!u>hM zNG>${H9CDkD_0th4%0a*Q0b($AZx<x!j_B)gKiX_w7-3PoiL%_6vY385RR`6!?u$1 z>oU;X7a-H`&W46Wb;J{9F1Y(%!9{n9rLpr&oG7{t&76SE_B<ruiCCjj(~9<a(M^kF zJ<1AyQn*qt%sc1?Xn>nX=Z?1jqBy4VDk0v9e2j?dPy$q7p8lFNq&V@hots3qdD?Wn z;&wSM_2uFzggs*jA=c%N7qRuqs=!q=%MVM71f#)P0H}RrUfIzEdm%AaOc3w>XsR{n zAN2Bf#$=idHgsAWqFThr_-qc#Wli@ac-Q0mDe{zzjQyS+^}T}uwQRa((!?swiS8l+ zwgNuDyR^ta5P2(@2=jYdChKOVZU|W<AP_t$jV%dz44Ej{tW#u`mni^fJk^I|WqQQ3 zfWn_tgE|4ma%TI7T+ts+;YSv1wwjC@6+31lcWGs^U$ZAtG14U&zjdF@2S6KQ$a!JX z3xdfrBF(hN%wpunkQ@9oLj_)&?lb+B7(c_-%b{)?`!Iw}BIYm-(u}Uj4Pm<kTw&k( z2j2n<tj`qi-}9o~<DB09!oZHbfi3$7s4l)h#r(JJ_5Tl4UmDFaHim!Am5B=f6Sv~y z<S1tNQ0PMU3RnY&fe{E|hyo=#<w8Z5)C<Ei8V{=EU#MdUV)=GKo+$<@3?zgk!078u zjHfd)Q!}rAc6ox-1O|gssVx=B50SEjw-^uvKOkS8-evLkzF{>=m?rC)EmQW<<&Dc7 z785=t#1Mlonow|mS12ilRWElKiSfXL<><fV6YD~Wj&^n2#(P06g#(^`K-ds7{RwyY z6`}yP;QTE1TBYwJq57o*DO}Y9qsz*hjQDs$8CNl<;fm405}@|!xfT!8qw)ie-m_1m z4#R70B^@z<3XIjylzusdZ#xB}XyweVXI&1sTZzOb-${dN@dsjub)h#z_x#M+oa#cU z%vbNFX!e-;PqX8u^>+~52IRW=#+hn;rBUGVOdAGc%y@Hu9jB-XW&-xQ4@YJ+_OI;d zF=nIZ{@~OCGMU@DlpF-<S^y&lF<~{|j~dzg8g$bPod$keaA;DO-Fl708|7`3Y5wUZ z&l9)M$PFy|c#wiJf||`3)gio+w+Gq3pj;LO#;k~8JqFcin77g*HJlP_3HmKm5q4JE zL&sR}NVn2S$@I8tV)$!ZDULcFxt(N1vH*+OovJXlDxCBf+**Nb{xf0hij-H+OZajU z^+f~Vm&e0z=4U@S^Ndo5MURx#^KSd-OgQRrIMzHh)}2^m{R#T-snD~y<HF+$SKMEt zn=gIizo8p{;mX0x+T?E|mEyl5m0)*LonMtFWJp7pv!>>EP<~o(0E?Nz!#4r_-SIhi zqnZt?CPn|xA^dF+vQ-gj&;4F}qmFv3*anza`=_aOhpDVokE5lltDoO!_RMg=6{u4B zTLK!OG107tV<L&e5`r>b>B{uX)UXH_ap9=VJIi*ef*LUv4O)hCpo)8WM#o`AZhE|J zG?mv%)v8?(T*VJD^RWAnZjl5>q^=kOvRjR&7*tT<fBmkwu(w&;th5()mUMO+ehkoX zVe7ZoWx<#eUMg2>A}-H5V8x|0Uw5a(g4<DQ+HhHS^H$q+qSOlhXx9G@JOd_bEgrqr z_?{zbWRZfuNJ-8QuA&zLS-hD5>u_Yw7@^W~&ha95^g$U~C7w*swc3)(`!GI5hqR|@ zJx_guE`aMmcFhnTR%8GiPqn^ehq=djXe&Jo5;LIGeQvC%G`?<-g0R5sktuP!+#`rq zLc0?{i^9mgcmoRK_}mbMO_d72NWjo9q!&r}kZq+u0!n1jM00Ux|C9YCI;jj?q<|>) z0;r(6SY)<psa4QFjTu6dX}R#y>G18kvy=nkr&AC_5XR*AkDm!*a}LbMtaFj&T?*fe zBHX3z!c>xUzY(SWST>OevJKQ<*wX4@5$*)(fi?EZh0?l++aeOO4;Yy+Uc(sM?;^Ta zHApDq3u};yAh@tF;(V@38Z({p^uoOpLsT>xGYxT$Z{gLugXznDwKN8?nsam-#fPdi z_Yi`|HOS<RHK6&!cQ1|2C};stQ`QK<CeGx(h2sP{7y^T)jlgqahvAu8R%hS)$~o=g z_8>H~!ZgIuXqNhDq!pR=?Jm2IMbm8$e`!fEC6pthzEF((h2p<oUCG#}m;v-HjrcA9 z+Kop3L&sho@k6FsQoU7)!cSNpscGEkfJlcAG>l9d62Xro=()yHb}a47doC;OmDuxU z@>ecYf)EOd?jQLfj$)X+iUCWeyG-V-32!dux4omUw0l^S+DiaEm!gf)lfW`RHzCHH z9+WuL3Cn`YG9msmJNFGN^gHYNQVq!t2pmG;uYw&rtZ}mnh6p9#c9nX6>B|<lrKcZm z{ZQ*|1S2sU?grhBm1P&o6}U((I!39v#W)Jh>5U+G3^mAtE`rN`*_#C_TGMFduy*-1 z!!Z=EMpHBG2kwMMOS~oa>RT@7r&+iyw>Uav1G#H@3{CGj`YTx_;3_ls0h)V@P2I&Q zXUaDf2eyTAsI*w<PDv6-FQl?^DQk^Jl+-8g4@G(yonN+aP~D0NfF25=Mw0qHHjv<- zE`=XE6p8grlEY5>g>HGo!GyR=3>5}KX<Qg4Bf1On+ztLwh(WpCTOG5G<wh%4S_{;X z;<)9mWd?9($W}A#WJ`~j`qeO;m->DH1}53KaH071&`)duk{d9Wcj$|6gVRXEdEjqH zdJ4{+Q=LrxQUiMQ@C241leyh}gObtBr|U=^9dA`rzoF;64<mPtLf!K3uNbUnyII6O z0XR}qk%;m6irzwQn7J!)xP|e;S+TNd<a*gq1GfH_653IFWa^!QJs4=g5?#1t%^{g2 z+04Nx<RPhw!y)M}1|$=+1|+{!$0-+4l`}=yjAw$?k<Cg^!!w})PN4;sMKP#&ieeJc z)Iw{)po3<V0%%vE#4m4$ND5oAA0a2zGdh_$)ahpVYnFnaGee1%(cCzMGIVQ_MUh>y z#RDHP%OXEKSp8fcDS0G@xS7;)Oir}?AE&WcN|%TJqPAnz@?LZD)uaf*00H6sZFH6c z*gO39HAtk2)jxPp-qxExELDI@ebh?%bYZ_q*RCduH3|sl?+6Q)s#s~qS*S@l&rgbc zGkK=<K2zmV)GJ}m^ga##D3O_7(T<0NVV_v%IokBdx_ivP{`hk>-3=tQTNoB?t2u~x zS);UVR29DP0*XpQp|*du!G1|eQ6^`{6-D~-(eq>6?tNs;3k*T&ezzDDZx@L^x?Su~ zYN4*0dtdkznL|W#pS46s0-6|@ELdKUx(z3=2~3jq=xLE+W4-gdV?^2no%(cvx}#<3 zQWfMt5$wEe6?8;VbSqaA&6lRmm;!-1gA~VBMWvXBxNhm3OqpKd{b`*wcEwvdlF4sV z$P9QOorQ~_hSAT=y>)P$t$5OMeXR63x~kJA8g$%^SZmK&@Ni&*D=Xn2O_pM1%IuSn zUT7y1ELNInGFcXC>m`+H%D$sH>~}?XP3(cJe_FFDPmM|2YwE}(;Rz9N&4^|MyAC5n z`WdKgHrPemIk;(uYbLPINYzbtBzU)X8+K3&QE*Cg(!ku{LD7#B&zzVNjGE;ov7MOE z-H7HD%QYHxK%3W}=w}XERO~kZn+^H7IHkxqlY|qQwdSnjj$U)Lh5L=-de;olvz6AT zRuGw{`E@o1B)9`fF2(zxm}r$n+HrU8k#Rh!cregfc9xwacSU@^Ubo${UeKD;mGKM0 z2Rqc0&KfQ>=&mQqvhvmaMJaaR#=yYm8T_E&R2jz<g!|dcO&BWxXyCIKBQz`(JD5gH z%6AxSo(6!VA#c53Df80#8c9C_m)c5mq3hTH@-|iGB?g=`nxenh`*hKkv9N4eSlryA z#<6s28m8vJ>6aKQ0pRIa*7}Ou3jq4S9$TRN`yfl%#-0HrRCre!A~?!YqS%JD6ghzS zHteWq3}w;M*&Gc_27>7ozsPgp{mY)8?a_(&xnwjCERo!LEq5wr0>U-FFFX!1{%mw- zOTU<n`sVygVG&OG<*?U!33Rwhf96TY32w2(w{&Q$w4wr0N?f5s|LKusCRVQy?;xOE zD3o}T!~&#<xmQNBddOM)3u9+OradmmKQbDS*)yw=43*hLe$z974kX|HY+9{yK(rv| zL!&ca7;F}DS*DIiofF|ertv2P2@eLqaGq=1_>y_bB@G>0hZthf;&*MIqCyAajK2FG z|77pYzQ)rhY~U%RuqBW@I|^V9<@MZgpXavN(gZ!S>lN)fL?>qaU`rUm+a>I<?j6*s zr{^lWw(e2qG*OMmOF1T|l`+vILdS*f^h-M(6aLkIj9r4@94ltVh588J7EBixBQaO! zpQUvV=Z+5xC*l%2Hn<AdPvAE~z@L%p5Qu9Qv}rc*v{lf<_R3nHzU|SY>4;SHuXTP$ zr;wP@L@Q#6e~!988v&$YFbLwl;YEvotv1tJ0+UDD-8S!-Ob=QQjz;H%sZ2%^>2~VY zdT7h0R1=(1&bx=$7ItxV4s8R?*(A9XpOZc~kl%G)!E~=-vL-^Tgi5jeQ|*u+pKP;o zzK8gQ4`j9D!ihBjOE#IhMk?I()K|gxk=mbM?I}Q@<?%*r4^Ojo?PHf)b_CDw0-;>G z5R}jcV2&*dQXtc*7P2vW2l01^T<-QeJC~&o65q?+tU1iAjg_IZl|=L<8kdetyrmCw zve$3*qS)tjH~VW=Ieq-)UKsfNp@8{o9xd@z0Q`Lk`>!CW;ACl}VC3jzZ>?xxWBXs+ z(MUOI**-o*FG)(Uio6hf+dUH38gCp{9Vu>Bb01sXQ*d<2WXt9cI%z2>?tiw~E4xtc z*SE%p2c2&5FCQ=Oz_vj$xO9)^6b4&;zQKYBR^V)`TG&C(CHE}bp`lJW^#dcVkRqq* zB+0M`3ngHJ2NGm+TFmU7A1TY&4-^<*M92Z{AK8#RyYVS0#wA2}(XC0&AH?H_;zh83 z{8AvQ6muceX~6poIWa}d2`QR5(TrO<s(zmZGk^5?r;yKYdo!WL5(XwypIbfTjyaN8 z7fzm{T65RJcrM62$@?DVLr3o%XFoAGE+tZ9IiA$hb+&^V6PFnL2rLuCB}K8GL6tL7 z+So&=X<pw(QL(>8O%M1`@S$b7WnEiVXYS6wZ`0?cXJLbxoGN?Co9Rd|*XaKD211E0 z{LJL5?27!_`~H3DrC?-WV`6Rgk2CGRPCC94mXZ-h*Hqp3w?{}SnwmVyuAVxWICW#H zB&3DaFdOR9L}xX4TRjdF9voB&No?xk^G@Tur!?ad@pL;8gC=9FKl;pne0iVHUlp<& z&Uj6};i}p@b5H-_o_6Ziee(ac{(Qg&gl$^}Y!O2<Y<>>AXI3DzT9`*3f#^JLEQ{e$ zD_ih~s8E<QC$HJ>jF}2PY>|+I8%Konag-c4D9GgCoFg_1VGlBD>=6vj9pk~TOjJWy zmji2{7s+sczPhiZM*=n^pC3(-N(zi{ek`&bTBX3!q(-}Wy<+|{LbHm)yn&q7rTYxy z^;iXA$wrDoE-pdaW1t3ADEzqKAnZBE=m{G-sVL}S&)q|%8GOy<2@V@G*+nAgNqs)< zZ6fCKymnY>siCqU@fN=PL2Ig(d_sPMb)UoxZh3*TBF8b^EcMbEjI=gM2kYcMLkX(H z#Is@AcFtXQ(ZRyx-m>~KrH&p4e1p(IioZf^;VmM9$JCAAQQ9yf0}|Fznep6HnIxcb zDB$cEQ&ry)g8{7_*MsE(Lj=M9E*82W!(ep^&x^_8?9W7CBK=d8dk3uFrQwvO>BVE- zml+eB1V}*+Y<H`em}B4A)?pl0*=F^T)*2uN=H&cZJ})Lc(q=Sg2d^d~6bIY*zPNK+ z&Hk}VznkaMFv41q3X4{y`2o2@<o0I{fOfGIV{s<H`h_Ll#3eTZzcC2Okab`t&ktL2 zVRfdW_q$mqhMJ4)iG?d@IvPzk%DQ;pq`p0SQLgfNbk8iJs6ao47TO+G)LuZ4^Llj- z;9E2_)|LI5S#;EDk{*kco<e`PYpLlgSPm+GnX|(726WnGWMM{<Tiv?72FWqUE)`_K z9E}XkN?i}=(#Am;HzC)%c%<AZ4O6f00(@QS<7i4q3*{}elETyX55_&UTHCN|$A`~+ z)PzvCpPNm~nIGt5TDNx`_>@JdGz1;$R#fKgBkzktaV~hx_j$4OPgozd6#bZ(=n`R4 zVa@jN9f<??i;I13ngDHGHF3o%eu)fDZ#Mhp*z!JB)NEh-Pyrx>Tg_gy5ybWAU<xx{ z$n@(P6LXLs=&<kM$Os-fumdQnh#};+6!NxUy#uTPMKK}dRYa&0`7Awxta#n9tkF#T z3Ftr2>Yz}nqzQ3k-y?+QkGGrV=8Mb|OX$7}Cc4qwDF2yMkafaJY~DV+TaKdghDaGE z7-I}DPf-g3Bv}Ty8QrksN0VencCrWg+os%L3~vmYW%OvK+}l?_+)?k-#j*GdBo6mi z3*;m<QhpT=j1*R?9f`S0k`%0!ZbGQ{4UE%i+~y$5$PwVxds^IBU%t-#)rh*=Us6mZ ztjM<wO$j2B)dnV-4GXGr`KL}KdES#<LI&KNx?RUwH@gk0Y>}t+x#@R7MK)7X9$klM ze)Z7vHKZjLCE0z>CxVm83r9$qXW`wthni0@aEi+sEoLnd2U2=iHv;C=z{{vqBTu1M z&(&&f6v$yoQ+jBzcRX&XpY1?0b^66MDeasc0_NGqvQsf-)pbQCwP@A3Fx3X+n|xSD z%gJmjlqVx@<{i@e?LwWwF4w%j@VALSy84D&LSz~IDc_@HZ^(K3b)Rv5?OCk%ut|V* zDd#;;ot*$-ev#=uG;-!N=|5SS^XLj{A`O%zBEcO;Fuz0>^F`f;KBnq?;->v#kb4c5 zd)H4BkZ()l?`pt5x1ltW<j(|L01CV$MFAEN;i%VS2C>s0B4Ft6%yYj2#Yp6-b{I`m z&$QgY>Yw|xFs}@@d!D5BAr`hpFX^v^TSiJhLrFXK3tPkB(`y!B<Tm|l&~s*54XhKg z?`e1+@c%tvzqvepC-_R06<?FYzfYI{6|min>=jJ`Uy2U@;OzW&y8Nf<8wQV{q~zJ0 ziZ$@y8<<86S_i2)i*JsZ!h%|#KX-~5mlZ@){iI`<(yv5>fdQd^tZtvZ#<BDjP;{qW zteKA{CN8ISx4eOtd-iC!D~f89dcoF>)J(21FBvTvESc6#Tw{j%S@56?H2{bK_>E>T zs0d}bR&R4HJ+IDs8JASQB-_*MWx?X`HU4Dzlt4;RSqQ$#u=W`k1uJ>b$G{kFUD$T& zr=1EB{Ep+4lm1ryljTcNu#>mYX@%WBi2ymX#-Hz^%$h=uy##N}-~=H9{#|>8c-9Ub zkCM2Cp>GAR+0>Xbt(3!T!&&qrb~;nFe3intuzPqj$m_z<l<Ke|)7r6skt)Z(4Is-{ zibBrdbVwOfbg`5{I!%)5UKHs(4Telz=!LZbpWZ+;&DDwLcs6!9>Yn3jw;a>k)sS}A zlH!Of{UnEFN76OdG@G4J87usoq**3br|CPqrC{emhqvAS0_WPjEeIRf;pamH9$D;N zjA(Dau#{WMp=nUQdek9C7zHHFXEBF+<K3H^;!h>G;In&Qw|n(NLbYh3-Z-Rq^MQFg zUX-JHJ6`lV(h1QHpTUrDJ1@$^aYo(H7xRfFu}t-AX~fOEbLJt6ysd(Fv^*_S@8M-i zWFtRA4!bbBC<UBCOfn26t#R*MVS^TFSBO-|c(p>}%GeX>y61rN4uW3V(~i6-B5+(D z<bEa<BI-iZ<XfA6hgy?A@CDIVWv255H}b!2U;n-)i<y?_=R+Lo7XK_5GPj5{ff6<q zhRs5w_bbksN!o0-3)P$}s7U8c&H_c?^+6z=DiS6^J;yUXd`sDysL|cR&jzZp-OUZk z3O7LK&2`IXGO~th?6s9B**cJon+a7S!w(yjIt@)JJipK5{(holYV<Hvk#6!Ja4gy? zBM_Ua6x=ovp)q2sRA5gcom+30L4UxSn<&QoLjc?FCx(baEi!<rj>I!#(#W!<pO)+P zpe@aGl={(%6n$I?LuHel-jU`iapO|eS!*@cYGIZD^ixOZSVfi(DEM=z3w#8Aci9ll zp6o2E+kdmgcH7=E>5x(bXYCC9ymxQHB{?dP{zr{qH5${iAZPb}FTCL|YPS{;x2DAN zb3XXyxD5r|KY#Ieyr<Hn;{JNXpkI>$`oDe5ibnQk082A>BSTSpfRz=%o<zX%%Y^p7 zczAK+U;9kdpwH0xAx64ZIRRfjv-E;45>{GA-!Wkc(md#L8ow~aa`9bI^x;yRbTIu< zhZ?<p<QP*b-vx+mI9JT=2<*f_bwftpWRB!3oayPUE!l6D`dlz*%3v@hP*yx3()?Jg zm~AmZu!>rXMl1o^(>-I`KLpb}c2aV$=Xm#RTF?TkOja)0*8wRAx~+TAgGv|j3^gtI z?!IV3-pBB`<rkoIPwUMx)o9l{F%U#MU1#k(f<YduQkbDxuiw61M7hHYPC0v-{KRt3 z*v7na-KSj5r+b2DS0?m0m4XooYAs?r?fMdf^xT4S=HbQT+W%qFTQblZKp&j%jM4Jp z1CXDeUgo|;s9>fS7Hgmh^0Zf;D6AL#mRT}glQ3c>@~4YfrJzAne#Qx}9k?q&Zv`=w z>XxE}LSJ!Ec%S0(^Pr@#NFT;U%&mBrbFAPPbKPjhBrARBMfH!_(agzQKpfe}0QXN$ z`*%D+ZAm)f*6cgXC1cYl&3iHQ<Ab8(nHWA^`k^SE`)a$;u5d#hLQSGn<_QCaJy6Pg zZ`czH99IsR?@QDp`ib|f2_sa4Mh-207JL<<-}4w~%`~2wSIpun@x{8?do!%QACZr6 zC*vhV+Qi8G%p)>%v*>>R7N(vsSh$ixK%MYJ`FJu-Utcn?2}S400a1noEf*-I0e=>d zgOnA;32PbODX4)GiLpQsfY#UQo6aKQdv3HE;bSAcW5k^oqU<L#YnvwurYcUgFJJ3R zy8V}NRi<&_+_x_viv2(L>i-GEe?)+P;V@BA`%5GUm8ZUal<Z`6h^5H9v5D;WWYI~} zX*?Rf#x;ll7;#`1WV~UBCR@8v-I;&4L~lXPHo~=Ns0$f?E|NO>qc`lA`Qa7j;qY|z z*0=LLc_hgeO+Wv(Fsw1lwH8$YcqgMv^lhpwrJ?#-gZxQ7;V*q4s!ZlDeIUZ<AaAx< zeim-Mk%zvP&&?saz+fsvTOE<u7*Rs}=)siS-=POHNAk!Lx<&HH5dm9hOxu8KdDtvT zUM#zn8MV`7*-fy$A-sO)?<v6CP<aGyV+89`A%mnJ23?0xrFN(YVv&h5h@pFq3n;g6 zSAiPYEz|udGIC=_!AYyZ>t{+vI%IUplIdu1u0IF`e_MS>zbmlG80m7uC|#`z<ZFZ3 z$qlkXus*|A>8<oat6(nDxo}DO+Y%J`^PDr+3{$yo>w&mfavR##Pff~w%)csMN!_Ca z85;*;N~wls9334IVKFpp3=X0<rpW%XE%hGyoPKo=nynGP8puUAoRh^8@FF3Wqoa1B zWadNnVXa%D^pI>7?mBHG)7u1twJ`ynw~*EITKvs6qT(nGC)`JiVx1^sGdEgvSgMcP z%&MsDfW@g$K~_7{Ink<PYOS}2ZC{K&;-RZ215kxFq-ZLlkdc4APiL(zUt*1C7Mx0j z)mL#2CsUlqq{t5}N2QPL27CXD5RO1~5K!`0^4R+V)Zf$0{vJ#UM#lezCk1U;tS>x) zjPyAtRw`F4BGAMDi8Q|!S$PuHt^_Oy!CrwxIF2x-!?qWlRL=?J-{k)6`Nv`^hD9F# z8gRL^?r_-}@8;?L455eroBQy3MdW)qnMVB$*xC0Vw3dwfPB@Ud4}<vNhs=igTlQKn zLvmJu?%Q@~V5{@BVf$jPR=K1I`?|BAr7xxf4=%v(F%lxfun((JklmYr5tjZgJ&J|` z<nCR0)nkWExRSbMXb<jVTLF1qTH^>Z@Uw`5tWX&6VO5D^<DOvye)RTw*ea=65)Smh z3o%JnJ+-pmnu6Y=oj&EhY^4gp8}J4jDCBby^j*8F%!m+f%kaE8`#l0veNFz=6q+Rr z=N*EG{%^XyW-b)&NP=y~S)*Q*k$5|C5Vh>23-*)06g}L6Rw!mgN9L}?W(jY6&eELX zpz||v>h2O)DP`m7S)8qVv0TJh7j0s@WU$ajj7yQ&g?ud;bE$g<$q7PX8ws`gZWFG3 zI{5do*u=Jo9UlBnC;;|kJc>oAjM(jd!nZ#*CIKM$z9#=(B9x68Hl=*M<=wBh%=CZE zUH@D~{>N+XU)pVRYDTSSG_B+VUa0wVEj^Ep3<p&jim?TOb24Mpgb5!1sJc>6AdUYD z@|vHvsm@5Y0O6VP#`=`uacTJR{^tR^2YW#!W-urmCu_xYe$XKS*OJS%H-`0a+@!aM z6PDvnUZ$)X(|kh>L9j}yK#)gSBuaQ0MdMb?8x4IpEqYiBA8}ib%50OF<y4Z8GtwbQ zimNNf*ISk92Ecg<<2Ce#qzt{`+LP}fLos$V81Z``=4bd%C?_g9%#J7pfo5XfRLC|n zTIN=F81h*+l&6R!^AWiUwl-q#!TykPfU9C5d^5W210Rk!wcekfbxDD)YQARxG%h@x zecX=wn(#1xs{TzuR7Ox2WSLiDMh4iEHm_1Wd2D}&!TeHoLZ#BpR#i`<(4FPnUorX9 zv3Y{0z63RIBxoX%Zie{si$&bhn>Jl(zO26pe$!0Hd?c|{#ZJl-U&HgRJOoUM`jGP> ztD8%z37N?}Cv^z#r++OwLMI-8=e_&(H|{4=6$UIX6j4Xo9g_#Y<AHqsrA86#()q^u zb=6IZ0t7_)e|yjW`icwH-aJqb(7egp(^p`z;d}#WK((w1S0=%bC`kOI1%OKlXGy^Q zmAOV`^hS-zFQ*jpemCjCnAiF>ea}^>#GtKI9Z^xtWwWrbN!ncdnKQkI@CQX=i@82o z%cn{<n|o`*^Dgr$<LT>nH+k6q+2MiIGx=N`q-j?GDteO=Hq6>$I}lF3|H0adGyf%J zS+z?EN6KEc8xZ8?sxionC2`XbMCK`&)kP^g?S4ZGM}CtLrl^y#Sc5ohbhAdP<*7qw zB6Q%=;mWVmeLU!5^bvQ?Lp@Gko-$JdEV@5QeTO(yuH!i!?!fffh5l3SCM^i7qiPq< z?V%{FnPp+eihioRB?o{@rd+^UF<hYboEzrCVu|X7eN&|sHEJY5_fz2}D=Zv(AxmlE zm@x?LnRC~Ucou6uUYxkJXU!xE!_H%H9+^2<1hqw2h2PG?<>>;~3VMv|=?vmNC<Sk8 zZN`E$@1|24T0(Qub#87?r5jID{x#_FGD~~X>*=Za;ojNNg;I`F3$|0h$<8YQ*xJG~ zf~_zy2$_X%%_wR&0WFf%Q6&ER@9$e!k)oAW(C@z;Di`k+rOPpM)3CYn?eeKvIZa7k z@A-W-H_hNrYQ1@o65S39*H+OBb6GQu^=&|UhmheyzmAZju;4nuNeyNpB1fVEcsa|+ zO*go3A~E5$mTD|v*$MKD1-Vo?cMT}R)nL66`l|T91T^fCX-jti!~h{<2{hro`QMgH zv|dF%i_W$q81;Fu<lnB1grq1-D!LBILIrPP%%X%Si}4tc#V=JDY^wLfvT={kE5@CN zv1KD4+2!exuv3p#EwE2YQpcm><PfPylFEg<Eklew?G?%{IC;H@8hLPNar~kCz^ob+ zHE%5<B#lW>0;T$zKf7z{R<+$H^xcQu3~V>1tUh=gKuW_NjFI4Vryn!C@WxB?kV|u- zTnE_2nERm|5<-nrD@t0-9vBZU@|<t^%*d*8<=ZMk<%<(g7yih$GoNW=#zn~1N-IsM zJ2UB?4l~uiqO0gCM=n|vAqxh@?}i@=)#)@n*T5tzy)Or6Zx=&<pJqjm6oxIzV>3QQ z>VkZ|W`17}?sruheB*rw)?Tr4pjK^ga654tQxW1#DFUeYcs|oyKI|m7?DrEt6UCc5 zIjHKIM2G3VToZa%>hU|9h`Lm@tx$={$RUt9$UrcYVkI=~_1j!);&WbO;ydRlYrW!z zPK`cadw32!P71)U{$XzU{rHB!3ro1$e{np4)x=!H5j!(XYUQ~cT!N4cwj4KW%0!8D z29<V0@aED7oz~yP+eX+dLdD7`l2)JhKx95Z?ACiKAgK)eBANxqe778o3Qti&*-|Go znY}DrAChL`(`-@IglM#qFLVF3Q&cU%eoX4#uAW#fFYda&W@~-dru&quDFgalvDndc z+52Y*@sF*tq(gSo3|CeIY*O>Ml-)`;^(vPs&#w^FGXsMH3f)EKsL68F3T=Mrc_ybc z-lk&4)WMW`w3i=@Z=koZgA)aeD3(Rf;gJvu?lc@{s4kwCWh?O<C>lew{f{leGVP0J zy$$V7SG>$S0VS$G9JOrxC8HUzM4b2`KG$Qs{Ho}4mlaYnIUsz`D=95)f=5;X78~TP z{S?=d<|n`Vlgx%2!N~f557ZlKOJ?BLNWT|>b3^8URm#<5))OT-Yz959dqQL{Pw#8W zrKNkBRPSz#lRxT@IXXQ4_!-C3(HuA@w<$1-ss&=!GR_lE0q-CskQv|tO$xHZ(x9!F z!X}p<RBZuW2;yY6K64BYwjSRiPiJJaT6DGTL^=tixij>Grr)ZhuXxtS*pl#g4bp<^ z^Ri$7e3;#R24-2-t4UG01<ED&OTD%RvfYjiVC{<lvMiYSBsV8r8rX3wXR9Uuo>8jB zfkSlt(r!LJPF}mskst%u;cNXFDV+T5ee<I=V|gF`WdmIf5dOnm;M+79=<Vg($z<GZ z;r-9;Q83@U#PqP@K~v1+cP*{UieLdi>W1UDUQdEW6qXSY#udnz(1U$_xUacG_`^Pc zIdxh3`AOmR4tA6<NC3Eg-i{PKrN8N{!j3!Q4I_`poXPelri=WR*E7yTTj`C=vDSl} zE*f~N1~;)9cO6ql_I_u|QyOJO4l{MTR{F8iK{%wCm<p@=DR7ocO&er8z7sWy>WA`^ z$W$Te<52sE?axCLPp}pB-lIlPikW7+PQUJBSXh)1ZY6zs-<CnOsm!zpu3Hj@@Di)Q z%$zDrAGaW5pkGqj$Z;Xp&5d;xM^Zs6tbG-e21_i~Wh2rXj;G(_?Kc;HxSvCXQkPGc zm3&82EWw1FJ!27Y(=9)Sz|cVuyfBGLX6nEWX^G9XG-hy_8E-!^$*L2Z8WtN8U1`TB zUT8^xA`m{={XpD`nCUmJ5P;23SnZVvz1xr)dsdDK?UBq7-(M0Zvaa+**ugOiA86Ew zJ9L5I?)+hZFPj_nQ6QiFWZW8Q`_n3tFMkrOp*i5YpJ$Z-(Qp>SJ5cNOwTm^u@Mc?v z$(emtV5{Wve9KQLi|-!q+an8yZd@on<Ef5oM#;N%b%!)ya4WB<(PL>-+sfT<8CI~x z>;qSvQ6!=~!x*A4!zegVQQq+3f*O0oIKk)o4+}DY4Zaas85`#~H(;(zro%D!D%4^- zN#{auU;v%<a>1(V6)2U}N*ol8t%7JdoM}{pzvHgNFDu?QkL6On=uVn_1ssy}z5Pdi zray>x&w!z{?8;|k$#=x4x*XYEYW7HCcK>19@6mfWoo;Z$ws^8ck;S%1!#CfudPQ9q zjg2FaIz~JbEN4rse4JM?m-5d`ATAVsj(2fQkteoMnYCuBO~oGsKa;q5atv=D!20WW zbHL0C3%&Dp^>o-G-JJ<>F_lk4JCh?I+|j+%ELIIrT9V|Zw^0Q)+_sIO#6KtCW>tQn zXA*jyyWK8>Xn+1T8ynao>uL(|9;V5kP}B;3e^o23(r{VCGDh;+D9FY=jq(;GK-Jed zhFZA8W-8|t*5sA{n47AOHgnq7(qy@gYr@PHInvJ!YtbHiTpj$_Xg95g)^%{GWn?zH z_t=OM67K_^B(?6ToQ8noqX3=l1}H(_jEFz3OPU+BaEG<__~tLy{V&RT^2%RDw)0nS z{`b0~|17KjRdjhJXgbXCq54cCllW+v(>9g-Zc+iOjC`mXbdDKkna98ow|gA`ZSya! zIU(sS{W*Tqi<x-?@tnU<Kh7j=mKeNom&x;VetY)xlnqq#ZH<as7T6aZDx_Dkt7CV( z2$~d42W4ad>xxswpxM~D;*W78&@5B|HQgOZI+&FQLmo6Z5oq4;A&>ZRB;eRivSifz zU*+k9zp5gU<;)}7ZXtewB2z@cLGHsXompVGY@2O{fKA1iC%whiNdwont<Yh+J5gaI zW$`)*5Ui~JPDdG0v3R)60yt4|8O>K<s?A2}RO*A4Zu7f?F7U$9xZ@zEP@_f)zQtF< zSuQSV_#V~p9;*Hc<*%}R>{w1B<i(e_td?6S4Bj^7&&I%j&)>_hO%T*R@V{Wy-h#qO zK9M^8bN4V>%VXf^vmHz@Ie!N@IrqUMek<niKjP%V0#jpZ3<gcAnXSJ&6d(S+>^PKt zt4{a671)eP{{Rl};77{{sU$>w`7J5y05>HcknEncfqQMNaXE4}+eXZX+CC*Jsdtk> zb7_0b1W53sRg><;*;lCPN#@>%ocP?kMNHv%(TThyyx0+qNE8ZXOyC=&wnZ`+AoN|L z9IdX|RtlLPNkue?H4*THa{Dom99zqqaA!+ekS(ec^V+dqEt9DWbK^9!>!BWiy}Pj< zKw3-RAGU1MTefT?*+u+PwePo|x9<^mC8-nt4zxH})hjrGHT)SUs@7|eu;t@wRC5b5 z;=PY8)aBPFEF3b6a?^)?gOR<RhQuqJv4i#4<-1y(mu&J^sVDG99sv3m9tpni`1ge7 z|7!DG?9CjF{-rfRB4lJ~<Y**o``-hj3v1-B2EU)Jr7+}onVj%on@>&UR#78kCF4rK z@;|0-IC=w><20Dy4;%~6IB68pEH~dgDfTi0(}u{vKPNIgj@CV<*SYTQmYVT_7H=3L z!L&vR!pp_A#tFjgp_eAR%w?=G42$I$MOXvVYHi47#rgnZ$H|)|9YZy%uu5Ay3U6cb z2Bn?8wyV9=gqpjNw++kl64$-p!j|rH^O~@%9$kn_mFLU@&VE^XYL@N_+}H@50*!9N z<g#6uj;-C(i6-Z%%*KX{Uw1^hrnOv#HCmK`t2ZyEB*z1(<<2h@S&qXxC3-zQT0tT3 z6wUA<`=h-5aoT2h*Gua+t>;{d^umUZezm7z#aZ$Vo=hJ718QnQQ+;L?C`VT$YX;L- zP)1QU@?Dd}9MQDvL%1+5@(jm#;^r(g>!QA(*6M1#g(P?k3!i6ku#sP8;*9rhY_MYZ z{n3Y6N43Tm&hSF2HYre|R`q1hwiJfZ4Qu2c?sb#(@bb-jS?8h6u)=G9&}pUV`PvoD z-S9doX4|LdWC5)isc5;77}6xNXP9-XA;cmcO&V{|DwSxe%Y;PPf}3$S^S{1rBAxLV zz53J}CJN|&KeGJ>IV+4BVj~wTmta4SXo98z5bpViI=&MexV?cw{!K3?6Ejv^%x-W^ z*@vQ*{jneuV29tIw#YJEVGNqw-xzS$a0Er06LlcRk89EMmmLH<D#&k{FPzPO;f&*N z8_&PNnYi^Asm@Wr$k@jIf6$is&(#;|M^OWfRkA{Cx}Tp0U`;_qr~}Q-XP`iwIF#l3 zv`Ol0n`uqTr0|1WR|?S|VaViH!i|(!#LN$~2{M!Emnowzhr@~Lt*u``YQxSr;_I?K zLm>G^$gUv=>?+$B%;`e#ZZPHI5xIJv7T>jCqA^4sJZ8sY>a^gM`X34&6Uzlk2ccZ3 zdm-qyZWT#cwwA&?$c4w2krj@uf@n=z5)@vR-;P_m$gwYV9#WPZ89jOsH{hb!`-RlS zKFGLB?UirJcnRYVat>c0vXF-^{p9=O36<k$tM1{eA;PX$G0)=?v@TwC$_GcgIZz8H zep4+dNsSP18taidpxRgn<_G`qA6)DBZcfB<^}bhJC-B3$&poqTKgm2osh_idJqIyp zz#Fj)>ldw*LwzUel2lQoU4f+(fz{rRLt5^pT3_<-KdiV1nXw&OjCNWh(Ot!r!5gge zLulil!vK3fhXfUIsmd)bSX*x!AV~z<(9=$SB56=puk7E30Dhm;)B8iDVg{wJIDpIr z70^otYCK!3H%t^3RS`LQz{%LJQX0Ko0=ZFVqNUoqhoV(G%?Lv{`;fZl{NT|~l1V=! zqXjm;%-DykdqgTkz?eSh_B*(R3A73EJPDAFlL7=7!Z4arq3n{WOX6DMD5ijMV$nhm zVn;rPbil&2%=7TYSa}9|UcwR|h2UWYW)g~Y&%&r7y$>vd?ZO_3;b1YmUf!_+7l-6W z8hM@~rnJ&LC-Z%CsTCU*4oMqr7e&fBhkWSrGn=z|tp@q^m+6Rv0^iTBFObfC5ouWd zuOL-0vbFp&S^S@9sPr!~e!X^EA&mlz0-~JIfE5fa#WOz)k#fVT7%=EwxZRq}*{*Z5 zdec}v{%p##tmll7L|$k#?{j{HOH(7G8RLV|Wh&R#4E^YG<K^Y-%moOhWh*>B1&%0! z!xvd!9Go#43@q92de0sxypJw4o*GyiZd(Ir2}}!~fYef>x6BV4wzH_~%D9r~r=FfV zc=y}Fa(0$U%IJy=N2zAj2}x$!0Tx=;dTq9yMR>O@Y_d%|{1P>#egWLLttzHU!zIOv zrM2v@Dst%!Dsr|vkB;r4ymnaoAv*gY-wePFM59C&7nl1ci7dMbx}$@t3v8_or;$9x z@9x3!BAxAYWpGvt_4U!2$VU#`Nf+fQN9u1I!gL(Yf&BJXggppagqtcf{(T6pxrYjv z2CKS939~h0XN?M>T%{CF^U2kT7$Q+H0LT{S{(go6;k8`~q86*A4B#z>fkNVo2Xau+ zK}y*2knN%{e%R8KJ~yy4DyA0U3TL-|8hcShYv%hxO<FaS2sktsp(xl(1#0B4y?*gP z5*>+jW!Vg(vTZcs&96U3YNv7A7eC6^XSMsAFa$2D9Gm+W-4=tmej%k9cWNA{!~#^# zdbmFXUs+<EtGuu{<2oKu%7;zg-S#vdbpa0Ai?`(7ZRv}8aht&mos`Iij4XT<Bts$G zyfZU;0gLjhi6<Sw=Xx~Wkl(|jqsK&J^ihJZy&jK?&EOOfuj7DqbMdRqKEVz4L)||3 zBlc*vbH(H0xE-TnrUhB5P(=gx1QZ?9^@Ws39>H!AO6&k<$8KVa<Ue1Qk$HCtU17kk z5c@o29b5RVLPZ$-!xK_MXRV;Qi!el-Z?NB^qjCa3obDBF^>DoajlN#MPizdK*^mf` zRmAtDg_lqEp4UphMY@X0gjCTja7;QL#TG8mq+DIW{v&ATL9Ir8e0>kFU)ES$|M&0V zpQVDVt&u(8e?37ml`IsI<uSbBmjYD?2P8v{M21L(X_>($7ihu?7HGOz=xhg+)iR7I ze~EYJA+W}uNlo5^yvj>ossEtYi=1b0*nGRwS^4L&CPS1oejmnDJ~oP9J9U<aK*s$Z zZ_&G}kJ-&c2>FHZ5W-I~k_l)|@}1nAJ7helHUfbB3@Lq5r)wXgQe#^#TUe0Be4R!p zK0^(SzoykKoj*PXZ0>s1t&X@dYGuY4y0hD?7_(~xZX+J90mjttdwYr5h_I|V?6h1J zH}lS>;YQ^TepR?G<72JTu#kwd(jgo{GUwVDOOMTGaOFldYP%plncvS6`5N1=Z3-o} z@+OrfN<UDw(dsH4Lpe(ou{pb^orD|42~1cc&%)6Pb&mEKopST?D%lrOlJT$g`*RHc z)GCrH`jjQ2W38=e$qt)UObHmI=U&;+!N$p3m}B(Sx~6BR0IYrqm)_QMany=j48AOx z!*z}%D>M3TKGKN@*F<;=8NzOtM)2N`wfL1Y)wv!HI$&~;bh;86fVpAP-$;C&>Ood? zx;858a^lK}3~}n9Fw<jbBp4Wr+1i9)r^Ux2hS*?|eOgR4^etNCgboexiy2v~Sr{I3 zGXIbicYtarF*QP+!!fLBBxKT1oS3iDs;yAVDDG>lt2H<vo>jF$J#Dg)rAg=cr8xG% zyCeZie8CoL9bGdl<{P`r;X{7NZ2Rj2?ejWX$8Z&+U|NFB%U0|DjK6yDVI^S-7!rK2 zG3K0P5~#{|hg1A&n*bA%JT6!-l$aekR*)TqIM~*Uu+u-rH|C%o3?J1o&xa1x&Y#6U zK%^F<kG5x5NG5nNv_fW#DPqmJ$}F$%P{uRxZl19vc%df>Y<b?19o&&Ph<zoMofrF% zxHqh!H2|s^N|p{YBJFyLjJT?@0BSUV{t5SEl2{9Rl#Eks3F)*zw15=}5-h!AeBeMX z#1%z5TT^4hKL8rIWNxNGvGVYIjD%(fUZf-s$e7Wb^@49q08=obB-;|eJtV!&_V3G< zTd=#+Gh`s3yf32W-#hF4XD#%vQoB;!!&B*Z=I6&H_vOSsxW1SeI5HFh;RFeHLU54i zK50P=s2i5&HVLMlUWzz5ik!s~`r3nhX?b0FpT>1ym9;80D3a<~yK=eJVA)xjwr2V7 zrqwp{^6#&2nI1=n#&{Ti&haxij@BKzx{qEmub`%J+^zvY@ufUI@Etp%T$>4ps^6?X zREIUcxn2h$bT8hd19`f(Lv{~x)jevPd6SQC#<xB>y>~(S-$10k<g?(5-2specV*|^ z>RIqlp1Xmlu4`d=V;{0#XG6NhuBw@yQdzRY!F7+H)1!#LMWDWjz9bXCy@=h#j*D7j zx&fCER?D~p0d8-MZzWM;ip0o?eZ-X};5L&|`Tagh@4?TMkb77<2>tie#HkJl;bMn~ z9gOA@B$<_pp_^i;)WxAsS!jGju;`eTg_Wd-(PtscVvR}C1@a3pX&DR*@1VSuMzoeK zhi>K6CHKB8T%Su+Dlo3{V`y+_HT&vp8=_A=m8$1K@ugw);M}}eDEZ=rIq)qeJ5h{o z#5tvB&B|ovA-i5?U0HCgE{HIsLxosa>G4i3qnuIR$Mdvr#DZU0N+@S>r3;TlmPi%N z^9<D;EvU%e@=C=xlcW&G4(Zvgrp8FA7wNPY+iX`d4jXA5($Enlk}V@FL!}}_k<ZBK zWQ+AfADAHr@8Uu)9Z6z!&_bVtpoWbeSsGa?)!IAE;A{%W(8<-w0k#f`<Ev<u;ph$5 zM=vl_F=jP~+NJxiN`}nkoXZKb@lk{1KSbNq_`oz{n;f-b*HNWeNICP5Le)1@YlUcd z(znZSyTi7#lFuWc1!$10PFB|Oq$@)jhV%1W>WGnb(ZmN0Ev4J$vGpSuoyD0Ny@|^4 zWu>JaNakuMXG0~zNMkP|M1Is`S;q=vC~KPb-x|u65pxQ%P)a;WBZ_#A!uK81gM7() zbs7i;^kbR)DvY~v^(ZhvDOWD<N*rK^EX{%s&Avqdm|9u4EUXfZuhGU%R%DXtP}sS8 ziC1vZ+FdBEG%RRIQcQys&*)QSA67_;Dh5D-(WdS!Z?1MRuEwgYg?eGpw21bh^3ZSm ze5lya2Pk^W$xb--mby89guVVgywm?E6q&HATdo!7)tZM$&@rfs-i8gW<rtowRXn^o zsFzz);%o8HrW%!>n-k|nAA3g&2pkR>Qg!Hm_OzzRkyul`eN~<Bw=gCRPT?U$Q4W+& zm{#l#f-uw-*6}zP@B2hQ11+`pV(BE&wNeDDEbWQ?vIdPhDH7sr<4xNQC_Sfx6lLt< zQcv?r8QvG1s{D2tK!r3ceiAOcTMP3##xKsfk``7OO-f|v@N)~RaqmtWQIJ&Oh1d0Y zRqSTPSs2BWwPn>~u@;E~=IF6Pv-te3FdkFf0H%CPS7>uST^C!r%p<iQLfVWYLLBLW z4M9nvY8<K5)I=7d-G$>S{0VoZa5mxKBDQfQ3n$y5v{hdLw+Oz1^S-;*jm>I5ZzeI! zTAhp{9$dqK2A-hnJi^IFY6#hqsd9(irJTK80k}BbDB>(CS14tzjW$%eu0ZU8X*^`U zcMD0p*|}1#@pXT7y*~Yj<p>5?_*s|hGroW)n{~TDdt%B)dueqrPG;<;0z{}bvqQau zk_^gOYf7UpfgZwg%>US`*}Q|A(j2Wg{x1K5=ZyITlfmX<UcZl-%3hF>9|-PVFWeWk z4X&WD6;V@dlvh2RXak#FefcVL)+siN-NRXIYl)*&Y2Q;`)Ru1Etc{<1o|5Ugi3J_I z1@+TZ4y3lt{}o$rMk>u{8(Pb3n@Wp(@&SBuC==Y-Hah)m`L`}HvpNGS)-%F;PmUs( zH8wK%WNs_C^}ti%iq#Ca))dW{e9!L9@vE4pjJenJp(#=4c1M(H@~8l{y(B-)CM8Y& zTpJ>`xxzcE28yKR&gsI6oWYEz2EnA6XAZg4w%BiHhu>*~D=eEmAkVqahZ04Ux)%c> z02sLQ-ix_)fFAwj*ua>2Ae;t?@zywek5@~!h3<zrnVlKamj)riS(_S5yKWi;9Cw6h z3!NwJoZbv_8sW_3dHYwMY?LeKmppOIOu}r)P&sax%lYata+pgddm3?=JQ0>c^etd< zhN!_aDFNK!Q^rNc99?89%JW(0;*LzkQO-*wOO(^u{q`1dnt7$J1?9#TG@ZF3r$RI< z^V$a6ZXG@3{S~xznbf6U|I3hY#Uo|xsnv#`Dsg`#`gk+uJk({81m)(=VpTmlU@lNw z&cKfMxM4BJArxWR0@;rd<c3u7dfn(QE}e}Wg$%A)<u?KagV$BfuD4V6nXu~g5>?EP z11CHFiMG$EMy;z$vt(lWWCz7A36%*~nIeXI0^QS3JgNbKgNE9q*r_R+*Esco=1A4f zsQo|RPfitFe*N*ebU1sSMx0ANg1>s>w#X4dt?5Ir*R7XO*jWmtyHrfp*#MHR8Hr#+ z+n691&R9tJY5zWOag0>N#f`q=heUV0K@?WUOl^_5lR1nqU>f|8KrzlnZ>#|;%D(#i zK2gl#lH|08cw#ND!YqsS8YAcb@jl&Da48wbI?n9vc4=a2+idvO(lOoPnRg07K^0Fy zx>CMEi6ifHb7!?SjTaB6N3uHmt;e6>hdv6V9iG{YTL&hTN5;Ngvcdny*Ea@P)@*Hd z*|u%lHoI)w)n(guRhNCrwr$(CZS?dz_nU~hH|9=6p4jJaX6)Fx*0Uab%C#O<pLA<i zdwo}(*vkU7ZjBe3=?x6QhzLUn60IZ1VXK#7Tz{bUdThd**7a7wI<S0tqrmmsQVv~l z=9<Gf@zD3SB*(+pp1N+6?VJmT?OO8usPVrEQY$A2tf?w``0)vW^vlp?$4xzVQfV0Y zS`_J8815U-aPul&-Fys1x!ZP(C&<m}QyU$cKya?k_6?|ogQT|^cG$1}`Gxv2|JWBs z+w+fq6sB&Gj*ZlrKg|6};k`oZ`HyJhs5SyUbmc)K>DsuxXBs9pa(_C&CNfEv45uq{ zf{a5t*{zBmoz<Ig@%ybF>dP2p=^F$m1U&cR%UUZxk+8JSu?hM*SY;ZgYo#c$H)0U$ zCuETJd2YV~oAOOLcQ`V}<fuv5fduZmMB5)s`Cb%hvr*9o)7T+56<2Bd%z9Hq>bsw< zSyhC`zUha*t&Xy%)t>fSZ3=VDM!r^&?6+b$79?N_<{YE(p*!whkGMi#%LW+Qs|xMT zBqs%XtOMxGcu1*zmnn2sqULQ{bL)8gt|4=GLLUySY}B>hL;5HOs`~{_fbge#Md||( zSZ-y&{A*P2E)cx4!8V6`_doU(TCWMmTcMAD{6fB7%1IQ4*xl>!N{xzp0G`Cd#e+Kb z5t^nEP`|o6W=ye;)|mCopSGPxAy=7!o1^`i#gx0Eqw&D91z5EQwJ!_x5mw)Lpt%Jk zUUryoc|cshV~x25AU^qAzd!T`-gs<I{=np_)m#b$M>Z>{egUblw~FlPf#UEAxy?Eu z4unUI-x9{b7f3thXfy!(^m2QTf?fZ_3=lBp<yU&2WLLEH5pL!u;!z-yApjX^!2dIj z4l4v^x0^(3`X#<GBIACk1l7-vPN8o8v4`TiR{~GLgF<?6=zn#H<B*i?iBI!{*;dYv zaBm*{=@GEFVM%f`F4cu|wdiC;kh;mkuRV;E>d@%_{KxDlNBJZ3!GfT=Vn&P{&esub z(YK@O>lyc|$9{~n-(m6XWxxDfTT!zK#dL{BQE4j0J6Jk~@3#vin{60l;?0U;aiJFz zpd5oDIrd1t$$8jeM2`-oiFYpQ4g%5h5V1eYX-Vh>Xpzl*vhu+Z;Bi&?APxRJ(|#aE zaDNYtM>ERshawac?M`I5S4^d{QrG0%M%$|{+Xthf)UupH(WxwF^~#Lf@HiiWi3Xu- z9HWCy-{z1Z@y_%)LB)19JCj2tkVpmKoNjdOp!0^MJFWsND@@4rt1PE1%AMUwU}mo_ zwT#JIXvG|+!at504@1!|2B}s1KBcmp_tyYcb-Cc!x@B6WE_&SRKqH;{3?qb-F#9be zcr{gCN%|?Un|44(HV8+?-Z1K-Q%BW_tIW&>-EPWq+ucKmvYbaCM{IyK-pDXi7F5oT zJZVpgB=LT%4wB1L@`*{Prs&oWQJWSq8+GDmW<xeH+3OK|@@-?7_#!a5$pPEV`xCrO zQ>$@HA^xmtSh>taoflT#b-v51F(3cP^f@U^QDp^bWv-JFo=*HmHUzB<1S9?o1L3N> z?haeM*75QnQ|VnISu0~#FC%ss)-INypEI&y(VrzJ_-H>`J~gKk=Pa?<DhXat3qOU| zep*#`a7>hoH=nCCTftLX=7{VwYVR`wZUCyGM(OvUtt+YSv0}?KR~QlviMr<4$MGDJ z%X7k@7D%B=Ng`^+bQSZ7XuC@Q+J2wcd@}2dav0pjcwR6-D~}gb6T%LxR|CmqsGQ}^ zfm>iiT^N}(pA~PgrA}Q*3vBK&z1xkbPg}>iS~QK@M$<bw=!M9U&W1dHxN?y*N9Fc0 zpi2VbL5!vFXC*O^Gk3`Yb9DaE@BSXR#(8=lvEQY@WK!D}IP0TvXn$#ij@fC9?~K`| zxC&C=y>+rV>9&sAdPxMk5aIw@583wtT7D2_8k|EL3C(d+Mc}l%-Tun^bPzNug~aEz zVy7NeZi3z*@>2F>A&^ctm7YP{UoX0i*V7w}t4tZXO)&T?m3bdjs4#2?W0}99R8(b@ zH2RKsROw6B;I_*xJ=>-^UIC6<NV^R|dR$>g?cCwgX2wA^JBMZ7FXOR}Uxde_fo*W# zc{i4@N7m~*X_(wsAxMv4d|kge<aWHA!<6r~G)UFoz4zm332Q-jgtEvvE=bSlNXb?R z9&ZMSN1FLCNrj*D%P@8{x?WD50<T9qUHR$rD8U!NgDFF$8lhrP%@0Af&N4OREGzTz zNiAUL3#(dlrUz`D`L7G?^V8@DMVygxiezq$-{JKDG`H-!5eTQ$-ts%egt~I7k9=rj zFq{?i13F@G-rhVhD#2P7`BE64?wL+6i1_<8xP7vNZRRP|*H<hz(AQV$ZbJsx1(2aQ zRql#MT@V#_wBImWSz^|&rqt%*CpQQONGuYY_P3?sF@L(O)l^rb3F+X}H61K%%1$V* z^tju;6@%>)w?RL&H7NO<tf!ZU;P6*i?b}w2o?8rDXO*v;mQ`6#g?tE7LAO3;J0X^y z^N!S#gH0EuA?lJZ*4Y`<1H(XBD+Rmgr5K}Hw*o(c^mq*Wk?n^Y1g%YGjRN4ICQhAU zoEbbX<2vgHxBm`#onQ1?br(K;6gm`_A)0s^2o<h-piss^I1D?J(&&xnsU!?N&Y;iU zTFo64q_zrSS}Yr1M)}}JVy7G~30-YM94j}z)f`|)rWtlu$vT+0PvNE9ie;-WhswV+ z(l55R1FySiC%OX5aT{<71NmVxMk>%A&wr&{?RxlFzZhij?J7Jvtzb2Gtlzg;S2(UP zR0))`b(pDZ+YOxUokwqAZwj?=!Y^DD<%Cy?rE?FkT_7$ursR11Fz1`UX-H;n<7{cu znBI!Lc!1+K&KohDMJdgraNy+&(eli=$;`bi^8=@Qq@6A}sSU|FS@?#n&eOk*@Iz{u zH{6t9*wggHs+py6kI@^zc;r@H$YhQ66`Oh_rYjjKi`mYn?2^%a<XM-#nIn7TU-1{1 zg?p4(mm!$-eUHa4j5{TJ|GmB6=5|)Y`!2h1>QoinJzIWezfQ_skS#3Hl#Xp#!7A4g z-=i;mW07Xfe}z3&b2SgVo~@POT4QGM(`slPX5HY5gZEF4S~>L;hHU<HKj-syq4)F2 z{a<OkIuL{YPRA{0&hGm?nEXi6CBJ~GF>=nao<Gg3h*kEqZ+aPZVpJD%p!Fz<4iokp z);-EoQFji_7|Xe0;ha?x@0{<V(~_ZOBgzzjwF=asX+<LUmPC!HL0wwTq#c`p=4;a# zWP89VP?q4XP>g6HUB#Z*+O2<as7g1AWid;}N*%!M`172=a;0`i;HaEJ^xC7-K)3#W z5iNr`|M4<)z5!=*uVnWCV~C5+#fGP0!3ld)t$JCzjM{#jR;|CKT&BXmTD3qF#^^Wu z<Q-wA!OkSgEla9I`HK_TS_q?WU(?1AKi<fbN7B3Yq+w_B6LUh(RB%<;)jlnDo+^)p zf080)gX&G1yJor%W{pPgOj%D02wgupf`KiFI_uB2l6Uk;+82}Q)x%$HBm5@YdFpue z`9k&#(^VZJqyCFf9xV0`w^*LUr`HRzUD-{Fx7LM<RWU-6JU|py#&!N9QB7JOSGfJZ z(0Cd2ePXEH_v_I&BL7(v&}UucftMq|pDpd{kTrNwqhj@ZYH4YsU1lsby6A4Uqx;oO zksYz;Bf1l`*VKzbbIa-vvud`;-s>jObMk|t-`VAI4ztVga@sgH9XK|~D+UY8D0J)P zdw!_z7aAiyh3@7Q%E^>31D_o^el)LcK?R*x;Xr=>;Ve@~ruUlj7lB^?`y=`9NVKxO zi=*-X=onmLn4tek%EkT+{{9_qU`X-2-m0;o9f5uaY>k;3GX|a-<IWC)u$w=)RaEPk z5%98;>*1Hf@PkKI*@Vhb*z9$W{wfB}ux%SxyCRsiy1CzV_$*Y6;2Mf$sM>-@`(BD& zR>Qp`(T&Q=GMO@KN!){uAS<Z4i{)klWDPvM_Wi*y-uuYy!Mm!}87csgNEQ`EJRGQJ zM3R@ND8Tq0?B5YV;u{dx>A%~G|4YIC|839N(bUlPUr?ZnLdQSb%ThJ=7Qn`7s*Q>X zYwALT)Hp@Ratt0k1RgmX(R>B+O>R8~g^_dMspV*3>4-bIf;Wh%iwlU$k3-5w$AfGj z)DaJf2w7xj>DOtLb0mWw(maF9$ET6O{6)v}v2P?FSqn)m7TZ6cO82}>%1tgC7_Y13 zkwTorjb1&IWvg(e`*!E1FtTQs6ul6mgJ_*Rscz3~sF%`AT6f6f<R-fmk(To<Eo_^e zC$;-=SMi|Q1)dLtU|{1rD^W4X&P{O1oHTo&CGzJ#jzhMaq0$BR#}9d||Cavp_aICe zgbkfcRsR0@*MY=ncsVB>;rVXsWUxxLp$b#MAzB2m%Tcwc(K=eUt*#MEf;mJ6A6nx` zCecf^osw^WZe~TgfuW%#+o7PLDbvW`f>US8&(P;=Wo7!=n5Q}Y6;EE-NIZAmyd24# zit+M!)bzZ#_4xRlG^FVPG2#%k)*^mD@Acx@ZANq){%QevX*C?_g5NyZpZbF5-5vDB zfOZhv7NBGxNE{frf6v3kPZ$t!R4|Vl*Y5V3j1ZxBe{u^ux^3<B?T;XVe{A0!a68(2 zIkd{{eCx)|Nghz-;yvnJfag8vXT5aV|DBbaGT<c7%W!f)ud?eO?A;d;&3opwD~4fq zHuFJ-^K)#;0Yc9)U*3p|=p^mv7R2K#5{2R@6tM&}Yj4_uHgRzuxKOJ(xH-hiYkp3{ zR)#f2k5J*46f3?Q19GjJS`|ty8yRs%?`W!pj`q?*lcr2_2>Xb;(q<xLn9+ssSm`EC zShKS^D;Z-kS;A#0+|WXuiETYaPOPhC(^(N<i9J+F3kRd<pavIS5{Po$LCkCa1Xw8t zo^Fd&EKxGEg8m0x!6zF`YeP*kaU@LzctyWVJldRzbeJ}QoLlqNCAkPO9hvGx0c|P( z)RL+gsf7hK0uwia(T`N2G@0Im@a(dQm=EAcXiE06Y!RH{43J#|sIcoR7+;5@FU)7$ z_0u%v{~8g#i(Q}Ku%GK6AJi_a`z`LDAXUYK4sFe4CQY502_cYBdSxh*N0-cv9cRI_ zjy!?NmKgKm+(edfKt(5o7cE;XB9(n%21UV0oFeahLV$`ev`m?uY0-HwKlr??;9b(I z@gQln!|OWObQMb7Htrx0=v_H3P^(OEhIkf|q(x~vPSrFyVPU1p3b1i)@~`15E9P!` zJx2tZmpMql?ZJjKETk_B2^96>krVzY6M{+3lgZt5yKI;v`{s?H{yH88VkzzHLbe|| zgYHZN?Qv~(T1V;fy^X(gBHUlazAanbsUV38aGbsVYb|QYTRCSWrE7IQoU`1eJ1l!W zpVU&=8j`=co+Mu>M`6jnC2dUe@TJg0q<e9k;~H=mRE_PmzR^Sqgj+<25{Dltmz{rj zE=rvdOTItl@U@vvM!Kt&c`6m!gr=At9$BAm1`xgOL#BN)KtkuaEr+Pdp9)%W$QE2X zp&Sn4m=%B0B~0<SMN_~+aTM0c52D*aT5cz+X>_E_UT$w+_;&7}S$(NcxF0zUxhKt# zx2$s=JIKV(8pc9!H7thUAiNTizTb+O;A=&u0RtSDva$s82-g*l#pcj!(Z^-<P@(1~ zJTH`fqq3naz<MUO5})^JyKe-!{mLd4EL0bD$$gSI*buI>FbNRIxizl<MOdOSE7!@< z%8(6pZKl+bA<ZpuSPp7Zs?qN^#kU!7Md%L2DeD%(t&w9vepsc$vhhV;E?tmn-zfP^ z2u3ZXNrrc$zqRIRPiJTh-w7hvmvD4X%h~^{xJor|**8O|PD`zr9hx3z=S_UUtiXU3 zL9pvL1wIIMRXZM%jyNB2bl(Z;YE73=m9+vv!E0E2JIhf_jnw;@+vGYrNbIA>z_LBw zCq&{DnnKUI%br<+RiT!WW2OS1G8{$=E>%TS7jrla_a=JWso>UvPBE5|kBLp}nev7X z>rW6E7I54BaIw^Tv5P@!Pa0Q04luO0RbFMF17*SSV^7CirFw5Q%h_EW-O`y3Y~Y)P zxTD2DXLWFP00;I~i80mja3-W3fu2V0lLiS8wa0?*vmyRnh#0*P01N8qLY0ALE1no& zg<?pmBDTv(Tf$T>JN;D)%?sYaN$zI)Rjc_6`q`Mg7^&8=azJA-Y5bGd3XQx8x-m~x zQ9EP;&Z-G;IG8D-o(GSCK=ovmwB!Y8d%(NXu3+w(I%D#TIDWLAX6m9UCjf0xDq&c| z)x1IMInzbq_(&d4+=?v`nYfo;#1{48S#F+g7zFKDAL>Q3GpSr4d3T(-KQ)3D>OLt4 z9yS4YH!P_)-D}5Z#q93vf30;!R`DuT%l-3|2{5Z}CP!yS+-UM_^MtjUQ^gM^Va*6~ z;=5UWVbGZs_=zVp2Zd@!>H5^?!(4j(d_kxV-XKd`zr4}e91&Klf$w3fY0F0GmAwA3 zS7+c;#y1;B3?qF-{?aTdAg)onAuiUv9z_Q9_6?>1j1_%3WTUI&=D(qMpS)p(ryeg+ z806v3OgYVUX%>Cr4%g&EN9T)&=Z+#y670CWC|J0?QTGE+MTQ~;ZAjc^Pajsw*^pz# zP6)WAZhA9{6~A8|*UZ%ySzjy^Y#-Fl1nWIi>4v!c7YV=^?}{oYPjPKQymO*1hsH9# z0bn{q-O+G<psF*(0<(hitI6;H2bO`hh5k_$r(0bs+o@Af4%|3-<cpu;lrs_RS<vhT zd2`ac7DD;Xc41B0J=cZ3=gj7aT;}MNc|e4Fg-s=8dh{STHJSsw*c|kONzI_g8Tcl2 z-@%8Hiz`@l9Fl#Tda8gHmsZ(q>JBS!)*!n<vC8$bux48bWh-Q?6^EttxUCfdt~EFP z5@@JH|D^Y@VJ_UGE%9D*$+pPQCDwRT=2c4E{r6e1N?A3VLTX>|ZXJ-8mx3=gixRw& zOq`Na+>v6AiBgV<0zJ_qd5~kcT@j_WuXIEtrrd?gczfb_QKGjg(gwg&8xEu*Uyzkk z8b-w#Ed?F1zHcrn5#`pl_Q{a=#@#wNTtu^bJ4ctZi@k<VN&l3N*WYy6Q(d!b<Kh`l zT(@lCg4uguZa3ku>sl$!E<`CVI#wxeWvX=b3b|wJF{7c&eOucd(ROg(#UndxS6%DA zojtwv@x*)1>$;G+#wjV7719$8DsBGEGvxNCbX8ZYnuJ9MqHxWYbrj+vIg{sA7^5bH zo6N5kApSAvkk1xqkLiHeyvPF<)_x}Odnf0d1J)^+-+}zwostmTedkZi3mY`DJ``B$ zB^K2ym=`rHIXeaeALQDL3(h?(&TTEfe%K!v<`9^v;2ZvVAl)Wwelal*MY!eXKYZo+ z1ob=mMEHdL(>HS`@F|SCn`T6O;`pfrdW)kN7B^^`wX$nm2cJuc!95h*5w#g|CX8=m zDxOAvNKOEQxHleBq6zl6R6{w&?ealnI=8sic3Jg%>_-X>hb35g!y#QZ-9?s;%c)_X zY6<?PPL-i}gHfl(WEOeDoYfv7MwRos)V>k;1hiQdRY6Xh9n(`AP%hE5HpSBu)q@_5 zNI&_98%gUiWg0}*y#5EHhk?tNh+e)!Mo1_D=I}?JVh8PVA&A~L*G=(|cRKS%x(E1C zp#KxE{_I9Vk77>Gi6Q0aK>T#YCG(<b`8@-zHtQTkwzCnqGPX@|a|E?i%KBqg(}r}* z2d9K7vJ1#((#;<+=-he0A91X&ysQuEPj$tdkqstHF&PeJb9lhEi}*6aZzxiKd{Yu0 zKv@Q%>AKmthJ?jf7YQLPmMk9Sp*iY>PEI_$vZQY{W=f}jktx}Zwj9+&uHY^xHG5Vs zE4H=gT{J9p1xqRQv2Jna33t#rKj_c*)+&!f@7wg?dsBr>F!QN0w%%gsDefB>ciY8% zs!6NbhOCJx8`VJptoVlzFnL3<s@el$$96?dB=nGQD2!$p4p)aR3Doo<XC7V3Xgn1) z9_s<_qweHMm18~h1GD0YE^#)P1wzj<w0o3uVR;I1gfnN3-}K5Q(+NA@=LjRmY=!+M zlC?Cm9c;eb@TBzMgOQj5q<6YzfB0w}{&J*NFnwND*5Xeov17Wuf@SlZ<Od8dLTuyF z$xrrh4EJ#Y?6LbdP1r{^V%E9oX2-Dw)brTfv5SQoVBqmtV!dX*91JKXX)Te^C{Y&_ zNCAZ^lY(uf<1`HmvhxeD^XM5Y+PiL<T&HS<Wa%V)8ffk$SWSmcM^(+>s$fi9?=mj2 zg=Nlk;hKkL?BY>em?XzWfxkzxG{Vj%LmLJ^d8dytvtrEDwhOh2n4Cvx%|BJx181zA zZQai4?j##X_<m5NXG@4*j9U1>a7=^zR?ziU1b<kWP{=MpFZ{&P>E!=7nv4H)r0DdW z7Is6Z1Mbe&Ba9773cQ5WU1sd2iou{D$<j(n;ZA~rIw%a?87^iB^=U+97A`)CDi=Lw zszIujCs#RW=0LSB#?r1a>w0@BJ~zIq6QVt2)sVX>n>+V0Mi#wdBj8bzPb;wS-LmQ< zjnIAsGibCCzjvF>aC=|g$6zb`O(162Dwn<epB89+&LNDXf7O+ZX#dTG>)-koArr%2 z&i0P~YF~!bwViQI@%~J0ldoly%4GxtR^+tTr_5RclxWB`Eap?~rtGXU!IcGnU&4>E zXQngqY(xc8?xICHB7q6fph7DZL&`}OHkO8!pS<=4A@JYkoxJ9qoGQkpaXkI`W5&E@ zW1jSSIKi=V<oEVfv%}Hz`7-48LnkgbBw;Y9Npd%z5e{ME)f*GYTWA=A1aeQN^UV~$ zyMKU$mv?-C3LpPquY%V*CW7E(4+=jg`A!9{8-Li5ck06a_EwJEJ2cFk<P|;VV9!I( zH}hu?$$>LmH_otD<`Eda-r*i>p_kO~grQCp1PN!9x=AOtIPA{B-rt~Tih~bkU%~?y zsF>6;OORnhK0kXYnJeiE6lCo8xbl(3>ckWV=Q;5>&|=bQ7V%gMQb{VP{LFjL?RBC) zf(y)K#M43+v#AR$04slGI>`C20N0H7m`W{7l_}nu>?wb?3<l}&C!Ax+v~q2*h6&m; zHD8?zBVOGuD@B~VvFR*sLo9Nl+l#lr;A4%jn5w*U65WrmI4jL4cx$!=*2!qWU*j^T z{!D<gFv&*lZRM+1KW@%a(-@?B0sGUApC(OEIgjo}Fvm|3iDZUb#I@n|7G>m$&8lF+ zu{2uXVv_Tn*(Xp@qg7zuTjtSmC~uVzV24JbU0cW<>v^#xxP1Euqn^KMPNY#l_T7^( zS}-PJ@PlPc;LIc*Lb8HutMLR>u$$3jJjSP?mKL3vwE-yR+Gz@f$BsVi6UW7t#f$I= zN$Mj_L7_tT-k!_oRt%<v@eSrk<}+%|fQ**6-~JM~{F&`zv}lbW;&a>v*qT)ulNTh1 zrplu!vQQlAQ)k88)XBx94U$W#8s+7*H|zDUHoJ$QOe@>Q*av}X{d6#p)JY<1a?9>f z@EYq-*1q^$hqyV5$i<^18Kwgdlj>Hgjt;2>OF_hB>uF@uA+$hNb(byy(0hTV3DFr% z0gX%X8DR5_N0#PtbEc6VOdb^Wq$OyqGESHmW@s;1WYw{dRp#0PTtXOltgMDsBko<D zvL@0kjYu&(b#ZaTuKZkWwL?4_OB<`r=TKdU+OP47%nj=~ygNiwXlaA!;(5E^Hp-{v z+vS2o9+3z0?f4H}M21VisujCxp9*~=@oKl^?`WMNh0yeQc?QT~Xt*cE5e0!jdhiC3 zFWbjmmQXY&pH8!>m+Tf$d<UUrVpWQ&aoFwXM~tFNM#(sWtn9UZE8o|rt=s^yCe74S z3q2N979P*~pagvrNM%?v@jgP3P6C9{*MvZ(?R0~{k2@?dk4`!9X`wO9FzL0qMza`f zu00s2D=v{88?h1R19z2$nE6o)6+CunwPYW{JgV6{V=(k>#lQSpROdZzPszzHtmpC} zMNf{=*2-Po$C;dzlZ3$BT5CH4cLA|>&n)UdT0>3K3>l3c!9|_!Lt&~DMZ1?Tf*quw zeN~siZn-P-80|JHzLM-b7l-fm)Mbb)9tN$aYK)dR68@oJsv1X{p3>u|#d>t~@Q7{? zIW%pWTr0Z{o0m@Z;~?t@54YZSj~ONAKyP6mrW)-at9()U`vn=AS$TwA(o(8E345n; zInQ>8R+3pauq)-DygQM`_5@1O_s|37`27Hw+b$s*g60Q&p8&bR^xiN_z-sc~1Jb+n zsdya85x0aiCB0m~-*yTja)++zCQ;f4x%c8;cbconqivSZU+>!l8yH!lRXiJ*oEm>e znDaTB;Hz3JTtnWCfXt9U@q%@#Qk)1^ich2EFkKUIzA9H^gg{XbnrH5Fx7oC_f$TJ- zj8NJ=oe&_e;AyqY@g*#A=#NvK0^ik}(Q_g=S+WtHF%-6xoK<ylNmsBj)4=)IJOSiQ z>~}Nn8bZqKI5+tMc9fs@9J~>dyy?G#`zzY7fc`ui$kdYE0xys7Xa^>h-oOuS2s^7S z(2XS7-jibE!%Lh0c@T1hpHYj1_!ZxXOKcNn>4LNO4ytAhiSsMC{=~JQBPh$0BHb?- zwo}GHK(e&i7>hZWQ?!Knc|jIHyA}*W$~O92cY^uw+Nb{>mS3KQ;OvYH>tj?7XI84c z1sOQP9%kg4Cp=VSdHoGP1LejL3xbRYxM4D^ZL<<XMFMIHQ;U(lR?Jpj-K(OaOLg}M z7tfjRlV8yZxmZ&qRMi;*`S5c3K`H@shEOO;9O`nb*K(2KYr*24$O(PI@&NYStk%1< z%mbP(jnWjXn;F7hD0o<6lqhcg5*7Ov^JwotBZ8t9|ECfZzZhdKVA4Cb|GP7D>0(Yk zzZNguRZdFT!bW)>m5`lG^35wa@Q~uH>#%tvgyhDV<*xByRF9oOF6UC7(@ZxP(Tpz& zo5}|r=MoKTHMJH_mZHeA@jd=l?g0CJa;*`niM3m@eI^fz!4OT4yrd_PQ;%%025H$z z#iu3>tZ=0%4<i>99klH7hPcs{@!EA35T0>H;xKI~K=u+jzV6W=Ycq(3Lo{-UdV(~< zgv{p|idP3V_owt^NXkf?yUq%m#%DJqH%Je?np}uOtR0{j7M0AzBCNl8?DkY8m@1nx zNK1hYr~Y7v1i4(vl|g_^1iXG?c^s|929d`zi~c)kmKu{DDR=^OPnUJ!!+@>}7IT<g z`!`JCR><6S@9r8OCK0B!SX#q_&`>FeWQlI-9In3Dy1FvMUB5xv5*qbsu5$Btfvj6Y zMaSCG7A@<0c)NVwEy_&RHE&9Zd6=$~OW2oc3Vg?gWwbG>wDz(dg>pZO2G3%n9rT<G zTKzVIOmc<kolVxQQ^6@?CsMOascervL*TE#>bhd$}P+aBr9R9Bk8>Jvy39XjYH z<b4QLY7;dZQD+Nu>-@v;qs}8(dqkt8{`V(e6@Fk}ne@Ak`ap|cLmaL9IJkGb6XEC# za~rML-*D;&f4&m$2x?NbV$@5P3DBW7q12bbq@CI6@%&(LYV!E`gRH{<wP(QW_wpyK z>>s7<#+!21rQzJubItZ)oS8y47E`GE3#X3<&98`fpx1zv#SAV^*OyNe)rs7)t<MnH zFB<lJ`_tZ?v*uTbr5S-U@>lirw26;DQa~Ki7!M`4mWi!k7rzMF1_<I`dqTI}K7D?C zHojNRzP0`N4`-TI-RSv$+~%MDN{WR4pEH4fRa-7*W~P7b^Zr4K|B2)H9}U~T9#YQ# zu+;xg4OaX=K?)07u4nc0N<d&Lkp+!n8iKb`^O!Wh$<a`VNM8??0H#tr)@CiBUtHa< z`yk|qf#mPkam?Fmwy)3(gREX1FUHecFWYMZetw_8j6q7sTbL|{d)=O1@q?U>Tcd?} zlfjMz*uO9PlOyO?!2xiSn7>U8==sn>MQg9#jTc~Dmy+N%kc5=i>*;`7hOPu1?Rsoh zE_Cjz*c{b5>AIyAOPT~FqN;xdArIJGN18uez<Q>8hpH^0c^7Z3A39F0*(i}JKUv8; zZ6#FS^9bpVnVd%apax2l-<1NdAO=l40vvo~-4|CtVeueH@L_Gl_Vm91gVUw?{p=)m zes_F3k8QYEm6Kq-Y{}&5L@zzp(w3$#B_#5g*f`o_vYOU;TCX2Y(=GOSb-bqnvmlDm zgTac{Iu#o4C4q7J&2hWhkHXt@3p+zcn>WhnOuehSxIV8J;|HtrlQDV`m#C8vXKWPO z=&r%#tf}5t5<rQL75Rq+KlE`3Yqq&xf#+A|v*p%diUsC=zFvP#PJybfeoX6$cQE^Y zM{Xh4!qpOXmhe~Gc=5$ttGfEjS)z*HwQRCUYk^P;a^WMAra@~crjLFjB4M@~4e`$s zeee~k4T)`H)zS<V!+pfcU%?teJi*V|!c31zYy*$PiIj%^+o-fD2jHQnxprW7E_vfB zWsX51AQq3cAg3eYEZzb6ej(L9JV0{6Aq>+$;B$U#4`;*gQdkhZbpq3(vyYw=NN(PG z+-}G6ct?xEek7P*=ElPj%0Hv6k<EAg)jJQ9QWL!iip~<n8E4c}6_}6CBa&b_k%~yM z`W0A{B=H8meF&4-PqP}i)*7|qta~kHL^5lQaoP$0`Hu;hX<nyYCj5^dCWQY@sQLeS z+yB*KWUE8DtE{+u&sd;ax=RuU1oMviuMS2BcLvz@auNn%kpu^6L?dG$%!7azVKHGF zhA#jjEU`JFGFcrWV~nFQ>J=bRST)G|WNb$FF?q<R_Xnre8!a<g<udIoH~(zD99yzR z*D9Z7eq8&!<T!md{7n@3Sii~Th1+$sgxixbgp?1Pi!E_>=Z<FM)a_ei;pVLvNON(g z4?Y=yJcy>BPCcMGxK;I*!_a3KfqDNF=h9m|;W~OqwCmx8-x;Lg=Bc^qE^bhFdA8kp zjfLM?I(l(-mkYbOxD9e}$MdVG^esgdn0FIcKKkkWtepKt8{7j^C>6l5cf$SI1^)-J zpP}EPPk?$$Amnz&P$zWZ=(U*NuXv#6^wxUoTRr;=0Q@J^k6}asvuDUJ_%@g5Qyo(# z`MBrlO~8<L_{RCU=jgSI->-^dXP1x=0}0PNGU~jO-n9KOjEt}^K3G@@KM`8U)STUz z;(cF}CutPG0!))5y_Vj*J=p8dM;N|YYjji(cXiP+$g_WOFtOf3yHo3U6zQVPeV|JN zii{C$FH-_uAEDxET;MiKU-;k&>hgAAJF&je;#{r2+`Jxt>Z-AOBej!*tkQBLdnwiU zOs=${y<)dz>1K`r;~n%B$js9vhbUR>g*pg&vT4A+wy~arJFEOH%bkq|+Hj`p8Yuy2 zDq;CM11;cK$iR{{P4aQQ@Z55GBoU*WOFHGCo~Cw4Es^XsOm~U|O@dG!+X`}(F#74} zMVu*H!i~#1KSaP3YFT)hA!?Q;mlJR;YR|x7p1ix2hI?ukQ&K;{oIc3U3{NiwNL(vU zo^{R#I<_rxv`r>0wfYITjP2{Lay9cYvaYEDmr<S`79}sUekm5{AdwoYGPZ2;{<Xo* zWBgL;S{`VQ)ME!zZR<(%Oc~=m_a}+HdJts^c1*Meq?YB4J`l=Y=DD2#6HLyNcD9RT zZQ^&L-S_E3y-Ix=%Wz!N)^xe}ol0Dn8>|zvFqxFD@^BFf3Ljq~-gp&x5PAI6^~DKu zvh<|``}n9{+we(B^uqI#Nmta|n6Yh8dUW=<>-EJ(26?NLoN+wuiO-$`o4mOv<AN=Z zwfT0!X+xCdS*3{;k0nit4QU>hCGU$FlRlS%=%U8Beh8~ogfzxp{bxwJvXV*!jqxFx z(zK7vUA}P1r6jBkrOzHFc&DTCs8=+|H-O$0>D-JQTLtHRJ&nt^_~px|vmg`-BR_h} zngZONbTzG~O^U)Z5bMKLUW(CRgY@<V0sfLu*H7y~QCx&5z7FE?jDWFDE9bG^%y!$7 zT;iyKicTq|?!yaZ%QbVDQACunMl^Z&ptwf8Rv_O{jD4~;z0z<W-0Mh?eM|q<$cWt* zw=GBUQWVb69?t|j+fj&@3nTh=xI@$<a2?>@Y4QpN`$Ltl;+b*=@IbnfJX;dXUi@3l zwyA|e8Qi~O(4A*Vx%Juns%vd7q`wfJr^U=vDaoM7IW@D!IS{}USWCCHk|vK9To8gc zdOlk-U<ac;XPXakLAx2LO}h#1Sb=rdD0QZl`1tBY+X-?*dWy4bcMd7Fn&@Dpxf-mE znSf*0T&rnrO0!(uI9t349^YuvsS;W=o(QF6IVQSkxc75Zs=QbnA^xtA(_+u3b)kRc z4hn`~cFh-$KNum*Br&9?7lQ5+sab<rbBtj2p;_2hfyfploApYrJTYXz^O-17n$F^m z%uj(Sovl48kEv+7-~3inT;*)l_&m#Q47F@!4;e;eQHYpXH4ToaZ86c3nU9o()-pL= z*46%8@EI3FdjCp6anHMvo|)OatZ0opQ)GnoVM`}nO6WX>Tub4&3@hx{W@71}@Vt#w z)FejZrx3fLA!RpM;2OqQXh>0veGXeXUb_dUwRLKYzPpgLTArX|o=AoHn9>-jHdp(c zQDeOUH{1AOM)PAHpz!{4-Q*Q{sVn(1G)fKs*o=+`01DBbUR1V=W~>&+<cXccg7Wp% ze0+Bdh{7qRL=(@DHsQB#;nnxW0x!1VP}9`a2{xW|K9!;l&zSZB(acPxl0mQ{*`Fm{ zsNzT>yg+-)K(4Wz^40xocjcYkGB8ZcM{h*n6cHUj4=}Z?h@PS|xMgaJdt{?!eA8mT zXWqK$X4x|=@5^c-Egwy`Yl6O-t4VI!pg+CPA)efQnaB2Zb2Z>SzjLiT=uFb5<F7pN z6zTIM`OMhhda*X+n4y0e<2J}?X}2~rKP9*b(`=~xO+gdov3{L2mNBE5Tn8c*%hRS6 zz$^_iEb&u_JvW%a71=Zn2eRYQY20QT2<Aqd!MthO@R7(=G*%*maIp5$O|u$6`Gr~$ zKAb`Em=)afd&^59R)FmizyrbOiY5-h#A15M67ALzol9sekb5<k1SvWZiWvPKiWtd` zkk5;aQ_!mnX>Z3F;UH35P$&5GYN(RRw4x?v+;<LjZDhoHTv6?c!A7!LAPSKxEHI}+ z7$m(JfxX;M^~$n-`PGW+7h6mlU*V9}hwoDBzPj<3fJyI~ZEEqsoMTew(&U~w2VEL1 z{xgp^OsZVU0#u^7ZfvV@PQr3K4ofptWN#d~>WaQa|IRsn#*Von9L~5NVMVShZSrUD ze*JQo+_ii*f=rt+n|I_g^dV!hO}<}!&mJT8WWd<B;bNMhBB9pIl+?$U<6%s$`$-V5 z0I&m508nl(=VlPKH*(sp-sG^4MW2vPAG#qEJkd0`A>9eiEhESi68I5P;kZ(N%marc z3RtZ_QEeExlCrB8;BxqiynNVUb0Q^fGtDU1dfbf(AMXg^mjo4tLQwn-q6kr#%y@NX z`8Waz@g)y2cP@8y8NYMmAikKv`P>(O`E&bCX^A|EE!-#E$cV+6armyoWS_&}Em*lT ztUB?Dhc~=1xDHkqQ)Ze`_T2+8!aMM1UBLB<_(X_DbjeZ)UOhQ7XRvsI4W~agn-{<M z3T~fHb;WCzT5WcmRyX~L=RWolV9mkW;V|d;oT|VpV>G9)*gaOGNBC2J$i*FK!XY;O zq&QG}WzX<>*LHF8z__z}rOU+zO7}5ary|xRL|hFQ$#}_FEZ_rr%00)-yNOVL(WBrz zdW=>7@&y#vS$Vcx7%0IDDc(3C2vUM%4VRt|keRUY$(LhKz)D^=2S?MR8EgU1z<kR` z>=_g8>ks9QxAaP+_yq~~N>%eXgE=9<AlN=G(jK|8E%ffI=M8aYdc6cE{>3GWlYqi% z@2B`nHHe;|$90ju>FS(oU~bCbn(I^^4=oa{^aw40F=H?+?^TfuNH$pkXcr6rpVh(J zTV)1kCIiSI?qsh1Vc#o5cln~bU!k+l_{HRd$pSirTMo?`%m@GJNJ-RP_q!EP^cu(b zz%?kd)e2)}Wlvj9q$JTHM^!5_+aNN#D1!ExHkpS3Tt*3wOa*ml{92(TNF5m<OA>!( z{KEk{@U%n~im<OxOwcS9)DZ#2hAAG>TAwMt4RoFr9PtWL<yPNI)dDU^k-l{)v+Z_= zy&PB7Iy41yycjEWQlhF6y|?ng0N()amqtsQgI@7)thl>!DAPiik!=lSuhx-a)jjf{ zk1Q<wK+|<o1wly4Kqb-SamSiO)GR&edPT&umTaOJn8gKO<BQjrM?n5j$4JzzuD<_I zUhlx4ZLj#Zw`kmKDwW6giSm4hV+_Bn;GH6~+Y{xx9AHb1190!NJe#abp>65R(hS^C z;2PS0D1<<q3L(sLV<<dPT1!ZSib1qh6{qh^XEj#;FlmCQ&rov|#D9LZcN;J!f1BZ( zkUv7rSaqMqVMbH%%f~GcTmFT-M+Z4(rZT}ZOL!w%xT!_x450YC9*JheDs+ok$xn_E zwT)gS#IsBz)0~wH@uM+1L~T+Vn)xr8eFs@QN-#3lhtBelxL#lz011mal_H7wTM@OF z1#_NEVoGEO4~htH)art^4sUE?wHg6iDug0wCNQnbo;q>63-l{ETNeUt@fTE$HfGj* zJ*7nxddyoA05?>|>`SIESpEy<tHMAPB(^%1%lf9WtaXK%=6W{&f@ihuiNt4qPsbiZ zj}(z(k6Q3t7P;i<*mgQKIGjcoz(6Sz-0$3vIFF|DqBGcZYVivvERc))=Q%vX#ypZ} zRsDp4luRS&<{^_Z-0F1`>_MkGTy)eX<a;2keR{3^AX!?1e%Uw1;|Ymc!Rui-ogGqw zr*~0u>6V|B#h!2c4pkNVq|Kwb=3Gk}o>|#|!odnVh8<Pmh}dw~3ot7kt~G%tqQ+Ak z+pV&x0>P-l*zU?w1X$zzbEhZrg$aQjCE;AJ(iw`f8K83~1|vs;>V%+Hz3UOJYK~D5 zy$N49<*zG%Y0bg=mfghmQCnqH*FE<^J$)AAx_rNMVIlZBq5~$Lk9jM+;{D!1E8u+{ z7oAB>c*^_%PEqe-l|{q*hax_A2-)JF_VZ#c9Re@xC?|Jq_=)l~r*si*cn(~l-y^40 zXj7r3p%urUeQ48mEavM$Sxn7KHTfx@*z;7GXE;6@r*0?F{<}m;?~n0oTt?@y9a7#0 z;r6O|Bk`>4rB?^0oaA_>V(?a!zhd4VA@PMm9EPl`e`0`%<5~I+2G@Y^%RQRa^1Guq z+@CMht;C6*p=ey4&L{`G=W%Ce!L;Fd9JEGx+UQLg-_0}h25NYqKAhHtVbUNN2lDn? zdx55nmN=Ao!#5mJt{*WukDttujnpc~8n<Ni>S6U~Ck|{eM}Hhi;ifR`OT8iIq?G)U z&l#GyH_b{rxi$8{?@4BPjma9aZ~M;n)&;%~lufpmtm>qUag;wEm#LTTrs9~OnWs82 zjq;Xh9&aHd+erX=tM=B>OA5O8L8;i#IJ-V{o0LkTy*^%fM!~L_AN?Eo!CUqs1AkJO z+Q7gW5!!%qJaJ<B&GYiitLMC*#rN_>o(Lkltlp;M&1ri1Ahu~!UU4f^k^Qpq$M4_i zkb&&bI%R)R9p3*MX7j&$T@ia*+rMEpj*j+@{{TDxYI0N5c9d~cQNQgV*AP>Ml|hke z^U)v!5VhyfAy<X-W8lhC381Ym5^V;A>oe`x!Epa1@SZJ(b-yZ@OLLz_FLb}|2K@<T z`69ucS(7791RFMN{p-Wg<23Cy&G%yW{rZu%^Fyc4_lJmvMF>F@@1|WJ;q`6&?j8#M zwX~$PhLsqM67OcxZCUV))?Da^FRhG5LM?W$2kmR!@WTm^^Da#4^4IF_n+%lx+nvh~ zKKI^>Fkf#J!j;HiIe~e)QNfhk(YQ(iZDdxc4dAH^JxWdBFR6jaVbrbhbf$(PZ7sbR zGH2^GW>qo)xz>W>-@z9SeN~t|<?@*JbIj1dc&TNm&{k%K3{~i~Q?p?G^lC3ljR{L^ z;EM@|gBUB4Tr{`YnF)C1(&wV&f6NC`hDNc;SnN$y0-lQi6=h1k%53V%Q@ECaQY2M} z%c#l+E~;lu&5Z?KIihMYQ#fzDVvKSFvI+X*5BpeaP>?BcCBNq#f#voR;DD$qv}iuS zmh>pftzF_`i&=ORH`Q_|>#_>WjSqzv8ZLzk{eYplEiIMDICt}K7VWWOX%RKprOmW- z7dacIjTcAO)P^}-O%55!j1$8QgH59eiH(!Pm_)(ae@ez@TrDn|9<CkXLauoU^Ql`P zV)B}%wJm>6^&whBq&?zotuB?dgyO)ZH5w(<w|L;5ZC)P~XV6%-MO!JE4?e_7jTVrk zLyuAJ*1;yVVF*qUnsGU1wHGk0mv_rRvpMnVXlKcfsyHuEqOBE&AbWWUKaL0kv^G~3 zSeOB8)`M(eokqni*k5`E^-EpxLz&7%P#w(Ah)9@L&MC~xm*3s#4c{U)MHOCPY;ubw z!i%g9DIbAi7zB3N42-|1XSp=2?ArrvH@7F*^350deDxdcEgNXEBwJlSo^Fw@x~6Ok zxVB0i*q-j9{!(!Y_J*&-qpVQk_qg^otnog~o<np;zoHP3eVg<K&V5dcH@xl}uwA4s z8WHI!_MXS*4vaW}!B26RM0cndKzEE2LG?|&@T;bs^DXVjEpeH!cS@F6+$BL|#r1?m z{Ur1s5%B}p50o1h>ZN)g_%cS666QeMNsJ*ZVnq>lqaNK62)|^9@!xrY(@rZOq0fu` zL0*5P-4P+Zg$L>lsOpsTNM!^-Q4kW5|Io%JFRCR2T-K41Z<)wk1}wCT<Kxa7v$AY2 zJSy|G&nypKLDn~D#}K}{@GRViR*>n=mmld54$C+xl9DjYeqw(!A8Xdru!$tjq?+MH zL_LFW|Lx{NQbj<s@bn&^2nw2@#>^pkat@h2v%A>UIN_()AoXkcxZXSEpQw>Q?dGfk zio~4v*o9j~z@!x--7ID2caWFk17l5jhs(3of=k^Ll~{h0Z6Kz+87H=O4q27s_iy*g zb?`bh6%B!&wGrBfCp}{0nZkZYK3p&$!RnRfB{kK|D)wokIfHdbDfey6;Mx4dQny-l zJ73L#_M|z5d2Rp%x><6Yxz$DAW$2b#y#Rxh;OKH2IltKyVn6bwb$M2WokHN&#{OV0 zwZ&J!;V&Z4w=A~?H|6b*8{PkDLtvT7@zk8&(zW^iAMl<&x0KBIKej_~|1G2A|N7+p z17-gY=~>lQ8SQU$*K?=i?kzkuzL=tl&SFwVhA=<@J5n;R^iT#u!|<p!$_sr606=(~ zs;@hfvu(T+nNC(-g@k8Yc%(9aNBc@VZ+A=MySO9tX?yX_**a;jKJne?`F?wH`?0~K z8@a@pBZ%8&w2kB>{QN$65qDrhl?!6Z8M0tB9gdaU<u;T>H^2ouzU^^09pxq@->n`B z8#)L(;YMP_%7k%rRqAd`HhbjJ4w|-)sgBq*<uIi%J8P>|couDFUe(BEy80fRdYz_j z3oY&BI$Ylojby78FkeiV&@d%skC!>Akzq)qp%2>E%u2UqDKGn5TtK%E8-JmJ1jc;B zMWp402C~HlUjgxqRe}{PWve~^NmdTlQq9kdaw0p!&WSS#Z&ahbvTG`w4{(BNWAjGP z3E#e#S3~{W<)!>4y(cFv&epL5CsS_vAOnm-ke+erps<4aHJz}h%Ugcp`B?c^c$kA4 zX`PhOaDBhL&N_Ax?o8!GmNab^J?ETjdp2y5`4KQECdAh@T^GG%eeA5w5ko()Rimk} zg)yooS3PQ0R4h}Cy|iWO@|~BvbiNto1-Hp#8I5zSI^eNnD33)l88J*t$*t_A*y5Nx z{8=wrkF~?#hI+D)v)jH>ks(TdQ=`k8;)|@#fOK@f`Jh79d=?si|2|1&t-(_ybEk3~ zWt=I>6A|-w+N#A$Rwq9R&V)0UB1*DMX`xj=e0V|UV3M>N!za}l+9h>~VlNyG#1cD3 zx^Cj286Bd7>x!&g|JNW!$~ipHRTCev0e?!WGg6lpNd&s2Qn!J2A(7f_q*7B<L4v#_ z0vBuoqijQvpF3TsX1hzJ%G8n;X@5~huVWQ{N*FlHw<WlFyy}8Vdj`<)lqFXgdE%y# z!S&^130+V-FDBcK5sRQZA9}^k>fl>-Oc*1aa5x(!xu12yeNrZQn{@(it}7AuR&2X> z4k`TDTEQPu5Nd{mjDn8hG5LkazOal4w<^|whPE1^^-k@Uc&*v!2|L*y<`qLB;%%p@ zolC6sqq3P_$OfIsgWLWU_Q5o#Hem($f?T>^8hP1}L9H%0Lz7io14FoblI(VLXhZs^ zgNe<9N!Ei2D{5QLx-^u>xG5>fGsN{PxLWP|y$T$^D#(0vlR{U&{%@HS*X7CJ@rkL| zS|;-b7R2gOf@-`X2ZS5ZRgbh+xI30bEhWfboIm1kfmV_5d-3DCbXIeT@IAsMUloBy z=YB}GA=Gbh(GuEw5H`_EvVKZtd61$W=2KImancLeP;(*qS3VJ~-9`ygv(THA1*QX! z0tx33AEp<?e|V=H=#AN76bUGv0jE;61|6N_CcY@-hn^_#$3dU#wTfuo!rN8PAbs<y z?E~|W48&r>Big@2Y<TZiN^}m8RXYaIpapl+m{dbEs&|j_jtAn4Ky%BuWUZnA9pmvk zb<AvDFmWI=i8gbq3$@88$N_sO{w|!b!Ha6Lf|$ked0f%FpnvzRkutK1giE{$S2B0Y zh^zr?Cp>l&ipHBiJbV#UEZ!SR4uwha6)YxDI+GAf!KbZe)hT^6rtazvo{tR~D=At% z>-WhGw93iXBzDIrCce>LtSGN>|D_hHeCp83N0vKXsMZG}kNRHbu^4g-vF}vcQ%#BR z=W9cZ3MIKCEAKnNYn8^=eNV8Z^0Or&A>_;0>H;@)ENh)P>}W>Ukst_c(;&?|(9?T7 z%6m9!)96&-#Jx4d_!Zdvjtu64=3As^Sk7DIhP~{DTS(EvFhw9po&r_f{aMajZ(9^? zqj3#t%}3xg>@yi0Lc8c!(IyS|D*Q(fox8i(o`RRc<L$=jJv_nVe71r%R)%IJ<>c!N zW#53{FpBRmiV6SzF9JF}z69Y)0?NG+vhtFRT<dnX8oA4l(2ek=%B=jfb`krf$qBRU z5A%<RXLDo$aW>yQM)!V0#tDMA1wm2vHzcm(tm`*~f3JY;g4MPl|6T{Tf3E}j|32IN zR|Wjfb?|RovKZAJCzO9`;CiVH0y5TlH5(c*wE0}5QZZ;SODoGF)Y@V#zdm+NY3YoZ zOuAGFJc36cf=3}dpIIzCeRoR!Q57>>pFXTVlp{{p+jeQ!<V*<WGhHuPH@+`CC)=M7 zH#dGiIAf<k;rF#*?a7h)g<+$hEL!mglz<gGhmJjw?TypZb_^frGhbFaXO2PGIXKVA zy|^>c*u~h%*ugWkZPbig@kBHUJ)3ptHcmkM*8<3Z=<HKr10HqStS0R%YcQ7!x|Q<N zC$lscX=K_}kLxlPFE@_bdv~)etBxPbb?Y3L#h2)7aJV*@qjk1*^f@Y`4)rL{*ftuc zAqS;#nmpRZ<}NogeAQ=EAJ46>$Hy}i8)sl&OF)CCJ|JjCqf+xXK-m)E@@g%%nacaZ z>oR<6jLyjdg5XfV65%^>p`*=U@JqoqsMXb>x*R+=&CKugVjv@dD@<*!xgvy-Fs)tv z$+b7@CtZdZlsRn9<kNAMkkQ8T=5=6aTZ#0Hp%<|t+N-pi*J<=xrZVnH90OuUoJ5UP z=QMWDgquukpq;@}GDy!>;n=OI*@vB!%GBWY%PEwLrfqrr>nVWiajeJ6-ZqY)*@o); z7lnUW&!buGNKGc)it@-GRJ5B)_H<uB<bx}aRu!`SFUH>az4AWk7VdOxTOHeWI=0P@ zZQHhOc5HjcwryJ-zL{s{z0SGs>&!Fr!~O@pRl7c`s#dL)v@1YmwR$ES)BZgSNucl? zq>!dSWhNq6s!lE0FE>$uKBj@X(gon9Wq2i|-@9HDJ}8y86+pWcgm1Ktk}Vj+FB_oh z4^U)}Wbp&g;3EyT5ltV#D=}zE!<F^dWDB4gL$P?K`VSnUz{}RB@$&@LpG)`2>~OOx zr0(kBSx`vrSwo?_v5%RhT*vW0e)8JSx4;UN+_&8*ZRc6aiMEx=1w632VI;Qz`Qwpj z99zd8+$TCJgP!crx$3}QH7?ZErE#8qXuAKvc18C14&UG~@B&#q;Px6Y*^d1qCK>ip z)jZGSgf7ts6XKGiu9JCmMs=Ev@fl*5fP>&ZE^2gyfLoUJ0Aw5C<wP<nl!($Txr^ZC z68{Aov6khYOkfQH+Om}$vei5OdXQKp1-ZIr*#n490*Y>@R3J-8O=JLHP!rERaCi|< zquM=pmsSa9C^ktB7{d|L97Kc}kEm^(=?$W`Q*92Zd@Ibp7Rm8muQj^|LWCkf-oe{n zo^-hh-SIb2ZwhMf9(!J{cTp<27n#`43q98_(NNLgoF5z=Q7t_!tO6gQd!lNaGFI4O z2!+@yB8-6>>9{|!SFn|SXY8Md>4R>N$M=zN`u}u!P2P8!T$%YYIy3Lt6xYXy-^6g! z>*MfK6@!YJw#Oi&6NoD*1p&fEaNl<1m)P#jh9jTLwxHqMc669`<}*){n?Nf?W}mCj zeEQSgC{yYTJzw9e1qioTopMT$yK3amDqLkRO+hsun%14}5|01XxK-mLc^<z(=J9CI ze+@bNJP*9FBjD09eRPxVualcv6X<MoydfewTmmrZe|DI9xCYd@___O64=FhaGkObO zB7dOMpp3BjSY+R*UP%hPmw}!#>!_ASNJNfLBMXp@>xFsrcvR!8SD#dDxy}!_v|y@6 z!59x4u+Xxq7R*%-y7a%kqIH<a%atynTruBRtCF1GCVcp{?Tf;nG(e|2i<jI4Q|^$A zQ#?ayKZmL&Z*~RT-#S`k<7R%mh7tOZnt8{yM{=m+nHg)D(T-^^XOPjILzT?DpoY0W z@cp%>4vXr)dVqiXR*LZNoQ(bkvHuTS<X@u&)mKfFB}{J<7rhjtKnVE)v4USH&QaK! zbNyn{as2H@K`ICVR^b4~p5x1LW9LQF3Td0L$M`QfsLDfq+NhJxReK8YoR3sq+0TGC zCabNh@s^6Q(!`^kaSn&ByUr^Yp8C&^DbY`m8hreL8&4!GTH+h}uB4s;V^3^4;#&AE zv)zoV(Q6*eE;<1Gt}8>BvCkC=CM}DdoA^H6*r1Wy6M&fWhDiNG&Dn<#FqZ#>3iQW} zNoQb6=<?`mF=_e67`?PV4eIvZHttR0(Ve`4irA9ggME8wk7Gkxi;a%tDw%CFW-INy z8Mo4I*MUCtYWF50IHVXL_&(&Yr??V#?%Kr1=CuDjJ-uD~yY_tKC#;4FAQ)(f)+6{r z8Y3tivxv`_*|L>{cRFWGIx6Z39;TeAE^8ja0e5I_I+@EVlZ6o!kUbVDlf!zqNdOy_ z?J(FdhJ`oIaj6v?4sAVHxty)c%(Pd>cGy}hUue3X${>-wXTFR|C`p00J$)s4!{1MM zD(I3h;a+U<+z0DcAon9Ci{MtcJafv>s(Q;Q>Ml`w68iwL+*T^BC~JSm-))h4I-Pf{ zsRMw;`cT2r<l<k2VQVY}TgfrTDoQzEHiyer3|-7VMBoPrXf(v_h;+L{qu}u*Lk7## zpQ#;)MJ%i2q$JJ2f_tnOlHTFQ)~dIhZ843hNVmGnWK*M$D4uY6db$r5R@hqv=5}0f z%C1Z$8dSHKyrv#PGiN4TbWl*TDhsr+NoC^6V>wh>?>MP`{}U?DeD>3<%xDU+K{&e7 z7!n}b>OrC)*?K9bnp$E$1#y?`tM^$+y^afo8Xp2x{kWg)BrL*D)aq@g-IP*PqMn&d zdEoXLB{WiJGVTzmFhcQLO`h^pVqHVKUWxwpu%|;g)lOPd&_+zexPE8Gh8nX9%85#H z;~_D=0)9c^F;n3pBJk*WX8PI{LI{Fi4F?+q0T%fIi`6~a{`2`yyqlzlV;kcbjHbhj zn33}$3Y$fAA+M~dDOUZVC7`?|^XN)xnq!E=U_4_m5`Vv|Q3)QuO*7NFytOc=LNIy$ zVzH)go$Qq5e!V_9;Q0)rM;<fS>~;HC4hR3ZB^v%<L6Ng7)Eif{MtA7wCN=uY&1mDy z)QR)u8WguXNst4GJ(A4nO~$x;s5F{yco5&{8Tq4P4<tK!kB&3iKwxN(y>t)E`t+IV zV=&n(M&`G{&u3|(Y6E#N<a*A-Uhe2s%olwJS8B{rT+ZYgYQUCL1w<=hYU;^n0b(8h z61wY`<aIdXYky~X@<2jKjfq5($x^Yq=~-m@WW_o^=v=OUs-tGIcTf;QhFx}j(ey!A zE1<FOwdAhqLUMJu1!poif2gSTcO9fMU6yESqVye1C6ffn++kLC^U>wt0;<W-#kN!X z4R<#sr7$wrALY8392HDvJu1ANq2%DHTdFV1dpoaO<9BlX_&=FL#B>Bc)ZZJ8gUiVj zHF?yjPDku_9EhB10@>m0SwhJhfv^?u1v9inh&v;Xr9l~pbLh<P#Kn5O!s;iw=({2- z{MUV}V*`to;J_($$r3$Z?u%yQnwFuk^3_BPDBD6?V8Z4%g_(<HBgByE-548vi;a#W z3TtvdG|^_-MsuMdqk)AuLs`?Cg65l%O~_pE2}%U_3CEqEQ<aUqMsd^AA%`H2sGoiJ z8Z?006~<a*ZBuG$gLl5K@)GdyCQo;b8ewB`z|D2xbj!x<@<#qb7MY2vri5#&X4=lR zb7AgzWwyN&#y|Ve(jbLicEsKIJpxLs&%|rJOZj+>*zJ$&cO1p<c<1CU8kSuaZu~4( ztXf0jPjxIY(C_<gn^hkFR%9X8s}Nplx>2?OH{s2YcLe4YEQ}9ulR-}p3SA<1c>evC zC9fL;BZWUm<TdXTD;m_8w+zAbrECf-N!Hjx$#en348y=YJp87tgwY(9SxjfWRFO${ z?=ZM5V<j^H0PYVMnMcA?>s5h$z>--q{W2n{nF#5zDd*FI2+AqEdjrVIX;51xo^PsL z0k;o=M=9eom))XHSI<3Ih!dZQCklvj14@Hp#TFB6ulW1u(4y@4P>(So6q=O93OSRf zYyB?}H=~-V?#)q}R8X53?H;LuIzGM!Ir#Ni|1S5*3tHG3iM~q{ZWzJ-;A`oxAe)_3 zUd%8fy5`;;2e2CJlKHGS?F3;>Us9T~8Go1CYydj8-HuY}PHlfl{D@Yj(oouRje~qg z@)$2dus{OIfkwG|ghN3Wmnv;6;nO>dWnABEP1>kx2Vy%*>>dxkfm-P<OT@p9QC4qe zBEwg#vK+$f6PmB+QCFHM9MxZ^WAyVhrNCT?Xu2qqjb1W$*K2@63_|7?O5^pW^K8;! z{@msqG>I0zn;u%8NIf4Z(uaALueGR#dfk~EX1On1b5EZ3AlzsToQDiASqk-f-jbb@ zT-Mw&uR_{^CB4XS1ZcwSuEFfG-0$KZzO-BNT-AbYl0Ctrd?rqjZPU5LjH&eNhDj;P z-dydshTF@7n4m5?u$N>X{hbTPO+^g@@pWe-`sHFq^Y6POAz7t=v__&v*8exjvr+Zc z<%=!(Va=G<>fjK^j^Ie$v_~Io$S4j4B_>eA(9u_)gc0UzOXeUBM#^M&2uIhLuU}5n zM4sHVsJdV-Z0W|4SSYNismtfo`tnxfBe7<a<H6*HB)DY0INIuwQ$OYH>5=0#>G^TB zQ~oV^n+f>B_B%ONsV{OrB~Ic_tRE`7Wh^HlKt9bwEm$<ri`mx(n|=r4PK_mc$1X2> z`lj%li<U_i^colVZs&NJWa}!te@=jh2=F9y_{u4Be7q1BKVaf?K63+Hdn<@b<^&Te zI|X{(;m4U7zXO`~CoX!9)7x^J?D=;zy3?D~kR+$h;!Sw8s?iGzrgznz)1NNHo(xWJ zg6PhoJuBR9nC+}@lco^ocDGHPotlDxL#?jvfl<yhPs!eqlKS^(9`?jqoOYvj{dS%v zX=ft`ibkrMA(;m%^C~H)qb4-)1ZVFEmO{PF!}rCX<weJZOf=XPec#Ahmk>BqB?1<U zdb=sJq`Asjlor|UO|PBovrbt{>a*3Flg4dH8#tCsjNB_cHC%0Gk6;R+k+Y`I>t)=h zt>bz$7A?;%4_&^rO74;q#^(Ge$%fQn(a*F$8C9CPjWq4MH;x*#C8Lgy#nc7!^%mJD zG_KuqpThXQ529?P!HhY{3tF=JA-v4&Ykm@;E$#gYeo152`8oqKnJ>%}DRPbKlr;}M z=!X*j=&q+})LdYToh%GJJHDBoeVa0;52@(La%ys)+k4j>yA%BMH@9f^T24#VT9Q~R z?NPCaU3rSZ;{?o=8}ke<Af7jm9adn*(TQ?`=A4O#9g0~|&WSK&c$b>C%S_z7Ves5E z&h6*<Y3CBIDPLlkS5loVzc(qF+3LR3SjY-$zbjc{6$g|PN-sYsdtp|$Vyrm~c;<A{ z(r6br+iRMl!ICcObp~UXIMN_L<<9kERj}O9PNuiub4hWN1I*X0@&$uwmdo-!u-IJ= z!N46>>`Ws(UA|qVJ)^><*3`x<5GgCt-&kZa+2NrxuQPMhc!XB~Wwg`n#)rMvJrHiP z$@du{clV+u2Wx_m)(y)Sp+G5n1G_Nss2lh9(~F1%;J`P8ZSA^z?^Q;|-xf4x9!>7B zP-XVr%6JCmB`j_y9zpzo%u*gxC%6kQ4Cf0E=i4#3otT&q@Xpt}p)MDj(@;G5=wM++ za9gJLZ{;RBu=l7sZousANaB&J30cj!B2GBJ8Z)y0^Jq%C!MA;XbU`%J6xxHnqK;7$ zeEw*7X-nAGR;w6vFW>H!lSHwcIc$VGK&O7n=r88s7?8zb%5}n9PLVcNn12~>@*|C6 zRh|fgJ5h!M_+mmbg@h2e3B&26E^)zypS73?)8=%Vf3=oF**4nHR8Zv{Wkrj0B8IUc zBTmepkgL*@_scnWkz4t9N$-X}Mx2-ws)Q7I(pKtCDM8w+k{~-N!2lr_lgjL5gQ$T$ zv4OrgAUstQyH;%OR7|QdL9MWe1Su+tC0b1ht)SMPEnGMX5;OD0*~lcrvt<KrI*Eo| zrD<w&kkO{1JG%?%{dV#o{TL;N%OO#(on~1kL{NEza11J<#0+cBk$~0KOKGN1I$KN? z;J8$^g@sjDzdp-cez>2dXRW2S#WGiSxi7M|`SxO#q2+tocF|?s*2KAyEMfh}{>I+Y zo%8HojT`vXZ4m9EU<#znzEq6GMcU=}q>SB!;ns5g9c%rjiHjj)f|BgSid5xRPOZ8; za0ffofMKs<S8kUDR?XVJK-=OQ^P#&fcFy6&+lpLJF0+rq&y%XtwY;v_H32U-JzM77 zk%2xt;MRvyV$k_PI>CsT-25j-%B>K($-Gl;bjs<08?bPov2B3J_<?q9T;_>&KdI%R zY6A9<qI<Z#w>LUV(zZ>dLfdXsn5{CT-%TW56{jkzUBv3_#0{@f0r;J3<whiK=&u;Y z=2hjBG-Pw^uHRZ}fi^oj=7<vXrAmoHbk^(P7lmbs0UOx?8N(6tIGpxCz0mX$rFael z)$^;PUsoa28Ci;~TtiG$;a7JkF4KlV<*p#4wV8^2uwP!r%HilO{>Ug#wi{$it>rS% zvC#IF%{R!;lVn)czpO!%U(LPf;-kp0BumXI&7n5Pe+5&fyjr|Bb}h{$npQmM_I5}# zfbE9a@)tVB%~GJkgCj{vZnx-qyz=Qr8nq;GfZ>(&l0i(`*~>D3%HFx`KvMVDhwc!k z-{7e1x}nWe1YdtI;1gGsEw^=^nMr~uNI3=}mk$7kXpbIv6K+okA{#lQ0bkP;scp{e z&`Bzl(AX5RvN#zLNPe_V;?Ci=;g-`OFj4S!<&+bl&naCBMoY9+%zR$g5@-q3)F>Ca zq(U`)P^E>R2LmY<g;4AX5|<5ha^YbA>Gy-RtXEEX*QOFqH3W^aM|>TNRcp8Wrlvcv zx>br853Ws0@wmyhQ9v7g{$UR&|6?EH^a)9Kn?&TEvA{E_wp(O=Yx`W&w2w<Inu&Yz z3MsC>qV_3v@AVu(*Ko)dZt7az84I1<D-J1zJ-Zi`x0AIDiK*3u-$?Li65K8Hkx`I? z6(}O{Crx=Qanr*1DnnA9?=OwXX<H6KzyS<w3X|jFm>e=yLCj0p@rhlb*dLCuqXHMa zNsp}D0*1Wn4R;`Upcyux!~PcTAg?@O+O{q^>dk$<(~NbpD*6gNv=s=fXF09#a_&F) zk!Q%b2mG9guj%<Om<pgSRm995m}0OIcR&kdSj!f(ln6N;20Tx)u3q^p-jKX1a~Jse z){?sh$M>!`>MR`oZ8}KGDe}4kfcG1n*{;sny+E<7to<j^SXDDv-TcPqL=`>&?z5*> zff>!~Mp?(fp5G8{z)$m=5u(*Q%fQUxD{B-VXJUaHgm+0x@tXZ~?R=7ZrxZ0Ljj~Xr z%hI$@QY@Zx<RljAE3P!(X+}86#;OttHJRwv<#-I>PMO9$zJynQy|*Bj9$m=gE!X!q zT)Ve`pKl2)Ul!$l=d|E;*n%L*SN0MR=kdNFqv+EbB(Uqe{-~XK?X(65!XT&{WyhuY zYbaKks^}BTK@I-Lj<a!2nG;kd(0`X)qI^d9l=z}teE)(~r2igL$?4huMRQ46TlI@< zvB3r@4gpYoHq9faS&gTIs5C9-7tU=k6Ep?QD^kW81_hfF&y-TDoce(Dvj3xi@9Eo^ zNb5+G(&gCt2J~Vx??nc<Mn&@)9&dG-<aj;zn(X{@wx#P0Y>PUE=(ugnvwEW!7;}Tb zYtH`-Sx>6$NeQHR{?HNRLAiMiwk06aeO=k(iEvn7M17Bvw*;?#^vW9oUf@~nhtg~g zdbqpJkMxcC=6lDVY)f<XR2lXQc!<-ik)Ar~cLQ{V>S(6FUz98hVkfbT4iIrzqySwM z(}-MYKe~P(q*5Oi@jEQi8&%yp3TxcGNc^Pi*)7vio2C)0+?ep~)I%tx(`;CrYcoTy zXi#Rb+WRfFmYjI<+NPX**8ridI<0E>#YRg~m;^eB8jyu{G!QtO&GymBujWIWYO(k; zj%I3d4&?VW!yb166G{rm=QBA=&SJQ`#bg^}VFj*@+|@KuO7UOOg!hjiS*mRGw5PK~ zFZYEppwMO!V<)IMdh0sN*RxsYn9cgts6MV2yD4E5wMj-Ut+cpUI3T2#5U>1O)B@3_ zAp)~rsrCulLT6KSQo>6T=}O?d;annQSgTgQa@0()v2o;VEf;ELI*J1}i@k&(%G=MO z1Yz--l~!?XMzem7jYaFH55(Q~tVTPQOi@*c98<L(BiIPn(jCNP0oRHhNZy5OAQ5IQ z!S3LxX%gF;3W7bMtX;;uD-YY~;iiM<^Mt#Z`aU2EY~A1A;DR`5(_AZ&(dQ*e%x<}h zWy-kh?FBlWn{Yn+ly1kub;xt<nN!%mmt%_%*oY&ixRN<ukKX(&t(r!XknCd7*l6i7 zfmfZozrMj0?+6ql_6fEb3Ud#bB7OcNb*m$B(}&rUq2;8~ITI1#YoM*~EJOZsot(jR zP?08V>Cx&xIT@QESnloQ0KtMdMD)&w7lBiSIdWr1G-qw7t&je(SHlJey5!bdyX1>o z35hM*7v;IMa<n;F+jApm4k=6XlcoF@a5WIGI<n`r<@K70Zwb#z)A}Pkski?XJV@8i z>N;=H9~tX{S-w|XAO*cvv;yDPPS<Grz+aq^5nIN-94N>?)7|L>JJeYZ{Zs`L3)uTV zd6idkMfcKG0Xg@O*PYi?r}&*h#FB}@sx7DZXYz}9%zjrhCFj{Z%r8Bs_9H+g`P$4h z-WSMpAFrYhUZkk7m-&A*=gAaLCGF8^z#DaT5P;zk4^d|$Nfw_{-MM?6Rt?k!L3m9T z+7zGYkBEc7Isk3&rbRsCISS^zMhGI&u&yyUq{CO7CQ`VKPdq9dsw<^K;R_9Tm8I@I ztf^!CM6B>mG^cq&S}1v!oNQ0<Rr-oLOIQi}_{y0sZwBjD9ziV%)f387wNDEcQ?R8P zI2#|lsad@FK%|Hfrh;J=)X^Gg<Cdoeb~w$MP{{pVKfQw0@^T*FTvw&s>RAtzc~1B7 zU-ADss(s~U8BzVx!V~>E?_>Y>)kwkUf2?K%_3RDJto1C-9NmOn4UBC6kLyfQoTMZ$ z14@wW>gteM<zkaRm3FCDZosY#V&1B<(~QKEnFl7(Tx8+z7$4=Ih*~X<J26OCQqbYy zKm7Ky_p|9j_AlQ5fcC&8;}XYC{fPbo#}p`_xBGLx4LrqqQ>9ep-zPFAB;9DVb<L-& zGz%J<>0-I%G*$%t^#2^$6%oajf_otivm_PQ&*VxTYB_sB+5MD#!8KDVEy;lN$P51N zG122%HNVJKg=tm}wyz<$-*h}kF6m_UA|a`}(w?w}Ck(_9xfjP%v?J#pNtsC14eGqw zJA7Z7*LSA!xos74NUcC_#1K%}bNR^xS>Y*SDlMf8w|5``Zt->v`2o=zaJ54@s0?M6 z%~XL^VbH<3Ko)9#fmr)mI<(`K-PyzW%GTn7TwfuPU~R|%E~G35dvZ4{ohBM*?DGIr zt6B&!q8{98QI?T6m{jSXkik)`>Jgald<Ob!u;P*In`pj*1^*Q+*8dnRVLf}xuP~W8 z{ykK&6EXq}2tl%cl=<Z&X{DLdb4hhrF6k{1RM}|zYv@uSqfahaipaT>sgTimec_EP zq3!l$_0cb+jxwv~+&*2sfNjI0pl;Qu3_2r&`A_^=)|&Xc+@{gV9qR}n=M5GedBnjD ztq=HHGej~;6dsE7a_DHGAESr9o7fqP#LcUu4NEl~BobPL=3~1vTK=YrN_Q%;Y@Z9n zqc&+Hsac7<Iw*)toG&OffjyHSbD91jOkw6BzSnOn_qx<=21?m!sgKmAzcu<;ZG-D! z0Sl@GD)X^c`ntZA9L+4asPH95omLZ&nNh3D(L#}T{1`trDF~McHvrx5P@1x#V@H-* z9;!{<TFR=bx1x*yu>hKPk=V-5{^D121o7%u!=g$9!CR&`zyP8WQ1Su!*8nsKH}AuL z1z_Uq_n-eQ!dAA9Zi-*44n3>Chd@qR62On(g>8^ut3h+T;(iMZ6W%OA*O=`OPSt5M zM-WY%QMXb0uAU77|MATykv(izSZ+ONC5`QF6Z`Sv{Q$KGk`pm`8m<;oUy^{`1W;97 z)0wk=;(>d#YIrlO&Z>U(t702|l!BrGnblDl6}gVhJsx^id{pVkz^b*Xn}2KLR%?fv z!V1k|&mMbil%1B`Ihnkx7<?=`cwn5SKhTlEQ_AeHg_$R=FcXUL(*N-H0a&G%_jwUQ z)aYoj<4EJlC0*GNODib;7*xrp?y2l7{~85$R=uWY!gLUsj}|_OY6l6J!UO2jJ}g{J zc3w8|9fCw8Rs)rThgzKFkpoou?9YVCyam%rw#=x%ZRBq*nx_%JHuBkDoK%+onB@vi zmPW#sMpj1Fj{p4B|J)!IDO=f~D5H2AJ2$Oamt1u$smS#kIqLy|3R8y46)LRWs*vZ? zZ*(U2URX16L8Bml9c$&!2=O7Y{L=S?G|!l36`TLM%^Ljr`k&!9987!XO(+2`2kRb3 z*&f+PnRn}4E}w57qTe#~$ZEfPVAp(+wjRUWevW?-OXsAb8@cgI`4GYB|M2T2#$q7$ z2<gW`b0GFB5O3H`r4B}B&lUoY9`Qrgha;hn?-7S}Y7N(<ZN+Nfg_SlcVONps1ZAlT z&klb4aCmg%(yWOvSm~W{pgg*mmaF!^s0&{F)xFCRWZA8lyy3cO*C`%saQ-;$P)&KH zWzy#$G4O{W#+4SxjZ*LE0#eqr;)1T#K)wAKb-hB9!hN#k%ZONErGU8|m=3S>%q~2- zSrPC!AAr+>?(kj%W*|#Z&D?O$CCnm+iLZPq@6nJOXh30t9&EJ~=kz>tJ;^!lcK3b_ zR}NjZ_ZyH@>Kmx=$i9O297B9X(>*Pd9KL||@LoN=Fe$#>Qa&2aU_hZhaPFxCn4RAx zc2v$q2|vvzW5-G^T%;pKi^7e`L1UYggh{WKGF59<n;wW>ax41rMW@lmyDo^uDKbjT zk{s2QYnm`H?;1Qz2vbVtRw!%XXq<|3cHXGg#Xcwu8>$)Um#AR8p;yUJ3lNp!4*&AR zn%tM((9cJPPdgTH`A#>IqKL&=ro3^{_E?yxBGX~1Pv)HF3Z*G+ImCq3^j074K19|r z;wyVKka>F-&tILoeDiJSY1w*{Vij~Kqk_X5%Y@nRv&hqJ44pL?HK#iJby(;n@f5jn ze66b0ua@Be|5CH?br7pdi|Uzju{T!4)>v%hJx=*a^l=b>1<%JYggt$_P`V+;;Q`CB zpS`N#Fju`6^H^VB#TYC&Df_2qdIqOLLpcN(4E?kUb1wP>#(q7A5LQS{HdlE7e@!gd zTiQ4C4=M6vURzQSUSS)-W3`iUoYM-}dNHNi^mjF~Q1-r~*FyX)sJDV=W0WnJy)jGR z2!y*h)?hJ8A#>=s2F!U)Y~yLUAd4ql%f2Wi+96%RF0eWpf6Is;YlOqB-J9Rj28t1G z)%nzO8A?lg!)eDWec1=&gl51Qfu9h>5~xsu+kQfQXG-h>Hdt-*3tlsgBk)2N#~nIQ ze8*)Lt3NHN)HKEUof9x}-!IMz-2LMs-2pMj$~508Op&w%sx`Bug|?<TA#s|7^o_Ip z4;V*hn6@jl#|<l&&&p9J^)?!+DTHjzhv(!qu`-h3wG4S}14~3Po<gYhPb%=vJ1kDl zsB+Uok-MK%OcBWxKIv&1KiXWx&v{0Vy;NR+kzQiA@r7|ui(`7Ak{rcIWP)t=%%XJM zTfWq(k>g(i5(AY+$QIl{X_}`w1ylxcR=uHCoFKX8;t417y-v|M1!72c<$bWnDiGbV zObSPQJk<3z9x~L*0(9Y2vdod7%RU&wy!+PfDUx?7gB+vsUm_trWy*AK)!(3AZ&<FD z*ia6d=f_-F*eX$q+-ap)hBkR<eq#l57k(5SMPL+nL=_~8$*QW)|7m;8D^78rm*hD$ zf(OOz$AAmUg1og!<c_jXLp`={r8aU$9%DX?qwn%XZ14JZafCHsLO5`Tj-cOxb$cHD z077n8Ko+`%GSIcD9)%^g&#Kx1_8ioFOiOoPz5k&pt+PQ8KY8`Dk(oPWgTQ!Ew?27x zE9l@)XRs|d;akU5;}P9oAF`PJy>P!T6!8!LO~(JK#{PXpUzG4EJI9YPn1gMAyMdDV z!#^C=Zp(M!N`wJ}C=~%+?3?)8h~rwAXxo{6JEc!DsYpKQOZ%5OY-f{9CR1qB$lBS4 zL(Wm>lU29(>oaB#%X(cL02Mi$G|_UIJVvf`Uv8iyD2N)(O087gmPX5HcpY8g*eJOD zz&+PlTh?5+l`>JIp|u?K=#n)kgr>RxxKU~APRFh4YDC*bl8V43g^~;AMD%9_Q{-aM z{+V8T??ThkwOO$oe0p~G9);d!!bpQRMH@^b-yf^nB?;3m%ooqBmVH3yBT~S@fH?j5 zyL8$9q}S%5LiM$^VpueqA2Y?fGe|Jmr|YvI6Lu8O=Da+|Isfg#@{4M>5TNE!*E<ib zOA~!#nI<DMUV?M6Tc$kz>g=JEXYXJ%SBsI8z8GfU)^`tPHEx#|AV+mRE#K@f$MVNO z4~vVZ#(_m}m?#FBR4Sc5tHj2MG-eK?*_I~;+ZIEDFDrZ0diexI;%-qSglfvs+Npaa z0S)cT1;f3rFbk~2@9Hl3j!-W8NUYAOt+v{(ZKTFFb1Jfz=j&$qaVUD{sCW>jUbH!p zSAUepdPvA^dMZ$o-lwXS@mH}qitOwfR`4-c#pzog(6T00F}=i0F_|2(8>9iVy*{Q) z9)jMND5Zbu49H~c>Mt_nbJkf$VD&y)ydMiwl{2(#yDA3SF&P(j^^i-ElltLrQGokj zA$i^*Yx}lG7;s0ny!I`=Y5l!LCGxPUTSV{0AyYyLPlS%VXvD|Nv<hjv6YyeIJ*}r) zFjGGKq(R>O_JN`A4xQ)r^JNqovIb4yn#JRhqaPq=>I5FXadci4NrKevLv_e#fCDkU zC)~d#v?Rk%liaU_?*B^Y{|+=LI_dv|h4L5Bpm-*O{PWB4c*9vz9Tf=iw^rpcwl+e? zFL?tH1A|_OK>QDeHD`aprglTFvkOem?>;Bkzx0Wp0pQnpktWVdBDF%(8~f*J943=b zSy$uUuOA0gz8vc^fF4vM`_cWmW8u6IDfzT`jY;zAb!g=J(eaa(GJ|Y_R$?52D|+ff z^QvYmjpzoRxjS46jrBylqeId(4`~b4Hl3m-gU%YMHT$Ls*b_*T_V_LR>C1NMN!wyl zoUX&>)AhB6Q`U?7rS)JV8})3tGgHNcDd7ygOY#n<k6GmS>Q~mS>ofC++?Ith`eT*h z00Ix3CL!Oojse`(@ikc4bBP_!@CAHrdhVB@51$n`t*sqcO!9bV+%6=6&uH`mdZkb3 zsgyoei+tStqI_EMg)V?yIOkiE7Bney>X^$O(jF@?k&#*w!REaSX0d}d)|oSF=gx~x z03U*RLxJc-RfP=J7m0lohAM%f#@7O@YA@I?BbBix)DAd+y<{)h52_9<Io60?)>Ssz zi4bdY3Ry$5gW%&vD;q_OIfzU*0ZaDe)AU(KQ@f>~iG&C+zf~ggl*kN&s+tX@7yrQr zd@AlsK`@-1r;KXn4%8_}eG%YA%ofaBXZG?vB~}Q{WF!M(ZaT&<H?pcQpKuhr&uvu2 zD5Rh+WBM3WLCM(|zZT#W;aG+;PZQ{t)%IIvLrF>14V_-#8H!*Im%tlCFB<_(#@80H z0H_aRkSMSjMV@C0jaN{U(o<j;_vJWY+_T44#3Kd>>bSfiff6^DEV%QR_UaiuCc%TR zQM_jmr>j_F`EWrnqYBsfpea3a;%~Ka5gg>gDdOT#(X>ZEsYv~>$oS=~#=(~z)Gp9$ z;0BO1SS1hSx8S}8nKJ?uZ5l1O+mgR~C}(;&dXIgjeD{}U?El+P{vY{G_pjFdA2|7c z%r5_u@Jd&*b8;v=Hj#~ql*2Zu62gWC21;^r7`+%lAnHGWh;I^3n#j=FoliCs`6Q8v z<dGlhziN0_6I>=qXw}Gt$JM6Cq}$Wx<!g+r?zeG0;ehB&W;ZiqX2*iuUriC4#%$IG zGQAz)Tv$r$$~C#a;s_e`+ndyk)JBuJKYJRqcAks39D}s?imy4?o`$(AG@N$+49w;| ztTN(`@zA>j*|dWXoOlKA6IG95x=S>THK#W+K0Q^`36gn{RO@rRCfkg8Ii{k}U4R9+ zp>4tW?5+7<F;f6M2DAxxRVs&b)$*W%N4jSu?$>u%F2jd9<Zmw8YIs!5U-sZ&GCo~j z70K2P1a%O9@-R;wSP(p1dCJ2827PW=f-X`?+7au1&(QoX?!556ZF>{51bxRGmKieB zBerK2k&*MfbrBEz1&AdLttV3KOSr`>u44!a+mo>k$tzf`P@Hk@EY{sQYs!psd_x$Q zfWS?$RZmAWo8`RJ%hY>@QRf7sFWv5nCZT3Blo8@~!k%#7xC5=WUTU=&xl!XPyEc_! zEF3LWvlhWHl7SxDQQiwW!cHb2u9<-#5l3`P=nE=N8~l8GHVyPPa^y{k`jyJ=V_%Aj zDuJXlBCuW<1RHTN{EPJxdkFRgd4|9TD%JAa3f`(!ZU7$V#DPh4@8%4npH3ZCr=O;n z9+ax7QJ~(jpbv<k7Xd;mRv*2v<Z>K@GrYL_x1?XtLt+hkXyg{GJrhB8G+K>8<svQi zEa42hDKICl!O_map!#YZ-@eY3pfRcpxb>HbW9}c0cz^tX%_>^=D7?kbBff5mvP}CH z4zwbdiWK)-$tl2G7N3IDmg##o{G)<9gr|Qp)FeKLm^(3pkc57GI^rSStY#hY?M2#I z2{W+<x{Mt3&~T1WaZs&9N|OAlN$J!}TXde66~NsdO435l3=vI`H8kh%je6@o5RLuU ze*^97IUxA=_~sv^g@5*oK}r^~U!|W1Pynx{gDM09;%V(w)1~`k6-A1bH7GDxs5`ZY z>#JL|tmk5RuAhe|O@9V{lON=o`z`$QIE2T+W~$TUvbFv7ZmAjn+huOzKma%1?hFD3 z-VsA6nL77`eo*gCIag75_eWD(YgaG5ZdgJvx)>^n&TO&-b889GWG9w(Xtsr|@+PwU zaLw_{fZ{Tdwlhbu59Z58{#0zqxk{{Umb$I%S)8oLx$u*ay<Lc&E1j5R-J~Ka84PgY z4J^q?bZ4OhxdbK@u^!(uf~yq?VKt$GlUggCpf|tWi%SLe+{WQ13HQcc9Z?N2057D( zScmYypS~gcV3zNZruE|l5Xik7z7|el)gq4tTDN0$d3o2i$eDbtf-=v=Jljiu@$w;G ze92BeTNWD0cw5A;xVZbIWnKP5-nl`*UCKUxC{lAn%bhs|cCFGJ$DZ>fJf`w841fBA zbOQivSuQj@C=nuu7+<P5`1oTbTrp3G+G}Nmi}JFjk;Tw}t#Hqr2T7rnWmSA--Bl_@ zX>CF~d)|K|lu>Zaj_dbbiU7FVhQ4}vF7BHN&_T;eWD%)x?ddk=A`bTuG`RXchOw*~ zHsHCtYmPG-4P)!L_O#2ZapG%b5}am$2PsIB!dUJ+*}Avs4_DrjkcUeoXv4!YXMe)X z#jj`p@dGE=z!szcY>3|4_B&{R3AGK9BG{D12lFImX0Ka7eUmlZ9T?rO-fhBU7@dBS zfE25DR860S!6nOc4P4=j?r3Z<o7Ly!0i%p3=2@j?aqt2<>{0{1dz*W%<+G{d*YFQI zjAuif7Re<Tf>L+@Pap64C+uJG3xCb|yU<s{)_)aq^8Y<y|8jtkq j$B%F^qVLvA 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 WRbU9u;UvMYiLk(Sb_|T_IsXMVR!~*| literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/lib/gunit.jar b/antlr-3.1.3/lib/gunit.jar new file mode 100644 index 0000000000000000000000000000000000000000..751ce346e549f1660ad33d7500112864599397be GIT binary patch literal 49633 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 DcL41o literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/lib/stringtemplate-3.2.jar b/antlr-3.1.3/lib/stringtemplate-3.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..8e4153196284c8bd45e8ed7e96c1760961a9a6df GIT binary patch literal 172023 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 Clj1^keW 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 eV8rkbv6 z{>oBZ8u`*&bakNLuV}v9eIv$WwN7+9OpGT(6(X^T0^>{ePnMPdf6UL4KmH70N14XX zx^B|Rox?i}z;=Re?9J$GFzoqq`Hokn79vmiKSEdYrmqLvdk04^oJ+~w)28v7%DFbs zE@Wq@Bd67FCE={2wS$-?>Cs9tqTS(Jcxp8{chr=YEuvV38-0=m(oGNfb16pfu}gSv zs&ap7VhGXO=zx-|^<`s{-6>naY*@#q4c+BTA&&+=F^tO^$+ir*+tH5gsRz3C_ePV* z`wReutAcM?x^|A->Gq)W-J@3ngM9c)GJf|PlX9G(@86@+Ay*xB@u%lkJc;E}p;;PI zCJgb0ci>}2GSY*Z+6AZg`?-k941TC@LtO6*$wf;8!)P5aYj<(GbI<M|rw{NnFJ(`T z6Uy3K^bb1xQmkJQYLDZ&d_N;LpMMDG_U?;s|D}LeUSrdb>@SSjhtPXO)ebkg(B~H6 zU9)Jvl57U)&ogw1Jndod=2ONQyb&Fk_)ulWjIFoFTnH+i3bH7*hmP0WB9$FhsMtwo z=7=3uUY7IAWajXbIqm&Ln@xID@EK|A_yKLrf|w2JyBo^`c+)mHxHfek0U_|IFZL!k zj)ztW!WRPvSq;@xunNlX0W>@DYNKSF-AD|v;^;*V=&`*~#DYM@>Vt1m8O_xjOVZgP zIA)=;^fN9dJrSz{#GY#bCc;{`=kVgC#Qv{xD(~QLF<b*?6u85MPONrfM*)GOaTj@9 zSmt8|4>u3xY5M{CrGpDIW))5jqq(~WLkr>irrs8|JT{EKkLo3@<sDX4S+UKKqoIt- zgGG40DBAI>cLwzi#_V6NA98EMIY{-inyG1(1&Zzk?u^CIMb9&w>^acHkM4~+nT;J+ zFNR~td73OeRE)o+V}X5Bu3eOAh{4vQrqE-ajCG>w7;Uc#TMrrxhEF3E9tn==PB-8C zX_!b#%@_rx5{J7rWZhM_jDxgg!0VB8_x^NV*6QK!FUYaAOM0ifb>%%e@D_tWl#fhw z*Y`px_DjGRj^CK>8LnthzX2?dmBpuT^qRBwoe>ACr@!nu?CT@=%Qu?nMqaAF*8=iW zw&{jXbq9(ED*VKUq$3?%SD5-9PU)1PasDG&)LWuRoGLuGRL3h^3|MxM&qy8LLtKW; zCTTM3ND^Kek#T@}s6uw6m{FczQJ82JmEsblAx#-&mPtBY^kM`>kE}i`xhLinoufkS z1~dXnOAiui(L5%I^U6;Qt*bEdlhi$j;0_)GgnWc)hgtzNk_C&Bh_~d2z>Z?$3TjK# z8hM(6BXFBFf*}f@{_yh2R%tR01R+?y7~gb#W3}rbEUwm~7k?$AoJXV5_P8?>gB<S@ z9(FBf43<A*44TIH4+nwel%$glQMsTPEbf+Q;I?8c`}MIwK5{O^X>tSDu=`w5`9Tfs znQ|j$JYa@AMA}?x+NV0%!pDYCw(=_<gy-z;L~K{Arnfs<*gssFCWX}z9|>Ozu{0NJ zjVw)X^ypY(!G{~#$`g_fBjwVFLu*a;YmN46hq*d1<oL-bX60m#f(w&>desvni6a!4 zPri+xx4lW}Fu4pgdd-?G=$Ik-FnBM0OFo03|0z**KC*X<E*{k~_`9d1aW$MqT#Aj1 z5^uC!#;BMQk+G_Xx$<<VnK_nUxM(R@)e)E5#%)SvtkKFf`&>L{!H3N&N+xZ)uSb@{ z9yfLOo6rnSr1}I}9pZx-uMJxu#n2v#(YJ4#W0H5$a+#e5C3<>}L~R<}97u(~2!(Ji zhUwOVx$l`U=lSW%KDa^)yrKA_v`?7N3&GmL2}gomej$BQ-eB+vV|wL^%}ZCGsb-4Q z&6>O-V9eWFVtz0Xx4hMF%QU*NjzuB;p2)SlZaZH!bE|P!b#CLP>NCMWzc})xf;aJm z!Fl9C_kzP2G!VBR_(}9Ve(O-i8|meqU+3O12*cM0$joAcZ=Mb?^4|z_7Tq8wM#|Rt z)Fr#n!l4aqXo!iXjY{bb=Z`}hxIz_<BVi<XpV-Z_HsBWiT+s8BpvWZ~-f$TCnJpj} ziLsIM&K1#76b2-`$H7`Tj`^m)C-MplcVbOfa8)1KBTo78TjH9u1v=2SKWIV(vKBR? zP0VCpjv3ND8hC;+vg5b=o1dAZ&o*9UGfY~>CmSz3-m5tyK9HXc_nYP|l^W&gI!=hC zwNW|;L~Z)Rd_m&~g<wRa1g5e98bp1xPz)+V48~unrL>=1N`X#_SvT1*E<M#?w}=^T zz{ap~kjZGm2})B<x44ErZY@Q1pC&;q1-?xMzMm<ri!BOmrMz8Xkk=&QWfT*RNscZ^ zxsCa!ib11Bgpy*0!Q|hT*=$vdL$oJni!46U1kBSZ+_O2Mmw{E=EpxSXqpMJcv&r0i zVbKlE^Z>47<r|JXW9DB(qg>ixDHdY;fMwaE;ig<Mk)U!>OAk>G<x^pXI?pKUoG;lB z`At|+x{-)t-Ixmgfw}O4aZaPvpwi>Y82+$nJv5S%D7_r&g9csKbp&KJ2JI{v?k-jp zkYZ^^rUCOf;-O9AnTtBhvB;v2p#j7lM&J@9%dyU40E{Fe*a$B7$o;&DBq&XUQxB^Q z>Gl=-MSy)W&58L<1v7&0@CGnkj1O2~rzl&ZcfKHeAI5BTkg+$N4kmSa72i2GoYtLu zIf%%vA$8aq%64ZxRwi|V6x-=a<GwPUE)zen!3(@2KH8Ydo{1S<Wd=RwKiZhdc%jQ> z<*HC%WZ3!Py@dwNL1C%8HEeRhW^WvYdCQ>%sBZ;Uigv|DEnV0Gv;p)oHEX9b7`C+Y zDz<paS#FT?Y!@=6m2Q~xE*CbXIBVQ8tj*3DYt47*W|qgSi+~H6re?VGBMU5+sYM1O z9;wdsQwv+Dd1HWdIuAfPBM!)5%%k>}@nmR%|NAgDekaOL=Y{Duc3RcTJQvumbw$U* zBe4AALF^c}+c^r@u69+8^Bg?Ua2rK3eSqFg@UbVyOL^I6y$9k$^|%KIoT<uPMhe3E z{14k>sf^8zF6y^${1pF6z2f_SRj>XhCEs>l)BZ2N^4repkz9PSWF27RX*Ibi8%eGa zM$OjV<j411I^|TVAy<--pL=yTzmaytiOuMm;Zg1HrsB-a-4FG9{ola@z&x~rmdQOx zzf-E}2QWcYyOrJWBJAJ$V$-`IPJ{%Mvi{|#x|hJymBhuk&z%635YOo6(`pSN_Dwp{ z6<HV!#wJtYKw))Fslye}XSu3!vZqOWEB9UGXiKUmTM&da1-Ft~Bpo4s;P8v8;y08v zI%o<4adB%WJ8JVcoNM-Y`BpgzR^fawT*%0m>j&?2=W%{nfzl8-Uvnysm=4@c{#-I7 zC}YDv^Z_i6!uePt(GSe5u~}@#S-Zqb$gVx<;DK71o4-}}hD1}9+*9NXaq2|1G7)N# z#_!pJn6lr?9%5s9iVH3_fp&nMnuOaJ4u4WMMZ4b+zj?)1mPH?EJW(cK*8j-QA_^PR zq5QnBiu<@?<=Ym3=?w)%EE{W!t-~R|@XVCibF93%98hU3Vj^VhZ?OA%at3j=`lZ^u zScc}Cy$7}j&jt(l4&|u=(hM%@64@S8%cKsRn4~>XJz{r>ZI9D4x699(#5<8aqQB?3 zL+lumxw~Z67t}ZD3F(>if$&Xv!F}bqL%5ec(mq+Abf0z4xGK0}6%Z6K*%EKfK$?wD zCo0Ng5)c(I_KV{;@%t%2-!-|X{-2=zHFM|{@V`La^ZySnTS>dWkbN^lW7GfUsO#2% z^H3SW_%wG*+O)AVK!e8ZXN9(5*bzflN&HTH3vEY8L5*Gh8<k<KpMUQN5@wAA*6OeF zD5~XYSycW2VlzlZrKWIJq*|d--K=(2#jmJcBg=byIb|kkR2>@cvz`6J{D}9H+x%$K zCfC;21StUD$5OZ(>~Fy^Eb0v_z|?eX23Vj_fxm-e5mgGABfTavx(CCg2^6kb318X~ zXwTaw1Gh9R2M!U7cVTmNOh>FRdlJV~WopfC^c}8nDVA9@2TbUb&eC;e4j?HwwE|i= zE;k1c%<$}XuXre0Sv0SHJG{>YBDBS>#%{c&AoRBEx<SbeQQ&c`*AIo&NOB>p<6}qv zuxXqBdG-+twm&;)aOt#TXJh{0oxWi`;LCff4Rz}vfami&4$AY0ICX1R5XX(BGg@*m z&J1#Od~(3;T+V{^6R|ZTr==wX!)zo>T%$6Sp4V!?nB%;`unr*}j%;RLSQ=muS~@d< zf_;7i>FU3tOK|(vY_*96yVU6$$kXfHC{LN76FA7LKU*e`&b4}|d9M4%^-buq&_Fj> zuOOV={yV34X+Sd*KmqOK;s&BQG3+-ez0RrbPFVs!0ncHkdjTfL;9I*)U0BW-LNsOu zn(!JW?-~oej^Y`DHJq%zo-V6MV$d2(ccQxBr_O3=7qg%NfpV&<wd*hoI9*_&Gfb8> z$Jr`qZe!3bHTecDr*~vv|J>dlXkduoQ1V{kNkCb$St1xlt|u>dNpWKP9@jK#x+?K6 zR1GJU?=`jO+^pc|o{N60dYD*mt|}q8{flcVc_?v(`L&@~o>lC|fn`oM;MqWS8M}pM z3p#WaLyn~OhB2Wi(UF5t&<sBCDA6No570Ms-pJ5{WeK6+%e&4p?=x#xIYhWc>Suyn zREc<8TB?fs<fd;WOIXzf25)OOjrV?mDg(c^@v0r~l&lIJ5UD(HXJ+?=#ZJ2YAZ8jb zw)eRq7B$LuJiGD*_qRwW*k!CTp3|Q*=*${J#-gj=pxzY?EYQ^@ElT5wv7R3)3Yfx4 zQq3S3cTFMccJhM+m@E3LIPjIOaasL`4I%3G0|dXyOPp$WRD@57r_x~pcOA2+I;uL8 zjMx29Mo%OpR5+#;%#Pa&=h{|5bT<ZNX+6OFO|k5Ue-Fb9M}EXEYlpU?zZ2N6U&jUc zUn^}7dBbjvKmm+-oY1F=f{<?HmtG|LMm(eiJ2vU0Da>|3A@X*V%><OMx&L^msXBzv zOD@tg)sKJ{eE&wuq7Qu#($9Wb?$W)hu`KcHu?VEJPrIl+e(MX6w+E_rfdJ`A_avT9 zeHV6CvEq<VgLejaO&@Ao0Y26~E?Hw})#svisN6kEte#P7GG`U4)}4ml%mZRSm?K@} zIVr>c#7tCMJ1R~;xM)fPI69)9jSB{-9n`w?PJ@Qffg81?tGeMQbYbj4T9S+LsQc6r zxD4nDN1^Q9#Q1F1Mp9)_7S`oOd^$WS@Zeq2Y|7)39Xa4h)@(UdDzkX`*!Qlc?z+U9 zq{IxjVy;C&86rN0qua>Pw;u{CswJZuK2F(H<tWpb<kHK39v*$t)gc+9>DK?OheEdM z!)_8tkq*vbMU_O^m&GZkc;7dxdI55S1JJD>9sng0y;;e)FY~d#%suw3OkCEw+Q8*r zbE!KNsB+o8=-XjE9{#L3HOkha>V$^c@bqCHkmJ!oHR&eQp-I(Fv6nI73Te~5M1sWH zuUHgYK$*Au?I3b41g{PGkvh5!SV~Hm<2##~%nT}cQL6~;QKn1QHNrE%-pe^F<<$}w zI!8>DQf3z0N3DS>vRC3X;-o@Z3htDN5Dc5}^9@koT4A{rnVB|+*ey^bXayE<wBj|3 zs5P+<Y-!f~T9{^EILfd}BkoJ5R+c1}Y`zQ<ZWj9`qn2E0R(vkR=t}9;obRrhscb7| z1vghY>XHZjIvq7t+&aUxUdF?V6cl@+a?2X4AXCO^f%0k$IsMy{Dm1+KXh0epI`&Z8 zYl>o49feTQCZk+zHXfJ_Ao#^?LLRy1^aqJmTdwT$#zMeAx=ZvTiR*LyYhGT!N^*OD ze<#v%^M%jxle>v>9&`Mf%}{{#L)MIwHG{&LkrhnF42=~`_K3m^GGo%p3^Hqy#dw}; zGi%HwXw~_41zFiZ%^YMA9oq^vh7)|Qk)sI7w%?GZsq9=x3=I-s;E}>CjYe7?TYO|C z_Nb@E7cf}*CAY5!{zt^s0KABTMLY-i?rRX#3{j?Ls*$z3^`kG-&=<7KRxl4UrleuS zaZN6JD~9#4#Q^^XCB}X@!~0Z(%Ou(d!T5mCGolyr3(*Nax3_N0{n<LV4O%i_I#q-l zBNUcLImPAHEV5ORbW6PE8JqtG2Xv1Xe8?XewWd4`^JFd#G9yOpbkHdyPWoU>gBWU$ zB_lM&iAzlyLtToqHqp32EH|>51!;NA*`cU-+y54HgYMWkXTh<`X3(o0wRJ3Zh01-; ztsN@sz|SUi#xU9kLfaC;eRQBL33;1*dua0(%_hyZ4G9jqIc13nvEm(^!&-=RF<xXX zO+OknYDW_#n{Uf%#-0%l`BVh9(Di2o+QQrq_MyR>#Yl_F`7<5Dz7UFo@@ddxo1z~& zuG7)qTSq=t30a_{QX0g$%$gOqEU-S~Z9S1{-ocxv{TNw#=jBAA5Az?kG!V5~%ct>= zSH+&x7P-UbfgMYe(r1+v8Z4aO%_l)(2)}bGYC$SUQsc}Abyc49Ov|@s;_+^F)Z?I$ za)}cNvzP7DAdn=T$dMUiDb;JQG{|$^6rThii&E$z2VW<0K`=%qc&N(s<2fO0rL^ww zwG-wgjgUIg_N1=g#C9RoI6<wMh-e%X_0v4Tc5YBA9YhzV@lttBkdml=Y8T@`%^||s zrr_@@SY3pp(iVoJ9uE;nQRYaMMPqtbPfU`O`Q#>w3f!aOoY1}+Q_(vVV+T+JMsbWB zuq>jz!cs+M8{_c+bU_?3`LW+ENMSOg^G(qJir}^`SQhMj!p_J5;0QuyR{kL}U>;@- z2iz9_C!YN5G>L_|d!X7nD?lVD)q5lV5Cz~9#1WZ~feaV}ulbcPOKhRsDR}n)PoI%5 z%Vjqk1-%9zq$V>f1+7K>la|!t5WJ=k4lr~vdr~i2z(;^2JElHQA*yhVOo2zv8Ptz( zPe;iS<eas}AJfB!pJg$5Qeq<(3G58FW))LP8jdF53MIN<U{N)XQrv`k(%8vCL`{4d zl;>V*n-s)#HCNIxQ`9k2);S`Po*c1gz)lJwx)X(t79r>+b9o+Osm4s(({kjtLs#E% zYk+l+SX9Zb?FVsmO?#$~9J04$^D9*Mc~_$HQ>OL<o?tUJJ&NlXp=EZ!Y?BBZkRIV~ z11#4SR#9eA9B=T=hMT_PBPhk2Dr)+Etw5{a8%i)hX2`t_Wz$$`se#XDt(8_;iUPi6 z_*ZMD!}#gyNNZ{cYqsS!I>3oVx^n4Pi|4c<NDqmzMaj0Q*bMLhLt^(BY%tav^f!XB zh7j@5f1J{+gtm%;6GfOAVs(l}c@#^Fy*I>Em&MFpu{$dHh<P1q4^z5{xUe>Z-z{s@ z;;b53-NP2@rvaf^1wz&|7P$u_?%69@$4;tMa-x8mn60O~Q4@0x^TPo|S>*8Y@&LPC z-Nc9Py(&~u<@IM{`B+D+=n*P*Zz}e;Uo^S>E;npagRIH9$EWQdpk~o&C;445R*ukB zgN8b!dLvpl6n6P#&zpOE8}c(Z1bbj2Cz5^<xd-7x#~#8yft*8W&k?!D;)A^+mCsuD zXxlDQn*N_eg)eA5{qKhYG>dWKNi)jyzRX3FnQ0kTmYZQ)R%ZGh<7zNk4`o)BB{hsv z;|owm6DK1X#roeO3lU&7acCeKOUTrT7cvmVerbOeZNHkTBJIDMC13qMh*Kb&!%Eb@ z#KO^p_lNptnr8X^K{p%j+qYKSe|6ma_lWENr~m)&hKU^Y4|jBP3_pt1a~Td{jj(UB z-(YrWGswZ~0qg|;kkpw?*-YKvwhJze8FbPdo$ISGLY5yiEsql|R*RMN3fl8piqQ21 zvf4H^2G;biNj0y*U%`a&gz+^qKYqYSt^{x#pZf~rd2c_pyI*?WU5eNBfEdvG=|_H7 zf<=603UDEZOh`z0C;;V#aF1R>C1DJ?7(hmRt;g2CH^f7PIWZ)@yivqQbru)7ia6P% z^?HK2At&mIse}H|#~7%CaqNvLD*Wg`a`h1W>z2JnC^#bqdTR`m^3#dR!4qQ4jts7G zn(|%_NbwRc<)X80R|?+L*>v4yuTuxd*wa481(l)usP{dg`{?)0!}{g#gv0t3@8Cep z&~TORv<0ET<|f@38(w-6*^R&zKA{nZnRZd_lj8`a?8s`Z7Hr7DaE3RkH4crgSXPnS zYgfq3aX>j+4sd7}PBR@Lw*Cl+vDNwz>$gc#STr_=nv@yDX1hZ@atlYqhKfxEBuI9Q z(s~z`ZZ@g)Cn^BtNV4RzV1A@b9cU{pY&CM5I!`QooR!8bIh$m(SDQl7(^@O47gbeH z$e1K$B+p{<CNnt~&MyJfgUqE{W|EnHB#);j6!huMN8xl^PJ3{cw)rQ8K<x7v^-mrZ zeEQ8>ty9<EN!LV#Rv>T9vq4J#+`wq4ckwBhufHwD*tFL$+n$!O8;x5#SX@=k$?mTW zSsIo<!77;I{3)V0Jb{|*NF~W!P1fC9-%xQ<OZ+3nj#wDXY#WiZSHR}rBvdmPO!@uD z(&o<=yRFwIfSI7!My6QzFH|wdS)@r=t$!mGwR%}5yJ2(y*HC{5kqJ62o~V9nw}79$ zr<tGfaVe|+n8mMjkIau@AB#qAmyJ4)&{0&pBBDUQfBZ|-(z-heB^zb0I?9=96kFAi zu&&$#!&qpZ5TmnRd&pX7uwMRe@<>-89F1Qjr)gKoo;p>zhjxHpY&1<zfE|ph=(cF1 zw=&83+WcdPx{3~J0Ja}%LyZc0)yW_MjSzH|2h<hIvzbFi6yZk6UaN<^D7YbvwRsG| z&!t}pY}zfRH9tu=?a0F+r()<42j;&Juc}Uvao^`FO5{0fF>(>yY|uU)&SzrJVM4u( zbo&hC%ZrTN-~L|EsQHy4pviDbP_2(q%d=sZX89s$9vg{e!fh#-d#f|`%cZSXtjwYO z-72=_q$K^63#6q%3D{7(lEIC>iZIc288Rx^Cm72e)g;7Tz9%X5m#>2|aLN?F_C6IX z417v2zLxe5LRNOON0VLEOCn+7rB|*ad%T>?Fy{-mJX~>e*;v_y<=k#}dFg=-3#5j6 zD2d}OE=s`{6s#TNqlc3+c_EABlWe-|heuPE>p#4ZX7!iXYFAco@~bSnyolT<=^goD zoaAEWiXHVT?rw&goQFQdjJ}(34{pwC+}6syX1@2Z>rh7juooQ4H>7-w4mpLN5Q<S1 zcuUfUycw6py<L!;kIM+RdAu#9pM){-R)p)#q^XTY&vaD7E#+mkEvci{mZ5|aEw}49 zV)e{<TJg+yo%G|+Z-~SyHXVkhy-D4mR!L4GgK15U2(%Ut{UNG_*XhoFVOoH0!cJlM z1CA@+gG&Q%G3wwP@HaXV&v6~GENAFrvM^Z}-<R;Px-<acRZ{|M7b{i`lPcc_dqQjn zM_AMcT~C%laM#8ZqzAMTREJuSPc}b<>d+@*{9G;7G)p1ajm?<VZcvRdY9`d$3PCod zsb&c*T8vqm=;s6XWKUtyn&u`VBO^<+dP2nJnNeE%Nb*B~JNhT>_dHet5~_3Tb@jQG zY@8TZRClOYSMFhc?YVT0%@x9+N1lLZGGkLwWAMqGK8@_QAC}d4&MR(c#P$9M4SY6t zN*YMn!Np0ZxH;$3aA&Zcfr}86j0S<1PfjX5l60H-_@w@Y`)Tn-Qf0<g;SClI$KYK9 z<#@un8^C<5dI$7q27LOoFabYvY-bWLXOO(PEb;o{fY*86+)43*cv1hG{LXwuTwX24 zzrLE2V;NMqdLrpx{jiv4Rlk1HHoDXgNyFb*3P=ogFF2(~csqO(Z*wBz7njwu(wfB1 zB83gu3ndR;PHBHEKu;wx))>FGvUrfF!I%!!bNlmVRyG`trqXc@?hmJ{^d6LNNQeD* zfCbAH5+$5-v#w2~gGXI<uKic9)MqMMTlFGq5{G|Dkp!~*)={e(xD~AxUlpSe#h|j@ zZ>N5(Zm$~kdaW~pKG-xh0qZ<zG=Ld?@YDReqTVOS@bBP_8>%m1Z+y;O7@NVQHU#;E zxw7^z9I^2xvU6-|zMq449@vaK%w2;yl-$m^1JzS<dvw$Fyxw@m0GHguS=zQq*bA^! zQ{@VC@`K?uQ$0N$fvY(}REBgyYhw)@tP3hNjM=t2Y_pzy=o7zf4+~6cM7GZLtU8;& z+#RGKw0ONUN3NTg{K#x@xdhmhk#_5#<f-CsZQmg5ZwI{K3Y8Wd5*plKK-BE;t_jyP z{G0cEkJ=^%KQm5{urr8QaKA!2Z_=o-YS0d2-+tB}v6HuaMlDzF9kS2<*v}oG-h8dF z%)8xww*1T)9gG=WWc~gndC(hio`uqG26^Bg@gC92@nVaSz{mshjq6X|2hY;*M6)Zf zO<bEOR^1{mZn%3b7T8v88!?P=QEIVqwP;tG+^kK7alx9LqD5OGZ(US9$DvfYR+HQW zkWF4(vjwu26AoP5+*uF}9kFUC;oCSu(nbZ>Oy{3U&CO*if281l1?zwIIx3*jN*>d$ zed+(xmB5;<Y%oKA`(}*%uey?-|CR{;Kf03tDTKSujmZr#Aw%vkTV`DXl56NpJJBw) z3-_X+%PQu+jf|^MNWn;^v`KW~LJ<ap3&oIPWPr84n0;y()9P;%<$ZI2z@o^`aFF|* zzZLP#5gHI?nJAq*3Po5K638r+&)H*cgZZ31oqoKz+PcuANE$4d#trgd%Mp!A-Du9w z*h7u7;t(Z~A!sS3E53*Un&Zl=J5D9*QT<902%ELSPe7}x_*rKKJ}x}tY8&bWa)glt z8Tgt!weTwrY|+wa<YV4)moQ#gwON%%*VLIg%IK%TPW4mHH651bubv1p5B;cjr@n2j zz%w>DdY^EvCZ`NhNvfeUmLnw%X8C>$q|k>e6c2e<i3C7bS!lX+*N@9WwIF_M1)&s0 zJcXZGnN=s5M?4(`?U8ntc14`*?z6g6+9$b3w)b&Iy7#$9zApNAAb%9@P+m3e1V2a| zlorYa{;6Lf>3*T&Uv`7mUuF6KZo&QcX0+u@-EA!GOqEQ{{uAF38b4(P%8VW=|BjbK z!!PVO&ok#z*M_2lz)<Nzbmkf{C=-d}%b*T{#UFq~zNOKZlK%TJH|gq#tn6+VdIzlr z+jI~`kAw}v3e2{d2o`>OZo^bb(>{B{qs;cm^20irlDm6+RrYZ{WsSx%dCHFR<H<g7 zoJ#+f;E%;riXksKyV9eu9FI(_%kW{Ih{q7Out-KNzYy!p@_d?E?{oqq*p!4WBv`VU zo3AwHSoP%R5kr_Q{E_D2$^pCUBD=Y_;1&JA2<u5O!L)*q9G)j~Himyztk@v-X72BP z7W|jVN6i1$j#qa1CqnuEELh6_=AHZ!swm|35#WS`)hZeeRpk&vLoJNN)or8E%F3Ke zWT7G&0!51jhDu}kCEv&?V(}L;cwKF<nonnYm(4ID#eYj>s`?(L1L}({X9Qm47&C^Q z#@vT&c^g2i+s(u%yUEU{EwB@~zX~aAGjM~iXGV2g<!5kKI<hHfAGW?x$*Gg1ZGS${ zI`>?u%w-f|_hODIT=~ai$*xMTDM+~K2zAaKgDd-XOu+7$^hSdUO01wi-=<Z*2GZT9 zj@mepc>04djW~<ZXSu^^r!`2~dIW_6%ImtvwTG&l1~pxYn3Ta-OH{xN`?tb7FzuIJ z#$)HtIm7g?obFA#*$ERN_qaOsNB#~2st;d1qffZ6OdMf`uc;quOyU9x@P(QYkJMro zIRQe<lBy`E#DYq+TY;7(+7ipex+Pr5c88LMf>3NiZ!k&y!Dq=u$>Gg-67tw|kv{Pe zA-5`&b1$<J;nk)cKA}rhqeckSLWKYUiEZQpK3X1AL)Jy*nCJyr@y@*S>ZIhK4-^GB zmE<P+|G_d4HWMaJ`&)7Le|h`z?*-NUXVq2yD>(b7vdVwaZWPz0{-%xbWtGOpHZ(u( zm8jLD%g!6o@V7uK{l$i*VQwoU5GP7YDg%3!W?}iCLHv@r@PteB1ofw<C#Sic-HsnF zULXYFey}J}6(@)&QcyW+q}3A}CjCqgfq&>B(&*R?mCKj!|NU4!>oO9DlKJ{wD%^3+ zOv2S>1~DE7)#@Yr=lN?Ig>Z|#_tEMCK}O#!Hn$3OMfYclqwPuDu4aQw7OPV#4nrji z+rpQ|sB8}{+oAxR1KREHJV>mg3Ia`C8!jApq&8;=%TZV|I_ec6%{~qqc=6u2U8Ee` zrDabt@vpnSlh@iaZ$;5Uad`U?Ha!*Z4J8#OdkX^5hqAl@h6{R8JaR}*(F6%*PcofS znP5Sb@7D4LxZWWSM6R?UIAqY)gXO42m^W%hdf^`LElkIjhd8KO&X70C1tRl--5Q2@ z=&A>bW$W;b4N9SMm)|S+1lzKdl@%K#+oE*-7j5qtU5mDL3+~uEw(acLwr$(Cvt!$~ zZQHhOJK1qkIp_OswRc<9JFn{2tJYT5pY<oL^*+Yzqt7wN*ibLb1?-;3fD%3|S<BN4 zR#eMZ<^9C|E2<%Q7YN+G@g4uiJjn6?BC7v|@Bgs3(&_))B3v+DC$mO}7UAq4YrN^l z$i3JL6dw~q;i?)qkl*emC!D5O+J6mbW>Fxu2X>QBQWXzgP%$!B>*YDsx%}tD%i$5K zhrv;jN>`v42n6<6S8u+D5V0}Cx>Tt>ikiuW(iGj*atFeH$iSwrW`pN=yER>u$M)@0 z@DJL90MElAM^M@33x8k!i6Sl4<A<!LxUc{`>@zK%@#JSpIuMTgRc*w_%sIKpeAeXk z1bxCirJk1X3%Nl5)y5y%lwmo9>=4*43PY}9Fnz|KElB<+>EKU^qkZ(sNQ_8~)KvPR zXEehe*%_IkD}7oO8Y{gDp!v)4)A!0&Rzaw87p<HLd>7L6!Bp}_atK!tF2WGdl&!~P z7?F83JC58q;Wr7n9OsGFa&A_gaqssxni(Ts<FiH5syR4%j3;vqWwT-0{<ewEmlpx5 zq#$pp5Z7>NC2&{#0xa<?kT1+-j6eEUPl`$sU}zlAgpEv5f~fZvL$5B1N|GMI6esT` zyOmGck+kzy#}HXPl4m|!QR)w>$;K@v_F-xtlmhRGg%nv<JA^MS#32;W6c$vD!84#t z6;c!?zMe59rWb+(o=mHDK5_q|Op(*?oUw1pNdIF>_<uI`=wD>{AN`m@RVYt|L*%dQ z^oA#rPU_t`KXL*9cyT|Zn?QhBc|XB9KdB#t@fd6C%#1`@aezOa($nX69i$a)fpqHA zZRGsI_AJgw);BVwi>(!onKS3voE)a4oTsGZ)lGBXEq$IguI;vtJ&!$EroBIBXnxF_ z76Fypr6O``Ug_EfhEZnL>~mmL#XY$g9h;+DCCoBmR5|UjTh7&}9W9SfJu!N2hY~e` zmsbK>+tRNPSg?$p2%~Qj<)?#e5bS_aSUcr`@i^);dJ}b6E7-Lo8W`1KxRkUgY`H+R zw;MS|hk0bCgjo4`WFtNqw1;JcVblBY_V{Dq#63y#`K&<v!hx@m=+D3NmK@x#yAMDd z-W7x4ao%&}B;GLtm<B&3p}Qgl^e)>~bGuGD%r<*&4bmBTX9MV7xS@oZhFYyQ`t%Dz z1+i&1eM?7B^`U_Duf;8K73&|z@Gjp)hN(7pmFmA{eAn*BW$dWhg@Lg#f6fnTW_%ax z&t`fT>R-p$n!Qnhxi)`J4|@6@ow9eW-wP%^a0`p>RkBBjj9dOp+M7j(XcaJ;tJv1b zoHRi)*O+R_o@F_mR^E<KTcL*8R219ih>}~umVU+<A6dI-97L<{W~yW<Rly7|(S&OI zv==aGdC%ClBAewPK@m%<QFp6IuYhUd-RQ8dCVU#rlWAgBPnkFcI(Mp=R%!uxAZ093 z#)Xdh+S7(oF9BLl^2><uOrerQPn9f-5wl&TnsGjMWem7FVJeE@6RWR;AUY%@b$xTm zxX1(~(D{Iuqi*(l_$Y%xIT!)?#mG?0-q4;ZyFpPuc5TBdhNQETNx#}{=8mb*FhbD+ z^y)eP=>-#e{+^Dd=7c?QuBVd;kIT9R$uAzOY@<JA%<aT-w!xJ{`e@Ql#TpYYc6N&) zc@-U33dAMsZ8t{P**n|p+=D(VcU}USPsve_E4()-jZcmcu+ikV>4&FUR$|2UM{O0P zS+^(8&|izUJf2ksut0$DyCJ@4u6trK9_)*ohjL=Gqe0WFj<6c~?v8Z|5cPTT%2u>| z=XO<5jP&fK(5~*>Ky!}vF$%@>b50b+kbX8Zsv(`5wSV+w(<Yb`gHFG@BA4fFGodkh zXE|BD@>`W3j6vCH20#MNdJ#2-)hp&>g_@-k6`6=WAF($_r76jsFvzvBg@Q{DmP*rv z5sP4b`6yP+OW`Gemz-`_(-{YVkwvho=F#ZHZKfQnsrF7Cfg_i0oiuaiRRM4?L~K(- zBUW*(JaK&(i;{*8e=HN%d3^AR9DQ*4_Gh17?IA6mlBJc*6HNh><&LtujTX-%v8TzV zGqe4gGz>o-E#fq*&t!958mh<6klY+qu8-`WSxcw&jwaeM%`BP|^vh?7W-aH$u8kmF z9nT{kLas=hwJ=MQo;L&KD@~mM8@uKaD>gV$&5X+5hY(5C3{=-ZZ{#%%ZO}X)Z77&* z?3mvyG=OPa#eB=6IAZZg!}=bx{z9MCyAK~J!Jm61s(?3xrQTqwx9P{b$?1myDGVs( zgpb1nniS|43Ghc+%Zuo{zmf@x-pLFP>E}of4G_Orj$M{yrj)M&dU-4PjLCP45Pnu| zOX#=|(M%1iBB~w+6Ki*C4I20|%kr-h3xvbIM`%>wsU1ITZF-kq?rsKnSP&By+M3Hq zrqK0}y+dxkL*VzNItw$pkwaKD_$SXOG;ylgIs5vWf+@~73zs@wE$9cc0=ZLrVPCST zs-)!h(#Z|2XCD;aHpX=-Ym*nH@_DNBY52|Z;onJRsuliR8i`GkOYwD1RV6vqvhj7) zyVCW}TOtr;*ekK|Cy@q1DRebxe5z$cG!#o&(v&`m^3sJ2w}iTCS%{qekw=5ek6ABe z0_@WTb+%b$Ld=dh7+pLQm~--E7;Z8l9*OZdV;iSBJUvILn;${!Z(AxuxCJ5_*xC?_ zVwf<HHpBxjX9xgZ^1oY?Dx!=u*zZgw<(EuYsvQC};Pj?u(%*l~#zP5IG%iwHY~=my zDQ5{TwABbOPg@_u7=330>)^vauqUaYSjoUko+N4?8GEKL=UYam!6SuDaRpOpj2aIx z9e<j}C#<JW^-3tk5aqPc;xSx4j-Kn$q+kHTLi}T0l#-Yy<7z``02!tF8&k8Ua{I0> zSFrjdPM{4PBaZ;;g0w2afaI9SjGV1&JJShHA=6TmJzZ_c%O0*eYxFQktqID{|IMXH z7EE{v7>v~yYo%W`oOl#ed%sIfk^Q<kRDeQdBA*~u+{xKR$X$x#bmq>g`xlx3O-QXP z{k$R5aR+;1g&E&;*Ej>L=IYOar`;D1;h4iAjlEUQ<xb@WuiP<P@S`$2Zt8QCMi>Nz zD!W8Csi(!8j9+=XpOn1<a%~01FJ|${`dB{IBz&U1Q(y0Fec40Sty3B{UDz7eOiS$% zx6gAEH&|I#zL8(POj~b!Y-BJBO});PB%_X`7qi%8bm9)O_v;wZ_O{RVwtw(uP>U;2 zMMn9KL*=&G<zxG4`<dY4J=ExTDWOHwbsk9h{c-zgp@wyTT6jQe^y`p-XceP4R^Gh+ z-1go5elyr)FrbZtykyNKP6vAkeskuYp_0QD_k{Fv*mGWg&3mX#P~6z@JJc_!<{k`5 znJJ_OZl0;8Mp$A+1q_MVUPrH(K`vhCrjffZp@WtL?fZ9P$>xMW>VDf7MP10E!v0l< zy>^chUyRPKOT22X;C}1)Y!T)ggJY3n6HuP;m)4vc%aeOm3;rYP8+*$#FAh5Pv-CKi zbZ(MhLiax#MwiU)Y_5waKFJ2>SyC^t4(C~vDf*TRE)7DvwPaI|_5s6>7o&fAmi)!L zH_weP2+^(k1F)jnlC2ze+^2eOK`7H@M{lT_EI=&0n6H~0Kr8w@9rf`MRHxLs{2ba7 z891iYyl_lL5-%PiFNV)=q>h}>9oBzi+Co?l7Pep}?_*BXCa^^vf9&3|r9P#782nKK z(LG0~j@_32M7T@-<37bapEvF?H7>*0t?X$^n6n{wlM)Uq`j{|GOBXEWy=brTlgWFs zvUN2z-pg7FE6-EWHh28)X4b7@c;~U4V>i669%;>&oPTIPe^Y(e^blUj!2EONK=vH5 zNyIhqlCk-fF~eGEX#Re7#=1vb0>NX0c=s-Jn>rHf1DI`7S|X<Ydq~`pO5E}#)yRxm zkbp6R`yb0D;7#j~AE>(`^vk`|rj-3`-JLWfRac}FyUwb8SVMFuIwHQ;th?#`wOnX} zVs(haLe!g`Y*^huq?~6?wIgRZYq8&RTF&?Q6)tJ?q&_HKnAUH9Hk(gO><&n^Q1je{ zyS%ea+=aVA^3*%9j_QygvM5a7o?CyQN5s3;x@S(HjB9UQC|pb^p&Fbs8<^{Kv<h+N zYYR_xA#tUopyH3;zYpGoiYvPU&sRU{78E9up~t}0xO-QQ)uR7uk$@yWct9p3FdTZ% zOTh3^%i<_jOf5jN9%(OJIG-D&E=<x`fhj(!*>SBDuip+qX*MsP8^FFOrKo(k@Y*1h zGjah<bur`X+M?{9u-E269@{*$-jvVXkk^ZtW~B}e1Okzf?mR<w^E_L$0!NniYPD*$ z61rWOr^py(b6_%=73O|i<{fN|!Sx=0;ha9Y=S0<L<=h@ox+kgn!D2vc%?Fl!Exj?+ zxZ`|f<Z`##g{iWuU9=YT_WZ?XIh;SD$AZ%rz7o28L%TIV(-Ay;gPw)g7taVPGaKug zR<w`KjxsF=JUyT48q0ozKzvK@w2!PFtzrhGT|9n+V%59u2(^`q(;?!r>(z#fYyb2X z;=F6%j+H%Q?I~Wp%is?7l^=b}<`u>zP8>@gW;w=MM|oeW2oWm~DxVscXHP6ebLdH* z097i!%A221eoA{tV^6tWs=g|gpQyzs?G`pf*>2`{$BA9oA&!{HVj6cxvq+X5JAG7e z+9aN)mo7cLVmw#d#O9b$86{nlDek>)#yH%R0oa7hxa`clxV~nZMJ;syrqpl#@{%*- zQ)J6T<lQcgLleG6F<ZlG?n0$~(pl_toTsc9Gn#-3E8c1fH^!<^wRiPtRW<E4W>PT) z{LmuI<u{+toKKF`h`DRqFc1=uUpN$JtH_iTl%G~hh2@lpVM41INhUDK8lT&*IyGbF z8LF3Rha#}4+FP?>YOJc4F=?9uZ*W4dOpj&VK+71R97G5muU9xbR5NC3!a8>Xz71wT zx;G0}V-CiC-5>Byq$kDy#%KV!CvQGXB7Sp5tPJ1r@by=<Bj%wi9|ry7#|!#D8HK$6 zj|${}uXg?~KJUDa!e0%~H(alzg@v+YIVB;G;GcvgHeG{;77Rtn()QpssUsVXJt_2N zXAwG+U_8HZ$LxL$+Ua<%Z(nU1+nC&)KSh80y^uE4u2#L608G$efC0a9&ZY0wQjZRc z8Pm@(un_@Y@2J2Lknu_Q(7YXkPF#x=5p_Yj`bHq2&jmw|eSgi?;OCsSjKLPlDfGng z(8db6LF;Rl5a(DM?im5VBy8o)pv*+w0BOk(RM2PopxeZ%(Ix*HiVbZCREHGV?~zlg zS4tbgCGr`!P#jv3+Q?OCHPOayC($gn4M8Q@fSU=O-n!@ZQV$zY%}tKT1UIsbOMd{> zaVJZhMe!Pg5y{uEp3k^-)Yd%fRVo6xp!j$sk&xh$4o{_7cnF_be8S}7XqE0R1l*De z50#>vhV)QIQF$ro;Ic6><4!F`wEC*{|DAOzhuzRWz5H5NAT(b#saONVR1%L-Kx`UE zeT3qc+A4KLTOHFrQGUR5gyWX!=D%UGMPx%~6Ms#+P5k{wxM||eyJh4px@F)k=socs z&@t`F``wi+&aKZ)^4*~<?cMtx_a62#@D8o3a(nuBP3(_c658@z6AS)hO)UCPEU_|k zF!&{|Xm4cn?>?E7jiHex(O<)%RqXX_ZT~gqAyfIoMnMV9d+OD0y?y+5U(X#Ksq_jd z2-1R|LJ6jGl9U<<=w6G3&2XkmbA9KaUIYn-&kdoRf7(O<aQ+ak>ICf!h$x&s<IvZj zPw#VvM>~oz3#i6x*8EdP_O!>=(?j-`^#))K)OCqz?-uR*O7V^w$aMJzj_i$}pEfdI zM*)8?A4srbi74Zq(Sz9BuTecQ?O3AHzF+|4YJ$Q&a8Lm>$XzCo>hhJ}-%XK;=QTuT zAT}keL5|?V$Qf`qnDYuCzJC<EXmRGPhA9TZq<b5Nu?_6U=CBEkPye`z;j-v^C2ahH z<J4U%nx~xE$V!`;KCR-lG_~v-VSVF>nl&WIW&&0&mRv`pl8QnPY~VJI&5yv8&OWcI z?=(34xh#9>%9ou+UzdgI`?%0O-OL*j7g}GGh`b_4+G40xs01Y*>N)D1BuY8zNtWDD zKlC7LjgI^1<Zn!8bka&3k!^S&?Y$zTXJ?I*tXJ0mB9CwIkd81~33TeG=W22aX)O}c z)~H}^?g~iC#2KaRdr9f9)=TayATcJLHYjOHo^3VvTLmwv={CzoeXc2zzi%#FD8FQv z+!A%=V<!f|jl+W7cx#FJx{u0BBMJ6WTbrrksLd0`X0HL*CY^WK-=C8;BdOQS6)GQc z%5;XV2;W~0MokR*Vm2n;5UUtDV^LS1zjqyjN)j?)Rpi)le4;L~&#EZ1R$T3SPEh~e z9xlb9J-z8{QLnIezx4(DiM#FZtXDb0VqJ0FO}}pC^qB_s<6>y{D=$Iaa#@PS%xW#? zuPzY=vYCNT44O#l5QhH4pn*=31JyisN&>jTwBoo?4HV3X<r1=Rq1>Z3uq{JzL^zhv z0v5#ANq#%Mw2>9iNHdcatojX-MU+=2Bb3ZA?&;M|`=Q#Tmp!drJH-lGc$*+>ngfZ7 zm8wLb9dp{=tKe8t9C~%>6U(I$lFPjOb##Le1B&Jej~eioH<LvHC8;g!ba0pEWd_A= z<b(7Y*RZ@qSQDsi#a>uaT(c05KlG>Z?@h2U?_dO(_i&ke7#QsB*8RheVdaY?)22Wv zBwna`8N=!w!-zjC!y+p+3qN>|l^7?K7X4`Mz2>k@bwW>q3$RZrLO#cbH4fclZ=c7( zq5o{~*@DKV%L=<&6RHZE;_R~7FQQAv=MR0zK{5{k&GtB%3JSCa%u*+t?IZEfOT3^~ z=FAcoDnn?B#1oZ+9F=7-0p9A$pj+&VE0Pl;zzPY-5sPP^@9ClQGE#YoEG^5Q44ThH zgI^DCc=6Bh5DRAKLS-AkcI~_*v-(!k`9cNUVS4_yA%Dc~>VxhY7E(XucOibvhh7?X zY8M=xWZ%h7^dK1pj&@X;hXOYCs$WE7h8NvI(0c>G@E#C;AK?F*sMjHz_0L3pvrqh! zZvMxs9)^iS>gv>JEwwOHXEgFwB(>P12w}ad-Kmr7yr$JVp-atY(jCgD9YDqOgGIf2 zEL&&U6@PrfJ1cfG2Z_{ea6NGB5v$T&bb+&=tqjL6_NX;|g_b@#GIn?@WGP@{EN;JU ze1-8?ZH?1kxRugiT+`5^GGbkocL&A)4STX>GOD$o_p|56ryz#UE%|#o0N3SKu}RG~ z$mZ~r>rXp#3Qe7ZwLYf-+}FP|Da3L|>H_eOA2X2ublyt*=b2Pg&%snm&-UMwsgjif zrV^63blqr>p)WsvN>Z|V%u|gObps5t6`|-FQHgHsD>GDUPm^B%#g^%9yidQ*PO^6i zgL*`!-RmU!SJ0OL7fZVoF+@~<aE8bA>U~D?ahAjVuuk_U=niC87-48bRO`=&{)qaP zxE>|V`CDf!e9dSB94L0{fmz>(*SeB{OSG-oS|kzFxv`5);H~~l;46aifwwVZwc)TR zC4NEmbt693Y#&1}t5hYk<VmIR^<S#N;Q=RB>$Qgnxju7W+D#c;4pwimE3x4Uu;A)V z^7@W0Th4;D?lsgKFx%U$T=*<n=Qpwmo(}xm2a4s0{1MdkZ_cfPDW-_T%P0#kkO`HF z*lyz9Y|;^z_R?aUYU>}-XqUBe>*G)sPe{kGYz}H_$yJvZOv^_WY?ItSbx04QlAF0& zn>=)|+yb^#mYmuaQJW&GRm!fSRBMsF1fG~R@jZDk_jYP5#pHC$#vLF{@B%#ovXUqn zXn(UnOX{f)djYv2J(Hx}%fIGDF#+M`iK>>icoZFu)LFPcUekw|;H+##xv3KvU|Fxm zUd8&1(>QGA(b-24Zdk6~aqgBD@X+7TEx}ms(4$(4Ik#&i`jMZ$vEWV_$jMirJp;o! zT4FpSX|Us9JVR$=J_GiHb`7xVy+pKvIWi$!nk!Rf&f4|+Zmk58F6KC9cGxI8Sd=W8 zZ*T8ks#j(1_N^iuj(!9ozHjg62yfPRBR|@^GCQv0Qe?#q@0n^P&N<|jsud1B1o)8- zCG|BL2AYXw(N2T74?Q%Qvu$-9A`c>}MNj7!vwikbB-(~<4-$1J5Aay~B++dZ+xi{~ zaTmV8K;N#hc|oUTxrNS5gMX=lLDyaIr!;@ekU{u^s&WME{$L*{x5rHVgxEEK5mh87 zAG8n1e=AC#$+<VTN2*N0slZ3*lMrM`>nmzFo?(bpJU|_wpG7@c5jQJ6q1&s@B!S<( z#3Nt~z`+>8i_}d>cw@0+1E(LQG=UNTA)i=^!Q-@Ym5t^yP2h^CHAXT3Fb{iF=lxMU zL`%2;n68^*|AjIHl(Hvtivr1GRpuFVD9D9w<U)r>zOlY4Ig7=yGfYPN9wnnmsEkb5 zO?V5ar7?WsT@*EKM}wOI#lS@JW6%+%GvM0Jm*sf$*q*s?aR#;T2-fF|?Tvkn^$WnS zioe+6r05(i$1P$8P_oSzdQ&jTS}%|u%SRYFKy9N870q~q)7rlO;r<n%T1?wP{o?Nw zv4|Y=T=p%r{K5VyMf`sdTasoDj{lw?<R$)ki}<<Z#wxY(z&B3F2q&H^hH;kVo>Kxw zfDcmmFau6xEnNqr!6t2JLovX!%VYZ^G`J5SkrDyc?uXq@k8ihcN~4sZ!m+$s)@tfU zmyNUWQ-5~z^$$y3!bsqxBHF-?C<*idTeV^2L`}I~CZnozRU_SC==w*X^BH<D`4wX= zSNm{$HwjjLYX&M5f2nnQ_9N^2-^~Zgr`!S^YZeYcscp8;oqWxsn?Z{W<P4j;b+4i; zm*zG*BM^X0`Uq7=4KMqfUbs^=7`_olMW2fyB#Yvt4hzJwI4#QE)9ZXudbwz!l91I? zl^+l$J|i((=P(;6-Gqw$FYPeN_gtrt#q&FxT~=aU0{yki$jiTd<9r$Ep;z|}m}Q63 zq9FU7r!P~I2(6YMJh9QwQnYp(C&WOM{hT#Hy&CAvqxv_?tlV&(pfd*9fLLfvbg@bL zFBMSahp`h!u)_6)zSvy%AfABQvL@%1a+w8h@I*ssBqn*zDCBZnGILy}PKtZuq~_Lo z7+0x;(q~S9j>c_z#x9T>?$+S-4|JX@&>MqUS7i)&;?_(icA+jO;$Rt*Mkym5Ux*v< z_n@bRHwtuKC|BJwAZ}S8unDuvJ4E)#=@SWwv<X}DPZIGRFL}I|M7;f@u93cSE&x#k zGRt$Nh2fKfM9o~em7ht~+LmKtNUQ50gwTRN2|RF6`Aumq#KI$=?$Ynr8vVl^0hzEP zNi=)xIfdrQb3zt${;C{fV(9wmzOPj^zfZIOd5ekUe}0mEpJGDRj`nW<PE|!I8w5Ed zu4n+zlLkDiMS1htB@{B}GA8S_1&~^Zpf#aTk}FWx!P0)-pxm|WJs(})P@(<4lO^1J z5lKcG%MKefF{t?gM}#Xchpo=zEte}y?(B}QAG$Cugy49{!obUct?<2oC`KDdw(2Pn zw5#CCG4XcceC|`xXnTV|m$C{llNF`yhd|o3ENFniX|qSry;7SCm()Rr52h<*ac&bk z(=25P=+tK<J_}XJtx9uap!l^I&DpBz^`qq<wn3$iL*=imLPy!B!c5zy=}63%a-0e| z7)UC#<?n}AU5KCCR`S*-IxyD-ekKNdok|C5pKRD%#LDfpCK_#OnA{q;#9<@a`BqBL zO*BNQ9;$V$*Vl=zoo1%Y+xRaLO0lK7fMtGkWROF-BdQ9vm@a5d7|K$MlIt}KN%0o# zt>#)bN(=X*sBdQ)(096pNRsgyZUPpKt`faSMaY^%$RH|oga%rC2oBKes8lWaOt>jc zPK;!z*n9;IEsRez%D=7Gp$PO<@6v*oferf6<l(YGcJgt>U~VHgv_bPB1V@KXtTG9R z?q)AEYA(j;JXbg93YLNCGzl<+voBEVbl`_r#6P4t>?GTO$?qaO$=*QcIG)@6CvyD1 z@FZT_XE7C}8yG3`c<^r^?P^~`e%o>Zb9_$y*6lmJAk92LHNHugP0N*N5cAMyVZ%$~ z6iPVfyAth}^a(iyh9Hq`1E-nyN;cbyCtnpPp+woNH=KwDhk{FuVenN;rsC7in06^^ z$p^wDlxUt3VA6rz#a~oSP_1IyPam#h0KtuP0Fd~E8{pZY;P?5vJ;ZBeD$e|y;{+i8 z#Burmoa6sq3;#RQzeO9O3X-?AY8^fm(Ll3)Z*v(DfL0~7)nL(L2m<sB;Qkvc%>jl= zvXrsQKI;eRAC_m|sRr8bX9wQ)L%4^}8y5)aqUuIyQ>z}=Y|{=?4o{X_U2ku=KaOis z1Tpr#P6h*_7{p%d*{4ohVgzBkqzIzK9v`%Lx`tudY0gsS?8rj_B+DxOqOy_tj2c_w zc;!HJkV9U4d8;(<%Zd&`qfB0XP1+ZEs}`{-V~*q<TCu2$f%lRvmw!S6g4G?8E-{Qd zQZ<{?RB*<Y_bOf${Z_6}D&Q@%Y`5>KZ6fG2vKZWzZlmzm$Wp2v7e}M1;Yoi(6Vwff zy&M4CU!5+c=L^^~ST6;SxRf_BQ(5!PEYPpq1=V7ws%08V+z9jRx;f!tb)Jq~_f}Jn zZu`A$bjU}2QKXP*n`}gqYz||iq+Op_l3zcbm2mkneG8aTPch$vFNw+e+rQ!#agl*G zjF7zw!g1MS@{h`-^#tkqQy=Biie0i-{z2OuC417fgpRIzbOl4wm+Mqnvo6>=3$*5N z#N0j<5b?xWi(XCyoA12VOTq<AImP7Zu@hj_myfRMa^As*_NoEqca0|S)vXMAREsCO zLTC-8V6*EL3J=u16TllJ@G)V3F;<J+;ODCoi+nO#mYTJJX~rs_43t&D2<X%*z)|f; zSc4tk-2c>C&E^dAL_W=6b!@b*;=s1j)t{G=OJe#&x8(W8vRaXGU$nlPa~CRhzmzsW z=gl$yUIh8+KyQlZc@)maF|kOb{|-d|A{El{3|0I7%<O*hWonGAY%*hNVp^RaeLW9n z?8eVW7$N5#xShWJyJ<^2oP}k)A)_{$|4Xof!O`~*8Rbs_E$@1dQ>cpK<evL)74!&s z%VENtV?$6Yz0H!R)D#n;hxvipsCUT}ff@p9ab8VpYofY7umcuFIAeyo`h@_!Q2^K+ z+s~CT?B(eX7Qr5c2>+y7ATFLLmPTDb_Sm0{4WiMYvul{ZIEh5Oa2vWT+Rghlz&wYE zmKIJ+(iEfD)8BV8{?mxELXsemqP^M89<rElr2nBTN>zrmQGg@J66wi_$U@kzlaI6B zhRbmCEBA}<3}RtKNdy7M&H)nL&DcNFLUFwS1A;z9k*HTk0g-2}_|#_!;rj0oC&;y) zGWb?oS^ucEzW1N~&$nFtv$gf_K^;5!*XpytY2MrrypkQ*pn<^9oxV1ELOngic#H%P zK|~iIY;&>HI5Rr#1WXkY8qXiNW3C!AAW4x@B*#Y&?JiRjp5C24KUn+uaLg1PFHTlW zMw&EFgRFua^WBDXQoE?p#IaSv)>jSj6tiJD?ZcwLCq<U)rF=*Pg3R+7j$}4&S{x&; zbg6=Nh350VJEzUUkFUsv(4!DX4z@O?aYm(-@2iJpi;6r3ixu>yxq`$AV<+19L~dro zE?}WwvUn5(><)#&s&t+b;W}ko=T5^%7xr^oa>s9_^S1yQ4ILNI*1GJWX#`}@`JjWL zR#IAeXH=OEO|#VKPP&zP<K)Ta_xbPu*;nmFgYLhqim(ZUqH(;`)RC~Ms?G``7#;3F z|A>POhUSh~nmrJy5@uC_p4XztMmPZ#rqCET(3J_N5lET+l5n6I-46TI#q=n6NvY6R z8Ta~oc1J;G>8ZxIPnr0S?OvS!F_{0=(O0PQ;)1x0{E35-R*Oc97GVLY2*4L%NkrN} zUP>Oo>P#JztPi#~V@1Uyu^(leFgqd<Pa?I>DDl*J+BHwo;3TO}de|W5V>Wf#J@Zvq z{4^E8g@Hf6@P{pn<C<n$Yb(<w`|~lo`xBcNcL_mMSD8<akK7jp?LEa}5Z#m6mpO%s z=GqTLgD-GZro<LOu$;;cc>y71*w0T$nMKt=toK-vGqneRvvB7g!g0?GWSVFu@Yl`0 z8nTYzD>1T;@vA0fm*25cM@&z+t5~lJBI{3q!DY0IbBeCstM1Z0jgHTzu<Md%nr?5I z!6&8n-#R`edm<Ft$~OieJaRV*zFht8jf{CJRc!8s1lR!7CTer&w2$UW%E<4MIgtbY zN#|4`?2z6xHIz1rn=nJaLg-pl?U-fRNi>IR!s6>R>6}!oZxUtmduW6o>oOXENM7)5 zUf8^}r<XMQClK;=@QzlRC~su9oWs;M?WIUH9%nXxaA`1?1zr@2iHw!3!+Qv)mHx<# zsdD932#CM4m6yvv+Am-pTqP>>^6n|JMy}Uh9g#a9h&xOwus{M1YCdF?UmRceGv7G9 z1W|7O0tE9SqY(^)ip5CJiU(P1Sn=ymcdu)&678z^TF9iD!^N|;2JDZ^Z@g=8BzZK8 zXT5a@GHN*nac^h2_BYM=D6WFUnlUl{eiLgNrKXN$+l)J--_*v7qQ>@%n#ChHD>w(G zkVBS!0^Qdmy&%>iZTQM5AE4b>4x2p<8BZiMPJ1dXHr$}z<#u*M8GoH}tJp55-3-ny zKP~z7f@BL9^~BL|H7i-_tlmeP#ln8XdB~}mQI>#1toBi;{3tF{g;CiYg-Gewl}k`h z=quWLWLQJbYjOVft#Ge$vm*n)eqR+E2%DiTCe~^NE<;4YZt@IB985`m6NlhBEklcH z4DxafwQqjzSji<h7lDZv@o+6Ri~*VHGqQK(F23f%4d%OY|MiUr2n*vofZJLtC@BVw zo~-V#dWMOqXQi1NbXi@W0ZQMRE<s4`MO#FlJip+)NLnV&2moJ$Tr!iix{`F%O#Mnp zY>niYp<u(g5|YX^Gy7*Bl$A5z)rTB|iEi+W?JfKYJ-~Pj91ttZVAQ%xBB+fQy^G}= zv_pefwUPEH88X$S8w}->?}^ItHukxO^&L6s3%>>nH1dSpLNQj<#FGj&>P%?JS_*fa zXa>7%OMr**yv!2Bha`v*rM^GB{e&I$FH(za_Y+?llPon9w&n_wTUTk?38~?T@ti=6 zo)P}8uHk%wLm|r+=rqDX;k$Pb<$5W%V9g=htQu#UnvPgrp)x2it(OIG=&T+B@8u8J zs{`)37MbL>C8wz<;9$)w*O4ITYXs8$o8!N>m46c)u2YB>L?)=M@4jJbxjgsa%vdO$ zP9EQMq*1Z`0c=(|D1mM5bv(R}cQ0yR<=i1Z_6U`3)eV>_iQGUnGmin-v_M~OB5P0E z#xZHD-uBgwJ|0nvXD8P%5!?~ED&uX|mY_K>t<(S+t$%y<=s0#{Ob=3FNnKDOj5qL` zZlOOkTYlExJ;!u*&fwMbi*s-F@yZfhRh)pVmP|vXMsDJM+oHjAsk4RsNHg{C0n6n* zM2GmycN3CHgq4hgapO#sscKuaHB1bzpjoVBY}li}Yrx4}ybmE1ez0f%C9Di5Q_Zgy z_==+LvV%<|>~7#ApkHPL(!M36(f)_TS!T1Z3Nr-JL?78hSSFr-T~Q(p#p9j@4)aot z<OGckYlzz&llaB}32*?<IRt-TfR<h8rwPdPBOP=&r@ej#<1j4_Fq8Bjj*y}`3saeJ zmYVKkt&6TmAcae83)W}nS7!EN_oW-|xDH|Wu4I7($N^xtmfy;Bp__YhcaAW_g9Zh+ zcA5|~?I+o@LZ%p`kan3_jKV;T+^_g+{Eoj~w#bt_w)j-0ca^Zzw`$h<?dha`LWMwy zX{L4iJ_d^oNweq2dXSa7eocbH`STvth@=b@vSI(ufZ}J}xR)X8Jm(E&`R%S^R{&oM zsKn{(EJu8WgaaEB1y_hv%kaVe=NHRCC$CH!IB;1%-@$0)NVNOUFW;)<To4G)9b+m- zPdJX#M=|kTa`9a=#}E_S@68Z%GN0FZJR;LFyYs$l5b}Ew8Y(fC-6qJx{Exuv;izPt zsHK@FcOn+dt=VLR&BfaRs#Dv-;|m!2Nc&UGoe2g=n^Eq`hP9tslKF6~pUqFmKdQHe z?CNAT_kKoy*P6Xz*6$u4Lp-NUpQFt)n|>BlJdJ*g;~t)FYw^VbZr6~~^_=_TG9GvH zxt#5O+)3NV<8Pd9I%M5nG<P+OBBwP!=oRzcVv2wc5V!-_%zKk>@U;1O3VHSubr7QG zqvPM9adH4Nh+pw$qv0+|-J?!KLY)z~WE#Rx0#jc9b_d!SLh|swB~|tJ9QgmaJMbT! z#IkzUMwb8GTd!axgUAQxozzS@Y*rZZ8w6e_#|7!9P`JE4fm8?`h?qF7=SEZd(a4{w zRcpRazpo*|>QEx@2Y;S1R*!{&Aai{hmQ^=n<7~HeT%K-kpc-FnOof!@8eIeMduI9; z6TR6Xva9I$x`aM|Bpi&7Sommas&(6lVt-^zwia?%63a#Ytv-zY5M_Q^$wZkK^sk-f zY5$ttZZ3kF5!xoi0AKIH8<J%c7P_w6)#x*RlsC&g$pCgb<p3lmY(YIXQww-VCCBK{ z8bLbfQ+v2Df9ZOP1^8-l{tNL1Ii^}vG$VYm+&pA0H=;D^(MHyT+?eyA@m}l-2FdjL z>FLI9%+fYlBX4-81|VEa==fzwdN~=ajUmQa(vh|TB8t~O+NjQ-nDPtQoP$OFCazPo z^DaV#MFiwh2tOfL>TddaB`g&TLn%<kOc(0;3oy808x_4d#B`qKp3?c+kG?8tf+TS@ zV6moBvm%=VyC|aYJ($7@E+{RtgF9x=ul9Jrj5tX&u(jd<3O!5ml4M`~^a@>y50LJw z+{FzjwM8T!sH&I2rjqcp->SJ%Ou@adLhh9dO3GR@*1LVXr3SZBs?keW5}^E_M0mvI z>X8EnG#tTvp|5z4`3m(zwMUV-*oAp2CGGVa_!x*x#NI;SUw;EtLmg@9pA>}eq7gb` zaj9MEUqDe^GgL@YFyQo0`3wih-P4iK?8e+j`ZuDnz@QL*Y-x;dgwef_@1_!-_L8*n zW6{iw5K35dN{*lE#Tx>wuk_(mZg6L!UBz9))pdV!6%4#sdl^UmTS1clqqFtD=I*~2 z_kUe|E1Ma)5Yhb?cQX~%t-noIuJx1_x~o80Ypd1<VB0uIR0t)0p+E%nQh7+&P``n6 z#OS!n45x!l=Dm7XJW)=(tQWF@3QW7$wPe-1i3`)CjLrIb9v`poEf1KF2$~yrw9)H0 zSGtRXX<%UIOB+sh(}O|0v(N=qmQWXr^A)(lV?=5tQY1>-GqwqWL4COkoi&NaYx9~M zglD1{*N_S7*$L<|v0TC)<cW+PfWQ1!cgnB<iera}Y8Dd0wlaUVCp6|;_oW8bD%!DI z6O|rm`@Zqr6S0T)nOgF*6B_lwy7l@-I*?T-W*Kv_Cp39o>Q5D;_@Dk%yvBM?nZS$G zvV6U{oe_b^ilm^yd2x*(1q}Bwg{?Og<pxyrT9DO4H(_%=O#K1;PFP50K@_`G0J8Lp zbHf`e650rG+C&dwB|R)ju#AU#t@FL=Q)HBh8hEKnyNWYfFngl)4v>=X5x4JY6Y&f^ z3qvOURFwKY+{rH*Wj?YHr!ej2H<$~Ka$KEK_J`7nO_UEVREPF~Y5X$t{^FSqp1BU) z6Wg_#zJ?)ehkkp6#r!LF6-~{rWm2;D-wqv0DLZ3Jz=PdhM&6h`7RK8qSu7iGNgiWt zPfiszF1A1{Zowl@hevOHHh&R_#^5Gw`MV5p{Ks|)_WxxW@_$dD|E7<UmBYL+oHtD^ zAwCvfo)|;{9Iw@TkPulR944yy-QEsS1M^R5GR3CpC_iobI7!nlNgsjk6^2L2?=e4e znOCEuaIj`+`q9(P9?k93_3bX-i<5ocA$FLz$XY@<5W13VReH&~<Y@goAggvY(4UYw zd;9__{1`@{4qfzJiFRuvu8|}5qayqwNcG#u48(@&0+7*#K;l&sZxw~bB$o{<##dr) zC5K=Uyc6V5qA2uTX>!NlHmSHvD`;y7`dxdS-g|8Q%JiI`$#y-bzn3hkYHF9p49pQ7 zN)AKcLBF_~ExTHrB<(gl+V7-Fb7<IiHc1~P6~E<@?EJ|x0)E#OIOLrmA+s&mVP@-p zi95Y{jM6&R9xTx)2we#}rIj3P=83|CPOMwM#qb<OO0S0YsB+Cvk?P8ZPog8L9kspI zky|a=o>2*$tVuQr>aUcc(<Bs60)OL&ZbWOUkz%8?CEdviNTz!aQ29E2b`@Xa%tyde zcEq|urusH!e&uyU?V7+XvtvM?Dk$r&I&gR>z8eoW`Q#=nYn6*VPA}f4!2@R{&7Z%Z zrR6|JFT%jb-r-!_tP1E|CHSIgA2|cAk5PUb{??ooqzxO|+5`5`=@w8J#bFwHl9QH$ zRy1k8e^T5k583$!O)Y@5q*3j;i{~L-(u^e#Axz=DcSHEfY@<0~a0D<pp!1QJNuqLH zK%J&<I(Fpxryai){K$=QaGe|Y8(pn&%Nu#1UJAN)3JiyV^KB*{Jt~|6UCIhEbRPBg z=_mK)l1g$1+~WZqsn~-X`)Bvm{8-Oq?$d9)6F`xb_|;sd&m;_bO)7_Q7QlHY@giJX z3Yn8L&2%tF<QM`t5x$JUfgky`xF`C7(qxxhc#IW=9hg$)MS|}op`FL<2Q(f5XTn~| z`oRFW8N81H6TwZ0NLKTXX;+{4U_qE7`miHEufbu6v%!q+Rq{|HQN!`CNo?Q)VLRLH zHi)0>YNfSEgZfItF>q%0^WbOD_)xJemN)>9Hb!ZqiPZ7?%TCk%!<oAhOZM2gKv+)8 zaC?bOpW~`hs`<^L4xZuJ_;^U%Q->JMw(!Jt@X{q8dtT8>AL-O3p5XMj1efErBB%w6 z2%8m4q1aZ3Q`PIh3d8G1Av&^kPigeK1vX5ZO*<e%hu#is0Tf2`Kw%*yv$jTw=cwi> zQ+&PQo>>HGg}<ub(5g$1-5&x97NE`qQP0%HJ4?KU;~%+6EXbY8f~P^iALH0J2M=xS zjc8Nly3r)75aPzYG|Nlt=VNiIehC)m$I@7P{z&ds!%)fHA*aa`+*u-HK%UrV^DWQ& zEv4?pw@uyA$9#C|oKovX08pn7%=7;Kx7lGRX}<IMonb!y(Ya#%r!3=W<ly*A@%!uF zGtIw_s6<7JZ+V5pHP7FyrP6aJEVMvj<Yqb8j0b@rnf5y+VP$&VIY;7qJ-UlJ(d@v< z_N_ljUMTK6z$e*$W+RgN8XR*fN4?7wm%~+N``ht#_4W^YRWUvR<y3TRu@rV=y5he& z1YW3M*kGQRICW>vn$pP^ozaGv|6H_LwKlCZLekp~T!pVq{e(?IlMfWYFV|!@3JR!T z*CQFOY1sv7PogfsRMiVe_S|-{8l@f;Ftdt(nXccwK~&IRg^$wITba=2>`3oPWr60h z&<<pHuwnJ<F1t*2t+7hhygNC+9@|KcBISpHh1gy0GuKvZiD|l{hc=mp6G`yuI&S_E zT*qJ%3p1o7SLNPoF%2JwpT!krV~2^KEUq(KIzk~fb%b2;gl9_xk$Hue?_cAI+It`) zB01Re2Wq1kNW&eVG$f-K%e}W8#OQNQZV{bJ;|OF>O06=y?mV!ecGPIG+|<=@hmHhV zQ#cy{I~n@HfWIFRNaj|uKhD>PlZ7^v+&n5=+xiFxs6@~W-?ipwO>aaX$Tyy|S=^&T zQYhp5-xpU^G*f8vhY#FWd#N-gr9Gf2i!Q5jR@NdwUVwc(0wBz6k8|Jr<3&RO?T~p@ z{<h3K(<PutLmIkRQh%3{XTvHsD2^Z0&<3HzT0&Y$Q~Xjie=__dw`#^b?WpB0rCvn$ zXaipVNM@j$Z;?xinU5hZn^yE3M;&$+Z3tWqnOmB$sOAy?XH_nONf(ik0mMjW-PUF_ zO5|<Wu>vuZ$m7vdHS>Z=lSgI)U{!3xG=aCa3}IkTXU#U4T1^3pg+MY5*)ID9yLJ`# zggow)D|Bhm`i@I}6qXvAB^~-~LUovdr%7<bTv(EMN;1V!Igjh?zO;nZS|rrOmh^73 zP(nLGaW<OE9N@nKf|F_irTkmBA^ziH^8Y9x=>NOkkQ)~VqC?^`v#>Zft(5U>Kgol& z4cifi7eoq}rBO%PD6~2e9Eu=n_RBux2SN4zjZ3@*eWl6d>)~*<zai4)!`=PEu|{VI zI*F1@-w34~8PtNfBDscKwm`MrU1Wz={E{^x2mzD5ZY@HLi<>x3QFKgh#bkE;;)Ca{ zmbdjupG>(Rc)~F+vPi)<f9OGRQp2~;ja?paQ54gO!3~RSJ=s5iI#HXwR=}y0OZ6+; z>jp2Im{dDOFOJ<=lQL{x4nhN<sTMIOVD$&`1^B_+80g9%4lJit{G$K>IIzkPnMaoB zaRQ?1pTT~JQzFiK<u1XsSY8u#d*8Mv!MWMYB3Ahf1eeG=N0WhEe~8j6M46eJ_ObC< zQQby(qeVosAw8FyoFK=Ij$v*eTllVJVjlK$`WU?%l%sd(cXNVa)RM+E8@Ni?19gcP z7o;og`Wd$*p=^08!e|g-HpSYJw%-_tHim|N5=O_Ue+j8SdPvQd-$KgrAN}0_2vLTA zAu1sOL<jddx3sjhsGj|Nl^fjTr-39BMv#YBfnq6llhl-psa8+Sf&8w9qj<9edm|DW zKbT%jVo0*h*)=NpH>3@+)cTO�RyEk%tKWiGa#bs;DChCGqMKx;!D5Gs!^&=cI;> z=yC2CLU9Q)6!_iadGTxQK7R;(^^XT-OGKYiPgOCcNCAT%M@unW09)@}bAZQuna_;h z7ZjQ(J>WIOGhHp;&g402UU@vO<+vrJJ7_=1q*v@J$s)i&EL~Ryl7az?xDslJV=gJq z^)NX$ZVI9+u)%qI+UbQ???p*M#eq?@?0h8I@1`pffB8y_<}i`B@=m&0zie1Q0u7Su zt&@qk2xF~b#+ygC__w7iDgOio9Dl^C#1Uh7Snm{BEY2SSDtqsBYiXuwSyDswMe;AE z-FM&707Bp5Eo^-QoqgvmYK`#{x%y;+$uvrJAwN_wq#Gvlr$16Vmet#9OpvrKb^HMQ z3sd1Nc|+^}e=ueIZ%pO2Brv~^t@y}x<ISb(=r#RC;n4G8;nQ@25JfUUFVT{jW-)px zVdi>z2KaY1zuFlvpWi&<9r4PPuL)i)4p*HX)0qw_Z^1k+KgLwadxk5Z9B4ej;dQx* z9_V_Ce`KS-OJt#NtV8D~I(U!9S0$R+PyBL5hg_sITJIYhnz!Kqw$w<|Pt_}qJ5}yW zlycIqNGdZDIwm+&CQ?RAUm#O_dtB>gmwWY)7i*uErH0}DJoBrbYs7_q>8~KqKq?&& zYgRyQ8#*Uf>N8(jgs~&iqW>;7#_eWzSQbSY1R@Re*3}q#^aF^gL_%(8`e-5Hg*9ET z&2?mnFhLXL-p76fowUpI;}&h8>7kK)g|p41=_nP{LLc&tie;Q*iCJBwHdu)`yoO)o zB5RMT9o!nn>$N>BcP5l8+pF`S!nC*lK@5MO2Xtq}A<0l}GX{T>VqN@2Z@<q*$YeN7 zmT3_1CsrV9YSFb548`UlCY;6NW^a3B_!h>#8I9ec$6=?9hevwWh0~z$(->};sOV(E z0E0ml4@rLe`nsR+FAkJS*;r<Mb71p-e_S*DE3UUKzMY{@=FsE=PN_7s{E|v>oI4=* zS$Q4#09hnRI!FlW=O(cv!+zuHi%H}=lb0Mn*bksro<_&3lXMw9J>#yIKk2ENovm*! zFgejrMy{?$`60p((_WyH2---ubs@`uIF*hYXHcG4Le}Ww5<`J>Y*xty%*n!WkYa;K z(yNkn?+^GqaAYz~Ny=dl8I+l(<)`&Mb{<dinGU{vW(~4{iLp)Q8J5OlQil_^L)n6% z>E+ezAd_E<!4_`BYR`jHQb-K9QnM85NVg<C+&=*mWPjeEfdTFb{BCv~?uF-ZTc*<( z2808js!+OG7-3be<>j)%B`J_%b(FRiVJGqZtQrJyC%+e9H;bSb(05LXVJAE!IvvqA zRgXk8m?{)|cJ9igq5g#m<tyxw0Har+6|`+)!Bot5OxnG$ZzCg8Rmh=x4TKI_O{n`7 zkS{ZG3-G7Ca~p26d&J4&g@;VjQOMXLTK<W0p3CUG@b!%Pu7q|hH;n5K$d%kMWt8Vp zX9eul-&d?<vRL;a-)IN^??;>YUub`y%Y1MZbaZz6=FGQ|)p%?JWY%yGdEgjGz&bHI zUiIkliIb8kso*aVAMn3${C0X_Z}JDSggRWujN01Uii^x&&)@bDd0~jb%&3lNLy6O= zO={x?F$B)|#6g`$W9T+TlP#d%ROFrBc~ewh)=ESjp|2nJdu+FDt=>tnBY|x`_e7wj z4ag*u)5(a6_C*Dc0(NugxflO%3AE9yXW;uFLwGZsG`5(7R;I*A2B+8a#$Jpui%l^d z@CLpU)O8kq8G1zbD)4e16GRji4KcB3txoB04uUdkN%q>&S=B?=9e8Rs9twccwj}f0 zDn$cTwi@4D)O%xvMER_{ALQzlM2=6?m~*hmZ@{SAA#IVb9*;rG^v76adiHRMH;js@ zUjv)r0VN<;5|`QY`uT6PDo)EbNi+&|oK1mOyheqV9Y@5t`#;i3m`weF`eh3_9dNMw zv87okDja*)r2Q4dfReY11Uaf8G$AMXE!!P?<7NpE(VzbYm^4e<!s8p@p#S{<v-~Ti z|CjJOT`=Q_s%}!>{?%53oIwx*B@~l~r>xaL)*?|{D}~Kq6bJc1g-X$K1N4s4&DX)u z;-CcB`n1vCT77VS{1?9KY%65!Bf8w-Ai=!k;e*gg^r}WRQZi@uk$T<m!dlUkh=N(n zv5H!RS)c$ceGL4V)j}!^q0N7x+j=CLnngQTEIBMM=Fn#=i_Wt+MJ>>V;|$y{DL`Sz z<!K&XGPn*Plwr&o;b})>Ap2Uqb$)Lm-N$eUmP@iHo}#@nsyjKz&a7z|>p&L@11j+v zO~YI(bR~c`x3b@)&TaU^-y=66<P2b0-86`Q!;giL{zf`KBpO2=Gia@46g|n{C=8Zn zP;^^tzFk(>(F`#kAXb@pD}ImzJLpB6uoT^P@zHwCYd1YV(*t9&C^?E_V%Q+w={K-H z^G@9NQ#PTnpEatRULfUNgi4bdHlo`~_lUJ_Vo39j>$P>yFi;Eu@+pH@tBgj!bOSkq zT{%jB|83>x`0aDMexqyuzaL%Jf1$f64#<bbmEUyM^ii7lp*|ak(SQK#`z@;ll~Kj{ zUGh0j2AC;13>u;rg+R0(esoGy!+EtkE+;~Jc4ypsnHYC@b8`bQ*2D(~#zj)0IH=Z< zt4-x*42q+iLnon&cdqNQnu6^19F9HbmP?T>_Jj<_PDk2C&J10~n2|nC>2!|9*ocfl z2gZ8ovnPqCAqMrI9Vj+(1Wl;zKm@fWDef7+uOR9LKY5m|T<T)|84QewKm0oR0Q($( zaIJdv&MCE{o}j&{Td}PP4fDsk`&lHXr#t=g+eYFOj3d=@cnSf4o+^|l;Jj~L;%7kG zzr9)!-R6Q3z-cUChK>{)MOWURV#3u56?G{@*QOu@b%dG?Njo+76fwJUgAQL*rk_7H z-`V<uBe>0I@kBI{rxL|NH4rzt&Ku{yz;R#_hZ~y*lyL4*t^4Rwa2EK0Nx$i?N8$Vn zLO-bjnNVU|)F7%3>8O^MTi`;dLe5ZOTbyL)Z+UI9<EZWUjjZ)QBFp=qI0ynZ*49P_ zjyC_=+8a0iZFVCCeTmJjh{1Hu$meMCi{X>UVdK}5gX8m43WY(+6QEp>T#clT;E3$g z$u~Fj_^IdtKm{y-!1f5>M@hkr7$R!CPN(iq9~Zsc-oJDF{;AHSx>D6Y<b=s$xzS)Z zF5KT26{r<dhCW`fs^>Zr?X+WO#D7UFEP;#$FC}0dU?QmBfj^2D4Qp~M0^QgfN^hW7 zAd`wCK|F~V6kIu|(5OSF*mhg1t9mLy95rW3^bixxA4Ubz_mIVqpmB-gFHkH{is&#v z_}VgS{zUo?^Tb~Tc<rKo_C0i+`wM8*kv*gZx>U+Odo(3iS~|Jh-@xo{p_-gAMBy@A zAoc&C?X801e7Aqk#@*dDxVw9BcL)TB#@(%PhY&1yqk$kHxVvlP!GZ=F3ldz1-+!My zH8oXxU!0k9@!oWGbzeN6cdhj-`7XVUhaNRS);(}^I~<ZPNp%rK=3dU=qeo5UJu}H) zFWgcQ?`I*)pX8-FMI$mJNwZ3_W9CjK%S~=67NN8J{2f2E`vtl6zCG`XihFnq?kUmY zMlbd}`f=xAr_Csk{b4i4ZaKXC>6Jpf)bL}BgD#NmlH7#4OYtj3Iuzk3@U|!XG+6df z<z)udK7;L>tCGPFf!*(^WlYK$8VG;*zI)jZJI}OU2HbnXh|z6)fzyxQ5}lh8-qOYi z(g^U!G-MB_QfzT66H;jtnow9BTRcJIo^le!ZvvM1_J;hA3xF%1w%d3^so=k+yrus? zq4e)d_~#FAp&kCnYucJi^N(BOrjMTm7U>tAnC^6Ol$>a=S7YF%HyOr0IsH`0&L_Bh z*BOdVbtR388Um0^_p?o^SnISVdO6_f5%=6bdAhs576l<v?xl{fqY=8~wptYfi>)n} zdkYZYY~Xw`bV)oMP9lFJ4p=aLqRV|8&+w@z-Aze9pEj+HtdXlYp;Qu_zO}uliw^QV zs`{Zh4Pp`Z2vQKY^)oc;)V(H=Ehj)n7*HO$7_#5Hjyk#MR>?k5thmvM_9|PoWzzK8 z8P&}9NFfwtU7U{W*=wG7PJQlR^KO>Yjd=}IjZYT;)4IUWrp9PqH)`+x>IY?tu6g~& z7tu?w{*^~xFm_KWPpCcRbRuc_S^<HrNVAv6VZn;?ykggu{`u2%G3<9L@$5uel0~Ed zn-a2oG+{y>rkk%rG=)pY-qB4efyW+5h<|v=*+nKjSkHsGHN(V8;hxCwSNA3|Ck8Y% zeXBx!#g8?R;}xo3<$gyAB)#{QkNcDNemTX$bSCnI06IeLO2S%Ng?~!>p3{60vm3O? z@#%p)v_U?HE@8c@wSPFVM>?}!(MFP?b-6V6XO6olFGp9wOFCfl)5m-`+s|7c=1zsp z1yH)_x&)9W-}T*=F7NUJ>mt3-_j~&M3fe%~gOU)S&y|Hc9)URh`2LTSK=XeU=yWI9 z#$MiFTmL@@+rRSz+W)H3k%>0%w$t-x$+R_L_o`!KzE{i$_lt|HupX5yE{^@G)~;q^ zB3i$!`1H29@mtvr+#S=PlMRYuL48$zzHou3t?k>wrkPM!=$1W(fXj;EKxW*VzLS$t ztJU@&(m&hXQO;<h43s&3ljfsF>4Ku@9Tquia0R16Xm5IvW4iHa{*z_MrK2`n^t`Qu zG4FoaRA6+|doWn@(Uciz;f^h%b9OD3J;5P%Wl^F=2N1v833lfpT=|q@CF7t&gXL!u zoA+7lbyp(dJw%F7K>?ktfQs_(j2M$OKGNA;-a|c-eX81EuHvj<*0Hz_JQC&-#ll6T z#|w+*y~fTt`;1-bP_Iz_0fQKlgz;X=;YkjV*UNySVMQfPPSrZ63rzWnkr#Z~@Nx35 ziP}o56XX6EA2cO}IZpcT0$I(gAal{*@a|LpZQ7!a#JdS>S-VA&I=E{)81&izsrK(u z>`9#>q}GB=0U%W8UYDkxh$eNddwmZ;go~k__4gg)>@#TtCeq<3@wuxP#qT!?dL^&k zVczODA};CG;@`e~b9w~{h(u8~Z+vsi>svT4IyH8w@gmaWh;35RLJ+)A^j4}+6Bq1z z`Jd8mWVJK;#2Y#C|CJos{~a?WXW{jxk?CS><MHnq<_w)}$2X_<YWgOID{oM>=5^%t zA>Upkmj^qtl9~dpDBnC`Yot-UgUp^btE%<YA*607ZpZGG>B5xM+Ur`DbMND?j?Kre zj?Ipz7ta?wDT)vnfj>W6<Gs;*|F+r<^ai7m38;!ere$-na|xT-PYmDi`DT@xevBSC zWr+DitzC45_wGHPX3!lsI{qzzM*3z^W&W_JQBYwKL?UT{+n`uMb>=<&f=cw)KRdb^ zzUV4RturK<xwJb9B^Fr|>JSX(&juIx({;N78sQpYREV>^q4VO~;!S34*f~2uyP16e z=k9*_>Zu=n;FBhF)iF!(!@MwN?RI+vtx5ECy4=OgxGP%!Ih+i|um>@drD&O!W0S*k zceDYqGILO=98@s;lftu<$hoF>T>>Mfi^Y&k()Lg>ZKn51%izenEcEHbN0Iner%36~ z=aEH1RhSXCo8jN_?>A=OiwrEXe{eqlD!V)O>M5Wr^?c5?&nvh!4{)Bu$`-Qm^>KGm zI7(0sQ-k(^)YV*-TH;T5uDGC8v1In-KV_0BdvCs(^>w0nn2lPsDm5q(PDk20C`E6U z1Vx-2`4XS0sNk8{pX!J9kq?m4h2C&3FI7(q{+#yD>B;%+s%dhN`_VhGe?_&1s<B=E zBWBA5lTFd1Y#>|2Gr~XF4MRKZfvY#j_Wmnm|Fxy~KNV*FpOF3A9qL^CL)lAhwh|fd zzbLDn=F9KU#*Q455<!$X?j`J_n!j1HDUCC!-Fd0HkDy?B>&>}Sh&!7D&n;2~(A-}B z3O)<;eZ%bO`hpik>IWm>vf7%+kJfV8>O9a(fp#pQy1qCqo{LRJD8TMy<Tq;mZI_yP znfT}pvsS7~%}cp4YEmZdAiM`<w|BThqI^yBevAocJou|$Q$+|_pg8mM)Tj%T16IBv z-^N*^qvY3#&{d|WaXIA&YClo*kZIF@-$BW<m~bw*a}B0^m<3V!Xvk@t>c60<xivO0 z@`8xmd38>G#6F9=V?$S~hy*)IJjvO1;{U;{DP1nkH@*d~KQ>r~V$cK1YWX(J(leuB z5A=&FO7B--LG~ZOdcSa628X4GwC1<BC6dX0!gVsmYH5@etP~`JYGh}acbR{nMQ=@a zl_p1zK4c$E-1(XrR6cr^{Bp@nT<fx0FDk1S{{gN@r0)|xTU++{Vcabv(TLdi9&^Wh z0&k#pt^vA})GLygLx4)Vk#!b0M%wJXiP~;&@E#P#>H7oBq^QClaewq>pukxFy)rNV zyMblqP3n$Il;PvKeqoNL<|;GuWQ(NKH(7N@NBsjbr-Q(pp3lF(>-?KE-G4|^{)j1f zPHj^}Cif3%i2sll_`~PN-5Y89|7S`2w=dK&{U`8x%d4(f=jV{BRb4lb9`Bc^S0l@m zQ8OdZRGP~arQ}+xwmA9N_|V>%9Y(M-#m>ZszffOHGgOow%G$1ExA{&B^9KHzUf!gV zgsZR;k0GxWa&uc8Rwi5~H*9s;jgCNf$=S+G(j$9Ec1z6j(3_&-9i3!birA0l4VJ6U zpu%h<@5U5kkIMW(NO82P)Xh8Q%ConsP$cnb^(=KxNAl{L@E^`9FDYf)ajxIVb|1!g z`0|}7FJ836*wl-V4v;LZ?-$(;<Ao7n4kr95Iys!W46Wo&R==@EJm+&^ShQE5TTBz} zUJ1OvvY;ZyL>hrrpmaoMjf>56Z2~?<rmjV<#w|eROP3ttLd?juc+Vfvqu?dxLa0eU zQV(>06*5T|W~o@M;C7liHXA#+`&?T3`3PsAUw5)FrbsubH^GX8mreb{fTpnLgk8?g zA7~+E#P6H{f(?>r?O&9N8y7LwAN%r&^MX!p?h3~`bA)s}z7pAGmPmXjF)Tyd0&R<R zA?PrYa`y5i*!r_+ho%;bD$c?QWgH>ZjiYFvG4qf^^eh0c^3U%~3bq7eU1wXbP?kby zg2O#)jIYsnM(R>hgKx8riS=G6Fke&86YySSEx+2ck%lBeJC5z<Lup4sXPx4BnAvt+ z>SYWtTMoBQu>L{KWnqr>{tdOW|BBjwRZ{(rM$N|R-~D`A|4Ibxemh>xw9S0}2p`t| z{#ec6y`VgHtZA#4<Z4}Yb;(Jxw5#4HIYe<OEP~($)Ubg0-k_NK{XF5fJV0o<8Gux1 zk}l$N6koF!bM8;>A0wYKgQ$s>Ya~K<Tt>^ze01>@Uq9b0{EfY-HwZ&t;FoP`o;3cm zK&7}sF7de@f?5hpK{Cbh?<CV6xr%aNO#W>gobi>xFV4A}ms~;IoeXF?g!dySRg9ZB z$|TOSrrE+`Q=YIqiCh&A37u$Q)VEF7VsAK3W{RM;Sa$t)n!1Y|XDNiY?yMAFi+9hR z%`$q&Z1mB^><T|ZYu?xCX&G_k>YU^u313YaUEBkO)Z8moY?0qsFU|s+Fwd9kz$-l6 zQy}a@nLR!$mc%?*({yCm#7j=m)H+YF^dn(~&bO!xU8~dwrTroLJq8~X?+U(Vt*~pf zf6mOP)(EQdc4lh-^?v_f`;h+QnRx^MSMEkr?X7@@pXVgmykY9x<RBh!4t}rN_X}T| zC0z3gLhCoVq^Z-q^4S_8G!u!L=??BmYiEtx@0>m?Yiy7E@2|IMmS6zXN>GNP2Ky8l z##n8k4yPE;GNwr1(4I{;kdH_soJid!sI*$trlOF!W?fkJ_ttrGk;o(!y{uztV<$6V zB_Cd@?V#LlCzp<Y*|>r)Z4H@d$(0i=(S)jyzX=N?kk%6V)NVpdSD;b_PeV%6jvlc- z*$Uy{T@OIHrR$@pyzH5K%o?JbI&k!;Y2q7DHDsNL>eOMlO57~>6!u1cejT?;DgLGt znTUyTh%>GRO-7+8+R65DMOX?{aO;uzO|VF`nXSo=rw|nGAV%FNuL|;ZdZbdO%Ka&` zOZLw>fB~Omso&0_^6mN0&9E~6J5lF*4-Z!l8E;$L|2yc^HPyk@A`VF|PB{L?^eH{q z(5MeJ{5}=MR@r#^ivS&+tO0u~X*3$U%1fS0&S7~%4)d3>Y>p1-t=GmCIklt|r=@LS z!()ipL2%(;%8=*#7dR<&N0ujKW{94bc_)%Y<U6^&gUIj-)c5UHECF1VI}+ukjPw?( zNhF5_8C39v@I8@8Uv#*>n@ji6g?*fFPPnlhV%8%M>wW0Hn2sexcjRpU{nOvkwXMFx zan&8h;=%|Is=im#IWReG4*bxY!S?41EZnjG#Cip}wVJ4nHCm(BVjRMiIhoy4`n&5@ z4$ASwR%;zhj5W(h&}$wa$*gmC4RMr*O0TWY=A`fiL<Ocr$0-u+F1*MG7sk8F@Q3HV z!^ceFJe~>lfeaojWrP84M(gBg920_8uWrh@jtUE67>q3U_XAdJ?mYo+-9ORQ*8E3G zVSk106E%upRM8vie_A+)XXOdj16zgY4p6M?o$C%bC%(1+eqve;)Ee+W^=UM*^Ul$e zry!(s{vP7={^%D|+DPEO%7+HFd3C}>kCoEM0(}^Sa?bTXCmi0Z*Fh`X>`Eu7wToCI zOc|<<3g+}*oU&g0(mSV0O6W28j~I`|?U;lN-!ZRdTJ8NRb)r*H*`j|;2Ybh#`^$Q| zQxxc@NS%cK9%lNUNtK8Hi+3~*^yJPIYZ@dZfAw*9joc&%4mJQoMp8z>R`aR0=r5Ux zNYOD`Fzj;NGn77=S0a%{4%pQfOv-j<@9jQynEf5<(Pdf8VI~1ishTL!pUua7mD@p9 zE=RnTze5(!R>bhS8b@w($5{1y)4h0(R3v~i`F4&yPgOKVeW+H5Un=`fK8~A^Z!ELi z5W*M!g=X3^_mzc2Opegqc73qM_Q$-F-1v^DjuUHO$p%8bWH?bmqsK!oI`{sBk9Yt< z#7wqOBaZFRFAeq;75u<#bR}c|n4A@DKIXO$f5tH-sqDO$PphnZMw%k>>07@wKKxW5 z|I_o&dv%1P?FfCdZBhSqJompUCHyD*rta#Z>22v`Z>8zs`X)-{<^OMM*Y}T@dvI=Z zT+*xnqXs2B)=}RnQY;c$ICT?bD;O`P&Zgso09hZ^d8il)<-<Q>?kK;mcF-r!e|3&< z{k^~b0mmg<U<u-r&NQdRHnXo9XzJZMdD~Pf<f}o?)wY~Tcv?<xRx!twR%>$1+P+93 z#8QD$wbfLEw(69G>eZ${!!m$f0<RNBcHmg)#Pw02i{lAuZC>?sDrqXz;iOVhRp$HQ za{E2?YsAE#>UWZY-|Q=JzW6wnX*FkJ{m%JD&GmTZkVn0f<wYZO4`0h&vP%h9lHeQL z5|ZbZB+3(NGf!E9Y(?&&k)2eR0+-nHKgm6JQTyo2H|ym1U+vfX{~i1Fug0_g*S%T$ zf5n;3^(#|fn(ZB*zO9lT+tRsU%M}$XN@0h~-~~h1=qcvd*EWPiS?_e7h_3sPC1Ph@ z066%e@qUaby7PCRC~khW+0BT1p5;G3JkHwz)b23jE85-M`i6&SIoj&nR=%)u1g|u@ zPYpLGk)b056PGtJ3~cxmBZkF#mxk+BaZv*O#S$Yk!!j!|+pR^cIz@+kN%E%G45^eU zZj=r!h+`gb2E<+6D<4>+%k({{Nix?g*b41N#4Fp2iEy+R#v<P?&P^$UWH@rPl<=GZ z3iaQ8k3*&LDD`g4F)!F$UB0a;@hoO($a?x*JN@ug#Z*AaD@i0B7_UZ_l_0|`+i8uX zNd9mx#A4W>W#`ukb#h2^(-=n5RvOYQK)7oV%KSzU$Cq&^`CFCL?))_nil^qzIe)1; zeL3ljzjv%EN8iHjy7!3wF29pctyxal)A)9Oy1otA^0Sy~0cHcXi-6bq^1z%j!N-Oz z&9n$eCTt8k7L)+pQ>6xK;0&;=!1|xNT17Q6ho*IIACQ@u=TB<(q*Na390k)F?^U(1 zs?hCi7Fm19Gv(bS;hfCx)fZh*x!q}0Uz(*iO9L?vD$x=}nRZxeBcA_<p%;qAg4s8I za{m91AOGpB|JUo8ucP*lkV$Z^(D9&q8ZPd*f(kRf8*T+!tgQXeJMA(>9CC-St^L8O ztsRlkU(|yd+Xnb?-%u6xq!q!m^dUHwODJmg0YzCxXOo?Rysk?~J(7Q542Q+x5cj=J zxIgs=VG6S`dGe<?8tU%1^9XtwihM&~nMRX5r^Vq>Z4ua5uHDEAF>iS?tmOe}cc!A3 zS<t%;)OOL(NuFpYe!nl`q~g)79&@`!2_qBN;KKh9!bEx9vP$c*?juFn#afz%omF$B zv|zOSm-HJatvjtWb^}Q?tpmIZdBT_Nu*IYIrfV2B*emX^X_m)&TgnzHI4Wy2yrrJ< zFYn){U-7^Hz5L9SS%S;DFnIWr_;PSjNVo3FH?M@0l&mXc0q3}zG}!jDgA$D@z80N$ za`8Y`zYaOWC6}6N5xB%<=Pmnf816h*e+F%xaC_C=nC~B%lXP*7$7H8>W{yIA#guk2 z9{uqi3#V%Fpt0m<C@Zd08XI%5cJAVsb@cC7X9Bb<Ka7ACW}q_C!(2MPm#tI^+Pw7) z#2LYU9EPRIv~HELwBVGs3$8|gQ+i(<0Vr;*0*|yAGkmMLSE#jb#^gcx8)u3<Uo~}E zg1R9Xd3SuQ=X1^06VqaGz_((hO5<QaLI1ov&GlngsBA$f;|zicdC}77chpIi1%Swa zsP)h0_A;c=^177uR+q4HSV_=WD7ZKD^DVBe22fA**AXWRZ`P;}39pi9Vq|BW=jgw< z+;sYW&H3g-SpVy=$A6Xk{|`RoUr4TZp#+f)T?<LD+WT&@OxqmLO9{j)p2%Hf>tw3s zt!)X>VA9i|NH<%5kjqS@XY@&iEo&q%(^Q^ND`K}3MvaQBDkDlSL2|ZdE@SUH`@8n| z(j~~-vAVcDShP8F`+ASWHZ|Spf7|KLE7}ooxTz8RnOpy?5Nhz<VDozw6=ad@X|n2< zB9-8M@aa)fdq6|s;ZYL!m&|4hX*b4^Gx!(g5t4LQ#J4{Si&%$8G0#r*4>*#!rN0o4 zHm-udQc0i9E(Sh3iCp*0eE;=51b+cZDj0hqMk<(iAq8iWuKl5+HiUd(<cUp6Xul#Q zB4F@4<-2u_JENutdOZn*qxtp+^oqjs2JF751&z6p21MEy{EEVxszNPEw4(#5V9bRB z>1VO)0GI`$!$);ZGuUez%^tuJk@Pceg&E>Cfo2cvk%3ah_pk>R_rKn-FNhW2XKw|i zgDDnV?^jNb$iN}F-8eJ8QqLR}uHg^jnmt%YSW?e46_T*mBj6YKg+lF-!mtNV%}|&l zPU&ZYiXOykLGTOV!e-b*pyn&mf+XlcLGu;<s8ISDts)fR+O_?`S5oEME8w~i{DQU+ z8u35{AqJuXDIuNUdnq01d8v76I0!oA37iC11KW53Rs%TG0@I{&(T(2$^}uQ{&Md%r zsa(uebck)Z4=%7lN|dBgM@p2SaRr<Wo`PWqteQZ=!TE@*Vz^rzko^dK3}Xx+nwK*T zkY?d?GjgNxLbyJXu{aO|%pbl4ziJ7|1U2I~+JM=SoDqN)kR0g*&=RaMEAVSXGj5{* zL_e&Vw2>cNgWya7JeFPq?KS#9rU9p_5D}?0WMf8PuGAX(su9>3rUtFC2Aq$vDhzgp za~1`PN{JFR=7UdRodtmhVa+kEFUY`y2*P)X8&|WkRNRoAK~GL#F!(wm6L1O(xe3pN zcLp@#1MMM*(jC~1=s+Wg2N)x)8LRObj1eIKy9xur#I2PDQy`u?gH7RAhrp(=t83C7 z_>I0G9}?gh{HZC}6mylJ-KVVZnQY@@2Wn4~Z-fs&@NBlp@hM)T%RSGh=H?@$7Vb2- z-A5dFhI9%C-q;d-F3)wj$q(`6^av<v_E6`1{aS+_3kwts^Wg=yfP7eiEnz;QKq~lC zOvoSjQ(15@F<&|rhOZ#-7UaVTybbe_1X5kIM&AG)ns2Bpw`m}hh^JOyaoE)oaIncT z<zH5BsL$#ym;&aM38(?Op$BS&-S7ctKsP8536#|aa4>44M#K#XL;`K~Kq?Tk@j&`f z49E$(p#^e=-S7a-0H+DyV3bDAh#OR(8O&)FI2fbRK>ASxxCuDrhjgQ?9)p8bmVceI zu5qn0tu?v^l00IyKl(D2Zv9+pI@|fV^s6-GEbJ!O^fAmV&Os9XRN?B`3K9als!@5z z3kkto<z&JIQ-)MJ_FS?moi2l)qaR)f8#lvl0wFI*jgp`n1;`8hYN7Na8Zh)-L^0hf zMq^Jz^yMpFV`$ioE93=E1kMy@1FoIOiwepDC54JW0qrpDR9Eg`1CRve6$)4bJ{Wf> zIt3&_a;406qzBf331)%LOBG^1phN7!LvW!DpDIFlpkF~DEYJpNLFq!c0Kion7)e?Z z<H{dAgVaTOMQUocWk4y#IY$&u*<aj^d}Rzdmims=1#=}2$@L2UVJ7^I6DF7$=Of~S z2gCqGiP%MQg$!i}w}gj?Kv|_-;erXERnlf~55|z?u<nn`f_E8NS{4DKP&-fv1C#>n zx^S)DbE(G{b*UGO2hEk1M7v@K`-XKBTs25bB3(IyU6F#3pa<dIcvq(2GsI^x$So*D z0;&b+kUoPEM+_jp`UrWHIztkNc|ZW4A&8?q0HDl}c`#OZ2o013(f~e?qJj;kf<8)9 zAqK-=!GWpZpRu7a(xGHfqOcHdXcp+j2f~T)OaV4Sd=QlmC4y!}gdji-!b1q4Z-3_i z*@S!G2b-Zi1WNZ{UfqU;h(phip5efo0Fk2`28b)-Ga<wk;aLFUiu4=--h_F`2ZthG zVMQd{cBw3%-2@UI-F}KcLwJ@j?b$r594M*|O;5Z8)k;Ed`DU+Wg&MD8q+f}lDWDf7 zDAn@y$Wwvs-1#n;3g(#!ssVbThiZhq@IhxlFDMX6l!pdzDC(6)#0v>T67AtYDirhT zK>Ae-%89)}Bpr%!l_mWO3pIm(R%w5+>9HeAHhCt1^uRtCNWYRozlXngLwaBy9KoS@ zSIg3`giu$|i!-DL?!j03?US>xmtaUJ-~mhe6$dJb_{<1?#lI>Hd+~&X!aQ(FzY;)4 zFI=TwYieIHuQngW>4;yhUSXcGz^^!0l3_1)kXP6TGwD|{Xebf|$vq?V74~@({E7sE zVFFMBI6+ua2sw>zfNe>*UMwz5Fs!*)FFYs?kOp9Y(}mTAQHA+}%7tMr(u)qt1~9@* z!U~aW;e&KwY>&+!#BZ&_VLbt`Av17XS+!^I$gp{cTv+B3Qv6aFy|ADt01fCppb6j& zxCUSVlHQgdC%|L^*bod6>&VR!q=>;J)UXg(2&$V%uQEsgqz9<-Hr&1K47b8vf~|%# z#Hxb<Q*5Dwcws~U0<d1NPOv}G-7+yhJQWC{bfTHF_O1X908Vf}G3(&AOhEa74uB6_ z9#S3BRuG6uN>B<*3Y{7gf(Ai?V10VqAZgAig=-F=M)-tC4Bv`P4fhFQ^pI=sHo$^P zeX)+p+%N{G$6z@m=@%Rl027vcZo6*tL)bL3D_kq`mL*69`RNppb##u|<BQs4ig>OL z@`W+MbVKOP02sh@l5IJlo1Ifq)LsOtg?A8cbpe)PI<d9_K(}x~fGtEo`Yi(}7sdsq zm0(K%v<4%A?1ls|hROn{5buzCO#!}e>u_$Iy}^LDuj6mQfRJD)Vf~1=tN<whG1PN+ z&<KDMNeI>re+vb~2vY#-N4iA<(f|bEZW)0zV1h`ucmah7cjUdEfEl<T$}I#C5zI$e zKawppfZ4*fO32wgeP5Qh-_Y4<(T)M28}*z&FMnGP^c^k;Zi~PDfkD0CT%@-J@C$G! z(CZ86MmuNdy#;h*ox_2sV4sk;MgWp9cg(#rfDp`cG>{qWlX8sNV^>zMD<A~zTokkk z_k`6;1$aR|X9P*YJt1s;2ZX}iiS|kYUQo_CL7{L@Na%>su+d29oWv4bx?Fr*UZm2| zFws<r?&i86ZpuUyb5(e&&n~JrfoC%QiOO8xdcVL9>vENcaZ@Ccm`}p*(ksJRnoq*+ zT63wx?CNsaMp%S%BP9ZeJ^PTu-ARf6_I|;VZ*p0<>zctGMlffCr-L7+<#On&fGeR) zMC2mv1HxKy6RY$Zq7L(LWk&pfP2?h;GMDQG!jups&i5Ij$deIQ^%^Fr5<B)9icTBa zRU=u!5ucjp!3<}cdx3u7B&u@>g#92%Z0P+7D^EoHp-+e`(X;m_;;;{w56GQ^ShVja z!mtb1G@KO{@j(O*LJ3(SC70%~5QC&VCvmX(RYWRa7nbWLJQdywkcdxg&xP36ik*l~ zY{cbZjvn>{EAhFV`{Y)QOTJeKFf7f58Rkx$*b?TBLrfImjza8;w5!ea3uf5Hyb~|c zH_Tm_*Z}1Ij@TgV!iB3AaaY{j1a7#=ypt&LxYv)0csb%Cgi8W2jA6cBLDo9{Z9b%i zOz<%nqjdX2Z!1CKT5l^wB38IN60vXi1r3)3`mjQ8D_UX)bCqx@+3j60Yf|8a>?3#Z zld9k!xZRK**Q5(AE=ouelJ_pnhM%EDn&^Dxl<dZs+|0ge09V0S5>s`tct*UPK4Zy> zlUP+9ifNlF?PANjg7_ici^Trn?{WJ(OEx-v-gGy<A6X|mY%9zxy7?~(O8cLx=3_e< zv&xgZYqI^;jbidK9%U?cmuz_sC%+Z_`q*Fcb>}fH4&SHZq?Njz(>N=!{NV`Ra|$)# z3VWc>tDKWq?f2(w^URjL9k>XkJw`={>}<E6n_8!!NcyC61_s52MZd&KSXx3dQ&MfJ zZmnd2$`w=fso!i%*~8}xy=>sjFF%?jVOS&_RLtMFV_OfZot*hfaynHdN(%<~7Uja` z$ab2@6<q9}72kQ(RLmUZc)qpd%ya7w4Pq`R9zdjg#Txim^9OSd+x!HU3&w|dyJidS z+U0n<Ir2$j_cdo6V*+;~+T=ts7L!tnM&VboKNc!sVfd7ma9g?)F4iQMYagz+%dzbD zm(-CgwBuxC8K#Z?d=?7ytcWx4e(xFQ<Vss`s{Dz?2_IE-EZRskPu9P|R2J&dDPw^) zA?TvA_mJ=K{;OEF=jTz|)M&Ln?Uw%V<b5@hJzzcjPbZY<qr=0L5oIae6%%28f7Hd= zsT(<@U2ZfVHL+}BMe6Ws`~`=f<Wq7;J3po9s96_X_+8>gcDitj*wsVDB4RC_h53SS zv48Xp{a#3O&h9P>^J7_#?hR&UQ4*dWhFMPdh0Th<?aK#$TG`y!N1y!UKhkRjM~K}> zyn#ECN~)1svr)14g%!b%1*W}PWxrXEBYzr!I+&0Si{Cl!wkWve6X{ovjxF=pp&f38 zXC;nSSOe7b6J3Dr2i#bpQ+zGv4-kvw1bUcSW*KALa`7k}u1su+s=6H7FFsd!avHP- z=pV9UHX1n##^{-3z6@o=#$s`3Rn^^(z}g?ho+YH6>1V|>{;dC0V4`dV#S|-_u=S;~ z`zvPGKu?hHH6F$eRdOv?`7Eo(@kD?UmBP}={r2;&v$Jyj0ljH`O>fZpT08EjwMp^{ z(=AYaNjs&=rkp~uO~%xDUBTdM+bA)yWv#r6kp%)XR=_oV?e=z`Y9OkWs+i4>K@@5o zXYOrMBjITMuW3qoMn8rrV~j{H{6q7O>f_)ph>H?S?yTQSK<>dUwEB#Qyo`f+pRx7* zPbEB54aC^wxHf8BMU%%BR|sZmNc-(k^GgL8R!+&48Q8t#a`=Yb^@y5X)I6Q@@YFCZ z@;t(qJTtC#@e{n1XvoXqmue0@ttIL^t+UuK`h-ZF7HY*t8{cVF<2RQ+D0@h*@l<H4 zeejuxu2t)r=K6T5TUz3ZqN%g0H!1F18I=C#ND1pw_;C+5>o^{ZR_szmjHx>8?+Nk> z5Ghh5u&#zPN0H_$aR688Q1f+3TYW@Oyz4f@F7t$gT=veovvQoSlyP6bpE|7rqoTFj zWxCP3M=TfRZR^sy_a%+mK$F02O}=br4I|-s+BHE67PBlRtZF6eTkV*sY(K2=l)tLg z!TJ6As{>y_dZ}ThI&^S{Mb%MIr?(M{oq+>6?zn-IDpORc$~1&1?)H+JDo4+?C5*X{ z+P->zQ*FUHAsOt-{O0NsVUNx)dyP9eA?$0~x3oXTJ#;0F3$=~Y=55<JoP&eEynd!T z5M?96OC;99MA}>kRJ~auS6KFFZW4c6B$TudhuNAYcg5L<T9bWu)x=S#5P#@Gp|-q! z=GQqbXprUbG2%ibXZr#IBk~bctNb<Xf(bE+S!{2cs?Ciu@o~HS4;t5tA*-mu+@k&3 zkiKD2a4eQ8@h-9E<(Px3u<V3twH;I1)XYnG744+aL<TC^YCr(jrL)?1wQKr$BN8k2 zjA;@Kx)jA$^T~tXMh2M$8+_>#J5G66wVA0)3=QrkXBalSOOf#er(ODs%u#v>!o7R_ zH}b+oZI6RcT!Uft4@MxK_qg^jwx1Vx*0PPwf29rlbU7@hOKs8)sY<#nV_T@K(@CJl zUSl!Q`SXs&h;?KKP_@(ceBt+v?pLm;6;rOt)+IYbiMsyL`}(Oqn_`O@yT_e19?NkF z=LKRM3OT*4NRI1fTc9~a%RtbfZq&NikV^LMNqq=kw9m7(LbXAtc&8a*VF^c^OD21a zA-lbN95CZnvpc7>$ISaP<@h~`)SDPU06Us7$n?UmxfD$hCF*bIw6V#o6aC0kxAscR z-j`xP?S-&a2@KNvUt-uP?-ZR06+`x+ieHh?mcY(qa(t{E#@@%fK0kYlJ$H;W)4vYm z3MFKYD_?#zrnC%UMwZyHeW>RcZPRxVWa%dP4Yr<-1~zYQ%O3BvUS|E(tz?*Jwxpfj z&DkMuufX83**2d0<`bRhr;5p_O2>PT!*Hqp<MYX0)zu&jhh_&wP)(j~-$l5~N9V(8 z`nrKqJxh!XsM5%ef5ASg5uzvEsqi0vZp!O13i5e#XPk5^CF5@cbF(7n^q8_XmC0iG ze@z+^Jf;N3CI5PMpxc?Yf`kPNl>WYxjei0SLj$_)L7u%^n$z2~Lu$Ov`|)f0?W-d5 z;m=;f7zB+)z*_r>S`}+1_0k;|E~189ZTLD=g3n2efg7O3Ay5z=Xv9Jgn*LNeE0C`8 zp(r4l-+Xq7d!o%AhoPit0ncI5B7+aH--)AxWBh=<Td;*8DS?YMU`5N>F_b}kVcFG{ z-6%ngO*@ie=T|i0^iT}@vrDpVjmtFDPkW_V{;*h|lvVa?dMmhDD?nM=JC`m>#CzdJ zK3mM)e`b0(p~CnQBX0I|(vj4}T`ycwT(jbYbR6u&yvoz$t*wKZPk*v*$o7e?qeik| zM}H;jmr9XMz2d;&lIUuwV^x2-@UgXi*5(kKORtiCDREf+X|k4)rxP_>TErMWN6$O@ zhgMq^d+iu_kFP0c+v`a6e>k9GrYV@lxvaC&l%n;{*{uT{4c2Sf7dUx<TTBd*rGn3# zP8qq_+CAhNftgsSj>n=Rtzq+K{Fb7fdHr>9vX>tlSAF1vaZ(!Q5^&~}Xi{=+IXCuf zQOZUWSaac%1ZI8WJ8Hy_Ve5TnN=gwvTw^-t^B8-U@F5;#eqj7Q%I_0ljf7{`UL3?x znD8?fHwflbH@#D1E&vudXgSuNEsLD_U3qT_(`Jru-nPt&pKVB4cwVc^gy)>P%U<)N z^Avhn0Cb!)NQ+PJH|L3x)PCQG9byK7YZn|qh22UM9ZS3VC!E&Y=KjiXRzL6bgA_jP zJC-?a8VxsdQ)jHjAfzG;g%d9}Hsn{f4@{(~x#Y*N4&q}wHM&-im7h2o*Y4QrEyzeH zCWJAIhLkbuwS>nSDpL*l8T!#u8%$dJ1J3oM#DQ~gL5}n){>vxDBIK{c#De8kLF{xb z1M*?O#<M&W?CxLGU(^C?9_2hxqFCWfO4>`^YXkFytGTK@UD$rH|GveZQz!mY$zkT} z<*hrxMl!FjD&Op}p~}A4q=ksKMgvJDuh#HwihGBF`BF`e(MY)`VaOa@_XBwQ({yYF zw<WHcL+$-vF$1$^xAJtI22HZx8bg4uNtouFMLYH$2CH)++~k5^;R{4XwEeBX`gcfb zO=W~^L&Fk!)_h;o8F!UFAoN$>TiR?x0qgv3`{`-Y=3c<72%okF9+7eWxR2d9gY(MP zyj~|9GR@?h0!9H&ZpWD{-@?$@57|U&lY`W^jy~|}YmqzN-rzgmI;nlNIq^!4Qwu7z z()rH!QklF!%i*c9?A&C;qvBJThMlX&b7kDoyL3Zty7c#0CvVC`jzoTRHm`$^yc=FB zgIByUZ8!~H!*Q;y+KO4hC|Ez)r)t)JZOAg~J1tK-A3|OhEq<JyrI_u;&vckESO=Bs ztFOHH+QN3wvo=+}j1fO=8u|KEs4mFfxtg<E#Nn*oXp!$8vc6t$+K3s{+FIJ&{P7C5 z-3>710b5hj$m{AMJUG#~|K6AjHQj1PR#9Z0hvKv_sg&8de8`AxnREHBSZ!T1%_z;2 zXv*PBq3bB;saxizvXYhoM^2GA1E%nrrK_4qvb3Z^P&G;Xyc7Ldq3&-wk`&VLc@p&> zt2*JCQp`7E_Y9SH>G59rMjf@mN{$Uulenj&422A32+aC%^Mv7W3MV<IE+d9Rp2SFl z>ss86U*)>>Y^2*9?6N9ORS#0f(n|s1>8I<m{e}=fG4qA#1C_CR*s3(yGaF`j6+jjM zZ$P(HUH{VF^pYBfU2mdAi&5BdsNb=@VO-jf0bPG$ADx{K@A0IM{#fwZxF1`@5%ueO zP@UXvUa|Z|ws)_pXW!_Pp#3S@8b<h|eX`RRK_jIb6T!4jXD&+Ct*?KCz+7#6vMvP4 zLfN;mi<bKGUV)~}QCT&Xo%=h%7n4h=(vP+Io$opSG&g>|Y{64?JRgObxb3*J)#Bl3 z!A^Q^%-~4wuCCyaIP?+Y_mX<+DH`LlVhJlPAG8;Yy`uk(!y9T4z+^@7kkifYvJu;u z*O(b_JWNM0TyoUJqzA*3sCo>{8jx^}o;RT^<(&$1Q(^%zwS7C!KTFUjrV^x-^(69e zqyXf7shhTQ=NB*_P9alZ30eyl#owRMTLz==w$G0l@*lZ^YRgN1&vNn#ESOPXc*g`d z)Gcf6qC~MP**zTHDRqn7zCA4!K~cv-0|HT=S&GX>Uuh55$?ILkl&CbAo%~_4LUtz4 zwkFJaGgc^gQaMATE*jtNW3)CTbY9*=!^rLGO6t@v4tR&F>%G+b73~*ssJm&y4a7x{ zin!DB0cozd9x=QfX+jYt^$fIywnFQc^0ZxtUaSFqjbif%82;YvWa!CV0=dUkn&0&| zBPxFzHYOe;sI=|*%QQg~z5S~zb~Lt;Rm;?9)IL*v;N!iJAlG^Ok@gGwD7~z*c43y3 z%(%bFk!QRF!*)qCMR;^`Cz={P*)3+A9yC`GgLuU0`6op)i#9RstceGS2ds%R^CM`( z310}V<aGXe?n`;Ol3#e2U|`c3bhvctT68*zRdT&cv>38T8MbY+s_RZ29PDG|U`ga8 zHq$kXL0d3eWqX;EzaaXun1UC%CcBnfw!Ipa{+oO#+(zKcC`1OYN}bu#UiwpQIGXW? z+|*(-Db$s6k&BqWinf??c$G&MXtJMn$!k%XoAvLeuTKY~kaC(bbDNf&myD0kot-Ni zx(JT=kD9CxIg7?(<)bcab_w|U>-sw@(olC<hYbkIIeIU{KiA7azv+$hY>e4b)3!Nb zFgfMx)DhbPq1wW{6Db49Ul5eBa^Wm%tc<m-r}8761c!+&#`|aaxon><O{z$me6pta z+ATxH$b7ZgNm4!~x%&r9@trCupwbVm+muMnYOrgP9+m0&NtM>-dg(~FvisxjlgR%L z9IbyVAP@X7DD^Z5#SQt4*LTjPm!Ic*DwA1ZRAf?72V)8XZWCFId^Z%4<&~H#!PP3U zX-g6UDv=>mB~qfwM|5CPVXppslCztxm^|BA=M?&w2rp&?OYY+)zP2P0&CJI*d|E_4 z-1U(+_7@I1grZFTD~#nu0euV&Ro^<DEd%5s5H5X{KTZfIensqkge?~#{f?(+f=aW` zu2~AkJKG?Uf#i9AB6+p!H-)T_s0)^<`X+tNBx99@y11wKSSD-Uz`>lQ^=#R~zmR7# zjarnc<s{oUV{I%XphrusJnVEc9K9~XbPDO;_Z``Pnr36Bn37kd(J>d><TyyMu4&sk z=^RpD)}`t*P&W>LA`=cH2%B)t<@d27YkPZR>}!b_>wwIaZj9-T%VzK#(xS~(KE?Mf zh2f+DXuZ9Z26`0|&8xTRu|;7=i&Lbyuw7#rZ)fq4Mz2k#o9HNMnZq4WoYc0AB{T=r zX3dwWB*_{mxX2A)kTHSkfvxZt7Sj5^pYeSPoE2cXA4`lHN~cmyluGa@ct3A-IKUzV zv@EX2Q{wF8l@`Of=aRG||J5?6PJZVTY~&rgJw}%>z{4D(u+WjAoh+3aQis(n)NY<> z!AnTWF|u0cOjk`pCaXTgVC8D`W6ZF~@+(n0(T~xU8jt#k_r-vQYIuJKvZ&6y8HSGY zqS9DrB^0N)S-I5KeTAxqOxlL+2=Q4qrIq+N`02SCTVDpsjkTaJqW->3r*Lhyyp9{m zPAde+r>NM2c?Axl_+MPUNHIYiE{))kia(dxW$ZN0b4B4fNqKm&kI@*6WFOE@)c{j; zGw-I*-|ZR^&B`h^w)MB<*5~hA*@@av@fX`)9}CF~Bkc8Hyy|bS_Lgt>05js83|6_l z0^Mv7YkJ_Cc2<&)D~)P1sWrkQSa&Olk!D-|##3;h<Mcz6ry5K$YRCm-^8JtDeOc?r zV3^=NiT6Og3^j>Mwrq-dymiVO$(xE^E{y?&Nwl*GL^aOg58o8?FyDEKj7u03+5)p= zH-ANo8(1vo%$a^rm<w;k3v2Fjj`TGy(1=uBb>z$Kw{5$R{{DWhvQFv5>eudQI`dcy zM@R0M{HBzt@Q|FokTrW2f|1bJ%8`>3x={VOOTQqh8=fGE1Na9@S@z+Qr2c`kr?!zx zq(tP4hKJQwTv}4GqEXUF4O`Y&M@hE!PeLleW}D`KVF$jQU740+c8+aWpR)>rd<4>l zm_LStlV}r0w=(t{!XsgQ;&Kt;xkgK?(&2Wh+yYZ3jo;l=n=_ATRT<hV^0@O}G(XUi zH8Yf=?(*;E5)2;?x3DA%Cc2g^3-7n)Q2Sr_LOPm_850;|vp;jl@rd(>Z?onfr4j#* z>bEt#7HHhqn<$;f$NGHLsS=?FY&4+XAdax_QxtYt`s}SnPjZ?(&wqbJe=Ni2W4_4D zaURPRRb9f7wqe>{kwS_$bK<}3<qd`+TmX&B0lEA<DgqEDUCj{|s@TXtpt(8xv4c|F z3^*=)5rz_Vz}DQtn<sT@altS^zKs4}zhy2WuQ>Ugd1Hq{1xc<>AhV~mLBEZ(3bjzW z5+a;f%O@0e4bEcZz<^JnDje`TO+oChF$%{w?{*$FT+QZj4S#mqTA2TGn@}{T;UUGn zw^soeBoz}=+lrk!ezMllv4R`pT~PCFrxiGq$%9uQ7N)iv8_u*F&)UU1X*XxfNkEik zcx@gWQNcC)DB@7!^%_P*dT)pKYLdvNKF+CC9pjcBjk?=0oNFj$rVWAD^Cu3Wi}11a z-VG!ezD=TntYQmG-3wu$6<L|#x|=sKDzjz+@q*d(4P9lebVlWH$XbCLHA$BpaozrC zFH{5`e|bpegIBCfqbIjhKdoqP8m1IBC1Eth2Kb-W6ErD$$kes_TFh-zD|0>^lGu|+ zDC3T(8fd%%OjTtf4Ouy&z5{`VF7>F!qS~;8ds#YB)BfrmpOCgllUF+UlT>~y!w>(6 zU({8^I_C)K2f^i<L4EAw2M3XqiFZ?_tgje>k2H9N5#kZFl?NDKZ9QeXS~HWhJ;%uv z?RNGNWGlOD#g=tGe5k5Ripcg7tmRgl%rNO-*ng_<HVg_ejNFfQ(~<p|h=nyb;DRh7 zDI^&gcd5x@JDpO!(OB#KW~pU&6$pk?k_vT+CHX_bc}Z*Bh3$=@@;ILfJD`(BrKg8| z+=6Qic*BY82gb%RYT*@oVce|fJnNrFQ_UTe*L^Vd^1o8Z2AaKan~X5{A2@V-$MWh< zdfB{wfe~0c<f`5EU7b8}$rLSmj`L&4IXtA=KIO~gGP;?EQemQ2&A2Jpwku=BmS5DK z67pHo5~(o+K#`I6muTG>>q0(iCOR?GUsDSY;F7bJ{%nt=OHqXgObicxG`?-Nxi6|J zi_KW);ieX&`0j@w-R9_rRE0`3iI1>)KRtD)IA_VOqz1zQBFCgjD9Nc?jCdqD#cyMp zxA}~R*NB%aLgcLu_b|VbXUL?FfK)9040Y*SMSF<mk!=#^liwdToghT3GnQ$Bzd75a zs-U4Pr?%`I^-X(Qa0_){&8EwKpGvD0%Q(y8c0cAYFbCv~XjVXlA7BsK!pW(GO*$nc z43FE8g_a4A2+yFHAOtlq_j}{Sp}+gkHX)kDh4Ab~kmrK(C5$vrTYF=rZy&(JFDJ_Q zE6F`kJ1H`fvl{2CQY-@Tt*S3U|3qy=MBK-Q0Cmod@G>0?{yy^{>Kw%#qThe`j_&y5 z!<?)=SSb*5aMBCbJT%#yrlycRzIbV6P*HVi11;M(q~+fK8a(JFDKj>P&5X;hFox$C zNpD23QVjt2-(_ETq9?4Z(<b`Ft<$!bU85-@g&0{pjr&m|;noB@+FN>Ukm01PVQ+os zj!zJ;Rtyy*9SAxV^oj{<u6RpWiB;4%aFaWR+u7}A*D))&f0@P~sd8lN(j)G<-VQ?Q z%$au@<koXM76#7Q@Hm+2DR>BzhBe7Nriye{_pQ7)H+Y-4^Q}Me4gF-@qw|xt@4HS$ zxI>sJ!XfJJZ7I)Gsl8aD`x>9UI-b@&_2~fuUY{{;IM0^>=^T3AI8`r@T}}2<wDG*U z)wAxbq2nc#zknmhK@F|llDgnnV?<TLo|#RkJr9;x>yL^x-bS2tcru=2#1j|JlI>1g zk*e~#_|2&bBQj6!z^}`YI?mZS&{!?j2xo{I-m@w!-w<DN<-YXQ$C6r1l6YH>#=5x6 z8a{I5XlM;-@uPLPjH9SU`T+jarBW9<mUPZ6tTs(pP!6}+;7Ua8xypE+9KR3!Hn$~i z3J!c>)9|zXyAC3!F3t8p`F5(Wav8qE*F+X9^w`Cyl;fvpC-ktbV14%37_4?NLF@MC zRgIIvNg7A29G@<d`T%fr&|Z*N6*Tk`EMPs_NUa91XHX=4s4n4+k{zTlJ9GTDaTS7p zpqsILVx9WD;)xfP*!E5;A)~3Y!cK8vk5RW{ocpWy-$%~S-WO9x(WTm74)T^l9=MeS z<cPltygY!^zsqe9ji<an2src62?wmVHDxE0xCyP!6P^`b%zhb4R4?B95J{63gFKtH zdRR~dkBka0Jxjc27`}H{pYO^oA}a7<GCuip$&_P@m-7*yy#^9qnW5ToGlpYJHNX2c zj?$p<?^?_xI)|Zcjorz$pOME|^YO?^CIX1?j^%Cfu=ZYc%_1=oP37hMGMg35s%l6d zKG5EmFWD+#Ip<*AUtaLg=YsP?%DVgSN-h{X$-&B07Dam4Snwd~eK(b0-jqI$`abGl zE4FgXzD)CO=ATX)AO`QF+CFlrh4W)!LvG6m)oHuZOCw8<=t4-BaN3_wFWIn6(MX|< zcAQF-HTGq3YFqZdi)J!Cv?J3T)yhs;sLIaxu#5;ucMi+`e))!;i#AJQKe`pf2hFiY z{7a`t|E*C;5oN~MgBH_eN=Uyd*?S|7uO=Mo*Ok=fCP4)8yljnUz(uoVksOS0%xGK@ zw=BmEeirV=9=jwCWD<(ywrSMkL;P~XzjU-h;_MK~UH6SK$C#`n$cV7i9`i47=uFbW zTm+xd*IDAC5<e@R6@JEM`2ZtqDZB}$c2un>rpzXgACcS<`IqcCjmQK1K{t8m$Z{JF z4X?q#(Tg0e0+8Q%W%+Uqr*lDeaa8t8JAR~aycmC~9}k&pljusV-V2+C@F^r=ge9?u zIP`stG((2adw7u$eYN>wBj=kh+zrEtxnE}P!kxDxyu{))40RVUCl-u<|A~+lk})8t z!2C$#YYjh1-<BPnHqFx3sqNVsK#5Djcm@iQ;rF<B7r{DibHLG-2&NbtvZm>gRhTsA ze;q&1Ca$B`lB;07_P8A07H%wA+^61D7L<*N*zfe`vC9e1>7_{|k)h7~vqtcfU~9!i zPuiR6yLi%qeCK$%DN^MH*O{#20wuc0V6~vM!XK78Zft7p`w59h50-0jC;ksz?$j*@ zK2u-UR)zR{5pt)@`GVY*pI!!Q?}Os8a9^@9iQ#|b+*gYw%hOU75B?yef2GabbBQKk zX>v+W?mNdw{wVTUMjVCkyZjyEm}1Z;^pOur&Nv-Si!gy8*LiZO3uFyR$<0BO+ldl& ziPbx)S7h6mc6*X}inEesQeyaIhdnaXpf|k}k{ZW*Ol5&k!N6#H)GYTT3du6$=xhxa zJ)ONK^HpZ&45ur``j?7O>KtXcK<Hv<XEsYze=q|J)o=d8S`nWX0Kbm$V4V=P?+-W2 zP;!036TklL)+K|XKrJWLpLUtnp$74H1|?lj2yndbMcDszXcwGdhtkf(54EdX5Ah~a z$1sPv*%oKzeA^v}$d-}YwGSgH&7@Y4P0SeJ<s3I_*U3MbiLQtVmL*_y3)ol8IaDvU zWrydRg<E{vsWUGm8C!!AQs>j!R3Jg5?b7{aCQHj0S=Ugw2RlhSU>s|hWRUG<y9trh zycFTlG9mdl9DBl#J#H>`XL8SUCvf7HYh&?~D0`$0i)s3u#>{~bg%I7a70>)^Qm8ql z;ugkDxpIlA!)M3HaP&&ng88J-@es9l5B#GcmK2}a)uR`qHLYTAmUGWL!ftM&9d9oh zI^Ow(qTxB>IoF^sUpke;?=zRde_dnrnxOpqT<7=6N?voF=2KJ9nHFWu7mGrKvE}iP z9$gIWt7yofFX^!Po;xY}Y(?Ln4q+mR$fBogX`_sl2FV$1E}^l{Pp2d!HQ7gep+EBu ze$u!ACN}L$Xr0D~DDNLD;pmd*xrL}pV@)jJsco8bY9__M9BWv=XPUlNsHu)k0XGKC znc`Kr!(!{AB$u#rfS)_k4hy;#lW8bp&(Ycsb=XTl4NbxMN-ar4A#Rkqzx}Wat2Vr~ zES?g4G@BW<pE&3?4ANZ(`%ns&81k0XlRbQ=#)oPehuFfc6O$$6;Hw0rbR2nW4&BEm zY>LJ4X^FC=aK{UaMw??F2;<^3PvobZnTG!_06sv$zg)7HL{3<Dhw{u>0EDWxlo-|a z&O^p}J&D;f(u4CVMlzl^&o0^k@1ji($L{yZ#dbO<wSSln=o~zF7^B$ig5y8|aReo6 zMyNn`nvkYj47^dEw&E2SDJ@Vw_gAf^<Gt0rL#ZA|<gc2G%irWsEN<>X+Ob5swjX6~ zj&QK>LFeuZ<)NHrHI?X0UTaPB;lde$wh%?{5-qc+K}==TKSWNQ=Vh*onj|IYm<Ppi zHQH_9a?k-X#D!l`{_LDj?(Ou^W<IVZqx5vBZ$xYcadt3;uw`|KI?1)c#1GX^cUJXP zOLR3wyHPYR(RLFubxP?j=D`usE^p+Xfj&WKxFz<<m#8_cu{>f|h7X$i%tK~mAHQWA zuHJ{ygI+XHQ(e<qO6f$CAgk#^x(cxop=)6`v&F1$Mu(}zdVY_u0Cwl@0_fCGGD#hL zLgUkI=4uZTTu5+q_(T>Y;_b*vLYOPYuM8|Lk~bg0;t``fiIL#Ui)SK`+nty(&i z(JY^*ah;x{X~MemM$XAsWY+C!x-ZKsP|BIvIK^XUlc=Fs$bsnGxYdESuO!-N3%~70 z*iRAIqlM_hW+X~u^;AhCT0}$wOmKAJy9brFK+eQ3A{I($^q3H<GLh$eC!Gx2O(&c9 z3BQr_5M|(ecBti>D5&19t!4(J4?W%!moKOg;V(;(Ti!v(0b8Om-?eI88e!*{nB36~ z%sKL|DAn@Pcvm~Z^Lafg?ppGrWOHcelb}#_2xv!D4k2$$&Jk-OmF_jAX|Y0|RYlN* zYC6_NQz9NBr#4@-){$rkq?=}#IYBJt($<BPCX$z?H7`SCR2j(bk<!dZZ01`z+x10o zb6O)Md2Y43PLEg&Q<cpyKf)_Prg0v3Wp<@nBm9pJ2J+j|?uU1*mzLF(9j^KJ=vc6d zpOWH#<2WNCe!n3wPvWNCl?n!T<$|Kh&jDon1iT3DGRY$d3O!DGg&zkI7RUQn@iJA* zqG!BcAmMFvQNb_7OyH+=gui>dzefP!s;%4KgS9h+@I&j?wk_F}+BH;Pzq(P1&pq+C zPu+!GKl^r3HAC?2f|mSGE3p<63HG{7l=k+l^<5|w+L|5+@!AlkD8ZpD-6B3Hx4F`L zYl1;JS6a84N^JN~<h^PS^4T!G7o(^~yZI@McoS_x7LD-eG$?m0Pf6_)Pa6eBkJ2J} zDE}-G2jXn(5l3@WenGcy(gShpT=xQN3$kFR5j7?@eVlhEoA`p?AB+w4*Gd6XVuzGA zGYa?OgMJhdE$)rc3-%X}ea@k7enC=Ts+07OpLW36qa09$XtpkW;_FP=mD{Wo&61Vn zXsj04<PJj6Z<It>qLzl^VGGM#8R^63L4+;5xlKDMess(kI1_OQYlFk!eo0LWt(?Fd zl<x@;8})oQyCt}<w%WR)1shlwIPDa7q)q)6ey^a8+?;b>6ZD_WB{1_NK)St23bVGX zrWCHp#e>qb9J?pZwU9UgH=7q7ZNn`i&1PL)KDP#|Mq$BnsHj5RLZlw!tR8&!KDAsY zTqAJssv-cI-=_&6zKU-NG%XH<I6SJ`rWoRlHs29`+3M!LVz{Mgah{oR4$?Rk6`*Pf ztXL5^CcYIb^7wpW|7M13hbnQvA;;oE8V3cg!=uyj5f+?!hg*<Np5F2zZ01hUXSaC_ zjFX33%$<m2x0y%hQZlZ*kR~!l&spW`i?C8w)kK?AT(wpzKj4r%5E&qfGfH5ut>^d^ zjC?xvuceH3TF?m?B)}j)pHYg9AioR}8z*-Q&l9<)0H_rL*HXrc>xDF~Lnp@gR!5{K z!{0DO`|Yxbqa#0Pihh}cX8r$E_|BuF`5dm6;A%_!f=A2P193F}dnpxu=2z%(H_m2b zef^T!`en8COK`xsId3+_a-$_Mg8ynaZmf;PXyMcPmdH0@NZ*Pnx5%f3!({WMh6XV- z5fv{_hP*kNwX`hXC9d%8A?5HxF8mpVTI-nP>0@T8@F!=cJ9yf<cFWdH8@sl&Z)w|z zORW;zI`11%))@#D3oyrxQS7j7+Q`2x+-=8)n-*RzfmB`ec<FT3wYlhM+Y$dTJ$QqK zV#8Nc)z*GgNVT-R^^Bj}mC?%$8<hOW^H#l~(RRf8Wp(vS>WC|PB_&Qw?WshLbFq__ z%7Jj8o@V3TWID<(YU=~Lagtbuvl<5vIU~NjZ*DECBNjgU_Bl%8-N$oieji+}b!$u0 zjqGnNAWbzyeT7YZ|Cs43`|+;>CkdN_4m#}+OAql=4i%!nTd;nmMTyXaPDo(GBGgQ; zSUQ%5u_QPMgd-6Yxudm}BvyGda?QUjbTwts#l-W{;Q;wC*BMVQw%`&xLz}?)3yw=} zG0Z(CKEgDqpmQ@lqk624d*dV2_oRZp`O9W{7S@eL_C-t-`l-7vtH^ytiDRMJ6W68# z(LvGEB5K+wsPmLugME6RAFgQNnTaRYAa<4F8ToeQV#g*guriqnCn&}NS5LnAkWYYU zLp&gkV_T$Yb0n7@w7172!?dr0n(A&jc(_J9RXlT;9@Ui{qAihVD>X;>1J@Xu2Wg4e zLRIvB9tW<V3s<lNsvw=f?`{cp)1!J5*F;l^Y=78%?ozXdpWm%n)84s$Rohl`b^Dgp z9c$N^U2UCRi@MfsX<uiqX<y&I)!fv%Hf;Xj_KWG9y4V8}TQ+poJDAH@+n(8)qI@2c zOiZigNvTtUnf!K73D9x0@U(AY&W<`ah60i9YDaI8UUui7+#jaX_`^J_<ybhu@j*I! zl4o{daHn8@Ad!mKggCyD^bjWEyGyX+8{luEQaJ=(HlPwo;GI+-;<cr^`4O%$WHyE9 zuIg#g>O6E_5+@2Sigz6)ZL|hQ#@Er48g>zLh2YNNkmw=$gbtJ<JVn~ZsixqG+$n4% z%{j1~5E9HiPIe&)nFTmadN9ak;~?KCvLH|`(?x}4<=`-384d<2{9eCL_!hS|?R=Hk z-{5MQWI3SaS{2Y^{Jg?=+OJ}xsN(9DPE*<I^eX98;{_#Y6@`V1H!dTN2L`OO^u-76 zXn4*V<)suziZ&S*gv<p<Xn`r;Ghd!m85&a^Pw5K$0=sFQLP;IMVu=+vo%L{mgiEi~ zF%cZYL%;ST4rcyg2U-c|Db*sW+QZ?4X39Kd?!k*arD#stQ;XWE-4imgkRGVrLzWkA zzmww%4fdx~aU4~&Eh@^mK$0Lh0c2|k0qq+NFIiT<jK4&L-j0cvO-+p_;^>QUG2z#c zwV<1WpzWUxjih&XYYEvV<Q<hl2;Go&_mQudsHGdy6{H5zKtpX~Eu9N@frhftWHgf~ zO$V$-+HOwJouvLD+8mqdrjOAs(HAmBTW#J6C5im=@99F-(}1CaE!B=&%7KVHa1cfF zF2Koc0e`G}5_fj)>I)hcENEOHUq0vBQ{b*_??KEgd^?FXcxYY7(aCp-Np|hQ>=-oS z6)*k;iJrX+_=kM&n|sD_j<WnSC}QRjSS$vHIrV84jJ)j^*b^CP-NOkHTYFH-J<eCs zgphKv3_b2w1q=*jb7p^ZU)+ojM|*O~5fhaxRwhaQ5`fZg-=IfZM|)oYe>YyW)v;6F zw6r95HPlp73yD3|DK<rwVG&ej6bK%PaLK8u!ifnTj^Dae_n<!Z*yF#@X)zvz218ks zho6<f!C=@7X2rQ~KXzQ%5H`8rQogXVF)Uql>?0RfKM+r$CNUZjYQ$zCs}%FX%BHZH zhgfn<b`$mVNJ1gg<Lmje2sYmn=-C7(>#bwaL#eQMY94*aLTycVC=)K-Mxl_$UkY^v zM=h}`tUtwno|HdwV84fGXDVb4?zZ1iWOj=mpvg}RChe(<drS62U^^{3aPd5WF4|Cz z=TW$AwH}PlGl%HMK-9EPBoq-AzOAtBhI}>1Xa?h3S=Ff;<Wv*~Ysh?}jLA(g^L!wQ z_F=IBk<WT??9DG>Vg$0SjAdRy6VX8ozBrZA^Af=t@<5dzIHX$=bcQD%cKA77ylTad zNH4}Vc_>#D`GH(YetO+cO6RY|WBn6@!?YiVnZj@_-4Z*IvA7hcp%r1;e4H(gn#yN; zicSO21cu{Bp4ElMT2r3CHATPr(K^=WJ2u!ItAlN!RX8z)x(^AmQ8Ze2Nd%ZB)YsRG z5iD*2$t+@m#m7nsQR75fKRVV4^@Z3P3b4)P(`l~d;D$s<-V-?-GQ|!l@5vA8dV_SX z*B}@v<v4y{p_bpTz!v)gB{_2_MOz<%9{%&dVuqPtJD(31d)RU>$NVW;+imBP^8IDY z?4cx%DA1$4I7iXj3&Yl{BG6rjQsU9wcnl@l8&8E5wq6|15U2Potof4<2TidZjk)~( zOmvVdDOC6}m&4)^=05or&l{ZGn?fr>jrDX~Ftj+dG}P1>T7qB8mW7rtUmo&PwX<@u z3)<1w@9yj@7f|rKNm%%i$qM7BUsqWBSS8MslUeseh2QY|6}IWPaYp$IkweGS<_pKK zMAPwaRE4@AmzG7k)D2ix)7anwEUk5gZQ)0;=<t;NMj-KT-PxV1x3+KU<Q`gW@&j0T zKNB!L#R{q+{VXhvL%v_lVyq_~>ZJz_wjR?y2OCJZkjwUkln-0xvy60|6NNy~R9@i) zb}P_cvEAH;EglsG-LZ+Qdmg>ck2aI?D^z~v7{OwXOYIRq-=Rgjd;Ii!#%i>if9q7i zOA81Wy>GxmH7CN~K5%f~p`DR^t-B8kq^)xZ-|RU%8+Pw(+`Y4Dw}0p2-8+};-nkS@ z%XaTvzI*42-E(jzIyO4z_z-C4IMAATyrvWJRN8}cxK||GT1$N!al$(e{#ycb7Vb*T z2?&B-?4+>erYQ-}S?H&7({3a#%bW#S=4{9^GE*zH=CS};sEid(p|&WuWjFuq;h!=7 z$xi`MyKJ&+xxg`pz%jvlbqUgC2u~@27**L&gkd;rqbQ1A0@ZZW91dH!EMy$pu7T>J z<Cg``*;W^f`#`8*3#G=)^=H!ivu1nGUK*<Wc&2%n2>TK(O@+rO38j41W`%zoJp>*q z(_Da<aM44ijU{-NWJ_p3ax(6qiBelAs>wV&=Ga;kuXCr<dA!gX!(^2@9y>IRW$K9R zN(qx_f{dd4%p!cO3B?so@<GdvRt?7nES$beLYA6!N&=Ri=SzYf$INK`b4*SC|G&(! zesU&^-@A4N_t9SYF8;2X@sWMBNwsTNB-(nom7c`su}}CLoer2y$2Y@q@qW>who5O< zLYIy7$Q^%u`Q)Aa5s=+G8|sP8ruyCV7#`tmmN#qb>DKIQS5<+dnt@i=GqUn6@3eDA zN3KF<13gFTM6jr#6pE@v4SaKqzM4YjVk*&D3(>O(T$f<D9B?UObRre?f<U9dUO{E6 zN?{(Vn;1;;SK#M2(|v2wL$tMEHK3n~`UHRPfL+gLCVFGSh6FvVEbfxf8g0;SQa2=c zeUr03e2_2U51F!(ztF1Gc|30{8pGJcafCJ`_?4$0iJ3+Ba|9;G4V?+re!jKMKGkB| z!3nWg8;Nd=4%Y6CW0X0#_fTYSYgp7&?=3t)E_CXxudS!!^!$-+dS!MPHOg<RhIvb! z=x)Wm!X0&qJdg-145V`WFf<?n>}uAZ$ZB`liF8^{%giu;hg3KrAHS}Q+PjeAd7miV zHF4Y*>%n0sp9G?lLOs<k=pL-A%fH3YpT{Pjew1%Ki@Np$7IYVZiERT($OSynL9&|@ z)Fn=IZC)jN@%Pr@rNUMOchajW0-;dgjCeL159|&fO!4itV7Syh3+vDZxnE^Nm~Ue@ zhH>bHd3Wna2omW!@m_uU$rt&?6@P{G-Y{%!-{g3JWs-RFJOBL#{_gk+|9JldGy!G( zwKf9^s~@W&6*hyvAEvICe)4XAI<uDpi675dHD<Rc`Yj_%A|B}+5=|`lVF$ECZ#pBk z0}Oh?X|?!Si;(jtCg>-W_R~p5*RM?EYiZga9OMs&hmP^n6wcp&pkJuSrL7}HQ>u&M z5MpX6gy*1mvK~z)epZ0jR-i~I{@M$N_z&LBKdxWfppMR0!Hs13>!`-{<$p05mp8{H z7&6>m#8}61zDkz=>I0qXjHjeH4z9!xzbov_QX-u&fhy~F792mJps;1t$BWU?P5eYj zd|3Q^pSQZ^TpY{;dt(VYRTj_C%jj&yY(^a9!tv-pvt#Tzs_8vRbd{usrRg^z<nKwW zDrttXaEk=bEjCf%kEfitO2?zyw5PH;Oq=7IdKK34Ryb~^_!xKow%;*aTDS>kBzSBo z3CxfDZp0AD&&HSX@{+wS|KC#K*lbCxOyF;TjprllrsEs+W3a(^v;lv6i1fmSu?-M0 zmJx?bRQ_W?C+udc$H+qIu;-7)Vr#8j+ZAdZjx@n}@|@0`d$Cs;@N>nxt}^1cp~{4B z0uq6GD}R}@ulih~GY&P>fn$DSn(qds;=?$Qay*u_D{NME`zRC1+`K>1+tkYaf)bBM zw3%H1PK_#`=4pQ_ndZ+~kD}o+^ROTi!_`af*uV88RaRQ(%g6dVQTd_i<quRZFJYY$ zq>8H)wy=6EV*}6``0HO379P9C_<LJ8+Z#_n-R1m&@HHOy01=5`GdbD#ysPt7g5#S1 z65EtaJez+r`|9*iil3T3E$>beSsDMUZf|er!N8h#^9Q0=R*xZq+7p7+pQE2w0!2yh zf`t4@cub3}w2KRA{Zu?XQ(P@r?K)w*SZXZ1B&<_Qjb@~}XiPQ}v!mlj8hzEAXHBda zU0I@K<#XsIk|NQF_Uxr!WTa#~59iEHYR+MEd>ef2j4_qXpx-6K63}lKF~zrwF@Ck% zb#<QWYES-3S%{_ceNp`E#>+WO!T%8Nf}>1(gxY;Q_~~aJ{H$ia$?wFP7=n8^_(5dA zhu>XKGkwQV29?GU=6{rp!_Uf!d~tlfIKeI+VG}!^W|MY2%_i?yc$8HhWmOw1r*tj~ z9br?SVAJx%ry&u>&ScBjX11Pnu`}3qwuSBR#j)0hFunNKXS4JO(>VO$r`dF5X+}ro z%qQ4M8!ZNB<ykp7UpysWJk`lyXQ*=aq9>U7G@FBb26jj+Ap)E$K#sB?a(~*k%6Vbm zOy9yIY`%;600aEoji2YS3G95fmi4j@mSAbNmt|R!9byA6LHcb$J}m{gqEL|P9U-Jx z^8{P)zc19nl0wa627X?MLS;~>EIWw}v9r(_wzIe4=f&(Ib_u(jz1<~P!V*jgVV#C8 zKPnU~<YHx!#Y*iFR(CTCjn-a&Gpl%%HB>epVNH*ahMa(l@x$4pKzU2Xro0j?R4yfT zRxW#jEf4!DSA^A>>P+7e7Ix`uDI1TU??j!w3w3rmt7TWPPIe_bhh4?CvG<_nu49k0 z8`+oG&Ft&!R`xo(gZ+@*>C)i^whj%{AnEYMV>?Iln1&=eM?^S>=-o0V?Sy^kTQhyf z>0GU(sUqj9W#jPkE>zUrsHl6;x$Z^hdJvuKVRkK7(G%=x_7r;-KVM+axD>S4R?q}g z4~@L%kFB87^TMnwP(_<l6|3@at4~DeN7<UsqqD4ig00)}akl0jreO{8vYymXx#0+F z4{I~E$}=j@Ji<CEH-`0@`b_Nz>n!0$pF-I_joSGPYUerDjCxqbUSctHo+Nt(b@wWJ z2%YFCdkuB;O@w&erKO}DWBw+!^vIaBwCOmtwE09`W9$m~4vO(zRLGmCkRPBzevAtF zDJtZbsE}Wy+x(8*#D32{#QuOz^+)zG_9vG@25g1=TaK$w{@;wNw=kH_8f7s34Yl)k z)XqOpJO5;7DGJ-Jc-dtNu&b4E>|@G!_81PBPbd>zT1nYj`K#2*6aRP7=D!(Slqv?w z6gEMb%1%<Ip+07zK2Bj5DFOB_<urD`GM_!9RI{T>jY}Wt{|`prEhp|UU85*y5h|z_ z6;y``sz(JaK?N;i*D5XSMr9>?T3N-ORaUbXlr=5|4cZEtkC_W8=!cddTk|ZRoiCn~ zFK){hx95vHoZ@u|sYJF|GMFA^=WZ-Pac91`D_`90Qaq)dG+~D-&!f2GtK8GMh$it) zUUxp#QBaCjc2g|s!A7+(5;d|4EUsr8l@69sHnaPbt?Uuy9QLHLjXk4mXU{3;vM(w- z**BD3>~&=~`+;(vOMMp}m-=G)V*LM7eZ6JW$5n+%qf=G39=UGS%D(dIi=z5^QGFMn z`ckOAK~&#`>@!LR)t6;oQif1{`%r!RQGLTM^<`}J=~8_Umk_2uUrgkS7vzh3$F4IW zSEmy8Evh`T@(h&v9#%o_a)b?_C#6I}$Q6(#z(uGVf(lg*ipvZ6<s-QAx{!_Fk{~Hn z(#j^HIEUCO<x<wCT+UL;73@OgDmJ2A!wxA|v$rYl!6<$$yFz&{4$kY@4a)o32bCMy z-O5cE!ESb`Cu>LZ%jKeNR|)lG^2Kbvm@Ci;4|*G&x(V@+GQ|DB9Z*gpQz*BwWy*)x z>B>jgX5}u{rQFSSD)+ef%h~+>Qu6n73I6uwi~IA%;e2r<Up$a69?TaHl^PzEhfl=n zZxhzLsPba8-lED&D&J1u=-1ow;-AWNEZ&bMdz{^_Ji+c#o@5UyPqD`p%wZLG_Bv#% z;5t+Rt^ImSsNm9k@f|13b>(F=Mi&*1L1C<CSxEUTM*Zh8>VKZ?QeI$j<wX~#`)p3X zD973*B{+TOe@DM(RKAM>No$z%yUjJWF1N=Pjh+}TtdsWW5dq~3D9kG;%-2wuSK0Z> z*I7(?jU|*fSW<Z%N7T32kn(Lb&v)3x%6DBt?ze@!U790RLdYxf#Vg-}kXKc{n}oc& zq*;U$eIF(HF-r0?l;r0q$uCfnU$Oz^S1zuHZLVLJrn#a7*YC*}uX)R+vAHj4qHA3y zN@9r1*(T!2yYgEU><=i|pHZ;CpkRMx{mS3aJpaI8_aBy1{>Anw|7M3h=w%*-UGDL? z1Rinhm<WMKN(lVkeDS&yA2lTfe4k6eT`Y=zm~^I79+ibW20P1B!M1zGvt6EvEb6IZ zG0$Yy>#1Y|o+<1?&r~+-ndTDgz*q&l{=Y2P`;RHuOcd-C6wE}y=AdA6QLy<a*l8%( zJQS=N1*<{97PtgEXbX0|99Xduf_)%gydht_v8;?o*-a?U&B8Hnsl1gO^0xBB$+L(p z^E9#bo~5kQvy7eNS<cS&tYAH!u#4A2Hm`lisTaSSpJuo3sQlog><&`tokFE|aFyP1 zlzpgUVdaM_KZ3;R`z~VQ?v0^^B?GOeh0XS?Wb-|3tj@EFHF{RFu*aQJAGXO~BYj{` z302*5B8C^5LdMY2_c|=?*3x=5$8!c-=h?_MdOBH`XA|4z+04%KoaJKkZO6steQ%Y` z`^&Pq71`W|Y@Um3?nE|sA)C9AO?QTUk<I1-$>td)*!<{mx!AE37e$U@tijXEmV5eG ztEZo>@+4Th=K>c;7atc#4~&7M@;Vwojs}sV404o3j&jJ+5OTE7#nB};N4H3h_Lku2 z!F=(deDUFY@nioLmJc9{7qcy%x3e9dOW7XJJ8*nn#xC%@)5Y@JZI&;SET289St}nI z19Oj-W$p?Lepj=I=Nh)!b1mxez36+_v8|r>xtP1uX70U`x!on0`}kOyt9-2TahYu* zlSfK0$?rUPK7dT#j7;8&Oy0)M^xTfo`h)Cj&m9=8-J8qruo?X%GD;i#2TCw{v^=Aw zR|UxG&DN4o@XVKkxC(rNcK2qgv@XI$Ls+kTG7K|ere3@%^n3)RxR)*V+{e~>9zZoe zi1GR%w%hYC&Nm-p{hmiz%JXrS@jS*xJdeAiy3Cg9YjUsi7E7w9+`e%P#aq3eE~9`> ztHUB5&q_=V3aaB7u7{iDb^_@^Ll5H{o5gonJWsHBo@dxn&$AfKKEp2ZynxBii|iWD zOYD7~m)XspFStZ~=l`OppZM>HdZetVUq(^ChN6B0MSUGbeG^6f9*X*X6!ixv>JMF_ zzRR&yqA@?V{Pe#j>L*V~R149wc|@ObA_}V(rkQG4R5N{qi}t*^+E7=dHmLk`*qCX| zgyM}l&mT~2e?hhV9o6<Pc9GZ1?(}NxWp4$0)jOWO;hn(V^iE_y@lJB7?{eEyz9c>6 z10~e=nXzi_v;Q3@`CK_C@m8@p-f67CJCkkkp3Dw-1ME`oTy~{5$ll{UjlJJH&n4v* zwv;zuK-0@4CC{BuD5G4NM=iDTc{_|1vb%uI^VYIjZyh_`+sM{?o7hJ0V%Ftd!nS#r zvh%#lT<l(HvwN>(ckp;;vC7ZC1^!<s%YQRl=3R-rx3SIMHEg?gE%LmM#k}iTzjp&m zd)r<7U**`q5l;2+|3aj7i`pqgrSW$RZ=31k?naxqq=apxgZb!fFP8AO1r$=e9caGI zY^k@4b$hq5z25EYdhdDcR_`A6Vek3u9&eOA<n4B;;N7+gZj&aAk8Z-3-h$m;E^D`5 z7V=)e7JK)ywcZr^TpE3DknQkZ$aZ@(XuqtB>8ov~zbEbXk^h?AzVKf*))&hfYabfx z02=Esj;)K?`QA&|72bET_j)g9H+ru?qg{zcyUHc^dmQ6UD?8r4bW97CT)Tu6<iE7t zzFgLB*I;<Nj@5YIhvV%=9B((_c)J<xbqkKSTXDSI=HmYv*KQ&4e{Ko>UwI22_LZ`n z-ie%k1UbEng}wK(Ro?s92Jii>)B8~j%nzWaJ?P@}TAR~b<<XDr#6aa&kFu|EFRFYM zOB)wfo?rR(BkUX7Xu15FWVJJdDegBH(g&@(LzS-|W#8hH##NPX(CYfz)^UpxcN4si zFu(UvHpTmKc8d2g7VtjK7I=@aI`2^&9Z#^8-X~eR_bD79Povkk_hR2`^L(G=IXXJe zSoqGEng4ES=J~dm_fyFHr;+*3AoHI^_x>DP=zWegd7o#?y`N_--WQPh7g6Cav2(mH zqszOq!Ru@RK81DCy^-xVZ2`VV0`SuJvDE2SKW*f{W)Ikf#N#(Z{FC3#;qojJ^3W)? zjln&pP#%6C!}|)#^A(imtL#+o*VugTs~D!fj<fkU(1~6{V|<gX^S;hHyx&6Ce}hH6 z-)3>|chK$KyRz@I<$4X>-j(J4An*1+%ol$&)}Zy{eDNn`GaBqmh9oVaIe#kdYyB)N zgvThQ6|7@Kl=?Y}{2LbW{tid<pV)}^FPO6Zm0j-r8+*6+@9cfvf3Taq|8$9ay`AX> zWTyLr64CkRW0mn2|E(nVmv14-{go@p{dKt{*ZUtf$LC=UK9z0p0XyKEz;5+TX3zVk zvoHH*uy6QgvTylLV&C`8a%t}Uwxb-vI=Z2>hCBOjDt~*F{jS4yck<+gmA^+%#>Msj zP#o-_?+fMkAIPu&$Zu?Q7Dqy#$trvSHq|$mnZ6*a_MOJ+ee>9IUo~s?)v(n*_s-`B zY@P-sPZ2jyf2#a*o~OSEp8i_-H_pqMm47E*{!xM#zSj5EAukQcOC$2K1bJDCyewl) zzU9cv3Kt(Y*k09)p@E{?Yn+dNQgA5H%)f|>r`f;J^8e{vRHd*Zih^Gr@#V#@rxo9h zqlzk0`6m_4!*If`ywEQFL6kyOioQr_l|o1dUW57x#n|DkJfmxeuS)TEiP~}MGyWak zN&Zbce3PbZ5_J{oGujSsl`{S;f}C)csGX=jqwnxeQ6_EK;hUn+X^4(0WeP>4A{A|6 zQ&9d0^ZQy^mG5+Rs&5sW=UdGd`PQ(-zO|^Lb!?4qJ?r#sVB3A|tlM`6yTErQ%lJCj z<-U#Ra-Hl^-zN5g?=1F3Ul+RFR+ma|v`w3nrd?T1rB%vQZrLhjT9q<gNHU{JnaR07 zsjPXoA@4ho_jB27-%eKJ+l8h*k1g}<VW<1fckyzQ&C4Z{mv#p)Rm!X?<zxppr$}ye zeiw%dRm!Q{P*?GzS5?aFvi{$LOvTaXdU1^Qu?4<<RAz!je0$kSUy^O`xlgy=Y%_ML zWbDjB#!O;tVdc$L${Yuafif(P#@ZmVmO<9CsIMGb=o>=T_OVvqFk9stVQ2UbxLCWz zW-TsRTjI3enN`YM2R}hEG%fwiEx`oeB=j9dCN5%Ad>7-GyadPOr7Yxo2QqS*i}<ZJ z@g7OMDNo!=+7^c7yo>ZtL;BmQlzE+$sx3OA%zr|uE+l<9lD?8v`mSQreeY&-eOI&j zzH3<{rZ!H}x7nocz&g4av)%WEQsX4gDJ~Ea-^?faQ00Z<yGmKe3s%CzbDb(B6sDQ6 zbDI}2@f$Gni}M@b^~~pcKbzpYft}>Lkp+A=q5Is7K79+0#aq#RZeweGx1*iz#4-6H zw$1lp7vHx#)><M#+c>()aB}+=#jje<uu^ctOQ{cITxoFK@v38s*)pZh#q`~%)O%5> z_n}hnN2Pug?fD?9^F53<{WuQBN7xGAqsaVY$o%81!*|5R^apLGKPs8tHWsF-ApHJ# z*k6HpSDVd#m`y-Fo<#PaM)sdU_CJB_e-hb$mM!&t8rl9Vj*ZW=Hs5nNZ9R{Ae}QfC zy~xh-z2p+%j$_2RDy7jeP8P{=TWh&Xtu=0&%Eq}bB9C9jA@d3jnXh1+`zrdxtEk$q zW1Rbji<dhcHxdOe+Y6@nDrGT`CsoRlDrKpIv1O96<yFcG!5NmqcBz^37%9OcPvm^B z<5c?wo96pAhQ06L9P%de_dV3z_t}}gAEMrVg#P+t7q1_(dHtZ|b&reJDy5}LX%)dw zP8P*npDqSrR5DG4uvHK&ucV03xu`gc^8E~1{so%-m#EfXVL1FXviw{0)Zejo-|sQA z`U9H!kL*03`)KTkZMOR*+sj=MyRAxDC7E_xel@XLrK~9%8UKoA{yT=}e_(k2C-U<z z97X>|p8n&a{}G%1eo24zG3Xa-ZLMHsT{(|aJ<PBA*i=<zvsH~PP<6Ic1r}Bfwo3K8 z*tu&|@8^`)msH0FYr=Sgo2k7lFXNGyiO9<&<Yh8js8+HjbqZUiPGzU7?(+e6+q_&X zdD-CN<%}xjOa})Y76<PZQ@cIKS1B7gPo3pvQgtTsGz)n;h0Re-R-?{gjcR~3t3l-H zG`3!K@4Mb(^R+|rwWw$|*(8VG<|^eZPW-GAe#>u?t2Ib`A)BTyVy0Tlf@&QLsr4>` z_u2$wlHlU<sn-^_A-YP?<^HKQA>AdcN?nGASi$D2VKhbrjnU$wecxDUZ!M%<W^AY{ zk@hO2y&7q+McV6-_6DTw-f_KuEVR#d(>|vx?GB{fiL^H%?X!^f7NoruX`k(){ZWgy zXE!Dd7!sAQ&;vUBAoNjI+wrur4c7$Qk0?8;lyl$K`VOx`i^nQu=TT)BEfh{UqU_#A zJ^0qb#G}f28$<M*&wsudI->01E$ANSV?8cAmFNy!H7eaSy~#CbmD1x}c^*+>j;46I zCdWy^qE5YKI~^Pgr6Wq8WWJx6*EsW9A@hmS{b)Ww`7gj3ffmO6a1PxRty1<rtt59W zII0ZrWUEL8PEH&`Rw=1`^}zyYTCnpax9|hBgOc7hQ=`uiedHbE0J;WKce3&7Zg#S| z2OZ;lbc!fOfo`@^?ZF5TV;yQA+oATen3`Z0se9SYYLY#s4zMq)DfV+Ut@zYI#ZWWK zG&QTtQFBT}9a7rV5oNP_NZFwtRubyll*iS}lxNk;mFLtel$X^jl~+{vmhA)fvb92< z5&fof4&|P1D`(Il?uB_RoM{)W#*Cw!Jt7au7iBFg>{8BYg5#z#<S6fRl=H_}t#j0+ zW`%26g?b%3SG|Gts5i0!^(MAoy#;mqA@-W;&Wj%`I!F63>8MH>E`4H28KJr206H2; ze6UJ6WX%e*gv5udl(&h}MODhhcIgtQ7T)d<=u$`d9ggy4j`BMl<#&}8ou^vrJs9`z zXVvNh=xz_<r1KD4t3J#&sUJgkdxYJsKFJ<ZpK__-AzKCKVI7^>Y8)j+z1$fXE5BXD zg_wmtfl={UHbwmua`S2A<}<88{j7`X!#35kB-NVo(fA4?T7npV)>VBTiM@a!_(dFP zFCnp)U4%Yn6WS#S)tBA8dHuMA`x4T71?hc-ovMD7%~QX|>eN?VG#{~Pc1fBGi$-3R za-~d9<s5TW8SyZAR^MPV)bF4!zl-VCn=Vq1Iu6W;1?kx(NWEL^O7Zg5e32x{F0!&? zUU-l2*J~DWhOU)cwx!(cN66Gqkg1<zit$TKF@D9CsJ~{d>TlRO^|$Oy^>=Km`g<3n zA9rmql1?@gLsiOqk1E&Epn6~ByQ`Gzk0|fQ@&_>8s#0#i3wzMq=okbyIio<i^MdLh z**NttY`Xea<neD9b^nRO;9oAD9<zChN}iVdzxLh(N{XU;|Gzz{XL?f4^enJQT=E8T zTyhS}E@2T^at@M2$vFuk$$*L&Q4mlG3NA@S5k<v-C?-r`LNNkH6n;;K>FwI>o|#2_ z|L1?s_w_wHMNd!H=ec#O>UMQiwe_H<#I0xUCnWA(a|glyeJ&d%x$IQY<)l=Xi|V_0 zCgZ0qhMX)izAx^L%>5>TnG%h<1i<(J;|EL-Fe24+g{YY;Lakg$)XBw0$@zxKVJ^iY zx;t4khz}@!1+RG!ka9Ub6kZ|E=R^VltD4#%aStn)j}$2?C5m#D16&2la8;y+t`vY( zqAsp#)XP<!f!kwfGwjM5`x>eXZPZ*y&sxuLQ;`gnO65u?ud60ST(zj2s}5Cn)nzi; zt7o)CvqG<UR*2TLN43sSML}Y-GK&j|EfTj?VS3Cwlyo(K5gNe=O<{y))Y8?QI=fm> zuB#=(w$Cun-le$Cs6^QwS6Tt?351&4<YAKS61O9t+bIt<KbfIIKBX?Tk+@y>TA|%- zewX8F1KM_=?MMw=ols<*;Y(ephbxQvySmayS2jbvU#DKKIeZV3X6osy3D_Nu-;+wY zuB8gD-jwF*1IO<R$Iqh<u71?r)t>=8paU+_W-jNL0OqR|aq<CfPaZ<-y)p`Nm$-e( zygY7y^h>+?rNkXD4^do$K{ph1BdDrtB-M6}h8f3DTi001cCnLQpV7%qY6ZR{u>#kd z&S%UbEs1;9kbcgPK4?fkZ;0^1>*d+21!2q!hVu>;`n`FGqBf5c;5n0Ms%r+#b<L(n zUGr(XYXKwqSzYpDT2waAI&yu{ko93h`Xwefec9}e;E3V$R}AS_<0x2%!dp+xT^p#Y z>k%l~3?*9_1<&aUHfahbTR*yzxYtZ5)qft9|M|KR`V9l<n}+mTv4djQHbCz{N3av- z-wls@8coa|8spke*Siid@CSAH545Gbx5o82h&U#3Z)-zJ$K(L{0CzkuynYY&PELlB zoQz~X_pXvYkF*?K$p4VI6Y4kevvT}ZkG-cJgB9La!;ue6A5<yh%&rsA^ggA#K0#0W z8MSbIPFb!~)Z29$4bc}g&h;hDbbUn&U0>5u*Eh7rb%xRVysr0%R#^91yW58blYdlD zu}&BcpR~9|3U8FSj|+-2ddeq;(?2z&KZ|p(qx#}m6zdP@Du1JauHWf)*F{?IVjqgX zpvya<$=g(1c@p<|G4!Q}H%Z*7*g{ViL#Wz4UM3&U(Y3rlgLp5E=6!S@FVaRn#E3nl zi#@1`U1Kfw3j@TLhV)lPpy=JLrcFtmGFC|ARlc^mij^!r39?F3TfQ7+^W~`zUxAkL zm1#9!g^~55VYagRC}c6)o@7bfH--k~j3MCvRu1^J^modX8l|MpDp9|dNOnY168F8K zqDkBj^1m{o|N7B<3XU>mg|7}NsZ@ebqZGb2)#MvcQ@$y+<C{TRb4Y7V1Nb&Hl5b1b z@$KkFzCF$0JJ2G&BO~>&E;R@Juv~&EYLxer66K*6TB%_EoGr(8Iq4>&pnMnd@>wMD zU8y9WO=b8Ts>pX^a(PM5WrG&_Pmpub3-uTCKJ%O*ecq71p!teIi2MCt<r~N>{njK6 zp#hN3o7}4?jWgeqI`Vnco$p7ve1GcC52PXdAR56Brtv)cwEAToe5nRLhynl29Q^kL zz$Fd`{!ol-Myf>4{BV$7M?Ls)sEXrhAkRLsKEkYrk?C$^=>9aP`^$n(3qPz^k0peB zJ^XG4jpAp*?`F{r{A>pK6=uGjj6CJv81!Pn>Dw*s{I?1n-fqb}53SrX8pGdA<M`#M zE4MJruj<T?YRrqS4l~e9z1>QSse-UvYxz|)jbBGI`Fm&~&n~WiO{f1$qt7pH-TTKv zNetrRR8<twC5gLS$gh;IOcg8hC;9uKcni(vx1vpZjBeqdpf&t9x`*FR_wzew6aOSV z#y>^d_+9igznihhQGKYkrnbiO>%tF#Y@|2oQA63d0$DbjA#E>?Mbs`XCqwQ+4k^9& zyBUV=&6tT2<||vL=mSGWxD41Q$NJ|={_L*{#c})|68L@SK@gMjhu}Le(gOZ4J-{EK z&HSshi+_#w@<-_)|2lolzeQj1#~3TVZtyE-bYr5zb9^P6L;340;3~ZFN20Tq_fSWe z?VL6hI645Xq|}ibEomGAx48@?ydmw@jAPorDuZtP3983`gg*5o4dp+hvHa&~7f#VU z{xmJ;zkqeVp=WtEvVBAMt45kdF8*&VBH27<Cb0=tCNVq&u=xyWe+;vk{WcKaoIk*v z=U~qBFz4?u=N~kM{}a{sFI3%&^t0PRf4QBEIp5SB>|@QGTdd6){7=j&nj0?M!jOL` zmUboHa0^t=9i*mik%qb>G}fI&Q`{x!es^iw>}Ds1zNNcRs;2ozYt3Q95y_B_{C`y0 zj6AU_o{=-Q*SITCmb)6|x~tPncRDR}XV40FO}fini#E7x(--cB^n;sSs&q_$_}fH# z`1`7v1(TG&B@9PO8d~0EW)_rer3~q0L%MXKpE5tX=HC>7WGfS0psLR2!;!MuiZsbq zP8pt)Q|0BcJLTI7+SYXPF<V8$FZg60zd#5l|Abe*PBDBfKgpH9{#*Xqt$bZcPU1q9 z<!R7b%B_|?QcgYPGCDyOgY>F~bTvb|x*=V|kWMXR$LLewBF-_0O2Rps(Moq0TI<fD z{qAn`qPsi2?(RV++&$?tcP@SB?nUR_*U}|-Z;p5O;ll2|Tv>M>SJmB*tK;s^HFFQ( zI=BaN-Q9z@e(u5C2=@@~IrkXu757-iq24wO(yPyWqLbFU9<Zh5rKat%r58-^L#;7B z!^=>g;ThId$i1;Gqfhu_gf+pU1F7!u<aSS>uzM+$ao<c;-OJH-+(OOVE2yn|C3SVL zV&IPJaAy$OIn}`<+`idr$`RKATdll3w%YPwqQucYTOB*~Ne@q!I9oJ*UgGR(8bR2a zbU6gG)y>H;hF}M5^>C5;YCC|7G*Bi^E7yo7?P^lKgfe?tvNhDNQJ}8_g`n?N^15#) z$$bZvcdw;1_np+peHXQK-wl21P}|p2clW)N=f00dxbLS)?gwa=`$1aleu$R2H_#gQ z!;JoStn@d!a{Z03g8n9!`Zq!UX6WAn{ac~`G3b9B`k#RQZP331`gcPAlhFSZ^zVZH z-O&Fu^yfqW9!CGWhDpon9blHKKU0mkyBx4J%}d>5Yo?a09!#qzH8(q{g-OJ%y5<W& zf02^ihpDXlC92{+LbctmPz(2~)W-c9b#b$gf=?JW^-_zbtJx|gWkpX~c%EcysZLH) zwyKgBEiII6t<;pV4~%4MZMtKM+EKhsg8Mi{-0y(zU8>|hLFw-IsG<9PYVQ63d>_HI zCmFu?biO+@zT6mmMV3;@#BB_C(T#>ATU%31Wul||b6}nV=4oJlK`HJp;Q?P!1NYac z;ond@_ZjN!{*HRO&oZd*>!^o-Dn|v%Qz*&SE+N)5D^}B)y0-SrOx;eDP2KgGx@|~= zil5;Kzfh9<9F=yThp{if*#E%TmtgG6)E>Ul$z!8zkBho{9Msd}q&yE#gFJ2;>G3ei zJ}@j4R12YJ{6c`9@P~y<gDry&)@9%ckl+bY#3NF&Cy7!#B`D2PlInX(QBzMcwe^$+ zeHrTEDa(+4sFVJ!Z9%cyEUxHiNOv-%J6~!4-$m*Fk;qcI{b<4!P4IF9v?kgcBjwUl zykd&3%FY$$>-anspt~wH^Hif@o-`WgNvA2E44UhyNlQJo=vGf{TJNbt8$ESttEV3A z^3-Q+@{w+n&04fN$;>9%%HNzqaZsVXLnK=_r3evFq^nVk8k`vZCE2>G4hsi$n63Tv zG^XmF=G55Jl3ICMQI4lI4e+#~p`Nxh+S8sUdO9%pC-q>vind(ur9|=NWe9t1J*-q{ z%u2acR=NZwQetk^dm6IHHKdJMUu#JBjz-Jj7AXB_wUw8s+4^R>l+_GQZTT@rTWA~Y zwDmFeJf5yFP7g}=^rTvzTx#jLmO6TRqlWfD?d*&4&qFy6r!Ah5w9PY?c6vtBQ=T!j z&oiE$^-Q3{o{5a{J~ljKw%pi8vgIXK-rb@l+|ROvm0Ky#R4U_{2@$j5xO1qDXD&p{ zLsPSWdU+NyfS(lE_o=@bV1MQBfOyV1kZoTE#lgG@w!Q_9xDt-I3hl{iAg-ZY&#lzY z!>)1pRCmHP>QZU0sTt;ALwblIJ=BmMW`5UVn2Bi{VRnjz<dK>uk5W82nsCaIti+Yj ze0sEeFRY}-s59{71-FuItae{ATC!cICC5m%acY$wuha-7;WXBW2?o%KhV&#u+Aycl zHd(6?xZ5ex)GHm8=Pop78)%8=5nAclNOyWR(F2}G;o_U&+FRh(Tj_}BF*@#foIde9 zL0@~e(NCW3TpiCYF4Mz~8GgoWI4yTnhjnhl#-zr9fg6>-Q_Ks+Fy+!VEnZ1X*J{d) z1Gbsy^=C=k_C2=Ql5I{tcW3l4LR{Ni<>)-aL@wKWLp}@g^%21$_EO#UAocOQg0}KC zn&df(F5q>#&+{hj_Z*`aJ#RDi_*}O~zBY!sRL^svxjhyse;1qE!!R4uc2jJ7g#Xs+ zqGVgDRK{i2JL!4eg`!WO=rgqbpVM^DDVpOsO*eViJ$p`FshXS3)hsupt#{ruSF=KG zTFkcf@_Y?7KS9keP;(Ay&O^-wsA1Q|oYvLs)zmDBr)H({ca^!C)d?w32F%t(SAyAY z%~v<wwDh$<C<}pmf5Aq>1Urov95hXE(k#J6iv@Q6-WSa7GqRpJ|65<P(4jp26a?xc zNHkhVqKQIDx<M#KvxQ`a|4W^JtQO=pQ18E#$(Y&<tZdvp9!if+yE-XP#FB5ra>6H- zyo(x8C_`SMEJ;E+x<)8ZRfGzZDx^?Np%T>>Dl-6I=>YRJ19pr7AU~(E-L8?S=iPzx zbRx;NwkVPke+kuqR2@h)fRsv=g*0j?q*GI&Cbbf3Q3rut8}qe3R98Zsrp9eIKAE!J zX)GIsH2Te5#%~NyrkS7LZ762reAe@pm%Yd8EUPTm8?w09^0N0Oa;f_bmwLdEe(>sL z@lY`@8~xtu;svGOo03ra^{AZCkQxY$C{t)mErm>)Dzv0^LMysoXiX0bZRvHPBYh!s zqBBBg`a#IzY6(5K4nj{ZOUUKA3)gZ>g?`*4LVs?HFo4@83}n3J8{Jz*t8-1b%Z$1W zMoP<P*u`_9hYePG#L7A1=T&UK+GxmkQ}Oaj$P*s@kFUSkaQ!V;npbh%ZwS>BMo<@F zBy|%;Q7>T(Jt$11L&79FB3uvGyMglx)43F323Jj($)yXkxpBfGZjrE<TPEDZtrV7V z?+dHA3&LvdPhkyrNw}49zcYHA-d}4&FEWz1CMM1HSl%An<JoBkY)|ANvfH-Dwp|_$ zPS3aP$kDIGY)~3)Ynj}b-LBN3PV)=vzj%thrjlX7g(cgrSXWWbmTbF=w);6G!Sr{) z^mn73Uxz;Z9_lWvr!m64=nwCwmBNFxR(Oau3LEGd;bD3~cm&0<iH-}K=_6qaeJ5<C zpM=Ngg77%~B|O2H{9C=-nyHz*v&#DPmDyLa<rfv81XjWhsvzv9>cZ3181`u{?4dTo zUg{+5V}QQ<_dt7CpuJW=&j9EJ038C*ivT(dpqBvjG6QthFg?i`9X^wR_Qlu&8j<FH z`L-*zsSa3$9j}7yO{yWhMRkN@)LM8O{rYi~`#aP_U>D|muUDB01xw-#PW(*qS{}m; zYTI*(v_c1qRFdLeDq1b#bsB|+)r9v^A5Kzl;bX+NpU@EDGnyxyq7A}ndQ|v=9v8l% zeBm2<LpXza@GZSBe8<@B2fbAHYts)W#@va)_I#0@7?itmCZR5=R%7!Qj9*H&LzaUX z%Ek=Bj|g&qrm*k}l@!iVCE+}!3m4GO|4J={-{6zKQ%~U!DE$jcFVZOCZ<-*mOMiYe zY!|Q2ah@An(Tl1g+u`s@efGa{uX`9e^eO+^5!(xe&#}E^I7hO*Y$;HgO5}w`uZ_Z9 zJC*c0sFK%3^}RfG@Vcq5*F)ENy)?<|qp4m$&G7~pVLugD*pdIKun>ev5Eg;3BnT@B zVWl7}8Ny0KSQ!W_3t{CTtUM#^XXcJr7B)?N<nW5Rg5UP4Jn0;tuW4fwM-7wd)qm=f z>C@#K3MC=g#xP@`uN&&&8wFjHsUl_Y-kU;RZzYnvmFXI9bxQTtpeEi_YU53#F5Yw+ z<E=>(y|tmJ4x{E5W;vX!rd{k}dQ&T=w+`5jp_P1FsVB!{k3M@F!`hj!c2iip8LZuk z>UdjILvI^u=50%Dz3le+=X9p)G^U2Jnck6^Vo@mVv$rECI)kDMD6&A&ovM3#P)%=7 zYT(Uf2+kMRD(`4kIjZfdm5^0>gQqWe^1#y%JcD4B!LZ5@SY;@z!fsP~p}0)%UJ27k zFpUP&7%+_m(*!V01k)riT@R+o4AZa7J|8kuOADq#O9^c!)FOK?4$c(dOasnz;LM;3 z-kFr{odcw~)W|!JT6pI(IKLIwao$hNaTbAM2`Fv?#Znk$B^+lJ9A`BgXAMK}dvOUq zNQ~fi5Ud5koglai1owg9eh@qWf(IFbKMb$FP^YceQ~T==wV9^MWSKN=&V>^5$eo_t zV`odYj|%tNYW5GKZFv-J%VxAKTd1;kE7kBmP8r^vRM-0?ll`BDS<Gs)KOnXNPO6hW zcQXUHYD@XC#O+d?_LHb}!Y#BnRavxwyJ4n$m}w8pv=?UD56?Y7t-Q}rd+)Q9<$aEN zc@I*5@AC}vU(Ajia;#Y2$gE&~sxH4kWwL#SX76)l3{P3?3O2J5N$-nbd5KDRUxmG1 zqiWuxu-EHU&-(_G_eDMLJGI_qsM$k~Q-<_uW2j{|C|)M|L?%nI-WPFv>lpm#ebl87 z(fxfyIo^|$>;0JWyr0q#FT2S5@5Erg{1>oa#eqEy*zW=RBVd05?9YJx1+eD<dx3%d zCo$Ns|3lc{0sA*#F9G&4<sk0J^>LKvv(pftgMq!I!#<(G&M<@h#*jXvr<oz#*qe$L z)$m<x4L+XQ`vP>WPo#mq5RLSO={lc8*ZY!ax{qD6eYyA=&YElZzL*+*h@&AH8Y)0T z3N%!LhRV=T1sbYB1GBUn_hJb>yNwI@WAOmfD8*Nc>iX(Xrmrrw@ztY_zWS8yYe>C( z%p^`HXSf4W0T-D8{uJNHKNri$XpVo8w-1%ooQvIQ`!Zqf)-ZQln7bX!-JT}-I?xnf zN1Em9ObdNo7)7?Lrs(_?E4mOzQ8pCyf}-9~)CY?CLQx(R^@E}TP{fSKI_+1bodsCb z+4uhkkPhi?K}tYcx`*xo1SJL-x|sn<X^@asLAn`A6hx3v0hR7j36Ty#1Vr-xargh- zU3S5B`Ca^sAD)Lfulqjt+<VTwGtcuW=clM;ZY}MS&$bkV$AsNo$+o2Be02*Fid~G= z#ez|kw_C7TS{FVQWybk*icIKsD@RJZwg8&FwQRRzacYQeYP4=@gl=k_E|lCuJfl8$ z@LkW!#fKbwgSnwc^>T=QwxKj6{E2rbMNM78Z5!lZ;~aho?%MszR*|N*p_ba<@I8b6 z>r?ji{k7rqyUqm<{c8K|r`F&R>jcK@H`HkSy!bmz>NjhvA2*1b8XZ|y>?9T#uXqI= zMx&ZWpau}~>|LFh_Pr2RpKxzixZiy$uljXu>gP>9hlz}aj~FT`<HPFnb7QQRU6>|B zl^!RtJ|v#}POp^Ih^DcVG}QWyv}QxL+C>ER{Q(7)=tMYUsA2Ax1XV%j1&cD)>h}a= zYu-#pp^NV8Rh<<HJINE?p$hGvbv0|n=LXk$&^)Dh5pfe4F5i?rU&4np!VZHucbf|L zngoX4f8*Z%>aP^yZ(|o4=Z#%3Xo<ekDE3H-YJ`DehwVis+A8{sBb>1*(7w3&vAH?A zb$AAzxJnp)t8sym-eb(KDr$FpIP)zc$Q)JL2)M>RqU}V+WaOLQzuIPyvCaI5R|mPy zKm3iPX2V0U)g_N8Ks<I^+%`AM=+&n!<B#_bE`Cun`m{d*dAVKyX}-7{FpU|=aG?q7 zfN-M)uPM%Gl4pv)+we<Lxl-w{4wfL+PWIE9YZMa}ALw=U9;a_zXiM%<5op}kHCDY% zJe!=md}M`O;nhezawyJd#zSo14@-83hcrucZy08KA4SDnY35mh&5#+D>Kl!=QijGE zWx(nb9h9G``2^S0$AqcY^daS7`1W&JMW#n-LsMqa^Lq}1a<}P>=PT7p54I^0C?*pq zPRF}#m+|u(9n*QbO*PjBqLx+T*or0W16GBnrs8!EQrWAm*{kQ1Ke?!k?%(K#+;&J? zbCHieaH3L?H5uU07$`ih$;T@d;CyQXfvEDe=~nYAO--TXK9_+TM)rg+IulN0IDh+= z{rpgJDd0Ab)0P0usJNoZ?xhi4zvR^vyrqsWF~GN=%k!P=SiX&Ia&oqt3TdWp=cFB> z*a~3iU>=(<e`b*LKa{u2zD<e$?PAf&!6nMA_`65>;ZnnR6OXQRm`cjReev5fky5WX zn3=gXsbaz-zYy{fF<+K#-5%<dP7VL=lHGqqV;6iIN8^hYEHpHA-0E?>=y4b!V)V}1 zrb6D#Vk*8QZnh24)|K!~R>7g$B-CFEY*FsZc6JwQcT!2}TA=GKO_9e)W)LM3DZN$2 zs>7H292j3i=+1^S&qLZZ!Ttcj{=k<p+-Ph)hP2szs9~l<hf8zr8N=>HwA+_9L{N@( zAa}cqX>VwYKFxKPc%9A08g9DZv0T$g5MnAquqT{->FM@5#@?VzFXkRS@TjLfscZq7 zTViS~;il_2{VM{C_%qqS)1%~Nr17?Zr#kWX#eojVvYT<>*1mo=?X7(@res@Sx4tRR zo?CV^?iPv6?Td@+XuzYKfaf*EQEutp$q{MdT-2D!zKyyyD057_XohkKJS_=rOF#yA zT2j}b-%S>#tu8JFmyT?a=#T({#b&fat?Xm;t!NqG!AHlSL*l+v{LdK$(J>_RsW~Dd z`8QhST}mcz3CH?>qM9zTexbyTin2_IrE4IQPaj0MjsFN`Pe^Q<0N>T8;qoJWx781O zIF?~D#4wDC9G;-ZLju}&F)nlrM#`X5(-bQwp>havYu`!G0pE9n&{P`{X@MVFboPA! zo4i3{>xSFZ7fX&XA#Py|B;yyCfo)LrnYif&?B$HPml=vR@=y_sr99nOLwR*Ud)3$a z0-do1tyu02v-XUra(1d)yua2$Zq&at#+OlqU2q{yZ$d`Rp4e8g8?C&=DH}h2ytw|R z#pFa!yfZ`Z03BrgGbQFDv<7k9$qfAUo**x;5HGI?F9DYduX`enQp+(tXq-5<*R5^W z{aED<@92I*MbOV-U}O(r4#dA;Og=DABQ$^7<!;bd@;=GLDDkF2qwi|2M4JB2{9~`G zcTpTy!yAI!STJ7ev0M%6xG;wDKFWZim;a_j=jKe3+ZT>!yO5iH)I3rdb+@7dzF@y= zdss}djx@X3gfP4pSg@pr9N3Dz`iiUElNJ~FK8#1g7YS8@t|HYS^kkyz$~9=w#ct+& zXgVqp4~k{2kc8uRWR-Vl)uIZruM<Swkf}l?<&v$6TE1YAmw8odHzTE-y`ELIe<E?l zQ~LvU)N>g(5%!Uw8G7w9%(g~6MY4?C+NTJ8B$eXJuDD0zGYD8Jcp7E49;Hr7eGWBF zyX^%SNi^0vYoOoj6lXAD{ZPM_J{;bAtvlslW`On+*P;Q~Oae2cM8%svb7XU#TKJd? z?n^ipTwjaN{hGj@VN69dh^^mPLa_zyxvihMhz5a##uL=8{q*$VvZzOf!HRD+s;<29 zzdA2)b^Zzas|D>)Or6l)JS;OAB6<sUBn`Du3iFMEXCpGub?)Z+xawpLt?^+9!(3a0 zs>NfA;-<^y$W&8|u~Lw4tSaVR-MJSlSKreNv2R?i!D&!jLw!^15NPyvz6?sKWr*^= zB+$DJJ$d!8?5QSJI%pJgdXMlXL(mG#GbxNwwjsd{4j(paj9>wMo4uRSm?Np)7RRM) zcXlSD*uYvz-yT$5>}y`lD;r5(Mbn_T$w^{{R+O_s^K7Zsb#Q&U(B@;|REx&#z=uc5 zdT7%9!7qBNB{p!&3DWbPqb*QP*crh17VYn~nXyOT)+WCX{3~%M4AO|t1Iy9~;lC?! zicftqtzL@+hme$m=gN>e@oX;IjC_j)v)OT+=!eNfc-k4}@o5(n!<j?IV@wK*EyjgX zJ>^v|Q6|Sjv8}EXQ{Btue`)oWx7!Lb$ayKr;1U=NOVB~Lf)G&^Fy^VgjWkM{FDtMa zQhHy<(tRZlZHH+S^r>%bTwmU^<SkEZ2j(CL>jT-6muc#rHRW)8fqvL{^o141yuG)@ zC~%?B3UJ@>gZARPDHYH#IR1S^Y-EOsp4BMocui=9LEkWS{kyB<!^2N#a+i?h)*}4( zd~+-L+V$>i2CpU9u+5HB5kG&y@ub-J5!Wyd|BWv3m8I`Z<%oM;X+k=AcuW0;gb%}| z)v7TkY#8zcaTEQ^5F*qK<cLOwISfqQ=4nQ1dWBtTS~-DWc{@8-%5p4%q8eFG+S((1 zkquPJTYPv87ciQzF-&pLcte6*tT&yq7oHnD{5Yo8{Y^~L?9fPWh<&MEV@pXrJkl|} ziA`ruYX8>Vbl)`+oQV(UhJj8(V<Xxn)8!DpTQmjeE=4{s#f!aNxoZd}RWd@nS^`!m zN5YTO^kFf&YCCtZA5G$pV7}O6yv~5Sg7HX79X~iO5OL|cNDxBc`uM^^ES_xB-qSnt zVMZ{#wYg@ll>5i`I=LNHJ74+JYQIOR2|;3b>8?#DL8Ny{g>XMxFjB7&meycKA9mUI z=3lFQxXFXJnI6Iu_3fj;vft>9%I5_0d357ih>%`w>kT7&62H5TgE32dH@rJ=n_g%O zt2oZuKW6fmPrs^Q##up3v)mb5r349%(D5)UAb*)RB(*CxcVQ~K>7|IB`3CpUj3wM8 zK6aTuTB7>8dAL+td?t0CH^2Y#_`2DWH-(Q>s8>MDy+sn+T~h9T8@T+2M>V*}Hef?A zuc$<yOOV@>%gU3tSZvwQbx6Q<$fY00Kf++~igC_*KhEKc+4nKnQ*`JxFrP9%(K&3t ztnS(NApFZ#YCBZ@Z@$p#%j%`eerkWD$+|0G-h(!eY94^z<pN>d#oViJCL%mUmp4%$ z*}5oKtyZkEN(l4dYUzq`dSGM_PUJL8mcbImqe||LWT`JnTg)+L{`y$M2Djzby)>5_ zLQ~^aEpq#`l0F%E;L1X1?98QH26kp`IT>s;#aui-x!6{g4pKF3nktr%AzdY(+7}D3 z{JL<1>n6(#{wuh~mhDo!^(dMC0rktRb1eJ8!66;EOsijKFSB+(<IVJkn%eukrr*z1 zFY-(C^fH&I?DM>0VYkSED>+x3d_9vhl8oJ?OnJMF)SlZQx5on3K~$>EP(_VTSUN~q zg`q*NXP5Q>{Iv}ZcHk-%4{K`^YPK@7u)7^9$1KN0loKDRt=tuS`25w;_z<Kk=PC1( z_QoeQWP=)QHpcetLnP{>!6hOO_5w?IA8fuDx~P8mQZNu|Z`oE|wyQ33gC8Gb@ak23 z%t5THu@?r}f8Pr8(b$W<UseY;+fAH<n=|}Oh-fRboTB8$)YVe;YblYkv=@6+rW@$f zlU{nGU30mxK)O2x=^!rB5pfecaKUJKU!mM+>@ae_OgMk^W_J^dykRDkJ@y9oK85~@ zBa(wB`=%S;Hp%@y*DsgT7<meoX84WSC)L&3=BjlY!aftG)?OETzhYeb+UHupLni<I z6o**nB3SdKofuO$q1F#5d|t9$6N2hDmGatr8Eqvsh{l;(2<ijx3!-#(Unpx7LsiF7 zBY4%rnfp2Bu+{7XNGDEi$RN@Ok9F(X1<9ZhXPR#E+Pq}XzU~=K@J%I?4^WK{sse6a zR0H7}+N&!S&Y>P!t5`}O!c6TM@X51sbY`9is`%Ztj>5Fd+?C)aGRr1o7S|r*$SE0% zSt#etf8%JQNMiDCe&jZVy0&SF1WuAXd3%6M;eqfy`@$$wxjT(u{I<NstjT<$nH%g? zmhik?;cmjXyw*u5DMEAg<E(#pHI#&MAMIX2Tj;<JCTm5|J7J0Z;X-^joOwyot~W!9 z2gyE>Svt4Bcqof1TDA?c=krbnn(_13Q--$<&->KByD9A_l(w>{YyKSSOSTWrgLjS` z&{WS)<p@bfj~w_`&r4?u9TSy**Rt)t4R$!f)gbMaB@lo8prF%Rizcg1l1UW(Tk(!4 z=IX=Qmk*V=1xrf04VLj}a>r_4>mWnl%(!Upu_Yg&7f|GoLaTN!3X$;YV1D68T>QAh z*V?}sAL5K#MdJG0m~7J0ux5i^MA?Tq;T3LOJI!Vy<))7NTdfp1lnyNP5*_9IksLx; z*egLkmi}t((1au>GBHQBhK;f?70)NNvBeFnFK<vcj0V=?-RcakrM=Y|Qj2<vOSe`V zXB)ff;*LidMx2H>zN1+GC4-PRIY>q%N-l)3Ac&n#feOL~NlFW~=OdkfM-|l^zIkmQ zTOeHNg=stMw<<nd%Lz^xK#&x!xGvRy9Ke5|we0dCaaGIC3p5<%%u0k*`>ZXQD2HDH zDJDw67b-;NT!x4ztEA=>4)F}dxXX2y*c78n)C134smbNb8HsuDx&DFvJ32dIE^9*_ zJ}~|j@A`L(>jvQuk*UeP;-FegS2mCrhARb<ydyZ}x$dC0a1G8JsGbIakFa6%U5uxw z{*sYlt#LdU4sT*=Tu=q8E*OQ!>8y+3vIyXXJsX7&Dcc3h)v;$cvBw_?ata1s4#ODe z>SHvfrB*MMlVAMYr~QtQ8XOlMK6sZ<Jn)@ft)f6VL9#Bceb!A(mi>TIFX}LGOG{;* zxh-u9UaU<;YN?rCfK6_L$GW`EKD8;rMmqbz|FX3b_2C3c%X+5J5i{FfG+t?7u)M;T z82-xF!r*ac{h6N5L7Q2r2U?!2UlsSK`&f|lX>zghgVT#oY;|l=%JH}rzBWdVgpm)1 z<gms}n$}O6rVSbzI_;)EmW(~j{y-<0Ro?yV{wnVSN9jrl9jx*|4MQCkxVQ;PeMm>d z$g8Yz1Y~sCo11Zau4*E>>EUodai2Jr$m7bTCp42J_R{GLUkm(l5VN@DN{2r2oZ<Aj zLwy*_l<y*UlKmy7#F;AY&$u=^PKyyoIN&~`M;j$@UAr)vH2n^r$McIGLxw}+YoV^t z6*3Q=?{l#`-u<nm;DJ%Rd?jubeV2E*1BZ-~SOW{Pd#J;>bh*|!6db%;{P_5E(8&GE z3I{$_cktI$YnrJdc7+I=31(_#{b*a)19wdbvp`=k8IR(bdITgOdWX{8yT;!&6A#P% ze0XmJ@Z}voXgChHy8V8cE;C0<1<U^~r)yM4n5LfUBCb_$c*7yyJ`8z-RZxhp&uv^L zU83?cUHcIaUR7#?J6C+~a8JT28_rJeOuQQmS?H2m`Qa$6DG0si1?rUUQlAl$b`M+V z3nr3iFTp-6pl~n8tZydM^3mSPb*`FWh&)bxQ*L9YuR0^SQ`<nf50PLb9klk_T*0+r z{>?gj-@4^6jc;5&EmP(d(O6=<I+cAe>X^cJZ?DNreO>WJWLbSS5O{iVMsnQM!Apc8 zN+XkKbG5?Ro1lM?yO#r8KUbGNv3X0WRzhToTMK??S97)vXLrT(Q=F10W90bm3jVmw zbV~$7WWa$O9=jPv$`i%!tMTrPW$E1QqtS22BURj`EU>?OvCd7UBsQy(-<WZ+n+tVF zCh2&~mYkx+&X%QZT6Z0NZkcSZw1^#(lf$sGEWec9%pj$?tdO?2!p}%vvyjtJQ?DYO z$4ped$z9`nM@_Pa1DABgrQ>H6?%A1}pZ1U)7@OnxDW77KNobxw=V%Pt+)Kr)@@YD> z>NntVEJ}V9y&Nu?Ohx|e`$teM%M~|=SB|ri+PtG`_HmtSB3z?!$CWpai{_9{GxwL0 zMZP3?8Qu5#lC-c8Is9#0x=IK9SZ#9fVpXJ5!~rr=t}2rFeVE!SG}RWgj#p?MFVS?T zQHJaEKT>~a{0MQjycX*#k=`Ro)-$~mHf}@~LR`9*b(Cdzu--89<N>go@2HpRs3+>E z=j*7a>Zr%J7Z(@uc?5mqgsAm>(nz<O^@hW6E*53;DJW0z{+@)tzjNj#2~m+=Dygi8 z3yIH2>bx6T8}C0{xc7{>4(FI7r8!;nHs*#G#%;q5o54j_5o(6dDuXRuJ=Q%;^=2c( z2Lslx8C=+CL(B|zkMEmt-aB9}Wc6)H^nNr8y6(<+NK7x+9H!)U^Om4xdrm!@M85Z{ zZR>jn{F!VG1xA}(UXDuIFPaTrn9P3|4e~{OR*Ct|iki470UTb`pMO>SzVCycM%ho9 zeu%pMA#(KN%jCOP0(;SSQ3HANb3V2SayBGaT;#QU5kYgWt8}_B@AaLK8xTpVEW?cn zv7^-MyS1R(WE(E%M^44wUb*uV@`JBdb6bhRhf_F@<OB|$?Tgs$((?MureQ94zUa&- zzRa_GEl%~5!E%h+Y)TZ{D6`0NXznNR;V+W&a-SpOBN%6iu*R|WU2;o4mRB=&@#xT| zK8SyEToS)-i8GGDB+g_-5xN>4U&Lg^5c&w0T#3qhxx{yP!t(Mg=G=Om+ibC#;>P!+ zrsPGOP*~{taACu7S=TTZr*@qRp0wI<3$OO44X8a?z#Xv&v+!q^;2yhV#$*9WBVkh( zp?5XQO7`ZE!ukuz#O`SneQu<E*ra`!?AaIlA;5Q#5I7oS;<YyF78=9Db5fN)_Y_Tz zai(oR0p!!b^L>>9vmzq+e0xRTEKgV3X2PfssZ24QkA-B9bz9kwQX**~l_Y8MhlOGg zA`_(ip{7s^MTz1rF#^l1(3!Yj@J`<M#Mpbv66FaWVwzT>D%Zaq8&5GHr6wU+vju6o z@y5!~Wk!`gil8QzMJ{arQ5iET@YJ;yG}ZgtXdTj@L?_#9lWhhD*|(nZB_8skA6qmX zu7?vI#xY+4zMz{YQJ~BLF+|Fx>gq4E>KDoCa>gbO*rq3=sH|$dy=C&6*y&N@{Zzaa zlMI~pJ}B>-;`hX;cGyAHp)$ty>TCJx%U6VoZkC|82+Lkn;4Qv9zmxVz^lkh+F`S9@ zn!d^6vGc>DH7C9B*++IRtb@dfEfoee%p$rS8yQ2?`sI>HV>U=lPqDqpGw}l2&nP7{ zwMNT5l1%tBJIWzcW)EzycNY>^6jEdIVX6>BNJOU6Pjb7llA#t2Qx*#1W%36z4=8hT z#TG^lP$HSCo|Ii)s*4@Oz^&1U?q2Y570|z6_zLS&NrNEKxTYNI19kiY8uJ($s?Zfg zs7Q5G9VgKRQ>u=z+iC>0oAp}l9}{SUAD2HCi<V$(X$z-)CkL7<W`8@($ZQzmKCx9d z-@qT;pM%#&PLwaPoKz^=hliD>xLq(lq?;yBS5POYofbiEBh{TmK44)-RGvJxotA`1 z2oV$)QCG;<BIj@uSMMslqMzc7(aoK0q)0VjZ_ik@BH+^J(Rf2(ZCb&7yR&W?JS1G$ zacvrFR&?iDa9AvB8nv2Jt_$X*@$`fuBL8{Go$9+{D&Mrd>?BRNCV<0SDU5HgnKj_w zLSrG6h6|rOA8c}Hy(z$aS&QNq7wB?nS6IivP5`+~4jC@Tdrz9Nrr_2fm>kHF+ENkR zvMK$Y*@lc#%8^su2+Agj0)5Zq$QCMz4b^(N@!WiOLh!mz+GW-68zYh%BmNsBhZ`ek zF=Hi$mkstVwt+1o{Ru3xBF5wi_nBMi!^iG3?!Y1?QL8FtR!a$eNiEDGu3L}VEeKlk zWP9RLm^tdo?zaewJtlr$XKI5N#Hx<YDPK9jhb2J}w4U27D%+j^ja|)$L8lc{P<=1H zB1tNjCO=8gWbXmFa@N(ELNk~fSjbJ0Jd%q_{=)*H7xhe2=(9@3&kms~Q!*c@mU;bg z-KJze7)9>W&y2w^1>kO8wljNX_-^Q91r~x%(rEj%k9a}*hUUi@t5aX{q>CfA*tV07 zEVON?M@UN6Zm)33q9?+%_AdtV=*40wZC?_$r>)W}#d@xcxYs6eNy$Ao8nR~aHHKNj z`x5FMB3@P{KM2Q6QH*lnvO@3>%PSt;3==DR&A3;j{peVm%ayM8>R*GFIMD5smTZm9 z@L!K>6bi8GTvtH7iTxraUpGM)BATdPbE%-jXqMWZf<r!o8CK$(Pm3n16mhdq)|xD+ zdbsnwWof0%=O;qibT+DjbL{1X#4k&+8aiH-qBbCtiA%ss3ClxQbwi95bW1c?V(S&g z!tgz~M@q;!RW#Q?<>Yt4_DrAZ-#(+~uh4=q<D1iX%HQ+$0ZZ1zAdTzsJ|}Q{*axSl zF%`|b#*ssW2NIDA#(bjPqaM^1<<A`Q=i#wTY)Vv3i|mQ%HRXx05vK$Mrqx7(?xl=k z>wJMLouBI)WqS97M=o`en>=6_?I4?cG^mp)i5jx8#F?y;z@=lwLZdx_GK_X_{SI?4 z`b}QQ2ZxU-jUQ9|r&Ihtrg-Bm%5nAK91{%b^b^BDGMH#^ESU&YIHgPk8vKHc5-OZj zMhOj$hgPqQd5E6<uHKAFumG!ga&P$s6?!(+l}FI9$^g&DA%mlPVw_}R_cB-6uhcyD zYc^1Dq`;A1y%w2)Rh7iJ<AWpw>I4y))mTDtbc-TgPb=!}SoNZu1S&x({-i>%b$`QK zM`P+#c`jxTJ0~l8%gDBRCij{>y>iz(?Y4<|QK*J(1JM+yPS}0UxdRCW5T3^|Nbp#} z3$?AXcXmc89O=L(;_h=`=Eta`X0a=kOdRf9CL~Z(>CX)%Zxe%At<gyJ@zFR8n}!u+ zy~!sITXnkO<4>1M9dw?r%Rcnxt%>`fB$}|V1G$)8Os}9L8Jhb}<_Yt~!I`(0VxATl zq#*a2OCjmqk98$+EM3B?7(%in@2YNJIB=vna1=jq#5{0h;~Y*ZhG_9+cf$KB1^edi zW#44#LjCXxH7Zj_YKN){9Z9xihxGwBXrIwlnsWdJN$-u3@%c$Il{bOpJJ~JUUcKJ8 zxPpxCkzfT=1#G%Pj)eQRnzJxtLQy#pB~xhYR9SR0-4R<f18IgMj7Uy0yZeRvP`r&f z-J@YS7n2(SuOHKy<Q}BW;I*47x#xGN6l?0qH^IM(x4qRtQhKBDb@SO1debBfyLCi0 z$k!!!*_qE?kgq@JP!WidHy#Y$LW>W$FrX!~$Du5ZwzR+~iLSeo@QPb($&z}hdS)DQ zg8?};L+3iwp*HcUxEyS~H}L{RiSE0riR7(8(xE5X8$zV%LBYWPl8D#?nU+h^1JB-S z6}LzW;212T6?OOVv<vw0D!eZ^4EHQ)Vw!jn?`$jP_0A$e5009bm+%oMyqtwjgE#{_ zrqoV^d_8aCMx{E2rf2x`V%`c@D^8E#Zymgzy28`FaFx4-?L3EL-rp(fW31a7mJVHY zMUh#M)XhZXKyE(#T_PmuDcf+aq)N@w_k1z9U<ps-Lr9#I8dA$9k-G0Yi}36XJH-7y ziI>Az1W!!C9OL=wo0o;y_)5@O*=q7tRm#~fl?V;1*vo4q#(1bn^yv2tE0;W>+!kpl zSOC72>sGB$%SSpg7Y-96xMn=Z+OlojNv_`ORUNcO>ohl>k|(0avcMtNXqTn6%^%<4 z1&_BeA|B4Izw7xLL$u@)wn_$j;!tV_8zP5O#V9##D8-(2JG)**6vA6VBc!&h>6GM? z_`dG7cd2z&y;aL?g^xpxt!tqa;~yC}(=ZlfSsA=_i#0mm6wr!(rj*${{?PN@9Hws; zwTa(OKjg-nGO0L;T3XVKloeiB+pQK|cZIhtw2->N-Qez432*3M+6cROGDvxB7@=fM zY_xxRBJTFoa(7kM`MtW|4oh4)hm^;iPj^2(q40i|x7$E|Odr=f`L>)zYJd7bFzn8% ze0A@~cMEcB9!Wdi+K2F=0jZVZtmBK?YM59PHzEukMu9*icThmuYAC3rAW{$(@Y5jL zc?|?K)E_TE!v<aW{pOEX4Mm77w~8j1_oxH(kGICCWNk|TfBNGh{o^e^ZX|*0kGE>b zYN~)0^&mVN;J?H36QU<GfWO5>0fDamc;g@KIdJFVZo><8hC90RdcfW7oNeGRCs#)( z9L6gP2Y$Cez+t*DXDgUH%$>*55$fUbckAgdLyP<{Kp+M@5Qz5=%Rg?O0=%=WBj7G7 zfL&*}p}QUYEaOEHU*(C=Kp-*zaI))hSU)i?@8aa-;;iKEf^b!LfdZXBz3XC+?un=Y zon!=thWkX<k8potUGo<@ZgS{kgN6+Pr2#|6bHa2!{!dJ6L*cgn+U=u;3jIo;+hTxY zL{8X7qxgw!z2Alx^8bgIMb^f~9cBXz^y$7)D}KKZ0w4*%^&`;!Y!p<#4$*`B5k=~D z9`MsqB`=jj9l1cD9n-%LLooF(qfR#+!-4Bt26P?shr9li0Nkm7f7!I6ySt0~kM6^q z&x#}wBI_5u07DQM62TK36Qy6~{5J3`e5Wf>%Sb*rpa)hLWe|w}1mUjAe<Pf3zj`|6 z`WT=<3s7)!yq9hNn|&2$U^-hvEn#O#*^(9+a|ci`VA^S(kizY7Uey1>S^;Kl=WGYJ zb8$XhCbW2WUIv(#0l>TzKf$JPIw$*d&?wXU@?HR70f_u<`Tqmf>iOS5KU={lHe+ZM z0axAxC<1>Fe%yTb`en+`7GT-P8+0B3Kpg<^od9Hc{{-L&b+$o3ZGa@A2T{D`>V8%z zU~maJngZrmf$OAsH{btap8xbgsCq+UF#}8*V%fjvCLaI)VE%ODia3;1_CUYg0N03~ zaE(*?FB!M|5vGcsP)7t5?sBG!I3hS?u>njea4DX^NM)V}qX~6_830U}Hq`Enya-mk zhg(4j0>udZJ;BsxodbEg`x>=1u$lqa5df(j7@ohh?q}zKKwKPP&Jb@`n8)e3c$#Im zGBOaTNcitFWgn=5&MZ^@4CLQNOC5IWtQ7E+z}e4_5d?YwEXOBP0M@{-1GJ&;9%m6o z62f&F0gqt;9+Ucuzd)e*&HqaHH+RW>CDDIM2SgnZawkXU;?6IzoNXLoa_&$|2N?W+ zYx7T>=RaNc>?IK3#z6K_J0VSw6y;Y&=Pca6>69FO{ha~uX(Rv!qWv$;nf#Z)?(R@; z6(HgLn8K$=p4bds%rT(t6@WNdgKSX#GQ!Xu>go!!QgJ@JjH;5L^cex9Yy#U0pqlzi zGo<+yjy&{?`V8~4^3rQSfG8l~Wa$x3|4W8#5zY?34aDgVQrtlZwE_0YfR3MBNXr<1 z$-axT)o&>u>iDx<!(;t%oC3g10vAw3{iTgDp9iDp=mAr)mUo0AJYWh?IP`RJ{rtV^ zAJKstfZ*?IDU9VD)YBoD(&N%*z-&!X_<f)Fr?yhgUx5Hs6BOb2D-$(F!Q3VfaG)s= z3s?Tc0C#ZZUm^V%pwl(5f?a*80jov8>ISUQe`#*2zhW8e;_d`>ly$d3I02i=(-|tt z*+nmjK%i&9{5ToOcQk*6@%z^7>>N<2?l^5i46M$V|DI%!=D%$JXDQ&F4c6ENV2-Z> zj*|R~i$EY-pi2AqEcTm#-vR%&GL9Z>o227{K()Xg?BsZiB7Oz+$2Q<6%RY|v*atpf zBX3Fg_sKCD^q&|%^I7htPq{ik$QlEFlRe=xr>Jv4{>^Xs=CNM}0E`TPJQ-u$F~5S- zgn2pIIRl3-)~Cm?ytO>jeZaO55CSJlX0zB|vH$xqz?tT;Wrmo&0rQ=Jw@xm``f<N* z{(mVSDF07aQHTi4?f@{FfQpm*Fd^W?;ok%K<YC57l8cJ3xo#A2H1(b8?_q44^edqM zDfwB1g^(5Bc?O740K~|gh%kff|IYZg0K*<_NF4%FWgpJp^O#@mPiRhd9+teS5O)~t zr0+CbtYD5TKi1{nYm76N=V7w=T_m6{1oQ6|+UufoQ<b3}wi-~^pMvA#`C9mZV7v)P zKAE<cfGyFPk@9o7KdPvoQvJtz672yhGmyH~PYh{%#kr|~R7GdFyZ2AY%sI|ImVl!( z0Y~eeAj7N9O+Go~Kjr6Vlq}r<f;k0H50n#sX@)iD=KqxVTp%)+5l~wRWab~I+<!Kf z+Vc`mUv-L1N9lC|T^v9xog`H>or9zeb%r^fPU5lLh#CdF2nR;;B*`Aw=lncsPY%|P z8Eaq%^E&GY#Y)|N`Us#L0v<fMy(n!tAL(>O5?6-EO99`J0QK3)11+MrKjFY(9&la= z@N!bsS!#Bmq_vKK-y8wbNeXl4IVk+6YXN8KS~;Ie+3Gq6Mc{NwiH3_~CP10^hnBZJ z=b#9lPC;tZevJeuVgI0X^__zvbUKAC)6~HipoIT}Qa^AGity=_?BGvQw*ZR!KPV4} z&Os45onkW$H-!Tf=YLSVN6taHb~**Eu*YTspkxAbQ|8Yl4Y<<-&e_jg0nVB)@-EKK zFv~L!86aI(+K&L*2Y@Dff|mL2|3W)s0)>`2;Q{jz1pWsO7tnluac9h=>o$ZfTL5kr zz{#Ibr#N*E9I#vemk%|4t30cA0pL6UJedTMAODZQGd$`%G{E&8Ag=#|NILs}B%a|^ zqY9%%HGrrAOoNjp`0e@g5Mh>Q<ic!FygYD_11bTolNm~2@jM`e?ddaanMl`R5fBpw z)NFDmqU8C~IXJ(4>?en?wm$1T)=k_ld=ua}0J=_ArX*|U;Ay%zYa=Wi?JTw3U0h-A zaPQMq9??~2_5;K;AW(qA*}pX3&*z~2o|b?95&x89<u)(iST3M!IvFX=8|Og&sAx{t k_SdgaoIG<d{QBQP|6`y76$`NH0zc7AAdo=-pak^)0LItZ(EtDd literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/ActionScript/AUTHORS b/antlr-3.1.3/runtime/ActionScript/AUTHORS new file mode 100644 index 0000000..aaa0faa --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/AUTHORS @@ -0,0 +1 @@ +George Scott <george dot scott dash antlr at gmail dot com>: Main developer of ActionScript target. diff --git a/antlr-3.1.3/runtime/ActionScript/LICENSE b/antlr-3.1.3/runtime/ActionScript/LICENSE new file mode 100644 index 0000000..1d1d5d6 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/LICENSE @@ -0,0 +1,26 @@ +[The "BSD licence"] +Copyright (c) 2003-2006 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/antlr-3.1.3/runtime/ActionScript/README b/antlr-3.1.3/runtime/ActionScript/README new file mode 100644 index 0000000..d16d6f3 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/README @@ -0,0 +1,66 @@ +1) ABOUT +======== + +This is the ActionScript package 'antlr3', which is required to use parsers created +by the ANTLR3 tool. See <http://www.antlr.org/> for more information about +ANTLR3. + + +2) STATUS +========= + +The ActionScript target for ANTLR3 is considered a solid beta at this point. Most things +should work, but a comprehensive suite of tests has not been built yet, so some areas may +be untested. + +3) DOWNLOAD +=========== + +This runtime is part of the ANTLR distribution. The latest version can be found +at <http://www.antlr.org/download.html>. + +If you are interested in the latest, most bleeding edge version, have a look at +the perforce depot at <http://fisheye2.cenqua.com/browse/antlr>. There are +tarballs ready to download, so you don't have to install the perforce client. + + +4) USAGE +=============== + +Include the antlr3.swc from the lib directory into your flex project. + +5) DOCUMENTATION +================ + +API Documentation is available in the file "antlr3-asdoc.zip" User documentation +(as far as it exists) can be found in the wiki +<http://www.antlr.org/wiki/display/ANTLR3/Antlr3ActionScriptTarget> + + +6) REPORTING BUGS +================= + +Please send bug reports to the ANTLR mailing list +<http://www.antlr.org:8080/mailman/listinfo/antlr-interest> or +<george.scott-antrl@gmail.com>. Direct e-mail is preferable as the antlr-interest +list is not read on a daily basis by the maintainers. + +Existing bugs may appear someday in the bugtracker: +<http://www.antlr.org:8888/browse/ANTLR> + + +7) HACKING +========== + +Only the runtime package can be found here. There are also some StringTemplate +files in 'src/org/antlr/codegen/templates/ActionScript/' and some Java code in +'src/org/antlr/codegen/ActionScriptTarget.java' (of the main ANTLR3 source +distribution). + +The 'project' directory contains everything you need to rebuild the library from source. +It also includes all unit tests. + +Please send patches to <george.scott-antlr@gmail.com>. For larger code contributions you'll +have to sign the "Developer's Certificate of Origin", which can be found on +<http://www.antlr.org/license.html> or use the feedback form at +<http://www.antlr.org/misc/feedback>. diff --git a/antlr-3.1.3/runtime/ActionScript/lib/antlr3.swc b/antlr-3.1.3/runtime/ActionScript/lib/antlr3.swc new file mode 100644 index 0000000000000000000000000000000000000000..69cd780ce2f9d954563e754a86df864ff0039f63 GIT binary patch literal 81262 zcmV)OK(@b7O9KQH00;mG0HvgGIsgCw000000000001E&B0ApcvVQg<_E_iKh?H$>2 z+c@%lzCxw<Sj0sDDkoEpk6qO!nT+l1?%NbCK{j_JQbkg+JzqZ{MadKikl-OoN$o>o z%L33qqtWOa=fA!z7lZF22wmTMKLlsia3H*?KXbju!TaGln!jViUqAeE9zIV8vZ)uo zA3jCVYCIY}KR=&2Gyg%HP5tF)zHq{)k!&?}B4^=0j`;AyFN48(I&>I+kRRh=GSJ{~ zFiO9fFT~5+SLh7JQ+Zgsi<$hy2}@g^kFq14&xI4M1F;=G{rE1N2JR|)HxsMy4M6(c z++B!pJ6N{=`NDk&oWR|Uw)y-zSUJ(t`(gU&EPS31Hx1(TB!C8<vlQ=#%a_sA55#Es z@`vk1BJiBWaIo~{0sw>rLkbz=Os*t!AH4+b<&&8H8LpS_htTH8rWPk)IM|LZ$DfJ$ zz@5cIpT$Fu_l6#Q7-U<nl9m^DXgG*oS8_gHw#oTuGgs}@*O9vjN54J%PfVk4^7pr? zW55t$0CJ?9IzyI)ER3OU=E=z8?8wTQZyIbT?`m2pF`-!RewWP@`~<=utH6JGt?H!1 zW2Q+$^Xbr6?lh8ADG6lTE7bJ54gx=@YINm9qN+`TiN!)BfWz_RlN&}=eg6CTlVP)} zCcl4?gj3Zhi=mINk+=u~rxHP%PLkP-<utzdvmF%CXdiUFc2sdC;-l~&?q%~!XZlnL zFS|LqHha5VG6n4p>iX>A-2@{AyjLP*a}d8~Pl*YjM-lzLb{6j36|+nE_fR|2N?x>d zJm*pJ`O)OYpRU8tn~#_Na^-u%i*l@qa`{8angAt;0vmHJZ`wi{>mapYRV`WZx5<@~ z4_n+)E*5i&kd1gb8{UoDFAqL0J2l{EEm&0p&Xb^T@@<kKG~+&3#%<*hUWp)jy?k=K zNAbmv;<IVOl{PC%*soci&RAk*r%IZbFv><e@Us;48n7%scpN!iv<ODQ+Kb$!7)`wB zE((OR+#O#eg*yU~ZCUE$ix83roY_b%0ZI^O35c^4#5e<@cP3R_u%xk|=87RD76k}1 zHFqwqI159$m{KH_<Dp+{U3|I!bSoz&)vTIG1BgRHu&oidix^OVYJq_AO=*Ta!{P5D z1EJV>038P?8{kq(X_5Rg?1V)m8*?MI(Yh4CrLF}4S6}oR0?5KKT(^R7TJP_MDJLrU zYZ!^;I6E(syEfOgQK!$wIz{P3Yjy2}V($Gvg?Hz#gQ>_<3)NB!!GuUD7}|#9vIpb< ztg@8m65z^BtrVIQ)63-Y$z9Ag;=#U-K&TBh#|aS&0#2+_%S(3T!(wGaKQlL6Eu2>= zRwh69M=vM$N8vBWUwzk8x35ceADvL#imCtTxqroyps75A3C1>%H<cmb<>B;AdvCDs zB*z!ChWE{9Hw-1qOep#KWhz#&R#1PKYbRK|Ucb0ei!tO>mQFN%l4}v&j3f1dc0+x1 z;{odT(=!H>J&otuV$$EdXZZ&)YrCffVYJB>+y_F$R<Ta@v+as*9C^3RzRJ_$PUUH7 zG13?R->&np5EqL!<W+ix%|*V_Gi*ML{tTOsk<6i7@NB^YnvA320p>&P^8oXH<;Sqe zQnY8O(O@m7RdtqhBSnETZ9wB?2d<Tr`boUh5fdn4m=k0%Lop#8zRvO4O0#uU+q^{5 ztH9gCz1E$?lOBQF*v@zo7gHDFQ#V&qS3+3P&T<q1&eR&xn0%YCUNzkvo{1Zov`<qm zFlPThnsjmLFPFZz$5*>?K6;VkdYPMT>wH8ID{nTADdPxG^~F}=d)xsk(ecH1A-8=z zxsHFvHi86um3LHU>hs?8?-Dy#I)5`8MI-Zu7H6H<IV4jPqgWy|wyhBeEW(+_yIdg6 zvlzm71K|XG5XpLD5vSIg0Y-Ac#Ii}9MZbYDJH=U4^+eH{Ii&0)GZW*xQa3>T+oaLf z-iqhIjl}JGA+8r<DRdr5?N&ny7_|UmYRjl*y?U@m*}oX^7c*xSRYwVwFX(!?ie5KM zIk0@N2lmnlX0GQf+~~DiH7!pgck74vPc><T0|F?qkfD*cKq5J)4G^Rtv}4gyGk;D! zgxick$Sq^<-yV$9a+)7PF;?jNt+ps5P1cR)poH5P5NzuIP=Knn=$~}Q8fZa1yCb>} zB{-<&S7LrOaI)^gRYwzro0W4LsY5Xl1PoHjfmR(-gu<S-0+deSayRc}E}dM?@uhYv zBnG{^slO^n=X$2YF|?>nfN6A40niC3CSRQ(6hTuIK*TL7b#Kd1Y8`99nVPcl{Z5Rt zb}lQb1yWP(k@Gkv0CPiYzkw)REqM2$NN=?Sg=x<aH;CHUwg>{XH0u($9cvrCpfRg0 zo8paeNl^@PS_f}gKy?uHX3032gI+Y2v=yN03I%cGRT7w<i@Cx~vt@u227tv%gn?bK zd+#^WZb`cM`P?dbYztGZ(&CH|n_246yUH+qo!n7K1kf%2h?0^ahHn<)C1(QON3N~Q zI>a`^07I-k^gApm02~Wd`-bm{6vLO!>MC%aV>e9aaf6?HXC{J)H}`7<4c^LSNE$Sa zt97PR5r*!A8{Ze>i|nVArd?5~lpQ+U(F|0^>r!WoyU2MoL{>7*`@r$SxgV%~xW=4T zn+a!IRPBsnl-M@bnT^yLN#*=Uak749-_rqTXBA6aZ3yAxI*Kv^=Jq~9jH)#wOd&>y zlZyLjJ8aecQ%GJr(p9oam)y%%%crhWHAVoA(`hIoY8#z86RyP)PbqQIASZIS{>csj z*}JOStVn~*zl!;^S8?|Y{H7``#5N=x!&)ls9;6?{Qrk_?nZj7z-fh3t%Ia<&V#Knz z6ycjVv&;9-+=q1V3$q!6I4!zqt>iY0oy%Ga601_SB1N|xu%VklSz+aHerc0PhI&}+ zhHqEci?u8uPP%4D>hQJs_mNG;wS5Z8V`yqsXIzR&)G~EDtATZIt39YWt!dmyi$tF{ z;PDCRfM>Nht}VM37f_S&HSJuCl<q5fw0P)Bb4?7-o=p%Tl0TUS5|qO1;LbiwU`++R z*G0TKzS-1`N{DQPh-Hd$HMA4Mb({RdiZfMrchVw$ZyQ3PZE=pZN|yWr5r8#G+Qs?q z05rwkrtm>`8cHTwtx4Dyux$zfV4!KBU4yuy{=@8!cVin#+D!v=cLuw=|J-~G+}We} z8u;JcS<#ndBMQ`^=73w4ZDF-<cxRMT0O&)ttniyOv2DiY<<I_1Qr(R+m0S8+G;_wn zsM4rsA^8vR3S2259K(9~mTr<WW$!OnDk*9kCbBsqFb=Ay&NInDs5bED@N+<SqpHqE zujY|{9B0Lo`j5b0uX=M_lsFx99u`e<(t+G$Df#S$(v|m!#7i{3m;c@Pfs}hYxw7+N z5vCavHshQU!cA+q<>CAwmf%j}Si4rWl95trB`;ms)MAhjt-NnbK5JoM8hSNW!K%OP z|A%Zh2-$8ascEdVT@|k_lI7LSg}L4tt2xYE${#0#_f0h|)JSzjg}zhr>qXF?T78X7 zoMgt7Zkn$JA;9r9RX<iT1FW4H@)THDH@?gkC!vi`s%iR3hXr)HD38=x>6{kk>JzD> z(8k_vY;mttMK`kdXg?k`k;MPydb51057fsQ0e}eB1+u?o&S(L(xY0Tcv1#mztgkr4 z=mY>#Udz0fgVnPf(0hLTVWQVJ(PR0DqFewOieu)KMJ_RvyQU>{b-2=T%}o1+GxAm@ zjr|cz0!9QuZIM)6VU9jcH+74N?1wuxHi_h-AiFfg)Hknc0Zw9W=u9K`yC^|WTi-_Z z3NkJ;K`ADd)QTFqHnK2J)w5CCMbU9FkT)*dAVdxzY$4o0WoR5FR|v5?8O`CCu@$X_ z)z-DKQVFq;@|>3pvCfN$IOBj5ZPt!1r@E%a_>`r?CM*(QhG2XH*A)-z^Tt!C{?U~~ zx9c$Dw`1RA6NwG61sJTgiE5DTHN&5BQ+r_Cii_>ATwHH{Z2m-#RzcNUrWs<4Sh|<g z3|&OWP<*oQTBdK><&-;Ysb7Xb2-}cCqLF;m@8wl`8us4RtMrDKKjBsGiBFZ!>zB<% z=l*4qXqxSs{BHJKW*={CPOhBD`E4Do)`q%PeP436hq<Cv`z_35B@@qJA*IH$R-HGN zwsPLnAhn>z`;_I#?$&Ep7p0XL*}bFKK{Qwz0+J5})0kI*4Q*&aT?I~Ugh?Nkn1+^$ zviP+QWH)`GXwxURD2ISzN)1bll$56Kz(3WaGq+VK9A&{wQ>z2Fm_-^@9#z9_U>G`P zF`R9YHsiWqj35N5alra^{KGPZ&YsiMy9$lvS9yXlqQ=iA>LLDEC-|`blQJbEeNDo6 zgD7Wl9VgS!xdNcxl?x@AsvP5{w+v>sP2xlca~f5F>&X3n!q<%M*#SdDQ_47_7BnR_ z9k`!}6O<G}ZN52$w;YU1I1+48WMk7efl5HuJ`AeYCw{_RN}T}4tcenf*}yivKGWfQ zHZfK`lGCF4bB)|V3?bkUq55^7oB6Je5IEfCF`@$q9r~x!Og9Yx3geP;rmy7cA^upG zf}#2JO2mJE5chI~OGmOv;|Q7fr4Y&p)7G3yt7H@bw4mw3)LGI`Hr~u&R&^8%DlTP> zTeA!lW3yDn)Jpn4xSrH@ALSk6&74gUziblJ!OU^F0j|W{-5iULubsu<S6AiL-+UnE z=9n7ae9bHI{xCd2A17Lf1hA3Xh)Fo1G0&|ZA$p3j0IhBAbqQJ*$!%<1qnHB*j9(Ga z!8=7&vtdTSG0iCYdv?pd^S7-gz=lJNA+hbcx9t{8H{Q#JK174vu2Zy7AyRa3@;0vp zyqz?_ARuww3Y|89NStzGoLRUX-&7;~xu2-*AZDbaM{bXm>eKXv8bzqzp%Ub}O=sym zFIYnWrnW-MrrgHHwn7cGz7_O_8?R<3O>VONIFS7HrO7gYm{7<tvbFJ{svwhtn)G*J zn|a0`S1e)->Qi|o<=B$8YG?GE-VJa{uZ{os)%lvT^!DjerG?=R8^zc>Yw>`0g=AK# z)nin!dhF}5lv_v>)XOalDb-8dTD!{0*|!XYYuO}Qnn%~nC}qBW99CgB{}f{N&I!@G zrHGuF6FHeJ*#0Tq>rJ*+qT*=V<g5(ZcF8LaZdI!<z890H8%1*aO^4o4$tFo~w`%P& z&u8wV2%|7ddC6Z=?A`tI;vL)?W<{)-Ig3z^{oPrt<=1nL=g^Wj6_-~sv~2t!Nm)>V z(F2&y@m&63GbZLXV2(`~LlDmavgdR0Fh>rU4<*3NH1{TRK3cdBffKyOAGaS|k$ihT zcNghzqx4s~wa?QJzx)kQO9u!6%Wf&R4*&p=pa1|+O9KQH00;mG0HvgGIsgCw00000 z0000001E&B0BmVua$$0LE^~Kg02)B$ze8733i|Q_0C?K8JqKW0N7;Ap-P64%$+EmN z>_kbFIKzoGJhSa2ik)VU&L}~WrP$OXSaJrdYG|6abV3KEl%{2LgbpYaS|}}r7HEN5 zHc85!WkarvA81Scf8V_)OHQ28LKDB!jqkqiySwkcTi?64kFZ}7;`%fp6DV0(G?5T; zS;-5Okj4ESiG`b2hCKUvx_grgA+)5rGnLxCu(o#Z-n|R<1{d`8@2d4TH#gV%0=0p_ ze1Mpr+~1pu?3>@4oKd}0B3Kzu#`?Q<r@H!jJs6He`vy`=s;e!m9kEfQy9fHaCCZLi zZM-|)6YotWYyAuSfT$z3FwxiF6G<(N?B3no6^kIc+I{nroqe%O_eS=_=O?-&$<D>K zIY7*l>PmITm$r2DMdO}OcYL2G=xNF2m(V5%0(ayXU7A<S2<Bc8>+7lA-QU+S5CfhP zfJ$c0&w?m+4@A4WlAZDXr31Z}_V(>HN#tS?Ce|O1r257}WaBWsJJP#rAhIjIbk%y9 zHX4>ZMpE&m>mvOge?yHY;PW+`Y+&r-+LLPAih%}PN~XF8CVKtecVFafi7W{8Z0hsH zn_7J<H}0?9vSnSvE<YJ8Jn@w$e(!kZ(z?P+_usVoeM$F9_wUrjWQB6&$L_t@u7Xh5 z;8B%5g+%`IO}xC=148mt>GvT79@4X~HrCf4ukG2lv#U21@9&Lt6E|6az_#`k3%Bp> z>%Vk6R^9ew2YC7;J#mamZijk(XB_G^7q>mxA6wM3Z#&{!l!tFYBuRMBz6BWX$cvvl zZhJxfG|09BmTI%0YPqUwMB$VH&x&N7QYf0DqlYSd(Dw=z&ed45$LEihY#`Ouovhsu zMMk%QUzSWAfqz&ZzojL>m4sQCgW>0|+PtNG!}>SDojtf9u)wz<*j(RK(GgEX2D(#Q z`?jR|yLxx6+865{0D;qYN0LdXqz(s2O$YRmu1I%M?~f-|^bPc;+$+|$Y}vB2eSK)d z&J`^y+E$VCpz0$7slMnyS9iyDiT~UxUlwOkt~gNnG(w|VM|^jxvoOo?ioTxRk^Z=S zWmgP^F4Di>A-kek8<WSW7LXE|MFkW#Gg{jd=^lvNq63LUyx-OzPeQqk*8Qn?OMic4 zzhiHIS1N8o>bv`rT}a3dU8ci~n=n3+-TPT;|L!<j3B5y;h-|$BJy9T#loiUOeSO{W zNUyC==BgYIOILDBSI_S5IBzv!wXWp)$olEyfdcM$e^<<^58HZ4sxTHw#@l<7@m}P5 zPrNAAx3(`9>5i}M+Z*p+0g2Nr;m8R_%a))i9N1#1uHJ%fnZrUnZ9Lj$fwH7cc~N>J zN^g|!il?@A^~9%+mksrXm8qZ?T0glv5{qx!+@9odQ`p?uR?Z6HxRsQ$5{plU_WEpH zy(pp##52iy2fDlUEO5~n!SV+E0X>VGPUjb{Tf4rmBW{?Y1S5sE0(?n2y9~;+X&}<w zmFS9h$hh^uIGy8!co}T(P4t0qO7=ISi1c>vX9N9RNjpgT?s$KyD-N7so*BG1zPG!p zH%>31?@_`Y_CC)Nj|z{rs=vRlpT_AjTX(#7SE^G528>u1JMT)G($tkip;x*(7^0@{ zRG}Ga#;c&+{at&Ysu!MIKeU&2Q9Jd_I8!EzNo^Ar)EOJ-?}rLqiG9!s+Mo+`fDCYy z^$m#@>$lZmqT1Nsw{O4Gl<=LqF<`9EwzO-k$QF!|A|2>T#4NHoo?uaMoDnRxmF~zB z9<6<CS2E?2in+TxE)_x20b^du0&qvOeK{+m5nyb0(iW9JI@TYurO9Yb#?CvJnzYcl z@>}2QL-9e5RQOe)?7Ah+N!}+%#-!U4kgfd@=$I&=srbGWoy&F)Bs=Yq6jVfXAQev* znZs!`z7;BUMI_c4cXs5(6k=WHjkp@fWh7~UT<ix4>x!{d|3F-i#A5MevajD}dJL(} z`amr8J(2#dNVGd{pe~cq4lD@LIWNAScbHi8o_Hz(wH<Nw$6?^>SZ4(*^7QP&g*p8T z14KV6ofKWJg5Z~A>#8l1%w{!43tqUQWy`Ae^;=f0-_pLd{rpvY{kC<hHn*=}z;Mcz z#JN&jk69ckySub^VLO?f0euBl)tYT&m+>uF3r<V8+Cc&AQ!kD0r@ITR9=Kmhpfg)6 zY%|Yzjh)}9qtKXlTxHgoD_-rnh)!O0xW`tk*Jq51fEwxFW$Wocsvt!mQ_w>SvK}eX zN>7IlKuHuh8+f3eMw!JpOgtZlx4CEHYAgq|k72zsXyIMeXUdi*E-t8m4SRbxT6H}8 zOxf}~vW~)sW9=DL*U25YbZlo|C^diq?6jxiJuRs-GM%Rwri=%d^Xl30w_@kcU41)K zeLG=N)YU5|06RP5-Md+$t2_RdW;olkGo0;X1|k*a7p$%^7+`*1Lxbk8Yp8G10!?*| z4O*Sw7p!LubxnTO*cfPF_4Q2+TEJJ==-29kP5yuuY;107<kswl1)7?CT3w*ok3fxe z0Y{#I0;sRP5#0Jf6VUKAAY{PrV{+CKYzhRlI$xj;+#s-`)(0ExIWE;^UsIt*b+x>x z+^)~l7MCxnSTcc5qLWI?mzO8?uT#~aOtW#_usbNfl5z#6yBeoDrv|5mTy=9+!dWR- zCvY~Avq_vy=4=XQQ#qT-*(}axb8RlyYB*cKH9x2I#v;m{%Q$P{>I%+Q8Ew>Pr;{ny z7IAtWXPY?N%-L412f2Pe*PFS10oO0&dL7p<;`+s0zl7^eTrcB#8`rmUy^6CK=bfB) zarVx_8Ju0pSvRM<IeQl`=;t)W=>TW%<Lv#$2PieR0-=M{xRO%N4^hspg6C@LYNxJi zD0O`hAVSo*4!qZc_eOxCAA;u=fVzzutEuaDh(3VPABCuo!E+}d{5U*!QLZ0`=Wcjb zbNwFpso?tM@bd|HJ_*mK;Q2H>ABHCl&%N;M<ofOKb00kS!?T0y55Ui5#v?%HW_Uge zr1a0h^C&#~xc+(g`7AtNfafuIz6j5k;JF!|$AOEdfTOQb?%K*--vIA7;W-Y^kKkFv z+0UWSFH_@Xs+198Co0!<UVIg$s<XgFb-glOMhkUsx=i6kMb&9%fyzru3+G=&?RICu z9EBGY1TeBxcexs_Qk?LwELf+N>fGjXg|A_X>XiS=nwo=kN@*#NUPTpk`wk7saNBzz zZ%4dY)peJCgkB@_UzVnqQ>{=hEp_P+QWNK8`#wW4TE*yxX!-#P5maCL1U=A(wDqrA zfM1qi8h5z>`_t4!uW-Y72K^dev<Tv#wc-hR4p(1xQt>USe4D;NpQqoUqu%f4yx+@t zU(9(2bKXqOJCySd=e*y~d5`A2$8z46a^4^0yg$r&f1LCFB<KBU&ik{R_ZK<uFLT~s z<-EVnd4EIc6;wA2QbI`iWt%jW5@osKg0*V-Cc93R$(srsRBhf=?53<~6W6G=aFcGM zw#H31M!9E`!=O4_&U8YJ4V&C9YERQmDy5Fan@WqRQ`_XU(}K(CCYO`Cwr(mcpoItM zCeRY@C7Vi$Xwe7gCZ^Eh^_z+cX^FaA<%&v6X^56GO3T1^1zibC<nl72QkB&Y`c6=V z6z!ljtdpLg8uji_YHT(9d?lispt|yRV~6S`5%mN$)PEa0*ftVju+RoUSJ~`W9AX_J zaFTT=XaNPsrK}Sh!dhm?ONPU?S!--Gq-kxiR966g5x_?fzKldp&~h3(K`WGmh=q+c z21y&oM8{AjWT$gP9I{6oA~6(llC*wY>>6&veGEWxgaVHDnmFEjf>zP@i}z=4Ie5%H zlMq83q_f%#aShFc3las7?wPx%NGD`YChSVM9^KPsxOWjEE*m;t;}MtB;Yl_^W)k-j zLTaXo16G*2=R<h9_<$8w+*J^sA+EB*s=I)Y>SFXVw}P&&PQGtsgk3c<V*Xt}G6G?7 zJ*@_wp|h&&GGO`R)U2nEQ>>_uQ*oGv-I<V^0+YqaWY|4~A;c{1re4w}K4C$~s83Qa zZ4;lSCYX%6mwHFq#Qiig<iy|uGWZz?x-j^l%<wQ`B1BU(l|6)2_l(8IGm;N<=P2k_ zs7I-ImS#LhkRc5i8UnAR^PJ@7TaZ?Y!EZ~%FVG<~_#H|1MLJwu4519ogo??*qhg2- zq34)53JirxXfnpcaT;ab5vLR2UV>Z@<%SL-et^-`1(hIv2)GgQ#}EZ<+mP)KA=@V` zwogd5(XCZp1=pv(M#U@Rvi(=d_TRH?|3k9<&n(;jl5D>U?3R&%<Ki`77d$}vKXf?C zWQD#VLDC9@WsP30AchYpvPQWLgmEQs_K0c<<0H^Rf)w34<q=hUULE$7+9B6tYFJ4q zY1eV_xN7z!@q`*K&v=PvXgE}keM8p`W(XZy2asJbH)aEjjoLG6oO%xS*uYKeJv#ol zdJHpUkJIWN2RhC;opzw7AP%MNam8t-2iCwtJxZJo_dxzA>tWz(JsR@(3~<*((QQ`H z4XWtYv1e5AZ2*qbZt6Kw%t7E69&|&IG2)hk2Ya}CoeI6{MHM4L6{O9mSt`Dt4IQpo zdKh}$4`f(&ykZ9w{70kE;wNU(gv10h>1Vm5UzkY~6B8dT24Sda6~9u$lVtKFdbnog z;WqJG00~c)Ki$ZqRudAxQ)ktz20z=TgeI$4J>m~$3G_rIR+IP>1Z!GlL>1zJiWGlE z6so7R5P0|-VwDOiZR=6R|CzZZjl>kJVewB4*gYlF0Q%o%vaM!Km}6{+)58+ws|aLk z6aSGpJtfNkcq9j`Ce+YWVuGewmH<XarijZ~Se+Z=3H9li9_3Lz0%Nw$#TCqK3R7$K zIK;thge_r%2&Xt?Mkrq8aI!}c*D!4TWRJ@orO-^*LNM$>1`sCXQIPm`W)={iZdYOo z2#mM^*>PZ{iyN86@LFWlJqe<2!c=E5*3^fxsq17hZZT7Qkn#~LC0s7O-33Sx3n^~L zAU+z1xI|hC@ON792#SJ(=nm)DxI0T|z03iMSlnY0!_-e?Q#Z&|<m^+~sErcU137lk zD}|*XF=dpgBPTN@9%OE4-9cZ}=DV0cQ_S_v>!ISQEZQvyR0U0fHQeobIvJ<)u#<J; zV<cvj-T20ccxJRQ?#9OWI+Frni04_Zx3r2EF~p@nyRQJ&pGQI9F%Cn`cho4i#-dHo z13cop*$C=hE(fQfY=q*jm7~$|Y=r8b0ukH9x0n^da^sUG$0tqalhY$3TIlr=_}l#Y zNXP3VsgV(gqEFlYYWufs+H{wfFqhLg6BH4dMO2&9Sxp>;WHxaYk~u_!q`AbdlX(PC z*AN#c^N9kJiUow~q?Q;i;v=?F;wQY67^tx?0!{WKhH7y;`4KxocTjXIl%IgRQ~fy; zKVg}J$Hh<CaLqdogXiZAq}Ln_4Dm~djhL}f_B2FC*-+VUU_kvf!%2YMR-&@c8bIN< zK*395Ms>_y9dm$gj5*OM@T3DV7wE`XAv$gVDZ-KCw+u%PbUPGu<0`t%4BdqGD!99B zuOXZKKTQ0QjW?qFiQ$Oy7iNtpCm4<guP|#w`76WW;_oaI4km(+7NflXgN1{cP>_b} z5_ReNL_=CXD*nlaasdAVfT1w}$Hc1)<})#yc#RFgFBkujwWEs>7PUor>D?-E&qHl| zPzyJPi!z}i8ZH_FH`J&g*p-_5-I)AANX~?d5=DoGq-!N#tGO@1<eRi`Qzl%RD1~Hn zLrpUILz;UrB%h!?`fV^|^cr`A+h@N=6SrwFN|T3+VNAo}`tGD#MPD)*GsN9mRLdl$ z?1|aMJ>VTeuS0xNi`uhw7<Jrg*5Ri#Iginzj?pB$m2|I$6?mVO#AK40a=(TZe*~$_ z0=@Yeq=BA?kf)I&w<0{i&4H2n;XTC_kmGY$Jm`Bv@R&t&|A7+mdCi&&T9d9JGgR!s zfm#bU%hW?M_7EV8YN2Kg^F9Q5zod=MDy_USR6H5-KB0vd%G5(L_E2b{B)J!|eFd^D zN-WCDCPR|sSGDkBnR-aZS|k@sl8Yek(~#Fl7<qYRNRoU;3ontWhh*%b&=N_KLAGyb z;Yk@7KEsoSz%BhFfoano$8*q<d!63|cVEGAaQC}j0{7j8KLB^9`-hr%P76=YgeFrQ zKx0nvf`z4~v~&j0`!1voWm5~p_n@|-&S=4K)X3J7$Y@dBOG>cChQZq=eyE}77P&9M zj{Rc|;EP~vh3+YSqGh5k9A{&N;-}h><#&spX<;o|7<CVO>0yaklbC;QV#fK@F9A(r z24Ds3(IQX~MbRRRDZ6821m`T`_fo?CsJW9s)!mB|H!W(572~8{ixyj&cDdBFS7#%r zRIJm)4cQ1qD%Kg|mTbg06aV7Lcf-X0J+F^^^!1U)Umtnt^$`don0N)m4|^+!9;gJY z3ql;+&WvY@Ky%$;le0Vq3i7?`9X2_2lS6oqX3p+xa^j~;*O0Cq6PDtP&y!w;b3O!f znW18w2A0TaV5tNyi__UX<>q{`LdHzMK%i%$Br@rwS>g$L8M(uD0#^AHe=euW9X4@~ zP0l!^ro#EaCm<XS$`LJJUBPJiDVsT|Dg&rbgTE#OQ!`J^0Xl0NPRvwsKSZ8SfEO+v z0dMsln0!1c(ce<Dt@J#|_65xLekiMW%w|q?LdyvjS9}rS9HADnr`QF6U&0`-xq^mT zVU_rJ7I=jOcFzade-imznOG^~SJ6ZWD@c6Rge*?127Q2Zp2|kF$q2i6Ivddr5jEG+ zBgo}5vS^7ldx~-4_;uM*F^ns|=)8RgVm!Pwv9!kCN@JRPHV7Nc;cPQtDyPql8I|F+ ziM2I1&?C2E&y9iv!u)PZm2T*IfZK{PBO^N3ZBb3vB)WBnWeK7{=GilmsUDZiP4vjP zREEZ-BED(1LWy`m&ctplUXJ}6D{j3tYm)P&(0UbwP<#&)Sc1u^G|r4|;zi77^OWF{ zZO~>;fQR9C8<EN1mr*tCI7tF6ebfwIgNW@AK4ym7uqh#U+zftL&ekCOk{P}k!r=|F z^*7MDF%9J%3jz>7%#tb;Kaz9YJ;iH*lb@JPsDO6pVdAGYb5g9q3;?vx&k?ZDDw>v< z;-!EHVY)SQT8A}+4=Wpl$;QhjE~92D2!dPuCL6pJ1*1s(4l@=NF9oW9wn1ZIMtUG7 zr_Rt}p&2xoW0#5(QeNRHl>+-`Tfn9j{TN!srfcpW<D@~hKye1Ve;<SBx*Q_t(Bl8H z?3W?yC4D$|z$ka|dhouAO|%hHLmTNpPq}!_7Is6h9JdOv_r5Oq2nTBH2(%`kAUkpj z{YI9<av4<)Q3v=qz`!2z-evMGuH>>p+&D57$=!=^k)#jv5I4Pb4@%e7+=3{=u^B52 z{f6l`YD$mDLEil>g^268jCz0R`+@!qCT{HY*pN5!Y(s9shWwC~YBpo2ieUA8n2)I* zEb`5xrKtG`W+*$HEeRq#wbefXs(T5ra{E~7A2ow&ViPJ;apx#AngYz+HHI0~%;K;a z<+M~ynYcR}u~|k;5T6*sY$?ax9qzstl-H-ZB(+6OXo|5~w_1yhvYI<+Xsfyh7w6($ z?%og3_ak(Lr=%GCN2EV7!%O9~)n!(4g_k6zfVMnhc8~`FC>((J30A}6kRTr6R;Qns zm@-FvR#sc6mCO;3a(A&@95J~#(&XZ(3Iz8~obgx{G0A;7w#rw`Lc(a%Jt;8-OZg-p zEi_UrMFyT4mw{)-Fz|J53FJiCSkLA$LGzf940KO2TM_pQCYcpb_AY40OHiL-`UI#E zB1ykEF6p5$q=(0nKAJ~b$tQj1xB_(IKO^ENrqIFkF|kej6ayu=;UOc=KY%l4FFA03 z=mNn0D@-lAwfJ4Y+;2yvYBN^mAG3U*fXnKW0hkiWaOqT3J3JR1x=@)T{vrckGntYY zPiB#$c-&ofC#bi-b5rrp1x)|PPowz%$+K!76*8#HSGiR6>Wu~W7d%ohZTd~Fhg@H9 zO`Cpg;r)e=6i%ByX*MY;Bo`6Alw3^8i^wIU!bP@|i2)KOHl6Gss_t~|Bt|K$8XZf? zJ4m5UBE()wqNJpd#7IFQsV1P6W|HD%q=P81@Qf2!Ce0(xWh6l~4y(^eoa`bKN=YXv zD<xfoyU05U<K$A}(n&WiNS#bqSp;TTSL?U}y^LI~!;F`r`x&a>PnxRub2(-BbG~*1 zxDQa<jk>r&hZ(S(gX5kOtif*7qc{@D$tf2%>EW$WJ~Rv+5$1CRxYXSagl+>uxYT5b zhTJB}-DZ-zO&7Q88BfUqoPys>)jM=?hn^Xd_?Y;Z9%aydp$$F`zTw0aPYEoD#9jKV zHgS)R+s7`|V8$U0h}@^+obecx=wV9l)6JQmxk1RxxnbVi5t8`m6cUnhn}(R=FhfoW zQ6OEHIaw@}Gs6?Kjohb;2Xqro5f8!K`?xtUG4~5p4oqx#1~MQX(M|nW(;n)fQo%9t zSt~Bli)@KUb-Crz0<!PA4s_KQFsyh=aVPLG-5Saj@g;q90`a(Ri6XNk@5{P1HflIF zE~MG95qaR^Ns}JW@t}*RthhuUmR~%bMQ#_*ATBxH9Dw!GW^<g?qa1NL#5c@*j+%RE z7FmIK7Wpagl*|N<znKLn%ci@;w=msqZGgFe-)HoI&Wk<?gC%b0eMcYN_A+NsPVrsL z;q;Vj!WoqG%av#`j=vcbT*e&2R&irZ4eQn{x=?&yw+0Zqsi#c%LPRWAA3rc7?2^)t z^ekz_DeDpk@~^yM4&)E%0j3tsgAnu^@pIknMwK^&8vnSZ@Ko_@*&c25{l8-;*tF?| zyRnPEi#T=CPgp5Ql0p|r5yvtzK=?AUhZswt&#KFy+bcTROA1QKKB6rp`%w!lz^$ZO zLYI<v6IUrIR2(Y1RsjkBqmKJIshH+D7_-5{;elTCWlH`iJ1zaA?6eC0+)LFz>*CM4 zxk5b%ed&ZgBx@7avg{RIyrN4~?goOJ8DF8=-*oXeeJBbVRc?3S2Fu@}b9+j#ZvO$@ zFKRoCcwW(?+D(uXcQIy^eGPQwzx82HNenSRNo}v`;x&{XWB5SK?p}toaeLI50^FXU zW&90Y{0C8SiRuk~ILb%q>0$(?>?Xam0YJJ0dQA`5jiN7tq}X*se87<B9&VdmWp`tx zTy2=Th2s|1)dp^1q1&OL8&}b7X6ROE*BRnE1J~O&af6Xb%mDtSz}{p9<hjd-3_N$S zxpC%xvw?>#Huq<-Z1+;zM+|X0Ac*Oi12IE(3|N8drs})H7=qR8duVYzZsQtZ7zB+B zmTm~0VexT8s!d$2+r(ibYP0qM?gnq0T$X>zz}=nOjew!cjsZ&)ala%tgyg1-A$J6k z1G!t}_RoU`uITTVSzofUehv{6Qlx?seiToLzGTSlK!z3dC0SAERwz#x;t8yl<KoNN zTEXp%C$qJJ?eSHtmE&%lTRn}Ha@>8flqB^zLwv)?$g{|24f9O$Im6tnti_S~TSmAs z6M8Qhf(JL)j*D*_!%%dX<cb%N0v={PXJj`rA)@SCAW|<HxRqIKgOTdH$oo-~ciG5C zCGSUNBOjHGd{j2_QQ62Z8R8|Yk$(vI-#3(apKRnGTLIa~Kgnz4pIME(Ll(&PD?|KB z=I8DeSb&$YDPNYg{eC(mUGW=3?!M&O^S5SuVxfMIbRaiiiE=0uk8+48`#cotFJ_CB zP|7qn6zVt>YOtMv?{#A}A*BkXYSo|*!d2meG^{6dA37J3s?IC05=`^$4ce&rc2A@? zvMb)7tZfhV#Rih=%pe*e_4USkQ&~IpndIWPYAv0muxNY=3nIz$d-g5JLM<F0s`l(4 z3lkW-su%4BJJ3XK)HGSzP`@2SlJOMV)7RB;$^Qm-Pv1Z?9y+NMTmLt>Q;}#M(#`)f zq|%BJQKHfM`u`1Ds8*R^bS33)yko=v260D!WUowVJ_mf`M^8U{PG`Q1oY6k-;<sv_ zm*rslY5SBk*9+7&1&z@{v${Ziot~{+7HqEb1BAcMo|6q03^X<9*=A+I`X*n|DN@M- zO^pqXym}}fp9|*q)z`Cfs=LdlD^zuI$~fhmI=E8Al?tv*<Vq!1rf|i>)fvVNYL{Ax zs)Q=kmez2gK`1Ch6%rID#=6ol^(vI_rs%~=Nm*&RbSFr6l5{6aw@SKGr8`Z!UO=xA zowF50p+svToKjm0u~CJ!6408wl`zWmR-#eOXeBDX`a%tAM>8I-AX_R0<!OM1RotLq z6)`F7@LWhb?Uqt)bD#81%(nKGqc6n3zjwJuO**ZV|L!#ycgxz1Z7n-jw6$#Bxnjf0 zRa*)Mx;k>k&Zl|rgtYy4Z@pNoql5uD4c}teN4w}dS*oiiZb!$o;5XkZVe2BPPFsJZ zx1+B|OLX`3^}BKiyg|Qj^woy5zwKeY5hLGP$-cb7edfQ>mnR&lzHPgAn=g>qk^|9X zs^1>#jDS#f#9LC<3n0!!e_ziED^|nz=JroIxov9Yn`dzdDba}awu1|8eUmMFB3<3s z5i~@cgk??EPI$^GNRZIz+d8@Tc4(~p6wt0D`10PSfspmSkJ9N^Is-PO){>(0btwDF zu3cRz(_S8tj=uX-c?#N8-zZhg2+>|2TL0^zfnF&e3~=<Yb|h}SKjyT47h<F_S`QWN zSqo~Yy53#!^?fOP*QDPGV55CL`+|Yq3srj_NQZoXAZIo1?3KC9*9;x<Wfl`lrBsfQ z?yh&oAvV<4zdjGJ5R_Ja*cj-Q>NMU_nD?&RP83M%4VBV-I@zLX`>?DPr__;IFKQ=f zya7N)TWEx~(iL<i?Vzh@h$g0;k|oc~T(-r8Qy{G0GwT1g|IR);uP;h%?{BUz7$b44 zuDPy>HTVM!EYRFk@5mDd));8^YyLnW*o0QpHnR>`Q(e8E`5PM=xP_eg>wHZvX;iJ3 z8(LX;c}2NiA&sghlrPnnsdiAHS(9qplB`9wjjNoqBF>6Ui|WY~4XX7?T(3kcXMGCS zr*h`u`ZTUj&l*?H;p#lJtY)=nFiq<@Yv8PrvxR8y>s-PM9GorZ&KB-$1vPHW1e_C$ zmDH$2V`gq^<4U`+1|rWh)>6X(o^_n9=X?X_i#gxOxsUUeoNeK(gR@RFthV(TeF_XP z@aLXEsJnb_+Dj|k^V1Gm?rs9tJ!{i}#kA2KPQywKX7>PT->JMK8i`3aF5QH5cS*NP zy6=?krPA$@Zm)EA(?zokgTNBVP?xI=hKnY&BBc}1dR3W*=BH{iny0c!XsW7#?70~X zQw!02l`A0y$3*zQ2nQuVR76$QX4;k(=WI*scPL(;*Y6E@gWfuCy|=;J=xy>gdt1D% z-WA@J-c{bv`R-2T1hpwGJJc|nwT97%isq&^LuDURU$KkxajA6NT<JN;g|K9z7r}~2 zx#R?OsoPJ`Le_VJy0yLH!m#G`uF+^(J1Q=MCC@Rj1DApB1-R~cM`md5)5&AFenIm* zw5-A>#EI8^Pe`W;BVy=W>==GJd3@Nbm%RWBoS4kM9ka)C*}d~4hS+7U34NH>Wu?Jt z|MaMJu`9bM^fFu%0<oA$OqDydJttA<3)|P&NytG4Vp`2)u{WxD-61Cp6_CT;e}!BW zH#GK32CI;X_vDy}+J-}gRMOm^EzXaD!uut(T*jv9x$*pdGe0YP9`b*HhTREwqR5j8 z6)SBzNRFbxg7)(YG}4U}w=J||UXnVF8!-&G?@mxJxsi$wp|$3%S(AoLqQvWdBo`{h zQ1S0^wOUPY2BC2(x1i0ZdMgz-)6ph9CT^jKT--_}e)nOy(KDOfLB&VVo|NG^ND)UP z66Uq#2lV`a{m33^h;us~8XlN?Q|frk25ViYaNQ>EkjA0Om?l1!pNbU})n*EMpO@W> z6(jB(O}4}d8mI6+Q-lD|t-#MsDcRKSvJ0W+?#kBO5Z0WyhkCNs%|D}1d5=)J5q50$ zag^{!sQBC|HRc7jAH+H;pr5DW^H>MR+&9W9s8JrH;xRP3Eu;g-#p86yDls0y4S5Ul z{Ka|x3c!d~c3-B$-uZGH`bk>d=Em)wuR)aW!7S*oH}o+2i>1H$;ZfTgZ_9(yphtWi zG6GLSH>HjZdA(&_P~vaWS#9EZ(;`~sD*F+Z^OzKpaw#O9gD4}Zn1+rG%YBTBmuPrG zCNzN-e;SMGqd!DJP<~9s4{5l3O*w(Q;>S`9+<j)*)t>^0pZx;dfc7gYeo8aLp^0*X z@Mq8pHFff|?dR0p1V6u^;Ym>znnZ!D_$3{N1{A-7IGII8+r+Qw5Hu$HRMd9=%n^ED zXfmAxBoTBN+M(=fDBEu+ZVXk5-_oHr@dw$Kn#P#%F&mWeRhr$lZ>FzOx!11Xwt7|m z-u)EZyO$g9i^;20yl%mXH%yD%QryQGk*70l;&MgWWlT*>eYAKR#D4(7;i=NvVJc0? zY*#39e_b}N!#oI7KxPQEFrFM;i8-c)rV)faq>N@pu!zUKT_NHclgRYMbZL47tC~6D zgJ#@}#EeI8-6Kg~hlr-j+|w=6*Pog6jrpW+Qbsddq<=w)xY;BF{o~PM+{?aoG<>K{ zeB2Cp6JE)eMS&(};;|>5LyNl<(<H=85=MGf4;6QtS*j9Mj~2fG07sC8DoMABVl#-( zm|4_NwLH9dP@X%~tU8i+Sj}oeM<hA%ka<8ho3x2Xviar^Y(eo^X;~1Sl9=-7t+KR_ zA*s2ExuJO`z!w$E{#OgtfEayQ!q+$wMtFW=ekq<=f5k)zk+PQN9*-Eqx{8(c)zOrM z0b%UxHEYE)vT&bAn>_J#=}#<Zt8s{D^WvW~<7?Z*w~!w-VVXE27V*4nu3L*+(T+dA zZC+He=Yf$0BBPi_vU!IBVpz#yl0XKY61=3ir&@3{3-?2-J)p(_FGBrP(ri;6*Phe9 ztNHwc%3rj9z^@h{+7uEbbQY;2Y89y`ikmbL<|a0LhvIo0R$f+cMzNW^thk%yL8;=k zw;AFuiq`=@uP9z8{QO<<7QoLx6|W0^URAt>@bkJ7Zp^G{q_7eOA^WY8Iaae({9YNd ztihg?Mznvh!qg4AwdQ>BCo8PriFeIx@n<WnqIE{i1>%GiX72YvxJC#othsw2e4+TO z6}Gv<5WYzK%?fk(ItX7Z{$Yi6`3}l@@qbp>knf;eBK~EC?eZOz?c(27*pV|ub4pV* zr>;z{8X0l^?Tr!mdsY6?5&YBTU!nXfmwy09aDxFiY3<@Sin&Q^7YA^frQ;^;<Ut>V ztHX=Kvl6p>=-?jhqF1uJ2@hCXw0P@Fq&L;wU)w*>i_7cU_TCgMW8;yY?8ZVZiPdgP z;vVj<WUMchvfyK|0<*k5k*?m+{4H`Vv_-y}U282dYH^K!3aLe-q+p4$43Zbf<ONpp z!qMc~Go&qy_4OtPdg5}Uly)tAt7z7?;11*Bx0<~t(tl~oTg}{+-Q=_(nt1>6w~DAg zz87$9?OXcaAz1d-vv<cM$+)>~^Oox}8INE3ma8BMD}1cV&|5~(H_#u8<9p|_Ma(Uo znP<W_>YIE9D29xkakc(G>1DNN=+N1Pe0`m-js@zQ8kMyz%-<ZS)3b8Jg1&}kZnYwV zmAQ{$W3YNyvfE4`7OZb*;@M8;Z>VcvD6}jPtZ%mG>W<Yn1nP@UsShJpAO40w5O;4& z%WD*>y0g2t#at=liYvEut4!yLmn*ZlGMg)NxjNsNPYZH8xeD&&Dlof(g*K&%BW)+t ziN1og9o)jS3&$X$!o&jK<b-^Va;0M8gh|q!EZr*UPL=L7>CTYuOzBojcaC)DNp}Ht z5sf(Ptd$s)Xt=YBd%X%(cni^}s^ji2Gg^pFH9PJB+Z-*x5_h%`mFfkp#E#p}u;_K+ zLff9({dMMce?8$s-2HWlN~y0eWvA2ExY0OPVb35PZ<E5#(E?f0lBr04iX~HhyH}hl z_&LzpGbJuGH&LOBSv?K4Fzs6W))B7V+WOWr<ApES?HPLhTRhq0JM45D-#RYbnB8b? zz_$0UwJ`s05kirx&xkPR&2`~ZyLaW8a1@_P_l)|m<89K1V}uy=R$a3(Dum46*wnxR z0aTDdzh7Cql?D9%dOYd!+jAM2zrHR2%B#FYFNI$3zzs=MUIj)m<!TvMCvnxmRnTA4 zjA^p3qjFHRw94SeNb5uaHKi)fv;*9%jv_@;KXK48t_c&RJ6XDw(yfy2ROx!8I~`DK zpf_#W3iu^9R5Fy~;gZ5vfKoz5q`)Mx6;u$;_jGEY!m**kVT@XHMN8pK3ENTO7?#3$ zzTk8Ur)B-twVTb(nx}VE1io~}sRD2+_@!@?b~=R;DygpC-2<rt?2jws-CaFhsd&F@ z=a?YFi$Sa-7}{HZ4kb9X3M}PC?R2*$v6t*TRoV?4DCN~obIyfGe>|%|th1T3pJB~A z7rfTkO}k2R0=)v_QjjruYM)kDZ3yL^am_jx66RzYrWfZ1y><S%fQ`<QYt98aI}gNB zDi!DE#5!pm8{%zKg}KsiL6C~^#K#+K%$^HktB#|>?A?)MYMsPB`&{@!Mre<mR%Itz zHRmP`<`ivot~U4Fb6LxZdFPfRZwjBC=bcl@ut<4xf}B!4r`8>XKBwBqj?)XzN#MsF z@6MeLbVD4%-zqK0?%0`|83)d(HpVPM>~B3c5YHdC&bkP>^lch+$Ln0M!0<Q2Ld0Lk zf<a#pPZNEx0%@va_05e9IQ9k`{XQ6bgH5ciAy@~aZeuenEb8jBYmvI9#(Dtu1<W-_ z9jsn7Q*8#C8w0S=X>4G@=K6Z(ZvsTP)B$Xm&=~Z?0;HjV)i(j*dRPmwfG^-<^)MZP zkv|AI8iP$mr*O^ubxqB7jZUED3anfvXtOFNOrn#jRf8(3c}_{S8m`#5!nvw*#lVSx zQXp3}g<NrSRi0RC6<n1UK&h2nt->{qI)gJW*Je(J2}A)`XLEIqx!mFE0<QYFTF+TC zSC$(q6|S!0YAaVaaCIA3FXZaQTy5rR9oM?JT5WXUg+&Vd*EGAl{0C+L#13-{dl{jH zg_G0e;7&=GlftQl6nfy92aAxx+H?)E`_UIn2f%Ge*C|?I;lgxd6DeE-P>V5bNqRQ8 z%hF5H#D&_m73o$aRuxiKFKug=?i%TyC*8HuT_@f3(%mTCP14;g-7V7HD&6y?dx3N> zlI|ta-7ej*bazO1r*z*T-H3Ff(v3;CL%MP4CZxMdx}DN}C!I6bP^gDiPHTmg8llT! zIY+6x1?Ei3<Q4*xvMOAvvFR&F3DsucqRuvPIVmKRSGK^KPgi6PV?rw_q;_u$Ea)85 zTS+l>&csDu!7QA2xvE=80WF-3voAM?+*GASI{YdsEuJb7lvJ!BZd%GD>aqzdND(cs zXeBOMVVH0eCbbYJomjM-6cakhW=2kinOP~FgHyT6GPEsX>YxwLS5XA(UQxwz++k&8 zIiA)ohfq5aErUayRJ3M1CHM;Fior~$B32G&5^5(Cq1AY`4@k*O$h&sXC)N#mNvBP$ zAN0~rE;e9D7aQ@%5Sv!xF&7Yu0Pq$7-a44D4JMcqU(ne$IQM8mfBINvD5C3%PR03y z2?f$a4my~ir4s<;0tDd_giDYMP4pLIyiLa2Wc>Ekc+R9Sts4mKz!H^{9b#w3OG@#8 z>K*ttc@#oU+@_CZo=zSW9Y88`*h}w*STuBvhn)#$qM%K5WfOqWLQHvQHl^ESP$q_4 zR9>?KG)sVHpGmV%>>k7$eDEq8+;Me6(q1U{KFHQ)?ZRT*dm!$;fFJLIQ5n-7q!4)- z;+RGbQjvxlDDsrzy8)Ne!Eo`KV$xY84#?P037sRZpo4RdC5)$!4-H2QUDXwFkb2Uk zN5z!@V*pq}EyVMMLo{5vrj%gHRhT=2x#b-^AA}T$0O&+nsFWhabu<HPM#{zY=;4tH zaRYkv$OJsz1<1~c;wHr3hBgDxs_TL2o8>({H3Uy?r_o!exWz=AvCtk9x6#3&M0scu zu>BGAR)Cn?j-Cn7k{_jm8F|Kb2d*&eC|Koy^-jQwHz*AzCWa~@^)5_xC{R;#A@y!a zGeGX9;uDY`1npC1eS9rfAD=e2NT7L^L5?FbM;$pr@xCM|Wr0K9m;{+^;vu@)jfNNE zb969NMdpalQf%e2KaGrt&m)=w28EptXdaVj8p&f6uhn^siZ24Bk{R;S!=Wh(zP^JE z>;lLqumE3%R1UF)+1RgQ>{AenuZO#lxd{+!-q19g0AfI$zdS?5*MXx57vDgtMcMS{ zWcpI_92MWhbX|N4(~GlMpGT}O0M@B!jh)T)J(;VOe2<D3v7A%IAkA83<A%Qqi@14s zTIE9rH~i;7oVlJW)y}w{3&Gewb{A>xw9`yA@<6-Z&Xrt_4$c*Da-zq30XZ(yyZa&? z{<HFTa?#wTp(3J6?oXm!8m3umHyh&g`m~*xTwtc-%n4^uITSj2*Fg!{=2a~#S>Nt> zuUtQ#%feUAz6#KqZ`}Z_*3edp_F4;1E!N$ajGwyt!Yi{O>#Vbv71@`oMS01x@9Y^) zJI6fT1hMPwoEwg5ZJchajrC1xAlRtFB(U%#kW(jS)+$Z)H#X`TOwP*n33Nh9#l-T7 zWFk(-RD&ya&YU<GQ(at@b1|ieYsFkC#Vu#8T-ppz;5Loh7`IK5JJ2vSo67kt&a1gH zTQjFsipsB|PAAip5=EVSjr0<A3c*z7QP}ipGo<U4?o8><fpOhngsNpx+$n(pU%|Z^ zxo3=<F|>RoOhZ(hg)q$;%~e&iO@sbxH%D_jj^=g<!D#Ln%nXI7GDjZfDa>XocnL=v z7uqQt2WW?qcZ(Qic420hC>+FdTp04*=G%LCIA0W}Xzr5G@XWXr@6%diBl0?}iqWgC zc!DSNkO2fI?68mCu;q|fQ#qARyO_A6AZ$<A6Ryqzw+qjYhvn<W%%@iA%sb+qVZ~95 zgQx>&B!VZP#vB7L1W>&r5GyL>S$rXxGg*h~{39sqDXWz&SJ7)hb8Y$<Jq$mpo8aA< zMFfq~h-!oCq?!$NrUz8!G#G#rrSi@`sL5$kC-OMKTg!amibREUKrvQz;*dn8W_(sT zoo3wHcWJzLi|iL!tyoIpZ<Ef;BL+QS)v5hA51{spsSA7K`%*G|sy@+V{F?s;`?v>W zbIy!0&tG*$$a7Fbawv$uO}c1oE0}h#jll+Ev`X>dtj>`K2Ft}j11ra)EHvKdXrGFU zKRaIcON)(Ss%1~Bh=QN;(B&?#>QJ1nf<oyQNf%ZcuqJ@Hbt}F>z~pAG)D0TW^p)Hx z5zB4b&I{Xc(^eBzQj~wDjr}4>`-;x4?hZ7V&dTp1vgWNC=*w?{<S;_@)Q?(nkH*%X z8nv)@phpJ!<GtB8d9)ZtEI7CPk&X@-C@_cbj;`eH?#TXvmFBPYAq%-*<$H4oTT=dW z%g`V1>Dv>R;ozIj(ULkxw(w4IGlLw$>)u?hR(ZR-)g6OxF0XtY2R}R@J?EG?nV(tC zJha_?UHG2axzaY9F1Za5^l!wh=Ju@JZ0B9^z8+0RpQD__`g&8)?UUKJ9ID32mh%>$ zn(D}t)H7<IHE-3h9tmzA(}ye-(^%)o6B$<5RA28J+p?^|*W@c0BUh}xuA#nQOe3<! z#^#_sC*Z6O)Klqrb<LU@e8GaTjo1_j1nqfZSl{Fe=vibeSnsdbvz5%6eZJ=GD;@S+ zkw6_bH`~f-IWM1}SCuy@R4c=?eMRRK^kFHda_ftl7oU5rThG~C&g8A<%*R=PvpTfR z*P4xH>Kc30uP6$&r!@mYj<iM<>P&;57NDyZreU$B6af^d$da@Ms@GPYE~8wTlm^XM zDHX4Cs^WnunsjGMw_3V$q&rW#^QBuWUB7gL(yf<nqjVS25>VGphmNmz5d-&*s2vaf z6^AqeaN<r7E5Lmu&4oKewnE%G;%+nu(2H>DXB6XJ6TX&KKub``J90|CAgAOT!lkI> zODxl^);Xt}ue3&z@y+pA->zO*X!J{!&pPC%lHM@Cmvo!rId$|Mo6Eg!)w&HkH*Z_J zYG<gWeeJ51q$n4&ZT)%cH(aoOV*C2`t?eyqcZN2sUAy6eom;lHtT=DymiCKRm91PA zYT34S>&~qk&Rew}Umjb(e$`r+94^mr##ETiW@WIowXa;cYQ4++$;OthUv*&?vt(y| z%eqy$k-772nwX8PAItC|6)(%hZGmNCyhENM)t;?>PiiFE#dao=y9?s@UJ*v`iTCe! z;hB<r(@1tpTOxwT;ZE}lZ!$jVj7DOYruxAFZLjwaz@ij1L&+(;dh5^m%{OZ$I_s<@ z$Q?|Yr>j~DKgVKA^mTXl?Jekuq+*>=8~b~reckxgpcUqqbJ`Kqj8)dQoXJ!wd+Ic) z->i>Ne_zkKuB3%nwsp-}nUv5cTP(;gU$u6nw!~Al=Z2xBcfXmn>Fn?pi|wFf_X4EF zYIZbot=h2J65g#BZCqvRiQ{*ws`kha(MZT-NY)@U=+@4z<Ys8oY4}Zx0sP!gFTUrt zCHpliOf&nQ(ubez!ZD%oO)v<xnM5*3wc<2<myZdp+82w<PwkYCkEJX>FbX{3q-GmU z2%eQ$=#wcB%6P}ZEI}H#rx1z!h)snx3$$_|PT4VP&Ov&2_w}2-t294%mNm7rqhIYw z?!w_$Lbb&sFlH8JgX`kSWMo&Idff4zt}#((7m?F2ZBBb8=T%mJJdU5?8fB_<ec$;~ zP+GcEqmjj{BK_U_SMBS{MV04pfQ*kuPs~NH?@Q&UObAKcvJvzbzRj4UXpGi1?=g#~ zf*=};t*<98HRAhr<2Pt}ccFnm5lCl$q&MC-kn~8M;3*vFH6g5~$2o{816X2f?(Xo6 zV(~CE#?X6AG4e1^B<0a04{A>;Ueq&M01H3sN%h9d^P-`b#y$92=t2*}AJ)4k5}(@J z=P`SjC(<on<HYWRxJ@i-JRYy_kH2dGKj-C{y<owDIrBW-eSNz<9bFxOE#;BuJ(1r1 zsZQi8m$N4sFU(^fR3h-yn~bZ8-Ej>SvPY_Atie)`slh$Fv(>!N^PYmyz*eX{<$cS1 zXBD55M9`Y+H=i}1`SraGi7j~ph_sEs<86<$Y@iFrv2Cb5XO7H1LQ^y;U&yUE%^F{R z7f@Ra0<)AZrc0?^-M+n-Lyzo^#NxC7LjBYLH$|)K&xQ6W0%dM*XgDy&{b$8+atBuW z<AynkK^HMslogf+UX?#SL#iVh-__N-ISylT%xR5R+ki;75%29VqZgcmDw6oj0p{$Q zE05&dvzIN)h6_p%g~l`omt^ak(7dN9``R~;;`9TU7T*_%rPNg4ZkPPrVklexR!e|@ z8#oWzh$7Pb<|yYC+mWaCby&W{`vJxcB4mwQ=EP*txi;B2Q<CEL_2;*&ZC{x;#y7t; zbWr%^Z=#^%PO*x{C|~?$-l8{$a!kFLg8^a*oE1xcXOP5gQ90q7|E6-X1Sr({H^DNR zbeV14aQ2RrH+Nne-xHUw=#OjqH-5%kK45a*S#z1nA8DLjq2^{d2w!)0CD<S7>525? z(MWbj_UuGX+QF4HliW1FN=oCnx#z&BIr=0G9OdLX#f82tXaFXI23moczR~*>g6E>u zH(RTju6N7p6^c)dlIC+~7sW_79=7e@h=+I`h{A;|NuiW{O&k5^f!TPUM}D2p)0On# z2U9(XzJ5>PN%dQCQVu-P!wjW0o+wNT<ghQt4UC+9_8GY>Qk={6TV(g*w@^FsD}-Ah z(b1Lb{kAyXS>bVc@+E!A*#{&!ZnpQDNI)}pr99l4yVyO+fmkda?*K_YH#{4%+?;VM zt@CZ#$UkKzEYB1h{64h~o?rt!e!tq#*re76np|TU)`Gr<CchTIcUUH$p~?ZyAHY4i zykT7P2O8_@G`~OS3%JHEAz9GZ*sS@3b<IJ|-`vnpuLT<Fg8rgY)Dgt{>znoL<d)U@ z0u7d3o4>B9p80)EjX(#uWQ|S!W&m#t)Fa}$CN0p|+!$oRK)|1OlmZaV&5fnw%>#i` ze=tyViq?kG2b$`P(QXci{Y^e@NvsxVuB!tcnj0IM3&u)K&{tRIbL1_*S)kq*oN&64 zPJ?3jv95j1b?%e(EASntYi7Y<T|?0+ommSsHP&MtHU}E)IrR?_zWQbcP91BgYw&CS z#y}%fxWCy4z)-I~AlV#fbd8k|HP9GvYP4J}*R@F%x;|OnK~kyD(%+MB+^6>76(kDd ziYAYhIhyz>cCI+M;=~glwDK#l&XkqxnX)o*GR+<)d+}h|K9k$=NSUj1xiXKdHC(CX zijOOP&VyX3<4QeO8oAoUm1eFk<mw`>Eal2FuC{PxC0AB)Wi?mYxw?j{=W%r{SJ!cM zJ(>h6o4B%-E8Dno0aq^MN|-BAu5@#ymn-k$N{TCcxZ~a2@m_8_K)HG~@O2I4_UkF< zH-P^}cy5B{LlC|dem@4!o$%ZR;k)7Y6V!M&<+d+^_bc#x6|z1Bzh9?D75w}No}a?= zb9jCQ&+j1DAK>>-@caXwf5P)`cwU3&Kk%fXDi6SO1w4n~xklmqI)$sZD8?;{GM5mQ zP+~8_<Mu*QHif7alPjy{q&?H7)3V9)(;j8Y<jMsQgx{)$v}d|n2I-5<^m)tEOO&$O zd2Q*XOO$2vYImoXEG3owgf5%6H@$=|TXhvp@1teQK1kCml(Nb5K1|b|YbhzanG#ZV z3piD`q4N<+Xw{UD)Aa3BQon~HdhpJx`XqRlOs5r-KLs8JF_l&KV$`SUbU;{nKltyX z;Hx?Uz6U5Rt9p>8KSN37Lx8ia@)4STn35@<1uC_l183Qz=zJd1YHPnl(_f%UWo6}) zH2pYzf?`3R1}u+LEMnzz()$FU`W7W>*|N%t@6dGj<Mi891_rGF)?aOgDns=9beJBc zquygV@9~`XrJVN%Iqwg1-XG_@KgoH2mh=81=lx~Q`|F(d<(&67Iqz?C-rwiEf6RIR zob&!A=RJ}0ik$bAocFIe@85FXzvsOFm-GHB=Y2KjeLd%WBj+8-c`sK+y&uSV59YjA z=Db(syjSPEAIy2L&3UiSd2h&hZ_Igb%6UJO^L{wzy*cN-RiT$w7@W}A7qyVt)V8LD zOrrea7BY+Km$Z;VYSf^aseL;hVmQugAw|?Vt%a1(g2GlZg}TD6q>>iyz{3sqPCU3M zax5oyLW>u)5Em_(kEa`@b6Uw%TGrk|+_ZdK3z<PHym$^W;T^4H8l4zvB@Q|%+CnDM z$*~qPomO_VkeRe<Z3`)-Q{pY8nodpNS&3&?3n{15Hnxxnbb99sQblLX!V?p3R}1md znHRJY51sYS7BZPuZ@?3l*>mw!WlmcQDW-E5qQ&jJNiC#|)|9u93Ob+Icu1?n^Y)Nh zNmWXfkW#6rRG}eSsj5^pLbhcElrk1#0H)D7^in*DSuhuhsj_wE?MKEA>U{%mKVsCr zL-CH_?M9m7*r9qmI@J@@rn+{pu$IsgwoZ0}+F9WaE`xd}UI(ic?J#NzIt^)}t1xZe zD=txqhzm(2c-o1m%9!67oFXp>O52YL&tRt0A*P{u58A+9O(BmL^Ar=Gm^GMicuG~s zP`z5rfq-`;04zY$zv2{g!BZV65cA9km#C2ug<?KNkceB<nw}!z^OEFIycpjQeuzsH zXFQP-;X@-@8MJPy!Miy!G9pp>;GQD<rbZCWf0@R#cLPJx&e(%?#?vS`(-m-LsI8)P zFcT`L>53Q=D>7ahnm~t2D}mdUnb1TsN360K4O#rHj<Pn<j&zE=#Dz9VYalQSQqIGa zb%U9q;m{;i;#)88R%Td@Gl7H6CI_3v77OQA3+FbI)cLE?pcfdP48Rwfz!xIB7mABA zUIjTjf`+|luzMZW@pin<rs_DtZHE%k?IJwnDP?GIT-_#OL$X<?hCH-5fcM!1ln&7` z7@9^PkB9@C(`mZum`Gq@oL*9hh1r$OG=t6&$sw~s00Z7l;*=kR%HovY(hvi)+QeSG zWrs81Y8x<>rY7fUX^@NVbR|vEcsMf@@+$IDlMm4F%%RMhnTje7Li})OmQsxO2wzFV z)k7K2nrc-QSJCinfSIkRmW}cnK>ksQd<pp|MH5}%yFhYr7hR1;xe3SIV+pr3N_I;l z+<T~On*#AkH07O>3C&gJh)>C@D^(DSHo$nVW!!o%FuH`I+p0VO?h5q?6%WwCp->Gy zcpMFQhcco03SR8<89F#z6FMAaheHdXmL8Or!>WsE58D9Yv+|OmnK8|iu8!F}>De*v zN&8~DC+&|J_^CL%CmqDk$JOEI<LYAtSe|Er;!=w43gtO)H>%&H;yId0Gyv^yQoO7P zzlR#0nV9)#aTFVKGy66b--de3gl1ACSF=StFYg_Cfkw4Nqim<9Qm4FU<U5!kZ)$%L zuNO)*CQ2Zp=6sQ%gAi;EEu@EQE)qj{3G?BD$KCHxi1<E`t4>ruS}ZSezF0d-#ZhRU zOsJY-!GPQ`N$xm}+D;<((kQtf0XbWi+$G{C6!6z<KRlR8EJB(<>K~K{7?i`a6SE&J zjv%QWwx3h+b7=icXg0;_15&?`q<%@G{3KGp8YT4`yiGbwYNz-e%@Tov{XSc;LqH9N z>aZ{2vkLYO{wFH_M8m#J$VaiAfZCrWwZG7)eiF44qtyNi)buR1i1<6gE=E%S$dalA zQvU=}{)GS0;#o*4rvHnIf6=f%6Y^7(hMErXI?bz#-^*{nX2O9)z{(OgMyME};Xo!7 zpeQ>v32{Kl%kmgxxk9nN0O-doyX*%QaZoY81Bj9am2u^0mYPm+NI4vJBpNaIKFAHD zJAPfu%H8F-MiJL2;krzyj-rS{?hoeYz7}#j&D;wiHw^vZ`b7Ps#q%-uJDoQu;szyL zp9$4dl<k^J#f?g|AhG0dP0wL*6MB~(uIa<CEq++RE6E+^y)Z6ur-Byu3ifGtn`Jpa z1>)~f%pQM_Qj-*)P%??-hie87XA&)k@rxMv7Qi7?g%3%vedHk+?Do@#74a~DwjMkt z9#KFg&H+w83lS@<)&w0?^FHx8<=`<i0Ihky_yQ&#uDR?m<oJ>@RFkGPm($Qn01%Hu z@B<XT049S^K=2@~xzY^Q9HQdO%Fto>MSfh!HEQptBs(j}Q;K+635PPF5GabTDWE6{ zQI*93<lBm=C%+9GUrQ<eTnBR?ydw!K!Iep@miKVIsF<Te2BRSo#>ydOFw`cs_%Qg| zA@TbPYSA^I-Ht-cc@T39iMg?M9YE|ySi3*QsG@AtPciCe7*(uTZSWNpqMlR-t3zw4 zH08JA|BmthPzPt3@uiB5X-{IU|4Wr45Z<(RJ0<^u*~LdG{kJMh@+$lktFNiz->Mv7 zlE=iWYPf1mm1O)ibqMb-?2@;r-9g#ws(4+(t&6fm38EDLQHP^iXgyTi8)~Mw0l#9v zqFQcDtHOZ<@3<o_d`;*IHk=!}<jwk5F*n}O^_m)GUo$U0Bol6cX~DJfyPjnlXWDPD z6rW*OiVD=&6?he#hkS<N*oE$N1>Gg;!%RHPJn4C$7e33Zk!&N1{0#Oa6Q5(&cqRe9 z#LPx{oS7~61T&lD%WN>pLK~n!PqOT!Lla-Mpq_%lwTWk#H5@h~^21d7Iul=qxG011 zdLu&y#Wxs^l2IEBlak)Eqj;ZVQCpk%HnT=fnfg2w9EQ+x4diYWl=gefl)LX?x#;&~ z8NbKGP?j*hw)1@k;~pYBhGmu2x(Ug*i65{bKvseGoE8GImn~#3GrWav0@ci!&Z}1R ztC9w~p9X<IQtGQrj7Z>#_%_WB06w6Zzz0Bz?xPfcrYTow;tI{2eI$?Lr+f`@rDj&t zq0xA8P&3=SDesG%L*OrZ5t{jG4P<)~Qh5hZxz?g`t%e`Xq1Q?(*K6YXlc?NeQTb4g z$_-<w$nRnfg9HMd?*g5hk<MhCX4V6p+aw)WINzp;k7!b&ab9vf;e2{-j15Ow#EBn1 zIX0AmN$l;~YF#0)Ua>mb9gtakOy(+rDyqt=le;8RSb*Q9iNlzjfqC)WNOwv$>nAbm zr)1Vb$U4=0(+h+f;~&(p#y#1%M=|d6GHzNn?u!`rB^fszRa6w>zADLnfs(I6Z9PWm z)9_QQd`%NiX|M(W#yxG~X)RovNtCXsrRmyZ;%l0`<Fg!V@)>O?Gn^<%Yz}Qf<)_K3 zJOQ-qmr!Zn(1w8045ZWplroai<CJ88#1oX_&zGrkR1-s*Ip<H5gtsQPmb&GqKFz3b z?V4HwwRm(CWGGQ`;J7#j?S-(YJ&$Ynz5vKA#8oCL4*^jx5{;qoS|ahXhNS7sCe7by z;x`&h_7bZ@+wl7uzlEHDLcYiMI}PU5e}D*@pz?i$KWXOV-;J|Zp=Izp7NPT@xPR4V zwc*8WAQeZXrnG4N%cS)$Sxg0gzDCv8HSxOHa>WKAh&+i33|PR=-r^TM{$m!=Bg_AW z77o=s15?`z4$E;RZ5y)IJ@TEq%WaVS4QfRlu6dRo9x?&1u*pcMB~J+=Iyf3exhxTf zY#>pyu*bX)dyGx0#p6=&t^>VTOs}_z>uk6j6W8O<F?s*&3HnW{++Y(ojADaK;zrxB zM}9u_CL2h>g@<LHp{J9_PF}MO<<@MU!`@`eK*d#K8(o6k$%ggTO>VQvdc&V@Q{^_B z_z0Hrd73#4Gx1@wc(>cK%QF1J)khKF1z8P6X8Ok<CKQ6ceJ7T4Hj+qV+uUW*xXYw* zmr3I;oA?Bx`0f}QpB$yph@Y4_g~q3CW;=p#K+^XpMoQth7eQZ?VR3(!kq3~GIoUVj zTtW|b=fC*Tc`3x1?|uBN{B(AdYvcPY^GW#kFdfI5!GzfPHd!1>?4y^LnC6C6r(wcm z_EeL~ytn?xw^Xza6!0YNOvZSo4bDjxoa3BzOVf^%?KpX?Gt%1|?=F!@<k29qB@f>! z$HtAdJaOd`F({2nPFn*xdql^mF{syX+HZ_w)pEv5ili}&vbJTsyHU{4$$-Z!HSaNv z_83}`*teY5zR`>y*HlaG-4n?-LEzSL$ha10N`HLX>B>4<K-1Et@^o;?OS^WPm(>@p z?@M{QdUkimd+=1SW9sR$Sml{@y7XA?HYlj?a{(LsTH$GPjQc{-X=?zhTXITMjum}9 zJ$=10WW=(9<u*SlfG15RAE&cMGDcBVo{89LjTmW?cIDlSb9O^pv}7A&xNBMVW({5~ z3)~r}Z6WJW4eia&2-DKLpT?@r2!f`tc_rJ7pIpe5EJCAdPk(&+8BxeQr)4C2MazOS z3CgM0vdlaa_~_Swa+k}TmOiQs1U)kVNHUF|&X_dM-gL(4mCtCW9>*T@^oEzGvD8G% z)3Q9PMl5wChKKnj^1X~m|LN=}a|W5x@^Qv#Egy3z(fYCZO<F(Za!YH+lT9GeEK*sp z;ACsr>eE%<NpPkm?AQ;eNOM7Dd#|!RrEKq~c52W9T0QR!7*DRIsi$u|sf9-kHFLHs z`PLN5+O0MZit`e>aO`3CX%SmcC)pKv&Ik@*`R^5KvhL4lJF)X^vYp7zKjgbf4gLnd zo@G$;`<i@p%-_`DW6kw}=KS{}8-4W*haFbu!w-V^>gu>v4Unt8G05rzP0g&a$=Adh z8vse8zp;VU)d!m)xvsvM)ipIk*x%S>&kZ50E*NZNjlp1(o>gr49u!11G}W;>%+~1h z`&dJBu-=iU9$9^Z&u`CZDb`S5@6%+tPCEC`Uhm~^4AvR)Vjo_v=uW*-U!=DxR6QRL z`&AuZAZK>2IXKfelkbqTLeAXzA0gqajI(miCU9*Mw@v1@Dy~i8s{9ZMo5tC6&g3OO zs`)vRYJBlYorCW_sq)<?Ey!6tp82z8{3r>p;=G*m$($|b>Qb(^aJG`ORa^^kwwg0} z=5O1^*+raP%+>8&4Rdt|XKOf%a2CT)ldui=6%y9V^*(NUA7@pZ0k$;d>;N^cpzwPT zo)5xv13Wjub2B`^#mC|2Zg}p6=YGo7Bk+6%{14*YGv+(+HhHxWzWQEN0qfg&3MraT zNRf}wBE_F(L<zuJtqwxd8`1@2`V#QXY)daAMeX1Vo|j&u6a|Bu((5;n;ATRCTj1FW zInGD83)1DZ$a6{hLS?3>r6+yi#dKzHUwRGoc=o5~Dn&Dcm(%pS--DhHpa)r+bR|^| z(W~iI^cp(qy*B5)F6X^I=e;rK{ZP*P;hguDocGq8_qLq(BRTKwIqyev-aB&MkLA2~ z=Dc_1yoYn%dve}S<h-BEc|Vo&emdv9FXw$A=Y5FMEn5wRw$X|0ctT3n;5jU%@)iPR zF&?<8=gA9?*5V1U#v(+awsm*}%O~OCuD(1%%BbPS>yYf#t)z%L)<=m>om26UwV(!% zU|kdOxVLb_3cT*fjh7)6ZNyXM;wceQN=r82O-rS#T8W#Mt;B1S$~WQ5Zxx&I2zdgm z#3s=#cn8A7$@zC6D5_?g`id&5%{vgP@fw3_F?(>Ror*bwnNBL^nwJ-8w#xvlX3!_* z53XXc4y+waQ1e5rKJa--NP|^k06&Ogo}30(i+UM~aM2*Ym7*u~gb}fe#?g=?;uK97 z^8P<_Zvq|1aUF_wRd-L#f*B09!43>akRV8qoP7aT03--f6t$4rY(dljm?0p70EGcX zQj(>Swabz$+p;X%vP{{QH+hp~JGSG<iXCT<1Avi~<i|gDlK206etu!+WjW4&d58br zTir8*l>kUOZ_b%p)zwwE)~@B=TlZc}xs9ah^BA3`uhiHkQFx8*$QM;roBJai%F%_2 z7~X~=*D77!e?`hokCoS+S=jgD6O=Dgj{H#Tp#t*QXFXIxHhoq$`>`&pw~F=qGQLc8 zCF(LdK-g-KQA%XCLl`+Dq;2Nwrh4m?b}wpPx<Q6h?D|Ty$$F#rHh@QDc%N~z_W-JC zm`2qN??~1ExAZrq`6%mcg2ubGznT2ati93BjrVvP%-GC|{oX=sjM2TmOuKl|xYOUq z&wQ7?$r>8L`4#iG;0<=&Rt*g`0v&c&zD4SxeU1~y7G8Vd^%%T9*}t}9>w&d+ecr~o zREaSuhr^_CYRaEt#ywNL*yX3Ers3htK2pl0+fXUfy@238XfssGWa)``0Ky)`mTg6) zM~Jc>LLVolrCWKNA)6FRgi3p!BtE2oD90emhfGyLA4dB(s8S!0P}?~PmJoDLW!g}e z)CN7b=56C6Y??w#Q|-p{rr(>|XnfT4ds3T>7f@dk8k6`KLpqHMMa^DCbsnD}w&&(| zFR)$8C)fqH8zvLulZ>cDlQ^i5Un_^h^i1y-x<ZQF&d)I8Wm&MTCL#aR^te71FwU`k z#%EdoW=a654{YX;12S{ZW5*h=vh%9(1%^~5<BJ%fHwZ2JB}(50>0e?q)0t4!L(s3U zkvb-9)ha0LS5afp*YYX8PIp*Qg~?fX`MRvhI~Uji<#n`$lP`D0ZYneTEoQtiyUgFp zm-*XJ=I>&et@6HOd=I(ESl;im8P)hfKHJ~P7xYamfJcM2d>-5KEh<3-+VYU{7PRGc z>@9{`nyhks)#AomAv0gUr@RZxc0K<CRN^$NY`>Q;+fSfuf5`eH(=%AOhzeO4e`Gc0 zA7f+wX})lOmM`2-v2dl#9OYBkbkmGJ_CDe;$?(6x@V6<vqL0{2GW@SF{I4mz98D0z zjBSfT_|Gx?7qX;YNh$n0^Qq7H2WE{{YlKF*)GZ~)|1X(TclJwW{C9KwdyQX_dMOp6 zG(nVqq$sy4|HzCBtUorDiBI>&c)LOLv?|r9+rFbhwErnPdr<S|8jt~$K$d+HS@xaC zvX2Zp5Xt|9PIwPPc$EJ$Gya+RAAQ&O7x*kTXEwhfg)4g0e`UtMV#oJxW{9xkPUGJs zb9XyC*D-KzYCy~EK>wrfdZSD+ehtYRG7To9cS!qpX8b$rZ<y|FU|5unwDG_5$sq}6 zXp(2TKaok8Niuql8#&&enC?w5EO^H;i#IHj{JF^+PG*vClyAW#!#2qqPEPkG8CDYt z`B*+l$H=(>k=cPspGWo?B<;*}nn~{xPjcf)-rqUh+sUwTAn8-HlG<fboTZ<(c*=56 z+MnUZGX<Wq1Cl;loYeRrpBivvcGBbVbLih?)&ZA=4@2CUy}LQI`SZjy_Mw%%zrio% zW5h%~pnQzOyu)7P#)}+fB&K`2*`x1xA$Lc|N#m2qw|$9wU&hC~jhFH9)7<+(e4H>| z!N<>VZw?=`#^><yRqnkT9=)SzsEbd(YkY#!oL_z3G~a^eQzng1@$;tn7Bru7$~b2} zb26WDkMUXaSuL1P(a3y?W>@P!d-0-n?Bd0HE?#`};>G7LUWDh4)5aH&nS2^~$<+)- zas$-yTU5u5%D1@jZEk&@-{Cm@*5H(J0OEX);@qoz58B~AhVXv=eQtc8T0_nfJq#M9 z<AHNinLWtpp33Y+F8ps}+n(RstF{|IKwfaIh4D=j<C}!>O~Uv?Zv60)7~hf@_o*hs zyRM+zXl+{QzbSK50J$>+NV(DByxO;Y+9geKlRk$6y}RYgo8mTexP&QgGuGBiN0C;t z%}_k>7h4N<&q{M?<J_yw)}lGza%FH!g>yx9^6Woc93(a79J(@@&DE5$lxCgeGO}Da z*t>u4J?XJY#75Mti4vJj8bh;dE{(UOxWRw3maYp!mWUw1NGPNQ!;!dqRzGRMSU6Eo zi4qFOlD>rzsfk$3hDxG*9$&e=0*+dYm5{0^yI@YzN>}PAV?wVKdcDva1#5ORb5Ufm zTI6hs>QIokoP#OcOUg|2D(<VPt|eGUuz_F`K|k80W;R_DWRzN<rV?f+`v9b`L`7o& z(gd|uunAyW)CBe6lEpY?c=>uO-deY2k)v13XcT3&4YPv2VI%V|N^Zdjofu*367TY= zk9-S9(l8Rz$a`0t0e!DM;}DKtbN6b|oJ`@(PP(9Y*+}wgJ4j(i&uXy^r?OpRgX!$# z_=Giq^jt<aSh)7C7DviNAn&vj1^M!NEzf3<Jj5%3EQ^=bSBWMwk<JdM$F8SN>>3*? zC~Qh+S3UkMtxl^(U}=t8b=ME2N7Iv1m6b_^EzL@9uvI;}u3328x7wUc1p}69uddbN z8Oa`!=De?2ErtSHJ3q#*7%u3L1DA=*yswMJx>Bg1RJ&F^LQb7TEhwuVqBzT8T~?34 z<RO|o=~d&gc%g?@Ka(uPE8VmDK9Uu}2mew?5Y#Ub!I7VP|5Hrc<+mOAeOfRP(djeQ zLZMjHRkXaQ$#~FJv~;P7NThVmH>8Ckkx=QJ=|T$yVj-JcLe+RA<}6I>S}+t#*sYlm zc7w^JFbAy`iV-Kv+61VvP~2{9I@D+)0eJ;NYCIT$ePtj_5-wUOo{V^Ae?WjI9Cj7W zm0B<!2{kOWCcthrkRU-8EtCY*p=dI)fE*0G42MdJhXPv72$CQVlq41{X#NXE6G=51 zOK3jb$LyP6gV=;7ueiWVuXy9NT<|)y(WiC@HH4-p)EF|d@a8HpuhiXSv0{%<d+EaJ zwPd~G2B97n>dlr7i`yMG)_^-q*nes{m8|+P*zu~&m2<)l)su7M&NSy%^fE=^6=*@L zDp#qfK8#bHb8?llnw;unHeQ=kRh4sFW3Ilzsc20QzZv8EAwF+G-x~0-wGiH_C}JJB zZSda!{&rM;PP^;6&3sE>Ymi`=V3c5-V3OcAf;$NABG^T+hu~g<`v~?C+)wZT!Gi=3 z5xkz@jRcPnyoul~1aBkwUV{Au?_jX|SL$l*WWmCL92G{k1}*i2XiNgt4|<sHL1SRH z(r(30>IX|m{a__?l%u9uX9a4Sb(J7zro@AX19xc;@^dP?6(1|DLY|M;his#=YUBl# z*K{k@tfC4zJe9TGN)4;3Lw1s{zFVnc)eXqiL4Hm>V|cKrEvPiCFB~jN`Wx|J!Aw!S z`)ZdwSRlu?_;B$_*1X7^l#hArYMwr<Tu?7Ps+!txiPGdNu+(9LjW~`Dnp2J`2xPa? zd5Usu4TqPl((jT5%TGvf(&@NV<iR2(zNR59oGaMmQY%Ds8Aa$FnaIj=+%hsbjA~}K zEUPT})0KlB@r9iHrR3Y%)Fd3$Pfq$L$Neys`6-frbR<h5Ba_+mXoiikLAzBkQhj31 z^hLA$l9TNvn>as-l5YOvBSYEzyt-+*X(3;KPim}fl4NX9FVAS&tPa+V>U7D1Sj&{{ z_{ivJddO58=wGUGC_{J2LKdw}m)O92<;n`h?;AgTZEEanWj+8q-V79D>C=eV1+G<l z&)BIGhYF86<T;sY9g(H<kBr@u8XXzh<{umPTYU+E)GR8rA-hXb&)k&Y$oL*AF>3og zGQOX5LD{k=M@I%1-8ALvI%jLpeyRBR6N7b7-hQbROLd2BJcDYHigp$G9mVd;!HeD8 znoYs3?QG9*dhqz7kuI6brI0vHiA{*xB)_w)e`p*BHp%L2^IK}GQ11*>aLC^(hq=|& z3rF5_x#hyjEpN`5LmOC0BIvq}mx^8>_bfLmV3qWo;?3?QKiZ;=@TO(V&{o{SeqWp# z%MOoZ7EtRocMdD2&Zq;YGM25(4a`4l_sQBXxdIhOzvO&p9lBzd?xKYbS99g2+b%f| z%8mae%VnKPFCEc5eTFaHEc2)eD^3H$D74HpMO1>7CV^a*JSZN!ng_+AO%xp#ld)vH zYQgOX9GOCKIzgf6Vlt}5qluUn4hECOCrB+BNCve;JQC63@nFz8`9Tsm#sLfll60&C zZ!((D5{W=`fnylFjYX1LA{h+2iq?BA5)DSRL=X;S$q;HW3MAry1Ij%2&?+@J6;7d% z7^Dd%;vrNHg^G^?k>IQYWCW4SJ>*8CK{%2I6X7}MPt;@;3ZsVlp#M^{s0KAe)mNb~ zB#6X9P>N8}r8A!m?Ir3Z)i%4kj@5bWRmCcmP}`9(<tw?Xo{>~#xo}npjZ7qJO+qva zr(Zaw45bvNB+c>8TE`|vn&Ul=I1^&K&~^!}TWCEfD9QH;?M5MPCK1Wo9gvH56G}sB zCxtdCv@=4xPiPMa?IA|;n~#I@B>bO+|8wyF2>f4Q4i{g80)}uZ)yeD+gOgOwu81-? zHQ9W*3dL5fuyVFGSINpnTW%dMx3Tt|y^>YiHs|bWxy@F+Be!L1rBb(3QOb8iT-%;p zmr~xV@N#CmCg-;+wu2aYD0i*Gu0vec1FkyT;oJ?7!;#z#inv8lTJBI3+fn%62}h*? za0el52;4NL%|Ke)G4u_C4~p9|!tWYAeuCgQ!Mh1g5X=%hMerVirwN`VcrU^G3BHfu zg9LMoocBxTVd*>~okykfm~@_y&QsF)fOMXg&NI^apmaVYoexXrdFgyqIv<nHi_-bH zbUwkDR_##PTIO%X1FEu)H1Ds+gD7{PmKn7IkHK0S9&z<DJl3M-{SqcNpxPVz8WdS{ zw4+KJXBi%nT^qaM_*z0Di|$RR<i^v8N^we?QICwbqg$zGWhDAozPU$fVij9Z?@T4% ztq6rx(aG4ixm#&u)mu>xvL=A1<k|+*lT#P$QT(hPPR2TG2;o`0F^Fn%np}9!Zib$0 zVH%#2{cDQtI5N`$;YKOuwh=u06=Rd73?>1uHsdS1vf0=&mEr!^P<qKBwYBh!`VFZ_ zWUIf=2=;4e&Mu?(YA6J!TGk5VQvo9ZZ%~;E-rCDR*fx~gVeejG70Nb1&bAxdN!Dy5 z-AJtDJB%IuXdG__urUTPjh*K+_G!|Nvg>@Gv0dIp<mOF8hrEdh<@xG8Wk0xh(dhP* zc||BeBjmOhO3;h3=^E%hH0QXVVv{}=o2I{tl9V@21zMGNTNRWhVt6UOQn~R0t6?`A zho_|==aGHJ&HdUm)Gw#KW85;6ag?J5hg)YCgo@2yyQdtbqHgPVcGMqmGS#>p0{s>5 zhp>K(UonEhH4Xd@sJ?pCxMK#(lYQ4X3hgkcd3RGoG-`JmclI-QH=vm<F{m4<sf=qt z?=4~N#^8WHm2w+H19ZbwZDp^dJjT%h?Jc@7f4=H_7cY8C(Fo<#OvaVs#_=gMdF2g4 z&`D|#EaTl%{o;U7hPjc&4kW~rGgB$AacU-yw#+z<(vH}H*GOqc*@5end$9xWGw!1f zTw`|N{l@+MY`V~W@0&VLrYG;ij+>dzs8#PkH$8}U;ZX|&$~->A<Uo6f0Rr|ADxER) z;XKUt8IM9MRFe9c#~8Hf25M8ZO39`4>60v9iw{V%iYeWAn$2MIJi}(Dp<SMps$(F# z9?0%FGrQ*?yN&F5M#d@4A@X4c<N0}p1KKs+TgA*CC-F%iiBIDFXQy7K>Hnbtu1_-@ zJ7{QZ&<TH+Kc@|rfX5Ag4?dKF$9sWoQ9cd1ZDj~6Il_SYS%5+9a{xp7s{q5c&jXBz zZvc$iUuVWSMmm_VlCNOZV^sCeLY-b|W#{mI@vBhM^Hjz`oAG((&xt`{d=WLfILfj2 zzl2^FhI(t^@hhxfw6X(&QM|9R0Wo0ftzjrhIUryV!Vvq0>9ZTJvjJ^De<eHUFy3GT zj#i~|0tarw@hvEy-T7^1d<(@y2c5>Z*>rZ$h3Y?G1SDPGVa9i$T!7q3Qvx;#S-f-& zxCTm~bH2+4N^p>U58MG446yIB0q0v1(|`*+5OK!$I*i~7rWn6NnR}kX%sWed1erIw zf6R;@%FIzf*nyIl&|d@2b23xN<A)~70q20d>Th7g{fJEu*rCzf#*f*6J3Hv{wo-XF zdVa!;pU55`a9dqISc=g+fWb51nen|12>!qv1KtO)B-=`V%8WlLF2kSBE5n}@%Aiph ze#!>)0S%heYy3I1E++M3(kUxxt75iVt=f)JtmJytUqbR3YZU$knKiYh*>_MR^Ig_P z>Q^8PC1w9F4Eq~4)v8c}pGiqsUDHS4<=>L<BpcK&urB3qp+Oti&#_tgFHnKcRHi=r zj`0iV(|5gFWtXad$56@>MNS)-oQyQ%@1X|g;p6%TaPeFF1tU!XGgW^AMg4zBGFCOs zvi?^r&3|K4{??1VjlA9XC5fiu{QGs32K*J3rwM0Xzw#>_T?}CZ|7R?f`Y+7*A835l zTTuyP_#g30=$k&*vHu(douf~}fUiAMMz8+~Umuu}ugm1?f2KO2<foisx5!#)Qu4D2 zwQw|`Ksgq{_&4Yy48d~#3oA^hSgT(%OF4@hiv7Q^R{sGwNp2R_%rXePNR!L8%0*`6 zxMgh>d+A}++wus<<*CAo{1^%ARVt5h<8e+#R=I4jr|88E3QB7BHZxdbQ1c1yW)H&K zXUw<HaGWon<tUYzWA7LrgyqK#9&a^i#DFJQIJu(C^cf#EUm4G#UY(!gg?%cD4{_d! za^QsXCgml<`6+IEl0)-a+9F=!G{xq`+o<pd@w{y1Re^b(gITxN4+HHLE1yqeKK}su ze3m30t8w}GC3f}~ICi%7F3RV=#<8zo=f)R#euv?d3n{EUin)@0iTAfm^|r9S4sN{0 zAAQ^S3dDB2P>wd4zsjdO-g6GZzQ(6zEPVJnguWL&uX9?Pc9?6^H@WdmPMeh(b7p$i zc!STt?1Fb3zGbEQ4xc{XyGD@+me_B6399#9Sr$zHJxJe=iGEuOd0OKHMKX;aavCSK zR^X2?@W(Q+4!_!R2>e3~{38w{IE4e3xEb=zpW>T8D|*vly_v!{(?xF@tv7#xZ{99? z(`4EB{Yx$f>0ff=uZrF`TPgnrQ~s>zjo(W7b2H`7x$%pl_bmnMz-#-%vveV7c`?x; z=aLMV8`GyJMkYyX|6WNCDY6v|!%*p6jB>hY%F|bqL9<w{aPk+aq0~t@yqBlti#_Qq zp#}WH43fMJyZMww3Uc2HtG8&2Ey4kEAzh+Nmdvt8Y+7X+JT;LWpU{U!CMM5DS6YmM zY6PAhCHBUpc}H%^Uoa7cSDGc#+sDY%v3?Y9hpI!TP9|20gszn$O>n&4jI;N|$w^a> zcK))oZE~Ch6wD|+sfnSHvDE0u<k@_b#wCVAYiQR>%T=&9Ky_PK!@`c$V}-Wbz53L$ zIZWo^ww2-;PGt|76i16&vEqKiZntcFuDEfB3ZEk4Sdvh9`f3siml!idI1GnEVJ#9& zM8OwJ3bWy~crY3;wW>q{$)pw!2NQN{Bx_MrNFGYYVp=GI1hsG=gk;8q7L5al2VzNA zQ3Gi4XgI9J5`jp~Vx`eS!C=@)SC+ZYWv|j(s$EE3E2gb!&7`PYBSq!%5_5@A>H0D! z6WD4wiX3wv+GIo#4l>Kg@yc>N6Y5%_w&4|Jb(1C2kwgvT+8)OqUV>yMRe@}r(j2x; zag`~|Wv|XvD0bL(+t(<}ZeN$H0Jt8)syD#GyAh779b_uoTO?c&T13PmL9nw(&|-U$ zxW&#Qp^M!FyNg9HSfky+6;{fKP^0L0!IkmdicMj>7G)vSI;7EPo^Hj#^m-&C*_^wT zYNwM4_in`wrFZOxt%AxN+HTZD?kq*g3RgLjh)No|6(@6(F-J5}>0*sY$0;o-rsLqo z>Ikf{eUgsThqqS&*mxfV?N^NbQ!~TNI50I0=i_V6`zzMMPUYbFel?@MK}W<xQ}poo zu;xX@TQ|ZUA8)bVB(J>6?da{W9q5O%#IVD-V`}}d(>O{uQDIMT9Nwld=L#id44TxE zp?#>FR`XYoW?Jw`%EItI<F2WU+fNrtk3)gn#^^p{e5zk<)eop>G5jRNg%}k3?kPV+ zn8>Hjl2Kw9b4M*Ag#DchtVX#H@@Dtr1x!!&ZR34Y87J-{D`*$#nEr;PUv9dU!FCcA zOg)H{5J-#~Z)bYFtj~CuSwWA`@m|M+(l>Fl`V8&nYm{g4AOeSX<5?#2`5>Ey12HOy zdXDv%;kCRnIB0yBVV<Qe5d0B{!071yJnFD@_m)FOA7lL$7`KAa#Y<?53f#ngl1*)V zH{*Cq>X~z(o;l;CLaI-r7uv;<sf1@N=D7tDyh25{SsS%4G1)6$LT$MHRUNGds&Jzw z@aTbCyl<HAzro<3kK0u{c6K-3Tf$?_x2bdm#d(l>E2I01@X@uy`5ybXpbQLNqfvC< zSMQP6T{V3d-fl8m@B0i+_@sX9w`HYK%i|AND}#_X2~!0Qi61h;(P#WF708KOWxPxK zdsv{KFnPn)RoH26>Tkl^T>%8R(`?M|G-tHs?lcdd8o;2UohJO&E@PuPJK=9?qd6<r z<!v<kR#=xsTW7_)N;Zc3LE5Cz#&V_GcWYNlyC944wPp!1AhQ&SmDU*XBW}zC@$6VB zf?0bjyM^xmh`q(!5hG1OM*|VuGQ(COIBV^n6?^eb0qjA7LT5g^kJotZl{HK$MH3}x zj^1TyEs-iqG@(}r9ajDtVS_c_FL;YC*L2uF2y0DOt5AHeI_IWWwY;vOzL8)v!8Oe7 zao~#T!nIT>N#P<(R_ooU&4KI1+8ppAq#tGizg!RfxE}g(J@gwbc*AkOYOJBPP1S8f z5HE;Ji3&?ei4wZN+$?N_`n8M(Q&R-BhvJl12{RnsR-Ut(RKcVb?-#v70R%<@=b@Qi z2h7;p@`2lNQdaT)Gp?h%<n{ku#%_!|-RoqeXFh+?vMH_LS{&&2WIP1uqNO`Ouid)n zye4(}%$mhomGo6o9axkZ-j6!Ia}nKV=GU?0+s=bW=Ia%ddgpL|&qnrK4sy$U<29Fq zWU`<yiSB_G>rWzCGz}%tuD!f0<jje(0i;XFoJnuIQb;MBFt;y_vdCXBY23JE8oSlX zOHO#{t2E)w9*lB&3&(@5qF#gfE}ZZ!+#GPa3Wxc@BU&&S36#z22Q8EcC0s>$z}y#& zNfGr5_;B5(h&pq@S;tWh$C*l@)(N#is7*rk3%16whS>}9<^UZzyP`T3u5s?kmAJXa zm=|0{DI<AsThVRHdV-Avn+diMT+3W=NYHJ%t;@V~35e}@aKJm4ut9R-K?5fXC>S0Y z^uo<cQ4o-B?k_<BX_q;>?5tUAb}3SUSTx6|%0+4M{bja*=DPW5j$fteXkJb*4vM?q zQV=RhZl)!|lA}d2qRS}${6?5RZxv4sID6@Xqv_N{^+E+~4JVc@Va-m?QH?rR1!{OX z<u9JbifpS7rO&X*f{L|8KXp0ZNo(UnBiX^!#8A1}u-Dy_o|qUJLhFJgti7l%%)E(4 zr-|Wkda~xI>Ax<M>5=%Pj!>x>QQl8MqT*uOQY%p(93+-aBr#+Y%W09qwhbnz(e6{3 zOnSm3Y;9UjdQ+n&8)0MJE6Z=8BJaO^6gQ@!C$ecNsu^DnzN|TQqd=O8C9<4!W}oHL zRxi?t+g5;VZd!{#=q&Wk=H;NXmZNOZ>Rg%+>?T98p%o#br9j6<&3d3Plj#XlO>5S6 zB8}z_!z)53i(p$#NoWe=<C(yUQo%ybj`M@v1;xVamy`bBk@_V@Szu-3^<a0$O3DmN z^76{q<s40AC$CLS98XVdSWb!)5Y={q;xFqfpMZmODw|$b=`GUqvc~C%CE(h=ykc0I zv^$m;{WRb|GQM&7kvA-F!bl%q@p3a;NAt2q{DS(L=kL!tmRA&+3I)SSSk`WZL|2kL zpK0exQx&$Gv$m2rT9({1AHPa_=7lySQd&6}3&8d{kr3vn*OGyFREtLvNlSmU7Kw!- zS~L+$dS=g$S}YihJMv*#ED#K7$wVY+x5lED3`gUrv^A=QBk{0j_N=DGgMoO(0t*s~ z4F|MfA{kv|53dIUu;ni)p6;}GC=#{FjJ0GW6w4n{v_w1^N29G#Eg1`kOqNL`nKZd7 zNmL-4426;!&Jh~q8t~3t?X+k-7}O$(cpPs4C$uoiXeZ;ruoeme-cSruC!^62KiH)u z67iUp2*#3dln6$kEQxs8y!MCMg~MnWme(+!Q}<Lm?WJ|B&TFr=H_c+T>@^L-qOw?B zXlM}D;f7NOQCrX^Y!xzMoHZ!Z42KX`Bie**7A_qRBWjCqtr3Fs!}4`PU600Lc^KI) zJR$gYq3slWw@`b~{HxlFwqKEHbB*9P3g<0?-zNBbgsWeOI~*xaCSOO$>T6K&am(=Q z8Nu%r{C$EyDELE=_rr{g#G(n<r{VuB{O=I_V@zmh_0{WmiSZVx?p3!rP~9tox-yqu znbQ<ko1(bd6=t(_<Te7_oZHA<Hrv+R7KmXB<hC$ZLns$iSQJ%>+LF0gTm{#^13aDR zW4kP$tqXixn8&s^*9~wV!9K!zAh(f(qg^B%ZM#lUY}Z4+H(<zN2yq=j-%UB6qTj42 z8*hdGdlkOXW;+Tf`9_cDPH?dbZG(I$lRidpnBZLmj}tsWaE#zdf)fO@1WysXhu~>~ zX9?a%@P2|15X>=h-Y=a;r1PkB9+S@F(s@EUPf6zk(s@QYAC%5>()o~dJ}jM&NauO! zd{jCwNascAd|W!8kj^Ki^C`x<dmJj;!q#uaYr2ZITd|=z%m7MB^K~fitOn_18bTpv zJ&f0QZ4ne@7Mr@1CT5SKI#>tajpt=&BQn!mF_e8Si6cMEt?pKIg?SQPN;4}>qNuaC z6R!oAZ9{XS<xMDoU9ladt}9!SX;xLWTWN4QnQsTmV^^<7S?-#hXmqr87s^-H)!~`B zzLN55C_x2Ajk~*)M%GkHLCtN%$@7<>cy>z{n*Ut0291xdwZjXpvQ`rJUWdZftQ!y7 z>syL>bNJnEk*Zpe7TJZg$Sz~kR6jewP+qkQ8FbxK)5EIKGc_};8GDE_$u)f|q}nG_ z?KAo)1`00s3Z>mRFx7f-*lt`i)$hnSGEPW#kl1mWraxqgGq=5qY8DS)VAbr1ahO;y zN2W3*y>2DvdB^*C5{IhiHyby%-SaL=F_%h4)NSCK$#^qm{pFc*;@-Vy#tKSRp!jm7 z$@K9c7w8Unrg!UKBgrV^&h_`a>qSHZQ<*A^hQeGknTn|ZbwG;0j0VZdQNVT(q8RD( zFO>V>Au}_b@*#(i&-7L!hY*c}B9qW8sd3YcnV*{wdHZWJHJMtp6t(^0MdJjrB<;r7 z)YMeQ-do4OKaN~N6!eWiL!6lk7-!)X%4^k^pxv>1r#8NwvA^}s^i0Zb=XPe?SCsaB zs1+8|qGr4IGpW7r{p<qU#2#kIBt$gXcaTl$Fdk)8)<@X%46?<_iAL-pG5E4x53}lA zb{@+4IPtS=$S>W4!hI&{r<g?bG@JfiK=lD+DSl%qTr+^{S;8f-m~m93NVv8rA7ePS zKE{j}8TKYI9zV{^fmVtf#!M+xy3BZqk>oWLB?!r1Hj}^1kjn_YO9{_e2`kAGXXW&I zNcdTjp|;qIuTsLG@+vbv&tP~~8DAhZw#Y<WW3nI73}?pPdXWq|y~d_`8x^#=DK7-L zG!+d6T8zk;f>O_MM(oI`=^1}-6Uyk9s6x~K9XYYzCmB%>+Ifp9->0|;J2}E_>K~yj zxAw=3IE+@FKQQxrlaa_?Jy}Zqq3lPr(DV*+8e5eTWJmr;GAMr!`qP8s^d~3?{zr`3 zfy7<^7=@g5?|%Ars`WoX>0j!k0iAjY%Vzv3J717uJU?K|czc@}u}F<SLvd;w4f8){ z1NvKlY(Ss!eFOS*3SL2p6e{#IBhg&rJR>W#ZnXc_Zc6!L-QS_Qze9C@hZ*l;YxVoj zAMi8TWFAbg2@?FZnc%M}0m3c(uNg`PV}gwTd~b`HglrrB1Y7wRl%`wx1&PKRIQIEJ zq3my=QUBg-)c-;paGfl8LR0-$YDpB={BMxKbG>U=AIkM+?9=C<sb%xy+yB96)>_+V z82A?Y;Gd8Y{I0hOKZSo~Q!{9atB%2oe<Oin<Dc32X|g@`YpWX(&%fvK{4d!JGt>*H z+7@f`GRw>2b}JXDHXq<vo2R+)5HHl`{an`O5pLDyQ4Y0v9HUIX0yWY}qbdY_fXm`O z%?rhSj$?6O>21a0euz_XpXKMLeOTO&pkOJbM^Rhj1wOl&W%v!Ep3s*}J)tjg<5Rro zvq!DF*5`K4jB}0~ub@cqI!4wu$<ibC_2*Dv^VOnyecr6s7dgyt>xbKnFTqQc5U;dk zkH2C{a(;yyUqjjBDru1pK1js%I;W;a31N#3kNQkWlc^o$c`;{H>HA#_{T`Py@%PDX zGkzNp)?nf5Aj<EUIsFbtQCPGN+iv`jl$KiZCBKVEeuPDBqqjen3P{b$|Ab4e!9U@~ z??ZaX=MV6Gy;U%@$Vt{WaV$4j)%Y_E{V9Z&WZKatAM85x%@96~;WI@|b>3{Mx3Tcn z+|auTC#fbBQGb(}60<n{==eqbCC4uc;qCnI0B%(O9tCM(1d)UUG6-kTPYd2(W9R=( zQGP!&^ZQ#~G%Nj_7iOgnZu}i8&HZ~mU659<*8YJT{~*T)%ogU1qZ|K)pN9#k;~d4e zq}6A9D6Rhg^7Fl$QNFktSBssff0@fE;g?i_UvlHW^J#y<1|u!DxU?I;LN&j>nT!wH z!T3iK755h;FV^+%>F>$(1Q4L)MR%S<`Ieqn1v@xCI+~_4X?E-WgCp6=yddv3<=|?y zzZN0gMo8i08aZ)hOHp_yg>PLbuu~FuE#X0JWHNmsxct<qp`rbdf+*)EX<ic0!z;$o zHEBONk<O$i2ZvXX7|JaZ$5xz%=;)B=_{sFd<XQXp=+MomwAMbBK24tJ@-bqo-E?v& zHJKh-LD{7ykgn0u*h<sLDz6}`tkp~_=-bJ0B0@+WQQd;+2rjK}wsN6_!tC=UNj(Qw zt6a7yyW6cV!sLR+A|^LO3nrssM}Fv`Qm&w@s2jCtI2tS|9w}NR9E_C|x4#w(hmwx` z2-L!{Xv~rCR4tkeC573DT0E2pIr6=r#S-zbXLifzR8*bXQX7LRc?&O*>~kzloTOSv zC0lk&PyW436pX|ox{vv4?RCDe%3vue7fcgO2xb?|=cr*qtw)jv3Ye}dk}=&Z)U84d z3N7M@aCbrZt!m5Z9L{vkobCXJl{^9Sox=sdozpe0!msQJwS<1Ur_`(Pa#RUck%QPO ztAtdF2D<{Kn%KA{4ZN|r$xm<%!B&Fn32q>`kzfbGEd&DuLs1S*mLz{C^CGL)<;=5s z8L@h$dR-f_dUd9`@HnfNkbJ2d&&t9>HdRXTpbbYeR>Hh+KIKkVffHO(-~?~#FGEhS z*VMt=p)SS=Mp>X6)03wr#tsj{RAR}R_!h9FH#h3YRbv0n$p?o2rb`xPD{+R1vMlHE zjmt?gesW=*Df6OEni@@lmySB;nV3~eP81_oi6%V18F3a-L&>;gqp6`lM8k@y;bdYy z>$`MLdNmk|=t$7?Rn)-8iK5{;%7~#vc$rWu9hJ<6L^FlN6l^G}0OQC`Qrnu7yWAxn zf?k5<1gqeP>(JnQ&rzqGqSCjZk*aBwabP-9U{u?zTkf#yv%~HLZQ{ZnhFi~e`K(&c zPWh}^xAou|X)|tVD8}0NX#F;{@*6;a`yL&_q;k0*>x+Fc*QX|+zZUs!HZ5SYZs7#u zSLy3nFgFySI7+=vH0t0o3pwwrl6GCC(7^m5vqH3%%!2bMej|i4uzU>i+g(`#)OvIj zhy1dWSs%W(@>GzSI7)^DvZ3WBl+iK69m`F!VCa$)&iGZDa26YRrjFHQ%w*pO!_lM` z3?)M}H)_FXC~A`x*Mf;a5H<qQxE2hcCYV4niZ=EFkURuou~@un!CdA}R**6fkh2x+ z8x#+2B#_Ty7u+RKg?_1E6?kujOBq&}z|g9mlO`|}Kh?N1CluICkOookdC^y%D^qwS zeCAa&t(EwAb!|-@!3Khj1e*!A5L`oWEx}fT>j<tV*hX+8D{;d#Xm<&+t)|$KZq4ii zC}QS7Eu5+o^>u2F0hr%(M%PMgIyu6HmecGuO6YJ6z}5jTWja_13eviq#e%e!d8;}& zFV{=qdyZCmYEe)X&yhlDGMcCQ)#+Z94Ku^PkLFXEXbmJ<JC)H%^@o{gy-c*;XtNUO z#s-{Vtwft3QO8uq)@NGbs)Vqun5azIY6RfqZ!?0$hPT2HKQfgO^7euhvBj{OseXQd zE5ib(@Hmkz^CGsDX$8%~2m0L^Hvtl{Ey+*hqv~?54lHyF(3;aLLraT~FPQe;-@pZe zg))ZkZGpQ3hgM#LrCP@1-tSliR+!pMtF24UQTP4^r0ExFJ~>^*lM!d3tXe1#3NCVA zVyTOy@~UUST4*RFC#6!_LfMhE3)2$X@$kYV<nS`VQ3(%D0$fLXn1Uu6)y^F*X9+<M z!3y}SVafn3a>`KgFhK_&sTzoDvkW4_w}*tgb&>(K4!+#!{R}=^w1v3AvV~YDl?TCB zi$)O9)L#eA62=zVSQWmw7T7e2j0m7KJpuaS3fIE_o-gN%n{W2m`rgU{OOLAsQl9w@ zd~NfyUHDr&u+q{m-Xi9Aw#dM%T{PWNL(<yG(a2o#8$9zH_y!kjRQUx)qY3%32w1^w z=JKt=fddu3sk5}J(L)J$mwLQ#?8ol{kL;XrTm*5MgwdV<6l?;Qp%(cmw7|lKpTb)C z5iq@thIlh9Dq2P}hdABf0D$AXahT@^`v2!za-bKqmP$gYDO~-YmPH0gQT&msIi3so z;AM|VJ~+9^04vhFYLn8{!All>>)=E>HJL`$sEeEu<mrJ_U^}yUeT0szr8}_W(s>lT zn=T!h3cj#Z-n_V$8vbRXo~NjHj#zj3{zEr+9o)Z1ifA4^a@+NLmz1a8xQyDEdO(TX zjiPVMNi*9Z1*xc9NFDG}8o8H|jiowu0d<v$WsI8z^{E!gj7OK*)w5NaN_ze((psm} z$g-0bX*gYZBFN5lw4nAku$%@fRxB)zO3l8@_<9Q3f|nmTyU<a4sUqP~n?4V9Y-H56 zJ&mgke)2md31K;-))Wmaoin5Srx4TTOz3%%d@K^s!hv8=3x^V6vW=mILh%ra4F*h| z@LD9C3>2IHh=juP)Uj&eL^4*e0+NWt@*=HTBpM5A;dnTzMIwpNTuUF3U?hRW{RG~U zifQ3w5=s<F1X1~F685d|A`FGeTLs8(Mw8*N-PE$`^l^KQy#*G`4Ww1oj)I7~Tj(A% z(xH=$dfg{%)uxSly%8^e>div;3(+KOYf%Q#wod5nWXofV&_hCp$Wfuk(VD&9E%ZHT zf?n?v`T?OI68c)SSjTU12qyGfD`^2|sw1btf?bMhdWoWX;nY|Lr^5<Gan&k{y8+xa z@Nb3xdWBWFHssnA*GBYhLf>YHzZITr0YFpb3PPAWM*C-9f+x3iZYQ{d;7)?O2<|4> zMX-n9UV{4w?k9K+!Gi>^C3qdd>j~aK@J51%2_7MM6TzDa-p1HEhpO<Z+5tGRvj((; z&TH_%u2z$5nx^eWJ)}%;97OG-O#_ODiRM8Fv-?wu#vCmuuI6kWP@K%wG^muZk~M>h zo4Iu>-GEZcJU;nUx@JHrVcxX^ii4HaAxX8I6UCsSbpUOuE3EzoymZSdq{WS@%Gnmw zrPR+(xl7uKvPip(T~pl(ssh_RGo9i_7v6;Bc(g##tSH7TQKCj{+F#Lx_h@Nfm6)2& z@L_Hw!PSN}qZ3?xSeKU1tz-WlICSha)r#Ulq*Q9ZF!uMesRNAlnYO)AG~gfvUrXA% zh^D}#W$)`D^afJ-h(c>ON~7$3C?Ur)&OW*#Cr!BC0uf2aCn=-6&EIFd7vq#z1c!YP z=MIQ-be{Gy4{0w$k+VDdOEaadiU)N?r24(BO0Sn?%KD5!R7RSnxTG_|L^llRM&_X_ zZ@p-uyQ>J@aSL5VpK$`wjZ@q{lEcz%C_^{_=(1B84b$gUIgm0l^c$0ypt8@n2cnR2 z1(WJ>7Q3fSIcwYtXFkoiPjZWN8*X;r2Phwy%IJ%re9%Ps5R>E|H{wJwjz^e8`Uo=~ zMUgSxc#M<;S|-z<K#{R0A(gMsv|Ej#Ph;pa5L!*5J%Fn*ufkJPo+IU*{cO6Iu~fD3 zVMJJFW%#_A;q%P+C}f!O886`ba;!)%ynhi<e;iQPp!7pW*!TpTUSEReS~()ne0@j6 z_>@$^k*Sj!LeHVJ(`T494k`)<-Sz$J``a>Y0kpJBfDXDWzyJRkE0T?vNN?SL)BZhq zqLH#^^&$}y>1~J$R+$#!vQDHs@p)_UL+7cHp`uNlG+BFz=+>U5Y*sV`CB-2s#9eZg z-Lrb$_C)%2vuY+;I2c3Pa6p&^(5L|MXh`!hyTez;nQAlHz;N(W%N^xRFS2iH%juHI z1jjrVFY&lb33>@uz<^Y{V{j!5)Fd3+wrv{|`^L6ydtxUO+qTV{Ol;ep*iOFZ-Ti8} z_SZT8PgS4puI>fQRCGfbWnX!;D2pU%IIi#(u)~%rL#dHU3pT)yhXb~uBb=Ue-gDvI zc;b{a5TQw`^Z4G!-}rG(=gtqBk-)q$iIH*VSFJs#{}UNa8Ub9p-j0%1OP`BxYHYYV zu}!wooJbcqmIyxf)^&qxa#gj;Dm%1iTE`X(g;C+&$-dz*Km%^e+2HKx>kH4L$;RVe zmD824)04yBB8}IyI<S9~sXfH9a9fxwGjFT}%2~LReHZxPvfK4qJri~3yfMLS9_zjO zPiYAE8HaH2ap+9f9CXxT_ciHZ>3FY+s&Tt|NSWvB)uML{U*Eud9Z=FVih6NO5mDt{ z%k(BlzMdE~@5ah_z{V<~-BybPo-1V^0oWJZP%qZ<f3{@(P%jVj)8uVv3aOlbtTp3( zY(mkqfOY8JLfi7drQ~4^p!3zX{{>S4w_Tl!Os$GleD0!LfVr_;C>@ta05C>nqW}8$ zAS}p6QEI~c-#Q9(@;O?&Ju;64M+Z$Y+Wm)uP-fJ;7{>jeSR$=*6ul>6J6=7+9>C`Q zQt9StbNku|%b~16q2^l3BD()v^W2?}LrmC<YDzk-?m!t|I;zOS!Vnhi&rJOA51acx zu`;IgVSXS|ELA-O0)MzR*D4JV@PKrx=_5!+uWYol@C#m|=ZV)+Opm*A2}fZd9QQ}R zSMqt2E}+OuWL=9tmfEAE_q22KBjNNh``qIpS*<6QViclAtwY<TIpAgMOPH&3@fmJ~ z6<)VnHnRbfT6pDQwV_^&P#m;28m($HF}>2Z?^O{ykNPsrbj|`tIw96v2Mm!XOD(L+ zyp_ZwZ!P<4dsQ5+;d-nj5(0ANU*gN+w;Lu}-JMu+!vwEknuezzP9rh8s{gR>*5EAb z!;kh4b`E*<-`xY!9`1w1%y;QLjnCDdm&AQ4nEPXIx&_4BwLTJOmL1@43bPqQM?s0S zo79mM^rE1s6-y<N6SlH<dLZK8L`px70Y<ap|J>j#?n}q%-D3{1PIxbD&@{11Ii(kL zd2pL_ef5`6(VS+pHd~}=aLcL*Y}l~otmP`g4uGMS&$k_S_i&wa4a>pfUTcYlG_6hy zSRPnd(2P0q6ia4ocF9syj2V$5r9WJZ7%&vu%_F&3(ZeRoF@9b;960fO@S7Nn1OV~v zW)FWInoNW)%UW_B3Y?hrBPw-x%0W^_0%Qora6=XxX`Xx69;~3Toz8Afvx(tWX%Ygb zS-f~1o<!+?EkCQG^I9q~;b5#4B4jEm0_a7&BMn$cq2yLftf7clK}Ax7T;33iqCh42 z_d*%bd6X2idoj8YEb*s@6O*8+VUjA<Sibvi5E`((5k(}n$kE)eRFRm!;4+9Z02=`` z*V(LtR%x=7rNKY-SfPpFog|SXLpm%(2p}^`(i!+Hj0ADw`}z<&!)Uii%fL`Fk**9U zhFVca9ggw)w?i>8{7jGh6VtxwK3l)`4aW!n2y2?{32}LrT<KvXpd1AGGo_8vdZfGz z5rz5VCgcU`hREpjlrubb+Y8KQ?jRS5o!DR+YMZe!Ka(AG=v7IB0?cMf!#25{W$2ZG zakt?b5lUM`MuQ;2kJSDT#Akl+PxEac(KqwJ&*AM4#iwET5ASOr)OUW!&*^@@;@W%Y zmF?aK7RG&h#$kI#R!hY?Tsv*Fjb=t!mkU5*G+Vw@y7qZ6xfa2%4emBd_7;}-y=q=F zq)+E@xv-wdAMwmq4PzeS#{%KbR2u$$rNEK#U1z=>$^U{if@{hc{Ppr`uh|hSzZl#v zzIM+QYTy(hND<K#mVD1u0(cs2+5<5ncfzMFGv2m^^qU`)Z>?_2;kSP0c67I{F;^RP zyJjn_@r8ddZ|=wYGkqTTpE*}XtRp^}e@}3$p&g{{^~l@go%qP~6AI${asBDL0a8E8 z!L-345Q`8Aqy(KYpT!WPF!AU;*+yvxIb=Wozl-h<K}?Zhdemdcmmq!0dM*H%8B4xD z2Vd~k;hU8{4O#F8@DV4?M3g?D{@<)*sGC93OnJ$Jb>=Sp{dx0(w>qEUpBe1Z2g-9l zZN7S$Q~HIsDz`qSTu13s_j5m0zW?SXTmKCkma?0{zqrwfxw9aZomw?EjrmeLlOD9r zaU1mnl}Qf6b~Fng_x6PeJI?J1C@MN-qiuuD;uJP1LY)b>6;FE96Pq)Q;F^*~DQn|v zs-?37>uVLRCY8W;mC>GM!3jQ%m0&97$yGO6!Wt9%_JzN6wmvBy8p|7{e={8Qk^lKw zpDByhl)*82uGHPAfYsDhN?DsdwQfg8a4r=d&y0*X49{k5%yC&hggcZ5zkLZ-+?MuA zq1sK4FqyOKb|bluwmAG#-dO93XQG@~alF=OYiMH}W7ueDm0O?KSbe6MwlmdEI55iI z=*GmqfO({0YU5oi?pRM#*q-od<6J7PF%JU4^MHZsPDR6lbEmh}>gbWGG)ZJJu!|mq z0W`qelbb*Whz}k}5wK;w7mp=GW_(5(rcNKyKgZ_t@Crf2#0*Ehl62?ruO<OAr1)aK zlrZ|-3kPO`)VSiB4ANROP&>KX{20UzL&^aeDPD3^sb1jKK;t`zqDjSUqM@%%CDvg- z%u3S3D|%`7lcTe-y)iRm!`}D5&5<FK06+VG@}v*B)v|$;ej5k($qBLg2G8WCZ<p=0 z0&mCVVHyd{!uC)jme21g80I<Ch0TOQQTMaeqEKOLjh}AhrXj`U;R_$5NM$qe`9*2{ zu}gnm;DnMBFP{#n9m(D==u~QJ8Wk~+uhya$YAvL7rDC<k-kTOIH6LX#N@uZuT$1V= z8e?n;b(OpPtcNBQxdMC`1REh{J%%fq=(E80YIq{kH19bL+&Ao4Va+<Nu?zBQ7|thb zvIVnq<?}nZIH4?AZQQWM`ALbJ^S&Zt4D0c(7<LvY7Xf*I@=?i=_-U$D8H<7A!XOuM z4L1D2cxq0#Q#TJ6NW+*Ccxl}9LcvKzX!k8!CgD{DJze?5HQ!9>BPR^gL-9Tx5%^!e z+YGdt*M-_@*_i%8>+4{2jPO)U0b0M2j1pn!uw^gD>eDpkWMVMP=yycX)fuxQBSJg* zmqhQh2*NtW2K5$Nv?x#+vfJ?&$P%4ON?wzflg5=WOrTBp6tr~M{vdQ)PE+cz;mLcQ zI*iPxD2fhIt%Lx*82&LJXv4rjk$c$oicN;dbaRs0Mo9}8w7>oi`Md8m!0$<1Apv$L zz2383iWLuSsx)9Wm}p4bBF=)ga%bZ4*TH_P)rbvcrRdJACLqcf&RYt+@&3(_*(gTJ z^jce&gAq>_YVxGEPDcPO#{2Y|yj5BN7mT6NYb<eB*s4(+298)BLhkf3phb%X)g4O+ zltznzz-{)uhm-*WPJ}jCgpmjk+T*IJ!$_n^A=vEsAl)Sg^85>C2g<~Xl<hi?(^!;r zD3N60?Vy5?7mtaS$lrzxrS&ai_H^@d(|mV2vn?@{%08HPEJdbu?;;UuBskd7^U_T8 z2JKx4ZA4i5{*@c%t6|O&?VVAyU*YTq)2Dwf0Zx$eQKZl^REX?RxiA6tt7MKkREYL* zQM6z4>;?V{w6LF;MF{MNI&&`1INlOxQ>DQ6e9y@jK$C?&ji2^Aq4TbaZl}hw6lD@V zP~b6bs2^-sZ4jR@PWqfPqYi8Fe<OKD9qIuW@PDc^tR;~CwsY-RgSwc*ZAi-zEyiO| zeyj0)ac7$lLi3<PjhKGVAg`CCx1{cJtrD)NJXPTF9fRr$a%7#d6d5OLX%}iKgyM<+ z&Q1h<Umnpe$vg7*IRB3<l)i=eA3Z30D+u98?F9|whebjmAj_cgirr%YcEb=+d;RZ} zy9I0>nHMsU9by)(Ct>dcMo5}vbj(|t4_WS1`CNc1ceL~&)GaS*2D;>-#VyZ#Zi3I% z!_I~DNs9Jd@`;{O&}w*OyI757IYbSu7Ne5A3%`<`i&-UD9CyLz@>ts286|F9d%d*A zvW{+vPwzm?y!ZMalR5aqQo;JP3ftdvMzMbgJN6Z($EDJmRTWY;a;5OJBI=0xviuL6 zWcrm|u;-kd)6&9KPoDHl8mo~Q)$dp(Hk@9G0ZScF*6IqjiB!v58>KC*f#@o(I$4Q; z77Id^?v*;JcjXJb64qMX2#kuSi$uDmm2i#%#3w;GghsBCZ@W;`rcC=^(X&)4=Eda0 zmaZaTt!@2;v_kmu(X;S=NW<kHOGjq=l5QbQH}_V8XoNM&Vdgqe_PGyRnL^GkJYhbU zmdcV8<`$GujM1@I;yx~3e$sLZ1e0xsbYDg`ZjVMbY=Xu&f}E1+%|}@EJ`SRbxt!2C zA3+PeiMe4ajGfqPp5DGee(1?*rCMx-gO@jBtI`VMA%n3clIY52hAA7pInL#!#|WIs zJOU*j`n9M%Gs;pnDbeEFyi<~9+^g407~BeCI=uB2Rgb7OR9bQkdF#s48D$&NuiKJ? zH%0XII^%$<)H%myR#n<0UM~7~LLRQGleMX}2h)e8qcJOwi`rG99Qv1?uxu8eP3=dG zt)7>Wp^tk0mid+#xA(_$M#xQRGi=(B)hW;i7#HeMm12O+3*){ShcR)XZcE7dGCE(S z_-3>$#I~yTqgRGqnpi^0Z2Tf#4Am$6GE9Hemqp{H285<EL~_zOkpO3qZ!kH<4v>1b zD!CH&4Rt+y!O4QqJ(ri&C&mod(w;|l;an~|0j->N_>Wvt5{>6+9_qV_3c6*ksT$mt zug~)-d{{#1pKL!o3J*v3K9}ahaYYST8*WUGc$9KazaktFTauqBjd;v3-5`D}yIyq5 zcpbv+P7DtZi~SYm`)Vcfp7Nr6k=BUPCS$6aOZ7-?6}`If(kA+_@v7HOqm?RWpox+N z%3ROhrmE@6N44u?0fA$_ppim&07aGL5Ub`q$#QU`7lQYJakn}hBSDCQU13TCbUei7 zNgzlryg$umI<Dh|Xi!BeZG{9m(27?6SJm}xr(c^*dT&+uawA`R{l-qgO~ra4@53{z zQTxCWACULn{Z7XwYHmAT_T-jzpDY`P(hVQ;CgVM<R^sd`K2H8tAs$Hsd2@bRGyztS z_R&5b?Yf~Fu!c_8fw-*i6IFN779mi&)8sPT3$;Akda_c*w5{9(S-$4pdciATH(gs@ zDn0>#)c5@jJyZw-qyh2(A%KA3P1tL)j%?emp*pKADI3CS<>6u^^_RU`%D5Xz2}ZaJ zbILJb-5`Bt&n1*XSRCz+O<{~Impiij{va%SN0s^>CQn_;HjuBycmZ`+L~>|<`8^O# z(vQxFLYa60zT~<60ZC}No=7RxA?;wq!!IbE%brQW7sQ14_ViKY1M)-}NzbSh;deSX zjVfr0EeM?*bX*8{TP!2F%d?2F9zV$^W;ez$ST*J<?rJMtNIdA>w@5iQ*Fik!>F;7# zR6OoSeyGb{BrZYMfM57?zPUc#&iZ5LG#}M5*jIq=A)cm$*b19A4VvM+$^l0F-EbRD zdf(U`j-lYI6W$kCi>(}s;u^&uu)!b^F@;t2+h?3Mpw2Olmy{Cul72^kwTHrwoIJfk zRI$OE`$Vsj5|oi3^jz6aV37SBQK$`&ceta!->s`X<yaP)^AHGHyITEg-JN_C%1w>@ zX$1bbTPdICg870mxt>Te?&k6SZpUTCL11u3mkSl@G5#qN?#K4gOkm>n&97?E3(mh! zULw%EtO>1tIN&$f`_%>V+WLryo%-hQh8VRl>{dx(Q^`@I!w|axu4bY?0uk^nahn`p zA{Dza@)}B`aD8J9;V_%8)F2K@hG1HSxuzr38R|gKxb!t|ZQ<!x47I@;;+-J>%qw<- zAd>1om{ueE%@!ahCVog09Il!Y-5f9^a9uc8Ud9~=vX59h-JhsKb+4@Kt*(`zYjQBf zmHlN}3Udum#=90@tzo}bcxprowrnq%bybRG6BVp%Pwya9ue-7)RHB>2AGWAfEtLsQ z(&X@KcYMxia#fl^H-x$j4mjJ9V`vo`$)T1|oUT&GcNe&SGuIKw`fUZ8H^jxo{v$V~ zR#d>!{x&_os6%jBkO_KXZrfM)HuZ7(%+RZO;ESs3WW!AoLb#9~rgC3^bv~Qe10W(M zB4KX;qZ%L2@kd9ghhNW7x>gM{1)vJ70VSxU<G;6k%o_kXcoP4PkDkyEDGIqgV%@;E zoy;4C49?0L6T1~lUv5NFdE;d!kJ8CaX)#DS`MCARnfdCg|8B_=cOHxtf~^`fLXp8+ zC2Jy?YZUbaLxv)C1)GE0Mbzo7H{|C+Zg<7^ux;wr>qVgw$|RRjNiMAG*4ypF>sUE- zE<`F&a@rkDw0h2B=5RDqb<uOIB9!iDBvZvk)Z6*XD6YC|BAh<`ZD1Krt?xFmr=2(0 zuUZ62(&<4mTsNSeDt$c0$`gEj!y>AmYhp<h;?2TK5d+_dtSE%8KPqZ4#~q9Qv}Ga` zbTo98p&QZHRNY;<?B$;4Ik=P7`-izW*l4z(-9i}^ZepBmhj{b{lHB~EZB>T`BdW{N zUrmP$SGp*k&1{A0^dH`$$-L5-pzVOwxU_(AdvJ?5L!J|HHackzO}?<LZIltuQD$$r zZKF7aj?xDvthl}eK9(7GcxdOh^_>w<n&xsjWzl>F`46q_xDm&}n4?uI3y0+SmPoq1 z_(8m#a*|nx-Huu<C0U`-8<=mC6&nHSiUnwv&^cY!^&FIKlizo65vAyO#h4B!Ojy$M zrz9s@>~L78`rJW~xJrg4G$RHgB$l$wIUOFl6$E7@mYChMV4u{yku-l&R0m1r4;-)x zq8hVCqTxw&JH|qB**454SIH6OpK;+1#gcBQPqxx7{Zc?75vGl7MTn>Z{8NUKRH%<$ z1$8JN(^7X>7Un<N!aS^h+J!sROE0ibB85VKL*H4@H%zDQa7-CXqC%Y+BQ|6SczKA} zF^()LD}dRqwG5}vDL$Dqbglpg(;BMN>hNSX+p*>4ki`^Rv*0(^X*%?+J|t@;+m$vK zs!RJ$&e~fWu^H&`zau&Ix$EmxK24rSezi(Z)4cgMra90qeT=%K4lJkOIKe!zQPMNm z;qAc^z!2?d9IriIq(&S$6sncX2TD@A>?w1pnRfkVQe6{IrcT#%MdR%R8d>B!f-K*+ zzAt}h7$OR<$h{{BM+&ddy=e$X%2%S`cJ!W*y<7-r7$npw6ap$QY@l+mDTE?g4hfIU zEm5!~%#Pgu8*}3^wU4gj;O3qCTX7&BOh9f+-vgnLR&~v^6nY{uRO&;!Zg^Lut*X3I z%E996oqj-0WiH4{JDFJx7nhRusszf;Mw>gO8WOH7XWN}ZcT!94TJ|LUN$>bet^_mA z%DANoR-r<JvzQY*pO~>oqrE_8F^kh|%8hY@qSjWToB8Qtj=^Tg$84J;Nq>Qh0*(u_ z1^W%YCj0ptajeUl9aF7WyPJY{SOr!~UPa`Jx4!u)rUuznHCA6?VKQgR2sT5w*ip|w zq<s*=kmZ&$J#T<YuGD6<cLkzr>=Iqe!r?8-ONg{QV}&G&4_<{Jl0wYJ>e!||#bzbm zJk18{t#B&G&Rq8(xWPQrYAW>P8dV1Ib!=oUvh~lj0kS1?ei)?HGao|~DPX|kbqR!Q zirM`Qlf1DB49lj?Jrg#)q_AVkQhtwZXl`~CD#q<xwsm6@5UW`7l{{3*`tz!_k#K|% zNOvJs6csp>c=4>adM=#Em-k#=d;N@@P(rPO9x`OP88XRmNnnDIO{2n^rAHP2Hu+if zh?@TSIQ5&-4QDhh^Cc%23(ZpAMn*zeV?~m-%cbUzO{dt#)=CRPTtchDdqP57{&V^0 zh$12Wb2-$AqQW~X)6;<qYSv~}>JhSi587qLg7@3nafF$Fq;7gX@-Xwxd05&9Dpr!X zh8CccdGzGu<0Zv-iTrRS?R8^moGjdvm3WIiXTreKXG(>})7rvk`SYoilYov_f_I;z zEl|<wjj|oC;~B;8kenJI+YE9}`eT73wmu%Uv{xc*>Qc_H$&q2{4_%l_-RgxEg-OY% zW2)J}V$@t~q{Rf_m#f=T&G4U+tz-EZG^T7kNIA)*ZTJjz5rJdq_h19c3Kx<U$(V%^ zf4EeTP39hAllf*~F`VYLoD#&Y65_qcjW^Z^^SjtFaC*aOEKR+J5<C4lb6VLw_nctd zR=E8-Ep@*4Y38oC>S1n|b<K;JEtW%*9jT)#H2apPilQvE+A4{(8n<Gof+W8~NrDr# zp+FTYiolDLYB8h1S}d9ucjCGNMcVh?5aYm=v5ImcsiOohg!rc$$>6n-KpFhD7{Gu6 zcM1zN@5N9sJh*R$nh18h7$c1XOQV%{RzgVz^vWYaiIp50F3EFZOB+i@Dyj$|MU{tG zrtvD;H&T;>FbRUBWtmsfiwPS9zO^Jeu~iI{?Pp-YONzqJ3zLmY+mX7+2xR^z^u=4; z0Mr$QMinWS=^g&19{K)Kh!5LV!bQ7kS9PZDT)UyNCQO6-ZmAuaU860KC226z^et?K zsqn2TXX?SLFb4Eq?6`EcsD5#Kw#r%A?XbOw>iB1%h4oTbP(Fgu-M99GZTf3`kh_$x z4#4ivKK-*?(Ou?8+t3b!HAj^Ap(m%7e(hWI-~?D9CIL_QJol|3$o_l`DuKTcff(Nj zLqFE9!tg(*dx3F##Gt3ew?8<a!bm@ggFmXbKMbEQ@Za7}eF#7GEQJBNynQoX)#mC7 zhgo%-0=#IK&bR;cAP;+(G=cl=q^DJ<d$zNkI(NJ|n@gaMhn<lV_>UvG(nvBC{Jf4< zmot=n+Tb_iog^YdJ2|%ewnx2>OC8Lo!8|>M%%?Ug`;5XMMB-~sC<1@}ZREi3F?NdS zIa>7~vYx;Dy2y+?ZMxosA$;uj&fJW3lC;*9yVMnXihhF1a>D$1Af1RRFC0KgODx5i z>5RAD<GMZUd{6AwgUk05R|X_LzpX5OPW4*ekiQE32bz9=jN%g?0?q{({s%e#R|PzI z!CRJ(_|N}a0q-Hn#V&n-J@28&O)q`0KF>*>p<j55brYh_)hvC0Joi)PGfbMX{a=<Q zRjwn;$~0lHy+LzYB;iCFQ)yUZEky{O45O_leJ$J~n6&f!w!SQTv%NT6Gz=N$Un0@2 z$e}Pd)N*KRYNn<*T{KC!X#QX~R7DJH_EOf8W3NN$5L!8s+%kcv$Lwf8$*!7%7@zF2 zN6F$V&VpmrriU0o>T(PDS7{mzr#t^271e%pT4u!VE(~E?28nk-GIk~Jba$fY(T!-A zq8#o*><SH>?qpXYR&!hHnkX%I?OM7bWNb8TATw>lX_vwxdD=E<VT+!T2h;!%lt&$e z$-cI+&5$y&61*x+724f&`}YntWT_iRSUc#V1`U4fa{%i$z19d*?VUAWmDkN5NB-Dp z)x~cEYB--nr6o;eV{Zua@Ye#wpx;v|V~`rNARM=UAy+CK`UkRF2qoQgY(^5^K9t-8 z>tl{zyCqMTyl>MR47eS++Z1y1&!2u<eqhLAn?rM&N>wKjF7-M$+3r@|^bD-5d*Jey zmq9-oFpt{B>8pabS<_%xI9}%Q36uCtf{ez4elbe(6(C!w_xs)z&HEEAzZbiIT&b)J zV?B|Om_x_ep6a$SM-&ky+0QdufFx<HJkgYui2C-&a}wvmwb0Qpw94T24)Edpp7uKc z+bpt(YqZ7?@hR@XxQ$hOx>)Sx3;CY7YmbAC;-cQ+Y(nz{{8Fd3Gy~7gx@MornO&Ro zEMVEvxT<k}_A5iHGTGuUXm66G(eCHjt$Ng8jT+X4t-K!cBuYW?HSDh^cN-X0J2ZwO zbcjkWBm}GZ0xx_2gl8xc05Ubu_$J{hvQ^99;3ziYHgme!#l?Q*-4i7-Wsj@1(WNro z3dg0J?A&?$e$j@rNDa6RM9HpFYVeFj2BlMJ6<+jVRX6oZnf~(zrm*;u!S}@600Emt zDKl4-+&`u?`7Q6rIC*}9lW)YnSjl&oeA&}4`U{G=G4r9)=g>S>#B{e3td8;b1t$6` zePkG^{QWG;Qm?S!;^tr1_wEtP^(F7jiLhd#TKRyyapPNW3qPP;ki0AL2J`Q5n_w72 zE^<Fy6bDN~ixFD{9Z%#oCT;pZR(%#D?|AHe4uv8^9z^id+|w|-B@6z^xQ-Zww8L6f zHV6C`H8;O%sGbQeKGUM?pmZ=8@vM~ANyI<<aPK}aP>tz-gxCW%qmhQdq3z)PAcg;E zAWaeMaG>|e!0wujAV2Wd00|~)@xI1lU&$>#*Q%5$by$?#6^O%N`V~=;X#0^f>P&^r zM~E9Lr*wql;)TsrziOd%QukX&h)vJjZulgdVgf}KGoSoN6oIR0{-dw1aG5f-++}M^ zBcAN`j)*oa7OM6h({*@@90qi?8lRc#qr$}+pSbMbj&{Sk=JXoI^Ycj|B8^GWz}P@K zpPS~LANbzD`g`W7*VUqz<&_V^Z1o>b_V3;^|G1}b;i;D&VC;|nV;`23JAKcr^PA8p zb3-x0el80qF7ln|79ad7xy6=L$DP&uhtI_q`pE}%$DP^y2h_#a;>kyO=bilghh+6| z9{aBFsIzQ9JU%g9^s<?;_fG7S0Jo6NW8eDVebL*u#DGg|?^s*{_VB$c4k|wBiX29@ zfj6v4980LDb12gjrGsA;jYJI6+qY0w7r&H@WUA|ySD2zDR|{JcnhMzBj9Yb*wj%qP z;4w|_JFbv~$SWv*e(_ii+0f^PL(hcyXSn<j{@cK;7|A3#@a+?x3JvbY{?vaY9VS_4 z;PE(&rB@?%9PSei!Ue`|iUaK3=GV`%$>U>FyZ#k>pHO?tt`<$g>a+j_AHx;5WvT~x z%CqiTH1!9!IhVqVM}un<?<$L{>hIbpm!{pr+wpov95T=67is!75G6nxzhnRN>IS8R z33j8zPM0%m8E}gOT~jyGqfg(;I-0-dQ}m?PS(mFuBXy@M(*pN2z79kLDAcZyrJ7Jf z;=Gg5)dSOVUs6G01{s9~qnjko>fCD1i^YzZCtrXy6lzW^AigrW_vxq&i5w<|f&v#t zN|$pj26Xa5h0-4eTc0`wPPbzbC5+g6X+*I5G}lWwXFd<!y&n7}=iSM#6B`GcW`5*+ z?#XoWuFV_@jxHNiH^_Pz!1@jFk7qM5&{me1lWGVzVg&jGBSPTAa-r%?5&$Bq)-JPJ zE~=A<?A)SOxPB)=fGyWso003KuLRng(Gffw$g@Ca3AAovH+}TtB2nndckia@R}=`u zL&Tx1gCSvOA4iLRX0(u(Y8%VIT%>puxWSJi{oPmg*ozO;;`X>=XLNl#;x{d}?$sTN zs`n+%JZzF@sBNzC<YxzfnVF0yayO<pGjM${{^e}7=<|PgTg`<Z>6iVyu!lDfXU{tl zMA!Eal4^JTSt~I^z-Es+MK%n$l|Ce!;!duYmlt4r=)_5P0L9PEBR@F?i!w`OuHp0# z&%mufaytm^d5GZH)V9tQ{H^cv24vz|W9i2T!`Vz*)r9xxAm25^^31m>Cx4)!S4l#% zWc{_m$m)qT0f?nuJsPCg5%71x1#`3e>+E78zQ89pW_hnlr$TM~n1dU%B4;|3Y@sf% z)jrl>jVQ%5J(HAkN|xOFx0G_HRwAr*tdofyP2;G{yiF*@3vGj2aH%r~^cTFHOJ;>) zT<L5M#g<fb?B;j5(jxXbh)&sH$u1WzqHW?YikdL;yGSfV3G_7aFs!H%a2*Pa1e<*; zvg=HJMn)`TsXcp+hK3#~9s=a_Lo~DYw@Z)m?W>0s7T?s~`98^ACHwaF)yA$kcTQ=J zl}kz*X^oK<1!)cqcc6PAY#~2{C#)`PRbQ(�!iv-DOge9;sKUQwmIkl-07d%8E@G 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 C3d@rK literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/ActionScript/project/.actionScriptProperties b/antlr-3.1.3/runtime/ActionScript/project/.actionScriptProperties new file mode 100644 index 0000000..547b8d7 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/.actionScriptProperties @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<actionScriptProperties mainApplicationPath="Antlr3Runtime.as" version="3"> +<compiler additionalCompilerArguments="" copyDependentFiles="false" enableModuleDebug="true" generateAccessible="false" htmlExpressInstall="true" htmlGenerate="false" htmlHistoryManagement="false" htmlPlayerVersion="9.0.28" htmlPlayerVersionCheck="true" outputFolderPath="build" sourceFolderPath="src" strict="true" useApolloConfig="true" verifyDigests="true" warn="true"> +<compilerSourcePath/> +<libraryPath defaultLinkType="1"> +<libraryPathEntry kind="4" path=""> +<modifiedEntries> +<libraryPathEntry kind="3" linkType="4" path="${PROJECT_FRAMEWORKS}/libs/framework.swc" useDefaultLinkType="true"> +<crossDomainRsls> +<crossDomainRslEntry autoExtract="true" policyFileUrl="" rslUrl="framework_3.0.0.477.swz"/> +<crossDomainRslEntry autoExtract="true" policyFileUrl="" rslUrl="framework_3.0.0.477.swf"/> +</crossDomainRsls> +</libraryPathEntry> +</modifiedEntries> +</libraryPathEntry> +<libraryPathEntry kind="1" linkType="1" path="lib"/> +</libraryPath> +<sourceAttachmentPath/> +</compiler> +<applications> +<application path="Antlr3Runtime.as"/> +<application path="Antlr3Test.mxml"/> +</applications> +<modules/> +<buildCSSFiles/> +</actionScriptProperties> diff --git a/antlr-3.1.3/runtime/ActionScript/project/.flexLibProperties b/antlr-3.1.3/runtime/ActionScript/project/.flexLibProperties new file mode 100644 index 0000000..1090456 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/.flexLibProperties @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="UTF-8"?> +<flexLibProperties version="1"> +<includeClasses> +<classEntry path="org.antlr.runtime.BitSet"/> +<classEntry path="org.antlr.runtime.tree.CommonErrorNode"/> +<classEntry path="org.antlr.runtime.tree.CommonTreeAdaptor"/> +<classEntry path="org.antlr.runtime.tree.BaseTree"/> +<classEntry path="org.antlr.runtime.MismatchedSetException"/> +<classEntry path="org.antlr.runtime.RecognitionException"/> +<classEntry path="org.antlr.runtime.NoViableAltException"/> +<classEntry path="org.antlr.runtime.Parser"/> +<classEntry path="org.antlr.runtime.tree.RewriteRuleNodeStream"/> +<classEntry path="org.antlr.runtime.TokenRewriteStream"/> +<classEntry path="org.antlr.runtime.Lexer"/> +<classEntry path="org.antlr.runtime.FailedPredicateException"/> +<classEntry path="org.antlr.runtime.CharStream"/> +<classEntry path="org.antlr.runtime.TokenConstants"/> +<classEntry path="org.antlr.runtime.MismatchedTokenException"/> +<classEntry path="org.antlr.runtime.tree.RewriteEarlyExitException"/> +<classEntry path="org.antlr.runtime.MismatchedNotSetException"/> +<classEntry path="org.antlr.runtime.tree.TreeAdaptor"/> +<classEntry path="org.antlr.runtime.ParserRuleReturnScope"/> +<classEntry path="org.antlr.runtime.RuleReturnScope"/> +<classEntry path="org.antlr.runtime.tree.RewriteCardinalityException"/> +<classEntry path="org.antlr.runtime.BaseRecognizer"/> +<classEntry path="org.antlr.runtime.RecognizerSharedState"/> +<classEntry path="org.antlr.runtime.tree.TreeConstants"/> +<classEntry path="org.antlr.runtime.CharStreamConstants"/> +<classEntry path="org.antlr.runtime.TokenSource"/> +<classEntry path="org.antlr.runtime.tree.CommonTree"/> +<classEntry path="org.antlr.runtime.MismatchedTreeNodeException"/> +<classEntry path="org.antlr.runtime.tree.RewriteRuleSubtreeStream"/> +<classEntry path="org.antlr.runtime.tree.TreeRuleReturnScope"/> +<classEntry path="org.antlr.runtime.CommonToken"/> +<classEntry path="org.antlr.runtime.CommonTokenStream"/> +<classEntry path="org.antlr.runtime.tree.RewriteRuleTokenStream"/> +<classEntry path="org.antlr.runtime.EarlyExitException"/> +<classEntry path="org.antlr.runtime.CharStreamState"/> +<classEntry path="org.antlr.runtime.tree.CommonTreeNodeStream"/> +<classEntry path="org.antlr.runtime.tree.RewriteRuleElementStream"/> +<classEntry path="org.antlr.runtime.ANTLRFileStream"/> +<classEntry path="org.antlr.runtime.tree.TreeNodeStream"/> +<classEntry path="org.antlr.runtime.tree.TreeParser"/> +<classEntry path="org.antlr.runtime.tree.BaseTreeAdaptor"/> +<classEntry path="org.antlr.runtime.IntStream"/> +<classEntry path="org.antlr.runtime.tree.Tree"/> +<classEntry path="org.antlr.runtime.MissingTokenException"/> +<classEntry path="org.antlr.runtime.UnwantedTokenException"/> +<classEntry path="org.antlr.runtime.ANTLRStringStream"/> +<classEntry path="org.antlr.runtime.tree.RewriteEmptyStreamException"/> +<classEntry path="org.antlr.runtime.DFA"/> +<classEntry path="org.antlr.runtime.Token"/> +<classEntry path="org.antlr.runtime.MismatchedRangeException"/> +<classEntry path="org.antlr.runtime.TokenStream"/> +</includeClasses> +<includeResources/> +<namespaceManifests/> +</flexLibProperties> diff --git a/antlr-3.1.3/runtime/ActionScript/project/.project b/antlr-3.1.3/runtime/ActionScript/project/.project new file mode 100644 index 0000000..59c9f74 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/.project @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>Antlr3Runtime</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>com.adobe.flexbuilder.project.flexbuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>com.adobe.flexbuilder.project.flexlibnature</nature> + <nature>com.adobe.flexbuilder.project.actionscriptnature</nature> + </natures> +</projectDescription> diff --git a/antlr-3.1.3/runtime/ActionScript/project/.settings/org.eclipse.core.resources.prefs b/antlr-3.1.3/runtime/ActionScript/project/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..836da99 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +#Tue Dec 11 16:01:13 PST 2007 +eclipse.preferences.version=1 +encoding/<project>=utf-8 diff --git a/antlr-3.1.3/runtime/ActionScript/project/README.txt b/antlr-3.1.3/runtime/ActionScript/project/README.txt new file mode 100644 index 0000000..84d1eb8 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/README.txt @@ -0,0 +1,14 @@ +This directory contains the source files required to build the runtime and the associated tests. + +Running Unit Tests +================== +The unit tests can be run using the ant "test" target. The tests use flexUnit and the flexUnit ant integration provided by Peter Martin. +FlexUnit is available at: + +http://code.google.com/p/as3flexunitlib/ + +The latest ant integration from Peter Martin can be found on his blog: + +http://weblogs.macromedia.com/pmartin/archives/2007/09/flexunit_for_an_2.cfm + + diff --git a/antlr-3.1.3/runtime/ActionScript/project/build.xml b/antlr-3.1.3/runtime/ActionScript/project/build.xml new file mode 100644 index 0000000..0f3a209 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/build.xml @@ -0,0 +1,84 @@ +<project name="Antlr3ActionScriptRuntime" basedir="." default="all"> + + <property environment="env"/> + <property name="build.dir" value="${basedir}/build"/> + <property name="build.lib.dir" value="${build.dir}/lib"/> + <property name="build.doc.dir" value="${build.dir}/doc"/> + <property name="build.test.dir" value="${build.dir}/test"/> + <property name="build.test.output.dir" value="${build.test.dir}/output"/> + <property name="src.dir" value="${basedir}/src"/> + + <property name="FLEX_HOME" value="${env.FLEX_HOME}"/> + + <!-- Assume SDK 3.0 or greater has the ant tasks --> + <taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar"/> + <taskdef resource="com/adobe/ac/ant/tasks/tasks.properties" classpath="${basedir}/lib/FlexAntTasks.jar"/> + + <fileset id="sources" dir="${src.dir}"> + <include name="**/*.as"/> + </fileset> + + <pathconvert property="sourceClasses" refid="sources" pathsep=" "> + <filtermapper> + <replacestring from="${src.dir}/" to=""/> <!-- Strip off directory --> + <replacestring from=".as" to=""/> <!-- Strip off extension --> + <replacestring from="/" to="."/> <!-- Convert path to package --> + </filtermapper> + </pathconvert> + + <target name="all" depends="build"/> + + <target name="check-env"> + <fail> + <condition> + <not> + <isset property="FLEX_HOME"/> + </not> + </condition> + </fail> + </target> + + <target name="build" depends="check-env"> + <echo>File are ${sourceClasses}</echo> + <compc output="${build.lib.dir}/antlr3.swc" include-classes="${sourceClasses}"> + <load-config filename="${FLEX_HOME}/frameworks/air-config.xml"/> + <source-path path-element="${basedir}/src"/> + </compc> + </target> + + <target name="compile-tests"> + <mxmlc debug="true" file="${basedir}/test/Antlr3Test.mxml" output="${build.test.dir}/testAntlr3.swf"> + <source-path path-element="${basedir}/test"/> + <!-- List of SWC files or directories that contain SWC files. --> + <compiler.library-path dir="${basedir}" append="true"> + <include name="lib/*.swc" /> + <include name="build/lib/*.swc" /> + </compiler.library-path> + </mxmlc> + </target> + + <target name="test" depends="compile-tests"> + <flexunit timeout="0" swf="${build.test.dir}/testAntlr3.swf" toDir="${build.test.output.dir}" haltonfailure="false"/> + <junitreport toDir="${build.test.output.dir}"> + <fileset dir="${build.test.output.dir}"> + <include name="TEST-*.xml"/> + </fileset> + <report format="frames" todir="${build.test.output.dir}/html"/> + </junitreport> + </target> + + <target name="clean"> + <delete dir="${build.dir}"/> + </target> + + <target name="docs"> + <exec executable="${FLEX_HOME}/bin/aasdoc" failonerror="true"> + <arg line="-doc-sources ${src.dir}"/> + <arg line="-window-title 'ANTLR 3 Runtime'"/> + <arg line="-output ${build.doc.dir}"/> + </exec> + <zip destfile="${build.dir}/antlr3-asdoc.zip"> + <zipfileset dir="${build.doc.dir}" prefix="asdoc"/> + </zip> + </target> +</project> diff --git a/antlr-3.1.3/runtime/ActionScript/project/lib/FlexAntTasks.jar b/antlr-3.1.3/runtime/ActionScript/project/lib/FlexAntTasks.jar new file mode 100644 index 0000000000000000000000000000000000000000..67f2789e86f612fdfffdad9d772cfa598ab99be5 GIT binary patch literal 557873 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 $2U%lGBKmlzN;{Q5|wGjbAx! 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�bv?))X72eLOi_`MZXI`P4zBjAv|^pY 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�$V7R=J zm>CL*FWmp|Gh#~;O|Z_cY_rnPh<nBYjMJR?$8kuH8p%tTTf}`aEewiO3F}`<vOFdY zsq7Q)>SejnxboSrP7NtGY>+J#jA$=2W;%P<bs%GVYY{3&bk0jU!|5#+QFQDx%U#=s zPnzt8i*6%}zXC}^+NsY|_9j_RD@`*G3;4F5<S|HhP>Zw9;z&Pzf|p&v1NW@dcX^32 z)uJQ4TAUUr&&3VkaRzja?I88-0@fi{Mq*wG*j@+_kZ<!m39l^qx9DO^%%^W}?s1t* zJZ*_mFFT@Uu)KgLnc-*MQl)SNsDgP+_NvobaS2Cts?zgRh$e7~dFCUFDq=gX2yuGD zEeVY(a2xcwa2U{8gNJWGzuzP>U@OFFCQ(MOXoS9oj_F5wN&b#7c^#o(cGyVW8VxfR z2|Q4kh9|{l^(2FT5R-{7hk?Ju1(F5)H<igBl*o9Lh-j64euPjuI|DUMZ-MBC7>rLl z|5C)G)K7taFwgs<8O$m(1xs4G>F%++Rvq}_U%$t-`bAv6vZ5;DX@EkP3F!pNpFzp0 zI@{*bNcgk4(tY0VXVh`n3s~a}#08L6p>J^Jv3EnYtNN~XAaSt$g3mUR2Xn|VOZ*Y{ zsZ>HxH56-;sU={O3gwhX*(yOr*rZY4GU~5;ct5bOnIVW1C)H~6+bON^DW`<{f-oCn z^nT!E$^79w1#*DuMC41R)BYCS9^Ro>M+5}%g4ou*Fz=bD53DRyU?e|eJ>3J8-C_Zb zQ&LXxPmVDm!T>=Rk;UaR=ef3B@x0h`rC+FVf%a0*h)|0tZKsk4s4_5zC^nl&adH~@ zV`_%`N`tP2&pZroyLb=7gHpJ0Juuu4!wTBj+#52O%aZOVM%rD&d<HN+w>z$F&)Sdk z^&zHKSq=Z5vHgb((o6VTfe-Yp!2joNozpk{PA6dC=;WYp=p^9e<X~>#?DSv8MqR4w zjwsHkpUu(@lI=xo<VyU4ZEETKKY;SI4yp&6`EBKB&sbNBHRq&PtR#>CNOGV^@=Cqq z8T}Cmw+i5Cvuv3+bho27Z+~rCPF=Y6BKL)SmL0qAvhKK!t=@)pd)}dc2H_j11w;aC z581&cjSSUd5gE`MU<|5bwqc+e4bT_&qO!Szfq@+l%&LPW`y0TrN-SawyW8_2^@DX1 z1xFaTslr}`5zyIe*9?((<?ht`BMg4>FvuN2SBEc(*n3M4i7`|T3^P`bKMN1RLCt0b zo3C_`C^c8(#v-ofOrIcIaKR~F(MG|Ys^qXH?u!eV@>U&!Gmj&BUeO!GV2D7`WVusi zj2#TK#uQsgE-QM5gf|xz{q1VD#uOsa+$PB5tXSU!z3Pyg!L{r{ULc%qWav_xnd8>l z&;UQkxkBtbN}D%;5h@DhP?><vFIa0$9y2##U6i~tNmgZydOAgE4g{;R6aouZ1cuQx z-R6p`%d!me2hphhPJ`XQr0zv9Yeoa*V`MHbu}0Vcqyk-Ta_wLqw-ZQd*4@#<X)J`3 zwR3Xhw7_O0WAm^R<#5u<P(x6kZD=5$`L`e&d_N34{;=Mf$PY=6S(w+Q%qZc#0Tr07 zxT8zsxw18)5&mJDm~!hEffabZ8_E8;Nv+CZaoRrws#yJA+fx#7@9t1pco?ZKG~JpG zykBY(^UJL)^Xg9~Z*c~!@yUGgUGbYs6agiyUlF<_hYnqKQCAH!_eCI$#tgLt)38J` zK{MVd*6k@<lq1Qev2sqc)8vwDsCEoQ2WO_adaN2?&)nmVgsKXkQP`Mek}~hXKQmmV zGO4yM#u@#oW^ZH0hBTYa5q&Q`Ev$rPeq#NGfF~O-kIN$%D8r?Cn>rafsMGj7jR<UW zPMGuAoj|Iw;u&>a=|Z?8Qj-#151S%LOl;7!b&@SA=k}#>Sfpu4`5uOc<Z?m0Q$$c? z9235yHD1HWt9mb%-cD=~{aIm9+lyr15+G(TB@$D+O%=?`;1%G>cv*qbYfoA7yiT<5 z7jAo#72Yzid&`f&nTuc<*&{3Q{LmHn%-2K-^&L@j>Y`z|e{Y>8v#(U-jB`UIzTDu` zPzs~cT-qfl!1lsCTAR$|$~cvyzBtjY?o5%Mpa$k~=ER4VM6-hHcwTNVy2u&Atc1;O zfbDWNO%oKv<WziK=Cia5dsX70&RmkAF3<FiTD#H`qC841qhG~Q@4wx`q8EHO-|?GC zGSD#Nj=&_}uG+#A_7n*n@XIceGek1(ptK!WE#x7Sq}=K{F(KPQWKkAq^3XUP(0wFo zb<5oGGFXF(3<uDbmFGzHiX5@!6^&$i22>AFLXcgKd9WKiFtVbQA>Y-4X;RSa0<1C) z=ZMRF;1Mn1oXxq`cn&uc(S{1F!^DO0!N^H)as6fvBwiBpR|E+Au4VAg-7`1%!=fD7 z+r|Z`T^-nTyz$6d0y*0tJb4b`r$=9#2d-j^LSj!VarUlU7G^Wdeb2pJ9#%p=;6p%s zb|7%04<1p+b_^#BC6Jhx<R<-?mFueQmz528a{7ra0xn#W>SSLo5ME8%xtXX+CfsJ6 zjb|QqXWqtgRbOX9uCa<h8;`)gvlqaue?cw;2f~cw+G7_7EDW6ZpFsm1?K@v`sWF9& z12<0~tT1l5&aCKH6J>7i)FgDb^8USnr3z~%GpppkCTRc3lvQjGz*pUUK{_UQmcO21 zbsx=(eexHlh7Haup@t2|560u`1Ntb={p2t8xzc)#@c$o#y;HC#(ULZJwr$(CZQHhO z^PFwlwr$(CZQGvRfA_@1?TDFqto2kCQ5h>UKfRL)J$)R{>tQecWm4|>OZ#=4`z>F} z%a@t`okQJDe&U~Epfl)^=e5N|t&#GIAT#C?My9R^aJ+hFJfP^NNlH52wTipf+Sygk zaSt7lL6i`>Bc|iD#H7r|6tWK|pHbKgN$?GCIX|&|Foto~9(MW9pdL#A<_E{JU!xI! zq&drMf_=nQziw{zkXzP{)ZJ_D&Z1>vV<s9<ww9U%?1Werp$pU^^H_s~Vcj9vC{R2D zW1(u&RN}MfmM(wxo=<oWaZQi(hAOgOMRX6dz&=Z%RbZHH><hKPK0~2(fPC{yE+4*c z!y3dE8P@TpvAaZ_gB-IDa1I*RNQJ)adTNeLj;oji5&8b?e{*yxlwP$reuof?Ujxej z97O)(9{O*p_kXiklGMHQ6P8f;TBZslx|4aq(KYdX_&1p4gUaQp)g|YadH<mzd-JFJ z+5lN7E+qQd+EUs+@Zc@%u_~v!Qf52}SPg+qj%7MI*-rCprcO_dIKyo@FUYLjY~D<) z)L3wy<F&Q5y>R=U{Dukeu+8}1pCSn>Q+&!=7LH^t^2a>f24-bD#|Oc-oznZngp|0y zeYkqAOTcpW55T#*lLq*jmze1!itz34ad3U5_WbQXoM9L;a`oJnuswEIkoz4t1AK=G z|6b>#ouP4e8kguX4%E26HYNB9(LG$YaDU*yiDf-{c?Ox)+z;bjKBi}Vk1p`t-EzX& z-QJSI+1=fm;cg%A;oyGn7h=CxL`a_5(Q-!Mp6ua>zPoMvtVrC<G5zXFBQJ9>9(fad z^-KP8lm&m=l)z;*`orGcBEbC^RR64>9YDVaR&gg2j7n6ThU$QKh&Mzy3uLQ2RamXC zHQ7~L*;v%rS?p{s&MtSiRT(IC;m_fdH_&39#efms!T8<&OOJM{g{;p)4G-L(04YjI zvV%7+i*POXFJ=iMw4C6#3&FI4a}KPF-#~@|?Z*PFga27Zqq)nL@5ybGnNxQ&F>7qG zv@+o?E>CL0`MOibN7uuE687hr_`|Z;BMal)EZWaiR4k)@4)F*iuN^fAvKA1gVXNV> zu-yC1f5gv?Tx|{cG}3o{4i4NBM7Z^-B>yZ7=+%O0r{<>b<mu0c9qO#sJY=K~<VQky zHO_L?<Z7)FFi9<FFEqlhmV$}o+z))6<Ot@xTrD5@#C6zGOv_eO|2-=rp9~}49@O-O z`Sw{K_D6Al>NmRuWVViZfm)U*5e(wxbh%|ju*;s#dq#{1rTulnzJUmLt6208EbtpC zo#p&GQilBTnc9Js;au+ePD~c)po}#>Ivl}2;G-lGygy>Hns}S)=KfjnSzSos4c}*^ z1Tg9lg9VkV2*JI})hsabhtSTh%OOj;VO@>Z`8ne<=gxv2%YM4<By>l|^T>w9l<W`v ze*El<D2iNKg`hzwPcI<;=kG2s_x2;L%Zy{hj+JPZ;7+8oP@Gnhuf^f3%V<g+f?V*( zKn&P11AnMTZK7)j>w!x!QeaOe8e}1bd9AdhucB<#lx&Hb%u>}Z^1BeB9|)$rnieLd z1mXr$YXuq0!|2H=xNJiige<|wR-sWcib>IpX>rEJvtTOV9|>MZ^XTpbO>=AHqMR`? zPFSUuCh{KjLoz4Y(>rHuZOC)f|5WCQmxMPoikR%}9t?`=IR8V*D<uTJiZ5)UIvQiP zA2duJWpx$xIH#tTIV(~Q8ZT0_tztd_HnPO8UQSynWI&>HZ5C~ly}|>(2yB=bPoRrW zD*do5nPwC+vIy9}Wgm_ot0>nX$xrr>$M27)`T4QTD7L7$xr(@1TwIMqpt;9P(_N0G zq{-COG-saHmm}ZQ*jOtg6h?kC%Gw;Bq296>7W5^r$0-sCx7%4O@vrg~lfOEs4Jd6s z<)<#KhP}(mVEcB|88xMB3|^*mCc9EO-EgkPw~IF^2GYO*2jx_;2anKEM>z*bsD<bd zBv^+eE9w4D<rPAJ-BS*XV1*)7XV?Y_mlrM;M7y<htw$CyzH2v|=MqC$IK>t*W=guH zBn-K3j?fl4ygPT^6HRf*d{jOqXxBtw8kFu}7eK&mSI?_B1<ls!A1HEVh@hEL6ZT83 zniX-T0CW{hjnP`50)uLg4#_~q3_@%V?j9eQ;@-@k1!z~zqiGb&+hQ&a<uI%kY!U3a zg=A~cu|W$8Cr2EDyh0)&$AYOqW{{g4v54j<WJQG<6*tmL=~qh-B|}Q2$k%>F#>}gT z<1i|O*{fa00gr*pjR&Ra?9BY$W(Ty+YoUb?6F$%#Y}BrLzCTm#^|a$YKkA;YNGi3w zVSl4|=L)<b{?H^fCR1Y<h!~GvU@ShTuOF_-JI=e=L)?(hF0XPbu|#iuv?S4t<uegu zu=q$ph_R&797qyZ(eT{(2WxfEUN6nuIyIL{Db$%$!O~*>2~;mA3NxLh{!hWOcY_d% zU5Z#l%W5?hs;DBr4**t?nAP2lbY-sa%H#mh3ec`t_X)8rHYHyIzVT9tP2m`Jpy*7! z;t6A^%(%#qT5gVJP1$zrJpq=>0c5wm8FXMSl(QPY>Aa;xDIkyKm}KOPHjR>_7}3(c z#uQ|K_Y6I>;(c!>N734$A^cQCp7y&Df}o8tw(DMp6`~$SLV))yLI}=Lia<9liu}rK zPl;b<G4ckL8+oBLX`Eq%CBOkk74<;t7HOVMa34ToK6oz7E+3Km=tP0bG+b2p!UE_n z%Yikk0P6MvaDM&;Ym>E2(R5#$iJc8Iv*bK8t=m9yL&$XkUxO6<E+fzwQ;>D8tv#0M zPh6gCK<s02fbrUC1v<fnd^`ym;0GavWw2;<M7`k;H>Vz9UsMSMN?M{U#;QuuY&em# z?hyGJ@Dj56bs-DNS%I-!0qTyw!FXx&?+Jd!2%~c>HWp7Zf}^SyP08wJvws(JOTSG* z<C1I4(n(!_Z>qN0O?_COQH^KiKq2&zX|#Y2th#W?pG8E+S;g^Ulf&W#bJnF@a@E~K z%e@#*_Udfek|p*%CVgQZX!AnYOzMml*j}tKyShJXW$EFy3($Jmk|@Z9vZL8BuqYj8 zv2B^{rC7L=pn7npt1RVv=`^=Y9mD-JLDx4McT;~k7S*teE4La;_u)-gKEy22bG_=M zgI-5_h;P%9UiJC3W@qtbfYhdK$N#8JvoAyx_RIhsJ^=VKO)4X#^VkooqW46pDhj8c z1lb2k0@!2#Yt;lCt&yS+=?{Re3gB2bfHretShqow!dS<BcaYx!=v*uF>jBTA0WF@C zhP&<!b_3VwLa?jtVOO*GRWtLmVdZAH%=&vG^@+jxrvqd~?@n0lmty9fO@WPdA^7nW zfC#WTv7zi=1X@Py814O=U(Wp2hWo+fc3qswGuh3IF(+&XP_z?--HJqR1yQi4LRnZD z6>FK3cy!tA)-kLCRAI=cB|HEmk2F^oRjAyv?CX0Zh@ZzF5kpgib_aP<(jNK2xTH5@ za5PQEe|GEU7djd)<ew!-r(rUi-mPOBIhUz6UJK#>L=`-yZFQCJzccVbO@y0uEv-}H z{cX5qsaZ4CrMaG<yTQTo{8s;9^1fNKJJ=4<dt~_BO62{Wq|k8u(QQ5Eo$N8fMs|lD zTYJ>7s0T`K+5NXr7%k<DlPMU<DR%zvmC!<c&)=8?E_akWaFbU*6_`{=0@g>Da&HZd zUJ9tGm{zB}!x=FloQ%N&*&c7`vra;~J(4y@f1Xxnge13lEK=tdJV{xrkTSZ?W2sb+ zT>T-T3CBNkAW=+C!e)ZSR%nBI%a6N5aDBLe&Tu#+Ekyf`u`@2@Es5U*ge2V>XM$Ir z$;T>4di6tHH%nJ1FuTyzJ9&4&qqR2#m?lUJ)B;v+BDl;u_THV-E7dz7aW7zna@bH- zD#FZOjwj+{k0bEu0sJ0Ke=vf)n(j_-yp>sxbqlj9*r19rjpMjlAl~Yq-68;6`k$4; zKiWk=)w2K}FBkS`mn(g=n{;{Uv;!LRbz*)`D1{eR<d-!A7<O}MkIfKz1%5Siy&-5Z z(ROXoGsFES#5+$n{a-g}#%s_TtnJy|`4jC1lJ(mmm2jkSE=2ya2`&qX#y;R0crt_$ z75=WEY!~(AQ}vVy8DTLoMtIo)N^wMk4%P!kj*^a*BXt+51=(Eyn9*5JXDpjEG<2z5 zDVRPW1I~s`Lq;6ZMIC3xF(7+|Cub5%tT9*MG7qb{ZgaNG<jVvxD1L3|Q=v;nJcMel zMR^Dq2u2)T;4jD!U=;ll9)bdU(}jfGZ$9p`bbVUB7~6MG{W4L8pezB^GRWdc)4;8S z&ghqas3@^_sJG~e;b3?94{>d(E`?VkN!P6GH7nU7bz`vdwJ?3KY>B2$FZid}^7y(y zM=O9O8oE$G3Y-}yYkz~w6*z-x5-SZjRWKjU)n6y|b@z&>6~viD5T*t?1ryO*Hl>wo zftww1GJsTxYu{k3ecwTSlngfny&@&cRE+pqLf`7gtez)mi3Z@fg?!hT?A18YR6NJ% zX>b_dG=4S0Bq`)#341`@Ak1RafjM%FDmG018zyi!f`47WXmP98-R5<1q>{G9xiBKE zl@oxjjFr%?nA=Z%TCG_is2=HE>VRL{Ic@wyi;C4<FnYB`v)UrAWnsX0dgbFQ(~<3| zKXW2z^F%`qN=J2AB}<BA;AgD?59oW@8-W|uUuT#o?r{&YYSp)kb2-FWu$V;6J?clH zq*Jj$i@jzEi0O;0&ei#SAptf>`xc4hru{$kd+u)Q%x}^H8Vw6#x|jt^$Re=Be~)tI z-l}O2wFBwF!ZzUjTf}S{@ZP!^+sNQk2%u=iMD+~9X<Pi}WL_p{nW5S^0&RmnTEJjt zXyRTNi7~?ew6J1aKasX-q#I`r2(?Z%-Gm&y0B9$F@>JHu+_E+D7<P)ioO0-q<mfWq z*?8`wIqg3fNvd)ir|%!chiuj)wEcCaemSwPLw-p>kz41!!+)O+DHF!d1$pgK=QdpY z2l%L+DTg}y@q`&0L}vG!6@js3S9FJp$-<fF^w?rHCZO4*V7KUWG3S2(t$LEpK)qnW zqIrkF`7lQOm&YbN8S#KvGSb;oc^>Z*?>|ARe_JMApT825nqQ#mKLrl|F&hdA3n&Zx z_h{&&ETe=Z0PoWfcv%kt4>(NMdz%*w41oy@BHWDvWB*T(CY&;*wpWoLLlbpS?{El6 zSCB#lm*=&Bdgrnj5qxey_T|yJCwpb9q37rG6#_rX1P2FQ^-ev+-vCE0Hf}vMxP)_^ zq1-_Fnu#*|Y_>>@E4u<cB_lEz0w=*e&ww&8B~_K7z)*E4liz-xQvEuSU&v5j2%p~U zCKa$sqe8zL8_zaly1g!|ge1MmNz`}1p1O?=3+TGrg?KirDXZ%-+K1gS))i+#dd3>B zEjrHW<k)Q4j1*YVtGGjO_i09CVWN>Vx9vIoLOqDbFM5#wxtE<`-lL#4<+&=-k~w;t z&I|<D$o3UBIZIblhkYtdWThVJ5yIDzdc_&o5Cx3yJIgGEJUfKnD}P^sH^G~zNfe;V zU(Qm1h>UGePMfgJ07s+xil~(AI~e2K9o}||*VXYj|48Ld(j?gUn%=Ng;&UBv68Gjh zJv#i2{+a-H7!VZ#b?1?A<e<x-Q&5}#Y|9Yf!U6680QX+i1(Ix*dF_D6rre!|CuKFI zs)_=|uHPL>wd>(856bD!%3U`>(Agwbb)P_adlC?lN`A!#nCWzq2rcSVe{`?@{yVld z9!w7-b=7#CCYxN?tYcF|W{RiyrRqi#s)JxB>^Q^Z@@6uDA1-epEPUJyz4(}|L)VZ_ zu%bLG=?p=)f`WZUg?BJN8Q^I@j-|m4gqsD>6RmR!0O-V@@b@M}oJZ<AsW?fJcqjR2 z?P8VeCmsGb`)JT@e0f15=1~$2e@d4qDF_)emf5eA+z-mx-*@Kj!Xh_9n}xs`CsiT| z?7^><UUL+sgP97weNZqe1SK|?nPVMH5NI@5oj@d0#4@2{qR6hvkrRTtao8!CAvj8# z{EVBY(xF_}6coOH4U!)}L6Q*JXjPrKJi#HTP&mdh`a2xPyLS|oq_u07pvh-PPS4N7 zzcxuX_VFHBGU3sre9x5+X{p5llEgPfS*_Z)H2M@bVmKNh@dNUowFAzo7{m5kJ6XTE zjFkTY@cw7*m>c}pn%~4x*udG~f7UBXT5?DN$lt|i&D2nmet<>(tAHC&m5`L0Muequ zN$3KIcqLcz$%#6fvQd9WU(4x8EcXlGzR3^LvOFa^M7`6TjxXQ3Z?sK&e10B5{sokW zK^)3N7U=5_31h!8R2s^7xI&7UNKquJ)aK7GFVz|JGT3kR!UV^CRG*B4K|6G~kH)S( zW%%zYPCX6kzBJPM1L@i+5$il)b^43~scn7q1#-J`L07QwnRCeeIA09L`N2;Qc#45` z61c^*F%r5DlGHGw(-7o1cudxs{`h%pqL%b0EE!$}_8iM*c+r^YfmW|5rUu_g+=((u zi}08FG2zCJ(90gualfdjnL{MxWI@z;z#E!f8eG@v$z(+<vc7!T&ce%SFIoP&vcrHh z*kdH1+8QPhFpV}W@Ngpf`O!c%q&C<?wUm*GjjfA7xz)<he0Clw59?TKwT6fU_lpdV z*WRWycG)L2^z^{)iVoPE?oF)@jh@NEf|P0Vs0T|f%7+Mg0uCm{cSqApZ_ITRhd*{l zMn5A?JnEA1)5ULl`BO)wPcv_^jxpAc&2y}RIU1(sFAzgbD%^7yk2N?Wn#K}LETX;x z^L}AF)L#_g8p=`WDU>Ge7@jfh)6K+{Ch`$t2*D9q1VrO1-o#4BbmPH~BRm<BJF6r- z1tqe@{3bRU82NRgzqS3qv;ELylieplMd;-THoZEHtG-&7)rg5i#>r|}J?X<tHwb$l z$x{@>^(5A-6S_2oAHh3a{V#<eDH*tw+OIYZ@K^Wpp9;bM{Qc}~{!8)sKR;fQmfHXE zyxD*XvuSPA?#x3jU01Y3fk%NC0JZ~B&ON_-g&)`K_bV)h+6TLT-4E#A{iPJlf$=4d ztPuywpI?zMaizUYU0?ED#pLL91CZ}pK;xi?<>9CyM-Iaei({)f$at=(L`rZ~8w!Hj z4boGfv6;LlhFhStC{GUBV>SGSHb(n*KweX{&df3!qz0!NgPYZp1dm2G4P$6V1dpLL zx2U#tRo2)l5^FS$zne<5z_dO4Bh=Y0qAQ9_R3k4}R>ej6*K*KF*DMECr3^(jH4Vuy zOvBgM*YTeov8h}?Y8uLuKg*+CK%+4N^k0&?h1U<k_=wS2pPLrd5?c>c!i!O874LTV z=XD7{;FOgA+CwlSc@Ht`+BmfYQBtGz&&FAVMxQs8Jc!iS*a*#%ZZO#<8=z#5hVsyY zEgp6@VXU9;Fb<l!O>|O1PgGL4^S60wRAaRJpHN}22&vP`tT~{C#5Cjx43b!F&^~Yo z$#xXjR-*kPT+Vx~!Gy<UGGAr3Ha*^BHXu-#p0V?_p&^6RiCgc|sskLEX6&fog>j0v zp#oAoFYA#-@66oE9=`%8=M$u^H*OsRUcNGY2_eu4NLA*<+rYicoS@#=Z=L>jT9_8Q z3qdn+?83LAtB;57meZNE=j+hXt_RunRndHLY>4rWGS#-WVfs`K%HV=`doqd2<^Z;c z3an0QZ5%qTbZZW3h_(XI+xa}4q-PX(mqvNA<S#mMt?<YBkxc-@`5QmU<m;?#GIJK` z<hUqUZ@>?6S#Yv53?e9JB7Y`!k?dpAJ?0_)Z;Z^RKOS)Kwn{r6M>4YHDC967MTMj_ zi}~j2grLvx>3E;fkNVd%p526>mq>&GZ8M?4wIRiYf-yX$H}EpJAM!0D%va}~3*<-r zoucy>B6v;V@zd{PP;oimF~@a1Y%>VlKQmKj0e9&$TvoX|R$>D&6S|l@=6t_72M!;; zrC8_k`lVmr@^r7K9B^A#c?nejrdmeF=Kt2Nn3zTtlZ~rmlSZy4B{T_7_7OS8q_9It zB^&{U!8xN*rDOMP*>`DMR&!*?K+PQ=-(v9ys7RdSzDqWNq&=n<H+#*9g-X$mkddXq zTFYlt93WC~IAA$g273Ni<`dG5SKrkyOFr+HB~SAIelPsrTI~O+%->`HY!j598PghT z(koJeJPRmm$RZ0?3vxA*BK?>~<@iP!DM^9FvuonD`ZWnRGq2qIT*A<B_gocV6kug| z%2>>P8f9A$0R#{fVGiUzAiLWiQ&X~r3>~1JPsWF-7oVH2ov&@)+hLj(pi|{@LUli? z{#Hi+qgPXy>i#7IZKVDdLh$`?OIu$p)g6evb#TH~!oUkc`8ypCZMqmNV=p`K9jLuw zc-!z?fz>VQn>z6GS~*oOqSBEUEBa_HU^7A0mhtmu%*|*nOM9~G_>nDwPyXhcuwC8D z6fHjJy>86OkuL=9e_aOL<RfrFceSDKq1qpDm!ImYG2`b98ehV=F%u_9_3vfezN9&F z;q7vx=O_2>lDvNjD)b<GN<hxe;IknP)b777z?1jb2)MEOod`Zv1=MGVBaJDU3Uj;7 zGMa@hq^;8OrlU-gy`)fpW8_Q}k0Bt-HPK+nZ)=$2+x^pc$|AQ@@Yc%B*etXb+TpPv zXn1l>l<u#r->3GJWd)>S;&9HTF^R<NE|?qIx7)m}rY9{SoRZ>3V@@#=*ja?y*Tl9n zTw~5rS4BYxuB%oi4M3nYd8peL+C>^`GduGF;~1WFiv5Ebi6Je=9ulQ3y>weRplk)8 zL1e0+c$9JPOmElAx_Gv#>tM}kpy*yMV*qHf(2$H_0wRGlqYsrQN1-BR(iyS)r`8h7 z%!byvs*?OQa2edA8n1DJw6SzRtyWxaBu@)W$49}xa^rC3Lg`CVeRa06r!p$4gmj_Q z>6sNOCPobCc%zeTDMMTFoz3K>Mnlvm0vKb*i=+pRcUySipRn!rVKLsAR6pJ21}_NP z>s&Ij=_3a0vzo}9n>Ao-XYNfYx7w1q((&idxU6ptOVEh-J?6z%{a7j@y^aQ>G9%A0 zdj-!Vj)3{BF`FxpmCXht&lWX|(dMsu^Me|V9g7$Y|28(uMnysTi71DRQne3+oivQP z`7Dc{wqdtbPSHEuLpTKbS2L2^VX&E7Y7A4-WGqTov5QUY$C*lq@J}drt(%iHrje{z zd%2)Rw&-Je$rRV{6-3Qmk965A@u28?Wp86ipN;WGq)<{j6=(|b75%O9ALtV35~x<* zMOw98SdnR)VT@gv@+IxAFi=_p99AwH^Q=*sqkNQ6#ba<iO)8a5K%P8wl@uiZEH$x- zGhD7Yxwl|U)9Y53ooZE}u^O>8WKWW%l_PyBR6&xo4Non1DcXsTNJ&Q=@Z6s~s)kA_ zSs0e(2=!caKo6%0mozitutO>cuL|wAX1-qw?B*naDXeQ$qDGWNsi+HXcPn?t?Sa~R zp_Cmm1(BcCuDdK#53)s}+jUHib397XOsZ)Ee8~?7)>XV?TrORu(1$Uhto2_@NPjwE zGPM+b!DdY=?;_-5C+{6`cOP_}pZByDpAq*sC`v_E3bv-Mh%tS_j>;YDs!k2(+l`^r z?K6$Ly@&rU+*d)kXZh4n{i_f+q9^p45x#Qw0{@-2pYxg${`Y{-S-Fgw@;ib}&|Rs> z041J^x4oJjQ5o8Ry-=Cq*r)`Jdmbg>GpsCJuQER~&k)U~5I8Y6JR&K!JTS>pL&R96 zApXhYb5Nw7Qx6xdT(V02sbX`W=>C<Ow`708(F9ai(SEiN*=oVUM_fv3S0>$MK$0eb zVG`Ymtk{8}(#%L!Cpt}3+B8;OU_CWCqUcrH%!Q_ni*-_thLqt#5j~)>l5v5t98tx7 zl(|7F&Rc{{)woI8pGfp;G2R>wQUoQxuE{&CETeubzb`R;vP49w{q@J<JKh|uIk{rq z5fNSb#A!fLPgLv)I-#ZOH#!V&L~*H1g-$DkwGd5$SN?Pcph9T_O${ae{<2;vWg+<_ z5owtd$?pQnD78gnhJ4%LMV6z%pJy*Ai{QNEx}J-P|GiQp80pMn-nTMle{Tjy@tmjO z&=T}t+}6}7c}1pEXJe_MOkNZ*dU0|07$A>zI_a6Ty2#VUdV^`ZqQlkM`n7%&Ya~~< z^hz{YNkTrT$|`Cn2kQi6!bEz@RyS1?aY&P_m&BmP(=%y`q<M7SCbu$@h0a7Z^<-3h zasmc!kq;Yk45n1){Q8lBg+&X^3f33RCr^w2l?}<y*Zk<KlpE~IWq^0~U`@fRDVT7s z4PIiG_G@kO4EPQ|SQzS_j&|8INoFLjc+aIs&Oq*ffjml8_c95brd9+`p$hF8XQi8X z$}J7O%2PL%q<Bo7c*dnsh_WiytlgfCH<fgBM(`ME=03fJTjFg~(!KieT;It#{lBTA zL`jOH`})L^_QbB}-6$KQ((|yJ5KO!fy}l*zMKIE|wd~X4s}=V}3ukmt_#srWtOf1m zmjyfD?iCsQRueoyp1bA@cwC_;V8YMpv#fvZMLgYbO+GlnIdcrbX;(&}+r0trG)U&V zML_3RBeR2BKyR1>l|JU(0ha}*g9xQgfn3;2-r14#L1FU^4X4Q-jW>Yd$R$28xj|?P znuM=&$gZeAvLhW5JaA0*pxZ)r)Wd!5blYZSP16cg(k3j{O^cHFV@wKGDFv#N3KcC| zDpFgBc5X{)&<CW3{_X~bB4Laf>>;rYqYI`Fjt7LIW6t|Q6b1Sp?p&v%?4wS6Gv}`} z8pEs&^SxXI+30u84wKJ*t4^L9FGPrTcq7^uAGzJpU#qhW(E)EA6FZl9BLtAoyTTen zttjTOn?cDusS_O!=|FDzCeR_SAO}-@4%o*=)Qc0xpVj(Kv2zaWZrhzUie0pr2<Un6 zpg=ZUDwF&Cm%ZBQl)+o<h-L;9yuFV<_*wS^nETl258B4|*(UzJlpTIQ6xIdh5Y^Md z=@muJo8WdJv*U^e`iqQ7d+Fo&s>!0Ud#qpy^OGi`$6?w-TUpugFB*G)OOX^S8KBT* zo~pd%_k!we8wM(vy=ZTZXYy>HFC8zIJ;}WCgD%U8efA+qqm=9*z9=Xi5DFfdQpeux z8U6BY0heawT>-O#Ubr^F+)Kvyc<Fe9pSM{}1w%?WCu^sB_@`6szepmSCW{@Wkc-Yb z#_G~xITL8%jWT7}R?#u-A_84dLD%Tct&9j=WdYg}S#}x2e^}&Jm)r1NUTZ-JE1X*I z@0xqFtlsvmy$caH5m0uki32LY-KMnueV9XRj-aa_(X_7C@5WsfnXk-qt~mJkfI#_f zHs!jHnHgm2NfZ@OCq-Y9gS5p7Zc8UUtH_@Lsujt#q9U_v6+uyzIy-|Tk&<6mY47L? z6v;7?N2u)Ep@JDP^^kC5g*reNv^Phoysxt6(@<1dx+z6@rPjaXqkdpqy?Eqz^aWYz zA8yR~)Irs61B5~DxFrhJI-LmYa|;`BOE2&!lDZkIjN*JhJGM$?Lb*iH^V+5zmLLnb zT;m3ABr-S;B{@)=jHP0u70v?2+`pkO+&Msg0Y}^>P%p`Oa4+xoH?!9Yz%u2SA-;<* z89xc!t&+Uv6OGr&#-*+==iHSZIK926j(#ndHiGH7x@R7uOGQZ;nC0<ppHMJ1kK~XH zIVJ9Sz^N@Am20Y~wE7nPemC_Bn)n@ITQ@h%ij>aCb*`)68m(xGEc0K$iRQ*3D4Z|g zv(p211%bSho`-0~k{-d5p7B%fD40(dIpCI#(W~euAnON1r<@(SUxO-;cSh~&QAhs* zgIXG2rhbxyB0<ZclR2tWN4WZF7cGJ(mxyDmpZ{gv@K<2GMfH~_sQ~@w55@m~zx-c@ zod4Z3N2yx<CNZG<CTqLGAUGf(vmoYD!ZR!>YTYRw<>&7y^25ttAfl>6Ly%&jcs|T) zHtA|=ZJbNnaM_e(S@4~r&AJxjz0Kmy@y-6sK68*sfuohkl6p;h+?;UCc)9+3p0x1& z3A_t}OFDhd0~{GD5EH6Fmpd$g`=SK(mY<_RC3|pyEEzhW!JF=d4;O$@V8Fx-4ooRC zP#*||j|y)(8bF`647ET<yJ!s#42FO?@fIg6>RXOow&%q|vsV}@4F6r$QQclQ?I(BX z`Bjv+i}`ghFc?#+qtxx2YI%CkO1okOFi1X%6Iu>>Mi!DRN6*^CXi|V=5QQCzyOT5M zvY|F76l3tRr`9KkF4{^8FC3U|UT0_0zmSjOF<h|@qe-RJO8HS553{dWm6sD44SNt_ zGwl=Y(Q;V~iJcY}A47*%B%hm1Ig~A@Jej`24&bWPHc^(0AE#2BuQzxPn-kh*pxJ<k zOtg}#kEM<rEVnhLg;6^?OL@J-VnoqY7W&vvMnclv=zF@aN>i%05Ss-o&JNqG^&83z z6WVCi*+Y>8|2k@>CK<-}W7`BGS~7FRg%$Q170Nb>hCY?Xor}W_SDH&D02bwlBCQoA zr%SILx2Ag15~n3<x%4(6?&%UpNSb#kW=xW1tx(>w=tZU@H7A9ZD0d2J5m7EfN;<|} z*C{5G>j^8(n4v=XWi{vzRts}tu)t~fYZXnznRk@-$4ss6k92^4+~K;C|HHdEh!3Ce z)$UV4t>y0Z_5KH^qWy3{r2TRLYFqxg8Uu=Of@+IIg2#r5Ju0J)_gH{na4uWd-E|~$ z6}9DqGbNxf0LyocU%6k6mlN7Z<&QIhMMx9X2br$+dRKO<6rkgyvo%!(d0*(=6Yk}U zjbL&D0=5d$tskqjLxGa>cE@o|RqE|$t600op=wj_Cw1HewH1CmU01~8<qHWZZV<AY zrb{JGgIHN40<}Si!Dc99+$NwJUO={S^3IwP2l8vhWjCHa&g=vAX2$WG2~eh+ef6$L zF-KgnVO+r=-(&96rta=ytW|AaCmri-*dO^T3TWOmx&NF-R$KArLZNLo+D*m4Lum1< zy&P{=>+5e;sP%-nTMMYCb1!U*YS_K5ymm-=P^<~`PkE&sI~m2@b)r(Mu{TEQRbm1< zf*|uK-Cr0%SOsPqmxq}no(E?EcOV8Vbpc%D1keuZ)@!)dr6?bDa52$od9X=#fH8BD zBf7aGJfWF5_QBx7KKW`yW%0BUT(GC9?hNK7z{n#uIueF&$eJ#`xGhJzV2SP@FX})` zL70Zv9|v_XNO4xYeUAVx`^drXXo&rk!GaTuh;=8-)5wJ22~g`Jdi;iMvIEtm0--`~ zT;c_?%LFSuA=VS<^3p2v!u+<Vyv$NcGEwpLi=EN>e7w=yD6Ttqur2GTRqQ|S12|<5 zed^pCpBr?{fLJ5AJQ`YvL~YzBZ+CzOU1x}tZENE6ygDR3uM0`khyky9VX)=kc|L%# zP115?z3zi&!cN4p8@26BS_UkaG|MO~C{?CA3{bB`b;^QMcp`N6a!gfBGm$*dHZO`j z11VM_Y}92QP%{>%m;JN1KBD2Ebw%ypv_S3=I3L@sN-o%RUsi(@prxL)+#$8q01g3f zq26{!;7#D;Gi)7z9Y}eBJkK_6ATT5bK{G3t44WIeV?M+#(>h&C0Q0<vFAy0IBNXTm z2(Mv&5TZdgecwSVTLD~zlvxyeYzOOpJ-OBtqY1#x=ca#unx3X2%qKkDfo{hJ>vUZF z4GzaBm+ur&Ai7gR&}EJZ0G8IvP45RyPlA~Gua^Yh4SiI^q#{5PLqUT;0YY3J5D{ra zz`lK3={#*{PccU5!iT^INySh`b;V1n3)X`zEKR=#bAG}YUnQQ6|2p_F7h3Wk&_fpA za2H^L@enfPEiB|)GTre6PpDL<3@uU~RVPn1qMw!UKBq!k-$QE{>?Uc*^)B)CJ@B<b zqTM`HtK1FUo9%aa6L&A0d#K(mOZKkT<Stj351E74Kb82$PsUvg$Z{``<Tc#C<Ip3a zZUnxr(*@`|TqkuIO(xSui7cVXx3v!VGbKqstgPzA9I)(eS*Yb6!S~$M-B-T)-*`^f z=rkF6Mu%)B6)uuF)&DysT00WycJKFAVmJN&+_H*ToBTgp)+%oZZ)B0@+lut-w6Q{` zgx<q{_92tNu^GVr1Q76}021s&M&iNrnDMb`_EnYb;b8f#l#r#B`v`Etsz0Da)%)eG z?c3EaJ{P#xN9`fizBei>kB`!x;*T3Ua+d8C727H`+bSqI-`9O10Q!JG9Z<SvGab7u z&w_+rab3c4bRDZVt5lDVlq@xK7Z;C@!BE$xcJm8bu+Pm<%+H+(UB3o<oNHc>AG|)F zy<@zEJ29D;M(<z52*(X_Wp9zXd?h7xh-)`%c%^Rz314GF-Nt`i>wDN&^>kuqvfXNX zIMCx+<HfQ1y7Q0m7QJP1cHC<Ja<2AdUhdGMk9;5a3qH#bekA__I)BBcUS7uma@Y%k z$pk@K+FJX!-5i(3u4J!seaYe{kuo=r_QSLXKs|<zX)L#MkAX0ggk>1x$Ca?TQG)sw zPD!@<m_id)<jK9^d3<E`LFZ1TE$g+t>G1>)y#;D)E$hq19B#GIm~Xkk@Y2Dh)~pu2 zW%Ytd?!9?4(-CBO<Nw6ur_3!z=9yMTpxrtM3lT)U$RChchL>W<)gYCoh2p<SJTix+ zk1a~)nNse(kB*ff^x?6;IfLcw`NMdV`cRYNlRPp{^qG<MixNkr+;c2uO3PqCIMT8l z2@8Q3logudc1@S0L7kS3kD(zxMPzoS`&yNj70tNFcCU`5uzT<rn(WN(f?8shX-G~n zS|%$s_`_EfYE)o<BERcg?Uu~nSit&neq{?p&GfCz+9d?AE!5<sH!U{GH$<oZVKGy5 zLS?C1tSl*xN_XAw0D20rv%i%EgHtpMO|KSSok}QO3k5vLD79naAyH@u3Vg+3*-3yu zo?iiduT4tNnYAKfN&kgf{(QW#qOtN7*||J=!ggg#P2q#_&49?=<`9fDa-J+yLWP!J z5eGn(wS^+z9|3>bGx&4`4&T_{O6lAZ?nvynQ~T*nyUqQX)85<VbGxO&C{$fcqN^&a zwBh#A)$lOV`H}?XSh~uhK}z3Pk>hX@6!B78@%*c0o?Sz+xZPG1=vPs1>Toc=P*H)2 z>EQa5)*aOip_9jd5qQo|AGnk7bfXfL^kf1a(}%y1S{~c85c1Dn`@DYqz0CzCsf2Br zg?U+RY1*t;l|h`+&JHTr+a}MXdzrQeW(uC(o^HtDz0|~HN$Rf6(IE}kE(gUNDo_$* z6>^xyC^xZ%?E|Aw8EpNtN#|nal?%(qO0$lvtG#P%rG0V*BiC)MEN~gbANpPfJB0J= z8^XlOKTp=Ut$s;vlc+6>=3Ab|-*$6;53Ln5cA3AnyNicg{E-k$lI)pbl)f+Wp98Cu zU%d8vIEEOzf9PlnZk#ddX}r}_Q<JngxC`jIrX+BL&AyZ8P7O3O2iNMJRX>9eq_lXX zF91m%4I}k}BXTtYW0zqaU1KySmf$yRVY_}NimsNL*`JmCf`uN|T8y;bFy@%PRX`{X zb$@&2rk0@33?bm*6$;_RK>g%q5LV|m7yV{_CO|V4c4L{9^`>vx!&<n~wtXmz^LH8; zKbET1AgRiCe=5sz1Ys{U!0CB2koBX?qb$GJRHGf@Y;fB^YwTdBC<bY9YUteZYDcGp z9wKCOy8*lM)R+oAedyQ+@#C_(tj4VVhB)z#nlRm1-iF0w5PyJmCc`Cf0%CU=HFDFX z@%}Agyy`$iXls%$Tci$xrOxhEq517np(xcwdP?O*`3_pl#j<4bEX+tu{VLk%<l6J% zj1uZ($vDGnZB4zRi<Nj<Ju7{i-kr)BVsw=5SUS~(^X1GlJIEV2AO6Mf*qxzobJU!L zDpNCL<){lP=pqywG+N!<sx`TFD&LFcaFa+3?&|PnSl*--w=td=9?Yk}C@h*CcB_Ju z+Yp-}^@=GQ3&zVUe|J!$$w6uYhoQ7Q+gX#eWi##o4OI6ko4}^8c<9{vVlf7as-CSC z)J@?JGP32u=_i(~BfI1QQ4Pl(uyt{&=#R*B4*TTyNtw7$;pOUFym{#gj_1L{G|}mA z2IBN%r+QdgqniV%^gBcXAMr-V3>(3E2JQ2!R^P`N?zY{*a5G%ZccaA#Xncqkx3sVs zM4Xr7rz#}>?y0!EzIb&ICVjR*`6Wr!IEq>5=AbSKHeC_=+?)7NbKy~gYxVpXaYoL< zD9s8nAp<%C0c=5wi2RVgT3>L{faPV|$21dq(r!u74*3pQ@_;!97ADVr=!zpublR%5 zp5>J#%y_|!ZM1_w07YqP+JX)B(aU|Y?Fu=2<+nz+bB9oG88kFSPu3YVZ5*VM;p9Xx z_PdV2J~W~HR(3YD5$t+iC4YTBhF9Syn9~URil1SX<13@5pGkoO#4G5VuP!a)ue059 zOK@$|yH_potE@&>!h8`}1`&}1%Dyg--Tyf`(^B(|K=6mr@d!)8iiJFV<5L1&HJdhs zQeWNw$=Z(eD@!Pf5TqQZ8poWF=SY8)@4W;cB7^KSSO4(b!ZNy~$eEmr{iFuNGU#p> zfa^ulBoZa|18ocf%%e$E4kc&ZlFoWn&W{+y&N;Bc-jj=<;@QKt^u}>`l?%fN+9XI8 z6-eNKFU&@qfHzAsxuJv{dk2pP6%(m2$a{Lz2mYA|G<`yVecJd^3@(6tU)tt1h72xU z37=HC8;$(Zk8PubO{>^1QK<kGeWjG@uVXXGqEkm&y%ZZ7R1S5XT07oR-adzlA7MKS zIAwGs#Z3LTY*&DN1_=ydtfO^-%A>oCmIEeOI962!>b&09ZYj}W1vj3GC$u^Jgr2H| zn1^u6@1-UWmOw5<`b9JJxV(y?9>aNjaeCXrl7W+2QMPbXFdHywU@DMV+Emum1vAG% zK{4yLbm}{)$zCe64xc4#oX!;Gah0_PUD%U5k~vv8(hCnD9Nfl)el277%+_Q$j=8or z`hdUb44`SZB^=nnRJai-8yNh$;jfcLTB3J7VAsylmn%!`o0Zi~vqUI2#(Z^KZ_l<w zz6`cbh?L-*hh-X3$zLT728N=napl42*z_&)j-GOjaVWLW{>QWD*wnE)-MtJgCu6EF zPBwG2_I+@Tcq&yBF`$!N=2Xjae3pYeLX=+o#-?}3>S-iwV_+@Ug*mEQ%T0Y+L#C?U z^U%`#=6o;+R$jwgUi!<7+iz~y=vDYY?XCjHyJfh>0F1>oljm%A#nKzDL+rrojW-G= z#O^LhucR*S(V2%!!iZ>Bi<xoR1#(c^9r7)~-=Sf|@)NWhkL`R_iG>xpq(Ol>A!_B7 zZdJfLHMfs#6=vsvk{*jC<TVPD%7BdPRR+@uss8TsPc-*XpPeZBC#p9u3PwGp8@|jk z3oPh$DV&Q=UUc;=cRe^kB4Ce-QJHnhuw8(heH=9;0dzgl=CV;Yg8B`cPo^bidJja? zSkBJAUBQvS`u&*KzU%Z&;Xm5Y`IouYeeWnYq#L{eHCW${;TwL)Rl$As2$i`D%_y0| z73<@<Rs7_$UAO$ed$~9(^-Mk}HQt^ICi%=5%?vz=Vt8h+%qhaXogjj}z<DJc>=jpZ zp+vU@LfrhAm)ikz`hu3I;lE=yORqlGjOi!5tTG2bBR4Cn$gDaCJfEQfe7SeJs{9u$ z5$PP5855M~ha-m|^V|u|2fDWen2B!z<Q5U^39U7*w*{DgL*4m=p{fme=TR45YtUKY z9<-Rh!C6LLX<)xghyPCDExaClLPWhun8q}aG5cb(WW0r~>orJ091~*8L8{NFDl}*s zVXcu`&W1<ZX`jrnk&nJK?fY79$H#P2?W`o<>_j>*aGr~Fej=3mz0%PMdaGDf^bD<p z9}ms~?%zs8fvl#j!ehkLNii6mk0fxu+A)74dzamntf6O$Z#=X-zC-^_R`-@Ym|3`h zx=k9^JEXI?M0Xs~JMIxm54Wi3?El03P5Cz}U5oiy%9ZZi*2c@Xw!%WEJFf5O!bL_g zv+<Lko^Li8Z*X-xN6s^BnTu~Vd*|@i3kL3}0A}hXghke<r+;X~w0v0a#LoOv<~w<K z=lDkcp&In>KfZa&%Wy^N`@%&p6wZ}Y`rvjtAvi3oMEM_-MQx0t5XRv=xD>Inm_6@X zq)(}Xo4I_jRhGref@4d|>LOD*mX5Nug1Qik%>wI^;T^Iz-(Egr`qe<YteD8+9;KR@ zqG3($C>_E0*U-O}cXIYJt2TwMN~JeSip^YOrQXAQBQl|sm3MTze3(BxSG|0*3j@Z` zOw`&r!#|^*8152u7Fy3G@mE$4VzIQ`f}B5OQGX@ee<pwO`><|{hkXOM0C`D6Js7x{ z)=y@00i%ABynA<;-J!OZcX8ZP`eu=GNFRf+aOqnXR+bxO`K(LnVIk|Ow}?5Gy1P83 z(Of9^qAv^);;yAkT92SH<5ut^00D!+hxm#+k)r1>tG=62DGxTDz!B7}`Ga5za&z!y zQ63BYA_1w8$L9RRGBFuIwJqYdDI1$<4j&n#MoHTF8M@_YdN`}S7OfDiv^xApOQ6oG zAXea{KO8k$AFIO&y%%N65{7i`KJAAknJF0RXQ9p*_3gshkvBCx2?)~F3V3OWTzv9f zlA7f}&!Eu-Qn%#d-07n?83rVl_AXF>vT{$!YwfC5ab60tFCr9i10+D|<n!HBB&_8r z5tT3Qv#KqZ6m@j^Vr!U?wQ=FwrNk7G>leyG%fiJqBBb*T-P~-X3FxbalyBoJR9JE~ z$9n7Y5>so_1fo>@KY*a9j|pjtEq(ROq?3jLtHo(5sqD^th@2KRm{*$wpAuQ`60k4N zPtC>lLRx&{>CjaiF>TV?UwHP)nhGDmAXljYC+jZeMou|cF=X3b=kvz_mH$Fmx1uK@ z%f_z2T{@F1rqx%@&0(n2TFJ1d%}|!sH(RGmBbdyY<Syw)v?nieC|Oh-f&np^?Qn2* zvNzSe@u9nR0-6uORn!kv6@ad@zH0(a?O_2PuO?3;1teW?iT4|m7{`$kox3w>&tgae zIXmf~Mp8~iV#Er;H%ad46kVn0^3zQbpXEfp%PIRvrAw@5N~A(&>uRYgt<|<xb}Dk} zY6#6)UQFi1KaGnNUj7?5^`Xvyk95Bo%;o6C(AG!UnZ+jTk=z7BSV1O)QreD|2-Fo* z3m&k#<;+$62f2pa55P|wWVDY)#CZ3C+ZkiT+iM1kxBnrgaD#P+vEXIRH<Ug08j%K2 z8YK4bOA-1FS_|zPFwq~-Y1hen{!!o-<WpB$sn1>)@K*AVHi!9Sb3}GqaoT3;8`-Pk zG&hvj*>XfjEtq@L345W3CxFry<}Y@YO9^I!@NW$qQ6Cqv_77q%q@n?Wu^<a{@DQK` zFQ6m{*eAv}A-J2AGbOZtPyY^Z*x!&E;(bYMnSyvogogbyfF`iZx=uF2BPozuYM)wQ z3AvwtH6WvZ`+JB-DHD;SB$4p%a)A0cX?m;qIn~m8i!t;Uc6V;^0G_d4RsFkk!_9F8 zrSTEk;47{0*dYcCtP!m`SI<zg2BQ6&@4<<S$X@s%VR~~Om90JTqlSy|Sj{oQ>jBM0 z-zr5sHRY4d@*}kjm@7jVPw9;%8R4Yrp}(nCr-w;?U~|}c|IY9$da^|q-@ycBZ}eto z3xI<yx#t94(yOF#s%XUH(?t`p*27K!=xTrUVTYck=7Fve^@iDihn@A8Otm6vDOmIQ z0kUI->tjj#JINHXq37G^L!$t(aZMU&mx33h$IEhJMHEPMxju>2UsgYP+6Gk;=DUUF zx_QK*w{?m~>s$|kxzQOrk*jV>(jDfe^niqKN*d4|I;Iwzmap{9=09>XTmUASl*9GP z<IL0FAq_oiYZLv0ioJqT_@EPfcEz9IiaVOnC%yDf*ppQ5tx(XZ@nhQ6)Sl>?h5fKE z(Sth~@WuAw4=qAo<3_qq>sJm8g2n<|Cjlw!ho#5`G&gWP=AWYuGCUTBD#)Ehgr4fe z8i|jkiV@_6G;x1YK(Cv3LKfYhC?%qA4>qO;MRB6GwC*$b)NW;@R=t$y`>U%{DVF=2 zyhkKDfR2t<l)KeB-ZB8+igdqAiykdL(o292^#bk+8AnV8Z9<zI`Vhj;xS)<WjThlF zMlI4?3B7@nJU)Mm71ym9pKT)HXgoj~q3}|0>t!E+&0wLLOwdX_m>r#}*jH_2_8Z2T zFDQ$ibX?fFEs{!nAB3yych_2GMpO+^)aC)EFK%E9Crz!&T}VOZ(E6|8`lbgSh*Shr znp8$GDgzN0KCb~@2CCPHyzU?tptSoI`8x5SHE^aM*&SAL7leG|gwkE&Rz5~?0+ejR zFd%Lo7=1W6SJ3{DEu#%%tQfe*v;q55)7(2t-&=$h`WvlYJ6TLLBD^(zg@`>}dZV~@ zE?r90iZ5~WNlcC@$@Pud$E|4L!C8kyao+4Si^(gOy^Gj$M`Nl1(-xc*2jh=B2*?j6 z?JU<R7cY~>woI_eMPhQ40)a9kgG4(Eqrx?ADvDn@S4&T7X2ybi{a!G<;qgp#)=$#W zC&Jxv%JB40%F$=s-SJFV)=$;Zr^4NF4mK0sPeVFidQ{v48M=cAT;h<dYNa70Yck5{ zn9`6tJs9!(An?LFgAfD;)(GU#y9rYa@LZIU`ID4mbpVF=z-Bsj4gDaS-#Dz7lV@J0 zkj<RKD1|37<+FdoDY|m(g5vCRe!2>-DMI-WtkGC*u8IUdSG=DWFVc%E?se{-H8?Uo z8}goSTG%;Kvor*KoX4ECW1~)+xO(0y2MOpLNhP=&5&}=QOsw!s92Z#}_%pa30+R9` zqzG}W`5!6djii4v#$*!uN{5iG;HmmNsH%Pz7}~>((uN6D1d~Sa9kIGn;7Y5?5PKrn zGQr;6>Ht0fk~Ry8(jZss#&*So$$9E76*2vvU9ktMF@2wg9V0e3K_JjqwoAIT9akZA z^0S9L8)hP;dz!KUQ8EKdsnN-nq>&~=^x0GX8rH0neczJBVtG)pk$17d1wa0Ua6)A4 zFlxd<$f=~4SY_khLYWUHfhGOgZNZq;DYjpsU1vW)&!~uA5wfGW!yVQD^)2vgT7j2K z_+Cw;+lIz=5dY`k*=W^>NnZJGjVk$4<$zmp-Iz!AIXtwPQx!}#4cn;Rk4PgtHk-V< zD7FF^O*AADpa;AyT*7{7b#c)>zld!UiK+{@2J7Halc3_I6M=GgR~5(=bNn3IzK(@F z$kbWI7kx;xcVfAZ*gL0BGYZ@s85FYJ8FVkT);S!;j$UOHI6-Q&w?Tu#P$Iw~*jaKF zdu#yhHK>1%#PBXGL{kT-n1VI@mN5y4ek!BvTzi)hiZ;0Yst^b^W&=UtE|9P#KwT-W zsU)1RGHQedwh~C=LU>s)cKR2<T>~~+MO6-{5<g#)pKcaFd0wf@!Pxepghnji<==}$ zo?K_}r$C+j?Fa_di%Eiu)udGH^E}}<Se<j6fH%VRKMsFzHVl^d7&g!dH_(VSxMHue zMxRYapJ|OhAdNpHjXx-jy~ygjPDW~NF8_V6(sIq|mPTwrt-!g{O|n#4gM7!ctia#y zTgpXdp=c0wAecDx8o#j!Y2hepK^V3Ls*^Pg7Yag`CCBR2{|VE;?AQ{v-T7Rm^}9G! zRR^ev0Q$rS<THlRmgL2BKME_<{&lhP`bc2Zl+_u3fQewz0X_=-A!n{6K4psGH=^DJ zlfI@Nvp0jH#@Uya3VDq!5}GtrLG0H)+e?7(#|^{|D5{f>PD@@N%tc_JZgjq9qRIL^ za3I$tCfFpCaexpAeKIf_;DrvOR^_qXT$+GxsXX_+fI&^jZP>|e=8f{bz<AV}=?8!2 z)|^MvXY8Ia?qRyT1#etT^p8!UWWKDW;AfOxU>=Z?p}(|8t@w_Ere?#o(+1TQ1Kkz| z-4+Gi7Wk!RfNuXj{$Gr}Q;@AulxCZDp0sV-wr$(CZQHhO=SkbP^Q3LxtnTWEs@vVs z5&M7IPdj4&Ypyld{KgOk<HcnM4ozq<&HpDX`Ik_Yj2ExoqQb<5)0h{^f$XqNZoaab z7&@ooGOP_kiebazShW0Q&C>v7{jA$3{;0JqZvnXKr61;;7o`j5(H@hR{cPXao1gB| zo@@IVm%V6B<x~}Vo7PPb?$uLYhAmqwz2cD{N#je`+*Cj7-<Wf}kolc4r?aqZz!(LB zN`&t~GJY;ZiWE0Ot#BO|U_TdRnrJz*8(|@(sNl9l&)!LW_gu~ruoa#C9^-WcF|<{G z4B`iyX~S-Q{~PMz(@kGYmIcTOeZr<b>F8V-mp+1=|FL$E3pWa<JE!$Q&>lB0I_<IT z+N9H-X)d_igMoc8T-fNVxqB{JA67T~&Y(lyEu^7HticQq5^&6L`=38syF?7kADAuX z2w((Hufgc{C#?CT?eazw!=CH=rZD@cQFU%c{(?-}>1=4>7!m1{Cy^MK+;A0wqltTp z=EgBV_p0nt=2^g;`BLVoI2P^^G$CvuSszPtv2ybOv`8Cw6k0Q?5MK8bT97wIs2uw` zgVW1K@MRYV6$_na@h)}+hUg|zJ@qrz=fb+vWC1yHfM|J8n0dB}GcdqDq5I;AYZPN3 zXyvL}1)2_m%1!Vp6or{V<rCEk7`DUF=gJY5Ez)30kShL-ykZJ$<U8nX!zTo}prT-5 zhp?{|BfL_>@()%9j@s!)-ZamSJY3sQiy3zeDnzB4R?>+`R?=qldDVtA$)IXx1RBvz zsiVl5Zx(xdWm(3@%=GNAy4mQoL|`k#?~tBNB#$e+bDQv<T`bN)-|DBnt*Vk|C>jCK z`8t}jd+gcBw6LuTIO5LFzwV6Ty+1wGN>0eE)xwss{3k@X1tfBUvISxr4=Bpua^%9A zL6cnyC37h5#UXtm>R3wDhdJ?mL3_to2AsP<WDhpxP%{CXzO>bQCqhWOv84NiMjqYi zdTrq)>cLVCvgK%qcJ<isTFKZ>{y7vH-9o6Jr5C!85s(h#)0<HpJcvunu!DrnN)|Wl z#9kEu;YF!bB_0TLv<q0hz{<TyiLb};BW?vWU5KI&RR!@kq2r&L=@WHGL$U(NMGAH^ zh$%c!o&&_PX~dQ0HqLs<!Ms+j^&rtL->*Z~Mtl(%e<3OUV!T|}h<mUZKWrKx|3wn< zLz5nO!T8MmQ7~M2|4B->NyeBE%_y+O6gM2X5n8zxTZ!f8EHj)Aq7UT*Iee?L7r+(R z8_kFMxOhcUz?kq{Va<mr@!^lq0N=bNibTLNVK6MB7PUTaTN%g`H1&&me$f~^n(e3m z28uqWBW$7@r2ghg5Bf^^j43w+Vc?866#js;q{*QsU-y!>EbYe?-E9%+sn6)wO^=4t zN@ur0m^$u4F_eXS9hf3H$ghD(4%*)3vx(Z)zrpvqA+Wj;!u^d=tcsNv=J7N9AlD3@ zjBVt>usjK->dS<1qtmD>#UEv)=l-RN-iS~)s-7&DZx#PZQ%he2P8#=x6|D6g(8nY8 zg!bCE{u9>Ikb8S`%JvP2@o6=-|HHbz%MEOiJB4^jkG@PIhQB?=Dp4%wPy16c@OPDP zp+iJ&0RMLaQTmG&VN6C$;VT&=OGjOpl;!zjkC6BY`_Fc~vaqWf9CFEH1_zeWb} zRtI#`CV>E%fIC*MsRoXMiGP8ZT7=ANi88VF75!t1gEBPBIFOCXWK-!f_08*%B`B!W zZ|?@<Z1$<v7-Nd0jmaU@u%fA<_)@mU6yO>YLaCtyQg34m;#R3JzgNKvs72PD(v_l> z+<Clhq1>Auq?SYL$u`u)Ya;|CxJjhxL=iQD{*dXGW=(kzGVENmv3bM&41f;V!R(}? z{SDK>hh;#c90u5zFbd${YeMXn+-D~*eV`?0n^7oo4HNVyYj7^OTDoxB;XED_7(Dh0 z45Dx8g4)uiZxZPeynNW0+JO!LK2j391$ghsWqOoyF+&swGh$GSZIczF1`wPi6N=fx zvUDc!X((Ks{l~-eX=q$f<CS?QuEOp*;UCb}ivleMOEy#i%A3|>_0s{=S{TNg{{|qm zK;5k$^c!ser|MPuHMMA(*D>+Ut%7Y@P3#+NKrb6}fVynTpg3wovN~Xi@|_%da_Vuc zskM+x<xxW~pV1+&RR~?lCfk%Qbvvi*8`zE2=ts6^W(LVn8u!cyN1Fy|#p7?$KQbEH zeAwe2X=t)VuPaGtuDgnPmG?-+8{T9jEqlY@cib#4y$gzI8`{wzNVakDwox4BK;gGF z!fk!9op(d#BaGN1{=5-8qm78YJg}d#;&;LqZkor)ZWw!FnjO^26n2s0c2XVYZ$_TB z5_CGfi;dF83b;vZZL4FLvE{~fIdEN%L>*j?Jjir8gssK+x>jt(5E);cu|}WP8rqXh zuYu!N=_qFbl>>Gb0`W6=WqtO7p56z1TYtAz%{jsRd+A%=Huj3^S2PeqTR6PNZ7;?8 zH+R^=Q(uNvI(N8(yS55@c<NvTr@aa*bawZS+a4h3>b<oK{P(mpy9nGiI{31s9lWm< z33ZJ&Y`B$bu2UDZY|VAhqLrr|?nR)_71+A|3rMgP*uM1&m3?#t7H$37ALsO_t{G>5 z$AfQ6p9_d>12<U91}?+WstqHtYnq)Ox<1EI#+UBcr9?uP%kZcL;<OZ=q^bGj>E`Oy zuF0GAhf8kaqBKZRvp+~t75tB+#J0Em#93;PqGTIxGGpgeezJVqn_+VJv~^s*HEsw= z>!?A>m4taC4{S}VS;6Ep(C5-K<HP}M`@nN+#0?c}ZyodNbJHa8Zb_mYSIyuRLq^_} zP;&xahW<LNx@#*+PxPOQd%*s8<lkIA_zLSIDQC3~aNv_y@KYFjeQEe44ai00@7IV1 zUmSm`^NI+N>!Z8$$U>jkf}h;1)c2wF9#^S>14DHCo@d#e6~rqCJ1zO^zk}*~BY-cw zn{nQC+cgI$SqD3bN=K|eYVmv^>bHRdif(<K3HoX=;IX~<JmK|M|3Ji6;o(5k^8g1X zZOy)euk8T#OWc@U0bB3-?-@TeU9V!eG4Cd7s0EdSyT=NlVh(aqh)FD50G$Ia6$Mp~ zAmzlzL=qeG*rSo;>}UxLu4$|M>0HjdzS*V6XplgE^-ql24Hc|qgbAf2!q>w9MM{~c z7s7ycN_LR1Ko(3n2oRZYS1*)iY;3?tk2&L5!xlGKZNj3L$Ak_MWnIxvhO=DvRp1>9 z8^1(jkIg=e0V`_TqwBa%8jQB&Eb@vl%;Ava1a<Pz?bo)MFS57CGk<k@;Y}2LdAZ4= z?T;)1F~OY413a6MMlYTURG6^7C3n&<RRk-MEJ0xW<%G#0sR=vk7w6}s{xc4GMwH+( zV#8=t&r3xq73Cq|{qtaycyRWPi5&#>g<AM%FnF6M!(Zanc%PSx>E`E`{dhcgpYEB_ z2;Wg23Q_{5n8ImK6_t?WSuU^ICwPopt}x>dHf)xhFWQgp;X{pL+63%Kf(a{Pm240h zIX*khNY^{u?(qm4Tgty)Ru??ixZd$$AW`c`H1g#PuOPchd&6*T6iFy{4M-lHTnbe| z>;hK;ba0+g6^^Tz8nrP}b>M39{w!{-B3(u-$;8-!%4~weh~Y1NOpRV!9p)g(C9TM* zpSlnM6PB;}2FbYjhbqNskNMcU=zszG;mTU!q?})*TSfV;N1m7p_fWsGTUMgL#9c#e zGBP#vEnjP^(daQOkWp8Q5So(@El{7Ob%9$46MRowE|+_`a?T33>qU@encEeusvL4% zx6%u{l<=I61408^JvJfja+#@Em>>%afBZGqpX&h#Yp^|<e`Xij0>qK`YDc#ntwqlJ z>-#d?l{!coc?%bLi`SlfwJ7v54CWY(Ub+Kvgc4l8+YuV-Ms=%yyWQ)?-}Bg(U55h% z@R+`t@<otLGpuF;fgNu3%J7(At$-Uw4gcD{ryBQOxX^m^u}eCg3}t3;FBPUEGINXc z2`0oC!li7B>d#t#rwDvD09uque*A~)VYyKUOb3(1@l6qI@jlo)-xg?oeY$7QJ^Nb9 zVQD(oqWnMU!+0W*_+ik*WmWOY4}p7TLXQ#52#0P20Y@>u>@B;PBT(V{1%Hl?B0Sjx zd=Hd_ZeD%aYi7Z2A@<Bm#Sk0TN>4ao2SC?QvNp8XU^*o}{?=(7@wiEhxmixi+m=M2 zsDpk?2Z85`@YKl3p^2{e>Td9$6gYb=KZwPYI0M$_6skN7S1bArnlD9aF`LD@9#Z}W zhpU!>y}|(ql50b7k}Il`Nf)$pHBzstv)Y>=?9&tS@1dppWWNK~H@1yTyZG{-Om4^5 zI5fmLiY=RbNV7<@F_*DI7x(g!s>9oJcEgJhN+``1fyBxI{AB~5pmlW@94xf8QZ0jv zD>yAeLn%RPif|g58K1M;d$D>P!xwZG-7ivKkN0Oxxf)%%1-Ke;4{PUUZv)s&cLnmw zlFwH|Mw!uJ6R48#>U1XWAf*@zy{Zg-CGeoi&V+7kaWy9bEgUGK<$d|`*kH(Wa%W7V z=yD(ldU0B@D^kGqIlK$Mmwdqr^6`9qgG}<ZIT4FCh!bVw)3i%nivgd7;G27H$mhqa zas-}u^2mATx@Wa8o-?>8w$Yy3F@vhkFNt}VkFWAK<+feA^JgA=>Q2j_?r$`hQG%F1 z*|^Je?Uf>7gMRFezy$9tZ>AR(<&XKE{0cpL@?`n?qyzd-#A9k?{p2oC(Mo0g!Y*J_ z%4UKcnm|!Y8uE3i0~Y7lw+4PunvgZ;-ly_teWor1*)_C*d6h2q5uNC?N?5`CYDJ{0 zLXp)vDTDGJxbzsM=sOL{sAFUU&K=vVM%<iQ$^nJn@&c++nherVKP00*1`da8I$P5W zFiC4j(uO|>iN4gL3)G~Z@@Ybaoj{69Ddp-_`stmR$8MPJOHBHa=Rt}skpC*C<%?=V zQY@jXN4{Ass}OjW(C;Z&j+l1hXUW+$CPsmoV4aq%#Y@)P`@a1~DAZrs%@f#%h+-+| zqj^EI)RA4FLb>4zl<L36YQ^||?h$X^-&P+Q#JtYIw&b$<OKe42IItX-ZRkaLz)h=8 z3M#W<RnA?5dKgYe2g`Jnq8DpLz<{HOfhoc2-{*6oY3LiI%XFAx7HdCf;3%ysYfzot z^FU>8)BjNNG;C=HZhc~RbU-aEZMTQ7?g3o`)^(zh?tj2Mh2q)EOK_ipr@S|2z)^a^ z;O-<!DI3K)4||xf7v>y9922NfmTbyqZUM*L6bVUsrPr7l!ci<|#n)sBDA|d$b|%zp zCe&~x)O6`Lda_L^zzL8%(<$CCp;|FUYOf9}&~NEGclMjd^q&F|`O+laSz&H>qlP69 znX9Am0e=a%UW1S|Ds?w>rc*g9WRIPH*y$~KT-trqdxB_O4Wn>JzQ0l}jfN@U#r3-* zZz(@9kSpPZy{+jL@tSbPEo+d#;@Fy>!Uzdnz`)iRi4}*^GS3)M#XPL7hlcX@d6Fz< z3H*gh%nA~y*ZK=~OU~VZme@VI7qL;8jmwT3p)jP!URg&7UPl0Kw`bS`sd2s;U({=6 z9HDVKi)So`Pz1d|jPm%BYk=vrE_84zSMUQHRczQAEs1Ds@OGc>WpX}RI!4qFkb++X z1jNGgr+m^-z{eI=veP@{JC71^spK9ALc~K(R0rTK#uxBt97zwL!2GB?{I=1&VTn&L z@SVi+S<j&J9c4=K$3PfA0UCQqB)xvU@mV66hY+$$6qhvBvj*Zp6H%24;sF(Mz>%KX zgEF<zkHF+dVB#Bk(ILfbQzNg6gw;TEAUS1%N!xP*)vO)r>&KfohQ$$Q;Ycq+eajIc z4Ad2kc!Nc}g-qk8r=tIxA?WM)ej^S*#*hA?8J2wR9GDYDpp57gMk(1045yTDI{!zZ zs1`SZ!sT5E`{AR<bNw$Bn<75~LkSNw18e|t7Z%vM)8SAuCs72sROh_lny-zxRX}no zsUZ-Iw%;T{Y8FHO+9+YJ1FBl}-8lS`5!ezKB#Y4JIwO+&*$D=deGVWU5S`#2y7syp zBLTghE)oQC$oH;xI{MrV(pufzkFyLRw~}x^fDm~{{<|`x<b_7$lk&~J*M7&CE^_J+ zFP`#;pm;r9ps^RMVXesBGS-3A$etvhqi}dA$1J_;xg881OM)Qv#(u~Qt~;;k=%!j0 zEm|0K1oH>vpz*1nMUFjku6l+Oh;BG2e7F(g)<QhbaPBqq`EW`u(XAqN`I7_xm+GfY zdJ>P(=ky1R0G;DEK({v@w;SE(HLv@zuDeL`>~)Zu1!%^Z96uRRsKpq`jL|Hj>hsor z&o79aPTT1G2JxkTgZTd!zNUz+vxT$A|4c5Fr2JZ9<>5zv%9>@!_g8>)`6&YD79^GB zlL;Lg$Tgv$ka0%C<Ozc*BxK}zyzxiT@NPlD{=*c@mwcE@oUC|m<8AKxlHK%oyQxd! z@6YQeihraTf%Bdy1j1G_J+2_IE%QFAEwqiGsN|RghTG7AGK5<Q15NDgSb7Qr*`Y3k z#T45<FRr+H{H^=|QRrT=0j76k0RieP!|O@4OilrdQMzYqcUQq?)rM$*>Hr2+9g1V7 z4aBC_<AY7n&|Fr-C5_AC2F|8JN6p3glxW1JW^S2`?X4R{XemvOSw#1HZ8=wgDmt;I z*2*jEpnNq{Jnd;$=eW|{RP3{+5_D!qNv-`ReOoxuF-_8i9fweHEcAA1`FinxMDeGY zbyHl}f~RPHqxc9_QMLqdt78@+j3yX!l5%KF#Jg)?WL$_&+b~i(XjHC}$keBo8!$F4 zT`&cYo87ucp(d%s@D%08A=7gzKKt1UjP1t@#jCXr_r79e;q8VgSKYjJ;pbwqsUE^Z zYI7k>P^bwd<SlL4G=IG-HW5>i9|<e<G2$qSDWNc<sM@0iCho>C`IQHdEOj0`CiBAo zP^u%Cc~_vpL?fpr)>q=kvOscxUbs)#@3%Ge&3#3ERWrHUsOUUl6N<U$s8=o}70hSg zwyozZ&3i7+`C2MG=BqDF%Y+(VJ|bu1!n7F=S#s@YY^=>cY~k!xw@PWWWn1@*mH**( zBP`ldC<B(A#mU>4Op5y(x3m9ej@1VYQ$o@2%p<j0Au-xm{}td8iGnw~$Sj<A4wlc; zK9_lzN0^F-xI&=)6fhCDkIb*y9Xuyxhf+>&I4N}Gq50Hmk^g?;me)IK+zwrwbf@SA z8Z#HCFHahqaBq+|&>#Z$Bc2Z*-gc`>!ofcg(-}xaCml`P+^1c*04Tg5j~VX__y?Z* z@nlaTFz(aE-jk(!FDe%H(QCi_cjPx!5N@JO<CMmBt0%KCRu!e?ui{bxl;@7ni~Fg) z6-rYLuTyvAx{|@jcT`5@WVBJbEaX2-359`~;QSUcZEY{X+l{yrdTAtxcOoc5Oq%op zf?StAom!`oog8uYB=-<!zHx;2iuQ9I{S9bRvQRjL=K|N6#rV_2QSFX_6bIPV97sGD z?-5_1|4M0Ln`Jm*`Ay?%{-*H>{?F+m*<Ty_|4QOp>0|%O>PXiwrCArbSuF}=s5S*R zosl}_HT!y*r-i625W6JKP@AP$lZ+=#P1kd5vLcm{g@tQS5CB0b#TDRzhm#dI3&m07 z6%-T%6cp~hhS~~Grlw>`o0^C}*PL#4I!?HDIbOD$Omp4e_74FJ1wA0H+PQ*Ry(<%k z%1E{b{jO^U%<S=Ic_$6Chrha?01?6}<wL+Vyk&=i!v_g*p$bslq}T@z2dQHlU%eq% z*hl0?G4^^Xv+GUa8u72hh`kAd-`Gcf{*E2Y!}kV{y1O<)>5ZtVbI<tY?X4$K_f8yG zQTNWk<yH=`-OA+pPz9GcBn~T4_fA{w8r<o)USUA)BHj5w^2Og)2cHms$`8a5bJOjQ zBKi{Umm%uL-!eh+rQJe<xho9OiF`^9)rowH^2@l%d5u2z3fql7U$4mEH~>DOxm?M+ zQZ_Uf!j2w@vX;QsA;@p;EUx^mDC)BFGPBasoBbE;KSImHg^jf&rgk0Paxwl{UWt(- zxiHscR1B}3wV*iS33x0s*$M&Cd=^BRaq(+<aPxKMpMItQw$OxhJCh*k5g9Li{o8|1 zFRI7^2(678U0pe%3GOJGD(#GfzFv;0I&HD5F3JLn@P)am+4fszU}YvhxuMWYQ|spk zDBSV&|6I{MM>7kv)M#p*>tJzKi<Blg4Q4MKg$*>sgXPG;ey37K$k!#Zv`ys-nk{IW z*gDQ;ljhM_Q>Hh#DWBYDMCY<Nf}%vOumTn++cs6gJe!{}yfYOZZ8%TU=S7i%8VUDN zXFgd~Ox{;M{Uyv;X(?=fhPjkanxZN<@6fSKRU8=}=cNx=N^MWxK(EkZJ3!@dsW);{ zoJOb6G0GQMmQOUM=OzJSMSf_SQJeZb+Ga(<ZAkM@dt*OK0gs$1xjBWKo6^`REO=n8 zc_PzK6&R|qn#=`xZpuo=>5NfnP_6t^T6CCIf~q-GmmRVL9pjiNDK-F&F+334qHAaA zVsZw<>0;7gNh4xDFs_9tcM375!b?txw+<l^Z99uz5WN?r#JP|>UK{G*-83y`XRC-) z>@0EYG)1&;;<gjb-}IKZYC13PRkE2iTc{{DtS15@v85M#YYa$iUAbqFeYa@Yq-Ok% zMKzm~<^7jia5i{DJV`xGt)pdHX|BTA%2J6wjzD^oRdghef<ts1X-cAPPoBc+WDy(Y zR@O0NmNiw099y%Jqs<*N84_LYWZ|+wTF3;EX5^X*I%k!DGRGL>$eO2W^lYoD=2&_) zZAqKQD!s!SQuSIrPzz=Af^G@d8{*jr+L1$pp1eZ3=xPKt{N&9#UaK&()S)%$=qfP+ zdYagP;ecV+hjj+?(IUm-lSX=oNKWWWW<-U^sQB6wjYA#EKzyiJT#+p8!ao9#$VfY) zMb2TS_ysbRwbjZ|hf$%h{A3@?c7$~=B;=hO^<Hi#>PY0t%Y#0@lw--tSZK^x*~-08 zdK4xWy^Mh2*N3O^DKU~aKdbxC<P(%G;<d`ZBx&qRv$n5_tjH9F_3D6rm$@XtEupy3 zq7wl_o~Y<u-;%uK&&1mFoS)F&@V}Go*)m(vTEd?~BYbys7^{1`)U`%;co-kIdKe#f zjnNl(d>D9xqau|F?SORSuOQd(paLT`?J}Vg1ieV$#@0hwAVa0aN{fvU59mrU;+D)t zBuSj;7!zfSMhOHwU7Ui)16Z7t*Q(3#Tu|FRjm!CBz#g<ufET=~%`I)uEek!D`AziX zFQzZ1PsD0$Htt2D8A)=Q1_+yv3eX~%-YD_VN*5v}D-z4qjMjFg%<|O1lGi33(TU0? z1u$-NUMp1HATkc+b28^V6sA2&EXbLP+9hr^&X#d4+Is3cYlocMorPKw9s7Q2J`=`s zQyu+^%l&*_tM09vJU1w<QlYx+gZaxOQ!AGgxZ2u-!zO_<$%$r4XgVtu+nJfwWwwbV zDPAE1kPXI|v9eXXMUNwiS1UWJ%I#m6MSQ*r$Jw!UPUed?&Yl`UdRF<*dX30hbZg!+ z$TSsTs0(gVToY$XRlqsqMRX*Tb&uPuaW~8{WkP!kQjSPpTw$UCBax>D5HE|xFx$jJ z%s>htbJ4h&<13_(2h+?@+O0PJOg8@a8|Pj)Px&3qTP2#;<<AAXs@tMn>r>sQAQLOB zJAsuW;PSqo0D=2`?9-TP(OlsMg+SH#P*e(GD&~D}r0>|!{i1b!*4F(Yq$KCKtvJsq zZY=RRk+uJl;<MuL$@lPq2HHoDTY?*QLbmqsSK)V~q>U|^S??*8u&&26YVGU=AXq_W zcOtJyL0Z_c3WsC$GNK|w=J%oWGLU#JT^2ER)dyblr}HYiSKT{aE<3$r;LxnVx-)xv zGl`h$*H5Z49Pf{*HIL2u%jp5<v1)5*ukwp}2KBV=E%h#|WbCk7pKX%;uxDM8g;Ln& zT`<a^kvu_EbfyOo#!U7MP+<>s#1xX)BR7T&mO=)R%I$Lb2SH5nMzWDWR3jiz3pZGM zArQx<@D+KL7XX*%_p>DnIAefX<F)mKk<-<KY2|S&8K7e5Q40__8A;b&{;W^Nw~SvC zJvw5}(h_^SI6XqhQVfQGPfOXKm!>9_TNbo*G>_b+j}|g;Vx*7=gM+982AO(vf_KrQ z8L9j8s7F(kGhd3psBs?sQ@mvF;P`bVyOj=)cVs*LDM9+S+<jmh>n!QWy`=X&CI3e@ z0R88Xg^U|wwUd$W$k-QxD}qOBn+F*6=Ea2JpZQ33BuBtv_r!-!)p4%c{s1hAwtLpq zz_B|Qk5RR1m$xb_QqmX*s^{d3OtLmx*B&KKyCi3S56JVMOmOq=MBkgCF6+b|*LP(x z3Kuk+18$BUm>o$EDumu`4!@17e6>T$B<uJ~y%@Kwmut-KGUj)T;ZwK7XPr8rFHNkT zq|f~?#paF@Z=k3iaOXH^B}aM^tR%CWl8g|KoEQ&K1F(LdNQ}Ba!dmX-=~&@2HR|>t zQb4rN%cS@0I;S5NzGKa;I}5JW(@xdXO*MCyKFJ=(#cFn*DEKxQc=;NjS6g9lsj)i? z2d6lsQDUapJzuZ#7LTQdk4D8lh9jq|hl3^aX(&Z}k{fZ;=wD#oLvTEng=}g2x^VA@ z#b3sdk61X5aSPi9&hO=o^Q$PdSlcbAjP|8$4Y`yK^R<mPG(OHL{+ibzo}C~|F|5cw zl_~y_9tF7>VCSyb^#!!`1(p!!)K&cmd+R$>zNw6l96;_npxTE3t7}iZeR(OYw~k%9 zV7PrybUkR=$Bg<#Ag{nnD_0F&wnbfKxk5ZF=jRnl1bWU0R?gup8$-n23m#9~R=tWq z;~SYq>KWv}N>MVPeW$~S$Xky)VR~<0Zh}xfEIIN0<vU@Uxnx6kSP6>mRAUo&oN;+~ zp7F}t3-O8l)ue0`TM`YNKSOW@p9I$I!6@1pplYbJ#V;`>&5mgj-+TYv{4<DjCu0Et z0C0f-0KoWv-gC-3+8LQRIa%16N!b3nfLx56E$nRn*CzDC4_OW6XU5dctdXn0Sg3x# zgBT*~GBkv>HT~8yAypi)KA1nhMA|j1-kGUuYNoVU^Wvi>MY1ZtwG~xCi)PtXD7=K% zQpNjk4d46QtKMsa?@i9QaT4{~cf8ju&&$pY$L_Cup{e6}mr4z=_-+=$c2pRoZJz+; zCNBREl7cq?9Q0WbCN9E57_+xJIUi!b*zkeT!RsiCx8NWdi??JoZ_Pdvf;Vbj)WO4R zV5As}H$$LlHbPch#J-e5_VA$scL1H(9ZELRpa+Uxj3G*I>A{7eui~H*W-oy?FHNYK zvNuzpOS=4Bbtp6f@huI5HnRUN>Yy9Qxm(CJhr@n!=m}Byp_k!nZzvkGw&Go3BwqPz zLEvp_c8XIgMY&Wn90kNRwXqB++tV?%Q$9DV;YQGicy6Y;9)ZzO7z`KLN-pDR_E-wC z^(oa_(V4YD^@Z_9gA9|;sQ7q8Omx#Mt?`s1g;~tA=29|~Y_0wid3bE*3;-;wEV7J+ z$6uh7PM=UG!Txt)l%3jc4pU88Ij>y_qb>0hSS#k9-3CYrY!;<@?1$!}{ECrZa1JIb z2`DTGpZ>9Iip*;8KV)rqP$@)~0wK{ec|W`p@T+VgvMj{w3T*-(dGkwLgxdP878L5- zzg75+7tSNpP$MKLba&MW2v(p{Rd2Azk{o4wg%yX_hO{{uNROSyoI;|#))VM7_MQcz zrb~<?#^06+*lzRZX8svd>0#Qgj&II?6`TbcLyf{4)4PsMZTK<erI-|*V0S^pmsm%k z4ogS#|5Xe^ZJ@5zopCH$%GvK6&v@3EWIWGwD^NlrPCGHIOel4uIybcxTXv;k4#wEI zZ$$~X7khuUv%5b4ZMse1C=6EDByu3Nv}#(T3R9h;Rt-Q;R<UkB1ciW0Q@zB4$dTFB z>oDOz%}ntI5t^(_mg~_KC>;lqAC7$suFs^q9S=R&^z3tO<5!=$vvs<3M?+n-x>74k zpSL4%xoD3h2c|mDi(O1j50GrQT#C{ed47F$H7E_EfKDEWS#~br=#?Fo13*4*jT%h4 zf-%(^X;!w{Dcup_c-c!2Q*qWFsPraj<iV+zI5w!)<1lr#kvq!r|3pxV|7lDcet8<< z*eFf7qE>&4Xg4r9#29RZlJy>njzekeIOJfWDs+?{jhnAJBpcY0bNPg+t9b2*UA==w z`MY#SrM-A(^%)x1Axd-pTC=9f%~#AhA&9rOF;S4R^ea8Scm@70&v!sIZByVBAP4*C zR2eXgveVh6<o-&E<%2eh9YDRs{to<m{+b1m*{CwQdk2SOH@58gJ@0sa_2{&6?-C0) zW;cGmzJ0M}mwA@c<5h*INXG|Z`(taGRJ*)~g+?xtM}sOuC55``m(+smtU~)7o6XD= zySWW^oTS6t)-&6{&Aiwm)aXa0uC={q<p(UnhYSJ^n^m+KV0IMB@ibsY?X~UOu$*3Q zOR4-c#X&o3&QVtsK_}yNC5xt2PO^z4YQf)ljP_Rl>NqyM1y_uPIZu6dftysrmd#e9 zaHnuwqnjp?R|ZMy2|7Qd^{$SCDu#6`<k!z?g3~0kf->oB;AB_;4$Z={U5!Qzw(X0~ zDwh)DZL!m4_ODf6T5crJ>Xqo+b&k>xmetV|{Ag`(xh5NBrXW^=oK6u!A9@tR>~>WJ z-l{$&@fvr4)%v7bAN=|jfRo3+bNKw>`>9^JrlwQ#M9)O;sTQ@o1_>Sq1>{|+&d7$+ z1F))0fsH#tpOPa)9sniSh%yYSISOL<oNoGoL7<MaxS$>S9|q!rSAA5eAh#1*3BYmJ zZs^_E4_j}-UR$@x;iszm$j33J`NI^$tAc^l3BMm^aQ9e?mxZo8n;K}#G~BtD#p zX)riWR|S+)0~H$-hboqz6^ie`=xz{iF5)YkJ?heCB2Wj#nIIbpXsb5M1j>At>7)fl ze}5t*(??W#AW8HLlxRsx1H!-5&UoL)4fF!Q%xx)-F%P_-9WhJVVVqoO%|;_ADWG({ z)*g9`cn$68(dBx)phkT-{V}1<D-=Ov%;~{~k|g)hst3UZy_Eg%IFx<??8FZQ7$rml zzGx!cbJpBHTkuc0lyFrFH^V*)gGIiQi{Dr^d;i|vIMp9~cH)eBiEQf!aK@oD|An1H z+-zwbi?6v6U(PG(>kkcf#x${`lxO`c-P8?0yrKib5sl%SaYz5q(^HyFR?YhMHk&|| z)@%3kpCGG}vxn&*t5SZlG*)u0A!ZL)5{z~U3F;nB>?=!!qj=M!SfwaQt?9HxoE>DP zDOEtNfHk3XGqIFSu;Ekc{S8%8hs<Kp6-2{EU1skZ45IE@q>hDT^hD?2CiJ)}9fi!D zFih6&B!|`|*wG+R!ZQ`P>4(fkBQbpYq{&VmU$W1>A(ev*L@!#288RUZH)}A$yg-k5 z`dSo+Av3z_mvDx0R*mNlbHT|;5_bXLR%udqaSc<X=}(<QW?c#p-W8vAv??LF)pLT4 zTPR{uj~y-NigM+iQGEjW;-q`CF4~TX9;`Q>k3=0OBhOojzTrYI5?XkfZX^a4mM$18 zj~Ms|M;AA&Q9C?Mo2u5SN6f+!5d$o7cE?yDJ<O_NKk0FrL&3)JLyA`usAa~ZM`Cp# z;rW1!HMD3x!eos(+lZi@zkE`>ic^cTJ4kDKoowA;@lTGsPefge)Z@%x{pA)@jbJ9I zH;kHVwm+ppJ?+s(g7TS`Lio5M%I-VLppJANQF<AlVKP664$3_sm9_woZayhZ!z!%- zQVqS|g3&!>`kGQ}!zxiG?ILN`bk3}4)o8KL6Fb$KmEq4JqY$8KdA)lk3dv6Wz*tTQ zM(xjk!-4Oj!5De`B8?Y*k;ea*W|^{y`+ovueUvs8e`(-6|3L%SxJC;J7vzVKn5x`^ zg%?<&tODZZFGxKeB*qx{#er`~!~cwf`vfRfeFE@JG@7x|8bt6Kcb1jSp7Cz4>;3)v z1EO!VEll^%rC7#1ovpz?`o0m&k(7FiAzsZ5YNI`?k7sMOq1;Gf6gc#?QpxEEQ%KFz zAdjH+EEV*3F{+5T`sbkF?$xbcGA7?ob9c`Bg6(1lYIHwmK`)J}U1ylKeON-I<tey^ zH5~frE^!^9)G-iW4$&dg?Ui>vK-WB}FYc!1DO)o@pQuZYeTQVL=22q^t{~|0FtS+# zv>umB1j&~DrxAPAw}@~j(vto9uO|%fyc*cUv4zA^$>9nnC$1tbT?N;mdS}g{PuadW zoBpC)AhgOwyg+o9?IKl#TC5`98ZA>@rPk>vz`WQpw;e7vgxn|*^eThxK0_}3qjZm2 z-*H89h)Fb)c?BG&Dm8IK<zYn#3%8N@w^=hx(~tW$_t6Bz4QN_+!3`lzAM8)g@<ool zDDyy6uUn*8A@TCqxr+i7)6s&Oo3o2efIMchEESyOla4O*pg9?7=GR_Iz~c3n&uiCT z>Hzo#i+87&K*~8acrvM`GN*XkC}WKE>nV;kHAiNc`HEg3eIN$RJ9-b*_+W(S#FCzU z%_#g;!nuPyA?K~QEo&i5g2dJhL0bjop6O5j=WA@8C4ozrZ6OCvMzgsTyE%u@Tsnkv zWvnM@aUKN4%>v4Uh`<w0O34E-6N+0fjgnq6EN27J(Zqm&YB@$!;#TowHi<?I+XOr! zE|I?$=d7oeJtEe|OuO-O@W<0aWixc{G4ZSTDNVhlo4lsiaR0T*8-ns)p89+JGW@IB z{I#3`*g2Zf8Qa+~Thjdx7P6p$k(G(Dw8d`_*~r?!$tgw6#tmy3!FMIGC$hUC#+r;h za%=&ex-L1K9}%C9we<oy07)rvL&jZVWnn{;s4jb%lD$8Eq0_=V;C_K0Ns&B2AL0w( z1o@(vqpVr)wU2L)3vYu@!R_C*=M&;vGj@*C%TAY*S#E}h>Gk>M&*#+*fMWZ6q?rR_ z^oKoVw9XvcoONUv3|-Ub0E7`HQ}@)}eKCyEh&4J?E;PaHEC+5iJk)14ToFo{P`wa& zWA`AcWc4A;g*&gkuZv4c8Z>wIagP&sci*5Pm9F!C_fXSA%`2$xzx}jsvP-_%K@Zh; zAgWgsJgvk#D-1NjS6HHUbWy}IlWxMpHbhq0_0E*>7-Z_vdTdA>qo#KZ9u>zaZ_6oa z&JU92c0$C~7?jHl<yQJOFV^F=&;-m(O3v0?htLp!C|r7)MT~fRzfZrhm8`S8czA3I zV_3*5qf!%WifI{)X9gcixnG^8py;gJY3sO^9n<O2RAI1rPk{l?Lw3SbJ>RX6LotRp zdC}|z#v%umfTR@qcY!1($Lh#0HMJY>%s+Qp@-((<z+*d8B1Uc+69bV?Ab~oZ<HL8; z3o`5A3~Y340&H{c!QxkLE^f}cZB}odTjUNJ3084o<=&VOgSwecmCb-|*x3NUL7zM; zbsC|@!L2xUa@M0!AB-ok$Y2erqk?F$F`pACLpgw<mzix@9fCcMEQ#GfW3`5bVL5XI zn?ntHKo}G(6K|RWAxHmtfY9HzBMPK~VMa0H*(~44G(wOxzN%}mF3U@O=mxdmuF|iI zeYDR4+SMS||K;wVR!7AiP-gt8+mGe0)K4!;Y+aX*LV-ocakw~mWYx;v8PD*qr(U@@ zmb2Aj8YZo@3^uDpR`Dw`=^TSckMX$zYG+`R`!gWCC{u*R4mqkaX_4kB+W-w&dw|RP zRtM6p5@Wj&DwflvoM{MCGLlL>my<)tWTAe5@1Q<#vVEX$*Jv*cS$jASxqH@^J9HE! z+8{V=kdasZ*39)wNIU5+Au!HCr=Lt+^_D_Pj{cx^V@xt!g>@l$0fUDxd0G{8ufT}o zIash}CdGVA9`vlVBvW<1;GQYc(m>Nhg=@K4B!IrD(#drvYQ#)<)&(m#cm^sj)LM)0 z;<|Ntr4AqEDL`M_In3pZSK&}9NR&W;RJT*tZRCRDU!tS$PJKBYah1f`zn)U*stW$2 z=#>@o?ag>4d$)4<!?ww*I;un#r(iPrK^Y;`9Aj_K97D;b4QC>^0b4kY)kCB$AV*VP zDGau;i(1iu5^r?X24gHDU$s9Ox^VldYrE}jzu5>9IY;HEk-#iPTe(#ACDGv<`^diM z;@bjVGFVMBnI#7{ouRH%s=^50CD5U0O&}gN!9q;$_>nMkmRNkC?kbYR@vL~_<oU-E zc)#=!dY%B?&i0#r-pq<x`sYIceA8-WL?+fn;$*zXWHSq#VzV$*Dx!RnUO{;&-;jTi z-{J0fVodMjsiCgK!8p@AC!1%tSI+LP?yUX-1B0k|9n%M~jG8NL>4Z@)0eo^B61zWk z4&kQO37q9-cMO^jUE$AajVbB@-GT9`<VJ&f=Y{QIg|GSbE#o}<n~{5?=p;VXFY#4s zp24@wi(Ob7Py@j8RcpS`HKTR{9J(VT;+s$#MO3HZTLMWa!V{;ToR}Zz<Dr5&%n{Cu z@I@(PI9-8U5ROe_Z##R8it}qM)(12(e{4D<rezHMn${vgo2;_>mAry3t=U3U+r7$A zWm4yrBJOkzfycT`4F|v`6#0(L$cAkZ`TCXIkx6w_QAMsz&NtJ-1M&7Dy+iXN*SMiF zda;3tIm8j%$MY13Ki#+SD+Cg<um~MxjL$gFj9Ik>+uQ^XKKdsY{+ds7qFQ}nh3klD zJwhGzF=i5Jff@P=*A}P|E000Z6(w~eXgzpfSPB8&_>^1rstl1mhv4DGpaWtPUCZPr z6*{8n%tA&^0dmVAc%aVi5f7U~ksLUMWJUG<{KqHv=PDgZmx*oE+m`p*p{Xe{D>!k? zLyd>SDY<c-($V#Ogww}yf#iZ>Cf?8%gh#VE+9oV%SH556Ge(w_s<-pWv;g$M_?($_ zu;QGUr#Az4whVO^-z|}72zGVPi+I`-jD<FANM<f<paNxUx+<vo69Mw3J>m+{huYbK z`68u0(2F!JQ#DQPr{{^$*wB$){>~E`0|=Ge{$x(X;IhPznZonB;D^bIATDtUNmvSu z^As3oD2ZLNzLVT!)chFeD+Bz|De+$;4hnw~3qN=w&}px}++2`kN)xd}H?sSU4ix;> zjnPHF4q-dm*saJ`lp4gj2+&ide^*wt?Jz4~+9C7#AkI?<Bc(sv{F@FCyHiMS1os|V zck(r9v5yfXoW7kPKi8Ct!0Dk(IjP6b{kfYa#zvY8`z}A$PBEu<RO2UW$P><a=FPjt z4e6h1l^RlbsR3ZLhTy!z_Am>1Z9RYL_cP<KmPZ1NF4bX;bvMmtcC4ct-Ml6Ng5|VV zGQ>0l$xq-2I$MIXwn>~N{0dRmNU)6e4Yn211IL_XU!d>gYV^wo*ylHq`)2l+DL=sf zTGHDenW_(dx1mGO008*^yOQo?@?W4^F{-;tSSsi|&;(el&;jt|A+3e2n28JOT2`Q% z&=ks+`SO%CEtYA<A^PH{*QK&Pa~OEeBj7oA0%hN@ynE3HOW<Wb^B6zmqfRfjtWu2* z-s?SlGj6>P+c%do-`^)Md;mxFMFb%vutM#%`!>j)9Ga*_C=8tihAP9F*p#+VQ=Zsu zx3O#M@(x-;c-P_MU4}Qc?%ia#FUs9@2f&~_aFrvq75eq^O|6b48`p0+TN_YmrpTvW zp(d(19+Ty$Z79UR@ExMjn$;>efygk(uF+wlwb#j19fIqw?G+fYMk#C;u@+R}GpSW3 zCyjyo&BChD=c=|j{^u)GN1=h@y{d(Y!UftaYUf>9r7n|e)#<heg$nER)s5+1Q3z&T z(kn)Q3b7`c9Ug<MXq5kGSri0>Rnx3z%kfiet2D;Og2$i%KxcNCA`!Q=Y@{{R$RpEf z7ByVt6qk50_*q;;X%=hMAkd+<uUoQ^iO%4|=Mc9a;2lW2HK|tIc)aONjB<({xFEO^ z{|G_usE>n}3}n1tz3=EwJ6?v4Tt6P^fGLJ~)ly%?hllnXw!+Otp)A(l!!jlKXRus< zNC};(20@DB5jX*+4fF6p0es9f+tgk@=uij<ot3~V57GKb>P#T!;7k!1H9u)?Q)Wh) z7z_vapUglI;*8Q)9SUu!^^cQAa)vSxijv@n(NEme)PyN-`nGfG_G{p%(U%P@-6iDn zL^6OP(X`I8P3kg7ibm|wOr4>RrpMYaP)>^J_N$-BiS|dNPIt&`HbfULDr4BADRHn| zBm^E7kUq3}WQuXwMy6_%?x*J>$cAkHA=t_I-p#WRxBuC9eZX|S8ihq=vqR=1&Dugw zKDZZ9gB@=XO6_~-R#ED%BRWOw`ByIGyrE+-y7kijfeTVcgMIP<Vm5h7npl;wn{Uhr zema4h|Dh)A>q?P(*pvsa9|>Yc--j0rIU{Nezt{`VUWDe5m>l??EY>3)&2K^L!W#TQ z&7mhkHv`JflBeVZosdoEk?n>~K$s-cQ3f}MH1LI)fL4CtlIA5S`nDw@SBKsc%}j(M zO?YUszNcl5p#YVk2k!&+#BgBvh-^vFbz>&U2u?q}PVKC12wV$7iE-EH;=mKNXiK8R zEtFxj%$1Xzwl7w`&WC_>f^1WBOt}kfecJ-yHBm=0oGb3?TaD|rU8OJCIO_e?;Pbbz zSZ^Nbk#bEfGbDy!;>0C9?~NGBx{opL0&KGVOp1Lx&pSgsT_{pvZN_OIbmY6L54P7X z>MtY?6!)xaBoJMFPNEK~bn2KKuiBDM$BE;q<Laslf}MK;2VG-WC*cQ8{|j(GkMC{s z&Do@`!aORU)wN{=gK2(nxt?IMZ<22AZyi|`kqZ~avXX;Wo118x{zdZ07r#Z)Do7kg z#Yc*U5b}J$_{7cUjq{4^0={=F93|V<$Qz}2v*^OX0cnc))D&HZ5H$B-<dV#%lFVlg z8>EI!-9t8UpU0bQO(P=wr47Imx}z@o5t+O<22&48XXPTHdH96@b0EGF+VjFr3e)3F zWZbfYSEx&Car`AdQ9JtV1UB0_)PA6yHW;rkV>|>Gcg6n-E#AF9_@uRm8T@8|c{tRy zk29F(yA&doYR)|H!o7mSk!HPNxz5CTSo!;3*GF(B>9f+`b@BH1q5c1_k3x2~MlOzy zzvdT369Z!tM{xrua~T7BVut^D0*Z;2ff}HP57~W1)9Shfpw$j<XN1_v|IMxl$iZ(G z@GS{1DBoJra{GrN7S)38-s<y)zTwVp;`j>_<AVqay3@zVxT`2jqYsOc#k5p!=c-J& z{*LNa%{(aTAQP}_w@j|1MD+R7GqEOBaL`DdQ8#_wacjWyhqG!n#ZalNY9oc(l~gCs z99^qB9zZPqc%yr1LGLzy^(ldG!-4k}{6+Hgz4-554e;7qWo$qIfcf8t{r~+J3mP~& zT9`OW+ZkE?=jl(LM+*4YV3t(3c*M*gN`)mLOrss|92o+r5Dq1}U`H#|c-Khf<%arA z1&u)c3HVL!aBXNnL=J6dwma3m?tzzQcLRXTdO==<l8>X$!yhKk#jsLb7JR?+9WQ^@ z!GM(MWAw(E6}Pr~ra&#-bwh{)*TVMpkyTx+lmw4yw&69XD|rpMU(#~v)gX(QYTS17 zDIBxi&81XfrpjYhH09NLMsvaN0i7dV_c%BMmtZ95v&V>c*D-!#{k7o4z8J?TjM4&t z6<qWqN7(ELi(<v4z*dAIMp2+7KT-iW+1cQsY2Ed~=3!k#Od7>?;2wL=(-Ab_mk6v3 zrz<dvm|Rb+PBn%`4ILT<wA7$@r1mQsf!h~9U}1*${cknc)GSfW`ggMN@t4m0zq!Zy zKmEskCmkLCbI>tGdDC%G6<KGLw-sBggG&~uB1<uovo!*WT^=Hhm4F~rn|y9+j%}D% zBAHS#{urj49_Jg#*FTNB4+c_+adA?~>|G(}n#LlU;W`97r^jWcx4LH~;rsLAiVgs# zx+I}r8ZFd5AT6rfdwP-tHf>SdP;@ZGw%9%exURu1r^k-jJ4+PK)ICGWAomJZ7nONy zsh$|WZTh{{zZ_!7PdN@0EX{4oXR%(!Y*Kx5O+m#kwGjJh3{9Mxy;qFEbJ!u7%`WSy zvl3dGu4^Y%!O3lsEA)oKWU5QHW#41s?uN3dw43C-!SFig&q9T^;chdQB)-S6BlS;a zpJ(sA!R8+>yk#@X9RJxa7R#kJYYxknhOUC{kAI;x?$T|R8yBT!cV5jDUp7(yBy1^u zSe+8a<y;JjL{2XDK`J~KbEf>zH#xRjtQ2Gwd92e}Td=Q_KY`B<7K8!@_Z<e?tcy~{ zktfk+&}Zcm!YOupPP|f^mScIhN|GOW+V)kJ3x|>7et<(3v&)IXB4Z7VU841sN6|-I zyaN>iwz>wYU^jaYHDl|#L&Q{CPPA%^_EY=h!N)jd520~DkzJ%4&Gx7QthuH-M*fxF zJ8z9JPWz?gpx~G}$PQNWpBdE#@cVH!0jfE3c<um;Tc&$?O;jiZ{lqt-99e6*4?X-1 zmiy*=eU0Y5g%MX2Z!8A-f@Y)^)|Y^8WK;jsh{?m@Ejf>L^c9SbXe@`k!;dVBOQ=eY zL#T_M6c!)C6eiwXxQOnOkN)n%|3`3wz<C_T^O&BIF^YjBP{~>M57qudKAu;!FbJ+u z1SoD%I5_TMqO&Zgm^n-%b{=`R=%-1OLn7O;`<yTwa3N`6ooLvRu$N<n(S6#O*mxH5 zbh&7hU;gj;2;46JYa&DyN`$cBu~s*=EIDduK<3mD61Xw2x*KIF55kHW10A*$1s#8- z3<wNF@3j0RsobpNl}m9pAsi3cPslRFjP5I%Hh`!&&mdS~&dcqwb{sAKE{GI&A?UVx z;TyBUF--Zb7F4Puq9j_;za)*EE9eXW+D8!~b+VspZgx8^-${v44sOH!vo~b)n>6mR zL&PPukh8<+5k9QPprg0{n+PVD<s+7Ut#&3TwX&n!66PeRB|51;nW6JA%Gt`f^SFsU z;qo2pzt)GujBWvg-*;E>w=Kr<|GrxOk9Swe<bO5Fl(m$QG~mBwO~;4_(cvL=Q+4dZ zJ0O6EmQ}QqL6^+?pe0kfVaE|dp_n)`<g5Jp_3A&sz4!ZTHbQi2?w|KGRp0XY#u~jC z|DYMEObwnbo;dsI<z3s|UoS4607!4mB?t<Lfy<IwyflR_aw;P;XWNKj7jeq&W8e5L zGlV`|>h76jr|mLJo2Mg(e@MC3*oosSIrfM&9n@xPv--$MIt{o?xXdQS`YCCmoawY$ zN-eJRC<Gi`0*~q?_Ue>=I<*>o7y-Sd0ya7Uod;_r0O62qCNMpvfSzqPqE<RDs5nll zy3E{LKMx9}L?MeybM(IG|8~zr=N*dK6k04<B-jRN9AA6{^3{l~^*mE=Jb`#JtS#0x zTc$eg)TRyHXBbRY?`Sp&BArVS6kD=I9ySIVsXvO=JplI|=k;_Tn<f4caxK@N(I6{O zAd{(9MCEEbsJ)f2d=OxeB+)3Ec2LsL-Tq^ihUDLKowTuSAsOuFH~b5C$4DJ-#iPKV z=W?N|q1)^s-Lo5xeH4bZ7G$gI2*%l<H7F7w7$t2THQyXvQyVG;<dx~X(r1DU`-?UQ zCP8MA#!BxO0ABr-{y7-K7$+dn|5f5(9+PRk3(36EFyUjLZQfuD_+AkNb+z%rfHYBf zS0kyY_=qxYi;~qil6=pyXwh&F95|`A%n4oXc*q<(`s!36xpLcX$(d+Z>cA*xUV7-2 zRuV8faR~p8<?OS(I#2*l^}{rz2D)E7ib+5tsybnXpFI8vxJUC~c$~v5Lnr?+q`UIM zR9Fkc148B*BJSBAg}*>Xp7FnfInUYJm1muMHU{5V1ei7-3NZ)b+t&}j3ole@4EdxQ z`Vr1*O!bR+WiHBjh0E;YL}UWCo8#fPP1N~<Ge0*fpU@Ou4q`3z{3GKLP<)R_ag5@b zvI^)@3y8;4%pb!keMEshi13IY`2SJ%jnSC^+m^9yt7D^Mb!;0Q^Na1IW4mM9wr$(C zZB6dOnz?u8t$A;)`d2?|*Wo^AGYsJ8v3N`SC@)7=E1VQFR)&UaiM^3Kh0SKS6Q6#C zzFs757W^1>6sLLyh1wAVArxmk<%(#)_wwi}un8@;xxWzZ*h=iOa0uh7qaiHLjh12j zrHPddHJD6V#%M_21w5k-8H|Ih;Ed<*i{NT%5W<W@9j?!zE@u1Z92wvq23VJ)uuJcm zaYb>vZ9zylXOQRr7bOHVufap|@0?fin>)h!-~Y4!i0vf41t#?!ZS4O&#K}<J_)dn= zzBcyb5~|tg0*mWs4M0h8C6NS>si~nbaDSyG!d!6Fkv5IYPFQbPV!fV<;hQ?nQ<#?T zE%_JEL1vgAM@-h+4BSLt%hhCh)Cn=8nRfG}drYm|-Eem~Sbx4AJ$V2zH=~H)#aA5n zk14j343sHI>uYZ6#2b)H8mNXXY0U)IDUOdI+KAi9mTJJ?DST@Ic3}LZ6`i3^plUDK zp@TnS-T$er2laMX8Wavk#}ak5p*MYmC+0fWs8JFEBXnrL_z;%jr$wMK_MC~7V!kw@ z#w*A1>86hn;Idf$_i*A28l7Jtl(vY74Qm;1L*#ouq(Ho|f7KC~NR#Q(xD$(Enk-XY zb1V5RpWCtTP@K6McnMgt{fo*JGI&skZY^~vanL>=jnd%aI{Xj=^wy}-JN8)3yF}1^ zCu)8o)^oiU5o1mHK}aCLO~n;+Tt#abW4+y+AtjUSp?jE2+>f4R{H2%0YsnC6gF$UV zAB<m>ndYvN!o*U6TvrlLwonyo6|ZIoQZy*a2*AL`3Zp~BkF&<rhb)I&QvADJv&lgW zA6ZVh)cHfvc`2||Fhk72dSNVFLyFD$ou3GCbd*amd3q+;8=qn(FAtL!C(%*6ca1Bv zcaE#oPH>1a$SFc!c!*i{L_KyFn+ioSA}4q!|1|$p%h{x7LglU?dm<&Wz4`LntM7qF zFs7S1@|dpWnyqqf-HXJpanQ5yJn@H^a<r$(raFVF^;OmBr`wepn-|W)fkL|Bz<Iqn zP#}ryl!>G{@xF}MhrvyeD?$29pFL1ubdnPq>fX+LtQZzd3;FQa1zdw=1_U8+s=xZ| z**Bi%&y>ZBmQD)WK2m$Mts_p~1-_db$@LKN%A|%f9)Q0_w&{ts2F3IMprm>t?=dt1 zAy|X>!k0IK@T)faIK4n4^uooxto64%2zIbyEs=)p5qy{1KfR)t<_wU8N-ceW{LK1n z<$3ZPvj>)Y4VzpP#qwjj%4Uz9f{EZO&_y4itUsL8Y@MdIXEH{8;<EbHau<6M8Hu8~ zLrmrnr_JXR8gU#YhWFl`^*BjGbJp10kEgA3zV}Sh#@FT^W0OZu1pCkw1*Zk|s8VL$ z2H;M>qf%c#W#2p@?-3%|5ay<B^;3N!yT1%!?Plr4`GkePvuN*R?NNUj1W#c_-nrpa zoR^|G4jhzu2B3gcr^PWm<r`U2Jd+p1{f$tn?u>NijIWx0gftj)v3uq#5vvV@YQg5t zU{#2>Rz5GJ1MLzCzhT{d$JLCmDe1YgP4$Up`V^Y;i+~i5nj!Bh)-*IqgJSFu;zP0V zE4{XYF3jl0>yQJ8r<zG>9XIDUHq@lrog%)A<+{dGeuf@@q?CTm&ijxQ<Md*a>Gs+^ z$O_gkDg}rXJ+X;6-u`RB4FdBbE$lnBLj4XJ{s-xml(E}C+n$8DHOU_WNI_pw@%^NA zt(j94F(Rn8Mh~(x;eRMa16Ay|QvRCsF8|0Nm`OqjMDKwm><&gL8)}hP2=P)_Q2AI| zQjy{B;^70nX4DnN$OGrVsx#q<9^okjvoAz<#83lI1jO>)rOv##ud$>Kmx+!>H;@~D z##+X0CS)x7wl5=5;_1@Nk)S?ncVQQITS6<hLeMUOrvv6meLpp`j~V%FV)$YsV_5tf zhLiMvpLP$L&(_Gm{CzxepNdH&p9Q(hRLn2SId=>}Txx6gzQGSL#hx}Ys5oVgI61zL zsf_5pp0%%_V<^CsbUMUmUERk`#E8yQf2&7bPAu%|sah7q1V{V5ALGL0zru3}_W9Y) z>)SvdUheb6OxS0j*=zLHsVn_h)MioL%}+7570Tqy@z_yK)903%yoVyThG)8*G@1Yz zVt+u8(k8rLJ5d8Q3GaR5eJ>Nl2S=K$2;+ps|F@UtQQOz@h2PzpU*8%v;*DIK2^)^W z8LVpsk-S4DoBzZUWX@LSUy?b*lUu*|@7_MpcQVKF-*+zG@B4p-ga58u+~&Auj2`aC zE-&1#696vUo=pzH%BCtKEOBquDy>(uv2gM?B=i$s*K=B!c&1;B@Lge$WzDGsJiY<Z z^e{d1iaW_>HLI)B8*<xVCMYs2(p!6Y&T7=pqHjLdd>p`1G$CSjNT*#}-5sNH=51jR zl%o!NklKdBcEqkt7HFH)+if951@fSNtwMZtv-k@7X&+16)s9~5l;atFz4Xzo#*R&0 z0xd}ccc|D*jRgVlCL(A|b0W^VcK0XoZ<yYTM5p(<7!puomuR>QuQ1NRN(Uf8wajl< zBxX0K)!qt2%AxLil98(A7-7*T0&qR!+pG@Q*8zA%cy$L|Ijf>I%4B~qA;R8(RdA`D zZ*h6l9S9fL1Bx)Drm)qE+qUk|8|Xw>)=5kGs)(B-DAj1SO@R95<}IYS_buzU$Iq~> zOt42!eBmDLmlHFa&(0d6-+wr0BA)001=nM{Y;XSwq=9odaVjPUxp#3xkloJrFT-+T z46;C&)JxYt?b;^`bbe@8v7s8_MIQ(^$LwKDp-*W2x??Qn=y~+O^$_}*_L%_qfPA<; z=7IXCiJ7q=>-x1RbIa_wdVp^<n!v!w7n?*37gK<T#bBF!*_T0!*E16`5XFfdwc|S8 z03`Hd+tdH0{2hA`;g#>Pn)L@;Q9NcHQ-%0A6Q&&qXXKXXqY&b!3MOCDwiqMMo=yMV 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 p+bUDM8ZZ8pK#iu^#~1rf&b@t|9Xeg#YG;0 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≶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¥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 J!GCHn{2$0`+t>gA literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/ActionScript/project/lib/FlexUnitOptional.swc b/antlr-3.1.3/runtime/ActionScript/project/lib/FlexUnitOptional.swc new file mode 100644 index 0000000000000000000000000000000000000000..1365507c6b88cade30806d772d88ba54f8463124 GIT binary patch literal 5063 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 N>wbT;0^pzS{{TPHepUbg literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/ActionScript/project/lib/flexunit.swc b/antlr-3.1.3/runtime/ActionScript/project/lib/flexunit.swc new file mode 100755 index 0000000000000000000000000000000000000000..70bd0cd845e456eb1da3a2801508b8969717c485 GIT binary patch literal 467648 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%0DL$f_b+5kQW8^m3>|mnO7eM z>swXZ?`8LTg@giDz<u7?Y_Hc65`WOkSC9{R`3iEMcaWezG@OUMgCy^v6dv{Rb+{k* z386rs6W;-dp7dIJf}Zj6-3Y+&ytfY<?G8xdMX#kY=w&b8gQ(Z|F2rkIocLhy-+FOQ zf{E<+TI+Hce|x;W#@+}vtv&<hvzA^c;E)a^^O>lFH)Z(VAijB!J})@neA^15^U3xD zv8}p8a^#TgmF^cO%x`!N0U>_V=z!Od_v!7!4O+f&v4p+lHAVZeKl-Eb71Im!Uz{)b zbkG&AE@$n~T#7i}@y6Wz414N#ks&T3xL=Lp6Yp_;_=}8<?nhO659;}_O3><8Wwg3A z1+DvJ^?fgU-wXY2tm~co7n$&=>;qugp5SLP`w)P>;O8>?2!Y<6!7pU?F@UgG{!(V2 zcmwAFr{m7^zmSZz1n+^K3uOG;D|8b4+snQdtgrx=4&EN#aen88vYdDTN|T@M9Fp;H zhZo}yF`pMKA9mOqo2T`AW8&l&<w26`2p)D^in~Hr=UI{r$%Z7u)p;n%a7`XcGHlOd z*W?-EEZg(AXhMx4z<6CAyDkq8(E4KMXDYis52nrH{EV*xZp_28GnF54-IUkke}cE@ zJVQ?55oou!B1IPy4eH`9lq9$(kM9tpKr!F<yHA$x0a7l}$o+X(J@P|fZP1i`dF=kY zz`texzk!#}J;3(n^#;C@BVR$n*eoB&o6R1{6D{Lj8Rpq}fv@EV{Cy*@Kgb@>3w$d_ zzQz3z&+A08vuE?_zLkZWm?`XN{8nbq<psV&6WEhIZ$x1)<ORN$Bk=cw?Eem@<}X6N ze#CNqDbG_a1F}~JBHM|`UggMM<;Y$$k^R<0cGy7nx{2&}d7dwkvfemke9pp=^>Ji< z9N8NtvNug+{RXlFCbENho;wlQI|GsNY`)8py~~mP$wc;N6Ir(+kp0C(_SZbm*@*0) zh>X3@3psL;f|x$wm_Fc`J~T0XWMW!tVEV+w^shXR2QhulF?}I0bs?fJIifE)qJNu+ zzA_Q5GZ1}kBKjuJ^BZ7G&x^RHn+Kh(0uA!%yuf-T0)Lk%AuSvFw>-(S9`{^L_YI~y z@wA|zf$82a8}2fm7PGfa_ii)1f|vc+-%a;RO?TCk2ky*tzsz*k@S;QkcCmRn3LEF? zHf_|B{(gP)kNtoAu|NNCfAnzw^N0H#{r%v|e#{eHei}@l`%S*xr~uz~=La?^kxdHn z?X9>Se@TAbCPlc3<<HK>O$ytPkEOREA4~62BMQ4L-zdG!M(J(LH%f0)zUMAPwq+o) z9f<5Ij_fLqY^#avY7^Pz2C{7?vTO1^Kf$Uv9o35D8&z>}zELDsSXF^Vb%p7ErBxNN zqLO)0$xu}L`upXP{r!>t{(U&o=R=RNp6JkHY{v=I?fGUOCI)lfXWX98?#>s@{}Y@X zW|I5z50Nd3ycew7HRa)a?BvzQ^VuGg^80|=FL12Fsg0Kip{#xs%GzsSLJ5=yI2`!^ z{B=B#&4-XM?|CGj@7&>zE+E0ZyFO#T_3?bOuhG~O`LXurRYK~n-d(%_KE;a|OtXt( zPv?g;gX^D(k%eQ~v-z<OV?Doq^IU$cJ6bQQ;sq?9O9&oOZNhEySMu?K1}~LYAlG+l z<oEgPwR}q!^0)ay7E;W%U(Xl1F@K+5u<`)gpC6}c>k3G(Hy=NZTTp%ZbpSSY@LN!C zaG$vQR&Ro@ao?(gy_IiH;<?1YAM=g-R_tva4c7-Ki}+4{-DLcRCF{F92>TQF$7@l4 z&d&#m-b1Wgl*kqZu>K=IPT>$X?ho_v(;)Ao{5k*|FXZHX%zff6X?+5|#wD!_*`fS| zO;6*77DPb8#^U)#eqA|!!_w$;9u_~4sxLTIUm-F<)rIWa{9e9S@?Cyx;QbyeWdlL^ zjX5YUSAb(Z)JS&$TU!vg702&e<*RZ0zEzCh>k156HOY<jesKY6i7UKEGv#pC7XZRb zi4L{A3eTkraOa$(++4t}Ea(w4lzpj7k^47j<f;O8Re{la9AH}uu&Ik0z(&5U067p$ zv$J8>6!fy~Mg(?k0if&g!(1owr7^Z#kLh0)OMi!z{*D5+dvN-<7qHt4jFxbK-BExI zL6kDKfV+75cNJJI;BH9&9wP$VGdTVGF#U~$$WGTNJa{(?^q~UwNP*F!AH^`6h)jrM zA=m$Uqa1ip37i`_*B5w5i9DqEVA&D5f%s6Xr!TNiiR=TXd69WOSU*L6EBjF9j~i!7 zV~l@|X@Cb+(mj{H31+-RlBAZ^Q|rxlgrieuw5^sr(iCu))}*woo?>}T121}d&Eh4s z3l~gm?CflxHg)Q%RjZ~18`?r)2-h;T*yk&s8fgx%o(edd@bTc*U^6YA;=}*al$q1c zX$Y@8XZHM==R_OMI|o`tOL$dV$9d5cT2`N9rE>zLGbI>xH3!$Ub#;n|j_u$!kAII& zplM21XH#=i=bD+#!Duub)jNY7E5e-_gXqR=*&ED9f5#5?kNHi7`1+F04t%zHWw5y` zoYd3`c2h&JGmP)|W>}xbQ_S<4qMi8iFn^($zox5k(-i@t8jUA+J+TCgXLpCCAsX&f zSGF}Z(3Ws8+SL&j710r%7JKkHcX0Ifj<!ySA8wdt#Bz7FM(cyk;f6Ds8af-3%&$58 z73Y+$_5pdAJRHhFq4fn_EunA+H7Ik{E~~}I-rHL7sp<CB&9;@{j?N}X(B9eB8Ejq@ z?x+_K79wdSO{Cq?6g}Mt<ZSI~G2hwN_*=wk6dy}&hiHztcgGt!?b&8=)Z+8V2`^%6 zt1z!_j0c2>tft3;$I<9Ag7C7@nxYGW3&ssm0Qd%VbZOfn5!eN8v8SWm3Bet67A~$m zd*Onm)$_&=#?!KTx!E43S-GY&+S;1K!PXJWm#=7B-r2UiAslIHZ9?SB8^g`*YNV+- zeB@?xPC~OeM>HFyy)CMgm6azCAYCgeEh;NgD}AMvT2WbXMVVS!2Hz#+MLuV3YqTBm zgwI{u>Y<ufv~{eZv%`QDY9<U-6Bh4<r<rwH*x1(5bO9#a>;jsDUCo`RV_UJ!XliXh zG-_#SNtISqTv=YEVAG57tuCr*;IroLgi3UameU~IQfjf}f>7ow!@~avkD%*I+B=#$ z!wzH$0XpL<+*S)^g^zDjEU5O@6|`n`eREesSZ##@O^USDcSRR=b=E{8fKxpWGNOk$ z?B-szt-?nHjJ*b~Me(_FJ9k_Hk%ae*=5TAn{I-U$%|xs5Zh#u7#B=SA_FzK;^fOD_ z+SSfA?O{EF&zW})e#PBw1f0><+1b|OG;3jYu-$D{1b&%5;t}@{4_?^P)X>lzF6?Y; zPqsoI;hA@}#8+J6HlF|1GSjn0X6D#@wvx=sERwlQCXPw?gtjc+&vsDNMb#v#dZ?O0 z)l{mbQFR2>v#6SdPiU*~H<r?IRGvW9iBz3JZBwbOh}w&(y_BkD)KNjzDyp79)oSX@ zqRuhYv53;s?28Ch7gKEsbuFc?)2ZtW>N=CsvnV~=E=d}UOfWmq-4b!?ncc~fGh33K z9?x;zqec^tr@Z@kY4kJ+!;L&qKIxQ`r*m@#H)nEl7B_3S>7T94nLDrc)ZF<*%HS>w zxVi8rL^>xR*Zp*P5X}%b>l@Gvb2Gxt6^&>%HJ+>1HMg{#H@3B1K<CGxju;d*pt)_G zNnHlCGHF#iPj5BJ8E1D&gpR33wc*DFC6&mj)e<F&Hd9iFDo>XbiD=pkNmg`f8yl1~ zVwVW<6I~@lA~upUOOlcu_!4@u2OpThC(`W_%7G;%JTQQ-1IWbX&ihPfQJ7cgY#phS z1Ik=QYLr<QDp+5I7fbgCRkj*m03Z-J1%lm3P-`bazlb(Rk`zUDxlaO*-2@XzmUa_% zJNNDhYV1xDpni(?-idgXfZam^_JE@>W3Gev?Jx)2gQTd4{Ww7K6=MH}?5}Y_(C;`J zzZ<8X7)nzVmwO6?>XR|4QBt3Lh>RwEGCLrn6lN04{NIv!(!Ks<yl^K&ES%lBACe*3 z*D@|55+rZN<GEr=y={EGeSE#+5IJ7@8gS;4Z^87+KY*F1{0L^gijON4Xx;djfxbmy zF!M|Gr%Etu{z2xuq(90+&Zb|+`v@p!)2#?On~V8o(<HhU;uhL2#y0}&>lL<E38Vzl zL%Khm_)`cH!7f&M@gzB9i)3`6!fyaFySnP_Y<<jQgz1q59uBra35*Om{3BuIfV-ua zDSaUaZm4clP-=#YXuyi!l9lO%wdWSa+ki?lu7WT^^Yx7Y_3eVMoxA(EK8;(H5asIV zp;|^j$=!zUN8F*{+Y_iECo*c!_Bp5-o)G7$oOvPvejM$?ty>=|?en1kun$%1_;4H0 zhw86=xMl9c{akKX^U*PlIe<e<NJGAa328@Lb9Cy0;K~`n4n8B5`{5rfZw|<*#sG^U zril>$!Nk<l9;`nvxFWnb9Bu1@u`-%uLNmHrq33i#Y8|GZ%}h6?y1l&_`dS<pXSKD! z0A$SfqHCg^;TCs&S4Rg9aokHvfjLYf)^rnPO-IKW9c?fQzz8sMpkr)ob2qmI8)6hr zJ?c~%NjyOm4bG**af#T07BRt12@gzW{NR#>Nnq1Tm=sJ)pny+LlUjo-Yaz3K7@T3s z;Nr7z<HMX7>NC1v6l!(GA<i=9r!6=`3r1&z!>u!e%`h`fgE?k!QAgX#riO5bF;8|Z zZ{p*27^Z{>IhQvFL*Zubpm8v1c{JS2XQ{QV4dK;pm`JrXFKue)L8$RzP5zH<4mWa$ zf)JKi70_@i&T|@YCL2F_b&3_pl1|{MxQVMZ0Xl97#0D;$_M1~e*OGb&(Y&Y)cx;Wb z(C?o-L_BLaj}INUg86Smg0v?M5!#$l3{2pd!vbDo&gWhpU%k0QAc*(JMC_+Gg;(*S z)T%o=f@`!|TzMq%n9a?i2BR9Zm9`Ft$nY{)4%)yUmxWQeslgHL3Pn4cI=ec<wg#Ac zA<GS3)ec@>rI{{q6UbE4&6;1PCrnhQ2}f_D<Ir=}v5A2OO>svJgJg94!gAVxnRJZG z+E`i{F{fEjz>8sO8tw>p91pH7!B*(_pb%>PI5C|sK4TFl#MRN1W+-}NnLUly1Gan< z*_c=oi-W7owh+S;M-zHs<Ovo{;Rtj?*m$Fz!Pd?u-lN79`!I_=D`U0hq8xZ2Cm~~E z*TBqKa}!`38;b_a2Ft+CHKMOs(AL=$X$p6Yurd>F4@1{y#KWxzKHUejOPX5Ro5Oq> zFFZ5jJuT;P3B)WFolyccL#|FS4@QpKFyiSZjAe%lvoQ%gP&<GL#th)D8BLun!S-1l z!ByDNxZ+Zrl?n}XDetpljZJUn3y}20b|xwv2M?_H>dxVoY<x*&uSafK0FazhKnmnw zP73t-Z7ajo&CMo@B=dGXGnPuawYy@}O;b3UZ29wi+JP{U@sybh=gq5`xfBNe<um70 zFPL33!lGDI>YN~swjCZ=LGj3D0eXz(6)+61u4w#PF>T4xv*y(-U$&rjLG9Ao>Up(i z*UUQl7SF(>kJ`mS(dP^iCN|(<ALxpY;fZ+}qvP<=0spum0$2kmCXix%8c2^42e5jF z2$3)dBVq+6TJ8i_JGNj^aHm(#TUN7t=EC{&YnL7!8zebYVa5;im||MIgOQn|#sl0* z^&QyEO{Po{pAgt|nKb0I$lM!Cj16qi($dsvvF`|Ik@e>-f}RrB`quP-hML>z&kJ|Z zl}*tmXqJ<QPh<dAJMV1p+YWP?u8t@S9iv*Y2U{b$AD;c%R+FqLLtq~!_{3w#@d7dX zOC4etjt>-C6INdFu$UTg`!>A9sBHt|@QK45IoxT4jH(d3W$Liu#nz<}VIK0aEs9kD zxt?<D5pnk@Z4hI4eeQ&^a9Hic9&3jr>=ugxqu);h4wx0&>6@_zyU6T>abih)a92FL z+F|j4QNs<?n0)he`0iWbFq8K|l-pX3-afT`5ND<>A3P{b9tQc~&`E$j4xtTZ$mkbM zY7dH4k(i2Qb82c<^FF!WU_#MP+h@+Hoi}TF^{iRRd_TClp~2|N)5Iu}(3`tN=*2bj z7oJ{|$|Ef1p^P}X7#-a8@nb>??_A;&O%-Tr7tE?TGd7?gvbc~&WU))_;`MEyNQ?h4 zf;q8v45!pM*zis=rv8R&M&hRtC}YS*GW0>jlwqoAh*~Wkj%9}Kw!}{6un~tIf|28R zeH*7V?v8LX1aA;shAue6ZLXQbS}q#@HE~#C6L`eF(#)Y-aErMPgXKx{Je<<G6S|Sf zM?;;!P43vj+FM*vInLN}u(lhjmz0Pthfr5jGt4l?4~sp%h}w*-Vp-K5x%Z4CY%piq zu}kF6se`+|;rL?+_Dvbo2M$+KgZbMxOz0tbJqgo+iE;gTyg_0)aKPM85sc`lU0O4L z`OJB>Gfy3SI*=9ZY-_J=X$dzp8Pmw%3cjeAF#MQ?i5gTm=C^f4MGrIV+04|Vp3Pud z=fv0r4`<ZUl8P#|w4%y~$24kbX?dwyT3qGRib{)%ONTs*QE}ZCJ6q9;O3JFr!K^4M z(u%8!i%PZPB42T_R$N|E>2t;BLn|rrm6c}>z2tX>TUR!9w6$VKthU0uSFNbP!yzE3 zL@O%y`F!a^t?1Rt(#k5WsH~{0L@S15E7Xe0sv=vhvG1b-5hZF_RZ)djTv=J}(~2v6 zRV8XwaRo#wFGVtoimL#wC@!l~E6YnDt+KKT%t?i>2%IY_A!bQ=F}PP&a4aRhVxX$5 zxLmC&DJvf8V9L?i0mEM;*c=TfoJXnXu9jC-0^%wt9<{s_3%Z08P{q?OFM(7`e7=fO zNZVIjBu_4K@*SR;e8R;W6X!=Dv$U*8Eh{et3{c+XP~Me*t;APa3UPgv6-c+Qq(T?f zjptqikGYQd;L1Fk%1*2SK+ESXIAh>PRO0w)^uP*^52r`DQ|7?BjB;MKwHr&|ltC%Q zVl0ALh;YTT+nDn_Al-5v*%DlR`jAPC0-rg9I8gXyH6FnuZHO$z1x_R>&Lfd1x4{fz z50W3UWyKbcQxdxxwWOj1DiV*rXr?36l{qqVRAxbDb>^%Qqq0ag$)1y4n>{!C)a-fL z^RpLZFU($)eS+;Y+hW@i+fv&y+v&D5Y-ifevYl=FiR~O)z*c8lZu_Y%XbaiuZ4I^+ zndfG9X8s~;j_p38{fXHAOw?SWC7#uc%pNs*%yDCL#vPyQ&C4$sKVjmeG$Ly>Ayjb* zq1y=_!V!%sI#umdb5hMsiHDLTJb@$0RLi6?KZm2)l#Hfi3?;`=l0(Vyl;lz^kJ|F7 zHlAves5XVlQ>o^odJ)x1s9s97GOATj?F33rq_&f(b_%smr`inam`Sx7s`;rldlaE0 zOba8lu#rw~qFRJ%%~Wfr_VcOML8nBi)<wxmI$;&nR#SZql`o*$&*;>jQ|%%`wM*f5 z8KF})g1w1Q-xk1j71&pUy$y194Y)%NwHpZ4ZwC7o_>H65ZG^h+1n@5S-3`Bc;J1g+ zqI<!<AAWn`=cUfc)LBTKy9jlTqs|AwdJukNDR~&MKLSCXfRvvE`ziQ-8tiA__bkBA zf&Dz#FM$7x0KWwAufT>pK<wYZ*Q@aREfDcKxc&})eein&es99>0Q?TZ?``<~7le6- z*e@e8)&2_K@4@#!;P*bUPm<}BkHF~@`27ohw-P$}Q?P+t?GT|;KZ9WFA=(D`T`p67 zt4v)`EG{S_`jkv<Ps{eFWQ9(BMy8XWh2L`!=6QL%B)KHXnITEi1c^Au6n9UQa>@b9 zsYIv>p=kh(I|-n1zeKlgf{yD5!WVP+5`<6Lfbc1sx%=hZ{Yr$LTL~m^Es<nr&X^lX z_jTlYBG1h^^(JyDak<8gg*ZD%_pL;7?!+*s<m|?;aR8lqJ3?b6=R-t>#2+Qy`v};- zM_Y3K0h2hXhji};$KYFr{jRW2`iroe{$_mt)384<><@)~DPag;AuRr!$X}3ulP}3v zBnEzMf!|o*w?rqBE%y1H<%7?(8}GCeX|3hnEyuu%EO4y_uCu_4E$|W<&|NBDX1Q#% zz)cpo*#fVyz$-0qiv?a~fmd7LHVeGQ0=HY>wHA1t1zvA~H(20}7I>2d-fV%lSm3P| zxWfW>%2<HwtpeO-`R#^6QGO)1%XiAR$#=+iSw44L;5`<&#{%!Q!25U#S6C_BZ~5)D zzy}~P`A33DJ;-A`#LazHh=(ok5et0O0w1%$$9d!nW8Y6$UQfy|$ntqF$uG*kGN6}Z z(68nFL_oihUoqS+k3p}-px0v1Z)4EwG3a+OXq*X*HG$v9{5Hg(Kg6K@F{md7^#b&B z`Mf@PpZtcEi#KI*CD}skE=it}I$g>cM~J>?hU8GF&Aw=+<Rp&ss-@$J^Ox1qNaFHW zOJj)pGEyz&lcbF#B&l+;XW>lAO;XY!vX_w5P2j4_$!TfRrBjGP(l4x*vPi~8QZH#F z(=}b%486dJy6Mt5iDWfaOXJAM`f6z`$v%F%lqZo<OJ_<cWb~|RDVvPBoCKvba@;0} zOUc;jGo@sb(^@U%l5w>`DV-d@yjmJfau-xf8N?f@mU2km!WoiFq4@=#>Cza7gN)Cr zmlS!z#Ph4AOfo51I2NV=rDF-1d_lD|f=pRDL-If;>ual)yrk#~NHUcaPoE(rsU@Xl z<=NAvT!~biJX5lh%8F{~I8xPKE#;AEC(n><3O(V(!fI(0IZ4uN)0G^FNc1#?5ERqM zQ3;V9(^YU(<ms{^$*M*QpsZ&}Qu@iKOs}3Xb5@Oi_MF<er_P(dVBw<E#!D)3xvLUn zHx3aE`dpOOh$w}&fErOFnqQZL@*$EWUk={M%2q?}0>wNOKrrdE6m|>BR_q{kHk6Pk zO!eDI(8hL=ItTww$8QJQje-`kLflCW5aoV|0#+ZXa|PTeU^>@L8eQxyQkPuNn9N?0 z>pTUG9`>|Smr^*kF@^n2sY@*!*O<ySsJ{>C)+fLfPc=xt1A4-k|od5F|ya3z!@ z8Z+2FOiNK!chc<yQu&aWGVq7UMCn7qJ|;bZtVmYcS`@!6gnS($lVwKOzsUX`EsGr@ z_{dZA0Aqw->Ork|>~kWX@WFfOUy?vlU{s%f6!9k!u9!TXzd%X?qcITo7)>HsD}z}c z6odFSA$%|k5F3|#ZpRx9hM<Z&DFuk#Btv0dF7qp0W9LY~#j^0Yn#-n4l&+T9bzJ<! zjBy9XxXX$`%^3F^G47YyK8#_*7+&!B1Y>+Eiwrp=34!i$D6)??;kw5G61%Rrlm4bc z;4fvafDjRVDYLKSp0&p9GWNCHgD;Kj+rBpD^bI)WMsm?9b`kDdaPvmI;AY-SW8Z;O zUL<ed_LZqwcu7kR<fBAKz!7nvP=|klJU5>xY@H$!z<482@_b@s;#%`I9oHfknY32u z482$}zPrc0$u6<t8A{@iCUMK|QYBE><1Zu=*k#IWwn-6$#BNgO_4xA$-Vom#lg8hy z2v@J<pTadRaJ(g4w}T?GW=7{<8zMd<I#(xgh0^1dB9lZ!ytQ_SoJY1OY>R?f73$co zQt<ie!j>KAw4<<f$9jCrzOapL<sLiMuRp-9RzxAOZA!ovvGtmTbRA?UhiB+|B~a`y zMkTFAuK1;ho0PiaMFtv=_e?^Stp?F}8JXRJz9oY0xg{6`AJW+Yt~rgzvt3G^Cm-73 zZY5CaFU8y23UY`L`oD|AXq83EBIWFE1>XwhI-@JK3G99)P!*{POp8p5oWNfg+zaLX zpb|JSa8lugb5A1v6M^K16yQq-@?|ox+HX)A=v5_<5=j9TbSl8d)!_UGMey+-6xIVB zLJ#x@ZyI#qMS=rL-O2dXcrtrSpkGT&{C`CJE))N!h@UC=-W=d}oA|#n@PDPSZ=j#) zfo|r9IQ&0a`1=L^^)dY2D&S8t@o!fF|8*+LX#xIZ#6J`JM^)gzMP)mn`|5$-YnK{p zd~7#|dxF#1?JA(J4pc{~BQxe!ixlp_6g*}MPhkqrsDboII;4<d=HMkGg_l(JGW3f* z&@H~IS~+-4jpg8VmFM7!SPp)N_)}%TKNS$Yh4|lA_t(sX%6>-;cp@IoM1N8Pv;4F0 zezz)m=D%XJG>jI4X#d1$A3(Gke0)|#6;IoFyie4C-|xrUY-(L{KJ@I&!uh#@>I)P1 zS1M`~5QXwJhYNyp*f*F`x&qx%E~M1Yb9x<-`qe|QP9Xg%TdUy<ceU~awoZef83cl6 zLC_mC3_4D_0aia_$qgF2MazLg%f#+675w*be^^)S(b)YMa|D*M6MP;6ANC|VWhpR- zoB&R*YIyT9=^&5rDqtK((A-7j*EROKhW&ew=-(j_`@PoJ8=S}ffG9>Hic<i^pW{*d znG^MAf#N-ly*CiW-?hHNvAzEJkgb0pnrux;N?V5=@<)K@jEQdo?ROCABP|RaQw!my z940y4<60E7l3G--*0*TFO-Jk07Ro-+kQ2o9?0;#q*&zskE|JO67Qz@u7j2O}8~EKr z!!t~pW$646H~SLYnibx^@|Tmo!Z1mJ1%VuN_vaA*0+ELn)l)zu_8s{182HZBBp`_W zs09{97OhOZ5moe<^s#li5f1#Y8waQLy2m3)`+YsWv!#g#Ci*6|kTEuyZHAESaxj{8 zK?W*Ky+RM18dw}z%&ycqB|1{Fg!oS--KV0$c(w%saCda!MX^;El!GhgiTW4FCgC_L zZIAQLvHaLgdSGc}sd#*52U4MOvcU~{`DKx1_i}Z^JN2CPJl$Qo<-I<5I=juv6p72! zJscBGOK^UG^vKUg!(<XxYBT;wM$6%TcCS8L{v-K>d_nS0yFz(Ec}2-Tjh-RNr$}c? z<P_;FNf{@dEonK@Pb4)-I!DsSNdbwTDvgqX>t_S^JgD<WjfnK1&K}cwOU0oImDuzM z<wQ^Db#*<Bb?ix9bo%_M#b@=v@*e+keB@mRZXB)J+)1};fbV4;xjNTW&w%o;Io+dC zIaw0Ewg?HmtREte5%LOHj}!SYSd*1*imgDsnzGk)F*<YQS+DDX+#Y`}0eoB&?(cQu z^^0B|pHIc%9ehxu!T}u<WpC@EA4R2A?{JvCs|SLSU?jx;qzCFF_5KEY5>0shRd|Kj zdwL)eiEyvKbFaWjk&_}T0*#SI?)Xm;{(U{r6lsc_8#pg=9(Vs(H%8b`bYmL&sa}`e z+nCK5k0F}XXZmdRg~0HINz9jmm}WromGJt?B<5>D40?S#kQj9QUWEVNAcp;*b9&J0 zF!zGF>Os~`g*J)%xKQxRL|aR-Z_(FLww8){X-E|lQ>-4gjv{Y|^vFE;wV3Q(PuY4J z(hGl00<Do&p2j8k{R#=RMcVlH2K;`F1ll9*{CgvOM@|=dXExIi{{l9@9Dp3Kw}2CJ zwW&q{ym4L(^jbQc=fN!aYRa=R9R-}X(U9it-xJf5!1IW6D*npfH9V&pyOxJa!vXF( zYCHotf!#m@9sUlS1X1AAF*rgM0-Nrj(53IDfx1YY;PTsPU^#wqp1y<D)#U)o--U6G z!=^F@;_Rc?RQAJSp0Y<N4524SPKF`$F$^?T)!a#6;p*aPiVa}&0qokb1@IV8L*e%V z&+|HvU*+7cyhhmzv?mhX&!<B#(%I}~`0R{yVFuIqBh29T3e*<3@_IVJUgg!)8=2Q@ zRnkHB8tsKxQ+xeWiGL-Dq7n-lSk=c>T*8nJzNZUqbbp|Iy}Ua1(_XBNKH3{!w{O5_ zT-Ck_pK&#NkoK81r*W;NyyD)%?C0Qkd<NwHT`HPC&-J^I&p#6K56a%N^7%K&(?2M* z>qu0zZ1ztYSlx?RTuJ<^q4YnXfi-~(A{Y4ApiX#1KMp50B{*X<tKd`0K1ZBb2V9x= z7f|JaafoyriTsRL{g)W^c#L{7ME%x``YmOLEpqySoQrIMRWR5_eh%%SC-MtkXlreO z3;Y-0)ABaJlB+`gW&xH<ZHA_7Ky<0?5cxYHn{DiJ8*ismF?mr12iTRiz=ge7bx~aV z>P~dY%xM*Ti*A9Ik5wuIp{=h9Pj>WDES#!qwvcCE&UlaphsTF9BS;;&AN}xbCpA zJBPq^w+&|&y<%oz)+b*TMWT^zf>nACqRz*8${Wbh`vmTs?u*Dl!T&boU-Af89~1d0 z8+*hSSc$2uC9z~4wOKRT$2i;zGukI?b!olOO+IZ4TttM<y2v^*_aZ_NIeW&|7f9l0 zlAy?7#`LTWCQcU<_8fSuC){T}A;C`eJUH<AERF^**bwgJGZKE${6!ngAy5J5OE#f$ zV*-2G*5luRmy3UmnJd6+CPBXEaDLz_BCZN-C6TSfhYK?wBo<i@@YN)8HCWq7WE)u5 zpt2<&E@6E5N}4aQg+#Ux!-~6QFsAWJEH`n_;MysJ?-_^_qS#df@cp%%5r1AB3-F&@ zfh|5Zx&2sLQ-aa#Xj4lUmy_T}RZBaXR;&nj@Dr=F5DynS>BFP$<N<D3k*1EQasHJM zFnuVG5zWCN1E&q)ZluKTPhuEn+_y)-;`$|ey5b#DJHqwB=K2{{_-I<ZlL!@c@yl|C z2;iXmvyRSSs76Q-9LqI?<XD*sV064_bI9~F<eLWxi@N#E*)vT!AO4jnw;)2CWjGEe z*AzQ{JethX*df`^;#6l%!;0|yaA!wTeN?NNzi8=M1w+ROwRJRvJB*MhCn>HlIJr1O zu(|1iaD#O{Vn_+x+@TQ<zOZcEJIEV4JPPH+kzt82x}ug0VuNr-7CU}uH1UB4Nm~wa zH)!A;jUle2#9h^J3W*%N%o+6!O~8?*GUb&m=AG?~xZGB^HY^fXINgS?xRdQhruTO> zH}fwQuVZTb9%hmmOtgh0Go1KTI@{WHal6yD!VqQjm@(!zi8hrI=OCgL94$A;a&O$# z6txcX<8E*#-b9VRqe@nhMpEw#udWYAqf6R@_2FZ?f};z*HN|6xxd-5BYi?K;PjgC~ zgF$u>C<?9!b8o$M9*PmkovZZDB`v|`W^w=99bS!Bx|+nDaJglbt;HxyTT5`YsG|A7 z&PD~C6RwZDq1R|y(P|`a+>BQMqYTAoA{BJlTg=+9qgVuo5^t*yzL;Nhw0av9gBo3D zazjUOm59MFcpRZi!BE`aynSSkU1ms|xnv3FuUX;x=Ae+a5!bHxZ7h3h*ud}P5^H#c zqaJuMR#irq%;_<@>$G}cgMlddXymYl85a*>NWhXQX(pS;#Yy8x7q_8AY{Sg94rCv# zvm+<e5tHxLI-7Gs%|lB{#>sdki1BM&tSmu{$_8zh_YRYf+8-Q~VDwSZB*-Qvs#aJL zY<E~qO-P{*d4(h!imb-qy@k;G$8|e${VD~xZ_<&-FvJVv`=*#W2OCU(me$U!o;PYp z{DOz&`o_XzLoUJ#N%14l6R$g=y(7Gm&j;{w!7+qy4X^Ix;YmpFputh8(Z)8x^5BcN zINLf#9`QbuJ=Q*kx&tEa{^Q*mt-UcA4Lb!Tix8HVEh;)Xkpmj35U_P{lVfqz#6WxX z(&bC57tgL)YL8_t8RZ@0#2oFhLZat|*UUsM1gD1AgxZ1~4K~5(T}|q&g=Z|#7T3<6 zvs9f|<6o*RSyVl<X3Ej{67bDxTh(gLc}%pNzQSXOysX`fnkeQw%vGX9!Ox>665nhS z1&q@}i8DanLFmHKxS{Af3eOIjq7@AvVTgI+u;Qe}$0kl1zdSJ2ePj-}!Dn;=&N!w{ zN~}GtxYXzKsa2I#<*xXu(TdATPz1BQxDsVG%Tai<qzYvli%~k%S5gILaYacfN;{T; z>8mIy2ba>K3azN3vb0<)uBa@pQmZOTiy?S<aaH0K2?$hGS?P?M9ce{H6}~D+v7)?4 zLrGRhthfRNHGRI)GPSC>s7S4>EH6(K*@lEms!IMJ&|L!LlvI?t6K2g^;<HGtDyyha zt9&J8Kw4Q55L@g+IaMf`DtoL}4EfK2vY-D$YD}z~#3*3uoF80mPHTxTrsBl0G#Enu zXm4GSJWJ%!yy}>6pDaNI%CX6sCPf=zwYv&P=R<w6`Dx7NoZ@?CTXS275p-s-oqrB1 zrJB+J^ey4xjcG!%<-()8>iH1AIM~qC6-^ek6H~+D6yHLviU9-7rZeQ#3?e8C1?$gS z(ScJ36cbIhK5JW`t;Buv;OW+Pb!TU=z7a*H;{sJTL(hMVa<)UtRR4cW`1S|_<Nq@< zxkC5NQ54=JDzbs`&D3HeRy{{oWaHqYGOrj*g!{;{zZE4_rRiMuSL1TO<Fd*!r)8dL zJ129E?U$LClPqGpp4jdonNO3<Uz5x?i9*tdZ8I^n;m9^BJE-iUauSt2l%!IUM&)!$ zGN{63an&rUWm9D|3gYTHRN;cSY93YcsWO2o6R9$ZDwC-)g(^jqmQtmX+N!8>0+mms z^c1R0r%E*?GpI6?Dzm6kLy4a%v#BzNDz#LZOO;cp{S2y{Mdh=p<0q5^D5;}LJyja0 z5~0cpsx(rii7Mw(rI{)%RB5A1J5|o7N(ZG;DzBu<YU;dzx-O(jH=#-~bzThCCGfip zew*O;GwO!?DpwGibS2nZ2vxU&eKpwE5SrXTlW%~}o8WgVe74c#9RS`Azq<(a+zs{~ z_}xpW`#vbOy@c8xfbR$4_b|9U0`{Ze{utPggZ%{9PZFB)6xh$e?^*ag2fybb?2BOk ziqO=T!Tt@Q6sdU?ey<bz8w9930KY%N?-ZI;N|QbSpO4_{bFhB^J4$WqWNN!uwy%S_ zbFY_a>Lu{o0KZFRs$K@ajquwfQ~PFlgitr+m86UUiDZu|>>e*=Ohu@q+b3n8BuUxx zBsu%U6Fa--FCf{oR&{sDi$^WFip$0R?B`PUHX=zU-i*dBB9Wi`<Tld1n}B@>+H&?! zW<7*J7s+mafs4jwx4$Ip1+NG@^>@PlsSue3a+dso$ookz=^=e21|GD)w=D2&3;Zt& ze8&RcwZK1F;GZq<FBbS$3w+N4|7L-Ix4?f`;6E+!eGB~10zbCEPb~0X7Wk<J9<o4Y zfuC967vxK#{F{7Dz9nCgZ^*UeJ3^$4nD_Tq$R926um$#8V7D9tFS5Y3^5rs-u8^+; zbBlZxm|NwmWqF&tUA{)X)&#G!!0RpW1`E8=0&lXwn=SAb3%u0=cUa&~3*2RayDjiG z3%uO|@36o-E$}W2yxRirk@pb;+#}y>y547j_gmmz3w*!=AGE-SEO4I%K5T)HSm2`; z_!xkX%j!1y3HeF+X?bz;Q}Q#W!`I|#`B{0&bKFHim#1a-lxO0@pEfZ3^YWAz;=?-= z!zUZz4PSerZ%U%?1~Mh?>qWWw8TmdU<JU{_uPl~%Stb{ewZxu8R*{_5K`Dh0+jMD` z!$IUVC|jy5LZMc5Lbc>3nl@b;<t9X*SuJ@8EuAi%C=uHQL5ULkifSpDIP$6`7jgb9 zDCxvi7nJP8or2=7NfaUi=47Wp?fH37a*&i?gd~-urdLbpB&~!aOK+-{l1PSK1j|$* znv;+b@^tB^E*HtVFeo|6NR*OQvPX^nWk{0A7#+eS6LOpaww;i%j_J}*U;xY+jXKE2 zb(5fEBgb=9WTUt$vP{VDEJ^akuCWwOo-)-}RE*-Y6_r)fPB`(Tq2yf`kC5;zc(AfE zg(M|EPCnDw-w4+@wO+21a~fr~S*}wG?Tre%TCP(IosBBHL9WvZ-HjUCDc9+R$&EU@ zORl4ZDUFofFW1=$8g1-hxz1kDXh#87hgWKJu;0sd&VoiK`v;d&eV^31@*7?3LsI7s zB%$!d+$7TIMu}5T;TV*A^Lyk8jN#|l*yrc)iAHK9HIl}@ASnICJ-#GDfm%{BDo}eD zr8@sC2QnfVkxW#eCd*05v%upME(bbZ`b0*dPkh$Wcvy-{!J-adJXB*qX+BW;nH(7D zA1O^h!B3Qi{kJT{Q$-?&F_CU1mWZY*Ny#1Hv6&0e`J~MXyF%IDQ!|=OU|W=)fF9A) zU0lSm&X(V3^GpYLE4b4L<?dH2b@u#5yJtMUjIH$Wr{+_1{@7^o9zoeP5ETMVJkV(G zwaHM*+ZC>U4N`7K#c>LMBg88mU^grKYsLWSw<-Z=#EC+Fhe)|}n{tR$klPiuQxTPM zn}Wi!(Kp%cs7dVre-$3Jkc|!G^rG0%SmGbYg&ljJj~?jl$@oiuKf4RlqzV-224t4| z6g>CNc=HfBS$a@mdm-WDA<Baa3bTMa+o#ld19|>DsV9=ZqbE|ZqtVMAR_ewFCio|S z+eC1iw4-r6dt3<=Vj=kpi4fL%LaCdK;+Tz-*^}r81r_sqN~xQIBBG5`*fU6vP0LD3 z-sc2*UIcmy4i<17-{VpGCZnEuB~$<0_<HB~dKY}VbGpaYCylR92G|3?l=1bcV5Pw? z9ex?(>oX6L`O=F}VhaeG3+3N{xkz~h%w+X7FjKVOf_bw3J21=XAHY1#wja#J_8u^o zIC{Zc>U;ys-1PyN%iJG=d3w^v3j2+M3}-&^c96ZI^litta$d8_02P7%*2;EQz0Q7T zlxaO>e-IT{Z)5u*OyOxfgq`)^$725BV7*FDh(_}9Ex3Z6tWW7f$=r}VWb=}pyVi2O z<<i=nUG+}(hSCdxCSu4*JK38`NaaBtgMzx)0VU+*ulArIM98&Wyf1T5na%#lC3MBP z_uCvU2o|$<fWu27C21&w@h8Fg?9WPFNl#-5dr#>NltxOq-`@rIvwtXcrM-=%>{Bk= zn_3|Q<1SDB3JUJ0o^QYmrhE@(DD|+ym?FBG&y_$~Nb{EwY|Sc?r3(3&FMw7o#(#s& zIS_J?%)V0a`JTN<XUG|{?G_r`rD(L?!@l7P1yk7f3aT1RWrz898tYd=z$klS0%CnD zQ`h19<SKf*J?CMwS*K#N3AshPLGEG~t3X*&q#S5VJsF!|IPDUZU7~`UH(H<0HmIT0 zQ2Gu`=~6Y69`bOF<Cm$Sl;?p8lze8J)KD4(K_V_vLvC<)huk4s#^wF}TtN9M74w+N zwi%=xMpCv9Cgs{VQhM;=Pawi81uNJMs!@8|xkUd>;12(_iS;9bm7x)~5fJ2Nbkk6X z844`bKTY24ZP*n&!Ltg5`cy0#S2dUBPQOiMw;8$1V7IHG49F6S{@npohSGM1Qg)-q zT@WO2VkpCZA_+MSTquuyAIFu1LP>i$84+(N)$qr%co^fI6geq)0()Eq9!2TGComrk z;Ib{gbiO;>&z@5Q_J}?8N_<hQHRDy4y`YLA=_SmuZt#myn^=^;QbR6mX1@lTcTSvL zUR9A5GTCdY#R4Xi;ma$p8wEcN3;y?m3;qwH;7`Va$J*VmhBD!M{0>C=dOXq3Lg)I1 zfvpFz9T<%5U>vsF@ZlR#ji<1;%}j0Q@2kEes!_*koX)H96!tE<>AV^<LoTx#tJz;w z-ZQZGL{V0I@Xe=xh<e4k_@}6g@u5r+f!EbXR$YBO&>!pSQ?stBAy09cEPzb@TSZ-> zGf)B$MVjq6mW+k2`+F|Z+$DXlvLDsJOuPiq<DZGreHhH4x{{K=P*IO6mmeN`FlT+e z3P1jSA@tcar@Mx~0gGL`;}H3ov`)iUn$Y}(ya7zRvKdULdO4VG?Ful<^=mb@L4$I3 zN8EnD#LM|0+o<&w1ZT6&8uY(PM1c+!l46(Rry5cDr^c?pPc5SHPn~ViLh5#8q{3`= zm4@NBY9Wogu&cojqioYcx^TIMyXfp%O?2dxU8jX$pyE@38??TV8l2-f8F}|2LT?31 z*Am;^V67wedr*M8FQf<OupJtI6>mKW={x*$3Fe>e()i1${FNiN8$Jp*5Fl~8xb<<n z)(78(mlFS}P_TDnn&Ls#do<2$cK)n|#GkD|zn#$-_c_?T8u%mA-><>opaB67#0b!0 z1UwW^z`l3_@MVlgASzO@kyGHQ#kW`x8|0Tg9mA%^uss`(?YV*3dBMP@@$9?|Uwp#y zYXs&2@T%6=6P(XpgIxc-mxp;>>kBN1EQl;b@oGMK{Jj=9t<QfNOw;yjVt!TcY_x}* zHYW@&y;>jMz)*ojQIYRkC=ma)5$w%IdykDkpm(&uJf7UUD4_0A>`BR66$t%-#wTRs z4-}wA+??*Ed`g0>Iv(HIESEll8r@FF$6#Gc<j*y{SoWocV*Tn@U@g(U0kc9stg(+Y zW2W}8#$OKmm(~N!f+Al4I6%k0pMt|2b_l*n5;70d%n88(_PLfg&-hY{n_sBxD=n}z zkmHrGikA{3kA16Q$A*uNf2ZNV5Lt#@4e&%r6?$>Or3-pV-pGFd2KS#XVW)Xm^Ag}< z&t@)ldn2K1b=IvT`VfsnzfMQ=_!QoH-9nF3hD&rz0h`7K-AKeHMnK(2#Kx}B`}jQg zN<F0ahHN`_AR*{*mFU*=kj;OFEXWB_=yPa@_GGj`m$MCG@S84BHCJHO+@K$&YHreb z)!Yo$EkwQztQ6%Aomb6WU@g_|(XnbC)lm#yRL!lrStmPmtdpI(Stq-6b6$3U-KNLt z<V>uSJM_3op33gh2i3`*SfSk~3hgYj(C&{F+FmTQvtl)~4-4&VUNevCqGm4RHM5h@ zCw2Dt;F@`gCz6lv#|=p2S>3ApvtrfqqM3q?y=+v=uLoAkD+8<LQQfMRcBq!$ifT!c zVFfb{)lTb%Fz0R}^+EZTlQ(ttrYPS7>;RVU9vt?2v13A#dJy1Oi~z%2!0@Ly41eMn z{-UGQyTI^Qz1OIr_jGUn9QJp;2T|=YJ3WDM2V(RnYEtqIxWf5J7sCz5`4QmkA|Jt8 zQtv^et`3~}+)3n5b@r)_U1*QlVIE|M^uAtG$P}NSiv(8s>!6?cT<_%t_Jtl;9{6eD z{bcS>2^YWqTJPO%UZLxY1OuT+C{mB>Qe>iU^giJb46^U=?m-HYxCgm;Jr_P6dw^dv zSWnqT+7oFAgd^cdgo{&eqO(1p;FMx3MLP0>0TeUmBWwX5VYksbM_>hh`&STHt#79Y zd;8OpgitvTn$LsYNPGN^(AV8WJrnV2%&r*9-3cgfLzGP%WfP*jBOc{l2`Kj%DDS17 zgGl9rW>7B{?sbGbLfIn}3zwra%J%?!l=h0N7*7}oo}`}b_^i}bki_Ls2In4RS5mwr z5NYl+9+V2;4H)6p(q}v-g@e$o!mYl~c+;y4o3U_f?K9r<!kZX-g<D&n@s?NYAu5eO zM5Wo3Q5W_1Yd0M3hrfUEzv=z`;KZImsq9p&v%8V4UW~7^7b*MAfI52x>den4l><wo zm$Kd=N~6y#jRQt$9He|!%CqvCD2>+>sFy7238$U_^*#OlWJ`ZPSnO@2I1R_XS|Ioz z)VMJ756a%Bc%?Zf9Uo)*5G(rpKnKcNcM$*iSlJ&X)bGFO{+^mnpzKpbn65!5{5Mn= z|1B?qj@XN)>*L>|9*h0(K9pMLnf{()`;&hFt6cdJOuKq91aNBW!F21F*x2`w#V)|c zexQN#dx4JVLG~jR(<_x7rXkfUyRc+0vdv}}+v28n8e4CRo7(B@5?kEVj<QQ_IFW;X zr|>nxF0)~TjW%;8w+TEk&SqPP3YW{d3uRku##5OoxW@!jI_zrr6`ez<;$*9hZM9)F z8a{kQ3N-FCSER9-myK<+g*Y<4`Ed=T-My0E{@D(RcCUn~({&JlPkpXO0Ouk%qPTa4 z4D5CtvfB<*mK{4XDApY|+zYxBMdkU{PnZu6*Ae+{8%oOa{hz?t$k+|ok=<j1HPVTY z-o3UyKC3Th_Zd(HyWfB+*#ic2GJDW~PGJuj&~!+M?;>G^WNZcQdISl~lnHUS^8LmG zB(RR)+i1SP#Uyeu@!^YJF@f|;NaPZ*Hju~$ur4K$OToH~L@onsBZ+JTi@&bw3#=uP zwWbv>n?9!TA`(-A&$0#!r!Q?=v7$LVKt$cphW{%vDqaX>K+yk0SiSPtgw+S6I3*a( zvIL7worS`CY&79>X?S&Kf|&WJVf+VZc~4LHGGuI$mUnVu7Pj)E-ATg~%)l~DR8%{8 zxR^sKx-~?q<D`s-6r@fRAhY!0#z}?8YsUR=&|yko4;v++c#w2c;Pbx`3lbV6bUpM< ziJ|pYmJgTIktM7Dn~zxuiNcCwOY2CFTg6L=8$#o8YIlRp%|dguC9s|#$1Y?u<0Q*t zvf3^Hkh!@=S3~wJMMwt4$)+94^$rwmA3rRU#1UjZYi5b>l2D>-mM*Hg<QS_cKB{@q z;)p`8Hj`h67RNo|*wP%5r4j|hj*<F=I3B?QrbK9XHSH7^Z3aqECtOMy=5EgL(#562 zkr*!;D#}dw32{>)9cnx?A+&18Btb37&jGT2M-~LNFRGqhvmB*CDTkIVQs*q3U!&A4 zm?dOFwVDM>YZklW2^lDGT6$~+KAiAq@iC(~k_c&nm}r9Z_A%m)k20*3X63O-X$~G2 zO<7H?sKi%ZktlSD%0J6c_omOMmQ|FLyAwLyVWk`sq!=}>1XHc3C@WRVQ1NDEQB{>% zUR;K1I?GE?yb`r(`bx`+P|nd;s#X-0RjOsh6{Rr&$awvi8ZQ>Lyr`r?D=IE7Me)b- zGPSJISEg2$6%{29$fhL*`G4Vww?x^<#ET_{ROV13lK(3O`M*+-{}-ho<K!MyXqFXj zLk=-B>$ohES&(^3=KRbvGp`_-+lfr*BCh+BiyRUMB~D6QR7s+WhbpO5Nux?SRWqnE zf+{1aGKy+rs6LizxhQE!$5W+{%NS0jvJWK<l}S`CL19DfM5>%bZCuPy;bMkb4V7!D zJeSI+Qu{orETDEsdI^=6Qf(PkPNxnoZ>XG2m7h@M9I6DUQb*<GRQV~jhq&Nj7*&Jn z%c$N;^$1ED>OjniRIj0WE~OhG6Pt*ABO%njnNa8D@VgRzTi|yUp|-8?yBdDm2z6Zp zVXq}ALK@F4Nw#E(B-ygMQ>5eogFt-0Y=DwS1C*2_$w_HxdEMiVCrP6#x+lnEN9UZ3 zf_PQaAn>eiuaxAMlq6g7goT&N4u{L-ojr#nRRp_F1G65@f)(ATVHzhi%1!5;+sw@t zZnkl=otx)J<<6B|t2n%xn`^jv0XKif&7X7g7u>v%o4@2{H{sSrBuYBF))FGEBWPYM zoYxEM5@Br+)}_L_4EGwO>&Xp7zLDHaZX&ms;H?(8!vc3&;4TZ?ZGpF0;O!Q8hXvkg zfp=Np-4=L{1@5uHdoA!j3%uU~_gdfs7Wg1J&43;v`%K4&E$|TweAEITv%tqK@Cgfi z(gL5dz^5(n84G+Cz~_i^BYB>@K<t$-ih_TMkeRdWx<t}W2uf~3P7F#(L_R4fB@;!R zF4>4e)RSjOs;ueqbSc^CB=i)N&a%;ZNg?)=XG$7zOh-vAX9~(>xvEjb%B@3Khl3<3 z)1}dNLXv4nl2z35TZRH&=@}?gm7$41nKMuTYy=mv8qGzlJV28q<qoAYc!01~iX=k= z8R`YdWY6@^bat_jsoF~F<orgNT~AP^irqjO6?PA)Q@#C-D%(ryw1P&BeMIW?f<~QP z!bPPv7_v>to+Lo<G^!YUmh4xlco{O;vmQ4!e#M`LOp$&?*sqC@DZ-tu-;mktHG=2h zUMZdHm4UQ+AgSL$Qu&Zn59#qr55yE9V95JcrcTC3+l`QK7$FakfWz;QCa||iz!`7_ zToG5qJ=aD2PBMYLZD{UG_9WvuF4FiT!Gk6gjFN%Kk$7w?3mVtSC|aiXU=F$dJ}e`A z-|{LHsk&O;U*myfu90yAj_X&uRt}`_&AAj*Ya;JQSflJFSrpeTG8afvlRYSYwOhu0 zu7jxWYPWod98Y%3s2H%Pw<cAd!0zFXSEkOyEjX`yzs&BH>*NBcko#pUwCF*$SMD=3 zuHdGfD7w8X@qmCmAfpyU_8^ec$7vDD1QlDd=Vjc^e4M|2nbVyfJDJ7@F!4<35Sbu7 z4%AE}Ps;2`IYGE<(w>zo53r|!#F`Ai`K*jb1}RQ{+$s0q9_5~uspsNZCnwR{pB6ys zC(AF%>?Jvn9?0aUN14Q*P9SOaE4goF>NE^uSAH$C-^hUxe4}#&Kf``i?(=6!>@^ur zdvG)Hw*YmI#LdLQV)nY+Ju;Zhdg5s41sX<0Mga}yAkI?t4ai5Cc0k6%^Mf*b1Mx!u zjvv@W#v+T>>+B$wRz3BM!9DChazaA}nIR1lIVhWFK_NZkzxw;xJ6M`_73vX>g5F1M zi;$l~q)K`p5}QWQJVE|gW*-AGtk5yCk>yY1zWm^E>|ZjT)jE(94q~JDLZCR1vmUT` zr7s}<Wb$vBePa})5a!^Db>KUW_rDudtoR6NZ$WSz`%&(N^6Lfq`vF2pw{^<?9^l6H zN)J@c*}UB4%?hel9E4+|(wh%BE?2B7ImoV55F^{7^a<IitCYT2eQZ^DeQZ-iQe526 zsc6Zb-x5RKFK7LmLZc^S6jkonrJEI~AF>OD(&XI=yCp8MH`y+QSI+^qTj3f#+xf2V zWaV}RH5vlJeI~WQD|ae=yeC1qpu3fjinQMYHj=wX=@I1KtMtUky^oXY!FN(0gm741 z4~g(06|%8gF_e97gxY>o*<X_jd3ua1Cd52##XP;l#R+*<ywXdMiP;3rIWn4)l^%t? zqKJ;^HKjMzi(Q%$@S>8(0>2kk{wQ^MJ&k$n_X(~&Ja0X5dFxf`^7|U|Ss&0BC_r_R zk@0g2L~r&6_~n4#n@E~l)ssE1<00E$xOnA(0z<jcY0_U%*pIx2M9P1|Qdj=2u=f;i zKa}s^l>C(k+22KR*Q=h#u@!uz1SWEhn23sEK2|)Z;Q<;`jCP%hDzlWpBpzfE1o5ED z=RhIMsVEm{!>xMurQ*rLh~HX1-wB`Z6(IoDt#Tg+mr>)V3*fm{_52k*FIBN%AUzbv z*vLP?cavHG1YfRtp5f<&Ds)GMWP)ce3IHiRk;%}uKTrZwB2yw$Lz;1Vv=YS+grm=J zB%UBDEfkJLhNJA62abn@W3l0=cq&i~K;@1lhNJ4i6QxUpW2xb&S;tg5Kc>=c+NeN( zzrOEq|Eq`l<^KNB{ry$^4_w)HwHGpnC#Kh_fwJDd9)FoKf!(O~_{;IwQYfl~F$tx3 zcXE-V)1;j!xHg-gBPV;>!DFv#oFktm?L}TB531}zHBcEy?}=35gTj?qg%7KBYA^8O zqbd$|<}lie6}U%;yF8`_QoQ{*T5#=gPrzp{A3L7H5}pRY(_F753NHuv6k%1M2DR?` z0{)2Khq@nqfjN;mK9r2{1?EQP`U0m$PW1)mMdtYe^CR<pD9z$Sor1o=tjH{GB%FGT zX`C55^>`q8h*J-~K<9@Y@NXAM(Ci^R|AXU=abowfx*oMsG=*?maZN40>4>XZzO5x4 z<14$yMnW(;Nb8NgGZ+$IL+$0d!1svSbZp=$cDj#2xs3uO#6MU&rIV9nXtO!msY{mW z4_FdBM-DD<qf&HX#qW=o4iVVeT(eGu5(=E3SPZpeY;94S&zvQ0R1bINHQYwik+x+W z^A|2#BKASkq41WsV6eE|%0U`|T(cG~n=!9Oyg`(SQ5xF1Lj2Xw*e>G4VT&Yj<K5Vr z7w_hAnugooOgybJjwWIo>_>b6DPdc5!tm6^g-qD|HQwoR#kk&Eehe>Q4Shf~gsz_d ze?QJ^ob^l{vgn1*fT6gr=qTX_v)=#2t5vZYHutS<{;pQOy{T4|mXxYh#Z`C@-dEvM zE6YoZM;xh*R~DDxj&pIvpv~g{SFXqpxeaV>Q~!rI=u;E&%A0ReQ^GKU4}J&Z15FXA zAtH`9|GWA8znjnhcQ&8nb##gA_~O+27;ojrE7ur&L*Ij{oR-E-a1!-{9sL4-3fBk~ zkHJv4b1b*{eHB$>_%6C9Gc|KWrk*u6b6jSwRxx6Pt&+dxH8#5{ds_Ah*(YY7lznpc zDcRGrtFvch&&-~c8Bj8btm%$HZ*vi?nBVq~yXvnbQ#FOkY5c)0jp`$*l1=Gx)Rsf- z$5Y))Ngmbnsa`<Ic&bmN`Xs7Prur1Bn{RIE#gvv%xy)Wp?2`%A=TUbFbstCFr%`RG zJyWLoENWjyZKqS)8Ps;Bwc|ee9IDk(Z8=QqVfi6t!16mwl3f{@6L80S)M(;NF6}M^ zvxb}g?m`S$F<YK9xAs(S&gbR=ZZ72JB5p3`=8~ThDHtMBeFKrg5wfDONj|svycRTD zx!K0ec5a@}%?@rxx!K9hE^e;m<|=Nk=H?o1Uck+tar5Wg`~^2J<mNBA*-Z-3!uzvm zuQTk64ST&|Ut-uB4Es{UzRa*U8uli`-fY;HgM9^2&)q_{l5ONlauvCnTw}Og3ohHq z#Oq=X7{nbP0v+t8g8~lQh;yO^r^mt9lZo-MZWxr(jb!3Yad>XV@V5{dK5ivD2(OZz zgxK@!Zi#5e2PKurDb<ojl-!`C5Y-!$WTK^4OFGd3@{<hQCU#7h$4P_`O6+(am)h)( zqdqwow|#7ra04`b&;vAoF>d90Qf7Zf*~hqnOz~xwT8SMZb#kG-QDzMHk)4eS`;647 zg>G1ieopGNfQ~EBxjJdo*cYVER+!#sGw#UBfG!X4^y41wMSQa^;>h8v<+c24zuy6i z(sj5Orzol?B?N)5;2UYKgNMi{=?eJ}8BNd}BX5=2R=&0Bmcf^8lLJY8{v?8Xx5<&@ zh=*U?#ckJXO`q$8Pa40ui#|8-Jv&vAJt^}br91c@aiMev?#u>8pibN@i02={U!qCR zMwxdxkd3a{BtJNc?Uj4{qhVS9fIOS+!#&h7K>fo=y`}=r$$;~D1LyNHdr=M?2L?os zjAbvO?av|kJ^tgA3G7#5FB&3^g-EX&kzSSA>j??|j_)?(etZM3kX|BQBk|#NR3E<J z;|olPOz`0=EWW^`$RuB&FjD9XOpZ+U;jV_EX4e<-`S6aU54T^qk+^6d(`X0eV%2_+ z7F)H$RHQQ;ow@`qbIE>kGFKyr9@DtTe<F=oIP79vq;djJ1!k-Xs!iKq*y_OPN5%kh z1hu5eUc1l;VvmJ5mTCN$gfO)O0y!)i(yWAIN$Jgec+DS3Q@r$#g@G@Wk1jmu<ia}3 zmn^Mb%9Xht5pxU^I&g1C&6%}JMa;>^6mxY`C-*g$uEVZ43Wr^Bh_uczE6-eR@EP&2 zk}qm$NoBcOR#8!6$}y@X#TAuWbw@{Vjfa~xVkW*6rZ-kCOo`QkT2@+AOhdtFxM5+d zTI#DPPZ^X!wY<2pDs^y)spURc0C6y3FJa)SX5jk4n8$=;_&W{ajLA%_UL9d8t>W_X z(j-GLz%|0fCo%5qBwMmA1tvIUij63mjvYKvM;a0WijAtyQG_~$Xh1quGN>z)Dp@#7 zQAVQ@A{o5KbM-@0P$EDsrfMm5m)lEaswC;+xZN&Ewlw&Sgx@F$-IB)0$K{M2mrJ~P z9Lncr0XHX1B2poTCUbKtH;cGgQb8nJrF{IfsuR#W@dWOA63NKK<5ik8U2?;SBPUmb zsmRkMj{|a}OqWt%gwym?;Z4)3VeqrTP^S<(KM{5F6H$$1z!<0E0EZ)>sttAIsp&bN z=`6&zGtU?2YY)Ldb-DxtRRfM+Vg3Xf%>T}U5YO^g$=+no6Fi&So_Y$Np*W<M2z${u zEqw`}VtLau3U{VoCIJ=CGkPMLUnPDW`u>+l&-2kY`B7PfX1v|s&tBp0o?&+IUg_^~ ztlLil_J9NLBt)EZ9mH>kaiWJGTbjWRVz572!CYoAe!8ham#>cFSy~1IQ&uF)htI5W z1H10VjMy&gZSuhWdTB?nRV+BnPJ3*+)%q>p|D@+GI+mW>N(y=ad!(bSMRd*+X=fXU z#tubR9R0`A4HX?rH<Un$*%#^INCbKz2ewiUMfDnPt0k4b(xY@zmBq!-Qx#QMql+Vs zZZVb&>?G9UiqZ;dH2Boa>@4J72exblTDF}kPO79(6_y^Ope@@+5k<6C2XCR&CA*W8 zJlssrAekdLl*P@FV~CW(q2ma27|`+*Z91$C2!W=i+K4P;+v9-B+n37Q7qmQRU(hlX zY@Mpnx>Dm?m#U3JCgiMmA<P49&_b@nd7urN*BRKn&J;5}qKx8!<^W6EA~qiyz^aWj z#;FI##GMB;H;au8m|nDXbefF%ED`&FG2dzE`yViBQuTtfme($rRdeR@`3q;&NJ_AE zjmKZRc*)W@SD~mld0usbtBR{#PkXTbJXnA)4oBO%I_ksGBoms^g`09NAh*NxbH)*# zQr(VfbookpR$EK3snr-yqHCgj=UZ(33a^wE;m$<7$tKbTZCsW)!~FI);pRze1Lw05 z@veXX)mn1Bn5O%(*7I81R<+J=YY3-U7+aUMHl5!UPPbfen+-KEw{^Ii+ky?T-1?4k zS`y3d30P0iwrH!M*UrV_vGKYi@f0UV5-D|dSrpn^P0C!YaTHA$f+J!(r3uvX36(v9 z0{FP4pW52Sh4G`a!qNJ0D{5-b8VVO0*<Dfap4k=cY-<rohs}*q&+__2huD^BvdL{m zjDn%C4~T53>OZE?(QqeS&T|w!Zm96WizDSzqol+@b_~P|LE|Aw(|<k(=2JMey(`*y z^dkaeLOhg;<%H>#TjayI(=c34d4Y6sE*UbI@QS|%Gh8sh=0J`_p7r`P+=hzkymq2$ z3$P?Kk<PA;Ru~F!m#nQ-=w=>JNxYD2Iy%}qG7^)T5=O_U9hI3wD&Yo=hazEzXd25p zo0@G9r3>t+Bia>;b~bf(b%v90kc-t^)NOw9*j!t^#`j0H2sc}>WF5_ItHK>K&;hS5 z+1f(q`tiew7YPjh6!&M)OB^u?Dnx_fH(eToQNQ_--WY6H)Dd3U)YfG=dPFVw+d2%C z3Ltah4F%)d(be8=kdb5-Q(FgiPu6P`qld0uQ46sRU0ozqFm&q|VXDQj&Bq9!A>0uS zj~Xhx;irpQcL-~7xU=a05ceMNaUIpd_?>&_-r1^MwUsTo$hIuEwY_~M+eswL+E|Xe z9VY}!W+m-LBC=#u>=+0rPVXTQ19=oDlmKb81QN;%y*!E~lLUCQKY<t8!#8}q_o(rA z&Y63+s5^eY|0jFr&Yd}Prq7)@XU;jU%XhZzxx97XuD$#D5I{Q6X&$_KC=U~HSxZ}8 zA|VEj5LN@hcJ)uWnqZVm&Liqy-0EO6Pg!d_lH<rL!%5Rk(|Dg%3~##djZVN;Ls!BG z&w=jh-z5vSdZx9qcvP`8>onjC0Q(c4y-?bn3bR%n%C4CiS<%v0IsrvpsML~RXgz#n z_&CMQh;Ksr8Ml0)S$JK!EDl;-hdVwVPb3l?PKHSyk48|CA|B?kNJ9wra>*!<HO3ox zJRD2VDK!?0!WlFIPAr*haM*)W4=19b5KlD5P>*#Y9G`KMh<vn$Fi$kZV|p}{h&Jls zNIVhMBk^Q73L){vX!#T)S&ziRjSUbV0;q5#7Q@sH$)p}>h&D8Un{12$Ok)D@g=3)@ zmZYIEC+Oj%A%kb*3Bz+;{#y_Z0~Tc8B~ZyXY7ED?+0M8;3T;+K+gBq{5-1Hssv>k| zO;jfx4UUa;seP}06t<a~Bul!Ps?h<~?JZ?S7wvR)Ji}@(yyDKiLbtEDvueTMG`kSh z>#~4gRf5eEY`)Nl;Lhri+RjL;E?Xnmdc5dvMByN;H45(rq0v?Ml8Z^5?iQgXg>O6R z&((GcZI{q?3;!OW?GtRj(CD7Kc7+g^3UQ?nuMvW1@8X~k?Lu@2aY%^EgxD%X8(w=C zX(8f5bPCZW#5N(ig~$kz72;|kdW7gj-McCrxBE%=?x64vIr~)SF;#f475+D(hFx`( z3H5sB+yDpoo52gkzXMM4H^8q?h#TQ?6IA29@Ea1^$Cxmlfn)RMnDZH?l@TKV6{ILD z6s0Ptu(GOkqidDw5csN_!MCghe9Kx#*XptAx=qWfUVl5?f+r1(Y}uy6qt_^90|<P4 z^ipNhn-#ULZrKTTD|5N7dy5vUtE;|^)Y{&_Ze)G*ekZ%#e#gvL+{M(p*}X(Y&w205 zd*7b-z9a9wKkq%6_r5dleOKQ5?!5Pby!T(2mnpv7>wEGs@5_7NpZA_(4>I-;`#?VA zgL&_V^4<^Uy$|QTAIW<^n)g1E_dc5UK9=`Bp7%bH_kKL@{Y2jT$-MVd?9*`gYI=~V z53whq$WP^?K9l!;Ht&6!eI63@<=(%**z3|xhoV-tH>0x9N-|$xGQUZwR+z7Tvw{Tf zK$B7h9bW-)E*C4mtVMCKiVnPoUU_AcQlqfIp=QO!s^*~v(s`F{R)p%Ge*iU<R`10- z@ijrzDY{@=v*Kn8x3(w-TU1UNEZ(|V(Y4woOY2({&Xz5u%<B}7YmWw{R8#6E!5AxT za&Ln3V@Z<(9-5ZYHaQvN?j{3Xb#Ie^hv92-!b8AubQ2s$9X!Q1xfyf%n_Lj=(wlTc zQQaO^%3g=3)aCVMkRR6vC-E+Z;9M$t)U(W?UMsbSo@FlWI;lVOEc5W&iA|9;f<9zb zWF0A|n%2*<3jH2PUunDp+<<sDxK)n#fjiIn0dVKLK4RTMmz)u<U-NQ}`DvuvJjFWP zcws!aAmw3cxA|FAEQ;@o@ZD=Z!#YaneKEe5n4f1IK6<akcc1x1*5Rl3CHU?)pJg4T z^u83|OU*A?+!NiXgDjDv1dlPbqx^u<Q*ORwbX2V9sW49ycZSGH(DJ&m41k`(TkW4E zZKPykK9CKJR*{MMdD(fRRg(Lm8!G_xi^OzTt9(&4pH({oV?6=$OKL|YCaHboWKX5} zWnyd~W*>mRh?sw^B4=bPssZJ?aSwy=-xIs0=6SjXzgGFZYW}C%F@LOQzWGPHz-K8H zneIKyV(ewS)2;qVHUC6c+))Rq)BLmAUV~6)vI|l*4Dgx%rJ_ae@$ACXBGh7|(sf=0 z$u6$^?zwY#vAVW>Nw8_#5|*lEXz(6+C3bP|MWf^Qkv(xJu0w@N&xhc5X|mGq(#!|6 zj-_KgOU-}5i?>e0VYvV71&AMOXy>`h0I-z)V>0SoCG9v@9~K$5;;;i9Cs}@Wk?SVc zgCKQ>z4TH-MxcEN>8F5F^p=sg9K99ftt2;)VPj}YdK`@opFum)ogB?bcj|{>kY1|% z7_THVblX&Pw`u5J#(%7tFKTF__#|o6`?c1-9QChmTh27|C5p%{u2U+|-u!Rzm6PHj zCKZ018`^6AK_er}P!_ydn_;K3^;lQa#BeotT^)J>5j}CVtbyST;S4*VU}Kp71K#?h zhf$NIv|nB7|1$RF-{2Kf0hZG20%!;G?}*WNwCpx0%P1#{(`a1TmtBC|tVd5CJzR!2 zhHKD5bEkoJr@I8%Xf|&I=oJvX&>_s5(d2Vk8Q$c*6}|qGW%I0C#mE3dt$K(wwML~j zxEo;vg}?~%qXNgbOKg5WDZZolS{hzhgT7K}`neRnveuO$7-;V$IBH95=l5fFCD{_n z<3qeXh%H^Gz_<+pqK7%&qn5Q`b}gXrc&pg_xU9NPt^8?O7Kizy^f=9@xNJt3`5DUx zON&f`UCACCI_xo@=GH(npFtotbhyO-Qw>`E3-F3OKY)f2+2=V`r+y%{o*}v~T1epM z$}XV9UzS1QXc;uR`4z09(QS1LwxVd(hWzEEsIn-kSslV0eVF67Bo3EVvTt+$ehmID zr(xmrXH<9_lWz`loco``fak1KSk6Z<;)Oyq<>n7%f(kj7{yksxa;xY+DJuF;r!V@? zrYL%)`E!}P61C+Vt}uUrKoz8AwhBf&zStul^OU75TS+P_t(v?jF<@MUROThM*0K|) zu(f}U7|XvzW2xNy5w}qaiPCX$BL0sbEv<lY_7eBsk2mdqpKl-!HPC<N8t4=@&>xE$ z=;g@`^rxZ*`ajb*(4VJhpn&;bGI_vip#Pq=fjm|N{l#vezfRjg4`KuTof_y_tAWnW z+CZMiWdr?_`-id0=Wqt17H^n={!TPlPPX8?gn61HSEo~0A_Gx~`vEa<tRUvE#nq6b zP?r^?=I{G!bl)G2CpGUqcTU^(&vUQ+=eak(at>b1>vjLNnDvc%L07oVn{<>waQY9T zLOLu2n)3c8uRE73!g@<<Ypwu`Am9eQj?I+)$07R<|Kr>j{&DWz=gz^4`8mYxENmCI z)h_x!&Y8FBxmL59ke?*8-{$Q)DxSL=<4fuk)DCDD9<|S*e`u@vqWX9Bgtl_k$N87| zH~I3l0XSV$D`Ca4Oo=EJ%ao|%jwx})xlBnYftZq1Trs6VDUT_QieBaMY=A?BvQg1C zDHkceP0GbeX-v5U4=qiKf0@#(aM*vs?y_2GQM`4^7Ns(#v?`vMl2VK+<x-_2rnpqt zOx%i_iTCT4-l!VbOkAU&D$+Q6NH-tUaYutg5G#lx3Q$34t@^FzLpo`cY9QI7nEFB8 z{Gg5i<1iU&UO*M3*@a_|*h-|&WZTHBw)wD5X{C}V0Ee~y3((LX(^sGdPTV84LwTN* zIyKGD5Xz(Y>46d{PwVE>dY()8IUV*c5I;tHm((_86+}xep~Q?_!Y}F_6?hTlB<$S& zl{9y9p&Jirkjr;S#cUl^yIQIy8?Eco(J}Dz{~g`@o<2tNPuh=$FTvwd6ZUESQu7Qo zP1$aEeNIPdjj}iv@(t_--F!hGYp>7NlO^}<sU0fhVg67bw?1S))?pg?vwoUJ_(A-+ z1W)aNuO&xquzl*Ubn{pG>Fic0nfYt|j4gC>#@Y~!Q+sGHK|c-imv!@Hy*)UF-@^J- zP{mr9|3{YTO$a!m|Cet5x8A82qG69nMUa2d$2#@wPD~8XUHFvc{%C49qB5|p&41`) z@Wail`A@x|UR{QHPVY3Vnq6-c)NHlX_o*K(Ls79?4ax?y0KBWH-gg?LlAr30@Au{3 z&HGXJp%=H}<<L{_F<@8uKBIk4cF*b5UWVEvu^0b|WA_o#+*oJzV2zZ=Jj<?A9s&0) z4BfY?j~Uorj~nJ=2Ev+87$~>M{fkKxp&`dnC#Qilmf8mec*5x9&jLs%w+7R5Fql4N zjF+8IlwhCvq;WtA9y_31t|GdpEOb}N*}y*w*&WlLCLNp>Vl0{YH0smbub|}QGX^x< zxeA;UpEqi^n$H?%sCgEqE{EK|1aG@K4e~!Vu_O;bNxp8JA&r<0-S`={!f8^8*##?} zYyfNtftrMs(@>Th8N)}PitbHJ8#l~xS!DB!fqVOtq^j~cqy50xc<O+Pbs42G#(xAU zZejY54f98oLN|YGNL|`6iiS`oP@WBjpi=$_)&Evz{M0aiYRHoX)JYyKV2S>j(J3H< zD=-7|=g=6>BEo++P>}5rdmZhB0rl9?(oaJzUxXM`)5#6P{avi)9}PMsa5yF0&a^)o zw2|i%Hu6;MKgw$Vk*fVi*jyX!S7xs~S%yMte=<6*Y_Hi?qx4*9{uhPgmz=u&e+(SB zu#e=l8`kA+_-}@_)h*4I5~$qjE_CSTD^La-1Afp`_3F@JZjK6EbVxevgrIL1e4QS` zn455G%(t@rU9VrhioXWW@K-5Xwa4>XT+k0HJf@V|*AQyVj`mJ8j}U54XVc`+HH6ne zjAZWaPz#v5gPHYh`v(U4_V*sKIlI-$+F5vsgPDzXqIKz^V9xxh6}En2z=ol&!Ayo2 zYA(r3x;is(*tr+UvHe%~WmeCQVK{T`Fs8R9b%^sb*L1dWw)vCbZBLPrS6i;jKM~xJ z^_Y?3y>=Fg_h9B=LE90z8x{L-EGQ4hLJi;~8XPu^mP{t~01vQ$*HNM}%_*2pCeK_> z4-?!++D7I%=P`pi74IRac&9*hj>3F{9SDSSzgk*eRzYrn+$wVCGok2=b4}l@Fs2xr zQJsL%qG$|9h)y>S024TdVPADo{V>K<v#Q-ud!^E2-$eX*=~P-1^P@_A6tFyQ-5AJ; zjZyps+!)B2g;qjy)s<+syN6_aEIEssDT-wm-?D;TYK_&AzVzT`3PEn*5E>~jwp3YY z72Y04(mMRwsdBM-DwA!*AHo5#V5&4zP6aoHT1?p~RUek*15pNHYAtZn=VwnLDI!-Q zrRQwHov9?kY+)19J!fm)D-cX6YuiVHIuzd0*K1v*9GalgZ$U0>!{h`x!_YIy96E<> zRe$cw+j46EN^`#Ek>LSs5o=|ld5AW79ce4Vd3dC6xVNvjKjV^;c*H`2(bav$VERaK z>TWF-GqfAZMY)oE$0Q|=uHjsq*H%zSZ!Q$h*pVK*y0_m=vKi8EbM5kgw1%vkr92aI zRXYzm5kK<HhaD)mh#nW^LteKOC?UV|7|ynReFH~aJtS9)USXN7=ZMCA1iAzU<#zCE zfX!vS?;kj#6Hbp6uoqtpiQ8+1ZKgNsFPhfEDt@7yt4>Am9xk+}U2?d{`n4g;wtVJ> zu+p5TUP~{uLUY&fNSXwBs`G}{CyLN=G*i5O<|0g|_cE{KvPhw2p@diMRG15aFNiCf zQ=wP*nL=*sluT58*D&5SLHohE&(;(|#XK5|gmV{#W8oz7bQ@zl5f4XrJeg>Kuy73T z6eGtMzJt+ZLj!LJ!D}oT4fABAv7u1R(7w4hffZVGS>*yG8Z8ZB{UjV-Eax^+Z5Yj5 zyr%($DiYq(j>Ec(ky|n_Oz47Hq1aYQKU5@$S55|Tb)kVjy*<_b;VWoRy8AJUzF_A7 zta})o69IJM8x`AY!SoKp8sFuha2T%yzON@ecm%<H_;%@FZ+EI!UeKoE9O=C_(-#~X z=_C*3n@S(<?K@tI-sb+{UMOOE2ow0MT+-b~Q4o?Y$kPXvL<ac?>g6S`-i5A!j>l;} zi~Qt7smIB3ku%CcR`uda6&x5D#>dbAeB**xu~#Vw$x#}0qBJCrM3PaT#a{OWeDf9s zmN}LOR?cIAU|^@?%D|g6*gko-=DFyqOK`W)yh0~kaf~j6vj8cIn`h~Y(-xqHHmz2O zrNU8%8snTRglm=1R||K}Jned+N!4+6!W|VxOlS$@p=%AuUe`7VqeU<;G1gOLo_3qi zwhPY=i?^=r5!zm191vcqJ?;w99@p;dWkM(0w5}H6iV4?3;W{AnYn?lw{KrMf8-?@D z!g-x=zD4M7bxV;qr=keh^|{Iw=5tk#Rw_O?$@w<IZ=a(2lF6$^_g@Y%hei(~{JPhv z>8{T149i|kz8-R~A@?x3{p1didxYFKkUL235V^zTj*xql++(9myPhEr`~-XLO>C5L ze7gnSZ)UH(mEC5C+yNoCvx+;}O@$$Mv5LEkVeVlS_fm+3^=<66Me+Bsinr%eU_S4# z^RZIgKOx0QR`Jfl_;<02qWE{SiU*1@{tJ5#dv9^j`z8mqLAFH|Zk-tLel{`WR8a`# z{vftM5zIrmtgHfmfb|std~g!l4^2YbQSo64uuv>nQ1J3Ft0+qS5z4Rt;G+`&KE{qe zQk>zVRuUQlk1@8c$?0N^%)^_M4RB&{Hz^wx#*w?u^i8O{&A13v!U<=S;!>D{xZ%!= z(R`+BB_4X*4X7W^Q`Mx*Q<(P>)csaMVtg*Vd#yI9NjL^EmATkDI1<&)EWqbm>xQ&0 zcl9LZ_rVTz`J-xDmDjc1o~oCHc{K@(^&)$?ze8KmqnQJeq3rfx#BIpKzJnnV9J$V) zBI>}MtX(I)XFAIoTg|(fWR-6v=Ca%4gLEIlbPtn;H)JHMs@t;(f*&JwaFxnq43)|` z$9kOR$C<Qh`AOF9NqNvR6KnUTyx{pXYcENafagg%{AqyW1%@JU45?@S=gfa&r&~)Q z{(DrulV}0zEL*IcW++rq7F?1lV+b~e8sj!AJsf4?up;Hza#@ixti7BnQqE4NE6g9T z_R97E1q4_Mm7e{Op*7BvWmh2$lyy|K&)YUn>8Ub*Lg7S3s!rFKKc&|dY0dl@`RdaP z%%59f3(a3xzD4FQ$#*)v*!&e{1%ArqKbVy8b9=fify&y^+UHQDvK1{SoMmJybF(BU z|Am=<AvCF_3PSxAHRYw3nSY~ao%wf)97``pO?OyG=z?^;`3jSkHAkgVI)~eHmkOEP zL@asn+{))yqP-z$n{p+R;WjC^sb|?m><(}*R__G&674Q<n>fl?HtY9-yV-b~YTlxr zZe0PzyiG+(L%?O;p^jx&K?k%#2b>yt-n<juSHt_I^!|c*7rd{5_cnU(;^y5D5QKos zWPonotB!YaG}mLkO+C}8gHM=mSM6rJpM2T1oyIBB$E21lklOgLx)ji9JeXdOLY>qZ zi_CvfJ3^FZJ*4Rgp^CmRy+=C5sh+U;UQ(Ec(nEj75%!R5m7*3|Nv1l_vi-_KQ1i<f zx|`I8v5mBkVjJ;~VH@d>U>g~aVjGFav5g#0sOE=A8a1k}G9R{D=>_wn>Y0L8f>!t# z1mv3u?JGe*K|2}dqYzNgPH5G(lS7Tr*wGVerw)}tYnz`?aSV@*r(!DV0>p{}n4XHO zD1u7Eqto%=c&GEhR04vYB>i?c{7};M8M^CnP<ckhYae5+4KP5zp^gPRat1@pZ^CQc zBQ}@8{1)jAB&&!2rdm^$q)}ZeW3E<OV0N@Ow{OmF4z;&rTP*n`QVP|YZ7ozN)s$@_ zCogl_vo0rY`V)(8h~$_NI8v;q%h2oFaECoSkkb@Zq1?>ie6eMqYXn9AhHBIO-L?BN z!^5!kgY!jKPa4lS2X`E=&4C;o8tghq`*zrx591d4Ae@qLgFbZ7&h6mv;7I>91eun% zB)bNCj|@jQ<^ZTT8|~u2sinb=lGnC3*iq}J3D0?w=bNx6J+u=x@Al~?cE0KH=C^g8 zshS3cBg~Aay8mCB{a|skA1r8gqG?7#k%X|Cg@+p(6D7s<a^&h2ZVZQbfH@q2Qk7`} z>6@ru*(p??(8`=;%#w1};K7NyiSL?Ab$dM}<od}i2S6P@tQv|YDjcO4ks!*Mj$}*~ z2d}1)U|*h$xuV@bGNx|U(FnhUPdUO{ayN4)j`i9l6MAb3(0l)1&W6e5fev!zuNoU& zBZET&gRxnwF-0Rx=uuZ5!jdJKKP}c(v*$NqN=bQ)!0z<WaBT*fa3EWouLX)Q;id29 z;riJT7tA%s+$Yz)|1T%kl)WgYSu_^SO|wWi8L~)7Jd%jTzzN06CMSj|7fKj996ued zfQq7xFx40*&VmD_8#!J0CiN;X|4_`4&lkK#sEeG7a5}0u0gX|v=x`Wx_!SJ%E7Z!W zz&vuR$z4G1LUI=~ufwS`C*v-fo^G0+YLnu@t#A`eZbtK)d2zCG9mOHJb~;2`WfdhG zHFFhy7&(00R^x7Y&FQfoW(GUdI;BT7*UC*Z*DC=q413=w-Y#ipS(f6;W4JTs8rLs^ z$OeeqP!Q=u^@|(ZjbO<(gK6eP7~HO|elDwytbW_`W8-Pnp*mPfu&r|CAlXR`R*sS) z*-0;i$wlN9EyoLyM5y&!dP!Fm5vmG}N2v<^{pGEz13B^Y4TZoLz#H*wX*<xirFHM2 zEqj|URovYY>z2Xv)m}Sh_ukfh`#e_6?m?so*-?92x3@O$Yb~)N_hw)U4rQV<a#>{g zHx`y3MyaHgb&hm)_GMt<L4r>o5^?N&NxVt#&h!nZmrdOWMa^gNJnU5g<)^F>?<oY! zt7KR(4brZ@f&OB>0aDg&#zi1HBi&S@IXIyKa_STkp=d--%UCoT<H=ZKm?x7BVV#P? z8$$7<wJd4LSV&mZrFl~J7^YyML<X80D7DNDXq7?>2wsKMC5@CKp-ghUvx*6AB}d|m zt_X+2=_<RGyWo#$%pfH+if_Jx(T)Y`!o`bf$z4M3QgWA(TSxA4a#xVMin)Cxw`|aH zn(Ix9Q(<_$N@WI|tW&UJz^9j|xNtL=<S7+C>hN7oX~GHf2mZNnk_%3H0@ll8vOj-J z-ju&1{+j$9@uTvNI4%g>(2XrGd*ED*X}!uFkgSBE>r>J7Yv`8pI~V}n!(i)wrcE>7 z#!h!~_|)GAPrb)5-%dBT4Z6AQF`vN$^XEy0dDes1Q}Ny?9=Y){`Zl+YONh;4_n1}f zrR`<evJhTvBZpY*Zitav<*x<`B>j<jwVuebJJS8>t21)<P&PWMj$VI)KYRTR#^@{B z=;#R!i-H(^1%9KWe0205V)S}=Uay|J{vYDpIqkcz+`!L$P96QjE8<7@e@@5M;}?+P zZ1dMyAkQQ#%;y4@5BJVp`wulAYT31Y*IuRCB6TAlC&z4(wzu>&(yKYrq9u`+BbC_b zmBesKe&$2SM3bzufx#h{Ea~2Xfnk3hu|yX@&^DVhnF}uDd`zVGP9{qi(5xqtxQhwk zIl6cO;k<~TUO;vC^kmYIt>g<$RG(I?T+OC)7qhhrIb%gkumTpDduVuY;F=7vqVmdX zbGm3JD1a-_AGbhi1>HAg>seejf4-0{#91JQo#e_PtFFYxCu5gMlm*<W$(UW#<;bQT zau1_Q1(`<g>`QlD!#mL)($#ojf?qwDK5h*4_8rAsdk<&yfxh0O8U0vK?{LOAp6Tlw zIA$D94-O3U^ZxYF<Jw@R+c+{Zcmz$fWMEWgN4k23dec1phLN;DvOLs+cO6gnJA2Z7 z1C)mYeVC;SJp+Tt1tYJ_wiLfZ`>Zk8lJ4r6<!dGf>Bhq81dF+GHRO@*%QLF26}v*R zd3O&E3=g#Qq<i~ubeB&^To+3uXP3iHOg)z;DJCk;OA6FG>`7+8j&!hjn5~m?#BS7& zKwsKjS%ZX^NjdIR+1Q-=Et#&qv}9A2x9r<DG0gf7`-dimOP;3RF38?Ywq;<Xe|X+R zKwE%(x^fInE{FZmFQ1}}!D-NRL4v`Fz*7Dmxypwn*pPQ0sd}(dX+wvH(6V0uX2o{+ zs`nMe4q2xgb?9)#VCHHPARV@DCE&QK=^q&G%^u&EXU4Ym+x-9JG{v;9flSv*1tt!Q z2Gum^pjfCU88%l%%j?Q%z<Y-#07m8jIN?hWo24jIE=}vE&1XvR4YTC2d-_E%Hf>Hb zBx;^helx9*8)wOOrnJu7;wqQf1M-^Bz;@Ig&;r}>m9rGD#ZFJ0*t}|krPCHFmx6V% zW!Ao04PC1b!B;$^_YUn$?_}4q(6Z^*jvNMq%1nAzAVBWW3*+nNfMZBrZJK`A9>5l( zFlwCX%2oKXaK;|LfZe~$_~3*!A9w$HINlIRuAcj-(Zh*YBvducEJo4vc!Wno4GrZ} ztdhL3As(um%K+2E$w(qvHO*wx!?Ad{ktf2933tKB(8CRoh{uxQxE^kd#}YgmZ48%A z>I*#*Zj6L^BpHG8P9zp7owUe6JsQIe-r^3Agp%RpvN=p>Xw+~h!sCFOhZBwA@~OUw zi3AoQ8jdfVaT(IX(S}5W9u6lP;&fCCN8_Q=Nz(}0D;bZ~%&-UoqG&i#IrT>;4E@%? zla1l9));H_$n#y*4id}XsqYT#aO??Wxxr9eQ@G%~#4U|-&JEVtkHI<0C)85BKEPHB z78Wc*CgS`x%(+WNv3b|!!gZx^y+%06DjeE_+bP)Vgw`pvE;I?}zFMf)kR*J+PzQu_ zP`KVAv{5)KUeBDD1CE=R^A-lrTbc7M@VFad-VVQa!|z|<_dfWYg5N{%`w$~3c<pic zeH?zDWI}xko=?N?i|~6EeqUzJK`lU621@oStgQU1(fwLUd0AC@bbot?T2fxsJ-WX` zDLJCBlJcR^H?XSmVRA>nEh#@r{$u37mi))b|3>n^Y4i<%VaZ!Z-+UdsonWJHW=ksX zz(>jad)Vlmj8!RbW25)NQS3fOXWhl`VCwzso$Mrg7t47c$a~+D_r5ppeShBjVBY(I zy!V57?}zi=hx6W#<h>uwdmqVrAI*Co%X^>5dq0u)ek$+%bl&@9-us!n_p^ELGkNdl z^4`zqy<f<C|26OZQr`QOy!Wel@7EYxT<O%63PoA8YEOxWDXaJRyo{~c<1m=2HyM=* z(}H_+jq$a6{3T3Zx5wjRhO5a95n}zGGCy-Tnw;?BT)C&bl(~#10Wa>*p2~9OaX0Dk z;uTE}c$9?qIAIP%_EeNHe{_%6%}Sk3E{G`8nlyNn$567pf;Vw^sf_P&J6RyGN9e4I zrC2#<Y@V7@moS6PPwXl6vFhX=mxI+b>@hf7FmDf6*+N#y79(|HQ9xM_Q}KCq5*L3> zhq|62c|xdhRIXMZbk+x5^+9)i&{H4u)(1=KFBfU;Ec0nQI{4*EnxAEUe#Kc<s&{ti z@UEX_WyUofMzFj-SWzFWtPck2gH`pxdG*2h^}*`;U`>5+L49yxeQ;5IaB+RGwm!I| zKDe|#xU4={S07wnAFQtruBZ>LtPifLzq~4KoQ1{UF4iG}YwCl+`rz97;JW(Y`ubp~ z{&FKN&a$xMeW>hrs#wQa7IA)>bvT1j_!p~Fg7M|&STM1c1(R#lV8dE1*tnJlH>}lz z8`m1aO>0H)qP33T#mh%o@RGI8VAEPxuz9UJxOuH7*s|6e+yc*5c&65t1TS6d3vONO z54No>g;F}tvTd#xSceN*z$L}>HNNWQ%gkRP<>fz!$9}R54I90LBKthcgWI#7lvhc+ z&EF8IM$<ID7ZTi{S|)h*qsh42)Ui4x<zvAE<tvdxe+9ckMGkoIK+2D%c<xlu>JN$< z-KCC=*RfNnQZ#sVujJ8YJ!CG=(D-Ws^AptD`;{l4ciS1d9qJRR`Dt~0br;W8Jlmxs zA2(g$&>h@-%Hr~-J?7JDhpWAETP4)Y{G57*Sh1g1+XJb9vda8|N<1gX;wWTshFIHW zFJLxjFaw5eyZXFpzM!_x8%xb&5NrNOEfC<UAOS8E4*#)whD!3KqLTbXmgM!GRp!ss zamxMYcJ99*%>bIN@f#UrFRiD|&)Ej6MvGNF%5R|zz3lhkzFz%<YW_|od94}%G=Hy- zWfwp@{y}O0h?2O@VeOBq`A5`$d<Occnjs$ZtlG)zQ>bUz1Yd1^YLU7MO|VJZUf(!( z&ioUpQr6(pwg}4d3bpndlvh-9RBK<HU7Xd&>Y+8S*GQ8xKrH~M+cgPwyJp^LLuEbn zk4RMk66T#2%sVyn-4aH#VVrhuAF^ORq?r#(7=v>Ah(?@p3)52;)Ki-ISsTj2<hC(= z&4T%wW`0A$2*UJDvRGzg`k@8&L(TlL4P{~S+L->sg82{4{H=s>5T@TDrV<;|-z=!V zY34s|C<~Jh=fnztxs~iyy;->xy7M}AD@RFtgmjLjY84!!cSvhefN~jtpR~YFa<qk& z1I&6*3B#i&0dpzm8vip6nNI=i%IBAycmWf9isL|elAE95WAYx)*KpF^z|?PX^J$J# zaTyEV$SNW@1$cX1@Mbnv$5P8--qo>@=glwh_WJQuJ;PCoT$o`J2U{|pTEd36n$L0s z1`M|`lI`-K6s5#@J4zp}A_4gJx-p6Dt1}||R<33%pk^mtFu%>uVEw8ccvFJJkGGoN z<?Tz(0Q^=INM16AK1C_R`SKyG{7<F1FPJNJ$}rBAJDKuRYJ*>LoGdSL^XGi*B#C(b zf?sO>lFQlhBB$AM0A&S#&2g607FZRmr)g8qj+U*%*1L;oFLCoFDlWyWWRREn8x-Gz zLY6y85PIxPCx?!Fky{h$gD|1~fW2Cdy*eKXdqT%vh272x-Mm>J%k^aiV_f&)$_W7Q zC_UY#K)Onsn{}DFu)PsQQ$y$=H)}D3NlNyWyhyS~T5%!1xNUDGGqiqt`uM;|PBZ9= zWkn`m))fP9kiZwB(Y9$;X&;&M!Qz}Z%ADa;wt5Z)v??VI4U@^Ib#qA~K}n;bB^i*n zg(J_h=Yz%;xmh!pG;<MWh|dMlbV3PpQSjR|t6ag99RM#t(7$sq*D*O}Ss0FthHM8O zj>Td*A(L=28ksDX!NU!37z{^ai3Ky&(U2KgL|cz#`iCO5c*4^6>k8<BrKIoIOPahL zsO*=Q5Er}xx!`=E;AGRA*EyFlAr=3^Lvt#OYu-_h!hMR$b-irVPd2k1m1<yK)qHZR z$z4G1B64fVU9w!EXFYSdk-4U;#1v<O#PJ-cbX#+x#R)F(#;Q)Lfelg(Y%mupT{46y zR1I8_R}GBQ-~X~<N-fpPkb7PyZ3lDR3n7iL0ozE+Au_pCWTG2pGotY*&1Or7I@Y6_ zTcjmlt~()e7o^xjDu>{dS`GmR5ZbRCfL$&-V7^9L@3r*|SG0R@cNanjR~J`K&+z7X zb68zk(r{oODqdsmVyk8x%!O$#V5wn)c_GyT$yFuwDp#PwV!?1{Y3*=tzjio%tyC47 zMaD&P&J`<=9vtcKw&rPK?#YW9X_^JgnuPGd>#rs%cI&ldg0IUKG@8I~ceZS8+rH&c z^Oh|EnetE<rfTl)woIdy4`xs_s@R&JOtiOk$F2jd^9$4MC15M5yMN@cO-Y~8%Ajq! zuX)(H!_JE%?ovW}r~v0A%Yw1Fx8H<yx={3!9fKp{(Zg=U1jw5QGimqH-pny8+H<HN zqRd*`TJk|s%8eLw#iDMOY#Z_GilyGdb1%1*ut?^4#t(-Vi;lN8WTgEjBi#j@DJN0! zj-<OX?(P9(c2b6t$7r!3b?SnZ=_5z_jyLyr^$bW#+0d2|(z82pW#2gWYEAko<k@td zwgRcq5(>i#&>)$_7oETe%?Ymt3Pn-#=p<cy22nt%0hnFOj_*GIsXa|Q?T}qql0KU5 z?aTFyFZU|D#?{r6>AHrZ+~l<w%CP8AU`4Lb1tY<8Br}MjX9S_s(vlOju7<W~y%x2l z_YUtG+)+3(oq*IDEfxa#=0x*r<g1x7v5X^e$ztKktNzy-Yto=nyRKEcj;lwGsYiO8 zG&phUy5s;wudlbCwgzqeGKWPocf*$RFX|L?UYZ>p%=AHgw;VcK&mZyBtL|kNhNx&6 zo|7bb%lT(GX>Fd%mNWG#x11Bc#QBY9xG~Hdl8td5iANf8+s;@BjcCTA4RO@-+YpBh zXR=Wb$3u~+cB8R)GQ{HzjY%Gkqh{b(BH1|O#?(_-oSAm14GmFghDHP&fwI8-z>+|# z<1)t%#}$EF7;aiU+i26O3(degoVaiG3%wlGL>Th~uNDk8unTYx%NF4_R@4f<R2aCK zMeV)3UhtJdUnTfDRNc!$f`<i<2p&b#G(0YNLg)=bzew<leU}K{BzUu6Ey9r!&TWEk z7cKzbDfliFBjme<`+#s?DcEa-`zqmnt#BU{?snns5bi_51u(mX>veeB)Rh+QUcp{3 z_+i112>u4ahXjAK;3t^y+zP+jnDbWH4D;KWS5X{_X273s)aCXlN~yvEV#R2M5=bg) zz%aIqHf~S@OSC<sn{^G|mvoNq-M3lMt^qh_|7ah$1L&3wj`krg->^Dz?C7=R9w+yW z<i3gA>&Sfzxo;(Rl+ojQ`M5zoZj_Ik<l|;`2UEy*Cv4L%b$S)my`otWu#xYA?Yy=H z4ajjfYJ}CRn-vE$=F@IpRG<o1M=MIEIWIwLa;``-?BCrbsQ=YNB55s_NE#jvn1`is z>+db`(p|a*lZe%;JJfb<o2FPoXIwWfec5Ry5YD9}&N4Rx$D=09hOu!E(is}ZN1pR9 z1kZ-CGbI?X@eBl@s-=sF$e7aE$aCf;V_WI`pc{Tbw-0vtPV;g+R~#VwI=XIrRE3}n ziSbD42@+2#l+0OH$*wl9KFu8vVfK!Vm;Vh(AOZE7v#d(%GyBJnmR$|Gjf|T|r4c&w z7@iwa9(9#@?YMcI0=?!N@qQi!zIi<BL)}2v5yhnrDK2kq_m7`Rm9mtdnWGGE>RFcM z5dJ!%pLBB4&U7OiJ6iSzR6E7S%v+e1<E=!EPE`W*Z4iDtvogJdQLY$%7aNn=-pwfA zdd&A;*6ts(Gk#lP#+c-8X6Jkca=xFP9@8D>JEf^1LpSbb&|)88d3mtf(JE9=rFH2j zviBkA&(-W<aM!3G0XL|94BWN+F^0l^*qqOq4?|f-o;N>&j~C33K@sO64)amgF~7EF zzWEqyuTE7fh|>H7L+x5MsAuX_dZGDAdR+vsi%+F%%}<fYA9v}-->_Iu%VNnQNs%n* zQ2{?k?dTE|%W71fhT?2s=vJzqrviQj+>QL};BL~tfhv2A?~wZ5?=tiAvdAx(UuHy; z8(p>{U1xrUov}*%RXeyIg1-)BgJM1i&hiIQFzXv^91Ds8^$((8)^{Kw^oB6Mi@nk1 z@F$5(z1i`7W`3WY>2yG!v@gjnxdjVrj<NO?<~T#8QRW%e=}fKARzb>6$Fq>M)6pp^ zzXToh97zRY6Wqw534TFMuyRV7w9U#dEX#~%*`?}>;6}8U7|QDX2HdUsZ^4Zl=NQVQ zjjCr^o8x-be36ZzDB3N6)BF`XBWZ}gW|x{Tu`|I)Y86A7wBLZgiTt|xJMeEMzhVA? zwXg0pQmfg?vL%r0k8GSID;-%!wq`85=D|Ak1D(dHRFI|D`i}yDiSQiZkqGHRBIN2$ zo!&_?>z}Yi(`(KD!^X#9Q0S-9HU5hs{J(PPkQQtHj|B5C1OH!{je@kb{hf{1DS+W0 zc?{+`C~=%hEX+~$Ot6{!4)c2Ow~^mz-k<^+XRanUsri~L8q2PunmDN@>!~KUAiS7R z6Gy%#x2fZuBE8<cU4?Qi>U5k+FQS^<nM+4Cxm$u!P3~1~6jYP@RIJH*^X+*I=KUnL z$xC4Xf<S%0VG}SIzD8`6$wOgfmuqF0du5krWtVqlSILSl--<5(S+-aC8ua=;hVEt+ z-AlD^gB#)BLup0*``~UhPNTAAf$X4W#}9CnIG+P|wd;rAu5tee++Ci32Y0vkC*bZc z`5DSV`hKpO-&W69BMC;#zp0&Ej-~IYmzv*$H)}BI=J)ZX$r?dp__EdNoHO_mw|eIX z_|j~3&-3^q`^shhOkHub%V+)^AAa*CH8+OxJz>b6KsABCRbfeau+xAU>NbC;cDm1G zL-dXLy$U`E^rztEKLN{`Y?xX<2=8YhGF;dFfw6}$nW?r%DB+oGG!@Y>=uc`r6vB^U z8~?4INyQWl{A;cY3(Dfmm*wx!-Hr!4olq8!`46?zb0!<7viuXWi$frl<s6kIkt@sf z8oWVS#vj6DCp0JvCOnf(QdvCajT)52Pi47PJCkZqFz{|IH_}iK;=LMuI6K`mlm!mu zkuEQ;P^k3Uo<cY#-=THt7=_ZbC$-!JN8aVTv@vK%zya~*`!LRx%it7cFy85*3|umU z63XBqEjO|;gAZz*4vfMKKCI>D9cJ(m4dqb*2gI9?V4N4?q|Uy^5mX7==^eq$AH}$m zT-*j3S2BX>9@oxvdLeQn%DrlxKAO=_Y7pi=HCBRi>nW=-ybnU3rZ%bAcTa1beuDg* z)>+c&IW<m@pSNmN0+4Zn^qBvOdAld{vPbqZ*6&%!-wgp5LH=LTNTk@U8$Z-x#*S;G z9+WheE_q>^xeK2t<wqKPqS%i$^9Pz#g^t{!=g7a+d_n7&Px~qOnEptkMannyocUvo z6q~+IrH_vK6AdT$Pr>ctzXZ2ie-Ye_@hfn%;@99_?YJ5FuFhMy`4d7jp8r6-VE$Aq zn9o0lF?jJw)N*M4Li7JOQ_Np#*d;KZU(~SuVJ`nllk-5BzqUr9!+c50%`21?-hh(A zztKAR323=8eEBUlrd%8l=)?(Z({haYos4O+W29{HA2gb^!aS?xW=RgSS%~>%nLa)l z^Pgl)b1~*WYcvNP=KpA<6Ih4O$X}$_fOYt<(ktMD@;B*qz>55Lt^JZS_?Ef^dix&~ zkzI?;@=xhsk1g|x^w(gy&q@Cx`T}ul=1~DoaH~ac;MT08;2XKszBhB6m`?K+-f7@E zcpJB7IDy>`U~4dgJGnL6DEKZ2UWa+z!#kapWca<j(*++C#Bm?TAw}OhRAaCl=Hezb zz1)0zad<sUbO^79F-8h-$0{HA=Q;Bvx0L%kQT^>&+&B_Pw@>*1H$Ti_7n*ItJ?O)H z!XES^$S`!-i5|BSJ<iQf<P&|8PuMYk3KO|iO*dW-iJswdSC0vw;kciFmYbjFV_63d z;7`##g)bm4HS0(%VK{d2WAsISsrf9ow*6n?<MLzu6+WJ7hH>##cy5O0*SOrMeuEP$ z-IBL)nhV>vwzp;5EGczxNZuv|F_Mq)Yi+Xr!9JuySS*Ci>7fjs%(tY6(^3Ktfa~fC zlxVFh0N+puej$v?<~gY)JXnzR#=@-ErHAysbZ4ed8|m%V2afe;1|5R~$LJz|crIlx zs<$mVXVLtMsJ|#j#}7d+!8xG?z`Sw1xhJs+<uej=n&+mQtRSO<6WT0C%ZY^><2)7$ z$9Oan0$(_k;8C;&8cjsPRnrvPQ`Bab>as{E9I>r|dIPn@9W1e}fs)893gvl_+@kpe z^P^mzzC>tCol8(&R#&)U7{cMcl}UR`iczXCmr*`iHZ^~+rhrShuz**%nA~N|?Li)) zp&@gSImvves?tN#HWMkJNpUDl=S_+LxB_M&w}kKXLSA8Mff-R9#bgb$1!IKLa+Wz5 zI8L<%h45M+CWYtxt*4PE*mionM>DsbKGVa^%cOMOcAK&21JLX7YS#_678+tL&WGUJ zNN%r8xsAbzT56%W(-zFPScYrcy(owmLI+uf?i|aI%`(*|P4mUI(+$x7jVXT7`A_kJ zp(?e$_5zrTCORpkoMN`Gnym`!C(LrGrgPf4KI06$==^8kRI@J{k4JeV(HNg@raA0X zQ%<>XBtPZ+mH}Q5O*uK=N~C-`+9cC!gpM|Ng|?8)@EQu&IX8sYo^D7cggIEQRs<@m z$el;-d~z2thZCohiUxQUl1fKC5=F*$9i$3ZE3|Cw&rcd%=teV)&`omEY{E&i2`9}a zoHXFLIXE7D6Tn<@dJM1bbsBBlY=-%xnww$%Xl9FLo7b`>y|~>adFC*8$e}NuBR35` zSCN-8mj>z9ON+>D{Zg$Sjen@lpP@-U!sh2KCvPZ*yO6=3m{}lP=C`ppKa`@Atc8;9 zOkeu=K6n}4-+MUYr`OiL^pT-VHwIL8kI1X@Hq)r@_`b}rucx;=v#VbsZSC)NBGsK_ z%v?jm14s5|j%3oq&O>%u_aFrjfaTwU`2aBFOWvBHk)b1*{_f2=C4ajI2f8vtXl8ch zwCy&bxvgO<KZ)AT^iGFef`;i)6w36aiSf0?N<{j7EmaPvf>O%yp(V*Z0M(oA&2-Z& zLVl}TGQUYxgt}pa=#_$gb1?ZTMFCe#U%)Oqj{<$e3#E`JttUgh!<phF_0uEkE~wjF z!0hb;-HpIY5+3a8z0yD^2@Xz!0l`pQ7Y7k$<~>xHFfq6OC`?jlqxRJ#hnh(4o(Ed+ z>Z>i~04@kV&^y%I*_WxDG)L;9u~>n*^BHXcJCWr);T{Ixw{_PQ9`a9j(}7eoz??vt zYnp{l>4!<hx3+C*t((54_|1?(Q>ajIPoYZPD-lsPnQmwIVER~Uplf8vMUx&oYEUN^ zx$Wd}kt?kb?{C}Dy0<hBYSl=mIn1%Cmrq|-0+M0H#*N+98bTe@no6~{>_4<`fAik` zi)J2LVsNCtAHT80_~*FlES@1ndSoc0Q`u{$heGSFhcioN0-&*^17HRk9XepBM}jPz zJ`pTxE~{d#JGYcbs1&8mbk8sa3(?OCCRbc{K{GeZeTrPsJKVE#z+UyHx*HUk8?wTY z9-W~#EMD`Zu{7h3C^56%51G}$Npm>26^cZXaZll@#Nhw}!O>*IQ`m@lIG%_#7!si& z@$q;=ID)ci$;KH?*m^8=;3R#g#X})9iksw#hES9@CL5zA#l_>%aJ&H-*og>_1Ee#z z)bm&(0_hsDfXPVAXWPA%_q~SZ<r~*}TH86_?qWcmY>X%AVA&8)Hu8o@W4LT`m+RpK z%JD^`p@bnP0SeJYqC6UFNb<%|JXuowW#rMuB$~oa#2R^HJQ8!|*CJ@8P&m#bjWKAj zL?RZ~U;>~VV<>6coCf5H1lrR@<G?6K34o0uGBF(DiFmR>m-96oX>3SNR4vWJ@kpf9 z+LJDH)aubdtSUwVeDUgvKr+x2XbIfRG_<8FW%t}3CiYslNSPD00IO~^r>lAeqYbR3 z$fb-9k`<`P1vLWCM;5)ln2wOkgjy%G6+&Anv{gb~Em)8g0f(ItCcFvM{Hr!PH^An1 zqtGrECC$RO*|~)|TbWQ(f?q25R#DQ1ih$W=s32I|E;LdH>_v6J&Rq<}1~qAI_X?q1 zWoZQNfbg`li=n8XHXyV&2r($cbtoo?GJ?W?3p{UwJnn?&J@7;!!FO6hf@mT4gG`is zm^rUg1Gx8QN=f;sP)g@1O65{TDP69xs?z$=N~Ls-qAXYoZwuCsR<f$)myCv#s-22b zwHJN|;CChbUIV{_@H+&**TJt7;FoughFDcF1Mq-<Wmdhqx99cbUPJC-a{I|WLhcZ` z!z1d^YmXf#{~O7D6S;3D_bueUmE2KAj}!87gM8d5AGgZK?ecMleB31;cgx4U^6@tL zxKBRbAs_e4$4U8kmwdciJ|2*d_sGZl<m3JFaY{ZOl#hqx;{)>XA^CWiu`RouPK7OB z)ugP3Lrl|V#UScHDT-V*H^Y-}Zc<v{*m5ymD=_?<;p8nG)teO<quwT^L}9K#ld?r& z?u}?<*5hwcbmnbEb-E?hXq?u^o0J7E7xSl@luH#>>S|K90`f8^JXMXAw>2wetiq6? zmD`#XFAE5nq{=Nr(TuIi=7;gZL$yc7)ojNb5eszrws1+aQqC6bK%=*dccO*c+J#LD z44fsJtjp4M%}NDZ=72X%V|6u<3~Id#?dI0g;jNMmZ<TBd9^O_23J-6-0*Z&K8zXS8 z+8_^a8^F8A(kgakhXzm0Jk-Hg^l&rVp|9xC&7lqhLJjkc9b!d~FrQ`}j^%&WdK~7* z)edJJ>v5W&S36t);xfObcDTXgHh-vgcvkdy;Dp$wm=~WO>+zbGkW3q7z5{YZRYohH zLq7jq%)E=CN}-YG%zKD*Qm2$4m-1~4?POuVL*{*~-IaBbzm7e43Qvls0RDb9M&fL+ z`dkJ`Q3-JEP0x|6T(yE%2Wr^I7^(#>JDn;+DY%cZvEZUqIm*dB!fZLYN7>kToq8%& zfe?=qN{&{w;(+o?NYVL<)c1>2ebPtzRfZZxi6LWto%~t<R`c5o85>*CYz$O#2_zn~ zv=5Il^9<|Y_0Xh0fW{kxrn8vskjowb{2k`<2ZoltQ2i2Au}(?NSF!#Nng5v&SFLbp zi-%5`e`F}NW*afo6$P8+#Hp=0Q?rJ7JzB=SL2a+e*5pmi8s=@PEZA)*IoMG%)>C8N zNlIC<CBMr6;%1V;3Mn^h=B--C!m*x({>$;k$32=<ee5DeUx$DB-&l{|e4FOK4`WYi zs7b0`O2WNU>(J|A_`I6}Ni?YzDdwrA5cz=Se;ryUd@b@5w6W~6=YyNfJGF7kG+|g# zf)|;0S?|ohgt&!-qi%dU<AiF>C(fPI(&x^>|F@ny_X)I*O2Tf~%nx9#K8TigKP<~r zpRNBC(d0iu@268M*edg5<X@3m3I4}4Y)=$Lw2W?HYo9!ddXdd1w2oEnt0|ssTdnr2 zGC!_$sO@V~Yj7HULTg`@UDY1U2D58XKX7V2)cBJWm<lP<-0M?XdpH$_!Sq=yqT7Im zzY0qDWh~)WwRU6mb6MkARL5taIzIF3T6?5D+8)hDv#}K`PH&6yR0PWSO)BrvviX4V zTe4ooKyd*2Hp%H}&<K}94&TQd#;7nS>=BJG*~AH30<Aqse5NF_8Ig5*Mi#vRO8Wz? zL!)XU#DlO@Jden|h`bMw{{)f$ERWokLw>RlyOz}?_6TwLsI{<h%lt5i5xfyW9vq=T z4Ze|dqxt{k+RuEE#04?WHIV0TFwfs<*2;mlLw~Pz82E~F=D|943f8VaU=knB>L?^R zhe@vIh>#@I%oF5KZ2;sq@D5QA%iN8;ePe1P1l&ZDgs3;|T1fhK4oUCl){^*6j@^O} zZ1hd$yLdt8Jiuk=EQSo;!)527M}oeW7j)4no*$FQ*nNo0F?kWheGv06#WDO8j^RhK z0FQH2fu83I<Km!5fxCscLOsDT2;1N>TZ^)6pGS_Cp;gjPa9l&6xnNZ=KgDS<V}Lc7 zKh5)l`AKRTe9(9{pW?Y8{TW^~q(8^ykfxVs?dJP37QYNzz5z=AH7xx%c!wXF&u@N{ zTOW{baq9!}ZEk%)zQfxuPF;+eok`@+{%-s`m+R8MbMvPhmJPYAJYvfZqXN77N93se zIhUWWUjSU;@`LQtUn0^9Tn;w^(w8ixFLAWLY7d0pVI#nI3EJTI97a8QHS-TvCC&fj zmPnyRz+BV52QSNo+IMGnlS2f|Eja?_?Ro(n-_}q%w7w0`eL33wMkPE8eLa_QBc+5> zmlWX0g>Rtn^-~3Ikcym;x<lub-r>yQ@Z3|UySq{8EYYZJ@*mOOqUVjHdDwAeFq6%| zG2=WE=d|7?&N~fp6&&`_&N0x}P3J~Of94o@;&aD{ttM~Scb`Yu<w?J}uP<@FX=Ihp zBda01na-nchX+VUnA8+jJ!Lv_{cSUuAF7xtp`|`-MuJ0l78Xnn<w1MYOGAQ<kw$kx zfADxX8S)f%Igf>7F=uYn!3n>y!Bg0-JQ0p0ow+9Ci9{kQ?2#UcMk0A#%RCwnMVz^g z<nd%QDy)X%$xx)Bq`3Mzl~vLRiKy+*M@pIjQ6%T*XqfBrs*7bJyhyJHSYW=RIuO-R zEovF*Ef#dX4mjsAvZF(%W^Fm0npX);+Rj;zR&#jF8B@Ksr9?QU8>6s0)tGBkcfx~t zkYnU@gX105Icl8HN^jLX^rx5j{EAwJiYv-T0a{}fkV@f|uufHxPI6CyBGsh@%2Vsf zT}ke0a)acqBR52DB(5eJl8xlw!2EFF(%mkD>@o_x2+kZR{HZ!od$Q)jJLA^<aSv)z zHoPbx3WtB#>N<RQs)KJ1^DsZ&4tKdx_c`axx>I54K3~;din`DJ)_Qz{XA(oHh`h6Y z|FKM_e+nLxCY2d0N;)_lX=uX~X)lED)HWBs)4`%5Y@DJ9c~+FCKa=U+KOhA!oQH-o znQM?t*K|G=nyP_{xI#tj3w;=&+s-S4nfMFz6|#90MYP6?&MS|Jyc3HFCCOru^FxJ6 zETUfYyi&?EHq9<}o@pr&$36_7S4vD#z(Xu#O%T=Hk?HTIbfNP?i$wT*0-Zn{eHL|F zvLWTS7XYQl=71T8d;3#IhVY|Isaz6$F{8)5|BBYuosw};I-CQTj_Ko(;Fs^-(!9Ub zDPM>;kVbZAYNVf*+s)_K(G#p)5{!4CpPuql<U^6%kwIh}QXO}`>VZ#^cm%XB*K|Xc z>|7ChCv~26u%zB5w%~^ILQ_=fDH&mXw8mH(0^PRc+|GexMVx@-tI4&szk4nsb8U0t zW)$UmaO%}Ff7c@vYeaH-$YGBl*ef7^ArwvE6|6{<hZ~~d$|*aKHzZ?Wcfrs>C3y)R zPQ+qJz=ustLkRXQ@kZXzkWAp^t+*>+V?7*>C&N72&<H^BaA;coMEMkTn7|a7(Uzpv z7;ki0#Q&v%HGz%uSm3pRLn?EuLkho26n@Q(w0*6_BJ8VWMBA52+N&%(f9gV^E)v>e zH1)@qp?N<oDA)w^ez0|k3N?nd{frGl-6XV&ki4%op;bS1hY-8alAm^ka2yo8-Fc7+ zXNONx+PP~KwnPr!s7G<b@m~bsHxGW*3KQ-Hqh*R%qUaTzbGJKktBOQnvR$T#H~>^O zj3$`ijiYE?`jSz)I8)ZFZr;+;N^XkWOUZ2`cN@8vk-MGTo#gH&cMrMy$lXuw<>Ve9 z_eyeKL+(}NzK*S4;}i<>yE^f1o8ASx8?}b$zS=@0?Q$<l$LU%V-biIeJ#Kcy3fu}g z)F#E@g00U=G~nhcL6dLpDkLy_j3%W*Vcu0pi7xS=^qtR#dnG^7iR*|?T*6i(ow(G8 z>NSk1=){It4#(GZl1{u1@B4J9E8sZXVv&hMr^niu8K#Ro0K5_)4oNK<hs^ZpF<m#i zkPIO&J$IvbEUlZFOG&l7A(jFB8%~GJAqj+}*kSZ$ou|3$)K>FoowAj5a2R4WfZl^d z(zmhGt!T9E?Mx;@;>|nAPqy6dCowKN#RHh)J&*#eyS=X<#rtIn3_c}op+SncML{+n zh7@R1>Z1iIJ|<IO@T2TBk{M1y^&VqVbC*o~q;<{jNoIb=O6rHCpC$iT%Ewmu@oxPy ztV0`v*83bLc3{qJkoey)=kKx(e?9C_zsK53v!ycU?~^}O204#eSj(j;IV?~)(&Si& zQQKpfKSqR3Lm1+VNGQ68WOgdLjI*pxxko+AmNRtgRdiQq=&t1GuF~&U&68?-#n|{6 zysEXWLdRt0yVOnt6(nT?Wd3cQy2^aF9W*}|^ne{yoeO#&5u9twsi`p<-qJPZgDTSU z>XZ`f>4z{J>3}{Yap4QJDU6N}gLf-l*|z%dqe#JiL~UP?T>vRjUEX7A`$9?ZN-bif ze(edB?rTFg)If?)5OF)9d_qNAWQ)gAiy4|B!@~drkWv8ofhvdT4^Rmm(l0SBl4@SI zBH+02XUJxZ(Eqn8+xIUj5<O|0{#9+S&DJ6<8`}RBwS8G?8F<dAq{a+p@e1osTM((` zq4u@ewW0Pk*)`;lt+AffIl|B)F*RW*e;7Q_n>l7Hg1K1PIClzBF$(yAZJl^PFNRn@ zbMyrI(e4XF2A^iw;@IC$M4J1U%JakjE`IyWkh(CeLj!}P@M^+YpYMb4{|(eo%xxEj z#<IXpcCOrQ7$p5f?z_MuS_1t;_QA_K@9nxUtd<#NG)ylyk~=R9U#7np-3)ZUwhPOt zfcDgSVVDLpSvYj{teXYPg!h@raf@a~CagSX+&pibJ7sRtYC|--hFCJmacIMqwjp8> z19>D8kChb9P#%rOl10?KWF(2A49SS6a7@FlHy$aSG-h}r6pQ;Oc0Er-Vz`+OH#qFE zi$uZ(--Oa$5S1?35JM`RJFw8P2+jSd6-1>o=n9Mn?fRht>vHD;h8igNa=}*!zDn>l zsC9yeNZ&+Us7Ys1EwO2JiV9m>O?8Y4*x!PWd%>rdD1fze)URk2u!*WvxF+ClzD=_8 z2dd^NMm2mUYKTDRtyPySTUtkMJ-I8%T}^I~+_mJcCpS!Pl-wA(i3YWC<AzP-zX<j= za31iuow&zTTzE@@xshb2dQdP!^Wxr=dq`hf2@>%P9}@0_pLVOR&1i+V6t|%+D4ds- zA+gTw$rJ0md1Bq#_HrcFm091&fkGjO!OVKR07|;ZQGUSwG}cwx>V1l$FNE+GndMtM znAupA7Yuq|Q9xaY#*_munq5BJ+vk8H(#2)J9MYHf_r76-3|&Zre=M_X%1RX1xU#!Y z-_rg8c?e!Kb;@BYdM-!h$SkvcFmrHXeeE-`!_J3C!{JEo_+JEWsgy$@5N9sX`i9JS z7M)4^S!o;g8rl;)nz8JOHAEWhldCH*KTrcF*TsP)Fe*zefeKD1SIt8<#C&umtxD+C z!dT#}MzIRvSR|aa!nu@7ZHFbQH2bG3TA5m2SrH(29=Xd<gCU&Ym@`c#IPrw#pc9rx ziVB&EhQEYkvh0zjIZIIXX#MHX6|0}4Q`UNT4db1ecn9s4Pp3G86Iap?xt|V=g|1Ro zKfgM(<}h36Kox~7P`6q)P>#ak#EtD$uvtDR(~$u`G~p$pv>B~xCo^9m$)qGZUjD2< zRH&$s?BC{<75>4Qn{>9_nDx>!%--}dTQ6OXeF=a2mK2zn*)S#Og-phaXPk_7z8j~^ z7exz6#3(sy5vQ)>^wx6<^}*$|3g+~}dFl$3_=RWBya3wXXG<n)U@#APD6jA@I6KNb zaPh<`o>Wp#T}5Fo>F#dwubw>*8#FLg`Z<*{4_sA<L$cfGb?xj(3ZUmtgQb}`pmWF5 zEO!OfQ#JqQ<Jixkxp#p~V6DXSr$R|w%k^`|C>h(Zoh45Z%AxZ_Sp-jKCH=?%jKA6m z<&@)P=<<Fvqlo~CITd$OGRbT%P&2AiaM2L7H*Iqmf)mdsGk)kUp7BFx=X7wowZ#7D zx!NcKLraSL7<RMKu(x;|MZ?jAx2WTIG#*K~@<ShQpeHM)YAhaYjK;miT@+1*8wz!V z!mc_T&F^z#;YdQV$P0?WBaP990)?SOw|3Yi;E{N=p>oPvPo<uXha-(4Cw*z10S|m_ zD*|ih!Do*%Z3W!|7bqvp-9q>JN`&tBl?kKLSLK`UtMM)L)e3#7Z<()N=qr7zg&q`Q zoo~I+!_FiloogF}zDej83%yC`n}xnb=qaJM3H>sm(}iw*w{sV6n2`po;YL~b6xeZ> zkCrm0bKYn`bvi}$XaL_9j0PZP5ytqIj4o!vSqJfDPO)M%u$)y?t{Gj$s+^%wy1VU* zsL^;VL2e_t8_B(h+)K!9Cbxy$R&p;TcPqKu$lXrv&OHh}_p-X>P6wOEJo9l=%&JL0 zS`BWEwFRW;cp+}9^+j|?c`<IHMJ*D59a1y0a|!83TZ#;E_cCOEduXfSqpgOQ)k(!@ zC53X%{z7Ul*K6cnqiCNICBf!c-kh*uZi7w4cCr}EvwT#~8uE@U*Ox-%UQA!A>^1iz z#OmiQ7{~ZnGn5qRwKn8c2pLeWf(=O_q$>xhbIx@n8h1*_PE@AcX?7F%3l_Nh%-DFd z>d>~LAq5Nb>m~f_&AuYco*ZUjLk`N)4w}P7klq}m!-jk#LM~R`Xui1!vLpxTL`bBE zpI|ck6U@Ak6#@Hmz%HyB?z(QbfNy6=f4!ZVce0}Dl~VOqIW+Sw>?XIJ$$gY=m2w|L z@^)b+<+)5eHt+*hCJ!+4J;lI*9I!VpYreF-zI}Oic?cbpHLuI<_`b`Ek6CRyuH3O* z&U<^0SD}PvKNA(CgT>O(ZP^G{d#xK&sDU*PvVMv%GWpn>?(2PHrn~UMnf2*hJQbP( zfB6*g?gErEej7rwAA*W2DDNUgletrmyC7aei(mmb{su~6W(pz;(ES}14j^UDGDZdm zR1~2Z)xhthle_9sVafE9Th4R^)faG7ji`_%86D3ROr<jfll&C><Xqlv;K^CHx^&w# z)a5)~Fn9T|RY}gBw46^54bU=?(3Fo|KYi4ObQX5a+tYG;V1Kq-UmdQ_OcokG)jKG$ zZGM$l1_rJ<oF2Sp3JPzD1lepsG{3qGy5yYzx@jWE$HlJ>5$dEyEE5S?29eH(E_!uX zVKQ_#_aDFH)u*N&xcJql$KgPf>P@c>2W)&YgObw!DocS|rJb2;U+oaW<hutmM|%fG zhF)bI<aW(r4@P4ko5kxm_Kn#MuMR6-_rc?2{S3(q{4<l5tEWfeup4m3MK(Eix^mG{ zBMnT3@rDIX0Uk|+BZk%KjfrI3kd3E@qv1q@yI@stY=+T=#9>bt;j-w%kw_@+%q>Jb zoNP=AYZmZ$G9335_9yB>4xyN6GUUt+cAkvKB6R&q5978`SaTds0Li2yH>Mk-(S|~H zOaaB22+ZYq0&`Bhorl9oA}x!+BFADPEmt9F8Sh@WkhILo1*>r`WP;aPs*L$+!GktY zIVO0O;7P$71>Y$6MMAyAd5P-J(U?(Jk7|%54~4toi=vf`dcpOP>jziY%0^2ShRQc8 z0WP3ux@s8J@)||ey!nc<fWBA$CF;_;Wy{H3LGCJY*Q{mAI`XY2H%xAn+&H-javR9q zK<*}TFK$wsH?M0U{}#wxXQIUGz|FDZ+>DfG7jB(ZH*S$Nq&dR|*Si_1Z3fYvg^zR# z`!~bKky~WvGQ1DrE=T!4?y10SINpu*u}a)Km-zCOXkY$&y0|@n-_uI#d-@!o@_SnR zaj-W_YZp$KCdFVEKnybuWpV83htSfs<B&DvlnrzKfESkpRrA!nDRte78Oysq)wXxv z{@K5cfNJ}7^)sW|-YhWzY|C}4W`=FKeDB`Yo%{1DxQs&unz*J<R`hCpZfB_>;l+$r z&kT1ps<N<%F0(2a+A!y}Zc?uhp`jre(i+1_j%~)n@pywy9f7Mu!rBlcF+y1F1ZVyz zBuJn(qId%w_#;tIVR=zgQA|rVh7CHodjbwrHl+D&Me1IAk4jq9`8;A;Ey1f>$hs<n zCC2Gx4pb$sXm0rV;0J4jA}a8%6&#@*cs<;qxaX_Y3u+dUyNKLca+i`@M{Yg2E680* z?kaNEkQ;;zvr|WP(WKW)cyZ!8XnH#pA(etFyh%gd;Lg1qHqoxV8mwG!EOw*q9?xDK z_R4w_*U)N^U>a_lT@E@TFPx-1eEwNxsMTljPQ7ifaoNjGb158$>+n={lJ4Uy?@&(% zU7J~2HR~-KLaGf4hifw|1tbwP(!oy$O8}IcQ4FPXv<12eKrg0yL<D+ChkiQf2T<K? z!cdYyg%xc9fNqu7infAx8y?v&>oCT84AMNNOOr-Uymw`$@m36;lQGZ@fpod5?i?P7 z?bDyrtZet8>{tjLJpE}orGnpk&6G<USvQz`7lkWy5B?Q-8U9CFY%(0GbqPm98z#r( z7Rrm~ykJd<UM>f;6Y!w37rxU&c!7jS=I61l?s_$)Uq5}6wc1QrC(9-$z{SIl2No+K z&CupoRhq&%egVYK!u4p%a?lnm(Fn^5xDCl9y0LiC5~C+W$yjp!wAHAdz8Vw0B}*o( z!;=%*Us3zh=s%L~x+Z;fW^ZO_U}Uf>GgM;xHjm&9XAfW;wBy_bxJ#Rlpx!OIioRvw zaJskO+VTz&J=AM`WMxz-RJRy!xs7z!$ndW0X4I=SRAGl%Hn?Tq*nyY#U(-Kutl!on zGCvR8H2_(44L5gpQ`hCuKsj~}45twJJUh^CDm%j4H<0em)!sdjFOHK;`{4J&(_2s= z-$-#mN_!_3z|&ihvA=UdhRIp`D0khwsAy8#6^aJ<GR0?&8JWSc*|VD*B!#gGNm2Io zm$kE_E1(=%-&<GTKv%ktTF<)DGNtTWaCY4JJ9V&`gXq<BNMdnR+yi~xThl{0D2Ckq znPax!H{pg#UU;IkW!LuYtu6aux*TfR+Pw49)>2YXNcUW3Fj%&*NFCS2li?(x3n@QR zES_NL%F1WgJ=dB7D&L{vyFzmq0yA7MWZBB%SgSzij};Z29m2~^bEu1bbC9kIvLQFV z&%Gt=%Yj52DH3s<L*j|7vC?$zf)ptVlq#fVK{DyaRYeaCnBAHF?wrx7p~&orCf?DS zHyOq{?$4oS(_D6(;mTj(6|=d_{XDeK-Yx8vE61wYQ(J3Hj&|ePiycl^eOz)SDY_Np zA`OMT!z06)(gH1q8(?L=_V_H<`KF?I=Y?0-%wE<UtP`gljV%GKhhcdE**W0J!RF;| z=g?9X?3y`4HV?C2x>zV>$|NHk#v*zAbV54RwsTACm4|lh+R{pd7)<8FQ&d63gj<Lj ztjFu-+*XuVkv#Fbxr~WCcwU@%&0G@#tmK?)gPCCirZ((YX4idb3o6f{CoD*p96~fc z?YmvGE96`~7yJ?#vcl~xM_pK|{oI52ob+);pW{e+a0vE8meE1`jvVW^#55b{uwrA` z4jsV>w4oqFWToda51l8Tg0$YA^iaMM=ZU8v?Z)#<*`K*~7#oNNVB*!KO`d-;T0l9h zXu})MFER9IpIucVcjhHRM}{&j=_A7<gLqH7cVMu0__!a!uE?aXfps=Bh_+WFb6ORO z_8{@O&Zpv?3vF@M&*^KJ-`n`1BPS_woCU$eB<^FqeSQ0-y3{#*mI|PC{6r0v$W8V3 z0eOIN*agJfC7EuyM+C1OufZHEY2Nvof|bx1q06W~SUynYt-T_a7w1e<u(G&-|ChKo zfsd-X9>?E#>%5uC%w(G^Yykox5MZ`U5>QMC3<Pmyb74X!$qb2RYZ6fU?GkareXIKd z*1DqLu2>hewzjoZ5(I2(t5#cEt>tNJ7j4b&oO|D!B?%Dm^ZEbt$=vnabI;w*J@>wQ z@0k;)z+SbN)=zP{dqZz)?l2kjcx1m)-J(VE+32vfn^aVfedS<s{oa*bX`i{|j;<D* z(AoC?ScgLT<yvb}u=SW52Q^<UecHl3`ME}H>R52pSXd!k-5Da4E3@disrjQf($m#J zVL3hV?)Dg8ANDq|9EwfpEaQ>N#r)aYQx~sTyi(=rhqY4|pS--TezD50NYDQYYq=3C zhfy+9`I^DbEJmJ_>yI?MB=;=t?CU|k5bx-gn){F?u)v1SM3=*S<&)GJ!&&C*1uF0A zOowW&CFs@hJFp~NyR7=*H6bHPzm*YNxs1Jxhpt4idqXx|A#abbN?~5`l`&_uw2Wp< z>FYW>-YK_X>9dCkoTa{;?yl|)q%d`Pa{cL{lA3tf;MC0SlSL7@*zWG4Q)Eu;MM)1f zdIUScQmL<_+iA+EtN=A*FTgO`JZTlon%2epsl{-ZK5AOAF8}IdKeIiL8GFK!wPgxx zy!RbDc1)uTI-4mRvj+>9Bg^WHtQL;>D%gh)-{4ncA#A}d2mN6mU8AXFM+4<xppq`5 zhtV4fl7fPuk8YEP>0`n0a|7u|R;*(ziXR2YY9&A~%F30&>Y#$iLN!Vt;HwTP!9Y!Q zrCc2h29-diKO7Dmdbc&k3(?%u*4@X&g1JmAaHI)9ioYfp4l7uKs!;M<?TEWLia$_Y z9agXup@7X2WR!p};14GcJ}Q2{zcL_)gQT$*X{}L$H9>#Ck;Z0`;_Bex-xtQhBaGq? z`9nUrrYaCp0yTbrm0VrvM}*atH6gjOvIcYTg=;GHq;Q0^1gio{Am|HLV$D^B{iF^z zP&MLa5>grFM5St=s<N_5352VIK15SfiMeA-`JCy(6Gnvnq4cv%a#gUViXIUTVf*;2 zs%sp*={T!HK3`UbxQHlxp=!B091O^z>KeaX>8lB0#gppZU?@;iIr4H95*zaSur?9K zdL0SN<?~g^H8sJ^`&kO96b@tAYXUyGs+#IBTph;htEvw9>4gNWG`5}%e3e~pjyq@J z;>by-E?$?my7SaURxUnuU20XAKVr|7q=Vt1T*Gt0@I6#BwqO{v6+Ijarz)#0Jtxb@ zb8t6hVs^J>Vzi(+rlnuKN=DyWEj|=@sZUu)UrM~qnev%Ag*(knZq`xg!G7}*ljDzq zutP;~E$yqR)bo!5t#$IrB9#rh1xJA>?JQRMK@t9OHSJ6Yb*<x$0)P5pvV}*JKJ!Rh z?NOk}IAN!o=UPgAI!Q@PR&a1YE;n?<dwXN+<7#^|yOMeo`I$L5l80k3uU;#!V~!Fb zLu9uO(v<q<A0-}2U2_y^`SL<1>68tNqsiYo6Ls8CrnOEW*|;218q`cVh6y1=)zOrU z<521BQmM~8W@eot(3(0}t0nK2*gIJ|8ZuQ!kr!p6napnS*I;ug=21903quaamZPV9 zolHi>oYFgzg_X48q*KjjrM^yaQY=;pg+e&}hk^lrHJVj8S%!i^Kba_GVXQCULw8M} z65Ti-qdOc5XP!?B`vN$-hERqIW*l=<Le-U3LF;T>*zXU96_nVj5mh)4sIrc%DWNJ7 znouYR1yTpxl*(X$WQ%Z>FQ9~LLcXAR;7+LwS5_h&RW(7%)Q|2k$~58R2|xuUsBkEG z22QC&iK&_&l?zj;tdn*MN+3QgbQq;3%%Q5vKiX+HB@_q;s}FM#JAi~wP{3yMie86O zR0zs=?__VOcV6Lm+amArwv)W)6gY~<7jG)I+rDM{Kidu9y$!rS2k#xC?Osv&t62C~ zQFTa~!|C#5=j7()J48uVGzWRSAVU!-?}8>Ony6|bzuLlXkcuwz`l!qvJJKd;wh~R} zPclx|wAq?gMlT&{Gc>JS(`IVgEKRG>q_Cz{YxWv?@<={LlaAA*I?b_Alj=2Ry{1L9 ztYxIUKs!Nmov67^*2Gij1tj|lO<S!=r)k<+O>WerW=)D~T0+xWHRUW#Zr7aMq`5%a zpt(0{(z)Y6bADTMHfzp)(4@`i!=H2!*JU7GioeV7cR7Y%#q}CEuR;4d(7e~9`$o{* zH>3X+&~E`zD<EA5+d#h)-O>-xeHYhzAl;3>Z)+Y+^K1ppa}WCN#UJMAku~ov=sa1I zPSm6yq3b!UK+5(f`1>jTUIDG}XPDhD@b@ZcS--@vU*YdH{JoC97eLeYp)G6LZ_xQ$ z{Jn+0-{J4~82mQ=-oYQXi}VLf{yy4&!{0&Bn?&6pLOV3+6NLU0^j+xnyom1qVWwXq z)DUQLKZ2Zxzs(req<OADqR&SsseHHqgSX)C68v>)QkQ<4DCx&Y`t72u72k(}SXae6 z(S8Jf-J1BMs1^Shoj*hS7x;S}-2-Uv!`}gstBd$O+VA4;eXP!pL~Y#1`1>3FCTZhl zYvT^0%fR0!`1=%pf5+b!`1>#Z{)fLWMNLt(as84e--h1Jk|rryUcDw=fUXPicM<+B zmbAjl@plEfuaq=J)06?wl&jEtEqZUo-)-pLhQB+}{R8}M#b2MM+=bQw(8k@3QTL&H z7uM(l=-w{r?PxuTzaQc61^m5)zn|g{!KGKx{uTaS$KQaYJ0<-rMK4yC3xX)ff~=^j z-jAjxsPt^6C<sNB0tgf4Zvm&XN-UBm)%G8|Ku{M8!h|IP6irywFAKBRplkM-{ih3a zqv)C&>t6?cxuw5JC|ZvQ+61BUY(XxP@$Z|~^9M~Gon3;zR}f`Y{SMQG*C)!ddLHyQ zX;37ek2dC}UcmgSd?nf-t5-w6CKO!@g3xdi8k24ZIt6tfY~BiDksv%k4jKHygX92J zeF))UlDdN|LEXtL;SsoCD=0;iX8TqDQ?Ny{+W~)%!ej6_JONLFL{U$}7O(=rKkFIj z--Y(1XQBU5vY#hgQX5qN9t3naUVz>3A_mBl{BN+71271C0d#dgWvbeL4gCiIib~&O zh>99MgZ@8)Q1ovQu$Zz))%zd#9Fm?d&;x$|h2myJTO|7%E)}<k4hL4;i*S)B6kR3? zQW0i<g_xE-1zckWyp91_RifF7{}HjKlp%4mB0LG_NrE7skA{5<8vaYjxKt9b(XN&@ z4`9CXb*6nivy0>#By3IpO$2x|CB9t}r6Rkk{!qG<9WOorTctjs=pIB;RC>R(c^8$$ z|DZ&)$Vdp%(CHDgb93^Tna@lwGYd;Vn8IAwiOl*wx31^b4cxksTQ_m*W^UcWty{UZ zm0R1mbtkuez^%Ku^+Rsm&8>U5bw9Tr5VwmUJjgu{acc*+9_H4g+<J^#k8|q@ZapPF zEy6DG8HVH=Ea*o(=2>n%$F1iXz)I$Rfd}p8){ESFiCZso>nGg$DYstX*3Y^1Dz|>g ztzU8LHE!+U)*!d`a_bFl?dR5;-1;@Qe#5Qba_cQ_{f=92bL$;${ehL>4Ca212mO&- zf8y2$-1;-O{=%&f&3cu1y>e?Ow;tx!BiwqFTaR(;ac(`qt*5y4v_vHA;+|)?^(?oZ z<JR-s+Rd#Ox%Fdiz09qjaO)Lr{ft{b=hiQ{^-FHO#;rZv8syeqZoMI`5VyjkuuIy< z1NNH%4~hqPz?+h!+ewF~%(dVOz;t+m#8u<k=p_nCxd(KIbS+#5-v_07alPOG*Sb1k z8n^=t%+p&ZgdsatC(MAHV4W}*a;Me`69mX>suN~H{`C+OCV}?`s1u5zV0E34Cl(g< zqb~@>H)7mm7<Utpo|^F`wL*gc6K)35gEO(GPN;-Qx1eVhl+-O0oYLeeQ;(|?3ZS&2 zR+ufow7xoF4on}vP_Rj5lV_ZdkRd4VW=Lk%)eBiL>sG`+1uDK-CzQkNnRUW+nB%Jx z3SsVTKq`8Cw`2SS@N0EK1q2%Fgi;7DsS}DIbO%OEh03i!hlImt)(QDgRbD4lLG?C_ znFuv^qE!O(#@7ov%rCAL#tCptC##QRe}IX`!GfwfAppnS1*C|lb|NX|srw;%ys&Wb zLcuOgu3vOFkXE6^->4JHAToKOpoxV`PN);c!_w(>!fa@mQ!C6BU|DFKJ{}qNyu3FM zele_kn77iZXJDbQKwQ0M9|lL@v`5ftfYYA>rjGTD{TO?Uxcbaz(LPRGz4ib`*Fp4Y z^v;LI$I!P7*1d^VJ$&QW7<jC>I`$~A5;Q%5!Aqg}H)t(_mfxba5aMs4wFDBsL#r0n zzlNZG0b1$ShqG49!r4;EtCc4SpcdBJ(9&{hCA4hWr${pB`L)U<rXNW~%TZ9Pq2+W$ zVA4c@tZMxMI7O;~<L@PX%c2C!w*y0U!hH}CRY`&q9|VTrq#eMLp8OCnOsDJwmf5NI zL#;$KtbpSsosMU>g%$~-c-Gm<BJ9ZR9m@qe%`ENlab?YlTKkD)?8v4g(Xy~3o6c>M zsfuK3(vEE7v26A%<>T3V23x^+B74u?R?&Deo76Q+##7n+rn92vBA(rd$9O3_3JI_t zOp!6SWrTf#;BItOOl)-=gh>!<WRIs*Orh6P67Gmcj5!ZNnV2{TGo-T*Lb=?15N0YH z4#F(;TL+;+`(89Vk}Z^zl4l7qc4B6v^2oRX8god;bH$uUF2r(-tDrHD`F-TiGp>Qg zeCGF)Ki{|x8ohJ_n1TWn<TY-9#scOKlE1*X2^tHTKScgQ<7V~-CRcec8NX$BgR6w! z0(yQ2bbkEz&{!NDw`bWnXe~D0hCKtV<BfONGnmLT)DndIm?b(^_!tht0{9q=gAkn< znJAPS27B?6)C<)hoTXl<BvHb(Azf&`i@4Odm_6CZLoZ?O#FVAR6(W1n)5i4^NyeRo z;4U#bH8GX0SgR-{zD9)7tB+;-%MMT@-!Ibpj|ef4`;Z_Ugr)G1cn})I9ip+5g>TF$ zCzU45O;%~5G%?M1R3vpOkutHIo`J-u#1zuyv)_19Y@9mKI@NgEOgx)Zm+-_tvJyYb z5|@<<(<3vKa^tx)1P6@W;vgwiL6N0=FMr$gMKM|)DJNwoVsvJ7R>jI?vmi1P%8i%l zMM%3<+Bd1RzY$51%2K-PjZIXJ!SAp~Cr=mN5sg2HjTHl}6~=oU&lwh;_xbacCZ2y2 zp3g<n!$LQ^Ej;~9XVW^NUotjJjdKQC=NRWp49_<#JQpy{Ii&Yw945GyC1?_^l}Ndg zZy@4>(xL4)ET#KT*b^oq$nB&lXR8zq%-oj<FnvS;rjKYFA@UGZ9YWnpQ1>HLB2X&0 zs5Q2mNnT7PdC-i{qZ->GMT3zb*4QJ2D4PakHX?eG5IrqLLwlBmXgKC53Tf<-m|i3z z^(9={bpV;2BAH#d5FzDA*uU88rID~)ZoEP`b1j^|B%H5F(W>c@D#Dp3Bh}|%#9I=7 z3*jxq(+6)!#_y$pQh_PVAzd;9q%G#*jXC+GOGb)TM{5!_(VRriKxCe{tQsWJNW?lm z-QReRxd#&Sml}VRc+aPILO(DmiyR{^H9nL|F#CKNi}WMv<Ob$nDjWbAK<2+F>6e>j zDw~0HXh7z7#m^+;Q)$qohAE#yJU3XR4W^Oy_cYQ5Ez&-d273<}|1=3a4#EB{4f3Js z!Zn!jxx`0g?*Y#g8dKkszLbnF8TepgJ`rRLF%YcLV*ycZmRUjeMi$V87cX_WNmzs} zGH;eGvT>;#J#HYWVCOQ@j#D7xc)o~=dbP}oN}yNER7x_xD_$=f*UE=4<xXD8>*P^N zdA&@fyiray!_Bf)F5^~<;#wr<HX^4`Ru%Ock=PC+XFpO@Dm2UZQ;4!Vk){g)?vjnW z<!D`^Zez{`R5urccrV6m0cpEz+{<EETSw<6<|Y<K>LtwVK6!8HP@aku+%K07Ej6|e z16xF3Sg8-ndwchL#*?nJ9kN;519=K*6q5&+V)Wqd-u;73viEmGL&l?o%CiC^AD5$x z6N^i7mk>Qyfc&IPYM5Aa_BJcVQ&<EG?XFC;&k)+DOteZqp?!`~_#&?!Y+Y>6B5J6M zsi9usHG_Tf01b^-sF~n3+4#A9sG;$yJj&2`O&;joZ@g}{ObP2^;(%-n$mTFX{Kg<7 zVJ~&C{l**2GZ={wJ;lUWdXb#pFmkv?zbim^OE%t;DevBWr2fg&U-h<`ji0i?27FgG z-o;3`6YC_0>f}8+x@0i21o_{)^5BbD6Qx4o2SY<1>M?(2`9_u^EBc5!$v6};7*8`~ zdOo>f-$9g~g->PU?`AI9nCLU+jw}-}-oxGl=2(uW0OJdpR0xhI{&OZxk_t_d3QtXg z??NTIJh7Z%I02R#mne*1%w!y+JjyZ2kT{V)AAPBk42qm6EHy4yq9^T%oJ7?$L6%j= zAT`_V3OymWAIIVy0Jke~C>1)yILzpf;xN#Gv-nmJZdZ)07}E}<oa(V07vjDX{S=Zo zWpf7@KcsX+y&a-)AG)HaMki5RWD-P9g$*4zDJ#(x7$QYhzzwV#wiB4jf>fY%I~4v- z-5|YFcffq7PBL~<wjvG?Qn&Yr5?#sqOMW7s;m0ns61&V3N^~`WMONbsf666rHLP4E zt)c75r_p}Q>4J2IFcG_{<4;uJ-K@X|u)z0&xSJPPq5{jTz;PJt5Lu~r<It92w_?0B ztn4pml>HU6?2_^7C}o$8U-Gic$+Ev@m0f0Kmy7|$lTBscOJ#4C&BDvZAmuBWg@5A^ zg@03to=Jsgb$KQ-tlub0VD0zeR;&bhEp4`}5u{{I$Y%(XsOev)ns`6i^xFa6AHC_{ zSByUmEB>D|ivLlv=?{+D^v3X}|8#iMe>Qs4|I=!EVn+W~%9a{m@DSl)>hU-N%gIY) z`k{@7Z1)n9SjuQDseH;lPc_b085eqp1TY-z+j>0`DZ=c<aWR>|3laPh6Z{g@xJ)IE z5Q&obIfbULVvN7WjK4-Tu2Z9{8N_NDSyM?8CWu=Y1XkfK>OpuI;1<=mO{HnPRK>|8 zf)MvHh(|%V4<Q}{AnS1u$$A1LvYrI_KGoQvl8QsLP);#+s`Su$q!DGyhgIY{(})4j zL2OT0*q-3np5WM?P>o$IJtmH<lgf=}DAjb)EXNBh)h-ZTP>mNk9Ey8LWtj!>iiP(T z)%dvy@eP8QVL`lZLA<US113a_Aj)OCqW)DvkUy!6CGr^)e=3PC8aiwx{iV(NL3ja# zKOw=p0myn0M6zB2=`U#g7~~IC<1Z@bgE)(<MrKKEHqhTdIE@e0L7L1yG9f<W++6us zH9l6cU7J<UuaTMKM6DiFjf3hylgcC&%`j9pJ8n;EI$YeOMHa)xoNa{SWzarVjlZjW zMyEme4>j7<q_KIqd3vM?CuW<6lrH{LwWd^?@oxs7Qjm$BL<{qJO)p|V=q6iYek3k3 z#fmf$e4$1Yq!4yl0!Q`#R1Q)qAVKS~)xM-=*CMSr6Ah_NHY)DNYLmJf3)iF$Bqrxi z#QFIGhS<uvNlr{Ig`KR%jEgiJq?qUuZEr?AE=zLisj$1ic9~{eu0>1vLS|VhP|Fxs zXia*wEzy=ZD|WVVC3>2aSi5l*IpkP}akUnm*`%`-!gX2`T|S<vV25nOHs7jIw-^9n zt9B3u0m#}5;#SSLQ=@9Qfff5M4U1inC}73DTjTYJqCROVxL4cDb=2|^I@G(=xL-?( zN7$e1>0<OO1^ZzXGkjd*WAbs$cv2f7beQ7c)07|a(Y!<+6FMm0XSAqJ#_9na#Kw=b zJ;t+Iv@_9ZJf{sT(<ze*(r^0|am`mX>dHEb6$e0g70dJ{z+TPxl{P?nG9P0ysE0IZ zzJ^E#B0B95Y`=lG@gB;&Fj2@d-D}1pE@PiIm=Gz)+~X1KH|Ud0`bkMA`ncGHem8ZZ z)fj@54ko$?Gco12w85wk{kRZ|NygjgLu4`0c$ZKi{j-VwL6TrU(99A4foA+gGZ$Xd zNcX80?M`&xz?P*SYmMEjh1PE4APXFzj^}ZK;Mqh{(Lc55HwO|O1Bv#?H*v=Km*)99 z1%IxYYuPU}&mSn@OD)=C!u25Bkmh-nf;Zcuy=HJP2A^;9JWjzE*`j?I9O=Wpbg|8| zjlwRqMQ0L2D)(GN3l?o4arS=WGmUphOXY8r#3&xN!BYF%fMNgRVH+*Azm*tvo{fc_ z!^0$|9{55Yb}kQ-Q|f^grXE<aiQ~>08d9=`hDwKqDu;%a4-GXB4PlURg$;S>9Mz?$ zm#J8_*V!1CLm9Y%ug!?t5!*v9)U1{CZz6UlH|u51b_{Uf&q?er>md9QgzIbv;ZFe9 z+l=dN$k_H9H`o~CNwOwlRM^^UL>#RjfOs3i{~4s)ZN%&3JJ9+IC~u?nA*k=zjN5F) zB@Y-|ZNvc;PZbac{0Ou=5v0lX12q2%`dw&!4E85%#+|l-CI#6d(rEn9hRo?(T>b1l z%uQ4q4>BkI{txMBwv&WxJWOH#$D$vxm0_sy1k2DtHLDv>+x7rgK&ZbqITG^|-)_?L za3mYMY%JB2wk8L%E=QANFS4%vSd-7%nA=Hm>+?JjRUl!hXfj^1HR%-wG}$Y5A?>Rq zw#@vojaKc%5nr`6p`3+A;yato>N0+1qZ-@1*&IT~YeeXGZy^6<^1se%7ri+-CR>h9 zA_$UPz6YCQ-@%$|QjkccNg@8a`^zC?kk#paW3O4K5h~(7BttP*zWW&se6D!Y7VQW0 zew%)Sk$#ZM*<A6KZID73;d_%=P(6^^>9=jshGh)`^%>(GmW}3F$tJJAgX3MB@h%H< zdgf5pe?U}PV*cJHCslDCNmuXLnpEyT4_FrO+M1l0g|o>?S^ONcc*oYHVTjg*tYLEg zT^RB{CZckEU>hXf>#Cs%;UD1q&}MvO%bXChjKA8NviNwx3E^Y(4B|BKHyo!;S!^0G zXiUtNP{!Fz?B-v5OzgvszMpMbl=5L={KrO|Wn<0(%Iu#Ye1To@UjXOn)St!8y72`A zpk>j2ZH?U}$c#4YSoi~;OIdyF0_g(XxIiD+i<OT^jSF!`N}SC}%fmV|F4hNcU^<a6 z!5GZmGoP~h800H(TGM$GvX$>u`e3316L(NUvRb=Bw;G0mv6|jA7k$_3(dpRhrX$Q| zeedqx1AD1+bYdmmtPk=%%Ucm-kU`v`V^#P>Nz<ktg#UoB9m)P2V7rd>@{k^_if)F) zW{6ZF=new)3kaHb5WWCmCkNe0ppQ~qfEF-skSw)Lx5W1U0&LUcfYnQKJ7343DN~T# zp^#PDp_;<{iy&;%jUVWvGL`?*NY|t1L*#tG!EvAN2@ey=jR*9&h|2)BDYIR#^`W&> zuk|mx2*k+6fJJyrFI!52`;$7~a_Fbo7RjSAgJS+Jbed8UE(@N~iPYW>*|U&Z;8`=0 zRz)<HIuzqMM1x+1$z!zmeL*+ZISOkc!q6`7?v2ANDsemgr2I#*C0^1S36a=ZV!W)U zgtwpSmgo?v!}PCU`so`xz%v2kexY;Gk$TH7F?mUA326{F2K4DmjW_gY=gb3%&fU#2 za-3MFO~z90(|MoVPh>z&h(<g*jbG~-1ExbYenSu{>z7*q$INf_=u8S>qvdy)0h|$U zzW_VEx)}uU3zvYP$ik&S%eKov5F3QcL6BA93J`D}3CcD_{VDZ>_jKCfNEfL~n>E^v zdQYd;2C^;^#rJgMPiE;5=Rvqwl>W-bnEbI$vbFNLZv0gz=}<O4Hb+G{waG!2iiX5M z9@YORI3@__Q{6*?)W^vo!do@}Rjm5YaHN$Ev5mri@#JzTMAqXh|GADb!)jbAmPNja za<gjuS0Bvz50^aEFLh%mv))iR@3$j!>tLdXah`qeW=m6d6N<vynNMTB(xIJPx;o#! zmqTA*Ut(Nj=P?$T%)m&_*@AdkYg|dKaS8gGR1|41C5Ifl3Opwx(B&+-s~DYETJR(R zUuA-OW?{@Vc2-&fy3PXHh(O=xsM<ZWt#^~XY~z08R{J2^X1v{wj8bDwe<!`26QaGI z0Ji2m_B}r1K0Dt4raAHfdt-^YHH4j!?R;Yh3S}k6!<4d8!o}66#A2VdA9->0teq{c z$il@HS(l5_^LFYE@(Xt3dHW$3S1;Jv;%c`EvB_Lqy<|6Dvh&4N)LdM>Y-ekxpV*C; z?Wr}^PwY`2me>chIQpp_*EB<}DOj4H+07*m?;k(6Cl@%su=54ZOZM~y&MnxzUbBx} zy_{vPUiR3H0sHXP%b?v{y->64B@gC#gT?;%3TZoM+i%#hd$ShXXUEZiJz~GzT;v?E zCl@)trm7Fqx^_EN{X2F(2C4c-NP1S?zk~JiI>0-;?%%N+@0)e`1HLIM{Rv~P6y*=l zx=K|3Y^MrV|6(`(WFMe4rEGj)r&hr#`7?LmYS_+YgBn)%SBu(5cH<+gb<Gsv{)(kR zapr0+1bmD&iN0&N?=N;s0BDl)U%+ZTXpi<ZDY%~M!Ih?AkAAaBMb9@;V5u`J_aAoS zvk{g1Ppfjz!OHy?dIqu5{*Cqk*4ckjb@m0-SrzRTETN4U2ldv{eQXVKfx|f85v?j? zbKr%Jj2!kE7dZyFRFC*Cc9<&xV~YdPRnynj^|X@tSQK_S8t+BU(t0mWbAJ=zc}L@Y zQ2J%-edwJezUpYaABKN|y&t0viqam(K`=ylA6lP?%5Tv6R8-$a>+hoWz9aeoL>>V4 zDYk|_#rDzOE>drN>S){!(fc8BKUDlfq;IF&!T5)x@j)x_GZy$D82@xMK4b;{lLbBm z#=jknJFLKevA`W*eC}x6X$Ah91?~jn3o7b7RaPCpq-l4H)0+7|7h#LjoY)m%i_^H& zN#AELcQ!uE_U2k22IC56^kGOm47^ICk3ixPVBaNa@90Wr<D+~Rk4BNT%0?@CA0+OB z-quIKxXKxQ6cUf(Je^0I<<~i*kFg}B0<JyFB98$M+v}a4is6#Njf6XTFC^{-LUR+P zE8*}YAKdC(0{w73+y)oGDtH{|Ey?-xfpR<+@kK16@ndK735YyFlE}+uA&`J$ESNV4 zW`7FiO=t8eNIXR_#}Yd|i&nV=^OqFNhtBBJkih?4Kszqx#z6ELNIV0K?M3Ygd*Vm1 z)cD95eHIeWLNf3<4E&ojs&E7m1$eDQZUM@10p(atpH?Zy&r>;mVb&h62$rRbvP>rf z(;sK0zc35aU!0Xpza`5|&l=>A>1$~__vcI~%d&dMWfE-9BI!>_$%U+|44@2}WjvJ1 zWCwz!m5dS?k7lv`U6JkjvaPO2lSne#<5~2{FSD(m&WgSOBp4=k!?G6uBx>PjviQa| z+g5lsi}y5%`oeQrybp<H9j*rK7C5F~FjMSY3d@?$dLC9uFEaV(CF~ut@M9pIR&~je z{ytgKYb5ynp-TGuEaRP2N#7l%q<<V<(uHP8KNzK?AB|ShkJC$fFukP4Axiq`u#&zE zqZD;vvZ&X(tfGEjf@@ueDC)H?<NK~;QLlH6Eb7g!VMSeJ7WG!w$f9m_jZ)M*U1>$V z%avBtAG$^_>OHP86t$i<roK-_-RWW<5J`gF>7uPdc*JEq>M}<oiA0aPlD)roKdruv zCtZ99=ggtShAVAwxM(%}3>7509TMAlIgICB?0Y9kVn23qa(nk1KXIj1*T5kA4E<9V zvff3s-G2uW_XkECPFgog!iO&7j}}?9Ncg~2w$%90qQqpSC{mc*6SnpC?lV4e4J4^^ zk0bfnWwP3R#^0y{OIW3ONSOST{OKemtMngK?*mlnpP3ZUnTy3l=AA_5_uVNnZ*v<r zx=o^p%$wav=5211aIBtGZNZ%x1m8&n-|ikL9m*q0x4JnG!@zCsOiF*~J`|<*xGhTW zHHjcfBNBG(`$=-z>9$l?-69D)-K<9gU$~0KBW98$pJp`kFQ|{XsZAe*#Div=K7onN zro_Jcq#NBc_oHw3fx*48N5Ll9MB^#9$xM??Kzm!eh(_KDMCdbVg^OYI?qP)+*1cbH z(}qHZYAxescWSOPe&S9`%)W}zhvc8SX=F*Hh3n_;jDc!`up0P<n+DWUxEn{!t29xH zKf&Q53qQr7qY6u8RdxJ_7J;9!YHXJ2`>iB><{q{IV13Yx!`=>w?O1>2J_uVSAgfRO z%x(P3o#Y$;cBhS>yb?O>ky$}sq?hi$?j^=hTGh)&zlU)bK9T0puJmS)waR}0eHWzS zp9A($^CAq%=!FPL+Xh=wkgq^)C#}akBdbbdxn4oAxb$(-I{qq8vI&i=J=9Sig2Y2+ zN4d`9nMw`TB(o2#3U9LO8Q2a;?67#9V%+Ru+>*8w#BG$xtsb*VjoVmuseVM?Demy3 zSCeNs25qybqWB+p(gh+Cn2dWyl!xtKL{^I|mwP>&zsgkY_j@>hRd~4`@GOB3VTbsH znD`keKWBRbzrfC+g7hk}SCD?mb`XArUBxaeCHaERcs=St`QmX;^fgGl#)iM~BrEw& zNbEE#=xGn~yapPgkI;7ZGahU1xmSW`Jmz$RQu{L=PopU4#tW>O679STWKoO0$coDR zEUqIlc^j4C#~#m{l;o!wNu1+pAviM0om5Si(Y{Ouc;30RJ>wZRl$}fH%Zlf)V|CC& z+dP@G+#8+@xzt0f?zb5&X}p!zo!<6%yi|feaFVVvvtS>p-uGD2bURVLhQ5+#f;p*j zJ{-NI#$QL)<KGTZkDquvR|8V<56`F^@`jvh`W(p;r&R_Mk8uf382)9}A2N5^?fOqz z5&!G)1PS?2X06xL-b(gi>-WO!Wc`9wzZYj`%KevSd-l=3(v{g6%Y&=3(}rxe=TQXl zJVbIMC*te_#`7M&{j%5m-qVY*KjC2;_nO~()?wJY9&=k~uld1e8GSSIm^*KK%`ZOm z73fPIc+Ot)iw}JTx;&e&HF=nl`U<47uRy9z8rM2Bq`Ln%wD5mJ@|Q!GemV5PmqUw( zhA`B)HhYP<1AYZ>Agg{Iu9P2=AD77mdvFkz3d=~ysmCF8qj~)J#%#7lcVo73b9UoX zI8QzW#;w_dIYmgwZQ0S8(E-5!1pW`gvH{>nFmI<5$j6HS^13~={n`-yJ#a1I_dwzv zFs;*I!h}|Zc9a~^x6Sx*iE+$0O~kkm#@(GAeaDPLCd&-c;@C>t&D$L8P3PvUQQvev z?S$o-H&d+_>sv~Oy*n}j^6O}DJa){lJ&(wCPOR5__9t*83P+YsGeg*0vo6z9*AnYS z`i4ExJnM+qITduF9>xxBX&;xmn$F6K_4W0%HErl)dSCUVuVA!7msW?5{J7tdA4wkh znxy$cwIi8*sV_HvZoJtf!g~E{<`GMnL|{+4dYvg}sc+WUQS>^k7j)RWE=(n*#>`UR z^dq8SfVO5+X`S72l={lYmXuWJHFtGyQpqUwO*?Wbgk$d(I$Gkr&GF8b80o4_bC>#H zX2lWFq$RM$+v6Sl!7S5J>NB4lK5`+fBr+-3Rmms~9k~z$m-d`-@~uayx334<z<z{h zM@N14c(k`j5C4X+`HJ$93u%$(=<C8r?yeX^swA+Sz^+YiXG-UGv>$WCl-5Q4QN~8{ zLE*!`wtnoGUt1q-{9BqP=~1Ja5Ix#cDF>@7tCLS8rN5|r*awZ|K(IO>hXdgt=~NHN zp-@e=9H<P0<*HCMJ<Q_|h2_d%Wwl)8tE`bL(VsnnqETM3=a2cMzX9rA#2;--KKMxQ zNadIcnVkhrCC`>$2*ptBEiNc7w9T{4w;f|U)*F)@AkjTxn{IbFoggX9k>zrGKrUyR zn>9_+O_h?8M^ke2T+pOK4T?#(x-v;G0evdy)6re7&jfuA#`^RCXtqi{4C4^N0=*W) zB6Rs)8m~z+H7Qq<N;D~;NwsuYUz(#yQ|V&8yiRYFwCrybTKXmF0<9)US-5hO-2E<) zbfrHV&2gJ^xLc4WipkI^n<rVJ(?rWPBNadUQmBA(%bV*@^9oW(6mpLfgxop-q~gW> z3yFlBCF0U$4aYNcIWtdS=7}ePaPlc|>I&vt$;?&ET+Pfi%sh>mr!(^mW}eB+wakn* zfuJ#0GfbPV+XTq6(|tD>7ZdV898bD)BypiYuOX-t=vtgMku+A?CXosrT_ol2_7b`% z=a@_v?wnId&ra4<x+Lc+B{e*5rm8ZRsj4i1X{2t)lU+!9;?>bqRjL}PstogkU}1Dt z)4upTrmAv2zrdwx(=q&HTn(K{5)j)}K*<)JDAy*$eu=(*mGnzY=LRAyM(EQBp-VW; zIHOUHDg(<DXqAmKmoQZunwCSFB6|_6Z-8`TL~OJ%tca4PmtkO+wTdc&E^`f)BXk+x zjFP_W-dZ_gM{uMTbU_8g<{@ks0Y+X70}+S7lyHceKH1bD$#+dAm|7$W$wg4BGAx3P z$jKuFw-JKdVSw&;MY1SPCxR+4^d_(<nhZCANzx?YCNOT{_-=z*8>h-iRN0eM?I5H( zkt!Ea<*=xFAW2oJ@BkPOax6Qb*3PMN5>@$x;5kBoi%w}E;uazjF!hoqmR(6KWx_5n ze#Egn2enR)#g#1E0mAYomd%s!M6!Y3I^t#9n=IQb*lU%oT-Xc7K927I)Vg@tJXp30 z@FcMwB&>#sHHWZfTUb9zVx0>grLcYk#>X7%L8$d4vF27lPO{2|2y4GM5Xqw|%e4yo zMY6C#;R`VS$I%QyZ4NJNo+PQ-cQNP&agVR$Lb}Ib+$7TBZ?5&_7Lhc_M7+XMx}tZ7 zco3>#n^>V3cZe76Gq#Cro3nzJTR#v7O9dBwKfX&GsHoY7(RYgjglRBQfC#oRcy`T$ z0uzPokkEZ1-9*T@sMwvN;-xeyUglI3aVmbssQ3j@@iU_07im=dGD*d+EGk}4QBlOG z_{9h+1{oDzSyi>WsUF`G%{wO20shrhr~5Yxh4)0`k0x2Pru{%1V5(s2U@6@~JcxAF ziw03AeIgnMMV>?Ne!~z+<9&s)5D=sB3DMguduFq5s*B{mi^ks>Y?GWQpsb94h<gWG znv^=&#^Iaf-I$<B9?btGQu|MFFH&283pAySsY{(2Eu%A`zUYj^3?E$!WCks?CbUjV zs!qLKNiMXwgfn+hPi#FCa;&x0g4Cln^OBKYV>y+z=+wF;>*`NB;pF9uS1uNuEr_$e ztE0O;-WS(d+@e!YI@w0Si*P2kv!KN%u3UVoPGO4)9fw<dTEj{PxA@$)J|1)u(#3*K z+8FQQNms0_J9Q;Xx`G~DKfE4TUe5W+a*~EIdiPmt+R%j3Nw2***4Z3yCrKrXP&Tj! z4g0!!>?{MeYEt>Tky>+KPy6xlO=_&Y4=r17Yg>XG6Go}dRIQs*v!(LDdehR`u&RM7 zsjCxV?2D3lrF3NINfh?xb_C-OKJ~=u9nlt33oR3uPvh3<MWfNdl4hta;R-OmhUQt0 zW^H<vGR?E0P>6IAhEQ;;Lg_H<3k6A9^aV+7lxso(^rFNUP#8_<uBog>Gh9`PW+?2l zpU}0T*L<zl)LC2YueLFHP4!OlPVttLf-q$w6TuWsvXKZTIW@^eQkdkW*N;#NlZrH{ zSd+$S(gaPK$W#(e)|9DC#LCm8eDggdsZ3L6(xXS}d=%C+=@?lMR6!S9Znq~J4fpsh zHoKjkC80k%`^(MC_ZAcu6^|2&W(WlCoF!JwnLU@8K4$uv8DM6RnIUFYGBeD~YG&3j za~?B~g`9CZ&f2oQR&e3`T}&@0*z{T<8|M{UEe>6<3n(y3E*)hTF(SG&K+X_RTv-63 z9FbiPdS@o0xv~LdlyO`#ec+C$E;oP*66DaGc8APFofR3P4qaV8u2HPeT9K#O#I=o5 zh2AP11iN%@qg>%=l@Eebz8)HtimX=Tk1pj=XjCiQt?EJWsINn#R*~JRk-Q|^RqflK z<QRWrx3+VIzai>8ATwVi(<_l#Ad^|BkXfXXS*(#c&h|IJ#Q%al1A}`TB;!9oH|1@{ z=V&XfI?ZuSYOCG&FWOqG11GsXO}192@g>@NYZlISB#_xr#A-)05789UpR<pIh@I?$ zb`BZ2iCj9WPi)wDSd7{dHe#uCS=*klM;!?VUDrk#hfa7b%h3^m@q{?AC*h5GjVH-b z5GydAB1d7Y(AdQ$6v<-IIYx1Gd~`x$f-hQ>C`#KWV=Ouc<2j3-Cl6=QOus$yJbHn> zIc_eZGI;ik($wHSH1yYC;(GnkhUJUa)h${i@STggmKG-u<L`4jSg84!C~@WGb*HbZ zKXq~4%EgOZ7}nDs+f>h<Uu~%y3r9Y5DGtY?GuYp8W2uwFRPHd=oW;2$Jy?%r$y&s1 zo>lRov7|Wm%rVh(R2;c(EFAf;Rmxa&FdX9CxY8G_kpqFSUk(QYe$J8QaM)LEao%uc zlJn+y3%o^)^JZsqUgWts#8u^dP4UtLbi|0=nu^S~RQDoFoz7UQEU21h%cjSu>~<$x zM+@{>0;9BX;`oUZCNZ;wnUk40g_%>CIgOcRpl1<-6qQ;57lyKn7$m7=j7Tc6M0)rG zSsoxORFM^m$RbsZR4_`wp7T(N^~uUy&ib-btS_8meJ7__-&vgXF}9{Cs{a$G@f}K< zC42{2AfVwE(eOy$!I;e!&$@u|EXBBx@gfCT?R1RZN)K+_2~nL4lg|*7F@6A~Vv%17 zA}%6NMlRws@}h29HTZ}LF~i(Ucbfd;x6*L_fpSn^Jnd0<i)&0PPW8y)FkgdL<e5)% zk|efrv8ljI$T1&pOv}hS3Sh&DOY%lQ;wY>d3)2{0h{Lc7dXSWX)5D?6G3(HkF`@>C zu?ElZ_|%{;ISkgL8tPSJ8S0}{1ed`A{(u~)tgPXqyt+ClSB9&7)&TccCI@&`AfP1& zxR-{v>`5EmY$QwBG{R++n;cBe%F+~+uqLzJuBmKnD>SxM)w4zBgWKt38)bqspO5cC zv1nZJcxFyu=0s*rVrB_5r!cb=Y)*PeN|M<NLXyHPIg1Z-$r|S7um*Fu)B9|;wBcPk zLb5p~HN4N@!<&t1RZ-`CVmEpS-XZj$hy!S3iD<YaG~99zMxSGj>rFJQW#d~Ui73YZ z(co5baL+`LJ7{okgQ$%RlqHga#GUMm7#rX=C4GR~4R6#Hbtl|DVgk%y1Kfr&e1K0) zTf=c}5_1<bdnHpl5n+m=tT8^9Ek8KeypdpE=QG*iwK$u3&L5d4cE(}atny9u8Ig=o z4+k>0XWQbvP9CtLZxfDX-(kx&N{tkz5|}pA3>EKnXX?%9<!Y-O^ohp|akX{!_7Usg z_@EQo%ntzyLG{{GsLk<XssOR|aosn)&;e(SSqYZHG==FKI@$P-w@C5MmSYcJTqL6p z!{ROTMy*PVQJH+}Yp8)XX;?dIvszyPl3yI;U}YeHET*zb4psVta>y6-=Zs7$<6_V6 z;5+Yy;B^+{)2_R1yf>dtn8>PT1AD%?vo71r&2@zf6uIMo7IwO|o|7ga3u3FiDVj7x zv(MINi!yCZ3xY!s-I}MQ9|a8JOjE_u>C?)XS<cLv%$&u{3TDoMT#qjE_v>=#;kr8H zBP3&JoE6cMjO`g`vpr)8a*5k0GE?0=%9b(mpqZbjq<|UCrbf0S)G8X?jq+*%ImmY# z6|@z@Py5IL;v=#yD_4sMd@Hc0Y4}c*O6UJIe*T}XULZpfZbg3P0W!12J80Wi+6u^i z1`@X311Mwg-KMA6Zd0CoCm;hFXp$2;;X+BHNlDlT^RA{7_=U<3+1l%Fw)VOQj2|Xh zRm1_5t#LOrsff2(GwxxCZJrZp-|ap^<7B7*iPfQK@*rJ*psStb#{CrOvLe#~=}s7( z8Qc!jmm<O@+it|zWNXs$9~c@!(yfiJz4>+Me+0@*cF8nFtHzXQ9+!vEAWhM^$<40k z<q?cBW8lwS+SU?Z(b{#+q1k6y@K9W1-k}qJ9j1EnSeWYC3`*u7ni3L#dNF1ME7eGk z6pBG79!2pEQ*C4Bv0sI|9)1SPWVpmCR~${5#>hbV+%Oh4dh(dqXa;?258IFya~*xM zl>Id!zw8f(D~k_}C2gJ>g$qm7VV}u_y^aD0`}CPxoaZf-G<s)5v*{pbTi-Wr>{0P- zV!ru|+wzUIJlb1ROEh_^W}l`{wK%U`5Ouqwpg+q+emQMfm%gBz4lXwdc_I_*0C}$N za3BXI2J18#tcw_|#KpPM7_6ew7muloGt@MS(~-MQBW_wo(%oukm5dqe%bZG&tEtAK zG_ESs{(hFQh*ofmXa%>FR&Wi*(t(76JhXwc&=6yxIr8zw@x(w?N@kpZ{7f6nqYLFH zqSIEPCsg_<uzjh~kYZmyLH2b@S-P;NqOj*7dC<otJ~WuH=SuRh3nA@fR8M?vLnPMR z*VVJhVo+{j_7P4i^~C2}iLe*VP9AwM!{!bTn8!3J@DW)w0@`wThQ~P4k{xzn%s#?F zgP!=>G<w;x#UHGyv3AC7R;29r`70%x;&tMbENh@@VwRo-CeO!3uz*f<i<)S&>kekR zu)8SKx9YG{QLF?abtnu*w?uu2+D7zX+lWSSR4O@5z#hb#qDIPW3N~toHOIs}t6tJ$ zzs`i<KXUV?XN6U!uV*JI=p#jUlHpGtjjoI$D9mHBQ=7$;q1&qX5iMRaD$2BOFcvoH zKXPvvR=lK;nd}ImngEKHflxTT56YFHu-}=URwn%rcFy1mT#UUrY;LcM*c&^~0lJg1 zHyh({c3jpHd&|}fMB-}tczrzQXCTNrKWBl>P60}en46#HWo98Wi<mi%nG?XS=$I`? z$k7z1lf8e8Vxy>&G$}FmrkU)`PQ6jikRRRYM-F6V3bKaP{K&y-bbhx{EWsXn8u7R@ z_6#6@JCn(cima^1=&OJ>x|Mw;7w*SJtZ)q&*FaQSCJ7j3TnEIXN^+}6?8}1d!MGm9 zxdRlq895!U(RE~76EECv+z11M6g-$vV`@N_vfm#XVmH%og@H_IEE08)r064qq%nJv zlVz!+p7CT8>c|tGHN($y4TJkSLu&q*&vy>XG<CXj&f%#WUMem&uydU{bJF>wVMjX4 zkAO1$K<5}?t>c_ZTW9x%K6k_7b9qg)eTyB*N;?bX?1{%(tmtv+r!a>lvJ)WZ5#9{2 zMX|nE17$Po2(+c=WKShiyEgQpm32-}TVLFYcQ7B%u3$uVC$SV2N60S|VOqkmu&4QB zJ{32zt5}RmCM`Kk!Qodw4X4Kl?aEEvag#C2!BBNb4u)$&?qN9|`pg@BmFbH!R;XY* z#(F2y(3r#ZXkiV^Y3rIZ4B3dYaRHPs?bg{iZ>}xhR$!Y@h#X4+xnR^oZ<?B?X<kh! z($sO9ZM>%7!n{P!0ru%NPm}$c9MJtDon=#k+M&*`srJJDY*4c%_7@X~eX=;Ebm}x_ zPG@G>3=qm^inC@{%whhy%=CqzGF%0M#(dR~ldJ3C2H8Ug!XUd&kdc|vQ8DEF>|mJ6 z*szPSVU>Ljl~CZ-($9XmN1pvUo-^X((Rl)K;1k)|uam5^Um*-{+2b=3?Ch8Mkf61g zevCh+)tYu3Y^iZpN%~2!ZhjK1+vrI<3D(PA>qdx02=P6F$QHh5oW~dGT0(n_Jw3J= zq8h`i!9c_Y<@D^KaRD@n0})-IZHJ4IQ1&50p~5UgT$iyAv&F(?U|cZ_+m-3q9KatJ zx*7)9i5w@C<E%mtbEi(D%#X6Ks6KjR&PU%>nPGkEw5Ei&O<|3?;|3ghjAd_VLm?CG zH8gIM3-M{frGR5`QCIT@c6hiX*4a|BBHq`B{TIh#b8Czgt*<>{Q%MqJZEsKWTE;ZG z+hcu+uAYvyC=Z>*)?HSPYx{aObe_#1)3tvF=O+O;N%PZ4VqX>FIMytfIUHtQ8qD0o z#LesKT#3oq=@iDEb5g(-dyxsE?(1c+xU=PJU|6xCxfvP6;-kk<*WONK^dcQx)!A`J zkBjMeQ<(WR$`pyUwQuN&=hgL+Ua&SE5N}~<%MOP&%{}fgaE`Q=J?ymd|7l-dJFG9S z&Fsr;g+=OG^<<+Xw+~fmX06MCK%i1jb}5YWk=LwCjIFB9%4lqasIGDkt0qTUrkGo> zQt^UUwPky!;7UGA1BFzTL6#=E*;nI2c1CAB+t8)m1UfHGyn;@%^h;>kn5p+mbn*ok zfReLca?nE1g*KPVk^AS0dEWd2W)?AX95W{{a}qNrGqV&NIJ;=7!WM>V9nJ`#(Oe<g zn2@fMo(|bg^9Fr=v4MkqR!S`!ZK-ABtf-TgjSi!fF}d+_n%v7&|HgZI=dNDZb*{zR z!Z}QYvEt@Y+}DwB=N>`6wKAGd8DS477@0kzPhr~YOGb%pY3s2hO;f}ii!e3!2*Q+= z$6AvvOMudo*`>=$j(F$Bww|s|8Xs~eeZRyNU??ktTA46O_%o#^_ps|686RIWk91@n z_sDLbN~U48(G*9$8PN4smg<Ub>f?6m?c8atpB-r@`t&5ctpTZxVCC3Yp}RZRYm3iq zZr{)nXE%0S3FH91D6jJEI{9oAAXUDFm&KwQI(ZBST-n;ze0C>}V5OHnlIbjP1t#Lr z3)|zJEhluf#BCN@g%w>hQQ5kaS0So=LERMhyoKN$=bhl4BJeN3cJ{qDTSK`|X1jiB zv8IjJw27orP%F`FlQr8^%~ope{n4omN$<CjFUu)rxm}(d$jxJ}{AnOeFB50XET2VY z1v6*QA#*M>ea!R+$P6+wJH%2}qFknvE+M&@WG%i)D4DBhWf2JW)Ey04PCK(kN^t;L zE)NPLbxdTbCjo8|iEbcfxm?yV+a|0wPBZs~oTo6zP+TC<$VUgneEiTYyV%I~@z_UO zb~MA4aGBeBYC>fOlYh*=RwXG0#iore1`$I&bwelil7+F}IO7&_fB%2A{x2n@@|K(F z@7Kp&D^46fB@Ih>)&H-OQzkLEaPDY#H^rLIUf<KT0VS07?$+3ZOqki`23EX<ZWj86 zPbEkGfSSw4Zj4Q4ZB1?MZGD?u=6H@bZJ;l*nZw)S12o_DW-tXaS=?Mdn#uU*lwLdc zt&ewgn2YI-cuQMM=kCsUpP3r@Kqpmq(%VJs(BeM5n|k}=9VRZi=4LZjx^3wzbQ3Ao z9_`{cAs;}5bk2m0^xjdXknGH$WC-opS;5I0aB0jb#|lgFu)K`gn#Ti6GXqEGhm$ga zMzGOwhe0wv<0{_pn|LOh?vAxkO)Tu{>+9-ZQ<2;rPxQH4yL#HbMO3ucwYRPBbeM3< zG0thaPi<S@+UMv)dd^-NC$|%sUo+;irmdx~)zuzrinpKK9&2XT6&2>SQ!k|@^PD+y z2QpH%Bi6Yg)~>d)^d5Eya#5TQ1?)=sY1Ntvwq^u&HpziY?Daj^PZ!2|9A=C4bhY=2 zZ7uYX%!<n5&1`OEW~VlGt=-!mB7j|~)S1}UJFmp&FoiU7E6a&~8xC6LaPYp)+*t_| zjQQlH*i$m6QM*}TE4#YcOzUXs>S-|#Vq}?h#%s`K<tWo`gp-y@R*1^mQEg`19{KCm zrAMygp*o6@B}|TV#!P{d@E~xy*93Mo(|J<lJSTUxw>58)5Jatyb#9FHI#2>{KD%Tk zwrt#n0!GW4o>;eSCDu(HCb9QYEQ@rmj5VDY+t{|AcFS!<5C-&SbK1yhX2s+PrLV0I z#SS8)gflD0(nW0>+gjo+6nk>4Gv1!JuEk`cspekiK!FJRAuktq^Cog}k5viIb)6eJ z7!;z%zOc@c>~y+jj2*u@t|#$(tkPR|DT>yuTSsL2*A0*HVC%8bvz(p%jQ7kw{Dd)V z;>kxDZ_$WS*_n7p+k)}(BcMw``i}sKG!LVlt+ZXuI92o!Y&}Bt7K~gkGelYk=G3vF zgYULFTVj1N99+~uJ<bhG!8GgOz4lbD5{`!%M<9xw#-T9hF-;3FeBLp0n--KLFCfEQ zTWeoOJM}I%0+@r3!DOR9IRsfq@CbQX*Lc&(bzuElOv2U_>#6T*$Igm@Z2VPzC5#rH zQMMdxR{iqDI`oaQp*U>I+TIcGYwc>G-YJ#LF43E5i;;X9_P7R|)XeYrS-tUg_HmtE z-7e~gox7TtS97d=MKkic_LIAM*;2u~anxX!xvVykRE@F3NP}7VE4$dU3IxaZ5ZF$< zGf5Rvnzf$l)8Y$bt<+4yv|he^*3LY+ZpDgdiFRhBu3>q!Bs6w{DTY&Poj90z#37U1 za&Tp~@r*I0#07iB5dqUy_gNWK9yt$lOTja|HKrdiC2Of8XK=Vp9lpHD8Oc_vkAU`& zyfp0sR#M};?}*5TO()rG9HgJX4~+@Mu-Q@>W71LP&ir-Z>dG3rOP?M&_XwymU~#}? zwV2`<BP2KTj1LRTX7v|e#X2TG_54-xKqkjGA@bJ+ssq6qe@%@)O>miW1YBvLMDAAs z$D9k-`F-K)nvg#btjds(j?~^6z?AV<OMqE>*ZKWHf29vI52Xo#bB@SJlAvQLZ#p<; znzOE|rrPHZ1blu=N}P2B3>F;aHfC7N3Y*gx2nR5~U{y*Qn|<Vo*o36~z5+DnSg_6? ztnme^s)ONR`cOJjcg%prT)z@L=9`Nx846d`1pVP^iwn#e0}g^4ORXkhF|YJJ*3^dW zVYlRF4c{9+%u1ZL;}m~YO-(>gibRUPG90Q&-}fenKvnWfr>i@IDaiinO22oVxqR(i zxCsSHTp2SKtN3ez)xpfYWW`^N^@q7sh6C~jl!wU~2+9F}IH>r;ShF(b=R;?WuNt!s z1pJt!y2?**HKEj&Hiia$KG|PG*lPS$VN4gOL8wqQ1^B9J(x{5BZ|hvs*4MfQmkt;i z3I=G`JAk<aDp{IP6`D0wm58s}pV|z^Oe(7b1mO46CU=dshfcZIAi<#;dcvf-rm9K~ z1ge9s%-SBlJDIs5`8Bp6N8fs+eNow8SzR+n0Y&kOUbR5AX<nOG_u9P<uhX05b$Q)h zk2l+!<IVNvdGozqZ-KYaTjVWfr)S0$k1w83Jh6CEaY^yy;wi;bi%W~AdBffs?-JWa z?<L^961<OqG#$j$UL0NT%Fan%lpQ}|;-r$vQ>K<qn+|f1F0)rrq%yr6=wXyu^k@Rz z$1SVWW>jl47HZ`YeJSY6K$~%bR=!4?afVjDRx4kpl{abS%^I|55Z54~!Fml^wX!x% zI?H{wCUt01r@LE|zNtxl+RP1_G+&d>(WDbK>0C|Pq)96@_?9OBpC)}<lj=3~dzy3} zX1hp}7HiUl=(-rRS(k!VaRs`s!rwLcyB7580PXMN?|S^*02<tga5tm-7W_pu={C?W zBak!o+sQgklkP&GyYY7){vJT!hcI|2XtN*1-{YV;p2YB{G3*)i{|N18(f<PeUc%o` z@b@$Py^6or@HYVZ8z5@ZK7{)%{(gtQKj80u{C$8w1Ai+u=@d=+7rMU0-)4kv)Z~jr z&9Oz)^h@w}DgG|Q-{qoKb_M>f#NSn-R(`cuFOWVzDeY%tKXH^W9-bbT4m&*lP;u!$ zp$qZ!;I9{d-@)GnfW{UOL}|fsH$i{jWgtj*0NwmqaNG}oP7Q1Y3<PPx4>1<4d(aZ3 zducy-!Tso_gxgs{bS-<3xj<U}F!b+0`-I21ec}_Q{S?`Pdl#j5KL`EKgW%Xr9><H^ z^JC_DnR)E=QmSNsg~$Ay#r%SKvVTdQ>|ZgD`*ntG5A);<k|$>`^I%m^+YjOa_%*x< zzk#Ilt(5ck@HW5>cqbL|Zp!%{MhZ#aA5#&3N;&_Wa{eXd{4nMGDCPWX%K351`L~qw zV9NPP%K2%^`S+CbA1UW&Dd#^^&VQ$z|4BJNPdUFxIscn-{x9VmN;&(*r1QL#^Zb<a zf|T>Zl=GsL^BNIabM<04V^ZMEI-wkdwROT2fM}gC14REqA&l&-kzF%YR@Ty`5>;MT zC(H!RUoTXFJf&7xAb_p7R``Y_fqpvO91&G}L!B@U9KL#?5}e1@3DY5KX`N68u8DQR z9B?0BCrk!UtWKB(*`@VD4dgV{34X{usa9}f>bxS3Eq?{i(Aiuk_`qAfPzZ=p-l|$U zV6En~Fro@h<7o<~*9*r%;gUL`6p9LY`r?^&!c-XNTPTD?$vL}Tm=EJ?>xDY7mo5~l zMJXp<C(MQk(-#U0M5(ZVCz`m1-Wd?pNwXIU^F(QU?Lwhel<f8O!m%(ZQ72SD$>f+& z0+UyB;>Oo66pj(4N#*rI5c1a733FkJw^q;vm?{Xc5Ly?}JC*eUeSVSl`1rYPk0<LB zY0q4U!JblkOynnMa&mGouwq6`-cu^X6pB&#r<mMa8^)A6WAwCuY(sy3#q3X{(w2%j z6*DU4R`@FX6@gWBb5?PQxp{$4Bzgd+Vs>euB3PPN5sK;+RrJxOVqV4kieo;JYNd)} z(Ue!o%XC-`tLQ-{l?b40Di*}(s;`#JmXl!{=GV!uR~%PS`-!xQ-qo>N0d;18!;Q3j zV^mrk2?x?r&uGzBNk~On@FEs$V<hT~#I(r8EZEM{td<z%PKTJ2Tc6CQ#mvK*a56+9 zOQEE4u_9C!;ozvmRU&&a2`iz13Ms@yvlWDxN=6n_(hhlftd1ID^oY4zMt_#s6vvmg zFdUv7F)x3CNzUAg<&31`lVrIQZY;)$6(?1kTye@OV3fERCGJ%UZw{F~kd&EK&S+WX zW@dHjs9CLGS*<j)%4S*Rq-T|vh3#})T00SjRTZmEES`jirSYs1ts1m~a#;}89ihpm z_CIvpd8t6uJx(*bM}ZxQpOMyV!BTfx_aOXUj-PkXLaPIsHBzLa-;=75iqp#&TrqXK z<A)U|vrFVN>;<VVk)6oKnmUt37P819J~l*#a-0Wy*a>N*rcmZ2axi6-)p4U)$5{+R z9;;&pl$*$9LB&>m5z_HlVs?&I?cb<~4MR+{QW|Hf+Vc{5ENEPMwNG%0p6ofJ(w3jd zXY>F|HJ*2LUYQeB(d{WQQ)RaE1gp}iktV6&a!0Y!eU09XqD*8^tzN_5SWqgo78rrX zLbMBwU}F*5MMkKx813Rc4FWy;(LX*qf!ljx6O3tlD%ztH6B8qoL{b4$B8e{dbjrj8 zEt$EGyGT{LH{q>=avSVfJeetsnGAGs<`c=N-s3aoEg{Xp7_b%tj=_Kh(J6^3CAp+k zrM9tvJdvqH-a^vVf?aW%QBN;LMa!0z39%W*qG)-d-10=CGb1yFa${+9R$>+<-4m%0 z%Z+82$5hG#dw{VV^Efd&J2AWByQGdcGDp}}(GS~5&nmfNbB&XtzJ#x0Gmth?Gw9@~ zKjE)9ALuC*Gw2jVT1rSsanA}wx{3%Slnhk>^Ibz2ND-5zQVvryy-cJ7>@)(exCmxL zB#5x5lfGh2cDcWc=+2~5@Sy_-p-(vTAfVuf=H(zpjp#r$ln7mnaYp0blH3yz&o`o# zR3C{MkxHnTyEhT8xEi+YO;l~G=o_fG3<g(8k!mP6Vyw~_V4@~A&uB{e=f{pQnxn@? zj>U?LbN$CIcPmn{o~Ur|I|#Re&}OtnYZJAJd8I-gX+yw-{ch3-Mb+Q$Mlj>-fka(N z?o1@99bJiqCAoR%?ugbW>X|>XNQf;aRSHHIg;j{L#YQ*gSEi{h_jc0I(8G$|ESFqJ zSDUs1-DK~ho9rkA_fQQ;eMaA)Sp&_ov7t#W$?c%q0CVMYjB^G^EltHXxX>e`eJ5Oq zXpD2QdXPl3dYI0_@HVO<bWj})Vjb-@>u3|}OAMOT(YKO*s-yoi>*za3GfGx2cQ%rI zK0AckC!7z)MRZ7`T*M{}lRhFdVhb3TLbQ11{zUOLq;#Q}>0G!R%$|A$M3+RCpyNtP zJ(K#=QcQg{-NV0@sV6FJDQ#iB={n%uX?s$AGV4y;xkCHzgVmoz)}O8?e6wg=l3Jh} zO=@lg<7S91ojwp*iZHhjOognt+=~$AHWTJHU|sGux{ezyoOvKocnw$XSIDkVY=vmU zz+j{S({DpmW$0cil^b^wuGto@yG&enaa?zSaW{?~#8qVCDq^_qN#VLT4cC2yYYtU0 z&PK><5EU+NrWw<s$48FGx|&8>G%0!<M(+YMeixwIY@=O-!DoRyZ-G1y=r%!~ClJ2{ z@{$Ge5}?}zd5J&*#I0!7^6g2Sgj^}8N-p;-@|X16_G1{Dg9AlgLD(}8J1Kf{^pwOY zdn#584n$6sBPRnfyigj76^Np87>X6?C{|b~7Nw&Ir=eJhD5{2`SecGurG;W~I*RHv z6sr(L%`g<J(ow9kP|Qz9F)t0pYD6)A7>d>DC{|l2>eEpilZIjqX{8#5Vof@VH5Q69 z(@`u)Lvb3Zi5iCDv~(1wStw3SM^T%G;&en&Hw?w;=_pROP(;&FEEI7;u!cQ0KP@is zvsG=0Hed9t#96-R*@?4#(e^~UFWQml@R7o4U$iUH<s-GNzUVg--{hyvDRJ_odGe@L zD?4WO#fXP-=)+%qdt39_sb_J-A^an~*M+HvTQb4E#>q^3!^*`ctgBz%P=CCjw^>*# z$MUpICJl#q*oL1|QQGJWQ|5bEGUZrysA3JPjA1X_NLZ93orp9~<hU{sr9PNVJY?2K z^$<?wSRTR|QEkafIe{u)SPs=x*2tltKS0k@m@f~?m4Qm1917P|O4Yu~)GJqowCgE? zl50JK<4nD2#b3hVZ(T`V_6&}09+XtaY0@;k0N8stnxNTinr?S^wy69?9FXW$9CK$> z@D#Ckactwo36mz4Fmp09r!aFWGfSB{otb6KoB>V`y?&)Av=acL%vRfyO6zfuv)Lm# z5__#eMW=b&P>j%tYoJH4oOGC3<Cm(7Mm&LKzLCQo#<3~tsh`-4H3Xy!YYu`P&~S)o zI3+Z)<TdmLAR2CU4FX2ZCvw)&6FHLc4SFI+He&QvpJFu8Q+=w@OpARRQ%!2a*%T-0 zTOsNsBP)?brzmOJhO;T%TCpzA&}qtLPA&Z|waqAu=I}F^Y0p7SXmw%?KWF)I>MnIp zck|qaQ{%neT{upXmrT6EoWqVqOf^51iUuK_F`;+eFlJsVX6}fPc|Gyo4ejPpX=^xk zCc4VUl9t`X8b1;;<;)%tsjx(c9YAvqJAe?~+KjUDo7leUu*%CKRfnonp07OxD1~uY zdBJA)=87O`bg-XpW;-+yhe)2D$BxgZALG{q>;NY~*uSe3Ch@bu%*^4ZgArK424=6W z2r?bbrxuh!S;X#OB@f@rsl)f#QI!tgD`u0I=N#b)kQ2H##;q&ERyX+ev_rlikq-WK zj_5Buif2C3^QN1q{Kbo`L|0F99C=)KH}dPO=GJ)g*_JObrgCJ|f!R6v!3lQ8i=Qvo z31}EYXH$?&uRkhny(h*_RL+g`bahDQuI!S|UARfv#C)63w`t)fxvRb9G&nbRSRqP- zRaJ+4G~~z!eJc)Gz?J93<L1%$^v4V`-x0B54tvm)C_f!G`Nme4sTyNreUwSfI{lgY z5a(FjvOa!794Fl7Ug(zD^O79L39-)D`iyrwMn4vq%|6I3Z0qZYb@P-N4+y(6Kf?CX zD=CN9bCG&{O6jATbntT=tX6F;8+zCWTeUkz@AQcqJD?qUaAn!#*w_|7$1DjuhO3-I zM``)tRH?74+dL?%HnHQn`LXWq_Du{a`*ysVj(YUk)|*G$l4smJsl&YWaVosaIw;1y za1K4^$4>2L#n0`=`M!;x;e}QmBlyu&mleakGso7R)EN8-N?z}V-fpZoR#Qu3oh|L8 zrGwr(%_WA|5zmMSjtzZRCo4TaALB;s>1}8?V;6U}_`VW4OfZ)FI17*BiJD>K*Al1H z6F1N;0y*Rl*Pv(>u95@cD!&}4sjQZRA)jBa425dsU`<U>4pfH&a!t@zDF^*@mDz{D zp<qooE2A#t>X6STSNcdus|<%NIh5XTK=7(iKn@10d}suMa<Dq!ccv4TJId%E{&C%v z87=#f)Liq%i(47z9bYh>E;tv1`GMQvo#rj`&bEbQr}-KVliBPz$#GW>sLM$-1e*pr zyCU=dxO)%ysEX}z{LU>q+jp}mKxhFX2@qhj>8O}OHUvSCVr7@NyUBH<f$${>>T5<2 zte~QRiej*$*n982CPBd7dt<OYpHH9vbLQT=cQ*+E@%Q<aKV)aloH=u*&z*XXi^`hl zX=8S%%a=};L``kk1Z5_U1~Zp>#!_!S^^T*`1e#Vry_2Xk+2g0)LazFw2vviWpi&T9 z8I{Uy722V4C6%hERE<a1{LI=`MQqcE$La}EQfaFrw&{eDYD#J-simZzk{OiDw9NwK zY}*`QG0!$1%mtpKsdNmLj-%3F_=)-dP|L~Ga*FL_iF!_@X@Aw9Xv_8vN;0#?bU1~~ zBL$KvAJs7z%ws#|qJP%$;=*uf5jP{;jB+!^%?55Za#Q8z3EYfxvx%E0a`Pl^Hgj_c zH(R*5l$*=A*~-l}ZnkrCIXC}C>ZaRZ{+r>b6sEzPp`;S$7h-^0QW>}8L%5$ZB!X|h z?c702xtFy%A}GXG!5#K;ZaF-h!dV*;Wa3hALhW{Olt-)-f_6Lcy16rL3b%YP+YUM$ zB;CoK8T@rpjsCd24rec!__W+Y`+HhWt+|?HB79nokGz+M#k{!4{uY+T!W=r-)m=|m z9Zs4hp#2PW6+Fv#Tb#nPggsBXx@#3Oj=e~_ah7~1?ru3@LEEiTbgR~F%YCTx?iCW^ z;wXbQRP2Xu(Z{h@5eHM~WLy{GP_ai6t{ZVMJ5R>-AP#2h$++!^gV{UcxVFF@By0~^ zx`P&?dgFGslY||3)S&v}4z`PgUAkX-+{IoeVK?{7h`ZTaTr`ixPOaCWM3MKoSd&3J zayka@%-@wClk;Ore$0{|qxmQeZ@h4!$UY)nwL>5cpAy_d9v`#m8|cHMw$KP<92`M# z8{NjfGE2gDC?xW0Or%i`8;tTxl)?s{IYUhEmUgbmoM)mPvh<BvgucI{qGq%BRv;@o zmJ1`Hk?Kh9&P4Yf?pAXOvei+z&3@Ac?!mst@=5r_9bViG{ud$>iQ#EMsiNTSOi7D_ z{c2Vd&)9ER!bT+}XH2UiJ!ATcD=A|c?NA^8HS3pWtV2u$G&6R(n3}N_qMrQGsTn&% zgvw3$#N9k&XCX3?7@ihf0fM_TB`t2YMhuS$<$~44vkp{8iEORN>jaW`lo&clJt&wf z$H%Y>MILM{9wM9xO@>`0b}#qAdSW-3Le`7B$-&|VFb|P7f_bQX37AurOGUO`>{j!j zd9e**kDA}Ui){qNxE^)<miCy;E&=3(_L#yh1#Cf&IuWoIwuuXh-+psKQ6{8EbERWp zT&~HH$K*`vjLQ5N!>f~}VzFA-6(VLVs@$A7?trZ6PR?&LC*UC`cSbEHKdeC$%L}|y z)P$jJ5xcd1FgD_6*NOV^QlZ&B3Zu3v0ei((F&yB>fR(`_5)ZHUyDU?rxbLf0Eb z&66J}6^rB8O=7r&qpFd<gxxHLO4O1B{Vf`Ob%OpjF<i<~HAr8IQua&L(ggh-8huTI z{w^`B9ZS|CeHpu343(*63Hp09`q~8jePXzrqw0~qoZT;m%GL4&{R0|(eS-cWF<ik> zGmyT5JuHSQ)QSZCBO3jT1pQ-)^4Ml}B|XO|(sDeWqa1E|LPRY#yms4Tlszeir*PN7 z@hPa%2EZtdOk&R_a-YOa&tHPu5%hVHJ+E<_+#a*C7sT)(+;wRD5cZ<R%^I1^UdG)T zS+-K^6DT~ihpRgnv=fHQl)-X0nJe^&Y?sIn?xsSMdV?$3;VH0S3M5rp?t25{9#7s9 z*;}cdX(xL}>{;%+AN{9@?_p<>-p9@)e}J7y`4Bsk<s*^32i*la(=PVDxE(qZbf6Ca zGj2QYO$z%EuoJKYeFWHo?YuWp_KDb?E2yKQGH>x|_z6R|(Nh%O-d)%cJ_Skwl$In) zqEkX2pn4zpT<-&4h&^T>_?BmhbLN4#LiXKSiB#fHjYX-*GPQ1%peTRTixP|ON0I%D z6OP}dcb=;4DW4XJ{X4bO{9<$(K=MZPpVUtBtI<gS$^Cyz?G*ntIt3uP|L>`tphMC- z0U){m=~7CgUm@v@9+2FBrIgah&ye&+4oL35S{k^KyKva%fkIQ%DUpNOxzfPx7z3=) z0vw_q5;>GzAYqI1m1u2joy68jz1rBtQjb=D8zcaHK!d++BD7J`>n{)LZ<7?3@?ctY zxdii`YSdgS>7r;X6ZvcHl2E;-e0GL9!yh_aJ=`Cfu1@EMc1jShOT5IssgLfBJ})&= zP6;LtP1@7$P5CGGhb+3#eEqScPt&wff5f!fV|01?+Ede{IGxjLtESb?T{LfceQ>@b z-Wb6Lny7-Pe7}wtdMAFrwQS(ZThqwNh3^62)P-JiJ`)EhpuUCs2UKq8E6#p4So*%M zF}JKn4U`<d{XgJ}xqQFQ9Qr9szIj>}C@O>nY@l3|z7K#>=r1ZRmMbbs3gwDGz;Eb2 z@|Ol+ja*t<W{BgjC`#zt7?hQrH5^YOESY`uZ6p?&e3hw5XHbSx%dn)Qit(s~Qktlr zN7(GB#L|^vo=4z`gnmm~aE;*S5%!T{&gfBNxS7k%gSa`Cn|a*K=jJ$WPT*z%Hz&bL ziJwhaD+L#-%ixC+3au2Juo&{;Qi@u*!wO%lplow!XA?GEj=v4%_)9^_X4BMlZ~?G3 z?X1Gz=d2=V%JXkB)peXllJs?070X}tIN4UBDeTxvP~Iz=9uZBigl3wIrcXgL-LjQH zfLjeU9=GdiJnrDChb-()u6l^FySVBhE4!N*2O1?1>?b_X_?d*<Xuwn!&n0kxWB(?` zK?VwwV80MN@|@wOsoFlWLtG_MFKr+0gtm`KQi^mLd^tXu3zyUPx9d@-TKy7yO@(J+ za~pA!-aPTh5N7UESPb%9n8fqoz3_x)-kkJ+eNs}8DSHVr`47@hK^m0chfiY$?Io}i z-%`xf3AMeu|9$B)<l)r)(HQ?1rNnBaWWaH3<~}9y^se-Ud#`jpwv`kG%JJm1e9&G9 z<>K-pznsO-hVbLeMLt<^pN#lyKJ8dYKxwEj9&}jxI}}ReW;&6zL!lZx6q2eFheGn+ z4~3S56g(7?^**zHLEk=8-QL!wOCJRm!X2_Nso<w*zJKC_K1$m^uS%9kQjaf6@lieB zOy3WwO_-E}wWL6?E3GFrEooJnz^Bz2<=EM(3hmDo<D24mya0f+@sze@k$FoaG5D~0 zxfBWg+Z1e$oM3NXisFIrAi<)6PE^)q;H-wj+0b(Gk_6Upc;U;8GlB-g$C-@q8SkqX zB;s(VqB0EU?4&roy^#s3X-R4D_C^j)AbO=KqdyNT790A?2tX;+>u!q%@=`ExR>Q$d zA%Qg<iBd3poXLo!QZW48si>4vFlfBJktwCnhsr?qDFuTvqdyOK;}Q<*4Z_|A)2{hV zOXoGVITl6Q+gj!}E`?U>Sk$<9X*|-}^w-7)%OZZg#K}!Pm}gO{q?8P;iOx(xCW|&v z=GNCupKn=&OdA~<^&Eu71#@hRjD#kH1_YZLn;U$sZB4P0PMzL#LcAG|Z*Z0fquU85 zz<gA*^whW(qnb#r>ug!$l0Kp@lC(&sOdV}=XV09;)ropg^Z=GRKgxj-Rr6Ue-_1SR z+jP8r*6aoIY8OqLee@At9w*j;5k~V{Fvrb(7A)2A3cvf~jNy$G9W|uyIHM0nNfLoP zC|zP^(~`s~p)QU_Jo-cjeBhe!#N>#UlY5D*k><~yW2v4!fBx)Qj%G8kV{v1o72n|l zPqz;1XJp3lT%;Ap5F19#OP`#Y*H1E|P-V#1kkf!4Wqn$%eRiqdzA~DY7^yT>P-L1& zePWMwG@_q)bS{Z+YeHG7-d_6)qkCZ(eNi#0A1bqvW7<8YbAHoe$OJc&g)r@d2R>I{ zgjYg__Cwd8Ph0dUJ<2LK1V`Y~iFX&<BIEPzMWb$6Q-d*)NoF~zLHE=@&Ng)Oiu!+7 zo>OK*ygcUiK&L;Wfqt=eXbv<%6l<rSp(l!C++JDsW|k<pdOn<>_c$|^jcVhvWhl}F z4-io)F!X?=QqMNU<wLQjl!KYodZP<K`^-s6`pn3wE$znne@$}}a2%NkmMUoBh?ce{ zwW)F0poG8H9F1_p5<<eJ)X!_eNe4ev*F3Y5Jx%nel*G)}I#Wt&5{eFzFB)JT^c<lO zocf~-*cg5XzI8CXSL4zS!>28aoQwm2GbzSt<^=_Z@tuIrmeqi*d?cLLTSSE^v%}mH za7?S3U#0J=?6u!Q&+f19n;%B(*$!>D2Im*8`=ADX!}_6UHiRj-&B1XV1kg4%_8tP* z9ke&k#ODC{W~QR_Z{~i4g&0QmNA*Y7V*@gQNb>vfPrC9lh0hr<w*4dAOR|k-!pCE6 z`k-&QIghHExu6!+mCvf5KVVQ`J-pu!4{}4s1Nh=sNy8NPLuBeAG9_oFtQ<7SXNgIU zV?q6V<4c{mUBo*zpQpkUh*M4&Fsf9RURcpAZfY~X)($f%4OYD6!)MV5;6!rbz^r@m zvg?zM+(2pa)hA!yk&^0^+BKrY#h|?k^RwfO1^3^Uv?a-`OO+AmFw~1e23(pTJ3RrK zY$(#`hInc;BFvmTvo<*2WnMw5i!7CAMcU%h;>alu<029w`GqI*s*`rd$xvm*Z^)(L znr)Uo<>EJ#e90JX66RW*OyD(Kvrr}lAkvZ$S^zt)VKh*TF1Dddzx~9^L-Qdg^XVM- z@W4lIX;Kbz2dq9lK3DsaR>-KHEVtp(xi2A2X`1+{q{*C&nS*(JTUD&BJ<^OLnNj+D zIhFkBfVnGv@$^+|tHS%Q%xBjv%?%5Z<JP1cqWn=*m(bucp!qGqrnX4~=A};(wSIza z)0w<B)`xOTWvipDWoFCC@ZEz1?fXh1<u~tVtNo50NikSjH2IYS2p#rB8cu9)ZR4|; zx!_wcVAgsOTU+(@uZ)WtuhC_LEz9^)D{mjer$Mi21xk`L+II>;muRGRZBdBQ>39#q zp``j$z97~qI4@0-C4SHm#ibm(QYJ!PF2F3ZcrmzQe3-%5@uQmF&w@c-+TI#B)Y+wB z%b2UL-*`$m#+YYwj1n{C=W*xc{VWKh;GEcZj8%2vJ_4r>BwRAy5^cov_4RV<Uc8hh z{vpm@V<7$`)r<6#_mj@xYiZ$IOj=d*&gkHvzI^2HF`9KO-<mpxo5%98hYMo0Axj?8 zj*u2miMFfiG2A>h4O=gCk@n`uvT8m&r_ZlFX8xk-wYY1rXin9%Y4u0cNsFQFU_Vi~ z7-1hLIl6w@{OJY-IR!_an#3`gV@dmB<MXz!(oG$U9Lu;`dmecFK0+o<0r!to8)B*# zz$*O+zL{W8+Id;Vt!a&T3AF)DJ71FW*`PANepc<=QN7lzi`vlSA&fl-emA&aABoX6 z5a*ycFx-0KB8m0+{;(9+qSPIYbggVs_E<2+6B@HqmJsujc{sG~k(sqsN7WAE#2VL` zjgjSzI^$veX3WSFq_eSY;(q06E_8lqx&2OmdiAKpEK0ln?lGjK>#+_z{`Mla^O0CP z2tKLt)Ebn!et6@l(U!=vhJ=7;W!{{snp#&%;SW4b16E1<OfG{XkH?*w;c@$7l&D0z z77!VGwJ&6q+NL+NfivA}uS{-*iO+<6he(vtz!S&b+iDZ`O`XWoU`$H=VlI$d+jfea zz}M&l7fbTioK=^AY&^9n>o=q(yK|sE5*R34|E=Gx^?bg)0w29Y2H>#I0if)U2G+y< zNnH;71SxS^(ML73QWz)?l(|xNd-isAl-2)Ejw5M=N$azFqZC#6D+-muii)xdrLfFj zQk<+k!l`Rf<xdV2HPYPLs00ejiy=T+xxZ8?E-ET1SBgu^EBx-%KBttFRFstgSy@T3 z5-5fLV*64hP+k@&b|!Z!rKA*Sl#+^~l7LcD>@O)%0)dipFbgY+i<P3nilR~_P*zwR zP)Y;-K#@{hTvl45loWvrh3FOemC|CAI#&t>1sF(GsZs<}O_Xz2;;&GOO9B-|N@*e3 z&XmEcq$E%VNh>KtqCjZ{3a%?DE>Vj7h2^Edh>Nd-xQgxOjzk~LV+v~1s8EWEiy<L_ z^76uf67ZKpGE0ieiz>K4yAqVZS5%rfa_pm#BOwLQj+-dj#20uK75bGT2#)Eh2$VrZ zl@?*Kl$4jD1ii9CNPBr<Ihg)p%y^j}@TKJ?P(=QcqGAQ8%dm*bOEEVAo{rLr5{SNi zaijJ$B@@?T1$-@50OLS`wibip_7`H_p#ULF8E`4}7ZsM;VFl4xz#D;#AmkJ(3FwNT zq_{9?rLd%^2;(gC2fV%ay-}c`CQA_6mQ_@gLp@bM-2?yu#a32QSnl8(;x&9Ftnfhw zs>9DS3>5|K1O7qL6hi@*78M5&hUN=JPzHq+C@zA6fZpSWc2iUeEeVRSkjo>47G6?b zR8$C<vOozIpTCU1N>l<x#U-VK_OgQjY>JDKycFs(P*emFLX8#|LBh*1`Q=5WnA_sA zVtGk>Gc*Q&ML9Nr(o!HPt$_F-=8D2(!GgUXSo{fjg$bo7c76O<y5xj(T_fH6q{~HF zI<8t1+-Piz>N*-74W?{KUrO%z4BOq5a{h{k2q_99CTVd)Ks=~b_<~2f64kT>ve(om zE@`o#Zj4BqWhP(aYXU0yszN%ou~o())r}M1X^pWKtzEjYTNL2l<uYtRX}p<g=e1gE zwX0ApNApRsV+k^EhPK<>;6ijlyNeB7n)H30rl}3;IA-N|sB2C>FCJO86v;j4!s7y1 z9-}J3be@Q%O{X+A7qqrVIl$u$Miw_UpPGhX)snWRD%2H-0X%vvk%r}X3#`Fq9B}fy zdg8{R99QPiYU(Vs!<Rx^5Vmqq^LIjFK()_}G&Hrh>Z$}d5rugR)?+%KO3lT2Jw~yN zt03Sw&LBOpbvr4sooif_OWt0dq)n4id@qcmczLQk%aT<)m}DK9wKVJ0LFL&b`)}EQ z&;CdDKeJEE?jYHxlk7I@3SwPJtY;AGDq>wttY;GIS;Trav7SS$=Mw9A#JYx9*Anab z#Cid-UP!F#i1i|3y_jTeB3U<(!GFuTpIAG@tW{#x8Zm35Xnj@8dRxr;O|;|?*)p&I z%<&|j6cXuYVm>1h?fmVmldHyZQ_)LB9~CpGm_^0GRLrL0Fe;9qVh$BYQ!$r{W2u-= z#qm@upyDJ-{FD?@5};xcCB>AKP_dLsWmK-9WD1JGln<fep;Vqq<-@30NyREES5vu$ zD$}SOq?S4=Pp6i8D$k&n!>K%zT4quC2x^&4>0Bz$r}9x$KAOtMQ2AIYA5Z0lR1Q%& zOf8G3{1+-msoX&2Mk=dRj#Igb$|q8}nUW>c+Cs@PDz{N`GPRvT<-ZOkR9;Ug*#P!N zurC4oQbO}C1N(9)kSoEyicsZhLi29~_*VGc2EW@0mF@<Ag^s(I(DC;H>H+vYNa(nS z!F~k19);gy;P)i_o&x;SfPV&l&jS8suwR8=7r@<wW&=JOa?k^)*WkAUe!JlJI{e;% z-<$Az3x01y3g3a>yFmUP{2<@&0~$d2148W|!tW#aeGI=(;CCFge+t%T@cSHoUqB*u zL#RCv>35K*?+G2<K*b-x`6F=n2^jwiY-k7aFYx;f@c$)r!td}qU8DtPh;-a)k;-R_ zR6Gal^F%svE!Y=|H2Y$aj)eSMzJlM^z<Rw%haN>IZ2<2}L^|P8Ah`_S%@Fiz_+2N` zNq2+$6^P;<u<wQ6{eXV}><57se^8GPf%9SbJqo`k;P)i_o))R{4A{>?Q+*EX=i&Dv zz%Pk3_hpezeg)iJ;O+(++@uHW?U3?a5bh0t-xR6;EwJB#=-vg~`(S?n?vLR2G5kIS zJ~dSS62PzF_YM4h7Hz+XqU}GTWcyW=ZT}S|YJq~VoDKH*5*4qKsC*;9SiyIJjSZj& za615oXf4n{<Zl4pjXx-yUnSe!M4`%W5-s>I{C<aDhfK$xE|=l0M?sh)2sIIb)J;F3 zBSz|GoYWB$rY}bK{{VDED?mqFK@ho_Ahr|X8CwvZaSeyB<?!_ghqfXd+Q#uWas16Z z>@7U(9UQ)s!*?NEcMlPSx`)ts9E~rDDAv`~{D*XWMZP8wdWG2WE7+UKnIeimT`3B6 z=ZeVoO0nZC5z-+FLi4p?)LqZfTg8q}Q34jz9}zi^8z97E=>IqxFQD-n7!5m+{8jS0 z*s)V2b+3{44B$fzDELITKhy2cb^8n5{z|vM)$E14b$gF)e}^`f@QvhqQT##tN&Hd# zmzV(mZGyj>V26|dPnT9mWTkY5iCJZWt4;7s6FkcV&oRMsP4GMuTx)_CnBavbxXuJG zGQo>YaJ>m`Fu{!`c!>#KYJ!)U;3gBi+yt*M!ObRkr3rSL;1(0S+61pL!D~(MIupF! z1h<;t4N&6ZHfg1FQ*x=_Y=XC#;H@Tjn+e`-f_IqUomi81OZQ0kN<_HN#NTg%518PC zCisvEK5T-InBb!(_?QVkZh}vk;FBi!lnFj<g3p-XvyftGoAewni|3`+38wryvmL)+ zlD=qyFPY%W$qZhRUNwEXOt9Mox0~Q=Cb-iCcbVYpCisR4zG;GQ@q&Jvo9~$DcTMm; z6MWwUKQO@$P4FYLRalT?Ny6u2ljsu@{L}<LGr`YI@Cy_C(geRU!LLp5TN7j^xW@#) zGr{k9hN}|pA55<wP4Fi(JO47VKbzpcP4E{J{ExIkCc;Yj3>nLGl`O87&x9$={Ig_o zwtS9!t}I<Fo+q!7C!Z&-HC+=^ToY1U<5FCCDXxQ3Tw_vPqf%TWQ(VJSTtib_LsDFW zQe2rSuJjaFT8hh~xny*m5AK~LdV!pRxm>(ZUMF9ajM~%}#l+~vso|dLgL$zJ@0a>u zw)erjfS5#F&q-_K^>XtDlLj%jiOm~RX)ckQFXb3LpO?we6#q?f^W~{IxI)(B(L-$R z72-;{xii^+i`<;zf0f*Pbt=be<UYl8MQX`i2dHadwiCtNC>jRIt_K_vu1zM~Y7i#4 z-5~catQ+N&V2FCYPl-O)2eZv!r04A>xjD&ovkcK*O+<9vC*5Lzx5~E};78&uviZ@F zNn{VPS!5J`{yzDDkl2SLA`B<ukV;{?-A<&_Duo(>$d8h0K@k;;qf(fWNeFF4aoVsb zL)q81k08hdVz+}|Iw6jcV82cXagGLHjYNp+V<0FXZa<gAy`7*~Zttv0;Ru1GJxXc> z3-RS^(WOtR5!@uB6h(7qo`_PxvyMZt-h*7gY6u~NUxL6TWXLmM1xU6Bu)_%%I!+5c z>?p7WGW>ReLbyj1qX_SjpAZx=o-;xt8Fd>tbI9n!D}|W?8MB~9$RN2Hz$TB7gREeC z2pRh+WY#9;<$ngr&L-p5gENhc&(=6h*hEmcctJW4A4JH+3rVHWERac`1C>Xb>@WNR zLJffxA&@&9q^PM%7(t4MYJp3#Ak+jxO3P~mCn*~aE(;;$gTbCmNQH$L_LMCU!$@-Q zlVBB-L!96_h>%0mz#c`&R2hhfL=Kx$Ex4r0s_G8HL)9o+gwp~j54?6-OpwH2-A2uG zx>zZE2~*#C8!$;DWX4w{Dv0Fpr9AC3-GCiR$gFUUkVTI86sp8dX3wq^LIRnypjt?m z^NyT5&kIB&37Nlxpq%yvp97Vb9Q6XYipbIH!Q~^zlvfK5>Dc3rAEsq@;nz?W<4Ncn zum+RxSm5Avl0}l1n7>RyS?G~GjW(JIzT=<)ehaLuq+vIN8AKWf0d^uG>bFq56pHr* zA0WmM5)W4knNnWUiI)N0Fmlp-UiHoOF+mm=FR7{&8U)h9z;7s7dXN^w|8UW4Gf+rG zv{HNrg=CRZ5}76l<;z;z+Lxbv%Bg?-+u#53&(k`{>0||2NzNdv$ZB#XIg6Z4&LQWL z^T-;qmYh#6AQzH#<RWr0Sr5zUjj)uylw3wOk;};yWHY&vbdoLPDsnZshFnXoBiECy z<OWg(k=q>^DbgtLJ=JD>ObONLa6T;Uq3i~!%MaF@Qdm4nh>PqyDJ%gXvDI=|&czoN z=gMJaY+PX%$YD#aJ=fkDx3Kkcn2wE8c8?sk7I@-TcCQ?^6{N*&>^?bcFG!Eu+5K|Z zQIHvTum|L@vtUr%$sUx$u7V+P7kfw!y9<WK-RxmG>?s%?_pqnru(x1j+{>Pp!)XPh z;%V#|IqWMK6Zf%a<#2kzLGg6<oE*+5$ctyN=jCu_!MJ!PdqECo6-<a{u@~j=pn{3< zLF^?tJh)(Td@%b}4iCwT4`Ej+;q1J4HhV@156z1YWlvbb!}8+8*r%58@B&MGIQz;H z9+4Lx!7iuak)a$lM;#R($-bxI(V;Qw7&SLOnq6QGACwnAh`nqLkIjjXWgl3>d3o_X z_LVi9pBK+(%o-k-7azyANvLl4K`A^wFFu|<B84V|3e*C1VrY^&DL6qK#~w9MlTmsy zM?Ges3i<nCL_KbxicpF#M?GPnO86^bL_H~SX(5usc_V@9drR)}=d9Y1(^0l_H<>5A zBeQp8d=b2A2YXlU-r%ExP_Tf#CxiQAIaCp>5XQ03IR$^xI~Jc@e<9<8UtR_WZ!-iB zurE#QA={Sw^6^pcapY^6eJzI$?G7GFAWHU)9Ga?5?NJZgk}F=#zLk5_%FgL*j~uE( zsm2-|qVOG@=x|m+iqBB6WyXXv6t-IFlBacN$b!JmRO;B-N>{fsjh&-}hm3_9JWmPL z25V6cuo4OegD3}B;ctO}(Nt`}I-?sDwhcqpvzwJ}{z{qM3Y9-Lp6$hV(0A$$;Vy&A zJ;+6YuZPnET)Kb@>rwC#GU^GCfce3IeqCq&y29Rs7Ss(b=xwFj=L3cxE8)XKGjqv| znIwL=*NTtP0h1FyoPDWiss$X*TwrmQ1vsB$3C&VxZ9tjC>|9HD)&e0ui>={Eh|Vg> z4(FvJ5MKnuqgL!3wPF{>dXZ%}X(#K!TrO^~uuC9dH-x*)5}K{f#(Hz$Q*3}kbJRI^ zF87TB?w50>p*e^S&LQfN>f9AO3oLB2WyLP<VJJ323ytCj*i{ykQmqNwzFG^2;;tbC zyOxuw<q!%JeFOIe{7sgg&^&eCO}yPujDNm5Ul###izU3E2VY^I8DGF|wS?#A#pkoz zE!%qqI7&TggC>#rPD{9ad%T?8WeFdZ7e9*KYY814Iwo|CdW?GPjAKafXflr7#}zRc z_4G29=Bt*_Fm)JL#{l&-0nj@vT0QNsuwBr@yP=1_VF?`<JPs=QEsI{`ZzCs%!Rc4z z^j}M8xH=s5D`1TujqQ@^?UJ(9G<?)pNYz;siMrDRkm7S_cz8Dq8|TvSh_Ntitf8Uf zgU4f|q<SnDP{_l=f|3~vwe+t;eHJbw)?0x+yPcw-6o}Q0u^s~Gd-YiFrR;tfh`M16 zdeGqfkiq#8jq`QHVErhv_86?+LDuh4tTxopfJHL|(4Xk6KcVb18lK%9pUpnUaA`)k zpE2Ao6rb}$IG<6Z9ab$|hn20chDUe9NO*=-Ptq!@o}|@Q;FNA~+6qC~jaHP@f+`m< zb4`H0P3Lr*mEB<t&mRko;!aM~oerNub~lW#-7vo1YcRdv8VajnABskQz=~N8EmRk( zi;P@9WKA@ZzZi|=5lly>k&d%%kdAY0p?ozT(vgMfr~&kaHZ2_&+So<5aDF$8-51-! z<Ho|+y}_mrG8=7rA}+P@!mcu6z03wN48l%*5U{!yW4PWHil`Aanv;%$%~tN}3PyqW z1|%Mg#MMB23liUE>#B_b-#cwMC~okL!JON|RiTC%4MMz%-NW%+kw$i}Eu<nGRDsj| z$Y}_2It4gAf}9=$PA8z~ZCfa=#y9Z6=qX#MDcA(ar){AVgC_#;oDF54^KSV9XC0cR zPK!)qFWR&Z<103l+U^?${yjD<?+qv#o^7{<7vw?jea)tQ)OKS0*%rx}b}hy43?u;6 zDeNXs5aBIbBgtP(&=4C*PRB`$CA69s%ZO6Yu%JQFu%cJlVjFu0lD`-d_#TAL71|dQ z_P!2@>_Z!Vl9qE}L>~h-bSM{Vfgc$N`3YbeNwZB|f}uV&T!&%E&ovhbwG=!@f-Qu7 zVFU1a1UuQ62*1GLP7L~$Ml1sMMNa%R61-#(i0lW9d#Sp#;1#0I#eA`!Y+m?CcKN&g z#|h(ij`vRhHa{cPNx72tf5u5NQVzF@>_6zy8f+D?EZDDFY%(9N5m4LOy^<h6mfIIA z?6*GN?WVVd{jL`dbV$1fL4UL-zRAnYFZD_jI|{zk^Pvn^*|k!EpVEmuR@)KG719Ue z$5!*DkoWDF_grxcCpru8p_A2<v54Sj$+dI_PZ1$v?+gfap6Sc^axco(Xv}zkPE6!l zI}a<QV-q}I^R+@$J9#l9#X6*rmivlPHou-0#Hgoo^RJyeHS6`D9QQYF{=JijztqlK ziy@K(VD%rl!Z!V5beWMmi;4-NUi`>it|N0fifyrDEhC2!$l;%%)6~;~|0ISK8bEXq zwSyoEDcIHa@M#!AJ)Oi)W7pWj9lV*SD@eS9u<Pv!4jX)fa7fUL3XvGAUQ{>QlNfLC z4FSq+1|>&hcC`{`H`~K2N%#z&=<z$_XOJGN7+*=)E%xv#5}t~bfS!ujRfOGYuOnZO z|Bw~p|17huCW56#IFks{Ny1q~P-=v;iD0b}&LM)WOgNVaVvTSf5onFD2396D!dfE8 z&B9QH!kiLU26x%J{JFxeTp=byr;aIkF_?&aMTEQTyYaXJt#63<09fA==|MZY*WT6L zQ+qyv+35pzlmMgtqjeX1(4H%_#$<0He8hJXM&yU>>|uMT8404YIycx%kU4wA9#y(~ zf)`-$2klY$F$ffuw`V^0`|s>&yFR)-V>d=Od+0)<UdYALp=fu_6<SBsbp$3tSoqJ| z!KvYc>j>e)-$jJIXb)YCW_J&J$sSry)b)hV^f!=g!HbDBj=gFRZ6xYO(#?et`MA71 zJD<p2La>c-Avj!k7wfj8f|rD|$Btqjmit0DNB%cacG%f#JR}B-Tte6m?h0N?gyk^{ z+i6EZLmPO*dfgtipma3$hP?}^m3owp#@@1b<-mmYU3-}3!D{P0yS7&O&>n{L#Wxc6 z5k7w(hM(*!a2fEq9lvnD65(?@`_is0(Y}UislANAx8yr}H%~iG!nz9{ATUVaFz};Y zpD6ug4{ajBO+*;SJNnP|?%?G_C}1Rb1tGb=r=y^sUvy$`KFT)IDMso9_{IKjf(iTG zu1^<EcR(tK8*`o24ou`qQCRI@=Qz5s18u;MeQ2{$U7HE%*i2AGNf+3)S7PGNMIIwC zr|)A<FLCe%&u(&-C~S7HP6yWS2H!|X!4^kofw};v+9;f3l~>Uu`>k5F!+SCIVMkJ} z=VoAtYs?T%)v1NBs#XjU1@G&ULv#`z<a#rROLb{MY^n`|OvdT5Bc*9&3`Oy3W)QdP z)`HkoI|N}jIYL`VcW?`4^k&THNXg=G?#5ntH)gb>d1wBvoQ|sqcEzg+s(yid-|g5< z&KJpjU|k@JyB+L)2lT6JfYCLC@P4(EJ>=-w;QI+1<T_D$#K9hMgsy^*WH*e#!K<K{ zktKW75rxlB7gAj$%FjF4<G?5?R|`6mryV`rk!uNi-q91fny6QkGkGG|3y!G5^{lWL z0qTleN7%~_n7nKzJy?f)0@DLwt|#jCB(#;NTZz`ecLMSTqTWF6Oo%0esmyXd<$K)$ zUOmAZApDKk6bk_NCeUvq>bBnWxQ2M!0bV`9Z9sn$wz~HnIJEQxZ^pv>#K8x6{Is%9 zIh+@{1ttfM@Y0_6QucL{_ct6Ki{5*9Yx13l;u?F^eLCQNa9}qs*d#(Bw(s(mVjt>N z-$?e8Ms~SQhM%9GHPjUviv7Z!+k>}aQh&vI&%p-%7B=t|PQ8J5iozLAw%VyR@Pkk~ zmy<UnoOGV;M1?o2`111{CyJFZn)!LoKFxfsGtmGu)l97crm1O0Grz#ux0$aqgJh{$ zS`eS=Gn)Cu&c4ljgBfIyI!FtWuBKx%ztq_c^YKx*+WijmxW%dOS~Ty(#=VPYcB^wY zxk@CrIN4Tb=r$6(jR+9*MrZd1pMqaXXU=qXtFuo-zr)#+ld%Dt@HL`%x0BuN?A_3J zv3s4{b29MTaG&Ohf_swv9{~UKx#0g0@ZX+j{*O7e=Kq9KZ~k}k1@n_maP<VQCWN>A zr=7i8{&P;0wWl}4mz+J2_0d?p6CvlXCDrbmPWEO}PTzKhZik%Rj-lRha<yDgUKiu; zz$Z>^EHDe}6Rog5cd{?~7RlGiMY7w;cK1^xdyFFauKyzW!6=fSQi|jky-0pdEt20- zi{$s-MY6(`R3vA*wBbI7e^}1aUA%vu>k3~;dg2!nwl;<6eBH%+=>@29FIO4iaK7S& z!rA2N^7j%On;)~~$L#qrM}EwiA9Ll$-1#w2e$1O6OUsY>@?+_+B8g?>$1-zP#j;@i z5*w5s8=M~-k{`>?j}6U_4de5jO)fs)LF)!lMC(RTx)Q8yqTC7AO`>uYST~E7tHJu1 z&}+f^kXWw+>lV?r6|7rD`wd`iCys3{)U)cm39RRc>lUz{C+=IpdXac;1M4N?y&bI2 zN!p!YeM)?HfpuK^JuaMVWjqJgZDQsNV0}cgUIOcOaZoo{cZh>~z`9c$^09k2xl7Fc z#LcdB!D<0U_fBpr>?&?s*wx&IH7vKS>^g4S*j8@a*$v!wux+kfu|4KwH*wp=ZgCll ztM-_i-Rd&dSM4zmyUk^+rP^a&cDu`1PPNC<*qxl8kKM)XbatOhTjbT@`reha#EWIH z2VKz&bxE$^#&zk#uBbce>12<%63aLA?L=meA>m=b&Wlr+r+`ht0)xrZh97&*wVe+{ zvMMLmRIyC<0y4Y}2Vtmp_L9q31n_0l%iI~dgQ#~HQ^{9c;6!Zj4novBNyka3){VXD zf;NM#hIPBT+hc=SkE<u@-4adP(jFVaUUNkUE%)UD-A-3@aCDG*D*XQ1xdjP#xuQeB z^*8way^~YFskiLqd`14Y?t+yfRM0zys~xN9eOG^rzYkm~i@ys+fqmpM7Is*RpSYq{ zO)(mu|3!UVEgF6|KIQe|WS_eb>BiOAmo7eSg#`(Kka+8ssB;VZ3hHA^)Uzd5fW^u9 z*l=iE(c#wNktJSSZ|&w`a)o3Mwud9xcP``=9g-_{M$<zLYJ++g=?vaYG%gA!K8*d4 zl!uIaaLj=;N1dJ6Xn%I0Xf@x-I0bb@vkG>R3><KNbww>vH&S>P;^Y&(UMCqirS5Qp z*WjqUg`Mu!G61RPlmQ$P?-Pfva<f%#jbyb>k}F=_9vjBags?ot!=i4;D^J0>$PbgV z1v|+aH>PI;pE;~`ClYZgels<mdZAqeO_)m(Ue81L>VaaTTgw4{!7p)R@3P?fh+XQ| zl8-sN44CE;4C&1R=O%OtZjA171Tmc!b|uCvck(i_v#Z>C=~FCF?84V*aUOz`ShrRM zQ5$A5cn^W~sypiKM6#`hpOWyqLGz>D8VGx{J4%rvS4hyDBC=bM1Zmi<?x-W-&-p{j zk>oa=#NmZyD7)KjEdOyhxz`=FB{#_QM1#D~jSbSp9&qypc`SaA-Mk$=tR-}C)W;jq zy-AJ8XmO8dl#eE57lw`WT%}KY;{vLmbobM0pGrm=t@Bx}TJ@5D-p#uOciGvCZu96Q zV*#*z+09D|VvoAG<l9$yO&D9?QOb2(Vr_Oo*>WzF^#G`qI(rR4r8Da4%$2ra`Qc#s zI+Pe-bdoo<x*d+g1yW;t>>aljC9eXla^6Qz4Jq;3{@5MOY>#ELPq;mledfl2DjWEG z;f`kGK-G!fU%I11ag6Fjns0cCKx519jNC`qx0;hihjvD)8FL$BS2a!~+)+D_VX=G< z?E*+J(jRpiUMqHNVv+j^`zaag;MfNU>+oo^a-4vk?g>3eaAk<2FH9ps4-xetg3aqe zTu7|&7*XTd$4Y}Zv5f3Reuf9rtu1?3abg_iQfXFuP|YZwtc77#ajpk9L3ZQ{JMjZ7 ztnuJ(2U+W3YdrcE#}2mElPk3D^g;>R*ae=@!-OwD)VaZjahkK%)ALyC&Ytef_kaJL zt@G%|tQTP{V~toYNsZ+)EtX9lc9{n!OgxrNNwHkPW5KDE5zD6JSg!QwXSkghOP-|f z9$)LhO>0j$F<+0bhmP(^?500LjP3Mop3tL2eU$hP#@_Ei5xdZJpTaL@<T1i-;TU$S zC-gW`;qM6&dXlJ55`Hpy8}|%8g=?`pF#dcQ;@^z({d+M14|qaP6ZL7r9`xwPoX-&T z88SBbEbhKMr2DGR5%#c$Z~Q+`LN5>%zW*;`^*qYiFZZGH+sCzZJkci|obpM{_o*b` zmx%h3?)$Ws%$G5l&tfviC5{3yl|8(rKqTXhbH;Z)xNWgh6yEi)_dQ+RwXg66rYCus zm5w9#r->5I#RC2enNKi|J-;@%eC=W1dbBki9(?Zh)UiFDZncYqx`_&ZJtPB%hwnTg z_=IoARDO?)3UC(%EAwZA(a#?COA@310Hfb}F~V;7yC<}R1a}~#)4i#yHe7YD@Io^v z&<>er6lkqrr8gxbt8fsSh#A>{mHC)gPrzed_N+H$v58Ce=e^zPPQsJ)g13&nl;G9L zn_ZW;JGcv%_qBNF;7wh5;<s>zH?^I<p$A~^c(n$AAJ2EaW?Oq7lQ$`myw8l}edcA~ z_TrCIES8$NAB^<iw)wwO3us&7<T6jq+pye+$@_P&{QPDluOrP&-sv0;zK-~nX{eD^ zhUB$D>dr~iQ+G}pJ1@<wy)|id?6NeygKSDm?I3Sp2e~}W>>yX9rFIbPepjX?8qC#c zdYZ1mxcyi(L5O>s5%;z<c5_nPw?N!?rKM);?zBX!x!>US0CFotZg{x$xWVo5H1?#< z4VP-q1Noas{sORlIgOv_VVS&=7G8iG1RLTD*sI7XfGv71o-G-i-b!QdrG?(Yk-S@d zn~&qcw}{r3-Un_UrlnNfM`jv7Gt&4uaxTI&769kn2It*rY)@+7@65p8W0+!0%?;Rq zel`OAoW_1hDyIKH3VuuLXVCmTO&>HHvFd&1@Unu#Y^AT?Vd@N@KD;txcwME@ulDsG zxUhcD^qEcmY+OT?V2aBi!E1ebg4g=k1wJ#u7y9bhMZSI#d@%+u6$!B)&F=uMl|tW< z&=Kkp{?PYC{hs)t0@Tf5{Xo<o!1|G>KZ5lWQGWvKUqt;ESbK=N$FNKlt?>x((?qjI z#U#<J%Ni%oi{X3mIW5giu~QA1#X}RK$C7>jgm6~5YQg;3f{bsWrP;xt)S{~5>?6dM zC58JC$-1oZ;N&Dsis)j$dL=C-7yF}_t8gEWtCuw{>=m!3oH0;RE*F*-7IFFFg+;~X zhBPQ=N(ywD;$?w=#gHkE^2B9ZsyuPGCP3Uam`K`l7#9}?u6RVRFD;#$8Qjd|W)?TI ziG?~)Pm~~wK~bTE2y#$X9GWn1MHl9+aADpev7pReSrSAd$&>qBK0C-1<~`mN<{dC) zc@rWlC<;4`i^@*xsu%E{6SPrjD92=mta!-cM+2H$+>#KR-Kn=TY!dBI{F4(!Jb8{L z3jp6Y8ZFK%tRYY((^_Kf_+GR%C$gj=XI^6)N~?h?iNzx*^K#*=Q*#m|3tN}P7V_7K zOPeEY_)K)+(q%0ta*b+6qzh4S(Mg;#!r#QV#+EfLZ7VuBL6At*!AYrt>aH~?CM77Q zBvDKr*n5gD?tlx^9KR1%N$`k)NvY0uz^47bwICPvEy#tb1<Csj4i3J)d2=L@%7qo> zew1Bp$#Owsg?24dkwPD_xruCuu0{oD2#Z$H=CC`t=>fa~?OR0crCb3Sk+9JdQ&6>J z3aTC-l2K5##BzBnJz3gUD{XAxiWBEIwzi>os)QojaeJ?--a#(;zocpRN*7d)wM~aB z_d7RxDVKg~*J}7#A*GzSaQ|aT?m)@SWWc6>$^Ruyzi&Zny`Z=#V02+Q5GXCr>Yv_F zUtCyGQK~2ez8)feJw&_FC-CcGa}d-<A)?Mh8;WcfMC=$!hb+h_*<I{c-7mG;WEl5F zQpw3JsP~t5Eke0)cNzMPBuia>O;Mh#4A~>GiTK@+g^6qu-l(12)g31c2~dZEk`4sL zutF;h5tRfbm<E;UJ&u1OBsL*r(^Soafu9Jv$LM^&`3Bakus4+oSCRa^Nto>&<j-gj zuKnYB8~Tym@8ptaYBd4NeS~E@b-}N_B&NFN&z?PV(fs;3i{?$AeYDSz8Xj*sSr>g$ zvA+e-rw}!<)_o*w9J=2O2a-w6MKc%fH>+L(n{_R){fV;Pn~>RL(XxLqUPIQkDG|D4 zzZv{tp{&-K2Ob9`w3j&2{$x<^r-;(3{f>Wcf=e}dg?+@AaxwqOa@+=zyJ*9hXP*om zfENswl+uDuE?SdEz(r7|Esrc~!k#m?MVDh|Tio8<)`acP3SF_`=w*?m&Q|CbSW?hM zT1^q0nnY7igXUofMKUCsyP6=c^IP;_B&X&;%B5EkkdqB*s;L4-2M|=Pi-Xr>m!@h~ z&W5&Ct0QJFOA%?>OQ!tLeknD-gdEjWA)!+aAiMh`rPRVj;T_{Lgtl^lgh^s6`${k+ zrzC{VqD)tEsxH-)i`dciUmH^HQ>CILq#{Y}O$}*Ht(feD_JYQSzLF~48jT^Va-V`L zryW2c^~s;rknOE28#tk{WwA1+1->>mT?}J$qb3YbTnfbpeXVhcL$kQRT~~7pl;ixC zy5^Q>q*-3p($eNSfy47#W}+8Ykew<|Z~(!8wFi)=zMr4{Sz_1zaSb?oQGJ7p?fnyD z)>lSZKO&Fi;?g2iX<b?_7x@Fla+$xx-=7>U)VLFnD~d~s<<i2E61k|j2=!%`fKePM zm5a+u0&+=N1wa9A_)F!o@{$s7?<5Q)!YM^V#-EVqqzg|%QLkKr5*L)D%TChdB^ff6 zP;QbY?7TlIKQJu~_}#jaZu?-8HDd6Xtb?*9S*x>D>$0qMFj2G;O9S7=;1f}qE8<q1 zRMB*wrBUMJTDZ9iZcRU$G?bEI)H0G<awr{5t+`YhOQk$2jiYotRVGlWfZ8TfGMQTZ zR4PQ(+^9*dh)Tt}Hf{;EaZ{;+N?fLnbO@!D)LxZP$W5gnSJ7QZrRh|vr_u~69Zv0a zC`89TkJ=BX(mX27r_xc>4u3UV5BITL7573ag{TzfI=N%i+DIKIP)D5W=Uzgk7HVIL zin^UAQ9H!mX8S9#{Y|v}U8L53P^FS8kp9tBnM*C_!`%7;VmqIR)O8`Dwu|6*G5pp8 zegko7D_5{=UO{lA3&iWl?#L8;!vXS*0tjz#dZ)r~rXYH4wuX*bM-Z>v+R=m|Guy@G zr<{B$H~-1a)416|xP`A3iLg?0oS|8(G;6hHovB%8Y1Y}Ab&h78t6Ar1)*8)POEwZ2 z-!*O`SCHc`BbSrS$(X2yxsr&8SxGvzP+JID7_uqS`~^o5Pj;nnG%P3VTpgV_yiyne z>x^R}f{n=2w8zA-{D4)=u@S*atX6!FYD=pWpls~Z@J+CTRtlK{aUK^DC~;NQ2r_Y3 zRm0Lk@f;r!?8M7;e$V4Nznx?utY2gl`{d#eE&Hnd#$&f}do1i2uCwwuT*`zrZI_Ee z5?)EsRK*1)aUA=Lwz|OsC=2^5tZx2}8(gXtU(6ZkOHu9ICW3cH0WIUUZz-U+aIJTl z!WP1=CSiMb+|I5gA!pDDE2Ha4$Q5$qbyL+d!%c!NGLCH}=DRlwdj*+x5xfUzynD+7 z^iG}WPJ&9i(?aRp!E_Q&V{aOqx%O_Vy>PLxPm#;#q^mXqUknmVyY|B6YZ9iR%o&+N zoT3_Sz;{Km*taA!2;tx$f{L^2@C6)1{2(f}{h8|lAH0M8qAUCUl`H$!4ygZ2LPJBt zxFXkKBsdf|-AOn*C!UR3si9nQ(%;iGQ4iOYwyGn8BS?HWTdgU%%~|f7gm*sz!dW6a zOUGecXN%$N?rH(}oGU`o5;0)<){2-^PCF_xnw_sXhpWTYF_Bz$f$2Obau8c5a&WBg zaJ(JK{nR{e=JV_1T!s32jc8mBK2^ZW9UH~)ctmlH<r7GJJipJm39vaj+^NHOuk>2Z zw%|}m%yk-?ZAFc?HauKfi)DDT*yYdPv6~zw+%B?P#je@{i1l_cS7_hC?i97+#KXnA zIIK<t^nF@d^K&)Ty!>GyA|@e%C-MPKkt;{?*@GJBjZ8uv%Gztz$pqhqvd6@3UbBTl zCvbgS3<tX70rrF#F5>87AztLg^O0vz6*Ytd&u6tFL>07v=-!em2TQfoObV7k-*_%L zFzQOi^pEFyXUFmMmxqefqFXgZv@akrM*{6jSS)tDO8o^Y`t8PI*_E@3UlQC+W(nQm zZgK=cbGEn>%sCROH$GDSNo22y_?V#r?<!-t?P9O%<yM5(kvY6QG6l6KV`Njba_j`U zw>d_0YY7P+3|!vhIocjMguTz9?(JJJ)jWeAilIXb<^&HVkTUj>7?leaWQ>JqKGBL< zh)iXlCe_+!90v4Z-Zs3nfdP)rC;{**9-v1nyDhn5CxrZ34~cJJzu|BXPgdm?2#<HY z_VfyLH3a%j4}>Sf-=_pZ|HIhNBELsr+{La|tC#yu*OVdGs5KjSWdFfj9S^x`k15`x zHBHFa#;2*%)Y@Q>aH8LkXpv47(9|KDM0Fa`???biK(@aW(TT8<PnQ4@)exxf7?K`U zg43b1uEJ;04h3rbDFQXVPQt;YerHa{j9ob$hwByJB&?HmlY_~{V4f&$1oI^63NV}H z%@Vs<>Q=`?5VlbY&BzsUg&8wM2+c0x(QFUSB<Q+S!soEtgGX@JCaGt;ddPNlDn9k@ z(MqW^I9o)`#rQN=Jrd()o296%9s<AoPE7cfQja>NN1fXlRos}(PN^rVfO|`idKeFU z6=ueX=X16E6H*@v<3k32Xpy?ek1t^Tp}(kq@#C{Ye<-R({h^o|^M^ueh#N_#aSIdb zkZ&H-cMFW`sY+3Te2tivEMb@v{F$AtN&BY=k;emb@VzUsb1wqohQ=kWjYr2(=~aqL zC$}w%w=HhQy$O#2=ssR!y*qvWteJ>+=&I>3HrpbwxLA2*5iZmmZDzn!eH4TGl#Nz| z18R3mR@Y`~VUu7Lo~-W8($tD+<9iV#$D^-+6Uj|d^9JiyO{Lq|zNz_hTHJ>BWw<YO zZT$r4tF3KJU!s)i>qkja{|e<&_vVzon*a70Q$nj-c3;X~dxWUn0n6LmwbM2<t!*t@ zwj4&Q%`GWTR*AT8y(0hbYIZYKby00kW1nic_EykP6C?V18T}UPVIXe^o!i&jkc6)F zrM>X@!#k=2@ql#X^z}B!7L3GhI@3&0A7BO!jp{l0&g#5)V`HlLevLL+>48beW1V*Z z;rg!>V|YZi5(FEF1UU3l<86ACrfB5a8(k}^EH#xK<@8UcdGeetO6<gr?4OqV@lj^q z%C=lhCoBPLj;3bH+}F-X4Bhig%|8bvkc;~B*7vaboW&&e$jA5BhWAs8mn&stvl=yE zHTsA*ks`gR6$}_zZ@pgT9-_H>=t;1wMuE<)#wIkX2%6Qjq-k;cVvIQ}>1&ll-ADUX z>fZJK>ILhoGpm2ar+ZZzHfEr5*q^QEzFW(wTi)apQ=!$wfg<ax!3sa#yc)4clco{< zbb?d@Pm(^W*-M&Fr7?X@lxY7+`oqTWedz4nXh>^6>UjE7;^W^t&;Fak_<={IWGx7~ z-Zk;)6AShkD5)K4o85=)M`j1=y#sDNPujn&XJe-DXZM&<kwXP)CnzlqD24ta)H8ru zCz7>c^wIv1q8>xniBMWnSfK>UQ71!j02Kig78Rr7fui!lLIn|JsP+JrT9lWef{c=q za-j741Es0zDT-lQQvzmTVTrG%rMWq>R3DE}Nx7*rB1L0Dk-x0MuN2`<w^CSGS_1hg z^q2Ti|3-1~-W5=!=$$AjD=t+Efki+mDk&^41Qv+FOhCR$QH4XG9E+;hUs8-1ROApS zt0*jo=($#eKmg1_e{p$fpA%}iqBH=-8$cxtf#Ql{)Lv1JS~!XVrI7IAQq-+bgbG14 zT_c5ol8O>dQ3KQkYKbT+EQVq%D=q>y#f3%XN^v0+IV7?W@>%FFhXfauLTcoSfWKVf ztz)3Q`+*KP|5vDHuxagc>5>!nqJ<$@{Q|8$CDz>DpdA6=2^QDqBA)~yEQ=f4;w=qs zF5f?);XvU-lZ_)$nU>~V4Sl*{R!c*p9a^n^X~DWwk1vg1Wze)PX<l0JIgurePBjUg zq{<;xe?yXDha^RkcqGwFi$k)ekzN`dOhsq^ztHWFq|!n=e(d*HrlhpIFk3&C$rwzs z0?NTzhYUKzdT2Juo|=7Fc4c-|c6D}5_O$HMtm#>^2T#pXv)Z!0B}y6*C52jTrd|Xx zh-4D$iChB$)s-L+J0*q^1mdQ|Ly4D)X;ku2Ig={dDNZ&eL#Z^3N+YN=l1e#L8bzfs zR62+s=j7vYjx-+6a->OAnoK1>wG^UG1gVq~JiM_@A$U|nf;6KJ4{0*z;HeDZr!w*} zR5~7yVaQ)7iPEeFI;fFKCr~L)$%#}tiAv2hi=W3x{5*y%ql4RN*2z>ng_2XL^j9kV zjY@x~(m$xw0nwZezZHaLodx#U@H+>7YvH#JeisocZh+rLfG;DqYlvvOmPoeih(yJs zsQ3V(%E?rE8Z3x#Cs++sdLJy{W&M)SL0=Kumqg~$|A%}7zuoX-@Y@4^-;pueNl&^U z3?40zp~Lbza>>vU6FPE*VH43^1W;}XK)Evj8gV#4BW9xSEI}wZ0$c@0qH8YFE&#}X zG(i4i0V+HWpu&Y1DukgH0W>%Q@x%mS=wkS_!fzE3#G!)+pGP`Sa3ygUo=-Z~5a4w& z>9~N9su7ovj`c(+y_5)K#E8pDM-~}6dNb*`f?&FjzmkZZ<SMd-Tul<-^(MI01aC0G z8_6~z-b8L8H<MdU>}@7^y9wT5f_IwWT_$+93EpFZ_nP2+CV0OIK4^junaNQeCc-0x z2#=b+kD1`(CisL2K52qa0Vnbdd6poL=S=+bCisF0zG#9knc&MN_=*X>YJy!R*lmJ6 zCb-=MU&9351Q|<Uc9`HU6MWqS-!Q>9P4F!feA@)yF-z`Uo@aZ)>phd|1McNaxIZ+# zJ~F|NP4E*F{L}<LGr`YI@C))iF#m!4NXSoQ*uRMQGx>%5oBW69;IHI21N^TE{%(RD z;_0Fet}wxsCU^#bt3>%{vRXV-JX>5z#+)UdlZ-i|59YMqh=2A*oGSw6JOi^9Fl)qu z^GzDWTp$))m`bxwEVzhcB*dI8UM!AD@n0_%Y%oJ$JR6O8^bnWy3UR4ea9OhdCb1yJ z|8lY5id2r9#Vf_mRMZw7RVX6nIdYX~4htfQL~V++;HaZXk*^xXH_}RBnB7i9QM09E zYJ@Z*PplT)qGFjE6VeH-;KHKER0_EQvCXL#1`+$j8o@&xM^+12#Oc&Rx-6B#2nEKh z*;T?Y;yD&&AbV?2T60=@wU8mBN}uCUAaj<i1sEi0_TWii3uMUg)q+#X9y-hle4I`) zd?CtV9-(MNBVAxS93;o4xkov)*hW`Y3B$>lW2yx&$(<S%eB_|?8X=R6Evgg-3nXs{ z%2CcA7sBJ|@rUBM^n`;dg#v*T9A6{2$i%}?R`R4U$~T@|%!Bw3tririFi^Az<ro(q zRxQ{d?Ior5N}-TQq-+riGR_`aJ`Dv!R}7B{GMVD36iNkh@Ly0|@gd`Qb`Iso+avh# z_Gm7pc=*%+Za|U0!z!z)Yo^r(>!#PwIDF=;BWBMza_+qOP#MP@d)%1hb8oMC?v01S z%lBB=`655Hcu~|2y}uE|QeIqQXG&o?FD|q5q_C0~SJ?S-*ixXxE$m`hlXBH5hpjnr zD+&j-<;896J4@J}`+MBZuB2fHP&(K(H0;caJJ~bVuxo7G#V!=_aDAP~pNdEh=cPnH z1m(hI+&g!ZEa7f(H%vqx#`91V3#CaryiG)TC)4pzG%c7WjAM6;DBgz4j6eZU$--;y z6}t<R3>2h0oZTk^;$e*zpL{+dhBCT?8KlGQ#S^+m#ZYE<FcX{*IeVN(sAl!3gAx*O zD<FYAA{Je)(1WLq-6*Y*i@@C>*0Eh;SGO{Ry$(e;7K#qf8-v++>W*3DC;wxB!FM`? z??m<k1{ltMf->&T*|q_S`Cnr4F@LAj<!4v%TL;E5e+!_uN*af)61!3AMqi$UZBiY( z8LFups_7O<lm2|C#B+<Kc9*0Jf0p!Q-7AGg21f#LpA^ao=HMGaDKsiHy1+hTGzpF( z<Jg0Eltqoyyn(5COTt%pT>33k*}Yh0A4pvKEvD!LX*Ve&A4%*JDLke-K8AfJp~O&4 zRP7fWR>!W`>79bdo}5!o`XoH!<S>e5yORsX{8kE$KumB10cw1J$T&qXPgt>&eJ}N( zkkBOAwByuqx@_7XrEq#rJe~a{X_7GijaeEW8n2F5C(IbHW$PEoluc`4&!7z9=lG=# zlue6;ybiPVilUYBD+=pUG<l<MD7sK)lq-xve-tcTOobJNvti@gww%A-dq=5b?<rwR zH}sJA6|LYuRl<%O=m(!GVQV+^lrI&%BEC}eiuhX5D`L08E5d11#1AN&*nwTt2Pyjv zQ~bMv(Lt+0F}OxvHluXhPKz$e)ujoOwXo|fT2`)uwqw!6w%&kJb=^j|Co$a97L<hs z;XD{_3JwB#xEC$#WlMKxqB@Z`v{x*3tP8q%H+1uEOL)@Q_$0R7qG#qcWb8%8X~5wf zWc;3mccsa|It^J51&>d3)}L6|XWY9xGMRmjVSPrTPDcs1E2(~SCLKeL2K3of3wbt0 zalZWK%o?gkz7|E~W*7{*k->I~r?0>u6Ki%O*6bTPhc_sDi)uCdAx+fmM-*!I6N)vv z!K_-~p;zsvw2plaV_G*<<rgrdjfEj?Hw{~IpsM#!Z4mt4NYD>dui77}UbR2dM1u?% z4e~ckc9xOsjVO=zQY&6GfMgFc(03vF9xI9$2lQaPr}S6MB%-%lyJ|~-`3|c#N*)jC z++_`WLZvfGg}8^k!SOg)MTW39xnpdkjJ>6yp<W{s+1uRF6)9)$a;Tt*y=M(os1?B} z;yCt!HFPjyg9k%;Ke8I)ZQsK3{2Y_;B_!bxY{OPA-~wgKe5<jC@hNgB%3J3jj_)<( zRCQ`(D*MrjLKiskzmk*qZ>#q8`PGVN^W6Wxnm@EqNNa~JJSh)a-AWsZ{==&;7X9kW zavzF5In&06Jv^U3%f`b&Ux^&XuOXbHA)rDd>FhjPs4_2Di5G@!+SloPoAy1skc-e& zWQX%Q%;QFz{#~l#-=$5q-DEl0Vq=%ux@xN-+na2A{RCZM3)OT7YY2c_Y@uo0!D$4z zuxo7L+HkN(tz*~PLemTW8Jtc!!9ES`@w?)|?N%vX%dWG9>%%j8)WcD3@$`a~L?=6g z=yWrXuAXhh<PMc#{r&;JOJu`KGYP?3Ijdq6k{+|>#USCUiEuMmu<k?apW<U+t|Zdq zV4WsE0p=M*c@nHF%PW{o+G9gG$lX1)Gg0=vk=XWK?D0gBP-4{+Ha+=xP2x$Lkw}!g z@(eF?u)4QzL4haF+Impdj%7=57O;Gt`)-dMfijN)ipr5JlyuyGfuhJ2D8?w|<ruTF zH*6@((bs@?#Lgwww`}ZfEi5*hcWqItTF1wqx?7jWY$%C?eVp6`zT}ReO8{TC+lKNv zG&!)$))lq!1Yo>gQ4n%g!PokGn<2cj01Em%F1vFL5ze!-wRYsR93_JC5iK|yrxp@~ z>u^s;QJV0@yagN6We_M2+R+6>xXiwrTu8{}cDC6LLlAx#JMEY<p5*jx8<y{6TkK)o ziL)qs55M4Zt-bF!vek}XF;03I4|#(<tUF<F+6E!<6M2(8_2Y7jJzUI*=ERHHt@dyc zcN`fnVz=S#lMxn3_KA?{yX|-_2j^w$iEy_aCuaBA*?soJeCmFC%6#epd-8nh5qqc# z47{7e9<@WWN2Lhr+)nlwI1cBId7U$=aH2EP81i0#7*XCUq-VM=WifzLFka?aLXVy8 z(uJe)L0X-kE8ffp?1D{%y>5pN_oki8F2s<-@Wvw#c?A(ZwX@Idp~|tm>wkgS9E~@2 zf_(0KFA2p$xoWN-#TEHOjcTJmq^hbvbb@+<A4ORDLrrRvet8Fsln3<2m7O!KdwnvB z5BTP_H?=h)U>qwNuhwev`+5D?ZwObj4$Nzd#7+`6{-1t6+HWE!MOu|sL|T?LwzfC7 zIg>s6d+Qr%XfV7Lt^{4-3eg?fzIl6FQ*)~$&JTAuzR&TjrY2gy1~PIlWoZz*wTDQC zleRBujW?-n`@RG+b$=_V|H`%{uy%yz@}iOPm2J9~qSP$$*E0V7j<Rt{1G@R09~mL- zER8}{9?^J8Tk(D~N-F1+n>yO%oy>j%S(dgeUE0{7@PgFO{-~a!?7cOSTz|oSCkps0 zjmws`EGyjaAlODQgu>0DKN2n&X=-j?)|gS%+KOlEElUv5sId#|H=|bL-R^+rksJR{ zzf0a*_3&rOMP=oMa#49n1sD}&a-g)d&~6rxTvS?A26Rj1qQdert5M=IYKVsbfg)R? z41iMrIQh$q<-&@R3YS8%tXWc)bC7i~$tKxeYnnA9Ym|~NQz9uAYPC6tD9H%H?1qTB zlqi%~_zP!#Bq2Mf<ie*QM5K~uD8b_hdpg(5JV-y0kcLrlI37nhMpJPNwc}ZYEl<Q# z2yv2)O8l8gIe#{C2$c?_lGipyf-k=$h=SXb*`Zj7FMVjoVB*Wn=@=pS#tEV?J$pjO z;PGG&od`DgPwp6uAsl|OuqaT>%@S^wa<hz^72G_Sn}>39DmN>+S;ft2k~P|9A;XAG ztQ0%~AxfoS!M73k3|kseC0K|&vPzJNl2aup#6l_sw?OEqDgn=FssxGH1Y)ZscK84h zE6Ktq+jbj&vTfD&eH!byxDQ!5o9vObhuexUaW}9^eZAe)1C#K=o{-cPlt@s9Z)H&! zR?4|bE}3BwVK!fkll=lNK|N@Nsay$8&~vyb#Imq0WS?OdA~rA1R}Ka)=$R|14rJy8 zW``o8i@$G}in~CvC@aT8f+{gVgM~^~ZG`AbhiMe6tz*-ZBJ@Ip^{MHZ(JMVO(araW zX7T6d5Wz5rU^YfDLYU2t#OLU^27zhII5rpeX)qB{pqY=eova<WP&|qqg$W4`5&*%D zL3+JNFc-(7pE@{KaO3sw<2B#ptYWz>G!Qw#A>a)2Z62tAG>9ppWjC^$j3*KBuoxau z%_E8)QN9%eX>)={O!J808w}$Kz0Agk#-KVFKN|RiJ_~T#6Z*K+_x>;*dE<Gd@r-_& z?lx}DX;+IO(8%O_8<Tnko6<YjpSf^czkg5ZdnMuE-bsKFi(kdHAtAr&;E1&}w=Z78 zFX!MhQ0*15by>^F9Chd)$zY#?(l5&5<+_BJpZcT=0RxWt_4{`RrB|XB_LF7fdWsw< zgE2Z#T3k4EfNXhtbJ(xjlnId&fwDrYe$MR88j>{>1y3jr{@%}u!?MJm`N?Ti$)=WJ zwrm)bhf8>LXn_u<$QH$Q7BpM!z!}l9PfX9u$l~T8ZVu+=2oyy@VeFGCfr=0q5M^-j zJ#U%sd5fAz3JGNw$%?+O?Kbzd6{=XOU{+p^K2#{*4I?5LHnALK7=huC!Eh?&Kyye} zcT|olQA@qdrt-1xu&(WKiB;;-jO0;#eK0I!!%ZoFvb+iuSYb^4uW}@MoAJDMa_aM1 zW3nF+$_8xmM(~4EgF|gk-}~F$$$R&j5^G=9+Oo{JmWbETj3#TZ=UD#E{=j%Q=+lxu zq8k1zKjZ%Tj05A-2=k_fhQ@|qi#Dak^wk^~tHeDP<dJ%nN57%-rx`<LryUrN=9Wl9 z<FfiCY74(uJ2T;|KQMkv+857iX^1o*-L#~k<>Xf50`dPMZjjHq1LFjf%mqu6n{e%c z@mUr*Ihjl4fpO8^;PVpi@7C>M2gtPzEM%(8L+Aj@Tz}1xoXgn<%4z9LSo<}n1^|AJ zq(JV}Ktw&jiosO{_6OaaRiEriT!}lt5l~xSCv%*7fT_e=dy%%r18g@9jRpgL7w-UT z7;0czVpdUoD&BS1ry~cLtftoadQ}^*g~T>>`hoHa^80SF##(&{PI_x)=l4+gt-o;t zuupY*>jx5yFn~M@Pp_^p;GC>%z&V)_!@@q_WWG!;FD);#o0W?feM>6rX0hTu(y}sN z-)1ORl$DlR|3B)!13s!M`~Tfn=Dq3ZfzSekgc4v%W|9etDP$l@69VeWOq`U*WJ$pk zP<Ma35k;|gbgkG6cC72#S6vqi69m*%SJ%3(E>E|*?k@jx?tO3GObP_~{XhTDKk(i= z@3wR6x#!+__j`;<Pb>?10=dHuJ2B)bD>FZ-6a(H+navdbVj$r0i2+}r!k!}G#B#qs z=u8uxVz9y+(xF7e@?b?-*3bsSPjkJV>|weYehKRdDJkXjc!REV{X#4QJrPP0tjHKV z2_r5>&^>5U5Cb89xqHy?7ei$spF{<sSPuST(Bmn?T?U^uPs}5E&b%>s6Z2;0c@>{X zWCE*Yx<kOrGEcEH8Ty$>@g<~5h{M27m-(5pWscQDtP(FPepw00$~;*)T2_vcm1<e3 zm6bYKStKjR%F1F{St={bWo3n|G|0*cvT~BFoGdF5>m*@p5^<1+1-ign`xTA{?N4;T zo9Ko&DFfDXS@34bfj5#1q4QuNmk$fK0-(opoOJ^D+9vlG!hI^e7t#APxbyas{$kEC zgCh=SY5y#an@e#G^UL@EHW=P3>HR2rpHJ^q^j<^n3+O#e?+fX@p5Bk6_a*ecjNXr@ z_m%X%ir!b#`-$}aBYIy$?@@Yhr1w*Zm6LdvJ3lX@hI0`vvl{J+W>s^!gwL+#GKr8= zgNk`>4d*6OUJY(n<k!GLR?fq3WRx-ZZIE?r4QC^^f*Q_2?BlBOTc7dOTn=$gsOGYW zYhn$k`|g}tP9PbRYB-T(7S?bI$(mfvWsvMCHJp>=6xMQ9TDfD06_*2fi0TLn1ZL3F zKy|E%Ohr^jtFEU%FQu)D>8#Q-cTr8(X@-6t&eB&!%&!vtj%0y5_mB%*#%LZg0*PWz zIUkWk>%!63gJ0-7K<(`6>t(9817a*_>u#lce9p9N+ZHWbQU9Z5OB<>eTU(4EHl0OL zsN&Gu-I?jt05LO-6OYOH`2XK?k@{jKe`s6N&cGHig~RwJD>J!784cpm+(Rz;8ILu3 z3mFUh)N>+34p@l3K+rE@3<0i#;s^a-I*^ch2Ev*QmprDR(9*2$T$^?TfgLAU*4JC7 zs<^R04<fWu+DX0YJDJbn9ZOJ*Wc6P@^rVtU6hv>izbv0_U?_P~o<nlyJCqE%{hV2l zRghhfQ;=JbSCC&YreJJAL0)Oz93hL)E$Eal<a3CWuOl3ZR<})-?6T;zx`-@Jl*LK1 z=#r%wvNY2=gO|kuId_(vH(Sn|E9ZISJg+SH7;=%wz5^e}5yd*8e>}c93;D@YrxZ;i z#U+%Q9w1z>oUf=1&BOaq^nUbwydOjFRrFq6gZEl`cP*eX>xkW9#f@KEGwxroZ4)cq zHW7$@0e<b2ER+ah8cH_IcY#jV%x^5(0=o4P#?9eHxW(BoL`3#fMcianEiqZEr+_%T z)8&G&Cu3UUxs$bsj`Zm`o~BWb=r*d$gFowf@Jl`q!nAnsXJill)b2rpcpfx%=Rxyz z9{j|E-pt=wCrpUjliMx75e|(Hiknzr=v&KM>CqTNzE7ETFr2eNk&Z<0FZy91p@VXO zIH5hQvF_$L6Ehj~Hx+s|vTI#Otb3i(q!X4dRRx*k0DTOR@#rq6wWk*kssVM(VU&8f z>eHp1izd_F&SYSZtClK%MqY5Q;GlAF(GNp@8(Jsk&Zox{5`7ik3K-uZkLWA&RUlHC zU-Sii6(enMW)D|DeNNRy6%8qXA}s5Bp6<K}bjQ<WBAnr-rwu{Q1P4WI&p^df!ZR?| ziA3M}RIFB;&F1Vk_dTs6?0b%-_X2t!NAKecIr^N8V;YoAi=~RQarC=t8zS;naaPno zt2odyMTt5}0(G>|VXx@Br8w+C=Vegu`f$%q8Sb(ut%9Ld#I{R|aJ#e!w@Zs~yR-<m zON(&3v<Sk?L}5_6D-q|l*}Deff;MN@?zpJU-PI(<CC#&|3BM2a?rO5cWzClg2yfBy zK?bA@>y*)aqiJ}6O;>Y`b8PJRAf4HcgQhaZ@R-TTlTei-1U-V0Ygx5?L3KkNXJN;E zEeq-v*EQ5xT3Xv%dt2upbX2oE%^M+4&~HPB%=k!UAB~zZ|DeN*@m(`==8}WT>+!+O z8z?g&BJxMdmTu4>Sm7}Y8st!e21<%S0|%ZJ6Y{LNhBX5_wPqkXc~^!zlisuFJ)7S1 ziDY4R3<P7(pAYjQF7$-3AX*7RUK1(#8-O4d4Y6NPXxcBB#_SiEMhk4zXn}2r(E^*6 z9idjpJ$S=DDuEm8qtnekN<T=MTYut`#Y?+-+tjvHYXxJtvV(RI8h2iLT&Q`cF0>nB z-LURv$0K_w%`{Qye4tykqY$SlRHmmecLev!(>mJOTQfZ`$@EnnUzYW!;*pX}f6X5u zn0pY1gLcodgLY4v{F)(E!#btkqZm1Gr3XnD*kz##v=rdX%YkkoryO8($wDslKWZ;P zBD}!!ywXoqA&zs<6}G@^YvghC34M^-4iHV-0odW7;|*&(z#XyRGE>rf%b%5Dehy0A z;V}BkLM}MUUxQL(qZNv@jjvSCxg+{i>Ichf`g(i2(tZg_`|*->x&H+Q#tLci5htae z9;R8=_bC7O5=AVCAClOie;GQ$WQY7NG|Ch@TTcT?l8ym$><>u@;j_bR9o2#Zyo>Jt z|8FG)#XIVUB(+vQ!k+p&#NZzc^sY?0eh>%ako?g{RMH<5JKom9wupaF#*MAn`9ExM z7}1yfpneP5z_5)lbb~=@iZ!p>80&6X{sY^8Dg7Z~7+xhKCz$p&cEoVzF8e{}vfwCx zFc>7ZnYE9Q$Ez5<SS$+!11Y~Ah(TYl!kX*`V!-F~I@9Eq=&h*mW(^%sqCZp~${9|? z!Lld-Yokyw=tz|fxTEfc)I33m>M2WZ?2Cc&vVb+oKn!^N0nr!mm7C}hWfgw!*b!S? z43?L9#viPm#ByInnKP|+go>cgqHpi#DpO$U&8M6CioU7OXUbw8LJUY#=`PDGS(+_N zb7jdZOMY1j%2K5)9VJW0$WpZ|)yiU>wT|Q%yY=|dNWX;>toUJx9Vpzd=S4SAxL+@1 zp?fyGS#p4~jOowk_^~kG7r-?RuJN#_k|*@%6N^x|h1hJ9IBqgk8?uV{X(h$e>3t@> zm(u$jdiT(~kKW7ZJwWf}^j<;lA$p%j??==7e0r~<_ZoU%K<{Ca3ra~=rh=R5oVA*> z5n`+6+=RDRb50^SYEffx;>Nh-ssZiUqTrUh?8fbP#etjZRwr(x+cK&-7qMqna}MHg zA%3zm3lW!H*|@>(&cSVbs1=e;a#739G<BYAQ|B2I$wQqdSJ!z?5C*T}R<!oCoxzq0 zy1s+omcidYe?B$WTnMEEJCaq~in^8cKY~?TH%-nrnsr(VXZisdsNHf?UlR<O9$Paa za<o%`p00KVD`f?O0WwV<HutFo*41l6ThT!s?I|J5wbi)cQ)_PTLiCg&A7LL<F8M~Y z1WYftxtHQAFBknmZ<$0{i)Ee=qTzchl8d~6z8zx8%g)QC%e)L@ndhKi<ho^n?t+L} z=I)4uqt=>5WMQ&Mjo5LL#UjhDEusznh=o|_4lC!#p{qhmK0l^l>^OQKPwx}xeG<JF z()$$X&A1~Xh*cbZD&~ygGEkr|xU0#m-Eq1VJhXSGU_X{b`o-ATv>i`eEe6?Yk$xg; zkt~(pDB2PXWaXCZCpH2%I}bO905_+&1iX*ml^EDvFK8=q=R?pMaOXqRR^f8e0?XGa z5ahI79_@^Xf?t8+w`25#kD$_{y~irjBDQ{@-<K&`Zp6j*MpHLF;|ln&!L?BwJh)QL z0~xCcZ=TtcQvHu$Sh<t-hH6*T;jW0&_*tEz-8qupbxRi*@UL~9EvA{GMfD5n?7GJy znAOq^7}--SNVw8`mO4_rI#c`_s#i25{ctnXKboPQS{(-&>jqBh)Zr^Kt=0z(abqo& zH0v>f1*h>NB>jViyMHvpeNfq{4pLs>382|Aj~FZqgv5Z?8xZ~F<z-Y5guDSiVr>Qe zOcDTH?hhGK0On~$mjVTO6Y?g}ZPA=``;~M<6h#4yeToqzj+3SFvXD(JK;)vm2Vu5# zJjjH(R3?a=)n>EjZxK)=I2_qIxp`d1L@Ez#lldt{Q>W2;F};`2`*eDrLGLr^eHOi! z()%2G_Yg-0{gzarrUv9ploJXkTf!Ern+XUj{eB=US)DMkiDA)d2XP^U1*;VXr~ccC zB!^{dCIL|;5C;kpD-$FunIOqD1xd)<c3NSY&0NRKW`Y0_&n8i+)ESrd6PI)YiCRkC zam#*^VR?*1<<iW!Ohu3+S%TkWX*(&le>S%hlFlJ`&*kx+C+sBP{U*_6P=cTkQnUe_ zpm_<zPa$~!8KM3)5^>;BN&NN2I23!VLrfJuSul}ju^(aR4>NG1!p8wVO!!>F5B;@e zd3V=Zm}z@zV%^D~pp%<mY3PT;g*+02v5V`%4V;JoU(yN$G?Xa5*U_T`t{yHkFeCzp z%J8t|9nF^P(WCptV}yJ$)3P4Js;sxnn+jZ<Gi;`exjOiNWkXiqh~@N++5dMNvbP>J zbc=1s4jX^dMNqoW_%W%=z0^=g@&jLBbUSy0R)E&zul>^cuJwKE-HWSNEUas6sIF<O zU%H^~#O&r+dvjkqBFV;JWrx2&^jM9RSxa`~&~;yK<8W&}dsBDU#-7%0{B7J(8(SZ1 zYHM#pq*#55VP>IhxLeiQjbL<gHC>^f$ng5~3{M$xot*r+UuwitXc;sXa%TOn$6QCJ zd@x|lk@Q0Vr}5Pn#yaRH3d10WOVtY&)Gctt@B_1vV0$N|eE~A~J3@Iy-I8Ui>lWw- zLXA|0!^ak>s?uXxxe}>XgNt<C!I}2CUh2+Ny8SJCY&`<o)4lRcs!>7bLwx1s_#0C` zg%AcWTqonNO?v8szmGe}SC7+1>gjVw@qMkK%FG=xk>Pg)*^cpH#WMDWUFn^7=7?zw z*}G2LvrZL@78b_RL?5=+j`i^vu6J6jkjCM$fn0h=7c^yu`Y>Z4W_V+AuoRCNIc>XH z-(Vh1Xh?tdh{009cySnG+J_Mu4NxM6Z|pQ<Pie-8k%!xrCTEaN(xx97CdLtxkvHd( zsM*<rq-s&1EO6*=+L$rLq~XJnJFEdXoL;t}8=0g_#Cl+#s!FuZN8S~iJR&<|FK~oi z?BurF!KCpanHY(%@1yje7ZrUr>al{TWd39n^`d`VrHdyU1AfJ1J)?`dtgqLIi+ro8 z=Au;BHq@_%HRhocG3G-(5#J#rnER`GlwtNytu5WLjYI2scu6*LkmS~F){<qbR@OC! zm({LXsT)_wH*s>)5$BJqJ1H$-?z+~~hXzwvkou*r^aijp_hqXZ+=HsuJ*e2W1$9O( zXAY?o+Y)M!7~9dt^1cAp;Tbf~3t$m$%yq}Lp5D|I>t>U!f?3CKF3569sF6FO!F4#? zgQ*9RokqMgKw;eu=*T@_#Njx?SB^Fu(96?|i{>P)w5H5B@`kpaHt;PwWZ!Eu@><>5 zvYJIAG16r3>FVySIekIv`ri1VM;r@mNTTedwq+`bq*>o&6xa9l#9iqTM0`DZR9wP? z6geXaJ{IGfnnalDy?FCUZS-huZ^wEOE}wKpYd0)bJn-kl({^|sfEhS2?5|jR`kHzu zRXWPz(z<b{rB+lfHRB7zbs(*|^()L156MPMJq9r$*?Pl;On$Cxo`sy8Hn*g4FH|WM z#GKJg9A>QX2dmb=4{8*t8MMfC>GpNzjcVTRY3*!Tkfw)VTz8r-UgSwR8tUj-*S6j` z%8~;9?P$X?=p8!4bY~JPf3Slt7Bay-*$C8Q%n%nns6EBQW>jc(uXAN<a~~)_r!#yH ziVI@z?CUUsT9ac#Xz6M`bW^33ob-_Ovqv$a&5~!O&BF`3yZY9Xwb{drdA@h8buD`1 z$NUpVoXKel!BJ#kHQHNZbA%xS^bLuM(R5GR`If2FyR}9CU6vxafOxkxt)$<aR=2k^ zB%0h|`3b#iz2wJ2SJRJy@+m#K#pJ+Y@W)>W_3!l$_Iu$dMv1Q8G<2CsCVywn8Ey>a zk5CIa!{sh;Fy(E;Y!Ai7FCR_a7^969h$?E%IjPI?ktbI}*v=kJzfUfDEj_p@ZOuqI zqDF_qq35Oa#j|&m;Y|+7ADu@rCz$K+l;6t_9WP~>e&~@g!V3J*5l4`B>0kDRMw862 z!Z76+r8Q~J!`a=68%27*<$G27vj$Ae>-$ozSh?1BQ=MNI`-d*e2wJKP8eT0PwJ;Pw zMMvmr6B?>(vf6rd2Fn?{)|Om-4~iva42qoLhU%du-mn@m-_v1l1ERL84<|SQl+j_o zfRO5zHq@<1|BfPW_^EL2XmXOG=;jSSV69YxM#b1Wy82E@@}N7)fzf?=GR%i3%#uy2 z2SZL11EG*t@&^3=fP`jNf|55B3i;8jidXVggzz2=1S=%JzdRI>yyd}Qxfl$3Ae=Yg zK?5niP(UpAl$S}~ia<Fy1bt;*$?pjSePYN9fh#J|YD~E|h-O~AWqvW}_4y@VnZE)! z215RjSndz`fNi<opZqcg(uI^Eu|N<K_IV(HFXSl;pmmsF$oxbG?YVe8zz#$Ee15MV z=#ak*=pdS8_W-|&ps#`&c!5%R0s%3Ac5}QTPq{z+i<pqV0*dB^!k2sfL5N#XA(s2R zW#-o~z|HSP(=g>hEJ3imLaYe*;8upo`aES~1*9vMhsw+Fv@KMcx2)VN1_B{S&R;=o z*q}+EV91YFeEcDZ;0XpHvuK&e7lK-Xx<%_Zp)#+}k#;QBSK%)oPdD{5@+2iEZ!G@& zrcBK%$(ybC^XBKzrpK8YlvUCR%881qTuzi7M0tcLdr02*B<~#Dx)<q5CL7^JJ5t#> z#Qr3qCO?dCWr<<zLx*$8mPxKm@?<ezwv54ZO=O%bkC&B+vREjS$+C5dEEdURnrthU z#pyDcA&WC*GE26X%F-NJoGXhSnRsP~PqqhSF(`|bGMOh^j+ULr$YQljYS8e9yhtXC zWpSx2t{6wGt9e;GNfv)3izmx+MCKc1$0@QHlf@?4-XiC=%3_-={a7aJWTjIk>t(T5 z&h3*$YVkva?3^K!pUC1*W%56=_%oUOTozB2Nk5UrGl@(#5m`A4=(B;|4D>lbp9}OB zctXnO6WIz^?uGDr5s~Ffh@5vB&{u%lYMEROA%6j{*AY4AdZ2HB=Z)~Z8=m*TwH^F` z79W7?K_XioB69x2L>>cfE=bOGKe$6OkHh1a;QchD`Yc3$4z3sA`Zc(}1i@d1=PPji z2IyDeiSO`q{T41r&b1S+<7L+~@QBLxT@Z7C$YbAvQ2T&>59p78{ur)z;QceWK8NcI z;PxfBHCXS#V;`r;Is3s?1D78|nR(gq7a}|U2CtAM@jD_H{2QMCf$IR)9mLoK*V(*0 zZZka3g=-7+oAcm0pO^WI;QbP~E`{qdyr5fM4t`hi*6Vpe7H<GIOdD!Rd>rVf;d&LW zH{k-l_D^{0C%h2EGcr6kwWtg~vyv6AsGK9yibDMrT**;DmDB=Nv;f`efGS-GRB1g> zQ;!8|>Ty8LS;BF1)^J>9Gq_Z)?T?aa$8_|^;ogP!tZsVm>5p^MHgMdujc}bu;C2Dw zNM+z+0uhQbuY?Cbr?Qe-McGQYX*Us$k5yLQOZvBwn+ZSX<jlv&ri;k^;PnK?ehU1j zWfr|g&WC(QpCOROo0vvX<`%LShy)>XGT#P5oHM7WXbbrR=|BD*@-BIcK*l~Hkf+L` zKN2kTr-TFoe}a(Q7V<UZX<F8w3C;31^pW{3=5SipUzy|I>0``4*xNtZ<6rb~%vn5r zTtFWyub_|RTj7C~yx?k{zlOh-{{?>?pCoTI$(u}an@QemlDC-TttNS!N#1UfcbMdz zCV7`h-ffcinB;boyw@b}Gs*i+@&S{4&?Fx+$%jpHhe<wSl8>6?V<!28Nj_<kzck6G zO!8MI`HV?EYm(2I<nt!^f=Rw;lD{^|mrU|ylYGS_e`AurHOZYO`I<?-Zjx`9<Svs; znB;&-?l#G{OmdG&?lsAMCi%8WzGIT_n&j_H@;#G$-y}aU$={pghbH-vN&dkkKQ_rv zc@Vgl5vv=9E2(i*aSy<-A`g;kE}!t1z@vx=8E8*LoQ)q+N(I$iDFM-4%}porifXQm zD2-@(#41&BMK&9;9fw~?+E?SZmyVfL+;omOThUsGD^$&mA?^j$oR?$-YdJf~v{!Lc zIg)j1H8+lAUj<3dA~~n99OT{suhU50eeftD`S*}oP9kIOC1~Gd?85}V(JVLz9%IS4 zWr(scetb1In@q^5=4OzII|xE9Oxjq@c}U@T@G^x=URcff$drrWWh$A<S8;QQK#J)1 zpwsfJxtXLmh_DMKx05O^z>(<}5i~S1;}L=|3^PSmwpqorJf#A>+U;caJp=(5<~&Le zpJDD2#Aona058SFOTQ)c&7ww6{PU~0N{*D>1%;4Fz`|k&s}aMYd{s5)ClxX^^Af76 z0=Wi~wjRGVo!4B=6_BGIBZvWU^j*NqLgx3ORhVNYS3~}*su4`0dP6lgm(<Wxjavvk z));^m#Sac@gQ>?F-R7}IK@g=a2#nsq&NVjRxyA-~|9O<3P2#+ECW#8gaY1{4FgqvD z5(Zblg^yZ_;}&f-o^?DiD&sdZs<kw0JDLU%Ic~<l)(vr4`%z+7%%(+|Re)2Xj@4Y; zp*2OF5!bOUF7DKt@w=PS{Fqy7jbubJ6X8q}&LA_iwFx}-tY+hp=Ws4RLyI$qyhy&9 zPaWD4kumBRb!?<SEuaoRW)9=flst7<pNLFIs1w5zh&m}7G0#s;Xs6OJg<5xHvO1ZD z+5kZk;VHm#BR!-|L<u3be~ljoy-e@~_aYr26D>x(M!z<y;9euz8&DGosEIeRB1I$K z#~ANZ5-C=TA)bT)trsJ-`BwyCGpFyx$X}8Dq>B8RXn!V&4OtG3i%d_1r<4Ba3=@4i z1k*G!fN5kehJ1fZliQGG1NtwNE{V<1{zeewoVos;(&+k65-lEx7i-^<=*)rmOznFz zKy86&|0V;);QwDjfi(5pUc^IgFX43?AF@%(t9Vw*t9b2do*C=72EY4MjCglqyu10x zEOi#dvl{Up(BnP8YY*|!S&8^8?O}{(Gvd97@m}I}%M*4Z-cCK<PF{PRXMN=jjOW1b z$Fd>7K8*JcADJDV4N?g0&Nu~0l+LAQR={uio+55<5r@G3`^hryV}3tbPCkYE@%(4J z_Ay_?_3hC<<?)+Qb#BjI?K5!c*_Sa7^1h#}6u#iKFR15k)uVb5v;U8L#MdN-ePk;| zaQ~7=s}l)uDdQof&-mTX_3Ya{ko)X`1KQU-LaDp3EVCdx-=U$N{=lC7B+7lyYv1z} z!hNDzu2z7n_HRBCN`ylM&501b_?xKRnkctP(9RJO;d$H)?L7SOCqooP=^ZTN#R5%q zFLaK5`$?R;SlCb6$fbgIsSpVy)T6=y0>0Yi0x}y2A5F4ufLvcCMCV6Bk-z|W1Ize) z?HU0MOrVjN9a;0yE<ihft)N{iM5d!V?SuQY>jl=a#zGP|2}Z}-CPZiMh7NVJup9bO z#?jz;Ckr@}_Td>wW8d7qbwk!9@Vz@3^&W_dJ`j7mfCP5L2e5>hI6h{e5f8n9Shz=M z;T{vvB2P-;p1=rM7-2O;cqS#nGc>|;g7#cmgcoRGleTbVRfe1)0RM~BgVyt}g=kgj zsqrf9Wr2RTuV-gxO6ogl>aPph>uIUKi4k(JgO)>tx6lUAULjJgR&UKJ1Rie-(dy!O zwe}9n1lExDE~SgZH6U!>!|1sfJ*b-s(mtWlY3$D+b_vA(JSFxQlrEvM|AevgED-w~ z6yD!q^#9P0rl~2G{|XDWvqYogMUGLAQEMX$)CDC)TyeNgnxUPY?ir3OR2L>aH&ajQ zu_#in))$9!g&Ep8rt7hh<J9Ar>$zq^D4rKbmZ(dT32jODTpC%XE=ziz$I@G_E?19_ ztWZ}_VSFKTT&b>98zQUJRgB5SVpJ@Kx#u#G)dpHCxm=8_rmeUds^ba~sv}>7>UaZ3 z%grKG$L+(EKYRl4xMP^IQ;$1`l>0<re%Fw4qwC$nl$$1U&oE`C9@__(_e5~KZ%BDD z@drdU*FGdtm?n@C$3v+e6Pc8FOw90s+|r&B6Ol@_a>oWX2h506Cc>3OJ&DZ-zY^K| zBJCM5q5cR(&y!+eL*`2$v0e}h7onXR=<FLI;g>}0>?iNV#9tE8`UZJL)Ls!InV314 zks<oYdozwgraOUYiCVIQ+7Nk7jFcq8B}84bHA{l`*Ts@W+8e+w!rtG+_g$2I<{s@; zF)@(y6tEu<acV3;)ngH`f18%;D#E=Dytfkawy3=eaiRli^Z^{XMWiQV0;Kjk-SIx^ zc%Uakfr+y*F%WL#dmz1W0tm|+>4X3Y7I8Qu6!uqwxLnSC4k;f`z7Vxf#po%Zf}Em# zF6wi^9_<Se=7PN$^>i+{mhfMS+LzRKK=nX;?N8!vHHwv-ftBow#Nag?BRDs(f%#`K za*BG&?r;<I#4p5w=X&-IByt~uf__UqBF$=ZxCQ+Fg3UQzw2RWS0%Y@_SnZql6>e^Z z3^YsdWael#H!Fqxnax(b+4hrdg!?CC|7Jq)aSP%91&>>a@I5?kBjUf|aXXRz1CKk1 z<-hQ_lgI}|tWf1l2`kjPNh+1Je~Fv-!Q*=o*p=Qzv;#mW+L;p5xsac>30?-+i!I{> zZ0&QTNNbZ-{ZW%O+{*VfOWL_olT?%uRtaQQ+afht)VW2X1C7F*FEuGeT#<-QH;32q zO_ptFk>*0FN#4C}^FHk&2@|4x&IU5sx3*JTQfQ?J{WoN8IdCB3B;<V=^0onQo6h_4 zRNhyl^1f<#-d6+fCJ{(cyGFvKuwdFHKn};<hTPAAR=ZBx-6ZNguP-Bu<KR{AbA70w zfi6Lf)<}}=0_<)#O1nHK%-jck_&&nlD7BJA2Wce(9XvIEb0f3?ET?Xiv|GTd9empP za2$r^ZBoWD9JkA}+w&uCX0tfcGpmDWchE4Ab?UkuS$R;hyQIiEbP2B`YCDbE0a5Rf zTKRS&Oi)DaUMbR6`Y1WJ4c0I-Lse}*<~uoZGS|iNncPGi5l>+jcSz=l2+$GngoGpF zNlAN5(nrJ-QgTE*DbW$38YAK<Nqb5%Mnqtr_O!HHUB3xyE;BhK*6TxJlVKVRoQk*y zn6Q3Uikuog6{g$gq=niGk~v(Sl=R_pB~<)N)FaZUHqznpGTL^VB!Ez#h>ADbc6(Ez zO2+ciC&{tPNw^zA?ZQxn*chMSpxT>kj9(FcFVrT8fDQp4CwGXgq=@UFZap2A)OLz; zd!as_A!M(ly~CQokgTXWV8z2&UyDKrd?S^#Nh%2@t-Xig1@)w?MQBxtz4T&CJJwAf z4cbRGP|Hal(pscWSo)77wzm3&vMha`L^h}!!gVk&e8DntvU>84ESZ4*iEK}%5l<#q z6zyvk=S33PsBWZj_M?lao|d&2mkcQ#sSC~jVFG4X!V1v7ldwX1IwYzGYyXiV84v&} zrd<l3&X!>Zq>RkLofNwrMs1g#>uDvkIw*+|)t}}*4x<+&hjyVQE$K@wG-;70{XZ<} z%Pq;INovv;T81Vqsz1Y|wd*Vk`KS2=|2BWdPp%Q}6?O<`{KWEePN?Mi31{iy&Lo_8 zGPj9v(j4wA!tt<DKO0uTncQR^hC)Bp4J<g>Wx_x>c^@|X&6fS-bwX~1#~Xyd!=l}4 zVbTE>jwlNEYPVSiwr24h2XomS7M#mY-iOArtlHg{-Rfy<rn|=izT4p)eYHC+yA83j zdjLdCW&-klp9N>VDVPxz^6?<e$7Vt^@gQ(d5b~f!d)N{=ha|%15W*7PfeAlqNkldi zbu-zKRfJ0WZo)rd(Vnn?V<Nnn5KKmU(lW4HJ(uLLoIXXlO+{`ks4ZJi0N@G<**#;y z<<WB%Tpqn((Vny5xTEW$7c96g(q5#G3<TlSUZ%dVFiPZLhF-DkUIhO7`sV{E*sGSJ z1HcPpu_*l!$KdOfSu+R`n9)Gy%2>{3kkI;^Mqll~oO>Oz@D3sPc$e__c#8=5ST4Q^ z_umm|mqmNi$R5lAyDW*GW=lpdfsDOn8KBzy9!ui+o;?}3#@%O0JO}dYZOiT~T%Wva z88F%*QN-QH*1^BCWE>46>OE-Hq-T?~oq4`*$tWZoRX0Aefb+H{={894V@s1IfyPp` zPb?V+;PJU7avs5KB~%YA3eO{a)`!?KQOlPW?Mv)IA>9|&U2IB~wLe*!WTPGL!_e;& zc|R2M1EOdaZ9g_=ldQKV%*`4$LbEkv0~N!+C)RH*+PAbWV5aoYx$G|%n9KAO!<gcS z#P&Cf_BWc8%}C0w{oT@JhrZFIz-_xB)xha|LXEO%|Fkq&p_t!UGElA4;O#l!46`(? z_}rgCD<7~V7HI>P;>@%EdqCSH<C1q8Dv&Fn!MDiRmn-RNX^RZCKrWKC^JO-l6mirx z<^}RXG)H*>NvIc+@CA^w%Dvj9@&MCTFOwsy2dFB4IUepRmaL-m8(i63E$hQ|^FHW5 zVhQV2aOs_DKlzk!S5uyM$T*1j?eI8Wcu2-BB|ak4Ui7GpwQPAt)~+>kg}wPYxp0wo zlZ+=$v$Em+W;t>Z3B$BKL%T(027d35Qx@<b4(^s|>l%w{CL}<!+Af2ZbFVyLw8vyN zQsw()?S5?b0kdTvkZDUm_=n`k#o%)>Aw8g_JR+BDfKL7>Xf4powa4IDbRcIO<m(AJ zK~>EsWn(Oe+Arl|4E>B8xr8){&{=nfFCh?7)}E7D_iK`A|AVF~5qNzc>SdX&B3_m= z*5dH~t!%C$V5**>?Ua)XiJ7!_%+OvloGvBFV6V%D?!SQwsyCoZXuD*6sWBiY3h8*+ zEu)mzegj+rRObqi98mGJy)rIArt|vj{ythH{k<HyjL<-r5fZ+faHU_-t)3aUQV2t+ zul3G={p@QQSLOR<Z9lXJuF9FP{+m3YUO}j0f)+(H3_m*M{0sZmOw@{A!m8+3s8ECy z>7Gizf-2D_xJUW36zwd<On0AluCkj}Q`Q-f@OcW=k6N()E&vav8RaYiuZ!RnR;4*; z+2<0)T(DoNMCTXA=WACeyN!7s7ll_UG;$FMUrFHgDupQoTNTthfe+P=SdY!U465x~ zC2|$n9lnY{lGmZJ(OFnGJFzs|SZT0rx6zW^qG-1&38q8bhK3Q9grP3b)h;W<&*@C2 zL{3hCW}%lP46CrLMzox)=q|}J-Ir3P`}HzCWQ2l}X%8#3a93k-cBGf?5e3MbVU~GR zFXo+T<=X(|dlJi3iYs2U2>lGT$`t3GQMBh2HVSF?xCV>=JO-U@1btZ#`m&<^CN=0U zFzBlobPfisMf=5i&^HuqmtwAQBgu^-Q58Yk!v;tU;W~gx&BeXP0j%`56}C?V6Dx`* zO!jT;K;%8RFX!LKh7dkbw0HFqzo(>bA-%8YD)&C^18j|EF=H||$A{FtNmM-pbP#={ zWT1V@50oYm<g(Z#?#_K1D(hoqK)se^%>=Jc!E5(+L-mgI4N#R6CB`3F8=$^PO?>Xh zkPb}lTb+y1Jb%NYd9Xjlp=94H#->1=`<@nQ6R3y^WImx@N3!WIld=#E&eDQyvO*7n zf}wW0S3Ao(0D35HoNl&8G6ss#A{Dh(eV!Hi?*Qw+7ofdRFU}!oMDudABinyHp$sp# zYFAnl>J21vJyEX*VH!eV`d?6rtlHKTk8?4Cb~SLjk(BoH+YN)a1L{qL872OOb)j~H zH4)y1BK=0>=;IAhc$<}VgxjoWO_uJ~-35u?Od_`s75?8!k~NwL-$pp-6vv~kXN}xW z)Z2jpTIjx4e^b{Z=xYwHcJ9-iiVnoqYxi5Dx0Ay7?L>P3va-V(xdU{zJFxtZ8rgar zv*ni*QMyHhY&}hDVgMmP-oFBsOUC8^Q>9??kTJtggFbK}PoA@)(b);QvO0l49PN4Q zKoJ+alV~rdmn3I8Wb7qtw5s%CK3;{EWsNCsr!_g{y=G-o-YzR{mS!CVYSO^qWC&_G z{2nXLwZc2_I9~kFinFWqkyYDcO`R+EX>VKET)8`CuEbr4cdWQ5f7iO(m@KET$<p#3 zwNbknM4UcZ%G&!@n8skTga{v6VYb}OW=l!?$chu6g!)7Y=wNj2vuJ;?qC-{<wPxF7 zX_DN2)Yq^T%)DW9e35K8m}99KcHIHnF}6NqKJM($6r7mCH$zkSc5n)RNlQWd&KkLk zsCSW>RG7f@lUkQ|lkJ;~opbGbYvdlH-b1L1Ro_cjw-dHq{cmgJUJ||+Tj;;oRmyOT zZo?jYzRjEv&$r<qz1*f<Vxzs4cK=Il3$@E_k^6{th0TyW;rj@kDzCD^x&{Mng+SNX z*oO11wgD9IbYCQs=A=rkDm`_(v7jB$N90y!y8bp>WObx+0CWSYyxn1g4t5oGusiYm zaR84fGt*G>BTo>R-POy8hduC|^5Z0lZn~8p4sw1$+lIClYR9!V2_8AVARTZ#HO!Hm zn8%M0IkBZ{W2d+bk`cQ$w085Wmh*k<%SQ`NpPH39v7VBVGn!Vi(VUPkA1yZepghno z8Y_ZcAygLBQA_>abQF9?T3&_&_zeUqj8pRY^pw0c9mm2YiwIv~9b+7ncQT9`h80Qg zIrN@O?|B6bJ#rke$n3zpsAJG@LRgTjh(*J&X%K2cLZ}H~YC&L0QDP_O=ceKF4u5hU zF(qa)ObPQ4y@MX2cMLg1@6fU%3Q9c>-mr68z>W3I24NVSN@$?PUCpuf+OE#dbYO=` zlhTeY3=McB$LWt6B@pINuFx6$hsfA)rE)E5>*?+4K7E)&+Xpwokb#z0Fu}H1JMCJY zLvbG*Vbq2Ljv6J*+_05m;`s(V<=Ml8v9j;CJ6n6*gM9SCa!{iJ=_4uR_1ox3vgX<I zq<m}Mm@y=8JalfCZX!^$$&$nElqI(;Wyq3Kw&ct5SZh8(gMrp@Ix0RWg%((up?$zi zJ}W0Xm)`RxaP&EmSZ!7Xdc1;mQ3?GXMApIW(Fh0+Iv03ImZ6~b1cqb=2<2H+XwSxP zJLb?~!dv7?;1Ysm+B}@zX6``+qF+>{L^U@<A=*(o)T>lNqfU(28A_8=b$XalK)6w$ z`nWYI^}jZy{sufag9l7|=B{QWR4}vuYz(Y%cpk_MS2;M`k<(2OU=?(|LoLLJyML zdgv)DrKhino;a}5<5qYGz(J`ctvx+xw(Q{9A5!ilEZQiBz`TPF0h8;RVe)T6oB4g^ zqAyT^R)qXzqOZaeaHi!sV{q)G-Ahj(WYIC;*%V<<L4dbWm@|rfmNHR5=jAN2EZesT z62X6n{!a1WUA#LpBa7a%={<+ubLl;g-V2CgwMq=pU50+EL!2>iGemp0AjX;5^LZWH zEDhd0)tUpW=#GYd>0zHidGIqRgf`<nIE`SBF2lhPq@eEQ6x6)}@q|Pe61(G)R+$dt zJ}zQIL^BWGa57PnU7kx-bh=yT*4HnoTiLgMeOGs~pXYF%Luee`t@Bdi>5`ot&@`Rr z4&zqY*3pVsCk!2db}I%;ao7nM&=iw~i<m-Z592TEi5#>?dk&%TbhoZauLB(hsJu+{ zdi_CTLb9g>63V@02z+hL%Y<HFk%=f1W(_OLnnk1(6iiD$yeSOv+Ri&%PB*=0(0exY zED402fS=lNLM;`t(A|iLT`UFqS~OuGb0QMLK#F=V$gLd;7KI0v>hVw#?FRyP0RBM7 z{#M9M#a&8<Is$2z0rT@Z5J)hFyZXADTYFpvRnvz@YaGC^+wfBi)|u5ND$9bd4p1J` zKyr*TT+EBhgdUcjYQB-=s?HwP9<9_SjT7hnWLA8mgQ!YY12nw5FFipkux5RG*042~ zJW-U!nD*ujb{-6mw$TGrEg9_O{DSV-#vXdgM8RWX$i>cte5`M6ymw-(8B*wJqv%1W z>qY?DTJ=*{Ew0woGjA={MgyS3Z4gGlM#ybTYiCdE32`(DmG-8G$!gT`eyV$xgGvEa z(=uj=OOjJ-OB+4i<~9i3XKZ7<tGn$CTm-bQY=-)2U*6S2N8qH9Jd$a~dpp{(GTjDY z)K%+g*g@KQ7d0$djP6RKKG3a=9Wg9pcaPg3^f+$l6wp-7MjAPd$rh+-UE9ViQ)iiu zb)D?AxYUS;{Or9Z_tb;XlZJ2iBsHdSga-2tA8~}xC`Gf`7)T3|Up;(yCTerqI`tW~ z^#?Ns=}UU4EpJk2X@UlC?atIqtM;|Wx@)Kl8UyHA*VftNWFeNcVomo5y<O|=9j&pR zzV24!WQp}OLl>Vpd=8poQ1`G-G<pG@IT(b3f&AdCuQy7BNRPVU%{7auV@TjR`CM~4 zNQpCfc;2lh_>Z9rO&LC9?;yyWLj{8rONI}UHsokw+j_7+yUgOOY&)Yh9aLZ#=&eyD z5803!(E$0x;X|WWiq&YjvvnhSS{vJSyW>)Otf{qKpUIOL5*ew|u?VJuRN$vW0|5R1 zYp~7=6Ah{ott~Q+jg_sv!vU4q7gRS?>ku*rt9WRg5hjo!@)jFu)L|jr5&EYgq%pZe z1%Xt2!v`5jfMcqM8)f9Y8p8h|c})g^R7M!$Df;LkLO>eR4?dl<fl9{<!^$cgK0Nb0 zNWP8Hg+WHLj^#khSc~<5he~JUS~RA^gXAU|1X8i~8mHQA;LO@;QDDS)iw@Egtc}Lh zI|5(B`yg3M27#<)4>NJk9zNPIAq_~iQHBP7nL~7fS%-*kggeM!9U2xmjUXd>_0I2D zUA=f!9l{eXsc$$~SV+oF)fNViUNmx07J%ALrx7Ty`qYubQ-6vvNPDM?;xn`w+K`=1 z|I|yNy7B4ltv2R}HX^g?SGFOJ19h)$Z_|Y(wItbNr4QWI8=rKm92!B1wX{%v2Scc| zuc}X?GGr#H>OPpaU`kB^ZxEL*TUw{YbPs3S+D@2ymIDg}Nb2Z=NeWex6qp?a1?vgj zvGo=mLM%B>8k^G~#0H~ZQkVz^=G9PlVnbv7(&eif3e4EOMm-xCAS-KEEL*%dCH)>Y z2$^?I(w)@}<vlGuxxwB>)_Rk6znK7iK!U&f<U!F=y!0q@Mv{kJy%b`mGQA&Uz+~Ui z)@!Pf`6H;8&NMA0bI1(lOtu|DqDr*R<OL@!tzJ@JOTjf#U^Ns&d?|*oNWv2;#{7_x zEUB)`J7B1+G=`$A*Rbc1r5#i}dtJ-gR$b|JV}!-fY4mr#se^1Jaaq@crMe}{8%}cS zZ_JQE-h#St^{T}UjZ5mPSFT!7x1jNa`UMS(C@>;9LE4C67{W5eRu($iItzwGSyI20 zMYF`|m<DCNx3{Y!n|8KEbqLMexV(D7g8HQk?d@jv5O~pL<c3Lu{2^(x=ov<^C2gHF z-<c^6Eb6#nv&Ev99I96J)SR%$ZjQC<b>lML7=uh^1TaO<ccQ(h=H5P-d0+$=B(;82 z$I>JOIgOm|JyafsB%cI(oH&vkXWlx1qphuHSsw#fnRzH)W>68K4o5(nO#K~1N7owx z8FBddBdk!9Nm#Kn&{2ZWp(!1Agjpj!kgX{>RVuCeOg3f2no5o|caJHRmUXtDKE_z& ztj2X~EgfFWR6?`97m%EMZ058z=ipk};ITeJ@KiK5#EvmyWu${T7KH|3wNMp59Zr}5 zj~)aLm|>EpK{_jjo;?f%=E%sagAgZ$`XzNPDBA`I2-S;fY$iC>rn$(gmL9is*$GPx ztUeoC!>xijE@{orMnM7Fdi&6@bP`6CS33?l1EgnYF!1HvQAIbyGk~Cx5snU-opey3 zbd1a~)C_M&2h_a2H4<A(HyZ<^>`>`by#kA6n(i==OT%D2jf%lwZD7<nOH&eR4~N|d z+QKo1mBvuj;Rwv*B;oi|cNysBdquz-pg$y4ctc*ed3?@#T>q>98PwVhOzRhPqork( z;Po*44ENMM`po*lzLG!WFZWA+Z^&OE`2)c+kL2@~c`KwqsJy%^Yv`0Bh7jGz>#gty zq=3&8@{Sp4d7ElE-l4-@QCUYkN=;j53%X0VH4>Ek6%}RWgV0;0Kt)9mcmzX`8?WEv zE0=<vGRR*b<o8341LYoy809M$L!t5tsVorkQc$Bn2vYU=JWw=`-zSxMd{8uRMTHN; zcq#%?nHO=6yupfcuL3fsb!}Jo>GDEUSYz#yzsw(mWS~}{4*Y?#3aAf%S;&zpCLvR0 z73FA>#1}MvZh<QF`T}E?QrtEW<+$^fVyM=_hEG;4R8VZauKcaUpYo+L1e21=LghiP z1Y9BGUVp$Jk^<gPFrXOATzhNhhPLjm&JHwP)(O*`4YyGk2MH>~<AYlCK@vW1$WsQz zC@T+1W#vI=Ca*8(fg<^XKF_#=tXrW<{bgPRhYDa-2SV7ue(V-rUm4Vz2U=bV1pF1y zUj87Y?)8PR9z7xC<f{O#UQZz4fshbc?CtJrg=#N{@|3|}5DL)O0ac8wZ0K34#@c&Y z5mu`_kTG~CR6<J=(9fV%D-iCh99p>oa^y##EfM-=2(sv_fPMgZMrS`ZczL;}909C+ zKIlC@sKc@#<O`bJR{@!WOjJlZ)A9fmDNqL0En+=FZ}4JMhddrgJ>aE4V^|r!Kv@tx zJ$?ih^HE$fA9NwVrwn1pps}E0%6#Qz&{~jTF$6Ex<j}RJ?C}l$j$tU0_XudfI?j5E z2?M1bq(m4*iPIDk>pRzG>jJj{G-jACDZe}eT&|5;7&j~^TiDMs_7+$*v~|)ZabqXb zgVlGcT{fJf>zKKq;#2#&dgtl0-8^I3Vy+SupVXRyjY;qp?CvU+ik8K6H%M;lgc7&) z3a7XBxG>OyR!~?eTNifaQrubW#^&ccyQtbz-44srOw|8Nar?ZryOb^iY%0{s2~-iX zcOr-O(xxt07Nc`Rysdd%C#<-v_(pT()Wd+X(cadqP<LGNQUaDu>oK?+-xhYawS?Px zamAHQbF{wgwAS`g&<rR+`G#X1ZSALLB3a$p+Xh*T^<V_I&L!5e0gX7d;O;g1MXIa4 zt6S^?O-rJr)Qoq>dbZSFK}(^(EQXRYMCBD-SQ!wv8$TbjQMc;$_3@aiCmw6*+6bMb z7umRtSKa7}y9L^IC3U0BGR=1bEw`Dbxgyrm*4N`^I~2)E)3-5bwdJ?L>a@4CtFIRy zJzec>Eu~l~Mwm9}HpaFGvT`BDDdNg@wqW(T&DZ)4P~1f9sws{%PRctioi#c8=cVpJ z&q?keNVFSdC-<4>B=?@P(jrhNvAoPvUP3>akn?PLj=ZwG`FRVK`n(1yn%9`$sGLG! z>S6^=1<eI51+4{Y!P<fo^Va44bWAMoTB2M}@@^t|w-DtslJ^Z!{z{ZBymAqrx0TP^ z##=H8FWDVVieiUmqVmTO1(KUg9D5jyog@nuS+vTM9X~Q6ZbY(^vScX-VeI%kndHl4 zj7-MLgd*9I@iLhplZi5!Bom5fN2bVRs!S-P9VwPciA*S}9igapq*NxeWim%5b7jdR z6Q67e$Wl34pX85{<)f(q$|`DuvPPB`$WooGgk|d@SvpRZmdIqeEFCXP@VY{_t(3`X zSvpZBKa!=BWoeByLS!i}lQwzmk7cP{mQI%o{zrD739g%nOwNYqxp18i*TwLDDO{HW zeI=2{T?Nmpi9G%nM4oUR&^Hiy;*CUBwh?*K&G3FJT(`k>J6w0bg<<Z5>n^zNhIH<M z=XN67?uF-l@P0o$AAskBa6JsyBf#S^aC;oCC*XP#()}eopMvXGa6JvzGjKf%*K=?^ z4;SLuy$H`=!}Sv6<rRqY8%XChcz+$PH{f~`u3c~qz_lB$x8Q<?l=i~453aYNQQv{* z@8Eh5uJ_^k0IuJ|^&zD736Tpw1^RQizJTjXaQm9blQp2fCGwQNz!R^3z;ytweqNq@ zHZMzG0eucHPdyjt^WZukt_yg%=t5o|cQFI9lXM_E>2kQPfa^+Lo^};HujXavW?r^k z1J7ST`0K#!2DonI<>H&b{T85ah3gKu?&PhH@Vxa=Ua)FJv_1y(<Gdg%PxG?-Ypf@D z{su1K$$tppKL#4>=WBRkeg6~OE)--p@Ni=r-vl(2*>NAFalc@_PmpBW1A;v9LAV}* z>tS%;Asj`Gn%lC`CLqU6_jANHy`n$Jd24|R91B!%F;Ky!Kn0ee+bW=rJ^`qsJJ78Y z-MWxkkJPCcw;L#L4^UOTKvnf2wE?M(816KV3!cGo3x5JG3x9?jevTaa2}V7Oa9q`9 zf`QLLhadt#*@EX$`T|N{h;-FOG|VM5(q$0Idj;HVkK*lRynRGC-sbiGk@Ww8d`vjo zpAZRZ^`A-qR|K;8H`2eKke>wqN&5dzcv~>|J?a0B{0qoH;7q>%-{e1pJ7E(KEbb@Q z@|!mENL<hNBk>5inGy4DW6$Qh^!K~<=RNv!J3g_3uP68N{C)fb{Qdlce3E>~Bp>E2 zgj15QJ4~M^O!7&S{G~}gWs<)#$!ARRS(AK@e}N}2^1tR^;t5xjbbi?k@rp^lYLdS- z$(<(onn}KHl5d#gn<lx-Boih%V3NB{@-36xW0HGKa-T`QZIbUm;rMs?7x~}m1)Q1m zde02?zDa&ylD{{}k4*9pCiw{>!*QRPEF7Qn95R`k4Dy8;`j000rAhwDB)`Ij_%pws z=2J7>zcI;gP4X`$`B#(tn@RrNB>!QO-<jmUO!9k^{I^N|$0Yx2k_Sw(Ur3T?n&c*v zJj*1{Hp$IGvc}F4u&`5-Ugw&jwm>N1UH&`)!<{djWBOcRk{6le#U^=)NnUD_mzm_{ zCV7QPUTKn70dw*$Fvjf7N;+>fLtJf=*O=rlO!8V<w28_0>&#MLPrVA0UN@MrZZyel zG*of&{btka7L&ZyByTgx+fDKglf2U;?=s1|P4XU-+-{Qh3XcecdsKK#z~272z&{~8 zDO6VeQUE#jl<+IzX+eBOc$z#XydXR)EO=gc(Qr8rTz)OAc}aLV)#Vjo&2Q4fyeh2u zEp-vl<pp7<uprI<HDS%`W(?%>hQUXV@#dfyyM#4~RQ~~CO`891Va;3VDee*W3j5NX z-X7}o4)T3D)#Y8oMd$Q8VNJ^0d%}XW(C??k$DDkCwUHL)_er*TA|DFJr3LtCNGAR; zB-xLJHJ_wr>l$(;NqPO0<uaMTXOw43fX@d7_(C}GkLf(W9316OSk{$1zI-Koty6y% z_Un|!8`NjKW_GS`1oAq0gIL|57(PjUNuEN0k~LGSxF8XTR9?g76U(txToniEX%!c+ z*@)6w&6N}DtSatlobNN3tNj@g<7N}bv!sU06hOm2u7)e*of*%8bAV(%4-Y@d>TBi{ zk{z$+LL?_v4Louuv*>w8RdGjiB;Une$6O1^l#sD`?6u%oQp;tLamUqilgaqSwcJ!P z;TCYpAQP{HfW>6eG#0Qhmpv!<)Ntd3DN~CI*!#3!5X7J?9tS0H5K{62L9ET`>zX)$ z%y<!!$R#sp)^J7AtkT(Y=KdNoJCk^NYq?3po6S=2T>*}z#Qzcm9xIduf>T%(l~2GV z9i*bCmK#q(FGHvqq%w;|nwP_#N4)~ECXk~`C^+Z*wrZ}D9CHl>okOZ#gmUDO>LQl2 znvDoPT04m)zM!v(lS$pWW=<sGnYG+Bve3;^T(r1`o5DNmZ-Io}!m-CKURnjpB3a^V z<}CcuWxpX!oJ5wl*K#&;d`B(kA}gFMpDX8AaSJ)p;9%*jT3gLkkkv0iCJM+2;TmoX zIkC5fn<$+0qmwt(ayewptB}ny68SAWrjzJ0%BHcshO-K#r^GsHIH%Cm+;SS?n6~bO zR2)RzP{U<oMXrt88I!g`_WW@s6pI(gx}A_~J5*x(80OJ27LtYXc1~oO?8*msyPd3G zRK<Z>d+KYzd=}}hrNE~>oG2eJFe|22XvI{i5~}d~<|<y`ctIrdphqtN#ksd{!^YE2 zKjSAq{hy!xyq}y&Hj%Sn6}Fk2L(U~z$a&;^asj!JTtqG=m%wW5GFXjW0izW0qOT^` zkYA8%$#vu?sCk>+Kg1yFze$wGlP0AK9?Mpxu!WED`-zJ`laI(@nVUgDOd;yHZ!!!t z%cz1UR7x|$RuWUROL_KbzTNRJ0%5L$Fz|SskJ?M(cI{a{>L`gjw3qm(voP+|e#=K) zC2^Pbdp_zeiMzF{g=j`eJVSd_h-MZYh-YfQ6rx!r@ht6AA(~wh&(^*aqB$k;9PJNc zG`A$4t9>p;^Gf1*+Eyu=UmVZZu9Ko;O5$U*m!;^~A}&5w+bKm0O5z3Dxt8d-Qb&B8 zcA+IYz9c?gyT%foP#B+}{Y8#WER0XoK2oBSAjTx^GbLJB5--#qutq1B#3yTiu|}tW z#}w@*TXZTAQ?=c;Xc44Uq`hs6PAiE|({AALw8Az%T3j42)^5fsfR?m7+)(sSv6jBz z5yov1exuIY9hKnxEydsra^LdW-*^i0MsYj-&M(yd$wx~P@e=JjsFY%;l<)b-jPML@ zhW2kvSP~$Gc1U3}f+lX>v!8^xa|P{O3jerykG4fflsfPnd+9vwJOLao5D+&s36TVJ zq*N{4v4LXBT_{9K(J5R?)Y<BsO&JzMRS=4}O_8~Y@LZyL5E8<IxmJPaO#;jHO@el_ zkcjwHAI<eG!b0sfVOK)(X}3cQ7DEf(Dd?HLdnkLq>fb@}-L!jzh@Z0elW-XX-i|<v zvQc#}A<p6}LL^hogiI(#)xEA~;&nlL6EXq5G!wfZ69dq163}gSL$@i0ZnMY8#a>L< zY9#z$Ot@b}1JjVO4QsRuoX-(i!sm$E7BPXoG~x5ah1vyTG&=$P??N$}Qw;s@GBHxF zmg8Y{?Q$_Xz8E^xm7>n;Dlt+Kt^i`I7zu?#KwKk6DkJksCmuTwaja%&zrZ7sb|W{B zBYxtOV&o|GD9DXN5bTb}aqK(`?vpp|#T-2=?k6Xa=SA&BF?v)Yew6l-j?IXtf?uJu zdd#N18I|z*Dov>{8;{HHq%<BX-a!!-UK1l#=n}3X5E>x@-k>4E)!e4NT0$I%)TlN0 zZcSn{)T*^xSxfB}8NlsZVzjm-UaRfHA}v6aN44(Q1*}+aW3ik@vHpR@`c91Gs<{Z* zij}+uoDb-gd_dIBloIGmD|wT&P&-?S<|bfJZ<eBY#W1MPmGm0jBIz}Ho}}041rn{% zLZe16L|ihr!TN4QFWW95crmcfK-R~C^FtD2{g9;X0M_73Sw8}-9|QT30QvDa$d6)> zA5R*rpJI%r7>s^}j4};Izeh$NNs+PYSYVW8F#23)^tq({5g36lW%MO5`U(V70_4)y zAeV|kF6}oMeZv?P8H~O~M%f0VXA!aGc{wsp9S4kZkWnu<zale6ugKb~a<sM>8fHLF zY{kYab!fX~82)?Y=(q&Py}dH)rtitoqC${eAIQ-O36Osu%6bMqlJ!ddgREEbr!vh_ zv5}=O5zr;q$kJH~WNEV!nW#>LEal<o91G4DC@f1CDB49zbYcQT>sExi$j3P$3uOq# zyIF}$P$v{_-?|7PH^HX}d>%lbhZGcK;Dhpl9?TE-P#nMm2s=5};QktheS^ZIAiAZ& z{VkpQTZ*<<iOx^N=WF|r`?zGU#CYE+kxA+#h&SG7u>*R%1B!O0HG#gYS6ZQ0TBDN^ zFfVMjMhlB!UO3mPSJ-)0T0Jw3>Ny|L0wy4%DUjj~R$z3KHL^%uL`5GGYJCc%;Y1@# zdokqO*2uByv5OFbPtVc^R+gm?tlEc=CGe$L`UtZ0u{C;ZB7Us)2~1JNFhzZ4Wa$f* zrCCOn{)kyBL`E}l#;^gSb8Re32t>7o(&}*(+*3Qx7MY?>!CIb-)rm1Kv9UZ{V$&|O zMW-ZS7QEaRwHL!wex=P2cX-BXioxSy<nc%fk4G7g#f-;ew#Za<Y7YfV(|P<#=kY6> z_6*Fh37BA?)p<N`@OS}v6eYzs^60lmiqs;+#li}^69wiuc3pnkwJmlw8ZNOXN5iFd z7!8-(QEqQd0*zoA+ZlGr750VNRrY960tUxcdvsbcOzhX&qvHx;@Z4x;%EC6go}ruV z`e3=mt`C;m?X>FW8dbmDo)nNv3;}ts9nrRoV!Q#_)ppq<OVy=_8D%(siOyfy5y=)Y zo3L~r@ZkQP9nmM2@6o=u@2Wc<IR3|uQ|H#KlMu~gE8z~<wFCCZiqdOHcm=_LXF3ua zvgSe2&T>R&C2F|%EN!!c&cG|xl{@I%agHOhl1{)Y$*x#~w#5-y6<JLkR+I256s!(x zzO5AH@M1@FQRIYUPvGK<v`eXb<V5vE^`zL3w9D8lC<HN|b~$}1iJh!np;K$LD=D=r z7SXPvRB<e-ZPk4nwQE@PdFnj%lt@gCg`0SoC8;Amn$>2tMZ4A!X;oXP*L7xiHL_M+ zOC7JLj-?L~?FL6AuEwe3jm&We(Qa}?+SE4ccrz9goM{Pfbu2{CE2#bRM5yMw98mrD zICj<j7^?VQN5rkVsit&4V+o2{Y@PO?gXya~9Eg}t{U2ripftqVwZ|PyP5q@KlBecT z|6ehGnD1g8+A|KOwm$EOWT+Vijt+w5Z^-&7LS`qc(*VuG*@_LQUppe5YNy(@IRl~G zUSe<SH^)xZUZJUFA%4oMW_xsNzojp#4_~tpGG}LMYrXDZI`=LIQ=NA^B86%p&GQ}> z4y0kMN89IMdhxps1oNl<?=gQ6O|f3>0|(QWKXM=xGxh(N`GbZQ>(f4UFjf8wM`W5h zEm`LA>i7*=u&&X*a!{2Dp~Svs@nD9CZOFh3?`IA$SYtD_Zyb@0CB@;5(2##|Fa`Xt z4yM%q!+}`$S%~5G9g6}I4JA(aGzk5@gRMgT>p&|8G>8388VY9U*y-9PCtE9=?L^=* zNwPcc5}-$%=fr_`#-8bWr|&E5{|Vwwy-K)?ocqad3Aqd&I|+ZeQ@g;qtL~@JXD)J% zpl>6f*Tv2heY^jR3<R9H#2Gn5JwyGU{xg7yc9k>wv&hfYpT~cuUG0qYs6899Dj?9c z=-f}#egb6VXX?+i>zt9fr3r#c`k4d+-jYx^k!=a}EV8Xg*%m&V@Q}uhPMkwcd>MEt zb%4b4L7Ll~3=pVquXZygHV@M}hiJDr6Y3mD=v=Zba)Nq-x`k}(+lPqF2=XV~;nePg z(3ld0$NJFjb~cHSi8TI@=soCs4jCpf?Y?Aj2Cy&)=?Iy<-x)ohFz4No3y69Fp&sWG z?LlYsLc($zzmRATIinYm$i+mxn8Yt4+QZmjvn-<B@j1=|Pp}5tx1aoha8E!3eM|^G zUM2j~PVFh@uEapyC5XZGENiN)YN(9oDV-PyUy432IFk)W+wH|c?S^33$wu2pHR)H9 z&A3ndE$vpjp*~`l5pAdbHYavD(Ozdgjux_rOJJDYSY<b3QDbKk?Txem0}u^?Mz<9i zL7;)&#PXKngpm)$-2=td_R(13D-gEmZ70KOvpY(_`+X<QieC}#eW&(&X99y!<Sv~5 zb|vbrBxJ)Piq~d$R73F3Xz=}n`^>3*;Y3u4ECe$9(iypmM79!jD?vQ5MEGh1)%ufj zq4sB}&pL|MwjcS<#e`-<LR;vu|GyJ%i%UD-#S{WJ(}NNS6xaU~W`E-+z}>?OY;AWN zjr1MiZgcG?|03izmv)DXDIRyaqEiPzIk?Nkl!JR*`dqx-g~(<CwEmme`j0^pCD8W& zCfs9?$bSgI$A1a`q)U6s1?s>GD9+O^6ed(G&fLCr!#?d9S5$w6>Hm4x?yOR5byxbF z{*r5e_J)^TL+AG2x==Z%No=4g?sP@<S5P2chZJ!c^@b~5rQYR=E~A02CGlli!WCUg z->xI^rP=_N%V($szk_0F@6&pO3iFGiBlAC~7JTVK2<E*|YiIG~OBcc|Ur#!CinqL< zZ05NyUD{VJgd$dNAiHu9gY0Wp<VK>x|C<OV7u!a({SYE@Gf{6QG`9AQivedD(+^@Y zZ^)`b)GbVlFOJ<xw7=5asNG5A%D=e`c?%K-IsJo%C}PTQm<eImF3e2bZP;V}<HF@b zp@|F5rn#FS>H!x+_bP@ds^1-T>fm2@khoLZ?2fop7mYL)`JUrW`bO>~>YWG!wq0Mi zZqfaaQS1()o$qE_P8Yf}Di9EP0I`<$F+A|gz^@qmE_X-nCfXJ5$abP`CunO2V~6i0 z{IPcvL;@GIt?q@;w|~h$&)-e%A^d%WL#t~K5RSi|aAl~p-GH6(dN=lGXoc(D+Kp}) zC=X(>x4DNcHg?S0hcC)ZI(^L0?r<Z-%aB6eX%rGXv5<G^?<G)q+ug$`qHe?s!<~jx zab0X=@*#J|6huUP+>G)NG2%SoMvyjZMhJ0|-3j$!vR8Z59oa!t`2P?YD1d@Y<8Znz z!7@!F89d$<e%$K^4v+^A9Ds-R6fzDPOPrSt#xJ|I-?(8`FQK#gPB)v?UvslreV02C zeiQ{;0`oPGsfor28o(6GMJP%PQrzc8(ciq6rn=9)pWM!q_uSe$Mhfq{Bh5^mEGa&= zS%8q*2kwD{IurDY-@6&M+6?Vu_dxhD!XY-C_6bCN9HV}Uj4DvNO~PSkWc^FG_LVz2 zmiF+|abb_aLRi8HxXot-`_`@f6-rplO87SnRA~hIml5b+ZtdS@p#NZ?c|0Mu)pQf} z4<zy?i5#sS?TPFn>Mr7mtX5ZhA_<}<fF2;~06caRbvHcTBI;Z4c!Q{K7!QgDME~Ni zW7lNR7zM$h&=~CVY5nBoT=q?9O{|*&Wk?)CHgjL_spsS7q{XOA#yA4d3~R%p`r6}` z)~#I0RgDUxVoh2e<|XqmC)Q(a?9dPE*pOo9CS1MUvF3FwSX<{>TVspy;apZSZt`2Y zu_G2%fg(24*H$lfH{$1tEGmBVmerU%GHQInnuXlcove-PV{7RVcQ>Pw@!k4Y>_*7h zqo{AQtr+$}<!IuxboDjSbA`?8>P!RxiqB!d02t5%!-EXW9SxThZ~^bAa%EI~3U<!n zf&yeD6VVU9942Qx0i1lxWFgo`yRE&kws!M~yS%u5X<g&0<yQJ!To-OQW;C3Vz$kc> zsI9ZFhowu83)7SkB+*8x6?k}T{^2INygfC|;Ao<!cj6TIi60UhE3mquv1VCA!?Gm` zP_!7K!zl&~BC`aeiaBK19YIVefCaMMuxz;u4{X@O%Y0ks;bwlYfH;Dfh~u%mdLiwY z^m*7F6D88%j!9FZ9g|Xr-!U=K^p5EnRdiiW9)5(LQFi@w`8(<nGbq|<x%CWbW;=6g zh{JeuHpiOdt<^m>ZM_|_^)C9hsI{*f#BE!%y{#uXZ%Hk!on0N|bb3xUb4U-yW3rh; zx(1$imD+li#+KUYEXZa=<IF5|I!U6RVv8MJ8(M!zd7v7c8``?@NGeNR?pt5o-QBfu z9F(+9M=n~{y(I0>trhWLX{dRJ)1y+#F#1+Yje8PC8+6FFdQ^ih<=A9eX-7l{7!K{l zXn4#@Mhcw{Az)<+%l|flfTgCdx3{Y^6|=^MPyj1h*F(P9DNS83aOzFCYCYz{)<+-6 z$*p@V+rS_W99=q*>WL@0sAr2#pl7z>sh^NQ_l%a57YqcP@PG@FH09(ArewS%V;K%v zLt&pxcp7`nDwva&Qb9IW&qHGqt%;NqXG8D{+{q5g>L4@uZWP^gG0K~3x}=nAT+($Y z+oML;frp13FwWRJQdOmbVFw*mi35knY}oVZa#4I#2h+3h_%o9e$u?08Iqgc9AjceD zzJ_pirORb|FN#$*IBiS1`g+(YJlm3Gt5&l4Y<$YdYwW-fDNUk>L#XPZ;jr!Xa8^Cs zs)lhxgC!5L+E<#A-ewHM>Ru<b5+&&ga+YJ(&zzJt`WSmN`j?fyVXs%(^saABu5#oJ zZ9Q#>3jsC10(Ic>QOWY5%>?sIdvDCr*}4%L$llf7VziT`h0f#dK}xJEUH{BBboCT1 zy7F)(tf^fh=$LzucH&A`EDk$$v%lC=GRaQ3>o_FJdIOyAa1$S<_`<r@(}$kv78fmB zQfEynjzZni1=gevJpXXn8j1qA11Ea&%x2bN-Qi4>BMQldhm*=dq@E5Qk&&`4Z)oda zcmmzMiw=j&!A7Wv=iV0{S!&6FoQ`~;u))7-dBKn<tJdo=CZqwX)ekxYs*9N=AZLb( znI$my8AqWHg|RS&253B38g|BOab5N5x(P!9E^dt_Lpo`bBnNyu!g8NfkkU>}S4i%b z*vz3M(I&L(y&J(5?A<JIE68aZ^=0F%p?*o-iu}Qiujk;%T0f<e>D+5Ux9xQ?njX7_ z$r2@8?DX2hRvw4uHhe_6O?H*+?pD;k(-aV?yA_190GfOK5iv<^-ld0?(johm4lK2{ zwW~u~-USkeU*Bt?(N1KKlbmbYyP9I{4P6xA{m9xjh4Dc_7OF-EvXI7qP3k6M61Kad z0^tBW-U=U{dJmLI-e52okbGWW1;P@P`O73<up$&pMLS5M3P{U(5wboV{D2;chghDF zA5+Ft_1^M|0Med75RnQ36|QtqF8O`FihvjjghB{>P=TlJgT4w0GUV~$iT(0&$s6(p zz&#N1mrK4f1WND*%F4?me>prLrxnPj3=gdP{eCFN|Do<pz@sSA|M9NAs^`j00^te} z5&{8cCdp(5P?G?|AqWB<tIXgenQ^iPf(ZfHUB4UfLPb<myal`k@xJd{*ON&EJXTj- z(e<R&T~}RQe(zh=Jw20)?7GkYdH#W}e!Gsh-m0#8ySnFnKUGl?sPt*8@p%uoMe%sO z$gr}q3Yz7s@>b>a{8ETc`4!c2pfZ4!R-jLOzz1OkNbZ3KG4XspZv`~M<A<=iG5}S3 zs=e5(N?#xyvCP#CSfU!+;tK@ORp0OTfG}Q<513b1Rb-@pYC>E9UnN6@K&*x;H=<Vf z;1+p6@Jc!0_dsHm4@1A(=P|(@QXvR(&6by2_!Sl`g~uE41_*XoWd(Gkufpv^xQD80 zrNRvYK?nQ&Zp59aK*)xG&t`oDH=(gp-uU|1%HUT(08nG&1Lk+nfpL<q+%l{Z8x{5{ zXk#h3Y~*?BnxiWiinHAS(Qj^P)m9py0EQ<&LX4RX`{Ifg{>gylY*XM_9$9OPV2GaY zhL=D0ZqJOv3bdKMOQS<~n;qt1GcU(T9-HQbZomVi`jX3j7`nN}ekiW|(fOr=$>93@ zxc1xp<@t{i?RBDclKgi`{ud<wHZlK2Q6%zR#Mm)K)Tn5q#7>EW%1+!m1%0oxD9NTI zhmu@M@~DIu`BW;T(oiampwdVx6;WjrmBv!Fgi7P6R7Rx<R4S*^WGZ>6<fW32O4U@F zN~LL3I-E*JP%%iQSyY-$#W_@(N2U2xI*LjQsI-tuM^mzhN{cC3LZxG<bSxE*r{Zs@ zbOIGmq%=&Wlc*M<Vgr?;)OIqpH&N*n>S(6Y3M#cw@l-0dQL&whYp8e{71vVncU1g6 zl_1+6sCqh;{*RJBQmKPbau%W5IfP0Z;5ZlhU?W^#0Q4p}j-=9saJmSNiwRXOgYy<B zaygu@fb*4bz6#D)6DnT=^tEtY2P|%Y^Nn!a1oX|2emfkyfW8Cb&=31=?u)J72iFh4 zu@jC5;kcDh=Ob`_4ALKm^Am7>63$OU*&T2^1N8F{_X3<>gyT<eyaLCo5ce9PE@+PQ z2GF|+%}Btx3$EXU^By?%0=*B;h97q3JKP6bdLQEc0_P9m_$%=E1kQMT3di5z06tk? z!ue}B4#1(qaS8A^SELlX?OKs$?|^Z07hFdug`SgN5NXa!qU{9{MHH#>GGuuLj#uG$ z4bom0C-FUa1_>lHtDqwv!eJfxLhf+5&Mii2yddOG6olcEAZEB5V=CaP60fT8$`4lo zyqbbnhe7Tdh^fVxI*1uQ9jO^e%|z-rq?SUC5FE<{A@ghk!FfawGlvh~OghddVL20j z<-3J!AO!CBg87#alDXne(lHiJ_reKs<~~F^c95NfWc~gr((y24IO<u_aX+4)<LA&z z#`$IA`~g4be{5XuH?BW3u0J=<-{2WLCG;&3za#%3e<$CQB>7K^{J|oBw8)<<@?RGD zvqk=bwj2k^I<Z4sFD7Hpu*fql@+^xy+ak}g$PE^Go<*K-ksB@Y0*l;akr!IzMHYFn zMQ*mpODytIi@eMtw^-!m7I}q5US*M2TjVtsd7VXWwa9H2x!oeKx5yhT@<xli$s%vI z$XhJ(R*T$ek+)mqE{nXwBJZ@wyDjn_i@et&@3YAJE%E`2e9$5v68}x4gX9r$o%pc$ zsCcFLm`H>%$>hhy<j8r#D)gj9K4p<lTjVnq`K(1gXOYi~Z;0Y<u~STlT_*XaMeec4 zy%u?`xKDgbly-}6i|>dlPkPt7XidFXm3px{^&-YD6ufv}{0l_<S$t1?ntULp<k?D6 zOKeNKx<2h{d)n2yw5#=LS7)SMoyo6cF2+0Jhakk{Zi0Q3B3LrxU(Jjx2D5!EPTnu3 z#e8BEOZN1qBDsa!N^DdhhnLj|SppFk)e6N#nmAp^Byv@qP)L+h>I9XjC)5ff2;EBR zggjBRdFzBB#QujG0raxN2`3^ErwnIFBCf4ux-f`jY$LV8Xp-r#5kUE7T>@9*NVWpC z*zF|eOt>r~xtmChutFet8JxwS)9M5l$=^;Q!Z1=Wp-ym!+Te2`>jW~SxlW*@&;}W0 zi40v>D~ut-BDKO;GF+_@a<3E#8L_NZC?z8&)(IJ+R&+gS5JWP{$EqLw#~R@xB9Jjl zrwaw7_(EV=M8>+&k+I}_xEN1LPn<5~l5s2Rgltll-5^M0yo(DpVOouF1C%XqsS~ou z#NX8kb~34<RwyBpm)8oTi2FupuZ?&LrV9%3F0B*tMXll{Xu?oZY3D4eN@|2gf%qn% z=VSGWbwZA)`3vd<Sqe;<dL#6yCQdud!Sf!zk+5z(;`CZ!B&oR>7!4=262yrTsXGUR zEho5XOOWK^-aukd!~{Yn!mXSk2t#Jf49=Q8XYP^n<{!0S;n9m0FFEGe<BtE$2`4U{ z1cmI5!X8eF2T52g&Wej{BO$n(E5D)odFW?I^}EHe1WA(qfEbpGi{i5Wx)@eU<BEQP z6jpJsxtJDL^?g#<R!rhH{Y*J*FBal<{cbtz0K%akki$+OocaYy*ad`3zg-Du0Fj|@ zWL|z3Fb78>I-J>1;g`&fFJJgl)W2qKe`p^x3KD)W5`GZ%pTyk>C0qYl4CMrK&~6_y z%G|DxGM74iyA)Dm>TJWiZz@FJBJuLKNcwFcdIF^0DTVTad1#d`8JzBrLW4s2<zwdN zli(myrr(KPZYuVP7g#)uoFA3Ywv4xYC$k@aOhP;J*br_%{y4uXJPRtPX33YZ<jXxu zzQXek<t1O`SHrNRX13-7Ecuay8!<t&jl1Pg{clEV{wARZr!4_p{{_lwH*5R{miuRq z8h_w*jNmo?$gf6XjSjQM3((E%LK*ivL+?4W#>-@0<7KjbIo#v~+~X^ldzx9}^;qsk zxqFQ_$*hhdUgORDY82L(Vb=HvmV8V`OLK_MG;4gusPP$De-1`d0tVCbSYwu1;~Q8m z(WAyrUdL!&V;8>~gEeNGB|pHDAN45tSDv?+m;9Jtjm45VrmR0;$)992<Avy4Q`QcJ z%i5vn>y@xG0ptA)^f${h%UzC+ZC5I2PYC4(ndP<`<+dvNc9<Utm>$<-xqP$SLs;$+ z1<f;|T!E}OoSzeje+uH!ejW=yrRdMVoJzoydQJ(I#7b7@JdG|33OZM8VP^R+E8%gN zQZl|lj*P39H90;`e^m*U#mctiT#AP1b4jOifE+1yDf$}<+M*}8dA8WTN8fEkOpHwo zPQr*zg;{gM_4f9?dY95!EF?{!Lz6p$lL_;8EEd|cilFv46;^h8$Q^T|6fw{C>-9ZK z=MCsFv8}y*pT3XDUCjK`x|s8-Sf;;&Juw&^Nyb8p|B5}aUkO#ks`O73wxxBopns}_ z{4qaJ+qRqDY&nqm8_fKjnF}4-%nm(>DeKfwAQph=p{O2yk|2JQiiVC;_UIR>yJt=X zU2uttj+|R^n3;Z~aG9!KriKnHj|C4Sm~D$1o`x<!)ATD?Ms%FxE<jhRp~IOE=;35{ z<Ouz0HR&Q+rf*eIq%AoQL%!{5*cYmuTPwtU`i(5UG?J~~!l;r+oqn4UH(lSwsPdJO z8TuWZY>mv+@8smFNKn6vldB`M^t(B!MrP~xnB*M&UXz@w-)E9X>JOl3*hMJXLo9xG zWS;&Aqk{9%Ta%IKQ59PdS{PdxJQ}V1RqXREIgg{2zZ&-QM)>vTSUfi3MMhyG{$#{W z*I#2)`8oovc%9Sh2{hvkPM<-b9lJSwCV_?|IE@YIG|4%7mr2gm-!#c1^}W~-90%Bt zw^%$j<Q+z_hP=y2qall8i&#V6Q)i*eB8-fMFakb?5ukqpcYiVD|BUy+5+Fb4T#)=y z4NENk7y+J%U#nr+9ES%~a~#4mQb)eS71`n3C<5c}Rh;DK6XAOm_c;Du)qhmc)U=o| z2gIM$S^Ce$xWMaQ;QFA7J{7pn{h1VJF*E)?i}FcaI(}bdT$d)n6h4Pyxnh`UY{qP0 zm&OT%)X$}cfWhM-`Fx54u~>-wM&HOtoJ<jqzKNpn`h^rGAjB9g+0IyA%+vS@S#G9A zI%9b$4V{3&iLn!LitCqArWruZ1y7L6^ebq1DeA8HQvFJFb{(Op4(Ia<bjrOH6j%eO z99WgzOAn9*1jG3vhL;ctPnQz;A$U5_-HFJF`eQWgs+Ws}4A3j}ay!~WC)z<>K0$Y* z(f|zvswpxN9ebG);nx%Nr)f9?BX-9oq970nYVw(6<OCL3j*-t(xP)xmi-kLrcI4Ty z?A1B@iJ-qo`Mk{5U!r_)XX`K1(9sx#Vxd@Ae}#sY#g?&w^(rR3$`ek~U!%+g4-;O; zgx7gOz5WJ8(`lBFpm=Au<izliMZ+bb#<`6`yhPu_;&J}GMMF`fp(yr$j0B^oBUw5Q z_V*c8z7^-!UpT!D=hp|E-j4I@Lrz~$A}8w~Q&h*r!Y)%&kK*pZ`hJ?wKQa3vvF!%^ zQ<n33P|NM@4T}C5t!LUg7Iz*6(tbgcYCZ16r|4IP$W2)jaN}{xld$Bsj4p{Z>EAI5 zkui8Gj-@R0GW#K!<;P@}dW8+OpIHQ+_>e9Zw&}l6_B{BvIVQL32dVLd(K|F~fW8jG z3BljOSUf|6u?P)h$I{r+-R$wUn?2LwOS8s9?dNEw8s4Cpy6ilSKT>f?aK2_VO}_x0 zphrqDnxDnT@n(%bj>k2~MQ7ot9xH6t4#1lgxfD*f5pj#AU#j6M4xX1=G#qq^&g;=} z>vF9NXG{iq<z1m6*}g9eAK6zz0?a5U+RR_2Aqly!fk+TNmpznr5a~MLzLUt?H2pda z6WSYOeJixH3ntt)ErE9z%7;#gopM%|0z`AH`7DqR-Nl#J%h0jQp<{2rwiIDo-p01v z+OsXU^0w^YZMj|3cW5}p;i<oc@dvt{@dq`~4lTSrwS~J<T6jll3-3&6;az46@9EaU z`*;f<(DeI~Exg}o;R99+ThM<KC0H3-$y)eeY6~C67LG!XrWiEvNev(Mr|v`k!jp_Y z!PEUjd`8os(L$$&PK})!Yn^*4fn55tT32VJO@EFH7Fne~&#A=rNW1<5(6EY(6zDH% zp+Q~jt>GoCZ8SQA+=%`82J6oQ<Y6Mbp<$gQq3K;(BD6ZTI<_Xyhkl`~X~jY=u9o)k zcJ9^Rf@Z>t(o+3xXiI14wAg8^G4E<6v$N2_^L>NITE^o8Rt&q>IT|iMGP(Q}hdsms zpN|=z-^G5%_<RC<^v|?X(|6pDk1FQ2e?L5`H2nuHG&%H#*dJguhn|=Ek6QQ-$TR*2 z{a;$>^x}iT)1k3HV`GcW^6PCz`StKFXiG1DmMvNS92=A;to#P_s2^*V-(;5GWYaIQ zC1U@#I~N~`7u#m(m)Jr|Ovypdz)NlD&>8GNFOth_%mp0EmqGcf&GJ{<^lPmG*YN`D zu)tO<P%1-#f8fLUCbPs%HvJZ>##^Dr9k#Gi0<XHa+d}I}Y(3F;*_h%!gM`i`u`@|Y z@GK(1OQV^5Cr>_`gw7$cbIjzsjpWz{f;7*e-(w4%OJe5|ru^?q$pUnKEI)Q0(eJkz zE}NL;L0fnuNyIK--kJ}0>)A)Fo_)*~-bD1rZA=ONhO5GDSdOcC(v~$03Or$?W5S&* z;ULF^5ZdBU{7GBrLc<$0cp>^%J<a-W3v+UP))xL_=pq73;Xe~t3m22Q7ZEZ3NBudL zCv-81!T-%9bP0)F!exIU<#xS@z0Z8`@4>n8y4m}$+w|QwUL`DxMnFA@^frVxlGsL) zf%m2p?#-KK=7V_!IDyQ}ESD2=?S))#b#KVqOcZ>&JMrlbbnH^7aOdhAtnyvngu}`| z!j?rYBl@3N46K+gCHng)dKr$?5g_?~Q}X>b{ZqVCiQxHI!{0F1cyyoIjKk|Q8-fb$ zWjQ~yF;(+#cvrXak0@W6L+9)6BWnu|odagF-hE`T<Zn}k&9}*s^_@AgE=RxHf28F3 zM{;O=Zw@V%=Lg;?Y^MCk@6{D}ul{9Cho7M{|82uDhvV!{mi3^GYh8q)=&*CeyH{Ul z4=u-holM7^VTX}<C5c^0U~Ha=9#Rvq1MwaFY`f8cXWR7+cBm<I6^UI%Sas*xXX)qL zp|OeJIoPQiv1B=F)DxiOC3e)`R}<c=m)P~o>};m{@saTrA(z|r%k817VY*xc$F*ec z)kMVX`W5!jb)++R9U<)UN;}M{&e(5oN?mPdF201=PhcOuz9FI8NN5L%?I3RMwdfAr zKw>w*>2?yk9ZtJQY!{sFAhA2(bSH`338!1piO@Ku_=nwsW1ahl4byu1hs{oR34_0I ze(DApv;P+kU_!;fwkDpPYNYWWxo+8KFIY6^gat<}shwxJ`KZjS^?0qdWfiju7}a~j zQu=_qS{3(^FU^~XIaL|XOewBtWBMp-dab2+;aIM0#eEmDOwiNKbSwKR(w`N(X-_;5 zf4}q{y}IqFHLj1^d)OBDVHk<tD=Ef{3iCYaW)|ZaKnv4Lm@aP2HnLv}qKbi85Y6t* zXeiwkLay?8{j#s3$}d+1s=Su9u3Y5_1T^yw%awsZRjL(Hj~zecO24}z&2rzW-7-Mw z!`LLvRj$8%1b>ZHN-wrA$;~P<Qo5>--6~W*(E8uBqMPA(>K+zpRx!*Brkim~Hyc1^ z>tYzO$Y|1+YWI?2xX7Ii2U&X$q}cV!71aTclNqdN`O082xG=vcKahWTeog*Nk!U5% zG=<`B0J5FR%q~UFqH;DBbEuq0#X(dlpz07R52f-jN=H(86ctBPc?=bcsa!(kQYucQ z3S{t5xq@m_s5I3!g;04KwH-$7M^Jk$wbxPmbn2Kv9YJ{8fcFf+B@n7*c4ROBc6&Y? zg9U*O7s#Oe075{$zp))7Fi+Mvv24Qlau!Zv;ba!NS?Fb9Wfk#NGs-`U2(#x9VeXOQ zyrbsNUmz|#+P-M9yzrP~k6)5^+;2E_0#GN43y+z*l$8mQp~Gy7K-2<+@g#W>ff8|W zL{Nz|q+XDTT!_G>irgTGqDloqf<(igjEF{t!V83^+3akW1)G2$#xv4>7~($$IbEJ_ zRDC^xXQHZ~N$~fYbI5MQr;JI8te;Q9O7THh$ZRBGwfN?^s$W3(uQ^UvHk8;(kY|Rl zmFU|E2XS<|G9h6HB<Qyj<7W-ojD7&4A0oyt0g4&@CyaiD7$4nL6sruP_hIzgWcN%L ze&8eF3}hG2(Em)rnaCoZslSJ{!T@o)7D0i}m^dSZ&xrm7Ng%dQEISX~{l6li9C)9} zfu+XR1m23iF;a6`>UWq*SnA&~^`B&SVrCv;5Q>C2j%1zF9vY4q1a1WPaU<Z58&Q4S zh~MBw00%eXW4IBi$Bhs@EU;Dx!{bAN2VWs9R+1|OJ{cw-YwR@MvSLxR4W=!d7Uoi+ zVq|jGOzAb_uUIqCIY%8^J8#Ymff}B|3cFMoJ+0sM1ea)PuM&YG=SFb#?e(CB+w2Xv z-%2yH3yk6RPqdX~ZmT*((|Ye2V?kg(iMUOjw7l(PvVt@jdn;SM#yLHA<Tm#!Z)#(k z+70Wg5ycf=@1gf2Cw3>Z1)LvkYm1y5op7i&E$8`gtuUz99Agi~p`jTb3~7%eu3!6o z98c@_am?8)?W-r){%PLoDi5>ht@L``vahnb5+2NzUTQQ5p3Pp5!eo<u)s=q9U*U0a zJH&#)Y`2&pg@wwn{K4Ar{4p{mlB}pyvm0knRm7fem?26UnjT7-RLZ7O4wZ7LR4|m- zhKjb4BDIgAl7mW4D!Hh$m`anV<hG5Hs8pz+6_p~Wl&V_R2H6gOPWWRwP*95mA$zod zS+ucY$+*%o7LI4(1QwRFa3TvQv(UprFL7m~9+s6FK@&jW8el@?oI22iN^S(yo+?OU z5OgqyBUTZPSPDw2jew4oi3^l5p$g=dm13@iv#g)z4-1RsG%g+>ns|IzD!0Y)hh8G9 ziaO;RyS@VRJA@Snh?79z5+TTtAjp(gKyuseL}%9=NpIg>FUMtl_3nBF)b$!v(%7#X z3FNtmFyPx_VQ;ap?*PdYHbcFG$fXeGi<gmdRo_g`+M{1e@GUE5Yul?|Mv8^DeOYyg zZE`t_?uyxCj@3D3_~DWy66NYnh7zc*$IlAoBi3&N23LVrHL^PK`ZCh>RNKC;&Or|y zJg8qs5};5el_=_Xkm-KZ?GKWW3xkYU2ExXnO2(&y9FvjHT$jQCfC-UDfeN<kgF|@; z2j|9*_AEgC8h1eoSF9VP?uvEEnrL)Inl>%TvnH37`m1m^j+;62sAV&cnjvVb7{e8f z4j#97N$sK~b{4r9U2>c}`j~|?YM0D(u=rz`7oKMzn%0uGKlRGqtw#3N#+1(Jra%pK zXty$0+Ox1%R{xa(@(e@)rL~f4oyw|ergf@36@FYRR?5}5%N|!W)jm(9<abw7!{9kT zA5;y@v#b<NVy9A;sYddsJO~vBS1+(Al*ZTw5gE0DjEY0c-XL+kfxA-)t^%eoXrVZC z_^=Ty9Ld5W7LH=!XciW;a4fO8Y@i%Ot}5h=2<iwJ#oe@n9F$cDXa_?}Nbt{wT0)hX zmYCc_OB`-#iQ~AII6&;u%CKDSh|5f2D2nR)#;Kpp7C|oIY$%pNFw7J&%#zL~kbE97 zG{#1PDnl_=bPCMNB1nD^=jFq&a6|hLTx8**jLk-yjPuu=jZVEVl!-u3Zv1h81#C9j zAcfDyd!)1vA?$^xZ8EwvHLY4}V&&kQkKw@?YhiO#gd*e2U66U9N$G{Aq!s!#Urc5l z@{0)<U}?GlQ_}>%+1S?fyQpntYcvK6foP+Q75WF>g!Eo8CTG7>Y1ScMt$P)GX?MZR z*KOltiR`JYbW?cS!yN-<whJcTM%-Ib=|v0#+3N}T4A=vhm;sOMffsVbOpv|qDzEIR zu5v34Sb_N>>ztGFCM$cq{_0`<b&M;$E4X5E8ZV_RkL0WH^U1EjYvLH3>`J!riinfl z#uf+JY_h{lFJQh3!_Z3sUJDgiE{wGm6N$g$*#$g1ouVr<Ba4MOEX-qJJ_`r4u#kmA zSvZ`9BUm`PL}2Gq0&iI`?QLQWzMT<5*%Cq2*h#YS1%sWP6p80i9qf|I{8Dq);7g~C zy~Zi*HBKZMpc6#9Ljt8B$;Jy@Zt4r1tc-&fi_z>A1r`#;LR{2?VW}AH7Z!wNILmr5 zzSfQ9+YAtCD9bx2l!cF6HwG|q;~B}<llj)`3G+XkJgYUbGTzkChFd-xk5Osm22%0t z6P-t#%+4PjF@BJ_7xa|W?7wDmdi$N6tgfl4b-{4fPByM_*LFU1jlt?#)v^+Ih~!=~ z8F0lmkK~tGeA9a?J)1|QWD!qWBd(281O|brP9mgDMOVWmEwrJ%70)VuXj{@UzSnMG z`=+yPDHpNNKL{;x8vC}H{^3Y73mNlqbno0!F9xD5`rj{^Rj{;MPnwD$uUE;vRh8Ar z&A**#;_w+O1$>p}BrVJ@VUyIwCMitGd}CJ1L)pX}L8W4<lu~J&trQ=`ieQ8H0po9Q z2Q@!p2*PkSU8Rv?(dbcQSU8r2WyJ1)$tMcTXqJ5evEj}j_*k{$LsgVh=a1c*KWe5V z-zdY-uSH`O`?v<jxCZCA2G_WTj01!UweYkh5ZJ_8eAq(ZkRfm?5V%wbGAIO@8U$Ik z-~p0tpLKxbIF39(a-Ao_Lff@e4|dke+u9rK`mC;c1qg?JB>rl>3(XDc<zn&rcHBXt zUO}q8!Ku%ySL>bZx4e3lVV~DKAzszz*Hbf|TJcmrs$MhWH7j1z7u4I#c$*b((@(6o zO(xg3H@NhrKtZJq8G0yDZ?AXM+qMTqu}ly1tBmb%a%~67wLK`wW%@FV&%g*fWUY6w z$ohKCVAlW?XV;kMtk<?d1{t_T;UWVrI_q8AEM75)#VRn=cvMrpYH<23P@K~#uu`d4 zw=qV|NM~$AK3#CIGRqnBu1?6)#UfVLQ-jH=KyfCmC^y~S#kjQbMs%^ZCHbs^SY(bN z<x%a)KEYzE*+(x>wx}j&Fa??oN_7@r5E&|UaEO5^yD>nOYKJ%{Q>jC&rI6`<K6%dU zrnXfrt!oYca}F|NzNHKi4)0g{nOvs!$_3`{{4`JZ-ZD)-WR59qk=0Rnaak2LW;Hs| z0FOX$zpsk^Pgpm%L>d`urUmEyFIcW>;i}Nkh}DPY*=y{mLzc58`=wv4dw9QE*Q{b` zUw4qd`?%fJHmk3^ez!+6+bMekfoeyJw1awOB?bHyaz4=<`T3v&ZIsBAP)cl6bm9ke zF%Pt{t$?U(gu=oIRJGaxT2?dGM?{caVn$YGHVboEIEaOVK|{iujU?B?l0{HzafYb1 zf&?lS7CD5X=Ec3~h$Nx1RUlc+f|(-fLqb~7@j~4E$yBNA?M>m>rsx`IcEc(BwcsH9 z!871Hu^?^zI3=0w*Q_-v2lyf|HCY?np%E*h(Z(e$b5`JX(yN*fIVjr9ewbqmSbP0q zbDTKq=d74#-bEWc@!1~VrxltYCn>w!FO0HZY=$h0r`}8a0n6|pAK6!e0oj<ftTl?S zBTHKFXC_F_Sk`8U#VQ?yzvr~HMH?5V#^$l%8);69?1ARg3uL5HJ7dPo8BWL<Z8Ts7 z=%Sg3$1x*=!!elAg{)U*p2m1JL=ADfeQvN#pFL;ZjAg(ylf6dNHk!qqJcaYlVTp?v ze<OWVAH%{LM<spbK=iJ8k+m)D{P$b)voiaXGLS;%57kZ+G_JX+VXgTBBrOOAy?rsU z9OqMurXYC!rzP7gtiK*bOn3e6RsClLpa#dx#*?G-qaa{Io49)Upw&>qxU5~#xRCG1 z-VGg2f+e@gm(>-0)t7?M#fPr-qq?ymPXBpc#@+1|wynK)z&w)%0!f^>)E(p}4VcgI z$ir?FUDC30;3XM&US*#*wvXwJh4L&sR|{zBKj#Fua6(^&x+xEa^OueyJK&;-XqcvY zY{?(K?Iv(n?W(fA*tMl9Q+C5vMAtAr>9Ak@{Sxn3(Z1Zoc^hCwAoU@0vU*V@gw-0{ zS3jr2?OITJ&SPum9W!&;^ab<h&sj3Sx<INdc#JJ?T4mk%Y!ewV*{vDr3xL$cfz}#5 z88vUKy?upA=5mf{I)89eACI%#ULIBhnsw<yCyg~MBaV#ZhclLtnY`r5+8RTnXmNuu zEo`z@w=GO7nq?Z$%s1hySGSpDc1jv&>|lwU?$;0}JEa~T!@qI$0}|LDXs0V}z~!V2 z(di7Bu(9mW-D(JETVWO@Ye>8&nxHdP>ABLhs%GjjllTqJFMex)Fxts5Po2gWL6)d3 zkDSKYMUD3HD<hAAOA48cn``DW7^Z!cNy9qCZ#E1))r8<1z;mKUgOvt^K(TXVv|8v+ zhJT4LRoG81z9Lz`qmoHjB-^-Hk}PSTbJUzAb86?!IbmkDu{r`Njnzh<+CJ5A3P!6@ z6*HE?>1ckS%3|MCqU@^*OsD2FgCEa8n5Q*GUCAEKLy{fJMiRV^u!lBGyMm;SNK08O z)y|tonlh5Lv2Ge^0A!l-v;|vRmd}W`HMBOZ1ohH(*g)j#Qxw`7ZD?<8i)N<`{JLli z6d75O7wK7KZ5EqsDfJsa@el7NX1bKFG$DIKk<BsVEc2_pw5P`u9$B0o*}Ey%$n;D- zEWn2L!(>=b3kA#S%y{=c^lNFdIdhUi4N6AMh^&e%f>(=ZEB~r!u?ixpk;%v`Se9zL z*bJ4Kzgx_~Nj7Iybh*iFc(RH`ku^y@X7Wjq36rpJnI)5<Qmq##xaBGLr!bilZ%|r~ zSq+<Gu1(;%P?Xj%zBo_oqLImBrbQfom>t!!swvhKZ7r}G!%WxAa{U4W=cguG(djpA z3A|G*X<C^kO<uCLltyD4j25+E!DCI@d<W|v4{><6VaVaIXS7Dv;F83dQsay~P@@e| zxT~pCtGchLeF&AHG~wc*&v&ro7Zd&oDKqsoy4dGFw2e)loRc3%?D!5Di^1S%Q)jYs zPBZJWU`s2%p1Gni8%8a^Xk)*~M;o1>i(tg^^`sq?*0KEIV~;mAMtN2jKN<Hf8(-gf zjPba380;B5?#y6t=JX|K4v=SYfSQfxMnBIqj@Q@Al8hs&x(q@21FAQuLm7Ly@=z7@ zCY8f_zBOh~Uo^9J$(#j8;R1ExyqQa84rBV))XDrefK^GT%d{ET`+gVxL&?<FnlqcV zKlMw2)?%#s)#<ZqkD4{}kp0=qs@1?vEk9Jz)NdM-4wX6mTZi3x^m`87_-<<pdGYK8 z$4xurK<VeEr2Xg$i=Jj2riRU1dlP@p84!Q#^GlvF{L)6IcR)<iKGXF3$+U8yKWnGz z5A&z0-amgT9<Sf)m8+}$)w18~2>?~)Rw}$6f0g2`toA~L-{;To{c}qHw&Z~-cR=v~ ze_vj2UrG>+veK`3swx5=1dsH)tq;eF*B|gy%Yo{OYQ&hV3Mk%cccoYH1S$ePrJ~a3 zMeIhm*JHOnGs(cgt$3<^KA&7&g@NCTD3;!8#C)vuKzn>%gp91Js;HFx9tKlc>Gx%J zdoO1YmK6ws>2b@|fdH0pdw{dIy26KeoIXDktoBsN)fJFfQCU%iSe5<?sLT@puAWMF zz^!<z{QgQPRO$05-avK0mxSyzu_BXLkPh}GZ93CzY6F{yAhEa7Ykk@V7M=>YO`fXi zG^|f~RckwBuBgC{s`OX5<$%{+CHootrl;DCw=&=dX(~V_TXI<Z4{;)s*7q)J(5-}b z(4O#-3)+q60<)V}`NPP?lIE=7DTV0+r7qIC*xY=8!%YtBJ`hv0bVI4^6PnU+0?<sU zs3Ajs_hHKI|C1K}**&C7mROjE4WEpjmxd`i1m60N?X`-b_&(TUit)6;@jeoAd+Cdm z%;_SfB%}-FGKLf1wIKze)9_j_5HwT#7F@<hy*l=_(qXoBR%E5issyfvTHXvjo>Q{V z8-T&de*w?qzk%l;Ir!N8<MS^k1v}6f_SnLmr0{l9xQi6tK??6Ag?Ev{yGh|aM7x)0 z_Yv)WqCG&g2Z{C&(H<t+BSd?YXpa%?aiTpzv?q!76w#h0+A~CZmT1or?RlcTK(rT$ z@*2tCfiR!>yNNP}NR(N!W#{DP4azSVJfv{wu;C*{7L6J`rg&^g>A14-6LN@{mZ^N= zBw{BMw=qmm{H;jCpNlvqsOY4`MM(-QsFXuxW@<y&@A_mgGpZX($uKGnr(^_`M&S?q z>R2k3A~L8t5n(~8+e8Mfq_oP!2Mr)Hs8mO#8C0D~r685&P;D;52Q`sF6^0CIJBHei zqY}deB_~p{l#&p&MX4C0(#ceeBiN_-TZ9FbnyI*)O3M%#R62=DE2(rU6<euo4W*}1 zx|Y)4QTltt1eG`@sI(4_^>Ca4$C+@P1;^QNq~L@~=fQD4q2xm7ql@6U80gI$9Ftti zfkGWu5UO4YY1hEn00)(}LwDW`=UX`7r*s<`3gJs|+(T?LL^?SEBqDe2A$0OSDEt<o z%G+@L4lsU~A$HpSLPRQk0Q5&3wUc}d73?RpsE&bmDhS;9IUJu6gjbaizw<A^3Gq9> zA-1DMs(uIL-w7RgKC%59#)ot^Fx&{oMIxn9DqR7mW2kfk#5@e-8anZL(e}J3GjLDs zML1r9<4?foWpNxgq#7v*gNp<*Wbl}d(ZaBCKn)v@)C8o;ff`*Q2&4UQOoihx$bC5G zu7Q-nwMb0|YWysq#?J?8@=-udUINsRupkU+6T~5-M{gt@Rc>)eL*r#+193VpAe)FV z<SK$ST#x>qz~xVn;&9wRgq5#g{K_{-$Ey%O`Ol<dHW{+!L(=gcl=+kZzsZxoARV6( zh|c&5qv8BDKYMlK{4GD{es7$AV8x-mC;mvppUBVTU*s2(BoA6-hnOVSS>$?)Ji{W- zw8*o>b40R1JlBdj&mzya$O|lTlSN)=kr!L!W{bSUA}_Vb%Pew>MP6=^S6bv%7J0Qr zUSpBhTI6*Wxz!@KS>$$$yxt;jw8)z*@@9*?#UgLD$lEM(hehtR$lEP)mqp%Tk#}0; zT^4z_Mc#vV=U(wX@qUpA53uk-EA=6Ze8eIj#WIhHk6STMSmcuy`IJRIZIRDd<g*s} zocIb<{i^tyD84T47T*vPCfR9`UE-T2xyK^+TI4>9e9I!=7T+TV`Hn@tYmtbUX^<N& z@_mc^i$#85ksn&*M;7^4i#*#RKeovI7Ws)qerl0d0QomjeqH=b{9OD}oL2dT_*H7e z*JAgW13hAN9+N9##Dn5DR!@H`k}Ju08)|vt(`tmlb~_<8HNt3a-8~tNwhw2QasZJW zm2*i%C?M)|7Dq24^@1#Fwj=8V8?j#uSE{Hv?7X1U#`(E6lUiXY$+(C#2nxw`@YJlP zh)_tfF9CjoNX{U{z|5^jJj}dHfsIH8T?Q$6BwyxC3Z}6d2VV?KC>c_QIG2U7h%kf< zb#jKoPGazs!?O_1a>N#b;GZK45aF^YR3nTR$f()Vg={jKa)x8v(*+kP&Ovz3u@a9f z`6J?nmd>jaG%{{JLS&Y0A$39q86S=agUN)W>I4TV_ty%;$;7fcAxEAx+3mR;S~rY% zMb4taT_-rj%BtCQLY6q$cPT*-&T5q>`qv`<XkZHBc22nh+LuqJGE>-L%oMg1?!^pv z&`dk*@FQw!>!$Ysf;p}aPe<r+*VE)1Rey-PI=)82Vrg8|_mHqu8kf+eP%e$j`VXeV z<G)E*Esd-C^-`FY#t~jJtd+(!y;BO?O5-+$kq8;>`ZWlIc`)wKw<8ed!MIa@gt<{Z zMnW!hY~gM#L6=yjKW;{4hjL;$Eb2*&%8lj5m}d)%dJ3IlAi&ss{b_>mGc4g5?s^F= zaY73=iM!qUMPdmW<(ux9*Dwst(ZV&New~4t$rE;9=G(<kVXQDVlzCnnCGImy+$ZV} zU<uVM@eG!D&MHC860aI1UKRD%v4n=smlGi2FCwBg4BvBrOcFj6^$$gKmxOEmBN2Tj z6S1Q0iP)&^9OaT1`8uVDF6w%+$TuRoR3>7@P-H9?v7=9D4!Wu$?&X<MsHA*KumoK+ z9cId9m~uI$Oyem|)4lXTOnF#BB*@taXbH9ZAo@v(x8zAle_BdlYVHukKY=@*fII#i z-0>2)<1a{|(qO4jroV)KSs5nNcaZ6yP2kQ<lj%nW(~l(mV_*uYjOix^i09v=1luI} zGbuDKI1ZRHRL?9Np4cJ(LZ-h+2-{eEFb`H%`oE>3*?NZ@8XuZ~vB3!>I3639ElEz- zJScLuyxUzY?8Q3ImJh&!=3H4nR}PhjCMJRtNwA!>?bXkhJBx+85ETUh96LjkVv}|; zTHh##%R1v_`UU7hl7n429(dk^Aei?tz|P`>I~f?r{R}X)je&tYz*5=}A5(&6uYnSe z$-LQ*$@-IW0<$vcyQkz?`pX8k=PR<&k8j8bD2CG55u*k2LM3d+Zi?4(Oy0tU+bxHs z5}2Hwa>x_%B9>&VVy>42J)}(ULV@$J-|oU`{XR<kfxLTWB~<W{jE*TelR3sG)Wx>^ z-Y+AR*zTZ@lx1OyJ~ghZf!k*?pWR;?ZO+Yy3}4G3KVAm?kmG<k&A*k=J31#DGW=Z* z1%d(G#$D#x<R=+XX>p5n{bxBe1>I)YO`C$7Q_EbT97MqfNj9fzzXXDBL7dM$CLCAC z@CIdEgF3E(7Ilno&<>Dg!nMi)auT@?!icyP!g^^Ngp=eaAZ$>cg0NA2PSLMWII88f zO0m$sN52kFd-bh&+NW>BQ-iGErXVO_vZrBiLQlIv+MP=HFa)@aABO0?M}%r(HSr_# zT}rqX3&d;nJCtx;XnJgVyiUJUnWf*O;21J+^w?cwBNlg8uS1ZQ74$wuzh6lowb&y4 zL8V@c%>W4>0wOpQrF#UUf*|dq7&VJY`h>z&L4%?{rPM32VmQWbLqq7Nl|;R|4H!J5 zplvXee-1Mg!7*wZT0}pubk@^t!0rX5UPcPoy#(z`K;!-djq8M#y$mhuf@Zw}&8nB7 zQC$k|M~<z@!q$w(D-bz02O71Sp*Fq=&E97;n~m+aAmSY*e0U;$xc;sZuIY@|=zmti z)4Jl*^!JqTbl^K(f1iQ9N)D&%0leEkD>zy4R*y@&(c>Cy;~MM-NR{w2+)y{caFw`D zJwV!}^$@O>&w$XUoC%>vJxfKD(?sXYxiGHQsVGz1K7G9!Ix==7w)PA)G%q#}0r}2U zL-S+vvD?m45gQZxXM@UbR_;i`?$mj}^AFku5T0(^r0VCZz1+16)Os1M$2Y0<3L3Lt zq=pv2O<NdTK(^!{tlws}-UbmzXCR8+B`T7TKMSFoF6T*$Ske`kv<O*U%~>o?vba{Q zw?o7dmhU>uw*;zUEUxEC$FQUuFzFbS;ufTit+z4dk&VL;u8*s?<1j=px?3R~>b5g< z!P_wNZ|c>w%qP@SGxHA2tk%=uiIDjYxG0G%)$c-}&jM7n*Q1tsm;rrWK!k^(w>A;- zFbqc(ahX;#rT&Z>3J1dof~AH-ID+CK{Uw&pfj|GG&eC5|!^;x!W%{dX_@vJGNr;qc z47>~hbtAhphTTZSiewRZLiHCxP}KTZJ+22BhVff)Srn`X1@#V!Iv6$hWPBJS*6D|a zY=aT{SPez-Di|e9#E(J5B9QMBEH*@xovy2~h2N;`X##_C-vM$p5g_V2b$4QB3~KmM zO@vO4og9lJ6ficp%v1t7C*Y*tO31(95vCRkZF{qhfXDm+vW<wpsQSOv(1cDHO$f|* z4sg~xXqWjg>N47j`hFel3N|4wmD>4K+g|pVVy?qyBC=?qq&Qs<qKxNKCL_$FVxa*Z zdGNk}E<HeQB;*D--9*G2DGDRqMD+`4=(n-oa;fuB>0eBD&%`P=(^>irl+B#I`i&F; z6jvkE8WOQ)6Dtj7)lC%64Kkvt+4NgzXgTJnmt!kR8UEExv|fG+((C1}LGOX6J7{<g za_!t6pQGPS!!0H87JV1WKh#_yJjBF@HP6dLcm&~3jVB<7>1<;lhxn*%+fzP6f0QPU z!N>hD5ys&ELFuQd@wk7L2v1Xd-akwAXK8{B;?U$o?9||7l9Ye1{ygo3l?0B?7bv=N zLextvisFF8#_iQ#p`BP`E{>BoXjm?Rh46057X}H+7sg%KhT(V*o<v3VK8R7uhDlLJ zE8c|J!uudiCn4u)`bX4IlQ^$Frp7{fKXmzLG*K)#5z_8+ta=ZF1pR_0SbnlS18>on z)VONfqaUF73^kVr4jgj$Oy%nrgqYMR(^e44wN<bUZtk~6m*!$c-%+N^G5&iRRxkyY z_dinRs?PCwL9kyahdf`eVJAWNV9_(Qu#@F?B5-JmAo%o5@W&mF+YMS+ErCb-d0Oe} zz4}J2ADMrP6Xi`JZqoEkTDs^sF)q@&N`tFlu5H%3%J&jj$F9z)#v*%(bSXm^ZI89b zR%4gzTeNz4HCt<30aR#BY)$O6(AwBq_O5WHRsy1I)jGE@T+?k@Xl+q&Eim4WaE>Ez z*%pS|cmsoje2)k>X!=bW45B>5aMu#C-=*;TJ@DJ1g~bwB;q26mMcgh8ky{yT@tqnj zq=J8d*t<0TI&}|6PX%RkEzZ~nHC%vecq6zbd_<e2KcShLkM)tI_R4YLsD)0Coz8CY z(<~oTfB(m@>)5*xi!2E?F*r_^p@YOa$h}OWKWT8qZhHs3K{8axS2Sb6{i+sPPlD?) z?lp#sin{L@5VDh@hMqw{@qI>wP7UW4hVK#aO$`w|&mizWb_U}2%{_w<%&PCzx)PDI zh`tXoM9(JrTUyA|#TKY<Ge}aL^Z{VL-|Xo9n*J&D?>U6y?)?oq;&Y9yQE}{lp(WR- z`j-r46d6nc2H%<tzSZ=<r!e>jF!-lttz>_|Qe*J`&Vo`MHltLBO<&It1o6b5Bxl&z zlVk%T1fFF}J{=I_ICN6%q~N)ja5kbH79+bOfZaxu-9}gn*ieX++k(U7LL-tzpGR=9 z&Oj3{<{+Td>3R#t!xjWh?3jouyr^R%LHz+tx4;8q1-Zh8no+#cre9%0_)5s8Uug@K zcjBweKK*K2C&z%iH>U_E#y^O3ErSBxNIHWX;jSP%eVeUbE{$v=`b{>jOsq#1f2UcU zgDd=7Y{n)Qx7zry&Z@+ffUOH>{T*pfIRZ~PT#DRo3zdy;P-0~lH^5q`UX7G#s;207 zFqBfsY~X`d1Nk!wn)e`U-ow0kkHG1lM0(1mKb&mkBUURP2N7Te#?UaIu+7q+vf(8> zXY?0sUG?%VT*74Hdf_E#sG%;QP17Lz>o!Eu&co*IwuNDxhf3VWb#RserO8`xNoot2 zCVmT<=i#f(dp17b-#0o&|A3*YA{^53>;uY961s{YCZs!bHHlqK+z9XM4qZcH*8qJj ziCqh)>qzW6IBg}dt#FFQqHbIQupkv0=}MAxK0dPtghz^TO%lVy!V#O2lKd+ifKtqM z1Y6X!j&T~X49CO4qnX)|cOZBjDUwZ!wAonflHO4}GB|H;2-grD)ob%od!ieFM~dxJ z#>_NUskTX$mks;<b7=3i{8!K(-hn`Sq<0AOZ>#WoDjBwix6)HBS9$z?1J<LevN~Y; z68qf&%|Q3a$sfe=J(R3;q@XNx`ImF4lE?gu88(nQgi51rd4x*E2EK=)sx;HY_dus& z!O8JG)PC_j#u&&RniKa?66G2JPLd0eJ!C<Wf|6q6$R6mmPsE_8P{jR_h=wk3ikyo3 zlie$##|bI8KZ>GG>Kpe5Qd$iFk5wG<r`>|@u<I8ie8(ju#GuHN5FT<&o~xz7ci8p9 zPzDD8fb|Xw7<`A81k*XDH=os1W6@cyE$u7KDOo5?9iYQ%4;C;Mj_lJSmF1Y+fAW-* zF+>B26vrv<z4bq1Y`S>O{dEjY%l}kAv;P%K5Ycl8Rz0Ie^k2f3?16r#|I`7xy7qSO znI7;|`l~dvC9<d5R|!#GkBk;Rsa`BOJz2;ex7UphuFm`dm~&c+gR6^*xl|f#Lr2vf z-mOHG>_7<)=Hselh?&`0IV{X$;UE^~vv3GOSTRMGaa%4ynT{XU<vIZ-xl$)ch$cc* zqT*ziEq_<l@^>u=QS^5;A9BwZ^qg90*2<R0D+s=c3`xC7X&HaTBTs8G9ub0XU^6$Z zVz_Z*`;-btck%(0lFOBrE0;TOn5K(Iw@2Hfu7#~lEv-$f*0QVAc28<%Weq#@A-y@m zu`+{uO9?hdP99+;aLd5-<lJ;8H^wU`Jr1)C?#{(bDD2hpl{cf;BrKHG5NU3nhj!+M z+pmM0rp|*WW;6Ph+2+?Czl^zy6)bCSi!O{u+Pc}xm-c-Z(yl7|&euERR27x(RHrP) zP06`}RoDjQuElHHRz;T^4D%V*3bY_CwrwC@4*eUq=XD=~#g%T)p>4;rVMLwW1VcZF z1A7s=V8=}AKkpXvNg%b<|JG5v5}lhka;}No8?oYCZK*wwnY`P)v8gUU_BD~FRkch& zTQb|A#+F_ru&s!;@ey)Je+L_yA+x$B_1(_iCQM#$+{O)r2hNAd1Id^&6%0r5#mk}L z(6*eO@(fAW6~=7ADTElF%U7;i+s}<Ojgfn@HT=Qm;iPL@<xFkEq=ECp?76)(t7_mZ zQcC6bKJI#Py)W$9AhUzgT~G5;B{j1Q?WJxrE!7{OS2q#Mnbmr!$mF<&Nw<OOLpQ(I z@txhYf~_#3^IBR~&T5aeHum$RF&lAI%NoP1KeO$Wrj;peB2985OtFlX=EfzKa?MR2 za@-R$Z8Wf`afhy%&y6wt4EZ+0L!$i99b##Lf#5p%2Da?#t~E`Ac}L1)TJ}|VE99zx z&#P2;tGu3!^yVpEUuAWb;`O*I0<zy1sFwW|9=}}euBtMj;{v{_O0-6=^rK;XmEsBb z0u^#~z~hkv9&dH8uIp%RUhR_umCP>RU)jym98Kdr?%sV$6pzmr2sl#izXDZPSIO0t z0iW!z@_Rvy>S|lE_n}>0k5}>dJ#LWD@AW8Nue%Zr_^Z9u5c=Hi?pEV+RaKxWm%V!0 z@?G%yIikSEaBPbU$7&@?sWvWuvgXg9o4-ibh{A!Y9I&qBq$`6+bC?OOf)JF10hgy* z&XOETaw*B9gc;A00;(|MSyD)q;Zz+7Z?9AwGnCjy0gp1OjHgOD&74FPx6K1FUYc1! z6%QqqRH>rGN3*J_5}?vlsvJ(Uj-XjJRH>!Pbec7TW(BD-o021F_8i+hC_96aAkA7p zvlh~vqp7l(I_FUZ{x79Uh$<1PoJ^HdsB$V*PNT{nsPcbQ=^#`&i_q+i#AcVMGB%rS z<IZ4Wh6+ONFo6usozPK4hL%q0m<ZuC79Q3yQ5aeWS!Tk4zk)1*<5)o)TACZ)K<xJ8 zjuLDWg?HGE{f*br@uu`tfUCKmpdh0QEn&cYQeY+>O_7PhjmjfJaN*v`V$EL_9F zwJiJ{3xChT(^>dO7Oo@gw4R^N;HNYB>1=*Fho3g^)4BX~9zUJWPZuEauT6s{j;<9l ziF8D*;39HmtzajLqejTJ+lgwcf!7HJ{0Ap(NR3b<5L*sUw2!P2iUi`Qs1<C)sqsjc zlV#1Qtwk#_7mv)M{G44^E2t!AdaVHCX-2K!BzY>!KFH29<Y(}6!OU7AgA8`p3K|)b zStDc-3C41*;2=XM<2%i;$@n%i9F8D446UvXXDDi7jmTb{AUnR|jL2r+Gje-uGkm&< zNQk?6o{JwM&L?Oq!GD6-NW$XoIw2zJn^^2@21lr<8*uBCs|eeaWd{k%A!V+DpoRC7 zu*zvwe}Zr$tfvV#(|DDHZ9L6}7F_nyxLtpXgdL@EhyGU*cJef*{v`>!O5-m5dlJql zjc4fV#c(D^g^y?Io5gTWX*@^2hM8+!YrxklDsCcrCt5$<EuxtggCLd^^|uiHAhTD> z+k1c%2@i_;!z@FBZ)G-$JSFOn0?!2Sd`d)fu2_Dt5G#lch7$VIVuF1?epU<*>5LV| zhv?6Von!w-BZcgD+?T}8(2&@WNTL1;8dWKhsHl%)&+KRBRuhH&qW-CfHcDHPCKtnE z!(zi@BiN5h`e$O8mOvMMA)<xZmYib|^`04CZON$s`hXZ787i7vB*aIeofX8Rk(I$B zGD`oJ#UYw~a11HS!hKG^=TXJ6VvN#%6vG)M(1`~{{BD$pjdih&feb6D^=w1t1Vjf* z@COC9v2wB%+a%tKZIXVygrBAQXvK|E*j@rR^Jd9v#jTRniXD>Gik&PT_ja~gu}kXF zio2z>R@^7?Ry-o5w&GDK>?nc3^Ek8TO19!DYz4(uunm4*HCpkiq`xj9;%y(T*e!)! zB{1wdQ(Ez6N-OrJv|=A`#apSZc)MpS-b-)A2SzJCk?_l1Qr^!{UJd2_BW`6Z;b<-0 zgCcjxXhc?u_b50{2$m9v&#J=Tw9k?g!7`ytKU+@3#&2O8+@2%j7sDji^ST$**U5?1 z+0Pt2s9(Sgo`Mqu_B-gsGM}cGp^1~t6l1$=iE)#R`$d;xCkM;Z#Ml91Oaw7@T4LOu zF2-Hm3+gwUV%#gU1VfAmWv&q(MKSEA7%!!W@tUl^hTNd<y7fjUh%re(^RlEEZ>Ed! zcK3q%>!uj*v2CMGF+P;J^4X7KI8coHa3A8&4LNjO4o!|t&ba`xek<e5&MD?LW$vIG zB>1PyM}+=^9P*SOIoCsiUKk7~K%RdwTRfKi7dccBtbpttijjSt0@>%A*>Q)?Guf`x z_;Z<lwi2ogqKVwOX7=+i`%z|g`~m4=g$aWu1Dh2?m`mC3<}B_q#i;Re&KBdYFxhTp zW%1W3{NYUB#)>5`x3dzf*-x}LD5(QFi)~RoQP`>Iw<zJsrSZx7Z3@@fI~C|}xB=F9 zITCNw9ZDir#pa)aKgP#=>{ogHP9;$isnYLK5~1o)b*wt(pIc3W0hls(D~Zy`c(hzg zXQ$t;!0o#oZr_7SXi93SDNyQBwBK@yaPy9ad-ozU-`ayaZ^NzI!hf1SMtDWhUs0Gj zgB?YCO$ikTi}9yswyn3RBNF4EYTHxXxNCLxJ5bph$k+u7DfIyrw~<rWs9?VqmNo#h z2K4|rPWVhYK#nIEP87d@@Hf(z5S}1^1>uRx*NXn7!pu|juawf&4T}D?f?BPuLDhd$ zOho-yb{;-qep14y?&6tQ9ub6Gr<P!Wb5uUJ6Tzv3^~b&}AGTqm+QqcO1!|W$4>qaT zZ(Uu+Jh-?=NqvLbwL1H0Xxyc$sTQ)B%@<b-SE~H!eVxiDaw0g*tn+tR=M7LNs(>4< zI&Vs^^EQ<kb_P&6^sIgtRG%{(_Znr@CrjO}vc9=TWm_XY(4%&JE6RO3$o;Tt>JgOt zah2<lCse+&cv|h;lJj>+cwXfyAf?luzy`bw4M64biq(Ku(;KkcYCu=d2E1uDU|)Iz z-r@~-Tg^HN9|bD@ro(vrrDt0{FnRoywI#{pW6ong?}X2Lv_O9WJ0Sp_@U@z%#lBU! z7W=nSuWZSF{+EOLKh=8G7+0%tLqRoVP4yFY5eoUU%BNY%J+8qnItX1;wS`U94%&rN zbsg>MK2_J#E}W`o(C$3+Ur@*gLCAB_94Q0WkCVPZGcQ=KT};z-&t{sYdoH0&_b^j! zC{>7iiDId(H0{B9J@U;me<h=OOK29_k+?&_SdazmS28KN+u!L`DbSUz(aGHJbUKGl zsf)Bl*{6Jof5{jAEe<geIC^CKHSm?bL%>(IMyK|uZ&IYqxq`jAFNjTVX|^sFwXA6y zvaBzs+=6AjyUO>8edua#T5Y)FA}U~8yk!l)TGF(#tzcR2F3E$I_2yA8*B-NEfpb|3 z++Zpap)zy+!X>}yfmvyv-_qU|?fLc0F@M1^i)Su7ZuZQX^Rky?p5x-tXtM!RFrm-; z)bkeeFX1%GQQvy=TJGssJ+^QDQ46JyeP~YZ(ox^i+8AxkHXx(gn<K4tEC!Ld+fHd( z(dObgjQ;4S32FK8L%*-@ynPLX6ja7;`^lw$eB>W49eC3W2kHN&vNjVjae&3T!Du3) znE~mrs%2iwnrQ2ED0k?e4toFgG`#ovjOP94azf+Cat^gNY*{~^^4XA<9uw%hu73Dn z$BgbL-Dt>v$sAf!xU5ekfa-pk_Fe|%E$TDXkoLb~46^1dYcthRuzdyJd9-g<J@X<k zrFk*9N3tQ@f5Z`l;#M$yppu9Sj>_V2OxAvoj+Ffrtxxjm;^~VP%$w)pbr`BGD_Nrv zk%Jf~O_64U8_tYg0ZoibkF_>(WzefhL`MVO)dF@b>$}w{I^04-?LB9oL*hR#1U>5= zcp+1V4DBt!xUv5!JH$loeanXo17XX6Q0on_&dIZIt#4Z%X**?cJhC!MPG&#HFj~e~ zhDnm#3&U0)J-G=HOqw;enFE3VMOQSk2zXes3Qfqxewvd4>6s>IH~7^wfZlExz=%;P zu3j##X%yqDdI766e&Ua}wk(g@K=bk+E*vRig(3c?!$va5$TV0<gc?RL$*O@griT<Z zhQortQP?8Q%?vK2jmM!GjFVBu&F>eiB?&Lw59UirKWZVRo_>Jv+yiN2YQHMXf+C}- zjgO+EqS3}^qk}I9SdyL72rH8YBh@QfT~1FpJX;bDuV2(WyE*h~2iAtvp>G%qkky9V z9Mc6cnH+2(w>XY_OlH<c8csp`r4@|~;WOoW&hp5~(SEBnpt;g|$+@Zp?lkafU%sL( z!<aF~rH!TG(%E4oAf3%sEux7Uw=xq4bHpl_3uD<(5XoP~`UJ#r@E<5yw@HZ0YBIyR z`T+NtGLX(q3IT)Dl0z~uOMBTXS*%|!$MLa~^81_j(EZu{snz#Z<JM-(cI$Z~uZCd2 z)ucS9j%EN$?3rk5Gh><I8A2Z!KO8$!&`baS0S)@A&^7-*hS2=4Q8EV#h}j3^W&ajM zX@HoX0Zo<ErIejBKRMd6Tv^xxgGX(Q!aZ-!PFao3U@;j>W*;-ZZrQ>Gi{~J=qAj@w z>t-UfiuZu|a4k&ho-})^jP%Y*v$I26hb8k37;*=%ddZ^N=||d|+RT-()Y#N2t!i4S znR>%+sU2$Y&Nal0!)xCBrbgC8M@n3BFA{O(DtT4(v{jTL%|WZ0TY%$|mRZd$^^xWQ zOxf;h(o7yPqp3B@7R63OlY)K+5uklZo!Dk|b!Hnp`EgiAPUbc<jnU>+5qW-ORa}bH zw`DY^0fXUwc6q5c%B)K}cIKibbEenMvo$88RvOg}Xid@MYr?Ov;=sz5_V)1xEjaRf zSKJ7u=k+RlLFn`Ps&aZR9OSCXN^dH@VH)fnaVNq13@|x_Cam%+USGiPldG$JXzNjl z@Ou^2-T)+4`YW@0yvisZUo{9)QQ`Jh%OJ1Y5na)~9JC+1b1ku0dCQ7&L^zayRy^J+ z53==Dc$A7NFBXK-l`>{fyq=26N*S)JfvLX|;R<~adaHdE{=RYN5Dd`^@>cq)`-7lE zNJD6m*8};Wh~LkU2m`X;8wkkNh<^x`1-uBph{h#QwTVmU#cPftSy3tbeAN|7EYjQt zN!1nDFIC<OzwCE=s}!%dBH)(;KEzdIY~B892R?q<=Af}tqg-880j>83s-bd!zy~r_ z_`Gr;fGCR|ca=}^R{Hz_1c!wF@dO|v@Pv%ex(aW0k0Fw3UHCtQLrekCOM%RTl?f{Q z8BxR{=eT<ElBVU+3?9#_10`-p9f4SRD@@ouX>GJE17l}IVWhKhk%0@jazsaO#R+S} z)Y|5zlUHQp;=de0=A*6U?A6mA13{1DVE!wx*5>kh&<!q(PK8Na!B^rgBTo|yfTjkG z#Unx>BjS<Pm6$yfuV%G2!3z>|*U4q#tZX_h+Fah&Ue5?tZ!ogFsd;TSlC|)B1rZ}{ zSRm7=CDOPWEvwiz5PX9kT!k_uc!iN1tDZJTBaQsaXr!@a4crH2kd<j(8X73G5r)cQ z7RT}Gt!qQiJD~&Nmht@xGx^Fm*$D+rD?nG2!_yp3Z7pby#um)R3c9H=+Gf55Ao~n! zvCLkw5CAh}0bSd?G9IzKuqLIbQ5oh?)dXfV<;+*mTPJ_4R*^q1KQ#Cx?R=tbCi#~V z?J|;o2g$#W6gUe>;Yo#0k;11*;WMQ0SyK2MDSVz3USXgaYA+G(Pegl}Xs;0MRieFy z$cEY*MB7cY1j+9r+PftGJt7Swvg&kY_KtE$q^&7nhN6v%cHAXYc2PNl%9&KmqGC3c znLQTYAz03*N&%IJP_>ZC!>Kv~?Xl!hR31&$F_aclxrEAPR31;|322rjyQ$`-awV1h zR18pg3Kb8hq>jons630xv#C6XlDX7&B$ek=^(aafP_mH9M^mzh%8RMIgv!TI`B-WX zQ^zu@MyOg(rA8{psC+V&<5X^<@^7hp3YD9weFb%_rs^6>PNVW#D*ukkzo+sasC+t= z|BuRlq;dzL@;W%qhGPR9XA$cB19d{K3kW5f2$e1-)HR%DTta9jB+6UhK)k{mA^9et zZ-(O*IBtdGHi+8+=bexa)wWP|C6#v(nsp~c-a}~i{Xjne^uusG0lc3?P{VO=!qpx^ zZF}Lo4_Lef=eG$hdxy|rz;^tfA?|&M`wNub4{@hZ@(J9ePYKoj2GO4b{RN!AgyUN{ zzJufMaQp*~@8S3-u>JwgKf>`79RC98)``@9hDfEeL@IBF;|4fx7OA?7lE)$XPjI{} z+WrIsL3stTz6!@{aJ&xjZ-_-4$#AGZ3I-Q-3==X+1%_l;Fl-WB6-@@J$OqK0sTg+{ zQb!<F3)HyjK#dDxspFv3@fiObEOi2wS_)LbazQK@Hf%lVXjutS=b`s7Mr_0gq2O{N z2!pp0K`v;5zuQU2HnN>ukH`ki_d-(hLj)L&>?9qJ5IBFu&)GlY8O4tMLd1WQ$H+m_ zAtuT77I~&co^65*o+lDvA_nJMi5o5Q0*l;akr!IzMHYE6=cypKnaS8otPGc0<Ykao z+#+reFBh+1GE^m#uC#JpWsz4~<TX~=YgyS7lS$WExwcy5HjCVDk=I+~jTU(m<2WsO zeT$WJt3}>skvlAMr$ydwk-IGN4vV~#ch+52%-t4wk44^Vk@xW;_ggU!Fkx$w*AH4r z4_V~H7Ws%pK5CJVS>zKI`J_cYWsy%?<TDoetVKR&k<VM?3l{mJMZP5N7NuB1>=e%> z?yls;Is8I~i#>4prdYODOpVyrJ>o5~>}~NKBVr3gyeqo@oXmj{?}_gB({lVpbbr7i zc$FWDWvQtjiSEB9vttb(n>Fz4`_r?3BDz0KN&TDXPEGwxbbp@4><jTr@vF3$uY1HC zzzS2_sHa9C+i$Q*sX4w)GT~x;Cyq`{{(E<h|LD%~D&qcLv~I&i<N{({{ZmZ4DL=5v ztmGflldmIJke||OyOyLE_?KALC6<dopD+Gw4T)bwaygX6O|*R%l3HO1AyaFFi*Oh0 zAvMCqaF(KVLZ&P$DxFd*6c8<3BMcUZEm9}Q7;CRUBt=Jbx{yVjn@OGElw28^<+VZ~ z$#T^Q83M^3Uni&%ED<8p1%(W9BUWL4F2W8Lc<Y3036>2~4MMGup_>UJAPyTpU7%$6 zakau=GU5`5a*&bBAcsJTE`<s-Ngg%YJ6*^jV@hiTcvcjPy!hDPGto+lS>DoMt&mT~ z%|@`qvOlt@@dzjBaEKGi^BM$^Oq|8?Pa0GsGz(-h$A%Q$o=cz-yCi!nR@Vrp3#1ZZ zA9G37P&Cu^l`u}#`K*k83t=n*b}qpb54)UtDF|&N(_|idm{KDYT_F;3_|b?gdBkKy zXRL8R<h2l48$(dZx<<x#I>TNpV%Uo#;m*tugwcIqE}pnF6kc{xq`sjsS_F-;J9>j( zbU4?cm;bdKe(?ihY*oIW7<-lP6^+fxJEX9J)-N#{SM(<h>(Uoxj=H!`3ELr;9j(J0 zESEFx(6=%R-t8o804~N|`i&%%70Qlf$8r!yF_?u=Jq$ik6dlePAi-_Su6CGko2c&; zcPErQeHXLYWwu)S9gI#y^7OmJP<||*$KK6ojJ-$XTmL$owZQ8ov=)9@L<8O=oC(l~ zop>*YRCz@V6=GDdki>>|WFU$j7quf}HiKz&I1y9uV`TJ+h(<57nGvwVd4vIzh_Zf- z5Q$+q0loBXim=}q!VcH}A%;eTMwU;UJCX!PkTU&y1JaRmzYf6#w@HXNgMf~b<Zv#8 z=$p|@^sK#D!OhYE;vu(6`mItTI7&EcufBt2@5~*ACRcE0I^m}5l0u_{qlGg4PKi}l zWmb2$#PJ{<&IQ1?OG0G31EgAbOVam9p)rP$%@$@?v{%B**=YF68j=BVZ!<bJmTifx zzXJoKy?u}Vu9TR~%t;;2GGP0m#5?0dN&l-9E>6UY_5ECqX{H>Xpd5Bnj-Qfp9F+8* zQI3*WNm7nqB)puhAC&lgMmaiUq)j>2$y|>0GRomF<=7x|IX1}pd2+ZU5iij<%1n+L zQw|2I=rp^37eW-?DThj9rHDdl^10vObH9v+tEGu}ss1qMGt=br2=d9mIrM@ECEi3v zdu15yLt{gOWdaQMw`A<OEhc^)8mW$tjb{^N!p_w>$3QdQl|$vha$z+Zw4<de<VVPk z*d#P%WE155)JS*C%_9H8BVk0s`1(K&drIOS{X^Lp0sC1`v3gxN>b)^<veNk+V-bx- zSLf8Ai8{;Nt<uj^Bh5;`;F0#29V-3OtW1~rEkbCMZ)7y*!XsA6ZdTQ{NTvRr%m-6G zH>5Rl_}H+j-WKuc-?Lb>0yA&Rg$mk^F+<hah{S2kxyu!PTP|1hD;16nb+uxtf@>76 z3Wn>~Dd}@=D;joYo7`VO?k_25u?O69%sKbElALp|D>&zNEBbE5m~)*hJD+oJf}ZOH z6}Lw*I$<BL?nJY?x3Rih1*G1D`jy*}`uFHxD7$AOH04)HXi9Jj5C@dd)Y#N5Ime^T zYJ>21MgK+#PYq3*J57jB)xTw_<<ZDt`rjEDI~=+ELrF{|!6Q(WD2ZYL{@IJ|!5X<t z|0hUW3v7Q>LUouwSO=MYW<^UQ)Ae6atUTH7a2}LFtTR=ZgB;;9qd_U^n8BbA$05RH zi-4epD+z|DidRC|DqRI(n|vLFQRPtxSE-L96e4{>)z488_;4l+l5^EiFwq$d0(riQ zccW-$a{O;p(}v<gZobNg;&iyUh!wyS8+d5UY7WTFJZZC;bcvcAmY1n1!}3Zs(f<F) z`x5Y|s<YvH?lR}jl4P<&SP~=>zzDM>lLQ0_Bm-ez0-`d(nPjesX2DE?pkHf55!@Fn zDryUA-KceKtG3qK#agw>Bm#D~*4FMEzwYg){O^0ty)$>h1nAS}`TpmB{=nRG?z!)I z&wJjp-h1BVDBI^4MvII0IocLibuMO~b-<`xVl0{2?(EEoIdvyim+g0mZn>SCGQ>Cp zBQecrIRKZM1MESE=%HaW==hL;c*ubO?DLM83X#x(@G^Mz031N$zleDDsDNM2ueDF5 ztOq^@z&vfmlUtz?4sx(akx>Lo))yV3_x1|`S*)W7j9T`zC}iaUQ4&(|41YGl>BC37 z_~%5vFNu6B__gjSYxJ`(J4SfYa$frLf?J~WuR5@2V7s%I>{UmDlwZ#%eXw0;-*BKM z#!Bf4VH0l<&Dq81V01Zq1)u1np6G+o73^F11n@>zv2Tm$%IIqL9W-xPENgDhw{Up8 z?%-zYb{?(RiB_4eA=2y6v92ZLO$U3^k>ounpIdjU-boH_-Fk$*h1L((5ER`VPCwiQ z4+~}jCx^|Zos6Su7m?p_u)~hXS^x;IB|DF@BmDVDbRGMlJ^%H@v~%`jvsJh)tLusK zQ#9QO`LE~sp=Z6v0b(j(_=SVp5>><m^)a_a*(ZI>N6*I&b~WW2kOGwNy@tnez=m6) z-LB=gFj&^3NiWK6TEdL+FtP+?XDfy_97g$B07~28JuiG7jFwL!VYd=#4@D8$wbi#F zVF>;i+BQD9Q0g4d?&29E8;y<678IboH;ruMo1Kk>xBmI;9szNIalx}(DtaG{T)-hN zAcvwCvioUdQ>2L}G!Y<q6Hxg%YEF0uD7R|~<Q_zFALZmmU_HNwNME4r3rN&HPE_PD zdjbt12B3szXtMfVB5Zw*=PZZ29jV>f+Uol-%MPwRz@DS90eBt}-ESd!fhH@ykhb+# zt-%e4eGy^5hOnQtU|#~*gLYWBfysWnM%|tR6lgw#H1C9YZzoFi?<dkBdW;+(1cL{N zjKPCM!C;9x0@pR#JCu#kL&i+V#NL5O0CKV;w5_eGvyHt=W12O!LG`Bd1)mNl(JEMh zgPSH4hI#p%@IwpQ16@ugu=Z1HuaJ+x5x?OVYD+((ZT>1)-QO1gTy5zCYVI0Z(1<mE zfYbYjG|T?s*EGxi;WyN_fA}5LU>ekb@kAuC3Mr5cIVqaTgA{*6(FWb{!8D0&MjJOQ zjK&;s{`)f>u9T9)2f`OAXw{KVd6Te=LbN#fH+zx)plzFnJ2$g`(l$BSDSP9%=d-Z{ zir{Se#7d(nQ*rFLAhW;^d3NY+QF!x+vTO86jN58QqpR2IZN(Lx#cZeEwmH&nv_nDH z>7tI;>oJF|m1ZEq8}yhul4_<Ado$f=fnziM64xu8Z>@MM+^(Bz7q-G4{s3FyPCd(p z>N9$l4b@)VwsPHVQg|OvL<+DAp*hD9!E-*D->*kHjE<N(x*3{*gwOGuY`>1C=0;+w zXov@RDl`Pz62*pi&|d22^)|rP*})#x+mw+`g}20Gwpv>)@wk;{Yl(w`RNfL#=xuRm zi8%Wrwge>emUvQcE2-!#K?{@}yd^r=(`G%tq9f(pV)xhdh=JB%Bb`QP*Z{_SUFW7{ zRk!D}e0|_HAaf5_3|)e+*|k=}$&%F~2=Uq{oC6Y%xzF#En9xn$`j5<s!HbVN36 z)Fq9T`;$g!f8H{4Ef~?+A?P2&&_9y8Z6$t3w=EEdb!&n6fet$<>{z&y`VmhKUkY{q z36H{rG6BilgJgb?BC{t&=C6RvuMqN~&VH35^Fuw-v$RJ7DE4a|>pg7LCXE&#vu1zZ z0<q-Cf6&=)fqBEgyx-}zCHs$hY8^Vtj`1f*=AV#E<T{f17oLpvX%$#vpF!HL;ieC} zk4!&WG1QBT?2AOY#>uX8Cb3UGTd*68{VE~5oyW-6h<pPCFA?P?C)@3ebSI6za5sV6 z>;~tsF$p$UH#>*12yV~t7H6avO%7Ijm-fnt+zZPtyA>dSK}ERq+-5;IO$c^}Gcq~J zcglA<(OxQ7VRIgWaTvXf-GxRCC#kyIa~OB2_nD+u@$JEMF=3;9Tgq#3pObygszrq? zu>($SL7f{keZaYxJ>(QN_l-nkz!)$Fi$Z8j)fw4pY~5Ng4K-Pvrd3r);l@}WbGB`* z=-kR4cSf!-u83S|Tp2C$eh230Co)m}SJ6{MaP3K8*Ly^M3WA>#<!R1C^%)4>C)!I+ z_GAVRpAx(~xb-M|+Bt%+yVbuSJH0?}^#^1p?k=9;T!uyFIZo!@f+p0E0;(dPTKXvo zDEo??<WB?1&pX?$8a9TAv7%Cbu=6VRg0t;PB;F|Myb>)~LbM7x&r8mjhK5&h-Fn%H z@4OX-xblAk;<(!jSIPM3o6eY{S}Ver?r(DnU|REj8+*uah~rHsdyOZ?9MK(wy)Kx9 zgj|C*Mc;Hr`j_@g*gWj}P(9SFecK7!#*Y!kSbhL@f`{OqQ@a{Xl<sFqj*ruRAiCO% z9s-W0v#h`@?~cmy1CeF9$ijZ)9FEa2>==2uKNj>+V-@^X^F8uUdD1kPp5MpbHCc7I zJ^$dZW=?Lo*?bK;yItd*>NigI2d9|a-okqSk&us|Igb(f&k!)8{2hXii25%lJLXJ= zccR_ekDN*4I@l<Ek#B-cYtP5g+Vh{CkzK^tMN$z24DTj{{e>4|z<9oa$S|({?nHZ> z`0nx#XImWOmCDEi!w>9-iS=L5`@{mW^lXBZvj2hRjNC|!8`1J=^k%|7#stWOHda3| z<FF2(3Ebl_;-G<X$X$&}Qspust_}RN-)$sv4?#P#zQ{ge>?6KNlhKqiAez;7=-tG) z+X~V)Lp$$En+(0PGHo(c*ub2f;jmX2Qv-lslW}P~nR7B={sZMJ@0Mu$rGR5?JkdAU z-yTooTCs(LDExyWX8qPPYL=dFGaS{_*AwmPHFcAOG??Y<S3HvPFOCmnA{}R8Z0T+9 z>qilR*8Z-GQ7X(VV0CwNdspwpCF0h6m_S#^+?J;}woiFRww{~j#}X~QM&Ec2!v&ZC z(YnFJmN*L14)zY5=m9wg{dlGrP<wLgsDi+`8T_9WO?bOTRmI5#s8PCX)>zG!5+BPb zpKDE>J!YPSs7kZFdevh>1EU9f;u*kWTU#|HNl7p1GJVuL`vyAW{rLPpH-DD0*jF@~ zca^pN)9|6KK&{8FXxcM2bPHiA$x`FXkOQ~L$8$PSv^LX2wkO?l;{7?i5|&v%hp?!7 zf|B0Ytz{F+<zmWMxT(}tEaZFzJQBTqOT5x21l&y*;9O2AC5fNAB`QW$`yhJpwOenq zTW!;t`}_O)Njy_D)14-9Rv}<)N{R9<+|I>|xfY;lJQ$kOv=_{&QQEr`bU<`#rK7LC z{<Nx_rFvRpe}8m4iINy;cSNxf5{?)TNKY{k)yRS49cfuWa!Ji8M^Ci3s|QUkK`kty zUQ6k4VtW+2-m3ofy*wiNMPow9*oIE8)zD(H$RL1fPAePqM|-A!qpS_^(3;s!yDWPq zyQybS%tnOT1ruX|Jte_s#DcB1+#*TcGMMO`a!M)eT+Y@d@xgu=30>`{FTU;O0A@g$ zzZr#AQHd>mQ97Bc%jR%6tHrV^aX1p#_2ctS*-uW^7r4%m5V3b82KtxBd!32FSb`7K zIj7YK{qc)&HppC(%Ag27Q;c4#Dt$Q_YumijDq}2c8JfW^Zey0iW$J2WsydA!GO2SU zkZ3L9f=^jQaGl{*i`K8(ylQ=`E@CY!g}3Nt3qywIcHQ)UZrbD48k?G$o9No+6{|Kh zH>tSt*hN0=Cj9cc63yuz4fmT(PMP-}b7~T%#l<A4b)ie+9H5-bqH_nwMW&N`fy|uX z)8;A*#e~(^+kv|e0pvfu@n>5wTxnbAPHVwS6lR$V)eHLidYmhOpwZUNkt6Q4-0Qih z(%R;AEf+MWjTWlwmaIBYUDDFj>{zs<apmIXf`QB9@m}bv>50=T=&%`!jM^sGgtvdN z7c*E(e*&l9^a5(lqj{ZO9r0DB_wVN34%6;n#^UG1rV?7xHWTSKll0z{MS7D*Dt025 z0AAVG5uaf0X%?mgG*=6wjX>b3r~fR?R+Md%WK-EH%(5-2J!L`Jx(_NDjWU1lf^~j_ zP@=MHJe7$uv(>To^m^GSE>0UWSH|5*h4*VuZunkc-!yu^hN?%JzqX++qy_@MI<+QP z-%y-&{zIYoP(8}}YXM(Ps78g`fEo<eHsp<3wA6+`U43DeU7T9$Lt}^yKELJ<*4Bmc zMy;%BeQk}uFv}i5tqa!s)IeR(rv@8pLTWG+2%rhbfIt6)HC?Uu*P#V(vC&d%Yik?E zjWyW<8NRwY%Wh<_wzf_U`2)a(`e0BE)T1K7=w)232lCZ`-(NRcl)XILUU*J=Xiy`H zXtvKh1>Ed(R0{+{!3Mb2)}xWghC09MuMIYoa+zjY;wtf!Oe&pZGXyzZpHWh+x9goH ziITyR&k*hBWZch*X158cIV_uy4w7>{vCKj`sOqGen`${!9%UA?7;QzOLC7+cKGx2d zK%7-F)ymNhWZv1-;iIyj<^`x0bk;z6h-zn2t)4m>oO5O8IWo<ghjt*fbE&q#*(f^~ z$&@xx+DvJf(#4dPQ@VuGIh3|gZ5eu1*Va?A!C5ZT+>4xTvU4+Fh*EEidOK)doN5Nm zznJEB(cE52FQWwmv~Vjeyqs#=Y2Fo7n?toLg`r62RWdC=Taj18ZwH}y*9yCl@^$dr zMVz~d?3@Gi0uMCwpnemCrcknc2ceEVgcjWiX?uxtCy{B<T@b$;((Zw9AN=lx-+hGU z-w*Hy;P(J=J_vB~Ljd!6c=j-)Jpy43m5ZqMD4{uz!QJEV`vUx)fZrG4_Z0k|CeCLd zr?wm7&%*CH$oX~neH-GhLijpR^(KVF@OuY-M<D%O2!BFo!Fv#YAAVI%pW=LssHKwR zk)*uw@S6a?i4w^xIcum~hFI;;ta7=0(!`}Z%I7G7@^WwM(DD^4;rV$(<#64|ujljY z1w-XZUP&Nu$!^&Vf8`f$0t6HLhA!<U6DRiXxQyg2yOj)Wlk=8MItXF8nzwM#z_KUF zQ2F)b2C|Lhb$y8pbxYEh@pFhrlBII*FUZjQqzdmUzCz^Z$&2I#@>P<Gek~n+DII+| z9sNc+`bs+b&2;oz>F9UT(eI|Cucf2kOGn>GN57wrzLk!?osJ$#N0aI3NIH5r9X*<k z{vaLwVLJMwbo9sR=ucr-N_y({XXz&&q@%w~M}L)$en{lfYl%~r3Z=eD&Jw8@diny% zE0KviAuN~3Bx%CNH3eQG<t$L3W01?%s4|hSSd*7S6w|%2x?xRWKFkLTRG&l~t_2hV zdgYoNH_`uVjYB2Q;F??yagAG(pGVxETH|&S&!^WoDap|nXp<z8>p?r6c|8l9P@MPD zHAMv^|Ee`Eoxng`Lp4%(HCf}$B}MK9`VInx7N5UHcaW0A8ciXk&IJxYG42|&#^WO6 zxvfvRY(kMlO60yKAa`;p8vQIUl~kf?Jtr9bT-YY#$x*eA=WT`-cF0lr7|E3vA0v6n zx;DB&iqd1mtDfJcua~0wF_N!sZgWD^d5jb|E^TuGfa@4cc>U;#De68(iu8eqC+v}C z2*E*BoA6Ny8$xrUJ5a(;HstEka4w1Fuxo@wpQ37$0punGxrIdBGY=c?+m9rNqi$W+ z3A>eB_OzhxL8yC8s6A<@`w&W%HC4L;pdKWai@}N^FCJo)OAkVIE65{oogzO<*dqk3 zO&R%#BkWN!jNa;wdV}2O;Z)^ug6@&v@rY4i6e0rl1rk$@q9k|3_XNbl#nKGOIPyy3 z=t!kB?$zVR*^@|trm3pd0Tet(@XYuqdPaT@$}A^%oh`pe*o%al{4xr59%Wx8BetXG zk!laRq(irnFOgyRjj*qC_tC~U_A;r$19qb<JVBkoUf~WZG);4TM}fk=3x%CG^C+}! zo%~%AClxz;6u1se>QOP6+@p!WfkAl>70>iIN%jEraF2`(`YsSS2Sz@79n#RuS)6ps zKxL1@-h`BHrP@=3M*!c48+=sVupghjEp9nPxPoArEQxpOUVh*{Oe&VJcX$H2gyn9( z*byvZGNy$m6C{isMF<BXT1b|#pAhy_k!7MW@!5h#$nu_9jxhyEXYb>UE{wGO0<oQ8 zoMBAmk3JBPNWW?nV12!3;OVzOSZ<UHF^6Acu5wO8IYB7)JA|OZG2tJ091FywG=8&$ zeMG$Zl61&7;=4ea*{;s?oz+7o=_>mRJZFCuH6q5e>V@oYys-V@Dk3VVv43ESCIl4! z$>UaK{|7h()8TLBkL1cT_34s2Ntz+ia%rZdO_t7*9FwJLoQ2MoVEUOQ$rGj7l0HeI zic8f#B+&ZTaI3aHJeBYX(}VD%@YCT39eTNR4K(lyg4dPuH8Q(iP8vlcMp4lNcw(_i zxe*?$R&Ro9g?0;E*Env4>lAvs%x;vEVZVgP*-i4Wh-&N>8Ad}snkl?hj%gU9>~<L~ z8S36JA4Kc)Ju=(FlbpzXC;JTKiRnf`Op7^<0`41ouRLuD0L7f&0H~NVMvITYIJ#Yq z>5!nKJJ;f8AmLsa1uk_}R<%h`-G{g|ZMpQ2%pR5_!Q`}Q;h-{uJ%X~bP7CNs6X;19 zrGA6SDgngheq9#Oizd*EGW#0GRK<Z_LLj#V^c@rEJ2Lw&$0UGWLm-dCscKJZ0QIhn z6HdDdKMlP=J21<;z{Lv*UN^~jtx$e~d{uu6*NDb_taDiQ3mFgDk&i0-fHO_=29RmL z;tznu1x8JhpP~LbmBMrWM#dfqnPM97Oatbs#W)!qlVgs(D4kJV&i*7PtJ~P00dMtY z_7@1&D?IPt1u93lmds%Pl7|Z(M%fB^qyTEhjst?3?bHa}4lO}rdNic#I%U@=F^5rC zDIK&#aoDv=GE#5UKf9GXK)g<g)F;FBWLmVryAJMeRs@>5!I>7KIz(j0aEpauCKtAz z!EQB?7<0HJ<2eU~ZP445WL0#YcMg%*UCIcb6z)NCLX}b>nr7Z-mKEBQLGpbjdQRW{ zCh97n?`pU|VAiK_0IgM8#O|4yg;p+A@vvDS&eKT1WBeZ5?Quo4+f;0~FWAd`BFz(k zvNhCUG<|C!v}7eL{uZo7Q@BdHV?3|eI>w92=#KF<Go_M*=gZKE72YwPS4MS=Z=!5< z4k}z+k8{UsC|nJz)TPpE$}yOaUQ^f`O0wEhXy8n*48xp%4o(t1@*#yCQj$jg;8B)T zMk*aoT0BX@&4KW_q`Co!#_4!iNmfcCQQmok9Y!qNA^TAUmzCjUv;f7%aS<Gb=#LaG z9j$7v^MRoE6kN)V_)sYBJ%z7O$H-;UdkTA>XW3eSCUJko<9xO)Si*j-cuR0v9>!_; zD4&(9J?yv2l1Vx&TI`R?5;8qBukuXT&yk5z9=x<^UsR#2e{uuMjYlem7IMR_6+??G z)2-X2e=6)a)VC?pY&1VBgan4v#cYT0FfVb}j@LlKPBj^6G#YvDt&~hd%wbG279ULc zdEAvsTyl_$0UaZsBG;?zdNtCR3^x*>g597F8!d?D3@%UvcTJEGUP^YPgnDi=6A$hX zPR(xt0`_p!%Zz2l@`IKPmX)&NV9I(e>|Tr}?6#QiPRO@6m2X8+4vHsSL*&O)b~hv! zp|A003%22)QX?xNA-s|ptE#xW-TNT#XVa;x3)XP+>B@eU?N^1f<+Hgt*fh)<SS|{T zwZ=NLI7IUhpxLil-j~y$Mt(7xpnZ&!vCvq!3mS(VR7WZbJA}ZC`h?1!P)Ceb^k=^d zn~XiF#<YsUCVYMa(VkY>(~vL{UQcj|dPa@Gf|!Q_9M7pEqGsrI_XQ|)1d5DoFgA>! zBhBOnHGG~t!;7L%uc(oYNnjXvJ^n3}-}h>Hs&)^>F~coDmmjs}duzqT<yWuR+3v)M z3omZGc<_>g`_NqMSFho2l;HI?BEO;Hs_=n|tHLi;lpOpOT-P~1gzN2uzOJ!1)X4e6 z&`{y?Whj!psg8)g_<dmC+fW^p$;39cTKz)fLSxfG;S&9j8mUBa`K6UaVMn0rM5>Ce zL?+GA-&NVW*#1B*`+*vBTKOy?t{-Aro6%-$PN)3{(=IYDGNS3UA6sd$blOia4I8@s zAfMsc&s1a=dk;wd12kL_N-{iK@HA3#KXD#Yxn=;Qhf9djfxKfMsWDe-LWKE`J1HN+ z44);gKdJ0b>WJ8jxY=LSm^nfIRgJmDuH^5km@08E!v4u`sCPQv{0~6mtQm91DC|Oz zx=#dk$AP+ksxb=vk;2^XC_V(e@b9W^`oz7+joOGgI*>d*v~SX&ADLreYr%)Yle+sB z*d=KuksfxdCJ1`j^s4T;U1N73s+b3<3C9Wc5w=H*<zQuVZ{dczu|0Vk@By<|Tg>j( zL|r<>n@Y|;jqQUxSQqSH>|UNH)ka)QF_vo>TtJ!KuR**BH6Azw+>8rfjIz3rUKKUi z^APeEo4d6XAAp|XJD}pXYAH^5AgK<LUe-pE(N6XqZ3KRiE~Cr1guSZq_mxY--GKKs zt*vJy+QVK4M)V>hboPb@dqCb=Z<;Kr#AbPm+Z|_bYmvSY*!KZTmiEbfU-G7AYk_y5 z)OUbwTX?rRtYJfhw*bLMxYC9KZ+|Obfc{t$Tecr-IA0J9ZXhxS+ms(`?5A4fvhZc- z6IUBfj)ePx(w}RQ1a~q13oWuSrY8BY{{WE|D6m?*BLmjoa@7p4<r5ed4czK2!quW% z`mKiJnV@y=3Ylp*AAW?^y_3cuWMND*-!_l3kF*hd+k{z?FXVsXPx$;;ILsIFznCfJ zLjG5cFXSIV{a@izrTMz~u{LZN(~9uT<~T%)*pNds>#*6XS34jT_PtwCfE?nNTe7MU zO)n1xZ4#gQ)$1JWI?Q3txiG8lcHpc!U(CAN4Gwk#O68}fT?f0#5pz@&P7?YUf~B`} z(f#l?!WA(DPwxh_qQ&lU@D|$+iTh9(zEJq<5WIyT|4@sBdMAV^Dy+?1^dB|`v*6K} zxw!oMMEWxDyNZ0-!Jc=Z*5HedL&?sagniX<Xt?t_!oJ3Z?9l-9JdX0L$Sx9@WK8l! zu0_Y+X27jLm%`(Nj>vBFIb1f9Nu7O=`mlpbCViZLqMyg6{^-S{1d~uU3I5(Y_YqQR zxA$ZN{SV}m)Rn7NHcQ+(p1Nq&>hsn1zAfAN5gE6fs4j0=xlHZu>b*3l1IlaRr-lQ4 z{Z71F-QTxuyDQez*VTJ5QX|akwIrJQF7M6s`DZsj<w_qt7FmZHh<8!6yBkf2)SRBb zNn7=2MHAD;;LPl<1m0Z?6xux&o?w|PZI-Zb(Ykf~l%gr#-W?S-XN1s*3+ud&3lX_` zQdXlmC%DBxx^0zVB%qM(B6M|ODz}A#wj%p3$HPe17GxSXf9d8?Vf#|s!tH}`v>Qcm zzIeWhdne?QDr4EIb_rY6O{>mZsV!RGvS^trHaIYVqGOl$x^2vGHd&2k??|(-0;XNP zOqrIf;s7~Y`nIe;9SdYB>!Dff&`sz_Q#G2|xhaNnqCEV$<rLJC)v>`BnU<-VtZZnT zG9}bw2`ObcU>{|gG}DPCw-|a7%bKP!(X5^j?Fa2S-S+3B{HA3{PH|a=Z76HeHL$9G zMLe1q>^BXiPRRO5^qia?J7jK8=EDqIs9F^JqJtY>+bDwbO_{Vzi)_VNU3BJL%pbP) zEk{^1q3Yl#aT`T&ex@wR<grF%M<3pCDLhwGYDAgmePfQ}XnT8n3vc75{=O}`5s!D^ zWZ{T%^GB6qWkY-NVGCBsg-sm`7T92c=4N(fIniT3YR<968wbuB3*RUaB7EfPO0=4+ zEll)m=Hnbksbzb4wBXw*B>u#>U%xuv!nNKqkT-KIqEfa?Q<Jce$_bt-Ll$!Vr<*55 z7N0DI&;=gXcMs@^&MsqMS$sQfAL#Ff&=Kv%+v-!H9_UL?hH2RjKEv^}F<aRdKk3nZ z&FOhh%v^@J(a@S;ZH>p?@if05?Y!00qd&nwD1g@K0)e1f69|Mn_KHAyU2VXXUbEEN zK)qkBsjGwBq1t+fId<v-HMIa+)8Na^92c73SMRH#W^aRX>qE6_O#_~u`x@#kuZ}jl z>il(Tu%XUpN|>7F+fZ1`(;w%8ON0H1zJ8l6Hy7{vJk^E!0yB!+1`$<*!Mb1pKMi-3 z6qbxHnNV_eNl>rV>-2__1tp90X1%ZEzs8{}xbyI!ThXYZqYFgEV;*s%rL7_=7gI%? zZ%?GkB&wW6X*E@5QDrt&d{p)00l1upcD0-})D@!cdg?fbD)XpvF7-6hoP|`Wr@2iu zH;gv6JWHtDLY1Y|vy3{IQ|AhryOQRvqPeT70{_=grIIRZsj`kLtyEc0T^p!!9#u9{ z<$S74L0^l?1ys3^Dx0X%Mm?LUauHS9sS-yET<$KaTtZ#ll=RTNUaD-N<T9#kqsn%w zTtU5`qRO>|!b<{GZi3%!@Y_SE{22)M!4F<i{UnF`OLUh?`n;<7-pS{ld#*dOTl08` z0{<Ltcdlu!jLfTw4z-ebjU7WVsnL+6d6!CL-opN&PBPCsFqDAn;7~&LHm<mG=&Y@h z^l9!nar{;C5ZOVlhMl+-+nI`8mx}F5#dfD+*Qa7PreZgzVz;DXx29sZr($=cVt1xu zdsDHyQn9;Jv3pXndsDId;H_Nw969R%yxC5AAa(Pg{pKP2&3s$@^Z3BR^e`bs>z(=N z)V)v(YmGUCNGtIKl{gmYZkLP5EqHpWIPvsURl{nd8(tw+;nAmK^;(4xTC#waN<=SS z;HZ*_a}A!=y25yt>RyY-rJi+obecmKI1yW}5>^_WgyfMhX@o+&t$5s;FNftuN=O0m zkfJ7N9buC$N0Q;S<kAyPP_Jy0t7)fvjOb8_Hl^CxsT?CNWhZG<tKFUIG2&5gAZ=Q8 zPA9w;=4yK(Q=a2KxO(XU(&ng&!V68l{xG^oj8gnS%6%BQ2tPl?Hz9mMdIpa@pChPO zhmIH3d_~>ofb^e1`t)|^bo}1rX?IU=_e{rcO`i7LilLnLJXF{BLaEZvpuEWhujMjc zD-^s=QSo|)hS#YMyjD`Yo~i!^uG5^qg=>}T5vbdA_v3J#;W-G`nK@sS*&jG9{8Q8) z$zt{q8L_-or9XQ9cPg>qV9JrtpNQq=N5|Vg15Dvo@lETmfao8<l4(%~`xn<ePDYE_ zane>2DNPP9EtR7sY)DQT<BaiKgRKmG4aqTeZ$X5A)ymxo)XmM?C9~^fRH3W(hbIzb z1KTaf@~Y>DClTZayIziY7fM5u+f{Z0HwhCdkKrL;xB?K~2n9?TY<IGoAacfFyUTke zzTln!cRLgunQBaZmLC`1A)`4I<IKoZfS5|Aai2|l5TweedX~F-`;2+FD?D97{CiXP zGbAhq?ab`MgSDCX^j?ge1?lW_cyQ*7xx&?eazCeo-<}P(4~knFoy9&cqIz^Tdqj?S zMhxGG;a}>Jv0Jc5<w*I65dhj_?r@Osw8tO~d08V;Yenkga?EXn2HQRCAjawj+jG#G zj+vW1X-6$E<)V$9@+4x(6<BgjOFOY#BNWs2N9)-$)_q;fu|L|tz9jBFT&Jo2Ks3a@ zEK+iKO2dI@9eYu*9PdNXIqa+H+q&pn_I2bQKg-20oiEE~(@cw=!@ePm`^bt~1ta7Q zety>~y&<#j+iU^7W!eG?u(xF{IRM~m%!9mRBqqHpvmct^HK^w=C$T>oYU-SZQ!;z6 z_`>-UnLkx_9%er?5iejr=bk`u1W&_H9B3Qp_a;in!}BlL>7@|Gyz)*M*bXG)B7pvH zex|$dF#EHaqZWI3r}S4D-Fl+F^f-L_H|V2cEG*(4J~3J;g`42!pK@DC1q_&v<+kDq z7)GDSe6C@~W#JQ3Q5Qft*K%t-ozk@myG}`ln<d^=cPmLTmeFHYcrhC5FjJO9T8tK+ za-(T1NKwZFp4&K{gmjz2?ttZYT9mRq2;j5;?luALR@gp;Pj&2GVdh6w)C&P%KR=A| z9z90RlJ>(4x|QJda`^%7a@3n#>Lu`$J*bQf8@{NIJ%kZ|)XzSTk)_e4>|u;7i!Ni2 zU}Sl8IeSzYL6bj(s2Wb92Ne5PCXWnFGl8cVkqwdc#(E!KHcFE^iy%!Xr@dK}`UEsM z(AAxoEw*9&9X;h5>^RJJ(qjbQ#yQX&JCOgRUrRXrTpK*>QPnPZu~7!$?Tde3XoBry zr-<_RZMO|tw~Dm3hnq34dozdTZ!ykZ)3AHO)scEH87+jF@v%bL+|@zXw=}H>yiOro z40jdTDre`0`SOPHz|~n{`*>WCHb>mx8{NdLz)*X9D3o%>2C;l>@eQ%{#$p*YFUVwT zWo^T0C|L!@{z50-WE1WEU0VibbB@jCm8t)?vWS}VjQN7?qH3JX3HFqh=56BTwCf5q z5PT}j{r`rge3#%1wy@rn5WYPMP*tE0W7{nJ+1rs9V>Tn?Nl6<6_Xjjo!`goKDf6Mu zK}uE0q^xv|dZk|;3o`+D4Rx!3JNmjiHblE=N4z_ZIufhbu3Fu^w)OnYLPMZ<OGaMv zbvK(hzqd1*$Vd?H-=$d!U)I&z;b>}J-rU-(UJ7yDDnu8=48|Qor!mu|+U!&EM^s|8 zGS{iw14y?r2?Y?3MUmxP;^g^z<J-7GU_K12!7Zz8c};!DS*MMHYn;qHEpW~$;pD@~ zKXY*s%&CX__u*_ib@dbJ?s&qN8r1JtGYEqTI!gziNU;>RZNSx>dfGa1i~yUr3=X(} zR#VNVBx49SMF*lS2r(rqa?ECpa#tGI(Kk2%f%|f_*e>8pPe8kh!<>;7FVAQpcH6*( zLS?t*TX8TEUliRkFxVf5t}9eLz3BTO9=&ueDzL?S+v8_uEnzf!Q$EzDk5SPR##wgC zv-lp&PQd6<>b|_IyW7-I$i7(F0J8VXtWyMcF~hY1^SXN5y9YbsYq70+ySJ;T^haiT zuv1`vLal4pmXyAcZ>%!XPJ1$kSl*}!|D<2P{3reT#mn84x&8^Il~7F}r1|S={UMLN z^J)H?TAwc`qu)SUeLepkmDVV!4~5j)kU!|Q&oq8tprKx^^9AdKeybYt)zs%?Oa%Dd zD^RC~0<}K3ZIo($AgD(3*VY7sx|IQ7YisLsGv`3HArPqb*w+oUKGaaF*4FrI#p#b) zTkiu@P_|$5*9U_kH57tp{$L;!M0XGYHPnC}8bS?zA9{kQt9Pa+AHP4~uXl*Cu7>LT z0gbcGy%zfIfH>#SqUa%D5}wn|>WL>3QT+ZltE+F8eLrS--N?=COKPCTS68Z$aiqjq zBA0lz@=~W>p-<7zC?jQ4%UpV;ex^Q6uPT{c;xAdNZ_qDvcnIvAh1Q8D$4z9FLYSN9 z%_l{qfG90grubP-by4D`#6#sAD(6xy55LbT1yn6G&ETsOoRi4}nJUxK;Js_6^K3#3 ze6%n?)eu$dsJEV~4YY7BRnMX7JgUy8>bX>1K-EU7E~0Xn%G~(9x*RRvt1F$W2`ySf zi`UbljkM$fS`?w`YN~di;e734v~#cbQ1vorKXDEyPM^wc+kc8WucFQ!gsK`hX7Ahu zzZ>9pGyHCa-|g_|P6$6ssB1qI@Bne@+BiH~RV2leQ?y(0c<@u3syQSDl{Lnp)O^{{ zc-WhtH8c^fv#y;;&X5)k;k5~_o}9%)%_JvhDO{zTWkbz!t|YA*nm8U$Yu7<Ya;wi9 zY9+a|HVvJx<$8Q)<ebsITXDH$_;GW%3MR&P6Mjq12pB_i$Qho_p*FZ)0@vJ<ONZu2 zxd{o$EFYA&Zo7Otzh1$w|HZGL=GP&@gR4bwjR>w4!F3|oErRPsaH9xr62UDZxJ?9i zh+vNhJ|lv?BDhNgcZ=X25$qGey&||z1ow;Jb0WZxb>t!PdHet;JtEQ`B}85fFL-tJ zWa5-YsenkqMm(BtXq0k^Jf~60Bg)(;yx^*i1<*`HJ0~jX#4!(z8`G%^r1=uj&y7kh z;?x#MITCR#h)N#fp52J{og1T)ljJOnN|fX-ib@WWM;A!CM7(5y)FhF7f1{L73M$d? za-qu67Zo;2Iiz^rB1wfov_SGmq_nJ2DkS5^HA=-~d~+0D^vc2uC7DcsceYX@H%XE* zanfYyD)9a%#0hv0x|V#Tu&eNORF$s6FL-cq$XBt0q>Z3@LMLH6xJBY?Nm3Y@-AUF< zL&{-x9TC=hcat`4q*G%zkT%D9snfx3B5gFHA6lxDPRed2!$KJLHqz!C?sR%l<ogbY zqkv}EEp<BC9<KQyq#qRaef+rhHZjcxD^@ao+hafH+5$`X7YfZW9+E#KNcwo`L&AOo zNRxo>w_No=Q8dRctlP(^doZMM^Q0e>V`LH;lG%`qNo<EKoR;TFhF5&MxJINH-X&}& zH(d--gxn<$3xi$P%V<Mbh^XeHEFl_Z9u5}}VNvf!d3XuCRgM%Uhr@+3=G+4*lH@>o zrU5zoP4mb5<zu9p?3dXCRxub1hl^xx&e)+jeuvaQ$v=G*9|3ZYR-v3t37XoOC_M?; zgXC$r*2piwwN`nN3wIZr<cEt1<YLbt*;7&2PacLJ|IAW~ADqS+<HF<R8Th3MGhE`G z!Cpw$_b7gE!kbIHTiaEX2d4%VnZsqIU@8B=sD52$Uk8*TeQ60n+Sto-OvBHO#>D6( z_6@j6MkljZARLL7vu{FpC|be3#SzA|@DwtGy(-7BrFCr5QmFE<$)RDHy(1@)jOT>O zWX&-F9{+?tZkB!`<JYCB#?)jbIRNd&jU;Q1a{%PmCdjX4_FFkwDRD)W-^-E8a3$J~ z1*DM8IMai@`6B=z`<HN0@FiT*U2{wU9LG%@$7Oc4f<&Z?;)QuMXrkX@6Wt7>Y08eH z&`P%Uxmkf;N$^@D->RSxx8UuLqwF?iWO)2RWMNR*tFS%d(Qwqu?ou+_4_JS<f_A<t zg+RB;?p4etyiZ9r;r&Xg2@fcl4b?0f>hlVFP)VX`Xz_vYAtf>`8J<RrsvU>f!yF}h zL^*`xU}QKvUF8k=sA6lQgIrKrgFgH`R{3SqZ1u~$mM<&p6@{BEdlrrFv2Q8E@G}Yh zwjgu{5c(ZKDAx2<1%}D@l*r8C@Jv$eD%yl*#gz!bi(pg*ds7i3?Ma+Ic$6I2;nhTZ z$5Nu~ID$gi@H2~gD_zvv>7ou{Q6mZt!dw|DaP~(iJ#Ebit<w9v4j(A&10@+gOTr=h zOQlU6hMA3<-p<2bH3>5Pfmix`=?@A!rtp3lJ{wrW5XkF*-q48Mh6A-p#{uhRg4c^= zyhatg#?<2qyH@4meb+*pkFcF8Hy}1!Ls4lI+e733X91$yRDtL=6%pa}BKbCz?ctdr zXV|aIK*?oEDzN6l`*@Z)(tRq5BqJEK9aOu}0(jiS`MAoyU;>mOK#>LTf(h_~%D!p> z1QDRv;=wCs5wEE1Td5*uux}$BB|4Bkgxv#edROc`%#Ns$nVe6&jk$@wZs`XoY}+<< zgVZ^d{Xnghjv&O2quv4-<0He9A=?kdSPR#X839Gk|M2*6UD0JP3T^%ra^i%Gc`B-V zr&ae=Z`nZB%i&tZ2m!+PkdRUoc$;#_2b45LmY_nPFS6KJ%r9KlO@=4pi{=4Ye9^>x z>>#{V%uc;I%!XIK?l^ZU#y@SspI5qxz>9`uaVJp$??e^r;sfYv5?(agJEJHQvT4Qk ziWJDEM1T7x{<6BIJ34^A#5TcR_!6#1Z<V=epntIUQVwbVLKd8x0!R@xH%%10!?aic zvr+(a(g3qh`gBga_0n&1EI<9^2-DF?Ck1q-aG&(0?SGY-n@(irrVM6sS%`qIAyjZ; z-CSu%)sJ=#N{H?#$&rboQKIs9k6dRiY@o0&5k(Ttmxv_mveWJI@GI;OAyp>wLfC;x zTp3hBT~vZSP*H?hC)|0V-^vVzO~pp^BvHw`=}(n0yJ>4YF<^Dja_PGN+Z`0i0dAUK zpXX)iCkQcnjPyBB(0N@0oojh+{xLgSb0DYyng8z=(2nMeFourd6Q&r~!haVF3>gep z#0NV2I<TWB#Jhg|zl+HFI&TiZiDTu*i>()yjscgOS-q1Ezw7>Q4?nZ3h=CUj)fb$| zRW(ps+mJfKPy-=fFekH%1pIXkD&~T*>kq=fEOF>w7-czVkpc!Laq=$$InF#nm3*p{ zQe`|<CQx~ja}uFAs$k5iL-1k^n?V)!^BQb6q+C9HwF0@YxTu6*$MI_!zfR=W$;1t> zdk#&djWDbwy%FD4oQ?28Cc7E|D-Kx)apM?Qag3`fS5r=p@#=^N$GF=Z<KLcmqI|VY z)^&DD8a8DD@<(LK7=p2LQo#R#thF@%v_zXX*~*=pDi<2oE=4^`LNQZ1+a{^(Zs$T- z9Gx!WEloK>Qp*wxUb$-XqV;Rnty*gegQlgG<wVbEhy-UB7d?q+@F@hDQTp7=1qYFa z|4=qEH&X&JXIXrEtS{OxaOumM&*yT}xtGSb+awzun7)3s2U1fx&pKt-NcX6$rV(w@ zt~MEXEinKnOZav3=t_$()NWCi<;{&7n)5lx@^~}_gQCvdBpKS*;gRZ7Q<^THuL<H4 z=gEcOb9>{LFG_bN7l&Ne8IKQSh-ljd&a;VYn-aTR*}x_>m=f6L8V5GXLav~YA&h8~ zK=hcBxctTm^%t>Or)Gd%J~NyA=m{DErhoX90IR%Zz=M`fp+5<uVch2}beKhb9dT#V z+Q!A3p&PFqCD)pgcg@AT>0w|BWs_~DST@;yGU@b8Y3)q8?98*k3^~-<r)CQbo%Tzu zD&=I{%{g`M^yx$9aH{_|v!=$}X=KbkaBK=1Zr*Uh*p=5lomK|@!Lbw}PJNPJXw8JS z5uVa?NIOI>%5*<35-T$kvs(%*ALY1yv`^*<CqZ&L)@0|NPNN86YpYA8Mu)k(5_>ck z`WhDeC0*GRSzKaS!HL@mlZa_Oc9gcv81@p208}I;)}zm7J{HZ>;w*|Kr*9$iB)T2N zsYflnroskPwjyIa%cAyiDhZ0x)bq96?X{I}VrtrjWs(a^@QF}7EU`aKCr`;BrnRpR z{i<hBgXEgT_aV#%D?V!dO!Y6JwgF9iIrsN&7wDh{8q{kUaQ1a~h}O$Lp-Z^<l-Inn zwRx>+BT`I)%^O=<xjtFo)ctMrC=Q-x7W;B&Grz1NDsBfdt6fD-UenrDtK}a5>6%v5 zwuSp)Mc9s4Q~O2P*4k%kz$n{W`}B@MvCwfVj3iEaa<2diggy>t%fVZ&tb=!+^uyLZ zcj{4VUk)d4(W(`zQU2pZm+YC=KYgdksnpEswrQt0`K!T}XnWk!9GG+ZbHiv3o%9uH z{^==I*h<`FpRw`H29+4pU~NskWg)P}-_W22Yl1$A!KE%x50~0tty*92uTyL5f<Ddf zZ>XzNYXYHqwWhA20ret+aIFp1K_*`a4H&|!PQ5P_v}9q_np%IYS_2PJ;!F(&8c<K7 z0U+yxel<|j5K!yt>wyq|eQjE;&aU`1S_sY|rhZp?Y49{};|KoYc-bGQ56m=e2x@wv zUR+YDPZ&o^DoX+-%_WOV&e!54Mya7+Tt><|%eu-gDZ8|+yR4_Ix2#XUN*^Nn)kNPx z^lONIEzx%p{W_xWBKmHkUr+QKh<+m}`3zCLM0MtQ^KEX>iK^+&{H$)#rxWisuArft zXTXZ(5MA}6VM5hKwF2rWqO^pn<Io$rUPjf4=n$PwrfNBLR-jLG=NZ&>CUs4tY86%a zDY05cDff)7R#WwCs?I|H=&GN(gVY_ulU}ufDs|{3-8?itm#Pc#xY!e>IZG%p&x)zK ziXRTIq3T*nY+lmU^Jwlys$M|V3#q<|su8Mgc5Wh6y^N}TRP8r?qUV}E(I?2<zMy(5 z{BDCEo)+Ih=#0JayNgi$ZsGl0y@ycGy%63<D7hcP&%*C>@Y@f+1MqtQeh<R$A^3eh z?Hye;y`!sJsd_n8zd&g26L9xMLS0Wm_%z9T27(vi_d5K(PpJ1DcyyRJ-ysU6M*#dN z+`mh5@gtZljT=98$mx=%&X%O9O%j<}*f!Jx*NgZyir1XjP>V9PIVZejXhnMm-0vZn zJo!!@<UGlPjn6`W7$-bO<S&u0kS~+xNh<n6I{MXg^lRzpOX=v>)6tjH(Ql-qucV{j zOh><!j($5G{Z2aiYC8Jebo8}!^n2;(8|mnq>F8VO=-cV&p>#Bvjt-}zBjg7}O5OdC zkp6_zDUopv{G6F=ULf^JL=G&F3MHaM_?=peC)HXh9yL4i8YL&8i}1sRUeGAHiIXmn z#(6x%wGcmPxGNeZ7x7%sD0xUu3(ubGS|E*=NZ!guNhe-?fwaZ#Ci&ABNX-%{P!~v- z5rq^k;h;rM?zy+PEGo&QWMZR4NvX0xss!}oxKG|@?vpo%^fyV8JiaW~?s7Lb?Q&OD z-Ja*rOGXF}ZseoKh*Jt3BQ6qxwEi}wqElhp+EhFlG8~;MdxEslicZR2Al&8dF_JIO zXAO9aJ@*iv5ubBtxYNbvCk;0{*YE&B);Pi%xqr=EwlI=s<V_2El^LvQgf;QheAXN( zFbYKK;t{qOJ@FbvYzg;lgkGtZj<BUXv4kx{vkyFRIi75zuhUkb^SnbocK)H}GHC|8 z5RXXVDhk|$hTX!G0Dd!1-;B25jB<8Sq{67+=^c?N;VF_he~+8K<P7{|j1KhvfQ<Pz zKjyAHTrqU!kz=GrdX*d_wP?WZRe~oV@Pxfa@CdNFE?h+bh`mlC(~aqo8O97_W|0>U z;K*?G-0)chV7)8h{>?N%H3#@U0L(W5&PKI?G{D&$;B5d{U;^Noe-iE+#XTD#NhG9j z4jQW<ZAudTB=ci_(Q4eI&QXFl{LE+;nZe#AqD?Vlcs7BC{h_dI2;Jdn^d9>&UTfcx ziXlJri5BT+1Z4zJrKZ4xR(zHc^ggpp{wra>B<MwRN6M?_uSn7eVv-RQzVx`3&WDg% z!&7Sx3hO|>A&c4XNn0S<8DPgq#D{LkjM}9>0>v^$hEXCR>SP~541I&S*ndL|*b<%2 z{zQh8MkpF$f5u2%w2u7+BlXdGw2$Xs>X(3Q_BS#TX)qd$InlZ7?`Hg*=sflh5}D6$ zXm~yu37<<4_@9_a&7=i9>0e}c#F!hM!~O>&^P=alPdE#P!;QegAvv-zyih{jAQX#0 z*Mk#)aX0hh?H1`~ncXf&7A3jL#2wtjvITON338Xr?n!~{;|dc9ayEKfHbEYi*`spO zpxAp0k!g>~i`hXrl9vqUL8dRrTsy+y_WTjM>eFcxeSSPGUm>9!Lpzsd=#cTcRCyMz z%hcy&_N*N7B{{d-Rg_>5Tx-|Zmr>_M@ct_p70iDgqk{V{Ky;Y1|3w}{{(qInumQe? zatapPU$SnH?_ZZ~e2;0I@m#PWGJiy*ED$N*kh!Z*Wc@25ip>9}JQ7p6(#f}k5xyL^ z=L?$YSX=bf`KHYjKiW+3Ti#<Uh8Cl>r1|ZxDzud}uHA#IeGS<`UWaQ!egm!p%A1@u zhu}J>CE>c&@eW)sr-$LXO@9xr+nv9V*;{g3L$b4h9kTH(3Gt*cCuy9s)GuSnY#3^l z6g72-nmX7BG5|PhxDAhZus}R`M~*p+x#;EeFvjMgche(s+uRsMH?apg=dz=6+q{^L zYB2{o=dmBkNukU3W9SY)mm^D4SeFv^KG1?@<$#j#GJ<tyzmR$L*{|f7(^y_9<)UTE z58;O2k^{yH{`mK@7~!wuf$~kn^+%}k&BT37W`C5cwzj+3F%EznWFN^f7x0_g2x5Pc zNAN)r3dH<fj;s_zIXMzusi3~lG|c-?+1n^dUbL$=q?jP9Opu*iBw~bn_}ZoLqIN5I zaLsO1MvT=^4*QclvNeCt@#E|kCFbTf2iffwnl;IohvV5JL@PW+IGx|Ah^6Wtp17C0 zw7pkp6VvM2>y4il{;zR^fm$a;Ol+K^`1U+(U}s3gx!@I8~2WRDDhXs=fhKJ#H3) zQXmJdLe7Rlo>a_f;;EFo@yY1VTM+~NOA1=wE5Kn9E<nd=3bzXBbbD??pP(-(R@at~ zVvmNty$<_!D|(z;haTrzq?Z)z$S5(AFTa8kBcd~~Zz^H|{<boL!Xjct{Ei~l;Pq%+ zQsIl@Yu2;xDSWxy0L$VVkmn7>T%g}n#0rgh-hu~jDdrmeHuuEN-Ng<ITo8yAc0}Pz zEaEy0Sq>}a3VuZ4OE_kES20yIxw)Y9f```QUd0}`OnF~nKT^z<;XHF?__1QG3_nq< zmEos~wKDunF;|B76mw<xxniyi?<>}LRoO2Tn9Zz7>I3TrC#hd5_DM<=Ll-4hQp*D* zE)a<yD#J0APgB3<F`T7-tE83)ZsP5a_RjEE#kQ_rf_2<S)PE@KA4+81p{45xHZJ?8 z0(0g@W213CnqA|&lz(B;Tqx;6_CFY%2SsgSA7eCPM51l%6O3*)Hb*aF$02&=Ya|+F zLnr_flV*6I$C4f<+D`Qtd4xD_RM}27(t2oVE5VM$u2W-<n4^-+Y}cdhF<sZA9c-6K zlQ1pL(+sv7(gfz~A%>XQjcST;%5G9&zRD#0W=s-<-vZG?obFpOaka79xELtE&ARCX z+HZ#&QNkS%<0b4>&Gzpy+y5@rYX7@ctNrhR*d@GqE+NrN**?|k4)>~NceqbAyTkpe z*&RO17df$(A5b%PM-QmB9q&Wxp^9h&`@G7P`CwN#9mb^)_-Qc(exN;P9*J}t-9tS_ z?{K3uLzmeT2%m#a?V7n$yBU!IRCDx228}^qWWF)q7rDf^#1~m=EcKx)Kp%Qg^hFXz zf?sS-?D|ta>?Ti0on*H6b@L<ZzTU*_b$$H<;jVahhb69Xkh`$6fy_yP{BOCibK6S) zPu<u}vaqh~!_O*sfYjHYs?opWRnA7#+!TUY(L`}?Hq4o><+8H#B(CMSvS40&G!bv< zO~iW>UHHw;)e%p$$9p>fC+!{ViT8K4Ynu_!yLl9(dvh98-)zDH6elxoslnt3*GYo- z_!(o8nTnZT?CrW<*>j8{C#@!#lSOwX<Mg&<R95lzyW{kWO2h|F0-VVJq${NqMA|28 z9z;(siv|+|eLagZK~Eni9w3ehY&YjKc40^tI$$&9b@E0PQFB`8t%!*mKS7#@HdSNh zPxqSH{QG?B)@+8;$_WgZGA3NFDceSR-553To&p{)R*nrJdN(4?HRC4MQ|G~>qrNTt zY1!D#;o8<?ana4~Zi%=!xXN49xURWn<+|pT>sne{HZ;4Mn%6CAUfI;La&d|r0Z&)1 zU(vj_Wzn3|YCiOPhWPR6s@_$C$Q=9_ZlbI7DSfd^ax;;g^vv$$!VbbEp%%xh+62{1 zN%(l}vt6a%Uw7(*O$SF4$h%OeD^-Y&7jgFvc3Z4;h}p+fXi|X3G$!U1N3ZxOKM+q0 zC<EKK_)fFGr&v=lW`=&Ke19TtS1z_x;KuHQ79VnK)K~hP2*7z(oSAbLuY1BJGGQ4m z?xwD5U~nL=cE^nY9gq2!Lqy|eVotnW%Psiz<F)#f3x<slZ)PW}^qEH*vJsVy*zD6l zWzU{t>)(~WQxjqX&&ya%Dt)J3_A)Yf(u1th=Yk*+55u}RASa@7B6ij(k)^Z$2hOx? zMQpNndM*tYtU<R}e!pLw9{KzswKfp)r}XLEuncX1+!)tk!xF!^uYWsTjK_r0Znd^H zP_Nd8LbYl`ZC#z(5NhzN^}b+G^Vj)9e$4<DK<U5l3pE7Pkgp-6HZ(NUX#V;@eL$_N zsSBd2VV$3Q(8A*)U*4#RU9I=m)={%#YyO(L1}GvJ!lNmlzpgmzJc7D}A=EIe3k22r zhI)wBH`D~&wlSpn1HL*`dkh8xYJGieP^}C3{mv9uMjuV7fnY;Jfz5x_w9@6=f7Obz zT79Lqu4K91S`sTU)C`wZrpKy0lDi^{zbcZ)9aI%it%#EGl$232fs%=oOrm5m)hehq zg=&@5aV9#fBGpt2P^}dGGHJC`Zlqc<B?~E8M70vCHBqgZYGHJDMHW+S$pk{RRa9F| zwKdMQGIvdN9;H($T}Eky(l+XiqRXoMIQ3pkwN6TBQ`$x8C6xLoy_C{!N_(ibg=&k@ zSrzT48k92`omJ5*D7})(cMES)@@L`qAfdUB66$!2I3Fd-c<#x`RVb-aenCM&`EJ$Y zaq&MqK$8m2kcg{b`p{IVcm~9Z&mKBUDwu`e;md+Uvwc!Q2%p!(^ZW*g<)1S&M=F?y zY3D-P_!fwjZQij=a$O`z`RzPk?~d6%3=?KJXoi=Y;eSDhL{0mY{OKWb)zw6VJIwGJ z?z%|CuQk(llIsYOs&)~wn_O?E-C%|{@@I3!%}r+F&1QIu8QyA!x0&JXW_X7g?lHqV zIkNfU<}+sEUNgMQ4DT_+d(H4ZGrZpnKWB#f&G3L3K469qnc?SoVRho>VKea&Gklzo zrOTYUBv0@xkP0NCl`oVO=&yP?D*QPoE|lDgi@GN+l03vSVWC7xP9>@%=1yHC<&wO- z1yZp@ytzDYz8Ccd3rZJCnoJ9)E|hYVB3hiopOuvGpfrppIpY?in&Ei&0x4f2Wr3(v zKqf3f#m0$~QKxXyxJ8nSOrF#zm6Gxn)LX2mMvcQM;}%Lz<qSHtbdlsBm6A%)f0Lvy zQ1a1YSD56hgvi1blcJJwWGRZoo;jYoVDg_}K&)*H7fkID8m4JCO5;BAvc5w;c3GRw zohappog}KWe(pm_(;Vl)^Icpwuvpp!h)W1wOJ%%{Q+5$}d=pn|yoI#6lbvpMD{1o# zcY07wF=wPRhuu!va${;|F6t_Bvt6BeLQ&DwNc6HNP$Th467d)w)JR1Av|3315-)YC z^d-W+LX!Bja2y)g2mDFE|00PLMvAJdmKKq4A-u$YjR?C)0_O*a^H&5vesQHiz*z~& zzvnp5l73IvAAy`C&~l8ll_V<;?(HmL3{g-E#lH~6#{_kvP^%7gJR2c-i2GzYdW_7L zhJc|yf>*!1Lq;XY(&TWsR8Aa4^~Z6>I5g?Ru9ZhBk3RruJ7u&R<h1bLi>90Im+_+; z>fBk?eoz+Geo#i^TktT+tNn=FmXic_J}UES*ICtmoV%5=aDE+eenUoQ5~x~-IA=ie ztFq8GdR1nx$)cIQC-BU*@Vt(Aax6T*Ks>*cBe_N{s(V?q{m!KAcQX3}e<)}>Cb#7# zp@o^iIp4zh-?F9l^*r{IPdMieA0rE-T?&2_o?uKs<xlRe<!b&hvLbEoe+U0^iT1P8 zY1fFf$;RY^+zLJ0sZ<_c!giq#lf!Jcf~LFB4p$OCMjBHdgT(8(E?YYB3{1R1LB%Mm zY>u<is64ne4R$7i-KZp?_FhGGxNlLR0(Yjoh%6;{a#vVoJ#xw~)=qSb#T|<*lkQYd z2NCMGx8QAp4rQ=B?#5)F(#8wx%=3PU;0J0>Gd{UbvBrn@UV=Vkuobr!%;cY;g_kN! zF{WXu>=DK59p#;5lCH2P6m+6hQG}l&pEPrE_-Dk8{23tD`x1Tu|8lB4_7%lDoj}qH zJU4#ddX|&)RRjTU14$dv9$Grbw@h^5nG)2SeJ4!~u~GA?!aa6bR{HR!dV}e{;Wb27 zZBzrYHx%z<NYVE(2^t)d-cr1KF)5j17aLZ**Fci@(~$XDM64XG-pIbBjFdr7I8*Yj zkfiGK+4JT-@y>($3)q|Hy^IH~)fck2&3nZ=3GO$sL*~7TUvI0hQ=O@KWxVRjggcKP z*M9uT@nfGH?>&C}YW^RR*b!y1eB~|VGo)(z&GLQngL2hb>e-T9Ce4ERUYaeb`I1k9 zSvy}QsEO-kKZlOPexbCD!@jt;a~%6X;rfQ~xDbaGKK_Fe@f-d_;Q-e(gvlmnj|R{F zrdUqcI^@5Zea;M25omEz#eJ~t<Sy8DW_n<oE&WZwS?X^J`xx?7ZS8TeAr-p?A8U9J zK7)4|b42Y>E2SmuI#qPO4Ulq!I;!)j>?Sq4$Fkc6sGI`T*q$^fv4h@?G^iOgXci6k za2oCv5WFkjr>43x>SS_Y{@`<FiM*@_#ElAloU#YSjRrS5dl<9O>Wv3&T~Wu|0-V1d zg{RYyF^{RKA^3AV*b%wT&&&n41$g%U1b@m0i#3zrbCG~9r`VGg-lx>mIJzEtufTgj zCf*B7YQALU`m$;b2k!Lhd68>VX0A;s?>y`U0dQd^0Niq7zG|WUnwlC?FJlfz0eXV? zh8oF3-XY7vdGZqWO*ImX)EG6~b|{_`)yhkQM3Jv0cahIR&wrA9lY9?CJ%pXUPEyOH zdWq&s4LA_yNR9$@EmtPZmGpe+97!vaim*?=gA2jys@13a<kz9Z>DZ&Eo6~2i-@dM5 zzkOY0Z^HxZQ56UA<R~%^J3@FK8N?|^+=>2%X@flqOODYy-#rnJoPkHS<5AfU$LP90 zRdJ-^1jOC^&6k(R{%B{_^zDz4r+^_UX9#D*xsozZS|F+Oq+$gs|5L2|2dT;r$RF?_ zJVOlV8KW8S0cXGmD*H{EaF~^Og`tz}8k&LhrR#4dB0l!JF?jIbqfyD3sN~V8RQBgF z*zosEHZ%eoYCHR?rVo*4$%`lOVFvPHhE#%`;D>xSkmAEu`4jboRW!wgPdFDoQQ0+G zM)T$KZjeuQ^5)C8bpuF47m_=*>@2wHL_Bf^9@&mZWw&VA>wkx4uRrcj!wZ!qa<Ki9 zs_9oAB+s0{f_!8_zEp}V_$RVppJuUOo4ijOn+5wcWWhd-eJ)M9N3=Yyzi0`>R((jp z>K_=R`j3vrA=_}sb{r~ue2l7pQRDj=^wIJZ=R#x=chtFv@Q4Z#92V@kF<7+OsG5HH zgXHl{7BwM@nvq50EX8v#TO3&)DKpA^=vjtexZ?Rzcp}co?mowMM%EvnZ997s`hBJ) z&G(d)=7tUAf9rTm#e)CSbFqT0UGd9>BH4;~?_dk$DH=?mEvt+B(c}HrxX@1UY>uW2 z$~-Rfo#MExKR(w+B<dd8nPoC?Y8FP$wiU@0;l<}#SDNJX>Dr8J`Nuw3^9WZO0->FU zqP7z`HdAdR!9NUl4Qw~X$P0imT~}B-0*xIV@s1pB0T8mU8H^9cOSkm*wIlO-FJ5F% zcZ-Z%DBoiu;nMne6CYU8l|c9LbhDr>FQvC4XwsouwYDs3T+R;#-8SB2_z1~RCb4UI zqIEO?OF*>0p}^7}&-5fxf(_moO^i}-F*P{LvvJlIPa8fx0jjHA9E1s#K)I_U-!j<7 zRS=A5dpy@Xj4;!k(XG+0ZvN?190;^Dm1V`;VY7@dDH{YJiFae+Ia}h;?7ahm)x}+w z8cy8Q(?K1MGqd&{dp^Wuep2_C4|qFPo+Kv+z>F2yfCi#5Zf_0&@Ki1<p9h3C4#K#b zJ1&MX3N>y|$Xk0zpL3wItNqem=xC+(!MOoOhY9B1nvSQGBJ*N>{T=cCRx2|<ickjn zwun;)N33sPps&Y;-M_!DdttQSGA7t!4vwsPyXuPQ$$iTxJ<)Ah2f2+#Y*Y7UJVNh@ zLw`t|k(Ifr#|W-&9_;U)kPQyf5nyum&Vd!-=e~^#*R5K<zO~u2C<;9zVa|37`?fW8 z^@}rroQ%o9*<q!-maJOaa>1&Vt&Pib)4d9v<DBw%+Z=!90p-a^#BL{|v$8>D9wf(C zM>{%3xu?qAoSrV%uU&rTSWS?Ez|5xsg~Pg?d$2*Hk{IE=c}ljN84#n?PcyXTPV|+N zsWR@unH*hw8GR>F30I)$UFmM(!Q+e-)-1?HBGBwXUw=V|X+5DSm1HxDnQP7ItNWlL z+Y2(+uu6Y@!>P|d^DS<q=JNlCRXv5GWNE6TMH&228`rn460WXHe^w5GCr_Lv0Ug^0 zaEoEnS3f}yUu$e?YHspGaZR;!@X~IMV2Eys#&9Wy=0VRk@z@}mNJTT9yq+)y?N)L< z9SG10^BmyGI>^$b$gv)3`n$>z6QnsOdCZBBPv$4_tCi_H%WK`O=<4MO*;km9qOw)= zU~i&5+HE=DvhKtTnm@Q@)Uu^@C00gP=EO~kL?-Lb^xBoNS#hjwUe|I#^T{OuvMD%v zgo)#YoHMgeUY8TdbaJIrRAlw=m^tm`p&t3g{dn}fsIR-P-*(S^ua%h2*cN6cyV_w| z6Q16(uB-MUC~P9oqHxJp9Mizdb?wlU-K+Z&{5*JEXJ3EU71*CgJt!Rg0G7eBENL6M z5?!!Y$<IU&55}F4VuEIRQ5)rAjcye{xm)_<c=+1dw;J|01Fi%|vKH8zeMQWG&f=X8 zB}CkK2%hNVAX&E>w&y1|-e8I&<>KIJ?Tq)tdF#mo?Q(y+oM_J#CIr^S@d&-IKf|Dd zLp;l7%fU5}LY0HHT?HKEce#nUc^EGq0t3^fo^nwfMP$6kV=cY?eXxt}K!1~B&Ckiu z(9W*6eG)})?&5Oh$w!90Xwo(PWUnmtsmo)aB@UB?p0Mpk=QBINpA?sU{nO3)vCD0n zlJjhFd;@fwBM<Mron0O9t_aInOD{f4cw)92Z434n?gqkZL&E0{?~3M?>o>QwHm}&c zu6cR$qSoRb6Tj#imiBNv7q;T)xbbRtdm7PMr>d8&P#iUuo<7=>Z#SKQqWqSrM((~0 z-@}&kg-qvhXgt^-Bw(~cHmth15g54r0o-obZum+hEY{m>23Tuiy4&Eivo?-q288|a z^j^i@fT@f#%uObA{lqLZdTwb+x8Mwllv&6orB(l<ms`FwQ+WO(I|lzBn<a3<tIz;% zTes*cJnl$fuZz3W`-G0Xj=q)9;rI(ZHp{fEA1*pNTKh8I{ZsO#rtKH(oXe3xMdrtX z45TOR_M-@}S)9R1i4VP!Y)C788772sgqZ?sXPq{6kZXpkfoEu#gPWPrt-Z1{z0(wX zf)v68+8{`8r4x=d>zmg%H;rqz`l!hd;g(<^E+h>}oZB|%z14Y{MXT>*49HeFr6+MQ z>6I%klp__SV%EvC!$8hxoE$VqlzQLw*n1&t|N5b>Yoi@qg9!&P;nH{q8b{(F<>}Wx z+go>IZ-@CFcG8bhC?K3F(~FqXx0OB>6YP#c-Tmp&o@aFRCv2}&F3UY`Blpsp#&gQ$ zF|*i{t|InLIk}v4Dm`7j4ruInyw_{(IafrtiS2JH!QB4l+aS!{tPMn@6s5VjI`tNI zQWj?HZF72~Te~iX<kmiTKXr<s-y0ur!QI+8^sK~yV{@!K+Iy-0WH_^~Q74rp^qoSM zus^;j^WBk)5jHgV{Ayi8ph2w<)YqtWp+HD&sIBFWHPyP>np!8vvleKwOB8y{rJ4Hz zkOMWEKhRKLpPSi^TCl-a=hFg#2ESjocA{FqR~M+$0u2o{!8|cYTf2JV%e#8I24s{1 ztO?bHbnB~>JKnpstG}-ohdlS_t@%Us!8%v^BLkqXZK%u1_$r_Uf}ub_9q1p7YiRNh zXz<neYMih#i#K<i)KfQ!S!mY@<JRY9q}?B^4+gbhAQY%o@dF~dTtGLcq1vDy@Hd2N zom*hWYV8{62BLyNl%4d~_<U%CBUrBmLP39nkjX~z#)dky&`}H5dSEV)Q|qq><N<#T zaKcv?(gO9q+JMHt7NSQ6c<OHm)}oz{+CTuxtMvz6CdIH<K$Jee7WCEE!WB3VAi$V9 z^i$z$@bE9^X6=BX4Rt}SCJ?L%KsI2$hMpU0iv;gsH$T{)z%S0&0IJ`IHK+l)9Ae$o z{Jw_zzzG7R&@L#c%e&G<t7)s#uO`*eSfa0ca3G$NM+E|F8-Ssq0MHSvuYub7>+2yN zsHq7dFM_}Ye<%=ylsf1F1t-prkj?LJpytO&sH-mos6ustnt~HoIxPqd2)IIZz?>Ri zu&!pbjOd95XvQ$ubfTRTEsTT0V?^=QLVS=PZ?`X#@g0boMp4N2OqWMwoA6ER+9G;# zYu^@bam|5dGou3zu|Kr=sm(C~7xGV|<I?Y`i~C_+fV%OQi-a?Zy{;87se@?cji+XT z=5E}9?!Jy_cWZwX1~=|F+P61Z)_!nYD%<0Uk`q8U%Hk7}7j_T!=bw=3w))57=$4#x z7r{I0Nn>}{#l89BlW%oTR|iaX)dPK7^3u=(0>2Sg<2UVie>MM1EEEJv?H>|m@%5ay zb)oHhw6)w9ruHebQu`D&)X)&Dvq=jVl}su*t0bhaE4iq|DCyU?X+xy6NWYqJ8R8wJ z>>5&bEh*bc%B~}2yGYq?Qg%HlD=E2$jN3u<FOZVgi2h@u|AdtMis;9QJ|yc`%leN0 z!`yqoS5@5);P-pix%aK?7m_dngd|{qmzNC=0^~7d$WT#v!S|9}g91UqP&-Vq?!Bm6 za4T-=-g|3?g4WjhYqhOf%dvH|*4F>`d+xn&Bq7B5|9?LJz&q!A&iS4_?it@98>h*} zFJ<F&**HTs&XkR_WaDhvI7c?lm5uXc<9yk;Kn`9d2d|fdZ^&vk$eNxm+h!bSp3D^Y zn6cx8T$_oL4yc$sWooE0Tm|}HVG!zNS?D>@b4Vev78I1sLKQI-F*cG2m|+ZqVg_Rw zjAPn(1~w&gDbvcBK9L!dm{!5$$xNHVw5d$15`@j=%&cKr9n<QWHjQZqGVLIy9m2F3 zM1QO|F__1+`Aj>MX$zUQC_&=PJWH9joOups+7V1%!Q`WvCa9dftC$vJTAXPuOlxJn zHm0p++6fHS5OK4=lNlSCwwVRC5M{G=3WJ|8`KL_&8PiT>+Rx2XfobOe)6YfwJTT7( zw9g0g0<tf_--W>7BD62Y-zE6F6y28r3tSFN-G=U80ULD%`dtNV^tI@wpQB(!+kw9u z(Ek>+Z^hqj_`4l(??8JeurZk4n7a_h@a((Mz7Ky7;O}8DAEx{t0rL^E9|iL<vL6TY z39_HW-&6Q|8skyioA7rtx}O2_Sq#^oNBBix#jjwezJ_);x_c4cjb(Wc?cX5I`@qH? z#KvJ#<37OPKL9iSh}HTC*!Vx=?=R^0DgHjgAC3**-_YKRMdxUL0W9n9X#WGuYB0Y6 zFu%s%e*ubQ^FkQ|FP5>ba5P<t_T~8d6~b4@tomx1>DS7v<~o_l+hvxu1H*1WzZ=oM z34b@^?^gWXCbP`j@pp&Jig(FuDz?eg2Qkh=81@+c9!K~InN55W(|rnU@<TZDQT#1o z+Vkjq0e>&z?<M@bjK5d#_o~clU&r5@2>%w7_&>D&jK5D2{u|mHe_!G6U-<iv%(AH~ zw<<V16b2V6EE}6nyBytDDU4l<es>~#H~#KZ%p8UJ9#EM7LHs?0zlRm3KcY+&Wb)oT zNeUE5k`$64FgDy(DU~%KR5rb<5(1MB7G@)v6*I{!n~fNgkHmOKNmAJ{_*+TX?daQd zJi6ABYaL=%%ssKILke6CnEZ_($$?3e?tw1SFM|jVLf5?j-m~C2=$a}A5O@i?UVy1m z(;gf3_cp2&_&>k|=Y0%ao20;(AgKXw#hq{#Tqd8TfKUij{S|x-*vo-?;7a){@cFjM zQedZy#(gqIy%!#qyY81|1e%_fw=Q{9hQO?6<gRUGzvkH8WK(Ob>XGGM`E9vRen(D# zyOZFaB=~L;d@l+9MkY%Bg!6s*cQSk+|2~QEVG{g968vKl{5T2z$&US(q|Ybh^O^kD zq|fI`aBmX)!jAd(q|ZN+;Fosb*GZpmlHfm+;I~Qe-%0ShB>3MX_<a)WQWD@VlHh4c z@Rv#O^dxvj5<D{ro|Od8PJ-tq!Sj;f`AP7CBzRF0yf_J7k_0bJf|n)1ZAtJ~N$`p! zc%>p*@#>_{HA(O~3{<XHb|@dn+m#!XkK`K_kd8|P-;~6>ISJm91aD1(w<W>bli(dm zaAy*{D+%6{1n*6P_b0(!N$}UoqY6BxJgz*U$YoC{PbyD4&@&0>?gaFy>_X=x{Qi~j zi#@G8tEgqqD=#Q7DbFc~yr{gK;_-^>p`piX!s}IKtMa<?Mgr|M^m`Ni4oQvomU2k9 z(v#xRE8>ukf<7-Peaaz8$J@5U#eJuLDR!rN>_Cq_%CvXWJl<2L{RTbSWOTo;{MH73 zr+koXvfnFUJ^*I6q}2Dq3~7=i8)hFgN+sZl%#g|?@aCiSkqqEF7h+N&_}{kC0vYc> zi)6}~S-T-FWkU8Im?dRHPH=|Q<n_wAdDBJo;Jb+KmE`;pD;uTJQ1Bi`QsvCT16m{l zisr<m92of<5U8VaFsjD`qsPT1P0k$iKIWGP#o05Y-{RUiHdiDJ<7#F|_o93Jf|-&Z zO4=Hwkuc$GL@j{QGte3VWxvBbbUCwp;Y`T~6Q|6OCQC4B56qOZ;D8TAaiHS&h*|`b zk8PADz?9juqzsrkH7<D}^dXQSGOdTfO<2xr-as>-voul_#_uaM-L+Kd^}AFv#C zvu8>HrM_X>PQ)*U>CdAz9uAx)vN<RklXBtUMUB!ZIHbHqVlZQKOv;DGKO)vRnE4Tw z)FWrkx*MHiVfM#pje(}quxvqytZ$S`VUEO%C8`V(o1s!Uz%xU`gk|3h1)EG6zf=KG zAp&J8fM#>)=nTrioGnTDbLY)Jbiu+!iw|3}blLL5k2rG0QAZ!MGTJ;*Qo-w+J%D%T z&#({XoxfsmhVm~Es;>7!rh0}PH6n)1&V!#nU)C4dLNgX=!y>UTp1F?Pv?2_+n*#2Y zn|*@QCqLqcn2+CQ>oo_T|0Y13#}Nmu_hh1ko}VeTXYdc?=B%>zEdHt7oPC7Up3S-3 zoKx1G!@rlCb4%NE`B_SHUTJ$Ce@tr*mbM4^yIONTQMy|N?fLvkxw){SyuFavQi`l1 zTSA*8bXf`YR-;Q}V@QvcDD5_(Mg4i<>W+Dcab=#wUzUkQgY;d!DYU9%qx-3%-wL5R zmD0Bg|4tD?xv&;<G2l!UD|)utt&St!0}|3Rk)NY>i#)~)l5@dxa;{2r(AET7cl-Ia zt8^}@3{uAt+mM@)tq`cvRtRLv?eh7@V!*9Vz^y93UG47C%K1(;Ix#X46TefnHJRIp z4>*VqsQe*9Jb*vqB0frprkm9Z4&n<ce~AJ-Za}XS(5v#dDZs0#KL1P9Wq%+oL0yyI z!QbxkJ$oS{eWLD#Iq(^pbLG!f{%18h#hS8BXpj4g+B_vXdH!UneG30X_+w1|8P<3z zM(3Za(NM*LNC-CV;d|8{TNgSfARG(xF9@iLRq?+QP#vr0U#ig>tHvebC)ldBc~-tw zdwQ&J-wurSjR2!{Rvm(b6RDT@Kh?fSgS;Js|E&_6jSm+#e+E|P1`Rv!CM`P6nl@Lk zB-!4tk@p)yEDo_Gx!#|W_g^)VGKAh43bxiCsZsu}+0FHLjejXZdvac+QsL0-!BP27 zjfRxn@!tx#7>Cz)0#gj#1BD#E|7bW34w`=uPJ_(FB*{uoPK&L20=Xc!h#0-}XeOl; z$pn77PBLGtg4iLM`K0VFCFmSGXh!T1eu17W#f7>%$S>BTjgdwi8JFnJ5V=f`&Wz5g zIBxzdh|GkEe49?HvS_sDV^y!$X};^x+16~k=sUMzQ)Ia<^dtp8t&=pGxkAa6&tHJv zFY0y!y{Pk-_2x)VdxXD2$>tD3Eh4-v5IUr{b^flN+RHuUa9B0o(}@A=eZ9M<X^zl< zr6@lCqcTSSvreOO9*#=y?!B-{`b_7a=_LLJ{rKm4^Yk9;P-{W^bpAKJc^bhB+oy4^ zM;G-(7GV{?(3=+*w=d@Z&`Da*=Io0}rqR#gUpoIvk1ny62pK|4tz|nW@~?%5%{nId zxzJ@TC(VLFJl8jR^OES{*5TF>?MwK-bUPvzivL^hwT>*#A?}C&=*=t8(Y}KJSMNRk z$cem*^;$>SVOv@A(dcMDnxDpck3VW6KT`-WDvlk)&tuV*k(Jm%7qIT8DB2gXXmfOy zHOpERJ=Qul(kx?Nv7SgwqP7!C4&zqbYAM|*WGC`pv1n_w&1#$QTW_Qlaj#(50eLDm z;iWW&Z)WzyF2@GE2Be*g--`KIn9uD@jHcrd+{vQtRy$4NyVziJaW*yF^#J!Uevd$i ztd{t_tjDU{-eXm5-?W?G&zg^?$w>l=dT~y+AJ2EO<`ab13Dyb1>jeG)l`W`a**>7M zJ<4cw+yv62_#MI%*rSX;!Mb~To7P}Go?^|p(Y4Wa*1E`Azz@XJtT_+e9aaaq^Z2tY znrr1!f9X`xJS%TAso3Msv*`NhEYW}`(pX<lS`8WLDchDk7Q<g*G=S{z=z42?S&38{ z*`Q72ud?Q>()O%O(wg^{h#-j5d-~x=I!SaHvp;9MMH}|?MmD17Z&-9wWD_>$`&7+* zT1F1TT7D>MiMyN+8UF)TuW2)u=p)usaX*O9NRU1wA2VDtcL6S%X#bk*owlaVKeOl- z3fO{?KB06+(Cqkxn(qtIwKOxPN?%|LJ_PU&#{a<%muO^u#d^AP@20WKdP%}o>`4Ak zgpRh3jvd9nMd&2!q}a*)-w2&zof7*A{|`bxwSHQ>b6f0Z{J-e<x%G2$oXWe5Xcth= zMt=d;FCfwdSlg{e^C=}#`zic1qxmERPU5E<6yN5|J43)_v8}+*GAJe6`)mOV?{kgl zX%PJ-Sigkm>0q4>k<%#I3yfZDqB8(uX9B;-AWeY<RO4%@##b8DlrMmErGb@(D-C`% zqUWx|l&_^S_E<;uSV!6AyWS}cP2cST?y-JG8Sik)LjgAkxW_t`0&c<@^;kc_D&34# z>akA7I^8;WDep46d#p2|x9Mzh-ECmM6w12K{|=S%0W4*iShLFal#}?qbATjkz6#Pq z27k!tZaNpF&F}C>jGk@T*U`*+9pEvn&>J8>j@Fx?Jb~6*pgw8vr;O-%V4VjQJrFq` zKqSSVG2+_h?1`k^5uu7c8ZOl3&y(wIu)n-7kmDWUXi@pgMz4^oN-SN`wS72+Qk-!W z-S%*M)rejIy^#w5huiB$DHiiBgTAaqD%S2!T9e;5#DZeiY%*00C-D1*n80LR1M*+c znyY+*=DVPNX7CRTn$#CkQ~lA1UIf-fuuZTve`Gi_<}Zf50PW$Q81Ci)OZ}N4wi%QS z{~YVnXH~}49k`qLn{b555$1b^qlz3=oC`-aIjZ^Jjlov4V=?D1MM(5wur7vO**WO* zm4Pm?wp|PmxdgCOUkfC%aQ?(K%v{6OZU_Iya5f;3OQ}x(6iz2R9J!4AzNH~ClJ;FA zvCYmf9j@gMK|0&yXPbi8_#6{)M$s}+hd39SG`2TM7n=NHla~8z+7Dc6HeU|WZO}b` z8$kQzz%Mg<x+A}$?%77sN7LN6f=1mnCiTk|fCKMJz%}6$kghZNb!PMmn12OG6vD5^ zgs-BSZ8v+YtD!V@4e%RG`l>r?{O15SnfzumdZl2cFP(oS$dnwv)$GMz^jfg+|8>A` zGo#mobv=mB(;b-Fb{sW3s91NI%{M?#`whVFrUH&p{XYNsDi-iL(Fi1o(%Yh!wJ?MY z{9#+Pc<|@NpO1tkKWFZRuK>vU8f3D*0fnr8g8B+t{{rn*w7v!XHMIT>>}|BZ1LGaE z{sZQ2lbYG{p2=S^Nd~30yc0*yt0t|AEjoYAEZf||_#0+i?}^<A{7nSnYV0Q9Zz0qd zyBT;l0==<YfWJrm)Z)$j6LAs0FH(zpty{sm1v*<y{@WCvn?P_#rg~VnL1(5SNti}w zi--RaQ^klS-{;g}zy8ULn<d{T^cIVtxOtcO8t}iEac^gf!9OuesjQ!xnQL&Xb|iJs zMY8t`lYc>JQI@!d2`DWuAOCwIb&^0jG46@`oTR^WlK#q0`fHPzv#_FZ@6%Y*xHqol zWq<!Y|F;=u+p-I2S7TRFw>$U0BASqAy452BunRHpc2Fkrvpmr|z`6t6Y)O3QHhbMa z*Av|dk)1U3&L^I$V%i|q;Gnp~L!*A1EM4N^mwB3VO7Tdz%|nN*(ir2{dZKqh^lq^3 zhR9u%|8*33tfKg{|43`mjUHltdk0gvMwV{$5C^1}c;1S;?uE57zu6PL4=ntDKhRz- zkVnFh`z4u~2NK`uu}2Exd`bLhm=bwJcHz9i1o<wH%{pw|2+=aDY*%(6X>s;Me+|~J z-2m)#%vH$me8A)Qp@&_P2R(u@?g6kKz~zQmX&>^SOK{FT08kovkZSjEDi*b3p<u~P z#kA~g=tHzUAny7{6Ahb5sXi`JsJKN&Ukd{^;Ou<TlUYOzcs<0#w_EVv@n=2Q1d+Qj z+9*R7-T8{gK99dD8ovx1|8>tCIQ~}oZuwz&1ms6Sl5r377)aoi#wi+3YFc%AJVLu{ z`R)>F4^3=5F5W3ieV)B=mkjTCXe!FPJrzFQ=Q;fy{*KemxMAFlbG~yAG1%jL?NHwJ z@OMREAGIT<!{77tRNO81ZLhdT-X2%6F}GLTE1+9o`*zZ2>*;&Cb5CDy-V-=pe@EkD zJT0XkiqotZRrkx%A3Xdck2q`OlIY`)J#+Y<J?=Nb?|c)YkAw9%Hh6XgNf`H_Q!MX~ z162H4jyyp<^J$vz1CH<Kp5~gK_8R`TeJ42;ljQx9ERiBl(l_FZeu<Xa-d}p0quW;= z=jiseC;Ajbo}$_F4OO&6(frw;Q$@e?xZIzQ$ntldRF=;r(s$VWkIL|!hkq}Ih4}ED z=8ZlL(Yb=}b1p=lrh1(2&CKi1=E=|W&LK9<bG*@Kz<MSbCHgE_&qCxmD(bo3=<{Oy zN1mstbT|oE?vEdNfwH(XnMHyNlwWRVaRsGPERx_?dZRBU<6=v_Ncmjtog-JzT}%V< zG9b2CF(hBYA=xCoj3W{U<^)<%rqgwb*I7|+_3}HsJyvmd;<Cn_<oDQ%(oSz;QM%KM z&04CeKL6JW?cgwta&ZrW={(@w3(v~%3|i00^0Qw4yq8WM+4o@*FM9Dva)5OJ?w`c0 ze%TwHOUDH)yR~A|?#u&8a=*7*9D@)I>(d}>2k<viyjml#0QtS?C1><iu<-wi8%kPl z#97iq>AwcnYk)ay6It|nDQd6di*XU{Z9;n;tk-Qc+RnV=pxM3+h?Pk@uJ^pOm%%8% z_0o|^RN@1QU2c`TmH05F5=U>^BP#KcQ({E3D^borPVurUQO^J56~c<`N*paJfm=FC z{|&I-NLJ!gQMx|ImnyM`|CP|*1nbRYB|dl1Y+tOz9#M%eymXAgC|`QT(Pn2tI!GS{ zkT7V<<ZEyAEr`4&rj6H`Q{Q^=n9$p29}&LuIuq<a)cs|&d>nwi|4W}Uf_~}aXZWJs z5bXilBhBx@Y5JBN>87}6`Y=kl4B$ORTy`SLp9D{IDEeox{tO|K!XAqL1+2dy{0Uf} zp!F$OpQ7~{Sf8O)WEF+%#on=!0(?ico0z7}o&1<QP#0;M63)XmtnS#bdZVq2R0SFL z0R?H)w1Z;*2)1Q)?z}m3C4FJj?0JVTR2D2ga(K!~rw>|=DY4GF{T6oc3KJXU{~J1^ z_Ej!HxK~+ORijo`h3g#dQ$est#A2z;wt0gl;V>{Ob)h<45WVQZyb&OS>Jhq;G^Q}p zkfeB-lFig0Q}WFqsjAhnw{cg9w&s)l8G%e;W(hM#n7P6n0nG4fG&oc_B5R<4q(l@= zR)nZ8okV@95mi$Z43U8e?YD{~gQ89y@LVviSuTNg{BAJ0yjdxc+m*do;wjB)iPEmx zF9WI;z`bV{4tFx=NkY6AfKnuUa-$}R`3RAL1G$}{pFMzADe3I>L=Ln-(9F5Qr%TdU z;_R>=qbzso{#n$M8DU5JlCF}F;I}qNuUVR)&`g{B`S5kCPu$c-p)Ni1sDWiqsbXGh zDyiFYN2X}eAaVMspB{2xPu)KaYFY(d?Pp2#%~hf52A3J%lf+Hu*3@lJXB_vZ>q}>G zO(W?WHp!n-S6^j{xuFF;!Ga*EEgK_cIl9ACQ%nw_K1|7QbVh51OdrXVQOp?4^kSxu zW%@YP*76>ZB_mU4d{+jjiyjXiugP#6o232-gu)|3C_GZYGaD^gMSsI|^c`g-^&KgS zC*z<mbUxWVY%q!RtxTn7r7HW8tvjOP<l!~81gn&tHg2!^%sCJ&nWX77TTD+DMqSYz z;z!%@7~Oc2vU#IH$b1jBNp$iKk<_*jiAM|34P%HT3We;?3mWc+qTQ2_^M0I`KFN{_ zgWXA1m6&A7u>X%ISu!IWgPzvd#@O7BH8`LGHsz&5ZQW_CvfZ7d29_|TBBKWhbs`E; z<AMlSrCc1!PQhNZf39738aTteaFA?bt*yl1BV<Xq;?Ude(vKP(-PN${@_`f&f<{G+ zbZm%-!ooUO?eN@=90a#L)@kFpjNU(XeMsw@gm%PmsJ`BxRxY)=zP8SjtdUwBs;Osg zgH%<A8_Y!6)SBw5Fs2a>F{fkHaD9lB9@bZ;sIXQmtLwrZd)6D7`B{S4Gdq~2=%8pi zGr-Ifgq4heK}zFs0Z=oFfGN53p;YpiGJ+|%1dL|N1g4ZRWg=4!V9FF`R+^QvVXp<G zKHf_N5T2Yae?T_8p8T$004HEUR{;E;QC&hQo@b0)JZ|iGVU`H9RG8($oFvQ&VNMq2 zRAGjM8HOCw)FrIO49UdxB+w{nAZL*BHYJnPwW(Q+l1>l#6s%{@#Px-#GcZ>$#PZ`2 z%MXJb`ZAM*QT#Fo(!R{J{NR2;E4P;)G^aPqhfBEB%xG57R`_Af>Jd`AYOh8i`Xtkb z+K-q=;UaSkz5UM>s>$p`)=~0)Y2983z&gI3f_o!69=tZtdwy>Zp8GrLd7SX4ApTY% z>@p~A1&Xm1`00?0bEeQ{CL*0BBxlO1s;$6SR|!pE=5CB5U4=3Ia1HQlfU@YZ7zXfb zp?7mOb`!r2dgt=(BB37Am_v6FJA`x69`xvIlniAqzY&V*EuGR|iRs@9bd|VUh|mm3 z_hJr(cqrTpMe;7-_lpu*zRulz7l=!Sk#v9efbj0KSWhnH`yiCg#c<~i;e+qL=Z`?y zTzZywb~HLKj^@%`NQeyD(c~l++iP=E7F$<R#ME@LF;i!DoMe;sI}5NZiN6mIISopO zk~cFg5%I^Y&a?KjI=h*#OwW9JB6D07lCm#`5Rj3OQxh6qrIPL9uDeMVvowY^M;?u5 zb>|Td^}4avVJ|Y*x=ch#CQuQOk#O3<ur7byrnN2~)sd?=wlChYZW*boh1JFuhqJ|K zcK~k+t}X0B+j1BtsI`;nam89RZXA|~lp%x%3?(>4NLH~q{nI4RkU*7m*)~2QeZeWa z-xk8)xCY20$V%~WBn6}iFzCmbK4qAF>BJJ>#Z-Yc1*z<<Haoi$*-UWA4=MaW-n`c9 zaAA<d{1n!W{=5q5ybbc&E%MrS;#V7tr+*;hzH(e_y|?Wo;x81#f&}B(5^_4?$LDPx zjLR<}StlQXx#@)wY+59I{fN{;313}QZ-o+zciP}lX##lCL}?gn9mYChx--|hJaj{_ zqifch4x3p%DQzIPzZ3+L+u=)f2q7N9fl?7f7_lOzvXrQl>5!7LM$>8}rifkMPU7q9 z*g$JWY|WaJ(|J-xC6Gl;`{C9Pa{vwyKH&&$N)gu6FwCS9Z03pe#@%W$XY?I1+*y&r zahW<tXZ#QG)26j<v*gVGAJW;!Sk-MNpt=8Bii3>uVH{p(?Pqhkk5ALe)K61l!&=|a zQ0Gc=Q7h}K>(z#as#>+7y1rU%s0`N*l%k?m)r9M{%1~8xU4mIst*i;vnu!b?o;>G3 zkfv-~sjsf{ItNxW=rf9gmBzAQl&*Emx#HN$m})S^L%cv*fR3$@$&^Cct?Fa!(<)QO zGexld=y;+nWqKLYvzc7ZWZcM35_{PSrc7qaRHlU(3p1sODG?^mVe(w2%oFF}`Aj)f z?1mRGWfoHwGG!)H4ra<BOh1e%OPIct8S|KdILn!FI8%;b+L26I!IYzzv4|OqnQ=5T zS2CrUDaSG;&Xg9Wv@vBZQ#LZ?WM=-HnWvgR$31r!c<c?eSCWdRNOIA^2gkaqs-+pN z5*&Q+ab1OIws#du2Olp<2d@!_Z|^#}<HYqFgxM*~O~TwP%q_w^NtmYy^C!am*)Kp6 zz*d0SO{NET$p-DEVJ02e<zmuTtORLCt>)2ATbmWbJ+?lU#N{*GV>kX3oPBkp*jJk{ zoAel)9*;y@=z)5SNp$i^+|x}GyS)SLlf0$k=DLD5)02g|;0#UQrDE`0+R<w7l-V>L z<t<uyi(VonU$M(uJmsV*RB!Q>xA@Cj0(&7tn!gt^VF4*wT(lRmmBo7@M_sZPa<!#< zAx~e98*6s>UdT6&*b5`fQ};rFrwjP}Zk1t9e1V|K-MpJGDv>tr;fv91QTY<GG`^H9 zoiFdP%+40Z505i?)jfjVtIf<xphvYL?~1)J(s%4$80C-g6;Zt>Zbm$SJ9jE1KRWKS zyxT~8DPI{ko}uW`%)RJ3Htvh~Fm*qVA>>CWz*~B=*9dLL0V{xJ2FA^dWWYA@j$)xJ zYZE;`$Nii7BH47A-%glue_SIcmiPF$Dq`g%Vx54l+^r&3VC#0O+S<4t4<Mvxwqy8) zzJA$sQZ{x3KStQYH^sHMe><hVMU-nxzZ_1Y9PDxhHpNv@5|y7KN*0Lg!maZo;^x!X zXmK;n@?QGy_x#joUfhV}!KM}u?}BI$9YJ(>@hH^O7x!$B<@3{^C$7f5+hZf}IMjos zK;Hs>27)^I7UIE(=%MwIntm&t#LgGTA<a=VJ5r1tTg_~_J8;Uyuqo~u)e;~hqr4>( zv9rosvddd?%3E^Lkw=3oNJf5n%ZT!pg7TKa@|L2#P$iv@XP;^yGef=z%{=82(m1Vd zL$g-90?j)8N;K=))o3;t*PuDgybjIjo*if&=)D=ugM7E3d9eRBG!F^fj^>PvousZI z^G-Ayv+hE3X7=4^&dRxm6gcG4$!m7reZVgQF=+SjOQ4TNq{=UaxLP8KSJ%s64&R3U zqp9lr3h1k-jf??m`zsNy6ENdfL$o+jERh;pJSmcf?M*Ev9uNDhar9#65G#=j=z)ib z8Lr2`@zkB@8!3SsH)WE()$QcFiMnqGLKD&=Pe?|-0Rv0z$P<#0ZzSJM)ZI6OP)-o{ z;5dnER@n|T%6DwSnRAN>>5Y5skckvBX$MW1+c5S4)Q9|bges^b@r;QL0l9x94cJA& zN3q2w<UfvP*@!35TvYHBnu`lx15!qz_mxPADVon8hj_k~xv6CYe}bT#O)UldX^4*y z#5(+0Q4F*&D2qR5yPhN0Wd1y2m9%DHjpDvd^kx?K#Yc$exX2V)4E(}OAwVC|#bht! zuS2}RPWVkbsW&O9T>h5rdW&3Bc{gG?3H$AY{qcgdgo{MNZ&Sjwb`<e<DQ2j|CU&H5 zKxZX6v&YbbB!-F^Sr`e6oZ>|YM5<(473%vK94|ya^xz*rJfm1V_SyQue~*n^ZBunQ zbh`fsSkVk?{C4W6KSDf^ivAIz*QKHV39$G9t8_bc-e(jy->TmcH*SdQ=#|U=O5yod z!;ZLlL!6;k4*#25-dwl5IaJ<hSl$O^iGKlN)y_T=B>oQ^-N%U0oyot#QPA0v#lNN- ziIzMfGBx=>smJ4ac8}9yOplxYf_T<5HflT%SEjspUR=%V{{DN?BQo8Z&i@O2SgNcN z*b&dXVFxbJ2P&IdviUFM^xAHf``7lDay;9qZ8kqcPH)RI<^FAXww%(I=gDz~vCSJq zBU~WcwP>SSTqLK|f|e+LF~tm~wd5soJUDo>@k=qt@(Nn!%j9?tIvV1c+nsz;n&8s! zzt3ET&3cvGSFy@z)@x+DS+A8-n)P~lkY?R3JI#8n+^<=0l0~!LEcaol6V2+693-0c zwtmfe`+#QMDW?pgyZSZj-2<BSUg`zAS+n^r89y1>*i5349!PE0hXyq3!<11lZ8Scz z?`C~8*{qMr@m%T;yICop^k(Hx3YHjK(}d1nAr_z4WV)>rJEB7bFMy`1n%;rIJwkQ* zNI@P^D3Q|h8t6mQlHZm|T{*KDE%m$k+j6f}-fNZ7w|ckSQv!*FSj>?!M_0kSwjyxR zr~Ey_+i?R$`K?fOqf@qPG21_+W%~z_?MEWpk7fQ*O12+kwv&3TiIm2l6WKC1TRYQF zoJ?tc@=ueQel9X)q;F<6X8M&Z$eZxXDSadJZ$vH?^%&>$clf{Lo{H7E#K7>aJQe2h z@6f$Kxc?)Upu0;ck>(2a9XqYF6eq0)=^TaB$52`gc3S5tJryU2xaTXB)`jR^DBKq* zl-8woTBa-0T<4>rk?0(2PAJ-BH3>t=G@qTgqAb;iaYZ>m5VrePR6X<s(13V9=BDz{ z|M8}BKq2s0IOB&Edtd_$yptS6zT%KKSI)KNz;owd7gGDWLK=8cHTb2{KJLimjumpp zQS_o@Ut=b&tWs|{Q|>e2q@g4o(uE}5K7xHG^h4Wt-~n8`qS^N}!?`aw^nbiB7;Jzf z?hPudD?>wGW(|}QpK?E7w~TX5kbXZ<R}(VC{eThFjM2f#bTgnAikktGt_9QpQ~gZM zU~(o?vzVOC)Iz2fF?A%<Mlp2^Q*8x@<Ct2))Co*2W%?ARPc^3iQ$tLzbl$p|BxmR3 zjPLUL$gP&i<&!2JAk2!eB<w243yK$SHTmM5>%4g9(a~5|=*e5t2fjH0=qwZ0k}_Kl zIUR>5(Q#Py>g-wty=rMOmXk-}^5jXlxJzmA>;<n>yBB<bhF_k}8;Aoy#n008ZdJpG z{E$9N-<lxIBXx4PQ74bA0{U*w=(CJuuo*G!;OvpKjm}YK;vrg{g$EsNHl9!PCOnL= zIe3UR=HemRoX2PORpj88lg@jy`YLh-sPWnMp}C1H#^>}|f)x5t`_R0SKDrB|N*|t* zeGpNAs=*h>J(fSN`iOM+F!6!a@#u$sJ0cn4__!1unQ=`ZEE5Qf4un>wjllS!iSwnA zcMX1PkBI9fl1;HjObKx&T-mcQ{tCM!Au7qy{Y!F8+#|}OZx=bT?U5{O&J`)Czl^D` zvKetfvwN;EDwqpH(E_U=L|W*CA;<^X^Ag{RIr5-7;%$YtQxghr-H$`=m_aq)PD>#E zn6JTs!&Sz<(#~~yB3GQ<Y;9X-XY9DPiTf#FvQEQUe-0eB@>n~cm8nH?7o5Sh1t+x$ z+tfrZ#aL~)N_Q?9GX%vLa~2RalPOtdCNL#ip?MFIY;-Y#WRL9i`vStu0Yx<hVHnMM zS<HDE6nbU`CG|Ee^_dyBDM5Pm>=qO*#R!h;?wJRCyhG>ZY&^1}T2#065WS`fLu@>h z#9*o}Obn)^<hQ8_F=@6!6%2nB^3#OFO-rEsnBh}B<nT%6Ha(FWk$*YlPGSK!Hgv8L zBJmgkvpd$cjon8vlXV(Y_+Vyg4kb19VYYPHf<+yzZQjoIjxEmTFf%o0A}Sj~NVX6o z)?a9LAnB$jAGap9h;ql_yeqC*9q-ggfMTb*p`&ACifnz~yv0dbUTIWa#=OO=nwBnI zyfm=7L!dZBAOj@1JCrN5<)C(3fO#n!+D=p{KXo0}+Mm{n|9_NsZ{rLtLw0CM>cgcs z68dSDEzmZuUfZ@oBk6A&QsvltgpaLDV)?v<O-p?O(P?_E6E~QSk_lth;)RDTXj<M> zlsb-F32ZJ2k}EAVokTC4(r--qAfJ~QyiObs=6am1%El`|dr+ka_fHCa9Jj9tlSCF< zK=*mgRu>~==%w!pZHg`>wtju#KuMu)EweG$l_%-cI5$-}hl^J<h#nX>EGbDhDP1>f z*3zcN<+u#3avQl2bLubD*2(dJeN}lw+i^5QHl%DOGy4x4hsrWtk(2G`h`YAsPt(Mr z1w^;g_OD4r$r4huaY80$wcl+Od#D_?bn%>}P0N;LtWR&OjF$AO_}WtDdG<0ATZx<E z<oXa;)->zzrSp~_WiJc^6;h?^pvsE%4<~gUDwVx#UyYWg$7$IDBJ=hn>m{#QZMQ(H zwy^_GP2Tv)8{0ZXc&kUi%gKB4{!+)|&rHM?=crCwOmn&-7yrCP^Oh%iziNN!xpA>U zn%3E?qk*LtfP!5|9~OIsMc-9!caX0rZ|%O)PknPm<bGpaB<7ZJxM}noy(Xn0dQ+vL zWQq~69HFXVrkDC@@Fa(dCVIo4*3g4#o6v+lEW5egcB$B3bEmF}Q}&0P{`CqRwzO%% z;>OucOIOWayr^mVaC&whi)+pxy*_P!>Fs+R2@fM`zX34h*0p-bt!px;m8qMRBr#~X zp)Pyia8VmVbtHthE>xM(uk+Q0>be>Xs;a8Q*wrDeGE~`6t%j?^m1<pWJqgCGtPB%9 zXq8%3Q`ex90AZ57TPrf^S2eZ1wz5X8t*ULv8Dt$*Yw9cOvj%*r)No}@omyWRt~L`v zj$qjl{kLS(oGqEwu?2^r>8^yW#rr~>>h9rECP3oKi1u%tL_}1+&*=Tu-hCtXTa+j4 z6EStQ)+(z*HMJxpIfRW`Rasw&W~dhXs;Z{8p5Raen&Ik75+hAQkE`ly$fq(K{-1^R zVp8FTDz&nvp?;(|vUoK=9$QA{mkF}o^1_LQlL`+gtSFppOfjY!mBE_eA;yg0vfxp{ zGVMMHJ_sZ31I-T_Gfa=y=MQ9LW(Dwsl5l2^fDxdcIDjHJz_bFv3{XTDCor06W0+RV zV0;m<>=1)6gA4{$ET@|3wIn<h>Y3KS^l40+&fq|nHHM_9<{r%QvRGa=%gbSTxh$`d z<;`Syvsm72rbU=GhiP+}W=mI{ECj4BV6d14g<MrQoaslh+!ZYUXr`@V`mt$3RrNNe zSuFoJrnL*{s>hRnRc$THUB|QyOzSk)%jStPiCNXQu;9r|`zh0oVVc1-Tg>W-O#1~1 z)5PCt!1U9B!I=o3g}<|H`K#Lb=yxG7`3n494I~RzCXuOk02^^9{_X*mdoPegS8W$s z_X8^=NvRJ(#;uTX1!P<e<~^V={RPB(5q~d%8Bp_F@@bDF?e>5Jrc7x%OD3t7Ng26N zR&_+zLMWTHrt27~Vxt6Q6(^CH%T01wo&NK#O{d6Z1$q|<;Bfty1VCBdxoAU~d7iKe zE)Z7eBHMK_3DcyTEJ>R+EB<TfI{ugw?*}NWd)N+tL|BJE>Yx>00`jGBIa~(YAOZd= z30|25uS$Z~B*ANw;B`sx`XsnL3GPUOHzdIuli*EB@a80VOA@>-3ErLrcP7ERlHlD* z@UbNLcoKXf2|k$wpGtyHC&6cu;Im2axg_{}5_~xcz5;T*#WW<y$(|vVO8_g0%toHt zC<Q=?HcBR_MU9dVw451It^|61qvQdm%#db*0>%+UpJRF(B`<hXjPLP)x4BW0!55f8 z3eNrEM#&F>RYU+OK-Ry~laWP4KAFc7!F-lHLyGx)kbMl1`Q+#oW|5TXncgVnKyI6z zPG0K_X%glUTw>e#4UJM3j97>{OHi;}hzBfe6h!t#(;B607-`Lr;u4G!S0R(>DkMXK zTv?xu9;4%QB{C*2mGLKy^4|26exY-lGiOe-T-+}6W15u`BD_DgSuJZ<`E<G)J&>+Q zv`o`;9gzzCLQtpM0xgQWv=%=C0ixT;Aex|G01*X|nI)5%t&o|cl9{WKnWvK(WMt+W zWR5U@0sK4=Z(N2g<&M~ZB0hN{zYyYP;$_{m{DQstDUua2)<aYv<GhywzZjYWM@a1f zehCmxXN#9#Dqf;}nLiU8_$9u}i88@Y6eFd9D}i4QQ7vx9eOAVN4X6@)n}`tLzk;~O zy_pp^l9-?)tmq0LQ4>}Mp<M}4J?@YD;(_k@x=OX@SJ_XLB*APV5s3Jn#sVOQH}5Ck zf6uRjXjX|7$%2WQhM>=AR!gygZ-(xkST?^6nscJLC7$`Y(4NC@2NEtp9L!dbB&dm& zxI=hGMo1I+UC@(#K50*fX1RAJ@k`t%xDUuGunMd~;u0vbiXtO1-UARF6&+2%k<kzt zg=Kq4Aos<_@P`EyS7XKe5gXKEV~JFQKs`2&KW2k0Hl9CjgGQ``KOw-#1T4yv0_={J z@}~t=kRqEN;$e72a8@joUIG3F^i(V&vWuzKR8gXC^f-)Iid~OB^jN~*PI~Ny9{fc^ zR>-R4dmtLN!ovSu5ZoJ@>G=>alMe*tk-odQt9nmyR}G10I7a#a`*<aM2>cJwLmguI zeYenfiOL^iNVD=4@Q-Zb7b^qf@{b`}J-=GQB={%LXVvmgf!MOG`d+I+H2hzM@8?d_ z_FB_~?_S}{!5*)@)^y?fcj5aFh#qJiXdUGGeg)B*`85)ikmw#%A>Hnf*bM#+^z~Ye zaWyhiwui+zvOO%$qbF-k)lJXiRMAVs>+tM%Y_1R@v?5V6Bzo>Lc`vMo%h5bh-iGE_ z<w`WisaMJTGW*roz<B&}xyNei+|9S49qHV|uav0;#3;AhC@Eh><yVP^dM&epZtAa* zd&RKUtPE?;c1+@0xi8@{cRQwa6^<Gl>RMcjt9h?~|9!=JzFqFEII-_=nO?YQL`=sz z+#=f&fNqib?Q(QpG$gur{`?R`=HZ~+DU<vHTe{_)a<r&8Qbgi*WFbpZH9c!Ei3de9 z9J+^+c@V343Xu5|`C*wqEJqI|-PhKF`G*3c@JHl6ta7Z0KT1F(7U7S{*w_nWi}>Sq z4J?0bF@J(Q8)J?9Ni0*JD9KZlr$KFh4z>LYDVe??GJQd0`jX6Fax*>5$@FDPZ3$-j ziVZ~gt8S*RrDXcLo9P>gOy82DSy5$Di)txPPr|lTaV9E;W~j7c@NO!SNzKrSC3+{N zMDK_ay(3EWuFT(cOSIG}(R*@ViG&6Ejj$v9eYZTnO)1as-12-tZM7`6oc}&iun#F~ z55p;Unv8jWF7mE$hanZ=bIkk<fPc_Pl)t2rsC*@JE=J$BY$B2SLY~9_AxDph93f#; z{-xY&&B1~5720!Y!2OHHLmgRS;_+|gva-IoI=@a6Mfi_Q7xA<xPo>AR|H>G4Z$kQy zYLmca<v0#Oh($v4`oy<lF3F@+`mLu&;-oxHct%!Wif1U8e}O%}=NH)H@oXhAMvrpG z=(!|9)eExC=6aE059o^&ekld`Xrxad{xB!tDurL0Oyy`dmFo!EPpK3l@{JDijS9b6 zi5?R<2Fr5`VFcXdb~+e46@J$sg}R%NGXNA7@r2MzP1Rx;uUo`BUg}nGSp+gql*zmw zlx~IpO=(_&U-~8dpGtEp0<C<j+T2#w-p2bB`slx-boaD3^4&^zZ~H>NN9pcE+;^4k zxY};<_bAUSRZ+Eri2zi!3wXZDFH)OZaoS;O7pu)naNc30%haf4S(A20kF$>JYPVMR z_H;MO6AhVPPMr7IluDRd%}M1dm0yD;DaDdppC0r0M9l3JGlya>!k9NZF>hA+t!ndf z9Kr3&`E5=bx2sO|?ogcy-<6)~35itirc`r@S$VP85>-UkL@TU{P;{-eHWVFgjSi8# z#t;c<3`JY47GWfqmE*KlDADzH6f{=AsCFGapHjrj(U?Kx1T1Thtxs?;kIPEaoJ&DJ z=B;ST@T3HYd`OLb!tujp1QZP@c(QhbO9&_&7~_Ws2$(WF0Re8^29pm^Q=7QiNT8-a z8fe1rhf4=g>gq!SnEqwZGWW~&Zx%v=^M4pT|6_;b`Ij7?f1M4+^KbZx=YL9)=bzYN zLp1TL(|G=C2j%&nmBRDSjI0DZZaUAuZu9g8qrU#^{^^|lDSZCd6eK1|=LxIV(aUPb zaoD+QV;fhuEJL5f1M7=GTzCR$T7RS;F>O2>+t#jM7{gI=l5SfbyQhz9>sTw*4mqbp zVW#&l4358oq%OFW=b6Zw*m1s9Dasf<s}gD(^Hw=(0oz(rbPyJ<vZ;;S8_UDm))7e* zC8V#~GEi?bTV?ZC^<#gWw9kec(A*{aMzxbB(FD%3mbO{22M$`-{ioB}W>Zd$-#4bH zA!WE<989cY-#F>5K?xqPf8-<G%qQ*}H>EFAmDUe41{S((-<XM^K`GOl(Xena&G5eQ z1{-6P{11(Sxzz1D%09;|W%WPB!~8s}gpyVI3JuW^2^=v@9e%e|g_ud*(8EdvGlrAk z<k3S6myXSC#=5pGHX}CzjxOvLTZQ*fxui0;4l#NMz7?ArZ0&oS+e-HzjZz;(_j)RS z?&STaGN?ZE()~1{qsH9%z^CY_O<^l{Kg#|!srq`S4mE=YDbtW7tTjW9?tQ6!FCR`3 zsBxzZ2Qk@sIfE2`!u~s8QOA}9+3P-34v*V+DsId?tS=^((B)@;@eUkL1Ep{~r$wGN zoX82j>$IqbC=I=R5lyaq*t{%z!|7tp>^P}mIH?a>sr0>_fr0DWSGRQ9L>Os$akUmA zP10gSkQ6vBEfJsVB(;c%u%%S!PPH8udpOS9wr0)h^_^lU7{@ue2<i_r-geyTb&=I; z*61Sb&Me{K7Lx*u)(x>OONo3%07UmhE}vW4wC%XOaZUapn~jpn>agK9)BeeI1|B+c z`cW^D-~UW^ByZdx$Jfa54Y_GGvRCz!G-|V@AT;nYT;Qn<Du>g>X^H7;R<CP|4gFMH zJLHK$<hOE=#!M1a*Hl&yMk_yWo;#;;Ny{Bf%Xq3Fz3hSd!by#4C>%&%L+I79x{97L z8*0>=s;VjyJyfSw*U`gsU3I8npWjBcwzjq*IQaY`jjYv`zSNA=hB|sWC4H`HZGC06 z8m_OdqPOijHC$U;t=3i5R*%@%RHuj6x`y1rwghTzWmUae6|Sq(Dnp_AkXjwCZ%}LM zYpYVVkE_)UwTRGAUtg_~l3%qp6sj^4pIdrUuS*yDpw`#aRI0VrSjei%x>__sAz$jp z1+%NGtRGbQGB#&bxJnTDtM%d9O0^~&u2HM&>7^J8Ql-`aZ9tO0)znsH4~(ZaU^Trd z3oj;A-B6v`f4C&ikw4(DXdg0F90E1@j^<D!Sb-<TMq@$nh~V+sn&8^}wZ^(aDC{U) zUwC5ShQdj~Ga>ja=m9+6>CTgKc1|uZ$O8?0OOskV!Nb7Iz{kK(nmQqa2y7vXso6}; zV`@HA3j|62I0ofRoy4>Qm^y{2Q<+}R)CQ(bW9q?7J%q6tOrFV9!EmoHV(L<+E@SF) zW**7Z6-<pYwS}pzOtqML98=qwXSI0(n4Ms51alKGb+dUAm{Y)<3g*dRo`OC<F@FiN zc{={i0L45DRHmMT-iI>vVqp5E2wsl%wP;_Dznc+mXX+gY-ig2a@V5(p58&@H{5=88 z_Y^SpG?-6e#e>fPGoQoX^DthL3_L65NRmHSf(-wNuAt;EB&dj>k?224k}^l5Pi8Ut zWQ|2AYdk`kCFD1Opi+X$5XzZ|P|oD8pq%0Nhq|UrCA+$-GAw1(5Ki4$;PKQ-8Pm~G zcu?1YQpPNaP$FHko1_f7r6c`2^YMUNxUlO$Rq^BBVoauCnhhT&U`@dO!-ZpsH-j8G zIXOz<gq)wA#eB}+&wxxqvGruFqM9D?bNSR?Ko@KU2RO|I&US%wUEn+yINt>>aDfY5 z;35~e#04&Mfo(4ED;K!J1+H{~t6bn}7r4d+u5*FyF0jJ|Zg7DcUEn4cxWxr-b%EPl z;C2_-=>m7Tz}+rzj|<%E0{6SXuU+6l7kJ189(I98T;Nd`c-#e^bb%KD7A!P%wZ386 zbSTenlnOvTuu&=m<sj0lrWVbVJfIcLlDwd6Go(z92UtOz9%v7qDFwhhgp{gzW;9B9 z;0-iNBfxhs>3j1Rv`7jBR69n7cZTGbATwJ$PG>cevbyY<vm`&{jA)TG$Q|7%1tHHf zQ(_QgcAWfKvm_Hn%qHD!1-_Y*4uvyG<y=wIEGY{{M(7cGl!3TjFN_`$msA*Iid>54 zG)nm}c5b6o1mot>lk<3e21Ze!WY$c{fC<H<O0KkNrj!X~^BbjHC_j|++)czvMWB$b zqlBtA02l`g=vHddc#;%njI?j1GLu4DE9vHGz9PkB`+3?h7kpvz1BLw6#rAvjbI`1n zwQKx$(5#n8?K=NADSB&X{BpV3C~Y_R!E}W+v)PP#EKj@1XEl3C-ekL%&$flf8Kxgo zYwZqki!PwVO_gkzqtJ7WEemc9U)SvI!5HhKfk;4_$WIgs)i7oTB6R^q-6~%Fh-;MM zjzjOW96@qt0Y3+t%^uA9JaFQlPgicboAq`|;06#3kIeNXiEsRV+tYBfdYL?5g{Wp} zf;keiDnRdUC#!DYz1SK(*cyEx)Sx->{y_0Q0%BvpcwV=NpE~hA1^!oTy&h~l?iTS2 zO2C(>BXP)X74J8sUd+w-EZM1}OwW|82V4DI>ZyPm?`n#7txO_vX`yrD-RQ)-QRX*e zFZEzA-9qs)-FQz>yr;zbA8F-MFkTgUzu?4sK|Hi!U{4N7Hh4vD&h8-*<!82M^H*i3 z2Cq|!*|K7o6EN!gBI*?BeVG*Lyf5?L$=yA%JpO^)-5U$?-^)Uamui^DBl2Gmxoi(9 z`uYo^hk?v0`BRyHDwl2E!~ZH&?e*l4D3QO(cHi!mOEKi{G7X_#5%Q(n?Cr%t^OXqs zr`%_AySv5vmU7Ic3X_5h;+5s+(6c}uU}dw=>oW0JQ!8Dj@NE<jR1miW1Fj?7?TS78 zZ%}NGCwi)i<jWKJjf9&|i4-F4E|JKA(k_KRpg1`{NEjn%G982%&roVFD)gSVEy1o_ zWEF|0GHTtI75f4D6@}CgTBEun0hq{NqeKb-TQ?sQ`9NedTlzrR3r+BW!vBwg3*FlN ziSqahc@?={pOe>KMJSCyuQBNL6?y$jlteVuw@P$$WHc7|--I^G9XzM2c9l+7`I)L1 z1d%axzdTyk409?XT&db!eWfaNCZX9NlQ~VfQsvjG(c+%oK6)066w@pk<3_v3iFS{O zc8`d5kBD}U%6BEA9c@P|)^)=?45Pi|M0-g@dr3rlNkk)aiTaYtUsnYw#_KA^=WnQS zEjrd3YmK{M!mr`Rp5DlKZ6beDpkTUVJ(-62xk_E9(YtDiBPV47QPkuRMa>jxmquBU z*&vfSO(F9rmCU0xGLO;8T*=6c8e}$`WUlg%d93#dG-JN^HU5MaEwxH17yhi)XFru@ zvBbNnc&mL*o5Nq!;(BqxjWiq(vUP%xx}I0HxG!23*CS;R^~YJn50P?tV&*BN27nMJ zSQB=UB%Qs`=6_S;Z)$O7`w^S|TaN3@t_ebhMmM_S><GDQ0#%pyYH^P(ucuEdktTc( z6w>11?_i!}n0&XB#hLK{--Fn3BQg;i^8+oeZ4-huKSWf~ZIMapL?LD84;V&o54(i& zi;obFYgp<M`390^@G&L*u_mJMKWTA)+#fkWpO`s?MEGm;gohTQeCDA16;rb&<8KQ8 zoWQC03q>kTTtBtAcXRf6RP!x?e`x$4=(fVtgZxV^o?#cEPAFHzB4i|s@C~K^4PjT| zuNr?f_^ajrOqQk=qkU(W<~zdv&p_<|Vjftq3~LJhrsB^o)mELlktWw^dfXSO!^!na z(qA|Zzk{qwd{)Os7tt$tD7x5M93q{4AyN$(iY~Mk3d4EbY+sNNcOFV|-iup^srIQa z-bPm<vtoGMao;m*3f-HEX#;S6#0!nN(M`nPLZ&NbIoBnko|WP&WyDvnYmLPP>oc)e z1pB!iyt*MDc0?tn52ys)53E?YAaNm+KLBHCTT91=R_HKWTn;$r@{{=8m*AOpwY9pf zHNhU2$|mK$J5p`kgZ1i;b@~R8WDdrkow(+hc{0WJwWefmP(1f`d>@@KH8p}MUT-Ld zEBblr5HSa9Yw>)OkO*yVS|{#d+FC<Hq>~70J82`4V+$^djG5_u<UuUzHf*<sA<}Z0 z2nO%riXmbS@EP(dscy)tB$3C;LB|T|TL@P+)QJnFs&Keot*omK`%<f}R#i1rsa3V% z8nv>vwmxe>I%(YaDqY-o9d>+wFel$Hh|+U|<4M-E&I}XO5zci0=p?%jJPvWWlEt*_ zB4AoR(?$rP(*;7}^cbcTGtW37gF2U3^VP5!mKmKcfk}m38FGe^IjXB@q%0Y1Y*$eb zBvyiFV`+j!IA*C_HnDt?Fb@!Bg)k=zbE+^y!mO;4gk256T$9mTH_KU~(BrlJhz%;K zl9rVj3Z8M4yd|0fs<uQ|h306Y$;E#`V)JJP!?Tg1h6X5os3u|3q!n718%UmX40jt9 zCheyqsx0(DE1II-3}1Np91>o#ySPi=Q{2UftSLj9LximJ_@O<tpWP+)C<}T{-<?SW zYKx*~PsD`Nck{z~=~Mn|LAJJ32${A#bN51?d=ze7m81C)PIL-CGV1M#cwy^1{HUm} zC*lLljvpOm^O;1M@?+v^U(C-}#?{_ffJa4YaW&@QtKzCqQmrWJC@ky=RMR5qguO5l zPT*^WaOqw|TPFxGRYk2qq)r>D6N>?zd{Yl${aSn`H@o7eJ$=26K=P+gB6Xm1Nk)#W zsQDQA=l0I~=OiL7yT|g+&!#<>W-G}M!Du>4GIUp@w3m;;-6?L&Lu8Oh=^*;qUyU+P z;;XTtty73e@0_~Sfo5)^8R~vEjwWi71k$v0q#r{NQ$OSypU81~dX6}8Z4OTN`7pI~ zfplCW9_tiKXgZUiH!ea&Dgzk`(-<QMTi3lr3*g*Ex^HK8idZ7uhEh0HZK9kpvpP1d zX)RvYv9TCaYb|z*Tx{bPPadL?>3JyKM-T+*t)jf1<eKPjk98(X>rX3t-B1~%Fe&!0 z?WCdNr8_-#UBoxb;SUv3Uu>{sQAe@kTWrx&LGkK!1DavVa7x*au{Shy9QTPLSrX-h zwv+MWY{fRMaaMUEGBFXs9#Y<o9Sb_P(8sj1EoZ>!E2-W8BaUXp)^uXB8#ak2;GsI! z75eMg4(-N-{lpp`Rw`e!79*25=AlCC#4*3oVWRigSZPmLSn}0tCk-ogJ8`jDQ4ei9 zxp-XhmRP4f&iB>H`zyBH3qyYM>xca2ClX&dp!X6FNY!;U^;rWaR#iQ218Qn2Yt*_> zxFL{UO|`zZx(Y+<Yt2LeJzZdo`kIj15N@dVB)gOzYXqX*S!!KFWf=DpRrUUaK;MiJ zpjG6X#$?<j7{P-S4}M@(UGSpOhQaW7iya}qM5pEv5`KL`!f!SM+#>{qVv11=iW%6V zekU+xl6e3yrIIOOrqr0z5T4F_2NuafVDEgUEFyuu%Hd2oQpoa=RYMy=%v4^VtQgwp zu7W~5mrIaolyntHN~t907&)P{!0Rn5hg_qos|*aI8qGZ85HuBIR#zFN<DV@z&56tv z<~(5@D$E7KTqw-N!aPivONF^in9GHEgfLeK^C(aiQ<oGoFhf#sV~{~SKI%wf1=9R8 zX!oO!5~6rb;^#54h#|-vO?*6_F~sNN#XX2aeaC3y0!6f$k--ZpY2Wer_M!el)fM$I zA~SEbMGld8A+@+mCF*{!)JigjT1m#x8os)>IG4`N$I}MJ(z~?X`01CUtfwMtdvAov z5gADGP)FZ3agnp0!lFh`#DJ904Sk!l50QkBp^bcF-%N?J<D24Y>l)aVJ%K`U)h&EW zcbgPf8-dEfPr@^_NC$U36Zy$;Z7%;=)Kih)vwgmY^m)lLZaEsT3a1Hn3}w$=D3DGQ zS}RTyS}RTmekSzN*2mV8O)zeLls)`BAbE5O?JG$A#1$Y22Co9T#J$?)^^jGK#J)W! zZZ8X@2Z28f&HkQtKYtXO1JR5~1~L9TCOA55wR%qgmTo+8rr@z#l+or*5!)9Zru9Bu zkp3>Ib7LX;eL`hF9gAKjeS(E92Qnwhp8@|2qFFtWEQn-Fr|;pPLtn)dp<?52P&Svi zKq{sRCnt>?e+Sa&&8W~MdilSi&}Gtpfp^K#Tqm7e+DjQO&UvzpbDqpEkfVl!V-Sw1 zX{vTIHHaX(&r1^Bmq}OQwzd|oL9<T24$XSydYNA%+tDi;B0)fWejRQ{^E>zO>jg)L znmL*{I(E>ml5P>vvI-)F5Gz20xcW3=;0`qJeIYfHD&iqMDf6)ayF>w$-IVh#%xwld zAoB-gn~SCZ1Neh-?=~TN@L?HSzp-a~#Z3N)ygk_kkBJn$N&O>B+a%hEhRC4JqM9HA zeKJWYZ9kb#wdKT#SJiZNBmX?LEH5F`Vp<B?kJu>c%VsTIykLQ(+nOE1Lv9=GoTsPc zjElZXhi?|&6pycI>-4n5*0r>)A^9qLYum;ce)jO2Aigh24J2A?+nSBBv4d76wf3%d zru473Hw7ap;-hHr)LPbbtZPeqk+!9+4Eg;F5BdGGlUbSG2uVKsTKra3*H_nQB5Sp# zwwj0<>d><W&$%^~^$iKZP?hz}RV7GlxH72Ot};QJUOM2COlLDChpD-a*g3^3j<LmN zE`EL{sH9wwNz5>q$;`~NbPxXde4x|M;k%XsL7{`tD3A+B7L5|-Xkm^K=2&5l6Xtkf zmI$*HJONURq$x8n3y?EnVr3UfkW^h*nkIsD@dC!g3s^+Pvp4=ZgxO3LVyX%TJb@k9 zELX60@&1LMNqy-T25D2<3#PPUFL(eAuZ)IILBp@25zx@c&{rU0w7aLbZ=S+e5s!w# zkL`|Y?JAFT$MtrN$GhXKUFR+I3TA+&hcUv9v<}{kt0fs;OT3iPge4KsI4S9Bp1w8o zkTl=J9HMR^C(Gcu(M&otIz-)Q2sv3E46)~M1*CI32-2Cx&d#=k5KixKRIDYV;fNZQ zCdE<srlgxt_m}kgu}Z|!a<|oGhQsx8kiPE<1I^UHS*p-N8+4hOh6g)bNGGE=OrY+j z)d~~^98qI(CN`nWM@Hr16;eAmE%t9Uy~S*y4rxtRo#VDZO5l$<5{LHR11ULSBLr5Z z(L>v0qZzBxDXJYZ(lLV+HnmozgM|;I%}zO?>=QddoK4iZBL>AJsvmJdIgmJa>|hbn z$c~1?lM>qhcuH?ecY*W_9K(Z9nyJ;bm9^>Q{pi(DrB;U<Lj4H*)#|F+`hJ8{HI<>T zP5V^cP+#p$DT>gKX}f<ovr9Tz<*>zSI3i2bs_M!b!#SRe8Uew{!Kt_~7C6!{6k8gG z$K{j}=MW`mj>N4u&_yL_8WB43)QLpDq#VHX3dW`|7GkWDREs2Zd+2!f&;yce>UvgJ zMkd*LT{*cFZsf}&3JZ#aIYyXcg*i@`CBiHfX1Oq{AS>I{WG{Y8<Qez{0r1bnJ*=z> zhY}z~c&a!*Xqj|a&{MSG>5xUo0mdZaz8{Py-{UR8jZjQ%ky>aUY}x!c?J_^ES**vn zsJGk13?47(U-%iW;-|Wr@W?X*JujrS{bF$58C6;Fc!`(rTCpR|kggSM`qu)#p7_rh zQ6==o48FtGbBD-f#IY-ob0pH6kPEi}aj7dk_-VNvnzdg1sN4b0{hxV=DDN`d(uvn3 zaS51b<vBt*^R4`lEvPfw$`(dK7j%18V%v9a*+5Ou%W<ExeD!*Vpwd<W{iV`+(IQDY zT`o*jtelSdBNoL}0!5RA847uIX8Y>aHUW8XTevB1i?wsE`AC=)Tiq!x-biKJ=G7gW zI+qJU$?i>{?FzUqyRfWn9c>F+C6W5<Hj+d~P?KfhWU(_6zM>p<I6-!}Z=;=xxL0IO zlHL^6WOc*STb<r=bl*9Y%)a!UqY&U1OtjLfRIyb9q$maxZJ35PdEec*uPZo53N>?D zz|*m&)rpulFFl2UG`MNH!w1FoEX3}!Wq5fOE<Su&)2hWdobsK_MBw7hiQ=0M%Hhj{ zX&9Sa1+at31gjmQ&S}!eoOd<{C4IF`Ux}S>lvjvMvf%)>OH<OBJ?{vch_z#bTMm+2 zx!LvXEKYMx8;Cx_mYp`R5%SXm5_O;U1M8VmT7MejsE2N`ohfB^zC-X^H;mDP->{Yw z=2^>A<LT>TG!ut2_>x&C4_7`1*Omk){8H}V{mU0GUa)HUyu((_oj1EFUGAPO4la<u zShl=z>2kJV)4FwZv2SxcP**2YqiO9P8EMt9r`viuGsaG~1!jhZQH``_3(Q+49vmDb zxpQqsqC`S8WE0!Gx^p$IPD98}&!k())MPT;CCL%Op0+}#=a`V&nb6xjPdI6)RSc(3 z-G&lE{r17sm82y%+yQEI4$U>gI-M4`7g>81Xo^IdW-VXUv}kr_o9(^MRTw<9%+$~i zTHC1G(-;ce{a`Bfd0wKuQZa{6$2q9_&Y^U4rtci5408%Q?Pj=3Y6{=1Nn9E@?AEkt zhjm~C+NFE(>(<t0tMByLuycB_9hr$zJL#pdsAb!OdCr=Scx=r~y7;%Z(=8h}X7uy7 z^-z-L%f!~-=y23BDvM%^gg#7X<D1Y-nK$60SW*+J+y6t%ki0P7c*lm;whdyi`Q7o@ z7{_met0hzDMNI_FY+KW@MMyLDA15lbykkK}OKgq%;kU&gI}W??yeZF%-W1uS`dV6- zSJ>83;v6t#7(+8<)k!XC%jPaVQn&dT{kG-G#<ahLvlkz^Xmn@lTwf)!o!zlzohy|! zxr@P>)Ydv_7-ex*y^Q1rY1mQieaCvg9nA?PsuFuLcjmOMYqi5j)3?3Ud+o2bSd+?! zk%w5-a}r&b>}mUH@+6#9sZBCelFrg*dpgJ8G~K}yhlt$T)`^?HlieMrQ*~qBI&oq> zIgr+ki^9Wf_>>0sB~rlUFg(oGPl;bOj41uTE2OU0+_Zju+Xhkv;$K6vV0ni<%frJ< zFLg=C9c)7|Z8)FM!MA|^4frMA*w$(<A`L$@p~P-!`Y>YdYX>&%2gglh+c50e*MIBY zFzm_KKW4z5dh^!d_GMj5n{GRYGdB8vfE$NX`XN`N(6F|UDGQx_VLsF>On3eWaxyoA zl><*{RaNy>wOUoUp_+L2Y7ndp*H#A77XYm)R1>b$s;X;iLuzexWi>{tuC31*WW%jh zhN^4BYJIp;$gB<5so}aBlBHT%jR{oN*Hx<3l~vVRWkY3c111v=RnqkpmY}wwCZpd; zMQsR&>)dAwwYnzM;7?oDv~WYXwu(gO)~Z#Z+8QlfQxgt5veN6SD>3tihC0l)mc;DV zR}w*7eW*bTS5?<w<`^xk)>KxKI9QA)?vd20dJ^1QSJ@EK?e#{jtE{V2YpScOu#nZ& zVJ%!;Ra1kp>%-_1s;j|>7+<Tbsconaq_=SYJ217fs-e1ATvcTR^Mi%Kk-;*fJQxbr z8g;=&<8WhzadfcRh#SWRk2lsB>w=xePqcF&zsxun1XbR7P<R#uZvoW{vcg6b6c&vf zHQE3ryMO>-=Yz|*7jSR7a)>Zb4HE61RzQ+q6(I>$86!l+7L&ACWgKIr%qU^HP_7F? zxh_m*$`odbCwWf|^Hz~?SZE-zu=JeoWpEH(tPwHbA<Q?E!EABE)<kN1l?a15Oc9!R zVLpRH87yG1P(0%=W^4&lmNEZw21l^Kku2jVrmSR{QI-{Batl!mDp}0eO1gHzV%cL@ z&T5u>0?S*=@;aD*J<Hj^f*V<I6U#q^DL-Y(&lvmyn6edrrvdY$&lw1wiNCYJJR6`$ zX8xZs<wEqh2!EI0?^672X37?pvkjqNfq4ahc_m=%tI&N7Ft`rw>(Snhza7A`r!cq? zz2>knH=}hcu#DS)<=qM9ofu1rF@+-D4J_v#jBp>q_v3FD{vN>Jqv-cIh>ON2(Rv<# zF96eDLAw__Y!Ckai15ew`!oLj3T({3uyeM`Og~LFx5~;GNy?C<?6H!ZT{LoP*Z2~$ zr*)05g6yJ$yQZT#qied9eHh{#gTHnOvKO4#RU&0y4d}dqjGM@~9VE>dxq0)*Eq8$} zu6E_-EqB09K>T}wBK(@r9s~*MiXMWl@vyMyG3a_2!}Feiu32b3Wm`|%)-%HLK5JXg z32WAicGye8+6phDO}b1Zs>GDnKz<!geFNSE7kVoJbtj;n1k{&+-cCU8B%s|1=-vN^ zxA%aPqR1Y{ySl5x%xq3%SYVdjCGCWbfV#V|BOqB&QD)ZJFwE+*%WXipxGJEi7*J7A zPl5>n6K2nxFL=yyz@2)=@A*^Db4$-~cY5-Fuc~``Hjwl_|Anb~UG?hKtLn;K@4Yzm zmpJrB9C|Yjy%mT48i(GFL+`|)cjM4|ap?Ux^nY>a!#MO&9Qrs8eG-TM9*6!Bhdzr# zJ#mP|q0i&c7jfvHap=o9^i>@CIu3mkhyE3Z{u773jYHqXq5sCA@8i(nIMgLu&_!`* zjZ7{lR}jZAX@n$AN?SN=2$4oD9GpXlR++krC`4YdFf*M%r(BqxO6YkDM-0QSnklPf zg=onOhYlwC8iH4HjY7QU;`jw#%yp(#Ql~^*qZjHZhP*I4lO&I?bk31Tihp5}lceS@ z95RTckpLM^2}vKaa8NeMSWED>Or}!lT1Q+il65Irn3h7a9hC}@%E_zLhD&77<b|op zWUyYDei^jxA?cMW#0{OYFe`%$t6b=Ekl}KrypA}XWJK}8WEUA(vvBxOGKy9vtx^<{ z>t1MRWc1idW0*w7jH!e|ld-;qPJ_6sD$~{j#k}guWc0@kT9}hX@-JMNl0*uk3r7wo zh37BKNF(FNRqE>?eu8%)44M<kNT@vgtT$;C|BAbT^t*XHH6-VYi^sEjU{qMrLkwEm zLmX;D4{>TuJun3Sq=zJN?YGH}E5J>0-b6ymxUkYg(p)=9h~`~0FHCz#deXzFMK}5P zB&50<!fFr6OnHNZw7f5su+~GeQa?nMx@n)2kd7CP!#e+T3|!qxJ|E03MajDLT!3v; z#so=XSI8(D>6YANwo?u}*p)mEJy*mPNn#sh`~VzCkqgoAX=)@@B-<#5Qtf1^>^dHY zo=A4R988O(@nkp3_+5At7x}qK4yD`4(%BX{B##Tr>}Hu8AE#7(5xLwgn|E)<O1q)b z+yvb``97IFAjj~7!d`A#^g%h884F~RNY>gz>>+tS7hqE)sjz!hMlr-cBFEq-v^=7H zQB?GZ96bi%kBRWX>~WdP&OvzEbZ$FzKT@GcWz(t*4_+Sv^rtK`PYW_bWmF3qLm@>$ z=2<}o!=IPMwQH(AiiO#47Y5CS`nmDYV)>xV4$8q1vA_rt843LVxj+AJKn8DE8NVq9 zM@2?){@;S|x2%l+DhG2TxpDsA>CgXrfc~CE=6yj1`TPLFKd{LBpCE(b9}4TJGU`$s z%)a2)k)}#t$m~o0-AQQh{7OC*?Sqbv1xAxX6l)w4850~E8H-=g*tc@f9dJv9>^nI$ z7GuI=+4o$5EnaeZfj2}&kiAq%y8-VYZB$~x5s?vlGpf-pt`f?#swSMrZctFl%QQ3V zL;*#3oS2Gc<S@4zmC%@2cnrHq35^>U9>+E-r?OiWvz-*7-E1UhwiF<@RgmMHZa35J zfVBCL_I5~nw-SrwcMUthu2EvE((4W%X1jnuE~MNI*tvkcN8z8jpe*ZUD9b}=>9nih zKo6NNJ)y8i75vC1%<w*@1PcR&P!qpVuy!m>q`~nKfbs$1X(d<?EQl0DCd@7%K!ZI4 zoI`AQB72r6i3KJ>1;3yKCkG}2otG4>&s7;$aM4Ur5!~wdYry#*EMi3_vDZ1aAhA!u zdmE;VADZIBZW-~c$|yh)J0<81c!B<(l%Ox*1K@xX^auO^98`kEfnupJ4KH)Oq2Ta< zgu*54P5uxl1*CVeMs&O#wgKPnw`Psxc9k8(S~(1(*dlT{WnI+du-xSEB5HGZ35`W2 zuHqtpYiMXZJcP%mp`Pt^@WiDe!sFRx6sspcT){4<!6}$HFoi%i><Zc)nHn61v4LSE zFbxP^iTXPYloR;^xw@Ug;CB~KFJv%K_~C9EG<X_=U~Ps^V)sxKii{g$MC_9zC+`)F zZ5Ium%+XIK6Kf})8#o0z%pMx7<YASN=Y2Guf?F4VkOr$FRYI0_Z$jcM4CcunqQUA& zwZM2d0V5rQImTmx2D~@kcsMqSUp~R}LT`FxdSnKBlA>kYKmd|Fg++H@cdLSuzr>|f z-O@{xy+&hbNLP%Yzoo%bV}VmiU?xgT(-`{$jRj^&>~-*FOM%mX&>xYIlO|F19t|kH z3zP~D6dWu-TbQ|BbL-XIu6gxZZr7Z8y`bJGsCN|9I}7SvJ!F;iK1^2^kPpDUQ2raZ ztCbHa`y1yuGC#7Q^AP*cdRU02D?j2DpK-D*^^jlEPawsw)ZH+_brEfk%08jNMf`Oy zBA6}vl-8+{)7^Ay=K=N)gcrNXw$6j>3(7lCWXab3DcjL}<{F}Z3AEM{<15O(q`@;H zXLQyZ>?;#;ux~K+nQnO-Q2K8?HBjE4f|9I<>HgR@H{FJby42uVC<Y%mi$s=U+KcRf zIwQQ4U98%#A7AJts{KMYkcn3j{zBJqtclBn8#z0CHd~uO$Pr$eRso5x>_cqBfW)rq zPwZMA6gkH&Z^ep98ia!?N~kW5heK7RT>`<IF?bmSK-Jx>27`4*AV|b)eM_IR-P(tp zU-xF`TEWh3{n^=ybRBWJ+j<w3?Nk%`&u%q1FV;PKo{Y_k?cv0*aj|>V;IKL!x^^T~ zrv+*WkH1f?(<0}>d%GWjFqEkcuPk3r98W;Qxq&#JQQ0GEur5*;sgE?cUD#M2wVoT@ zIaul^L}e}Mtaq{})mWVq-aC%nzft$sIk8PVW7cM8y^B4ocGtPK*3lG{-+B(!a=Wn6 zy~t5w-GK<yz)LD>g~q{f4-PwjQF{-De^uGrsyPfUH;2J@RBP0KSG5Pk_qljBuj{|@ z;EA`AU^Eitv;8D2=pyp5%05<m4TPVl-6*Y$^Li8eyBa(%avmQNzTiBLgOT$~6~_}X zLw%(N&kvjr-T!NqtE>jD|H_B(1g_a(mCs%oJkROUMH;(U>oad%qFE(aquKM;6`Gjp zu(qz$tdaX_jhAZ-1YWC&`3#5Rjap(EVJX5p!6q#s??vP$joqX{c_GX!?`EwVer9>M zXuQ15P~Kl_I8usI-lhdt1Xe&Px1zjrGLDNcV=3>_u#{y7*gYDb%US?smxgOu4&G<7 ze*@23dRk)-X#)?%k8n)%#8CXG#)o3$<4Fw_MDqr|5~}3sMDC$+X|cp<>nDKmtQH!d z3sc?m8cxx8!v`kY7x)9`>O}$Ky!*1o6@wd8eFckim>0*u@wlvB?;*>i!>}h<MbN!K zM)w|~ptp-q^xWztfVD_ltFudByD;03Ffm)J*Qu-c1hEdFNLyD~8a`aAn;oaUs|@M0 z%k(-uG8K9wPPUipbyU>Fm3p1VC&vyb{RVv4K<X%ex(1$NFvo7xgO!jDJN)$!)V)8@ z39(xML`5Ok2#cXO_vrlX9K@;X9%Pj4*4b`7h8!JadvreG$E<3*U+2osaaD$O@vtr$ zFnd(TyHIW^3(N4h9=tGcA*^O_@%1E+39gQ;PQt~_Q#!tQ41)T8nm_PLepVN4)NK7P z>g*-mZ2dnqTmQ?t)%su2?f&~3a+Ho7Ed+*Mw;0-|n~S;qdarJEKxYRn!ap+!ABq$H zvu<~*H*~JtL`FsFgV{Se&hBHScXakXpkENVU~fh`l;;CIctI?10pTxDLwyH2)FxDL zrV1526H<P{S(*nG{1}lwff|0CkWY2?sUDmMn>2}!!Ux$ubQsuvP7wS|56<n5oZB4< z$07@2k%hD8;w7^z>`!BW-glgn>C$&P`(6+J0$xt!m-u>q0X!c@p0knX5rDbQ5SZ%> zc9{|UMJ)0wj<nw3s!mLD*O*Ax7;K}_hun3DImjZn#l+lVuv-$y-HJ$qiMa~8-9)<G zV0RhfmAau;b{gi|_a4Js`|dK#weN02tbN(N2G@52goa|%G6_9wutyEip4elEF%<bZ z4KSWJF`hTri$*NcMIsjw95{Fze8~_)ZW?x$m*deemSo{r^@?GRRj(RcWr~^UK9l4= zgLNBL12VV<6%*qxCdOY3_NImL7GjJbMAcGF4Dd`r-H~{EJD-P43|>isXGPBP1g{{G zD~RdwE8Lf3XA&3kylP)L3{xrIYVpY|Q658@Ji-<?7y#`@T*ymZuxS2*nnjD3)=r;U zHSg3KDP?6Z`csZaKw|)wCWqVY`#hNgAZS8T&#<z?YXe+<6E6~QKwSJ8G(g(ZnpzsP zB@1R$Ev}*G16*{}+A%-*F5y}oMc(GE-y=wpc#lqQpu+T)92t8Ietw9M$duy|5*heK z#Dzut-U@GezuKV19zTBMDl4O9o(iuiNK#f(=A&i4@={t_T;ZXmrR6@QqN2=_AaUdj z=Mp5@rUVIf3j5;x(~1x!5o-9exblOcTnj=DSH?ere+emYIEjifB2;m~UuG8yju=u> za&i(r557znawXPZcFv#-z;H?F!?<XPbEG_KbnY1Lj^%D1cgJxzpSy+J9nakf+?~kX zNkmC^Xp*eym6A&$ij#XZGb|}Yb?^sGtCW%?q8t3l-~xzArnE^CN}FT|5kx9XqdU|@ znUi$;uyVRBb0TY0t>vO5DDEX>5Q8X#7(^LFa8eX-QfWPF*oUVc)daCvq)x?Y6c#QT zTVAK`59=(7)_}qWYpPRYVFx>}PDKp`&2^|vNu~}}Yk_RU$!WH<0S$r?bO*^BxY00l zlPJ2$D!M5ex-NYKfn+xjQ_|%|f}$>5Zm>>`I@xA|!Y(=r5Z38YgWU|i5p}RzxM?Z} zjEbd@{4Km1{Wb|I=%hqa_$nYRl7`0|>>Yxd<8ZrzX9l=PoUIuA26bHYWoR%<7%<@S zFW{Ia;w{masm4Gi;`>?hv<A+p(zN5X>fVnA^qkX=VcNRr81Ym3m|*Xx(Eop)fu-sH ze@K`clSj_EqUHZNVZ1W<zoW@5+b1Zb|DTfvb{GBcXyP3}&aIe0{@0X&S-jmd_s5cr zM<T`E_oPi>lleb3iv-K?Ty4Prk{&QU?|(usE(-O(BnRBh{;}ljYp&j7k?I%H&!~K_ zrOBvc&~qhJ^idZu(~j4k^gsi#Q14XcFH7w+;8Aa}*Xy)vllnbAPimhrhI-4qUPn9& z>MQa2sn=iZq2AJBUrO&zLw!Df8IXaMkFVTQoZ4pqpgxZm(pC7;0JWzq;a)oR`^!s{ zdsSC|6VpnCw^Yj^Ihi@bjS)HJ3V{_zhE6EIbmHLZq*HY{%Q1}Tbfiw*IvuA|u0I-; zNBeYIs;d=_3OSumgG528Cap`A6ayf|2@rLmZK7m=)D(c!v@R8v9vNNf5-bJ)I|pLO zAcO`3BoBdEawr$DOdTcXju}0cyLsHr=WZc)CvbNncPDYTh`S!{db#W8ZZUUDxLd~E zDI`r&iJqEbpoU(_F`dg-p@v-9HC=)wR1)gXrH*O|Hdii`_tKJ4zpm~?y}O2i8hsrp z(@`HpN;Ob&B~O<Ol9Y-TWnmLY(nuOE!ctHYlv2WvF5;4)LxSlj37TduApS9Zpale8 zSVP#dB3>O9@=(cpKm0xU{pP*ehcA9EKk@lN_3+`t`ZuyfrhTboB}qwJHsjx4PVw`< z4@`gmDPI>XyZZUB{%k(~{S<+>(|ms66d_>0&kTS3l%HkYd+K{XU1Ns7d&(Wk=-&Nq z00w`=t}ny3j0CgJoN!%ZbJDDY5b5OOT{R8B7j)OMV=`aVkAZ|~P^^u95D{zrlQnnN zyjgRX%&na<>+}V4s+QKGFjXero}M$mYDO(=d8gORTU>Q&O<FD9zDywMtZhb0c&pwK zhmvYxUsaFhC{U$PB3vu(og?hD!Q|Sya9aQ?ji*k0Ffa-M-Smyx3+G27z_?Mn+5%RD zFKk-Txk9VuHIZ7&<xm<M=0N$Os7cl{zOz(b00=cln2cI;W<DKpro+J1Azrst#sPvB zw|0b^japMEC9Ss4Ae&m-dx+%uTZ6u<)*gM+Ya7hBWW5mGWLXon>g3Gw7{T`fQI$ZT z<k+u!fUrr&PGy!V(P$LKtSMfeJ%RM_VuTFAad3L%b^i}Y3>hcB5<aD!5SiX9_#cq8 z4+nfAJRvfDm*qboG4N1)BB`vU^@%6q7O>(;k}b^s5}L+>Me|QxRCD_2sVhyKBS~k9 z10G}g{J9I})GV$^tv8K}nE1w`)93V2Fp>m8wHE!1w)W-)y|du)7Cnrg-kYQY<7*Zz zn!hL&BKb{ZD+Wc)cy7rsMlOzLl9@OnSeNfPhLsJ+=#x*;v8(sky9e*FiS*eYoL~yb z*mImI;%od9OMqR38_j8Khzn$)WUOVSXxj1AlcnA+alWt&xt&O2E8Ub6N*ABKFlpt9 zB<(xu|9ApWoh2tipxMect|OPC8KWOS1AD({qbOM9MDg=LYuk!&hujen)~ob08rvGe zEnymIZRwyWnm6@?vk@ebVOxGLL8!0dgb7;jO-SUauqayIa?*)VF&8y9V^e=XYKw~# z;y=D5_z@}Lt(|<LDebifX8dE4n>G_+y@kR!XgjW-l)r|!sNf(zWF+pKC!WAsx3QP7 zCO7A%Mw(k&+k7Wd0+XGU@j{@yu~{Tsvo$uTd`5JLg&R!UTo%}6ErcP!5@IHKPF&N9 zp*%Id@-?5a8z$}!j)zGh7KAC|w&WbVBQ`ZQH<+elv(0|f*&J@0(bl^1^eAk8E+ESd zi(h8~r+oiXyIfnrlgbV4aqDq?_xG8|O?B_ExHz?KWlpURH`kv<F691F(%Z;gZv%6d z?X>}I?j@a?VDwI#GizQ=)uR5U>zwV4%~)EfY*)hYk#6cewa2LBUcFcqV!_-Xo&hs1 zmj*NHOfHSOW)tYJLORS4Cl)|dr~~c4aal_ZMK%|=a)WS-TTf_e5yiFy*M$yKjgO`6 zS{pa;XF#hFBDWTBI;u5wz>}$V2cWaiS*oJrQ|n<N-xjy&S8-y^Dk0oqt;HJD4%`Nv z&|C{0--^(9iUx{r;DjdozWvUDP3m;CshMPL<#04PfsTWt(+QyCK8T`r<)Y(H!<+vJ z;xE;>rO>m4w^Zd`O7FIztY~WSpBPzQRj$V7@XGea2COOZ;n-ETx}&jORH>80e3x5u zqQktot%e>o!(ODIjbK;|z()GyA5IT<@7V(kH*Sv*)$5~zgcqf)mqzPk5jNcvg64)0 z=9?0Se6ik#@<1A}Ej#n+raosulACi7g{tkdSxK5TpC=JpnpyM3E+gASZfZ^3YxLL1 z-CKKidbn@AbIGDPiyD8@+1TFU5Jhc)eJc|0eY7gNTbrw;@d7?NK_w~m&F#s}i8XT4 z@wcP_-h<kNZdRWOLZ~q46KEPDZso@}XPN#|r!{X>b!1>mt?sqYl-tje+n4q|&^`f{ z2YA7#bD__9w%P=Hk_&b2&W{{h%YxS4S=ZjtHtobZVeg_1Ibz3A`Sg|6cfIdQ7)VcS z-PwD;dO~UYwCfY<$^AFvsbZ+fZEmV-3%9M#H2`H6RyxgXjqoQv{+wtoeYV>J={s`5 zRzH{by4<NJNIkKy_SU3Rdi?J{QS>~c{}7kn@09kG6X9}zQwgC%OXc|{XwMP~vyu|o z5ej@xuut`=a#J6c(;gTrPi$D}KZKrg!UTE`t4ICNcJlFlXdC$K9zV6I-eSMEf(xK~ zi;GLWDt=}2_y3xu`YOtNXyVrAE2I80pI`Ns6qlE){*nrBnIpbCQ@v&WVhAnvl%t(p zPlf6)^_8Lt-V%>j^_Q2IR;XUT4@K!c<^Ez7D3$pDy{x>PR#f=?w4%7Qn3np{m~4f| z2gqd}RC`-o;-h6APdP0wt|+Hv<rO|4$%XYx%Dfe59Jd&VmHSX~z0~jZ0K3H%WvZ{- zi(mNsWx%<=6cYI={K!~oaf#}O0suy_mut{1E29;_GZe6*%uCB4fEEL){V5T}`YU|> zzBiV8eZ?ug_lUqVmZZ3>tOOGID)3$vYOaU!QopAJIP{kJpt?&c{9a(l>-V7ay%%5) zR2J}6=0Qn(C~>jh=cOfHpiqpe?Mq6_im?P<C{2a03~R3xitR1&c%Z=LWnM_(Ei0xa zp5jtkg8J>D4j?;!ISTlD%S)juN_ZKIk+rgNZ+W7@3vYQbGFMjWMP^ZJfZtQ>qZKe^ z&@y<7wA_bpth}@wvhZRHfXW5lOUo*tVEAVJ&?G#_PelnW_LX2BP`}Wm%Dljf$LGr& zpdt3v5OCbeFR2e&Y`U=aJDB9u<jl=EJ13lTeojYD7s>gQ<a|d4eNT+*<ecw`OwwM9 zD+b_-FlmZTQ&A_sFyu?P7Gxsy1Ps#YV4V!n=}?^v)5&n1aD@S6l&P_wjM2$how#+9 zr;~9y$w$M#q);d0b;8vKkjbdYpZIj**Od}oDMPgZ%2ZSspq!$U>AE@tH3U$uAwZpl z`u*u?x;6*Z1JL=pvOuQ`b%omp))u4Ee|m<loT-zubp0INI9FGqI%(1!&AQT}D=T&7 zC%Us8h55-Zb=R+SnxG7TYXMlxH34v~0Q3s*uOvFz0RC0rn@R!5M)+L^zw3#vZz8(m zMxr}!BD%2|;<v(Y8^mn~A9VoS4lpVKxD))lz`q-QJK=W^{C2@_H~jVhoqNH*4}SN< z53LQG8Ug4-rdEJQ;P)u}9)sWGLQ8=1B>YfQz*9u13U~&7&%y7v@cSL)w;z6g0{9L1 zy$Q7b3jW*hdmnz53W1Ly?@!?OccLf#1Mqu@?qU%BIsCqW-#;PjOQNe^0sJ+<-vHjf z0RA`p{zLTSZ^8dB(Nhk??=$#y$$H8~@Vi*nmG#huE(d=D{H})IHL{+%5q{UpI^6`n z8{u~o{5C_}ui>{9e%s-92ZY@P{@t?fx<}U4-2m?aTK9r~pRDT-g8u;g4im>yGL-8D zfIo)c-yz*UFh504+p0LWD!}(PMc22(Z-;WSB<Xl3Pa;%F>T*d^ktF4L;3=;do(f9= zDl7+R!W4ieOao}r$pB5N1W2jERMlNBLaUb|_A<l{A{0WX7NF^Mk~F;@ehrXIBjQIe z<#L4111QiYNwYg8DR3e9t0C{7V%|T4n7p4O^b3IK8Y0QGuy8%;T1(auiQYgYi9Sm( zkKdE7%LzvQk#wO(1OOI5>A$(Ku&|qS?E_Gv2N3Td;1w4BnRFc@;Qs}EiM|6A^EQy8 z|07-RlJ^M08_55|hYtyq?h^Up&%nQ$TqSp{k)^^LWXP*%i`?}dg!*q5e(5cyzs>Y- zH{<V=(X0jscbY->oBm$m-$Wil0PDW)VOf4eeoTH;eq4@&PuSp-HuxJGeA)(|vB76; z@HrcN-UeT^!Iy0CWgC3O24A(o*KF{&HuyUm{JjnS!3JNq!9UvIJ{yeLV7CqKx4}Qz z-~k&vXoH7r@Xt2*7aM%T2H&*7w`}mQHu$y;zGH*$+TeRO_`VH(V1xf>gMYKZ4{h-O z+2BVu_=ydEYJ;EIV2=$l8~oe`zp%l7+TfQq_>~QQZG+#~;J<9}-!}Lk8~oM=zq7&r z+Tiy#c-RKJlsI^i4PI=6m)PJM8(eFH>um5+8@$X0*W2LbHh6^%UTK3@+2GYSc#RES zYl9nY@H!j3-Ue^5!A&-JqYd6<gPUz|iw)jvgSXh=tv2{;8@$a1Z&%2Rq}oBr(?kib zB~{WSLPu3fg_=TCXQeb-B3ehaG?eI5s-#k4JVT~Sqln{9K=cvk(n_gTBCcswQW;4~ zt(G!L@)n4hMpBZirEHSA8y+T;w8z0KC+XfQ$xkwN61;+yIkHkxbV9PuM#JRU^Qxq= zBxh`;l;?7hLD`VMu8_eaz&8{!WMZW>Ng_kXS4tBkGAzAX$|A$dtE3V#Vkg17S|h8f zq$y<7s%mLC$!)5VCX&(jL6-Ssj0Q;@3K@GZWST?V%d4abB=1bl^|*%srHJGQtE6$H zU|FS94TF0<UKJZZf4Y=GCfr5PruxJz!OWy*A*&QJ`8k3n(u<ylr_sbSr&8JglY)0L zPwqP#ZMFN?5fNIfLhg{XBo|0H6;kS`mWGkCaaB?wDIX2xpFl{(df+0DOlhc+JY=da zDqvbBBycI@q@jYq$>(tLrwoT^r;}9XS4rbZRZW%TCe^1@Nfl)J9^h&)nX#lwDj+p! zmC|&H1O^N2Q-=YOB!$czB%Wv83#<<!v*%Y!>Etwnzv4Lyrb}sL?(;w;m&|(sSQ<m- zy9NG&9N{nA2*F;ms2=adoqiV((aGZH2;QMvaw9}dC1(r~?4G%xT1q8nxvHfRWN8v- z=IoLxshFIz2hfL*Wf`J)!Dk@9kt8%mG=<s}j(V;{A0~@Tvylp#jeMA#j&>u_=DddX zHco;Ti#PAWCrfAqduTshEzi@CJW&%i=Y>UbgT02T1Ab>&X_kdCYJ<hNT)j(*QMMma z#lkZC6UxggsLcIh88BvY34vuH)h$I;771zYX;F=xAJWG~b@r1G7bu7t?1GRJMF^r! z_KOfVxe-lbmvD1Nk<@4kTTepVx<)jOT}46}?yP7AyN-l10mx)Gkx&*;&tkWdP&NSB z>{$}Z$&co+mq=((esmD~EeQ?Ij}B&kB%vXIFogYygoXkzl>LQ-hPjiX!`R0pG(0~# zoNbmvBitl9f?cG9Mo!eDBiXY`XjI-eaXQwinfeW^rq*_|{rdg6rWX!bS@jRCAN z>^U_wc3gBUdshv)^P_Gy8#UFRhKfW8R0USyzfj8JKLo9aqv=Rlb~w+0;4WEIVV8^+ z<{>h!1tlg#P%n{#;{xNP!n9HFu$H4(8ct%HxWRI^P7dY=@})v{nH(A(gHo)Qg&ul` za~x!G7b?BkDF+Ks!$_cjY|1bo(LFLg&Sbk~H`-Rxks*Ai51I@;D6@y4GGb5{4<k9l zD#*)7?o}DZGSMcJmF{&j-Rm;jCx^zzqT^W%(>bklpJKYtWHj8&4Ii25zBJQ)DYLKT z(8O4DBKro@C0XgNLc{3SD8Z4Dk&rIgO1DW7={6~-`DA1aUe#uWO9KPKjVKng)5O@R zpazr4vFK#BM~MZCB1I8T&>Qgvd~zYX7ef3If225A5-H&!_d`f&q%=|%ERU4)kO$0= zir|#U6dv-R88S6EEi#RVJOm*pMNW#G96Tj*3J-bM45{RrE--|fo==U}BbMt`1@+O) z<bu0qJ(^s<uCRU3^kUHPVwf)7O7|Y7`#?c`H8Z&stVs8<neJnS{T&)=44Ubum@ZQ# z0^z@y?ywS^?oM$R<ZU5tI(s^oUey3$7$97MoqPl32>FPhxux0DQ9vo%LP6v5>}Euf z+)~~n#61nEAWDwK-X27`kD`(HnOs6u<o>WZR6I=CqtJU|(0LxCTsqZE_YtQ1gsVe= zbVD#54js%)$0*lqF(Wc#uV}yjgsvBZp7#|E)&y!$fS(EpREM(y(p|*m_X7ud$O`Ea z74=XAW(On)U~AOaBoaQAtyN<aTf;NiIyL5YhG(%$)fi+v46AD}5V#Hqup89iY^aTN zcY`}^_H3-J;g~@c#BWQ;V28?f*csdogja=6V|M^y2{O9V%;+vNqq})VBdm-b!i*ll zjGEolJ;ustq*XDmVf^p71_B5kh53)cu~#+6UX|^K!6ycT&jHn}ii4=jAU9sKNZ=DS z=#IF7z-WsAGYK%2eF39Z3`VUlEdpO5fiVgYC;-fhH6XA?3(X164a}9IbJ#j9I1eqP zqk;6mJZRaMq8$EMsyLjdVb|1<@>(Ko(t2Q@NH(F)f=~upQjeicrO2XfZh1%GbOOWp zW-XM75#2muu@#ZYwjfD21!kYbiDavWidTBb<wV-9vD-B?q>-^4+QFR~YNXo4)%fhx zkW_F9Dnme<8-XP<YBta!+IDxtj=&kD^FSJEM7nPPy!$nG17dDNRQ3Q*wN)g^5DE?w z(K`>Y$F<;@ku$|0{RD@(s;9HqZ?xdj$kJ6A<*46C!)o7@F$Caed3b*KZ1x<7ChFm{ z($GNPOZ+jY!~zPc5!nhfUeki-M9zupOIj9Lwkl&Xp#DxnQ9NN;?hhOX>AkKY20+{x zbGH@@#sWc7$PQo~<~a<9^FI!#!#B8kgwTQ9uG)j}I|MK)u{jr&*o5ohU2P%KTj1SH z$lKuELgaVAyOk(c=so1ugkA;SZA5)SXK!h!3IRy5kF{WZq&_zjYvB_u*nm%g2FUwU zEwn6HJ-b?pE@S`DLgxth9M+=+8<E>UBOoz+fI{$xe`>KwauMM=M84Ew@Cz>Its)v& zPS{sku!%pN7ic2vYfUsH_Kg4*vwsQTe7C%v{o95E%~~P*4^aD0oSK_#MS|bP31R@y z{LZB5mbbD0nq(3F-l9f;-Zpl)*CVIjrN_9$`o+3kf=l!mDwXJ+=Ni3Fo@;eG&vm+; z=cRhDJTKGx<+<L>^9mhn6JJI>WmoCJb7!9`;VWfV>via$L}z3XcNep3bZq#M7U*Tb z8HQoq0#68H#Rgi{Lbg$_qo|@{Wn^XKC+s?Xk}`>&A+zgs$esXjgARlLVT3k89)UJU zaw8_WQBNSsZqgIzvdtzVY>RI4a<c&V3%kXJdEstFa<|6GnYH)pI7PGeZZnBujcqmQ zBD^hu^!7facK~T#ad+yWGlR9WYo+L!>@J=6-{mOd%DE3m+1(<niHBhs!soG_A`C+o zg%`1V?8n97#cUUU%n!G--6EnR(h=@tdvs{z@W>na{d#Dr$aN`uK<E8_IZD`Cxd3E9 zo4-CN!kT!Pnd@E=h9Q{iL-r%)`mipBm3H=sh*%X_1-U+oxxypQ^$9%~o*kC3m$N7J zI*rduzd_*a@CEEC0E*=Bh3shzk;ALmGXRKxqTP+J*TX-p(+wSgpIN}q5eWZ+Jqy_2 z#MpCsVvl`ZPwcTTm@S>XXg2e}FQMJMqQ~51l3Jt$ex($$SM^u|0g?6A1R{YhBBNT7 z{#e@t@m|OmA@Xlg?Z!Ag$>IEm0Yl(EuJI!T!{5c^5IW`nSWvGO^wr=6Q_Vgd2Sw5i z-t$C00Nx8kIVeWML*Ttg)HlF;iD++v_cGDn0`C=K{1v=ciQ{eXUL($Tbk?ooFo(VL zAlt8Z2QDF~V@{u>PEya1kr#H*>QtO5b||4IzoDZzc4Scur>0JLg>Ulr1R#vWB5tv% zpzE*r1~34t1{HL@jV}QMuu4$PRlSqFha&?xdY!@EhivN{bxz*#KhV2TYYOl8`-^B1 z@W%cR`it4gKh(Ps71IUQ5L(DSLP8%2LLUo4`c{+HCqV0yI4zYA9DlcIeadMewoR@F zi>2^lF|$}$rq2_Lfc$@<Ln>n{>N~4<u`iK{F9j1{C6?xE;Na^x2U?L19DHMQ@NcU$ zZX&Y(4-atJ0pB6z?*!%l_9@=?K>YhSalOa@;)iYG7a4Z(EOHlHVF_8RF(3<YFpIT@ z$O1+xE0=XfH~g$zj3Ni*a;Xu|Wxb#%64*p9PY6!PYl9K5-m46|dapJTTL|GT<eJ1V ztZJE8^+x1&qu};BBcZCV2R^Si?AlOpmazG}(dbjvHyM4ZdJ9tCA}HT%^see#fcPzO z;z|*=q+4y`w+&F$TL-A>?U==Ok;RVwRed|;a(g@%!e8heb}n}fT-A3ET-7^K?M%J` z>*1flpz{=0O!EgKJ!SNe*9m#bV9yxAf*9__afz2Cp_U~G>9#@~81kF}`-l7EkIx(3 zZt1>N8Dn9k^`a5V4i?4&g(RBIUNS;i!NP8Q$YL)W<`SN3&nb|p!+9HShW`XS6ddXy z`-t=>!3BCTA|Eu^pE09dmQt_oL>-x&CHo0k=1Wrc7pTFR>`lYn5Zm6pqw^5^EAYSH zL`E|E-O{}R^=*#&j<MfepMuZt8t(d;?0o~5BKu*54V#ieJgX?dT`aK4{%(W@kBbgw zpBllnB(N5T%70kJ`pgKeBVr%2j<6mq<apfZxbP?e6Mv0C6L6D*o2zem)gL0#x6p-+ z7@FGK3i(a6;xBQS@s~K*S_fB}it&?h-|;lo+Xe^jJJ{6@-0$RVC3~=Z_&#v&<Gygu zs*Iti#?2AB6#7o|Qo=SmLYE<U8A-bk)eee;OeA!g3G+6=bH-fMd-WEPZgQ|29l`Y^ zupWzglLIRTJ&|w++w3sY><C;=aO<%Jvx{MFH)C!w%nU7w-)2+U=74ILj4cpVeC*}L ze3wXj9X;edLiRe?BaT?!Z`Av+d8K3XdeqS!xq@^@u7p`)$DUPC2}Lrbo&c#|u~NSR zsXrv-6$g6_Qty`Uvo<K*Zh03b@u<|9dN->6_#>n_bNoR__Yom~bTpFOuB*rj8U3rt z3I+XZ$O?-7wPc0bNMb8U5BZEpe{`?|fZmJ^3HMfo2nVksk*mn1t1`wzDgO-75P;!< zs|ewA*<T#NjTj_XOM#7q6sC<J5_>aF$Yl{yBFf%X84^UkBgh1=gFsG8A%W{i0?GFr zX=#$Q&(rNWTN;08yl27+GQv>Uhe%Ww{qQ4zMW(z|>|>J)Mewj0P(H_Ot|7CpArdb! z`vTL`$R@)6=`fF;ZX}T#2|ptGG9LMrBX|>u!2iu8xP?Tvi1@FO+O=f%wLlH)jeUa& z)Zono{zu^dEo3%q-@>;N_AgE<_-ng(vwuyHIW=$_u8h8QoJwworOWTh_2dSkZY2^0 z9=8#ROp>+}Nx7OxJBTD-MWow_q(X*X)#-4)hMVy&Cv*y-1GS*{+Np=Ek)<vt?EYo4 z2E28$yw-_JDdjToE|uvP@Gg_pTb%4-XYdXJ15e-%<YtXC7FpDJkgWxOF$^b{IfHkS zz@0=w&8X|0!2(#d7ZB8$*h8+6wJU(km9l=NlU?C-6P(hn<i3&S5uM7o24*p59W8Qh z$7Rs9&N|+oaI6C4jra(CYWw~jI0fF|jMeF3=uVpeFv6EXzj9(HEOKF*?mB(@w(WQn z0Bf;Ztq4fHzs|5CG<F*#Rbc_Y6?_dA?K^<y;9Vqg7vV>)sK@tqXH0~^Qu_`RZTI1c z$@x&B_h5w{a7zdIs&luK?REz5CXu@dboP6l!JQ<s6UN;sShQ<pa=(+^Zw8{)(R&DK zKgb?%cDoN}qNdXaoxws8>z29$yNC=k1JHTciN{WUMRhnI#F6bK$kQ!#9E9H?w^UDY zV31yN;uJw%apDvqzv{$pul&}@UV+zg1?f1*UIpMv(s79W*2zcV;GD>uZSC-m{@_H5 zrZ~vqbQauA>S!#mn?Of71$g?S6Ax@QW#j@JbBYsf*6j@KA;Eh|<X#fpL)d<2C}&(W zhaGeV?<1HU<`lROTgRWVwu%W1${E1<yG|UBfZKPS?0t+Wv0^^4Vm@)QPcfzxPlG2y z%s;J|e>&M$nD4|}<yho?vUTEZ^43`70kRcY_!`rc;oyG_w)5|;MBh7Emn%3qG8sL7 zfXps(@iXKHk-bYq9C*Axvo$V$n#|+Yi8%21p)$MF#m|*_+<FnWUc^<f%U%40na5oz z;;s~NQ`rU=KWpZ3SBp6C_>nWa#>G#adE7=3w^77Zvg=&@{F%qy;KFybiEBr^(Ph4c zn_ObHz1fAevV+$OECYL2%q=dcm~yO4JP^FyW!B5>E_SCYxR(U|qU5vvB(N7oK6V%4 zS16jp`4+ad`(4=94&nj?Qr+*uW<?%!u?JlVjp!iT>k1AXUr!@LudPSbvTAs!p&FDu zEZB}uRgbuW50UQR(8$ohL)gIZFzhi`Xb6Txhp@-ZlBF#}9hW?9#zO2m`-uFai#_EM z2Zq>Ho^^!=jf)Oq&tchv50l8lyd}QqayKBc?d&C2a9Cs*>bBp8i=0<n&@}hE8$_#o z4GTF%fhE>WSjg8!A#=MPA)=hGi*oLBv3+Ja*OACNf+g*CnY{(ivJ1OW$tf%ds*uZF zviv6(`;#m92*Kd)ZEiCA5h5d1cEGhi_$Z0M|Hnx1aT0l4%nAox`vXtFtj`w#Z@3^P z@Hj34-a-ba;vyh`9}Zl&_r01N<jlPX%sn8J4_xd6SMX{Qd=k3bZ%E)tLLyI*z|}Ab z0w(*L3nsK~KAW)*k=it?t9@j(fsb75?-+BEOo%a^fA5<be2D}nMJ9QIFO$g2!~^sr zSA+KoiM#^dt0eL&c-4_=?pU^uqc4)U&am%tY*mZG5S{6BDT~JTqO)6DS6IffOwD16 zrIEwZ&~Y=#vu)Z<?v;K@V)`FrF~0if$`(c5%X;NKH8JnW;db+~a*D9SH8b2kw{=xx z1J`%pJ1+ivRfZ|8pJ0O3wEcvd6Ky$iTWX!6NmjMLq`bbUX72nmYG!zjkB5YuP?-nC zd!AV+Dzdt_hQoH#sN+u|F_+5-w6(5q#h(_prXVbYGcYR2eq7vYN+V_VsX@2DtaR{^ z*gUrQ#Ka?(aPb9=jV(33EVB)<k*D;IIjXHoQ-I3Z+Sat3OFx}ugG*^k;{|7__<R<* z5FeKEhoxk-j($_iS;;(k!+h~1q)E-VrM=>onlh%Q>I%K1HPCcnV?!F^nm3z;iP4n_ z59tZ9rpeQliBD<=)`QD5Scb6C(8+}WThi;pD?2*d8W*)TH}fL5Cs>PiESf)O4mTE^ zz9JrYBz+5pKwh%gG@FTyZ~XDKJ$|p9t6dSIiDwCKsS~QwtTG#1dPK9AS?!(eE7A02 zoXw_|<y=@-3D>nB-LNe;A?ix7|7w}4b)di&VAVG!wKO(1EN-0>UftT+k=fSR-npW& zS62SxD{X5Fe+5Dvs8Qc3WG_wo&CYOVhna;|%bSS<FicseTG2L~CWV@o25voceoNdO zrRRiLfCK{xw<Mu}Lwi&ZJ<cI4F-dBl5kupzwmr4Cn%j0AS`<ny8R%mdP~hD;P@Mx1 zYivkIqnQ|tqX@5}jKmPLN=$j^>f>x^ri8~p<Ju`FMxq~gl|MYaD9hmXj@Fg4R;*}j zXaWS}F1(!g(G%pXUsp9%JRMbnrTXZ)ZU>qNm-QLNEuFWjx5QssLH*v63R=R&9Q@vL zl#VFzl~7-quN<6mw36s6MhlJ=)K^hb4v!Tcl#M9!(~=6G7tqVO+=Sng+^fT=UXQo5 z7}9vW)K^{%B)k<RaV10kiei+rC@c3+U#Z6jPAN)2l>2FMskazqF;EJ{Q%wCnUwKku z0Wt@eEBZ=Ar1XwPm2}=rF8843q~&C)qjGWw<r<^8dBib8#}0K5b>*C9%+FawlZc|} zhQo;(cT=52F$9!O^fS0Hgn^pqP<=1g<4aRft*@HFRrzuazGSea(|4Gz3`e_(itZRm z9C;*B?!hshpv6Qo(J_gj#Y9r%@DL#Y;qU`ctUF3{QtBuJv~ouUgiO($Q*~vUuAHQ+ zCv%aAN=FrhSL@1jJ#DtG%+Zy(juHr&H%xXcAbJKGOiV>l2*+8(v6MK@CXQtg9ZU^5 z&gJF@^?Edys6=(8Nhjy&<a{m|(Ix~St`tHI`i;b~i72{y6VcN)6WDR8uw10hE}gg> z*<DGJYlcKz^o*_=aBI72Bv+jzxmHNT?QVfEx4RW%CjX?1rySWXcdY8XfV&rRcQto^ z%H5xF_vhUG1$TeR-CuFHi*WBE;ax1eON6&Zcx#2XPI#9IZ@us?7v2@Z+aSEFgm<;@ zt`Xj~!rLgk>x6f`@NN*^7D5&-ayTV2{In{(uT@Yfxg{c}a!(0_C5_NIRg#0KLwJxj zoO}8h?iop_OW84sKRCy6&ow<PsU#_lKO}pqBqvEp=MSm#!xANF!}vq`VD4q8VM!*L zlPaYJ63I%gl5~=t!((y=ac|H_?hPKzy&)Og8>#@l%SDFC;5(gUxI{>R%tOV^#6=e3 zUBwYeKv&aKdfipz`k7_j827oxsxU^EssOx*gyj6F%+{g#xTwOW?~BbMY{sel+M;d* z0Oez@W;sdvn6ST-eX$x9HaGu(?GL|O5ixdIhZq>*h&Uq7U3{CydVpj;ko<zHPu76i zK^@3_gE#yBP4?9!!ItY=5=;&x1MpuG<kuGiDe(hH2;f%Xct8s7WWPrwG-lBYDI=1B z0U75*o?YDN7&m0LRt}|x(%sVd1JU%DL87T_og7NTBkM?3G>u&<hcfs>b~GbxBHE!q zBXuG+m2E)Nb0RjKT?Oev8JtoEQc6opA`%*{J2J=on0pg)VCD#E(>NDtc+X|Ce6)g~ z1(%zF0gFK^-*onCJ5PQpu`Pk;G_<t0Lyq&njceS6MTP`!lBG+~d^*z<@JJ_Az&$n( zoYtO%B6C{z$#I@It-V-dkf0x}3^bPqnG}&EZp93kD#H4HoSXGCL!SUnAT*6V$u0bu zp}&Dli?C!*$(WTH`ZVNJgx8&(lS4UX`EuCva%hmr;2`#b92y)N!XJl1{S3kS8O&ak zL&HMDdFTiT9gd;H*eh6&k&%&D5VXqmnj9L%adO@Aj_4>nwq~zm7~tT!+xF-vwhz;c zj*Pa_bjzVJJk3~4Glr)*gkgY#2PE60W7r!=!;Lo--6W7l0&arWU=hiUcb(#aW7xZL zXdI`OA03C*_EONo4P><`BNgbrFJqkGFr3RikV6Ihp)gv2miJQ7<VPI&Z#MGS@L2Yd z92y^-u#YPxhiX29zXGh<Gx$}~zyul{&;BmsaRWD=_YaYLa%6I(DCmiJ@&jI_5bvE@ zp*}mb#}4(|p`UXDfGW(lTNLQtU(1Py-94m6`daRR5o)8-Lr#^i19zr!1Guy3CWT$B z1dAiZffDH3YZW}X!($$(E&f`ezRIw^wgt*bk(@FbZOSO{&WA*X^hLpB+qOoBu*(G% zJcJS`BL<*yr2=hacw~5A6ifzGhO?^`jEK3VNJTgcFVpfT0#Dg!dJx00o$Tm5$gWd( z1U3OY@w$OuQ0?B1$MBoDIlcYc@f`dnB{Udg>gYD)e=D@r%}Qt(BGjqdkeRK}P;W*o zHx?$|RtB?M5YLUg#RG@2+c;0Wwjd%fMJ{BwE8O1J)X3DXY2(5tu{%ZGo(y$+m%^<n zQr*}k!z<dYh*yL!XSc#0P!ihTOgvLNlk8R4UPZJ(DCEN;H^2$!qisSAKgIeKE1n{i z`MZSSrl)v(cesi@qa?IdPWT-8IfXqZ2#kg5dO;8doG>?5cvQkK^Z5PYYWA7})6jI7 zhJL4r@&;!JKQd!g2HLg!gWazFD6)Xp1+Q|Scz~A$Z!#txusK2f^E&Ld>+Db5Y9l4O zaV}KZU+^~YTS~m!ysh-@HZ{-{-ckB?8w`C{>Dz5E^nGPtO#t%wfZIZ(@NRZf$mla} z3-Qzg`3Lji{WM5l!2GEMXGUg182eI*t;&$l;9Z1#4Si_2{EfoCR`ORJWZ!^$i2YlM zMP^ML3GH!qWcHBxXk1f)86rMsz(ga4)6O&%KnU%Gar!$2CW-j80ab4j5l9e>)5U+4 zagae5#kjnL3@)ZHZNw)MD}!v27D78=aKD7Y%n_eU%nb6Z3?LZikTn!DxRmba7DF$i zr?Sg=W*#%MM(nvXu{3xYbOQ~ZCfaG>G}4)d>yE3aRj{jRV!?12zXs4vqH+9dsa3{} zz`{Xx1JBl<knN4V%81$CM1ylgD-O&t$!w-pakum;E@pc(pqoVF__t82<hSx{x6*E2 z@@-J^9h`+`lLa(!c{>d$W*97~?&PK_DJ-e-q0Q{#m%eMHU6k#iF;N?Q804=S#=RXo zQ1rk;-)o}prR-r7eQX>(+d_BZ@^2-eKS#y#?>TM_64rRUA!p$iy5G@|JT5A8Q?h@E z$NBh*FclYUug3$6pc4-Vw0%^VJH;A^(O6(E+9jf54SE1e<&p`}ChhY;&c5L3Xcxp2 zTpU^K2`-5&@dOt|7I8-$f=3qumN)^wM2??;qn4kx*5>x2>duai)|Lg)aJzNpEe#*U z&zS_mlmvtyai~pE=dwgm;S0sXJKDOcu}xmGK<->weAMG^i;t-Ze89$j>=9T@EYI<r zF%%#5jKRubS?|pGsX~Rvqg0gnxkVkXr?}LWz>zDF3vqa!RC8f{b7w;%Kd4Yjy&lap zp)-gZ&~casbQFWDAV@(a1IiG`V4|Rv8%av$)^4;^IV~eSle<~m&E{^-P>K7)U`OM^ zZL37(fUN4U-%$dJ>L3L7KPv2hWE!BV3x&2|_cH_S#Hb2vgcMrT&t}bNVY8-(81lG~ zGSLx*!PKct2+@hIC>4@iR89FjiKRnBOtLIs$<Q>FVLT)&XyES0gATOCs0Lx8A>Kgy zTD`)L2=*Z_Z;3Kmyc%rVQ0k5HW7M9D!(eQYcs6|ctQj>@8b6^z4HWY`JKCEX8Z!mb znKNr@=2%$b#QDr<V`H<4RdPIbv3fHO?dM1qr?lqQ`f&4E!dsf$2B95|4Wj+%^&M@^ zr!}tD!p$Av8ST-g2m;PJ-qetDwV|=OBb<Mv8tYTXeT-F^hx@(t^7dD^ff~<JdK0og z`;0td)<4MBRmt(#y6RWC+(v}Iq8xR?6qobEKVixWI;=0@LxR~al`?OcVRpr#IU{p& zu{)|m6T0IdUEwEPlpk}U-6~<yN|?7w)s?uxt4w}4maS`}b)`_(COAeAU71L+=el6^ zuWFjE!k>|I85*^6LMK#`lAPurQTXv&T6#uiR<@Kqig$Q*j662aJ&wEi+%4elc<xRj zjzJC`I${nUk|>e_ot~PVo|>JWVyB0k95c981i(|ZynX_j3+=v+haA}1v4<xmX?n}& zPIeCway|E;$tZ$uvW#wuf^I5BH%&!1T|+lRM>o?zH_L%;w(}kWgdQUM;1}!OkDub} zH1;sTyOaDPr)!prJ%XnoauSSUHGupa9)i3;f(~@hVw5Z5!mHRQ%!wE9*^4A@R|>6q z!b*X?MEE)~E0Q(a;hM?CMv00B`J5~}I2hNl9u&Fp;PRF`e3FbhAYKejZ>kA%WLsm= ztVNA0@e@^>H9M9{laDcBwKYzSr-BCQHNV<Si3b+-3z<@HDX!uA>8<ZPadkG6j*muX z3s<|#)e`a#94C;@GMP|(TuFrXKCajdbM&7`qK?KD2|D19E5C+tM|eS7>#C*(Q9~!5 zs9mVfK4zk}#`@Lu&2dGPiRJ=+P<m5?^)b_N4P`JM$E)-Qq=LL0@rI-WC!KBWjitv! z$JX>@1(hF9vc?M`4^wMrbyExK@oOK}KVck7?-zH}31IRu7H4gZ%Mv>pANjo=pEtG7 zOQ0pC<)z8J>WY@Y+KrZaic4Gx&64^m%Dh6MCt4ILg@j&j)<C6%$;InUN^D`M)XJ05 zzanXAnWrKtvBOZGznE*|f`wyoxyKPNgHlpnL33yhF^0mhm5%zTWL=k?x}2=b>D+c= zuC9#Hl{{U^*Ol=wx!@-i#iNsAM=?pWi~&iq2A=HbG9(!`n-sPoGzCIvDuk$M0I3-m zmx)+eU52a>bx>D!j-(8R0d5F41C%mM9zJr!DDIBt?pW@+xjT-#1>7y<?gZ{m;%*Ul zz1;P2*U#M&k}9cEO0tF)ek2_=6%cL<NanVE6bD-Mq0VZYq;%Bkpt-7~WTGdbY6By= zN=hP*lxm3*XA)|Ha5<+-3Vx^|sU#Jrw`APkC<;y@skY^x^k5oV{z)|l_-D-l9#@B* z@V1J$Uhbmlt<9)g8QPyU&=*OU5omxjTI)Mk;8G(u+|rPHdSeH+A!va0(J(HUmd#zA z8%J5z-d4YiuX14Z)DdZITd{0qTkCoJJEfK1vW~XSmh(AgnCI7C-`2FU!#_2Sz!{oq zGXzchWGhl=5uaj579BAr0i;dPxTpRQ8sUZp>=^M?q8PI)eh4Y9shLkP(|%BLF|f7& zpkg$&*Q{9CvHAyP+=NTuj@Gu6-YCW_GknSqA==#7vb-Z|8G+<lSx@>QbYP;u_fysJ zgIb8VXff-DHja)~uEJX=@*Z+TJl(AQqmK3ezxK6dz5Cj-UVTj%ne%$fHSv-FE-w~( z#;Fe`48v*=5K-dM%^m_#9*@(mQ0nuQdL8lC1CQQf-K;P)8CPLg4H{CG`J4%z)m!29 zz$B29Y~;v9&d^~wEX=~mDO@LEHs6!LK4g@xz)oYVH6Ik}$^>1W<e0?AM7+HS!>p`! zQEnEF$WDNWIUlI0XcR7^D;>f!AzaJiqrP*nJY?9=;oKd`-CXXD;jWvz<G5SE-SOO= z$lb|k-c15Ft6&tD4E$6}991wv%g!notrZx{WkQqq$KquCn5?DX$6r0Q3PyCa=jsyn z+Z^^N?y^Vme9L~Dn~&n1y^pf^il@D(y7j^tO>Mo0@xepQgBgJ{B@yRG93nVp&R;a^ z?D_K+SIv=}(bl%6pJEox22fl)YkJijV^t%pHeerLcFf}~!PwM9#-JJIADQi5<vgBK zuCimEa*14)_2I!>QF%(J*IVMly>xOfu9A8&Vs5BQOT5<ERu(_oG7>h^NjgOf(2i{D zV9Uk#xinc$NlQ)VZU%QVxjP7UtKvZG$a`B@EX?37hM!}(`|WLW?Y(WDy|opGS5AI- z<?MHO<z$&b9o02>(80qiHNHdKVDAv)ONZ9BB>-AYZc+x+QhXE?aX;olaM4klP<*){ zGQ!u^wj6fXXm*3Nk>#XL+&5g&)S|2iUpTfuZ$;sT^E%r*s=3XWmd5sWZXnE@oZQEO z@1u~T7agD6=9QOw<vOq2=98EE<T~HT0SEx*+|K5Xrj^aBhYt`PhmNOl7ag^6#|L=3 zcFa3r>HSOLEAbV(5_qHjk_vxXzuNJZRFoPP+YXyq>qM!<r<pgf3V8=e;T<4;WF*du zM%W`ag_ZmS$9SUQ%^_J;wbU-%KtDtH>aea%7@vnr7_TN+Ja;G9Ixi5G&50|?p-L3B zL<NYBH(rc|Xjt2^P{olL&6UGypSbvOkjA@A|2r^LQ|M;$xyFi6!qfUntxHAFi3m6j z*^6hvz8>PDe&)rm75Iy})9%bWOz!U93T{A=-BN(corjpuMlc3IsHe;y#~2`5WhMLF zX?N67w{geLI&~+i3sZo@tMEJR%-$T%L=I;nhqIBx(~!eCY+kop%EIqP^J6pFLU>5R z3nr(#8@jim`1?V&IL`WZ;CD%!PyUVijF<(hY3m`~+1(=1IaVS_vdl_?34$>JsjPNC zK>N3KZ{G?y=hjhps-yf7(86^pKC9wcW%XDA`$f?Ky#XJ25_|^yMjoJA0V<33trkUb zDD)wGaTnUv5|^dxA(_&JJtT{OlP&+WhvX<f>mh^a&wI#V^_M+li1w=<GF0y(?57DO z`&nYiejYE`FS{+2dX4?6JC38XF48SPgI!Ga*J<0~X$LUME`hSw>EaPsW^17Abq0S% z=BXHxHMW|6*fNJ?)f$pDmK99K<3A5NI3&B`AGS6mt_G}iRC`e)>Pk=C+MUtVcmY?S zZjIDgg?v7XCz&jgOc@}_j~T!N$5;cz^Is<NpE^MPFmmZDVDt$uZ#?O^nI5R@$1|n| zj<I0q%kZ*+8McPn>;W0h93YV}LlPfJi@nxJn#xB~osXmro#GhkNF%y}dhKw5ARApe zA3mM3D>*5JyO}V!Ir!=UR|_(~{s#jd4t)ey3((vKxc;YVInc1ii0gl20Ce-~etG8l zfR5&kF*B%&^#T9*3JxA5N0oS!T$0^S+KAug<t-2G2Omy#J~l|gks3|?E~&I^{tEwJ zzq*&CC5VOav_GN=CW((YoJ_mHV^@Wnh3$kS>k(}zpy?24((y<jP36SkEelZ&bGIa; zoK9zZ^w=UYYCq#>2}T@xe=F*5(V@R-O@6#51cBm~*D_YNHLhxE?Q9qKv@y&Px6d}Z zZ}r+&@f#X=06(lq5av*MsMxKO7Sg1(qtzNNFTrDuF0CWl^wC8=)V9X<#*T4E<V@@@ zc~})c=1=YwQqV79g7ipYVj;@aOL|0aZRTc^oDHqB%=X|~G7F7hw6@^)R`cjKxtU{| zk}fX5YQn0W*Lp!(C$HqHNQe0j^Nv`I#5ZX)TlP!%n>hnNTNsTk4Fa%af;3pY23EEk zuz;P>2rTHe4Xvj)HlFXSZE9Zt&oH1lA!reltF65;sk0q;_(>;Enr)g#s|mLQmSq=G zH*F^;*W!oHXk(ZcJ{f8YH*P%hc5$%b2%|f<wSluGM3t--lGCq<+%=cZlaBg267$6a z|6^mDrE5t1C}Dr+InK1uzEZ@SvZ}&`mg!8mf2RO^4w$d2J#JZZY(Lb-UNy`=N5sDf zJB2I*|6siM%$k~cwKel*q(VWai<5C)<GpRqB*+vcS!0d6*jGNJf5zr}adw#ajSbeZ zKGv>v`p)wZ&5UQ@5{#U_xN6bjBmpm3Fr#X5O>gmz{G(QGLU(Cv?C5N3;f-eEQPcD( zHt8UBq@FbJeVV*rmIBo{`G}ooz~-Ek*qR*m&8_w4Ba}VB>ufxqqBFQ(RGVlb{oC}) zF!U$gj2<*VIutuQ>Uv_*af$L+FIk+xl~s6M2}2f|T=7Dvx19P)i_r*51vox$1uZV| z_{>EOzm4OsC@E1n&uDR`qJ&m>(O8VfTUJ3UO1vdWiTwe>%SwH;+~Y5y<=*mATJHCj zYobVyyris@R(MKF)B1J;lnW~MQ#5=-%S$TC!10yRvWikKEiWyHFkdm|SzcC>(z{!z zUVkwfW-0agJ+!>Iv>2_=lowOL1R@n)KX6c9!42M^ftw0&i#-+PXky0agJh+i3Y1$a z13aMKR~(4?{C=OXd*U?Gax!wVaz+gr#if774b3+Sa{M`GsLQB96e0QJA~IfiMHp67 z3r#C1;>1xlaH$2GR>H-9)O20T#E(!U$G#Myaw{nEa9tUx>$y604<qJ5B$=qoMY`<O zQ+&Ey%q^XiqKy-BvQAK@M<-P}sYZJzX!~S_PHNEV2{~0)%F!SSnS$m|$Si)cc^cY2 zAq#b~NLLo?sb}iSS-QMbSLW-=*^YByMOddR^^OMFkqmINuB_m;Pug{5l`j86SJntq zC-O>Nz7oJ|;ded!ZY8?5n>cb6*jqa#l9fH8D~V(c8Q(P;;7JI(%DN`2lFtW~I{Pxb zMWK{eOqn`O^3Rc^;<=EdctO{EIjgMf^sa@ANLJaBuK7|{5aJpo;`1->s-=GXYwe0Q zop(OT^0#%Zl(ITt+tCTX3na{T{Dt!BpZ)ab-2EkYf5qJ{!o7=xcd_s;5#CzitrOm5 z!doxA%Y}D^@HPnVD&bu%ylaHFQFzx0?*`#*65fr%yGeMPg||g`Hw*6;;r&{8w+U~n z@U{tWyYO}h?{?wcA-p?<cbD+)7T!+b-6OnR!rMbg_I!s!QgdfjN$JFqUnvzkoy0kt ze*-M2l>CZ9l1{6ZbdqdTN<$=)G7(TDk~$VVmy4v$sgg2C`s7N<Cy|V~cmRz8MevZ7 zS1FZABs&9$NF-;NpggFAhYlVi9*3MZT{6hfdDA5)88)s;N+H8DIsOPwmE<BLOF8za zB2F>aEfS3`1Qe=}F@Y*6jf@?R-!9$bMO<D@m6S@xO~G%Q`J(}kXrw@L&`Rn|N+Qy! zcv3@@O2scLT*>+bi6~w?xS?vL>Q^+PCNI<|Bnpt3u&2?7;sK9AGD$Y>YznjZ&Sq-A zbI|D_`3xy6_Yh5<8B*NNumT$#Wp0S(hG`EmXfVWgG+~vW04Y?xfqd>_QE{;~%Fc`7 z@k2xp8?2e1)C3%)khS2}XH$k(lGw@+4LVV>XttAtDf<b=;FTS5VJDCx7qT`C3#3Yg zT&e6T>xr!nrlDSnKpMXs&3+1;qzBTau*!ZOi($<8gW-&BLk?%MU*I;3>QsFVxx1Kf z{TOcPP;OT?>YEuYT?~aCL)L>kR=%9DHN@omeoKp3%q{KV%FfwZaw@x&h=VB-$U*HX zL?E{xWS5gz`ymuWa`ccq<x0Y?B>NgAenb-)R7Eg5wt>{q@%3uNc&=W<`%GcO&<qul z?tixZ(Ejf1=MNud*AP5>LUE;y#HwL-9pPmk3}wH8OMb~RRYyR9wwQ8cTL`;_1c$~V zMqnsZ^R0+PvDoipv9|+O{=ovSV+VdJ7GCQilcnuY>>_eIxE}dVtO#W%Rs`Ke*zE+b zz~9LgfOH;WcM-dicUq-}BJF}Awb!d@3wXhk)IEglu?k+NnkCoRy`)ZCg{qU-{Q%{M zhp`914-AI_?FAq*jH_vTh~TAdAgMkFH0xBiH27|)lE+CmS8@C#L4EO&k%3W=>}e7U z<bwYU;c^(7sy!q_Q9t7qQZ9W4<)|R&PLa`_s-QcKeunjNgB%)`j}jkpXmk;Yj%GXM z(3t$_7<R8Lbm;Gug%17a<xn1qXhieaJ8~#LKbp@zlS2i0j}3|zpnm>Bw-ha8o0QP_ z{OEZ01wobjUy|4+-dw(d=JE~c4o-+n*vs!`|BHksj*CuY{~`Ng(MjxEvadTjnSDq0 z?T;3r99~)-g(khpQpr+B-G_H=5^{fs$-X)Yd0rv|mf8zT6<An7YoI)Ns1b7qlxdv| z1f(nszf=x-0v_l_c)@(Vj5pf$1-#HsF6UbM2~o9FsFw98ka2|)EQ}PQI({p7D+X^@ zOl|uHo_Gv_;JdlD_xaM@3cE)U+V*$hrxJ&(s9GK%JkJppO3%Z<v4}jcu$Pp5v2Y1$ zo$n5pvR4q<X;J&wq$YI7=f$ALx$bxuQd^5J?F%l&QGOt|%Xbjl?w3GzKKV*vUn;?J zRA>~bm|ac)fqkU}r*IjWDFkrYH%hEKJeB=h2~LXzra`H{<pNE)nJ5GB9l+gzQX=Z+ zdoGRA9XJWFx+qt+ZJ1r^BD}+#BttuU9NXEY6uQ)bf`h;fj3wo$!?hfblta>b%GT5T zRR>VQAp?64su-uJJKY*lP(o={#-}K}Q%i1vQRrOxHj1(ffQ;7>w{;$5x6)8yH?*y- zG&rT37vvDzPP?&KTpy!u(t$Uh$we8&8)kRVajOobU52zLEB8~jlLqr6`I|B(U`Uwm zf*woF>N=TMSG~%1)8I5{R9H28XefUiwDJcmq*DYEWe?Iix*w|XAw;Ge`4NgbrbInH z3h@3wiCK@2Q>@4Rfl9#o4HbRsX^P6fk_}bWzQy<XBE|PP0S9BD`>R%Zk+PR577^Ml zw)$5oYPy<<W<Q|u@v;8*JU+Iq^8kCDqV!$HuOu$JvkxeYkz?SFRk|tLN6(OeIEzs( zDpA#bh;>7EfFUdGWN4%8Pqe#^2J^s=AwnIE3}Od(b_iNQ+t@*#Um%Z$2LXXP`Ycd@ zipYKv#-%^g?wM(*68$Zt^p>E+{z`*>q!aL?PAUiiU>keeq62l1qCy>1Llyjui-AO? zzX8`x1l{vwbkA4*M%hPnKkCS?j#T3>GCfvDcNEFnwg+aQZmjLys3bB~f!;9<D1A;* z{H%wpls<>_KOtXJ_BC%$(3JiS?XVjf;deBY*&W*!&1B!hD;Wo`<S@4BGzI$k9H6ll zmGocAwfu7>hwDv4BA2Vd8e|^Fg>8Wvc%@gUq4D@eHbuwt*L^i$awYSCeJ!pB((&4G zCeYl3G;dNvWAkBD-HcHgnB6H5bsI))GmVz)P(zu#`C}fy;qBa30GFY?Qw;_JDAjeB z$<IzClW85Tx>#v&LC_cRc~DUvclgn2HpGad)j#U}#aPZby&nAL>TvvM|D2pe5fMB7 z$DHH)k55#^&I~rQ8S#hsm+~PAoK0@$(Wd^2`1JutgM~bL;9?|{SR4VlkAN2^6u;qX z?v)+2E1Fuknvk(aNNUCN+q&XN%ZZ7EZV>m8Qwaodl^J%woo$U{k67d>@s!CXZUfIW z#d;FN3XYJQZ6VmiSI%!-ZJgG)x~?_c)?k>Y%T4l<1<vNCmPV0~OC#wEs!pw`h47W( z<z~2p2VrDNQ+qrQAm%+%SrZO*dZ&o1|G-b_M?D+yAD;+PuSR8kSfM4Twxq;gR^f<O zJ1y~)`VH&d(c<z_k84&-`%0)K6f$u&wybJuYi+?xRI~*JBZ^B)%M+!SoOV`@IAk7Q z_dRdubxz;gQvI<+NseH-RXcqp-du2^V21#$qvyoqXk!*|8-UtNNvM~VEz2`!h|{sf zZB5IUo9ED)Xm2@YlzD~MQnjPCw|2JGH>L=r1+DG;^|%@u+dG<C_yMwRif+*scro;R zNN!kagH&#GKBbLc;I+;Hxp<F;H`2l#6i?ywrWUBGrVhEK)g@5*8MY9C$&Me9P8KEM zq10dQ^(OIiod1ux?*NbMs`7vLzWe4*pV3Gf6<fA!%PO{PPf@iUTehrmiF--IBQqmu zED_ssB)I_#B8`xckc1>aAYhYF6Kd!SOIvoSi$@|cSvoAsE@l0)^lkp1bMAXn)U0g2 z@4q<Fo%?P%_uTUCyXBnUafXe`aCl)Q3%7;Wg|7*3hRxn`x(Aa|xTJ7f=4yEmZPoHp zX_QMrR%#s!q^Oa6kra!isFi$)6iX#vCdG0o>ZOEatEGrYXS>up5P(H=O4nNHUN7An zq<f=ucS+AC>FIXjy&6jDz(nsG_i9d<#hqmk2wUy)aNT${#s?aB<BF!0<TjJLirh8i zMq@1ALcZ25OzTO&E_WN>e(jDOJNd5N?mc_OuKfoN?F${ePWi3}-wk}%{;fAso|{<p z0@QOc$`EgaRUm)}uS7d_dR1D}nGk&%t~=?P&q3FGl2yZI*lFY2IAKrh@y>AD$GpD9 z&pT)z2|u^fg8#MbBJGECLzs7wMhfFzUkSt)?apx9#vp$HBHo3nD(_*a>85V7Rq#hJ z_-TfSA7r2lf}0@t^BDX^cCp6|U%@Z4UJvFQgcTI)^^)~6ulW^5=C+{R`|vtHO9fYJ zS!Pbch8FhI8GjkVD?G!Jfx0V+0DQ!sW%b+4=d9Qu#eNTC8O44dV}E4DmQd_ZSTY28 zLlFB@jQzP4TS~FNz*t7H|AMguYf`4{dNJm?mKy9-av^TvB8UnRLEZfb+K`GM;6nsg zvk_c;MDWueK^=T@Y-~o<yQ$9Im(~VyAN5gur$*OwA2>j7*Or04V<~kDl+z3BtAV#h zrCU2gx)<|}UpwbFUX{6ShB9GRc8(6<efIE(gEY=Y-CKs}%bOZGS9r}Cw3F>0$aJHw zftP4mS8A?Y%}U{eJ++kRob{fm&Frr|<-$pi4YSiORKFb=f=TYh-&yA2(PSot)jH?G zkMc0if`03=BB3Jc=jQ&XRbO@QhM%P4s!c|H2hNR-4IH<c$a!MmjJh5iKBn#o-6I1> z@eVOHHlU9lAH~aAK6>0~6Li`w86F!xxfAMftcc#Ib$4Bsr$VW_Q&7JJCx*v{GUrqP z!Ln^XVJntgr9O74wCYl;G^LB^Cuw4e+cY*d;^{*XGPS_+;@uEE!m#t~-gEHCrX$^Z zcJA39o4c&Sm55z#<J?*DOo)-;;js<#FF>I-?!{h)CK)=hAF_v2{r!~b;BY>oE}FY8 zH2N^W0wyh98x*e_*vZfUii@i!Yvcq^4EGOg>hH(<YNBkfuU-JxGcnjQcXs>Et+>DD zT+XeXb2+EVIz03IVXx|>bs;8NT4HT;uiaW(+B?f;s+bXNiM7T=ds|0q*-YI<w@wk! z7K=sP`PxBfYfBtemO4add$iq%wzkJR1*|V4C~Y8GqR|#38f|Thmd;RxqQ&6!o2j<e z&Vag^3j1J9!zz5$th&59?5qecf_2SHbtf|vA{`UW76hH{lH4POR~mk41f`>F0h30h zH0b8ZSRjosYUFwsOQS*ZM#-C`u|o2dk~d3ZwPaCg#HG<9jYes#m2$oGZIE)Kl<TDI zl5&$YHcP%k^1YHDkj8b=I4s2x=})<ipxzWp4#@!8`<CEYI9|dlq_%3jq!xc$$4l0* z3fVSZqWL>Ct-{c_-@mB))^+P4bPI$+_FxZBY}>k>+-rBTUAxJ*hunSS?kD#kxrfNT zp4=PAy^-9T$bAX9NpgG1O|zyIE?D#U>bkT5EPZ@k+Co?c>B~{JUX-A;y-|;n_YRMW zkqs!B?{s!)evP>nplH6k5^qC1ybE;&yrN5MWIFSOP$J(?t0|HoWp37lR|^5pEJ9NP z7GE3SQ+|^Ynz{+R!@WGI*YD8TAUDtUiaKpjn1^w7)oU3cJ%Yyr*^3Pchu&nql!U8< z;rK1CcAkUP&XQZ7U2^NC%dA9u4i$>o_fVmjf1jB@W_W~mI<y05{4=ar;NfFA81G+D zWH#eMec`9nQR}~u^6)nEmv-E(mtZk7iGfwHt~GznCbyZtWq4IlTe^nMdC`AJOL@&d zfOm&SyY*Q-_*Gf|RFL)0nDq+7Rg=p48jgO-dMkK$_%Q2j+{$`8&u6`ZL)N=Fu||TM zhT~3@9($DIDVqOM1D-$z`iwfQ&jEk3c07m@oF&?${4%R$=q}-J<9NjX7{??2Pl8)# zd<xv<j!%PIFF(W0xAA02Hc`TWp!pbYINc`@{Y+#8nticA)yyY2)&0p_z`LjxDge!k znD6G;ba^u}@8OdZPd!41mgf6-J(7KjPf*<uZtH_Q8Oly1LcA%6IO-qe6O$x;`!wHb zek>P<fM{qBs1&PdehP0F%0~Mf=4W|Ypj`s<3mnh)WUwC3_r632<!PC5C4vmw!u&E% zJL?nWus;0)Ps=Yr%Ct;7$|tT|G5_Am*?>8}HZAAZA!oLpE`0vJFl!dFev^>8bf@8X zH+IMOt?pQIt0iJwqJ5v^9Sgc4{&R36`rCB#N2>bOcy#&`o~+C!Dsfp275-O<f#v<v zcm#Ku#l){TLW>~^d!mZWKl~bMj?bCuQb}NAX#)n$Z&e?Z?#BVCh7xw-ANVAUr2s8J z(!YtSI=p^Ry+ZbS|IB-xhqOVb`5zRRok+QYh(`ZkT)i!L)cQXv>SZnh5~Jb1pYXzH zj3f2C^gQ*u^*r@^bc_1y^&;x`>3Qn+>pAKV>G|<PMt;=rB1;XA6p($BP4>+>vgX@# z9PzmSx)nMw1RaQ7vk02se7l|&m?kD2CBL|G1vYmM^Snasg82uxamqYzi89ZdT#&^s zNi2YFeu{vqFxfHOmeI|F|C!6IT_X^$Ls0u?%ugz|OUv=VoBUaLk3XYZjsFZ{by2Hf zf-jOE6MV^Tzh@AgOI;>HMgCsL<8j!vIvfrt)6@x#$l-9_j^pZEI@+?i1l)G=Z|MW9 zf$Z1Zp{&;|w2apbu!-X^z}9Ks(l4|1>|1EQ7m}VnuAASnc*UN2mi%at1-Q8cDJ+JM zGxNLfRFCO@V6l$re?)#O{f{xd;vdrg#7_SUt7kuk6XY!28H2cggA82~IfhC-k5*v} zi}1heWXHzXtSJB1ru+x&V1d+c?K6Vgp@Rod4qPmP%A0?pV#!_&P2tsOC-u){Yz6~i zaM8H?&s<18IgATKlzbS*1=@GGf+=(Y{~ISXCCotma;re^HqEHf_#$nwCZtxY!Pjny zW-Qc}YWgzGr5lE05bAT6pzjclsJjHb=<I%B-Xrqk_w~XWzxPrg4L2y^ewbY^sSzxK z0UW_%auK}J4~hwVJz_#H`6aL^oVxjtpgXgiRPm1FN<_AZ;9)#DboAYn+a<qM&+U@a z>KJQH59}+fBdz@dqbG-9GnP98U$z*Qw^qWnGbMa68|C$LZj`N3*UeNain3erj^P{# z#9VyNSW9<4leFTj4XZ%Kd}-<J*I$h`3VR(>N8`({mX>z2^O2xmKj${UD&z1htz&Nl z+}m@Z4&ZF$WS>C{h*&fp716fN77=Z4RpM$G8i{n2%|x;oe5$j(U0UmKBV1KU`anAA zD509E6Y*_e!HtKCc%ta4ghgPr6pN%@>#F4j3E6AHaE(hRti=Q4K5$FMeHboFd0Du; zg4_k<E+n^x+{H^Y`d!MrhReZROt^6k%3$>=G{*HVTya}!qO|yQ(&AGvF9KB=4x><8 zskGn_PZtIv_BN^2XA`Ob;VZKemz%3DW?==o`r^c(Zmv;?y~0?CuNtQIX*<lFq<f@i z^n?RG*}Ldik1I`-{VL6V^AIiy@|q|Ml0N)mN6<k{6mRYYeaBREfn2|@IXEy1yV;>* zr$%x}YfX!CO4GS?YYWre`+tK#kYi?D0W$<#1&;=4Z>*S`^TOJOrY98`t#mz_u0kjS zzp(3vkkwa7IW{;leC7lU^?{REE7#Dd72_NmR&Q)cadqmV@vEyTSX0WHs}w$97rRU8 z=vZ?^U<y-Zn?^@bF?jeyg6c(0(0CQvxr*3_9$xAKt0ca*w&7|mGdzzO>)!tx4g4I( zhl@K$;dn(O5fN)?X%q4GSS!NhM?}1>v)!E^6(SbvXbnznei3Vnws;CC!sHllaT_cw z!`$#!NN0eAVuQMi<_|n~V7x>!L8vQA^406|F$>s>E7bcS>2Q+XCU0;xa99p;_)iy( zabajWY?cJ9g(d7o-LOcM2&KX`XEk3?vv3i)i^;7ecL}*m$*m)|p4>**XybK<G;B@! z{3PimReDDIb>X8uz8`n%4h`=-2n9u=vcE21foV^Ub<gW2;rj{H;5678GlElN6sAUI z#$amXW}L1$U~}(-wCxuoW@nOR@UUOE12;fm7fzM7s$M+=_CVm)q>(VRM+km)8zx9N zv~A{o+eh~v!YGB*H$du}lFo!v!&{E0x6zVZ7~3K02&~BOfCYJlmNHXG4;G&AFv#Cr zdETOQ{*GtNv{e>fQ1oY;EA1$Z8^~IB6EsQd=Bi{6SE><oaFPx{m;w*@DKEzO%H2J7 z<3Sk=qP@e%hWgIgv-G0HHf+%>3118@=B7gj_h<qwtmvC|?$lGqjyd)n>N(W2#c|82 zfl~whV)vfiJ#^N${_3z}v+xIRQ~On_Fk2hE_@xfPG|kSKlJ$?Yw8EOErCr2Yqa6xT zGv3i*U;I|g#+;2f(2+yatR^)<cQKl#7hhb0?{h7%aR&klP_u-G%1X=04U=0zZY8-@ z<kr9&r7#E#J)t{XuqF`+;qWlVU@$s-h(VyP9TB6zA>rMC5Q(p%g{`@Enk;TZ9+RLg zkFB{*VQXGyUXkcEntg*t9;v`jNCp0BNCkegH0i?KM+6-l=MuuyV&wPwTxzihOtN=? z7K%kWvCHabRxh2J{>AJax?iY5?9{>wv|-!l$L_THT0`4&WW-)3kG9T}R6YmZSy^gg zxxjhqKgQ=-SgOB2w~$xzJ8COXusN9X_3VD3y1X;AwY?$n7BLe?rI}bP9(Cs%1isdh z$jth_!Ks9clzriikHr-dr{N5QL*YgEDm(m^#xJAy7&awng{G7&&n%RV#keV13?Jzw zMu8eIe1n-o2GyR#DC6Z7;YxC=$z4Eh4Y^C1o4&QW`pW9+E9=@!c$#^wVZq!4m|zqh zfCr~*4M)`$BnsX*X$`li?<!0a5VRe>f7jwpgMcX^OEU!asy#-p`BIEgpwFpZ{W=Xc zEPWW1O`tK6erpF}9TY51l2m=9@C#Qn=+5m!-cvFYK2HA-Le=$e9zJW^JR|@Y!mqPm z|NGdAB8->S(=x5iXL>Pnz}9&J;~bvGz`8sGFg86yqlD_Z=QQk+kBp9`#s<7r>;Zfz zhOFU-_D<6sE<lAXy27%o#vxv{!Ux78ECn!^6?f=hKt-LhO<TG1@WOdiVJoh6{!LrZ zHR|d(ciGL(y0_#q8bBP%92&jO!W%-JN-H0s4SG<6&I*XUfa1^Q<ptHvG&}b~vY*53 zT`wR*(FHd48%Z6iIl6r4gso_7T@_>3y*TQ?o<RwHr%otqhf3_wezMFI($&0?I(Bj} z<r*6t>bn^cVDzJ@lS<WGnN73}Br1D(B}%=vfYVZY^;Iarc620l5(theXfaoM;OG!a zv>kKykEG7*N62T?%f$d&j3KD1IC9YD!()R?ZB3o@<w2<6$)HM-oTIq;#Bkb$4prA< z5jk-45a}_KEQ4hP(>XFcM(ZomL^Vc+Po3!ZTIoqB!G73;?cuWw-Km!HT2IOV=L_hX zyaea8cFPN`ct`W{7yT-j1SFJ#DAl3;1(aDxP3gk>lxU)rfH3O4eUza4)X3=YNcRh> zQGwOFf;qznpUE*828!b5|24(jR1+j!W-HN_k<?M&Xpx+Znu!kW^;5n>C#`IA%k%uN zYg#bR1<-C_0betjblmj6EhkrxIhQ?K=ZkqZt>D8&pO>7dZM?Ok1<eFTVci3J6I;GF z*3ual9W9Z#h_^vpd%QCy+B-TUbBVY>rdX$FZ;Q9`QzucAxmC0w=wC}D+P?TI&EhWj z`pzI2JBys|ix9spIy_bauSycOK+M&#lLV*=1YJq)*`P^7KQ}O1Vow|y$k4AW6}H7Y zy}5H}e`VZxI6Pd*!e_$gICCco&ZAvYC>anR%DFPw%auqLlA=_yGG!<MPpCQRA&VMI z+Epx(qK-se8%WM|4T`#osC2}nXpy2-iZ&_QrRYGhSALBYq?ar<OVKUG7Abn9NJz0u zianC=m*Rlr2PMBw@*AYMQHq-+dx?}@$$O<dBE^t&o|LYbbf1-;m%Gj~DPAFsS4!t! zN#_8GKz6^Yr1RC%GtPWUinbgTjTeoF!Cg8Y)+(04b4C4ln3t88UpwB|1W$X%cS5}m zjqd~ZdUBKGzI1#a(g>$`y1#FL+zh!#$sHv3W#ryW?lE$YlY4^PTgV+DcZ}Rq<eq*F z({5$rHg-F^gT0omt-X`o#R>wpzK-3^?tu^;Lte|a)fPp+o=wfLZfd}K3ZTO7W$c;_ zE|<o9%Mr|%`TJ19HrxjbaGiH)Yu#=p+EBIDSl+D}%;7?T7U@H<NM}QrwoYR%4~nh0 zVYOZ{%9v+WN|VgH9)*K_v}muOMZ1?>gEGK2roInKaeJl<ujtI<y-6X7f%{TrX5}u{ ztD~Gm#(-t`4m>T}m9%X6;n`Kf!JEw8RtN#pQ^+1GL}|QY$X-%c)ji%rK>KE;(-YQi zzRW7vaq~Fd^__awJaI8=_|20^g0fEpSfWIGB(xaz0k`CWa-NHc5X(+nNR*;FE#6fi z@q<A8j7|Iu5<h32Lvv0*{N+GAY`(IPIMM#AxoN*@D;@KByeP+fFA6NbfmvG@gL97; zfsr02spPQsFf-o-?UjY5dJ9Wdl3MGdB*1KVJ>EYXmVk5tAX)8r6+x0U_PHAS+>L#n z%dAm*7rV@w7`iL?--EkS|0=l6;_Kk9GQP>oPqSn-newVei-09$5wM!<Qb7QzXnuxm zH9t#QrAlS<bMX9mb}>8Avk2<+MTR2Eq-FYL^44i}T4D*r{B7=$%%UO5rJ@O~31Eh0 zkm0MWjv)ft*IBZzd2OPOL^r<4ikcObe7}_sYF>xQP=>+$hl0@c7>cNA7g=(7W;u<r z`qJM(s!5i1)Hwn_RC3*<=C>7vM!FoAn0bjMtDxvjkULSuu>H*Mvb0pf7tgWYhP2$Q z4K|qnNI8{^)%RGk5uXx`u!H=e74d3__;E4gXo&Hr6kW$sP3F&(S4*u3hLr#nK3;*C ze^uUhr&gH1CNC<(Qj>u{v*1D<e>~C5QhxI{`B*d}hp`Lo*sy6rxBM0xax1pQCG&Ua z-<D7<{CjHj$+V!J`C~Dsd$B#X%Rj@ASmOL2X8xI_4MdvzPnLG39e&(A{};3(2K^7i zqSH<+_Eet><+P}e(=KE<?Zh4q?nHV!T(|MdtkQiKH*e!e&u!kp({792ogC@8&AT|| zb1Qlt)VoDvbsnJT&W)JY^W2EJ7bS@#zAJt30zAm^UD>HU$jyiN#ca<i=#fWw7G<hR zNT%vdJlnkK$=u_c;c@qqr$cCq?@_LL4&_eX#*?e5OIM>>IPYz!g+4!zMLDsk9cb!` zD?QyOIohj4<5MV+Ww&Bx%_E^jsJD%(&^Y!YgUij2@PbJI6^Wnbr1{I$#PunQ;-@&8 zsH6$<uZt-*;mc-IG=SpYaC{3-(@Fj3^Jx<?sM{BjxLa84{+&hq@3{HRscd|!ARwEF z!+7`yj@IXBmTg6?-}*$m-ei6oDSD7%8Yq6pqWB$dewQm#TFAz8Q`q=kVGDe}sH6@k z=?BwF>V%Sh$VqLOF?SDrFV-bDCc83Sk>sY#rU)9?i=cLAB-x$mjwH8awnUOWnVv{; zLuLaxdF6+}YjTG*o%(czM%eTmh3&%V=G4f}RC?gp-eal0f#bGqB>1;vd7)0)tjS-* z35{d(o`VPX?9v?R;jyvd<Bsm0-3NR2JNgDNo!HrvI4F({WX6pB+qZ5zXb?QAesIrT z9hUx^=cgz+E7!2@-Z-!7&E8Hg-okiJ^=>XU6-06iLL|r9+eI`I?G(}0SgX3kh!)!g ztD2o#`zoV72cBF*R~epZR~df1l0<Qg#jZv6ZAJ;*W)zBFRFYdoZuK;Qj9TV&sXGma zkuaoB-Dya?)8GjXt8T^}35N_ISgaBP7J5RLF2)RC%86&84t2NDGY`CFyxUljzuQ=& z?lvwnztPg`XbucI^4A<ey5<N@yXFX*rAargydvn}HHQ<z)a&yopK47Ex0tj6+CPvQ z%|n4NsLC6tnvye6*hO}o2$cJA!iqPdhUuVVxK#-4-QdiEQ`W3V5RyL+xbvVYI@ zjuQiC_79(Fn~%+~DeS>OYnqk!snwm&$ZwmEZLR4{sL|fu24g&KUDU-|+dA?vZ-J@2 z<gV!2{x=5ijM)s{kz1WNcW0To(=4-hvzfbtVO(hKu3*$I%a7XT{HX1mzqPy4S*_ju zVg|E|MJmv1rmKkO(CeG$p*a2j70-VAyr%ZUMXauy&gzsI{;E}*p^fG<&bQBRhA%4p z@QmE5p&yOFtR8Ej>3w!J{uy-s^WflrS?Ksn^W(l@{^<DSv!dgF+c&EKoDzMqNA^us zGYBnNN$&c;7JE~Cpu`&<*;?v>J`_6IJv@fMqQ^#OkZQB~xPI1(tx3_3B0zU5_9eD+ z;Ot2{1a|;$5L=36T|YE7cnC6BGEHtf&D!;z4Ylc0W3^{eqiff*4QpmE&^|aVV%@$~ zu>$d_Z|vAP6}kFq+!rTrpLf~C`8-zW!I4t~byq7A6QO0ZetNqX*zHgYJvv}FL~RDB z4y>9tJ4n+$#C2jA1}wiCCkZSh&j6K~;{e%NF+T>dFuMtMpE`Ezs!f22EMe&q^+QFT zfZ(;Y^DGo;IBieERZCQyl^2#aJZ6<R|8_<iLCb&0))a2KTH(2r;ez6GipFbe=Q-qa zWPC+W&GV>xE^+mg1}NYnHt$x*QKL?`Ug#NxK^M(V6SI0w<tGHac2#Zb{8*SWmDJ9j zOa1&M+G@&6isq(gB_!Gk8?Tl~N2|AJdX2$%TC}ycwTXBn((Wr7)S{)MHSW&8S)wK0 z(h{29_o6Kpi3g?(NzvNU)-GB*;_<SXW<(Kdk94~86PJj`W9^=T=|jXjS|VhfR>b0+ z9ikP5Tw7W@TLku$XzOT+IaCcrw6m?lX|OP_kR-0^3`^ai1Xh_`C~>XpSisOkAoC;i z2Y2F?2&=%G5LP4E63OZ%TOrwMDdUoFl)PK=9?7>#zFqR2lJ6$v*XyLb!F2;KM`=|} zxNg^lL(0&&$LrHXxq1q#r^?&8aJUzYd#W_Ci2SwWUy6RYeB8546Ak2VBL7PAuOj~% z@<+kXgrnsySenEjz|lV58q>565|u6O<ZIWjyN28i<aUv}iQLWPZXq{8?ly9Fkb5n; zyU5)`?mlw&lY4;NgXA6}_j+<~WYy9ov{FqAx%N37O!Mq>I~glMyiM-k7YZ`niD;W5 zw9n^ZM(I9}i#f{nl?0e9-xu&PXJB8@&s<>y?Q~b{lLqrt?sG}zHTIQ-n2#eir{BBJ z?_~ksKChbvtM-+auo6~A03|F`UMQ?<K+kS_URPp7LW`R5Y=+h8WeYUTY)SHLotDwF zbqpPz(Gy&63YI}sTaq^yL}IwvP8SbC7p*{Voig9M4z2gDL*u>c%xfklNsnzq(#SRk zCeAkp&rhCjE;*ktc$2viFBWWOx)n3sW>21(MAA8x8K=d}wxqL&83;GG6MCh^%r3>u zE@WmGGPBFvGcj3(%<P?snSH3?CxDp^kok~e=8$<kGQ$a1^M<6Wpgb3ELZvJ7rliZ_ z1B1+$kOH8ti+Uw(j4T|v%&OQCGd1xD9ipeP^lB=z507r`GLNb<kD5dIGGCVT6qM<) z$~>0z*kwYHc^pq=vCQQ_<rY=uEm-C)=I8_!Ifg|prXo+_fva8QIaTC2^A-6bUzzk4 z6zR2!d{xqG7YRY;tLbDFid+p;ZnMlb--Z~V>^5fJ!6s_UP(}4lh6UG6s1|-LQ>Ul8 z*aErkVXE+Zn0YT##gnclOZp1R_d)r1sCqvH+YCUM`2f=L+8jJ=aquv4K=(uw3SaQe z#6hFQ!CNqw&*tFm76)%<=J^5+F0iD(fCIn9!Q&8YbATYTParM7&B6OD4hRR8y^ons z+HLR@anNjW@By+KYIE>Wi-V6cG*_MD;NvVADBvJqaqvk9wmE<>^HWGGXmjv6i-XS* z2cKi+=j}H50&x(rIQSwXpgrKA0&;zYa>cZ-F!S$OGML>F#64jMM^g(#f0LqHwQmB^ z82ctO|AE-l{HT}sZI*3rLy`C_=A1aM@|LPioo=qY7%`hkHwp?Y%L~jmB^MN(U{pic zGTPMr);FhCQ+H}Kr_ywG!7REcl<4li1brst1lA7j;{#)Z!~G~m1Ph0AC;E2Lvt{+6 zZjNf?Ds63~X4ne4G0A>X%d@oee842G!c^emxyVCG9sZiGk|s}00nCgJj2${zca=;B zP-4gr9t_+wvI#4`{3>~N4fXdQ8wgM%VfZ#!2o8)m#|Ba(DD!i*><L&vjt(xFE7jFm zw+mY_S0b|9Y(I@!a*MpS(bb3NGT76sY3@=iMJaFp01l$`z`=7T2MV#9Nb<#%8iQ1@ z>l^SDjHkNJtIK@Pe&%7F9pqHi=Is1jbx=l<R*mJmhig$euT~A}+OgqUXn6^Ly9dsW zRm?)HW`^+n0~wOrK0Oedi-nv;nxc^;GN(@TNi^>=d}=Ik61Y4#I5K?d=-`&rSc<lu z2nQ6{R6LU0W4V{b1>BCLFf~chdj?6;iw>0M?6_2aKM~Er4Ix~Ob#60f#=+DmWweh1 zlz9*es-JVj=8_qsgF~6I#<>zhFJU)O@}{f22l<IZzhT!-34eH`?#WM9qa=7`;6NN@ zLk<<;9U8@qY6@F@6<+cwEqd@Q$*R$wOk_TtURW5Za=LP}#GD()yZ;hY46WCdwvKJ> z9WDOiSwpmU#5#;<EE0{2*3Nh<cw0K#oc1_DI~;9MZ()xb(P*@_9n!VNTb%Y33p>x& zR$oznLb{e%htnRaqO+s54b6VUMSH9ri)@RvijJ0ehiGp_BOfsoCG3dC+eKSE7Dq!R z@fIwlJ?_fQs-ms4GZvcOr%+Z~w8NSEP+9xQ)@WOsANP}CS9pn0SK)Fl&)Ei9<y<X1 zIb}#U>~pw7!6!1kO>(6e=^))mx8z>5M$Cg~m!6fPO=2D<3A`F9YF*2is}XjkD<p4T zz@^?IS*w)ol6OeHR`PX{H%Pu-@(s8nm765rf}2v7aP46JrA)GGUF(^YyIp&A$@fWq zz2t{c(2l1h?~{ChfSzuVd{pYEq<-3UN~eu0(}YB@CZQQVjX90LxJPq_6jY@XR&UNq z_^X0tW;JX^7Q<f?Jg?D2RaNzZs?NK(7yd<{(Y2auAfijt7Hmc`-9Sd)sj(WdXM8D^ zQ@NiXICStja&I8_MsjZ=_a)>e$vr~uOUX@>+fQzW+@s_Uk~>81%gDW%++*Y(C-(%o z!{nYMcZA$Aa?h}Mi_6IxSw$1+i>^S~IJSHfEcm!Y4N+7V6&e#O(RPK=j0Pzj3h_y< zBHPQW$*#s4v`67~qooRu3#~VM!=#b#^KaHXu!lt{yueb*7mT1VUWo&BW<rb5nnkIn zi$oivsGnLMLxUTzXMtUA9Cx`DxXTrWt&++O#|l_m-e)bc?_;ow!1d?@j5JaoWQZNL zL)Qkm`9`L6_6^5M$njQ&z%9lzxSW2BnUBHxd557v0BjkOjw~tg!;ZmLuc<Ct|HH~Z zdodv)$x}=Tw;7HyNbxZgZu<mFx)Ls}3D)ws-L&KW2IF9v?oJ?7=NA<yC&Vp;xUXW| z*IBQpcF<#fgC)HQFQoY<rXi?(52TsIG|ym=(+>JR2K^9&TuLuUH~$%f{)N?{zO5U{ zBje9w;BOgf!Zt5FkCKAtn-?KQxCc{IL5lyv6#oNzkBcZ)wlon$38`%;odR`#DI~a) zLxQ_FlBmr|77;=Iq>>xEn<qofD+%QDUWEcxikr$ekUvqXHIek%8~Mc*&tSexS$31w z<YeZ<C<Wtl8LFHoNZux*J;5)tC_^{K(T(d*aKw&6x@8Fc{a)VdNtRzk$;2Jy9GdO@ zB%ae8$u>tPn%gFu<7sh7Br1TNCn;N|65-Xk)f-P^eLhZEG7Iap4<TSWwqY1|Ss3?u z#rGl&F`;k|hOr^+D~$a*<xDKbHY!ne3UqUVtMM_x&F}EuaCR_kK7(090_MRB3{pHt z5Ky(x)Q&HCwoV(nWPXn$v}tYG%Tac0tM((P={ELbaJTcHa`Okgcc~h^OU)l~)j5#c z{4vjFmSyUIi1|~Fbb?Vtr}`(JT%HsYlbN!FV2R}{gl8x}rxNnP6@(=<`M}tv$%#b0 zR{nQau9*KyX`m{l2y4^`jQ*OcvQ+yuH%*>x-c_e18la?7gd2OFH*7P1%j>tP9iLcA zJHFdlvQ^=-wq#n!AvLmiZsT{jGIw=tLvgNA+6$J70d4yPPQKdbSycgI=h~uVFGjp# z_nsr&hxQ-XvtRR`fKRTXyM2qhk36_I@~2OYp6kv%dT8B|IyUt3fqt(_wQcxV|G<dP zvID1*`Va&4AW%#U4IJxt;?vHd6E_D(2Zzrncu<v&0=iF)jtyG@#Yz?)g&$3u#z0X4 z+qaYzJ>Re=lYs?6ao~+AaBiUxyHVE_H7e@BT1q!{v$p&i#XW}5E^&^OgG2q6YD(GE za_U-Rv49HPhid7l$>~u|OIO}bSQ!qF42_+WXH|XVIrZ!8vzkH-K^AtFotvk2Y`~_7 znhmLu0RdFTO03G{n{U}16(6wD=%k5&Y}%S^DVC1Tp3z?APT|1Xp|PPtU|P!rX#MQe zEDa?JTXD5yn~oh*!J`E*z%w9i*7Ox-o*Em-zYkRHB79+AQMsi@r(+De^VxH%XRcgp zmKWvUYqgQSbI<h+bN0pN98qgq<}GX)SdE{&YU|`lcs8BHc2{7}wiZk(A6B5gLOXUZ zDGv3VKoHe_zcp|z5Z{~<T*%ha+fI)-l^CQMnzJGx@D=f#ICb34>nqSd+cY*^$);Ed z$U$7(pnh&d6}_VaSJ6G)wdcAXrA4|6%CYsxD7oGAC2Dp&vTM`sO<Q|*_3S=4O~G|0 z^{YbFIf3t0{OWJSwAar9&!4Jo<g?`*Dcret|DLV;dk!3ccUlEo^-uu#&h9<C_U`OC z*b{(x;N-D^F}s@H?R)4(RHfR!=Sa`~{d@LbGdr8b#%_;dMMn+}9~vzfI2-4e`_zg3 zGv~MPi`j|htG5>HfBO$m`zRGdSMFouRy{oi&$OBM<zn!>$=JSo@1cXSs~0eJTv(qX zQu}r1OZOGMee;_5in=K{_3fJni78z<$J9{t^de*yZSsewe!Fm^51Z#mEQ*#jTXTwg z@s4Plh{HZ#9r%hC*k8Nz-$2;>x1nv(XuF7aLL%6QM<W%p3@hBM;}Jk>tUW5?EwMJy z)&cwWcv~wtv3A(Dw{*0{t7aWmkiVm~GdT4lAUZnQqIe+DDPo=RPD?jW#9Jf4dAy}V z#1WmjGv3<aF8Iv1wndTMSbLjj>4>yVQ9T4cI|{6&Ld(Q}-PTBFv>0R^YTeORH`793 z?UaRpV^`0X?T2=?%qQ)dDbGf<tu-1)w*z=?Yl)-V*46=Tdn}@~4GXmjV=Zmi%pL9V zG9^W4EO6FW#OV+t8g38A!`q#E!~4V6hYyF(7$0SoAB7zN)9FMbcedeS9wuI9$=xX( zLq-S_jBK4U(lKPDW2l!(y^M^WddTQ$l@tr5zC`LZXz>)0pz5TtT(Sm)m}X@7RBx90 zDyc^isk%kFJEVJ^)UT2HMyZoQ4SloJw@AH58VTv$CiNYz5-z>hN`0r)ccGzE-yZ4T zC-nnp>r_7k`*0b!j%=OYAoUxiev=HoMCwV&dZqV>)L$y~l=Q4uHc+MBFM~&Aa8T+) zlD*88;xc$MnnY#CW$=X5hh1r?^oT4u?K;b4$vLUNT(ZBC`m3Zq&ZPc2_(Kb+_c6)e z2!C%?R#F2O;P>6|`+oR+ib>Ch;rD6gTCckniZYT^48cYrRIQ1cMKy~Tueb{}`QX2r zMT={BO=)RleDxX@s%afxqJ`QZVK@BY9&12jq1uz<8E|g_x2AS%e1wHIzGD0o3+;F{ zy1QS)#!qS5txQt_ksni@#@iUbo!v>Ag*oqCdGFnM?>%|%y?O5&^4|ON-UssD2lL*C z^4^E@-beD@H|4!=&U@dI_dc5UzAf*4d*1twy!U+G`_8=g@x1qmy!Tys?|bsz_vXFt z%X^>9dq0r(elYL-P~Q8Iy!YdI?<ex!Pv*U!%6mV}KEw2#XaAaQX#Q+I^mBRd-!R@& z>yof(EUk5wY9XV%OIzgivf6N$R->^cW$?pwwzQ&4Tdc8VmGo1m)xHE}GPIQ_UBO&k zp2Kc@m%H>D9mbir%b(Pk=tV&b!`Br+0uFbV7Zb@%B%*Ny1utBCQE0>M=yG6;rvU{v zyt2!MPd?ElfQWx5%5nr=ijp3|6iS1XRHN)ih$lFbEe&?bw8qMeE(21RJG<PNIeZh! zdsOtH#7O0hDCtq<?+Px4^wphR&VG$8U<o!L7+bgyg-2=vT_qT~$kXM^K;0LYFgu== z@*ae`TwY(gMPsa?jAV8{!KMlA9_WRAJqqng-rK9!F*N1s)cbnHbsE}ob&0`V1H8s% z<~EM^IvP@r%go~#xeOIPbD8;^uk4i#DS4UsU9Vxi&W4opG7GrxWWBD2l<P7JdhTJp z?uL~6GAr@kj|W^S&t(?!J<NK&K-GJhmHOYsdVP4BlJZ?<Wr2^dUVojI@?U1<!OyYY z0QdvSypAr)pAXY*HR?bHGr{^)iTQ1HsAolf7bE|XA{!v`dt_Kgcj@B83}XMCEWDzL z(^52XTBH3tw7?>U?qZH^t&Z*zaXVt68?WW&?L4Wk=#v?J#TWXVX_<DWbf?oPNBa!4 zn_0S}R6|ncT|Dhb8>uq$b>PXS%FVmscOn%w?}6XRRE7C^OdwK~cp4@$BJD_2u_p6D zdPr7hsuK&~@nN1^NLEkZ#M1^M<8fUV8-ee~=rCrr_86gsKgP{>@N6bLkqLXzFzR_; zcV(M-!3rwFpm#!-ZZn_YbP8zb4qdzk>;GYO`t&T+{}P(F{V<-cv5#`|qnvP*ff>Y6 z?m?JgL{WyMXgBd=9Ff)`aw4+?a+)9KlbNz?87lsLN`=?4#8TdbdVHz^pW{KPX^5fx zF$+VPj?f&~O-q0gRMRuRYJtZmmO|aXZfE@lX*#03!#+s(EOET-ncDG1z)Gj~UEp{v z`yNOAyShwW^ZLYc2GQpCdA4~&qMkuA^M{0po@^j{n3<+T1E<FR5$QGRsIUQq{{=bt zC8f-)sMGu?G4v~*T$!vP<H5~ZqJ||_LbhL%@*>JF{hN+Mh!`q;#{8Xi6d52)^<EF! zw9Kr|tVwyyKT^er>>j4!DcYU7`Dc#u?T-)`{eSb`U^22JqNRceqz;3%*^`QzSGXFt zF>{<ywKH*2B5VOJZq<7o^(lvWr>@!zJK`Dhbp)o3uTGgqp{%!NS`%%kFREuVWf)od zH9UgV2^_y281gA}b$En^@4zvr_jYD?lxwL@gj(;+be;~KRnY3-Pp-|ZeVTx;--KpU zAtbSuA%kxw5)`lwh`dETBG2oynTqo;;vdZiU6ajJo`<pjR#mGF=-HUrnCUX#rlYE3 zy|Q7M*dm(Dcj&!7U_IqC&+EN@pq28Q7xdl$kVplB88rErt90p3cznNZPafuzx|%u6 zr*t)Km>;l9{D58J2X)k;gfbHey~+Ggz8YJh8Xr*&xD5>tlL1;-c8GrH_0JF%d`A0> zZhltJ+SujU<o3+=r%#900~>#%XOlZJJ2KZ2`JIVf@H%`R!ggnNXZBFoUJCmHgzd}h z%j_=*`x4o*wafaNRo2&Z^BXgl^{pvo9Y9sqDP>{Ux2KeaVOgD2PK7R#_<HHK$?MB( zM0*xy{!#W_9gp0f)6MVdNpHrRSuy&o`J7&-ja~{a#6#xqQSfADNwyjfgTJp&Zi9Hs zNc9h|Trq#B!+fM^J`^vyz@e01>T24#%uZ>)1nMK~x4LN-3>mtRfHCuY!I((~G65Vk zzlD)}5Hg#8&{3A?k(^<PKk5_7LzzQQV}KU|CNkG0ug_ecx#7vvbng9Uy;s(!r1>9u zud6=g3T{#ceSrq%Sd1k8dv+3!C~e~_I(^;Danb9pPr1$81*!~&YEbM=&?nA(t+2l~ zcZuBaxmzH9JEeQQpzj~zx?7*D`$X<Ny&u)V{5a3=fQEWRP<LQEJp!NJSF*PVv<`eD zv_RrU2L13TOtn|as(|Wa0($`?aBh2tz%EYQ1QahI#ei;6e0QGWyNTj^h56n>itj^; zrAYB9qG(U$A5;`y0u(<i)a{2b0v1L1vDA1<3Q)B3Fc={Owrhn{-&To#AbQJa4D!J; z^QWS>ymqkM{DtTZ(+qudFl=T8-q}qE%Xq6ErF>hGgUSRPI4DHc17Tkh$)S88s~IeX zz|RS~VR&eo@@9b*#OdmAi}G5KGo}0gp#ZmTKKh$8F$Y`X_}uKzSois;xviUzI_E4r z5x`MrOPh#BTH|;mkk{rcn~@(|r8D-IrO7s3?|43%Y^AemvW2U1Bh!XzTZ6D{sS`&} z9ZQXD85ur#U=Rk^85*3%l`B`Iwn}LH(YN5g=Qcjh&~&ezb?uB<UkrZYhB?QfUGBOW z%f+iBg>KgGI6~ld@N?qmu>r>s0=#n_=^q*$LuF>yk+Ea@Q~g7yM!`2?`_j3vv=!EV z)w<5ycq^}-kN7LFL9E~q=bh1pF`Q2ZYyvE4-f2hYm6qBR>Ecz?ywd~i)mKkzcNCI; zA<5@Q-R}H(QqLuyC-spRMt$T3QBS`x-qSCP_w)<nJzc=Nb^L#HVEDLWR|;nLv+O8d zjTV7P`Vd<qhxF(tc#YhncWn4%?jfM?Ir3?VOg>uC%Re7ao$VeTIWaJzfE)d}XM%2Y z94C%SmC-=O{pO*u<EfLQZe&S?c!(e6ca7P#^eRrQxozwi5p<3nvkX%ssHD>#BKq;6 z6MXC}M+?l9K0pYVs;C)pFy+{YMbP5hX%7gQwu(wyMLF%xlxZtZ+RkHlMDsk}6<|Pl zi|_HATW#o0h&?&rRy?E7s+A5t$uL=u2J^HM6ymbVIW}PI9fqmEPY9bBNK6KDkBV1U z?l~W$%5ta@Ttg>Lo*Kho_wcDP%j<x(3pAv_&$SMH>%bSa7)+gGMJ4AMOMsMoIB zp|PQ3PDn>$&t=pXHV@r&xpP)vprNW$0F&yx`NVMF&A?B{Hm0g7k2w`!jDm`RQDY&? z(9P{RmCD^WeDd7hp|b<WMz6Vg59O|#rVrNnESomWxoon_K0MneGzSgY9&KwWw9_ft z+gsX22kIWSMmt+j0kKoGMI#;V{E!lzEr|Ho8to7*@s7BNM_b}XG~N+`j4drKqO~;& zfsyt$5$|k`s@tj<F4H<-Ss>aGGqN?(5f$J8GHvk|(bf@(;)Pa+XlrRF1;dzVZEtVS z-+0A4<D#{#wN<p?<xxwdtzEQtv~_w48oGSO%Gwy+u~;<XQ5fCf<>5Wy1L3~#(eOJM zuK!%!dB{fVI>m#R7r9Fnw4_l^S19!;5X#!5zCyBg$vW`bgmp@NJzbP+u<lBjx-03X z>yoWf-+}id#$IXclg57OI4H#-DXz0_Kx7*4KJ)?U%t)QCKlGPLo$fyL<5I`F52>G& z`Ym|<p^r+vQR+=nACvlNso%z={uU-(=i&DPgCAC|&>CSs=_%2e*HboLs(Hfbs{o&` z5`4aD3|oL<3(;4DzD4L;jJ{g*EkWN>^esbQ-FT_tUFv~<yT=<En^vsUyr(oQY1tWm z_T}eZLGCO6N~7Obk^5?L#~J;+M*ZBXer{Jkcc`B`)z53y&t2;0b?WDC^>dH<dA<6% zSN+_le%_#d?pHq#sGkSb&l}axL+a;Y_4A1Od6W8iv-){d{k&EEyiNT)rheY8e%{Gg z*Cv-+W3`LBH6LTOn_)A}^(Ea}2@}z7O)?|crPU#Vdza?nI+Ghvn$#KDtO?Ft0s?iN zxl1XHCxBwE-X)v0Am=^@#0j1GLlhT?ZAQt_pbnwT!AcfTXvnRomb%n$S#&enSuZ!b zG#@;MBM3QJ;Z%{8<&>wYq8mt5FW!uzl?$4>H5XgRyR?lS536a~jKFJ)DmH6w&KJkJ zHJ#Pgc54B)gpeq&AtcH&)`eS_rRCa;dvDx48NJUt%uNI-c1&Tmy|Pzd!v=NpZLC++ ztr`^OXIZaNrwtnB_gSx_P7FHC|6;uoLZtb2-s`MGOLSl0y)N*$%%AaIH+bA;H}2B6 z*yddj%@NfC%{y2gh+Y`0AXw@Bl`6eI0-i6$<CHg8$d30j#nywC@T{WsIMR9-!xK)0 z45?^6Y0-L;nIE7?Me9RQl`Pcc!xpWNl0dCZ>&r;%D+~{F$&!mj>l+rWZ!iQ`M5D1p z>)X&8S!j%l7Oe?O%2v_(8PfVW!(H7r0<u%Ier3`66+?tVh*Y#LLxX0aJxz<&zauTT zP3sOkcYZC$V<-~8wP@YT6|H+Y-Vi{fqV)jpm09SL2QBEmhX^pvru81A^*%DhiRW!L ztq)nWKEx4<4{Zq&t*4<|v(T#_vuJ$+Y58qhUq@Qs<aoM;lCU<d35ym<v|^;9^(>5x zEDVfG7Om%a{)osyvZLm|+2&|VY+ApwX#I|xf1pT3>rXJavM{#(Y|;8pl9+W=2;;m5 za@|iyl*(=`{K3fVgF)E`<FU`v*ynBR^VN>~`}~c4fyTaIV_!*QU#PLKw6U+Ov9G+b zFMOFbX!q-vStCQYiKDwhM|Y(_x7m0M+*OXZgS%S31Kc&v^Wa8Y?*upMejHCjJx_oe z_r43<7T<exJRIj4j#h&4AUu!=Xm|v!unZrgGfX<8q(k?T(V(uui$99yXy2|ULz$3@ z1W#e4G~b~oOEaY^5<Ho*e5BJnuP4hh<th?9g^@1voqF1lmgh(N+~(tY+L?BN*JD1R zr;W7dJRwYa&3EZ(k#?&mpZOj=>EGeku;tA6D~?y3E^(kpH}UWq6h~g`e+p{6F7N@} zd`d?->tscy0%)XtiAsK|kB-;vP|x|amqLT)hxD|6BJH@4sxm(e-pRD{LaN&QsGcRr zOMhY^$K&-Z{9!8dV>+fVKdz?(>0qKpG?|~!vm|!?Y1LXqj6Hyi^#uPK7)z9VRyY4z zv4G&2ImSxN&*npOjD^g<A;!dcXewkSQ-UmhKF{J8i&*>;u=pk2N}n#dV18LK`nP(z zBpo6~zhW`^)#4VUjv_|4g}x4qZZG|YZhl>{RGX>IGg@kXBOjV$w9Ncgz6Jk**fY*U zpAyey$mqo)Mzg?ZR<-4XZlz6^T`(v0bZNSb82ygL=(EKwN{n7WMz1ZyWB;Ay>ewGy zT9R3kXSCdWE+3j>G;DrvrWXDFOf3Jfh~*yv%RkDsZTSWB$2rEs7tEjN>GE`#82_oo z_|L7k>PC3wevxmTe*tfu2IPMU<RO7Y{#QW$SE@yRO`Vnwo;QC3FNyhY_)a*fpx^~) zBr4>xRmi_vZzmS=JF8|;$nWh!{s@IY0;`ZeK_P#lI+%Y}g@n$V|DmU)`JeehLKmPy zRLFl>g<P@TaxCOEf+$y+w~E{#yj^55fmO&IA`5?5lXT#`d8eQe_*wz4vV)o~Z~;f= zT_WwILS83SA+HyzZ?Ta3>_XlkRKGwW4?rQ1z$)ZHDC9v^Na=a=jRF&y59JFfy?|Zx zut>Y8kVmXS-b|<U?tm~JcEUt`UR;bcKGXPY?f9}wwc|_C<aixkwJ%46=6W<bUSELG z3{!XQcmqz}^?m-!?0W49ahct~-UIH9{Da^&=pO?2Ch-YyUt)Y7+{2D9ft!?n3vRRX ztKhD3eGS~z?yrNp#`6tud%c&yJ>vVWFrN_i<b<zRqLG{L5_LS;lxceBdGp=Eo*-~Y zL*)5W&zSGY=Rn+D$noBMj`s=sP0i(a)_hWA>$DHp@6!bO2`c(2u@!GnR_s`zL2H;F z5|f#g*d*qMp;cG0L^EDC3cNCgpR_=%=<I~~QDK*zD`vF|=1NFG4gLv{tTR6eo%Ja( zVSZZFo1cN4JL&|sv-#H|ZA{Xno>+tTj3T)lIZsA1kz_OzO~x{@9m@swhWSP4*!ol) zuTtv4!P3nyi|oXXdVw8fenp^(^Ry$;!m-cHuZpzHw5FYz)(ePz{52SDnKlS&yMR!} zU&q*X2x`B8NXFm5*bWHlxPYIXi=uZyvJQeu;IC{)9Uoj^W(7_K@Poye6C&A=cBMT# z8n`)$k`bLS#x6l1@&$o7O3d#9t2^p794zKP!a%Ik{0H#zQH|}j<`2M=`wpE?tuucJ z0clsN#QYH^VW~3nC!#k9oVe;3auGCtO80SUQi5r2z1|c=gyw&SWVI0eukf{mQf@-I z03=S+TiSgA3i~xa+us%}>^E4L8w&e3yD(GqhM+LFDlB9^FL36VR@m<$SuI5WNg(ty zRp~$Mn!xPgJ`bh+r>f&R^S>1F67#>YI1iL^Mf8>?>*^RZ9+XmQjvF|2Oe^Jfqqnpc zqF-yIy;hZ8XFw_V)v-&t+py|bmiAtN!tODw!d?%av=<7y&*&|u!n{~mx%mbIr;urd zz0pwDdk-6hfDjI|CAnF_8iRv(BV9Sf;;;JW1cW$nYG^En2r;^F7L{U^>Yl#@NC;wO zb!t?piOgoOHgJ7v<ODEgYt<SjQxNY%^=T3zM$vkAch2saKSzen&|JARtj~F3;0zVz zPxbfbRd+`%)rhL%oNMzm180g^2w8gnqqP}4ovR%>QJV)lm|MNyXBB;Lm^2+o)P7-i z>O{j>t<t)$?SpoMhU^;~9;r=@9Ic<LAM^cgofWxq0n6viX9FHs=XDlZ1|k=19~&5P z4xvT`FyK69=`ED!vZBY<X0VYCR?Jz}bkK|foDMmd8Z8D(P>sLc;(*lTQO^3*vHk;N z!zWQ?MW9BSv@j6ru2wcuFNOh`4Va;MPEu2_7o^pZ-KybX45;(oTEt%%AS?(gMQ#7^ zfC8}_!V_G4ooXqZE*CSYzJa;xV3BcQOVIFbnon|iP(t?3u|Z`=rV!774b7myZs8jE zir$a-yqcx>l`4RF38`aZjNERuQS60N%qi8k&nxfrGS|$RZ+cV6v0-Yw<@3om>a@qJ zLAVB}cQ-Nx;$Y>Rgk}U$nfu+R@qpRpi<=TCoOJ7A(W~nN=73S=e#489QSik;C4(2# z$!a>B^V;B^zXTWyyY&diqO+wviU1KE5z!iNA*_g&4$;=p-YPnxkv3PZgHRDB+96sy zI??`Ad#C7#x5mANFREy7iMB(scqHz$$CT)dMq7|*1l^8kyJ&6ejDWW_N)U@3qNBZ| zO|(SgEkQz;Fv1>ZiL>0<=!{etq?}P5-ec@{9uQ6&Rf3=<2wuV;V0s4vOy~}&OUYeQ zxY67b3rHg<9c7Y*C9jaY8qp=#VrkSOu%W(G@@0}QmwLUF4Foo^Qp#q@R!Qd?$zxJq zAbGoVu3Nw)y9S{uSQp+W@Qu>wkz%WK?mz@Y-)`4F?mEb&ah=PdOTL5bJnfY{E%{M2 z`^{e_InZ0@TA+s%%!IcJVJ4iKZ=uFY%j(7#fxCKq5ijLs(eWmD;w|G%tdzBlxAIcP zH;i}q;n%lmykjHh%-0RSTFn+st4U~D<F)X&OVfOZfEK@gya|gayMf>MlA8{bn<TfF z+#}?^l-v}#edP9&J3wxR+(B}O$i11|W8@wu_XN4a<ent=7IH_}La)osR<Y96hy|hf zyR>?Zu{8)H!6RLoPlJ^q0z8OX#F#Lm2q@tQA%=vM2oK?0intK27@|kG<D0br^RytI zgjXmeiC~vjqA`Cf;zk7A2t*OALd=R1GWP_{%SzZnJSi^?6~ZFwhA=KM1&dcZ&S1OB zVY{mL!M4$f7<qWY{mNdEG?I=T4lQA@L1DfsTU(~X+V<63&DXFjf)_j;>ce9bA451i zKfj%sx3MJ4CKv;f=Iv}^vj%kWU|dd2CM4nF;n8)%37eX-WtcalzmA!&V@bWabTZ>Q zze8upg?Tqix?#WPW=+ABP~^Q(9?$TnL#1?lo^&U9Ho+Oiqs;FcS<=&7xx>Q{AFt5v z`kUFsNb>^oQL?)(xG>rw@Nqh_UZg$F%y+R~KXDY$2L0x{8ElS9E@pR>;MV9pEE&oY zki&cFfL_;yF$~$?Pmme>StRj(hM;%;j6YGXL9c0OZt3I9{2(+!SR;|)50e;vq5^iV zA7NV&?~YUYN)0LiR1hblY9gDc;;Jg2$*2D;0cW6!RV@_z1>(9%`vOVpe}S1_V%dpA zHABlwc;=6_+YITxVWp$PebsD_gsPOqqy<p8-W-Qk#@1T^t%oM&FG7Q6u`SIkL2aM~ zc`Wfc3lZ-*W_};rd|`ISLTYpK2Xr%_JB0BHNcR(JkeW+%+E|~cy`#^#%sRB6;E-VG zcJiNryH@`vX8w##z#blwn*YQob+B2}T$kB;@z2csXO{F$rbT9P!pDG!`3sh;&8Ce+ zEsUFgVrlUJq)&^<%#!kNAXo$8eF$ir24LYg#A=838z^Zb`wcTMBg0FfftGUO*rfXh zE`+fOlK)P1;U&!SJIaD?6aND<|G=_p)c%o8CYNQFJsomsT5{QBVi}uA)tP^0lXzo+ z<I4+#ZpB0X+j;Fa>p}vNG4K|{(r`#D*XT|Hip}6?<ajt#J6`{+Dtw#vC}Lc&w{i1P zUZ<UU25k|k(FkdROQ>y{_&ZS5A;~A~F>}d0&$E+>1`UsE9)s|5t>in<B#(2%Y4O{9 zJcWFGkXtVt-Df}yB6NHbV?NE3O&1eQta)!@1xu{N1VOx{sDT8Z=V}ano||7J0$Dn& z`4U&ct~R{kEy;G2mW`l;yII6=siWQOgg)zTcFK;=-qS8zI>VA;YT5_>uXnan7%H%t z?y{n0hOnNJZ)zi0J2k?cn@{#B+ZDC%%CE{-&Vz)#_?vTC_Q3!3vTS;L)8Z`F))C7s zUq!4n)?x1$MJ(PPnc=iy>On&u$4hPTY&fr2G!ivv!4*ac4BaQ0kX#~07k5kUkvxQW z(5Sdt>8fCoS4kZ;0B{w<9pge1FkNsjK`$4I<|?7wa&i|ir^_WYLXpCJjuaY7CtxWQ z-4@CkkPe@BW;pB*Hg`yTGb0M%DPqPhHXGUV+ZkF#AGEBZbLNockf;M*@3l!CKhX&t z-rIGk|HU8@KZzS5a+7r<jONdc26~rQC*8{OIla&YW`SzZFp<KjE5gcx5b=-kch- z4X+$brR`VxU`?SpkD_F2A=!(O)LlD2lPN`Iu7fgR0C_VoSVt}3iY0S$h?SYsmi2VI z)S*HfTboafjSZjhSm-p{A>6VGU7f?lKmoEMZE}_3M(63Ffisw+b8ZgjF!fw$X<VJc zxrRm)Sowi|=jgyO$`%+J?a5@oOAvbl{Vr-9v}EljpTeTCF-r*22P2C$;EQGXXk!}M zet-@{C|mcjAp~p4;jiSaO)t!at(~4B2O~1Gv2u?cwi|^f^Uxa&bGI1Ei%~1sLR^kv z!qxEu+2K=UwijnI*O(0;!Oqz|NHs^;7A!`Yf-giaftXEXYUIGs%Lh8<=AsZ9qqty8 zSk<6$;Lq0_i7Ii{*!)S`qi8;&du!)s*r%w#!|I*NiS5NYqn#q&5sSHU%`9S(Xv7we z3{4;KB8rIp(YDUks#)u$LotO`-yG`An#D465$el}Fw<OU1iHv%v)&$W^(&dZO0P2z zUKC#9Tvo}#o5P9lw(w5QJTX$-kZ5I@`=sH=Z8tB;V;{ixgI7vcg<EPzjno%QSu34O z5&J-={kPtL!gR3zb`kc0u}bpQQePwWh%}<oh)W&*Z<TtRgpI!5CEeZ9<&mDP(!1TY zm7!#x?^@~DB^|q^V~=$2mF|5~3E(+34xgXUIBZLu6^-Lz9iA#;@VG*Awv*_bbDGJ3 zjRhtHl(B%G{hBfYz#5y-@UT&tLJ=mJg1skSjvqALM|)k-kb>`;L84oAB)a8bji{3C zkP;$103Sf$zuuW-x4gcJ=N)DPU70iyuC@{@S&d&gUHAIBAz}+=bZJ{IGdJ5}Zbg%{ zI&2lT<9byozg<geqAX>YJ1w8X+>?|EsVOtUI+FSp16qf0Kj0=~zlY2lNZ(MRYyf-_ zAIUwym+_I)q0@wf@5}fe30;pHzG`;ZJe>45FHHCukT8?IKG^pT`phHA02wU~u;zuS zp!rf#*euDEJRL%$@>H^fVoTV?RLJa0mgZ6?O5u~8NtPwbfX$=Ha#-Fs1!1#n-i!%O zBQAt_JQ>cX4@3GBy}nu~^A<7-;PCn$=1{9ws1|w!w$Llk2JkD)S3@&R_EhRk=B*5C z7utYVW3UCyRITU}nd%4njI>A_scO<!zLTlO#O<Tnx?`dRcA^E8==Ee3RwcTZC2N2& zwA~tD$wiq(b?ic-26_cH?Z|vlyN2pfxQilSqqZ3D;8k{2ufpsP7claON<{mlqC{_| zYN)P%3nqf6!gw;EYzXf4-Hm<z4m6<rjCp}w?7;!?xK+du<W}N$>h`%#T<{;lj&9N3 z!|+f*g{cIO!w&3yN*oVH+50UYO6w(;CYEXlj7jM=KcYT<fF&z&Pl-Vd3G9RqTlkmE zb1e<_>f{Qv@Eb`sXPP6Z{29UP@knxYW_2XFCbK4jH`#QR9l?8Ta`FaHYX%#0_le63 zEufAJtm)}LI<RX1&8m#j`V3Z@T5YMl4k?Iz5z8{8XV>0?H)@fqEY3y-))kb8Cc#jK z9i`Wm9J?jMzIX=a3aeo)Z9Ij%TUn}R%G!4fX7c%b2qRbd5RMESF6KY~`D;NKq1Kib z(SjCe;+@epgNhX`@%DDa7K+$%-_g#zUD5z4`}qo#{aj?i(Ia91A^cJ=!S95=$mNHn zKkEEx68?Gb60n7!|M2)%a|THv&>7;T<z-=VE6A-Rw~E|qau<?YL+)bc^tfPtHXL1= zgvnRXk8aS9aO1AT(CNVe-UM^uB+k3I6Ey*KwO5fsb1)qtFsEn`Zs_F~QGx;g+bmL? zrguXa*E}!HeVE#*?Sm<bf#c@jc=UY`a}cNe>n@^<?DZEX28DUU#mPa#yzychMRae% zkAT7Oj7q}10^1pwL!2mHOE?mUdf>=7b~puz;#!9l(p;1Dstpb}%G#;4UX^Q{xmSg5 zR@U6GYv=Cav7yY6g~kd0HkH|m8*2+<U&OoOwC@zP=$x+$mAS5<Oc-xv1&;@YP+J5R zL!sg{buH~}wKMUI*EsgQSxy_pQ;?wWlF7Ygh_>jdk#p9-wGlrL5^5VCJEz0OLFo@V z`Ul3)p4Qpp$F5f^u~7#sVvh|BT>Uaio}nE5?i0iXZqEGMb4=l50LZE*1xQ$tt6Xt9 zwe3-_`Jy~-DWpjZj}#K9i{zl~#fjnmfdH)E3*!+izU)LnfSvl98Jo3m**#aW?Ci|l zQsCF2s>WG__YA0J8L^A@7V@)ju3}s{qiQuX7Dt33VDXHxr%u@MbIz2}IcG{Dd$@R5 zDx072mKe^Lo`RtWJAn2$>=hyrr(HD6myx(T&k9=fYHyf6%-7EJI;@{(x-~Ne>YZpr zEFNtO;0$fJ!k(}%?5OZKE9mAe;9O{2Q+bU+_-6{*-N76Zei%&23rJ~)=5gW0wZ9|a z3Nu$F%#zj8OY42dBI&4gEoD+Jk&b0j*11+Ph3xKFB^_<j(J3A4TwdMf6mC-Xh9AS@ z@H*h%Yl0=A(lX`?F28jN)AWY%dhT(!R*yGU;qMywRqEjz)Yl-wqjC5wq1#GsJGmX? zt|fOpxf{vt;=%#zdBH327D-g%-ISp_Tz=R$Kqy4RR0&@JFMI`9m`r+=?i26{g71Ti z3uVR{p_ZhZG&4%oCn1>sBs9@+7DKa9(rkg*yG_}X$3<~Fd@cy-c{59KvlAn>;a0&T z5V}X2TWiM+l%aI=IWM!Iw)HYAVc>)~IHfu`WdfXX$98jj+L4hNCnh&{q-AaCHMoSU zk~__vC_A5)xAwV%ixA?+opvokg68g|EA33U7%Y%+b(?S-O)<Bt<a<}HINeSc8O=g; z5=S>Mvgu;v`W4SY)fTf&1FUx3cbpHf>~Vxm(l(jh1H^0>$8ht&06WIukHZF`$vlX@ zZ5j_~P=OMS`(WF|g;5R}2C%K_wE^%R#V_C>Emx&5-i_qW;1(r#2`ewK8H~%UQ9FaS zug>5l!8w%Ze<f5NTFN|^3}zES2FcA=P9{Pc<}v>&EpTQ1^dpG!VZJI^Ite=sin*1g zMRR4Q3`N-p(C9V_NE-D!47Q@rfu*G#PDiRNh{!p2SjjOMwgqWpqCQn--ldkZ4q-fi z?B362;`e@r4Bt<eEe|qe`5}fpzZo&=^GrX)a$G;ma%}t5;y=&#TMGCtMT1^%E#&NN z$l1%vn#{Lb0P^<jC#kfQ0FR%<#lxowDE~8borJ4}2(1<tB&&)*3<QM1TE03T$Z7`l z+!Eq?cWw!xj<eR#Io95h;j!WF!PHO=ZevST{={oak{5FxIycz0DsSDC@?ciXAIW*Q z7aY7<pL!)=G!s~|KAe78{tz#4V)(>%1t>{`y+Z{LK15?ZK&OqvBctpD8=CXXuQX2! zCS!^i4Hss}CoMdlu^0ZO2M*r2v**a6-P?C>Ke&C<&h0n#Y$?KOb}K^rhlj`H03Cde zhNrhnU2CLm9)Q|5bg4Q)9SsgmVY~{yZ**WZwf$_VL~mi^%yp((mg?^(A_s@_jG`nL zJe@=om4VUV=#)Y>&N|Z8;D<c_2rGwzraWMGt1^MrhbcVie4qG8AjoFgGN8*=&jfqD zW_At=M1=BH$eqX{IQWUNhPf+{L->V(kn=aqo@dJQe0G9!<KwDw4o@FG_I_~r{MtE+ zXtXVztsTCiYKgY?_V&OO>c!`f9r0FLp@e1FaF#mD!xhHD3hAt&Rf;QICuoJDOwKr% zaFOMiI@)K#;)JAvV3TS1P$Wo(@kmmylDyirfYB0VF|1OgSOUuuKgk8LdNfGmXpo{w ziZxP1C2U&7Vkyd`h)LNZMVl1srPwI-O|DJ40}m5f1#cYp>blOWBI7H(D_O;&_&9uk zTIs0K(at;8cCI7$8ge&~+qGGv-)^>4cX?pL3t!0uTZ~)JT3mFnG6bjOOAvBWN1N+- zq9_c<EZU%kOBbKfpLgKR7>aJxj_XR?rFLBO8Ma~_ex+bt;ng}&rez(9v~0Z00{S*s zYlz*j)-d+KTEnr|T$kk8jKh-O*f^1qK+f!%#FN4j_z*NrqP}6q^&|monVV6|FXO>9 zTP8E!(;<|(=*faN;e!Riwuy|NWL~zX1yMj;FZkx!B=BRs!zKaAc4tvM0N6J7q>W4v z73%iZX`_8II7adUOXYrZKk5`@O0YiW4QZ!&BhVvRmP9EhBE8A7w3w(*l<D-Cf;8#L zf+UyBqsg+#i3Un=$s9^MEwwxIWm)tS=X=xg3s5d9NtEAy<%&6+HBV+UVRb@z3;4{D zqH==>$~c-9<9f<(p30i1DKT1sJcEhP7BUb-RJC)HkW`v4C&R05T|9(ccsDI9M4vzm zOYA!ANY!`fKntwU?q+BT72TB_-JpISxFzBZ;D!ube)t@3W#)ZsLbatZ-vBEIY)k_d zF4&rm;0~)bAH<~zY5`g8`9=nf^$^P@LlZW$&%m-owGejJo7hCIiSB1<2egp`ficTJ z2yOIMHj!~4!?-+=r$dk8vb5Prb~)4X;pSCkcp&>u@Z&+o)1i<$jfCz@7!0cytX76L z%fQJdIfQf62%e;#dM1bhQXgYDT$)#><@rP<WrCGX+I2d#3L-xZK3MG(0Bt~$zq9{Y z2(;P%9I)@Q*#8o63tfaut1qM1{M#uR|4x|(LTt@P@x=L?)Hyo5V21sI>A3Rql37h3 zy9jPG&oX?iP~^rhe$UK{ESsr@Oy(q;IE^A@<}+*pn*#dXyu>C{OQ4qQKSE1PP(xe_ z;^Fa6Sl0Y0L(v${GXB&8^Jft7Pj-MzEi`}5wgyo{_19LLOsFQgWd4rfOI$-4=^gkz z%e`cV`3LB6wcz|CD|q+*gH4_eEkx`}27838{WgvB$+TfT8Rl&~n-;*!?eJ>=3wQ8B z^=@n-__1KKjJ#^d!sIeM!-}ATE6%04quf97>6h*(yKi5)<7MdP)F><@25#OvaH1c+ zYW8xoYGvV_T0y3@Gh})(3(#%zyO1y7VBHKHz_-(x9v;5=cxvQk>sof>3#h<ME#as9 zwz9{lU!kRMwhAGehVxhmY@6TRXaRqRXRcoEs5si*(N0&R6|+>ZbOr)8P+WUktF$mf z+~IOOJvQ9djU#^8J%|>k`=k+;dW9>DfN=)OqZqDn=|sQq^FT>3L~bd$W#m>e>2x{J zo*3CTV>$_$a=N^8(B&OxvH&v9U$ncY!(Ck%^)PZ9F-B^Qmzk5{rNj!{WHn#R4svtV z#sA0Mo506aRgdHEzU{tQGub9-x~1)OZ|TfrZwoYSGTj&2Qb0OWXC^aEAWdo}DXofz zvbAgl#Dc6Xiy)gIqHH3H`V|$-BCQJwE{O6K`w+$5{?9q@y?Ha)8s+!@`}zOU&V6@Z z&%O8Dd(Se^Dj83CHuU?W4&3pAXdv|SEc8D!Oq^lUzK-~=wj{m!T7W*$Z_5G94gVl8 zT{RxDgt>*`QwC!6JkgU#0BYz=;>}h&-b&6Gxq5kRF#*xSg59}cwgkaRqvS;I40%uA zhBA;b;ks%(QVxeS(E?%fWg}b@s?R=Z)P(CS!1Vfk^sM0~z$B0aY|(&F$-$LEgiQ|v zj8jICl<;BKc|df+9{{1C6%c|b<-BGX?-&(K)--@o=D>$#MzARoY)XvopF~+eLdW5- ziTcNIRXyE+&C?M!!ElJDgXc1Q7+o#tjf8BF#yC}9*B8_`M6+)SD3W50ESc{L@-%|n zITqnm4*24Ifd#)C?1wmmR1g;`nDFT~Sg$(cEvc>*<gg%lGF}g7W1eQjT$~&81HiOv z2Qk>CP?nawqo=D~IDKq2Synx^8}(R{TMvMRMW?FkBD*}2H)sILoKq%)s!@DnN-R8O z{9K0wiN}Qc)5lhOGNjGhhqT$CKn&Mc!}8tGU@YdfHTBM%o(<L41dB(gvpYAdAtWUY zHL7`(n?Uo17If4Os?b{?Ea+Y&8<8s<6%3GLE)c1qf>J;MPXRYC5Pe03#blO{SxTm# z%<_o>eJ3$ZcHndq6m>J4p#*W6q`2KA6;wf~pc38jN_;aMvt*MPQB+ig7W~P^q$;+r zbC;fAs<<&GRvM3cc+2K_SJRin%xN;^;fR*!+2DDOd8v!JD?ad?3$sYm=hObM(jZBs zJwekaz@8wd<scfyi=Af9sXHB~#)yzjsi`Zz6VA?i_gRzcoVjD66M0EK$j%Y@&#<Aq z@&VG8jJvYKTWnn3jfPwluC@|v2FxPWmFjXMs)3#;bWg#zrwqQx<At5qV7RmB+_FRi zIhPrlg{&x@7j>k%JQjK3YRYFre1m!6C1tvjtTU??%%-&}$-C}aY<LFpJx8Y7nwlSJ z7`fNPF*2EyyIn3GLPln;RU_yyo167&N~Kd>UC>T?#p-UOYp<Ms8H3QXG#j+qqVa=; zqB2*l)9Q6Z8E9Tz8n>QVs)*I*z1hAMBz4w$!z#;$Z%*yTVKdW>dFwjL4ePYL%4`L+ zWNX{*yxNpxOUr3Aw!v&sCnnrx*)7)M$wP+Bl=j#azX(yK$$5jadMI&UPKixL2&Y>+ zbKzKN%K*5seeSj#Pgh6kBI}{iXAemnZ!q`S7ujX2Q9j@5j-hjdIHhr3EE;V>j*?J@ zX2<P;#w@aVTEwkmUHj&XFU_Mb_3lc=Gd*1vC9=nI5}ESI1hdP>zns`)#rbnT_i=s9 zEjIF>9hio$fH}vdU_;^XHQG{Cm;-(PZ&8Cv4Z+YX6SsAg7nV8blC`j6LPbTz#EMB3 zlPjiFOw}s2Y1(vch8ECfYO}Q2+8k}JHcy+cEkI@9TD4ZME%u-8-{3z>nq=zGB6dxB z(=GLvl~1UcIBD{fsZ5@0-O@VoJg4}$oTEBR@=s(YHE3~&OJQDF#mj5(`gK|zpWeWw zC49zGUVH{GK9d(O<5E`aV>6c`oI_^od0?Ysy@-^jGdJ-WoB50_e8yHDI9oQTL;<}( zhDyZ1SBk6FtX@mzIx@Gh%4rS`d;L@!1D|4I;FVbn-02#A56hU#?K4h?)|qfVk#uS< z_doIeXer&#zB&h$F`zOQx;{cf#VbFK7fH+T9;p#8XIJ1YQj>m0U$Y|2)t5yHKaZ#^ ztw9!gBl0iw9Mf0yr=6MOdK2F2$v&CktzMZNIl;=6^?D?ms6Qd6T@g2<E1Z=H<!}++ zR<81Wm#$wu0}&5H6%_i~gp&3`w(ITU3L-uMtEg{Gs9E25p?(%Pi_%3;6xHJ;U!A%| z-x@7SD3KzTF2>gA+rX)Ulgc*kh0jUwUYRaG&xIDpi}mvpDh0<&^k}p+>W2h=7Aa+O z^&NPrm@b1~IdTu`A11eV;Aq^dCt?)|HSL98`H|KNJsF#bQClbKO$qsh4Dr#G{^?&Q z^|YyPX6H)dOyg{(k(n5sj&zDa)GiZ5i9f;U%=FA)bXIy+FgiOuJBTU^f=I?lhE0Lk zTA4lf{5&5=qgj<%w8EJA%i|VhRaUrrs@z<jjF^k<m>&cat2remW)!!?E)L&CTP)H1 z?&Y0(vvT@9c{R*YZ!lxDs^_%VppoJ!gYm==>>C(0of$1FYCU@?VCWCn)Y;ya%r1Y@ z#z>@U)U0gH3%O}?PFMeSQmB+8yHXakb<i;ec0a;a*lzRrZmPWrZEH(iWRgoZcC>7Q ztq+P_Flw<wa>VjNqeixrNDOV<znKC#K=PR_W{*+7+<5;chfraDwg6wQq`~^JDc+It zb?%OTq$jmJp1g1;NvN(KwH9Nr{+Oh(WA4y3r`(~9BDd$w3~NL7j|>{QBAZ>Qjy-K% zogK&+D0kphQ577EOGfH_xw@_a$z|*6<?4n|t(Ju5>;%+|uOxZb?T}T^u9T@uxx1?; zwICgD&!pVYu6R#-_cokaGWyF^;f9c0T~%8n*Hobr&bnZo({6wSy*(bLk+E>H|3eHV z8nWd?U>v+T{kywkCpT{eh>OZgJXjlhx(x~g`NFo27S$kI@KDg|4kN^C2z+lc<&rCe z(iT{rU6%ADOp=vaZ?k$C0n6ct*0R2{B~{pxl~Qf8$rac>D^M)CE7952Vrt1QNMvD^ z!ZfSShKgQp)>GSU9#@b<v(9NDQvTxdndJ=mW<(~>u()P4y7KVQm4^?>pOqrQeEeLY zCu*dzo5ZC`t_HYhG0Px6RLyyS%gedE!m*s8lxwY-J63YXYVKIW9c#I=jw|b328!bn z7}pAV-GZwWY_76iH@GLGdkVUzf{jlTL|#%dr+4}cOfzMkIDg@S(}FA%CR-JmHDuP3 zSr?S*7cXsCayq%r2#WPf8w~rIWG*AKaRU=JZW7PhvUw|-XOp?@95l}*^E@&?MCSQq zZYMKJW{k`oWPUh~W`fM>B$|uJ<Vh;2g_Tc0R81>Q;QlW96Qq8wG%3hT_9sy^w2~A= zQRSYbpop5o7Z)_<EQ<>c<|4$-MTnh~l>=f|G#piR3COK8!aD%-cqaiaa4z8!A3{to z78CJ8C@r^&`VPAN7d_r82;GgT-NJ6YtG`cHiYEf{)7{svDEhvb+K>Dq0oH?ZUKg>R zR#pF)!OZIM7DCc1kb>&~LsXB%?8;0u0<L35rq?k;ys{!n9`6PSxPx9O-N!KS4yNB_ zu%8q!G+24=VaN~CuXvCh#GCda&(D<*TfY~dCN+AD9Uw`!_nU&2jpDw5_4uM)4{p`t z8M7YGF#UNFnt&a%2m)Th6yIfi%|6Jij|wxCZS}LLn<PZI85KlQm>m*SzYdZer~IZ1 z$Jq%sgB@r3j~OyP6$1YEGiC_xL^SesvR4BB_=X|)fHC)3G!$#26)3GPh&(#M=;ZX| zAhO5=QIcQK&?rS%-SqTylNESEdIA|aY$lUi%d=?SW=|H)OSBoUaLe2B-XM444T>4I z*bMt1DBYqlQ984rC1yeRqS#_`r}Io#5(%lbmQ<!2El#u;IFPF?)4Vs8?7=&jf;K}> zH&|(taJ9z4qlI>vqMo+w5^fT?d(EOO3NyR4PC#_bz>490VD*!^A!UitO{~n3qWYu) zVb)pLeNpE*@qHw3DAfh%Rk!b=uJ~>%#fo@)ySuFe_8g-PsgX)Evm<P>XlUv{kaxGX zWg5G77GTisR7<ut27#9x@7kG}FeGeCPcjJ`NxG+9A$=34CYdYEe~mpYg(C7YK0MT$ zPn;w)&(}7@qof%yF0&<@QyJ)g*nUvRQr1z{l1lXKY=Qx8>mWSA=*5iE4SRLUZ>C*b zX%Bhj>6Oj}l~e<?ZpK?QD$LoHwHh+~6pF;jT-{{cteR5w7LL%<Hexokn^7eV>oD&^ zy*7vj!u286HhaXp3_3YvP}q|CNb^T}U?!Mn0e<fKbtGtzP8J?Rj-Ckt#S1D;Xs<LX z3QcqX8e`x}$l6c{P;IImF<Fn@xrNBcxiMCaa^cNuu_*wm(Gmy(Lc42MTQ^M}C%qC9 zvotqB5Fg#Aj*xS1CS#(mi^fD<&1|>Z-J88dstzJoR(*YqJGU&9x`oO+La1rJuC7iF z*M=M9+Ujsv4u|T&s1Db1GdH;^R8s>;Y8chUH$Yf@eU)5Yjq<u`>T6NEd~N=_4rJvv zksV(-EAwdq|I7+jQLHSMRVFE_!)a+zC-#9ldi62nO*kx(6QuD2a3Q&XSi!QlK;>MS zz*z-X%eXX&v+11A;2NPrGU?(_=ixQcd@fn6!xCK<p|bTVBJis=X#5-vqNyf?;Wd$? zN#v}V^9YyLa&<LV*N`Ulv$-5~L?wfOKyZ6J-lASo0$=Q&colQI%Otnk<F2_5tf-`X z?!0+Rdu!{2;+29}Jhy87{?%(RW$^}a<5`<FlevY=tz>Q^^BgkICG$KoKSbvFWNs%j zM&=GOKTKwv%mkT9GFwstebcPQjm&L6nPhDtK?8imYGi9b7B{cJWO13`7MP+f6Xps` z^`Rs!u98FJ^l=m{6KVhl3L-C@tAzaAj%7lXz&!IQvG+8T*i}%7JQF@bo4kZJaaMz` zXN7<{j7%;eE3(oGd+8$MNqP}JNiV`DX)v4;;t63yovMj&qJ{`3YWoITWxWo0;S{|g zrp^YOXmO0sZsq!tm^Qmr)0f5^fs?Hc{R~nskdXT#E@`fQCOvE`iu=pR{CXd=I2iow zK4$VRlnM6{hpU=akr2_3oVo?+g8j(0>o6T@b-zI;_85z4v!FDTYV{=+Q)fXvzRaS& zKICymmWPN>nv47beZhg?hlF{@gVJP83Y_#!H@z5mfzN)V<imK5xsHUa$q)s6^=BD1 zZ6bi1@XpDT`d8RWamxiAg0Si0O90<sMKA_#w<L4LdrUI%sdMHf6=>09`6Y%-8SY&Q zH7vyjkUe8?my}`&d6$fWyIw+V*9^@{5zT4ROAOGlSjp_x68-y-1lcr9#tk`ADq?1+ z7^7qsg!iMbvPvIhzO4)zlTfgMNp)Uu{w}7!%2HxGi<b96Bxy~#p?CS1K}J?Vs+K1j zB$7X5(MbyypwE#73y)x;BaumL?qp5Xf5Lo!6U>}hHs_y?kjd+#XYvc?d(z58%x3aC zs$P29%-{2eh_~H`N?_lyeBaIW{k`S;hg{zimhW9!j<0U{K7zgkB7Yz+359&=?~hRT zzl>h@f3nI|(uO@3`^z@$InE|e*|6t!acZS9U65y>{us9~Q&8N(Eaab=Ex^L#mQkeL z#Q+GGiKr^0+mJ?fg4GJB#=MT9Sub88>Q{*UkvR~qUnvd_fUShYwk?qkiuys(5K6|8 zFUXQNhJwwJ5^yeF!%iGP<KaDpKLwDyN`&BtR?%(kb>eK))`IfLevKE|pC%32?pJ5S zLE}u}W+;3ayHnI}7Nb6V0LOz+#0OCIs{R=<zhh7b_iduxF^xz1saNzn#aVlf=|@PJ z33WSZFDOZu>?xXq8lgp;o|dL$nyT6!;;MQ;G-m4O#MzL+Ba}f_`vInhG!jZ~-&1rS zM1NdF7Ifr5e<C~a!6ULz*t6ft9o+p7@26U9z`_55k!D_c-V^)t)9kl(H)AMeF#(f2 zAx2NL5?x7wS4K_~A<v>psKk?oQh4a9ev;(=lo*@e-#TA^+HA{nq)A;?75A;UoPAxy z*?$}+|0?n8qCM+Ru+_rX!Cb?>F6!SPoiZev{+r@T{UtHRXThrZ9Wfdt_N*YA>+|A- z8Kmhf<ANo_f;GeRW9SE7`;qS0TCo&Op%qKkUlC~)&aPN};!3e$?M6YU-I0W)HzcsR zLRb*11a6bPl|^gwB&gM7&sE2z@e+NS$TU7K4x#>>UVUof$>FI#$l2_y4?+eyyecSP zttXR;0Pdx<Aqr^_CJdz!J?lSd=9oQbq1cG38u<R$bfn{X5<TmK(2$PUH@4h?U_-SW zY6#cJp}KGo5Z1Z|q)-ZtM*cBrtc=a`=n(Rx+6IfT&*z^^6sH9?#c8g*0=%;;;Bp}< zr&FeIX{uw2L4c|Vh%IVvLK^7~PAe8m{H0}NmXkSw%nC9mk~yhTpzk#1_8@7h0+^h` zz~nTPC9q6zqI5JvT7gQQO3uZV$lQjonLL8k;+%^rRaRERtea_IU^5W|n~50MOvJ#z zaLF@Aq+ca8Y>|P61^W^Tpg*B}n%45D7cZBBXyD{_XD4@&G?b=wMSEu^WmB|@C*iL^ z5T=#b)Sh;f4<e#t#k!4KngyiY%%no&A#k;e9fQ2pWc{ByQf+hEHiW_zXP46swP{={ zM$G3wqHqn3hr%_ljrObxqY}ybs<0))BNPm0Rdv?}xhcJ)$W+!{V9D=rn{z<&(KN8; zh5{$H$&NxekxezFcmOu8dJafP^2#Kn1Q1-s#I>#X#j*+I6=Y5%a}t?T$gE`CMO4}_ z2k_&@XLyN(bI2r|!_fDQ(m9A&TQ&${Ck$i7t~2y|8wU|ZJ?&jhUu%dAT8kosz;KCR zxTUoavcV*f-Gm@75j(V~Fh!jLVVS<5-V^1BSl|^XA~cBMtl@Glt*oY(Mm>178O#;L zfwbNhUEl0wBfS|nwe4wZNwqBR+)Hyqev1p{^tfFb@@Q;F{Qz^Mc+=*M=bpEtY4x_% zP0gEktlrSnd~O~Ssm(T9*g^$%HKx;@T`f2rCR<FQ_%xVH*+m%$J~Kh~6=vKI)OOQQ zh@qLyy7<0SSCR1;Wkl$rs}?Ou+tcbMkFigg6?f$jbU8L`+_B>9&098ZE;0nr8H8Vk z3Ul9%u2cpZu(i{?8!GJR*=4-OTBJZ$6=;8O(la@^r{;~wX)W1mn|qJD9qZZ^--&dw zzIaOu%{z-Utb(#{-b>D;Rh=QrgJZ?2)$5veG&VIABr$qpOAB4trn=ll$mZtt8@DwV zQQ&5h3}}YW7!6!<fXui~vq=D0n|o)f+iYE9_b9>$a|8j-8nuvYp4oSOb48ppY7)rT zEIMPUJ6|wr<RODb68p`ycF5!Q`1638T66~PTq-|jTV|X2l&kG(>!8PP2UtuM*t@$- z(nv!ObJl4DvkvVdlMFy>H7(pEVH^HHZqW4kS`wS`GWA(BZ|lwCoh=E=T9^}N6zQVC zk*MW{kkS?Alw<fP1V{?D;T$qo$=G5vRw)<Z`>xW8raQ9>#oc7Ou@<?GRnDEJ)X2u} zq4W|Xl2BGa{N}y8+uM?D-5a~s=hk-Oh(Sh0-Mdp=Nqm{Wh#u3CqbeLVgrfp$w=v^Q zM30CJ%|Y-Ow1%c@-l$Mw-*KCrmn(*AOo|9k-fC40-D&hgW6K3SnQnZi8BQ}H?%Czq zW7Ck3yfC(x=#%$(jJBBhRga^_qmfG(grG=P>(1n?g=KA-5!dpWqZXB$+M6Ld2WxG} zrS)(cL8u-&G>&TLXEb{0xr>z)-$hH4wS*KT<H=ToniJcUDTU2&cTaZ;V6?HLWqo{a zQ>wi?j>0>4lFixPwyUk1tguw$0NH6vV5P_wwY4jrybyXOFlx1M6*eP}AO)10y9rOg zsib9NM=q&^t1Ety)$A<U><DDp`J!2EvR;EG{j@Q<I9IQXSw{x|<{rw;ff|X(=CWv4 zR>pUGYyuc?Il8U=+!@cJ0$H)S9<y=gYSJ~Fns+RLz@|J{qOg#$7p<L_W|t`}&!7}O zbsO_0iy;-*W#9^AFSS}|#xSslGP|vL{-t@y#ip({h}OMNUbTAVDhG}Qg^mu|xe~LI zG+T@mZc~^qIl|*g4xrc#-Df1J9#;~3nh>}+jdR7$6!hh$PCWJ#uA%HkyPD~S7M^Q- z&hzYS?@Ywow|1`Ugq{kWvd^KU^_@ML)TYi19ZvF&Fir|01jlXG$2jA`O1BewwO~j+ zJr-KJX>;?IEfy#kK`kaV6J_AZ182UcEz<@EHLHv*-4K>f&nP!-JZFQF!2t2>O%-{| zG)afH>R*V<L!OUsXcIk|eSpC2vYy1(Z#;WT^A5zxe7i8(dK)7fo7%r-Ttk_`x|lUZ z%u=(UShMzEPiK3Jy>dC$H=es=TjRR3o5jpW#a(-)o?RW{t_~TI1sPXC2keo?WYxfC zAQUNc&&?tcz8oK8!_Ahkx+C3Ln1`?j!l5d8cTcAE)NkbTPrXp#B2F!F+ScIslG(jr z!Hx-gCRjCXZd|Ff;DUc@z#cl51y&}To7XirZfTZbz&GcL<}Nnuc^H57IET1%cg_eS zOA%t7v@_utk)`I8H6Cfp664(-YA|ks38<dwito*JwRJ2{wRc{W4I>vP*V(&`Z&OF1 zwTx$p07qh$`u{8YlU3x%3@y|1n1x96x5X-CB^;IcZWuS(WSfi0-us8-Gamk{|0|fR zJ|I6;9>-Kk3v}X&PC&;qNo#S>XcmZT7IZh9dNDB&$HsP;23QI%1Bkqrj}}ln-YoNR z(NnL6Hj2tFl=1A!J5m?n3g<{#Yn>ENWITBwaO%|(dec;`M|l?vai4m19EvYHx;p`Z z+60F(2cFD`m`g^RoJ_T~SD!M!5l%|^l*vP=mb+5zkgUa|Q66&YG*2fpsEc-t9B8iU zE?dlKi)Uvpid{e&Qa2gLOn_GzM{pebQ2w1w)%X(R-Q%d;B!0GOd`ZV{-#9Lj$4x7r zx94XslIz0N)pA29Tr1btgu-$|H7fmUsH>_{!nL*GI=LZOQ>Rn~YXL>5uc@n&8^R%Q zS6A29$n}Uf)Hl?G<oaM;PzhJnhl5HeTor@}b+z>&rK+kSSSQytGz1}=P(7*{4Anrs z)%CTmoFkVKs%r=~Kq1w2bxJ4{tgctWHBb-VP~1rgR|o4txpe%)sPRb`VvSPOPy;#A z<Ct7u9j;cYLg9wmf+6=uP*_d4RteSDg`m0h^`TI~kiA?9*HuAwp}MM2J+!wWEZ0}n zf>Dd~RCP5CazkBRwLABKpoGKqVQ6Zos=fg_r@mUQ4^;=1>R`Aw1Z9L8paZIE>cdK? zHdI&R$vYfCNL4MAh8?ejs_TPcr#)!MA24+o-nKXouUmME@I`qpr8*pf##M*vYr<d; zH$XK3*$aVBZA1M~CWH^bTVONfKtI&ihHU<VocjLf`~~@}0|tM=s0;*I766O*U!ncZ zcsw$NB#IrKD(Z)dcdP4&9MWZ?qnKazZW$R0<Q_bYkyYAfqpgj|K;<<Zn^WzncqU~F zfjKSrEM+Cx1dx!i%0bYRYinV?m|_>4{=#zRFZWOKhsu{~XK9x)?NiMES>}I~`JZOm zi%j_e(~hySr;+b-X~pkZ#R*oSvx;|F#UEJ3d#vJ*tm03s;(ez5nQ4Dv+FzOWH>Ula zY5!o_KbiI~rk!M3uc%!jYWqd)Qc=51)GimbD@6b8qH;nkKOrhJn5??op2A#K(8_7k zX9Q->nmuRky!i_jp0=o%iL&Y&!Y=A#MK3Z-?y!oY{g{U{uc`1;F5;{h)mE`muKGDI z<MIR)MyyTb@?_4YpbS4&$>kYbp2_7|Ts9>9&ExU{E}w>?{v2WMT*BqkIXeTz`>|zQ zZbV{1c?Fl7kXTTx;_^oB+QeO(xoZn|RdZJjcWvdav$?#D%ja<UTrQr+#Sd}ueC~*H z@x$D8CU-$5aqdiTxrNIqE~mM?lgq7~wQ>1EF7M)U2Y2q~;zzjL#pOMmUBua5&h~Nk zQO-Wb*~hu#6WnnL<MMvS-Iu}_e(u@aeK}aKfZvtyI|RQQ;CCbAo>uO;39O%n-(mRO z0$yqE`3zWZV_dllzDMA96n^(G?!6zr55n&u_&v;c!RHy*9)oWF0=S=m-xuNcB;)K$ z@clC5zNg^(41_-mU(6GWdJe+B0>9_s_f>Ge0Kcz+{p*YuR&e$|;QTh@uJ6OI4}Sgd z8(_R>kn!SIA=(ci{3q~xjd3->)fiWIaQSE8@jCq8fINN<-(Nz+U%~H9hMHNg6uEo= zeg^>>t`;4K04n4g;de;nj!%hv)*{Y64bEFd9=rp-cfxNIXGh?36n=NZ55{aOmoex2 zMPBeZk*hHF-xRs{9SH1)-w(k4L-@S`zu!XeZti<W<i6iS(EH5sjwtbh_aXZ~!|yNf z`zw_EH~9TsbPO^%AP7!D5T*&NV&a_M>B6M>f-rd@xF!d|Rk2+VE1H`x=#A}w@Xp?L zp&}zN@1*YDfLJl9`QqL{54aAn-hc$o=3BvnF}-)Q-cJe@_cDP^^4<q_*4*(3>wSQU z72b|-fctSKR2*l5Q1K&(Qql2KE9@6$*ssxh(p6&bTj01x6j*cfwPNpU;J8VIREN>H z4ZJG~?-L;@d_QY^A7u}q1skOZ&G@H_2V_w){v8s}Iro5gP{iPk4~pVL;v?e2;-g~L z`gz;>m~DOBwtm63K4DwGXj`AOtzWXOU$(7J+196R>od0XS=;)YZT*UEecrZy)waH1 zTfb&oziwM!w5{K;t>3b(|6^OfZChWmt=|>DC$g8tS8Si}+txnYI$&D|ZR@MH^_Xov zZd-q3TYqd@e_~r-v#me1tv|D^uiMt2+ty#$)?eDzU)k0-ZR@XX>sz+<H@5X{+xow@ z^>?=QUEBHx+xnhu{iALDlWqNn_)n1u{}NA%Vz0Dcx<tBEGOd@{*2|?UEbEoF^?+?X zC_TVT>s4UAT9SIDYou$XJJ@aPIw|YC({#${JOm!D3$K@Q!f%j<gx@HAO1eq<v>oHH zbYWfujWYNg7JZF$vviAP{fuqB6|C9j-X@7pv8NdlPE<LU36qiT{xDl6Gz&~}FB2w- zC_W68G%J^|Mxm6cb195(Y!oV(cC!)F;WAP>Pj3_^GuOw-(;c9XXED)}dq2@A6f)Q= z;)2S2#f`!gR=BBAn8b>dWx^J>n-x!|=p~+ILP}tz>l%d;=6{T#zUH#^jlu+0zIM4F zu?bg$S23%296m*CVgVH_PMTcWC`@HjE`|Dh0hX+(cSG<*R`~>5At-EGH|mC-emnS; zvl(B6kDmp~P=oZ$i>c6A8|X9pGmw0;z~*qH;dA{-L1gouWT<|6{u6AuAhQLtDC$BL zqDT@u?S2TXWQ)#f6v|j|H)@&=MUYuA{3Qq|U{zmc$TV1e9eg;eImn)2j<7IYsi9nI zZ!`L@?k?k7UrnEeTMg%8B3_wj60b~R5@WDE%n%PUR3)(FDfkG*OHV)J%w>(sS2Q(8 zR<2sTX6?H58v?|AxM-N#nP0J(IP)#uN_4ghw1~{+lFfxSL;rxsdyu{B)=!`~PPe{a zj473^ihhk4Qv)YkRsBgZ#tjj?tz7?x7<0~Ubt1*6Yj&$k?-OJ0fY9pJ|18FcprzHL zUm?W`X15mT?~*wA_gK`2bnxk-XmPqY;uGhhz)>F>=v#u)MoZJB6!1Q2tVaICB-G?} zB40j+Jbtf>`p?Ba+23Cb&DVb^_Vp`%{nsLr1@9>eA=Pq#{YKP(BL;-bF<+@5IP~9& z(XxR^8H<z)b0J{hh0HM$pPHUf`o_tV`tL-WdD5-lDD?&Pn<OKgm?t5i00NF+z}*rO z=pa!u@@dwB_XCo_d-#B)KPdHMXff*JdRU6N`k_}Ik@}JFSASHBPKiu`@*k6kMz_S{ zy+?)QUxVbcU!8Mo&ha@(d5$f1c}`NBlXO(}PE9)JBwcfo?m0=%oTPVlvS4=7Hz!#* zCs}lYRS7?oPOxhBBQR^kAA?yd{RGT9`86=>m7jqbP+teLfnO@0V2icOWc@{{uelN` z^0E}2h8&HNY3%UGs@<Gv=ixm?L8$%rrPvG<d(k>W?~`IPQRGGIOub)<&Bh#BXX^t} zY!0g3YMrAGN-Onak^vh(l=>p`ggvk7Kav7M&oTYS_&Kis1V2exe~rG1{xb=ADN$(i z>yjb0`4c3OB;xov)P1G%*I=%4y#?lK_iw>m<9Qp*wcg)>xvt<HFxUHZFgFyU;%zB9 zH99}RBlB5gD#H%ce<>xL=>><eRr;?aUpW)>UxQa<A(ZaY-$LtYV0G)i#fXb~k{<nS zv;}*TUj28_PhbyGKP3zFcMNyfaQk#!idLno60U?NQZ4o*3-xym4|l>#9!2_l00Ud0 z=sy_&1z3-Shq!kWuAYHNjR;-yzLkxPZs?ppOM?j?MJ?J-QQiBGK;QjEN+=2U5$HDG zCdl(2(tw#^p%Kdkv5x8gloE2nbp-SImyxlNmDecM-7|=#9M?};bycWT1qL8Te)UKH zbyB}nj@G7YaeN|mtS71Im)Rcm;Nj4(kYh7qfq{f}WL~nkHIOLQiUCfplw&hvvj!6m z@|{J#GxY;<Y<6rq)Xj)IoxEr32j$qD*j#9s5qmCq&(W`vQAdT$J>D;hFjo%AxC)pe zaHgUNoQ9-&g2jYG0NXnln)Tw1U<Ra5$@<MQlKa~{0gKa%_Y}3F7Cf1t?YMrcY>2;E zMMAA3^6j#IyG+0%XMso2@01gY1w41jK9oIu4|oNH_!9kI!?F~zvPH-|4r|J1<(2xQ za`g1b>8RpfMsDOYU{(8~Y^+ls#&s&Gd`Z^7BuCFopNS38pQ6BonqC%f)StE-%i}Bb zXJunKf;vBE*0~H9w&&$&Q$p?^h%`xaA;hl2FQ5uvlZmrh_INMBHT_%Ec_>2Y1Zx+* zCF|dYS~W-5T>ZOdrOv=g)w7qe1I1Tl{bj4vWBMyt>T#bR3+<DmWrMJq_D3-BEArqA znd5^4rN4qAe<0(A(jQrANCi43$DFfp6_5=zA|CHzsK`&DBKqrcU-K&HnqSD#)#=sQ zF`{}D;JR*z7lp9&n)n+1SD1rSf+cqf<nX?XOKw1TU)KL3N4*%c9|z3KPzyaWh2MZJ zKA;%U4k#yB4?CdfS1bJi0XbI+4c3db>9vpTA<l<ul$H7+l4cqZ3ee+v@Hni*)PC6Y zZdIb|BI}^Cw<*!}k@aA?U5RaoZXAegWUU+YyOijr$R_YTs+dds-Ac5a_L}>Y=vk4o z!17rI>hG3eEWU*`dq_b(81J#l-p$9ch7UmvKgpf|vzLiqSM)~}Y|~+42YO72DbX#_ zt?8}NEo-(2k+WH33xiGh2?YtM*LVcfu<1Rff05D*M7F`8JgxL2lL%?8c~-%+_<>;k zIdY}XLG6#{0ziJ<jEPYFq7p5`E`YJ^-ArQXzoGQ?ZiYJQ-%<t!<LBw$RtEawAJV_0 z3_wSF6tBm7nGDV8Gn$i~l~YkLRfDyM&B@upu(5s6%osy+hlu7Ur8mJm$mF-+a}`s5 z1D~Y&Hkem4{yX?w!?btcb1ie6fX{WzsVn-M*!r@5+|;r8u*|)s;LPpMnYh0(d;;u9 z)>GBrR?PXv_1`Jc^A}vrBInbx_71wPF<cJ)gp!Z}F+zt^*U_Po!=?X0iOz#Pt*94g z%k|9lM@9dm0?Rn;9)E|0IpK68=>J1WIMM4QdTCzt>QxgOdhJ&e@<4*8mmLLT`_Y6u z5`}@d41Cc5fBkZm7G)(JgWrxL`V}gy1F<6s_tAiOPvpZa5*O$CK91$z%-mP0`c*2H z@6m5i6CSht8&xddqkkH`98~^cHQ_+7TcD(bXAnwSjx|UerSfmZ@^7^YPQtI{h<+Ou zoIH~7m<8*%V+EIE`TAXufPnmn3b5^!Vb*;TVBtO$VIc*m+9!qkRQ-OE{AJ*bCFfz4 zZ)fZwRewk|dJ%=_KdeH}-+?_JO{G&;_NHi!eFS~)%<+Xx_0OvY0t%J^{V_F~hQFPW zRuRzAFJLtaaFMBpYJ6EmB}O@g7o&jsXH_D`Mp<NSFioCQbI{r6F}+WMDH?_JFRJ!x z`AOkL6&J>Ds<<$IOVz)r(gt!&|CUP2;zV2)zpa|fVhM7-y`&DVf?#89gvnO=8Z3|B z1uPmSP9d&P8=;VX>Z=Q&uO47RKji*7#s*b=P>o*DpT4j^-M;1m5rXv}sL@>mkzEY! zubLePBRY^?(c_cx+t>ry7UA+Ti2LMEDBn)1`cEL+#~H)V15ErCU|4F-GWUkMQvZb- zQ=_~4BfA-_b#JQC&S+=4GyRb@oeZ+jf2|H;{CJoCmKx0rMl#TEzg2N(C1%FA)!5?x z*2TU!*xvzrv>TU`NH=R;tp8rcJ$H7zM?XQf=$`bR^hNQ#x=zmi^uGS|M+x}eH9Z>p z(<=zL{y-kHAnAK*Kc)K^q<i0NJE|`Dvl{z2#!0Ve{W$60`m5#9*!pq(?`rJg=qCmu zpJ1&Q>;F(=a3+G4`d_NKke^h|CHoR?uIQKY=qJ;kjCQ0u(!DHt2}@tXW<~Zh*j6v& z02jsF?ePvs(6?7}17FX@L*^vaIr*#I3HD7U9O5U~w-~#DBU<t)j%dkET)&pbE@j(< z)=Qawh*Nt2J-&fQo72td%NU?;pW-HZauYYU`hbB8%ZDM0mzZ)3e7?ifTjBFv#&3tu z_n3ARJ})!Jz3_R3Iq&28VLl9zxrNhF1lN=vWY5Go-qQnX;;j(iB=_a42N!;@UBMuT z>$gJ?_U;`V{H}yhJj>jPjsqA$(~ok%hBd&2NhFP6pqE+?uA%pGTulN(0v4X5gkC!J z`z${|FAYDJem~d)!sjg{AfXOCLI)820SJH&d5}jhW$8;<^dQ5mAgMFqT62&ok*gR$ z<4xSgdtL>E^-(+efZ3}hrnnptCQA>bWJb!*<ItAik}(ZN_KPsG`j_m{d5TA2bGVuT zbUcj_OL2+&5pLhlbDCeqynP<J{Kt%ao$D`f#0sLH=m)TiUYx%8sDU56$jvEr4Wl`A zO#cQSFz3`a!L}j2A$~2>zr~}O0h(Ul<}|%fFUfbf38>%WCQ9)Nk6y>3hgkX$i(b#t z*R#lV40eO15P84=ry|saGRSc*1cd0v(;vqYj?kWgtL>{4lJyS=G~te83;no){2g2P z8n;)F*Ep>p_<<GV=Uji?Z0A6JJAYxd^9E+F9lzw(+VLx}neBX&Tg%8>)Xu|2xOV)O zV|YL)K}O%Vc@`0&xql;r$^ScUVDKmn=pE7ngYL+ua3FurV~Z<c#nG+q`U5vnvG=Tg zd!L)A*q=w5={Mm_{|oj(8G^%w&;|cQa5!mZ+^d;4AeU&c%6yuoKh0p3*{{JWV>m9> zFV&z|495ojG7Z3}5~1jFEq0ih{)d@<g%-Qna^B4JD>W#xTylB5*C8Txlhzj;eicyJ zdyrXc%L(=t6K>K@u-`CtD|~*-#M|KWHj{3L&;K&{4h;|fcWHR=KLTci9|iMwOnVVN z?=Z(VH2qeM&f>RebQZr|GtT07XvSImF3mcN-=hJ#?8a^4UTvlRS*;%r=GWj}_kaeI z%a~<=58T2cFr}!H`h(g)^fN5|8J5F7jiQ$xg53Ah(xRnrWpqS+L>tVHI%q_FG$-n9 zjLy8D)e^84dU1{7u$g9XkqMm4&@nY2l()m)`nZOO9@elIYxu;dHGEP_$ac9hsg*Jc z{?gDoLa#ifC6pnt6(jc3L#qjW_qdjGc-{-OdQrpWZU9c#coX2zzd>$TsmSfrzm3q5 za9od|@e+bY!iiw<9R!OB2#FN{72gM_(EGLM?IeRDayvr&0LG}mJE(0C<G6+=o!6Lf zT+@G~^+yl0^kL@4bJUMD!_o7q4{xP@0)aQP^v%qRTB}~u3`fta`WsZSe!%g-@pBFJ z7fqC4&wEqB>p%_nJOdq?W2l%Sm^61i+yis>z4s9W*`L9@P89#5;U*~k6#-H{3FaYD z>4oj=FjFsq&-EhTkDHrzDVR5ij?3WF<2>Nd-_vkGI83LrKLYr@uUUKLpEVQv`iqAB z0UPCCHDja)V4%}?F#T`T7)&3zld+>Xj{ksB4+xLq*^k)pr@_uRjTyqr{;9#<0C5gD zFbVER2OWc%q~d!EA?aF&4M|E4B&qs!j)V&)2p-Z7IgHDj>j7WBmBHX%-$O|3^`<{~ z--h0_r+&%-&bt6EkKhJ+6XcTMN3qzO9kgdF**)8#-{MF>&F=}c+>PLJtHaohZ*#yl z=!}PHH@?Ggg!Cg|i5_9;BkT!6k&dD(;fNf8{q87kV+S30TS3!E$(u$B`j;01z}}zj zg9jXgG@%sVtJn<>kJ=577~Oyx%O1_?2BW>Cdh7FcFPNQ!-SCCHZg_&a;Ru%e<nV6z zQeHPaWp=~Ux!v%r)eX-N>4vWk?S==S8(yGB50nP*qQn7nX%b%Z`T^KqcED`=z9V`! zi`<Q|`!IB}?C^M>#3lL-hjm|z=$|nardl(B!2g#3!Z(ZTP59g*iob?Wz4RLgg8y$3 z(v`Qt{EVpnuS5T(!-DBI9ke9>+CfY5Zyd%FEbH$$5Cv3xAH^X!F|=P){ax%s^KR-7 z4%E)3zwbb7D!xSjvte1P|J7mOeQG*v;C*U3L?iHb2h0PG_n5S+{?jplBXCUrmt*h- zsKz_leoDxtpMZ|K)Hx6k9<uPXLA0Zw3;jwbPA>16U_IzG&`!Kxu&a5s6RTN-*Adq` zjj_89yaFxe*j;ZpLcW*5aTAo%;(ig&imw5F>(p;|63*B%aCGpV$UTfs>vuSfj=2dt z<}T;3jydYIJLYbuuLU<TC>igvKkKBPfcD?-%(frF^Z^Kfm0LSvAXaxn<xob;!%pfj zi2q1_{719#2_3r|VDAoRPM5Xd27oNQQxJN7ji-lKoQPN5%Z|-HUfH`PDbF@`c|s&# zfz3U_`kZ>7vp;<w!&v%&GrDCUvW2BT%Sa{Qpfl>8m*i>p3rP)&j=MEY<NB*k6qONR zUL3|_PB?_2Q#=aiu(|pVodXN*67?TBqxZA){fu5$-f%`AVCe^FQ!B#t@N;Y+0;f-e zI~cl$vLa5%{rNpbCvZ6K5yf9XCGQobU&5zK{uP)3<t?ZF3+L=T$Ms)1>9Qa8!MB`- zw!jFzzCasbbW|LjEeu<&zl|NK(3wL{KWLsg<n%+VhdLLpp8nT43$lF6X=w_inuteB zAAwHQDM!;MC);<OgNKWnA@O@K3?wk+PfjWz&{BdTU)~3ofqTUtWIntQ_?wf8HN*dI zhd;#h%UrR5iKzwj%U!Wqrel_Vg)27QbWGQ;bj9YHj=A~)7Yz4QS@C$kfoSx#E&w7x z-M@3VX@IYF;Q$|U>4#j|0lvXy4=|#>H@aYekEh*VOUi=@8HQKZB>g5Aji=znt>)7% z!hOq(5kHDIV1xtT?4n`5#bplj!*DFnZ_jPR9l33|Gq(+Q<+kC7%fy|JVq+??F%M&7 z9-zi-G1~F~wdFyV{vb4<KmCX?2FLV=T?5b*1fOyQA8N}B^Ku$P&{Tr=JFYx1^{v2- zf>IyOPyV&M<Zw<ju0==bhR3ne(`>cY(@~VghoJi3bs>&)NEE&cRX>NJd9H}&0a3!w zK~es$OaHzLA1eD@ef_O>F@3<*H_%$G54!pWTWj<mxRA;JR;It|Ldh1lG5r`8HUq_o zUTVCUzQUr<vgk7`{R|66pJVCg;Bzla-wU6wu=H2p^E^vG51+5H^jG2Y0!zODpDpPv z!RXgm`fFf+nx&t%K6%nbpTa?S!4>^_wgCE|%58eIHG~C()sch+tQsOM0RC1@$R`tC z^?yW4z$tWY=Wy<?%A*){<*>C_jMWZgQ_Sp+CsX;Hx#JQ(Z*!^_=9d(x51pFZXjB0T z!`ZO^FXV2SIVxo20+JySVD{*7N9F7P0NSN<sLEH3NLD_!to3kRsK%9(Fo(+dzb*RQ zCRIjy>nx#i!K(ivrSfRP%0u<FRpmq=toaqcTPY}WYd%x+OHoB}MM*_zg}<V#qTJ8} z<6r1sBo;Fi=b5kCrOXm-?kI3_#l>Zh!^=o_b|sg+T$#s}`COjJ{R?>6X}m1R%R;;? zjB+}qYA)4qrPfr;GD%>XV@mI2ba|$U(*rYR&SJCYkZo=q6Y3kp#Y>l*j^-I;p1BOo zMlzR^xuOZpW-`4IO1YA`+zu40<V0!Urp8Z)snf;P#0005Z4*k9@pwlP`Ry&3_pYiN zDnwS|?y?%M$a|%zY<$zkGpics`WmEpVWPLd3vst&UXz9GddyTq;yH)%s80!o040(c zQ;;qQMtx~t5J_l)DBn7W#5F+_VHZSd8dFnAjy$!TJ;jw3zSL_9U&4jG2j=9W?7UmF z$zryTz+}y|ZcSynSHv?ZYa{W`v(lWFO|y8kG@oHGy_-zY)0xV6M@!|FR5$V-!SqhH z#!=$H_VxQJvr)EZx{}*zzQK&@M%wu80ERfPGTW_kw|95-bX-U=<AxxzWLMkn?y4o( z2-%7)8Kq(<5xd*8FCTw<M(dlR;aO-_m;)+n#18)(1(^~LXc={xk#LP0b1nV<w70hp z@9piQ_qL%gvbv_0TP+KR8$xBHB(PMehJ&FxMPYu`FQRlQ(aD*Nf`L)mn$zK8C<$0Z zNx%+RZeT6}NQ+9ZOiCfaCAmdUf!9Z75t*f^+gD}^WVVc=tBs_+NwCC3iKOw@L?)Ri z%F2XyC4C{zO<7o|pN1295nzi<57Oj?RjwE!RQCn-+9*r2hy<8)ojHR^1e&DJAEwq< z(gQRLFR2&_d)pdMY>4k^+lkzbh9ERJN&l2p<Zr#Xu|5C>=UKmc!;Y<u%Xgf!x@qew zp>DkRTyF6&zD|HnQ%}Z(9j$H1YqZbc-$Xz&LuQZOg1km&HJas!QxW&<QugfH+PPcX zvuim?dnnyAl0qGnhhm9?Ac;9cB(J!kqRZo^6pGq0DwL!B&0yj(l90+ELsW`$w^1Zk z%93&s`gd|X4>NN>g^a9KqiSQxwy7F3dxP6Aw}Du|5Y3fk`B|V=qAlI=<b~>1O6SU9 zPbQ?pP3V9*g0?)7T<s@>Y-t%w(1+PA#wd+fZb{YnI&QckKA$0H-Q-bjL*6J9<Ji?n z3{JTssdD5G)r@nP@^f}U{jHJEpqov>No^fQ*BSDd_GIz}G!5ki94@eFPi72(O%ymD zflWE(8a|dNDO2cCeD5&nL8cIvJRvSwt)+(8mn@cAl+%$bXcSr&jH?sPTI7pEVi$?s zt>W&BhD$jbL+BF<ZpxP!!}gIZ7(?z$f!&VA_O_iJDl+7zy2dxhht*>&u3|@9hFJSk zEhg%mxB#UET|}Oy;;%e0VFv1r;*LfXbXCxnG4OVhCz5Jm9a1{kR*-J%%H%K_=S%hp zjM1!YT`ak0Bgh&uRaz7n4B8YMWiWZ6`y*zXz<FwsJZx`1Pr1tyu(qM|qLBp;_+Ucq zgl%OPxRQ7r(NHD;d^6SK8mb{RHZKcSw03pwN~y-G<TgGVNigpCmgL-A3^BXv@*Y^g zI%bTK96Af!jU<rHI6QgH!;>Y7FP$R-qQunHW#nt^mZM6H7~hIGw7guYI+Pooa|^5^ zo*A!t{CV4nGz&KJW$cWvo)@O}HFaKO)zh;!wJ*^b?`p}Fh&m>2TQ}Z&f+2`WmjArI zy1L#!L?nkLTPtS_h(|n#9OS`TZ+@kfaIm_rN(nVIghHA%^x&+isaHbbn(As~#;$8n zLbWx)8f5ma3w!c#2f3jt9EPl`8|omha1|s7Hq?YP3muRf>S`gY8mK}3MVC9bQ4V{{ z9$Aaq|7qoHzPv8Yxs<5LS7QfT;1&x#pt}j<-eJ;EEqS@|R70Sff2cw{LxNKF3SvZs zd4<D@&t|g;#?tV`Z6fQv4q9z{Pk=pf+lb{(MA1jXbo&`$<*lOxjG_&&c!cKX<dI*~ zoPhkgdh*te99Hst{_z~fazu2q-CS<%>M)dBQ+vC!0X|fRvo$AXu9m?<L=qMl+vozq z6$)uj%8g%4i^OJ>fdM!}XBXYek{|J=J7Mm&6We;mkdoktqq!Aop2N~ku_%5<u7~+i zWJ(owm9z3n|8#AE|2!?O?b5pZ-P(TUzl`~BV*Ur<%;sZ-T^7eTDT|Tarm{SVGzBZf z?k$y}zC2|TmnNgG7e0+kGq@Ds(o8PR;nF;=k$M<4M?H*K$EA8MHE?k;DiRi#nz~`c zGr5|pOSp;D39sbxDlV?(>P9YY;?h}M+RUXbT-u5XV;mpiQj|+EF7M#Z4|6fWwGbCm zTuXBa{<m_ujjI=Ou^suuT^+<c-bwu9Te-ZOyFbD`87_T<t9!V35$7M{(#2f;B$s*_ z_g=zy!R3srSAhKh9ET5r`)c@J!yKPtj4Ky%<!1Om>|5cpj4O+{vWF{2zyV2=sa&}a zJ{x)A=NK=1kU2ibL@qr9nLNz6;}Q5h3ct@YE<Xmp$5|oDWhTyLw;z6RdUeCmw0t4_ zs^GUq5X;@}b9>j8u<~U)d(UU(wLJ%z+kF9g??dlRXMMc)qpbYwOIhzH;BzH?&btae znDe4*nRp$$o*iO0u&nh)+xltSdf2w!Vp~6BTW_<ix7*e`Z0nu2^)B0b)VAJjTko;0 z_uAIa+SdEo7Z?+sU|(e7j4!b#*_Tb*Q(4>7>=TCN8TPE{^<38Wm8|XgtnI5=+Y4FS z*Rr;+XKgQLZQsb+zL~XsD{K27uzj1!GhSlfVc%mlW#45lgIfak_t-1!8gf~o6Z1m9 zZ-yGKz9DfVW?XdlgL~UGY#=B4U|!-M<hfpDW#~}A@k7e%7(32>#D1L3?}y;`6Yzs* z*{*(#vDP++!p>&}+v9?hiQZ*Gp}?eQTqt02ERM{pJCFlZ{V+0N@;I`fYIVq$=}5!{ z7jq^PsKUsF{GD)C6uiuniVF(!rW1n13U(qtr;m6sKV<S^x{((X)|%EPL6|Z`N%;`T z6otf$Suu<m^T#YE2BsKd#_{HO#=Bg96CV+|{uVJy{*J|@S*?=(dlr*twaWSlgCSD( zc)KCazer)DLWC$Mm`CUpPcSdr4`zXQsi^mgNE!v<`hKxL&3lgNm%>-;Ij&zWMjZnY z2a)UQSBOM*awYf;T7CyaqCvTe6tEya;L(AjgGWhXx#;mWK-o8meZe`eo?zv|VNpLU zMm-D4BOat1y9M&;xAOT6=JP5lZGk-ck02){X0Q}8c+$*ZqVQ!=|1xGU(a7LwD+44g ze?}yQj|Bj5K##we%X4CXfMF#R<WaqXK_=gZO!V)FhN{T#QQX5tJ0aaGV$2&YTvI5t zdiC#<|AI;JBE65Sv*X2jKiT@?CHkNdJZr)1NU1ni|AFBw4+!LZ)o{)=oySGINvArM zvAOz>NY@GuT?}gTGpx-UP@4%*n>Q&T>U448D>m5E6@3pK-oM{cnuGkR6Vnp|!sl%* zQj?&VNz9-v{Eb<|3jJ-7IN%hI_gV>uoq7%j9R?p2`BV!xA@3)<6?s3!JHhlwcT4&~ z36)r889Aq<r<jbKS4**}sL--?s(y_WBmU3UY5KLu-U$g>XXw{Su>h(yZw=^&q?O1G z+dK;@d=v4#!bp4?Q%y@x>pueN4rAm%IslG<eyaonS%U+4OutRafwJ2T-p{)vY%?lK zA0QrqIpW;_XLn1;Hj0hW?~w)*a(W*8<{u%dPf8GAUL;$-UmAq$Bapq}dGv0K@;M1L zvJVo=%Y)E}L1@8a5^CwOG%!UMqARkHrB4f-e8}MTdK?<|MI&>e1U;Svk1tEHO4Rq+ zTB$!J#inB$Tc_(!OR>pVMC)Yz8DxA#9@v@sv&h4%$(qMIAi}5|muNDYWV>^ao@cFa z9LA!Aq3IEk8+V=bQ{+>XksEh|@`j}USVFEqRO9oS*$2n<pGy6M>3K&7)ANaH@pbC; z03+hkHzb0+pnxR%KPLxvW<pM=k&u{BB4Kf^FNPF1zox)|K#*4zsfHrnl6-d)F%AXw zQ%KFxoCt4AzDqE|@A4u9#Cz;G4&M&s%)?>c2IG+A3!3ydr39}46kw*{TO<ezn)TmU z9?S=rz=Cu1|Ft|sWYd_9#62@5q{N>I2-?I)PM(yuo;=xk^5pd=Pa<v4@3CtgDggX3 z?ArIJYilibixcd8;XUZU?d%_t{yubIa~({@zev&gbiF|<`d1jre@M{=^ocaE^kPV? z|5NJE&V?oEB`_DRhp3mx1AB@t1<R!}#*QvbFMOgXMVy)9<xo_MbcL*6E&~K%UI0P< z^wP|6{fZo)(~(H;U~UxsDtQ2hB_Jf^!4jC+g8-`rSA^UHFdsQXBz;QybyVm8%=$CI z=UgOw!}@Fl%Pl$enFsD$^9r~P3dpSzQomrPrNo~~nW90H1oPJKm1#&L*j4utBPDV& z+=h$jgEDq+<FOO$0^va!`}J{Ie-s%*mm@8W9BquQh^!DIjSM2`PhbUOIA7#}fppVA zx|#NeNCXP`5_+v1NUuV#BazjpoeC<tCcVa>!hBket{I4|VUe}MTpw~MJPV=g((9fe zYQX2@=(>T(I!3%W&tn~3$cu13RPiOKBJOc(g_mTUQ7_5*_lTc%0~GOnIl3{uaZk|# z9JRe-zpVGmv``(_2Pmk2V9==FAUOlVAXV*EEW&N@lfu4B{G=Zh-jwyX<me`&w<fX3 zCgdme;I0)wP^4I&5Z;sZKVc7Th93HxjI=wm<6HH=V~$>oi(7cFV#MuL^!*CNMW)Ql z6pU*u@RyT)7NomEA+|M0w*b;zYo@zaL3UJ#5;;fcE5Y6HM#ZSsxybQ?X?#d_w3!fw zms#|J=!NMEgVFYMdl0#^gV9~-T|s1W2qH^HFuFUvI~e^)`XfPvs$jG&-9|<pfl(`D zWjqEi9;S(By(OU5eDxIt`uoc#XB697X|j<%!1I%g@{k3(#SM-}5l^<vG4$}ro$W2> zqH*5j5h`o9ZHOWsO8|a0+}5=*VWfQiBTYQP@o3`7ZDfujo*LB5T2n7qfz#5)6AU+G zweeJCweb}DOGz7#FGm}X$JE9HXJff2M<I_NwNn+rnQ<B^<WU4gRXLm{Wzxu_GL=X; z1a}E3<x$JT@`?!)$(%&yWHP6aSxM$}rnynVj3kpnD%8*eAIXCndSpVZ6%(;mObtC6 zKD{cVY3QlR(a@tR>f(1beVw79XB}$jS%(^W)}e+TFg)@)2;O9>>Dg?k>Dhwxd$PV2 zF=~}5>U4;55g>5;qPC_USVfST9To1a(Ug3RJta}EL3oi%Rne+tHTJBu)qh*ph>Oho zWK&U{B^Lgyo>Y%PNg<iqdxTB1b8a6`%S*O6FWCnn(`y=YZds*o&ntaNUg-de9=f{O zn5KK2jB8h0hZV!ME56sV*Nn3{`F$dFCN9u+n?4gp&B7uKKq2BKL+cl)sjE3PtzT%o z^^3QdVq@u<5wG}7oz+UFwJqH}?sgjDzSp6w)=amWBx%O@9EZ<Yjt=l!2h+a&l;W6K zn`T}Jk4c`UX7KGSwfH}(ouS|%Cuzw@HL3mg^4?;KpI`EyC8Iip{=Kw~?d^-ko1!h# zylZ#&zN|iR^Uca>KTVr2dWHg=(h-Gm=e}}}Ew+1vr|(g2=j+GY0$X&n0UqOdPH7r* z9~yZ<*gkZ^S$mVio+_b+P?a}-0OhLM>TuC;IFrK-;jkR4tqq#;b3@g^dTtJfTobIV zlS4Jt)t<bRa=5Cxws-^xk*mX@I!AW+Q9F6HTobCR_vF<&U!h}tO|Z~V=vd|<dPc9} z^Lw;HZIZvzKf^yy3u+<MP)?f3nMM7_909s>=A3DqIVLhkfk+C;y-0~vDmwfkcTGf* zqVB1VX(IOoxN{n+BKOYc-qU!&BJP8rFqftfUE^XdEyb&4yi{Jnr3jZ+acK>Ataq%J zTn4?PQxKuxqF$F<(8>g+`KI@l3))Py%>o;rEeJ((1hL5Lt?FH{5Yu>T#M=701~QkB zc{-VAlDUk`<zzOI*-Yk2GFOwimdte<1p01d(>2r~?y4YysfnoMTbzUnzj2p`z9ALj zlVKO1(kN(5g+1RPN{mlMP2yT5sv37pYZN$hdKw|Ri)bq+5N)NCO-JpNZjUQhJEb?5 zrczesysPT7i5?QLfo(#os4t000RcAm#+V#93A_7TyhWQw`n_dY=|zROgeABTOK`Jw z`Ubp)7(h8I$PBrWT-$`WqMv03^hZ>{wzrVZT|fm8<I&HKNilg~-tks>P?K6EUjY2h z8=zpk>-bPiLOq!04`3oM`fP{jP#c4Y6DsmctVj}%UD~TynUtPFtG?61HayP(az7K# z;_Xp+-m$d&wc`VWaaofzQQwuV3!Zg5Dp%=kq&OLTp&iKGSd7<87ucR@C$ec3J_bkY zkJ!EumjGq@W@9OPhLv(rwiM*V+3TARW@e;vx`&nXD3o(Ca*xWgCM#b?rO%hrRi$Pf z;gMwy?+z~oRL;dN2XlgWC72b`0j6KhFs6Pb!%X3<eSr0+-6#X$r&!Z#7?wAfR`4)i zh!wcj^1<Rizo+P9cn+K_A7c6;W-y3t#Dq66RI%6}@mkRn3iN?TBo)!0%Jsz3Z?ZiC zEK&f+#ZR+=Rgj~_+m$V|^loVGEo|^>nd81Cc+<rOvEn7js&xmnVO~;&j!kmp6NA3x znyTMPvGu#yU_vH{Il_E+BD{(v<U#)g$nRb@K=S1PR^CHcd63z_@-WjMW&|#evMjv( z55UVDVtNKY7)t2{97>6X@{8GMUKC66Bm<Cnj9JRI&9N-Ou6#Vl*Bs1;pf*qCc$-i& z56k+>@Uot_%fg0zmHAMF!80S4_U!P|K8Ngb3}Hu=xvbnTn)>T=U<cvmC4!spBE*O< zqjq|Nn3oAqj{9E6y7do(lYtT8MEU{Kf4~eO8w4lEhQWz!!^sbGJ+aIm*&ZgG{21Zn z2h5U3kq;+7Whf2CcRFPCbAS_QI>E^=up^TS^kh;^C<zrhQ`HpxmlRw7l>t%Ip>HxD z-UNK#@bZ^Jp1&nn;kY0okvYn3)Ze9Q1%yZ;EMD(1b5;B!Gnd6bF%k;~DM}#4-!R2L zvIF;d6orP6mxQqWq^-U9_zAW^z?X%EY`>^qCiWv~`4dHxu?rW8SBm(2P|_bMVd+wc ztRFxH@_x2TzY1cOrOTcmZR^*FhP0-ENI3)@68i@pf})(ZTHuQ4j69my=~>G3sp=5Q z^zPK&?w+<qNE^JlrvnfpixR!AB1=$h#95pZ=iq;b^4zG%61yUFPXR7xX9rSNw5PgL zN=qk%O&PuNi=dPdNXnfQBbDiC@0QW3MS41@7921@Jn?yqz)gm$U`PQTtVYJF#LO{@ zx2<Xy<>*EqOVJ8aL0WbPX-?SMwu|(<;kV0W97lS(+uAc;()K}A-Kglpn?%zh^3Ifv zKo5_BNVAFG4Aj8`U2#rZcdOB|Ib&2htFi<;m!~>fur?f$<5!^`3XG8)JEs|G7>v^% zq#F}|KKS1uwKwX$JrBGL()w_HgB-32*E#HlR0V?}xvHkF8qcm^35MmW>TrWxRaIXH z&Z>HF)>b*~%xsA1BDWW{qvrra7RRq|a45{L`9;6i@7E^ytIC-$fio2;FhsgmVs0*b zQ1U)2<RXz`uo6`M%*wc0&RGRlCvs^jmjExGj;OJ;fXiXdk<CZN>qb$OWRA20vcd$} zhc-YsrAfUqE0QXEiP+ycLk!HCIh)KmWX>aVKA8*2JdMmnWCqC$ky*?9We!acHHHW( zD~SUpEAnN6EHJ5HnNTV)*+m~kA^p;-M*ITYL!O$ziqDb|d4+Chf)8GI!4hk+4ZulZ z;=7VwW3Ua>&?S~$*Eg`7^+y=qGK-?9s533j0wv2?5L2S+8dX4T>M`Em%1N8LBthg> zh`iLuZ>fGpOpA(ZM4?sF&ouN+BTrGp!6HuB1eO_IeU^K9%oTM<+(N5MUlH@bb|<uY z^rlz=Y!n50b3ew8_#j>cZHUWBs-o_O^41#SX|T+-`ub?Wyri5icmZ~=gq%>~1)8GC z$eL7gCT*{5;|VrJJPR;uEUf34e%1iJ7xWwloEn*TA@{*ZA?%x5Q6yVsF}~t$i}DDE z9s9hMhy$57ZjwGfB}B{9<w4w0$e<fHf0l9LTrr1nqARtC$WzyMw)C{8A~1D2yY^X| zMCmD68oE+Th9^gs1~~RZOjt=XOY_KJ^CB)9J;<b1H>b_w|16I-)V4B4(&1heqsLZ_ z8hs!_%dXV+5xa|)p-^o@SjH;Df)uQ_?ox_|C&)jCH-u|tKhrdSA)EkJq~^kfq<~9B zjv|;HFw_h{0~Y}arXq|g;78yoJ4Khr?IqJ!EYP<EfK@@_g+@ptNEUmK%;Y8#FpYpC zNr)855F+{j+(dn1RH-~y0Bp%XLGBXs*m95+Vi6H7r!tx4@h;?<w7_fP#2kK!#X}-} zfE!z-d0X>_t%5;Rtgdg|aCYN5byvKjC*H1Z+PH3AbCbHev%NjlQh!Q@9jw`sAvJ^X znm<OxhqiV+H%j%VB+$i@whym}0XQ|GDthJ!g{s1Gs6G_RWke|$S|97lqq;#gpFGOw z!NXxacxd#z;pK8UmnJyMnPgC|dFT;CDG+@{g~eo+kXcHmpUeu_$6N{mfGkBM#evJb z@npfwCks)I$chUeE<~o{(}gV2)x~fb?9+{>ixW%}=f|W4j#lXeb4pb)d4a1HUl0+j z74N%ly^!Py6v8GzWIraJ?AD8;B)>9<2I9$Tmh=B*aa0b@#!LpuT01);aTu7E=B}>J zEYj?oJp$G>VuHi}ZQjk1Y6bAZcL5;8cczw(vmqmPhY8UmVA&-jMOTbO2H1@`4G#ae zc`!%mHDi`F)CQ5CQuK42F0j;!szEsG&=_EDlEFjClmj@K$l(&*UQYp_G!B`-4cRae z<OL}Y;{gn%1a{{I28OZ#(3$?#OkZRIv$?C!ixTg15Rac^(5^0KclCaI-6ejIMazke z!vfu@1s0>oVk6*#yofCrbKRs;mKdc#=lO>eY*s9nKhfIjl;-uDww^a_Xaa*F#f(cl zgyUFJ7mT^2QvTbsb+j(yJ$XgRp}LydEQ5_|#2&_hGYTWYxMd<JTUz70Qx4)IK%3N1 zSL>jK+2L3GCFRUN!9P)CikFsWjmu6X)Rv3zM4<Q`rHspEoR@R0f@?^nZL;~pE-$(S zv`Ze*>nkWEvzW{&uu2owtt_W49`BQ7lUH9gIeA5<Ifk?7Gv;vm-c|LvbP+Kh@$Ll% zFR#N{06wSp1p%uT(_&gOpMkXoiaN=7E)L>*aS%~k^Ff%n^K%wygS<k`-e~-wYzSB* z+fuw^XHR>)D+j{GlP6DdLHbz9qbq;@(aX*>C@$VO^Ce>ZHGpYY!VfS5e7obx3t<_B zlXYiLS2C6HTDIjq$nJs~Q@gA%g~~5%+>MWm#2e7mxhvjgY4J7`U3-!}UHDLD1PO%z z<@s3_TKR40>|WOyhcl|D9X{C_)Qw|K4(kE{eMg6tpM&^tyG-4tqjZ|BG&Q$yI`=Oa zBh@gUf&}#7PEtv~dKdKM>0>0$RpZ<m2RtS(B`yfo17yjLA=zSPXN)uJ5t3rwIeOh4 zW(MskL!e7(o5h-!%l-I4%FCp>ONOyi25K!j6@^g#{Pkm$7tj&jV)Iual}5eGV|<9g zc5in+r|A&(?<}Ks$&jj(r}@(B81Y><SBLiqueimyd=D8{bCEAbEv?!0efd7(v&p$8 zGq4M0Fk%^PDKvS)3>PWUG_*M8F3H-8jq5k9Yu?&ik~DAiD2~al=8Lzq<S7|<uii)n zk*BtL<BsOdn>TJQOlAGdgibq_Vnm4#o%hbOH?P~A`bbYI)9o;7)RF3zaXvYXCZ7%M z!fl7z=gjmZGTm+6J>98X!B4ipr&5Ebb4c&m+m=C@B_-Q4YCCm^qixsDO*B>->N&=- zb6FMu4NrS6K)93U2x3Rnj=3(3$_}iwVU75%eZ+h_6nF^I3@+r-Awec<zrie9G+ZIJ zBdZYG=B*!7gSOW$V0}Dup}px6w?5m;_GQ`Z^A#04E$_x|c^9Ot9mfhe0!-&3J=)5y z`0iG)u-#%}m)qdwLlV5@7dm%mH6rs);=?`H{GR8)(hb&kv{{VqHgkGD3X{{>josbx zWGkZ0O1f=tszuD4BW70R@UrJff57d>t~&D28S)^+%(-IbJcSkomCSRE&w0csuTb>S znfyj(RLt25h>cB&qsew^JIxMKlCZXSITERzZOBvEt|5;$_B-BGqsP*5uDB!4lpL5K zP2bQ=gNK>T<n-N`E+1**420_IPfam36z!gnbq~cO3-iRDAy5_%k$Q%H|GB&}T1SX^ z`BZ>AeDEpD@gyC#9-4Z#o%UK>H;!yZT9QA&#hZcck2HwJ{eMk;gGnY@TPKG@b$G*H z9ULxSL9VF{*2-1Y$m1LiS2Y-@yIfOM6_l%L>*|U}*wW?d24ZfmZm5wPszV`28LVrN zt7~fN<oaMJDAxq*!bQW;8o4@LUnf_GYC?s>DsCP{h8{VF9Zlp=Z74K3tDV^GpXi_A zpQ(lYwf?34mHstl8~q>F63VU2zfrr55fRVrtl|z<aVM*|i&Y$96-QacG^qd%AGw@c ztf(hXQ?TOVit%3I<w_CpjrzG#&e;U6PU6ZGu1w>~bj|}@o5lHT&gY<ZU}XVk3%PO{ z*A{Ul$Q>chs<=|koi$vk<4Qf(8o08UyOwZ;v<53@a@R7hkk(+=3a&J9rJ1`UTv^3E ztGTk4YwNhOzF-4V3Mreo_bl$+%)MK<cPsbK<KDBmcN_Pf!`b;<+0I#%D=}WMgDY|F zi*uIbS_@ZFTuF0fCwH`RM;musfIOhuF3vl+auHYda^+&Kd;&Q_m0rf#C5$WkO=i$5 z;dcOj2jO=W{H})IweULxzw6<51N?4;->2Yrm^nTJ=cT*<AKJbHKB{7S_?}yKwx$!B zR3nihY|CyIEF>WdDD6QId5=xrCfPO76kZC*s}TjUcf<;!*n95{><xlq@4a&EUA}YX z-rd<v0%Z07<(Juerky!6bEeNZ1HjmoXukr@d{%G^TJHcR-;HJtlOG0_w*}3kVA}#R zb3BId<KU7crzF|)`Q|)VB%L)x0(;hou3@r05IADxxba{wXzE%l+0VgcQ{XbXBUHo{ zsN(l3`Vxi#SA%>FTnE>}^^gQ_5a5kq0m+)Q-Xwf(7T~P{yiI_&3-C?>-X*|$1bD9i z?-Stt0(?M#4+`)h0X`zY%>sM^VCg?>1(KY7$W$pHfp#>>F<J&q#kC@^G4xQTH9S>n zlE7BR1K68MpwY32u2(r*=n|G|96frO<>D`LW)Gv=S2@k}LS}9&y{(z&m?{-WkT0ps zILivdaN6XwPF04}j?PqBkz_>$CoHA)bb$-e+w7iRdz_Wk<_nYNT_cMeCFw-@P~&LF zcxlpRAM{m@emE|zkD#-wxI7^@Y=fwkAN=4F+wRCg|9V_!=jd@-k{@a4(6T%7(B(Y3 zws1bsntSB6YmHYL?T&2pxsiNs23ms~uQb{nqtW?JFtq923Hseo?b_DhqAMub;cRKF zejn`uSTxO%bBTsQw_?ym<6gqxBjv3SgOOc1%?f>Tn^pScHEZ<AZ?@2<pqbHUK(m!T zh0V4YY-`3?-OZTiane>Sk@2vV?wQ0OGH^m6J+6iL^cT_Iq|ljG{?8!kFG2Mna%dQ& zzsj?<EN?Ms=%-j{iw~w`^*7L}zezE*$dLGuTe%|Lw;(cvT*5;jKC~;J3m3f&k$mo! z4_*00s{RhevJkHDJ}_2)52_s_8yxy)oQ!3rs3IpRH=cXKvb_Be%a@dTE;)vCfwHgf zgvc<otL0L77>v!Cij;rV8^iGU@LQMV?IQil97AM8WH`q%ob+=iaQy%|xstTiz1{s+ zX<VH;&ON>vhFMkpS3;;R<NBL_N7zV@3R>S~B+q!_7jgks#6SAb(GpdFegfK>tnq#I zH8Kh6#rZpx;bM8LeqzGsBssEweE;~^$hi18?sIa&=M*_IK0ZD^A?b4};VwM1P@-DZ zPor?Qh-&ckp(;cV&`;-aBNLOkJ9HvZYYR`3$MTDTXUV*5xWeLd<jBZ~JI*h-@ZcW# z(2<~!&@8X+VO(Z5;*EQ|d=Wnuhylj^wQ89(7R%)Vc{)5Ne=2_^j~rzyk>r3Bl+;|Q zRI(0`LXwszO_r1#X^I2^=|G7UNC!!_Lg`@1k}ok;wL7knk+(M)S9*+htrkn0WKxCv zApZVUep1%2l#Mq_ua>uw=Ez&~#?Z?ha`hpR0o%d@Aii&WYQrJ=b#irC(xJSeEGIzf zm?;!7DuuY2LXZW0^;;2HMZDrx{;c0!a-?EgxB?>6;?ts)`hzkl@fNK7kQ^DpAC^pE z<%i`+K6f)%d56APt`0}0A39xX2<uzqNH`vzP#2w{Kgz)(DLPYsECC*>KQ4C@96k(r z{z<ueYj_s4zob7U^OI<L;2=C(=HkO7?tuZLbM$9Pu*9lm+Z`WLchJp?tl-6wU2}I7 z3lY!#`+DAPWY@g9tewy*y?{l!6n5b6Kjc^Ow@vv3f7{ic@wY?!6@NP|XDK^j89Q4c zv1801CZX@Zvf_n75_2zMVQiz4_)FJZt|k9vIWj*!ziTcMqQ53%XR-o2lL`O4cI~p4 z^fzSc@s`m=wVm)U>sy$@zin^J`di#RK9wFHdE0=?JL~M6JKvWhQ{z*+;|nhBj#phu zAwG~J<?-_F_(F6!{8D;q;S)KsD7=V25c8=VIigk#9|3uzDUsvA{yC;{JUG6P_0Q!Z z{y5$j{Oio|QixUH{7Tlpl55pTu#sM#`&y>Q=r+;=e3wz^Z^&-n7%7XFT}ChCeaEYz z))8H-e{X=!=wJ0;<jCLRf14!N+9+bJW8<Y8!%Ki9Vt-5c*a=0gGvQ;=ck$?$HROga z#ef$gJFHZwk`4FcOqkqPE8D3DGoFQ{8dye|)YmArnpp{vODV+@m0FAGP<<&SbSg)V zb#V${WkhTA(+vmW{+YGf22AG+;c{rLWdo*mmXcoZOg~#mFL)~nTqAYyskQ7{erqzD zt}&i#IF{F1(J`-_3i&i}ou}yM86JNp{?pefwOQdP20tHx10Y<Byng|LMG}8^%Nnjz z$LbeSpn42+F&DU{9^${q?Hd&mFvlU!=px#r%aKdZ1=ytMmn-xTU+0VZCI$0*F7T0T zhkm8fohZ6)v*({^JWVKHt>{-P-4oV9I8LqZ8fAOYu6$zcYn4c#n`AMMl*0iM{J%k= zd!KfYjp6+s{-!cc>+VtX`-wh>g7hsypGUYnaKR4l`v}r@1;7?X-=ahcA`RQ(jo}7} z9~CYD45B}(M22<KP@zAjB>UBu65Z-{>Qxo}aYFB;z5YY^Tw`LS%}}S?9&b05=yIXT z>GA3ANJqTGl%m9+r0itFQjBNp?0+r}tPC~G?dDg=eHr?TDjIO{6KhYLWDVJ$1PYB9 z6VqZ$?h)h99C20dS)kHLeo0#LQ+gzi%S&_htHiiIr)XP8X@6<&nft_cZklSm{+xqV z?pbKEuZ%3|osq-=SyH)dsoSsmaCwPqX0LzH?sApg1C#1;d%T9ArB>)L?j2}$^I(g_ zDj8Qo<l^dw1{qfm=r)07?_vaLS#ox6P9Fa);J*X-Zz2C33|4-ur5Hk!piZU8I2q?6 zl>C&-!cVzmLuk^xdC-R<YFX9Be`V3fkq?u&PU>oTAxTawtX3A%9pMQy&z`t-TZ5WB zs5Nir4vpB-ZXH;YXIYEY-lC4Pqm3=ITI-@s6|F5Th6?xuqwhZ=RjjR#fPaR+5A2sv z<CH#9MQ-rzg|NPIMYml$VuwfD+OuY)s<>@S6`9-f(*}HxeC*!Rra%iQEkljI!LYe) zu_I|Gzl}DN+8d%r$M)YFo<t0L0*KX*>u;P`zts01*grY4zUv?<+w3WIdu<}qo)W*$ znxI4V1cIUbzG@?R@Q~fZXOHLDJ#L=)Lw4SlX=_OvXfGT+2nzR;!IH;Yw2i5>F_fLf zv>c}8X6I!Wki@ixzr#p<mSq%U``ShUvlUqqXVze0*<Dteh)b3M{PeoF(6lKoJx1c+ zV#vz2S+RXPNT3RwbZJd?(Zy7w#oJZms%aKoVN*2=dTW-fw1v2Fux(*<uswmdVdFw6 zwQEJOu>H_wGR3e;ll22>0X}XAt=hYAb<@4A48~ez{UE;NmMv@q1}?{S^)w#tMKhdr z8x5hLSMs}aX0Sss*sQc*HZ$04^G2s;h;5CC<QQEF*IUn}squ#ostsAm?j`8#-MuW} zhszZyXE=%8<*&n2nYnkkKhwEP>0js4J5l6ot#vuQ3)0lOJl0lDyP@+*F>kD;E|%Z9 zbZJjF&z>{UNB&d08<*j2c0}4=xKc%<!|3CXa^hanN>TDl=f+&GX`Lw)yoX+`Fy)xE zMjSI0?<KY5In^F??HcD8WBZAztYdI0DQV|l15<rc&T_}?1$Ro&!Mj0G)-j>~NXj}a zZLyAJ(Wb(_NG<EwTV6#-e&RQzFD%9x^8x+DWP~=m`w9Jw#LJXUUpbIgGHHs6_l7Sm zFdy%<rLD+nBYWh_V2AdF7_4m`1@P^i&|Yy2N#m635E^$bNKGptMs2T4l4aft*c(45 zVkWL~>~Z9r(!Y_j&kiOraHd?0NKtOC`u!n)@(@_{dHunx^r}|<!IF?GjVD#VClpFQ zFjoDck`mSH50s`J9s5e$p@P23RxR-dJn2fR)e^7Am#TtY^|?#Esy7(IACEtn)M%iV z1WG)q7c5j?FyzbYo%yuUTlM&SUKby}9XNP93=wW?c40x`phAzz%qM8T4$8PxiEYw{ zqPm6xQ*)U;pQ!_~3z=hZ_CDFevPWc(&fbry#o6PSIw5-^Q{Bwz&Gs?1gsDN>K{8Vh zX6jU?mNRu4Q^QQ1$<)J`I-99;nYw_f3z@Qrsadu~N*2GjM%q+x;%~J{)*K0(&VgNd zveRiD+Lbp1ZNt0rz-b-Xg|KyB`pp~DRRmV&{urvjX&v8{Hx>#9PU<=UhByOVd4w^y zR1Qs<d?5clg#VWD-wOU)$$zKw-x>V(Q2slM|IXpR^Z4&y`0srFTg875KSJW)#ZbJz z%>qLqYaco?fMGNdk-1p6GJ*uT)sb|@pecr6%qW_(u+jWLVqZFNuocmbJiE%h9Wr0Q zIQJusjIJ>xHlD@jG<keZ<AP$E(`4sl?QR*Ps+tF<2OeV?<G~3G;Ezov#}b<21aSc) z>!n*s4m-4UJ1%A>^GOd@{%{OaixZUkq}(z~ilH*D<51I7?JpSWC_<kn9i=y!QzKj4 z)@6@7y7lI5B668b)1($N2s({>DbCKUQ@iQCI%ZX^vQ^Prxj3}OpP{qpod)90oyeM< z`f?uir3Civ`Z3!CLERe&zoM@&0}=i@l@idlbAcOX)vStD)&EH;Xey>~J_!tW!B%&X zw1blAA~9K53HnM%OUbnzr+8MSeTRM=q$GGlQegIY=oZ<$ep%jR+H6n9k+q#q6BUxy zPABl}o&=s~i1kt##F4<$xm2$cDI6l5juhs>nV_GQjy-$3em0~O#s;Dn<CxOfdrIwG zLnxM{{-<GT7pA0kA*MD8E(ZOQ^we^;>+4erVp}q`4IGzMQB;j)%vbPZq$24G(653t z&d8-nvsEVfSp^fW#K1R*dbok7dlQ(l*L~E(&1QictcVV`@RaQuB0Ct7-312Y+=ZCN z!d+m>RVOj!Z`bdIKA49eZaEV4Kg_WlAUzEF=5+c8B<Xh&{TG2LeQjpoNs_cqOK^}u z`m(&EX}8Z0+qfLNO@AJ?#RqpeU*sa$gDFbE$Gdi!GTD7(ygN1HHzgTxdk+RA>Gc<3 z%nbcyDCSz(l6w<Hk+F29<E9_ln<!2$9#(0|#RI=~Hi?Ehx`<|6uSK6Jxrr-jlM{Y_ zVvWGKIBTp;nz+Zc0#9#BB0btsGoD`Hvo~XUYprXDwpFy&#|GfQ`j^gVQ)9d_R?o+{ zo_7W1$&(XTdiH*E$Gk9O>MgP-QYq_zn$f*VVv->owy>q~ADyw338AI08{a)9>3mw{ zs!zL{X^0L(D<q!8pzXsWW7#w3$Cgq;rZ%C(YJzgrSQl&0#_2!@>2jNC*ar%AI%)CX zZ*t^s>QOlJfCx-1?wy@9YN}d|%na!rE&=Ruwl;B(vo(%!NlFzbCTLvp*5mPe2lPn| z&V>AdoSx;bdIElb^75oLfmSIk2{`y<$7RhawBQtHv~|D2QrdsC4NP2S!HG>aO>49~ zrsnglih;~Bm}x_}vhR^hvyu99YY|iTXPTGps%Qab3)w;>W@n*i^#*iV!D=7hHB^!& z7}8P)$P?X@Jp9+ke@pmpkpE7G0XCZ*CptI_2!oX?cAF~ak;dfwzo;_E1$4OpM`IYk z_bW9%&=2l)i(tQMxk!o{O5T{FUPkIFORy(jC6qx}Ns`tElXrq$K4>R6lxcc!o1q4@ zbmR<uazxn{R$$c*{h;m%Sz(pVAP%M@2-2c(NcZ+4c|%wu?`hrLaSLh7WI*~nD{Ivv z_e}|fp=b%+U_2Bb?w(Mv0mIM0u8CAO$m0?^8)VYiKst_P)uN~`5Uq<its}eaFO6JP zr;hA$klK@>(xRQP5Bzl}43n$%>TT$ob3XQ(J7KtTq+Y*0?p&FCUOVneDhEb)v|h_S z^jJ<S{vNqKo`rbz#_hCia%-N4df|Q5qxGXB+1ta}5YM3$^`=^F8Gl%~xmKMprdFF! z9L|Le6UJ`XK#`YrkGz&LS*xzfvC?P4xDDMKR$&(Zj!7bMdd>Ec1vS`xx6@#x7{X~x zU(D4`n!;&nqAO<lph%%15P?6`6%R;il>Dd<2}<MXf?3hpSkt_wXdQnTEU}X_d}OLL zVqYQuL_cjQpIcQmceZ3+3{_`UhO3M_qw{A@pHXGr9Icu=k8Y11)IWL3zDUG&U$VDs z^jQl1*=Rkef8v$9q05x9^afRrw=`%9S_a&z$Db}}S<okWrnF_L*OQR89Kxk7?dj5% z{OJXCC{y;a4NVAKW*b@~bLG5(`~m#8kpB+kzk~SiVE#J{nAH%w)U>c>agp?HSh3hh zL!@!&A<JRe!svOvuxfE2b0Q7=(LT*M1ex5cQz;VSmt%$a<wQgLawj-dU$r*D)u0JU z%q%X6nbk`YGfN-X>lME&liB4y-(aqYwk(S#PyD78q`#75`2Lv<N>6`Z>NAo;CP;r) z*>E=0`|XoP93OWYJ60rgE*b}bL;K2rnafFi`lVi5?re{l5A>zVx+I<`>;0(mm_9M~ zdR2_?7wu8tqxTJ1_g+x<ieQQ#^rw}2`uj>zvQm;;IiiGAU%*qM2E25K*Xs_br9r<x z{XHOy$v%mVSn;CIpA_W#zkWK%Zszk3zhs>9#-j0>kkfRS&xHm|%Pj27)1Mve@d9$D zZy&4PfXAF{*$TBm*@K{PbYW59{)OYDA?8k!DaPnxS{6NCOmnURrs97g2{X#Wm?eu@ z3K-j$S@&b=7-lPG_OZ-9p4lfb`vJ^Kmxj$VBhvDRlN4)?BwHPh0bP0d<eoQ39z1l& zKKyq${~f`9NAllMZjd})*;nEZ&~K3cmWJqeGXI^ze-Grp2l3y7`R^h8cWN2^mX~o{ z6_Arlht8^tUdDi|C~f%2Q%S^E$tKMxD&Mkkn#WK%(?D{iJ?=~=QVwVD6DfKNqsVyM z7=N4SqUfOt9YI&q&duLx#kV!8>QUnksMBS~Q2*NM*8f{<Oh241+QNB|?s(!-w$g$N zMPnVyb%t!=S{xL`>6(b4zB5<M-(k<658r|QBaqr~n><$knaA1I9k!$87cdW|9EWkL z=EkJmKcmdmk8njKgX4qEvn%{b(WBjvlU#pBv-%nb(mT^h)L;^W!n{#?>UX&i#h)1= z4({g&u_Qg+DU>dqV(~@Y9)|`O1vR&O<E?$)?=aSWIsBX`+}f7d%!P(r?o`!^9SnA? zwVfTYT&^x^o*_77bmnyl<i_JsNvm-x1&z>>y1ndNniAJ#TGAx2Qntzae2USK5yCYn z@2h6E7~><C46-#R9^$mo^I#kz9loT?cTaD&GLsH#v-!%W6(ewft1;gDD&7z*+rz_{ zrWn(n9&0otoV0jTYinEj8=72+TA~2yu1hP|9uRG6T4C-RBreR*Gp2{^m18F*@p0PP zd!RIxtS1K&Se}<!>qe1H%^(#cMvr8isW_cHY->w<XLGDxt;c${bhgmzo!OiNF_an5 zVRC*^iQj!-1|;+<xG{T=Oh5gZQ5@Xg8AW;`OU$e!rWeEZSSzHr$2WY>MXHvRcztRp z<nyV7JN+6(!0*d4uS8i3?be~z{jC!QTKRd5S387M=+an0Ds&kiG(eri*AC2-y-^C8 zGK5*Uaxi5dW*J7xaV;a5Wu&Ph%)%dRv+Tz#W9Th6C7*<FEd1p*>jCt5n{^Vijy2wI z8wyPEF{OmIHk7f<I@neu+eXPYpKKc~^M~8Gf?ahsQ@pm>3Lk`(QKLtV@^|5I#-R{G zL3I@V$y2*r*^_f6sm!>_Q6WzYS5D`@Gx_gf{CCzIiGSz9gad4LNj0`Z#?pv6jy6DG zJl_l%_7_b71;@|{;wnd9#~zk!MSVi!M;vbB4)Vw@xy~}OOQ~ZcyVN>skyK|xBkm&a zPdAaBv_s;85)!|_pKN9FPRLQG?1WtHKpYz_2jS4j4&Dg`)<br}0NZqZayMP|ol+#x zZPx=2mnac^`nI^%UT4>5kg7~u&T^m)i-Go8J7JJx_D&e=oTDEaQMc9F!WIatK;-DN zYOQfbmwaa<V5Qr=^CGrdXV?a76FVH}VPBR<`Y`9y?O1(2Iym(O9A1F1ORuVR7S(5C z*zKLPKe4^mxv{AJvd(ap9L|<I>s(xO>JhcpaE?Uxi~oixIC`f*PpU*}wOR*%MyG~P zIjG$9zt^%_M>JQD(yiEdUNlRu<xqY!TdzaN6)n)~$t5~KkCP79a3PG%SxP%CV_iq- zM`6MPG2tw|86yoUf@>4|HE117R(^@NwbrV)^4rW=;US<e<)90}@KAXy*XY?%Ypu;f zC$#I!iDv%()xT?1g!kbO0nMnjJ%mMHYpb;nIQI8l`bwaEotrS!@emnCr#1R2phJ*a zOL&+{G1fq>B|e;L?L;uD?Vq$ee=<7P+TtU4{!f8g79YT?>kQak7RHhs1Nzbd4N=bG zBPknaCu{|YoY2MI^DrQV;O>;26Cs82|L)qQUxZ}RJ{d9ekHpY7LxvoEGZ0JDZ&0S+ zY~>F8EmiLXVrx1d$+O%|b3S$t5NF>D#M+xdzXLdP-w6hH-vuUnZw8aUx0oe$p2^@( z0C6}eoE__Y3iQXICzC$`2`+yU5^Vkq^v#9k^fVbSH2e^|>CYRs=gF3@Z-rV%I<q@^ zFgt0fegRCTbLlTZ-wkRJ273khqt?m!{WTB_|2kH9trI!^4d9IKM3#Tk0A0xQZvkie zef77&<ob6Z$@VLV?FYL)1pPxWTU?g@$!^((<cB^Zw)qT_46lC<$#%e5hMxY>iDg{q zM(pwpaP}wnAA$3K5$FFcscaO*2Jm~b0d&dO0J`LE{a87z0UR$U8o(+!r2(8Er!;^y za<T!OBJZgIoQA&mW3v3dl$X=xl;)6Z0B6g*0qo1&DMzd19t~if%o~8BVFOsLVgtBM zrc*X9R8q`^N=B`$v!Su0aiDRcaiPhgcm8gp7yf{LC(HDktI%(u`T+h;(MXc#K+8k; zdk}k6)*ry6s0cLuQ7oUw<ZauDqqum%<49+bltp4CPsrW1)=N8g<N%e=R*ZbG^(Fi* zu)Qv$wTQnrwoM+h3=8ZfxqJI%NS^*Wx+94>gLzZQv%iTEe2#Zy{Y|O`dwc}auD>JK zI^z4)+BRY)^pE9QCtAlitBH|DIX{*4Psx7_=1%_%A>_PbE-g}Pr;2=d91<QM5gkEd zBUG^t1izKH6G~Dc`5lt&LbCPm<zgc32RY{)Ny_;jy#Zz<wSN{*YP9PYS^tHS+8+y1 z|CN%;!lZuhBdJ{?sbiI7QY)42+AK=yIE5#5ypn@VkwX$oCn~ihrBbY)q#$2Wi?d+a z)Y{L)!a?NPfVYrYPg82y+T2SKGGsxDBrcIsYq^wICtEh;7gddv4c#sCMX0&msEK3F z!pKD9?I!%8?ZyeoWoDDwL!D4Vw5fFxZB$Le2^&8(qlcP}L(ls@ybi-2Fd`waK9K@X z?iKj|-!*JQZk<w{(koR`-BaJ#W?b5}3zZ9=y-?dbv+287LM_E|Xn-SoZvpOJgF#P) z4Nde4Ggl2mSCgt*E#y$uI%RJZ?qNI8xYOPLJ;ek2p%;LtSkhPdiYwN>(h|B#?Q^A( zp4%%@QtQh9ftIkIdchJq1WLf`b(re~`=FdbP&le^-@@X;@iMT&#KOSAv~2N`vr@nm z<0WU(=*TSDjE!d2BHL)7XPj+g=s;5)%k1M!-C;IKwmTe!IFBd0Iz%2iY@gx$cLe_( z$$ux%&1;JxVBxglG@U<EC8un6Dg4$oPSR7giRGqlagk`VMIXsqt*=_1U~Q1~(X_v{ zFTaPR+U);CpM&XEit-Z8Xbz?c&A~KBFW0Bi9+ip%M>%Q6!vOlU?P1#Is@z^A9{^#7 zUNgA7w6$O`c0h-2C$X-u6`c>;z6~Lp`4r$>;V}=vZt~FQPft@|mLJJ6wy^rz?@GIp zoqj9(k^Q09X<ifZO=3@rc!*R*^Df8Ib?i#jc-)E<nyHfV_Yby?e(k4slN!x_vZbE( zO-#WwIf3a<^ha6K=9f*cshTmra>0zbv!;zQPS?xo>SFEfjkSD@Jd-qY(8(6pXe9OT z$Ztssol_EY(yLfA7u3wGs+?W3plb1~$^p?PP7W!2oJn^V`P1hq>S4IUKmb5MzrSI} z_CgAC40o-LeqE$lX6`c5Uxc<S<LUNB(jSl3!lX4VrcfSaBb7(oEtjDAskpey0`n<& z?&4~s{eEorhm#U8$FfE&qo&xjXh+mW`K2thv$oddwC85Q@9gN(+<03oMjrEHboVpX z*6vKaE>H3DlLRKal=keTTh;Pdtfjr6k?_um#p=y{EUJtg?nqlwhNM+}cAJ?%!j5%P zzX<zh)1H5HY{h~E;&~Vr%RHxcL2DZ)+jOwiE}+-C4vVd@)>d@1H6g(0&3pVhYK_<w z+7VrfUG_1J*xAK$YO!cKn_CPOKZwIhMZuq}KeDZ{KDRcRs7c6x+C-W1Td$^TfpF!Q zSbGMg+?uWfQxVXmmxOy=6nohEdC4=7nTE2qA!+W$iATEE;ij6RvZlr(TTHJ3^=;83 zlbPZtJ?L(0Y@bJ}bz}8;(Wa)><<lroB7*~KxZCW`rjABZLzQrML|f``yf*Yo)kWK4 z9UOGl)bWzz+WzxWU^73a6W@X|om@3IJVvV;mxdc-P4!w6ojm8^Fc`%oD+GdU(`kO| za&C9lP-ZGycniqk7XE6Y;XuBvOHE6D%-l6iL6?(oOW?EDH1Z=Wq(LRfQNt<W4tX_A zt#wE929qSmbV@|eMF#FnmJS^(*=pKMzw88H<~RrK#txh5;HWX02T_|<)1JyouA24+ ztP-Py+Vg6bMcW!F*!%<vTTP--*fD;hJbG$=v(IkrY>)L;Am^Apcj1D{nng1zD`(|4 zQ<y~!u~<_=51ipU7yIHI?n(WK>1Q+j7FJ~&UY#B3v8K&kG{=ZFt#x^e>1Q?k7S7A! zJ`0zo$Dy}CjW|@7rk_?ZYi7k^26Yu!XGfdv&S`TOmd~oJ;obwylsaph(gGC-?S`fp zXJf2=?A}J7<bam0z&w3w!?h>MosBGJ6uQMwT9$VB(dQ9^Yv#-ZQP>Ro*1tF)88J2N zguN1O(n3NNe43d!XfN!o&kRdx#gx4w>^mOeH>a+~fys#7=}R+v;oa&}JLnHkV8rA~ zbd6c`kllqT3T1KpO=iPv&#LHbYj17CQaQRg+IF;gz~Q7W2>D}KBUT_OPcvVzLrz*s zI`;VSj}onIccgS_xxG4t0qtptSGDpcyc>;i*2KW8g=fxRP^GrVVn+{2CwB78!y9AE z4T=Y(drjm@%Gz^M20BxRWHt?M3lN#<oS!Jj6t{u9DRh@Hs<$JbVnGaQ7cq?ISIkB= zIK_jMOyl^SXp`9SB;#9a%~H<hODQoM$ZL)sO+8q9S&LbG?G8?bq4Lr=?n-D(<a+X2 zmkZ5e?RiEq&q&sJ(+YZ$CQ(_oI$mH{&c@wZx`JtKZK^+<+N-rb)`V5vnzHWv6C6mI zPJ7laHIL9<QT7#!&<*RGS<J$ok}+P<R0j3!RTRidAIWlz(oM`CnpWiY8gufIhIr$V zSnUR`@@QN8A0`bmz4y3%PeLeLe>g6t>)vbJl;%!}Wsz``aLN*0H_cl4^=DcVo0?PU zH?t)ARTinYs?zC6%)a>as=q1oz?8Wj(<I~gJ(<8C!1>2>W2jT*6T`ia)f9@41;)5+ ztD#UdW6GhQ={RAZWjdrj)iJT&^fd7$moU@?+Q^en{RSt-VS{TcjM$WJe!?eZWY0@e zf5~q}74*=5$sLRKpa3&@Fg_wZP_K(we^`sAm|IYxBo=X_)7~Er(>18XqrZvl?Y1sv z&N7#Z31pLY8`9Wn>KT4m8oe`n5WI(b4SRhxd5@}e`w);GD+-6?v)gDMPT~k1jeM^l zrLspPL#8VTnbX=q(i?5NlUpcErAW{+DlI2fIBlz<@hl}PlvlIAX{9iSC*Z^^e^?KW zDR1m(jxNRZ+;Zx^ohftCY1TxWu#065-=^#F@V#SNSyfq0#f-8!(<}Sg6tNZC#Z1N1 zuSkix7q#Q;iezL?3_D`>EUtl>-vBbM>E%|?6F3!BGw04Ri5n=AG^)Xzk(f^fr>%yv zIVO=z_DliOj7#JEoHvV4Nm4y>O;Uubf-dqgO-e`e(tcj%aT@zk#;k65&k0|8dU?Wc zra4>8<8!IxFvd4rdKB1UIPKBqS1zcm;@2uOtO2aP{>4Zv+4<O!>R_&FGsJ@F<|MZQ z%y$j_{YGI%AX<{IA{O@WH0jD5X}_ilDccc5g^jjRcy-wMe&m9xviVgxd;^AbD4E>p z;(iG&?)l`Mc%Ly5g5yX$VVym#GF-NBR#gr1{Ipq>^D`q0^O2kAd5Ju%^J7*Rip>p; z6{UMcCyq4;aq{hgUIO*<(hg{WMy0c{K09Tvw8$IulZNs`{zyV|x%P1Wc#6MY`A*po z`eTv$S@Fr8CSDZ0N-O77RnE^b3co{anizgZ%&f}hUdJ?cr1{WJ3-?LgXyHE7=FgqS zeQ5kNeKI2r^D=R-5t4ggl#`sK&1^ZD#K+`Z#+I7diah;`oYIi<Qyu!<sia{ss7RS; z^do-iG={p9ndXai`KdnrCnpshk~3+qF~opO$>$2InPx^9FvTo$C(|qwZ$G1_R763V zi%CYNc#x6<_8!HYl~Afqa!E{6GKh)^1@<1g=iUva_(!5)YQBC(ORTUdsf^?FtN7Yd zQgC35MC=S=Vk}q|$e?>pNyc82+}WPkpA?OtoXb<T;|*7*fj4t(7%!MH`DWa`#uNMW zM0G~tF(Ge1!<&2mybr`FWOHLj+VN7RX!y*kJ^g$sx2|>RinNm`e<oN71()M8Wwr<O zB9mM*N6Gu^)RnlW|0pmtk)+b>Ew2YXnPcJ|XR1rPHzNeRcr<>Zncth3jFI(gR-SrP z#F;16q2D7`8WuW7piG!53&!nzmydQ?``4NF+E+BTDSNt_g#QtI{pvIm=Vz392B8tR zHQ`#GL5IVy_u$I?pXpZ;c5{I#%Ums*QU(JO2+ghX8LdsU(Vo!GB(4g~imr&Y!I3HA zd0gzy$&bm*DPi)e(;i->31yJ8bW(E+t{10nIX%y^lTUG_$oS>=aj=~(*q7hO`L=6W znk_My@NLA@cZE_O3d%|ZGUa&0yFu2(SU4q<y!Xg#>LW?eD%aJ?ZFLD@*R19=@u1v< zb#_9$h=hu4$q~)foGR**lM>p<U&@xNGxaz@En8SMH#dFPy*%2MltRkyd8~n+Ld40N zLFP@8`gruMG_Xh6+#F=zg{l6zDGp}o7{?K1$XjMd(8rTDw8JCMonuX8cApv&(Av$Z zO}g~c&^?44jDCmrd1_%?4pf%5E=|>0R)~CB)f(=3J0`~nBF?{9#lrdXafO&icm3KM z4okVklCtA7BihdUezgHpRqHz27AwdTR(=<UUUoXlf?;RHTGVCee_#gH)vNrByF<jh z(Cp-J;<`rq0Y|tgdZd%LSaV-eyj?c1kzd?NJ*?&d_uiqVrl)a*I(wfsm<-2RW^SC9 zQb~U!8Ej?7qT5f+RjpjzL6ILuy3*Dx#<P6Zj#i-<aqo*g6I-?cn*(W)C%ea{k~4Ml z%hJvhnApz*Or%c3Mxxe59^+L-XX@(LmRyay+EaCe_VpU!khI<BG?k*(dh?}Xj*llZ zzMq5=X^wbfTf2F#W92Z8&#ZQZv0^}O=GVYt^#^6r;q*E`Ry*mG7aN2z<=s1d#)Q*6 zqA$s4{Kg1Xt(bgi=CKTF6{NE~qmwZ~Zc4|J+w0gxX^OQ>&4j9yxV$L(H)}UDlbW(K z6_suF%sDlOm(5yO>Cb3?#H<aqrL(DtEu1+m?F~r_axJ>~Gt6F9D@L*<AzyzvH-)Uc z-cJ2!sl4+(+_+9TvN?JEDjm<<w#xcO91<!rVgB9V>hUtFp|nF@vBJW&ZXIEK7Q2pY zYORenVJ}50vkiIRyawzNo2Xk%j!}c@7RijHb4oI%JU26Miq6i6kM~v%d~~CZ*|BhD zRqU7!-h1_@XE2`JYlybbZE0FTF_WXOHF1elZC&2dk6|Khm(SErT9!fe^gRbSD6<Xk z9yeZ0WgFJSn$VG~Fd8%I_NBd}E!tuLY(SI0%uVRFE{zZa8v3d}XVMj0gTuf}FUEJI ziqWSlaV;c*X7pka?!2JaUEczFD^^TsOf4S#+OKi{uxe3d<(!&@^QM(mRqm61FSy2- znk06<jgXadrVZ{94D*t>9LV3<)VQ-<yx?HY%DA(Q7PJ*qNLh)Css^R}YEea+Q?3yr zrM#@%g~}>16PnYy+?Qc(@;e2MiA2gWjNQBFGsV!mmV{hOrkt5xVAf8qwQlCLbY;Sm zGg&&NUk=M;)zx!iZKE*8>&A&<&oVmV#OBL@K8HMh)t$$4@tgef=gyi%S6j`s6>kNZ zU1i~!N>*Hd<|7IABBzp!XY*VuJpIf!uIjrCRZr%;+DX0nd~@O8NLu2pNe}9C?bHL9 z(<$sj7E@=;r`QF3^{f05U*qjig4hb<c+T9gn91jl?MIhpRB9==_zcM*E)qai>QMPo zB`Hc2?DwdUPEls{n0^n`j;kD#k<v9~d;2*bm?8RY8+Pn83GdH=PC5@OSWmDt-2ePX zo9a57XbqRTEsS$#LTcW7BCyD9Z8t?FSe+p$VHX?N`F+gP3j4lW=SsPwU|dE|yRR@n z+(=Dvb@7fiaWOZ`kS|DBhqd<*^GLgoI=rWE`lZxCz0xy-<?-w$U1znnE;X-<q)|3( zj|HeUw$!ybmXfYKV>d1ff6Ih)L~hcW$czw%F`8#dM#mM2+A8QxJXK&v>r$eb)pfS< z*U>3AbLb6p0_L^FmNnuOOpbY{^qYNpr&F3~@17_(wXU^3HZ7yMZc1IGUHCQjV|brE zxFxo{?`;}uLWGG+`k0-e9Vf7~1B>0>u-b*Z_v|}1>GiQ<BdBeSw$)or6}*k|!g(sm zHn4eR(@B!S#=qpE&X_y9Qo-qp+#a(msGvb4H-*e;F`P>_WmU~sIJ>-N-rNN<>GqPP zp1T&LhD%&bwjN$NziMVh*({A;TDC4V=_>!D1t{+H+65n3>UgnaG7adxZIzRlnI?GL z$(Mh0vt{<os;QX`oxM-I2KITpROBv77d4Bu_tiV>x0^ueoy0zUc1nr+@;I<9=z)bA zLiwM|7@--w8`MQ^8{aIcYHW^aya_tQ$w9qcjQUgi-;n!G$<CW-m=f!Mr_lRIYd{~T zTt#lRy|t}lRC^y~npQ`n`wEd>K?SMgQz)XH;c_yJ6YB&21mW$4ePJ$gGh}n@xmU<B zj}r%bx{qhP1=3Cj2QgbTj`cbV=T920z3O7a>l^D^iaSP9tdZEpMkboXNPY--&>yO% z1T}e_7t)+FsH<K#23={zox2o=g*5-%mZX@d=@RO9YCT8$92|+#9Qt2ZeT>Dqg7VHb zej|5a(xo!mPF$0?{ny&EAZ^uXboJO%b#SZ6R_$4_v}l>!OzUf<dq}@?*EfAm5@So; zK0h#{6Q~{s`k8D5_9?i;Xk10Ny>E6I(amUiJq1XLJfwucYB(=kI&e34z^#cJJkXX) z^<GXlU`RJ0>4LZNmnUiG*jS{rTcZ33$HIrk#a44SYOw`pTNuiQ&an>KBevF>dvFwy z_Kc@wTr46d2W1>Lb<T2dMzz^X!bWXxYF(OTpiRi`IxxG5T7!B=yO>4fHaD8`%gL~G z<+G3X3UN_GK1Y(Aa~#RzqAcd3+>Dv>{D6gT;Vq`yMG0@a5GyXp@Ls18>yQkWWSI7} zR7qyJzMUQ@GFx;Yv&}lfL|kWSq7Bg_jL%{h|5UY3=ewmYS|*!HGGfQ<efKB1U`WOx z(fK)@&6!NydLl9QI2OC=Q>}SvHjYhR)|{K>N~$}0tNBP*17f575-#+S*PHl(yCJ2Y zcS$f#I2NlXl?Qu|(a=~QOO1ict9a|Qj8;gykxjI;@(qgYX#G*0?Hy$_dXuVvia&-s zZTeE)?@pg)2YphP6w?fg5Lp!3ID4c?04~*|ZFLQXLk{l{`K<_Z#%-?nc#YX;9cZjl z{|ISmnVX)$%w<o@a3?L4xuOU1`ol=mXge%(G`pQ(9{Q(nrI9r!b5wg;o6P>R=+cO@ zaS0lF28MMsFQu<t@R>8-)=H`>_%kuy%+`eUxFU24R7Gy3y`#;Qb{BEb?wD-wZX1Ri z^T{#4y_W9f*V9hM-VdJz4LRv8sL1U|Iij~2kK>@9qoZ{py~|mFv0Z7C8MV2!EoN!# zXhtN#jGB^2HMd8PQ{=XbLu6Ol$*?Q!*56Q^fbH&XN@)fY^0d?k?q*AX9UWUim7Yyq z2i*mU9vL+*!R&4iMs8|kX0`JtHO$vE7R)QFsLbTv7$%&eBEpr}apBV#3l;%pIg1}x z@B*OeNp5rWnDpW}Fw+CnR6Q4icOyGi6jaKlO|#NefFG>Qubejv^G0u8a$$1I{7TYT zq0$e{#Ab<rVbVV2FoeALEfPnafMuM|@&(<(nbV+MZm*|VD;+T<Y9HZ@W(s|iZ?ENV zc~IF7+U=onTa3o_dgIWzps&ME2gXb&5y~<3)XZ&}k6)xBE9Jc8@XGm9GOdObL6@xb zGn2^~qe^NZ$x5mn;j&1M6d5R6eL^hD#pR0lmI}^gGA2AlL5VAw9F=Uwm{NG(+0fWg z6>IO{WQQ_EB($mUO5u7@GHw^C%2RSVo>Vm}<(X%$r$!b#pSrhpw$;Uqg#!nTCtve$ zDPpMkp`B{1q*%QpWs08DQxwdWbja=@x@D<vrC9ynw&*FDXKRSIhg;j4qa9h%y1Lj> zzT%*Xsai32-eM<BY!g$|oSw7XoL-aIIdkV!PRVd>lqxtjIm5Uq%_`HVDMD#3E(YJ) zW|V^k`vM#-GR2o7utsZk61VMf>z~b8IJ<KG%nFOK-*a$=3G@({<l6`&<y)Egtf`Mn z2<3kii@2lkfAOqSO3F)8<S8|ex3t8Eza`!fX?b*|iS!rtEynMd+0wq$Jk_(}h!s1s zwQYq;5uK)zEkjjGIgafVMk@(~LP4!0=<#~Al2FJUw0L}_9#2s7A?&tz0-+MG7cHJp zspj>U27S&{83HZn_jm&ZeO<rQLOy>er1`vFw_o#?h5{jr*InWddb85!1Qt(esoxuP zr0B!ZJpN#yMDuzB?ttdQG(%bGXXqA>*Xs+RUno@K*1RPprHI_)F7*Yppx4bUUQfWM zA@Tm8<_~#%9?cu_`UAPWj%pDVM^b{t?6G*<o<JaA@r2wSZ%_*ayjT#J^H2z>^m{PH zK&aH~*8(LaJ};&lDhUxOLB9`U21-LETF~PO`L!VWAQqoH=)q5k-&aDJ$BdL%JVCe5 zjUSJ@#OKpWN<1Z4;%<MyAHqTkxUt-W-eACyBHgLQqfPBtQ9k4W&Fd)*da}}QI1<%v zf5^ebGb;EVIMz!j=tf+g5TOtG176Ba2#NOjF)4otNzyQ{ezz9Hf+@jV2B^}J9Lg(_ zS4t)7c6&5miO&<#Fn3s>B_Y4xpVxbr2D61okb^L4sm0^RvP3k&kS~BG<MsPJKFt^K z68*lAH>3sKfs#@!6bhC4u_Q|Ur6pLEfznb984QC4+*p2CZYADQq{1Ea`j8PlSWRC1 zco9O<d{kEWDMjWjDaEMXKnZ6tzo!)QisgzWAM|;sQiE=f$4_kH!{pqh9?W!!FTgX3 zSg@Y`oYhO*K95HWAlG3rxsiHgc*Lz?;gwQtyRnJ*0-+$b$pDrt6%#fd4O0nVo-uW| zo9aA-Y~m>?^-}?q_=3o#L2M;h<fWbxt)$djibWE{Jo|_VLcSoIPCZ(*35yt6L-PjR zR5ig;FBZ24t4j;Hk<*YCf6(JfyCkfIN`lC`L2oFCJn2W&7~AJZD!lH1*N3Hqd2&;; z#q>+PA&)!1kK5H+2$RH^C4Mi~53(Y$JXV<&q~?W02K_<gj}k;pwScV&*(5})jP(;j zCMzkS!oW=W1CChBvc|U77TO6=Td+sM27wi;cC>ZIu<cL^CDd}U8oWWO8jR}>fg39f z>ma|6%cmI9S6YGv=Pu<f1-S@o+)oK(OzgUXC0MS+YgpErpJ+k;LEM<3Ahla;!oi?5 zA=;w_k<GBMJRWSoB_W@OGL8)oD=y&2-qwpfj~jE**&H*DAnd&LP2d^uVKfg`4OI}5 zk6i1;3}7yhy-EXA&e&YMejo2dLjmG_EPCScQnwq+&>txEQD2Kii8=Rqk&sdkXTZ{+ z+ij;2*_h;O0bj_EJQeg)qwtmbu?sE15+bM4Qm-2su+)d?dXeXlGm$}wV?vmvK+wmz zHxMjEz9{ve3)Wizlg5r3OAM<TIR%**TMCv8wbf8CNKGX`OyCK4s9>?jqUMiv<EL6i z2E*os9UZa+Hf`!%Lw;<g!4k@15c@|=%oFrbHHJ#DGO*JxrOGWW4VDld>|9-Gmu9gd zgE%ly3&m~;iJ-0mGvdW8_(}r-#1{w#s17~k9t?&8c5&@o!@jM=Goa6l)6^N3;;`XC zZp7+Drob%t-B@~B$d9Z*j9Ti&{w9dYV4oPE0`XCofMIc%K$@|G$C1ldim)G>tTzxO zF2PaJCm(>V!j05o(U(#`gB9Q-jwnICz;LCMl>nthqY<)WsT(^3q8_`}0P;8$cS(S9 z>Y+e5I+bGO6O6vtfBMniO@$M}ekb7P-6xJ-m=ca5ZV#3vvI4eG9118pvaIH(uvpf- zlR;MY(3HU)@C@9IFdCBM=Vk4tJbQ^<{FDL}oUfFsq}1p0<@8*4A^|?5=L#XKBfDU1 ztRf%P6nYTbBb7)O)*6llLE;}jHnrSd%9VPmnC|zpbg7Tf<)!6`&z`ax(=`8*MxAJC zpoxjO6-Ff`!5Y6JsdlVb8p}1L!zMI0*5j09LPzUT*4ToiHFn4?t(G{SB5PcwuCgN5 zuF|=^Wfs>iXp54%8B!m++qdiT`LlEL>9Q}0m$%V_K6dU_M)zB}FiFZ%DnF^8XJYck zBfsO$efb_2U$J*~IFm502vVXYRsH0pYF?UXXfDGc0f%x@&pikVS>d9>qpbh1b`%~9 z)-#~+OekCn1J^>~lk~XHGce>?81ftpc^-yrg(2HuNH+}G4nrOT>kD9g5v)7F`Vv@Q z2J0(eeHE;)f%SE;z5&)Z!TJ_h-v;YDV0{;??}7DwDEt_#zkziZ6kaH6m&%1d%7dPP z!sit02TI}ZO5sgv;Tc-tH(KEjTHz@c%P4wG$m+_@$<50z7*IHH(BL6M_Zc>P#K=*j z_bu9QO!59>^FUTqXG)0i6Tt!jaGs%&j&WIIVB<=~3x!^BWe8K~1yiQ*Cy100Oi4UJ z1p6{5Vz3{BF${_s?9b$}OdiKz0)qn>Ok^;Lft!JcftP`gfuG4GObsvyGNqI$AqJBf zOkr>!gM*lI2vepqC}U90pn@sWm{Q3g%wPtSXEOOvrXI#%7K7Og<}jGc<arGK!eBmw z1x&4C>O!U+&eS8AvY4rVWy;@}x`ZhardBhhhN*vNN|dR!OsQjPJyT*#jWgv)rZzCk z(M)Y&N-MK0Wvqo++L*PSsrbK)smqyq3{(Hf)PFJfH&g$^)c-NtN?_`7XpTp-3Yfea zzbBwsgXTmuCjnDV#_uWkJr%#F0kfYD%yAaNXQSIWz?|m-vz>?VIyC2_`vn;0LWD0u zb1|Ar&}}`M4G3R~W+SF^88BB9b6t*~P3Uz6ey>Dx6`HHjel0M#9=|tX@SE{_3x03K zXm=reH=28ZY4>872hjZ?bblD(E$IFjejf*x^#sCCp?MmHB7q+u^dYcuAK~{CjPV)5 zUm*M?nw@CALbtDh4f_T&@-3S0(0q^P2Q)vT|4+ci{|aov@0e1T%!VywaIDP6t(39s z&>Sx_I1#@mqd^qoPRH*V=yoQ4&ytyPw#+Q&AbhUOoaf>9e3>0^k!;%_%eIZksp>}A zb{TyyLvs~|zZ$>S;P+bmUWec7@p}V)Z$zB8p}7n3-GkqU5Z|Nd{tUuf@!O4NyUZqF zeaf$(+iPfl9b3X%2)~2oeKa4U`9!w8hiM;-(Z5G;3!C(l%-lbt^%t35x>SF~h`(VX zyU^ODF!fk8E72T>=6E!#6y`obVe%S;PsH!ZXii1=bTnt6ITOuUXwF7+4w`e(tW}t0 z9mcx|;fv8+f@VFM4QMV!vk}c@80K>PZc><X1%9u@?^XD{T48Vlnj6u66XLiT-EKj1 zE2eupe(ykYCz`v^+^w+j_u%(l#daKEKJLRf_oMv*#kPU$4=T*{5Soi+=6V>v8}NG_ zejh=z8O;_nzoXlu_<an`^=KYfY)>m#7Efb(&nV3EEaH0}%?>m#DYlo<&-EVqzlQeL z(Y%f39W?Kvc~4>9_woB7;+f7|A0haq!kphJY<QPq+d^o6R+#TMbl-)f9;;$8t4v;{ zvPmZ(yavrlXii3R3Yt?@rksZUrz3m@nln}8EtRqJF#Lt+cPW~U=#JU4T!!Dv(QHDu zD^xaoBc_Gf8;)&Jxf0#3QrWnx(f=Bi!L_RG8z6o|_<GfLgDNxsjhN2O815D{x1zZX z&FyIJz@GU|j7R1^G!G)4M^rW#i$K|o_AMCZQT#rR<_R=EVSb-Myf2{pi)i10@XJW= ztN48l>3<#F-bVATYTHCKe2VaAXg<gAUtpLoRp#7@u#V;{w117}8+7{?zu%$x9?cIb zbNz_sCp4d+S&!ytG{2zv607G|{C=!5dzZ%S$D&!OVL5BewF_xqgYan@D>)s%XQDX^ z&Dm(qL31vewP@C9Y~1<yy#URH2w#NXi_uVLbqRjgYgqR9-Gsx=RcNl(nDZL^UW;kG zDYNl6qTfvz=4Q0tps@*epx>Qn?m}}nx_yi^-h*`AkKrCb^PtAYKZN#&5q<>y*Q5XU z$U@k!!lO9AJ%Q#)^t(Z|EyO1Myk^^~$+m4879VjU_Nl|MI~k6x#QD0$_IX3IJ%oO) zHxboqXx>8eDjIB+uD9{~4w`q-yocs}G#jwEKEUsXXg)%NLxJmKjRn5OB)`>I@O%9J zh~J+uOFyHzUa|d7X?Iz$w?MPf!j$7IOg_QFN>4`nsTMXITj_9QSM@aXJ00CHE9yBG z2IpFsa~*!qN4E>e9nD2(E=IEf4OWr5p4bQt7L$s_q+VrV<F7`)>oML9Xl_LKCNwu& zuw|pU4$UoSza7Kff#yzx??Sh`(cFXS-;d@2bbAo(Cu06S!2CXhZjYebW;Dnu>L<j? z==La@$I<NxG*6;=%EGi~@cSH^=h1Yd*^cG~i|tB~Z7*7o#vK-07d7pd(EVjJuUMGl zRs6n&>AjBT4K#0}c?-?kXml*!chLVmOzVC8et_mf%-6^G{RGSLGlaiD_)9c8!e8U} zTQuLJ`O(5GKjZf|jQcy9U1+)()&rWAXnsMz<MF!+&1y6!pjm_FL^LO%IgR0vj^8uU zoQ39WhGmAVcMh|yWtfL1+j@qbCsS?TDVptdjkpej-NdjrV9a(W!uO(i6wMoG-a&U7 z9KInthP}>;T#vom?N+8fgXU$l(;#q`4XfJ5<co2ZhGUQNq>Wi#wb{PMiJSJCjZJzT z%^T?UrtKDxBqm8xqXbJLon1|^q-I4|lT`O#wAWn&E6L$HAeS3}oNhxWDRMi(kvqtJ zHQY&-)o>qB?A35T5B(qy{Rnrf+e}XD;8Aj02cH_Y&kfru8ErMIWwg|+A^0vhi7a=) zsbq_sMwZB0f)`yNOVVbz9DgI5xbqb}$dw$vi6gq1Bf8Z<bi0A*PO@!>yUDg4?&IO^ z=iweS!aZz++f23>VGG$_gvVr_yT@goyC)3WlZNdn!}hdcdsa4b{=D4voGjICBiFhY zxMSUm+%2+$llYPm?PVj{t7O{*Z;)*hye)UVDPys`EAwLcK<;`^M&FMN-%sVPj}gsh z9L*OpFF>8j;VbU)4KIgpIs6^LOMXDlC94(uIgfs>Q6zauUELGP%ImN{!JKbZx}H?z zy4A26x|KDutSHJR*k-zHPjP{ob?}O^@;#Y=H#u;xybeAl$hsNo@Q<QIHp^dNEW2G% z&Q#7(&Qi`*K2bhZK2ttdWb$7Py3(~p*{N{&E2V1_aOi7-<SjhRw@TM$<r@VyV-@_M zbbToUx<}-6H>@bp6EX=~A(9&|w{{R4G_w9UQM3;mcR6T{;kO76DS^Tvd`ITjXcu zb!yjIb*BtVw#esGU}?z(s-&SUf`516WWa9zeJNk0UaVe1{o;~WWXj-XB=8=!>u#J) zUM8=H4dB9IH^uMXJ^0<<!%tfBkV>rgu-dhO6Z51&%u^~>)6?V?c}4AdR#l(nDBe)J z5|O1PZ=yHm^&Osl1l}V+TJoVPsS%!!-*8RgaC|9$j2-NHRa+8S4eKCMf4sKxM;x|x zq1#U?Ca_9d19tm*RavqbW1XONt=1@pVcn3hN=q)&IHO*n5i4(k>$H_`$_hGcg2*k} zNr++-yeZ$H$;hvf+YqP2@t%CEMnUh@R(^~@HxXxS(TJ#z<xOypCM|hPLr$zYLwQQW z{6CI?Yn~xU!6K{KB6n+8S{r1n<|TF8DOpVFMUMFe&E%sUTGxM00l=)itRZI*J($QR z+R9h8tKc=ww128~8Fp#OXBw95FZA=P#@p5|t?M@p1Kk71Th@Tnse{a!*wVFDS!IDG z_rMtzVj=|2B!KeQdA0@1`Ya2F*9v%zdS0sK5@9)4S)XdTR9Nm;Hl|uGOSN2{YT0C1 zD6iL8x~@Q==2pwf>nv)drk-+nFIg^!_436QY01MDWT)HIrw!7}w;JEG;a$s0?(nJU z@wxf^%KUy~e!nxnKbYU25@m24Gl7#6z$ppf)C6!w0yx(IK9tW(0P6^#LFOs>d?sJO zUezvS7qKLGu>db&moj-HyPRFd*d_+jEh54dBGi=vyh?yq3-B5NUMs-s1bDpwZxrCo z0=z|lw+iq!0p20Ny99W*0PhjteFD5+fDZ`pK><D_z=s9+hyXVWaEkyR6X4?ld_sUv z3h*fbJ}tm!1o*4~pA+Eo0^BOVZ365T;C2DNAix&|xI=(13GihBz9PU^1^Ai(Uq@Df z%h{X4<t+ieEx>m<BfZCeH)=`e_eF>g1o)u<KN8@_0{ldPp9=6Z0e&vPF9i6d0Cx&d z7vNU{{91tD3h+AtelNfu1o)!>e-hx&0{lgQzY6d-0sbz)U7{TxOa=FVXop?aBzUX< zR|@br0Uj^FRRUZsz!L<xMt~;@@FW4AEWlF)c&Y$T6X59rJVStI3h*o|a?eK09_8*4 zk-M`+kaGlhu9bqFAcCzGe&-2rodC}l-~|G_P=FT+@L~a8BEa<m+#tY9IVE=pN;V3= z%LI72k-bgA<q82_DZr})c(nkp5#Y4~yk3Ae2=GP$-Xy@A1$c`9Zx!He0=z?jcM9+> z0p4v*GUJ=PzCIV(zefbSSAh2k@O}Y4AixI&_>ce}rc!&vx>>kvvGPvlQQ`8K03R3N z69RnFi1L(hd0K$a3h+4rJ}<zn0^BCRZUJr=;0pqLQGh!H_>ur$5#Xx=d`*C_3-ApA zzKNMpHnO*@mm@E|ZB6NH-w}b{72taUd|!Yc2=GGzek8z;1^9^oKNa9-0{mQnUkLC^ z0q*2YL>CTU3GizHej~td1^Ar+zZc*S0{l^cKMC+>0sbPuUj_J^0Dl+YE&+DgM7Juy zl>$6YfX54Pl>k=@@B{&_5#WgeJV}5j3-A;Ho+`l81bDgt&k*350z6xQ=Lqmz0j?F` zc>-J~!1D!ofdDTO;3WcFFTf1~yi|Z21$dbNFBjk@0bU`%D+PF!0IwF{H3Ga=fY;f~ zerl8Tdf|G50B;oFO#-}GfVT+nRsr57z}p3QhXC&s;9UZ|TY&cn@LmDlC&2p!_<#T( z6yQSwd{}^w2yn9ix7erwo+3KwM}^;G0(@M6PYCcS0X{9jX9W1H0G|`!^S0y|@vchA zZxw#q1lTRW?E-v3fG-MghX7v^;L8Gh#rBpB-nPACd)KCRDeu|dvVLGYP5I~hwhz%o zA(szqA6b@vnDGAy?FC;dAKN}jb;(b-m@%HyPL|W6JgfchQ(Kx#PA??cy<D<-xtyf@ z@3V9~rzBj=q))QEt&mkC>*qX(eJAun^o6Y_qAzXfh<4iknPSsz|NGE(FUVy3%Jy{v z{6>J^3h+At>elZQ;708SQSLw5-~%{Gvni^sex-h`ext&9^8IqTG)hra?S8pJ8Vwfz zRH^1*0Ct*ECUt`KMD)%A+p$n4tpTu~h=H=fQ8-nK*zMr_R;`fA!S$V5Ce4McmO9A_ z*|oKj3ORGiq{{(vzgMHudVsvvsnQRs1o_!U#Da0gcfgMr^JpkM52i}%K!Sn84EI6v z%cQFS244sj(!ns~DNOwufT1TV6;dhebHG$-HE0S9tF4nX82%IDSPCQFKw5^w$W3TF z97auxN*e%1mr_t!fqm^p0!1gH_r(DF9cX%tIR%q&L-9yV*x`WvAHi%l!PuweGHD5n z`xJ2=2;)z~FqJUj7j*mw9Pj~tRsu|%RVG~lFzE-3aT0+0S;QO#&$*bDItjd|pz~kB zS6wG5;2Zo$5mqy5epv$nA{(^C;AhZ*mE0oDo4&2|Q>Y!sW_TS;)kP+^X9HUsK zPBgw{mZ{Pv%uV^PSiFZqg)UE(UXdl3b`sP{7O1=l(Ow7;o>wMa2{66Lh&5x1fo<k4 zti&;J=x-S6WPrma8Q!xtV!n=n*^gn;=K;)FiG|(_b5F%Gx5K>ejBNeobuf~i|L-zs z0W5eQ<HVtAEr!j3g%iw*Iea~oOU25fBNo4m$c_W}>!D>B3;y=6GN}QU{EU(6A@U4H zx(=XvCsH4gpvH%sHyz;b+m)%(8Hxna8D-LC0JQ<aswhzRDiVAOK>g_$@kD^wJ_h0O zXAoZv9QiX=)<|eL0YhB^(D*xAC%{pUBL)A3qi;t(9;-Apw>S(&Xx*kxl{O==^d9sX zpe*`F+du<dd$Cyw9iM|ytexi|%8LM&*^Im|Z!VKo0UWaqQMbVg&A|B2_c7Gz0RK9= zTyns_yRl9O!+-8W?E5NB|NY;2=z9)87hHnW*21x{8h!loN;nSoH4;7^wwv|13SPt5 z`@m|rS&mAx;RHC@DE>9D3(@=qPJ}BkcT?dcXsVDVqVMlmW>pfL0_zcbBb*BNVHsTw za2gE2Y|2=Ar$d((m1e;iaI97)&4Dvvh>`4B;50IDHhhig(-!_Y@GYiarko3F;XHU7 zQN~~$s0RC-4_~3fk#GUD)JhC4gwwGYx&SVM{S1T`!!c#jnE;odU%7OUx*jG^*#IXi z<x)_-6gI*eh<lhExD0+pJV(Ig@CMR)JisO-zg(ImUjbLbN~CcyTm`RV*r9MWJcU93 z2G@Ycteb1$Q}mglu0-6|VJ^$1X;_rk!=p&cI)EEsywQ!_2<x%!?hiM?2!r~YVJnv4 zQE&?!r&UPP;Z}G7i}o(e{%x=eYh*vU>2?^5k;env0c#Om2iytyM$YbnQ!y7d`EIxe ztVW^Tix`c*?LPQTA?hSL#=#ub!2?iW#Cs6VlzII<1UF*p%iv*n05Sgy9)WxDdjY^^ zOvE5#3v4r?N8vp5JQm<FI3BC+FnAnZLA(KY0)EHLk5|^ilkgNAj~Gt_cp7WAOme|9 z;5EzWSvUvdp9}CDFoSWQhvU(u1-3$-LD)9<1_`T?pc{5zY#(fgGcgnO5|+vpn8qQz z@?M17vBwyPLGHnCA-n`@k^3gY%g|IV9f0-q3WUp~jR3F0yNKmK@EUx8M4bWfI{as< z^a-Z?1{`dp_$GXYRe2M@TUhjE(*NLX7-iJVJ8+N@<Xt4VOu81}Jxqxg+xu`I(tSSQ z@b#8CQhW$OBlJgbH~O{1$H??$(g^^cz{i-vjR2p*D&(RFd<MrMHKzi6j;WVP|Aa5# z45K=}L{8_xPUMDiDU2+n!ytp4uV7)FB%{mMuo}_Khi~8n{4RoTk%gz?a3sNZ@PcYI znD5~lOkz3w0GHr*9{dQ)%cQdaeuASbBq#g~U085l_yrr!ROv;G`YSxA@?P&ZEc&U^ zc69n3y0KJ;z%IBC0~cYG7tH2(tek7)b)~!(D<z~JCr_SoyxdSGwZbZSwPIB6YWX#z zE>Dn0n?2?l`8CY&3OG?d%c#|p<hv2~AUIiGgB&#zPLao$%yO#yHU|ASoF@MW9LwqQ zP$SVZ<kc9b1X;KX+lL3vl3&9iArH=$pT@ja!#Q$^ncTVZm5Ad~fVFbGLMp(?#a6Um z53o+|m@0KjaK1d;z<B}EQ7#Qsnl6+tk}pLxs{t;S-G=8SvSQTndig}8at3UWe=w@) zQaQ^AvJq)0mvVUvxJ<qr5iEqu<#qTy8~YJCUM}S;SIAe&SIK81bF2lpT7K0m%xmPy z299gxLk!?LIm)qLFTZRgbA$YjIm+EAKY%&70pKQCQa*&K3bji~4$FL)!x0v0Q~(+K z0A$T+k~H{c`4;(B`8N4>`40I``7X@nJ@UQseK^Z{Kz>kuNPbv;M5d#yN9D)l$K@yF zC*@lZA2^&Nx4L(NEM-;01hoPAQN!M`S}sx><egxV*C^8^oE?GF)n)n0s-LZFb>rs~ zxmuZE*FTfTOmOI*<F8Zy0)Jilm-w5d@5JA1UB}-X{VV*<)xXByJpCK|&DX!h-va$R zdCWpbgQ7pFRI6heRQ+Y8T3aYJX!@5*wdHWB!J>bwR5Jva{)<v=MK7y<yjpET7n}Zw zT5U%cyZ)qF?LfexZ&j<E2sric)N0q52ABT3TAfwgkfpEIs<Vq5vh{Pd>YU<+9Q_il zI=8qXSAR~c&MR)n)4R3m{NjdueY;j&P~1?Uzo1nQD3Tfm=r3y3g~bhp`fFPCz~Y91 z`kPwypfL@D^mn!D!4t+e4Awu=s)rOe4ADQ<s)rUg4Ano;s`n{w*hl|Vs~%R|FiihU zs~%q5FkJsis~$0?VTAsJRy}e|!$|!%t$Ng$hEe)ymg>=%(rEnxOZC3R4g2bsSgVVQ z8;bO+tkwG!H|(cBYpotrw5wr^{))A_7=dE_J!|#;2<)$aY^@$UreUmpxvhF!al<(M zJA3u`2?sZf*I#v1Pr$mHpnu}1J^+CO^lu#16N?)r>d!c<ClxnL(!X+6yNes#`t`1A z590FZ54)<p2zd1uUDdt`(;IyHn_1O<#OBw($gVCy5=->cbE*Rf1oT^Ts)NN1LH+)m z>QanUsy~ub9U9XR(tpdTo?P58S-&N>ddirFDf)}K)dymL1NEQsst+n|I7ojWzxv?f zhJ*F@@~aOiZa73gSJ^sK($7<>r;cfus-Le!$|B|Q@_0pLT6|i#OdhLWkZ`JugyUiE zbYa42dSpg?26wtB;WRUHX#7y_baBGzu*j_VEbeqk!fAG7PJ9k`TAy&58<`iM$DKAL zoc<D-AD_>iHY$+?;RVuI{W59@vaC2=|HTGyn`NteWLMRWozNuRX4whNaF<2D!?Jao zwot#z5;;76c%&*`bpnRa@3wR=%kxQ+ey^oFvM9dj);uR#?z2P|b%z(hw&)T1{phhc zzWCNW7kWHki7f68FNW}6G0}%D)mdYZi8os!e+&N&9ky7I3PqNkuCYkPb_=!LCTY7x zf05Fz)_0f@UQR@Kg(9djw%=lm@GeHs-?v2m9*M@I;lIP$JS!&ofrYFy^p7lC)!G@7 zq%qZ%ce9G&zrgT|#_hmFaGLdnB?d)Ov&?^$7!)_F9Mobkva7xseYZ6Ok@JN`*DVoC z+!Bu!N!KnLw=9=Q(%48m9$!lqCs~pdEXylG627)nM`O?g4N?6Y3x!;kXG7<26WRFA zGF|@x!$gjZABkap!Nic(_GVfC)v}c$YPI_BmPkXm0Rwk2bdkw5|F0nF$FWFOJS$H{ ze8;ot`fBtgKMHecd$XdSU^pm6(v8cSRecRwBlM&#I)#q{3UMNf42lmz+VgUdcJhcE z9X~qK6mPopre%3=A>xxMQgfs>UK?qNw}hMJ_GV2#okd#Xt&#e8eS9fK(!&2hhB}kw z%#)<8?r!&ArExEfbB}KZ{Tx=^5$O~G5ABp2I`nf{Om2e6G6W*a<I5w*#E;R}vPeg~ z<IrVFcm<5r&tuhUaf3R{s^}LG0hn6+pHvn4g)H)~@V~GuE@Ec4dNGUqyGSaMBL9j1 zC;ngl`#-XW|82qM!70V0E$Bd0u4j=h2zP-rHfJDa?=luSHc@C;^G#~_SWw35SF*@T zC=TP2bgX_An+^}jFUqgWZS9uhaImVwnYCo8$MuS&;oS5D9BuHk1|$VPCxWC#BnvU} zIOMaNnZd|6GyPVEjC>O4w=sj0?_eei+{uuW8FBJ>jPVf0&>vyQM<+x4WZ=APM@ly{ z!(oR0DBG&GAU9iyn;#`^ewrn?8RuwEvwm{((@cMs?Vg*n3~o+Ru`F*4lJPvNKA9I- z!^xm;WrCx(C9>0vtoQ<j;w+7!b}-`U7UJobn8DL6`YX)j>DL8MHy}^H*^`OiN@wD? zdo%Gnj598avv@3W3dBzVWZpz>)VPY2zkme3*B2*$)E6gz(g!Dh-X|x2k>KPn1Sfx) z#>qPcCx4yJ$^VbE_W+OT$P$Hb-Fv&0MXS}42ojP|ODze3varXVndh0IVb}?~6TGwk z`Zgm8?#jEyo`-C9-g~<<n4B{rgG2@qOpYdl2?o?HkjP+?u?Z@2M(>=ey4|;h?3wrd zw&?C#b?VfqQ>VfSRrkIj$qx)ke)xTo{HTQ_Gx2>EqKyp}-?1pZ%^})2qK_l?2!I(F zs*NY^@gVVZP^cmNbZBTm!iR<SfDN)&KK1_~;b8>iwGGJL#!!&g&7oSlo(?h@j)LC~ zl6Qo1!QTNA4XeHvR{h<fAm<TAxd&M8QK*)wXF|D11<Lh@<QJmci%|M1)RXUpWqe>5 z0(oP935^*PrcEGT_XH$+a2Vez3<(n}*|0EeB5_Z|<_!<ygKR{YkjhbE+9aY)COL2Q zg8i&}5+WEA1_VVJ6i*7{HBSnoQ^Gu%Uf7IGMSy6eI0gV#0Ra6hOq)XVDFkS4gEaR= z7KoA?!|3KP&s5^Am`dnY0qBi=8&}0JtqSO_!fJN}$lNK&++~ot#~}0V0Ga!c3LBEy z0V+EzDmxrTzYOyL{)#Dt9z~ECgV0Av=#wyQ8qudAp>`F@-XM_kN)&z-MhAv_ra|Fp zgboVVW)OV_!DXNgjv4l(%_RCvvW}1X!Qq}+gyVyB4&VkITc1tzIizA1vAvIrkU*r( zCHh<_3i#R~zPUz;xlm%Bz_XrX9%{ne0#0BClIZXN6eQ7+;mD<G{L|sDhV-g7m^CUK zI1y`bVtF`lVnw(%pXl?E6Ar5-GHNkSnQOywpR<58qzqh08dC-?BIPP_W^H&AD6Hgi zI9)G_4X`Hx1slbawt(pHx0q;4h`xllmlBvTwuF1NMMPgj*4YzrKNRi(z-2@v4)3*$ zkc#=l_5kue2hin2Uk;#g@VJwKE(g(A&SB~xaW}x!61`TS+sj~95J>a7L5J_Pf`cxC zy!`;Wkmw5q=obuhB@v0kd#&W4{~PiS0q82CuL95_NooQOT0Rm^kAwqguZ2WHHqbA_ z>%G<N*HM9~-ayd}%RDEFFP!?q-<24{XnnXhB^D={6X9j5*S#8h;G}4MnJU^%&xCtE z;@oq8Mx=_5=-F`38e&RWL+FLp`Rj5@8Sb^jl0`3tYwL)69gdpI;Q-|a?6rUp>_~bg z+^4N4I{a-Qr5g#o8V)#o?j=anHIx`17m=^SxgvEVT+AEag!>2Nx8Y(S-b6WyGbXEH z5g<n+BDBtWXON<J9QZ$m<Z%&vIE{;-6CymFy`ZK{ir^!9a)dxMHA0N&;c{R|S49B! z1Vc)<A@<KBv`s|cgi_iT@xKEZdj<Zz5p;iqXA=z9O@w|SYB*@raM-9}jH!krSVKF5 z{${M<(@3qW-WBk-w*daVI3Em;<P{8$q$61_j#=1GW_e-J#CdCUq_%}<TZs;T+laQE z=-Xk{*n*497|g;?p8GkWV<WX4MBiZmOo;S!^@4sjDbj0)^^{JD)ZW357TD<2NNp$4 z;cpjlzoP<k5UwhKmm{UqB3;37Ga{jh9dKUk3QbuQi355!IoU*}%hHlax+GHDO?vGH z$%aI_G}2pFx`)tZkzU|HBAzE)jvQFWitQyQol=8SYHT8NWNAZW6PYWMP4G2OmN!Sz z4UyVj(rYiE0zkScl5d(S8|dapzTv2B#2rHz-5RNd>*2T+sfXE1--mP90DD(l03y9u z3X`1@=Itk?2MGPVW%3uK^dJGe^}8w?>wR&{o15uwMskwTm*;?DdLdHF)pH@aqp^Hl z6<v8Xl3oXe*b55r*T|q`quh`vC^sxh%hU6qTndu`8Pdl@@q%Nb=s1>ZmVpm|^a)V` z88}3=!$d!9bn!$}))90+=wBLHlT2AhiFS<W$BeAWrmW*ct0Q`ykyRDt$@78^KRwE8 zuZFs3Mu9BAM~m9&tf*jFn2m6=qgs+e=d^&Ei*R$JTGB=5wScQexaz2uMADiTa0{Y< z#i<61Zz79tM`?w6A+WfUF-_bT9KIh#A4Yi!y%mM@aTFiKPol&ieikJL@mkX$eva7F zjA>$KG+>_{t$B&=#c9H6OcV2?IsW<4bYZl|3)6&`(8bZbh9%LWhGo&BhK;5gmPbPk z=|&B^v4*|Tnvdu{tRVwy_#I>%5;Yu(rbnVZKB&P5n~rGzw0X>^q)yc8jrO$3sAxm$ zjY_wfDm{Ufx(ue>!AfbgR-_j}m6-<99*HU+0h6LVMc#@c`b;2yZq)YDz`nzT{S{)* z^6voJ;0~aTc7o_9uu0hl)7G}(_}8|f>)UuvK$A`oy0HzfVN)AX!<IIphCQYlwzh#9 zIvX{d!Wz!B;aeA|A;;LMT@p21YC|u#@yvi4W)OM>%XTr^{shZDYoitG#Za;<mh1${ z18uzIKpP!o^Avk4is=xWplGNK5ab#NW&k9eWz$OZ5<rk=AgB=tYHW0Y%~Rs7D4~lC z1d9<tzJcHfA~<T(-q7Cw1O>)6yj~!vx6zX}Pl30hfHpE9z70QP(;8qi(tzAJE9_+F zY+^aRVDrnxMH}bmC8P4oHo?zd2H1HO2`WU=+v6BwH6N3un>Kpe=6S<g@dmwv5Jd*V zN5lZhqhhp1qBkPLi;aEwgcwfrgcv$0#&Zf7eu~g30+8>+t75d%K=^5_cY2JU&KWVB z&Y3ZS&e<`7&R+%SoErmFlpvjnxZcDFIv2&zB{3eTprVn`r3ll_VD2uYbWe=-mi`vd z`Gzr79~5*RjG>2PJa2g`-l9ja+?z(Zudv*e80~HSZ7BBxS+wsPQSO@<dNYP^mjaqP zd(_VmRORjI(A3*8p0~XfZ__(5p7t3P?P*htr$a_X2TF}L-i_%&@5g9ofgfkFeGia^ zx6lreiCZ2!Zh7olN4+DnKa8|%=ZJoe^rWNh+Ig6-&l6<++elmmz)!RzaTjE1qMc5$ ze=l_|><GK(9I)&htm}49$Bc@Obh@3>Inyran`Q4o=i0RkK;H$VZ=N0K`=KEP>yf^V zcI_h3FCrm7G6>nu2)QCl+wFA6-zH?2-E$ELxk%`4yC*TDB9ZP9gzPg2*$;#qv}>1u zkV{C&AtdC-NC=vE&LAP@>{^llML@d0o`iNz?JJ^xMPPeu1Fiw1fKRwt1`7X&LE&Xa z;SE{3Y^PWMHig&ip09wyuL%9x?n%n1NTN3ch2I(!-UJHo*tN?*;bo+-2`PNX5U1g> zK;g((?T7jgfsCIRGwk?SE>7cP>BLyi54{yXq?2R$IG7SE5Ld;Dad68t|4oYp>_5fU z{1MPBi^Uz(bliB|k)_&LS{tj)BKj<XX>?_*x5{pTR;-Fm=}A9}^-j%cl4CJpO{}*k zT^H-suaK15Dl}E#Pbg#y!Jk+0Cy@IyqZNm+6-Q#VAL&1W<nBf*yrLD}SXv+J`H{Ec zNA!efMT60bQ${Q9nObogTj4gaHzD@BvD%OI9|QIti2Yqiek`y*j-^jyy_oAjbL+F% z9`r@5=f~cPAJbQ{9$Q9*jW&x~KXr&&2RlTqsewv|IH1y=hOKYB11g>9(5?|3{;rdh zSX6c=iG(`$bu2O&i~Jn7Yo~C-I@^Kl{u)?2*HPE~2F_m94zv|j*|VVVe23@1wQopW zuWvy2`fs{`W!05_OXxy}c9Y<f`zBlY9oj9T-y&7^|3b~~l`O4u&=n5PEu!5fy>5e6 zc8k!J0x0LDTzZGlRpQZA3QF>7hMFgEl<P#cP6;D$y~E4QS9eiI-oPK6;m&aPJpx;& zjSjE-K9au~8`w($o_G~#;2vbkK4{wm%sk-GlJ#VJ4m9nc!;|c)NT!Dzo`*zxL~=$c z?nltdhlCz>aNZv=cz?{HrRXWFSe?U@;;KlYUWex~D>jA~drYWL6stFiH8`|XJ(U$Z z<?y7sDpKibhvx|^HjWp20{W~dcGf6%!J%d8S@wZY?2-eGRZbF#TJcv7Po|cm=Tv0U z%MR_2+Eb!G<+fDVVn=cN>Qtgn#WYL`!=!vYA8noXY_wTAv?{`jY0robf6qyc`1JyQ z{fGV^3%F6~s>74zssQEIp}ncUX&(fIzj5G#ElBy+;dw*rqIZGS^d^$>lISm6l5&dZ zr-Dc+&<hwT$d6kNSUGtyLBK0NDb4U}psWv+7x0z!w!`zL3$_GJ*t7p&0bT1c+FYJ8 z(fw5R>sm7u>7}EI%v4A-e9cni!Ey9C^!y+hH+K$>9ShKA2jdG_$$U%$<B+SBHuUj) z8izTRpo|TUV+0GBA#vDT4l|VHR8}_9;c=#RR^cp3N5**u%RH@qz86|m?S%$aR}7Zv zs5s9Mk%czrdZ+9jD$Dcf=r|MH5ZU%qKr^1987Aw)<d$eAFf=SH2+hP`G;~UwNgg<H zRdJr-GEegX*5?TQ0-%S>bXuHegvdgyJ}2Q=r^lJ#MsVV0Gc+S*eWctH%^Ze?Wd)&` z8;pj|kJCmGeH76~$vXUvmeFH?vo<I}aoQMJA0rR27eHN$SY5+q9X?sIK31;5nijK~ zM#%aIa|WPZ8mD=5Pb-L*#cAVYeVjmC%Q!q(*5Q*S>*Jw3@OK5{?+{rZV$J}Du8IR5 z{vy;8Wj}~phRt#4CTWBTy;hMo$8mp%;UU2}6@4U`=po7M7lJ8^NWW0#I|*Z-;p{U4 za)$PcM4%`H+DrOHGoMOd;_D|jkrj%xIj)JURLJHyx-CwdAnOyDf1}p$v(fEw+C*8O zh^f4_;h6e)9J=$^fMl+V_Ii8vfNn*)BTkzn>yzXvrkm4UaXsi>6Yf|P^L=rAUOEt0 zXSh(hPnKcsJsiiTYGVfRk6-r`%>B~L{;8ZGoDt~JIIW%DE@!<08<AS{{h)kS$$FIx z@@fA$I(-;o>WjnrTAQJqAW8L@E4MajxTit=wqF3EMvmyzcOs&v<9OB8^vvJD_Y=T( zk>k7c-T1!xek}AV<O>5Z@T0}fZ1n*2MO{Y}s(ljFcO%Z^dM?KKHjewL;0LDDn{nE7 zS)a~E{wMvc^j4hT=X;xVm(@~6X<U%o?@ja{8+h);@f><TPMaa?GX$m(`XJ8aYkSCW zg;+kM&*FrG?ImI`t;_u^^i>@5b<M<SwmFWwo3K%0+!>xHnEBtp88#lFyAWd~AH<$p zI;!}hKA7e4b$wX8)<$n*9|9;w#Islx+Yiu4HX2~i=;fXzOKgbQ;xKt!JR*YPp_t*G zEu)79(S_=L2gICjZl)vSx#4X<%;x51UT88aq=o5WfkG4G@!2ReHD1Kn%#1e;MPr7U z6)%RBSn}xXcs2-)AuuQ2aFDJZ<R7SW<Ixp2$Uipc#p6QkgaK|ZkR@6p+6SdbO=Z6@ zIzK)z+@tSFlI=W_z9b&)gpd}-?S7n%ZMFitmI(|-<{Y`QUpQSJkMmDuzX)3nmamQ1 z=E^20_=<op_gv%w!hR63tFkZYj1$%e_%A%}An;=a;x<*hkHBO`SH)`<9cI4|BL963 z6ki>$%|mh{-SZIJns}qXvgleyHvhd2YYE%UY6-(_JKY#>!&r|+EW;_ajfakEPb9jH zv21{S0=hurO@2^??uz%jV5?=$H{r!)&e%Qiwtq!uY&|+-%T?};-52lo#<nQK{j&Sx zg<p1myx%W-Al~ekJs2<ivMT+u1xLOJda9ADKj{}mkHw>J780X^y|b*Hq?);CkBdg) zKD<6&xN8*=cyKb_79-k0jCMfnwxIxgK@`N@|HWYLT#6T7;;-U`m-sRQe3ze?tw!{U ziIA^b67o%e5ZOcsrSTp<I4UN{^lrR|%WK6%nck20dypT+YlBDzcN;&6=YeQX<9Ptu z^LSjc>|LO{U&iwYvf&A6KQJ7DbVLG9n5gOEIO6t%6c{zBK<B6g9#l3ufd`$9NdV2C zgK+hKe1ev!C;D+s2*$<C00yo}2|QqJvcNSZ0hD(R!ZrA538=37aZL}##WZ*W*USVS z^fpW2nw<b@HV5Il_PhkGgWdsgwMAUjeq3w|{kHzLvl&pKw|;(tc9viYx3?@17?&n! zF?tLlu!@L<0rpq`U!K4N`f3xj`LcUH4!D&GJ(TGYn<92Z^sl@V*&I16s(<C<s1ecQ zqx)AzFObnOzfhK<_Y!H5ELqE?#j+IHTf!S@%B7{U6jd%Qlcmr_1pWI;A8ENPg$*N8 ztt?r-CejL7ih!q;vJ?(qt7J(omsZPCNV)V&*%}!&9+k7T33YjV_wJO+RrqIVB8L=d zZ311NpeefIWeyMYY;H^trql$kB-yMW7h4j%ptU(Le_H|%9^9V5&4#w?7$XMxV|f0q z1Rhkl+sHqFu29Gy$Mg3m@L<COM*d<{5fgAS7+{}?DlJTehZC3!=STuQoZxrb97%v# zw9)n_m_(b%VMRF#K>HQ-SOPtoU^ruN$}LyvF$68Q*otw&t@G!WSy(gUaR(Hf=yiXF z6XvmmGRrO~SY|0x<MzU=dn7?PbVk8LLqeUm`x=Bhm7uMa^|i7+292r-+%I`H!7!vI zXzOHso$Ph5mkBe%T}<#yk~1nM$@EeJY;Au<l*p(g^zS90nF9K?8QS6nbt-{=+7|Z& zJtgVa22fR70aVqN0adl7(+!}1R8-g`qdTa!tr1IfLLs$nMYPZrS*mSISGL9ZA;keR zea=aRu4>zpe%4moAnO}sZn{{5PYC1QAd{YS9fLQ#&bZIp#8c)8|Gs;U4D(hj4vx)j zdEk#fZ{TzSGyUgnZMGJ%I7y+3?f2*==eVX5eL7%AHD`Y?_7sNrK<kJP1`v|~VtSOL z=&kqWQH#ggYQ0&5dP94BEYrP7mU_|?f%0;oJhJ6f+n&lFCz9!8qg=Uzd`s@)kGb-4 zd5sJ|$YvOg(~0y?$nnQ$(fQiX@iPkf+Qjj%+tP2^YFlJ|i(v1!_{2!qg6zG;$U%de z<KG~ca?-cTI{ablJ3!)HqxD8IYrQQ6x0VcEzY35je)k0=x4Z#|9=6JQ`b^Y%UU49U zo|_reY+}%-?OJ0nGH7VKo^r35qz3tNl$<7)h>0)1u>fCg;aoGdoxzuj3Ypptb**hO z#<ismLaoi<($sczT01V6XjYuwE~O`(*-qOo>)Qp}X5kYfY&){8x}8}n=K;V%p7Ob@ ze=Y~4^4}q6G34;}1#){6sGlyuGD=G9&v2$jsBN;gL)Lf50Ej?$zbrCsr%c@2WWorh zwFnAIEb3@0*zcZnRXc5$tnXsbfV3xF+pbkXKZk>+omtQi<K!7ka7yf4+*buB0zvvV zc^#Wtb_8ejq`O+cGI{?OfZStl3f<d+F+t7RXKL1d(X1~5%?cD_H6CeI9B3VMm;3=G zk5LBZ$aPAi0zZ`9vZP3o5Q#mo6m65G-zs5|QNO|%v359-O;n^8?V89Gh2YmDMaHkG zih^I?C@Ow^t61>sreejfTS~}_c63mCZ7;#yQm?&4hMDho82OwESf{l|tosycTKgu_ zq>yRt>5TSX+}Y3fRRiGfi5wXf3xEsSi+OZGd%CDS`sUxoEC*z*HnLW?r)%0fCCK|{ z#Gj7V2bQ;2kv0SV`wH3Io^ET8iwCZmKID-k{Xw-vM%}|n;dp!VLd#6+$J<kHd#}D< z)<X5r_4fU^#w{YG9?(5f<P+_2sZ&n2r}ga-00EKr2V_|CPOyr6Vqt5fC)?w?rrI)a zU2F7bmZ`Xe;q*>Vwa4xPz%msUGPO*tkE@5J>nw5)KFd@L5?;v`rE~D~i4Bd6=P|uZ zFRT89UTE**JMxt*I`m?D-zVr0p_d^2L;b_*PZ;}cIAX81Pl2ZY3!2=2joxyDhxgml zhtL54y%M)mcHCV(;t6~$ul{TRb1ggp1oS!QCFa%`(G-C8|3mhF1ZYQfU<_>{PZent zY%e<mIQfp?<hTxWT!+_qH@-tqOD1&iRkD^$?7&-6*^{X}Q#)wGhz@^Wpj7=UdPllo zY)=Q_joQ|Me%`@bg{GaH7Yg0c0R~|Q?Vzk5g!TQ9jI_RoEI?5_&I)0dcc9)5sF`Vp z0qU?!c%wALj!XI(1Mo}-dai?Z1b~jn=uQD3kKs|h!+<D}?sTAcJ7`}5(3h;f-YN{J z2RPL}?tqrrqjCe9vl=t`&JO-r;a>>+3uWaWcW5FbRPw9?ebzxcDtq-~vim5^22hSZ z2X25O;z%PB#?Z(w0d}OS3{1p*m^vsCh0`)Pk-qEz0_4??L+LshWdJLruR37idbby_ z;q$;mr}PQzzXm0WU0b<@4o*awwc0kI%noH4WmYcH1DL&gcw)VN5M&s&H=YB!TVw@x z?qS6`G7)!qA!8Hi$e^;7<so!bVp)ijIP4hk6v*TvM8_sFqpf~`a4YEow@)UO<)L(3 z0JJQWflf?pQ9HI_aAKJih7bUjS>k>Q`fyu}g-Y~k^|D?sJ5ZFW615YuegekBKVai# zLFPVL-zTp#EHXa*q>LN_MWQ3X&q?&@4Kg!x&rJkSpL-uJZ1WP?x;{S<!C9}&Nc0(c zg|Du*YCudijNwIzINtt<Ay5->s#%$coxdm$0ySBc*0O#h>sY_Z>l5kfM8gomR@u)I zGhoSLX?{}&ZY}@|U6<%(`|S0JY@eNqP1=~~#XYjtDC>>#I_?qNl<4XSKw@Kj8YtTe zSS6_xhwNKG*s(+u+$vQ%24pnJ<X9s0Ci-|`9~M55D4dHY@u@M<>vNxCl3j+f|3i$y zNE8F)QX;*Yh(e1J>nd%K>9s^O6N#Y3>xss=XZDY;6Jd8<j=sSNKynX|&<B{*Cp0`V zYE~phQzaqOPRr$1G#r<QqzpVsaF{?<Lz0@vY?a{G9971zxvGL+^HdeTW+;|XN$7F2 zj)t#lHDp2(9h(F#LBsC2q#kral4%lRc<Gd+dhEzloCBvOX=h~pjLcldEMWJnte=%Z z2G7aR$M)NRW?B*#FK&#Sk))lMd!3ghMlhY3#O;B=jxsCqgS+o$C3)&0p`u>4b%8?j z1Qh-_DsyxQOshqPenEy_cV9$n=>kz7uV7J<c1fm-lgeOi`$}dbB2>RDbK?qKlH}E| z1gF->bZHVg*`m?M=5=3^L$c`dB+m)ib4K=NmxooHk;}qD!zxa|ZYs$m8e4HzwtWJW zu1u=08sv9cG2XDp_V8F1I>;Z_Y+}=(0rt0`<Z3}S)7|N3N!n?np{HdumvR&7nk1ki z1xTQ4vF@A@sF-d@^4b3YD($8uEkciASfM3Vc2rZh1oL|<FoL;Ex3$jr?Ew^J*3vnI z?nu(E%5>*<@NZYE{M((R{a*h)+wJXPtZaj<{Ftpxds%{wCD46IUiVex?}4N;3o|r) zk)&ONni&CJ_cd9`VgbWPf?CF#a+Fba>^mqs-YR8v0m{5BDf5{rs~42n?xRN_2}b(2 z@Z)q+S*YIxZz5=b{Y%I_o1{hRk%6>vxD5$PqZg92>#`1iU(4DJS-&B>zd@0`7z}mE zfcjR}Zp!*i0rgc76ZBgk@{u4{^m3ARTh?#OW*qK2sMB8w;AL~kb)(Zwc(|eZ>i}*B zc{8a@wLb#ncapRwS#Of<*HEoX(x|Lc7|K6Fr7c*r?i-@@pmouDnB<{2rYRrOPmMAC zl#OYImyPLXt&HiHqGDcCbCPyfrUN^+-t(V!Y^~=9b@X?)*L@ddZb(PZJ=t4vPo_gV zdhUy1d|$Sqt~H`#nQ9ux_hkJZAIGfc@5{P?ujONRR7Xx8AG@PF;@IU4GLPLcSYZlQ zI2J2}v3p;p6FPeF6yrMP*q#Ir?2sa=%TqdP|Kc?cDNZ#W9snj=GAfq<%a<^8<k6WO z;mPZ61a3dX%4T<jHKMNtc2#q5VO`OYhic%uutk+tbZjE?WrAM|WEsEa5e2`hiHcuQ z7W{mwSn=zX9I~b(U4yOiiUu)EbZy77P~Nn4@C*9-F81?!_>D?UnObJyo|p{?$NVsx zI(mH=YrMImw;qFww;+|epUOkQR373~9^zCU;#3~uR32hf9^zCU;#3~%NRPcv<#9ii zbtWpkuTkmqQ+YyAc~Vf>fK>jQ)u8fvFqPLimDf3y*EyBfIhEHLmDf3y*Ey9pJJOr4 zQ+dlz<!z*llv$m`{RrkiddE*G42LocjtNFD6;$38RNg}>D`eP8EkG(CBb7r>Hjy2w z^t2;=+7Y%?I2#OVw87>wtlrmg=t=s#qc#r+LC;EoBFB8)+#ITe%4n1iqXU!qICM(x z$2dj2>KGW8QUdz31}BU2;6swd3Grdcux_WovQ394!}64ZtJBD2822eK?CGdv5c?FA z`q9Zi>-(r<TtGwL<Ye3$Rm;-kWI8n&spQ66ocgEvpXv1ER%g$d0f<@2t<Ictl5uwP z`e#kFmd;HM%$i>Rj9JZbu{m&&ztjMGCn&KbIWT*A{WIrM4wZt7Wo@#Tuk4N=;9elv zSgTk0nXx)KXq8WHeU)Dac-SPv@N7sn=8cVh25w3=&p4ZtTc2^ZBAfpm4;s~>NbF2T zk>H9|%D^YGQ08|gBk#%XWTq`0NT$1!QODDt%BbcIZJ>LTwP!MZg7$~Hx%QmrK8M+Q zU$V=`X{~iXlR+#GBx^4~q+SU1>5Jt00rp>_;&VV%4kgpW$=VYc{&e_zDffB;U`Pl( zk_>u1C^n_9WcnrheUOx1mg!OW?JaGFg+5uE1R52OU8}=}{RhUbVf^b!Xcuiv7N@e4 zjZ@hO^Fav6*ivl#C2ah_J}@8_66ty}y_zhX($|x@hYC~}!`Wq1Bne;vn%+njPOop1 zh12U+^7kB#yd#joIzgM*Z?Eum-A(o%c)XwNcVazE4mhzMA;JAZA|s=&p&~png;@zw z1`brjp)k~hGs~@+<sq5nFeQ|Sp`KhGo>?BzM2@P`#FQp-OeJgJ>$obfg|9kQSqEQU zRowz#KGm`nzUo!$Hu$PmLbj)%N)`Hf3Z0tbwf`#)wiFTNV)%?cRotH{5_dn%PGJu2 zL5e;|DIKiPIVpTRq`-p>52h_*0Qg83i@X5z3YMu4R(RCN%9I{-O-jHw-9Xo-;F^u{ zg)OG*QVdfNKi{=J1x2D>|7$g8c@$#V09dx9l&M@T-^xHffgQp&UfEwh0gZY)|NU3Y ztN8?`+Rsx^dk?eqXI_^(a@bDbL!%nLD~0X^TxIBMWsIe}Qp&<nkGDd(2)Y}d%uDVb zc!mWfqNen(toi#ee~1DzwY4mwx-5j{xrZn!HvjXKvM^A+!^*-y^&SS3=YbUH?GG&> zkx@Hv3Ot&E;yF|)x3Hzfiff8=GzHfbf?xB9j9=A6!LJ5YtxKUNQ?y}<K1^W|tF$4- zGfa6`su-rwQz8R(<mmr_{v46O;vBFNdM>5RqW`6y1?!xL-}R+`p%*aiuVrd1Gn1vD z#|WDC0guVFTu-4_QncYpui=WoaTP#v8dMC&ypBcrT4tqRr<7T{sC=Eh0l#r{)Wgta z%horLz?a#ZP==|$w^$FsI?VQoO^E6M@iHnXJb2kEhp7jNkEPy&2Oq9^58wyr*dM8( zkx{phjW5`sIhomV*q{N4jg}A`Bht`R8~|igDjO=JQ`t}%lgft5*i>d98kb5xO+~u= zyFjz}4odAoho%O^_aq&b3L`xd^M*s-s8keYFW-EA(m+T1pP6uvNj0pkT)4-k8ZtaC zm7A6(3gNU)NTm}Xm)UVx1L(xmvJgWK@jTaLc-H^wgAW`ZAmlZ%s7g(NWOE{PCEk!x z1<6KS7vy4t@VMsmR4ySbi5ntj03;jC<5Ep#qkjY0ot+A@`zJ+-jGD(bm#KAmt_EgW zTmj6xsFL-mbXBS_h^$UU+e)ff_p;epTi6q(iV1?Rej^k@H>R35{<T#D1~kyksb207 zK=;{}RI$9)8t1}%RRem`ZK;MyvXxv(`k%PX_ydr+KULU2_ovb?4C)Rdb%%{w9H?ui z;=wuW8*QYbk5p=_deWmT&1CuXXGv0j#UeI_^{GtwV2N!aS5@gG@Zy?E8dB*=?9`LA z0lpd$(V%jb#SFnR*Adp&Q>jh@*{4%6Zlyp~Vy?nIObu1&IiwO>ej!y{^l~xPbCIOr z5rIn}Wmg~>@iA-qC<XGbV!l7=3PH$g*jts6AyM`tVHo<FioUFJ3-ID=RehR@L5G10 z8JrT2H=NGm4O50<ydh@!0}fpnZ)k)V_9gY`|0+}a@vX#DXz~q};MX^*j9>Fq<!LH? znW~Le^wA3E`77l4piY2mKtBr|+$rcTf+6@gMqxg(F$$^d7ea?&(qZPvF*YUr!sv)j z+E_&&t1#P>gWnk<`$HDdnS}>O3Fu>;@WCHk49pP$HC*z?LUslcGOm+0j^A7`P9a&g zmuO+{gfS8r##YO!VNnqnV!<vXnPill8dQ>2b<)P;W0*EU5kw;jEkRG{H9=9_;}zHs zOzQ-jDiP^~#AL7nT!1qeu4l3(i%#$4Vf91b&gcYvEAU~z&g^84RsuSi!+~u!W_9wo zFr~spXLs^UR5*VtCc>iK$&<lyGU(h+o=HZ|B!$lF)Z$i$DY8TtbYhORZ01_a;tU^P zcLG-zchV*)`XqP?gQum~MeG@6g)YO#3_YW=Uj$t)eq$?E4(Jz2Ymr+n&Z-qaC~KaJ zt_&u06%dNiVnFC>Bow2@kj!<w)vPYDwc60hR*wF>G7AgLvhu*JO`SyG)uv9`WJRB> zXj2q@ib6Mc(xxJ|NUS%|Ju0?bFw-gZnyQ2t@mX6siTErl-QG#7Vr4~x%w^qG3iQ_= zArrQDfh!06l4s@~%H+XLL2`)h&cmIwX-sO|(~vVqTF8g1b@}+RlOTg1baCKL;Akgp zy5gR$NLe;?#(V!BarFIt;#eOL#}h5YvB4~ktOCC{HU@h6RB$h!=Di#Oy?iEE9M858 zM|#m1ZI`jhmY!s{<%H#|rGI7Q3`L66Fu*9RH~MKqrxUy`BxD$oW-54h$Sg%tG-<XX zsaizD9EF7z%~hoEKGHlz!naygE0RT%Y7|M<q>m#*qZ}9TjKGafY@)QnMEOd!+~_2x zMJt;YLt32#;nUL3(nOx9(v42ck%wQ+s*GPS72?-ZRlU)P-tS~1umXswZ@$7X(+B>U z&dR5`5c){;UI_0!D+?74>bl3BM8AbFS;BK#PfWcTB6>4K^rkD&n@>9ljEdtOjGuTN z(TndvWD<*)o$$~(ZDzt~N9WbRG$fQqeabdehX%0}9-%4Ip=k^>iYs021)yZu!o<Tu zc!;_Ds+kT?!^=EiU|ZS14&eiPWSSV*qtb!~_UJSi*zjotoEsO>&@q@~p<~lp9p2;9 z#PANGQ__UYS%l0@P2(5mO-r-64MK>YkQr$h`pLn0u;(m;wApF?V9z;ereII3r8=#L z+<S;JTIpZ;KpCq}QTs1aLO^b<Ah(M_RPjreLVBYR%Up;peIyWaB7|7_#0qM|L)>yK zOA{*nbX4j0F_nIvDlJPxyAP>NqqS+c{pFhutF0eyI$#&qaVXoa$t%-v*;dx1(UobY zT?1mHtJ7dU^6|-NO`7oh){FfQtBS5oD^s}zVqF@@Ntx>M8A9e|f>B_##EgN>j5X9k zH>UY-&DfkKwliDOjP1;}G;#gj_B3%J-;OkxDN=Bf*qH`1Lkdm`yV77QGk~a(Q7O>) z6KS}i8)lJCq_J%We!;fmL>g^Gxc^k!L`K~S$J43+m|3ne23b;ua$mBG>(KBo+*KZt zGH{7f9?7tM!?AtCvEkQ9i*gITMp@L`X=p34+)2Yg2Wu02jkbhP_^MJuAHdfbOV~sB z8fyuEoJMJyYXIn*_tHE~az;gyOdq5fKIAa^FpZh0!??FnMEd$4YvgMBD2*$w(XgL^ z4I&yPU>jKpdg)_C96_I?vD*`Ee}<WlzDm<vx(oC@yvk;vQ*&jPN9nHJ<<VtPWznUs z(CE-8`l&Mm%MEgR;xj7Z=@6&w1r{CY#G-*S1*9etPkfCwkn9RVGKM1=%aPb{;u!xL z0{<SoES&p^CpuZM1UoJeiSCw3EWt^bV|t3y)*mUE!4a_-he!;qoaN-+_t{Pm52?as z`zs_?b11~eAgkGNff!UPYW!JcVbv>nT;u{MYXSx&XjQAl)c5uG5xy*}Mr6XcU#iF; zhAW&#rikX|IY`SY!M@c_+vfy`UT-EE9pM`}(Y8Op@2xFq#rwc;PoG7%nQ1KxuK~8L zWK3iB{aq~yFdel3BK8O(_Bw5EAQ1<hqWjz7Rzh%#9uZJq3N{{d+QJdK{`DTm+5RN* z#FPja8U%($C$Ar|oOasw!9-%)iN{aVyya2!MVhuu(cy2oQWn)7cFE}yizXlL6zR1_ zI>9-JPBYS180j*Lqg-pGuQbvX+Yd2t(nw!rq^mYOSnf5_R~zXT^yRrQ%pl!rlkqb& zs>8d@&DJX~nmfL1Uiz|Gd({kUi><jCQt5eTS%m#BXzpm)iI+qtmg3>bmYv9C^RlT( z4T6^7G07I4+6FCWS9xDD1`2sA3$MmlebJj=JGDQSsqCc9R6H)p#zvVM`zN%$OtVDX zbkdtnZHWSZI{ba6^je}2He=CS&ay~tjiSTfTBUTILT_WjdPRr74NB=oh2DXLGL`Md zN;fIAi9MEXRw#9PppuFY>0Kw<RwKD>^`Vp9RL4R(9y>iT85J?~iL(cN;q=7%Dq`tN zr^iuW;h@b<Pn@?Rj((c%j|m@?4%6<RE!N1WdbD7UNoOty9?QX3Cl^L(SIg44beuBD z_;j2y<q7FHxhgZ$aXM9JrPJ~0{t)R2>C7w`G)?+Uv*g6|R%gjZIyqg7)8qW|<Uj{o zRXQK^@B{hbtFFgUN2jHmr5-y4B!5;qOtKa_CtZuz<Ndxr(YY`kd^Ui^Kh8_{r}@o6 z(I_6(SeKE)!m|MBeAY032_v+JFQ*IAaXG~>f<@`D)|RP;wtJE;PR9k<>jzzut~qo^ z6;oiBrE6Oh=-^mA78BiD6eWu;PtQQ=S1>qczFn2hmT1Gcky2Y_SW_~%<$hgynT5s6 zuTK}J#phcB$Hg~b-~KP$c+A7T-I~tK>AYvB6I@*T@U<1ssBcZD+ta<y=GdMXgEfng zo#`wxa928RJCr@}wa}vOO=pYgzI3`H9ec&wvKJ~((w*ssZJ>efO7{lcnpgw9ygS{b zb=31?I_ZHuHLz;09|Q1XA7?D%YPpr}XL&xc+dGhs%wd+cD*Grj4l%B?1Qx<U4<W1l zX)YJzwXHYge3=ePE$Fm(RxurR>}6Kiua~Lb;H~<xbbb-WagYr!h(ldE>~YF0xXJOR zdosMR?eV3<W(SgBw^N@EyCWE&7YPe#JRPXwTzb&0b6b_bt#jwGpZ<5a8f9OC8^p`$ zM&$Am3%Q&wVwEq*(&cn|Er9TwbZrgM*ARZIq~OQRbUY9leEH<<bmN-IbZwiWZ&S4G zioP8tnRM-QC4(J8@+0Z>xnl8OKAGNwT|Akt?NB&WhI<DJ>izT{B<n}r`&W{ku)|$M zr2i9Pjk1qL8GFKLFIR#1l@{emx=_H>7OEGE(0r1Pts?lf$|65Wx251Z_afa;2G}r* z9f^CR3{z8?rphxBlB=tOGHicjyM2|Z9Twj5AsM3OLo$L|J~RVbE_4l6RjY{2ycm`N zys*$w8GQq!RYDD;QKORGyRbvX!f#HeP!3f(4zm?DmM3H|HJpGbP0ZkGIEo3Kl);Q@ z3Z0SxGRQSaChS~!L^}m>1;p_gvPZ__i9XP_re|oo6@9nDya_Whv^|P@50Wx7qX+rJ z|NfNpuT()xQMq<aKrw+1lY#YnQN0ci|1XS{`vG*@ybNJyotM!>)>+8B3|f=nV_4^B z_$6*Z2Hp|!t~j~0FaxCazfo#;GqoneklGCvvJ4xAea%GohAb`1ptS)+D>IDKvHCs* zX0-vJU9QP!MV!}V*m|`T=M6@uZphH~EBby#JD}(X6uMD#s?23IC0Lj@WiVmhnxTEc zdYu8u?k`ZDw*j|)^3R_BmGVI@&xe><;V<FVD97>;yoo2nFV)*E%B~D%PEdtxf0rSa zAN+11_P~l=8O+LnUt2Bmt_-@53(0IE*@m%wAr~^jJU>_gJ(OYC7%bezpwgp)T|5mH zzT+9T_g)_Y-V7n*7VaVN8Qk*)bFbbQ60LIY1Q-8?fP{0)ZzCtw>i$xZ@P^(~8N379 zq~YY3!Ob8lmt?d@$Qgb~w&8sj7h3D|OBuFb84V%+hFmrXzZ^{X6(rpC-Lu$LPWm^2 zj(721|2Crsy~Qnp7?+B&ew&X`8OG=VkuxCX1K4>Ehra27ee*!{4eWFJh0upBM|>!K zl);bLhS{cJM8*?D6Dqm@jdYIwxC8h1XQ<Ji&x4tTMP$>ke_?bZXq)b%nDR0}I%@OH z0n!J$`1BHr)5{>24OhWO%s9wxJ7M?}jY4r6Y^R62cni>;lSN0kOg11o%4Pc}qbFp4 zPmFPio*3f_>WQ%~><QyOX2Wnp%$+gL#X94j!CY|$TJZ3gQZ*oE225)cT_T@3<tMqc z<4Vq6i~Bf=`Bax_%Bynur@U#d9?Dd*gsdX{k0@tlDnFL{FH$a8o>@M%!jG`P&{njF zh&qLxU0e*4quBt7wwrm1WPvBI!pxCAW{&(T#w~Qj`*U1%d33Hzyk=pZ%TuqURMac9 z+69y0K!X0Yf5z**Tp~JVk*kS(VIhlLbcsu=S9Ac6MOAvKc=DB=Q0Ow3k3W^3ROoWV z=|h|=Tx{d#!!VVVi2qZ9^YsXvZP&VRFE>GHV707;T8>!AdKX>qGB%5tNjDnRu)|iH z7;62bg4nmXeEJEX206Ty{l*-mV7m){@tn`uZ_GtPcXI43)Mgh_G>C+P<}e-IxJO*V zV6&N^!mve^j<{Hm3VuCRWc)g6QI5IjaTmt*9kpO!A8JxwSDEURVvnNYbj+fD<)Za2 zuTv^*Q0Pe)#`gGVgG;+D;|)Ntw{lu~-IguLlv6xc=Rb`&BYN5;LX8@6oSY2+opt#` zjp#X-h&EzC7Xm==^OT~WQs_nT!+jbdE;FK!F`~82MBhw?vzF2;t};tXECv@`^&=^> zl%7%Ob>z@sf~R}%{*aq4ei_tF7rl)+LkI?b4aDAj>f$l<4cMiPP2_|{dg{Xaa>;Yn zv+_$9eePn{<~GomqE8XjR=~o(GQBK5_R~yXy?&Ovf?0g*U`#kCe8WRC>!B;L6n*8Y zPjT#r!9OC?*Hgk*XDR$Pve}tP<9|!DGeOBCWOgQ<m&v1JKs)zwO|7{SiVS0-j@OZ` z&J-tO@Z1s<YqXFxnRH#I`J|2cUUhV<h+{cyU$h~U>k)oa2`G>oGd&;rK*`;dnbDJO z$#g-5!wFlB@dCW#nf}%Iv_(0d$(CBvE%p0kX7I;vewn?0F@{w;9B*EUz>i3l8pS@N z`5N8^(`_sz1~)KvaYIY2xX#5PR`)oBi${nAk<<3ImHv!HIu7huN(g?PwaCXa>7`75 zR{*XaQS_@!eoq6xx)pC}h^ALrYd+~`qt`H(@y#hkgCdOO#Isqi4obo^BV3#Q<dc38 z^m-=SSoE_>^jkl+%6_UX7p3M_rnsm;<=D`3*9H%7-Ogl71{V21<x7DocA`;nC^a;b zErM!gzZlzOMD>U#*vtso%?CF6G}CYvWYOoDws&9Op}fotx*MNxv;3<}vB<p2^qb|I zGtGA}49sFq06Hj(ttt0gAr}{-nCiIqaGA^E>oP2AS!PyjMH}XrEdPxes?ir=bZi#e zncL}jQPyIcjjf#+42@eGuH?gpXi}DN&sg=Zm`_MQkIT8O#(e>2k;yDue<~ZUZRWwe zsOT4!b=)dHB?}(emg=HH^h<0@fI)Rrv+z_0E6omeu=E2mqwNC=Z?;A3vZ7ZSCx1jj z*vbJh-GK?yvP?bnTJPIxO1~g<dRA~oi#|muiN=7Q8ClG?XQwl>`UU~vl_24CHr8#g zvaiFq%`AQ&NI1U_WS*a$eUY6t-^0%Nett2t$$~8A(+FY&)W_DNg<0BM?uDCcRPuN6 z<-dS0i?ht0uNinI7gNFq*vI0bTXt{&pP5ks-^;SnoMifGX5=byWCXJuIG|Q%@yHqe zsUH-e2MPU51gQH#*JSa~Q2uEKMd^KgRQ}*)Gu@QM57dspn-csoj%n2>=x^cnbz7@~ zzTMv;i?Bm>eNTt%{$2sbkh(ps2rzpc2TJkYR-~9`f++9HGHPW>qG|-j#eVzW+o5km zhaSR&uqtK%I{X@1&@;Yb{(8TtvmBEUV})B<<@6TVo*p$YMzM0RAID1@3}og+Z(wZj z<e<5`Wh$F8BWZn>DY~W&ZO96C(npEalvjfa)2Xc16sEIT!qwTvaCM%`5_9UgEdQK( zKFd6(UdR%TRoK^Li7RU&U%RqKv=D=5uVxANYa0=PqF7)7$>NJxB)ya6U&3-RyjHN| z?^(y7^gSV$s_jjb%Lk0@2Er8JFlccPvrMIp#CxrDogB9f1mjr?X37&72VZ2_e)qbf z^D4`9PY?s<d~7!O*c{;Fz-%)gKh5^@ad37}Zw}4o_wT&USl$M1Px`M=w(X$9vxC`7 zM?&!rVqro6wGYqcjmh?W=#*fqG&VcH2Zn+viQ}>ZEDNMg$~O3#k9?hy9az2nplY>g z5yt{8`H4it?E;q0;l(jF$Huy?CfhXmAQ+o}j^RSPAUkMkVS6gNFgs`gVH+&ED4Q+5 z33PD)eH_S2%_sfh=~AQzZy}4siFO%2IZ#{Nh)%+6V=}A4#;xSV9i~|<gs#dKfkYvE zl@8&nbbK{mrB`Q*G;ygGE_Z9P*>aaa*I{Nt6}w<_L$;XCLiltR{G=aXLQ{=%8&cJB z_5zY|Yr+DNw`Gg=nX24wRJkL&wH0<JBgB3I?=pFvt!?QZ%x}w;>}Wnkw&h#RD}-Mb zwJ$qpT|VIFTrcF@K~`Sy&0pqFwg@c=XRGevY`*FmaD4GS&`N88lDMTHE?;IFlp2<d zquEB|jFe+c-gw-JO6#)uT8yW>eAz*3F}gnL%}It#oX9pUzU(T3Y`*L=06ZX+ZCY{> zpfQ^-wg$jyv)qXZsix&P;QCFR6PDkz*~YzXxVJx_-9uTeY*Y3q{VVTAO^%)!-T#QP z!*<ek&engC()O|<S@+4(6&B@mRgrAvXm$vJq-zSZ(_UAkC~lt!?=5|;NHOqmgWD{Y z$&v$ft#1@5b}ze%sZAg0TSba5mu@OjM7dO_Na`?l9}~WP>6RkJO(%GLQ)IbxTansA z(L0Kiph-=NWY;9BNYVW5OlbSKt4N{j$%xl@n2ib{=rRwpnJ$B0pvyeWrq8lLhaE|b zQ_e#=<NF~xL)s{U5%Nnd=uL#g%#)c7nT^acutZ^pA)3f7i!`ot6S-|6<KgR$MV<g( zO%`P$d{K)!3BK-HEK@quah+iuIZ3B<c6P)w0#%*0dx{Q!_Z4<Bd3tC64UBX~XYtl5 zJLpQFsy}3^x>H>+2t#!F{i%bh0om-%+5<)Fq<3;Zz$JQaXYHY)KUBPt=g|Y$8CBCy z8fi^u&xfd(I;DE_Y+;1KhjhNFel$NV?Ck9GNdu}=bZKV}&5_kOJ7V;Ka1}4_oJ-2o z`S9l?)n(S|Pa5dT&Yn)%BSm|x=#Lej`w^h;L|1pN$J%2tE^AHa)_lhny0&wfCCF90 z4ilghdWYAG-}TIEyrDC?h%L;=WQ&De;bzfP?TMm4QM@(LH_-NDw0N6nvG95GNDt;% z{g7^N(eNF-;TW90hc(=cIJoh9UvK<@)*64%)cC{S(fA`R8~>%L@kfIif6Ux?3@NEM zSL$pdYCVY(JDQ+*4`1MV7Nz)nXOs@76pQ-U#b9Z<)LFco^fDG4LoiU?2?g(V#&Pn} zBHisw?|1fU=ZSuv<lK<mPjNnbfWTvkYK@FKfwr<wbI{(iPh6N0xC@OE>C+rKILAA{ zo{C=BJ2DxX!;W|j%fTCtl~Fl(&_NxYLx<(Cn=qa!Uj4b^zX@Y_j_GENdiM*3pXeHq z6MR9&s2n4xNu{H6_$6gb7aN<yLYgdmUxtSeR^jrI0?P+Jm@@;vVRBr>^|SE|FH1Fi z<PCH}4jxW~dQ6v^O@@VFN{)|D;8SxvFBNSJNWvI}RJ>GJn8-AiC|;oj%a`BJY=jE{ zAf1_`y;Ss<N>51|M=+-UOSGmf$w7-0PB|E`AT0r&4YiUbjCJzz9CouvZ4Rx?;Q=-) zbG(6b!hw5k0tf#^8fy{1if?sJP$F;x=7^qjZ4SG#f?ZR(KF4$!99Qi(<na4F>I2t% zuv;%T<uGI2+8lP5g_murwg4=&YCMyfyC^gJpj9}N;x$${nSLq@iP^{7cZNxbd?AM( z$kARY`YWXhgB_a42&-}s8*NpO=Fo#V?CNtX&W#KaJp?sXF+2O=9IaW=n-!jZB**hg z(SBE^{zP*Bj#RvY0hZ&xQX9tN@f>ZSn&BR(qM9RWbjqb)$<!yF#Lcj3jZ<}hs=_d+ z7a19)gH(Eg$t0d5XK8^$=M6bVx8qFHm;)o${TR(hXL7W`s@FYOB`}Aa%@OzNv_YtI zIqWu_8pyaHWE*C*i#fh}wv)P)gOfO9Ue573rATD@73}>6dd;A9h+6M+4^idP^9sG5 z1H*L!8`~e_<^DP12ArlGdRM>?u>TG(J!_>6?1bq9WL^p~?IE(s#o6>I$274#$qAZR zp5};&<powgky&KX*g3q5@XQYH(nKa%$?z_8R2P7l#0;?i2j4tsKuqEgle*ApU3{pG z#NyGW8C`nN*<Cyzr-0%zw+oMro!5oMQ0PNdpFT`wibZu7&92+og%0z(@K-=D=%Ni* z-NRL2{h}`Xq~_u-;-uyhq+zn3$`u9;D>w}+y3o}KF@;zFq6fZk!+==NA=Y=Hn_s75 zOBZb<JdJ{Xqv78e_%~K{k5ttxx)t$F_1C!5z_*j*+u4QgMTjb51&Dvb_oNsQ2RX#S zF7)W@H6H7tRl#b}#ix&h#B+*IAFtBm@Hhb;C#w8}KpkS9=CAvtf%zoIe6kBYjS$m` zs_<K=E*KCOIK+i6^hy`3m*35K^>sR~b<w_n$|ngTCac^@c^&c2@Yj6Pz<ZP9z1f8} zA;e67%?}KS2OQ!-7y8sx^Rw4$e%?jfq3~L<cBq*JdAvZpvzU}2H^+4qX8y%iX<XMP zvcyUzbfpuzdMg{~q^>?^>SxBGJ31L2|H9UdIDDMaRhy#XSuLM?s!H5bRDwsmW|Igt zD*h(EJiWTB5jjw6CDmQIDc=7AT5j8C=bczE!3wKX-IdPo`n@kc!6Qoxy1IJO#a&I> zw@jDfW0k5`src&GWnIO~VVQ<XYrFC+XR`xe9=5t`;N`AD`(D!(PiF*&BdqHxi~;Mr zYSUDGnyO7#_30|z&{Z3OpGJrY-PqN@<qWK5y+){3!)UO%D>rCw0m3m>VOv*!l*AeK zs@m;c4ZS@<hK*O(pqI}ojKY0gZC|#yCyyTJibr3}fm)7VVWgBn_@Q9J4>Q6K2M9m% zHwZ^{ksdd&)dgeoGHl)eHeXk95Qv>H0@mY~nGGie8yW-~PIncj&Mt_)WG4^c`BI=a zj5{>x6@!ec!DL)xWLyi7as6+RaYK;tjUeL|mbFybXX6pq*G1!AfEdLf=7B-X!(d__ zF=8GCh<W_CMB}L-=9wVoWlPa`WrzkHlnYa+={$wXWCNzqp6U#;f~-UL_!jw?d=lN` z%hj#wZnggmb-m>a%P~v;nW|-$%HGpETa`#}X^x7gY=lM$s;1mWnnNN&q8w-Nw9SZI z|FOjNR&_)!bFf)(uv)+4ydezU5xIDrpWqj4$M9>8RT+_MJCFA1@qj~{tBPPi_gs|# zLOL;*jZ+H`^3eOb=czKLPs%l7TiE-jW4V!oxT{r(1-!sF%mw(SfhoDdjwTzYL~^wn z&Y2oqnX7WOvurBhcPmfJZ6%s=dTvHfIw#jGgH}2(7cZY_d5*0nS9JXR+@OwMkc%C^ zAlKjV3v>Np5@I649y9m+;#}VIOLDR2t+W;kTdR!dd1iz#1Ocz_8iC#kfN?gXSbUcI znxL-Dwe>M5CVq<78x(H{rg$Txcw>O#O}PP4ZAt4ELF-mQ>sTzNaC3<fZl^jDUNzI5 zE&F3vF5j8#fuiz5GE^QTgPbl@HYqz4kW(v2rRtZ;`Kn}PQmOc*asdcxZ)q;U>tAQ0 z>ERfY&660hWtEQQvUP+o0d29eaIZ0ZGN17TrC$iG%jJWKP;V|?!Gb4o8u5+UVIa)D zj(~#JGmh}45xj@xGQWp~Hsl(oDw+1cf3ol>;XKD~Y0Tx3R&D+TwDL0ym6JH|)c?6$ z&)c31cJxlkZm4kiLS^{MfUk<T>3PJ>&mhV?!UKrCkSlDNO6fU;UPh3GT(TFc=;5SS zbNM?UxL(hq3(?DtZ=k@OMI3k$0$b<}1DL&Tf{h{uY@s(Xryu+Jz(Q~3GDP?qbSrJj z4K}K?<7wPAaW~hdp|p8%cr<WXyPu0@b^0K;WeILwe`JW_<6OUW{YkFby8c|q*^AsB zNx<^vTzqSVYWa{3%)?(6OPQ?_csVRDAp9)+7zrAYXZvSC5HScEmB$Dgofm-Rq>RlI zq>Rh+lQKTfOv<D@PRiswM#}U&-j~s+@y^J@yWSV8`eKzwOwP>fA>WZlDif6cl|$8; zYK_{zGNg_h{5H!{$OKSUxtuRmC7B&2LkYj8NLIA_sm!1^kEm*7)IyZ;MR~%Ez_gP^ zd2~shab_EL{!8<E(B*mjWB@+b!t=^Jv2S82tMYo-eu4AuhCFRK4D&p%UaNZb74UDR z>RztGHgHp(*S!i=fX#WfY&7BT$kSG<bZ0Q=Y6RV7fbPz-H6zwT4C~=mupTi$zs$3p zKu~WUI}6jy&TO-NV<1G|IOfB4n2ETh^yRh8<vQQW0rq#<y){;HB9ETT3kuv9kU_SI zhCFSH;`7tCMNybVqA{<P`TumDEelD#kf(j7Vw2pTsf1roD_Ud2W7VIr<~Gu`dH(Y? z_2PKVemr%T=RaOkFHYC2Li@jwyhg1Thij&x3&2QTE0Pr!Hn}g)e}<-B9Ie4OsPE77 zAGxU)Cu@F#Cvo!pCwF+V)rL2qeUaxsXu*?1Z0OoPZX~Z0RfYzR=Y+B2Iboqnhi9*v z!;ZadhQFum&-p6w_v=^9kWDY=fdWxYEEaL@@n#+xFxcUPB?{VRKxS{|(c5{(>z|ml z;*Nz-n6!^t<-2*b$q*Bo$BdK>^e+2R*+}o@)qC|#ig*>&26aB3EV!R1jIem+s>s^N zraLs?0>Fbj&xiFDAJRv8%w7=t&sZh3C{Oa}lf2e!jw*ecSEdHp9G~U!lR0Q}d@g?b zn9cD;p6R}$W^8^934zVh5mepA<r`X#*Gk6avn9vB6tRUzHTF;N$rhspgvApNW!E|& zgg=A{KK(C}Vp<XKa$G*G%4d<6?A_+;>_3WxIS5kVnQe>so6cd$n3d0*R2zwS;rS-j z(HkUp9#7t^q6%f)pn_&#+(n`DWnq3`LUsR7+??cd$Fo@<T9zLO=P?}5%k#xNx;)=M zkJjd!=g}4U!eOf5tK#Wr`TloD8J0O9M3DCxS7q1c*VU;!ZIY_@t%mu3Lq6Lm@&t_a z*_dy-zM~ggz}W>Ju%2zs_b;Xvv6zDDmCsyg=M+&@G+K_g=8J8#$dIdHrNuixR*O47 zKF>F<oWLUJOxls}d0V8()fI2s)`d%ScMGm>Q5_k;^?gVOy9i(ab6p%3*8;G>U>t8L zLqQzq{+3NUkk2<Mimi@$>++3|VgwQQ!s}c4v6+6M^iZI=p`y8A^e~bXHh{f)@XLH7 zEZ9_jn_7BSp-1zLlFa9KEMMHL!a|zQDp&>n#Gr|~e6gB`Iy$4fE}w@YBN#>_*XMud zAsB2=%gv%3=WK4a4G5Fy=@!h}t~wM&q8IYTJDsu_^GpE(hT-)zXv$w<+e7uxpj>Xb z{oLeGz5Ms}#8p4zk09f(x5jwR^+<XnU$_v%UmsDpMfj%Wh`MR8I+7Wi(c^k6pI<T& z$<KA)F*qFQz?+0<zHuD;ZoW97eeb)O{4hW0%}iHY;W?KuWITQLeWP&o0J|G+8_2K2 zMEWwH9nyQ5??*vj<(t6S;jkLqqZPEWD;r$ULb`_(2qx2^1*ReV2h$Lapu-DH<kJxa zehH8859pBvtqkZ<1uX`2jTq21VnB~AXgQ$A6$A!!4e)qU0pG!|_IIoCsvdmp+LQto zjF0F6c4~n*?jr_4Rl#@m&kTXqftMG~Di9qyyMVv2cTNF+2lLzl@lu@ktP)*N5Iiz= zsE)5-WGv#zJ5|w&$aXN-EHU$PYS47Jte}<YaCs2-cB-tkcyAA_ZNXRAdEp7@6)ZWs z+yXhf%dKUWGApna?-Ib51<+M3@Hub{tTuWB@raJ-BRXPDpd&=>?8x|9bN{SluVJF= zAT7I5e|vYiT3@D?zK!MCh34zcI2`Ec*uc973&Y%;jn^<2h-U#78HYi1-_5OUt#NC6 z3!VhH^?8eS3vTT&ackG>+}hO|w|0LIxAvOZ65!T8GXn&-_6u(9YRRnwuW{=OGq>mw zL#}Y_I(~~AMuT@;!Hh;M-U9PIM~33b=K&n=^#ye}T?7@x3BvLr9s;C|ew0wjXa0tq zGS>|a!JBf<7X;#qFBagHCc(zf%LRe$NI<c>QXn=YR|@<alB)&g4av0v|AquFh5p7& z(JDVh-<m0c8L=FL+zN~vQ9%6-P~<mJK4_JqhXzFt0~9?9qUdpeqCT*wy=*b=cc}m- zK-s^JBw$^0fnj~9!UF(>uid;fv=EQ;2OBDf7kca&6?QtZ(72|h&`-qZLLgQk08;%Y zc?u0`=!8OB2Z2#FFit5n4*MZQRiWWYVmGeOW>n!9V*;I1=wArt7219)a9IpoHG;YY z26YPq)GY$)@Pi{-Tqqc7P`S)cr7aJbv#KzdXB&tEr^U5}Emq-mh2~>vENMd_KMDne zSq;KA6?#6Vn+sd+cDEXIZVS-4z0lm1I|9txT`1oF#xE-4@2F!JdD1<F;`Mht3tu_M zPWbODWXl0_8Xqjw&Jt%cH(MSlG`#?n?U9cbdPc)KitqM3R#@khVEy$L`rkFmwjlL| zo>G7)r6(9b8Eq`oCKC5Vy!7R4A$R+oFEn0NUDzXJKWQN6N&m{z_G|WA_WqSOV;{%9 zitS(d*fA<@VjTaz61Q93qmGSV8oxTef90Hn-3bR1`d3EoRi%&xMB1lfRFkmZ?N_CU z-e~Z!^p*~&QrH9qk6y_<_$jit^o1&gvLjk5<Q!BbGMPw+RLR;~noq3O$f)ILiN0NE z1XK)d#Fz?nkUudT<hKi1B*lY5+Ej>l$yfQWO6A59emx{D>_P7pdeXf5VYMQSJ}A_V zs9yIGl^Y5k7W%l!<Pm^9Db&*Rw7~6hPTe`cUJQctywIzEsSdzb!qAt6+ELYq&+elt zyPcK267*G}kH4*hnXK9Se4AM*9-daqi5XbbgAOi2SN+$_Rd4JveEL%v&&%5PqT*UD z%Oi>~JVY5)M28k39qg4l!-_n|)QpN_DjiV-TT`ELCqW|}StRa;s^@nC`^25V8TCOI z0*@-vUdTRiAuz^>6yYrgzvfp0t7D7kxT3(7z{geNN?;2eUxeWu;!fZR{DEHzJh2Gx z|7@1&q#{#bP6Y;W6$N68n8O;{KC6g(%DFkn&t!w)-Slq!wc>M%TD9NIEo#MnQ&R*A z`2yz9Y(jfPZIRh}R$Ih`WNi^$S@hjPvI=PXtjI4UYm0(}WL=RElJx+#v4{x?yQySb zQA=5fW-oFsVja)k%wh<`=S5~=fK>ke<|5;z9Sr|Yz`whNcvyva@Ht{nkyfYr+;!;O z*oO^Y$l_xr;9&8xhVRAGX8U9qE?bGP#(0@9kp{*J`F0Vl{~lJH02&&KUJpWQpp8YQ zAS9m%LTaF=iZm|>6^}t`pl2C>0vGmsRo$zy$Dd(~&lNE<G)o0}^1;6v_rDWO)@9t; z#3Uooc{9*K06J&_VlQ*JSfu$>-KY9bni`^3<-g*Ol^$UKBT9FZRr#ujepRGxCGe-i z-!{@~D<O<W^fC;Cy3%@;UV$He(n_Bx^lBgh#QnKKuR%ga>0y;#FEZJLZky$$k=_x# zY8+yy=Z`qP(HB641Qp@+xh;A-!vC%k*5x>nKfo^MX}sT`6x9d6)})HPftWrk(%fFR z8z5ewWGrF^<)av5G_2Shm&RmbSTP$H<BC}r+LU5CqWHUIVq|d-I;Pl@mH}g9TyfCY z7+);L#sq+wR16c83n!>4#jS<0O)YLUjIFBJ;{`U$ERe0jtJ3Mk{7rM(PxPPY|DgRs z|3!v-Em5-Q%wpc{RqQsY*~P7e{w*jDh(?0AWfZLhKL5EQrh?-Zcww=aQ1Nv{bV>1R zlMb?VX|d;o>Z>>bYEv<=bukOcU~FAqY@TV>bB=B<rW>(6DcF$B!OYs)O1qX~yS5wc zGTtWbpC(y^*^c6%n4+D<BBp51_w?Cb=#Tx-ImS!Uw3Djwf-Uz+6=eqJlP{oGUC^rs z0s2U>c1+cesdl_P>8QUej}^B%7auQfWiIv=YbR9wgv#}x6Rm-qM0TbiJ5PzaPa|8G z5E<sNH8_EP6(p_3?fAgquQ-RVaGCwOm|h8H?^Qz<uR&|RE;g-ojr2yb>GJz;i|Nhc zz)IJk1}?w9RUEkd{&sQT^7}jRo2_$A#ioIO7fD|lApPlgk^YpE{+yHETuh$_lm5aW z{Uwmz98CJa5)<izO6cH{0O^e;(ub4;NFQ1fAbnVgAbog=iS&^rK>9Kg26My&Bz=4d zl731x%@N~En#gl2nF3!gtn%~{I<ds-KCMcO&`Bjd=#&!el-lc*Dq%TVRid4NwdoAb zQPWGbv#NepWeu2F!l!5WQRnk&=Ro&W>8ui@bpjGOAy?MUtNMA>eL)S)qO*~*<pf{W zwGb&=R3hT^7M0K?CJL4U1<Omk`b8B3axbX_nM7BJ%Ie%-At5WpBg!s|H{}b(WpyaN zu1`GeP=~s&AoQvd?JD%jRs6jg(624guEFy)d|odwi89w!UStDOTg#}Oiq!5fsNGRQ zcbTZ&4e0g;QHw9`+5i7U-T@PNUjV+tCi1>)oxGz+-U>!ucMNees5@Cg8%@-m0&HhY z*v_?%?L1;zN$@3c$FZ^3O2h$o_J%k>d#!|iZ9;nk(0*$|dn<?m!%?Ph$mCuLiy3)P zLhqDlx~^9-?;9=g=<iAuI=$yF^tDQ~MMPgjhO-m%_e;#`oHkf>4_3J{{Gi0gFN1GH z6*i1M5|BRJAG>cLDGy5OcULynJEgW4nw#lUY}hJ-FWUSD8}@0pK*RW}HZg{~8y(z@ z&sjse1sXZ5TMs&-n^*rv_4ik;e;2~!dVqaAHuZu`Ms>qC=*eTcvDb2r?M6p+)4o;p zZ&lWy(cOH!efmw+eG91^(+wI@*+|EB!$?<rIVU^XHNKm<<v#X?PS)@VBEx+f-D_jJ zm8rYgdpe<+UqCY_bqn10Jf#~nc{PiM&4m`v=q4m%MmIXE8@?0=)@l8Yif=K|%DsA% z>MkdEcf)Kf_ZgEYyg8%BC|A>sF6gG+kiG63XoFseU~7m>NJLp3#^9fpwb2&-y4pN# zj71+~$%Ea1epJrW##;2T@HEb%kAtt%vVIy8Zxj7CK#sTQ;~{aBMIU8+{Xt4H{;Rl# zy%i2s?Q~p`C5cFq)bG!^<sbF$o7;Ur-w!|j$Nuks)c^gD|CeNwx=L25&#~s_<~FnO z;~>B$#r6AhR|Nh+5OB!5-GB4jpa1$-*%cpu{HGt}=Kkk@{%6<HJ|C6!1=xPM1$lWT zx%vlv|C|doz5n6Iefxh{`awuR*F5|`=BK~^&2NAGo8G^C=U4Ca=>E&@zxtgN@{^zc z>SsUyRgaLLb$7q>`(OO7jri`}^POM)>=)gCW9{yCcmL_{3V!;7_xki5@LrE!{`9@d zKL7Ea-oLb8-~arm|9@1z)$h;mA(3wd5!to0GObnWgBz{@g$ccT|Jz5sKmMq9pT7G0 zAHM(b`yYMSyQ1$0e^T}LKj{12^}Z+SeXnJ`%AY=}R15M--c<A7%zHyEC@#!X3%YeH zRP#$p-mw1m<Noh|_-{&aaY=}vFDeLu_19(p-naZ?HNT*+o7F->m3V7>yS5-HYGjBk zhbWd1B_u=%4N<~El<*KGDnv;LQQL<o9m3iZMS@P0B-pyZcSy9{CdOuGpRw%I!9L^I zXFU6C%RUoHSa^g5rNgSa)exc(NpUM7vO<W(4fQERwz{n$ssh8oEr(bXq7pX=RUsSb z3IolBSQSZziO-GFE=z4ZBuA|vO_1N!Bc~rE6><{^k&8WwvrmQ61dV#j1B0#tCXO(* zyT{@@R$*x(;g(-`tj^gLR*+XhV77_A8$n}Wbl~UDB}kQFyeJ)5O0pJ#Th~1N0Ew>% zgETJaQxw0T_eI85=Kl1f4?X~vLccOj|HJzq_F)1K|79mZCvdPIv;y}3L)4Xbe)cm- zDecoo{pGLU?XLFwXh7eP-*k8Xru%PuhV<{N_wQR-Vf{^a%(M3ID{}ww7w`PEJLLZ9 zgVOT8*6x4!M;HRuzJLBx>4$wRP_X;&EKscP$JXEf<ImptU3cpzf9g~Eao-<&@5tb7 zd#jbUfu!btZ{u6zn-Jgc9Wp=o-XX*5d#`nZ*wD$(FNCqut@ur~pybUr)cm46_*GEU z4Te*<LL4|SkP7nEf};F4!~6}1ZH-tyl$35Ig~mwAU?VBo7)haQ3`K@0kYWo_>>-LH zL}?qM{$J+4JTQtPd$_BQ={Yk;4j?EA5V;I6GnvVO7a?RI2n0jGU3C&C$ut?wwV6qf z-QT(aQSiQT)m8C6@V@W+)?G7+z<RH`?f_~)mA~Risq2X=-+R^F(=#Cn(f#KObocA3 zSFc`Gy?XVky5`k%S(ss&uJ@;LtUp;N@c9Q!JdoWdv3mi#7qa_gcAvuTQ`x<U-49~- znZ#ySdzb}!kX0sxgPvt|fS6lC7HcjcJoGrL1;kqp$yPT=KlC`O6MI;QSfQt3&$QYI zk<B5qHJcDKl*5KS&!YA`WuKlmxdBh^gN|qBXEX@K7VLOdVNQcsY{QOc7fTwXVh47- zEUBWwRP1au?IteM{06z$-74=U9y!!tF3xT>?<P6sWet|%+*XUxGxJ!_%-g4D=Fyz6 z13dzH@rFIq24QN?JX_pP&t$!l-;3i9$IYHFqICXGBT((qr7)gA>c%P<Vir|%uI3c= zs@6!ynrP{-=usfNVq#raRBq~NYHEwdt<8~+=4e|4VDUtdMRQwca|E$%ooy{kHCT!z zqU~|1vb#I7Zsv%k9a>9TACwn#cD6+$9XNz#DV^Qzkwkr`8s!|4!paD*XpO|9Q%24v zp`|uDRl&%}&260>QM=L>iMMJf5{npBGnD=c&7f%o*6&OFzEZKw51qf%S5_i19>fZ- z*KgK&7t4bsezC0F>l4fU{t8_Kl$QHteJstJ$aFxit^@3B5Y3VWPykM*1G1SK$d$!B zeU!Dy(gCt?kSt8M<PljoSYiV#XSP_(R;$Uq*<^)3yB$VO!ET4a)b7Y~a^~?IhdzY> z)p8&|sjy%&yH8>Fsq9|F?$g+P2D{H>_gU;-OzbX;2?kerKF|OaF`qMYL~utq7=b+z z==YL1pR)pj#2zw)sN*sRTE+}o2Kp+oqn0pB5GP6#R4w5$v_zGvC9q?QX35kH_F_9C zS-5sk7X)rL9&UC4ZVs^>l?B|KrglK=?oSR3)(AAw-z2sQw5PvGY87d3f0L<IqHFt` zWM<_z$$cgl^!(LapQ%-*C!w~m5Xm$ZDD;zlFC8FZTX9~oz1UHlRctA?7Tb!)(bq}H zW?sy3f*DYY@mM@W{eXn+VTa-fXDL}>r{W9?ihx@^nS&fzk(bzINF#zW5+^gWIycN* z4ST~b#l>!D9k<$3R&i8Fvx++s-JNamxoxp{q6!2%9*xgk3h)BxHY=l=OfHNhBD(P~ zX*RRq)MRtglFb`7+5e!mxF!2Be^nliOXJ~?VR=9`1x7<e0+kd!$rkDA>h3%#2C5@k z^^3|fe8uS94cOPU(^w3KCHt|l_buFUBNa|p74EL?Xm3X3xDm>iJ1i-%F8t;0j_65= zA;I2~3bDjn>IYp^77+dAr4?Xa_*C;k%FAV{#lcid%1XBxI)=|drNWN~EdqikaRMiq zWNV*nw&0uW<Xs+jHoK2w_X+Ht&+Zf1{Q!195R7FD*b|b4b$nuD51yY7REQujbs>Uo zkO2jvHKhQ&S<{U5EL9nJRAqn~fEPu{_oaz4_XjdJ3v34hHw!-t0%yZWPv`b0TY2j3 zAAtVu>mP*f?oS{6O>`V|Q0R<ayy56?g)p_N#q-m;ny%vGbJ^gBZNPe!z-goZ^JF}0 zuoU9F6ypETk6c}m<`W}pqIJ=DXHR!?G@hkH3wk<Q+M;&Ivs;g|rRDCf?CNTZsiXG7 z&h|*GLmT_z>*6qmJDPjCyJ4_Wqd51PXd;tvwobLSCsC^`=!C$yqpdU2lHw$|pB|oK z<&acGfV|r}4SE*HRqbtaMyk5GUEQ%>oHJx(E%tWCT1@JTv#})>?}{XvTiNIvcfcze zG3uK=+F`tijXkjzc~#BARf$-e8M5qwXWY`<9fceqc*=-eq#)JwF||cI)+Ab|j)<?u z&xP_a)zYZ4Ix@Z*kNAcyGt?#`aS{`Nuq&SE?5ghuxmd-fQ}L`!vInHwIO<ZuLam0P z-I~J78Nx{oaxqa&$SP%CP4!8tB*uP^6<DAzP1LOD?(B+oC)TN!=km@3ZV>7|FeB5N zA-UR9siBtL@kFFMkzN3aCEM4~9d3%GPAi#(>d0vL{Z=l_Lkma50l~o9*Ob518)@r_ zj*boF)G^5nnp=qi8`e6kk?QX5&Tgwp2j$Ef?`euBVu_wabY%I0tZSfGRwlADtCy8b zM59{<D;!aB!6r7U1rtX*qTSgLs;AV$tm<sLrbFp;K{O+!$2nKj)vl<ntN*Q5)8mH8 zmQ6_2iMtsxUyW5_?uf2cfi5k9z6g+-E~rxkv8yNEI$6_qhOVnzS)%H@rk+?^BGxf- zjl}gDu|!&0RA}V(&`?ZqRC&={U5PGCmk(Utn6f_#kR1!dhO=vpQiF|r(Egf^VVOW_ z_OvDJ>iUREaAdhOuyor)R)bo!b(Vw1khC%}Wj|PzZEbFB6ScD~j-Yn$E*deBf!bmM z^8*@n<a$qZG8p<nS5LwUYP3aFFL@c71nrO-#2BqSkrrLy*wPYPjl?DxIN)Jh+YKD5 z*^JvKn_7l5ZNz+7;#5XyNmBDMSNdR86sQQ~LIWSw19}kDTnjV7mcuwVd6YU)3C-T` zkd{6)?SBBw7}m_4O(!s@bie6_?F{Nn)C7tcN=N1dMxoM~fY4~mynRH-wU3rh9|K&_ zqcT*^Sn}9sWXM)UID=5hm<VMKk)vAk!TnhCsjQAmmko8%ygV3W6McWM1Q+-MK8X#b z&LP9+xDkd;eMMdJ1<L|nORB?4K3{p6*Ph-jBwxVq^-I38(m;viE3XKai-Gd8a!YFH z5KGG|N@cxE`T|~GP=J9-EcFJ<fqqHQXG`nblCQ+?^NSVb-f~My*NSDqiU1Jzm6wQt zic*%3ztn1I8_DM_F9i&5&{yKf=uD7d0O$oP%6*WkygVRlDpjl~DGNe*0=}RK7+%R& z3L$`A>aPH{V0vOnRjYG|MA_;fXPD_>ualrIBk_r7D9>q+#^aGSXg9_>=cH2Gt50ff z>uJ%@)uFQknsT4zGPdqzEY{5#VrGcGa<4C+O_1a~Yo0xCVqVdBGHzBr$v-&1*gV@j z$2`~UHT%q~%pG}M=7e-o-mJWhB<~_(vJ=Uyt){r#R_(=;H;#-WIb_0baGFIVSun|> zMV4%`<dBI|CRwuNk)<4&<jG{5Eal2%yi6v@rhHt)ktWGffh<jy$rM>WNH))$NMy5L zmIAUIl%-NxDwCyhSvo|P=F6r^Sy~`V#j?CmmX^rUk+Qs0mX^uVa#^aCr4_Ptlq}WB z(n{G=FH1+up5Myk7+E@2Hic!WL6#!2)GSL;+1x67PLQ+P<(%Kixp6tC*RqzEbJoey zpJb_z$ey+G_*01NIu))>#Bx3nEEf>bav>B=+CpUM&v0D<*Hv&`4cB#W-3ZsMaNPmd zJ#ej+$30Bs@sAM8!$dfMeFCy(!*t7Y;AUdC=W;oP9Os$J5v!-7ZyHxH51@j>`VQr% z=HyguhRNIENAOdp=B)0kKAc#m{-&>*w@%GD4&QR7HuhDMvZ+mQpPHle9nM+TaH4f8 z{KYm4cJ^1jVtFm+IT2_c+S%7etcUmXb#n#32NwPS*Z*;XwP0$_$(wn*ofpcg>xi{z z1L-S)j7}p!)jD-EJdow0(+PhDIg6Z0&L%1F90NR;m<VT1y`E>pTx@`s7~rJ_c$ooS zZh(I=z$*=Ks{vkPfY%z}^#*u@0p4VQHyhwB2Dr@tZ!^H#4e(9_yvqRZHo$ug@IC{) z-vA#lzy}TRA@V38kCDg86NGz`@K2Fv$kXImBmOx;R;{*}g++^N_=)~XZXA)8RB}#Y zI<k`U5P3o+H-VU)^SJ_!SR4yDkyw{ja%N&%R>`@EeR&lp6NkN$%OhE}m7I$>y_KAe zxK>nh7UCXP$>kG|ql%MAcJ6%6!;ze$Dme$q4OVh?l2=#BWs`Bs7jPyr-Zr1hAp)7O zvXZls{L)G;i%iU3zzO7lib`%gIj}wg@sqMDxm;4fiSkhbE@^~Ffk+53&ld{V0thc~ zydaW^WYt2B6ALF#nR);)EK0t8zK<N$z~k~^u^AT-6)9xmBm8cX#jg&_A(@+r>mdRp z9RH<@HuZaHOM@AASQfiO77{VjC|ma6B~vBD{|<@ga=!!cb+N%##I@RJ9G6Ra!uF7z zn@M~7ldTTAHk=j8g13_zoVXMja&xUtx(*28hgQ>6NPQMAa-KtQiBsLRcrJsL?8Wqa zQpDlfCZak4^;$%|p5W1O5G)CjWZFw0{3gO&7O`I(=i%0jY1~av-svETyU7fG8=<$d zM5#R(04v$OY`^90M170zq<7#C(RR4T<9>>}NO&AZ3@GD6<8bc}8F(_jV_-1%gS~s{ zy`&*G$&NBl_Ib2*UQcT-z0aU^e;Ta^NqB-zYXZ=^Kb_Vi%&T}2m*d3^Atl0Ngg#Ef zd3dg!lD{O6V1eipq)EhI4=4vj4x~?#@T4X&Gzlm@jZ0W2y?XwN)$<y`MPjHP8Cz-s z1P>5wszbQ}LSH8h&LlLzc1&j$1<AAw5Oy(y!?|5hTSt&xgnmMjMci%184lS>_MNH+ zzfVcHFg#hAjN2!Zp(*^5LL$)5S%W2&@sO(pSJe0LK=nt08)l~NoX!pwEbJ?4Heu_? zyGb?oBjj{A!F!0`OXyEzAT7UvwEX^?mfwJ$-(Hp<)Fx1;eLQ<fM#j_ie0ba-Ypo4@ zctVoZ^{Kp8z3*f7E)q6@ye}3{hkK25CQmo>;e*tw4jn{#p{CEkfFh+xnZ^PndN$vL z8%N#jyi}>zgFjk6mk$@INK1+c7L1<9H!=SM$_!|r^WkMMGLv2a&tzm4y%3%Qk%Q?L zAmyoM&20KJPcP*&n^~rp@l7&o=3=07IlK%+X4AjGQ<>9b3eAP$T){)z%dG9U@=cO@ zZWo4`SlIRaAhdy1fR-<SCb*r)hOOpq=jok%*vlF+<VE*Z`0>Mr?cW7xk7#I*@YpJk z@boc$pZ2&zZI8$KVcO$KwF!#2WXLCgP^K#X89wZ1<ta%Hg!~ZoEaq!R_6~%6U(@n^ zji*UI98dyDq!SAAPzDDtN~Rh>dXr~;d-_hqe3NnbHr$Wr-{I-od^ng41xb7deFs^- zvv((bmmg$W<UKxIIuI%aF5YLAl7*%HJrMkiXL7j%CH^y@)Iz@G=@<M+62F@tM&iF@ zB~BKRkPlCY13}zDzXItSVAA)sUhMLLBrEoRcszW?DF6rmhdqN836I{SKk=AV5tr3~ zVljjJnMbv?m#06oi1>E8mp2s2dI6M@D*7y=y*yJSNv23P3K&(yu}1dc@4p0%jRQh{ zK;9%k-Me^`WLgJ2TrFTN6yXnNs=2F$-DCy9`*I%dwF2Ht#OnomgODle61_=il2W36 zGrS}t4tk4#Kl(VBZi6R^{;dN3A_Qdrb|GBRB!wzag(3rPR8}5f;6Y%3KFoLy%|k8k zL49=q#5^Ua$LBmH&}W1OM>2E>2Ls8om^z!+MCWCO)6Kms&{u^dD%a3qxVI6Ja(KvM z1}Z+x;&nkCS+J*USF<~UTTFKf;racc`2;e~<)K{yfd3)le<Xx$v$iX?CwC+VA~rK` zCiGu|szcam82=Wu!EP7km4|63LE7Dz_De18Q%2ga5NjOP`esy$dswyS;jflh-IsBD zpr)${-s|{10{yR+SI+Br)R&N^ojgaV1H^ifZV-nK5T}SuViMY8BRrKk158((3h*E( zkkiD}cyWf9uH9y_a~x*UGsUFZOWDs*tgHht@!h8FGXA4@wn)zrhf2b^A~yEH^gKO% z4sIYnUqn%u<${hxFJ$mcdJ(c9F%~Wnp+d$B(7VsYq5Dda$svs03FzS^+?68TDr#~& z19}h0@in4aCEN6qDALP-zaaqz$#pR5AI@Jd((8cDWT=u0A(K1k^&+SUWdSIO#7=sH zI4~Hh;)>Uktx4tJt-$(?z}Nue>t^I@f{9nP&YhyFn(h?o-C|O=8<OFL%EEip(~RyF z!wZw4g@oQGs@%}~#c+jEF};YJ7OIwJ(g%@XKI*z^Aozqv@ClJVwJ$+*4F8Ny@L8SU zbBtgp1a<HN5}T-h<8{%B@X`2_5pQ_4vYOr4H{Mkcqkee$tFiNOO?RZLHP#%TTZdmv zqAhhWPlYLLTU6b70!RlO025gqZQf9{|K$^I#i$>6^ehh<n&q5GoSa0~No!**iB?l< zG`6NSVQ=p2?ud5RMOtD#@!6v>yiY+*%X`|JqTOTpEL$<^LXMv0al<gIe}%Qxbi}(b z9CyL^g5IDljaS#ugjRLIYfZGX-D2>oeNqmVm&)2l*1Wv&>@%x{eP*?3pH@Yf>QAtY zBeIasKCMcefPePQ67I@S|H-(3fRUp5r8S3R&s_EUDridFZ9(|?9PV_4*#dq!6}2y? z5`H-q1h$PLD`Oi4&J-k2YKMJkq6O-g(*pc*T7X|p3vkmF+-zb2M3*<f2-eEeskn2Z zNvsj+LAYsxr_;2rs7$0y)DxC*jAgEz*o}#_l=_z1FJ*4#t?F#=>g>S9o@l(eJJyxx z?AA9alup#Y77c^+zsPg>{&(aKlOsq+PD|=dTgHn;<D^Spywh5I?kH>zS6=l~qOGwj zMbd46p-3~JtTVTCHutpSnpAV7t!@9`Q~2f<S95Eut;NVDo<Dq{ib_f<NC$~&-!f;7 z#=XH8e(vy&h8pYWjkLvZiP5Mk_PI7^80<zq)>1SYHGMICEWN*c{~Mo&uL-^Lo7Ck% zF&L=uiX~;G0k%#ksmqBzf3U19^_4*KLGAf+hAS*YdCN=8p`H%5qA2-%zLHY0EKpi% zHL6i8FZX-JGJi!Ndl;TXf6y1Osmf!VWjx6z`Bt-A%E_~cCW3>nY*8Pe9f);2XqAaX z+ZRgIoncPd?6PEovKeP_!aZLW4v>XOvQQ)oxKmUXX30XaEX<JwpKJ|S0)h#Z4B-S@ zpUeqhuG%Mn(G3F|gxU)D!YPxdvim{oK8@XHvirg8KAYX=vb&ev{p?=C?m?0#;N}mD z6BHHbD49KY*L=<m8p>0N>mAvZpu;57d@e`b9R>(;?gCI=X2*Ok3(_*(mc?|NMDkF# zSxxD?LY#(f6D3g!f$9l?b#m$sRBs_vZ%ZI(F)nf}DdKh}(OZZc>~iKSWCvZ^Kad<y z_*Nc0b?nkSbu33ECy1i-5P`HGvpKQ2U0tle*|elc%oL!XF?cckf}Jf=nC-#22WgO) zD<fHvLuS${(XX`>zeTIZ!+k^OH!MW409E=eN%nf?VN@>p9wyg${11eFPm+oiW=KB} z=CeK*ClY%|a!}!sY{Ui;%pLte?nis~y3oX3&o@Y`ILK`y`vp1fNW&2z8w&6*n7Yti z5MKz<ALDFJ#3&C$eFag)6Jf4{HuhFrpD}jG1Yq7GD1sMnxI-o{rPa3znOc2S%_w^P zpab=uJ}lb*qS@!|U$YOJ=SaG}WK>RvFQzsM<P95%if-EIM1P5@o40>eH&S_ZWhX}! z1=!X0@`{0y(h5gBv98S+dUOpY2FpqU&R9o0fg6NtI$C1511AtHDY0}%yKw7FH@uct zlpA|mOZ^q4PCYV}qRdyJ51F~cvNyag^n3mKZneqGjB+tE%A#9R>gLxx{8<S<LFOmQ z!htehAd6FEajIns5mn8`n?bXQcBawHX+Jc{P5W6%zWU=5cAv!Vh3sBL99gKpP%oKO z{bdIIWnpiERo%R1W7}Kp?8TI3hzZ1j%1Rc~4Y4$3g_C0JQI)D8RtaELf3k+qg{p;x z6K)f|6?9Lr71ukV6K+*IwQhUO2|ID2*Nb~h*^Sv=j#Mu_CYI`@?U9bi8fdS%E7>lv zW$G*Ip%S-CZXr0O_{ZM8dv{m<B;pq`J;A(;1ph-{&8k_rw7Ri=G5)NicIiR~d#zbs zUtPDla%o<ovui1g!fhG3#ob{0WQJH5#+YnIy4R&|7jOfZ$Sm6ETjTZO9g>j<x2dI- z-H{P#$KI&-4RpDi=#Df;5ABYw!SB-`?Xg4^@Y@t=KCuvuwrERXQ&a(&FU%lQ*xU&{ zs=EjKT7C-%ef3GvW++6*nsf^B+*sP1p6gh5*UTHS0ik6Y^_H189P7+vOQ`_d3bXR) zP+ezdqR5-Ek8s~@hN`_}>SWq*_{|em+{}mhDV^@f(DV*SvM{CdB(|N3L`j#>j9c|| z5}KAYwXigr?kyU*yhZ^WD*L#1tSz$6u~2=g1Z*r<{AeF-G3&Bui^W$aa0@0Rwsb_} z2^MPZj<>A@ytstFWQf~hEp5>%m>)ttx*O99#r6f+8=HH&<DK2?#nPyBs=FDSjUAo! zon6a1;|UhyYV7D~U)I?YX*)XB(bBm#?tlTHv#mbX#iH@eK$hajR2E}xB?wv+5=PC- zYa3TqRW7Zz#PuL6!>DYFt?4k=*RE(>S{<s#Z|Q3~G|S%=Ws(<7$()G0C+yk=(Gd2R zP<`tt;#;^j64yn2ZELinFag-<$r(Z<Q8=}5MO!oyj}}H+S^y~)FN8KJOmr4D^{grM z`76rG{d2@_sAl!!ea3zgv1WNqJ!>C*`^nG^Ceuf5{Y>T6sIEzjA}uNc+YqR(K1i$* zNj$G{SPhk*PO2s&YU;?jum)tAG_tjlQBYYtqGk<|n4yw3b7UGITU9tUgl5q<rrK-L z#$kPIwlwOK&QXY^<%`6|sA-0Bi%HeJmcN!j9I8a^TYA}?jhXKrm74y_Ht`;XD#VsX z*q+|cY-ydfcx1jZv%#WRYuFoR5gc22(sE*T(GqP-M1DnDsD^1Hr_$RKvlt5+P$QjU z4AirPswzG%LuJle*4Z12R<*^tax%kLcHxGgqRhYy{aOXoKwU?>3o?;vuuNcf#(K4# zeG^9^GV1<jPim)eswwhQK_Re7GDu}cfwt^vi)!ZYfkQZ45KFX2x)ydv*5caW=-Zun zrOg!uwb9ZNZ3$_*e$L4CJ`@$3$=Mh^2}K>$9n(dl$YCZTCLTL7cAr#EN28KCc>igS z)|JtiaUmNkjC##I@fDGd=qQRhg`;l9W&&jfMb8=&SCy?WFX(J*!_`)sx-E@Gjfo_1 zF==Ex6!$D$yQ|~xL|~#?D@bkkG8npgx}z;>)#apZX-}z8ZMA!p`ftx5f~CwKHWOBF z>Js|F`=^#_k@B&rj?6&>6WY^Fi(f|ts@Ik_#*~hYNYRjCY4)fCSh{ia3$cMcCz>~F zx^Wf1vaPE%G75`b-BHy@U67fC^-Y6JRcBjgw*|infWaDV5qo0lmfW#ZWfX=`t!W4B zUq*%{VFrRh2F=spFQS4ekcgwJvujnC-Yi*-8Ly+rV+I})vVp$T-|dZQFS%;MIwJ%% z-zWx0T3RG5H-aLFMmw^ZVb<6kjRWgxd)r4cxmY4LRuA{>#;KVBdQPs!ApxVv+Yn65 zV~kxO-S+sk$w0bGM&oT5qm@ZZrm;HaoHLcjuSo_Bv*mSjTk7X3ahQU1B|x8<yENA# zE(kk18ac5pszjkqo1+#Sr`c$0{7y>5B?Jr3zv^S{V5+mbmEG07?)5dxs_XJn2#pE6 zYqBD-E$7x{osg6I%kyQmt5#Mw;?FN!?HCHyjxJbcHEz|4EEcn>OADVhik&=UlA{08 zW4Mj&`}|606lohKxx_yF<fV0#Mt$T|e<U(8iwsHqHB-_45i1kp(lbdLh7Z~w!whS} z2&pR*)5ny)GGPUw)4<W^{2CJ52A-wAFIb1>|BU@7R1qEeD-+!5`%lL3@Rw5RtUW%) z<QaJCvaGbC6MB!-g?DqaR%Q6nE^m0VI;&ZSSV9q~cRALybv8xX>O0YgLt73osV0iA zf_zjw?RP$NMlIStsmxktaZ^_Wr~20B6!&ubI#!fXq%J*iq&@DyWt`LkktOve^mMlg zEu9G|j_TT?4p^(|mXbL(T<c@G)hcAJh5gD7mxQu2){oRCEF6Uo_Tx`$cf1X#VpkFY zjN74muh7TG+|)>^)jH$M%BJtk^0F~dHR&uVWJ`*G1F}yA#~rwm(YT_nc2QmR%9RJE zA{vq972Ta{U@(honk8#RUG>u1%7xW+jSFj+S5GpK4W7XA)Ub1gu3{FI1S&)v8M7C5 zuI)g4o&JJI_xO>lk?|uLKjTL-JjRV+OIVHdH1F8P2qS?MZ;dGl|7iA$_A{y>%U5>j zdCT=>x}2U^$~sSpm(baCLQc)n$hyv+ghmafvw)EyC&M8);^{18Yjc1(X;XmI7kl?U zlUh$pXAjIBfl~8{)$F%lEe^Hos6R_-vDd7`FEDCWIKZhNWOBNrYf!;MVb%BuOfvIQ z(eu(%d1_Y1+Pm7KX+d^|re$$Jda|LI6Fcx{N$XY`_%$6VBM@7rzBSq&WisMciPRYD zrM@w);Iy<rCuLOe7nzyA;T@xpFhx^|Q)calk|kqZ=!P*w&)xqE@~TsRmT604-fA#0 z)@Al#24<@<rXKq1sZ=H$8AY?FGkw@Er<*p`Ix@!HBmO5^zp9MJAU^-sCss#+BYr&r zHqQKt^ciD1-<1gcDi-z`dVht)>Eo>w0~NU3k+DAG$XG`RjA{mquvC$ixv-R#xy}*% zg(THfqb$~-OreFv^0ok=rm!=+yh?L*0K;p|G1a46T$Rm<o(TJpW9g3KiYjR9Yz4=! z`i!L@S1g_xF!pb2`>1XU)1A26pmMAWEhDPsyqXZMZ|Q@SZvGKP#LrUX_jV;MI>Q_r zKB2WG%7!dpc*2O-W*ud;S%rooL*s;yl{Ip2EFObFPgZ~T+%k&gZZI)()agh%Q`(RJ zi}yE$NKa!mHdmOIGW*4i{RAgfsV|h7o>CkzM>DL;*`vz!P%Ctl0vpmbYb;2r2x?0h ziReiQ5!a5b2!)tmH8ZZ;W1b=cS<wzKNl*w8EiN(nlR-3l+9KUzQ)gR?DVBgyyxH2s zyi6cy!GuiYibvxJ35Fug(Q0iC+gfk%ut?iCYt}c=O3g6!?Y1;U*TgzPv9>mI3uq`@ zd;yVY!GOU2tvz+6XIWZ5SG|X1p*Y~j#+7X2h%M0x#b5z(C;R4K-O-|%$+P#LOWJqF z-|YMCb5xW4fA|_2U#krH8fsh9ndqzpV>;2<B`%93T7~vl#}WJIe^d^INLQB?7gE&q zb<e(4Dz-=BC+1YHSh2LGs#0~xQoC%$((3x^`M)IZ;pQlo_Si`=w%BK4P@FW2$m4j! z^3RlV-~MwP(!Saf&cfQGm#a%SIQh}yOzM1ZAKwM;s=DgTlIBA#RUtC|Y`haK<&@_G zyQ&>PX)3WbI0-O*kKW9}#73C5TG`Atirb@XjRx%5_cN3uV<5`b_hY1Ot(Z49ksYr7 z95priE>&PK%h<Atd8Pa%XCUPoNE)BmUWe|Vhmos{tR=0aU8t{JVOmgIUthaSWcv{6 zY8EZ7=a<%7aAyL0v8mB)n}S_~SwwLE*$=Z8>>RqIA{I}pR^0){36^I4YvC9soI_=5 ztVz;V61`(gl3HRcAA<l4yTJKBxVO~vJ8tN*0&{&)TIvgkrM_TLEUhRHSd9%fQqW&g zS}vBB`+T_3FlX59MP<Q~65J+O=Gphtt5i}RC@s$!Zl)sz{N6I3<n#H<OQk@d++QID z%7OuZ;r=XUDNs`8^+_cGf0<t@4SLH;q+rk+gu5?TRw{wI^`Ya7iW2l*;SB(0iP!Ik z@G>8I!3aWHUrA{Y!o9vgiDzF^LJE2-{H0Q9AP9;5W!^xkCH3V|^85V3fK*!I^_H8| zPY{3-EDK2fQXf+G1%h6w)K^+wCi%U-61Z2CmRA4|zOpi@#P5T``h4DsQmbJCKrNRC z%cMXBR05Ex2$o9za>!irRg|-$Kw_w&0Nf!xFz&}30Vh~qj$71ykZmAX9*_dTU_}tv zDGyelYYwOqKa>;-?S&eXO3I)uAjAh0fCGQIRN||ED)D>$z;cN{0Bi>Q!3wWE{X?GQ z4|sj0=&=NdmIN_zNlA$xvM&vkLaq8r0_74U1x8B%ECY7SO0n81fT*uL;DzkVDoTP7 zTUr{(8Fn5MC@By6r64PVucV^9bi#-eH^2pC^jZQ<?Jq5X#)k^_mOF=-kkE!@-U`W& zJWUvJ8VA&ZB>@SVue?MGK+9Hm_O*i~kney$Z}^!kQ1C*ll|b9W-4BFpX&YOh6-p|A zvcKHt1^PiBv{zZV7h1U@0F?w%f&x-rS^*VYR^o-W3zkEL`2!f@4^)&R3`C_M6w#YM z@_ZQB@MD{lp>&r7%S)hV`22A9mH422{C<BaFi=_&4CD^`0SOp_&I2M}Rsxk4WL*-t z0~UipKZ=VViUIUWAlzSq{iw|E19qYCAo<X6Wl|7i6+Oa~qKle9g&+E32@^G_l~U${ z9OM(a1jri-OE3t<1HxWtdB2yH+8e+O{pH>YOKM-rP&YCrbx81}Z`zonxmH70hlVGZ z)aRw_v<A_KG7&3uCfkZ^&CANOo5$rHFfJ=^cHUC+(Rs(SpJ}YkKPi7*{_peukpF-A z2b=$BKH2;yb00CUC+15?-h(9XC6aeBFI~o)Z|3vv;?4K)=KFc`C%pMHK5s9dceh}E zRFFJGGTWE~8BcajZr-@@6Y^aIe^6~s1r`uH5g+6=cQV8z^Rmn{-<_gU=56RshUCa3 zS2pFz(gaz`m*oS|k&IA?j%1`MvNTneie%{^**r})PnXRzWND^scFX2jvbjK(4wfx* zWHMJKUYYo0-Y=69nFM4$D3el|l*y!ACKWQ7CzC^Da;PjFCR+}dr6bS<jYV}qQzc6a zWl}9mAz504zG$pRq9Yo@9MO=Y&;^a9UM8z$+hH>Kt;`=Q^T(kJ8hfKmBC<`9VZJD~ z%2G_WpCH>iWT|H&k!`0CnVbsOX1LBIvgK?dOXt9KE?noqbv|4d5ShQ2$P+b3G!rj_ z=j9M~B|Nukj%aQITDJp@JK%X2Jnts5cn>`9gX?}GAMg-_KMe3AkgiP@pM=MW@_{cx z%9kPZ6(S3-650A!c>f!`zXs2Kcu&G}0Nw}T`8qte!*eHGe~0T0An`U_|A6ZQc>gC{ z|Ay;hxITmH3&?dhl;}SIe+Sq1L^k~Z&pmMc1lMW2Y}yRh8N4i=3D@~>T>!0rAumt5 z2;eOMUjolR!}C(!athB|E(htD^cM)b0<J6Jx(cqXa9s^_uH|L%CSES|%M)+m<%zdK zFkF_~;CVZ|-@(h1@8snvcf<2uUY>d%zz^`22Z8KEKvsGLu15h6NJ)=_96klt(*QpU z&*$NK0pOS58h~pMuGit(0oP7o?`?R#0~b_$9yCZER>k|k&PNdUZ(c6?n3oUw6t2$! z=S#@rD|o`Y=^Nnhdw_p{YY#6^>l0+@6u36RwE?b8aBYU`3=AihO#*M(4A*G_;GQLb zut4}ZaGeX+d2pQ%*9C|R^e%?y76GbIka;ZA<?#L&xULXn`&M}V3!3w4cwPh7wSt@v zWhXZSybaRa3eVdF*?K!X?|}C^A--0geix9s2ZHW}=Y2rtenB4h0K7j4@WX;U;}N(X zgZHQ5dIqj%;d&0P7vOpku9x6?1+Kpemb(aV*+YOWtP+shJdlb!keob}oVS4fdxE7y zu-q>QmJi^1l87?@Pl5Sj;vaz4_!!{t;MxP%&sa;MEMd2J080xnh&q1<q`3#+2jTe$ zJfDE)Q}BEaE=A@C;T42IdJA4Z6G2Wzi&K=X--s>f2Z=bc#`n2M!KC611su16<Bq7~ zxcR?<=P?`?3Ul0|CU`ajUMSkv!Yyxyw@!Tf9lTBI253?op^XHRoJQdNh)o0njyRpc zXCS=lEQD8Gi14I~5b;vH{RM8JD=;c_6-I@w#(-;Bz_pCV^$^f}Gu$R^gIoS>a9e&S z-tL9li4P$3D5iOgrFk6FbUuLrPqBcfAwY8EXPq26c?a1nSgi!EXUMbUIr2Ptfe0A& zCTJu*kQ5ZWL;Bt#d_h6zJp|sxp!X3X1)&c~AHIh^QlI&|NZ-E*2^D<8k~j)NpCj-o z0fMKKA4wl2<m7_AEb*jCXYuG8tB>a#*YF(YxQ++@3LfS$(oyi3_IyHnKFOX11<&vr zGtcolGcT%9p_h4;nOD?j{;Ryo%wKtpnZNM{GyQzuYdkQM#4zrN?ZCkif9E;gal{dC z@O|f!^9X|P@_ldeZ}G%&@&|n1dpz&RKlz`0--rBr5cCrH0y1F0*E;YY9r%_3lk$H; z9=MbL3uQaG;Ag(CfSmjfa;DI?Uf>)T3Q*vAe-`>K65x5I_PkDe-XdV_Fz_KY=y#86 zQ7@;W*7d7F>yp}YKz;TM;uB^0Eb_X*Zx?n7JA}UrDew&geA58mHo$ib@LdD^hXKBC zfFBy*M+W#W1N^rE?lQnn4DeF}{LBD9H^46paJK<c1N_nezcRqD4e&n(_>BR6Yk=Py z;134)qXGV8fd4hXy$0AProi<ExWNEVF~E%mc&Y)OW`LUv@N@$_!vN1Tz_SeSYy&*U z0M9kR^9=BO1H8ZhFEqf54DezD++u*27~r1`@KOW3%m6Ppz`q#a6$W^v0bXT*TMh6U z1H9G%uQR~w4e$m7ywLz}GQgV+@D>ByW`MUE;B5wYy8+&5fOi?--3EBC0p4eT_Z#2? z2KbNxK5T%G8sK9F__zT+X@E}~;4=pJtN}i6fG-%}iw5|T0lsX2uNdH~2KZM4{F?#3 zW`O+$m^8ov1AN^8w;SLN1KeqVe>cE44Dd|@eA@uuF~D~X@I3?khXKBCfFBs(hX(jh z1N_JU|7C#xHo#p5_^|<gVt}6-;O7STg#qq1Kx%+r8sJw3__cT>|1a_k`BwZ+gT5Dk z(4ZdyN+IqMiF_Y#afp}lm+_bLf8m8b@*t_?4k6|%_)6{wVwpOh3lV`>uY}hn#C8=t zmJ|C{cq}50b4Y|MBUx)JxhCQ~w37P`aa{<hR}%L@^SRAnQh44b3pf|a?x^A%BxfU_ z`$_IIWInfwBY8KID$Ys99X_8sf+OP(i*Utc!qq^yj^zKLk~^MEd=3&9kpr&b7jU`c z!0&)^Bbjt9yd6Xeu7S8Iq;Lz+x&$(sd_pDHK&Ctep>8tu_$uyTQgkY0S3(YY7#?%U zw95G$m|@eegAD4)jD8@tg3MeqpKImFtYWp02iGxHiWkr4CUIo;^?+JK=G3Ck#ko%c z<q5>wwSb#Wd@n<;FF~&UDwd$+2EbfO0`2p;BRLYRuHvku^cud3%Ohol^SP73jw&y$ z<mQozdRFpzQy|c0BZsVxaC69^PeDC+$YIAsI4?PT129%ej<}Jp;|?J6=QME=sr(+o z%E^M$pdbNKbs<#1RI;!LYuIil)fYhKwIs9&VuNJSOyC_t7vBU}(@4$Dz;+f{(y@TE zlOxXplv1+vW=OD@Ec+6u9!-{qn>dlw-U4COWW{8av7@4_Bz4Cx;AWAP+aT^JQopc@ zn@CpO3NInD`V&ZeEIIlicpOT8a~lM%CcnKM9#!O+KSj9N<k-g`Gaotb4&cK~!lwY@ z0@CmZJPsp`Gt~M%ezy9IR4?Exq^YZln?aiIgakIyay2kMnMBWlTAW0bt?*Vr)*P(j zw_Xlpjv=wTAiss=gxGxUM2?*JDFjxKwmt9&llEyUYRA)%ay;q08&H>#u6uy^O!B)w zR&o*2eHBC%lK7*L;Bb<NG;uQNv8i&~yKn)QPu8x7sQKiiC9F2q%~DDJ{v053Ao;^L z5P2N=zv&Pv3gnNCO`M6G{2~OdB7cg{=Mo(0BlkkKN0RmA325RRvVmL*(Z4095UVN` z8zEu=mksm$l}wOMBgf9?7I9<~;mqQE5jnxbf{wt${><}DGDrAJ_@hLg2-18Be~3*& zBp;nl{+UOIn<gP793coWe`_W(de}r;_6%|+Y2gH7vDWP4W%Dx9z#p`WokM2gw-WsX zKv}qzG>EIYh`5`W#e0}<hiOYpBqHr5Ht8YuQ*M}hS-ZY;&=;Ab2zkeD;^JNeqHfYp z=*!I213SN2MmJby#k{50<K#H{DhXSPvqKhifkqb5eu8n3oNgxriWQw^(H$h&GEhlo zy3i5Y-yztR4A}wy4a}DpO;+be1Tuce+3!7i)($ArMDma`N(xVH=c8ouhIRqqKDk}Q zhqGP6hpXKbCCPSRuYh~VNgo09uscfHNXShf8GX!I#O*|u(NRV($62BTU1b0*`UKzt zrhqOeHX&L1q#7bB9wi$ypwA#V7X(3GZG0$)gj@u(q|Z7r54cSCFwYs!;k&q)zTiY} z9R1z_?=jr0W@(o9;C6DLSwe3dr)b_dUU3#KCTEeyV49ViXBx+WxjvpVxwr`&pU+L? zM43B)lbqav9GS#Hi(74bc&HQf+5wNN_y+6rRx7=cZ?LUK4{*2g4TaNN3+cUl!{lkL zlj#$D!<1>QQ|POF!_*?Kbt+Br4Ml~mMfAUX!$FYZAbPscFb!g+(amDR^dizaojxfx z%z%&?^jooEW?}10dbg=z76i<q|1dQi48Xzka&tp50LAnrbHi)^X46jz`XJd&!gG{4 zy`D)>2VXKcJXe{kcq2agmHO&e{7OkAK))x<-)pdly8}IsG2wyuEvn~{A4tRG>A?OT zmS_tL`-wD6nGQwynV|1Ob};x}Mx>t!&3eAU+#fO1Q}}RcsFa&YPvgU7p)vqY=P^O* z(DHJnyolhT<#;;#nS406crk`;Ev}(w@mrVV5`kX8qn9(q6P~BcQw|9qsvH_RjGsv_ zWX?qhw1E@q{swffcaso4TsfS17U8Y76%c$6bEh|d`);y|yHB9^feADRUg`ZpvezR) zmJbNY#q=Qod15E2n~<qWrBd}Y`>=qpvS2ZNR481`JgKVL{SCA07s6Fa74xJD!8s88 z0S5n5K&NftYNh&Wh%@VP=-Cgw_bm!9Ru+dAp<_XdPVQV0;?5V*Ya+VmMD8a*@FmPA zTnl%JNG}C>NP;+AhJM~`GNcOw!p)d&o5;9l4Bsj;hHDnn+r{t_Wyuy#F@)YJHY^Dr zi9YM-U1E4?c$u=S_{1ekd3v}0)&_4&jucv#ptm|m2VB^7=AOq)UKGPKlo`zLreL+r z#wrk*-%aH2Z=kTcNWVz?#U!F#9p6EdAh$^n+W}-aOQ-cd()v)uDnN&qdO<(d3i`1~ zKNTAmCtDZO&oG?})Q)Wjs-2&h8^B513s2nvkDc^qF+5Y5S(tMtI<rY|8$d-)BO4{! zCpFAm#X&dOAcbo~wOnzpvI3IP(<D5TIk}-(a^;~%9;r!0mpq##B!g~wRzz0#CDHvM zC<4hW(sQL@M4}2a+d%m9C3?QZD*7no<pM@~a47AIRN904(7u#KEM~qg)oR%$LABf_ zh3k|$)zPI|E%!)jwcI1o`=o}tWNRJ0UqUaJdb$@d-Aht<rLuA{`nA;3y{4smO`=Ju zVP&#)B^|(Yxq7;PV7d>aaJ^E$7=2Viy5k^tmzHjqL_d+BgUm*^LsEEkGPD}{^cPaH zh>ILeceCejD3y|hk>Ap<q=x!rYd!i6qTfp4V~}X*7{LD?A_`mU>5rK8ILz7sd7J<% zK-9ltf~-$9twN8U<1r9r=>iPA$P_+SIaVF7E@p7(IIaf|HK$ulVGrp2a1SJ!peMQ( z6J4K{=ms@WgO=z<HBlob%GXQ&ASQa)6rQEbg5Ze)2=hD$e$tc@<|j=k%uk!>)21Y% zp)fxKIyVU__gPcJ@!{i@;|I339#5acGkFg{!dXCJ5D9NL^@|apd!U}(E)4y|6h2rv z7=kD14Ma_9MN<>~3bc3<l=#<3tpJrpE{Z#*``M(5@O4C40jUcy^&t?sS?>2v-mo1B zoFUUQWEJZMz}m2#o+&58O-fS^NG&}_o=X<f3*>NfGSrL;XR=QJ3LrtR(o)`{(x0M7 z-i(pkw8&f4$f>Au8X)o!jC@QsRL<iv>j^E3>63CeszkRiv3Xi<h=R&_TJERM$eNNl z7FEu(`rDO6(>YQ40!s+F6ycD1IOMVub9o~zmp9d1l*ROIIlM+$vxV6#@5l{n!ma&F zT1o2~`W}k_DhFZh7Xg*sNaag898+TI0r6kS;S)k9z$o+|76`c0^m1)91MX>NBgai< zmSfvudb&B>uC%M=I@8?H4&^%2+)vLkr<a7DZBEmySgv+@9!m(hOxNY%YRu(YbGTS3 zhTs{x_}y$yiQmm;6u)g|y3L$KG!(yEVSrD<_<ozYp(EU(bb$DE(A&)*Ff);G0h(n< z_z}iF8`mB+_b;Z8vm!u7v-JF5L$sthJX@I!!3XR4zi#CJI?I2DneKr60S)ut33f#i z%!<F88@j?>N*CncMc=^ui%p=QA4CQHkr_q$8Nz)81fC@XAI}jUAI}p3A1@H`BQyOB z$o@|GozlH6Wog8fI2Zs8!1WjAhIlxE{)d(%NNb$#He)0{dXyfemr`?ht+JL4|6j7G z&`Hpk-<ZRPh1V(Tl;4N{p!{K4=rCa>{Z<eAzwjTGKdNCrm{kvxO;Yt?(oFgz7GSn0 zT5Z>20ru(z*sB&`uUde;X1dX$v7B=P@OYX9sZ{?72yV87`-mD9>LbJ$Er7FLPX!>K zVPRaN;d7>?Azlb&I@=QdlfiB1Pf(U~^dQD81~DW2LL;Y(@s!~?$ZG&t-D*Kr-y+;r z3%$+~UN~!qvhe(!1A~!;X2HzU8!X}Vgn5oFB3Fmj6Lgn7SCp)_Lm}<0dfHnpyK$-h zRtvogN$dm?Fo-pYKm;w}dsHG|#SCoKXn1*1)w~bsG#;|h$F%$}H1dDK65c?Pp$!C8 zj!%F@en|8jOY|<`p0m)G_D%GP1tzPQU2<#a6qeF2fWA8rQYQ73Nedmc^s7kK8yQjw zD#h`D^aexv7vbKp(6^xCs!wI{0bV2WzRvUe7WyH^pGJsoqXk9i2Q$$Q(UCre%K4O# zk1h05z*TFZdJ}=R`V3p5ls8*#Y&!I%1?`f}1l{$a6;Rk$fWGWcC+N(6GeK|mlyF}H zxi1O%8XjK}{#$r_O@!|(^lQs%4inRFEjX;ichc`HMO++aLw^860yz<Xu+SeY{Y@g4 z7irTU!N3TgL6kGdJ)Wg#kbFa=p8)q;V*0Oz{sghf(3yaXEYP1VfZ8O5&LE`86gmrn zktf<`#dB!0(3PKcph*s$%_4R{?oHy8kUh-8a!=m7m!4`xzvN{+$j%d3+B2=jISK`M zjsjHGnO1tX73%XGLOd6t?|W-fIhXY3Oh?}SOUU_FdcIYyZ%`!{SO-ur?Wm(Jv`$;> ziXht8Fu}IcORUTRVTcv|XCho`rI%X!2ep!m^fGIcsFyq+(*MPZg%h!G$q;6bM6Up% zK#6%Q#GG>Pf^uAAMZ3COkgc|-u^e|=ncGH~q3$d^wONFQLlX`L{yv_&)4H3i=gHmh z*ue9TTIt<ZbtGKRD=WaPyVp8Um{W&bpTZ0G1J*`fd;lJ&^3sD=dcTz!9p@1sOCJD+ zi#PG1^P%X_au4F`>DsG_J_N5#rXsQx+UEko1L;StVORJ<G7!3usFT^9^l|H8FAiOU z3%I^XE|`vj^$SI*ut8CN5Yalfssgy3Ng>{t9I_J?Tv(*DdG6o9UJ2O+_j7puV=I%s zPvLPcFMbJ+^LXhSD}B)#o}x_g6ha-oY;CB*sh)BXX|1BKSQ`#!Zx@r+!}089`WnVF z+X|xlF`8Ltt%uX?)`l%4d<j`{3E^6|5c-BSyoD$#fO_)JguZDFUrLlq3De?l>G5x= z@s|<$wl#b?Q7%{G|6x^43J@mxft8sQA6om<?1_DiiH}$kl`OMc|7~TRY&+d$)q2~< zT8o|oEs7OJKeej8ZWj8!{M?#sLPe;oQ2s(9E9e){MYQ)T@cmP(+DQg=C*2UM1aIqg zKMj)hrF9w}3h|Ye!?}<Hnq%26D8Scgfr#{t_I@EExfItXY%uz*wMjzC5>hs8VIIxt zch>NgM7feMj34z%+XJZdCu@_5{?{75iYQkR`m;5>71!<PUTgSjqFhaApDlb1QLZ6$ zy^S?6Ox3lv?Qy~ItJ%nOLuTy7X|drRdWtPcH`)e5*Agqt<!zt>=b?740|7kCh60$i zot|$CpG%<YZ}Eu0@ddU;u1TyXySObjy2XY*+C$e74pA?$C0qI{p=~Z=!MN}+ZV+nk zQlxx{0P5yal<n(mOx>_<+II%g6wY<F-Q;?n+yIXoc>Zx4y}?$5s^vzTYP>aK-@K6* zZne={HJ0E%OYf?{2EM}vdgOYdTn~C=BCvXw4c<VHTu+E{1Az_+#O}7a#-S5;K-Ck| z+u)_w{TT51fURNbK<iZckS!Trq%69Jwb8@2@S-G4?E51(68eOVb>-r1d|GFIPD97$ zb)sYa=d~otO<+8D(4*^%T1fb2qTEa(Hxc?8B+{70DONu+n?zpGzdJA+xq;9DzyT}% z7Qi_Ga0YGRZA95d*sSPv8$=~Tw-7QdvW?IkI?EWhQ)fAJD}mN{2jXrc%56Z#4YBXq z;4K-t4N`_~$M}Ch{2fHOLyLdk25-sG9fTBy?!@>Hjr3TSf2PtGP7B?IgXb>Wpf1|U z!FyEE{@6CylB^`5y9rdt7sDXz))4MN1d0-JD9YXf5Rh+d+IanqjeZB2|Bfk<d&!dD zk<fj}(GPlQajg4MD{bh0q_hVq9fp*q1EoH@MybzEH`sMb4;YkAu><<yXidz)DVUDF z*-p=}r`710b~TSewMNgvR7YScwA(JxQ(a=Gm)gS*LghS&SeM&jd_+}sg+2Tb1U`g; zSJ{)G=;xz}ei)>^UQc_yo!M>I+v!bdByIr`1Jw^>CEuDx<aS1+QfJ^^oyfg*dcQsV z2%tTJXb&O-IA?#@9)1)8AH~2&S=t4--m?_aK5fT-Ua*5%Vo%$V40+a0pT(qXgx*1) zN0I|7$rmyFF@#=5ngc4$SM6v}ROv?BfL*if2JG~8jS$2y)Z^c@YewChcKWtGWz<#c z@gL~r`M^&9X;+O5h!0_<;RNs#J^m9rv*$js)6ZB%F;nhyY@9_pt*;pFYdrUro&E=D zoyBM^*5iNFY5i!YKiO4-2jXjR);t&WpaYMoa)ciz;U|dl1PMJ3GXgwSM157&>61ix zlHh{G5<S_UG1+A-*;7P$DlHj%Rg*nUl&4v;BZ;7{Al%?UZq6m#4GtK<3Aw>RZ*o9! zmSWMnv8frtn>=?fAiTwsdmZ$C2UGC`3QZq$G*l&F^nS?EaQFZW+>biK&k*Gq((4(I zb9(J98EK?XXz)NJOrLgy?<3)PY$f(tvSgmtH=e<qmkBTx{2r~VBxF6^Fo<s>c#z3^ zJeLGc{=t($2eX2=JD44^!$Aif(|dQ&?T+wsM1lX$6R?AKIMfmO1l<n)JDB(y2B_*6 zK>aaIvx$+XZ#nSjC7d+9?LY&VsjGJ#;TK7`0L-fb5_%ErLtGPi&oK=$`*28RhS_^A zsP|7C16xvOi5#mOt0}c!PY#}N<$zbV&~zKxoh+x%umYB&d3hs#5BLTvfR!FCOI8D5 zh<(U&-#D-$$TzGa`0rUo2tTrl5cfFf_fQc#>5pl=!Kkx`)r90)tJQ?`UkCkJuL)^L zO_*q3R+FjMgJahQfRd_WJ_W%6RR^DzrPhimy;e45O@o}z%o>t&lLXZw;euxFdZ?ER zvId8*7hGh%C@Z60SiTphhtVxrIuC!&g8HgO&2l;l%yn6)T3#ZcTmHp!*JaV0vcfMD z<z<k@1wi>0?Jc>D<!)mqyeJ2O)j;m(MT2!W*~OFFvgmCZ0Bk^$zao;NcVrDHuaMBI zsO#^^YJlXeFB5uyRuV#c*$0b<7##X5Vmyi*t>8g~HweJdQ#wZ}DSnAbF|hYk7JV+o z-U<Rkc8a}WxSLCWyWKo_HH!)T-?Es{zm`Q`)>5T-{9Bfq4CL{(ELHelWlc_bF_}e^ zEE=s)#tI$C0y)n~;GsoXO(GgCke~+5o1H^2-^dED0zp|tl)sT_j7K~2xCp|)@_3D~ z`2~Fw=&^c3a(ZXD6B_+(th)iMyLYl&l^o~7Wv~y@XpThjL!IJlX%uGz#g9|fhgQTV zX%)emVmCI$QK)t&K}-CHxwD3P|4$bEo|R1fEV&1<>Tq%4G!&ser#>@f$bC+%ZnDwI z=9Z^A=|-nkyF2KqPBzV4h;_Az1rI7Kk~vtc)16vVvV)4waEALqlKWAT&r}hMNGOQ{ ze718D(9zuD-;Z6x3GA%I1(J)9ohzIuKTh_of(>9-04KA^RdD}~=WlS*t<Kc<1+)ZJ zGc`OwlmYBdXq8^=gjY2@Gys<AAi?jRE>uC+IMs>6k2rB~D$Y%PPRNVi<QzzbUWXoy zdhix}$szcC;&vyVZ&t6b0VaVrI>_>e;8nUw^PUqcx`2DnN#A!GcB%{Q)DN7RRSI2s zTQ8(qEtsvg=dq{ka%xj)ZQ=<fMwPc67eG$M<&X6Ow+o8BK_H(v+1HcLoY+Ld=kVwe zPjk^voJnN|f$8sO&hU1kY$u_egk#gP&z)*NxQX?HQv_+ZlkP?&HX93V2de|~q14%A zQvOZ`a(Yo0oGO^Uau%N^(65}p0R0-szd`h+xuo(YVG6AHbb<Z{5nOYiw!Tr3Si~lQ ze#;`z-2Tp~rT~F1-Yn4X8Oa|pzqd$}oP#S4dz{l21FI<+SAw~<AQ5|=Y!Go{*Pwl_ z@Y_Urn=KK#nd!e?3mH&WY*9Z&p5mImn4V??V@1-<E}eTe)0C8VR2t)u#_2A`oDumh zL~elCnHYNpOS(m0W<}JL{-kHR0R25g-vZ5fv;;!X39Wgd3+48Gm@HrH(hY*6uu>_{ zUE-pbXo1QHgdzRel?;7|efCmUvWP3<LjT0hahdv}%`&y=WauLzf~5-y{)Gvya6y0h z4O-v0_<oZMW$z+^yU9gwap8`D{(hKv{u`&;+g$s6{>3%ZTV3H@B>XW^K86|F)!|Qw z@(Bs;!t8Hzg+C>sPcfI<F_+(pkjp0QmG|q}-0z|fy7ceRmehCXJ5=lEVOKb}_)<ar z4t<$GA91N4qMvYS^KJmN#f&Fi+F}N>^t3Dd83}(*l+TGuZ>!2*=nKM!K4XRw@^cK% zZ?8c+;U!kvi*_)cUUKawR|(`57k$Nr{S3nCYkH2ax%B0cewVg9f;kSj($+fAe&6nD zc!q>`lO?+e*ZK_1_Ou2oew&X_Lf>!=v(o#ft6xPb;?xPmTdwezB=jX#;M*>BPK~q5 zcQsnmBYz|GJy*k5M161liqH>-Bm7SwTrdD;MiEg7f9x92CRSgwiPe9wPCjv=O_?6d zY|2lus*V+9?fdW7uA%F!E*y`c-oA!<yIvsQyXZGAZL`6*t_JJ0RxAD9rF|L`*gDS+ z`h#mg?=1uBZU@gAlx`TA_qf=|{F96BaSgCh_$QaDeGX^Z=SD%?>!N#I>IxmxKl;QT zx@n)gNt)GcD!vJFYBJ%{hS>xJjB)P~Jb=+1{stz7-(c}hbwlxvGl3*rhbtXtxm8KP zWsaS!SZBGJINa@~=eQdRr?nQ+^W5p{E9bix(F@&b>qOKQ5B_2|z1W?;;<1zd#XYFv zU*TTl^5T$pwR=#VuA+^2t-GNzyl4=I?HfsJCB4qg2ACV%gF1n$+=IRD7l8ZQ+}anF zZ%Oz&qI^fxk1BV#^?qd1c8&D1#o0UEY=?<DQwX1+oWRb#!|yKlx*KjL4abHTg}*1E z?+FK)&uSK1k8KjoA^=be2({h}#+qAQ2I=)sG}qkWA7CE&16Yy(qPYA>=)>;t9-{0a zp`TE|9vz067M#zx!~Z49e+gU80<H2h^x^cNy(H4d(`Vf2%bw4=)0REy^X~9^ejv1- zCqvZQ2A-ek!tU|1fx(v4)TJ{PPhWSdeRLpn3J;C{wi_nyYS&O_@9(%_%B}_Ayq$f& zejn?pAM4>m6qYcW%NJu`_?QXH8AR0^AG_(N?vycMP8k!uo@P}n$meeQd4^c*a2<h? zK-~l3jl8mvzsFOAA4lErHW1p#lhCO=^rEkg_tWtGKOk}6x(758^b7Yuulqp|j31D@ z2Hs+|y^5l|7r2|TW5&)I&Ekw^X-2bYMzai-fSED77o_?LfvorJCQl0d26#Lr2&Z_k z2Z|d#IH8qJ^WcQmv<V(n^64JB-lH#9?w}hy`r_nHdWuI|x`dg^Mvt~o30?6tPm?%s zbrFAU4_F49JWbM|`XbZQ)zkrChMwtZGPCVZn|NmHoefn0IIcbT1w)V9%;(^`(fN!B z#=e7JE%eya)sz>rlqT0x0AHfVouQ_@l<|VG*TUQ7daQbmCL6QO#m@`d)QRO4Dhu>V zjbImqZPk;U$>-n>scSTxYg2@mK<M>4)>$gnjXJ~hCXE)h?=3pk*?bP>cWVmkHk}&1 z)1!VY$AaDEX^4eSTyi4U8l!i!@Fr8_XnKzd%8}pDdl@(oX{7ftXfP6{4|v!j1NMlA zJn8-EVNZI0dd!nlXQ@wkQiIKt9vBIds``K0147j(Sgp2mQK(+@Xe+@5cwDspy#_8B zE^}eu@@5N@uNOV^6_2)s?ysKkIlOWXU&Q4+57V@Mk3KESdVnyUPX<87rtyPte^n4( z_s{`PYLYPM2^S=lb9v~IkSBfJqiQ1MJbo~AK946syIKjyKIDlzJ#?o>oupSm7=440 z0sCsjV9rd;>TiPdmIv3lOmBN|9ZG%&9<K@JcRlnime551;Tcq?9_kzy_r?u|Un0s& zI337FZQu!Cz(dGj=p`6-E<iQ%fhT++uUrTmUBnYMm-<i(!TMn5tA6C^N0|QG(_|S8 zUChJ0UZ%S|O>!Liz~@GBzfjpgX#%|f$gBh=803)j!MK4iJrD>r$yq2wUkwRHx?gyj zOfc@5noI+^cYuQU1_ZB3z9aQfL)1QMe2YvqnL}GpMSka51huFyIKZUp=e_ht4;zM{ z{<nKz6gn4zenz=C9_K6*annY&X3%ZSrkk?$t&`b+646o4(NWIHrswM@7a&R#P9AFk z<#HY6@@#rVc6i#X9m=#P@yqly_GS7i2vVluri5$o45TdVVOz5eqoq4#vs{g2n|VSk zN3so}r<3sge0Y*F$s2xvS03QK;R2<=tFF|0)i0Ue@G51MH+&zj+{bGVJX(qUwaP$4 zJzuG9QQ9eJ9f|JFw)k9hgH+iajj*GYK()dj%q%vEs@r%KX`YVsKOCpz>WVa<h=<ce z<DEU-&Cz(44lU?G{~vb9uUn5Z>pAaxYEQ<YKAA4BIQN=pB9rPko#d*Hcu!YXXLlmn zf@jS*(A`gp72keNWm9=MM6ZQ8k+`!blb!{=iZHLPvxcj;l<Sj>Y}wI8u1H&3=h~I* zumJXhepfu&7G;MSX`V36UER@M%)}POBZjIXJ?L^S(hL;hv8GsCEV0fw5Kc>zrMWKC zUM-D@NE7o3;nV>g5&cxOL_6Zqqg!K%XimnPhU00}4wtBmuZYCsP%$mz_X$bm6m5yI zQ)!(#kcw$dw6|f6ICVgaaiv`H)h}C$;pWCzJ3A7{(%2qBPP^ky9Y|4wmW2v$PB?Wy zi^*wBRp0{j-^EJnF#@YQH18OV=!MLdF!-=EVnL4Xj&wP7K#Q?KL3G~~;~HB#yJNpc z?;dSxv#sa^?$_DVU-Tnt#L89mwYiPG*f`CZ_y-OvC^|5{afAl;4x4NQWOVM9t#+6U zjB%C2<Euy940~GWFUuDXW<jscCnZRstv423yDW-r6c-YmT{g|-A`&r0;?3ImJ^K=G zia?{qI-)B&<1zjG9_^ST-8G*(vt}1Wy0eG24uqMSpgE)6jxqR-8s5)T;jsK^JYZpU zZ|URrl?|15S7U2tfQ9+Mi$&X7Wc8$w#a81$1mCdvjYJz6&<^wvYD1y9V@!-fsGeTJ z6qglxm>RV>Ff0X#Upx{Acuqko{c8V6=~oZw2S)12!zR&{m3|D=ez2e(@_L8O!qwQD z8K71A>ftMEcp^xD_L%VXs+~40c7~2+Ef9;N>Ko$nEYsugFei<Tg*vb-H3G%R@ahI* z7ze5!D)fPgah66r>|h~8N^Oy*Xj|&Q%&fFAu&BgmOC!4fQ~oCCeM_yTDmCE(=;hhN zoH&{~Ajxn5`2XQCPR5ZcGIr>d(Zp~kKiC#l)>k%GEv{U?sCtx!fW{i$eAs8S#Wou& zYJ8;Lr4P^}_rDazh&1$}d}JCa44^T*9@PeWBr!SyP?$cdd8PIvCeZ4Ufd#{&t8pW< ztP4M4j7!6qgAvR*do*rGxm~Iu?uX2XwWk|3BeRmi7?Fl<{)|i`g#k3OhcS+dhfOsM zqJCu8*pMMN_dZtFtkIL}Xd}z_zNmO+7jqQ5vNak_OdUQ|Dn9K<9qh2ym19o{84cfg z6IutbudZCWsu~@0E~}{@1r-mVV%DeX40`H_n8x8-R)){KNKY9NJ$1U)@N%FVwPV0w zrxh{>q`KK_TUAr9TP*GrRM`U~1B_MT^4jIq=7{#@h^^@W&AmePLT_pB0qu{5oK<Z+ z)F`TJX?Dgcyz7Syr0CY;dG<BSSFEaMXYb_n#G`ew=2kXoXp40<bw;{d%sRIwRk4ms zSyYY9%xoX&{7uu!s=C^xOVjW*3rusGT2sr;a%E}EHMNb^b#=9M;|=UsCyUqp#3EDb zi9Geyzo~CzT<06u2-S3S_2_PTb5c=hezFhB#2*^1m&EX!tcFh>k}NGsKM6>8NI821 z#o3vF7KygZ%WQ2IjNk3dAFpQ7j~l_#cVw6w?tMlddEsxDS1zlmGV6-WtZO5)Znl~A z5yF)!jeg7oh~Y}TzpMV>=kBi<L->}p$%ae!^S&(B!MaKQ!s<}vs-^Xf%c?6^uBxkE z*to1_dE?PF3+oqWdYRAL2azGU(+CdhN`B(787!_w7qQd!Qwoiet-57RRGT?DdOFxi zxtbSy{Y}k_?`>y(YrEV%T|*``Vp~*6nA!3Kh?A{L?UPF((5k`pon2Blb4srT)Zq)v znG%W4c83<WfW0wChnjom$Vr*rfYXm8wxC<-rFf<~biNaM;)&E$ERKGmz56NtK83Iv z*1H)pWv(y}9AS7+V>O4l)>yo@r<;Y$+)t(k=4b~mTTqWNvBguGmconHK29W=_CCB) z&rD-&N{yE0s5YEU9;sNVj^Io?CZ)EcZQXc%p0FAx?^Ub=FnuI9YwH@RvB7E#Dzis5 zq=xoHo8}U~u5)c%>_+#*s(5G<K66J;JC-Y+hm7iNowlyP&W9X5%b|iYJa+nN15lZ% z0mH?7*w*Ntj*EgB=b~pE3ZS}S&paSUJ)?S*(~%`cKjV-Bvu+)G;;o%)Lu&plxLDcQ zJ@SzRIWS#_z<{`*2kNgw8~Cy^xfg1dRpSX+Fs+P3gQM;1hM=m95P8+|BbV16y<9(d z+^WvdR>4qfhTPdP^Hz4)R4mbxh*}vFOfGn(eSf1tCO=O0TALce=8Pq^f$qd(x=|P+ zYuG~W{<=SND19`TTx}^o>8VriY-uZ{jy9OTsqgHB^(f5s+T3Xf3t5P*e(|bh3mWU| zDyxokWQ_F1`(Y#lc|4Y)roA0nU0WE_iW3-HPs%h(OzZ&V->8q@+TsS&Iq3z6b*p{e zy12Hk=9t>$^_5G_tE=nkYpN=jjy2zmQUu4CDAUHl6HFLGo){h~f%3ben{^|Q-7Xc< z!pp{(!BDek!7oTRf_ZfKFCnq7sWhqsa^I*9$n{*0OIsdMeUFz1z35w9EDieM7APrm z)Zmn`E{YDnA<vqHAV@Xrn1LERW>gCwdRmIMCSt1rHLz0s@Zhc)nn((GD=LEMI^0_! zm6Z8Qf>LR)Jm8i50bhAg3RYBj;a=+V2SmUN*lIfBU79&=*R&EFLWmbA1xm}MfWORF zZe9@UXh9sdj;oCaCRL~;U#YL8Lh=QDCFN47x19OpW=_EWA9rsaA4QS=k9SpfPtBc4 z2;qi+G2zrClT&cz9FA4+c2#EFNk}_c31M@f?0$AP+;S)&mm)~O0}#1E!~+pj!~>ax z!vj%Kyih6cTfWaz)iXUI1o!j(zFxmSevs;Vy6UOx>8hums-AvVaei^OUXYhlkgFBt z=H%*mMNlkcTL3Ht1^)aZ4UwYL&b=$?iX8(2kHA%F7`-dU^~SY@h8F>K4jDo**#e^3 z4{h}$5I0n#Ai0_H&<p%nN2phJp&gWS*{zjT6WLI4*v(koUr>PH*oC=J-8_F@UT*5S z_VN%Ax(G4Mv-67d{KDKkgoVz@DR3uFK_Gy<;sULxxG0~QI~Ka%UsRagcBFu2hH1G* z9DIcm6r;%|RYJ-jC@4JMw4tvVA1*~O=^S```MJe~dAh$i59pl2qMQO9`ci(eJ+`v| zf|^iXRXGlianr^@7jfb~k}N^@18X59E-FIt=jG)i@^)bkG#N3v^RtVJ^Yom&!kj|P zy11~zdG>b^Qa&eJD=L8QRZsv`gN79gi9u%2v9fau5nR0xx?MrGA2Q6(2KM5d!U9Ca z&MTI1+geRkZ5g7e=jLlgg+<W6FfS*D_BO&}tIH6HI~(!5iwm-SXYc-N#RZ7eUQ~pj z=sCr?(6MrIi`%uhs|;=P=Ry1PiVAW;3JB|6kXHbe^XC^LUVL6YB6Q~$<|Dp&Q2{h8 zHydHZixKWSuMqL#L4LVK2>G7p*JTBB@hRvqsQlSb*`k6%4F#^}W+M=~Kc_Gco_{uq zrvQc`)Sw_g4-x1=(z&_$Igq0t1P8*)^<y&;Oh2#4kFfsv`8hcV#a>+Ky2aXZ0HNj- z7ixvY{z7|9wIny&Jv|#my!nBCEu6w>o?D)9#EL8NfWYCP)&ijW+;Ocoe%!6COg(=s zEE#S!53Wr!!%$N|4>#?;i8lG3(=`TGeC6ZBXimajYqH^)MNYJ#L>|>0Gyh&&S<~0F zJo?6L2pP(T+)+BVc1)Q#A62^zGO&*~OVPzdfScv=jVB)ZCyuwa8A8YFB7~KX1Id)v zs1wVoZI_GvKRT|ml_=$EeC2{Et3W2zP7x-Kk#xi-skA1D?C}-<xd7SE1>T-t=r8Uj z@Yq?JGtHfrmv%{8Vjr0{R<BK)&}M@D_Vy$JkNscm|K0vS?Z>B0A!+xJw3Vdo9chzk z+EQv?LG2IGv<=jjLa1(cxf8M1iH)=;or#+h6Kq|zG0nkr7t=kABr)PeuytL4t&=oH z+Az|Vk#>x<XQTro9U1AwNM}a6Fp|zlS4O%qaseY5j9kb_CL>vlbZ4XoBRv`E#Yk^P z`Y;m1Ue^Woy3Nn@d`1fpb)EG^uywt^g|V&=5diDMn0+|2k6`vcGu!3NaRt+_WcpQ% zT+Qs)F#TGlU&r(tnEn^0-^BErnI2^NUzuLQNGa3DFd~rFbx8F$=DdxOaZDf2NEOqo z9W{jMb%c>ggteOt^i&DA-hKi2_kmjmZUtc-R)PO8@T~^7mavZN3A1g0@Qo0@i3qfB zeG9m);I@I=4(@S?-vRy;;C2#$L#;mr?rF&58Sr<3dlu;3ggKuBdJoWhfqow77l3{d z+)LnIhWl5bOcRh@Hv!po6Odgu0onD#z<b03W$*YF!e@g!2JRhj$HBb|?ma{#hx&g2 zJf8u5$^>aY4el#&-+)7)_V2)bZvnOw1Z@8q+;5Psj<QaOEIy604%5NE8{AxQ3&1U; z%)Us1ws*cC{4+#=w0C*H0%+G)QI`H7xQ8k0_y}d%Y6x2c{#x)K1-DKjws%Fu_KlQz zmQm*11pa2=-wI*d;eH2Y?VbR7C%7kpHc{I<J_G)<aQ{5`FMxXy+{@rzp^l@JI^LkF z<4vkL-U9k<sxmvY#SV4Qe*nKuqO8-qB#OEnWw;c4l>H+R_9VDx;U4N>UysiKXeiGP zawPAn%zZ)yxgt)v&YT~rtkX$wAA$QA!ao7`sX7Evm=$L$MNtYBrBAU!oPGXO*H6g{ z0M&O?T|eT?yB_Wb-KZ#eqrrs~C2$MG1;Qe(4C4$%>3b{kSHRtsl|WrNjR4sf(Z!v8 zX9)UELC-{b&@7|}%@*_=LEj~K?nWf=d2qRLK8D`75JLltkPa*s+)D)ay&`<62)|#@ z%LV-a(!qM9gAWS+hXns4NawAAjPo9aOW$>(E{|cT^Hm6NzKNF;M4`^SykAJ&hvXzt zoWBEC-&JH1tvf@=LnJVR)=j0<83@dxb$8O4K=$oBkJinmbEx86LKUUtUJCi{B3tO> zWfX~Rv<`_q<Z(%i+-3T^O@E*CYhRN79j}_<ubKV<^zjkRC$Cd_kT%dLZKQGXkVPJ* zHlo<$w@0j)V;1?2MIN`vcP;Wgi+tZAPgvv!^g~Kc(vPf=k1g^O`Y9#KXX1Lw3jW+8 zzp%(JE%LNQa*O=RBEPoCZ!Gd#i~P<azlR#qAL&W@6aCo={ly}GwaDKr@^_0oW08~8 zI5}B`e5a@<=~VS2(ZcTWsA(40bc>u}kuxoFmPO9C$T=2yw?)pi$oc9$Dp3|#b#UVk zo}m^O#aR|v+>0%8iACOPk@rDH<bHLTidihT!XL266&6`<kt;27l|?>ikq=qq!xp*P zBG*{tT8n(tBG*~uV-~sIA~#s%MvL5Jk((`YizTtGqOsZWsBIS4c8h!*5~x#D>_Ai1 z9grv<^Mpv>Eq=e#ih9Z-pSH+nEOM7c?zYJ1@F`4Dr;3bw#)J1*9D6PDd5e6(B44z~ zeHQtWMeeuAmo4%YQDo=%{i~LkUK3I2@u&k<s@E;@phY%_1R0iovZ4-I<Y9|EVv$EJ z@(qi8(<0xp$hR%>m_@#0k;g6aJ&Sx_{R~FVDfM$Pe!fuYm+EP?e}ArmUj0h_TKz_) z->ToK&#K?Y$VY(uLDjxhcaopgU)3MgpVVK}-x7m38Tz|=CNboTScr-tzp8cGO$m3C zw4rCz+bG^l)~0BZTCPqtsRimZ&C(zm`Ivk{9Com*4w5KoAdQ6H+D$_L>LUg!9f++< ze`S!{P1rvWs@dMYztY#~B#s9JO0)BjKxuaQWT^Y5fyxEc;~kCI#z{j<6_4ftgL@h& zRotZ2Vc@-lq^3#U)}#6>S1Kg!?}$g-#w!EcK1>E8F!oJ@lnjB3J&<&8L6plyIvyb< zik)`qeDfeBlXTfk5O6v@U8d{WuT)`JR=1;2NI!BxYZ;y~1)-GH3p2AG0iqY_o*~0~ zyaAbcX{Vl*gOrO%uLq$q`J{I{Y$+jq-W1r%7yYM1QOU(`Nhs`#2P!@EoLpE1zb&Ai z3#LK^x{<<GGQ*;J0l!_02;iO6OZxWfDrI<Sri}kn2PwtNra-cE(*GTT_}2qcWbD9H z=?^*%)pC%*z56SD6f)$05MVm+7NlrThF%~mH*5w}u8<5LjnLd9I>}Q0JPp#h$mRbj zRWx$N#e<ZdWaP~Ql?$n7ROLXWk9y@*S0~95uDPYZlBbYs^Gg*Qz3%$WP~Fz*l{ft5 zU4q!#H`YN}K629}0pNVIN7i}tdl2a)!K?Z!H!37F6|t(-TmBlZLCExyV+1j)OaC%Z z=}5*56S<d7hp@K9cpn<sm)v?nK$1uPD&op-N08~i)j=jnYVK`gCm|%XS~0HjPH0yF z8GotZ`uhh0CA?}n#I`}PSJ${@18O@<e?l@eovP&a4-f<$Bz{L*88PugDDG17kB+kP z|7;_>&;MK~{eS(bzfz)*f1ecS?Em?Q^jCt2U40!yE3g()G=|{P3JH)w8bKgxb&x_R z?N3#Osu~##17@(IBuyq$$W$_oOeZr)40w7Dxr^LQ@W7NI@Elxje=`W`LnK7;C+)rM z0{K@D*l3uZCSLj`39<lFdI+#-NZR2mA3sSBX7i6p$d12%@0}cQkg%P9B5<K8aeMBk z!1E1aAp7`C8ggYuTznx7xw9f}zLbVM=@EgA?9GaJ5ehjeE0V-Nr6FHd#K$LVq2!D+ zkz_tY3#DX5Quwc0s8v>^6`!PsQnMnd{3kusIxEte|E`D9vLb1GgDuo1Gt!1{wT0Sd zMcVRDZJ~C(-H~?uOIxUYR-`@u*%s=M9_hdj+e01GBOUo}N2pVV66wTWaD+N%MLP4Z z9HB1hkuLmuheT(7${Fek3|;xh&QLcXy76aRp$j0-3-}&aC?hM9!QXI)F3gNv$lq~? zGP5F?{5yfK{38ivWk$02FC^3*5nYX*k?shL+{?V_#eYK?!9#R=l0Y`kP!Qv8YJxv% zl)62aK=6wcpH4sJMauV6f%%w<AMCwMhayn40DgQ8q?QR%dz}U^3S6Z0;0F=>SXUv3 z;gG|d6u-efe41RQyiNJr6k(pH9p=YqRD3HezI*QNUMIc-?md9NLm~2A8q7AbjhtX^ zG>}USe?7t*W0me9kmFZooxY;{8>myhkuU1>E!63IdN8Wz^B>>=X2Jvfi3SUd0tuJ= zv!J8leEus978->z^fy6c=$TmcCy9@1<8TQ;<2Sxr#n<M1vKlPLpg=JRTmsBf)S(Em z3{|@VYF4kxn$@fPK^1D!kFQokmqsI(^0fl}S$@L1PSDZtWqiG$vcmm+h)J+nHEXaH zGqq#y&4f(%AvW`V0rs5HeS<(>!ACf7nokF^yU~4`L~C|?x&ill$bG^r4S9hu2G=4w zTZU3A0GxsILg4%kIe#!Yy(Z_746-tT*%j*^_aHX%LM@nVBqRKCta~igWP_J#e3=%- zSn(*9YeV@87(7uJJM}PjGGXkj(#+O9h~UW{>>gJ_4tvcU_G*ab9My;Nmrao6S2bBR z#2Yvu=qMse4d(~7M5!H$<$FYcIme`isLlM8)`HY}8NE<yNwMZFLd@YMda#wz3W9xD zxk?CLuFJ|T*ZB%Pim{@3^-#-IdZ<+tRKbIw3Nk?ztkDsgTELI5)kEzwVX&{$&6+)? z2mc)SGZ5?b;N^kKf!L@AuLzFp-Fd`F61al&;F}PJI5}3E16Z4bdT^963K5r8)$Q4V z9sh`q*t$osMo0A1<nQDSoxi1rMnxl|_%S_rm2s8C8a^&)<Lb#re3!uOdm^XwR){5V zLeK~eE@7}f(1U|8Bru2oH-1@nQg8&WQ6?YZpXd#UnEY7$JAM2hXt5j#pXs5C8zL9; zQ+nvStjKlzOKj5h!Rw9djT=T>FPnAR1ca8&nv1x>^KHS_Mr#CwMj?-e;3YOG<RvzK zpDl{9LdZ*PL-{gWsC5+d>vCHtEfe(X3Y#g>dYdWHl{QnN588x8(_<2S$R;tRWzo-J z(R*#dHbxu7l*Xb*K=6LE=>0bS3KR{oqUcwl=mVh2qoB%P2UVU4syrGix=|L?EmqJW zn?#V71;sFQ+ZpW;LmCUJf#9`vS<qU9&JA6c3G&)zk1iHE&&{{nLFetThuTG9s(8XK zd(SR==z?@m^SkY#4pEpg_Snq|?6sS1f8K7keV<)aDI->;R}nn6U93t7e#<|$2Rj-a z5o{WVZaWD6!mQF4c77UWqbSTq9Mg5c5tIT9KViCG?7<F3hxBy_#Ly9AG9YG_17hYl zP?JN97+Z+l|Cef^IL=f{kZD=^I^<pNzz!)vre*0{9kTST4!+$Hx+)sEia(CvrCnm_ z4q>_@j$kLF6T(Z!p4c%n-7yD0?ucTncw+B5hVu7eE{(!edIF}>OqfbPbeIDB$RWhj zJtm%yv7oN8f*x=}LG@1j`VDcWV+B3plm$KF<ZGN!j1>i~bq?k0oS`mJn4=$a%5UE{ zIL(4KIYmJ|V+C!-@8d4Of_g%ZuVF#2JLCG69~884Q?>XSGU~+dq)~PmC?rgA)U3l% zCw~*{fGC&&Z#hHmOfX%J#mamK%eXLB#?M&BuL))RCd;^4mhroQ(Zn(`V`WTr$ug$8 z_;gpOTNEse87^7IOqW^4EJUNr!ZMPvi@UIkyF|XD5hxn7LQ8C|nblesU+0oj+-Uxo zOCmu_VSj>YKXV~EAR<4buvepI<7QIs;$OSu`1r{cA0I!vV0`@Q5@!a)z9Wxf9$+=# zL;1}$l%D~!C<?=+&K=6g1gmJeJJc>6hSQyHX>rYRn~j<6Hiyp~w>f;~y2WF=DE8PE zx#OBF6w_pj5ss}_tQi~K(2ULQ;4Q{2(2U-(;8!sCH8-N=LU5m0@aGu(r5nFQh2V>@ z(bqumw{F?yZ{7TRcNAkq5BtGAl>Y=KT@*~ZpTVTd1e5O9Sml3<)%lF9b9SuGbqMlx zu?i(_MT2)X0=M1eIXEPY?epNnSe%kd6h7Y*`ctrEM2Qml6JH?0gQZ5PF(zEb7s*>N zr@$IoEN(Kx247-QxAJ>UD#Gs*)WL8$g2Rchzw!HJ^4pBtjIrSgzRZjm$CsN_C0`*~ zMj9iH@%VLWpo)Sjw*sq!HAamHTqy$4li1p;JOW!AqaKt|;N4-|VNB!?d4m5i{vo0s z7E!(T5&nor;8$bdY8kkn@HL*`{}}%x0w47R|AoPUe}U{CL)m4c>>koUcAHUlTS0dJ z2H9=*Acm0ux7;Bs3MO#)KL|}HmI_aMf~iKTI3Q$~j0YnjTu1nBk6a?`^#s$5G{NwK zWPk}SJc;mq9=T?C*%NGQv`x7T=N-ua(@-2G0-lB($gg>%Xr~GE?E~^|GMNUVKIoCF zjYbawwTikPPJEU}J#snomIpug6;(MV<3W9frx1SJBNrd<dxGgkx?uP~GJx6(PbK`M zN3KRb@gS6eVE9ZjfW;S{M)>C*xj;JY!OxLJ6~2-T(5>Ogf8&vBlkYvj3?n0E_Xpb> z?I++j(+Dev))QJJzsPhj>x8EhAAXAcn+$>R9=@2L@dRg(tjvG_Nu1=BOQ6YKxxAX@ z4Z01t_`ZLJS0n<JiYhN~C$i7<%5~oyZ*V3FUTRz#m}%k}^1HmDei#zz$LESzJO?En zJI@;uC!<7$^7#num7~EJ9tC}6u^0Nvz21XEW+6tvQg3KB3C<zL91@vL`2F6{T_kun zG43Xjy9i(I4b3H?c_f1d=M!T-S=IA!WFCpyNn|eJ4`8;rI&*t|P$6FlI(HATfGSRt z4~g=S_cS?42znn8x)!{TiMj>6Pl&b^yibY#rkAhwB8ub!Z1GwzE~GFczRug&h|nO5 zNbfI5U=aaRdLiMDVQ3BperX2g@bwtBSa5PPa53Q<Fm#Cs{n`v&Lii>jX3Q9}3EYci zZt+I(ekJCy5&<x_dK(~eC8l19AQ(HmaEo{K8HyK8_$Rz2`h1LeN<K7!T9l!cXo01K z#_x2z3*3)I?DYnh5n~xV9Yh~^!5dsof|nbY2bLo|31SVrEP@0ou?Xac5+AuhfII9B zT?z~8OZkz+=Pja+dPBn?Y8ax^iPGgFN+e%FC}L5(<t?#^(92q3inpQrl-Qv297{}r ziz$(@ndqHZqTvuB(jAA61?h(Jck%iAaV8yzCYu)#C1B0`D^Wi6A|~BXV`%kZe##qi zWkp>4b0McdJ$AY;Ad4vE@TFI7ZU}_BJj^KzCmDfIcZMKB-S^%oCX3^H9E=WGNeCjQ z<s<vWz&>B#tWBlL{3O00NtzKpxipLh9wemhA>z{z=ldaq7cHQwTn4Ta$?l}ex}?)& zCMD~V`1&Miuxv;Qb!z~lVq=mtDmEvXQ`r^-r7Ki5w<n4gz%xk*OL>~irphyr$s9`1 zyNlA@NqkQdm;zUWxSmf!Eg(dA@w&wmj`A0hLgp<@{Vydo3b4nQlbX)wuO>AJ43pQA zn$PReBsA4U7SoByvLPuHy9e{(5afxgox@2@P3)sdp}z{Qhe_nG{Eej0E#mGG61j!H zi7hMAK{n%|VaK6i-4Az%Roi^3ya#Q%hmsEv#!e(yEqluFm9Vs}J<LClp=%IN=44WE zEx{{>JZkpAdj3(9fHj1FoD>bLMf|c)u-xL9)$tV~>3x%A9y)c2rg>7{MbqF+{EW2w zC^>_Nq}8n>cubl&3vC%y&Lr_kcybvr9wP@+aez(sNia=ggD5n-k?^U&5!^(KO+=(d zXt>S9*c^wl!&A>B=IIQ~i)Mzm5I)mq1<w+6R(LDnb9@J}xFOqcpx*7ng-ZH5>%0n_ z4pUa37Dg~GV>`)&Ic>f#<dJvA<0RtYi+w?_;T4J6A%xr#UpzLrgBbAlggD6ypXGgK z92OLQ9Q3qLZvQR!`HJF4upJdAu<=z8mkDtX`hq(Nf5;bniWpCc1L`n!;Auif>?B0( zWLNoW-%#=f2=GC=lRQZ%9;dyFD9;jwt|LlcT*U9gj=o-ig{?z?BoOv`-)XX$l8s<f z`r`6D!Z-UG<nd-(d<~f>qisGIt-Db`kDpsWI6R&@ccXg>2%jGOX<yJ|c$$ghnV2{r z62-C0yw3tLKj&*cWcDEVSwCVL{jUqyI%vu3J|6W&@z8LDev|OkZqL2g<TqkGZ}|Az zzNkcI+nRDa9+Kk=K2MD2CHP-^tffG5iw5=*1bYp>h<LBYK4Mz>@A-!E4^R{@p(sxJ z#B|Zm=oh|>e<W`}QOaGSPkf<aab*j-{8L}(QmL^)=L-P0KVb!LfcpIqtKSc>>h+<0 zktOYmUwkl!1RlU9{qB>d#u=Y9HKrs-1N$*zYBFjDY1GEFg8)#w%&xmVOK`}|O14g> z*ej6Yp{!ZSd`_~Q#^O)XWw<7!yo<<K&rvcj`83%>>3s0^Qgv}MVyub!V}tSJoB7G{ z_F=PERv+aHlEI9TjqJx4CWF-ym%vcIBpEtYKO6wbAYyq%yu|9PEWR{39kY$2o$~vW z8%FFUOw^YzgEqo!j7@tWxlv|PFEXi5%w#2G0u?bcc@;)aa-)^WgH|SwpnUpc7s8E( zb;+jq*Cq4y7&AbF!4ig;EdosJ4mnh|fFSl$vLl&qi^=|p<lr508IYAZ;tmx!`Of5q zsBtkEicdmu4WhJN$qfkJDyH^lA?X2u=Y$0f#2(NE3VI<{g%^_fzGUbDnPv}o3E2k4 z*j|gVy_U>hPh>lYY=bEwuD^;m4NoHaWAIAj%4`Y#m@SVv$PS(&#wqYVC&uUC2{^{= z;FrYs61>yII1Sz>#P}rU#o=~3b&7n9LrEg;+{7f}4x-}Jjw`RZSbUao@qnr-`C*el z-GP7o+QvBKhZ~nz95cwEOGXc_EUm>K`BtZg$Bjw9rcC^jxO#L&X(Wtr7^AP4m>y>t zU0qc=TKouc{Mc{}{s?mP_^L|$;b-;eSSh1xs%ppGCOE_51B2?)s`BwQ{=RVrQH{Rw zYFreq*2`<kDynr6)UBoJT20fCT^nCp9r<Hqfb<r#3y&FtKXH%YYnV6%om=ED1+FRq ztb@PJ#-#GAs+JSTAHzcH#7A9C`P!Y841cICKgeiV0A{fRVo)Xa;rL_Rn#!saD|IZW z<!Y6i9I@}%TV#~+Eeo)`dPv3inu(6`m?&)32)0vpL5nG>%J3^cY(vYr)>I0bl=o?o zCHCD#;$v`HA~^5Y7XP32`O!`L{OH6!FFxYP%k~#CQ;wQHr?6P_7ZzpPV?9U9%`5Wj zvg76Y{dvsnvs!LWb}=(0rTGi|IgWVW&~gh33N(LqZlOK)q_x~4f3edNz6M$4I;`Q8 zQ=DDk)JYn(JKChQCGAOjx4l(bipmJpbQ`l1M>|F|Ms=pz8Fex0X4K0_QU}6lYvxE} zjy8<8V`?WyH_B*tMtd>ZhtZ1}&0*A!Kij26%yEh15(-Os3OWgoDAt{IOtE>8^3^e- zJ5uYC6=z#TaexV+b-?h>z(Knx#G!Wu3R1c+pc$DLW{GPLaqTIty~Xt+am^OjTyf14 z*L-m;6xU*L?MvF|4xM<3i}Z(ViIOxxu@k}uC@w;M0~C#@$paLXXek2}O7vC(6eqEz z4p4N$+yfLw?5zhVHsVMdpg4#V)Ucbh84R8aT0>M#J(!Izrzy0c-B&8_2{w2yd>z|6 zM1ph#RU(A<5wE5}x|zU`gA)o<a=1U5F1G*jvWD@3AThuMQeo~Y%mm|I#q3gnyB}ot zCo8ARhKe_}n%)ND2FaWT@gYGL4KR{%W}`f8R?}NU^azYjRz~p4MdpSbU#Y5QzE?rM z*94tG*TE4k5^&<$juD7Ug1Emx+)bFqaLW^8H9ZA_Z-L;j49-y2;TuR*)$~gs#z2To ztP0F#9Z7^oWPM;oQ{IrFxUrFcgGP?U#0?oF;DPzG0-Nc?B0Z2p735um(f9_ELbk&o za3b1JH6r7Qr%5{bC;unj``RHY;J-v>hCM1|`0s{c{GSc;YmPL?3bsCW<_xa`iHKL1 z@R&NlB(3tSU|U3U&c+K&v=NkIhL~T!scw#F7oS(-Xm*oyU*e}>$ngJwWY<-GD&GV` zYk0-@v1O=<#8(bVpZ^X}&Qvn?F%U3hOnHrKY-Kg*IPvM1qZ|<~Fw`3s-&lj{G`|!! zKRb1zN=JsuDz^Y72>>I0+hhXg2w(#7^+F;{kAP*Xtitaw#8*oKq$@=R$}fXQ83sak z$RP3Aunh6YkiRs!yHVbm8C+LgRy_p8_2;sQ?Mtw3WkMCkzR8IJzEzoDtPQW0^%oyB zA?AZU_Vtyo1ln6$F)sdjr@K7iOE=%ypT4z(((+${wIOKMxiQ)Vd|Qh7ZJeyopvu~D zHA!aB)s?r4`(_Xm4kXS30cth;+96lmGGy@ZYi}7iWa#jbBZrS1+Rb`~!%a#csEmUa zo8PZ_L^fAel|w^nCMLyD1%?e6Ir#D+S0|m7Y3CL)jAdrA4;eYQV{>Ncb0%x+vxkfr zSSblf##PsZ$CZ{j#+nbK+U%(y712}ETX-lUH~etv|BrxBriI$d!jX%Av1wt;C4K_h zt;J8p<1O#ek|3LX0(x<aoag?|v{RF&3_q(a?c)_jkvEY+dXrjT9-dfPTNA7H*mB6F zBQS^$+3-vHa#WA<gIy7s8qfG#&v&>$A;GHluq0MylvP!MHW8h!rd;URgv95@?duW` zjeV0QHPFb)nsTE&rZzDC>ay{u)XmDLC05?5cGo72z801w*OrfO(rOfoS$rk(Tpy!j zilNh4{cd1+O+|S8;HvQL;xpU?xeU%~HUP`w3N`+`!J=&bA+Wh<aGLW=Mt;s8FTp$# zBQXJ|(N`LVPB7-mI7&#fPcqe!;gJ_MtL1rM8zsKv`MxwwmLC@5*M{a~ac-Q(>}JKD z51tTaD6uAt!A62Frq-mmn!dU$TwOU%A9d}pAy;>7F8Jn1kF9PgYc{>vt4z)3Diw2u zpwIUJKS0307!yT=-`I=KuUkVY&8N=)DjP@{$4+hDiUgcB6Z5fU9>~d!pSHrdnNSY> zqH8nG#8_m{ZN`y+trCZZX<{`sLm5gHTMQ%1%EnwF5pd9?lE6R7F_2i8U8J27UpXZJ z*_;JegW1vBZ>Lp}I08;85HfQ_x-kcgOQ=eyJQgRgN<6XRgaL$)q;`CaJ5W_wff}5d z=)+P?#um0X>hVMQ+N$cxst!=v5HqJyRaZ0t2tstDcw^$AI;~;_OLIe_{QzgeZ7UNV z$h6JG)ay$Sk1$Dko#%0!E%rp5AyOHGOiILU{olYRB?18@PY73)hb3^#IZ={K+|q96 zsjZm+2bXA>tx}krPNN(|UWJG>uoNFFqS7kIjv3Y*|1}kYuRj|o)?Fn(`xVV$<7z7~ zCniR)QAsAY03_-iTUmNr*_fD=oz`>je0DFe_ByaXWJr9QbAPKoxbpUKw}-37oD00R zImB&KC@5XDqXpodj<=jgEw=pa{6**OJmZY=Tj7CNP(7LdP1`bZyiFzKl|uyd>1`F^ zs@v=(CgH{%5QG;gudJ<Z-89Wb0s_0*C$wIf_>A0yztIE3ufFD5t-7r2wj`KhYpwyp z<Y*PMHxt4<a=xq{kMLzxZL6&q2n5UCG=keDL<GX+W1-nGlsHf{@${aUDiZU30*<Qy zuaa<9NII%w!=TkU#7IjcB%)Qo{7=Rq+AaB;Ko_|591kNAGU@zcKMN_WIY5|8sv*&x z+e*#QeD>*Z3w~~2SzR`!d7K4-nlc9L7|3g29LTu3_j!6!v#K-&-ZIe%<c6~iBsXwq zwXGCC<_E792R<oB5H4XY4xA{k1g)ikTL6KW_(}pcz!`(W8&K0aJXWmf(MH6k2#A1c zx0oPId(IIz0X?@0?OR!eB~&LjYoiNvM+`U5BlqvjV)~q?@y$i0UlR$#3V3K$czgsE zakVZQ>%cxBED2h2E4kGfYw-YyG%FH$suFXGWBwu5n*CNYKe<DhWPwaehywvZ764Uh z7d1i<VCe1`(EEQ=dx5y1)|QXK2L;BSJqC^H!a4Zb%F7W(*ePkmm2e7NVX*^|bw1r6 zzAX;2+5~Ym6=P6i4;VK_PL0(WIWCO7T552Cdna-2Oej0MQC@|!{8&i<A1j$CwKyW0 zq190~ri*~%$3B6Wc8RM6c?dxwfL;^4ycUtaljV$&uzTPL8_@eM2PNf@0s&(`*{CWj zOSIu}>v_BjY{J+w+h;At<UWrDq1hCoE)8mRZDru>{M?DM#HVycczjFnLver^X5zlZ z@ZT`3DUABrQ2A$rSdUFy8hT?<a<$Z|$qGZ-Y)wH01>m6h#=<SpL(9g9&JY2ik43?Q z@a(1Gsxm=fzr=>vG2O_rJ8IaV>#n|f$jECkTQMfYNOH?s$$boRhkj)x^j;Gc_SUk> z3OXi2@3;dk4p@tiDWhX<r(^DLlw4z0fKHr9BN4O}uqt%SL|e%qtO2d6Vqj`u1yE7J zFmRR(i`7#XZSV63oxN$7Cbyq&a3nS&sR_zghQD3nMu3bnw*nmT2}c6q{XZhAnLvx) z>ZWFrsRzg6`ndYGrm$;jxTHEsXrnk@UUf?I#`{c&c5`|gJF(p@Ese1hGyiz>*oiJw zf@bmf7RON?H~bR!JS42TE@0TYpGVeB8ekXf0*q1wUpKzbA16(yn=?{AW=t8r1+2LE zJPFUWQprAFLFZbev_8jTAtOh=?Su&i)X{$hcS@^n&uG5nZk~0T85Y}0Hp{!PrL;}> zNLAa4IMN@?6A2p0f4*_kLYhR_z=V0Z`BFA<Ygw$JV=5K|1lsMQ77eg-uGDcgBD9Q8 zZiikTTQO9-(J+nej>4+73YST6PfIFV0(?u@af&0K+N#861sgf!hFh*4b%Q6S7e%(M zqzQLTVp!9Y1aewzPD|FGJqE_q&f5JAG{t!I{JCtRKxLMw$$uVl<1K?n-7qp$z88Q< zv`1rzYyxc4dBv#ft{Eb@(j=F7TnT*5AC!FaGCW=hdv&DTsDa$=Vxokmip^+IhdwPf z6KvHnI5#Brl~%HYG}*-Wip}!Cs6p3VbIYjfu1#sa{gw!q<-oZ|NTvB=77?(jDkoYM zPiek+;}|qx<e(v!Up{2;IY1WAw>~!avfSm>R{p7pUE19Au6C9T!38gJv`&nNQG<H8 z3|9GPJ%L_-H0ly~y&~Yc@#bxhKS~<sJPZ8PQC<zrhM8&%bUUytM~zFwF7;v0l8;29 zez(4@Y@isdMZXdZsPTAd&B6fFC((0Rs48>{CZ<zpr6*<wE&QzqUx02!0SZB53> z`6}C#^WqlEIQPh6kbF?(m@<28)Y|2oSX*uza?PLtR}NvNHC1DAT$M(`RmiD>4K?KI zcCn!&Uh*Z5gg$>zgQglF_YcQrvjWb78O?4nhZdf^dhLLLsplH`Eo=94_N@5NK3Z-= zi%PQZf03lc*MLnX2<PA-0|s3?{Q3dc4oPm-ji^!KJ6lt_VwU&F%G(oBL}N&mO^}WM zm*~Zw1U)%?Wa0m|k!GzspYLU4Mo#<)nl>%G%MlCB>%^AA7>S9j*Hnc|%UXqNAYyz? zdQD~e?YJ`lM4kawY}uHL($jCOtWB>7PfQ;NtH1PcI<yqlAn8rslBP$@X-m9kaa6~C z!;^aUh95>>l~9`8-$=K3(*LiD6)WZBW>W~B)q@6}y~JF3c}fxyyYv4SkHM0&qdaDj zr{Q!KU%bQ(^_)N06lk78Yzm3xQ9S66_C=a<i<-pI&;RS1G*8hS8@Bf!O;U->N!Et0 z39l~A1p!Cd>a55=LzwOAAy<sLeu#Z+rQAD^KcH-5^@k>kCHK60uIEg0-rvym`R@>m zV?T7u&o8hCYR8E}w1VuyLcJhAH?KhV7Z><*^t?QOaj{;I=P&Z>IYqg7`Kjl!-}Ss) ze?fs>kmJuru-u&7Y`riiJ16^mNW(dKP=KCaQ0&ju3;e|bxi~vFU-xGhLFsvU1%>%~ zZg!y`(Q6?#j^L|_)2Z_EvJ12Ie1C3szMfND<S)|wIoX9pkZW#!p<b9>kYB9l=NIP| z>N)=WqGE)W&CWwKUr1GuQ;68bIXV73tq2;c=N9MZLGy~UArUmUph!og;ar4OhC~I0 zc?AU)7&1Of6Z0MND=se53*b@=W%_dw3%NKyN6*PGC@9qP3yZLv+~ORlV?l92j#i9t z%msNx*?zqsw<sUsk_&T+Oo-W>q9R1o&CY|^+`{~#e60xnAr@^RqR8eJ6=}uUAm9AF z;(QPvB!s%<<P{aiF^zL_igW#lGULxrL{d%w+LcJWIRyo|P<DaeU!XyAv$f*f0?6Et z=)lFfMa5bX)J4zF$@fEj{8)Tpj^8f;ZT*F9T6m`ivH5<4WX{bg*06KgW4rJF*D$rs z5pUgb>BHnIPKZfBVvWDkb(LHC%~PH@<s_G%J<FyvX@uA+@s>CFQ5U`|ZE^^TC<v0_ zZ@<okiff`fpC24IzNv)+s3}rzYzZLw&qmJmU|q&TLj2iO^~L{8PkbMHN%}w2#k6rr zy2Q_wQ>UcU|CRo)IJU2NI*98lVRYMA+rxts0d-r%($(@|gkK_{ZEa~uX~}8nZAn_s zHp%Tt`@;4`?Tg!A(!Ou|e(f)9|EKnsweN2qU>|57WFKrFVh`Ad+K1VP+eg^{Y`@%o zg?*%bl>JKkRragx*VwPs|6;$fZJ~V*v2P%0J4xCzB<&rNc8b{RY1%V1t%0U}Ow(qn zY0s(lw^aKls(t}cnZwx>5w~6Y4jnsn?vmcM+XWdHW@dG7MX0Jb;p)+oXhdJ43dCGH zBMwHKjJTNUW~zs2UZ(q)n!?mnrnY8k8dKXaRe<KI?HTRBXeXw2X0|Sjc4b;Ore45k z22(F&ER(S;rgmrc9!wQjxmq8lUc^*^m8<43lFQUQ#_|~{=s=k5dZymsxPdbDCZ^uZ z=x9d}=nzx?%G46ZN|`!_sRmPTWh}z%<xKq>Q^zt=;TQ*O{Sp0^)G&1dQ}4hZ|MvPP zWB<d{e=+uN#{R?9X@s%q;ARk}-bq;JnLy7XtoLl7?*jU62%igX9?<g%qxS&40O*B; zX^RQ#buZlC2W~02`@t;(w;bF9;8p<NTH<(=P{#@am01U2k3raa!us66$VMPHf!hpj z3q)-Ne;X9B9q7jiyXZ-%##7*)ChX!}5cVv%-EjXL@a+M)>;<0Zfqntpix9UD{FlJr z5B|&GzXJZNggGXGs{{8MxC7u`2X_$Squ@7yn+$FxI4H}}2yP8D>j<PhN*H+q+yH+- zfWMo-`xe~4O<4AEpx*`eAvFIa_#c7$7~Cg><$MPI=fL*`_+NrM4g6n$`x@vUf&VA) ze*yO^xJSYL2JUxobs(Ba;3k8cN||j2_;-Sv32qkL&jEKgWppvz-v@3fWxemGj4h)q z4eHC5Q`YkV%5qmw)@dbW*{dM#L2wU&dzi8gP(Rxvl(kz;S?60>hcytqmNM;8@Yhk+ z^)bkLJ!HE9{EfiA3EXDt*aDrNZ3VXt+;(t}L$N!6?+I`_;r>bBdkP%%8WnwLlK*MS z9J|2H1-Ag)z2Ke&w;SAZ;P!x<2W~I8=fS-I?nQ8GLG1IvzX#k@p!b2l1l&vD_Jf-S zZaTP|nd4>fUI8}+*ggQa2<TVAEd=)(WqFO1*$+b%kAOQ0^c?GOX$Z$lH0QP%4n zppQcn-Uas_xc4Fa1o$6-{~_da65L1N4pEl>304Kl`II`I0+Dq17M~0>`8x>z9^5zJ zz6SR?<ogTo{|52DgLvyyR&b}v+RRd!I!AR>LhxOnN$!T*aWJG*M($Br{sOpN2=pTG z7lQ+3L+%A1Q&qw!0&fMldX;G_!CwXLA#k(7Jq+#<l`$w(T?_s?mGycI+y-!)prp-^ z{Z`=F23c+g_c(+<0rxw>e;WK}RaUqg{5|0If_om^3&8gx_)Ed<2looxzY6{VXiOCR z2Dono|FFus9)UU?1^Nw@wFalYsj?!dcG25FA5$Igsvv~-RMzKxxIY2z1C?F$k;;lc z2KqB_r$8ki0temF@j3Wkfcp}{q3@{BM|yn)_523hci?_dnf)h-`vv@8!T$~1@8Hfr zT%E?$>6+uH3io$uj6vHN@H3DD17!!v8Hk19h=wc~WXV803>8<9F^~v@9M~~%&@J?L zHD-HHbG)l*EdPCtWuE}|fyT5CwPO6_K~emQ((5|#Zc#{~zpO4y3j5tw7gjDC5BHZ< z12wP~sDZa*%w-edzVIK4Qn-k~r5-Okh(h|!B!|f4m4p`h{l`e%7IK&<g`6n1!o_4J z@%uNxbqcNfhKzfZtRUZ#?+7Tz%LdLQvuRx;nMS8m`*C3N`)2}UzYXL7okg8a0;0Ql z9-U9`p$q6jx`=9p7?1xC(z>VUqvUmZfRMrk^fNm75LHENzb|OrNqUNYPL*D#sX_~T zUB+qMWCX?(x&HuJQ<bP+({HE@`6(fU^jblGrFDlWDO^d<P|@beYTYCi{CVh8QOJF2 z-4t~k>DO<$TDMeH3LjKK1_M{Cb+dtS1zoR-99GbclGsak#E2&)v4B1$iFNdu81t@J z$i5iyQY`A_Sn}6m#Ospie9-jYG5ymjNP>abQJNb_udmfQuA->!6oT)Z5cO@#QQw~x zg?0EbR`W?35ZHJAI$5Jrw3BqIHcg9@Gc58>i=1hZvn+D9Mb5FvyDf6AMb5Lx`Pw}i zS)eVnLKa!%VvAg2k@s5UeHOXYBJa1zWtjbP?Ex!fg+<m|<VuTNWswhB<U<zuuth#% zk*h6ojYY1t$VV-5okc!ok?SpTgGFw%$W0cxS=*u!Wvdmi%_6s3<l`2(!y=!s$ekAX zq(weukxyIXGZwkaBA*2b)8*O%knwIS^f`;%W089;@_CDV!6IL@$bA<1l11*f$d~1# zeZ>lS)goVmNOie(0P6LM_PTb^iiye&mr&ORi)^&WLl$}1B9B<)QHy-TBHy&gw=BuL zMdG1vTMX}5<Z<m2N<StaX(zRhW8_wg{KO(ZwaCwaJf)G(wJ)?Up*Nh?xJJLyzR|wc z?)Vn&@AyuGq5Zw~gZ3lb{iOY@X_)F)?RV`LZ7TguJ7bk!r;~Z=d=(ZEzf&?ieSnfp z=-o7|v>|H$0ZM10y+8*j7ZLplI!Ix}b_Sxr`ma;NN)KXx6XMc|V-nmI5T~cV;wLI~ zxhKQ@g~anB#P%Ux1oCZ7lAZ&v74h8zUKf%)1z6l9rF?*rL|UbmDxGL*>(79{8%a9` zB{@i&*-%m{Y3nvKZ8sHC<dgQ(z{?PL#3H!kWD-`qq|>GSmCF>;c|By&i*(6D2;TJV zbf7{>*A-A=3h6eWzcNrE7yNmE(w1aQhg^K*!W+U$dy<(sK*=RpPXM=#cJDDmMGWDd zcdCe~-0Ka<usiAPHH+&r6M{3zMNY^JR%WRe`}!;WV2;byq@VLB@Lx=F4}#a5_>V!J zc9NGYB58iXr~yhl0<&&dNhU>9CMnJspyZHCW<kat(pQy%{fY-D7m!OAkp3{YlRs^O z?0S;RY%-tz16Y4$CCrMc1B*%(oemnDBqN3dW~&I7JhVrDWhPAM!*ukCN`}vY+_T7t zto}+bh5Y#tWY?8k{xnFqBe~)(h$|!`2bC&LI_k>1;m$>_nhRbUxf<jbAOkf*l)?S! zZ&V?K6hVI(tSFvquD$O18~$?RO*fAYhHfcV5WFw78Px7h1c3$L<K0KUV*Ggo%4Pg+ z8lqVdia@z)Rz&6Z(~y=G(GVzC&rl*d|BQxgSrHrmk%m~%9&{Lv5q1(`{7yCG?A<Ej z<oBx~7jU}x1~udc!p--nArBB9enbs<f$;KARf(ZBO_TUkFKVIWtVl9{Q2^M!L_#UO zJ4RCY%S3|izDh!=P*!WBHI|ji50FqAVqX|-BWe6~5^5)I+DF>)C<%4QAdwEdfrL6{ zut-OKm;^iFrL)o5=)#W>#JS=}NfzQm8QlV%v>yBoWO+lfT)^KX2vo)2YQpk1vb-%> zF674uVqNifny?%<frmZb9w5gl2&y}c2D6N;#VIi2(}(dH6d_wB2rqtkX!OJnJXJ_= z1ti#l3APCqqc_4rxDgft?lKgkr_pCZN@qpk+iCD3<09i?gm$WrMGA(T`eA$r4dxoT z62n*4;()-*4J!vIKZy9ac|1x(`I(V?-bjN5fdZumKO`V~F+o2_@U1Ene5>;B5yrNN z|EOXcB)aHN2!VTvaf#74P)vI8UsN-XUlFy|ra?=v3q6eZtE)A{OqzgrV7<rjHR8_r zQ}0T?R?ASXqr><*5rm(cYO2Ru4Cyv&2>Ec?5iEbRh9IX~HAuTvi;9HXL_&z?k88pH z4T1hpgB=L`Y9~-|5@hf`7W{z#e#Ng+u}$qD_)|@`=~IoL(n15GkpcX3Oy@)fKQR1c zGW?|RUo@+=ziLfd`#WOP4&rApsS6)-S4cV?@mlZHgM*F1>8%h|cqY&X1A~Eo79ya! zb(_cg434k4x&#ACuj_@-UKvWM&gbg~hYSJvEzpAjBaq@F3SXp$0$Gs&U#tfO?pR<b zN!bng-m3?P8^b50tVM{BI-)GqPm@W6+z;MlLLUHc3Q_C9n@Y6RI$x>>NA#{Eff1zk zFuxyfCW)IP`~itb3$@_&`h_nMgy~wTBZii7h3IsAm3fCT59*C2T6iRXSPzbB#2Oe^ z21X&Yp57R^N{QAt)K^109@T?a2d^=%DbX`h1J}~P)ue~Os#_1?5CXRddpi^%WU)Qn zA!?HzygqnCh7$aX@s|wZb|?yB+f)mPUI?lV+&}}@L%J;}MGroy2_VE>I(Cs851%GW zh_XlLyFq|AfdKdD!JCbnA%gGKL!*O1BN!RY_v^us5sD+M++y5<v;%2T==wO&b4=0_ zpXg;h^w(h62uJ?PU%}G7y3^yW*P!@=x&Y^rfG+R^HR!ITI$msW$H3XaIZl(6L}`F$ zv5Jsm;5|s_aqu336%cq26YU%D9wGX-;H@UM@4&l(eGk_)#QuZM8+54zst@x<J(>YC zt)dL&M}Q<7vC7@B$|Xh#+^>X@Uz$LVsTYqfyis8G@}qk6ImqRh9xOA;f`(zN1h(oU z{5Yuc>Z1sG<Um;9Ta8;|3Mbl7kGDo-(*yy@_o2+;q~5q25@4R6=)QD;EF8r&$)=Jr z%kPt+tecR$=FA!XxhOM3*%*_5Bhtu^aKYu#KsgbxKBx7e{A=CPbJfu4zR`n!GyaC6 z<=^Uvc8CJz-|5)Jf@6)bfeKPx%J}!P<^rWm)LFDpBGD?<)und+gC3P(r4Ih19vp|4 zp}|U{5_=&c75*gi6x|(j^<kTTmVv-l!s;=U|Du<$5_^dwFb?$muX<>_=<E=%GDCs> z9vRPn$BvSuYu?s(+MuJ%u*HzJo*-m~4Ux9~jzC-8D^$E_Wh6tX(8bk;0Sqs8aqmFp zUKP$Vl2zeC`mzeQiO>bTYKD!^gcM>VR$-oejt!I5R;c`LlhXJ-$Pyd>6^t*C_fiE^ z*!d#7hhBr&TM3=Wx*b!G87@XP(VrkjU5P>Wi887y9DJEsjX<?Bp~A%<u;J(UO%b%} zfh7wf5h809&|_VTQ|<-<KWsagq3C6NjSVwEI8b8(2=aDB=d}4oo7s?9HjmjtcLXQK z*hWmGkvsT$TNxcog8u*l;XV=FlW(vgAkc_^r~=w^qb>CBtjNFlCR^}7f&YMx*lf!j zhBeu03xZ(k5D91-1o0i%5UCO?ocsx_r&IQb@JQck93sz(x~E(LRevrf{44Rf@IAKR zDC7s{7J6|n#)GCopiGPaB?+Fr9xklD76(vp5-}!`T6|0|0y9b$oF=6Ea#NYUg5^4P zSC^4qAn?~L3DcNp4kk$WDdbiYMjTdpLh_$rFdjCe+z2OnMCAIMnd=+k86Y5=`2^mw zh03sdgKCBWjI1lMi<j|tL^?BnW@^;MQe_^u1t*ihWR&T9F}7jqN%AfEh1Arpp-<60 zw5E0^tkmAoYHHn6h+_9EQ;EX-$~2;Aeq}mQRKGHVD6W3WokY>WM4m+y8+fyc;_Rj1 zxnyv27g6ZnmAi@JzD$`*6bA(PR4^Z^Va$Cb5WTk$<s;i^a+r{hZ2VIj!eP!sn5I*< z;Cv$WYG6Jhh<#xbkf}Hqowi9Ul-q*$kl+GhEFgh<kmoB~XaNZ>B*sD#SwQ%=w%{Vf zzl2tPhtS{2c9`6E<K+Ic4d<oB<Zyc35)zvnaEd=o-XqGdP@(q;nZ{0&6R?5<?*pRF z1@9oy<}v=OEx1^Wv)=EKz`cY7788Pb@!xFG#VHp<1<%-m_mL6z5k&;ov1nF!DdCe? z6jFrmCwwx)<S<nPmSJ0GFc|Eg;$X+x@R_V(vCy@%*ib%)1(y?JIcW$yATakB&IEie zdZ2mdF>~rE)qMrn^%t_>3KA{RdhUj3)Dev_Wr4()hQ<b?_d`a{#=r_<>%kW>oF@1^ ztg%FIz5C1=1mtw^r7RjX>QS=<R$`g=GQ2I(+nj)|xr~7zQ*?*Ny9NchgP|Z-ky4gk z_aG^?pC;cBWe13A9Kq|Ogrc{CsOWu5H1xhBI(pv|+tV`cW$=C=>>%UMum&v4-45}; zSa21IHUu653B$xJ3h`YC5qnwiVKU-jkS+%C=UEBs{j-qk3oKf~0*_#&UuHNc_$v(C z-hgfAuQI6|V<Dw01FI43Q{x99i+E^w4UAI=FxC>$Bp!viB=D#J%fnd(jk7cOumbDw z;Wa{7225a51(j%l#}MH05T;p=X%3^nS~1Pz?GN%g!LZXe66FN6c^W0?O{eq(<0n~g zBjPkh1Dgm5ZU%od_*;mvg)|&&9I=tu5Q*RJ^0qpa3>lqbIAfJMvJrXHeo9P84!k(= z;=+p?FCM&jadJw+iw`f!V&X~>*H+@1Dz2@?HBC-vZKT&0y{)98ot)a*gEy_B1Lo2Z zFP$*^&KS3ZRCGaq8>vXgz^-`dhL;QQk|E~AGSYz4Y9mgoB^u7FB|6TlB{rN_OBhb9 zCH4yFMsulh3S@IL!RtIq(VI_I^zNY=dJCwI-a=|aZxLmu82?H<;;is?!oOi+4qZaU z9O~fT%KLley_0{>gfd6xs1H7lNQ|J<UHk_YSMrXPI3+-+oBzUu;!fhfO2Wr~lSDF~ z40eD-YOJnE<x}tuY?$hb)_kg6PQGb;Hc*)pDmwBxlIX<e+C?$6w!*{bN!o^K=G*0z zVxmSmQE%h?^#rj{B>!#vdje$U`&@(3y2y@ml>nYzjHG=*4bBvHey_~6BbIibNu$je zn-0<Lf=7xEmEUid&y_E?qe21J)<)08Vpa7(Jmh*M+>_U18J$v|q_FP5s>ZqDnrigK zj>8|sh@Dtq`@l}nqmb`In5>OBMkWoLAY$7XPZDGRvI9a~u7Tnnu}j=eSW~C8f%`R> zmk0?wO>oL@gNlx?$KX^WHSmlK<Qqf*`1HfO2;XE!D)_7@CGae05TO*dp1a0v`8G`5 zRxTsA+k?9?UE6>J@w7KhfjNR4p1`c06K%xmV|?H_qKcuyciMw{h_OeuaW8u9Ajwm* ziULG)Yf2&Fd16TW^j4_ucG)3DRQGuzQ@lWgdAmC?A{|2cUXc+d4L?cv^D^5aqbU3$ zs6cU-8Qw?ui%52uAb^+m*@G_;<0WF&6<e@BmWvzKi?7H`_7h`2*@_*l4FY_=YL@_! zaTIV|lZpIZvjeZF)P4}|E2!vRw+CNEC`nO%;5F2ZQM+kf;a*6CC;|*D-e{NmAqR+Y zfPj^S>+nPNxS{3chh=v~=GuzR{7Af}A~T0D)jHSuTE(n0%x<O3Ze?xYbu9X5EDfl_ zu^v%g;2=c!{()yu$oyM_)q{AerY+stw56MxeO~^4OTFfV*=w?J;nlR)oII=7WRO4< ztMv)y)j*5}@g$6%ILtw-e2T%1#AuXb0rksg7<7mjhhjm={FFUb)8IA?1>HW@Yd+ET zBeoF@p6cgveBwzwU)Y0(i75q8{$mlwH#u+^r>8Ha07M4$sDe&ovewdcZOu8}rOCTA z{*_&9Wmr~f#|bHahy1@YRaM{!QBb%2VE5gG25*T2*A%5rY4ZMLkFN%flGt+KXS=x^ z_}Ly`4*X(ITn_wd7wWYm|IIGe1)c0pzCftD#j$MwvjH0J3naIe0W7v<fSM3(-{iM{ zKEtOtM8cF?6~%WonmBhl<RcY21!pck(}A+Z`yRfo$TG(vMARjwcKBTm`GniZCp-)D z>;h^kISOXcbcc8>!We7490Klf$c?FvMBxh^sEyEjmS89<B)&)lns(M3*f$oNl}g-k z6eTZl$mO4m5Hl>l7Yl3?H|>*+WKf_R@h~1__86Ypimv>Aq`ii>wxSzfhP2yo*H&D> zmm}>mT(uP$`~gSsO#)Y;tKPx}cE#0Cy0Hf7ZuNYH11%{L{Wb<&Aonb;5Z7a5CAJ6> z3S)}b$C%T_A~eI?-w@X|Cht3vH}EF*#D|3#a9rc0z1k5xPE0MEHsUy;!^kwxBF{2U zO>M@zM9J_gV4f4d^1fVaoPf24U-<x5A%0wUwCSaMNR%{)I7yTX{K`i}>FQTL7E6^+ zh?3M#`IIOgzw#MTynf{rQQB=K%I8E$-$rna(*82#3$eKQQZ8st6Q#3X;Y8`?SH6P9 zi(mPgD9Qa4uyDI9A<DNz=`c|Fjwr2x_j_3A_>~`s(zciKBT-Tz=qFh9_?4fDk|GyJ zt-yl?Q^$VFFR+~2K#2M)tcLn2zrnJqpA*kZ?$l3dt?C}{V6gADi_>$SqRMs$n$ZNk z*C|Es08zI)_zuy*z&=K;#-9*(jbMHX?Y9%p%}HaLx7A`Dx8WSI?TsiUyTp#g84};$ z0Gm(4pc~N=!;KG{xqoqpD!Ux~IqVuFSVxUIx;140O#FKt)~4(8jwYL~FFJygs4<C( zLD~uDkbMqFia7-8C^06};1p`W-&AViMDKSD<*#CYJR{68V;T*d0c#)Y$6u3UkQ&n| zF1MqO;0zj=LGfrOtQ5t)rqt0e!VXJD6_>y(t6`~r)FFY&@1#(vH)EYr3(TbEqEhTL zCGA68Ye#%n<0uhKxU7EH;k)YW{gL+_391Y^r7}C=FqPQ}M_ieG;7C+vCmp5^Q~4*3 zgxw$;|I87bMFX?2Nv9m4m&kQW<R!vCcLZlsYf&M`5Z(u7Q&_fr;V}0AY;q64mxqgD zlnAV0Tj6ZP9l<$N2qdxL{Upc6KtB?gL)9MqTZfoXaYx`gM|?-%2S;q#jL_TsmzZqt zqQ+fRNcXoy>7H=}?>>K7cVk&ooWZ#?D=-(6Omhw;E9iFmG_9$%&7(Lz=Tn8AA<8{e z0mB~m4Qzi`7E(pOQCUP44Teq|m3h1?3H0XqPTbWMr)_`-YxR><neRMJPEms1=aiy% zkf;m5TSB#kPF%q2i(mqA#+J((U+9dl4oY>t$cYPTo6nD`e~Dl#vB~#1XocPz55Zl} z=)4lWKD?MhsuCM4v~4A}60P+Mp!Js`=yO|@dc3tz(G^Zy9QQhmTmH&QCtu|Z_7eLB zUsADe(2GDMf6y6SEY6g9*lAg`hxsGUDDZ{%f>Lxwv(TQy!>vsFcCFL2Z=;rR`<OEd zE5vrX>ha!>V%j2(q=J&SIB~^EwmA7V$iXx}5f}V%XG40c3_LH#3BggcFTtd30OPy? z&2s2mV9}x(iUWOToJZK8PdlRxXnpR2ETz>b5bB?G!d=ud3ZHXIqcCb(gnLjx?KR!o z>IdAQ-{(ZdbQJ3O6{Y)}a>*Inaz$07BaNG8xH1GqWlvn^;)2v=tt(HHuc@*R8v6|; z`<#5gQ|^+bcENW9a3go0U9sKg_{K9T8fR=%UA$iq@whcE4xT*Vl*>5E4?3-_M^Hyj z(d%=KTri*;ow3c_!%jKEC&U+9Fx2H@>+jeie#9v@ZqFo~3n18WgZrq{+F}(-Q*7}$ ztu<i<<8PbwvHO-`Z$0i53%~$w@;eiDJ6-&Jr`YYprL0Trc7EWLL)lmY`qaihM0Rt~ zqBaR!OR)hT%M5cM!&A;g6OZvPoWAy`6&r<xr%AQQox)UOo$Q*Z+gQ7_9K~uBpF!)t zz|i>4DO-te6ux(w3QRXQF@JPQb&=W)_w${>d#Q0RmD2ykyc>oGq}@l2`+%x*HC@|J zay4DsPj-oRVxv$iI_vAPT~l!>pbaCd)Gg{xwWihubH3{`Whqr`VxG3gEsFa=8R5(R zWfXTYsS37*+6yOd)(=&a{&!_LMMFVa1szoA&L^-t&vM1O^N*CyawWb$z>Xd3%;Nn4 z_U>43&Z-cPwCVc;t545zi9S8c#pk#Z`t)6{^Y-bvuEduLDxc>{e5s)E1um;Ig93y* ze7gwUVzDdsb`dufmblE93Rhs<y;uPqI}7yrr7qd$8DHi)Z=bjG<*t_d`~$9Y^!a+s zQLe$@0k3o=i~vxiE;#~RzMVJ%9>&a_;#`f@O_Hr~HQD`N>k{KZkMI7kbBXy6m*0=c zE~CpA04kcmT0Q2mK}ImKPlRpVBum5LvCWk@Je>S-*ExpAPL~)SP8=Rs@v$yBJY44D zl(y~*!(*4r8XnKO%;8}-hsSfs$A*!w)ydjS+>i&`(k3?KRnc=@&~sybR&KT@^jux^ zT&L){_P^uKJ@YG5grR#{^xuvYri@Eb8@t4ObwpTx`=HbPOv!#1-|spY9r6H$$?6Dy z+0}ry-#T1%04qM?hPqyOiX?99mp~>B@l3)>gNq-6#Cj?}BKp*XluPh+_+&!faPc=? z&1b_S{4H05I0J>h?J}ph1~J9equuZho>15sUoQ8-y;N}$;UrZ#;o={<<T1i0U7-ae ziktr*xy&Cse2j^@=q``<MFy$9aK%pei0%2K5dqdOZejN-wWrs0E_I|&D|L#jzi{DJ z_Coh*GDW3}z?-V7%fOqaYRkc!uIdkfH$%1Ubz{5OOKudN{be^l?ZPb?vEwCHXg0&P zSX#W?HI#qjLNQK;v7q8x+{u$;FK79;A||+s8ms755uAj<-?`*3GNO1Yl(0#DZ~>E8 zPOhRP@F1FyKSIvGx}<S_4N7{p>iFHo&*1rtI6K$5rKt|B6UVhpmiG@)2;fuQ!Qv7p zSn-QvFPBT4l6{?7@oDa%e5PBTl03&9l`kpog21_MJkeX+&WGEDZm4DT5xxlghiUau zexEz|2sIv|5ZnrN%2Ic5HQoeP<5OMc78|BulP!0P7vI80tH)R0V3|GO7E50dmhkQ~ zF(CF9-3x-wAl3_I8(-;eDABwGRtOKd8!+z@t=^5+%){<b8APp&l=&JI#kUaE$R=6( zcw>AjzBu3P_U*u9ecbZ>8pbu0=o@i&0sNJdv6vFu<a$hi>)A*d-+GSvZ~K3#|D$d! z68lhh>;&uacAdE`9Ba?U$+3er`35&sXhL!>=#wYhA<3~a(!+<lLC>HlQt@DwUC^Qo z1**Fnc_KadUN`<q2}b~b!5z{YBRYS{-Fzpa)XraV2RqB3U1epC=&a&U;jg(%9I|hQ z*HC@{?n><8RQ|d<xR#bU0&DRRH@M?3?+&@;%e%wwvtHgEaW{E+_oiF^77KsjatwLX zCEIa4-ZS0q@OW3_l>4<?sGFns;vsebU-weh9bZLFQI)UVIDWqtgOmOQ-iuWI+0DOo zgMbh7@1avb*Ymo>VV+W4&~JYdjc))$ADexY|Litj4v8}Gh)>*ZNx2cX2=-9zcgS`h z)z7%`EFfE*=QP<x*(4AD9SXs<#Tj?T?|7zMod@q3pXABVYC)J&JhFv1;?VMlJsaSj z?h!jSz(2zy_G=);ogT4U18HV@LRmp(FkB@>viK~K#X(#W%=Vc2GPc7cR|R*S9enn# z(_E2-*f5^w!L6Wqo<`#>0xO&n%~(T9Z1sG;2M0i-@ir-8=iB_bNAN+iaEbj7H+~j) z5-Qbuz8ZX#8jsRICs@wnX<GL|LmQ!m%M;mx>!<;LkI~?IYOEK`cqr)xYHXmv71V&g zjWoE48k=ZlhLRcRr1#*f@W{}vn$6?A4_{b5>Pb}psO<IAWT~n=>cNh(4X%}RJ6!Kq z)g9n1Q?-2_{+I_l_~H~D-#mD-hVjiF*>h!gZHM7oFnpUwjs)mL+a)RV-wrdFKjDeu z%$adUXpamsxgOQtlb#Yy+HdP)8+s)$Gi{RZ>Yswx>LWh1jGy%c`=^T^(mm%1shJU# z@9_jT)4*m_{(G?kFL}%X+9ftXb^fxaL~p>c`3ew?;Vl$TFNLwG%dvUDgC{z4(_mKp z0oRRhcyL5@KFr_t$eH9A&Lm(FyyxNXobPFDrSLe8x9~V1R_%eumdfgFqa!*KEaZeI zYAKHo;AT5Dwo}j_A7UM&vWg#h<cJ%Azh{!Q0y%kbTE)5YacVqHw@S0&QxDvV8a_@* zR$vDv|Ge4I5Z1(((8bcBi*f8B7vQfN_hI{|hyy)4AHmsEnc~GhKxTXSbg!(M>;*Ht znZxjqQY|y0;UT56RTr8<Kf>?!HUyub2K<SJ&4t@o!{&J#qT!vC&-X$D8)O3)dPAbp zVBbb4U*g5-G``Or6|?Y@xM7B`UhebCN59k?fAq_}=8t~84S}bqf+v7yXw2h1gY9|P zD-AOIy~EKg?DNM-sh))!C-6`o_6jp^jThhCi*riXsOowzU*`=z4dQ=VntkiN!DmDT zamxX>=un8yP&xs6?<Q}Fwm4-j4gqgN%(`zdo+J}euEU;ll4{!^+ecOXaWCKI4eo+Q z?}BWx7W{E<<^)i6Pk3cl!}ncJdd(fhhbR~$7`w|`Vw1+kv)-X%GJD=@?LfZZZL$OT zk{7JiXHlrH;PILlYIcwJXOzQ1^SR2|VlhcH{-7>Qh~uDq-VH)3v{6V!J>(TX{W$Cu z`$$K;{EY<R9OZ9eiMz4HW8TKeu@T$|5||u&8__6?W-y~}lM=BV_wwT?ipH2I7=O=; zHe!57U-W>KzR<uE-m}K^5&ogKp@e~6#lCgY+mNB)sQ$>?&<OqO<Ai>73Pq5KTS8M% z`F#Z<$dcy$S6=>|7a!%pRw&q?ykI$cgQ}s53HNue{5AQcq@jFj5;X5Q%x!v7tcK!8 znR}?Q2kRKYHf>SKok{%8B-!h6opyxJPLgUf7tO?^(51b{WhlKX@mIlMK;E5X{d791 z$xo;8wGE`6pVWXuoG(lY_7~^5qTah-R3RlB!j~rnI|cVr1OA?;!566Uf}9W@!0@>C zd660~%J7wV=4KYExeX|b)#4yjki_aF{%DerL@Mq#JciBPht1s#p)b*ccnE7sTdd)^ zhk)pqTR>1d1b_Ov*!hUaF9!WNQ#=7Fo=!;dM<qN1{LdxDbYB<L3y@Z<FH)?e7=~%! zu?&)@uqKX;7m|Wo>De+9YWqbIbC%RZ%zhMGcU*Jf?^h1Qq;?>QH_F=J?_2TE)x?61 zBuO20G%2p5-oku(U_QMepLb*VyerOE75QK*Pe3a_#3!&HpTJ2>(-R-rWsv5xSenn0 z_~%LImX-X?!WT_z^Cf1}3yXdk6~Q;Le7;HI-@_AlnFe2>2K>EBQ*jFUF_!vCR6sp^ z|A)BufRCfN9>;gK-0t3;u1PxCa+7UYa*^$;DmEC&w$24NjDaNh&fH0NoPsPVI>})2 zO%TOkiUCs$CKQ`aOpOVI6iRx>CxM*=l8}TRf(JrE+86)do7uf0TO~g}|KCsc%}#mq z=FQugH)UtuyB_zX0PYu}+4QriUy9WW4)77@Kf}P|*ngY|VxWCdJdhLRP}r<Dm_1Ke z3Db*R%w)OD47aYJJ6(m64_gGi(!~S;>y%fyqK820974`qgIn`;IIDRbt8|0w1hX2b z;SDaF)$DcQtmZZso7LRzVzZiiTxf{3a1w)5+yYeWb>-$Tx4H6jnA?qLdWS2U%8DnL z#@yu^X&QseseLY-#-Lr+<0dHgyNn6S1K{DZ>_Jz-4CNuL?0jqnXG2{da~ZGiF&91P zV#{cA!AhTWW!V78VkTkC*IgrZDqIRZ4e*25I-kKJ7GM+k3>5L4S;TWL`aM@c3mMA4 zO8R}HER1kr#1CB2mqg@E<Ry`C{68}B{{-<bMEvIf{ufRBFS_WU3;S$tKJ&83y70@0 z0pG|Fyph8UgpYtnAp9Fwe)N0ARn*j9#d3TKl+%G1EX;EL;G(Y^<g%jyZ@8k(b=}$2 z*TlN6Z0bSr3=yTP3(qdT>Ef%BnK;*S#ZImQS^chy-y!<5E7zUhgQyyadLIk)TVRB_ zTEhD%%w+Cikq<H-x#&M!#(eNbF$MpRh|yn(sb7h;=JfnuCRr<RHT9B2u647lH@WG5 zT+v^PNF!1h`85io0k<Jh`B#jhS)dW+nT{RH4M8^B!*3ekWw|hr`T@bu7dza1Mu`)u z%iSzL1A##sziRB{QO1W21iI1<A%+pZZTtpVa5V>dMNGXS9%NfG*SI0XfL;+v^i?tS zsu=&RNUwEAe<!AXCn8_aG;Dr<hY66~?!m&HoZn-Uzrj6N8-GotH@l7Q@&|LmyvJQI zVZH?dkPk-vTiyBT@@;71G$6~4(!IFjwa;yS{r#Op_PKGpSwu(TyUj9xD8@lQcKH3U zh+EX=N8o*KdbgYH%(6FixhT+k-E31+r1x=;L>~YTtC=-rg_Sbkr4PFK5xZ0wuoa7- z4<i~Sx-_-)pr;0^{wRiJ7T&|QJ|E**<j5aI0dcr$h(Mp<xgJHU)(1WF0PG;o$7A*| zE<TCnKgu&dN(jsR4u0g~nXe?ND~-(G;F)<0&-@H#zLICY(#ZTUuDy8XU@CafGY1FZ z;;cAbeHOC@S<WEOn1R^uy4g8DiGH7BVCOgyC_b0|fJgmFO#Mj&BwmygZWNq($jIy1 z+JEYH)eip#{d0HpO|kBEiNn>sAw}MVg%y5Tei6}1dpx~>FY7k;x#dzsKg6jK=}QKC z*~>VLK%!?U0Q`!TAAL(qy#<XD2lQXNA%u~Uw?twfBiIk$2FhHxiT4Vl<Q*gcw`JV? zO`G2r@$mg?$eM$MA76tsqyI$?0*A4s(LZ1&OZ0KR^Zqy?@pnY}M|V*M_N@VW?CVAW z2nt=)bp^^N9`}sMC15FX{#~~@M`B+Y*rm3!aZcdodyu^Il%ni>-yJi<>H9@`6v;I^ z>Q<O77xh%^-ydRm>T#X*<6<&!h;SPRlz5ln3;BP#qwk85cTsfw+r5Gu6Tc;WS9(M2 zSN|*u>S0lMPZTT%iSQRukWaz$D9S0q`=TJ8#6F5o6^@F6bdnI%G``P1;6d3=C1JpW z=R^oTzDh)V>?9IC?jkZiJ|YS}rdkF(^b*gZY_%|imvZm|R*H)I+4BQ&e?m!E5^C#* zqB@6O>Hz@~GE3TNmb8<Xw3C;#lb5uUm$Z|Yw3C&z(?hQsv!uUbNmpY@VY8&`&62L? zC0)-;x}KMGJum5cUefifr0YHOhA~U}2ur#VORC2axB*JK)nkl|w|eMpp8Rn76;IJ{ zdI#Wc{TsgHJ288M2IJgrTs_?9!Ex^I#yEGMhd$uRM*l9R{thkW54axsmqZ@&(1$z_ znT`A%UJt<11D?Uu$71v!VhaBMQ!K;%<wrbx$;7S-(#JjK$LBKaV^4UD4IkGvxX6I) z{}Ro8g_7+k^*m8IC3_n2+^PpwSl#e20Pcgaoj&C;?uHnd22=kQQ+0Sl1Q%iKDD5{q zI2XW2LB3~3$;TFA&mm|2gPeH*InyW-Vo$Rh$p=XE1}S<<>J(q}Mk#fp<b#=4>N(<z z-Xx`Ng3!%U>SlQCA*nqOxtFB&!h>z$K%|t~18KXZ)Nb=pU{`xe`g)vWaKqaFtK<xS za<y*@b86q1?N8A#{n?UN47Vr;@hOad4!5@`6f2f1wy#*EfUZbMYN7hTVQQv}blaWC zX5{h8>#PiF*_u_$PGuG)mUVWto#$qe%h#W=bWJNyb7I=^?*0U`XV-QfCu!sQHEXb3 zM$*Ra&Q2)SQIG<>vgeYvC3}6N+BW5^UYuj~f_R4M=Tj5?2`D#XZ9`iYolJ#dfswSF z<upULd6BixDJOV^`PXfjGBfS6q2Zj7tbrbHDepvfIwzi}xVFyjuH*?U2aKwM(>JOL zPL5`CA*;|(ffDffo0=4VV=&;8L!qEw384N<xzQgEEB;U@;747Zir?Q@kIEYZjUmPF zgC?s4LiK*8B{S?(0zp(?$%s}0;XnZ61Azv^IHlCk(5M+Y`>MUQ-Z>M9NR&ya22Wz< zqa`cTf#*=AoB}+rDos`;rtwairb^RQiD|r(XQ@h!DlwIK(j?U~SCvlEYlteHBBM$i zRdBjoZnx7@wbNp?q6#A-+2PO7%_mgMW`?F+^TfIZ^A|GL$6P;i1I!IFH^kg9bL*Mg zz}!aWHZgY*a~CuBWachmZZj#Z&{csbCC!3UAXa;`;1-C@#vb+waRD!gHwzwtI0UO6 z(VgXl2wFsQmJ&k5i0D+|VU1Xw6@*AqL~`nc$d-u3=_EuU5#p2yu_zJ6Swe`aMpUPp z5KWHAP8%UQ)VUN5PdjA+Z8C4?svX>U)eh&x#5y%C9wnN17l}!AdRjV4tkUx&CfC{0 z@=;=!|43p=T}c|2^$z7)F=nZArY%Q_%ksDwQ|sJm^(gVEFN-m)t~9M3C1u*jVoa|q zPwPjCSKo`O9xBo(H;Jq%mUBLsK)=Bh2TT;c0VP!ubSH`EPL|M}BBMK1L3f(v8xmxA zRyvd&99kvO=cPjlIc=jaz*Aw`A`T@i=@R-qc&cd!{XQxe5H+G$0+8)uyyJhV94$qs z4CaUBsq&~d<)xR&_)QDHaN(CP{N}Z~ROJ@5i98)fk_ogTIx$+As`R0@2<G5ekS>K3 zJ_J<A$J>4`=<EygR=*70xrQAtHa@`LEZ<o6X@}?h6yt`lc3dW*Hy4nxcqB4FP}n=V z+PHN@2y<f|TBfhN2bF|c`+DPD+@^r7r!(G`T-n_T!Y*fD&9I-h>c6f1hzu<hy@rGt z-PD^QvPYGjYsaU)xPb7@qwos_D~e4y5DGTPf%-s`3_>v=`x`?+Ip7QX<UnIMBnN%L z;7EhVgpttOTQ6wq>~BvpIH@66uQJi9cs<_fOt89`U{#r5)tPKHRg6kbCSl#GT#7<g znW4`hk{~D`H+8E`x7)3b0aarvOEK13E_x?aOk{2)b0;x(GIOUecPewIF}G@_z@F8_ zVbd)FQMG2lDuAeJ7VH8MB^HuY7LvtgK?eybHw!iagc%Eg$OP$Df?8{!B97(Qvvmo? zm?S&67%Sys3}uU`$x8eK3$5n%?W;ka5pZ;|8l@RHHW?hd0#1pg8UW{^_L%vHvT2bn zI5e1+=)yxoX_@*^z$ny@^2I^}C|*<=MCqc@5Lep54Z~YNL^x55_|QSa@D7OM!r?W& zKsfX!7v_`+Z;YRB8f(iLiif|ARi=5Zksv=!=RbLj&fl9{JW{dHc$Mz+A--uW0!OT4 z&LDgaz_#^*EhdpVGi%oaa>8C+V9CxmW^o0;Xi^q?ztV;gWxaXGEv7BHIb-58A&ad5 z7TY%CqRxAw0$L1{r{gK2rLUq8MS*dkx-oGS08bnNNlV{?{{~G<Ur~kf2L8sbP#%_< zIIKJo9&Q?O;ka>ectb`{JP}4VQ(rJ{gnWi?TIealnECH87J)O1&PorOZmSwbC2uU5 zGjNj6Y`cZWL+o+6xar9PyKvl4Tv7Wr&4G;FzD-DTxEyu(J9&)ZuQ$1Q6p3LDch<Zq z^#Z$*a@g;$A7(jI4hI^7#nvljSV=UL6um?_911oS*wK`6$x(J9*2&?9hWcWodvZA3 z)L3XNQx5sVjX8TNa=0nvmxGPIaG|j-In>Y;${DnT^-#ER!blZ2<{rbw<Axw#>gX^c zmwM}PM3!oq#&6Xai)FjBM3tRRx2lvmz0L{FO6O$fG*zDNoZ+0M%C*ipsyt7%%y%wO zWuIP8RJlQwn^bwRDxa*%r>Js^Dlb#zR#jf1%Bxj*jVi5E<@NeHSWUpFO$13BPzBW? z5MB2SxI|r7D+XNU5SlpPBDy+h0Q~9{be&ZLQ;Dk21SpTL)(p6+Nm=>af!U-&UpU}G zY)-!jbC@u58=1R^xhFAq33Hp7yOg=hnHyp5O6IO&?y1aOyFp;j(@6C!T_qEUePW9M zi=E0AK_lX%7QsTK$t{9T<S8wJOq8iDf{j?FwFp+CR-sNnZF-AfhcUickYHUkqeW1N zZDxxg5j&eYIN8*pgjD0yp~T@BY3d-#$|M-OH}k2(X7I*va&Qit9K`vcFDvB`|3z3( zd<nmb;?CEAlCm(ZY?7?Zg2XEcB5(;;5_&a3pt*+)Fl{i~0_!W(wg!Jn9RTk(fOo?p zteos7^hTcLh>^uQlpSmlH3{-4W&wMRJbMZKN^t?UTmcpncs~O!7xoi+Pcg7P2dtXF z4;jD@5!^y61TM(|YbNj$40x*W1fd6ufgL$u-2{Hdp!pd>zf}zE$^l!EDLA8g!2o^% zm{Lt%AoP31OmQ=&%+VzJeSC8^vyh*#e6xk05c;#?LP~Rm*iGQ9QAn21p<-Zf4!9&g z%d3pmL}#UD`Ov{xUUhDk_q0?n%ge1c78cod04_k$zs@c9CJ(pQQwa5GW_L|v%<ghU zE-oq(<g}%i8Jkv^r3a<2`@CeAV@q$L0qT-1EX@d6wlJ8vqt&Fi_Bop_hHzvSrDu+s zpO?=@SGl7r)jeZWXhz<67IaNxjA*$6HV@}gel*L)T7ahBo;DaR8iO#5G&bQ_;*)WY zOAgligTvOJ#n!%Me^ao@T%=9*&X_<Xv;*N_g90-ELHOpElWl&L>yrpuyQ!)&Q=cg+ zD263LQ7k1piQNwCGoo7DAjwrr*+3~<y?Mooi4!WBJB7JZnLCZSRm`2v+-hRC=oX?A z#fn0cz>-WsamXGLti@o}Cfiy-Y${BiYD}KW#Eu(E7Nt;}x(mc9bmkCrlFxE+`dM6w zeHK?@pM}V?QLt`~i6~j4F$vdQv6zetuPrENB|{W%<y~|u?T(6B?41$(CfTzBrL6&S z0fLkY7tjl%5(kk0<clj%qh+r1E{>MqnJphW*m>=_&ilHW>%0kW*JPn#-^4IBX7=1A zxFc(TEGh>16y3I>J(=h~cX{683U9+1YrZg{e$<|AKrJpN2^y@{-rd%Zn=>jJbOF31 z;oV|DXO?a+D6{;yyw#xw|8%1^`I@wx9^|!2^mlYZW}`P3V8w3%XLa<Y&+6`Nx5JDq zf;O%(P(32^a5-eeu-=~AN#}8lcqm6Ta-%()-j+VHKxK=t^(k_;n!F&{*58+$GjbUQ zgb|zZ^mpVeW}e0E0G&K?=5x`i^Kke`cW(g)aoK5O1Z_z6c67JfnSW_-yzRVXpSHDw ze_xQ-#{1G}4qe(Bzrd2|Ph|R-;lB~eHBF@z^3mNsys6ZTjDWQ*BX0J{V8ub_FkX!+ zPU}Y%r$%|3k855iOXYyCzQJ1X^8G=7y&P@~vM&qvLfYkeAIR3QKin{L9PdI7h3o4b z#bp-H#=`-h4Fzw7MJe&BUW?|KKq^V4Q`SL{DHh!8f*Gd*4`Qk0-y?LGUb@I65X~?@ zFI5#M%+gg$xvEZ3)k=Lb(P6@@RH;g}s<3YnYOSi&sY*aq>Q$vlwJg>bOBzhH1PQTw z26U?pecBZ8c}1tDPXiCk#b*z|oK~MZFh>yP2?(#x7Z>;z`k5PKZiu;I<~A_5k-3Xb z64>)(G64{y6$!QMG?0Np`Dqe<Kxh^<+&_yD9mKcfJq^Yl*>ai%#+-`N6p2^}%)D`e ztZEvQ=#^Zem*qbZ+(}~M8A2SD|3bPXulPWta}Y`w<{Twf0*(!2Z(TMe?P2#e7i0lk zq6_gM(*VQ|4#gE3%%<e1WiVnPH4tLEX_6|*?-Rh+e8^X|qfJJf&4?2muh>ji4DK-% z01eiu2iTQ0x^e|woz34oIu-Eejy}^hP)P3P+S*)+DP^1IV*EH>A+4wD@$@z3YO~;x zNj+gnC{v+y+Kz_?BQ`R~+_F|EER~Q4>n84t*a=?B23pv8yK^yiQb8=EBn`0#_|?@e zK%bCP%21?)%n4W&_pQf{X%<bP863n!izIJ@TK8kEk6@+yvC{qY0?20EpQ{irq!;3m zN=B%{)B_}xggkY}5&Azvg9mbF|GoqOLn)Yjvn#IbxW`3i)XIP&yMG8pE1FC%CDq4p z4I(L$d<ilgS1kFXn?M1qU5=9JWEZ$I#B0HwDcwZqE|RUA2vyA-rq_aZ5_*r&>&W0x z8Qw>@o@7_jn+V>r8XStaMLdsrGXYK>E5l<Ad(0FMOSzR~tA&IdDHYk$MwH~qK*{}V zQa(qxpU?-{q&$mF<RP3;SO_e>N&)66)H<%wZ!o>zOe48!j`SM!L?=eIl;%SRNBRj6 z$4B}bwBpU!GgfU%UeFg|CdJG_enXkLfl`?IDaLoxLLrXB3?UlF6#QfF#1@th60;<; zJp;2xL!8N}?yf#L({W)^X+v9Ra-zGl-O|w)@9b#P`*C*J+0m7h`g=Pqeeqt9nF^$w z+hy%crux=GL`Rpc7cC}ozXb;?m?m^4<0vwxpNIuT+$yvO?pSqtA!WwsZO-%iAdhOW zpz4HpjYNzwwzx2l6T@qu4r`NuuPvjc`?hvsT=i&3R&H9m24hJ^MtCu^)z+EEq38JT zHmpD9F?c#M5nyQ~-j;0Lnn<>{C)+EF%+D58(wamV%#bOGclC9&bauouXaUc5Zf{3> zq@xf0dIlycJzdF6M(;~^w4H}O-0mu<6`Kzz=cD0zxh>hzX-P9XmM5-b&ayDCtGRz? zSn!*3V!q@z*cY{R_iT^!c5h{qENdQU)bZUv_6FdvhMN1v<qwAgwt}~dHZDU!%_Kwd z2kYy7mUaEW%3ist!Pg)+Hu>tE!(JuiY6u7LoIz7SZfHWwn7**jC)YQG8_X{X_CgY5 zKg=U^wydh~TD()WIo`Fn+omos?CVJrRC%H*SE^*Ps!UUfg2T03rOK03xmJ~R)iPU^ z=i*+Q%uMFV3siZbD*IH~ugU>c4ytlkm946bTXw3<EcD4vRd%VeTa`Wd5lt>r<#JVS z#F1ZaR>h^Nyd1aX)OGqgSP8+<>=0n0fq%H;0e{||CH4{jv?7~=M3tuuz*<nAK2Rk> zRYC(ZW|ErPhJkuSY+ocUKKZ02%sqv<EzDiU+*amBn7fj>tC+i*xu-IB4RhC%x>}e- z5Pdc-`@}i8r6zfrg}Jcqb2kgJK$Lm7R<u}fM^1IID6NzMnEP<d*o2I0MXg!X(bj~8 z)ZvoRrm`~#rN^0<Sb#GNhf}d!gBJ>Ru(3cBc0ig=(6x%_+9Y)CGP)%Sx(*AvP8D63 zhOS#j*JDMu)P`=E9o_Ph9f<lS!uIs`kVEhr97@Rilpd<*rniuUHDOEG6D0}9suCEd z_<~fiOn{7cGvf%8gu6w0uNbvtYa<qs?fn_)PqOqX;YpD`h3Pds9fn%P@^d`2_iYgm z?MX+f22>nrX9(XGVRR+vR*Q$goh7|3(&xnN9-PM1S?KfPj+g28MI6ug6^tK<F)gaE z)`hr6e<BXDBZEI>>2;R4mFdv`xf!(47n%1^+)fXPIG#e$G%Mn92YzX0h^5n)#34i5 zC%ZRxDB>X7;!dU&@mCC@HtwXaG9QlOaTon954cnAxSRft2RtcH+(UoQ1Es0bcq#oO zP>A!OKe5Ox5QsS6FhVx^4)eh@tBfE==%2-ejOR08&g6|$khqt=myel%F%#$q5VMjQ zpinF~;_LjFalKynSfu|HV<p*CNxFpoON>=!Q<dpT`fo8dDVv&<o<#p6#wKS|lhc#w z|BA6G+0>Nu6#9u6o0?5cO;4rA#MrcKYFc_49gt#G*;G}!ie4<mre{;r)6?lCQfx*x zH6uNPUMj_AW>YiMGwEegtU8;jPFK?%QfyW>H7h-fUd{|#m?ub7IxRXMZ?F6CfG2a< z36i?pA;O0I_F;ctM`vas``&W~c+FW!l?NmpOIwsn`!rjH3rC%Pu!0un3PPFQo%lTe z3RQVLAq)Guncp1p@ywhtD3LDGVd+eEo!ghz%#71cfZ<$j%$%)}aV0(Z1TZ<@cy{>~ zjyh~H)SHVcXbf8RLQ3R7Ak?55wUhnz^<h1iM`{T9_#mTHxY**+>UBvLzI-H_oh=&q z2{tG0+ws$Dm3Vqho2pOcyLUvC^Z^x?0HS-q20gn}z*xE9c*UfGBNfw#Rnl?G52S7c z#6OBvT;35Kmv<mfi4|q5RJ0xEEd075$-xgSbOGOvTR?qTevR0Frmzy0WGEaCvI|2Y z=D%VkZOEQUR^nF=SSR47T?AJN#uC9ML_h`;a7x6LAc3V-bmd@5hV{TIrWPEP(CGBk zL0tP}E3uq4&}r$agp69j6Y@~`?~fgW1sE<wB%ImfsfiVAv(63k`r_@ovZxKOh5FFJ zNxe0<eYaN};e^GS`1bDp+`N8L#c>}-Il!mrMq10#)7P&#V^gc3#S@wC&i=ln2G};O zTGp~g+m`I@>u8I2T34>$xaxE3*KKN9V@-GWc3g<XcZU9plNg*%Xr#3xRAG3X$J0SV z|HX&h906?CCKL#V<zO(}B;!d>>@?;y%sHG6<CtfCQ_x}@^Q^#`7)-H>j(EcKX@V+E z)F<GfBeZ>4!cJo<PSNFYmom4Ex#i6DGPjagR2zQP6l6IfD>mp2Qbba8eo|7wlakO& z6x`_mp9On{%#RE$JZ{!;O8(^Iru@Oj4u0+tyAE%jc4(MB=CbCQI{;*-XlF`IsXlbD zd0HTjH%~{w0r6A{KTaD@^LSuOd;3QAow=1oZ(^&pNJnR1e&cy|2#*5u+zX0wFB&EH zrx_nk8~t!KCuMUHDT_xT1)EO1z1@{!A;Xk-M>1pSiTA>~bHo2h^+sddgpm+BO*7`p zm`(JItp~z}-_g;P>BCdu98<y2r65#hN*?K=;{b|4b-#-=+Pb;g228zuQnIUk)BjQ3 zpuj$6j(w4_Q04LFM>KQk$A{$cbobLnKLUQD7rJ?j7n)n<)dz#+CnQt$H~AVTje^FS zXO8FiRH-o#wi%ztY!x;($d*=?d1px~405<hOJKE?JJSejG0BZXZO%qIKMh{S4usE8 z<!aShqgRVEj<JFOixXH>O&BO)ha=?4;*@DqtC%~TxigttOPnq|vWTC;tTqrb4m_kS z7Mw?vh?9-F{8Y6u>beR>U7}c~!)P^=jblwQu?ChMvvA|87DdgOBrVa|Oqy5}%hLp4 zmgff9ssS0VP?reHVSFXvIB}$P;YgcJDfyAM4@O#8>&U0lQ?oGKS}+@own|DJEZYDB z?>eR!3-8iyfJm)QPg(eNf3`Jx8pP>5ZqK%r^o%?RTMjr7=FB|IwxTh72aMro*A||b zwoq@>jVG#oxK3aWo9{YvL-su_$Df#nj(KixGLu;v=VH$?@X0ZC-!6+V6(FCM3Qxl> zDuDeILeA9_Z#yr3ZgOLi&s8%H)3>xAzjE90+pd|WnT5MsdU`rxT*vmkyn8E*cE)WC zzCBmc*58XFjVB3iXw1b}OH7n&;)!HuNoRMwJx4%jTxYWv7gQflWp*MW9SY)NVEzc4 z%55JN70LF3biPNlE#6s%8-d{6ieFNa8#?3L0iy#?bZ@|~*zIe(+mnt&y!Z6;I=Z;n zY<KnHH?D$+2}L*x5^Q)#4W>mIV4ZbKdq*$-DqdDV<Z?68R!|FN<Ej-aH#xQx;Vq`r zD8adfF=GRsHpl(ei3O<F6s1^}uHUq2{aS6y*7yY-Tl=?y2V^FAlr3AKj?RLNSZAg6 z%+__AY?x#eRl*r)gi14v_oo-eS+)Q}`;#RJ_TG(1y$ATXsbg!hS7EM=Hy*YinK{y% zEAZEh1e0eiE~boKHHA^2bY#}W*Ohm4L8zl0xMdt=#j|Q9c)S(Ap|Pt!{4P<^^&)p3 zu~CKbkdR6C%^C?T_u?6$ywS>QS|giWxfG+MaiD;L=8ObY)IzW@bJ#4)vm!qi87CSj z(862U^pP^KR4mWVd`4x)00+EtM}^2WUBv9j*WmPy3zOx=5JrjP#Ro-?*z}C<!Cuwc zmUU;etZ^7oMj>P792Gn7bF4;&e@wJS7C>7yA`Em>M)8LAYu2<b9~}-5$<PGa=8Y&f zArYC{y|t$^X*8rQy!X!-DGyI(H1K($#$&4eC0hzbMec+~X@2)U_ifu_#zkNRI~~L~ zNWG#n>5F(|b#Y|TLG|2<Y+5nUDiru}=tJ9*9B|SoNG2Bwghfn7EH}hPvNuO%{)}(# zQ^cy}$y5@?!}e8dYTehthRuR1R^}kFjzxu*=aN>LZ5`NFRrF1UFEfpAGRrzU0OPb= zw&JP&y6(P?R7bKmw+*mrW3nd+{m00MJ5HIt?VU;d)YE~l`g9EOL~mhYK6-i)F`GcR zZ0hJKq9*q-aaBR3u?|L!x-sLKrXP8igm*P%*t=TV(YH0;v%EKcKHgWIQuH=f4SOB- zf)bZ2t-Zb7y(FnXyG-_t)mi~$L?Oin64p=KdXsFx<>#F>cJLf1uoYC$+z-f~m)-(% z1`VCH@yvPZwvJ2(R7Bni0UH;l?5mv3_>6;oo$(uwg!@LG(3p#)Vw#+7hG!XzZugG^ zL2(XVI5r?_UeMZEq#>VFV-lq2W<T!Zrajdo^1A?$2j;0;JNokDP_@rBJj%xFw+V~V zxgXGYxo=fru@LPX)*wpEl3BdAVdMH08(U95-PvPA8%H`_@U9qy*$7?5)6DAN*r&m? zW$V{&Skt<x)!AkUO9Oc+KS^JN-^%7ceA=;T)!NpLrTsl@L}n9BBO_l&2gdONhp}vw zFUfjOZ!&cjesZ;<ZzcQUiYK&KoDLoyWn-_F`%4j$Niy~l7-U&-90x4PZ}F{&_t?x$ zK=k(jhe3j^Nv8VjhJPbwu^NF*-906ScWHNDU-wok>lv)9qOaIkDNaB7c)8{$b_r&B z8e0oM6SHh#RVXpi+F2%t88T{F@PXC^HEQo@>tj=8_U)B@nf7dI{miB<XRTVkY2}s; zEz6g$TDQXZPF>1UR<`2&+)Of#xWzAUnFXyiSnDXBcUYFel)81Jy8w)nG-vGBZR9Dw zqNT0qjrXL1LnZxP8DP3uVKc<B%XkDrf)x!p*Uej8!E{*0W{THETH5;h<DEFSD(Pf{ z%rY+KENu*@v}yeY?OdZcr41&Py?O$VK1Mn^JGFL@)Ej|NHQCjU5iZ=)=<n>z@s*v5 za2GFVpn?-wYd2P1Mg4jLTY{Y+!MUXv1v%e2Y`&uBCd=f4;Mkl!jwNHRCyUlMN?$iL zeLG&LGGRxY$`!z<#%vKdhC^I?Nl&5BvMgKKvTjAIEwQ~XnOOtN*JQhu`8Q!<GEU>_ z#-g&2B8Ba6Sy|^`-r~!Bh4+3u$4>_I++@Hy{LbGf<rj!>4aN>u?40psf*4QnY8Nxt zk1zA^;Q{ZzaX|+j-Xq4|F(~W-s<FeNcbctPoaI+io!#BNYHyNV^cH6Y#8XZYX9dMs zv&bypSm=lM4p=tzo}0|{or!Y}Yn=5&jF<dApRpr5CeGoKtdh6uB5oLCOw(AnM(mZ1 zW9K|^uT|LOZQ<CJC>o;2gdaBQE*cAdWS+=~DmcFUMFaMy`sQTZr7xa%uy0NcL4SkX zP|r^W%MF1*qukiw^Qp#a&<5*^9_YC!JG3^S>D=z#?dl4gW`Hm<_NG~LB0dez1tXy1 zulLsnj1Sd{zp1Id3H6wS8<k)~Q$v&7<PU@ue>l|W_Z+`EksHJHVY$f{_E{2auvYxR zhOkcwHu?hr&3ti+zp=5&ulPd^fyR=eF07>Dof#-K5D0~pV5q4vY%3H{!GN#cuLOJz z{*Zz*tRN8L_t(pfO$`9v(9j4-n?k{m+*ltBqqixj1VRm=M!*;hhphRn7~)5@EDa$% zK;;i8!Eh5QZE30x25iYLSbFxdC0QwJkaa!mRo20p2D%&&AMiKeX?qatKt)p^s04$k z{RP<H&;<T^UjV8NWI(A6A*g()zA2!vbA@<Fs}cAa4mJXPK7Rwy-WWjE27*wTrf|4% zG7iLb47v{bNgd~79gbZv@$-l3{Qw^FLCu1V!TO-wR1eI+kMO{O`lfnp0pK(Rkce<& zqYnyb!fG}I8|-V=x8Pi)YF2R8EFdu$!UJT%KnNHcXslNP{(v9yhZ=#ZKm${9gQw4e zp^!CC6y$)n10^;D0W9PTGX*$)1y~RQZu=XWnv_5T@Y`0<VBN<pti2~*k6ZZK-I`z9 zYpdX`!E~W$^Kn5>*SV$3jl+sS*15)%*=xiZhuqDzu7!U^VVAHSra0hnni*8sSjMy= zSyJr8oMjCYs%l3UtQR`^r0vO!*wxMFzsvA+X@-Aj(&Omj(MGu+uO+iIYhN0sbIfZ? zboaKy(w9er)Lq4nl{(P7JP9j8*47+dut==Sol#}e*%myU>Sny>@1MT{E1q&ai_cTL zkkrmPJm*@1(VNU8l{$u4ok|QCehgM)@i>EH9`h`w6GJQVr!-3$IXxX0Bs=Re{R!q_ z<woLLJ36<!(c4mZ#M5b%5^vvzUklrD3zbb;SiSjiT=OI?8|vBl+)TRr{JajZ1^C+8 zi>xeM%`YfgtI6q(_N1pMoyXVL*Zb$P4`Zs=>a}~Pdi~x-6;s&<vU4iqm5Iu>%J#}+ zWvX(scCMDzI<(Jg=V_hVR;^3x)_SxrXuVoS>(lxtoa6nn@)e@pPQ3RK@6U+$pG2BW zl%msy-iir^mZYlbGu%W}ECtE4Y91x*RHdRy7Cbts*i@xNB~Fz%RK<f=BuKeRyeg?s z$pn>5R7s^uCgI6T%M^C_vPvb>RWd`h%*3k`WR^;5R8osaFqJtfnX8g{DydV+e3dLv z$wF22sY-}lsc2A@MpbK4l_jcjimEJAmE|glsLH9TvR+lrRLSR5WwT0Rs<LGgQI&0~ za=xlupz2|D<`-4+KWg=tROKR-3=oxE4C$A^?^5tzM%3yZ;J=)xGk3!C8hG9S@i)Tn zCivY<RBaFZZh^F0A-tF9w-HfQ?g0OtM86CC+CE6z58=Dvc^mxhf!|$3t-T*`eFOZ@ z!0(%o{w<<<zYV|dK=@e*KL^j}fuAqH^Ski;9z4GfzaPNwhw%Fm{C*5S$fNuOevohW z&jIHk_=n*465x0lo=4#KEBO5ye!l_yfYS^3lvm*QD!}{}p1*_V?;#%QO<sfFAK>># z2m=n~b@;sj{x>1+UGV<}en;U);r9XjK7`*#Q1;*9`7u%F{DY{IfM3eLAP>^v2KI?+ z%@x3w-Ox5}6m?2O{R3pveein(e(wRB55n`?@OxfVt;m+2gFmcVf!o$Es#ajW6)I-A zSW;(S0>4Y)cbNn)N187Pc0sV>VX1&1)C2`$tvP8REX+F@eDhksH-9Pk=C@+p3XEHY zzSZbk3%;6lnBz3`ZA9NDOg#fr&%(IR3PR{?2!*y^0-+0`q$>zGR}zG{o(x<?1na#- z6s$ibf@rO&d5aAEg8UL9-{#>zlY#I%1bu%6-+PeoZ_NL{=p5r9mxu!c;>DscZ<i<t z^KJmgdJ{S~i%`b8Tf~7qBC*cB)p+hTo?pQy*8LK4yC~iv-X-2C?h|v~{dw=*qJ;=r zE_hEq<zDfAQG7srNPJNIs(3&o!s)rBharhP00|g9FBko2KJ#OF@8fyz6M65~^4=%& z-mmAqPv^bgVC6iMkN9TZ`>i~c-(g_Wb4kzUp`OcoU&wpEoA-V%@BMz>`-8mqhk5Uh z^4=fky+6r&f13CH3_10X_zOnb;#~AE^AIoQy@&GNEaa0O5C>VshQvKA|J+>iODz0y z9{zCNdnE7uRo?sSy!SVG?<;xlt9kG581@ah@bB|UujRde$b0{o_x`Dn@Ylts7^*e7 z<Tvt=Z|1#k<-Kp`z3=3`@8-RK&U@d>d;gO6zMuCV%{LCp2w9m+`XCSWVcz@Ky!WHL z_iuUc-}By&^WJ}8IauX?ioa#$H0P53m52Iw-us`t_kZ)=Px9VldGCO9xkQ93q@5D> zfh#5Qi1<3WN)oS@_K4R=yQFI+`D*Dp>3Zn~=}8jWE!|ica{yy*f*1v3ZeejZOM9eS zrM)aV2Y4Hc!n_hj-5^~{J|Z{egV!0sT!ydYa2OD~hC|#g6;d-O-XPr}Ex9vaEXLd= zE!kHLvtL?rcOf13NTH(id!;4!71!~8vm7JG1H*DWC@p!YF#W62lA`nj(vpXZF+P%G zMlR~n<D;H1d7F!Q{J5CMq~l_agL(9LJVs$nBE~!+ea-MaBOWw-Pv+uwNne+8ZRIJ6 zJVci0RzZv`Zx&hwqTEiF3Qm}CX?K99Oo9p7?PQtYBKFf;ggK<d*(}VrT8ZOMh;$I= zmS*8D7`$8#9__AZ7Un%A65`oQT7<czbO#_Q70b%cTPE0vcOQgQ2_}7CY7weQ<$i#f zN+!){7HTAkOuhq9mXj%!JUF$4qnx&(MVL*hg3UrmAk$l#g(U)+5r$#}GV^W{7bcPF zeUMQjv+e=xl2lVW+Y32uHZrHJMVLkAPUm>$?Sf>tR5yRYz2NbR3w^6wgeu~{4{%hH zz^N_5bP~K7Fj+}xAwwVTYY}FWdJhDC3sq{k6Y`Zvmd2)g07@o{Y(S_ik;RulHEPL8 zRlJ;&&s!?kq$Q^`uW1oxke0Jrgn4ACyBTfNkY$qr7mT-L`Nfc@hO|~U3$p|gaq+Ax zCh@ATwDa()a{gR>GnA}Lr><FhIh1T6>vlr!X=MHVKzaq)a4F$0;k1((b2jb*AP+gc znT0l84tW*nj5E)g#*uyIA`bo8m2qJr`P|GFVG23>0l+kYY<>_PlSx#NwPpzzAgJta zFNu(OGQneNq9lltOzNP`EGI&BY|A<EL|c0@b#A)j^XGML?dtCNLT{$8f7|&NY`^e} z|MR6UUo-&o-}%5Rt1Wok!Pvi&n21NN>onA>kWwNRF)kh@4)Gr(szy{{4!Z~pStotq zqL+z>eDrd>n<A#fI(I}TagAOfvdc5XW<Nv#<_3U)$Ir!>t$J$OMzdnfUYoYl!(yzY zHeEtr5o3<pw1d7T#+<cjCw)WYcKZG%#@y8;?WT80F%MoWNtLBN^k-76yf$4<4@og^ zP1;NEm17mr38@LGiRlWOm1C9FLb{UvU5-rx&m?+>5}O>IlA4m5nx0JWR$|j?)6?iR zmRMD7x{B_$#HQD#r_&!<Vlx1G2E9qdLwb9}=*-AWVGg}jj8#Wxp@zTJvq-v{?!}4$ z>uq)?ROnI(>b^t5%P{P+k7%=}Ao^;i-!v>-Ezw<4v^E>5B{_py(VA?ehM<`t)1C|F z#(TSHli)fj=H?Jk>D^Lvc4RgXaibKS6P;VPc=cQonM3B#oAIWJViNHL5^+$%OE^sb z4-l~tqMtE{ct)b%lCq3>b?m0Hl@-dEd4S!Zrr!qcW`VKKngu@33v4zEd;tqo%>sXm z1^!;byE#lP5EQr!qTetId_$sd!5hlL8+zM#L+?t_1(5}4XWlH~FT8~5W(n_O3A$Or zE>zrlog7`5T8Qd_u!I0a-z@VIZkFjSa%^EXy^!828wmHx4B<)>;ca+=+h!ts3K4!o zMm?@f6%Zg?0nyJI2%nYd^KuqbOOYQhK!eIcTl$_H^+kMWZpAF+hrE<EW+^|yQcBEH zUd2*=C!^k2D8+%Lv_bUiMk%k$^i8>-IWX%XlT*BL`VZtA1mwpCfyPAMhUT1w*8Gl1 z!MmJ-4JHNeAq7s8f{PW@c&kJwr6vIdE|Y>Q6;8pG3cXqx4+W6lq+pj4o0Nrabe&>Q zuv=jioNiKZqXHDTO$xq`6#P&@tU!TB1Pac<u5VEAbA|p=$zp0L+K4)&<cbfJA?veB ztfU4c!Vq-YEcDlxp}*EZe?6@5mh>ydXi2{|$$15fFU6YPg`(yyC}{S}N6BXds?c|o z=#111tj!~)T?Aw<k3bs@^j)P|SV{k)n9=*Ig))qPpT$$9y4}RE|Lz>jJ^e4!4-Gz= z+6l7Nf`Rg{EbB)~wz}Pc;lBZrmGomJ3;ZZE*>sx)*mS!Et$RRpxg^`&KS1*DwwU%( zqU3IiVFo2E+-;%vTF|6JbY5!SL1s4NeoHJIoyW{P%p>VAeF)N{^{M)3I2BGc41~54 zdcfkEFx-a6BOvf<($mps#}f?WHfGT5pe2TOL`XVFp9IlZ1ETTk7S8&oES&XETR7`o zXpQ0-MtW5#GZJZuR;Q{Xi{NE^$FhQ)wEoP-CbC!{A;D`__eHF3)`Gl*>Q;yloyF?@ z7UO?!In;U*Wd4JNn`}dq*nhIbPL3{Fy+lZ#OkcM|Phm#bPJ!0;mL=MpYUY-N-m%1* zIZ!iwmu1E@2KE<Av?bND$I}2{M=h}y4%R{`i?4|<r5`Xv7-AVdv_zM%+)D_?#h1~) zS)$8R%egV4k1es~(bm<iLV7v<2a7)xkI;W2Vc=&7{%wJFI00)m4=OgGLd7mo54Em< zitSKi&KeljE>~lY8W`rTP`SbAohoFRsK_?^tH_L9Dz}h#6%lr+N6FQMT&L3O)LOJh zryk0-uEfr!X4x5TX4g4ecR2wOUX4l?0Cmg>Xy+bDyM{Cg9!_{bVYjF?+YY-<N8^oZ zwr&?GL&Gs&F(|p6C88yUJ0bB}p198-cRx$Sw{Z_7UPqW!i2DrM@5e;?kUGfT!~xal zmJh3j$b3XK`sZU<$x2DGyWf+bl25AGz+Z+2zMBY7s`M$~(JBD@hRV#5p&g!Ys(cpk zEj7A2vKrE!RZ&GZOM71BGldsaW<DN7v&yXdV%iT?K5O`q8eJ1v18F~1qtjE<S^NIE z%E$Q^)mSj!OQ5x9RhJ9<NEZ9ZVb({cXd?ZU8m&rIF*9htQTbHi6_v@od8XX^of@5% zn&xp6fxf2lS;Zez>=oNQJFo?-Ing$?42_4r!4jiuQ)>@;7C`td9$uGPms%g)klGMA zO`JpD=8<z#b5k493I;|po3uxP@TzpsH5dFJ4bQm=a{g_2PK^AgS|DGso%~zHz8XCv zbw=vU=vk?=BA)@M|FFo&XQ6Kg(SV$a*MynD<N=LO&@R@7W&0dtyF|<N`yCqN&0Lc= zS7<9>et84gOB$PmNph*p{!I(K{A)B6&a)5CJ~F%5Uh?cVeRi95cAIT>n|*d$$?P^q z)xg<p&e?6Q*=_El<N+dFuN@^160#c}4-xT34UMx%H^Jiok@vvkVWQj$k4K1QFFYP4 z>K*WSjA(bl<8h+zgU1uZx*r~2BeuKYagf;Wfya}i<UV+Ooj4wV$5X`l5ImkHu7@>x zt#+t&Gfuy>Xfze=KSFQfo;I28(W0@s10)h7Xg2v)ExIMOC3OxOPTs3UYZD3#4D9yv zZ9FC3@4}JbD_TP7N1MubVD?9Oc8%VNp~rYgr~5GUI1gFrehfXqLpFLhhQ7u_c6twn z4)Rb5y$?fA@{of*phXkWwn&>0Nf6{DeF*7tAYEut?5kSBnQD)=rdm_UeVn)hTEYRu zx#+`~mSSn=?(1)JyMBT<IuB|I7usWfQcGC(C2ac=+CCTszph2osdU1fP$L~8eM(E% z_a#d9^&h5BYq8H~)1Rl`&|Dv4_U~{&K!JeI79n}A2+8w#BrgDxgbT2IS3`?fI{jf0 zmLC~d0L70r%)XEQ#K@e`G5=4^{6EuNoiH6rqt!1hdS2?hHV=JVV{3-Ggr^d!KTB}o zQ1JwhEHfervwZw59@%L`ifF#R7Ki#-l1oHa^Gr$}J0`vM$uamp?btC0&=<AX)@*t! zJ*36DV%>vt+dS#+gh%tFyXYXiiXohWvB~!k5IF=izJxDGX3=;V_hrbJkOBIz2J&;V zrOal(*altb73@Nzbsy|F*nwuZIjaVGSO=Qj<~d4!L4;SJY5$UtS6BxTUt=9a`UC4A z@}F1-QC?>q#PSB~AnKd&c#&vtYiNU3e}{D!>z`Stv%SZ9jr~K`Yf3(1y~gnmcw~w5 zNuB;qJCq%4{Q`)I*Yb`12>nArTbJpd3fj6tUoU9u7Wzg(TUY6u1#MlUZ(~P-zVeQi zP_dW%xuEUa=z9g7(@x(<zS_+Wd9<iQQfMyy2=rlbcPXJCVJ@55UH+yeN``fpziSCw zKlZeLU|PPrI9;z1XsMrQI59}*32USmcyNpd9SLV7gQf(T(RxfxIQJ#weGKMeJ=&K| z==&3v{XlOY3RvA$D&ifl!^CxkPOs20neNmP!m)p7KXgudrH+{40odI8hW62`^udI4 zf3<iILwdDdRPZ$g1t;tX#mn9WWkV0*#a^qsZpS*@sGD^#Fml+Nic#LoP{IQM9Z0~Q z<FMZX*ui0ybL^+L>Iu1^mV0&Ad@SxxUXwck&VhO9T}3t7S6uA=TuoT&-B`rkkkzuE z-UIox{S5cLx+{x<<DpztP(Bz8|7tPD1H~90KJIlqqPs2wDKda2S-BJ`rT^iwp+8Y- zNRc&=x<falNU0%3P_*pU4S7>)ND&k*x9f&z;gM2aw8%`f$Xe;7Wyg-mPyX*Q^2xCa zJ~{T*C&wU6zoz3PwOXha7_CpTU}_uoclvcb;fkCO<JME)nNK1Yz<B&Lc&kY@VU2%# zwYZ;oE(A~Hi!w~UFw6hoOpCE3`lZO1g!q@~b9(fm)J3??j}H*~f{wORJW(L~dwR@U z3rm6@6aoB5N1v&djjaz39Jk7xdVm`{`>`Iqm_#lnFz3KE#836;B_whQ1nDmr8qZXS zeNm5IN>Y~^WOJG$ml2o}^`M5dKN0tkPKR_H6siRSXa`B{Aa_@{-vdKLKgju)4IBwi zL4JDJ#C$nPT~3VM5D%&-Iign!{rDc}uXK(w;o09Gzk<-;=pc!w;0)gjg7{4xX83RG zv4yC|B)yQngQ-&`$!4#I)Q@$(-u)PQ?>mHitkZw$`IUAVqW_m3-AS^8k)24-zcKeT z36=t15pf-FMQt(bjv$JQtw+gwgj{T;ms+{?$D9@H{7Rk&2U*ZFgv@!Lh}T%@4r^>i zHa&x0ZjDtArYq@{R-CA@S>jd1oUL7BjjrRf$<^x!luCD5hqCdj3BA@jG#I~z(CZ-A z5Ch$9WiJO`*$r0n4bq#eY?X}r7CB-d0(ZGQC*$fQpX(ND?nUplMt70aF2dVIDcZuk zEl=J?le#;s#!BKYyhmDvEB*brT)LO>=vo4c{l5|65i7mlitmfrr=|~D*>dnY)^sA* z5fZtcpfz7>Y)e&o3w^{2L&UW>L?8nCs5QF{Ey>ZxAw9cP0Ej0TvgmG-+D#5JW1C;I zLWrT;O~|464TK&XUI=u@8}V&^9VwlTls=4<elt($e~9osEB&^Wx4vy`arvy3twaG0 zi_BB|oHceSsY+i;==YG`T{(KckMyFX`5{6e!2t6k1F1<f^7F@xW{%dR`X?tS4i~UL zL!xIO(GMZfhw?;!LWEyi>7W%mJ7@1pIUEp`C-`M+?4qjlMfBH5?sYkGe}m+%hitDx zI#PQP{VhXQ$ll*EQW2d==<gX!EsB=cjw=r-{v%R66T4go?)+G>%MFOaThL)H7Rg&y z`VM=EOibQ{@8w+<hCat+z<Ug7PKf@+;9nm6eMUgGdh$La$5AY>+5)}wYuHOavhw8& zQ{i~2DE!^ZJ3Bls6UBd6>EEp=ns`@0ar83%n8!d*;W3BlKdjN4N$O^@;|Tqi;oau> z1={xJon|Ah$gD$kJH+Tb%**zR?}_XoxbG9Wg@};x7^LqM>#h`y@PKWo?kcg)ZUire z;MKVx%1*k&Haf=3ZHSSl51t_X3RVJ7=OVW_eJ3yS8k3@HY(pzyJVVw!i>$lRhMF%; z-d!dNH`|VqYejMkJgyVP$87Xwo57ct>8&=-uu>G8ds(3WunP@)f5kQ*d3cA-WZZWk z@-ADBar<rATs4oc#>@0>NY69wWqJ>UbBueL-V4DT<6d^1gMwuYj1Mu4Bd33rmvFsV z;sIX7HD>rR8ykIrWnZ&pQ@4^K_@OotdeD|#Nx#n6Sc4x{T7Zk+0xr_;Fhgd0Jh(IP zoGoUrN!#fQwu1FKGjqun`royg3w`>18#LuwM06S;`UxWX8AIe*40wKF;~!{VJRT3O z{Ij<FwgTG%9JJ-O0$xJIvr&x90>rP`uv6|4h1YEKk2W0eQdh(88p4OYKOyiO(ExtO z1b)Xx|7?rS$?_d;oB7QEf#)LT2mpU*0)J?uAK9>@rmlb)jvcpb{>H+&xP35syHJJN z$1J}3O&rbtf!O9rip~B6in~v+K@NoY)&#@*iH#1}`F_q-IH2Apl1uDI2_@oX@c4j8 zJM8ol1_0UUW%j|;ZMeeO0iLh0)y)-lW1WX%qLmHMe1W&k(}Y&N?ZA#9h+&+##?HG@ zb^GJT4WY>4UG^M@ueSr`bs{0w)7WRVS4mQchEgFP?k)L1NT#kMzUWs;>Z|ZLKvD<b z@i0j}439@h>JfM>NiAVc-o9y?$$YM;;YmYbDymTE@9OAVm^-n(uqCs-t8G&<)3-9& z*^^gQvvP(ByC4U<XgKU{vTV`j<;Km|OjW$Az3TL2A71awY~I?Ij^ow!&1<(;<v=!P zdfPU$gOEL)@jg7Xy1A#fo0)pqY?imVueZPJJO&x(+V<OeJ9_$pi*o=uf))=W2vw!` zL1<Y#leD5|BQrf<&7`~gJKH1ij!vcT#8>w1EPkXbbb+yXF`SQ{<Fja+Owu;xNYhb? z1Iwy+CqBQadqX^vvEc#wj;{XX#{MpTZ*KlL%4dKqlIvbK>|4b#29=?$!_&DeIo03Q zR(3q+s>5Sn3@p+ppaaI<I9dqQQoveN7Na5?yZif;_GD*#d)+w5&edPqnmKn4^QC*c zySn=`RVhRJOjUbFdsSC=UsbB3H(3==^(A|&q^hkMOG_q`?Cq1W@VVnC3Yrx%f#2DX z@k+<SapWp&7zI}y9p}e08<X+Q&h0FN3dqrN?t*b(OfzH!dKyN(Yw>@zk8M7_k8M7_ zrEu+Gje&YO?5hvS!KV5E1e+Rjwm~2S@nOF&D2JMYVOv3s<xs%i0I>~0IZ)paHZ?f_ zCVzvqpbZCtp$64>V{*{n;CBwAL-sd?o9qhl>R!=XqEuFtXp_8?+0kjQWFw-f{@q68 z8kJa7BIDs^qN<{1nrUL%UL_YQf=9J}rKZLqJm0KOBr2JrPXTwTK9%Uxh$>Z~by}%L zmFB40JXM;nY714VQI$?orDj!Hs!GdMIig2I5Vj)x({%fQtOyR6wL7N6uT~(A$!L4Y zF?GSfY=m+6M7+$v+%R+NncKkJCgv_;?qcSi%-ki+J%za~%w5LZR_3lC)lOX(NQu}i zXdv`$%t9@(pxRfllm#SrvoK8{vdpZ4DCI0<sY2sSP!qJ%s4?pyI%yWBTdm9tlgP|4 z$ppq+U<sOEA|-$xmB%0QvBM+4@Kqm3bUu#ZvM?V{oy@1Vk{GE?6S@G8U@T;sT7Aqk zqdz7`mFo7@3Q5Z}fQM4*R5a-kQDNi^ng*I00bv8oW16DYh!w`kMR;tZsuUL&C*g4x zJfIS>lQ~QiX)`k!QUYL0@kEC#%1S%rkKio832UATVI^J3a<~MDpsQl;Y|4{%)77!k zY^p3>N>7cIXH(vEIbDm?Wm6T^WVIp!f$N45xB<hE9-lx@TfvTr$jZ$G3Oj?%f$3RM zk|Lf{fT+*n#I>r_1>Uox<+v*mDF=G1aQZPr*itu>Zeb^KChV)L-Um6)iB3#S%tk5! zrWx`iF-H|!NS_;ZGZVLn!Y$5Wv!C;LT*M8Ns;x116;!4xW~)luXm_l%3TpI)6->FR ztjq`E`ngG^etJIR)Fj~41u;?suV;H9GwFp)>nXg?vmw)$`4`OD!k3SdIsyx~0m2BL zvh6UvnB)+_A{DDF15uZe6?6xQ*|I>!<%Das-ARf{xT;9iyF}+kXW_R(A3EG3lSHf8 z%;gO6gcg~Ss1G5tkeh*J$`Q<oOWE{dQ#}hf=%ND9Poq$8$#`uuZRX`JE+`j7r@A$n z$;8i1&L5M=!n%z|G2D`In?vGdZ7wFv)B;z2Lc(kXz+4waP9<b0WHD5`IhjgGl__%5 zQH!?Z)?KJERpM6bM6_B5KG7=LO6(5imVyA$nes<G`6e2MVI>qVL@HFoR;2z^v3NhQ z(CJ+LDc8xCT}4=n5%b#1JW+*P3W7Gu9HzZY%4siqP#kVWAgB0ZS-dTc_aQslw&(PY zPCbEUmjbv?(WvB>Gd8Uk<amEyx3oSIk-AeUas4{6yKC`yj0>EI7<i%K(a9a5w&Q7O zi^ro$egvx6)WPp-3d#OZAjH)U2I|A6q7m;1RGE#fq2d2m{iBAyQNhqdN({ZDqM?s; zZ2hCt^ZG|?^ZG~Uk6-_2>4^GA58H<=;qba$f5$?;j@Z!48kN~tGgET&P!6`J80?z= zHw!mT%i<zhpi$^s%zL);MkTwru7<5UoFwA3+*I+2mmQO~9)ww$jJLxwkNKI<%9Joa zE(H5~nbJ@Ub$0`{nWLA?Albs|1Pi-@^_-!v&4Lsys?w@5Nm$IaXXcCpJEzvp{HSgT zSnJ@@cNN}5?d$Hfvf#4repom#?|9Jiin~%qolRVJBZ6U5jljHd;4_)0wsRVlHpIYg zp^^^krgRe4Xs|Y_B2{FO%?P3+W)|5B>SjZp8Mx#wD6Jw_HrE$!5~`--8C(R+9S3bD z+lo<XCMwgS38&m$kcIQ!RS<&;9+Lhs%QUX{=dy`&s;tP&WINVR>+3e;=?RvF2+;6f z7r-ecx+{4>Te1gx*;+oMsQ<4~u_~6pyE?tUtqqW*`a9+Ir&i6@phxjWR)u>gBtz!d zA}y=doUyU>^y$;5vp1Ki0-!}zC3RI*W`kH%WrGlJZi}k^8`kk2C}Uv`LluD`4@hgx z=y-6a21}HYC__tDWcHYO44TXM4gxSS!rmFnKWp^ds0tXlvY>W!IJTBWNU^gwG(Kh& z*WHep%^j#w2jpx1-)s@^x@;aU&H3&?xE@ydxB*ZfsBcub_zVPsJ~<Q&F^kV;-w%fZ zKGk5V9IgilSot=}L0{M}2O9kWIS_6N={atq9q0x*3~PTm*chtUat$CH2sAi{@wudU zz%VpE_?sFVb%l6EuS=WfU7$63yU}8&MAW&sOCV~h2=fZ7D%w=hu96Z}bi!0t6+Nox zRmBQboS=%6RB^IOX5&@>T9~O*m4&M4Q%OK2K~=0*Ee)!;SQSrJ#Zy$WN|n~A;#yVO zpr1)pF{X-fRcuqm4prQ$sy(Xs1-(af<Awm69&5VQF@UxQtmOmX>Xic)aHkGfB(2O^ zK7U|Z)pSvFTSEi>DttD<lW6Xf2K)fEV!$G5Q>UFeuyP_itJcGlXj4xcSPAaw=$4-` zun9|Yoh5$ebDuq%xtp0AW$qT{p2OS(bK9AlWNwPN=Q20V+|M)jJmz*Xw~M*Gq;|Hh zk?F*#qH$-ziw2+xX%@<10?+mnqzYySdM4U?R;pWs5@NBjEeN(%p((iApv$-qVV%_? zIEZaZi{K=77uu69sX@EZ4ww<SNG;CDobJNC2wXRK`CbHFh&vBHn4*cW&h@j|7OZSf zgVZoi-z-8H77-*&8*u%a5~~FVF031)5{4rZ!A%EwFd~Czaa74h6!4rBwPYg}@SGe~ zvk?_MOUxaI>411CUzjYV%cD|VX?E7z>OK4F%Jwm2t+-u)fK>pvic_$Po*K1fBX%Jh zDG}->Mr_g?x&{~SCfo)Nw}Ea%I0wKvg}NyW?sQzMONy*qkJ}Gt9rCen9n*xfj=}&8 z&U6u+8B&~ncCcC~LsNU7TR}GuR+BRPsuBePXAa`l!_dCES&Tv#?lo+I_!=|5mQx<D z#!n!w$$0ptE$WK8vk{LFag&4`afy(ekat6RHc~3MUp;n=CRZ57sB3_(4y=G*=s==6 z=y_3Zb}-_FOr6n+Y@`A=FIE`VsA~cG3mp0j2>k_`iAsZY;eFZ21R*j};I#DN)e_uv znF8P!aByZewr){2QfUC8;aDrO@OEU)MVyBh(ThnoGD%?H#4aU}LuA00p?66(GFjMH z*Srs()#L!P+aq4$0=Ct)T(YljDd*5h#)gKG^-A<EW8SOKyPRWbrB{=E_@?&NMd&r? zEinkYHlO!8X7n0c<P4zkMrI~yrEnuGCMJ>_3B8#_r_`;EOaaI}2x&JVZ!;ioW01EI zdOJd{V~}?cc7p{f?gq&H1|%~Y4hat24VnxI4;Tp#5c&{i-pDe46=9sn+GPOqD1+G~ zJWA-}B*wOQviqPPJwc4#GTY(B51FK(yF5vZ&h`|da^*L9=0)d3XQyWS(80A$ZElli zXyOSsc|Nmt4UT^;?eQLSZG$562{L7v1?ghI|68iWZ3QHJT5aN`Cf4=+ed|+8VfNLY z$;BCZQ&DG0v7Yfo<2Dpt%pn-1ZQc2T@;b+D9r>byqcV9EE#!tKCg+wSmDCwiy$TQ6 zxq>(zs2jbgVXxN+8VkPi<EmC2Y8q~@d+aY;qpHR=W)8DQCzI2Ix>eEgk*QjEj7)h2 z!+K7sjB{BIo)H2w@D2&EyYQP8(>!+un<-|>hFelc%oRD4ORJzPt}b_Mb+c|h!zw_| zzmvI_q3Y#jo1i~!;oAF3hf#NGM_0Q7OM});@_FDbRzyC&+N0`bG&ZHfYz~b!wHQjr zN6cryDa<yrbt5XaVzWRiZ^mfXDQBk2%B(YY^!4{8B|yU$2~x}Q<q8&=k$d_xX|1!H z_ublYmD|#%F`c1M%P}$-R;XI~nB4*B`x#3n8SiaN&mC7jX1%JkSOGFu|Jq~3Y2BUe zOd%TT17sfOhK=htv~Jw=S>t_GoFF^CGs_tpmbYwbbt4z}D>uG!&KaGwJbe2YmFMag zTRJ;c?rXPfY+bwl%+|T%$;R2HLiNyRHC5cDy48)X8`iWeYaOHTjLCVf@=EGWj@76P z`(U|6dpW#>)A~UiraF@COjRRlF)lncP%{=nW5a<zLSqS3Q*~#dXbg`xQ;~GFadxpl z(|9o)*AUE6i`#PHipC7HI82SSr9BBvx>LrsNSbx*L!HPXN4yUzoPZA3g63CUxu9uj zA{W8!$+YWT-R&IK)|I!+!2AY;iVHee)Y=MK-~7=lcEQ$8F8p}Uw&jFjve$;)%P<n8 zosYr_635M_<0PfEzsp3@IDRC>qI}c^{-SYz+c|D9<o4O?13_4QH#M;h_dviOk^}xg zNMYlJqj;E5{0&W^P_g;E#t<q$WQrOM2?#6orjWg`rz(DbC=`H&zrWG6w5RxCiH_@Z zU!&aA6lin~dnKsuFW98#WTe~xLB$^m_?zT<rVcQ~%*2NMO$~CW-WS&Mo!TF$_d`;n zANLBHn(9%{V4z9Qi5%2h7;117^P}ka%5eSKMTX`1!3?H;&z0vdZ<rJF+TVr^g|a{F z3zg>;x=kR;RPVHkX<Ah!shnOp!&|G(*A{3Cy-U0a??Xhf661`5y#&2FJe@8#(THcw ziIlOqm@>9f)XJuKQ4O1AqN-G=mP%Ebj3*Vi-ZjT;)lxS}R4qO<TJH!lJ!@gZdc875 zRc5HlNvh{$rfscRRa#VKDXLwwE?1RSeHBq1YgA=}>NrhRHmb^6Rau9M*es{3%2}#% zwyH$+bBJ0RSCw|XhoB}l&xNY;MOFD9Rr#`hC6V;2h|JWjDc8YoH~enmD%O|^wR4z8 zHRXPyY7Y{%?5jk7kVq9w5tywU76GnFJBi(1A>c7;SB*eyu7-g*#5QfwK%;1z=7|h6 zE*7VGJS%s?vSRTH;+b~pK%;D%27jA&O5Dh9<JxuW1=|?{ndbS-06<UkY=&GyXp0~; zv_UaR_@w~z-1LB7u}y1$yxRwuP7NsMO9PGIUNq2%BuyP4;>F}ratXPN<h(ob-plje zD+p@p$_01kQ?AZ?cjdj;=DpYFy*K2&H|D)J=e>LK-dpnCy?O6f^4{C?-aGQ%JM-SV z^4@)U@7;OtJ$diFdGCFB?*rrj5gsPuBjodslE?D#j}x+LwQdoYoFbN2v<PLy(u|uu zs=Zn85Q%6lxY468#jPK!W2qn$+cMnZu}@tpNTj3*cZ?j%TZB^LY{h*eS0pYtiF*oe z{dh`R1UD)5w*aOx$1*`7<tuRW$Xnhbl#`0mW>_bZ3C<S501-g$zeOgl#9g9FL1C&@ z1Z%V0Ah3^m4fs({YnC7=aYZY#LcC<vazT(LO`cK#1j$PMabNdVjG#kh%~9f%PAk-- zg8LY58a?ErTMR8K9<D{@oS2mb%P?rAakd{NDwYs{Z^Z&DgstE`BFF62LfTHdarf#A z(Gqs7rT0)a?Vy>cGvXBZ9tc!Rv3MW@8d#=R5WG|!aSN!q1XG-lf;$DcJ5ZV`MMJx? zqF8o`5Pugz>tu(kg(Fo1Ww>WFN4N`WIhX7Qcb<4RZWmyt+|gBb?nKz;3FDP<Vgxfs z=>4Qx$Q(ws1Uh|?@G~xhDK8##fwaNrGlvI<%Kv!m7(GB@rCDZ`I6L5SIRzo=!i(N@ z_N64^A_J~;DSfyA?;{0xA0yEU6EAKTJyMAGYXlEDR|{o6JXGVCo+R|^Bw7|NOO>T2 ztS%#1J^B<$$au6SRT-Z|pC-}C2{|$uFg-)q1{%DAX~2{pvi*)m;fI9&m_(;!qf=8; zBU8jV^e61V3UJTz5Hjy2f`^LAjv(wyz^}#RB|;CALDU#Acbgk8OATV)$F_OO@d6Tw zR^h#MyjL_BnIW#OA`<;I$wp_UW*%f`i6=509l(u)IgK5_g=%tO+a7k?ivET~tE1MG zb#*ml{UerCHV?0)vsYd%U}4q5V|dmk%VSdBeV5>cv+N~tFT3&o1_K?eCi~52%A4I6 z_tLkBxeNEU$;nd~C&hOO{c|xVkI?tX5aZ)4;NxG&P^tzmEX|?slcB-*Y<d(pJH#0K z0dh=}CB?E981@Nc>|)^)VAcxq384dGwt!iT(T{UxT`cCAl{J}lsfa{pQ{I)h@ds`A z1_D^G6Z36&8n)p^;X0A-7CB>0yLgy0Ix`!YiI<PIc}~N+%_BEL*PScgB+?s2EIf0V z-XubUJK~zhZ1Am?_K2u62=Wf4yojCNA|_;R|8}o9v=YFFp3fW^8Z3Vi+Ta}`Gk<GE z+ke}EvZtAC@VRL8uTgj!idsw1T_>WuUP9L|e@mp_7LB`6sDl9E>9b-&iPoj+QuBeq z&p{v?chKkIIT&9+Ux4ROd?EcVJQH%<ht|aX2_@nOhW`Nd7}+FX_+I4APZ@7shE{qQ zjfk`M;kXd%K3DjqNPo$r$o|aBu9?`y4vElpIgeS_&2o-^-a7|ivoB;`hW9n$FjVy= z(P$*|StB8bMS4UmY9xp0uf)MzXZy7nojk~z#H&c5U4~Bd9i;G0#-nM6c}H3-ya`M> zll)nvZ;#kE-Z@d*__NtI02h5PPxfD+MuV&_?~BFlnu_!Taag<lP~`1803`oa9Lhpt z{z!!8J;<8(-$b)re=H8di!PDjMgM=yy$5_8#rZeBv*l*5savuo7ul92%a-k{x|3{! zBwJ_6xM9m+z<1&#-T4HPPEm0o0fdd|y_il+FQ)h2LJ0(dP6j)L5JD0N1mY!~9|`_H z&+P8)otnjm|NH)4*)#j>%rno-&d$uv%+2$CF2SK-x4@o49YvF`e7Asu0{SQL7YNF^ z!ib?kd!qA%QHF*K1lC3Ii4H0ksy7MfsTT>sN&DFoT`cH*_7XvRw$s$n?=r~qMDa=i zv8INNfmaCH80dy)yh<3}@~#$ATHYQ(ZE4pC*a98OwU8D&_;qlNmNGbma^-p<IgZ{a zpc+dCeqOdit=!3KCF_0Yoy7wl&Cql?cej9D?;h|&{Jr4M6ZQ$p-RuE@S-D5RQ4hM} zy~1%EBvbYYs$I+iY@zoH`=JA(HF>CteS&Vfa)^Bd9%T7vqLI$IkpJTdX!Rr$tSVbP z#pr;SYfzpMf|Y}TO0<Wa#S7}U_jTm|DOBaW_oKF#4kU)cHkp@+@}^e18K}VjmY{u= ze}>Rj*_d`Zq#eSv?`dgYHqyS2Tsg>fB5-}cY9#Lf{#5aSpnRymHb1_$E#xCX`JFJV z7kw<Ky$IjO?}Z_KsQrVWcc@P=hg``bnf8c~#a}Rs-K{1Z3@Li@A=1wM1?u?}g8r#I z`W*uLog(^O(%->fWBLd9Yw14)<=;YLf8Jv-4X1=NSHzWXg`f}Ku#fBoxyoT^3@BC^ z5VI~-8Fq`Q4Cjc9fhy;U`&&$G+?18`#H<#T`QkL@OLXQ-#jILX7rzSLW&rvQ#9a*} zOT0(SnuBpS7;!i1>2A`QZWdwA2TZpaOt-6XRJlXU`UAF}d-c3Ab|2iZ0>V9$aGx&o zelhEDWPe1=x*yudJ*d?y47HjoexUqEXfbOl;k_JJ(WC4VwE&XU0s+0sg?a#=1z(wp zKIIBMK)}<y75&O}dVrX<2m-b$x99;<)^rHirrfOum<-Kv$~4DerC1a@e3*8Ad-#%X z4?p|u;Sat&{O@lMPdj|L>hNKRP@WWnRf!f;3vH1DRj31wN6zwaZZi{Fhl-5mSCP?z z)zRv}VlFWlSOT+~myvOj&iIDL_=c#wnZmdf7~ew1eEo=Jw&DmLgNQkf;L7Mq=CLD| zjS!<AT03kVX&|<@6)qjR)$9%It|`{v*`gm_i>8{3T$sjQox=WoPVv@F$Uy7nw7eIm z<h?N5n;qGXzxcHGCCwe>^!By4p1Pv}=nlMZ@7m&=(37NAf^PpQC)H+0U4LI+ylY(Z zPrixeG{W){`^6@sg=Mfl(gA^J616XmR_eB}G&K{G+_}A3ujcA>apI27_Ac<k+i6?4 zFAO*8HN3t0yNm9P^s()J?V#P1F(sH)33cHfbFWTmX3DMYy=o->;uY^`TNm$T8*bTZ zsJbu2wl<C5WHOo>Hm<H~Ubl8bBmNeWtN+T8k_1h5+120sG~0oe)$#t`$VgkPmep%F zZm4g@z3{9~WLX{GI-ZHO@qfBO9kDHu!ZaI(8&Zpr&lsAA=d^gDO~$Z+lWY{~k3(wV zm&dntX(BUJF?xkcAg=EO6WbU*VT4v)&3A6H!*bI$qnCfz=NPRrG&^%!BJoaXT^yPl z-`!_Xg&`MiqncRCP3q+Y`<9M)OSq#cz6zg??BGjwFpFtY5B{cVRhvuG`r2j39QEDG zH@svMIg(vBF@rp5nQu-X&(yQnJ|C)bRk}r&!|M^9l|H|$_c+nzcRNLQmCpg;&MMLA zMK+JqA-bIoKW=^ECaue5O_7^w{n@0BV%l%1Bdi;ySyxH72lqW}vFHcOQ>|JGexD~( z)mfNq&7YEAoL?%>lPmK5lS%#w`Jwz)m_#0(VvgQI1sfIYRLG<}Qx+q+l<4*_gvnGY zq{39nPow;FYMMcXnUtSJh1panp>z%v%J7_+Tu#mN(fS1*7;{j;iATi*H<dk9fd7?L zm`^QLR9H%dqo{B+DwOfHOs8xas+9==YPC>)EwwtRw29hIG;bnQIEm8D)E=bvW@<l~ z+QT%Xg=Vx_@DLeHVK|OvfXm@TngM?W184(;qYF7gCwm7Lf$w8}{lFqjk+FhrSkkzX z`NuGS74ug!e+~23G5=WRuV?-S<~K2aBlC}A{_)I@5Rcbv<%n%&4VS?YQiz**yfcia zzw9hXbm1{C$sOiQ#AIVZ)XFZh97Yv1Gad%BSXhviZ2;Pss)&QBikOLqX`)$BKg~9Z zstB>!XMAN+%9%pQeB4Z15aLTLF<w~|5=vu&;!w}u+w8@_a1u=9gM;-VSFSXNq>_x7 zq?{Zw0lSIq)CmOmCIepw@O2H=%fQziGzZLZMMW!-mu&XM5Pt?1Bo{TN@(6g7c<}Ot zGnBK)U?OZ$c9OxNuvIym4DJuxaO)11@^<AMq8|CO*>@6<aS_q=){3}G2%Z_r#QmW_ zCPCe`%SfUuoUL3z66m5i%9R@8O<)oNIFSSb`-F3pYY0N%D%TPfO&M_(N&`hgxpD)G zh)zX<MX?h^(P@F{ymo@fBnmeBkDw&?s3n1w%OdU`0_7q16J;MfO8pGB6_--51Ihzr zXee3?IX^@~GZWESv6;9(hh=y)tqilF3{U7~ctS73lWG}CpbSr`Dq>I_3!n@yvHhb( z+)G4x1)g_Kurykli^^s{AuE*ENU)Hp%qg#{n@-ebe}sorZ?lq@9heKN^GqFI4aK|- zk5Nq$xO2zj{#}vq0r=C!KZ3tR`h+MyC%D;$x^;P&%e#<Ef&|MF(Yc9e`N}dLgepTM zIBzHbi)WzUBSX>oxQ@T2|Df_d*^i*Edx1O%BnYxG@F6C%|6mrb`+o@$Af2r%e?^c4 z?hjJy5*F+qk`}QPUh_vJRIxu+q5Ki<qs0iU_6Z3th%UgbJA2fQE6H0hN0fidtxQW0 zsoMez*@oU;1Yi3Tq-`;Ui<QrSKu=OWSKG`Y)@J^URcD5&z4aK@S*8XngTAQG5%fp> zj$l=^%7IG(M{sd;u_L%7y2OD%IU4SOH|k}c0X{G-=1J;V4G3d`53JL_?W^0{;9I9F z$m=VC{L$39$4YbE|27!G7zIlOC8(SD^NdwD;{gkpp|C2q>pNtmO|aNXz^XCfFTvx^ zIIjEOR!bkdw$-1!Jw7+ppUmZU07pQ$zxWHrNT8nzcRAc1Nh0~Cd>&QHcndoVPF2-1 zvz4$T;JH-DGv^W!Pf!z%mj*;mgdPlcf{nLlW@IrxhxwBTEZE`O2Eu9>y9rM{6ZZQM z#jh4Grkz>lMQKWk{<NVoP1KJRs*dFXg9ko7mFj6r`0n`dyOesy(u_Na4)pMhB~6~O zJSlt3UTCN<=^bw;nKp*TipF=*|8{3H%7TX(88kpVfU&Z!>0~i}oFAqTWM-!m*cn1q z!OGmBElGM&_l4=V%pLdnQ>rZ4x23lD`u?t&<EI1hV`-5Y@E~pRWf}rV`S{XOfI?C` zZgz6Xq>H5N%*xth3_S|8jciEDPj-$CIs+!Nw#AbXx{k*D@r$IdVpwI2)#v0`xR=2> zq#!=XZSeq%GQBa!L^IGU$;d?&kQ@poDo9P1R1-^6ykS~Ns<s^-QS3?8ThkB2Oc|!S zW;8sxU6U#6Eo@v}x1=`9j4_I?mr7TPD;@t4N70T-QN5Xa#KhyNNomJ#k08X*SkyLb zDki|6R8pKbK69!H<H8BCCMBEM`Kt+ZbQL;i190n5C9{r@09ezMD^s*KkI;A0RPmAr zM$3=*n)Fs-G0tNhp_)}jJzeP$$1GNQd&+1~;;?ob1CIWooj&%ggR%9hPv@Ly$4q9Y zDw$?5U+><%V<}aZ9q9#WBix)LG(~m1`+rgM&X@(IeFoXY$L;ic8Mu*H>2y>jbveb# zDi2z}byf=a4RWEPov*6ODY`4G{G!k6^I43hj{0?8oHbQuq_-5Y(&u!56t8QT-e{%E z?@q<75?xhQm7=%O<rF<0pgevkmCsRy#(Dj2w9xCfrnFqK(&KZAURRZOgrc(O_4z%+ z6rn}0$LkT{S^OZ$=}pzY)@O4r9|H&C^J#vzTp>GTm%O$hTW(^o0d<rYwbOMly(4By zV76z)({+3n6?1TdN1Vj;{H9Qm**WE>QgJ%vXHcHmITdG9VGb2bQTb1rPo)Law1`qC zHMyziMg2eOqhb}6swuyOk{ZfGj>{=uPo))9YNYZS%Fm^|kMd4xUQNw*YF<Yz8z`Mj z=~T*Z)^!A<Oh>ST@?DhQO8Fg>{~;C6r2GIepGgW-g+Uuf%$CdnJNS9bpT_)I%r6<R z^X3`Fo`JHtaGm9cD_63Z;|i8?T**;zJ(}Z6Ye7QkvVj_|Gyv4(hJl6PuN+v&l^nzI zr88{D?zFEa<{29Y%D_KvpbYaZN>LviOL4Gug!<rEii4fZk2AlU`9DyV2$|o@{66OQ zGk+WNw=@4V=KqNKr!)Ty=AT8#(KWdFR4C&X6X(SPW~362jq#=$PJn5+4=3beHl7=k zthmo)vg27b>c{hBGR)dbEf!*~!t-VpTEmra#9GaC5Er9XqP>jiATGo`smulJm|7Md zS<9A~^c<dDa+lyqw7j`^{B6=wJn)u(6drFYn1n~*CeMLPID+a=`Q&I^6ciSufhxhA ze>F_uD`C#>QIV8<xGeDFNwlE2Qse>xiSbHRNJ_bvl<JTv<=&($3DFWRMwO-Nc{5Qe z0HL+G(y(*2%8H<z2*{*dX<&;9Eqb*Yy;@m|N{3d6UdN!0L{ZuT(M`CuVmnZF5Sf|| zLHSQSL<;!L%5gz^B47vhO^Lxk23$`J+Jc#hm6;@9BalMb9L!1#1+w_92bIu%cDU(e zEr%@J4QWHoLIgC5;(i$F1g?ebPEoVN%ud0~I+P9&o0C|Xql@j-#Fi^vsD#LV_3usu z@;Fs&UvN@_9i7<94t#;wY7l#xA@(#B`y=H?AT~d-GG7;adQ$8edcn@boheZgrL7=g z7u#bhI9NO|8P7PBal6PNGMAuV&Yw$^-6SYQrQnpr(8?)1+oU>|FdV5O4pJdxxcLxS zC|p2Ld2sUnz*H_UnV>A?Lee5a)_DBvJhDG9oy*>T_^@)Zy2YjCe);g+FK4-5&T_w+ z;I<$i<x_LNdbHfHC2Wf@HTUb(+-LHrdYH`p2BI4E5~Uo-9nTOdx3C8c%*IoP7Cq)p zjJaElDZ&`59&<m&JjjZrrm^WUk73LcY79$b$Cylrc@|@yC&4+<ISrZy<75bag>4Gf zaIX;MRoq#fqrAqn7g7Be5v1P4WIrRpvOpPh-hD~TPQ)I?dv*Xs!^Rq9vKDfK1o!oz zh7hT=EDv>o_iOi9d+!l;@&gi8K%!r0iGD$F4^K;!gK2)P-Oj^fPnaf0f0mE1P#+Tn zc!B(LMM<*Uj{2#e611Xo5ag}mKP3@T)+sPsQ4uoK$z%Kcl;A0{Pl@sw#%}EtlrMqk z-~;nHJbo7;r5L6V#H$~4>__7_t)gln>aQficMt?0eKe;K?OBoF0%m$@7KR6Ak-!4J zJPQr({DTA+Vhjsk$d^x(Mde?ZjnF{6jq8dlghd>0;~X5B!8tjhl*>ci;~zr#{|n`x zdmybX{ufHTo*ZUvaVL-MY!|N_CW(NH>p!3jz()>iVQ4Q5Ogs6MR#}7xFwWuA+vB-- z`Yzx`Rb8Gn$6rBnJReV#P2yolIuVL+F*{IJ0EL)*5c9tn@+>EpV$S?!ymG0L2eW}> z#-o3ehx9xS;)%XQz=M$J{1E1VYRr3h?Zkt&!Qu+mBE+-<J=|b9I=R6jNy)Pgkto9< zS%kmh>02sGGV!-$HKH0LzQ_56+}c2(epyrf@@7rftFe9q*-mzF72}?3&~jglxx;i( z`}x$~u4%%s-vw<Lsq4l}Hj1oWwcif&hCK^=Qf=-vXLuasQOoWlZJH`td!$#@%98cG zZJjCE+Hjt&-{hx=YuXlxbk(yPX?vh2-YINviVNH8c1Sze-43|hQMaRXcnMN;oKhsS zjTno;o1se9qbKsaYsI*~yJ~VbYxS)|tcfna-=!^wt&m%{wmgzsVb!xG-m`<Qz&UZa z!v<M~VN%P~`tWpt=y5R>8<$`7I2^u7qt+};qha#y1qRUr^Lo+4X8DMkf#tBK)ZqvX znABqiCY48Y!P3CYel3;r?UN_vPoGTkt9W9XqHCyFsc6IBMuluD<uUxs0{m4}m_mg@ zDil#+8v9kW7=H;B9F*o!6XIi-D+!hT)Km@K25~B-3{?EEaHcGdWMobq$iZOSOnz3$ z>^aOYoy(WcpI5=?1<YT_{6)-nGT+5~H}gHr_cDJm$(v-R9Ffg6Ts9&=*ww2jt5+!p zf0H!j;!lqF`y+<QHuY+@s8{@rF+j5LcSpX4H!&<Pl819Ps|3kRbej6}W0s*Xur9<` zm@4RTe3)0ac&S|cl^OK{4iO6%1hSa{*M&m@suaWorA6K8rE(@jK8c@-r`ZRw0Viex zl{+B#MfS}XVbYSry$Jc_lAjReW&Ax3ktlvbf-p{s1Q_6RID{L)VOe<{D09>tHY;xc zWr<qC7UicvS)<ml6+V<h_&ZV9ro07|J!%iz;k(Ix(ImvQ00us@vMiX7UvmfkWaq%2 z>l}z|$vpLEpI9DnslWJC8$%)6;96v;<?6$sJ2$DOY(##aBVCShhd!3mVk0N)j=g<7 z>i#2Ba+6`b&j?$4@A0wrz6kUR7zAJu-&5OnWc_g+eyq2nT^%=vKieXpI<+yyj8b83 zAL${*#7ykOLTtsOrAaM{zW=0-oFXid`%o!dgh9NQv?tY_wNco#KC-2LdpE!Nhy3Q# z$rjoZ>Fxj_(?`q2P>>!q+91ar3mxN*g-q(^^cSFyhgdVB(^ch3QPoDRL5Jva_&g~( z-Ga|kWl>LV$hLy%4D5GC{&c}a1XQFW=4^Is!$L(X9@r2w5Z#xJMMWxnZwVDDsIZWl zom7}%c0w;kWJ;4MbAS?RDj3KHdd}Gt7R3yTM=Imz&MTkK`~}Qk#C!+yT`*3WO`M3z zHUVP7fx*UXINOhv1nBI?Lhlh^6v$wZfhGnSIP!>s2rH`7zA`Cgx+()g$CMp{^=J7Z zV&)ep<xCBR;(TR3YP~4)f;>#j1rp#%_Gd6fS&)c|c#!{~%Cu<z%e@Dcg}}5wg~_>p zC=(~9uEfy(60$cS@eLJ{;%Q)bID&Wu9yzGN!ew(cSs5s&v9!UgtSW2B>W5@?i31fm z%JL!Y{A(k}Rpcu5L)z)rYPii)0z=x_*ZFWeNm((ZoqU}NxA{uLkaq4hd8$=nr&=YM zFS_pVVd<*Fhg1JU5F+ZB1o1H}S})d4A51OfR<VS`Gxn70Jp}I`ydr+<Au?6ic8E+9 zcM@gmP*m(YsBGVl+A}cax8aHV5-!Sq7<+VU4irZ@Eg5hwN>qN>B4Q$Dfa1&{7PJ%9 zk6NXyxmXuxlSI%`F|$S5TQO^I#q5<9n2feaQFFkG1|D{j7U?D6ZISj*N<dwoOA@LE z7Ggb`ls@)*x`y>A=~GFQk{8TM1HH{i{$hTPH1gQ2dZw~2+@qhIt<wWkLLXS26{*L~ zhNr3?mg@VAxQ!D#L_53)i-#2fMuM#Nu2tb3@qTua3nw2-zRNQVuL-#~(!u6LW>gvv zv`0GHGGV5)v9Sqn<2{|>zG-a{c$m)iu80waGsq2nJ31o0E5B3j<BHPHpV?A#xA%AT zwuU?OgS`5kdXU!?k4AeVeHk5T6|&+x6)E+=Y`Pp3phcZ~>K~MeOmrJ3cEE6W$u^IC z*TyW^>GFxrO7z@L-_-FQFmsrgi61LWo6`OtI%Al6wlGbJT<|&c&lOCXGxBHV&(1H) zFNcZdWHx!G3@4dk(F-;zWwP@HlZ+{}X%?j==2-;yn&nbzo=eU1@ED=F0(YFHg_3&G zPv$sk=LECGV$B=K%Fe-1(-gjNYSA?2PiOuN<`*yG*wsPo8D^0q0y||#OgR1J`5Mk@ zu@HeBu(PoPb|SIE*NYcnaXa=2y8;-vO4*R+3GrnyUYUz~l;!%#x`hyNG|XgcaUzQ& zG8)%LMOwBUqtr1BafxeCmJimOaNkD|MVlSPG2F8(ZXJA;2zWXCI_1O=UkW*#Gzj0Z zdRZt}Hmg|%wb`n6dTEM!kjjDPdK|%=XpRGqIyq3iMw_?hNAtD0Y(_MLd8wzD?8&kC z3~|_8c6kJUk7<b@MiRp)ULS!T-lmVgWyVBqEY779n5vGE7CMmBinsnF<uX<|8K!}T zotvCAW~YFf;4gODb;xCNe-|4LB5m0t<k^`0k5+YgdgSu3ED-5;`;KZDj&)QT6-wm0 zC69%B_2l{>Hty)PbOKY;u`67|toHgd5dlTzW5}xrCnP#OPOoe1uV?Bnc<M7OV$Wbr zsRA4d{W1zi^b~D47M)(7$C~n_qRU<7FBqeksi-s(dx677BEQFqKZg~_Y|?BlwB*Zj zVg77^YL+sHoK1-c(`4RCWp><|&t@Q)4DZrhq@8az7gKo_wZN#vOFCdB^p1=H6ESgF z111ckIehM<ynN<QVg6L+&tU${IUKu|!t7aw5lA969IVVanHioS7B&*W65IxZlN|>q z?0+JgMDvmfa)Vh_66O(s;02`t2A4S@vXP4sWhD+h$KcR|ny||u_P9aE%$)}i`|mhJ zdfcRJVlZ}5e&+$@#33Aq3JYKu+RRKk48p`1!h?)uD9kG-qqe6YFg0dDi6&)550OlA zsuD{e=VQ$7L3?R~a%!rSPE|U_b(J+J-ASQ6r48z6#nh+-r4VL<4D~x@I*9W@K^udv zGsYnGOSWkJhE?oKr-I@ghQCaXbLAw}RjPG{?=iu%fsE#5YgeyZRo_(4S$ldr@H5u| z(;YL$)URK^cD)Rt>^KNxUblYjiuLsyHXyGKW4mblElF0|#d>L>w=tL@+S1?B0@Ei; zEAGT~;O>~UWd|&TSH;6^kv0pXo8o=p4lIDWeg}eu2>m@BX7+nA&bW$3R!Oq*w4SC9 zA&A;$R{K#`q|dT({i^kmAM_)Pv!1|E2bw&J*wzl10;EkiCScxY(fB)vOw8t#>S2RX zrK+ak)$n|(;Lcy=uN13XUbk4~@p>gz7O|?z>l3RgeN}e-ZK%(!!Rh;*K3Rj)FU+5o zKLdXomnNq}>Z^8f^4PpY-`5k1s5F&nL}ajyKeY5fO~tsjHZ3wwh53p@MBIHdhjSA6 zvzhbHlPwmUTd4mKrp2C-36quFyh&W{bOzIJN!{#Yei`%UGQXVp^O!$>#3rDV*x3f3 zqz)sZ1XCHfGqH;)4+j-W*`OkGq8Jd(R+!xg0l{omVgAjC2*L+=GbOBqIO~Bx4u=@W z2q2JJ1LnWQfcf7=44i+H#YDTmvS}cjcJ3}nmqF0a<k8O((9agp&ymp2HKCtJ(VryW zMIiD01ZO$8(rlEJ2gzWIDJCfo!Ij2L%ENG#V^nzruI8AmJc`pX-a<@tDJ1<Iw+_D` zK|6Yge*l9DPKcB*2~LS{MufY0%3s*;R5<wHVtA$9+@KyOmCBeog2};rb&kX)Pigyo zFh$Z$6U-7uE?4oqo4!)TQy%N%+Yr1>pC!$hojTu7VXjVL{yvM-nu#q=Q*vIMk~4HP zvcnW(3o@a<y-h@g#YGb+a_Y0{wg5B`IJMJ_I~deVY?YOg_vZ9M>x(Nqci6eMqwNHk zS~y^Y@H!o$)93JtaTexA^({XP7_Lg6zhI2VvZja@Dm`A^%*#}EgvM?tNWmgTNa{#s zu)$(7714GUGyEcQCKHvdxVw*7R~RIx801Jb#ZkcgDXLix<`*%4I<d-VCB|f~;c(+! zWK#xSViv9h3kwtlc9D2?F|joa)$GYwu{Tp8bq6jZWeFpR(o%H?F1hzshI?;i*sIGR zW*$x|Dwy@E1<ZQY!omG9QCT$DB0`UJq?+(Rvop4|BiPpDQsRZB!wt?f=^GTRUr6jb zE~*o&kAOZ@`@WEC*l|g6|KCEm6*1%Q3vFAZi)-rX?^4CU2O9;(dvcoUH#IdM-?+S~ zp?O{H^5u<dR^+mvhWf@84NZDjI_j-sB35ydbp^d5w{K+52Ig(~C>1;oy6qGVA{Sz{ z4Fc>ZfsXK&tX|ym(ZCB?fUY9m(6o9L%C_qP%i<j{Wnx=InvO0`Em-<q>zcJq&9yM` zS_RXqW)%yvEu*=8OBWP!UAV0c$}BgxcScsn+ag)b?Okk|->B`NWkWzL($kJ-5Y;WH z)a?m<J1TcW(+R8Un>Vg$T+`UpSi7q6#QNp7W;Pzdvz-PrtmZB}ZVdB}j=bhBthaQb zlW--5hyNmN`hqCl(_7fA;!f)G#C4G_EG^cBIT~;6?}f!mpGDoC!^g6KU#~vk2<>2L zq}sGe1vIs{vMScpWAl=md>f4FFB&aSOE6=!_nks(*p}_R_}1iDUuOqKWwBLvo3V+P zt^GJ_gjn@<u_nH)c(hD(S%^)l&pn$}mGtz@sIj)5RNm>MHdq$5h~acX;MCE0`n0?? zU1z+_#Mo6Je02oM)7mTab#!Kckdz?pGf3OuJtq-;he>V;!%KxEy5cvML;L)({RS1N z_sD>%e04QttZSna_{oj^TGTUhv;wv2(iyUHbDMVlcGTCRN3uezRX#o+RN<(NNb9R8 zM_*Iem^Qc8#%-wsgw%>-z_@ZCpUmdu7{cB{>8Si^ESUX7*g!g-DJUP0b#-{VA$0B$ zIN5GCGLA1&hs!v!$o8(J$c$t?u%J2PrAsE702frksO^W1R_nrDto>+PzDHo}9V5fE zfqTqirE`td!n9EzrHmU7>B~lqPybk;9D8G<{y~GBNq2_vecJ$Ef=RlVG`2~jegr3! zW$zeoefVc<%;qtI5hTtYoiX`2Lt#hc=^dlr=yL(}i-4kXme&VrH?C@GUR}FMo2rc3 zI670iPj+e|HsvWEBTcdaTX2XTr{kwXz>L}TbhfmvH$l#^URMfdvbYmt1c~g2xv@KP z8qN(09=&o?pQd;Wj`2k#=QuiOe<o{EsCE*EVY<D`j_o7Ke*_uuVDm@i7&(2y{3gsh z*1*yo>A?@OQ3(^^0$C;Fa3!nj$V?!qV)WiJa$blMC(evBlxFs+#1HtWm7a`cpZAIK zg5dO@0Bwyab7K<c``gp;d-9TlUkcx-wVaj=3uR4#<H<;e<C%Z}D5>1s2UCcq_U=&! zdM%E98k<yFOPkpf*@9E(o~8*ThkWLZ8jptrp#>VJ3Na`3<k3VEfNbYztYa<_FpKY) z0w>Z@Hu<)+z+-o%pX5??T$8`Lrx~Wm>Ptqb6SC3UPO1QlK~5k4TOzghA{JEIR3ja| zYvE`D;Q8ydBx`$Cr-6N?&)tS$e=VA@FqNNfZSQSIeY~zXtBdJlJo<4e+Y#}lBsK|} zI);=0My8#Auo!i3-;!Fxa%;Sso#eHLyZYK|JKDp&_&b+%OHX@S00v^9&AqX3Pd5y@ zz2?4Hd+Vu4%^u_VQ}e{*(UV90NW`~B$Tkv_wqZq&)e34``(WXM6C!oA!FHZCd?u2d zE8*FIWb!;?wN;%AoRPNPs~&OqpeQ{)ZPXgqR86iiUt3+jp})I3-oqAy>fQppxOVJC z>Z-V-9g@yWd#~wZiONx!6p7E3R+MSO9;2?kuQQA&VcU*uamLn|QVN-E$G~lVYFUl= z+)+M^Q^$DiEOxBc$Rh1&&3ES5>uGJRW^N64bgY6gsHb?$FO0^jH)yqpmIy3?+X8Vs zc@qUcr@a?%0^!z3J;t;}+OjdcHnq8DV#o@k$=mUMgWl}fU6bDQM;+Z$_956z3nXvp zlEUa)F!k|l6cAhD9jMjM)|$F;rZ%=S#kd0D&i0NStgqr|+SO-jXBRUo4nCf#y$^)8 zQdsEXh-^<=!&tl3>#9h!&(Z<j>TnN?&^9f2Jr=>*gT5LeGqKRY#9r_+Fx%z$(>B|- zW5*DBaED>$7%$zZ^ReDMdor;fW_hzlAH7qTJ>}!Gq%3;oj?Za)5N&aI+V-w6+X5oJ z3@lDRH5~1T$9vSX!=pZ+wt*RGibI=FvG>N^woKb0^Nq(j&PJKk8f))p8+Fi(Z|mwc zHG?1NnKnkeIt>~p7GBBsI8UsZ8Bg8jReu`wJH4pB>|;NTR(h%&Vx`OH5-S}Zzcpn{ z%o#ZnP8xOelbjx}tCDIfYsuyCc$|{Es><h=++L^KX-+NxB$pRhC65bY?dfmK<M6xv z5byO?nUm`l$>s6;9Yy1Os3o@xp1_>k%#xgLca=}p8#5Hc=k&<>z7$$c@p?s{uhKtd z%qf%Pb~>v(Bf(20r>_!?uQ+`^XU@pkoaA;ueM)Y>$6qD6syuG5tPiG84L+|oYxowR z<aGI*UR&y#L2~)LPN(GbI=tw69UfU<qDlA@l}B><J)TO4a#sOeRpoU<f!vs*$LseN zjy*quit@Ppd7~{SK&HdxMpHCihpaEIC70XnbU>zVkJp^s!a)-^PIygl@!Hcq0Ft}X z;dSMW)~(^)y0PN?l}@iUWjjG~xja4}#5%n`d)f>_a(jG!kHmU`<ng#FtDts0UQgz* ztrBQ!RUQx2My0D#tn#^hS;Ke6;HCMoc6^l%D7M4xa!RgBcsp6c7u`^SZft;6K1U@K z%vI@y#sZBAp49_y1nR<5l{I`T52U;Oel)^^SOI=)+8(zb(l~rh%&3aJFsB#fdR!g{ zNby#BhM%;RpmM65VwKD9v!qOr-7c5fklE}Im|Q-;J#DE9PX*5fnfcw2ncM4kL1C+^ zpw~J4@IE~*M<s-#abU3uni{bC9aWZ;S*x4DQsPJ@d7vL*iG4n=Ik_hTLLFY8<g9Z0 zyzm@8AGUt>9F<;tp;eU#SpaQN#3>@YG!NF752_rp^+W6NxIKPf_K2-g$yw>e2IsHx zVf{eE0ov_zQ*F@&4*)|7_)zDN3)CIt==V8*%jIPzjXd7$5gRcQjw(=2=na+DlyT3V zHrE_}{B`81R<rRt2kX76Rj*a-Georst*|4~YmIclprU?#Ghp%+sYrf;`L1|2e$XrM zWkq@_*hk#jg|EA#0w)!AjaH`zxh!>e`}RmjMQ?u#BQiCPaNAZq;L|3lA7`iE@0w|t zPs*Q~Uy|?0KRUlYf1SKR-YVZp@^2^dYowrronreHDf~4l{D2hxh7^8C3OC8WCGtl^ z{vDA&Ci3rz{0Aa`N~ByO*)!Ndll+3oQwocwPMbc1P+}sPFOpHLEb&Q{&kWROLqkjK z2ppM0`9f+cLK8}4IwdnGVNeic7NxT(KZlZ1N*LBBDW^n*h0xCFQh5=T7~&`KP~xMK zpArTRAuXoTQpz7i&8i)yWz-U&QUgLnNGqwdidxrF+j?qiqU1Ql{Y3Lio2e9}<YX$f zQWB%)4oZ8ey`S2*QRxgS4G=2r1a}^|iwQMdqMBhM*AZ&IiBNhop&7Rjnt2C=-38Zs zpbG8<p8LT)2JUe}El<Jq8F0^ndk)+S;Gn9cmkG1ol=UiHUk6z~h3i|8{%3G~8{9kK zeh%(ka0zfj;0{3iFG&$lzl75Kk<j8#fc_KY{Aaj+3GNU$1>9F4`LA%r_^-iz1MWZI zLhw*LJQTQH;LZkj4!HBcT>$PPaF>F+8r&Xm*YMPKExgnp^XB__-rUQZ@8<>c1H5Ry znLzYI;QHZF;qoN7XTUuN?gel!fqMnqYvA4h_ZGOHgBt`l1nvO1-+=oqxR1g85!|1^ zeGcwRaPR^Yxcn8|Kfrwr?ptuX1t=i6E5Ka^ZV$M<;BEzX2e=!s_Tl;nxF^BAAW-@; zxK{-8%K}g3p9s|asz5ET2`4ZsS++?W$9Xwot5`Bn$t|oyYB^BeV>qs2Bga)A4<Xej zK*-_~fm+;*abcjmEl9ON;t04XxGmt?G3FGAsXY~_+D=T@h3VozRdl2DA7EGyhHVF` zdI!os4a0tjVLw9ZbdYo=xU&d&yU;tEpy1sE^E`*q=Q8?yjJyE73&Cr=2%{P=!>H=Z zk*>aiv0cfMT*c_C8NCPT#n&Lc_*%w)J>$O->2<duz3xt=EAB?RVjt2?_aWW%089HI zOZyPeg6;Um#wW>nsGlV~OdcVR63+HC7V3HQULqWCTfF!u<UC@ryi8t!$TuK7Jc!|5 z?|w3nAVUPngJj@6@;)J4#b;#T7Z6mzeU3yWu`T?94D>-c{(|?M?O!0^_=|Zc!P(>z zejvozF5}^4UXI=s5WKkJIv$V6<PzKL8~B0idAQ!lu8UXS%n#hea|`!k>V>!P@GQ^} zc9C0o{x<#&{&xOO9&L{$Z|~xh<lP2&k3rsRkoyesL4$nQARjTvM-B3EgM7jupEAg& z4f0uoeBK~mG{~0?@+SuQszJVPkUurZHx2S<2Klx@zGIN@8f3yC_Z#GU2Kl~09yG{b z800Sv@>d4=YlHm2AU`z7j|}p62Kjq~{DVP$VvwI2<Yxx?XM_C0Apc^JhYa#7gZ!I8 z{@oz|X^{Ui$bTE;{}|*q2KgU@{I5YCHpl@XNuFhpI}LJ|L7r`p=NRO<26>)Ao^OyB z803Wpd67Y0Y><~2<YfkVxj|lOkXIYzH3oUDL0)H&*Bj&w26>}F-eizB8|04-@)m=< z%^+_#$U6=4E`z+=An!5Adku1*LEdMO4;bWw2KkUdK5USW8suXJ`M5zoVUSN5<kJTE zj6ptYkk1+9^9K2%LB1rsE{Ln&fYJF);V@bCQ{gQw;Ag^{!iD_Ow}p370{%^w{ydH2 zf5_5zS%3fmZwmh;t5Rdn;+GC4*)fOnc`XN({U7P<e<w>5DY4&@rKz!hBTI+Ug#DLX z%I{AL2@MZ87xQ~3C1CgPfL&^UF+d6AY4Qv)=SUZj3&};~VsZ)LPtC327F(@^UP_j6 zQ;2*SspZxZ^R`;9fmkjlb=-VnEv@C6i0ul9Sx@Yj178KnxDukuN#<1$SVyw1hC7(> z?t!~CB<C7nF_YZ#8V)8BdDp_-QDo9}z>-Ds9j%;13a*E+C1i4MEw`FX3Dt2vQg{QT zZ6rlE0-K3Uy$LQ(GVQcwoRv&JsgARe88<`FJW{->hO6et%%f^>1~co}8m@vPvlq2+ zA}Kksj+;y7{1^n)lG44v?j~hbjD7Aca5syT7u9f$qCn=|3i(eW^E>OfsifjINU)MD zxE(IXl7+VdXC7H}2VABT$DI(kjyUgv%L?MU8v>6b?(5;Qn0W31Aw|S{(lX9YD(ALx z0`c7oG1<g_6U4Yk)unJZnN&|@MOeHK0?Wvf&@#?XmKH*-TP)<LYk);2M;9=bnrq>1 zDXF~=E}5k6v^vg0mf6+!v;1yIemtqqS8oH|%eaMP#a;;XkcNGbpp-Oj40A`5mG?tg z>&Y=$HQd<*mME(pfcqM<`a!rXCu<&p6b`cX9!OD0)@`oiW|Lz(mvPg``sr$sHq5Ez zHjt(}fNuubm<jc3vytPbso5U?Fi2TOHa!BDjpT&xI&J|u@llX9lbm$sGOmDZehku8 zlHh_GZXriPOKZ7fNb@9B$jKS1knrP>IzU<;f^>^WYgrvvOxn&TEJfrA2+SbSJe76J zV{q#wu@jbYxupF`kX=nqc@n~^$f;-6arvZUel53(be>Sh<&dr#)+XXl0oxqX{S>g3 zkRNa+Gc(<(8tEhmz)>L*BFF)$kr#+a17f2f5Xn*_Kua=_P0&e}b6j>$Z(sk`ZQFO8 z_QM~Ye#V&t<Seq2oB*v%HXk$MF#iK&46~k(;%R;184{u;Qj8uVS>nqiB$tRWS;hQU z0or8q^sjQ1cksOZyCh^$1{q#QMQ*@~20jz)RK7sWmUjrSeE@85`4<V<OJjEBKO~e< z8p}|w;X|3lu}tMAK9q&W^P@SjEM-Ut<(9^Bm0eOOuQZmY+$M!46~`tiKb1oHrLlbF z3n^5f!sf>clnYIv!m?PQaw`oLm2j~l<)<_>Rg0afTqK94mBywiH<&}y%VN`&4+$P< z{)mKTl*MK!zaydIvRJY5F$v8qi_KL2K!UT-fMT=+0k;CP_;R!zIjh2rp!@9h6QTme znJwGlY3}2(PAj?lc;!Jpu?G!&R@jt>P&589K3EnlL!D0uEFTo-CiZP*x>AqxE0m}C zV0pA$HP7}8ADV}Ev3bgK{9r<wtGohrl7KpSl}A7lG>NIa#s}v!w5!(<P6gV5*)kjQ z|By#SEgk{!nMNrR0}HbxjvEvg4J<^fr&!b$VEsZX>KD9n$SA6UMg2P~>K>!44!x}Z zfU^Dz3*}J0)?U;%Mxp+r7wW%QC==$i0CKv7nR|1-e+a7TGC{da2)atRfQvv7TIO>{ z-6i5JiKyomC>|9Av*j2_bSpF9hDP%ak=5MoXqt`OB`CLR2J4`dcL|A#V*@_YdqBBc z7%DlOi|~2(2#KK*es92!9Qy<WACR$fGC}0?Xq@gv0RjBcbS4&W3Ix9<s1@;=pu8c3 zsuHm(<)>&&&Z4LL5Yv4mXl7%rn63hXKhe^CA}D_nLQ4{{CCX>eP7}~h|11QTR)hje zNxAX`in8gVzCls{70^@wg1YHN*d?l>c8SVvF?3WSc9e1s>ds{7>8=;ia;+FVI(jsk z_S1tO#^6Ww;H>0>V(^Q4aJC-&CI<gZ56;npe~rPv5fQ};QP}h{{a!26??vU0VyGq& zt5H5-M$|B!4Hyn#y064yNHmE+qHOHVTB3i6%Gb<3nx4r;5-?vPq0%w%7hopXUayi= z{;MQq5A^K>^zCb<;L>7Nb=OHCVX`jaQIznwgi1FcVTxYNXEh1WO3L#vDkNZ3cmdND z>gnFWbni;2<P7PGcxYe8L-6|&Hp;pKnD%{1Imj3ixs_;wu#fy&Qho_zO9IB0UrWJ7 z(M7?!Xx+KMu6!U3ZOzGomiD1E6j%mr{kL#k4%d${*Qt80|HNGXEuqE`<T_0+?YCNK zzm=2$Q>Y*T!_`?PNH<+icex4DU1>tYAdqf`p6)u6n(jK2asv!+2^ijP#B{|xq{{(@ zJ22f{Ce&>z-nR#m&P0j$N*>0TM@?)1tcQqMdc^Y>@uC_LfQZ>BYZ|r_jQE*J>&tJO zf-9mcP=jMHFqL3xJ1`wUreBy!P)U7`{`x=Eius{Q`3Q?ws&jva+<#WN%XIFqH14lV z%HNQCu3muuAosU=0S=pj4bcYF%fbSb>mtvmz;q#HBIoIWS7YEcYT$gmPVd6NduXsI zS_HurSf|HA@Pky%{z0ldK@%n9!K8U-U`*`Wvo&W98q0*QNCG}0&rr1KHyAhu8s@W9 z{Z>6kwIaSiq4*2*{Dv^U_h@ixbSmVxP=ANN((?NiRX%_(QUX3kzrl2i^mLzKx<65^ ze>(JP`iqwCFH}*G->LI|jr`x}{4SmUELr70OICKt!0*=iuYd^UDjChn0KZ2s*Yz6z z^|Ep!d>j+-al8rBdG&PnVY&z8;Hu~<NLPvJRzvV(TDr$%<p~y<VCub3%J4apL#q<8 zRm!t6_MNRclOg<h*{Hx5WEdZBAgq_aih234TQ*~Fm9bl{e!qBN4Rp;P6YgDEd6!9n zz^nxfqjN7IL$Wd?CxUCDYt98mWxqVcK2^$l@=$bbgK|JlumsAWoY<QE*5Sj-FJ&C3 z{CXYzRxA5&W#wbcze<1Bukcy_CI^p=9t-@{0`Qk&RcriT%gQ%$aD8<BU?Q*qzW)D} zL&qj!$12~Vkj47Qc&-_QoNvY)m*_cOYE~s&YE~{c1M^Zn$6Jv3HZ$761^%P-w{nlh ze~($&2UC><OjYi~bVrM#*|G!}o@5LU6Yfc<l1B)^%cF#U(yTmdW{40Qg>vOZbMUy} z?20GI%Go4v9MtwpD5D1Rwt|eGW8Q-pREvGD497(bI%p1V3Z4)>A+U+;!7hPxKh7e8 zCq_@~hho<0?7u<w-y-`-(UX$wK&$MVqnnX^8NS|PVE>#I`enj>4yApCkk8G^7f{-8 zQ27!|u^hz~0N-Cx?BC77P&5>69t@wX`~#!wv2xlVdbb5zNf>4nZxZf&i*l|->xk!D zf?-UwGE5*^xzLgbwgg(ZKr7k_hMTr%TewZR1gJ<f5{@XB0u_x$!%^ijpteM}gtsVH zSa8-5z#=b&ysouikrRZw)^dmp5pu0XxzREhjU{ri!QEtm(#MpWA*6kXh5XnuI23MI z_M)EK3KUX{!!r}|9^vi)A@37%hef%^5<De(N+MT=H1}FUrzB#hDEllp8yaF^_gO;j zp_p5_9|bkwlb;TP9$|uhLAXaO%3~HbK|VDR?bw>*gd|T`f}PP$X6ajblF<;glYyB& zWeIj+FA8*#L?BLfHeg>;p0fnIqupwP=NX+$@WSu}9IR^LX(mG<-qH*47CcQQdCQ`_ zjfGr^g*+A85R32Q-nS?REikoYMxHF81;w!i%C9WytUPN81bzUO-WBb7l;OmF2poyn z0yM#`d;}3ci2gv0_*jcTgp^N^jxGX0f5I$}!7S?_%P;jJeQ8k+S=8bAD+|s{_b`;J zzgg5}#@{W$$?UNv6SNW)=z)guPn5I@yZR81b2Qetj(=Ynup;LkHt{{nx<c7yHF^bp zE39m8d<q8P*8;OS+d7E1C1OUh*9h>@6#J!9lyj^`FENt4F$k06)13>+;Z|}h7g$kM zIp;o{jzAl~$f{gq4fY0lIV{*E)=*y}+P^ht7Noh<iVYq<`Y02oz~#ziEF=-wO15TU z{atPiZmUp8U>n&Q>r<|@hT7o%Z+IVTQ?9axB5?b6b{kQywuYi``ww;-RrXjzTj2Je z>~@QCt#vR_zY(Wq*3i5JEKqK;vhl^O4=;PIp^P%9`dh3adl^*styZYo)mXKUV%6Sf zRjZag(*suJ0c-I1mB+JZddQl9jQ))og|{mYv%CMnyNYkfzVHs^5o_?Y=xI3)c%H|s zsJ^W(4)d_BKF+v9nDmFNl{^Unzyfy}aQ7^W{x1{#L*;pP_bt2YS6*OuhuPhalo#3E zSv+RDliwFUU3rOx?81=n8OqCWcV_g=9O$1V+(0$v1+lv^cAz>uK$KTTWjI%3IEyGh zVe-yr@^%vCRd#zJ%kUz|a2HWtw}#3Sv2x`ND-J_zuz|av>fW_t0}pZUT9t$~l$F3$ zu~lv7`>kr*e&4E%f(NkH*Wy^3i}QOc&hIsz4>4+;9`$>S`lA;02}T{Oe;WRbQD0)v zdXvd)IgCs8ukrQmMiX+o5!E=C``UVlT*;HOZ8)~^=h&2QtcgA9QjnQlLqIs2R;aUW zu#Vh)Ksm>T<6i$k<viO^h0SQT$w}V+2e;;2fbIS&UbxVvTxc5{n%62xjuuIlAYbJo z+Yq=CPPy0?+)bjp$^K;0+lHd&kXr-i5)wF%@Z~Cc^5wP`v4kr*j6s<G3fo|dnAi(T z*h?V>5@=Ju;f2V41?CM`+e#ahYi(ulDmLJ&D1>Ub-G;B?dY-%8rrc{&SHb&iP*Y9F zF&8)<(m5WoDNoqgq&%0kOWPpcz>@wc<ll(=lW@k(_;2F5H*Lz#Y>B~rklk_kCQ#TP zAyWC&7CfIs&nFDSPbFbpZvq;pM!2v)9)%U*H`b=k96q-xU)VzDlSJ%%qI`+@ZQ==$ z>)E!8C-^K;jo3X$qR$aWaCLOGBltXtJ`eN@B>Dneo*~g^^otG%6?+;Rf~v#)E;kGg zD$b5osK7)zx`D|x0feX2gbTyHToR1QmKx*#PS8SXN|sQ_7i5X!DG`YZ)I&Hz5T8dz zg77ep{)%W1waA`)sFrqiRBTZlT*EEx9qoNPQgItj#>2oGPxUaK@1d10*EOzLUR$@S zo|9Ff9TB>^c1`Vy`sGwTjn`&Vm4BP-kE>tPWL3{)vC}R^Yu2ton3~m%O-+q!Ry3#b zO<oi4S{Co@Y-cuEQWD9v%a+w|*sylJ9A-95;ytF-^-T?Hmzz2xeX)3(Z`>ECRlwq5 z6##E>I7C!7J42b0aqqmbD{y$FBfb>s)2AjcacC;46e98bshQ<~rvoj9WHTP5$1`fZ zd6*v052gyqA6f7cr^A0_m0J}&Og*$p+jhWRd#i*XV3Cq-;T}9PSY6x|FK$Z#sVasH zdv+8@<2}V?1!cwYE@0?dprtLw>MAZHWfjTfo&AtecSmHTkoHKgD#pshs7ZygYD-?Y ztu5t=)Mu38MTQZ!!`ju~xeV*5C&D0pG|g*UYf6Qvm5A?cyw@}ARpgIWwIz=1*5P5f zI)qnBpaCV6sbRREptW29sv}k0-#8`EPwkHSQb((W5{E6KYt=)$$poI%G!w~dG_ec` zL2mC=`xf8XCWL#om|0HjoGMeHcP8Iye^+a~Yb(@1q^(%*-^Kd-DQ@p7W>r>P=9*Y> zQlCIqv=*a1@lL)kF2ms0jb*5qfUIOM8TTNvZ`^~(S{|E6b}1D%uF}bDV|zrW%T*~l z-Cn2YbhuoqxoxM*ExKGz58Bc8p}{2&0=v6KkH_y9A(2P)dcDrfVGU1o`5lhTVHplb zp7hvMXs3cAc2;h(G(Epao{{erO@slynbnJIwh;6Dbj&9kgK^1XMy_)i9Hj=KOr}yY z&78?+6!Ye6-aM1fn8l-|YckI~pQmC46&9eqBw-;H7onMJ;-*$+-I`RRIV5pD6_%Kf z<}+$}X4Lv5Y7Ux%f{fr#gtJT<$R*Yy=gvaT>f`wmn|1Nd`Beg3%a#qyuUg7mt=5Kt z`T%lgH}Wf29kZJGYnZ>5`RkZ}Ec4ehe*^QIn7@(v$1(qS=5J#D3Cur{`I|!=yEc<@ zD?-j7V!VYTRAxw0@^p4FXQBZhOFkMFvd%=yLADGu=VPCX7KJi6N&~bgn-I<vFcoDY zP<%ivvcgAK3P?qELIgg*7g5BI50D~}5J?CKMP~fLkCJi(y35Rx8CcCa_1CIg<JYR$ z2K3Zi1A1zKiad3Q*hE)Is<6kTLnK4;hfEcjG1DQEWm+1d71=SW8ydxJ=mynDbpw!X zA$cPglU4A%RfCC`Sy_$0TfyX0eog>}ZnRBu0Qd_?cZ3uVSUY*V*w98v3D+qyOC^U$ zA=j<+L<sJiq7jj(9T}BAv{JGs=M=&z+aNL{m>J0AHgbUso<*M)A<7R+xK<GX>Z4iP zceY9hMqgp7BL}m}U^3exwTQD@O)aK*t#m4`fKc{6-1^$jOd8v#$y7GEBr$vF@L?#i zxL+2OA0;K`{Qo0yFFvhuMuZtd3FLCUouV>;H!#o6^TIrL7h&1u?a9H#{B9DQR8gXw zgB)aU#hkrp_6Os$_g0kdMMFecFn?7pQYDa#xo~p{rYTb{)zZw}t0#cvE!m6tvV>^V zCm-*k1<d|SJ~PpyS2_lT?aFnGXyC-joH&Im<VX=WmE*14G)}N_f<PttUYykKWmae2 zhd1lu_7de*f?INXa&|*$ZYQDX&?=@YcS3foBn24Bvbz`F`av}eYFE^2_dwPhtX*;c zYy`ue*J@&wi$AXJL(tcu{VfvKtx1+#qLBR_)U7BBLoyH5S;A%D4-EIQ0t9D7XGDuj z;V~W}+8&`OnkD(?xSoC@X(-3fKS5G$<jm)ufJRtFo*-y7VJ6~)V~s!wO?nAiMF!~I zVrr3Qx6&3muT@sd$Vd5oxPnErwHAt{lx6BNN!bY~B^0<tltrx3(!fliTzTfZiWj5e zcMuQDl$qdtryQiHbi^E#=UA&KW0^cpR&e|*Y!kCNV&f#iEK2udn|O`cm$0;o(7{_J zSoWH*YF}eji~dp`{iB38i1G%OktTMw%2_Q~D!GNu#*~N1(c+s#c@yoG&p|25Tckx& zU-L{{=GI7W6Xk6PE8(K{Xes2OyhDasO#8$3EZjIxU{|O^Q%q@n#wFA2Yv6g{(UkX9 zBlRXxT7wIIEcEV!he$p5YbafSpud9u4N-oBWfY-|QdX|k_oweZsQi`;?N97SQy19J zKT-R+@-acYPpYGN<tX{Vd1xfVfgYlHl_yt%{84GBcMPGYcM<B5s75Y?!-o&k432w3 zgYeQ>su|1oSS)2U)YmSrU$28>&1~(7z+|SDtz+7?2?6T;piU4wzt1_22!^K?Z80kv z0<t&v#^T$Sb;NrkD!g`PUwdCiq!Cy(&H1D*2LmxuLB=zaNJXjwi;gxWABQH2mesDJ z&Am{f{@x7js%h7lnwfOFdeH*2o0C~;AtNB7tUVFb6=Wuh?W(yNO?4~9s*gJV)l}N- zEd9Ek_IMA}lBu4VQ8KGy>bu%(>T_tC5_R$I>T^s@dw*<^4yiSmJk5&Ilu_QX+8ETy zu$|#Y)%L0yvdmN_mIN5AEM{H2qrG)UehSXOG9y@68weydWHVdBt*373iT8J@%9`2g z`(I{A937oy&S)h}D;28bv6;O-sn)eaGuW#zv`o~um%O)V@PT#V(Ge4@twuwdF<L27 z0FS1R7T=LXtI-y3a&6s)wW~HZ)!UYZ;aPjt_hf@Nw!FPZHN9+46J&1F!z~SK*EgQH zc1=_5s$oz!=>P$v;E&lgEPb^(j#tvL9z?A;e2`If$?R#}Vmt}Gx@zUHX!fEQJdh#( zxc1044a=*xt4&kSwWap8aYQjNj$}`qIVK~<GK>h;EwYC9-6JGK90#@P7LLZ4YR{m* zHx*0CTHm%s2P)&Yc9J;X(kHa^b%4Wb54aW@Q&p(4x=~n4ZCJM&bY@Gur!CTxRIJV& zc8_YzIm5!5;@x?}f|y$Kq+x+|acKFSBI-=3$Phwbyjx;wQ>GRchbz2>NEi~SMIEjR zIG&Q|?9pm0<;mDvVf!1YJ0W(qrUaTHWsLfI(l~JEBpswK9ZE%FX}qJ!Nw>bHDgdT^ ztqknLG)#a|RCF`6u}*u4Y<;vzet2ZoreGjSLp{{+E-b4V7#sFw%j&foH`F&TUwizT zDSDD-hSjz_zO769T3CC++w`ntw(kIRPI81}w>Yxq=o0FZBXhyXAl5N*wQxOf!>R3E zlZ*j9rO>%XD60S*AybC_#!mRo8R+~;ZQL>N6AX-;als(efqsL|o2qD-0^2AtE`~Fx zeF~B(OzOR9q@9lJl#js1ZhUS_Kf7SE+?2?*TO&OfZi{Qga0YxsjG;{<kf9)zLBle@ zxU9C68)O^?rIHTPVq?0%8eE^WY*pj3V<x8vZf*tEQ?=GnF@9T5Z>d?WY^Tf^>QhyP zZTfemC*Bzu*Eoz-HOI}QE<8g1!!p!BAGbu}oo0mLgkiZOBI7$`s3u87t`y8MzNJ&M zMng4yR9!Ds9jmZysIVy-Mx<RG__Tq?rq3ozoKEMF_m)$DZj+rLClygeMd8a!ha6D@ zOU8jqNsbNw$1qp49r<ze(?=*|GxP_cGrT<=7RaXcmK1EXF<-F$N>o+<l!=~6eGB8j zwk#T7@<@p)l&1lGV-9z8sAwB$n3lQ5L@+rbOde&#V?&`uA5m*H^tKT*9Ye6Zq9@!9 zpVMB1@v+5HzLa)-pk-A?wlJuXwXD&q=prgjVpg?Q7#mebsZC;Md)Fo#E_IqTDR%Y^ z(0gqfdZ)ZaD}&Suqj8U!0Zs+lJ38bx_)cJ#g6VP_1~7&3be;d4kuPC1pkuyuJKws4 zZ{5bX#^#Oxl2XTvG#oPu6W#uv-iR40S^a>|&{qf=M=wGwr9dRu8K8vz<}CVmzqZd} zgt|vvJ&Z3m6%cp9=ue~W!;ctM=8wlcY_25Y`y*YXeeQUP(q3{`WSjA1d8}DR+SFOv zvUm@sE+1D`YIUh-EMiY&%O(>8%G!kV2`YU;I-Z<1>sY<^xccd75$e<f?Xzkhm+_&K zWL3__byG)?vawsoZ#fcfmsJ(Bs=oHP`U1wRN>~*MCkrxv{8q^9XD;svZ-KtBC0G4A zrLEBsVs_q<WW>955%Z5U{YR)D?KL_l%A1_SxF(QdL;Biw!32^Rje)lJu8VhX?6#-X zi+8-nH0JEHdfX;BZtJn7R;m9x%1O2#_qYj1Z!Q+LXEf{=PMAoo-B9ltPuy6OEIH8M z#g^^g3o1y@bhADq!Jp<3TE@*_f`D?koD(<2oIIm|_$yUT@T>e@Yf8&Ryq_u`!t=O% zlGE?;ASzI$uTsX}K-*zHCpo=7AA-`j-CoJ%sPwoIf2Xq2Vytc%@(Bc2IT1{x%I~OR z=sP};<adK?zt7`C2$M<=CUrO^ccsq-JU+kImp!88OCG1oTP3;teif_6;{};0!Rht- zoc6Rv47^o-ES$p$vfUnsFK1-G0H#VTdu5f|FFE1jGAEbwP;^9vak~6I7b3klfv)r+ zjEfTr2^l+p2GZ+FMH#X5_4G$7qT!BSSXuxnIX!;A3xRuln8xct(3dKIr3UzD(*e}r zi;J*K4tzY1%j2G^S8_!x-qU^>zWk1ga7%BzqrVS?R#v+4o%kG8CJkl>YR2J4@FWkE z)9r$X_P8MoUZ2AaG=jar3w2dG3dUH!LcR{CgW<YVN>D_n+nk(q9vP8k!gdB_tXq6q zv)YWiySC({m4i*IGTPJjesOCjoXWJ2C5CjkM@+RJjoG=547T`L+ux^I{)UNKn@Qb8 zwX>*3&2G5LnB3lw*i21@QNr1s8eP``vmu1cl6A3E6QWrb&raFB)$EZcH)1s#?*>AR z4o$;%#WQ+iu!z_OwWgYBSFvj{^-yh_ZzMvEMMIuzig(*JQvKv-#vr-_S!z4FV`0rS zy*Z3N9zN0Ln{2bSmjTGBa5V^%0}Dp@jA?P%Z7?<7z{;T`zPGaJ#QJbsdw;Js17(>^ z>5R99JDPgJFy<i8RO^oA{c1N5o7y{J6+b+h<uGYPa9u}#PxgpVtKJ1xguCrVU7cq* z96+~#mFUFkHF{m$M(-thqDBoOdRqixMTy=!i&(u!x54UNv>*hD=rw9s5xXp|@BX=E z&NDN=<~+~*o%7CnMEd0vV(f67YP<Al3Qjylf0*`ba?Wp<8sh%!hvhI&&@paz?f9W! zy_D}J*f@*!^fhpeTI9lfLOt)ukvF`5(gG;asvNd@$g4EWP268<ese*k<XDP#)QW1v zMcmOd>4W>)n<V9D&x}x%{K0u+N}R}N-N6h+VN4=B0GskXzZI5?U$Rc*UK$sE!#YGD zc}^#z(!qZ_8zp!dnj_jKz+!ojnh33-c=E?e<L2B1IKQpxh>Qte#Ty2ieWOqomgfLE zgY+k_iXZC~WOV}CVy_IoX+BeucxmV>L6c+P!%vf1y7le5k=jVmgp^TBLV|mBpdgK; zK}%kO3b4(nIXQs>s8NH!^9kB{2P{$@c>#Q9*qm?qzPcj^$>a7*$MaWph+IXL;byD} zhN2brVg$q|lbL`U<pje^?MgH_4^{<<usuEEC}!6~P&ed+58X@-SYw|8RpE{JckTn$ z<fj_mQfjEwffKv{5`+~IcRPh!AMS5CqKbg<E~XU)?=X=PnJcxGGUZ6l)PYMMZ~YJN zGjdsZy+iO;^!s~=PbIt?seo#^x6g|Q&b=rsF`U3&-1f+ge^hQEtflNsNIAqk{mP$# zTkI9qfe@TiWA8AWD+a_2yUeR-r6C%ZbLtDKs9dEX7%R?!ZU3c;Hvt>ts*1P4;2XY@ zGc&?_0*4EI#9gAnMc?MN(nj&(7`QNDU%6I>u3<l1E>41YiG=M~wQw4yK9U&T9aRMv zj^3CI@5PB|#9>@r*Z^<v_fV{)LS%1D5q(cq3gmZL39dL0?QD;M$*fUlIh)rkEB4&? zI1RsQ4n(}sywcU2n_&QGoMrE3&85=D9m%OxA#p5PJf)2J%h#Q;zYH|E@cygEQ(HO$ zo4tMvMw985;U>67U$Ay9$+Fy^7=RXiVf!X2-xo&+WDy4;%u=`SaMl$6hU!R%ULRET zJ;y)gxdLe2urQ!x28tX17BkppUc@b2OAQuWlX1!1Dm|JM>nF$1aWwLFp~B&T4;?=Q z(BW_h_?o3~o3RnwYrFNgHNo0tAc{^Jtoj(SR%d<n$xOY$?kYf(=&X7*;2g7x>A@&q z6cx1}7>lb5@-s{%W(cDu9}>m;ijCo-df;#Fe{&X$JI46v&;P?&M5y#Sq=_)?2;ifs zB7+y$Y(Zm7WJt0|OpQvfYnl>htep(`Bofo1((9f^6v-_9;J*D2d?Gsb0CDI>VzO24 zmf4g<$JWnKs-`@Dl%AG`l6XCT_%j&S)4qPr$|Tk&HKs(r!%Bvvk~kQ`RG}vBhmq#_ zNw-t4G4c|rN*6Pt)13}~>G1b+@F8PtG?ADIwtKg<Fwj^Z(~c4;(iR`>6^Z%C3Lp%C zHW{;ZMZu$2al%r(3%wh>dtcbRPNO5HJJ=b)hs3Mc0AXL<cN~>%Qg(h~XjFSOtoikN zbO6&74YdCVa{%iSsz|VuMdsUp3P#?o)hZ0jrsd|7w*_gW*Mt!bbiq=D{Mzr3B=Z?7 zxrL7+!8+v2BsE~#P||SMSAA@<IpuHdHiY^EYQ6Kl-v^yN;UBP+Ii;SP^f41RPG(R4 zx3W~OaOLkBAXUD)TE51OS0ulM9^_R0s2TN{RN(9C5bHe)AtFb?K-^{h%(<I9&<Olz z37kp9LT_<Jo)R2MPShJauf}4y?n;)5ol2ZaG;Vs0P=@ws%)Y9;AC{fwA}saW5>KI= zH!g?fYi!7wPSQ|7Ov&2QIrq9Y!L-e}ZiqSO+5R?@p|4Gr@t!=1ZB`qLZ`c|1Gij$a z#HHAS^q|&cQ#MAE&v|5Slm|UBx~PPWwQQc}PO@cAv87OEgy9nTqRWeGp#p4~Mc63^ z4ij(yRE@YEsGAOt@%3>yJZ5}Mv0kY_pf}>sX+ET&?;$BZWHkhlHp1XMnqdRkMt%P2 z04=6{{ZIFiii^(Tf;XMovW(T>3YXEL&8T*HT}w1Pvm^gd+5#}KzpCnnn3oanLu6B- z67bq<+DVw)5E>~D&TJ^<R$%;hA6jhM9T7EQi{b5tZS?`G19(jb+SeUn#+LsHW17Od z;OmCSlx{)PL-W<3D}<E9<8uqGD|&Cg+k1nunQy7mGPK>M34I~u|6U@-@z8@v#!c;r zWkzfxU}>es2c-f!LVca_mR;ud*FTZh{RuIn*<b1`dz?->?U%e<mIGJL^Iu4xmp_!R zF2*;Zi)~tdx^=f%#&WV<TaHs6@6QQmGlzoXM8^Al%X#ip)!jdc=HH4Tv+Is2@Sk`? zED4Dm#Z(~Hgz+O{hCfB3%I9*+<@sZBduFSdLHz4+?7n!(dD+<f4*ZE0S+V75G&pq= z+eTxiv~YGEBIATE(|&lx`{>si&lGLM%ksVn?$Va%y>umUh})g0r<bD<aXa>OZ4MwT zS$VxSAukNAT^awtk3W=|)%D0JB)$EoT=DGvn=@)SB8+HaY4Ek`gyu>-#-%sqFnsor z9vaBxkKacFAYhZ`mgTmrK6LmgifRG~e&QpiPOq1dsm9~SufnfXMZFM{77`_E?Nq0^ z8+Q5=BQHX;@G!F{pN+xIJB&!Dlcr5tnHt~talCrCbtJqL{(aV+KDlHmp0Kqv#%AWX zI^vO`$e#Lsb%~T1BgBjL<qxWS1uEo1x{#hBl`4$T0Jgq;qwBJ(-7ja~9KW)pGIevd zMtL^zIKkZi({EexPWn&hOQm1}NlR!fftV7Yq;0<eM$%f)N_!e6z}R{(7ilpqpz8Qi zEH^d-2cnMdiIWyKl#v%9`RaBr#(hX7;T9TLh_uk*SERelK}XZq5t=BIh1Hl{vWp?u z5KX1vT~$hR<%#UZCStuHnpYn_P|;}zYNQQRE7O>$ozY}i;+knqyfhk1`jXce^Us3# z<bshO!PgY01|#E<E+*+^Nf&gmJ`><Wy(A*PWp^Vcw!s_la*bHe$Z9Vs;Vmxc!#(My zUPgCyZm4L#kBOr8d&I1KYzDWialR}p$EmNjI4EYAuBHk%6|HpyVCtdS#2+{HhG7#H zJTIMna<nH8Ju;ySGCa^BONCfp3X8!}wa0jDhZ^coR5MX)-2&ZIllU<Y{OesM);W3Z zS$EZbh&RC=3+xwg+B18v?c-kCTu1$b_;6SOEUPY=!8@Ro5=M;Kj;<P5=TgMIBbtM6 z6uAUF#$^7s;!$5c)988s7HQzRK#jy#;D%j$RcIzbvcFi!J5<TLGExh$>+kYY`5^#) zh`Y#%c`Yf<RUmL?<LmgbhEd^2zG#;i|IFrdlCF}8#L8iV?{t6L<FJ(mB1dlmO7Y(& zB7D7mRCPx+zXS+We9-||RdgpcF96(iQYBP8T9Lp};TZFT=0u9fvEl0@`9;4;iJJF6 ze&bNWH)=Em2!KMs#(YaYE$g~&M`B?j!Od$cM|I}&_A$N)*N{F>9j?-sLgLWl{c)JX z6cKhFv?W{@Lf1iSueHJV7>`G<S~5SJGlSLUw-^1W7Qq!$Cerm|+M~5&`_D*Ts-al} zMJY0#L-(=!rO{R_O$+PI`(rS&Pm<kYR?$PwkoJeA!)JdD_b)Y6UsKhcb=+NB|D~>m zRV_UzA=w{P+KJ&>>MCklX=f9Zap3?YM^-6vc9TMR49tct$l<ROV&Y3(x0P7v`=?L4 zc$&+%XdiYXeFgLNLWU(Z4H1J<US`nj&3jy#`qU!oUq2;3?iRe1ZBKs}GP;~iH#a0B z0I$AcE?C%)EmwSYi|5OXE)cwRvWs4`dYbncZnQ6=cf`?t_GK+-{Nyxii{J9##GLzx zcR0}}e9Gr-EJAH1UjGQ=TA9g&QWXBqa2AnYP?Ub`wpswJTzuw+DvH|=H!a(yEHEjd z)S`0%nAcWKa5}DBbM=dd0QS__YPOAf9Naz`2oxk-W<*+XCG5?A@aZTtbqcL0EHuYM z=s44p?$dDvB_AFTIx9XWVY*a|Zf`dIbCkRu{rv4Lm_6Vv@c^2etnrz%yDeQuDnS!r z#1q-JLvFLq`Gl$m8~+y1PkHt`0T1J0lMKHn^0Ck43GU3>jo)3Up4-~zOmzk%c5Pp6 zIKAWp;O&sM9UiL&8%h9{8@45Tc7WW6z+gj3cy&$|A5h!ymxW0(Wp=cjgOo_3`bm}r zeixfzmx)UJay^{jQ(|4!_@4#c(T*$H_1f%|p^%o|9G9!fmEj7&y%385+7S?NUOZu( zW){&{gVBjwkBxOG3@d|}@wRODU9==02Qt5Ryp2M{@++Aoxh|NI?Zydu4}Q$(FOwaz z(t0jaxi_BXC_h7mY1R!*GYK;M@cA$G_9%=e8KdC3V<mep*AtbB%4yij0=apPZ_FRB z&oi*86}I00KD`Ck@cFX>$fd6`b5*QW!xS_;Sr372GPM`?R|29@sUS-gi8>l`@x_P+ z)#?jbD>PCI`|<{MxN?-xIA492sOu7lq8Xh9>@nt$ZfZyNfpUf##Z6W&v)Hc^nc2z0 zzKNc|bLLDzF1k_Ve^hLs5|lws*Wc*FHWc@-lTKKpo)=4Go_pb%>ubwBlB6f?rd)9m zJ=3ZF+TW_-^-b+_?(>+xf5M7A;G2ra@^utSue{2KIUR2i;d2ZQOHzzUo&%Ik3tI2l zeQ<BrzRxOKFDJRsGNImmnn}Q4^tP@lfo5%f?M(WtzV|+hsgsO`;e4mf0N3kEPw1nN zjHiT-Q-@=z;K?*49EMar5Y*VstN-Mb_|PXVA3Labv}tW@-$lfs$3yf%5VH8?=?eHv zi)qK;=gBb_7%}-eW-1jHvx5SP9R7YS3iD+maH5o|V))ErS$m14fY0(Y$oQaCY3`ae zqc&SdF053waZ^#4g_ZRlR7q+YeqMJv<*t_o^Yx6&B?G{TZt=3!oU-*iIr2R`Re9|v z@6Z4j+$?5%Y4C;*=SaARB0*P8{EV_L1ftaYVlMGcRmXo$i(E>$baZTid6@zD>b6ka zGJGDtP%`HD8`hn1+toKQB~V6h%mHr;ub9bet71XJGi%&+iI`+P!u8B2<qAy9<Lo2M z#Ar6Mlem*VgjTD<L>eQaPfOtV+f>#n)V-^+&WMy1E`qVZ)###>9jo!+`Qa;2$EV$N zg()5~3tM_rh1ju>i<$_%%{xfBHahVbkLQLYq&c33C*PlSefXi&bdlchRJW2gO{%8! z`y@1F*VQ-5zNC7GVSav+vkcuOJkjh0S!6~EN$e4>tNQd)&V#aS8!DK)aw_O_lij9m z<H0g&IMz@J9vFOq<HSYW@%KB!SyNHx$6QI~gGt<V=7TBRgU#wM1k;&xlM=X*Z{jiL z9F)3AP{w5k9kShWT%7u>ziLg%8Q6ra`AI^V3$EgVRIY!hl#y1?{gViqz8+Iad8aMD z$YZ@gpFF*7iiuF3pG<KZ+IRyRCKc)Gkr(IJA_-w`>59K1nr$~m%F^@lqX}}o4Bk@K z8B;Eghh}Cx;QU(S{9`iu<N0ZFOM_t0vxv-)txB#hp<$p^V){QOSe_H6#!pH+K7?Jt zFR<Dt>#84h2qPjFmmri+W1^8s?tymu7gO&H<I7C+tBkGj{5FH5-z$zN1nAOY9JApc zZcYsyPti|v-tU0LTQ5j+uJTV+)0o-;Sme1a`y5~y4;^P(Y8BbT9v)|oz7lKw$)ICU zNMwwr$*IL`R$S<UUB4cLT?Sp9J#3$MsxALQAcZ$3F5^Mb&v>K_a?9q{3s$S7?R5lB z27%<1^5|v^sXezD?y9Gp23yqW?}hT^=Sk!iruIDNjSE<lW5yPF=!X)%Mwko6ulL0T zrumoYFHbS6|4fy6#$Ge}x1??>ij<$*kW8sGK2KZTJ;-!!Qai(X#JAG9Ykv5tAugF4 zg`(KcG!%zYkJb*Pv_0dS0i_Zs-sYbbPB}*hs>9MrG2S-U20ZE*#prO9lTno;_a@MG z9H_)DY*>aZ;-GFTU)lkE6=j(=PU%wI>lkk+J(IEOKEOn?m#Vfu*#c{rNYHGWKx&|S zGPI2fkjfYe{EMy4q=Y5aHLkWNP;tAYpuezZor)?4L9G=L&U2R|p-{h`X`@D>9NYr< zl^yj^KnNCOl8+$@6Ql#+m=p@O`A6mdISqo)qk%rOFFbm=2?45mcK`*;23=n9lOQH^ z(E0hp3(znk!-)bDg+=r4*i7|)MJR2`C8ukyg`X})@?KE7VJC~TkxT|xUb7!=5Xjx{ zoie>p7NrS~mhRxb^|)op$wbul6T@F%NZD;TXpCCz!q4(9QdKIfI{*^*>QW_C@F$N? z<6%h{U^=2Lnf5nxzaoikTTmkO;@i62xdi{Gam{pVXcrDKjHVmA(LB?qXm>HPi_(E^ zt}q+xg#y;a5R1S`15Pt>Cx;U694>92Lbk4X(~`rQklxK2S8B<a5%gxmo93Sda;*%A z+VhQatg7%J^7i)_Hh*ze-kVPI*Y<3Bw)_qCoDZt9$I}Oe|HmBFM)Sn@9rb#1X$Q4H z53fW3AMu;Zo+^1t?&&|1w9XRx_qda09vsY{#R+;@m0Gf9`U<a$G9e51_KE%vZy?M@ zuBA7P6*!{)p@;_78LLyjwwxNj^S^*qg}(8CB`cJq>%{}~YZ0AHBMCXOKdz6Tk^j{r zHX`Moatriia7$po?1FJyr*mcv*NGjXeVwR^qKA1uU1~}YyOW?Jzl*3?xsVT<VJ&36 z`q2L--){K#PWc$M*(3~gFctdBL$fsx7qZQLyrnk4Eh(Iy9Mau0MdI!$GOV6>(pvx` zxSq>-(&3GrBku9N-J-cOkld8-N3}{IM{#|VOkB9XWJAj?O)zO$ZG9Ur$l=EilLK>) z&#U+v>szA{P}!<*{R!Fkd|L-!=#Kv`4Qtj(fBk2`msN?di>%kf(wr6&7ioN9=+Sz6 zRsFo}-s8K|O>Akwm(XW%Z5t4l8(N|+36WyYW}jN?jHoPgT(D463GjJ_Z>uh24Oj?q zq+D0lsnJj8*-oTRwV~VA{jmoN42pAl`}K%jt9@GU;_*T^_6jXPC~wa?6#iq(`^_nr znD*z0E}~(cw16%%$cJ^JZ;lNK1V4tPtqH^h$!&nm$rdaVPg#3SN<CgAr{(slzmaRa zqbNlD!Y;)PoYsU)ho)Bwd>ie}hYZP$Y|99>?!1e4ul*DvEv6`u<ep!17gam+E10Fa zlg(HmhrJOv)NN1dI7u*Aad_C&$FN{mM^ZKHc-&WxBSfY@>S(vNT4KCHR7w@&-2?W^ zWXn+2)adoF5BYHtku^WUV=rTGZ#`ml$4NPtMllB%m9Ps4U-r>1$YNS0EEU^kVaoFp zOig_NmSF6jPOqCN#E-a|0(5_@l1@9dkul{7e=Io~oAr-sKDs}UB%k*OtxAW|-(p)G zldiUj_ENuV^yvx@eRS&)z6CZQFBSof2j0173*6_P8}_f_GL$#=u>CVK;v;VKzY71M ziDm&PWE~SU7iHkGJvI=3rq{8!O7=zyrHxOX#6EyZhSr}7eXP7CSM`b9GSDR;?1nKg zJUYO~iujF>WuS|VLybj^MfecoZ;ze^d?bA_D2;_x48y@9!TSHh-p<d?!^>GX(9`4p rAN=1*|L?(@hjbpUZ{FIyg$VlwI2q{T;r}Nu&O^L?*rhoL9@hT?wIvf4 literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/ANTLRFileStream.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/ANTLRFileStream.as new file mode 100644 index 0000000..202e004 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/ANTLRFileStream.as @@ -0,0 +1,36 @@ +package org.antlr.runtime { + import flash.filesystem.File; + import flash.filesystem.FileMode; + import flash.filesystem.FileStream; + import flash.system.System; + + public class ANTLRFileStream extends ANTLRStringStream { + protected var _file:File; + + public function ANTLRFileStream(file:File, encoding:String = null) { + load(file, encoding); + } + + public function load(file:File, encoding:String = null):void { + _file = file; + if (encoding == null) { + encoding = File.systemCharset; + } + + var stream:FileStream = new FileStream(); + + try { + stream.open(file, FileMode.READ); + data = stream.readMultiByte(file.size, encoding); + n = data.length; + } + finally { + stream.close(); + } + } + + public override function get sourceName():String { + return _file.name; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/ANTLRStringStream.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/ANTLRStringStream.as new file mode 100644 index 0000000..8b375a0 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/ANTLRStringStream.as @@ -0,0 +1,212 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime { + + public class ANTLRStringStream implements CharStream { + /** The data being scanned */ + protected var data:String; + + /** How many characters are actually in the buffer */ + protected var n:int; + + /** 0..n-1 index into string of next char */ + protected var p:int = 0; + + /** line number 1..n within the input */ + protected var _line:int = 1; + + /** The index of the character relative to the beginning of the line 0..n-1 */ + protected var _charPositionInLine:int = 0; + + /** tracks how deep mark() calls are nested */ + protected var markDepth:int = 0; + + /** A list of CharStreamState objects that tracks the stream state + * values line, charPositionInLine, and p that can change as you + * move through the input stream. Indexed from 1..markDepth. + * A null is kept @ index 0. Create upon first call to mark(). + */ + protected var markers:Array; + + /** Track the last mark() call result value for use in rewind(). */ + protected var lastMarker:int; + + protected var _sourceName:String; + + protected var _lineDelimiter:String; + + /** Copy data in string to a local char array */ + public function ANTLRStringStream(input:String = null, lineDelimiter:String = "\n") { + this._lineDelimiter = lineDelimiter; + if (input != null) { + this.data = input; + this.n = input.length; + } + } + + /** Reset the stream so that it's in the same state it was + * when the object was created *except* the data array is not + * touched. + */ + public function reset():void { + p = 0; + _line = 1; + _charPositionInLine = 0; + markDepth = 0; + } + + public function consume():void { + if ( p < n ) { + _charPositionInLine++; + if ( data.charAt(p)==_lineDelimiter ) { + _line++; + _charPositionInLine=0; + } + p++; + } + } + + public function LA(i:int):int { + if ( i==0 ) { + return 0; // undefined + } + if ( i<0 ) { + i++; // e.g., translate LA(-1) to use offset i=0; then data[p+0-1] + if ( (p+i-1) < 0 ) { + return CharStreamConstants.EOF; // invalid; no char before first char + } + } + + if ( (p+i-1) >= n ) { + return CharStreamConstants.EOF; + } + return data.charCodeAt(p+i-1); + } + + public function LT(i:int):int { + return LA(i); + } + + /** Return the current input symbol index 0..n where n indicates the + * last symbol has been read. The index is the index of char to + * be returned from LA(1). + */ + public function get index():int { + return p; + } + + public function get size():int { + return n; + } + + public function mark():int { + if ( markers==null ) { + markers = new Array(); + markers.push(null); // depth 0 means no backtracking, leave blank + } + markDepth++; + var state:CharStreamState = null; + if ( markDepth>=markers.length ) { + state = new CharStreamState(); + markers.push(state); + } + else { + state = CharStreamState(markers[markDepth]); + } + state.p = p; + state.line = _line; + state.charPositionInLine = _charPositionInLine; + lastMarker = markDepth; + return markDepth; + } + + public function rewindTo(m:int):void { + var state:CharStreamState = CharStreamState(markers[m]); + // restore stream state + seek(state.p); + _line = state.line; + _charPositionInLine = state.charPositionInLine; + release(m); + } + + public function rewind():void { + rewindTo(lastMarker); + } + + public function release(marker:int):void { + // unwind any other markers made after m and release m + markDepth = marker; + // release this marker + markDepth--; + } + + /** consume() ahead until p==index; can't just set p=index as we must + * update line and charPositionInLine. + */ + public function seek(index:int):void { + if ( index<=p ) { + p = index; // just jump; don't update stream state (line, ...) + return; + } + // seek forward, consume until p hits index + while ( p<index ) { + consume(); + } + } + + public function substring(start:int, stop:int):String { + return data.substring(start, stop + 1); + } + + public function get line():int { + return _line; + } + + public function get charPositionInLine():int { + return _charPositionInLine; + } + + public function set line(line:int):void { + this._line = line; + } + + public function set charPositionInLine(pos:int):void { + this._charPositionInLine = pos; + } + + public function get sourceName():String { + return _sourceName; + } + + public function set sourceName(sourceName:String):void { + _sourceName = sourceName; + } + + } + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/BaseRecognizer.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/BaseRecognizer.as new file mode 100644 index 0000000..90c3feb --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/BaseRecognizer.as @@ -0,0 +1,813 @@ +package org.antlr.runtime { + + /** A generic recognizer that can handle recognizers generated from + * lexer, parser, and tree grammars. This is all the parsing + * support code essentially; most of it is error recovery stuff and + * backtracking. + */ + public class BaseRecognizer { + public static const MEMO_RULE_FAILED:int = -2; + public static const MEMO_RULE_UNKNOWN:int = -1; + public static const INITIAL_FOLLOW_STACK_SIZE:int = 100; + + // copies from Token object for convenience in actions + public static const DEFAULT_TOKEN_CHANNEL:int = TokenConstants.DEFAULT_CHANNEL; + public static const HIDDEN:int = TokenConstants.HIDDEN_CHANNEL; + + public static const NEXT_TOKEN_RULE_NAME:String = "nextToken"; + + /** State of a lexer, parser, or tree parser are collected into a state + * object so the state can be shared. This sharing is needed to + * have one grammar import others and share same error variables + * and other state variables. It's a kind of explicit multiple + * inheritance via delegation of methods and shared state. + * + */ + public var state:RecognizerSharedState; // TODO - Place in private Namespace - cannot be private + + public function BaseRecognizer(state:RecognizerSharedState = null) { + if ( state == null ) { // don't ever let us have a null state + state = new RecognizerSharedState(); + } + this.state = state; + } + + /** reset the parser's state; subclasses must rewinds the input stream */ + public function reset():void { + // wack everything related to error recovery + if (state == null) { + return; + } + state._fsp = -1; + state.errorRecovery = false; + state.lastErrorIndex = -1; + state.failed = false; + state.syntaxErrors = 0; + // wack everything related to backtracking and memoization + state.backtracking = 0; + for (var i:int = 0; state.ruleMemo!=null && i < state.ruleMemo.length; i++) { // wipe cache + state.ruleMemo[i] = null; + } + } + + /** Match current input symbol against ttype. Attempt + * single token insertion or deletion error recovery. If + * that fails, throw MismatchedTokenException. + * + * To turn off single token insertion or deletion error + * recovery, override mismatchRecover() and have it call + * plain mismatch(), which does not recover. Then any error + * in a rule will cause an exception and immediate exit from + * rule. Rule would recover by resynchronizing to the set of + * symbols that can follow rule ref. + */ + public function matchStream(input:IntStream, ttype:int, follow:BitSet):Object { + //System.out.println("match "+((TokenStream)input).LT(1)); + var matchedSymbol:Object = getCurrentInputSymbol(input); + if ( input.LA(1)==ttype ) { + input.consume(); + state.errorRecovery = false; + state.failed = false; + return matchedSymbol; + } + if ( state.backtracking>0 ) { + state.failed = true; + return matchedSymbol; + } + matchedSymbol = recoverFromMismatchedToken(input, ttype, follow); + return matchedSymbol; + } + + /** Match the wildcard: in a symbol */ + public function matchAnyStream(input:IntStream):void { + state.errorRecovery = false; + state.failed = false; + input.consume(); + } + + public function mismatchIsUnwantedToken(input:IntStream, ttype:int):Boolean { + return input.LA(2)==ttype; + } + + public function mismatchIsMissingToken(input:IntStream, follow:BitSet):Boolean { + if ( follow==null ) { + // we have no information about the follow; we can only consume + // a single token and hope for the best + return false; + } + // compute what can follow this grammar element reference + if ( follow.member(TokenConstants.EOR_TOKEN_TYPE) ) { + var viableTokensFollowingThisRule:BitSet = computeContextSensitiveRuleFOLLOW(); + follow = follow.or(viableTokensFollowingThisRule); + if ( state._fsp>=0 ) { // remove EOR if we're not the start symbol + follow.remove(TokenConstants.EOR_TOKEN_TYPE); + } + } + // if current token is consistent with what could come after set + // then we know we're missing a token; error recovery is free to + // "insert" the missing token + + //System.out.println("LT(1)="+((TokenStream)input).LT(1)); + + // BitSet cannot handle negative numbers like -1 (EOF) so I leave EOR + // in follow set to indicate that the fall of the start symbol is + // in the set (EOF can follow). + if ( follow.member(input.LA(1)) || follow.member(TokenConstants.EOR_TOKEN_TYPE) ) { + //System.out.println("LT(1)=="+((TokenStream)input).LT(1)+" is consistent with what follows; inserting..."); + return true; + } + return false; + } + + /** Factor out what to do upon token mismatch so tree parsers can behave + * differently. Override and call mismatchRecover(input, ttype, follow) + * to get single token insertion and deletion. Use this to turn of + * single token insertion and deletion. Override mismatchRecover + * to call this instead. + */ + protected function mismatch(input:IntStream, ttype:int, follow:BitSet):void + { + if ( mismatchIsUnwantedToken(input, ttype) ) { + throw new UnwantedTokenException(ttype, input); + } + else if ( mismatchIsMissingToken(input, follow) ) { + throw new MissingTokenException(ttype, input, null); + } + throw new MismatchedTokenException(ttype, input); + } + + /** Report a recognition problem. + * + * This method sets errorRecovery to indicate the parser is recovering + * not parsing. Once in recovery mode, no errors are generated. + * To get out of recovery mode, the parser must successfully match + * a token (after a resync). So it will go: + * + * 1. error occurs + * 2. enter recovery mode, report error + * 3. consume until token found in resynch set + * 4. try to resume parsing + * 5. next match() will reset errorRecovery mode + * + * If you override, make sure to update syntaxErrors if you care about that. + */ + public function reportError(e:RecognitionException):void { + // if we've already reported an error and have not matched a token + // yet successfully, don't report any errors. + if ( state.errorRecovery ) { + //System.err.print("[SPURIOUS] "); + return; + } + state.syntaxErrors++; // don't count spurious + state.errorRecovery = true; + + displayRecognitionError(this.tokenNames, e); + } + + public function displayRecognitionError(tokenNames:Array, + e:RecognitionException):void + { + var hdr:String = getErrorHeader(e); + var msg:String = getErrorMessage(e, tokenNames); + emitErrorMessage(hdr+" "+msg); + } + + /** What error message should be generated for the various + * exception types? + * + * Not very object-oriented code, but I like having all error message + * generation within one method rather than spread among all of the + * exception classes. This also makes it much easier for the exception + * handling because the exception classes do not have to have pointers back + * to this object to access utility routines and so on. Also, changing + * the message for an exception type would be difficult because you + * would have to subclassing exception, but then somehow get ANTLR + * to make those kinds of exception objects instead of the default. + * This looks weird, but trust me--it makes the most sense in terms + * of flexibility. + * + * For grammar debugging, you will want to override this to add + * more information such as the stack frame with + * getRuleInvocationStack(e, this.getClass().getName()) and, + * for no viable alts, the decision description and state etc... + * + * Override this to change the message generated for one or more + * exception types. + */ + public function getErrorMessage(e:RecognitionException, tokenNames:Array):String { + var msg:String = e.message; + var tokenName:String = null; + if ( e is UnwantedTokenException ) { + var ute:UnwantedTokenException = UnwantedTokenException(e); + tokenName="<unknown>"; + if ( ute.expecting== TokenConstants.EOF ) { + tokenName = "EOF"; + } + else { + tokenName = tokenNames[ute.expecting]; + } + msg = "extraneous input "+getTokenErrorDisplay(ute.unexpectedToken)+ + " expecting "+tokenName; + } + else if ( e is MissingTokenException ) { + var mite:MissingTokenException = MissingTokenException(e); + tokenName="<unknown>"; + if ( mite.expecting == TokenConstants.EOF ) { + tokenName = "EOF"; + } + else { + tokenName = tokenNames[mite.expecting]; + } + msg = "missing "+tokenName+" at "+getTokenErrorDisplay(e.token); + } + else if ( e is MismatchedTokenException ) { + var mte:MismatchedTokenException = MismatchedTokenException(e); + tokenName="<unknown>"; + if ( mte.expecting== TokenConstants.EOF ) { + tokenName = "EOF"; + } + else { + tokenName = tokenNames[mte.expecting]; + } + msg = "mismatched input "+getTokenErrorDisplay(e.token)+ + " expecting "+tokenName; + } + else if ( e is MismatchedTreeNodeException ) { + var mtne:MismatchedTreeNodeException = MismatchedTreeNodeException(e); + tokenName="<unknown>"; + if ( mtne.expecting==TokenConstants.EOF ) { + tokenName = "EOF"; + } + else { + tokenName = tokenNames[mtne.expecting]; + } + msg = "mismatched tree node: "+mtne.node+ + " expecting "+tokenName; + } + else if ( e is NoViableAltException ) { + var nvae:NoViableAltException = NoViableAltException(e); + // for development, can add "decision=<<"+nvae.grammarDecisionDescription+">>" + // and "(decision="+nvae.decisionNumber+") and + // "state "+nvae.stateNumber + msg = "no viable alternative at input "+getTokenErrorDisplay(e.token); + } + else if ( e is EarlyExitException ) { + var eee:EarlyExitException = EarlyExitException(e); + // for development, can add "(decision="+eee.decisionNumber+")" + msg = "required (...)+ loop did not match anything at input "+ + getTokenErrorDisplay(e.token); + } + else if ( e is MismatchedSetException ) { + var mse:MismatchedSetException = MismatchedSetException(e); + msg = "mismatched input "+getTokenErrorDisplay(e.token)+ + " expecting set "+mse.expecting; + } + else if ( e is MismatchedNotSetException ) { + var mnse:MismatchedNotSetException = MismatchedNotSetException(e); + msg = "mismatched input "+getTokenErrorDisplay(e.token)+ + " expecting set "+mnse.expecting; + } + else if ( e is FailedPredicateException ) { + var fpe:FailedPredicateException = FailedPredicateException(e); + msg = "rule "+fpe.ruleName+" failed predicate: {"+ + fpe.predicateText+"}?"; + } + return msg; + } + + /** Get number of recognition errors (lexer, parser, tree parser). Each + * recognizer tracks its own number. So parser and lexer each have + * separate count. Does not count the spurious errors found between + * an error and next valid token match + * + * See also reportError() + */ + public function get numberOfSyntaxErrors():int { + return state.syntaxErrors; + } + + /** What is the error header, normally line/character position information? */ + public function getErrorHeader(e:RecognitionException):String { + return "line "+e.line+":"+e.charPositionInLine; + } + + /** How should a token be displayed in an error message? The default + * is to display just the text, but during development you might + * want to have a lot of information spit out. Override in that case + * to use t.toString() (which, for CommonToken, dumps everything about + * the token). This is better than forcing you to override a method in + * your token objects because you don't have to go modify your lexer + * so that it creates a new Java type. + */ + public function getTokenErrorDisplay(t:Token):String { + var s:String = t.text; + if ( s==null ) { + if ( t.type==TokenConstants.EOF ) { + s = "<EOF>"; + } + else { + s = "<"+t.type+">"; + } + } + s = s.replace("\n","\\\\n"); + s = s.replace("\r","\\\\r"); + s = s.replace("\t","\\\\t"); + return "'"+s+"'"; + } + + /** Override this method to change where error messages go */ + public function emitErrorMessage(msg:String):void { + trace(msg); + } + + /** Recover from an error found on the input stream. This is + * for NoViableAlt and mismatched symbol exceptions. If you enable + * single token insertion and deletion, this will usually not + * handle mismatched symbol exceptions but there could be a mismatched + * token that the match() routine could not recover from. + */ + public function recoverStream(input:IntStream, re:RecognitionException):void { + if ( state.lastErrorIndex==input.index) { + // uh oh, another error at same token index; must be a case + // where LT(1) is in the recovery token set so nothing is + // consumed; consume a single token so at least to prevent + // an infinite loop; this is a failsafe. + input.consume(); + } + state.lastErrorIndex = input.index; + var followSet:BitSet = computeErrorRecoverySet(); + beginResync(); + consumeUntil(input, followSet); + endResync(); + } + + /** A hook to listen in on the token consumption during error recovery. + * The DebugParser subclasses this to fire events to the listenter. + */ + public function beginResync():void { + } + + public function endResync():void { + } + + /* Compute the error recovery set for the current rule. During + * rule invocation, the parser pushes the set of tokens that can + * follow that rule reference on the stack; this amounts to + * computing FIRST of what follows the rule reference in the + * enclosing rule. This local follow set only includes tokens + * from within the rule; i.e., the FIRST computation done by + * ANTLR stops at the end of a rule. + * + * EXAMPLE + * + * When you find a "no viable alt exception", the input is not + * consistent with any of the alternatives for rule r. The best + * thing to do is to consume tokens until you see something that + * can legally follow a call to r *or* any rule that called r. + * You don't want the exact set of viable next tokens because the + * input might just be missing a token--you might consume the + * rest of the input looking for one of the missing tokens. + * + * Consider grammar: + * + * a : '[' b ']' + * | '(' b ')' + * ; + * b : c '^' INT ; + * c : ID + * | INT + * ; + * + * At each rule invocation, the set of tokens that could follow + * that rule is pushed on a stack. Here are the various "local" + * follow sets: + * + * FOLLOW(b1_in_a) = FIRST(']') = ']' + * FOLLOW(b2_in_a) = FIRST(')') = ')' + * FOLLOW(c_in_b) = FIRST('^') = '^' + * + * Upon erroneous input "[]", the call chain is + * + * a -> b -> c + * + * and, hence, the follow context stack is: + * + * depth local follow set after call to rule + * 0 <EOF> a (from main()) + * 1 ']' b + * 3 '^' c + * + * Notice that ')' is not included, because b would have to have + * been called from a different context in rule a for ')' to be + * included. + * + * For error recovery, we cannot consider FOLLOW(c) + * (context-sensitive or otherwise). We need the combined set of + * all context-sensitive FOLLOW sets--the set of all tokens that + * could follow any reference in the call chain. We need to + * resync to one of those tokens. Note that FOLLOW(c)='^' and if + * we resync'd to that token, we'd consume until EOF. We need to + * sync to context-sensitive FOLLOWs for a, b, and c: {']','^'}. + * In this case, for input "[]", LA(1) is in this set so we would + * not consume anything and after printing an error rule c would + * return normally. It would not find the required '^' though. + * At this point, it gets a mismatched token error and throws an + * exception (since LA(1) is not in the viable following token + * set). The rule exception handler tries to recover, but finds + * the same recovery set and doesn't consume anything. Rule b + * exits normally returning to rule a. Now it finds the ']' (and + * with the successful match exits errorRecovery mode). + * + * So, you cna see that the parser walks up call chain looking + * for the token that was a member of the recovery set. + * + * Errors are not generated in errorRecovery mode. + * + * ANTLR's error recovery mechanism is based upon original ideas: + * + * "Algorithms + Data Structures = Programs" by Niklaus Wirth + * + * and + * + * "A note on error recovery in recursive descent parsers": + * http://portal.acm.org/citation.cfm?id=947902.947905 + * + * Later, Josef Grosch had some good ideas: + * + * "Efficient and Comfortable Error Recovery in Recursive Descent + * Parsers": + * ftp://www.cocolab.com/products/cocktail/doca4.ps/ell.ps.zip + * + * Like Grosch I implemented local FOLLOW sets that are combined + * at run-time upon error to avoid overhead during parsing. + */ + protected function computeErrorRecoverySet():BitSet { + return combineFollows(false); + } + + /** Compute the context-sensitive FOLLOW set for current rule. + * This is set of token types that can follow a specific rule + * reference given a specific call chain. You get the set of + * viable tokens that can possibly come next (lookahead depth 1) + * given the current call chain. Contrast this with the + * definition of plain FOLLOW for rule r: + * + * FOLLOW(r)={x | S=>*alpha r beta in G and x in FIRST(beta)} + * + * where x in T* and alpha, beta in V*; T is set of terminals and + * V is the set of terminals and nonterminals. In other words, + * FOLLOW(r) is the set of all tokens that can possibly follow + * references to r in *any* sentential form (context). At + * runtime, however, we know precisely which context applies as + * we have the call chain. We may compute the exact (rather + * than covering superset) set of following tokens. + * + * For example, consider grammar: + * + * stat : ID '=' expr ';' // FOLLOW(stat)=={EOF} + * | "return" expr '.' + * ; + * expr : atom ('+' atom)* ; // FOLLOW(expr)=={';','.',')'} + * atom : INT // FOLLOW(atom)=={'+',')',';','.'} + * | '(' expr ')' + * ; + * + * The FOLLOW sets are all inclusive whereas context-sensitive + * FOLLOW sets are precisely what could follow a rule reference. + * For input input "i=(3);", here is the derivation: + * + * stat => ID '=' expr ';' + * => ID '=' atom ('+' atom)* ';' + * => ID '=' '(' expr ')' ('+' atom)* ';' + * => ID '=' '(' atom ')' ('+' atom)* ';' + * => ID '=' '(' INT ')' ('+' atom)* ';' + * => ID '=' '(' INT ')' ';' + * + * At the "3" token, you'd have a call chain of + * + * stat -> expr -> atom -> expr -> atom + * + * What can follow that specific nested ref to atom? Exactly ')' + * as you can see by looking at the derivation of this specific + * input. Contrast this with the FOLLOW(atom)={'+',')',';','.'}. + * + * You want the exact viable token set when recovering from a + * token mismatch. Upon token mismatch, if LA(1) is member of + * the viable next token set, then you know there is most likely + * a missing token in the input stream. "Insert" one by just not + * throwing an exception. + */ + protected function computeContextSensitiveRuleFOLLOW():BitSet { + return combineFollows(true); + } + + protected function combineFollows(exact:Boolean):BitSet { + var top:int = state._fsp; + var followSet:BitSet = new BitSet(); + for (var i:int=top; i>=0; i--) { + var localFollowSet:BitSet = state.following[i]; + followSet.orInPlace(localFollowSet); + if ( exact ) { + // can we see end of rule? + if ( localFollowSet.member(TokenConstants.EOR_TOKEN_TYPE) ) { + // Only leave EOR in set if at top (start rule); this lets + // us know if have to include follow(start rule); i.e., EOF + if ( i>0 ) { + followSet.remove(TokenConstants.EOR_TOKEN_TYPE); + } + } + else { // can't see end of rule, quit + break; + } + } + } + return followSet; + } + + /** Attempt to recover from a single missing or extra token. + * + * EXTRA TOKEN + * + * LA(1) is not what we are looking for. If LA(2) has the right token, + * however, then assume LA(1) is some extra spurious token. Delete it + * and LA(2) as if we were doing a normal match(), which advances the + * input. + * + * MISSING TOKEN + * + * If current token is consistent with what could come after + * ttype then it is ok to "insert" the missing token, else throw + * exception For example, Input "i=(3;" is clearly missing the + * ')'. When the parser returns from the nested call to expr, it + * will have call chain: + * + * stat -> expr -> atom + * + * and it will be trying to match the ')' at this point in the + * derivation: + * + * => ID '=' '(' INT ')' ('+' atom)* ';' + * ^ + * match() will see that ';' doesn't match ')' and report a + * mismatched token error. To recover, it sees that LA(1)==';' + * is in the set of tokens that can follow the ')' token + * reference in rule atom. It can assume that you forgot the ')'. + */ + public function recoverFromMismatchedToken(input:IntStream, + ttype:int, + follow:BitSet):Object { + var e:RecognitionException = null; + // if next token is what we are looking for then "delete" this token + if ( mismatchIsUnwantedToken(input, ttype) ) { + e = new UnwantedTokenException(ttype, input); + /* + System.err.println("recoverFromMismatchedToken deleting "+ + ((TokenStream)input).LT(1)+ + " since "+((TokenStream)input).LT(2)+" is what we want"); + */ + beginResync(); + input.consume(); // simply delete extra token + endResync(); + reportError(e); // report after consuming so AW sees the token in the exception + // we want to return the token we're actually matching + var matchedSymbol:Object = getCurrentInputSymbol(input); + input.consume(); // move past ttype token as if all were ok + return matchedSymbol; + } + // can't recover with single token deletion, try insertion + if ( mismatchIsMissingToken(input, follow) ) { + var inserted:Object = getMissingSymbol(input, e, ttype, follow); + e = new MissingTokenException(ttype, input, inserted); + reportError(e); // report after inserting so AW sees the token in the exception + return inserted; + } + // even that didn't work; must throw the exception + e = new MismatchedTokenException(ttype, input); + throw e; + } + + /** Not currently used */ + public function recoverFromMismatchedSet(input:IntStream, + e:RecognitionException, + follow:BitSet):Object + { + if ( mismatchIsMissingToken(input, follow) ) { + // System.out.println("missing token"); + reportError(e); + // we don't know how to conjure up a token for sets yet + return getMissingSymbol(input, e, TokenConstants.INVALID_TOKEN_TYPE, follow); + } + // TODO do single token deletion like above for Token mismatch + throw e; + } + + /** Match needs to return the current input symbol, which gets put + * into the label for the associated token ref; e.g., x=ID. Token + * and tree parsers need to return different objects. Rather than test + * for input stream type or change the IntStream interface, I use + * a simple method to ask the recognizer to tell me what the current + * input symbol is. + * + * This is ignored for lexers. + */ + protected function getCurrentInputSymbol(input:IntStream):Object { return null; } + + /** Conjure up a missing token during error recovery. + * + * The recognizer attempts to recover from single missing + * symbols. But, actions might refer to that missing symbol. + * For example, x=ID {f($x);}. The action clearly assumes + * that there has been an identifier matched previously and that + * $x points at that token. If that token is missing, but + * the next token in the stream is what we want we assume that + * this token is missing and we keep going. Because we + * have to return some token to replace the missing token, + * we have to conjure one up. This method gives the user control + * over the tokens returned for missing tokens. Mostly, + * you will want to create something special for identifier + * tokens. For literals such as '{' and ',', the default + * action in the parser or tree parser works. It simply creates + * a CommonToken of the appropriate type. The text will be the token. + * If you change what tokens must be created by the lexer, + * override this method to create the appropriate tokens. + */ + protected function getMissingSymbol(input:IntStream, + e:RecognitionException, + expectedTokenType:int, + follow:BitSet):Object + { + return null; + } + + public function consumeUntilToken(input:IntStream, tokenType:int):void { + //System.out.println("consumeUntil "+tokenType); + var ttype:int = input.LA(1); + while (ttype != TokenConstants.EOF && ttype != tokenType) { + input.consume(); + ttype = input.LA(1); + } + } + + /** Consume tokens until one matches the given token set */ + public function consumeUntil(input:IntStream, bitSet:BitSet):void { + //trace("consumeUntil("+bitSet.toStringFromTokens(tokenNames)+")"); + var ttype:int = input.LA(1); + while (ttype != TokenConstants.EOF && !bitSet.member(ttype) ) { + //trace("consume during recover LA(1)="+tokenNames[input.LA(1)]); + input.consume(); + ttype = input.LA(1); + } + } + + /** Push a rule's follow set using our own hardcoded stack */ + protected function pushFollow(fset:BitSet):void { + state.following[++state._fsp] = fset; + } + + public function get backtrackingLevel():int { + return state.backtracking; + } + + public function set backtrakingLevel(n:int):void { + state.backtracking = n; + } + + /** Return whether or not a backtracking attempt failed. */ + public function get failed():Boolean { + return state.failed; + } + + /** Used to print out token names like ID during debugging and + * error reporting. The generated parsers implement a method + * that overrides this to point to their String[] tokenNames. + */ + public function get tokenNames():Array { + return null; + } + + /** For debugging and other purposes, might want the grammar name. + * Have ANTLR generate an implementation for this method. + */ + public function get grammarFileName():String { + return null; + } + + public function get sourceName():String { + return null; + } + + /** A convenience method for use most often with template rewrites. + * Convert a List<Token> to List<String> + */ + public function toStrings(tokens:Array):Array { + if ( tokens==null ) return null; + var strings:Array = new Array(tokens.length); + for (var i:int = 0; i<tokens.length; i++) { + strings.push(tokens[i].text); + } + return strings; + } + + /** Given a rule number and a start token index number, return + * MEMO_RULE_UNKNOWN if the rule has not parsed input starting from + * start index. If this rule has parsed input starting from the + * start index before, then return where the rule stopped parsing. + * It returns the index of the last token matched by the rule. + * + * For now we use a hashtable and just the slow Object-based one. + * Later, we can make a special one for ints and also one that + * tosses out data after we commit past input position i. + */ + public function getRuleMemoization(ruleIndex:int, ruleStartIndex:int):int { + if ( state.ruleMemo[ruleIndex]==undefined ) { + state.ruleMemo[ruleIndex] = new Array(); + } + var stopIndex:* = state.ruleMemo[ruleIndex][ruleStartIndex]; + if ( stopIndex == undefined ) { + return MEMO_RULE_UNKNOWN; + } + return stopIndex as int; + } + + /** Has this rule already parsed input at the current index in the + * input stream? Return the stop token index or MEMO_RULE_UNKNOWN. + * If we attempted but failed to parse properly before, return + * MEMO_RULE_FAILED. + * + * This method has a side-effect: if we have seen this input for + * this rule and successfully parsed before, then seek ahead to + * 1 past the stop token matched for this rule last time. + */ + public function alreadyParsedRule(input:IntStream, ruleIndex:int):Boolean { + var stopIndex:int = getRuleMemoization(ruleIndex, input.index); + if ( stopIndex==MEMO_RULE_UNKNOWN ) { + return false; + } + if ( stopIndex==MEMO_RULE_FAILED ) { + //System.out.println("rule "+ruleIndex+" will never succeed"); + state.failed=true; + } + else { + //System.out.println("seen rule "+ruleIndex+" before; skipping ahead to @"+(stopIndex+1)+" failed="+failed); + input.seek(stopIndex+1); // jump to one past stop token + } + return true; + } + + /** Record whether or not this rule parsed the input at this position + * successfully. Use a standard java hashtable for now. + */ + public function memoize(input:IntStream, + ruleIndex:int, + ruleStartIndex:int):void + { + var stopTokenIndex:int = state.failed ? MEMO_RULE_FAILED : input.index - 1; + if ( state.ruleMemo==null ) { + trace("!!!!!!!!! memo array is null for "+ grammarFileName); + } + if ( ruleIndex >= state.ruleMemo.length ) { + trace("!!!!!!!!! memo size is "+state.ruleMemo.length+", but rule index is "+ruleIndex); + } + + if ( state.ruleMemo[ruleIndex]!=null ) { + state.ruleMemo[ruleIndex][ruleStartIndex] = stopTokenIndex; + } + } + + /** return how many rule/input-index pairs there are in total. + * TODO: this includes synpreds. :( + */ + public function getRuleMemoizationCacheSize():int { + var n:int = 0; + for (var i:int = 0; state.ruleMemo!=null && i < state.ruleMemo.length; i++) { + var ruleMap:Object = state.ruleMemo[i]; + if ( ruleMap!=null ) { + n += ruleMap.length; // how many input indexes are recorded? + } + } + return n; + } + + public function traceInSymbol(ruleName:String, ruleIndex:int, inputSymbol:Object):void { + trace("enter "+ruleName+" "+inputSymbol); + if ( state.backtracking>0 ) { + trace(" backtracking="+state.backtracking); + } + trace(); + } + + public function traceOutSymbol(ruleName:String, + ruleIndex:int, + inputSymbol:Object):void + { + trace("exit "+ruleName+" "+inputSymbol); + if ( state.backtracking>0 ) { + trace(" backtracking="+state.backtracking); + if ( state.failed ) trace(" failed"); + else trace(" succeeded"); + } + trace(); + } + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/BitSet.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/BitSet.as new file mode 100644 index 0000000..8630b8e --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/BitSet.as @@ -0,0 +1,267 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime { + + /**A stripped-down version of org.antlr.misc.BitSet that is just + * good enough to handle runtime requirements such as FOLLOW sets + * for automatic error recovery. + */ + public class BitSet { + protected static const BITS:uint = 32; // number of bits / int + protected static const LOG_BITS:uint = 5; // 2^5 == 32 + + /* We will often need to do a mod operator (i mod nbits). Its + * turns out that, for powers of two, this mod operation is + * same as (i & (nbits-1)). Since mod is slow, we use a + * precomputed mod mask to do the mod instead. + */ + protected static const MOD_MASK:uint = BITS - 1; + + /** The actual data bits */ + protected var bits:Array; + + /** Construction from a static array of longs */ + public function BitSet(bits:Array = null) { + if (bits == null) { + this.bits = new Array(); + } + else { + this.bits = new Array(bits.length); + for (var i:int = 0; i < bits.length; i++) { + this.bits[i] = bits[i]; + } + } + } + + public static function of(... args):BitSet { + var s:BitSet = new BitSet(); + for (var i:int = 0; i < args.length; i++) { + s.add(args[i]); + } + return s; + } + + /** return this | a in a new set */ + public function or(a:BitSet):BitSet { + if ( a==null ) { + return this; + } + var s:BitSet = this.clone(); + s.orInPlace(a); + return s; + } + + /** or this element into this set (grow as necessary to accommodate) */ + public function add(el:int):void { + var n:int = wordNumber(el); + if (n >= bits.length) { + growToInclude(el); + } + bits[n] |= bitMask(el); + } + + /** + * Grows the set to a larger number of bits. + * @param bit element that must fit in set + */ + public function growToInclude(bit:int):void { + var newSize:int = Math.max(bits.length << 1, numWordsToHold(bit)); + bits.length = newSize; + } + + public function orInPlace(a:BitSet):void { + if ( a==null ) { + return; + } + // If this is smaller than a, grow this first + if (a.bits.length > bits.length) { + this.bits.length = a.bits.length; + } + var min:int = Math.min(bits.length, a.bits.length); + for (var i:int = min - 1; i >= 0; i--) { + bits[i] |= a.bits[i]; + } + } + + /** + * Sets the size of a set. + * @param nwords how many words the new set should be + */ + private function set size(nwords:int):void { + bits.length = nwords; + } + + private static function bitMask(bitNumber:int):int { + var bitPosition:int = bitNumber & MOD_MASK; // bitNumber mod BITS + return 1 << bitPosition; + } + + public function clone():BitSet { + var s:BitSet = new BitSet(bits); + return s; + } + + public function get size():int { + var deg:uint = 0; + for (var i:int = bits.length - 1; i >= 0; i--) { + var word:uint = bits[i]; + if (word != 0) { + for (var bit:int = BITS - 1; bit >= 0; bit--) { + if ((word & (1 << bit)) != 0) { + deg++; + } + } + } + } + return deg; + } + + public function equals(other:Object):Boolean { + if ( other == null || !(other is BitSet) ) { + return false; + } + + var otherSet:BitSet = BitSet(other); + + var n:int = Math.min(this.bits.length, otherSet.bits.length); + + // for any bits in common, compare + for (var i:int=0; i<n; i++) { + if (this.bits[i] != otherSet.bits[i]) { + return false; + } + } + + // make sure any extra bits are off + + if (this.bits.length > n) { + for (i = n+1; i<this.bits.length; i++) { + if (this.bits[i] != 0) { + return false; + } + } + } + else if (otherSet.bits.length > n) { + for (i = n+1; i<otherSet.bits.length; i++) { + if (otherSet.bits[i] != 0) { + return false; + } + } + } + + return true; + } + + public function member(el:int):Boolean { + if ( el<0 ) { + return false; + } + var n:int = wordNumber(el); + if (n >= bits.length) return false; + return (bits[n] & bitMask(el)) != 0; + } + + // remove this element from this set + public function remove(el:int):void { + var n:int = wordNumber(el); + if (n < bits.length) { + bits[n] &= ~bitMask(el); + } + } + + public function get isNil():Boolean { + for (var i:int = bits.length - 1; i >= 0; i--) { + if (bits[i] != 0) return false; + } + return true; + } + + private final function numWordsToHold(el:int):int { + return (el >> LOG_BITS) + 1; + } + + public function get numBits():int { + return bits.length << LOG_BITS; // num words * bits per word + } + + /** return how much space is being used by the bits array not + * how many actually have member bits on. + */ + public function get lengthInLongWords():int { + return bits.length; + } + + public function toArray():Array { + var elems:Array = new Array[this.bits.length]; + var en:int = 0; + for (var i:int = 0; i < (bits.length << LOG_BITS); i++) { + if (member(i)) { + elems[en++] = i; + } + } + return elems; + } + + public function toPackedArray():Array { + return bits; + } + + private static function wordNumber(bit:uint):uint { + return bit >> LOG_BITS; // bit / BITS + } + + public function toString():String { + return toStringFromTokens(null); + } + + public function toStringFromTokens(tokenNames:Array):String { + var buf:String = ""; + const separator:String = ","; + var havePrintedAnElement:Boolean = false; + buf = buf + '{'; + + for (var i:int = 0; i < (bits.length << LOG_BITS); i++) { + if (member(i)) { + if (i > 0 && havePrintedAnElement ) { + buf += separator; + } + if ( tokenNames!=null ) { + buf += tokenNames[i]; + } + else { + buf += i; + } + havePrintedAnElement = true; + } + } + buf += '}'; + return buf; + } + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CharStream.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CharStream.as new file mode 100644 index 0000000..ceca043 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CharStream.as @@ -0,0 +1,57 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime { + /** A source of characters for an ANTLR lexer */ + public interface CharStream extends IntStream { + + /** For infinite streams, you don't need this; primarily I'm providing + * a useful interface for action code. Just make sure actions don't + * use this on streams that don't support it. + */ + function substring(start:int, stop:int):String; + + /** Get the ith character of lookahead. This is the same usually as + * LA(i). This will be used for labels in the generated + * lexer code. I'd prefer to return a char here type-wise, but it's + * probably better to be 32-bit clean and be consistent with LA. + */ + function LT(i:int):int; + + /** ANTLR tracks the line information automatically */ + function get line():int; + + /** Because this stream can rewind, we need to be able to reset the line */ + function set line(line:int):void; + + function set charPositionInLine(pos:int):void; + + /** The index of the character relative to the beginning of the line 0..n-1 */ + function get charPositionInLine():int; + } + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CharStreamConstants.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CharStreamConstants.as new file mode 100644 index 0000000..b13246a --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CharStreamConstants.as @@ -0,0 +1,7 @@ +package org.antlr.runtime +{ + public class CharStreamConstants + { + public static const EOF:int = -1; + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CharStreamState.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CharStreamState.as new file mode 100644 index 0000000..21e053b --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CharStreamState.as @@ -0,0 +1,47 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime { + + /** When walking ahead with cyclic DFA or for syntactic predicates, + * we need to record the state of the input stream (char index, + * line, etc...) so that we can rewind the state after scanning ahead. + * + * This is the complete state of a stream. + */ + public class CharStreamState { + /** Index into the char stream of next lookahead char */ + public var p:int; + + /** What line number is the scanner at before processing buffer[p]? */ + public var line:int; + + /** What char position 0..n-1 in line is scanner before processing buffer[p]? */ + public var charPositionInLine:int; + } + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CommonToken.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CommonToken.as new file mode 100644 index 0000000..72845c2 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CommonToken.as @@ -0,0 +1,183 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime { + + + +public class CommonToken implements Token { + protected var _type:int; + protected var _line:int; + protected var _charPositionInLine:int = -1; // set to invalid position + protected var _channel:int = TokenConstants.DEFAULT_CHANNEL; + protected var _input:CharStream; + + /** We need to be able to change the text once in a while. If + * this is non-null, then getText should return this. Note that + * start/stop are not affected by changing this. + */ + protected var _text:String; + + /** What token number is this from 0..n-1 tokens; < 0 implies invalid index */ + protected var _index:int = -1; + + /** The char position into the input buffer where this token starts */ + protected var _start:int; + + /** The char position into the input buffer where this token stops */ + protected var _stop:int; + + public function CommonToken(type:int, text:String = null) { + this._type = type; + this._text = text; + } + + public static function createFromStream(input:CharStream, type:int, channel:int, start:int, stop:int):CommonToken { + var token:CommonToken = new CommonToken(type); + token._input = input; + token._channel = channel; + token._start = start; + token._stop = stop; + return token; + } + + public static function cloneToken(oldToken:Token):CommonToken { + var token:CommonToken = new CommonToken(oldToken.type, oldToken.text); + token._line = oldToken.line; + token._index = oldToken.tokenIndex; + token._charPositionInLine = oldToken.charPositionInLine; + token._channel = oldToken.channel; + if ( oldToken is CommonToken ) { + token._start = CommonToken(oldToken).startIndex; + token._stop = CommonToken(oldToken).stopIndex; + } + return token; + } + + public function get type():int { + return _type; + } + + public function set line(line:int):void { + _line = line; + } + + public function get text():String { + if ( _text!=null ) { + return _text; + } + if ( _input==null ) { + return null; + } + _text = _input.substring(_start, _stop); + return _text; + } + + /** Override the text for this token. getText() will return this text + * rather than pulling from the buffer. Note that this does not mean + * that start/stop indexes are not valid. It means that that input + * was converted to a new string in the token object. + */ + public function set text(text:String):void { + _text = text; + } + + public function get line():int { + return _line; + } + + public function get charPositionInLine():int { + return _charPositionInLine; + } + + public function set charPositionInLine(charPositionInLine:int):void { + _charPositionInLine = charPositionInLine; + } + + public function get channel():int { + return _channel; + } + + public function set channel(channel:int):void { + _channel = channel; + } + + public function set type(type:int):void { + _type = type; + } + + public function get startIndex():int { + return _start; + } + + public function set startIndex(start:int):void { + _start = start; + } + + public function get stopIndex():int { + return _stop; + } + + public function set stopIndex(stop:int):void { + _stop = stop; + } + + public function get tokenIndex():int { + return _index; + } + + public function set tokenIndex(index:int):void { + _index = index; + } + + public function get inputStream():CharStream { + return _input; + } + + public function set inputStream(input:CharStream):void { + _input = input; + } + + public function toString():String { + var channelStr:String = ""; + if ( channel>0 ) { + channelStr=",channel="+channel; + } + var txt:String = text; + if ( txt!=null ) { + txt = txt.replace("\n", "\\\\n"); + txt = txt.replace("\r", "\\\\r"); + txt = txt.replace("\t", "\\\\t"); + } + else { + txt = "<no text>"; + } + return "[@"+tokenIndex+","+startIndex+":"+stopIndex+"='"+txt+"',<"+type+">"+channelStr+","+line+":"+charPositionInLine+"]"; + } +} + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CommonTokenStream.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CommonTokenStream.as new file mode 100644 index 0000000..afebc09 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/CommonTokenStream.as @@ -0,0 +1,371 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime { + + /** The most common stream of tokens is one where every token is buffered up + * and tokens are prefiltered for a certain channel (the parser will only + * see these tokens and cannot change the filter channel number during the + * parse). + * + * TODO: how to access the full token stream? How to track all tokens matched per rule? + */ + public class CommonTokenStream implements TokenStream { + protected var _tokenSource:TokenSource; + + /** Record every single token pulled from the source so we can reproduce + * chunks of it later. + */ + protected var tokens:Array = new Array(); + + /** Map<tokentype, channel> to override some Tokens' channel numbers */ + protected var channelOverrideMap:Array; + + /** Set<tokentype>; discard any tokens with this type */ + protected var discardSet:Array; + + /** Skip tokens on any channel but this one; this is how we skip whitespace... */ + protected var channel:int = TokenConstants.DEFAULT_CHANNEL; + + /** By default, track all incoming tokens */ + protected var _discardOffChannelTokens:Boolean = false; + + /** Track the last mark() call result value for use in rewind(). */ + protected var lastMarker:int; + + /** The index into the tokens list of the current token (next token + * to consume). p==-1 indicates that the tokens list is empty + */ + protected var p:int = -1; + + public function CommonTokenStream(tokenSource:TokenSource = null, channel:int = TokenConstants.DEFAULT_CHANNEL) { + _tokenSource = tokenSource; + this.channel = channel; + } + + /** Reset this token stream by setting its token source. */ + public function set tokenSource(tokenSource:TokenSource):void { + _tokenSource = tokenSource; + tokens.clear(); + p = -1; + channel = TokenConstants.DEFAULT_CHANNEL; + } + + /** Load all tokens from the token source and put in tokens. + * This is done upon first LT request because you might want to + * set some token type / channel overrides before filling buffer. + */ + protected function fillBuffer():void { + var index:int = 0; + var t:Token = tokenSource.nextToken(); + while ( t!=null && t.type != CharStreamConstants.EOF ) { + var discard:Boolean = false; + // is there a channel override for token type? + if ( channelOverrideMap != null ) { + if (channelOverrideMap[t.type] != undefined) { + t.channel = channelOverrideMap[t.type]; + } + } + if ( discardSet !=null && + discardSet[t.type] == true ) + { + discard = true; + } + else if ( _discardOffChannelTokens && t.channel != this.channel ) { + discard = true; + } + if ( !discard ) { + t.tokenIndex = index; + tokens.push(t); + index++; + } + t = tokenSource.nextToken(); + } + // leave p pointing at first token on channel + p = 0; + p = skipOffTokenChannels(p); + } + + /** Move the input pointer to the next incoming token. The stream + * must become active with LT(1) available. consume() simply + * moves the input pointer so that LT(1) points at the next + * input symbol. Consume at least one token. + * + * Walk past any token not on the channel the parser is listening to. + */ + public function consume():void { + if ( p<tokens.length ) { + p++; + p = skipOffTokenChannels(p); // leave p on valid token + } + } + + /** Given a starting index, return the index of the first on-channel + * token. + */ + protected function skipOffTokenChannels(i:int):int { + var n:int = tokens.length; + while ( i<n && (Token(tokens[i])).channel != channel) { + i++; + } + return i; + } + + protected function skipOffTokenChannelsReverse(i:int):int { + while ( i>= 0 && (Token(tokens[i])).channel != channel) { + i--; + } + return i; + } + + /** A simple filter mechanism whereby you can tell this token stream + * to force all tokens of type ttype to be on channel. For example, + * when interpreting, we cannot exec actions so we need to tell + * the stream to force all WS and NEWLINE to be a different, ignored + * channel. + */ + public function setTokenTypeChannel(ttype:int, channel:int):void { + if ( channelOverrideMap==null ) { + channelOverrideMap = new Array(); + } + channelOverrideMap[ttype] = channel; + } + + public function discardTokenType(ttype:int):void { + if ( discardSet==null ) { + discardSet = new Array(); + } + discardSet[ttype] = true; + } + + public function discardOffChannelTokens(discardOffChannelTokens:Boolean):void { + _discardOffChannelTokens = discardOffChannelTokens; + } + + public function getTokens():Array { + if ( p == -1 ) { + fillBuffer(); + } + return tokens; + } + + public function getTokensRange(start:int, stop:int):Array { + return getTokensBitSet(start, stop, null); + } + + /** Given a start and stop index, return a List of all tokens in + * the token type BitSet. Return null if no tokens were found. This + * method looks at both on and off channel tokens. + * + * Renamed from getTokens + */ + public function getTokensBitSet(start:int, stop:int, types:BitSet):Array { + if ( p == -1 ) { + fillBuffer(); + } + if ( stop>=tokens.length ) { + stop=tokens.length-1; + } + if ( start<0 ) { + start=0; + } + if ( start>stop ) { + return null; + } + + // list = tokens[start:stop]:{Token t, t.getType() in types} + var filteredTokens:Array = new Array(); + for (var i:int=start; i<=stop; i++) { + var t:Token = Token(tokens[i]); + if ( types==null || types.member(t.type) ) { + filteredTokens.push(t); + } + } + if ( filteredTokens.length==0 ) { + filteredTokens = null; + } + return filteredTokens; + } + + public function getTokensArray(start:int, stop:int, types:Array):Array { + return getTokensBitSet(start,stop,new BitSet(types)); + } + + public function getTokensInt(start:int, stop:int, ttype:int):Array { + return getTokensBitSet(start,stop,BitSet.of(ttype)); + } + + /** Get the ith token from the current position 1..n where k=1 is the + * first symbol of lookahead. + */ + public function LT(k:int):Token { + if ( p == -1 ) { + fillBuffer(); + } + if ( k==0 ) { + return null; + } + if ( k<0 ) { + return LB(-k); + } + //System.out.print("LT(p="+p+","+k+")="); + if ( (p+k-1) >= tokens.length ) { + return TokenConstants.EOF_TOKEN; + } + //System.out.println(tokens.get(p+k-1)); + var i:int = p; + var n:int = 1; + // find k good tokens + while ( n<k ) { + // skip off-channel tokens + i = skipOffTokenChannels(i+1); // leave p on valid token + n++; + } + if ( i>=tokens.length ) { + return TokenConstants.EOF_TOKEN; + } + return Token(tokens[i]); + } + + /** Look backwards k tokens on-channel tokens */ + protected function LB(k:int):Token { + //System.out.print("LB(p="+p+","+k+") "); + if ( p == -1 ) { + fillBuffer(); + } + if ( k==0 ) { + return null; + } + if ( (p-k)<0 ) { + return null; + } + + var i:int = p; + var n:int = 1; + // find k good tokens looking backwards + while ( n<=k ) { + // skip off-channel tokens + i = skipOffTokenChannelsReverse(i-1); // leave p on valid token + n++; + } + if ( i<0 ) { + return null; + } + return Token(tokens[i]); + } + + /** Return absolute token i; ignore which channel the tokens are on; + * that is, count all tokens not just on-channel tokens. + */ + public function getToken(i:int):Token { + return Token(tokens[i]); + } + + public function LA(i:int):int { + return LT(i).type; + } + + public function mark():int { + if ( p == -1 ) { + fillBuffer(); + } + lastMarker = index; + return lastMarker; + } + + public function release(marker:int):void { + // no resources to release + } + + public function get size():int { + return tokens.length; + } + + public function get index():int { + return p; + } + + public function reset():void { + p = 0; + lastMarker = 0; + } + + public function rewindTo(marker:int):void { + seek(marker); + } + + public function rewind():void { + seek(lastMarker); + } + + public function seek(index:int):void { + p = index; + } + + public function get tokenSource():TokenSource { + return _tokenSource; + } + + public function get sourceName():String { + return tokenSource.sourceName; + } + + public function toString():String { + if ( p == -1 ) { + fillBuffer(); + } + return toStringWithRange(0, tokens.length-1); + } + + public function toStringWithRange(start:int, stop:int):String { + if ( start<0 || stop<0 ) { + return null; + } + if ( p == -1 ) { + fillBuffer(); + } + if ( stop>=tokens.length ) { + stop = tokens.length-1; + } + var buf:String = ""; + for (var i:int = start; i <= stop; i++) { + var t:Token = Token(tokens[i]); + buf += t.text; + } + return buf.toString(); + } + + public function toStringWithTokenRange(start:Token, stop:Token):String { + if ( start!=null && stop!=null ) { + return toStringWithRange(start.tokenIndex, stop.tokenIndex); + } + return null; + } + } + + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/DFA.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/DFA.as new file mode 100644 index 0000000..fc471a7 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/DFA.as @@ -0,0 +1,225 @@ +package org.antlr.runtime { + + /** A DFA implemented as a set of transition tables. + * + * Any state that has a semantic predicate edge is special; those states + * are generated with if-then-else structures in a specialStateTransition() + * which is generated by cyclicDFA template. + * + * There are at most 32767 states (16-bit signed short). + * Could get away with byte sometimes but would have to generate different + * types and the simulation code too. For a point of reference, the Java + * lexer's Tokens rule DFA has 326 states roughly. + */ + public class DFA { + protected var eot:Array; // short[] + protected var eof:Array; // short[] + protected var min:Array; // char[] + protected var max:Array; // char[] + protected var accept:Array; //short[] + protected var special:Array; // short[] + protected var transition:Array; // short[][] + + protected var decisionNumber:int; + + /** Which recognizer encloses this DFA? Needed to check backtracking */ + protected var recognizer:BaseRecognizer; + + private var _description:String; + + public static const debug:Boolean = false; + + public function DFA(recognizer:BaseRecognizer, decisionNumber:int, description:String, + eot:Array, eof:Array, min:Array, max:Array, accept:Array, special:Array, transition:Array, + specialStateTransitionFunction:Function = null, errorFunction:Function = null) { + this.recognizer = recognizer; + this.decisionNumber = decisionNumber; + this._description = description; + + this.eot = eot; + this.eof = eof; + this.min = min; + this.max = max; + this.accept = accept; + this.special = special; + this.transition = transition; + + if (specialStateTransitionFunction != null) { + specialStateTransition = specialStateTransitionFunction; + } + + if (errorFunction != null) { + error = errorFunction; + } + + } + /** From the input stream, predict what alternative will succeed + * using this DFA (representing the covering regular approximation + * to the underlying CFL). Return an alternative number 1..n. Throw + * an exception upon error. + */ + public function predict(input:IntStream):int { + if ( debug ) { + trace("Enter DFA.predict for decision "+decisionNumber); + } + + var mark:int = input.mark(); // remember where decision started in input + var s:int = 0; // we always start at s0 + try { + while ( true ) { + if ( debug ) trace("DFA "+decisionNumber+" state "+s+" LA(1)="+String.fromCharCode(input.LA(1))+"("+input.LA(1)+ + "), index="+input.index); + var specialState:int = special[s]; + if ( specialState>=0 ) { + if ( debug ) { + trace("DFA "+decisionNumber+ + " state "+s+" is special state "+specialState); + } + s = specialStateTransition(this, specialState,input); + if ( debug ) { + trace("DFA "+decisionNumber+ + " returns from special state "+specialState+" to "+s); + } + if ( s==-1 ) { + noViableAlt(s,input); + return 0; + } + input.consume(); + continue; + } + if ( accept[s] >= 1 ) { + if ( debug ) trace("accept; predict "+accept[s]+" from state "+s); + return accept[s]; + } + // look for a normal char transition + var c:int = input.LA(1); // -1 == \uFFFF, all tokens fit in 65000 space + if (c>=min[s] && c<=max[s]) { + var snext:int = transition[s][c-min[s]]; // move to next state + if ( snext < 0 ) { + // was in range but not a normal transition + // must check EOT, which is like the else clause. + // eot[s]>=0 indicates that an EOT edge goes to another + // state. + if ( eot[s]>=0 ) { // EOT Transition to accept state? + if ( debug ) trace("EOT transition"); + s = eot[s]; + input.consume(); + // TODO: I had this as return accept[eot[s]] + // which assumed here that the EOT edge always + // went to an accept...faster to do this, but + // what about predicated edges coming from EOT + // target? + continue; + } + noViableAlt(s,input); + return 0; + } + s = snext; + input.consume(); + continue; + } + if ( eot[s]>=0 ) { // EOT Transition? + if ( debug ) trace("EOT transition"); + s = eot[s]; + input.consume(); + continue; + } + if ( c==TokenConstants.EOF && eof[s]>=0 ) { // EOF Transition to accept state? + if ( debug ) trace("accept via EOF; predict "+accept[eof[s]]+" from "+eof[s]); + return accept[eof[s]]; + } + // not in range and not EOF/EOT, must be invalid symbol + if ( debug ) { + trace("min["+s+"]="+min[s]); + trace("max["+s+"]="+max[s]); + trace("eot["+s+"]="+eot[s]); + trace("eof["+s+"]="+eof[s]); + for (var p:int=0; p<transition[s].length; p++) { + trace(transition[s][p]+" "); + } + trace(); + } + noViableAlt(s,input); + return 0; + } + } + finally { + input.rewindTo(mark); + } + // not reached -- added due to bug in Flex compiler reachability analysis of while loop with no breaks + return -1; + } + + protected function noViableAlt(s:int, input:IntStream):void { + if (recognizer.state.backtracking>0) { + recognizer.state.failed=true; + return; + } + var nvae:NoViableAltException = + new NoViableAltException(description, + decisionNumber, + s, + input); + error(nvae); + throw nvae; + } + + /** A hook for debugging interface */ + public var error:Function = function(nvae:NoViableAltException):NoViableAltException { return nvae; } + + public var specialStateTransition:Function = function(dfa:DFA, s:int, input:IntStream):int { + return -1; + } + + public function get description():String { + return _description; + } + + /** Given a String that has a run-length-encoding of some unsigned shorts + * like "\1\2\3\9", convert to short[] {2,9,9,9}. We do this to avoid + * static short[] which generates so much init code that the class won't + * compile. :( + */ + public static function unpackEncodedString(encodedString:String, unsigned:Boolean = false):Array { + // walk first to find how big it is. + /* Don't pre-allocate + var size:int = 0; + for (var i:int=0; i<encodedString.length; i+=2) { + size += encodedString.charCodeAt(i); + } + */ + var data:Array = new Array(); + var di:int = 0; + for (var i:int=0; i<encodedString.length; i+=2) { + var n:int = encodedString.charCodeAt(i); + if (n > 0x8000) { + // need to read another byte + i++; + var lowBits:int = encodedString.charCodeAt(i); + n &= 0xff; + n <<= 8; + n |= lowBits; + } + var v:int = encodedString.charCodeAt(i+1); + if (v > 0x8000) { + // need to read another byte + i++; + lowBits = encodedString.charCodeAt(i); + v &= 0xff; + v <<= 8; + v |= lowBits; + } + if (!unsigned && v > 0x7fff) { + v = -(0xffff - v + 1); + } + // add v n times to data + for (var j:int=1; j<=n; j++) { + data[di++] = v; + } + } + return data; + } + + } + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/EarlyExitException.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/EarlyExitException.as new file mode 100644 index 0000000..0604efc --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/EarlyExitException.as @@ -0,0 +1,39 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime +{ + /** The recognizer did not match anything for a (..)+ loop. */ + public class EarlyExitException extends RecognitionException { + public var decisionNumber:int; + + public function EarlyExitException(decisionNumber:int, input:IntStream) { + super(input); + this.decisionNumber = decisionNumber; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/FailedPredicateException.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/FailedPredicateException.as new file mode 100644 index 0000000..88713ff --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/FailedPredicateException.as @@ -0,0 +1,49 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime { + + /** A semantic predicate failed during validation. Validation of predicates + * occurs when normally parsing the alternative just like matching a token. + * Disambiguating predicate evaluation occurs when we hoist a predicate into + * a prediction decision. + */ + public class FailedPredicateException extends RecognitionException { + public var ruleName:String; + public var predicateText:String; + + public function FailedPredicateException(input:IntStream, + ruleName:String, + predicateText:String) + { + super(input); + this.ruleName = ruleName; + this.predicateText = predicateText; + } + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/IntStream.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/IntStream.as new file mode 100644 index 0000000..71e193b --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/IntStream.as @@ -0,0 +1,122 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime { + /** A simple stream of integers used when all I care about is the char + * or token type sequence (such as interpretation). + */ + public interface IntStream { + function consume():void; + + /** Get int at current input pointer + i ahead where i=1 is next int. + * Negative indexes are allowed. LA(-1) is previous token (token + * just matched). LA(-i) where i is before first token should + * yield -1, invalid char / EOF. + */ + function LA(i:int):int; + + /** Tell the stream to start buffering if it hasn't already. Return + * current input position, index(), or some other marker so that + * when passed to rewind() you get back to the same spot. + * rewind(mark()) should not affect the input cursor. The Lexer + * track line/col info as well as input index so its markers are + * not pure input indexes. Same for tree node streams. + */ + function mark():int; + + /** Return the current input symbol index 0..n where n indicates the + * last symbol has been read. The index is the symbol about to be + * read not the most recently read symbol. + */ + function get index():int; + + /** Reset the stream so that next call to index would return marker. + * The marker will usually be index() but it doesn't have to be. It's + * just a marker to indicate what state the stream was in. This is + * essentially calling release() and seek(). If there are markers + * created after this marker argument, this routine must unroll them + * like a stack. Assume the state the stream was in when this marker + * was created. + */ + function rewindTo(marker:int):void; + + /** Rewind to the input position of the last marker. + * Used currently only after a cyclic DFA and just + * before starting a sem/syn predicate to get the + * input position back to the start of the decision. + * Do not "pop" the marker off the state. mark(i) + * and rewind(i) should balance still. It is + * like invoking rewind(last marker) but it should not "pop" + * the marker off. It's like seek(last marker's input position). + */ + function rewind():void; + + /** You may want to commit to a backtrack but don't want to force the + * stream to keep bookkeeping objects around for a marker that is + * no longer necessary. This will have the same behavior as + * rewind() except it releases resources without the backward seek. + * This must throw away resources for all markers back to the marker + * argument. So if you're nested 5 levels of mark(), and then release(2) + * you have to release resources for depths 2..5. + */ + function release(marker:int):void; + + /** Set the input cursor to the position indicated by index. This is + * normally used to seek ahead in the input stream. No buffering is + * required to do this unless you know your stream will use seek to + * move backwards such as when backtracking. + * + * This is different from rewind in its multi-directional + * requirement and in that its argument is strictly an input cursor (index). + * + * For char streams, seeking forward must update the stream state such + * as line number. For seeking backwards, you will be presumably + * backtracking using the mark/rewind mechanism that restores state and + * so this method does not need to update state when seeking backwards. + * + * Currently, this method is only used for efficient backtracking using + * memoization, but in the future it may be used for incremental parsing. + * + * The index is 0..n-1. A seek to position i means that LA(1) will + * return the ith symbol. So, seeking to 0 means LA(1) will return the + * first element in the stream. + */ + function seek(index:int):void; + + /** Only makes sense for streams that buffer everything up probably, but + * might be useful to display the entire stream or for testing. This + * value includes a single EOF. + */ + function get size():int; + + /** Where are you getting symbols from? Normally, implementations will + * pass the buck all the way to the lexer who can ask its input stream + * for the file name or whatever. + */ + function get sourceName():String; + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/Lexer.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/Lexer.as new file mode 100644 index 0000000..a1c4937 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/Lexer.as @@ -0,0 +1,323 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime { + + /** A lexer is recognizer that draws input symbols from a character stream. + * lexer grammars result in a subclass of this object. A Lexer object + * uses simplified match() and error recovery mechanisms in the interest + * of speed. + */ + public class Lexer extends BaseRecognizer implements TokenSource { + /** Where is the lexer drawing characters from? */ + protected var input:CharStream; + + public function Lexer(input:CharStream = null, state:RecognizerSharedState = null) { + super(state); + this.input = input; + } + + public override function reset():void { + super.reset(); // reset all recognizer state variables + // wack Lexer state variables + if ( input!=null ) { + input.seek(0); // rewind the input + } + if ( state==null ) { + return; // no shared state work to do + } + state.token = null; + state.type = TokenConstants.INVALID_TOKEN_TYPE; + state.channel = TokenConstants.DEFAULT_CHANNEL; + state.tokenStartCharIndex = -1; + state.tokenStartCharPositionInLine = -1; + state.tokenStartLine = -1; + state.text = null; + } + + /** Return a token from this source; i.e., match a token on the char + * stream. + */ + public function nextToken():Token { + while (true) { + state.token = null; + state.channel = TokenConstants.DEFAULT_CHANNEL; + state.tokenStartCharIndex = input.index; + state.tokenStartCharPositionInLine = input.charPositionInLine; + state.tokenStartLine = input.line; + state.text = null; + if ( input.LA(1)==CharStreamConstants.EOF ) { + return TokenConstants.EOF_TOKEN; + } + try { + mTokens(); + if ( state.token==null ) { + emit(); + } + else if ( state.token==TokenConstants.SKIP_TOKEN ) { + continue; + } + return state.token; + } + catch (nva:NoViableAltException) { + reportError(nva); + recover(nva); // throw out current char and try again + } + catch (re:RecognitionException) { + reportError(re); + // match() routine has already called recover() + } + } + // Can't happen, but will quiet complier error + return null; + } + + /** Instruct the lexer to skip creating a token for current lexer rule + * and look for another token. nextToken() knows to keep looking when + * a lexer rule finishes with token set to SKIP_TOKEN. Recall that + * if token==null at end of any token rule, it creates one for you + * and emits it. + */ + public function skip():void { + state.token = TokenConstants.SKIP_TOKEN; + } + + /** This is the lexer entry point that sets instance var 'token' */ + public function mTokens():void { + // abstract function + throw new Error("Not implemented"); + } + + /** Set the char stream and reset the lexer */ + public function set charStream(input:CharStream):void { + this.input = null; + reset(); + this.input = input; + } + + public function get charStream():CharStream { + return input; + } + + public override function get sourceName():String { + return input.sourceName; + } + + /** Currently does not support multiple emits per nextToken invocation + * for efficiency reasons. Subclass and override this method and + * nextToken (to push tokens into a list and pull from that list rather + * than a single variable as this implementation does). + */ + public function emitToken(token:Token):void { + state.token = token; + } + + /** The standard method called to automatically emit a token at the + * outermost lexical rule. The token object should point into the + * char buffer start..stop. If there is a text override in 'text', + * use that to set the token's text. Override this method to emit + * custom Token objects. + */ + public function emit():Token { + var t:Token = CommonToken.createFromStream(input, state.type, state.channel, state.tokenStartCharIndex, charIndex - 1); + t.line = state.tokenStartLine; + t.text = state.text; + t.charPositionInLine = state.tokenStartCharPositionInLine; + emitToken(t); + return t; + } + + public function matchString(s:String):void { + var i:int = 0; + while ( i<s.length ) { + if ( input.LA(1) != s.charCodeAt(i) ) { + if ( state.backtracking>0 ) { + state.failed = true; + return; + } + var mte:MismatchedTokenException = + new MismatchedTokenException(s.charCodeAt(i), input); + recover(mte); + throw mte; + } + i++; + input.consume(); + state.failed = false; + } + } + + public function matchAny():void { + input.consume(); + } + + public function match(c:int):void { + if ( input.LA(1)!=c ) { + if ( state.backtracking>0 ) { + state.failed = true; + return; + } + var mte:MismatchedTokenException = + new MismatchedTokenException(c, input); + recover(mte); // don't really recover; just consume in lexer + throw mte; + } + input.consume(); + state.failed = false; + } + + public function matchRange(a:int, b:int):void + { + if ( input.LA(1)<a || input.LA(1)>b ) { + if ( state.backtracking>0 ) { + state.failed = true; + return; + } + var mre:MismatchedRangeException = + new MismatchedRangeException(a,b,input); + recover(mre); + throw mre; + } + input.consume(); + state.failed = false; + } + + public function get line():int { + return input.line; + } + + public function get charPositionInLine():int { + return input.charPositionInLine; + } + + /** What is the index of the current character of lookahead? */ + public function get charIndex():int { + return input.index; + } + + /** Return the text matched so far for the current token or any + * text override. + */ + public function get text():String { + if ( state.text!=null ) { + return state.text; + } + return input.substring(state.tokenStartCharIndex, charIndex-1); + } + + /** Set the complete text of this token; it wipes any previous + * changes to the text. + */ + public function set text(text:String):void { + state.text = text; + } + + public override function reportError(e:RecognitionException):void { + displayRecognitionError(this.tokenNames, e); + } + + public override function getErrorMessage(e:RecognitionException, tokenNames:Array):String { + var msg:String = null; + if ( e is MismatchedTokenException ) { + var mte:MismatchedTokenException = MismatchedTokenException(e); + msg = "mismatched character "+getCharErrorDisplay(e.c)+" expecting "+getCharErrorDisplay(mte.expecting); + } + else if ( e is NoViableAltException ) { + var nvae:NoViableAltException = NoViableAltException(e); + // for development, can add "decision=<<"+nvae.grammarDecisionDescription+">>" + // and "(decision="+nvae.decisionNumber+") and + // "state "+nvae.stateNumber + msg = "no viable alternative at character "+getCharErrorDisplay(e.c); + } + else if ( e is EarlyExitException ) { + var eee:EarlyExitException = EarlyExitException(e); + // for development, can add "(decision="+eee.decisionNumber+")" + msg = "required (...)+ loop did not match anything at character "+getCharErrorDisplay(e.c); + } + else if ( e is MismatchedNotSetException ) { + var mnse:MismatchedNotSetException = MismatchedNotSetException(e); + msg = "mismatched character "+getCharErrorDisplay(e.c)+" expecting set "+mnse.expecting; + } + else if ( e is MismatchedSetException ) { + var mse:MismatchedSetException = MismatchedSetException(e); + msg = "mismatched character "+getCharErrorDisplay(e.c)+" expecting set "+mse.expecting; + } + else if ( e is MismatchedRangeException ) { + var mre:MismatchedRangeException = MismatchedRangeException(e); + msg = "mismatched character "+getCharErrorDisplay(e.c)+" expecting set "+ + getCharErrorDisplay(mre.a)+".."+getCharErrorDisplay(mre.b); + } + else { + msg = super.getErrorMessage(e, tokenNames); + } + return msg; + } + + public function getCharErrorDisplay(c:int):String { + var s:String = String.fromCharCode(c); + switch ( c ) { + case TokenConstants.EOF : + s = "<EOF>"; + break; + case '\n' : + s = "\\n"; + break; + case '\t' : + s = "\\t"; + break; + case '\r' : + s = "\\r"; + break; + } + return "'"+s+"'"; + } + + /** Lexers can normally match any char in it's vocabulary after matching + * a token, so do the easy thing and just kill a character and hope + * it all works out. You can instead use the rule invocation stack + * to do sophisticated error recovery if you are in a fragment rule. + * + * @return This method should return the exception it was provided as an + * argument. This differs from the Java runtime so that an exception variable + * does not need to be declared in the generated code, thus reducing a large + * number of compiler warnings in generated code. + */ + public function recover(re:RecognitionException):RecognitionException { + input.consume(); + return re; + } + + public function traceIn(ruleName:String, ruleIndex:int):void { + var inputSymbol:String = String.fromCharCode(input.LT(1))+" line="+ line +":"+ charPositionInLine; + super.traceInSymbol(ruleName, ruleIndex, inputSymbol); + } + + public function traceOut(ruleName:String, ruleIndex:int):void { + var inputSymbol:String = String.fromCharCode(input.LT(1))+" line="+ line +":"+ charPositionInLine; + super.traceOutSymbol(ruleName, ruleIndex, inputSymbol); + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedNotSetException.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedNotSetException.as new file mode 100644 index 0000000..0e4bb9c --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedNotSetException.as @@ -0,0 +1,38 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime { + + public class MismatchedNotSetException extends MismatchedSetException { + + public function MismatchedNotSetException(expecting:BitSet, input:IntStream) { + super(expecting, input); + } + + } + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedRangeException.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedRangeException.as new file mode 100644 index 0000000..98864bd --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedRangeException.as @@ -0,0 +1,44 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime +{ + public class MismatchedRangeException extends RecognitionException { + public var a:int, b:int; + + public function MismatchedRangeException(a:int, b:int, input:IntStream) { + super(input); + this.a = a; + this.b = b; + } + + public function toString():String { + return "MismatchedNotSetException("+unexpectedType+" not in ["+a+","+b+"])"; + } + } + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedSetException.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedSetException.as new file mode 100644 index 0000000..bc0d20f --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedSetException.as @@ -0,0 +1,42 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime { + + public class MismatchedSetException extends RecognitionException { + public var expecting:BitSet; + + public function MismatchedSetException(expecting:BitSet, input:IntStream) { + super(input); + this.expecting = expecting; + } + + public function toString():String { + return "MismatchedSetException("+unexpectedType+"!="+expecting+")"; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedTokenException.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedTokenException.as new file mode 100644 index 0000000..b7fb324 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedTokenException.as @@ -0,0 +1,45 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime { + + /** A mismatched char or Token or tree node */ + public class MismatchedTokenException extends RecognitionException { + public var expecting:int = TokenConstants.INVALID_TOKEN_TYPE; + + public function MismatchedTokenException(expecting:int, input:IntStream) { + super(input); + this.expecting = expecting; + } + + public function toString():String { + return "MismatchedTokenException("+unexpectedType+"!="+expecting+")"; + } + } + + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedTreeNodeException.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedTreeNodeException.as new file mode 100644 index 0000000..c008531 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MismatchedTreeNodeException.as @@ -0,0 +1,16 @@ +package org.antlr.runtime { + import org.antlr.runtime.tree.TreeNodeStream; + + public class MismatchedTreeNodeException extends RecognitionException { + public var expecting:int; + + public function MismatchedTreeNodeException(expecting:int, input:TreeNodeStream) { + super(input); + this.expecting = expecting; + } + + public function toString():String { + return "MismatchedTreeNodeException("+unexpectedType+"!="+expecting+")"; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MissingTokenException.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MissingTokenException.as new file mode 100644 index 0000000..fe1abf0 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/MissingTokenException.as @@ -0,0 +1,28 @@ +package org.antlr.runtime { + + public class MissingTokenException extends MismatchedTokenException { + + public var inserted:Object; + + public function MissingTokenException(expecting:int, input:IntStream, inserted:Object) { + super(expecting, input); + this.inserted = inserted; + } + + public function get missingType():int { + return expecting; + } + + public override function toString():String { + if ( inserted!=null && token!=null ) { + return "MissingTokenException(inserted "+inserted+" at "+token.text+")"; + } + if ( token!=null ) { + return "MissingTokenException(at "+token.text+")"; + } + return "MissingTokenException"; + } + + } + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/NoViableAltException.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/NoViableAltException.as new file mode 100644 index 0000000..80e7a67 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/NoViableAltException.as @@ -0,0 +1,56 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime { + + public class NoViableAltException extends RecognitionException { + public var grammarDecisionDescription:String; + public var decisionNumber:int; + public var stateNumber:int; + + public function NoViableAltException(grammarDecisionDescription:String, + decisionNumber:int, + stateNumber:int, + input:IntStream) + { + super(input); + this.grammarDecisionDescription = grammarDecisionDescription; + this.decisionNumber = decisionNumber; + this.stateNumber = stateNumber; + } + + public function toString():String { + if ( input is CharStream ) { + return "NoViableAltException('"+String.fromCharCode(unexpectedType)+"'@["+grammarDecisionDescription+"])"; + } + else { + return "NoViableAltException("+unexpectedType+"@["+grammarDecisionDescription+"])"; + } + } + } + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/Parser.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/Parser.as new file mode 100644 index 0000000..c158337 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/Parser.as @@ -0,0 +1,104 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime { + import org.antlr.runtime.tree.TreeAdaptor; + + /** A parser for TokenStreams. "parser grammars" result in a subclass + * of this. + */ + public class Parser extends BaseRecognizer { + protected var input:TokenStream; + + public function Parser(input:TokenStream, state:RecognizerSharedState = null) { + super(state); + tokenStream = input; + } + + public override function reset():void { + super.reset(); // reset all recognizer state variables + if ( input!=null ) { + input.seek(0); // rewind the input + } + } + + protected override function getCurrentInputSymbol(input:IntStream):Object { + return TokenStream(input).LT(1); + } + + protected override function getMissingSymbol(input:IntStream, + e:RecognitionException, + expectedTokenType:int, + follow:BitSet):Object { + var tokenText:String = null; + if ( expectedTokenType==TokenConstants.EOF ) tokenText = "<missing EOF>"; + else tokenText = "<missing "+tokenNames[expectedTokenType]+">"; + var t:CommonToken = new CommonToken(expectedTokenType, tokenText); + var current:Token = TokenStream(input).LT(1); + if ( current.type == TokenConstants.EOF ) { + current = TokenStream(input).LT(-1); + } + t.line = current.line; + t.charPositionInLine = current.charPositionInLine; + t.channel = DEFAULT_TOKEN_CHANNEL; + return t; + } + + /** Set the token stream and reset the parser */ + public function set tokenStream(input:TokenStream):void { + this.input = null; + reset(); + this.input = input; + } + + public function get tokenStream():TokenStream { + return input; + } + + public override function get sourceName():String { + return input.sourceName; + } + + public function set treeAdaptor(adaptor:TreeAdaptor):void { + // do nothing, implemented in generated code + } + + public function get treeAdaptor():TreeAdaptor { + // implementation provided in generated code + return null; + } + + public function traceIn(ruleName:String, ruleIndex:int):void { + super.traceInSymbol(ruleName, ruleIndex, input.LT(1)); + } + + public function traceOut(ruleName:String, ruleIndex:int):void { + super.traceOutSymbol(ruleName, ruleIndex, input.LT(1)); + } + } + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/ParserRuleReturnScope.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/ParserRuleReturnScope.as new file mode 100644 index 0000000..8131543 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/ParserRuleReturnScope.as @@ -0,0 +1,55 @@ +package org.antlr.runtime +{ + /** Rules that return more than a single value must return an object + * containing all the values. Besides the properties defined in + * RuleLabelScope.predefinedRulePropertiesScope there may be user-defined + * return values. This class simply defines the minimum properties that + * are always defined and methods to access the others that might be + * available depending on output option such as template and tree. + * + * Note text is not an actual property of the return value, it is computed + * from start and stop using the input stream's toString() method. I + * could add a ctor to this so that we can pass in and store the input + * stream, but I'm not sure we want to do that. It would seem to be undefined + * to get the .text property anyway if the rule matches tokens from multiple + * input streams. + * + * I do not use getters for fields of objects that are used simply to + * group values such as this aggregate. + */ + public class ParserRuleReturnScope extends RuleReturnScope { + private var _startToken:Token; + private var _stopToken:Token; + private var _tree:Object; // if output=AST this contains the tree + private var _values:Object = new Object(); // contains the return values + + public override function get start():Object { + return _startToken; + } + + public function set start(token:Object):void { + _startToken = Token(token); + } + + public override function get stop():Object { + return _stopToken; + } + + public function set stop(token:Object):void { + _stopToken = Token(token); + } + + /** Has a value potentially if output=AST; */ + public override function get tree():Object { + return _tree; + } + + public function set tree(tree:Object):void { + _tree = tree; + } + + public function get values():Object { + return _values; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/RecognitionException.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/RecognitionException.as new file mode 100644 index 0000000..7710b96 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/RecognitionException.as @@ -0,0 +1,183 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime { + import org.antlr.runtime.tree.Tree; + import org.antlr.runtime.tree.TreeNodeStream; + import org.antlr.runtime.tree.TreeAdaptor; + import org.antlr.runtime.tree.CommonTree; + /** The root of the ANTLR exception hierarchy. + * + * To avoid English-only error messages and to generally make things + * as flexible as possible, these exceptions are not created with strings, + * but rather the information necessary to generate an error. Then + * the various reporting methods in Parser and Lexer can be overridden + * to generate a localized error message. For example, MismatchedToken + * exceptions are built with the expected token type. + * So, don't expect getMessage() to return anything. + * + * Note that as of Java 1.4, you can access the stack trace, which means + * that you can compute the complete trace of rules from the start symbol. + * This gives you considerable context information with which to generate + * useful error messages. + * + * ANTLR generates code that throws exceptions upon recognition error and + * also generates code to catch these exceptions in each rule. If you + * want to quit upon first error, you can turn off the automatic error + * handling mechanism using rulecatch action, but you still need to + * override methods mismatch and recoverFromMismatchSet. + * + * In general, the recognition exceptions can track where in a grammar a + * problem occurred and/or what was the expected input. While the parser + * knows its state (such as current input symbol and line info) that + * state can change before the exception is reported so current token index + * is computed and stored at exception time. From this info, you can + * perhaps print an entire line of input not just a single token, for example. + * Better to just say the recognizer had a problem and then let the parser + * figure out a fancy report. + */ + public class RecognitionException extends Error { + /** What input stream did the error occur in? */ + public var input:IntStream; + + /** What is index of token/char were we looking at when the error occurred? */ + public var index:int; + + /** The current Token when an error occurred. Since not all streams + * can retrieve the ith Token, we have to track the Token object. + * For parsers. Even when it's a tree parser, token might be set. + */ + public var token:Token; + + /** If this is a tree parser exception, node is set to the node with + * the problem. + */ + public var node:Object; + + /** The current char when an error occurred. For lexers. */ + public var c:int; + + /** Track the line at which the error occurred in case this is + * generated from a lexer. We need to track this since the + * unexpected char doesn't carry the line info. + */ + public var line:int; + + public var charPositionInLine:int; + + /** If you are parsing a tree node stream, you will encounter som + * imaginary nodes w/o line/col info. We now search backwards looking + * for most recent token with line/col info, but notify getErrorHeader() + * that info is approximate. + */ + public var approximateLineInfo:Boolean; + + public function RecognitionException(input:IntStream = null) { + if (input == null) { + return; + } + this.input = input; + this.index = input.index; + if ( input is TokenStream ) { + this.token = TokenStream(input).LT(1); + this.line = token.line; + this.charPositionInLine = token.charPositionInLine; + } + if ( input is TreeNodeStream ) { + extractInformationFromTreeNodeStream(input); + } + else if ( input is CharStream ) { + this.c = input.LA(1); + this.line = CharStream(input).line; + this.charPositionInLine = CharStream(input).charPositionInLine; + } + else { + this.c = input.LA(1); + } + } + + protected function extractInformationFromTreeNodeStream(input:IntStream):void { + var nodes:TreeNodeStream = TreeNodeStream(input); + this.node = nodes.LT(1); + var adaptor:TreeAdaptor = nodes.treeAdaptor; + var payload:Token = adaptor.getToken(node); + if ( payload!=null ) { + this.token = payload; + if ( payload.line<= 0 ) { + // imaginary node; no line/pos info; scan backwards + var i:int = -1; + var priorNode:Object = nodes.LT(i); + while ( priorNode!=null ) { + var priorPayload:Token = adaptor.getToken(priorNode); + if ( priorPayload!=null && priorPayload.line > 0 ) { + // we found the most recent real line / pos info + this.line = priorPayload.line; + this.charPositionInLine = priorPayload.charPositionInLine; + this.approximateLineInfo = true; + break; + } + --i; + priorNode = nodes.LT(i); + } + } + else { // node created from real token + this.line = payload.line; + this.charPositionInLine = payload.charPositionInLine; + } + } + else if ( this.node is Tree) { + this.line = this.node.line; + this.charPositionInLine = this.node.charPositionInLine; + if ( this.node is CommonTree) { + this.token = this.node.token; + } + } + else { + var type:int = adaptor.getType(this.node); + var text:String = adaptor.getText(this.node); + this.token = new CommonToken(type, text); + } + } + + /** Return the token type or char of the unexpected input element */ + public function get unexpectedType():int { + if ( input is TokenStream ) { + return token.type; + } + else if ( input is TreeNodeStream ) { + var nodes:TreeNodeStream = TreeNodeStream(input); + var adaptor:TreeAdaptor = nodes.treeAdaptor; + return adaptor.getType(node); + } + else { + return c; + } + + } + } + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/RecognizerSharedState.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/RecognizerSharedState.as new file mode 100644 index 0000000..fb505fa --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/RecognizerSharedState.as @@ -0,0 +1,93 @@ +package org.antlr.runtime { + + /** The set of fields needed by an abstract recognizer to recognize input + * and recover from errors etc... As a separate state object, it can be + * shared among multiple grammars; e.g., when one grammar imports another. + * + * These fields are publically visible but the actual state pointer per + * parser is protected. + */ + public class RecognizerSharedState { + /** Track the set of token types that can follow any rule invocation. + * Stack grows upwards. When it hits the max, it grows 2x in size + * and keeps going. + */ + public var following:Array = new Array(BaseRecognizer.INITIAL_FOLLOW_STACK_SIZE); + public var _fsp:int = -1; + + /** This is true when we see an error and before having successfully + * matched a token. Prevents generation of more than one error message + * per error. + */ + public var errorRecovery:Boolean = false; + + /** The index into the input stream where the last error occurred. + * This is used to prevent infinite loops where an error is found + * but no token is consumed during recovery...another error is found, + * ad naseum. This is a failsafe mechanism to guarantee that at least + * one token/tree node is consumed for two errors. + */ + public var lastErrorIndex:int = -1; + + /** In lieu of a return value, this indicates that a rule or token + * has failed to match. Reset to false upon valid token match. + */ + public var failed:Boolean = false; + + /** Did the recognizer encounter a syntax error? Track how many. */ + public var syntaxErrors:int = 0; + + /** If 0, no backtracking is going on. Safe to exec actions etc... + * If >0 then it's the level of backtracking. + */ + public var backtracking:int = 0; + + /** An Array[size num rules] of Arrays that tracks + * the stop token index for each rule. ruleMemo[ruleIndex] is + * the memoization table for ruleIndex. For key ruleStartIndex, you + * get back the stop token for associated rule or MEMO_RULE_FAILED. + * + * This is only used if rule memoization is on (which it is by default). + */ + public var ruleMemo:Array; + + + // LEXER FIELDS (must be in same state object to avoid casting + // constantly in generated code and Lexer object) :( + + + /** The goal of all lexer rules/methods is to create a token object. + * This is an instance variable as multiple rules may collaborate to + * create a single token. nextToken will return this object after + * matching lexer rule(s). If you subclass to allow multiple token + * emissions, then set this to the last token to be matched or + * something nonnull so that the auto token emit mechanism will not + * emit another token. + */ + public var token:Token; + + /** What character index in the stream did the current token start at? + * Needed, for example, to get the text for current token. Set at + * the start of nextToken. + */ + public var tokenStartCharIndex:int = -1; + + /** The line on which the first character of the token resides */ + public var tokenStartLine:int; + + /** The character position of first character within the line */ + public var tokenStartCharPositionInLine:int; + + /** The channel number for the current token */ + public var channel:int; + + /** The token type for the current token */ + public var type:int; + + /** You can set the text for the current token to override what is in + * the input char buffer. Use setText() or can set this instance var. + */ + public var text:String; + } + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/RuleReturnScope.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/RuleReturnScope.as new file mode 100644 index 0000000..bb1fc48 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/RuleReturnScope.as @@ -0,0 +1,13 @@ +package org.antlr.runtime +{ + /** Rules can return start/stop info as well as possible trees and templates */ + public class RuleReturnScope { + /** Return the start token or tree */ + public function get start():Object { return null; } + /** Return the stop token or tree */ + public function get stop():Object { return null; } + /** Has a value potentially if output=AST; */ + public function get tree():Object { return null; } + } + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/Token.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/Token.as new file mode 100644 index 0000000..d3cc9b2 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/Token.as @@ -0,0 +1,64 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2007 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime { + public interface Token { + + /** Get the text of the token */ + function get text():String; + function set text(text:String):void; + + function get type():int; + function set type(ttype:int):void; + + /** The line number on which this token was matched; line=1..n */ + function get line():int; + function set line(line:int):void; + + /** The index of the first character relative to the beginning of the line 0..n-1 */ + function get charPositionInLine():int; + function set charPositionInLine(pos:int):void; + + function get channel():int; + function set channel(channel:int):void; + + /** An index from 0..n-1 of the token object in the input stream. + * This must be valid in order to use the ANTLRWorks debugger. + */ + function get tokenIndex():int; + function set tokenIndex(index:int):void; + + /** From what character stream was this token created? You don't have to + * implement but it's nice to know where a Token comes from if you have + * include files etc... on the input. + */ + function get inputStream():CharStream; + function set inputStream(input:CharStream):void; + + } + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/TokenConstants.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/TokenConstants.as new file mode 100644 index 0000000..e1288a2 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/TokenConstants.as @@ -0,0 +1,35 @@ +package org.antlr.runtime { + public class TokenConstants { + public static const EOR_TOKEN_TYPE:int = 1; + + /** imaginary tree navigation type; traverse "get child" link */ + public static const DOWN:int = 2; + /** imaginary tree navigation type; finish with a child list */ + public static const UP:int = 3; + + public static const MIN_TOKEN_TYPE:int = UP+1; + + public static const EOF:int = CharStreamConstants.EOF; + public static const EOF_TOKEN:Token = new CommonToken(EOF); + + public static const INVALID_TOKEN_TYPE:int = 0; + public static const INVALID_TOKEN:Token = new CommonToken(INVALID_TOKEN_TYPE); + + /** In an action, a lexer rule can set token to this SKIP_TOKEN and ANTLR + * will avoid creating a token for this symbol and try to fetch another. + */ + public static const SKIP_TOKEN:Token = new CommonToken(INVALID_TOKEN_TYPE); + + /** All tokens go to the parser (unless skip() is called in that rule) + * on a particular "channel". The parser tunes to a particular channel + * so that whitespace etc... can go to the parser on a "hidden" channel. + */ + public static const DEFAULT_CHANNEL:int = 0; + + /** Anything on different channel than DEFAULT_CHANNEL is not parsed + * by parser. + */ + public static const HIDDEN_CHANNEL:int = 99; + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/TokenRewriteStream.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/TokenRewriteStream.as new file mode 100644 index 0000000..a15eea6 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/TokenRewriteStream.as @@ -0,0 +1,509 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime { + import flash.utils.getQualifiedClassName; + + + /** Useful for dumping out the input stream after doing some + * augmentation or other manipulations. + * + * You can insert stuff, replace, and delete chunks. Note that the + * operations are done lazily--only if you convert the buffer to a + * String. This is very efficient because you are not moving data around + * all the time. As the buffer of tokens is converted to strings, the + * toString() method(s) check to see if there is an operation at the + * current index. If so, the operation is done and then normal String + * rendering continues on the buffer. This is like having multiple Turing + * machine instruction streams (programs) operating on a single input tape. :) + * + * Since the operations are done lazily at toString-time, operations do not + * screw up the token index values. That is, an insert operation at token + * index i does not change the index values for tokens i+1..n-1. + * + * Because operations never actually alter the buffer, you may always get + * the original token stream back without undoing anything. Since + * the instructions are queued up, you can easily simulate transactions and + * roll back any changes if there is an error just by removing instructions. + * For example, + * + * var input:CharStream = new ANTLRFileStream("input"); + * var lex:TLexer = new TLexer(input); + * var tokens:TokenRewriteStream = new TokenRewriteStream(lex); + * var parser:T = new T(tokens); + * parser.startRule(); + * + * Then in the rules, you can execute + * var t:Token t, u:Token; + * ... + * input.insertAfter(t, "text to put after t");} + * input.insertAfter(u, "text after u");} + * trace(tokens.toString()); + * + * Actually, you have to cast the 'input' to a TokenRewriteStream. :( + * + * You can also have multiple "instruction streams" and get multiple + * rewrites from a single pass over the input. Just name the instruction + * streams and use that name again when printing the buffer. This could be + * useful for generating a C file and also its header file--all from the + * same buffer: + * + * tokens.insertAfter("pass1", t, "text to put after t");} + * tokens.insertAfter("pass2", u, "text after u");} + * trace(tokens.toString("pass1")); + * trace(tokens.toString("pass2")); + * + * If you don't use named rewrite streams, a "default" stream is used as + * the first example shows. + */ + public class TokenRewriteStream extends CommonTokenStream { + public static const DEFAULT_PROGRAM_NAME:String = "default"; + public static const MIN_TOKEN_INDEX:int = 0; + + /** You may have multiple, named streams of rewrite operations. + * I'm calling these things "programs." + * Maps String (name) -> rewrite (List) + */ + protected var programs:Object = new Object(); + + /** Map String (program name) -> Integer index */ + protected var lastRewriteTokenIndexes:Object = new Object(); + + public function TokenRewriteStream(tokenSource:TokenSource = null, channel:int = TokenConstants.DEFAULT_CHANNEL) { + super(tokenSource, channel); + programs[DEFAULT_PROGRAM_NAME] = new Array(); + } + + /** Rollback the instruction stream for a program so that + * the indicated instruction (via instructionIndex) is no + * longer in the stream. UNTESTED! + */ + public function rollback(instructionIndex:int, programName:String = DEFAULT_PROGRAM_NAME):void { + var isn:Array = programs[programName] as Array; + if ( isn != null ) { + programs[programName] = isn.slice(MIN_TOKEN_INDEX,instructionIndex); + } + } + + /** Reset the program so that no instructions exist */ + public function deleteProgram(programName:String = DEFAULT_PROGRAM_NAME):void { + rollback(MIN_TOKEN_INDEX, programName); + } + + public function insertAfterToken(t:Token, text:Object, programName:String = DEFAULT_PROGRAM_NAME):void { + insertAfter(t.tokenIndex, text, programName); + } + + public function insertAfter(index:int, text:Object, programName:String = DEFAULT_PROGRAM_NAME):void { + // to insert after, just insert before next index (even if past end) + insertBefore(index+1, text, programName); + } + + public function insertBeforeToken(t:Token, text:Object, programName:String = DEFAULT_PROGRAM_NAME):void { + insertBefore(t.tokenIndex, text, programName); + } + + public function insertBefore(index:int, text:Object, programName:String = DEFAULT_PROGRAM_NAME):void { + var op:RewriteOperation = new InsertBeforeOp(index,text); + var rewrites:Array = getProgram(programName); + op.instructionIndex = rewrites.length; + rewrites.push(op); + } + + public function replace(index:int, text:Object, programName:String = DEFAULT_PROGRAM_NAME):void { + replaceRange(index, index, text, programName); + } + + public function replaceRange(fromIndex:int, toIndex:int, text:Object, programName:String = DEFAULT_PROGRAM_NAME):void { + if ( fromIndex > toIndex || fromIndex<0 || toIndex<0 || toIndex >= tokens.length ) { + throw new Error("replace: range invalid: "+fromIndex+".."+toIndex+"(size="+tokens.length+")"); + } + var op:RewriteOperation = new ReplaceOp(fromIndex, toIndex, text); + var rewrites:Array = getProgram(programName); + op.instructionIndex = rewrites.length; + rewrites.push(op); + } + + public function replaceToken(indexT:Token, text:Object, programName:String = DEFAULT_PROGRAM_NAME):void { + replaceTokenRange(indexT, indexT, text, programName); + } + + public function replaceTokenRange(fromToken:Token, toToken:Token, text:Object, programName:String = DEFAULT_PROGRAM_NAME):void { + replaceRange(fromToken.tokenIndex, toToken.tokenIndex, text, programName); + } + + public function remove(index:int, programName:String = DEFAULT_PROGRAM_NAME):void { + removeRange(index, index, programName); + } + + public function removeRange(fromIndex:int, toIndex:int, programName:String = DEFAULT_PROGRAM_NAME):void { + replaceRange(fromIndex, toIndex, null, programName); + } + + public function removeToken(token:Token, programName:String = DEFAULT_PROGRAM_NAME):void { + removeTokenRange(token, token, programName); + } + + public function removeTokenRange(fromToken:Token, toToken:Token, programName:String = DEFAULT_PROGRAM_NAME):void { + replaceTokenRange(fromToken, toToken, null, programName); + } + + public function getLastRewriteTokenIndex(programName:String = DEFAULT_PROGRAM_NAME):int { + var i:* = lastRewriteTokenIndexes[programName]; + if ( i == undefined ) { + return -1; + } + return i as int; + } + + protected function setLastRewriteTokenIndex(programName:String, i:int):void { + lastRewriteTokenIndexes[programName] = i; + } + + protected function getProgram(name:String):Array { + var isn:Array = programs[name] as Array; + if ( isn==null ) { + isn = initializeProgram(name); + } + return isn; + } + + private function initializeProgram(name:String):Array { + var isn:Array = new Array(); + programs[name] = isn; + return isn; + } + + public function toOriginalString():String { + return toOriginalStringWithRange(MIN_TOKEN_INDEX, size-1); + } + + public function toOriginalStringWithRange(start:int, end:int):String { + var buf:String = new String(); + for (var i:int=start; i>=MIN_TOKEN_INDEX && i<=end && i<tokens.length; i++) { + buf += getToken(i).text; + } + return buf.toString(); + } + + public override function toString():String { + return toStringWithRange(MIN_TOKEN_INDEX, size-1); + } + + public override function toStringWithRange(start:int, end:int):String { + return toStringWithRangeAndProgram(start, end, DEFAULT_PROGRAM_NAME); + } + + public function toStringWithRangeAndProgram(start:int, end:int, programName:String):String { + var rewrites:Array = programs[programName] as Array; + + // ensure start/end are in range + if ( end > tokens.length-1 ) end = tokens.length-1; + if ( start < 0 ) start = 0; + + if ( rewrites==null || rewrites.length==0 ) { + return toOriginalStringWithRange(start,end); // no instructions to execute + } + var state:RewriteState = new RewriteState(); + state.tokens = tokens; + + // First, optimize instruction stream + var indexToOp:Array = reduceToSingleOperationPerIndex(rewrites); + + // Walk buffer, executing instructions and emitting tokens + var i:int = start; + while ( i <= end && i < tokens.length ) { + var op:RewriteOperation = RewriteOperation(indexToOp[i]); + indexToOp[i] = undefined; // remove so any left have index size-1 + var t:Token = Token(tokens[i]); + if ( op==null ) { + // no operation at that index, just dump token + state.buf += t.text; + i++; // move to next token + } + else { + i = op.execute(state); // execute operation and skip + } + } + + // include stuff after end if it's last index in buffer + // So, if they did an insertAfter(lastValidIndex, "foo"), include + // foo if end==lastValidIndex. + if ( end==tokens.length-1 ) { + // Scan any remaining operations after last token + // should be included (they will be inserts). + for each (op in indexToOp) { + if (op == null) continue; + if ( op.index >= tokens.length-1 ) state.buf += op.text; + } + } + + return state.buf; + } + + /** We need to combine operations and report invalid operations (like + * overlapping replaces that are not completed nested). Inserts to + * same index need to be combined etc... Here are the cases: + * + * I.i.u I.j.v leave alone, nonoverlapping + * I.i.u I.i.v combine: Iivu + * + * R.i-j.u R.x-y.v | i-j in x-y delete first R + * R.i-j.u R.i-j.v delete first R + * R.i-j.u R.x-y.v | x-y in i-j ERROR + * R.i-j.u R.x-y.v | boundaries overlap ERROR + * + * I.i.u R.x-y.v | i in x-y delete I + * I.i.u R.x-y.v | i not in x-y leave alone, nonoverlapping + * R.x-y.v I.i.u | i in x-y ERROR + * R.x-y.v I.x.u R.x-y.uv (combine, delete I) + * R.x-y.v I.i.u | i not in x-y leave alone, nonoverlapping + * + * I.i.u = insert u before op @ index i + * R.x-y.u = replace x-y indexed tokens with u + * + * First we need to examine replaces. For any replace op: + * + * 1. wipe out any insertions before op within that range. + * 2. Drop any replace op before that is contained completely within + * that range. + * 3. Throw exception upon boundary overlap with any previous replace. + * + * Then we can deal with inserts: + * + * 1. for any inserts to same index, combine even if not adjacent. + * 2. for any prior replace with same left boundary, combine this + * insert with replace and delete this replace. + * 3. throw exception if index in same range as previous replace + * + * Don't actually delete; make op null in list. Easier to walk list. + * Later we can throw as we add to index -> op map. + * + * Note that I.2 R.2-2 will wipe out I.2 even though, technically, the + * inserted stuff would be before the replace range. But, if you + * add tokens in front of a method body '{' and then delete the method + * body, I think the stuff before the '{' you added should disappear too. + * + * Return a map from token index to operation. + */ + protected function reduceToSingleOperationPerIndex(rewrites:Array):Array { + //System.out.println("rewrites="+rewrites); + + // WALK REPLACES + for (var i:int = 0; i < rewrites.length; i++) { + var op:RewriteOperation = RewriteOperation(rewrites[i]); + if ( op==null ) continue; + if ( !(op is ReplaceOp) ) continue; + var rop:ReplaceOp = ReplaceOp(rewrites[i]); + // Wipe prior inserts within range + var inserts:Array = getKindOfOps(rewrites, InsertBeforeOp, i); + for (var j:int = 0; j < inserts.length; j++) { + var iop:InsertBeforeOp = InsertBeforeOp(inserts[j]); + if ( iop.index >= rop.index && iop.index <= rop.lastIndex ) { + rewrites[iop.instructionIndex] = null; // delete insert as it's a no-op. + } + } + // Drop any prior replaces contained within + var prevReplaces:Array = getKindOfOps(rewrites, ReplaceOp, i); + for (j = 0; j < prevReplaces.length; j++) { + var prevRop:ReplaceOp = ReplaceOp(prevReplaces[j]); + if ( prevRop.index>=rop.index && prevRop.lastIndex <= rop.lastIndex ) { + rewrites[prevRop.instructionIndex] = null; // delete replace as it's a no-op. + continue; + } + // throw exception unless disjoint or identical + var disjoint:Boolean = + prevRop.lastIndex<rop.index || prevRop.index > rop.lastIndex; + var same:Boolean = + prevRop.index==rop.index && prevRop.lastIndex==rop.lastIndex; + if ( !disjoint && !same ) { + throw new Error("replace op boundaries of "+rop+ + " overlap with previous "+prevRop); + } + } + } + + // WALK INSERTS + for (i = 0; i < rewrites.length; i++) { + op = RewriteOperation(rewrites[i]); + if ( op==null ) continue; + if ( !(op is InsertBeforeOp) ) continue; + iop = InsertBeforeOp(rewrites[i]); + // combine current insert with prior if any at same index + var prevInserts:Array = getKindOfOps(rewrites, InsertBeforeOp, i); + for (j = 0; j < prevInserts.length; j++) { + var prevIop:InsertBeforeOp = InsertBeforeOp(prevInserts[j]); + if ( prevIop.index == iop.index ) { // combine objects + // convert to strings...we're in process of toString'ing + // whole token buffer so no lazy eval issue with any templates + iop.text = catOpText(iop.text,prevIop.text); + rewrites[prevIop.instructionIndex] = null; // delete redundant prior insert + } + } + // look for replaces where iop.index is in range; error + prevReplaces = getKindOfOps(rewrites, ReplaceOp, i); + for (j = 0; j < prevReplaces.length; j++) { + rop = ReplaceOp(prevReplaces[j]); + if ( iop.index == rop.index ) { + rop.text = catOpText(iop.text,rop.text); + rewrites[i] = null; // delete current insert + continue; + } + if ( iop.index >= rop.index && iop.index <= rop.lastIndex ) { + throw new Error("insert op "+iop+ + " within boundaries of previous "+rop); + } + } + } + // System.out.println("rewrites after="+rewrites); + var m:Array = new Array(); + for (i = 0; i < rewrites.length; i++) { + op = RewriteOperation(rewrites[i]); + if ( op==null ) continue; // ignore deleted ops + if ( m[op.index] != undefined ) { + throw new Error("should only be one op per index"); + } + m[op.index] = op; + } + //System.out.println("index to op: "+m); + return m; + } + + protected function catOpText(a:Object, b:Object):String { + var x:String = ""; + var y:String = ""; + if ( a!=null ) x = a.toString(); + if ( b!=null ) y = b.toString(); + return x+y; + } + + /** Get all operations before an index of a particular kind */ + protected function getKindOfOps(rewrites:Array, kind:Class, before:int = -1):Array { + if (before == -1) { + before = rewrites.length; + } + var ops:Array = new Array(); + for (var i:int=0; i<before && i<rewrites.length; i++) { + var op:RewriteOperation = RewriteOperation(rewrites[i]); + if ( op==null ) continue; // ignore deleted + if ( getQualifiedClassName(op) == getQualifiedClassName(kind) ) ops.push(op); + } + return ops; + } + + + public function toDebugString():String { + return toDebugStringWithRange(MIN_TOKEN_INDEX, size-1); + } + + public function toDebugStringWithRange(start:int, end:int):String { + var buf:String = new String(); + for (var i:int=start; i>=MIN_TOKEN_INDEX && i<=end && i<tokens.length; i++) { + buf += getToken(i); + } + return buf; + } + + + } +} + import org.antlr.runtime.Token; + + +// Define the rewrite operation hierarchy + +class RewriteState { + public var buf:String = new String(); + public var tokens:Array; +} + +class RewriteOperation { + /** What index into rewrites List are we? */ + internal var instructionIndex:int; + /** Token buffer index. */ + public var index:int; + internal var text:Object; + public function RewriteOperation(index:int, text:Object) { + this.index = index; + this.text = text; + } + /** Execute the rewrite operation by possibly adding to the buffer. + * Return the index of the next token to operate on. + */ + public function execute(state:RewriteState):int { + return index; + } +} + +class InsertBeforeOp extends RewriteOperation { + public function InsertBeforeOp(index:int, text:Object) { + super(index,text); + } + + public override function execute(state:RewriteState):int { + state.buf += text; + state.buf += Token(state.tokens[index]).text; + return index + 1; + } + + public function toString():String { + return "<InsertBeforeOp@" + index + ":\"" + text + "\">"; + } +} + +/** I'm going to try replacing range from x..y with (y-x)+1 ReplaceOp + * instructions. + */ +class ReplaceOp extends RewriteOperation { + public var lastIndex:int; + + public function ReplaceOp(fromIndex:int, toIndex:int, text:Object) { + super(fromIndex, text); + lastIndex = toIndex; + } + + public override function execute(state:RewriteState):int { + if ( text!=null ) { + state.buf += text; + } + return lastIndex+1; + } + + public function toString():String { + return "<ReplaceOp@" + index + ".." + lastIndex + ":\"" + text + "\">"; + } +} + +class DeleteOp extends ReplaceOp { + public function DeleteOp(fromIndex:int, toIndex:int) { + super(fromIndex, toIndex, null); + } + + public override function toString():String { + return "<DeleteOp@" + index + ".." + lastIndex + ">"; + } +} diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/TokenSource.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/TokenSource.as new file mode 100644 index 0000000..2c1b90f --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/TokenSource.as @@ -0,0 +1,55 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package org.antlr.runtime { + /** A source of tokens must provide a sequence of tokens via nextToken() + * and also must reveal it's source of characters; CommonToken's text is + * computed from a CharStream; it only store indices into the char stream. + * + * Errors from the lexer are never passed to the parser. Either you want + * to keep going or you do not upon token recognition error. If you do not + * want to continue lexing then you do not want to continue parsing. Just + * throw an exception not under RecognitionException and Java will naturally + * toss you all the way out of the recognizers. If you want to continue + * lexing then you should not throw an exception to the parser--it has already + * requested a token. Keep lexing until you get a valid one. Just report + * errors and keep going, looking for a valid token. + */ + public interface TokenSource { + /** Return a Token object from your input stream (usually a CharStream). + * Do not fail/return upon lexing error; keep chewing on the characters + * until you get a good one; errors are not passed through to the parser. + */ + function nextToken():Token; + + /** Where are you getting tokens from? normally the implication will simply + * ask lexers input stream. + */ + function get sourceName():String; + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/TokenStream.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/TokenStream.as new file mode 100644 index 0000000..3bb374b --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/TokenStream.as @@ -0,0 +1,70 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime { + + /** A stream of tokens accessing tokens from a TokenSource */ + public interface TokenStream extends IntStream { + /** Get Token at current input pointer + i ahead where i=1 is next Token. + * i<0 indicates tokens in the past. So -1 is previous token and -2 is + * two tokens ago. LT(0) is undefined. For i>=n, return Token.EOFToken. + * Return null for LT(0) and any index that results in an absolute address + * that is negative. + */ + function LT(k:int):Token; + + /** Get a token at an absolute index i; 0..n-1. This is really only + * needed for profiling and debugging and token stream rewriting. + * If you don't want to buffer up tokens, then this method makes no + * sense for you. Naturally you can't use the rewrite stream feature. + * I believe DebugTokenStream can easily be altered to not use + * this method, removing the dependency. + */ + function getToken(i:int):Token; + + /** Where is this stream pulling tokens from? This is not the name, but + * the object that provides Token objects. + */ + function get tokenSource():TokenSource; + + /** Return the text of all tokens from start to stop, inclusive. + * If the stream does not buffer all the tokens then it can just + * return "" or null; Users should not access $ruleLabel.text in + * an action of course in that case. + */ + function toStringWithRange(start:int, stop:int):String; + + /** Because the user is not required to use a token with an index stored + * in it, we must provide a means for two token objects themselves to + * indicate the start/end location. Most often this will just delegate + * to the other toString(int,int). This is also parallel with + * the TreeNodeStream.toString(Object,Object). + */ + function toStringWithTokenRange(start:Token, stop:Token):String; + } + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/UnwantedTokenException.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/UnwantedTokenException.as new file mode 100644 index 0000000..c641bc8 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/UnwantedTokenException.as @@ -0,0 +1,25 @@ +package org.antlr.runtime +{ + public class UnwantedTokenException extends MismatchedTokenException + { + public function UnwantedTokenException(expecting:int, input:IntStream) + { + super(expecting, input); + } + + public function get unexpectedToken():Token { + return token; + } + + public override function toString():String { + var exp:String = ", expected "+expecting; + if ( expecting==TokenConstants.INVALID_TOKEN_TYPE ) { + exp = ""; + } + if ( token==null ) { + return "UnwantedTokenException(found="+null+exp+")"; + } + return "UnwantedTokenException(found="+token.text+exp+")"; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/BaseTree.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/BaseTree.as new file mode 100644 index 0000000..8a8880f --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/BaseTree.as @@ -0,0 +1,357 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree { + /** A generic tree implementation with no payload. You must subclass to + * actually have any user data. ANTLR v3 uses a list of children approach + * instead of the child-sibling approach in v2. A flat tree (a list) is + * an empty node whose children represent the list. An empty, but + * non-null node is called "nil". + */ + public class BaseTree implements Tree { + protected var _children:Array; + + /** Create a new node from an existing node does nothing for BaseTree + * as there are no fields other than the children list, which cannot + * be copied as the children are not considered part of this node. + */ + public function BaseTree(node:Tree = null) { + } + + public function getChild(i:int):Tree { + if ( _children==null || i>=_children.length ) { + return null; + } + return BaseTree(_children[i]); + } + + /** Get the children internal List; note that if you directly mess with + * the list, do so at your own risk. + */ + public function get children():Array { + return _children; + } + + public function getFirstChildWithType(type:int):Tree { + for (var i:int = 0; _children!=null && i < _children.length; i++) { + var t:Tree = Tree(_children[i]); + if ( t.type==type ) { + return t; + } + } + return null; + } + + public function get childCount():int { + if ( _children==null ) { + return 0; + } + return _children.length; + } + + /** Add t as child of this node. + * + * Warning: if t has no children, but child does + * and child isNil then this routine moves children to t via + * t.children = child.children; i.e., without copying the array. + */ + public function addChild(t:Tree):void { + if ( t==null ) { + return; // do nothing upon addChild(null) + } + var childTree:BaseTree = BaseTree(t); + if ( childTree.isNil ) { // t is an empty node possibly with children + if ( this._children!=null && this._children == childTree._children ) { + throw new Error("attempt to add child list to itself"); + } + // just add all of childTree's children to this + if ( childTree._children!=null ) { + if ( this._children!=null ) { // must copy, this has children already + var n:int = childTree._children.length; + for (var i:int = 0; i < n; i++) { + var c:Tree = Tree(childTree._children[i]); + this.children.push(c); + // handle double-link stuff for each child of nil root + c.parent = this; + c.childIndex = children.length-1; + } + } + else { + // no children for this but t has children; just set pointer + // call general freshener routine + this._children = childTree.children; + this.freshenParentAndChildIndexes(); + } + } + } + else { // child is not nil (don't care about children) + if ( _children==null ) { + _children = new Array(); // create children list on demand + } + _children.push(t); + childTree.parent = this; + childTree.childIndex = children.length-1; + } + } + + /** Add all elements of kids list as children of this node */ + public function addChildren(kids:Array):void { + for (var i:int = 0; i < kids.length; i++) { + var t:Tree = Tree(kids[i]); + addChild(t); + } + } + + public function setChild(i:int, t:Tree):void { + if ( t==null ) { + return; + } + if ( t.isNil ) { + throw new Error("Can't set single child to a list"); + } + if ( _children==null ) { + _children = new Array(); + } + _children[i] = t; + t.parent = this; + t.childIndex = i; + } + + public function deleteChild(i:int):Object { + if ( _children==null ) { + return null; + } + var killed:BaseTree = BaseTree(children.remove(i)); + // walk rest and decrement their child indexes + this.freshenParentAndChildIndexesFrom(i); + return killed; + } + + /** Delete children from start to stop and replace with t even if t is + * a list (nil-root tree). num of children can increase or decrease. + * For huge child lists, inserting children can force walking rest of + * children to set their childindex; could be slow. + */ + public function replaceChildren(startChildIndex:int, stopChildIndex:int, t:Object):void { + if ( children==null ) { + throw new Error("indexes invalid; no children in list"); + } + var replacingHowMany:int = stopChildIndex - startChildIndex + 1; + var replacingWithHowMany:int; + var newTree:BaseTree = BaseTree(t); + var newChildren:Array = null; + // normalize to a list of children to add: newChildren + if ( newTree.isNil ) { + newChildren = newTree.children; + } + else { + newChildren = new Array(1); + newChildren.add(newTree); + } + replacingWithHowMany = newChildren.length; + var numNewChildren:int = newChildren.length; + var delta:int = replacingHowMany - replacingWithHowMany; + // if same number of nodes, do direct replace + if ( delta == 0 ) { + var j:int = 0; // index into new children + for (var i:int=startChildIndex; i<=stopChildIndex; i++) { + var child:BaseTree = BaseTree(newChildren[j]); + children[i] = child; + child.parent = this; + child.childIndex= i; + j++; + } + } + else if ( delta > 0 ) { // fewer new nodes than there were + // set children and then delete extra + for (j=0; j<numNewChildren; j++) { + children[startChildIndex+j] = newChildren[j]; + } + var indexToDelete:int = startChildIndex+numNewChildren; + for (var c:int=indexToDelete; c<=stopChildIndex; c++) { + // delete same index, shifting everybody down each time + var killed:BaseTree = BaseTree(children.remove(indexToDelete)); + } + freshenParentAndChildIndexesFrom(startChildIndex); + } + else { // more new nodes than were there before + // fill in as many children as we can (replacingHowMany) w/o moving data + for (j=0; j<replacingHowMany; j++) { + children[startChildIndex+j] = newChildren[j]; + } + var numToInsert:int = replacingWithHowMany-replacingHowMany; + for (j=replacingHowMany; j<replacingWithHowMany; j++) { + children.splice(startChildIndex+j, 0, newChildren[j]); + } + freshenParentAndChildIndexesFrom(startChildIndex); + } + } + + public function get isNil():Boolean { + return false; + } + + /** Set the parent and child index values for all child of t */ + public function freshenParentAndChildIndexes():void { + freshenParentAndChildIndexesFrom(0); + } + + public function freshenParentAndChildIndexesFrom(offset:int):void { + var n:int = childCount; + for (var c:int = offset; c < n; c++) { + var child:Tree = Tree(getChild(c)); + child.childIndex = c; + child.parent = this; + } + } + + public function sanityCheckParentAndChildIndexes():void { + sanityCheckParentAndChildIndexesFrom(null, -1); + } + + public function sanityCheckParentAndChildIndexesFrom(parent:Tree, i:int):void { + if ( parent!=this.parent ) { + throw new Error("parents don't match; expected "+parent+" found "+this.parent); + } + if ( i!=this.childIndex ) { + throw new Error("child indexes don't match; expected "+i+" found "+this.childIndex); + } + var n:int = this.childCount; + for (var c:int = 0; c < n; c++) { + var child:CommonTree = CommonTree(this.getChild(c)); + child.sanityCheckParentAndChildIndexesFrom(this, c); + } + } + + /** BaseTree doesn't track child indexes. */ + public function get childIndex():int { + return 0; + } + + public function set childIndex(index:int):void { + } + + /** BaseTree doesn't track parent pointers. */ + public function get parent():Tree { + return null; + } + public function set parent(t:Tree):void { + } + + /** Walk upwards looking for ancestor with this token type. */ + public function hasAncestor(ttype:int):Boolean { return getAncestor(ttype)!=null; } + + /** Walk upwards and get first ancestor with this token type. */ + public function getAncestor(ttype:int):Tree { + var t:Tree = this; + t = t.parent; + while ( t!=null ) { + if ( t.type==ttype ) return t; + t = t.parent; + } + return null; + } + + /** Return a list of all ancestors of this node. The first node of + * list is the root and the last is the parent of this node. + */ + public function get ancestors():Array { + if ( parent==null ) return null; + var ancestors:Array = new Array(); + var t:Tree = this; + t = t.parent; + while ( t!=null ) { + ancestors.unshift(t); // insert at start + t = t.parent; + } + return ancestors; + } + + /** Print out a whole tree not just a node */ + public function toStringTree():String { + if ( _children==null || _children.length==0 ) { + return String(this); + } + var buf:String = ""; + if ( !isNil ) { + buf += "("; + buf += String(this); + buf += ' '; + } + for (var i:int = 0; _children!=null && i < _children.length; i++) { + var t:BaseTree = BaseTree(_children[i]); + if ( i>0 ) { + buf += ' '; + } + buf += t.toStringTree(); + } + if ( !isNil ) { + buf += ")"; + } + return buf; + } + + public function get line():int { + return 0; + } + + public function get charPositionInLine():int { + return 0; + } + + // "Abstract" functions since there are no abstract classes in actionscript + + public function dupNode():Tree { + throw new Error("Not implemented"); + } + + public function get type():int { + throw new Error("Not implemented"); + } + + public function get text():String { + throw new Error("Not implemented"); + } + + public function get tokenStartIndex():int { + throw new Error("Not implemented"); + } + + public function set tokenStartIndex(index:int):void { + throw new Error("Not implemented"); + } + + public function get tokenStopIndex():int { + throw new Error("Not implemented"); + } + + public function set tokenStopIndex(index:int):void { + throw new Error("Not implemented"); + } + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/BaseTreeAdaptor.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/BaseTreeAdaptor.as new file mode 100644 index 0000000..c0b5c10 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/BaseTreeAdaptor.as @@ -0,0 +1,313 @@ +package org.antlr.runtime.tree { + + import flash.utils.Dictionary; + + import mx.utils.ObjectUtil; + + import org.antlr.runtime.*; + + /** A TreeAdaptor that works with any Tree implementation. */ + public class BaseTreeAdaptor implements TreeAdaptor { + /** System.identityHashCode() is not always unique; we have to + * track ourselves. That's ok, it's only for debugging, though it's + * expensive: we have to create a hashtable with all tree nodes in it. + */ + protected var treeToUniqueIDMap:Dictionary; + protected var uniqueNodeID:int = 1; + + public function nil():Object { + return createWithPayload(null); + } + + /** create tree node that holds the start and stop tokens associated + * with an error. + * + * If you specify your own kind of tree nodes, you will likely have to + * override this method. CommonTree returns Token.INVALID_TOKEN_TYPE + * if no token payload but you might have to set token type for diff + * node type. + * + * You don't have to subclass CommonErrorNode; you will likely need to + * subclass your own tree node class to avoid class cast exception. + */ + public function errorNode(input:TokenStream, start:Token, stop:Token, + e:RecognitionException):Object { + var t:CommonErrorNode = new CommonErrorNode(input, start, stop, e); + //System.out.println("returning error node '"+t+"' @index="+input.index()); + return t; + } + + public function isNil(tree:Object):Boolean { + return Tree(tree).isNil; + } + + public function dupTree(tree:Object):Object { + return dupTreeWithParent(tree, null); + } + + /** This is generic in the sense that it will work with any kind of + * tree (not just Tree interface). It invokes the adaptor routines + * not the tree node routines to do the construction. + */ + public function dupTreeWithParent(t:Object, parent:Object):Object { + if ( t==null ) { + return null; + } + var newTree:Object = dupNode(t); + // ensure new subtree root has parent/child index set + setChildIndex(newTree, getChildIndex(t)); // same index in new tree + setParent(newTree, parent); + var n:int = getChildCount(t); + for (var i:int = 0; i < n; i++) { + var child:Object = getChild(t, i); + var newSubTree:Object = dupTreeWithParent(child, t); + addChild(newTree, newSubTree); + } + return newTree; + } + + /** Add a child to the tree t. If child is a flat tree (a list), make all + * in list children of t. Warning: if t has no children, but child does + * and child isNil then you can decide it is ok to move children to t via + * t.children = child.children; i.e., without copying the array. Just + * make sure that this is consistent with have the user will build + * ASTs. + */ + public function addChild(t:Object, child:Object):void { + if ( t!=null && child!=null ) { + Tree(t).addChild(Tree(child)); + } + } + + /** If oldRoot is a nil root, just copy or move the children to newRoot. + * If not a nil root, make oldRoot a child of newRoot. + * + * old=^(nil a b c), new=r yields ^(r a b c) + * old=^(a b c), new=r yields ^(r ^(a b c)) + * + * If newRoot is a nil-rooted single child tree, use the single + * child as the new root node. + * + * old=^(nil a b c), new=^(nil r) yields ^(r a b c) + * old=^(a b c), new=^(nil r) yields ^(r ^(a b c)) + * + * If oldRoot was null, it's ok, just return newRoot (even if isNil). + * + * old=null, new=r yields r + * old=null, new=^(nil r) yields ^(nil r) + * + * Return newRoot. Throw an exception if newRoot is not a + * simple node or nil root with a single child node--it must be a root + * node. If newRoot is ^(nil x) return x as newRoot. + * + * Be advised that it's ok for newRoot to point at oldRoot's + * children; i.e., you don't have to copy the list. We are + * constructing these nodes so we should have this control for + * efficiency. + */ + public function becomeRoot(newRoot:Object, oldRoot:Object):Object { + // If new Root is token, then create a Tree. + if (newRoot is Token) { + newRoot = createWithPayload(Token(newRoot)); + } + + var newRootTree:Tree = Tree(newRoot); + var oldRootTree:Tree = Tree(oldRoot); + if ( oldRoot==null ) { + return newRoot; + } + // handle ^(nil real-node) + if ( newRootTree.isNil ) { + var nc:int = newRootTree.childCount; + if ( nc==1 ) newRootTree = Tree(newRootTree.getChild(0)); + else if ( nc >1 ) { + // TODO: make tree run time exceptions hierarchy + throw new Error("more than one node as root (TODO: make exception hierarchy)"); + } + } + // add oldRoot to newRoot; addChild takes care of case where oldRoot + // is a flat list (i.e., nil-rooted tree). All children of oldRoot + // are added to newRoot. + newRootTree.addChild(oldRootTree); + return newRootTree; + } + + /** Transform ^(nil x) to x and nil to null */ + public function rulePostProcessing(root:Object):Object { + var r:Tree = Tree(root); + if ( r!=null && r.isNil ) { + if ( r.childCount==0 ) { + r = null; + } + else if ( r.childCount==1 ) { + r = Tree(r.getChild(0)); + // whoever invokes rule will set parent and child index + r.parent = null; + r.childIndex = -1; + } + } + return r; + } + + public function createFromToken(tokenType:int, fromToken:Token, text:String = null):Object { + fromToken = createToken(fromToken); + fromToken.type = tokenType; + if (text != null) { + fromToken.text = text; + } + return createWithPayload(fromToken); + } + + public function createFromType(tokenType:int, text:String):Object { + var fromToken:Token = createTokenFromType(tokenType, text); + return createWithPayload(fromToken); + } + + public function getType(t:Object):int { + return Tree(t).type; + } + + public function setType(t:Object, type:int):void { + throw new Error("don't know enough about Tree node"); + } + + public function getText(t:Object):String { + return Tree(t).text; + } + + public function setText(t:Object, text:String):void { + throw new Error("don't know enough about Tree node"); + } + + public function getChild(t:Object, i:int):Object { + return Tree(t).getChild(i); + } + + public function setChild(t:Object, i:int, child:Object):void { + Tree(t).setChild(i, Tree(child)); + } + + public function deleteChild(t:Object, i:int):Object { + return Tree(t).deleteChild(i); + } + + public function getChildCount(t:Object):int { + return Tree(t).childCount; + } + + public function getUniqueID(node:Object):int { + if ( treeToUniqueIDMap==null ) { + treeToUniqueIDMap = new Dictionary(); + } + if (treeToUniqueIDMap.hasOwnProperty(node)) { + return treeToUniqueIDMap[node]; + } + + var ID:int = uniqueNodeID; + treeToUniqueIDMap[node] = ID; + uniqueNodeID++; + return ID; + + } + + /** Tell me how to create a token for use with imaginary token nodes. + * For example, there is probably no input symbol associated with imaginary + * token DECL, but you need to create it as a payload or whatever for + * the DECL node as in ^(DECL type ID). + * + * If you care what the token payload objects' type is, you should + * override this method and any other createToken variant. + */ + public function createTokenFromType(tokenType:int, text:String):Token { + throw new Error("Not implemented - abstract function"); + } + + /** Tell me how to create a token for use with imaginary token nodes. + * For example, there is probably no input symbol associated with imaginary + * token DECL, but you need to create it as a payload or whatever for + * the DECL node as in ^(DECL type ID). + * + * This is a variant of createToken where the new token is derived from + * an actual real input token. Typically this is for converting '{' + * tokens to BLOCK etc... You'll see + * + * r : lc='{' ID+ '}' -> ^(BLOCK[$lc] ID+) ; + * + * If you care what the token payload objects' type is, you should + * override this method and any other createToken variant. + * + */ + public function createToken(fromToken:Token):Token { + throw new Error("Not implemented - abstract function"); + } + + public function createWithPayload(payload:Token):Object { + throw new Error("Not implemented - abstract function"); + } + + public function dupNode(t:Object):Object { + throw new Error("Not implemented - abstract function"); + } + + public function getToken(t:Object):Token { + throw new Error("Not implemented - abstract function"); + } + + public function setTokenBoundaries(t:Object, startToken:Token, stopToken:Token):void { + throw new Error("Not implemented - abstract function"); + } + + public function getTokenStartIndex(t:Object):int { + throw new Error("Not implemented - abstract function"); + } + + public function getTokenStopIndex(t:Object):int { + throw new Error("Not implemented - abstract function"); + } + + public function getParent(t:Object):Object { + throw new Error("Not implemented - abstract function"); + } + + public function setParent(t:Object, parent:Object):void { + throw new Error("Not implemented - abstract function"); + } + + public function getChildIndex(t:Object):int { + throw new Error("Not implemented - abstract function"); + } + + public function setChildIndex(t:Object, index:int):void { + throw new Error("Not implemented - abstract function"); + } + + public function replaceChildren(parent:Object, startChildIndex:int, stopChildIndex:int, t:Object):void { + throw new Error("Not implemented - abstract function"); + } + + public function create(... args):Object { + if (args.length == 1 && args[0] is Token) { + return createWithPayload(args[0]); + } + else if (args.length == 2 && + args[0] is int && + args[1] is Token) { + return createFromToken(args[0], args[1]); + } + else if (args.length == 3 && + args[0] is int && + args[1] is Token && + args[2] is String) { + return createFromToken(args[0], args[1], args[2]); + } + else if (args.length == 2 && + args[0] is int && + args[1] is String) { + return createFromType(args[0], args[1]); + } + throw new Error("No methods signature for arguments : " + ObjectUtil.toString(args)); + } + } + + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/CommonErrorNode.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/CommonErrorNode.as new file mode 100644 index 0000000..d6eb8a7 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/CommonErrorNode.as @@ -0,0 +1,84 @@ +package org.antlr.runtime.tree +{ + + import org.antlr.runtime.*; + + public class CommonErrorNode extends CommonTree { + + public var input:IntStream; + public var start:Token; + public var stop:Token; + public var trappedException:RecognitionException; + + public function CommonErrorNode(input:TokenStream, start:Token, stop:Token, + e:RecognitionException) + { + //System.out.println("start: "+start+", stop: "+stop); + if ( stop==null || + (stop.tokenIndex < start.tokenIndex && + stop.type!=TokenConstants.EOF) ) + { + // sometimes resync does not consume a token (when LT(1) is + // in follow set. So, stop will be 1 to left to start. adjust. + // Also handle case where start is the first token and no token + // is consumed during recovery; LT(-1) will return null. + stop = start; + } + this.input = input; + this.start = start; + this.stop = stop; + this.trappedException = e; + } + + public override function get isNil():Boolean { + return false; + } + + public function getType():int { + return TokenConstants.INVALID_TOKEN_TYPE; + } + + public function getText():String { + var badText:String = null; + if ( start is Token ) { + var i:int = Token(start).tokenIndex; + var j:int = Token(stop).tokenIndex; + if ( Token(stop).type == TokenConstants.EOF ) { + j = TokenStream(input).size; + } + badText = TokenStream(input).toStringWithRange(i, j); + } + else if ( start is Tree ) { + badText = TreeNodeStream(input).toStringWithRange(start, stop); + } + else { + // people should subclass if they alter the tree type so this + // next one is for sure correct. + badText = "<unknown>"; + } + return badText; + } + + public override function toString():String { + if ( trappedException is MissingTokenException ) { + return "<missing type: "+ + MissingTokenException(trappedException).missingType+ + ">"; + } + else if ( trappedException is UnwantedTokenException ) { + return "<extraneous: "+ + UnwantedTokenException(trappedException).unexpectedToken+ + ", resync="+getText()+">"; + } + else if ( trappedException is MismatchedTokenException ) { + return "<mismatched token: "+trappedException.token+", resync="+getText()+">"; + } + else if ( trappedException is NoViableAltException ) { + return "<unexpected: "+trappedException.token+ + ", resync="+getText()+">"; + } + return "<error: "+getText()+">"; + } + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/CommonTree.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/CommonTree.as new file mode 100644 index 0000000..8714268 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/CommonTree.as @@ -0,0 +1,166 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree { + import org.antlr.runtime.Token; + import org.antlr.runtime.TokenConstants; + + /** A tree node that is wrapper for a Token object. After 3.0 release + * while building tree rewrite stuff, it became clear that computing + * parent and child index is very difficult and cumbersome. Better to + * spend the space in every tree node. If you don't want these extra + * fields, it's easy to cut them out in your own BaseTree subclass. + */ + public class CommonTree extends BaseTree { + /** A single token is the payload */ + protected var _token:Token; + + /** What token indexes bracket all tokens associated with this node + * and below? + */ + public var startIndex:int=-1, stopIndex:int=-1; + + /** Who is the parent node of this node; if null, implies node is root */ + protected var _parent:CommonTree; + + /** What index is this node in the child list? Range: 0..n-1 */ + protected var _childIndex:int = -1; + + public function CommonTree(node:CommonTree = null) { + if (node != null) { + super(node); + this._token = node._token; + this.startIndex = node.startIndex; + this.stopIndex = node.stopIndex; + } + } + + public static function createFromToken(t:Token):CommonTree { + var ct:CommonTree = new CommonTree(); + ct._token = t; + return ct; + } + + public function get token():Token { + return _token; + } + + public override function dupNode():Tree { + return new CommonTree(this); + } + + public override function get isNil():Boolean { + return _token==null; + } + + public override function get type():int { + if ( _token==null ) { + return TokenConstants.INVALID_TOKEN_TYPE; + } + return _token.type; + } + + public override function get text():String { + if ( _token==null ) { + return null; + } + return _token.text; + } + + public override function get line():int { + if ( _token==null || _token.line==0 ) { + if ( childCount >0 ) { + return getChild(0).line; + } + return 0; + } + return _token.line; + } + + public override function get charPositionInLine():int { + if ( _token==null || _token.charPositionInLine==-1 ) { + if ( childCount>0 ) { + return getChild(0).charPositionInLine; + } + return 0; + } + return _token.charPositionInLine; + } + + public override function get tokenStartIndex():int { + if ( startIndex==-1 && _token!=null ) { + return _token.tokenIndex; + } + return startIndex; + } + + public override function set tokenStartIndex(index:int):void { + startIndex = index; + } + + public override function get tokenStopIndex():int { + if ( stopIndex==-1 && _token!=null ) { + return _token.tokenIndex; + } + return stopIndex; + } + + public override function set tokenStopIndex(index:int):void { + stopIndex = index; + } + + public override function get childIndex():int { + return _childIndex; + } + + public override function get parent():Tree { + return _parent; + } + + public override function set parent(t:Tree):void { + this._parent = CommonTree(t); + } + + public override function set childIndex(index:int):void { + this._childIndex = index; + } + + public function toString():String { + if ( isNil ) { + return "nil"; + } + if ( type==TokenConstants.INVALID_TOKEN_TYPE ) { + return "<errornode>"; + } + if ( token==null ) { + return null; + } + return _token.text; + } + } + +} diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/CommonTreeAdaptor.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/CommonTreeAdaptor.as new file mode 100644 index 0000000..b89fc3b --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/CommonTreeAdaptor.as @@ -0,0 +1,172 @@ +package org.antlr.runtime.tree { + import org.antlr.runtime.CommonToken; + import org.antlr.runtime.Token; + import org.antlr.runtime.TokenConstants; + + /** A TreeAdaptor that works with any Tree implementation. It provides + * really just factory methods; all the work is done by BaseTreeAdaptor. + * If you would like to have different tokens created than ClassicToken + * objects, you need to override this and then set the parser tree adaptor to + * use your subclass. + * + * To get your parser to build nodes of a different type, override + * create(Token), errorNode(), and to be safe, YourTreeClass.dupNode(). + * dupNode is called to duplicate nodes during rewrite operations. + */ + public class CommonTreeAdaptor extends BaseTreeAdaptor { + /** Duplicate a node. This is part of the factory; + * override if you want another kind of node to be built. + * + * I could use reflection to prevent having to override this + * but reflection is slow. + */ + public override function dupNode(t:Object):Object { + if ( t==null ) { + return null; + } + return (Tree(t)).dupNode(); + } + + public override function createWithPayload(payload:Token):Object { + return CommonTree.createFromToken(payload); + } + + /** Tell me how to create a token for use with imaginary token nodes. + * For example, there is probably no input symbol associated with imaginary + * token DECL, but you need to create it as a payload or whatever for + * the DECL node as in ^(DECL type ID). + * + * If you care what the token payload objects' type is, you should + * override this method and any other createToken variant. + */ + public override function createTokenFromType(tokenType:int, text:String):Token { + return new CommonToken(tokenType, text); + } + + /** Tell me how to create a token for use with imaginary token nodes. + * For example, there is probably no input symbol associated with imaginary + * token DECL, but you need to create it as a payload or whatever for + * the DECL node as in ^(DECL type ID). + * + * This is a variant of createToken where the new token is derived from + * an actual real input token. Typically this is for converting '{' + * tokens to BLOCK etc... You'll see + * + * r : lc='{' ID+ '}' -> ^(BLOCK[$lc] ID+) ; + * + * If you care what the token payload objects' type is, you should + * override this method and any other createToken variant. + */ + public override function createToken(fromToken:Token):Token { + return CommonToken.cloneToken(fromToken); + } + + /** Track start/stop token for subtree root created for a rule. + * Only works with Tree nodes. For rules that match nothing, + * seems like this will yield start=i and stop=i-1 in a nil node. + * Might be useful info so I'll not force to be i..i. + */ + public override function setTokenBoundaries(t:Object, startToken:Token, stopToken:Token):void { + if ( t==null ) { + return; + } + var start:int = 0; + var stop:int = 0; + if ( startToken!=null ) { + start = startToken.tokenIndex; + } + if ( stopToken!=null ) { + stop = stopToken.tokenIndex; + } + Tree(t).tokenStartIndex = start; + Tree(t).tokenStopIndex = stop; + } + + public override function getTokenStartIndex(t:Object):int { + if ( t==null ) { + return -1; + } + return Tree(t).tokenStartIndex; + } + + public override function getTokenStopIndex(t:Object):int { + if ( t==null ) { + return -1; + } + return Tree(t).tokenStopIndex; + } + + public override function getText(t:Object):String { + if ( t==null ) { + return null; + } + return Tree(t).text; + } + + public override function getType(t:Object):int { + if ( t==null ) { + return TokenConstants.INVALID_TOKEN_TYPE; + } + return Tree(t).type;; + } + + /** What is the Token associated with this node? If + * you are not using CommonTree, then you must + * override this in your own adaptor. + */ + public override function getToken(t:Object):Token { + if ( t is CommonTree ) { + return CommonTree(t).token; + } + return null; // no idea what to do + } + + public override function getChild(t:Object, i:int):Object { + if ( t==null ) { + return null; + } + return Tree(t).getChild(i); + } + + public override function getChildCount(t:Object):int { + if ( t==null ) { + return 0; + } + return Tree(t).childCount; + } + + public override function getParent(t:Object):Object { + if (t == null) { + return null; + } + return Tree(t).parent; + } + + public override function setParent(t:Object, parent:Object):void { + if (t != null) { + Tree(t).parent = Tree(parent); + } + } + + public override function getChildIndex(t:Object):int { + if (t == null) { + return 0; + } + return Tree(t).childIndex; + } + + public override function setChildIndex(t:Object, index:int):void { + if (t != null) { + Tree(t).childIndex = index; + } + } + + public override function replaceChildren(parent:Object, startChildIndex:int, stopChildIndex:int, t:Object):void { + if ( parent!=null ) { + Tree(parent).replaceChildren(startChildIndex, stopChildIndex, t); + } + } + + } + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/CommonTreeNodeStream.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/CommonTreeNodeStream.as new file mode 100644 index 0000000..c79aa08 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/CommonTreeNodeStream.as @@ -0,0 +1,438 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2006 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree { + + import org.antlr.runtime.TokenConstants; + import org.antlr.runtime.TokenStream; + + + /** A buffered stream of tree nodes. Nodes can be from a tree of ANY kind. + * + * This node stream sucks all nodes out of the tree specified in + * the constructor during construction and makes pointers into + * the tree using an array of Object pointers. The stream necessarily + * includes pointers to DOWN and UP and EOF nodes. + * + * This stream knows how to mark/release for backtracking. + * + * This stream is most suitable for tree interpreters that need to + * jump around a lot or for tree parsers requiring speed (at cost of memory). + * There is some duplicated functionality here with UnBufferedTreeNodeStream + * but just in bookkeeping, not tree walking etc... + * + * @see UnBufferedTreeNodeStream + */ + public class CommonTreeNodeStream implements TreeNodeStream { + public static const DEFAULT_INITIAL_BUFFER_SIZE:int = 100; + public static const INITIAL_CALL_STACK_SIZE:int = 10; + + // all these navigation nodes are shared and hence they + // cannot contain any line/column info + + protected var down:Object; + protected var up:Object; + protected var eof:Object; + + /** The complete mapping from stream index to tree node. + * This buffer includes pointers to DOWN, UP, and EOF nodes. + * It is built upon ctor invocation. The elements are type + * Object as we don't what the trees look like. + * + * Load upon first need of the buffer so we can set token types + * of interest for reverseIndexing. Slows us down a wee bit to + * do all of the if p==-1 testing everywhere though. + */ + protected var nodes:Array; + + /** Pull nodes from which tree? */ + protected var root:Object; + + /** IF this tree (root) was created from a token stream, track it. */ + protected var tokens:TokenStream; + + /** What tree adaptor was used to build these trees */ + internal var adaptor:TreeAdaptor; + + /** Reuse same DOWN, UP navigation nodes unless this is true */ + protected var uniqueNavigationNodes:Boolean = false; + + /** The index into the nodes list of the current node (next node + * to consume). If -1, nodes array not filled yet. + */ + protected var p:int = -1; + + /** Track the last mark() call result value for use in rewind(). */ + protected var lastMarker:int; + + /** Stack of indexes used for push/pop calls */ + protected var calls:Array; + + public function CommonTreeNodeStream(tree:Object, adaptor:TreeAdaptor = null, initialBufferSize:int = DEFAULT_INITIAL_BUFFER_SIZE) { + if (tree == null) { + // return uninitalized for static resuse function + return; + } + this.root = tree; + this.adaptor = adaptor == null ? new CommonTreeAdaptor() : adaptor; + + nodes = new Array(); + down = this.adaptor.createFromType(TokenConstants.DOWN, "DOWN"); + up = this.adaptor.createFromType(TokenConstants.UP, "UP"); + eof = this.adaptor.createFromType(TokenConstants.EOF, "EOF"); + } + + /** Reuse an existing node stream's buffer of nodes. Do not point at a + * node stream that can change. Must have static node list. start/stop + * are indexes into the parent.nodes stream. We avoid making a new + * list of nodes like this. + */ + public static function reuse(parent:CommonTreeNodeStream, start:int, stop:int):CommonTreeNodeStream { + var stream:CommonTreeNodeStream = new CommonTreeNodeStream(null); + stream.root = parent.root; + stream.adaptor = parent.adaptor; + stream.nodes = parent.nodes.slice(start, stop); + stream.down = parent.down; + stream.up = parent.up; + stream.eof = parent.eof; + return stream; + } + + /** Walk tree with depth-first-search and fill nodes buffer. + * Don't do DOWN, UP nodes if its a list (t is isNil). + */ + protected function fillBuffer():void { + fillBufferTo(root); + //System.out.println("revIndex="+tokenTypeToStreamIndexesMap); + p = 0; // buffer of nodes intialized now + } + + public function fillBufferTo(t:Object):void { + var nil:Boolean = adaptor.isNil(t); + if ( !nil ) { + nodes.push(t); // add this node + } + // add DOWN node if t has children + var n:int = adaptor.getChildCount(t); + if ( !nil && n>0 ) { + addNavigationNode(TokenConstants.DOWN); + } + // and now add all its children + for (var c:int=0; c<n; c++) { + var child:Object = adaptor.getChild(t,c); + fillBufferTo(child); + } + // add UP node if t has children + if ( !nil && n>0 ) { + addNavigationNode(TokenConstants.UP); + } + } + + /** What is the stream index for node? 0..n-1 + * Return -1 if node not found. + */ + protected function getNodeIndex(node:Object):int { + if ( p==-1 ) { + fillBuffer(); + } + for (var i:int = 0; i < nodes.length; i++) { + var t:Object = nodes[i]; + if ( t===node ) { + return i; + } + } + return -1; + } + + /** As we flatten the tree, we use UP, DOWN nodes to represent + * the tree structure. When debugging we need unique nodes + * so instantiate new ones when uniqueNavigationNodes is true. + */ + protected function addNavigationNode(ttype:int):void { + var navNode:Object = null; + if ( ttype==TokenConstants.DOWN ) { + if ( hasUniqueNavigationNodes) { + navNode = adaptor.createFromType(TokenConstants.DOWN, "DOWN"); + } + else { + navNode = down; + } + } + else { + if ( hasUniqueNavigationNodes ) { + navNode = adaptor.createFromType(TokenConstants.UP, "UP"); + } + else { + navNode = up; + } + } + nodes.push(navNode); + } + + public function getNode(i:int):Object { + if ( p==-1 ) { + fillBuffer(); + } + return nodes[i]; + } + + public function LT(k:int):Object { + if ( p==-1 ) { + fillBuffer(); + } + if ( k==0 ) { + return null; + } + if ( k<0 ) { + return LB(-k); + } + //System.out.print("LT(p="+p+","+k+")="); + if ( (p+k-1) >= nodes.length ) { + return eof; + } + return nodes[p+k-1]; + } + + public function get currentSymbol():Object { return LT(1); } + + /** Look backwards k nodes */ + protected function LB(k:int):Object { + if ( k==0 ) { + return null; + } + if ( (p-k)<0 ) { + return null; + } + return nodes[p-k]; + } + + public function get treeSource():Object { + return root; + } + + public function get sourceName():String { + return tokenStream.sourceName; + } + + public function get tokenStream():TokenStream { + return tokens; + } + + public function set tokenStream(tokens:TokenStream):void { + this.tokens = tokens; + } + + public function get treeAdaptor():TreeAdaptor { + return adaptor; + } + + public function set treeAdaptor(adaptor:TreeAdaptor):void { + this.adaptor = adaptor; + } + + public function get hasUniqueNavigationNodes():Boolean { + return uniqueNavigationNodes; + } + + public function set hasUniqueNavigationNodes(uniqueNavigationNodes:Boolean):void { + this.uniqueNavigationNodes = uniqueNavigationNodes; + } + + public function consume():void { + if ( p==-1 ) { + fillBuffer(); + } + p++; + } + + public function LA(i:int):int { + return adaptor.getType(LT(i)); + } + + public function mark():int { + if ( p==-1 ) { + fillBuffer(); + } + lastMarker = index; + return lastMarker; + } + + public function release(marker:int):void { + // no resources to release + } + + public function get index():int { + return p; + } + + public function rewindTo(marker:int):void { + seek(marker); + } + + public function rewind():void { + seek(lastMarker); + } + + public function seek(index:int):void { + if ( p==-1 ) { + fillBuffer(); + } + p = index; + } + + /** Make stream jump to a new location, saving old location. + * Switch back with pop(). + */ + public function push(index:int):void { + if ( calls==null ) { + calls = new Array(); + } + calls.push(p); // save current index + seek(index); + } + + /** Seek back to previous index saved during last push() call. + * Return top of stack (return index). + */ + public function pop():int { + var ret:int = calls.pop(); + seek(ret); + return ret; + } + + public function reset():void { + p = 0; + lastMarker = 0; + if (calls != null) { + calls = new Array(); + } + } + + public function get size():int { + if ( p==-1 ) { + fillBuffer(); + } + return nodes.length; + } + + // TREE REWRITE INTERFACE + public function replaceChildren(parent:Object, startChildIndex:int, stopChildIndex:int, t:Object):void { + if ( parent!=null ) { + adaptor.replaceChildren(parent, startChildIndex, stopChildIndex, t); + } + } + + /** Used for testing, just return the token type stream */ + public function toString():String { + if ( p==-1 ) { + fillBuffer(); + } + var buf:String = ""; + for (var i:int = 0; i < nodes.length; i++) { + var t:Object = nodes[i]; + buf += " "; + buf += (adaptor.getType(t)); + } + return buf.toString(); + } + + /** Debugging */ + public function toTokenString(start:int, stop:int):String { + if ( p==-1 ) { + fillBuffer(); + } + var buf:String = ""; + for (var i:int = start; i < nodes.size() && i <= stop; i++) { + var t:Object = nodes[i]; + buf += " "; + buf += adaptor.getToken(t); + } + return buf; + } + + public function toStringWithRange(start:Object, stop:Object):String { + if ( start==null || stop==null ) { + return null; + } + if ( p==-1 ) { + fillBuffer(); + } + trace("stop: "+stop); + if ( start is CommonTree ) + trace("toString: "+CommonTree(start).token+", "); + else + trace(start); + if ( stop is CommonTree ) + trace(CommonTree(stop).token); + else + trace(stop); + // if we have the token stream, use that to dump text in order + if ( tokens!=null ) { + var beginTokenIndex:int = adaptor.getTokenStartIndex(start); + var endTokenIndex:int = adaptor.getTokenStopIndex(stop); + // if it's a tree, use start/stop index from start node + // else use token range from start/stop nodes + if ( adaptor.getType(stop)==TokenConstants.UP ) { + endTokenIndex = adaptor.getTokenStopIndex(start); + } + else if ( adaptor.getType(stop)==TokenConstants.EOF ) { + endTokenIndex = size-2; // don't use EOF + } + return tokens.toStringWithRange(beginTokenIndex, endTokenIndex); + } + // walk nodes looking for start + var t:Object = null; + var i:int = 0; + for (; i < nodes.length; i++) { + t = nodes[i]; + if ( t==start ) { + break; + } + } + // now walk until we see stop, filling string buffer with text + var buf:String = ""; + t = nodes[i]; + while ( t!=stop ) { + var text:String = adaptor.getText(t); + if ( text==null ) { + text = " "+ adaptor.getType(t); + } + buf += text; + i++; + t = nodes[i]; + } + // include stop node too + text = adaptor.getText(stop); + if ( text==null ) { + text = " " + adaptor.getType(stop); + } + buf += text; + return buf.toString(); + } + } + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteCardinalityException.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteCardinalityException.as new file mode 100644 index 0000000..ff92744 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteCardinalityException.as @@ -0,0 +1,49 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree { + /** Base class for all exceptions thrown during AST rewrite construction. + * This signifies a case where the cardinality of two or more elements + * in a subrule are different: (ID INT)+ where |ID|!=|INT| + */ + public class RewriteCardinalityException extends Error { + + public var elementDescription:String; + + public function RewriteCardinalityException(elementDescription:String) { + super(elementDescription); + this.elementDescription = elementDescription; + } + + public function getMessage():String { + if ( elementDescription!=null ) { + return elementDescription; + } + return null; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteEarlyExitException.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteEarlyExitException.as new file mode 100644 index 0000000..a8a9359 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteEarlyExitException.as @@ -0,0 +1,38 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree { + + /** No elements within a (...)+ in a rewrite rule */ + public class RewriteEarlyExitException extends RewriteCardinalityException { + + public function RewriteEarlyExitException(elementDescription:String = null) { + super(elementDescription); + } + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteEmptyStreamException.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteEmptyStreamException.as new file mode 100644 index 0000000..5fe9901 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteEmptyStreamException.as @@ -0,0 +1,37 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree +{ + /** Ref to ID or expr but no tokens in ID stream or subtrees in expr stream */ + public class RewriteEmptyStreamException extends RewriteCardinalityException { + public function RewriteEmptyStreamException(elementDescription:String) { + super(elementDescription); + } + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteRuleElementStream.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteRuleElementStream.as new file mode 100644 index 0000000..b667683 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteRuleElementStream.as @@ -0,0 +1,200 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree { + + /** A generic list of elements tracked in an alternative to be used in + * a -> rewrite rule. We need to subclass to fill in the next() method, + * which returns either an AST node wrapped around a token payload or + * an existing subtree. + * + * Once you start next()ing, do not try to add more elements. It will + * break the cursor tracking I believe. + * + * @see org.antlr.runtime.tree.RewriteRuleSubtreeStream + * @see org.antlr.runtime.tree.RewriteRuleTokenStream + * + * TODO: add mechanism to detect/puke on modification after reading from stream + */ + public class RewriteRuleElementStream { + /** Cursor 0..n-1. If singleElement!=null, cursor is 0 until you next(), + * which bumps it to 1 meaning no more elements. + */ + protected var cursor:int = 0; + + /** Track single elements w/o creating a list. Upon 2nd add, alloc list */ + protected var singleElement:Object; + + /** The list of tokens or subtrees we are tracking */ + protected var elements:Array; + + /** Once a node / subtree has been used in a stream, it must be dup'd + * from then on. Streams are reset after subrules so that the streams + * can be reused in future subrules. So, reset must set a dirty bit. + * If dirty, then next() always returns a dup. + * + * I wanted to use "naughty bit" here, but couldn't think of a way + * to use "naughty". + */ + protected var dirty:Boolean = false; + + /** The element or stream description; usually has name of the token or + * rule reference that this list tracks. Can include rulename too, but + * the exception would track that info. + */ + protected var elementDescription:String; + protected var adaptor:TreeAdaptor; + + public function RewriteRuleElementStream(adaptor:TreeAdaptor, elementDescription:String, element:Object = null) { + this.elementDescription = elementDescription; + this.adaptor = adaptor; + if (element != null) { + if (element is Array) { + /** Create a stream, but feed off an existing list */ + this.elements = element as Array; + } + else { + /** Create a stream with one element */ + add(element); + } + } + } + + /** Reset the condition of this stream so that it appears we have + * not consumed any of its elements. Elements themselves are untouched. + * Once we reset the stream, any future use will need duplicates. Set + * the dirty bit. + */ + public function reset():void { + cursor = 0; + dirty = true; + } + + public function add(el:Object):void { + //System.out.println("add '"+elementDescription+"' is "+el); + if ( el==null ) { + return; + } + if ( elements!=null ) { // if in list, just add + elements.push(el); + return; + } + if ( singleElement == null ) { // no elements yet, track w/o list + singleElement = el; + return; + } + // adding 2nd element, move to list + elements = new Array(5); + elements.push(singleElement); + singleElement = null; + elements.push(el); + } + + /** Return the next element in the stream. If out of elements, throw + * an exception unless size()==1. If size is 1, then return elements[0]. + * Return a duplicate node/subtree if stream is out of elements and + * size==1. If we've already used the element, dup (dirty bit set). + */ + public function nextTree():Object { + var n:int = size; + var el:Object; + if ( dirty || (cursor>=n && n==1) ) { + // if out of elements and size is 1, dup + el = _next(); + return dup(el); + } + // test size above then fetch + el = _next(); + return el; + } + + /** do the work of getting the next element, making sure that it's + * a tree node or subtree. Deal with the optimization of single- + * element list versus list of size > 1. Throw an exception + * if the stream is empty or we're out of elements and size>1. + * protected so you can override in a subclass if necessary. + */ + protected function _next():Object { + var n:int = size; + if ( n ==0 ) { + throw new RewriteEmptyStreamException(elementDescription); + } + if ( cursor>= n) { // out of elements? + if ( n ==1 ) { // if size is 1, it's ok; return and we'll dup + return toTree(singleElement); + } + // out of elements and size was not 1, so we can't dup + throw new RewriteCardinalityException(elementDescription); + } + // we have elements + if ( singleElement!=null ) { + cursor++; // move cursor even for single element list + return toTree(singleElement); + } + // must have more than one in list, pull from elements + var o:Object = toTree(elements[cursor]); + cursor++; + return o; + } + + /** When constructing trees, sometimes we need to dup a token or AST + * subtree. Dup'ing a token means just creating another AST node + * around it. For trees, you must call the adaptor.dupTree() unless + * the element is for a tree root; then it must be a node dup. + */ + protected function dup(el:Object):Object { + throw new Error("Not implemented"); // should be abstract + } + + /** Ensure stream emits trees; tokens must be converted to AST nodes. + * AST nodes can be passed through unmolested. + */ + protected function toTree(el:Object):Object { + return el; + } + + public function get hasNext():Boolean { + return (singleElement != null && cursor < 1) || + (elements!=null && cursor < elements.length); + } + + public function get size():int { + var n:int = 0; + if ( singleElement != null ) { + n = 1; + } + if ( elements!=null ) { + return elements.length; + } + return n; + } + + public function get description():String { + return elementDescription; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteRuleNodeStream.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteRuleNodeStream.as new file mode 100644 index 0000000..a7ab2e8 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteRuleNodeStream.as @@ -0,0 +1,27 @@ + +package org.antlr.runtime.tree { + + /** Queues up nodes matched on left side of -> in a tree parser. This is + * the analog of RewriteRuleTokenStream for normal parsers. + */ + public class RewriteRuleNodeStream extends RewriteRuleElementStream { + + public function RewriteRuleNodeStream(adaptor:TreeAdaptor, elementDescription:String, element:Object = null) { + super(adaptor, elementDescription, element); + } + + public function nextNode():Object { + return _next(); + } + + protected override function toTree(el:Object):Object { + return adaptor.dupNode(el); + } + + protected override function dup(el:Object):Object { + // we dup every node, so don't have to worry about calling dup; short- + // circuited next() so it doesn't call. + throw new Error("dup can't be called for a node stream."); + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteRuleSubtreeStream.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteRuleSubtreeStream.as new file mode 100644 index 0000000..d499fef --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteRuleSubtreeStream.as @@ -0,0 +1,67 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree { + + public class RewriteRuleSubtreeStream extends RewriteRuleElementStream { + + public function RewriteRuleSubtreeStream(adaptor:TreeAdaptor, elementDescription:String, element:Object=null) { + super(adaptor, elementDescription, element); + } + + /** Treat next element as a single node even if it's a subtree. + * This is used instead of next() when the result has to be a + * tree root node. Also prevents us from duplicating recently-added + * children; e.g., ^(type ID)+ adds ID to type and then 2nd iteration + * must dup the type node, but ID has been added. + * + * Referencing a rule result twice is ok; dup entire tree as + * we can't be adding trees as root; e.g., expr expr. + * + * Hideous code duplication here with super.next(). Can't think of + * a proper way to refactor. This needs to always call dup node + * and super.next() doesn't know which to call: dup node or dup tree. + */ + public function nextNode():Object { + var n:int = size; + var el:Object; + if ( dirty || (cursor>=n && n==1) ) { + // if out of elements and size is 1, dup (at most a single node + // since this is for making root nodes). + el = _next(); + return adaptor.dupNode(el); + } + // test size above then fetch + el = _next(); + return el; + } + + protected override function dup(el:Object):Object { + return adaptor.dupTree(el); + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteRuleTokenStream.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteRuleTokenStream.as new file mode 100644 index 0000000..beac244 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/RewriteRuleTokenStream.as @@ -0,0 +1,60 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree { + import org.antlr.runtime.Token; + + + public class RewriteRuleTokenStream extends RewriteRuleElementStream { + + public function RewriteRuleTokenStream(adaptor:TreeAdaptor, elementDescription:String, element:Object=null) { + super(adaptor, elementDescription, element); + } + + /** Get next token from stream and make a node for it */ + public function nextNode():Object { + var t:Token = Token(_next()); + return adaptor.createWithPayload(t); + } + + public function nextToken():Token { + return Token(_next()); + } + + /** Don't convert to a tree unless they explicitly call nextTree. + * This way we can do hetero tree nodes in rewrite. + */ + protected override function toTree(el:Object):Object { + return el; + } + + protected override function dup(el:Object):Object { + throw new Error("dup can't be called for a token stream."); + } + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/Tree.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/Tree.as new file mode 100644 index 0000000..7a402d5 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/Tree.as @@ -0,0 +1,96 @@ +package org.antlr.runtime.tree { + /** What does a tree look like? ANTLR has a number of support classes + * such as CommonTreeNodeStream that work on these kinds of trees. You + * don't have to make your trees implement this interface, but if you do, + * you'll be able to use more support code. + * + * NOTE: When constructing trees, ANTLR can build any kind of tree; it can + * even use Token objects as trees if you add a child list to your tokens. + * + * This is a tree node without any payload; just navigation and factory stuff. + */ + public interface Tree { + + function getChild(i:int):Tree; + + function get childCount():int; + + // Tree tracks parent and child index now > 3.0 + + function get parent():Tree; + + function set parent(t:Tree):void; + + /** Is there is a node above with token type ttype? */ + function hasAncestor(ttype:int):Boolean; + + /** Walk upwards and get first ancestor with this token type. */ + function getAncestor(ttype:int):Tree; + + /** Return a list of all ancestors of this node. The first node of + * list is the root and the last is the parent of this node. + */ + function get ancestors():Array; + + + /** This node is what child index? 0..n-1 */ + function get childIndex():int; + + function set childIndex(index:int):void; + + /** Set the parent and child index values for all children */ + function freshenParentAndChildIndexes():void; + + /** Add t as a child to this node. If t is null, do nothing. If t + * is nil, add all children of t to this' children. + */ + function addChild(t:Tree):void; + + /** Set ith child (0..n-1) to t; t must be non-null and non-nil node */ + function setChild(i:int, t:Tree):void; + + function deleteChild(i:int):Object; + + /** Delete children from start to stop and replace with t even if t is + * a list (nil-root tree). num of children can increase or decrease. + * For huge child lists, inserting children can force walking rest of + * children to set their childindex; could be slow. + */ + function replaceChildren(startChildIndex:int, stopChildIndex:int, t:Object):void; + + /** Indicates the node is a nil node but may still have children, meaning + * the tree is a flat list. + */ + function get isNil():Boolean; + + /** What is the smallest token index (indexing from 0) for this node + * and its children? + */ + function get tokenStartIndex():int; + + function set tokenStartIndex(index:int):void; + + /** What is the largest token index (indexing from 0) for this node + * and its children? + */ + function get tokenStopIndex():int; + + function set tokenStopIndex(index:int):void; + + function dupNode():Tree; + + /** Return a token type; needed for tree parsing */ + function get type():int; + + function get text():String; + + /** In case we don't have a token payload, what is the line for errors? */ + function get line():int; + + function get charPositionInLine():int; + + function toStringTree():String; + + } + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeAdaptor.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeAdaptor.as new file mode 100644 index 0000000..a8d5d61 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeAdaptor.as @@ -0,0 +1,253 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2007 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree { + + import org.antlr.runtime.*; + + /** How to create and navigate trees. Rather than have a separate factory + * and adaptor, I've merged them. Makes sense to encapsulate. + * + * This takes the place of the tree construction code generated in the + * generated code in 2.x and the ASTFactory. + * + * I do not need to know the type of a tree at all so they are all + * generic Objects. This may increase the amount of typecasting needed. :( + */ + public interface TreeAdaptor { + // C o n s t r u c t i o n + + /** Create a tree node from Token object; for CommonTree type trees, + * then the token just becomes the payload. This is the most + * common create call. + * + * Override if you want another kind of node to be built. + */ + function createWithPayload(payload:Token):Object; + + /** Duplicate a single tree node. + * Override if you want another kind of node to be built. + */ + function dupNode(treeNode:Object):Object; + + /** Duplicate tree recursively, using dupNode() for each node */ + function dupTree(tree:Object):Object; + + /** Return a nil node (an empty but non-null node) that can hold + * a list of element as the children. If you want a flat tree (a list) + * use "t=adaptor.nil(); t.addChild(x); t.addChild(y);" + */ + function nil():Object; + + /** Return a tree node representing an error. This node records the + * tokens consumed during error recovery. The start token indicates the + * input symbol at which the error was detected. The stop token indicates + * the last symbol consumed during recovery. + * + * You must specify the input stream so that the erroneous text can + * be packaged up in the error node. The exception could be useful + * to some applications; default implementation stores ptr to it in + * the CommonErrorNode. + * + * This only makes sense during token parsing, not tree parsing. + * Tree parsing should happen only when parsing and tree construction + * succeed. + */ + function errorNode(input:TokenStream, start:Token, stop:Token, e:RecognitionException):Object; + + /** Is tree considered a nil node used to make lists of child nodes? */ + function isNil(tree:Object):Boolean; + + /** Add a child to the tree t. If child is a flat tree (a list), make all + * in list children of t. Warning: if t has no children, but child does + * and child isNil then you can decide it is ok to move children to t via + * t.children = child.children; i.e., without copying the array. Just + * make sure that this is consistent with have the user will build + * ASTs. Do nothing if t or child is null. + */ + function addChild(t:Object, child:Object):void; + + /** If oldRoot is a nil root, just copy or move the children to newRoot. + * If not a nil root, make oldRoot a child of newRoot. + * + * old=^(nil a b c), new=r yields ^(r a b c) + * old=^(a b c), new=r yields ^(r ^(a b c)) + * + * If newRoot is a nil-rooted single child tree, use the single + * child as the new root node. + * + * old=^(nil a b c), new=^(nil r) yields ^(r a b c) + * old=^(a b c), new=^(nil r) yields ^(r ^(a b c)) + * + * If oldRoot was null, it's ok, just return newRoot (even if isNil). + * + * old=null, new=r yields r + * old=null, new=^(nil r) yields ^(nil r) + * + * Return newRoot. Throw an exception if newRoot is not a + * simple node or nil root with a single child node--it must be a root + * node. If newRoot is ^(nil x) return x as newRoot. + * + * Be advised that it's ok for newRoot to point at oldRoot's + * children; i.e., you don't have to copy the list. We are + * constructing these nodes so we should have this control for + * efficiency. + */ + function becomeRoot(newRoot:Object, oldRoot:Object):Object; + + /** Given the root of the subtree created for this rule, post process + * it to do any simplifications or whatever you want. A required + * behavior is to convert ^(nil singleSubtree) to singleSubtree + * as the setting of start/stop indexes relies on a single non-nil root + * for non-flat trees. + * + * Flat trees such as for lists like "idlist : ID+ ;" are left alone + * unless there is only one ID. For a list, the start/stop indexes + * are set in the nil node. + * + * This method is executed after all rule tree construction and right + * before setTokenBoundaries(). + */ + function rulePostProcessing(root:Object):Object; + + /** For identifying trees. + * + * How to identify nodes so we can say "add node to a prior node"? + * Even becomeRoot is an issue. Use System.identityHashCode(node) + * usually. + */ + function getUniqueID(node:Object):int; + + + // R e w r i t e R u l e s + + /** Create a new node derived from a token, with a new token type. + * This is invoked from an imaginary node ref on right side of a + * rewrite rule as IMAG[$tokenLabel] or IMAG[$tokenLabel, "IMAG"]. + * + * This should invoke createToken(Token). + */ + function createFromToken(tokenType:int, fromToken:Token, text:String = null):Object; + + /** Create a new node derived from a token, with a new token type. + * This is invoked from an imaginary node ref on right side of a + * rewrite rule as IMAG["IMAG"]. + * + * This should invoke createToken(int,String). + */ + function createFromType(tokenType:int, text:String):Object; + + + // C o n t e n t + + /** For tree parsing, I need to know the token type of a node */ + function getType(t:Object):int; + + /** Node constructors can set the type of a node */ + function setType(t:Object, type:int):void; + + function getText(t:Object):String; + + /** Node constructors can set the text of a node */ + function setText(t:Object, text:String):void; + + /** Return the token object from which this node was created. + * Currently used only for printing an error message. + * The error display routine in BaseRecognizer needs to + * display where the input the error occurred. If your + * tree of limitation does not store information that can + * lead you to the token, you can create a token filled with + * the appropriate information and pass that back. See + * BaseRecognizer.getErrorMessage(). + */ + function getToken(t:Object):Token; + + /** Where are the bounds in the input token stream for this node and + * all children? Each rule that creates AST nodes will call this + * method right before returning. Flat trees (i.e., lists) will + * still usually have a nil root node just to hold the children list. + * That node would contain the start/stop indexes then. + */ + function setTokenBoundaries(t:Object, startToken:Token, stopToken:Token):void; + + /** Get the token start index for this subtree; return -1 if no such index */ + function getTokenStartIndex(t:Object):int; + + /** Get the token stop index for this subtree; return -1 if no such index */ + function getTokenStopIndex(t:Object):int; + + + // N a v i g a t i o n / T r e e P a r s i n g + + /** Get a child 0..n-1 node */ + function getChild(t:Object, i:int):Object; + + /** Set ith child (0..n-1) to t; t must be non-null and non-nil node */ + function setChild(t:Object, i:int, child:Object):void; + + /** Remove ith child and shift children down from right. */ + function deleteChild(t:Object, i:int):Object; + + /** How many children? If 0, then this is a leaf node */ + function getChildCount(t:Object):int; + + /** Who is the parent node of this node; if null, implies node is root. + * If your node type doesn't handle this, it's ok but the tree rewrites + * in tree parsers need this functionality. + */ + function getParent(t:Object):Object; + function setParent(t:Object, parent:Object):void; + + /** What index is this node in the child list? Range: 0..n-1 + * If your node type doesn't handle this, it's ok but the tree rewrites + * in tree parsers need this functionality. + */ + function getChildIndex(t:Object):int; + function setChildIndex(t:Object, index:int):void; + + /** Replace from start to stop child index of parent with t, which might + * be a list. Number of children may be different + * after this call. + * + * If parent is null, don't do anything; must be at root of overall tree. + * Can't replace whatever points to the parent externally. Do nothing. + */ + function replaceChildren(parent:Object, startChildIndex:int, stopChildIndex:int, t:Object):void; + + + // Code - generator support - TODO place in separate namespace + + /** + * Private method used by generated code. Based on type and number of arguments will call one of: + * + * * createWithPayload + * * createFromToken + * * createFromType + */ + function create(... args):Object; + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeConstants.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeConstants.as new file mode 100644 index 0000000..d9fad84 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeConstants.as @@ -0,0 +1,8 @@ +package org.antlr.runtime.tree +{ + import org.antlr.runtime.TokenConstants; + + public class TreeConstants { + public static const INVALID_NODE:CommonTree = CommonTree.createFromToken(TokenConstants.INVALID_TOKEN); + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeNodeStream.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeNodeStream.as new file mode 100644 index 0000000..bd13cc8 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeNodeStream.as @@ -0,0 +1,102 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2006 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree { + import org.antlr.runtime.IntStream; + import org.antlr.runtime.TokenStream; + + /** A stream of tree nodes, accessing nodes from a tree of some kind */ + public interface TreeNodeStream extends IntStream { + /** Get a tree node at an absolute index i; 0..n-1. + * If you don't want to buffer up nodes, then this method makes no + * sense for you. + */ + function getNode(i:int):Object; + + /** Get tree node at current input pointer + i ahead where i=1 is next node. + * i<0 indicates nodes in the past. So LT(-1) is previous node, but + * implementations are not required to provide results for k < -1. + * LT(0) is undefined. For i>=n, return null. + * Return null for LT(0) and any index that results in an absolute address + * that is negative. + * + * This is analogus to the LT() method of the TokenStream, but this + * returns a tree node instead of a token. Makes code gen identical + * for both parser and tree grammars. :) + */ + function LT(k:int):Object; + + /** Where is this stream pulling nodes from? This is not the name, but + * the object that provides node objects. + */ + function get treeSource():Object; + + /** If the tree associated with this stream was created from a TokenStream, + * you can specify it here. Used to do rule $text attribute in tree + * parser. Optional unless you use tree parser rule text attribute + * or output=template and rewrite=true options. + */ + function get tokenStream():TokenStream; + + /** What adaptor can tell me how to interpret/navigate nodes and + * trees. E.g., get text of a node. + */ + function get treeAdaptor():TreeAdaptor; + + /** As we flatten the tree, we use UP, DOWN nodes to represent + * the tree structure. When debugging we need unique nodes + * so we have to instantiate new ones. When doing normal tree + * parsing, it's slow and a waste of memory to create unique + * navigation nodes. Default should be false; + */ + function set hasUniqueNavigationNodes(uniqueNavigationNodes:Boolean):void; + + /** Return the text of all nodes from start to stop, inclusive. + * If the stream does not buffer all the nodes then it can still + * walk recursively from start until stop. You can always return + * null or "" too, but users should not access $ruleLabel.text in + * an action of course in that case. + */ + function toStringWithRange(start:Object, stop:Object):String; + + // REWRITING TREES (used by tree parser) + + /** Replace from start to stop child index of parent with t, which might + * be a list. Number of children may be different + * after this call. The stream is notified because it is walking the + * tree and might need to know you are monkeying with the underlying + * tree. Also, it might be able to modify the node stream to avoid + * restreaming for future phases. + * + * If parent is null, don't do anything; must be at root of overall tree. + * Can't replace whatever points to the parent externally. Do nothing. + */ + function replaceChildren(parent:Object, startChildIndex:int, stopChildIndex:int, t:Object):void; + + } + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeParser.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeParser.as new file mode 100644 index 0000000..cf0fb3b --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeParser.as @@ -0,0 +1,159 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2007 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree { + import org.antlr.runtime.*; + + /** A parser for a stream of tree nodes. "tree grammars" result in a subclass + * of this. All the error reporting and recovery is shared with Parser via + * the BaseRecognizer superclass. + */ + public class TreeParser extends BaseRecognizer { + public static const DOWN:int = TokenConstants.DOWN; + public static const UP:int = TokenConstants.UP; + + protected var input:TreeNodeStream; + + public function TreeParser(input:TreeNodeStream, state:RecognizerSharedState = null) { + super(state); + treeNodeStream = input; + } + + public override function reset():void { + super.reset(); // reset all recognizer state variables + if ( input!=null ) { + input.seek(0); // rewind the input + } + } + + /** Set the input stream */ + public function set treeNodeStream(input:TreeNodeStream):void { + this.input = input; + } + + public function get treeNodeStream():TreeNodeStream { + return input; + } + + public override function get sourceName():String { + return input.sourceName; + } + + protected override function getCurrentInputSymbol(input:IntStream):Object { + return TreeNodeStream(input).LT(1); + } + + protected override function getMissingSymbol(input:IntStream, + e:RecognitionException, + expectedTokenType:int, + follow:BitSet):Object { + var tokenText:String = + "<missing "+tokenNames[expectedTokenType]+">"; + return CommonTree.createFromToken(new CommonToken(expectedTokenType, tokenText)); + } + + /** Match '.' in tree parser has special meaning. Skip node or + * entire tree if node has children. If children, scan until + * corresponding UP node. + */ + public function matchAny(ignore:IntStream):void { // ignore stream, copy of this.input + state.errorRecovery = false; + state.failed = false; + var look:Object = input.LT(1); + if ( input.treeAdaptor.getChildCount(look)==0 ) { + input.consume(); // not subtree, consume 1 node and return + return; + } + // current node is a subtree, skip to corresponding UP. + // must count nesting level to get right UP + var level:int=0; + var tokenType:int = input.treeAdaptor.getType(look); + while ( tokenType!=TokenConstants.EOF && !(tokenType==UP && level==0) ) { + input.consume(); + look = input.LT(1); + tokenType = input.treeAdaptor.getType(look); + if ( tokenType == DOWN ) { + level++; + } + else if ( tokenType == UP ) { + level--; + } + } + input.consume(); // consume UP + } + + /** We have DOWN/UP nodes in the stream that have no line info; override. + * plus we want to alter the exception type. Don't try to recover + * from tree parser errors inline... + */ + protected override function mismatch(input:IntStream, ttype:int, follow:BitSet):void { + throw new MismatchedTreeNodeException(ttype, TreeNodeStream(input)); + } + + /** Prefix error message with the grammar name because message is + * always intended for the programmer because the parser built + * the input tree not the user. + */ + public override function getErrorHeader(e:RecognitionException):String { + return grammarFileName+": node from "+ + (e.approximateLineInfo?"after ":"")+"line "+e.line+":"+e.charPositionInLine; + } + + /** Tree parsers parse nodes they usually have a token object as + * payload. Set the exception token and do the default behavior. + */ + public override function getErrorMessage(e:RecognitionException, tokenNames:Array):String { + if ( this is TreeParser ) { + var adaptor:TreeAdaptor = TreeNodeStream(e.input).treeAdaptor; + e.token = adaptor.getToken(e.node); + if ( e.token==null ) { // could be an UP/DOWN node + e.token = new CommonToken(adaptor.getType(e.node), + adaptor.getText(e.node)); + } + } + return super.getErrorMessage(e, tokenNames); + } + + public function set treeAdaptor(adaptor:TreeAdaptor):void { + // do nothing, implemented in generated code + } + + public function get treeAdaptor():TreeAdaptor { + // implementation provided in generated code + return null; + } + + public function traceIn(ruleName:String, ruleIndex:int):void { + super.traceInSymbol(ruleName, ruleIndex, input.LT(1)); + } + + public function traceOut(ruleName:String, ruleIndex:int):void { + super.traceOutSymbol(ruleName, ruleIndex, input.LT(1)); + } + } + +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeRuleReturnScope.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeRuleReturnScope.as new file mode 100644 index 0000000..57a89b7 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/tree/TreeRuleReturnScope.as @@ -0,0 +1,66 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree { + + import org.antlr.runtime.RuleReturnScope; + + /** This is identical to the ParserRuleReturnScope except that + * the start property is a tree nodes not Token object + * when you are parsing trees. To be generic the tree node types + * have to be Object. + */ + public class TreeRuleReturnScope extends RuleReturnScope { + + /** First node or root node of tree matched for this rule. */ + protected var _start:Object; + private var _tree:Object; // if output=AST this contains the tree + private var _values:Object = new Object(); // contains the return values + + /** Has a value potentially if output=AST; */ + public override function get tree():Object { + return _tree; + } + + public function set tree(tree:Object):void { + _tree = tree; + } + + public function get values():Object { + return _values; + } + + public override function get start():Object { + return _start; + } + + public function set start(value:Object):void { + _start = value; + } + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/version.as b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/version.as new file mode 100644 index 0000000..4363c69 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/src/org/antlr/runtime/version.as @@ -0,0 +1,3 @@ +package org.antlr.runtime { + public const version:String = "3.1.3"; +} diff --git a/antlr-3.1.3/runtime/ActionScript/project/test/Antlr3Test.mxml b/antlr-3.1.3/runtime/ActionScript/project/test/Antlr3Test.mxml new file mode 100644 index 0000000..b5b5b72 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/test/Antlr3Test.mxml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="onCreationComplete()"> + + <mx:Script> + <![CDATA[ + import org.antlr.runtime.test.AllTests; + import flexunit.junit.JUnitTestRunner; + + + [Bindable] + private var runner : JUnitTestRunner; + + private function onCreationComplete() : void + { + status.text = "Please wait running test suite..."; + + runner = new JUnitTestRunner(); + runner.run( new AllTests(), onTestComplete ); + } + + private function onTestComplete() : void + { + status.text = "Finished running test suite."; + + fscommand( "quit" ); + } + + ]]> + </mx:Script> + + <mx:Label id="status" /> + +</mx:Application> diff --git a/antlr-3.1.3/runtime/ActionScript/project/test/org/antlr/runtime/test/AllTests.as b/antlr-3.1.3/runtime/ActionScript/project/test/org/antlr/runtime/test/AllTests.as new file mode 100644 index 0000000..c19ab5b --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/test/org/antlr/runtime/test/AllTests.as @@ -0,0 +1,14 @@ +package org.antlr.runtime.test { + import flexunit.framework.TestSuite; + + + public class AllTests extends TestSuite { + + public function AllTests() { + addTest(new TestSuite(TestANTLRStringStream)); + addTest(new TestSuite(TestBitSet)); + addTest(new TestSuite(TestDFA)); + } + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/test/org/antlr/runtime/test/TestANTLRStringStream.as b/antlr-3.1.3/runtime/ActionScript/project/test/org/antlr/runtime/test/TestANTLRStringStream.as new file mode 100644 index 0000000..9cb5a7b --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/test/org/antlr/runtime/test/TestANTLRStringStream.as @@ -0,0 +1,131 @@ +package org.antlr.runtime.test { + import flexunit.framework.TestCase; + + import org.antlr.runtime.ANTLRStringStream; + import org.antlr.runtime.CharStream; + import org.antlr.runtime.CharStreamConstants; + + public class TestANTLRStringStream extends TestCase { + + public function TestANTLRStringStream() { + super(); + } + + public function testConsume():void { + var stream:CharStream = new ANTLRStringStream("abc"); + assertEquals(stream.size, 3); + assertEquals(stream.charPositionInLine, 0); + assertEquals(stream.line, 1); + assertEquals(stream.index, 0); + + for (var i:int = 0; i < stream.size; i++) { + stream.consume(); + + assertEquals(stream.size, 3); // invariant + assertEquals(stream.charPositionInLine, i + 1); + assertEquals(stream.line, 1); // invariant + assertEquals(stream.index, i + 1); + } + + // now consume past EOF for a few ticks, nothing should change + for (i = 0; i < 5; i++) { + stream.consume(); + + assertEquals(stream.size, 3); // invariant + assertEquals(stream.charPositionInLine, 3); + assertEquals(stream.line, 1); // invariant + assertEquals(stream.index, 3); + } + + } + + public function testLA():void { + var stream:CharStream = new ANTLRStringStream("abc"); + assertEquals(stream.LA(-1), CharStreamConstants.EOF); // should be EOF + assertEquals(stream.LA(0), 0); // should be 0 (undefined) + assertEquals(stream.LA(1), "a".charCodeAt(0)); + assertEquals(stream.LA(2), "b".charCodeAt(0)); + assertEquals(stream.LA(3), "c".charCodeAt(0)); + assertEquals(stream.LA(4), CharStreamConstants.EOF); + + // now consume() one byte and run some more tests. + stream.consume(); + assertEquals(stream.LA(-2), CharStreamConstants.EOF); + assertEquals(stream.LA(-1), "a".charCodeAt(0)); + assertEquals(stream.LA(0), 0); // should be 0 (undefined) + assertEquals(stream.LA(1), "b".charCodeAt(0)); + assertEquals(stream.LA(2), "c".charCodeAt(0)); + assertEquals(stream.LA(3), CharStreamConstants.EOF); + } + + public function testReset():void { + var stream:ANTLRStringStream = new ANTLRStringStream("abc"); + assertEquals(stream.size, 3); + assertEquals(stream.charPositionInLine, 0); + assertEquals(stream.line, 1); + assertEquals(stream.index, 0); + + stream.consume(); + stream.consume(); + + assertEquals(stream.size, 3); + assertEquals(stream.charPositionInLine, 2); + assertEquals(stream.line, 1); + assertEquals(stream.index, 2); + + stream.reset(); + + assertEquals(stream.size, 3); + assertEquals(stream.charPositionInLine, 0); + assertEquals(stream.line, 1); + assertEquals(stream.index, 0); + + } + + public function testMark():void { + var stream:ANTLRStringStream = new ANTLRStringStream("a\nbc"); + + // setup a couple of markers + var mark1:int = stream.mark(); + stream.consume(); + stream.consume(); + var mark2:int = stream.mark(); + stream.consume(); + + // make sure we are where we expect to be + assertEquals(stream.charPositionInLine, 1); + assertEquals(stream.line, 2); + assertEquals(stream.index, 3); + + assertEquals(mark1, 1); + assertTrue(mark1 != mark2); + + stream.rewindTo(mark2); + assertEquals(stream.charPositionInLine, 0); + assertEquals(stream.line, 2); + assertEquals(stream.index, 2); + + stream.rewindTo(mark1); + assertEquals(stream.index, 0); + assertEquals(stream.charPositionInLine, 0); + assertEquals(stream.line, 1); + + // test two-level rewind + mark1 = stream.mark(); + stream.consume(); + stream.consume(); + stream.mark(); + stream.consume(); + + // make sure we are where we expect to be + assertEquals(stream.charPositionInLine, 1); + assertEquals(stream.line, 2); + assertEquals(stream.index, 3); + + stream.rewindTo(mark1); + assertEquals(stream.index, 0); + assertEquals(stream.charPositionInLine, 0); + assertEquals(stream.line, 1); + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/test/org/antlr/runtime/test/TestBitSet.as b/antlr-3.1.3/runtime/ActionScript/project/test/org/antlr/runtime/test/TestBitSet.as new file mode 100644 index 0000000..de40634 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/test/org/antlr/runtime/test/TestBitSet.as @@ -0,0 +1,30 @@ +package org.antlr.runtime.test { + import flexunit.framework.TestCase; + + import org.antlr.runtime.BitSet; + + public class TestBitSet extends TestCase { + + public function testConstructor():void { + // empty + var bitSet:BitSet = new BitSet(); + + assertEquals(0, bitSet.numBits); + assertEquals(0, bitSet.toPackedArray().length); + assertEquals(0, bitSet.size); + assertTrue(bitSet.isNil); + assertEquals("{}", bitSet.toString()); + + bitSet = BitSet.of(0, 1, 2); + assertEquals(32, bitSet.numBits); + assertEquals(1, bitSet.toPackedArray().length); + //assertEquals(1, bitSet.size); + assertFalse(bitSet.isNil); + assertEquals(7, int(bitSet.toPackedArray()[0])); + assertEquals("{0,1,2}", bitSet.toString()); + + + } + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ActionScript/project/test/org/antlr/runtime/test/TestDFA.as b/antlr-3.1.3/runtime/ActionScript/project/test/org/antlr/runtime/test/TestDFA.as new file mode 100644 index 0000000..f923bc9 --- /dev/null +++ b/antlr-3.1.3/runtime/ActionScript/project/test/org/antlr/runtime/test/TestDFA.as @@ -0,0 +1,29 @@ +package org.antlr.runtime.test { + import flexunit.framework.TestCase; + + import org.antlr.runtime.DFA; + + public class TestDFA extends TestCase { + + public function testUnpack():void { + // empty + var testVal:String = "\x01\x02\x03\x09"; + assertEquals(4, testVal.length); + assertEquals("2,9,9,9", DFA.unpackEncodedString("\x01\x02\x03\x09")); + + testVal = "\x03\u7fff"; + //testVal = String.fromCharCode(3, 0x7fff); + + assertEquals(2, testVal.length); + assertEquals("32767,32767,32767", DFA.unpackEncodedString(testVal)); + assertEquals("32767,32767,32767", DFA.unpackEncodedString(testVal, true)); + + testVal = "\x02\u80ff\xff"; + assertEquals(3, testVal.length); + assertEquals("-1,-1", DFA.unpackEncodedString(testVal)); + assertEquals("65535,65535", DFA.unpackEncodedString(testVal, true)); + + } + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/C/AUTHORS b/antlr-3.1.3/runtime/C/AUTHORS new file mode 100644 index 0000000..9195a9d --- /dev/null +++ b/antlr-3.1.3/runtime/C/AUTHORS @@ -0,0 +1,41 @@ +The ANTLR recognizer generator tool was written by (with many contributions) + + Prof. Terence Parr at USF + +The C runtime and related C code generation elements were written by + + Jim Idle (jimi idle ws s/ /./g) with no contributions at all because + nobody else was crazy enough to do it. + +The C runtime and the ANLTR tool itself are distributed under the BSD license +which basically gives the right to so anythign with it, so long as you +recognize the authors. See here: + + [The "BSD licence"] + Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC + http://www.temporal-wave.com + http://www.linkedin.com/in/jimidle + + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/antlr-3.1.3/runtime/C/C.sln b/antlr-3.1.3/runtime/C/C.sln new file mode 100644 index 0000000..f841177 --- /dev/null +++ b/antlr-3.1.3/runtime/C/C.sln @@ -0,0 +1,53 @@ +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "C", "C.vcproj", "{0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}" +EndProject +Global + GlobalSection(SourceCodeControl) = preSolution + SccNumberOfProjects = 2 + SccProjectName0 = Perforce\u0020Project + SccLocalPath0 = ..\\.. + SccProvider0 = MSSCCI:Perforce\u0020SCM + SccProjectFilePathRelativizedFromConnection0 = runtime\\C\\ + SccProjectUniqueName1 = C.vcproj + SccLocalPath1 = ..\\.. + SccProjectFilePathRelativizedFromConnection1 = runtime\\C\\ + EndGlobalSection + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + DebugDLL|Win32 = DebugDLL|Win32 + DebugDLL|x64 = DebugDLL|x64 + Deployment|Win32 = Deployment|Win32 + Deployment|x64 = Deployment|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + ReleaseDLL|Win32 = ReleaseDLL|Win32 + ReleaseDLL|x64 = ReleaseDLL|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Debug|Win32.ActiveCfg = Debug|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Debug|Win32.Build.0 = Debug|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Debug|x64.ActiveCfg = Debug|x64 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Debug|x64.Build.0 = Debug|x64 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.DebugDLL|Win32.Build.0 = DebugDLL|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.DebugDLL|x64.Build.0 = DebugDLL|x64 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Deployment|Win32.ActiveCfg = DebugDLL|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Deployment|Win32.Build.0 = DebugDLL|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Deployment|x64.ActiveCfg = DebugDLL|x64 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Deployment|x64.Build.0 = DebugDLL|x64 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Release|Win32.ActiveCfg = Release|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Release|Win32.Build.0 = Release|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Release|x64.ActiveCfg = Release|x64 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Release|x64.Build.0 = Release|x64 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.ReleaseDLL|Win32.ActiveCfg = ReleaseDLL|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.ReleaseDLL|Win32.Build.0 = ReleaseDLL|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.ReleaseDLL|x64.ActiveCfg = ReleaseDLL|x64 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.ReleaseDLL|x64.Build.0 = ReleaseDLL|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/antlr-3.1.3/runtime/C/C.vcproj b/antlr-3.1.3/runtime/C/C.vcproj new file mode 100644 index 0000000..8b8cc05 --- /dev/null +++ b/antlr-3.1.3/runtime/C/C.vcproj @@ -0,0 +1,1064 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="9.00" + Name="C" + ProjectGUID="{0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}" + RootNamespace="C" + SccProjectName="Perforce Project" + SccLocalPath="..\.." + SccProvider="MSSCCI:Perforce SCM" + Keyword="Win32Proj" + TargetFrameworkVersion="131072" + > + <Platforms> + <Platform + Name="Win32" + /> + <Platform + Name="x64" + /> + </Platforms> + <ToolFiles> + </ToolFiles> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="Debug" + IntermediateDirectory="Debug" + ConfigurationType="4" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories=""$(SolutionDir)\include";"$(SolutionDir)\..\..\include"" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + StringPooling="true" + MinimalRebuild="false" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + StructMemberAlignment="0" + EnableFunctionLevelLinking="true" + EnableEnhancedInstructionSet="0" + FloatingPointModel="0" + FloatingPointExceptions="true" + DisableLanguageExtensions="false" + UsePrecompiledHeader="0" + ExpandAttributedSource="true" + AssemblerOutput="2" + BrowseInformation="1" + WarningLevel="4" + WarnAsError="false" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + CallingConvention="0" + CompileAs="0" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLibrarianTool" + AdditionalDependencies="Ws2_32.lib" + OutputFile="$(OutDir)/antlr3cd.lib" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Debug|x64" + OutputDirectory="$(PlatformName)\$(ConfigurationName)" + IntermediateDirectory="$(PlatformName)\$(ConfigurationName)" + ConfigurationType="4" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + TargetEnvironment="3" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories=""$(SolutionDir)\include";"$(SolutionDir)\..\..\include"" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + StringPooling="true" + MinimalRebuild="false" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + StructMemberAlignment="0" + EnableFunctionLevelLinking="true" + EnableEnhancedInstructionSet="0" + FloatingPointModel="0" + FloatingPointExceptions="true" + DisableLanguageExtensions="false" + UsePrecompiledHeader="0" + ExpandAttributedSource="true" + AssemblerOutput="2" + BrowseInformation="1" + WarningLevel="4" + WarnAsError="false" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + CallingConvention="0" + CompileAs="0" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLibrarianTool" + AdditionalDependencies="Ws2_32.lib" + OutputFile="$(OutDir)/antlr3cd.lib" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="Release" + IntermediateDirectory="Release" + ConfigurationType="4" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="3" + InlineFunctionExpansion="2" + EnableIntrinsicFunctions="true" + FavorSizeOrSpeed="1" + OmitFramePointers="true" + EnableFiberSafeOptimizations="true" + WholeProgramOptimization="true" + AdditionalIncludeDirectories=""$(SolutionDir)\include"" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + StringPooling="true" + ExceptionHandling="1" + RuntimeLibrary="2" + BufferSecurityCheck="false" + EnableEnhancedInstructionSet="2" + FloatingPointModel="2" + DisableLanguageExtensions="false" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + AssemblerListingLocation=".\asm\release" + WarningLevel="4" + WarnAsError="true" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + CallingConvention="0" + CompileAs="1" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLibrarianTool" + AdditionalOptions="/LTCG" + AdditionalDependencies="Ws2_32.lib" + OutputFile="$(OutDir)/antlr3c.lib" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCXDCMakeTool" + ValidateIntelliSense="true" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release|x64" + OutputDirectory="$(PlatformName)\$(ConfigurationName)" + IntermediateDirectory="$(PlatformName)\$(ConfigurationName)" + ConfigurationType="4" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + TargetEnvironment="3" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="3" + InlineFunctionExpansion="2" + EnableIntrinsicFunctions="true" + FavorSizeOrSpeed="1" + OmitFramePointers="true" + EnableFiberSafeOptimizations="true" + WholeProgramOptimization="true" + AdditionalIncludeDirectories=""$(SolutionDir)\include"" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + StringPooling="true" + ExceptionHandling="1" + RuntimeLibrary="2" + BufferSecurityCheck="false" + EnableEnhancedInstructionSet="0" + FloatingPointModel="2" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + AssemblerListingLocation=".\asm\release" + WarningLevel="4" + WarnAsError="true" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + CallingConvention="0" + CompileAs="1" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLibrarianTool" + AdditionalOptions="/LTCG" + AdditionalDependencies="Ws2_32.lib" + OutputFile="$(OutDir)/antlr3c.lib" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCXDCMakeTool" + ValidateIntelliSense="true" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="ReleaseDLL|Win32" + OutputDirectory="$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + WholeProgramOptimization="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="3" + InlineFunctionExpansion="2" + EnableIntrinsicFunctions="true" + FavorSizeOrSpeed="1" + OmitFramePointers="true" + EnableFiberSafeOptimizations="true" + WholeProgramOptimization="true" + AdditionalIncludeDirectories=""$(SolutionDir)\include"" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + StringPooling="true" + ExceptionHandling="1" + RuntimeLibrary="2" + BufferSecurityCheck="false" + EnableEnhancedInstructionSet="2" + FloatingPointModel="2" + DisableLanguageExtensions="false" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + AssemblerListingLocation=".\asm\release" + WarningLevel="4" + WarnAsError="true" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + CallingConvention="0" + CompileAs="0" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="Ws2_32.lib" + OutputFile="$(OutDir)\antlr3c.dll" + Version="3.1.1" + OptimizeReferences="2" + EnableCOMDATFolding="2" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" + ImportLibrary="$(TargetDir)$(TargetName)_dll.lib" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + ValidateIntelliSense="true" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="ReleaseDLL|x64" + OutputDirectory="$(PlatformName)\$(ConfigurationName)" + IntermediateDirectory="$(PlatformName)\$(ConfigurationName)" + ConfigurationType="2" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + WholeProgramOptimization="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + TargetEnvironment="3" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="3" + InlineFunctionExpansion="2" + EnableIntrinsicFunctions="true" + FavorSizeOrSpeed="1" + OmitFramePointers="true" + EnableFiberSafeOptimizations="true" + WholeProgramOptimization="true" + AdditionalIncludeDirectories=""$(SolutionDir)\include"" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + StringPooling="true" + ExceptionHandling="1" + RuntimeLibrary="2" + BufferSecurityCheck="false" + EnableEnhancedInstructionSet="0" + FloatingPointModel="2" + DisableLanguageExtensions="false" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + AssemblerListingLocation=".\asm\release" + WarningLevel="4" + WarnAsError="true" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + CallingConvention="0" + CompileAs="0" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="Ws2_32.lib" + OutputFile="$(OutDir)\antlr3c64.dll" + Version="3.1.1" + OptimizeReferences="2" + EnableCOMDATFolding="2" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" + ImportLibrary="$(TargetDir)$(TargetName)_dll.lib" + TargetMachine="17" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + ValidateIntelliSense="true" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="DebugDLL|Win32" + OutputDirectory="$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + Outputs="$(TargetDir)$(TargetName)_dll.lib" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories=""$(SolutionDir)\include"" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + StringPooling="true" + MinimalRebuild="false" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + StructMemberAlignment="0" + EnableFunctionLevelLinking="true" + EnableEnhancedInstructionSet="0" + FloatingPointModel="0" + FloatingPointExceptions="true" + DisableLanguageExtensions="false" + UsePrecompiledHeader="0" + ExpandAttributedSource="true" + AssemblerOutput="2" + BrowseInformation="1" + WarningLevel="4" + WarnAsError="false" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + CallingConvention="0" + CompileAs="0" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="Ws2_32.lib" + OutputFile="$(OutDir)\antlr3cd.dll" + Version="3.1.1" + GenerateDebugInformation="true" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" + ImportLibrary="$(TargetDir)$(TargetName)_dll.lib" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="DebugDLL|x64" + OutputDirectory="$(PlatformName)\$(ConfigurationName)" + IntermediateDirectory="$(PlatformName)\$(ConfigurationName)" + ConfigurationType="2" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + Outputs="$(TargetDir)$(TargetName)_dll.lib" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + TargetEnvironment="3" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories=""$(SolutionDir)\include"" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + StringPooling="true" + MinimalRebuild="false" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + StructMemberAlignment="0" + EnableFunctionLevelLinking="true" + EnableEnhancedInstructionSet="0" + FloatingPointModel="0" + FloatingPointExceptions="true" + DisableLanguageExtensions="false" + UsePrecompiledHeader="0" + ExpandAttributedSource="true" + AssemblerOutput="2" + BrowseInformation="1" + WarningLevel="4" + WarnAsError="false" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + CallingConvention="0" + CompileAs="0" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="Ws2_32.lib" + OutputFile="$(OutDir)\antlr3c64d.dll" + Version="3.1.1" + GenerateDebugInformation="true" + RandomizedBaseAddress="1" + DataExecutionPrevention="0" + ImportLibrary="$(TargetDir)$(TargetName)_dll.lib" + TargetMachine="17" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" + > + <File + RelativePath=".\src\antlr3baserecognizer.c" + > + </File> + <File + RelativePath=".\src\antlr3basetree.c" + > + </File> + <File + RelativePath=".\src\antlr3basetreeadaptor.c" + > + </File> + <File + RelativePath=".\src\antlr3bitset.c" + > + </File> + <File + RelativePath=".\src\antlr3collections.c" + > + </File> + <File + RelativePath=".\src\antlr3commontoken.c" + > + </File> + <File + RelativePath=".\src\antlr3commontree.c" + > + </File> + <File + RelativePath=".\src\antlr3commontreeadaptor.c" + > + </File> + <File + RelativePath=".\src\antlr3commontreenodestream.c" + > + </File> + <File + RelativePath=".\src\antlr3convertutf.c" + > + </File> + <File + RelativePath=".\src\antlr3cyclicdfa.c" + > + </File> + <File + RelativePath=".\src\antlr3debughandlers.c" + > + </File> + <File + RelativePath=".\src\antlr3encodings.c" + > + </File> + <File + RelativePath=".\src\antlr3exception.c" + > + </File> + <File + RelativePath=".\src\antlr3filestream.c" + > + </File> + <File + RelativePath=".\src\antlr3inputstream.c" + > + </File> + <File + RelativePath=".\src\antlr3intstream.c" + > + </File> + <File + RelativePath=".\src\antlr3lexer.c" + > + </File> + <File + RelativePath=".\src\antlr3parser.c" + > + </File> + <File + RelativePath=".\src\antlr3rewritestreams.c" + > + </File> + <File + RelativePath=".\src\antlr3string.c" + > + </File> + <File + RelativePath=".\src\antlr3stringstream.c" + > + </File> + <File + RelativePath=".\src\antlr3tokenstream.c" + > + </File> + <File + RelativePath=".\src\antlr3treeparser.c" + > + </File> + <File + RelativePath=".\src\antlr3ucs2inputstream.c" + > + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" + > + <File + RelativePath=".\include\antlr3.h" + > + </File> + <File + RelativePath=".\include\antlr3baserecognizer.h" + > + </File> + <File + RelativePath=".\include\antlr3basetree.h" + > + </File> + <File + RelativePath=".\include\antlr3basetreeadaptor.h" + > + </File> + <File + RelativePath=".\include\antlr3bitset.h" + > + </File> + <File + RelativePath=".\include\antlr3collections.h" + > + </File> + <File + RelativePath=".\include\antlr3commontoken.h" + > + </File> + <File + RelativePath=".\include\antlr3commontree.h" + > + </File> + <File + RelativePath=".\include\antlr3commontreeadaptor.h" + > + </File> + <File + RelativePath=".\include\antlr3commontreenodestream.h" + > + </File> + <File + RelativePath=".\include\antlr3convertutf.h" + > + </File> + <File + RelativePath=".\include\antlr3cyclicdfa.h" + > + </File> + <File + RelativePath=".\include\antlr3debugeventlistener.h" + > + </File> + <File + RelativePath=".\include\antlr3defs.h" + > + </File> + <File + RelativePath=".\include\antlr3encodings.h" + > + </File> + <File + RelativePath=".\include\antlr3errors.h" + > + </File> + <File + RelativePath=".\include\antlr3exception.h" + > + </File> + <File + RelativePath=".\include\antlr3filestream.h" + > + </File> + <File + RelativePath=".\include\antlr3input.h" + > + </File> + <File + RelativePath=".\include\antlr3interfaces.h" + > + </File> + <File + RelativePath=".\include\antlr3intstream.h" + > + </File> + <File + RelativePath=".\include\antlr3lexer.h" + > + </File> + <File + RelativePath=".\include\antlr3memory.h" + > + </File> + <File + RelativePath=".\include\antlr3parser.h" + > + </File> + <File + RelativePath=".\include\antlr3parsetree.h" + > + </File> + <File + RelativePath=".\include\antlr3recognizersharedstate.h" + > + </File> + <File + RelativePath=".\include\antlr3rewritestreams.h" + > + </File> + <File + RelativePath=".\include\antlr3string.h" + > + </File> + <File + RelativePath=".\include\antlr3stringstream.h" + > + </File> + <File + RelativePath=".\include\antlr3tokenstream.h" + > + </File> + <File + RelativePath=".\include\antlr3treeparser.h" + > + </File> + </Filter> + <Filter + Name="Templates" + Filter=".stg" + > + <File + RelativePath="..\..\src\org\antlr\codegen\templates\C\AST.stg" + > + </File> + <File + RelativePath="..\..\src\org\antlr\codegen\templates\C\ASTDbg.stg" + > + </File> + <File + RelativePath="..\..\src\org\antlr\codegen\templates\C\ASTParser.stg" + > + </File> + <File + RelativePath="..\..\src\org\antlr\codegen\templates\C\ASTTreeParser.stg" + > + </File> + <File + RelativePath="..\..\src\org\antlr\codegen\templates\C\C.stg" + > + </File> + <File + RelativePath="..\..\src\org\antlr\codegen\templates\C\Dbg.stg" + > + </File> + <Filter + Name="Interfaces" + Filter="*.sti" + > + <File + RelativePath="..\..\src\org\antlr\codegen\templates\ANTLRCore.sti" + > + </File> + </Filter> + </Filter> + <Filter + Name="Java" + Filter="*.java" + > + <File + RelativePath="..\..\src\org\antlr\codegen\CTarget.java" + > + </File> + </Filter> + <Filter + Name="Doxygen" + > + <File + RelativePath=".\doxygen\atsections.dox" + > + </File> + <File + RelativePath=".\doxygen\build.dox" + > + </File> + <File + RelativePath=".\doxygen\buildrec.dox" + > + </File> + <File + RelativePath=".\doxygen\changes31.dox" + > + </File> + <File + RelativePath=".\doxygen\doxygengroups.dox" + > + </File> + <File + RelativePath=".\doxygen\generate.dox" + > + </File> + <File + RelativePath=".\doxygen\interop.dox" + > + </File> + <File + RelativePath=".\doxygen\mainpage.dox" + > + </File> + <File + RelativePath=".\doxygen\runtime.dox" + > + </File> + <File + RelativePath=".\doxygen\using.dox" + > + </File> + </Filter> + </Files> + <Globals> + <Global + Name="DevPartner_IsInstrumented" + Value="0" + /> + </Globals> +</VisualStudioProject> diff --git a/antlr-3.1.3/runtime/C/C.vcproj.vspscc b/antlr-3.1.3/runtime/C/C.vcproj.vspscc new file mode 100644 index 0000000..953a1b9 --- /dev/null +++ b/antlr-3.1.3/runtime/C/C.vcproj.vspscc @@ -0,0 +1,14 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "4" +"EXCLUDED_FILE0" = "debugdll\\antlr3cd_dll.lib" +"EXCLUDED_FILE1" = "releasedll\\antlr3c_dll.lib" +"EXCLUDED_FILE2" = "debugdll\\antlr3cd_dll.exp" +"EXCLUDED_FILE3" = "releasedll\\antlr3c_dll.exp" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/antlr-3.1.3/runtime/C/C.vssscc b/antlr-3.1.3/runtime/C/C.vssscc new file mode 100644 index 0000000..6cb031b --- /dev/null +++ b/antlr-3.1.3/runtime/C/C.vssscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT" +} diff --git a/antlr-3.1.3/runtime/C/COPYING b/antlr-3.1.3/runtime/C/COPYING new file mode 100644 index 0000000..f62f896 --- /dev/null +++ b/antlr-3.1.3/runtime/C/COPYING @@ -0,0 +1,29 @@ +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/antlr-3.1.3/runtime/C/ChangeLog b/antlr-3.1.3/runtime/C/ChangeLog new file mode 100644 index 0000000..c5540d9 --- /dev/null +++ b/antlr-3.1.3/runtime/C/ChangeLog @@ -0,0 +1,550 @@ +The following changes (change numbers refer to perforce) were +made from version 3.1.1 to 3.1.2 + +Runtime +------- + +Change 5641 on 2009/02/20 by jimi@jimi.jimi.antlr3 + + Release version 3.1.2 of the ANTLR C runtime. + + Updated documents and release notes will have to follow later. + +Change 5639 on 2009/02/20 by jimi@jimi.jimi.antlr3 + + Fixed: ANTLR-356 + + Ensure that code generation for C++ does not require casts + +Change 5577 on 2009/02/12 by jimi@jimi.jimi.antlr3 + + C Runtime - Bug fixes. + + o Having moved to use an extract directly from a vector for returning + tokens, it exposed a + bug whereby the EOF boudary calculation in tokLT was incorrectly + checking > rather than >=. + o Changing to API initialization of tokens rather than memcmp() + incorrectly forgot to set teh input stream pointer for the + manufactured tokens in the token factory; + o Rewrite streams for rewriting tree parsers did not check whether the + rewrite stream was ever assigned before trying to free it, it is now + in line with the ordinary parser code. + +Change 5576 on 2009/02/11 by jimi@jimi.jimi.antlr3 + + C Runtime: Ensure that when we manufacture a new token for a missing + token, that the user suplied custom information (if any) is copied + from the current token. + +Change 5575 on 2009/02/08 by jimi@jimi.jimi.antlr3 + + C Runtime - Vastly improve the reuse of allocated memory for nodes in + tree rewriting. + + A problem for all targets at the moment si that the rewrite logic + generated by ANTLR makes no attempt + to reuse any resources, it merely gurantees that the tree shape at the + end is correct. To some extent this is mitigated by the garbage + collection systems of Java and .Net, even thoguh it is still an overhead to + keep creating so many modes. + + This change implements the first of two C runtime changes that make + best efforst to track when a node has become orphaned and will never + be reused, based on inherent knowledge of the rewrite logic (which in + the long term is not a great soloution). + + Much of the rewrite logic consists of creating a niilnode into which + child nodes are appended. At: rulePost processing time; when a rewrite + stream is closed; and when becomeRoot is called, there are many situations + where the root of the tree that will be manipulted, or is finished with + (in the case of rewrtie streams), where the nilNode was just a temporary + creation for the sake of the rewrite itself. + + In these cases we can see that the nilNode would just be left ot rot in + the node factory that tracks all the tree nodes. + Rather than leave these in the factory to rot, we now keep a resuse + stck and always reuse any node on this + stack before claimin a new node from the factory pool. + + This single change alone reduces memory usage in the test case (20,604 + line C program and a GNU C parser) + from nearly a GB, to 276MB. This is still way more memory than we + shoudl need to do this operation, even on such a large input file, + but the reduction results in a huge performance increase and greatly + reduced system time spent on allocations. + + After this optimizatoin, comparison with gcc yeilds: + + time gcc -S a.c + a.c:1026: warning: conflicting types for built-in function ‘vsprintf’ + a.c:1030: warning: conflicting types for built-in function ‘vsnprintf’ + a.c:1041: warning: conflicting types for built-in function ‘vsscanf’ + 0.21user 0.01system 0:00.22elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k + 0inputs+240outputs (0major+8345minor)pagefaults 0swaps + + and + + time ./jimi + Reading a.c + 0.28user 0.11system 0:00.39elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k + 0inputs+0outputs (0major+66609minor)pagefaults 0swaps + + And we can now interpolate the fact that the only major differnce is + now the huge disparity in memory allocations. A + future optimization of vector pooling, to sepate node resue from vector + reuse, currently looks promising for further reuse of memory. + + Finally, a static analysis of the rewrte code, plus a realtime analysis + of the heap at runtime, may well give us a reasonable memory usage + pattern. In reality though, it is the generated rewrite logic + that must becom optional at not continuously rewriting things that it + need not, as it ascends the rule chain. + +Change 5563 on 2009/01/28 by jimi@jimi.jimi.antlr3 + + Allow rewrite streams to use the base adaptors vector factory and not + try to malloc new vectors themselves. + +Change 5562 on 2009/01/28 by jimi@jimi.jimi.antlr3 + + Don't use CALLOC to allocate tree pools, use malloc as there is no need + for calloc. + +Change 5561 on 2009/01/28 by jimi@jimi.jimi.antlr3 + + Prevent warnigsn about retval.stop not being initialized when a rule + returns eraly because it is in backtracking mode + +Change 5558 on 2009/01/28 by jimi@jimi.jimi.antlr3 + + Lots of optimizations (though the next one to be checked in is the huge + win) for AST building and vector factories. + + A large part of tree rewriting was the creation of vectors to hold AST + nodes. Although I had created a vector factory, for some reason I never got + around to creating a proper one, that pre-allocated the vectors in chunks and + so on. I guess I just forgot to. Hence a big win here is prevention of calling + malloc lots and lots of times to create vectors. + + A second inprovement was to change teh vector definition such that it + holds a certain number of elements wihtin the vector structure itself, rather + than malloc and freeing these. Currently this is set to 8, but may increase. + For AST construction, this is generally a big win because AST nodes don't often + have many individual children unless there has not been any shaping going on in + the parser. But if you are not shaping, then you don't really need a tree. + + Other perforamnce inprovements here include not calling functions + indirectly within token stream and common token stream. Hence tokens are + claimed directly from the vectors. Users can override these funcitons of course + and all this means is that if you override tokenstreams then you pretty much + have to provide all the mehtods, but then I think you woudl have to anyway (and + I don't know of anyone that has wanted to do this as you can carry your own + structure around with the tokens anyway and that is much easier). + +Change 5555 on 2009/01/26 by jimi@jimi.jimi.antlr3 + + Fixed: ANTLR-288 + Correct the interpretation of the skip token such that channel, start + index, char pos in lie, start line and text are correctly reset to the start of + the new token when the one that we just traversed was marked as being skipped. + + This correctly excludes the text that was matched as part of the + SKIP()ed token from the next token in the token stream and so has the side + effect that asking for $text of a rule no longer includes the text that shuodl + be skipped, but DOES include the text of tokens that were merely placed off the + default channel. + +Change 5551 on 2009/01/25 by jimi@jimi.jimi.antlr3 + + Fixed: ANTLR-287 + Most of the source files did not include the BSD license. THis might + not be that big a deal given that I don't care what people do with it + other than take my name off it, but having the license reproduced + everywhere + at least makes things perfectly clear. Hence this mass change of + sources and templates + to include the license. + +Change 5550 on 2009/01/25 by jimi@jimi.jimi.antlr3 + + Fixed: ANTLR-365 + Ensure that as soon as we known about an input stream on the lexer that + we borrow its string factroy adn use it in our EOF token in case + anyone tries to make it a string, such as in error messages for + instance. + +Change 5548 on 2009/01/25 by jimi@jimi.jimi.antlr3 + + Fixed: ANTLR-363 + At some point the Java runtime default changed from discarding offchannel + tokens to preserving them. The fix is to make the C runtime also + default to preserving off-channel tokens. + +Change 5544 on 2009/01/24 by jimi@jimi.jimi.antlr3 + + Fixed: ANTLR-360 + Ensure that the fillBuffer funtiion does not call any methods + that require the cached buffer size to be recorded before we + have actually recorded it. + +Change 5543 on 2009/01/24 by jimi@jimi.jimi.antlr3 + + Fixed: ANTLR-362 + Some users have started using string factories themselves and + exposed a flaw in the destroy method, that is intended to remove + a strng htat was created by the factory and is no longer needed. + The string was correctly removed from the vector that tracks them + but after the first one, all the remaining strings are then numbered + incorrectly. Hence the destroy method has been recoded to reindex + the strings in the factory after one is removed and everythig is once + more hunky dory. + User suggested fix rejected. + +Change 5542 on 2009/01/24 by jimi@jimi.jimi.antlr3 + + Fixed ANTLR-366 + The recognizer state now ensures that all fields are set to NULL upon +creation + and the reset does not overwrite the tokenname array + +Change 5527 on 2009/01/15 by jimi@jimi.jimi.antlr3 + + Add the C runtime for 3.1.2 beta2 to perforce + +Change 5526 on 2009/01/15 by jimi@jimi.jimivista.antlr3 + + Correctly define the MEMMOVE macro which was inadvertently left to be + memcpy. + +Change 5503 on 2008/12/12 by jimi@jimi.jimi.antlr3 + + Change C runtime release number to 3.1.2 beta + +Change 5473 on 2008/12/01 by jimi@jimi.jimivista.antlr3 + + Fixed: ANTLR-350 - C runtime use of memcpy + Prior change to use memcpy instead of memmove in all cases missed the + fact that the string factory can be in a situation where overlaps occur. We now + have ANTLR3_MEMCPY and ANTLR3_MEMMOVE and use the two appropriately. + +Change 5471 on 2008/12/01 by jimi@jimi.jimivista.antlr3 + + Fixed ANTLR-361 + - Ensure that ANTLR3_BOOLEAN is typedef'ed correctly when building for + MingW + +Templates +--------- + +Change 5637 on 2009/02/20 by jimi@jimi.jimi.antlr3 + + C rtunime - make sure that ADAPTOR results are cast to the tree type on + a rewrite + +Change 5620 on 2009/02/18 by jimi@jimi.jimi.antlr3 + + Rename/Move: + From: //depot/code/antlr/main/src/org/antlr/codegen/templates/... + To: //depot/code/antlr/main/src/main/resources/org/antlr/codegen/templates/... + + Relocate the code generating templates to exist in the directory set + that maven expects. + + When checking in your templates, you may find it easiest to make a copy + of what you have, revert the change in perforce, then just check out the + template in the new location, and copy the changes back over. Nobody has oore + than two files open at the moment. + +Change 5578 on 2009/02/12 by jimi@jimi.jimi.antlr3 + + Correct the string template escape sequences for generating scope + code in the C templates. + +Change 5577 on 2009/02/12 by jimi@jimi.jimi.antlr3 + + C Runtime - Bug fixes. + + o Having moved to use an extract directly from a vector for returning + tokens, it exposed a + bug whereby the EOF boudary calculation in tokLT was incorrectly + checking > rather than + >=. + o Changing to API initialization of tokens rather than memcmp() + incorrectly forgot to + set teh input stream pointer for the manufactured tokens in the + token factory; + o Rewrite streams for rewriting tree parsers did not check whether the + rewrite stream + was ever assigned before trying to free it, it is now in line with + the ordinary parser code. + +Change 5567 on 2009/01/29 by jimi@jimi.jimi.antlr3 + + C Runtime - Further Optimizations + + Within grammars that used scopes and were intended to parse large + inputs with many rule nests, + the creation anf deletion of the scopes themselves became significant. + Careful analysis shows that + for most grammars, while a parse could create and delete 20,000 scopes, + the maxium depth of + any scope was only 8. + + This change therefore changes the scope implementation so that it does + not free scope memory when + it is popped but just tracks it in a C runtime stack, eventually + freeing it when the stack is freed. This change + caused the allocation of only 12 scope structures instead of 20,000 for + the extreme example case. + + This change means that scope users must be carefule (as ever in C) to + initializae their scope elements + correctly as: + + 1) If not you may inherit values from a prior use of the scope + structure; + 2) SCope structure are now allocated with malloc and not calloc; + + Also, when using a custom free function to clean a scope when it is + popped, it is probably a good idea + to set any free'd pointers to NULL (this is generally good C programmig + practice in any case) + +Change 5566 on 2009/01/29 by jimi@jimi.jimi.antlr3 + + Remove redundant BACKTRACK checking so that MSVC9 does not get confused + about possibly uninitialized variables + +Change 5565 on 2009/01/28 by jimi@jimi.jimi.antlr3 + + Use malloc rather than calloc to allocate memory for new scopes. Note + that this means users will have to be careful to initialize any values in their + scopes that they expect to be 0 or NULL and I must document this. + +Change 5564 on 2009/01/28 by jimi@jimi.jimi.antlr3 + + Use malloc rather than calloc for copying list lable tokens for + rewrites. + +Change 5561 on 2009/01/28 by jimi@jimi.jimi.antlr3 + + Prevent warnigsn about retval.stop not being initialized when a rule + returns eraly because it is in backtracking mode + +Change 5560 on 2009/01/28 by jimi@jimi.jimi.antlr3 + + Add a NULL check before freeing rewrite streams used in AST rewrites + rather than auto-rewrites. + + While the NULL check is redundant as the free cannot be called unless + it is assigned, Visual Studio C 2008 + gets it wrong and thinks that there is a PATH than can arrive at the + free wihtout it being assigned and that is too annoying to ignore. + +Change 5559 on 2009/01/28 by jimi@jimi.jimi.antlr3 + + C target Tree rewrite optimization + + There is only one optimization in this change, but it is a huge one. + + The code generation templates were set up so that at the start of a rule, + any rewrite streams mentioned in the rule wer pre-created. However, this + is a massive overhead for rules where only one or two of the streams are + actually used, as we create them then free them without ever using them. + This was copied from the Java templates basically. + This caused literally millions of extra calls and vector allocations + in the case of the GNU C parser given to me for testing with a 20,000 + line program. + + After this change, the following comparison is avaiable against the gcc + compiler: + + Before (different machines here so use the relative difference for + comparison): + + gcc: + + real 0m0.425s + user 0m0.384s + sys 0m0.036s + + ANTLR C + real 0m1.958s + user 0m1.284s + sys 0m0.656s + + After the previous optimizations for vector pooling via a factory, + plus this huge win in removing redundant code, we have the following + (different machine to the one above): + + gcc: + 0.21user 0.01system 0:00.23elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k + 0inputs+328outputs (0major+9922minor)pagefaults 0swaps + + ANTLR C: + + 0.37user 0.26system 0:00.64elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k + 0inputs+0outputs (0major+130944minor)pagefaults 0swaps + + The extra system time coming from the fact that although the tree + rewriting is now optimal in terms of not allocating things it does + not need, there is still a lot more overhead in a parser that is generated + for generic use, including much more use of structures for tokens and extra + copying and so on. I will + continue to work on improviing things where I can, but the next big + improvement will come from Ter's optimization of the actual code structures we + generate including not doing things with rewrite streams that we do not need to + do at all. + + The second machine I used is about twice as fast CPU wise as the system + that was used originally by the user that asked about this performance. + +Change 5558 on 2009/01/28 by jimi@jimi.jimi.antlr3 + + Lots of optimizations (though the next one to be checked in is the huge + win) for AST building and vector factories. + + A large part of tree rewriting was the creation of vectors to hold AST + nodes. Although I had created a vector factory, for some reason I never got + around to creating a proper one, that pre-allocated the vectors in chunks and + so on. I guess I just forgot to. Hence a big win here is prevention of calling + malloc lots and lots of times to create vectors. + + A second inprovement was to change teh vector definition such that it + holds a certain number of elements wihtin the vector structure itself, rather + than malloc and freeing these. Currently this is set to 8, but may increase. + For AST construction, this is generally a big win because AST nodes don't often + have many individual children unless there has not been any shaping going on in + the parser. But if you are not shaping, then you don't really need a tree. + + Other perforamnce inprovements here include not calling functions + indirectly within token stream and common token stream. Hence tokens are + claimed directly from the vectors. Users can override these funcitons of course + and all this means is that if you override tokenstreams then you pretty much + have to provide all the mehtods, but then I think you woudl have to anyway (and + I don't know of anyone that has wanted to do this as you can carry your own + structure around with the tokens anyway and that is much easier). + +Change 5554 on 2009/01/26 by jimi@jimi.jimi.antlr3 + + Fixed: ANTLR-379 + For some reason in the past, the ruleMemozation() template had required + that the name parameter be set to the rule name. This does not seem to be a + requirement any more. The name=xxx override when invoking the template was + causing all the scope names derived when cleaning up in memoization to be + called after the rule name, which was not correct. Howver, this only affected + the output when in output=AST mode. + + This template invocation is now corrected. + +Change 5553 on 2009/01/26 by jimi@jimi.jimi.antlr3 + + Fixed: ANTLR-330 + Managed to get the one rule that could not see the ASTLabelType to call + back in to the super template C.stg and ask it to construct hte name. I am not + 100% sure that this fixes all cases, but I cannot find any that fail. PLease + let me know if you find any exampoles of being unable to default the + ASTLabelType option in the C target. + +Change 5552 on 2009/01/25 by jimi@jimi.jimi.antlr3 + + Progress: ANTLR-327 + Fix debug code generation templates when output=AST such that code + can at least be generated and I can debug the output code correctly. + Note that this checkin does not implement the debugging requirements + for tree generating parsers. + +Change 5551 on 2009/01/25 by jimi@jimi.jimi.antlr3 + + Fixed: ANTLR-287 + Most of the source files did not include the BSD license. THis might + not be that big a deal given that I don't care what people do with it + other than take my name off it, but having the license reproduced + everywhere at least makes things perfectly clear. Hence this mass change of + sources and templates to include the license. + +Change 5549 on 2009/01/25 by jimi@jimi.jimi.antlr3 + + Fixed: ANTLR-354 + Using 0.0D as the default initialize value for a double caused + VS 2003 C compiler to bomb out. There seesm to be no reason other + than force of habit to set this to 0.0D so I have dropped the D so + that older compilers do not complain. + +Change 5547 on 2009/01/25 by jimi@jimi.jimi.antlr3 + + Fixed: ANTLR-282 + All references are now unadorned with any type of NULL check for the + following reasons: + + 1) A NULL reference means that there is a problem with the + grammar and we need the program to fail immediately so + that the programmer can work out where the problem occured; + 2) Most of the time, the only sensible value that can be + returned is NULL or 0 which + obviates the NULL check in the first place; + 3) If we replace a NULL reference with some value such as 0, + then the program may blithely continue but just do something + logically wrong, which will be very difficult for the + grammar programmer to detect and correct. + +Change 5545 on 2009/01/24 by jimi@jimi.jimi.antlr3 + + Fixed: ANTLR-357 + The bug report was correct in that the types of references to things + like $start were being incorrectly cast as they wer not changed from + Java style casts (and the casts are unneccessary). this is now fixed + and references are referencing the correct, uncast, types. + However, the bug report was wrong in that the reference in the bok to + $start.pos will only work for Java and really, it is incorrect in the + book because it shoudl not access the .pos member directly but shudl + be using $start.getCharPositionInLine(). + Because there is no access qualification in C, one could use + $start.charPosition, however + really this should be $start->getCharPositionInLine($start); + +Change 5541 on 2009/01/24 by jimi@jimi.jimi.antlr3 + + Fixed - ANTLR-367 + The code generation for the free method of a recognizer was not + distinguishing tree parsers from parsers when it came to calling delegate free + functions. + This is now corrected. + +Change 5540 on 2009/01/24 by jimi@jimi.jimi.antlr3 + + Fixed ANTLR-355 + Ensure that we do not attempt to free any memory that we did not + actually allocate because the parser rule was being executed in + backtracking mode. + +Change 5539 on 2009/01/24 by jimi@jimi.jimivista.antlr3 + + Fixed: ANTLR-355 + When a C targetted parser is producing in backtracking mode, then the + creation of new stream rewrite structures shoudl not happen if the rule is + currently backtracking + +Change 5502 on 2008/12/11 by jimi@jimi.jimi.antlr3 + + Fixed: ANTLR-349 Ensure that all marker labels in the lexer are 64 bit + compatible + +Change 5473 on 2008/12/01 by jimi@jimi.jimivista.antlr3 + + Fixed: ANTLR-350 - C runtime use of memcpy + Prior change to use memcpy instead of memmove in all cases missed the + fact that the string factory can be in a situation where overlaps occur. We now + have ANTLR3_MEMCPY and ANTLR3_MEMMOVE and use the two appropriately. + +Change 5387 on 2008/11/05 by parrt@parrt.spork + + Fixed x+=. issue with tree grammars; added unit test + +Change 5325 on 2008/10/23 by parrt@parrt.spork + + We were all ref'ing backtracking==0 hardcoded instead checking the + @synpredgate action. + + diff --git a/antlr-3.1.3/runtime/C/Cvs2005.sln b/antlr-3.1.3/runtime/C/Cvs2005.sln new file mode 100644 index 0000000..43050c7 --- /dev/null +++ b/antlr-3.1.3/runtime/C/Cvs2005.sln @@ -0,0 +1,53 @@ +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "C", "Cvs2005.vcproj", "{0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}" +EndProject +Global + GlobalSection(SourceCodeControl) = preSolution + SccNumberOfProjects = 2 + SccProjectName0 = Perforce\u0020Project + SccLocalPath0 = ..\\.. + SccProvider0 = MSSCCI:Perforce\u0020SCM + SccProjectFilePathRelativizedFromConnection0 = runtime\\C\\ + SccProjectUniqueName1 = Cvs2005.vcproj + SccLocalPath1 = ..\\.. + SccProjectFilePathRelativizedFromConnection1 = runtime\\C\\ + EndGlobalSection + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + DebugDLL|Win32 = DebugDLL|Win32 + DebugDLL|x64 = DebugDLL|x64 + Deployment|Win32 = Deployment|Win32 + Deployment|x64 = Deployment|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + ReleaseDLL|Win32 = ReleaseDLL|Win32 + ReleaseDLL|x64 = ReleaseDLL|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Debug|Win32.ActiveCfg = Debug|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Debug|Win32.Build.0 = Debug|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Debug|x64.ActiveCfg = Debug|x64 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Debug|x64.Build.0 = Debug|x64 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.DebugDLL|Win32.Build.0 = DebugDLL|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.DebugDLL|x64.Build.0 = DebugDLL|x64 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Deployment|Win32.ActiveCfg = DebugDLL|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Deployment|Win32.Build.0 = DebugDLL|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Deployment|x64.ActiveCfg = DebugDLL|x64 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Deployment|x64.Build.0 = DebugDLL|x64 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Release|Win32.ActiveCfg = Release|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Release|Win32.Build.0 = Release|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Release|x64.ActiveCfg = Release|x64 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.Release|x64.Build.0 = Release|x64 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.ReleaseDLL|Win32.ActiveCfg = ReleaseDLL|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.ReleaseDLL|Win32.Build.0 = ReleaseDLL|Win32 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.ReleaseDLL|x64.ActiveCfg = ReleaseDLL|x64 + {0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}.ReleaseDLL|x64.Build.0 = ReleaseDLL|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/antlr-3.1.3/runtime/C/Cvs2005.vcproj b/antlr-3.1.3/runtime/C/Cvs2005.vcproj new file mode 100644 index 0000000..a00807c --- /dev/null +++ b/antlr-3.1.3/runtime/C/Cvs2005.vcproj @@ -0,0 +1,1067 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="8.00" + Name="C" + ProjectGUID="{0F0FE03A-78F3-4B34-9DCE-0CDFF1FB5C40}" + RootNamespace="C" + SccProjectName="Perforce Project" + SccLocalPath="..\.." + SccProvider="MSSCCI:Perforce SCM" + Keyword="Win32Proj" + > + <Platforms> + <Platform + Name="Win32" + /> + <Platform + Name="x64" + /> + </Platforms> + <ToolFiles> + </ToolFiles> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="Debug" + IntermediateDirectory="Debug" + ConfigurationType="4" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories=""$(SolutionDir)\include";"$(SolutionDir)\..\..\include"" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + StringPooling="true" + MinimalRebuild="false" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + StructMemberAlignment="0" + EnableFunctionLevelLinking="true" + EnableEnhancedInstructionSet="0" + FloatingPointModel="0" + FloatingPointExceptions="true" + DisableLanguageExtensions="false" + UsePrecompiledHeader="0" + ExpandAttributedSource="true" + AssemblerOutput="2" + BrowseInformation="1" + WarningLevel="4" + WarnAsError="false" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + CallingConvention="0" + CompileAs="0" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLibrarianTool" + AdditionalDependencies="Ws2_32.lib" + OutputFile="$(OutDir)/antlr3cd.lib" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Debug|x64" + OutputDirectory="$(PlatformName)\$(ConfigurationName)" + IntermediateDirectory="$(PlatformName)\$(ConfigurationName)" + ConfigurationType="4" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + TargetEnvironment="3" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories=""$(SolutionDir)\include";"$(SolutionDir)\..\..\include"" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + StringPooling="true" + MinimalRebuild="false" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + StructMemberAlignment="0" + EnableFunctionLevelLinking="true" + EnableEnhancedInstructionSet="0" + FloatingPointModel="0" + FloatingPointExceptions="true" + DisableLanguageExtensions="false" + UsePrecompiledHeader="0" + ExpandAttributedSource="true" + AssemblerOutput="2" + BrowseInformation="1" + WarningLevel="4" + WarnAsError="false" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + CallingConvention="0" + CompileAs="0" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLibrarianTool" + AdditionalDependencies="Ws2_32.lib" + OutputFile="$(OutDir)/antlr3cd.lib" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="Release" + IntermediateDirectory="Release" + ConfigurationType="4" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="3" + InlineFunctionExpansion="2" + EnableIntrinsicFunctions="true" + FavorSizeOrSpeed="1" + OmitFramePointers="true" + EnableFiberSafeOptimizations="true" + WholeProgramOptimization="true" + AdditionalIncludeDirectories=""$(SolutionDir)\include"" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + StringPooling="true" + ExceptionHandling="1" + RuntimeLibrary="2" + BufferSecurityCheck="false" + EnableEnhancedInstructionSet="2" + FloatingPointModel="2" + DisableLanguageExtensions="false" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + AssemblerListingLocation=".\asm\release" + WarningLevel="4" + WarnAsError="true" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + CallingConvention="0" + CompileAs="1" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLibrarianTool" + AdditionalOptions="/LTCG" + AdditionalDependencies="Ws2_32.lib" + OutputFile="$(OutDir)/antlr3c.lib" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCXDCMakeTool" + ValidateIntelliSense="true" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release|x64" + OutputDirectory="$(PlatformName)\$(ConfigurationName)" + IntermediateDirectory="$(PlatformName)\$(ConfigurationName)" + ConfigurationType="4" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + TargetEnvironment="3" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="3" + InlineFunctionExpansion="2" + EnableIntrinsicFunctions="true" + FavorSizeOrSpeed="1" + OmitFramePointers="true" + EnableFiberSafeOptimizations="true" + WholeProgramOptimization="true" + AdditionalIncludeDirectories=""$(SolutionDir)\include"" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + StringPooling="true" + ExceptionHandling="1" + RuntimeLibrary="2" + BufferSecurityCheck="false" + EnableEnhancedInstructionSet="0" + FloatingPointModel="2" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + AssemblerListingLocation=".\asm\release" + WarningLevel="4" + WarnAsError="true" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + CallingConvention="0" + CompileAs="1" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLibrarianTool" + AdditionalOptions="/LTCG" + AdditionalDependencies="Ws2_32.lib" + OutputFile="$(OutDir)/antlr3c.lib" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCXDCMakeTool" + ValidateIntelliSense="true" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="ReleaseDLL|Win32" + OutputDirectory="$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + WholeProgramOptimization="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="3" + InlineFunctionExpansion="2" + EnableIntrinsicFunctions="true" + FavorSizeOrSpeed="1" + OmitFramePointers="true" + EnableFiberSafeOptimizations="true" + WholeProgramOptimization="true" + AdditionalIncludeDirectories=""$(SolutionDir)\include"" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + StringPooling="true" + ExceptionHandling="1" + RuntimeLibrary="2" + BufferSecurityCheck="false" + EnableEnhancedInstructionSet="2" + FloatingPointModel="2" + DisableLanguageExtensions="false" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + AssemblerListingLocation=".\asm\release" + WarningLevel="4" + WarnAsError="true" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + CallingConvention="0" + CompileAs="0" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="Ws2_32.lib" + OutputFile="$(OutDir)\antlr3c.dll" + Version="3.0b4" + OptimizeReferences="2" + EnableCOMDATFolding="2" + ImportLibrary="$(TargetDir)$(TargetName)_dll.lib" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + ValidateIntelliSense="true" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="ReleaseDLL|x64" + OutputDirectory="$(PlatformName)\$(ConfigurationName)" + IntermediateDirectory="$(PlatformName)\$(ConfigurationName)" + ConfigurationType="2" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + WholeProgramOptimization="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + TargetEnvironment="3" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="3" + InlineFunctionExpansion="2" + EnableIntrinsicFunctions="true" + FavorSizeOrSpeed="1" + OmitFramePointers="true" + EnableFiberSafeOptimizations="true" + WholeProgramOptimization="true" + AdditionalIncludeDirectories=""$(SolutionDir)\include"" + PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" + StringPooling="true" + ExceptionHandling="1" + RuntimeLibrary="2" + BufferSecurityCheck="false" + EnableEnhancedInstructionSet="0" + FloatingPointModel="2" + DisableLanguageExtensions="false" + RuntimeTypeInfo="false" + UsePrecompiledHeader="0" + AssemblerListingLocation=".\asm\release" + WarningLevel="4" + WarnAsError="true" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + CallingConvention="0" + CompileAs="0" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="Ws2_32.lib" + OutputFile="$(OutDir)\antlr3c64.dll" + Version="3.0.0.1" + OptimizeReferences="2" + EnableCOMDATFolding="2" + ImportLibrary="$(TargetDir)$(TargetName)_dll.lib" + TargetMachine="17" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + ValidateIntelliSense="true" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="DebugDLL|Win32" + OutputDirectory="$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + Outputs="$(TargetDir)$(TargetName)_dll.lib" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories=""$(SolutionDir)\include"" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + StringPooling="true" + MinimalRebuild="false" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + StructMemberAlignment="0" + EnableFunctionLevelLinking="true" + EnableEnhancedInstructionSet="0" + FloatingPointModel="0" + FloatingPointExceptions="true" + DisableLanguageExtensions="false" + UsePrecompiledHeader="0" + ExpandAttributedSource="true" + AssemblerOutput="2" + BrowseInformation="1" + WarningLevel="4" + WarnAsError="false" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + CallingConvention="0" + CompileAs="0" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="Ws2_32.lib" + OutputFile="$(OutDir)\antlr3cd.dll" + Version="1.0b4" + GenerateDebugInformation="true" + ImportLibrary="$(TargetDir)$(TargetName)_dll.lib" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="DebugDLL|x64" + OutputDirectory="$(PlatformName)\$(ConfigurationName)" + IntermediateDirectory="$(PlatformName)\$(ConfigurationName)" + ConfigurationType="2" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + Outputs="$(TargetDir)$(TargetName)_dll.lib" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + TargetEnvironment="3" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories=""$(SolutionDir)\include"" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" + StringPooling="true" + MinimalRebuild="false" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + StructMemberAlignment="0" + EnableFunctionLevelLinking="true" + EnableEnhancedInstructionSet="0" + FloatingPointModel="0" + FloatingPointExceptions="true" + DisableLanguageExtensions="false" + UsePrecompiledHeader="0" + ExpandAttributedSource="true" + AssemblerOutput="2" + BrowseInformation="1" + WarningLevel="4" + WarnAsError="false" + Detect64BitPortabilityProblems="false" + DebugInformationFormat="3" + CallingConvention="0" + CompileAs="0" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="Ws2_32.lib" + OutputFile="$(OutDir)\antlr3c64d.dll" + Version="3.0.0.1" + GenerateDebugInformation="true" + ImportLibrary="$(TargetDir)$(TargetName)_dll.lib" + TargetMachine="17" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" + > + <File + RelativePath=".\src\antlr3baserecognizer.c" + > + </File> + <File + RelativePath=".\src\antlr3basetree.c" + > + </File> + <File + RelativePath=".\src\antlr3basetreeadaptor.c" + > + </File> + <File + RelativePath=".\src\antlr3bitset.c" + > + </File> + <File + RelativePath=".\src\antlr3collections.c" + > + </File> + <File + RelativePath=".\src\antlr3commontoken.c" + > + </File> + <File + RelativePath=".\src\antlr3commontree.c" + > + </File> + <File + RelativePath=".\src\antlr3commontreeadaptor.c" + > + </File> + <File + RelativePath=".\src\antlr3commontreenodestream.c" + > + </File> + <File + RelativePath=".\src\antlr3convertutf.c" + > + </File> + <File + RelativePath=".\src\antlr3cyclicdfa.c" + > + </File> + <File + RelativePath=".\src\antlr3debughandlers.c" + > + </File> + <File + RelativePath=".\src\antlr3encodings.c" + > + </File> + <File + RelativePath=".\src\antlr3exception.c" + > + </File> + <File + RelativePath=".\src\antlr3filestream.c" + > + </File> + <File + RelativePath=".\src\antlr3inputstream.c" + > + </File> + <File + RelativePath=".\src\antlr3intstream.c" + > + </File> + <File + RelativePath=".\src\antlr3lexer.c" + > + </File> + <File + RelativePath=".\src\antlr3parser.c" + > + </File> + <File + RelativePath=".\src\antlr3rewritestreams.c" + > + </File> + <File + RelativePath=".\src\antlr3string.c" + > + </File> + <File + RelativePath=".\src\antlr3stringstream.c" + > + </File> + <File + RelativePath=".\src\antlr3tokenstream.c" + > + </File> + <File + RelativePath=".\src\antlr3treeparser.c" + > + </File> + <File + RelativePath=".\src\antlr3ucs2inputstream.c" + > + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" + > + <File + RelativePath=".\include\antlr3.h" + > + </File> + <File + RelativePath=".\include\antlr3baserecognizer.h" + > + </File> + <File + RelativePath=".\include\antlr3basetree.h" + > + </File> + <File + RelativePath=".\include\antlr3basetreeadaptor.h" + > + </File> + <File + RelativePath=".\include\antlr3bitset.h" + > + </File> + <File + RelativePath=".\include\antlr3collections.h" + > + </File> + <File + RelativePath=".\include\antlr3commontoken.h" + > + </File> + <File + RelativePath=".\include\antlr3commontree.h" + > + </File> + <File + RelativePath=".\include\antlr3commontreeadaptor.h" + > + </File> + <File + RelativePath=".\include\antlr3commontreenodestream.h" + > + </File> + <File + RelativePath=".\include\antlr3convertutf.h" + > + </File> + <File + RelativePath=".\include\antlr3cyclicdfa.h" + > + </File> + <File + RelativePath=".\include\antlr3debugeventlistener.h" + > + </File> + <File + RelativePath=".\include\antlr3defs.h" + > + </File> + <File + RelativePath=".\include\antlr3encodings.h" + > + </File> + <File + RelativePath=".\include\antlr3errors.h" + > + </File> + <File + RelativePath=".\include\antlr3exception.h" + > + </File> + <File + RelativePath=".\include\antlr3filestream.h" + > + </File> + <File + RelativePath=".\include\antlr3input.h" + > + </File> + <File + RelativePath=".\include\antlr3interfaces.h" + > + </File> + <File + RelativePath=".\include\antlr3intstream.h" + > + </File> + <File + RelativePath=".\include\antlr3lexer.h" + > + </File> + <File + RelativePath=".\include\antlr3memory.h" + > + </File> + <File + RelativePath=".\include\antlr3parser.h" + > + </File> + <File + RelativePath=".\include\antlr3parsetree.h" + > + </File> + <File + RelativePath=".\include\antlr3recognizersharedstate.h" + > + </File> + <File + RelativePath=".\include\antlr3rewritestreams.h" + > + </File> + <File + RelativePath=".\include\antlr3string.h" + > + </File> + <File + RelativePath=".\include\antlr3stringstream.h" + > + </File> + <File + RelativePath=".\include\antlr3tokenstream.h" + > + </File> + <File + RelativePath=".\include\antlr3treeparser.h" + > + </File> + </Filter> + <Filter + Name="Templates" + Filter=".stg" + > + <File + RelativePath="..\..\src\org\antlr\codegen\templates\C\AST.stg" + > + </File> + <File + RelativePath="..\..\src\org\antlr\codegen\templates\C\ASTDbg.stg" + > + </File> + <File + RelativePath="..\..\src\org\antlr\codegen\templates\C\ASTParser.stg" + > + </File> + <File + RelativePath="..\..\src\org\antlr\codegen\templates\C\ASTTreeParser.stg" + > + </File> + <File + RelativePath="..\..\src\org\antlr\codegen\templates\C\C.stg" + > + </File> + <File + RelativePath="..\..\src\org\antlr\codegen\templates\C\Dbg.stg" + > + </File> + <Filter + Name="Interfaces" + Filter="*.sti" + > + <File + RelativePath="..\..\src\org\antlr\codegen\templates\ANTLRCore.sti" + > + </File> + </Filter> + </Filter> + <Filter + Name="Java" + Filter="*.java" + > + <File + RelativePath="..\..\src\org\antlr\codegen\CTarget.java" + > + </File> + </Filter> + <Filter + Name="Doxygen" + > + <File + RelativePath=".\doxygen\atsections.dox" + > + </File> + <File + RelativePath=".\doxygen\build.dox" + > + </File> + <File + RelativePath=".\doxygen\buildrec.dox" + > + </File> + <File + RelativePath=".\doxygen\changes31.dox" + > + </File> + <File + RelativePath=".\doxygen\doxygengroups.dox" + > + </File> + <File + RelativePath=".\doxygen\generate.dox" + > + </File> + <File + RelativePath=".\doxygen\interop.dox" + > + </File> + <File + RelativePath=".\doxygen\mainpage.dox" + > + </File> + <File + RelativePath=".\doxygen\runtime.dox" + > + </File> + <File + RelativePath=".\doxygen\using.dox" + > + </File> + </Filter> + </Files> + <Globals> + <Global + Name="DevPartner_IsInstrumented" + Value="0" + /> + </Globals> +</VisualStudioProject> diff --git a/antlr-3.1.3/runtime/C/INSTALL b/antlr-3.1.3/runtime/C/INSTALL new file mode 100644 index 0000000..d3c5b40 --- /dev/null +++ b/antlr-3.1.3/runtime/C/INSTALL @@ -0,0 +1,237 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006, 2007 Free Software Foundation, Inc. + +This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + +Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. + + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + + 6. Often, you can also type `make uninstall' to remove the installed + files again. + +Compilers and Options +===================== + +Some systems require unusual options for compilation or linking that the +`configure' script does not know about. Run `./configure --help' for +details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + +You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + +Installation Names +================== + +By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + +Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + +There may be some features `configure' cannot figure out automatically, +but needs to determine by the type of machine the package will run on. +Usually, assuming the package is built to be run on the _same_ +architectures, `configure' can figure that out, but if it prints a +message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + +If you want to set default values for `configure' scripts to share, you +can create a site shell script called `config.site' that gives default +values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + +Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf bug. Until the bug is fixed you can use this workaround: + + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + +`configure' recognizes the following options to control how it operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/antlr-3.1.3/runtime/C/Makefile.am b/antlr-3.1.3/runtime/C/Makefile.am new file mode 100644 index 0000000..934c18c --- /dev/null +++ b/antlr-3.1.3/runtime/C/Makefile.am @@ -0,0 +1,81 @@ +AUTOMAKE_OPTIONS = gnu +AM_LIBTOOLFLAGS = +## --silent + +lib_LTLIBRARIES = libantlr3c.la + +LIBSOURCES = src/antlr3baserecognizer.c \ + src/antlr3basetree.c \ + src/antlr3basetreeadaptor.c \ + src/antlr3bitset.c \ + src/antlr3collections.c \ + src/antlr3commontoken.c \ + src/antlr3commontree.c \ + src/antlr3commontreeadaptor.c \ + src/antlr3commontreenodestream.c \ + src/antlr3convertutf.c \ + src/antlr3cyclicdfa.c \ + src/antlr3debughandlers.c \ + src/antlr3encodings.c \ + src/antlr3exception.c \ + src/antlr3filestream.c \ + src/antlr3inputstream.c \ + src/antlr3intstream.c \ + src/antlr3lexer.c \ + src/antlr3parser.c \ + src/antlr3rewritestreams.c \ + src/antlr3string.c \ + src/antlr3stringstream.c \ + src/antlr3tokenstream.c \ + src/antlr3treeparser.c \ + src/antlr3ucs2inputstream.c + +libantlr3c_la_SOURCES = $(LIBSOURCES) + +include_HEADERS = include/antlr3.h \ + include/antlr3baserecognizer.h \ + include/antlr3basetree.h \ + include/antlr3basetreeadaptor.h \ + include/antlr3bitset.h \ + include/antlr3collections.h \ + include/antlr3commontoken.h \ + include/antlr3commontree.h \ + include/antlr3commontreeadaptor.h \ + include/antlr3commontreenodestream.h \ + include/antlr3convertutf.h \ + include/antlr3cyclicdfa.h \ + include/antlr3debugeventlistener.h \ + include/antlr3defs.h \ + include/antlr3encodings.h \ + include/antlr3errors.h \ + include/antlr3exception.h \ + include/antlr3filestream.h \ + include/antlr3input.h \ + include/antlr3interfaces.h \ + include/antlr3intstream.h \ + include/antlr3lexer.h \ + include/antlr3memory.h \ + include/antlr3parser.h \ + include/antlr3parsetree.h \ + include/antlr3recognizersharedstate.h \ + include/antlr3rewritestreams.h \ + include/antlr3string.h \ + include/antlr3stringstream.h \ + include/antlr3tokenstream.h \ + include/antlr3treeparser.h \ + antlr3config.h + +libantlr3c_la_LDFLAGS = -avoid-version + +INCLUDES = -Iinclude -Iinclude + +EXTRA_DIST = \ + vsrulefiles/antlr3lexerandparser.rules \ + vsrulefiles/antlr3lexer.rules \ + vsrulefiles/antlr3parser.rules \ + vsrulefiles/antlr3treeparser.rules \ + C.sln C.vcproj C.vcproj.vspscc \ + C.vssscc + +export OBJECT_MODE + diff --git a/antlr-3.1.3/runtime/C/NEWS b/antlr-3.1.3/runtime/C/NEWS new file mode 100644 index 0000000..aea82ff --- /dev/null +++ b/antlr-3.1.3/runtime/C/NEWS @@ -0,0 +1,2 @@ +See www.antlr.org and the associated email forums for release dates and +other announcements. diff --git a/antlr-3.1.3/runtime/C/README b/antlr-3.1.3/runtime/C/README new file mode 100644 index 0000000..a1c0555 --- /dev/null +++ b/antlr-3.1.3/runtime/C/README @@ -0,0 +1,1924 @@ +ANTLR v3.0.1 C Runtime +ANTLR 3.0.1 +January 1, 2008 + +At the moment, the use of the C runtime engine for the parser is not generally +for the inexperienced C programmer. However this is mainly because of the lack +of documentation on use, which will be corrected shortly. The C runtime +code itself is however well documented with doxygen style comments and a +reasonably experienced C programmer should be able to piece it together. You +can visit the documentation at: http://www.antlr.org/api/C/index.html + +The general make up is that everything is implemented as a pseudo class/object +initialized with pointers to its 'member' functions and data. All objects are +(usually) created by factories, which auto manage the memory allocation and +release and generally make life easier. If you remember this rule, everything +should fall in to place. + +Jim Idle - Portland Oregon, Jan 2008 +jimi idle ws + +=============================================================================== + +Terence Parr, parrt at cs usfca edu +ANTLR project lead and supreme dictator for life +University of San Francisco + +INTRODUCTION + +Welcome to ANTLR v3! I've been working on this for nearly 4 years and it's +almost ready! I plan no feature additions between this beta and first +3.0 release. I have lots of features to add later, but this will be +the first set. Ultimately, I need to rewrite ANTLR v3 in itself (it's +written in 2.7.7 at the moment and also needs StringTemplate 3.0 or +later). + +You should use v3 in conjunction with ANTLRWorks: + + http://www.antlr.org/works/index.html + +WARNING: We have bits of documentation started, but nothing super-complete +yet. The book will be printed May 2007: + +http://www.pragmaticprogrammer.com/titles/tpantlr/index.html + +but we should have a beta PDF available on that page in Feb 2007. + +You also have the examples plus the source to guide you. + +See the new wiki FAQ: + + http://www.antlr.org/wiki/display/ANTLR3/ANTLR+v3+FAQ + +and general doc root: + + http://www.antlr.org/wiki/display/ANTLR3/ANTLR+3+Wiki+Home + +Please help add/update FAQ entries. + +I have made very little effort at this point to deal well with +erroneous input (e.g., bad syntax might make ANTLR crash). I will clean +this up after I've rewritten v3 in v3. + +Per the license in LICENSE.txt, this software is not guaranteed to +work and might even destroy all life on this planet: + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +EXAMPLES + +ANTLR v3 sample grammars: + + http://www.antlr.org/download/examples-v3.tar.gz + +contains the following examples: LL-star, cminus, dynamic-scope, +fuzzy, hoistedPredicates, island-grammar, java, python, scopes, +simplecTreeParser, treeparser, tweak, xmlLexer. + +Also check out Mantra Programming Language for a prototype (work in +progress) using v3: + + http://www.linguamantra.org/ + +---------------------------------------------------------------------- + +What is ANTLR? + +ANTLR stands for (AN)other (T)ool for (L)anguage (R)ecognition and was +originally known as PCCTS. ANTLR is a language tool that provides a +framework for constructing recognizers, compilers, and translators +from grammatical descriptions containing actions. Target language list: + +http://www.antlr.org/wiki/display/ANTLR3/Code+Generation+Targets + +---------------------------------------------------------------------- + +How is ANTLR v3 different than ANTLR v2? + +See migration guide: + http://www.antlr.org/wiki/display/ANTLR3/Migrating+from+ANTLR+2+to+ANTLR+3 + +ANTLR v3 has a far superior parsing algorithm called LL(*) that +handles many more grammars than v2 does. In practice, it means you +can throw almost any grammar at ANTLR that is non-left-recursive and +unambiguous (same input can be matched by multiple rules); the cost is +perhaps a tiny bit of backtracking, but with a DFA not a full parser. +You can manually set the max lookahead k as an option for any decision +though. The LL(*) algorithm ramps up to use more lookahead when it +needs to and is much more efficient than normal LL backtracking. There +is support for syntactic predicate (full LL backtracking) when LL(*) +fails. + +Lexers are much easier due to the LL(*) algorithm as well. Previously +these two lexer rules would cause trouble because ANTLR couldn't +distinguish between them with finite lookahead to see the decimal +point: + +INT : ('0'..'9')+ ; +FLOAT : INT '.' INT ; + +The syntax is almost identical for features in common, but you should +note that labels are always '=' not ':'. So do id=ID not id:ID. + +You can do combined lexer/parser grammars again (ala PCCTS) both lexer +and parser rules are defined in the same file. See the examples. +Really nice. You can reference strings and characters in the grammar +and ANTLR will generate the lexer for you. + +The attribute structure has been enhanced. Rules may have multiple +return values, for example. Further, there are dynamically scoped +attributes whereby a rule may define a value usable by any rule it +invokes directly or indirectly w/o having to pass a parameter all the +way down. + +ANTLR v3 tree construction is far superior--it provides tree rewrite +rules where the right hand side is simply the tree grammar fragment +describing the tree you want to build: + +formalArgs + : typename declarator (',' typename declarator )* + -> ^(ARG typename declarator)+ + ; + +That builds tree sequences like: + +^(ARG int v1) ^(ARG int v2) + +ANTLR v3 also incorporates StringTemplate: + + http://www.stringtemplate.org + +just like AST support. It is useful for generating output. For +example this rule creates a template called 'import' for each import +definition found in the input stream: + +grammar Java; +options { + output=template; +} +... +importDefinition + : 'import' identifierStar SEMI + -> import(name={$identifierStar.st}, + begin={$identifierStar.start}, + end={$identifierStar.stop}) + ; + +The attributes are set via assignments in the argument list. The +arguments are actions with arbitrary expressions in the target +language. The .st label property is the result template from a rule +reference. There is a nice shorthand in actions too: + + %foo(a={},b={},...) ctor + %({name-expr})(a={},...) indirect template ctor reference + %{string-expr} anonymous template from string expr + %{expr}.y = z; template attribute y of StringTemplate-typed expr to z + %x.y = z; set template attribute y of x (always set never get attr) + to z [languages like python without ';' must still use the + ';' which the code generator is free to remove during code gen] + Same as '(x).setAttribute("y", z);' + +For ANTLR v3 I decided to make the most common tasks easy by default +rather. This means that some of the basic objects are heavier weight +than some speed demons would like, but they are free to pare it down +leaving most programmers the luxury of having it "just work." For +example, to read in some input, tweak it, and write it back out +preserving whitespace, is easy in v3. + +The ANTLR source code is much prettier. You'll also note that the +run-time classes are conveniently encapsulated in the +org.antlr.runtime package. + +---------------------------------------------------------------------- + +How do I install this damn thing? + +Just untar and you'll get: + +antlr-3.0b6/README.txt (this file) +antlr-3.0b6/LICENSE.txt +antlr-3.0b6/src/org/antlr/... +antlr-3.0b6/lib/stringtemplate-3.0.jar (3.0b6 needs 3.0) +antlr-3.0b6/lib/antlr-2.7.7.jar +antlr-3.0b6/lib/antlr-3.0b6.jar + +Then you need to add all the jars in lib to your CLASSPATH. + +---------------------------------------------------------------------- + +How do I use ANTLR v3? + +[I am assuming you are only using the command-line (and not the +ANTLRWorks GUI)]. + +Running ANTLR with no parameters shows you: + +ANTLR Parser Generator Early Access Version 3.0b6 (Jan 31, 2007) 1989-2007 +usage: java org.antlr.Tool [args] file.g [file2.g file3.g ...] + -o outputDir specify output directory where all output is generated + -lib dir specify location of token files + -report print out a report about the grammar(s) processed + -print print out the grammar without actions + -debug generate a parser that emits debugging events + -profile generate a parser that computes profiling information + -nfa generate an NFA for each rule + -dfa generate a DFA for each decision point + -message-format name specify output style for messages + -X display extended argument list + +For example, consider how to make the LL-star example from the examples +tarball you can get at http://www.antlr.org/download/examples-v3.tar.gz + +$ cd examples/java/LL-star +$ java org.antlr.Tool simplec.g +$ jikes *.java + +For input: + +char c; +int x; +void bar(int x); +int foo(int y, char d) { + int i; + for (i=0; i<3; i=i+1) { + x=3; + y=5; + } +} + +you will see output as follows: + +$ java Main input +bar is a declaration +foo is a definition + +What if I want to test my parser without generating code? Easy. Just +run ANTLR in interpreter mode. It can't execute your actions, but it +can create a parse tree from your input to show you how it would be +matched. Use the org.antlr.tool.Interp main class. In the following, +I interpret simplec.g on t.c, which contains "int x;" + +$ java org.antlr.tool.Interp simplec.g WS program t.c +( <grammar SimpleC> + ( program + ( declaration + ( variable + ( type [@0,0:2='int',<14>,1:0] ) + ( declarator [@2,4:4='x',<2>,1:4] ) + [@3,5:5=';',<5>,1:5] + ) + ) + ) +) + +where I have formatted the output to make it more readable. I have +told it to ignore all WS tokens. + +---------------------------------------------------------------------- + +How do I rebuild ANTLR v3? + +Make sure the following two jars are in your CLASSPATH + +antlr-3.0b6/lib/stringtemplate-3.0.jar +antlr-3.0b6/lib/antlr-2.7.7.jar +junit.jar [if you want to build the test directories] + +then jump into antlr-3.0b6/src directory and then type: + +$ javac -d . org/antlr/Tool.java org/antlr/*/*.java org/antlr/*/*/*.java + +Takes 9 seconds on my 1Ghz laptop or 4 seconds with jikes. Later I'll +have a real build mechanism, though I must admit the one-liner appeals +to me. I use Intellij so I never type anything actually to build. + +There is also an ANT build.xml file, but I know nothing of ANT; contributed +by others (I'm opposed to any tool with an XML interface for Humans). + +----------------------------------------------------------------------- +C# Target Notes + +1. Auto-generated lexers do not inherit parent parser's @namespace + {...} value. Use @lexer::namespace{...}. + +----------------------------------------------------------------------- + +CHANGES + +March 17, 2007 + +* Jonathan DeKlotz updated C# templates to be 3.0b6 current + +March 14, 2007 + +* Manually-specified (...)=> force backtracking eval of that predicate. + backtracking=true mode does not however. Added unit test. + +March 14, 2007 + +* Fixed bug in lexer where ~T didn't compute the set from rule T. + +* Added -Xnoinlinedfa make all DFA with tables; no inline prediction with IFs + +* Fixed http://www.antlr.org:8888/browse/ANTLR-80. + Sem pred states didn't define lookahead vars. + +* Fixed http://www.antlr.org:8888/browse/ANTLR-91. + When forcing some acyclic DFA to be state tables, they broke. + Forcing all DFA to be state tables should give same results. + +March 12, 2007 + +* setTokenSource in CommonTokenStream didn't clear tokens list. + setCharStream calls reset in Lexer. + +* Altered -depend. No longer printing grammar files for multiple input + files with -depend. Doesn't show T__.g temp file anymore. Added + TLexer.tokens. Added .h files if defined. + +February 11, 2007 + +* Added -depend command-line option that, instead of processing files, + it shows you what files the input grammar(s) depend on and what files + they generate. For combined grammar T.g: + + $ java org.antlr.Tool -depend T.g + + You get: + + TParser.java : T.g + T.tokens : T.g + T__.g : T.g + + Now, assuming U.g is a tree grammar ref'd T's tokens: + + $ java org.antlr.Tool -depend T.g U.g + + TParser.java : T.g + T.tokens : T.g + T__.g : T.g + U.g: T.tokens + U.java : U.g + U.tokens : U.g + + Handles spaces by escaping them. Pays attention to -o, -fo and -lib. + Dir 'x y' is a valid dir in current dir. + + $ java org.antlr.Tool -depend -lib /usr/local/lib -o 'x y' T.g U.g + x\ y/TParser.java : T.g + x\ y/T.tokens : T.g + x\ y/T__.g : T.g + U.g: /usr/local/lib/T.tokens + x\ y/U.java : U.g + x\ y/U.tokens : U.g + + You have API access via org.antlr.tool.BuildDependencyGenerator class: + getGeneratedFileList(), getDependenciesFileList(). You can also access + the output template: getDependencies(). The file + org/antlr/tool/templates/depend.stg contains the template. You can + modify as you want. File objects go in so you can play with path etc... + +February 10, 2007 + +* no more .gl files generated. All .g all the time. + +* changed @finally to be @after and added a finally clause to the + exception stuff. I also removed the superfluous "exception" + keyword. Here's what the new syntax looks like: + + a + @after { System.out.println("ick"); } + : 'a' + ; + catch[RecognitionException e] { System.out.println("foo"); } + catch[IOException e] { System.out.println("io"); } + finally { System.out.println("foobar"); } + + @after executes after bookkeeping to set $rule.stop, $rule.tree but + before scopes pop and any memoization happens. Dynamic scopes and + memoization are still in generated finally block because they must + exec even if error in rule. The @after action and tree setting + stuff can technically be skipped upon syntax error in rule. [Later + we might add something to finally to stick an ERROR token in the + tree and set the return value.] Sequence goes: set $stop, $tree (if + any), @after (if any), pop scopes (if any), memoize (if needed), + grammar finally clause. Last 3 are in generated code's finally + clause. + +3.0b6 - January 31, 2007 + +January 30, 2007 + +* Fixed bug in IntervalSet.and: it returned the same empty set all the time + rather than new empty set. Code altered the same empty set. + +* Made analysis terminate faster upon a decision that takes too long; + it seemed to keep doing work for a while. Refactored some names + and updated comments. Also made it terminate when it realizes it's + non-LL(*) due to recursion. just added terminate conditions to loop + in convert(). + +* Sometimes fatal non-LL(*) messages didn't appear; instead you got + "antlr couldn't analyze", which is actually untrue. I had the + order of some prints wrong in the DecisionProbe. + +* The code generator incorrectly detected when it could use a fixed, + acyclic inline DFA (i.e., using an IF). Upon non-LL(*) decisions + with predicates, analysis made cyclic DFA. But this stops + the computation detecting whether they are cyclic. I just added + a protection in front of the acyclic DFA generator to avoid if + non-LL(*). Updated comments. + +January 23, 2007 + +* Made tree node streams use adaptor to create navigation nodes. + Thanks to Emond Papegaaij. + +January 22, 2007 + +* Added lexer rule properties: start, stop + +January 1, 2007 + +* analysis failsafe is back on; if a decision takes too long, it bails out + and uses k=1 + +January 1, 2007 + +* += labels for rules only work for output option; previously elements + of list were the return value structs, but are now either the tree or + StringTemplate return value. You can label different rules now + x+=a x+=b. + +December 30, 2006 + +* Allow \" to work correctly in "..." template. + +December 28, 2006 + +* errors that are now warnings: missing AST label type in trees. + Also "no start rule detected" is warning. + +* tree grammars also can do rewrite=true for output=template. + Only works for alts with single node or tree as alt elements. + If you are going to use $text in a tree grammar or do rewrite=true + for templates, you must use in your main: + + nodes.setTokenStream(tokens); + +* You get a warning for tree grammars that do rewrite=true and + output=template and have -> for alts that are not simple nodes + or simple trees. new unit tests in TestRewriteTemplates at end. + +December 27, 2006 + +* Error message appears when you use -> in tree grammar with + output=template and rewrite=true for alt that is not simple + node or tree ref. + +* no more $stop attribute for tree parsers; meaningless/useless. + Removed from TreeRuleReturnScope also. + +* rule text attribute in tree parser must pull from token buffer. + Makes no sense otherwise. added getTokenStream to TreeNodeStream + so rule $text attr works. CommonTreeNodeStream etc... now let + you set the token stream so you can access later from tree parser. + $text is not well-defined for rules like + + slist : stat+ ; + + because stat is not a single node nor rooted with a single node. + $slist.text will get only first stat. I need to add a warning about + this... + +* Fixed http://www.antlr.org:8888/browse/ANTLR-76 for Java. + Enhanced TokenRewriteStream so it accepts any object; converts + to string at last second. Allows you to rewrite with StringTemplate + templates now :) + +* added rewrite option that makes -> template rewrites do replace ops for + TokenRewriteStream input stream. In output=template and rewrite=true mode + same as before 'cept that the parser does + + ((TokenRewriteStream)input).replace( + ((Token)retval.start).getTokenIndex(), + input.LT(-1).getTokenIndex(), + retval.st); + + after each rewrite so that the input stream is altered. Later refs to + $text will have rewrites. Here's a sample test program for grammar Rew. + + FileReader groupFileR = new FileReader("Rew.stg"); + StringTemplateGroup templates = new StringTemplateGroup(groupFileR); + ANTLRInputStream input = new ANTLRInputStream(System.in); + RewLexer lexer = new RewLexer(input); + TokenRewriteStream tokens = new TokenRewriteStream(lexer); + RewParser parser = new RewParser(tokens); + parser.setTemplateLib(templates); + parser.program(); + System.out.println(tokens.toString()); + groupFileR.close(); + +December 26, 2006 + +* BaseTree.dupTree didn't dup recursively. + +December 24, 2006 + +* Cleaned up some comments and removed field treeNode + from MismatchedTreeNodeException class. It is "node" in + RecognitionException. + +* Changed type from Object to BitSet for expecting fields in + MismatchedSetException and MismatchedNotSetException + +* Cleaned up error printing in lexers and the messages that it creates. + +* Added this to TreeAdaptor: + /** Return the token object from which this node was created. + * Currently used only for printing an error message. + * The error display routine in BaseRecognizer needs to + * display where the input the error occurred. If your + * tree of limitation does not store information that can + * lead you to the token, you can create a token filled with + * the appropriate information and pass that back. See + * BaseRecognizer.getErrorMessage(). + */ + public Token getToken(Object t); + +December 23, 2006 + +* made BaseRecognizer.displayRecognitionError nonstatic so people can + override it. Not sure why it was static before. + +* Removed state/decision message that comes out of no + viable alternative exceptions, as that was too much. + removed the decision number from the early exit exception + also. During development, you can simply override + displayRecognitionError from BaseRecognizer to add the stuff + back in if you want. + +* made output go to an output method you can override: emitErrorMessage() + +* general cleanup of the error emitting code in BaseRecognizer. Lots + more stuff you can override: getErrorHeader, getTokenErrorDisplay, + emitErrorMessage, getErrorMessage. + +December 22, 2006 + +* Altered Tree.Parser.matchAny() so that it skips entire trees if + node has children otherwise skips one node. Now this works to + skip entire body of function if single-rooted subtree: + ^(FUNC name=ID arg=ID .) + +* Added "reverse index" from node to stream index. Override + fillReverseIndex() in CommonTreeNodeStream if you want to change. + Use getNodeIndex(node) to find stream index for a specific tree node. + See getNodeIndex(), reverseIndex(Set tokenTypes), + reverseIndex(int tokenType), fillReverseIndex(). The indexing + costs time and memory to fill, but pulling stuff out will be lots + faster as it can jump from a node ptr straight to a stream index. + +* Added TreeNodeStream.get(index) to make it easier for interpreters to + jump around in tree node stream. + +* New CommonTreeNodeStream buffers all nodes in stream for fast jumping + around. It now has push/pop methods to invoke other locations in + the stream for building interpreters. + +* Moved CommonTreeNodeStream to UnBufferedTreeNodeStream and removed + Iterator implementation. moved toNodesOnlyString() to TestTreeNodeStream + +* [BREAKS ANY TREE IMPLEMENTATION] + made CommonTreeNodeStream work with any tree node type. TreeAdaptor + now implements isNil so must add; trivial, but does break back + compatibility. + +December 17, 2006 + +* Added traceIn/Out methods to recognizers so that you can override them; + previously they were in-line print statements. The message has also + been slightly improved. + +* Factored BuildParseTree into debug package; cleaned stuff up. Fixed + unit tests. + +December 15, 2006 + +* [BREAKS ANY TREE IMPLEMENTATION] + org.antlr.runtime.tree.Tree; needed to add get/set for token start/stop + index so CommonTreeAdaptor can assume Tree interface not CommonTree + implementation. Otherwise, no way to create your own nodes that satisfy + Tree because CommonTreeAdaptor was doing + + public int getTokenStartIndex(Object t) { + return ((CommonTree)t).startIndex; + } + + Added to Tree: + + /** What is the smallest token index (indexing from 0) for this node + * and its children? + */ + int getTokenStartIndex(); + + void setTokenStartIndex(int index); + + /** What is the largest token index (indexing from 0) for this node + * and its children? + */ + int getTokenStopIndex(); + + void setTokenStopIndex(int index); + +December 13, 2006 + +* Added org.antlr.runtime.tree.DOTTreeGenerator so you can generate DOT + diagrams easily from trees. + + CharStream input = new ANTLRInputStream(System.in); + TLexer lex = new TLexer(input); + CommonTokenStream tokens = new CommonTokenStream(lex); + TParser parser = new TParser(tokens); + TParser.e_return r = parser.e(); + Tree t = (Tree)r.tree; + System.out.println(t.toStringTree()); + DOTTreeGenerator gen = new DOTTreeGenerator(); + StringTemplate st = gen.toDOT(t); + System.out.println(st); + +* Changed the way mark()/rewind() work in CommonTreeNode stream to mirror + more flexible solution in ANTLRStringStream. Forgot to set lastMarker + anyway. Now you can rewind to non-most-recent marker. + +December 12, 2006 + +* Temp lexer now end in .gl (T__.gl, for example) + +* TreeParser suffix no longer generated for tree grammars + +* Defined reset for lexer, parser, tree parser; rewinds the input stream also + +December 10, 2006 + +* Made Grammar.abortNFAToDFAConversion() abort in middle of a DFA. + +December 9, 2006 + +* fixed bug in OrderedHashSet.add(). It didn't track elements correctly. + +December 6, 2006 + +* updated build.xml for future Ant compatibility, thanks to Matt Benson. + +* various tests in TestRewriteTemplate and TestSyntacticPredicateEvaluation + were using the old 'channel' vs. new '$channel' notation. + TestInterpretedParsing didn't pick up an earlier change to CommonToken. + Reported by Matt Benson. + +* fixed platform dependent test failures in TestTemplates, supplied by Matt + Benson. + +November 29, 2006 + +* optimized semantic predicate evaluation so that p||!p yields true. + +November 22, 2006 + +* fixed bug that prevented var = $rule.some_retval from working in anything + but the first alternative of a rule or subrule. + +* attribute names containing digits were not allowed, this is now fixed, + allowing attributes like 'name1' but not '1name1'. + +November 19, 2006 + +* Removed LeftRecursionMessage and apparatus because it seems that I check + for left recursion upfront before analysis and everything gets specified as + recursion cycles at this point. + +November 16, 2006 + +* TokenRewriteStream.replace was not passing programName to next method. + +November 15, 2006 + +* updated DOT files for DFA generation to make smaller circles. + +* made epsilon edges italics in the NFA diagrams. + +3.0b5 - November 15, 2006 + +The biggest thing is that your grammar file names must match the grammar name +inside (your generated class names will also be different) and we use +$channel=HIDDEN now instead of channel=99 inside lexer actions. +Should be compatible other than that. Please look at complete list of +changes. + +November 14, 2006 + +* Force token index to be -1 for CommonIndex in case not set. + +November 11, 2006 + +* getUniqueID for TreeAdaptor now uses identityHashCode instead of hashCode. + +November 10, 2006 + +* No grammar nondeterminism warning now when wildcard '.' is final alt. + Examples: + + a : A | B | . ; + + A : 'a' + | . + ; + + SL_COMMENT + : '//' (options {greedy=false;} : .)* '\r'? '\n' + ; + + SL_COMMENT2 + : '//' (options {greedy=false;} : 'x'|.)* '\r'? '\n' + ; + + +November 8, 2006 + +* Syntactic predicates did not get hoisting properly upon non-LL(*) decision. Other hoisting issues fixed. Cleaned up code. + +* Removed failsafe that check to see if I'm spending too much time on a single DFA; I don't think we need it anymore. + +November 3, 2006 + +* $text, $line, etc... were not working in assignments. Fixed and added + test case. + +* $label.text translated to label.getText in lexer even if label was on a char + +November 2, 2006 + +* Added error if you don't specify what the AST type is; actions in tree + grammar won't work without it. + + $ cat x.g + tree grammar x; + a : ID {String s = $ID.text;} ; + + ANTLR Parser Generator Early Access Version 3.0b5 (??, 2006) 1989-2006 + error: x.g:0:0: (152) tree grammar x has no ASTLabelType option + +November 1, 2006 + +* $text, $line, etc... were not working properly within lexer rule. + +October 32, 2006 + +* Finally actions now execute before dynamic scopes are popped it in the + rule. Previously was not possible to access the rules scoped variables + in a finally action. + +October 29, 2006 + +* Altered ActionTranslator to emit errors on setting read-only attributes + such as $start, $stop, $text in a rule. Also forbid setting any attributes + in rules/tokens referenced by a label or name. + Setting dynamic scopes's attributes and your own parameter attributes + is legal. + +October 27, 2006 + +* Altered how ANTLR figures out what decision is associated with which + block of grammar. Makes ANTLRWorks correctly find DFA for a block. + +October 26, 2006 + +* Fixed bug where EOT transitions led to no NFA configs in a DFA state, + yielding an error in DFA table generation. + +* renamed action.g to ActionTranslator.g + the ActionTranslator class is now called ActionTranslatorLexer, as ANTLR + generates this classname now. Fixed rest of codebase accordingly. + +* added rules recognizing setting of scopes' attributes to ActionTranslator.g + the Objective C target needed access to the right-hand side of the assignment + in order to generate correct code + +* changed ANTLRCore.sti to reflect the new mandatory templates to support the above + namely: scopeSetAttributeRef, returnSetAttributeRef and the ruleSetPropertyRef_* + templates, with the exception of ruleSetPropertyRef_text. we cannot set this attribute + +October 19, 2006 + +* Fixed 2 bugs in DFA conversion that caused exceptions. + altered functionality of getMinElement so it ignores elements<0. + +October 18, 2006 + +* moved resetStateNumbersToBeContiguous() to after issuing of warnings; + an internal error in that routine should make more sense as issues + with decision will appear first. + +* fixed cut/paste bug I introduced when fixed EOF in min/max + bug. Prevented C grammar from working briefly. + +October 17, 2006 + +* Removed a failsafe that seems to be unnecessary that ensure DFA didn't + get too big. It was resulting in some failures in code generation that + led me on quite a strange debugging trip. + +October 16, 2006 + +* Use channel=HIDDEN not channel=99 to put tokens on hidden channel. + +October 12, 2006 + +* ANTLR now has a customizable message format for errors and warnings, + to make it easier to fulfill requirements by IDEs and such. + The format to be used can be specified via the '-message-format name' + command line switch. The default for name is 'antlr', also available + at the moment is 'gnu'. This is done via StringTemplate, for details + on the requirements look in org/antlr/tool/templates/messages/formats/ + +* line numbers for lexers in combined grammars are now reported correctly. + +September 29, 2006 + +* ANTLRReaderStream improperly checked for end of input. + +September 28, 2006 + +* For ANTLRStringStream, LA(-1) was off by one...gave you LA(-2). + +3.0b4 - August 24, 2006 + +* error when no rules in grammar. doesn't crash now. + +* Token is now an interface. + +* remove dependence on non runtime classes in runtime package. + +* filename and grammar name must be same Foo in Foo.g. Generates FooParser, + FooLexer, ... Combined grammar Foo generates Foo$Lexer.g which generates + FooLexer.java. tree grammars generate FooTreeParser.java + +August 24, 2006 + +* added C# target to lib, codegen, templates + +August 11, 2006 + +* added tree arg to navigation methods in treeadaptor + +August 07, 2006 + +* fixed bug related to (a|)+ on end of lexer rules. crashed instead + of warning. + +* added warning that interpreter doesn't do synpreds yet + +* allow different source of classloader: +ClassLoader cl = Thread.currentThread().getContextClassLoader(); +if ( cl==null ) { + cl = this.getClass().getClassLoader(); +} + + +July 26, 2006 + +* compressed DFA edge tables significantly. All edge tables are + unique. The transition table can reuse arrays. Look like this now: + + public static readonly DFA30_transition0 = + new short[] { 46, 46, -1, 46, 46, -1, -1, -1, -1, -1, -1, -1,...}; + public static readonly DFA30_transition1 = + new short[] { 21 }; + public static readonly short[][] DFA30_transition = { + DFA30_transition0, + DFA30_transition0, + DFA30_transition1, + ... + }; + +* If you defined both a label like EQ and '=', sometimes the '=' was + used instead of the EQ label. + +* made headerFile template have same arg list as outputFile for consistency + +* outputFile, lexer, genericParser, parser, treeParser templates + reference cyclicDFAs attribute which was no longer used after I + started the new table-based DFA. I made cyclicDFADescriptors + argument to outputFile and headerFile (only). I think this is + correct as only OO languages will want the DFA in the recognizer. + At the top level, C and friends can use it. Changed name to use + cyclicDFAs again as it's a better name probably. Removed parameter + from the lexer, ... For example, my parser template says this now: + + <cyclicDFAs:cyclicDFA()> <! dump tables for all DFA !> + +* made all token ref token types go thru code gen's + getTokenTypeAsTargetLabel() + +* no more computing DFA transition tables for acyclic DFA. + +July 25, 2006 + +* fixed a place where I was adding syn predicates into rewrite stuff. + +* turned off invalid token index warning in AW support; had a problem. + +* bad location event generated with -debug for synpreds in autobacktrack mode. + +July 24, 2006 + +* changed runtime.DFA so that it treats all chars and token types as + char (unsigned 16 bit int). -1 becomes '\uFFFF' then or 65535. + +* changed MAX_STATE_TRANSITIONS_FOR_TABLE to be 65534 by default + now. This means that all states can use a table to do transitions. + +* was not making synpreds on (C)* type loops with backtrack=true + +* was copying tree stuff and actions into synpreds with backtrack=true + +* was making synpreds on even single alt rules / blocks with backtrack=true + +3.0b3 - July 21, 2006 + +* ANTLR fails to analyze complex decisions much less frequently. It + turns out that the set of decisions for which ANTLR fails (times + out) is the same set (so far) of non-LL(*) decisions. Morever, I'm + able to detect this situation quickly and report rather than timing + out. Errors look like: + + java.g:468:23: [fatal] rule concreteDimensions has non-LL(*) + decision due to recursive rule invocations in alts 1,2. Resolve + by left-factoring or using syntactic predicates with fixed k + lookahead or use backtrack=true option. + + This message only appears when k=*. + +* Shortened no viable alt messages to not include decision + description: + +[compilationUnit, declaration]: line 8:8 decision=<<67:1: declaration +: ( ( fieldDeclaration )=> fieldDeclaration | ( methodDeclaration )=> +methodDeclaration | ( constructorDeclaration )=> +constructorDeclaration | ( classDeclaration )=> classDeclaration | ( +interfaceDeclaration )=> interfaceDeclaration | ( blockDeclaration )=> +blockDeclaration | emptyDeclaration );>> state 3 (decision=14) no +viable alt; token=[@1,184:187='java',<122>,8:8] + + too long and hard to read. + +July 19, 2006 + +* Code gen bug: states with no emanating edges were ignored by ST. + Now an empty list is used. + +* Added grammar parameter to recognizer templates so they can access + properties like getName(), ... + +July 10, 2006 + +* Fixed the gated pred merged state bug. Added unit test. + +* added new method to Target: getTokenTypeAsTargetLabel() + +July 7, 2006 + +* I was doing an AND instead of OR in the gated predicate stuff. + Thanks to Stephen Kou! + +* Reduce op for combining predicates was insanely slow sometimes and + didn't actually work well. Now it's fast and works. + +* There is a bug in merging of DFA stop states related to gated + preds...turned it off for now. + +3.0b2 - July 5, 2006 + +July 5, 2006 + +* token emission not properly protected in lexer filter mode. + +* EOT, EOT DFA state transition tables should be init'd to -1 (only + was doing this for compressed tables). Fixed. + +* in trace mode, exit method not shown for memoized rules + +* added -Xmaxdfaedges to allow you to increase number of edges allowed + for a single DFA state before it becomes "special" and can't fit in + a simple table. + +* Bug in tables. Short are signed so min/max tables for DFA are now + char[]. Bizarre. + +July 3, 2006 + +* Added a method to reset the tool error state for current thread. + See ErrorManager.java + +* [Got this working properly today] backtrack mode that let's you type + in any old crap and ANTLR will backtrack if it can't figure out what + you meant. No errors are reported by antlr during analysis. It + implicitly adds a syn pred in front of every production, using them + only if static grammar LL(*) analysis fails. Syn pred code is not + generated if the pred is not used in a decision. + + This is essentially a rapid prototyping mode. + +* Added backtracking report to the -report option + +* Added NFA->DFA conversion early termination report to the -report option + +* Added grammar level k and backtrack options to -report + +* Added a dozen unit tests to test autobacktrack NFA construction. + +* If you are using filter mode, you must manually use option + memoize=true now. + +July 2, 2006 + +* Added k=* option so you can set k=2, for example, on whole grammar, + but an individual decision can be LL(*). + +* memoize option for grammars, rules, blocks. Remove -nomemo cmd-line option + +* but in DOT generator for DFA; fixed. + +* runtime.DFA reported errors even when backtracking + +July 1, 2006 + +* Added -X option list to help + +* Syn preds were being hoisted into other rules, causing lots of extra + backtracking. + +June 29, 2006 + +* unnecessary files removed during build. + +* Matt Benson updated build.xml + +* Detecting use of synpreds in analysis now instead of codegen. In + this way, I can avoid analyzing decisions in synpreds for synpreds + not used in a DFA for a real rule. This is used to optimize things + for backtrack option. + +* Code gen must add _fragment or whatever to end of pred name in + template synpredRule to avoid having ANTLR know anything about + method names. + +* Added -IdbgST option to emit ST delimiters at start/stop of all + templates spit out. + +June 28, 2006 + +* Tweaked message when ANTLR cannot handle analysis. + +3.0b1 - June 27, 2006 + +June 24, 2006 + +* syn preds no longer generate little static classes; they also don't + generate a whole bunch of extra crap in the rules built to test syn + preds. Removed GrammarFragmentPointer class from runtime. + +June 23-24, 2006 + +* added output option to -report output. + +* added profiling info: + Number of rule invocations in "guessing" mode + number of rule memoization cache hits + number of rule memoization cache misses + +* made DFA DOT diagrams go left to right not top to bottom + +* I try to recursive overflow states now by resolving these states + with semantic/syntactic predicates if they exist. The DFA is then + deterministic rather than simply resolving by choosing first + nondeterministic alt. I used to generated errors: + +~/tmp $ java org.antlr.Tool -dfa t.g +ANTLR Parser Generator Early Access Version 3.0b2 (July 5, 2006) 1989-2006 +t.g:2:5: Alternative 1: after matching input such as A A A A A decision cannot predict what comes next due to recursion overflow to b from b +t.g:2:5: Alternative 2: after matching input such as A A A A A decision cannot predict what comes next due to recursion overflow to b from b + + Now, I uses predicates if available and emits no warnings. + +* made sem preds share accept states. Previously, multiple preds in a +decision forked new accepts each time for each nondet state. + +June 19, 2006 + +* Need parens around the prediction expressions in templates. + +* Referencing $ID.text in an action forced bad code gen in lexer rule ID. + +* Fixed a bug in how predicates are collected. The definition of + "last predicated alternative" was incorrect in the analysis. Further, + gated predicates incorrectly missed a case where an edge should become + true (a tautology). + +* Removed an unnecessary input.consume() reference in the runtime/DFA class. + +June 14, 2006 + +* -> ($rulelabel)? didn't generate proper code for ASTs. + +* bug in code gen (did not compile) +a : ID -> ID + | ID -> ID + ; +Problem is repeated ref to ID from left side. Juergen pointed this out. + +* use of tokenVocab with missing file yielded exception + +* (A|B)=> foo yielded an exception as (A|B) is a set not a block. Fixed. + +* Didn't set ID1= and INT1= for this alt: + | ^(ID INT+ {System.out.print(\"^(\"+$ID+\" \"+$INT+\")\");}) + +* Fixed so repeated dangling state errors only occur once like: +t.g:4:17: the decision cannot distinguish between alternative(s) 2,1 for at least one input sequence + +* tracking of rule elements was on (making list defs at start of + method) with templates instead of just with ASTs. Turned off. + +* Doesn't crash when you give it a missing file now. + +* -report: add output info: how many LL(1) decisions. + +June 13, 2006 + +* ^(ROOT ID?) Didn't work; nor did any other nullable child list such as + ^(ROOT ID* INT?). Now, I check to see if child list is nullable using + Grammar.LOOK() and, if so, I generate an "IF lookahead is DOWN" gate + around the child list so the whole thing is optional. + +* Fixed a bug in LOOK that made it not look through nullable rules. + +* Using AST suffixes or -> rewrite syntax now gives an error w/o a grammar + output option. Used to crash ;) + +* References to EOF ended up with improper -1 refs instead of EOF in output. + +* didn't warn of ambig ref to $expr in rewrite; fixed. +list + : '[' expr 'for' type ID 'in' expr ']' + -> comprehension(expr={$expr.st},type={},list={},i={}) + ; + +June 12, 2006 + +* EOF works in the parser as a token name. + +* Rule b:(A B?)*; didn't display properly in AW due to the way ANTLR + generated NFA. + +* "scope x;" in a rule for unknown x gives no error. Fixed. Added unit test. + +* Label type for refs to start/stop in tree parser and other parsers were + not used. Lots of casting. Ick. Fixed. + +* couldn't refer to $tokenlabel in isolation; but need so we can test if + something was matched. Fixed. + +* Lots of little bugs fixed in $x.y, %... translation due to new + action translator. + +* Improperly tracking block nesting level; result was that you couldn't + see $ID in action of rule "a : A+ | ID {Token t = $ID;} | C ;" + +* a : ID ID {$ID.text;} ; did not get a warning about ambiguous $ID ref. + +* No error was found on $COMMENT.text: + +COMMENT + : '/*' (options {greedy=false;} : . )* '*/' + {System.out.println("found method "+$COMMENT.text);} + ; + + $enclosinglexerrule scope does not exist. Use text or setText() here. + +June 11, 2006 + +* Single return values are initialized now to default or to your spec. + +* cleaned up input stream stuff. Added ANTLRReaderStream, ANTLRInputStream + and refactored. You can specify encodings now on ANTLRFileStream (and + ANTLRInputStream) now. + +* You can set text local var now in a lexer rule and token gets that text. + start/stop indexes are still set for the token. + +* Changed lexer slightly. Calling a nonfragment rule from a + nonfragment rule does not set the overall token. + +June 10, 2006 + +* Fixed bug where unnecessary escapes yield char==0 like '\{'. + +* Fixed analysis bug. This grammar didn't report a recursion warning: +x : y X + | y Y + ; +y : L y R + | B + ; + The DFAState.equals() method was messed up. + +* Added @synpredgate {...} action so you can tell ANTLR how to gate actions + in/out during syntactic predicate evaluation. + +* Fuzzy parsing should be more efficient. It should backtrack over a rule + and then rewind and do it again "with feeling" to exec actions. It was + actually doing it 3x not 2x. + +June 9, 2006 + +* Gutted and rebuilt the action translator for $x.y, $x::y, ... + Uses ANTLR v3 now for the first time inside v3 source. :) + ActionTranslator.java + +* Fixed a bug where referencing a return value on a rule didn't work + because later a ref to that rule's predefined properties didn't + properly force a return value struct to be built. Added unit test. + +June 6, 2006 + +* New DFA mechanisms. Cyclic DFA are implemented as state tables, + encoded via strings as java cannot handle large static arrays :( + States with edges emanating that have predicates are specially + treated. A method is generated to do these states. The DFA + simulation routine uses the "special" array to figure out if the + state is special. See March 25, 2006 entry for description: + http://www.antlr.org/blog/antlr3/codegen.tml. analysis.DFA now has + all the state tables generated for code gen. CyclicCodeGenerator.java + disappeared as it's unneeded code. :) + +* Internal general clean up of the DFA.states vs uniqueStates thing. + Fixed lookahead decisions no longer fill uniqueStates. Waste of + time. Also noted that when adding sem pred edges, I didn't check + for state reuse. Fixed. + +June 4, 2006 + +* When resolving ambig DFA states predicates, I did not add the new states + to the list of unique DFA states. No observable effect on output except + that DFA state numbers were not always contiguous for predicated decisions. + I needed this fix for new DFA tables. + +3.0ea10 - June 2, 2006 + +June 2, 2006 + +* Improved grammar stats and added syntactic pred tracking. + +June 1, 2006 + +* Due to a type mismatch, the DebugParser.recoverFromMismatchedToken() + method was not called. Debug events for mismatched token error + notification were not sent to ANTLRWorks probably + +* Added getBacktrackingLevel() for any recognizer; needed for profiler. + +* Only writes profiling data for antlr grammar analysis with -profile set + +* Major update and bug fix to (runtime) Profiler. + +May 27, 2006 + +* Added Lexer.skip() to force lexer to ignore current token and look for + another; no token is created for current rule and is not passed on to + parser (or other consumer of the lexer). + +* Parsers are much faster now. I removed use of java.util.Stack for pushing + follow sets and use a hardcoded array stack instead. Dropped from + 5900ms to 3900ms for parse+lex time parsing entire java 1.4.2 source. Lex + time alone was about 1500ms. Just looking at parse time, we get about 2x + speed improvement. :) + +May 26, 2006 + +* Fixed NFA construction so it generates NFA for (A*)* such that ANTLRWorks + can display it properly. + +May 25, 2006 + +* added abort method to Grammar so AW can terminate the conversion if it's + taking too long. + +May 24, 2006 + +* added method to get left recursive rules from grammar without doing full + grammar analysis. + +* analysis, code gen not attempted if serious error (like + left-recursion or missing rule definition) occurred while reading + the grammar in and defining symbols. + +* added amazing optimization; reduces analysis time by 90% for java + grammar; simple IF statement addition! + +3.0ea9 - May 20, 2006 + +* added global k value for grammar to limit lookahead for all decisions unless +overridden in a particular decision. + +* added failsafe so that any decision taking longer than 2 seconds to create +the DFA will fall back on k=1. Use -ImaxtimeforDFA n (in ms) to set the time. + +* added an option (turned off for now) to use multiple threads to +perform grammar analysis. Not much help on a 2-CPU computer as +garbage collection seems to peg the 2nd CPU already. :( Gotta wait for +a 4 CPU box ;) + +* switched from #src to // $ANTLR src directive. + +* CommonTokenStream.getTokens() looked past end of buffer sometimes. fixed. + +* unicode literals didn't really work in DOT output and generated code. fixed. + +* fixed the unit test rig so it compiles nicely with Java 1.5 + +* Added ant build.xml file (reads build.properties file) + +* predicates sometimes failed to compile/eval properly due to missing (...) + in IF expressions. Forced (..) + +* (...)? with only one alt were not optimized. Was: + + // t.g:4:7: ( B )? + int alt1=2; + int LA1_0 = input.LA(1); + if ( LA1_0==B ) { + alt1=1; + } + else if ( LA1_0==-1 ) { + alt1=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("4:7: ( B )?", 1, 0, input); + throw nvae; + } + +is now: + + // t.g:4:7: ( B )? + int alt1=2; + int LA1_0 = input.LA(1); + if ( LA1_0==B ) { + alt1=1; + } + + Smaller, faster and more readable. + +* Allow manual init of return values now: + functionHeader returns [int x=3*4, char (*f)()=null] : ... ; + +* Added optimization for DFAs that fixed a codegen bug with rules in lexer: + EQ : '=' ; + ASSIGNOP : '=' | '+=' ; + EQ is a subset of other rule. It did not given an error which is + correct, but generated bad code. + +* ANTLR was sending column not char position to ANTLRWorks. + +* Bug fix: location 0, 0 emitted for synpreds and empty alts. + +* debugging event handshake how sends grammar file name. Added getGrammarFileName() to recognizers. Java.stg generates it: + + public String getGrammarFileName() { return "<fileName>"; } + +* tree parsers can do arbitrary lookahead now including backtracking. I + updated CommonTreeNodeStream. + +* added events for debugging tree parsers: + + /** Input for a tree parser is an AST, but we know nothing for sure + * about a node except its type and text (obtained from the adaptor). + * This is the analog of the consumeToken method. Again, the ID is + * the hashCode usually of the node so it only works if hashCode is + * not implemented. + */ + public void consumeNode(int ID, String text, int type); + + /** The tree parser looked ahead */ + public void LT(int i, int ID, String text, int type); + + /** The tree parser has popped back up from the child list to the + * root node. + */ + public void goUp(); + + /** The tree parser has descended to the first child of a the current + * root node. + */ + public void goDown(); + +* Added DebugTreeNodeStream and DebugTreeParser classes + +* Added ctor because the debug tree node stream will need to ask quesitons about nodes and since nodes are just Object, it needs an adaptor to decode the nodes and get text/type info for the debugger. + +public CommonTreeNodeStream(TreeAdaptor adaptor, Tree tree); + +* added getter to TreeNodeStream: + public TreeAdaptor getTreeAdaptor(); + +* Implemented getText/getType in CommonTreeAdaptor. + +* Added TraceDebugEventListener that can dump all events to stdout. + +* I broke down and make Tree implement getText + +* tree rewrites now gen location debug events. + +* added AST debug events to listener; added blank listener for convenience + +* updated debug events to send begin/end backtrack events for debugging + +* with a : (b->b) ('+' b -> ^(PLUS $a b))* ; you get b[0] each time as + there is no loop in rewrite rule itself. Need to know context that + the -> is inside the rule and hence b means last value of b not all + values. + +* Bug in TokenRewriteStream; ops at indexes < start index blocked proper op. + +* Actions in ST rewrites "-> ({$op})()" were not translated + +* Added new action name: + +@rulecatch { +catch (RecognitionException re) { + reportError(re); + recover(input,re); +} +catch (Throwable t) { + System.err.println(t); +} +} +Overrides rule catch stuff. + +* Isolated $ refs caused exception + +3.0ea8 - March 11, 2006 + +* added @finally {...} action like @init for rules. Executes in + finally block (java target) after all other stuff like rule memoization. + No code changes needs; ST just refs a new action: + <ruleDescriptor.actions.finally> + +* hideous bug fixed: PLUS='+' didn't result in '+' rule in lexer + +* TokenRewriteStream didn't do toString() right when no rewrites had been done. + +* lexer errors in interpreter were not printed properly + +* bitsets are dumped in hex not decimal now for FOLLOW sets + +* /* epsilon */ is not printed now when printing out grammars with empty alts + +* Fixed another bug in tree rewrite stuff where it was checking that elements + had at least one element. Strange...commented out for now to see if I can remember what's up. + +* Tree rewrites had problems when you didn't have x+=FOO variables. Rules + like this work now: + + a : (x=ID)? y=ID -> ($x $y)?; + +* filter=true for lexers turns on k=1 and backtracking for every token + alternative. Put the rules in priority order. + +* added getLine() etc... to Tree to support better error reporting for + trees. Added MismatchedTreeNodeException. + +* $templates::foo() is gone. added % as special template symbol. + %foo(a={},b={},...) ctor (even shorter than $templates::foo(...)) + %({name-expr})(a={},...) indirect template ctor reference + + The above are parsed by antlr.g and translated by codegen.g + The following are parsed manually here: + + %{string-expr} anonymous template from string expr + %{expr}.y = z; template attribute y of StringTemplate-typed expr to z + %x.y = z; set template attribute y of x (always set never get attr) + to z [languages like python without ';' must still use the + ';' which the code generator is free to remove during code gen] + +* -> ({expr})(a={},...) notation for indirect template rewrite. + expr is the name of the template. + +* $x[i]::y and $x[-i]::y notation for accesssing absolute scope stack + indexes and relative negative scopes. $x[-1]::y is the y attribute + of the previous scope (stack top - 1). + +* filter=true mode for lexers; can do this now...upon mismatch, just + consumes a char and tries again: +lexer grammar FuzzyJava; +options {filter=true;} + +FIELD + : TYPE WS? name=ID WS? (';'|'=') + {System.out.println("found var "+$name.text);} + ; + +* refactored char streams so ANTLRFileStream is now a subclass of + ANTLRStringStream. + +* char streams for lexer now allowed nested backtracking in lexer. + +* added TokenLabelType for lexer/parser for all token labels + +* line numbers for error messages were not updated properly in antlr.g + for strings, char literals and <<...>> + +* init action in lexer rules was before the type,start,line,... decls. + +* Tree grammars can now specify output; I've only tested output=templat + though. + +* You can reference EOF now in the parser and lexer. It's just token type + or char value -1. + +* Bug fix: $ID refs in the *lexer* were all messed up. Cleaned up the + set of properties available... + +* Bug fix: .st not found in rule ref when rule has scope: +field +scope { + StringTemplate funcDef; +} + : ... + {$field::funcDef = $field.st;} + ; +it gets field_stack.st instead + +* return in backtracking must return retval or null if return value. + +* $property within a rule now works like $text, $st, ... + +* AST/Template Rewrites were not gated by backtracking==0 so they + executed even when guessing. Auto AST construction is now gated also. + +* CommonTokenStream was somehow returning tokens not text in toString() + +* added useful methods to runtime.BitSet and also to CommonToken so you can + update the text. Added nice Token stream method: + + /** Given a start and stop index, return a List of all tokens in + * the token type BitSet. Return null if no tokens were found. This + * method looks at both on and off channel tokens. + */ + public List getTokens(int start, int stop, BitSet types); + +* literals are now passed in the .tokens files so you can ref them in + tree parses, for example. + +* added basic exception handling; no labels, just general catches: + +a : {;}A | B ; + exception + catch[RecognitionException re] { + System.out.println("recog error"); + } + catch[Exception e] { + System.out.println("error"); + } + +* Added method to TokenStream: + public String toString(Token start, Token stop); + +* antlr generates #src lines in lexer grammars generated from combined grammars + so error messages refer to original file. + +* lexers generated from combined grammars now use originally formatting. + +* predicates have $x.y stuff translated now. Warning: predicates might be + hoisted out of context. + +* return values in return val structs are now public. + +* output=template with return values on rules was broken. I assume return values with ASTs was broken too. Fixed. + +3.0ea7 - December 14, 2005 + +* Added -print option to print out grammar w/o actions + +* Renamed BaseParser to be BaseRecognizer and even made Lexer derive from + this; nice as it now shares backtracking support code. + +* Added syntactic predicates (...)=>. See December 4, 2005 entry: + + http://www.antlr.org/blog/antlr3/lookahead.tml + + Note that we have a new option for turning off rule memoization during + backtracking: + + -nomemo when backtracking don't generate memoization code + +* Predicates are now tested in order that you specify the alts. If you + leave the last alt "naked" (w/o pred), it will assume a true pred rather + than union of other preds. + +* Added gated predicates "{p}?=>" that literally turn off a production whereas +disambiguating predicates are only hoisted into the predictor when syntax alone +is not sufficient to uniquely predict alternatives. + +A : {p}? => "a" ; +B : {!p}? => ("a"|"b")+ ; + +* bug fixed related to predicates in predictor +lexer grammar w; +A : {p}? "a" ; +B : {!p}? ("a"|"b")+ ; +DFA is correct. A state splits for input "a" on the pred. +Generated code though was hosed. No pred tests in prediction code! +I added testLexerPreds() and others in TestSemanticPredicateEvaluation.java + +* added execAction template in case we want to do something in front of + each action execution or something. + +* left-recursive cycles from rules w/o decisions were not detected. + +* undefined lexer rules were not announced! fixed. + +* unreachable messages for Tokens rule now indicate rule name not alt. E.g., + + Ruby.lexer.g:24:1: The following token definitions are unreachable: IVAR + +* nondeterminism warnings improved for Tokens rule: + +Ruby.lexer.g:10:1: Multiple token rules can match input such as ""0".."9"": INT, FLOAT +As a result, tokens(s) FLOAT were disabled for that input + + +* DOT diagrams didn't show escaped char properly. + +* Char/string literals are now all 'abc' not "abc". + +* action syntax changed "@scope::actionname {action}" where scope defaults + to "parser" if parser grammar or combined grammar, "lexer" if lexer grammar, + and "treeparser" if tree grammar. The code generation targets decide + what scopes are available. Each "scope" yields a hashtable for use in + the output templates. The scopes full of actions are sent to all output + file templates (currently headerFile and outputFile) as attribute actions. + Then you can reference <actions.scope> to get the map of actions associated + with scope and <actions.parser.header> to get the parser's header action + for example. This should be very flexible. The target should only have + to define which scopes are valid, but the action names should be variable + so we don't have to recompile ANTLR to add actions to code gen templates. + + grammar T; + options {language=Java;} + @header { package foo; } + @parser::stuff { int i; } // names within scope not checked; target dependent + @members { int i; } + @lexer::header {head} + @lexer::members { int j; } + @headerfile::blort {...} // error: this target doesn't have headerfile + @treeparser::members {...} // error: this is not a tree parser + a + @init {int i;} + : ID + ; + ID : 'a'..'z'; + + For now, the Java target uses members and header as a valid name. Within a + rule, the init action name is valid. + +* changed $dynamicscope.value to $dynamicscope::value even if value is defined + in same rule such as $function::name where rule function defines name. + +* $dynamicscope gets you the stack + +* rule scopes go like this now: + + rule + scope {...} + scope slist,Symbols; + : ... + ; + +* Created RuleReturnScope as a generic rule return value. Makes it easier + to do this: + RuleReturnScope r = parser.program(); + System.out.println(r.getTemplate().toString()); + +* $template, $tree, $start, etc... + +* $r.x in current rule. $r is ignored as fully-qualified name. $r.start works too + +* added warning about $r referring to both return value of rule and dynamic scope of rule + +* integrated StringTemplate in a very simple manner + +Syntax: +-> template(arglist) "..." +-> template(arglist) <<...>> +-> namedTemplate(arglist) +-> {free expression} +-> // empty + +Predicate syntax: +a : A B -> {p1}? foo(a={$A.text}) + -> {p2}? foo(a={$B.text}) + -> // return nothing + +An arg list is just a list of template attribute assignments to actions in curlies. + +There is a setTemplateLib() method for you to use with named template rewrites. + +Use a new option: + +grammar t; +options {output=template;} +... + +This all should work for tree grammars too, but I'm still testing. + +* fixed bugs where strings were improperly escaped in exceptions, comments, etc.. For example, newlines came out as newlines not the escaped version + +3.0ea6 - November 13, 2005 + +* turned off -debug/-profile, which was on by default + +* completely refactored the output templates; added some missing templates. + +* dramatically improved infinite recursion error messages (actually + left-recursion never even was printed out before). + +* wasn't printing dangling state messages when it reanalyzes with k=1. + +* fixed a nasty bug in the analysis engine dealing with infinite recursion. + Spent all day thinking about it and cleaned up the code dramatically. + Bug fixed and software is more powerful and I understand it better! :) + +* improved verbose DFA nodes; organized by alt + +* got much better random phrase generation. For example: + + $ java org.antlr.tool.RandomPhrase simple.g program + int Ktcdn ';' method wh '(' ')' '{' return 5 ';' '}' + +* empty rules like "a : ;" generated code that didn't compile due to + try/catch for RecognitionException. Generated code couldn't possibly + throw that exception. + +* when printing out a grammar, such as in comments in generated code, + ANTLR didn't print ast suffix stuff back out for literals. + +* This never exited loop: + DATA : (options {greedy=false;}: .* '\n' )* '\n' '.' ; + and now it works due to new default nongreedy .* Also this works: + DATA : (options {greedy=false;}: .* '\n' )* '.' ; + +* Dot star ".*" syntax didn't work; in lexer it is nongreedy by + default. In parser it is on greedy but also k=1 by default. Added + unit tests. Added blog entry to describe. + +* ~T where T is the only token yielded an empty set but no error + +* Used to generate unreachable message here: + + parser grammar t; + a : ID a + | ID + ; + + z.g:3:11: The following alternatives are unreachable: 2 + + In fact it should really be an error; now it generates: + + no start rule in grammar t (no rule can obviously be followed by EOF) + + Per next change item, ANTLR cannot know that EOF follows rule 'a'. + +* added error message indicating that ANTLR can't figure out what your + start rule is. Required to properly generate code in some cases. + +* validating semantic predicates now work (if they are false, they + throw a new FailedPredicateException + +* two hideous bug fixes in the IntervalSet, which made analysis go wrong + in a few cases. Thanks to Oliver Zeigermann for finding lots of bugs + and making suggested fixes (including the next two items)! + +* cyclic DFAs are now nonstatic and hence can access instance variables + +* labels are now allowed on lexical elements (in the lexer) + +* added some internal debugging options + +* ~'a'* and ~('a')* were not working properly; refactored antlr.g grammar + +3.0ea5 - July 5, 2005 + +* Using '\n' in a parser grammar resulted in a nonescaped version of '\n' in the token names table making compilation fail. I fixed this by reorganizing/cleaning up portion of ANTLR that deals with literals. See comment org.antlr.codegen.Target. + +* Target.getMaxCharValue() did not use the appropriate max value constant. + +* ALLCHAR was a constant when it should use the Target max value def. set complement for wildcard also didn't use the Target def. Generally cleaned up the max char value stuff. + +* Code gen didn't deal with ASTLabelType properly...I think even the 3.0ea7 example tree parser was broken! :( + +* Added a few more unit tests dealing with escaped literals + +3.0ea4 - June 29, 2005 + +* tree parsers work; added CommonTreeNodeStream. See simplecTreeParser + example in examples-v3 tarball. + +* added superClass and ASTLabelType options + +* refactored Parser to have a BaseParser and added TreeParser + +* bug fix: actions being dumped in description strings; compile errors + resulted + +3.0ea3 - June 23, 2005 + +Enhancements + +* Automatic tree construction operators are in: ! ^ ^^ + +* Tree construction rewrite rules are in + -> {pred1}? rewrite1 + -> {pred2}? rewrite2 + ... + -> rewriteN + + The rewrite rules may be elements like ID, expr, $label, {node expr} + and trees ^( <root> <children> ). You have have (...)?, (...)*, (...)+ + subrules as well. + + You may have rewrites in subrules not just at outer level of rule, but + any -> rewrite forces auto AST construction off for that alternative + of that rule. + + To avoid cycles, copy semantics are used: + + r : INT -> INT INT ; + + means make two new nodes from the same INT token. + + Repeated references to a rule element implies a copy for at least one + tree: + + a : atom -> ^(atom atom) ; // NOT CYCLE! (dup atom tree) + +* $ruleLabel.tree refers to tree created by matching the labeled element. + +* A description of the blocks/alts is generated as a comment in output code + +* A timestamp / signature is put at top of each generated code file + +3.0ea2 - June 12, 2005 + +Bug fixes + +* Some error messages were missing the stackTrace parameter + +* Removed the file locking mechanism as it's not cross platform + +* Some absolute vs relative path name problems with writing output + files. Rules are now more concrete. -o option takes precedence + // -o /tmp /var/lib/t.g => /tmp/T.java + // -o subdir/output /usr/lib/t.g => subdir/output/T.java + // -o . /usr/lib/t.g => ./T.java + // -o /tmp subdir/t.g => /tmp/subdir/t.g + // If they didn't specify a -o dir so just write to location + // where grammar is, absolute or relative + +* does error checking on unknown option names now + +* Using just language code not locale name for error message file. I.e., + the default (and for any English speaking locale) is en.stg not en_US.stg + anymore. + +* The error manager now asks the Tool to panic rather than simply doing + a System.exit(). + +* Lots of refactoring concerning grammar, rule, subrule options. Now + detects invalid options. + +3.0ea1 - June 1, 2005 + +Initial early access release + diff --git a/antlr-3.1.3/runtime/C/configure.ac b/antlr-3.1.3/runtime/C/configure.ac new file mode 100644 index 0000000..71b6149 --- /dev/null +++ b/antlr-3.1.3/runtime/C/configure.ac @@ -0,0 +1,215 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +AC_INIT(libantlr3c, 3.1.3, jimi@idle.ws) +AC_PREREQ(2.60) +AC_COPYRIGHT([ + (The "BSD licence") + Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC + http://www.temporal-wave.com + http://www.linkedin.com/in/jimidle + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +]) +AC_CONFIG_SRCDIR(src/antlr3parser.c) + + +AC_ARG_ENABLE([debuginfo], + [AS_HELP_STRING([--enable-debuginfo], [Compiles debug info into the library (default --disable-debuginfo)])], + [], [enable_debuginfo=no]) + +AC_ARG_ENABLE([64bit], + [AS_HELP_STRING([--enable-64bit], [Turns on flags that produce 64 bit object code if any are required (default --disable-64bit)])], + [], [enable_64bit=no]) + +AC_ARG_ENABLE([abiflags], + [AS_HELP_STRING([--disable-abiflags], [Does not add ABI flags -m32 or -m64 for older versions of gcc, such as itanium 3.x (default --enable-abiflags=yes)])], + [], [enable_abiflags=yes]) + +AC_ARG_ENABLE([antlrdebug], + [AS_HELP_STRING([--disable-antlrdebug], [Turns off default flags that include the antlr debugger in the runtime. Specify to remove debugger and the socket dependancies (default --enable-antlrdebug)])], + [], [enable_antlrdebug=yes]) + +AM_INIT_AUTOMAKE(foreign) +AC_LANG(C) +AC_PROG_CC([xlc aCC gcc cc]) +AM_MAINTAINER_MODE +AM_PROG_LIBTOOL + +AC_CANONICAL_BUILD +AC_CANONICAL_HOST + +OBJECT_MODE= +# Checks for programs. +AC_MSG_CHECKING([compiler flags required for compiling ANTLR with $CC C compiler on host $host]) +WARNFLAGS= +case $CC in +xlc*) + CPPCMNTFLAGS="-qcpluscmt" + if test x"$enable_64bit" = xyes; then + CCFLAGS64="-q64 -Wl,-b64" + OBJECT_MODE="64" + else + OBJECT_MODE="32" + fi + OPTIMFLAGS="-O2" + if test x"$enable_debuginfo" = xyes; then + DEBUGFLAGS="-g" + fi + ;; + +aCC*) + CPPCMNTFLAGS= + if test x"$enable_64bit" = xyes; then + CCFLAGS64="+DD64" + fi + OPTIMFLAGS="-O" + if test $DEBUGINF = 1; then + DEBUGFLAGS="-g" + fi + ;; + +gcc*) + CPPCMNTFLAGS= + if test x"$enable_64bit" = xyes; then + GCCABIFLAGS="-m64" + else + GCCABIFLAGS="-m32" + fi + if test x"$enable_abiflags" = xyes; then + CCFLAGS64=$GCCABIFLAGS + fi + OPTIMFLAGS="-O2" + if test x"$enable_debuginfo" = xyes; then + DEBUGFLAGS="-g" + fi + WARNFLAGS=-Wall + ;; + +*) + +case $host in +sparc*-*solaris*) + CPPCMNTFLAGS= + if test x"$enable_64bit" = xyes; then + CCFLAGS64="-fast -xtarget=ultra4 -m64 -xarch=sparcvis" + fi + OPTIMFLAGS="-O" + if test x"$enable_debuginfo" = xyes; then + DEBUGFLAGS='-g' + fi + ;; + +*) + CPPCMNTFLAGS= + CCFLAGS64= + OPTIMFLAGS="-O" + if test x"$enable_debuginfo" = xyes; then + DEBUGFLAGS='-g' + fi + ;; +esac + + ;; +esac + +CFLAGS="$CCFLAGS64 $CPPCMNTFLAGS $OPTIMFLAGS $DEBUGFLAGS $WARNFLAGS" +AC_MSG_RESULT([$CFLAGS]) +AC_SUBST([OBJECT_MODE]) + +AS_IF([test "x$enable_antlrdebug" = xno], [AC_DEFINE([ANTLR3_NODEBUGGER], [1], [Define if ANTLR debugger not required])], []) +AS_IF([test x"$enable_64bit" = xyes], [AC_DEFINE([ANTLR3_USE_64BIT], [1], [Define if 64 bit mode required])], []) + +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET + +# Checks for libraries. + +# Checks for header files. +AC_INCLUDES_DEFAULT() +AC_HEADER_RESOLV +AC_CHECK_HEADERS([sys/malloc.h malloc.h], [], [], +[[#ifdef HAVE_SYS_MALLOC_H +#include <sys/malloc.h> +#endif +#ifdef HAVE_MALLOC_H +#include <malloc.h> +#endif +]]) +AC_CHECK_HEADERS([stdarg.h], [], [], +[[#ifdef HAVE_STDARG_H +#include <stdarg.h> +#endif +]]) + +AC_CHECK_HEADERS([sys/stat.h], [], [], +[[#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +]]) + +AC_CHECK_HEADERS([ctype.h], [], [], +[[#ifdef HAVE_CTYPE_H +#include <ctype.h> +#endif +]]) + +AC_CHECK_HEADERS([netinet/tcp.h], [], [], +[[#ifdef HAVE_NETINET_TCP_H +#include <netinet/tcp.h> +#endif +]]) + +AC_CHECK_HEADERS([sys/socket.h socket.h], [], [], +[[#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> +#endif +#ifdef HAVE_SOCKET_H +#include <socket.h> +#endif +]]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_TYPE_SIZE_T +AC_TYPE_INT8_T +AC_TYPE_INT16_T +AC_TYPE_INT32_T +AC_TYPE_INT64_T +AC_TYPE_INTPTR_T +AC_TYPE_UINT8_T +AC_TYPE_UINT16_T +AC_TYPE_UINT32_T +AC_TYPE_UINT64_T +AC_TYPE_UINTPTR_T +AC_C_INLINE + + +# Checks for library functions. +AC_CHECK_FUNCS([memmove memset strdup accept]) + +AC_CONFIG_HEADERS(antlr3config.h) +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT diff --git a/antlr-3.1.3/runtime/C/dist/libantlr3c-3.0.1.tar.gz b/antlr-3.1.3/runtime/C/dist/libantlr3c-3.0.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..15461baed3907c3d4ae5ddd80018da0b5afa07d9 GIT binary patch literal 456449 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≻Ez&q`p_aC-X% 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≤ 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%0A&ugBX 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Ν7twFgZ@(E= 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 VclW#d-TiLx`~PTdR_g#j9{@XTrojLJ literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/C/dist/libantlr3c-3.1.1.tar.gz b/antlr-3.1.3/runtime/C/dist/libantlr3c-3.1.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..56554ab3500cd78802a38197cc2978e8805d96d5 GIT binary patch literal 497221 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�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%0AN3jhW=gzs<SG%$T80jl8&=L_G%*3=v8Y_znb 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�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 DdQFHm literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/C/dist/libantlr3c-3.1.2.tar.gz b/antlr-3.1.3/runtime/C/dist/libantlr3c-3.1.2.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..aaa6c9703b5e959b972ba402b52eb5adecc1200e GIT binary patch literal 517852 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%0A~xLCmq)Dt-XSMzOLI$ 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%0DtEEb<qQH;_4~kJhP3e>D%V!uU08<T^T_ge% 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 literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/C/dist/libantlr3c-3.1.3.tar.gz b/antlr-3.1.3/runtime/C/dist/libantlr3c-3.1.3.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..113ef24f51b668f1faa5a9626a7403242dc4b033 GIT binary patch literal 517937 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%0DoPC$PuVJ&280mjON!^ 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ⅇ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%0A`l!st|7eA`OysB$V|P-X7FjP*3)|$ zl(wo@Pf-&Ts8R2lM}{)cssmvD880^|M0vg4sou^cOmC$yc9jw@Q}gY+@M5+8Lo$cf z2gELk@c<HQ+{D1&YxvxN$wwXd^g<Vxhc(UUhrD|W6_A^rPi&j6k|*h;RY4h=spa%S zGUn5BOt|<_H6i4M^IyY?++xNoRQK<DvThQ3GV?OL?jpR|E$A*mx9guLV-DnmWwuWP z&OpbM5-4i<^?qp;4qgLltVP1Ca<F!~z*QO(LLuFZo|oeBo7|9Un!Nk_wa;Za2cB{A zKT{&ZiDE)W%?vuBOYQiTCw7IH(fIz7Xa`Gp&>b26Rea<aTEsJs!6UF064#OoA)lTy zt6w5}{*XigZbzX)wzTY^J5^4SO~0VwY9`g6XV0qA`^{RTnn&q3XBqBFqYeqS@?Zm> zL;CliG2#$<dm{5;rBh)_Xc<-}aI(LEWFo%!8T(NvPb?}Bhgp)IovW8B{6XwtLbjK< zI2S%jzEn=Sm=-g<ThxQ#qBEC`2ctNPLi~H&P8`R0(;!9<r_02Jv2d|D16<GSClA`L ztO&aPk}_;~_q0Tt*`ZqH<AUa)V8vD70}4ndkHWVl7^kGdw*nlI%ZYVQ6(J54aK1}P znq>5A1xa<1bKZ(~j_@MIhQ$f9lNWuxRiWe+B~1X-W~tv+MPnTVmWCc7ydX9E+jV61 z`hH-_mjp_w$rY|b0^$1EEloXGo2fWfy%YBk92)29%MQR^USQp|tiA|0Dxdj#k!ECa zXIT#SZCuq%VKD<ATDQ;;E0QUbpACndI)cyhQRIDIg_|r_kz|7+ICrzX0ZmZp2Z<?l zZiCSb*um%Zu!E(Ir7cu84<=$&r}MtBQ8U$vz8f%6Z6I}zse;@RN8SQ!b&-X)S!uPH z?1$dop(BzW^OIx<;n<vb#Mki#%{q0qEJNZNbuqa&*ZT=~qqA0V9k;I9)sAzK!sI_Q z-c(V&#+D}^j$h(#>~5q4811L>-Z!CW`ZKQ4bH79DP58Fb`Uz>xhrnBho{-b4wPq?- z%hwJ9lItcBZuU2y#(<d&XVagJ`L5tKXZd|LpV*mqLMMB)KXY3(ZW&KKV@_(ga-ACE zlU^4TQF}Pwe@>(@Hx&7&5(|+8>gW)(m(y64Sf1!O2(+~x{50b1ED4<WSsBMyF>a8{ zqLisdL!Pb5JD7+*!q^ltm^E}XCb28_$0@*sfazrP?7%V<H81!<917UI(l@5w*U3io z$1KaDWrm&XF9!j+S`VLWN!2(`kV(R1)@GvxQ!w_8F0QgZ*UNf4iDIUs4gXmK1to&r zHQe6yWUDsJ-sp2Yfo&@q&f8#la9al3P7IT=AIhvO*GyVMe{Nu6HjYxP(zo0kA_RiY zb*lS}w^<M$;w2ceLANzzqiv$br{iQOk<WHLQ87KIUL}RMwlT+;*TmLvc<tOpd~ZyH za6PMZgE(|kwz9%ABUx%$BO@OfLCEHOowe3WH(YGb2@u5BcE+4@%_Carcg^Y(Yjf=P zHFH59dJH9G*LfF+=~Jxb!pLBKhXChXmuMOGKZ*@^h~Pc*b<q;hp)zIQddFUlQlIh} zHzchXNn#A5Y0634biPA^mq>my>#5}V7nrfq*PQ;WLO;rI0UrSDBHVr68zj(lze!a6 zzg;q}-y8nt2SNY54*&DPXAi%4P|pAL`4@NipZ^5>&u-vu!C;fn!1RYP@&CSk&}PT> z6xsqba?DwnhfvH-&htUR>Y5Zpjk88)M!IM83fQ$d!|W8os8sM%JQz%JBzPJ{RqYfP z`OB|&K%;j+qjx}~cR-_eK%;j+qqhPYHLMN5M%B%aHB~T48Q7)(xXJRkE|j%4yHP2( zQ3##{C2h6nl2o}_n>fg%)sZf3)pe;AU7HoCniEKCye=t_AI+<Ap>B%2EEHx4@51S9 zEIgln1{ehP+G&0#Fm``=#~5;V9Q$v^|Ff<0eR==u`Ts8-ees!(|4+}?AAPz0@Q(lg zt@Hmvv%nbu(ux=Wz8#w)dL$-rn_1V&0csgHU&0v~p&k(&w6im0>LON^7#ofyu*@#% zh^<v!ap^k9io}UPAQuERon@T!i+L=?0^tO-21v0Tf-M%2gO@B+3&Q+zOsv(|u}95m zF^z|uR#yQ=s#8$vL+37Y?41~LCx+aKA$MZPofvXUF+{FXCxRG^>7}I$4!SD@A<XxH zr5WI_ENry<M)A{n7Td1wyY@WCznV%%)8hOi)S8d3uN0z6`NM?n7m}oA&x_ZSox^9( z4i8=(AO0sT7Be2MC$(iz`64qOLISbXiU@H3yqMRm0At{udJA1&XMf>3``1@?1e5uq z_0erqdIB%an#JU*x3jC8>{SihyTNRG$v=HW$i+SuM=A3$ww}qEaht}gD23NmQ_A?D z^&BT}7us*Nn-#8lOeDez_~onK;fo`pb+qY)d8#`~#21W)@zs%Vv>3}CoDr4+IsM6Y zZ|@adJ%`^ObpH?ajMlB3!}Xq=Eg;ktwJQx<xKthVw5ICtb50epg!vZRJzIu*R~IMw zaDFw)p|_)2=T@UvsB7sN*pckaG;-TkmTdfkdAIksojtz#mXdZO1ePs@mnLtCSt1si z*Y@~ol(<Ts(51R}{A$13J63kFZe1NT?R9fq`4q~UeeAt?o3d8##YI%*#Wg_P6%Gt4 zsqfeY*L>tU^op3FqrF`T?+}mbnphZ4Si{{2BVqh=v7~{7$D5^uw?>-=w_K4o%fTgk zN3H8ZBB_W~ph+dyCe^m7XpQHv#OetaTPRX`okK)TKLlcfWPW7Jdh>hy!}C4qT-%#u znZ%&8TxqGt`hvqO%?ek?;dRPFw{O|C2w%^mD_hZwx0_)dWumbac~2^3?S9`97w%Gl z85CqIs(n%YxJ(rI!{DKpbJ))U5hyzx>b~_14<=QDTj&!32(`-;1?yB>)(?91>3?h9 zZVn2HyZ24{B%a`YX}5*=0q>*Q?bTQ+Z!qkzxg&J>0)lO~<N?b``eISu*t@aWQZsa0 zp$atjuj+>eNk)|jH0&AjHfXZ@0b;Pnnnc9qk1#PT9sX$T+CIB0T03qZY+gTJhbkI* z=(@8$Gnq7adphz{0^f5HEM*9Gt+gydP@jWGn|@(mMllFv&3i2aMb>I+f!5}&o2W=1 zR62YX7B7hvDD6KA3OjC}is6^aTO(-bd-^pTzvKD0j08|E&<_gqs|74mzU6c2)pCZz zHpS@oppef}Z$***8Wbr(sq3%hA_0566>`jVWorSuYu}Z>whZu=<%feJ0cyWxPRhv8 z0$Z)f3JEk?*mhwwsWJsp)qgbSpFOJMSj9ybk=aY+=+eod<J>egY8mq@?{9Ezei<u9 z3C-O*d|LTRA%>sDgQS$so`=7-7Cj#)Zx|f#oDqd4<16)6R)ho%RrfkFgMvVX<e<LU zH}Q2kl1b~ZwejXNh8jNRlywij-`?-;{`02Ice&T=Cqx%+2pck&<DSpax{c56I#$bn zRapU+|NLIo6~p9mvARi}`58Ryvt(HPaCh(N_KW>v0Gb^f?9FKx-RmJ*#Um*W0r%Q3 zDvrqueQ83EQFvx)5T4*z2%1V{_PKcFmVs~mm!<qK&DwYE=s^H%Xp*3D#1#K1fh&c> zu65`<!amwe8Fjc!n%m1u#b!l*e)wDhhfH8m)vOorsA3mTV_YHC#)ARv>>`M36>u_z z=T_HjzbA4~3hNHY<C2C-K>>mDvxXiKc~lCH?*&O^Eb$>(E*Me#x(J&Ti~{`f5&;{L zK4E`+%XdW*o9VuzrE_n2eXKCQ-#rjfbcP0|VZS5hBGj79P{R1$ALYY8TPAJV3Ovw; zCG>tj&qvWTo1{a?muHN{ozcRA8jo1m#E@zHG^PASV~J*Cskyo7K+C_SuZR;C8!zy< zk~e8SE%e)_?m;DpllXN4m@kCtoXYq3XppR`Qzv6y!T`&5AYF2fmjT$j7?q}@jzJ%v zP15|cSz9g<*)YgC_H=u{x2L&T)}o#O08b~@3>9Zl@)imG7)iITR)OlNtrq_1JYq<B zeZx&NCx#nkJRO=44+{!~$Y3K@D1eh}Y#qK^j3v1l%pax;Hm_EYOvWA~+7abQt)PbB z*SXYvK>|Ogu3AEmFrj*S$yj~$1haL+wkjwUVXd`XXwb6P;L-xu%2Hhu^D3Qp0hzhC zvYp^!&zLm;B+j^G))^YR7G@NiOJsG)6cG2%6&gyzL49&;>N80bmDnQoo#`-x;hMTE zXpzlc7WZFw^ez8WtG7myOEBqRDm}{P@!b3^$}nfhli!szc6ivXlT=i<AUX&C+k7OS z-uzo$@5)zhslyLEMl>ohqI?PR%mEXFCK#0PBF?7xX3Fuo0vn1D>%uUqa_tA)DtOf; zt2>ct<UYJ>lyxy7F?ED=4kf)U6`e;$D<o8Q&W@p;PUoTqD5ag6!$)s4LpJGedU6h4 z!|t(A6=BXtfAY3fJy4ZFN8YKyT9wa=RZ+SDw^b1tDI7F_`#57D3){i&pFJ<Z?ZTU+ z@`0!BtmxF1LV@4t)gsvnFp@G9gc*v*)mHX~rwq2`G4{QSbfQ=r@la;pXwZluEI8)O z##K)|d|0ToQ{0YMrmlvy+j{zC?dXzd)n=+4rGp`%aH3|p)7xHefl4wQ2sqwJlDK<# zAdz>=JNX6CP;j#G)k+a%G5(w{^P=iGL!A;_C-5FQREao`o-&_B=Xe<GOgCzTFQ(Zv z@rP`-*SCnc)|usqQ(@ZV7sms8)dlir&0KAo4WM8g2;Jl`N0Bz@r`?&(ZASbsT2p3l zIK!;-_wxX3JTZfwy`Pi;55R?m4AToEVsPN@?IjHQe2#!2psQD9q!RzO)BcFaF@Rs% z5b@wi(I2NwFlyxwHwr~oySISQVm=B)77{(`utw_Tlp6~vWe*BfA6XQ)+0(Azw7hkx zK(rNfxfvLyStG>^^I2|DmFyacLuWy^4`Sv`h^t5`{Asv4W;HK)NwX_H(25ylAR_oP zG*DXmjP~YB^)VzissFk(NNrAhN~aS<^K&e48OmTpVwpwrhy@q`pN?~u>b+a;5^1MX ziBgZ{*h{|F=P!ESDP$af>MG~4nEa6*R4m>x5UGw+Wj=!=I!-LmM=5%p<u!~-LfyfY zG?c%CYbJZJo@mmSAaOc|^8D~Qy)-GeWt1So7>SaV%X18Sn4jTZKn;_r5m}<|82$88 zK4e6%NHB+n5N){wR=x%3f+50ZS(r0dI~-4x%i`w8_-YJ}*AM0Q*k0vcIU$Uj<2+<% zv4go!OW3uV>3VCcs?rsadZv7TQvrV_>tbeKl~YLTHoKI7P0y*O6+Mm~SY#(?PZUx% z&cwBJCh?P082XjD520-x^C3<R))uhZG&vKmDoo%wTn&4}(kZ~Al@5aBeXH_%fknsX zDXyV2ayKe(WJY`Jh=rm3W`6S!(jc}yE^-ltxRau}TfwGZv6~!k=u9-6pcF{zQ7^YA zIeDv`7S9ccm44+VD?xRax-6&pG#hx6azZt}HiJ`_1N*T>q7+K1b(CzON+=w96chS) z3%hyfLR{zUQHK-oAsj($)<$uwh=l`H{(@7w`KbflAuRc-)HqHUfNlBa6Knf6i8|Pj z;tZ>m1e}7tX>G1X>l0Wzn=1JDYJ+!;>&*?3F}?;@y6>oCkQU4UT1KLKn&(5#m`yYd zF&SLlXdIti#6=|+<ntq1&!^2|G9Zbm9W9sSt=2}wGRg)Zyk(w55hmB~U?5b%*`2SF z$tOQ$%f3=PbV6zbt{>O=qB%6A*^Vbo_F1cN%f?^r9XxYS2g#`!^ULnR?%~T`<Bu{Y zCW%KAt}CpU--te2fAAn`HU3C<NqQ;}DTcL{VTyQpPP<@;oV0)$E4-ZDj>HVFKKbO6 zN{$lD!)@L3DsE{tUV3#W$`Du&$<aBjG1mH9@0B_-E-jr-*l1fiT;&_i^~+sxOJWVG z6V8pat<0gq><dGJ1P0LxB9;)quwwMA(;_LSKuzARKIR~Yty!5)%e#AZn!V1DPgk$w zrrW5MG(9|U8Y)_GIeM|VzG{Zg`0kn2<e!S>ay#P61dXSZI&tQAgI2WMj)I9T&7Pn& zX?3&e*$8&*p9ay!PuWkCKQY*x0y+JO*i33l-4-!6@Ic0mu>>E8t-|A{eOAP0NlVMg z4ysKFxZaT0m?v*_#O3xf9WXZglKkXUN^;S>+S%?MBcW3%{b8smHHn%^kA2oi2yoPD z0UWbb8T!pSYtK)LdxPXq>&!f<V9)s&iqV)Z68@^+@^nhGmLN;wakTQM{tD)vCR#q+ zoT1K{TMK5l`KLcVc=)%LR@STzrQh-@pH&_0fzG{xtI(lF4<AI|;I9pR(k^3?2J=*9 zw`MifRF+(ppo9IV8dFU=SujdsJ|13qFuSsCk6!HW@dvbdr%(}Gq?sg+2{KzLaN9=o z)3Q*mAAef@S?-~^bKt2eAgWnw4{K)`QVNH|J15LpafjTASz0QCX<ln+Xti(mZPnP( zvK7f#W$Efq(E^9){<TM__5>|vGiq6-ZTWm%v-gR2eqAu`9&_eQ!WP=Vx9;Z6&L-}x zVUd^3F4#Z};dPZyeXYY4Y<nIzWjCs?-1C{ifTf(l5Y7+Lae2+EEUoigt??KX;I^#* zI9xEmIhasV*MwGNgE1=X1}<=g3kMKT&OVnAizL08pL?B{7|{kyd<CL@24x82>gA)M zG)@)JI5?Kkpzj;Kp3AghP{O0*!`;J;Xdi);QCBo68cPX`qUp%GlB!zNs5DjWAQlU{ z#euHo=PXBJx2ZMX>To(yC5_Kqzs?E^Gv5o;NH@%->q7`Rp_EZ(X|QZ!yDtedG|49k zNA5D_=D>)?r$C?^$E+p*?lz~m@j+_6^t-YJ4fr;1b_)eM@w&-%n6zRcm|#4}RUp=7 zR6tAx_tmaT4U9EaycY4ptRuZm#|}Kx)-Rr6$dlgJK@0!_>bc$kZa|U0Xy#64`HZ<; zT!7~;1RD~?x7?HVW|gj$0+E?xoR8u&6EmPN)8;VQ;j>nh!@QNuC{Q6sD`O-+sD6#( zz_nYk#xuFJE9YD7tKYk9J?@#35MzDxfG3GC^c6|0GzZfWpGi<nnuFB~7-40L_;sC% zBTT1J<0CQKMppI-?aUf}I0e^FLv4k1^I@ucSK1b8R5lixb`W|Hk7&~qABtUL1p)~@ zv3bYVD&BF)+Z}_tU^OJZ0BR~?PiU7!C4_%9wp!ywFtfFKBlUcTiR(($IHGu-fJob! zkHo~}hrfeuE}@qC7OMqDU{)1!=>f}}W+}}R1ylVbw8-rUiZQ4g)5%aZk9^>OCpOm? z0JveLC>i5Ky<`k=E{TnS)ezWWwmgU#B~;^|<`wgv$@t1Jx@9_S_E}tnu)ki%dfZMD z7Vyzx!x{wzL=)T*M-;y)jo7FxosGk&nf1D{T$NfBwXP~8au_{uOI8U=iQT-En=cp? z>x;h;z3L2-YNkJo$8z2xa>YV{sqSXE>fO0HDe7q(B{8*dkuJhazTjHsdEME*7|(5d z29DvuVzvm+jlgKucO=zq&S_w<E^Vvxh8qOm%d{56Ds_x5o;fg3AiAu_p2rdEv3c!d zrY}^Z#m~+3V@>qUE{qoc7A%>8f-%``nS~RdCTGzH8`N=eNj9TJBe00bY_@f(QF#%+ zNoJax)m+H75H%#taP5N8ccwqw(md-9rf|-}v;#K1EsJDu#xg9=r5TF5J!qOtu1UYs zbM@ABw5`YfOpf`kHOY&j9H*J>iL!uc&g3k#-PhUO%LH)OGrSWyu!z$oCkBsB#tvXv z(1A{<M|oDvNrg+CrdY<9Legv{7o*7)G!WSBr2+ZoYUzB*09y-1p15A&u)s(><eUo? zcLhOI2?%-((eq7a*BA`0O$%kM^_mgKo()I%)b`3u_>dkCu9Qxj3Z&FYKAGefDisVY z!_X-!a(^o$sF8#C$TOuHCglU}U4yj1r<`5W%|(Bh7h=p#StVt|2PJovmU_*{&Hy8M z^a{I@c$NXzz$pVJ9k~vaZuJ>I_cFdJ!YD?;6q=5iih*y=mD0jy&dz&GL8%uy4ye-N zH%^q(n?-=2oHacI1_Un;`!r0PNaUNxjSiqbkyCTt!XR_abtEny&09L9X64vhLtbil zl!b}fEOI@zNigR+F~9T7coqAdi7$+<SJ%|wnCMxZ={3hj7;y@NSpR*V4&zU3QoMQ2 zLL3ztEl4ARz<c#U^E5!>gC{yIn?V6I(NhPdeqsc^)s3901SHJ_`D;?*0mf6#qi_lz z4(NUIqDYaFSihD#T8O0T)g-^hmFDneEBr<L8qQ`^3Mx3JWX??{F69ssKNl-TTi;wv zneV3>3e;vnwxVlP1@ygm-_0%O<=OK!bq>tmWqEAt#6r&D3+n_V>(bF=&>=G%_O)eu zZ9FBSj12-WPM7nfsuhxC;zg17Q&zb{9b>9%!dLk0+~~z(QN+~|tX6flOvG9=bK2<j zreEF!GtB%#3j`mrifT?HRavt1c|I!jvBs?&2?c}CB<1A-t-63&H%OQIW9z1|5mh9J zK(=<VZp^`(b)Yvr&a3T(i0u9CSna=?UdjA5!go7fWZjIG%IWGVO@%ET93JfPC#5;$ zVOF9sg4|H1YP!<K>oaW4{4Ol|a8A*OVbMo(iav5h`*auQ7c<Jr%j<$XeUcvfhv+ls z@B0+70-FAn)e?o5Q4g2~mR~Mq`>+w#^XR{oP@!U1|LTlk{D%oEDT!^-pYyR(O{oCi zkBh`}YGh!R_{vfw=dX>v45Fq4R58J4K96}{kl|KCU9pIsrDs`glkjnp^HXP45Tb4b zu-X$)+WU*KoUJ+xj56<1!o;XyUc{(#y#Zi>R{hI_8PRKRlI!a6Lh#-#f)7&eq>tx3 z@56arG0-D^Pu^8PZ9b_3wV4S^;-ld>w2W$ZU5>+QVhq812#s0o5O|g|^_<iI>Z%)M z8BsP;Q7}kMbdXQH^gSU;Ni>8cFo4HOJRaj`Hlt6ZTa2Jf+!9w~%pAsEz~&C&uO^z? z2#mugHTmikMy??vz6rV=$c6ax5<R)6TKi8deV0pw$o$c>?!or);gLOnw~d0Mx=lMR zm#(ya+n$gB18W`gh3W*WcHEhvJ9S|@N{7Qpr`o72PrW`1D5ox3sMIDayo|ll?#r^4 zA3v}=>**BnW}{?$9*;P7PmpV71Q9j7IFs^--YMeFGwcK2fov56lSqQCx};0+On{D4 zUP6;PcBaB>NmlUweS`5MNzK8#>oTZk2)o$MMB*tgnHdODOO*#HQ#=2#_y6q<dw(I= zNt|-;jNLeHwQp44AAf6ogze<e(n89h;BQamt4S_<sO_Co(G>FWyNV|1MPh8qixaG0 z=XSM9t-_vq2VyZg)p!rWQ?ix^M5i%>=FC5j(U@&#|89qp;h}Di->NE{;03a{dzu@G zqX{EyjG^r!$0U9e2<`pZq5g9Z|EAUOMt!(?QIDa>?ITgT^woK$)KCVWEcm<Y=0xEd znlQ`JV<ttYBM43-Xy&<wG$j3*q`^%1Jgs<@Ld<p-nnfdONrdNluo$5*J_<LX6*J82 zA*Jvo-wLttZ5|dg?K)-VEq6@?{z=f+K6-0m5^00zc3rcj*x~uu6>}P^!Q8l2v)7|? zR63y;&H+H(g2TQQ4oOu}F7isl0N2gclFafbq7Or?*qK@~7D?+Tu$Z1uH=7PfIJELs zo?oNZY*#+0S7eq{ZB*dN)g<ZB&Dn51#$`hXLn}8v5{ffsTBk_F_*sqr#=y?+1L<5d zrhiWUCrOg?0TMvX&;PXk@X><@rTkByJ^1YNyZleTb^fOsM%yyU#vdUbrW0}Db}3+W zqueD#x=V<3mk{YLA<|t!q`QPjw@iqnHwiK#A@D)6^Z|gNCPJDc>35Tp>DfLVXlP{| zS4W$VmPIcn$8GKIJ$do%E8cC)a_t>Zp~1;neKIA3BEeYV*Hx`(I^yzF$=u?<g#@!e z)ir&BDNE+06d7OsunxLG$|!b&)MCLKc2CaAfrd2*4*npbNtqFzHMciFc~}bjx+LR) zB&7KojeByb`yP0M?N*rn!hBy21P{^>sFFh)W8bh~do|6P%Z{;Jy6NV-8_fFx(|sdQ zjPi`B{-vD##MiJ$S>J6>Dw&@IMa%g37&n>RlIxOY_LLfGdS`633#CAjuGQv13A<X# zgJSw?Ub4m5o~7C2@G4VO1Dee83MdV;TIpGX43ue0cErz)>w|85-!DIx!_3XAc@~0a zn?Wba6i+_z9)-ovs>RPr#e?#S<*z{g&;4n7k8`B0zbEZ_@1v$iph}>c*KWoeotr%< zgvFz{ND_hIBHr|Tn!Uavc39#8D-QihWStg0sK!q1Rt%TilDvu2me;RXa91__n`+)w z<$=`rN3)E(elwpV)8`teqYvP9bYr(83A!l_vFdr`d=;w2==4}&$ooRQ73P)?$k~iC z3duRYT@OT7!_X@ftlSdnEfrb{0QcVo&?IoXv1IpMH9J|OLep-~@Tnu4iCr9^S{6o8 zZ%1Ll3?d}^-t$>AWSl=fN%}Fg1kR<NBi1tdA<sDWjXmfm>FJeg<P1PiD&-62iU1yo zbF#DgIBYy|pglchIPjc57ME%dY}~Kj#p}a}mraQTNN9>f_3I#l!@}t>LKq^Y`gBkX zWMvFtlwFClzIy8=8T9pUyx0_)k*VfgskYwM@GJ}#gB;Q`HUhcO7CyF^`3tBrigWfC zKXKm7@-Yxuty8vOVe**@_MT~<HW;n1LzPrC$ha^e`xeR0x_Ju~Ftd~S@U9%94)5-h zeCqEMFPWF|Dm1-ON?GzqE4`h`T-p+b%Ur6%$SPmevnlNS8_-^DrM_>O0-IGfg;C8) zr@U$^2?U<T*~0xT8;(jn<EDZ?f4KYevGo7r1bV5&M3wbFlK%hmFCRX5SknK0{>5jH z?)3k^iT)p1P+0$upK1&MIJavPxRhJiSB{e$t4dT5oB3-lHBMG91<RO$0NJ}COGne8 z2}xG)4na>(lEOl<a2-^gerQ@LrYC=A@C~4gO4WlDJ|J`zNe-Ahqr;ui;m+uAXLPtT zI@}o@ZeesN@i}aK;KV0jXd#Lq--j=>(5V8(Kaq!VEab!Zpql9LtC3ty$`&sf8P?<~ zZaU4=%OhI%SHLlRwYSe}ZkTkVa*4{d#Dl@o%_?cDJ4}=e^+%&I+u7aQ*^lnA!e%md z$y+!5M#YaN69}Fg_1)AGxZ6;XJ+AGTb%M95FzlA3H+bKgUcJu<T{VL#5|rF}fo4@H z`qK|y=K)>l?_X_oeJA;Q^_aQP>+64?-j|vPeXW<4&g0_XgYWno_ji#BxzZ0@r<|x; zRT}8xmzJObfB!>u27QSIce#CS#*TW_d!IfD5b|i6opD7stB0?b=TL`nzQ)UFnlYbe zq#K(_2|y|)dq?nUl;^{S)k8x+I8In}n5Yg~^;g~%Bworo@|*NmHKk7^$p^G}2G7Uu zrwRh-Sli_DFiN!k5YWVMt$&jstQ6g(!_~1sR|Vt#2<Qn!NQV_+WWW;2fQ=xg15Bb| z!Dafa&hz4YjjBygdQnozadP0CW8V#spo{Iua*iM=bbbZf1;e10FWL>8*TH<5vUoQF zb`>Dvg&&AR^?$iPrL1w4RAj8(uMENqgpEo7%hd+B&y|Kn-*28`%J*FDrHG+-rD*;6 zUx_O|5PtqTmCS&!y;vlz?ZLp`IW|X*bGi*-gk-;n7I-iy?K?4P%Z?e7d;>IQjjd_8 z)LoPFF$d>dl2BzJLW9}^2wB-Y4(G)gLKGr~=9GHUoL8c4ZyIK%n)e)2Wl4q$EZ)sc z?&&B?hoHQAmIuisacc66738z<olf;8JnG%>Wczkadk3&u#(_Qk%bfh^yZjQijJAc2 z8^vRqqbc#}j(<-JEpNtWbpDLWWECY;KV#FBf}qA&m{Z0W*MJqH_hO3STWutPl+E_U zNuyZKztDU$vfQ9DrXsQAT=DyMNZRq;qO{EeJvG>Mi~?f|<JgVq@mRrsOK7N}F+KGl zS+NzHDV_KA%_#kPE2^P5`81o*%lr3d!J_hPZIyCZVBfWBD5Ux6$8>f5=Z@pq{0cc- z9JL~P<3MJWe{Z#da$z@YUvP?PhUJT}=64Mbef59Cjq#gb7{MA@+ZWN1p{XJ?_TOr| z1oi!fo5SB5clY84yBGbN&Az$e#U=q*^@|d0Sp=M3!zk9ALO43q9g-4=h#yOa%u9L) zX>c${K*Ezp=EvjJqeTYWF!;<Y8XQgS36S|dNG`Ycs;B1F_U`uc<HIA`IPr*<xgE`k zgeoTy^72{+{+e^TxnvBtnmH11wyOy0_i)G*L9!&|Oble9*n-s?z(8seyYY?1p>)9V zj1H{n9#tZOMG0y*%(XG{3*DxfwuXG~Zmr+me6e|9_iVtq$SvIZgwLF!BgzrtY?6Zc zC?ANwNIFrsE%7#@{s~6vn5(lFfVIWf_eV-M>rdLeA*^!bb;Bh4<Aib!ztd+rI-2C{ z)F&_JF-pq-b>5M}5A*K)sQ4Peis5@pUPSs77)tTI;58me`fKL2(!!?N!z2Wv2aEu( z+rE2-fwgkr(TY^(a{6USIiaK5hkwscm=xwdVzQD?ZKbptzPIe0O<#7QWiP;2lUB)> zc3ur$sv)xxO0Hsoo1on7Ws>Bl{;s2iOLf>N%;w~t!M1W%Dz|~8v8Nw4{l}u}-jdVj zy;1e`7Va+Zab^(SGXaV7pNlF{lRL6>61*0zn!Lu(<*yCGy#2*1@XEIPs?@Mk0B%M4 zv-eijT3hUF>OBt?Rd5LnpLj*BiWI<ZrD0ijSvfR8!ydQe{ON=snT&%Drk25pg}S*q z`qOcN{Cf2H1Fz~qI-XoD)#Yt3<vR2(f^akF&hu4uTYl-9y7VFn>(Pg@OZZ36;okEF zD!CoK?|u0ZFHEa=CX!@W)%UnV7o%NnN|#(dhk5*h9V8FNzwb8#o~ndeAH*vgBBF59 z;;4Lvbmv7LP;bNa8thWtJnklTQ#FGnb3A9;n^%i-?nTglygl>%$J{gK)%SZls86ol z|8@Ju^mEaj<GZ%2v~npoK7W3ezDY7>zT!f24-=aK6$sb?Fcg@Avt03ePZckdzg5od zdQD56;4n)*XEN%4Fi#-4mDEvp^UF|5cgpOmzj{z$ap!=65@+7&uwkJlNF&&cfyZg} zB=PHivaAxgss5{;7XLDp01pIJ4ZN76;A$OAM|{PLnYxaXa*UKRONy{=AD7Xz{ETSf zUI{Wwdt2)R@15Vvz5UPGPjfbue=W8)@Ak{@@Xr3{?3wT9?HTRzzwmwm6EQtehveXc z1um}MizmDzW^N~~`k#Dxh28vLaeWoKW(#ky8M**p6#xyr&jA^&y@=LgHm$Nhw23~# zHu=5WQ~#{3bCa9uUvnSb=JLA5M*2NnVE?SmwCELfGp)t%b{p{(IY@3Pj2#^A&e>pi z`%k{jybk`axXRdL=O!Dcq_{T9VWS(a(QB9X*2gAOH`+qKmz(aNvaQ}jAp1ApHovEP z?VqxBZYh@?{I0hRqh8laX{#UP&zyLjB5H74sWXk)s6U%9*!b2cFgxP?N24Sjvo9Bn z+FS#BbO}uJz<Bc^p_);-cB06tbm8+=B*QoApg7GY`4sTw60RCzrLcK4h=^a%D?7B> zl^wB4ram_GiC_$GBQcoQxPIpTlr$=xh3)o+eZ6_?k-<++hIO~DD7-NaULQnDo`};d zV`#WEtu-JoHV>ACr3iQ_<F+AwCFh#^lYK_n!GYS5T(9XVS6~VyDaU{Ql8keNXtMu_ zm>R@*mDYLj8xuoxLlZ-dBg)H?FU{lidjD0<d8i&9+(|LPX~JLATXnHX-lm24%&_Z9 zJ{*caawiIXBK*GjK49i)n-|_J@@8or{qcu>fm^i}zfze9IsJkf4e$pI^9<Q(lW}6b zgW$Wu_$&g{;ueUG{%Jh6a3dy>HavorxEq%j%+5KolE>bZ7{}f@R->&N|J?9Cdi8W0 z|NLM*M7N@5vz%$uyAPfJquv+_Le^^0lkrK8IiZ(tG?$m>#XG}O<kZVV`8^M|dFrJK zn{P#8s<UKv<I3~`R5G2IWZ9!39mNzAopnqyzefEATB_MWwW}X&s)eg6ZN}@oD!lZq za*gmE#+(}bfJ-Ob95ZY{gk00Ua4oaTCD%g7&t*cGX2YZ?*o~yw+S*!|ukkDB&bs<o z>E&ttp&$I*@jDdbULU6H3<VZ)&4{jazKmCCQSK7<I#+_mY|EF)${R;dBm({19+fs4 zikf`qAfYI5vRc8lR=HFf#%t#$7hHr(pcF}l1Fq3m_aZ*|jioHwihP%xrkB<Ov?U5| z$><;daO6gA#^~`@211+B1hgV**AUh8v~Irqg`t@+q%awJ{a{C;rkBqu;Cz@BvtA1v zL}|ztf{>*FK{4Q!KTRh6bD=DATd_Oj+RZBJbaufT8#hY~kFNx)<@eT9<M0}{47K$T z?PqlUcY3-?xdeFpOSfUw!iWlDnXx^KnOirw740^S3T6m!m8=_BsR{!pr(*6-aS(&^ zH{?P~wkyoSWj=n5^*9qh+sYEQk!qQpou}i(u-Pkxtd|R*0r#Yoixz4(iH8nBBc}zu zNPn@&G(xdgxeBvU7}*1HEmMc`!E5~(s3y@d_DHxtnrJZx#2fdHS{TM86Rz249FKeo z@5jz2D>RB()Zy{EkmeuqDRWvzAj39}qZJxoe;60V3L40gK5fr<d{wjG8a(6gz1@Uv z)&x*5LOwI>HjmTPWb|=XxKOFm1R0X(Ygh5<j?f!stor#VF)N!Emi`@UP|_f>&Vg@Y zS`Y-txM`M~>6<G5>`qGNGD*r1)~(wtL`4m_V_Zn~PB!#F_LSSS#<Q6zBQCx;8nQFD z46%GfM0RdE4C4Cu6q8DEEjp~(LOi9~AIO~RZ5QW@-^HiN1Qbb9bkjfO0Gvm9#@V9^ znj=l)-QC5T`_by-=)artOY45Cvba>|7+bg0KN5<EsazTv`*EApCY|?Kbt^S{i!A~b z0|ZV-IGIMQvSq5vKO?Lt5FccV+`qpm;c+{%W8%RZz#K9ZqF9^5jUZm-Q1&FlVL?0* zqyP}jR^!%tKnMR!AVjS|R&H6Ap6I}sSaIw}8)Hy)SDSc;c}6!JdrXvi4x=se)M`}} z2}sImhCJb0;E(C)AUQR1z{~Ez?%~T`<By|pe0CAjCK+cmqULB?oVO}Z2Wi3Uy%Bx3 z{(#8LACqiAvNfpZOPtHTK}6;|1!!Syq1L>qJ&!;+o8lor%eUP-7RJ`yCDYN0=m(^b zY;&G-8;BEUg5yMA^KB%z)0hJ!(g{`a6!M?+;);m7Z0eF9b4L|y%~mZ7q2M65*P-|X z{^|20BJodY9S3y9w4-I-lZH^7n8;W}K-9ZWeDcY%$2yvHLkq5GKC%n;zkS7^8@>IK zITJ;RR#?HE+Tg&%(u;Oo*rN-Ay*qrjTT0ese~9J0%`wcXHr!9@kD;C_MwH$}?nGSg zDR72qWr$B=O`S5&D(0|$8*_4&3-+RDu2ueSD;~B?zk$7C4fT04Nya%MeR8_p=8E%6 z4Y^xB+;Nz_$=`z-?PV-#D07-zKvmD%XVV~1@(wyl%xubDHrr2-CEc&g$)6xqK_MCu z+L>qPH18KV&HTiu_CLaTymlej_Vcexo5~9(N`NBpiBCPa>NwO5IEK*Mv?VO3hK6t5 zT#^ERxip`{^tJRVfqX6U#y|eCSonbbs>-E#GMVS|-wNFj%894Fn92I&^zV%H{;k@? zct(XbTmF*eX9y%#1J0!DlwmyhYlGr}(ls8NezJjL0TrQj2z^i8lHIw|@#@B{)o9eh zSXVp9N8w}WzK+q^($+4VJiv3$;z@eSsuR4@3pQ8`R@fpyCV{czlxw8R$Ohq#lVUn# z7#58}jy>$&JfCn&blq+bN%R<v(d2|h9^M#6#*}#FKEvLx#)E;P_x8`z;b5F(n^Dp^ z>$FM41Qa3(ovr(@HL>^!^AaAateZs-`G!vfOOdO&Fyb~VBT*QgYDXs|j#3TiJBJx_ z!?Lr4a-0&4$od-B6El*q8SvyX6-4~}^(NOX2r@G8STs>0WUuh8V1O0m%8=pE6+Gs@ zI@ev1)|2_hxCNo^re1Y3U%QtrrdJe&cq#a(PCp)req7Wjq0w=M7R*;+tcP5OQC3JD zW{r7w8)XJt+yiyO(&Cp=pih5k!@wt|pM06O#nvx2z)Qy2NEkg=i5VU<+%y^wT+Ds- z`oZ+#1gU-e!CMVRpt7#Hnsj{|97g;hRLWTO2jUsB7WHf@1(+#eFQ#5%RH@OMnoA5y zuY}m^F0?agGEmhFDjDWy)L(la{GA3@BJ*ZxyF`kBV#U?*@}5oO@jw9=h>bssL6K|- zo}w|7x`LfU_l8v=Yx0$p*N!V%T;G#1Mp5Z9oM&q<h1Ex4Mxi=rBA(ZlgS^oX%eKOz z959VV#Q1!khLH>G-f0SU6z)*&TCFTojx)avXEQr$dxrJBu3)tM^)v%`mccE5yc`-3 zqS;@6<mAS8f8HnmgY46fo&R}#{n5impH=cdfAQsA{)gX5{%6hdtYnL=T=JuFRAF-# zQrq3-f4)n_aF>eVE)~OFDu%mM47W<fpe%>xe^$>$NpR{QZ#~aR43|0!s*+qD#g|_> zza)88cB*t)mFLv5{>A%O(<8a=+TOIIYTnYts=mI9x2ya4WV}GH!x#%$v|G2g{>7_* zLX(S3;D>9ock5|gsP5ZO;iA>wcDjQ4#dlM#NCp;NyiV=XLY<~Nm3RUYq`&&e_1|Pt zW;ftwr9aGzM2X(@1PBzeCye-P0?BK^l^4mRG9PwNv#B@gpT}d80`N~!I|o5+b(`*e zE3D4w?Q28~Pc~Svi?q>C(#b+KE<Wy?Rl4ZdOSLZ5Rhnib-^^L>kcKhp`mI};J0Bmo zp*eGOgO;w_h`pJOlpZg>4HvF*@#*N@Y$|58Gr#kLL4VQ3?O!($RM*1mw?Jj-wH;IZ z`UR@GzF+0K<}6Hl!{cy^7H)bDDouDZQZ^*eJ(ORJNLpQ#x>M;M2h%K2=M6568&<pi z#fPtUaY8VsR+5vCB<>1b*j|__=clKLty!eXg||aZomKv(n4Sn<v1m`Jvhk#w4U)Iz zH$?gP`Jyc@JdhhSxfBK4pO4Wb?`D%n4`=Shg+5;Y!n3-}{Jc8aN&XczymZ@7X^yV_ zHhjIbG|68aKmBTf;m-JQ=DH{!x}W#sVRW7hN6EPGSWy$MC55|LI=Q|Jl~3k1?tkM) z73=3u;kY@w=QYp;C3af@3uJdHYkrViHUrdv(l>@jXJhO=sGS9*T(AKeOEf!6TExc_ z4{Iqyh=<7GrLr2XvDCDoqcw5UOFqucz33pnlo09H20op2v631FnQO#)O~WoaL7xFE z&yOvjfdq?US{}e2YRjcKhf8Xf_PS?lDD~4%o#02F*7n~=KfnSuzv6I2iH;bwN?jJk z4x(I*rf4&K3#E#_Wz`M3?7x3L8Jn-6BiXFH{c85xp8K{}`}V6DZ;hC|WhG|+t(8OZ z-U+>nSHSWn_so|(J(Lf(lQmn_j&TJmS%4&<tB79g^d3e{B8=cIi4^y9cA{Zm3MLB+ zpE%T1d+MU<6;gNdIHi$y_~I;*4Pqs8_C2z(S!^AUj>{+<fW)Qd6NsekdoH`4{4R-; z+=-q=GPGB<=TuVAl(xE;f{2E4Xu66WFJr+pTC;}C{Y75DLztZ~%sQ}opxRY?Dz=>B zbF)&QbTCk)QU-@(D^RX&)|L4xDD+iLTehCw%zDD(Qd3X;v8eXD?rhwwfSjM|@j;;( zCx{LK46Q#AcNt&U<HL{ii)%IAjYU=6rTlKD206OgO+Cj^<sMq({%QGJT5Gz=j_z@E z!BpLP4KzoaVHZvjcBeK?Z1ZH&56_#&QZ((2?p|0Z?r5uqD!6=0?1^LYE!jTsU08o+ z^y;D?l1b%4Ye(Vbr@4-zdo9byHtQfz9QH}mF)pokkl!mD9ak?vJ3)(x&+<2*S?zZp zcK0n{BKddOek6F_?Y{-~pAl;s6=pqhZO)XabT`2&$mm-JwBOF*q)3LR&Z!Q;sd08C zVcjWm6a~}iwhWPR*5a8RQ_A1vl_>8YaL}$BBjodyEPjHY1n)<`$!f)|V5(}*sE%&N z5oNij;Zeftrq2v$2nYw^%>Bob)28y6hwpL;`L7I%=YU}L4t5S<Vt%#1ecU}*_clEp zBg~JmF1lgiF%<LwIfJ&?Sg~1t@m1{$(XWE-5`BN&+plK57IhlERfT!o+plK5hT>4N z7^SrzruM_M`ek3f?0;3A>TPsLbw#DOqL#vIRngVH|7vCdt7ySgS~X8tM%5b(1*ck) za)GY|DDEq~S#pn|D&QBQY^d#9&-JZWS>c|naIbC+dv*<bb(7t*lig$R=Jz~Fb96g( zN2&fK%{WLmJV)T`tEWgs6(dN`K1UuKT|G;VeV%cgYQ8QXscIdiQ&m$(`DE4f!yT^r zkG<1X>7hGb<yWQiRe4=LU^RWO9<plhYtLD^qUu4bmar!cuVx-KE8P4u4%@<KEjm8j zJ=}0krV;gh^{Y9D5M#T^F%;m*nv+=jf)69VP^>TSgyA>|SmKU`+FJdA&$Go5cM)EX zNl^}pNZCaa+>rxT3YZmk_JmfjKf2Py!K{tTa?xUq)F1K$9)nKkH>9HD&>1Ug+s1VY z-!LrA=U0ue-Yh-$;yu|M)hcmEZGS0j%2PXihF~>8&RW;cqUOY8#YUFG)wPq4&l((7 zuIa*dh+jU-$LZvp{c(BHV~+N@gv|#ovFi3|7<qAI-igN33_<L?0EOqIdvfJBDBjCO z5;eU#eBWDjoR=X^C#RkMTIU><vMT0WQc*?)+)Aw~j2_ZxX)-LP3ws*NGZTqCp0l=% zYgO`C+r|=82u4by?K7HA_OijIJca=Q&(lmFH!Ayw2J=<V2x?2Rh;U0i;#j(+zWl2= zv{uK)p;O#gbTU0XMJ9Gx6)4O&+%WDFIl9OPC_Tz22*D$nM-sq4`die5Pw~|xDOwU! ziVjL38Q#b~Q>+u$!=<g-Eet);wR?DZ*{aT6g{4p;0RDo@H+YyvO5@yz5~b#|_O2c$ zH<)y>E?+6l!+4-kP8adp^kRBpv2=LErfR=BWh%UL7TtTaSt?|BjM7L$ak^Y<bbsCD z8?Dq<iIFlphXr@py7yX36>*75+P$YGzv6;3=E&d$1&7d{35U9*+mEU=^o9E%2LlE0 zr)hpzYKj4v%iO!y`VZ6lcI1lqWgrfRLup0#{aN=u{0}=o@1Yy?{irh2tI>MfmZZv3 zIt1>3nKy1i1pi?LzV$dNL@~yRh`G%8oyI9cON`l19ingB##mZl1Fb5d-&7*D$(7&4 zXVZkL9p!~2qL=uNoG$-?1P!NLkb2OGx=`|KWr*Aqt;HE#`4=&}!}E^`gQQYh>FJdV zcaX!(;f9j(zT+0upCs(+t<a|XYG=E5+-#P1w4LP^&FQQib+2iQ(H5tQSAKf1vbiK= z>oUG7qHKx{hbthXlUa`D^9iBV;Hnv<P`jDlWvqx#GKPid$D_EPPOcP7>KAi&qiaNp zXsx5saEb~{%K&lmd8i-L>}RW?TaBLQoPF0!d7b$szs!u@p(xd(8?T#r9q^g6QCPbh zRA(W5;O%{#Z>A$G*)2R9;i76lQ*o%s(VYM=WCUVf0Fn#WkjXn`mnhm?ZPjQ2Jq<}| zk1m!6TFc&x_&M!U#@)JCB0@{Ld22N`Lc|gBI#>I9o1LqS+wHgRVLHiv&s+DFzV!dX zdw1yrZ{GDU-hcPrU*CjTzo)PPv5YJA*S!ty89`%UeAZ@cbk9z0ws}c#OTlzfGhRqo zg*xk{g`MUEj?siT+WZu#7^{OsrdHXt&U;gC&)=d{7d0E!<H>>4{0+~=LdW7ZVIVv^ z_2*=1<{??CKOxu!P1}yfSXgBB;FQepaN(lZOJ6(u($Yb)<uJjY)On&j+k5ux@cWV- zfP@HP7S&|J<JK-NmG?auN4&C}haTHw!*H-4LSdI)(nS<gX7xDa5a;;VN77*qjqTc) z2N<T<)n%y&7%0t3UkbyYeMSO(;`<zuQmKEhLvx!zoZFq7wR^@R1Hxo7niPt-5)w=f zUWG(0{!qWq(>4mO5{OTm?hIO|+%)U)o^G&!6_u_lx`JxtPx)ra90z)Gc~0`uQd3^6 zu4*0)5o_;Jz4z~<=2FG?sL%KBd&s>X`T&D)tTFXyUNfpznW8j)i=$uV0e{yQq;~h? zANHGv#r<2~lG4__sFs6lsiN$6bhegUwv=0(uR8A2qA8g((=I6>=t1y-?$XYO(hPL2 zJ3A#qLo#ru!XBOHm7_xo;uDS=9HiduSWP2-X^+aDhVEF%#tYG$sC%@OM(HP!A=se` z0$5qXkV5`1S;NB*x`wype17N47=H0jS;x{{_R$aHZEv-*K14_?*tX3^U62*Sr&+73 zx^*Gnp|TBvL7HS|fY~|q?Lk%7s?^wi%LJbKC9Mkxo?3zV2{VGg-Mg1&#Poe4B;RRW z_zQTmiN0m_CN1qz0}J=AQ5)mkc+b#x;|B+G5^P9nVKbUM!DJjH!(?J6X>F}${;51i zNkv<sN1x_u)Fu=|+0XRBt;CX<!ffn|7~q_o7bUu6;K9lG%G3dTaCFD!#x$k}*fgBO zBeC9vac<XoO${eh=5@yn`$AJAITRi4dNQb-Y{`z`&qCFWk~&x8Mrr29=;wfXlVLv= zg=3VxHW*QIko3ozLeGstI%g^|IVLUWu0hqZ6Txl+G8|gpG1X4T8H~88Vw?!nqMmn? z0ite@T+!;P8-oV@NM=I-T#6f~$6ANOlFkYe6CyZtNgZ;gBp%`Q9dux;;`Dk0%_6B8 zbZW|)s?1j6!yZf8#9%B`1>+R*YJ6Q9nmMf|v7MO96p5-jwD^?i<c!|?wHzA|P&fQy z)`z04q=f|vm{$i8t;_Sc|JtN);gCh~PW9WeKZXZ1_44(B%WbA|RCyjYqcked1wA7X z)qdk9#h#l?@JelRm{N)0*JjxtyIDOsHd|KubH@OGw~S}-7Dixddlx9JWqNhvTP$Ct zi=10E$T(LR@^20lD4Z^@S++It*O`00xd^G7l3rk!j<3`AJGyz#*=$XQgcBUMJW5W9 zTEXC}hT4f@Hfzuh);SrEfjfqzP-ltel%lPbh2H1k?Mt0Nu7PB5OcbU5woN_%CXSG^ z`5R&Y;Y)5Hfk-wF#G{!yPYg;SIKP@cm)2<*2-Ovf*nCNq=TrR`9>QwXa=q)pBgUZX zWAx)>G(<<HnO#8k1_7H;*c850o-Vw^SU6_(&drl|^Re`2!h`bh5}&mPa>!g?y#r>z zWbZZgwbAvaEr{GJKV>UUspPfE%B7W`ep=bAf0L~!oGgRZMsu4O->!*qxrwFbCuzY` zTWKq0p!r#Cd=u0(vs}#p<U2<g{BI(s*DAaBZB;>ez3*0|I&b|T7R!^;7o!vvOo4xK zQUQLvLMo~Z`&=?o_m~dfJ{^!d5>p{D*XpQ6d_n1@n$rH!(ZVv<OHPovF~#DpEkdiJ zIiw_V^lC}Fgm&(4MGtFfSgFzR?He60(rAgQN$ZQyGp(1?oGnJ&?8s_9zXgpmXK5bw zVtF|(`Uu$HiAU)q=Ggt`>6r~%)~p=^R?yQ4%SZ68Eo`z*=<xgb#h665vZsV6tonhi ziw6AB3ELHc&yyoA6^Wm*1&m{_;maZ2D1}3|MSH;FX^|8z6{HoB%y&X92Z?(_l=GUX zIRtD~cv+7)cwP5Hx;$}Ce79#sc9}pr=il*eCd3kE_%<kII?*8&9$EridsnKi%)vgD zqu|605H)>W_x(uzM%o8MMT+@;rjbRVSFaJBkFs%~3a?++>ZaFVjrXf9Sq;sb@bv@i z;gVkr=UUX=hp$uQEE|aa>`c?)&@N4fGvfD*wZjaoYVY^l;M=-n)dADn`#iuh1t4PP zma^ocuZ-#<JL<+Lb+wx+lD^cj3Gs*(kJl^r{uQ@ly^qtqS-rXCM%5_<n^3;_LpCAY zRoCnp<_ARI$vlDl_%)Y^RIBOc@1Ax-Z`XUeB-El&WO{d)>#%oyz1JSSA?V?3$~Q~( z{BiZm(ydLi&u^q)9txY_?T6pb{*Pw(_|51}^iQYMP{ySf$Rf26&A!ojn?uECkO?L3 zAA`Ez6vnmg#4H88LNtpw2O>&!YnsLX$Xjt9FYuA~6wd3-SpeEDvxicD=L>PEY>bM6 z>e{VwQ%v63yQBJ8@AN96U9zme2isChACc3Xd1Uo2zkZ+H=<eREk@2p-to`eLflJ%) zo;SR+Z%lgl#tyQT-ENP~V=O=Zt*xW|XqWbHL>WK8PX4`9OeLA~T*f{QExj4=v2O92 ztq}4+4}V)R`r!g>*~5TX%oS!!QruUq{^s>x@m8!2{?MazdwO(3K<OF&DeNNhds)7j zku~LYz2U-+7+CLGWwb6Q{E+4@J!t6Wtim66#TQ5YuHHKWp)I`pkB=VyZ1k_JCq8X9 z)q~71`^$eCEVl(MyROHoxocWrt-uY<YBt_oH=xC_$A32?nt@Q>Fla~fID|#;$v@yg z>&B_*Gj^QXiE9>c)@bK5ME`=rEdx*Zqx}Gx9<Gr{+0~pm*2e)!n-LFbcC8(q9f(rD zTj(HJf?<dF8BKZ&<h%dnn)GMJ+0KjoP%lH>|G@W6NRCNhbwxriW8S%$N~X+1$R6N+ zwH%CLeX-X3X;`(Dt+zZ=Pr&rD!_ixS^<*}!vjk4vy7Tk3|1IA`Ay|q9xYzlI^uuIi z`7pYHH1l->w>;cm{p+3X-&EwAWtQ+D!+w`%{(3d+3@WhThpk)9U_dTfRU^GUq4xOd zCa+Tll|zi~kDS%4R{8Vw43$sQG-9+ob#aQi-S10@5V7>Oq~t^7T$)cyDkS4$vI4)A zEy$tKy@z7yUz-!TF|oR%Rv&;`EzI7`aA14S;or(y*7`8q(1*(C76zsHpqVpdV^P3c zB7bd{ZkH6!IandeA-;n5(+H{8;WHm47o*9Qts%`cGN>OHE@VMR#HVFC9>cv<gW4+S z*y;zM5ya6y{-M3lC|Dv&{xhaD<%hxz&&RVVkudzt9(Q5kvW{ZbG6XHV`){Vk;zOs? zo3U}Eh4}(_weRmF39@nM<5(0$a}__n3496ZAlq~-ChkxJ8sYm_hT|~tM(p;AUIGPR zEO>fxG~}xK7o%p&cM2@qZW_1C5LcZYv{aggie<p2R=fFpSo{KuP*9!-Oi|O~wQBMp zbu2W9pJn{c3Xp57b~;h@jc4@c`SE6`we#t?=ee6#9JHvC-SqTS39Bu=u$I{JGtH)- zm5z8&TUX0+InjUoM^q_i24G8hv6tFA*fwo-bkmt{HpQDcYTAOIY<V~yy20ES#go_8 zB;L7NSBdL__xeP9QT3R@9Hva6by&qNuwlXh>D0C>hOF6>v>MHtnU<KT{v9^`!ij%n zYQ9=<+m~P4{qv#Egh?9Nt2eaRZhx@TQ{l$!rnx&$bI#L;I8MLML)4pRg_x19bOyVk zHO^qN^kcX8X-=z?YQ_`@W;U|f#FKlBilipREX5HGEZ|x?brWEcpf*fe)y2&)ng-P~ z+iUBO=cyS=`^woj=di7nV_Vh~Ygc?$^`AeNH!*4b6X)_8s(i!QjghHAPp6?z;gOd^ z*|7;7nnfGoU_erj{vN-H4X%6<%yBr24VQLh;VE7q*=>Eqp&)vA+B8#s*5cUrW!+2Q z`zF;!(bnR*1F9Y(Zb-J#Rqt`hMr}qS3wZQTTC&+$Vg45`SvlRq^{35Sz1ys6=~j+2 z17Kd(?xmT3lOnAE+|nk=8PpgR;>Oe7a2cPOv=yBDEeZqL^x?e{){3D&@gz^@ORKHl zbSOflZ#tT)yX9yaM)4TV;!Ql9Cc&F0hll%n+XvWAXT+)LVsbe@!;0w6qea7CrLxGO zzCYdG@9lX<;GR^twN<_~Ry_r}*0Sa2tP=>x(X@o);{sD>Reay8xKu$!n~xfl<p!so z7K8LGo#-2n3Fm2Aq7KS@-HX;AY}&{7w>%bKd0ef*XK3Zk3NiPaGkRuE7SF~v(W<nz zVODeg4d`Ja+JrZnnIPoZ+n}M!{bs`6v!apyEhoESzE^_RokB{uV$nohUB*{F`K@F= zUvgQ~=O+WI4V9fW*xQazDp1g#dUQ;DoW<iYKy#uKWYgwEH{2dl)j*{1hyeEs_6h|4 z599G!f(kS$T~Rn!UaicVA}=}ooUAbAZw&ois)Gvw65~uDLxGcZw~FSZE#D#*k5Wr6 zke7U6Ky$wfem18?QOrvoi#SoHGM6)|a;4fb&cqjl=GolpY<5ZF{<*(BwwZHpBhQlv zfo>Z*#-27JjV&tj3#1zwPfYrCj`QC_l>gU3cmN0a`+%HG#FqLDr`hNDfJKlmQ^DW7 z*9@mrV)jd(zs)|eBM(3SoCpkUOrkFRmRrGNmrMiwu2$$xp$}tQVG90m_vfSk8Kx(i z#%lFZXT9@itr+*$<cVr$7+AH_e~&gE(4Wsf`;7nn@{91_2M^Z2c<{yNe^_5%|NP+> z>kl41`uq<M)<1u={@@SMztlv^U>?|i|3&_+t*u2rof0?Gz)#P|`I~f*&}D6s^u>~d zj%boz=S{|(0g_+Kf$kQ<^Kl)Z)7uC8$48H%Ve*#lHzYG#<7{w00{CnBNpDwDtM!xR zpCw7$=xUsvoll}>zZE@v@Zj@R`s>fpU(<`II~XQyA}JT6d>jv>mq4!D-`~M!=ab23 zV{Ps7^0G70_p6umzSGYyO7Dkh_Bt7)8D6cW+1lUJi*&$aZb$;Nh}*~IUL@l;fEANh zNAwj2ellea0@^yHYa^aO6T#uh2~oQ-WAa>>+Z~V>^l#2{LYLS8IE9)X5I4QcIX99i zA2?h<!JETelh80oc>y?8-53~(lMVd5-YIoWmdHy^rzm*Hf+z49C-9T#o2f=6;JtI= zCJej~gNVQ}z&2~K*j%5e(f%+dk(ra!MGvbTK@vANBc>xX&cU>we5AgpAf+`8^8VCr zUVOJk>yZO`k8WPNV$*n7xQVwKUVj)oxJMm^s>`6qRrWBR(yETx`p($;i2zX(cSizm z&L~El3F`vh7c%BaVY)>vzX58s;8P+OR(?9U#JcKcagdgyaf&@O#wN*RyA*}?3)LNe z*X>2U!>7kDw~zKB`uX|M;rHF$z1`@^5A<>`+J15T-QiL6fB)}xk6y2=(3#w&|9*(} z{`UN6uh)wXk5Etd+4KD_eMQwA(G}m_>$Riq!Os2*<eqIuPhK2H2ZzVee)n1Tn2H@A zwz>A|XQ=G(Y4mLGh`5h~<LxKi{qFG(-0IWr@c~+VO8wc6o^Kx=cXwXwZy!a^UmQI@ z>``B72)o_h&i;1y+1@TsefNOcjrP9ZJ2;Md-x2TT59-Mtb!hv^{+?7xgWByL?d=?+ z>-v+_u|qRLec5kEz2|#7UHq{3w>|3n_R$Y*nt^EN@SwN%UoWT-y^MCZpKX7;*Nd9r z44|&^B+zv4yg1r>hW^p8doP~!j=RS%j`yN(4-a=SyHRiN==<)@UT-tnKg4`Ljb8Nj zxMRE9$J^XI)k2d)B`~NLy)I7^aaemtM=zcqcMlI*(RYV0X%?ub+w}D=&*$L*#w@#F z4+uO|HRgk7ydAy#ZjYWHVG3z@$4A?k7_j_1$9^$t^7!zG2j|8c9qfI(-~D#)U}p~n z4pGs|Zf}p+=%a2A1-jfgEj%^*g2#@9p}x_Nm5tfv6^y!1qwU@AyXe1`r)BSTb&K%y z?R=-R-)S`dC|+93f`2W%Nay@<gKw9gPR40+Y6TN$OI8KFYrD78?V4LkZYFy%;e0X! zOGlb-BUH8ReQZC&SE;DlN8{u)8IS3}64gD=2TWn1UcAy43<#0bY}>N8AYFgP*8)Zp z4v_>!5n=cwVSpn)?JH5lG%4y_5Tg^lU1?ZKKuBhgOY@Qw-ls^e=LYA&N~f9HG3()} z#bm`)Oifg_VVaC`W$c;PGbuSmbdi~N0&T0-iLz7?i0ab8_66g=#ghpnrE=rM56}uz z@7M)Nl@l#DMv)ls^HPAD4QVx~2Z(Yo>`g~>9~9GmKPd|R?9iDbP3G;RqgO<$Pty!* zkqORT$8Yr_9>3<Fqg7q}L7oVZZ9Fs>v%&JExQ4DG)^zBHYK6ruFvL1CYPUlE%5|pv zfVz04E@g$z3TtVuq`t_&D^sx@U#Fo-Z}}>n(*4BkuQhb6NOnB3dcWr{j-eaa+kUpx zkaKsCTy7WrH0^0p=I1yqJ(<*~Bx>7@R+r$Sj2MpPXPpGN&TwA_E2o~EXSr@wfi;sH zuyq}``p0r|TAdyP=M^*}s?zCL>#fmW`c1SXNoS~62z?ua;#LV_wT<(2AZyqf(jT^r zJ9sk-2;Jr+$C^JFfPY36Wg+U_Kvo~8g_(uHQd!Ar$_(O3ytKr5y^RBfd4-`pnVv3r zX>|NVt(?&}Bn83bo)i5WGKXd$=}q@!i^=|?X&A}Al4-Jg2)YcNNNxGR4IOqyBq9Y@ z2#qXuRcYv4CnLSlzXu>XTag*qWc)PD7~HJ9X$$vf+#tWHWDs7JjkUTQZOEo}6NfHw zi#oBhdgLiT%-(%>-EGGyrtdDh-}16kJ>GlVcJbY9_j|wXaIO}(>}W46e%n#u-|D*C zkFOv`(t5`5=(R-ATNyLy#xY4MFIfdm4cM|j{!BOFuhGitN;_J)z+Z{|DaT)9{B?!D zxCjhk@9wVO-}d@d;&h{%m-o86c(KRl-o3xoo$Bp9x>QRqZ-2)we90~-Nw!&oWnzhZ z0_eym-+y6ErwBgdTM!mkLEJeF45pz&myOW4?QO>w?VWJ<Z*<+&-f?vT9W?K9_(Si> ze>-{ZBi<(6Y>;w~CGn9DWG#LXToL$Y^McshnHPwdoI@X%;0_52l#Jd%ib(IP`eA(N zTTwC;C}f!A1oc@D6L9GDtDHpAZAg=EIlLpI=)FW#{>Zy5qsi3>%SJ6Cr%`@_{ie<& zw-;gm7s#e}X7hgs`~L)qRX>3F{~G)Mm+PN@_NZ+CUw`=7o&Enewf~DIXIBNs(Ebkw zV~1%dC)@2==JC#|e`nRdv+Cbj_3y0ucUJvdSoM7l0|x#-rl%yD8-d^@E&JiiUgM9W zaeQ_Wli0y-*G-&g&e63IeYXDKLDXvekxprP%9qj3AxRMjuZ|D@bML^2klW9@IA0n| zA?c0i4~ZgtogEXGzjKc4Ohe~9T~|*Z&fB3VJb{Q%!J3uIh}$kV3DOpi2e#S8+w+>6 zUGL%P>5T_sVmh=6SGlR+`#q$2T3R~O=_;tb>uRsovfu3;FS$yN;_NJ0y76>#BvJKY zKDxHSg2b~A*q&2=JfV}mcg&*V^}{aq=`#8#-9STpy<Xo3-gqCf52Yg^Ta>9r=@drZ zF|2EzF5K7q=&S2pP(|fDysnNmsBds`cC1x?pc>DxjTWiS<ngW6r(YbtI3jXvR;9;G z-t2m74t=rUr|tTdC+^#7AA`Uf)iE#9xjEnWdN-K18yxhSrjF+?c<sV!i!<K&4f_kQ zo19F~aHx|k886V}?%tCZ-@al7h|lHT0bS_>RC1P#_0)919L>GCpcI>m?#3G@eP^0X z>-GyBh8^$2>%I%Y`Y^q(_P3YjwOIi+o>Lcf#?*Gp%ARc>{pa2hR|b{+(oF{CeM=pA zw(#e6F2~6*iHl^R0Z3!q$$2xv#+O?RVrjxi05={0$yx)|{oiN|yiaTP*3pNpQ98IE z7n2+B@}uC>g}*G4<n>J!G}VaanjZAtuc{Jh!__T>+GuPS9+U9dp4R5+IGJ@-EGhOL zm6}=8&T&s_xQ2o7YXVLCE*Xvx7+FKiPSfG=$@KJ;=;yW7PTWA|9;Mgmh<IThwlc)U z;x*rdjMcStl)yrle1P_9FQfe@Wg>j@`s*BG{LdSeeRGgpHp?O8L4&f~23>nCdRDg2 zO_K4cdY`FrPD(c1W(iDme(mKb&d@*?lq@BaM6I(B2*tkTgB8JACw8loxWIygXRUNo zvdD^|Evh|X+J{n>H=ZAd42cuasQtV-XNGAJOwE4YS$o>T`ZbSlcz6R-Z{6mxEwM%H zWfJ8Xa*kur(-DBNfV+{82OQ<;mbO4pJuNnXDTldu7D0zLC3?qty315t0EY=2`Es0- zD8CeBn+s0lYt?oa#)rl(<LcvyHBU{6m|$5=N0%hObxqN9#y7TzMY)>&Dd!BH^;*(C z&w3ll)-#Y<m11>Ox17yYU0r$RG3_*2P-gR8P}EEi%XdH{@T|Gv%W{+a&|vR+kCtr5 z--T_co`A&Z8SS_NrMBFQpgpg`XjY@DQ8}ayGv@fj`lidpN*yS_4!Tik!s`pK#Z$8g z>Uogmmx2Adatv!|Y|UXaXVaNiSf&tSptnBJ-cS-c4=_jru}(I}q7p}mqSy3q$r5%p zsT)85qA}TkmQ5}i<4?r%VRwFIWaUB0FbX4ss=I`995CIC@{_+O{fS?_cZO`KE&GAi zWfrr(x9aIE`N#EB*dNrtrkK&3Itb`kh}0$(ufCeEUWr~~%c>-5OIea*B|QE>#kS3P zUx=)IQ*dQnxNUdRNjkP|+qP}nw$-t1+qP|E$Lb_I9ox>y|8{THeL8ik#_M`mb5*VR zVZfo4G;nz<k&4z9bHUus&~T`wd2XNn8r6AsC+ykx(tI-Dj@+Pt_XzarwfmyOYmV5p zsA>O(g?TQ3^Jh(dcZo=D7Cd`H*OSZJ$R}gBBplr1qj2}R7Lu7|yZ(5>W{Kw&uc{L* zo&19wT(jao?iv1nreaVZ;UI7&iDSn@G`=5&^!2r*hmSjj(=|UEs`u=ywKC=oR($J! z)Nv;*x9rl5{KjP$hWuTOt3G3KzF0Y?*)v?vY23uX4F1@`)6|l4TcUHZ_|B)9Y4pC= z?7eN{<a;EPx}c&kR5J60<#nCdg|{L%x(9y#*PZDl$#KivBOS6@NA!au1kiN%=?fCa z5PceuwkOfUd0K^G`E8eV#$6=mJP`Vaud%k4OF45^d!|Y&5NKocYWVWPY7#k#IuLfL z`dnf@wwQXJ^crYXMV0a|jF}4DmR4PM&Met1Nuh%SZ<gX}PVw4dC%4n=qtYfa-N@|R zku^{P!YmE48d=Z&-@+l$({F!un%f-n(lw{lKh{u9vPM&FiaK{cwb5FAq=j*Xl^J2i z2?EWRmn#dLq7XR^KU*~f{c%-|4(+8?4p&oHr7mf=M&5xfD9X33<;a)sjfE|vI=Awx z?xC29mr-*ebhoG&@^1wW1*_4Z(G>JrP8T$oYQEHwuh7>g0d#4z4%gnSa}j$!JQEaX znjtkkYm$mQ`Ji$_Fo85qzMca+Mnt<ymb%#ZTOMGx3ql}U#m{R@*jgGAGQtB|6VcY~ zav0E1DgWwrO=HGUyV;f0YSLAem29w87pN$-Qc5x4Z}jeKUU!=+W60HgSKq4{z}}8T z&vN8S1>5S{R#> qAVtO7~CqN$>|_?9z|wfOjN#E?7^8*e}>V-_^q)n&){n5*sA~ z6!l!AEV?k$P}NUs>91sEk7dTybm_w%yku{#_pHEu@A{=T`OI_LhS!bb3x)c)I`Q36 z_0^W{CTErr;ZceXJ?lvNJ~jD=V4~9Aw}mqcRxNu%LM;HkAN5wf;};JmLA<nejV=Vn zv}Aw2=W`qx-xCgq8a@EJ*BJ~2;oq~?nI^^G@`$ht3JVPjuCuhBqr}arDq?&|RQB2- z1Ti18(lEC6X}EsOlQdV*!SwG+pHfu<;FfwMC1ufI(2B`u<&x_0ob_^2;kbizE);c# zW!ijO=gL-bi>LZ$ze-F)JroC@w&b^P1tZLanB-Mm8=K=5Am)`ULM&X!8yQ|%`1qh# zUu)mT!7MJB(4YuKd)K}B_^M+EnwE7FaV%nNr4hYRx}89f*IondR79Nd4IH5VTl`f1 z<+b4_k0O5B62-*+-a+LIW@DsfJmFL@Ev!<6ec~K!NwV5OZ^Q2gSLL14P0vz)WXCFc zKN<ha<GHNz18`M@vH5#EiGA}J(|^>u)2xxeKgbNxbII(OnC^Z(cptpesK<P8WJ_RC z;HA_(XkAJG_Y;Ho@Ya%a!`#Q?_E)-VQl-KJ=?d{t(2LCYE2;;$@z&ydr)KR9foNsJ zM=b40VFA^XaEOvqX3A91>(RA)=<(Rm&g-A{8Cm(c@D(7sXZyD34v<F?bGJ95JSc=P z4j97`W}r0C*;gY!^@^xv@!$Vd^tr+MI}c@{ADFKQ1WJhHbZ~AC@*fCoPCE+sdEDwv z>D4~{`o4@KfIeKfi*R$6?D_~j*dl+gd?w0?hd4wf1|YL9n{Zm0h$7FaqmLuxj4AiK z!xvB;1;B(b*9|BUNFB|naRAAAEyUnBqn?WZ2d-)Q3JsoaszngjnwbaL&)WgvId;$4 zMV9ce_6+>%GbJ(Amh;vA_AZ@D#Ry77umYiRan#G<ff68KRS-+*PO-l_7(abft)gy_ zMfa`32fO1e+p|-`&LwHdX|{xpapcct=`se5+tk~Bi_W8L=gHJG>LK^}rwv*^nqbRg znkG%aYb1qvfA{u7cR&RTwBZHg#Yv#^N8b~j?`pa{ScH^#6!#UK0X9NKAo8DWx%zbe z{X<uGep`%lj2*Ro32-Yh5t=Y$=pV-yTxi{2s}GzP#iu4<p><-C5$u4kw%|T}BN}Qs zdQx0{=Tv#b8VTX%=2b5SYj`PIKns5nKI_g9Y|#?*yRjL}L(ye;<*$mBY)q9-v)dTH zB>H6t(p2oz4yG|)Ybz{0-K&dk-MqWf@`*KcI+s05KXWj+CDI3JcKcS1RjuPn>Ic15 zDzXxyaaHv)6-s~CZSi*LNwmJSBTkDU%~$X)pUKW_p%ecbSqIG1WNT(ZTno9#RCYgQ z6<??LUn9hdv#MoIL42|&gFozs88WI-=7Tqyy$5JdM`y~Mr(9|S6CF_W*{pXmW^V%# zlvfWnF|v|5{I(v`6-+;6Iad`SX*@2>gfiY|@_)(yN`Vs7*3Zb>*FqNDRPj~`nRdH% z3w+foG23C?lK=O%%`bL^l@jGIxbM!R&eyJc9E?cZp5G_$LGG^v!KWlVB1MHzJ8dhw z!XN=%liB!Eu9fUnYV`Xkt184nF{MJ5iQZ;`LZp4-2mddhJZQm|0yZv02+XQu8Kbbh zx>t!a!8ayf;+p|PNWQZg3P0pBVF@@~YcY$~LJ-Gi^;^z|{PGi_1ZZ>W<!iv8fJA}* zd&A^Sb@hcv<$xHahAUaNg{YTo$xBe$%{6O%1X;8V2@DZY(cQF3JyL2KVsv-_t~l0q zjtLW(ARp@-^78TGQTgxMk`;U<?)qI=Tm(PGiBN7C`hdEkKf1=1=e(Afm>JU6J1U=^ zmbsG(k>A;(_bFieA>6%8S)m=g!&`Z!ox0T(qQm>nXyd-R@I$u;2_gkyRCx3z76D*Y zG~$w*P0c8)Jlq)tE&7>TM!fvxokXl!ucJyhDX0=QXI>Mbh;R?`DETZ?^nC?(XRbF= z%UEZx1F;+GJWWxF;h`rHD|GSFRv-X%V=C810r`Dpa3o-y1J0_W9Vp{NmROPAh-%eV zAsfO>Mskf8_<~fQDggu=j3ad?4tX5#Z4_!S-6Pj=&PF>l441+;2nO`MX&{T^jQAs| zIH2&b(V~a8MZ$?rK(?XvF56y7XJ}jzYyh8=z&X@|BI+2o=I1Y^CCH@7`Gb0yS?4MI z33Wa-40{8)l#))7cHowN7~jqC@wX|{J8yFYDHrji=nCD&l%@71<fy>tpgswPy_Qb+ zUTo<VRo<=235Vgx-L{+HO@Yb;=9`H{4W_`D!Ec(EZ*9-ETw&HJrK9r1CPs|&C<_Y( zB+M9br({M6q5y*q-o$1xf6n*?#4$V(R|#u;?wU9A`O*|#Qe{w2+S_&z?}Z!=tWy0d zWH&pYDf)3jpwq~U6G&8fBOPgnquBHt>Q5TxYE|LvUiU#Kd)s~D&3oVno}d01ycVh( ze}m;xvLfS=fEgY)$T3B;44|0<y_N=CgE?Fb{5mP(58U7(^;SDai6s+T=c}b!*^q~g z&Z-3-R{;*AJ%USxEcu;ziEidr89khv9xp#%<yIdTQ?Zlv6whpU2<2OfE;cMPce2zj zh8b-=`Wl0~C2!o;Z6Tl5R}T%<#>Ek!fPj=R&QQpwl*0mv^MpyK0%6K$7VbJon9BM} zkFN7nC>>4D`3T7)i<O?(6eC4>2H`!lbsEBz3k_^_S5C{k7u&_|@Gz^06Do+}j77pv z6!{^#`Z33mG%z=+?7+6-xW$UtoW^PU4woiN@Sj$WfJ*ud;`V!7`*eJJs^r>~Mn9LP zi!A9-lN(L!BkJGDE@8m5p4BCXsQe<NYr5S$v8)$I34OR{!Cl2)-M~EVnX>giq7%&s zlnT+E4y}fiS0oTL83O5^Zm?60OC&9|blBY0e%Gp5KNFOces1jizDk72KC))rV9R+R z$|}N2CO)-P`+JnlVed_GDMengg4@X17Ci-Tlk9b+Yur+`))@Cd0%rJAQCH&!;_ID8 z3$8JaMSHE5jrvecNwWrs758kJ`O&9o;e6dhKRUykADL!ofbqXDS+r@gPHBTFGh}r{ z)**KI11vhPgr-xa6#UU8X;=6#^}QD06*<4qfKJW7tb-4ArM7fbuzM4eY>X_Ez{p%h zjDU<Nzf>8kEF0@eH6nCH<jp+z)ICNCj^{D{1H{)ynhuTuz0s>&uLM8S2P0K7u`v-f z>bb(Lwa+9rnRt>y3Lbh@3(AW{ZhPzvk6%<`*3*%C<tej-;jdAlA6RS?$XEPUV5!F? z^(<lD;3e!sM1teWCmYa|^F&WM&zJrplP3x}QYOlhR2Yodng~9_p3C%MJScwDq}!Yx zgETnc^EkI#jPMq04Sv)RM{MY|EUQphs}GR+8SCynx)z6Z;__YF)2jxWzQq;%Jho7A z-%&n3%qM*h(Or;rJJm7jZ<~tE1R`@Zrui7jX2&mEV7|_#_`c>shCa61R)VvjNiqid z6v~5`p?~u6w}Y<Qp1QhL7<QNHS)^ys&h!Y8IMLq)O0<}}&T0LUUUDM(3Y5PoxmQB= zSd~2<jy|mF8;>}BA`K-?u_rP)=Ek^}ib1}o=GG-MKf)XtJx2+IQAaEtum&5mN*+Xw zJNu{GhWBrks<@U=AV4J@f6VrDLb$+y`&fN4@C|y=F9hl{bCxUvF)3>F6@)Xomt-td z8Q2NM*#FE!1rJz<qmL2OvUM<jQy$a|Cb;10fvS7n2FP6>`P0_ohKPBxeS7=c{Y}NE z^$3s7)KIW$zDOM8%RzhY-lLu-*p1((eGmBsdo(p2cq3V@P7juD+}4o19cvawz7zru zcGUc@rW*xuQH!tp$|~*%q{ypp5|!an%)(Kx=(p28ne?rWa@4FvSG2l&)}epU2o2&^ z)Sr1eo_DP?@!MCiHJ7i%F!h+*1+|e#GQ=`wH?b?Uq@mE6|2+4~t(C|f?kSQnVwwNA zo~IMD?M=^341Z$vMW9-aR+k8Z`Wyju>v?x9%N}>+>?(<KD>k4?2ds_vzzg-ye6Dm< zu7v2kNgq19k!J!Gt=)2nJ>*dukXz9B9XRWSLO}XLKt}yucrN;4huf=ixl1r4SYsNo zGZaN}7b1lc276}|L?W6p9S1F)9#sx{e=z^BK4b9BX(me7mqk4_6TG4~{5wq=W0|en zkdS&&9K@rY;SfnuE?%7oU3yI^Qy`EpMUHwmDFds7uoY5J+3?ai7&=%k-c2qtU>PM! zzGCFB6j;9gZ7}V22Uw;V>oy>4g>HSP?t%erKodjhyW)w%c%djTPSGbMAVx*?X2AqV zIVFSVJl}b!h#WD}(wYIBHR71((iDz(A934_AU2GA{yHNE`5?x5Y)?~ISiWzZ3pFBp z^JF*DMv8#C{mIWXeRC_k@~|f0-Bx9kq=Skn|A)EV_}T<f(m7SyZ8{-afC(`+(RjXY z>S?0#)p1zkRnJ3=BFKYkeUaQb88B5)?a>2SS6B!m<6(-}rTP#H!%Iw^C5n`-nuAYR zdM8lZ))z8pJ%R|Zvp6mHBZ^#*Z?&>rU54V@GC1sl&|!AZkBES_*r$z0bLHm32|UuD zQZH57usGua_?li=%RHgFGRw5&ve&v6u+`8V^GOG_aQw6(uA-B+)RCg%Bv{ryN*uge zo^`ugdn_fr;aKI~4HU>prNBTuWz#<WmpMjM?<B9wESt}(uh6nHn~vTUCUnbb4sYWe zH7)F5MO2EqU*al>&V55PWKzf;*RCCL(Z^v9<cl%9d}L5Qep$Gs!AdPrS!rs@&?wnx z6MHXyv0CYNAPXIDWBk?i8~1wiI`xQHH-VIeHhi3|rGU$LJmiy0Qmhhgu+afdf%QNr zN~J!+I(}*(23AWsc^J5ds>3eksaV`Cae5}b_0ybGMV$W=t|O{62_*vBG^k;mu5A$~ zEE<akS)W^>ORAEjzB+wS5<|T=(Yg5uo}x#d^M)#(<*e{}az(S=u4T@8+Z6P{<5_YF zYy*77M;C1__9`2Jl{XoNa4t~763ECaJ+N7Rv1`kiRitli%zfm%$`<IfM+%S0FM@1l z8Y?FUh_-0i_)x+wQ$G|x|6l~}=ZM}dUeCX!okr8UqyTQs1*b*0l$+Ml(Z@Wy{^d~X zc}rJJ-J%f+!}INSc0a6)boM--A=Av$tdz4_N9@$r?$|}_%<2}lsY&{qyxYs{SjS_M zlu1KH%aic-(~gKHlqI&V9EJhbej`4~;2pElkGT!tO|fqLh<ddc&$L~%_ylFwPBYb7 zz=N9TXg5ouMO#+Wi*RUcK-?8!)pp(cB-0fzUhw%@*>;?PvMe(2_h9Hmq%lO_s#9<m zkqk%O7Bl0(mPwCtutHeYezBcM$h}(tW3-#8X@p3DDx*brW&5YPOJconJM=8PStIRw zJMpZx<gHx1K~GKXUc<Pl4sKWYT}p-H?)e_l=F;B&OSz-X8f6XvMu%oyrIi+|YL)6f ziHz6wU*Fa(&lml%;Wh_{xwjJk9<r~q*Y9b(@8v)LkNy7^-*2}~;_ff{{z>n3PnVLP z>TdMsYKy(MmZ3Y6L)~i&^OMEk`KUktiF~}iXo5e(xN&z&!+NJ-J<_qB>sqaKE!DeM z7}_UbtuW$`!*sdPdo{|+;;nO!ZVN5{s4F4m;&HitJ2I@rR=J6Eo7!uG*!~hmKD4XG zMAR*q%WHpvWZmypdnz=(vNCb_C#9ZGQzQf-Qs@mwzs;B|?(JQ796Z0X;8huLPvPXy z-gWc~-l)smJc0^U--==PY+d$EapEWV9l+TSm8`$|MagFR^6VJzJE23r>)1aoXdw+v zD@*I7giJAm?G7fHnHzv+w>hk2bpUy1cV*A*?IV$v=w>|ehJ2ZGK)c}5d14#9?)p~F zhMktBnnXM)_a*2=DXlSS_G1L-E{GMS$z9GrF&X51cN;l=wXj2%vQ2gxdLk=ygu2Q) zaJVN2d3wlut>&3W4BA~pNa_4bSs7nc+m-t`Q$$}+@NB>0!FJix^A*#_#_nf5YQ=~W zT|+Gu51iA!9levGWIwphA#ip2QV!Z5!(r*$Xa+>SoJqW}+Xs1!pNE~--usLs2|HG# z3MSNer=GozH<vlIBaN{+2Md8SOMsx~4VpLtLuVzj#CsM_FBh{<h2tlg>R{?N^q#g{ z$nLp8I<!3{YTfd#m@uP`-NwSJ6(Dtqd8Of{W-H`?_79B5FCDp+Gt3)G`!~oUqeZI} z{z`Jq=yhFRy*tMUgqyH|rp0;kl1&l}o0LD)#eUcGXQGNvf{aI?S<xekuTBs%j}x~6 zVC;}yniYMPcC6CQT6$XeU4|sdxI)MB<UkhA5qT#)Xjm+-QfldUmcN}4OQ2mIhYIAt zh!#)qTM9)}<>b&s|L+A>c$TrOe#Ld{X-G8X&}c{K$aAOru=m8&vHFH4^p>C)#5p3> zj8M60``stQsnU$ZnfPT?KDwSYUa65ErmT37#&lr#1=40go$no)K8j;2zTjD{-!8o( zDu;)b!-FFlba*G>&Gt^y1u*C8xY7}QY2dM`X9n!lDA7q)_pukwhtsnz1W!J;A!BSA z1BEzGCaeJr#;%~1V}&8NJ_C|%m3f*x4E%a79`oVbOL(M_Ld7^D(qmjlnWy-Ip`Nv| z3aRiq^IS3cI<bKqk~?Hx4eSSt`T(26Pf-OGFuen1^UMRTJ*DC`w33^XY40Hvo~TzN z5y9%>OJBk~ni*Pr9b4u}iPDjm2agvt&b|Gv(6Pc}_J64g_7w`c>FIfgb9w`j{f096 ze0oetB;{#jcrr?w0v0L}_Yer**1D1qCY1Eq?}`RZiWw-E$BRmqdREqqAz3NkGL&l3 zQWF@sA0<WW5g<}PtL$x)%t?pj6hA0P0e)Wk#0Jn3$|n5Kiuylg)ikKcka_vrLunA! z^tpE}7FYN|hDH~#ns~4P8bcKG0SZjmGPctc-qBEGus?1tdW@`6Z-+qWb~hwk%*XWd zYbr|g;W?Hj`G^!3_An2%XWd0P4asp3esR*>Bcy32+RtVV`xN}9zGy*xJ^$<e0D5L7 zuA{-oMTL=^NTf}G-Pn1m1{<eg%TGr}nSgRHQkc>2Yz1^2AnHfFe3AJkzl2ZoL+d{D zQsIG=n@-yd$XPwsAYFs@t^gG29!j=RS#mF!Q0>~Yl?UJ{wTwD2w@y+c(?qmqPO!ry zPdXAPrsn!ghZ;sYGuN@gWcN2Z<mVTd8}}X;t%-*j$S2dls**|bU!c&Pmce|R=D$RQ zn}%h~tD>pr{48@y405Of@BI3voeKGF8lDc)fbAPS>>y4(#I8Eba5v<m8C;qo$8odG zYw@)W!%*FEo{13)r;#=(Z10A2k{g9>{~8FxT+;JjGcuzbo=Jy*z`Xz$bgzH)ACGW( zk+#}-^tQ`5q_Rdu`gXRWUkgV<_l)qhLD)#>jga81q|&aA7R>1kFh3)-inmUI11`Z` zTP%i&UwpF52SIBGRpC+<ZK3@Wl1}9B60QYO=s4TMbu|uf-}6ehyRic5**j^t9u9LE z5;5waB?><Xt*-Ef`x$i(`}gvTR19%o)ynNEx)Vc@DO{=u^eMVAqRxZ%-A;dxRL%V# zst~}|uUH4*v0jzf!5-AEq{6!fXB0oZ&dsgyWpRdazUfjy6EXzI1+*JpDc~t!KIqAA z4;ssW`0({(Xgkke@GH);&tv?(vy=YYCGKksJr1uX?VX?R>vkdMYs?<_C5R&U&VP-3 zznU6DDS~c-)0A%B8Q$c=f;$QOU{v;0pGj0cnm%Sa9P56B?DT(wX_Y)UEjD$Vw6+!G zHZcMQypThmp*^DZC)MA3ezt6$i$!8{RzceF{Z0g|IfmMr#X!S$Doz<I%K|@D@R5RJ z=+Q!Azjsa!&qrC!sQx}tZjvAE2Y)Z^=x59%i5|Hacnjt}@Ob<kaV)Z^w}1DyoDcbs zY-=fl;_E(V>+ev>hI=J0vEq7Kp`01ef3BbDJ6vBey|&;m;LWz^&3N86o>c+g3S{Se z8RdSY5-{>stvOIKsRTfc)sa$$-KoSyQZ~{^U#lvPf$lLv=Ze&n$Q{&+-11=&JnX4# zZE)_c>#WBw?(>l_?1$a{WapYu>K(-8^1s*hi(o)juDVN*AH~`(OE6LojGm#Q%IHKN zlUKKVjfN_px<Z+7{PQOSK%Jwf+=Zg*{vtSwj%)lL%jvqqVIGxwQl~S`gefY*#3pjC zqC=sv!Xqm&kMCgg+xExW-g)RxUT6h`aI6Iy7}IedMf7R&^$_+LFlDnl^tF0*zz+{X zO(ZYDyU=HF8_vxj;ByP3ryhypiW_)y>u}=mbez>0AetGbQfTmM3R;)yQ<}+PJk&%~ zZ-{@Uxvwgmm|0#077920-jWNa-5^a_(g|p@<V7-!GO?nK8{n6JH0DD-Do$t4qFYKT zAc&nS-dXIrmJZhknuyIMynzsK+cuuRB*tfwf0~>#$?0eE(9kf|UnKDP9l>k4BP~NH zkFpq0Ixc@@+{5V+*&+W5PG)a??3OV>8_@6@+DD@Cm^!!gVn?pcT5WJ7(V<q5j$^pC zHRqQ@o&P6o#J_quzEmFC+}d=<Moy}<nEI7AiPedV3xi#zar=a7-U|qA$+yY3Vf@SC zqW1y-UumV85;f%<s!pBLlpUQVF<DwP7=R*fKx0S_L#eoxQ7%W%($e4Cd7|0rz(rML z;+KwoRa}FxyrJn#VQFcr^)ed}N!nhu)_iqIj^{k;4|cExGe%9@v@NrOU41L>=voEK zSjL*IwaDVXeQ7;vw2*%v4eY|og<&O~YQ1adT025?cbRfGQ8SA!+(^bcgF<&T5hyx~ zrwtVHwPcVWk|Wq>gh&|<;g~4D<00#I=aCof@rsJH*`!u)Axm)4Y-&1{&#Z~<W|5!O zRwjG(e{5Ds&1vS%&NNo!r{1;^@n=qxVcxpVp6NGdaskpIY<?80*{Vrd76|f01hgBV z<)!XU+$Sp|&_)DFta7~ev-MM|NsXnNUeh$}5ZdMB9f3(7Y}@2P5rC)lh!>9kqz>w^ zW4)R=&BX;Je%%O5vxv{bHb>rx=h(F>!l(X>B9JtXC~m?dB(Hb`xVV(-YG(o-NMjkE zq{b_b)TQCFN<1$ZP&S2}n#Ru`$3T9Gl6N&bi*JN2PG?RQZnC`Bx;VtXTezL`#oV9{ zkvrEPUJr}%%eo>BDH9XcL+9XpMH$)vqN!X<MHg8t^=LPU^U%?CoYa}t61LRP;9=Q~ zI_k;vp=&w~d{S?)K6@I=eV!KNT${%;7g0d`el_g0aqgr3)}9U;MY+P|%lYZ<4H!Cm z#WW*lZr;=@MV&^Dl3~tCK4{On>h=<t6g!F4he>U8E4aY*N@{^~dIQ(3TD+N=T<>8i zRWM6!aeXL6D&sLl&CUvR)&9e?+3_J*8$PmmN=fK$!;HVV6ktn4AipSCC5BbkCvN|z z=I9=iBYa>_BzD-+;H2;3#YMWb6?j>}1^+e2LP>DKXkWU8p&KTtC_%(zFMb!Mr#0H@ z@SYa&ny&F1ZyfQQhrPi@b-HSVm0>YmVuNf(Xdz4oYR&NZmiac@%crrr((p9<a9}z$ zuh(bAO&LVd>s;5pwUsGn*Hgdp2Nhe-qk5e^pH>te(ZWln(*j5%PP~_yVTIsG_pY0| zdJcq@VF*eHwHUwPpGtOun}+GXmF=-1#@iaoSn%xhNUimL0y+pru;!Q+FjKUwvZc-S z^kGh<sUlEdAz2&~nbPQcPcIa=y>%QpYNvlrE10oq3l$X~d@*$OC%~GBnwhJfe3<Oi zc2sz1n-i2q;Q~(gUo=wunzgLqVVUnQXODJMAHUc~Jh)^G5b0L<@-5%LhwRzkd?e?W z*Vk9{=e<2*uinpazc=Cgmv0VIUf1VsC?-N@77Gq~T@-xe*Ud;8=~rABJf7dn$bWaz z&C%D>*UOjR$INCFA<6**tvzj>J06YpfR(i;7pLxr)yub^dR?D<6eW_d41}d$_R&z; zHI`<e{l-e;q%rr)h$P+x^B9z!SfN!aw)EeujlNSJ4}m^@I~rf#;205p8s8paA6dTv zFI%4BkJ{y1@MNv_71Qob*{B7E-dn9$JWFNk#m6=mbtG+6TtF{v==sln{lP<#k3fgM zmUrM^Ap6bSLR>vBPGg;~VBdtqCsv$)?Cp(aSeyXFP>kP}yu6#TSMMwEQF4GolK*HS zE{vxCoT>Ud&YfR;f$C;b)F-ui@F4)Bj~#4Fvk>1s&rTT>;{8bxL>lVjI@`|jy$d?t z;*)o5Pgve-?4JGo_rIYYatQgS9i%1^{;Pu_LmsNco&imz^tzHm^Be74&6fne7Smii z{4#V%NS*sA4!4i#CL&@A3$aP#mlFV)Gh6!Uit`A_hEDm~3+sqSL2ZqURE{%y!{6@_ zSRxE}gqL@n^P>gJ)-eBb)YQ3Sq^4J27Rra?WL0O2P20~hGIjiGR>bPpW>dhlZ9?u^ zJ5=-IuK;KtC^DcWQQh3#)R2uw2xVyrQLAer*-{1|UBiSf0JrD9#e1xe-j_BM($|Od zbEPq;=cA2gE(kVub>V5Qus*!vnDc^Jeb(m+zIV)MA5~cDNC`rk{Y2x!e?9BHr9Rq! zwbW_(Bj<#1F!Wrc=bb13n+H<x2E*a-bwiDuN@Oo7C)#AYEG31FPKAuzvET!UrdhtA z=#vH`P9OW&mdcAy#~JIwuu2D5J=qW-vyz3o$i%yPtA3gadO6iCZBA_-!9=(-=T;oL zCnCMv(cUX5u@l>tz(im6?=7W%2@V%TGIy1h6tA{}TsH$v$k|B>X3yve?+P1xwF{ff zTM)TzI(CRe)@tjfC$y}T@sROltz>L~sOnS2F;xzwC%-8Z#@$6#-K1OT_h4v1N9oZo zD#6X^lk^v?F_$F!Tq;5#XNd`eJEm)8v!P*yjbn?6cHM<Z?3Cv_?W~291BRrX>}Hx4 zJ|WI{F&a~neL-0}_FE^sJEIYI4H%8fa=7yb5-kf8*F|)ytyH~}Y1CX=)~i)F-k?v* z;F)2t2hKp|{R(c-Y~B?SnA$9}=BMPloR00O&@gby=qk_B_A?y4Nib*Q0kdf1i5tC3 z$f1rRx+?3oWL10@&zVoiDiHn6^IYBeveiQQ*G%pZZcErj9@}mxPl=F*JzKs@a{VPZ zVw_TUB!mpt5OyA0Aj&O#;X<rx;iqDD)i89NG&sM%&fs~eO#$rG`IU|n1JtC?Gh}ey z9EzKjrNocIkTi%pqPz5ul{<`RuYe4an*uwufqt<|UDqt8C|(KhloQ$>3i<0m@om-* z$I=sfb7K#r5CBWo3tC34T_MLb6&6Ov!OEDH9;~(bi~#?dS~}>wqzVoxvtwpSXhz7r zilTGKP^fihl@Klh=;23^+zSJ5#H0`F*sfokx%L#*`~puK+D;GE;|d*&%h~0&_|`xw z+c1(~ITupi_J{3DW#4x2RLg5%r{wU|xc?hs8KQQ|_zB6rSW??{CQ(GU|7Sx+NuTM9 z1<wo`891q`$ac46g2hv+NdXC6uz8+*&A+u}20Dn(Uz%$pNg{KfSG&9Z$ISQ?EvICE zQNrJm@GXEFoq*~&x&_5Rv0bOcrmb1Ar+wqA)m}HC8O{kzfLglJlau2ku6a8y&i=r? zk%;<YF@ihw7#wC^@F&K?QV^v!E}<Z(tlsa#F|tT<^V%AVg&{lC9#`fv;;%ED^>IL3 zhv&%9Ro;x+P>E#0fPJArY_$}POVejpu70-LP4Vg*pPN3zaHNO-yQTRzdEL9$_kBB$ zD?#y@u~y`MKmUzAP7Fo`NNV|yZZX>LEkyGa*~plmiFdU86X;+1^1Vh0dv83Be8HNH z3~i>r(C2^9QUD;--!@&h<mDWLo#PBq`{mD~XX8MMU~nnKe(qN5;=l@-JYAif#Ytlw zCT#R=S~4oHky;+mV6M&-G{7y*5cfnGYy+!B*vo1+HUA?#Xw6`#=IF`L^DLvY2cKM3 z?MP9EaZli<S?ElgYVvnY1Y==ORdbG9+#uS~Fqb)nTWBN8nw7NhTpw!LF}dZHP~wqY z^1Y2a<Mfe+s%qu2Z|eJez7&m^Z>=|2UGZRPJ->p=KG`{xh$35p#!6R!hmtU^aTc=n z4dfho8F4Y$2d?7RFS`nk1nkJRJQa4d!GLDZt}jE^_g}Xfs|5+KvwXpd3xxx-nFcOD zg|Zi~zs((Vi?r-e<Y(90hjE-{_l$wRQv28;`)D}wGL5Pct=ShH&fvm|dJLi2b70cj zS;2LYfwB*B24Xrm*X4h67CW<7X8qQK?;o@*aNoUZOn!v9`pC`z_3M_`xAEEijKAWv z+kI)yziy7BAV}ZizT;>+{EohE>W;n)eOPv;wt-mUaeo8C#=evw;;efZ4>^qL@kg)C z{4j(x&~7^0?<)Rxcvk;@(mCt@iDz`DtmmhG{{;57(GQKKFJRN$)Qf)a^LrEh)jR*^ z!*{PqvNPtYfbUL#-^Y$0kGRDz);6%;?hMlLzXRw>`yIlIxp(-M3a{4@pVR+=Tf!~z zHFV&t<H0xD?!O!&GVD)4oxY2TBY3>jcmCe@^F4F-Py8>hPyDfFRla!S-<6%Sh{M*G zv)Bhuhp<cm#N!8MI|Kx*?sSCzAMrIxM;OE{lE6I{4}bjS*xc6hW^)zPCFXN80`nF3 zK;P%n{5k&W&+`uRiGP;I>*4VIO|{<>oIej0j|9zmHzHz7Wk#`14Fk$z`bO7TN|F0^ zV)6Jqu2qW~XpwG2;Z$w1{6}BZYQ4fZplV5^8kq~Tt>Bp5e24U-u4TzP40n{*+X(h0 zSIFhOA$*vkRwvq#ebe;G?2%Nz=D+CoS&WJL4<=c7qu=VV@9zk%<msbR;LzNt0BR5T z&>G~sd}9QrOGt>RHzpp-5wRaT>>A=Za*-w;k!W)*5NVLVSZw<<;Qs364B&BgU_lu} zGyg#D=dg-SY9D7d`dwS7NzAfz@vAtw@&}Vx=KaFY*OzDw-RVL2m*$@(qzPjxD+D-} zJnP|B_H7=?wHMVTE=9c;+46LuF{2I3{xFtI`T(d{2C2gl##w5^TE<Pe6Sz!VaS}#( z2+t+_#pU|cy!RZl2EoP|l9(`(o#W_eC!$lTm-+8u3p!+ae#)^+W<*JZxjBOTzFf1c zG8O6qz!8ZxQ|h0#VxDY0jYrO?*IY(PbQwa`e)J{hdi*{t;w#_$Ip9Oe``666EV(gW zX<4&0kZ9y!5%xEGgd-7eN)7m7`-QB8@ajo2m0=1)4e~{2F~H)TwI{q2RI6+Gn3D}< zgBu5#KdD8sb>`swJx8Sfx4%+yHw{)y4g6b}TIw&=4gKpVtTxBv(WKv@sey6>mi%OR zE|p_ht@wvLg)f-b_b33wQ292WJU0|vX&hM@C7@{Px8AQ~Q1fiTAy=p>9qprg;TR7G zANR6%jq?%@Pb6k^%0z<v&r^K?U7m=ddx+g9ayc#C-Hr7*E$}5!tdRr{Q0arFOX}bx zXudchwGbYL?#Wmn8UdkR{;Mem@grQ$Qd`EdYB)%cYV(97L#NQIHpwrdBNgDHBZDO} zPP7eyyX1t|Cs`dRTD4yzwTy^b5JSCBwpxNx6hJ$=9B`9wr3Vusr?9@KnpHWC<amQg zo@Si*axvc^ogB&HDd8bIO`FSq?z8@a6a^fwn2$D0a1IeAL3(u*3PYH5gdxFaZ;ztg za1lYoF;2E{9!~t!mCwKtyPT5Fd^9Rr=)bHo4^ZqUM$(wPC<?k9Xv1EZ5;;64N#TS( zfs<q~<|<|~7um{inKzRft*XC*O_E$}-{%Bf=bX4(O@(RNi!{5`^a(+}C3T%Y+xiYJ z6nt2Ix&*0ov`v)T&Evv!yaF8zrPCoZQ)&k^*n}N*$rC5e0|=Ehc6=E*mYH>U7XSyr z-1$k9(*63zwux<wp@KMP4pcDq3G!pUJ3w<lG945V?!75}!mXwgreI-suHDz_7G+%m z*K^*RJ>GViJvMBdmEmHMW3IfNI<V-C{$%^($|8#uYc7N=H%TU#w~q}Mw!Wuava^Mp zppgZOmmHlj1|B6|Vj%dCS4xg>ce1zSZlD;CnNgxV$%o%)l{N8(V@`r7P!Ijwm-!^y z)glg|fwI=(tUHEovFR=%-iVX#!%-)@?K%7w{6v_=%7NO2f26GWEF^xMa)>dJRvrch zR%#@|a6_JHg--l!JEtdTN6-A$&1g9M-Nh+Fdi0ubcys=K;>30r<{B}%b|71Rh>8rD zeTCY=2(t%5D^-s*_Se;0@#^}7F(<7j+|SR?<=NNW-Jad+R@mizTd(<J|G8_Z==kgN z?*(3uo@T+`<)S~oh_}DDU-RmjXqb4+Wz*4{?rZQVN8$SM<wJNi&iQ%YS_$%6Y;HG4 zEF4^%rN~_8n9BKc{fz3FIqZ|B%QK5tt9$bu?nmcGao1no&wx$u4PHJ0ZTSlF&4s&* zBH-n><o}}R_$8|7D2(^?--4cT+veu_-%GyD%@Habg`|a@CvS)`#jCE158rQJ^2c)e zP5H;CVj-+)yC)0#qjuS+fY0Dh0E+_q<EG-(%Z?m6|M`b)+-tY*y>M12?gh@`>-#D+ zl?Z*&_J#T8-^&NA8EY{)<nFtDiz`eov7w6|k45fFygrVds9s*4t$#1)7r4IiRev|5 zAK|@uDCxbtZLRh^van03EX0mkM{f&P|8*2p*<2kTk2vd?){OqA^t)afvwd|*BTum7 zfJr&ryFP|ciR9env=gWA+blW~PiMngzFA-+D{}W)+U9(WQuH1R6CX>!Hg>6hy6}72 z><P-@?dBDsrSIzLL8FyS^LnI}rDT6|%G&T55FV9Ms5=n1e{1pVDZB(&ct5?-b<&1l zHxKvJ+Ck(t=3IU6;*P)HIBO-Ctk>|WCQvfhl_y8s1^mU7Z5lX`S&&raf_EZ!oc*y# zz?V7el?l1dGZVqtWztfEwjKWXr0y8dT=XfLDI3v+tz&v4x}i^cXq4QHT?WwiE1-Vl zk%#W2%#A}fk~hG!0w98?wN&cbRONbzRAZ&neRf;0Lme8t%@%aycEp3fzA#1Tw-vRa z3(wL>CN;or{N<N_ty?eJ$Aoo}Sq;+@Jbw4fM%?B=UMB-5W}P5cFCwvG`YG82uCF1f z*u2DYeW>UPvUkB0L*MR|J0@oQ5cFOUmF0R`Ir=hMP1OYfJ+!>VXYntds_@Vey7uzj zq0bb2g~y8Y<DEvj2L8rWhb8=jEFl*2combD>sR0rH}@DX5!&LfC81$KOIqY5n$>d- zf8i&R9^33i8ZsVvi=<YFgjLHt-Ttw~L;7K>)^%12+}k)CG6nS;9~}kMmyk;tBRB_E zE?qUmlUU)9(`E2kP`@SQ)fU2w()jguIZO_TOK#i^--^0t2Wc^)T3yEMK0z-pC^bK# z%k9_qJ@!G<`419Y#82bz4q<@#g^Rl@E~A?sW^m{&Nyp#kU?IR6?Ntug;NU`8gBc4q zcX=J{Hhl0N2#e|xba};o)#5RLy>#@GqZImiu&Jrj)$r)1+f(9QCNSm1teLxB!567T zqP8cWyYGkaNaN*!j|_5=(~naoGWQLY%HpM-+<)t*44gUDi*%Vv5P$2ZSJROgIVI;x z4MZ|+M$p|vKK$tsR0%*1N0K?b=6T?pt!yh(Dg`cJv0goS236*}bpsH=@qLh<^Z}#i z!ug1gX_%MksBZ@J7Kf$RbBXETX0!{}U@lY~V%0;xp5)Kx<1v8GID>1}sm;tWga}kg zx|%6&pm^ElN0ahX#a%7=FPMyd#a`;UKI%`TKK1}f;REP#9)wnl0s|pn<M7{-kEP3Q zn8PDNR^;f^Wl~`A&s3>Emf_l;vvAgu)|J6rR<|h0z4nsg?RPQC`;!BXOkilZKitJl z?kpH&qffecG&0E@vRP1FzV#)R31RB-OBP#6(z1-yXWv^M5)efUL}B(26ay5ANxwpo zRwm1N$AOdd(vc2wbu#qE&a!#8XJsj0>g2mIqy-z+bjlrrb&iejOlo*FuACJ9y5>vq zteCR5uuYFhcj_F}Pj_V%rb&z@ryO^lE^&s4p>r+8l#=c!XdUM@7j-oloB2}ZRjEYh z!~&U8t5fw>H4o)lo9g-Chj8P$ih!EST8(Z9>}_3C|9bHP;Ka$Xi3^tp-l|HFIlPmP zm<gNJ=#Yk80NR8b3%^b}Df)-NAwKRm=|U&(N|qdvJ|Q6o#(3Tmhtx-ei3sL?$Hh83 zyE3%MU|pjb?BfoD<yV*Z*@~VMzlo<XKXWRIhqu9Z1pE-vFmmPNuU43jw0zSauqNB0 zi3<_O<e;bUSzyOodKJmV!$pj8$H;~D44m`JBaalANWS+jT%#pZQp(lPr6TRP1>gpn z;INw^AYmri2)2<Ua#4pSa3_%Lg5uf#){!H)kgVxYoQ&krgJ4x<w+R^6-`zS!7i+-w zXf+zpfo7r6V2WX0YwaS=E_3ePZ-0!Nw`yb$Ah~d^yfk!Wd){)Rs+5WgAQHx6U+|lf zU1vMVB^C(Cc2|b^qxf6!)D*zxH7&+f{Ref~L+ZcijT40A4Y~`G#`KtnE^agzG&VFq z+*2E%)fe#>ISRI|YMa#yJJD;rV@gVv#}@qA+v0j_s24i_YV0FRk40|+9MLAeWExnZ zjp+3NC0p@W-<^)8z37fTy!K9VV<X|r>r47Eg~n#$hPdX~ZeZFB{{m9`33g1Me1uWH zsmCW)V>EW^m3X1ENVuo)DWL%^4)%FH>z$)8dnLfP@-wB5w<u__%P#~ivQpm>P2F>T z_aozUgmvcJFwHvcHD?%|g{Z0C0d3tT-J(O^vUstC7O-mu)GY#>uoS=QYIDy`fPa{K z6Aj-c*GA((qI^rxHPy-KA}u&eG?1-39?r@P4KwH5ZME0lIVHolYpAi~&LYXz^J^XW zyjJ%cvq+(cSrBRZvsgk)Sb3+0o${5%c*v^O)3sC1dJS_aP1Q|1>v4^Zq(|$QN$e5J zhZoXIYayAdVTXQD-_29r7xqV(HZ`RGbTES^vb0;zI6`CkraWp`A=*k!Cu>bp`V{X8 zm249W3b5bg$=!8h+JC&(`Udt{7-}Qlzuq>!P^+1vZu_q$8tDwi)7hi%=WqCpul7wA z#Lq?G9Ih{et@S#<D210v@B?pisw}8qO#!HG=m8WxLBt(Ul?=O50xo_DnLC+M=`~r3 z3))-hKKMl{qiUq#WE3k@7nCZv9~LVz<B?G9Z1Lu%&LMXA<t60pyXifg@=~Y;@fxzh z6}TEttJ$(nWd!=wy}jcnY)yOuN|#4Uw!HDeoyh8$_S(2uBdwT*&M#ISxF3rfI+iR3 z<836hQ`rjwE(g^&$T{weiejOU<~N-`#@s`?YzRW%z+K~I^_yq<iyAHZw_tJlqqnbu z*M|KJ1c_SDWhYm-wisX!jbEaSe#!p*BbM>4t#r0p`j|lVw=**yjvR#i8xUhig#P_! zrY!!~3{z%bW~`^zqjpkdS~?c*!aeoV*LF%~%txeMTLxPdT`(_lm^$>Ahr?K5q=m!% zUiw+t2nh&Nq^8B9Cv)VyF>uRbX~}3x1uu^(LuTy&EY~WeHF^!31{l80oNHEPGi=J7 zr$qJWIzfQhpPca^iI)kt&O^>px;J<f1DnqEjJ0$)G&wPx=~f|II5b^8KMsBaW^LNU zj1>PB=~)IRAoVQ<MLm4)k9U4j!*|8Y_9^IvQ-BkfWfVoE-hhhqfI8UqWW20vFin9) zXwQ9b8@e~4?asd`1kIZ!OH(+5``D`Vq3CO}{jERkG1qtJP2)aF6W<^>5LrTl)2;mi zC9wOur_cyE?p5y>ZR)tclqKGb#_v}2EYuxdZ@VCCQ-X8otr+9kn_uP7LUe0^6E?ey z9AK-y&_>@`lUFe%4v0?S4y`K7qMyQjnyeK{s}@{ikV*X+QBOi2`M9><zAa8-S*(DX zKqH6zxFNoO^&Ob1^>wH2uQw7GL&<>0HZ0fzgDSXcebe-t*?b}H`HAr3k3arGU$d}) zh`RGXJ2yZBaTys+-@XZHHdCsSeu-W-W93jK+<WEwDTu#0`a<v(Nps6^Z#zMw2GF6( zusyt=b+2s;^u@wV)-|DQ5@pvKPJ_n(A_S!32c;b(Is;#-F>MJvPHme4?HwqbqP82B z_`*4#>A8b_hTdTqL*k2mgHZW?7Da257%G48znI%zgexSK!V=GG|0t`^^4_>-<eMTG zPRWj}3)5eQv9*VcK01MCnyh!F#r5*N(L4EV<ZHR$213v2+8U62F|VN77g%s>nXPhl zr?XjB58UP+@O4+mdJz9iY<%(-Pr|eaPVL$1asS$}?Hru^u>&|J`P)x8GZa5RRnBMy zTg)3#{)$_aeGOm*o~#6Y2Wq_{ezc_Q=%*1W-n*SGkbOC{JaGDXh&M_Fl_=I5DL|cU zjD&3P8AvQ3@&-KydvE0PK|<S_$efFwrh8hL;w_)&4GL9)(1&^J>SXBJ$z_lO_g=ri zQR><YrSaQ{FWrk8#PP#z0%`N-5Y=djh-;3Za=1oqB@g!Jlc=|pxD3H+B*G7qBXFj% zL;4U3;Gvjo=%!&lWyvSKb4XxS`v(hzIMnS+4Ec{;I^551Nw>m}qd}dOx)xlE9K3^M zTXK3GF&azDP1oV4Vonclvs@m!&oN`+A6PRNRzu4l+NWoYwcbl9hqwzdt4naE%<jqX z%H~%!LOUm3zr9`icr5tWJlb1?c(pD4dp_5JkFTRac}1z}^8khS=d`ekIX1pcEl=qX z{K9i{zjget+wzZ>(If5Qhqk^?oH~AXnr@WAzct^J_IPYD+7BV0{<#~b@mbbiKQlco z!Uo!meyt>wGERhnI;uoT{F!+eEu;iWmpx;A(_Rc)qUJ1kgvp~StWvWJ5UmW%0@Ksx zq;M3B1$!^F=q|35xeBKDKGJj5P?d-RfyG{MoBZrp(ZM(0L@>u|?TC?kP&iH{a4(Au zy42A7ll=&;1fYl@Hn*AdS(CT*lNDYKrk5v9kk@BMIcg5Pk<`gF0;}fN<9nI~MjYA8 z@6MsQbL+#l^!-J+wYU*dV-B10su>J90;Yqg;A6{FG;{^`K?6bPu|O-Hc7?AI9_jQW z;zcH`g*2C<dAFn<Ffk+uM-G`Uxj>jVjRts%S?TPGFroyKhT`-Lv=?zzBm|pbk5c-d zuHbrt5*leU=_{rY&m>eG6D~pr>w-Zhimgd#icMWki2sTd^(fMEbRz<kUFbFM+sxmD zg5@NsfY!h+O2-z_v!I+m%cHaSF{F2Y4q6HqG_FK80g}C^ftq1PBA5qQW1~N$X(r8( zdq~tGkLe8<HT-@FKBqhb+zS=dgx=9>&5Vc8fJFEXB(NOi{i{K8m+9emuW5t!>{w5Q zeTSOUOmB9#c|$(8(j=dfLE)kHa%7vea!97@Zve(obLzKg)khgy+p3VzJlI0AWGU^q z2C)wk25Cff$+xrzD4P~FY_%}53HsI$1(06q^~ee48oWV<5cqzl0D|j;tEGoi%U3kD zu@g*abDJ;(t@p3klcgajQw`OI<oU?Enn|s7AY5g<8Nx)S8Hb30V1`Q2d*I)Ln27|5 z5i$`H%F-gI%Yf~&kTXTxv(_8b4^3`N<fp`NNY95Vi1b7~r-2sB{@RmvEsE@bXuF<5 zXCT|Bj5l|o8pbK4^oU)ELfY_0)hENn9f2vj1B6Spt>S@#Zk^{|?rE8sR;50M`v5aW z%sK_>#@rz7ws4zEGa8J>0`fnon!j*W^#_D!Z5K#z$e`qk;Yew(!hf$2iYiD8<RGfC z)iCg^PlJV~xU(ImDIq0^jrJ|+;G8l6Fb)nh28J?zKRP|!G^kr0QWJXjQ`}T97HdTz zGHAK|9wI$(aA+WdV+z=Dkx6%P#Z+;m>+bp3vAdlw3BIckaa{k*>}XOwgKgOiJ5@`* z<j3XFn7b9T95^-@T!9oOMhQEx(?^$m6K^iM2GDz^Loj)n<<aQ3NLty4>rVz0Wue&W z3c&QS<59Hg%ENvbCRB<LAqKf<pGXqvBzT7td;2fmr3q(vk6CsZFo+k^O-o5Vm)YPu zco_rWflG*%4yB7Q?Fz4oTbG^av&&HG-rt8a^w$l)ni!ulJ$xTy6omsaQGUFN%p(vp zFN)p)6Em_xUsii@lBZiL!GZu{kcaWf&0{Ok(f|u4NIL}=0dNGRIDPKbxgS*$E2SeI zu&42a9_$u|#ZJt;B;y|_x;4vk3Eh-)Njx=jYHN#`?C$TPmLLzBo@fnO={XyIJEU4; zSX3I}Qc6%^6&JS*N!9-UlC^0_2S~$Piv^vq2()bTC={BON1fkrZwf9`%+1kvBCykt zjln>SQ)twO^6>MbMDg8trtAv4tRMIFl&Mr?W()hd=e3w^>C4eNO)!<3>Sb7?QwWsB z_WV<$@V2c8H692JDZ+(i$b2a*cqi}s70Ei$G^<atVN=pI<e-9MYoli~R7-_QW|}dh zFEA0K`m!szv$rVy5z$Q__sk>F#Y=zGKx&&gvCfj%zfDN=e5X^CP2b!mM}dj`0%xnp zgIjmET=#2`$?KD=rMqM7e8$y9q7Ip72YT1qk+lD*q2!7*dX@KnwqEKYlJZ_CV7<6D zWtz^Mviy2*vS#)wOI=R!5S>mHt3LSq8o%n#<Fpgt?M5;&$4tdH<E-AGGS92C+qLvI zEpsr9Cb!>^>^7wGPqd&G7|!F7LqhE8-5>Kt`Apfm(E4Cb)<N#$oJ&%+hP5w&6(fPP zpAsUBO{?@8WuZPt*m>R3PF;(02<nk1DyYcz)R;my<I^vJy8($9yShRiK~Fg@-L0M2 z>rn*Ig&y-N4c^k{bTT`7sOc-^B9ZAQ`*YGy2Lvz@Hqa=CAzusD0T5*}0Emx;Hva=^ zK$X9oatlAQoJX}>Ch8dv6NAHGpvm+O0*$Z_FZyWj=;-iBRnKZ6ilkrc@u9A7zQauC zXE2rGL_y~o?!mlDx<LGGGd;y-&aQ}%>9FaMKENXB^t*?$1pFo2NRmMd+=Szu{3FUz zEeWZQjKaXJ6ZB{+g(*)p=ogKK2qCMHiIse0c^~`a!3^G?bxkz*UNRx#KG*=0BU56C z0Qga&j1%z|^l1@wK@6nosYgfO7Nl`-+;^;OWVNb}NJl86h!M0m#>9ZIshsA3>g8P# zJB76v2w7u5M4j2uO=ZlI<U#~v95E7$*h*>Kd}FBKcrP6#63Cax24Yor!3#RDVxEbh zWC~p55`x0gl<A&&F|xXWmbQ>^v51{O#Ya$`2Gtof yi}Hc3(6%OMHB#fH0FpUk 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ᛇ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 literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/C/dist/libantlr3c-3.1.tar.gz b/antlr-3.1.3/runtime/C/dist/libantlr3c-3.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..8cbc0ea53c138a8071042e1dedc3c0ec75fe5f13 GIT binary patch literal 497875 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%0Df33_m_+0Y; zHWmPUO7j1+C$IyaQ~vLhulc{fLjLcb%Be<BvoaXFy9m0`M5Aat8HvujPWrCOx8jK% zMhQg%aDvSvzAGNNLK%o3Y<{Db_@0_(=_SVL(KYpeQb+$14u=K&n$D(80ua9TAODcF z-xV|wxs_BJes^%RfBf!r<9E|6yqts}4rZ9P*+z3VIi9}>o@{My1|3K3V6B65r479v zqH}bJCi-$sy8+3MCFxYfp$9-?l7&%}M+_f~tDdo=(Wj;(DN9v%(`GKg=)K^Oa^%z@ zPD#^_r0p&+M+0GQL_APQpw%Lb){`ioCj*9IY@oWcD?kR2R(u;|tA$gV6;VIS(hTD_ zFmwYXMV2wvY1j-8mf)s?^QZVK9DE>`>5A=?&1n?=Q$N5vX}aQF$!8Q|Gn$c~%;}b@ zPq!vvF}P~AZrG)`<^1(yqv<Hcu#uXXQjfp`Zm|-RIJe{eyu&W1`DoV%`FVm#7ZE%3 zRvgB(CRr-49o;G;coXLs&vXX^SZe{Z2u%@mIPdJJ@135^#?fo)@(!B3h!bfnUw4b> zxrsi7gQ8~kz}`WdpP%rT$Pt+mEApl?RGXNvF%>hfr8RNC)(sEK1E-DGSvq+mdq;Nd ziX*<=nQtBgD*x+JZJo1P+i9P#*gNagER_VSoF_#*zA0Zau>p&l$Gfn#=7|^o9)sJL zPR{As?%t2B)@4-SDLhC%N|^m=fw$4xx9&>K;*KBQ<iubSRkbg4L%%0KbW20)^VZr# zvaM8h)tlXuAJJ+ivw0Iu()jN*oi*1QCh=qcXM!W}f%drvdhizIvr}}@HSg|ljF8)N zdUc3HT5}vucM9xZxo2sT(fZ;+x$T?I5hS*077f=J082K(p!g(zNBqW!J=2}GecGvI zwmBcHo603<3VU^O!xmT`gY6|nh^chY>3njLj&F0ht8cWfClMgDlbiO^it|z;NB>WI z{kLZa$49M5li|#tQdx;lQ*wxyu&A|Iy_PkGxg1eU>hb7w4*Jt4x|8!&S7Ae5!m#ru zZIRVNEU$iIK0S)A+f{FQ9rExG6nU&|+h*UN{;+$}-$zz?*5`!tj(Am;k6bO%k1$7{ zOR76bFCOrVyh#7C4G?R8*~o-D_S7C89`Ci=IFt892mh0f+6^D6p*$Y7+P16U<x37d zrf2_vO<{*kC=g*hj)wH}2A)JTu(v1)k3RTiW21$M_vrr85G_KoHz6gq-1)=kQ_Ns2 zPWMDwYJtM{pbg5<kW5j^TciB2>zMJID1%MVSuj48vl9my3K1JLNSq%d1emF{{;|PQ z2Y34L07XE$zdLzuDcrE~hSGaX>8);1Pwb}esSriWC%Ng~43EaA2k`Ytzu)$bL90ag zRtw2aRJYkMRI(+yuA!|iU8(<v-$kw--+HNYeZ6~l+TW@FWE|$KVbJx_!r<SAH+kd0 z&{t}ghO(E=k^(>2Y<TNJHF4NPi{4|dBrhq=YTnC4U}!CQ&#D4TUR0Js4eCFd8|6%6 z+a@pSNoXNtKr-fVy*!E}406KfLl>UEk#tOWm-A_gcoHdGQJ8;_#0Y4Rw}=ZCzzyiZ zlWYVzVNN{<Y}-KoQO+)XM}8_7O{nA^rtn<`n`+*O0=bhD*_fgK6k%8+GV;yN4)M}= zkzgu(;7pr{2;6HtU$)uGNrTpoXJkWTzRbThpFwGnkK$U#6#suT&Ld_)bYhvYDFD%R z#7IU2tj@s(QhkR#tw36Iuk*)Fxt1uVO(Mdk!+7n^7@}DbU*?aw$XO`pDP#>csA~vZ zgZ*V67cCSp%$)I4a9S<B<lHH}I>8*V`djVccXgsMu6X(9oywPGGbViH{8W9vYHNTm z{2v=S@vME?jrp<qQQ1HUpSVBO4z0$r!ow>+X#Bcjf^`}wKdWoRSBdFc`_tkNM9D3E zQ`=9IO$I-1cveebf8os!HSd1fQ<O1%o7u^mv;L<+G{tU!r&K>|P_eOr`bVoaLF#mK zGxWHzEnk_njX1wozjZ9f@CE&=;UzWp>TB@tnm1it6W`>2*SzQ&fAK~6H*kx(*D8iu z=abU2#uj`-tJi@0s5(~9d<WmjzZ+kyHC5T~Y9FuI7#*jEmTC`Gv)Qn*ojNKus%E^+ z>Ymk&#Wy+A0L)Ky?;A~?Ud`(!=ouGKj^ck;U-S)1@TU2pI@dbooo8BoQvJHDkn@+` zucePP?n{Rz0$zCvC>oiG25hHr%Xk^_9)Xe3ed&kodDH+Em#F}M(ZF!QQ}LA3Up)KB zh8RaywI-IdU}I6Bz_~u-w*~w0(5QndaTuh~KUzJlDq{TB)7hY@*BrY(XPnT9<$Txy zgRiQ<(j*27$8_3eF>t}VyfTYgQ-QC!JF6+Ex@P7Q>18B!$COs%XoQ|(On1{s5m|$m zL7md1t?bC;`Q7p~=~tdm{}aE{sU4NC7vy#Yb>)^3TIKCk2rcg}Ahf(u9qVjL!}YWA zF&C4RmSNB)ZBkhwTU|8QxwB*r(5S!%uQCh!Hpoa=@MUq6G8H=$(qcI1mAAjqM`(;o zwUJ-=xS6)3(2;8cprr2BBQNK+s=NF`(bp70qID8URkU}AV3!#&O3*mCX1%2I*(R|i zXOp9-V`D%N$!Ah}86#IP=U5{*O&-7h8pSwRs~}<CY}AQ(Yp}9MI%$|QXs^H+Gb@yO zvv7@e%7VFbSB!N>;hQt1w<FMBXVW3}$QULLs*+~;IfUnZZpP7g0hGDI!|%`~;}~Gx z9Gt${J=^=CzYlEt{n755{>}=G@V!#k2&eFv8(_!1a%fA{FH{q)R$H-F)s~H68lQIT zlf(X>`fTl|a3$vnN3zl*4z+QfIiarjywDfy8!i$(0gL84?nCEMD|R2%WIQphL6MjH zcjK}NnuBmTuq&|%%asD3`acxqH{#O28Eo76L1K-ZCgc}ujmocM6zJP!F@tYs#7;9g z2tU8=Gu^*IPEDP)9Q!Ig>I6O)!%PEWi8#HN99#DAI||mOU-3tH1V33I+SUd9?F0U; z(mk&o^>63a_LshK2uM)p?V2U)w7FFv0T0KU0e)S1zS_8*jYosG>(H**n~gIlh=_#_ z!bJ7Mcuai1476w@svua=IP|i3djfm=bvrMHaIbcQd#_3sJ`*#z@OTTrF$TWP5;WnN z{0>UQd}v_l4ET$=0<?p_B=<Ty#tY#NoG-!(AFt!xjFlFB3e+^<@gU!vkKD!b8T6QG zHHX^wh^69Ncz(JL1<~-$C8;q-fur~01PkJ^B+K}zx#p3O36-cK`7}6aFNvWi)8GRN zf_t3v$qfG8FPrgZ_w+}5THP$nA7D4pzNWQ~KEaM5?EzbQf4Iwu1FbejA#HVbh-D&y zJ&0seu@4^NaHtuCCTr=*1uf~2{tYc9xwL}~;jfBUgL&x&XA-C9w1!>0O>^2#2MM)h zo8GHFly2mvrC!p}2=xR4EpxhZ@CWER<^Cu)U+EzKKq}D2!x#9IBe_{=Bo?!sUzuR) z*d;x`cb=#x)l%!;PMIH+(dkMnQ>b<iT*_fD?+?$!r|tgE>!pH?w_egtD{yD5>(#Dh zex0@%K&Ruar~Q3r(ORwAY~5N`yD-b+QzABhkrgY^#Jtf_RcWPR(TRHb(#Oc_AHOy# zL3KkorhhT~H@&&i2x#5>9rnxOT}GcS++p0EVrEu18Ql(MZ;@S~Nb*J7N|Vu+Z!MDT zu<NFMMcu8vwH7p6-B<NJn4RTbj_!t1Lb!WL+~rwBa765i(QE6E!G07?16&2FIDU<& z`=Z#<mZ(WSgU*4B)NZR_iq>run&|S`vuwb_WcvU%DKC(4Xf<3OQfZq8tI*gM+yRAy z>g2Z9`KW899Ev0B+<U0<0Vlsb<V&CSy&fqUZFx>|Uc7n9t2GDE{}Q!N^jdo}dC^|* zQq9N@CLv}VLjy8s9<>?vs)MOH_R`cZ%1j!LKQ?nu*@P<{@g9d})!IlZ3jT^%Uq%SB z_V7ky6JFn^1aZaw*fDhCBD>=8U(^7)a6av9G=>3)-r|6{8NOq!4>8sDrW6hI^FyB- zEl2a*z#<ZFP=PL0b;!wB8-$mbCR1?GY%d7Tr>N><?_Ko267m_9#KCsh%0ck285d?| zT-IQk=6OuuZUMb`mIh>QMNB6T(Xze;>W@BDQ&rbWzv{{mM_!wYHE`y5LBceBIUOUG ziN4%6WyTBuw=_*?%2a1!?)1yhCumqDr!uEwhpy3stUQxRG>lQOjy^%(C_VA0XEgN_ z`koTor85-rGjh>gWhtz%luIIsD?;g)KIf^J{LU@{(07L9uNmLDIt!Lw|w5D&M} z09CdiimhbYHnsq@1b8s5j<tXk^}3fT^;C8&N^|Q$pk5yFAJC`GD!0aGEz)~$p!lk~ z>BufCXtP$hSgz0BRH1D(3~Z5#+c-+2*z!g026C*d-`=MMyMKq8tgx(7gp@OKjj@B{ z@-`lPpaLS5B6GxJ9uXP<Mfv1d$!;R$5XXpwpR>!w+i)eHLaisP?FN{V5@bRMMNbq3 z5wG0B->1kA4G!eBRzz?@UJ5FYkV>ejvCHQs+<??B6Q2t0Nv$6NnPl_7ugcvZ&<z_t zN(oM+<Tt=Lqc#U!;eb2q1-dB#i0DLsP?Nrl4Wq;YoT<L!*e$qWBi#fNZi8`9F;_eo z#R4wuOaBt>$|J{C+_*Ul&+9~eDW(I@g<(}0?Ey#GbK`j${3c!(-vyiAK6vFmG=)IZ zWI;%njHDz7G!c$OoYm<gaco>JCP_W|Xfry-uE2Tf6{{EQK>Z}{ZCUYyl+5;c>xnOf zDZ21THv96ub14^_3B`8&z9lOC!g7%uqjG&1oS7nv7nFWx06+5bv^cbsZgIcrq;rt? z{>FEz9v}SG#%mM4j^q6)U;G;yo^k^RwR1<`<vsrOvi_I2tYOc5hWpwzJu`D|a-%Jb zux|KBFBDG=ay}{FkY%@<oVxnlosEVVtGiB<MNggoJ2D!?EpO3Z0%K_=31XY96nMAD zQzK50%G_}2SjM}8uikNK@^ygx{iP0z6=q)?W7U)Iaf2^S1^8$eY0U`-Ej#w593pQi z2Dnb*BN0R*dM%W77lG7GdnTs6u@mO*D=obn9ru~?lbsEqX=5<;0hza2rPN^lWN!>p zsy_TkaZe1p`C5s93&N4YylX^td|8ejI&*G$*W(giq_e`WNaZV`RD~<dX<4}`u0X2+ z_&KAD6`nXQOTuu~avPShRwZnndm+CBg?vYPcS<Bchyq7$O4m{S6kAGZU<Bbf=LS7< z1J#@6gaHR+;yTSfaAk>EVdQ4S{_vA~O4%ByeK_mm$FnV794D_qWZ^x5<i)}gjCnuC z!p}nj>1N1`7-xam3j!xXazDea2?`sPllehcLjc&R9w8AVxwH-*Dn4q<Z})=Jv`bZA zvLRz|$!GoJ6P5G@w!Oo0vZO`~#*BqeNfvmrcp5!cs~qweui`6u;V=z{Z6laDJ5^pT zB`DSCf*Rtp$FbccqWSw2<!P>lX3CgEHp0&74zJrcv=`l94f_Tfh=&6OgN{8zNF3WE zb3LnDD9|0FT(eCFk@5Lk1;H0OV*%vF@mGe;aWYNt-AmLZgsXd#;U-s^iW@+Nu{RPY zPs9Eg=d^{J`2fZs&9JaXIKYZEV#^YVRq`?tF5gL8j!^FPwA*uTCcf~<lr(^vlz?*1 ziAR$QOw4+VpoTtO7WQca$sXal`qdz$a5oha<MKzc1<Bq=h~nW01GZp_+=S-wQJT(m zbf4<+Fe?*C|DCd;EjdD1Zikw<$M({DY*lvopcMJVm*9jUP=TEPD_DbZWXjQsYZ>cY zz_L8t3fkzlLoRTD_G&)zGUdeO#(p$bsA}<eY_PJOeU9aNwGB0HVn@yf>S$GX-0!8; zsy~jtVTF7c|MNes8=qtN-tre>qh*!4ES}&?)vUc=<fdJ`ef{v=h3`t_=L%c1!Z-b1 zJkn5`&M&&Tg}E9LM0H{ILeZ6Y%~mC}|IenT8k`DEr080VCPj`#gFH24N_C9qy}(vb zBJ^0?K4p78neNKUJGBHuzzPQq4g@Yp%pL@ET;!38jK=rCdig4!A2)a#bR2_Fi>siw zBnpR)PR}*uEq$n770Vb@LfNT*M-r2dCdTQAbGoks+<vaLpQ8nhQ{!`Bp?pCrfs-N^ z8gf<RI+cl(!e(9DTWz4LcONVd=d`*Hsh5Rh3;b)EGw#MvAWQPO3<YIdK60}rE!?-a z3wv;6u{8sgS>#wVOu5yvqSBHu<pc=D!>>dsFGxFY3{XBldIx{2Mixt~^0L-Sk;+Z2 z(W2=3;Pp~o5>GoWuZZxE|1C@M=HT@7;OP6iS&@du$_qjY&wo-jdX-<sT+xFyzhDTW z=Oj)<;aScf-5>$BL1VTWRn@V}2FDykl8L?R$o#{V@3|_kXV)vOgVDDoc>!KQw*t0< zf+{}5vTh(FBvjPWiosaR7mYsLJnP2>dAz3)1}Gb(oV{N9(&?LR6b51tZf2q)wV{Qz z+AO$-;;P4j%crSHFuzQ{(fPMpTRjok(*dXlIsdrb!vcs=Rvrdt0NN;nR_k%kSS)6k zEUdmewv!|pD?mB~eek3g6iiqw)jElkYW(zRk1cKz^1$Qeba{Vas5r7N;=zc5w3K&u zS!2s*<cZW%WpOA_72+Cm2%#Y6qOhn0B>;cl@X{dHOr&cvZF&=V>B;ORtQHPCtGX}q zR04D))f#vMm)hp{uCLJ4G9))wp87_hos!Q{%9e@BU+XDt%K5LKPe}z~2pNx;Ial=+ z)<jLbVZ#x{txfe2Y2XVnMSlN#u|e%AP64;2gvnram5HpF!|vS+3n4=|yUO)um2n1c z3|ERa*7E)_1qXiHh<>B5lo1bV+vyr;R5mfY6Y;SRJ_j`Ft!L;Canby`J|HX2wRFlo z42m^Q`5i0~_gdRX-NN8#9oU2~HdfQ;;*mab?3wm3TD}z(1}IC7Q50%MAMU4vnJtcv z1tG85ek5@q{~3M^%f-jd9k4&k2!9Gq6|q5L@NUlOEWZ-hILE4$ErZmMu?~iXiC1IO zt0r-f^0vdgESw-0LLHqxW~&|!<n_S`mq;Yr12-zZcE3@nEQ?>mzsG5=)9A5qf(g1~ z*N#QnxRz+wa(6UxB$Sjr(~fq6xEJ-93_K(rqGYF_$>m~BU(+U{dSrPZ#xYoQF07_& zL@)OLwEO1mVPF4A#c%OCrI3s;xCc@WTYf;AE3Axquj>@-kTTg!GT#R2)FcnbR51vx zer$PQ(s95eY>=E=U`qp=ci3EFoG84$EScaK(RGriDDQE+OekZ3J7^qTQe|VIbSM@Q zkW+#OY4*S-s>^O6eUc*~f}f#jzK~Hq7hOLb6uQrZ9yTB&cPr#bye86x%bWjAj4CDL z>cfXP1%Ac4i6RLzwKaOUsd1W8P!7^9O-#a(XLHT%`N7DM7+ojgaWEnx^!`n7|Ihb> zi{SoW@6#_q@IS%*HvQ7kUv}uf7x3;Nxc^`G1Goj`w*mZiux~zu2ks}l_h6rdASKqG z-nz3&CTd<O*#df6VFS=PAL3~ZB_<~ben4j-N;u>h2(vhy<-t8VTld^!k2-*z`s?Gv z!{c}Di>>!@@;>Z<a6@OP4TQjdC_VJG?ec3Key!uZHo&(ooVWgq-}<lnre71YoJ2TI zUeJ4g{;QlJ+L?nZ3=fWTXPq8?2MYlIGqArU!!ElwyROqhgK`-AD|Ti)gu{9jRGAKG zwWL&-V*%8bh1?AE&$s>K*WU#-f5M<m>}djnZg)EJ;g)>?Xj%7Na3QZgc3%Cj`d96= zk5afV<)i}jZTJ!~&0*J^z6-Z(m(*S5jf{X>a>!}mPQ_+JKGbh;&xLfzup<K8lJm@c z*%L;kr@i~oEi*mP^QXInY1Ed!9_Fz5WAcCCc~;y+)a>4=XOnA4Ar98i4aTO;QfY;| zq5b~wp>xcfnwpk9I>$}mB>daU*^%ymQe{mbHy~*Y8%lHK&G0%bmMoQ-`b%75icjY$ zTu0K%eJP?I+Q7Ex{;;Hi!XB)SLdVcV3BF)L*cwt7?wjBruqV4Pl3$p~A0&YkGtSAZ zpLyr<aJRkH31R_EkizvGUr1ZbSP68j#zao#gXw5ZL4+}-@OY=-_8K@Xh_fTXaECGZ zBMu7L!(LdVRR0*#Vd27MJ!Q2tJc`HbqD|lu%^r2;YZ?IuRAwl=h=62GUv0QaU=Nt7 zONbylU+KoPp)EG&0`air3a9DW_Sn;h1v6rjZ1kY8V;bj{3%7^uib+hKV5!j-cnz0{ ztho#qGK09t4Go2+B17<jrfqqR)S+IfN90g#=!AD9iYi=SS9J>s2j<4B){2hh1Q@EI zMeg&+@kVMmM>zhFV?emW=;b<>yDGB*F8nnIA^Y(tE_H0@eQSZ@irZTMPIZ58)b=}) z5AWw?k$w_kiF4RHxB)P|dB`p{Q=t)<TIgIb_ja}RVIKTG*bj>^I8_U34%gsYt}K(^ zLtFh({9z1yI(Qdn#g%)hInCiLNHi~dp2_?+%W^#9ASn-!bBpWh9*rlsDvIehj~=0g zCmi>}!K9aFmyZUq=oW*~<d5<2<sY6r|HI~XkN)%2bbJUjgN^y0z{*C!_gR|5(xWv4 zrOV(lO^20<_eZ065aTFtr-GI=!hZ3T(2@iv&d5*9$oF~V)WlnF^dlPl_4RdckPgyu zcme;NJep?d5U80yf*(H=VLW~`guDDnZ<;@f#$)(T@9*){&H{btGWr9nTfri-1mN5f zQe`N!mkcik%3aAritCw~R4XciM~OW+rK<=CGh_u#jij!ztz1rG<F?gk!~mxdSqtzZ z+cg#pP3o`FXBXY0bS!VE)n<5eO`?)rI<6|KTrIp3%Mxm7^nsPj>?KVIr0zT3b&bl) zrDO>>V#CM!;2BAbn{$8&X*6x*O+m=3O!DIv3oqQStL%FnBQQ{gfp~NwDMuACbQFup z9%jy&a6)OT2imixl0(*c`HxSaW1PPH?m;-7UIAgT<Y<UT>U%nNpYX3NcjJSOiK&%Z zr}X^n0bk14Lf16#(}SJhERdTW*Ms~M;W$@@6#P_PG4~DNQ;GcrFYbipIP|O!^RBBR zWSvq=C8^9`2}chyYtGjv3>$uhOYlK}Rd%t^E{XNo#0Zvn74H_3^hcYpi-js9x^^|z zX9}kTq)m(h;0y^7fI~t8hw0@irm-MhBN0x*xfh+q`f)oWL}b<Bl0cm*T&xyF1tmdA zl*mhh^`{V-SJ%qX6+IT24XL8R{g?MKZv;g49nmB#>G7@3%a{KEA@UbdJxFc6$IRrO zeAv5hAMS`y0l$9({1DD{`~L6m)89G|f*r4Ud<&b0p1aUU7nFuygpa~^-;ml|`C~t) zHu3Y{)2Cf&#v3VW<~+zwd62?dJn5f-q!ExEH5R&a=qQAFmD@Rc)PC!3j*@P!DX3;! z_RNBb9f&39_+|TXXXjow(3oDXubagmiEEbD@a1>qMYPkj&ngSi@SaPqRo|z!*LWXS z^#-rYD^_lgf_snespbO`<o%%nF*=eW^KWUJ2=?$ho+12~Mqc{2dHr1_LK6OME{!D0 zQ80kDq}v@n{9_RG@fgF>>t2Ih<4U$5!>JuAEJ~}&Vk+`e>A~8;8ZQU`98`{h<q3GH zm27eDg+@$;fX%HRSM+=dka7dWG>hE-mD2Ex?qfu6qoGuce%NW3gD8<k3U<yro=X2= zNaJ`e)*R1Lr+SqK6%+*b4kVnC4Y_PNRLd%<ZK_VHlC_fH<sn%A`a+io4`M`jd<Z^p z(vpdJsNpMD!K$rMR<0M~<~kT;-_lbOs9*c9_%&6EbXxawEHPa0xE{Zu6j;45_F8j_ z%vdEC$qj86X#S1TkbS6IT!MCtVP-JuApUL>{^#LC>%aEDtqY!S*TnF3mdp?2)P>W7 zGx>1Kl;#LfH1&p2P9`#Bs0pw>#nbA4?*OhaPbquvJ^T{?TPL>Hf6x@(>om@X!-W~a zItS<nG7-;ipfb#y3}jO*4~{X-83o)jD;?v#4LUWlAJbNBYrIg%3)g0~7GuAigI>Sa zMKhaz&;O;|@$a^HoH|gK#9mzgf|)ZYiU6$C!>n-N9XtNXeu}qEAEfN#5nFnQnIm)U zGE*F8K#p`)l<-!{YeYfDl|^sW>}LxH<wpNC?zifhXzc74kB>TBMR?<>RIh#1XQ8(g z^1#tdJu!r{fd>)u=q16HF)w3uV_aZW;B+<|Tb*K<a=8&UQ4Uhzz<AFa^An02ijksL z6;0j2%Z&v?im4px?G2kx#B>eIkc?|;mE3bzBs`iR%$ROUjX3tI60^Hc#0?A+vUflE zdJw}VqI?as$gmT(PUQ|lQK_!5G%tEPK&2@Nh!_q(U!-DBtBou{gD)0wnMNU+(SjMM ztw;$~p-98SV;2_%S{8>Nff2$AXdJeLU{eQs0eq5EEVrE(#jJ(6CdNEN)X!(=Fw;Sh z`A^KNQyvM3Pf0#zQ42@a4Kk<vOl(VgOsKsu*Bouq9Zm7!4JQktQ~{<oV(N2N>vTb4 zD;O@Vr6Jv|Md&TIgyPA;(f1g^jJi+VgHh>$g{#HJJiJ;L|BZ%n6)9qW1xKqTFJL(H z8SM0$W}LS`K$@fpzefR3ClQ*>KeB(DG9u}qf*v;~_%a(%6@B7Me{qN>!p4%4Pj5Qe zey1k=kR{hJxQ}R77+rc_gEwcnlc-ik9`ktO-68fhg@-?sFa}26YTxVBf%r9kTtY0f zpL@AAv?T&WzjCLFqkmDFK7HQQ+rQ;)P=ZH{MTWq5xdR1$gk3PoC8e-hm`x%z*Gdm; zt@LM4=(GGP3IG0gx)DSE%Ra)*?1y-z4}qoAIyH{y;MtR5C%D&Ll6!!ofwBIMNa7FW z9QOCKCm`f4=w&=!yOZX|)@q6h#cRFz#x{d*g!}*75dQjaIkdl0gfs!m`cQIs_S%cT zluMfASX#p$DBlh)G>M6}sp-==8qg_Zpjl2;7Aqa!-B}pt>>Z}21iyn8eN7N(CnE%% z5gA@IJQO@4<7jvpIoW~iOBd--l0izv50}9ndta%%6>}kz<~$NCix8a|AjF`7xhz>c zgCI#vP{yDQ+X5wR{fSkBrv1}Jfn3mP|82N*cUCbm1>F>JDs^&YT?U@EodGUjmm)+j z94tk0G~+YE2Kask{KLTQB{LKzBq}1*luoN1G<EhDTBQV}CpcF84~%kQe#$cp{#b!y z{5DCsGtU+J9iG#o#65ZVzuW|;yVY6~D#d<Q+N~>MrO?*Z`@dB#6Utzl>+RdtOIM_@ z`xgJzcAhvYv-4|B!4XIBs6$o9A(jOhp^yVs>bBzcA)8BgaT9ENr_#Y?RB%p@KPBC} zD<8{pqg9AmuLr+uV6}DG*1DnHUHQwMVY4>~+@ArJy#&gR844U);(w-U9ETQQgvEuU z3^MpbDUP?xEu<W&uMJ#~c6Jqwrx;#A3W{i)I8=p37-EojI@OF+Ds@QuP@?K4wW*=F zYMut|k@QjuJhU+=j2e27=;*s_CZ@<s%qjuJ5LHrY@;*>wd|$&>x~>XKk<lE5!77>r zx4LSx<O1PW3Y15FNW8mA^CMI7IN~ugF^o0dr3UA)kOv^n2D1s*!^!2A=Xf}YG7&{i zCMU5>G7z#CC$vCrHnam=BI#2+PBqCx-_w~1K9xO2^(o~AYE4%Q?SJD@kGxQSOE3J- zs9_G_<v0fFG|EO1`U-LES%@lfI3`bO-odc0B7|KxpnWEG3hI&2-FRjU6;g;l1GR5m zCR{+?pLsL^#a!(qViO?a1JZ=D>y7x83t%fQJ2xID7Gdo=B-n#+3R9S72(IdhTMAKK zD`zz&HhyEO0`pqrHfG3S2^a)4iiRc)jJHxAMfpS`6B$ruI^+0P@wL2@ggcntK>aOR z^VJD467#!Or6sf^FC9_C&?KztBJ%Juyp`fcbh*@>aVGc@mAEKrpCfp!Ly22~fiTjc z7uT&TjJCmxNVHWG%%;{T;}mhAORT-2v5s?%deHxb_7)qi+w1k}HBHrs9i*xoNoh5G z0#i3|h$O$6oaGt`?uPCDTOPpF{zBpWhERX@CiK@8#IA;X(be`j?^IH1${WO%FTRR3 zF!BN;zQ^&f#4Hfy85)fuxs^iNuJK?t1~w(ToB^8NM%fji8X2D)1`dP;>)>Qw$lQnB z`y>Q&S}wU-F`*4EmoZ3s99~M+J9PKm!Pa}@ISSjL|LO{P%ksH*qYmRXJ5SqyU3Tj& zR$J+1wGD>bBK~MOsW2MX1#6-%Df2grpgBzC^#ZrbrD{m<(&E~ft3&*m5NMD;aX1Az z$gw2`Vh?i)WQ{e%llJf@qsF(y*Nx#d9K?m)t94F;JSS;pBDn~)Bh`nr`*pKZfDXtT z5ub%T^6KmL%C+li*3TOqZ9**ZP4Ep(H7lB{j_F#x6I5ZlN2O{yBX?;G^(8{GaUQI< z4BQC$*9W9^h$)ACUhMZkBFX({&oR8?-*7^2@-LVu2Q<5|pb(8PqLXsL=sjLZCiX0k zP=@uKFd8qLCLWTl!+K0yv%#!$P~aH$?94bOj1yFfg2x3xv7wiQ15!oYg1tH$2wbqh z1LIZ}B5RznVA*Ai;D!V@*K3aVdoTDg;phS*Rg=$$!#im|s=Og#7gTKWn%?BP<Pk;( z5_POp%aUy3?(bXi#<~spdD-Bd+`xBz-5wpk|LI`&)nWhr?%`SO2^$z`X^Q4y%<{nW zy&=YSA@4HIGiHAj+9~2>3fpT)X1|;_16-DHDq!>vHI&dQQK*vPtw|?Fl!7idWYwo0 zW;INrP{SQHJRbd15~%40hVY>v0E5h&A7$(NuXl|KLmoc<90zTk#H;W&Nz~yef85SM zBE$HN(8mkDK<rUwhanICLb!WbVm|_0m!#OKdjbc%_V=7>c-K5YXF*Jb30q|(&Hzuy zD|)!mvbd<c1j-up91kM|3_$Hp5_&?78|F`qUaB{apK^k^9M=}fJLeL$@~xY}5EhEA zCq~2ti!-xzQtV0u_8iGbzX@b@S{m*qW902`%Hj_2%EtTO9lECK$}I7M{G%NlEfiUa zH;KYR(3;4XR*Bb`7z0@#^ds@d55I$-@GtlY|HN++fFgBf-psj_yYrqHg)vPB;T9Qf z(b{jtMGYHTEAHlUA!<S#F0^FjawG*KfzR@p=x_`K35zJ#8|m#xsoldvqxZqqpd%I> zzzqTO%fc*1U7fPPUT7=a0qzagijrEj8m%uFd!2|_LWmzD9B!7=`4t!);RaHGZj;Oa z6rheDLHEHHU7xJ<8S^weY_;*}%V2AVUi((hOYrai&ZiK5dg1<q4jR7u``?#ibIy+U zkH6tFL@7x-oR1r1l)U@UGjK6<J`?MLDGW6G?QhG$HE5c(R{*^E*HWZSqeF}=kUVPG z1;HQDG>M1io`0)QlRJU5Hc)ttN-R#ZDS!RDZkNg$W5CG_fm@g_U<Mbkg^9`u=2A8} zbG%zn>!Kn>d13l)?CHR{;t<Qu0s|h9Xl;7wGO{FWn~CJ2&q$7heK!o}`ER{xHr}}X z-IK$gfx#ctU$+FWLkb4$i>ajRajv)QT$AyU!!ru$7r72o;Rs$QbgeV!{2MCM<PU-< z%*L?<eDKHD#`47n9N6M2SD#A65u0ptN0O?wVN0zB%7_>EP9h~^)Tlm`mk#|vM=AI` z*KvN;LvWw#h;$pT9s|eh#FUq$3|en~Ybzqd5Z8O4bV7nJx)ynt9F+zx+ST}1*L1WF z6Df|vDqYl4Zgd8dAW=%*iyagkkT2qq;(l$kG~-dizDlNZF%?H+MmR8`0mS6UwPBEw zsZJ)2He-z<91hVk;p3mmKd248@C-hITIx{c<l{t&<|w6buUO)(Iab0BgH;u3=6mB4 zV9!ApPaieJ=g+abQqkZ?ni7eV{18P`9t<oyswJS{;CRQzCM!LgKqjK6Tp(PhCgbT) z(gOx~;rB-U5R7T0qrw~en}o@*A?otb)ryE|FpiX2aJHn%$`1*FOB^QOJY@J-jp;k# zXg?5_nd`WEOU~k#v3ijQ#jl@UMTTdoZv)QF5%H7b(J3{_>7T1&#t3luLI|cEI|nWi z#&PtCQA=lu(Q!-R>u*3QAJ5HB=ZM9hC~kh&#SY1tNes-TS<O~9$?Am`=4p3~@5OTd z%o$??;1|8nS{v;PVH<MZGj5)f3*4e07A~MxIa0kTiu|*bEV~12(Dk7~tH_|}BwvgS zs<#ZmJbb1q+YQ57xy*?>MvGo5)~~g_y1G$6M{VtD1+ra^m=!)pH)SOHGbP&7QU0Sr zQENc9Lkku0mjf)ViY63OY8lI!R0@cZMN4kI(4Y=chnn<)?GQH?lb+%YhqMhus38`6 zc;*5yIN9&kk_Pt>+6TGPhPt2#C}7w#705y#UpY^WjLGT^TCEH?JjPjKqAJ<VraKm^ zlj?2d;mEP?mutKDID993EsJSV=FNczOYrx6s<(m?)wv^6LQ5rI%bRkOyzFPtyWNhQ zB#;^u`*Nao37J#+CWt;k1Gz$Ns7>}o!4S)>sL*MeaXn(1+eIDllWO(cHM3}YZ_9RZ zXwlTWtll{`>QAz33FHi>&o#Epber0(!&Y;e*^hw7q#QL-L=zBUL)g_)ZR0vpPx-J{ zyI>w}x<9^?NQ=Y85;8*7;c}+{Y!*Efq1nT)UIh_y&6-H%x3$viZh><y95fKc<B?<P zSnDJ7TdD|e@GkyzcCs6g5!b>VxQHdH4!FK$*qE51P5FJ>9m)+Lo<iz7=U*~{gcIhU zsISJfPLbIEkG+3wZ{s-f#^JmLKgC%2#{wh}BB_IQo2GJ86lHUx(<M^Y=1#o2hQNTF z2*e<mfhca)&u4$SPTkc#Jvfk*WM{?ATI5Vm^|`vLy6RWdD0}D5SBhp<@uDTK1k!@5 zO3TFMC1ecGlrPnjAQLPG6ZFX+SOrhoZt^8-(D{SQCW0XG3eO$vF4-!~!Zvf$oY$d? z81QuM9^l7#f!hZz6nOgvwrK?V>xHAnoxIt(2_fa;p}@x>oo)(Ofx}e=t_p5pyE5FU zO(0KjakC0dARacW@kcC{F1Qv<FIc~1(=cGgbZ*9Nhj-*&C<tu6RMc?n=fCi^ho5U* zDd5&x5OS!k*iK|q1eQ!6N0ER4vPU8E<Y=N{`#i4rogHbMJA~sni#ih%p=Jp-kOwS9 zP&}sJgmMHQ@(vRv5%%c`XQ_c@;l;QIwgQkaCgyvz5O<}4|EOb1iY8K;5g}Ndro@ke zpB6;#^kATF;)1`43q`Kk80FEiS{!=QO9Ykbrvu98Dc(0EN?7n7FI}=#R3a%PSBq?2 zC9gs~_{JqwXbituA^>M`0%f|h|4>jS9xF899by%Pqu7@tWNExPXQhisxik#wGy>_~ zfIU0UPgkNkF7JSUO={PId<-jlOkao2wMu5m>+ztSvz4w}{jzD(LIa`X8t~GFxU^-( zIEydeTE0X-ylRz91l*E?VURtR(dkrXLf;K9hD{)zoDIU2HPYJTZk9F~rt=b~1a5Q1 zTgIh=hUp+-90hm*RnV#PT;j%bR3HO@V9_<UE{hfjfL(G~-E-sX?cLS#dDJ7q|8;%I zEfx`Czmlc1Zg7^1<<+u=1aA=*TF=$F8tye^bz4sN!(QCL)JNG3R#dDa5KE2GNGhVG z`(HMwYLrYbRQIlDv=$?8+YETG&;l>oJ>xgx-o<-e+8vVB8JEagOzOmfoW267r7Y^j z22y25h|LKbwQC-{sa*Qu#u9HM^PlU;VjrZF_bys2{I+d@N*_*lOsIaj(08^lK^THL z03a@YdeLmsnUkZwmhcysjAQkri<-H^YaYJrMDHk<LZuZ+jgAqy+F&Iqz>>D`D=_PQ zFsw;DF5vcajXifzHqFErE|q*@_HL1rgCWOFN8lS<k<S-|?Yq@t9c@`zbG-Djxp&wp zeaN{N12i1qNth^t-F+6X9j-mPY~~AV^)&3)l^bVeetyN2Js4AEsD;aD*__HPmsD&q zzu|@Sx!BF;-gj#{voq~E^X-`YWg#P<1*#*z$I{tV(a#C&*mye~v#%}4eB$R1=R_-> zeCa2RNN&Zo#T6hmFOhNYdatUYkP6|%EOnn1y+iuks@0de(E8H%S+xcD=`^fJZoar& zzs$iDm+OCH=alELeDLDu-Dd|+Rz0?^eri=5x?3~h{BJ)p_}T@01I@aQ3vK8{lFu_q zv^%TazS!eo;mu3KL1N*EF$fa&9VXTVql9FeuUU*S$izM5>~D!Z1IePx5tPY|ct+bB zA*A<^vd$&PMtw(wc6-83t$s78-4t1R0J=*m3EgB&XDIku^5;6H7B4M$D28c}#Wp|% zY%s>|lTrCPj#%{QjiV02Bb#a2<yi(0wC$$yM0ESJ<;neeB>#qw<m*3y{hQqIBz6n1 z6+wkm>zzC5QiMC(rgbE_g;zbw$;z|}ipUkIjbNbrY{I6IYbd<hgapI4&|KJMh4==9 zj$(v&G0ARNSk*E&130{}0me3W3sJB)V=90jzq5Isv`Ljbn}ug}i3B$pFPR7V3HTis zGYo)8Zn+GOt@^dP94@y&9AQLYivO|zDQ<{3A&@Bi;;e=guo2-Uof%Sz-e(734d_gt z-3g|umdSnzl*=Fi=B?yuJ}oP20vBgY8YM{)_Q4!t8mJzQ0%C_WrT}H9I-(jbquRhc z<DM=W8Mkiox@FE6YtIHyPDxTjO9ECQSzz+=R67d7ox5$144{XWIS(qcp#$vs(eRe6 zmbhSGP#tbNHAylEMV3Plcg5|lEkpPQ@f0mwT;O&<3FTcPm70en%w7#qT+@+N=_VB} zFLH{tC|Q=OgqG*#(6u)Z&`#yOAR$4p?Z<evOd!fa#k-(Er|OdLA%rQEDI|{RCAFQA zG;R$rB))sL+XfMTvom*3XmbHbN8}kx+>JPmB&tIgjr17r^}&Q+&4xq8N|un3$#%^H zABWEM+>2~zWusKus`>e}=18XT()x%&krjsJkkatzq{}UTRmQp^;~MWveM$RymTWYN zMHV;n&?WVS?(S{mfvg^xA+5FOWg?)jHD4(7WOCtZK{O^`i&=L!Oe9SaZ~yVe2$9Nn z$sFl*x92tO+IE?2uh^_3l<58yfv^TNDzqE^9z2>aA#Fy)%_VNv-R<?_`}NBToUMk2 zEq}$XTIobikvUfvI&bQwcJmr#Pvzg-ib$Li?>Q(~Kq4M`R)9S7XRT6KYzOg~vU8g} z#4wpG)h1qV=OL=Ez0Za_7|%76(p*C{ANKK^dZ0N38QPa>Ysu=3Tv9eQnnqw{27>&J z;1xKm0umQNYz%kKtT0IZGKjh-1q=nu%&p66!I&;C%2e!J{dV-&uZ-n4!dT3b`?uvS zSK}+Cmx+Kfl7yZsoNnMs?B>=jef=LK_GQP(_9-F7f(s|P?<tpF)3;j*CEa8<O#w$g zGE<0}by~hBzwH0``ME`<C#D8Du2OPUH&l)>)ljnM3;_-+#}!4<?I1CH(8_HC7cqi_ zNQg3P30hanHgb5hyZ4tC#N2^~bzr-D2)%7xGLcGnp|@0J5YRoiEaW;Mc{eoz=5?<a zf5^r;8WAYj0PURYY%&5LwrO@g%>is<J$dohgXl>8w0ro|yCVQ3X{`w)X?dAL!V%)_ zGJo{Y#Z;F0-jn^kXKNtyKQnv@tESshbQ~2z4xAhll;A5#-2lG>^|{0k#?{d@&oq5N zYOm9WQ|IXQ!F~r{a~%zDIY7e9#w&_-MP<)%Lo|Zp2%Mj0jQY>p@Dv@Pr=>t;P~5Ld z(PYndT=EnZOc6=P80p&+7ePx7VPm2so#&nv7#zJWRv@tiXfgBEyXX7QU%q?&=Gp$c zH!uG3;^o^HqTs7O_%+xHC?LFveuyRmHUo(8Dyw2LF*F3mNIW0YN|S{p4W$1*&Cb&4 zd-&C6vpvhs3eKr!yMc!MVyOQ-v|09SsP}P3;O?Nmzt0J?9<VQgJ(;bxh9-=1mL=`H za!Dc1ft^uuZ!;*T31$?viP;RFPX0N|`|mr>-hoOiVwrMANJ!F(xZ$G<s6^N-TiB4G zw~1wPc3=O+2vNd;%!yLu|BWnY_4G<+asOriuQ-Aj#n$yJ!55hQ6c0!na=ZGt`|5VM zw^~37n1Ppvi8~5w0~;3#ln49o_Fo*m{%gye_S1`PYcV*qj#X@u1%6@U33$j#Cw0K1 zE~mYQEhTQP<QWVez+!_UOdeRzXc;x@0sY`-f@{crcE=g6;qrYpuy$Y=Cx$%IBY{ni zr<anJHfCRv0^OwTO=rhWr#9tdO;Jn!lUx~Bax%wr=Tp<sbCi4#k<Pp$I9&uxp`4>0 zmKxc95%-3du^)M^bEZ2Il=`TcLWmuQZ!;K2PL?x_x^ua;DNuHrl^FvcjMC{zR#xs7 z5!MXzPVFQu7GVoe2WJlOAHauB`xPMA?T&F*vSx-EW3x>0bzR?sd)Ny`vd)D?^3_Ix zsfaDggBg?>(2ikb1iZv<l9+N2BBSix#V8wAfT3r{fg^}gN#{(-v+?A4a2E&4y9yx; zR`a9)OBp2I0pvWp9pF$)w%0q(K*>8%rzhi+6g<}--0h&<?+H#EjiWi51lyAagkb|L zuY|>A>Hxzaft|N)E%SVFYx^J_3@*11EL$V71@tkaW_AIkNJQ^9FZSNOI(lte*6Ain zh*0jnVq}L-F@LcfiZS?MOojW<RTS=~fx}G-ua;^DuBYcnn=~%F6-yG@+3Sx6X_fXS zl?!3L6-gPRHbz>OML)-OsjTXCX~Ab$wy!M&+;U6|Txz(T%(3{dZg`4pGf(1{*UiFi zJa_Dr(qYi?I&1dn&*{jw7z3+Q-|qnWmeA!LykM}|6s(RNmcM^WOLt(H4G7tNE`0fm zB{{h$(Hsb6BFzo|EM5`XsO}wH<AJ9c5(W3(tU!^71U3$pf>Q!4HOyx{8v=y)_xh_c zvq5gy7;x?&an1IOaB{(}Kb*m?<}Q*H%BQ0tBe|!m0tswFm>)~Bu*x`VC%d9}r!8Y@ zV&?6-fMdNoc!+W74DfDnWdTRYF?1sOCM^~*T1`U6v;F_X*NBPpzsih`J^o#ozv3;u zls&B0Y@B~;uvF9b)<&n6RcKyQo2-gR8?YlFQ<hFka^1GN+K&1J*1DP-O4M{05z|pb z2E`7V%#}19J|vz5KAeF%<au!_S-=NJ*^ZqXaB$R)iP}NZ=nzsngdDA>y9dwqpJ-AI zx3Hn3Ig!WX77+flkq~$>ngVT|w>N9|s78So09R!jBm};!kFE!HX8ACq#WL@rl$vJk zjtHe9h7UuGF7k!x^D*MI0vD+-fGc44P$!RfI`9q08BTE4y2>f=rPN$4%r$DWR-%e2 z!`?24omKFp`Lz0aJM%lbo%u4S(Puo4f}5kya&crqnY1D^hY5RJIQesplPBN%=ZR_N zrdEqSqiv_AM_Da9rZ>jaMpSPJ_>-<{M9E<{HOSopUv(1<-X5U8)e&2_!03ajFF>6n z)<2Ulos+@LD3*i;ULqjlIaM$~Ga6*h=BixA7)~pa<R{~T4leQd#4`xp;#1{h+6VSb zMwq-5Iz+Wsvv069p+QHD7!1t7sROpl-mW;{?*0vq!CjZ{gmKCt6_F@=CHlYLLDzOp z9*HPQ_QF7H=Yo!D7NPjt4X5b|x`C2XRR+4IGPF6J5UgYsmE<KYc_oq$DaU}Er_(_> zR}(Wmg03ug=<;Ptzxv3(w{O{T=(OG2PE;97`0C^9`SsPiz-TOH<-IbC=L_m7j{&s+ z0fMTj`448|D8z#m?z0g)s4DnM>zo07A^w|gu?VNCm{rcZHjDCzK-U2aT*9z|pcXk) z!N`H3+Xv|3R)U>gglWKBjlQ%hPus9J9R-A|^POr-a9%w(XC7-E&Z@VdW$Wwe)LQn` z^)4%3Nh_J1MLla96sf?OHR{k`Q?R@`L0xhR%Hq0Pi|W?8ogX~BhMao^zlEkD74P$i zd@!dpUxUvp((#~79jYOgL!hm4emu1xSJp>qG2G@(vc5StysotrRR^csB7=5o!3v&J z%npo8MB9KH6kuL8%$&%8t6h>bO`DVu7T8=}<l1NRK3)54K2X<oC=DX2Hn7^eTi-o+ zNDlDd(5|3l?U9;X?gKSa?1^;%(#dGVH;-=d&cO$*Ep&HtMNT=U0}p|rp*v>sgpQ>; z`W$wH4;33>0C)NVNlRCP$O8D9gp;aH!B^}ILlqIC{rT=+89qu5BR^4VKJ=00$y1DE z6AvC!(mTz-D+0&|Xmo&_9R+A<wN`THaiUSehq;0wSFSR;p`BdLf07@-BkgFZqU5vo zo1G1fbZ~`9@gmAwm!6OokDYsGW5QdQ=f34-A>qIP!PhwwFXp8o26eYVkZi($utoZf zMc{L&zxg#QFRFl{dhp^$>=C4HW(dM3nM0`b=1MXS&_Pp`e(Lb%C1`5w2c;vO>tKQ( zE{_d)>t!%Oc*Be{99T`PB!~e7CVfx-CthBNB&+&@_$J6qRkHu`Ddu63i+_%Wq8tzA zCH0W&0Fk_;4Og)XD4rtxni6xHS(gW$hP-O1+;FpflIxqDI!GS!WPk;}kQlT%(0HcA zQ;b-@2(a;VmXeFi-l9{7hx`fbelvW|AJ-;QL7M>X=ak?dz&&LqP_@2eec=Vb#Zrwd zXgHrExQ+NB94B_1u{Ij1mH;r!CAt2{jA00Q5h>T<m4BE~hF$9xhNA>2jv=@{%w-rv z2;!cAU*V3Rf;8&5vDzFSsaFf;SeMlT9dh5*ld(rBL~^z_(i@Mnk#32%G@tB0-F@@y z=-u8=yDwhsKl496LX0Q%X^qp#$nm08P-GYe%sGnBOYvts&Mf!=!5(_mnQtCSRc+5- zw{znM0UbfT63KJi2yH;~fIjVrB#32v;g1s3lRfPr7BCfoWt6;<l3Sg*64c*n{inQy zi^<-2bb}Wz4%gFsj4nK(rzW|$LSh)${AyvbBEuXW++zQj4~@<*C(+x37f)WkJzV?a z1k6^c(VeD%3EP$k`sDlM-sZ+e(pmc>7{P`VEAxMU#i*9GKYY2LQGQIjzQ2CAw|S?W z_V3W&u+<>Nd9Q!vIyTJDy?giI-_7stZ|Hx`&({41=H2Gz#=ZM@AAGlYf9nq$oA<W1 zHvf?P;rH}Io!PMe{!V`Wn2-CT*#JGqe+Xv&^wILmJTEakwYJRt%r~uDEo7egXiyUp z!DN>}y<yyEZgy@g?@-IqVx6{u-u%x)KE8GdDstE?{IvcaY=wpbq7YzT-saUQaJIE2 zN2j7wAQ<OXIv6Y*=KAwKd@_gH6tMjk6GU<QeLg57q{ux`sG+Cd!eO%?PqWD=?Psnn zkxz{pg|YWexiF)IW;^`MzY~|Y#YDf1v<FT#6@h{29H&`%nvGxW?%`)yxjPyy>Pqv+ z%kBmet6g*4;FPQHEO&nqpZHrXLcG2Fj#ZRqlOt1hrF|j_l7#ONf#%QG*7(ittAqM1 zt}zgd;cq|)WZTGwL{gw6-no^elN`-E@Qmd?8VDo#%3s^zYvx9(2&XXPa%yXWO2)TF zoqAhjb~>H5eAB5>p)I+SsK0HQ(ra)THrSurokacZ%D7qEN%#-@(w`R4)6@fhTxwD^ zk52epe<f@ci+V3>d;k;??~yGU+oh&>>~Zrqt=Jd3sdfHsr}kFE+<IHaOmUQooA17x zY<FYD(_Bqik!opcEL~?*Hl5WlAJLU41MQA7NPd3HO1HH1br_(3(yhfOvS~Len;ICA z=TTjaPSaT$KSx`uoTE^e|2RqV?fSDm=CH02ZdGiW@TV+Lg8F#L=#`+%%E4!-+F;J$ z91}h#dGZ6)oaB@X7|r9Jzk_W^CuxTjfbWI>tZVo*8OSN`udHRXrH~bc^F&C3U73bR zg_X`$`>UHV8yo3^#lrpCn&YQSpDQpy2y;U@Km1{4%Zq8l|NM^`tVhd@vW3rAv7EXG z%MB#;u_-;KIv3_G^T^WK2@-~2n>MJ0l>OK}Z!Ni~@b(Q4W)wf=<VaQ)6l2?EydB>{ zbs9#+=Cg+FdDw_phuJu13&Ab?i+uE=7-aOI0Xh}eHGdIqMoh9DyxIv@jNN87-8R^B zPBKdNBnVB@l!ITLyCh%w|9Np<d3ydmgkq(fh72xV&md6`gxe0l^hZO3p?wfPR+ZUk z_)X3K%YpRo!dIh_H3@QeZkF~}!q~`5B<ivVG>?}Zin)taI0YA|$@*;;)LPtD0=Slp zrjrY=xrrM+Q%5*kyu5>_oRS_as+Mj3Ft$9Cn^#|q?1Tz0#g(mAAME_#A#Ht03{O;X zNK5pXI0nxqxYp?=voS)2?M|oZMFK-n>eTQ!@_}cYO1mCzY;flad62lck&H&fI$e=3 zb;P)lDBB`ga({+)S}3u)W8{v>z#f3`Kr!PF29)FyFN@N|Y)FP=1^5C=e5Mu~%&xc2 zn%9u*xEF<^U_<z74XBEG5GU@GV$5{V9}H3e7s+Ws>7>tkZfz}It1ueEt=vMCkrv%) zxoHwQE6)t`?K^6FOR97mb}5&G*#A`R_JZTT$A)EwNIGj;l~_Tyk8%H~w3MK<RGN{4 z?|9#`dB7KNez4NbzwB^I>)O<gi0siOvamhjH?t>iZ+1HNq?5h^hAnj0YDJgSl9xKE z7cQz_*XqZ0OtR=wt>S~}p{LX^_))CVYTfFB)e`bY%L+-&QW678HV8`fHjA1$Pduv2 z+i<-^s-~}0)K*~&mmn8U<d`?Lf($`{c49(UEWno>krNZQYK)DJhfs_Ur1+>^kVNX} zE7K8ZIGsG?I2Tg_mK9x{4)9IwB<HH6%Z}|;d|vRNs*TD|y3)*!uN&A!V`nc0JOhTG zHP67X%+jFmz@ZR6+g?ta8%M=coPc>dJuzCwG7>ij=GFyu>7C*UsI|YK`(8N6s2>!w zEFeK?h0H$(z!6s9shCwOok0L^U|*-_?eImg(wzWjK$yQgjcuvpG||GxYV1uL#C^d7 zBgM8!6!i-nx&pBdN50S`6S=WlxF5&KvifvnCpy{iU+lMgjr++cp*Z!jnS$Pion_%G z7)3XTzQwIgcg-xPU2!g@k{g{Hoq)B=USi>clM36pKx`ax;Dwym5Dm@QUcny6;r56f zg3d>h`IM1L+T(n*J}n@24jS7_Ud+&w!IGzZQE-r!S%Nv^=ywDJ#O%JOvy)6|NO1n! z>^L47GxgA*bcCK3Q?QK{LnNaGRrc)6r%V&0UA7t01_b&MAam8w2*DBRi(OAJC)FYu z9edOw)7_tn^XKXKVjBfw^M_F|#}_CLG786u(KXN0i>B|voMve>kdP?{`8uF8o}Im5 z!556PtWk@L`G<7MXxiRKMv$q}?G`InPx7J4+Y8L`1B7#$8OMnR<H}k<KrwrI@DFXa z`+0xw=;doG*t>QeRGCrf3ku8y-zS7nVy(l%wqZ2S*j6CnBSX4bP$Ut#kHSR3k)Gi( z(0xZL8WjX7f{7?*2(eHxf2Q@)D3LXp6@sOR_TKLkwp?RJ^6`gsln=H6yG5&6xGkaQ ze=2Wu6RBQYJm~L^LgIIxQ~Q*tN}Rgv+>kaltSNI=T`@cW*HIS+;CKeR4v_fZpkmdA z(!jCuhgr){a^@%$0Yy5fBP2*v;2Kq7GLNLps~I|6!m=@^;E00-(leFz)Jijsi^}Gb z)5cA%IVNoRzPoq`*FY`R3wwp3VgAKS2Hhc0i?affcX@iZUm@LL{fvWy-pUq3+bb7n z(@QRs@6p}Q3^_IAn{W77GE-S`O~3jrA|+Qn5WV(R$BKa*H#Toz2xD81OKea$Lvvo` zX662OCayU?i^Hofk7Fk5A%jhBC*)9H=WeZ?#Oodk66y&I0y3r+-Nb~|o64e0b1mS3 z`0=8e#B<U{`Qd66z^GzK+?QAT0KoYM`P3{8VZ~?Y2q<eCo2{kMx<b_#gDkq^Md}h0 z&ObObz{yj=5TkSz&V;Y^u)#MfYI!3Aa+bHm{$T^SJl;qubog|k5-m-^&tKu!Z7$F3 zE-2$VB;|4?iD6bBK>VTceq@I`&{5(0qk_aK8S-a<FHc7*nv*LIvqGRX@Q$Tocu3g1 z$C6ipQ#@syOWxUaagP2$GVeb?=JikG<R4lUU2;t8JL(_Zg|pT;0b;m*%Py~~Be>!T zTu87J7_N4J39H$ps7JHD8cp+pPOs^4@#g}@Xh+8)-`(nj>v;Z<vGpUe5_Ltc=TfkC z$J`ciG3ZYxyaDocTGQ8~;sB*!Sy|7)wR-W&dZX5rk(mVm3B`LdxHc`SnyC3(SypN= zlAS1X);!ztYu&|2-*k^PpI^{xI4$eFUao^zUN3YE)DGd;)tL;XVa9E*bz*bI#zfyF zE}*t{z9oEWG?4GG41lPUg%tuaIeV-H{E)-%sJp0eDs3$*EmE^@0Y}@nlRMGNQK@q1 zowc@#Ul%A`4L&1muiofvuheMm|Gu#CT?c||VeN=y2(!!Rb_@Huq8nQ64xrU%U#H+H z>?eF>ja1&XIGezH?bLREP}pORM51R!F^RzbGS=UCAWFO)S<I1{POUhEJG*aIBlW|m z_uyNBO;7sv0%D$gB*Kf|8J_fh$CYW282Y$@n&b{=5&ZSjx`!|H|4s+##HboqaRZ<4 z|9yY!{(bWQez5uA!RF@XA2v4c-+yrbtN-`s_yG`)zYp^fLN@Ld<0{R^q-nqcuyKPW z#gZWQJ@8~+6(vgsz<dyggAld+@Wwt#8+aSeQHcY}eFdBRG(Q2Of&UHCLX3_%{^_zZ zuft6ppkN^UV+i&u+i8Uo61#jN`v65G*4gH}-6y-Rj$Xc&v2s4Zby9=llNb5uItV#; z%_S%`c{<N)=aYGEyjQP)s2?3&fqv|v)#Cy;Z0(DCjn(<?)V4M=e7m2e!ur4x@cZkc zs4ibKTqPAnwEki=fL9CF&STw(FVO}BJ}S!U6{O3?aJI{~W9rouE+>pnyN(&wak@*a zDz5jFRy%KPU8dh&UDvq8E-@C@*c3AJgDdSSW73fDuAzk>03UJ4<-9T33)}LAni7l& z+$Vg}wuCunATV^bp~5EqhFYjb5C`vi+IE@IxxTrJ)m{&=bD_{z6*`1%mRBb_Hx{pk z^1xSU*WZiF5M@W1W{MA2rO5L*ZwcuDs%skZeBPq*!m+MA<aPRQ#`!;I*};?6HIkQm z<d(gFyp{!%)Zex|yTmn2NiF!#d*No}y6US(8zyQIU;9d1MbP&m>#nn-h`RYB-hHPU zvmhmXT`T9{xHIclvuT#JZ7P^qNeO%)6N^#92RdN`g1;pFQCgA(!0P0s^Su_@<fNcd z>2=_8LvCgvL;*=!+#$iPA?q9@7$gi%6|YIY$X<x%F4YECzN?Jkll{kUetft8^ZpBh z{@H)A|JuyS@$BS;AmsdeWVRHt`mgUx>5IVSf~#A9qznKy*e@Q*DNXHk5`i#sU`FbP zDQ@dpV&S66{A$Eu*#(f!tyOC9s`VAdCHohzI9jQrAMLG3%`5jfCUBW%%<cFQ12@Hb z&kb360Als4;aD&h^_J8WiKScOF^{H!iMA)Gb6$H;__)p{1p>u#Ej&W>tavL)I=X5T zmuyVf4ljIqr7Z+oCu!V0E)v_j1-=q%BG}Vw{2{C6^)s_i(a_yb$OGdusBIOWg9U!d zQTu!h^i%ZW@fT#jpP)N?zbWqh={xxOnE$8k%XOX|pQ5Qx?3rU_X<$~^+7@Gw;2-R3 z5_W_xb#{_Vv(ansleBAFH8yrduxgt>L0jw1(v4OIGH9!>Hh!rlbE9-SOTV3~9cuw# zO7v7M>vbx#+m3>+U;~(`JNaUxLp$CZ9kIMEKRnAws6shX+vO^w(fb6$Qr3sXhh18g zdxWdz6U?Isj<ps$B&grep7ao@bd!}e^EcICX_s!UXB<_nW$Wn|Yp!h<_<u13(^;C2 zF-^VorSXuM&}UE3m=XuaWK+!vATb8jVMrbYx}ZG{93zwVxDc$|^kP(`gU)=<l{HZh z>lsF)4kr$RDHO8W*7n8@sy382RxP`^tWayjDheYDj=Vuj(9RmRM#&&nVxi*L{dVnj zmyrH!oUY3E$0KiZJBgEKHm>q1TSwc0>l5c`v1sjR6Lo#DHpkwg31d-ZnQ@EX1H`7# z%0F)0Dm{^Pge@(}UB7qEq8R^1cg*-#hqL1-I6!M$f0WyB=s4n%gN0HU0v14^T}iCY z{<s8tJBDu0j&V(3a4TRhQ!no*mtRcufaYd>D(gEEH#0Vxs&eNGIh0Z~o~A&)q^;=Z zE}~_uH&Fmm<rW0?jDmc2!jS2IDL>fAaqTUuTpY%ETJ$GwS-DTd5w_E4KZ<nDk?&{_ zua-s{AW!V^pyV)_f6mPI9VEm7fKNlHaz)PAve_~09=AAtj@U_AB21$e4ZK$7XR{IL zb>@pbz@dhV7|7Ckxjhqv_Re3&^SqY1>vZPOv4RH(b~#vyF^(B!n1Y+pyq?rT;Hhbh z!k@dOd^)nG8VB27Oa4OA8tlL$9`;Rr{%ZqQR9=x+oZ*J^4iMha_ZCATrf2C0mL{D! zXIcL=9p~kl5i6!8&tetbUg7xJz)ZXjON!}$E)%Pa>#{dsUZ@#GXcglOb2yBPb0i?s z;O+`Bk{7m)ZDKDu`YGpVano7~>m3z@U{u?Iyv_QfT*4(rMe#mC9IbQu)^v?ysWFzL zN4;OXBJ?SrxKn;tp{;T4*psT4Ko};oZph0r9HkYX`GjQ9>2d~)(TH-_b0oDF!_iCL zk}LA}goOadf(pOxnjzyaFtH>OQeh$@T#`FA1%(!vjt#=id~CPmL!MH4#hwctry}-& z*>t_E*G2bj2>b<%E=ets0#I3x5-U=Nh$Z&bcw*ZQZk}PR4jz1Y1sHP$NI_;1T^R9w zoK4MYHD6L^aLh~@3p#j~nYwYb&mr9iI*^}Z&Cg*tkt!si8F2W2m18b9L+d!J&LN$_ z1>p6EWK-mFd1({p!BqKe=c3fPAvGO3(m0|RVw1u`H{F9AJ^9HPWIdftl3W1hVJcqH z$Je4y)qo7cTnidHD_~+?Ta_LEH`v^jS$5D>*w$|tkwBam0x3O!S;Q03hEutCE6fHF z&a|8APw0EQ^dQ#cBu@lu)ZM6-*y8Y3$0zP#1Wvc_#PUVUr(ahI=L!JP5vux^Typf` zuX2u<vx0qu>9hcKeTvS+cy=PvCFJ}mC~({3GwgRvX>AXN3fY1v;3*^2Wz9l(zWWY7 z{X3)#Mj8o}-uW*;+5tDAq~Ae7d1snj<k`r`!T;5s@(ZtgV_A8H#s6;PNv_Jam|9}H zj`%)i2Z7akBms&ffe2Ozy+Q&UzewUaC{n0E!KPfkYxHE=S)qrqPZo7lW&r?O$FtF> zONU7Dp6A)&oMExHfFRj}ywlVrqUMeKH2S*UZ2CLa;@4ht@NAzJ=jNzXShl%0eYp0> zH;fKF<c((K%5rpPqMBMLw7#A@<na{CA|0H^aFzT3t$ajH|JeEA4!8S}4B$st4#E0P z9s@uBke4X`8DWfv9)%R4ZMG9So<TS)Pu9)StuiG7p@@N5x(H1{!O?;kXPW#L@qg%J zD@Ty9R7zw$<;pEj5i82&5jW+lY2l=xY&gvOMyTyy^cL8Cln26<;$@B+aGZHij#SQr zS5vcD`)0^aAQX^=+-Y_`%^{z8Zqv9K0T*MH%VLU<F_>KxESQuNm1J2OgDIV#m@Mpr z(U(El*psZnppP0|h8Gg7Y;hJuVi?HHQaCChDJ{#%v>43#*+7h@jDRD(i33-v?mD== zDX&7@vch!8*|CJ@lrj-|3^ik;B=wjDF4L`0mBd@2n(12ciuxlPI7>(Cu%<fk?gjWn zb`DjNRj;(Kj_WUyN6DrG-Mz&y*FPEgdBn<(Wez36<59lTMns|Kl)m0fETpO%bKZIw zsBZ*9n{$<Uw3Aa)q1jGh-fDlW7$?NEQlAYBjf3hhZETyY*jo`vbV%CX7THiZjGzqy zUNBWMrn4FU>N!QDGRHB1Jx^WKeu@|xuwr;A;F@u2qXoVr9?G%&onEpV02Y|fv2I2? z#!ZB@Y&&>$cpcL?oUUVfr*n3Q-H}nWN@lX98&B&u?A=HB%ht(>aXbIx&&;@@hLaW< zLL3wIOoq*46OsSwG_(XbmzuURfN*#;O~<8SYiEg^c)%M!CJT;&s1v|dq8CZ4NZL5( zO1y@@HGjdvI(sv|_c;od5ojq++zezL6bRskF*4Eu5}P3jzjT|#;0<OI_|D-c&`XP! z;@&HRIh9%8beK(clBVd4_v=~`*Bfn!IO9a7?yOj#H6~(D!ahlUOFTIiPJ8G}_bEdf zWA{X{{nMywaUGqmijrKKSA3rSMf0{GtGLEKug*m(|MQx0QdXl5)3ED|o77SEG!GGf zEc!(qHHCA;&R>S1ALOSDA!R{S<up~<IPpZXW$Q{mWv`X@ZjN+>Dv}p89thf#4QcD4 z-3r-Ld6dG6tuIqs1#?z@T2^&yEK|T4Y-bb9VGDwb>eZqvcHM;qTWaq!PuHA#`e5ZK zdyA{VpPbdNpz0fD>6QFNLVW*yR=BMLlKpyVo6~;3n8NkX=ps%Uvkhz76axI4+Bjcq zbu7Q35SDlDrcy)uX}1<+M)Q5IuRB6q4~-sCx3+izU14iQ2lLA>&X~XWCmrAUORs6w zUEfk;b?M3M?Cc`EvRS7)<YOhq9A9Y3NQ*N;!a?VneEG0yB_?lJ0qyE7<vSPlgS|=% z7o|6>*=-R1YMhS9j%S)}`#~Vw*kTeo`vemP#!m|zshTy&2WX+Q1f(<V4q11uZMXu2 zg*E3^eYKhW5@RF)>pVt&s+~`?z*Zh8iyHAISCSf~U$1vqoCE%4fG>VCV>15`nU{5Q zSzo1i{-`gsZOAI*?;D$UR0Bh-eO^?EFSs7OA@OeX*FF_A#h2=>>Q8+KL{I*?$yhJr zkNHIwJQ+=cRlgDVtHYJUjKe4JCQY!Ed&%RhpVIAnUdj#1Ucf}rV8qvScsm9k<Q2ME zO*1q<<yCq-x`1wc$fi{`xYJK5Nhzl7sWNnrT_lUS$dgOn72rjg6Un?v-tFxk9<|4m zhpe_VIACP$deC-Mu4>POPDaq*BK~VL{x4*it*!$5yCnYa-Fpu<?;`&1{ksnyJh*Sl zZQlKE>+V<l-_L^od*=?iv=as}{N{lGha3U87iYPp1yaK8F762<V4-dKh?6wEN~hDC zl<Vt1(hq43;TLL-!u!&~15{rKsQAdN)Zz2MccFxHaCEqTlyGvK$4FssRE$0SiOS^T z!z>0;7NPL+b*uh8HE&bxfBk%`h6UvlJQ%-%yeth=7Zdf_r>1?F|995Z+PRI|9Sj<~ z89;lPhmCk;n&kdJXX&WC!r0BB{Tz_1rVAVVrn$wD!Fw?~gI_K+ey=gt$5k2>>*hg; zfY6KDGw~4CGyzC?Q9;JpW*TdVq~8bkY>Rk(C(wynC)45_XyG=!%sNqYTFWjph~qKq zIXZO@?zPM}&(rcflB*5x3rtwlH0$Hp+1p||D36Mt3e<s?UN7h7Gosy^|5;>>JoWRJ zhV$ShV-7xR_{vBc7;idkwdu+FqhoYbgTI__ER+e;dDP3}MR<ga+};C~U-7?nI?#Ru zC~!fm3e(MRyw^EMURKLm1Fw7|B=cpeY<n$|y>)gbnMXL3Wp@Pm^s0<AhgrdwXed}b z_<J;@m=S*IrK7^SJJRXryU(7z+-tWXkIB2L1OF7mwqMq!Rb_IE(kDY}F&LSfTAfbQ zQnI{4n`fBk!pQyE$4NFW@g65lhS_;?d{IG46q~q?1~2&`X+Jb#yVorI$L6o&f;&mP zoNL(&^ky7q<h+;4s6w-Xk#$MJaNU@_3DN+#0~#{<I60e*s@xp^rIR0cFZUAaf|^A@ zJF(qa-|Qrh9tF*O_VP#S66JAQi>=)xoXWQ^Uq5M@%eJZ>92mo?#c$C;-gF!i7u755 zCL7&kb$ULbQ8qrQPNC(&s&3fl@m!GJ=8Ua6Pi`<0z^enbnPm$lWoG)CoD{`C675kw zSlNpHPOmX9COnsYNtgO0tL?zEnhdw?6+K3<nOe!0uWQ9b){2znSN<m@N>H`Za1i+g zQ<Ru$1&tu(m!l&O%fYYy%Zz2D8W|Fv{K9$3Vo$9!J@-qGMVhIVW;w?%K4k%>R+=Q6 zuq9Scu9Zib#V=l2DWq1~3MhPl$R|ULqpTHwD)GC^oi2OD<RVym2nCwp?veG^bjq}H z44($BwC{Eyd~u26g+5b#ypBW0Kl~jdkOSY_^mKl&>F$7AB#gxRBjP!#dvnjD+A(wn z{=Re;sgClAWNZ5&dFa~aH{+pgA2;A&Y~&#hKxKw#ju7wE0Han_)<-tVM}rw$`mAU^ zD)yIQ?epZboyGE5opsABO1t)-KY#i2e)K5fsii;K-q5Ysf%;jX20d~juqZokX97=; zYvl`e<+X0W22oTALg2Fv&GHx3Wj9}Bai^x0M)|@OAt{lI8RRGjTnN?bC1%`fX?)%z zow@$`Uy?lo-?wYvr`^M!-W}~eezu=9GiOv#4xtwP4nN(0@#c98JU?o0{<8nq*8A*Y zTaO~^kU-A$@hyk8kBcN9WGThFOP1)|P7gFsJ}H%l<sciTM#PonMZw1z8_glMw5(=B zS%_dUI|tktBjQcX_q||&9>y2whD-^eP}1vt%4*uiapU*rr}+pBYHe_|8pF*XxBz`? z#=+)hzSU`e3p#5@C4W48v$wZ@c<5F!HHA`E((l~>6{<seuTu}9MmWFQ<b<Zyh`YxY zgX8fu&xT}i#9=Jip@zqh;(;o20>Fg=#F7}cZ{8)x@Rl_V3NlK`%7{4wxsbI?P94NY z&(%Fir|H?>^6@W74WI4WEcBr^!{Nc~zm3KU$QowOM6)W^HxcxwD9ao^g#p2O5~_$} zE4T*kUgG*^wiY|hm6NQW5Am8hug=m5uDRT<rNnF~q~bu<2dW}Ohe*rs@sDIZWTCuV zc<&XdnNaKp{C9J+oAi1;c8Fi%`<KHu6ivj(Dm$B07cy;bjEz{CPTy14534~sJt-X= z{5r)3;??{G45FE<5ll3|)0|}$_ybwY`WG*ckcx!B$UM0IFUxhH=P{u$A1^dKgmwqc zb9q^V17prlX4vHvyDZmmutazbwl~PPtV7=z?!@+TW=LW^E1jyIR(9LqM?lS}$yl@p zftRpN%xug^0?5r$?h_Zo;wgT>S@|SWuw`(;)-cUG%hGXa-@|Frk^YS#f~wsiM+}IQ z!Z0a(TL9idFSNWwS>7t<6evn_8H9(UHRD|FGI2YDFw1wUd;+_bB{`09l6Np;EpgR0 zJ~84f)gscfjabQthVMpY(I0kb$sj-@mThT0u`M%+g>F-93Wd8xtQ&vBQoooXyVY(> zQ_zxkn<}A%<w)wbigLl!;dDL8j*&#WQNh1Fx8|{}b7*T9sqyBd#+>ut8gF)u=j0i% zC96v^V#7!w_p{-@<E{S<?Dyrc9bOaQ(X*7?{~>*cag*ufs*1qMtXDo;mHYB{D==UY z5Lf2G<22;KuCEPjm<uo`UP?#WxT5m25(`!>GINi4X4~ncn>d-%3c4^_hTofQVOtRx z<}7=quaT#k4jRH{B9N>v*lMBH6f!);6jC}-oQqynHGcVe)f>}gc8;5@&8FF^8(rJ( zPFBsKBem5y@lB*QJK=I@+P-E)M;C-fM&fX6GcU1ZW3{g}8iVx`;hsllQcY#e<_#-t z*$Yyhy6`#+t{Fv<Gry8;%H2J-X#v~WfH$p2QS+CZ8Sf4^*a~V&B60?h|0VgKorJGk zrTSnDP=Z<IVz<6-!R!FHdD%HxsAZ8HPB0}ifqIx_0o=_ligkt*fT&8tt^4okc*-fw z6nLuvkb+rde+Fn4BY#|2rks)GQlL00a}Mbh#qC(>4vG49X`^86(iWX@CPrfVXv%<0 z1I0u%4QxWJ*mt<yU651(y@MaeOh&fhQF(Q4FR*PdXO#<h2Al*u;CelC5ZV7tr_-Rp z%~#N&q0A8%77N7RXFxO^pY)o|zs{&@ms4cHx*f5?mJOT&jz={N&ha_kNRD9X#5I8* z5)|*p=VYH&{s_FiNaYzNkCO2@D=<-A;ds;uGXO=)87hKK)x^0R8(hsZsey}~<>UNp zcD5aTnQt$Bn%Gq#%i<}5e4JTmKn!8TphI(zXVwB|IKXj!VswFGc5*7;s`JHa50I07 zijsUUyuXM~p7eY*UfYg-HFuLa0YuvWl9~@=3xiv`bsvHt3&Q0zGh~5boP%fue!N%d z8Llgy&}1ii)P$=rEWH&ej;*mcu(Dv1+^l*4g<W6wERo^Cl&^2fxuogacQSr%$$RGC zH960k+=qBw%i-S+jOm*l*v4&JKKV8YZV;Zod}2<B!@qR2*Rj79*1~J%`IqJ4HX39n zcqgjfsU7A&eaK95+gnhK#}gi&a#q6T7#c-}Kw-Zne!TH<W7AVE%F}#UB~zoUARHY+ z+mYIQk8QN5!BDYLHl$K;4KhYM?xt+K<ngQ`k_bK3rE_Ic<!5GSre=je4QNq!NTJ2d zs##{?18%5Z>oh_M!VLS%ExH5NlTEYm9_`fDU&N|I3+)#;v>oILk|)g~a-D?a;Vso* zeuFx!H3%zdsKu<VcE}@W36d3GS|PMr)N``^5cUfG=U2s5cxlTjs;yD+jIaA9TvAC1 z)@baAXg(pV>XQ7=|0GR^hVTCWbobfeekfMFg{4!_LX##SU~M|h%VHdAo~i+>9t0r| z+zff3x;6pE+4S93{5$E8L&?oP0$4d9RY8Z&OlRm=fLAbYx?dsR<+X2?=0?)I_%|b~ zKgxiAaS%StK>ay!D^Z&U^r=q972zZ!INYZMxidwK<pjuP182n;_LiHsN8ue7kAUki zhzZ`<Y=@uZcJ{+bWfXHU2Dj!6+=klw(S;k?vkairBu=c}w>e$gTCQtb*U&ZZsI_5G zZ}ykuO5_8zy#IB>c}iM#p_K0z#bV{#lzFtXK>wb@m+Wy2^x6#?_=^IL0Ih-x*4C0W zcnrobOXD00OEvv~e8Ill82_+fi06&mPV)b2dxPityLfS-Q`=m@EI7O5@LC{i)J2Vd zNj4(jxbx)=E~q(ded=ZQ@jq*7hb`D*ESv_KY2y@I5gA3B1+Kacp_yxH{ufp>x1QyM zZT5qlFK_#Xzq%4XrvVUwDS)0X5R!l&!E=rsfJg}i4Hix{I?)miyUZC%gu|f#{R>^H zIi_@CApqqv0@6$gY_iy+Z$U4NHb_@iN@0{1A#g{@cRlABn#`b*VKEw+6B*nnY!U*S zwH==vS;S34e0m`lD6R^7RYtT_OK}`yI1U^Xx>6WR1EVqRH~^o&77GYJp?qO<W9~V+ z;NXo2T-!8}K-*D`gcYmAX^UmXh@B()7(fV_!%ckVk$WDo+y})%z*->wfwZ9#*HBfC zpEy@SK4XZyHfqwT?^`sb-q1S1DfAR`wgell74Q;BY=ve`kfGnZQ6LI`+xUfyVF#Y8 z?Y{U(&EGB&xpt$=DVBCnu>C<MlcboaVkb`4)@YM!_b6bNPW<6kV->e=|3b#bJSNz_ z&Pu$Li(e1f2{#}7w&H*LX4hsE6n51h;JNX?n-4bcf47D4zYp%-zjuFQ^A8)F_rANg z`8EFcGsXX^*xy%_ug*U!%$YEpsTe`G1*c$L9bJHWnSV$}kVA^oWBmgnet$~K(<AiS zfa3!hg_vL`v+1NLIUWesTXHwqOQy4Nm7itgSg<=X2ac&532^?rJvjGHrs<jC3QWtK zD<!1_Dlg8C3%KDvhCn065GMx+b$qddL@e@HVvY|i%&SV-Xev83{UP!ggN%+9Q@oc! z_^<cbg^Hg{I1Es(qG2$eAXbH!{!sb8B4x=<3Dj&zAwTnp{g|mUaXB)9*X+^jzuL=C zphz<QC7S0Q-@1*jW=pow{%+ld@NYSJ_MYtTJxgwZYw4t#cI2{)V^|MZm~qpPv|+WC zZr(e~Ow7Ujp1WTDW&f{B&CfyWa^#kpr^~l?-gK?j<jYT6^IZ6`vSA}?z2IB7#2X<D zhMz|Rmd(2RnY-=9Q5yhJ+$w?yAy+B+VSlVz_1y#B>4`>q6wh>j<=;vMX_fj*DyRTQ zrm+IG8DhPF4H4M{L>*rG<Bo2z>{Z_Q32mGDH_Po6N5^Aj%Te*yup{MhoOz@!y>u5e z0Fnl%8B$HST78jW3v4ng4V(vp0L1()qo;q~syeLF{`<ydg>U_Jb$GP9_m>1xg!JDx zb`HOLRZN1<T1$N8EhY8UGGpT7Fi<0A<!J-GYgs<tG+>SXJS^SsS6TMH>9ctg_`%5d z#WciyNOU*2nxC<xKbt@A?*S$f5vd^{cpn;G(Q5cGv>&2D!KbDVSE2_KeGT-cBc{hN z9+##Vwr_8grPGBY6{K&~1Q3^{sX13#eDi8OTya=0*OYFs<q{~c&u&i3wG%w8G@}g% z*hBt<$?1=b!oiC;h5ugEzJB*~7ykKcGNb}^oE0jEd1Z)Ht2SB@B6D{jq^CN1eXy^# z;KbS-4)#g@1B=7aG|&81Z^i}7V1}i694<tf5pw>fyfQg|$u1%ngQyLQ0bzX1s|;kM zRad(#0B+<{KTogM$|xuf1sQxu0n|##g32RR>6#vo_GQC;*e{KuTU}UPbMh=|(RIKS zFwgyzbLMo8)RZK>rqP1}tg?NFgbfNTO2DSG=4b%bRpt6&JvnXg%7svktOS@Z<##me zzt5_Y19|FQXkl$N)Rq=~hn7LKYlGv-)U<laDK3~UpiX0R6X#LEHcH<z>1yoQOzdbT zhns##X;(;ZzyXC*N&@B9G5{@2Q3l*dO1KQv)*taRZDGZ>J$|$Im*yz{B-S1I<d&P} z&UUh<8n3Er!~v1*Ac{{zAD<V4*{HAp{-o};i9E+G^}LRr(FZUw(!A|8`<9}l67swu z`}wWpMS<2Dwwgm)Uqic{93-d3B<r+p-63@K0~_F|M;Vp~M!KxE5W^ikZK!$VO+&x` z;9A3vY*ul9$o@wE{?da}EYBR)ktF}x|48N`NdccFQu6phLM^B*Oc?gf`IFfM@N4|b zIPR7U{B~G&)N7`20?d6!>#;v#<RQPF%)-}3*>SH2z{|bYq@KAF4D_*6w<T<QjX0>c z;=pUhLA@OZUPBI|Ejb9Aau93FfohC}WbsvdN5_JN`1S(@B%d$~ir#HY`DRl=?0U(u zuUm837fx<1CY|<m3oiE_6P;K@JDm9_U^TuS%aJ12CAX5NlqJz_U|4Umf0(t)D(>0` zraWC2-y+i)Jcna8Y3GU?kP~{zSI@VcmkqJe(09Fge|r2Q+@$ce8yGXM-?ro17P&n4 zdY7&$G0`_$f5CSUY}0TWQdUoQ3ZB6wX*ug-yyAo|M~N1uYmk1acBoiVxj4e9G3|4O z)*tc6ZgYylLnHt9PxYAFurZ<v13ly!J4<F0o3s$)np$nTS9NtG7vnx3B3J?BT%l6y z)KkO?J_pB2kXib0LoBCOKIWq2CVZYTF*EHbFF;EM6qM@*qeY<*ywFU4kp!U%$l9}Q z!qo@&qqurlChD@E=6G~r>X`s|3@6kC+x}E#pOMzsPq7bh$6%BKcJzKfJ}*jhUO++* zJ9bJCGk;wuN;+T>7e>8vFxA{Cq^E}4dRVCUQkHFXROr`m5THJ@mt^R1a^8=j)tJFF zvoaRtsGrv;Lk7&+J<Q?bZX=0L{q@y8K=MP<zM#1Iw^#lpyNLEj%LfhL&Fh<)PW-CY z>>6E5g;pK~WXQ^4q7ai$D_Ko@nPr@57INwGHpwfh>Q~xd2jdS$N*IW2D=ArR?pWST zksa#Jdg`GZ`6@iot}WiHd~r=Qbw7Rf6hyIDl0+^$4Mj*|ttvWIIBTs6mo`I%9!j6# zm=xJfT~av@i>SHD8p`M1_=MgtTEbIk<9Ks~w}#o&)MwTaL`&neBPwvJ8ipybD?U-W zoEDn>TIkiF$SBJ%meIZ<pXhERdd$NUX!UmEA&y@4^AB;m{O6Xqg<IeitzC7Xql1kC zVPr1C)67#op<7$L`tnv079wyf-^;TN-04qA+Z%{Z+dG>b1kkPIFJp4xk(#@9pX3Zr zLZjf-&RfUS9%w7Kc~sRVL4uwP6+biKf_Nn23T!N?A3DUF3KB~5$V7?s5+U%G6=5$D zc{0t5shk>sWWf2ZvybT+0`<$+1mhz!gHcCSSz~1saO9rJ*Q$jVQU&HRfN^dU^TXaD zYJnbCl09f%Wt5%t!DEU%7L_J!Ho@8}B5JuYsc)M|y+vgWQmN0XT6d%$l!jqoIlYL! z3XI5;X815dIVmHFz~v#ZgL0k&&nTF>O@%Gw{BtXZ^UfTRxSvIugoA>Th9ko)48!bK zV!GsX?ODBBA`rSQmVL;J8J~Qyd8LwYnDdu%!kZ-|U<#Bg+VHnxW|QUhPg96J^99iM zEj2%#R)gS$(z0U5>+ABAnKknrFE&di75w~WpaO_o2sj-%4i(7DviNPzb&x8v0gRdL zA@Y1Z6xh`q0S>|*>GcL{tsQo#W9<aHoLs_YEL4M>`v;%f3Q|wjB&g1#E?eK{HErri zhpES$)lrNP;|33?DeIq#nz?Wd>MW%E_C|RzhudtFPVqPdZf2yL84agBD~%-Ca8NEd zBG<wLaybW&fA>?-jY^x)(fm`==oO=E+~!DXvr(tXtqzRKCp;P3*t$RYYI5f@ot63Y z+Rn<e^y^vqTRAJuI_{rM>g(8o1n{FKT~PA6|1UXGF~cVy_&7y=JyhD$&}6ivPHop@ z{dG&U(ys^mZ~b6D!bPVUp@pij$p(?hx;06DIcQtO{YjsL83_;kzFAyyj93zAaOzkK z7>|FVkNUut?fe)orT#YCpdB;yj!o9K+f115h+Bd2!?UM205v|0IC^AEct17svd0RQ zq02YcISz^VYsyL34W_!yo!ad!wk(<n;+b>Ied^Chatstr#-;%mss=!h69gMo-?8B( z?|Y3lA2FZ(J{H{aF2h$_XkXXaCthc-oo&&Ics_$(L31&$aWF+wfzt=|n51o9!O=s8 zPa4}^xXO}SYyK7FZ_l9jzs^i2^zt!4Vpdi@0<i4VNMm-B)#@Twd~4RnE2lI$ORN5A zL}JImIIi8REg>YYY8-kFEx^TyhkRF?*Y!PCu&)9kNQ~oZ-?DVZoUATu`u79}I4UPb z)&K>fOE4&KrN{X{weIE(m(=X#iT*8b<KK|w;j2O6ceSgpUyc2@-2A%%vZ~(sh4v1i zaH-j(pbq1{Z(8rM9KJfNUc7)lL-0@?gwOGX)*`0Rn$Hnha}1H^&JNkS9M3>+v8x~U ztyQ=L*17nI4{1^XOEqe3MEfE-k~s5XN@s;N;7pa_5rO*1aFvdxSvt5#;8W%+l?@cN z9(Q0foMyNM(76s^!m&SYGQi|e=O``9PHwrPz*Ia)_*;l!fTtX=IzR=qdxhgiaX2uS zwZ-7Xl>&YwxNlWk8JGx~>2@&r9>FWjD3Sv*Awr@f0R-WmX8$0jn<J{Yc*nqMU=v@N zo@IjU;Eb$D!Kxjg4`QqCNLYL5mZ-c(&@a)$^3em;nI}2LVSV;rzs4=|<jpGu?n8r& zR6T1F@x{O>>REosJ?R$3`P14nV=tE>fJqLkOb{H{x2u>TMl6ksbqRtMHK8WJ2s2(g z50qLR;A<9)f-+%Q9})FM4mU67ZlN#`rS$6@O~H;qz*>j-<z^~_sZpVCf}ggyvap{P zY$sR`6@pW?tjg$Tt8$#GvrGyxRoo_5;BzYG39aV$#mndW&v_u!QHPoEn1gS(LQhvb zMdc)t#oB7M0{s_>FsCOXPpukFeqY78_50E~FIfdOIqfjjYDFBT3}fA<W-{)&>^5|< zDl3Eo#kqr1|D1O+wlY$U?2s025YzS+nveSc-7JKW#o(oaBH+C0#PCbs?vH(3Q`3m^ zbULuhDjN?<XXPgU;aeU<%(Q!zo(#45EV>LiT52z3n>AuB1aIREL6qm|ON$zxGOYaH zM#Q*^K60&MMxz#DYdINTtKc#GDtY`qB#*jQcdL^`w7NMGil^Ou6;L7q%2)YB<dfFY zBFX|8rM0@4B1VH{C6&XY*DFXWba~TMiMnOBG2*YyZfN6O%3Psk3AyDGk_-Did<oeF zL>EeE<&s&A8$vt7&>m+v6(l^$SH-6Y!5x7si6EC@5pK*Y=jsxzjYOYXgy@==>#?=a zRXd&>b4`WI;A(Q6RIqH$V3$Pq@tfz%r7CvCm925_G(!g>ULfpH0Yd;bILI!VL@wr< zV4mkR?dh8rd+%Nyy>5s6A%d%4i#WtoLoTM*8<h1&95yOpW%Bq~B9=C`g*Bk`#?M;; z73a;s6s@r2qzOmFddOG=PwO)TPC<~JEH$SLaGQLrHlS(&;<<x7LpIv+g^k6`tugnQ zeU|*N<#xy2X+rkrzJTx%W8=P<!$!!U^N%`BF-$|ovzPpoK_Im~C{f1ZGR%dAkPRV9 zs|sR2G3ZAGPw`8kwt#Fya)$udQ?RIWIWnxl?BQNyeMt|(WfqIx##rsZdK(SwOo9o= z6J#eu^Kt73y5qlxO1)hRqh&Mjh9+Rx;XZ47ty5I_%u`2#A7?0PGLIVw(wdFS0#%KF z6wmURA13R|JpM+D!|}LCz`5g{=Dca?k5Lb^vrmGGoJ&ejroMx0?nvR0-$YB1^33}+ zT0E-e_ttuFg0PefqEkvq5Y5=4VP2Jex_j`frAm@AK^cb-CXPpslJwyizbMSPn9&#^ zKr46<s-#y&FEC51n4V>WZ}c6T>A_lnL3I`UDLz8zR-!KUnr7fu<x2{Hi_NQGPjTj9 z<~xr(CdY~&Z!uX|xV}j*%RZi_vyz<bGKpi7AFjf!`<5E-a9{Eo5cP=2E8gUH%raNF z@KjE-=f!M9w=l<9B6=i=>w;!moS11C8ePX{F1OyJwDqmyFjg949&!s8>rSEy(B;vZ zbwk8uIMF?U9?T{vmyhY{E_5;v*r&&fJ(XAd;QV$svc0wXxHm{u&G;EkeNfs}Abi1g z@C7jcB%$xyc6VWTY1WCdq}iF~1=Q*WNl!Qca6mt~b|<o3A@$g)gK{wo>^!|FA@Sn} zcD1szrVYfY*9Yl>Fj?ve&TT%7jFr_ZVejEeR3|g1S`mIDG==R1KH^q{jd^x0fmjj~ zHQ5*@hA=Cih|_Yo=Tx_7R7hYUfb2O3b<7>hSI&_$E4ia9m(+H}q-IN>qEqrMlp@6c zR9uHuppo62R`v0d3(G}%?U2>$%v6b~Yy9KbdfbN9`<|~>LP=t++1A(4+krnT*_y&L zC|C?KEn<AL10{Jv(I<GSz&Kz5n#PtAyv`Omw#ALbRuxJ?673($RBsUi8jp*X>r9F} zMK{V$F=S4K`PZq2NzA2LwUT;W_D*iAR+9B05fl^`Jsg{S*DULH?W?Kc84pHHJ~d_T zU0Sj^3#f5Xv?4AQ;d%&0ZtMZEh=O1mhbxqWAj}c3+`w_4h{)Zu4vcz6{YCc^8<$Ys zaEE$`ND*!mE2x3lY)#`6K)i^?qj6SdhN7W(fHFTBL#pP|#oABN8mdHp|F8l%yfjBD zf#_3wwmlV?%rs-52rrHqS!^H_f1=~3iAzVoQUeaHfOjeuF}rrIIj(-5f2eZ~{W1Rl zxw*zHo1(w5Vb#;)+z9swtpu47tP>576j`~8Atg1adS)F0C>7;29)nah1GS@#4$b8( zXC;m{KIL2n7<b~<K*P-q9bYQ<bS&WmUVi8sAs<4^JQ{g}wcGE{&SoPGnPvMBb;1eZ z{p%iTZ#V&)`SMjYZAc2R$vn|r-f+$``pUD#AVIW}yHoa{azOd$yakN7-WRXw$bZ{3 z1dw*mGFoiJ4&U1R@I!JBvJJFvwW%$)Z;Nd<X}9yu9Vqqf#>XK;pWAd~V5enD_|JbC zp=}dVcWm85WC;Hqi~!i>sW}kx5=jn3gKHkDSx+=*>6$|{MO#@jV49vGggZ4qBbR(Z zTgoE#F-+y*TgZUOQZ{ZZsM9EnVmTB-E0-p}*uE9G_sI<+80=Ft?<>_xb;;ScBH(j& z^n#}IN6>?aZE|s&uer;+b+aNQgCHwS+(JXW7z)0!wZjN5^0q1kI9s(s0=4Ce0hm{< z*pK3vN@dJ!)XVG+2D;4Dg0g$11h>l-1bDDoF+>P+WlDkj@Cp&6mbcGFl9XZ@)Ziov zcpL(UsFlKrOw^N313=e2U~0#+E$EH{ID}&xuSiN84%4*SIR?XTPK~y*R*S@j`*s0( z3xg;(_AU}ZGZ)C2d+jwJ5Z83`B|^rp)OunI<o3#y@>F_t172K1-P%ROUKh(v8|(EP zrlb_3^h27Da1P0;b|;Fs{mB5gYso5M3=(zLqOlUU(EJtc^7DAZX0~aYnupSeZJabD z#MD9b95+&6qo=$5Fx06_B3+qb9JEU4n%RJ_Z0b4J)D{I}Ag{bGmWYxO1=brgMgfd1 zpLk$aXgG|zUdPkkd9as3y1SU0k$}lBJs4M8Z&5A@P>Z#}X<9Qei3oAP*Az_n3NjHR zwG&kPazYUn4WuF@vy@mwCH34By+wkNSHmZfjIbT+j|f{@IaUz_bRZh352|9qtb!xE zy^dLeT5ci?=_|-gmmG~}Me$x_C9o@}%(vt661V>(Q+HMZzweEJf9+-S0eEF5W|aIQ zuZoFZ0#NvaA~VslxD1Lmei@Q$G#voR59pXjf$YNze!lSIu=+g)L7Rqv_k*47&AA3p ziwFjb5+_7NACyH%>M=)cF|A6u%<jK$Ud$}|c+dPbtQNiFo%7bW7JeiHL4zPNKhJ}7 z@=n4sl6E!aTVF9<jxI!oFl`b|-Sz!WwChG}@_XKmP7>rs?zo(EyXJg7VSJ0QH7LZe zk7n2qxo$yQOvmOuetES24cSEaGW?&jyvit}RhrzKX6fi=!YL;>O(S1PP0u(47}wWD zF;i*Ttw}d*1z+5;R*_duzQET#KQ;X8>_ZM5QIf*LfHU4lkR_7amY3vih?Y;#zQFPZ zWrZ&NAS4Cf{g+8`Oh6##bft)<Nqiyw_nH<gKmefjC(TUG3e&2#s3SUm#ny9-B#k*n z<}-mvQv(;>xq|$H%pdW(gYE^17}n+|KS{2V{Dj-1n1}Ps(=BcLZR)gxQ8Q;#IBGSK zs97eW6Lu{)!RJXut$GGebQoeN>L3FJr=Zw&;PK~@Wd-Dn<19IuWhJ{>pi|1|10WW| zr5|1TgCi0cNKMiI&ZY(7uA|t%jUrne+SgQ5JScV#8YU?9a51($bA9E1Kw2&~MUI5J z*wWw{7QowcVdvoK<e<8T=gN|i>l{dU!yJu1jJt%W?WOL;`Xjj{YSp^)ZvWZ-bED35 zR_K-e1~2vOsE2)Z)y~20x5x2y490VsU<YDU&JZ7ZI5UTcKO)E;(cKlD*>EK7l_7xk zTX(AZC`w+I9dDD+!D$tHrsZbI1t42jDzj((Ryku?kR@l^m2tMYAoY+c;|y~_Iw4gC zb?aIgl3Z<}GD_&sBP7;4EED7!QpNh1EXXH>350ZYc4WgmIKpbma(0&a;SS_o$C+r7 zvveR^+aFsl@Z7wQWiKG1C;O01#ci-mPG{ry7v^}M^5T(GM!4Uvm`MdY5n|M(T&QPD zNQ?<H0`{VSE5Cj^N&9(q;ldFhgu#4=h*qQbrAM3`2poVkTmqBya|YjVd^*mqhbxZZ z5XTuANd~<j8x}Zpt}UJ0DRy9pB?N}@ZAR5uw_+Su|KgX&0q$_@jW#7{@xjrtC(h4? zV?X+6=yn)E_+`zTgr*IF`o%c2vCTz(NPIPg9@|tJcr708{J&wDUwV83hrso%1?3y* z@!y?ohW=huuhK`F3ya{c3p1nqDg6M;k(L6kARJ|J=W&;(a3fr)amArR5@LIU)4Lbr zt$4ZT%uj2$%I4-=o0IG6>w^0oFE}j{C@vfcnZn4iJLq*L><(NTFmD4&kD)<W-B{qK zQR%|9v=eK-Q|+;GhMnrVx+1qCyp}{_Y^s@L6SoP7(}pPno7a6jCm(0Rl1Kv%`eR=( zPGLpIgcGZ22|n8K*PthcI`;6hrqm^e3LAf8Hw$be*%fB-+B73l<??I!Uu)O1l2=*9 zzlMQVb;a4PM;rB%X@9;k@E9{nGuCs`em@_ef(EKTI&+-oB{NbYG|2i>v8GsBJy}1i z?JK4FfP^Wqv!}D+kdmL}2!3Z>G?8H!(Bv9EYp{TgQ2qSn&-LAdu49xBvEdEe2X&K0 zIzu}gYRT`i*-^s$OCz|90PHfx#K*;X<jetw3V*Xf4$MFVPA<9K>>`Nnw{WNZFlVDJ zn&`;%9#C8~d$o0w=hI&DG(8_x7vIR_g*neqIKATmbh}g)ZYbrtjZk<by$#QE2HsHa zu*5X;9uuHk^YsA_)PU6o+&8}PDZd2AOWNd1W!`U6Nd7n9bXH=6fv6PlLWQ1G7E{<k z`s9aM!v+hw@=mgFu76u>XjMM6BG3KGw4zMQsg`zG{OV_S^>nk>87a!kZK~6#i4VfA zm0~SZF(uLw#EY^AQud&jk?Tq3iC%`nY>XWjf7mI&su`M_8(a6RlQQ@yu@xO7`B=>$ zDI6{*$zvTq>KUd7ac<RY%v{$D;aU0~E&ApmT3NvFZ`zan9TA|>R`Uo6Iyt)yLxREd z$^ZNhj*sHk`b#Tk^I%2xGd{kJ6^JlRYkbKMv3Bo!->UfuT6-(mn%`8c!<FK-{ieiO zg;@tt+{Q<Gp*#Izf(Wr@u4b1uLcZQ7D`fa(H<@pbL}UPGip0|o^j8HwVRmNKhlRdD zjdR@NaQ`UAJYpl*O*TGmY?#)_kgdn(gY%j;wzsn#H!ikz61zM37_a#lX(=3dEwD|i zv<6{O=*@v-vX2w<L12o4<gsS^lTqkSG%>XcnsSM|=gCo*hNOX;&_eqxD2Bw%Mc;)# z*Yyl`ncr#J8?eahT(m7s-VhM?JLm-taU`c0R&x$49nnRAMIk>ktzbq7F%G;x4#s6R z6(_HAIizAc;BQ`&?ZK+AiWYvuqo?p1)`ElO_HEmtml8)JJRJ*U19k9(NPWJ5WQbdN zaxzN$ff8OZICIvAxP*bWiPTZNX(3YZ%)Irs7UpbUQE>khY1_>brMVt@8%W>LV;p4; zP&SaA(;;2b*24wEr&V1VU2VlOur=GiFq{M~?agceDhC_L&p@1SmS){#%56GE=LtuF zk0}9)i{>jv1f?STkCR7+Di5J*&{(DYYQ`7&P$5yav7DyZx8Jt(I145RTjjY*rJh*4 zAdke776(W7G^>%Kz$#D4G1RZmNa2`;!u@c^Qv<{B>(QHjk+iOvO2ewtI#9q&orFx{ zdlR?FbQX*|7R{yPtm?SR2-BYu)AFs{THQa<?*H%xXufq=I|0<)kAUM4C3{bVcts$) z0t-@i=z(PNbQk{lYtWvjL<H{Cu~~EO)tl&XJGSTFQFAFaD|6H9@)J{C=@M7Iao4t% z{t|c8VU^2V&pwqaI?mQBzIaBMWb`O<PSm$|o=boOH*UFS$%A{YianbGSqV3jqAYXp zchsXOeidbFuBW3nGWMHGx--^pznSiw>+j2q^Fi#2*><5nDoVs+!e6}gyse6viJ*5R zjQ(sLK4h2K1srIqt=3wda?-S9h0MGgo<{GJ+6&-{KWo<%3on?f&@q`r*3M<wi#;1Z zME(yk=Kv1Q*Q>qcan?^~6cBttHxv5S84^H~Dm%WAdw$M1;?$2};olYGv2Cwq`SXE= zRXYaZbI4K@M^~G{b>21<0U9)gE~g|<mX7*#N;@_MLKTgQL>O;MqQg*<7G6Qa4M#6@ ziU~Kw*K4@zxQ2_~&PG;ZxPm`;M_X6cAV<VX60EW~%Lp9ics2zo-TS(>9Vh{qp~T_T z-U90i@ZKO>x9&E*<gh?>2~E`*CNbk3;T8n+LRfQs|8cNxsVqh~^Fv9?O`DUy5EqNf z&$eS2F;}l8=539INryFsBMd3Mjm&zS1)~NgS;}IM!Z{hgc(WRQFd1cZ+h*^Ca5=hG zHeH||y?)~$C%qF!ed^tUHk1mMqIJEF%Ox_C!EDt_c*d5-tJ&xUs&jK&&=&2!7e8d3 zuo)g4Ywoy<$eFRjN{5luyduSo+F^P{1RU7R?5>9*qxSuEoHmqAHgxdFbp%()fi8{L zF%vZK6ej@)CTxHyA~S3~w{yldp<Um9kA{=+z+y$p^%6Tu0WTNc4q}5Q-K!5tgC7^H ze`<PoGLb87__UjdzHfb!W5xkzn`&#fxlShtr_c^z5D++>rs$M~NB3C)A!~%$&`$w^ zBnP8<ncGtsl;MZ)n9vq%;!y-WCb*5E`8Fp7>cYc_JIzl{;r2_u7B_v&KZ;NW<K+0F z5-8sG_|ZnEM}BnH3<z&n5`p9OG_M?fSRc&zl)%1Upyd#bUP!{$FN~H4eMm<Rg@hR& z;^HR9({$WF#cwCm%&3F{m2_TA-<uhS`Y1Uoxmr?=9ys<!C_jN?E_{J)Kr+}yv(Ny^ zVhZ*ZT$sJ&rM>1lXAxvn6cf{$d`PfFVAeni$GjZR(h_jUdJd)-?=Gqg?G3=W#Zm$J z)WDbD2o@)d&oD{N`t9c_@N5#EW+fRoQd2QhevVgGgaBbQ6sSy{Q;cX`7iG)3W!tuG z+qQ4nwr$(CZQHhOyZZj!>EwHyCppP}U2D%h2I|@2Dl_{)5BwNFPEr8Y8Gu(@8U`+t zTjM>z3anG)6d8!tU(Yb!P!LvN6OW`47LpX`*d5?6aNUft{y=MqkPw1m0Idkb^mIjN z?>x8(+C=6G?iHZu9el4pK%L|a5k^k^My&c-1YFUkFEe9d%6>C&4k0i;#TdcUzHwP{ zk(7ty+<RBGrrrL_b{_=bauP(rQBY^@>Doo#yf`f40XN|wKhT;6J_vEWlzfx;b|5vh zY0>jfdf1)uC;5JL(86k0xrR3U%^(EZGzN<Z@=wBd@>A@k4YnF_Asez#qC^a0JQEc~ zaRh-(odr__Hl1IN4|wky4bAoUID@u08hea>`kAPsC$E37xCb<3d9sSv*X_X^7l087 z@p$>Xpd0-LP;0ezeoOZL(QxA9jDYUwC!YXrW`9kgz71t_n|%=kr$t+feW7i4#a9x4 z`MppYiAh67B}tDw=4HHk)>(f4>{vZ}xZWSDuKvu@*~4*}`rNn_{wj&!?TiGxc2IrG zNvmeUojrbTC;yP;?rwK<uXIecs-FkmNd6{D;%zY{*SuYq{`z%1>9`jEuA8qhF0N_b zANq#ECCKRxZ`5vLJLevdaN){XP4^kaD};qW=2{x<^`7Mz%%B_FW8tx}N|X_#I_zEb z>5JU`u57<ZH!eW5U@L^;!7U~ve|r2YkBroC9Y!n{N@gSCYvrI80@e*z>1D~7?m+^T zwuQ+bfYFW8c%RuI=2uZL60`aWknv5hYXUH8BS@n}k?9}7@&e9JhJcgONz6;}Y4huK z=+E;8^WM4U<sJP_pAHI$a9~UTY3iz=c`*%<o!sp2^!szLR_FpNmF#e{MgMLFdJZLq z&-!fL`LgbEd#+UT?L_ePp!t5m<BFZz+6ecq{l92e82)o2`V?9HcIf%fGr*Q{hV@WS z*K!bhJB-J-WmW)pM5JdmjJF%f=hHSXj5ogepC5VSYrX4He7)#?-u6Y2yh-tV{*wss zy#AA<c76@1e%^Gy?gyhuKVrIGhgHAsyWb8&v1Fc5+`s>mSlplglXxC({&Td?qiZy+ z`_b2fSUel%dAPC3|DRUy9tCpJ1_?O+)h}|fvt-17OYlLPsAQ%%roau<0OqoL^drU) z!Xt>1k#+nR^EatsN(x-%5j>5tqbi9Up#xYZdh7c&yS3!r8$eG<*B<V^p5~Q`qN1y| z3oj=#luBsC$GLF>S;DRT_vZDHR{>2X{IqPU%zk7{s}F`#EuF<t+S^3ZOX)8-#bu%Z z+(Rg?9mN^6PN0V>hjO8|F(gwbAaKYe{x+R_CNSacjT$o9p)g2OJh^-$aNCH8t~ecx zOAc0!#Ffp2?*$9a|Cw42O}z-jSBIz`77?wleF7rXyZ!^^R*V+aH(<*il&p*3^{4ke z9^Q7FIt3%JZWGWMh#Ioc<#g{YvVMB~S%0-pM`yxL?@U!_;ewoR5;7m87gX9SQra4G zu`vw&f%qRL=ZsXM<c(uMa<8Gk;fI$^4tGmt!%UOW<2$f3`@=!q*I2hVEjt}1bg2Dz z?>m9>uTF4EBx?L0SvfG#A)`myb1V$Eye#Fc^8RS-H1WAZDM8@tZG&nVdLKIc{xI*B zYqYcse;dktp;nS`>`<%d@vx+huNl_Lddt#xqrs_vi(*5$8H8Mv+sz1{Oh63^9Z89~ zdYXwtqM6^Z$+Z>FwBp5{sx(Rt!9e_sP7DIpyWuCqls(Kt5M-;`fhl95Kf;D5n0^t@ z1Lu^bK5L1%JL^N3L(?r{X^eFYZO?kUInqo}m-7)0h<m&AC3I6}He`-afGap?3(&)y z7B<2_bee#9wfxeDVC{L@;&uX{d6#iRq9)&pN>yTil0@2fTQEy?2M*p(UihxaK`siN zW9c^1m`aPfV+EMy@vJ%MTVgIfnESJ}p!V(pR{1BGwdrax2f6U@gXs1uAk>Q2->hZT zPI*VdU>$K&9CD0J^bWY<1SSPvy&e~jNUv1J^qm(;YS(3s@^w1@YH*4^I!onM1cR7N z3$=~{+VX@v$02sr#7kx4cRf@M$<HLQV{wQi%=1ppGumI_`(SKgPR(2Sh8&@sHE1g{ zvj%z0SUc4KI9Oj-gSu49|Dj#cD+=v(1c{J*f&AMd*rZyLBw%k-Vj5?XXtmMrEUdCf zJ>cqu2b4E6h3Jm-?p0&5>SArs$}T`;P4yN<K`$lJZkF3OJ$?fhiBdWe;+-GocXb6@ zrB!DQ5x`E1d5IGv6Jk55E2k;l64z3hB9|)WQaeeM3XYfvrjOM}w}&3Zc7+b%n$PCm zzk7rt_q>)*pfS&gDEs#<g`kYFCE!tX4Dxxfx~<WP@R2V?RUhR+nWi2QgM*HdGa%pl zg^RcR+>tx??LIE$+ur7O8{~OAx@Q`AxseCN2V&XRa++%&{-*$l^DG(@ii600f{mdY z?n{OO<uV^9{?>iC?-k1}-sq<#x3TF`V2i6oAZvjXa{yKv5zGCwrq}Lza0VQf8`aop zqk@@~)iG>4$Yrpg@z#%(ZP!)0k)TA#uTrp4VRmnCbj1t@{5`%XQ+od+ZX-V}A^9PW z27|$Fidy2zc`BTK1~NO9;+dLkN}}Ig7agHkq$sEWaB!bjQav%Q47hXMbkj<YfflM& zY)+rkF$NxjjxCx9+pNp&xROw)+_u9f;XJ6c4`KYwO!&$Q{~`=Ud>@ea=*a|y1(I># z=umM;E6o)bD`pV+)TSI<Xqz(Gpy(QP+cVp2n>4}%pM}&9H=lBj(eC=-d+;J;gE`5O zAc|?pzFt}D(WyBbV0@t#wuKqEu17*FR$~^ekPycS5m5|#$Y2r<&#ZYRYoH<Hu9!z! zaNc4779tUc2A|2vwxKZ3%N^Uh3ky`c%EA3k6QB{O8vGyKJ|+9r-lJNb!48;ogG%R+ z6E#DvhcAqv=*gIj{;WTjj=L|rGd+l5QbHUN(MOUTY_?1%iegs*-VtBGpbT^87R$Lz znIh!410RN{`Yr;Xn%E9k{{zzuL*fnve87M}@f%Lw0}ojmaX-9{HG5Y53u6{q$`K%x zokw0xub~35h`}LCalvS^yZu<cq5T+2+cMorh}U>+1kk}T2WkfZrT}$+xZ^E3Yar7M z`3_$M+^_xs-)m6^&0^n7z}Y<xE)+wMARI4*hYV&lPbpc<I?i3AKq6gw4Ztu|OH-yg zuz@Z1KB{e8v<kEn5okSSC)pqk;pks852J&xlnBcc1V)G8tJ=I*%ek^WEHNH4GA(+B z<V$`}HPRXw;kjNUV(a~<E#npUk(pzF866q;w?6G((@0;%8?JWASS~TW0i6@2_L85K zV>`{oVL)V=L@SMEv~nA2-0KG3dTL3xF(i+~A^z^VhOzpMW<9(K1UG}FCEFXceqx4X zvjW6uz)(&Yfb6U1o?B!>0+JzF@*Ld)DUsedNU}k3;YOW!Xg2u(j;aj@Mj50M!Z|sM z8j-iPQ!Vuz*xv_50{yC|T`6kqYH|zAZI4tE?#fm=IIAi~65h1XQlju=Vg*6L!vL6- z7$#-1{EE~^p}Q%-3fqm`|4+?+gC<*ew@teEQ7#4lUoz2v82J-0G>L^S4c>$#9m6nr z)mw~b%2y&?|Dy%L-OW5H{7|nT(yU^Y-z5*p!)$IBmTc)YHaU`~fyFcy&S8;@QLYR< z@8iho={=8EV^;sPoHV9p^9wyDLE%B-OmXy;-URHYBA~*hR;(B$7u2;~6$uCGQw8D( z+5^80P#8}Rp<DhA;PZk=j6!M5@F`NSX58i(#t9@gX~!TSt9IC?fucfkx)#kcc*WwC zH?z`R27~n26x^6+v9up=@YzZ0Z*J7tu|(kWUDpH1!)1I30(MhR`1JZj`G6qQYwh)p z`U59Lq6o6DgV%@Z#`D0QA&l8>=JTv9U9!DFZw{Qe2Q7uPxpot_A{YNDY-*{fOafYy z!X3V&;yzvJ2ZoH#P;^nNmp&^XPjFNMkG;30B3kJZ&kR|84Ee%xlLMZ#iaRd*Dq?4p z$@>oZsR&dT>0OKQ_<><^`@)!n`or4swS>(x2r{J;r1km%@Gd1V<FV1dtCj~`0b=Vf zS^(!c_X<=OKvGj#PzhCm6sGaSR_%`R09k7@D`vPxD;d}1pw{)7rTsaKW0So4n^jh# z&LdQYcSDr%B~S8q3d0U45FZUQ>hyK~T7(f{$LkU|_%-RQaZAN8%Qq>(%`{XikLmbA zlC<@P&UqP~RR~XOh!WN%NE2P5=z!wLJk;~UXv#>cbdq-kJPZ!tMV7fIFN)CPsio|; z#-{u3Ahs6vS0bZ^g>pF!6?)RUsYfv}jCk)AhviA$Qy)zEmM3Y(8hf{M^}mu`Of`)% zYG`}~y$__*C^Ho-$vSqv)v6{Ye6Gb|coAN2*g5F#7ghSj@Y@5?H-Lcv*8IXLe=K(J z9{2IFH1~h(ezyZXW8q@RLy|LptQ+p{DSpG`{9(QSM3}Dvdy=k<z0*Qj3?{<&ByRb} zZMn=0U$^V=c{u$FoTieZ(jwpTSQWL^BQ$-^7ka{>49Bs7Z2QYG`-{8YSWlI6zilY@ z)VFb&ik>PgF~baZYWcVh?LCXdO^4pEC(W9uayfR?QbjrWUhV{pRMg_}Y;?4?eP+U; zDk5iu9GnC$n<^oNIi2n!I!~^~;__&3VM$emC*`9|<sNamW5qumt|Z!gj|5))#>qNP zdC}~rLEyN>7(gXit*rk|V_7wEZ-6W@t3Rb4mvGj_hiiZpxd8*v&A;nsp-&yO+T+|B z&*<6bc8ItJc`|B25wM44I~PSKJ0d96C#xv8kt%ITzI805U)u!fF+ZK$>!KbZ*#)E3 z0nWTQa{#9M99UYgqs@n0(j<8ncMSK``T8prBT=qaaadW@IrAWDBM`CybF&0P4X89P zg*!{>3F*JUMwuU5UNBl8Q4}Jx+Mkz0O+!~V2A8=07H>S0d{9@>#|(QfETWGXLY0ZM z2(hp$ju!}k?d)5L0?&N69`pJs`e5vso5t4f@xYtgmh3;GdL?E~hv{^Y+omD*(8z*m ztvo@^s+dZYG*(XA0gr$~c8TTgzY@KU03j!?%UH*8vHthpg}@g2=h3FEWh`#EP_`6| z4+>S3>#_74tzkg9mVQ9X*MSL;UO!OcG($hgcn?*t&ICl^tz(MC01(zxLBuc=l4*J@ z!{2d~BDJPRPD2Fs3}D07ZRZL1x-`f>M9_T#iaV^TkDm+GkWnzYUXtvuGWt`ng_R6V zO3sPUQ(_aVgEsitN$1AJ*%|mCgivM+zPr%-duVM#MdumpOnbN5grP~$z|}{~#;P{j z&k~f?eM_b)YA)iLvV?gRqD^Ie1GmBbXi<Ijc{;)rl=By_MJPDILIaW<cZVK>VQ*mF z$%Nvzh#D(PH8YOsU0=9yiT4nuH+T(|Nq5ePmS7dFDazppeVD=#l)Z+#lwv8N9s_h= za#1|SPV4c@yaaJGIUxLNtaofKczNfvTO;*$B3TAN?|3q&wb!I6hRnP75H@vZpJ<&Q z5t-b-3Z~SC`)>onv2ApFtYG&i7{TcgbtfEHkX*3X4unNRfwWjK^RR18h89k>8~j%n z6W5l_0o`WZ63N*?*%V%Fi<A!K7VDqzfU<9j3!TNhC54gD99Im3HDE@q!oe}@cyFXB zeUTPJZl>#gsWp%A%`L%k_}cQXs8tp6Ht!_$R8!p%HIX42a9_)s_qE2PFH~(DIK@4F zr<njO(1Cw}wLg=UppmYIG}5ppz%Vd>%CvE$!xIfHQpPYiyo!O=5*j>2V7u6h4ooP< zSj30JhV_#~Mmauoufp>)4bFqV2qu{1Ir3!S`F7)N&TtBBjPj*EK{A)+1EwokEg9;L z@)=PPfAURZau!k&#ERSw%}@r$1RBlLeF117?K3I_0bhfttg+wVI#l*)@wUUM3)CvI zF3h;na5O2y(M4$3i>t>fN0pZqrQke^cwQvQ%AiU>-RXeZ`od^K>nSk+hpB~00!;RZ zcgGCvV4tO6V6B_h&e(Bq_;bD_ojt+UJgmGP&*WL=wFd$yLuIE=iVRy7*zgHSFuuJt zwcC~nA}c8)GFn0+5oA4oRSA}IUyLLgwk=9BeJDm>p^Sx|0fX&LN>0jXsF?b7MUkk0 z(^iOx$>Tm6I~J6mP9+rbrpgQEgUEDmtub^0!*m7i;)4YQ@z6Jod*Dr$46N$Wiiw>3 zGq7Ym5scRSv6Dm7-C!Ov0-U4H`Wte$zur5=S_J?GWZ~sfmhjXu5s=A-g^#piu;-;j zUcu7yCRS<GaA92{1^+tnvJs_+>s#AWpfgHV7__$W0O>aRH5MY=lC-ZuD2c8x&a`F) z#^>&@J<=;u#N^(gK6f?Y5N3!(1e>}Q7PQtjT9nn-=gunwiPFENWt7iLQs^jwI2MYe ztG8m6h6)Y%=zI>^9{f$hQ`$51{kE}vl;ybI-S55EEvDT0d#L+s;jI63)$MtAd*b@a z_SAcFdb83EzWZ(9h!nx?cDGkU(dvHN3I6*3c*=t#mY=t`N26EfaZ@kkX%$QEii2^S zkOTRD*t9VqNmcXhVDTSgpM*A~Ue4b75K*5i=*}9Qg6>QWY8X^;sYAFFV9m;)!ye3w zxT95a=Dafen%7JJ2`c>7X7C>EeVGfz!|}{?US;tN{*}sF@bLAMv(np)M{D79zt%X% zD~KGy@FQZ5l|1SG_saZWdw#O_sy9zI<NK<xt7YPt_X-RJ6XwHcS^Ro`VF{vcj7SwY zF1W`(_(;)P>tHZVsEiQRe5TRMtNn!f(O@kr{=H-e`%j&1Mx$$ntX@5<H~k2ws`Z)$ zafc686e*u?7xeQzJC=^=P|7DWb|bI1itX~__Nwo??{p+o&k$A5By|-D-^~ZhtSv%E zm2Qj3qz`se*c4jihKe-pZdGxQ&QgWncUmm0LYH1wiC-v`U-PVp$b^yhIM2|MONx1( zA}~y}^F2UAe&&hs`Fg-?Cnf69awgH)^v{i>Wa$mMeifH~)-cPepqk^&D&Rlm8;^5J z%p#It7IM=u<ARdVk%~f;=Hv_G26Br$FoDfHp`oQEgPo5|q5#Fq-I!>Fvwj2=Mx#p| zoK~<>&$a(p={PgbUkv_ypfm%llJ6-%FQfzNWFkvc7}w2#(M2x4T@v0wkWIU}CU+7w zuYj_x=d<F|)7+DhA50u9TVi*+Iv!ec0nZslC>g1puCpf4D!n3~6Cgc~{DF^#iNaNh z1IRxCn^?C<Fuqz+>V2YsbSMS2B@@?!^0t>Ai3q<rDdg$o-6mN0(})GUsf*YI<fpf; zN^8FS#nrNv{vzlxeb}kP<U87N9QM99#Fv=@-FGP3rET|nGvsE*mR~3K6l859!(vGS z-NPiRdk8<7HMF0l8WZ-Mw}6R>G=^^80e*QX!{%dRzyjUuOcCc{dz*9GVFS#<BE^Ro zP16vax~}Fdcn=sBCpF*I*T+^~#z#iWC`wUN28<pD=t8MHgBTMF--ZtRw8jAnBpKbH zaf3h1Ei{9uJ65I5DV+UQ2G-x*J;461_16%*B2&<mbvV~#Jq0FH#o9LDR(VyK@7kN` zEU+U9W(y@c{U8U9sr2g4*DwIZUC5`%qBD+a^hCca$Fj!zmsCcvm%Bh}b;9ek#MjzV zf(>4RIt+2w_cS>1XxTD%1Pc*q2%UYIz)WMwi#5;a50_=e_Au4gd3<GqyroS7!(%X^ zOJy=f1EPv*ywbFb+%CSAEYGPcGnl8W(JhUEK3mnri1Tl|+YbL&O<6nL9`6t9or8hD zVt&GRgWew2i3>`YjeR~f>ThC($RH?(ZkI?PfvUOUKv$gnUgTs|?gx=<(2i__gzbZ^ z-4QA=q|rm*S)38pO&Z+r>l?@jDOfL)lR8GBzz%#YG0ncGj53g4m{){D*}%DMX32lW zoi3xQ=bjr!_~L1h+Z&b(8nHQzTZe`0JqUh`q6V`9q)@kK`-0&_h0tYvQzjtOjTg-s zNL*<IK5!#3KD51nW&)X0+?Y{d83U>Ue~N=qo>6a58yhbVd$;SPSq>9FY1ws6e#*Tk z95%(Kls%D8Sx4Zx*8pk3;1&17qBR#tjB4z-Pz5%<3jvg|dp96wS8dWhEN4<+sh<KE z5qG^bD^xN@GfE9~ynFkFtuGbwAk^KP#V7`sKG|vj2pw3utG1?Cm!qlXGYzwo$F3g` zgGryVK~E)e+XYgPHWeqF4t~B2N`0~_UgKVdtZ&t3*2-L&Y&Rhx6Z@fBi+uJwSuV94 zErx^!fLj!^9COCdg-($H`6A-Ac@M%0JoY@0&jlY&$802eY)uVC{R_^*ojd~I30Tzt zBN~t`owL@5l2JbKN+IT%?$pyB99*1<LeMz|5Jm&E9*z7E?APtKx(yac>08AD+)%6> zk`&#yvI2p2LGR;0btC&AG-`)f_<Mi)ER%kQsM!*Zh5X#m^Yp+k<G1`8jZX{(fx=b7 zv<~nAtcuywOZKkCAZsCH^rBV^27svfLd24P3`kvTjps)?OUgAkLZsa7(?b9Sq@pxM zj5Vx7xKw-qb8p<~NK*Q57<I-<L*;`juvZTdGkztFP7GUi5DRfSJJoU!>406XN1E+V zot!e7?@S7ooAjE|M?;b8z}uZulM!{RHT~sdfZrr#MHXXEB2{{IH0hLO6?Aoq$XSmL zG~{85kJ2qWH5*run{=v4WriCm!FtGVm~G+B)KX1&h(K)@mSvC=dTe`us9PjAlkr8A z;iJ~<4k)=2CRl4P(~ZcFCH6P2y%8~l-{flji}i}EXdmdwAMLoRplr>xRaOvIT5HW2 z4G=u3jLQ3R2~c#3y0qiZyd$fdekhA}pX}T3jJ)FusDjAiHJ$nyb?16P><?{omrV(% zby!ngYMH35U#W|9sQzytMz;1*CBs3c&4lW-1f?YR{RE@vagC|V3!y-ry!$AjN1>Gg zPhC1e52pw8{9!>YKMP6R@eq9OkIZ$=#o@k}TGX)xra{g>x)!~wNNYN%{rJ&*+_*FT zJ-^BPD|Y+hv*CSjxLa#2oSM&&(4JFuhl1Jf1UCfDN7Z;<qCasFs#PEAIvC1`wlap< zO1X4fuyy>22)&X+%8bFH$Ih#yjBp(i`D1Bw;QYXkefym%m+e?P8)O30(%tzw6OA|Z zPYvS7-B@O^X~)PgW6P1k&^#M6X|eH=<1*g06k!j=3q|lNT@7ukPK$VNeWaZpz=ftH zZ*J-fV{^YH&|I-9I9Me*pfKhi|E;&qHeYg1onV9_H)y-xb1|z4cps8mDgJZno1i~N zm09OX=A_zWQvy;YiE3B|cf(kPMd*sAP${tkl2(e1LIN;-7)CS2q<1MjOTlr^`F)@h z3bEdNN4FxgJ{xLzNK@yoAA#>w!Z6i_a6AW~@(gKvQq;GC@eCW!IJ6PAXr#ahKiPs- zW@5p37|y8xtz?mIS_4SSdmkqM^E50=8z>n~2ueF+M2ePXSyAr3Y)TZn->X#j6^A6l zUr<zZ$t4kOS4}=gQBQv3rI5#r1l>g8H}aZV<?P+m=gGcPB&&E;utO3}g;skrHUC++ ztz1B*D+I#;wS#ZGEY!_Y?LCFpp_!GZ-jP7c#l)WR^X-=LS4eK}m1|ZAcrI<7f(KDX z>MG&L-7`g{G?+gonHHDkGfnA$_n(uJRf4nUY|kaZFaGdPtHug?ECx*l#w~H`kaFo= z67fwN+FW|It8jm5avYe2xQ=NWt1(tNEWn=WoC0m9w0E3zNxLydaGwnmvu<9{tQ*~- z7g!8{>kaWNs3!s=PlIPIPTe@O78({MY>qQv9EBj}63a1ApQlDkK$Uwdt|l$9JQi1` z&T2{=G<R^!%&WNWivvc2LMp4?AkjTR`SQZmO^XMbXxYF}M_ron63omk5I3Vv*|LK( zTDzO;M}&BnmYPf9BUc%fbYGboZ3boKt4@V$5k9Mv6~Q(sS(j$+9z_;YJto@QdG$_p zmQ&XmuV#$h7R&T4$}qrzfL5)Yf9Y-jZ*u@_e6}aJwr~QU*0|sHpTI-J0x8b%*PYV) zdi4f@eRcd{ed;p*qQ9$@S+_cEA5Q_g8%u>IV=G+B(iYzg6}PgAl@!Xr%}NJ|IOXol zn%-1iN>h})p>>Gtqxw!-J=HTzgq+31CDCr}oWfV;682QjqD*uOTnuVdf<Cj7aUQhH znA};lqUFY7gu#)GQf7dn@a^#SKmf=Sj9kE0yi~j@jr;J6^pxe1;Qqr(o1)0b|0wuA zlU$p+Ls+LF{+8;44q#~G0KbzmX)5pJwX|I&`0UMp%orC$1p0=kDet&&6R><gd)aI} zvnsaRy$d}LS!;eb*?K~EBgU_>xY%sBYIrlq*gE;rcBj@oKSv6&TGJ6Sh6DBb{X_6X z;Aru`C!?>|_Nw>_&VoX%edbtX24B2#xAv0vBVfTewuUweti3Uv4M_#{9&?n;7esv= zk~J+!{fC=t22*-9vlWmAvnaX3(-++8h18_a(HzaTuL_u71`l4S5NsIM#n|!llLyA3 zwpNekwI{QWaU3lyCf9ocRa&}Wn^56;cky!tjgM^KC^xej>a1%TXtN+))0^Rnr&GRt z&fU4qSutD*nLlu&GkdqLK-dIdy6A}>Lw!?oMecn80Oo!NOQU`_KWrZRy`z3ReP8<n z!Cx7EZu>`8-+E_}eqG7lKk4yIEJY>QdRH4w7ItLVgZik!`+eHUP0gx-5CHTMR^$&) ztBhbT&Vh!2A?62*jf1eB6iw*24U(fd0EyF)`s?Ba&vFTXYIymR=q~mh`Z)^9x!D`< z$*H8Q;08Jahf}+LL2|1GkO0imVb|sRai2I43CdJ?hoB<#F;RGqv0o2NaBp#MdbvEh zdt<L1>uH`}PyW(p;+riiA_qvrxV<IOJ<LxaCpoGz!`dmJvGXeS)CP0bD0}mG*%r^9 zYJjVri7`K!pO**8&#R@4nwQ^l*g>#V1m`*vQH45)zJuhW(S+YJW#*ycp(Z?E5xZNb zkpPa2J3J9~6B(W25*cz&PFn1&)(IR(42NiG6yDrCwfPmkLAO||$4B=mKDp}g{X_Kp zo=rb`BxyL2MZ7ZlA!<iYEt=c6#7Vb~D5M;rD+1nUt5AjwBX1BqWl5a6@}X*)OxF8G zWz*s)iEK`P6n9vL%6qytuMAY&1l34=wNX?|BxuqWOrW#^_)YgKE2xpo?H_Lt%J3TB zmG>kR$;^X(4gYvX8qMGAEdv&e;zNQQpr_LSmt*t=*{D3iahtJQb6veYF|8CHtVNY| z%dCWMg!+R5Rk}7}JxyR@-Y|oOZHEtq_CLT44AQ^asms4aP*KTYPH3hw+Y$*6&d`^P z!f{qs=bJ&SXD1Vlr9csMI$9GLhb*y##BD=jpS{GKgv4%Z(0D-ybn}l8rcd>jpaukx zkOCc(qfF)dF#PnbSNgFP?2^vw2eH~(z6qE&@lpSV1v}%Ent(-CpSmGnk{rkKgD=gS zI~Mj{SSb<q-b_V*bu`l7UCvne>$#>xe+Ddq4)$n=Eezz*eFDe#ONsdCD6OHfv<R^! zPb=sNjICxD3-#P+^Bhe6yCQ#cfT;TOWqdy=LZG*mAL3TaRc}W(0a9DgebZ)E%M}^W z&5d9zGbyQiTX@-nlF1uHHN_Z16$|c)0HEP$g_e@HSdTjciZ>g5Qs5-zT7x?o3=;<8 zxGw(OZlHZRZgSA(SA#cX0-=%`exUe4ySuz-@0AWun>D9;jp0CtdtnK)J@CRhY?U8_ z6lB#rC}cgJN3)iQb2Eg%!5PLe5L1FrWPoXP1$hz;2>oQv8~2oh;ZKUAhfgyj3xJEF z-&TfB)}u^boNylL_>;~_mFdtay-g7H<b=g;0w?m66jtlR#=#<_H=!s5Fm#AvOx4zR z3_NZMIfsx!smLv&MUBj&lKwpp4z$iT{(5QMs=b2O9*8UoW`A^j0!y^T-4|lJ$qPt# zM^Iq)=NEzDUJ*0JR5FHnvU<+qN5vM%r>L0oh_l7)NK<Znjvl_&f#`k~qCU6rXo11T zk%1kLY;t{LzEGqBR8L;KVh51U5+T}Lm?J3PL~5q$x0%nR(b_o*D<6gh!P-{KanWS- zY}Moxf=HRRwD<>0ZZRg3@G!qR_Nst<_RWBc&JC&a6<NVUL1bVih?25EL=v1wT`ARU zBQAdyvsp=X;9}$NXf|lx)7NO`AQ4Uu=)&Ru8gg45-NqIfu;GlzQ8EruJ9dm8cE)** zIQ?t=A10+HOH_&vD}!y^#%&?f9IcvG-zq|4$<+12{MeAtQes0i2#BQu_BEK$Vk@DJ zzfRT={)Nv@>2Iy12UEX+WtGM>bF!!PE|q@;bXliRqXCxkOFq-y@zkX(O5+qUcQoVW z4B!ta*gyI(YZr}hM)@aW;t{eb5}UOtxYJSbqO|80X(Dk-tT6Y1llgX(z`MoKk2Rx0 ze1+-`ZJ=9>ikmUIiiw;FO`f-d=gB2TEOsxJWV*6tGyk|2Bt6maqnoNyVKBVS#{Lrt zz&#&}qYJCiQLN${80&QxZDBNP8?U*@Bs|n0*WrI_&}n>-OtzEoXz_yAk0+WD1;ELk z_`)~7-x5EUKGTI7GrHyr(wHz19l}w<8G+%YM1ule8xXY-@|}r?iwMxrL8*#ODcHxW zR5<;+0??jA?sY)-!hQ&vC1XVK0ewOrckJ)MRBxbO;oiR`zLff|GQcsKG@kc}s({;a zIbg76pW^OfZ<O+GV?T+Kf%1xci#Lm;6{f+AQdlgUGcS?AT@2Oidp)ih`<M<NWA3#i zP7wW2LsLK-%g-=VMvR6%xKKPR4w9#`1`{-u9_cFF|LRL4aL9ZAT@1LHlei#?vI?EZ zj8#w*f$F(~sGOSJkl%fi^n<AZFi2aTNi&4QJi3@bs~|ckJxA1uXrhxKtO@s+G?HO> z<mf(N`WzEXuk+VEVewNPVe*zF1qdCO(!bj?Rj8ZJU8F_=Xhf2*^2kwK30FGyNE?DV zW<?a6^5tJ0O|T=2i?PD$)Sd>xW{>7)8b;<FB_D9F;MWJppXE_Q+$@4>T-M|YFyBHR zC&ZE96H1#|vpTL(XjCGVqK$#)A@iy2I2lSmE>UdQ%uAYfk28pr_n?&ZIi9t^8u>B} ze?k30obtqBX}nU=%4BC=5pOZErO#N)Cb)NC)}K8_{a%jH`uQeMa-l8%;!b2Z6$y55 z#v#ZuUDlmaZ*{2Ja;0kl%i1$Zm2!QG65-ZcY0~G4Ee?}o0cuE-GoySUpdL|z%1Me| zGljsKpatXj!!^^@HDDN-YvF@ylif~7POx6@TOI57;H?okBp}kUYwX20eROr8muRvI zmb3jd-SyMLdeCk4zN=Xk;b%&Q?iV&Yqe(2v%?PAOvq<W$M;z`>gdM)1Y2ybe5<0#A z$KLr<%+OxX<|{kD*0+ep8&jbbcl640OAwH*okfLkfF}dZEDSv({NZh-+TKlB3Ctq_ zwabScX0CLX^zutojI3hxR!8W5HpaN>l(DPi-=y4Y`-jXKG_}6iFCIm9h7x>X;N9X$ zuY|vNcj!svly2efpS!pIbn}rTK=I~ux(t)iGvdzf+Ks%0d&uBwPMw<E?shbEE=J`~ zx80>$Tsyg<Dttu#Hn<Cvy&Al@v)C0zHzJfqy%C2@3DURO?kO&GBj3!DWw3N>%pK z;T<mdlcH8<!60#yRr1TfCCl#s*3<0M?5m8H&IbZKlqb<lhGpvWigpj#%oKoq5^PB! z%A0!)&G}jS*}G0NWN-G8n4WJ+<gfTY7YTj!WT^jC>~CA^{az<c)UR7zv-2%3_pVo+ zyX~dr*XZAg-yuN!uoMAJ#6zDL@VK}{ZAdeiuuDNZhEW9cJ9q~AMGASUXeiKCzPRE# zkXg{ez8MIDK-yC)H&Hr{vV^NE^ahoZa6?v54VV=ON-`X1NlTov%AB9#++_uc^+GIu zd=T7J{X@pkAv3V&=)WZ=6vs_qMeq`$96kDfqMUF8#Q{hV7cByEOPT;3*a&yVc4fX7 z4Ozp_k8WLZuX;E=-ZAevPr!4=QUc!+`A!A}Sdn$VU-pI*Q*Gf^fBx+y$o`r;<j9WZ zO{Miy_X93wNxibNu|h}w5FLGC8}cG?6)b?b8ZBKuEAu9PxbJ4*<r+ddL>iINIfdE! zWK<F`?H_28ma9dQ#Wy1IwdVBSkLOfdB>zyWC5FyQcxNEtDc92Uq4~=RFy-W~TPhsW zYVIxI;6jBDb6A~(3ez;}UnJKB?OII7vTDY6)M6ptpU9U<vFgzLtLWA6^Jx>lZ|$(_ z+;Mss2iu8)A{PD>n<pA$i?_J#pA5}yY#J8m(XQ$f8Sw$~wSL2u@U{hxjjTHri}J1e zew~cEe)8S+vU|K<?cJIE4*ys_WOE4=O2_qBq~ljDpLC)YHG3qjn3Q_@Pc%boB>kp_ z8&$&XIoqU+l!$onjEQ3CX?tgUV;aDp%~6eBQ?eko0hG3%s~H90TIrv(4aRsu)aCIr zK<?cBp6>iq76zu${TqN7)}h8FkBKi&g_s;gaVHjj%E{<N9f~3O=ZxB(Bud>?bq)Rr z(z`dRu+I1Dc6#V`yGY+k$h+o9UOkz_m7yR09!q}3->980;`2Ae6OtTv9`CALs;o%e z$s!fI5G}|$z+N6;u`7eg*8@Ukb1P_r`1hdH>)5sGxKVM^muhP~(9j^-dpAnlcI<Ht zgn1)u1Kw&rJ|q#Q#ZWZUoGY212dp!xlGE=44f7Q(GIj<kT$hn)To2CiXUS}mFV8T) z$HhDdK!jx&zOCl*o1F24WQEr#OFN2#D-b}>Ru6^JPmg>9eFMVp+;G!)7E$Gtq8&Vi z+WCtj4AT2Jq3|<CJdG8)H$r29v+W#CZ3oMhYV<ZpqV3{o5d*mR0JMS#@<+Y-E~PAG zG+%Z6l^QK=IXQEx%j3D-@I@ZQ{%e4Qr&Z<+Nl<T>tU1_n8NN*ivme5xRqiQ*?DJjh zILxq2eTXsLuj<oAFk)Ti2c!3#QV8IA$fbL;Ky|lh<@-kl|B{aH#;KfR(?^^}d#Xb^ zQ8vDL@EBp9H-antjhysaE4wKD(TPMmXmI%`)ZALELgC{QYFRju5+oV%_=HnreM2H) zE%ZQ({q_>SrX@ZqqNRE<68q|^ZNt>_)gcfUFZp<+Vkbmhim0@-iJ2WJRhM*}#OGo< zZC9NmsMku1rpvdhyejjSm_YTh)E2LwN=$25vKx~{;PvaMTF`gjtg_0Yo>31fDPpqK zCYIK>FtdH9>&Ric^8i1^G2{HwOwIa?1gi{_!M0==`Vka0zmji-|KB6%5nG=?+I9Gp zcdQhxAzme}h=O6mCkwEONjezafge4!jJQ1e`WH_ZKdCXK4eYuJcg*=$x^;=oKz<KL zo9KU19S_~2dT0OoBBwnL$W8ysJU@yL-~y2_hriCkPdchcO8vzWRh2E^Duu>B9?s-M z=N}J^$jX`JMK40TB2H09r&qX<1jkjbGL6174iKidulFle`neXxw(IO>UtaWFT!mC@ z7q~jE$0~_qTIEqE;g_aqXWD;O{UYsf(Y6rm4w;XceLaRODYcaXGwNA1Aq?j7%$2k< zkcrUvw3V={Jh>bqk<9WHkR);2GA4raK8+w+@i1^&V#6;5RCobj0_+_{Kd0mHyQmY% z@dk=sG1$)w3!w6{$uM^42u*akx%*Z8j}%!6m_TT|{L2^wzl*iRmt1U9#J8u6WFO&R z9Lyp3Gle~jQSvIlQ59l^y82r^UTNIV^i(xQZ0L#^X4$e^tIoMG4=k50I#09jLq(CO zL51d;IKX(8$49-7cQ)r~UfQKpJcMDly|O8AP~l<R_uS6KmrNU>w2F1SN#-p2JDei+ zXPV1{Ul5fj!_RcNawV=KGNipzS<-~V+5GEt$4K`RB;3M4V~(-^dIO+Ck@W|sHWAZ& zk#(;d{N4v!8ui!@s#c_gQpm~GI!9BJ)KwfCZQi}7&Lzl1SJ%LMhl@;-SdGI-FghzB zGOHWv7<*cF0wTX!jYCl?%;m&6<g`Q6Lz!=($q+mBbSp07h!AYR%6XWZg%y_vLzv4w znN(5I*%e<t2r6JwhmXJdSFm@(cH+6KQ~E&2Q=3~@qx$F^y#>g!%dpv7_QpoCo66d1 zx4{nsU-S>+lTbPPv6_XX-;kOaNLo<%_YT;lr^@O2<Z@F*yaH^Q1Y1mH7>k0Lm!Ka% z;hlp!Uf|4L;rvma5s*Bf5cLDfI$0CrSu(W;R|2R}LD5V`SpE~|Kji>wA5t&`Knk~a zI<_rk1bDbHF?lZ&mo+D+Hn78;&#>2}UnIbHJ_k2C`KIo=F;W-p4Pp?`9N>4C)pHRp zZ1K(nOjL@*Dw2}JqOLc;Nhy8RKf8)&4{Cj!$^w34DFa(d#U%w=r522@OxZb-y;m@c z1Si=!F>~FVGY0MFs8EoEWw%mN7FCR19?Rtp8ndM$YqT&wYPy+cDv_J~v7jLG-EPNK z3MAq{Px>wS?jnYo;^^HO({43PhPc!#eDJ*;;*jl17z!cO0AsJRvg0Dt>(s~gjL5c* z&{v8<aF6Vy=DBG4?DU{^oTsR#K-LJ*VMQt@(|%<H)svOQf?%XuI&A-s@GpOk{SVj( zI9f~{=_6}LiEGkvD|{jM@|uI72BPecxu3m}szxlZvA0|PX8@;Q7DOi#C|<aJ<JaO4 zsVjiTZNY!UXg!d?s2-TKNc)trEkoJ<E4E56neE&N;wqT#tO3)UJc@DAbv%u2g>C%; zH*Al0R3$0#{JG&oM?t3*_$VOgGyy03HS-HHtlgeqv_vVF>Qo$=4|a&{IjG3<rU#Ab zQhu!~Z*P?;sf3(+QwfRbB%Q+Gul|IwI0tUAYNqIHeWrNG=$KR{qe%S0kZX&S4%?Xz zAv_F#>0x>Ajo^AP?LZnExTsJik7JBC;nJ`pI57QK$ve0m82w*pcl#(3=v^;rUZf^i zX&SV|u2@q_4hZ0=t<2w!b5Vfk$k^QOt<OJ4wxDXaN43LOCFwPYcX4I=rlyIvi3+}> zUKSosT<!0d)5hQN=j1-`t-rQQzo0p;3D>(|qyDpc+&?+I+%tKro>h8&3{@a}O^B^2 z8dm@wVbx62<R+4gB^!r;06}Cy>cVaqb*_qDZRSvG=~biCev3ASOyEn(Ht1bw7R)Rc zRk}G6x|NkLe@|m||4l1{M8Ki;63i9qWZ+?hJ>}5Jp3r`*ZlN-%uoXc=iWX{baU_dk zGFBLb0$A;gWKb!5qT+n|OURKm>dm{{Q3=k|m5=V(Y4zb@l2WXp%G7=x;fBOXuDm9) z;T)m3Cyg1aN?muhH$>QOJExJe?ML$1IwX=1_RB~n7ea|ZIbmgo1unke%5KicDUC+T zCMCg>pi@aDjS8aJ=f`XGZhf~T-l8PC`$&l~Qg43K6o1W^`9NR5G40X9(Q#c=NejPt z8r6;M(A-%u<tJSnB>!4%v?kWt4y>mLj@2(KBpz`Pj^Y-MZrg$Vo&U!^^Z*cpxYJy` z^BHM{b+1i*6%5^NeqcM2t?Xl{j-@JHh~f@yN^-2jp~ULJd(Jfa!;UO315Jy=ep*He zZzJ$pf@EkuHj3q=vbC-$V~TRqw)*UmHEXX9<3rK>RA~x=0i!Tq%j}dPsX1Z079F;j zexUw)L6fzcM#Wl{{h{gdL6cUA%)*n?AnhiaVA~sA1>u32+Z8sjwS`>G?iroY*wise z9R(0m++wssXycsfj0R_=b`AQcrf_xR#lafcwqtf(_>xPlwKcx$;LfV1TqAkHXwzJ} z{KhY+rd4z3DLeyBNMmWgOeY@{6>*N{AkPDw2!VaS>bnGJ4I;m2SRN6O4c;p}58T>Z zs`{gDgmP=#S!tgPQn_jxo@m^Of&4;^4#?{IQPh{<4nHz?p`<1n`p;b(pNc*@n_#@F z(PEo*Ey(~AFH;o3Qu#5U-luYXbU(A*%$`2<SKny!C6wn;hul}k@<7wWRcTCcPzrrQ zLUlC_o<!S`vws=2|F1tKxGugfB9Jlf&uHMZC)^Ff&*(O|YwL|I(7z9#a6JdUUO8X2 zw1CualL9U%9saezR%M><x2o^R{3oI3Q3wW>t202D0e^D7W={t7%1~TsAkbaeC+PaE zM^Yc-x^8B&GmQ0%uKOdOgnR<FVdqJnt9K()<zAj;e6Jq@kitK!wBV_yXU#QxFiwB7 zOnkhL9hRqIh`}7k5)ZtzLvPv;$Jr7m5uFaXf}>QbE14$(1ez*<z@e{5oYz`auvpWR zOR1WuxV!iI%BEXDPFqQbi<&h{Z@0|xlOH8ofoRr%+Ftf`ynvbUOpr$prnGg3n=#R7 ziAY_-&iK`eo^RF_*ee(a`<1)(*7_<DoTVnJo<O<0XiZK~#;HY(etP67U{$eqIg<wm zO+*W6XY)uAeHEk)2T4$RXi9Etdq-^i(9*GIL+rs&3Nov9;^acC0wgx{uxU7l0N#CF zQa~ryyvVO-Cc&HlvqI4$(|_wlvKc%bT3K%YiH#CHxMmbJ!6UWu|NdjJnzShYS)&D6 zCWl9hU2DgPI9-UkBzUE!sYKyYF<t*u@j&K_+QJqvehcs)PJU5h1rn3Z>?iG5iF#u9 z;07jdRe_y7&ijjezbc}jBWMO8CpWn5?;X+M)_hW6R-Rxr1S%QPV_@4Ulw>J%7x`Yr zQB>?81%jN43PA{nZ?N91K1f0o)}vmdBG}M5sZylaq*#_He5*C93-fnYGcbez*0L@R zoVK(A&PD!{-}BZEREp#gmQfF{ltf=LQ=t+5Rk+$TmT9^c^rL;Jn(v@Y3M)$`Q`$Lu zrUe6IrSH8voZqwmE6qF!s)>rFSDUa@(zt#|_2iH2SS!G4N^{9#mJEKRYJ-k3P5P{{ z4HhB(lzOW6Tu>z;RKUI|){U(-t;lgs8R>b4XsnM$Tl3?6{?sL9Ve8h9ReSMHkW%jg znDvKE^SOE>2G#yc#-LQ`dK5Gu(iHb}$e&=_LZRz5tf{jWam$3i-&MwX)eK*{C5Wry z?h)R*$k>c^u34ppuZSa*mO)?Y#19CJwfE4VwE^&KmpL|MMg6(EwKUEf={4bapU!XL z?-pQKod92$#2Erx+8Ht6zEIn){l;Kfb;s;-hti{(wV<i**I-qy7k>I?@@TLl%ZSyj zdTdUE$%U}X5c=YK7uhTEi!%N=d0-%s`KCh&w4t^w+iEgk6hBSp%?0oo*)DUjqPXv% zyV3!Mwxj|CCX^fgN^@VuJDi@;?vTD`t}9zWw`0jf=pMF^%o57+XV1fdx2l5Eb`40F zN-d{eC(^_>OdhD;6PQBM=8v9D(uD$s;Qp+rGPOj=#0tt9|B5W6LIITCZtSgHYk*5= zcV*^NR=08ulxb~J^x@B91;US#`+TjZK8coLxC@1+zWf)Avg<cr2~{we1$UcY4F#Z% zLT|GoyM8Vgya>y#>9zc&%e(!%kG)38sH-|Hd9bQ#`Bm@JvehtSI7KRyWA1Kyfx*Ns zqM~MMK`_RJqZ0Ih?I1%5px26b$P!VzbXMe8r6<kE%&d905>}69gshz%xBQv5Rj?L4 z6G7*?)0k<(ak-Lo(^i@z=F#zmCEu_4W`=ri0}>?V%c61AchuQ$)wqsIVfIQPeC%zx zSA5&vk5^-6AK+r(owGYUK95i5KbNkd;J>!Lg>qn-7EH!hMw?o)ZsP8Xc{eH(VDFT@ z&6fw$R8RR9UcX1jn`n<xSG`^l0}o${*fnNS9X-A7%azocS()JORicm^h%}eFWeW?m z?}EO2y-IlJrVpVXogbEe&<M}(<-rS$!(|wIdYwwl1Q(k7kV-t$asfn(NB)48Ze4k0 zSQh)|X@CvCk%AU(kgMu&Fju5reQ1m^k%Ea}tcn;4D{S+FZyOcCAeRnb9VIC!h~xNi zFVe^|S~IXXJGsx^+UWL_K$TW!<G*f|DygOlfVCHl;DLA9Ha}6mdsjB8EihUFaIKcB z(+1WbT*@i_ZG2c&{g{97*hO2>tnReVyXKfX@a2MWO{Vo-4(YWR)N9_a-MCY;eye2t zQo*uW3DJlQ1h-?2e1KvsSug1H^hE%5frP=Bae^;#w$S_FN-xCzeASfMV9`s~k%|6+ zsTe6ZtQg;0gwy4p<srvkoU{H36Y@EqETgvx^eMExv=g+|-997L@<`$d-kxRc^2)To z<JGD3_gcH@^Rin{$&~mGf?-=4bXkSLNVVpyZIWB_sv)=%T&g1Mwks=_d<4(67PiTh zfuHXaPa#*eH@mlIrR)poUjv5`bfptEHBNWv;ZG-?<fy9pj(ne@r=KRDgf0k)O7vl^ zUhul|@W;E5eJjDF=^O~In~puuaGjYGUUc+A%_yd!hA&c)!;&e^0+KmsId6UqSi%uo z#zmlfh+J?5zt!-D&2fmae#E<85eUAh1eRL;^TCy$AGdh|0~+LOuY9jLH_ixQtz>%< z$YNTmhA%94;bD0vQ4JvW@o9UhVxC@nf;Wh(+-9HfZ21isF&p8-$yf=4eLI&6{d&6T zG?eG=E_2T*`pOP|^mn?zLMov&?pC_>X+>yUD8>~;gcYQH#hig@Gi=}6>N;s2f={}X zj0t|k?6M8DX}mTD44e1DYO+hQi{n8ui3ZG=n1u@o;IAKv!uFXQ6*jb3Sd{Txk^pPD z>?#6*Tldt0`R@`89t{uSLSb7f5CSkb@EwuA%C^i-*MY<PT<Be*R|AEFo;65Ly~Gh0 zedsZC1r;!nv+m2u)ELSaJW7qfaBADqeb4QwdIP{)>?Z_^;4c1B$AN5}dz&NgW`Vfk zXew};Q2!x;d^jt#YN#%LF7N5FfRPQ!Mi*t{ygd3dcoHAZYO~Cf$t~w6e`c&HHafIi z*eQ*rv|ttt$V0!xDJpr8UF{zb0d`z<EN)(Yc$*=Zi^g2MTtw!jJ$%$Z<yo6}0Kj>( zc-A0f68be3p7G>8U8C7vmY6)8p<k0g8pJTp+4K|K*cl;+{;8)<76TZYxiXX39-+{F z!2tFUDGzSW^Wav03lnpW3zKNs-z<q}@f#|qQ?eFbhyiTPPz?v^L+QayI%Bc%&&l}i z*wc1xcTe)o_6S_sH^vU^nlln`Sm?nm3gj03u~3nL7ebadpHpg!9)O|<v32&boQjQb zkr@9FhL0m^wdHJok;NuRRRJt0`Z$xniSlzyjz)=4t~mJZ;vZqyB~5-ZF<C?Z0O<h^ zp$23S7_x1I@AW`7j6^r|hj%+|ia^p4s3=&ii04c18kPS~?C8#VqxY1y2o;Cwb}fUx z7_M;b3F$*+XAx##8?wA|3-Ac3F{N{b%!}XCw~!@MG8}5PcfUg)u;vk@2Zv@_ld<}C z#kX|4Jo{<K@bW)^(&IOp7)`xKTac9(azKWT*1MZeBXPjxJ06X}=G5=U(Ag^WJ~4S7 z)sRf;V#(xm$!F;M=ndN+2O_;Mn&0BlUaj$@=ZGw0IZe-8QGU)krkh}ry$W|2(R&Y0 z7+x6&hR{?R6n%h!jGG405tq2{6tqOQ32J6u4DpPh<!7<NrmCF6YKRG&JRi~y^t-(B zYZxkuJVazW(_>jUL>ZBq3cy#9G&cvuqoQZ&>*DsA$FR03*<T73o`J$DX>PG)gx~ke zW&MGIai|f-W-#~BRR-D|9$lI)Iew0WS1vBBpX2LRYby)kVa^j{034WwA}P59XQ552 zcBw?<JutN_wzhrC>pOF{@?~pl06x>?1xkQdPgapHgbhj{aj#9g{{v@0n7@ehloFjF zO6Sfdu0z1_bEilC!v-8ND7lv+Ni(vsS@yjoIV_U(O~UxhKIFxWS060=^(~M<FqZth z;E&UjqL(~7YHxJlo0(zO5UM_4D75_1juA$9D8{qVsK@-kKERWSz8929Is(ziVYb?A zRMCNC{&!p!qgiG1(NI$eTHJIL4&M*dPw%Ws&G}TEKu?(AyfgK61lyAN4#N+T#X@k? zkqouIl(a@9jB-vHN(ajzpwG>@T2cy_695q%m`MUuP^1FgJT8oIg?VGA*jc1^GEL9U z%(GtdeMd9AdI&5UY~lXQV}C1c5^t5wIl^o?y+PjBwnJhzD^|DuUICOPR9IQNSKd5k zz}{0Xf@GAP7%}t=G)>6Rl$Azabdp-z-#E9;XY0vkCwa7Ev$;_YxpsXc;!)i3JLEOd z8e8IfyLG9(Elsrh`>lZL;?coJ<HT$YF@u$8L-@19vIS9!O!{XTE>_+M8N<8Mo&fm@ zGb-SUW#HG|5=+d#*qt8>7XnPVo{|ff<d>maNru^Fj^s=uS}Ld?`q(JB=4=RzToC%! zg1OpmOfjNM_OT=uHNWw_S#!i&J1-r+o*1z>0!aqrQnI6nEw^ts0u2dA*!4NW{IFi_ z(bX_a(eV2gO06po38gVB-y0rp9cOML$Gn-OvQim^lygSO&;gr9?vi)rgF3ciCVt0B zjx44%vJ?WbE(?w7k2(t`Z}XFw)dACBHG^;{l53UulB;t^6z@XF!i_nTjzL<&92%5l zYzW78nv@qt$?u~uG|kwih6tdA5h}g?>IY)u<l}XF^PX6GrWfpn)#tr6XCGYp6!Npu zi5vuDKw^;OxmzgMTcxYXIbx2bT4g*~SWg|~4rfgqA65!nH`Dp6s8is*;EjQ|60J|7 z(y$O(9lt&&!1Qx4mjG!a3c(}EuLl;PiuZ>3n<_Wb&F-iyx<nv{%`&4iXjByMMeMXD zC&HgKy)05pPoE~k?3`0R0tJw-2pRl1t1z3!X$p;bPlfvsImmr+^vN)c-_It6w7u7G zUMPrwC75Gvq+7U_v+R8vN?GWDhS{|60dr3$k0kuz)`{aSe9oCkp<WviB_9DBIfVg( zrD^73F9mB2+F<@MJDX6^_4PBz#Df-|i76~I6khx{jTrj6tb$|kn?G~iwS{+V8pZVR zs4Z9w4XC6%C=9vrdzCtvQ~5c`J0gg<Rk#0fl8w=x44D{;v&l>{B!Tk|Z^iS|VkFGv zG^apb0Eq87ZA)}2FouZU1o<b<;O2!6$kP;dJ*3>k{}jnEoub;Q4n-#H7?C-(r!#6z z>_ij<4O++GhxNZkObkvV)<a+ng8NyX>D>~T$#9e!zUyupFp(FSqTamfI)ivgCaMV- zyv9z+2$H`gpuvol0a%Rh<esJ2ep#q=sg!S{7*kmHI1Z+SYLS`wCZ1LIAYR%u7>9+6 zCs4vX44gE1Om}hQKF0D4ijVHHK;8F<sn*)-n%t9VN;MI3S0M8oR?6v?aZ;VTvRw<H zGcZ7S_|do8F+eM`WRFv@;-8|W<T1TUJKwyDv=YU?7lxU@jgGaxf?r71H+t>>rGlOo z0h_KI>Ar~bEIVW5oP4(}Pcs%z>C39dHuk@E_Q*Xk*4BtaxRUwX&qM~*&*J{mQQ4-^ z6?=Ib)O@rwZlM~TI3w6enwyQx<<%5iDn;l4)7w;TixJWiI1{Y@JK{lL7}uMUIg`Fo z1;H7tc|}>7Q;btApz4}YW?V{}i76XO#}rY?q;xiDpUFN}QDY0^xRG=r{^<)x6J4!p z%gK4DlcF4$U-TMZq7{dS%gpMkcyhs!%NTDU&GYeTe$%I5%>C|ldfsj-&~c}*?~_kM z!i^)KIYO56#u3{QEPZcO(7k_kpt+UM?$D3UKaR|Svt57Imm}w!iT3}PbP_=!kLTHG zab~iK8>03^{M*cwW4522;7*7hUTtQW3^L(<3+w47H<O!mm1JM#@@nD?E|ZS)m@|W9 z%1w-rIyh{bKU~H%F;1hnL<>%*`)EO0qo?^eFHg-00hx&413-bAgzg^`=l%iL`*7L+ zP0}#T)E?6%*e}=~>65(4?VCm?5YMIJhjF5vDe8+SAx8)tQ~b^ELwf>l6qtBCz7ZIy zT5kk9c%QJt%IBfkgb7KKM9)9;#P{V-H!=I9MqU1aPde0~*RYO1i(Cx`g<W{@EE}Ix zr^&i5dpmJdI`rZ9@*z^zrROJTrJi}AW-IloDZ|Zx9LVNn5UW)BFmW|r+8^D1WYZZo z?R{{Hj=XDhMZd??u?MXPESS#dD*mY+v;MX{pj^31I$UN7-b}7>0%o6T0&uH*g5kIE z3%2!_9Q;{q@W~*Fh<bFPL+%`qtq)QZ5v!sr-D1c9tn8L59ua4d&x#C#8T)S<0qn)> z>^PfZZb0z>J4-Jx5<dq;SX5Fn8ITivIvPPXM&(Y0(pWwO@5keeT;a&_2x1;5&vx+W zVEx3_SXU+RtHK<K;Nxn>>V0;xj!LdL*20zdbaVlJ8$w2`rBKtE<my7`GjKdBO!F_a z`-u3$U^YFza$cv$7;O&jTQg9#lZjCY#DI5)T;+H`p`WwSs7nY4;K-FS%E5L5W<hL0 zMP9FFL?O!~Iu1f>>4pwXiVThDQf{JI-Cmq?WstuSoW4dErl(H|$!`{mHHhSN`7HtW z&d=!5s18~MuGN~8ciNmtDIV7nXuz_RuSK>+EjFcF4N1HjGg)i$_0%&e%k#D7pt%$b z_my1`R&=O&U(XP89Z2%dp-eeT0pZYD%6|Ry&5ONvuZ~_@tE+W*21E(;P__;|riMB9 zS9p2Q@V1*Y8nnrsa#f^z<u^%^ni>C}(-B*h&2MqDdVOq)NzIR}vwi7aQr#Vgl_Jf$ zuFNaHjh{LBUofZetQuZ2>&vqFU+&%C+WHRjzudq3;K76YrrhSe2Y2s&&HwUQ^1om@ zWq?qfq5!dF=4Rde=U(z=ocGawc`)u{I#BrkCwbW)rTJMll_z)|L!ox$l15p(KcJ;F zMZ@~>g-<MbQ6xyE1Yrk=oTZds+Z_MHyc%aEXIC9xXy5e7Y&t2*48K25r&F-+Q&MMB z5XiiT+iH-XvX5|=0BL8yH}DLDQhF$^O|yPJ$uS7w#GH+k)>-`Hfd>1dALpaI!pmVu zdOAI$drj$B&qg9b>KuF31mBxR_Cb1r%PG^ZlW_(f7l7V0K_|WBEF0u0NwD6iU|<1I zDB<>NnwfGJb`)^9EJ9TF(Nr-e7yLms%=+MuNQ8j^h>ZC-`9B-U0Kz^@A=B$DpHy}l zpXFyc<@G6{nXh5$aVTCJ8X)B#!@V3%?H&Xy@Mr!kf_saZ+LI}zzlOoZB?OabhL&ua z?6G2p5IZPgLg)}GgUH^Y2*}F`hs<yfW_?2(z9=ZzlLv{Lk{CV@2`~p;a&&}vi}$b) zC%iH|`Y@8v5+DF0Yl8|f_q+rc$N*s6N||8bXv$u5AmjJ30cL_AV#Wx&=A=1=_ySJ< zdp$1iq!R5R6E1O{j<f0<ZZh8-J-xftg@4vJA5gd9_lLdYQ0+qKa*tvcXVqyj{hpkO z_It^b^aEV9Z~mYEbB_wV&ORhRnNAy>?t8No`tOtH{U3|-6w)T=AI&g+o6IHy^y7VQ z^djI8^x<JPA%^ii795~YL1l_((<x=8r@$V=5CF9543Z|7kealtC?V8gFQN2i=9}G~ zS(PKR^-hWSf6T@i5a0SfIWkNCNio2j>*hn)uKh})ip)kBpa&yvRZJ0X-mkToC6(aH zIqrj?mW@r>z9B%(vt+tVx1W|(3E|pFHZuET3|EIh&y3_$vP_lIxDgJ--S3lfgo_?K z2N5Ueqdx=oasn&}Hs;f(PxoDQOd%ZufqUQc*bb7?Y+JLC&}Rm?!@8N(he_Y90Q&G{ zzY0Dywc?HHi-UL1cmMO<v;7};pS{CX0;FJVnBP1)JbSb`!NLULqp(MA(1NSXN4?V< zxJP6}jjGq5*>qrr#&yMX;I?u3z;4vUkJB5H0xa44`N%Zw-IM*tZ+>*2{7_bdyns|; zlJSe3{%JkJb<Jry8XlhJ!wPQyHaE5tvrjQC8Rq1M7qEoPlHA-#j&s9tpiv$b8c?9~ z*l>3+rhYUlACCGr&$gS2K2OW{SoH4Gr%-I|kL0$FlXdv!^}C-Ae*6hS7hWGFNgKcG zY<zt3aAPB0a{t8>yg9KYA3uFsEBWl@TOp}R?nP)qNhYaEK2<b_>4<Q1+{bWDj`pd| z>*IDf+>Y73MsNJYEylZBRbl?we2}!)T56DQ-D1(>kZxb}D}J*-9)KS=er<}Iaz>5g z;`ET8VL{i1r=#?w1pkGTvXlHP;KtlQiW-0`X#3{nU)b%U-V#&pmTE1P^O^u9R0F95 zxxloU#t*Jr(5x1%wLYMI<-?@SbRO-vPGK>!uW@Vn)yLCx2Ap_1IW}kRdv*psb<G5i zV5Dju{;*>i%;V>;3{BWUM^qaILmP=?n)bm$_5&<<vxuJJH3+83xW&hnVgH8ro&ab4 zkd9^<3V?}W``Jl4a@=a$5Ez;tIG6D^iu}f~2JjJ?elR<i2}m8>&PO}3z4h(4iR*(} z`5lg1O4>NlbhR_h`<0t&DgrgEuhXy~^AIBe*{h@n*d~c#hL-sQPv0L<;cb2^gWvi! z!Jr1Ij#t9%+X*%M_5Q18yL%Wc_-^l~-Pi1|fO$&Xm-?$VF0PJQ9MIx1h+q(<Yf8$X zfxkn-p%gTHv17!ppd|*Xv9EL5+0Z+`f&a2gsfw;Tfc!w2nAhIA`DJqhe(iZ{gulL> zY}R*4%bViIaFov`vU@rH=^L8Y#hZznkIdjSS>Lf|2fvHVR2!$@kvpwArk(ZW+*v^3 zTYL8C@9nWbb}nijl2J^_P8{(b&5dkdx3#sN#(@m<pXo5ze1M06VSD;8K<*wt41mFg zhXI});b8#0`jZ|8t|d)}fonqaFc5YR*Q{I1oDW{r#b|ISwX210)Hz}c;QgDDZ{{&C ze!0s4Rf?JgCjH^4IHzq@J1-19qZ<pQRB`-CnoqktI;bU5XAlH{h^@xMMI!1b-oP>a z=A=O>Zdi;=OIdA9PK~6l+Ji?ADV;oc3<=WnIYz_CnyzoTz5_R=`t#~0hLaWNuC98w zsS57#mhQ3>->}D9jmH*q7PI$Z(AHy&BKhG5#Z15x;x^T{9$^cHS11;R<Zs`0y;BFp zyfXl1frbEFEn&{hSsjeLJsCgwk?Nm2P|I5e@8*@h<YM9Jn$zA`7lT&1Ljv3x{9|It z(Y>5JHAhGaR$Jp@yVOiI&r;a?#nP)~o0f?!JfxQvdi6mHqV!eH#+arGeUpX+gCWO> z+~K@>eemMwY1?SD+0<~$8?j?g2E5GvX@s0VZQT3Vh5!70e4{Hz17E@qha<Q#B5HVL z!y58uIKj!XjQ4$@g40^5@OB!|*v{R}Ho?FgUr=CCO6DwUxiQNO2%QKNg1xP;rfEJR zwY?IsI#~W_EG)?|LVMaQN;G}GC@|W<l)Hr^c#Eszz0*%EU$_UV$NhDrOon4>d0qmY zQ8omOtM%NPsR6S8{Io#Ff%9~Xe11?65R{V#EL={CWKw7wnL)F3I?5qRZ*)>j&A6PE zWKZ<$3Lxy-UO$GWJuRkSCHmXe{Rh98HAqWoqdWiq78dwQ<&#s{?9Ttcg$0nxR(JmY zC3n02|J~#NyHEeO_UpFn)92|4V3N^BC}+nNs#OEJr$_~Hjad9(hS>=M`()4F2GLd# zOewIPpMm9FPAG|twH_<}Mg}rqs}I;fWIqr$EQZ4}t4eSx!o5H{0nKyt^X6HX|GK;J z(EYW)#ecET08j7kJ>0Top6+g_zu;H;D{-Ut68V$i4k$n%^O=k|Bo28Vu_nW;urpnS zUU>$l!I!VsvjKIO8KmQdT>!}fZVk5WF-14QFcL{(Y~+J9&Ey_UhB_M?(LoS5?2Oov zhlYks797fP3fl+0tk;Er8Dhy&q>Er2@CXFttm^kVz2tRvmLWezuF6GAxnJ?QtlVB9 zZyjdm<}2phMU{@?^ZSqn1ehJ%U;OPmH@RK=-#z^AKK}P9{r4gMcaNv)T2D1R4IJzg z3-&Oj6t~7(Mf|KRO3^wZsDbtb7WW=qyHb=A1IS^tni1w;jt0HtSy4>j^2Oexq$6E$ znw<fzRYGUU8AA@5ldsHSvSIuk@KzUZ6-<Nh<Qz<k$+~2ik$VT4e7F_3f#>Az4T_sb zyIW<r07vKHMFCR(=PWmS8m?~;xT}Nb{Schkrtac|ukIj}0dF{y8+rK*mIci24T6<} z$aUZY7zu2*1EPM7&<f2%c+GcgOBxy;Ud7JvFk)tS_{FUZ53k4KJR6t!2?TGKr)G+2 zHy;&mF~<=CT4`H7zP1-4kDo^0PU-E#jqPMP+r?MY#brzvGKXIc7+(z-Ukw=7W5B@p zpA+z&2I(&l*C;PF5<@Wv5T+n*P_d35+!gG@4bx^4N&}t>c!K_ojrSRR7yE2$-e-7; zO&<oI-JScH`!4wGp8M=y9MKvf+-fNf&~OC=?znPcv*Qs7?mMr~V8j&HgX)$uB#|tY zwDqUVQpQH6`aS_)cTNg8G?Gs#dHx*R#?$QH_sOmGb$dj^m_MYuo&T{1Wygqya-?>) z6TCUvNgiw~GIy_s%+~dg+4RW>9VFvR`Fi+%VU((-W$+un$09xPO-1g6f|d@9Co^o| z{4@h;A7l+t#Ei5;EW@a6#Fogr%WBsWWx+T))`~WwFtf=tTel94=w;=rl|7cyA$Ax@ z&~cFy_L~xZA6CUJ#yVEiSyBgF(&LNoft0-2iCd<4QhvE@I2S0W3@2o}3+gblU-BMI z&r`-XWla^1I@B&5J4H$#Ol_dnN{1LdLWU%jhCNE|vED5ZAL!J=;XCX{2sF^YB^TdA z(pgUcQP^+`Ghz4EJ$0B3bOE9;$Dpq%9jC37Ssslp`Xo{NMAFCiX&}kN7t{Wvn%ebz zo4%rQ!ft#@rXQ(U%iqh=#_p1MyYJW!vS*J65j@5X@b9_7f~00hz;4?q?0>V1sZ|{W zE;Z*)@<0D$2K*7q^_`$z&5f>1W2=cq{5!{ydE~VOGA^+HRuL9sNj@Hf-bx>OY#EFU z)PNKly}J=q=w1HHCr{)PXygBRy2K|>y;}ayGPOLtr)zmQw-&oV5>?B?uogUhHS>nD zJd7ZK;hY(n>y}kAHa_lc#b%D!v-df+I9669GqVUk6*J!d2nLDFS!M`*2J3YUIk1me zZd?FHdga(L!(^f}A+W4%QXUX9E907oRW!4RL#`#tD(cTz%E3Xkd}JvG?5TyfEray6 z!=?!oh;PN(q>apgKC2tZ!<b9p!$#xG!{3TS;KR@256JeHz(SLKG;8EB$xp8#4t>F* zVJVyIx?TVN(N0i*M7NEL%4V57k(5%WnUTq5>zTEL@fqNli~6HglD>(qy|7KUH#<!& z@x9T!#+XNB*#&M_!qpre4o*Jz45N5~*@JKHxFaTPh;0Qj(EH!RtlZWXCsbE|04bSt zQZl7?tw2O9C{zrtfy&)^RD8jIsdAf3mfNV86Q@(7Z-o~*;duT+uo+9a2^ezi$ilcj zmw_+g7W)}}U6&Zfe|ryD`t~|}Ut22=Ct(}l_|fRl!p%ouT-pY1J{t`{GlE;zd^}Sf z`mOueUU7$h^}PLZp0^x^@$f297+>N-Y;g?6@8m)(7M#(@l#)+jZeRMK`3&}Ul-X9c zx%ZMIXbXf4!}r{n(M2+XY3IR58%de8A0@9w>DWj(-*xCxnxQW+jTtb;Ql!A&l@))d zA<W|wn)0Pg;}m0l(90V8mk!+cYU2NlCVnE5{F|Hj7uqO-NR^dr6kjGz<>3{>RKD6M z{{3te%UU76+8F{ZMtSL6m#rZdoQdlLIpJ!;URUy=;hAM=fUlGlen1csRj;G&?0QoC zt6^d_!vtyzf%1)xN9cRo6o^}2HZh*DMC*RbN+?}A5f>xK3t)NPO`V3yAoHe~D0GxY z?2{7R_Xy!KJDZrPpXP8=+%=s$Lm2ldr$qIgYX#AfsUrbI6LOBO;-zgptwu#L`5tlQ z<T|E0oA{?!eVxiZT)}aKA*(XVlTT%vH;DhV6EeSF<=_q407-=HtRKjjK{ihrGjh$f z<7$-08(IdtK@R4y|0umPfcuQ61$rRB5HP67wFy;!`1<pu@!u}`qr5*DrdNi4TY&$z zxpDWq2Y~;!`Q6=(tp^V_0srmp-TPnh-#!oi+pXk~T=ZQ&Wy(S@P4V;v4uNYSdGd6Z zGJIhW&nV5&SD%Aj5_W_^7n*dG|2GKqlDnl8KO{+7noZNHn8Lj{kl01iHa|Q8$EE0H zL~(v&%G*bAETw#w?2a!u<rq2$o$^;_01T(I++n(MfT^2gebcsWQ@kiSTNyeNA)DuB zi33qSTnF!`bv&F^PcSxV{SnhT1R6)Sg>4LiPzjhVO)~&AjL=m$mPRQ#W8nujiU(pY z&I+T2-QD``!FMv;?ac@4$9a`#MX7^62u8n~jRqJUiJnu~baGTOXI+(_!PuJ#I>%z- zA}`HS2**H+vPxJVt^8~@a*5f^cLitLO-Ya?WI6o4&nL)#q#siD3j3H%Z<dr3u}r2j zb1Xs6VUF%@J&=y!c|N)z2MG)4WPW}iE;Pu7B?3FuUpWS4-gDTk0Examc=6=r+rza# zPNwO}St{sVZ2)(}P^j;ddz%{@Nhd^%LipBk@iWQ`yQ8Y@;nKd|-+TGvi-Z5S{~8eW z9MbRJU-zCJ?7f5jL4$&fKP|#I#nj~(oB*+P2nl_LC+~Si-XfChduWth@J=zpuubm> zsCSs<dsLwh9=n%7-YP<ohM)!tUVud;d9BPkH{;80d`RFt<M`B5gb~ap;sA4;B}U6G z!C3_|+mJNhYMXun?zfpNz~feJ2bscV{??_q`Cir@vEir$K=?`a5ksJ0Z$V86PpoO# z7Op?S)JO7TiNARH?&pKu$ItfP?LIqtxBs7e`>&1;UcQ(^$83l)J;{U)%-8y(L00ys zIhL67DdhhFZREx5On+)09%s`zUlXIU9Vi6=894CMSc2LvbFd0gvSI20pb()R(Vkt- z`u&XJrIJ}`{WxJ2wrw&ki3aF{J_mnHvl9f<Oed3R@iBL(j3V1QobhDu>9bBRkyMzF z7+bZ01F<)Iy)g>T)8d?1=~yi+OrVH(d!7%}?yCb2^LUMS`!JO*w=s6^R?@FRMD3<c z7$g#G*qZ{n@8{ryyo=lVId9z9GsX8Kulo#UkNHw}F#96rkIc)?w%o-Wnxik{?CHE= z?JjPy*JTM1-5c92`DS-?4p^RaFN{o{*3*W3fN4IG_VzZTT$^uR<$^^B=One8KZ5|# z3(k{^$)HofOe9;8*Tt5sbAI@@63rt({z#q6a9ns5z#+mZCMl2))-}TY+iEZ&jIIm4 z3T;-HG6|{<k6K(BxCCIniSg>9oE8SM4#EQbGyMVo1;$qXfK^dlEyB1*=y{PE?%<h4 zJkej&$W70|CmN1ZNaafuz=1UFS6$NQZ5-J+dGWK+WLviSR>)Whkn)>aqBCh-OP@&4 zW9}>^x4}GTEleaz8A5F;QGU;POE&N?ESzIja!LT2Ga2zDu(@zx)%BszG^Ky`Cyu5j z#R6tgz}#)xxod2TO%UdPt?PsYEd;9|4jW1Uq{VfN_`1kj9Mh!4SQ&|swylu%CdVAl zyV#V?jx66jwCJWM5Tg$169`W9EdAKDEvVa%WL26kpx<EC0;3i`Oh1~3b{srhceAO- zk|qfn@D{jwUb<Z6c9^-s7M8c$zzu_`;%|LO5u+MH+me<xe)dD+EpSsG<>Ms}4v-1K zZ#6Q=SRO-)5px1YY5(O>*9o<w{5=Jp;X3b+Aj+~QUu6YM=%bwtz=_9=B+wjVAVab^ zy47QdZvpmn`4$I2D9Ki_YmF#dCSf;+V-!?^FB@ZP++XFgbLQ`^rS}z2>x=9>$d<gG zK%_Qj<W{q5cq^}nrM4tehaq%4FuEs$ar&3kRU4zFt9<I|U}oBy*@D>&VSY;Z9(D;= zKdd!wHEyBlc#Pvk0rCkL`I6(}?AW#|oZdvwZ&Te|^#-}YvzYdT9Or|h&g!iqN;Qf( zEhp#1&osbcT~hEVPR2&Zo~|PQXw`&MmjsC$*EhwK8+KJKfaUvJ>#o<+FWc3Pf458y z*KGg8G`k3{olVQD*#N;F_Mp-J_ua<b2lv4KcYkAZ>;A@Fu>alP+WhXT{qM8b|BT%F zcYyTZ+@_e{fMgPvXxSMC^YI5GW}!7JRa=vCYR&RdWi?U$-WmJQ+94n!xW>SuG@`6f zhZ#Skb(eiG>;=+u!N<K*l*j`7aYz9bGYg?L2ov~L<cfpPT#%L#B@X$(br52`s@ZVJ zfC@Q4p<^C^Y%(e?(9w&LB!Fzr&Sa<qOd-iZ0TGdS6_k(P>wwI%=)cb@^Z0n00vb;* z`H4b_MA0Ztrs>%kV8uXKB2X`eLx1SeIs`yscyTp5JG<b<65dXV8OKVCwo(Ev56X6D zSvnTDpB!nA3)f+gbjRS#Hp){BIvqz^JcT9`o(tQia`G)<dy<>!btH@(u=XTtVq`d& z0b4C7rvqDpu@`8|>Q7UcqAoTb$sb@u=UHZxqLt=whD>ZmdBs~m^u|L=Gtq(dH;^XT zQOEfJCD_e2o4aX<fI0!c^~sk4r`Z<XUhlx)0_$hZP6+Jx<Nj-X^vOAd@80eI3>U7? z4i1m@Uzl>VI-daDXS}c>F&~-+MNeSxzZ-kWbT$UtEg;3o<PI8p(xXT;UQjg5IG*2p zb3+R=lu8^h0Kp2^kP#YKetDX{*I5i>9Wt#L9T$*$RVQKt>;3e#QJlT}PjkNSYHYh( z3GRq=`qcFIMS7M6Z$Tr6$FWL{bhmt+V7xZ6Vo2v>UVV|aAI^@s-sPL`+Z`i4aYV0; zDzx<pm$=@>UO!b<Z1DbJX{ymYn^m0hPx)YwjhX&6l7Ds-WKUZ-4*8Ol(I&Y(Y0pH8 zno(_#NppJ6bg!B0v$R}#O9upwGjn)8mg|a@26JSDhEZ+d53WG0mY^OD_hmVph4qYz zK1w&MO+P@S(QlKYtc@g!Xh3vd?3XJpR(q+EWU*0xos}2k{w3$h4D6M@m%H9qVzgax z5z35^8&klsttGg&|BcXQq^3)@nV>nat(W?q*$*WeUX}CcoTMS!xeDKDraPt-->vIx zE85GidjK%;SoZ0tnv>!RbjNsA9B1>KMA_e(W|d};-}EY-8E5A}BKE2n4d7K!Z8{iW zme;FPI&G*ClQY-$e}xC|<6;I`;EcF`g_#SFCLCAvee|>b`mc-00p~;24TA)DPqI<# zl6#!andQHw%*wdbP`7hVIAGw<&RG{nwK@^KnzSZH^f6pzob@T47-{nt)Ze$o^nEEV z!U>w|odWV9Pr>5`)kaduuR|T0_hF0r43{1BoAU+O+kN)z<z9QUo0O*G#jrhxOs7Lm z-mSJ!@iH=d3KJTb(R;%VDrlIdi|8rA?O1=L7ynKoe{H)0{-)eX+}~cIKy-m}`cYWc z9iUv29;jmaz=E(3`pYX&muPpA`qTO+!Y*xT%2^*46DiyltC91V?@r?Wjus+bs*9N? zs$?Lr?IikvUrrC7{nIPrluIZ<e}x5<{=$XiNmx>JGA;&xhDDs_#)bHSF6Zk^JBfY} zlv6eGUqJz-DN>nweab2Th3ucIh!$RV68TFN5XELEd3NMIR?qbdtFG)M<ey>RXqjRs z;lI@TsMNcY#2$NJf!4u9on})jA$o}vg1=Rvh)lYZ)E;^t)DJQEB7CYo@np!I#Qy2n z;`*akuU{U$+<W=#-Ou~44~_T^1-CF4IP%5hZf_Ig`ztUURYkuTB@#HirO1GRiO1y0 z{?pwz&yL=S?d#pEm#>euUB+}_&4yoIg7?2N6}3IbxdiH7{X}TB%$d-1z65Ol8;|Yl zJ{ubFkDn7>_3+M}^=tkCJ7e4xw`3T2GW}v?jxyI;EOJ9&&3fTh$r`*rG@rH)U+(>7 z{|L*6I!-mUV01Xr=J!?$9LKi#cd+^b5d>2+&s!9<*IH{~tU;>{50f8=0C^sPIe$E` zVDuD?ZT>ok$hGkryTJ(IWC!RD+SEF1kfD{VL$8fYw!sb?ci3SAk;g&)XGhhHjJ5#4 zH3if9Id~UT0ADW^!E{SyEpyJVJ3ke^!I$JKyUz~y-HkGw_#7#cfDN1C#y~K#f#%>% ziH^JAQ(6@`QBtkx3BVQaByI$0WW$HQt_AHNkI7$sr&Ji8y-`tSdNy&&%F|gjD9(*u zPeZuzabvTC8{Kdll=z0TDaviKj>g6LnpC#;?B(G;kt71<QyOllOszB5pwMKz=A8~p ziLB%hdk3OZ$DGX9x>(Z<3VEAUkm)<GNd6?RgH&Wy_y|BNiBf8%QgmQ7Gr*k!?+3^j zIX%Q~Y?Ck-tC*94rz3ZV(;rc;@FBpTfUh34fjlaO0(s_IWJ{=v1999Jy4B=iE29X_ z+<o%o^-+r|+m5^;qTKYyHo-t&oM&-;if3y+Ci<|&Tl^3+#PIira2Jo)Mhe)I@8$Zj z`LG@zMmz@sZ_S}soR^q&IEOuI@7d5HXa>QlAcDWE{EqHEGfM&I!_0({kEicOAOs@K zmvnJ-YV=A-MvP3af^vma%lydv{WFBRX*Rz8NJkww{}bHMjw?yK83+P8Kv#lRt~VuM zmGo#2`*%L#Q_ig8?aS9sTCMY+CARvXvrLe&TW=3{pX?s(n%8CeB&|~Nwt?1z>4Ntc zd(~35Zt(v#U!k@+n~2}y+l-vBq=md6r60`y%L`NS8KHN=>nG2ip_f*X4$zxhNMUqA ziO$<FzJ>}ANH&ceVE#PLDp=#hrU_ttoMk#N6zNn&K`Eh8iWyj6xt{Z`tc{5|N}uok zWgkYYoorekJQxe}%5}S))IRMd-|`qH9dU3=+He5C(Y=v$63>V8$U6;CzlB2wV;{iV zZI}ZeF>irk%SSxvFmBpOlaG9RD4;u(O`yd`5~<v3-_x9Q#jjVrk#q#&?vH#8uK7kp z%P}z7g{8P;qe#FMNqeWHFg-bIG=l@#5r1j#K7DuaV*jX{03%_C8GE3jqoDc>w#~td zpLd@fJb6c)GdLxarc?5e;}%@YpuK+6dSyO-$D*WBA1cGR+HF7ZzoVtE&bI&QFg?ph z7w|22DtHgvq*vlUOn;QL4_*NGe7F1JuU3Y5E2{x>Z=nyvF{}x>08hbP*$}ydLk{5o z$$=yk!@Fq~43hjTJwYVrQwi9aWW{8}m)tzT6fjCY+s>N;7$pQ~z-|LUrJvC}CePCg zu*96AgC^d#!yP}|{A0Kc-HlJPe*lB#Yi?|O%6Ib=l!Fb(jFvqm35c4=t#cRV*#)^L zV=gm{6++08>1>Qs$k`<z<l|%tDo9U@Q&6q9db)`{_T|*t>wHTktUZSQ>~xZt5Z1W7 z-m)L{F|<O<y?S$?d|>9yoOa;<XZFe%rnh{LMUM7fK~5`TlsqUhFM2<*qbkw4qgOF> zno0)U-VA#K8v>>bWz;UM1PF<7{BeQM`2teop`@IEkG^xa^aLMXu-;Bnrz$W38gvpW za6egvQ}_g*>We3mh!|$9>#&>Zr}P7iA5nuNLp8K3eJQJAq6Qn|15m;Q(N&9?(i@R# zTS5Dbc)Nw&i3qTMS;y%7p0Bq4o^Z(6i}XZtXc6qMStAf&gV<4sk_Qo4w0or!B&@Uu z@u{UG8oxonp`S6=?ZRqB2a{*Je>Jl~>Kb`UcD^Noc1O{loen8vY^Quni=UI&oD{`C zc8pp-R>F0BNhTTh4^jes0X&}AUCB2R@OeaDKro%>9H^Fzfs3+0$xabSE-&qoY~zzy z7A_}K!@GuN0$E_~CO61T@uvaiwQRC#K-WdjZPkX=5^Edk9V5}2Wh*t{sKx5#CMSQt z@u$+OJ8<w=e}n*FS8M@aDLYesD=O3a(R7U(qv+napUkmkrWADKkHjHS<e-d|34oIf zCG3o*-qSbH;rA@BF5w6Ri0r7Civ1xR6jbu{fFOoD4Tc*Dr*C3|R=X47h|6b1->7pg zB^%&GxPS`}*|I8>+C*Q74P?4!&K}Vmcg?_AgBynfQ<ky}<W)L-oP=kF8$W|nANNE7 zxd)6628lljJDj%)@{@kX6r2dY#^;sv!bZGM>QOwmc^eH1zQ4c*Cus8gP#gYli4r84 z6krH3=E#SJV}Z{;S7}7;n|~kQ?C=P1q!cq1qlh3QM<Hrfc5QeR3L+So%prgY4@H|3 zG?@L=&xW%Recv&S>7jrItFy$&F-#fjdukSw39B6_8JP(!Sp#pEoC6PnkjViKSrbI~ zbb1tGJuIe90>}7S<%)?^P`Sw}@a!aO5>14ppOu*h$}lFZ0D+$Wo+kmLyJ#H0p`fUU zi{Ji70^e{hnI&fQtE|m|2i1+V;YIq~6H2eMewITbK-_(OtQXt{|1=<EpHV71b1EhA z^~TnJB6p*vc6qL`1{jz&uMA=;Kbr5xE)OW+^Dx&>1(JuJbwS;6w`A}wu%E73-Tibz zA6>weBy1Tn;lXdPcgmiX^~MFQeDgKVH0~CdKbJvMFAKPOTq7%)RDNVCb&|}H8LJ-? zS@ywWXdm(mKWe-03^8v2Hm7B|1#biDFysYDF^4a&>Kn8QsIv7(=>(E^wx#YH=2*F5 zt<cDsV^@#v){(_Q#+`J7)%6FF7>F5SI=M%PhoczW%|G3=XTDKtPP2~+)~3X7%!xeA zKaz8|DNfxm!{2K65vdL0+;FhgAA#K_>EFK1Z6@3pQ_fbm!v*2VZq=qG(C=883t+lh zuz$WsrM_{r{<N`sgQKk&j7fbxHD9+t@R>{CNi%`JFRXs+e&lPkSD``GcDVc=p@R+! zv%p_xXPEaErsUAb2|DysQg2W&nqT)|(6=>P!hY>&gb4Q}IwExWE)@17u1m1+4Xm(M z3^D(v<P2oVU=6+YF>xR=UY~-CgXGW1iQr~&3>xUouFKN1M#9~g?Cz4fX9S1sMOT(5 zxXYu(uu8})eF*v)rRg3J${x@`c8wd_-==D7Lw~R2aLK~K6Fg|Soi^zsS3|%TG&+BF zjNRVAk@p9VlfQv+&!QZ_<5_@vo^zI$!8OxcfPQBrV$svBxJ)86<P=e1mnSo`CdO4p zLuPn%S+U{Z!9BiY!6VlU=B%VKM&=1>F2wL8qLoDZ&@AP0OV=M6hI44fzrCnr*EFc( zIN1K#q`Kg4`yLaj0eB4>8(pgck#N~z?&&zAciu?+Zz)0*QtG+H@18VKj7Jwp3Qg94 zxtv#JZ%!M{9?csXse{crZNvIb_yQN*gW6RG1>7d8{W#T|$<29Rt<;u_N%rMiv1iod zaW?w$4S8lx&fmmvOkWig5qU6HZL$lz6m1Sg1-pbP*xhQ;vS@wrC)y5P4e-9QH9duh zrxEaKU$CMC04PsObcqB&WgjQz6rf0-iV)?Hlu==d0bxIZbkuYCN`d(k@*Lh+V~t|O zvk@<%Kp`!>{4hMMpD|feyAu-A1dNu2K0xdNM@+46WZ#m_wiLT1Dd5h){@XW#W!lfI zQG%+QLMR&C_noKHfefs7{~ydbVdBR|yR#i0)j*tFITs(-b584d$0PW{T*b@ObGXn4 zXR9Kot+lU*=kNdUd^I&kqS?QKe_{4}d58Tfva0Xq43<RPJ2FyVO>LQfI0NnLJe%h- zY%<;q(h0<(9z40!Deqi8kqolZH{<-Dv+UqWJ9ycp-E`>#2HOj#w!NEYPzmDwZCcuA z=>@p&(sfiiz35z9zffRk>=StsWEmSt1nI`C;TfO>U=z(aqn!otf24iXJbd5UiPwwb zeY|3A9$oFUMr|8g^-aidUT4zcIeUDSqaEHUAp_m>JKhb<YHh!^_Qb>u*E$cL4a|Hp zXEZpaHO+``=Ou@0ee*Mp1y#mOiGYkzAlEGD3QXm)Q}c%Brf~zfxPzuWxP+95y!$dj zVzgPhbetdj?+_y;s2;Y$tQtO)Vm>YkjDcBW7g=>366E@4{{d+e<;FwjR!SE!pDD&0 z#87n?^SAq(TjIf{+-}6_tz9<XsC2wLMrYl#9ZCLFCVbadYn+PPZrM9A>6f*c`*&5X zwabU3f2MAmw#n5h1;Ve=xz7?O|NEc+YY6NAOoPBJb(ifyVEu}V<2s-RK10u4ORuHl z*M*MondV%YdYQgQXZ?55ch%DCnD*<$nb4LOzMMQOPwM@*65K%a7U-%e3b?}lHHp+% z*~|N}DWP<24hm(kM!KO#THt^JMIW}!AKhfbjGgXlLZ$>Ph*C0^(ryArJcizs`EDrv z_pA?w!|j_b+E@#D+cZzX^#OAHPUb;%_{+`)I@%QISuUCf>LG;4`T^a%d?B*6cAYRM z&GUt7e_iFDJBOsyE-{P2H0G#RPEsR5WEFy%3ZcjpCUmc?Ugq{?9;4o{Naoe??1+~| z<GNU3VQ|paN=t*Ts=aBy4h$MOB$z4xZFB1(9uhTP59Ni&hnhFhO1|Y>#+cdaI`&HA zLE&TNe3t%Gm0xTG8irscTp#G`f<?#OB=@MW$}1xQEj`$NO-+N2L_g!I`*hGnOAm~0 zf*BSW8Lq$sL;7^%a2?P}OZQkR)4fGX1km&;dCaxKJ%!S^1QAArYQe?_O?sgEovl9_ zqaK~X0fjIs<~JG*_MrAH(w}sEE`wOL3<pwl<7{YkpsQu7wN&GkekOD*XsHe5;<wg+ zI($*gDv`@vekNZ&qi<U~NjvzsV^2c_dU<d!xt(m?5*KpY9vAlE+?Sa=IUfRs=8m|s z-cDpSx49O(s%zs1s~bFKIs2mLl%M=Lxlv7L*^T7;<i;=^l^M%kEzZez%j@sWzi-@B z@ciUKsmgc=_sUzc<s1iFty`uiw{M$~y7{M@+qGvKk!QR1nf7PY4waWC{bU~LKV2_n z`qMg7hF`d03_fgGp#GLELKzn+6@aVL4EA>Lgqr4}9w|1)V@d1?zNED5Jg!krj)xlu zDXh%4nU$xV@Nv@iGh2m;t*oZJB6J;lO1>y4IuIcaGIWnX*1JNhi%CP9R>#BRMjgqA zrcM8xLATiC(-d}c!&Zey)8+<19mrG`GYRWIGrN9pJ=ZR4c#vf-As6azWlb5rHcY>| zCTv4l#3fy8wOC=@HUU?PW`9iNR#C>pb8KgIvt^|KWtjlFq~U7sW>-`jCMaI1@GlJG zyGkGStyYr`y6P3%9Lv)6fg*nCiScKHEe>9hyj~!n@$ALF!<=3ZAY~{TlP*w~jJdWj zjBz;!B6QGP#TI={5SCy4<A0kjeh-)O@pG#H(h8#Ca$g+pR&$=etbg9;cC@Sh-Ms9a zXZBIx)Pr|jo>$K&aO%0-cq;z?)e)%K5onPK{R&5&IS_OR_cg&Je?1L;&!>T11Yddo z<#<1^EDm759NYJj;W5P0SN8suy<djCH_7{-7+gNC?L^ca*CKZZ(7Hs_L^p9>>pF^( zyw#!VRgC_h2@8MeQF1N1{3ua#I$bt!vO#ne61Lfj!a{x1AKFik_rLU*N>kK`t~egk zD~=~Oc$Lu%u4{fX$qX*Nk}tQIgJExljg7tJrmiyFVt)Rb^>c~*pLl}ek=(zI)R^}g z^M7t^Zr$C0{GXfO-QC!F@Bs3E-n)B$>udhc&yxT1)~)34ppztP$t{=v^EfSy7CEc( zQEs#mhel4I!ymvY?KrE>vkdb8q73!HaIC^;Qf8N<=;g3r=mYStEg6Lgf#ZrHeA+K& z)6#uCN&D~96G<6PP@Tu5+a(aE3Q#*Ftd|*lZd;}jM`Cgg%rAO3QJEBl)&R}tW|719 z0;6bHP2Qi4jEKf9=p}DZ2R+z(qi|440n{^tlqNa$0P|ZKaTh>Qumo$!wjQX&2%?xM zxjA7eLQ><vJ_L12jh`8Fg2F=)(lq9bQmtU>R&+P~TR#2;GMgp`hzsU@iVP7x0%4a( z?;h?Q95_PB-+cr`L_11k|6AQih}QDFta;xtH+fhUI0t<dj0lo^KS;yu9HijuP8&*m z&CL8;;Q!*%^U3-DcX#jI2mXH#pWk}`{QutO##jFT+4w)^e>SYlaG(mItJt$5NJD|j zo#4KiQ=*y{7x*V&h8rC}Es>>y-h2*N<(NGj3eXk@+ZqVAgT%RuIqdyL{^%AWFiN&> znjcD(g+;8d+ba-H+Ywhbm!GTY)2DDv-}LF487Ao4-;a%0j$EHS$V*PI#T|_F3(De` zj#1lE@ciZ2TA#S;j~_p(>aDAHnFze$AGzS`{k@kzzBqtl?t@5u>^z6(dx5qTI2XjF zj*S|T?*Iwqx%>8zAeXhv6KAp(Qr7hy0KNIN1tOd-oboFdSdD<~8eOH`anSW{0P|8- z7+}~-;~2gr=n4SgT_hSVH8K%hg3FYe_g}v@BMl2Z2M4nc>1c+%oJ}CBM4FGxC$`?* zvEQ<r)#<c2AKwhqpeNK5LgzH)$}D3{X%0~$r=to-L<A=>VpC#l+HJ*@C?Uip<y<2K zO(RPUasq(v_h(?HJ{TJzhmwRt4PfdL%A?uG+4KUJm-z<~m($9uq2p1}e_x{M%yz4! z^Z<ha3R?JiF&z-x=mk|KbC)8FvqK0kGc^KsyiwF6@JYmkD_}LyxFu+L0|$d_AORz% zB-z=f=VfJa4dHt>&Eh<pjXWAr+!sQglZpTMf+J7Py+V$Cs8s~6@3@L~F|kJ)%r9B7 z23<@J4tIZMTuiqoZpoq02VHSlG6)Ql%V0kW^S5wN_zR(hP>@u)PL^HzW-Y0WqxZXm z0&-6S<_4*c{M1Uex-Mf&C*-Efe^}V!z!g;S1ka_#*4)ZIqLJ9NbcAluz#h)v>PEai z9BXWurknEM=~<)GS(Me!mF#eZE<X_0n2sD$#Vx*(%05QHY+5SSU-prFmNB=O`4^nT zZb2vxtSB{4ScbZ={;0Z`WRyNl5{v1N{0Saon4$fY#~SmT(XZaOKBI=O*61}mlbRKT z3_=;QL-uR<bbNWiVYp@+q9)h0Mg6rcRl43__Cxs)twJpzwv!~WBYE3Zu>Y~4ARNFd znHa32Un2)E(krdIo=bX@)CRf?5wt*w$rU5eXL4|+_%r6^!ol7~xyfIdT^Q*HQx`#| zuBlNKY13O)aBTS#N>7@vkT@YFfu>@!`lK-j0p1%qe%rt)&?d;D!vEWUjr>Ai5-%@7 zvEpVH!ain~fJ4(T3(N7~#}J2q$mQ86cV@d;?`wGRFI-3zXA8@6TsT&P$%E9KuC)@{ zwMfVA6Mz2#Q4uB>5xK0)xiu94dEE)xcwnY%|7qjle|CBlqQKkN{T8C(tWwGMf+QgB z<ht!0d(nF<d2Ut*NiQGmVT$WBX#+Is7@SNJ+F{8KHVsOu#D&l*L(3`C@eKp}sx)#9 z<tWGzTrQMX%VoF3FrOlDwq+)|-F(C?cV^95gV5r+OR)Y9hGu*1y4L5b+#Dn@Vu-GO zVg$kh(#3G<w60;Sf+NmHI<8fFeay!Xidj9LL}*|uI*nN4Q>No&X&!f23WE=MNr`!b z9idos5RFjZ93W}ymFO1Yo-j_nvpvhEH;oK5E34v+Iyg1l77*?iHfE1L`X=0={(CG= z^i?zL5HN<A<GFcNW}_k3=l2KCe%v6m0^)n(tC?qY`w!Rz%oJql*_91Ii|jx5x9*Ys zXY20Wjk|Zj{&WA{SNqTBxBt+gfr=ZS5POMR2Ov43A>QgNjQsEH%~TM@7BG$Ax0Ia@ z<d*?!#%0C{o0#u76m>aIT%~wNKq<;8p`GN+0<Vz5O8P+UJiXwIh96B+P71Oq;Q=Hk zKj5lbGr^Q}-U;1#pxP@cuc<?BBy8h=5M=O?=9HAG6_Qav8WrjqHoWJLpxi)^3rxwX zq02M*=IE(W$kZT!dsWhgu26Q1(%nE{PPqa|7=7R7@F~G1B_HM-b!vLKM|lNtro@>p zM>=QlS}tjTkQn+QwL&pFIki_EU`{Z?X*y2(S=ux53b5iakf3U49PkzfQ*+^6iuuln zw-^R80$bttSVxkqC#O|4`TowG^YioGjH>Sy(~~=LHFSsDbg#G3+qly|-Pr0)2E#x8 zxVgFc-9w=9mTr#7)JQqW%-9d|(wrm$nu}7qTwG8~&6s^i^ARTe1I3m+d54tJ43|gq zt;`zk4%!rNSU5$&oBia>02GsKN=8v$=&%CBFACQL^`Cw?_YQ9Z;;y_#N%F$a!96f} z!AX?j6>ut>p0bLWUt8;eS<I`+>I`V(;<#)2s&0h@`xsltU_p}kiEOm$>StmvcV4|Y z;tYc<&Fz-`Jco<LL#!Mu5EEsBcxZbn{-uGW>9w45O`Q}RghmD$a=41M0md2$Y=>Dr z;0=hLvr@uP?TAM~Zk1gCJR2Kq8eU_SfrGM^!aLA-+p(s0R3@_qQ-@dF<_;mci;NkF zdTEVKX(>h#P=*U5uJ$YN;~Tr2b2dW~jEf*f;(#SKtu~aw`K3m5-CPPrj%Dq|*;(P= zJ9=Y<R|MIV5pgVMPCyGwFy`>WaJu4n>Mo(VO=^`LnqE(6nMs3WM1R_S&Ew|#zG6nY z47P&pE826QOpE7i{ZUS>Tz^FWLJy4$&o9lhr`p%Inzn0iypa*A@`#eEH&-PS&7=Q~ z74Q$=?CtFz9`c+s0ZbP}EkI<M`cjY^SKb)rk=n`LE?EnwdF~!_{zs9GE#mr<!@X9E zK7seqeK`bwX;z3{PFTixc}TO9^U^#fNZK>RZAAqH3A)Ak)NstP-PM4Ca(u%#5t2oo zvLsa$%PQtUCKlaQ0hEVglrLUBJ$Sb7RG9-sTRc>~y+!`#n1&l_#*Qbd3$Xv&Zs`C` zEQ0cj$QjlYXt@%{5vsf`B5sM9j~B}ztx`6_`7!lv%G=z*7O6E0j~~y5@PVBr%Y=yD z>Vx)t|2dDD-2~E=L93SW4(vvf3rVx6WY0-Xa7cjI!agdjr`}>7O<u(8Oku?YOu<Xn z9Pl|3w~6s+L}~1JZlD0KlP(QLH&MeNOKsOCxU>w0n4L#Vb}hW`DC=ji)y1+S!U*n; zX6eIJ&2-2+yX;SM@U%lQij$wstUQAp8aGXcKOIqOXM6bz>$r!4+_RJup`Ya^r<_lj zGe;Zo8zlv535vOLV<`!%fjTt(=jVsGNYM%k`EQfQY|bUWn$k<v2b9QQL%n19KOJ9~ zDsg+6y(|%0=13c5AJTDElT{QaTGO1O&b-ETRMIm}j1co&0g9a=((--19j!A0FZU;L z4_C+BS)^nX;|pFoIH&;6U+bJQqw$(jjZ20DY5R~~ng`ID1^l1bP$P2(rb6Nrrl5ZZ z=M;(xX49}O4xdFvg*fxKT)4BXEjA%!5*O-~)w>co&*FoN_NYGsWxwl}rBr#{M6SGW z^ENprQB#IU7YcS0;gn3p2yIZu@6LCr(f)%h?RpGA^X)(P?%&<m4DCPP-M{<Q{_|Pv zKj8m|_8<7|G2AkF-k#1}f(+>_9p{tT2s77=FFaWu-2x+;G?rm?+6ehCjuH~p@e0ua zVOYPMmKN>z2v0(X7Z?g6f##)k>(RDuazsqzh7k!p+if)xv5bNE!YEyV>bn^N++2+` zJK=kz(Yt-Me#giN-rzE1>cjsUk@Xh$PT><SN0KlAFWab5w$zxf(5k~Md*51`VgOq} zq`zrOqq)M74Z%GW?H{x15DlfM^fmSwb_Z$5Akda}kGTCfZ?~Z5FG>`CFO<F}y5U?B zuQQ`AtU|&U4`l5jt*1`WU8zOMEq`(dDs~QuaF<o_4NPyn?E&I@>oVPCm|2h3?AXlO zk}Z{$1VJwKhs9*+9{fmYW>%i{1V*_|$0&I#P@3N^oo?omYf|hxi@O*~cO$|QTts-; zHiqOU{LK<oyvWX>`B2j;HE?=g_)M{xXbo@R41yDG8S>VZYm}Z4+qq*k64C{=&sqt# zHTMLS=piJ{V^emMWiJd-;Fkw6d$iop+b_ta27iZ}gXbV>uz6b7S4<&MHfXA#FKLS+ zn*XgBg8|4GMS`~gL^eU^O&~l4l@gAWO8Z;t&XhWPc#htjMr9kK@ia;MaFy>-1`9P= zK(*TsN>j>%3j4qYP>Ni!{z9msW2$(M`!jV+SBM^7VCy(9rthsGS_QID2i)zBDB}## z<tyMw98+i~YjMl!DoYoAXvAH}NR=~)%S=No2WzI1n?5SOW(|wllG+m67==aiQ@B+S z?GYd<*lk@5@nqnodoLRAE*a%;B2|1hq1&Oq50j!G@nbfh<wz(cAM7>NPHNMS**Kf# z{fHf!y@?=jR;lRq@=0=u;T3lm@yoL-jW<-;xJj)ujF7M<M7ipfeeSu<__k^^U)%G( za`!x)?MP|ztnzG*&N?6epqx#>ry6_(*=F5H*R%xw*;ZpxIT313C)OYJt%|YZ9bl|_ zY`4(;lmBwy_F<Hk_~{XNX{*&x+dEQ3b^<kGyG7N!c4oWaS{UtK!y&B3anjzT3-wNO zMLFvaJ9Vu>y2S2Egj?Tc;%NFLH!oXvi%j<oH8G_7PEGG{o$43Ufrqd$GBv`HMr>$= zR>f&%1fOZv+@+~#BYst+QE;bzD$dDxh{)&mZqCLC&m~P-NsKzY*}h5zB`Fv_ZO}So zkeDu%BS+A3lJ((EpLVl?s=%!`XFjG@KMH$-&$ne#V7Ae9mD1hf@5xwqq;?N>;;Aw_ zp}^<fZBt@JT+Ej7<G}?6(NbTU;x}?VqZOanuI;mi<FOvmd}LjtU3CE7`EJC(&OI4r zRW`b4HOv(lTU!fgA6|@$@x>XgT30?!Z_27vNDoKen*|yPn0-(O=8$|RSu+CuaU`qg z5H7OKIc3-kwvjnM6rww$2ErxlLA4bM7S}p&D)}<XO{3*|QR<=@)yU(EZI8Z_6XX&` zi(>H#POOH|s;^3Tvt8?g<wW4v$nHVB$7=OOD??4Gp*r(!yTvDw?bgJ1aKO0^k%zD~ z#~Gs0(1|mMZ1rd=PtU79rh;wj=3rb6aeQ>7sx?Bc8l&^sINXQcaAU|==pLa5ygeu~ zax{X5@b#rgFP%uw%jJ5080)#T#&$c2_1kX}C<xM?R;SjSK)Z{KhI+l7c+J3&GmExG z%3fktJ_0G}qu1xfrBe4=Rw@oO!EJY^3X~pSRGC;hc9Km-J%&A;kNGazv?FxGvyypF zNmbSwYz7P<N=S+a?T7M4M|d{n8A10E@<tG9ht2`RTOr3&Fg2SYiBUtYYW*A%xr9<; zumrE-fR-7kpMXZ@B&jwCZsf!_%_buw<qo(e2_jQ5dF&BQGD;`bB7c@e^7rG~89mEF zz65rpwWf2l!CDBO6@0;-m%h(P?2Zx7!ocs$zhCqtrYK^QFbkA#+7c>!+_T>uqw}ml zPGOXr(ThaZPJ}aSHB7l8$QPkof6ISQ$9?b-I?e=iWYH?ma@)c>Kw(3poF3cQF6~aF ze0lVXPS^_TGVgC6VxyFp+s$ZRH8f6nT_oRrt9=>jjn&@wzSBdi<@thmqh@z$C{OA+ z;D<_`w=i=OWnpAuF+F*agc2d3`d4eHHWL(M(eu@gB+J^`by?P6i=ulW{^4?s+tYV8 z0qqv(C+q`TgW4zsgEFc`){i~8j*2AnRuxavbIt3?QHh*iJSBGJ$|aG3W<Vt1LXh-2 z3Otyjz+0|b9J)?^gEcSUH+oTmR!^t+j@|<tiwSK=t57ixPJ$5$MSR5GqCS;qUWBt~ zGa}H`6X2N7*Ec<b2+JoVa`}x5&)Fy0q&kH{8{2`F2Lg<$UJgxUA$$l6%i~EJvZ<3? z<h+A#F}q!k+iG^^4sZ&B^jfn(uApiEIRiEc7O0K7vrTBf@hmrU4B6MTB(+JY`B2w4 zO!XD3?O)_j9QP<T0#3=+vyQMmm@?m$r_&A=ekb|CPz(xbCZF6+e0RVOPj}0YNQQX* zGqA7*)-kh|U>``}Sknf;ge)9b7N7&&YG|JALI=DM?L&8gVk6P)p0HrQ=*W*N&eMCS zIJPv{;n==KTX-WV<8R?MU2}HYi~3`Rd{f299gO=^gdVklqi%@hM#>*vp_Hs%DQ(VQ z19onY5x!p_C{%Nbn3YY~FuavgG&)EKL=arM)IQQ5jM9W{o}#~*iQ>>%MTDCp6^awT zE9Wgq-zD^}^9gOE@wKD(vgZY|=AC=Xx_&IN!CP0{;mHznYld>&OmOmO=aSpqdH2=~ z`S12$KGjm6y;6y}1TVLzU5l^2CN+D9yeTR)Cmo>!tMZ$D^Xk?9>tt{Da9@L;!L_+5 zu92}RT#8q{(W=Pd8*5kS*;RoOpAfK@HF!Jeym2umBLR7QlsOY#+530fLu)ZNs;@ig z3Ok7xSbLQnrMJ{?gU?rAc#X0*u(v#qR`NY^I2n6siEiD7JDi%0or72nSIXe8o~2_% z7Uv9U<Q)I(NU&SRnNbSCLe)nYBe72b-gqtEmR;eK1B{q@-%AdZ=sxa}wUN4o%x26< z5stG&==Q<;;TRIM=4gS>&vNh~I7`Q4!}OBB&ie1aVJCe<mKu+o&9oSp6eS^NZwX?p zM7RR|LY@P(5;3@*C(s9u-%sDX*n9Wt=yf}yc?QqAFyNiKw4aXp<fW?ZyL8bh=vK4J z55in|*@kS5ytmfE+tx23?T7yB)U?HtUu_^8?tI*cx)H)`006LNFPrFi<tz%U0HD2t zR;F2kM%^PCz2qf%-FVpgC5ClyfHqM>y`n58hE|ocVJrB?3$7j)<8^?|F}n%1T3L!j zjZbR=2fNA|@T1v$9~vD*(QNkgqVw!Q5zYr(t4C(QUJ={zC*JI0=&k!ts=cKkUkXN5 zvrm#muCp=Iyj_q4nT29QRbG9spri6~d*#{wf0~!ONBcIKH`{LBOi6O}{RFXRY?9!y zZZb%q0R}Wgcgc~7DHfy4KIEXLA?_2BL-0(zjzFicX(poJ2ef7gABF3d3rDEyU^ct( z2w6I5v0~h8FxFrLlSfHtpusp6r_bZ4w!-j0KQ7tMgN0z*9bisWHtCV&##2Xab?IOb zn1i}BlU;4P#iM}YA72#Y5uuS`x-@2JTk62sILP3NUwU2_oTOLn+EVI-4Lp%sCe^^& zFs`GbOkF2&-<;?eDo+<<ro{jwC`nMTwa2649Np4}Zjcah(wy=w1XGxjA0mT4bdyua zZE92k0v(u*VT7}?Dh0iouiv)U88OPYs!9G61~mkKN5g9jH~Eka#PV8EnCfgYfHM=D z%g_?cXY4WzvIG&<22${kbbQoc8)>wgY<r(Zt)A+sSK69hm7&Hf5Hat{BjF5Y)&Z~b zIZiilh;Y8$uHHr8pR~GJ%DqY;%S68Y)jwFR{}7F#^#QR{A|60=8&?UMCgFr;17sgD zEW4!+E(KkO2r0OFOIDEE$|tsKj*`cD)v1A2G+H@TgvWe-4g*epRBcf5{PB;7B9|C3 zi~RT79;{U&SsD++MF-((r=U9o-Ku|;O%Xu`Zf5(Y!(-rM%n29-aj{=oO@in69D5@n zv+T_sPjH>b_{bWo@$(?OvyBz8rAeLN@3oZW9C)UXb-DzWN+Lmf3^t*2Zuo^#yL<>b z`2O7R4%G0#b|mtv<h%o7?s5z~0y{o)4O|Fu_k^N;!1i>P$N+A8!AdsO?BIP^PohP? z<i%AZ*PnNvRp<BH(MvVO>9?CM?t)(X44Y-JftHZ|ckmc;2)#U$xnAv*gc8c~HYk!a z&`ih|e~f+<EEAIn#D&1;C#USC3jQE=GXZ#XTAq>|MPITcUCzn|?-uqTIP1+7<3Uht z;t>BkPA3eDTs0<A!M;db7%CUr4OmUGo)l72Xb4(-NQoGJFbsGzI#jcMT$*tx(QxJY zfC55@;_zJx#tBULR)I6@va;@}q{IOM%!xo4>|$RljaEl_X{>tZ7%w39TG$yoc*zet zHBMeL(s;N(miz70EY@C}s_zkk6B1e9t|9A-+W|w~B4my>5?luj1nHw&8hfy|b8@Wu zmE1#M(>PaObO2UqW_Z=2`NChQxaV&r4DjyuGHve5xT;BEx(0q}-9mlnG2~1dTpOJ_ zyw8hCqCT&qmxUy<@u2kfU9&f!1eIP(OsR7lOd3$EUd2(Yf`!F3)D{m6#5xb>Z4#pz z&57C#*l=w?^P3t1g=LPo1n$Hl3okR%d}H#=_xAQ3k$9UQXCqLKWyeE&9WKyuFLswD zEN(3ple@azkE9zOwVLa=b=9sn9E+5aPC>k>lDNed2Ok{2$lchTNZA<kYvFr+g~Hhs zkfL(GgWB8R+iK>ISZgr?Oh&L1Vz!1(qhU2Xb|4@*Hi+P6zxptG!lXZ%dNk&{f=Bl9 zRTdxJGw=CM_E3N0vRb=jJaxmEM5J;a8u3Yw1w}+R=herA3S&iy-jy&BnP-mnF(45Y zKM;A6BQMa_dhnYbk54ksi64z|cof44a$W|&*BtU}P2S!>^dXFm5h&3@XZl3<iv4MB ze#2}UVrK_vEHd+gJP4Zt?!EF4Lic_4ee%cgc%0lo6tn&fFCdrc;LfJZFVhUrW+nR) zURodrL*MA~V%$f%Xt$#%X0x@ye^x+xNwHfX?JZ_o(J*_l=O~43CmGFKV1;*DddrS3 zCQ}{C%pzAKFEKwWTrrEI6q@v{GzSp^UgLW8b%x8#iw{wF<u>Rx!Zx}RH9nhWBZ_>s z^9h8_bJMD<RCAkRjCmxs2E%LTPU4j@4gC46^9>`ROWE2CH%78VMI+IVL=mznq?+cs zwc=zeCqQ7nIx`~6;>TI6-I3WhqRo+R>(~W-@HV87UFTguSD$oSPJ#@~?+CEoHYr*L z{f|<S4k38Y=3VXBl$HUCF9f2flt-HLi5n6V1|Vqx$jdPY1dq4R@G?r5U_F(Te}VMX ze2v)@YWyRF3%CZb3xD;gH;|9V{Y6prU$Ol^8UEWfp}#GW|96A)KW=T_{qDhcl>hPm zSNylnkN<Yyxl({8fYz1%C^fRZzWcL@^pvrhKtzr(VcQ6dZq;cqDA5#?1H-}ub7Rrm z5t#z+tT7qY3=~byMw<=>RRI9+lca8W!Xp3oUvZ#0S+OorB;n<N4N-75JfscFlw9ml z6x}?)HuupkbRINUv_&Mhqrl+;t4&SXi8X0q0yI^$<DjCE;v!IR9e%}uJZ^{-3axY@ z%v8VhcxnV_h{UqP{43!O{oh{^^ye!Z{_XL9v|?YK_b=xE4>s;I{^x^x-<iLF|KGiT z_rX{G|GD$OfYgWxpn2^W0KUyB)oEc!W)*u5@U4e@365qqXWjS&K>fSsQAK{Dq>{1+ zerj(_7;~rx0P2Vt4CjJJiL>9Kn#*zCK^k}uNUKa7bXds}F6Mkmr)4&E5G(CjX;e5& ztHQzK^&tq_(3r27#z*BUX2`Zy>kPeQOA6`NSJwNlX$V}BV*3pP9voUQir9DEc{g<t zqLW#9`U$8Olf^{gs0u&K&T`Njn#V=8Wbftk=PzHpJ9_z-{TH;FTuY*5fcP>a?#J+= znt2A<a?5$m@`8eHv3Y+n&HmCf`%5&?LeO4wBUhr^kFVV~5RtG~oS6-`m{NdDxS)Nn z!M3;TIF2A~pZ5f=lOt_L(!1k}RrV<R7q76&RMHC#U9;TBbfY65!<G}Q;LB8Ahf`TZ zCP2DnI!BP;aEVStH!0jHB6IW!;LCT1FW<c0+lS3g=SGZ$4Dxa^N-tg$dxpO3gVnU< z$)`aoRAA;|?vh)?Qvgb%jLtL|?TED3(g<n)bHuc5!FZFA5lvW!7iY)CXg(P}Zn{bI z7GC7(SWVCK5;A{DC6}$GWgWF5$)3AwJ_1%N%rXrr&$0o|?Gff!wT(D9I@~{c_w3;C zh|_Dv=G9?nEgI|Er=X-fgS9trQAYJWEW)ZDQmCiT2371Q^c9egT!Y>n8ve5Xg#6IR z^&{f6hd|xf4Bur>?~4|DJRikVYLou}2~VLH-2Us%BHwLO#43(NWMMKXn}S7L9LT9S zmZ4ZR4qX5GK4JujnXheGHNHoGeYH=G>#9MfLG&7nM1vOd3-kw<8Lsz3HOgX4?%28T zU(e$!J4wUaZJ$QSG<Fj8q*m6h_Z{*z2?{iDkewv@qW*En6!1gup~|(R;c7j}-NA!e z7Zz_&$qUbXLP$n-ni6lGqGh#rzUKd(d8^qgNPa1+w253+bZNJQ@Byx)=<-@?g$oQ; z*xVjEU{i0|g&EdG6R~GwyTdlMF2_`H&Kp*C2HDsUAq=Y%0GQ<@ZvzMxnKIh31G*Jw zyB>aYXJMP&5zP&^54IQg*TEkp3I?p{GlBfY<>}Z@fD+<d?Lw?brW&eFrp?}?ZCzOF zW&)MazSR-Tgif0abha;DMNR86rTu4q@j#t|()y8C*l9VY82nLtD+(6BH-Gy5ce>7w zC>HeseXl_O|Igl^F0_$k`2%Qwm7XGsayJqdV)0fDg{v{hwq`JRkX*~(<z^Bo1zDCd zHOiEMs`k9t{cs=YzQR3QY?&z`uw7l<gS*Ry%*fc|#94o*SimslJ1&=AET=haT?~Hr z3b`!xj#BcgS0sn|D8J^5c<k|x&oP&kEkzbAeV6~*Fu*&8ANGoP@S=t}$wSyNzMh1D zg{Zl}ZRfka3sb;V{iQbl>_Ht}5tFU!cqine3nvGTb4}MMW%RGKzmaQm%NQ|=X>RN2 zdEqO;LVFeT!(19S8b0RwoP-|;#pIkqpR>u8xK&6fSCmzADIwWF`aT--gm4nbo6iQ; z@Fl0Cefa(EL3{tpOo{8$BiDuxUsh%IVJ@dUpA)qkmUg~nk=$2>*(JHng?uY3h7(7{ z$|h{)XXwHchr{BB`>p4@Zw|VMm~eR5n$s?JuY>Mz4k@q@Ti1S3@O)V4OC8&Qg=dyV zg5h0=9ImPK9%i$D9$CwMnFE-vmA-4Jbq_g3XIUVZO!|>M<5CNbWy61&?K4okWr5$4 zJiy8IU_^C#_?kTvwdZ0{x9stjoIG1J!YNl9^!u>0Q_pdp(GLXwPkcYzp723QjZKoq z#SP`Wjy&%Q@ofaMCX^Sy=TOZ_DETEh2%TQ1ev=#og}?lO9$`wJki(DRmpGlG^BpXm zeM{?Ogz$s*A&ZbRG$&Q_9WVvHwqu6!#I;uD5C3dgvSuo9qQWZJ`-3DIOAbwt3(pAb zFUB;GKxxM$B;t@^{4k~TMYRI6QK@ZjTU5js@D*^dY-qrM|L_ClUgvLXvIm8O%!2nJ z;s~HG;DEo!kNV-NSe6M?hf~x?x{in(@(@juQ`k?(O$~22o20pCv$R~uGM$&y;Q8)B zrzPOen0uKJ#-<!mn-J`f3NJBZ2tjp~)ylEJrPWq7n4<yI_fVwG_J)<p9nsl?wG?&% zB0GD!@+1~L0Lv*A!Elt5s`@r2s;%6RC>NS4<=4Cx>(>rN^OhxbFJ7C`iB=q;N3u}& zv=BoKFkbeP=}@}>8qffY9MRI81o$&uk_EMAN#ZULHE+hmBYet?8)Aci^GZR8uxhTG zw_eaYm%wpx7I$f>u1}{_5lV@XF+@ZODofX8LYhr(gP`}mDR1eYQe`owz(LL!xjlz0 zIgBoSi)DyqqvdRKk_&v;C=(Avpl3nf{Wcl%r#JtWc2MCfyLtQ%91c<CI7GU^Xy!0t z4kj4M*eHmn_|25O_Zd_O129s}LGqpLv609`R*b@er;+;bv6@$a_>|C6!8v5`wj^*K z4J@I5UVeG2=n$)qoE$;;mg`6#8u%NYoFk)P_LwjK>+{jeE@dCN2dXe=<(wK^tNd9p zdO<tjhG_qkfW;xK2jvqX3D?{Gv**RT8aP3A{sTwHSWskDd?{NivlMRyw8&DRm>!D5 zk{0%cqk%Q$aqO*8lu0CBFyz_SYAfL8Qu0VOQ5Ttm9))`32x;S$uB&Q{#Ew!|I$B{> z)=XU=chDykRtC&>de`YK#w-r|44rWrhL#HV*)Mkqt(sGEk`1nwQxymJ=X{A4Rn8gK z$*#8?{Fk8q4$q^bK_{6u7<xO?jvAetqj(y+L)P2t1;%5@%#uGkb6ot3Wni7^JmIlq zuD10CkWf8z>?S8@78T&9{h96&T6WN?O1j=C|CIF@al%_283CSsnuvftBnwLjx))kL zAh-V8iwE%e9O-}|nXdA2jP7kG{b6~bA7*sGP0n^4f0^)LM<KWiD+@>*`Xf)?0J)(o z60uy!xUqzhch?YiNQ3b(d)fuMincBkP&;0iYo0ZjR7J!toh2sb+N=?~1f_8MU_^~} zfM*edKJ`~eujU0UX?#ToS|ZAI02zIT4dm87hQ0X%aCB1w2@iYkbAy!T*eeOsYX=-8 zln-<ogG^;&{Q?df!cQj&iR8{LcY#UiB937R_}Ftcr`K;fF9lG7KDCw8Safz72S^Iv z5loScQv^1RGBgQI7+@~8g@i2}6$io~S5g)J4rXN(ot<ZBr=WA;rB%eCygqsjFLgpb z9wicC9Ep&Xi*p?IFge3}0c*&nTCPzq2^;BxKcskn#SzIvluM}tMmWWgEKP*ZVn3sn zbU4U_%cABd_|*hCUN_LkVS9ypCAeri$BEC*;tr-hRdClz9=x5Mq8^py;hDnuO{Mdh ztc#v~(JW!ohuNhVif&Fdb@f!O8~FoO9|AZP#KlaS9`R$KT=`1hho}af&>@a=Bt9ZJ z2z2`}p%@lATUB$x!Xdyl%bf#G3Q=VBJS&RJQd~o3_-Yi^NDsDaX@w^JdU_K--YGCW zP7{`dsFSR9TgE-VZ1y<5fg@41a*`*_t4?ALa(F3>7HxQ>Rq~aCWQ^5a$f^vIY20@v z<rHdsuLmb)e)F+`sbNAYb>!@iLMLo!Innu#3%gdxLR{xyQ5Hn>Ih-#{N*8uz2$%sC z_JZ;~xOqkF8O-^IlsGGB^gaIOD`RigD86Liu*S?nb{>Z2F?LQZ@_QD>n#etFLZpw? z>rDkp8$7)m-F1%9VOV+qbuG|6Pm&>}(*u%*PQ6s!coLkAg0zq*=JheG=kr>c^+8~2 zsHL2^Ro_x1qHH0)AI}qOLHPFV_n9bITklnvef4v^<SMj%$DgX_ZgHLemkpJk?d(w_ zKd}O{tbN3w2VX~nemKx${-J%ifAmAA`ZdpqM)<9vy9nvjx75Rp^>tORehpViG~oD2 z%~|s>S-RB8foq6CkU9zdEQuLjef8B>1ps55hugZu6<oneJmbnvlqRqa%!_ptBOu00 z=ao1QRw{#x45hilmA~L@zw8ZHVM|V#Y_5fE;SB|Y(<J;2)H1rfV=BsJtz?^;+`neq zhnK5Qv5b{*uiM?L)A)Ui$+qM+uGx)R!0@Jl!%(pmo4^Y<*Eco)8Qndzn*4KGTWTn( zj6-#uyehmemED(*A8Klsp2xwjzasMFB;X(RBe;?G15_yYhgW5}lnPC^A3yBZ)lx%w z%adCJ4hV-%eNDsn`}793-{XhR+THmL4Tm>wXKsBrs*TR5KC1Jo-SQ6apZjX-=lJLB z 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ℜ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%0A~`&`VCgF4cAcn9LO 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 literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/C/doxyfile b/antlr-3.1.3/runtime/C/doxyfile new file mode 100644 index 0000000..16dd677 --- /dev/null +++ b/antlr-3.1.3/runtime/C/doxyfile @@ -0,0 +1,265 @@ +# Doxyfile 1.5.2 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = ANTLR3C +PROJECT_NUMBER = 3.1.2 +OUTPUT_DIRECTORY = api +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = YES +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 4 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = NO +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = YES +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = YES +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = YES +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = docwarn.txt +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = src \ + include \ + doxygen +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.d \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.py +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = NO +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = . +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 300 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = YES +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = YES +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +MSCGEN_PATH = +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = YES +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = YES +CALLER_GRAPH = YES +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +DOT_GRAPH_MAX_NODES = 50 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = YES +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/antlr-3.1.3/runtime/C/doxygen/atsections.dox b/antlr-3.1.3/runtime/C/doxygen/atsections.dox new file mode 100644 index 0000000..bd4ea12 --- /dev/null +++ b/antlr-3.1.3/runtime/C/doxygen/atsections.dox @@ -0,0 +1,143 @@ +/// \page atsections Using Sections Within Grammar Files +/// +/// \section intro Introduction +/// +/// A C targeted grammar can make use of special annotations within a grammar +/// file, which are prefixed with the <b>\@</b> character. These sections cause the +/// the placement of their contents within the generated code at defined points +/// such as within the generated C header file. +/// +/// The general form of these annotations is: +/// +/// \code +/// section +/// : '@' (( 'parser' | 'lexer' ) '::')? SECTIONNAME '{' yourcode '}' +/// ; +/// \endcode +/// +/// If the 'parser' or lexer keywords are left out of the specification, then the +/// ANTLR tool assumes a lexer target for a lexer grammar, a parser target for a parser +/// or tree parser grammar, and a parser target for a combined lexer/parser grammar. You +/// are advised as a matter of course to include the parser or lexer target keyword. +/// +/// Documentation regarding the \@sections available for a grammar targeted at C now +/// follows. +/// +/// \subsection psrinit Sections \@init and \@declarations +/// +/// Java targeted grammars allow the special section <code>\@init</code> to be placed after the declaration +/// of a rule (lexer, parser and tree parser rules). This allows you to both declare and initialize +/// variables that are local to the code generated for that rule. You can then reference them within +/// your rule action code. +/// +/// With the C target, the generated code is subject to the restrictions of C semantics and this +/// means that you must declare any local variables, then assign to them afterwards. As well as the +/// <code>\@init</code> section, which C programmers should use to initialize their local variables, the C +/// target provides the <code>\@declarations</code> section, which is also a rule based section. This section +/// is where the C programmer should declare the local variables, thus separating their declaration +/// from their initialization. Here is an example: +/// +/// \code +/// translation_unit +/// @declarations +/// { +/// pANTLR3_BOOLEAN hasUsing; +/// } +/// @init +/// { +/// +/// // Assume no Using directives +/// // +/// hasUsing = ANTLR3_FALSE; +/// +/// } +/// : rulea ruleb ... +/// +/// \endcode +/// +/// Using the <code>\@declarations</code> and <code>\@init</code> sections guarantees that your generated code will +/// compile correctly on any standard C compiler (assuming, of course, that you type in valid C code.) +/// +/// \subsection psrheader \@header section. +/// +/// The <code>\@parser::header</code> or <code>\@lexer::header</code> annotations cause the code they encapsulate +/// to be placed at the start of each generated file, regardless of whether it is a .c or .h file. This can +/// be useful for inserting copyright information and so on in all your generated files. +/// +/// \bNOTE: Be careful not to confuse this concept with placing code in the generated .h header file. The name choice is +/// unfortunate, but was already used in the Java target to allow the placement of \c imports statements +/// in generated java classes. We have therefore kept the intent of this section the same. +/// +/// Here is an example: +//// +/// \code +/// @lexer::header +/// { +/// // Copyright (c) Jim Idle 2007 - All your grammar are belong to us. +/// } +/// +/// @parser::header +/// { +/// // Copyright (c) Jim Idle 2007 - All your grammar are belong to us. +/// } +/// \endcode +/// +/// +/// \subsection hdrinclude \@includes section +/// +/// The <code>\@parser::includes</code> or <code>\@lexer::includes</code> annotations cause +/// the code they encapsulate to be placed in the generated .h file, \b after the standard +/// includes required by the ANTLR generated code. +/// +/// Here you could for instance place a <code>\#include</code> +/// statement to cause your grammar code to include some standard definitions. Because you +/// may use multiple parsers and lexers in your solution, you should probably not place +/// <code>#define</code> statements here, but in the <code>\@postinclude</code> section. Then you +/// may create different <code>\#defines</code> for different recognizers. +/// +/// Here is an example: +//// +/// \code +/// @lexer::includes +/// { +/// #include "myprojectcommondefs.h" +/// } +/// +/// @parser::includes +/// { +/// #include "myprojectcommondefs.h" +/// } +/// \endcode +/// +/// +/// \subsection hdrpreinclude \@preincludes section +/// +/// The <code>\@parser::preincludes</code> or <code>\@lexer::preincludes</code> annotations cause +/// the code they encapsulate to be placed in the generated .h file, \b before the standard +/// includes required by the ANTLR generated code. +/// +/// You should use this section when you wish to place #defines and other definitions +/// in the code before the standard ANTLR runtime includes defined them. This allows you +/// to override any predefined symbols and options that the includes otherwise take +/// defaults for. For instance, if you have built a version of the runtime with a +/// special version of malloc, you can <code>\#define</code> #ANTLR3_MALLOC to match the definition +/// you used for the ANTLR runtime library. +/// +/// \subsection hdrpostinclude \@postinclude section +/// +/// The <code>\@parser::postinclude</code> or <code>\@lexer::postinclude</code> annotations cause +/// the code they encapsulate to be placed in the generated <b>.C</b> file, after the generated include +/// file (which includes the standard ANTLR3C library includes. +/// +/// Code you place here then will be subject to any macros defined by your own includes, by the +/// generated include and by the standard ANTLR3 includes. This is a good place to <code>\#undef</code> +/// anything that you don;t like the default values of, but cannot override before the includes +/// define them. +/// +/// This is also a good place to <code>#define</code> any macros you may wish to use in the generated +/// .c file. As you can include multiple parsers in your projects, you will need to include the +/// generated .h file of each of them, possibly globally, but almost certainly in a context where you +/// are including more than one .h file simultaneously. Hence if you commonly use the same macro +/// names for accessing structures and so on, and they change from grammar to grammar, you should +/// define them here to avoid creating conflicting definitions in the header files. +/// \ No newline at end of file diff --git a/antlr-3.1.3/runtime/C/doxygen/build.dox b/antlr-3.1.3/runtime/C/doxygen/build.dox new file mode 100644 index 0000000..05c3c66 --- /dev/null +++ b/antlr-3.1.3/runtime/C/doxygen/build.dox @@ -0,0 +1,207 @@ +/// \page build Building From Source +/// +/// The C runtime is provided in source code form only as there are too many binary +/// versions to sensibly maintain binaries on www.antlr.org. +/// +/// The runtime code is provided with .sln and .vcproj files for Visual Studio 2005 and 2008, +/// and \b configure files for building and installation on UNIX or other systems that support this tool. If your +/// system is neither Windows nor \b configure compatible, then you should find it +/// reasonable to build the code manually (see section "Building Manually".) +/// +/// \section src Source Code Organization +/// +/// The source code expands from a tar/zip file to give you the following +/// directories: +/// +/// - <b>./</b> The location of the configure script and the antlr3config.h file +/// generated by the running the configure script.This directory also +/// contains the solution and project files for visual studio 2005 and +/// 2008. +/// - <b>./src</b> The location of all the C files in the project. +/// - <b>./include</b> The location of all the header files for the project +/// - <b>./doxygen</b> The location of documentation files such as the one that generates this page +/// - Other ancillary directories used by the build or documentation process. +/// +/// \section winbuild Building for Windows +/// +/// If you are building for Cygwin, or a similar UNIX on Windows System, follow the "Building With Configure" instructions below. +/// +/// Note that the runtime is no longer compatible with the VC6 Microsoft compiler. If you absolutely need to build with +/// this compiler, you can probably hack the source code to deall with the pieces that VC6 cannot handle such as the +/// ULL suffix for constants. +/// +/// If you wish to build the binaries for Windows using Visual Studio 2005, or 2008 you may build using the IDE: +/// -# Open the C.sln file +/// -# Select batch Build from the Build menu +/// -# Select all configurations and press the build button. +/// +/// If you wish or need to build the libraries from the command line, then you must +/// use a Windows command shell configured for access to VS2005/VS2008 compilers, such as the one that is +/// started from: +/// +/// <i>Start->Microsoft Visual Studio 2005->Visual Studio Tools->Visual Studio 2005 Command Prompt</i> +/// +/// There appears to be no way to build all targets at once in a batch mode from the command line, +/// so you may build one or all of the following: +/// \verbatim + C:\antlrsrc\code\antlr\main\runtime\C> DEVENV C.sln /Build ReleaseDLL + C:\antlrsrc\code\antlr\main\runtime\C> DEVENV C.sln /Build Release + C:\antlrsrc\code\antlr\main\runtime\C> DEVENV C.sln /Build DebugDLL + C:\antlrsrc\code\antlr\main\runtime\C> DEVENV C.sln /Build Debug +\endverbatim +/// +/// After the build is complete you will find the \c.\cDLL and \c.\cLIB files under the directory containing C.sln, +/// in a subdirectory named after the /Build target. In the Release and Debug targets, you will find that there is only a \c.\cLIB archive file, +/// which you can link directly into your own projects if you wish to avoid the DLL. In \c ReleaseDLL and \c DebugDLL you will find both a +/// \c .LIB file which you should link your projects with and a DLL. The library and names on Windows are as follows: +/// +/// \verbatim + - ReleaseDLL : ANTLR3C.DLL and ANTLR3C_DLL.LIB + - DebugDLL : ANTLR3CD.DLL and ANTLR3CD_DLL.LIB + - Release : ANTLR3C.LIB + - Debug : ANTLR3CD.LIB +\endverbatim +/// +/// There currently no .msi modules or other installs built for Windows, so you must place the DLLs in a directory referenced +/// by the PATH environment variable and make the include directory available to your project configurations. +/// +/// +/// \section configure Building with configure +/// +/// Before starting, make sure that you are using a source code distribution and not the source code directly from the +/// Perforce repository. If you use the source from the perforce tree directly, you will find that there is no configure +/// script as this is generated as part of the distribution build by the maintainers. If you feel the need to build from +/// the distribution tree then you must have all the autobuild packages available on your system and can generate the +/// configure script using autoreconf. If you are not familiar with these tools, then please use the tgz files in the +/// dist subdirectory (or downloaded from the ANTLR web site). +/// +/// The source code file should be expanded in a directory of your choice (probably your working directory) using the command: +/// +/// \verbatim +gzip -dc antlrtgzname.tar.gz | tar xvf - +\endverbatim +/// +/// Where: <b>antlrtgzname.tar.gz</b> is of course the name of the tar when you downloaded it. You should find a \b configure script in the sub directory thus created. +/// +/// The configure script accepts the usual options, such as --prefix= but the default is to build in the source directory and to place libraries in +/// <b>/usr/local/lib</b> and include files (for building your recognizers) in <b>/usr/local/include</b>. There are also a number of antlr specific options, which you may wish to utilize. The command: +/// \verbatim +./configure --help +\endverbatim +/// +/// Will document the latest incarnations of these options in case this documentation is ever out of date. At this time the options are: +/// +/// \verbatim + --enable-debuginfo Compiles debug info into the library (default no) + --enable-64bit Turns on flags that produce 64 bit object code if + any are required (default no) +\endverbatim +/// +/// Unless you need 64 bit builds, or a change in library types, you will generally use the configure command without options: +/// +/// Here is a sample configure output: +/// +/// \verbatim +[jimi@localhost dist]$ tar zvxf libantlr3c-3.0.0-rc8.tar.gz + +libantlr3c-3.0.0-rc8/ +libantlr3c-3.0.0-rc8/antlr3config.h +libantlr3c-3.0.0-rc8/src/ +libantlr3c-3.0.0-rc8/src/antlr3stringstream.c +... +libantlr3c-3.0.0-rc8/antlr3config.h.in +\endverbatim +/// \verbatim +[jimi@localhost dist]$ cd libantlr3c-3.0.0-rc +\endverbatim +/// \verbatim +[jimi@localhost libantlr3c-3.0.0-rc8]$ ./configure + +checking for a BSD-compatible install... /usr/bin/install -c +checking whether build environment is sane... yes +checking for a thread-safe mkdir -p... /bin/mkdir -p +checking for gawk... gawk +checking whether make sets $(MAKE)... yes +checking for xlc... no +checking for aCC... no +checking for gcc... gcc +... +checking for strdup... yes +configure: creating ./config.status +config.status: creating Makefile +config.status: creating antlr3config.h +config.status: antlr3config.h is unchanged +config.status: executing depfiles commands +\endverbatim +/// +/// Having configured the library successfully, you need only make it, and install it: +/// +/// \verbatim +[jimi@localhost libantlr3c-3.0.0-rc8]$ make +\endverbatim +/// \verbatim +make all-am +make[1]: Entering directory `/home/jimi/antlrsrc/code/antlr/main/runtime/C/dist/libantlr3c-3.0.0-rc8' +/bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -Iinclude -Iinclude -O2 -MT antlr3baserecognizer.lo -MD -MP -MF .deps/antlr3baserecognizer.Tpo -c -o antlr3baserecognizer.lo `test -f 'src/antlr3baserecognizer.c' || echo './'`src/antlr3baserecognizer.c +... +gcc -shared .libs/antlr3baserecognizer.o .libs/antlr3basetree.o .libs/antlr3basetreeadaptor.o .libs/antlr3bitset.o .libs/antlr3collections.o .libs/antlr3commontoken.o .libs/antlr3commontree.o .libs/antlr3commontreeadaptor.o .libs/antlr3commontreenodestream.o .libs/antlr3cyclicdfa.o .libs/antlr3encodings.o .libs/antlr3exception.o .libs/antlr3filestream.o .libs/antlr3inputstream.o .libs/antlr3intstream.o .libs/antlr3lexer.o .libs/antlr3parser.o .libs/antlr3string.o .libs/antlr3stringstream.o .libs/antlr3tokenstream.o .libs/antlr3treeparser.o .libs/antlr3rewritestreams.o .libs/antlr3ucs2inputstream.o -Wl,-soname -Wl,libantlr3c.so -o .libs/libantlr3c.so +ar cru .libs/libantlr3c.a antlr3baserecognizer.o antlr3basetree.o antlr3basetreeadaptor.o antlr3bitset.o antlr3collections.o antlr3commontoken.o antlr3commontree.o antlr3commontreeadaptor.o antlr3commontreenodestream.o antlr3cyclicdfa.o antlr3encodings.o antlr3exception.o antlr3filestream.o antlr3inputstream.o antlr3intstream.o antlr3lexer.o antlr3parser.o antlr3string.o antlr3stringstream.o antlr3tokenstream.o antlr3treeparser.o antlr3rewritestreams.o antlr3ucs2inputstream.o +ranlib .libs/libantlr3c.a +creating libantlr3c.la + +(cd .libs && rm -f libantlr3c.la && ln -s ../libantlr3c.la libantlr3c.la) +make[1]: Leaving directory `/home/jimi/antlrsrc/code/antlr/main/runtime/C/dist/libantlr3c-3.0.0-rc8' +\endverbatim +/// \verbatim +[jimi@localhost libantlr3c-3.0.0-rc8]$ sudo make install +\endverbatim +/// \verbatim +make[1]: Entering directory `/home/jimi/antlrsrc/code/antlr/main/runtime/C/dist/libantlr3c-3.0.0-rc8' +test -z "/usr/local/lib" || /bin/mkdir -p "/usr/local/lib" + /bin/sh ./libtool --mode=install /usr/bin/install -c 'libantlr3c.la' '/usr/local/lib/libantlr3c.la' +/usr/bin/install -c .libs/libantlr3c.so /usr/local/lib/libantlr3c.so +/usr/bin/install -c .libs/libantlr3c.lai /usr/local/lib/libantlr3c.la +/usr/bin/install -c .libs/libantlr3c.a /usr/local/lib/libantlr3c.a +... + /usr/bin/install -c -m 644 'include/antlr3stringstream.h' '/usr/local/include/antlr3stringstream.h' +... + /usr/bin/install -c -m 644 'antlr3config.h' '/usr/local/include/antlr3config.h' +make[1]: Leaving directory `/home/jimi/antlrsrc/code/antlr/main/runtime/C/dist/libantlr3c-3.0.0-rc8' + +[jimi@localhost libantlr3c-3.0.0-rc8]$ +\endverbatim +/// +/// You are now ready to generate C recognizers and compile and link them with the ANTLR 3 C Runtime. +/// +/// +/// \section buildman Building Manually +/// +/// The only step that configure performs that cannot be done +/// manually (without effort) is to produce the header file +/// \c antlr3config.h, which contains typedefs of the fundamental types +/// that your local C compiler supports. The easiest way to produce +/// this file for your system, if you cannot port \b automake and \b configure +/// to the system is: +/// +/// -# Run configure on a system that does support configure +/// -# Copy the generated \c antlr3config.h file to the target system +/// -# Edit the file locally and change any types that differ on this +/// system to the target systems. There are only a few types and you should +/// find this relatively easy. +/// +/// Having produced a compatible antlr3config.h file, then you should be able to +/// compile the source files in the \c ./src subdirectory, providing an include path +/// to the location of \c antlr3config.h and the \c ./include subdirectory. Something akin +/// to: +/// \verbatim + +~/C/src: cc -c -O -I.. -I../include *.c + +\endverbatim +/// +/// Having produced the .o (or equivalent) files for the local system you can then +/// build an archive or shared library for the C runtime. +/// +/// When you wish to build and link with the C runtime, specify the path to the +/// supplied header files, and the path to the library that you built. +/// \ No newline at end of file diff --git a/antlr-3.1.3/runtime/C/doxygen/buildrec.dox b/antlr-3.1.3/runtime/C/doxygen/buildrec.dox new file mode 100644 index 0000000..1c19c36 --- /dev/null +++ b/antlr-3.1.3/runtime/C/doxygen/buildrec.dox @@ -0,0 +1,269 @@ +/// \page buildrec How to build Generated C Code +/// +/// \section generated Generated Files +/// +/// The antlr tool jar, run against a grammar file that targets the C language, will generate the following files +/// according to whether your grammar file contains a lexer, parser, combined or treeparser specification. +/// Your grammar file name and the subject of the grammar line in your file are expected to match. Here the generic name G is used: +/// +/// <table> +/// <tr> +/// <th> Suffix </th> +/// <th> Generated files </th> +/// </tr> +/// <tr> +/// <td> lexer grammar (G.g3l) </td> +/// <td> GLexer.c GLexer.h</td> +/// </tr> +/// <tr> +/// <td> parser grammar (G.g3p) </td> +/// <td> GParser.c GParser.h </td> +/// </tr> +/// <tr> +/// <td> grammar G (G.g3pl) </td> +/// <td> GParser.c GParser.h GLexer.c GLexer.h</td> +/// </tr> +/// <tr> +/// <td> tree grammar G; (G.g3t) </td> +/// <td> G.c G.h </td> +/// </tr> +/// </table> +/// +/// The generated .c files reference the .h files using <G.h>, so you must use <code>-I.</code> on your compiler command line +/// (or include the current directory in your include paths in Visual Studio). Additionally, the generated .h files reference +/// <code>antlr3.h</code>, so you must use <code>-I/path/to/antlr/include</code> (E.g. <code>-I /usr/local/include</code>) to reference the standard ANTLR include files. +/// +/// In order to reference the library file at compile time (you can/should only reference one) you need to use the +/// <code>-L/path/to/antlr/lib</code> (E.g. <code>-L /usr/local/lib</code>) on Unix, or add the path to your "Additional Library Path" in +/// Visual Studio. You also need to specify the library using <code>-L</code> on Unix (E.g. <code>-L /usr/local/lib -l antlr3c</code>) or add <code>antlr3c_dll.lib</code> +/// to your Additional Library Dependencies in Visual Studio. +/// +/// In case it isn't obvious, the generated files may be used to produce either a library or an executable (.EXE on Windows) file. +/// +/// If you use the shared version of the libraries, DLL or .so/.so/.a then you must ship the library with your +/// application must run in an environment whereby the library can be found by the runtime linker/loader. +/// This usually involves specifying the directory in which the library lives to an environment variable. +/// On Windows, X:{yourwininstalldir}\system32 will be searched automatically. +/// +/// \section invoke Invoking Your Generated Recognizer +/// +/// In order to run your lexer/parser/tree parser combination, you will need a small function (or main) +/// function that controls the sequence of events, from reading the input file or string, through to +/// invoking the tree parser(s) and retrieving the results. See "Using the ANTLR3C C Target" for more +/// detailed instructions, but if you just want to get going as fast as possible, study the following +/// code example. +/// +/// \code +/// +/// // You may adopt your own practices by all means, but in general it is best +/// // to create a single include for your project, that will include the ANTLR3 C +/// // runtime header files, the generated header files (all of which are safe to include +/// // multiple times) and your own project related header files. Use <> to include and +/// // -I on the compile line (which vs2005 now handles, where vs2003 did not). +/// // +/// #include <treeparser.h> +/// +/// // Main entry point for this example +/// // +/// int ANTLR3_CDECL +/// main (int argc, char *argv[]) +/// { +/// // Now we declare the ANTLR related local variables we need. +/// // Note that unless you are convinced you will never need thread safe +/// // versions for your project, then you should always create such things +/// // as instance variables for each invocation. +/// // ------------------- +/// +/// // Name of the input file. Note that we always use the abstract type pANTLR3_UINT8 +/// // for ASCII/8 bit strings - the runtime library guarantees that this will be +/// // good on all platforms. This is a general rule - always use the ANTLR3 supplied +/// // typedefs for pointers/types/etc. +/// // +/// pANTLR3_UINT8 fName; +/// +/// // The ANTLR3 character input stream, which abstracts the input source such that +/// // it is easy to privide inpput from different sources such as files, or +/// // memory strings. +/// // +/// // For an ASCII/latin-1 memory string use: +/// // input = antlr3NewAsciiStringInPlaceStream (stringtouse, (ANTLR3_UINT32) length, NULL); +/// // +/// // For a UCS2 (16 bit) memory string use: +/// // input = antlr3NewUCS2StringInPlaceStream (stringtouse, (ANTLR3_UINT32) length, NULL); +/// // +/// // For input from a file, see code below +/// // +/// // Note that this is essentially a pointer to a structure containing pointers to functions. +/// // You can create your own input stream type (copy one of the existing ones) and override any +/// // individual function by installing your own pointer after you have created the standard +/// // version. +/// // +/// pANTLR3_INPUT_STREAM input; +/// +/// // The lexer is of course generated by ANTLR, and so the lexer type is not upper case. +/// // The lexer is supplied with a pANTLR3_INPUT_STREAM from whence it consumes its +/// // input and generates a token stream as output. This is the ctx (CTX macro) pointer +/// // for your lexer. +/// // +/// pLangLexer lxr; +/// +/// // The token stream is produced by the ANTLR3 generated lexer. Again it is a structure based +/// // API/Object, which you can customise and override methods of as you wish. a Token stream is +/// // supplied to the generated parser, and you can write your own token stream and pass this in +/// // if you wish. +/// // +/// pANTLR3_COMMON_TOKEN_STREAM tstream; +/// +/// // The Lang parser is also generated by ANTLR and accepts a token stream as explained +/// // above. The token stream can be any source in fact, so long as it implements the +/// // ANTLR3_TOKEN_SOURCE interface. In this case the parser does not return anything +/// // but it can of course specify any kind of return type from the rule you invoke +/// // when calling it. This is the ctx (CTX macro) pointer for your parser. +/// // +/// pLangParser psr; +/// +/// // The parser produces an AST, which is returned as a member of the return type of +/// // the starting rule (any rule can start first of course). This is a generated type +/// // based upon the rule we start with. +/// // +/// LangParser_decl_return langAST; +/// +/// +/// // The tree nodes are managed by a tree adaptor, which doles +/// // out the nodes upon request. You can make your own tree types and adaptors +/// // and override the built in versions. See runtime source for details and +/// // eventually the wiki entry for the C target. +/// // +/// pANTLR3_COMMON_TREE_NODE_STREAM nodes; +/// +/// // Finally, when the parser runs, it will produce an AST that can be traversed by the +/// // the tree parser: c.f. LangDumpDecl.g3t This is the ctx (CTX macro) pointer for your +/// // tree parser. +/// // +/// pLangDumpDecl treePsr; +/// +/// // Create the input stream based upon the argument supplied to us on the command line +/// // for this example, the input will always default to ./input if there is no explicit +/// // argument. +/// // +/// if (argc < 2 || argv[1] == NULL) +/// { +/// fName =(pANTLR3_UINT8)"./input"; // Note in VS2005 debug, working directory must be configured +/// } +/// else +/// { +/// fName = (pANTLR3_UINT8)argv[1]; +/// } +/// +/// // Create the input stream using the supplied file name +/// // (Use antlr3AsciiFileStreamNew for UCS2/16bit input). +/// // +/// input = antlr3AsciiFileStreamNew(fName); +/// +/// // The input will be created successfully, providing that there is enough +/// // memory and the file exists etc +/// // +/// if ( input == NULL ) +/// { +/// ANTLR3_FPRINTF(stderr, "Unable to open file %s due to malloc() failure1\n", (char *)fName); +/// } +/// +/// // Our input stream is now open and all set to go, so we can create a new instance of our +/// // lexer and set the lexer input to our input stream: +/// // (file | memory | ?) --> inputstream -> lexer --> tokenstream --> parser ( --> treeparser )? +/// // +/// lxr = LangLexerNew(input); // CLexerNew is generated by ANTLR +/// +/// // Need to check for errors +/// // +/// if ( lxr == NULL ) +/// { +/// ANTLR3_FPRINTF(stderr, "Unable to create the lexer due to malloc() failure1\n"); +/// exit(ANTLR3_ERR_NOMEM); +/// } +/// +/// // Our lexer is in place, so we can create the token stream from it +/// // NB: Nothing happens yet other than the file has been read. We are just +/// // connecting all these things together and they will be invoked when we +/// // call the parser rule. ANTLR3_SIZE_HINT can be left at the default usually +/// // unless you have a very large token stream/input. Each generated lexer +/// // provides a token source interface, which is the second argument to the +/// // token stream creator. +/// // Note tha even if you implement your own token structure, it will always +/// // contain a standard common token within it and this is the pointer that +/// // you pass around to everything else. A common token as a pointer within +/// // it that should point to your own outer token structure. +/// // +/// tstream = antlr3CommonTokenStreamSourceNew(ANTLR3_SIZE_HINT, lxr->pLexer->tokSource); +/// +/// if (tstream == NULL) +/// { +/// ANTLR3_FPRINTF(stderr, "Out of memory trying to allocate token stream\n"); +/// exit(ANTLR3_ERR_NOMEM); +/// } +/// +/// // Finally, now that we have our lexer constructed, we can create the parser +/// // +/// psr = LangParserNew(tstream); // CParserNew is generated by ANTLR3 +/// +/// if (psr == NULL) +/// { +/// ANTLR3_FPRINTF(stderr, "Out of memory trying to allocate parser\n"); +/// exit(ANTLR3_ERR_NOMEM); +/// } +/// +/// // We are all ready to go. Though that looked complicated at first glance, +/// // I am sure, you will see that in fact most of the code above is dealing +/// // with errors and there isn;t really that much to do (isn;t this always the +/// // case in C? ;-). +/// // +/// // So, we now invoke the parser. All elements of ANTLR3 generated C components +/// // as well as the ANTLR C runtime library itself are pseudo objects. This means +/// // that they are represented as pointers to structures, which contain any +/// // instance data they need, and a set of pointers to other interfaces or +/// // 'methods'. Note that in general, these few pointers we have created here are +/// // the only things you will ever explicitly free() as everything else is created +/// // via factories, that allocate memory efficiently and free() everything they use +/// // automatically when you close the parser/lexer/etc. +/// // +/// // Note that this means only that the methods are always called via the object +/// // pointer and the first argument to any method, is a pointer to the structure itself. +/// // It also has the side advantage, if you are using an IDE such as VS2005 that can do it +/// // that when you type ->, you will see a list of all the methods the object supports. +/// // +/// langAST = psr->decl(psr); +/// +/// // If the parser ran correctly, we will have a tree to parse. In general I recommend +/// // keeping your own flags as part of the error trapping, but here is how you can +/// // work out if there were errors if you are using the generic error messages +/// // +/// if (psr->pParser->rec->errorCount > 0) +/// { +/// ANTLR3_FPRINTF(stderr, "The parser returned %d errors, tree walking aborted.\n", psr->pParser->rec->errorCount); +/// +/// } +/// else +/// { +/// nodes = antlr3CommonTreeNodeStreamNewTree(langAST.tree, ANTLR3_SIZE_HINT); // sIZE HINT WILL SOON BE DEPRECATED!! +/// +/// // Tree parsers are given a common tree node stream (or your override) +/// // +/// treePsr = LangDumpDeclNew(nodes); +/// +/// treePsr->decl(treePsr); +/// nodes ->free (nodes); nodes = NULL; +/// treePsr ->free (treePsr); treePsr = NULL; +/// } +/// +/// // We did not return anything from this parser rule, so we can finish. It only remains +/// // to close down our open objects, in the reverse order we created them +/// // +/// psr ->free (psr); psr = NULL; +/// tstream ->free (tstream); tstream = NULL; +/// lxr ->free (lxr); lxr = NULL; +/// input ->close (input); input = NULL; +/// +/// return 0; +/// } +/// \endcode +/// diff --git a/antlr-3.1.3/runtime/C/doxygen/changes31.dox b/antlr-3.1.3/runtime/C/doxygen/changes31.dox new file mode 100644 index 0000000..d1793db --- /dev/null +++ b/antlr-3.1.3/runtime/C/doxygen/changes31.dox @@ -0,0 +1,56 @@ +/// \page changes31 Changes in 3.1 from 3.0 +/// +/// The following changes have taken place from 3.0 to 3.1. Some of +/// them may require minor changes to your grammar files or the +/// programs that invoke your grammar. Please take the time to read +/// through this list as it may save you time later. +/// +/// \section returns Constructor Return Values +/// +/// In previous releases the return value from both the generated constructors and +/// built in constructor functions would return a value of -1 or -2 if a problem +/// occurred. However, the only problem that can really occur is lack of memory, +/// hence to avoid the remote change that some memory allocation scheme would return +/// an address of -1 for a pointer, the return address is now NULL if there was +/// no memory available. The old macros for this mechanism have been removed which +/// will force you to read this information. You now need only check the return +/// address for NULL, or you could not bother doing that and join with 95% of the world's +/// C code. +/// +/// \section trees Tree Parser Rewrites +/// +/// The 3.1 runtime now supports tree rewrites from tree parsers. See the main ANTLR +/// documentation for more details. This beta version contains \subpage knownissues regarding +/// the release of mmeory allocated to tree nodes when they are rewritten in some combinations +/// of re-writing tree parsers. These issues will be corrected before release. +/// +/// \section debugger ANTLRWorks Debugger +/// +/// The ANTLRWorks debugger is now fully supported by this version of the runtime. It +/// supports remote debugging only (you cannot generate C, compile and debug it from the +/// ANTLRWorks IDE.) However both parser and tree parser debugging is supported providing +/// you are using a version of ANTLRWorks that supports tree parser debugging. Generate +/// the C code with the -debug option of the ANTLR tool, as per any other target. +/// +/// Note that when you invoke your debugging version of the parser, it will appear to hang +/// but is in fact waiting on a local TCP socket connection from the ANTLRWorks debugger. As the +/// target environment is unknown, it is not prudent to generate notification status messages +/// using something like printf, as the target environment may not have a console or implement +/// printf. +/// +/// \section macros Macro Changes +/// +/// Prior to the 3.1 release, accessing the token source of a lexer required knowledge of where +/// the token source pointer was located wihtin the lexer. In 3.1, the token source was burried +/// further in the innards of the C runtime and such knowledge is considerd irreleavant and confusing. +/// Hence, when creating a token stream from a token source, it is now mandatory to use the new +/// C macro TOKENSOURCE(lxr), which will expand to point at the token source interface. This MACRO +/// will be maintained across future versions. You can see how to use it in the downloadable +/// examples, avaiable from the downloads page of the ANTLR web site. Here is the relevant code +/// for creating a token stream, extracted from those examples: +/// +/// \code +/// tstream = antlr3CommonTokenStreamSourceNew(ANTLR3_SIZE_HINT, TOKENSOURCE(lxr)); +/// \endcode +/// + diff --git a/antlr-3.1.3/runtime/C/doxygen/doxygengroups.dox b/antlr-3.1.3/runtime/C/doxygen/doxygengroups.dox new file mode 100644 index 0000000..de259f3 --- /dev/null +++ b/antlr-3.1.3/runtime/C/doxygen/doxygengroups.dox @@ -0,0 +1,243 @@ +// Definitions of documentation groups so we can organize the API and +// usage documentation nicely. + +/// \defgroup apiclasses API Classes +/// +/// The API classes are divided into the typdefs (and their underlying structs) +/// that are the containers for each 'object' within the ANTLR3C runtime, and +/// their implementations (the functions that are installed by default in to +/// these structures when you create them.) +/// +/// The typedefs contain data and function pointers, which together define +/// the object. The implementation functions are the default implementations +/// of the 'methds' encapsulated by the typdef structures.You may override +/// any of the methods once their objects are created by installing a pointer to +/// your own function. Some of these methods create other 'objects' (instances of +/// typedef structures), which allows you install your own method and create your +/// own implementation of these. +/// + + /// \defgroup apistructures API Typedefs and Structs + /// \ingroup apiclasses + /// + /// These structures (and the typedefs that you use to reference them + /// and their pointers) are the C equivalent of objects. They correspond + /// (roughly) to the Java runtime system classes and contain all the + /// data elements for a particular interface as well as all the pointers + /// to functions that implement these interfaces. + /// + /// There are constructor functions exported from the C runtime, which you + /// use to create a default implementation of one of these 'classes'. You can + /// then override any part of the implementation by installing your own + /// function pointers, before using the interface 'object' you have created. + /// + /// For instance, you can override the default error message reporting function + /// by replacing the standard (example) implementation of this function with + /// your own. In your grammar, you would place the following + /// + /// \code + /// @parser::apifuncs + /// { + /// // Install custom error message display + /// // + /// RECOGNIZER->displayRecognitionError = produceError; + /// } + /// \endcode + /// + /// The special section @parser::apiFuncs is guaranteed to be generated after + /// the RECONGIZER 'object' has already be created and initialized, so you may + /// install your own implementations of the #ANTLR3_BASE_RECOGNIZER interface + /// functions. The error display function is likely to be the only one you are + /// interested in replacing. + /// + /// Some typedef structures contain either pointers to 'inherited' objects (usual) + /// or embedded structures/typedefs (unusual). In some cases, the pointers passed + /// around by the paresr or tree parser are actually the pointers to these embedded + /// structures (such as #pANTLR3_BASE_TREE), and these embedded 'objects' contain + /// pointers to their encapsulating objects. This is the equivalent of passing + /// interface objects around in object oriented languages. + /// + + /// \defgroup ANTLR3_BASE_RECOGNIZER ANTLR3_BASE_RECOGNIZER - Base Recognizer Class Definition + /// \ingroup apistructures + /// + /// This is the definition of the base recognizer interface, instantiations + /// of which are referred to via #pANTLR3_BASE_RECOGNIZER. + /// + /// In general you will not refer to one of these structures directly as a + /// a #pANTLR3_BASE_RECOGNIZER will be embedded within a higher level + /// object such as #pANTLR3_PARSER + /// + /// \defgroup ANTLR3_RECOGNIZER_SHARED_STATE ANTLR3_RECOGNIZER_SHARED_STATE Recognizer Shared State Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_BITSET ANTLR3_BITSET - Bitset Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_TOKEN_FACTORY ANTLR3_TOKEN_FACTORY - Token Factory Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_COMMON_TOKEN ANTLR3_COMMON_TOKEN - Common Token Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_EXCEPTION ANTLR3_EXCEPTION - Exception Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_HASH_BUCKET ANTLR3_HASH_BUCKET - Hash Table Bucket Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_HASH_ENTRY ANTLR3_HASH_ENTRY - Hash Table Entry Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_HASH_ENUM ANTLR3_HASH_ENUM - Hash Table Enumerator Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_HASH_TABLE ANTLR3_HASH_TABLE - Hash Table Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_LIST ANTLR3_LIST - List Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_VECTOR_FACTORY ANTLR3_VECTOR_FACTORY - Vector Factory Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_VECTOR ANTLR3_VECTOR - Vector Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_STACK ANTLR3_STACK - Stack Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_INPUT_STREAM ANTLR3_INPUT_STREAM - Input Stream Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_LEX_STATE ANTLR3_LEX_STATE - Lexer State Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_STRING_FACTORY ANTLR3_STRING_FACTORY - String Factory Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_STRING ANTLR3_STRING - String Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_TOKEN_SOURCE ANTLR3_TOKEN_SOURCE - Token Source Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_TOKEN_STREAM ANTLR3_TOKEN_STREAM - Token Stream Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_COMMON_TOKEN_STREAM ANTLR3_COMMON_TOKEN_STREAM - Common Token Stream Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_CYCLIC_DFA ANTLR3_CYCLIC_DFA - Cyclic DFA Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_LEXER ANTLR3_LEXER - Lexer Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_PARSER ANTLR3_PARSER - Parser Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_BASE_TREE ANTLR3_BASE_TREE - Base Tree Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_COMMON_TREE ANTLR3_COMMON_TREE - Common Tree Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_ARBORETUM ANTLR3_ARBORETUM - Tree Factory Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_PARSE_TREE ANTLR3_PARSE_TREE - Parse Tree Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_TREE_NODE_STREAM ANTLR3_TREE_NODE_STREAM - Tree Node Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_COMMON_TREE_NODE_STREAM ANTLR3_COMMON_TREE_NODE_STREAM - Common Tree Node Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_TREE_WALK_STATE ANTLR3_TREE_WALK_STATE - Tree Walk State Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_BASE_TREE_ADAPTOR ANTLR3_BASE_TREE_ADAPTOR - Base Tree Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_COMMON_TREE_ADAPTOR ANTLR3_COMMON_TREE_ADAPTOR - Common Tree Adaptor Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_TREE_PARSER ANTLR3_TREE_PARSER - Tree Parser Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_INT_TRIE ANTLR3_INT_TRIE - Trie Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_REWRITE_RULE_ELEMENT_STREAM ANTLR3_REWRITE_RULE_ELEMENT_STREAM - Token Rewrite Stream Class Definition + /// \ingroup apistructures + /// \defgroup ANTLR3_DEBUG_EVENT_LISTENER ANTLR3_DEBUG_EVENT_LISTENER - Debugger Class Definition + /// \ingroup apistructures + + /// \defgroup apiimplementations API Implementation functions + /// \ingroup apiclasses + /// + /// API implementation functions are the default implementation of each of the + /// methods in a particular typedef structure. + /// + /// They are generally grouped together in the same source code file. + /// For instance the default implementations of the + /// methods contained by a #pANTLR3_BASE_RECOGNIZER will be found in the file + /// antlr3baserecognizer.c + /// + /// A source file that provides the default implementations of functions will usually + /// also supply the public (exported from the .DLL or code library) 'constructor' functions + /// that create and initialize the typedef structure that they implement. For instance, + /// in the antlr3baserecognizer.c file, you will find the function antlr3BaseRecognizerNew() + /// + + /// \defgroup pANTLR3_BASE_RECOGNIZER pANTLR3_BASE_RECOGNIZER Base Recognizer Implementation + /// \ingroup apiimplementations + /// + /// The base recognizer interface is implemented by all higher level recognizers + /// such as #pANTLR3_PARSER and provides methods common to all recognizers. + /// + /// \defgroup pANTLR3_RECOGNIZER_SHARED_STATE pANTLR3_RECOGNIZER_SHARED_STATE - Recognizer Shared State Implementation + /// \ingroup apiimplementations + /// + /// The recognizer shared state class does not have an implementation because it contains only + /// data fields, documented at #ANTLR3_RECOGNIZER_SHARED_STATE + /// + /// \defgroup pANTLR3_BITSET pANTLR3_BITSET - Bitset Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_TOKEN_FACTORY pANTLR3_TOKEN_FACTORY - Token Factory Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_COMMON_TOKEN pANTLR3_COMMON_TOKEN - Common Token Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_EXCEPTION pANTLR3_EXCEPTION - Exception Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_HASH_BUCKET pANTLR3_HASH_BUCKET - Hash Table Bucket Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_HASH_ENTRY pANTLR3_HASH_ENTRY - Hash Table Entry Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_HASH_ENUM pANTLR3_HASH_ENUM - Hash Table Enumerator Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_HASH_TABLE pANTLR3_HASH_TABLE - Hash Table Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_LIST pANTLR3_LIST - List Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_VECTOR_FACTORY pANTLR3_VECTOR_FACTORY - Vector Factory Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_VECTOR pANTLR3_VECTOR - Vector Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_STACK pANTLR3_STACK - Stack Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_INPUT_STREAM pANTLR3_INPUT_STREAM - Input Stream Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_LEX_STATE pANTLR3_LEX_STATE - Lexer State Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_STRING_FACTORY pANTLR3_STRING_FACTORY - String Factory Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_STRING pANTLR3_STRING - String Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_TOKEN_SOURCE pANTLR3_TOKEN_SOURCE - Token Source Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_TOKEN_STREAM pANTLR3_TOKEN_STREAM - Token Stream Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_COMMON_TOKEN_STREAM pANTLR3_COMMON_TOKEN_STREAM - Common Token Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_CYCLIC_DFA pANTLR3_CYCLIC_DFA - Cyclic DFA Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_LEXER pANTLR3_LEXER - Lexer Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_PARSER pANTLR3_PARSER - Parser Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_BASE_TREE pANTLR3_BASE_TREE - Base Tree Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_COMMON_TREE pANTLR3_COMMON_TREE - Common Tree Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_ARBORETUM pANTLR3_ARBORETUM - Tree Factory Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_PARSE_TREE pANTLR3_PARSE_TREE - Parse Tree Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_TREE_NODE_STREAM pANTLR3_TREE_NODE_STREAM - Tree Node Stream Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_COMMON_TREE_NODE_STREAM pANTLR3_COMMON_TREE_NODE_STREAM - Common Tree Node Stream Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_TREE_WALK_STATE pANTLR3_TREE_WALK_STATE - Tree Walk State Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_BASE_TREE_ADAPTOR pANTLR3_BASE_TREE_ADAPTOR - Base Tree Adaptor Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_COMMON_TREE_ADAPTOR pANTLR3_COMMON_TREE_ADAPTOR - Common Tree Adaptor Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_TREE_PARSER pANTLR3_TREE_PARSER - Tree ParserImplementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_INT_TRIE pANTLR3_INT_TRIE - Trie Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_REWRITE_RULE_ELEMENT_STREAM pANTLR3_REWRITE_RULE_ELEMENT_STREAM - Token Rewrite Stream Implementation + /// \ingroup apiimplementations + /// \defgroup pANTLR3_DEBUG_EVENT_LISTENER pANTLR3_DEBUG_EVENT_LISTENER - Debugger Implementation + /// \ingroup apiimplementations + \ No newline at end of file diff --git a/antlr-3.1.3/runtime/C/doxygen/generate.dox b/antlr-3.1.3/runtime/C/doxygen/generate.dox new file mode 100644 index 0000000..0173d78 --- /dev/null +++ b/antlr-3.1.3/runtime/C/doxygen/generate.dox @@ -0,0 +1,57 @@ +/// \page generate Generating Code for the C Target +/// +/// \section generate Generating C +/// +/// Before discussing how we compile or call the generated C code, we need to know how to invoke the C code generator. +/// This is achieved within the grammar file itself, using the language option: +/// +/// \verbatim +options { language = C;} +\endverbatim +/// +/// The code generator consists of a single .java file within the standard ANTLR tool jar, and a code generation template, +/// used by the StringTemplate engine, which drives code generation for all language targets. In fact you can make copies of the C.stg +/// and AST.stg templates and make changes to them (though you are encouraged not to, as it is better to provide bug fixes or +/// enhancements which we are happy to receive requests for and will do out best to incorporate. +/// +/// If you are working in the Windows environment, with Visual Studio 2005 or later, you may wish to utilize the custom rulefile +/// provided in the C source code distribution under the <code>./vs2005</code> directory for this purpose. If you are using a pre-built +/// library then you can also download this rule file directly from the FishEye source code browser for ANTLR3. +/// +/// In order to use the rulefile, you must adopt the following suffixes for your grammar files, though they are otherwise optional: +/// +/// <table> +/// +/// <tr> +/// <th> Suffix </th> +/// <th> Grammar should contain... </th> +/// </tr> +/// <tr> +/// <td> .g3l </td> +/// <td> A lexer grammar specification only. </td> +/// </tr> +/// <tr> +/// <td> .g3p </td> +/// <td> A parser grammar specification only. </td> +/// </tr> +/// <tr> +/// <td> .g3pl </td> +/// <td> A combined lexer and parser specification. </td> +/// </tr> +/// <tr> +/// <td> .g3t </td> +/// <td> A tree grammar specification. </td> +/// </tr> +/// +/// </table> +/// +/// You may also wish to use these suffixes if you are building your projects using Makefiles, as this makes the output deterministic. +/// However in this case a much better solution is probably to utilize the -depend option of the Antlr tool, which should tell your +/// Makefile what the grammar files generates, irrespective of its suffix. ANTLR does not care about the actual suffix you use for +/// your grammar file, so building for multiple platforms is relatively easy. +/// +/// <b>NOTE:</b> Your grammar source, regardless of suffix must be named the same as the grammar statement within it. Grammar xyz +/// must be contained within a file called xyz.<i>anything</i> +/// +/// + diff --git a/antlr-3.1.3/runtime/C/doxygen/interop.dox b/antlr-3.1.3/runtime/C/doxygen/interop.dox new file mode 100644 index 0000000..b07983a --- /dev/null +++ b/antlr-3.1.3/runtime/C/doxygen/interop.dox @@ -0,0 +1,327 @@ +/// \page interop Interacting with the Generated Code +/// +/// \section intro Introduction +/// +/// The main way to interact with the generated code is via action code placed within <code>{</code> and +/// <code>}</code> characters in your rules. In general, you are advised to keep the code you embed within +/// these actions, and the grammar itself to an absolute minimum. Rather than embed code directly in your +/// grammar, you should construct an API, that is called from the actions within your grammar. This way +/// you will keep the grammar clean and maintainable and separate the code generators or other code +/// from the definition of the grammar itself. +/// +/// However, when you wish to call your API functions, or insert small pieces of code that do not +/// warrant external functions, you will need to access elements of tokens, return elements from +/// parser rules and perhaps the internals of the recognizer itself. The C runtime provides a number +/// of MACROs that you can use within your action code. It also provides a number of performant +/// structures that you may find useful for building symbol tables, lists, tries, stacks, arrays and so on (all +/// of which are managed so that your memory allocation problems are minimized.) +/// +/// \section rules Parameters and Returns from Parser Rules +/// +/// The C target does not differ from the Java target in any major ways here, and you should consult +/// the standard documentation for the use of parameters on rules and the returns clause. You should +/// be aware though, that the rules generate C function calls and therefore the input and returns +/// clauses are subject to the constraints of C scoping. +/// +/// You should note that if your parser rule returns more than a single entity, then the return +/// type of the generated rule function is a struct, which is returned by value. This is also the case +/// if your rule is part of a tree building grammar (uses the <code>output=AST;</code> option. +/// +/// Other than the notes above, you can use any pre-declared type as an input or output parameter +/// for your rule. +/// +/// \section memory Memory Management +/// +/// You are responsible for allocating and freeing any memory used by your own +/// constructs, ANTLR will track and release any memory allocated internally for tokens, trees, stacks, scopes +/// and so on. This memory is returned to the malloc pool when you call the free method of any +/// ANTLR3 produced structure. +/// +/// For performance reasons, and to avoid thrashing the malloc allocation system, memory for amy elements +/// of your generated parser is allocated in chunks and parcelled out by factories. For instance memory +/// for tokens is created as an array of tokens, and a token factory hands out the next available slot +/// to the lexer. When you free the lexer, the allocated memory is returned to the pool. The same applies +/// to 'strings' that contain the token text and various other text elements accessed within the lexer. +/// +/// The only side effect of this is that after your parse and analysis is complete, if you wish to retain +/// anything generated automatically, you must copy it before freeing the recognizer structures. In practice +/// it is usually practical to retain the recognizer context objects until your processing is complete or +/// to use your own allocation scheme for generating output etc. +/// +/// The advantage of using object factories is of course that memory leaks and accessing de-allocated +/// memory are bugs that rarely occur within the ANTLR3 C runtime. Further, allocating memory for +/// tokens, trees and so on is very fast. +/// +/// \section ctx The CTX Macro +/// +/// The CTX macro is a fundamental parameter that is passed as the first parameter to any generated function +/// concerned with your lexer, parser, or tree parser. The is is the context pointer for your generated +/// recognizer and is how you invoke the generated functions, and access the data embedded within your generated +/// recognizer. While you can use it to directly access stacks, scopes and so on, this is not really recommended +/// as you should use the $xxx references that are available generically within ANTLR grammars. +/// +/// The context pointer is used because this removes the need for any global/static variables at all, either +/// within the generated code, or the C runtime. This is of course fundamental to creating free threading +/// recognizers. Wherever a function call or rule call required the ctx parameter, you either reference it +/// via the CTX macro, or the ctx parameter is in fact the return type from calling the 'constructor' +/// function for your parser/lexer/tree parser (see code example in "How to build Generated Code" .) +/// +/// \section macros Pre-Defined convenience MACROs +/// +/// While the author is not fond of using C MACROs to hide code or structure access, in the case of generated +/// code, they serve two useful purposes. The first is to simplify the references to internal constructs, +/// the second is to facilitate the change of any internal interface without requiring you to port grammars +/// from earlier versions (just regenerate and recompile). As of release 3.1, these macros are stable and +/// will only change their usage interface in the event of bugs being discovered. You are encouraged to +/// use these macros in your code, rather than access the raw interface. +/// +/// \bNB: Macros that act like statements must be terminated with a ';'. The macro body does not +/// supply this, nor should it. Macros that call functions are declared with () even if they +/// have no parameters, macros that reference fields do not have a () declaration. +/// +/// \section lexermacros Lexer Macros +/// +/// There are a number of macros that are useful exclusively within lexer rules. There are additional +/// macros, common to all recognizer, and these are documented in the section Common Macros. +/// +/// \subsection lexer LEXER +/// +/// The <code>LEXER</code> macro returns a pointer to the base lexer object, which is of type #pANTLR3_LEXER. This is +/// not the pointer to your generated lexer, which is supplied by the CTX macro, +/// but to the common implementation of a lexer interface, +/// which is supplied to all generated lexers. +/// +/// \subsection lexstate LEXSTATE +/// +/// Provides a pointer to the lexer shared state structure, which is where the tokens for a +/// rule are constructed and the status elements of the lexer are kept. This pointer is of type +/// #pANTLR3_RECOGNIZER_SHARED_STATE.In general you should only access elements of this structure +/// if there is not already another MACRO or standard $xxxx antlr reference that refers to it. +/// +/// \subsection la LA(n) +/// +/// The <code>LA</code> macro returns the character at index n from the current input stream index. The return +/// type is #ANTLR3_UINT32. Hence <code>LA(1)</code> returns the character at the current input position (the +/// character that will be consumed next), <code>LA(-1)</code> returns the character that has just been consumed +/// and so on. The <code>LA(n)</code> macro is useful for constructing semantic predicates in lexer rules. The +/// reference <code>LA(0)</code> is undefined and will cause an error in your lexer. +/// +/// \subsection getcharindex GETCHARINDEX() +/// +/// The <code>GETCHARINDEX</code> macro returns the index of the current character position as a 0 based +/// offset from the start of the input stream. It returns a value type of #ANTLR3_UINT32. +/// +/// \subsection getline GETLINE() +/// +/// The <code>GETLINE</code> macro returns the line number of current character (<code>LA(1)</code> in the input +/// stream. It returns a value type of #ANTLR3_UINT32. Note that the line number is incremented +/// automatically by an input stream when it sees the input character '\n'. The character that causes +/// the line number to increment can be changed by calling the SetNewLineChar() method on the input +/// stream before invoking the lexer and after creating the input stream. +/// +/// \subsection gettext GETTEXT() +/// +/// The <code>GETTEXT</code> macro returns the text currently matched by the lexer rule. In general you should use the +/// generic $text reference in ANTLR to retrieve this. The return type is a reference type of #pANTLR3_STRING +/// which allows you to manipulate the text you have retrieved (\b NB this does not change the input stream +/// only the text you copy from the input stream when you use this MACRO or $text). +/// +/// The reference $text->chars or GETTEXT()->chars will reference a pointer to the '\\0' terminated character +/// string that the ANTLR3 #pANTLR3_STRING represents. String space is allocated automatically as well as +/// the structure that holds the string. The #pANTLR3_STRING_FACTORY associated with the lexer handles this +/// and when you close the lexer, it will automatically free any space allocated for strings and their structures. +/// +/// \subsection getcharpositioninline GETCHARPOSITIONINLINE() +/// +/// The <code>GETCHARPOSITIONINLINE</code> returns the zero based offset of character <code>LA(1)</code> +/// from the start of the current input line. See the macro <code>GETLINE</code> for details on what the +/// line number means. +/// +/// \subsection emit EMIT() +/// +/// The macro <code>EMIT</code> causes the text range currently matched to the lexer rule to be emitted +/// immediately as the token for the rule. Subsequent text is matched but ignored. The type used for the +/// the token is the name of the lexer rule or, if you have change this by using $type = XXX;, the type +/// XXX is used. +/// +/// \subsection emitnew EMITNEW(t) +/// +/// The macro <code>EMITNEW</code> causes the supplied token reference <code>t</code> to be used as the +/// token emitted by the rule. The parameter <code>t </code> must be of type #pANTLR3_COMMON_TOKEN. +/// +/// \subsection index INDEX() +/// +/// The <code>INDEX</code> macro returns the current input position according to the input stream. It is not +/// guaranteed to be the character offset in the input stream but is instead used as a value +/// for marking and rewinding to specific points in the input stream. Use the macro <code>GETCHARINDEX()</code> +/// to find out the position of the <code>LA(1)</code> in the input stream. +/// +/// \subsection pushstream PUSHSTREAM(str) +/// +/// The <code>PUSHSTREAM</code> macro, in conjunction with the <code>POPSTREAM</code> macro (called internally in the runtime usually) +/// can be used to stack many input streams to the lexer, and implement constructs such as the C pre-processor +/// \#include directive. +/// +/// An input stream that is pushed on to the stack becomes the current input stream for the lexer and +/// the state of the previous stream is automatically saved. The input stream will be automatically +/// popped from the stack when it is exhausted by the lexer. You may use the macro <code>POPSTREAM</code> +/// to return to the previous input stream prior to exhausting the currently stacked input stream. +/// +/// Here is an example of using the macro in a lexer to implement the C \#include pre-processor directive: +/// +/// \code +/// fragment +/// STRING_GUTS : (~('\\'|'"') )* ; +/// +/// LINE_COMMAND +/// : '#' (' ' | '\t')* +/// ( +/// 'include' (' ' | '\t')+ '"' file = STRING_GUTS '"' (' ' | '\t')* '\r'? '\n' +/// { +/// pANTLR3_STRING fName; +/// pANTLR3_INPUT_STREAM in; +/// +/// // Create an initial string, then take a substring +/// // We can do this by messing with the start and end +/// // pointers of tokens and so on. This shows a reasonable way to +/// // manipulate strings. +/// // +/// fName = $file.text; +/// printf("Including file '\%s'\n", fName->chars); +/// +/// // Create a new input stream and take advantage of built in stream stacking +/// // in C target runtime. +/// // +/// in = antlr3AsciiFileStreamNew(fName->chars); +/// PUSHSTREAM(in); +/// +/// // Note that the input stream is not closed when it EOFs, I don't bother +/// // to do it here, but it is up to you to track streams created like this +/// // and destroy them when the whole parse session is complete. Remember that you +/// // don't want to do this until all tokens have been manipulated all the way through +/// // your tree parsers etc as the token does not store the text it just refers +/// // back to the input stream and trying to get the text for it will abort if you +/// // close the input stream too early. +/// // +/// +/// } +/// | (('0'..'9')=>('0'..'9'))+ ~('\n'|'\r')* '\r'? '\n' +/// ) +/// {$channel=HIDDEN;} +/// ; +/// \endcode +/// +/// \subsection popstream POPSTREAM() +/// +/// Assuming that you have stacked an input stream using the PUSHSTREAM macro, you can +/// remove it from the stream stack and revert to the previous input stream. You should be careful +/// to pop the stream at an appropriate point in your lexer action, so you do not match characters +/// from one stream with those from another in the same rule (unless this is what you want to do) +/// +/// \subsection settext SETTEXT(str) +/// +/// A token manufactured by the lexer does not actually physically store the text from the +/// input stream to which it matches. The token string is instead created only if you ask for +/// the text. However if you wish to change the text that the token represents you can use +/// this macro to set it explicitly. Note that this does not change the input stream text +/// but associates the supplied #pANTLR3_STRING with the token. This string is then returned +/// when parser and tree parser reference the tokens via the $xxx.text reference. +/// +/// \subsection user1 USER1 USER2 USER3 and CUSTOM +/// +/// While you can create your own custom token class and have the lexer deal with this, this +/// is a lot of work compared to the trivial inheritance that can be achieved in the Java target. +/// In many cases though, all that is needed is the addition of a few data items such as an +/// integer or a pointer. Rather than require C programmers to create complicated structures +/// just to add a few data items, the C target provides a few custom fields in the standard +/// token, which will fulfil the needs of most lexers and parsers. +/// +/// The token fields user1, user2, and user3 are all value types of #ANTLR_UINT32. In the +/// parser you can reference these fields directly from the token: <code>x=TOKNAME { $x->user1 ...</code> +/// but when you are building the token in the lexer, you must assign to the fields using the +/// macros <code>USER1</code>, <code>USER2</code>, or <code>USER3</code>. As in: +/// +/// \code +/// LEXTOK: 'AAAAA' { USER1 = 99; } ; +/// \endcode +/// +/// +/// \section parsermacros Parser and Tree Parser Macros +/// +/// \subsection parser PARSER +/// +/// The <code>PARSER</code> macro returns a pointer to the base parser or tree parser object, which is of type #pANTLR3_PARSER +/// or #pANTLR3_TREE_PARSER . This is not the pointer to your generated parser, which is supplied by the <code>CTX</code> macro, +/// but to the common implementation of a parser or tree parser interface, which is supplied to all generated parsers. +/// +/// \subsection index INDEX() +/// +/// When used in the parser, the <code>INDEX</code> macro returns the position of the current +/// token ( LT(1) ) in the input token stream. It can be used for <code>MARK</code> and <code>REWIND</code> +/// operations. +/// +/// \subsection lt LT(n) and LA(n) +/// +/// In the parser, the macro <code>LT(n)</code> returns the #pANTLR3_COMMON_TOKEN at offset <code>n</code> from +/// the current token stream input position. The macro <code>LA(n)</code> returns the token type of the token +/// at position <code>n</code>. The value <code>n</code> cannot be zero, and such a reference will return +/// <code>NULL</code> and possibly cause an error. <code>LA(1)</code> is the token that is about to be +/// recognized and <code>LA(-1)</code> is the token that has just been recognized. Values of n that exceed the +/// limits of the token stream boundaries will return <code>NULL</code>. +/// +/// \subsection psrstate PSRSTATE +/// +/// Returns the shared state pointer of type #pANTLR3_RECOGNIZER_SHARED_STATE. This is not generally +/// useful to the grammar programmer as the useful elements have generic $xxx references built in to +/// ANTLR. +/// +/// \subsection adaptor ADAPTOR +/// +/// When building an AST via a parser, the work of constructing and manipulating trees is done +/// by a supplied adaptor class. The default class is usually fine for most tree operations but +/// if you wish to build your own specialized linked/tree structure, then you may need to reference +/// the adaptor you supply directly. The <code>ADAPTOR</code> macro returns the reference to the tree adaptor +/// which is always of type #pANTLR3_BASE_TREE_ADAPTOR, even if it is your custom adapter. +/// +/// \section commonmacros Macros Common to All Recognizers +/// +/// \subsection recognizer RECOGNIZER +/// +/// Returns a reference type of #pANTRL3_BASE_RECOGNIZER, which is the base functionality supplied +/// to all recognizers, whether lexers, parsers or tree parsers. You can override methods in this +/// interface by installing your own function pointers (once you know what you are doing). +/// +/// \subsection input INPUT +/// +/// Returns a reference to the input stream of the appropriate type for the recognizer. In a lexer +/// this macro returns a reference type of #pANTLR3_INPUT_STREAM, in a parser this is type +/// #pANTLR3_TOKEN_STREAM and in a tree parser this is type #pANTLR3_COMMON_TREE_NODE_STREAM. +/// You can of course provide your own implementations of any of these interfaces. +/// +/// \subsection mark MARK() +/// +/// This macro will cause the input stream for the current recognizer to be marked with a +/// checkpoint. It will return a value type of #ANTLR3_MARKER which you can use as the +/// parameter to a <code>REWIND</code> macro to return to the marked point in the input. +/// +/// If you know you will only ever rewind to the last <code>MARK</code>, then you can ignore the return +/// value of this macro and just use the <code>REWINDLAST</code> macro to return to the last <code>MARK</code> that +/// was set in the input stream. +/// +/// \subsection rewind REWIND(m) +/// +/// Rewinds the appropriate input stream back to the marked checkpoint returned from a prior +/// MARK macro call and supplied as the parameter <code>m</code> to the <code>REWIND(m)</code> +/// macro. +/// +/// \subsection rewindlast REWINDLAST() +/// +/// Rewinds the current input stream (character, tokens, tree nodes) back to the last checkpoint +/// marker created by a <code>MARK</code> macro call. Fails silently if there was no prior +/// <code>MARK</code> call. +/// +/// \subsection seek SEEK(n) +/// +/// Causes the input stream to position itself directly at offset <code>n</code> in the stream. Works for all +/// input stream types, both lexer, parser and tree parser. +/// diff --git a/antlr-3.1.3/runtime/C/doxygen/knownissues.dox b/antlr-3.1.3/runtime/C/doxygen/knownissues.dox new file mode 100644 index 0000000..733c405 --- /dev/null +++ b/antlr-3.1.3/runtime/C/doxygen/knownissues.dox @@ -0,0 +1,3 @@ +/// \page knownissues Known Issues +/// +/// The following issues \ No newline at end of file diff --git a/antlr-3.1.3/runtime/C/doxygen/mainpage.dox b/antlr-3.1.3/runtime/C/doxygen/mainpage.dox new file mode 100644 index 0000000..3dd3596 --- /dev/null +++ b/antlr-3.1.3/runtime/C/doxygen/mainpage.dox @@ -0,0 +1,104 @@ +// Main page documentation for ANTLR3C runtime. Contains +// doxygen things only. +// + +/// \mainpage ANTLR3 C Runtime API and Usage Guide. +/// +/// \section version Version 3.1 +/// +/// This documentation is specifically for the C rutime version 3.1.x.x, which is +/// specifically for use with version 3.1.x.x of the ANTLR recognizer generation +/// tool. While some of the documentation may well apply to prior or future versions +/// you should consult the manuals for the correct version whenever possible. +/// +/// \section chchchchangeesss Changes from 3.0 to 3.1 +/// +/// Some changes in 3.1 may require small changes in your invoking programs or +/// in the grammar itself. Please read about them here before emailing the user group, +/// where you will be told to come and read about them here, unless they were missed +/// from this list. +/// +/// - \subpage changes31 Check here for API changes +/// +/// \section intro Introduction +/// +/// The ANTLR3 recognizer generation tool is written in Java, but allows the generation +/// of code targeted for a number of other languages. Each target language provides a code +/// generation template for the tool and a runtime library for use by generated recognizers. +/// The C runtime tracks the Java runtime releases and in general when a new version of the +/// tool is released, a new version of the C runtime will be released at the same time. +/// +/// The documentation here is in three parts: +/// +/// - \subpage build Building the runtime itself from source code; +/// - \subpage generate How to tell ANTLR to generate code for the C target; +/// - \subpage buildrec How to build the generated code +/// - \subpage using Using the runtime and the libraries and so on; +/// - \subpage runtime The documentation of the runtime code and functions; +/// +/// \section background Background Information +/// +/// The ANTLR 3 C runtime and code generation templates were written by <a href="http://www.linkedin.com/in/jimidle"> Jim Idle</a> +/// (jimi|at|temporal-wave|dott/com) of <a href="http://www.temporal-wave.com">Temporal Wave LLC</a>. +/// +/// The C runtime and therefore the code generated to utilize the runtime reflects the object model of the +/// Java version of the runtime as closely as a language without class structures and inheritance can. +/// Compromises have only been made where performance would be adversely affected such as minimizing the +/// number of pointer to pointer to pointer to function type structures that could ensue through trying to +/// model inheritance too exactly. Other differences include the use of token and string factories to minimize +/// the number of calls to system functions such as calloc().This model was adopted so that overriding any +/// default implementation of a function is relatively simple for the grammar programmer. +/// +/// The generated code is free threading (subject to the systems calls used on any particular platform +/// being likewise free threading.) +/// +/// \subsection model Runtime Model +/// +/// As there is no such thing as an object reference in C, the runtime defines a number of typedef structs that reflect +/// the calling interface chosen by Terence Parr for the Java version of the same. The initialization of a parser, +/// lexer, input stream or other internal structure therefore consists of allocating the memory required for +/// an instance of the typedef struct that represents the interface, initializing any counters, and buffers etc, +/// then populating a number of pointers to functions that implement the equivalent of the methods in the Java class. +/// +/// The use and initialization of the C versions of a parser is therefore similar to the examples given for Java, +/// but with a bent towards C of course. You may need to be aware of memory allocation and freeing operations +/// in certain environments such as Windows, where you cannot allocate memory in one DLL and free it in another. +/// +/// The runtime provides a number of structures and interfaces that the author has found useful when writing action and +/// processing code within java parsers, and furthermore were required by the C runtime code if it was not to +/// depart too far from the logical layout of the Java model. These include the C equivalents of String, List, +/// Hashtable, Vector and Trie, implemented by pointers to structures. These are freely available for your own programming needs. +/// +/// A goal of the generated code was to minimize the tracking, allocation and freeing of memory for reasons of both +/// performance and reliability. In essence any memory used by a lexer, parser or tree parser is automatically tracked and +/// freed when the instance of it is released. There are therefore factory functions for tokens and so on such that they +/// can be allocated in blocks and parceled out as they are required. They are all then freed in one go, minimizing the +/// risk of memory leaks and alloc/free thrashing. This has only one side effect, being that if you wish to preserve some structure generated by +/// the lexer, parser or tree parser, then you must make a copy of it before freeing those structures, and track it yourself +/// after that. In practice, it is easy enough just not to release the antlr generated components until you are +/// finished with their results. +/// +/// \section targets Target Platforms +/// +/// The C project is constructed such that it will compile on any reasonable ANSI C compiler in either 64 or 32 bit mode, +/// with all warnings turned on. This is true of both the runtime code and the generated code and has been summarily tested +/// with Visual Studio .Net (2003, 2005 and 2008) and later versions of gcc on Redhat Linux, as well as on AIX 5.2/5.3, Solaris 9/10, +/// HPUX 11.xx, OSX (PowerPC and Intel) and Cygwin. +/// +/// \b Notes +/// - The C runtime is constructed such that the library can be integrated as an archive library, or a shared library/DLL. +/// - The C language target code generation templates are distributed with the source code for the ANTLR tool itself. +/// +/// \section performance Performance +/// +/// It is C :-). Basic testing of performance against the Java runtime, +/// using the JDK1.6 java source code, and the Java parser provided in the examples (which is a tough test as it includes +/// backtracking and memoization) show that the C runtime uses about half the memory and is between 2 and 3 times the speed. +/// Tests of non-backtracking, non-memoizing parsers, indicate results significantly better than this. +/// +/// \section examples Downloading Examples +/// +/// The <a href="http://www.antlr.org/download.html">downloads page</a> of the ANTLR web site contains a downloadable +/// zip/tar of examples projects for use with the C runtime model. It contains .sln files and source code for a +/// number of example grammars and helps to see how to invoke and call the generated recognizers. +/// \ No newline at end of file diff --git a/antlr-3.1.3/runtime/C/doxygen/runtime.dox b/antlr-3.1.3/runtime/C/doxygen/runtime.dox new file mode 100644 index 0000000..0b0c7d9 --- /dev/null +++ b/antlr-3.1.3/runtime/C/doxygen/runtime.dox @@ -0,0 +1,35 @@ +/// \page runtime Navigating the C Runtime Documentation +/// +/// If you are familiar with Doxygen generated documentation, then the layout of the files, typedefs +/// and so on will be familiar to you. However there is also additional structure applied that helps +/// the programmer to see how the runtime is made up. +/// +/// \section modules Modules +/// +/// Under the Modules menu tree you will find the entry API Classes. This section is further +/// divided into typedefs and structs and the standard runtime supplied interface implementation +/// methods. +/// +/// The typedefs are the types that you declare in your code and which are returned by the +/// 'constructors' such as antlr3AsciiFileStreamNew(). The underlying structures document +/// the data elements of the type and what a function pointer installed in any particular +/// slot should do. +/// +/// The default implementations are the static methods within the default implementation file +/// for a 'class', which are installed by the runtime when a default instance of one the +/// typedefs (classes) is created. +/// +/// When navigating the source code, find the typedef you want to consult and inspect the documentation +/// for its function pointers, then look at the documentation for the default methods that implement +/// that 'method'. +/// +/// For example, under "API Typedefs and Structs" you will find "Base Recognizer Definition", which tells +/// you all the methods that belong to this interface. Under "API Implementation Functions", you will +/// find "Base Recognizer Implementation", which documents the actual functions that are installed +/// to implement the class methods. +/// +/// From here, the documentation should be obvious. If it is not, then you could try reading +/// the actual source code, but please don;t email the author directly, but use the ANTLR Interest +/// email group, which you should probably have signed up for if you have read this far into the +/// C runtime documentation. +/// \ No newline at end of file diff --git a/antlr-3.1.3/runtime/C/doxygen/using.dox b/antlr-3.1.3/runtime/C/doxygen/using.dox new file mode 100644 index 0000000..fb8424a --- /dev/null +++ b/antlr-3.1.3/runtime/C/doxygen/using.dox @@ -0,0 +1,62 @@ +/// \page using Using the ANTLR3 C Target +/// +/// \section intro Introduction +/// +/// Using the ANTLR target involves gaining knowledge of a number of elements: +/// +/// -# Writing ANTLR grammars (not covered in this manual); +/// -# How ANTLR works (not covered in this manual); +/// -# How to use the \@sections with the C target +/// -# Interoperation with the runtime within rule actions; +/// -# Implementing custom versions of the standard library methods; +/// +/// If you are as yet unfamiliar with how ANTLR works in general, then +/// it is suggested that you read the various <a href="http://www.antlr.org/wiki">wiki pages</a> concerned with +/// getting started. However there are a few things that you should note: +/// +/// - The lexer is independent of the parser. You \b cannot control the lexer from within the parser; +/// - The tree parser is independent of the parser. You \b cannot control the parser from within the tree parser(s); +/// - Each tree parser is independent of other tree parsers. +/// +/// This means that your lexer runs first and consumes all the input stream until +/// you stop it programmatically, or it reaches the end of the input stream. It produces +/// a complete stream of tokens, which the parser then consumes. +/// +/// \section Using \@sections in a C Targeted Grammar +/// +/// Within a grammar file there are a number of special sections you can add that cause the +/// code within them to be placed at strategic points in the generated code such as +/// before or after the #include statements in the .c file, within the generated header file +/// or within the constructor for the recognizer. +/// +/// Many of the \@sections used within a Java targeted grammar have some equivalent function within a +/// C targeted grammar, but their use may well be subtly different. There are also additional sections +/// that have meaning only within a grammar targeted for the C runtime. +/// +/// Detailed documentation of these sections is given here: \subpage atsections +/// +/// \section interop Interoperation Within Rule Actions +/// +/// Rule actions have a limited number of elements they can access by name, independently of the +/// target language generated. These are elements such as $line, $pos, $text and so on. Where the +/// $xxx returns a basic type such as \c int, then you can use these in C as you would in the Java +/// target, but where a reference returns a string, you will get a pointer to the C runtime +/// string implementation #pANTLR3_STRING. This will give you access to things like token text +/// but also provides some convenience methods such as #pANTLR3_STRING->substring() and #pANTLR3_STRING->toUTF8(). +/// +/// The generated code provides a number of C MACROs, which make it easier to access runtime +/// components. Always use these macros when available, to protect your action code from changes +/// to the underlying implementation. +/// +/// Detailed documentation of macros and rule action interoperation is given here: \subpage interop +/// +/// \section Custom Implementing Customized Methods +/// +/// Unless you wish to create your own tree structures using the built in ANTLR AST rewriting +/// notation, you will rarely need to override the default implementation of runtime methods. The +/// exception to this will be the syntax err reporting method, which is essentially a stub function +/// that you will usually want to provide your own implementation for. You should consider the built in function +/// displayRecognitionError() as an example of where to start as there can be no really useful +/// generic error message display. +/// +/// \ No newline at end of file diff --git a/antlr-3.1.3/runtime/C/include/antlr3.h b/antlr-3.1.3/runtime/C/include/antlr3.h new file mode 100644 index 0000000..2ead975 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3.h @@ -0,0 +1,56 @@ +#ifndef _ANTLR3_H +#define _ANTLR3_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> + +#include <antlr3errors.h> +#include <antlr3exception.h> +#include <antlr3encodings.h> +#include <antlr3string.h> +#include <antlr3input.h> +#include <antlr3cyclicdfa.h> +#include <antlr3intstream.h> +#include <antlr3filestream.h> +#include <antlr3collections.h> +#include <antlr3recognizersharedstate.h> +#include <antlr3baserecognizer.h> +#include <antlr3commontoken.h> +#include <antlr3tokenstream.h> +#include <antlr3bitset.h> +#include <antlr3lexer.h> +#include <antlr3parser.h> +#include <antlr3basetreeadaptor.h> +#include <antlr3commontreeadaptor.h> +#include <antlr3rewritestreams.h> +#include <antlr3debugeventlistener.h> + +#endif diff --git a/antlr-3.1.3/runtime/C/include/antlr3baserecognizer.h b/antlr-3.1.3/runtime/C/include/antlr3baserecognizer.h new file mode 100644 index 0000000..0a269d4 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3baserecognizer.h @@ -0,0 +1,371 @@ +/** \file + * Defines the basic structure to support recognizing by either a lexer, + * parser, or tree parser. + * \addtogroup ANTLR3_BASE_RECOGNIZER + * @{ + */ +#ifndef _ANTLR3_BASERECOGNIZER_H +#define _ANTLR3_BASERECOGNIZER_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> +#include <antlr3exception.h> +#include <antlr3input.h> +#include <antlr3tokenstream.h> +#include <antlr3commontoken.h> +#include <antlr3commontreenodestream.h> +#include <antlr3debugeventlistener.h> +#include <antlr3recognizersharedstate.h> + +/** Type indicator for a lexer recognizer + */ +#define ANTLR3_TYPE_LEXER 0x0001 + +/** Type indicator for a parser recognizer + */ +#define ANTLR3_TYPE_PARSER 0x0002 + +/** Type indicator for a tree parser recognizer + */ +#define ANTLR3_TYPE_TREE_PARSER 0x0004 + +#ifdef __cplusplus +extern "C" { +#endif + +/** \brief Base tracking context structure for all types of + * recognizers. + */ +typedef struct ANTLR3_BASE_RECOGNIZER_struct +{ + /// Whatever super structure is providing this interface needs a pointer to itself + /// so that this can be passed back to it whenever the api functions + /// are called back from here. + /// + void * super; + + /// Indicates the type of recognizer that we are an instance of. + /// The programmer may set this to anything of course, but the default + /// implementations of the interface only really understand the built in + /// types, so new error handlers etc would probably be required to as well. + /// + /// Valid types are: + /// + /// - #ANTLR3_TYPE_LEXER + /// - #ANTLR3_TYPE_PARSER + /// - #ANTLR3_TYPE_TREE_PARSER + /// + ANTLR3_UINT32 type; + + /// A pointer to the shared recognizer state, such that multiple + /// recognizers can use the same inputs streams and so on (in + /// the case of grammar inheritance for instance. + /// + pANTLR3_RECOGNIZER_SHARED_STATE state; + + /// If set to something other than NULL, then this structure is + /// points to an instance of the debugger interface. In general, the + /// debugger is only referenced internally in recovery/error operations + /// so that it does not cause overhead by having to check this pointer + /// in every function/method + /// + pANTLR3_DEBUG_EVENT_LISTENER debugger; + + + /// Pointer to a function that matches the current input symbol + /// against the supplied type. the function causes an error if a + /// match is not found and the default implementation will also + /// attempt to perform one token insertion or deletion if that is + /// possible with the input stream. You can override the default + /// implementation by installing a pointer to your own function + /// in this interface after the recognizer has initialized. This can + /// perform different recovery options or not recover at all and so on. + /// To ignore recovery altogether, see the comments in the default + /// implementation of this function in antlr3baserecognizer.c + /// + /// Note that errors are signalled by setting the error flag below + /// and creating a new exception structure and installing it in the + /// exception pointer below (you can chain these if you like and handle them + /// in some customized way). + /// + void * (*match) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, + ANTLR3_UINT32 ttype, pANTLR3_BITSET_LIST follow); + + /// Pointer to a function that matches the next token/char in the input stream + /// regardless of what it actually is. + /// + void (*matchAny) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); + + /// Pointer to a function that decides if the token ahead of the current one is the + /// one we were loking for, in which case the curernt one is very likely extraneous + /// and can be reported that way. + /// + ANTLR3_BOOLEAN + (*mismatchIsUnwantedToken) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, pANTLR3_INT_STREAM input, ANTLR3_UINT32 ttype); + + /// Pointer to a function that decides if the current token is one that can logically + /// follow the one we were looking for, in which case the one we were looking for is + /// probably missing from the input. + /// + ANTLR3_BOOLEAN + (*mismatchIsMissingToken) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, pANTLR3_INT_STREAM input, pANTLR3_BITSET_LIST follow); + + /** Pointer to a function that works out what to do when a token mismatch + * occurs, so that Tree parsers can behave differently to other recognizers. + */ + void (*mismatch) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, + ANTLR3_UINT32 ttype, pANTLR3_BITSET_LIST follow); + + /** Pointer to a function to call to report a recognition problem. You may override + * this function with your own function, but refer to the standard implementation + * in antlr3baserecognizer.c for guidance. The function should recognize whether + * error recovery is in force, so that it does not print out more than one error messages + * for the same error. From the java comments in BaseRecognizer.java: + * + * This method sets errorRecovery to indicate the parser is recovering + * not parsing. Once in recovery mode, no errors are generated. + * To get out of recovery mode, the parser must successfully match + * a token (after a resync). So it will go: + * + * 1. error occurs + * 2. enter recovery mode, report error + * 3. consume until token found in resynch set + * 4. try to resume parsing + * 5. next match() will reset errorRecovery mode + */ + void (*reportError) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); + + /** Pointer to a function that is called to display a recognition error message. You may + * override this function independently of (*reportError)() above as that function calls + * this one to do the actual exception printing. + */ + void (*displayRecognitionError) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, pANTLR3_UINT8 * tokenNames); + + /// Get number of recognition errors (lexer, parser, tree parser). Each + /// recognizer tracks its own number. So parser and lexer each have + /// separate count. Does not count the spurious errors found between + /// an error and next valid token match + /// + /// \see reportError() + /// + ANTLR3_UINT32 + (*getNumberOfSyntaxErrors) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); + + /** Pointer to a function that recovers from an error found in the input stream. + * Generally, this will be a #ANTLR3_EXCEPTION_NOVIABLE_ALT but it could also + * be from a mismatched token that the (*match)() could not recover from. + */ + void (*recover) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); + + /** Pointer to a function that is a hook to listen to token consumption during error recovery. + * This is mainly used by the debug parser to send events to the listener. + */ + void (*beginResync) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); + + /** Pointer to a function that is a hook to listen to token consumption during error recovery. + * This is mainly used by the debug parser to send events to the listener. + */ + void (*endResync) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); + + /** Pointer to a function that is a hook to listen to token consumption during error recovery. + * This is mainly used by the debug parser to send events to the listener. + */ + void (*beginBacktrack) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, ANTLR3_UINT32 level); + + /** Pointer to a function that is a hook to listen to token consumption during error recovery. + * This is mainly used by the debug parser to send events to the listener. + */ + void (*endBacktrack) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, ANTLR3_UINT32 level, ANTLR3_BOOLEAN successful); + + /** Pointer to a function to computer the error recovery set for the current rule. + * \see antlr3ComputeErrorRecoverySet() for details. + */ + pANTLR3_BITSET (*computeErrorRecoverySet) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); + + /** Pointer to a function that computes the context-sensitive FOLLOW set for the + * current rule. + * \see antlr3ComputeCSRuleFollow() for details. + */ + pANTLR3_BITSET (*computeCSRuleFollow) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); + + /** Pointer to a function to combine follow bitsets. + * \see antlr3CombineFollows() for details. + */ + pANTLR3_BITSET (*combineFollows) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, + ANTLR3_BOOLEAN exact); + + /** Pointer to a function that recovers from a mismatched token in the input stream. + * \see antlr3RecoverMismatch() for details. + */ + void * (*recoverFromMismatchedToken) + (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, + ANTLR3_UINT32 ttype, + pANTLR3_BITSET_LIST follow); + + /** Pointer to a function that recovers from a mismatched set in the token stream, in a similar manner + * to (*recoverFromMismatchedToken) + */ + void * (*recoverFromMismatchedSet) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, + pANTLR3_BITSET_LIST follow); + + /** Pointer to common routine to handle single token insertion for recovery functions. + */ + ANTLR3_BOOLEAN (*recoverFromMismatchedElement) + (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, + pANTLR3_BITSET_LIST follow); + + /** Pointer to function that consumes input until the next token matches + * the given token. + */ + void (*consumeUntil) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, + ANTLR3_UINT32 tokenType); + + /** Pointer to function that consumes input until the next token matches + * one in the given set. + */ + void (*consumeUntilSet) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, + pANTLR3_BITSET set); + + /** Pointer to function that returns an ANTLR3_LIST of the strings that identify + * the rules in the parser that got you to this point. Can be overridden by installing your + * own function set. + * + * \todo Document how to override invocation stack functions. + */ + pANTLR3_STACK (*getRuleInvocationStack) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); + pANTLR3_STACK (*getRuleInvocationStackNamed) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, + pANTLR3_UINT8 name); + + /** Pointer to a function that converts an ANLR3_LIST of tokens to an ANTLR3_LIST of + * string token names. As this is mostly used in string template processing it may not be useful + * in the C runtime. + */ + pANTLR3_HASH_TABLE (*toStrings) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, + pANTLR3_HASH_TABLE); + + /** Pointer to a function to return whether the rule has parsed input starting at the supplied + * start index before. If the rule has not parsed input starting from the supplied start index, + * then it will return ANTLR3_MEMO_RULE_UNKNOWN. If it has parsed from the suppled start point + * then it will return the point where it last stopped parsing after that start point. + */ + ANTLR3_MARKER (*getRuleMemoization) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, + ANTLR3_INTKEY ruleIndex, + ANTLR3_MARKER ruleParseStart); + + /** Pointer to function that determines whether the rule has parsed input at the current index + * in the input stream + */ + ANTLR3_BOOLEAN (*alreadyParsedRule) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, + ANTLR3_MARKER ruleIndex); + + /** Pointer to function that records whether the rule has parsed the input at a + * current position successfully or not. + */ + void (*memoize) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, + ANTLR3_MARKER ruleIndex, + ANTLR3_MARKER ruleParseStart); + + /// Pointer to a function that returns the current input symbol. + /// The is placed into any label for the associated token ref; e.g., x=ID. Token + /// and tree parsers need to return different objects. Rather than test + /// for input stream type or change the IntStream interface, I use + /// a simple method to ask the recognizer to tell me what the current + /// input symbol is. + /// + /// This is ignored for lexers and the lexer implementation of this + /// function should return NULL. + /// + void * (*getCurrentInputSymbol) ( struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, + pANTLR3_INT_STREAM istream); + + /// Conjure up a missing token during error recovery. + /// + /// The recognizer attempts to recover from single missing + /// symbols. But, actions might refer to that missing symbol. + /// For example, x=ID {f($x);}. The action clearly assumes + /// that there has been an identifier matched previously and that + /// $x points at that token. If that token is missing, but + /// the next token in the stream is what we want we assume that + /// this token is missing and we keep going. Because we + /// have to return some token to replace the missing token, + /// we have to conjure one up. This method gives the user control + /// over the tokens returned for missing tokens. Mostly, + /// you will want to create something special for identifier + /// tokens. For literals such as '{' and ',', the default + /// action in the parser or tree parser works. It simply creates + /// a CommonToken of the appropriate type. The text will be the token. + /// If you change what tokens must be created by the lexer, + /// override this method to create the appropriate tokens. + /// + void * (*getMissingSymbol) ( struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, + pANTLR3_INT_STREAM istream, + pANTLR3_EXCEPTION e, + ANTLR3_UINT32 expectedTokenType, + pANTLR3_BITSET_LIST follow); + + /** Pointer to a function that returns whether the supplied grammar function + * will parse the current input stream or not. This is the way that syntactic + * predicates are evaluated. Unlike java, C is perfectly happy to invoke code + * via a pointer to a function (hence that's what all the ANTLR3 C interfaces + * do. + */ + ANTLR3_BOOLEAN (*synpred) ( struct ANTLR3_BASE_RECOGNIZER_struct * recognizer, void * ctx, + void (*predicate)(void * ctx)); + + /** Pointer to a function that can construct a generic exception structure + * with such information as the input stream can provide. + */ + void (*exConstruct) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); + + /** Reset the recognizer + */ + void (*reset) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); + + /** Pointer to a function that knows how to free the resources of a base recognizer. + */ + void (*free) (struct ANTLR3_BASE_RECOGNIZER_struct * recognizer); + +} + ANTLR3_BASE_RECOGNIZER; + +#ifdef __cplusplus +} +#endif + +#include <antlr3lexer.h> +#include <antlr3parser.h> +#include <antlr3treeparser.h> + +/// @} +/// + +#endif /* _ANTLR3_BASERECOGNIZER_H */ + diff --git a/antlr-3.1.3/runtime/C/include/antlr3basetree.h b/antlr-3.1.3/runtime/C/include/antlr3basetree.h new file mode 100644 index 0000000..023c4c2 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3basetree.h @@ -0,0 +1,143 @@ +/// \file +/// Definition of the ANTLR3 base tree. +/// + +#ifndef _ANTLR3_BASE_TREE_H +#define _ANTLR3_BASE_TREE_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> +#include <antlr3collections.h> +#include <antlr3string.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/// A generic tree implementation with no payload. You must subclass to +/// actually have any user data. ANTLR v3 uses a list of children approach +/// instead of the child-sibling approach in v2. A flat tree (a list) is +/// an empty node whose children represent the list. An empty (as in it does not +/// have payload itself), but non-null node is called "nil". +/// +typedef struct ANTLR3_BASE_TREE_struct +{ + + /// Implementers of this interface sometimes require a pointer to their selves. + /// + void * super; + + /// Generic void pointer allows the grammar programmer to attach any structure they + /// like to a tree node, in many cases saving the need to create their own tree + /// and tree adaptors. ANTLR does not use this pointer, but will copy it for you and so on. + /// + void * u; + + /// The list of all the children that belong to this node. They are not part of the node + /// as they belong to the common tree node that implements this. + /// + pANTLR3_VECTOR children; + + /// This is used to store the current child index position while descending + /// and ascending trees as the tree walk progresses. + /// + ANTLR3_MARKER savedIndex; + + /// A string factory to produce strings for toString etc + /// + pANTLR3_STRING_FACTORY strFactory; + + /// A pointer to a function that returns the common token pointer + /// for the payload in the supplied tree. + /// + pANTLR3_COMMON_TOKEN (*getToken) (struct ANTLR3_BASE_TREE_struct * tree); + + void (*addChild) (struct ANTLR3_BASE_TREE_struct * tree, void * child); + + void (*addChildren) (struct ANTLR3_BASE_TREE_struct * tree, pANTLR3_LIST kids); + + void (*createChildrenList) (struct ANTLR3_BASE_TREE_struct * tree); + + void * (*deleteChild) (struct ANTLR3_BASE_TREE_struct * tree, ANTLR3_UINT32 i); + + void (*replaceChildren) (struct ANTLR3_BASE_TREE_struct * parent, ANTLR3_INT32 startChildIndex, ANTLR3_INT32 stopChildIndex, struct ANTLR3_BASE_TREE_struct * t); + + void * (*dupNode) (struct ANTLR3_BASE_TREE_struct * dupNode); + + void * (*dupTree) (struct ANTLR3_BASE_TREE_struct * tree); + + ANTLR3_UINT32 (*getCharPositionInLine) (struct ANTLR3_BASE_TREE_struct * tree); + + void * (*getChild) (struct ANTLR3_BASE_TREE_struct * tree, ANTLR3_UINT32 i); + + void (*setChildIndex) (struct ANTLR3_BASE_TREE_struct * tree, ANTLR3_INT32 ); + + ANTLR3_INT32 (*getChildIndex) (struct ANTLR3_BASE_TREE_struct * tree ); + + ANTLR3_UINT32 (*getChildCount) (struct ANTLR3_BASE_TREE_struct * tree); + + struct ANTLR3_BASE_TREE_struct * (*getParent) (struct ANTLR3_BASE_TREE_struct * tree); + + void (*setParent) (struct ANTLR3_BASE_TREE_struct * tree, struct ANTLR3_BASE_TREE_struct * parent); + + ANTLR3_UINT32 (*getType) (struct ANTLR3_BASE_TREE_struct * tree); + + void * (*getFirstChildWithType) (struct ANTLR3_BASE_TREE_struct * tree, ANTLR3_UINT32 type); + + ANTLR3_UINT32 (*getLine) (struct ANTLR3_BASE_TREE_struct * tree); + + pANTLR3_STRING (*getText) (struct ANTLR3_BASE_TREE_struct * tree); + + ANTLR3_BOOLEAN (*isNilNode) (struct ANTLR3_BASE_TREE_struct * tree); + + void (*setChild) (struct ANTLR3_BASE_TREE_struct * tree, ANTLR3_UINT32 i, void * child); + + pANTLR3_STRING (*toStringTree) (struct ANTLR3_BASE_TREE_struct * tree); + + pANTLR3_STRING (*toString) (struct ANTLR3_BASE_TREE_struct * tree); + + void (*freshenPACIndexesAll) (struct ANTLR3_BASE_TREE_struct * tree); + + void (*freshenPACIndexes) (struct ANTLR3_BASE_TREE_struct * tree, ANTLR3_UINT32 offset); + + void (*reuse) (struct ANTLR3_BASE_TREE_struct * tree); + + void (*free) (struct ANTLR3_BASE_TREE_struct * tree); + +} + ANTLR3_BASE_TREE; + +#ifdef __cplusplus +} +#endif + + +#endif diff --git a/antlr-3.1.3/runtime/C/include/antlr3basetreeadaptor.h b/antlr-3.1.3/runtime/C/include/antlr3basetreeadaptor.h new file mode 100644 index 0000000..cb303c2 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3basetreeadaptor.h @@ -0,0 +1,151 @@ +/** \file + * Definition of the ANTLR3 base tree adaptor. + */ + +#ifndef _ANTLR3_BASE_TREE_ADAPTOR_H +#define _ANTLR3_BASE_TREE_ADAPTOR_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> +#include <antlr3collections.h> +#include <antlr3string.h> +#include <antlr3basetree.h> +#include <antlr3commontoken.h> +#include <antlr3debugeventlistener.h> + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANTLR3_BASE_TREE_ADAPTOR_struct +{ + /** Pointer to any enclosing structure/interface that + * contains this structure. + */ + void * super; + + /** We need a string factory for creating imaginary tokens, we take this + * from the stream we are supplied to walk. + */ + pANTLR3_STRING_FACTORY strFactory; + + /* And we also need a token factory for creating imaginary tokens + * this is also taken from the input source. + */ + pANTLR3_TOKEN_FACTORY tokenFactory; + + /// If set to something other than NULL, then this structure is + /// points to an instance of the debugger interface. In general, the + /// debugger is only referenced internally in recovery/error operations + /// so that it does not cause overhead by having to check this pointer + /// in every function/method + /// + pANTLR3_DEBUG_EVENT_LISTENER debugger; + + void * (*nilNode) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor); + + + void * (*dupTree) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * tree); + void * (*dupTreeTT) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * t, void * tree); + + void (*addChild) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * t, void * child); + void (*addChildToken) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * t, pANTLR3_COMMON_TOKEN child); + void (*setParent) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * child, void * parent); + + void * (*errorNode) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, pANTLR3_TOKEN_STREAM tnstream, pANTLR3_COMMON_TOKEN startToken, pANTLR3_COMMON_TOKEN stopToken, pANTLR3_EXCEPTION e); + ANTLR3_BOOLEAN (*isNilNode) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * t); + + void * (*becomeRoot) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * newRoot, void * oldRoot); + + void * (*rulePostProcessing) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * root); + + void * (*becomeRootToken) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * newRoot, void * oldRoot); + + void * (*create) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, pANTLR3_COMMON_TOKEN payload); + void * (*createTypeToken) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, ANTLR3_UINT32 tokenType, pANTLR3_COMMON_TOKEN fromToken); + void * (*createTypeTokenText) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, ANTLR3_UINT32 tokenType, pANTLR3_COMMON_TOKEN fromToken, pANTLR3_UINT8 text); + void * (*createTypeText) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, ANTLR3_UINT32 tokenType, pANTLR3_UINT8 text); + + void * (*dupNode) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * treeNode); + + ANTLR3_UINT32 (*getType) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * t); + + void (*setType) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * t, ANTLR3_UINT32 type); + + pANTLR3_STRING (*getText) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * t); + + void (*setText) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, pANTLR3_STRING t); + void (*setText8) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, pANTLR3_UINT8 t); + + void * (*getChild) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * t, ANTLR3_UINT32 i); + void (*setChild) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * t, ANTLR3_UINT32 i, void * child); + void (*deleteChild) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * t, ANTLR3_UINT32 i); + void (*setChildIndex) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * t, ANTLR3_UINT32 i); + ANTLR3_INT32 (*getChildIndex) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * t); + + ANTLR3_UINT32 (*getChildCount) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void *); + + ANTLR3_UINT32 (*getUniqueID) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void *); + + pANTLR3_COMMON_TOKEN (*createToken) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, ANTLR3_UINT32 tokenType, pANTLR3_UINT8 text); + pANTLR3_COMMON_TOKEN (*createTokenFromToken) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, pANTLR3_COMMON_TOKEN fromToken); + pANTLR3_COMMON_TOKEN (*getToken) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * t); + + void (*setTokenBoundaries) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * t, pANTLR3_COMMON_TOKEN startToken, pANTLR3_COMMON_TOKEN stopToken); + + ANTLR3_MARKER (*getTokenStartIndex) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * t); + + ANTLR3_MARKER (*getTokenStopIndex) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * t); + + void (*setDebugEventListener)(struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, pANTLR3_DEBUG_EVENT_LISTENER debugger); + + /// Produce a DOT (see graphviz freeware suite) from a base tree + /// + pANTLR3_STRING (*makeDot) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * theTree); + + /// Replace from start to stop child index of parent with t, which might + /// be a list. Number of children may be different + /// after this call. + /// + /// If parent is null, don't do anything; must be at root of overall tree. + /// Can't replace whatever points to the parent externally. Do nothing. + /// + void (*replaceChildren) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor, void * parent, ANTLR3_INT32 startChildIndex, ANTLR3_INT32 stopChildIndex, void * t); + + void (*free) (struct ANTLR3_BASE_TREE_ADAPTOR_struct * adaptor); + +} + ANTLR3_TREE_ADAPTOR, *pANTLR3_TREE_ADAPTOR; +#ifdef __cplusplus +} +#endif + +#endif diff --git a/antlr-3.1.3/runtime/C/include/antlr3bitset.h b/antlr-3.1.3/runtime/C/include/antlr3bitset.h new file mode 100644 index 0000000..7d816ab --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3bitset.h @@ -0,0 +1,119 @@ +/** + * \file + * Defines the basic structures of an ANTLR3 bitset. this is a C version of the + * cut down Bitset class provided with the java version of antlr 3. + * + * + */ +#ifndef _ANTLR3_BITSET_H +#define _ANTLR3_BITSET_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> +#include <antlr3collections.h> + +/** How many bits in the elements + */ +#define ANTLR3_BITSET_BITS 64 + +/** How many bits in a nible of bits + */ +#define ANTLR3_BITSET_NIBBLE 4 + +/** log2 of ANTLR3_BITSET_BITS 2^ANTLR3_BITSET_LOG_BITS = ANTLR3_BITSET_BITS + */ +#define ANTLR3_BITSET_LOG_BITS 6 + +/** We will often need to do a mod operator (i mod nbits). + * For powers of two, this mod operation is the + * same as: + * - (i & (nbits-1)). + * + * Since mod is relatively slow, we use an easily + * precomputed mod mask to do the mod instead. + */ +#define ANTLR3_BITSET_MOD_MASK ANTLR3_BITSET_BITS - 1 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANTLR3_BITSET_LIST_struct +{ + /// Pointer to the allocated array of bits for this bit set, which + /// is an array of 64 bit elements (of the architecture). If we find a + /// machine/C compiler that does not know anything about 64 bit values + /// then it should be easy enough to produce a 32 bit (or less) version + /// of the bitset code. Note that the pointer here may be static if laid down + /// by the code generation, and it must be copied if it is to be manipulated + /// to perform followset calculations. + /// + pANTLR3_BITWORD bits; + + /// Length of the current bit set in ANTLR3_UINT64 units. + /// + ANTLR3_UINT32 length; +} + ANTLR3_BITSET_LIST; + +typedef struct ANTLR3_BITSET_struct +{ + /// The actual bits themselves + /// + ANTLR3_BITSET_LIST blist; + + pANTLR3_BITSET (*clone) (struct ANTLR3_BITSET_struct * inSet); + pANTLR3_BITSET (*bor) (struct ANTLR3_BITSET_struct * bitset1, struct ANTLR3_BITSET_struct * bitset2); + void (*borInPlace) (struct ANTLR3_BITSET_struct * bitset, struct ANTLR3_BITSET_struct * bitset2); + ANTLR3_UINT32 (*size) (struct ANTLR3_BITSET_struct * bitset); + void (*add) (struct ANTLR3_BITSET_struct * bitset, ANTLR3_INT32 bit); + void (*grow) (struct ANTLR3_BITSET_struct * bitset, ANTLR3_INT32 newSize); + ANTLR3_BOOLEAN (*equals) (struct ANTLR3_BITSET_struct * bitset1, struct ANTLR3_BITSET_struct * bitset2); + ANTLR3_BOOLEAN (*isMember) (struct ANTLR3_BITSET_struct * bitset, ANTLR3_UINT32 bit); + ANTLR3_UINT32 (*numBits) (struct ANTLR3_BITSET_struct * bitset); + void (*remove) (struct ANTLR3_BITSET_struct * bitset, ANTLR3_UINT32 bit); + ANTLR3_BOOLEAN (*isNilNode) (struct ANTLR3_BITSET_struct * bitset); + pANTLR3_INT32 (*toIntList) (struct ANTLR3_BITSET_struct * bitset); + + void (*free) (struct ANTLR3_BITSET_struct * bitset); + + +} + ANTLR3_BITSET; + +#ifdef __cplusplus +} +#endif + + + +#endif + diff --git a/antlr-3.1.3/runtime/C/include/antlr3collections.h b/antlr-3.1.3/runtime/C/include/antlr3collections.h new file mode 100644 index 0000000..060b1d0 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3collections.h @@ -0,0 +1,384 @@ +#ifndef ANTLR3COLLECTIONS_H +#define ANTLR3COLLECTIONS_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> + + +#define ANTLR3_HASH_TYPE_INT 0 /**< Indicates the hashed file has integer keys */ +#define ANTLR3_HASH_TYPE_STR 1 /**< Indicates the hashed file has numeric keys */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANTLR3_HASH_KEY_struct +{ + ANTLR3_UINT8 type; /**< One of ##ANTLR3_HASH_TYPE_INT or ##ANTLR3_HASH_TYPE_STR */ + + union + { + pANTLR3_UINT8 sKey; /**< Used if type is ANTLR3_HASH_TYPE_STR */ + ANTLR3_INTKEY iKey; /**< used if type is ANTLR3_HASH_TYPE_INT */ + } + key; + +} ANTLR3_HASH_KEY, *pANTLR3_HASH_KEY; + +/** Internal structure representing an element in a hash bucket. + * Stores the original key so that duplicate keys can be rejected + * if necessary, and contains function can be supported. If the hash key + * could be unique I would have invented the perfect compression algorithm ;-) + */ +typedef struct ANTLR3_HASH_ENTRY_struct +{ + /** Key that created this particular entry + */ + ANTLR3_HASH_KEY keybase; + + /** Pointer to the data for this particular entry + */ + void * data; + + /** Pointer to routine that knows how to release the memory + * structure pointed at by data. If this is NULL then we assume + * that the data pointer does not need to be freed when the entry + * is deleted from the table. + */ + void (ANTLR3_CDECL *free)(void * data); + + /** Pointer to the next entry in this bucket if there + * is one. Sometimes different keys will hash to the same bucket (especially + * if the number of buckets is small). We could implement dual hashing algorithms + * to minimize this, but that seems over the top for what this is needed for. + */ + struct ANTLR3_HASH_ENTRY_struct * nextEntry; +} + ANTLR3_HASH_ENTRY; + +/** Internal structure of a hash table bucket, which tracks + * all keys that hash to the same bucket. + */ +typedef struct ANTLR3_HASH_BUCKET_struct +{ + /** Pointer to the first entry in the bucket (if any, it + * may be NULL). Duplicate entries are chained from + * here. + */ + pANTLR3_HASH_ENTRY entries; + +} + ANTLR3_HASH_BUCKET; + +/** Structure that tracks a hash table + */ +typedef struct ANTLR3_HASH_TABLE_struct +{ + /** Indicates whether the table allows duplicate keys + */ + int allowDups; + + /** Number of buckets available in this table + */ + ANTLR3_UINT32 modulo; + + /** Points to the memory where the array of buckets + * starts. + */ + pANTLR3_HASH_BUCKET buckets; + + /** How many elements currently exist in the table. + */ + ANTLR3_UINT32 count; + + /** Whether the hash table should strdup the keys it is given or not. + */ + ANTLR3_BOOLEAN doStrdup; + + /** Pointer to function to completely delete this table + */ + void (*free) (struct ANTLR3_HASH_TABLE_struct * table); + + /* String keyed hashtable functions */ + void (*del) (struct ANTLR3_HASH_TABLE_struct * table, void * key); + pANTLR3_HASH_ENTRY (*remove) (struct ANTLR3_HASH_TABLE_struct * table, void * key); + void * (*get) (struct ANTLR3_HASH_TABLE_struct * table, void * key); + ANTLR3_INT32 (*put) (struct ANTLR3_HASH_TABLE_struct * table, void * key, void * element, void (ANTLR3_CDECL *freeptr)(void *)); + + /* Integer based hash functions */ + void (*delI) (struct ANTLR3_HASH_TABLE_struct * table, ANTLR3_INTKEY key); + pANTLR3_HASH_ENTRY (*removeI) (struct ANTLR3_HASH_TABLE_struct * table, ANTLR3_INTKEY key); + void * (*getI) (struct ANTLR3_HASH_TABLE_struct * table, ANTLR3_INTKEY key); + ANTLR3_INT32 (*putI) (struct ANTLR3_HASH_TABLE_struct * table, ANTLR3_INTKEY key, void * element, void (ANTLR3_CDECL *freeptr)(void *)); + + ANTLR3_UINT32 (*size) (struct ANTLR3_HASH_TABLE_struct * table); +} + ANTLR3_HASH_TABLE; + + +/** Internal structure representing an enumeration of a table. + * This is returned by antlr3Enumeration() + * Allows the programmer to traverse the table in hash order without + * knowing what is in the actual table. + * + * Note that it is up to the caller to ensure that the table + * structure does not change in the hash bucket that is currently being + * enumerated as this structure just tracks the next pointers in the + * bucket series. + */ +typedef struct ANTLR3_HASH_ENUM_struct +{ + /* Pointer to the table we are enumerating + */ + pANTLR3_HASH_TABLE table; + + /* Bucket we are currently enumerating (if NULL then we are done) + */ + ANTLR3_UINT32 bucket; + + /* Next entry to return, if NULL, then move to next bucket if any + */ + pANTLR3_HASH_ENTRY entry; + + /* Interface + */ + int (*next) (struct ANTLR3_HASH_ENUM_struct * en, pANTLR3_HASH_KEY *key, void ** data); + void (*free) (struct ANTLR3_HASH_ENUM_struct * table); +} + ANTLR3_HASH_ENUM; + +/** Structure that represents a LIST collection + */ +typedef struct ANTLR3_LIST_struct +{ + /** Hash table that is storing the list elements + */ + pANTLR3_HASH_TABLE table; + + void (*free) (struct ANTLR3_LIST_struct * list); + void (*del) (struct ANTLR3_LIST_struct * list, ANTLR3_INTKEY key); + void * (*get) (struct ANTLR3_LIST_struct * list, ANTLR3_INTKEY key); + void * (*remove) (struct ANTLR3_LIST_struct * list, ANTLR3_INTKEY key); + ANTLR3_INT32 (*add) (struct ANTLR3_LIST_struct * list, void * element, void (ANTLR3_CDECL *freeptr)(void *)); + ANTLR3_INT32 (*put) (struct ANTLR3_LIST_struct * list, ANTLR3_INTKEY key, void * element, void (ANTLR3_CDECL *freeptr)(void *)); + ANTLR3_UINT32 (*size) (struct ANTLR3_LIST_struct * list); + +} + ANTLR3_LIST; + +/** Structure that represents a Stack collection + */ +typedef struct ANTLR3_STACK_struct +{ + /** List that supports the stack structure + */ + pANTLR3_VECTOR vector; + + /** Used for quick access to the top of the stack + */ + void * top; + void (*free) (struct ANTLR3_STACK_struct * stack); + void * (*pop) (struct ANTLR3_STACK_struct * stack); + void * (*get) (struct ANTLR3_STACK_struct * stack, ANTLR3_INTKEY key); + ANTLR3_BOOLEAN (*push) (struct ANTLR3_STACK_struct * stack, void * element, void (ANTLR3_CDECL *freeptr)(void *)); + ANTLR3_UINT32 (*size) (struct ANTLR3_STACK_struct * stack); + void * (*peek) (struct ANTLR3_STACK_struct * stack); + +} + ANTLR3_STACK; + +/* Structure that represents a vector element + */ +typedef struct ANTLR3_VECTOR_ELEMENT_struct +{ + void * element; + void (ANTLR3_CDECL *freeptr)(void *); +} + ANTLR3_VECTOR_ELEMENT, *pANTLR3_VECTOR_ELEMENT; + +#define ANTLR3_VECTOR_INTERNAL_SIZE 16 +/* Structure that represents a vector collection. A vector is a simple list + * that contains a pointer to the element and a pointer to a function that + * that can free the element if it is removed. It auto resizes but does not + * use hash techniques as it is referenced by a simple numeric index. It is not a + * sparse list, so if any element is deleted, then the ones following are moved + * down in memory and the count is adjusted. + */ +typedef struct ANTLR3_VECTOR_struct +{ + /** Array of pointers to vector elements + */ + pANTLR3_VECTOR_ELEMENT elements; + + /** Number of entries currently in the list; + */ + ANTLR3_UINT32 count; + + /** Many times, a vector holds just a few nodes in an AST and it + * is too much overhead to malloc the space for elements so + * at the expense of a few bytes of memory, we hold the first + * few elements internally. It means we must copy them when + * we grow beyond this initial size, but that is less overhead than + * the malloc/free callas we would otherwise require. + */ + ANTLR3_VECTOR_ELEMENT internal[ANTLR3_VECTOR_INTERNAL_SIZE]; + + /** Indicates if the structure was made by a factory, in which + * case only the factory can free the memory for the actual vector, + * though the vector free function is called and will recurse through its + * entries calling any free pointers for each entry. + */ + ANTLR3_BOOLEAN factoryMade; + + /** Total number of entries in elements at any point in time + */ + ANTLR3_UINT32 elementsSize; + + void (ANTLR3_CDECL *free) (struct ANTLR3_VECTOR_struct * vector); + void (*del) (struct ANTLR3_VECTOR_struct * vector, ANTLR3_UINT32 entry); + void * (*get) (struct ANTLR3_VECTOR_struct * vector, ANTLR3_UINT32 entry); + void * (*remove) (struct ANTLR3_VECTOR_struct * vector, ANTLR3_UINT32 entry); + void (*clear) (struct ANTLR3_VECTOR_struct * vector); + ANTLR3_UINT32 (*add) (struct ANTLR3_VECTOR_struct * vector, void * element, void (ANTLR3_CDECL *freeptr)(void *)); + ANTLR3_UINT32 (*set) (struct ANTLR3_VECTOR_struct * vector, ANTLR3_UINT32 entry, void * element, void (ANTLR3_CDECL *freeptr)(void *), ANTLR3_BOOLEAN freeExisting); + ANTLR3_UINT32 (*size) (struct ANTLR3_VECTOR_struct * vector); +} + ANTLR3_VECTOR; + +/** Default vector pool size if otherwise unspecified + */ +#define ANTLR3_FACTORY_VPOOL_SIZE 256 + +/** Structure that tracks vectors in a vector and auto deletes the vectors + * in the vector factory when closed. + */ +typedef struct ANTLR3_VECTOR_FACTORY_struct +{ + + /** List of all vector pools allocated so far + */ + pANTLR3_VECTOR *pools; + + /** Count of the vector pools allocated so far (current active pool) + */ + ANTLR3_INT32 thisPool; + + /** The next vector available in the pool + */ + ANTLR3_UINT32 nextVector; + + /** Trick to quickly initialize a new vector via memcpy and not a function call + */ + ANTLR3_VECTOR unTruc; + + /** Function to close the vector factory + */ + void (*close) (struct ANTLR3_VECTOR_FACTORY_struct * factory); + + /** Function to supply a new vector + */ + pANTLR3_VECTOR (*newVector) (struct ANTLR3_VECTOR_FACTORY_struct * factory); + +} +ANTLR3_VECTOR_FACTORY; + + +/* -------------- TRIE Interfaces ---------------- */ + + +/** Structure that holds the payload entry in an ANTLR3_INT_TRIE or ANTLR3_STRING_TRIE + */ +typedef struct ANTLR3_TRIE_ENTRY_struct +{ + ANTLR3_UINT32 type; + void (ANTLR3_CDECL *freeptr)(void *); + union + { + ANTLR3_INTKEY intVal; + void * ptr; + } data; + + struct ANTLR3_TRIE_ENTRY_struct * next; /* Allows duplicate entries for same key in insertion order */ +} +ANTLR3_TRIE_ENTRY, * pANTLR3_TRIE_ENTRY; + + +/** Structure that defines an element/node in an ANTLR3_INT_TRIE + */ +typedef struct ANTLR3_INT_TRIE_NODE_struct +{ + ANTLR3_UINT32 bitNum; /**< This is the left/right bit index for traversal along the nodes */ + ANTLR3_INTKEY key; /**< This is the actual key that the entry represents if it is a terminal node */ + pANTLR3_TRIE_ENTRY buckets; /**< This is the data bucket(s) that the key indexes, which may be NULL */ + struct ANTLR3_INT_TRIE_NODE_struct * leftN; /**< Pointer to the left node from here when sKey & bitNum = 0 */ + struct ANTLR3_INT_TRIE_NODE_struct * rightN; /**< Pointer to the right node from here when sKey & bitNum, = 1 */ +} + ANTLR3_INT_TRIE_NODE, * pANTLR3_INT_TRIE_NODE; + +/** Structure that defines an ANTLR3_INT_TRIE. For this particular implementation, + * as you might expect, the key is turned into a "string" by looking at bit(key, depth) + * of the integer key. Using 64 bit keys gives us a depth limit of 64 (or bit 0..63) + * and potentially a huge trie. This is the algorithm for a Patricia Trie. + * Note also that this trie [can] accept multiple entries for the same key and is + * therefore a kind of elastic bucket patricia trie. + * + * If you find this code useful, please feel free to 'steal' it for any purpose + * as covered by the BSD license under which ANTLR is issued. You can cut the code + * but as the ANTLR library is only about 50K (Windows Vista), you might find it + * easier to just link the library. Please keep all comments and licenses and so on + * in any version of this you create of course. + * + * Jim Idle. + * + */ +typedef struct ANTLR3_INT_TRIE_struct +{ + pANTLR3_INT_TRIE_NODE root; /* Root node of this integer trie */ + pANTLR3_INT_TRIE_NODE current; /* Used to traverse the TRIE with the next() method */ + ANTLR3_UINT32 count; /* Current entry count */ + ANTLR3_BOOLEAN allowDups; /* Whether this trie accepts duplicate keys */ + + + pANTLR3_TRIE_ENTRY (*get) (struct ANTLR3_INT_TRIE_struct * trie, ANTLR3_INTKEY key); + ANTLR3_BOOLEAN (*del) (struct ANTLR3_INT_TRIE_struct * trie, ANTLR3_INTKEY key); + ANTLR3_BOOLEAN (*add) (struct ANTLR3_INT_TRIE_struct * trie, ANTLR3_INTKEY key, ANTLR3_UINT32 type, ANTLR3_INTKEY intVal, void * data, void (ANTLR3_CDECL *freeptr)(void *)); + void (*free) (struct ANTLR3_INT_TRIE_struct * trie); + +} + ANTLR3_INT_TRIE; + +#ifdef __cplusplus +} +#endif + +#endif + + diff --git a/antlr-3.1.3/runtime/C/include/antlr3commontoken.h b/antlr-3.1.3/runtime/C/include/antlr3commontoken.h new file mode 100644 index 0000000..ed1f7a0 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3commontoken.h @@ -0,0 +1,357 @@ +/** \file + * \brief Defines the interface for a common token. + * + * All token streams should provide their tokens using an instance + * of this common token. A custom pointer is provided, wher you may attach + * a further structure to enhance the common token if you feel the need + * to do so. The C runtime will assume that a token provides implementations + * of the interface functions, but all of them may be rplaced by your own + * implementation if you require it. + */ +#ifndef _ANTLR3_COMMON_TOKEN_H +#define _ANTLR3_COMMON_TOKEN_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> + +/** How many tokens to allocate at once in the token factory + */ +#define ANTLR3_FACTORY_POOL_SIZE 1024 + +/* Base token types, which all lexer/parser tokens come after in sequence. + */ + +/** Indicator of an invalid token + */ +#define ANTLR3_TOKEN_INVALID 0 + +#define ANTLR3_EOR_TOKEN_TYPE 1 + +/** Imaginary token type to cause a traversal of child nodes in a tree parser + */ +#define ANTLR3_TOKEN_DOWN 2 + +/** Imaginary token type to signal the end of a stream of child nodes. + */ +#define ANTLR3_TOKEN_UP 3 + +/** First token that can be used by users/generated code + */ +#define ANTLR3_MIN_TOKEN_TYPE ANTLR3_UP + 1 + +/** End of file token + */ +#define ANTLR3_TOKEN_EOF (ANTLR3_CHARSTREAM_EOF & 0xFFFFFFFF) + +/** Default channel for a token + */ +#define ANTLR3_TOKEN_DEFAULT_CHANNEL 0 + +/** Reserved channel number for a HIDDEN token - a token that + * is hidden from the parser. + */ +#define HIDDEN 99 + +#ifdef __cplusplus +extern "C" { +#endif + +// Indicates whether this token is carrying: +// +// State | Meaning +// ------+-------------------------------------- +// 0 | Nothing (neither rewrite text, nor setText) +// 1 | char * to user supplied rewrite text +// 2 | pANTLR3_STRING because of setText or similar action +// +#define ANTLR3_TEXT_NONE 0 +#define ANTLR3_TEXT_CHARP 1 +#define ANTLR3_TEXT_STRING 2 + +/** The definition of an ANTLR3 common token structure, which all implementations + * of a token stream should provide, installing any further structures in the + * custom pointer element of this structure. + * + * \remark + * Token streams are in essence provided by lexers or other programs that serve + * as lexers. + */ +typedef struct ANTLR3_COMMON_TOKEN_struct +{ + /** The actual type of this token + */ + ANTLR3_UINT32 type; + + /** Indicates that a token was produced from the token factory and therefore + * the the freeToken() method should not do anything itself because + * token factory is responsible for deleting it. + */ + ANTLR3_BOOLEAN factoryMade; + + /// A string factory that we can use if we ever need the text of a token + /// and need to manufacture a pANTLR3_STRING + /// + pANTLR3_STRING_FACTORY strFactory; + + /** The line number in the input stream where this token was derived from + */ + ANTLR3_UINT32 line; + + /** The offset into the input stream that the line in which this + * token resides starts. + */ + void * lineStart; + + /** The character position in the line that this token was derived from + */ + ANTLR3_INT32 charPosition; + + /** The virtual channel that this token exists in. + */ + ANTLR3_UINT32 channel; + + /** Pointer to the input stream that this token originated in. + */ + pANTLR3_INPUT_STREAM input; + + /** What the index of this token is, 0, 1, .., n-2, n-1 tokens + */ + ANTLR3_MARKER index; + + /** The character offset in the input stream where the text for this token + * starts. + */ + ANTLR3_MARKER start; + + /** The character offset in the input stream where the text for this token + * stops. + */ + ANTLR3_MARKER stop; + + /// Indicates whether this token is carrying: + /// + /// State | Meaning + /// ------+-------------------------------------- + /// 0 | Nothing (neither rewrite text, nor setText) + /// 1 | char * to user supplied rewrite text + /// 2 | pANTLR3_STRING because of setText or similar action + /// + /// Affects the union structure tokText below + /// (uses 32 bit so alignment is always good) + /// + ANTLR3_UINT32 textState; + + union + { + /// Pointer that is used when the token just has a pointer to + /// a char *, such as when a rewrite of an imaginary token supplies + /// a string in the grammar. No sense in constructing a pANTLR3_STRING just + /// for that, as mostly the text will not be accessed - if it is, then + /// we will build a pANTLR3_STRING for it a that point. + /// + pANTLR3_UCHAR chars; + + /// Some token types actually do carry around their associated text, hence + /// (*getText)() will return this pointer if it is not NULL + /// + pANTLR3_STRING text; + } + tokText; + + /** Because it is a bit more of a hassle to override an ANTLR3_COMMON_TOKEN + * as the standard structure for a token, a number of user programmable + * elements are allowed in a token. This is one of them. + */ + ANTLR3_UINT32 user1; + + /** Because it is a bit more of a hassle to override an ANTLR3_COMMON_TOKEN + * as the standard structure for a token, a number of user programmable + * elements are allowed in a token. This is one of them. + */ + ANTLR3_UINT32 user2; + + /** Because it is a bit more of a hassle to override an ANTLR3_COMMON_TOKEN + * as the standard structure for a token, a number of user programmable + * elements are allowed in a token. This is one of them. + */ + ANTLR3_UINT32 user3; + + /** Pointer to a custom element that the ANTLR3 programmer may define and install + */ + void * custom; + + /** Pointer to a function that knows how to free the custom structure when the + * token is destroyed. + */ + void (*freeCustom)(void * custom); + + /* ============================== + * API + */ + + /** Pointer to function that returns the text pointer of a token, use + * toString() if you want a pANTLR3_STRING version of the token. + */ + pANTLR3_STRING (*getText)(struct ANTLR3_COMMON_TOKEN_struct * token); + + /** Pointer to a function that 'might' be able to set the text associated + * with a token. Imaginary tokens such as an ANTLR3_CLASSIC_TOKEN may actually + * do this, however many tokens such as ANTLR3_COMMON_TOKEN do not actaully have + * strings associated with them but just point into the current input stream. These + * tokens will implement this function with a function that errors out (probably + * drastically. + */ + void (*setText)(struct ANTLR3_COMMON_TOKEN_struct * token, pANTLR3_STRING text); + + /** Pointer to a function that 'might' be able to set the text associated + * with a token. Imaginary tokens such as an ANTLR3_CLASSIC_TOKEN may actually + * do this, however many tokens such as ANTLR3_COMMON_TOKEN do not actully have + * strings associated with them but just point into the current input stream. These + * tokens will implement this function with a function that errors out (probably + * drastically. + */ + void (*setText8)(struct ANTLR3_COMMON_TOKEN_struct * token, pANTLR3_UINT8 text); + + /** Pointer to a function that returns the token type of this token + */ + ANTLR3_UINT32 (*getType)(struct ANTLR3_COMMON_TOKEN_struct * token); + + /** Pointer to a function that sets the type of this token + */ + void (*setType)(struct ANTLR3_COMMON_TOKEN_struct * token, ANTLR3_UINT32 ttype); + + /** Pointer to a function that gets the 'line' number where this token resides + */ + ANTLR3_UINT32 (*getLine)(struct ANTLR3_COMMON_TOKEN_struct * token); + + /** Pointer to a function that sets the 'line' number where this token reside + */ + void (*setLine)(struct ANTLR3_COMMON_TOKEN_struct * token, ANTLR3_UINT32 line); + + /** Pointer to a function that gets the offset in the line where this token exists + */ + ANTLR3_INT32 (*getCharPositionInLine) (struct ANTLR3_COMMON_TOKEN_struct * token); + + /** Pointer to a function that sets the offset in the line where this token exists + */ + void (*setCharPositionInLine) (struct ANTLR3_COMMON_TOKEN_struct * token, ANTLR3_INT32 pos); + + /** Pointer to a function that gets the channel that this token was placed in (parsers + * can 'tune' to these channels. + */ + ANTLR3_UINT32 (*getChannel) (struct ANTLR3_COMMON_TOKEN_struct * token); + + /** Pointer to a function that sets the channel that this token should belong to + */ + void (*setChannel) (struct ANTLR3_COMMON_TOKEN_struct * token, ANTLR3_UINT32 channel); + + /** Pointer to a function that returns an index 0...n-1 of the token in the token + * input stream. + */ + ANTLR3_MARKER (*getTokenIndex) (struct ANTLR3_COMMON_TOKEN_struct * token); + + /** Pointer to a function that can set the token index of this token in the token + * input stream. + */ + void (*setTokenIndex) (struct ANTLR3_COMMON_TOKEN_struct * token, ANTLR3_MARKER); + + /** Pointer to a function that gets the start index in the input stream for this token. + */ + ANTLR3_MARKER (*getStartIndex) (struct ANTLR3_COMMON_TOKEN_struct * token); + + /** Pointer to a function that sets the start index in the input stream for this token. + */ + void (*setStartIndex) (struct ANTLR3_COMMON_TOKEN_struct * token, ANTLR3_MARKER index); + + /** Pointer to a function that gets the stop index in the input stream for this token. + */ + ANTLR3_MARKER (*getStopIndex) (struct ANTLR3_COMMON_TOKEN_struct * token); + + /** Pointer to a function that sets the stop index in the input stream for this token. + */ + void (*setStopIndex) (struct ANTLR3_COMMON_TOKEN_struct * token, ANTLR3_MARKER index); + + /** Pointer to a function that returns this token as a text representation that can be + * printed with embedded control codes such as \n replaced with the printable sequence "\\n" + * This also yields a string structure that can be used more easily than the pointer to + * the input stream in certain situations. + */ + pANTLR3_STRING (*toString) (struct ANTLR3_COMMON_TOKEN_struct * token); +} + ANTLR3_COMMON_TOKEN; + +/** \brief ANTLR3 Token factory interface to create lots of tokens efficiently + * rather than creating and freeing lots of little bits of memory. + */ +typedef struct ANTLR3_TOKEN_FACTORY_struct +{ + /** Pointers to the array of tokens that this factory has produced so far + */ + pANTLR3_COMMON_TOKEN *pools; + + /** Current pool tokens we are allocating from + */ + ANTLR3_INT32 thisPool; + + /** The next token to throw out from the pool, will cause a new pool allocation + * if this exceeds the available tokenCount + */ + ANTLR3_UINT32 nextToken; + + /** Trick to initialize tokens and their API quickly, we set up this token when the + * factory is created, then just copy the memory it uses into the new token. + */ + ANTLR3_COMMON_TOKEN unTruc; + + /** Pointer to an input stream that is using this token factory (may be NULL) + * which will be assigned to the tokens automatically. + */ + pANTLR3_INPUT_STREAM input; + + /** Pointer to a function that returns a new token + */ + pANTLR3_COMMON_TOKEN (*newToken) (struct ANTLR3_TOKEN_FACTORY_struct * factory); + + /** Pointer to a function that changes teh curent inptu stream so that + * new tokens are created with reference to their originating text. + */ + void (*setInputStream) (struct ANTLR3_TOKEN_FACTORY_struct * factory, pANTLR3_INPUT_STREAM input); + /** Pointer to a function the destroys the factory + */ + void (*close) (struct ANTLR3_TOKEN_FACTORY_struct * factory); +} + ANTLR3_TOKEN_FACTORY; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/antlr-3.1.3/runtime/C/include/antlr3commontree.h b/antlr-3.1.3/runtime/C/include/antlr3commontree.h new file mode 100644 index 0000000..1516ecc --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3commontree.h @@ -0,0 +1,167 @@ +/** Interface for an ANTLR3 common tree which is what gets + * passed around by the AST producing parser. + */ + +#ifndef _ANTLR3_COMMON_TREE_H +#define _ANTLR3_COMMON_TREE_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> +#include <antlr3basetree.h> +#include <antlr3commontoken.h> + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANTLR3_COMMON_TREE_struct +{ + + /// Not used by ANTLR, but if a super structure is created above + /// this structure, it can be used to point to the start of the super + /// structure, where additional data and function pointers can be stored. + /// + void * super; + + /// Start token index that encases this tree + /// + ANTLR3_MARKER startIndex; + + /// End token that encases this tree + /// + ANTLR3_MARKER stopIndex; + + /// A single token, this is the payload for the tree + /// + pANTLR3_COMMON_TOKEN token; + + /// Points to the node that has this node as a child. + /// If this is NULL, then this is the root node. + /// + pANTLR3_COMMON_TREE parent; + + /// What index is this particular node in the child list it + /// belongs to? + /// + ANTLR3_INT32 childIndex; + + /// Pointer to the tree factory that manufactured this + /// token. This can be used by duplication methods and so on + /// to manufacture another auto-tracked common tree structure + /// + pANTLR3_ARBORETUM factory; + + /// An encapsulated BASE TREE structure (NOT a pointer) + /// that performs a lot of the dirty work of node management + /// To this we add just a few functions that are specific to the + /// payload. You can further abstract common tree so long + /// as you always have a baseTree pointer in the top structure + /// and copy it from the next one down. + /// So, lets say we have a structure JIMS_TREE. + /// It needs an ANTLR3_BASE_TREE that will support all the + /// general tree duplication stuff. + /// It needs a ANTLR3_COMMON_TREE structure embedded or completely + /// provides the equivalent interface. + /// It provides it's own methods and data. + /// To create a new one of these, the function provided to + /// the tree adaptor (see comments there) should allocate the + /// memory for a new JIMS_TREE structure, then call + /// antlr3InitCommonTree(<addressofembeddedCOMMON_TREE>) + /// antlr3BaseTreeNew(<addressofBASETREE>) + /// The interfaces for BASE_TREE and COMMON_TREE will then + /// be initialized. You then call and you can override them or just init + /// JIMS_TREE (note that the base tree in common tree will be ignored) + /// just the top level base tree is used). Codegen will take care of the rest. + /// + ANTLR3_BASE_TREE baseTree; + +} + ANTLR3_COMMON_TREE; + +/// \brief ANTLR3 Tree factory interface to create lots of trees efficiently +/// rather than creating and freeing lots of little bits of memory. +/// +typedef struct ANTLR3_ARBORETUM_struct +{ + /// Pointers to the array of tokens that this factory has produced so far + /// + pANTLR3_COMMON_TREE *pools; + + /// Current pool tokens we are allocating from + /// + ANTLR3_INT32 thisPool; + + /// The next token to throw out from the pool, will cause a new pool allocation + /// if this exceeds the available tokenCount + /// + ANTLR3_UINT32 nextTree; + + /// Trick to initialize tokens and their API quickly, we set up this token when the + /// factory is created, then just copy the memory it uses into the new token. + /// + ANTLR3_COMMON_TREE unTruc; + + /// Pointer to a vector factory that is used to create child list vectors + /// for any child nodes that need them. This means that we auto track the + /// vectors and auto free them when we close the factory. It also means + /// that all rewriting trees can use the same tree factory and the same + /// vector factory and we do not dup any nodes unless we must do so + /// explicitly because of context such as an empty rewrite stream and + /// ->IMAGINARY[ID] so on. This makes memory tracking much simpler and + /// tempts no errors. + /// + pANTLR3_VECTOR_FACTORY vFactory; + + /// A resuse stack for reclaiming Nil nodes that were used in rewrites + /// and are now dead. The nilNode() method will eat one of these before + /// creating a new node. + /// + pANTLR3_STACK nilStack; + + /// Pointer to a function that returns a new tree + /// + pANTLR3_BASE_TREE (*newTree) (struct ANTLR3_ARBORETUM_struct * factory); + pANTLR3_BASE_TREE (*newFromTree) (struct ANTLR3_ARBORETUM_struct * factory, pANTLR3_COMMON_TREE tree); + pANTLR3_BASE_TREE (*newFromToken) (struct ANTLR3_ARBORETUM_struct * factory, pANTLR3_COMMON_TOKEN token); + + /// Pointer to a function the destroys the factory + /// + void (*close) (struct ANTLR3_ARBORETUM_struct * factory); +} + ANTLR3_ARBORETUM; + +#ifdef __cplusplus +} +#endif + +#endif + + diff --git a/antlr-3.1.3/runtime/C/include/antlr3commontreeadaptor.h b/antlr-3.1.3/runtime/C/include/antlr3commontreeadaptor.h new file mode 100644 index 0000000..4827997 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3commontreeadaptor.h @@ -0,0 +1,70 @@ +/** \file + * Definition of the ANTLR3 common tree adaptor. + */ + +#ifndef _ANTLR3_COMMON_TREE_ADAPTOR_H +#define _ANTLR3_COMMON_TREE_ADAPTOR_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> +#include <antlr3collections.h> +#include <antlr3string.h> +#include <antlr3basetreeadaptor.h> +#include <antlr3commontree.h> +#include <antlr3debugeventlistener.h> + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANTLR3_COMMON_TREE_ADAPTOR_struct +{ + /** Any enclosing structure/class can use this pointer to point to its own interface. + */ + void * super; + + /** Base interface implementation, embedded structure + */ + ANTLR3_TREE_ADAPTOR baseAdaptor; + + /** Tree factory for producing new nodes as required without needing to track + * memory allocation per node. + */ + pANTLR3_ARBORETUM arboretum; + +} + ANTLR3_COMMON_TREE_ADAPTOR; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/antlr-3.1.3/runtime/C/include/antlr3commontreenodestream.h b/antlr-3.1.3/runtime/C/include/antlr3commontreenodestream.h new file mode 100644 index 0000000..beb0534 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3commontreenodestream.h @@ -0,0 +1,336 @@ +/// \file +/// Definition of the ANTLR3 common tree node stream. +/// + +#ifndef _ANTLR3_COMMON_TREE_NODE_STREAM__H +#define _ANTLR3_COMMON_TREE_NODE_STREAM__H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> +#include <antlr3commontreeadaptor.h> +#include <antlr3commontree.h> +#include <antlr3collections.h> +#include <antlr3intstream.h> +#include <antlr3string.h> + +/// Token buffer initial size settings ( will auto increase) +/// +#define DEFAULT_INITIAL_BUFFER_SIZE 100 +#define INITIAL_CALL_STACK_SIZE 10 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANTLR3_TREE_NODE_STREAM_struct +{ + /// Any interface that implements this interface (is a + /// super structure containing this structure), may store the pointer + /// to itself here in the super pointer, which is not used by + /// the tree node stream. This will point to an implementation + /// of ANTLR3_COMMON_TREE_NODE_STREAM in this case. + /// + pANTLR3_COMMON_TREE_NODE_STREAM ctns; + + /// All input streams implement the ANTLR3_INT_STREAM interface... + /// + pANTLR3_INT_STREAM istream; + + /// Get tree node at current input pointer + i ahead where i=1 is next node. + /// i<0 indicates nodes in the past. So LT(-1) is previous node, but + /// implementations are not required to provide results for k < -1. + /// LT(0) is undefined. For i>=n, return null. + /// Return NULL for LT(0) and any index that results in an absolute address + /// that is negative (beyond the start of the list). + /// + /// This is analogous to the LT() method of the TokenStream, but this + /// returns a tree node instead of a token. Makes code gen identical + /// for both parser and tree grammars. :) + /// + pANTLR3_BASE_TREE (*_LT) (struct ANTLR3_TREE_NODE_STREAM_struct * tns, ANTLR3_INT32 k); + + /// Where is this stream pulling nodes from? This is not the name, but + /// the object that provides node objects. + /// + pANTLR3_BASE_TREE (*getTreeSource) (struct ANTLR3_TREE_NODE_STREAM_struct * tns); + + /// What adaptor can tell me how to interpret/navigate nodes and + /// trees. E.g., get text of a node. + /// + pANTLR3_BASE_TREE_ADAPTOR (*getTreeAdaptor) (struct ANTLR3_TREE_NODE_STREAM_struct * tns); + + /// As we flatten the tree, we use UP, DOWN nodes to represent + /// the tree structure. When debugging we need unique nodes + /// so we have to instantiate new ones. When doing normal tree + /// parsing, it's slow and a waste of memory to create unique + /// navigation nodes. Default should be false; + /// + void (*setUniqueNavigationNodes) (struct ANTLR3_TREE_NODE_STREAM_struct * tns, ANTLR3_BOOLEAN uniqueNavigationNodes); + + pANTLR3_STRING (*toString) (struct ANTLR3_TREE_NODE_STREAM_struct * tns); + + /// Return the text of all nodes from start to stop, inclusive. + /// If the stream does not buffer all the nodes then it can still + /// walk recursively from start until stop. You can always return + /// null or "" too, but users should not access $ruleLabel.text in + /// an action of course in that case. + /// + pANTLR3_STRING (*toStringSS) (struct ANTLR3_TREE_NODE_STREAM_struct * tns, pANTLR3_BASE_TREE start, pANTLR3_BASE_TREE stop); + + /// Return the text of all nodes from start to stop, inclusive, into the + /// supplied buffer. + /// If the stream does not buffer all the nodes then it can still + /// walk recursively from start until stop. You can always return + /// null or "" too, but users should not access $ruleLabel.text in + /// an action of course in that case. + /// + void (*toStringWork) (struct ANTLR3_TREE_NODE_STREAM_struct * tns, pANTLR3_BASE_TREE start, pANTLR3_BASE_TREE stop, pANTLR3_STRING buf); + + /// Release up any and all space the the interface allocate, including for this structure. + /// + void (*free) (struct ANTLR3_TREE_NODE_STREAM_struct * tns); + + /// Get a tree node at an absolute index i; 0..n-1. + /// If you don't want to buffer up nodes, then this method makes no + /// sense for you. + /// + pANTLR3_BASE_TREE (*get) (struct ANTLR3_TREE_NODE_STREAM_struct * tns, ANTLR3_INT32 i); + + // REWRITING TREES (used by tree parser) + + /// Replace from start to stop child index of parent with t, which might + /// be a list. Number of children may be different + /// after this call. The stream is notified because it is walking the + /// tree and might need to know you are monkeying with the underlying + /// tree. Also, it might be able to modify the node stream to avoid + /// restreaming for future phases. + /// + /// If parent is null, don't do anything; must be at root of overall tree. + /// Can't replace whatever points to the parent externally. Do nothing. + /// + void (*replaceChildren) (struct ANTLR3_TREE_NODE_STREAM_struct * tns, pANTLR3_BASE_TREE parent, ANTLR3_INT32 startChildIndex, ANTLR3_INT32 stopChildIndex, pANTLR3_BASE_TREE t); + +} + ANTLR3_TREE_NODE_STREAM; + +typedef struct ANTLR3_COMMON_TREE_NODE_STREAM_struct +{ + /// Any interface that implements this interface (is a + /// super structure containing this structure), may store the pointer + /// to itself here in the super pointer, which is not used by + /// the common tree node stream. + /// + void * super; + + /// Pointer to the tree node stream interface + /// + pANTLR3_TREE_NODE_STREAM tnstream; + + /// String factory for use by anything that wishes to create strings + /// such as a tree representation or some copy of the text etc. + /// + pANTLR3_STRING_FACTORY stringFactory; + + /// Dummy tree node that indicates a descent into a child + /// tree. Initialized by a call to create a new interface. + /// + ANTLR3_COMMON_TREE DOWN; + + /// Dummy tree node that indicates a descent up to a parent + /// tree. Initialized by a call to create a new interface. + /// + ANTLR3_COMMON_TREE UP; + + /// Dummy tree node that indicates the termination point of the + /// tree. Initialized by a call to create a new interface. + /// + ANTLR3_COMMON_TREE EOF_NODE; + + /// Dummy node that is returned if we need to indicate an invalid node + /// for any reason. + /// + ANTLR3_COMMON_TREE INVALID_NODE; + + /// The complete mapping from stream index to tree node. + /// This buffer includes pointers to DOWN, UP, and EOF nodes. + /// It is built upon ctor invocation. The elements are type + /// Object as we don't what the trees look like. + /// + /// Load upon first need of the buffer so we can set token types + /// of interest for reverseIndexing. Slows us down a wee bit to + /// do all of the if p==-1 testing everywhere though, though in C + /// you won't really be able to measure this. + /// + /// Must be freed when the tree node stream is torn down. + /// + pANTLR3_VECTOR nodes; + + /// If set to ANTLR3_TRUE then the navigation nodes UP, DOWN are + /// duplicated rather than reused within the tree. + /// + ANTLR3_BOOLEAN uniqueNavigationNodes; + + /// Which tree are we navigating ? + /// + pANTLR3_BASE_TREE root; + + /// Pointer to tree adaptor interface that manipulates/builds + /// the tree. + /// + pANTLR3_BASE_TREE_ADAPTOR adaptor; + + /// As we walk down the nodes, we must track parent nodes so we know + /// where to go after walking the last child of a node. When visiting + /// a child, push current node and current index (current index + /// is first stored in the tree node structure to avoid two stacks. + /// + pANTLR3_STACK nodeStack; + + /// The current index into the nodes vector of the current tree + /// we are parsing and possibly rewriting. + /// + ANTLR3_INT32 p; + + /// Which node are we currently visiting? + /// + pANTLR3_BASE_TREE currentNode; + + /// Which node did we last visit? Used for LT(-1) + /// + pANTLR3_BASE_TREE previousNode; + + /// Which child are we currently visiting? If -1 we have not visited + /// this node yet; next consume() request will set currentIndex to 0. + /// + ANTLR3_INT32 currentChildIndex; + + /// What node index did we just consume? i=0..n-1 for n node trees. + /// IntStream.next is hence 1 + this value. Size will be same. + /// + ANTLR3_MARKER absoluteNodeIndex; + + /// Buffer tree node stream for use with LT(i). This list grows + /// to fit new lookahead depths, but consume() wraps like a circular + /// buffer. + /// + pANTLR3_BASE_TREE * lookAhead; + + /// Number of elements available in the lookahead buffer at any point in + /// time. This is the current size of the array. + /// + ANTLR3_UINT32 lookAheadLength; + + /// lookAhead[head] is the first symbol of lookahead, LT(1). + /// + ANTLR3_UINT32 head; + + /// Add new lookahead at lookahead[tail]. tail wraps around at the + /// end of the lookahead buffer so tail could be less than head. + /// + ANTLR3_UINT32 tail; + + /// Calls to mark() may be nested so we have to track a stack of + /// them. The marker is an index into this stack. Index 0 is + /// the first marker. This is a List<TreeWalkState> + /// + pANTLR3_VECTOR markers; + + // INTERFACE + // + void (*fill) (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns, ANTLR3_INT32 k); + + void (*addLookahead) (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns, pANTLR3_BASE_TREE node); + + ANTLR3_BOOLEAN (*hasNext) (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns); + + pANTLR3_BASE_TREE (*next) (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns); + + pANTLR3_BASE_TREE (*handleRootnode) (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns); + + pANTLR3_BASE_TREE (*visitChild) (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns, ANTLR3_UINT32 child); + + void (*addNavigationNode) (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns, ANTLR3_UINT32 ttype); + + pANTLR3_BASE_TREE (*newDownNode) (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns); + + pANTLR3_BASE_TREE (*newUpNode) (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns); + + void (*walkBackToMostRecentNodeWithUnvisitedChildren) + (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns); + + ANTLR3_BOOLEAN (*hasUniqueNavigationNodes) (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns); + + ANTLR3_UINT32 (*getLookaheadSize) (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns); + + void (*push) (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns, ANTLR3_INT32 index); + + ANTLR3_INT32 (*pop) (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns); + + void (*reset) (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns); + + void (*free) (struct ANTLR3_COMMON_TREE_NODE_STREAM_struct * ctns); + + /// Indicates whether this node stream was derived from a prior + /// node stream to be used by a rewriting tree parser for instance. + /// If this flag is set to ANTLR3_TRUE, then when this stream is + /// closed it will not free the root tree as this tree always + /// belongs to the origniating node stream. + /// + ANTLR3_BOOLEAN isRewriter; + +} + ANTLR3_COMMON_TREE_NODE_STREAM; + +/** This structure is used to save the state information in the treenodestream + * when walking ahead with cyclic DFA or for syntactic predicates, + * we need to record the state of the tree node stream. This + * class wraps up the current state of the CommonTreeNodeStream. + * Calling mark() will push another of these on the markers stack. + */ +typedef struct ANTLR3_TREE_WALK_STATE_struct +{ + ANTLR3_UINT32 currentChildIndex; + ANTLR3_MARKER absoluteNodeIndex; + pANTLR3_BASE_TREE currentNode; + pANTLR3_BASE_TREE previousNode; + ANTLR3_UINT32 nodeStackSize; + pANTLR3_BASE_TREE * lookAhead; + ANTLR3_UINT32 lookAheadLength; + ANTLR3_UINT32 tail; + ANTLR3_UINT32 head; +} + ANTLR3_TREE_WALK_STATE; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/antlr-3.1.3/runtime/C/include/antlr3convertutf.h b/antlr-3.1.3/runtime/C/include/antlr3convertutf.h new file mode 100644 index 0000000..ffe44b0 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3convertutf.h @@ -0,0 +1,166 @@ +/* + * Copyright 2001-2004 Unicode, Inc. + * + * Disclaimer + * + * This source code is provided as is by Unicode, Inc. No claims are + * made as to fitness for any particular purpose. No warranties of any + * kind are expressed or implied. The recipient agrees to determine + * applicability of information provided. If this file has been + * purchased on magnetic or optical media from Unicode, Inc., the + * sole remedy for any claim will be exchange of defective media + * within 90 days of receipt. + * + * Limitations on Rights to Redistribute This Code + * + * Unicode, Inc. hereby grants the right to freely use the information + * supplied in this file in the creation of products supporting the + * Unicode Standard, and to make copies of this file in any form + * for internal or external distribution as long as this notice + * remains attached. + */ + +/* --------------------------------------------------------------------- + + Conversions between UTF32, UTF-16, and UTF-8. Header file. + + Several functions are included here, forming a complete set of + conversions between the three formats. UTF-7 is not included + here, but is handled in a separate source file. + + Each of these routines takes pointers to input buffers and output + buffers. The input buffers are const. + + Each routine converts the text between *sourceStart and sourceEnd, + putting the result into the buffer between *targetStart and + targetEnd. Note: the end pointers are *after* the last item: e.g. + *(sourceEnd - 1) is the last item. + + The return result indicates whether the conversion was successful, + and if not, whether the problem was in the source or target buffers. + (Only the first encountered problem is indicated.) + + After the conversion, *sourceStart and *targetStart are both + updated to point to the end of last text successfully converted in + the respective buffers. + + Input parameters: + sourceStart - pointer to a pointer to the source buffer. + The contents of this are modified on return so that + it points at the next thing to be converted. + targetStart - similarly, pointer to pointer to the target buffer. + sourceEnd, targetEnd - respectively pointers to the ends of the + two buffers, for overflow checking only. + + These conversion functions take a ConversionFlags argument. When this + flag is set to strict, both irregular sequences and isolated surrogates + will cause an error. When the flag is set to lenient, both irregular + sequences and isolated surrogates are converted. + + Whether the flag is strict or lenient, all illegal sequences will cause + an error return. This includes sequences such as: <F4 90 80 80>, <C0 80>, + or <A0> in UTF-8, and values above 0x10FFFF in UTF-32. Conformant code + must check for illegal sequences. + + When the flag is set to lenient, characters over 0x10FFFF are converted + to the replacement character; otherwise (when the flag is set to strict) + they constitute an error. + + Output parameters: + The value "sourceIllegal" is returned from some routines if the input + sequence is malformed. When "sourceIllegal" is returned, the source + value will point to the illegal value that caused the problem. E.g., + in UTF-8 when a sequence is malformed, it points to the start of the + malformed sequence. + + Author: Mark E. Davis, 1994. + Rev History: Rick McGowan, fixes & updates May 2001. + Fixes & updates, Sept 2001. + +------------------------------------------------------------------------ */ + +/* --------------------------------------------------------------------- + The following 4 definitions are compiler-specific. + The C standard does not guarantee that wchar_t has at least + 16 bits, so wchar_t is no less portable than unsigned short! + All should be unsigned values to avoid sign extension during + bit mask & shift operations. +------------------------------------------------------------------------ */ + + +// Changes for ANTLR3 - Jim Idle, January 2008. +// builtin types defined for Unicode types changed to +// aliases for the types that are system determined by +// ANTLR at compile time. +// +// typedef unsigned long UTF32; /* at least 32 bits */ +// typedef unsigned short UTF16; /* at least 16 bits */ +// typedef unsigned char UTF8; /* typically 8 bits */ +// typedef unsigned char Boolean; /* 0 or 1 */ + +#ifndef _ANTLR3_CONVERTUTF_H +#define _ANTLR3_CONVERTUTF_H + +#include <antlr3defs.h> + +typedef ANTLR3_UINT32 UTF32; /* at least 32 bits */ +typedef ANTLR3_UINT16 UTF16; /* at least 16 bits */ +typedef ANTLR3_UINT8 UTF8; /* typically 8 bits */ + +/* Some fundamental constants */ +#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD +#define UNI_MAX_BMP (UTF32)0x0000FFFF +#define UNI_MAX_UTF16 (UTF32)0x0010FFFF +#define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF +#define UNI_MAX_LEGAL_UTF32 (UTF32)0x0010FFFF + +typedef enum { + conversionOK, /* conversion successful */ + sourceExhausted, /* partial character in source, but hit end */ + targetExhausted, /* insuff. room in target for conversion */ + sourceIllegal /* source sequence is illegal/malformed */ +} ConversionResult; + +typedef enum { + strictConversion = 0, + lenientConversion +} ConversionFlags; + +/* This is for C++ and does no harm in C */ +#ifdef __cplusplus +extern "C" { +#endif + +ConversionResult ConvertUTF8toUTF16 ( + const UTF8** sourceStart, const UTF8* sourceEnd, + UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags); + +ConversionResult ConvertUTF16toUTF8 ( + const UTF16** sourceStart, const UTF16* sourceEnd, + UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags); + +ConversionResult ConvertUTF8toUTF32 ( + const UTF8** sourceStart, const UTF8* sourceEnd, + UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags); + +ConversionResult ConvertUTF32toUTF8 ( + const UTF32** sourceStart, const UTF32* sourceEnd, + UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags); + +ConversionResult ConvertUTF16toUTF32 ( + const UTF16** sourceStart, const UTF16* sourceEnd, + UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags); + +ConversionResult ConvertUTF32toUTF16 ( + const UTF32** sourceStart, const UTF32* sourceEnd, + UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags); + +ANTLR3_BOOLEAN isLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd); + +#ifdef __cplusplus +} +#endif + +#endif + +/* --------------------------------------------------------------------- */ diff --git a/antlr-3.1.3/runtime/C/include/antlr3cyclicdfa.h b/antlr-3.1.3/runtime/C/include/antlr3cyclicdfa.h new file mode 100644 index 0000000..78708a0 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3cyclicdfa.h @@ -0,0 +1,97 @@ +/// Definition of a cyclic dfa structure such that it can be +/// initialized at compile time and have only a single +/// runtime function that can deal with all cyclic dfa +/// structures and show Java how it is done ;-) +/// +#ifndef ANTLR3_CYCLICDFA_H +#define ANTLR3_CYCLICDFA_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3baserecognizer.h> +#include <antlr3intstream.h> + +#ifdef __cplusplus +extern "C" { + +// If this header file is included as part of a generated recognizer that +// is being compiled as if it were C++, and this is Windows, then the const elements +// of the structure cause the C++ compiler to (rightly) point out that +// there can be no instantiation of the structure because it needs a constructor +// that can initialize the data, however these structures are not +// useful for C++ as they are pre-generated and static in the recognizer. +// So, we turn off those warnings, which are only at /W4 anyway. +// +#ifdef ANTLR3_WINDOWS +#pragma warning (push) +#pragma warning (disable : 4510) +#pragma warning (disable : 4512) +#pragma warning (disable : 4610) +#endif +#endif + +typedef struct ANTLR3_CYCLIC_DFA_struct +{ + /// Decision number that a particular static structure + /// represents. + /// + const ANTLR3_INT32 decisionNumber; + + /// What this decision represents + /// + const pANTLR3_UCHAR description; + + ANTLR3_INT32 (*specialStateTransition) (void * ctx, pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM is, struct ANTLR3_CYCLIC_DFA_struct * dfa, ANTLR3_INT32 s); + + ANTLR3_INT32 (*specialTransition) (void * ctx, pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM is, struct ANTLR3_CYCLIC_DFA_struct * dfa, ANTLR3_INT32 s); + + ANTLR3_INT32 (*predict) (void * ctx, pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM is, struct ANTLR3_CYCLIC_DFA_struct * dfa); + + const ANTLR3_INT32 * const eot; + const ANTLR3_INT32 * const eof; + const ANTLR3_INT32 * const min; + const ANTLR3_INT32 * const max; + const ANTLR3_INT32 * const accept; + const ANTLR3_INT32 * const special; + const ANTLR3_INT32 * const * const transition; + +} + ANTLR3_CYCLIC_DFA; + +typedef ANTLR3_INT32 (*CDFA_SPECIAL_FUNC) (void * , pANTLR3_BASE_RECOGNIZER , pANTLR3_INT_STREAM , struct ANTLR3_CYCLIC_DFA_struct * , ANTLR3_INT32); + +#ifdef __cplusplus +} +#ifdef ANTLR3_WINDOWS +#pragma warning (pop) +#endif +#endif + +#endif diff --git a/antlr-3.1.3/runtime/C/include/antlr3debugeventlistener.h b/antlr-3.1.3/runtime/C/include/antlr3debugeventlistener.h new file mode 100644 index 0000000..c9cd6ce --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3debugeventlistener.h @@ -0,0 +1,398 @@ +/** + * \file + * The definition of all debugging events that a recognizer can trigger. + * + * \remark + * From the java implementation by Terence Parr... + * I did not create a separate AST debugging interface as it would create + * lots of extra classes and DebugParser has a dbg var defined, which makes + * it hard to change to ASTDebugEventListener. I looked hard at this issue + * and it is easier to understand as one monolithic event interface for all + * possible events. Hopefully, adding ST debugging stuff won't be bad. Leave + * for future. 4/26/2006. + */ + +#ifndef ANTLR3_DEBUG_EVENT_LISTENER_H +#define ANTLR3_DEBUG_EVENT_LISTENER_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> +#include <antlr3basetree.h> +#include <antlr3commontoken.h> + + +/// Default debugging port +/// +#define DEFAULT_DEBUGGER_PORT 0xBFCC; + +#ifdef __cplusplus +extern "C" { +#endif + +/** The ANTLR3 debugging interface for communicating with ANLTR Works. Function comments + * mostly taken from the Java version. + */ +typedef struct ANTLR3_DEBUG_EVENT_LISTENER_struct +{ + /// The port number which the debug listener should listen on for a connection + /// + ANTLR3_UINT32 port; + + /// The socket structure we receive after a successful accept on the serverSocket + /// + SOCKET socket; + + /** The version of the debugging protocol supported by the providing + * instance of the debug event listener. + */ + int PROTOCOL_VERSION; + + /// The name of the grammar file that we are debugging + /// + pANTLR3_STRING grammarFileName; + + /// Indicates whether we have already connected or not + /// + ANTLR3_BOOLEAN initialized; + + /// Used to serialize the values of any particular token we need to + /// send back to the debugger. + /// + pANTLR3_STRING tokenString; + + + /// Allows the debug event system to access the adapter in use + /// by the recognizer, if this is a tree parser of some sort. + /// + pANTLR3_BASE_TREE_ADAPTOR adaptor; + + /// Wait for a connection from the debugger and initiate the + /// debugging session. + /// + ANTLR3_BOOLEAN (*handshake) (pANTLR3_DEBUG_EVENT_LISTENER delboy); + + /** The parser has just entered a rule. No decision has been made about + * which alt is predicted. This is fired AFTER init actions have been + * executed. Attributes are defined and available etc... + */ + void (*enterRule) (pANTLR3_DEBUG_EVENT_LISTENER delboy, const char * grammarFileName, const char * ruleName); + + /** Because rules can have lots of alternatives, it is very useful to + * know which alt you are entering. This is 1..n for n alts. + */ + void (*enterAlt) (pANTLR3_DEBUG_EVENT_LISTENER delboy, int alt); + + /** This is the last thing executed before leaving a rule. It is + * executed even if an exception is thrown. This is triggered after + * error reporting and recovery have occurred (unless the exception is + * not caught in this rule). This implies an "exitAlt" event. + */ + void (*exitRule) (pANTLR3_DEBUG_EVENT_LISTENER delboy, const char * grammarFileName, const char * ruleName); + + /** Track entry into any (...) subrule other EBNF construct + */ + void (*enterSubRule) (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber); + + void (*exitSubRule) (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber); + + /** Every decision, fixed k or arbitrary, has an enter/exit event + * so that a GUI can easily track what LT/consume events are + * associated with prediction. You will see a single enter/exit + * subrule but multiple enter/exit decision events, one for each + * loop iteration. + */ + void (*enterDecision) (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber); + + void (*exitDecision) (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber); + + /** An input token was consumed; matched by any kind of element. + * Trigger after the token was matched by things like match(), matchAny(). + */ + void (*consumeToken) (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_COMMON_TOKEN t); + + /** An off-channel input token was consumed. + * Trigger after the token was matched by things like match(), matchAny(). + * (unless of course the hidden token is first stuff in the input stream). + */ + void (*consumeHiddenToken) (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_COMMON_TOKEN t); + + /** Somebody (anybody) looked ahead. Note that this actually gets + * triggered by both LA and LT calls. The debugger will want to know + * which Token object was examined. Like consumeToken, this indicates + * what token was seen at that depth. A remote debugger cannot look + * ahead into a file it doesn't have so LT events must pass the token + * even if the info is redundant. + */ + void (*LT) (pANTLR3_DEBUG_EVENT_LISTENER delboy, int i, pANTLR3_COMMON_TOKEN t); + + /** The parser is going to look arbitrarily ahead; mark this location, + * the token stream's marker is sent in case you need it. + */ + void (*mark) (pANTLR3_DEBUG_EVENT_LISTENER delboy, ANTLR3_MARKER marker); + + /** After an arbitrarily long lookahead as with a cyclic DFA (or with + * any backtrack), this informs the debugger that stream should be + * rewound to the position associated with marker. + */ + void (*rewind) (pANTLR3_DEBUG_EVENT_LISTENER delboy, ANTLR3_MARKER marker); + + /** Rewind to the input position of the last marker. + * Used currently only after a cyclic DFA and just + * before starting a sem/syn predicate to get the + * input position back to the start of the decision. + * Do not "pop" the marker off the state. mark(i) + * and rewind(i) should balance still. + */ + void (*rewindLast) (pANTLR3_DEBUG_EVENT_LISTENER delboy); + + void (*beginBacktrack) (pANTLR3_DEBUG_EVENT_LISTENER delboy, int level); + + void (*endBacktrack) (pANTLR3_DEBUG_EVENT_LISTENER delboy, int level, ANTLR3_BOOLEAN successful); + + /** To watch a parser move through the grammar, the parser needs to + * inform the debugger what line/charPos it is passing in the grammar. + * For now, this does not know how to switch from one grammar to the + * other and back for island grammars etc... + * + * This should also allow breakpoints because the debugger can stop + * the parser whenever it hits this line/pos. + */ + void (*location) (pANTLR3_DEBUG_EVENT_LISTENER delboy, int line, int pos); + + /** A recognition exception occurred such as NoViableAltException. I made + * this a generic event so that I can alter the exception hierarchy later + * without having to alter all the debug objects. + * + * Upon error, the stack of enter rule/subrule must be properly unwound. + * If no viable alt occurs it is within an enter/exit decision, which + * also must be rewound. Even the rewind for each mark must be unwound. + * In the Java target this is pretty easy using try/finally, if a bit + * ugly in the generated code. The rewind is generated in DFA.predict() + * actually so no code needs to be generated for that. For languages + * w/o this "finally" feature (C++?), the target implementor will have + * to build an event stack or something. + * + * Across a socket for remote debugging, only the RecognitionException + * data fields are transmitted. The token object or whatever that + * caused the problem was the last object referenced by LT. The + * immediately preceding LT event should hold the unexpected Token or + * char. + * + * Here is a sample event trace for grammar: + * + * b : C ({;}A|B) // {;} is there to prevent A|B becoming a set + * | D + * ; + * + * The sequence for this rule (with no viable alt in the subrule) for + * input 'c c' (there are 3 tokens) is: + * + * commence + * LT(1) + * enterRule b + * location 7 1 + * enter decision 3 + * LT(1) + * exit decision 3 + * enterAlt1 + * location 7 5 + * LT(1) + * consumeToken [c/<4>,1:0] + * location 7 7 + * enterSubRule 2 + * enter decision 2 + * LT(1) + * LT(1) + * recognitionException NoViableAltException 2 1 2 + * exit decision 2 + * exitSubRule 2 + * beginResync + * LT(1) + * consumeToken [c/<4>,1:1] + * LT(1) + * endResync + * LT(-1) + * exitRule b + * terminate + */ + void (*recognitionException) (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_EXCEPTION e); + + /** Indicates the recognizer is about to consume tokens to resynchronize + * the parser. Any consume events from here until the recovered event + * are not part of the parse--they are dead tokens. + */ + void (*beginResync) (pANTLR3_DEBUG_EVENT_LISTENER delboy); + + /** Indicates that the recognizer has finished consuming tokens in order + * to resynchronize. There may be multiple beginResync/endResync pairs + * before the recognizer comes out of errorRecovery mode (in which + * multiple errors are suppressed). This will be useful + * in a gui where you want to probably grey out tokens that are consumed + * but not matched to anything in grammar. Anything between + * a beginResync/endResync pair was tossed out by the parser. + */ + void (*endResync) (pANTLR3_DEBUG_EVENT_LISTENER delboy); + + /** A semantic predicate was evaluate with this result and action text + */ + void (*semanticPredicate) (pANTLR3_DEBUG_EVENT_LISTENER delboy, ANTLR3_BOOLEAN result, const char * predicate); + + /** Announce that parsing has begun. Not technically useful except for + * sending events over a socket. A GUI for example will launch a thread + * to connect and communicate with a remote parser. The thread will want + * to notify the GUI when a connection is made. ANTLR parsers + * trigger this upon entry to the first rule (the ruleLevel is used to + * figure this out). + */ + void (*commence) (pANTLR3_DEBUG_EVENT_LISTENER delboy); + + /** Parsing is over; successfully or not. Mostly useful for telling + * remote debugging listeners that it's time to quit. When the rule + * invocation level goes to zero at the end of a rule, we are done + * parsing. + */ + void (*terminate) (pANTLR3_DEBUG_EVENT_LISTENER delboy); + + /// Retrieve acknowledge response from the debugger. in fact this + /// response is never used at the moment. So we just read whatever + /// is in the socket buffer and throw it away. + /// + void (*ack) (pANTLR3_DEBUG_EVENT_LISTENER delboy); + + // T r e e P a r s i n g + + /** Input for a tree parser is an AST, but we know nothing for sure + * about a node except its type and text (obtained from the adaptor). + * This is the analog of the consumeToken method. The ID is usually + * the memory address of the node. + * If the type is UP or DOWN, then + * the ID is not really meaningful as it's fixed--there is + * just one UP node and one DOWN navigation node. + * + * Note that unlike the Java version, the node type of the C parsers + * is always fixed as pANTLR3_BASE_TREE because all such structures + * contain a super pointer to their parent, which is generally COMMON_TREE and within + * that there is a super pointer that can point to a user type that encapsulates it. + * Almost akin to saying that it is an interface pointer except we don't need to + * know what the interface is in full, just those bits that are the base. + * @param t + */ + void (*consumeNode) (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t); + + /** The tree parser looked ahead. If the type is UP or DOWN, + * then the ID is not really meaningful as it's fixed--there is + * just one UP node and one DOWN navigation node. + */ + void (*LTT) (pANTLR3_DEBUG_EVENT_LISTENER delboy, int i, pANTLR3_BASE_TREE t); + + + // A S T E v e n t s + + /** A nil was created (even nil nodes have a unique ID... + * they are not "null" per se). As of 4/28/2006, this + * seems to be uniquely triggered when starting a new subtree + * such as when entering a subrule in automatic mode and when + * building a tree in rewrite mode. + * + * If you are receiving this event over a socket via + * RemoteDebugEventSocketListener then only t.ID is set. + */ + void (*nilNode) (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t); + + /** If a syntax error occurs, recognizers bracket the error + * with an error node if they are building ASTs. This event + * notifies the listener that this is the case + */ + void (*errorNode) (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t); + + /** Announce a new node built from token elements such as type etc... + * + * If you are receiving this event over a socket via + * RemoteDebugEventSocketListener then only t.ID, type, text are + * set. + */ + void (*createNode) (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t); + + /** Announce a new node built from an existing token. + * + * If you are receiving this event over a socket via + * RemoteDebugEventSocketListener then only node.ID and token.tokenIndex + * are set. + */ + void (*createNodeTok) (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE node, pANTLR3_COMMON_TOKEN token); + + /** Make a node the new root of an existing root. See + * + * Note: the newRootID parameter is possibly different + * than the TreeAdaptor.becomeRoot() newRoot parameter. + * In our case, it will always be the result of calling + * TreeAdaptor.becomeRoot() and not root_n or whatever. + * + * The listener should assume that this event occurs + * only when the current subrule (or rule) subtree is + * being reset to newRootID. + * + * If you are receiving this event over a socket via + * RemoteDebugEventSocketListener then only IDs are set. + * + * @see org.antlr.runtime.tree.TreeAdaptor.becomeRoot() + */ + void (*becomeRoot) (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE newRoot, pANTLR3_BASE_TREE oldRoot); + + /** Make childID a child of rootID. + * + * If you are receiving this event over a socket via + * RemoteDebugEventSocketListener then only IDs are set. + * + * @see org.antlr.runtime.tree.TreeAdaptor.addChild() + */ + void (*addChild) (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE root, pANTLR3_BASE_TREE child); + + /** Set the token start/stop token index for a subtree root or node. + * + * If you are receiving this event over a socket via + * RemoteDebugEventSocketListener then only t.ID is set. + */ + void (*setTokenBoundaries) (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t, ANTLR3_MARKER tokenStartIndex, ANTLR3_MARKER tokenStopIndex); + + /// Free up the resources allocated to this structure + /// + void (*free) (pANTLR3_DEBUG_EVENT_LISTENER delboy); + +} + ANTLR3_DEBUG_EVENT_LISTENER; + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/antlr-3.1.3/runtime/C/include/antlr3defs.h b/antlr-3.1.3/runtime/C/include/antlr3defs.h new file mode 100644 index 0000000..c970348 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3defs.h @@ -0,0 +1,606 @@ +/** \file + * Basic type and constant definitions for ANTLR3 Runtime. + */ +#ifndef _ANTLR3DEFS_H +#define _ANTLR3DEFS_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* Following are for generated code, they are not referenced internally!!! + */ +#if !defined(ANTLR3_HUGE) && !defined(ANTLR3_AVERAGE) && !defined(ANTLR3_SMALL) +#define ANTLR3_AVERAGE +#endif + +#ifdef ANTLR3_HUGE +#ifndef ANTLR3_SIZE_HINT +#define ANTLR3_SIZE_HINT 2049 +#endif +#ifndef ANTLR3_LIST_SIZE_HINT +#define ANTLR3_LIST_SIZE_HINT 127 +#endif +#endif + +#ifdef ANTLR3_AVERAGE +#ifndef ANTLR3_SIZE_HINT +#define ANTLR3_SIZE_HINT 1025 +#define ANTLR3_LIST_SIZE_HINT 63 +#endif +#endif + +#ifdef ANTLR3_SMALL +#ifndef ANTLR3_SIZE_HINT +#define ANTLR3_SIZE_HINT 211 +#define ANTLR3_LIST_SIZE_HINT 31 +#endif +#endif + +/* Common definitions come first + */ +#include <antlr3errors.h> + +#define ANTLR3_ENCODING_LATIN1 0 +#define ANTLR3_ENCODING_UCS2 1 +#define ANTLR3_ENCODING_UTF8 2 +#define ANTLR3_ENCODING_UTF32 3 + +/* Work out what operating system/compiler this is. We just do this once + * here and use an internal symbol after this. + */ +#ifdef _WIN64 + +# ifndef ANTLR3_WINDOWS +# define ANTLR3_WINDOWS +# endif +# define ANTLR3_WIN64 +# define ANTLR3_USE_64BIT + +#else + +#ifdef _WIN32 +# ifndef ANTLR3_WINDOWS +# define ANTLR3_WINDOWS +# endif + +#define ANTLR3_WIN32 +#endif + +#endif + +#ifdef ANTLR3_WINDOWS + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif + +/* Allow VC 8 (vs2005) and above to use 'secure' versions of various functions such as sprintf + */ +#ifndef _CRT_SECURE_NO_DEPRECATE +#define _CRT_SECURE_NO_DEPRECATE +#endif + +#include <windows.h> +#include <stdlib.h> +#include <winsock.h> +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <stdarg.h> + +#define ANTLR3_API __declspec(dllexport) +#define ANTLR3_CDECL __cdecl +#define ANTLR3_FASTCALL __fastcall + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef __MINGW32__ +// Standard Windows types +// +typedef INT32 ANTLR3_CHAR, *pANTLR3_CHAR; +typedef UINT32 ANTLR3_UCHAR, *pANTLR3_UCHAR; + +typedef INT8 ANTLR3_INT8, *pANTLR3_INT8; +typedef INT16 ANTLR3_INT16, *pANTLR3_INT16; +typedef INT32 ANTLR3_INT32, *pANTLR3_INT32; +typedef INT64 ANTLR3_INT64, *pANTLR3_INT64; +typedef UINT8 ANTLR3_UINT8, *pANTLR3_UINT8; +typedef UINT16 ANTLR3_UINT16, *pANTLR3_UINT16; +typedef UINT32 ANTLR3_UINT32, *pANTLR3_UINT32; +typedef UINT64 ANTLR3_UINT64, *pANTLR3_UINT64; +typedef UINT64 ANTLR3_BITWORD, *pANTLR3_BITWORD; +typedef UINT8 ANTLR3_BOOLEAN, *pANTLR3_BOOLEAN; + +#else +// Mingw uses stdint.h and fails to define standard Microsoft typedefs +// such as UINT16, hence we must use stdint.h for Mingw. +// +#include <stdint.h> +typedef int32_t ANTLR3_CHAR, *pANTLR3_CHAR; +typedef uint32_t ANTLR3_UCHAR, *pANTLR3_UCHAR; + +typedef int8_t ANTLR3_INT8, *pANTLR3_INT8; +typedef int16_t ANTLR3_INT16, *pANTLR3_INT16; +typedef int32_t ANTLR3_INT32, *pANTLR3_INT32; +typedef int64_t ANTLR3_INT64, *pANTLR3_INT64; + +typedef uint8_t ANTLR3_UINT8, *pANTLR3_UINT8; +typedef uint16_t ANTLR3_UINT16, *pANTLR3_UINT16; +typedef uint32_t ANTLR3_UINT32, *pANTLR3_UINT32; +typedef uint64_t ANTLR3_UINT64, *pANTLR3_UINT64; +typedef uint64_t ANTLR3_BITWORD, *pANTLR3_BITWORD; + +typedef uint8_t ANTLR3_BOOLEAN, *pANTLR3_BOOLEAN; + +#endif + + + +#define ANTLR3_UINT64_LIT(lit) lit##ULL + +#define ANTLR3_INLINE __inline + +typedef FILE * ANTLR3_FDSC; +typedef struct stat ANTLR3_FSTAT_STRUCT; + +#ifdef ANTLR3_USE_64BIT +#define ANTLR3_FUNC_PTR(ptr) (void *)((ANTLR3_UINT64)(ptr)) +#define ANTLR3_UINT64_CAST(ptr) (ANTLR3_UINT64)(ptr)) +#define ANTLR3_UINT32_CAST(ptr) (ANTLR3_UINT32)((ANTLR3_UINT64)(ptr)) +typedef ANTLR3_INT64 ANTLR3_MARKER; +typedef ANTLR3_UINT64 ANTLR3_INTKEY; +#else +#define ANTLR3_FUNC_PTR(ptr) (void *)((ANTLR3_UINT32)(ptr)) +#define ANTLR3_UINT64_CAST(ptr) (ANTLR3_UINT64)((ANTLR3_UINT32)(ptr)) +#define ANTLR3_UINT32_CAST(ptr) (ANTLR3_UINT32)(ptr) +typedef ANTLR3_INT32 ANTLR3_MARKER; +typedef ANTLR3_UINT32 ANTLR3_INTKEY; +#endif + +#ifdef ANTLR3_WIN32 +#endif + +#ifdef ANTLR3_WIN64 +#endif + + +typedef int ANTLR3_SALENT; // Type used for size of accept structure +typedef struct sockaddr_in ANTLR3_SOCKADDRT, * pANTLR3_SOCKADDRT; // Type used for socket address declaration +typedef struct sockaddr ANTLR3_SOCKADDRC, * pANTLR3_SOCKADDRC; // Type used for cast on accept() + +#define ANTLR3_CLOSESOCKET closesocket + +#ifdef __cplusplus +} +#endif + +/* Warnings that are over-zealous such as complaining about strdup, we + * can turn off. + */ + +/* Don't complain about "deprecated" functions such as strdup + */ +#pragma warning( disable : 4996 ) + +#else + +/* Include configure generated header file + */ +#include <antlr3config.h> + +#include <stdio.h> + +#if HAVE_STDINT_H +# include <stdint.h> +#endif + +#if HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif + +#if HAVE_SYS_STAT_H +# include <sys/stat.h> +#endif + +#if STDC_HEADERS +# include <stdlib.h> +# include <stddef.h> +# include <stdarg.h> +#else +# if HAVE_STDLIB_H +# include <stdlib.h> +# endif +# if HAVE_STDARG_H +# include <stdarg.h> +# endif +#endif + +#if HAVE_STRING_H +# if !STDC_HEADERS && HAVE_MEMORY_H +# include <memory.h> +# endif +# include <string.h> +#endif + +#if HAVE_STRINGS_H +# include <strings.h> +#endif + +#if HAVE_INTTYPES_H +# include <inttypes.h> +#endif + +#if HAVE_UNISTD_H +# include <unistd.h> +#endif + +#ifdef HAVE_NETINET_IN_H +#include <netinet/in.h> +#endif + +#ifdef HAVE_SOCKET_H +# include <socket.h> +#else +# if HAVE_SYS_SOCKET_H +# include <sys/socket.h> +# endif +#endif + +#ifdef HAVE_NETINET_TCP_H +#include <netinet/tcp.h> +#endif + +#ifdef HAVE_ARPA_NAMESER_H +#include <arpa/nameser.h> /* DNS HEADER struct */ +#endif + +#ifdef HAVE_NETDB_H +#include <netdb.h> +#endif + + +#ifdef HAVE_SYS_RESOLVE_H +#include <sys/resolv.h> +#endif + +#ifdef HAVE_RESOLVE_H +#include <resolv.h> +#endif + + +#ifdef HAVE_MALLOC_H +# include <malloc.h> +#else +# ifdef HAVE_SYS_MALLOC_H +# include <sys/malloc.h> +# endif +#endif + +#ifdef HAVE_CTYPE_H +# include <ctype.h> +#endif + +/* Some platforms define a macro, index() in string.h. AIX is + * one of these for instance. We must get rid of that definition + * as we use ->index all over the place. defining macros like this in system header + * files is a really bad idea, but I doubt that IBM will listen to me ;-) + */ +#ifdef index +#undef index +#endif + +#define _stat stat + +// SOCKET not defined on Unix +// +typedef int SOCKET; + +#define ANTLR3_API +#define ANTLR3_CDECL +#define ANTLR3_FASTCALL + +#ifdef __hpux + + // HPUX is always different usually for no good reason. Tru64 should have kicked it + // into touch and everyone knows it ;-) + // + typedef struct sockaddr_in ANTLR3_SOCKADDRT, * pANTLR3_SOCKADDRT; // Type used for socket address declaration + typedef void * pANTLR3_SOCKADDRC; // Type used for cast on accept() + typedef int ANTLR3_SALENT; + +#else + +# if defined(_AIX) || __GNUC__ > 3 + + typedef socklen_t ANTLR3_SALENT; + +# else + + typedef size_t ANTLR3_SALENT; + +# endif + + typedef struct sockaddr_in ANTLR3_SOCKADDRT, * pANTLR3_SOCKADDRT; // Type used for socket address declaration + typedef struct sockaddr * pANTLR3_SOCKADDRC; // Type used for cast on accept() + +#endif + +#define INVALID_SOCKET ((SOCKET)-1) +#define ANTLR3_CLOSESOCKET close + +#ifdef __cplusplus +extern "C" { +#endif + +/* Inherit type definitions for autoconf + */ +typedef int32_t ANTLR3_CHAR, *pANTLR3_CHAR; +typedef uint32_t ANTLR3_UCHAR, *pANTLR3_UCHAR; + +typedef int8_t ANTLR3_INT8, *pANTLR3_INT8; +typedef int16_t ANTLR3_INT16, *pANTLR3_INT16; +typedef int32_t ANTLR3_INT32, *pANTLR3_INT32; +typedef int64_t ANTLR3_INT64, *pANTLR3_INT64; + +typedef uint8_t ANTLR3_UINT8, *pANTLR3_UINT8; +typedef uint16_t ANTLR3_UINT16, *pANTLR3_UINT16; +typedef uint32_t ANTLR3_UINT32, *pANTLR3_UINT32; +typedef uint64_t ANTLR3_UINT64, *pANTLR3_UINT64; +typedef uint64_t ANTLR3_BITWORD, *pANTLR3_BITWORD; + +typedef uint32_t ANTLR3_BOOLEAN, *pANTLR3_BOOLEAN; + +#define ANTLR3_INLINE inline +#define ANTLR3_API + +typedef FILE * ANTLR3_FDSC; +typedef struct stat ANTLR3_FSTAT_STRUCT; + +#ifdef ANTLR3_USE_64BIT +#define ANTLR3_FUNC_PTR(ptr) (void *)((ANTLR3_UINT64)(ptr)) +#define ANTLR3_UINT64_CAST(ptr) (ANTLR3_UINT64)(ptr)) +#define ANTLR3_UINT32_CAST(ptr) (ANTLR3_UINT32)((ANTLR3_UINT64)(ptr)) +typedef ANTLR3_INT64 ANTLR3_MARKER; +typedef ANTLR3_UINT64 ANTLR3_INTKEY; +#else +#define ANTLR3_FUNC_PTR(ptr) (void *)((ANTLR3_UINT32)(ptr)) +#define ANTLR3_UINT64_CAST(ptr) (ANTLR3_UINT64)((ANTLR3_UINT32)(ptr)) +#define ANTLR3_UINT32_CAST(ptr) (ANTLR3_UINT32)(ptr) +typedef ANTLR3_INT32 ANTLR3_MARKER; +typedef ANTLR3_UINT32 ANTLR3_INTKEY; +#endif +#define ANTLR3_UINT64_LIT(lit) lit##ULL + +#ifdef __cplusplus +} +#endif + +#endif + +#ifdef ANTLR3_USE_64BIT +#define ANTLR3_TRIE_DEPTH 63 +#else +#define ANTLR3_TRIE_DEPTH 31 +#endif +/* Pre declare the typedefs for all the interfaces, then + * they can be inter-dependant and we will let the linker + * sort it out for us. + */ +#include <antlr3interfaces.h> + +// Include the unicode.org conversion library header. +// +#include <antlr3convertutf.h> + +/* Prototypes + */ +#ifndef ANTLR3_MALLOC +/// Default definition of ANTLR3_MALLOC. You can override this before including +/// antlr3.h if you wish to use your own implementation. +/// +#define ANTLR3_MALLOC(request) malloc ((size_t)(request)) +#endif + +#ifndef ANTLR3_CALLOC +/// Default definition of ANTLR3_CALLOC. You can override this before including +/// antlr3.h if you wish to use your own implementation. +/// +#define ANTLR3_CALLOC(numEl, elSize) calloc (numEl, (size_t)(elSize)) +#endif + +#ifndef ANTLR3_REALLOC +/// Default definition of ANTLR3_REALLOC. You can override this before including +/// antlr3.h if you wish to use your own implementation. +/// +#define ANTLR3_REALLOC(current, request) realloc ((void *)(current), (size_t)(request)) +#endif +#ifndef ANTLR3_FREE +/// Default definition of ANTLR3_FREE. You can override this before including +/// antlr3.h if you wish to use your own implementation. +/// +#define ANTLR3_FREE(ptr) free ((void *)(ptr)) +#endif +#ifndef ANTLR3_FREE_FUNC +/// Default definition of ANTLR3_FREE_FUNC . You can override this before including +/// antlr3.h if you wish to use your own implementation. +/// +#define ANTLR3_FREE_FUNC free +#endif +#ifndef ANTLR3_STRDUP +/// Default definition of ANTLR3_STRDUP. You can override this before including +/// antlr3.h if you wish to use your own implementation. +/// +#define ANTLR3_STRDUP(instr) (pANTLR3_UINT8)(strdup ((const char *)(instr))) +#endif +#ifndef ANTLR3_MEMCPY +/// Default definition of ANTLR3_MEMCPY. You can override this before including +/// antlr3.h if you wish to use your own implementation. +/// +#define ANTLR3_MEMCPY(target, source, size) memcpy((void *)(target), (const void *)(source), (size_t)(size)) +#endif +#ifndef ANTLR3_MEMMOVE +/// Default definition of ANTLR3_MEMMOVE. You can override this before including +/// antlr3.h if you wish to use your own implementation. +/// +#define ANTLR3_MEMMOVE(target, source, size) memmove((void *)(target), (const void *)(source), (size_t)(size)) +#endif +#ifndef ANTLR3_MEMSET +/// Default definition of ANTLR3_MEMSET. You can override this before including +/// antlr3.h if you wish to use your own implementation. +/// +#define ANTLR3_MEMSET(target, byte, size) memset((void *)(target), (int)(byte), (size_t)(size)) +#endif + +#ifndef ANTLR3_PRINTF +/// Default definition of printf, set this to something other than printf before including antlr3.h +/// if your system does not have a printf. Note that you can define this to be <code>//</code> +/// without harming the runtime. +/// +#define ANTLR3_PRINTF printf +#endif + +#ifndef ANTLR3_FPRINTF +/// Default definition of fprintf, set this to something other than fprintf before including antlr3.h +/// if your system does not have a fprintf. Note that you can define this to be <code>//</code> +/// without harming the runtime. +/// +#define ANTLR3_FPRINTF fprintf +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +ANTLR3_API pANTLR3_INT_TRIE antlr3IntTrieNew (ANTLR3_UINT32 depth); + +ANTLR3_API pANTLR3_BITSET antlr3BitsetNew (ANTLR3_UINT32 numBits); +ANTLR3_API pANTLR3_BITSET antlr3BitsetOf (ANTLR3_INT32 bit, ...); +ANTLR3_API pANTLR3_BITSET antlr3BitsetList (pANTLR3_HASH_TABLE list); +ANTLR3_API pANTLR3_BITSET antlr3BitsetCopy (pANTLR3_BITSET_LIST blist); +ANTLR3_API pANTLR3_BITSET antlr3BitsetLoad (pANTLR3_BITSET_LIST blist); +ANTLR3_API void antlr3BitsetSetAPI (pANTLR3_BITSET bitset); + + +ANTLR3_API pANTLR3_BASE_RECOGNIZER antlr3BaseRecognizerNew (ANTLR3_UINT32 type, ANTLR3_UINT32 sizeHint, pANTLR3_RECOGNIZER_SHARED_STATE state); +ANTLR3_API void antlr3RecognitionExceptionNew (pANTLR3_BASE_RECOGNIZER recognizer); +ANTLR3_API void antlr3MTExceptionNew (pANTLR3_BASE_RECOGNIZER recognizer); +ANTLR3_API void antlr3MTNExceptionNew (pANTLR3_BASE_RECOGNIZER recognizer); +ANTLR3_API pANTLR3_HASH_TABLE antlr3HashTableNew (ANTLR3_UINT32 sizeHint); +ANTLR3_API ANTLR3_UINT32 antlr3Hash (void * key, ANTLR3_UINT32 keylen); +ANTLR3_API pANTLR3_HASH_ENUM antlr3EnumNew (pANTLR3_HASH_TABLE table); +ANTLR3_API pANTLR3_LIST antlr3ListNew (ANTLR3_UINT32 sizeHint); +ANTLR3_API pANTLR3_VECTOR_FACTORY antlr3VectorFactoryNew (ANTLR3_UINT32 sizeHint); +ANTLR3_API pANTLR3_VECTOR antlr3VectorNew (ANTLR3_UINT32 sizeHint); +ANTLR3_API pANTLR3_STACK antlr3StackNew (ANTLR3_UINT32 sizeHint); +ANTLR3_API void antlr3SetVectorApi (pANTLR3_VECTOR vector, ANTLR3_UINT32 sizeHint); +ANTLR3_API ANTLR3_UCHAR antlr3c8toAntlrc (ANTLR3_INT8 inc); + +ANTLR3_API pANTLR3_EXCEPTION antlr3ExceptionNew (ANTLR3_UINT32 exception, void * name, void * message, ANTLR3_BOOLEAN freeMessage); + +ANTLR3_API pANTLR3_INPUT_STREAM antlr3AsciiFileStreamNew (pANTLR3_UINT8 fileName); + +ANTLR3_API pANTLR3_INPUT_STREAM antlr3NewAsciiStringInPlaceStream (pANTLR3_UINT8 inString, ANTLR3_UINT32 size, pANTLR3_UINT8 name); +ANTLR3_API pANTLR3_INPUT_STREAM antlr3NewUCS2StringInPlaceStream (pANTLR3_UINT16 inString, ANTLR3_UINT32 size, pANTLR3_UINT16 name); +ANTLR3_API pANTLR3_INPUT_STREAM antlr3NewAsciiStringCopyStream (pANTLR3_UINT8 inString, ANTLR3_UINT32 size, pANTLR3_UINT8 name); + +ANTLR3_API pANTLR3_INT_STREAM antlr3IntStreamNew (void); + +ANTLR3_API pANTLR3_STRING_FACTORY antlr3StringFactoryNew (void); +ANTLR3_API pANTLR3_STRING_FACTORY antlr3UCS2StringFactoryNew (void); + +ANTLR3_API pANTLR3_COMMON_TOKEN antlr3CommonTokenNew (ANTLR3_UINT32 ttype); +ANTLR3_API pANTLR3_TOKEN_FACTORY antlr3TokenFactoryNew (pANTLR3_INPUT_STREAM input); +ANTLR3_API void antlr3SetTokenAPI (pANTLR3_COMMON_TOKEN token); + +ANTLR3_API pANTLR3_LEXER antlr3LexerNewStream (ANTLR3_UINT32 sizeHint, pANTLR3_INPUT_STREAM input, pANTLR3_RECOGNIZER_SHARED_STATE state); +ANTLR3_API pANTLR3_LEXER antlr3LexerNew (ANTLR3_UINT32 sizeHint, pANTLR3_RECOGNIZER_SHARED_STATE state); +ANTLR3_API pANTLR3_PARSER antlr3ParserNewStreamDbg (ANTLR3_UINT32 sizeHint, pANTLR3_TOKEN_STREAM tstream, pANTLR3_DEBUG_EVENT_LISTENER dbg, pANTLR3_RECOGNIZER_SHARED_STATE state); +ANTLR3_API pANTLR3_PARSER antlr3ParserNewStream (ANTLR3_UINT32 sizeHint, pANTLR3_TOKEN_STREAM tstream, pANTLR3_RECOGNIZER_SHARED_STATE state); +ANTLR3_API pANTLR3_PARSER antlr3ParserNew (ANTLR3_UINT32 sizeHint, pANTLR3_RECOGNIZER_SHARED_STATE state); + +ANTLR3_API pANTLR3_COMMON_TOKEN_STREAM antlr3CommonTokenStreamSourceNew (ANTLR3_UINT32 hint, pANTLR3_TOKEN_SOURCE source); +ANTLR3_API pANTLR3_COMMON_TOKEN_STREAM antlr3CommonTokenStreamNew (ANTLR3_UINT32 hint); +ANTLR3_API pANTLR3_COMMON_TOKEN_STREAM antlr3CommonTokenDebugStreamSourceNew + (ANTLR3_UINT32 hint, pANTLR3_TOKEN_SOURCE source, pANTLR3_DEBUG_EVENT_LISTENER debugger); + +ANTLR3_API pANTLR3_BASE_TREE_ADAPTOR ANTLR3_TREE_ADAPTORNew (pANTLR3_STRING_FACTORY strFactory); +ANTLR3_API pANTLR3_BASE_TREE_ADAPTOR ANTLR3_TREE_ADAPTORDebugNew (pANTLR3_STRING_FACTORY strFactory, pANTLR3_DEBUG_EVENT_LISTENER debugger); +ANTLR3_API pANTLR3_COMMON_TREE antlr3CommonTreeNew (void); +ANTLR3_API pANTLR3_COMMON_TREE antlr3CommonTreeNewFromTree (pANTLR3_COMMON_TREE tree); +ANTLR3_API pANTLR3_COMMON_TREE antlr3CommonTreeNewFromToken (pANTLR3_COMMON_TOKEN tree); +ANTLR3_API pANTLR3_ARBORETUM antlr3ArboretumNew (pANTLR3_STRING_FACTORY factory); +ANTLR3_API void antlr3SetCTAPI (pANTLR3_COMMON_TREE tree); +ANTLR3_API pANTLR3_BASE_TREE antlr3BaseTreeNew (pANTLR3_BASE_TREE tree); + +ANTLR3_API void antlr3BaseTreeAdaptorInit (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_DEBUG_EVENT_LISTENER debugger); + +ANTLR3_API pANTLR3_TREE_PARSER antlr3TreeParserNewStream (ANTLR3_UINT32 sizeHint, pANTLR3_COMMON_TREE_NODE_STREAM ctnstream, pANTLR3_RECOGNIZER_SHARED_STATE state); + +ANTLR3_API ANTLR3_INT32 antlr3dfaspecialTransition (void * ctx, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_INT_STREAM is, pANTLR3_CYCLIC_DFA dfa, ANTLR3_INT32 s); +ANTLR3_API ANTLR3_INT32 antlr3dfaspecialStateTransition (void * ctx, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_INT_STREAM is, pANTLR3_CYCLIC_DFA dfa, ANTLR3_INT32 s); +ANTLR3_API ANTLR3_INT32 antlr3dfapredict (void * ctx, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_INT_STREAM is, pANTLR3_CYCLIC_DFA cdfa); + +ANTLR3_API pANTLR3_COMMON_TREE_NODE_STREAM antlr3CommonTreeNodeStreamNewTree (pANTLR3_BASE_TREE tree, ANTLR3_UINT32 hint); +ANTLR3_API pANTLR3_COMMON_TREE_NODE_STREAM antlr3CommonTreeNodeStreamNew (pANTLR3_STRING_FACTORY strFactory, ANTLR3_UINT32 hint); +ANTLR3_API pANTLR3_COMMON_TREE_NODE_STREAM antlr3UnbufTreeNodeStreamNewTree (pANTLR3_BASE_TREE tree, ANTLR3_UINT32 hint); +ANTLR3_API pANTLR3_COMMON_TREE_NODE_STREAM antlr3UnbufTreeNodeStreamNew (pANTLR3_STRING_FACTORY strFactory, ANTLR3_UINT32 hint); +ANTLR3_API pANTLR3_COMMON_TREE_NODE_STREAM antlr3CommonTreeNodeStreamNewStream (pANTLR3_COMMON_TREE_NODE_STREAM inStream); +ANTLR3_API pANTLR3_TREE_NODE_STREAM antlr3TreeNodeStreamNew (); +ANTLR3_API void fillBufferExt (pANTLR3_COMMON_TOKEN_STREAM tokenStream); + +ANTLR3_API pANTLR3_REWRITE_RULE_TOKEN_STREAM + antlr3RewriteRuleTOKENStreamNewAE (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description); +ANTLR3_API pANTLR3_REWRITE_RULE_TOKEN_STREAM + antlr3RewriteRuleTOKENStreamNewAEE (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description, void * oneElement); +ANTLR3_API pANTLR3_REWRITE_RULE_TOKEN_STREAM + antlr3RewriteRuleTOKENStreamNewAEV (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description, pANTLR3_VECTOR vector); + +ANTLR3_API pANTLR3_REWRITE_RULE_NODE_STREAM + antlr3RewriteRuleNODEStreamNewAE (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description); +ANTLR3_API pANTLR3_REWRITE_RULE_NODE_STREAM + antlr3RewriteRuleNODEStreamNewAEE (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description, void * oneElement); +ANTLR3_API pANTLR3_REWRITE_RULE_NODE_STREAM + antlr3RewriteRuleNODEStreamNewAEV (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description, pANTLR3_VECTOR vector); + +ANTLR3_API pANTLR3_REWRITE_RULE_SUBTREE_STREAM + antlr3RewriteRuleSubtreeStreamNewAE (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description); +ANTLR3_API pANTLR3_REWRITE_RULE_SUBTREE_STREAM + antlr3RewriteRuleSubtreeStreamNewAEE(pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description, void * oneElement); +ANTLR3_API pANTLR3_REWRITE_RULE_SUBTREE_STREAM + antlr3RewriteRuleSubtreeStreamNewAEV(pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description, pANTLR3_VECTOR vector); + +ANTLR3_API pANTLR3_DEBUG_EVENT_LISTENER antlr3DebugListenerNew (); + +#ifdef __cplusplus +} +#endif + +#endif /* _ANTLR3DEFS_H */ diff --git a/antlr-3.1.3/runtime/C/include/antlr3encodings.h b/antlr-3.1.3/runtime/C/include/antlr3encodings.h new file mode 100644 index 0000000..f706735 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3encodings.h @@ -0,0 +1,38 @@ +#ifndef _ANTLR3_ENCODINGS_H +#define _ANTLR3_ENCODINGS_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> + + + +#endif + diff --git a/antlr-3.1.3/runtime/C/include/antlr3errors.h b/antlr-3.1.3/runtime/C/include/antlr3errors.h new file mode 100644 index 0000000..4419ee3 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3errors.h @@ -0,0 +1,53 @@ +#ifndef _ANTLR3ERRORS_H +#define _ANTLR3ERRORS_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#define ANTLR3_SUCCESS 0 +#define ANTLR3_FAIL 1 + +#define ANTLR3_TRUE 1 +#define ANTLR3_FALSE 0 + +/** Indicates end of character stream and is an invalid Unicode code point. */ +#define ANTLR3_CHARSTREAM_EOF 0xFFFFFFFF + +/** Indicates memoizing on a rule failed. + */ +#define MEMO_RULE_FAILED 0xFFFFFFFE +#define MEMO_RULE_UNKNOWN 0xFFFFFFFF + + +#define ANTLR3_ERR_BASE 0 +#define ANTLR3_ERR_NOMEM (ANTLR3_ERR_BASE + 1) +#define ANTLR3_ERR_NOFILE (ANTLR3_ERR_BASE + 2) +#define ANTLR3_ERR_HASHDUP (ANTLR3_ERR_BASE + 3) + +#endif /* _ANTLR3ERRORS_H */ diff --git a/antlr-3.1.3/runtime/C/include/antlr3exception.h b/antlr-3.1.3/runtime/C/include/antlr3exception.h new file mode 100644 index 0000000..a135126 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3exception.h @@ -0,0 +1,218 @@ +/** \file + * Contains the definition of a basic ANTLR3 exception structure created + * by a recognizer when errors are found/predicted. + */ +#ifndef _ANTLR3_EXCEPTION_H +#define _ANTLR3_EXCEPTION_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> + +/** Indicates that the recognizer received a token + * in the input that was not predicted. + */ +#define ANTLR3_RECOGNITION_EXCEPTION 1 + +/** Name of exception #ANTLR3_RECOGNITION_EXCEPTION + */ +#define ANTLR3_RECOGNITION_EX_NAME "Recognition Exception" + +/** Indicates that the recognizer was expecting one token and found a + * a different one. + */ +#define ANTLR3_MISMATCHED_TOKEN_EXCEPTION 2 + +/** Name of #ANTLR3_MISMATCHED_TOKEN_EXCEPTION + */ +#define ANTLR3_MISMATCHED_EX_NAME "Mismatched Token Exception" + +/** Recognizer could not find a valid alternative from the input + */ +#define ANTLR3_NO_VIABLE_ALT_EXCEPTION 3 + +/** Name of #ANTLR3_NO_VIABLE_ALT_EXCEPTION + */ +#define ANTLR3_NO_VIABLE_ALT_NAME "No Viable Alt" + +/* Character in a set was not found + */ +#define ANTLR3_MISMATCHED_SET_EXCEPTION 4 + +/* Name of #ANTLR3_MISMATCHED_SET_EXCEPTION + */ +#define ANTLR3_MISMATCHED_SET_NAME "Mismatched set" + +/* A rule predicting at least n elements found less than that, + * such as: WS: " "+; + */ +#define ANTLR3_EARLY_EXIT_EXCEPTION 5 + +/* Name of #ANTLR3_EARLY_EXIT_EXCEPTION + */ +#define ANTLR3_EARLY_EXIT_NAME "Early exit" + +#define ANTLR3_FAILED_PREDICATE_EXCEPTION 6 +#define ANTLR3_FAILED_PREDICATE_NAME "Predicate failed!" + +#define ANTLR3_MISMATCHED_TREE_NODE_EXCEPTION 7 +#define ANTLR3_MISMATCHED_TREE_NODE_NAME "Mismatched tree node!" + +#define ANTLR3_REWRITE_EARLY_EXCEPTION 8 +#define ANTLR3_REWRITE_EARLY_EXCEPTION_NAME "Mismatched tree node!" + +#define ANTLR3_UNWANTED_TOKEN_EXCEPTION 9 +#define ANTLR3_UNWANTED_TOKEN_EXCEPTION_NAME "Extraneous token" + +#define ANTLR3_MISSING_TOKEN_EXCEPTION 10 +#define ANTLR3_MISSING_TOKEN_EXCEPTION_NAME "Missing token" + +#ifdef __cplusplus +extern "C" { +#endif + +/** Base structure for an ANTLR3 exception tracker + */ +typedef struct ANTLR3_EXCEPTION_struct +{ + /// Set to one of the exception type defines: + /// + /// - #ANTLR3_RECOGNITION_EXCEPTION + /// - #ANTLR3_MISMATCHED_TOKEN_EXCEPTION + /// - #ANTLR3_NO_VIABLE_ALT_EXCEPTION + /// - #ANTLR3_MISMATCHED_SET_EXCEPTION + /// - #ANTLR3_EARLY_EXIT_EXCEPTION + /// - #ANTLR3_FAILED_PREDICATE_EXCEPTION + /// - #ANTLR3_EARLY_EXIT_EXCEPTION + /// + ANTLR3_UINT32 type; + + /** The string name of the exception + */ + void * name; + + /** The printable message that goes with this exception, in your preferred + * encoding format. ANTLR just uses ASCII by default but you can ignore these + * messages or convert them to another format or whatever of course. They are + * really internal messages that you then decide how to print out in a form that + * the users of your product will understand, as they are unlikely to know what + * to do with "Recognition exception at: [[TOK_GERUND..... " ;-) + */ + void * message; + + /** Name of the file/input source for reporting. Note that this may be NULL!! + */ + pANTLR3_STRING streamName; + + /** If set to ANTLR3_TRUE, this indicates that the message element of this structure + * should be freed by calling ANTLR3_FREE() when the exception is destroyed. + */ + ANTLR3_BOOLEAN freeMessage; + + /** Indicates the index of the 'token' we were looking at when the + * exception occurred. + */ + ANTLR3_MARKER index; + + /** Indicates what the current token/tree was when the error occurred. Since not + * all input streams will be able to retrieve the nth token, we track it here + * instead. This is for parsers, and even tree parsers may set this. + */ + void * token; + + /** Indicates the token we were expecting to see next when the error occurred + */ + ANTLR3_UINT32 expecting; + + /** Indicates a set of tokens that we were expecting to see one of when the + * error occurred. It is a following bitset list, so you can use load it and use ->toIntList() on it + * to generate an array of integer tokens that it represents. + */ + pANTLR3_BITSET_LIST expectingSet; + + /** If this is a tree parser exception then the node is set to point to the node + * that caused the issue. + */ + void * node; + + /** The current character when an error occurred - for lexers. + */ + ANTLR3_UCHAR c; + + /** Track the line at which the error occurred in case this is + * generated from a lexer. We need to track this since the + * unexpected char doesn't carry the line info. + */ + ANTLR3_UINT32 line; + + /** Character position in the line where the error occurred. + */ + ANTLR3_INT32 charPositionInLine; + + /** decision number for NVE + */ + ANTLR3_UINT32 decisionNum; + + /** State for NVE + */ + ANTLR3_UINT32 state; + + /** Rule name for failed predicate exception + */ + void * ruleName; + + /** Pointer to the next exception in the chain (if any) + */ + struct ANTLR3_EXCEPTION_struct * nextException; + + /** Pointer to the input stream that this exception occurred in. + */ + pANTLR3_INT_STREAM input; + + /** Pointer for you, the programmer to add anything you like to an exception. + */ + void * custom; + + /** Pointer to a routine that is called to free the custom exception structure + * when the exception is destroyed. Set to NULL if nothing should be done. + */ + void (*freeCustom) (void * custom); + void (*print) (struct ANTLR3_EXCEPTION_struct * ex); + void (*freeEx) (struct ANTLR3_EXCEPTION_struct * ex); + +} + ANTLR3_EXCEPTION; + +#ifdef __cplusplus +} +#endif + + +#endif diff --git a/antlr-3.1.3/runtime/C/include/antlr3filestream.h b/antlr-3.1.3/runtime/C/include/antlr3filestream.h new file mode 100644 index 0000000..5576563 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3filestream.h @@ -0,0 +1,50 @@ +#ifndef _ANTLR3_FILESTREAM_H +#define _ANTLR3_FILESTREAM_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> + +#ifdef __cplusplus +extern "C" { +#endif + +ANTLR3_API ANTLR3_FDSC antlr3Fopen (pANTLR3_UINT8 filename, const char * mode); +ANTLR3_API void antlr3Fclose (ANTLR3_FDSC fd); + +ANTLR3_API ANTLR3_UINT32 antlr3Fsize (pANTLR3_UINT8 filename); +ANTLR3_API ANTLR3_UINT32 antlr3readAscii (pANTLR3_INPUT_STREAM input, pANTLR3_UINT8 fileName); +ANTLR3_API ANTLR3_UINT32 antlr3Fread (ANTLR3_FDSC fdsc, ANTLR3_UINT32 count, void * data); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/antlr-3.1.3/runtime/C/include/antlr3input.h b/antlr-3.1.3/runtime/C/include/antlr3input.h new file mode 100644 index 0000000..1ed37f7 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3input.h @@ -0,0 +1,270 @@ +/** \file + * Defines the basic structures used to manipulate character + * streams from any input source. The first implementation of + * this stream was ASCII 8 bit, but any character size and encoding + * can in theory be used, so long as they can return a 32 bit Integer + * representation of their characters amd efficiently mark and revert + * to specific offsets into their input streams. + */ +#ifndef _ANTLR3_INPUT_H +#define _ANTLR3_INPUT_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> +#include <antlr3string.h> +#include <antlr3commontoken.h> +#include <antlr3intstream.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/// Master context structure for an ANTLR3 C runtime based input stream. +/// \ingroup apistructures +/// +typedef struct ANTLR3_INPUT_STREAM_struct +{ + /** Interfaces that provide streams must all provide + * a generic ANTLR3_INT_STREAM interface and an ANTLR3_INPUT_STREAM + * is no different. + */ + pANTLR3_INT_STREAM istream; + + /** Whatever super structure is providing the INPUT stream needs a pointer to itself + * so that this can be passed back to it whenever the api functions + * are called back from this interface. + */ + void * super; + + /// Indicates the size, in 8 bit units, of a single character. Note that + /// the C runtime does not deal with surrogates and UTF8 directly as this would be + /// slow and complicated. Variable character width inputs are expected to be converted + /// into fixed width formats, so that would be a UTF32 format for anything that cannot + /// work with a UCS2 encoding, such as UTF-8. Generally you are best + /// working internally with 32 bit characters. + /// + ANTLR3_UINT8 charByteSize; + + /** Pointer the start of the input string, characters may be + * taken as offsets from here and in original input format encoding. + */ + void * data; + + /** Indicates if the data pointer was allocated by us, and so should be freed + * when the stream dies. + */ + int isAllocated; + + /** String factory for this input stream + */ + pANTLR3_STRING_FACTORY strFactory; + + + /** Pointer to the next character to be consumed from the input data + * This is cast to point at the encoding of the original file that + * was read by the functions installed as pointer in this input stream + * context instance at file/string/whatever load time. + */ + void * nextChar; + + /** Number of characters that can be consumed at this point in time. + * Mostly this is just what is left in the pre-read buffer, but if the + * input source is a stream such as a socket or something then we may + * call special read code to wait for more input. + */ + ANTLR3_UINT32 sizeBuf; + + /** The line number we are traversing in the input file. This gets incremented + * by a newline() call in the lexer grammar actions. + */ + ANTLR3_UINT32 line; + + /** Pointer into the input buffer where the current line + * started. + */ + void * currentLine; + + /** The offset within the current line of the current character + */ + ANTLR3_INT32 charPositionInLine; + + /** Tracks how deep mark() calls are nested + */ + ANTLR3_UINT32 markDepth; + + /** List of mark() points in the input stream + */ + pANTLR3_VECTOR markers; + + /** File name string, set to pointer to memory if + * you set it manually as it will be free()d + */ + pANTLR3_STRING fileName; + + /** File number, needs to be set manually to some file index of your devising. + */ + ANTLR3_UINT32 fileNo; + + /** Character that automatically causes an internal line count + * increment. + */ + ANTLR3_UCHAR newlineChar; + + /* API */ + + + /** Pointer to function that closes the input stream + */ + void (*close) (struct ANTLR3_INPUT_STREAM_struct * input); + void (*free) (struct ANTLR3_INPUT_STREAM_struct * input); + + /** Pointer to function that resets the input stream + */ + void (*reset) (struct ANTLR3_INPUT_STREAM_struct * input); + + /** + * Pinter to function that installs a version of LA that always + * returns upper case. Only valid for character streams and creates a case + * insensitive lexer if the lexer tokens are described in upper case. The + * tokens will preserve case in the token text. + */ + void (*setUcaseLA) (pANTLR3_INPUT_STREAM input, ANTLR3_BOOLEAN flag); + + /** Pointer to function to return input stream element at 1 based + * offset from nextChar. Same as _LA for char stream, but token + * streams etc. have one of these that does other stuff of course. + */ + void * (*_LT) (struct ANTLR3_INPUT_STREAM_struct * input, ANTLR3_INT32 lt); + + /** Pointer to function to return the total size of the input buffer. For streams + * this may be just the total we have available so far. This means of course that + * the input stream must be careful to accumulate enough input so that any backtracking + * can be satisfied. + */ + ANTLR3_UINT32 (*size) (struct ANTLR3_INPUT_STREAM_struct * input); + + /** Pointer to function to return a substring of the input stream. String is returned in allocated + * memory and is in same encoding as the input stream itself, NOT internal ANTLR3_UCHAR form. + */ + pANTLR3_STRING (*substr) (struct ANTLR3_INPUT_STREAM_struct * input, ANTLR3_MARKER start, ANTLR3_MARKER stop); + + /** Pointer to function to return the current line number in the input stream + */ + ANTLR3_UINT32 (*getLine) (struct ANTLR3_INPUT_STREAM_struct * input); + + /** Pointer to function to return the current line buffer in the input stream + * The pointer returned is directly into the input stream so you must copy + * it if you wish to manipulate it without damaging the input stream. Encoding + * is obviously in the same form as the input stream. + * \remark + * - Note taht this function wil lbe inaccurate if setLine is called as there + * is no way at the moment to position the input stream at a particular line + * number offset. + */ + void * (*getLineBuf) (struct ANTLR3_INPUT_STREAM_struct * input); + + /** Pointer to function to return the current offset in the current input stream line + */ + ANTLR3_UINT32 (*getCharPositionInLine) (struct ANTLR3_INPUT_STREAM_struct * input); + + /** Pointer to function to set the current line number in the input stream + */ + void (*setLine) (struct ANTLR3_INPUT_STREAM_struct * input, ANTLR3_UINT32 line); + + /** Pointer to function to set the current position in the current line. + */ + void (*setCharPositionInLine) (struct ANTLR3_INPUT_STREAM_struct * input, ANTLR3_UINT32 position); + + /** Pointer to function to override the default newline character that the input stream + * looks for to trigger the line and offset and line buffer recording information. + * \remark + * - By default the chracter '\n' will be instaleldas tehe newline trigger character. When this + * character is seen by the consume() function then the current line number is incremented and the + * current line offset is reset to 0. The Pointer for the line of input we are consuming + * is updated to point to the next character after this one in the input stream (which means it + * may become invlaid if the last newline character in the file is seen (so watch out). + * - If for some reason you do not want teh counters and pointesr to be restee, yu can set the + * chracter to some impossible charater such as '\0' or whatever. + * - This is a single character only, so choose the last chracter in a sequence of two or more. + * - This is only a simple aid to error reporting - if you have a complicated binary inptu structure + * it may not be adequate, but you can always override every function in the input stream with your + * own of course, and can even write your own complete input stream set if you like. + * - It is your responsiblity to set a valid cahracter for the input stream type. Ther is no point + * setting this to 0xFFFFFFFF if the input stream is 8 bit ASCII as this will just be truncated and never + * trigger as the comparison will be (INT32)0xFF == (INT32)0xFFFFFFFF + */ + void (*SetNewLineChar) (struct ANTLR3_INPUT_STREAM_struct * input, ANTLR3_UINT32 newlineChar); + +} + + ANTLR3_INPUT_STREAM; + + +/** \brief Structure for track lex input states as part of mark() + * and rewind() of lexer. + */ +typedef struct ANTLR3_LEX_STATE_struct +{ + /** Pointer to the next character to be consumed from the input data + * This is cast to point at the encoding of the original file that + * was read by the functions installed as pointer in this input stream + * context instance at file/string/whatever load time. + */ + void * nextChar; + + /** The line number we are traversing in the input file. This gets incremented + * by a newline() call in the lexer grammer actions. + */ + ANTLR3_UINT32 line; + + /** Pointer into the input buffer where the current line + * started. + */ + void * currentLine; + + /** The offset within the current line of the current character + */ + ANTLR3_INT32 charPositionInLine; + +} + ANTLR3_LEX_STATE; + + /* Prototypes + */ + void antlr3AsciiSetupStream (pANTLR3_INPUT_STREAM input, ANTLR3_UINT32 type); + void antlr3UCS2SetupStream (pANTLR3_INPUT_STREAM input, ANTLR3_UINT32 type); + void antlr3GenericSetupStream (pANTLR3_INPUT_STREAM input, ANTLR3_UINT32 type); + +#ifdef __cplusplus +} +#endif + +#endif /* _ANTLR3_INPUT_H */ diff --git a/antlr-3.1.3/runtime/C/include/antlr3interfaces.h b/antlr-3.1.3/runtime/C/include/antlr3interfaces.h new file mode 100644 index 0000000..efae932 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3interfaces.h @@ -0,0 +1,234 @@ +/** \file + * Declarations for all the antlr3 C runtime interfaces/classes. This + * allows the structures that define the interfaces to contain pointers to + * each other without trying to sort out the cyclic interdependencies that + * would otherwise result. + */ +#ifndef _ANTLR3_INTERFACES_H +#define _ANTLR3_INTERFACES_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANTLR3_INT_STREAM_struct *pANTLR3_INT_STREAM; + +/// Pointer to an instantiation of the 'class' #ANTLR3_BASE_RECOGNIZER +/// \ingroup ANTLR3_BASE_RECOGNIZER +/// +typedef struct ANTLR3_BASE_RECOGNIZER_struct *pANTLR3_BASE_RECOGNIZER; +/// Pointer to an instantiation of 'class' #ANTLR3_RECOGNIZER_SHARED_STATE +/// \ingroup ANTLR3_RECOGNIZER_SHARED_STATE +/// +typedef struct ANTLR3_RECOGNIZER_SHARED_STATE_struct *pANTLR3_RECOGNIZER_SHARED_STATE; + +/// Pointer to an instantiation of 'class' #ANTLR3_BITSET_LIST +/// \ingroup ANTLR3_BITSET_LIST +/// +typedef struct ANTLR3_BITSET_LIST_struct *pANTLR3_BITSET_LIST; + +/// Pointer to an instantiation of 'class' #ANTLR3_BITSET +/// \ingroup ANTLR3_BITSET +/// +typedef struct ANTLR3_BITSET_struct *pANTLR3_BITSET; + +/// Pointer to an instantiation of 'class' #ANTLR3_TOKEN_FACTORY +/// \ingroup ANTLR3_TOKEN_FACTORY +/// +typedef struct ANTLR3_TOKEN_FACTORY_struct *pANTLR3_TOKEN_FACTORY; +/// Pointer to an instantiation of 'class' #ANTLR3_COMMON_TOKEN +/// \ingroup ANTLR3_COMMON_TOKEN +/// +typedef struct ANTLR3_COMMON_TOKEN_struct *pANTLR3_COMMON_TOKEN; + +/// Pointer to an instantiation of 'class' #ANTLR3_EXCEPTION +/// \ingroup ANTLR3_EXCEPTION +/// +typedef struct ANTLR3_EXCEPTION_struct *pANTLR3_EXCEPTION; + +/// Pointer to an instantiation of 'class' #ANTLR3_HASH_BUCKET +/// \ingroup ANTLR3_HASH_BUCKET +/// +typedef struct ANTLR3_HASH_BUCKET_struct *pANTLR3_HASH_BUCKET; +/// Pointer to an instantiation of 'class' #ANTLR3_HASH_ENTRY +/// \ingroup ANTLR3_HASH_ENTRY +/// +typedef struct ANTLR3_HASH_ENTRY_struct *pANTLR3_HASH_ENTRY; +/// Pointer to an instantiation of 'class' #ANTLR3_HASH_ENUM +/// \ingroup ANTLR3_HASH_ENUM +/// +typedef struct ANTLR3_HASH_ENUM_struct *pANTLR3_HASH_ENUM; +/// Pointer to an instantiation of 'class' #ANTLR3_HASH_TABLE +/// \ingroup ANTLR3_HASH_TABLE +/// +typedef struct ANTLR3_HASH_TABLE_struct *pANTLR3_HASH_TABLE; + +/// Pointer to an instantiation of 'class' #ANTLR3_LIST +/// \ingroup ANTLR3_LIST +/// +typedef struct ANTLR3_LIST_struct *pANTLR3_LIST; +/// Pointer to an instantiation of 'class' #ANTLR3_VECTOR_FACTORY +/// \ingroup ANTLR3_VECTOR_FACTORY +/// +typedef struct ANTLR3_VECTOR_FACTORY_struct *pANTLR3_VECTOR_FACTORY; +/// Pointer to an instantiation of 'class' #ANTLR3_VECTOR +/// \ingroup ANTLR3_VECTOR +/// +typedef struct ANTLR3_VECTOR_struct *pANTLR3_VECTOR; +/// Pointer to an instantiation of 'class' #ANTLR3_STACK +/// \ingroup ANTLR3_STACK +/// +typedef struct ANTLR3_STACK_struct *pANTLR3_STACK; + +/// Pointer to an instantiation of 'class' #ANTLR3_INPUT_STREAM +/// \ingroup ANTLR3_INPUT_STREAM +/// +typedef struct ANTLR3_INPUT_STREAM_struct *pANTLR3_INPUT_STREAM; +/// Pointer to an instantiation of 'class' #ANTLR3_LEX_STATE +/// \ingroup ANTLR3_LEX_STATE +/// +typedef struct ANTLR3_LEX_STATE_struct *pANTLR3_LEX_STATE; + +/// Pointer to an instantiation of 'class' #ANTLR3_STRING_FACTORY +/// \ingroup ANTLR3_STRING_FACTORY +/// +typedef struct ANTLR3_STRING_FACTORY_struct *pANTLR3_STRING_FACTORY; +/// Pointer to an instantiation of 'class' #ANTLR3_STRING +/// \ingroup ANTLR3_STRING +/// +typedef struct ANTLR3_STRING_struct *pANTLR3_STRING; + +/// Pointer to an instantiation of 'class' #ANTLR3_TOKEN_SOURCE +/// \ingroup ANTLR3_TOKEN_SOURCE +/// +typedef struct ANTLR3_TOKEN_SOURCE_struct *pANTLR3_TOKEN_SOURCE; +/// Pointer to an instantiation of 'class' #ANTLR3_TOKEN_STREAM +/// \ingroup ANTLR3_TOKEN_STREAM +/// +typedef struct ANTLR3_TOKEN_STREAM_struct *pANTLR3_TOKEN_STREAM; +/// Pointer to an instantiation of 'class' #ANTLR3_COMMON_TOKEN_STREAM +/// \ingroup ANTLR3_COMMON_TOKEN_STREAM +/// +typedef struct ANTLR3_COMMON_TOKEN_STREAM_struct *pANTLR3_COMMON_TOKEN_STREAM; + +/// Pointer to an instantiation of 'class' #ANTLR3_CYCLIC_DFA +/// \ingroup ANTLR3_CYCLIC_DFA +/// +typedef struct ANTLR3_CYCLIC_DFA_struct *pANTLR3_CYCLIC_DFA; + +/// Pointer to an instantiation of 'class' #ANTLR3_LEXER +/// \ingroup ANTLR3_LEXER +/// +typedef struct ANTLR3_LEXER_struct *pANTLR3_LEXER; +/// Pointer to an instantiation of 'class' #ANTLR3_PARSER +/// \ingroup ANTLR3_PARSER +/// +typedef struct ANTLR3_PARSER_struct *pANTLR3_PARSER; + +/// Pointer to an instantiation of 'class' #ANTLR3_BASE_TREE +/// \ingroup ANTLR3_BASE_TREE +/// +typedef struct ANTLR3_BASE_TREE_struct *pANTLR3_BASE_TREE; +/// Pointer to an instantiation of 'class' #ANTLR3_COMMON_TREE +/// \ingroup ANTLR3_COMMON_TREE +/// +typedef struct ANTLR3_COMMON_TREE_struct *pANTLR3_COMMON_TREE; +/// Pointer to an instantiation of 'class' #ANTLR3_ARBORETUM +/// \ingroup ANTLR3_ARBORETUM +/// +typedef struct ANTLR3_ARBORETUM_struct *pANTLR3_ARBORETUM; +/// Pointer to an instantiation of 'class' #ANTLR3_PARSE_TREE +/// \ingroup ANTLR3_PARSE_TREE +/// +typedef struct ANTLR3_PARSE_TREE_struct *pANTLR3_PARSE_TREE; + +/// Pointer to an instantiation of 'class' #ANTLR3_TREE_NODE_STREAM +/// \ingroup ANTLR3_TREE_NODE_STREAM +/// +typedef struct ANTLR3_TREE_NODE_STREAM_struct *pANTLR3_TREE_NODE_STREAM; +/// Pointer to an instantiation of 'class' #ANTLR3_COMMON_TREE_NODE_STREAM +/// \ingroup ANTLR3_COMMON_TREE_NODE_STREAM +/// +typedef struct ANTLR3_COMMON_TREE_NODE_STREAM_struct *pANTLR3_COMMON_TREE_NODE_STREAM; +/// Pointer to an instantiation of 'class' #ANTLR3_TREE_WALK_STATE +/// \ingroup ANTLR3_TREE_WALK_STATE +/// +typedef struct ANTLR3_TREE_WALK_STATE_struct *pANTLR3_TREE_WALK_STATE; + +/// Pointer to an instantiation of 'class' #ANTLR3_BASE_TREE_ADAPTOR +/// \ingroup ANTLR3_BASE_TREE_ADAPTOR +/// +typedef struct ANTLR3_BASE_TREE_ADAPTOR_struct *pANTLR3_BASE_TREE_ADAPTOR; +/// Pointer to an instantiation of 'class' #ANTLR3_COMMON_TREE_ADAPTOR +/// \ingroup ANTLR3_COMMON_TREE_ADAPTOR +/// +typedef struct ANTLR3_COMMON_TREE_ADAPTOR_struct *pANTLR3_COMMON_TREE_ADAPTOR; + +/// Pointer to an instantiation of 'class' #ANTLR3_TREE_PARSER +/// \ingroup ANTLR3_TREE_PARSER +/// +typedef struct ANTLR3_TREE_PARSER_struct *pANTLR3_TREE_PARSER; + +/// Pointer to an instantiation of 'class' #ANTLR3_INT_TRIE +/// \ingroup ANTLR3_INT_TRIE +/// +typedef struct ANTLR3_INT_TRIE_struct *pANTLR3_INT_TRIE; + +/// Pointer to an instantiation of 'class' #ANTLR3_REWRITE_RULE_ELEMENT_STREAM +/// \ingroup ANTLR3_REWRITE_RULE_ELEMENT_STREAM +/// +typedef struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct *pANTLR3_REWRITE_RULE_ELEMENT_STREAM; +/// Pointer to an instantiation of 'class' #ANTLR3_REWRITE_RULE_ELEMENT_STREAM +/// \ingroup ANTLR3_REWRITE_RULE_ELEMENT_STREAM +/// +typedef struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct *pANTLR3_REWRITE_RULE_TOKEN_STREAM; + +/// Pointer to an instantiation of 'class' #ANTLR3_REWRITE_RULE_SUBSTREE_STREAM +/// \ingroup ANTLR3_REWRITE_RULE_SUBTREE_STREAM +/// +typedef struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct *pANTLR3_REWRITE_RULE_SUBTREE_STREAM; + +/// Pointer to an instantiation of 'class' #ANTLR3_REWRITE_RULE_NODE_STREAM +/// \ingroup ANTLR3_REWRITE_RULE_NODE_STREAM +/// +typedef struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct *pANTLR3_REWRITE_RULE_NODE_STREAM; + +/// Pointer to an instantiation of 'class' #ANTLR3_DEBUG_EVENT_LISTENER +/// \ingroup ANTLR3_DEBUG_EVENT_LISTENER +/// +typedef struct ANTLR3_DEBUG_EVENT_LISTENER_struct *pANTLR3_DEBUG_EVENT_LISTENER; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/antlr-3.1.3/runtime/C/include/antlr3intstream.h b/antlr-3.1.3/runtime/C/include/antlr3intstream.h new file mode 100644 index 0000000..21bac5b --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3intstream.h @@ -0,0 +1,205 @@ +/** \file + * Defines the the class interface for an antlr3 INTSTREAM. + * + * Certain functionality (such as DFAs for instance) abstract the stream of tokens + * or characters in to a steam of integers. Hence this structure should be included + * in any stream that is able to provide the output as a stream of integers (which is anything + * basically. + * + * There are no specific implementations of the methods in this interface in general. Though + * for purposes of casting and so on, it may be necesssary to implement a function with + * the signature in this interface which abstracts the base immplementation. In essence though + * the base stream provides a pointer to this interface, within which it installs its + * normal match() functions and so on. Interaces such as DFA are then passed the pANTLR3_INT_STREAM + * and can treat any input as an int stream. + * + * For instance, a lexer implements a pANTLR3_BASE_RECOGNIZER, within which there is a pANTLR3_INT_STREAM. + * However, a pANTLR3_INPUT_STREAM also provides a pANTLR3_INT_STREAM, which it has constructed from + * it's normal interface when it was created. This is then pointed at by the pANTLR_BASE_RECOGNIZER + * when it is intialized with a pANTLR3_INPUT_STREAM. + * + * Similarly if a pANTLR3_BASE_RECOGNIZER is initialized with a pANTLR3_TOKEN_STREAM, then the + * pANTLR3_INT_STREAM is taken from the pANTLR3_TOKEN_STREAM. + * + * If a pANTLR3_BASE_RECOGNIZER is initialized with a pANTLR3_TREENODE_STREAM, then guess where + * the pANTLR3_INT_STREAM comes from? + * + * Note that because the context pointer points to the actual interface structure that is providing + * the ANTLR3_INT_STREAM it is defined as a (void *) in this interface. There is no direct implementation + * of an ANTLR3_INT_STREAM (unless someone did not understand what I was doing here =;?P + */ +#ifndef _ANTLR3_INTSTREAM_H +#define _ANTLR3_INTSTREAM_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> +#include <antlr3commontoken.h> + +/** Type indicator for a character stream + * \remark if a custom stream is created but it can be treated as + * a char stream, then you may OR in this value to your type indicator + */ +#define ANTLR3_CHARSTREAM 0x0001 + +/** Type indicator for a Token stream + * \remark if a custom stream is created but it can be treated as + * a token stream, then you may OR in this value to your type indicator + */ +#define ANTLR3_TOKENSTREAM 0x0002 + +/** Type indicator for a common tree node stream + * \remark if a custom stream is created but it can be treated as + * a common tree node stream, then you may OR in this value to your type indicator + */ +#define ANTLR3_COMMONTREENODE 0x0004 + +/** Type mask for input stream so we can switch in the above types + * \remark DO NOT USE 0x0000 as a stream type! + */ +#define ANTLR3_INPUT_MASK 0x0007 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANTLR3_INT_STREAM_struct +{ + /** Input stream type indicator. Sometimes useful for error reporting etc. + */ + ANTLR3_UINT32 type; + + /** Potentially useful in error reporting and so on, this string is + * an identification of the input source. It may be NULL, so anything + * attempting to access it needs to check this and substitute a sensible + * default. + */ + pANTLR3_STRING streamName; + + /** Pointer to the super structure that contains this interface. This + * will usually be a token stream or a tree stream. + */ + void * super; + + /** Last marker position allocated + */ + ANTLR3_MARKER lastMarker; + + // Return a string that identifies the input source + // + pANTLR3_STRING (*getSourceName) (struct ANTLR3_INT_STREAM_struct * intStream); + + /** Consume the next 'ANTR3_UINT32' in the stream + */ + void (*consume) (struct ANTLR3_INT_STREAM_struct * intStream); + + /** Get ANTLR3_UINT32 at current input pointer + i ahead where i=1 is next ANTLR3_UINT32 + */ + ANTLR3_UINT32 (*_LA) (struct ANTLR3_INT_STREAM_struct * intStream, ANTLR3_INT32 i); + + /** Tell the stream to start buffering if it hasn't already. Return + * current input position, index(), or some other marker so that + * when passed to rewind() you get back to the same spot. + * rewind(mark()) should not affect the input cursor. + */ + ANTLR3_MARKER (*mark) (struct ANTLR3_INT_STREAM_struct * intStream); + + /** Return the current input symbol index 0..n where n indicates the + * last symbol has been read. + */ + ANTLR3_MARKER (*index) (struct ANTLR3_INT_STREAM_struct * intStream); + + /** Reset the stream so that next call to index would return marker. + * The marker will usually be index() but it doesn't have to be. It's + * just a marker to indicate what state the stream was in. This is + * essentially calling release() and seek(). If there are markers + * created after this marker argument, this routine must unroll them + * like a stack. Assume the state the stream was in when this marker + * was created. + */ + void (*rewind) (struct ANTLR3_INT_STREAM_struct * intStream, ANTLR3_MARKER marker); + + /** Reset the stream to the last marker position, witouh destryoing the + * last marker position. + */ + void (*rewindLast) (struct ANTLR3_INT_STREAM_struct * intStream); + + /** You may want to commit to a backtrack but don't want to force the + * stream to keep bookkeeping objects around for a marker that is + * no longer necessary. This will have the same behavior as + * rewind() except it releases resources without the backward seek. + */ + void (*release) (struct ANTLR3_INT_STREAM_struct * intStream, ANTLR3_MARKER mark); + + /** Set the input cursor to the position indicated by index. This is + * normally used to seek ahead in the input stream. No buffering is + * required to do this unless you know your stream will use seek to + * move backwards such as when backtracking. + * + * This is different from rewind in its multi-directional + * requirement and in that its argument is strictly an input cursor (index). + * + * For char streams, seeking forward must update the stream state such + * as line number. For seeking backwards, you will be presumably + * backtracking using the mark/rewind mechanism that restores state and + * so this method does not need to update state when seeking backwards. + * + * Currently, this method is only used for efficient backtracking, but + * in the future it may be used for incremental parsing. + */ + void (*seek) (struct ANTLR3_INT_STREAM_struct * intStream, ANTLR3_MARKER index); + + /** Only makes sense for streams that buffer everything up probably, but + * might be useful to display the entire stream or for testing. + */ + ANTLR3_UINT32 (*size) (struct ANTLR3_INT_STREAM_struct * intStream); + + /** Because the indirect call, though small in individual cases can + * mount up if there are thousands of tokens (very large input streams), callers + * of size can optionally use this cached size field. + */ + ANTLR3_UINT32 cachedSize; + + /** Frees any resources that were allocated for the implementation of this + * interface. Usually this is just releasing the memory allocated + * for the structure itself, but it may of course do anything it need to + * so long as it does not stamp on anything else. + */ + void (*free) (struct ANTLR3_INT_STREAM_struct * stream); + +} + ANTLR3_INT_STREAM; + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/antlr-3.1.3/runtime/C/include/antlr3lexer.h b/antlr-3.1.3/runtime/C/include/antlr3lexer.h new file mode 100644 index 0000000..3955748 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3lexer.h @@ -0,0 +1,195 @@ +/** \file + * Base interface for any ANTLR3 lexer. + * + * An ANLTR3 lexer builds from two sets of components: + * + * - The runtime components that provide common functionality such as + * traversing character streams, building tokens for output and so on. + * - The generated rules and struutre of the actual lexer, which call upon the + * runtime components. + * + * A lexer class contains a character input stream, a base recognizer interface + * (which it will normally implement) and a token source interface (which it also + * implements. The Tokensource interface is called by a token consumer (such as + * a parser, but in theory it can be anything that wants a set of abstract + * tokens in place of a raw character stream. + * + * So then, we set up a lexer in a sequence akin to: + * + * - Create a character stream (something which implements ANTLR3_INPUT_STREAM) + * and initialize it. + * - Create a lexer interface and tell it where it its input stream is. + * This will cause the creation of a base recognizer class, which it will + * override with its own implementations of some methods. The lexer creator + * can also then in turn override anything it likes. + * - The lexer token source interface is then passed to some interface that + * knows how to use it, byte calling for a next token. + * - When a next token is called, let ze lexing begin. + * + */ +#ifndef _ANTLR3_LEXER +#define _ANTLR3_LEXER + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* Definitions + */ +#define ANTLR3_STRING_TERMINATOR 0xFFFFFFFF + +#include <antlr3defs.h> +#include <antlr3input.h> +#include <antlr3commontoken.h> +#include <antlr3tokenstream.h> +#include <antlr3baserecognizer.h> + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANTLR3_LEXER_struct +{ + /** If there is a super structure that is implementing the + * lexer, then a pointer to it can be stored here in case + * implementing functions are overridden by this super structure. + */ + void * super; + + /** A generated lexer has an mTokens() function, which needs + * the context pointer of the generated lexer, not the base lexer interface + * this is stored here and initialized by the generated code (or manually + * if this is a manually built lexer. + */ + void * ctx; + + /** A pointer to the character stream whence this lexer is receiving + * characters. + * TODO: I may come back to this and implement charstream outside + * the input stream as per the java implementation. + */ + pANTLR3_INPUT_STREAM input; + + /** Pointer to the implementation of a base recognizer, which the lexer + * creates and then overrides with its own lexer oriented functions (the + * default implementation is parser oriented). This also contains a + * token source interface, which the lexer instance will provide to anything + * that needs it, which is anything else that implements a base recognizer, + * such as a parser. + */ + pANTLR3_BASE_RECOGNIZER rec; + + /** Pointer to a function that sets the charstream source for the lexer and + * causes it to be reset. + */ + void (*setCharStream) (struct ANTLR3_LEXER_struct * lexer, pANTLR3_INPUT_STREAM input); + + /** Pointer to a function that switches the current character input stream to + * a new one, saving the old one, which we will revert to at the end of this + * new one. + */ + void (*pushCharStream) (struct ANTLR3_LEXER_struct * lexer, pANTLR3_INPUT_STREAM input); + + /** Pointer to a function that abandons the current input stream, whether it + * is empty or not and reverts to the previous stacked input stream. + */ + void (*popCharStream) (struct ANTLR3_LEXER_struct * lexer); + + /** Pointer to a function that emits the supplied token as the next token in + * the stream. + */ + void (*emitNew) (struct ANTLR3_LEXER_struct * lexer, pANTLR3_COMMON_TOKEN token); + + /** Pointer to a function that constructs a new token from the lexer stored information + */ + pANTLR3_COMMON_TOKEN (*emit) (struct ANTLR3_LEXER_struct * lexer); + + /** Pointer to the user provided (either manually or through code generation + * function that causes the lexer rules to run the lexing rules and produce + * the next token if there iss one. This is called from nextToken() in the + * pANTLR3_TOKEN_SOURCE. Note that the input parameter for this funciton is + * the generated lexer context (stored in ctx in this interface) it is a generated + * function and expects the context to be the generated lexer. + */ + void (*mTokens) (void * ctx); + + /** Pointer to a function that attempts to match and consume the specified string from the input + * stream. Note that strings muse be passed as terminated arrays of ANTLR3_UCHAR. Strings are terminated + * with 0xFFFFFFFF, which is an invalid UTF32 character + */ + ANTLR3_BOOLEAN (*matchs) (struct ANTLR3_LEXER_struct * lexer, ANTLR3_UCHAR * string); + + /** Pointer to a function that matches and consumes the specified character from the input stream. + * As the input stream is required to provide characters via LA() as UTF32 characters it does not + * need to provide an implementation if it is not sourced from 8 bit ASCII. The default lexer + * implementation is source encoding agnostic, unless for some reason it takes two 32 bit characters + * to specify a single character, in which case the input stream and the lexer rules would have to match + * in encoding and then it would work 'by accident' anyway. + */ + ANTLR3_BOOLEAN (*matchc) (struct ANTLR3_LEXER_struct * lexer, ANTLR3_UCHAR c); + + /** Pointer to a function that matches any character in the supplied range (I suppose it could be a token range too + * but this would only be useful if the tokens were in tsome guaranteed order which is + * only going to happen with a hand crafted token set). + */ + ANTLR3_BOOLEAN (*matchRange) (struct ANTLR3_LEXER_struct * lexer, ANTLR3_UCHAR low, ANTLR3_UCHAR high); + + /** Pointer to a function that matches the next token/char in the input stream + * regardless of what it actaully is. + */ + void (*matchAny) (struct ANTLR3_LEXER_struct * lexer); + + /** Pointer to a function that recovers from an error found in the input stream. + * Generally, this will be a #ANTLR3_EXCEPTION_NOVIABLE_ALT but it could also + * be from a mismatched token that the (*match)() could not recover from. + */ + void (*recover) (struct ANTLR3_LEXER_struct * lexer); + + /** Pointer to function to return the current line number in the input stream + */ + ANTLR3_UINT32 (*getLine) (struct ANTLR3_LEXER_struct * lexer); + ANTLR3_MARKER (*getCharIndex) (struct ANTLR3_LEXER_struct * lexer); + ANTLR3_UINT32 (*getCharPositionInLine)(struct ANTLR3_LEXER_struct * lexer); + + /** Pointer to function to return the text so far for the current token being generated + */ + pANTLR3_STRING (*getText) (struct ANTLR3_LEXER_struct * lexer); + + + /** Pointer to a function that knows how to free the resources of a lexer + */ + void (*free) (struct ANTLR3_LEXER_struct * lexer); + +} + ANTLR3_LEXER; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/antlr-3.1.3/runtime/C/include/antlr3memory.h b/antlr-3.1.3/runtime/C/include/antlr3memory.h new file mode 100644 index 0000000..5e2d4c9 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3memory.h @@ -0,0 +1,36 @@ +#ifndef _ANTLR3MEMORY_H +#define _ANTLR3MEMORY_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> + + +#endif /* _ANTLR3MEMORY_H */ diff --git a/antlr-3.1.3/runtime/C/include/antlr3parser.h b/antlr-3.1.3/runtime/C/include/antlr3parser.h new file mode 100644 index 0000000..95b7d18 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3parser.h @@ -0,0 +1,93 @@ +/** \file + * Base implementation of an ANTLR3 parser. + * + * + */ +#ifndef _ANTLR3_PARSER_H +#define _ANTLR3_PARSER_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> +#include <antlr3baserecognizer.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** This is the main interface for an ANTLR3 parser. + */ +typedef struct ANTLR3_PARSER_struct +{ + /** All superstructure implementers of this interface require a pointer to their selves, + * which they can reference using the super pointer here. + */ + void * super; + + /** A pointer to the base recognizer, where most of the parser functions actually + * live because they are shared between parser and tree parser and this is the + * easier way than copying the interface all over the place. Macros hide this + * for the generated code so it is easier on the eye (though not the debugger ;-). + */ + pANTLR3_BASE_RECOGNIZER rec; + + /** A provider of a tokenstream interface, for the parser to consume + * tokens from. + */ + pANTLR3_TOKEN_STREAM tstream; + + /** A pointer to a function that installs a debugger object (it also + * installs the debugging versions of the parser methods. This means that + * a non debug parser incurs no overhead because of the debugging stuff. + */ + void (*setDebugListener) (struct ANTLR3_PARSER_struct * parser, pANTLR3_DEBUG_EVENT_LISTENER dbg); + + /** A pointer to a function that installs a token stream + * for the parser. + */ + void (*setTokenStream) (struct ANTLR3_PARSER_struct * parser, pANTLR3_TOKEN_STREAM); + + /** A pointer to a function that returns the token stream for this + * parser. + */ + pANTLR3_TOKEN_STREAM (*getTokenStream) (struct ANTLR3_PARSER_struct * parser); + + /** Pointer to a function that knows how to free resources of an ANTLR3 parser. + */ + void (*free) (struct ANTLR3_PARSER_struct * parser); + +} + ANTLR3_PARSER; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/antlr-3.1.3/runtime/C/include/antlr3parsetree.h b/antlr-3.1.3/runtime/C/include/antlr3parsetree.h new file mode 100644 index 0000000..0e8c157 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3parsetree.h @@ -0,0 +1,85 @@ +/** \file + * Abstraction of Common tree to provide payload and string representation of node. + * + * \todo May not need this in the end + */ + +#ifndef ANTLR3_PARSETREE_H +#define ANTLR3_PARSETREE_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3basetree.h> + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ANTLR3_PARSE_TREE_struct +{ + /** Any interface that implements methods in this interface + * may need to point back to itself using this pointer to its + * super structure. + */ + void * super; + + /** The payload that the parse tree node passes around + */ + void * payload; + + /** An encapsulated BASE TREE strcuture (NOT a pointer) + * that perfoms a lot of the dirty work of node management + */ + ANTLR3_BASE_TREE baseTree; + + /** How to dup this node + */ + pANTLR3_BASE_TREE (*dupNode) (struct ANTLR3_PARSE_TREE_struct * tree); + + /** Return the type of this node + */ + ANTLR3_UINT32 (*getType) (struct ANTLR3_PARSE_TREE_struct * tree); + + /** Return the string representation of the payload (must be installed + * when the payload is added and point to a function that knwos how to + * manifest a pANTLR3_STRING from a node. + */ + pANTLR3_STRING (*toString) (struct ANTLR3_PARSE_TREE_struct * payload); + + void (*free) (struct ANTLR3_PARSE_TREE_struct * tree); + +} + ANTLR3_PARSE_TREE; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/antlr-3.1.3/runtime/C/include/antlr3recognizersharedstate.h b/antlr-3.1.3/runtime/C/include/antlr3recognizersharedstate.h new file mode 100644 index 0000000..9e024d8 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3recognizersharedstate.h @@ -0,0 +1,218 @@ +/** \file + * While the C runtime does not need to model the state of + * multiple lexers and parsers in the same way as the Java runtime does + * it is no overhead to reflect that model. In fact the + * C runtime has always been able to share recognizer state. + * + * This 'class' therefore defines all the elements of a recognizer + * (either lexer, parser or tree parser) that are need to + * track the current recognition state. Multiple recognizers + * may then share this state, for instance when one grammar + * imports another. + */ + +#ifndef _ANTLR3_RECOGNIZER_SHARED_STATE_H +#define _ANTLR3_RECOGNIZER_SHARED_STATE_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** All the data elements required to track the current state + * of any recognizer (lexer, parser, tree parser). + * May be share between multiple recognizers such that + * grammar inheritance is easily supported. + */ +typedef struct ANTLR3_RECOGNIZER_SHARED_STATE_struct +{ + /** If set to ANTLR3_TRUE then the recognizer has an exception + * condition (this is tested by the generated code for the rules of + * the grammar). + */ + ANTLR3_BOOLEAN error; + + /** Points to the first in a possible chain of exceptions that the + * recognizer has discovered. + */ + pANTLR3_EXCEPTION exception; + + /** Track around a hint from the creator of the recognizer as to how big this + * thing is going to get, as the actress said to the bishop. This allows us + * to tune hash tables accordingly. This might not be the best place for this + * in the end but we will see. + */ + ANTLR3_UINT32 sizeHint; + + /** Track the set of token types that can follow any rule invocation. + * Stack structure, to support: List<BitSet>. + */ + pANTLR3_STACK following; + + + /** This is true when we see an error and before having successfully + * matched a token. Prevents generation of more than one error message + * per error. + */ + ANTLR3_BOOLEAN errorRecovery; + + /** The index into the input stream where the last error occurred. + * This is used to prevent infinite loops where an error is found + * but no token is consumed during recovery...another error is found, + * ad nauseam. This is a failsafe mechanism to guarantee that at least + * one token/tree node is consumed for two errors. + */ + ANTLR3_MARKER lastErrorIndex; + + /** In lieu of a return value, this indicates that a rule or token + * has failed to match. Reset to false upon valid token match. + */ + ANTLR3_BOOLEAN failed; + + /** When the recognizer terminates, the error handling functions + * will have incremented this value if any error occurred (that was displayed). It can then be + * used by the grammar programmer without having to use static globals. + */ + ANTLR3_UINT32 errorCount; + + /** If 0, no backtracking is going on. Safe to exec actions etc... + * If >0 then it's the level of backtracking. + */ + ANTLR3_INT32 backtracking; + + /** ANTLR3_VECTOR of ANTLR3_LIST for rule memoizing. + * Tracks the stop token index for each rule. ruleMemo[ruleIndex] is + * the memoization table for ruleIndex. For key ruleStartIndex, you + * get back the stop token for associated rule or MEMO_RULE_FAILED. + * + * This is only used if rule memoization is on. + */ + pANTLR3_INT_TRIE ruleMemo; + + /** Pointer to an array of token names + * that are generally useful in error reporting. The generated parsers install + * this pointer. The table it points to is statically allocated as 8 bit ascii + * at parser compile time - grammar token names are thus restricted in character + * sets, which does not seem to terrible. + */ + pANTLR3_UINT8 * tokenNames; + + /** User programmable pointer that can be used for instance as a place to + * store some tracking structure specific to the grammar that would not normally + * be available to the error handling functions. + */ + void * userp; + + /** The goal of all lexer rules/methods is to create a token object. + * This is an instance variable as multiple rules may collaborate to + * create a single token. For example, NUM : INT | FLOAT ; + * In this case, you want the INT or FLOAT rule to set token and not + * have it reset to a NUM token in rule NUM. + */ + pANTLR3_COMMON_TOKEN token; + + /** The goal of all lexer rules being to create a token, then a lexer + * needs to build a token factory to create them. + */ + pANTLR3_TOKEN_FACTORY tokFactory; + + /** A lexer is a source of tokens, produced by all the generated (or + * hand crafted if you like) matching rules. As such it needs to provide + * a token source interface implementation. + */ + pANTLR3_TOKEN_SOURCE tokSource; + + /** The channel number for the current token + */ + ANTLR3_UINT32 channel; + + /** The token type for the current token + */ + ANTLR3_UINT32 type; + + /** The input line (where it makes sense) on which the first character of the current + * token resides. + */ + ANTLR3_INT32 tokenStartLine; + + /** The character position of the first character of the current token + * within the line specified by tokenStartLine + */ + ANTLR3_INT32 tokenStartCharPositionInLine; + + /** What character index in the stream did the current token start at? + * Needed, for example, to get the text for current token. Set at + * the start of nextToken. + */ + ANTLR3_MARKER tokenStartCharIndex; + + /** Text for the current token. This can be overridden by setting this + * variable directly or by using the SETTEXT() macro (preferred) in your + * lexer rules. + */ + pANTLR3_STRING text; + + /** User controlled variables that will be installed in a newly created + * token. + */ + ANTLR3_UINT32 user1, user2, user3; + void * custom; + + /** Input stream stack, which allows the C programmer to switch input streams + * easily and allow the standard nextToken() implementation to deal with it + * as this is a common requirement. + */ + pANTLR3_STACK streams; + + /// A stack of token/tree rewrite streams that are available for use + /// by a parser or tree parser that is using rewrites to generate + /// an AST. This saves each rule in the recongizer from having to + /// allocate and deallocate rewtire streams on entry and exit. As + /// the parser recurses throgh the rules it will reach a steady state + /// of the maximum number of allocated streams, which instead of + /// deallocating them at rule exit, it will place on this stack for + /// reuse. The streams are then all finally freed when this stack + /// is freed. + /// + pANTLR3_VECTOR rStreams; + +} + ANTLR3_RECOGNIZER_SHARED_STATE; + +#ifdef __cplusplus +} +#endif + +#endif + + diff --git a/antlr-3.1.3/runtime/C/include/antlr3rewritestreams.h b/antlr-3.1.3/runtime/C/include/antlr3rewritestreams.h new file mode 100644 index 0000000..bf83fe9 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3rewritestreams.h @@ -0,0 +1,180 @@ +#ifndef ANTLR3REWRITESTREAM_H +#define ANTLR3REWRITESTREAM_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> +#include <antlr3collections.h> +#include <antlr3commontreeadaptor.h> +#include <antlr3baserecognizer.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/// A generic list of elements tracked in an alternative to be used in +/// a -> rewrite rule. +/// +/// In the C implementation, all tree oriented streams return a pointer to +/// the same type: pANTLR3_BASE_TREE. Anything that has subclassed from this +/// still passes this type, within which there is a super pointer, which points +/// to it's own data and methods. Hence we do not need to implement this as +/// the equivalent of an abstract class, but just fill in the appropriate interface +/// as usual with this model. +/// +/// Once you start next()ing, do not try to add more elements. It will +/// break the cursor tracking I believe. +/// +/// +/// \see #pANTLR3_REWRITE_RULE_NODE_STREAM +/// \see #pANTLR3_REWRITE_RULE_ELEMENT_STREAM +/// \see #pANTLR3_REWRITE_RULE_SUBTREE_STREAM +/// +/// TODO: add mechanism to detect/puke on modification after reading from stream +/// +typedef struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct +{ + + /// Cursor 0..n-1. If singleElement!=NULL, cursor is 0 until you next(), + /// which bumps it to 1 meaning no more elements. + /// + ANTLR3_UINT32 cursor; + + /// Track single elements w/o creating a list. Upon 2nd add, alloc list + /// + void * singleElement; + + /// The list of tokens or subtrees we are tracking + /// + pANTLR3_VECTOR elements; + + /// Indicates whether we should free the vector or it was supplied to us + /// + ANTLR3_BOOLEAN freeElements; + + /// The element or stream description; usually has name of the token or + /// rule reference that this list tracks. Can include rulename too, but + /// the exception would track that info. + /// + void * elementDescription; + + /// Pointer to the tree adaptor in use for this stream + /// + pANTLR3_BASE_TREE_ADAPTOR adaptor; + + /// Once a node / subtree has been used in a stream, it must be dup'ed + /// from then on. Streams are reset after sub rules so that the streams + /// can be reused in future sub rules. So, reset must set a dirty bit. + /// If dirty, then next() always returns a dup. + /// + ANTLR3_BOOLEAN dirty; + + // Pointer to the recognizer shared state to which this stream belongs + // + pANTLR3_BASE_RECOGNIZER rec; + + // Methods + + /// Reset the condition of this stream so that it appears we have + /// not consumed any of its elements. Elements themselves are untouched. + /// + void (*reset) (struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct * stream); + + /// Add a new pANTLR3_BASE_TREE to this stream + /// + void (*add) (struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct * stream, void *el, void (ANTLR3_CDECL *freePtr)(void *)); + + /// Return the next element in the stream. If out of elements, throw + /// an exception unless size()==1. If size is 1, then return elements[0]. + /// + void * (*next) (struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct * stream); + pANTLR3_BASE_TREE (*nextTree) (struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct * stream); + void * (*nextToken) (struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct * stream); + void * (*_next) (struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct * stream); + + /// When constructing trees, sometimes we need to dup a token or AST + /// subtree. Dup'ing a token means just creating another AST node + /// around it. For trees, you must call the adaptor.dupTree(). + /// + void * (*dup) (struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct * stream, void * el); + + /// Ensure stream emits trees; tokens must be converted to AST nodes. + /// AST nodes can be passed through unmolested. + /// + pANTLR3_BASE_TREE (*toTree) (struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct * stream, void * el); + + /// Returns ANTLR3_TRUE if there is a next element available + /// + ANTLR3_BOOLEAN (*hasNext) (struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct * stream); + + /// Treat next element as a single node even if it's a subtree. + /// This is used instead of next() when the result has to be a + /// tree root node. Also prevents us from duplicating recently-added + /// children; e.g., ^(type ID)+ adds ID to type and then 2nd iteration + /// must dup the type node, but ID has been added. + /// + /// Referencing to a rule result twice is ok; dup entire tree as + /// we can't be adding trees; e.g., expr expr. + /// + pANTLR3_BASE_TREE (*nextNode) (struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct * stream); + + /// Number of elements available in the stream + /// + ANTLR3_UINT32 (*size) (struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct * stream); + + /// Returns the description string if there is one available (check for NULL). + /// + void * (*getDescription) (struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct * stream); + + void (*free) (struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct * stream); + +} + ANTLR3_REWRITE_RULE_ELEMENT_STREAM; + +/// This is an implementation of a token stream, which is basically an element +/// stream that deals with tokens only. +/// +typedef struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct ANTLR3_REWRITE_RULE_TOKEN_STREAM; + +/// This is an implementation of a subtree stream which is a set of trees +/// modelled as an element stream. +/// +typedef struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct ANTLR3_REWRITE_RULE_SUBTREE_STREAM; + +/// This is an implementation of a node stream, which is basically an element +/// stream that deals with tree nodes only. +/// +typedef struct ANTLR3_REWRITE_RULE_ELEMENT_STREAM_struct ANTLR3_REWRITE_RULE_NODE_STREAM; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/antlr-3.1.3/runtime/C/include/antlr3string.h b/antlr-3.1.3/runtime/C/include/antlr3string.h new file mode 100644 index 0000000..6e83afb --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3string.h @@ -0,0 +1,273 @@ +/** \file + * Simple string interface allows indiscriminate allocation of strings + * such that they can be allocated all over the place and released in + * one chunk via a string factory - saves lots of hassle in remembering what + * strings were allocated where. + */ +#ifndef _ANTLR3_STRING_H +#define _ANTLR3_STRING_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> +#include <antlr3collections.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** Base string class tracks the allocations and provides simple string + * tracking functions. Mostly you can work directly on the string for things + * that don't reallocate it, like strchr() etc. Perhaps someone will want to provide implementations for UTF8 + * and so on. + */ +typedef struct ANTLR3_STRING_struct +{ + + /** The factory that created this string + */ + pANTLR3_STRING_FACTORY factory; + + /** Pointer to the current string value (starts at NULL unless + * the string allocator is told to create it with a pre known size. + */ + pANTLR3_UINT8 chars; + + /** Current length of the string up to and not including, the trailing '\0' + * Note that the actual allocation (->size) + * is always at least one byte more than this to accommodate trailing '\0' + */ + ANTLR3_UINT32 len; + + /** Current size of the string in bytes including the trailing '\0' + */ + ANTLR3_UINT32 size; + + /** Index of string (allocation number) in case someone wants + * to explicitly release it. + */ + ANTLR3_UINT32 index; + + /** Occasionally it is useful to know what the encoding of the string + * actually is, hence it is stored here as one the ANTLR3_ENCODING_ values + */ + ANTLR3_UINT8 encoding; + + /** Pointer to function that sets the string value to a specific string in the default encoding + * for this string. For instance, if this is ASCII 8 bit, then this function is the same as set8 + * but if the encoding is 16 bit, then the pointer is assumed to point to 16 bit characters not + * 8 bit. + */ + pANTLR3_UINT8 (*set) (struct ANTLR3_STRING_struct * string, const char * chars); + + /** Pointer to function that sets the string value to a specific 8 bit string in the default encoding + * for this string. For instance, if this is a 16 bit string, then this function is the same as set8 + * but if the encoding is 16 bit, then the pointer is assumed to point to 8 bit characters that must + * be converted to 16 bit characters on the fly. + */ + pANTLR3_UINT8 (*set8) (struct ANTLR3_STRING_struct * string, const char * chars); + + /** Pointer to function adds a raw char * type pointer in the default encoding + * for this string. For instance, if this is ASCII 8 bit, then this function is the same as append8 + * but if the encoding is 16 bit, then the pointer is assumed to point to 16 bit characters not + * 8 bit. + */ + pANTLR3_UINT8 (*append) (struct ANTLR3_STRING_struct * string, const char * newbit); + + /** Pointer to function adds a raw char * type pointer in the default encoding + * for this string. For instance, if this is a 16 bit string, then this function assumes the pointer + * points to 8 bit characters that must be converted on the fly. + */ + pANTLR3_UINT8 (*append8) (struct ANTLR3_STRING_struct * string, const char * newbit); + + /** Pointer to function that inserts the supplied string at the specified + * offset in the current string in the default encoding for this string. For instance, if this is an 8 + * bit string, then this is the same as insert8, but if this is a 16 bit string, then the poitner + * must point to 16 bit characters. + * + */ + pANTLR3_UINT8 (*insert) (struct ANTLR3_STRING_struct * string, ANTLR3_UINT32 point, const char * newbit); + + /** Pointer to function that inserts the supplied string at the specified + * offset in the current string in the default encoding for this string. For instance, if this is a 16 bit string + * then the pointer is assumed to point at 8 bit characteres that must be converted on the fly. + */ + pANTLR3_UINT8 (*insert8) (struct ANTLR3_STRING_struct * string, ANTLR3_UINT32 point, const char * newbit); + + /** Pointer to function that sets the string value to a copy of the supplied string (strings must be in the + * same encoding. + */ + pANTLR3_UINT8 (*setS) (struct ANTLR3_STRING_struct * string, struct ANTLR3_STRING_struct * chars); + + /** Pointer to function appends a copy of the characters contained in another string. Strings must be in the + * same encoding. + */ + pANTLR3_UINT8 (*appendS) (struct ANTLR3_STRING_struct * string, struct ANTLR3_STRING_struct * newbit); + + /** Pointer to function that inserts a copy of the characters in the supplied string at the specified + * offset in the current string. strings must be in the same encoding. + */ + pANTLR3_UINT8 (*insertS) (struct ANTLR3_STRING_struct * string, ANTLR3_UINT32 point, struct ANTLR3_STRING_struct * newbit); + + /** Pointer to function that inserts the supplied integer in string form at the specified + * offset in the current string. + */ + pANTLR3_UINT8 (*inserti) (struct ANTLR3_STRING_struct * string, ANTLR3_UINT32 point, ANTLR3_INT32 i); + + /** Pointer to function that adds a single character to the end of the string, in the encoding of the + * string - 8 bit, 16 bit, utf-8 etc. Input is a single UTF32 (32 bits wide integer) character. + */ + pANTLR3_UINT8 (*addc) (struct ANTLR3_STRING_struct * string, ANTLR3_UINT32 c); + + /** Pointer to function that adds the stringified representation of an integer + * to the string. + */ + pANTLR3_UINT8 (*addi) (struct ANTLR3_STRING_struct * string, ANTLR3_INT32 i); + + /** Pointer to function that compares the text of a string to the supplied + * 8 bit character string and returns a result a la strcmp() + */ + ANTLR3_UINT32 (*compare8) (struct ANTLR3_STRING_struct * string, const char * compStr); + + /** Pointer to a function that compares the text of a string with the supplied character string + * (which is assumed to be in the same encoding as the string itself) and returns a result + * a la strcmp() + */ + ANTLR3_UINT32 (*compare) (struct ANTLR3_STRING_struct * string, const char * compStr); + + /** Pointer to a function that compares the text of a string with the supplied string + * (which is assumed to be in the same encoding as the string itself) and returns a result + * a la strcmp() + */ + ANTLR3_UINT32 (*compareS) (struct ANTLR3_STRING_struct * string, struct ANTLR3_STRING_struct * compStr); + + /** Pointer to a function that returns the character indexed at the supplied + * offset as a 32 bit character. + */ + ANTLR3_UCHAR (*charAt) (struct ANTLR3_STRING_struct * string, ANTLR3_UINT32 offset); + + /** Pointer to a function that returns a substring of the supplied string a la .subString(s,e) + * in the Java language. + */ + struct ANTLR3_STRING_struct * + (*subString) (struct ANTLR3_STRING_struct * string, ANTLR3_UINT32 startIndex, ANTLR3_UINT32 endIndex); + + /** Pointer to a function that returns the integer representation of any numeric characters + * at the beginning of the string + */ + ANTLR3_INT32 (*toInt32) (struct ANTLR3_STRING_struct * string); + + /** Pointer to a function that yields an 8 bit string regardless of the encoding of the supplied + * string. This is useful when you want to use the text of a token in some way that requires an 8 bit + * value, such as the key for a hashtable. The function is required to produce a usable string even + * if the text given as input has characters that do not fit in 8 bit space, it will replace them + * with some arbitrary character such as '?' + */ + struct ANTLR3_STRING_struct * + (*to8) (struct ANTLR3_STRING_struct * string); + + /// Pointer to a function that yields a UT8 encoded string of the current string, + /// regardless of the current encoding of the string. Because there is currently no UTF8 + /// handling in the string class, it creates therefore, a string that is useful only for read only + /// applications as it will not contain methods that deal with UTF8 at the moment. + /// + struct ANTLR3_STRING_struct * + (*toUTF8) (struct ANTLR3_STRING_struct * string); + +} + ANTLR3_STRING; + +/** Definition of the string factory interface, which creates and tracks + * strings for you of various shapes and sizes. + */ +typedef struct ANTLR3_STRING_FACTORY_struct +{ + /** List of all the strings that have been allocated by the factory + */ + pANTLR3_VECTOR strings; + + /* Index of next string that we allocate + */ + ANTLR3_UINT32 index; + + /** Pointer to function that manufactures an empty string + */ + pANTLR3_STRING (*newRaw) (struct ANTLR3_STRING_FACTORY_struct * factory); + + /** Pointer to function that manufactures a raw string with no text in it but space for size + * characters. + */ + pANTLR3_STRING (*newSize) (struct ANTLR3_STRING_FACTORY_struct * factory, ANTLR3_UINT32 size); + + /** Pointer to function that manufactures a string from a given pointer and length. The pointer is assumed + * to point to characters in the same encoding as the string type, hence if this is a 16 bit string the + * pointer should point to 16 bit characters. + */ + pANTLR3_STRING (*newPtr) (struct ANTLR3_STRING_FACTORY_struct * factory, pANTLR3_UINT8 string, ANTLR3_UINT32 size); + + /** Pointer to function that manufactures a string from a given pointer and length. The pointer is assumed to + * point at 8 bit characters which must be converted on the fly to the encoding of the actual string. + */ + pANTLR3_STRING (*newPtr8) (struct ANTLR3_STRING_FACTORY_struct * factory, pANTLR3_UINT8 string, ANTLR3_UINT32 size); + + /** Pointer to function that manufactures a string from a given pointer and works out the length. The pointer is + * assumed to point to characters in the same encoding as the string itself, i.e. 16 bit if a 16 bit + * string and so on. + */ + pANTLR3_STRING (*newStr) (struct ANTLR3_STRING_FACTORY_struct * factory, pANTLR3_UINT8 string); + + /** Pointer to function that manufactures a string from a given pointer and length. The pointer should + * point to 8 bit characters regardless of the actual encoding of the string. The 8 bit characters + * will be converted to the actual string encoding on the fly. + */ + pANTLR3_STRING (*newStr8) (struct ANTLR3_STRING_FACTORY_struct * factory, pANTLR3_UINT8 string); + + /** Pointer to function that deletes the string altogether + */ + void (*destroy) (struct ANTLR3_STRING_FACTORY_struct * factory, pANTLR3_STRING string); + + /** Pointer to function that returns a copy of the string in printable form without any control + * characters in it. + */ + pANTLR3_STRING (*printable)(struct ANTLR3_STRING_FACTORY_struct * factory, pANTLR3_STRING string); + + /** Pointer to function that closes the factory + */ + void (*close) (struct ANTLR3_STRING_FACTORY_struct * factory); + +} + ANTLR3_STRING_FACTORY; + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/antlr-3.1.3/runtime/C/include/antlr3stringstream.h b/antlr-3.1.3/runtime/C/include/antlr3stringstream.h new file mode 100644 index 0000000..6d5a0a4 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3stringstream.h @@ -0,0 +1,36 @@ +#ifndef _ANTLR3_STRINGSTREAM_H +#define _ANTLR3_STRINGSTREAM_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> + + +#endif diff --git a/antlr-3.1.3/runtime/C/include/antlr3tokenstream.h b/antlr-3.1.3/runtime/C/include/antlr3tokenstream.h new file mode 100644 index 0000000..3a826ae --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3tokenstream.h @@ -0,0 +1,293 @@ +/** \file + * Defines the interface for an ANTLR3 common token stream. Custom token streams should create + * one of these and then override any functions by installing their own pointers + * to implement the various functions. + */ +#ifndef _ANTLR3_TOKENSTREAM_H +#define _ANTLR3_TOKENSTREAM_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> +#include <antlr3string.h> +#include <antlr3collections.h> +#include <antlr3input.h> +#include <antlr3commontoken.h> +#include <antlr3bitset.h> +#include <antlr3debugeventlistener.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** Definition of a token source, which has a pointer to a function that + * returns the next token (using a token factory if it is going to be + * efficient) and a pointer to an ANTLR3_INPUT_STREAM. This is slightly + * different to the Java interface because we have no way to implement + * multiple interfaces without defining them in the interface structure + * or casting (void *), which is too convoluted. + */ +typedef struct ANTLR3_TOKEN_SOURCE_struct +{ + /** Pointer to a function that returns the next token in the stream. + */ + pANTLR3_COMMON_TOKEN (*nextToken)(struct ANTLR3_TOKEN_SOURCE_struct * tokenSource); + + /** Whoever is providing tokens, needs to provide a string factory too + */ + pANTLR3_STRING_FACTORY strFactory; + + /** A special pre-allocated token, which signifies End Of Tokens. Because this must + * be set up with the current input index and so on, we embed the structure and + * return the address of it. It is marked as factoryMade, so that it is never + * attempted to be freed. + */ + ANTLR3_COMMON_TOKEN eofToken; + + /// A special pre-allocated token, which is returned by mTokens() if the + /// lexer rule said to just skip the generated token altogether. + /// Having this single token stops us wasting memory by have the token factory + /// actually create something that we are going to SKIP(); anyway. + /// + ANTLR3_COMMON_TOKEN skipToken; + + /** Whatever is supplying the token source interface, needs a pointer to + * itself so that this pointer can be passed to it when the nextToken + * function is called. + */ + void * super; + + /** When the token source is constructed, it is populated with the file + * name from whence the tokens were produced by the lexer. This pointer is a + * copy of the one supplied by the CharStream (and may be NULL) so should + * not be manipulated other than to copy or print it. + */ + pANTLR3_STRING fileName; +} + ANTLR3_TOKEN_SOURCE; + +/** Definition of the ANTLR3 common token stream interface. + * \remark + * Much of the documentation for this interface is stolen from Ter's Java implementation. + */ +typedef struct ANTLR3_TOKEN_STREAM_struct +{ + /** Pointer to the token source for this stream + */ + pANTLR3_TOKEN_SOURCE tokenSource; + + /** Whatever is providing this interface needs a pointer to itself + * so that this can be passed back to it whenever the api functions + * are called. + */ + void * super; + + /** All input streams implement the ANTLR3_INT_STREAM interface... + */ + pANTLR3_INT_STREAM istream; + + /// Debugger interface, is this is a debugging token stream + /// + pANTLR3_DEBUG_EVENT_LISTENER debugger; + + /// Indicates the initial stream state for dbgConsume() + /// + ANTLR3_BOOLEAN initialStreamState; + + /** Get Token at current input pointer + i ahead where i=1 is next Token. + * i<0 indicates tokens in the past. So -1 is previous token and -2 is + * two tokens ago. LT(0) is undefined. For i>=n, return Token.EOFToken. + * Return null for LT(0) and any index that results in an absolute address + * that is negative. + */ + pANTLR3_COMMON_TOKEN (*_LT) (struct ANTLR3_TOKEN_STREAM_struct * tokenStream, ANTLR3_INT32 k); + + /** Get a token at an absolute index i; 0..n-1. This is really only + * needed for profiling and debugging and token stream rewriting. + * If you don't want to buffer up tokens, then this method makes no + * sense for you. Naturally you can't use the rewrite stream feature. + * I believe DebugTokenStream can easily be altered to not use + * this method, removing the dependency. + */ + pANTLR3_COMMON_TOKEN (*get) (struct ANTLR3_TOKEN_STREAM_struct * tokenStream, ANTLR3_UINT32 i); + + /** Where is this stream pulling tokens from? This is not the name, but + * a pointer into an interface that contains a ANTLR3_TOKEN_SOURCE interface. + * The Token Source interface contains a pointer to the input stream and a pointer + * to a function that returns the next token. + */ + pANTLR3_TOKEN_SOURCE (*getTokenSource) (struct ANTLR3_TOKEN_STREAM_struct * tokenStream); + + /** Function that installs a token source for teh stream + */ + void (*setTokenSource) (struct ANTLR3_TOKEN_STREAM_struct * tokenStream, + pANTLR3_TOKEN_SOURCE tokenSource); + + /** Return the text of all the tokens in the stream, as the old tramp in + * Leeds market used to say; "Get the lot!" + */ + pANTLR3_STRING (*toString) (struct ANTLR3_TOKEN_STREAM_struct * tokenStream); + + /** Return the text of all tokens from start to stop, inclusive. + * If the stream does not buffer all the tokens then it can just + * return an empty ANTLR3_STRING or NULL; Grammars should not access $ruleLabel.text in + * an action in that case. + */ + pANTLR3_STRING (*toStringSS) (struct ANTLR3_TOKEN_STREAM_struct * tokenStream, ANTLR3_UINT32 start, ANTLR3_UINT32 stop); + + /** Because the user is not required to use a token with an index stored + * in it, we must provide a means for two token objects themselves to + * indicate the start/end location. Most often this will just delegate + * to the other toString(int,int). This is also parallel with + * the pTREENODE_STREAM->toString(Object,Object). + */ + pANTLR3_STRING (*toStringTT) (struct ANTLR3_TOKEN_STREAM_struct * tokenStream, pANTLR3_COMMON_TOKEN start, pANTLR3_COMMON_TOKEN stop); + + + /** Function that sets the token stream into debugging mode + */ + void (*setDebugListener) (struct ANTLR3_TOKEN_STREAM_struct * tokenStream, pANTLR3_DEBUG_EVENT_LISTENER debugger); + + /** Function that knows how to free the memory for an ANTLR3_TOKEN_STREAM + */ + void (*free) (struct ANTLR3_TOKEN_STREAM_struct * tokenStream); +} + ANTLR3_TOKEN_STREAM; + +/** Common token stream is an implementation of ANTLR_TOKEN_STREAM for the default + * parsers and recognizers. You may of course build your own implementation if + * you are so inclined. + */ +typedef struct ANTLR3_COMMON_TOKEN_STREAM_struct +{ + /** The ANTLR3_TOKEN_STREAM interface implementation, which also includes + * the intstream implementation. We could duplicate the pANTLR_INT_STREAM + * in this interface and initialize it to a copy, but this could be confusing + * it just results in one more level of indirection and I think that with + * judicial use of 'const' later, the optimizer will do decent job. + */ + pANTLR3_TOKEN_STREAM tstream; + + /** Whatever is supplying the COMMON_TOKEN_STREAM needs a pointer to itself + * so that this can be accessed by any of the API functions which it implements. + */ + void * super; + + /** Records every single token pulled from the source indexed by the token index. + * There might be more efficient ways to do this, such as referencing directly in to + * the token factory pools, but for now this is convenient and the ANTLR3_LIST is not + * a huge overhead as it only stores pointers anyway, but allows for iterations and + * so on. + */ + pANTLR3_VECTOR tokens; + + /** Override map of tokens. If a token type has an entry in here, then + * the pointer in the table points to an int, being the override channel number + * that should always be used for this token type. + */ + pANTLR3_LIST channelOverrides; + + /** Discared set. If a token has an entry in this table, then it is thrown + * away (data pointer is always NULL). + */ + pANTLR3_LIST discardSet; + + /* The channel number that this token stream is tuned to. For instance, whitespace + * is usually tuned to channel 99, which no token stream would normally tune to and + * so it is thrown away. + */ + ANTLR3_UINT32 channel; + + /** If this flag is set to ANTLR3_TRUE, then tokens that the stream sees that are not + * in the channel that this stream is tuned to, are not tracked in the + * tokens table. When set to false, ALL tokens are added to the tracking. + */ + ANTLR3_BOOLEAN discardOffChannel; + + /** The index into the tokens list of the current token (the next one that will be + * consumed. p = -1 indicates that the token list is empty. + */ + ANTLR3_INT32 p; + + /** A simple filter mechanism whereby you can tell this token stream + * to force all tokens of type ttype to be on channel. For example, + * when interpreting, we cannot exec actions so we need to tell + * the stream to force all WS and NEWLINE to be a different, ignored + * channel. + */ + void (*setTokenTypeChannel) (struct ANTLR3_COMMON_TOKEN_STREAM_struct * tokenStream, + ANTLR3_UINT32 ttype, ANTLR3_UINT32 channel); + + /** Add a particular token type to the discard set. If a token is found to belong + * to this set, then it is skipped/thrown away + */ + void (*discardTokenType) (struct ANTLR3_COMMON_TOKEN_STREAM_struct * tokenStream, ANTLR3_INT32 ttype); + + /** Signal to discard off channel tokens from here on in. + */ + void (*discardOffChannelToks)(struct ANTLR3_COMMON_TOKEN_STREAM_struct * tokenStream, ANTLR3_BOOLEAN discard); + + /** Function that returns a pointer to the ANTLR3_LIST of all tokens + * in the stream (this causes the buffer to fill if we have not get any yet) + */ + pANTLR3_VECTOR (*getTokens) (struct ANTLR3_COMMON_TOKEN_STREAM_struct * tokenStream); + + /** Function that returns all the tokens between a start and a stop index. + * TODO: This is a new list (Ack! Maybe this is a reason to have factories for LISTS and HASHTABLES etc :-( come back to this) + */ + pANTLR3_LIST (*getTokenRange) (struct ANTLR3_COMMON_TOKEN_STREAM_struct * tokenStream, ANTLR3_UINT32 start, ANTLR3_UINT32 stop); + + /** Function that returns all the tokens indicated by the specified bitset, within a range of tokens + */ + pANTLR3_LIST (*getTokensSet) (struct ANTLR3_COMMON_TOKEN_STREAM_struct * tokenStream, + ANTLR3_UINT32 start, ANTLR3_UINT32 stop, pANTLR3_BITSET types); + + /** Function that returns all the tokens indicated by being a member of the supplied List + */ + pANTLR3_LIST (*getTokensList) (struct ANTLR3_COMMON_TOKEN_STREAM_struct * tokenStream, + ANTLR3_UINT32 start, ANTLR3_UINT32 stop, pANTLR3_LIST list); + + /** Function that returns all tokens of a certain type within a range. + */ + pANTLR3_LIST (*getTokensType) (struct ANTLR3_COMMON_TOKEN_STREAM_struct * tokenStream, + ANTLR3_UINT32 start, ANTLR3_UINT32 stop, ANTLR3_UINT32 type); + + + /** Function that knows how to free an ANTLR3_COMMON_TOKEN_STREAM + */ + void (*free) (struct ANTLR3_COMMON_TOKEN_STREAM_struct * tokenStream); +} + ANTLR3_COMMON_TOKEN_STREAM; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/antlr-3.1.3/runtime/C/include/antlr3treeparser.h b/antlr-3.1.3/runtime/C/include/antlr3treeparser.h new file mode 100644 index 0000000..8ee0e58 --- /dev/null +++ b/antlr-3.1.3/runtime/C/include/antlr3treeparser.h @@ -0,0 +1,81 @@ +#ifndef ANTLR3TREEPARSER_H +#define ANTLR3TREEPARSER_H + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> +#include <antlr3baserecognizer.h> +#include <antlr3commontreenodestream.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** Internal structure representing an element in a hash bucket. + * Stores the original key so that duplicate keys can be rejected + * if necessary, and contains function can be supported If the hash key + * could be unique I would have invented the perfect compression algorithm ;-) + */ +typedef struct ANTLR3_TREE_PARSER_struct +{ + /** Pointer to any super class + */ + void * super; + + /** A pointer to the base recognizer, where most of the parser functions actually + * live because they are shared between parser and tree parser and this is the + * easier way than copying the interface all over the place. Macros hide this + * for the generated code so it is easier on the eye (though not the debugger ;-). + */ + pANTLR3_BASE_RECOGNIZER rec; + + /** Pointer to the common tree node stream for the parser + */ + pANTLR3_COMMON_TREE_NODE_STREAM ctnstream; + + /** Set the input stream and reset the parser + */ + void (*setTreeNodeStream) (struct ANTLR3_TREE_PARSER_struct * parser, pANTLR3_COMMON_TREE_NODE_STREAM input); + + /** Return a pointer to the input stream + */ + pANTLR3_COMMON_TREE_NODE_STREAM (*getTreeNodeStream) (struct ANTLR3_TREE_PARSER_struct * parser); + + /** Pointer to a function that knows how to free resources of an ANTLR3 tree parser. + */ + void (*free) (struct ANTLR3_TREE_PARSER_struct * parser); +} + ANTLR3_TREE_PARSER; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/antlr-3.1.3/runtime/C/src/antlr3baserecognizer.c b/antlr-3.1.3/runtime/C/src/antlr3baserecognizer.c new file mode 100644 index 0000000..330f0f1 --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3baserecognizer.c @@ -0,0 +1,2234 @@ +/** \file + * Contains the base functions that all recognizers require. + * Any function can be overridden by a lexer/parser/tree parser or by the + * ANTLR3 programmer. + * + * \addtogroup pANTLR3_BASE_RECOGNIZER + * @{ + */ +#include <antlr3baserecognizer.h> + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifdef ANTLR3_WINDOWS +#pragma warning( disable : 4100 ) +#endif + +/* Interface functions -standard implementations cover parser and treeparser + * almost completely but are overridden by the parser or tree parser as needed. Lexer overrides + * most of these functions. + */ +static void beginResync (pANTLR3_BASE_RECOGNIZER recognizer); +static pANTLR3_BITSET computeErrorRecoverySet (pANTLR3_BASE_RECOGNIZER recognizer); +static void endResync (pANTLR3_BASE_RECOGNIZER recognizer); +static void beginBacktrack (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_UINT32 level); +static void endBacktrack (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_UINT32 level, ANTLR3_BOOLEAN successful); + +static void * match (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_UINT32 ttype, pANTLR3_BITSET_LIST follow); +static void matchAny (pANTLR3_BASE_RECOGNIZER recognizer); +static void mismatch (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_UINT32 ttype, pANTLR3_BITSET_LIST follow); +static ANTLR3_BOOLEAN mismatchIsUnwantedToken (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM is, ANTLR3_UINT32 ttype); +static ANTLR3_BOOLEAN mismatchIsMissingToken (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM is, pANTLR3_BITSET_LIST follow); +static void reportError (pANTLR3_BASE_RECOGNIZER recognizer); +static pANTLR3_BITSET computeCSRuleFollow (pANTLR3_BASE_RECOGNIZER recognizer); +static pANTLR3_BITSET combineFollows (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_BOOLEAN exact); +static void displayRecognitionError (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_UINT8 * tokenNames); +static void recover (pANTLR3_BASE_RECOGNIZER recognizer); +static void * recoverFromMismatchedToken (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_UINT32 ttype, pANTLR3_BITSET_LIST follow); +static void * recoverFromMismatchedSet (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_BITSET_LIST follow); +static ANTLR3_BOOLEAN recoverFromMismatchedElement(pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_BITSET_LIST follow); +static void consumeUntil (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_UINT32 tokenType); +static void consumeUntilSet (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_BITSET set); +static pANTLR3_STACK getRuleInvocationStack (pANTLR3_BASE_RECOGNIZER recognizer); +static pANTLR3_STACK getRuleInvocationStackNamed (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_UINT8 name); +static pANTLR3_HASH_TABLE toStrings (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_HASH_TABLE); +static ANTLR3_MARKER getRuleMemoization (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_INTKEY ruleIndex, ANTLR3_MARKER ruleParseStart); +static ANTLR3_BOOLEAN alreadyParsedRule (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_MARKER ruleIndex); +static void memoize (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_MARKER ruleIndex, ANTLR3_MARKER ruleParseStart); +static ANTLR3_BOOLEAN synpred (pANTLR3_BASE_RECOGNIZER recognizer, void * ctx, void (*predicate)(void * ctx)); +static void reset (pANTLR3_BASE_RECOGNIZER recognizer); +static void freeBR (pANTLR3_BASE_RECOGNIZER recognizer); +static void * getCurrentInputSymbol (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM istream); +static void * getMissingSymbol (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM istream, pANTLR3_EXCEPTION e, + ANTLR3_UINT32 expectedTokenType, pANTLR3_BITSET_LIST follow); +static ANTLR3_UINT32 getNumberOfSyntaxErrors (pANTLR3_BASE_RECOGNIZER recognizer); + +ANTLR3_API pANTLR3_BASE_RECOGNIZER +antlr3BaseRecognizerNew(ANTLR3_UINT32 type, ANTLR3_UINT32 sizeHint, pANTLR3_RECOGNIZER_SHARED_STATE state) +{ + pANTLR3_BASE_RECOGNIZER recognizer; + + // Allocate memory for the structure + // + recognizer = (pANTLR3_BASE_RECOGNIZER) ANTLR3_MALLOC((size_t)sizeof(ANTLR3_BASE_RECOGNIZER)); + + if (recognizer == NULL) + { + // Allocation failed + // + return NULL; + } + + + // If we have been supplied with a pre-existing recognizer state + // then we just install it, otherwise we must create one from scratch + // + if (state == NULL) + { + recognizer->state = (pANTLR3_RECOGNIZER_SHARED_STATE) ANTLR3_CALLOC(1, (size_t)sizeof(ANTLR3_RECOGNIZER_SHARED_STATE)); + + if (recognizer->state == NULL) + { + ANTLR3_FREE(recognizer); + return NULL; + } + + // Initialize any new recognizer state + // + recognizer->state->errorRecovery = ANTLR3_FALSE; + recognizer->state->lastErrorIndex = -1; + recognizer->state->failed = ANTLR3_FALSE; + recognizer->state->errorCount = 0; + recognizer->state->backtracking = 0; + recognizer->state->following = NULL; + recognizer->state->ruleMemo = NULL; + recognizer->state->tokenNames = NULL; + recognizer->state->sizeHint = sizeHint; + recognizer->state->tokSource = NULL; + recognizer->state->tokFactory = NULL; + + // Rather than check to see if we must initialize + // the stack every time we are asked for an new rewrite stream + // we just always create an empty stack and then just + // free it when the base recognizer is freed. + // + recognizer->state->rStreams = antlr3VectorNew(0); // We don't know the size. + + if (recognizer->state->rStreams == NULL) + { + // Out of memory + // + ANTLR3_FREE(recognizer->state); + ANTLR3_FREE(recognizer); + return NULL; + } + } + else + { + // Install the one we were given, and do not reset it here + // as it will either already have been initialized or will + // be in a state that needs to be preserved. + // + recognizer->state = state; + } + + // Install the BR API + // + recognizer->alreadyParsedRule = alreadyParsedRule; + recognizer->beginResync = beginResync; + recognizer->combineFollows = combineFollows; + recognizer->beginBacktrack = beginBacktrack; + recognizer->endBacktrack = endBacktrack; + recognizer->computeCSRuleFollow = computeCSRuleFollow; + recognizer->computeErrorRecoverySet = computeErrorRecoverySet; + recognizer->consumeUntil = consumeUntil; + recognizer->consumeUntilSet = consumeUntilSet; + recognizer->displayRecognitionError = displayRecognitionError; + recognizer->endResync = endResync; + recognizer->exConstruct = antlr3MTExceptionNew; + recognizer->getRuleInvocationStack = getRuleInvocationStack; + recognizer->getRuleInvocationStackNamed = getRuleInvocationStackNamed; + recognizer->getRuleMemoization = getRuleMemoization; + recognizer->match = match; + recognizer->matchAny = matchAny; + recognizer->memoize = memoize; + recognizer->mismatch = mismatch; + recognizer->mismatchIsUnwantedToken = mismatchIsUnwantedToken; + recognizer->mismatchIsMissingToken = mismatchIsMissingToken; + recognizer->recover = recover; + recognizer->recoverFromMismatchedElement= recoverFromMismatchedElement; + recognizer->recoverFromMismatchedSet = recoverFromMismatchedSet; + recognizer->recoverFromMismatchedToken = recoverFromMismatchedToken; + recognizer->getNumberOfSyntaxErrors = getNumberOfSyntaxErrors; + recognizer->reportError = reportError; + recognizer->reset = reset; + recognizer->synpred = synpred; + recognizer->toStrings = toStrings; + recognizer->getCurrentInputSymbol = getCurrentInputSymbol; + recognizer->getMissingSymbol = getMissingSymbol; + recognizer->debugger = NULL; + + recognizer->free = freeBR; + + /* Initialize variables + */ + recognizer->type = type; + + + return recognizer; +} +static void +freeBR (pANTLR3_BASE_RECOGNIZER recognizer) +{ + pANTLR3_EXCEPTION thisE; + + // Did we have a state allocated? + // + if (recognizer->state != NULL) + { + // Free any rule memoization we set up + // + if (recognizer->state->ruleMemo != NULL) + { + recognizer->state->ruleMemo->free(recognizer->state->ruleMemo); + recognizer->state->ruleMemo = NULL; + } + + // Free any exception space we have left around + // + thisE = recognizer->state->exception; + if (thisE != NULL) + { + thisE->freeEx(thisE); + } + + // Free any rewrite streams we have allocated + // + if (recognizer->state->rStreams != NULL) + { + recognizer->state->rStreams->free(recognizer->state->rStreams); + } + + // Free up any token factory we created (error recovery for instance) + // + if (recognizer->state->tokFactory != NULL) + { + recognizer->state->tokFactory->close(recognizer->state->tokFactory); + } + // Free the shared state memory + // + ANTLR3_FREE(recognizer->state); + } + + // Free the actual recognizer space + // + ANTLR3_FREE(recognizer); +} + +/** + * Creates a new Mismatched Token Exception and inserts in the recognizer + * exception stack. + * + * \param recognizer + * Context pointer for this recognizer + * + */ +ANTLR3_API void +antlr3MTExceptionNew(pANTLR3_BASE_RECOGNIZER recognizer) +{ + /* Create a basic recognition exception structure + */ + antlr3RecognitionExceptionNew(recognizer); + + /* Now update it to indicate this is a Mismatched token exception + */ + recognizer->state->exception->name = ANTLR3_MISMATCHED_EX_NAME; + recognizer->state->exception->type = ANTLR3_MISMATCHED_TOKEN_EXCEPTION; + + return; +} + +ANTLR3_API void +antlr3RecognitionExceptionNew(pANTLR3_BASE_RECOGNIZER recognizer) +{ + pANTLR3_EXCEPTION ex; + pANTLR3_LEXER lexer; + pANTLR3_PARSER parser; + pANTLR3_TREE_PARSER tparser; + + pANTLR3_INPUT_STREAM ins; + pANTLR3_INT_STREAM is; + pANTLR3_COMMON_TOKEN_STREAM cts; + pANTLR3_TREE_NODE_STREAM tns; + + ins = NULL; + cts = NULL; + tns = NULL; + is = NULL; + lexer = NULL; + parser = NULL; + tparser = NULL; + + switch (recognizer->type) + { + case ANTLR3_TYPE_LEXER: + + lexer = (pANTLR3_LEXER) (recognizer->super); + ins = lexer->input; + is = ins->istream; + + break; + + case ANTLR3_TYPE_PARSER: + + parser = (pANTLR3_PARSER) (recognizer->super); + cts = (pANTLR3_COMMON_TOKEN_STREAM)(parser->tstream->super); + is = parser->tstream->istream; + + break; + + case ANTLR3_TYPE_TREE_PARSER: + + tparser = (pANTLR3_TREE_PARSER) (recognizer->super); + tns = tparser->ctnstream->tnstream; + is = tns->istream; + + break; + + default: + + ANTLR3_FPRINTF(stderr, "Base recognizer function antlr3RecognitionExceptionNew called by unknown parser type - provide override for this function\n"); + return; + + break; + } + + /* Create a basic exception structure + */ + ex = antlr3ExceptionNew(ANTLR3_RECOGNITION_EXCEPTION, + (void *)ANTLR3_RECOGNITION_EX_NAME, + NULL, + ANTLR3_FALSE); + + /* Rest of information depends on the base type of the + * input stream. + */ + switch (is->type & ANTLR3_INPUT_MASK) + { + case ANTLR3_CHARSTREAM: + + ex->c = is->_LA (is, 1); /* Current input character */ + ex->line = ins->getLine (ins); /* Line number comes from stream */ + ex->charPositionInLine = ins->getCharPositionInLine (ins); /* Line offset also comes from the stream */ + ex->index = is->index (is); + ex->streamName = ins->fileName; + ex->message = "Unexpected character"; + break; + + case ANTLR3_TOKENSTREAM: + + ex->token = cts->tstream->_LT (cts->tstream, 1); /* Current input token */ + ex->line = ((pANTLR3_COMMON_TOKEN)(ex->token))->getLine (ex->token); + ex->charPositionInLine = ((pANTLR3_COMMON_TOKEN)(ex->token))->getCharPositionInLine (ex->token); + ex->index = cts->tstream->istream->index (cts->tstream->istream); + if (((pANTLR3_COMMON_TOKEN)(ex->token))->type == ANTLR3_TOKEN_EOF) + { + ex->streamName = NULL; + } + else + { + ex->streamName = ((pANTLR3_COMMON_TOKEN)(ex->token))->input->fileName; + } + ex->message = "Unexpected token"; + break; + + case ANTLR3_COMMONTREENODE: + + ex->token = tns->_LT (tns, 1); /* Current input tree node */ + ex->line = ((pANTLR3_BASE_TREE)(ex->token))->getLine (ex->token); + ex->charPositionInLine = ((pANTLR3_BASE_TREE)(ex->token))->getCharPositionInLine (ex->token); + ex->index = tns->istream->index (tns->istream); + + // Are you ready for this? Deep breath now... + // + { + pANTLR3_COMMON_TREE tnode; + + tnode = ((pANTLR3_COMMON_TREE)(((pANTLR3_BASE_TREE)(ex->token))->super)); + + if (tnode->token == NULL) + { + ex->streamName = ((pANTLR3_BASE_TREE)(ex->token))->strFactory->newStr(((pANTLR3_BASE_TREE)(ex->token))->strFactory, (pANTLR3_UINT8)"-unknown source-"); + } + else + { + if (tnode->token->input == NULL) + { + ex->streamName = NULL; + } + else + { + ex->streamName = tnode->token->input->fileName; + } + } + ex->message = "Unexpected node"; + } + break; + } + + ex->input = is; + ex->nextException = recognizer->state->exception; /* So we don't leak the memory */ + recognizer->state->exception = ex; + recognizer->state->error = ANTLR3_TRUE; /* Exception is outstanding */ + + return; +} + + +/// Match current input symbol against ttype. Upon error, do one token +/// insertion or deletion if possible. +/// To turn off single token insertion or deletion error +/// recovery, override mismatchRecover() and have it call +/// plain mismatch(), which does not recover. Then any error +/// in a rule will cause an exception and immediate exit from +/// rule. Rule would recover by resynchronizing to the set of +/// symbols that can follow rule ref. +/// +static void * +match( pANTLR3_BASE_RECOGNIZER recognizer, + ANTLR3_UINT32 ttype, pANTLR3_BITSET_LIST follow) +{ + pANTLR3_PARSER parser; + pANTLR3_TREE_PARSER tparser; + pANTLR3_INT_STREAM is; + void * matchedSymbol; + + switch (recognizer->type) + { + case ANTLR3_TYPE_PARSER: + + parser = (pANTLR3_PARSER) (recognizer->super); + tparser = NULL; + is = parser->tstream->istream; + + break; + + case ANTLR3_TYPE_TREE_PARSER: + + tparser = (pANTLR3_TREE_PARSER) (recognizer->super); + parser = NULL; + is = tparser->ctnstream->tnstream->istream; + + break; + + default: + + ANTLR3_FPRINTF(stderr, "Base recognizer function 'match' called by unknown parser type - provide override for this function\n"); + return ANTLR3_FALSE; + + break; + } + + // Pick up the current input token/node for assignment to labels + // + matchedSymbol = recognizer->getCurrentInputSymbol(recognizer, is); + + if (is->_LA(is, 1) == ttype) + { + // The token was the one we were told to expect + // + is->consume(is); // Consume that token from the stream + recognizer->state->errorRecovery = ANTLR3_FALSE; // Not in error recovery now (if we were) + recognizer->state->failed = ANTLR3_FALSE; // The match was a success + return matchedSymbol; // We are done + } + + // We did not find the expected token type, if we are backtracking then + // we just set the failed flag and return. + // + if (recognizer->state->backtracking > 0) + { + // Backtracking is going on + // + recognizer->state->failed = ANTLR3_TRUE; + return matchedSymbol; + } + + // We did not find the expected token and there is no backtracking + // going on, so we mismatch, which creates an exception in the recognizer exception + // stack. + // + matchedSymbol = recognizer->recoverFromMismatchedToken(recognizer, ttype, follow); + return matchedSymbol; +} + +/// Consumes the next token, whatever it is, and resets the recognizer state +/// so that it is not in error. +/// +/// \param recognizer +/// Recognizer context pointer +/// +static void +matchAny(pANTLR3_BASE_RECOGNIZER recognizer) +{ + pANTLR3_PARSER parser; + pANTLR3_TREE_PARSER tparser; + pANTLR3_INT_STREAM is; + + switch (recognizer->type) + { + case ANTLR3_TYPE_PARSER: + + parser = (pANTLR3_PARSER) (recognizer->super); + tparser = NULL; + is = parser->tstream->istream; + + break; + + case ANTLR3_TYPE_TREE_PARSER: + + tparser = (pANTLR3_TREE_PARSER) (recognizer->super); + parser = NULL; + is = tparser->ctnstream->tnstream->istream; + + break; + + default: + + ANTLR3_FPRINTF(stderr, "Base recognizer function 'matchAny' called by unknown parser type - provide override for this function\n"); + return; + + break; + } + recognizer->state->errorRecovery = ANTLR3_FALSE; + recognizer->state->failed = ANTLR3_FALSE; + is->consume(is); + + return; +} +/// +/// +static ANTLR3_BOOLEAN +mismatchIsUnwantedToken(pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM is, ANTLR3_UINT32 ttype) +{ + ANTLR3_UINT32 nextt; + + nextt = is->_LA(is, 2); + + if (nextt == ttype) + { + if (recognizer->state->exception != NULL) + { + recognizer->state->exception->expecting = nextt; + } + return ANTLR3_TRUE; // This token is unknown, but the next one is the one we wanted + } + else + { + return ANTLR3_FALSE; // Neither this token, nor the one following is the one we wanted + } +} + +/// +/// +static ANTLR3_BOOLEAN +mismatchIsMissingToken(pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM is, pANTLR3_BITSET_LIST follow) +{ + ANTLR3_BOOLEAN retcode; + pANTLR3_BITSET followClone; + pANTLR3_BITSET viableTokensFollowingThisRule; + + if (follow == NULL) + { + // There is no information about the tokens that can follow the last one + // hence we must say that the current one we found is not a member of the + // follow set and does not indicate a missing token. We will just consume this + // single token and see if the parser works it out from there. + // + return ANTLR3_FALSE; + } + + followClone = NULL; + viableTokensFollowingThisRule = NULL; + + // The C bitset maps are laid down at compile time by the + // C code generation. Hence we cannot remove things from them + // and so on. So, in order to remove EOR (if we need to) then + // we clone the static bitset. + // + followClone = antlr3BitsetLoad(follow); + if (followClone == NULL) + { + return ANTLR3_FALSE; + } + + // Compute what can follow this grammar reference + // + if (followClone->isMember(followClone, ANTLR3_EOR_TOKEN_TYPE)) + { + // EOR can follow, but if we are not the start symbol, we + // need to remove it. + // + if (recognizer->state->following->vector->count >= 0) + { + followClone->remove(followClone, ANTLR3_EOR_TOKEN_TYPE); + } + + // Now compute the visiable tokens that can follow this rule, according to context + // and make them part of the follow set. + // + viableTokensFollowingThisRule = recognizer->computeCSRuleFollow(recognizer); + followClone->borInPlace(followClone, viableTokensFollowingThisRule); + } + + /// if current token is consistent with what could come after set + /// then we know we're missing a token; error recovery is free to + /// "insert" the missing token + /// + /// BitSet cannot handle negative numbers like -1 (EOF) so I leave EOR + /// in follow set to indicate that the fall of the start symbol is + /// in the set (EOF can follow). + /// + if ( followClone->isMember(followClone, is->_LA(is, 1)) + || followClone->isMember(followClone, ANTLR3_EOR_TOKEN_TYPE) + ) + { + retcode = ANTLR3_TRUE; + } + else + { + retcode = ANTLR3_FALSE; + } + + if (viableTokensFollowingThisRule != NULL) + { + viableTokensFollowingThisRule->free(viableTokensFollowingThisRule); + } + if (followClone != NULL) + { + followClone->free(followClone); + } + + return retcode; + +} + +/// Factor out what to do upon token mismatch so tree parsers can behave +/// differently. Override and call mismatchRecover(input, ttype, follow) +/// to get single token insertion and deletion. Use this to turn off +/// single token insertion and deletion. Override mismatchRecover +/// to call this instead. +/// +/// \remark mismatch only works for parsers and must be overridden for anything else. +/// +static void +mismatch(pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_UINT32 ttype, pANTLR3_BITSET_LIST follow) +{ + pANTLR3_PARSER parser; + pANTLR3_TREE_PARSER tparser; + pANTLR3_INT_STREAM is; + + // Install a mismatched token exception in the exception stack + // + antlr3MTExceptionNew(recognizer); + recognizer->state->exception->expecting = ttype; + + switch (recognizer->type) + { + case ANTLR3_TYPE_PARSER: + + parser = (pANTLR3_PARSER) (recognizer->super); + tparser = NULL; + is = parser->tstream->istream; + + break; + + default: + + ANTLR3_FPRINTF(stderr, "Base recognizer function 'mismatch' called by unknown parser type - provide override for this function\n"); + return; + + break; + } + + if (mismatchIsUnwantedToken(recognizer, is, ttype)) + { + // Create a basic recognition exception structure + // + antlr3RecognitionExceptionNew(recognizer); + + // Now update it to indicate this is an unwanted token exception + // + recognizer->state->exception->name = ANTLR3_UNWANTED_TOKEN_EXCEPTION_NAME; + recognizer->state->exception->type = ANTLR3_UNWANTED_TOKEN_EXCEPTION; + + return; + } + + if (mismatchIsMissingToken(recognizer, is, follow)) + { + // Create a basic recognition exception structure + // + antlr3RecognitionExceptionNew(recognizer); + + // Now update it to indicate this is an unwanted token exception + // + recognizer->state->exception->name = ANTLR3_MISSING_TOKEN_EXCEPTION_NAME; + recognizer->state->exception->type = ANTLR3_MISSING_TOKEN_EXCEPTION; + + return; + } + + // Just a mismatched token is all we can dtermine + // + antlr3MTExceptionNew(recognizer); + + return; +} +/// Report a recognition problem. +/// +/// This method sets errorRecovery to indicate the parser is recovering +/// not parsing. Once in recovery mode, no errors are generated. +/// To get out of recovery mode, the parser must successfully match +/// a token (after a resync). So it will go: +/// +/// 1. error occurs +/// 2. enter recovery mode, report error +/// 3. consume until token found in resynch set +/// 4. try to resume parsing +/// 5. next match() will reset errorRecovery mode +/// +/// If you override, make sure to update errorCount if you care about that. +/// +static void +reportError (pANTLR3_BASE_RECOGNIZER recognizer) +{ + if (recognizer->state->errorRecovery == ANTLR3_TRUE) + { + // Already in error recovery so don't display another error while doing so + // + return; + } + + // Signal we are in error recovery now + // + recognizer->state->errorRecovery = ANTLR3_TRUE; + + // Indicate this recognizer had an error while processing. + // + recognizer->state->errorCount++; + + // Call the error display routine + // + recognizer->displayRecognitionError(recognizer, recognizer->state->tokenNames); +} + +static void +beginBacktrack (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_UINT32 level) +{ + if (recognizer->debugger != NULL) + { + recognizer->debugger->beginBacktrack(recognizer->debugger, level); + } +} + +static void +endBacktrack (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_UINT32 level, ANTLR3_BOOLEAN successful) +{ + if (recognizer->debugger != NULL) + { + recognizer->debugger->endBacktrack(recognizer->debugger, level, successful); + } +} +static void +beginResync (pANTLR3_BASE_RECOGNIZER recognizer) +{ + if (recognizer->debugger != NULL) + { + recognizer->debugger->beginResync(recognizer->debugger); + } +} + +static void +endResync (pANTLR3_BASE_RECOGNIZER recognizer) +{ + if (recognizer->debugger != NULL) + { + recognizer->debugger->endResync(recognizer->debugger); + } +} + +/// Compute the error recovery set for the current rule. +/// Documentation below is from the Java implementation. +/// +/// During rule invocation, the parser pushes the set of tokens that can +/// follow that rule reference on the stack; this amounts to +/// computing FIRST of what follows the rule reference in the +/// enclosing rule. This local follow set only includes tokens +/// from within the rule; i.e., the FIRST computation done by +/// ANTLR stops at the end of a rule. +// +/// EXAMPLE +// +/// When you find a "no viable alt exception", the input is not +/// consistent with any of the alternatives for rule r. The best +/// thing to do is to consume tokens until you see something that +/// can legally follow a call to r *or* any rule that called r. +/// You don't want the exact set of viable next tokens because the +/// input might just be missing a token--you might consume the +/// rest of the input looking for one of the missing tokens. +/// +/// Consider grammar: +/// +/// a : '[' b ']' +/// | '(' b ')' +/// ; +/// b : c '^' INT ; +/// c : ID +/// | INT +/// ; +/// +/// At each rule invocation, the set of tokens that could follow +/// that rule is pushed on a stack. Here are the various "local" +/// follow sets: +/// +/// FOLLOW(b1_in_a) = FIRST(']') = ']' +/// FOLLOW(b2_in_a) = FIRST(')') = ')' +/// FOLLOW(c_in_b) = FIRST('^') = '^' +/// +/// Upon erroneous input "[]", the call chain is +/// +/// a -> b -> c +/// +/// and, hence, the follow context stack is: +/// +/// depth local follow set after call to rule +/// 0 <EOF> a (from main()) +/// 1 ']' b +/// 3 '^' c +/// +/// Notice that ')' is not included, because b would have to have +/// been called from a different context in rule a for ')' to be +/// included. +/// +/// For error recovery, we cannot consider FOLLOW(c) +/// (context-sensitive or otherwise). We need the combined set of +/// all context-sensitive FOLLOW sets--the set of all tokens that +/// could follow any reference in the call chain. We need to +/// resync to one of those tokens. Note that FOLLOW(c)='^' and if +/// we resync'd to that token, we'd consume until EOF. We need to +/// sync to context-sensitive FOLLOWs for a, b, and c: {']','^'}. +/// In this case, for input "[]", LA(1) is in this set so we would +/// not consume anything and after printing an error rule c would +/// return normally. It would not find the required '^' though. +/// At this point, it gets a mismatched token error and throws an +/// exception (since LA(1) is not in the viable following token +/// set). The rule exception handler tries to recover, but finds +/// the same recovery set and doesn't consume anything. Rule b +/// exits normally returning to rule a. Now it finds the ']' (and +/// with the successful match exits errorRecovery mode). +/// +/// So, you can see that the parser walks up call chain looking +/// for the token that was a member of the recovery set. +/// +/// Errors are not generated in errorRecovery mode. +/// +/// ANTLR's error recovery mechanism is based upon original ideas: +/// +/// "Algorithms + Data Structures = Programs" by Niklaus Wirth +/// +/// and +/// +/// "A note on error recovery in recursive descent parsers": +/// http://portal.acm.org/citation.cfm?id=947902.947905 +/// +/// Later, Josef Grosch had some good ideas: +/// +/// "Efficient and Comfortable Error Recovery in Recursive Descent +/// Parsers": +/// ftp://www.cocolab.com/products/cocktail/doca4.ps/ell.ps.zip +/// +/// Like Grosch I implemented local FOLLOW sets that are combined +/// at run-time upon error to avoid overhead during parsing. +/// +static pANTLR3_BITSET +computeErrorRecoverySet (pANTLR3_BASE_RECOGNIZER recognizer) +{ + return recognizer->combineFollows(recognizer, ANTLR3_FALSE); +} + +/// Compute the context-sensitive FOLLOW set for current rule. +/// Documentation below is from the Java runtime. +/// +/// This is the set of token types that can follow a specific rule +/// reference given a specific call chain. You get the set of +/// viable tokens that can possibly come next (look ahead depth 1) +/// given the current call chain. Contrast this with the +/// definition of plain FOLLOW for rule r: +/// +/// FOLLOW(r)={x | S=>*alpha r beta in G and x in FIRST(beta)} +/// +/// where x in T* and alpha, beta in V*; T is set of terminals and +/// V is the set of terminals and non terminals. In other words, +/// FOLLOW(r) is the set of all tokens that can possibly follow +/// references to r in///any* sentential form (context). At +/// runtime, however, we know precisely which context applies as +/// we have the call chain. We may compute the exact (rather +/// than covering superset) set of following tokens. +/// +/// For example, consider grammar: +/// +/// stat : ID '=' expr ';' // FOLLOW(stat)=={EOF} +/// | "return" expr '.' +/// ; +/// expr : atom ('+' atom)* ; // FOLLOW(expr)=={';','.',')'} +/// atom : INT // FOLLOW(atom)=={'+',')',';','.'} +/// | '(' expr ')' +/// ; +/// +/// The FOLLOW sets are all inclusive whereas context-sensitive +/// FOLLOW sets are precisely what could follow a rule reference. +/// For input input "i=(3);", here is the derivation: +/// +/// stat => ID '=' expr ';' +/// => ID '=' atom ('+' atom)* ';' +/// => ID '=' '(' expr ')' ('+' atom)* ';' +/// => ID '=' '(' atom ')' ('+' atom)* ';' +/// => ID '=' '(' INT ')' ('+' atom)* ';' +/// => ID '=' '(' INT ')' ';' +/// +/// At the "3" token, you'd have a call chain of +/// +/// stat -> expr -> atom -> expr -> atom +/// +/// What can follow that specific nested ref to atom? Exactly ')' +/// as you can see by looking at the derivation of this specific +/// input. Contrast this with the FOLLOW(atom)={'+',')',';','.'}. +/// +/// You want the exact viable token set when recovering from a +/// token mismatch. Upon token mismatch, if LA(1) is member of +/// the viable next token set, then you know there is most likely +/// a missing token in the input stream. "Insert" one by just not +/// throwing an exception. +/// +static pANTLR3_BITSET +computeCSRuleFollow (pANTLR3_BASE_RECOGNIZER recognizer) +{ + return recognizer->combineFollows(recognizer, ANTLR3_FALSE); +} + +/// Compute the current followset for the input stream. +/// +static pANTLR3_BITSET +combineFollows (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_BOOLEAN exact) +{ + pANTLR3_BITSET followSet; + pANTLR3_BITSET localFollowSet; + ANTLR3_UINT32 top; + ANTLR3_UINT32 i; + + top = recognizer->state->following->size(recognizer->state->following); + + followSet = antlr3BitsetNew(0); + localFollowSet = NULL; + + for (i = top; i>0; i--) + { + localFollowSet = antlr3BitsetLoad((pANTLR3_BITSET_LIST) recognizer->state->following->get(recognizer->state->following, i-1)); + + if (localFollowSet != NULL) + { + followSet->borInPlace(followSet, localFollowSet); + + if (exact == ANTLR3_TRUE) + { + if (localFollowSet->isMember(localFollowSet, ANTLR3_EOR_TOKEN_TYPE) == ANTLR3_FALSE) + { + // Only leave EOR in the set if at top (start rule); this lets us know + // if we have to include the follow(start rule); I.E., EOF + // + if (i>1) + { + followSet->remove(followSet, ANTLR3_EOR_TOKEN_TYPE); + } + } + else + { + break; // Cannot see End Of Rule from here, just drop out + } + } + localFollowSet->free(localFollowSet); + localFollowSet = NULL; + } + } + + if (localFollowSet != NULL) + { + localFollowSet->free(localFollowSet); + } + return followSet; +} + +/// Standard/Example error display method. +/// No generic error message display funciton coudl possibly do everything correctly +/// for all possible parsers. Hence you are provided with this example routine, which +/// you should override in your parser/tree parser to do as you will. +/// +/// Here we depart somewhat from the Java runtime as that has now split up a lot +/// of the error display routines into spearate units. However, ther is little advantage +/// to this in the C version as you will probably implement all such routines as a +/// separate translation unit, rather than install them all as pointers to functions +/// in the base recognizer. +/// +static void +displayRecognitionError (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_UINT8 * tokenNames) +{ + pANTLR3_PARSER parser; + pANTLR3_TREE_PARSER tparser; + pANTLR3_INT_STREAM is; + pANTLR3_STRING ttext; + pANTLR3_STRING ftext; + pANTLR3_EXCEPTION ex; + pANTLR3_COMMON_TOKEN theToken; + pANTLR3_BASE_TREE theBaseTree; + pANTLR3_COMMON_TREE theCommonTree; + + // Retrieve some info for easy reading. + // + ex = recognizer->state->exception; + ttext = NULL; + + // See if there is a 'filename' we can use + // + if (ex->streamName == NULL) + { + if (((pANTLR3_COMMON_TOKEN)(ex->token))->type == ANTLR3_TOKEN_EOF) + { + ANTLR3_FPRINTF(stderr, "-end of input-("); + } + else + { + ANTLR3_FPRINTF(stderr, "-unknown source-("); + } + } + else + { + ftext = ex->streamName->to8(ex->streamName); + ANTLR3_FPRINTF(stderr, "%s(", ftext->chars); + } + + // Next comes the line number + // + + ANTLR3_FPRINTF(stderr, "%d) ", recognizer->state->exception->line); + ANTLR3_FPRINTF(stderr, " : error %d : %s", + recognizer->state->exception->type, + (pANTLR3_UINT8) (recognizer->state->exception->message)); + + + // How we determine the next piece is dependent on which thing raised the + // error. + // + switch (recognizer->type) + { + case ANTLR3_TYPE_PARSER: + + // Prepare the knowledge we know we have + // + parser = (pANTLR3_PARSER) (recognizer->super); + tparser = NULL; + is = parser->tstream->istream; + theToken = (pANTLR3_COMMON_TOKEN)(recognizer->state->exception->token); + ttext = theToken->toString(theToken); + + ANTLR3_FPRINTF(stderr, ", at offset %d", recognizer->state->exception->charPositionInLine); + if (theToken != NULL) + { + if (theToken->type == ANTLR3_TOKEN_EOF) + { + ANTLR3_FPRINTF(stderr, ", at <EOF>"); + } + else + { + // Guard against null text in a token + // + ANTLR3_FPRINTF(stderr, "\n near %s\n ", ttext == NULL ? (pANTLR3_UINT8)"<no text for the token>" : ttext->chars); + } + } + break; + + case ANTLR3_TYPE_TREE_PARSER: + + tparser = (pANTLR3_TREE_PARSER) (recognizer->super); + parser = NULL; + is = tparser->ctnstream->tnstream->istream; + theBaseTree = (pANTLR3_BASE_TREE)(recognizer->state->exception->token); + ttext = theBaseTree->toStringTree(theBaseTree); + + if (theBaseTree != NULL) + { + theCommonTree = (pANTLR3_COMMON_TREE) theBaseTree->super; + + if (theCommonTree != NULL) + { + theToken = (pANTLR3_COMMON_TOKEN) theBaseTree->getToken(theBaseTree); + } + ANTLR3_FPRINTF(stderr, ", at offset %d", theBaseTree->getCharPositionInLine(theBaseTree)); + ANTLR3_FPRINTF(stderr, ", near %s", ttext->chars); + } + break; + + default: + + ANTLR3_FPRINTF(stderr, "Base recognizer function displayRecognitionError called by unknown parser type - provide override for this function\n"); + return; + break; + } + + // Although this function should generally be provided by the implementation, this one + // should be as helpful as possible for grammar developers and serve as an example + // of what you can do with each exception type. In general, when you make up your + // 'real' handler, you should debug the routine with all possible errors you expect + // which will then let you be as specific as possible about all circumstances. + // + // Note that in the general case, errors thrown by tree parsers indicate a problem + // with the output of the parser or with the tree grammar itself. The job of the parser + // is to produce a perfect (in traversal terms) syntactically correct tree, so errors + // at that stage should really be semantic errors that your own code determines and handles + // in whatever way is appropriate. + // + switch (ex->type) + { + case ANTLR3_UNWANTED_TOKEN_EXCEPTION: + + // Indicates that the recognizer was fed a token which seesm to be + // spurious input. We can detect this when the token that follows + // this unwanted token would normally be part of the syntactically + // correct stream. Then we can see that the token we are looking at + // is just something that should not be there and throw this exception. + // + if (tokenNames == NULL) + { + ANTLR3_FPRINTF(stderr, " : Extraneous input..."); + } + else + { + if (ex->expecting == ANTLR3_TOKEN_EOF) + { + ANTLR3_FPRINTF(stderr, " : Extraneous input - expected <EOF>\n"); + } + else + { + ANTLR3_FPRINTF(stderr, " : Extraneous input - expected %s ...\n", tokenNames[ex->expecting]); + } + } + break; + + case ANTLR3_MISSING_TOKEN_EXCEPTION: + + // Indicates that the recognizer detected that the token we just + // hit would be valid syntactically if preceeded by a particular + // token. Perhaps a missing ';' at line end or a missing ',' in an + // expression list, and such like. + // + if (tokenNames == NULL) + { + ANTLR3_FPRINTF(stderr, " : Missing token (%d)...\n", ex->expecting); + } + else + { + if (ex->expecting == ANTLR3_TOKEN_EOF) + { + ANTLR3_FPRINTF(stderr, " : Missing <EOF>\n"); + } + else + { + ANTLR3_FPRINTF(stderr, " : Missing %s \n", tokenNames[ex->expecting]); + } + } + break; + + case ANTLR3_RECOGNITION_EXCEPTION: + + // Indicates that the recognizer received a token + // in the input that was not predicted. This is the basic exception type + // from which all others are derived. So we assume it was a syntax error. + // You may get this if there are not more tokens and more are needed + // to complete a parse for instance. + // + ANTLR3_FPRINTF(stderr, " : syntax error...\n"); + break; + + case ANTLR3_MISMATCHED_TOKEN_EXCEPTION: + + // We were expecting to see one thing and got another. This is the + // most common error if we coudl not detect a missing or unwanted token. + // Here you can spend your efforts to + // derive more useful error messages based on the expected + // token set and the last token and so on. The error following + // bitmaps do a good job of reducing the set that we were looking + // for down to something small. Knowing what you are parsing may be + // able to allow you to be even more specific about an error. + // + if (tokenNames == NULL) + { + ANTLR3_FPRINTF(stderr, " : syntax error...\n"); + } + else + { + if (ex->expecting == ANTLR3_TOKEN_EOF) + { + ANTLR3_FPRINTF(stderr, " : expected <EOF>\n"); + } + else + { + ANTLR3_FPRINTF(stderr, " : expected %s ...\n", tokenNames[ex->expecting]); + } + } + break; + + case ANTLR3_NO_VIABLE_ALT_EXCEPTION: + + // We could not pick any alt decision from the input given + // so god knows what happened - however when you examine your grammar, + // you should. It means that at the point where the current token occurred + // that the DFA indicates nowhere to go from here. + // + ANTLR3_FPRINTF(stderr, " : cannot match to any predicted input...\n"); + + break; + + case ANTLR3_MISMATCHED_SET_EXCEPTION: + + { + ANTLR3_UINT32 count; + ANTLR3_UINT32 bit; + ANTLR3_UINT32 size; + ANTLR3_UINT32 numbits; + pANTLR3_BITSET errBits; + + // This means we were able to deal with one of a set of + // possible tokens at this point, but we did not see any + // member of that set. + // + ANTLR3_FPRINTF(stderr, " : unexpected input...\n expected one of : "); + + // What tokens could we have accepted at this point in the + // parse? + // + count = 0; + errBits = antlr3BitsetLoad (ex->expectingSet); + numbits = errBits->numBits (errBits); + size = errBits->size (errBits); + + if (size > 0) + { + // However many tokens we could have dealt with here, it is usually + // not useful to print ALL of the set here. I arbitrarily chose 8 + // here, but you should do whatever makes sense for you of course. + // No token number 0, so look for bit 1 and on. + // + for (bit = 1; bit < numbits && count < 8 && count < size; bit++) + { + // TODO: This doesn;t look right - should be asking if the bit is set!! + // + if (tokenNames[bit]) + { + ANTLR3_FPRINTF(stderr, "%s%s", count > 0 ? ", " : "", tokenNames[bit]); + count++; + } + } + ANTLR3_FPRINTF(stderr, "\n"); + } + else + { + ANTLR3_FPRINTF(stderr, "Actually dude, we didn't seem to be expecting anything here, or at least\n"); + ANTLR3_FPRINTF(stderr, "I could not work out what I was expecting, like so many of us these days!\n"); + } + } + break; + + case ANTLR3_EARLY_EXIT_EXCEPTION: + + // We entered a loop requiring a number of token sequences + // but found a token that ended that sequence earlier than + // we should have done. + // + ANTLR3_FPRINTF(stderr, " : missing elements...\n"); + break; + + default: + + // We don't handle any other exceptions here, but you can + // if you wish. If we get an exception that hits this point + // then we are just going to report what we know about the + // token. + // + ANTLR3_FPRINTF(stderr, " : syntax not recognized...\n"); + break; + } + + // Here you have the token that was in error which if this is + // the standard implementation will tell you the line and offset + // and also record the address of the start of the line in the + // input stream. You could therefore print the source line and so on. + // Generally though, I would expect that your lexer/parser will keep + // its own map of lines and source pointers or whatever as there + // are a lot of specific things you need to know about the input + // to do something like that. + // Here is where you do it though :-). + // +} + +/// Return how many syntax errors were detected by this recognizer +/// +static ANTLR3_UINT32 +getNumberOfSyntaxErrors(pANTLR3_BASE_RECOGNIZER recognizer) +{ + return recognizer->state->errorCount; +} + +/// Recover from an error found on the input stream. Mostly this is +/// NoViableAlt exceptions, but could be a mismatched token that +/// the match() routine could not recover from. +/// +static void +recover (pANTLR3_BASE_RECOGNIZER recognizer) +{ + // Used to compute the follow set of tokens + // + pANTLR3_BITSET followSet; + pANTLR3_PARSER parser; + pANTLR3_TREE_PARSER tparser; + pANTLR3_INT_STREAM is; + + switch (recognizer->type) + { + case ANTLR3_TYPE_PARSER: + + parser = (pANTLR3_PARSER) (recognizer->super); + tparser = NULL; + is = parser->tstream->istream; + + break; + + case ANTLR3_TYPE_TREE_PARSER: + + tparser = (pANTLR3_TREE_PARSER) (recognizer->super); + parser = NULL; + is = tparser->ctnstream->tnstream->istream; + + break; + + default: + + ANTLR3_FPRINTF(stderr, "Base recognizer function recover called by unknown parser type - provide override for this function\n"); + return; + + break; + } + + // Are we about to repeat the same error? + // + if (recognizer->state->lastErrorIndex == is->index(is)) + { + // The last error was at the same token index point. This must be a case + // where LT(1) is in the recovery token set so nothing is + // consumed. Consume a single token so at least to prevent + // an infinite loop; this is a failsafe. + // + is->consume(is); + } + + // Record error index position + // + recognizer->state->lastErrorIndex = is->index(is); + + // Work out the follows set for error recovery + // + followSet = recognizer->computeErrorRecoverySet(recognizer); + + // Call resync hook (for debuggers and so on) + // + recognizer->beginResync(recognizer); + + // Consume tokens until we have resynced to something in the follows set + // + recognizer->consumeUntilSet(recognizer, followSet); + + // End resync hook + // + recognizer->endResync(recognizer); + + // Destroy the temporary bitset we produced. + // + followSet->free(followSet); + + // Reset the inError flag so we don't re-report the exception + // + recognizer->state->error = ANTLR3_FALSE; + recognizer->state->failed = ANTLR3_FALSE; +} + + +/// Attempt to recover from a single missing or extra token. +/// +/// EXTRA TOKEN +/// +/// LA(1) is not what we are looking for. If LA(2) has the right token, +/// however, then assume LA(1) is some extra spurious token. Delete it +/// and LA(2) as if we were doing a normal match(), which advances the +/// input. +/// +/// MISSING TOKEN +/// +/// If current token is consistent with what could come after +/// ttype then it is ok to "insert" the missing token, else throw +/// exception For example, Input "i=(3;" is clearly missing the +/// ')'. When the parser returns from the nested call to expr, it +/// will have call chain: +/// +/// stat -> expr -> atom +/// +/// and it will be trying to match the ')' at this point in the +/// derivation: +/// +/// => ID '=' '(' INT ')' ('+' atom)* ';' +/// ^ +/// match() will see that ';' doesn't match ')' and report a +/// mismatched token error. To recover, it sees that LA(1)==';' +/// is in the set of tokens that can follow the ')' token +/// reference in rule atom. It can assume that you forgot the ')'. +/// +/// The exception that was passed in, in the java implementation is +/// sorted in the recognizer exception stack in the C version. To 'throw' it we set the +/// error flag and rules cascade back when this is set. +/// +static void * +recoverFromMismatchedToken (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_UINT32 ttype, pANTLR3_BITSET_LIST follow) +{ + pANTLR3_PARSER parser; + pANTLR3_TREE_PARSER tparser; + pANTLR3_INT_STREAM is; + void * matchedSymbol; + + // Invoke the debugger event if there is a debugger listening to us + // + if (recognizer->debugger != NULL) + { + recognizer->debugger->recognitionException(recognizer->debugger, recognizer->state->exception); + } + + switch (recognizer->type) + { + case ANTLR3_TYPE_PARSER: + + parser = (pANTLR3_PARSER) (recognizer->super); + tparser = NULL; + is = parser->tstream->istream; + + break; + + case ANTLR3_TYPE_TREE_PARSER: + + tparser = (pANTLR3_TREE_PARSER) (recognizer->super); + parser = NULL; + is = tparser->ctnstream->tnstream->istream; + + break; + + default: + + ANTLR3_FPRINTF(stderr, "Base recognizer function recoverFromMismatchedToken called by unknown parser type - provide override for this function\n"); + return NULL; + + break; + } + + // Create an exception if we need one + // + if (recognizer->state->exception == NULL) + { + antlr3RecognitionExceptionNew(recognizer); + } + + // If the next token after the one we are looking at in the input stream + // is what we are looking for then we remove the one we have discovered + // from the stream by consuming it, then consume this next one along too as + // if nothing had happened. + // + if ( recognizer->mismatchIsUnwantedToken(recognizer, is, ttype) == ANTLR3_TRUE) + { + recognizer->state->exception->type = ANTLR3_UNWANTED_TOKEN_EXCEPTION; + recognizer->state->exception->message = ANTLR3_UNWANTED_TOKEN_EXCEPTION_NAME; + + // Call resync hook (for debuggers and so on) + // + if (recognizer->debugger != NULL) + { + recognizer->debugger->beginResync(recognizer->debugger); + } + + recognizer->beginResync(recognizer); + + // "delete" the extra token + // + recognizer->beginResync(recognizer); + is->consume(is); + recognizer->endResync(recognizer); + // End resync hook + // + if (recognizer->debugger != NULL) + { + recognizer->debugger->endResync(recognizer->debugger); + } + + // Print out the error after we consume so that ANTLRWorks sees the + // token in the exception. + // + recognizer->reportError(recognizer); + + // Return the token we are actually matching + // + matchedSymbol = recognizer->getCurrentInputSymbol(recognizer, is); + + // Consume the token that the rule actually expected to get as if everything + // was hunky dory. + // + is->consume(is); + + recognizer->state->error = ANTLR3_FALSE; // Exception is not outstanding any more + + return matchedSymbol; + } + + // Single token deletion (Unwanted above) did not work + // so we see if we can insert a token instead by calculating which + // token would be missing + // + if (mismatchIsMissingToken(recognizer, is, follow)) + { + // We can fake the missing token and proceed + // + matchedSymbol = recognizer->getMissingSymbol(recognizer, is, recognizer->state->exception, ttype, follow); + recognizer->state->exception->type = ANTLR3_MISSING_TOKEN_EXCEPTION; + recognizer->state->exception->message = ANTLR3_MISSING_TOKEN_EXCEPTION_NAME; + recognizer->state->exception->token = matchedSymbol; + recognizer->state->exception->expecting = ttype; + + // Print out the error after we insert so that ANTLRWorks sees the + // token in the exception. + // + recognizer->reportError(recognizer); + + recognizer->state->error = ANTLR3_FALSE; // Exception is not outstanding any more + + return matchedSymbol; + } + + + // Neither deleting nor inserting tokens allows recovery + // must just report the exception. + // + recognizer->state->error = ANTLR3_TRUE; + return NULL; +} + +static void * +recoverFromMismatchedSet (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_BITSET_LIST follow) +{ + pANTLR3_PARSER parser; + pANTLR3_TREE_PARSER tparser; + pANTLR3_INT_STREAM is; + pANTLR3_COMMON_TOKEN matchedSymbol; + + switch (recognizer->type) + { + case ANTLR3_TYPE_PARSER: + + parser = (pANTLR3_PARSER) (recognizer->super); + tparser = NULL; + is = parser->tstream->istream; + + break; + + case ANTLR3_TYPE_TREE_PARSER: + + tparser = (pANTLR3_TREE_PARSER) (recognizer->super); + parser = NULL; + is = tparser->ctnstream->tnstream->istream; + + break; + + default: + + ANTLR3_FPRINTF(stderr, "Base recognizer function recoverFromMismatchedSet called by unknown parser type - provide override for this function\n"); + return NULL; + + break; + } + + if (recognizer->mismatchIsMissingToken(recognizer, is, follow) == ANTLR3_TRUE) + { + // We can fake the missing token and proceed + // + matchedSymbol = recognizer->getMissingSymbol(recognizer, is, recognizer->state->exception, ANTLR3_TOKEN_INVALID, follow); + recognizer->state->exception->type = ANTLR3_MISSING_TOKEN_EXCEPTION; + recognizer->state->exception->token = matchedSymbol; + + // Print out the error after we insert so that ANTLRWorks sees the + // token in the exception. + // + recognizer->reportError(recognizer); + + recognizer->state->error = ANTLR3_FALSE; // Exception is not outstanding any more + + return matchedSymbol; + } + + // TODO - Single token deletion like in recoverFromMismatchedToken() + // + recognizer->state->error = ANTLR3_TRUE; + recognizer->state->failed = ANTLR3_TRUE; + return NULL; +} + +/// This code is factored out from mismatched token and mismatched set +/// recovery. It handles "single token insertion" error recovery for +/// both. No tokens are consumed to recover from insertions. Return +/// true if recovery was possible else return false. +/// +static ANTLR3_BOOLEAN +recoverFromMismatchedElement (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_BITSET_LIST followBits) +{ + pANTLR3_BITSET viableToksFollowingRule; + pANTLR3_BITSET follow; + pANTLR3_PARSER parser; + pANTLR3_TREE_PARSER tparser; + pANTLR3_INT_STREAM is; + + switch (recognizer->type) + { + case ANTLR3_TYPE_PARSER: + + parser = (pANTLR3_PARSER) (recognizer->super); + tparser = NULL; + is = parser->tstream->istream; + + break; + + case ANTLR3_TYPE_TREE_PARSER: + + tparser = (pANTLR3_TREE_PARSER) (recognizer->super); + parser = NULL; + is = tparser->ctnstream->tnstream->istream; + + break; + + default: + + ANTLR3_FPRINTF(stderr, "Base recognizer function recover called by unknown parser type - provide override for this function\n"); + return ANTLR3_FALSE; + + break; + } + + follow = antlr3BitsetLoad(followBits); + + if (follow == NULL) + { + /* The follow set is NULL, which means we don't know what can come + * next, so we "hit and hope" by just signifying that we cannot + * recover, which will just cause the next token to be consumed, + * which might dig us out. + */ + return ANTLR3_FALSE; + } + + /* We have a bitmap for the follow set, hence we can compute + * what can follow this grammar element reference. + */ + if (follow->isMember(follow, ANTLR3_EOR_TOKEN_TYPE) == ANTLR3_TRUE) + { + /* First we need to know which of the available tokens are viable + * to follow this reference. + */ + viableToksFollowingRule = recognizer->computeCSRuleFollow(recognizer); + + /* Remove the EOR token, which we do not wish to compute with + */ + follow->remove(follow, ANTLR3_EOR_TOKEN_TYPE); + viableToksFollowingRule->free(viableToksFollowingRule); + /* We now have the computed set of what can follow the current token + */ + } + + /* We can now see if the current token works with the set of tokens + * that could follow the current grammar reference. If it looks like it + * is consistent, then we can "insert" that token by not throwing + * an exception and assuming that we saw it. + */ + if ( follow->isMember(follow, is->_LA(is, 1)) == ANTLR3_TRUE) + { + /* report the error, but don't cause any rules to abort and stuff + */ + recognizer->reportError(recognizer); + if (follow != NULL) + { + follow->free(follow); + } + recognizer->state->error = ANTLR3_FALSE; + recognizer->state->failed = ANTLR3_FALSE; + return ANTLR3_TRUE; /* Success in recovery */ + } + + if (follow != NULL) + { + follow->free(follow); + } + + /* We could not find anything viable to do, so this is going to + * cause an exception. + */ + return ANTLR3_FALSE; +} + +/// Eat tokens from the input stream until we get one of JUST the right type +/// +static void +consumeUntil (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_UINT32 tokenType) +{ + ANTLR3_UINT32 ttype; + pANTLR3_PARSER parser; + pANTLR3_TREE_PARSER tparser; + pANTLR3_INT_STREAM is; + + switch (recognizer->type) + { + case ANTLR3_TYPE_PARSER: + + parser = (pANTLR3_PARSER) (recognizer->super); + tparser = NULL; + is = parser->tstream->istream; + + break; + + case ANTLR3_TYPE_TREE_PARSER: + + tparser = (pANTLR3_TREE_PARSER) (recognizer->super); + parser = NULL; + is = tparser->ctnstream->tnstream->istream; + + break; + + default: + + ANTLR3_FPRINTF(stderr, "Base recognizer function 'consumeUntil' called by unknown parser type - provide override for this function\n"); + return; + + break; + } + + // What do have at the moment? + // + ttype = is->_LA(is, 1); + + // Start eating tokens until we get to the one we want. + // + while (ttype != ANTLR3_TOKEN_EOF && ttype != tokenType) + { + is->consume(is); + ttype = is->_LA(is, 1); + } +} + +/// Eat tokens from the input stream until we find one that +/// belongs to the supplied set. +/// +static void +consumeUntilSet (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_BITSET set) +{ + ANTLR3_UINT32 ttype; + pANTLR3_PARSER parser; + pANTLR3_TREE_PARSER tparser; + pANTLR3_INT_STREAM is; + + switch (recognizer->type) + { + case ANTLR3_TYPE_PARSER: + + parser = (pANTLR3_PARSER) (recognizer->super); + tparser = NULL; + is = parser->tstream->istream; + + break; + + case ANTLR3_TYPE_TREE_PARSER: + + tparser = (pANTLR3_TREE_PARSER) (recognizer->super); + parser = NULL; + is = tparser->ctnstream->tnstream->istream; + + break; + + default: + + ANTLR3_FPRINTF(stderr, "Base recognizer function 'consumeUntilSet' called by unknown parser type - provide override for this function\n"); + return; + + break; + } + + // What do have at the moment? + // + ttype = is->_LA(is, 1); + + // Start eating tokens until we get to one we want. + // + while (ttype != ANTLR3_TOKEN_EOF && set->isMember(set, ttype) == ANTLR3_FALSE) + { + is->consume(is); + ttype = is->_LA(is, 1); + } +} + +/** Return the rule invocation stack (how we got here in the parse. + * In the java version Ter just asks the JVM for all the information + * but in C we don't get this information, so I am going to do nothing + * right now. + */ +static pANTLR3_STACK +getRuleInvocationStack (pANTLR3_BASE_RECOGNIZER recognizer) +{ + return NULL; +} + +static pANTLR3_STACK +getRuleInvocationStackNamed (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_UINT8 name) +{ + return NULL; +} + +/** Convenience method for template rewrites - NYI. + */ +static pANTLR3_HASH_TABLE +toStrings (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_HASH_TABLE tokens) +{ + return NULL; +} + +static void ANTLR3_CDECL +freeIntTrie (void * trie) +{ + ((pANTLR3_INT_TRIE)trie)->free((pANTLR3_INT_TRIE)trie); +} + + +/** Pointer to a function to return whether the rule has parsed input starting at the supplied + * start index before. If the rule has not parsed input starting from the supplied start index, + * then it will return ANTLR3_MEMO_RULE_UNKNOWN. If it has parsed from the suppled start point + * then it will return the point where it last stopped parsing after that start point. + * + * \remark + * The rule memos are an ANTLR3_LIST of ANTLR3_LISTS, however if this becomes any kind of performance + * issue (it probably won't, the hash tables are pretty quick) then we could make a special int only + * version of the table. + */ +static ANTLR3_MARKER +getRuleMemoization (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_INTKEY ruleIndex, ANTLR3_MARKER ruleParseStart) +{ + /* The rule memos are an ANTLR3_LIST of ANTLR3_LIST. + */ + pANTLR3_INT_TRIE ruleList; + ANTLR3_MARKER stopIndex; + pANTLR3_TRIE_ENTRY entry; + + /* See if we have a list in the ruleMemos for this rule, and if not, then create one + * as we will need it eventually if we are being asked for the memo here. + */ + entry = recognizer->state->ruleMemo->get(recognizer->state->ruleMemo, (ANTLR3_INTKEY)ruleIndex); + + if (entry == NULL) + { + /* Did not find it, so create a new one for it, with a bit depth based on the + * size of the input stream. We need the bit depth to incorporate the number if + * bits required to represent the largest possible stop index in the input, which is the + * last character. An int stream is free to return the largest 64 bit offset if it has + * no idea of the size, but you should remember that this will cause the leftmost + * bit match algorithm to run to 63 bits, which will be the whole time spent in the trie ;-) + */ + ruleList = antlr3IntTrieNew(63); /* Depth is theoretically 64 bits, but probably not ;-) */ + + if (ruleList != NULL) + { + recognizer->state->ruleMemo->add(recognizer->state->ruleMemo, (ANTLR3_INTKEY)ruleIndex, ANTLR3_HASH_TYPE_STR, 0, ANTLR3_FUNC_PTR(ruleList), freeIntTrie); + } + + /* We cannot have a stopIndex in a trie we have just created of course + */ + return MEMO_RULE_UNKNOWN; + } + + ruleList = (pANTLR3_INT_TRIE) (entry->data.ptr); + + /* See if there is a stop index associated with the supplied start index. + */ + stopIndex = 0; + + entry = ruleList->get(ruleList, ruleParseStart); + if (entry != NULL) + { + stopIndex = (ANTLR3_MARKER)(entry->data.intVal); + } + + if (stopIndex == 0) + { + return MEMO_RULE_UNKNOWN; + } + + return stopIndex; +} + +/** Has this rule already parsed input at the current index in the + * input stream? Return ANTLR3_TRUE if we have and ANTLR3_FALSE + * if we have not. + * + * This method has a side-effect: if we have seen this input for + * this rule and successfully parsed before, then seek ahead to + * 1 past the stop token matched for this rule last time. + */ +static ANTLR3_BOOLEAN +alreadyParsedRule (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_MARKER ruleIndex) +{ + ANTLR3_MARKER stopIndex; + pANTLR3_LEXER lexer; + pANTLR3_PARSER parser; + pANTLR3_TREE_PARSER tparser; + pANTLR3_INT_STREAM is; + + switch (recognizer->type) + { + case ANTLR3_TYPE_PARSER: + + parser = (pANTLR3_PARSER) (recognizer->super); + tparser = NULL; + lexer = NULL; + is = parser->tstream->istream; + + break; + + case ANTLR3_TYPE_TREE_PARSER: + + tparser = (pANTLR3_TREE_PARSER) (recognizer->super); + parser = NULL; + lexer = NULL; + is = tparser->ctnstream->tnstream->istream; + + break; + + case ANTLR3_TYPE_LEXER: + + lexer = (pANTLR3_LEXER) (recognizer->super); + parser = NULL; + tparser = NULL; + is = lexer->input->istream; + break; + + default: + + ANTLR3_FPRINTF(stderr, "Base recognizer function 'alreadyParsedRule' called by unknown parser type - provide override for this function\n"); + return ANTLR3_FALSE; + + break; + } + + /* See if we have a memo marker for this. + */ + stopIndex = recognizer->getRuleMemoization(recognizer, ruleIndex, is->index(is)); + + if (stopIndex == MEMO_RULE_UNKNOWN) + { + return ANTLR3_FALSE; + } + + if (stopIndex == MEMO_RULE_FAILED) + { + recognizer->state->failed = ANTLR3_TRUE; + } + else + { + is->seek(is, stopIndex+1); + } + + /* If here then the rule was executed for this input already + */ + return ANTLR3_TRUE; +} + +/** Record whether or not this rule parsed the input at this position + * successfully. + */ +static void +memoize (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_MARKER ruleIndex, ANTLR3_MARKER ruleParseStart) +{ + /* The rule memos are an ANTLR3_LIST of ANTLR3_LIST. + */ + pANTLR3_INT_TRIE ruleList; + pANTLR3_TRIE_ENTRY entry; + ANTLR3_MARKER stopIndex; + pANTLR3_LEXER lexer; + pANTLR3_PARSER parser; + pANTLR3_TREE_PARSER tparser; + pANTLR3_INT_STREAM is; + + switch (recognizer->type) + { + case ANTLR3_TYPE_PARSER: + + parser = (pANTLR3_PARSER) (recognizer->super); + tparser = NULL; + is = parser->tstream->istream; + + break; + + case ANTLR3_TYPE_TREE_PARSER: + + tparser = (pANTLR3_TREE_PARSER) (recognizer->super); + parser = NULL; + is = tparser->ctnstream->tnstream->istream; + + break; + + case ANTLR3_TYPE_LEXER: + + lexer = (pANTLR3_LEXER) (recognizer->super); + parser = NULL; + tparser = NULL; + is = lexer->input->istream; + break; + + default: + + ANTLR3_FPRINTF(stderr, "Base recognizer function consumeUntilSet called by unknown parser type - provide override for this function\n"); + return; + + break; + } + + stopIndex = recognizer->state->failed == ANTLR3_TRUE ? MEMO_RULE_FAILED : is->index(is) - 1; + + entry = recognizer->state->ruleMemo->get(recognizer->state->ruleMemo, (ANTLR3_INTKEY)ruleIndex); + + if (entry != NULL) + { + ruleList = (pANTLR3_INT_TRIE)(entry->data.ptr); + + /* If we don't already have this entry, append it. The memoize trie does not + * accept duplicates so it won't add it if already there and we just ignore the + * return code as we don't care if it is there already. + */ + ruleList->add(ruleList, ruleParseStart, ANTLR3_HASH_TYPE_INT, stopIndex, NULL, NULL); + } +} +/** A syntactic predicate. Returns true/false depending on whether + * the specified grammar fragment matches the current input stream. + * This resets the failed instance var afterwards. + */ +static ANTLR3_BOOLEAN +synpred (pANTLR3_BASE_RECOGNIZER recognizer, void * ctx, void (*predicate)(void * ctx)) +{ + ANTLR3_MARKER start; + pANTLR3_PARSER parser; + pANTLR3_TREE_PARSER tparser; + pANTLR3_INT_STREAM is; + + switch (recognizer->type) + { + case ANTLR3_TYPE_PARSER: + + parser = (pANTLR3_PARSER) (recognizer->super); + tparser = NULL; + is = parser->tstream->istream; + + break; + + case ANTLR3_TYPE_TREE_PARSER: + + tparser = (pANTLR3_TREE_PARSER) (recognizer->super); + parser = NULL; + is = tparser->ctnstream->tnstream->istream; + + break; + + default: + + ANTLR3_FPRINTF(stderr, "Base recognizer function 'synPred' called by unknown parser type - provide override for this function\n"); + return ANTLR3_FALSE; + + break; + } + + /* Begin backtracking so we can get back to where we started after trying out + * the syntactic predicate. + */ + start = is->mark(is); + recognizer->state->backtracking++; + + /* Try the syntactical predicate + */ + predicate(ctx); + + /* Reset + */ + is->rewind(is, start); + recognizer->state->backtracking--; + + if (recognizer->state->failed == ANTLR3_TRUE) + { + /* Predicate failed + */ + recognizer->state->failed = ANTLR3_FALSE; + return ANTLR3_FALSE; + } + else + { + /* Predicate was successful + */ + recognizer->state->failed = ANTLR3_FALSE; + return ANTLR3_TRUE; + } +} + +static void +reset(pANTLR3_BASE_RECOGNIZER recognizer) +{ + if (recognizer->state->following != NULL) + { + recognizer->state->following->free(recognizer->state->following); + } + + // Reset the state flags + // + recognizer->state->errorRecovery = ANTLR3_FALSE; + recognizer->state->lastErrorIndex = -1; + recognizer->state->failed = ANTLR3_FALSE; + recognizer->state->errorCount = 0; + recognizer->state->backtracking = 0; + recognizer->state->following = NULL; + + if (recognizer->state != NULL) + { + if (recognizer->state->ruleMemo != NULL) + { + recognizer->state->ruleMemo->free(recognizer->state->ruleMemo); + recognizer->state->ruleMemo = antlr3IntTrieNew(15); /* 16 bit depth is enough for 32768 rules! */ + } + } + + + // Install a new following set + // + recognizer->state->following = antlr3StackNew(8); + +} + +// Default implementation is for parser and assumes a token stream as supplied by the runtime. +// You MAY need override this function if the standard TOKEN_STREAM is not what you are using. +// +static void * +getCurrentInputSymbol (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM istream) +{ + return ((pANTLR3_TOKEN_STREAM)istream->super)->_LT((pANTLR3_TOKEN_STREAM)istream->super, 1); +} + +// Default implementation is for parser and assumes a token stream as supplied by the runtime. +// You MAY need override this function if the standard COMMON_TOKEN_STREAM is not what you are using. +// +static void * +getMissingSymbol (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM istream, pANTLR3_EXCEPTION e, + ANTLR3_UINT32 expectedTokenType, pANTLR3_BITSET_LIST follow) +{ + pANTLR3_TOKEN_STREAM ts; + pANTLR3_COMMON_TOKEN_STREAM cts; + pANTLR3_COMMON_TOKEN token; + pANTLR3_COMMON_TOKEN current; + pANTLR3_STRING text; + + // Dereference the standard pointers + // + ts = (pANTLR3_TOKEN_STREAM)istream->super; + cts = (pANTLR3_COMMON_TOKEN_STREAM)ts->super; + + // Work out what to use as the current symbol to make a line and offset etc + // If we are at EOF, we use the token before EOF + // + current = ts->_LT(ts, 1); + if (current->getType(current) == ANTLR3_TOKEN_EOF) + { + current = ts->_LT(ts, -1); + } + + // Create a new empty token + // + if (recognizer->state->tokFactory == NULL) + { + // We don't yet have a token factory for making tokens + // we just need a fake one using the input stream of the current + // token. + // + recognizer->state->tokFactory = antlr3TokenFactoryNew(current->input); + } + token = recognizer->state->tokFactory->newToken(recognizer->state->tokFactory); + + // Set some of the token properties based on the current token + // + token->setLine (token, current->getLine(current)); + token->setCharPositionInLine (token, current->getCharPositionInLine(current)); + token->setChannel (token, ANTLR3_TOKEN_DEFAULT_CHANNEL); + token->setType (token, expectedTokenType); + token->user1 = current->user1; + token->user2 = current->user2; + token->user3 = current->user3; + token->custom = current->custom; + + // Create the token text that shows it has been inserted + // + token->setText8(token, (pANTLR3_UINT8)"<missing "); + text = token->getText(token); + + if (text != NULL) + { + text->append8(text, (const char *)recognizer->state->tokenNames[expectedTokenType]); + text->append8(text, (const char *)">"); + } + + // Finally return the pointer to our new token + // + return token; +} + + +#ifdef ANTLR3_WINDOWS +#pragma warning( default : 4100 ) +#endif + +/// @} +/// + diff --git a/antlr-3.1.3/runtime/C/src/antlr3basetree.c b/antlr-3.1.3/runtime/C/src/antlr3basetree.c new file mode 100644 index 0000000..bbc81e7 --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3basetree.c @@ -0,0 +1,489 @@ +#include <antlr3basetree.h> + +#ifdef ANTLR3_WINDOWS +#pragma warning( disable : 4100 ) +#endif + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +static void * getChild (pANTLR3_BASE_TREE tree, ANTLR3_UINT32 i); +static ANTLR3_UINT32 getChildCount (pANTLR3_BASE_TREE tree); +static ANTLR3_UINT32 getCharPositionInLine +(pANTLR3_BASE_TREE tree); +static ANTLR3_UINT32 getLine (pANTLR3_BASE_TREE tree); +static pANTLR3_BASE_TREE +getFirstChildWithType +(pANTLR3_BASE_TREE tree, ANTLR3_UINT32 type); +static void addChild (pANTLR3_BASE_TREE tree, pANTLR3_BASE_TREE child); +static void addChildren (pANTLR3_BASE_TREE tree, pANTLR3_LIST kids); +static void replaceChildren (pANTLR3_BASE_TREE parent, ANTLR3_INT32 startChildIndex, ANTLR3_INT32 stopChildIndex, pANTLR3_BASE_TREE t); + +static void freshenPACIndexesAll(pANTLR3_BASE_TREE tree); +static void freshenPACIndexes (pANTLR3_BASE_TREE tree, ANTLR3_UINT32 offset); + +static void setChild (pANTLR3_BASE_TREE tree, ANTLR3_UINT32 i, void * child); +static void * deleteChild (pANTLR3_BASE_TREE tree, ANTLR3_UINT32 i); +static void * dupTree (pANTLR3_BASE_TREE tree); +static pANTLR3_STRING toStringTree (pANTLR3_BASE_TREE tree); + + +ANTLR3_API pANTLR3_BASE_TREE +antlr3BaseTreeNew(pANTLR3_BASE_TREE tree) +{ + /* api */ + tree->getChild = getChild; + tree->getChildCount = getChildCount; + tree->addChild = (void (*)(pANTLR3_BASE_TREE, void *))(addChild); + tree->addChildren = addChildren; + tree->setChild = setChild; + tree->deleteChild = deleteChild; + tree->dupTree = dupTree; + tree->toStringTree = toStringTree; + tree->getCharPositionInLine = getCharPositionInLine; + tree->getLine = getLine; + tree->replaceChildren = replaceChildren; + tree->freshenPACIndexesAll = freshenPACIndexesAll; + tree->freshenPACIndexes = freshenPACIndexes; + tree->getFirstChildWithType = (void *(*)(pANTLR3_BASE_TREE, ANTLR3_UINT32))(getFirstChildWithType); + tree->children = NULL; + tree->strFactory = NULL; + + /* Rest must be filled in by caller. + */ + return tree; +} + +static ANTLR3_UINT32 +getCharPositionInLine (pANTLR3_BASE_TREE tree) +{ + return 0; +} + +static ANTLR3_UINT32 +getLine (pANTLR3_BASE_TREE tree) +{ + return 0; +} +static pANTLR3_BASE_TREE +getFirstChildWithType (pANTLR3_BASE_TREE tree, ANTLR3_UINT32 type) +{ + ANTLR3_UINT32 i; + ANTLR3_UINT32 cs; + + pANTLR3_BASE_TREE t; + if (tree->children != NULL) + { + cs = tree->children->size(tree->children); + for (i = 0; i < cs; i++) + { + t = (pANTLR3_BASE_TREE) (tree->children->get(tree->children, i)); + if (tree->getType(t) == type) + { + return (pANTLR3_BASE_TREE)t; + } + } + } + return NULL; +} + + + +static void * +getChild (pANTLR3_BASE_TREE tree, ANTLR3_UINT32 i) +{ + if ( tree->children == NULL + || i >= tree->children->size(tree->children)) + { + return NULL; + } + return tree->children->get(tree->children, i); +} + + +static ANTLR3_UINT32 +getChildCount (pANTLR3_BASE_TREE tree) +{ + if (tree->children == NULL) + { + return 0; + } + else + { + return tree->children->size(tree->children); + } +} + +void +addChild (pANTLR3_BASE_TREE tree, pANTLR3_BASE_TREE child) +{ + ANTLR3_UINT32 n; + ANTLR3_UINT32 i; + + if (child == NULL) + { + return; + } + + if (child->isNilNode(child) == ANTLR3_TRUE) + { + if (child->children != NULL && child->children == tree->children) + { + // TODO: Change to exception rather than ANTLR3_FPRINTF? + // + ANTLR3_FPRINTF(stderr, "ANTLR3: An attempt was made to add a child list to itself!\n"); + return; + } + + // Add all of the children's children to this list + // + if (child->children != NULL) + { + if (tree->children == NULL) + { + // We are build ing the tree structure here, so we need not + // worry about duplication of pointers as the tree node + // factory will only clean up each node once. So we just + // copy in the child's children pointer as the child is + // a nil node (has not root itself). + // + tree->children = child->children; + child->children = NULL; + freshenPACIndexesAll(tree); + + } + else + { + // Need to copy the children + // + n = child->children->size(child->children); + + for (i = 0; i < n; i++) + { + pANTLR3_BASE_TREE entry; + entry = child->children->get(child->children, i); + + // ANTLR3 lists can be sparse, unlike Array Lists + // + if (entry != NULL) + { + tree->children->add(tree->children, entry, (void (ANTLR3_CDECL *) (void *))child->free); + } + } + } + } + } + else + { + // Tree we are adding is not a Nil and might have children to copy + // + if (tree->children == NULL) + { + // No children in the tree we are adding to, so create a new list on + // the fly to hold them. + // + tree->createChildrenList(tree); + } + + tree->children->add(tree->children, child, (void (ANTLR3_CDECL *)(void *))child->free); + + } +} + +/// Add all elements of the supplied list as children of this node +/// +static void +addChildren (pANTLR3_BASE_TREE tree, pANTLR3_LIST kids) +{ + ANTLR3_UINT32 i; + ANTLR3_UINT32 s; + + s = kids->size(kids); + for (i = 0; i<s; i++) + { + tree->addChild(tree, (pANTLR3_BASE_TREE)(kids->get(kids, i+1))); + } +} + + +static void +setChild (pANTLR3_BASE_TREE tree, ANTLR3_UINT32 i, void * child) +{ + if (tree->children == NULL) + { + tree->createChildrenList(tree); + } + tree->children->set(tree->children, i, child, NULL, ANTLR3_FALSE); +} + +static void * +deleteChild (pANTLR3_BASE_TREE tree, ANTLR3_UINT32 i) +{ + if ( tree->children == NULL) + { + return NULL; + } + + return tree->children->remove(tree->children, i); +} + +static void * +dupTree (pANTLR3_BASE_TREE tree) +{ + pANTLR3_BASE_TREE newTree; + ANTLR3_UINT32 i; + ANTLR3_UINT32 s; + + newTree = tree->dupNode (tree); + + if (tree->children != NULL) + { + s = tree->children->size (tree->children); + + for (i = 0; i < s; i++) + { + pANTLR3_BASE_TREE t; + pANTLR3_BASE_TREE newNode; + + t = (pANTLR3_BASE_TREE) tree->children->get(tree->children, i); + + if (t!= NULL) + { + newNode = t->dupTree(t); + newTree->addChild(newTree, newNode); + } + } + } + + return newTree; +} + +static pANTLR3_STRING +toStringTree (pANTLR3_BASE_TREE tree) +{ + pANTLR3_STRING string; + ANTLR3_UINT32 i; + ANTLR3_UINT32 n; + pANTLR3_BASE_TREE t; + + if (tree->children == NULL || tree->children->size(tree->children) == 0) + { + return tree->toString(tree); + } + + /* Need a new string with nothing at all in it. + */ + string = tree->strFactory->newRaw(tree->strFactory); + + if (tree->isNilNode(tree) == ANTLR3_FALSE) + { + string->append8 (string, "("); + string->appendS (string, tree->toString(tree)); + string->append8 (string, " "); + } + if (tree->children != NULL) + { + n = tree->children->size(tree->children); + + for (i = 0; i < n; i++) + { + t = (pANTLR3_BASE_TREE) tree->children->get(tree->children, i); + + if (i > 0) + { + string->append8(string, " "); + } + string->appendS(string, t->toStringTree(t)); + } + } + if (tree->isNilNode(tree) == ANTLR3_FALSE) + { + string->append8(string,")"); + } + + return string; +} + +/// Delete children from start to stop and replace with t even if t is +/// a list (nil-root tree). Num of children can increase or decrease. +/// For huge child lists, inserting children can force walking rest of +/// children to set their child index; could be slow. +/// +static void +replaceChildren (pANTLR3_BASE_TREE parent, ANTLR3_INT32 startChildIndex, ANTLR3_INT32 stopChildIndex, pANTLR3_BASE_TREE newTree) +{ + ANTLR3_INT32 replacingHowMany; // How many nodes will go away + ANTLR3_INT32 replacingWithHowMany; // How many nodes will replace them + ANTLR3_INT32 numNewChildren; // Tracking variable + ANTLR3_INT32 delta; // Difference in new vs existing count + + ANTLR3_INT32 i; + ANTLR3_INT32 j; + + pANTLR3_VECTOR newChildren; // Iterator for whatever we are going to add in + ANTLR3_BOOLEAN freeNewChildren; // Whether we created the iterator locally or reused it + + if (parent->children == NULL) + { + ANTLR3_FPRINTF(stderr, "replaceChildren call: Indexes are invalid; no children in list for %s", parent->getText(parent)->chars); + return; + } + + // Either use the existing list of children in the supplied nil node, or build a vector of the + // tree we were given if it is not a nil node, then we treat both situations exactly the same + // + if (newTree->isNilNode(newTree)) + { + newChildren = newTree->children; + freeNewChildren = ANTLR3_FALSE; // We must NO free this memory + } + else + { + newChildren = antlr3VectorNew(1); + if (newChildren == NULL) + { + ANTLR3_FPRINTF(stderr, "replaceChildren: out of memory!!"); + exit(1); + } + newChildren->add(newChildren, (void *)newTree, NULL); + + freeNewChildren = ANTLR3_TRUE; // We must free this memory + } + + // Initialize + // + replacingHowMany = stopChildIndex - startChildIndex + 1; + replacingWithHowMany = newChildren->size(newChildren); + delta = replacingHowMany - replacingWithHowMany; + numNewChildren = newChildren->size(newChildren); + + // If it is the same number of nodes, then do a direct replacement + // + if (delta == 0) + { + pANTLR3_BASE_TREE child; + + // Same number of nodes + // + j = 0; + for (i = startChildIndex; i <= stopChildIndex; i++) + { + child = (pANTLR3_BASE_TREE) newChildren->get(newChildren, j); + parent->children->set(parent->children, i, child, NULL, ANTLR3_FALSE); + child->setParent(child, parent); + child->setChildIndex(child, i); + } + } + else if (delta > 0) + { + ANTLR3_UINT32 indexToDelete; + + // Less nodes than there were before + // reuse what we have then delete the rest + // + for (j = 0; j < numNewChildren; j++) + { + parent->children->set(parent->children, startChildIndex + j, newChildren->get(newChildren, j), NULL, ANTLR3_FALSE); + } + + // We just delete the same index position until done + // + indexToDelete = startChildIndex + numNewChildren; + + for (j = indexToDelete; j <= (ANTLR3_INT32)stopChildIndex; j++) + { + parent->children->remove(parent->children, indexToDelete); + } + + parent->freshenPACIndexes(parent, startChildIndex); + } + else + { + ANTLR3_UINT32 numToInsert; + + // More nodes than there were before + // Use what we can, then start adding + // + for (j = 0; j < replacingHowMany; j++) + { + parent->children->set(parent->children, startChildIndex + j, newChildren->get(newChildren, j), NULL, ANTLR3_FALSE); + } + + numToInsert = replacingWithHowMany - replacingHowMany; + + for (j = replacingHowMany; j < replacingWithHowMany; j++) + { + parent->children->add(parent->children, newChildren->get(newChildren, j), NULL); + } + + parent->freshenPACIndexes(parent, startChildIndex); + } + + if (freeNewChildren == ANTLR3_TRUE) + { + ANTLR3_FREE(newChildren->elements); + newChildren->elements = NULL; + newChildren->size = 0; + ANTLR3_FREE(newChildren); // Will not free the nodes + } +} + +/// Set the parent and child indexes for all children of the +/// supplied tree. +/// +static void +freshenPACIndexesAll(pANTLR3_BASE_TREE tree) +{ + tree->freshenPACIndexes(tree, 0); +} + +/// Set the parent and child indexes for some of the children of the +/// supplied tree, starting with the child at the supplied index. +/// +static void +freshenPACIndexes (pANTLR3_BASE_TREE tree, ANTLR3_UINT32 offset) +{ + ANTLR3_UINT32 count; + ANTLR3_UINT32 c; + + count = tree->getChildCount(tree); // How many children do we have + + // Loop from the supplied index and set the indexes and parent + // + for (c = offset; c < count; c++) + { + pANTLR3_BASE_TREE child; + + child = tree->getChild(tree, c); + + child->setChildIndex(child, c); + child->setParent(child, tree); + } +} + diff --git a/antlr-3.1.3/runtime/C/src/antlr3basetreeadaptor.c b/antlr-3.1.3/runtime/C/src/antlr3basetreeadaptor.c new file mode 100644 index 0000000..8a165d3 --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3basetreeadaptor.c @@ -0,0 +1,802 @@ +/** \file + * Contains the base functions that all tree adaptors start with. + * this implementation can then be overridden by any higher implementation. + * + */ + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3basetreeadaptor.h> + +#ifdef ANTLR3_WINDOWS +#pragma warning( disable : 4100 ) +#endif + +/* Interface functions + */ +static pANTLR3_BASE_TREE nilNode (pANTLR3_BASE_TREE_ADAPTOR adaptor); +static pANTLR3_BASE_TREE dbgNil (pANTLR3_BASE_TREE_ADAPTOR adaptor); +static pANTLR3_BASE_TREE dupTree (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t); +static pANTLR3_BASE_TREE dbgDupTree (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t); +static pANTLR3_BASE_TREE dupTreeTT (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, pANTLR3_BASE_TREE parent); +static void addChild (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, pANTLR3_BASE_TREE child); +static void dbgAddChild (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, pANTLR3_BASE_TREE child); +static pANTLR3_BASE_TREE becomeRoot (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE newRoot, pANTLR3_BASE_TREE oldRoot); +static pANTLR3_BASE_TREE dbgBecomeRoot (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE newRoot, pANTLR3_BASE_TREE oldRoot); +static pANTLR3_BASE_TREE rulePostProcessing (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE root); +static void addChildToken (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, pANTLR3_COMMON_TOKEN child); +static void dbgAddChildToken (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, pANTLR3_COMMON_TOKEN child); +static pANTLR3_BASE_TREE becomeRootToken (pANTLR3_BASE_TREE_ADAPTOR adaptor, void * newRoot, pANTLR3_BASE_TREE oldRoot); +static pANTLR3_BASE_TREE dbgBecomeRootToken (pANTLR3_BASE_TREE_ADAPTOR adaptor, void * newRoot, pANTLR3_BASE_TREE oldRoot); +static pANTLR3_BASE_TREE createTypeToken (pANTLR3_BASE_TREE_ADAPTOR adaptor, ANTLR3_UINT32 tokenType, pANTLR3_COMMON_TOKEN fromToken); +static pANTLR3_BASE_TREE dbgCreateTypeToken (pANTLR3_BASE_TREE_ADAPTOR adaptor, ANTLR3_UINT32 tokenType, pANTLR3_COMMON_TOKEN fromToken); +static pANTLR3_BASE_TREE createTypeTokenText (pANTLR3_BASE_TREE_ADAPTOR adaptor, ANTLR3_UINT32 tokenType, pANTLR3_COMMON_TOKEN fromToken, pANTLR3_UINT8 text); +static pANTLR3_BASE_TREE dbgCreateTypeTokenText (pANTLR3_BASE_TREE_ADAPTOR adaptor, ANTLR3_UINT32 tokenType, pANTLR3_COMMON_TOKEN fromToken, pANTLR3_UINT8 text); +static pANTLR3_BASE_TREE createTypeText (pANTLR3_BASE_TREE_ADAPTOR adaptor, ANTLR3_UINT32 tokenType, pANTLR3_UINT8 text); +static pANTLR3_BASE_TREE dbgCreateTypeText (pANTLR3_BASE_TREE_ADAPTOR adaptor, ANTLR3_UINT32 tokenType, pANTLR3_UINT8 text); +static ANTLR3_UINT32 getType (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t); +static void setType (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, ANTLR3_UINT32 type); +static pANTLR3_STRING getText (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t); +static void setText (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_STRING t); +static void setText8 (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_UINT8 t); +static pANTLR3_BASE_TREE getChild (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, ANTLR3_UINT32 i); +static ANTLR3_UINT32 getChildCount (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t); +static ANTLR3_UINT32 getUniqueID (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t); +static ANTLR3_BOOLEAN isNilNode (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t); +static pANTLR3_STRING makeDot (pANTLR3_BASE_TREE_ADAPTOR adaptor, void * theTree); + +/** Given a pointer to a base tree adaptor structure (which is usually embedded in the + * super class the implements the tree adaptor used in the parse), initialize its + * function pointers and so on. + */ +ANTLR3_API void +antlr3BaseTreeAdaptorInit(pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_DEBUG_EVENT_LISTENER debugger) +{ + // Initialize the interface + // + if (debugger == NULL) + { + adaptor->nilNode = (void * (*)(pANTLR3_BASE_TREE_ADAPTOR)) + nilNode; + adaptor->addChild = (void (*)(pANTLR3_BASE_TREE_ADAPTOR, void *, void *)) + addChild; + adaptor->becomeRoot = (void * (*)(pANTLR3_BASE_TREE_ADAPTOR, void *, void *)) + becomeRoot; + adaptor->addChildToken = (void (*)(pANTLR3_BASE_TREE_ADAPTOR, void *, pANTLR3_COMMON_TOKEN)) + addChildToken; + adaptor->becomeRootToken = (void * (*)(pANTLR3_BASE_TREE_ADAPTOR, void *, void *)) + becomeRootToken; + adaptor->createTypeToken = (void * (*)(pANTLR3_BASE_TREE_ADAPTOR, ANTLR3_UINT32, pANTLR3_COMMON_TOKEN)) + createTypeToken; + adaptor->createTypeTokenText = (void * (*)(pANTLR3_BASE_TREE_ADAPTOR, ANTLR3_UINT32, pANTLR3_COMMON_TOKEN, pANTLR3_UINT8)) + createTypeTokenText; + adaptor->createTypeText = (void * (*)(pANTLR3_BASE_TREE_ADAPTOR, ANTLR3_UINT32, pANTLR3_UINT8)) + createTypeText; + adaptor->dupTree = (void * (*)(pANTLR3_BASE_TREE_ADAPTOR, void *)) + dupTree; + } + else + { + adaptor->nilNode = (void * (*)(pANTLR3_BASE_TREE_ADAPTOR)) + dbgNil; + adaptor->addChild = (void (*)(pANTLR3_BASE_TREE_ADAPTOR, void *, void *)) + dbgAddChild; + adaptor->becomeRoot = (void * (*)(pANTLR3_BASE_TREE_ADAPTOR, void *, void *)) + dbgBecomeRoot; + adaptor->addChildToken = (void (*)(pANTLR3_BASE_TREE_ADAPTOR, void *, pANTLR3_COMMON_TOKEN)) + dbgAddChildToken; + adaptor->becomeRootToken = (void * (*)(pANTLR3_BASE_TREE_ADAPTOR, void *, void *)) + dbgBecomeRootToken; + adaptor->createTypeToken = (void * (*)(pANTLR3_BASE_TREE_ADAPTOR, ANTLR3_UINT32, pANTLR3_COMMON_TOKEN)) + dbgCreateTypeToken; + adaptor->createTypeTokenText = (void * (*)(pANTLR3_BASE_TREE_ADAPTOR, ANTLR3_UINT32, pANTLR3_COMMON_TOKEN, pANTLR3_UINT8)) + dbgCreateTypeTokenText; + adaptor->createTypeText = (void * (*)(pANTLR3_BASE_TREE_ADAPTOR, ANTLR3_UINT32, pANTLR3_UINT8)) + dbgCreateTypeText; + adaptor->dupTree = (void * (*)(pANTLR3_BASE_TREE_ADAPTOR, void *)) + dbgDupTree; + debugger->adaptor = adaptor; + } + + adaptor->dupTreeTT = (void * (*)(pANTLR3_BASE_TREE_ADAPTOR, void *, void *)) + dupTreeTT; + adaptor->rulePostProcessing = (void * (*)(pANTLR3_BASE_TREE_ADAPTOR, void *)) + rulePostProcessing; + adaptor->getType = (ANTLR3_UINT32 (*)(pANTLR3_BASE_TREE_ADAPTOR, void *)) + getType; + adaptor->setType = (void (*)(pANTLR3_BASE_TREE_ADAPTOR, void *, ANTLR3_UINT32)) + setType; + adaptor->getText = (pANTLR3_STRING (*) (pANTLR3_BASE_TREE_ADAPTOR, void *)) + getText; + adaptor->setText8 = (void (*)(pANTLR3_BASE_TREE_ADAPTOR, pANTLR3_UINT8)) + setText8; + adaptor->setText = (void (*)(pANTLR3_BASE_TREE_ADAPTOR, pANTLR3_STRING)) + setText; + adaptor->getChild = (void * (*)(pANTLR3_BASE_TREE_ADAPTOR, void *, ANTLR3_UINT32)) + getChild; + adaptor->getChildCount = (ANTLR3_UINT32 (*)(pANTLR3_BASE_TREE_ADAPTOR, void *)) + getChildCount; + adaptor->getUniqueID = (ANTLR3_UINT32 (*)(pANTLR3_BASE_TREE_ADAPTOR, void *)) + getUniqueID; + adaptor->isNilNode = (ANTLR3_BOOLEAN (*)(pANTLR3_BASE_TREE_ADAPTOR, void *)) + isNilNode; + + adaptor->makeDot = (pANTLR3_STRING (*)(pANTLR3_BASE_TREE_ADAPTOR, void *)) + makeDot; + + /* Remaining functions filled in by the caller. + */ + return; +} + +static void +defineDotNodes(pANTLR3_BASE_TREE_ADAPTOR adaptor, void * t, pANTLR3_STRING dotSpec ) +{ + // How many nodes are we talking about? + // + int nCount; + int i; + + if (t == NULL) + { + // No tree, so create a blank spec + // + dotSpec->append8(dotSpec, "n0[label=\"EMPTY TREE\"]\n"); + return; + } + + // Count the nodes + // + nCount = adaptor->getChildCount(adaptor, t); + + if (nCount == 0) + { + // This will already have been included as a child of another node + // so there is nothing to add. + // + return; + } + + // For each child of the current tree, define a node using the + // memory address of the node to name it + // + for (i = 0; i<nCount; i++) + { + pANTLR3_BASE_TREE child; + char buff[64]; + pANTLR3_STRING text; + int j; + + // Pick up a pointer for the child + // + child = adaptor->getChild(adaptor, t, i); + + // Name the node + // + sprintf(buff, "\tn%p[label=\"", child); + dotSpec->append8(dotSpec, buff); + text = adaptor->getText(adaptor, child); + for (j = 0; j < (ANTLR3_INT32)(text->len); j++) + { + if (text->charAt(text, j) == '"') + { + dotSpec->append8(dotSpec, "\\\""); + } + else + { + dotSpec->addc(dotSpec, text->charAt(text, j)); + } + } + dotSpec->append8(dotSpec, "\"]\n"); + + // And now define the children of this child (if any) + // + defineDotNodes(adaptor, child, dotSpec); + } + + // Done + // + return; +} + +static void +defineDotEdges(pANTLR3_BASE_TREE_ADAPTOR adaptor, void * t, pANTLR3_STRING dotSpec) +{ + // How many nodes are we talking about? + // + int nCount; + int i; + + if (t == NULL) + { + // No tree, so do nothing + // + return; + } + + // Count the nodes + // + nCount = adaptor->getChildCount(adaptor, t); + + if (nCount == 0) + { + // This will already have been included as a child of another node + // so there is nothing to add. + // + return; + } + + // For each child, define an edge from this parent, then process + // and children of this child in the same way + // + for (i=0; i<nCount; i++) + { + pANTLR3_BASE_TREE child; + char buff[128]; + + // Next child + // + child = adaptor->getChild(adaptor, t, i); + + // Create the edge relation + // + sprintf(buff, "\t\tn%p -> n%p\t\t// ", t, child); + dotSpec->append8(dotSpec, buff); + + // Document the relationship + // + dotSpec->appendS(dotSpec, adaptor->getText(adaptor, t)); + dotSpec->append8(dotSpec, " -> "); + dotSpec->appendS(dotSpec, adaptor->getText(adaptor, child)); + dotSpec->append8(dotSpec, "\n"); + + // Define edges for this child + // + defineDotEdges(adaptor, child, dotSpec); + } + + // Done + // + return; +} + +/// Produce a DOT specification for graphviz +// +static pANTLR3_STRING +makeDot (pANTLR3_BASE_TREE_ADAPTOR adaptor, void * theTree) +{ + // The string we are building up + // + pANTLR3_STRING dotSpec; + + dotSpec = adaptor->strFactory->newStr + + ( + adaptor->strFactory, + + // Default look and feel + // + (pANTLR3_UINT8) + "digraph {\n\n" + "\tordering=out;\n" + "\tranksep=.4;\n" + "\tbgcolor=\"lightgrey\"; node [shape=box, fixedsize=false, fontsize=12, fontname=\"Helvetica-bold\", fontcolor=\"blue\"\n" + "\twidth=.25, height=.25, color=\"black\", fillcolor=\"white\", style=\"filled, solid, bold\"];\n\n" + "\tedge [arrowsize=.5, color=\"black\", style=\"bold\"]\n\n" + ); + + // First produce the node defintions + // + defineDotNodes(adaptor, theTree, dotSpec); + dotSpec->append8(dotSpec, "\n"); + defineDotEdges(adaptor, theTree, dotSpec); + + // Terminate the spec + // + dotSpec->append8(dotSpec, "\n}"); + + // Result + // + return dotSpec; +} + + +/** Create and return a nil tree node (no token payload) + */ +static pANTLR3_BASE_TREE +nilNode (pANTLR3_BASE_TREE_ADAPTOR adaptor) +{ + return adaptor->create(adaptor, NULL); +} + +static pANTLR3_BASE_TREE +dbgNil (pANTLR3_BASE_TREE_ADAPTOR adaptor) +{ + pANTLR3_BASE_TREE t; + + t = adaptor->create (adaptor, NULL); + adaptor->debugger->createNode (adaptor->debugger, t); + + return t; +} + +/** Return a duplicate of the entire tree (implementation provided by the + * BASE_TREE interface.) + */ +static pANTLR3_BASE_TREE +dupTree (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t) +{ + return adaptor->dupTreeTT(adaptor, t, NULL); +} + +pANTLR3_BASE_TREE +dupTreeTT (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, pANTLR3_BASE_TREE parent) +{ + pANTLR3_BASE_TREE newTree; + pANTLR3_BASE_TREE child; + pANTLR3_BASE_TREE newSubTree; + ANTLR3_UINT32 n; + ANTLR3_UINT32 i; + + if (t == NULL) + { + return NULL; + } + newTree = t->dupNode(t); + + // Ensure new subtree root has parent/child index set + // + adaptor->setChildIndex (adaptor, newTree, t->getChildIndex(t)); + adaptor->setParent (adaptor, newTree, parent); + n = adaptor->getChildCount (adaptor, t); + + for (i=0; i < n; i++) + { + child = adaptor->getChild (adaptor, t, i); + newSubTree = adaptor->dupTreeTT (adaptor, child, t); + adaptor->addChild (adaptor, newTree, newSubTree); + } + return newTree; +} + +/// Sends the required debugging events for duplicating a tree +/// to the debugger. +/// +static void +simulateTreeConstruction(pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE tree) +{ + ANTLR3_UINT32 n; + ANTLR3_UINT32 i; + pANTLR3_BASE_TREE child; + + // Send the create node event + // + adaptor->debugger->createNode(adaptor->debugger, tree); + + n = adaptor->getChildCount(adaptor, tree); + for (i = 0; i < n; i++) + { + child = adaptor->getChild(adaptor, tree, i); + simulateTreeConstruction(adaptor, child); + adaptor->debugger->addChild(adaptor->debugger, tree, child); + } +} + +pANTLR3_BASE_TREE +dbgDupTree (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE tree) +{ + pANTLR3_BASE_TREE t; + + // Call the normal dup tree mechanism first + // + t = adaptor->dupTreeTT(adaptor, tree, NULL); + + // In order to tell the debugger what we have just done, we now + // simulate the tree building mechanism. THis will fire + // lots of debugging events to the client and look like we + // duped the tree.. + // + simulateTreeConstruction(adaptor, t); + + return t; +} + +/** Add a child to the tree t. If child is a flat tree (a list), make all + * in list children of t. Warning: if t has no children, but child does + * and child isNilNode then it is ok to move children to t via + * t.children = child.children; i.e., without copying the array. This + * is for construction and I'm not sure it's completely general for + * a tree's addChild method to work this way. Make sure you differentiate + * between your tree's addChild and this parser tree construction addChild + * if it's not ok to move children to t with a simple assignment. + */ +static void +addChild (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, pANTLR3_BASE_TREE child) +{ + if (t != NULL && child != NULL) + { + t->addChild(t, child); + } +} +static void +dbgAddChild (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, pANTLR3_BASE_TREE child) +{ + if (t != NULL && child != NULL) + { + t->addChild(t, child); + adaptor->debugger->addChild(adaptor->debugger, t, child); + } +} +/** Use the adaptor implementation to add a child node with the supplied token + */ +static void +addChildToken (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, pANTLR3_COMMON_TOKEN child) +{ + if (t != NULL && child != NULL) + { + adaptor->addChild(adaptor, t, adaptor->create(adaptor, child)); + } +} +static void +dbgAddChildToken (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, pANTLR3_COMMON_TOKEN child) +{ + pANTLR3_BASE_TREE tc; + + if (t != NULL && child != NULL) + { + tc = adaptor->create(adaptor, child); + adaptor->addChild(adaptor, t, tc); + adaptor->debugger->addChild(adaptor->debugger, t, tc); + } +} + +/** If oldRoot is a nil root, just copy or move the children to newRoot. + * If not a nil root, make oldRoot a child of newRoot. + * + * \code + * old=^(nil a b c), new=r yields ^(r a b c) + * old=^(a b c), new=r yields ^(r ^(a b c)) + * \endcode + * + * If newRoot is a nil-rooted single child tree, use the single + * child as the new root node. + * + * \code + * old=^(nil a b c), new=^(nil r) yields ^(r a b c) + * old=^(a b c), new=^(nil r) yields ^(r ^(a b c)) + * \endcode + * + * If oldRoot was null, it's ok, just return newRoot (even if isNilNode). + * + * \code + * old=null, new=r yields r + * old=null, new=^(nil r) yields ^(nil r) + * \endcode + * + * Return newRoot. Throw an exception if newRoot is not a + * simple node or nil root with a single child node--it must be a root + * node. If newRoot is <code>^(nil x)</endcode> return x as newRoot. + * + * Be advised that it's ok for newRoot to point at oldRoot's + * children; i.e., you don't have to copy the list. We are + * constructing these nodes so we should have this control for + * efficiency. + */ +static pANTLR3_BASE_TREE +becomeRoot (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE newRootTree, pANTLR3_BASE_TREE oldRootTree) +{ + pANTLR3_BASE_TREE saveRoot; + + /* Protect against tree rewrites if we are in some sort of error + * state, but have tried to recover. In C we can end up with a null pointer + * for a tree that was not produced. + */ + if (newRootTree == NULL) + { + return oldRootTree; + } + + /* root is just the new tree as is if there is no + * current root tree. + */ + if (oldRootTree == NULL) + { + return newRootTree; + } + + /* Produce ^(nil real-node) + */ + if (newRootTree->isNilNode(newRootTree)) + { + if (newRootTree->getChildCount(newRootTree) > 1) + { + /* TODO: Handle tree exceptions + */ + ANTLR3_FPRINTF(stderr, "More than one node as root! TODO: Create tree exception handling\n"); + return newRootTree; + } + + /* The new root is the first child, keep track of the original newRoot + * because if it was a Nil Node, then we can reuse it now. + */ + saveRoot = newRootTree; + newRootTree = newRootTree->getChild(newRootTree, 0); + + // Reclaim the old nilNode() + // + saveRoot->reuse(saveRoot); + } + + /* Add old root into new root. addChild takes care of the case where oldRoot + * is a flat list (nill rooted tree). All children of oldroot are added to + * new root. + */ + newRootTree->addChild(newRootTree, oldRootTree); + + // If the oldroot tree was a nil node, then we know at this point + // it has become orphaned by the rewrite logic, so we tell it to do + // whatever it needs to do to be reused. + // + if (oldRootTree->isNilNode(oldRootTree)) + { + // We have taken an old Root Tree and appended all its children to the new + // root. In addition though it was a nil node, which means the generated code + // will not reuse it again, so we will reclaim it here. First we want to zero out + // any pointers it was carrying around. We are just the baseTree handler so we + // don't know necessarilly know how to do this for the real node, we just ask the tree itself + // to do it. + // + oldRootTree->reuse(oldRootTree); + } + /* Always returns new root structure + */ + return newRootTree; + +} +static pANTLR3_BASE_TREE +dbgBecomeRoot (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE newRootTree, pANTLR3_BASE_TREE oldRootTree) +{ + pANTLR3_BASE_TREE t; + + t = becomeRoot(adaptor, newRootTree, oldRootTree); + + adaptor->debugger->becomeRoot(adaptor->debugger, newRootTree, oldRootTree); + + return t; +} +/** Transform ^(nil x) to x + */ +static pANTLR3_BASE_TREE + rulePostProcessing (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE root) +{ + pANTLR3_BASE_TREE saveRoot; + + // Keep track of the root we are given. If it is a nilNode, then we + // can reuse it rather than orphaning it! + // + saveRoot = root; + + if (root != NULL && root->isNilNode(root)) + { + if (root->getChildCount(root) == 0) + { + root = NULL; + } + else if (root->getChildCount(root) == 1) + { + root = root->getChild(root, 0); + root->setParent(root, NULL); + root->setChildIndex(root, -1); + + // The root we were given was a nil node, wiht one child, which means it has + // been abandoned and would be lost in the node factory. However + // nodes can be flagged as resuable to prevent this terrible waste + // + saveRoot->reuse(saveRoot); + } + } + + return root; +} + +/** Use the adaptor interface to set a new tree node with the supplied token + * to the root of the tree. + */ +static pANTLR3_BASE_TREE + becomeRootToken (pANTLR3_BASE_TREE_ADAPTOR adaptor, void * newRoot, pANTLR3_BASE_TREE oldRoot) +{ + return adaptor->becomeRoot(adaptor, adaptor->create(adaptor, newRoot), oldRoot); +} +static pANTLR3_BASE_TREE +dbgBecomeRootToken (pANTLR3_BASE_TREE_ADAPTOR adaptor, void * newRoot, pANTLR3_BASE_TREE oldRoot) +{ + pANTLR3_BASE_TREE t; + + t = adaptor->becomeRoot(adaptor, adaptor->create(adaptor, newRoot), oldRoot); + + adaptor->debugger->becomeRoot(adaptor->debugger,t, oldRoot); + + return t; +} + +/** Use the super class supplied create() method to create a new node + * from the supplied token. + */ +static pANTLR3_BASE_TREE +createTypeToken (pANTLR3_BASE_TREE_ADAPTOR adaptor, ANTLR3_UINT32 tokenType, pANTLR3_COMMON_TOKEN fromToken) +{ + /* Create the new token + */ + fromToken = adaptor->createTokenFromToken(adaptor, fromToken); + + /* Set the type of the new token to that supplied + */ + fromToken->setType(fromToken, tokenType); + + /* Return a new node based upon this token + */ + return adaptor->create(adaptor, fromToken); +} +static pANTLR3_BASE_TREE +dbgCreateTypeToken (pANTLR3_BASE_TREE_ADAPTOR adaptor, ANTLR3_UINT32 tokenType, pANTLR3_COMMON_TOKEN fromToken) +{ + pANTLR3_BASE_TREE t; + + t = createTypeToken(adaptor, tokenType, fromToken); + + adaptor->debugger->createNode(adaptor->debugger, t); + + return t; +} + +static pANTLR3_BASE_TREE +createTypeTokenText (pANTLR3_BASE_TREE_ADAPTOR adaptor, ANTLR3_UINT32 tokenType, pANTLR3_COMMON_TOKEN fromToken, pANTLR3_UINT8 text) +{ + /* Create the new token + */ + fromToken = adaptor->createTokenFromToken(adaptor, fromToken); + + /* Set the type of the new token to that supplied + */ + fromToken->setType(fromToken, tokenType); + + /* Set the text of the token accordingly + */ + fromToken->setText8(fromToken, text); + + /* Return a new node based upon this token + */ + return adaptor->create(adaptor, fromToken); +} +static pANTLR3_BASE_TREE +dbgCreateTypeTokenText (pANTLR3_BASE_TREE_ADAPTOR adaptor, ANTLR3_UINT32 tokenType, pANTLR3_COMMON_TOKEN fromToken, pANTLR3_UINT8 text) +{ + pANTLR3_BASE_TREE t; + + t = createTypeTokenText(adaptor, tokenType, fromToken, text); + + adaptor->debugger->createNode(adaptor->debugger, t); + + return t; +} + +static pANTLR3_BASE_TREE + createTypeText (pANTLR3_BASE_TREE_ADAPTOR adaptor, ANTLR3_UINT32 tokenType, pANTLR3_UINT8 text) +{ + pANTLR3_COMMON_TOKEN fromToken; + + /* Create the new token + */ + fromToken = adaptor->createToken(adaptor, tokenType, text); + + /* Return a new node based upon this token + */ + return adaptor->create(adaptor, fromToken); +} +static pANTLR3_BASE_TREE + dbgCreateTypeText (pANTLR3_BASE_TREE_ADAPTOR adaptor, ANTLR3_UINT32 tokenType, pANTLR3_UINT8 text) +{ + pANTLR3_BASE_TREE t; + + t = createTypeText(adaptor, tokenType, text); + + adaptor->debugger->createNode(adaptor->debugger, t); + + return t; + +} +/** Dummy implementation - will be supplied by super class + */ +static ANTLR3_UINT32 + getType (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t) +{ + return 0; +} + +/** Dummy implementation - will be supplied by super class + */ +static void + setType (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, ANTLR3_UINT32 type) +{ + ANTLR3_FPRINTF(stderr, "Internal error - implementor of superclass containing ANTLR3_TREE_ADAPTOR did not implement setType()\n"); +} + +/** Dummy implementation - will be supplied by super class + */ +static pANTLR3_STRING + getText (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t) +{ + ANTLR3_FPRINTF(stderr, "Internal error - implementor of superclass containing ANTLR3_TREE_ADAPTOR did not implement getText()\n"); + return NULL; +} + +/** Dummy implementation - will be supplied by super class + */ +static void + setText (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_STRING t) +{ + ANTLR3_FPRINTF(stderr, "Internal error - implementor of superclass containing ANTLR3_TREE_ADAPTOR did not implement setText()\n"); +} +/** Dummy implementation - will be supplied by super class + */ +static void +setText8 (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_UINT8 t) +{ + ANTLR3_FPRINTF(stderr, "Internal error - implementor of superclass containing ANTLR3_TREE_ADAPTOR did not implement setText()\n"); +} + +static pANTLR3_BASE_TREE + getChild (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE tree, ANTLR3_UINT32 i) +{ + ANTLR3_FPRINTF(stderr, "Internal error - implementor of superclass containing ANTLR3_TREE_ADAPTOR did not implement getChild()\n"); + return NULL; +} + +static ANTLR3_UINT32 + getChildCount (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE tree) +{ + ANTLR3_FPRINTF(stderr, "Internal error - implementor of superclass containing ANTLR3_TREE_ADAPTOR did not implement getChildCount()\n"); + return 0; +} + +/** Returns a uniqueID for the node. Because this is the C implementation + * we can just use its address suitably converted/cast to an integer. + */ +static ANTLR3_UINT32 + getUniqueID (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE node) +{ + return ANTLR3_UINT32_CAST(node); +} + +static ANTLR3_BOOLEAN +isNilNode (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t) +{ + return t->isNilNode(t); +} diff --git a/antlr-3.1.3/runtime/C/src/antlr3bitset.c b/antlr-3.1.3/runtime/C/src/antlr3bitset.c new file mode 100644 index 0000000..26fcccc --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3bitset.c @@ -0,0 +1,680 @@ +/// +/// \file +/// Contains the C implementation of ANTLR3 bitsets as adapted from Terence Parr's +/// Java implementation. +/// + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3bitset.h> + +// External interface +// + +static pANTLR3_BITSET antlr3BitsetClone (pANTLR3_BITSET inSet); +static pANTLR3_BITSET antlr3BitsetOR (pANTLR3_BITSET bitset1, pANTLR3_BITSET bitset2); +static void antlr3BitsetORInPlace (pANTLR3_BITSET bitset, pANTLR3_BITSET bitset2); +static ANTLR3_UINT32 antlr3BitsetSize (pANTLR3_BITSET bitset); +static void antlr3BitsetAdd (pANTLR3_BITSET bitset, ANTLR3_INT32 bit); +static ANTLR3_BOOLEAN antlr3BitsetEquals (pANTLR3_BITSET bitset1, pANTLR3_BITSET bitset2); +static ANTLR3_BOOLEAN antlr3BitsetMember (pANTLR3_BITSET bitset, ANTLR3_UINT32 bit); +static ANTLR3_UINT32 antlr3BitsetNumBits (pANTLR3_BITSET bitset); +static void antlr3BitsetRemove (pANTLR3_BITSET bitset, ANTLR3_UINT32 bit); +static ANTLR3_BOOLEAN antlr3BitsetIsNil (pANTLR3_BITSET bitset); +static pANTLR3_INT32 antlr3BitsetToIntList (pANTLR3_BITSET bitset); + +// Local functions +// +static void growToInclude (pANTLR3_BITSET bitset, ANTLR3_INT32 bit); +static void grow (pANTLR3_BITSET bitset, ANTLR3_INT32 newSize); +static ANTLR3_UINT64 bitMask (ANTLR3_UINT32 bitNumber); +static ANTLR3_UINT32 numWordsToHold (ANTLR3_UINT32 bit); +static ANTLR3_UINT32 wordNumber (ANTLR3_UINT32 bit); +static void antlr3BitsetFree (pANTLR3_BITSET bitset); + +static void +antlr3BitsetFree(pANTLR3_BITSET bitset) +{ + if (bitset->blist.bits != NULL) + { + ANTLR3_FREE(bitset->blist.bits); + bitset->blist.bits = NULL; + } + ANTLR3_FREE(bitset); + + return; +} + +ANTLR3_API pANTLR3_BITSET +antlr3BitsetNew(ANTLR3_UINT32 numBits) +{ + pANTLR3_BITSET bitset; + + ANTLR3_UINT32 numelements; + + // Allocate memory for the bitset structure itself + // + bitset = (pANTLR3_BITSET) ANTLR3_MALLOC((size_t)sizeof(ANTLR3_BITSET)); + + if (bitset == NULL) + { + return NULL; + } + + // Avoid memory thrashing at the up front expense of a few bytes + // + if (numBits < (8 * ANTLR3_BITSET_BITS)) + { + numBits = 8 * ANTLR3_BITSET_BITS; + } + + // No we need to allocate the memory for the number of bits asked for + // in multiples of ANTLR3_UINT64. + // + numelements = ((numBits -1) >> ANTLR3_BITSET_LOG_BITS) + 1; + + bitset->blist.bits = (pANTLR3_BITWORD) ANTLR3_MALLOC((size_t)(numelements * sizeof(ANTLR3_BITWORD))); + memset(bitset->blist.bits, 0, (size_t)(numelements * sizeof(ANTLR3_BITWORD))); + bitset->blist.length = numelements; + + if (bitset->blist.bits == NULL) + { + ANTLR3_FREE(bitset); + return NULL; + } + + antlr3BitsetSetAPI(bitset); + + + // All seems good + // + return bitset; +} + +ANTLR3_API void +antlr3BitsetSetAPI(pANTLR3_BITSET bitset) +{ + bitset->clone = antlr3BitsetClone; + bitset->bor = antlr3BitsetOR; + bitset->borInPlace = antlr3BitsetORInPlace; + bitset->size = antlr3BitsetSize; + bitset->add = antlr3BitsetAdd; + bitset->grow = grow; + bitset->equals = antlr3BitsetEquals; + bitset->isMember = antlr3BitsetMember; + bitset->numBits = antlr3BitsetNumBits; + bitset->remove = antlr3BitsetRemove; + bitset->isNilNode = antlr3BitsetIsNil; + bitset->toIntList = antlr3BitsetToIntList; + + bitset->free = antlr3BitsetFree; +} + +ANTLR3_API pANTLR3_BITSET +antlr3BitsetCopy(pANTLR3_BITSET_LIST blist) +{ + pANTLR3_BITSET bitset; + int numElements; + + // Allocate memory for the bitset structure itself + // + bitset = (pANTLR3_BITSET) ANTLR3_MALLOC((size_t)sizeof(ANTLR3_BITSET)); + + if (bitset == NULL) + { + return NULL; + } + + numElements = blist->length; + + // Avoid memory thrashing at the expense of a few more bytes + // + if (numElements < 8) + { + numElements = 8; + } + + // Install the length in ANTLR3_UINT64 units + // + bitset->blist.length = numElements; + + bitset->blist.bits = (pANTLR3_BITWORD)ANTLR3_MALLOC((size_t)(numElements * sizeof(ANTLR3_BITWORD))); + + if (bitset->blist.bits == NULL) + { + ANTLR3_FREE(bitset); + return NULL; + } + + ANTLR3_MEMCPY(bitset->blist.bits, blist->bits, (ANTLR3_UINT64)(numElements * sizeof(ANTLR3_BITWORD))); + + // All seems good + // + return bitset; +} + +static pANTLR3_BITSET +antlr3BitsetClone(pANTLR3_BITSET inSet) +{ + pANTLR3_BITSET bitset; + + // Allocate memory for the bitset structure itself + // + bitset = antlr3BitsetNew(ANTLR3_BITSET_BITS * inSet->blist.length); + + if (bitset == NULL) + { + return NULL; + } + + // Install the actual bits in the source set + // + ANTLR3_MEMCPY(bitset->blist.bits, inSet->blist.bits, (ANTLR3_UINT64)(inSet->blist.length * sizeof(ANTLR3_BITWORD))); + + // All seems good + // + return bitset; +} + + +ANTLR3_API pANTLR3_BITSET +antlr3BitsetList(pANTLR3_HASH_TABLE list) +{ + pANTLR3_BITSET bitSet; + pANTLR3_HASH_ENUM en; + pANTLR3_HASH_KEY key; + ANTLR3_UINT64 bit; + + // We have no idea what exactly is in the list + // so create a default bitset and then just add stuff + // as we enumerate. + // + bitSet = antlr3BitsetNew(0); + + en = antlr3EnumNew(list); + + while (en->next(en, &key, (void **)(&bit)) == ANTLR3_SUCCESS) + { + bitSet->add(bitSet, (ANTLR3_UINT32)bit); + } + en->free(en); + + return NULL; +} + +/// +/// \brief +/// Creates a new bitset with at least one 64 bit bset of bits, but as +/// many 64 bit sets as are required. +/// +/// \param[in] bset +/// A variable number of bits to add to the set, ending in -1 (impossible bit). +/// +/// \returns +/// A new bit set with all of the specified bitmaps in it and the API +/// initialized. +/// +/// Call as: +/// - pANTLR3_BITSET = antlrBitsetLoad(bset, bset11, ..., -1); +/// - pANTLR3_BITSET = antlrBitsetOf(-1); Create empty bitset +/// +/// \remarks +/// Stdargs function - must supply -1 as last paremeter, which is NOT +/// added to the set. +/// +/// +ANTLR3_API pANTLR3_BITSET +antlr3BitsetLoad(pANTLR3_BITSET_LIST inBits) +{ + pANTLR3_BITSET bitset; + ANTLR3_UINT32 count; + + // Allocate memory for the bitset structure itself + // the input parameter is the bit number (0 based) + // to include in the bitset, so we need at at least + // bit + 1 bits. If any arguments indicate a + // a bit higher than the default number of bits (0 means default size) + // then Add() will take care + // of it. + // + bitset = antlr3BitsetNew(0); + + if (bitset == NULL) + { + return NULL; + } + + if (inBits != NULL) + { + // Now we can add the element bits into the set + // + count=0; + while (count < inBits->length) + { + if (bitset->blist.length <= count) + { + bitset->grow(bitset, count+1); + } + + bitset->blist.bits[count] = *((inBits->bits)+count); + count++; + } + } + + // return the new bitset + // + return bitset; +} + +/// +/// \brief +/// Creates a new bitset with at least one element, but as +/// many elements are required. +/// +/// \param[in] bit +/// A variable number of bits to add to the set, ending in -1 (impossible bit). +/// +/// \returns +/// A new bit set with all of the specified elements added into it. +/// +/// Call as: +/// - pANTLR3_BITSET = antlrBitsetOf(n, n1, n2, -1); +/// - pANTLR3_BITSET = antlrBitsetOf(-1); Create empty bitset +/// +/// \remarks +/// Stdargs function - must supply -1 as last paremeter, which is NOT +/// added to the set. +/// +/// +ANTLR3_API pANTLR3_BITSET +antlr3BitsetOf(ANTLR3_INT32 bit, ...) +{ + pANTLR3_BITSET bitset; + + va_list ap; + + // Allocate memory for the bitset structure itself + // the input parameter is the bit number (0 based) + // to include in the bitset, so we need at at least + // bit + 1 bits. If any arguments indicate a + // a bit higher than the default number of bits (0 menas default size) + // then Add() will take care + // of it. + // + bitset = antlr3BitsetNew(0); + + if (bitset == NULL) + { + return NULL; + } + + // Now we can add the element bits into the set + // + va_start(ap, bit); + while (bit != -1) + { + antlr3BitsetAdd(bitset, bit); + bit = va_arg(ap, ANTLR3_UINT32); + } + va_end(ap); + + // return the new bitset + // + return bitset; +} + +static pANTLR3_BITSET +antlr3BitsetOR(pANTLR3_BITSET bitset1, pANTLR3_BITSET bitset2) +{ + pANTLR3_BITSET bitset; + + if (bitset1 == NULL) + { + return antlr3BitsetClone(bitset2); + } + + if (bitset2 == NULL) + { + return antlr3BitsetClone(bitset1); + } + + // Allocate memory for the newly ordered bitset structure itself. + // + bitset = antlr3BitsetClone(bitset1); + + antlr3BitsetORInPlace(bitset, bitset2); + + return bitset; + +} + +static void +antlr3BitsetAdd(pANTLR3_BITSET bitset, ANTLR3_INT32 bit) +{ + ANTLR3_UINT32 word; + + word = wordNumber(bit); + + if (word > bitset->blist.length) + { + growToInclude(bitset, bit); + } + + bitset->blist.bits[word] |= bitMask(bit); + +} + +static void +grow(pANTLR3_BITSET bitset, ANTLR3_INT32 newSize) +{ + pANTLR3_BITWORD newBits; + + // Space for newly sized bitset - TODO: come back to this and use realloc?, it may + // be more efficient... + // + newBits = (pANTLR3_BITWORD) ANTLR3_MALLOC((size_t)(newSize * sizeof(ANTLR3_BITWORD))); + + if (bitset->blist.bits != NULL) + { + // Copy existing bits + // + ANTLR3_MEMCPY((void *)newBits, (const void *)bitset->blist.bits, (size_t)(bitset->blist.length * sizeof(ANTLR3_BITWORD))); + + // Out with the old bits... de de de derrr + // + ANTLR3_FREE(bitset->blist.bits); + } + + // In with the new bits... keerrrang. + // + bitset->blist.bits = newBits; +} + +static void +growToInclude(pANTLR3_BITSET bitset, ANTLR3_INT32 bit) +{ + ANTLR3_UINT32 bl; + ANTLR3_UINT32 nw; + + bl = (bitset->blist.length << 1); + nw = numWordsToHold(bit); + if (bl > nw) + { + bitset->grow(bitset, bl); + } + else + { + bitset->grow(bitset, nw); + } +} + +static void +antlr3BitsetORInPlace(pANTLR3_BITSET bitset, pANTLR3_BITSET bitset2) +{ + ANTLR3_UINT32 minimum; + ANTLR3_UINT32 i; + + if (bitset2 == NULL) + { + return; + } + + + // First make sure that the target bitset is big enough + // for the new bits to be ored in. + // + if (bitset->blist.length < bitset2->blist.length) + { + growToInclude(bitset, (bitset2->blist.length * sizeof(ANTLR3_BITWORD))); + } + + // Or the miniimum number of bits after any resizing went on + // + if (bitset->blist.length < bitset2->blist.length) + { + minimum = bitset->blist.length; + } + else + { + minimum = bitset2->blist.length; + } + + for (i = minimum; i > 0; i--) + { + bitset->blist.bits[i-1] |= bitset2->blist.bits[i-1]; + } +} + +static ANTLR3_UINT64 +bitMask(ANTLR3_UINT32 bitNumber) +{ + return ((ANTLR3_UINT64)1) << (bitNumber & (ANTLR3_BITSET_MOD_MASK)); +} + +static ANTLR3_UINT32 +antlr3BitsetSize(pANTLR3_BITSET bitset) +{ + ANTLR3_UINT32 degree; + ANTLR3_INT32 i; + ANTLR3_INT8 bit; + + // TODO: Come back to this, it may be faster to & with 0x01 + // then shift right a copy of the 4 bits, than shift left a constant of 1. + // But then again, the optimizer might just work this out + // anyway. + // + degree = 0; + for (i = bitset->blist.length - 1; i>= 0; i--) + { + if (bitset->blist.bits[i] != 0) + { + for (bit = ANTLR3_BITSET_BITS - 1; bit >= 0; bit--) + { + if ((bitset->blist.bits[i] & (((ANTLR3_BITWORD)1) << bit)) != 0) + { + degree++; + } + } + } + } + return degree; +} + +static ANTLR3_BOOLEAN +antlr3BitsetEquals(pANTLR3_BITSET bitset1, pANTLR3_BITSET bitset2) +{ + ANTLR3_INT32 minimum; + ANTLR3_INT32 i; + + if (bitset1 == NULL || bitset2 == NULL) + { + return ANTLR3_FALSE; + } + + // Work out the minimum comparison set + // + if (bitset1->blist.length < bitset2->blist.length) + { + minimum = bitset1->blist.length; + } + else + { + minimum = bitset2->blist.length; + } + + // Make sure explict in common bits are equal + // + for (i = minimum - 1; i >=0 ; i--) + { + if (bitset1->blist.bits[i] != bitset2->blist.bits[i]) + { + return ANTLR3_FALSE; + } + } + + // Now make sure the bits of the larger set are all turned + // off. + // + if (bitset1->blist.length > (ANTLR3_UINT32)minimum) + { + for (i = minimum ; (ANTLR3_UINT32)i < bitset1->blist.length; i++) + { + if (bitset1->blist.bits[i] != 0) + { + return ANTLR3_FALSE; + } + } + } + else if (bitset2->blist.length > (ANTLR3_UINT32)minimum) + { + for (i = minimum; (ANTLR3_UINT32)i < bitset2->blist.length; i++) + { + if (bitset2->blist.bits[i] != 0) + { + return ANTLR3_FALSE; + } + } + } + + return ANTLR3_TRUE; +} + +static ANTLR3_BOOLEAN +antlr3BitsetMember(pANTLR3_BITSET bitset, ANTLR3_UINT32 bit) +{ + ANTLR3_UINT32 wordNo; + + wordNo = wordNumber(bit); + + if (wordNo >= bitset->blist.length) + { + return ANTLR3_FALSE; + } + + if ((bitset->blist.bits[wordNo] & bitMask(bit)) == 0) + { + return ANTLR3_FALSE; + } + else + { + return ANTLR3_TRUE; + } +} + +static void +antlr3BitsetRemove(pANTLR3_BITSET bitset, ANTLR3_UINT32 bit) +{ + ANTLR3_UINT32 wordNo; + + wordNo = wordNumber(bit); + + if (wordNo < bitset->blist.length) + { + bitset->blist.bits[wordNo] &= ~(bitMask(bit)); + } +} +static ANTLR3_BOOLEAN +antlr3BitsetIsNil(pANTLR3_BITSET bitset) +{ + ANTLR3_INT32 i; + + for (i = bitset->blist.length -1; i>= 0; i--) + { + if (bitset->blist.bits[i] != 0) + { + return ANTLR3_FALSE; + } + } + + return ANTLR3_TRUE; +} + +static ANTLR3_UINT32 +numWordsToHold(ANTLR3_UINT32 bit) +{ + return (bit >> ANTLR3_BITSET_LOG_BITS) + 1; +} + +static ANTLR3_UINT32 +wordNumber(ANTLR3_UINT32 bit) +{ + return bit >> ANTLR3_BITSET_LOG_BITS; +} + +static ANTLR3_UINT32 +antlr3BitsetNumBits(pANTLR3_BITSET bitset) +{ + return bitset->blist.length << ANTLR3_BITSET_LOG_BITS; +} + +/** Produce an integer list of all the bits that are turned on + * in this bitset. Used for error processing in the main as the bitset + * reresents a number of integer tokens which we use for follow sets + * and so on. + * + * The first entry is the number of elements following in the list. + */ +static pANTLR3_INT32 +antlr3BitsetToIntList (pANTLR3_BITSET bitset) +{ + ANTLR3_UINT32 numInts; // How many integers we will need + ANTLR3_UINT32 numBits; // How many bits are in the set + ANTLR3_UINT32 i; + ANTLR3_UINT32 index; + + pANTLR3_INT32 intList; + + numInts = bitset->size(bitset) + 1; + numBits = bitset->numBits(bitset); + + intList = (pANTLR3_INT32)ANTLR3_MALLOC(numInts * sizeof(ANTLR3_INT32)); + + if (intList == NULL) + { + return NULL; // Out of memory + } + + intList[0] = numInts; + + // Enumerate the bits that are turned on + // + for (i = 0, index = 1; i<numBits; i++) + { + if (bitset->isMember(bitset, i) == ANTLR3_TRUE) + { + intList[index++] = i; + } + } + + // Result set + // + return intList; +} + diff --git a/antlr-3.1.3/runtime/C/src/antlr3collections.c b/antlr-3.1.3/runtime/C/src/antlr3collections.c new file mode 100644 index 0000000..c495c9f --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3collections.c @@ -0,0 +1,2159 @@ +/// \file +/// Provides a number of useful functions that are roughly equivalent +/// to java HashTable and List for the purposes of Antlr 3 C runtime. +/// Also useable by the C programmer for things like symbol tables pointers +/// and so on. +/// +/// + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3.h> + +// Interface functions for hash table +// + +// String based keys +// +static void antlr3HashDelete (pANTLR3_HASH_TABLE table, void * key); +static void * antlr3HashGet (pANTLR3_HASH_TABLE table, void * key); +static pANTLR3_HASH_ENTRY antlr3HashRemove (pANTLR3_HASH_TABLE table, void * key); +static ANTLR3_INT32 antlr3HashPut (pANTLR3_HASH_TABLE table, void * key, void * element, void (ANTLR3_CDECL *freeptr)(void *)); + +// Integer based keys (Lists and so on) +// +static void antlr3HashDeleteI (pANTLR3_HASH_TABLE table, ANTLR3_INTKEY key); +static void * antlr3HashGetI (pANTLR3_HASH_TABLE table, ANTLR3_INTKEY key); +static pANTLR3_HASH_ENTRY antlr3HashRemoveI (pANTLR3_HASH_TABLE table, ANTLR3_INTKEY key); +static ANTLR3_INT32 antlr3HashPutI (pANTLR3_HASH_TABLE table, ANTLR3_INTKEY key, void * element, void (ANTLR3_CDECL *freeptr)(void *)); + +static void antlr3HashFree (pANTLR3_HASH_TABLE table); +static ANTLR3_UINT32 antlr3HashSize (pANTLR3_HASH_TABLE table); + +// ----------- + +// Interface functions for enumeration +// +static int antlr3EnumNext (pANTLR3_HASH_ENUM en, pANTLR3_HASH_KEY * key, void ** data); +static void antlr3EnumFree (pANTLR3_HASH_ENUM en); + +// Interface functions for List +// +static void antlr3ListFree (pANTLR3_LIST list); +static void antlr3ListDelete(pANTLR3_LIST list, ANTLR3_INTKEY key); +static void * antlr3ListGet (pANTLR3_LIST list, ANTLR3_INTKEY key); +static ANTLR3_INT32 antlr3ListPut (pANTLR3_LIST list, ANTLR3_INTKEY key, void * element, void (ANTLR3_CDECL *freeptr)(void *)); +static ANTLR3_INT32 antlr3ListAdd (pANTLR3_LIST list, void * element, void (ANTLR3_CDECL *freeptr)(void *)); +static void * antlr3ListRemove(pANTLR3_LIST list, ANTLR3_INTKEY key); +static ANTLR3_UINT32 antlr3ListSize (pANTLR3_LIST list); + +// Interface functions for Stack +// +static void antlr3StackFree (pANTLR3_STACK stack); +static void * antlr3StackPop (pANTLR3_STACK stack); +static void * antlr3StackGet (pANTLR3_STACK stack, ANTLR3_INTKEY key); +static ANTLR3_BOOLEAN antlr3StackPush (pANTLR3_STACK stack, void * element, void (ANTLR3_CDECL *freeptr)(void *)); +static ANTLR3_UINT32 antlr3StackSize (pANTLR3_STACK stack); +static void * antlr3StackPeek (pANTLR3_STACK stack); + +// Interface functions for vectors +// +static void ANTLR3_CDECL antlr3VectorFree (pANTLR3_VECTOR vector); +static void antlr3VectorDel (pANTLR3_VECTOR vector, ANTLR3_UINT32 entry); +static void * antlr3VectorGet (pANTLR3_VECTOR vector, ANTLR3_UINT32 entry); +static void * antrl3VectorRemove (pANTLR3_VECTOR vector, ANTLR3_UINT32 entry); +static void antlr3VectorClear (pANTLR3_VECTOR vector); +static ANTLR3_UINT32 antlr3VectorAdd (pANTLR3_VECTOR vector, void * element, void (ANTLR3_CDECL *freeptr)(void *)); +static ANTLR3_UINT32 antlr3VectorSet (pANTLR3_VECTOR vector, ANTLR3_UINT32 entry, void * element, void (ANTLR3_CDECL *freeptr)(void *), ANTLR3_BOOLEAN freeExisting); +static ANTLR3_UINT32 antlr3VectorSize (pANTLR3_VECTOR vector); + +static void newPool (pANTLR3_VECTOR_FACTORY factory); +static void closeVectorFactory (pANTLR3_VECTOR_FACTORY factory); +static pANTLR3_VECTOR newVector (pANTLR3_VECTOR_FACTORY factory); + + +// Interface functions for int TRIE +// +static pANTLR3_TRIE_ENTRY intTrieGet (pANTLR3_INT_TRIE trie, ANTLR3_INTKEY key); +static ANTLR3_BOOLEAN intTrieDel (pANTLR3_INT_TRIE trie, ANTLR3_INTKEY key); +static ANTLR3_BOOLEAN intTrieAdd (pANTLR3_INT_TRIE trie, ANTLR3_INTKEY key, ANTLR3_UINT32 type, ANTLR3_INTKEY intType, void * data, void (ANTLR3_CDECL *freeptr)(void *)); +static void intTrieFree (pANTLR3_INT_TRIE trie); + +// Local function to advance enumeration structure pointers +// +static void antlr3EnumNextEntry(pANTLR3_HASH_ENUM en); + +pANTLR3_HASH_TABLE +antlr3HashTableNew(ANTLR3_UINT32 sizeHint) +{ + // All we have to do is create the hashtable tracking structure + // and allocate memory for the requested number of buckets. + // + pANTLR3_HASH_TABLE table; + + ANTLR3_UINT32 bucket; // Used to traverse the buckets + + table = ANTLR3_MALLOC(sizeof(ANTLR3_HASH_TABLE)); + + // Error out if no memory left + if (table == NULL) + { + return NULL; + } + + // Allocate memory for the buckets + // + table->buckets = (pANTLR3_HASH_BUCKET) ANTLR3_MALLOC((size_t) (sizeof(ANTLR3_HASH_BUCKET) * sizeHint)); + + if (table->buckets == NULL) + { + ANTLR3_FREE((void *)table); + return NULL; + } + + // Modulo of the table, (bucket count). + // + table->modulo = sizeHint; + + table->count = 0; /* Nothing in there yet ( I hope) */ + + /* Initialize the buckets to empty + */ + for (bucket = 0; bucket < sizeHint; bucket++) + { + table->buckets[bucket].entries = NULL; + } + + /* Exclude duplicate entries by default + */ + table->allowDups = ANTLR3_FALSE; + + /* Assume that keys should by strduped before they are + * entered in the table. + */ + table->doStrdup = ANTLR3_TRUE; + + /* Install the interface + */ + + table->get = antlr3HashGet; + table->put = antlr3HashPut; + table->del = antlr3HashDelete; + table->remove = antlr3HashRemove; + + table->getI = antlr3HashGetI; + table->putI = antlr3HashPutI; + table->delI = antlr3HashDeleteI; + table->removeI = antlr3HashRemoveI; + + table->size = antlr3HashSize; + table->free = antlr3HashFree; + + return table; +} + +static void +antlr3HashFree(pANTLR3_HASH_TABLE table) +{ + ANTLR3_UINT32 bucket; /* Used to traverse the buckets */ + + pANTLR3_HASH_BUCKET thisBucket; + pANTLR3_HASH_ENTRY entry; + pANTLR3_HASH_ENTRY nextEntry; + + /* Free the table, all buckets and all entries, and all the + * keys and data (if the table exists) + */ + if (table != NULL) + { + for (bucket = 0; bucket < table->modulo; bucket++) + { + thisBucket = &(table->buckets[bucket]); + + /* Allow sparse tables, though we don't create them as such at present + */ + if ( thisBucket != NULL) + { + entry = thisBucket->entries; + + /* Search all entries in the bucket and free them up + */ + while (entry != NULL) + { + /* Save next entry - we do not want to access memory in entry after we + * have freed it. + */ + nextEntry = entry->nextEntry; + + /* Free any data pointer, this only happens if the user supplied + * a pointer to a routine that knwos how to free the structure they + * added to the table. + */ + if (entry->free != NULL) + { + entry->free(entry->data); + } + + /* Free the key memory - we know that we allocated this + */ + if (entry->keybase.type == ANTLR3_HASH_TYPE_STR && entry->keybase.key.sKey != NULL) + { + ANTLR3_FREE(entry->keybase.key.sKey); + } + + /* Free this entry + */ + ANTLR3_FREE(entry); + entry = nextEntry; /* Load next pointer to see if we shoud free it */ + } + /* Invalidate the current pointer + */ + thisBucket->entries = NULL; + } + } + + /* Now we can free the bucket memory + */ + ANTLR3_FREE(table->buckets); + } + + /* Now we free teh memory for the table itself + */ + ANTLR3_FREE(table); +} + +/** return the current size of the hash table + */ +static ANTLR3_UINT32 antlr3HashSize (pANTLR3_HASH_TABLE table) +{ + return table->count; +} + +/** Remove a numeric keyed entry from a hash table if it exists, + * no error if it does not exist. + */ +static pANTLR3_HASH_ENTRY antlr3HashRemoveI (pANTLR3_HASH_TABLE table, ANTLR3_INTKEY key) +{ + ANTLR3_UINT32 hash; + pANTLR3_HASH_BUCKET bucket; + pANTLR3_HASH_ENTRY entry; + pANTLR3_HASH_ENTRY * nextPointer; + + /* First we need to know the hash of the provided key + */ + hash = (ANTLR3_UINT32)(key % (ANTLR3_INTKEY)(table->modulo)); + + /* Knowing the hash, we can find the bucket + */ + bucket = table->buckets + hash; + + /* Now, we traverse the entries in the bucket until + * we find the key or the end of the entries in the bucket. + * We track the element prior to the one we are examining + * as we need to set its next pointer to the next pointer + * of the entry we are deleting (if we find it). + */ + entry = bucket->entries; /* Entry to examine */ + nextPointer = & bucket->entries; /* Where to put the next pointer of the deleted entry */ + + while (entry != NULL) + { + /* See if this is the entry we wish to delete + */ + if (entry->keybase.key.iKey == key) + { + /* It was the correct entry, so we set the next pointer + * of the previous entry to the next pointer of this + * located one, which takes it out of the chain. + */ + (*nextPointer) = entry->nextEntry; + + table->count--; + + return entry; + } + else + { + /* We found an entry but it wasn't the one that was wanted, so + * move to the next one, if any. + */ + nextPointer = & (entry->nextEntry); /* Address of the next pointer in the current entry */ + entry = entry->nextEntry; /* Address of the next element in the bucket (if any) */ + } + } + + return NULL; /* Not found */ +} + +/** Remove the element in the hash table for a particular + * key value, if it exists - no error if it does not. + */ +static pANTLR3_HASH_ENTRY +antlr3HashRemove(pANTLR3_HASH_TABLE table, void * key) +{ + ANTLR3_UINT32 hash; + pANTLR3_HASH_BUCKET bucket; + pANTLR3_HASH_ENTRY entry; + pANTLR3_HASH_ENTRY * nextPointer; + + /* First we need to know the hash of the provided key + */ + hash = antlr3Hash(key, (ANTLR3_UINT32)strlen((const char *)key)); + + /* Knowing the hash, we can find the bucket + */ + bucket = table->buckets + (hash % table->modulo); + + /* Now, we traverse the entries in the bucket until + * we find the key or the end of the entires in the bucket. + * We track the element prior to the one we are exmaining + * as we need to set its next pointer to the next pointer + * of the entry we are deleting (if we find it). + */ + entry = bucket->entries; /* Entry to examine */ + nextPointer = & bucket->entries; /* Where to put the next pointer of the deleted entry */ + + while (entry != NULL) + { + /* See if this is the entry we wish to delete + */ + if (strcmp((const char *)key, (const char *)entry->keybase.key.sKey) == 0) + { + /* It was the correct entry, so we set the next pointer + * of the previous entry to the next pointer of this + * located one, which takes it out of the chain. + */ + (*nextPointer) = entry->nextEntry; + + /* Release the key - if we allocated that + */ + if (table->doStrdup == ANTLR3_TRUE) + { + ANTLR3_FREE(entry->keybase.key.sKey); + } + entry->keybase.key.sKey = NULL; + + table->count--; + + return entry; + } + else + { + /* We found an entry but it wasn't the one that was wanted, so + * move to the next one, if any. + */ + nextPointer = & (entry->nextEntry); /* Address of the next pointer in the current entry */ + entry = entry->nextEntry; /* Address of the next element in the bucket (if any) */ + } + } + + return NULL; /* Not found */ +} + +/** Takes the element with the supplied key out of the list, and deletes the data + * calling the supplied free() routine if any. + */ +static void +antlr3HashDeleteI (pANTLR3_HASH_TABLE table, ANTLR3_INTKEY key) +{ + pANTLR3_HASH_ENTRY entry; + + entry = antlr3HashRemoveI(table, key); + + /* Now we can free the elements and the entry in order + */ + if (entry != NULL && entry->free != NULL) + { + /* Call programmer supplied function to release this entry data + */ + entry->free(entry->data); + entry->data = NULL; + } + /* Finally release the space for this entry block. + */ + ANTLR3_FREE(entry); +} + +/** Takes the element with the supplied key out of the list, and deletes the data + * calling the supplied free() routine if any. + */ +static void +antlr3HashDelete (pANTLR3_HASH_TABLE table, void * key) +{ + pANTLR3_HASH_ENTRY entry; + + entry = antlr3HashRemove(table, key); + + /* Now we can free the elements and the entry in order + */ + if (entry != NULL && entry->free != NULL) + { + /* Call programmer supplied function to release this entry data + */ + entry->free(entry->data); + entry->data = NULL; + } + /* Finally release the space for this entry block. + */ + ANTLR3_FREE(entry); +} + +/** Return the element pointer in the hash table for a particular + * key value, or NULL if it don't exist (or was itself NULL). + */ +static void * +antlr3HashGetI(pANTLR3_HASH_TABLE table, ANTLR3_INTKEY key) +{ + ANTLR3_UINT32 hash; + pANTLR3_HASH_BUCKET bucket; + pANTLR3_HASH_ENTRY entry; + + /* First we need to know the hash of the provided key + */ + hash = (ANTLR3_UINT32)(key % (ANTLR3_INTKEY)(table->modulo)); + + /* Knowing the hash, we can find the bucket + */ + bucket = table->buckets + hash; + + /* Now we can inspect the key at each entry in the bucket + * and see if we have a match. + */ + entry = bucket->entries; + + while (entry != NULL) + { + if (entry->keybase.key.iKey == key) + { + /* Match was found, return the data pointer for this entry + */ + return entry->data; + } + entry = entry->nextEntry; + } + + /* If we got here, then we did not find the key + */ + return NULL; +} + +/** Return the element pointer in the hash table for a particular + * key value, or NULL if it don't exist (or was itself NULL). + */ +static void * +antlr3HashGet(pANTLR3_HASH_TABLE table, void * key) +{ + ANTLR3_UINT32 hash; + pANTLR3_HASH_BUCKET bucket; + pANTLR3_HASH_ENTRY entry; + + + /* First we need to know the hash of the provided key + */ + hash = antlr3Hash(key, (ANTLR3_UINT32)strlen((const char *)key)); + + /* Knowing the hash, we can find the bucket + */ + bucket = table->buckets + (hash % table->modulo); + + /* Now we can inspect the key at each entry in the bucket + * and see if we have a match. + */ + entry = bucket->entries; + + while (entry != NULL) + { + if (strcmp((const char *)key, (const char *)entry->keybase.key.sKey) == 0) + { + /* Match was found, return the data pointer for this entry + */ + return entry->data; + } + entry = entry->nextEntry; + } + + /* If we got here, then we did not find the key + */ + return NULL; +} + +/** Add the element pointer in to the table, based upon the + * hash of the provided key. + */ +static ANTLR3_INT32 +antlr3HashPutI(pANTLR3_HASH_TABLE table, ANTLR3_INTKEY key, void * element, void (ANTLR3_CDECL *freeptr)(void *)) +{ + ANTLR3_UINT32 hash; + pANTLR3_HASH_BUCKET bucket; + pANTLR3_HASH_ENTRY entry; + pANTLR3_HASH_ENTRY * newPointer; + + /* First we need to know the hash of the provided key + */ + hash = (ANTLR3_UINT32)(key % (ANTLR3_INTKEY)(table->modulo)); + + /* Knowing the hash, we can find the bucket + */ + bucket = table->buckets + hash; + + /* Knowing the bucket, we can traverse the entries until we + * we find a NULL pointer or we find that this is already + * in the table and duplicates were not allowed. + */ + newPointer = &bucket->entries; + + while (*newPointer != NULL) + { + /* The value at new pointer is pointing to an existing entry. + * If duplicates are allowed then we don't care what it is, but + * must reject this add if the key is the same as the one we are + * supplied with. + */ + if (table->allowDups == ANTLR3_FALSE) + { + if ((*newPointer)->keybase.key.iKey == key) + { + return ANTLR3_ERR_HASHDUP; + } + } + + /* Point to the next entry pointer of the current entry we + * are traversing, if it is NULL we will create our new + * structure and point this to it. + */ + newPointer = &((*newPointer)->nextEntry); + } + + /* newPointer is now pointing at the pointer where we need to + * add our new entry, so let's crate the entry and add it in. + */ + entry = (pANTLR3_HASH_ENTRY)ANTLR3_MALLOC((size_t)sizeof(ANTLR3_HASH_ENTRY)); + + if (entry == NULL) + { + return ANTLR3_ERR_NOMEM; + } + + entry->data = element; /* Install the data element supplied */ + entry->free = freeptr; /* Function that knows how to release the entry */ + entry->keybase.type = ANTLR3_HASH_TYPE_INT; /* Indicate the key type stored here for when we free */ + entry->keybase.key.iKey = key; /* Record the key value */ + entry->nextEntry = NULL; /* Ensure that the forward pointer ends the chain */ + + *newPointer = entry; /* Install the next entry in this bucket */ + + table->count++; + + return ANTLR3_SUCCESS; +} + + +/** Add the element pointer in to the table, based upon the + * hash of the provided key. + */ +static ANTLR3_INT32 +antlr3HashPut(pANTLR3_HASH_TABLE table, void * key, void * element, void (ANTLR3_CDECL *freeptr)(void *)) +{ + ANTLR3_UINT32 hash; + pANTLR3_HASH_BUCKET bucket; + pANTLR3_HASH_ENTRY entry; + pANTLR3_HASH_ENTRY * newPointer; + + /* First we need to know the hash of the provided key + */ + hash = antlr3Hash(key, (ANTLR3_UINT32)strlen((const char *)key)); + + /* Knowing the hash, we can find the bucket + */ + bucket = table->buckets + (hash % table->modulo); + + /* Knowign the bucket, we can traverse the entries until we + * we find a NULL pointer ofr we find that this is already + * in the table and duplicates were not allowed. + */ + newPointer = &bucket->entries; + + while (*newPointer != NULL) + { + /* The value at new pointer is pointing to an existing entry. + * If duplicates are allowed then we don't care what it is, but + * must reject this add if the key is the same as the one we are + * supplied with. + */ + if (table->allowDups == ANTLR3_FALSE) + { + if (strcmp((const char*) key, (const char *)(*newPointer)->keybase.key.sKey) == 0) + { + return ANTLR3_ERR_HASHDUP; + } + } + + /* Point to the next entry pointer of the current entry we + * are traversing, if it is NULL we will create our new + * structure and point this to it. + */ + newPointer = &((*newPointer)->nextEntry); + } + + /* newPointer is now poiting at the pointer where we need to + * add our new entry, so let's crate the entry and add it in. + */ + entry = (pANTLR3_HASH_ENTRY)ANTLR3_MALLOC((size_t)sizeof(ANTLR3_HASH_ENTRY)); + + if (entry == NULL) + { + return ANTLR3_ERR_NOMEM; + } + + entry->data = element; /* Install the data element supplied */ + entry->free = freeptr; /* Function that knows how to release the entry */ + entry->keybase.type = ANTLR3_HASH_TYPE_STR; /* Indicate the key type stored here for free() */ + if (table->doStrdup == ANTLR3_TRUE) + { + entry->keybase.key.sKey = ANTLR3_STRDUP(key); /* Record the key value */ + } + else + { + entry->keybase.key.sKey = key; /* Record the key value */ + } + entry->nextEntry = NULL; /* Ensure that the forward pointer ends the chain */ + + *newPointer = entry; /* Install the next entry in this bucket */ + + table->count++; + + return ANTLR3_SUCCESS; +} + +/** \brief Creates an enumeration structure to traverse the hash table. + * + * \param table Table to enumerate + * \return Pointer to enumeration structure. + */ +pANTLR3_HASH_ENUM +antlr3EnumNew (pANTLR3_HASH_TABLE table) +{ + pANTLR3_HASH_ENUM en; + + /* Allocate structure memory + */ + en = (pANTLR3_HASH_ENUM) ANTLR3_MALLOC((size_t)sizeof(ANTLR3_HASH_ENUM)); + + /* Check that the allocation was good + */ + if (en == NULL) + { + return (pANTLR3_HASH_ENUM) ANTLR3_FUNC_PTR(ANTLR3_ERR_NOMEM); + } + + /* Initialize the start pointers + */ + en->table = table; + en->bucket = 0; /* First bucket */ + en->entry = en->table->buckets->entries; /* First entry to return */ + + /* Special case in that the first bucket may not have anything in it + * but the antlr3EnumNext() function expects that the en->entry is + * set to the next valid pointer. Hence if it is not a valid element + * pointer, attempt to find the next one that is, (table may be empty + * of course. + */ + if (en->entry == NULL) + { + antlr3EnumNextEntry(en); + } + + /* Install the interface + */ + en->free = antlr3EnumFree; + en->next = antlr3EnumNext; + + /* All is good + */ + return en; +} + +/** \brief Return the next entry in the hashtable being traversed by the supplied + * enumeration. + * + * \param[in] en Pointer to the enumeration tracking structure + * \param key Pointer to void pointer, where the key pointer is returned. + * \param data Pointer to void pointer where the data pointer is returned. + * \return + * - ANTLR3_SUCCESS if there was a next key + * - ANTLR3_FAIL if there were no more keys + * + * \remark + * No checking of input structure is performed! + */ +static int +antlr3EnumNext (pANTLR3_HASH_ENUM en, pANTLR3_HASH_KEY * key, void ** data) +{ + /* If the current entry is valid, then use it + */ + if (en->bucket >= en->table->modulo) + { + /* Already exhausted the table + */ + return ANTLR3_FAIL; + } + + /* Pointers are already set to the current entry to return, or + * we would not be at this point in the logic flow. + */ + *key = &(en->entry->keybase); + *data = en->entry->data; + + /* Return pointers are set up, so now we move the element + * pointer to the next in the table (if any). + */ + antlr3EnumNextEntry(en); + + return ANTLR3_SUCCESS; +} + +/** \brief Local function to advance the entry pointer of an enumeration + * structure to the next valid entry (if there is one). + * + * \param[in] enum Pointer to ANTLR3 enumeration structure returned by antlr3EnumNew() + * + * \remark + * - The function always leaves the pointers pointing at a valid entry if there + * is one, so if the entry pointer is NULL when this function exits, there were + * no more entries in the table. + */ +static void +antlr3EnumNextEntry(pANTLR3_HASH_ENUM en) +{ + pANTLR3_HASH_BUCKET bucket; + + /* See if the current entry pointer is valid first of all + */ + if (en->entry != NULL) + { + /* Current entry was a valid point, see if there is another + * one in the chain. + */ + if (en->entry->nextEntry != NULL) + { + /* Next entry in the enumeration is just the next entry + * in the chain. + */ + en->entry = en->entry->nextEntry; + return; + } + } + + /* There were no more entries in the current bucket, if there are + * more buckets then chase them until we find an entry. + */ + en->bucket++; + + while (en->bucket < en->table->modulo) + { + /* There was one more bucket, see if it has any elements in it + */ + bucket = en->table->buckets + en->bucket; + + if (bucket->entries != NULL) + { + /* There was an entry in this bucket, so we can use it + * for the next entry in the enumeration. + */ + en->entry = bucket->entries; + return; + } + + /* There was nothing in the bucket we just examined, move to the + * next one. + */ + en->bucket++; + } + + /* Here we have exhausted all buckets and the enumeration pointer will + * have its bucket count = table->modulo which signifies that we are done. + */ +} + +/** \brief Frees up the memory structures that represent a hash table + * enumeration. + * \param[in] enum Pointer to ANTLR3 enumeration structure returned by antlr3EnumNew() + */ +static void +antlr3EnumFree (pANTLR3_HASH_ENUM en) +{ + /* Nothing to check, we just free it. + */ + ANTLR3_FREE(en); +} + +/** Given an input key of arbitrary length, return a hash value of + * it. This can then be used (with suitable modulo) to index other + * structures. + */ +ANTLR3_API ANTLR3_UINT32 +antlr3Hash(void * key, ANTLR3_UINT32 keylen) +{ + /* Accumulate the hash value of the key + */ + ANTLR3_UINT32 hash; + pANTLR3_UINT8 keyPtr; + ANTLR3_UINT32 i1; + + hash = 0; + keyPtr = (pANTLR3_UINT8) key; + + /* Iterate the key and accumulate the hash + */ + while(keylen > 0) + { + hash = (hash << 4) + (*(keyPtr++)); + + if ((i1=hash&0xf0000000) != 0) + { + hash = hash ^ (i1 >> 24); + hash = hash ^ i1; + } + keylen--; + } + + return hash; +} + +ANTLR3_API pANTLR3_LIST +antlr3ListNew (ANTLR3_UINT32 sizeHint) +{ + pANTLR3_LIST list; + + /* Allocate memory + */ + list = (pANTLR3_LIST)ANTLR3_MALLOC((size_t)sizeof(ANTLR3_LIST)); + + if (list == NULL) + { + return (pANTLR3_LIST)ANTLR3_FUNC_PTR(ANTLR3_ERR_NOMEM); + } + + /* Now we need to add a new table + */ + list->table = antlr3HashTableNew(sizeHint); + + if (list->table == (pANTLR3_HASH_TABLE)ANTLR3_FUNC_PTR(ANTLR3_ERR_NOMEM)) + { + return (pANTLR3_LIST)ANTLR3_FUNC_PTR(ANTLR3_ERR_NOMEM); + } + + /* Allocation was good, install interface + */ + list->free = antlr3ListFree; + list->del = antlr3ListDelete; + list->get = antlr3ListGet; + list->add = antlr3ListAdd; + list->remove = antlr3ListRemove; + list->put = antlr3ListPut; + list->size = antlr3ListSize; + + return list; +} + +static ANTLR3_UINT32 antlr3ListSize (pANTLR3_LIST list) +{ + return list->table->size(list->table); +} + +static void +antlr3ListFree (pANTLR3_LIST list) +{ + /* Free the hashtable that stores the list + */ + list->table->free(list->table); + + /* Free the allocation for the list itself + */ + ANTLR3_FREE(list); +} + +static void +antlr3ListDelete (pANTLR3_LIST list, ANTLR3_INTKEY key) +{ + list->table->delI(list->table, key); +} + +static void * +antlr3ListGet (pANTLR3_LIST list, ANTLR3_INTKEY key) +{ + return list->table->getI(list->table, key); +} + +/** Add the supplied element to the list, at the next available key + */ +static ANTLR3_INT32 antlr3ListAdd (pANTLR3_LIST list, void * element, void (ANTLR3_CDECL *freeptr)(void *)) +{ + ANTLR3_INTKEY key; + + key = list->table->size(list->table) + 1; + return list->put(list, key, element, freeptr); +} + +/** Remove from the list, but don't free the element, just send it back to the + * caller. + */ +static void * +antlr3ListRemove (pANTLR3_LIST list, ANTLR3_INTKEY key) +{ + pANTLR3_HASH_ENTRY entry; + + entry = list->table->removeI(list->table, key); + + if (entry != NULL) + { + return entry->data; + } + else + { + return NULL; + } +} + +static ANTLR3_INT32 +antlr3ListPut (pANTLR3_LIST list, ANTLR3_INTKEY key, void * element, void (ANTLR3_CDECL *freeptr)(void *)) +{ + return list->table->putI(list->table, key, element, freeptr); +} + +ANTLR3_API pANTLR3_STACK +antlr3StackNew (ANTLR3_UINT32 sizeHint) +{ + pANTLR3_STACK stack; + + /* Allocate memory + */ + stack = (pANTLR3_STACK)ANTLR3_MALLOC((size_t)sizeof(ANTLR3_STACK)); + + if (stack == NULL) + { + return (pANTLR3_STACK)ANTLR3_FUNC_PTR(ANTLR3_ERR_NOMEM); + } + + /* Now we need to add a new table + */ + stack->vector = antlr3VectorNew(sizeHint); + stack->top = NULL; + + if (stack->vector == (pANTLR3_VECTOR)ANTLR3_FUNC_PTR(ANTLR3_ERR_NOMEM)) + { + return (pANTLR3_STACK)ANTLR3_FUNC_PTR(ANTLR3_ERR_NOMEM); + } + + /* Looks good, now add the interface + */ + stack->get = antlr3StackGet; + stack->free = antlr3StackFree; + stack->pop = antlr3StackPop; + stack->push = antlr3StackPush; + stack->size = antlr3StackSize; + stack->peek = antlr3StackPeek; + + return stack; +} + +static ANTLR3_UINT32 antlr3StackSize (pANTLR3_STACK stack) +{ + return stack->vector->count; +} + + +static void +antlr3StackFree (pANTLR3_STACK stack) +{ + /* Free the list that supports the stack + */ + stack->vector->free(stack->vector); + stack->vector = NULL; + stack->top = NULL; + + ANTLR3_FREE(stack); +} + +static void * +antlr3StackPop (pANTLR3_STACK stack) +{ + // Delete the element that is currently at the top of the stack + // + stack->vector->del(stack->vector, stack->vector->count - 1); + + // And get the element that is the now the top of the stack (if anything) + // NOTE! This is not quite like a 'real' stack, which would normally return you + // the current top of the stack, then remove it from the stack. + // TODO: Review this, it is correct for follow sets which is what this was done for + // but is not as obvious when using it as a 'real'stack. + // + stack->top = stack->vector->get(stack->vector, stack->vector->count - 1); + return stack->top; +} + +static void * +antlr3StackGet (pANTLR3_STACK stack, ANTLR3_INTKEY key) +{ + return stack->vector->get(stack->vector, (ANTLR3_UINT32)key); +} + +static void * +antlr3StackPeek (pANTLR3_STACK stack) +{ + return stack->top; +} + +static ANTLR3_BOOLEAN +antlr3StackPush (pANTLR3_STACK stack, void * element, void (ANTLR3_CDECL *freeptr)(void *)) +{ + stack->top = element; + return (ANTLR3_BOOLEAN)(stack->vector->add(stack->vector, element, freeptr)); +} + +ANTLR3_API pANTLR3_VECTOR +antlr3VectorNew (ANTLR3_UINT32 sizeHint) +{ + pANTLR3_VECTOR vector; + + + // Allocate memory for the vector structure itself + // + vector = (pANTLR3_VECTOR) ANTLR3_MALLOC((size_t)(sizeof(ANTLR3_VECTOR))); + + if (vector == NULL) + { + return (pANTLR3_VECTOR)ANTLR3_FUNC_PTR(ANTLR3_ERR_NOMEM); + } + + // Now fill in the defaults + // + antlr3SetVectorApi(vector, sizeHint); + + // And everything is hunky dory + // + return vector; +} + +ANTLR3_API void +antlr3SetVectorApi (pANTLR3_VECTOR vector, ANTLR3_UINT32 sizeHint) +{ + ANTLR3_UINT32 initialSize; + + // Allow vectors to be guessed by ourselves, so input size can be zero + // + if (sizeHint > ANTLR3_VECTOR_INTERNAL_SIZE) + { + initialSize = sizeHint; + } + else + { + initialSize = ANTLR3_VECTOR_INTERNAL_SIZE; + } + + if (sizeHint > ANTLR3_VECTOR_INTERNAL_SIZE) + { + vector->elements = (pANTLR3_VECTOR_ELEMENT)ANTLR3_MALLOC((size_t)(sizeof(ANTLR3_VECTOR_ELEMENT) * initialSize)); + } + else + { + vector->elements = vector->internal; + } + + if (vector->elements == NULL) + { + ANTLR3_FREE(vector); + return; + } + + // Memory allocated successfully + // + vector->count = 0; // No entries yet of course + vector->elementsSize = initialSize; // Available entries + + // Now we can install the API + // + vector->add = antlr3VectorAdd; + vector->del = antlr3VectorDel; + vector->get = antlr3VectorGet; + vector->free = antlr3VectorFree; + vector->set = antlr3VectorSet; + vector->remove = antrl3VectorRemove; + vector->clear = antlr3VectorClear; + vector->size = antlr3VectorSize; + + // Assume that this is not a factory made vector + // + vector->factoryMade = ANTLR3_FALSE; +} +// Clear the entries in a vector. +// Clearing the vector leaves its capacity the same but +// it walks the entries first to see if any of them +// have a free routine that must be called. +// +static void +antlr3VectorClear (pANTLR3_VECTOR vector) +{ + ANTLR3_UINT32 entry; + + // We must traverse every entry in the vector and if it has + // a pointer to a free function then we call it with the + // the entry pointer + // + for (entry = 0; entry < vector->count; entry++) + { + if (vector->elements[entry].freeptr != NULL) + { + vector->elements[entry].freeptr(vector->elements[entry].element); + } + vector->elements[entry].freeptr = NULL; + vector->elements[entry].element = NULL; + } + + // Having called any free pointers, we just reset the entry count + // back to zero. + // + vector->count = 0; +} + +static +void ANTLR3_CDECL antlr3VectorFree (pANTLR3_VECTOR vector) +{ + ANTLR3_UINT32 entry; + + // We must traverse every entry in the vector and if it has + // a pointer to a free function then we call it with the + // the entry pointer + // + for (entry = 0; entry < vector->count; entry++) + { + if (vector->elements[entry].freeptr != NULL) + { + vector->elements[entry].freeptr(vector->elements[entry].element); + } + vector->elements[entry].freeptr = NULL; + vector->elements[entry].element = NULL; + } + + if (vector->factoryMade == ANTLR3_FALSE) + { + // The entries are freed, so free the element allocation + // + if (vector->elementsSize > ANTLR3_VECTOR_INTERNAL_SIZE) + { + ANTLR3_FREE(vector->elements); + } + vector->elements = NULL; + + // Finally, free the allocation for the vector itself + // + ANTLR3_FREE(vector); + } +} + +static void antlr3VectorDel (pANTLR3_VECTOR vector, ANTLR3_UINT32 entry) +{ + // Check this is a valid request first + // + if (entry >= vector->count) + { + return; + } + + // Valid request, check for free pointer and call it if present + // + if (vector->elements[entry].freeptr != NULL) + { + vector->elements[entry].freeptr(vector->elements[entry].element); + vector->elements[entry].freeptr = NULL; + } + + if (entry == vector->count - 1) + { + // Ensure the pointer is never reused by accident, but otherwise just + // decrement the pointer. + // + vector->elements[entry].element = NULL; + } + else + { + // Need to shuffle trailing pointers back over the deleted entry + // + ANTLR3_MEMMOVE(vector->elements + entry, vector->elements + entry + 1, sizeof(ANTLR3_VECTOR_ELEMENT) * (vector->count - entry - 1)); + } + + // One less entry in the vector now + // + vector->count--; +} + +static void * antlr3VectorGet (pANTLR3_VECTOR vector, ANTLR3_UINT32 entry) +{ + // Ensure this is a valid request + // + if (entry < vector->count) + { + return vector->elements[entry].element; + } + else + { + // I know nothing, Mr. Fawlty! + // + return NULL; + } +} + +/// Remove the entry from the vector, but do not free any entry, even if it has +/// a free pointer. +/// +static void * antrl3VectorRemove (pANTLR3_VECTOR vector, ANTLR3_UINT32 entry) +{ + void * element; + + // Check this is a valid request first + // + if (entry >= vector->count) + { + return NULL; + } + + // Valid request, return the sorted pointer + // + + element = vector->elements[entry].element; + + if (entry == vector->count - 1) + { + // Ensure the pointer is never reused by accident, but otherwise just + // decrement the pointer. + /// + vector->elements[entry].element = NULL; + vector->elements[entry].freeptr = NULL; + } + else + { + // Need to shuffle trailing pointers back over the deleted entry + // + ANTLR3_MEMMOVE(vector->elements + entry, vector->elements + entry + 1, sizeof(ANTLR3_VECTOR_ELEMENT) * (vector->count - entry - 1)); + } + + // One less entry in the vector now + // + vector->count--; + + return element; +} + +static void +antlr3VectorResize (pANTLR3_VECTOR vector, ANTLR3_UINT32 hint) +{ + ANTLR3_UINT32 newSize; + + // Need to resize the element pointers. We double the allocation + // we already have unless asked for a specific increase. + // + if (hint == 0 || hint < vector->elementsSize) + { + newSize = vector->elementsSize * 2; + } + else + { + newSize = hint * 2; + } + + // Now we know how many we need, so we see if we have just expanded + // past the built in vector elements or were already past that + // + if (vector->elementsSize > ANTLR3_VECTOR_INTERNAL_SIZE) + { + // We were already larger than the internal size, so we just + // use realloc so that the pointers are copied for us + // + vector->elements = (pANTLR3_VECTOR_ELEMENT)ANTLR3_REALLOC(vector->elements, (sizeof(ANTLR3_VECTOR_ELEMENT)* newSize)); + } + else + { + // The current size was less than or equal to the internal array size and as we always start + // with a size that is at least the maximum internal size, then we must need to allocate new memory + // for external pointers. We don't want to take the time to calculate if a requested element + // is part of the internal or external entries, so we copy the internal ones to the new space + // + vector->elements = (pANTLR3_VECTOR_ELEMENT)ANTLR3_MALLOC((sizeof(ANTLR3_VECTOR_ELEMENT)* newSize)); + ANTLR3_MEMCPY(vector->elements, vector->internal, ANTLR3_VECTOR_INTERNAL_SIZE * sizeof(ANTLR3_VECTOR_ELEMENT)); + } + + vector->elementsSize = newSize; +} + +/// Add the supplied pointer and freeing function pointer to the list, +/// expanding the vector if needed. +/// +static ANTLR3_UINT32 antlr3VectorAdd (pANTLR3_VECTOR vector, void * element, void (ANTLR3_CDECL *freeptr)(void *)) +{ + // Do we need to resize the vector table? + // + if (vector->count == vector->elementsSize) + { + antlr3VectorResize(vector, 0); // Give no hint, we let it add 1024 or double it + } + + // Insert the new entry + // + vector->elements[vector->count].element = element; + vector->elements[vector->count].freeptr = freeptr; + + vector->count++; // One more element counted + + return (ANTLR3_UINT32)(vector->count); + +} + +/// Replace the element at the specified entry point with the supplied +/// entry. +/// +static ANTLR3_UINT32 +antlr3VectorSet (pANTLR3_VECTOR vector, ANTLR3_UINT32 entry, void * element, void (ANTLR3_CDECL *freeptr)(void *), ANTLR3_BOOLEAN freeExisting) +{ + + // If the vector is currently not big enough, then we expand it + // + if (entry >= vector->elementsSize) + { + antlr3VectorResize(vector, entry); // We will get at least this many + } + + // Valid request, replace the current one, freeing any prior entry if told to + // + if ( entry < vector->count // If actually replacing an element + && freeExisting // And told to free any existing element + && vector->elements[entry].freeptr != NULL // And the existing element has a free pointer + ) + { + vector->elements[entry].freeptr(vector->elements[entry].element); + } + + // Install the new pointers + // + vector->elements[entry].freeptr = freeptr; + vector->elements[entry].element = element; + + if (entry >= vector->count) + { + vector->count = entry + 1; + } + return (ANTLR3_UINT32)(entry); // Indicates the replacement was successful + +} + +static ANTLR3_UINT32 antlr3VectorSize (pANTLR3_VECTOR vector) +{ + return vector->count; +} + +/// Vector factory creation +/// +ANTLR3_API pANTLR3_VECTOR_FACTORY +antlr3VectorFactoryNew (ANTLR3_UINT32 sizeHint) +{ + pANTLR3_VECTOR_FACTORY factory; + + // Allocate memory for the factory + // + factory = (pANTLR3_VECTOR_FACTORY)ANTLR3_MALLOC((size_t)(sizeof(ANTLR3_VECTOR_FACTORY))); + + if (factory == NULL) + { + return NULL; + } + + // Factory memory is good, so create a new vector pool + // + factory->pools = NULL; + factory->thisPool = -1; + + newPool(factory); + + // Initialize the API, ignore the hint as this algorithm does + // a better job really. + // + antlr3SetVectorApi(&(factory->unTruc), ANTLR3_VECTOR_INTERNAL_SIZE); + + factory->unTruc.factoryMade = ANTLR3_TRUE; + + // Install the factory API + // + factory->close = closeVectorFactory; + factory->newVector = newVector; + + return factory; +} + +static void +newPool(pANTLR3_VECTOR_FACTORY factory) +{ + /* Increment factory count + */ + factory->thisPool++; + + /* Ensure we have enough pointers allocated + */ + factory->pools = (pANTLR3_VECTOR *) + ANTLR3_REALLOC( (void *)factory->pools, /* Current pools pointer (starts at NULL) */ + (ANTLR3_UINT32)((factory->thisPool + 1) * sizeof(pANTLR3_VECTOR *)) /* Memory for new pool pointers */ + ); + + /* Allocate a new pool for the factory + */ + factory->pools[factory->thisPool] = + (pANTLR3_VECTOR) + ANTLR3_MALLOC((size_t)(sizeof(ANTLR3_VECTOR) * ANTLR3_FACTORY_VPOOL_SIZE)); + + + /* Reset the counters + */ + factory->nextVector = 0; + + /* Done + */ + return; +} + +static void +closeVectorFactory (pANTLR3_VECTOR_FACTORY factory) +{ + pANTLR3_VECTOR pool; + ANTLR3_INT32 poolCount; + ANTLR3_UINT32 limit; + ANTLR3_UINT32 vector; + pANTLR3_VECTOR check; + + /* We iterate the vector pools one at a time + */ + for (poolCount = 0; poolCount <= factory->thisPool; poolCount++) + { + /* Pointer to current pool + */ + pool = factory->pools[poolCount]; + + /* Work out how many tokens we need to check in this pool. + */ + limit = (poolCount == factory->thisPool ? factory->nextVector : ANTLR3_FACTORY_VPOOL_SIZE); + + /* Marginal condition, we might be at the start of a brand new pool + * where the nextToken is 0 and nothing has been allocated. + */ + if (limit > 0) + { + /* We have some vectors allocated from this pool + */ + for (vector = 0; vector < limit; vector++) + { + /* Next one in the chain + */ + check = pool + vector; + + // Call the free function on each of the vectors in the pool, + // which in turn will cause any elements it holds that also have a free + // pointer to be freed. However, because any vector may be in any other + // vector, we don't free the element allocations yet. We do that in a + // a specific pass, coming up next. The vector free function knows that + // this is a factory allocated pool vector and so it won't free things it + // should not. + // + check->free(check); + } + } + } + + /* We iterate the vector pools one at a time once again, but this time + * we are going to free up any allocated element pointers. Note that we are doing this + * so that we do not try to release vectors twice. When building ASTs we just copy + * the vectors all over the place and they may be embedded in this vector pool + * numerous times. + */ + for (poolCount = 0; poolCount <= factory->thisPool; poolCount++) + { + /* Pointer to current pool + */ + pool = factory->pools[poolCount]; + + /* Work out how many tokens we need to check in this pool. + */ + limit = (poolCount == factory->thisPool ? factory->nextVector : ANTLR3_FACTORY_VPOOL_SIZE); + + /* Marginal condition, we might be at the start of a brand new pool + * where the nextToken is 0 and nothing has been allocated. + */ + if (limit > 0) + { + /* We have some vectors allocated from this pool + */ + for (vector = 0; vector < limit; vector++) + { + /* Next one in the chain + */ + check = pool + vector; + + // Anything in here should be factory made, but we do this just + // to triple check. We just free up the elements if they were + // allocated beyond the internal size. + // + if (check->factoryMade == ANTLR3_TRUE && check->elementsSize > ANTLR3_VECTOR_INTERNAL_SIZE) + { + ANTLR3_FREE(check->elements); + check->elements = NULL; + } + } + } + + // We can now free this pool allocation as we have called free on every element in every vector + // and freed any memory for pointers the grew beyond the internal size limit. + // + ANTLR3_FREE(factory->pools[poolCount]); + factory->pools[poolCount] = NULL; + } + + /* All the pools are deallocated we can free the pointers to the pools + * now. + */ + ANTLR3_FREE(factory->pools); + + /* Finally, we can free the space for the factory itself + */ + ANTLR3_FREE(factory); + +} + +static pANTLR3_VECTOR +newVector(pANTLR3_VECTOR_FACTORY factory) +{ + pANTLR3_VECTOR vector; + + // See if we need a new vector pool before allocating a new + // one + // + if (factory->nextVector >= ANTLR3_FACTORY_VPOOL_SIZE) + { + // We ran out of vectors in the current pool, so we need a new pool + // + newPool(factory); + } + + // Assuming everything went well (we are trying for performance here so doing minimal + // error checking. Then we can work out what the pointer is to the next vector. + // + vector = factory->pools[factory->thisPool] + factory->nextVector; + factory->nextVector++; + + // We have our token pointer now, so we can initialize it to the predefined model. + // + antlr3SetVectorApi(vector, ANTLR3_VECTOR_INTERNAL_SIZE); + vector->factoryMade = ANTLR3_TRUE; + + // We know that the pool vectors are created at the default size, which means they + // will start off using their internal entry pointers. We must intialize our pool vector + // to point to its own internal entry table and not the pre-made one. + // + vector->elements = vector->internal; + + // And we are done + // + return vector; +} + +/** Array of left most significant bit positions for an 8 bit + * element provides an efficient way to find the highest bit + * that is set in an n byte value (n>0). Assuming the values will all hit the data cache, + * coding without conditional elements should allow branch + * prediction to work well and of course a parallel instruction cache + * will whip through this. Otherwise we must loop shifting a one + * bit and masking. The values we tend to be placing in out integer + * patricia trie are usually a lot lower than the 64 bits we + * allow for the key allows. Hence there is a lot of redundant looping and + * shifting in a while loop. Whereas, the lookup table is just + * a few ands and indirect lookups, while testing for 0. This + * is likely to be done in parallel on many processors available + * when I wrote this. If this code survives as long as yacc, then + * I may already be dead by the time you read this and maybe there is + * a single machine instruction to perform the operation. What + * else are you going to do with all those transistors? Jim 2007 + * + * The table is probably obvious but it is just the number 0..7 + * of the MSB in each integer value 0..256 + */ +static ANTLR3_UINT8 bitIndex[256] = +{ + 0, // 0 - Just for padding + 0, // 1 + 1, 1, // 2..3 + 2, 2, 2, 2, // 4..7 + 3, 3, 3, 3, 3, 3, 3, 3, // 8+ + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, // 16+ + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, // 32+ + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, // 64+ + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // 128+ + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 +}; + +/** Rather than use the bit index of a trie node to shift + * 0x01 left that many times, then & with the result, it is + * faster to use the bit index as an index into this table + * which holds precomputed masks for any of the 64 bits + * we need to mask off singly. The data values will stay in + * cache while ever a trie is in heavy use, such as in + * memoization. It is also pretty enough to be ASCII art. + */ +static ANTLR3_UINT64 bitMask[64] = +{ + 0x0000000000000001ULL, 0x0000000000000002ULL, 0x0000000000000004ULL, 0x0000000000000008ULL, + 0x0000000000000010ULL, 0x0000000000000020ULL, 0x0000000000000040ULL, 0x0000000000000080ULL, + 0x0000000000000100ULL, 0x0000000000000200ULL, 0x0000000000000400ULL, 0x0000000000000800ULL, + 0x0000000000001000ULL, 0x0000000000002000ULL, 0x0000000000004000ULL, 0x0000000000008000ULL, + 0x0000000000010000ULL, 0x0000000000020000ULL, 0x0000000000040000ULL, 0x0000000000080000ULL, + 0x0000000000100000ULL, 0x0000000000200000ULL, 0x0000000000400000ULL, 0x0000000000800000ULL, + 0x0000000001000000ULL, 0x0000000002000000ULL, 0x0000000004000000ULL, 0x0000000008000000ULL, + 0x0000000010000000ULL, 0x0000000020000000ULL, 0x0000000040000000ULL, 0x0000000080000000ULL, + 0x0000000100000000ULL, 0x0000000200000000ULL, 0x0000000400000000ULL, 0x0000000800000000ULL, + 0x0000001000000000ULL, 0x0000002000000000ULL, 0x0000004000000000ULL, 0x0000008000000000ULL, + 0x0000010000000000ULL, 0x0000020000000000ULL, 0x0000040000000000ULL, 0x0000080000000000ULL, + 0x0000100000000000ULL, 0x0000200000000000ULL, 0x0000400000000000ULL, 0x0000800000000000ULL, + 0x0001000000000000ULL, 0x0002000000000000ULL, 0x0004000000000000ULL, 0x0008000000000000ULL, + 0x0010000000000000ULL, 0x0020000000000000ULL, 0x0040000000000000ULL, 0x0080000000000000ULL, + 0x0100000000000000ULL, 0x0200000000000000ULL, 0x0400000000000000ULL, 0x0800000000000000ULL, + 0x1000000000000000ULL, 0x2000000000000000ULL, 0x4000000000000000ULL, 0x8000000000000000ULL +}; + +/* INT TRIE Implementation of depth 64 bits, being the number of bits + * in a 64 bit integer. + */ + +pANTLR3_INT_TRIE +antlr3IntTrieNew(ANTLR3_UINT32 depth) +{ + pANTLR3_INT_TRIE trie; + + trie = (pANTLR3_INT_TRIE) ANTLR3_CALLOC(1, sizeof(ANTLR3_INT_TRIE)); /* Base memory required */ + + if (trie == NULL) + { + return (pANTLR3_INT_TRIE) ANTLR3_FUNC_PTR(ANTLR3_ERR_NOMEM); + } + + /* Now we need to allocate the root node. This makes it easier + * to use the tree as we don't have to do anything special + * for the root node. + */ + trie->root = (pANTLR3_INT_TRIE_NODE) ANTLR3_CALLOC(1, sizeof(ANTLR3_INT_TRIE)); + + if (trie->root == NULL) + { + ANTLR3_FREE(trie); + return (pANTLR3_INT_TRIE) ANTLR3_FUNC_PTR(ANTLR3_ERR_NOMEM); + } + + trie->add = intTrieAdd; + trie->del = intTrieDel; + trie->free = intTrieFree; + trie->get = intTrieGet; + + /* Now we seed the root node with the index being the + * highest left most bit we want to test, which limits the + * keys in the trie. This is the trie 'depth'. The limit for + * this implementation is 63 (bits 0..63). + */ + trie->root->bitNum = depth; + + /* And as we have nothing in here yet, we set both child pointers + * of the root node to point back to itself. + */ + trie->root->leftN = trie->root; + trie->root->rightN = trie->root; + trie->count = 0; + + /* Finally, note that the key for this root node is 0 because + * we use calloc() to initialise it. + */ + + return trie; +} + +/** Search the int Trie and return a pointer to the first bucket indexed + * by the key if it is contained in the trie, otherwise NULL. + */ +static pANTLR3_TRIE_ENTRY +intTrieGet (pANTLR3_INT_TRIE trie, ANTLR3_INTKEY key) +{ + pANTLR3_INT_TRIE_NODE thisNode; + pANTLR3_INT_TRIE_NODE nextNode; + + if (trie->count == 0) + { + return NULL; /* Nothing in this trie yet */ + } + /* Starting at the root node in the trie, compare the bit index + * of the current node with its next child node (starts left from root). + * When the bit index of the child node is greater than the bit index of the current node + * then by definition (as the bit index decreases as we descent the trie) + * we have reached a 'backward' pointer. A backward pointer means we + * have reached the only node that can be reached by the bits given us so far + * and it must either be the key we are looking for, or if not then it + * means the entry was not in the trie, and we return NULL. A backward pointer + * points back in to the tree structure rather than down (deeper) within the + * tree branches. + */ + thisNode = trie->root; /* Start at the root node */ + nextNode = thisNode->leftN; /* Examine the left node from the root */ + + /* While we are descending the tree nodes... + */ + while (thisNode->bitNum > nextNode->bitNum) + { + /* Next node now becomes the new 'current' node + */ + thisNode = nextNode; + + /* We now test the bit indicated by the bitmap in the next node + * in the key we are searching for. The new next node is the + * right node if that bit is set and the left node it is not. + */ + if (key & bitMask[nextNode->bitNum]) + { + nextNode = nextNode->rightN; /* 1 is right */ + } + else + { + nextNode = nextNode->leftN; /* 0 is left */ + } + } + + /* Here we have reached a node where the bitMap index is lower than + * its parent. This means it is pointing backward in the tree and + * must therefore be a terminal node, being the only point than can + * be reached with the bits seen so far. It is either the actual key + * we wanted, or if that key is not in the trie it is another key + * that is currently the only one that can be reached by those bits. + * That situation would obviously change if the key was to be added + * to the trie. + * + * Hence it only remains to test whether this is actually the key or not. + */ + if (nextNode->key == key) + { + /* This was the key, so return the entry pointer + */ + return nextNode->buckets; + } + else + { + return NULL; /* That key is not in the trie (note that we set the pointer to -1 if no payload) */ + } +} + + +static ANTLR3_BOOLEAN +intTrieDel (pANTLR3_INT_TRIE trie, ANTLR3_INTKEY key) +{ + pANTLR3_INT_TRIE_NODE p; + + p=trie->root; + key = key; + + return ANTLR3_FALSE; +} + +/** Add an entry into the INT trie. + * Basically we descend the trie as we do when searching it, which will + * locate the only node in the trie that can be reached by the bit pattern of the + * key. If the key is actually at that node, then if the trie accepts duplicates + * we add the supplied data in a new chained bucket to that data node. If it does + * not accept duplicates then we merely return FALSE in case the caller wants to know + * whether the key was already in the trie. + * If the node we locate is not the key we are looking to add, then we insert a new node + * into the trie with a bit index of the leftmost differing bit and the left or right + * node pointing to itself or the data node we are inserting 'before'. + */ +static ANTLR3_BOOLEAN +intTrieAdd (pANTLR3_INT_TRIE trie, ANTLR3_INTKEY key, ANTLR3_UINT32 type, ANTLR3_INTKEY intVal, void * data, void (ANTLR3_CDECL *freeptr)(void *)) +{ + pANTLR3_INT_TRIE_NODE thisNode; + pANTLR3_INT_TRIE_NODE nextNode; + pANTLR3_INT_TRIE_NODE entNode; + ANTLR3_UINT32 depth; + pANTLR3_TRIE_ENTRY newEnt; + pANTLR3_TRIE_ENTRY nextEnt; + ANTLR3_INTKEY xorKey; + + /* Cache the bit depth of this trie, which is always the highest index, + * which is in the root node + */ + depth = trie->root->bitNum; + + thisNode = trie->root; /* Start with the root node */ + nextNode = trie->root->leftN; /* And assume we start to the left */ + + /* Now find the only node that can be currently reached by the bits in the + * key we are being asked to insert. + */ + while (thisNode->bitNum > nextNode->bitNum) + { + /* Still descending the structure, next node becomes current. + */ + thisNode = nextNode; + + if (key & bitMask[nextNode->bitNum]) + { + /* Bit at the required index was 1, so travers the right node from here + */ + nextNode = nextNode->rightN; + } + else + { + /* Bit at the required index was 0, so we traverse to the left + */ + nextNode = nextNode->leftN; + } + } + /* Here we have located the only node that can be reached by the + * bits in the requested key. It could in fact be that key or the node + * we need to use to insert the new key. + */ + if (nextNode->key == key) + { + /* We have located an exact match, but we will only append to the bucket chain + * if this trie accepts duplicate keys. + */ + if (trie->allowDups ==ANTLR3_TRUE) + { + /* Yes, we are accepting duplicates + */ + newEnt = (pANTLR3_TRIE_ENTRY)ANTLR3_CALLOC(1, sizeof(ANTLR3_TRIE_ENTRY)); + + if (newEnt == NULL) + { + /* Out of memory, all we can do is return the fact that the insert failed. + */ + return ANTLR3_FALSE; + } + + /* Otherwise insert this in the chain + */ + newEnt->type = type; + newEnt->freeptr = freeptr; + if (type == ANTLR3_HASH_TYPE_STR) + { + newEnt->data.ptr = data; + } + else + { + newEnt->data.intVal = intVal; + } + + /* We want to be able to traverse the stored elements in the order that they were + * added as duplicate keys. We might need to revise this opinion if we end up having many duplicate keys + * as perhaps reverse order is just as good, so long as it is ordered. + */ + nextEnt = nextNode->buckets; + while (nextEnt->next != NULL) + { + nextEnt = nextEnt->next; + } + nextEnt->next = newEnt; + + trie->count++; + return ANTLR3_TRUE; + } + else + { + /* We found the key is already there and we are not allowed duplicates in this + * trie. + */ + return ANTLR3_FALSE; + } + } + + /* Here we have discovered the only node that can be reached by the bits in the key + * but we have found that this node is not the key we need to insert. We must find the + * the leftmost bit by which the current key for that node and the new key we are going + * to insert, differ. While this nested series of ifs may look a bit strange, experimentation + * showed that it allows a machine code path that works well with predicated execution + */ + xorKey = (key ^ nextNode->key); /* Gives 1 bits only where they differ then we find the left most 1 bit*/ + + /* Most common case is a 32 bit key really + */ +#ifdef ANTLR3_USE_64BIT + if (xorKey & 0xFFFFFFFF00000000) + { + if (xorKey & 0xFFFF000000000000) + { + if (xorKey & 0xFF00000000000000) + { + depth = 56 + bitIndex[((xorKey & 0xFF00000000000000)>>56)]; + } + else + { + depth = 48 + bitIndex[((xorKey & 0x00FF000000000000)>>48)]; + } + } + else + { + if (xorKey & 0x0000FF0000000000) + { + depth = 40 + bitIndex[((xorKey & 0x0000FF0000000000)>>40)]; + } + else + { + depth = 32 + bitIndex[((xorKey & 0x000000FF00000000)>>32)]; + } + } + } + else +#endif + { + if (xorKey & 0x00000000FFFF0000) + { + if (xorKey & 0x00000000FF000000) + { + depth = 24 + bitIndex[((xorKey & 0x00000000FF000000)>>24)]; + } + else + { + depth = 16 + bitIndex[((xorKey & 0x0000000000FF0000)>>16)]; + } + } + else + { + if (xorKey & 0x000000000000FF00) + { + depth = 8 + bitIndex[((xorKey & 0x0000000000000FF00)>>8)]; + } + else + { + depth = bitIndex[xorKey & 0x00000000000000FF]; + } + } + } + + /* We have located the leftmost differing bit, indicated by the depth variable. So, we know what + * bit index we are to insert the new entry at. There are two cases, being where the two keys + * differ at a bit position that is not currently part of the bit testing, where they differ on a bit + * that is currently being skipped in the indexed comparisons, and where they differ on a bit + * that is merely lower down in the current bit search. If the bit index went bit 4, bit 2 and they differ + * at bit 3, then we have the "skipped" bit case. But if that chain was Bit 4, Bit 2 and they differ at bit 1 + * then we have the easy bit <pun>. + * + * So, set up to descend the tree again, but this time looking for the insert point + * according to whether we skip the bit that differs or not. + */ + thisNode = trie->root; + entNode = trie->root->leftN; + + /* Note the slight difference in the checks here to cover both cases + */ + while (thisNode->bitNum > entNode->bitNum && entNode->bitNum > depth) + { + /* Still descending the structure, next node becomes current. + */ + thisNode = entNode; + + if (key & bitMask[entNode->bitNum]) + { + /* Bit at the required index was 1, so traverse the right node from here + */ + entNode = entNode->rightN; + } + else + { + /* Bit at the required index was 0, so we traverse to the left + */ + entNode = entNode->leftN; + } + } + + /* We have located the correct insert point for this new key, so we need + * to allocate our entry and insert it etc. + */ + nextNode = (pANTLR3_INT_TRIE_NODE)ANTLR3_CALLOC(1, sizeof(ANTLR3_INT_TRIE_NODE)); + if (nextNode == NULL) + { + /* All that work and no memory - bummer. + */ + return ANTLR3_FALSE; + } + + /* Build a new entry block for the new node + */ + newEnt = (pANTLR3_TRIE_ENTRY)ANTLR3_CALLOC(1, sizeof(ANTLR3_TRIE_ENTRY)); + + if (newEnt == NULL) + { + /* Out of memory, all we can do is return the fact that the insert failed. + */ + return ANTLR3_FALSE; + } + + /* Otherwise enter this in our new node + */ + newEnt->type = type; + newEnt->freeptr = freeptr; + if (type == ANTLR3_HASH_TYPE_STR) + { + newEnt->data.ptr = data; + } + else + { + newEnt->data.intVal = intVal; + } + /* Install it + */ + nextNode->buckets = newEnt; + nextNode->key = key; + nextNode->bitNum = depth; + + /* Work out the right and left pointers for this new node, which involve + * terminating with the current found node either right or left according + * to whether the current index bit is 1 or 0 + */ + if (key & bitMask[depth]) + { + nextNode->leftN = entNode; /* Terminates at previous position */ + nextNode->rightN = nextNode; /* Terminates with itself */ + } + else + { + nextNode->rightN = entNode; /* Terminates at previous position */ + nextNode->leftN = nextNode; /* Terminates with itself */ + } + + /* Finally, we need to change the pointers at the node we located + * for inserting. If the key bit at its index is set then the right + * pointer for that node becomes the newly created node, otherwise the left + * pointer does. + */ + if (key & bitMask[thisNode->bitNum] ) + { + thisNode->rightN = nextNode; + } + else + { + thisNode->leftN = nextNode; + } + + /* Et voila + */ + trie->count++; + return ANTLR3_TRUE; + +} +/** Release memory allocated to this tree. + * Basic algorithm is that we do a depth first left descent and free + * up any nodes that are not backward pointers. + */ +static void +freeIntNode(pANTLR3_INT_TRIE_NODE node) +{ + pANTLR3_TRIE_ENTRY thisEntry; + pANTLR3_TRIE_ENTRY nextEntry; + + /* If this node has a left pointer that is not a back pointer + * then recursively call to free this + */ + if (node->bitNum > node->leftN->bitNum) + { + /* We have a left node that needs descending, so do it. + */ + freeIntNode(node->leftN); + } + + /* The left nodes from here should now be dealt with, so + * we need to descend any right nodes that are not back pointers + */ + if (node->bitNum > node->rightN->bitNum) + { + /* There are some right nodes to descend and deal with. + */ + freeIntNode(node->rightN); + } + + /* Now all the children are dealt with, we can destroy + * this node too + */ + thisEntry = node->buckets; + + while (thisEntry != NULL) + { + nextEntry = thisEntry->next; + + /* Do we need to call a custom free pointer for this string entry? + */ + if (thisEntry->type == ANTLR3_HASH_TYPE_STR && thisEntry->freeptr != NULL) + { + thisEntry->freeptr(thisEntry->data.ptr); + } + + /* Now free the data for this bucket entry + */ + ANTLR3_FREE(thisEntry); + thisEntry = nextEntry; /* See if there are any more to free */ + } + + /* The bucket entry is now gone, so we can free the memory for + * the entry itself. + */ + ANTLR3_FREE(node); + + /* And that should be it for everything under this node and itself + */ +} + +/** Called to free all nodes and the structure itself. + */ +static void +intTrieFree (pANTLR3_INT_TRIE trie) +{ + /* Descend from the root and free all the nodes + */ + freeIntNode(trie->root); + + /* the nodes are all gone now, so we need only free the memory + * for the structure itself + */ + ANTLR3_FREE(trie); +} diff --git a/antlr-3.1.3/runtime/C/src/antlr3commontoken.c b/antlr-3.1.3/runtime/C/src/antlr3commontoken.c new file mode 100644 index 0000000..b1af07a --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3commontoken.c @@ -0,0 +1,577 @@ +/** + * Contains the default implementation of the common token used within + * java. Custom tokens should create this structure and then append to it using the + * custom pointer to install their own structure and API. + */ + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3.h> + +/* Token API + */ +static pANTLR3_STRING getText (pANTLR3_COMMON_TOKEN token); +static void setText (pANTLR3_COMMON_TOKEN token, pANTLR3_STRING text); +static void setText8 (pANTLR3_COMMON_TOKEN token, pANTLR3_UINT8 text); +static ANTLR3_UINT32 getType (pANTLR3_COMMON_TOKEN token); +static void setType (pANTLR3_COMMON_TOKEN token, ANTLR3_UINT32 type); +static ANTLR3_UINT32 getLine (pANTLR3_COMMON_TOKEN token); +static void setLine (pANTLR3_COMMON_TOKEN token, ANTLR3_UINT32 line); +static ANTLR3_INT32 getCharPositionInLine (pANTLR3_COMMON_TOKEN token); +static void setCharPositionInLine (pANTLR3_COMMON_TOKEN token, ANTLR3_INT32 pos); +static ANTLR3_UINT32 getChannel (pANTLR3_COMMON_TOKEN token); +static void setChannel (pANTLR3_COMMON_TOKEN token, ANTLR3_UINT32 channel); +static ANTLR3_MARKER getTokenIndex (pANTLR3_COMMON_TOKEN token); +static void setTokenIndex (pANTLR3_COMMON_TOKEN token, ANTLR3_MARKER); +static ANTLR3_MARKER getStartIndex (pANTLR3_COMMON_TOKEN token); +static void setStartIndex (pANTLR3_COMMON_TOKEN token, ANTLR3_MARKER index); +static ANTLR3_MARKER getStopIndex (pANTLR3_COMMON_TOKEN token); +static void setStopIndex (pANTLR3_COMMON_TOKEN token, ANTLR3_MARKER index); +static pANTLR3_STRING toString (pANTLR3_COMMON_TOKEN token); + +/* Factory API + */ +static void factoryClose (pANTLR3_TOKEN_FACTORY factory); +static pANTLR3_COMMON_TOKEN newToken (void); +static void setInputStream (pANTLR3_TOKEN_FACTORY factory, pANTLR3_INPUT_STREAM input); + +/* Internal management functions + */ +static void newPool (pANTLR3_TOKEN_FACTORY factory); +static pANTLR3_COMMON_TOKEN newPoolToken (pANTLR3_TOKEN_FACTORY factory); + + + +ANTLR3_API pANTLR3_COMMON_TOKEN +antlr3CommonTokenNew(ANTLR3_UINT32 ttype) +{ + pANTLR3_COMMON_TOKEN token; + + // Create a raw token with the interface installed + // + token = newToken(); + + if (token != NULL) + { + token->setType(token, ttype); + } + + // All good + // + return token; +} + +ANTLR3_API pANTLR3_TOKEN_FACTORY +antlr3TokenFactoryNew(pANTLR3_INPUT_STREAM input) +{ + pANTLR3_TOKEN_FACTORY factory; + + /* allocate memory + */ + factory = (pANTLR3_TOKEN_FACTORY) ANTLR3_MALLOC((size_t)sizeof(ANTLR3_TOKEN_FACTORY)); + + if (factory == NULL) + { + return NULL; + } + + /* Install factory API + */ + factory->newToken = newPoolToken; + factory->close = factoryClose; + factory->setInputStream = setInputStream; + + /* Allocate the initial pool + */ + factory->thisPool = -1; + factory->pools = NULL; + newPool(factory); + + /* Factory space is good, we now want to initialize our cheating token + * which one it is initialized is the model for all tokens we manufacture + */ + antlr3SetTokenAPI(&factory->unTruc); + + /* Set some initial variables for future copying + */ + factory->unTruc.factoryMade = ANTLR3_TRUE; + + // Input stream + // + setInputStream(factory, input); + + return factory; + +} + +static void +setInputStream (pANTLR3_TOKEN_FACTORY factory, pANTLR3_INPUT_STREAM input) +{ + factory->input = input; + factory->unTruc.input = input; + if (input != NULL) + { + factory->unTruc.strFactory = input->strFactory; + } + else + { + factory->unTruc.strFactory = NULL; + } +} + +static void +newPool(pANTLR3_TOKEN_FACTORY factory) +{ + /* Increment factory count + */ + factory->thisPool++; + + /* Ensure we have enough pointers allocated + */ + factory->pools = (pANTLR3_COMMON_TOKEN *) + ANTLR3_REALLOC( (void *)factory->pools, /* Current pools pointer (starts at NULL) */ + (ANTLR3_UINT32)((factory->thisPool + 1) * sizeof(pANTLR3_COMMON_TOKEN *)) /* Memory for new pool pointers */ + ); + + /* Allocate a new pool for the factory + */ + factory->pools[factory->thisPool] = + (pANTLR3_COMMON_TOKEN) + ANTLR3_MALLOC((size_t)(sizeof(ANTLR3_COMMON_TOKEN) * ANTLR3_FACTORY_POOL_SIZE)); + + /* Reset the counters + */ + factory->nextToken = 0; + + /* Done + */ + return; +} + +static pANTLR3_COMMON_TOKEN +newPoolToken(pANTLR3_TOKEN_FACTORY factory) +{ + pANTLR3_COMMON_TOKEN token; + + /* See if we need a new token pool before allocating a new + * one + */ + if (factory->nextToken >= ANTLR3_FACTORY_POOL_SIZE) + { + /* We ran out of tokens in the current pool, so we need a new pool + */ + newPool(factory); + } + + /* Assuming everything went well (we are trying for performance here so doing minimal + * error checking. Then we can work out what the pointer is to the next token. + */ + token = factory->pools[factory->thisPool] + factory->nextToken; + factory->nextToken++; + + /* We have our token pointer now, so we can initialize it to the predefined model. + */ + antlr3SetTokenAPI(token); + + /* It is factory made, and we need to copy the string factory pointer + */ + token->factoryMade = ANTLR3_TRUE; + token->strFactory = factory->input == NULL ? NULL : factory->input->strFactory; + token->input = factory->input; + + /* And we are done + */ + return token; +} + +static void +factoryClose (pANTLR3_TOKEN_FACTORY factory) +{ + pANTLR3_COMMON_TOKEN pool; + ANTLR3_INT32 poolCount; + ANTLR3_UINT32 limit; + ANTLR3_UINT32 token; + pANTLR3_COMMON_TOKEN check; + + /* We iterate the token pools one at a time + */ + for (poolCount = 0; poolCount <= factory->thisPool; poolCount++) + { + /* Pointer to current pool + */ + pool = factory->pools[poolCount]; + + /* Work out how many tokens we need to check in this pool. + */ + limit = (poolCount == factory->thisPool ? factory->nextToken : ANTLR3_FACTORY_POOL_SIZE); + + /* Marginal condition, we might be at the start of a brand new pool + * where the nextToken is 0 and nothing has been allocated. + */ + if (limit > 0) + { + /* We have some tokens allocated from this pool + */ + for (token = 0; token < limit; token++) + { + /* Next one in the chain + */ + check = pool + token; + + /* If the programmer made this a custom token, then + * see if we need to call their free routine. + */ + if (check->custom != NULL && check->freeCustom != NULL) + { + check->freeCustom(check->custom); + check->custom = NULL; + } + } + } + + /* We can now free this pool allocation + */ + ANTLR3_FREE(factory->pools[poolCount]); + factory->pools[poolCount] = NULL; + } + + /* All the pools are deallocated we can free the pointers to the pools + * now. + */ + ANTLR3_FREE(factory->pools); + + /* Finally, we can free the space for the factory itself + */ + ANTLR3_FREE(factory); +} + + +static pANTLR3_COMMON_TOKEN +newToken(void) +{ + pANTLR3_COMMON_TOKEN token; + + /* Allocate memory for this + */ + token = (pANTLR3_COMMON_TOKEN) ANTLR3_MALLOC((size_t)(sizeof(ANTLR3_COMMON_TOKEN))); + + if (token == NULL) + { + return NULL; + } + + // Install the API + // + antlr3SetTokenAPI(token); + token->factoryMade = ANTLR3_FALSE; + + return token; +} + +ANTLR3_API void +antlr3SetTokenAPI(pANTLR3_COMMON_TOKEN token) +{ + token->getText = getText; + token->setText = setText; + token->setText8 = setText8; + token->getType = getType; + token->setType = setType; + token->getLine = getLine; + token->setLine = setLine; + token->setLine = setLine; + token->getCharPositionInLine = getCharPositionInLine; + token->setCharPositionInLine = setCharPositionInLine; + token->getChannel = getChannel; + token->setChannel = setChannel; + token->getTokenIndex = getTokenIndex; + token->setTokenIndex = setTokenIndex; + token->getStartIndex = getStartIndex; + token->setStartIndex = setStartIndex; + token->getStopIndex = getStopIndex; + token->setStopIndex = setStopIndex; + token->toString = toString; + + // Set defaults + // + token->setCharPositionInLine(token, -1); + + token->custom = NULL; + token->freeCustom = NULL; + token->type = ANTLR3_TOKEN_INVALID; + token->textState = ANTLR3_TEXT_NONE; + token->start = 0; + token->stop = 0; + token->channel = ANTLR3_TOKEN_DEFAULT_CHANNEL; + token->line = 0; + token->index = 0; + token->input = NULL; + token->user1 = 0; + token->user2 = 0; + token->user3 = 0; + token->custom = NULL; + + return; +} + +static pANTLR3_STRING getText (pANTLR3_COMMON_TOKEN token) +{ + switch (token->textState) + { + case ANTLR3_TEXT_STRING: + + // Someone already created a string for this token, so we just + // use it. + // + return token->tokText.text; + break; + + case ANTLR3_TEXT_CHARP: + + // We had a straight text pointer installed, now we + // must convert it to a string. Note we have to do this here + // or otherwise setText8() will just install the same char* + // + if (token->strFactory != NULL) + { + token->tokText.text = token->strFactory->newStr8(token->strFactory, (pANTLR3_UINT8)token->tokText.chars); + token->textState = ANTLR3_TEXT_STRING; + return token->tokText.text; + } + else + { + // We cannot do anything here + // + return NULL; + } + break; + + default: + + // EOF is a special case + // + if (token->type == ANTLR3_TOKEN_EOF) + { + token->tokText.text = token->strFactory->newStr8(token->strFactory, (pANTLR3_UINT8)"<EOF>"); + token->textState = ANTLR3_TEXT_STRING; + return token->tokText.text; + } + + + // We had nothing installed in the token, create a new string + // from the input stream + // + + if (token->input != NULL) + { + + return token->input->substr( token->input, + token->getStartIndex(token), + token->getStopIndex(token) + ); + } + + // Nothing to return, there is no input stream + // + return NULL; + break; + } +} +static void setText8 (pANTLR3_COMMON_TOKEN token, pANTLR3_UINT8 text) +{ + // No text to set, so ignore + // + if (text == NULL) return; + + switch (token->textState) + { + case ANTLR3_TEXT_NONE: + case ANTLR3_TEXT_CHARP: // Caller must free before setting again, if it needs to be freed + + // Nothing in there yet, or just a char *, so just set the + // text as a pointer + // + token->textState = ANTLR3_TEXT_CHARP; + token->tokText.chars = (pANTLR3_UCHAR)text; + break; + + default: + + // It was already a pANTLR3_STRING, so just override it + // + token->tokText.text->set8(token->tokText.text, (const char *)text); + break; + } + + // We are done + // + return; +} + +/** \brief Install the supplied text string as teh text for the token. + * The method assumes that the existing text (if any) was created by a factory + * and so does not attempt to release any memory it is using.Text not created + * by a string fctory (not advised) should be released prior to this call. + */ +static void setText (pANTLR3_COMMON_TOKEN token, pANTLR3_STRING text) +{ + // Merely replaces and existing pre-defined text with the supplied + // string + // + token->textState = ANTLR3_TEXT_STRING; + token->tokText.text = text; + + /* We are done + */ + return; +} + +static ANTLR3_UINT32 getType (pANTLR3_COMMON_TOKEN token) +{ + return token->type; +} + +static void setType (pANTLR3_COMMON_TOKEN token, ANTLR3_UINT32 type) +{ + token->type = type; +} + +static ANTLR3_UINT32 getLine (pANTLR3_COMMON_TOKEN token) +{ + return token->line; +} + +static void setLine (pANTLR3_COMMON_TOKEN token, ANTLR3_UINT32 line) +{ + token->line = line; +} + +static ANTLR3_INT32 getCharPositionInLine (pANTLR3_COMMON_TOKEN token) +{ + return token->charPosition; +} + +static void setCharPositionInLine (pANTLR3_COMMON_TOKEN token, ANTLR3_INT32 pos) +{ + token->charPosition = pos; +} + +static ANTLR3_UINT32 getChannel (pANTLR3_COMMON_TOKEN token) +{ + return token->channel; +} + +static void setChannel (pANTLR3_COMMON_TOKEN token, ANTLR3_UINT32 channel) +{ + token->channel = channel; +} + +static ANTLR3_MARKER getTokenIndex (pANTLR3_COMMON_TOKEN token) +{ + return token->index; +} + +static void setTokenIndex (pANTLR3_COMMON_TOKEN token, ANTLR3_MARKER index) +{ + token->index = index; +} + +static ANTLR3_MARKER getStartIndex (pANTLR3_COMMON_TOKEN token) +{ + return token->start == -1 ? (ANTLR3_MARKER)(token->input->data) : token->start; +} + +static void setStartIndex (pANTLR3_COMMON_TOKEN token, ANTLR3_MARKER start) +{ + token->start = start; +} + +static ANTLR3_MARKER getStopIndex (pANTLR3_COMMON_TOKEN token) +{ + return token->stop; +} + +static void setStopIndex (pANTLR3_COMMON_TOKEN token, ANTLR3_MARKER stop) +{ + token->stop = stop; +} + +static pANTLR3_STRING toString (pANTLR3_COMMON_TOKEN token) +{ + pANTLR3_STRING text; + pANTLR3_STRING outtext; + + text = token->getText(token); + + if (text == NULL) + { + return NULL; + } + + if (text->factory == NULL) + { + return text; // This usall ymeans it is the EOF token + } + + /* A new empty string to assemble all the stuff in + */ + outtext = text->factory->newRaw(text->factory); + + /* Now we use our handy dandy string utility to assemble the + * the reporting string + * return "[@"+getTokenIndex()+","+start+":"+stop+"='"+txt+"',<"+type+">"+channelStr+","+line+":"+getCharPositionInLine()+"]"; + */ + outtext->append8(outtext, "[Index: "); + outtext->addi (outtext, (ANTLR3_INT32)token->getTokenIndex(token)); + outtext->append8(outtext, " (Start: "); + outtext->addi (outtext, (ANTLR3_INT32)token->getStartIndex(token)); + outtext->append8(outtext, "-Stop: "); + outtext->addi (outtext, (ANTLR3_INT32)token->getStopIndex(token)); + outtext->append8(outtext, ") ='"); + outtext->appendS(outtext, text); + outtext->append8(outtext, "', type<"); + outtext->addi (outtext, token->type); + outtext->append8(outtext, "> "); + + if (token->getChannel(token) > ANTLR3_TOKEN_DEFAULT_CHANNEL) + { + outtext->append8(outtext, "(channel = "); + outtext->addi (outtext, (ANTLR3_INT32)token->getChannel(token)); + outtext->append8(outtext, ") "); + } + + outtext->append8(outtext, "Line: "); + outtext->addi (outtext, (ANTLR3_INT32)token->getLine(token)); + outtext->append8(outtext, " LinePos:"); + outtext->addi (outtext, token->getCharPositionInLine(token)); + outtext->addc (outtext, ']'); + + return outtext; +} + diff --git a/antlr-3.1.3/runtime/C/src/antlr3commontree.c b/antlr-3.1.3/runtime/C/src/antlr3commontree.c new file mode 100644 index 0000000..ab4aeb6 --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3commontree.c @@ -0,0 +1,542 @@ +// \file +// +// Implementation of ANTLR3 CommonTree, which you can use as a +// starting point for your own tree. Though it is often easier just to tag things on +// to the user pointer in the tree unless you are building a different type +// of structure. +// + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3commontree.h> + + +static pANTLR3_COMMON_TOKEN getToken (pANTLR3_BASE_TREE tree); +static pANTLR3_BASE_TREE dupNode (pANTLR3_BASE_TREE tree); +static ANTLR3_BOOLEAN isNilNode (pANTLR3_BASE_TREE tree); +static ANTLR3_UINT32 getType (pANTLR3_BASE_TREE tree); +static pANTLR3_STRING getText (pANTLR3_BASE_TREE tree); +static ANTLR3_UINT32 getLine (pANTLR3_BASE_TREE tree); +static ANTLR3_UINT32 getCharPositionInLine (pANTLR3_BASE_TREE tree); +static pANTLR3_STRING toString (pANTLR3_BASE_TREE tree); +static pANTLR3_BASE_TREE getParent (pANTLR3_BASE_TREE tree); +static void setParent (pANTLR3_BASE_TREE tree, pANTLR3_BASE_TREE parent); +static void setChildIndex (pANTLR3_BASE_TREE tree, ANTLR3_INT32 i); +static ANTLR3_INT32 getChildIndex (pANTLR3_BASE_TREE tree); +static void createChildrenList (pANTLR3_BASE_TREE tree); +static void reuse (pANTLR3_BASE_TREE tree); + +// Factory functions for the Arboretum +// +static void newPool (pANTLR3_ARBORETUM factory); +static pANTLR3_BASE_TREE newPoolTree (pANTLR3_ARBORETUM factory); +static pANTLR3_BASE_TREE newFromTree (pANTLR3_ARBORETUM factory, pANTLR3_COMMON_TREE tree); +static pANTLR3_BASE_TREE newFromToken (pANTLR3_ARBORETUM factory, pANTLR3_COMMON_TOKEN token); +static void factoryClose (pANTLR3_ARBORETUM factory); + +ANTLR3_API pANTLR3_ARBORETUM +antlr3ArboretumNew(pANTLR3_STRING_FACTORY strFactory) +{ + pANTLR3_ARBORETUM factory; + + // Allocate memory + // + factory = (pANTLR3_ARBORETUM) ANTLR3_MALLOC((size_t)sizeof(ANTLR3_ARBORETUM)); + if (factory == NULL) + { + return NULL; + } + + // Install a vector factory to create, track and free() any child + // node lists. + // + factory->vFactory = antlr3VectorFactoryNew(0); + if (factory->vFactory == NULL) + { + free(factory); + return NULL; + } + + // We also keep a reclaim stack, so that any Nil nodes that are + // orphaned are not just left in the pool but are reused, other wise + // we create 6 times as many nilNodes as ordinary nodes and use loads of + // memory. Perhaps at some point, the analysis phase will generate better + // code and we won't need to do this here. + // + factory->nilStack = antlr3StackNew(0); + + // Install factory API + // + factory->newTree = newPoolTree; + factory->newFromTree = newFromTree; + factory->newFromToken = newFromToken; + factory->close = factoryClose; + + // Allocate the initial pool + // + factory->thisPool = -1; + factory->pools = NULL; + newPool(factory); + + // Factory space is good, we now want to initialize our cheating token + // which one it is initialized is the model for all tokens we manufacture + // + antlr3SetCTAPI(&factory->unTruc); + + // Set some initial variables for future copying, including a string factory + // that we can use later for converting trees to strings. + // + factory->unTruc.factory = factory; + factory->unTruc.baseTree.strFactory = strFactory; + + return factory; + +} + +static void +newPool(pANTLR3_ARBORETUM factory) +{ + // Increment factory count + // + factory->thisPool++; + + // Ensure we have enough pointers allocated + // + factory->pools = (pANTLR3_COMMON_TREE *) + ANTLR3_REALLOC( (void *)factory->pools, // Current pools pointer (starts at NULL) + (ANTLR3_UINT32)((factory->thisPool + 1) * sizeof(pANTLR3_COMMON_TREE *)) // Memory for new pool pointers + ); + + // Allocate a new pool for the factory + // + factory->pools[factory->thisPool] = + (pANTLR3_COMMON_TREE) + ANTLR3_MALLOC((size_t)(sizeof(ANTLR3_COMMON_TREE) * ANTLR3_FACTORY_POOL_SIZE)); + + + // Reset the counters + // + factory->nextTree = 0; + + // Done + // + return; +} + +static pANTLR3_BASE_TREE +newPoolTree (pANTLR3_ARBORETUM factory) +{ + pANTLR3_COMMON_TREE tree; + + // If we have anything on the re claim stack, reuse that sucker first + // + tree = factory->nilStack->peek(factory->nilStack); + + if (tree != NULL) + { + // Cool we got something we could reuse, it will have been cleaned up by + // whatever put it back on the stack (for instance if it had a child vector, + // that will have been cleared to hold zero entries and that vector will get reused too. + // It is the basetree pointer that is placed on the stack of course + // + factory->nilStack->pop(factory->nilStack); + return (pANTLR3_BASE_TREE)tree; + + } + // See if we need a new tree pool before allocating a new tree + // + if (factory->nextTree >= ANTLR3_FACTORY_POOL_SIZE) + { + // We ran out of tokens in the current pool, so we need a new pool + // + newPool(factory); + } + + // Assuming everything went well - we are trying for performance here so doing minimal + // error checking - then we can work out what the pointer is to the next commontree. + // + tree = factory->pools[factory->thisPool] + factory->nextTree; + factory->nextTree++; + + // We have our token pointer now, so we can initialize it to the predefined model. + // + antlr3SetCTAPI(tree); + + // Set some initial variables for future copying, including a string factory + // that we can use later for converting trees to strings. + // + tree->factory = factory; + tree->baseTree.strFactory = factory->unTruc.baseTree.strFactory; + + // The super points to the common tree so we must override the one used by + // by the pre-built tree as otherwise we will always poitn to the same initial + // common tree and we might spend 3 hours trying to debug why - this would never + // happen to me of course! :-( + // + tree->baseTree.super = tree; + + // And we are done + // + return &(tree->baseTree); +} + + +static pANTLR3_BASE_TREE +newFromTree(pANTLR3_ARBORETUM factory, pANTLR3_COMMON_TREE tree) +{ + pANTLR3_BASE_TREE newTree; + + newTree = factory->newTree(factory); + + if (newTree == NULL) + { + return NULL; + } + + // Pick up the payload we had in the supplied tree + // + ((pANTLR3_COMMON_TREE)(newTree->super))->token = tree->token; + newTree->u = tree->baseTree.u; // Copy any user pointer + + return newTree; +} + +static pANTLR3_BASE_TREE +newFromToken(pANTLR3_ARBORETUM factory, pANTLR3_COMMON_TOKEN token) +{ + pANTLR3_BASE_TREE newTree; + + newTree = factory->newTree(factory); + + if (newTree == NULL) + { + return NULL; + } + + // Pick up the payload we had in the supplied tree + // + ((pANTLR3_COMMON_TREE)(newTree->super))->token = token; + + return newTree; +} + +static void +factoryClose (pANTLR3_ARBORETUM factory) +{ + ANTLR3_INT32 poolCount; + + // First close the vector factory that supplied all the child pointer + // vectors. + // + factory->vFactory->close(factory->vFactory); + + if (factory->nilStack != NULL) + { + factory->nilStack->free(factory->nilStack); + } + + // We now JUST free the pools because the C runtime CommonToken based tree + // cannot contain anything that was not made by this factory. + // + for (poolCount = 0; poolCount <= factory->thisPool; poolCount++) + { + // We can now free this pool allocation + // + ANTLR3_FREE(factory->pools[poolCount]); + factory->pools[poolCount] = NULL; + } + + // All the pools are deallocated we can free the pointers to the pools + // now. + // + ANTLR3_FREE(factory->pools); + + // Finally, we can free the space for the factory itself + // + ANTLR3_FREE(factory); +} + + +ANTLR3_API void +antlr3SetCTAPI(pANTLR3_COMMON_TREE tree) +{ + // Init base tree + // + antlr3BaseTreeNew(&(tree->baseTree)); + + // We need a pointer to ourselves for + // the payload and few functions that we + // provide. + // + tree->baseTree.super = tree; + + // Common tree overrides + + tree->baseTree.isNilNode = isNilNode; + tree->baseTree.toString = toString; + tree->baseTree.dupNode = (void *(*)(pANTLR3_BASE_TREE))(dupNode); + tree->baseTree.getLine = getLine; + tree->baseTree.getCharPositionInLine = getCharPositionInLine; + tree->baseTree.toString = toString; + tree->baseTree.getType = getType; + tree->baseTree.getText = getText; + tree->baseTree.getToken = getToken; + tree->baseTree.getParent = getParent; + tree->baseTree.setParent = setParent; + tree->baseTree.setChildIndex = setChildIndex; + tree->baseTree.getChildIndex = getChildIndex; + tree->baseTree.createChildrenList = createChildrenList; + tree->baseTree.reuse = reuse; + tree->baseTree.free = NULL; // Factory trees have no free function + + tree->baseTree.children = NULL; + + tree->token = NULL; // No token as yet + tree->startIndex = 0; + tree->stopIndex = 0; + tree->parent = NULL; // No parent yet + tree->childIndex = -1; + + return; +} + +// -------------------------------------- +// Non factory node constructors. +// + +ANTLR3_API pANTLR3_COMMON_TREE +antlr3CommonTreeNew() +{ + pANTLR3_COMMON_TREE tree; + tree = ANTLR3_MALLOC(sizeof(ANTLR3_COMMON_TREE)); + + if (tree == NULL) + { + return NULL; + } + + antlr3SetCTAPI(tree); + + return tree; +} + +ANTLR3_API pANTLR3_COMMON_TREE +antlr3CommonTreeNewFromToken(pANTLR3_COMMON_TOKEN token) +{ + pANTLR3_COMMON_TREE newTree; + + newTree = antlr3CommonTreeNew(); + + if (newTree == NULL) + { + return NULL; + } + + //Pick up the payload we had in the supplied tree + // + newTree->token = token; + return newTree; +} + +/// Create a new vector for holding child nodes using the inbuilt +/// vector factory. +/// +static void +createChildrenList (pANTLR3_BASE_TREE tree) +{ + tree->children = ((pANTLR3_COMMON_TREE)(tree->super))->factory->vFactory->newVector(((pANTLR3_COMMON_TREE)(tree->super))->factory->vFactory); +} + + +static pANTLR3_COMMON_TOKEN +getToken (pANTLR3_BASE_TREE tree) +{ + // The token is the payload of the common tree or other implementor + // so it is stored within ourselves, which is the super pointer.Note + // that whatever the actual token is, it is passed around by its pointer + // to the common token implementation, which it may of course surround + // with its own super structure. + // + return ((pANTLR3_COMMON_TREE)(tree->super))->token; +} + +static pANTLR3_BASE_TREE +dupNode (pANTLR3_BASE_TREE tree) +{ + // The node we are duplicating is in fact the common tree (that's why we are here) + // so we use the super pointer to duplicate. + // + pANTLR3_COMMON_TREE theOld; + + theOld = (pANTLR3_COMMON_TREE)(tree->super); + + // The pointer we return is the base implementation of course + // + return theOld->factory->newFromTree(theOld->factory, theOld); +} + +static ANTLR3_BOOLEAN +isNilNode (pANTLR3_BASE_TREE tree) +{ + // This is a Nil tree if it has no payload (Token in our case) + // + if (((pANTLR3_COMMON_TREE)(tree->super))->token == NULL) + { + return ANTLR3_TRUE; + } + else + { + return ANTLR3_FALSE; + } +} + +static ANTLR3_UINT32 +getType (pANTLR3_BASE_TREE tree) +{ + pANTLR3_COMMON_TREE theTree; + + theTree = (pANTLR3_COMMON_TREE)(tree->super); + + if (theTree->token == NULL) + { + return 0; + } + else + { + return theTree->token->getType(theTree->token); + } +} + +static pANTLR3_STRING +getText (pANTLR3_BASE_TREE tree) +{ + return tree->toString(tree); +} + +static ANTLR3_UINT32 getLine (pANTLR3_BASE_TREE tree) +{ + pANTLR3_COMMON_TREE cTree; + pANTLR3_COMMON_TOKEN token; + + cTree = (pANTLR3_COMMON_TREE)(tree->super); + + token = cTree->token; + + if (token == NULL || token->getLine(token) == 0) + { + if (tree->getChildCount(tree) > 0) + { + pANTLR3_BASE_TREE child; + + child = (pANTLR3_BASE_TREE)tree->getChild(tree, 0); + return child->getLine(child); + } + return 0; + } + return token->getLine(token); +} + +static ANTLR3_UINT32 getCharPositionInLine (pANTLR3_BASE_TREE tree) +{ + pANTLR3_COMMON_TOKEN token; + + token = ((pANTLR3_COMMON_TREE)(tree->super))->token; + + if (token == NULL || token->getCharPositionInLine(token) == -1) + { + if (tree->getChildCount(tree) > 0) + { + pANTLR3_BASE_TREE child; + + child = (pANTLR3_BASE_TREE)tree->getChild(tree, 0); + + return child->getCharPositionInLine(child); + } + return 0; + } + return token->getCharPositionInLine(token); +} + +static pANTLR3_STRING toString (pANTLR3_BASE_TREE tree) +{ + if (tree->isNilNode(tree) == ANTLR3_TRUE) + { + pANTLR3_STRING nilNode; + + nilNode = tree->strFactory->newPtr(tree->strFactory, (pANTLR3_UINT8)"nil", 3); + + return nilNode; + } + + return ((pANTLR3_COMMON_TREE)(tree->super))->token->getText(((pANTLR3_COMMON_TREE)(tree->super))->token); +} + +static pANTLR3_BASE_TREE +getParent (pANTLR3_BASE_TREE tree) +{ + return & (((pANTLR3_COMMON_TREE)(tree->super))->parent->baseTree); +} + +static void +setParent (pANTLR3_BASE_TREE tree, pANTLR3_BASE_TREE parent) +{ + ((pANTLR3_COMMON_TREE)(tree->super))->parent = parent == NULL ? NULL : ((pANTLR3_COMMON_TREE)(parent->super))->parent; +} + +static void +setChildIndex (pANTLR3_BASE_TREE tree, ANTLR3_INT32 i) +{ + ((pANTLR3_COMMON_TREE)(tree->super))->childIndex = i; +} +static ANTLR3_INT32 +getChildIndex (pANTLR3_BASE_TREE tree ) +{ + return ((pANTLR3_COMMON_TREE)(tree->super))->childIndex; +} + +/** Clean up any child vector that the tree might have, so it can be reused, + * then add it into the reuse stack. + */ +static void +reuse (pANTLR3_BASE_TREE tree) +{ + pANTLR3_COMMON_TREE cTree; + + cTree = (pANTLR3_COMMON_TREE)(tree->super); + + if (cTree->factory != NULL) + { + if (cTree->baseTree.children != NULL) + { + cTree->baseTree.children->clear(cTree->baseTree.children); + } + cTree->factory->nilStack->push(cTree->factory->nilStack, tree, NULL); + } +} diff --git a/antlr-3.1.3/runtime/C/src/antlr3commontreeadaptor.c b/antlr-3.1.3/runtime/C/src/antlr3commontreeadaptor.c new file mode 100644 index 0000000..880e15a --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3commontreeadaptor.c @@ -0,0 +1,486 @@ +/** \file + * This is the standard tree adaptor used by the C runtime unless the grammar + * source file says to use anything different. It embeds a BASE_TREE to which + * it adds its own implementation of anything that the base tree is not + * good for, plus a number of methods that any other adaptor type + * needs to implement too. + * \ingroup pANTLR3_COMMON_TREE_ADAPTOR + */ + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3commontreeadaptor.h> + +#ifdef ANTLR3_WINDOWS +#pragma warning( disable : 4100 ) +#endif + +/* BASE_TREE_ADAPTOR overrides... */ +static pANTLR3_BASE_TREE dupNode (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE treeNode); +static pANTLR3_BASE_TREE create (pANTLR3_BASE_TREE_ADAPTOR adpator, pANTLR3_COMMON_TOKEN payload); +static pANTLR3_BASE_TREE dbgCreate (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_COMMON_TOKEN payload); +static pANTLR3_COMMON_TOKEN createToken (pANTLR3_BASE_TREE_ADAPTOR adaptor, ANTLR3_UINT32 tokenType, pANTLR3_UINT8 text); +static pANTLR3_COMMON_TOKEN createTokenFromToken (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_COMMON_TOKEN fromToken); +static pANTLR3_COMMON_TOKEN getToken (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t); +static pANTLR3_STRING getText (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t); +static ANTLR3_UINT32 getType (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t); +static pANTLR3_BASE_TREE getChild (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, ANTLR3_UINT32 i); +static ANTLR3_UINT32 getChildCount (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t); +static void replaceChildren (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE parent, ANTLR3_INT32 startChildIndex, ANTLR3_INT32 stopChildIndex, pANTLR3_BASE_TREE t); +static void setDebugEventListener (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_DEBUG_EVENT_LISTENER debugger); +static void setChildIndex (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, ANTLR3_INT32 i); +static ANTLR3_INT32 getChildIndex (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t); +static void setParent (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE child, pANTLR3_BASE_TREE parent); +static void setChild (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, ANTLR3_UINT32 i, pANTLR3_BASE_TREE child); +static void deleteChild (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, ANTLR3_UINT32 i); +static pANTLR3_BASE_TREE errorNode (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_TOKEN_STREAM ctnstream, pANTLR3_COMMON_TOKEN startToken, pANTLR3_COMMON_TOKEN stopToken, pANTLR3_EXCEPTION e); +/* Methods specific to each tree adaptor + */ +static void setTokenBoundaries (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, pANTLR3_COMMON_TOKEN startToken, pANTLR3_COMMON_TOKEN stopToken); +static void dbgSetTokenBoundaries (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, pANTLR3_COMMON_TOKEN startToken, pANTLR3_COMMON_TOKEN stopToken); +static ANTLR3_MARKER getTokenStartIndex (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t); +static ANTLR3_MARKER getTokenStopIndex (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t); + +static void ctaFree (pANTLR3_BASE_TREE_ADAPTOR adaptor); + +/** Create a new tree adaptor. Note that despite the fact that this is + * creating a new COMMON_TREE adaptor, we return the address of the + * BASE_TREE interface, as should any other adaptor that wishes to be + * used as the tree element of a tree parse/build. It needs to be given the + * address of a valid string factory as we do not know what the originating + * input stream encoding type was. This way we can rely on just using + * the original input stream's string factory or one of the correct type + * which the user supplies us. + */ +ANTLR3_API pANTLR3_BASE_TREE_ADAPTOR +ANTLR3_TREE_ADAPTORNew(pANTLR3_STRING_FACTORY strFactory) +{ + pANTLR3_COMMON_TREE_ADAPTOR cta; + + // First job is to create the memory we need for the tree adaptor interface. + // + cta = (pANTLR3_COMMON_TREE_ADAPTOR) ANTLR3_MALLOC((size_t)(sizeof(ANTLR3_COMMON_TREE_ADAPTOR))); + + if (cta == NULL) + { + return NULL; + } + + // Memory is initialized, so initialize the base tree adaptor + // + antlr3BaseTreeAdaptorInit(&(cta->baseAdaptor), NULL); + + // Install our interface overrides. + // + cta->baseAdaptor.dupNode = (void * (*) (pANTLR3_BASE_TREE_ADAPTOR, void *)) + dupNode; + cta->baseAdaptor.create = (void * (*) (pANTLR3_BASE_TREE_ADAPTOR, pANTLR3_COMMON_TOKEN)) + create; + cta->baseAdaptor.createToken = + createToken; + cta->baseAdaptor.createTokenFromToken = + createTokenFromToken; + cta->baseAdaptor.setTokenBoundaries = (void (*) (pANTLR3_BASE_TREE_ADAPTOR, void *, pANTLR3_COMMON_TOKEN, pANTLR3_COMMON_TOKEN)) + setTokenBoundaries; + cta->baseAdaptor.getTokenStartIndex = (ANTLR3_MARKER (*) (pANTLR3_BASE_TREE_ADAPTOR, void *)) + getTokenStartIndex; + cta->baseAdaptor.getTokenStopIndex = (ANTLR3_MARKER (*) (pANTLR3_BASE_TREE_ADAPTOR, void *)) + getTokenStopIndex; + cta->baseAdaptor.getText = (pANTLR3_STRING (*) (pANTLR3_BASE_TREE_ADAPTOR, void *)) + getText; + cta->baseAdaptor.getType = (ANTLR3_UINT32 (*) (pANTLR3_BASE_TREE_ADAPTOR, void *)) + getType; + cta->baseAdaptor.getChild = (void * (*) (pANTLR3_BASE_TREE_ADAPTOR, void *, ANTLR3_UINT32)) + getChild; + cta->baseAdaptor.setChild = (void (*) (pANTLR3_BASE_TREE_ADAPTOR, void *, ANTLR3_UINT32, void *)) + setChild; + cta->baseAdaptor.setParent = (void (*) (pANTLR3_BASE_TREE_ADAPTOR, void *, void *)) + setParent; + cta->baseAdaptor.setChildIndex = (void (*) (pANTLR3_BASE_TREE_ADAPTOR, void *, ANTLR3_UINT32)) + setChildIndex; + cta->baseAdaptor.deleteChild = (void (*) (pANTLR3_BASE_TREE_ADAPTOR, void *, ANTLR3_UINT32)) + deleteChild; + cta->baseAdaptor.getChildCount = (ANTLR3_UINT32 (*) (pANTLR3_BASE_TREE_ADAPTOR, void *)) + getChildCount; + cta->baseAdaptor.getChildIndex = (ANTLR3_INT32 (*) (pANTLR3_BASE_TREE_ADAPTOR, void *)) + getChildIndex; + cta->baseAdaptor.free = (void (*) (pANTLR3_BASE_TREE_ADAPTOR)) + ctaFree; + cta->baseAdaptor.setDebugEventListener = + setDebugEventListener; + cta->baseAdaptor.replaceChildren = (void (*) (pANTLR3_BASE_TREE_ADAPTOR, void *, ANTLR3_INT32, ANTLR3_INT32, void *)) + replaceChildren; + cta->baseAdaptor.errorNode = (void * (*) (pANTLR3_BASE_TREE_ADAPTOR, pANTLR3_TOKEN_STREAM, pANTLR3_COMMON_TOKEN, pANTLR3_COMMON_TOKEN, pANTLR3_EXCEPTION)) + errorNode; + + // Install the super class pointer + // + cta->baseAdaptor.super = cta; + + // Install a tree factory for creating new tree nodes + // + cta->arboretum = antlr3ArboretumNew(strFactory); + + // Install a token factory for imaginary tokens, these imaginary + // tokens do not require access to the input stream so we can + // dummy the creation of it, but they will need a string factory. + // + cta->baseAdaptor.tokenFactory = antlr3TokenFactoryNew(NULL); + cta->baseAdaptor.tokenFactory->unTruc.strFactory = strFactory; + + // Allow the base tree adaptor to share the tree factory's string factory. + // + cta->baseAdaptor.strFactory = strFactory; + + // Return the address of the base adaptor interface. + // + return &(cta->baseAdaptor); +} + +/// Debugging version of the tree adaptor (not normally called as generated code +/// calls setDebugEventListener instead which changes a normal token stream to +/// a debugging stream and means that a user's instantiation code does not need +/// to be changed just to debug with AW. +/// +ANTLR3_API pANTLR3_BASE_TREE_ADAPTOR +ANTLR3_TREE_ADAPTORDebugNew(pANTLR3_STRING_FACTORY strFactory, pANTLR3_DEBUG_EVENT_LISTENER debugger) +{ + pANTLR3_BASE_TREE_ADAPTOR ta; + + // Create a normal one first + // + ta = ANTLR3_TREE_ADAPTORNew(strFactory); + + if (ta != NULL) + { + // Reinitialize as a debug version + // + antlr3BaseTreeAdaptorInit(ta, debugger); + ta->create = (void * (*) (pANTLR3_BASE_TREE_ADAPTOR, pANTLR3_COMMON_TOKEN)) + dbgCreate; + ta->setTokenBoundaries = (void (*) (pANTLR3_BASE_TREE_ADAPTOR, void *, pANTLR3_COMMON_TOKEN, pANTLR3_COMMON_TOKEN)) + dbgSetTokenBoundaries; + } + + return ta; +} + +/// Causes an existing common tree adaptor to become a debug version +/// +static void +setDebugEventListener (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_DEBUG_EVENT_LISTENER debugger) +{ + // Reinitialize as a debug version + // + antlr3BaseTreeAdaptorInit(adaptor, debugger); + + adaptor->create = (void * (*) (pANTLR3_BASE_TREE_ADAPTOR, pANTLR3_COMMON_TOKEN)) + dbgCreate; + adaptor->setTokenBoundaries = (void (*) (pANTLR3_BASE_TREE_ADAPTOR, void *, pANTLR3_COMMON_TOKEN, pANTLR3_COMMON_TOKEN)) + dbgSetTokenBoundaries; + +} + +static void +ctaFree(pANTLR3_BASE_TREE_ADAPTOR adaptor) +{ + pANTLR3_COMMON_TREE_ADAPTOR cta; + + cta = (pANTLR3_COMMON_TREE_ADAPTOR)(adaptor->super); + + /* Free the tree factory we created + */ + cta->arboretum->close(((pANTLR3_COMMON_TREE_ADAPTOR)(adaptor->super))->arboretum); + + /* Free the token factory we created + */ + adaptor->tokenFactory->close(adaptor->tokenFactory); + + /* Free the super pointer, as it is this that was allocated + * and is the common tree structure. + */ + ANTLR3_FREE(adaptor->super); +} + +/* BASE_TREE_ADAPTOR overrides */ + +static pANTLR3_BASE_TREE +errorNode (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_TOKEN_STREAM ctnstream, pANTLR3_COMMON_TOKEN startToken, pANTLR3_COMMON_TOKEN stopToken, pANTLR3_EXCEPTION e) +{ + // Use the supplied common tree node stream to get another tree from the factory + // TODO: Look at creating the erronode as in Java, but this is complicated by the + // need to track and free the memory allocated to it, so for now, we just + // want something in the tree that isn't a NULL pointer. + // + return adaptor->createTypeText(adaptor, ANTLR3_TOKEN_INVALID, (pANTLR3_UINT8)"Tree Error Node"); + +} + +/** Duplicate the supplied node. + */ +static pANTLR3_BASE_TREE +dupNode (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE treeNode) +{ + return treeNode == NULL ? NULL : treeNode->dupNode(treeNode); +} + +static pANTLR3_BASE_TREE +create (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_COMMON_TOKEN payload) +{ + pANTLR3_BASE_TREE ct; + + /* Create a new common tree as this is what this adaptor deals with + */ + ct = ((pANTLR3_COMMON_TREE_ADAPTOR)(adaptor->super))->arboretum->newFromToken(((pANTLR3_COMMON_TREE_ADAPTOR)(adaptor->super))->arboretum, payload); + + /* But all adaptors return the pointer to the base interface. + */ + return ct; +} +static pANTLR3_BASE_TREE +dbgCreate (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_COMMON_TOKEN payload) +{ + pANTLR3_BASE_TREE ct; + + ct = create(adaptor, payload); + adaptor->debugger->createNode(adaptor->debugger, ct); + + return ct; +} + +/** Tell me how to create a token for use with imaginary token nodes. + * For example, there is probably no input symbol associated with imaginary + * token DECL, but you need to create it as a payload or whatever for + * the DECL node as in ^(DECL type ID). + * + * If you care what the token payload objects' type is, you should + * override this method and any other createToken variant. + */ +static pANTLR3_COMMON_TOKEN +createToken (pANTLR3_BASE_TREE_ADAPTOR adaptor, ANTLR3_UINT32 tokenType, pANTLR3_UINT8 text) +{ + pANTLR3_COMMON_TOKEN newToken; + + newToken = adaptor->tokenFactory->newToken(adaptor->tokenFactory); + + if (newToken != NULL) + { + newToken->textState = ANTLR3_TEXT_CHARP; + newToken->tokText.chars = (pANTLR3_UCHAR)text; + newToken->setType(newToken, tokenType); + newToken->input = adaptor->tokenFactory->input; + } + return newToken; +} + +/** Tell me how to create a token for use with imaginary token nodes. + * For example, there is probably no input symbol associated with imaginary + * token DECL, but you need to create it as a payload or whatever for + * the DECL node as in ^(DECL type ID). + * + * This is a variant of createToken where the new token is derived from + * an actual real input token. Typically this is for converting '{' + * tokens to BLOCK etc... You'll see + * + * r : lc='{' ID+ '}' -> ^(BLOCK[$lc] ID+) ; + * + * If you care what the token payload objects' type is, you should + * override this method and any other createToken variant. + * + * NB: this being C it is not so easy to extend the types of creaeteToken. + * We will have to see if anyone needs to do this and add any variants to + * this interface. + */ +static pANTLR3_COMMON_TOKEN +createTokenFromToken (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_COMMON_TOKEN fromToken) +{ + pANTLR3_COMMON_TOKEN newToken; + + newToken = adaptor->tokenFactory->newToken(adaptor->tokenFactory); + + if (newToken != NULL) + { + // Create the text using our own string factory to avoid complicating + // commontoken. + // + pANTLR3_STRING text; + + newToken->toString = fromToken->toString; + + if (fromToken->textState == ANTLR3_TEXT_CHARP) + { + newToken->textState = ANTLR3_TEXT_CHARP; + newToken->tokText.chars = fromToken->tokText.chars; + } + else + { + text = fromToken->getText(fromToken); + newToken->textState = ANTLR3_TEXT_STRING; + newToken->tokText.text = adaptor->strFactory->newPtr(adaptor->strFactory, text->chars, text->len); + } + + newToken->setLine (newToken, fromToken->getLine(fromToken)); + newToken->setTokenIndex (newToken, fromToken->getTokenIndex(fromToken)); + newToken->setCharPositionInLine (newToken, fromToken->getCharPositionInLine(fromToken)); + newToken->setChannel (newToken, fromToken->getChannel(fromToken)); + newToken->setType (newToken, fromToken->getType(fromToken)); + } + + return newToken; +} + +/* Specific methods for a TreeAdaptor */ + +/** Track start/stop token for subtree root created for a rule. + * Only works with CommonTree nodes. For rules that match nothing, + * seems like this will yield start=i and stop=i-1 in a nil node. + * Might be useful info so I'll not force to be i..i. + */ +static void +setTokenBoundaries (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, pANTLR3_COMMON_TOKEN startToken, pANTLR3_COMMON_TOKEN stopToken) +{ + ANTLR3_MARKER start; + ANTLR3_MARKER stop; + + pANTLR3_COMMON_TREE ct; + + if (t == NULL) + { + return; + } + + if ( startToken != NULL) + { + start = startToken->getTokenIndex(startToken); + } + else + { + start = 0; + } + + if ( stopToken != NULL) + { + stop = stopToken->getTokenIndex(stopToken); + } + else + { + stop = 0; + } + + ct = (pANTLR3_COMMON_TREE)(t->super); + + ct->startIndex = start; + ct->stopIndex = stop; + +} +static void +dbgSetTokenBoundaries (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, pANTLR3_COMMON_TOKEN startToken, pANTLR3_COMMON_TOKEN stopToken) +{ + setTokenBoundaries(adaptor, t, startToken, stopToken); + + if (t != NULL && startToken != NULL && stopToken != NULL) + { + adaptor->debugger->setTokenBoundaries(adaptor->debugger, t, startToken->getTokenIndex(startToken), stopToken->getTokenIndex(stopToken)); + } +} + +static ANTLR3_MARKER +getTokenStartIndex (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t) +{ + return ((pANTLR3_COMMON_TREE)(t->super))->startIndex; +} + +static ANTLR3_MARKER +getTokenStopIndex (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t) +{ + return ((pANTLR3_COMMON_TREE)(t->super))->stopIndex; +} + +static pANTLR3_STRING +getText (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t) +{ + return t->getText(t); +} + +static ANTLR3_UINT32 +getType (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t) +{ + return t->getType(t); +} + +static void +replaceChildren +(pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE parent, ANTLR3_INT32 startChildIndex, ANTLR3_INT32 stopChildIndex, pANTLR3_BASE_TREE t) +{ + if (parent != NULL) + { + parent->replaceChildren(parent, startChildIndex, stopChildIndex, t); + } +} + +static pANTLR3_BASE_TREE +getChild (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, ANTLR3_UINT32 i) +{ + return t->getChild(t, i); +} +static void +setChild (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, ANTLR3_UINT32 i, pANTLR3_BASE_TREE child) +{ + t->setChild(t, i, child); +} + +static void +deleteChild (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, ANTLR3_UINT32 i) +{ + t->deleteChild(t, i); +} + +static ANTLR3_UINT32 +getChildCount (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t) +{ + return t->getChildCount(t); +} + +static void +setChildIndex (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t, ANTLR3_INT32 i) +{ + t->setChildIndex(t, i); +} + +static ANTLR3_INT32 +getChildIndex (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE t) +{ + return t->getChildIndex(t); +} +static void +setParent (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_TREE child, pANTLR3_BASE_TREE parent) +{ + child->setParent(child, parent); +} diff --git a/antlr-3.1.3/runtime/C/src/antlr3commontreenodestream.c b/antlr-3.1.3/runtime/C/src/antlr3commontreenodestream.c new file mode 100644 index 0000000..a759d34 --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3commontreenodestream.c @@ -0,0 +1,968 @@ +/// \file +/// Defines the implementation of the common node stream the default +/// tree node stream used by ANTLR. +/// + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3commontreenodestream.h> + +#ifdef ANTLR3_WINDOWS +#pragma warning( disable : 4100 ) +#endif + +// COMMON TREE STREAM API +// +static void addNavigationNode (pANTLR3_COMMON_TREE_NODE_STREAM ctns, ANTLR3_UINT32 ttype); +static ANTLR3_BOOLEAN hasUniqueNavigationNodes (pANTLR3_COMMON_TREE_NODE_STREAM ctns); +static pANTLR3_BASE_TREE newDownNode (pANTLR3_COMMON_TREE_NODE_STREAM ctns); +static pANTLR3_BASE_TREE newUpNode (pANTLR3_COMMON_TREE_NODE_STREAM ctns); +static void reset (pANTLR3_COMMON_TREE_NODE_STREAM ctns); +static void push (pANTLR3_COMMON_TREE_NODE_STREAM ctns, ANTLR3_INT32 index); +static ANTLR3_INT32 pop (pANTLR3_COMMON_TREE_NODE_STREAM ctns); +//static ANTLR3_INT32 index (pANTLR3_COMMON_TREE_NODE_STREAM ctns); +static ANTLR3_UINT32 getLookaheadSize (pANTLR3_COMMON_TREE_NODE_STREAM ctns); +// TREE NODE STREAM API +// +static pANTLR3_BASE_TREE_ADAPTOR getTreeAdaptor (pANTLR3_TREE_NODE_STREAM tns); +static pANTLR3_BASE_TREE getTreeSource (pANTLR3_TREE_NODE_STREAM tns); +static pANTLR3_BASE_TREE _LT (pANTLR3_TREE_NODE_STREAM tns, ANTLR3_INT32 k); +static pANTLR3_BASE_TREE get (pANTLR3_TREE_NODE_STREAM tns, ANTLR3_INT32 k); +static void setUniqueNavigationNodes (pANTLR3_TREE_NODE_STREAM tns, ANTLR3_BOOLEAN uniqueNavigationNodes); +static pANTLR3_STRING toString (pANTLR3_TREE_NODE_STREAM tns); +static pANTLR3_STRING toStringSS (pANTLR3_TREE_NODE_STREAM tns, pANTLR3_BASE_TREE start, pANTLR3_BASE_TREE stop); +static void toStringWork (pANTLR3_TREE_NODE_STREAM tns, pANTLR3_BASE_TREE start, pANTLR3_BASE_TREE stop, pANTLR3_STRING buf); +static void replaceChildren (pANTLR3_TREE_NODE_STREAM tns, pANTLR3_BASE_TREE parent, ANTLR3_INT32 startChildIndex, ANTLR3_INT32 stopChildIndex, pANTLR3_BASE_TREE t); + +// INT STREAM API +// +static void consume (pANTLR3_INT_STREAM is); +static ANTLR3_MARKER tindex (pANTLR3_INT_STREAM is); +static ANTLR3_UINT32 _LA (pANTLR3_INT_STREAM is, ANTLR3_INT32 i); +static ANTLR3_MARKER mark (pANTLR3_INT_STREAM is); +static void release (pANTLR3_INT_STREAM is, ANTLR3_MARKER marker); +static void rewindMark (pANTLR3_INT_STREAM is, ANTLR3_MARKER marker); +static void rewindLast (pANTLR3_INT_STREAM is); +static void seek (pANTLR3_INT_STREAM is, ANTLR3_MARKER index); +static ANTLR3_UINT32 size (pANTLR3_INT_STREAM is); + + +// Helper functions +// +static void fillBuffer (pANTLR3_COMMON_TREE_NODE_STREAM ctns, pANTLR3_BASE_TREE t); +static void fillBufferRoot (pANTLR3_COMMON_TREE_NODE_STREAM ctns); + +// Constructors +// +static void antlr3TreeNodeStreamFree (pANTLR3_TREE_NODE_STREAM tns); +static void antlr3CommonTreeNodeStreamFree (pANTLR3_COMMON_TREE_NODE_STREAM ctns); + +ANTLR3_API pANTLR3_TREE_NODE_STREAM +antlr3TreeNodeStreamNew() +{ + pANTLR3_TREE_NODE_STREAM stream; + + // Memory for the interface structure + // + stream = (pANTLR3_TREE_NODE_STREAM) ANTLR3_CALLOC(1, sizeof(ANTLR3_TREE_NODE_STREAM)); + + if (stream == NULL) + { + return NULL; + } + + // Install basic API + // + stream->replaceChildren = replaceChildren; + stream->free = antlr3TreeNodeStreamFree; + + return stream; +} + +static void +antlr3TreeNodeStreamFree(pANTLR3_TREE_NODE_STREAM stream) +{ + ANTLR3_FREE(stream); +} + +ANTLR3_API pANTLR3_COMMON_TREE_NODE_STREAM +antlr3CommonTreeNodeStreamNewTree(pANTLR3_BASE_TREE tree, ANTLR3_UINT32 hint) +{ + pANTLR3_COMMON_TREE_NODE_STREAM stream; + + stream = antlr3CommonTreeNodeStreamNew(tree->strFactory, hint); + + if (stream == NULL) + { + return NULL; + } + stream->root = tree; + + return stream; +} + +ANTLR3_API pANTLR3_COMMON_TREE_NODE_STREAM +antlr3CommonTreeNodeStreamNewStream(pANTLR3_COMMON_TREE_NODE_STREAM inStream) +{ + pANTLR3_COMMON_TREE_NODE_STREAM stream; + + // Memory for the interface structure + // + stream = (pANTLR3_COMMON_TREE_NODE_STREAM) ANTLR3_CALLOC(1, sizeof(ANTLR3_COMMON_TREE_NODE_STREAM)); + + if (stream == NULL) + { + return NULL; + } + + // Copy in all the reusable parts of the originating stream and create new + // pieces where necessary. + // + + // String factory for tree walker + // + stream->stringFactory = inStream->stringFactory; + + // Create an adaptor for the common tree node stream + // + stream->adaptor = inStream->adaptor; + + // Create space for the tree node stream interface + // + stream->tnstream = antlr3TreeNodeStreamNew(); + + if (stream->tnstream == NULL) + { + stream->free (stream); + + return NULL; + } + + // Create space for the INT_STREAM interface + // + stream->tnstream->istream = antlr3IntStreamNew(); + + if (stream->tnstream->istream == NULL) + { + stream->tnstream->free (stream->tnstream); + stream->free (stream); + + return NULL; + } + + // Install the common tree node stream API + // + stream->addNavigationNode = addNavigationNode; + stream->hasUniqueNavigationNodes = hasUniqueNavigationNodes; + stream->newDownNode = newDownNode; + stream->newUpNode = newUpNode; + stream->reset = reset; + stream->push = push; + stream->pop = pop; + stream->getLookaheadSize = getLookaheadSize; + + stream->free = antlr3CommonTreeNodeStreamFree; + + // Install the tree node stream API + // + stream->tnstream->getTreeAdaptor = getTreeAdaptor; + stream->tnstream->getTreeSource = getTreeSource; + stream->tnstream->_LT = _LT; + stream->tnstream->setUniqueNavigationNodes = setUniqueNavigationNodes; + stream->tnstream->toString = toString; + stream->tnstream->toStringSS = toStringSS; + stream->tnstream->toStringWork = toStringWork; + stream->tnstream->get = get; + + // Install INT_STREAM interface + // + stream->tnstream->istream->consume = consume; + stream->tnstream->istream->index = tindex; + stream->tnstream->istream->_LA = _LA; + stream->tnstream->istream->mark = mark; + stream->tnstream->istream->release = release; + stream->tnstream->istream->rewind = rewindMark; + stream->tnstream->istream->rewindLast = rewindLast; + stream->tnstream->istream->seek = seek; + stream->tnstream->istream->size = size; + + // Initialize data elements of INT stream + // + stream->tnstream->istream->type = ANTLR3_COMMONTREENODE; + stream->tnstream->istream->super = (stream->tnstream); + + // Initialize data elements of TREE stream + // + stream->tnstream->ctns = stream; + + // Initialize data elements of the COMMON TREE NODE stream + // + stream->super = NULL; + stream->uniqueNavigationNodes = ANTLR3_FALSE; + stream->markers = NULL; + stream->nodeStack = inStream->nodeStack; + + // Create the node list map + // + stream->nodes = antlr3VectorNew(DEFAULT_INITIAL_BUFFER_SIZE); + stream->p = -1; + + // Install the navigation nodes + // + + // Install the navigation nodes + // + antlr3SetCTAPI(&(stream->UP)); + antlr3SetCTAPI(&(stream->DOWN)); + antlr3SetCTAPI(&(stream->EOF_NODE)); + antlr3SetCTAPI(&(stream->INVALID_NODE)); + + stream->UP.token = inStream->UP.token; + inStream->UP.token->strFactory = stream->stringFactory; + stream->DOWN.token = inStream->DOWN.token; + inStream->DOWN.token->strFactory = stream->stringFactory; + stream->EOF_NODE.token = inStream->EOF_NODE.token; + inStream->EOF_NODE.token->strFactory = stream->stringFactory; + stream->INVALID_NODE.token = inStream->INVALID_NODE.token; + inStream->INVALID_NODE.token->strFactory= stream->stringFactory; + + // Reuse the root tree of the originating stream + // + stream->root = inStream->root; + + // Signal that this is a rewriting stream so we don't + // free the originating tree. Anything that we rewrite or + // duplicate here will be done through the adaptor or + // the original tree factory. + // + stream->isRewriter = ANTLR3_TRUE; + return stream; +} + +ANTLR3_API pANTLR3_COMMON_TREE_NODE_STREAM +antlr3CommonTreeNodeStreamNew(pANTLR3_STRING_FACTORY strFactory, ANTLR3_UINT32 hint) +{ + pANTLR3_COMMON_TREE_NODE_STREAM stream; + pANTLR3_COMMON_TOKEN token; + + // Memory for the interface structure + // + stream = (pANTLR3_COMMON_TREE_NODE_STREAM) ANTLR3_CALLOC(1, sizeof(ANTLR3_COMMON_TREE_NODE_STREAM)); + + if (stream == NULL) + { + return NULL; + } + + // String factory for tree walker + // + stream->stringFactory = strFactory; + + // Create an adaptor for the common tree node stream + // + stream->adaptor = ANTLR3_TREE_ADAPTORNew(strFactory); + + if (stream->adaptor == NULL) + { + stream->free(stream); + return NULL; + } + + // Create space for the tree node stream interface + // + stream->tnstream = antlr3TreeNodeStreamNew(); + + if (stream->tnstream == NULL) + { + stream->adaptor->free (stream->adaptor); + stream->free (stream); + + return NULL; + } + + // Create space for the INT_STREAM interface + // + stream->tnstream->istream = antlr3IntStreamNew(); + + if (stream->tnstream->istream == NULL) + { + stream->adaptor->free (stream->adaptor); + stream->tnstream->free (stream->tnstream); + stream->free (stream); + + return NULL; + } + + // Install the common tree node stream API + // + stream->addNavigationNode = addNavigationNode; + stream->hasUniqueNavigationNodes = hasUniqueNavigationNodes; + stream->newDownNode = newDownNode; + stream->newUpNode = newUpNode; + stream->reset = reset; + stream->push = push; + stream->pop = pop; + + stream->free = antlr3CommonTreeNodeStreamFree; + + // Install the tree node stream API + // + stream->tnstream->getTreeAdaptor = getTreeAdaptor; + stream->tnstream->getTreeSource = getTreeSource; + stream->tnstream->_LT = _LT; + stream->tnstream->setUniqueNavigationNodes = setUniqueNavigationNodes; + stream->tnstream->toString = toString; + stream->tnstream->toStringSS = toStringSS; + stream->tnstream->toStringWork = toStringWork; + stream->tnstream->get = get; + + // Install INT_STREAM interface + // + stream->tnstream->istream->consume = consume; + stream->tnstream->istream->index = tindex; + stream->tnstream->istream->_LA = _LA; + stream->tnstream->istream->mark = mark; + stream->tnstream->istream->release = release; + stream->tnstream->istream->rewind = rewindMark; + stream->tnstream->istream->rewindLast = rewindLast; + stream->tnstream->istream->seek = seek; + stream->tnstream->istream->size = size; + + // Initialize data elements of INT stream + // + stream->tnstream->istream->type = ANTLR3_COMMONTREENODE; + stream->tnstream->istream->super = (stream->tnstream); + + // Initialize data elements of TREE stream + // + stream->tnstream->ctns = stream; + + // Initialize data elements of the COMMON TREE NODE stream + // + stream->super = NULL; + stream->uniqueNavigationNodes = ANTLR3_FALSE; + stream->markers = NULL; + stream->nodeStack = antlr3StackNew(INITIAL_CALL_STACK_SIZE); + + // Create the node list map + // + if (hint == 0) + { + hint = DEFAULT_INITIAL_BUFFER_SIZE; + } + stream->nodes = antlr3VectorNew(hint); + stream->p = -1; + + // Install the navigation nodes + // + antlr3SetCTAPI(&(stream->UP)); + antlr3SetCTAPI(&(stream->DOWN)); + antlr3SetCTAPI(&(stream->EOF_NODE)); + antlr3SetCTAPI(&(stream->INVALID_NODE)); + + token = antlr3CommonTokenNew(ANTLR3_TOKEN_UP); + token->strFactory = strFactory; + token->textState = ANTLR3_TEXT_CHARP; + token->tokText.chars = (pANTLR3_UCHAR)"UP"; + stream->UP.token = token; + + token = antlr3CommonTokenNew(ANTLR3_TOKEN_DOWN); + token->strFactory = strFactory; + token->textState = ANTLR3_TEXT_CHARP; + token->tokText.chars = (pANTLR3_UCHAR)"DOWN"; + stream->DOWN.token = token; + + token = antlr3CommonTokenNew(ANTLR3_TOKEN_EOF); + token->strFactory = strFactory; + token->textState = ANTLR3_TEXT_CHARP; + token->tokText.chars = (pANTLR3_UCHAR)"EOF"; + stream->EOF_NODE.token = token; + + token = antlr3CommonTokenNew(ANTLR3_TOKEN_INVALID); + token->strFactory = strFactory; + token->textState = ANTLR3_TEXT_CHARP; + token->tokText.chars = (pANTLR3_UCHAR)"INVALID"; + stream->INVALID_NODE.token = token; + + + return stream; +} + +/// Free up any resources that belong to this common tree node stream. +/// +static void antlr3CommonTreeNodeStreamFree (pANTLR3_COMMON_TREE_NODE_STREAM ctns) +{ + + // If this is a rewrting stream, then certain resources + // belong to the originating node stream and we do not + // free them here. + // + if (ctns->isRewriter != ANTLR3_TRUE) + { + ctns->adaptor ->free (ctns->adaptor); + + if (ctns->nodeStack != NULL) + { + ctns->nodeStack->free(ctns->nodeStack); + } + + ANTLR3_FREE(ctns->INVALID_NODE.token); + ANTLR3_FREE(ctns->EOF_NODE.token); + ANTLR3_FREE(ctns->DOWN.token); + ANTLR3_FREE(ctns->UP.token); + } + + if (ctns->nodes != NULL) + { + ctns->nodes ->free (ctns->nodes); + } + ctns->tnstream->istream ->free (ctns->tnstream->istream); + ctns->tnstream ->free (ctns->tnstream); + + + ANTLR3_FREE(ctns); +} + +// ------------------------------------------------------------------------------ +// Local helpers +// + +/// Walk and fill the tree node buffer from the root tree +/// +static void +fillBufferRoot(pANTLR3_COMMON_TREE_NODE_STREAM ctns) +{ + // Call the generic buffer routine with the root as the + // argument + // + fillBuffer(ctns, ctns->root); + ctns->p = 0; // Indicate we are at buffer start +} + +/// Walk tree with depth-first-search and fill nodes buffer. +/// Don't add in DOWN, UP nodes if the supplied tree is a list (t is isNilNode) +// such as the root tree is. +/// +static void +fillBuffer(pANTLR3_COMMON_TREE_NODE_STREAM ctns, pANTLR3_BASE_TREE t) +{ + ANTLR3_BOOLEAN nilNode; + ANTLR3_UINT32 nCount; + ANTLR3_UINT32 c; + + nilNode = ctns->adaptor->isNilNode(ctns->adaptor, t); + + // If the supplied node is not a nil (list) node then we + // add in the node itself to the vector + // + if (nilNode == ANTLR3_FALSE) + { + ctns->nodes->add(ctns->nodes, t, NULL); + } + + // Only add a DOWN node if the tree is not a nil tree and + // the tree does have children. + // + nCount = t->getChildCount(t); + + if (nilNode == ANTLR3_FALSE && nCount>0) + { + ctns->addNavigationNode(ctns, ANTLR3_TOKEN_DOWN); + } + + // We always add any children the tree contains, which is + // a recursive call to this function, which will cause similar + // recursion and implement a depth first addition + // + for (c = 0; c < nCount; c++) + { + fillBuffer(ctns, ctns->adaptor->getChild(ctns->adaptor, t, c)); + } + + // If the tree had children and was not a nil (list) node, then we + // we need to add an UP node here to match the DOWN node + // + if (nilNode == ANTLR3_FALSE && nCount > 0) + { + ctns->addNavigationNode(ctns, ANTLR3_TOKEN_UP); + } +} + + +// ------------------------------------------------------------------------------ +// Interface functions +// + +/// Reset the input stream to the start of the input nodes. +/// +static void +reset (pANTLR3_COMMON_TREE_NODE_STREAM ctns) +{ + if (ctns->p != -1) + { + ctns->p = 0; + } + ctns->tnstream->istream->lastMarker = 0; + + + // Free and reset the node stack only if this is not + // a rewriter, which is going to reuse the originating + // node streams node stack + // + if (ctns->isRewriter != ANTLR3_TRUE) + { + if (ctns->nodeStack != NULL) + { + ctns->nodeStack->free(ctns->nodeStack); + ctns->nodeStack = antlr3StackNew(INITIAL_CALL_STACK_SIZE); + } + } +} + + +static pANTLR3_BASE_TREE +LB(pANTLR3_TREE_NODE_STREAM tns, ANTLR3_INT32 k) +{ + if ( k==0) + { + return &(tns->ctns->INVALID_NODE.baseTree); + } + + if ( (tns->ctns->p - k) < 0) + { + return &(tns->ctns->INVALID_NODE.baseTree); + } + + return tns->ctns->nodes->get(tns->ctns->nodes, tns->ctns->p - k); +} + +/// Get tree node at current input pointer + i ahead where i=1 is next node. +/// i<0 indicates nodes in the past. So -1 is previous node and -2 is +/// two nodes ago. LT(0) is undefined. For i>=n, return null. +/// Return null for LT(0) and any index that results in an absolute address +/// that is negative. +/// +/// This is analogous to the _LT() method of the TokenStream, but this +/// returns a tree node instead of a token. Makes code gen identical +/// for both parser and tree grammars. :) +/// +static pANTLR3_BASE_TREE +_LT (pANTLR3_TREE_NODE_STREAM tns, ANTLR3_INT32 k) +{ + if (tns->ctns->p == -1) + { + fillBufferRoot(tns->ctns); + } + + if (k < 0) + { + return LB(tns, -k); + } + else if (k == 0) + { + return &(tns->ctns->INVALID_NODE.baseTree); + } + + // k was a legitimate request, + // + if (( tns->ctns->p + k - 1) >= (ANTLR3_INT32)(tns->ctns->nodes->count)) + { + return &(tns->ctns->EOF_NODE.baseTree); + } + + return tns->ctns->nodes->get(tns->ctns->nodes, tns->ctns->p + k - 1); +} + +/// Where is this stream pulling nodes from? This is not the name, but +/// the object that provides node objects. +/// +static pANTLR3_BASE_TREE +getTreeSource (pANTLR3_TREE_NODE_STREAM tns) +{ + return tns->ctns->root; +} + +/// Consume the next node from the input stream +/// +static void +consume (pANTLR3_INT_STREAM is) +{ + pANTLR3_TREE_NODE_STREAM tns; + pANTLR3_COMMON_TREE_NODE_STREAM ctns; + + tns = (pANTLR3_TREE_NODE_STREAM)(is->super); + ctns = tns->ctns; + + if (ctns->p == -1) + { + fillBufferRoot(ctns); + } + ctns->p++; +} + +static ANTLR3_UINT32 +_LA (pANTLR3_INT_STREAM is, ANTLR3_INT32 i) +{ + pANTLR3_TREE_NODE_STREAM tns; + pANTLR3_BASE_TREE t; + + tns = (pANTLR3_TREE_NODE_STREAM)(is->super); + + // Ask LT for the 'token' at that position + // + t = tns->_LT(tns, i); + + if (t == NULL) + { + return ANTLR3_TOKEN_INVALID; + } + + // Token node was there so return the type of it + // + return t->getType(t); +} + +/// Mark the state of the input stream so that we can come back to it +/// after a syntactic predicate and so on. +/// +static ANTLR3_MARKER +mark (pANTLR3_INT_STREAM is) +{ + pANTLR3_TREE_NODE_STREAM tns; + pANTLR3_COMMON_TREE_NODE_STREAM ctns; + + tns = (pANTLR3_TREE_NODE_STREAM)(is->super); + ctns = tns->ctns; + + if (tns->ctns->p == -1) + { + fillBufferRoot(tns->ctns); + } + + // Return the current mark point + // + ctns->tnstream->istream->lastMarker = ctns->tnstream->istream->index(ctns->tnstream->istream); + + return ctns->tnstream->istream->lastMarker; +} + +static void +release (pANTLR3_INT_STREAM is, ANTLR3_MARKER marker) +{ +} + +/// Rewind the current state of the tree walk to the state it +/// was in when mark() was called and it returned marker. Also, +/// wipe out the lookahead which will force reloading a few nodes +/// but it is better than making a copy of the lookahead buffer +/// upon mark(). +/// +static void +rewindMark (pANTLR3_INT_STREAM is, ANTLR3_MARKER marker) +{ + is->seek(is, marker); +} + +static void +rewindLast (pANTLR3_INT_STREAM is) +{ + is->seek(is, is->lastMarker); +} + +/// consume() ahead until we hit index. Can't just jump ahead--must +/// spit out the navigation nodes. +/// +static void +seek (pANTLR3_INT_STREAM is, ANTLR3_MARKER index) +{ + pANTLR3_TREE_NODE_STREAM tns; + pANTLR3_COMMON_TREE_NODE_STREAM ctns; + + tns = (pANTLR3_TREE_NODE_STREAM)(is->super); + ctns = tns->ctns; + + ctns->p = ANTLR3_UINT32_CAST(index); +} + +static ANTLR3_MARKER +tindex (pANTLR3_INT_STREAM is) +{ + pANTLR3_TREE_NODE_STREAM tns; + pANTLR3_COMMON_TREE_NODE_STREAM ctns; + + tns = (pANTLR3_TREE_NODE_STREAM)(is->super); + ctns = tns->ctns; + + return (ANTLR3_MARKER)(ctns->p); +} + +/// Expensive to compute the size of the whole tree while parsing. +/// This method only returns how much input has been seen so far. So +/// after parsing it returns true size. +/// +static ANTLR3_UINT32 +size (pANTLR3_INT_STREAM is) +{ + pANTLR3_TREE_NODE_STREAM tns; + pANTLR3_COMMON_TREE_NODE_STREAM ctns; + + tns = (pANTLR3_TREE_NODE_STREAM)(is->super); + ctns = tns->ctns; + + if (ctns->p == -1) + { + fillBufferRoot(ctns); + } + + return ctns->nodes->size(ctns->nodes); +} + +/// As we flatten the tree, we use UP, DOWN nodes to represent +/// the tree structure. When debugging we need unique nodes +/// so instantiate new ones when uniqueNavigationNodes is true. +/// +static void +addNavigationNode (pANTLR3_COMMON_TREE_NODE_STREAM ctns, ANTLR3_UINT32 ttype) +{ + pANTLR3_BASE_TREE node; + + node = NULL; + + if (ttype == ANTLR3_TOKEN_DOWN) + { + if (ctns->hasUniqueNavigationNodes(ctns) == ANTLR3_TRUE) + { + node = ctns->newDownNode(ctns); + } + else + { + node = &(ctns->DOWN.baseTree); + } + } + else + { + if (ctns->hasUniqueNavigationNodes(ctns) == ANTLR3_TRUE) + { + node = ctns->newUpNode(ctns); + } + else + { + node = &(ctns->UP.baseTree); + } + } + + // Now add the node we decided upon. + // + ctns->nodes->add(ctns->nodes, node, NULL); +} + + +static pANTLR3_BASE_TREE_ADAPTOR +getTreeAdaptor (pANTLR3_TREE_NODE_STREAM tns) +{ + return tns->ctns->adaptor; +} + +static ANTLR3_BOOLEAN +hasUniqueNavigationNodes (pANTLR3_COMMON_TREE_NODE_STREAM ctns) +{ + return ctns->uniqueNavigationNodes; +} + +static void +setUniqueNavigationNodes (pANTLR3_TREE_NODE_STREAM tns, ANTLR3_BOOLEAN uniqueNavigationNodes) +{ + tns->ctns->uniqueNavigationNodes = uniqueNavigationNodes; +} + + +/// Print out the entire tree including DOWN/UP nodes. Uses +/// a recursive walk. Mostly useful for testing as it yields +/// the token types not text. +/// +static pANTLR3_STRING +toString (pANTLR3_TREE_NODE_STREAM tns) +{ + + return tns->toStringSS(tns, tns->ctns->root, NULL); +} + +static pANTLR3_STRING +toStringSS (pANTLR3_TREE_NODE_STREAM tns, pANTLR3_BASE_TREE start, pANTLR3_BASE_TREE stop) +{ + pANTLR3_STRING buf; + + buf = tns->ctns->stringFactory->newRaw(tns->ctns->stringFactory); + + tns->toStringWork(tns, start, stop, buf); + + return buf; +} + +static void +toStringWork (pANTLR3_TREE_NODE_STREAM tns, pANTLR3_BASE_TREE p, pANTLR3_BASE_TREE stop, pANTLR3_STRING buf) +{ + + ANTLR3_UINT32 n; + ANTLR3_UINT32 c; + + if (!p->isNilNode(p) ) + { + pANTLR3_STRING text; + + text = p->toString(p); + + if (text == NULL) + { + text = tns->ctns->stringFactory->newRaw(tns->ctns->stringFactory); + + text->addc (text, ' '); + text->addi (text, p->getType(p)); + } + + buf->appendS(buf, text); + } + + if (p == stop) + { + return; /* Finished */ + } + + n = p->getChildCount(p); + + if (n > 0 && ! p->isNilNode(p) ) + { + buf->addc (buf, ' '); + buf->addi (buf, ANTLR3_TOKEN_DOWN); + } + + for (c = 0; c<n ; c++) + { + pANTLR3_BASE_TREE child; + + child = p->getChild(p, c); + tns->toStringWork(tns, child, stop, buf); + } + + if (n > 0 && ! p->isNilNode(p) ) + { + buf->addc (buf, ' '); + buf->addi (buf, ANTLR3_TOKEN_UP); + } +} + +static ANTLR3_UINT32 +getLookaheadSize (pANTLR3_COMMON_TREE_NODE_STREAM ctns) +{ + return ctns->tail < ctns->head + ? (ctns->lookAheadLength - ctns->head + ctns->tail) + : (ctns->tail - ctns->head); +} + +static pANTLR3_BASE_TREE +newDownNode (pANTLR3_COMMON_TREE_NODE_STREAM ctns) +{ + pANTLR3_COMMON_TREE dNode; + pANTLR3_COMMON_TOKEN token; + + token = antlr3CommonTokenNew(ANTLR3_TOKEN_DOWN); + token->textState = ANTLR3_TEXT_CHARP; + token->tokText.chars = (pANTLR3_UCHAR)"DOWN"; + dNode = antlr3CommonTreeNewFromToken(token); + + return &(dNode->baseTree); +} + +static pANTLR3_BASE_TREE +newUpNode (pANTLR3_COMMON_TREE_NODE_STREAM ctns) +{ + pANTLR3_COMMON_TREE uNode; + pANTLR3_COMMON_TOKEN token; + + token = antlr3CommonTokenNew(ANTLR3_TOKEN_UP); + token->textState = ANTLR3_TEXT_CHARP; + token->tokText.chars = (pANTLR3_UCHAR)"UP"; + uNode = antlr3CommonTreeNewFromToken(token); + + return &(uNode->baseTree); +} + +/// Replace from start to stop child index of parent with t, which might +/// be a list. Number of children may be different +/// after this call. The stream is notified because it is walking the +/// tree and might need to know you are monkey-ing with the underlying +/// tree. Also, it might be able to modify the node stream to avoid +/// re-streaming for future phases. +/// +/// If parent is null, don't do anything; must be at root of overall tree. +/// Can't replace whatever points to the parent externally. Do nothing. +/// +static void +replaceChildren (pANTLR3_TREE_NODE_STREAM tns, pANTLR3_BASE_TREE parent, ANTLR3_INT32 startChildIndex, ANTLR3_INT32 stopChildIndex, pANTLR3_BASE_TREE t) +{ + if (parent != NULL) + { + pANTLR3_BASE_TREE_ADAPTOR adaptor; + pANTLR3_COMMON_TREE_ADAPTOR cta; + + adaptor = tns->getTreeAdaptor(tns); + cta = (pANTLR3_COMMON_TREE_ADAPTOR)(adaptor->super); + + adaptor->replaceChildren(adaptor, parent, startChildIndex, stopChildIndex, t); + } +} + +static pANTLR3_BASE_TREE +get (pANTLR3_TREE_NODE_STREAM tns, ANTLR3_INT32 k) +{ + if (tns->ctns->p == -1) + { + fillBufferRoot(tns->ctns); + } + + return tns->ctns->nodes->get(tns->ctns->nodes, k); +} + +static void +push (pANTLR3_COMMON_TREE_NODE_STREAM ctns, ANTLR3_INT32 index) +{ + ctns->nodeStack->push(ctns->nodeStack, ANTLR3_FUNC_PTR(ctns->p), NULL); // Save current index + ctns->tnstream->istream->seek(ctns->tnstream->istream, index); +} + +static ANTLR3_INT32 +pop (pANTLR3_COMMON_TREE_NODE_STREAM ctns) +{ + ANTLR3_INT32 retVal; + + retVal = ANTLR3_UINT32_CAST(ctns->nodeStack->pop(ctns->nodeStack)); + ctns->tnstream->istream->seek(ctns->tnstream->istream, retVal); + return retVal; +} diff --git a/antlr-3.1.3/runtime/C/src/antlr3convertutf.c b/antlr-3.1.3/runtime/C/src/antlr3convertutf.c new file mode 100644 index 0000000..c6fda21 --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3convertutf.c @@ -0,0 +1,542 @@ +/* + * Copyright 2001-2004 Unicode, Inc. + * + * Disclaimer + * + * This source code is provided as is by Unicode, Inc. No claims are + * made as to fitness for any particular purpose. No warranties of any + * kind are expressed or implied. The recipient agrees to determine + * applicability of information provided. If this file has been + * purchased on magnetic or optical media from Unicode, Inc., the + * sole remedy for any claim will be exchange of defective media + * within 90 days of receipt. + * + * Limitations on Rights to Redistribute This Code + * + * Unicode, Inc. hereby grants the right to freely use the information + * supplied in this file in the creation of products supporting the + * Unicode Standard, and to make copies of this file in any form + * for internal or external distribution as long as this notice + * remains attached. + */ + +/* --------------------------------------------------------------------- + + Conversions between UTF32, UTF-16, and UTF-8. Source code file. + Author: Mark E. Davis, 1994. + Rev History: Rick McGowan, fixes & updates May 2001. + Sept 2001: fixed const & error conditions per + mods suggested by S. Parent & A. Lillich. + June 2002: Tim Dodd added detection and handling of incomplete + source sequences, enhanced error detection, added casts + to eliminate compiler warnings. + July 2003: slight mods to back out aggressive FFFE detection. + Jan 2004: updated switches in from-UTF8 conversions. + Oct 2004: updated to use UNI_MAX_LEGAL_UTF32 in UTF-32 conversions. + + See the header file "ConvertUTF.h" for complete documentation. + +------------------------------------------------------------------------ */ + + +#include "antlr3convertutf.h" + +#ifdef CVTUTF_DEBUG +#include <stdio.h> +#endif + +static const int halfShift = 10; /* used for shifting by 10 bits */ + +static const UTF32 halfBase = 0x0010000UL; +static const UTF32 halfMask = 0x3FFUL; + +#define UNI_SUR_HIGH_START (UTF32)0xD800 +#define UNI_SUR_HIGH_END (UTF32)0xDBFF +#define UNI_SUR_LOW_START (UTF32)0xDC00 +#define UNI_SUR_LOW_END (UTF32)0xDFFF +#define false 0 +#define true 1 + +/* --------------------------------------------------------------------- */ + +ConversionResult ConvertUTF32toUTF16 ( + const UTF32** sourceStart, const UTF32* sourceEnd, + UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags) { + ConversionResult result = conversionOK; + const UTF32* source = *sourceStart; + UTF16* target = *targetStart; + while (source < sourceEnd) { + UTF32 ch; + if (target >= targetEnd) { + result = targetExhausted; break; + } + ch = *source++; + if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */ + /* UTF-16 surrogate values are illegal in UTF-32; 0xffff or 0xfffe are both reserved values */ + if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) { + if (flags == strictConversion) { + --source; /* return to the illegal value itself */ + result = sourceIllegal; + break; + } else { + *target++ = UNI_REPLACEMENT_CHAR; + } + } else { + *target++ = (UTF16)ch; /* normal case */ + } + } else if (ch > UNI_MAX_LEGAL_UTF32) { + if (flags == strictConversion) { + result = sourceIllegal; + } else { + *target++ = UNI_REPLACEMENT_CHAR; + } + } else { + /* target is a character in range 0xFFFF - 0x10FFFF. */ + if (target + 1 >= targetEnd) { + --source; /* Back up source pointer! */ + result = targetExhausted; break; + } + ch -= halfBase; + *target++ = (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START); + *target++ = (UTF16)((ch & halfMask) + UNI_SUR_LOW_START); + } + } + *sourceStart = source; + *targetStart = target; + return result; +} + +/* --------------------------------------------------------------------- */ + +ConversionResult ConvertUTF16toUTF32 ( + const UTF16** sourceStart, const UTF16* sourceEnd, + UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags) { + ConversionResult result = conversionOK; + const UTF16* source = *sourceStart; + UTF32* target = *targetStart; + UTF32 ch, ch2; + while (source < sourceEnd) { + const UTF16* oldSource = source; /* In case we have to back up because of target overflow. */ + ch = *source++; + /* If we have a surrogate pair, convert to UTF32 first. */ + if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END) { + /* If the 16 bits following the high surrogate are in the source buffer... */ + if (source < sourceEnd) { + ch2 = *source; + /* If it's a low surrogate, convert to UTF32. */ + if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) { + ch = ((ch - UNI_SUR_HIGH_START) << halfShift) + + (ch2 - UNI_SUR_LOW_START) + halfBase; + ++source; + } else if (flags == strictConversion) { /* it's an unpaired high surrogate */ + --source; /* return to the illegal value itself */ + result = sourceIllegal; + break; + } + } else { /* We don't have the 16 bits following the high surrogate. */ + --source; /* return to the high surrogate */ + result = sourceExhausted; + break; + } + } else if (flags == strictConversion) { + /* UTF-16 surrogate values are illegal in UTF-32 */ + if (ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END) { + --source; /* return to the illegal value itself */ + result = sourceIllegal; + break; + } + } + if (target >= targetEnd) { + source = oldSource; /* Back up source pointer! */ + result = targetExhausted; break; + } + *target++ = ch; + } + *sourceStart = source; + *targetStart = target; +#ifdef CVTUTF_DEBUG +if (result == sourceIllegal) { + ANTLR3_FPRINTF(stderr, "ConvertUTF16toUTF32 illegal seq 0x%04x,%04x\n", ch, ch2); + fflush(stderr); +} +#endif + return result; +} + +/* --------------------------------------------------------------------- */ + +/* + * Index into the table below with the first byte of a UTF-8 sequence to + * get the number of trailing bytes that are supposed to follow it. + * Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is + * left as-is for anyone who may want to do such conversion, which was + * allowed in earlier algorithms. + */ +static const char trailingBytesForUTF8[256] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 +}; + +/* + * Magic values subtracted from a buffer value during UTF8 conversion. + * This table contains as many values as there might be trailing bytes + * in a UTF-8 sequence. + */ +static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL, + 0x03C82080UL, 0xFA082080UL, 0x82082080UL }; + +/* + * Once the bits are split out into bytes of UTF-8, this is a mask OR-ed + * into the first byte, depending on how many bytes follow. There are + * as many entries in this table as there are UTF-8 sequence types. + * (I.e., one byte sequence, two byte... etc.). Remember that sequencs + * for *legal* UTF-8 will be 4 or fewer bytes total. + */ +static const UTF8 firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; + +/* --------------------------------------------------------------------- */ + +/* The interface converts a whole buffer to avoid function-call overhead. + * Constants have been gathered. Loops & conditionals have been removed as + * much as possible for efficiency, in favor of drop-through switches. + * (See "Note A" at the bottom of the file for equivalent code.) + * If your compiler supports it, the "isLegalUTF8" call can be turned + * into an inline function. + */ + +/* --------------------------------------------------------------------- */ + +ConversionResult ConvertUTF16toUTF8 ( + const UTF16** sourceStart, const UTF16* sourceEnd, + UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags) { + ConversionResult result = conversionOK; + const UTF16* source = *sourceStart; + UTF8* target = *targetStart; + while (source < sourceEnd) { + UTF32 ch; + unsigned short bytesToWrite = 0; + const UTF32 byteMask = 0xBF; + const UTF32 byteMark = 0x80; + const UTF16* oldSource = source; /* In case we have to back up because of target overflow. */ + ch = *source++; + /* If we have a surrogate pair, convert to UTF32 first. */ + if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END) { + /* If the 16 bits following the high surrogate are in the source buffer... */ + if (source < sourceEnd) { + UTF32 ch2 = *source; + /* If it's a low surrogate, convert to UTF32. */ + if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) { + ch = ((ch - UNI_SUR_HIGH_START) << halfShift) + + (ch2 - UNI_SUR_LOW_START) + halfBase; + ++source; + } else if (flags == strictConversion) { /* it's an unpaired high surrogate */ + --source; /* return to the illegal value itself */ + result = sourceIllegal; + break; + } + } else { /* We don't have the 16 bits following the high surrogate. */ + --source; /* return to the high surrogate */ + result = sourceExhausted; + break; + } + } else if (flags == strictConversion) { + /* UTF-16 surrogate values are illegal in UTF-32 */ + if (ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END) { + --source; /* return to the illegal value itself */ + result = sourceIllegal; + break; + } + } + /* Figure out how many bytes the result will require */ + if (ch < (UTF32)0x80) { bytesToWrite = 1; + } else if (ch < (UTF32)0x800) { bytesToWrite = 2; + } else if (ch < (UTF32)0x10000) { bytesToWrite = 3; + } else if (ch < (UTF32)0x110000) { bytesToWrite = 4; + } else { bytesToWrite = 3; + ch = UNI_REPLACEMENT_CHAR; + } + + target += bytesToWrite; + if (target > targetEnd) { + source = oldSource; /* Back up source pointer! */ + target -= bytesToWrite; result = targetExhausted; break; + } + switch (bytesToWrite) { /* note: everything falls through. */ + case 4: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; + case 3: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; + case 2: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; + case 1: *--target = (UTF8)(ch | firstByteMark[bytesToWrite]); + } + target += bytesToWrite; + } + *sourceStart = source; + *targetStart = target; + return result; +} + +/* --------------------------------------------------------------------- */ + +/* + * Utility routine to tell whether a sequence of bytes is legal UTF-8. + * This must be called with the length pre-determined by the first byte. + * If not calling this from ConvertUTF8to*, then the length can be set by: + * length = trailingBytesForUTF8[*source]+1; + * and the sequence is illegal right away if there aren't that many bytes + * available. + * If presented with a length > 4, this returns false. The Unicode + * definition of UTF-8 goes up to 4-byte sequences. + */ + +static ANTLR3_BOOLEAN +isLegalUTF8(const UTF8 *source, int length) { + UTF8 a; + const UTF8 *srcptr = source+length; + switch (length) { + default: return false; + /* Everything else falls through when "true"... */ + case 4: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false; + case 3: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false; + case 2: if ((a = (*--srcptr)) > 0xBF) return false; + + switch (*source) { + /* no fall-through in this inner switch */ + case 0xE0: if (a < 0xA0) return false; break; + case 0xED: if (a > 0x9F) return false; break; + case 0xF0: if (a < 0x90) return false; break; + case 0xF4: if (a > 0x8F) return false; break; + default: if (a < 0x80) return false; + } + + case 1: if (*source >= 0x80 && *source < 0xC2) return false; + } + if (*source > 0xF4) return false; + return true; +} + +/* --------------------------------------------------------------------- */ + +/* + * Exported function to return whether a UTF-8 sequence is legal or not. + * This is not used here; it's just exported. + */ +ANTLR3_BOOLEAN +isLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd) { + int length = trailingBytesForUTF8[*source]+1; + if (source+length > sourceEnd) { + return false; + } + return isLegalUTF8(source, length); +} + +/* --------------------------------------------------------------------- */ + +ConversionResult ConvertUTF8toUTF16 ( + const UTF8** sourceStart, const UTF8* sourceEnd, + UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags) { + ConversionResult result = conversionOK; + const UTF8* source = *sourceStart; + UTF16* target = *targetStart; + while (source < sourceEnd) { + UTF32 ch = 0; + unsigned short extraBytesToRead = trailingBytesForUTF8[*source]; + if (source + extraBytesToRead >= sourceEnd) { + result = sourceExhausted; break; + } + /* Do this check whether lenient or strict */ + if (! isLegalUTF8(source, extraBytesToRead+1)) { + result = sourceIllegal; + break; + } + /* + * The cases all fall through. See "Note A" below. + */ + switch (extraBytesToRead) { + case 5: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */ + case 4: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */ + case 3: ch += *source++; ch <<= 6; + case 2: ch += *source++; ch <<= 6; + case 1: ch += *source++; ch <<= 6; + case 0: ch += *source++; + } + ch -= offsetsFromUTF8[extraBytesToRead]; + + if (target >= targetEnd) { + source -= (extraBytesToRead+1); /* Back up source pointer! */ + result = targetExhausted; break; + } + if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */ + /* UTF-16 surrogate values are illegal in UTF-32 */ + if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) { + if (flags == strictConversion) { + source -= (extraBytesToRead+1); /* return to the illegal value itself */ + result = sourceIllegal; + break; + } else { + *target++ = UNI_REPLACEMENT_CHAR; + } + } else { + *target++ = (UTF16)ch; /* normal case */ + } + } else if (ch > UNI_MAX_UTF16) { + if (flags == strictConversion) { + result = sourceIllegal; + source -= (extraBytesToRead+1); /* return to the start */ + break; /* Bail out; shouldn't continue */ + } else { + *target++ = UNI_REPLACEMENT_CHAR; + } + } else { + /* target is a character in range 0xFFFF - 0x10FFFF. */ + if (target + 1 >= targetEnd) { + source -= (extraBytesToRead+1); /* Back up source pointer! */ + result = targetExhausted; break; + } + ch -= halfBase; + *target++ = (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START); + *target++ = (UTF16)((ch & halfMask) + UNI_SUR_LOW_START); + } + } + *sourceStart = source; + *targetStart = target; + return result; +} + +/* --------------------------------------------------------------------- */ + +ConversionResult ConvertUTF32toUTF8 ( + const UTF32** sourceStart, const UTF32* sourceEnd, + UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags) { + ConversionResult result = conversionOK; + const UTF32* source = *sourceStart; + UTF8* target = *targetStart; + while (source < sourceEnd) { + UTF32 ch; + unsigned short bytesToWrite = 0; + const UTF32 byteMask = 0xBF; + const UTF32 byteMark = 0x80; + ch = *source++; + if (flags == strictConversion ) { + /* UTF-16 surrogate values are illegal in UTF-32 */ + if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) { + --source; /* return to the illegal value itself */ + result = sourceIllegal; + break; + } + } + /* + * Figure out how many bytes the result will require. Turn any + * illegally large UTF32 things (> Plane 17) into replacement chars. + */ + if (ch < (UTF32)0x80) { bytesToWrite = 1; + } else if (ch < (UTF32)0x800) { bytesToWrite = 2; + } else if (ch < (UTF32)0x10000) { bytesToWrite = 3; + } else if (ch <= UNI_MAX_LEGAL_UTF32) { bytesToWrite = 4; + } else { bytesToWrite = 3; + ch = UNI_REPLACEMENT_CHAR; + result = sourceIllegal; + } + + target += bytesToWrite; + if (target > targetEnd) { + --source; /* Back up source pointer! */ + target -= bytesToWrite; result = targetExhausted; break; + } + switch (bytesToWrite) { /* note: everything falls through. */ + case 4: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; + case 3: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; + case 2: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; + case 1: *--target = (UTF8) (ch | firstByteMark[bytesToWrite]); + } + target += bytesToWrite; + } + *sourceStart = source; + *targetStart = target; + return result; +} + +/* --------------------------------------------------------------------- */ + +ConversionResult ConvertUTF8toUTF32 ( + const UTF8** sourceStart, const UTF8* sourceEnd, + UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags) { + ConversionResult result = conversionOK; + const UTF8* source = *sourceStart; + UTF32* target = *targetStart; + while (source < sourceEnd) { + UTF32 ch = 0; + unsigned short extraBytesToRead = trailingBytesForUTF8[*source]; + if (source + extraBytesToRead >= sourceEnd) { + result = sourceExhausted; break; + } + /* Do this check whether lenient or strict */ + if (! isLegalUTF8(source, extraBytesToRead+1)) { + result = sourceIllegal; + break; + } + /* + * The cases all fall through. See "Note A" below. + */ + switch (extraBytesToRead) { + case 5: ch += *source++; ch <<= 6; + case 4: ch += *source++; ch <<= 6; + case 3: ch += *source++; ch <<= 6; + case 2: ch += *source++; ch <<= 6; + case 1: ch += *source++; ch <<= 6; + case 0: ch += *source++; + } + ch -= offsetsFromUTF8[extraBytesToRead]; + + if (target >= targetEnd) { + source -= (extraBytesToRead+1); /* Back up the source pointer! */ + result = targetExhausted; break; + } + if (ch <= UNI_MAX_LEGAL_UTF32) { + /* + * UTF-16 surrogate values are illegal in UTF-32, and anything + * over Plane 17 (> 0x10FFFF) is illegal. + */ + if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) { + if (flags == strictConversion) { + source -= (extraBytesToRead+1); /* return to the illegal value itself */ + result = sourceIllegal; + break; + } else { + *target++ = UNI_REPLACEMENT_CHAR; + } + } else { + *target++ = ch; + } + } else { /* i.e., ch > UNI_MAX_LEGAL_UTF32 */ + result = sourceIllegal; + *target++ = UNI_REPLACEMENT_CHAR; + } + } + *sourceStart = source; + *targetStart = target; + return result; +} + +/* --------------------------------------------------------------------- + + Note A. + The fall-through switches in UTF-8 reading code save a + temp variable, some decrements & conditionals. The switches + are equivalent to the following loop: + { + int tmpBytesToRead = extraBytesToRead+1; + do { + ch += *source++; + --tmpBytesToRead; + if (tmpBytesToRead) ch <<= 6; + } while (tmpBytesToRead > 0); + } + In UTF-8 writing code, the switches on "bytesToWrite" are + similarly unrolled loops. + + --------------------------------------------------------------------- */ diff --git a/antlr-3.1.3/runtime/C/src/antlr3cyclicdfa.c b/antlr-3.1.3/runtime/C/src/antlr3cyclicdfa.c new file mode 100644 index 0000000..82e7222 --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3cyclicdfa.c @@ -0,0 +1,204 @@ +/** Support functions for traversing cyclic DFA states as laid + * out in static initialized structures by the code generator. + * + * A DFA implemented as a set of transition tables. + * + * Any state that has a semantic predicate edge is special; those states + * are generated with if-then-else structures in a ->specialStateTransition() + * which is generated by cyclicDFA template. + * + * There are at most 32767 states (16-bit signed short). + * Could get away with byte sometimes but would have to generate different + * types and the simulation code too. For a point of reference, the Java + * lexer's Tokens rule DFA has 326 states roughly. + */ + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3defs.h> +#include <antlr3cyclicdfa.h> + +#ifdef ANTLR3_WINDOWS +#pragma warning( disable : 4100 ) +#endif + +static void +noViableAlt(pANTLR3_BASE_RECOGNIZER rec, pANTLR3_CYCLIC_DFA cdfa, ANTLR3_UINT32 s) +{ + // In backtracking mode, we just set the failed flag so that the + // alt can just exit right now. If we are parsing though, then + // we want the exception to be raised. + // + if (rec->state->backtracking > 0) + { + rec->state->failed = ANTLR3_TRUE; + } + else + { + rec->exConstruct(rec); + rec->state->exception->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION; + rec->state->exception->message = cdfa->description; + rec->state->exception->decisionNum = cdfa->decisionNumber; + rec->state->exception->state = s; + } +} + +/** From the input stream, predict what alternative will succeed + * using this DFA (representing the covering regular approximation + * to the underlying CFL). Return an alternative number 1..n. Throw + * an exception upon error. + */ +ANTLR3_API ANTLR3_INT32 +antlr3dfapredict (void * ctx, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_INT_STREAM is, pANTLR3_CYCLIC_DFA cdfa) +{ + ANTLR3_MARKER mark; + ANTLR3_INT32 s; + ANTLR3_INT32 specialState; + ANTLR3_INT32 c; + + mark = is->mark(is); /* Store where we are right now */ + s = 0; /* Always start with state 0 */ + + for (;;) + { + /* Pick out any special state entry for this state + */ + specialState = cdfa->special[s]; + + /* Transition the special state and consume an input token + */ + if (specialState >= 0) + { + s = cdfa->specialStateTransition(ctx, rec, is, cdfa, specialState); + + // Error? + // + if (s<0) + { + // If the predicate/rule raised an exception then we leave it + // in tact, else we have an NVA. + // + if (rec->state->error != ANTLR3_TRUE) + { + noViableAlt(rec,cdfa, s); + } + is->rewind(is, mark); + return 0; + } + is->consume(is); + continue; + } + + /* Accept state? + */ + if (cdfa->accept[s] >= 1) + { + is->rewind(is, mark); + return cdfa->accept[s]; + } + + /* Look for a normal transition state based upon the input token element + */ + c = is->_LA(is, 1); + + /* Check against min and max for this state + */ + if (c>= cdfa->min[s] && c <= cdfa->max[s]) + { + ANTLR3_INT32 snext; + + /* What is the next state? + */ + snext = cdfa->transition[s][c - cdfa->min[s]]; + + if (snext < 0) + { + /* Was in range but not a normal transition + * must check EOT, which is like the else clause. + * eot[s]>=0 indicates that an EOT edge goes to another + * state. + */ + if (cdfa->eot[s] >= 0) + { + s = cdfa->eot[s]; + is->consume(is); + continue; + } + noViableAlt(rec,cdfa, s); + is->rewind(is, mark); + return 0; + } + + /* New current state - move to it + */ + s = snext; + is->consume(is); + continue; + } + /* EOT Transition? + */ + if (cdfa->eot[s] >= 0) + { + s = cdfa->eot[s]; + is->consume(is); + continue; + } + /* EOF transition to accept state? + */ + if ( c == ANTLR3_TOKEN_EOF && cdfa->eof[s] >= 0) + { + is->rewind(is, mark); + return cdfa->accept[cdfa->eof[s]]; + } + + /* No alt, so bomb + */ + noViableAlt(rec, cdfa, s); + is->rewind(is, mark); + return 0; + } + +} + +/** Default special state implementation + */ +ANTLR3_API ANTLR3_INT32 +antlr3dfaspecialStateTransition (void * ctx, pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM is, pANTLR3_CYCLIC_DFA dfa, ANTLR3_INT32 s) +{ + return -1; +} + +/* Default special transition implementation + */ +ANTLR3_API ANTLR3_INT32 +antlr3dfaspecialTransition (void * ctx, pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM is, pANTLR3_CYCLIC_DFA dfa, ANTLR3_INT32 s) +{ + return 0; +} diff --git a/antlr-3.1.3/runtime/C/src/antlr3debughandlers.c b/antlr-3.1.3/runtime/C/src/antlr3debughandlers.c new file mode 100644 index 0000000..14ca4bf --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3debughandlers.c @@ -0,0 +1,1047 @@ +/// \file +/// Provides the debugging functions invoked by a recognizer +/// built using the debug generator mode of the antlr tool. +/// See antlr3debugeventlistener.h for documentation. +/// + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3.h> + +// Not everyone wishes to include the debugger stuff in their final deployment because +// it will then rely on being linked with the socket libraries. Hence if the programmer turns +// off the debugging, we do some dummy stuff that satifies compilers etc but means there is +// no debugger and no reliance on the socket librarires. If you set this flag, then using the -debug +// option to generate your code will produce code that just crashes, but then I presme you are smart +// enough to realize that building the libraries without debugger support means you can't call the +// debugger ;-) +// +#ifdef ANTLR3_NODEBUGGER +ANTLR3_API pANTLR3_DEBUG_EVENT_LISTENER +antlr3DebugListenerNew() +{ + ANTLR3_PRINTF("C runtime was compiled without debugger support. This program will crash!!"); + return NULL; +} +#else + +static ANTLR3_BOOLEAN handshake (pANTLR3_DEBUG_EVENT_LISTENER delboy); +static void enterRule (pANTLR3_DEBUG_EVENT_LISTENER delboy, const char * grammarFileName, const char * ruleName); +static void enterAlt (pANTLR3_DEBUG_EVENT_LISTENER delboy, int alt); +static void exitRule (pANTLR3_DEBUG_EVENT_LISTENER delboy, const char * grammarFileName, const char * ruleName); +static void enterSubRule (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber); +static void exitSubRule (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber); +static void enterDecision (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber); +static void exitDecision (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber); +static void consumeToken (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_COMMON_TOKEN t); +static void consumeHiddenToken (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_COMMON_TOKEN t); +static void LT (pANTLR3_DEBUG_EVENT_LISTENER delboy, int i, pANTLR3_COMMON_TOKEN t); +static void mark (pANTLR3_DEBUG_EVENT_LISTENER delboy, ANTLR3_MARKER marker); +static void rewindMark (pANTLR3_DEBUG_EVENT_LISTENER delboy, ANTLR3_MARKER marker); +static void rewindLast (pANTLR3_DEBUG_EVENT_LISTENER delboy); +static void beginBacktrack (pANTLR3_DEBUG_EVENT_LISTENER delboy, int level); +static void endBacktrack (pANTLR3_DEBUG_EVENT_LISTENER delboy, int level, ANTLR3_BOOLEAN successful); +static void location (pANTLR3_DEBUG_EVENT_LISTENER delboy, int line, int pos); +static void recognitionException (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_EXCEPTION e); +static void beginResync (pANTLR3_DEBUG_EVENT_LISTENER delboy); +static void endResync (pANTLR3_DEBUG_EVENT_LISTENER delboy); +static void semanticPredicate (pANTLR3_DEBUG_EVENT_LISTENER delboy, ANTLR3_BOOLEAN result, const char * predicate); +static void commence (pANTLR3_DEBUG_EVENT_LISTENER delboy); +static void terminate (pANTLR3_DEBUG_EVENT_LISTENER delboy); +static void consumeNode (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t); +static void LTT (pANTLR3_DEBUG_EVENT_LISTENER delboy, int i, pANTLR3_BASE_TREE t); +static void nilNode (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t); +static void errorNode (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t); +static void createNode (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t); +static void createNodeTok (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE node, pANTLR3_COMMON_TOKEN token); +static void becomeRoot (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE newRoot, pANTLR3_BASE_TREE oldRoot); +static void addChild (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE root, pANTLR3_BASE_TREE child); +static void setTokenBoundaries (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t, ANTLR3_MARKER tokenStartIndex, ANTLR3_MARKER tokenStopIndex); +static void ack (pANTLR3_DEBUG_EVENT_LISTENER delboy); + +/// Create and initialize a new debug event listener that can be connected to +/// by ANTLRWorks and any other debugger via a socket. +/// +ANTLR3_API pANTLR3_DEBUG_EVENT_LISTENER +antlr3DebugListenerNew() +{ + pANTLR3_DEBUG_EVENT_LISTENER delboy; + + delboy = ANTLR3_CALLOC(1, sizeof(ANTLR3_DEBUG_EVENT_LISTENER)); + + if (delboy == NULL) + { + return NULL; + } + + // Initialize the API + // + delboy->addChild = addChild; + delboy->becomeRoot = becomeRoot; + delboy->beginBacktrack = beginBacktrack; + delboy->beginResync = beginResync; + delboy->commence = commence; + delboy->consumeHiddenToken = consumeHiddenToken; + delboy->consumeNode = consumeNode; + delboy->consumeToken = consumeToken; + delboy->createNode = createNode; + delboy->createNodeTok = createNodeTok; + delboy->endBacktrack = endBacktrack; + delboy->endResync = endResync; + delboy->enterAlt = enterAlt; + delboy->enterDecision = enterDecision; + delboy->enterRule = enterRule; + delboy->enterSubRule = enterSubRule; + delboy->exitDecision = exitDecision; + delboy->exitRule = exitRule; + delboy->exitSubRule = exitSubRule; + delboy->handshake = handshake; + delboy->location = location; + delboy->LT = LT; + delboy->LTT = LTT; + delboy->mark = mark; + delboy->nilNode = nilNode; + delboy->recognitionException = recognitionException; + delboy->rewind = rewindMark; + delboy->rewindLast = rewindLast; + delboy->semanticPredicate = semanticPredicate; + delboy->setTokenBoundaries = setTokenBoundaries; + delboy->terminate = terminate; + delboy->errorNode = errorNode; + + delboy->PROTOCOL_VERSION = 2; // ANTLR 3.1 is at protocol version 2 + + delboy->port = DEFAULT_DEBUGGER_PORT; + + return delboy; +} + +pANTLR3_DEBUG_EVENT_LISTENER +antlr3DebugListenerNewPort(ANTLR3_UINT32 port) +{ + pANTLR3_DEBUG_EVENT_LISTENER delboy; + + delboy = antlr3DebugListenerNew(); + + if (delboy != NULL) + { + delboy->port = port; + } + + return delboy; +} + +//-------------------------------------------------------------------------------- +// Support functions for sending stuff over the socket interface +// +static int +sockSend(SOCKET sock, const char * ptr, int len) +{ + int sent; + int thisSend; + + sent = 0; + + while (sent < len) + { + // Send as many bytes as we can + // + thisSend = send(sock, ptr, len - sent, 0); + + // Check for errors and tell the user if we got one + // + if (thisSend == -1) + { + return ANTLR3_FALSE; + } + + // Increment our offset by how many we were able to send + // + ptr += thisSend; + sent += thisSend; + } + return ANTLR3_TRUE; +} + +static ANTLR3_BOOLEAN +handshake (pANTLR3_DEBUG_EVENT_LISTENER delboy) +{ + /// Connection structure with which to wait and accept a connection from + /// a debugger. + /// + SOCKET serverSocket; + + // Connection structures to deal with the client after we accept the connection + // and the server while we accept a connection. + // + ANTLR3_SOCKADDRT client; + ANTLR3_SOCKADDRT server; + + // Buffer to construct our message in + // + char message[256]; + + // Specifies the length of the connection structure to accept() + // Windows use int, everyone else uses size_t + // + ANTLR3_SALENT sockaddr_len; + + // Option holder for setsockopt() + // + int optVal; + + if (delboy->initialized == ANTLR3_FALSE) + { + // Windows requires us to initialize WinSock. + // +#ifdef ANTLR3_WINDOWS + { + WORD wVersionRequested; + WSADATA wsaData; + int err; // Return code from WSAStartup + + // We must initialise the Windows socket system when the DLL is loaded. + // We are asking for Winsock 1.1 or better as we don't need anything + // too complicated for this. + // + wVersionRequested = MAKEWORD( 1, 1); + + err = WSAStartup( wVersionRequested, &wsaData ); + + if ( err != 0 ) + { + // Tell the user that we could not find a usable + // WinSock DLL + // + return FALSE; + } + } +#endif + + // Create the server socket, we are the server because we just wait until + // a debugger connects to the port we are listening on. + // + serverSocket = socket(AF_INET, SOCK_STREAM, 0); + + if (serverSocket == INVALID_SOCKET) + { + return ANTLR3_FALSE; + } + + // Set the listening port + // + server.sin_port = htons((unsigned short)delboy->port); + server.sin_family = AF_INET; + server.sin_addr.s_addr = htonl (INADDR_ANY); + + // We could allow a rebind on the same addr/port pair I suppose, but + // I imagine that most people will just want to start debugging one parser at once. + // Maybe change this at some point, but rejecting the bind at this point will ensure + // that people realize they have left something running in the background. + // + if (bind(serverSocket, (pANTLR3_SOCKADDRC)&server, sizeof(server)) == -1) + { + return ANTLR3_FALSE; + } + + // We have bound the socket to the port and address so we now ask the TCP subsystem + // to start listening on that address/port + // + if (listen(serverSocket, 1) == -1) + { + // Some error, just fail + // + return ANTLR3_FALSE; + } + + // Now we can try to accept a connection on the port + // + sockaddr_len = sizeof(client); + delboy->socket = accept(serverSocket, (pANTLR3_SOCKADDRC)&client, &sockaddr_len); + + // Having accepted a connection, we can stop listening and close down the socket + // + shutdown (serverSocket, 0x02); + ANTLR3_CLOSESOCKET (serverSocket); + + if (delboy->socket == -1) + { + return ANTLR3_FALSE; + } + + // Disable Nagle as this is essentially a chat exchange + // + optVal = 1; + setsockopt(delboy->socket, SOL_SOCKET, TCP_NODELAY, (const void *)&optVal, sizeof(optVal)); + + } + + // We now have a good socket connection with the debugging client, so we + // send it the protocol version we are using and what the name of the grammar + // is that we represent. + // + sprintf (message, "ANTLR %d\n", delboy->PROTOCOL_VERSION); + sockSend (delboy->socket, message, (int)strlen(message)); + sprintf (message, "grammar \"%s\n", delboy->grammarFileName->chars); + sockSend (delboy->socket, message, (int)strlen(message)); + ack (delboy); + + delboy->initialized = ANTLR3_TRUE; + + return ANTLR3_TRUE; +} + +// Send the supplied text and wait for an ack from the client +static void +transmit(pANTLR3_DEBUG_EVENT_LISTENER delboy, const char * ptr) +{ + sockSend(delboy->socket, ptr, (int)strlen(ptr)); + ack(delboy); +} + +static void +ack (pANTLR3_DEBUG_EVENT_LISTENER delboy) +{ + // Local buffer to read the next character in to + // + char buffer; + int rCount; + + // Ack terminates in a line feed, so we just wait for + // one of those. Speed is not of the essence so we don't need + // to buffer the input or anything. + // + do + { + rCount = recv(delboy->socket, &buffer, 1, 0); + } + while (rCount == 1 && buffer != '\n'); + + // If the socket ws closed on us, then we will get an error or + // (with a graceful close), 0. We can assume the the debugger stopped for some reason + // (such as Java crashing again). Therefore we just exit the program + // completely if we don't get the terminating '\n' for the ack. + // + if (rCount != 1) + { + ANTLR3_PRINTF("Exiting debugger as remote client closed the socket\n"); + ANTLR3_PRINTF("Received char count was %d, and last char received was %02X\n", rCount, buffer); + exit(0); + } +} + +// Given a buffer string and a source string, serialize the +// text, escaping any newlines and linefeeds. We have no need +// for speed here, this is the debugger. +// +void +serializeText(pANTLR3_STRING buffer, pANTLR3_STRING text) +{ + ANTLR3_UINT32 c; + ANTLR3_UCHAR character; + + // strings lead in with a " + // + buffer->append(buffer, " \""); + + if (text == NULL) + { + return; + } + + // Now we replace linefeeds, newlines and the escape + // leadin character '%' with their hex equivalents + // prefixed by '%' + // + for (c = 0; c < text->len; c++) + { + switch (character = text->charAt(text, c)) + { + case '\n': + + buffer->append(buffer, "%0A"); + break; + + case '\r': + + buffer->append(buffer, "%0D"); + break; + + case '\\': + + buffer->append(buffer, "%25"); + break; + + // Other characters: The Song Remains the Same. + // + default: + + buffer->addc(buffer, character); + break; + } + } +} + +// Given a token, create a stringified version of it, in the supplied +// buffer. We create a string for this in the debug 'object', if there +// is not one there already, and then reuse it here if asked to do this +// again. +// +pANTLR3_STRING +serializeToken(pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_COMMON_TOKEN t) +{ + // Do we already have a serialization buffer? + // + if (delboy->tokenString == NULL) + { + // No, so create one, using the string factory that + // the grammar name used, which is guaranteed to exist. + // 64 bytes will do us here for starters. + // + delboy->tokenString = delboy->grammarFileName->factory->newSize(delboy->grammarFileName->factory, 64); + } + + // Empty string + // + delboy->tokenString->set(delboy->tokenString, (const char *)""); + + // Now we serialize the elements of the token.Note that the debugger only + // uses 32 bits. + // + delboy->tokenString->addi(delboy->tokenString, (ANTLR3_INT32)(t->getTokenIndex(t))); + delboy->tokenString->addc(delboy->tokenString, ' '); + delboy->tokenString->addi(delboy->tokenString, (ANTLR3_INT32)(t->getType(t))); + delboy->tokenString->addc(delboy->tokenString, ' '); + delboy->tokenString->addi(delboy->tokenString, (ANTLR3_INT32)(t->getChannel(t))); + delboy->tokenString->addc(delboy->tokenString, ' '); + delboy->tokenString->addi(delboy->tokenString, (ANTLR3_INT32)(t->getLine(t))); + delboy->tokenString->addc(delboy->tokenString, ' '); + delboy->tokenString->addi(delboy->tokenString, (ANTLR3_INT32)(t->getCharPositionInLine(t))); + + // Now send the text that the token represents. + // + serializeText(delboy->tokenString, t->getText(t)); + + // Finally, as the debugger is a Java program it will expect to get UTF-8 + // encoded strings. We don't use UTF-8 internally to the C runtime, so we + // must force encode it. We have a method to do this in the string class, but + // it returns malloc space that we must free afterwards. + // + return delboy->tokenString->toUTF8(delboy->tokenString); +} + +// Given a tree node, create a stringified version of it in the supplied +// buffer. +// +pANTLR3_STRING +serializeNode(pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE node) +{ + pANTLR3_COMMON_TOKEN token; + + + // Do we already have a serialization buffer? + // + if (delboy->tokenString == NULL) + { + // No, so create one, using the string factory that + // the grammar name used, which is guaranteed to exist. + // 64 bytes will do us here for starters. + // + delboy->tokenString = delboy->grammarFileName->factory->newSize(delboy->grammarFileName->factory, 64); + } + + // Empty string + // + delboy->tokenString->set(delboy->tokenString, (const char *)""); + + // Protect against bugs/errors etc + // + if (node == NULL) + { + return delboy->tokenString; + } + + // Now we serialize the elements of the node.Note that the debugger only + // uses 32 bits. + // + delboy->tokenString->addc(delboy->tokenString, ' '); + + // Adaptor ID + // + delboy->tokenString->addi(delboy->tokenString, delboy->adaptor->getUniqueID(delboy->adaptor, node)); + delboy->tokenString->addc(delboy->tokenString, ' '); + + // Type of the current token (which may be imaginary) + // + delboy->tokenString->addi(delboy->tokenString, delboy->adaptor->getType(delboy->adaptor, node)); + + // See if we have an actual token or just an imaginary + // + token = delboy->adaptor->getToken(delboy->adaptor, node); + + delboy->tokenString->addc(delboy->tokenString, ' '); + if (token != NULL) + { + // Real token + // + delboy->tokenString->addi(delboy->tokenString, (ANTLR3_INT32)(token->getLine(token))); + delboy->tokenString->addc(delboy->tokenString, ' '); + delboy->tokenString->addi(delboy->tokenString, (ANTLR3_INT32)(token->getCharPositionInLine(token))); + } + else + { + // Imaginary tokens have no location + // + delboy->tokenString->addi(delboy->tokenString, -1); + delboy->tokenString->addc(delboy->tokenString, ' '); + delboy->tokenString->addi(delboy->tokenString, -1); + } + + // Start Index of the node + // + delboy->tokenString->addc(delboy->tokenString, ' '); + delboy->tokenString->addi(delboy->tokenString, (ANTLR3_UINT32)(delboy->adaptor->getTokenStartIndex(delboy->adaptor, node))); + + // Now send the text that the node represents. + // + serializeText(delboy->tokenString, delboy->adaptor->getText(delboy->adaptor, node)); + + // Finally, as the debugger is a Java program it will expect to get UTF-8 + // encoded strings. We don't use UTF-8 internally to the C runtime, so we + // must force encode it. We have a method to do this in the string class, but + // there is no utf8 string implementation as of yet + // + return delboy->tokenString->toUTF8(delboy->tokenString); +} + +//------------------------------------------------------------------------------------------------------------------ +// EVENTS +// +static void +enterRule (pANTLR3_DEBUG_EVENT_LISTENER delboy, const char * grammarFileName, const char * ruleName) +{ + char buffer[512]; + + // Create the message (speed is not of the essence) + // + sprintf(buffer, "enterRule %s %s\n", grammarFileName, ruleName); + transmit(delboy, buffer); +} + +static void +enterAlt (pANTLR3_DEBUG_EVENT_LISTENER delboy, int alt) +{ + char buffer[512]; + + // Create the message (speed is not of the essence) + // + sprintf(buffer, "enterAlt %d\n", alt); + transmit(delboy, buffer); +} + +static void +exitRule (pANTLR3_DEBUG_EVENT_LISTENER delboy, const char * grammarFileName, const char * ruleName) +{ + char buffer[512]; + + // Create the message (speed is not of the essence) + // + sprintf(buffer, "enterRule %s %s\n", grammarFileName, ruleName); + transmit(delboy, buffer); +} + +static void +enterSubRule (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber) +{ + char buffer[512]; + + // Create the message (speed is not of the essence) + // + sprintf(buffer, "enterSubRule %d\n", decisionNumber); + transmit(delboy, buffer); +} + +static void +exitSubRule (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber) +{ + char buffer[512]; + + // Create the message (speed is not of the essence) + // + sprintf(buffer, "exitSubRule %d\n", decisionNumber); + transmit(delboy, buffer); +} + +static void +enterDecision (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber) +{ + char buffer[512]; + + // Create the message (speed is not of the essence) + // + sprintf(buffer, "enterDecision %d\n", decisionNumber); + transmit(delboy, buffer); + +} + +static void +exitDecision (pANTLR3_DEBUG_EVENT_LISTENER delboy, int decisionNumber) +{ + char buffer[512]; + + // Create the message (speed is not of the essence) + // + sprintf(buffer, "exitDecision %d\n", decisionNumber); + transmit(delboy, buffer); +} + +static void +consumeToken (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_COMMON_TOKEN t) +{ + pANTLR3_STRING msg; + + // Create the serialized token + // + msg = serializeToken(delboy, t); + + // Insert the debug event indicator + // + msg->insert8(msg, 0, "consumeToken "); + + msg->addc(msg, '\n'); + + // Transmit the message and wait for ack + // + transmit(delboy, (const char *)(msg->chars)); +} + +static void +consumeHiddenToken (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_COMMON_TOKEN t) +{ + pANTLR3_STRING msg; + + // Create the serialized token + // + msg = serializeToken(delboy, t); + + // Insert the debug event indicator + // + msg->insert8(msg, 0, "consumeHiddenToken "); + + msg->addc(msg, '\n'); + + // Transmit the message and wait for ack + // + transmit(delboy, (const char *)(msg->chars)); +} + +// Looking at the next token event. +// +static void +LT (pANTLR3_DEBUG_EVENT_LISTENER delboy, int i, pANTLR3_COMMON_TOKEN t) +{ + pANTLR3_STRING msg; + + if (t != NULL) + { + // Create the serialized token + // + msg = serializeToken(delboy, t); + + // Insert the index parameter + // + msg->insert8(msg, 0, " "); + msg->inserti(msg, 0, i); + + // Insert the debug event indicator + // + msg->insert8(msg, 0, "LT "); + + msg->addc(msg, '\n'); + + // Transmit the message and wait for ack + // + transmit(delboy, (const char *)(msg->chars)); + } +} + +static void +mark (pANTLR3_DEBUG_EVENT_LISTENER delboy, ANTLR3_MARKER marker) +{ + char buffer[128]; + + sprintf(buffer, "mark %d\n", (ANTLR3_UINT32)(marker & 0xFFFFFFFF)); + + // Transmit the message and wait for ack + // + transmit(delboy, buffer); +} + +static void +rewindMark (pANTLR3_DEBUG_EVENT_LISTENER delboy, ANTLR3_MARKER marker) +{ + char buffer[128]; + + sprintf(buffer, "rewind %d\n", (ANTLR3_UINT32)(marker & 0xFFFFFFFF)); + + // Transmit the message and wait for ack + // + transmit(delboy, buffer); + +} + +static void +rewindLast (pANTLR3_DEBUG_EVENT_LISTENER delboy) +{ + transmit(delboy, (const char *)"rewind\n"); +} + +static void +beginBacktrack (pANTLR3_DEBUG_EVENT_LISTENER delboy, int level) +{ + char buffer[128]; + + sprintf(buffer, "beginBacktrack %d\n", (ANTLR3_UINT32)(level & 0xFFFFFFFF)); + + // Transmit the message and wait for ack + // + transmit(delboy, buffer); +} + +static void +endBacktrack (pANTLR3_DEBUG_EVENT_LISTENER delboy, int level, ANTLR3_BOOLEAN successful) +{ + char buffer[128]; + + sprintf(buffer, "endBacktrack %d %d\n", level, successful); + + // Transmit the message and wait for ack + // + transmit(delboy, buffer); +} + +static void +location (pANTLR3_DEBUG_EVENT_LISTENER delboy, int line, int pos) +{ + char buffer[128]; + + sprintf(buffer, "location %d %d\n", line, pos); + + // Transmit the message and wait for ack + // + transmit(delboy, buffer); +} + +static void +recognitionException (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_EXCEPTION e) +{ + char buffer[256]; + + sprintf(buffer, "exception %s %d %d %d\n", (char *)(e->name), (ANTLR3_INT32)(e->index), e->line, e->charPositionInLine); + + // Transmit the message and wait for ack + // + transmit(delboy, buffer); +} + +static void +beginResync (pANTLR3_DEBUG_EVENT_LISTENER delboy) +{ + transmit(delboy, (const char *)"beginResync\n"); +} + +static void +endResync (pANTLR3_DEBUG_EVENT_LISTENER delboy) +{ + transmit(delboy, (const char *)"endResync\n"); +} + +static void +semanticPredicate (pANTLR3_DEBUG_EVENT_LISTENER delboy, ANTLR3_BOOLEAN result, const char * predicate) +{ + unsigned char * buffer; + unsigned char * out; + + if (predicate != NULL) + { + buffer = (unsigned char *)ANTLR3_MALLOC(64 + 2*strlen(predicate)); + + if (buffer != NULL) + { + out = buffer + sprintf((char *)buffer, "semanticPredicate %s ", result == ANTLR3_TRUE ? "true" : "false"); + + while (*predicate != '\0') + { + switch(*predicate) + { + case '\n': + + *out++ = '%'; + *out++ = '0'; + *out++ = 'A'; + break; + + case '\r': + + *out++ = '%'; + *out++ = '0'; + *out++ = 'D'; + break; + + case '%': + + *out++ = '%'; + *out++ = '0'; + *out++ = 'D'; + break; + + + default: + + *out++ = *predicate; + break; + } + + predicate++; + } + *out++ = '\n'; + *out++ = '\0'; + } + + // Send it and wait for the ack + // + transmit(delboy, (const char *)buffer); + } +} + +#ifdef ANTLR3_WINDOWS +#pragma warning (push) +#pragma warning (disable : 4100) +#endif + +static void +commence (pANTLR3_DEBUG_EVENT_LISTENER delboy) +{ + // Nothing to see here + // +} + +#ifdef ANTLR3_WINDOWS +#pragma warning (pop) +#endif + +static void +terminate (pANTLR3_DEBUG_EVENT_LISTENER delboy) +{ + // Terminate sequence + // + sockSend(delboy->socket, "terminate\n", 10); // Send out the command +} + +//---------------------------------------------------------------- +// Tree parsing events +// +static void +consumeNode (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t) +{ + pANTLR3_STRING buffer; + + buffer = serializeNode (delboy, t); + + // Now prepend the command + // + buffer->insert8 (buffer, 0, "consumeNode "); + buffer->addc (buffer, '\n'); + + // Send to the debugger and wait for the ack + // + transmit (delboy, (const char *)(delboy->tokenString->toUTF8(delboy->tokenString)->chars)); +} + +static void +LTT (pANTLR3_DEBUG_EVENT_LISTENER delboy, int i, pANTLR3_BASE_TREE t) +{ + pANTLR3_STRING buffer; + + buffer = serializeNode (delboy, t); + + // Now prepend the command + // + buffer->insert8 (buffer, 0, " "); + buffer->inserti (buffer, 0, i); + buffer->insert8 (buffer, 0, "LN "); + buffer->addc (buffer, '\n'); + + // Send to the debugger and wait for the ack + // + transmit (delboy, (const char *)(delboy->tokenString->toUTF8(delboy->tokenString)->chars)); +} + +static void +nilNode (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t) +{ + char buffer[128]; + sprintf(buffer, "nilNode %d\n", delboy->adaptor->getUniqueID(delboy->adaptor, t)); + transmit(delboy, buffer); +} + +static void +createNode (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t) +{ + // Do we already have a serialization buffer? + // + if (delboy->tokenString == NULL) + { + // No, so create one, using the string factory that + // the grammar name used, which is guaranteed to exist. + // 64 bytes will do us here for starters. + // + delboy->tokenString = delboy->grammarFileName->factory->newSize(delboy->grammarFileName->factory, 64); + } + + // Empty string + // + delboy->tokenString->set8(delboy->tokenString, (const char *)"createNodeFromTokenElements "); + + // Now we serialize the elements of the node.Note that the debugger only + // uses 32 bits. + // + // Adaptor ID + // + delboy->tokenString->addi(delboy->tokenString, delboy->adaptor->getUniqueID(delboy->adaptor, t)); + delboy->tokenString->addc(delboy->tokenString, ' '); + + // Type of the current token (which may be imaginary) + // + delboy->tokenString->addi(delboy->tokenString, delboy->adaptor->getType(delboy->adaptor, t)); + + // The text that this node represents + // + serializeText(delboy->tokenString, delboy->adaptor->getText(delboy->adaptor, t)); + delboy->tokenString->addc(delboy->tokenString, '\n'); + + // Finally, as the debugger is a Java program it will expect to get UTF-8 + // encoded strings. We don't use UTF-8 internally to the C runtime, so we + // must force encode it. We have a method to do this in the string class, but + // there is no utf8 string implementation as of yet + // + transmit(delboy, (const char *)(delboy->tokenString->toUTF8(delboy->tokenString)->chars)); + +} +static void +errorNode (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t) +{ + // Do we already have a serialization buffer? + // + if (delboy->tokenString == NULL) + { + // No, so create one, using the string factory that + // the grammar name used, which is guaranteed to exist. + // 64 bytes will do us here for starters. + // + delboy->tokenString = delboy->grammarFileName->factory->newSize(delboy->grammarFileName->factory, 64); + } + + // Empty string + // + delboy->tokenString->set8(delboy->tokenString, (const char *)"errorNode "); + + // Now we serialize the elements of the node.Note that the debugger only + // uses 32 bits. + // + // Adaptor ID + // + delboy->tokenString->addi(delboy->tokenString, delboy->adaptor->getUniqueID(delboy->adaptor, t)); + delboy->tokenString->addc(delboy->tokenString, ' '); + + // Type of the current token (which is an error) + // + delboy->tokenString->addi(delboy->tokenString, ANTLR3_TOKEN_INVALID); + + // The text that this node represents + // + serializeText(delboy->tokenString, delboy->adaptor->getText(delboy->adaptor, t)); + delboy->tokenString->addc(delboy->tokenString, '\n'); + + // Finally, as the debugger is a Java program it will expect to get UTF-8 + // encoded strings. We don't use UTF-8 internally to the C runtime, so we + // must force encode it. We have a method to do this in the string class, but + // there is no utf8 string implementation as of yet + // + transmit(delboy, (const char *)(delboy->tokenString->toUTF8(delboy->tokenString)->chars)); + +} + +static void +createNodeTok (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE node, pANTLR3_COMMON_TOKEN token) +{ + char buffer[128]; + + sprintf(buffer, "createNode %d %d\n", delboy->adaptor->getUniqueID(delboy->adaptor, node), (ANTLR3_UINT32)token->getTokenIndex(token)); + + transmit(delboy, buffer); +} + +static void +becomeRoot (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE newRoot, pANTLR3_BASE_TREE oldRoot) +{ + char buffer[128]; + + sprintf(buffer, "becomeRoot %d %d\n", delboy->adaptor->getUniqueID(delboy->adaptor, newRoot), + delboy->adaptor->getUniqueID(delboy->adaptor, oldRoot) + ); + transmit(delboy, buffer); +} + + +static void +addChild (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE root, pANTLR3_BASE_TREE child) +{ + char buffer[128]; + + sprintf(buffer, "addChild %d %d\n", delboy->adaptor->getUniqueID(delboy->adaptor, root), + delboy->adaptor->getUniqueID(delboy->adaptor, child) + ); + transmit(delboy, buffer); +} + +static void +setTokenBoundaries (pANTLR3_DEBUG_EVENT_LISTENER delboy, pANTLR3_BASE_TREE t, ANTLR3_MARKER tokenStartIndex, ANTLR3_MARKER tokenStopIndex) +{ + char buffer[128]; + + sprintf(buffer, "becomeRoot %d %d %d\n", delboy->adaptor->getUniqueID(delboy->adaptor, t), + (ANTLR3_UINT32)tokenStartIndex, + (ANTLR3_UINT32)tokenStopIndex + ); + transmit(delboy, buffer); +} +#endif + diff --git a/antlr-3.1.3/runtime/C/src/antlr3encodings.c b/antlr-3.1.3/runtime/C/src/antlr3encodings.c new file mode 100644 index 0000000..2187426 --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3encodings.c @@ -0,0 +1,50 @@ +/** \File + * Provides basic utility functions to convert between + * the various Unicode character conversions. There are of + * course various packages that could be used instead of these + * functions, but then the Antlr 3 C runtime would be dependant + * on the particular package. Using ICU for this is a good idea if + * your project is already dependant on it. + */ + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3.h> + +/// Convert 8 bit character to ANTLR char form. +/// +/// \param[in] inc Input character to transform in 8 bit ASCII form. +/// \return ANTLR3_UCHAR encoding of the character. +/// +ANTLR3_API +ANTLR3_UCHAR antlr3c8toAntlrc(ANTLR3_INT8 inc) +{ + return (ANTLR3_UCHAR)(inc); +} diff --git a/antlr-3.1.3/runtime/C/src/antlr3exception.c b/antlr-3.1.3/runtime/C/src/antlr3exception.c new file mode 100644 index 0000000..339721c --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3exception.c @@ -0,0 +1,190 @@ +/** \file + * Contains default functions for creating and destroying as well as + * otherwise handling ANTLR3 standard exception structures. + */ + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3exception.h> + +static void antlr3ExceptionPrint(pANTLR3_EXCEPTION ex); +static void antlr3ExceptionFree (pANTLR3_EXCEPTION ex); + +/** + * \brief + * Creates a new ANTLR3 exception structure + * + * \param[in] exception + * One of the ANTLR3_xxx_EXCEPTION indicators such as #ANTLR3_RECOGNITION_EXCEPTION + * + * \param[in] message + * Pointer to message string + * + * \param[in] freeMessage + * Set to ANTLR3_TRUE if the message parameter should be freed by a call to + * ANTLR3_FREE() when the exception is destroyed. + * + * \returns + * Pointer to newly initialized exception structure, or an ANTLR3_ERR_xx defined value + * upon failure. + * + * An exception is 'thrown' by a recognizer when input is seen that is not predicted by + * the grammar productions or when some other error condition occurs. In C we do not have + * the luxury of try and catch blocks, so exceptions are added in the order they occur to + * a list in the baserecognizer structure. The last one to be thrown is inserted at the head of + * the list and the one currently installed is pointed to by the newly installed exception. + * + * \remarks + * After an exception is created, you may add a pointer to your own structure and a pointer + * to a function to free this structure when the exception is destroyed. + * + * \see + * ANTLR3_EXCEPTION + */ +pANTLR3_EXCEPTION +antlr3ExceptionNew(ANTLR3_UINT32 exception, void * name, void * message, ANTLR3_BOOLEAN freeMessage) +{ + pANTLR3_EXCEPTION ex; + + /* Allocate memory for the structure + */ + ex = (pANTLR3_EXCEPTION) ANTLR3_CALLOC(1, sizeof(ANTLR3_EXCEPTION)); + + /* Check for memory allocation + */ + if (ex == NULL) + { + return NULL; + } + + ex->name = name; /* Install exception name */ + ex->type = exception; /* Install the exception number */ + ex->message = message; /* Install message string */ + + /* Indicate whether the string should be freed if exception is destroyed + */ + ex->freeMessage = freeMessage; + + /* Install the API + */ + ex->print = antlr3ExceptionPrint; + ex->freeEx = antlr3ExceptionFree; + + return ex; +} + +/** + * \brief + * Prints out the message in all the exceptions in the supplied chain. + * + * \param[in] ex + * Pointer to the exception structure to print. + * + * \remarks + * You may wish to override this function by installing a pointer to a new function + * in the base recognizer context structure. + * + * \see + * ANTLR3_BASE_RECOGNIZER + */ +static void +antlr3ExceptionPrint(pANTLR3_EXCEPTION ex) +{ + /* Ensure valid pointer + */ + while (ex != NULL) + { + /* Number if no message, else the message + */ + if (ex->message == NULL) + { + ANTLR3_FPRINTF(stderr, "ANTLR3_EXCEPTION number %d (%08X).\n", ex->type, ex->type); + } + else + { + ANTLR3_FPRINTF(stderr, "ANTLR3_EXCEPTION: %s\n", (char *)(ex->message)); + } + + /* Move to next in the chain (if any) + */ + ex = ex->nextException; + } + + return; +} + +/** + * \brief + * Frees up a chain of ANTLR3 exceptions + * + * \param[in] ex + * Pointer to the first exception in the chain to free. + * + * \see + * ANTLR3_EXCEPTION + */ +static void +antlr3ExceptionFree(pANTLR3_EXCEPTION ex) +{ + pANTLR3_EXCEPTION next; + + /* Ensure valid pointer + */ + while (ex != NULL) + { + /* Pick up anythign following now, before we free the + * current memory block. + */ + next = ex->nextException; + + /* Free the message pointer if advised to + */ + if (ex->freeMessage == ANTLR3_TRUE) + { + ANTLR3_FREE(ex->message); + } + + /* Call the programmer's custom free routine if advised to + */ + if (ex->freeCustom != NULL) + { + ex->freeCustom(ex->custom); + } + + /* Free the actual structure itself + */ + ANTLR3_FREE(ex); + + ex = next; + } + + return; +} + diff --git a/antlr-3.1.3/runtime/C/src/antlr3filestream.c b/antlr-3.1.3/runtime/C/src/antlr3filestream.c new file mode 100644 index 0000000..5c1eecc --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3filestream.c @@ -0,0 +1,183 @@ +/** \file + * \brief The ANTLR3 C filestream is used when the source character stream + * is a filesystem based input set and all the characters in the filestream + * can be loaded at once into memory and away the lexer goes. + * + * A number of initializers are provided in order that various character + * sets can be supported from input files. The ANTLR3 C runtime expects + * to deal with UTF32 characters only (the reasons for this are to + * do with the simplification of C code when using this form of Unicode + * encoding, though this is not a panacea. More information can be + * found on this by consulting: + * - http://www.unicode.org/versions/Unicode4.0.0/ch02.pdf#G11178 + * Where a well grounded discussion of the encoding formats available + * may be found. + * + */ + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3.h> + + +/** \brief Use the contents of an operating system file as the input + * for an input stream. + * + * \param fileName Name of operating system file to read. + * \return + * - Pointer to new input stream context upon success + * - One of the ANTLR3_ERR_ defines on error. + */ +ANTLR3_API pANTLR3_INPUT_STREAM +antlr3AsciiFileStreamNew(pANTLR3_UINT8 fileName) +{ + // Pointer to the input stream we are going to create + // + pANTLR3_INPUT_STREAM input; + ANTLR3_UINT32 status; + + if (fileName == NULL) + { + return NULL; + } + + // Allocate memory for the input stream structure + // + input = (pANTLR3_INPUT_STREAM) + ANTLR3_CALLOC(1, sizeof(ANTLR3_INPUT_STREAM)); + + if (input == NULL) + { + return NULL; + } + + // Structure was allocated correctly, now we can read the file. + // + status = antlr3readAscii(input, fileName); + + // Call the common 8 bit ASCII input stream handler + // Initializer type thingy doobry function. + // + antlr3AsciiSetupStream(input, ANTLR3_CHARSTREAM); + + // Now we can set up the file name + // + input->istream->streamName = input->strFactory->newStr(input->strFactory, fileName); + input->fileName = input->istream->streamName; + + if (status != ANTLR3_SUCCESS) + { + input->close(input); + return NULL; + } + + return input; +} + +ANTLR3_API ANTLR3_UINT32 +antlr3readAscii(pANTLR3_INPUT_STREAM input, pANTLR3_UINT8 fileName) +{ + ANTLR3_FDSC infile; + ANTLR3_UINT32 fSize; + + /* Open the OS file in read binary mode + */ + infile = antlr3Fopen(fileName, "rb"); + + /* Check that it was there + */ + if (infile == NULL) + { + return (ANTLR3_UINT32)ANTLR3_ERR_NOFILE; + } + + /* It was there, so we can read the bytes now + */ + fSize = antlr3Fsize(fileName); /* Size of input file */ + + /* Allocate buffer for this input set + */ + input->data = ANTLR3_MALLOC((size_t)fSize); + input->sizeBuf = fSize; + + if (input->data == NULL) + { + return (ANTLR3_UINT32)ANTLR3_ERR_NOMEM; + } + + input->isAllocated = ANTLR3_TRUE; + + /* Now we read the file. Characters are not converted to + * the internal ANTLR encoding until they are read from the buffer + */ + antlr3Fread(infile, fSize, input->data); + + /* And close the file handle + */ + antlr3Fclose(infile); + + return ANTLR3_SUCCESS; +} + +/** \brief Open an operating system file and return the descriptor + * We just use the common open() and related functions here. + * Later we might find better ways on systems + * such as Windows and OpenVMS for instance. But the idea is to read the + * while file at once anyway, so it may be irrelevant. + */ +ANTLR3_API ANTLR3_FDSC +antlr3Fopen(pANTLR3_UINT8 filename, const char * mode) +{ + return (ANTLR3_FDSC)fopen((const char *)filename, mode); +} + +/** \brief Close an operating system file and free any handles + * etc. + */ +ANTLR3_API void +antlr3Fclose(ANTLR3_FDSC fd) +{ + fclose(fd); +} +ANTLR3_API ANTLR3_UINT32 +antlr3Fsize(pANTLR3_UINT8 fileName) +{ + struct _stat statbuf; + + _stat((const char *)fileName, &statbuf); + + return (ANTLR3_UINT32)statbuf.st_size; +} + +ANTLR3_API ANTLR3_UINT32 +antlr3Fread(ANTLR3_FDSC fdsc, ANTLR3_UINT32 count, void * data) +{ + return (ANTLR3_UINT32)fread(data, (size_t)count, 1, fdsc); +} diff --git a/antlr-3.1.3/runtime/C/src/antlr3inputstream.c b/antlr-3.1.3/runtime/C/src/antlr3inputstream.c new file mode 100644 index 0000000..6595cfb --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3inputstream.c @@ -0,0 +1,619 @@ +/// \file +/// Base functions to initialize and manipulate any input stream +/// + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3input.h> + + +// INT Stream API +// +static void antlr3AsciiConsume (pANTLR3_INT_STREAM is); +static ANTLR3_UCHAR antlr3AsciiLA (pANTLR3_INT_STREAM is, ANTLR3_INT32 la); +static ANTLR3_UCHAR antlr3AsciiLA_ucase (pANTLR3_INT_STREAM is, ANTLR3_INT32 la); +static ANTLR3_MARKER antlr3AsciiIndex (pANTLR3_INT_STREAM is); +static ANTLR3_MARKER antlr3AsciiMark (pANTLR3_INT_STREAM is); +static void antlr3AsciiRewind (pANTLR3_INT_STREAM is, ANTLR3_MARKER mark); +static void antlr3AsciiRewindLast (pANTLR3_INT_STREAM is); +static void antlr3AsciiRelease (pANTLR3_INT_STREAM is, ANTLR3_MARKER mark); +static void antlr3AsciiSeek (pANTLR3_INT_STREAM is, ANTLR3_MARKER seekPoint); +static pANTLR3_STRING antlr3AsciiGetSourceName (pANTLR3_INT_STREAM is); + +// ASCII Charstream API functions +// +static void antlr3InputClose (pANTLR3_INPUT_STREAM input); +static void antlr3InputReset (pANTLR3_INPUT_STREAM input); +static void * antlr3AsciiLT (pANTLR3_INPUT_STREAM input, ANTLR3_INT32 lt); +static ANTLR3_UINT32 antlr3AsciiSize (pANTLR3_INPUT_STREAM input); +static pANTLR3_STRING antlr3AsciiSubstr (pANTLR3_INPUT_STREAM input, ANTLR3_MARKER start, ANTLR3_MARKER stop); +static ANTLR3_UINT32 antlr3AsciiGetLine (pANTLR3_INPUT_STREAM input); +static void * antlr3AsciiGetLineBuf (pANTLR3_INPUT_STREAM input); +static ANTLR3_UINT32 antlr3AsciiGetCharPosition (pANTLR3_INPUT_STREAM input); +static void antlr3AsciiSetLine (pANTLR3_INPUT_STREAM input, ANTLR3_UINT32 line); +static void antlr3AsciiSetCharPosition (pANTLR3_INPUT_STREAM input, ANTLR3_UINT32 position); +static void antlr3AsciiSetNewLineChar (pANTLR3_INPUT_STREAM input, ANTLR3_UINT32 newlineChar); +static void antlr3AsciiSetUcaseLA (pANTLR3_INPUT_STREAM input, ANTLR3_BOOLEAN flag); + +/// \brief Common function to setup function interface for an 8 bit ASCII input stream. +/// +/// \param input Input stream context pointer +/// +/// \remark +/// - Many of the 8 bit ASCII oriented file stream handling functions will be usable +/// by any or at least some other input streams. Therefore it is perfectly acceptable +/// to call this function to install the ASCII handler then override just those functions +/// that would not work for the particular input encoding, such as consume for instance. +/// +void +antlr3AsciiSetupStream (pANTLR3_INPUT_STREAM input, ANTLR3_UINT32 type) +{ + // Build a string factory for this stream + // + input->strFactory = antlr3StringFactoryNew(); + + // Default stream set up is for ASCII, therefore there is nothing else + // to do but set it up as such + // + antlr3GenericSetupStream(input, type); +} + + +void +antlr3GenericSetupStream (pANTLR3_INPUT_STREAM input, ANTLR3_UINT32 type) +{ + + /* Install function pointers for an 8 bit ASCII input + */ + + /* Allocate stream interface + */ + input->istream = antlr3IntStreamNew(); + input->istream->type = ANTLR3_CHARSTREAM; + input->istream->super = input; + + input->istream->type = type; + + /* Intstream API + */ + input->istream->consume = antlr3AsciiConsume; /* Consume the next 8 bit character in the buffer */ + input->istream->_LA = antlr3AsciiLA; /* Return the UTF32 character at offset n (1 based) */ + input->istream->index = antlr3AsciiIndex; /* Current index (offset from first character */ + input->istream->mark = antlr3AsciiMark; /* Record the current lex state for later restore */ + input->istream->rewind = antlr3AsciiRewind; /* How to rewind the input */ + input->istream->rewindLast = antlr3AsciiRewindLast; /* How to rewind the input */ + input->istream->seek = antlr3AsciiSeek; /* How to seek to a specific point in the stream */ + input->istream->release = antlr3AsciiRelease; /* Reset marks after mark n */ + input->istream->getSourceName = antlr3AsciiGetSourceName; // Return a string that names the input source + + /* Charstream API + */ + input->close = antlr3InputClose; /* Close down the stream completely */ + input->free = antlr3InputClose; /* Synonym for free */ + input->reset = antlr3InputReset; /* Reset input to start */ + input->_LT = antlr3AsciiLT; /* Same as _LA for 8 bit Ascii file */ + input->size = antlr3AsciiSize; /* Return the size of the input buffer */ + input->substr = antlr3AsciiSubstr; /* Return a string from the input stream */ + input->getLine = antlr3AsciiGetLine; /* Return the current line number in the input stream */ + input->getLineBuf = antlr3AsciiGetLineBuf; /* Return a pointer to the start of the current line being consumed */ + input->getCharPositionInLine = antlr3AsciiGetCharPosition; /* Return the offset into the current line of input */ + input->setLine = antlr3AsciiSetLine; /* Set the input stream line number (does not set buffer pointers) */ + input->setCharPositionInLine = antlr3AsciiSetCharPosition; /* Set the offset in to the current line (does not set any pointers ) */ + input->SetNewLineChar = antlr3AsciiSetNewLineChar; /* Set the value of the newline trigger character */ + input->setUcaseLA = antlr3AsciiSetUcaseLA; + + input->charByteSize = 1; // Size in bytes of characters in this stream. + + /* Initialize entries for tables etc + */ + input->markers = NULL; + + /* Set up the input stream brand new + */ + input->reset(input); + + /* Install default line separator character (it can be replaced + * by the grammar programmer later) + */ + input->SetNewLineChar(input, (ANTLR3_UCHAR)'\n'); +} + +static pANTLR3_STRING +antlr3AsciiGetSourceName(pANTLR3_INT_STREAM is) +{ + return is->streamName; +} + +/** \brief Close down an input stream and free any memory allocated by it. + * + * \param input Input stream context pointer + */ +static void +antlr3InputClose(pANTLR3_INPUT_STREAM input) +{ + // Close any markers in the input stream + // + if (input->markers != NULL) + { + input->markers->free(input->markers); + input->markers = NULL; + } + + // Close the string factory + // + if (input->strFactory != NULL) + { + input->strFactory->close(input->strFactory); + } + + // Free the input stream buffer if we allocated it + // + if (input->isAllocated && input->data != NULL) + { + ANTLR3_FREE(input->data); + input->data = NULL; + } + + input->istream->free(input->istream); + + // Finally, free the space for the structure itself + // + ANTLR3_FREE(input); + + // Done + // +} + +static void +antlr3AsciiSetUcaseLA (pANTLR3_INPUT_STREAM input, ANTLR3_BOOLEAN flag) +{ + if (flag) + { + // Return the upper case version of the characters + // + input->istream->_LA = antlr3AsciiLA_ucase; + } + else + { + // Return the raw characters as they are in the buffer + // + input->istream->_LA = antlr3AsciiLA; + } +} + + +/** \brief Reset a re-startable input stream to the start + * + * \param input Input stream context pointer + */ +static void +antlr3InputReset(pANTLR3_INPUT_STREAM input) +{ + + input->nextChar = input->data; /* Input at first character */ + input->line = 1; /* starts at line 1 */ + input->charPositionInLine = -1; + input->currentLine = input->data; + input->markDepth = 0; /* Reset markers */ + + /* Free up the markers table if it is there + */ + if (input->markers != NULL) + { + input->markers->free(input->markers); + } + + /* Install a new markers table + */ + input->markers = antlr3VectorNew(0); +} + +/** \brief Consume the next character in an 8 bit ASCII input stream + * + * \param input Input stream context pointer + */ +static void +antlr3AsciiConsume(pANTLR3_INT_STREAM is) +{ + pANTLR3_INPUT_STREAM input; + + input = ((pANTLR3_INPUT_STREAM) (is->super)); + + if ((pANTLR3_UINT8)(input->nextChar) < (((pANTLR3_UINT8)input->data) + input->sizeBuf)) + { + /* Indicate one more character in this line + */ + input->charPositionInLine++; + + if ((ANTLR3_UCHAR)(*((pANTLR3_UINT8)input->nextChar)) == input->newlineChar) + { + /* Reset for start of a new line of input + */ + input->line++; + input->charPositionInLine = 0; + input->currentLine = (void *)(((pANTLR3_UINT8)input->nextChar) + 1); + } + + /* Increment to next character position + */ + input->nextChar = (void *)(((pANTLR3_UINT8)input->nextChar) + 1); + } +} + +/** \brief Return the input element assuming an 8 bit ascii input + * + * \param[in] input Input stream context pointer + * \param[in] la 1 based offset of next input stream element + * + * \return Next input character in internal ANTLR3 encoding (UTF32) + */ +static ANTLR3_UCHAR +antlr3AsciiLA(pANTLR3_INT_STREAM is, ANTLR3_INT32 la) +{ + pANTLR3_INPUT_STREAM input; + + input = ((pANTLR3_INPUT_STREAM) (is->super)); + + if (( ((pANTLR3_UINT8)input->nextChar) + la - 1) >= (((pANTLR3_UINT8)input->data) + input->sizeBuf)) + { + return ANTLR3_CHARSTREAM_EOF; + } + else + { + return (ANTLR3_UCHAR)(*((pANTLR3_UINT8)input->nextChar + la - 1)); + } +} + +/** \brief Return the input element assuming an 8 bit ASCII input and + * always return the UPPER CASE character. + * Note that this is 8 bit and so we assume that the toupper + * function will use the correct locale for 8 bits. + * + * \param[in] input Input stream context pointer + * \param[in] la 1 based offset of next input stream element + * + * \return Next input character in internal ANTLR3 encoding (UTF32) + */ +static ANTLR3_UCHAR +antlr3AsciiLA_ucase (pANTLR3_INT_STREAM is, ANTLR3_INT32 la) +{ + pANTLR3_INPUT_STREAM input; + + input = ((pANTLR3_INPUT_STREAM) (is->super)); + + if (( ((pANTLR3_UINT8)input->nextChar) + la - 1) >= (((pANTLR3_UINT8)input->data) + input->sizeBuf)) + { + return ANTLR3_CHARSTREAM_EOF; + } + else + { + return (ANTLR3_UCHAR)toupper((*((pANTLR3_UINT8)input->nextChar + la - 1))); + } +} + + +/** \brief Return the input element assuming an 8 bit ascii input + * + * \param[in] input Input stream context pointer + * \param[in] lt 1 based offset of next input stream element + * + * \return Next input character in internal ANTLR3 encoding (UTF32) + */ +static void * +antlr3AsciiLT(pANTLR3_INPUT_STREAM input, ANTLR3_INT32 lt) +{ + /* Casting is horrible but it means no warnings and LT should never be called + * on a character stream anyway I think. If it is then, the void * will need to be + * cast back in a similar manner. Yuck! But this means that LT for Token streams and + * tree streams is correct. + */ + return (ANTLR3_FUNC_PTR(input->istream->_LA(input->istream, lt))); +} + +/** \brief Calculate the current index in the output stream. + * \param[in] input Input stream context pointer + */ +static ANTLR3_MARKER +antlr3AsciiIndex(pANTLR3_INT_STREAM is) +{ + pANTLR3_INPUT_STREAM input; + + input = ((pANTLR3_INPUT_STREAM) (is->super)); + + return (ANTLR3_MARKER)(((pANTLR3_UINT8)input->nextChar)); +} + +/** \brief Return the size of the current input stream, as an Ascii file + * which in this case is the total input. Other implementations may provide + * more sophisticated implementations to deal with non-recoverable streams + * and so on. + * + * \param[in] input Input stream context pointer + */ +static ANTLR3_UINT32 +antlr3AsciiSize(pANTLR3_INPUT_STREAM input) +{ + return input->sizeBuf; +} + +/** \brief Mark the current input point in an Ascii 8 bit stream + * such as a file stream, where all the input is available in the + * buffer. + * + * \param[in] is Input stream context pointer + */ +static ANTLR3_MARKER +antlr3AsciiMark (pANTLR3_INT_STREAM is) +{ + pANTLR3_LEX_STATE state; + pANTLR3_INPUT_STREAM input; + + input = ((pANTLR3_INPUT_STREAM) (is->super)); + + /* New mark point + */ + input->markDepth++; + + /* See if we are revisiting a mark as we can just reuse the vector + * entry if we are, otherwise, we need a new one + */ + if (input->markDepth > input->markers->count) + { + state = ANTLR3_MALLOC(sizeof(ANTLR3_LEX_STATE)); + + /* Add it to the table + */ + input->markers->add(input->markers, state, ANTLR3_FREE_FUNC); /* No special structure, just free() on delete */ + } + else + { + state = (pANTLR3_LEX_STATE)input->markers->get(input->markers, input->markDepth - 1); + + /* Assume no errors for speed, it will just blow up if the table failed + * for some reasons, hence lots of unit tests on the tables ;-) + */ + } + + /* We have created or retrieved the state, so update it with the current + * elements of the lexer state. + */ + state->charPositionInLine = input->charPositionInLine; + state->currentLine = input->currentLine; + state->line = input->line; + state->nextChar = input->nextChar; + + is->lastMarker = input->markDepth; + + /* And that's it + */ + return input->markDepth; +} +/** \brief Rewind the lexer input to the state specified by the last produced mark. + * + * \param[in] input Input stream context pointer + * + * \remark + * Assumes ASCII (or at least, 8 Bit) input stream. + */ +static void +antlr3AsciiRewindLast (pANTLR3_INT_STREAM is) +{ + is->rewind(is, is->lastMarker); +} + +/** \brief Rewind the lexer input to the state specified by the supplied mark. + * + * \param[in] input Input stream context pointer + * + * \remark + * Assumes ASCII (or at least, 8 Bit) input stream. + */ +static void +antlr3AsciiRewind (pANTLR3_INT_STREAM is, ANTLR3_MARKER mark) +{ + pANTLR3_LEX_STATE state; + pANTLR3_INPUT_STREAM input; + + input = ((pANTLR3_INPUT_STREAM) is->super); + + /* Perform any clean up of the marks + */ + input->istream->release(input->istream, mark); + + /* Find the supplied mark state + */ + state = (pANTLR3_LEX_STATE)input->markers->get(input->markers, (ANTLR3_UINT32)(mark - 1)); + + /* Seek input pointer to the requested point (note we supply the void *pointer + * to whatever is implementing the int stream to seek). + */ + antlr3AsciiSeek(is, (ANTLR3_MARKER)(state->nextChar)); + + /* Reset to the reset of the information in the mark + */ + input->charPositionInLine = state->charPositionInLine; + input->currentLine = state->currentLine; + input->line = state->line; + input->nextChar = state->nextChar; + + /* And we are done + */ +} + +/** \brief Rewind the lexer input to the state specified by the supplied mark. + * + * \param[in] input Input stream context pointer + * + * \remark + * Assumes ASCII (or at least, 8 Bit) input stream. + */ +static void +antlr3AsciiRelease (pANTLR3_INT_STREAM is, ANTLR3_MARKER mark) +{ + pANTLR3_INPUT_STREAM input; + + input = ((pANTLR3_INPUT_STREAM) (is->super)); + + /* We don't do much here in fact as we never free any higher marks in + * the hashtable as we just resuse any memory allocated for them. + */ + input->markDepth = (ANTLR3_UINT32)(mark - 1); +} + +/** \brief Rewind the lexer input to the state specified by the supplied mark. + * + * \param[in] input Input stream context pointer + * + * \remark + * Assumes ASCII (or at least, 8 Bit) input stream. + */ +static void +antlr3AsciiSeek (pANTLR3_INT_STREAM is, ANTLR3_MARKER seekPoint) +{ + ANTLR3_INT32 count; + pANTLR3_INPUT_STREAM input; + + input = ANTLR3_FUNC_PTR(((pANTLR3_INPUT_STREAM) is->super)); + + /* If the requested seek point is less than the current + * input point, then we assume that we are resetting from a mark + * and do not need to scan, but can just set to there. + */ + if (seekPoint <= (ANTLR3_MARKER)(input->nextChar)) + { + input->nextChar = ((pANTLR3_UINT8) seekPoint); + } + else + { + count = (ANTLR3_UINT32)(seekPoint - (ANTLR3_MARKER)(input->nextChar)); + + while (count--) + { + is->consume(is); + } + } +} +/** Return a substring of the ASCII (8 bit) input stream in + * newly allocated memory. + * + * \param input Input stream context pointer + * \param start Offset in input stream where the string starts + * \param stop Offset in the input stream where the string ends. + */ +static pANTLR3_STRING +antlr3AsciiSubstr (pANTLR3_INPUT_STREAM input, ANTLR3_MARKER start, ANTLR3_MARKER stop) +{ + return input->strFactory->newPtr(input->strFactory, (pANTLR3_UINT8)start, (ANTLR3_UINT32)(stop - start + 1)); +} + +/** \brief Return the line number as understood by the 8 bit/ASCII input stream. + * + * \param input Input stream context pointer + * \return Line number in input stream that we believe we are working on. + */ +static ANTLR3_UINT32 +antlr3AsciiGetLine (pANTLR3_INPUT_STREAM input) +{ + return input->line; +} + +/** Return a pointer into the input stream that points at the start + * of the current input line as triggered by the end of line character installed + * for the stream ('\n' unless told differently). + * + * \param[in] input + */ +static void * +antlr3AsciiGetLineBuf (pANTLR3_INPUT_STREAM input) +{ + return input->currentLine; +} + +/** Return the current offset in to the current line in the input stream. + * + * \param input Input stream context pointer + * \return Current line offset + */ +static ANTLR3_UINT32 +antlr3AsciiGetCharPosition (pANTLR3_INPUT_STREAM input) +{ + return input->charPositionInLine; +} + +/** Set the current line number as understood by the input stream. + * + * \param input Input stream context pointer + * \param line Line number to tell the input stream we are on + * + * \remark + * This function does not change any pointers, it just allows the programmer to set the + * line number according to some external criterion, such as finding a lexed directive + * like: #nnn "file.c" for instance, such that error reporting and so on in is in sync + * with some original source format. + */ +static void +antlr3AsciiSetLine (pANTLR3_INPUT_STREAM input, ANTLR3_UINT32 line) +{ + input->line = line; +} + +/** Set the current offset in the current line to be a particular setting. + * + * \param[in] input Input stream context pointer + * \param[in] position New setting for current offset. + * + * \remark + * This does not set the actual pointers in the input stream, it is purely for reporting + * purposes and so on as per antlr3AsciiSetLine(); + */ +static void +antlr3AsciiSetCharPosition (pANTLR3_INPUT_STREAM input, ANTLR3_UINT32 position) +{ + input->charPositionInLine = position; +} + +/** Set the newline trigger character in the input stream to the supplied parameter. + * + * \param[in] input Input stream context pointer + * \param[in] newlineChar Character to set to be the newline trigger. + * + * \remark + * - The supplied newLineChar is in UTF32 encoding (which means ASCII and latin1 etc + * are the same encodings), but the input stream catered to by this function is 8 bit + * only, so it is up to the programmer to ensure that the character supplied is valid. + */ +static void +antlr3AsciiSetNewLineChar (pANTLR3_INPUT_STREAM input, ANTLR3_UINT32 newlineChar) +{ + input->newlineChar = newlineChar; +} + + + diff --git a/antlr-3.1.3/runtime/C/src/antlr3intstream.c b/antlr-3.1.3/runtime/C/src/antlr3intstream.c new file mode 100644 index 0000000..b9d49d8 --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3intstream.c @@ -0,0 +1,66 @@ +/// \file +/// Implementation of superclass elements of an ANTLR3 int stream. +/// The only methods required are an allocator and a destructor. +/// \addtogroup pANTLR3_INT_STREAM +/// @{ + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3intstream.h> + +static void freeStream (pANTLR3_INT_STREAM stream); + +ANTLR3_API pANTLR3_INT_STREAM +antlr3IntStreamNew() +{ + pANTLR3_INT_STREAM stream; + + // Allocate memory + // + stream = (pANTLR3_INT_STREAM) ANTLR3_CALLOC(1, sizeof(ANTLR3_INT_STREAM)); + + if (stream == NULL) + { + return NULL; + } + + stream->free = freeStream; + + return stream; +} + +static void +freeStream (pANTLR3_INT_STREAM stream) +{ + ANTLR3_FREE(stream); +} + +/// @} +/// diff --git a/antlr-3.1.3/runtime/C/src/antlr3lexer.c b/antlr-3.1.3/runtime/C/src/antlr3lexer.c new file mode 100644 index 0000000..3b82480 --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3lexer.c @@ -0,0 +1,880 @@ +/** \file + * + * Base implementation of an antlr 3 lexer. + * + * An ANTLR3 lexer implements a base recongizer, a token source and + * a lexer interface. It constructs a base recognizer with default + * functions, then overrides any of these that are parser specific (usual + * default implementation of base recognizer. + */ + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3lexer.h> + +static void mTokens (pANTLR3_LEXER lexer); +static void setCharStream (pANTLR3_LEXER lexer, pANTLR3_INPUT_STREAM input); +static void pushCharStream (pANTLR3_LEXER lexer, pANTLR3_INPUT_STREAM input); +static void popCharStream (pANTLR3_LEXER lexer); + +static void emitNew (pANTLR3_LEXER lexer, pANTLR3_COMMON_TOKEN token); +static pANTLR3_COMMON_TOKEN emit (pANTLR3_LEXER lexer); +static ANTLR3_BOOLEAN matchs (pANTLR3_LEXER lexer, ANTLR3_UCHAR * string); +static ANTLR3_BOOLEAN matchc (pANTLR3_LEXER lexer, ANTLR3_UCHAR c); +static ANTLR3_BOOLEAN matchRange (pANTLR3_LEXER lexer, ANTLR3_UCHAR low, ANTLR3_UCHAR high); +static void matchAny (pANTLR3_LEXER lexer); +static void recover (pANTLR3_LEXER lexer); +static ANTLR3_UINT32 getLine (pANTLR3_LEXER lexer); +static ANTLR3_MARKER getCharIndex (pANTLR3_LEXER lexer); +static ANTLR3_UINT32 getCharPositionInLine (pANTLR3_LEXER lexer); +static pANTLR3_STRING getText (pANTLR3_LEXER lexer); +static pANTLR3_COMMON_TOKEN nextToken (pANTLR3_TOKEN_SOURCE toksource); + +static void displayRecognitionError (pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 * tokenNames); +static void reportError (pANTLR3_BASE_RECOGNIZER rec); +static void * getCurrentInputSymbol (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM istream); +static void * getMissingSymbol (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM istream, pANTLR3_EXCEPTION e, + ANTLR3_UINT32 expectedTokenType, pANTLR3_BITSET_LIST follow); + +static void reset (pANTLR3_BASE_RECOGNIZER rec); + +static void freeLexer (pANTLR3_LEXER lexer); + + +ANTLR3_API pANTLR3_LEXER +antlr3LexerNew(ANTLR3_UINT32 sizeHint, pANTLR3_RECOGNIZER_SHARED_STATE state) +{ + pANTLR3_LEXER lexer; + pANTLR3_COMMON_TOKEN specialT; + + /* Allocate memory + */ + lexer = (pANTLR3_LEXER) ANTLR3_MALLOC(sizeof(ANTLR3_LEXER)); + + if (lexer == NULL) + { + return NULL; + } + + /* Now we need to create the base recognizer + */ + lexer->rec = antlr3BaseRecognizerNew(ANTLR3_TYPE_LEXER, sizeHint, state); + + if (lexer->rec == NULL) + { + lexer->free(lexer); + return NULL; + } + lexer->rec->super = lexer; + + lexer->rec->displayRecognitionError = displayRecognitionError; + lexer->rec->reportError = reportError; + lexer->rec->reset = reset; + lexer->rec->getCurrentInputSymbol = getCurrentInputSymbol; + lexer->rec->getMissingSymbol = getMissingSymbol; + + /* Now install the token source interface + */ + if (lexer->rec->state->tokSource == NULL) + { + lexer->rec->state->tokSource = (pANTLR3_TOKEN_SOURCE)ANTLR3_MALLOC(sizeof(ANTLR3_TOKEN_SOURCE)); + + if (lexer->rec->state->tokSource == NULL) + { + lexer->rec->free(lexer->rec); + lexer->free(lexer); + + return NULL; + } + lexer->rec->state->tokSource->super = lexer; + + /* Install the default nextToken() method, which may be overridden + * by generated code, or by anything else in fact. + */ + lexer->rec->state->tokSource->nextToken = nextToken; + lexer->rec->state->tokSource->strFactory = NULL; + + lexer->rec->state->tokFactory = NULL; + } + + /* Install the lexer API + */ + lexer->setCharStream = setCharStream; + lexer->mTokens = (void (*)(void *))(mTokens); + lexer->setCharStream = setCharStream; + lexer->pushCharStream = pushCharStream; + lexer->popCharStream = popCharStream; + lexer->emit = emit; + lexer->emitNew = emitNew; + lexer->matchs = matchs; + lexer->matchc = matchc; + lexer->matchRange = matchRange; + lexer->matchAny = matchAny; + lexer->recover = recover; + lexer->getLine = getLine; + lexer->getCharIndex = getCharIndex; + lexer->getCharPositionInLine = getCharPositionInLine; + lexer->getText = getText; + lexer->free = freeLexer; + + /* Initialise the eof token + */ + specialT = &(lexer->rec->state->tokSource->eofToken); + antlr3SetTokenAPI (specialT); + specialT->setType (specialT, ANTLR3_TOKEN_EOF); + specialT->factoryMade = ANTLR3_TRUE; // Prevent things trying to free() it + specialT->strFactory = NULL; + + // Initialize the skip token. + // + specialT = &(lexer->rec->state->tokSource->skipToken); + antlr3SetTokenAPI (specialT); + specialT->setType (specialT, ANTLR3_TOKEN_INVALID); + specialT->factoryMade = ANTLR3_TRUE; // Prevent things trying to free() it + specialT->strFactory = NULL; + return lexer; +} + +static void +reset (pANTLR3_BASE_RECOGNIZER rec) +{ + pANTLR3_LEXER lexer; + + lexer = rec->super; + + lexer->rec->state->token = NULL; + lexer->rec->state->type = ANTLR3_TOKEN_INVALID; + lexer->rec->state->channel = ANTLR3_TOKEN_DEFAULT_CHANNEL; + lexer->rec->state->tokenStartCharIndex = -1; + lexer->rec->state->tokenStartCharPositionInLine = -1; + lexer->rec->state->tokenStartLine = -1; + + lexer->rec->state->text = NULL; + + if (lexer->input != NULL) + { + lexer->input->istream->seek(lexer->input->istream, 0); + } +} + +/// +/// \brief +/// Returns the next available token from the current input stream. +/// +/// \param toksource +/// Points to the implementation of a token source. The lexer is +/// addressed by the super structure pointer. +/// +/// \returns +/// The next token in the current input stream or the EOF token +/// if there are no more tokens. +/// +/// \remarks +/// Write remarks for nextToken here. +/// +/// \see nextToken +/// +ANTLR3_INLINE static pANTLR3_COMMON_TOKEN +nextTokenStr (pANTLR3_TOKEN_SOURCE toksource) +{ + pANTLR3_LEXER lexer; + + lexer = (pANTLR3_LEXER)(toksource->super); + + /// Loop until we get a non skipped token or EOF + /// + for (;;) + { + // Get rid of any previous token (token factory takes care of + // any de-allocation when this token is finally used up. + // + lexer->rec->state->token = NULL; + lexer->rec->state->error = ANTLR3_FALSE; // Start out without an exception + lexer->rec->state->failed = ANTLR3_FALSE; + + + + // Now call the matching rules and see if we can generate a new token + // + for (;;) + { + // Record the start of the token in our input stream. + // + lexer->rec->state->channel = ANTLR3_TOKEN_DEFAULT_CHANNEL; + lexer->rec->state->tokenStartCharIndex = lexer->input->istream->index(lexer->input->istream); + lexer->rec->state->tokenStartCharPositionInLine = lexer->input->getCharPositionInLine(lexer->input); + lexer->rec->state->tokenStartLine = lexer->input->getLine(lexer->input); + lexer->rec->state->text = NULL; + + if (lexer->input->istream->_LA(lexer->input->istream, 1) == ANTLR3_CHARSTREAM_EOF) + { + // Reached the end of the current stream, nothing more to do if this is + // the last in the stack. + // + pANTLR3_COMMON_TOKEN teof = &(toksource->eofToken); + + teof->setStartIndex (teof, lexer->getCharIndex(lexer)); + teof->setStopIndex (teof, lexer->getCharIndex(lexer)); + teof->setLine (teof, lexer->getLine(lexer)); + teof->factoryMade = ANTLR3_TRUE; // This isn't really manufactured but it stops things from trying to free it + return teof; + } + + lexer->rec->state->token = NULL; + lexer->rec->state->error = ANTLR3_FALSE; // Start out without an exception + lexer->rec->state->failed = ANTLR3_FALSE; + + // Call the generated lexer, see if it can get a new token together. + // + lexer->mTokens(lexer->ctx); + + if (lexer->rec->state->error == ANTLR3_TRUE) + { + // Recognition exception, report it and try to recover. + // + lexer->rec->state->failed = ANTLR3_TRUE; + lexer->rec->reportError(lexer->rec); + lexer->recover(lexer); + } + else + { + if (lexer->rec->state->token == NULL) + { + // Emit the real token, which adds it in to the token stream basically + // + emit(lexer); + } + else if (lexer->rec->state->token == &(toksource->skipToken)) + { + // A real token could have been generated, but "Computer say's naaaaah" and it + // it is just something we need to skip altogether. + // + continue; + } + + // Good token, not skipped, not EOF token + // + return lexer->rec->state->token; + } + } + } +} + +/** + * \brief + * Default implementation of the nextToken() call for a lexer. + * + * \param toksource + * Points to the implementation of a token source. The lexer is + * addressed by the super structure pointer. + * + * \returns + * The next token in the current input stream or the EOF token + * if there are no more tokens in any input stream in the stack. + * + * Write detailed description for nextToken here. + * + * \remarks + * Write remarks for nextToken here. + * + * \see nextTokenStr + */ +static pANTLR3_COMMON_TOKEN +nextToken (pANTLR3_TOKEN_SOURCE toksource) +{ + pANTLR3_COMMON_TOKEN tok; + + // Find the next token in the current stream + // + tok = nextTokenStr(toksource); + + // If we got to the EOF token then switch to the previous + // input stream if there were any and just return the + // EOF if there are none. We must check the next token + // in any outstanding input stream we pop into the active + // role to see if it was sitting at EOF after PUSHing the + // stream we just consumed, otherwise we will return EOF + // on the reinstalled input stream, when in actual fact + // there might be more input streams to POP before the + // real EOF of the whole logical inptu stream. Hence we + // use a while loop here until we find somethign in the stream + // that isn't EOF or we reach the actual end of the last input + // stream on the stack. + // + while (tok->type == ANTLR3_TOKEN_EOF) + { + pANTLR3_LEXER lexer; + + lexer = (pANTLR3_LEXER)(toksource->super); + + if (lexer->rec->state->streams != NULL && lexer->rec->state->streams->size(lexer->rec->state->streams) > 0) + { + // We have another input stream in the stack so we + // need to revert to it, then resume the loop to check + // it wasn't sitting at EOF itself. + // + lexer->popCharStream(lexer); + tok = nextTokenStr(toksource); + } + else + { + // There were no more streams on the input stack + // so this EOF is the 'real' logical EOF for + // the input stream. So we just exit the loop and + // return the EOF we have found. + // + break; + } + + } + + // return whatever token we have, which may be EOF + // + return tok; +} + +ANTLR3_API pANTLR3_LEXER +antlr3LexerNewStream(ANTLR3_UINT32 sizeHint, pANTLR3_INPUT_STREAM input, pANTLR3_RECOGNIZER_SHARED_STATE state) +{ + pANTLR3_LEXER lexer; + + // Create a basic lexer first + // + lexer = antlr3LexerNew(sizeHint, state); + + if (lexer != NULL) + { + // Install the input stream and reset the lexer + // + setCharStream(lexer, input); + } + + return lexer; +} + +static void mTokens (pANTLR3_LEXER lexer) +{ + if (lexer) // Fool compiler, avoid pragmas + { + ANTLR3_FPRINTF(stderr, "lexer->mTokens(): Error: No lexer rules were added to the lexer yet!\n"); + } +} + +static void +reportError (pANTLR3_BASE_RECOGNIZER rec) +{ + rec->displayRecognitionError(rec, rec->state->tokenNames); +} + +#ifdef ANTLR3_WINDOWS +#pragma warning( disable : 4100 ) +#endif + +/** Default lexer error handler (works for 8 bit streams only!!!) + */ +static void +displayRecognitionError (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_UINT8 * tokenNames) +{ + pANTLR3_LEXER lexer; + pANTLR3_EXCEPTION ex; + pANTLR3_STRING ftext; + + lexer = (pANTLR3_LEXER)(recognizer->super); + ex = lexer->rec->state->exception; + + // See if there is a 'filename' we can use + // + if (ex->name == NULL) + { + ANTLR3_FPRINTF(stderr, "-unknown source-("); + } + else + { + ftext = ex->streamName->to8(ex->streamName); + ANTLR3_FPRINTF(stderr, "%s(", ftext->chars); + } + + ANTLR3_FPRINTF(stderr, "%d) ", recognizer->state->exception->line); + ANTLR3_FPRINTF(stderr, ": lexer error %d :\n\t%s at offset %d, ", + ex->type, + (pANTLR3_UINT8) (ex->message), + ex->charPositionInLine+1 + ); + { + ANTLR3_INT32 width; + + width = ANTLR3_UINT32_CAST(( (pANTLR3_UINT8)(lexer->input->data) + (lexer->input->size(lexer->input) )) - (pANTLR3_UINT8)(ex->index)); + + if (width >= 1) + { + if (isprint(ex->c)) + { + ANTLR3_FPRINTF(stderr, "near '%c' :\n", ex->c); + } + else + { + ANTLR3_FPRINTF(stderr, "near char(%#02X) :\n", (ANTLR3_UINT8)(ex->c)); + } + ANTLR3_FPRINTF(stderr, "\t%.*s\n", width > 20 ? 20 : width ,((pANTLR3_UINT8)ex->index)); + } + else + { + ANTLR3_FPRINTF(stderr, "(end of input).\n\t This indicates a poorly specified lexer RULE\n\t or unterminated input element such as: \"STRING[\"]\n"); + ANTLR3_FPRINTF(stderr, "\t The lexer was matching from line %d, offset %d, which\n\t ", + (ANTLR3_UINT32)(lexer->rec->state->tokenStartLine), + (ANTLR3_UINT32)(lexer->rec->state->tokenStartCharPositionInLine) + ); + width = ANTLR3_UINT32_CAST(((pANTLR3_UINT8)(lexer->input->data)+(lexer->input->size(lexer->input))) - (pANTLR3_UINT8)(lexer->rec->state->tokenStartCharIndex)); + + if (width >= 1) + { + ANTLR3_FPRINTF(stderr, "looks like this:\n\t\t%.*s\n", width > 20 ? 20 : width ,(pANTLR3_UINT8)(lexer->rec->state->tokenStartCharIndex)); + } + else + { + ANTLR3_FPRINTF(stderr, "is also the end of the line, so you must check your lexer rules\n"); + } + } + } +} + +static void setCharStream (pANTLR3_LEXER lexer, pANTLR3_INPUT_STREAM input) +{ + /* Install the input interface + */ + lexer->input = input; + + /* We may need a token factory for the lexer; we don't destroy any existing factory + * until the lexer is destroyed, as people may still be using the tokens it produced. + * TODO: Later I will provide a dup() method for a token so that it can extract itself + * out of the factory. + */ + if (lexer->rec->state->tokFactory == NULL) + { + lexer->rec->state->tokFactory = antlr3TokenFactoryNew(input); + } + else + { + /* When the input stream is being changed on the fly, rather than + * at the start of a new lexer, then we must tell the tokenFactory + * which input stream to adorn the tokens with so that when they + * are asked to provide their original input strings they can + * do so from the correct text stream. + */ + lexer->rec->state->tokFactory->setInputStream(lexer->rec->state->tokFactory, input); + } + + /* Propagate the string factory so that we preserve the encoding form from + * the input stream. + */ + if (lexer->rec->state->tokSource->strFactory == NULL) + { + lexer->rec->state->tokSource->strFactory = input->strFactory; + + // Set the newly acquired string factory up for our pre-made tokens + // for EOF. + // + if (lexer->rec->state->tokSource->eofToken.strFactory == NULL) + { + lexer->rec->state->tokSource->eofToken.strFactory = input->strFactory; + } + } + + /* This is a lexer, install the appropriate exception creator + */ + lexer->rec->exConstruct = antlr3RecognitionExceptionNew; + + /* Set the current token to nothing + */ + lexer->rec->state->token = NULL; + lexer->rec->state->text = NULL; + lexer->rec->state->tokenStartCharIndex = -1; + + /* Copy the name of the char stream to the token source + */ + lexer->rec->state->tokSource->fileName = input->fileName; +} + +/*! + * \brief + * Change to a new input stream, remembering the old one. + * + * \param lexer + * Pointer to the lexer instance to switch input streams for. + * + * \param input + * New input stream to install as the current one. + * + * Switches the current character input stream to + * a new one, saving the old one, which we will revert to at the end of this + * new one. + */ +static void +pushCharStream (pANTLR3_LEXER lexer, pANTLR3_INPUT_STREAM input) +{ + // Do we need a new input stream stack? + // + if (lexer->rec->state->streams == NULL) + { + // This is the first call to stack a new + // stream and so we must create the stack first. + // + lexer->rec->state->streams = antlr3StackNew(0); + + if (lexer->rec->state->streams == NULL) + { + // Could not do this, we just fail to push it. + // TODO: Consider if this is what we want to do, but then + // any programmer can override this method to do something else. + return; + } + } + + // We have a stack, so we can save the current input stream + // into it. + // + lexer->input->istream->mark(lexer->input->istream); + lexer->rec->state->streams->push(lexer->rec->state->streams, lexer->input, NULL); + + // And now we can install this new one + // + lexer->setCharStream(lexer, input); +} + +/*! + * \brief + * Stops using the current input stream and reverts to any prior + * input stream on the stack. + * + * \param lexer + * Description of parameter lexer. + * + * Pointer to a function that abandons the current input stream, whether it + * is empty or not and reverts to the previous stacked input stream. + * + * \remark + * The function fails silently if there are no prior input streams. + */ +static void +popCharStream (pANTLR3_LEXER lexer) +{ + pANTLR3_INPUT_STREAM input; + + // If we do not have a stream stack or we are already at the + // stack bottom, then do nothing. + // + if (lexer->rec->state->streams != NULL && lexer->rec->state->streams->size(lexer->rec->state->streams) > 0) + { + // We just leave the current stream to its fate, we do not close + // it or anything as we do not know what the programmer intended + // for it. This method can always be overridden of course. + // So just find out what was currently saved on the stack and use + // that now, then pop it from the stack. + // + input = (pANTLR3_INPUT_STREAM)(lexer->rec->state->streams->top); + lexer->rec->state->streams->pop(lexer->rec->state->streams); + + // Now install the stream as the current one. + // + lexer->setCharStream(lexer, input); + lexer->input->istream->rewindLast(lexer->input->istream); + } + return; +} + +static void emitNew (pANTLR3_LEXER lexer, pANTLR3_COMMON_TOKEN token) +{ + lexer->rec->state->token = token; /* Voila! */ +} + +static pANTLR3_COMMON_TOKEN +emit (pANTLR3_LEXER lexer) +{ + pANTLR3_COMMON_TOKEN token; + + /* We could check pointers to token factories and so on, but + * we are in code that we want to run as fast as possible + * so we are not checking any errors. So make sure you have installed an input stream before + * trying to emit a new token. + */ + token = lexer->rec->state->tokFactory->newToken(lexer->rec->state->tokFactory); + + /* Install the supplied information, and some other bits we already know + * get added automatically, such as the input stream it is associated with + * (though it can all be overridden of course) + */ + token->type = lexer->rec->state->type; + token->channel = lexer->rec->state->channel; + token->start = lexer->rec->state->tokenStartCharIndex; + token->stop = lexer->getCharIndex(lexer) - 1; + token->line = lexer->rec->state->tokenStartLine; + token->charPosition = lexer->rec->state->tokenStartCharPositionInLine; + + if (lexer->rec->state->text != NULL) + { + token->textState = ANTLR3_TEXT_STRING; + token->tokText.text = lexer->rec->state->text; + } + else + { + token->textState = ANTLR3_TEXT_NONE; + } + token->lineStart = lexer->input->currentLine; + token->user1 = lexer->rec->state->user1; + token->user2 = lexer->rec->state->user2; + token->user3 = lexer->rec->state->user3; + token->custom = lexer->rec->state->custom; + + lexer->rec->state->token = token; + + return token; +} + +/** + * Free the resources allocated by a lexer + */ +static void +freeLexer (pANTLR3_LEXER lexer) +{ + // This may have ben a delegate or delegator lexer, in which case the + // state may already have been freed (and set to NULL therefore) + // so we ignore the state if we don't have it. + // + if (lexer->rec->state != NULL) + { + if (lexer->rec->state->streams != NULL) + { + lexer->rec->state->streams->free(lexer->rec->state->streams); + } + if (lexer->rec->state->tokFactory != NULL) + { + lexer->rec->state->tokFactory->close(lexer->rec->state->tokFactory); + lexer->rec->state->tokFactory = NULL; + } + if (lexer->rec->state->tokSource != NULL) + { + ANTLR3_FREE(lexer->rec->state->tokSource); + lexer->rec->state->tokSource = NULL; + } + } + if (lexer->rec != NULL) + { + lexer->rec->free(lexer->rec); + lexer->rec = NULL; + } + ANTLR3_FREE(lexer); +} + +/** Implementation of matchs for the lexer, overrides any + * base implementation in the base recognizer. + * + * \remark + * Note that the generated code lays down arrays of ints for constant + * strings so that they are int UTF32 form! + */ +static ANTLR3_BOOLEAN +matchs(pANTLR3_LEXER lexer, ANTLR3_UCHAR * string) +{ + while (*string != ANTLR3_STRING_TERMINATOR) + { + if (lexer->input->istream->_LA(lexer->input->istream, 1) != (*string)) + { + if (lexer->rec->state->backtracking > 0) + { + lexer->rec->state->failed = ANTLR3_TRUE; + return ANTLR3_FALSE; + } + + lexer->rec->exConstruct(lexer->rec); + lexer->rec->state->failed = ANTLR3_TRUE; + + /* TODO: Implement exception creation more fully perhaps + */ + lexer->recover(lexer); + return ANTLR3_FALSE; + } + + /* Matched correctly, do consume it + */ + lexer->input->istream->consume(lexer->input->istream); + string++; + + /* Reset any failed indicator + */ + lexer->rec->state->failed = ANTLR3_FALSE; + } + + + return ANTLR3_TRUE; +} + +/** Implementation of matchc for the lexer, overrides any + * base implementation in the base recognizer. + * + * \remark + * Note that the generated code lays down arrays of ints for constant + * strings so that they are int UTF32 form! + */ +static ANTLR3_BOOLEAN +matchc(pANTLR3_LEXER lexer, ANTLR3_UCHAR c) +{ + if (lexer->input->istream->_LA(lexer->input->istream, 1) == c) + { + /* Matched correctly, do consume it + */ + lexer->input->istream->consume(lexer->input->istream); + + /* Reset any failed indicator + */ + lexer->rec->state->failed = ANTLR3_FALSE; + + return ANTLR3_TRUE; + } + + /* Failed to match, exception and recovery time. + */ + if (lexer->rec->state->backtracking > 0) + { + lexer->rec->state->failed = ANTLR3_TRUE; + return ANTLR3_FALSE; + } + + lexer->rec->exConstruct(lexer->rec); + + /* TODO: Implement exception creation more fully perhaps + */ + lexer->recover(lexer); + + return ANTLR3_FALSE; +} + +/** Implementation of match range for the lexer, overrides any + * base implementation in the base recognizer. + * + * \remark + * Note that the generated code lays down arrays of ints for constant + * strings so that they are int UTF32 form! + */ +static ANTLR3_BOOLEAN +matchRange(pANTLR3_LEXER lexer, ANTLR3_UCHAR low, ANTLR3_UCHAR high) +{ + ANTLR3_UCHAR c; + + /* What is in the stream at the moment? + */ + c = lexer->input->istream->_LA(lexer->input->istream, 1); + if ( c >= low && c <= high) + { + /* Matched correctly, consume it + */ + lexer->input->istream->consume(lexer->input->istream); + + /* Reset any failed indicator + */ + lexer->rec->state->failed = ANTLR3_FALSE; + + return ANTLR3_TRUE; + } + + /* Failed to match, execption and recovery time. + */ + + if (lexer->rec->state->backtracking > 0) + { + lexer->rec->state->failed = ANTLR3_TRUE; + return ANTLR3_FALSE; + } + + lexer->rec->exConstruct(lexer->rec); + + /* TODO: Implement exception creation more fully + */ + lexer->recover(lexer); + + return ANTLR3_FALSE; +} + +static void +matchAny (pANTLR3_LEXER lexer) +{ + lexer->input->istream->consume(lexer->input->istream); +} + +static void +recover (pANTLR3_LEXER lexer) +{ + lexer->input->istream->consume(lexer->input->istream); +} + +static ANTLR3_UINT32 +getLine (pANTLR3_LEXER lexer) +{ + return lexer->input->getLine(lexer->input); +} + +static ANTLR3_UINT32 +getCharPositionInLine (pANTLR3_LEXER lexer) +{ + return lexer->input->getCharPositionInLine(lexer->input); +} + +static ANTLR3_MARKER getCharIndex (pANTLR3_LEXER lexer) +{ + return lexer->input->istream->index(lexer->input->istream); +} + +static pANTLR3_STRING +getText (pANTLR3_LEXER lexer) +{ + if (lexer->rec->state->text) + { + return lexer->rec->state->text; + + } + return lexer->input->substr( + lexer->input, + lexer->rec->state->tokenStartCharIndex, + lexer->getCharIndex(lexer) - lexer->input->charByteSize + ); + +} + +static void * +getCurrentInputSymbol (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM istream) +{ + return NULL; +} + +static void * +getMissingSymbol (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM istream, pANTLR3_EXCEPTION e, + ANTLR3_UINT32 expectedTokenType, pANTLR3_BITSET_LIST follow) +{ + return NULL; +} diff --git a/antlr-3.1.3/runtime/C/src/antlr3parser.c b/antlr-3.1.3/runtime/C/src/antlr3parser.c new file mode 100644 index 0000000..2b7e0e3 --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3parser.c @@ -0,0 +1,193 @@ +/** \file + * Implementation of the base functionality for an ANTLR3 parser. + */ + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3parser.h> + +/* Parser API + */ +static void setDebugListener (pANTLR3_PARSER parser, pANTLR3_DEBUG_EVENT_LISTENER dbg); +static void setTokenStream (pANTLR3_PARSER parser, pANTLR3_TOKEN_STREAM); +static pANTLR3_TOKEN_STREAM getTokenStream (pANTLR3_PARSER parser); +static void freeParser (pANTLR3_PARSER parser); + +ANTLR3_API pANTLR3_PARSER +antlr3ParserNewStreamDbg (ANTLR3_UINT32 sizeHint, pANTLR3_TOKEN_STREAM tstream, pANTLR3_DEBUG_EVENT_LISTENER dbg, pANTLR3_RECOGNIZER_SHARED_STATE state) +{ + pANTLR3_PARSER parser; + + parser = antlr3ParserNewStream(sizeHint, tstream, state); + + if (parser == NULL) + { + return NULL; + } + + parser->setDebugListener(parser, dbg); + + return parser; +} + +ANTLR3_API pANTLR3_PARSER +antlr3ParserNew (ANTLR3_UINT32 sizeHint, pANTLR3_RECOGNIZER_SHARED_STATE state) +{ + pANTLR3_PARSER parser; + + /* Allocate memory + */ + parser = (pANTLR3_PARSER) ANTLR3_MALLOC(sizeof(ANTLR3_PARSER)); + + if (parser == NULL) + { + return NULL; + } + + /* Install a base parser + */ + parser->rec = antlr3BaseRecognizerNew(ANTLR3_TYPE_PARSER, sizeHint, state); + + if (parser->rec == NULL) + { + parser->free(parser); + return NULL; + } + + parser->rec->super = parser; + + /* Parser overrides + */ + parser->rec->exConstruct = antlr3MTExceptionNew; + + /* Install the API + */ + parser->setDebugListener = setDebugListener; + parser->setTokenStream = setTokenStream; + parser->getTokenStream = getTokenStream; + + parser->free = freeParser; + + return parser; +} + +ANTLR3_API pANTLR3_PARSER +antlr3ParserNewStream (ANTLR3_UINT32 sizeHint, pANTLR3_TOKEN_STREAM tstream, pANTLR3_RECOGNIZER_SHARED_STATE state) +{ + pANTLR3_PARSER parser; + + parser = antlr3ParserNew(sizeHint, state); + + if (parser == NULL) + { + return NULL; + } + + /* Everything seems to be hunky dory so we can install the + * token stream. + */ + parser->setTokenStream(parser, tstream); + + return parser; +} + +static void +freeParser (pANTLR3_PARSER parser) +{ + if (parser->rec != NULL) + { + // This may have ben a delegate or delegator parser, in which case the + // state may already have been freed (and set to NULL therefore) + // so we ignore the state if we don't have it. + // + if (parser->rec->state != NULL) + { + if (parser->rec->state->following != NULL) + { + parser->rec->state->following->free(parser->rec->state->following); + parser->rec->state->following = NULL; + } + } + parser->rec->free(parser->rec); + parser->rec = NULL; + + } + ANTLR3_FREE(parser); +} + +static void +setDebugListener (pANTLR3_PARSER parser, pANTLR3_DEBUG_EVENT_LISTENER dbg) +{ + // Set the debug listener. There are no methods to override + // because currently the only ones that notify the debugger + // are error reporting and recovery. Hence we can afford to + // check and see if the debugger interface is null or not + // there. If there is ever an occasion for a performance + // sensitive function to use the debugger interface, then + // a replacement function for debug mode should be supplied + // and installed here. + // + parser->rec->debugger = dbg; + + // If there was a tokenstream installed already + // then we need to tell it about the debug interface + // + if (parser->tstream != NULL) + { + parser->tstream->setDebugListener(parser->tstream, dbg); + } +} + +static void +setTokenStream (pANTLR3_PARSER parser, pANTLR3_TOKEN_STREAM tstream) +{ + parser->tstream = tstream; + parser->rec->reset(parser->rec); +} + +static pANTLR3_TOKEN_STREAM +getTokenStream (pANTLR3_PARSER parser) +{ + return parser->tstream; +} + + + + + + + + + + + + + + diff --git a/antlr-3.1.3/runtime/C/src/antlr3rewritestreams.c b/antlr-3.1.3/runtime/C/src/antlr3rewritestreams.c new file mode 100644 index 0000000..416c78c --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3rewritestreams.c @@ -0,0 +1,832 @@ +/// \file +/// Implementation of token/tree streams that are used by the +/// tree re-write rules to manipulate the tokens and trees produced +/// by rules that are subject to rewrite directives. +/// + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3rewritestreams.h> + +// Static support function forward declarations for the stream types. +// +static void reset (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream); +static void add (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * el, void (ANTLR3_CDECL *freePtr)(void *)); +static void * next (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream); +static pANTLR3_BASE_TREE nextTree (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream); +static void * nextToken (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream); +static void * _next (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream); +static void * dupTok (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * el); +static void * dupTree (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * el); +static void * dupTreeNode (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * el); +static pANTLR3_BASE_TREE toTree (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * element); +static pANTLR3_BASE_TREE toTreeNode (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * element); +static ANTLR3_BOOLEAN hasNext (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream); +static pANTLR3_BASE_TREE nextNode (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream); +static pANTLR3_BASE_TREE nextNodeNode (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream); +static pANTLR3_BASE_TREE nextNodeToken (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream); +static ANTLR3_UINT32 size (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream); +static void * getDescription (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream); +static void freeRS (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream); +static void expungeRS (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream); + + +// Place a now unused rewrite stream back on the rewrite stream pool +// so we can reuse it if we need to. +// +static void +freeRS (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream) +{ + // Before placing the stream back in the pool, we + // need to clear any vector it has. This is so any + // free pointers that are associated with the + // entires are called. + // + if (stream->elements != NULL) + { + // Protext factory generated nodes as we cannot clear them, + // the factory is responsible for that. + // + if (stream->elements->factoryMade == ANTLR3_TRUE) + { + stream->elements = NULL; + } + else + { + stream->elements->clear(stream->elements); + stream->freeElements = ANTLR3_TRUE; + } + } + else + { + stream->freeElements = ANTLR3_FALSE; // Just in case + } + + // Add the stream into the recognizer stream stack vector + // adding the stream memory free routine so that + // it is thrown away when the stack vector is destroyed + // + stream->rec->state->rStreams->add(stream->rec->state->rStreams, stream, (void(*)(void *))expungeRS); +} + +/** Do special nilNode reuse detection for node streams. + */ +static void +freeNodeRS(pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream) +{ + pANTLR3_BASE_TREE tree; + + // Before placing the stream back in the pool, we + // need to clear any vector it has. This is so any + // free pointers that are associated with the + // entires are called. However, if this particular function is called + // then we know that the entries in the stream are definately + // tree nodes. Hence we check to see if any of them were nilNodes as + // if they were, we can reuse them. + // + if (stream->elements != NULL) + { + // We have some elements to traverse + // + ANTLR3_UINT32 i; + + for (i = 1; i<= stream->elements->count; i++) + { + tree = (pANTLR3_BASE_TREE)(stream->elements->elements[i-1].element); + if (tree->isNilNode(tree)) + { + tree->reuse(tree); + } + + } + // Protext factory generated nodes as we cannot clear them, + // the factory is responsible for that. + // + if (stream->elements->factoryMade == ANTLR3_TRUE) + { + stream->elements = NULL; + } + else + { + stream->elements->clear(stream->elements); + stream->freeElements = ANTLR3_TRUE; + } + } + else + { + if (stream->singleElement != NULL) + { + tree = (pANTLR3_BASE_TREE)(stream->singleElement); + if (tree->isNilNode(tree)) + { + tree->reuse(tree); + } + } + stream->freeElements = ANTLR3_FALSE; // Just in case + } + + // Add the stream into the recognizer stream stack vector + // adding the stream memory free routine so that + // it is thrown away when the stack vector is destroyed + // + stream->rec->state->rStreams->add(stream->rec->state->rStreams, stream, (void(*)(void *))expungeRS); +} +static void +expungeRS(pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream) +{ + + if (stream->freeElements == ANTLR3_TRUE && stream->elements != NULL) + { + stream->elements->free(stream->elements); + } + ANTLR3_FREE(stream); +} + +// Functions for creating streams +// +static pANTLR3_REWRITE_RULE_ELEMENT_STREAM +antlr3RewriteRuleElementStreamNewAE(pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description) +{ + pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream; + + // First - do we already have a rewrite stream that was returned + // to the pool? If we do, then we will just reuse it by resetting + // the generic interface. + // + if (rec->state->rStreams->count > 0) + { + // Remove the entry from the vector. We do not + // cause it to be freed by using remove. + // + stream = rec->state->rStreams->remove(rec->state->rStreams, rec->state->rStreams->count - 1); + + // We found a stream we can reuse. + // If the stream had a vector, then it will have been cleared + // when the freeRS was called that put it in this stack + // + } + else + { + // Ok, we need to allocate a new one as there were none on the stack. + // First job is to create the memory we need. + // + stream = (pANTLR3_REWRITE_RULE_ELEMENT_STREAM) ANTLR3_MALLOC((size_t)(sizeof(ANTLR3_REWRITE_RULE_ELEMENT_STREAM))); + + if (stream == NULL) + { + return NULL; + } + stream->elements = NULL; + stream->freeElements = ANTLR3_FALSE; + } + + // Populate the generic interface + // + stream->rec = rec; + stream->reset = reset; + stream->add = add; + stream->next = next; + stream->nextTree = nextTree; + stream->nextNode = nextNode; + stream->nextToken = nextToken; + stream->_next = _next; + stream->hasNext = hasNext; + stream->size = size; + stream->getDescription = getDescription; + stream->toTree = toTree; + stream->free = freeRS; + stream->singleElement = NULL; + + // Reset the stream to empty. + // + + stream->cursor = 0; + stream->dirty = ANTLR3_FALSE; + + // Install the description + // + stream->elementDescription = description; + + // Install the adaptor + // + stream->adaptor = adaptor; + + return stream; +} + +static pANTLR3_REWRITE_RULE_ELEMENT_STREAM +antlr3RewriteRuleElementStreamNewAEE(pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description, void * oneElement) +{ + pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream; + + // First job is to create the memory we need. + // + stream = antlr3RewriteRuleElementStreamNewAE(adaptor, rec, description); + + if (stream == NULL) + { + return NULL; + } + + // Stream seems good so we need to add the supplied element + // + if (oneElement != NULL) + { + stream->add(stream, oneElement, NULL); + } + return stream; +} + +static pANTLR3_REWRITE_RULE_ELEMENT_STREAM +antlr3RewriteRuleElementStreamNewAEV(pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description, pANTLR3_VECTOR vector) +{ + pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream; + + // First job is to create the memory we need. + // + stream = antlr3RewriteRuleElementStreamNewAE(adaptor, rec, description); + + if (stream == NULL) + { + return stream; + } + + // Stream seems good so we need to install the vector we were + // given. We assume that someone else is going to free the + // vector. + // + if (stream->elements != NULL && stream->elements->factoryMade == ANTLR3_FALSE && stream->freeElements == ANTLR3_TRUE ) + { + stream->elements->free(stream->elements); + } + stream->elements = vector; + stream->freeElements = ANTLR3_FALSE; + return stream; +} + +// Token rewrite stream ... +// +ANTLR3_API pANTLR3_REWRITE_RULE_TOKEN_STREAM +antlr3RewriteRuleTOKENStreamNewAE(pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description) +{ + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream; + + // First job is to create the memory we need. + // + stream = antlr3RewriteRuleElementStreamNewAE(adaptor, rec, description); + + if (stream == NULL) + { + return stream; + } + + // Install the token based overrides + // + stream->dup = dupTok; + stream->nextNode = nextNodeToken; + + // No nextNode implementation for a token rewrite stream + // + return stream; +} + +ANTLR3_API pANTLR3_REWRITE_RULE_TOKEN_STREAM +antlr3RewriteRuleTOKENStreamNewAEE(pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description, void * oneElement) +{ + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream; + + // First job is to create the memory we need. + // + stream = antlr3RewriteRuleElementStreamNewAEE(adaptor, rec, description, oneElement); + + // Install the token based overrides + // + stream->dup = dupTok; + stream->nextNode = nextNodeToken; + + // No nextNode implementation for a token rewrite stream + // + return stream; +} + +ANTLR3_API pANTLR3_REWRITE_RULE_TOKEN_STREAM +antlr3RewriteRuleTOKENStreamNewAEV(pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description, pANTLR3_VECTOR vector) +{ + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream; + + // First job is to create the memory we need. + // + stream = antlr3RewriteRuleElementStreamNewAEV(adaptor, rec, description, vector); + + // Install the token based overrides + // + stream->dup = dupTok; + stream->nextNode = nextNodeToken; + + // No nextNode implementation for a token rewrite stream + // + return stream; +} + +// Subtree rewrite stream +// +ANTLR3_API pANTLR3_REWRITE_RULE_SUBTREE_STREAM +antlr3RewriteRuleSubtreeStreamNewAE(pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description) +{ + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream; + + // First job is to create the memory we need. + // + stream = antlr3RewriteRuleElementStreamNewAE(adaptor, rec, description); + + if (stream == NULL) + { + return stream; + } + + // Install the subtree based overrides + // + stream->dup = dupTree; + stream->nextNode = nextNode; + stream->free = freeNodeRS; + return stream; + +} +ANTLR3_API pANTLR3_REWRITE_RULE_SUBTREE_STREAM +antlr3RewriteRuleSubtreeStreamNewAEE(pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description, void * oneElement) +{ + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream; + + // First job is to create the memory we need. + // + stream = antlr3RewriteRuleElementStreamNewAEE(adaptor, rec, description, oneElement); + + if (stream == NULL) + { + return stream; + } + + // Install the subtree based overrides + // + stream->dup = dupTree; + stream->nextNode = nextNode; + stream->free = freeNodeRS; + + return stream; +} + +ANTLR3_API pANTLR3_REWRITE_RULE_SUBTREE_STREAM +antlr3RewriteRuleSubtreeStreamNewAEV(pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description, pANTLR3_VECTOR vector) +{ + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream; + + // First job is to create the memory we need. + // + stream = antlr3RewriteRuleElementStreamNewAEV(adaptor, rec, description, vector); + + if (stream == NULL) + { + return NULL; + } + + // Install the subtree based overrides + // + stream->dup = dupTree; + stream->nextNode = nextNode; + stream->free = freeNodeRS; + + return stream; +} +// Node rewrite stream ... +// +ANTLR3_API pANTLR3_REWRITE_RULE_NODE_STREAM +antlr3RewriteRuleNODEStreamNewAE(pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description) +{ + pANTLR3_REWRITE_RULE_NODE_STREAM stream; + + // First job is to create the memory we need. + // + stream = antlr3RewriteRuleElementStreamNewAE(adaptor, rec, description); + + if (stream == NULL) + { + return stream; + } + + // Install the node based overrides + // + stream->dup = dupTreeNode; + stream->toTree = toTreeNode; + stream->nextNode = nextNodeNode; + stream->free = freeNodeRS; + + return stream; +} + +ANTLR3_API pANTLR3_REWRITE_RULE_NODE_STREAM +antlr3RewriteRuleNODEStreamNewAEE(pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description, void * oneElement) +{ + pANTLR3_REWRITE_RULE_NODE_STREAM stream; + + // First job is to create the memory we need. + // + stream = antlr3RewriteRuleElementStreamNewAEE(adaptor, rec, description, oneElement); + + // Install the node based overrides + // + stream->dup = dupTreeNode; + stream->toTree = toTreeNode; + stream->nextNode = nextNodeNode; + stream->free = freeNodeRS; + + return stream; +} + +ANTLR3_API pANTLR3_REWRITE_RULE_NODE_STREAM +antlr3RewriteRuleNODEStreamNewAEV(pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_BASE_RECOGNIZER rec, pANTLR3_UINT8 description, pANTLR3_VECTOR vector) +{ + pANTLR3_REWRITE_RULE_NODE_STREAM stream; + + // First job is to create the memory we need. + // + stream = antlr3RewriteRuleElementStreamNewAEV(adaptor, rec, description, vector); + + // Install the Node based overrides + // + stream->dup = dupTreeNode; + stream->toTree = toTreeNode; + stream->nextNode = nextNodeNode; + stream->free = freeNodeRS; + + return stream; +} + +//---------------------------------------------------------------------- +// Static support functions + +/// Reset the condition of this stream so that it appears we have +/// not consumed any of its elements. Elements themselves are untouched. +/// +static void +reset (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream) +{ + stream->dirty = ANTLR3_TRUE; + stream->cursor = 0; +} + +// Add a new pANTLR3_BASE_TREE to this stream +// +static void +add (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * el, void (ANTLR3_CDECL *freePtr)(void *)) +{ + if (el== NULL) + { + return; + } + // As we may be reusing a stream, we may already have allocated + // a rewrite stream vector. If we have then is will be empty if + // we have either zero or just one element in the rewrite stream + // + if (stream->elements != NULL && stream->elements->count > 0) + { + // We already have >1 entries in the stream. So we can just add this new element to the existing + // collection. + // + stream->elements->add(stream->elements, el, freePtr); + return; + } + if (stream->singleElement == NULL) + { + stream->singleElement = el; + return; + } + + // If we got here then we had only the one element so far + // and we must now create a vector to hold a collection of them + // + if (stream->elements == NULL) + { + pANTLR3_VECTOR_FACTORY factory = ((pANTLR3_COMMON_TREE_ADAPTOR)(stream->adaptor->super))->arboretum->vFactory; + + + stream->elements = factory->newVector(factory); + stream->freeElements = ANTLR3_TRUE; // We 'ummed it, so we play it son. + } + + stream->elements->add (stream->elements, stream->singleElement, freePtr); + stream->elements->add (stream->elements, el, freePtr); + stream->singleElement = NULL; + + return; +} + +/// Return the next element in the stream. If out of elements, throw +/// an exception unless size()==1. If size is 1, then return elements[0]. +/// Return a duplicate node/subtree if stream is out of elements and +/// size==1. If we've already used the element, dup (dirty bit set). +/// +static pANTLR3_BASE_TREE +nextTree(pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream) +{ + ANTLR3_UINT32 n; + void * el; + + n = stream->size(stream); + + if ( stream->dirty || (stream->cursor >=n && n==1) ) + { + // if out of elements and size is 1, dup + // + el = stream->_next(stream); + return stream->dup(stream, el); + } + + // test size above then fetch + // + el = stream->_next(stream); + return el; +} + +/// Return the next element for a caller that wants just the token +/// +static void * +nextToken (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream) +{ + return stream->_next(stream); +} + +/// Return the next element in the stream. If out of elements, throw +/// an exception unless size()==1. If size is 1, then return elements[0]. +/// +static void * +next (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream) +{ + ANTLR3_UINT32 s; + + s = stream->size(stream); + if (stream->cursor >= s && s == 1) + { + pANTLR3_BASE_TREE el; + + el = stream->_next(stream); + + return stream->dup(stream, el); + } + + return stream->_next(stream); +} + +/// Do the work of getting the next element, making sure that it's +/// a tree node or subtree. Deal with the optimization of single- +/// element list versus list of size > 1. Throw an exception (or something similar) +/// if the stream is empty or we're out of elements and size>1. +/// You can override in a 'subclass' if necessary. +/// +static void * +_next (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream) +{ + ANTLR3_UINT32 n; + pANTLR3_BASE_TREE t; + + n = stream->size(stream); + + if (n == 0) + { + // This means that the stream is empty + // + return NULL; // Caller must cope with this + } + + // Traversed all the available elements already? + // + if (stream->cursor >= n) + { + if (n == 1) + { + // Special case when size is single element, it will just dup a lot + // + return stream->toTree(stream, stream->singleElement); + } + + // Out of elements and the size is not 1, so we cannot assume + // that we just duplicate the entry n times (such as ID ent+ -> ^(ID ent)+) + // This means we ran out of elements earlier than was expected. + // + return NULL; // Caller must cope with this + } + + // Elements available either for duping or just available + // + if (stream->singleElement != NULL) + { + stream->cursor++; // Cursor advances even for single element as this tells us to dup() + return stream->toTree(stream, stream->singleElement); + } + + // More than just a single element so we extract it from the + // vector. + // + t = stream->toTree(stream, stream->elements->get(stream->elements, stream->cursor)); + stream->cursor++; + return t; +} + +#ifdef ANTLR3_WINDOWS +#pragma warning(push) +#pragma warning(disable : 4100) +#endif +/// When constructing trees, sometimes we need to dup a token or AST +/// subtree. Dup'ing a token means just creating another AST node +/// around it. For trees, you must call the adaptor.dupTree(). +/// +static void * +dupTok (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * el) +{ + ANTLR3_FPRINTF(stderr, "dup() cannot be called on a token rewrite stream!!"); + return NULL; +} +#ifdef ANTLR3_WINDOWS +#pragma warning(pop) +#endif + +/// When constructing trees, sometimes we need to dup a token or AST +/// subtree. Dup'ing a token means just creating another AST node +/// around it. For trees, you must call the adaptor.dupTree(). +/// +static void * +dupTree (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * element) +{ + return stream->adaptor->dupNode(stream->adaptor, (pANTLR3_BASE_TREE)element); +} + +#ifdef ANTLR3_WINDOWS +#pragma warning(push) +#pragma warning(disable : 4100) +#endif +/// When constructing trees, sometimes we need to dup a token or AST +/// subtree. Dup'ing a token means just creating another AST node +/// around it. For trees, you must call the adaptor.dupTree(). +/// +static void * +dupTreeNode (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * element) +{ + ANTLR3_FPRINTF(stderr, "dup() cannot be called on a node rewrite stream!!!"); + return NULL; +} + + +/// We don;t explicitly convert to a tree unless the call goes to +/// nextTree, which means rewrites are heterogeneous +/// +static pANTLR3_BASE_TREE +toTree (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * element) +{ + return (pANTLR3_BASE_TREE)element; +} +#ifdef ANTLR3_WINDOWS +#pragma warning(pop) +#endif + +/// Ensure stream emits trees; tokens must be converted to AST nodes. +/// AST nodes can be passed through unmolested. +/// +#ifdef ANTLR3_WINDOWS +#pragma warning(push) +#pragma warning(disable : 4100) +#endif + +static pANTLR3_BASE_TREE +toTreeNode (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream, void * element) +{ + return stream->adaptor->dupNode(stream->adaptor, (pANTLR3_BASE_TREE)element); +} + +#ifdef ANTLR3_WINDOWS +#pragma warning(pop) +#endif + +/// Returns ANTLR3_TRUE if there is a next element available +/// +static ANTLR3_BOOLEAN +hasNext (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream) +{ + if ( (stream->singleElement != NULL && stream->cursor < 1) + || (stream->elements != NULL && stream->cursor < stream->elements->size(stream->elements))) + { + return ANTLR3_TRUE; + } + else + { + return ANTLR3_FALSE; + } +} + +/// Get the next token from the list and create a node for it +/// This is the implementation for token streams. +/// +static pANTLR3_BASE_TREE +nextNodeToken(pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream) +{ + return stream->adaptor->create(stream->adaptor, stream->_next(stream)); +} + +static pANTLR3_BASE_TREE +nextNodeNode(pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream) +{ + return stream->_next(stream); +} + +/// Treat next element as a single node even if it's a subtree. +/// This is used instead of next() when the result has to be a +/// tree root node. Also prevents us from duplicating recently-added +/// children; e.g., ^(type ID)+ adds ID to type and then 2nd iteration +/// must dup the type node, but ID has been added. +/// +/// Referencing to a rule result twice is ok; dup entire tree as +/// we can't be adding trees; e.g., expr expr. +/// +static pANTLR3_BASE_TREE +nextNode (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream) +{ + + ANTLR3_UINT32 n; + pANTLR3_BASE_TREE el = stream->_next(stream); + + n = stream->size(stream); + if (stream->dirty == ANTLR3_TRUE || (stream->cursor > n && n == 1)) + { + // We are out of elements and the size is 1, which means we just + // dup the node that we have + // + return stream->adaptor->dupNode(stream->adaptor, el); + } + + // We were not out of nodes, so the one we received is the one to return + // + return el; +} + +/// Number of elements available in the stream +/// +static ANTLR3_UINT32 +size (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream) +{ + ANTLR3_UINT32 n = 0; + + /// Should be a count of one if singleElement is set. I copied this + /// logic from the java implementation, which I suspect is just guarding + /// against someone setting singleElement and forgetting to NULL it out + /// + if (stream->singleElement != NULL) + { + n = 1; + } + else + { + if (stream->elements != NULL) + { + return (ANTLR3_UINT32)(stream->elements->count); + } + } + return n; +} + +/// Returns the description string if there is one available (check for NULL). +/// +static void * +getDescription (pANTLR3_REWRITE_RULE_ELEMENT_STREAM stream) +{ + if (stream->elementDescription == NULL) + { + stream->elementDescription = "<unknown source>"; + } + + return stream->elementDescription; +} diff --git a/antlr-3.1.3/runtime/C/src/antlr3string.c b/antlr-3.1.3/runtime/C/src/antlr3string.c new file mode 100644 index 0000000..7e1bd22 --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3string.c @@ -0,0 +1,1396 @@ +/** \file + * Implementation of the ANTLR3 string and string factory classes + */ + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3string.h> + +/* Factory API + */ +static pANTLR3_STRING newRaw8 (pANTLR3_STRING_FACTORY factory); +static pANTLR3_STRING newRaw16 (pANTLR3_STRING_FACTORY factory); +static pANTLR3_STRING newSize8 (pANTLR3_STRING_FACTORY factory, ANTLR3_UINT32 size); +static pANTLR3_STRING newSize16 (pANTLR3_STRING_FACTORY factory, ANTLR3_UINT32 size); +static pANTLR3_STRING newPtr8 (pANTLR3_STRING_FACTORY factory, pANTLR3_UINT8 string, ANTLR3_UINT32 size); +static pANTLR3_STRING newPtr16_8 (pANTLR3_STRING_FACTORY factory, pANTLR3_UINT8 string, ANTLR3_UINT32 size); +static pANTLR3_STRING newPtr16_16 (pANTLR3_STRING_FACTORY factory, pANTLR3_UINT8 string, ANTLR3_UINT32 size); +static pANTLR3_STRING newStr8 (pANTLR3_STRING_FACTORY factory, pANTLR3_UINT8 string); +static pANTLR3_STRING newStr16_8 (pANTLR3_STRING_FACTORY factory, pANTLR3_UINT8 string); +static pANTLR3_STRING newStr16_16 (pANTLR3_STRING_FACTORY factory, pANTLR3_UINT8 string); +static void destroy (pANTLR3_STRING_FACTORY factory, pANTLR3_STRING string); +static pANTLR3_STRING printable8 (pANTLR3_STRING_FACTORY factory, pANTLR3_STRING string); +static pANTLR3_STRING printable16 (pANTLR3_STRING_FACTORY factory, pANTLR3_STRING string); +static void closeFactory(pANTLR3_STRING_FACTORY factory); + +/* String API + */ +static pANTLR3_UINT8 set8 (pANTLR3_STRING string, const char * chars); +static pANTLR3_UINT8 set16_8 (pANTLR3_STRING string, const char * chars); +static pANTLR3_UINT8 set16_16 (pANTLR3_STRING string, const char * chars); +static pANTLR3_UINT8 append8 (pANTLR3_STRING string, const char * newbit); +static pANTLR3_UINT8 append16_8 (pANTLR3_STRING string, const char * newbit); +static pANTLR3_UINT8 append16_16 (pANTLR3_STRING string, const char * newbit); +static pANTLR3_UINT8 insert8 (pANTLR3_STRING string, ANTLR3_UINT32 point, const char * newbit); +static pANTLR3_UINT8 insert16_8 (pANTLR3_STRING string, ANTLR3_UINT32 point, const char * newbit); +static pANTLR3_UINT8 insert16_16 (pANTLR3_STRING string, ANTLR3_UINT32 point, const char * newbit); + +static pANTLR3_UINT8 setS (pANTLR3_STRING string, pANTLR3_STRING chars); +static pANTLR3_UINT8 appendS (pANTLR3_STRING string, pANTLR3_STRING newbit); +static pANTLR3_UINT8 insertS (pANTLR3_STRING string, ANTLR3_UINT32 point, pANTLR3_STRING newbit); + +static pANTLR3_UINT8 addc8 (pANTLR3_STRING string, ANTLR3_UINT32 c); +static pANTLR3_UINT8 addc16 (pANTLR3_STRING string, ANTLR3_UINT32 c); +static pANTLR3_UINT8 addi8 (pANTLR3_STRING string, ANTLR3_INT32 i); +static pANTLR3_UINT8 addi16 (pANTLR3_STRING string, ANTLR3_INT32 i); +static pANTLR3_UINT8 inserti8 (pANTLR3_STRING string, ANTLR3_UINT32 point, ANTLR3_INT32 i); +static pANTLR3_UINT8 inserti16 (pANTLR3_STRING string, ANTLR3_UINT32 point, ANTLR3_INT32 i); + +static ANTLR3_UINT32 compare8 (pANTLR3_STRING string, const char * compStr); +static ANTLR3_UINT32 compare16_8 (pANTLR3_STRING string, const char * compStr); +static ANTLR3_UINT32 compare16_16(pANTLR3_STRING string, const char * compStr); +static ANTLR3_UINT32 compareS (pANTLR3_STRING string, pANTLR3_STRING compStr); +static ANTLR3_UCHAR charAt8 (pANTLR3_STRING string, ANTLR3_UINT32 offset); +static ANTLR3_UCHAR charAt16 (pANTLR3_STRING string, ANTLR3_UINT32 offset); +static pANTLR3_STRING subString8 (pANTLR3_STRING string, ANTLR3_UINT32 startIndex, ANTLR3_UINT32 endIndex); +static pANTLR3_STRING subString16 (pANTLR3_STRING string, ANTLR3_UINT32 startIndex, ANTLR3_UINT32 endIndex); +static ANTLR3_INT32 toInt32_8 (pANTLR3_STRING string); +static ANTLR3_INT32 toInt32_16 (pANTLR3_STRING string); +static pANTLR3_STRING to8_8 (pANTLR3_STRING string); +static pANTLR3_STRING to8_16 (pANTLR3_STRING string); +static pANTLR3_STRING toUTF8_8 (pANTLR3_STRING string); +static pANTLR3_STRING toUTF8_16 (pANTLR3_STRING string); + +/* Local helpers + */ +static void stringInit8 (pANTLR3_STRING string); +static void stringInit16 (pANTLR3_STRING string); +static void ANTLR3_CDECL stringFree (pANTLR3_STRING string); + +ANTLR3_API pANTLR3_STRING_FACTORY +antlr3StringFactoryNew() +{ + pANTLR3_STRING_FACTORY factory; + + /* Allocate memory + */ + factory = (pANTLR3_STRING_FACTORY) ANTLR3_MALLOC(sizeof(ANTLR3_STRING_FACTORY)); + + if (factory == NULL) + { + return NULL; + } + + /* Now we make a new list to track the strings. + */ + factory->strings = antlr3VectorNew(0); + factory->index = 0; + + if (factory->strings == NULL) + { + ANTLR3_FREE(factory); + return NULL; + } + + /* Install the API (8 bit assumed) + */ + factory->newRaw = newRaw8; + factory->newSize = newSize8; + + factory->newPtr = newPtr8; + factory->newPtr8 = newPtr8; + factory->newStr = newStr8; + factory->newStr8 = newStr8; + factory->destroy = destroy; + factory->printable = printable8; + factory->destroy = destroy; + factory->close = closeFactory; + + return factory; +} + +/** Create a string factory that is UCS2 (16 bit) encoding based + */ +ANTLR3_API pANTLR3_STRING_FACTORY +antlr3UCS2StringFactoryNew() +{ + pANTLR3_STRING_FACTORY factory; + + /* Allocate an 8 bit factory, then override with 16 bit UCS2 functions where we + * need to. + */ + factory = antlr3StringFactoryNew(); + + if (factory == NULL) + { + return NULL; + } + + /* Override the 8 bit API with the UCS2 (mostly just 16 bit) API + */ + factory->newRaw = newRaw16; + factory->newSize = newSize16; + + factory->newPtr = newPtr16_16; + factory->newPtr8 = newPtr16_8; + factory->newStr = newStr16_16; + factory->newStr8 = newStr16_8; + factory->printable = printable16; + + factory->destroy = destroy; + factory->destroy = destroy; + factory->close = closeFactory; + + return factory; +} + +/** + * + * \param factory + * \return + */ +static pANTLR3_STRING +newRaw8 (pANTLR3_STRING_FACTORY factory) +{ + pANTLR3_STRING string; + + string = (pANTLR3_STRING) ANTLR3_MALLOC(sizeof(ANTLR3_STRING)); + + if (string == NULL) + { + return NULL; + } + + /* Structure is allocated, now fill in the API etc. + */ + stringInit8(string); + string->factory = factory; + + /* Add the string into the allocated list + */ + factory->strings->set(factory->strings, factory->index, (void *) string, (void (ANTLR3_CDECL *)(void *))(stringFree), ANTLR3_TRUE); + string->index = factory->index++; + + return string; +} +/** + * + * \param factory + * \return + */ +static pANTLR3_STRING +newRaw16 (pANTLR3_STRING_FACTORY factory) +{ + pANTLR3_STRING string; + + string = (pANTLR3_STRING) ANTLR3_MALLOC(sizeof(ANTLR3_STRING)); + + if (string == NULL) + { + return NULL; + } + + /* Structure is allocated, now fill in the API etc. + */ + stringInit16(string); + string->factory = factory; + + /* Add the string into the allocated list + */ + factory->strings->set(factory->strings, factory->index, (void *) string, (void (ANTLR3_CDECL *)(void *))(stringFree), ANTLR3_TRUE); + string->index = factory->index++; + + return string; +} +static +void ANTLR3_CDECL stringFree (pANTLR3_STRING string) +{ + /* First free the string itself if there was anything in it + */ + if (string->chars) + { + ANTLR3_FREE(string->chars); + } + + /* Now free the space for this string + */ + ANTLR3_FREE(string); + + return; +} +/** + * + * \param string + * \return + */ +static void +stringInit8 (pANTLR3_STRING string) +{ + string->len = 0; + string->size = 0; + string->chars = NULL; + string->encoding = ANTLR3_ENCODING_LATIN1; + + /* API for 8 bit strings*/ + + string->set = set8; + string->set8 = set8; + string->append = append8; + string->append8 = append8; + string->insert = insert8; + string->insert8 = insert8; + string->addi = addi8; + string->inserti = inserti8; + string->addc = addc8; + string->charAt = charAt8; + string->compare = compare8; + string->compare8 = compare8; + string->subString = subString8; + string->toInt32 = toInt32_8; + string->to8 = to8_8; + string->toUTF8 = toUTF8_8; + string->compareS = compareS; + string->setS = setS; + string->appendS = appendS; + string->insertS = insertS; + +} +/** + * + * \param string + * \return + */ +static void +stringInit16 (pANTLR3_STRING string) +{ + string->len = 0; + string->size = 0; + string->chars = NULL; + string->encoding = ANTLR3_ENCODING_UCS2; + + /* API for 16 bit strings */ + + string->set = set16_16; + string->set8 = set16_8; + string->append = append16_16; + string->append8 = append16_8; + string->insert = insert16_16; + string->insert8 = insert16_8; + string->addi = addi16; + string->inserti = inserti16; + string->addc = addc16; + string->charAt = charAt16; + string->compare = compare16_16; + string->compare8 = compare16_8; + string->subString = subString16; + string->toInt32 = toInt32_16; + string->to8 = to8_16; + string->toUTF8 = toUTF8_16; + + string->compareS = compareS; + string->setS = setS; + string->appendS = appendS; + string->insertS = insertS; +} +/** + * + * \param string + * \return + * TODO: Implement UTF-8 + */ +static void +stringInitUTF8 (pANTLR3_STRING string) +{ + string->len = 0; + string->size = 0; + string->chars = NULL; + + /* API */ + +} + +// Convert an 8 bit string into a UTF8 representation, which is in fact just the string itself +// a memcpy as we make no assumptions about the 8 bit encoding. +// +static pANTLR3_STRING +toUTF8_8 (pANTLR3_STRING string) +{ + return string->factory->newPtr(string->factory, (pANTLR3_UINT8)(string->chars), string->len); +} + +// Convert a 16 bit (UCS2) string into a UTF8 representation using the Unicode.org +// supplied C algorithms, which are now contained within the ANTLR3 C runtime +// as permitted by the Unicode license (within the source code antlr3convertutf.c/.h +// UCS2 has the same encoding as UTF16 so we can use UTF16 converter. +// +static pANTLR3_STRING +toUTF8_16 (pANTLR3_STRING string) +{ + + UTF8 * outputEnd; + UTF16 * inputEnd; + pANTLR3_STRING utf8String; + + ConversionResult cResult; + + // Allocate the output buffer, which needs to accommodate potentially + // 3X (in bytes) the input size (in chars). + // + utf8String = string->factory->newStr8(string->factory, (pANTLR3_UINT8)""); + + if (utf8String != NULL) + { + // Free existing allocation + // + ANTLR3_FREE(utf8String->chars); + + // Reallocate according to maximum expected size + // + utf8String->size = string->len *3; + utf8String->chars = (pANTLR3_UINT8)ANTLR3_MALLOC(utf8String->size +1); + + if (utf8String->chars != NULL) + { + inputEnd = (UTF16 *) (string->chars); + outputEnd = (UTF8 *) (utf8String->chars); + + // Call the Unicode converter + // + cResult = ConvertUTF16toUTF8 + ( + (const UTF16**)&inputEnd, + ((const UTF16 *)(string->chars)) + string->len, + &outputEnd, + outputEnd + utf8String->size - 1, + lenientConversion + ); + + // We don't really care if things failed or not here, we just converted + // everything that was vaguely possible and stopped when it wasn't. It is + // up to the grammar programmer to verify that the input is sensible. + // + utf8String->len = ANTLR3_UINT32_CAST(((pANTLR3_UINT8)outputEnd) - utf8String->chars); + + *(outputEnd+1) = '\0'; // Always null terminate + } + } + return utf8String; +} + +/** + * Creates a new string with enough capacity for size 8 bit characters plus a terminator. + * + * \param[in] factory - Pointer to the string factory that owns strings + * \param[in] size - In characters + * \return pointer to the new string. + */ +static pANTLR3_STRING +newSize8 (pANTLR3_STRING_FACTORY factory, ANTLR3_UINT32 size) +{ + pANTLR3_STRING string; + + string = factory->newRaw(factory); + + if (string == NULL) + { + return string; + } + + /* Always add one more byte for a terminator ;-) + */ + string->chars = (pANTLR3_UINT8) ANTLR3_MALLOC((size_t)(sizeof(ANTLR3_UINT8) * (size+1))); + *(string->chars) = '\0'; + string->size = size + 1; + + + return string; +} +/** + * Creates a new string with enough capacity for size 16 bit characters plus a terminator. + * + * \param[in] factory - POitner to the string factory that owns strings + * \param[in] size - In characters + * \return pointer to the new string. + */ +static pANTLR3_STRING +newSize16 (pANTLR3_STRING_FACTORY factory, ANTLR3_UINT32 size) +{ + pANTLR3_STRING string; + + string = factory->newRaw(factory); + + if (string == NULL) + { + return string; + } + + /* Always add one more byte for a terminator ;-) + */ + string->chars = (pANTLR3_UINT8) ANTLR3_MALLOC((size_t)(sizeof(ANTLR3_UINT16) * (size+1))); + *(string->chars) = '\0'; + string->size = size+1; /* Size is always in characters, as is len */ + + return string; +} + +/** Creates a new 8 bit string initialized with the 8 bit characters at the + * supplied ptr, of pre-determined size. + * \param[in] factory - Pointer to the string factory that owns the strings + * \param[in] ptr - Pointer to 8 bit encoded characters + * \return pointer to the new string + */ +static pANTLR3_STRING +newPtr8 (pANTLR3_STRING_FACTORY factory, pANTLR3_UINT8 ptr, ANTLR3_UINT32 size) +{ + pANTLR3_STRING string; + + string = factory->newSize(factory, size); + + if (string == NULL) + { + return NULL; + } + + if (size <= 0) + { + return string; + } + + if (ptr != NULL) + { + ANTLR3_MEMMOVE(string->chars, (const void *)ptr, size); + *(string->chars + size) = '\0'; /* Terminate, these strings are usually used for Token streams and printing etc. */ + string->len = size; + } + + return string; +} + +/** Creates a new 16 bit string initialized with the 8 bit characters at the + * supplied 8 bit character ptr, of pre-determined size. + * \param[in] factory - Pointer to the string factory that owns the strings + * \param[in] ptr - Pointer to 8 bit encoded characters + * \return pointer to the new string + */ +static pANTLR3_STRING +newPtr16_8 (pANTLR3_STRING_FACTORY factory, pANTLR3_UINT8 ptr, ANTLR3_UINT32 size) +{ + pANTLR3_STRING string; + + /* newSize accepts size in characters, not bytes + */ + string = factory->newSize(factory, size); + + if (string == NULL) + { + return NULL; + } + + if (size <= 0) + { + return string; + } + + if (ptr != NULL) + { + pANTLR3_UINT16 out; + ANTLR3_INT32 inSize; + + out = (pANTLR3_UINT16)(string->chars); + inSize = size; + + while (inSize-- > 0) + { + *out++ = (ANTLR3_UINT16)(*ptr++); + } + + /* Terminate, these strings are usually used for Token streams and printing etc. + */ + *(((pANTLR3_UINT16)(string->chars)) + size) = '\0'; + + string->len = size; + } + + return string; +} + +/** Creates a new 16 bit string initialized with the 16 bit characters at the + * supplied ptr, of pre-determined size. + * \param[in] factory - Pointer to the string factory that owns the strings + * \param[in] ptr - Pointer to 16 bit encoded characters + * \return pointer to the new string + */ +static pANTLR3_STRING +newPtr16_16 (pANTLR3_STRING_FACTORY factory, pANTLR3_UINT8 ptr, ANTLR3_UINT32 size) +{ + pANTLR3_STRING string; + + string = factory->newSize(factory, size); + + if (string == NULL) + { + return NULL; + } + + if (size <= 0) + { + return string; + } + + if (ptr != NULL) + { + ANTLR3_MEMMOVE(string->chars, (const void *)ptr, (size * sizeof(ANTLR3_UINT16))); + + /* Terminate, these strings are usually used for Token streams and printing etc. + */ + *(((pANTLR3_UINT16)(string->chars)) + size) = '\0'; + string->len = size; + } + + return string; +} + +/** Create a new 8 bit string from the supplied, null terminated, 8 bit string pointer. + * \param[in] factory - Pointer to the string factory that owns strings. + * \param[in] ptr - Pointer to the 8 bit encoded string + * \return Pointer to the newly initialized string + */ +static pANTLR3_STRING +newStr8 (pANTLR3_STRING_FACTORY factory, pANTLR3_UINT8 ptr) +{ + return factory->newPtr8(factory, ptr, (ANTLR3_UINT32)strlen((const char *)ptr)); +} + +/** Create a new 16 bit string from the supplied, null terminated, 8 bit string pointer. + * \param[in] factory - Pointer to the string factory that owns strings. + * \param[in] ptr - Pointer to the 8 bit encoded string + * \return POinter to the newly initialized string + */ +static pANTLR3_STRING +newStr16_8 (pANTLR3_STRING_FACTORY factory, pANTLR3_UINT8 ptr) +{ + return factory->newPtr8(factory, ptr, (ANTLR3_UINT32)strlen((const char *)ptr)); +} + +/** Create a new 16 bit string from the supplied, null terminated, 16 bit string pointer. + * \param[in] factory - Pointer to the string factory that owns strings. + * \param[in] ptr - Pointer to the 16 bit encoded string + * \return Pointer to the newly initialized string + */ +static pANTLR3_STRING +newStr16_16 (pANTLR3_STRING_FACTORY factory, pANTLR3_UINT8 ptr) +{ + pANTLR3_UINT16 in; + ANTLR3_UINT32 count; + + /** First, determine the length of the input string + */ + in = (pANTLR3_UINT16)ptr; + count = 0; + + while (*in++ != '\0') + { + count++; + } + return factory->newPtr(factory, ptr, count); +} + +static void +destroy (pANTLR3_STRING_FACTORY factory, pANTLR3_STRING string) +{ + // Record which string we are deleting + // + ANTLR3_UINT32 strIndex = string->index; + + // Ensure that the string was not factory made, or we would try + // to delete memory that wasn't allocated outside the factory + // block. + // Remove the specific indexed string from the vector + // + factory->strings->del(factory->strings, strIndex); + + // One less string in the vector, so decrement the factory index + // so that the next string allocated is indexed correctly with + // respect to the vector. + // + factory->index--; + + // Now we have to reindex the strings in the vector that followed + // the one we just deleted. We only do this if the one we just deleted + // was not the last one. + // + if (strIndex< factory->index) + { + // We must reindex the strings after the one we just deleted. + // The one that follows the one we just deleted is also out + // of whack, so we start there. + // + ANTLR3_UINT32 i; + + for (i = strIndex; i < factory->index; i++) + { + // Renumber the entry + // + ((pANTLR3_STRING)(factory->strings->elements[i].element))->index = i; + } + } + + // The string has been destroyed and the elements of the factory are reindexed. + // + +} + +static pANTLR3_STRING +printable8(pANTLR3_STRING_FACTORY factory, pANTLR3_STRING instr) +{ + pANTLR3_STRING string; + + /* We don't need to be too efficient here, this is mostly for error messages and so on. + */ + pANTLR3_UINT8 scannedText; + ANTLR3_UINT32 i; + + /* Assume we need as much as twice as much space to parse out the control characters + */ + string = factory->newSize(factory, instr->len *2 + 1); + + /* Scan through and replace unprintable (in terms of this routine) + * characters + */ + scannedText = string->chars; + + for (i = 0; i < instr->len; i++) + { + if (*(instr->chars + i) == '\n') + { + *scannedText++ = '\\'; + *scannedText++ = 'n'; + } + else if (*(instr->chars + i) == '\r') + { + *scannedText++ = '\\'; + *scannedText++ = 'r'; + } + else if (!isprint(*(instr->chars +i))) + { + *scannedText++ = '?'; + } + else + { + *scannedText++ = *(instr->chars + i); + } + } + *scannedText = '\0'; + + string->len = (ANTLR3_UINT32)(scannedText - string->chars); + + return string; +} + +static pANTLR3_STRING +printable16(pANTLR3_STRING_FACTORY factory, pANTLR3_STRING instr) +{ + pANTLR3_STRING string; + + /* We don't need to be too efficient here, this is mostly for error messages and so on. + */ + pANTLR3_UINT16 scannedText; + pANTLR3_UINT16 inText; + ANTLR3_UINT32 i; + ANTLR3_UINT32 outLen; + + /* Assume we need as much as twice as much space to parse out the control characters + */ + string = factory->newSize(factory, instr->len *2 + 1); + + /* Scan through and replace unprintable (in terms of this routine) + * characters + */ + scannedText = (pANTLR3_UINT16)(string->chars); + inText = (pANTLR3_UINT16)(instr->chars); + outLen = 0; + + for (i = 0; i < instr->len; i++) + { + if (*(inText + i) == '\n') + { + *scannedText++ = '\\'; + *scannedText++ = 'n'; + outLen += 2; + } + else if (*(inText + i) == '\r') + { + *scannedText++ = '\\'; + *scannedText++ = 'r'; + outLen += 2; + } + else if (!isprint(*(inText +i))) + { + *scannedText++ = '?'; + outLen++; + } + else + { + *scannedText++ = *(inText + i); + outLen++; + } + } + *scannedText = '\0'; + + string->len = outLen; + + return string; +} + +/** Fascist Capitalist Pig function created + * to oppress the workers comrade. + */ +static void +closeFactory (pANTLR3_STRING_FACTORY factory) +{ + /* Delete the vector we were tracking the strings with, this will + * causes all the allocated strings to be deallocated too + */ + factory->strings->free(factory->strings); + + /* Delete the space for the factory itself + */ + ANTLR3_FREE((void *)factory); +} + +static pANTLR3_UINT8 +append8 (pANTLR3_STRING string, const char * newbit) +{ + ANTLR3_UINT32 len; + + len = (ANTLR3_UINT32)strlen(newbit); + + if (string->size < (string->len + len + 1)) + { + string->chars = (pANTLR3_UINT8) ANTLR3_REALLOC((void *)string->chars, (ANTLR3_UINT32)(string->len + len + 1)); + string->size = string->len + len + 1; + } + + /* Note we copy one more byte than the strlen in order to get the trailing + */ + ANTLR3_MEMMOVE((void *)(string->chars + string->len), newbit, (ANTLR3_UINT32)(len+1)); + string->len += len; + + return string->chars; +} + +static pANTLR3_UINT8 +append16_8 (pANTLR3_STRING string, const char * newbit) +{ + ANTLR3_UINT32 len; + pANTLR3_UINT16 apPoint; + ANTLR3_UINT32 count; + + len = (ANTLR3_UINT32)strlen(newbit); + + if (string->size < (string->len + len + 1)) + { + string->chars = (pANTLR3_UINT8) ANTLR3_REALLOC((void *)string->chars, (ANTLR3_UINT32)((sizeof(ANTLR3_UINT16)*(string->len + len + 1)))); + string->size = string->len + len + 1; + } + + apPoint = ((pANTLR3_UINT16)string->chars) + string->len; + string->len += len; + + for (count = 0; count < len; count++) + { + *apPoint++ = *(newbit + count); + } + *apPoint = '\0'; + + return string->chars; +} + +static pANTLR3_UINT8 +append16_16 (pANTLR3_STRING string, const char * newbit) +{ + ANTLR3_UINT32 len; + pANTLR3_UINT16 in; + + /** First, determine the length of the input string + */ + in = (pANTLR3_UINT16)newbit; + len = 0; + + while (*in++ != '\0') + { + len++; + } + + if (string->size < (string->len + len + 1)) + { + string->chars = (pANTLR3_UINT8) ANTLR3_REALLOC((void *)string->chars, (ANTLR3_UINT32)( sizeof(ANTLR3_UINT16) *(string->len + len + 1) )); + string->size = string->len + len + 1; + } + + /* Note we copy one more byte than the strlen in order to get the trailing delimiter + */ + ANTLR3_MEMMOVE((void *)(((pANTLR3_UINT16)string->chars) + string->len), newbit, (ANTLR3_UINT32)(sizeof(ANTLR3_UINT16)*(len+1))); + string->len += len; + + return string->chars; +} + +static pANTLR3_UINT8 +set8 (pANTLR3_STRING string, const char * chars) +{ + ANTLR3_UINT32 len; + + len = (ANTLR3_UINT32)strlen(chars); + if (string->size < len + 1) + { + string->chars = (pANTLR3_UINT8) ANTLR3_REALLOC((void *)string->chars, (ANTLR3_UINT32)(len + 1)); + string->size = len + 1; + } + + /* Note we copy one more byte than the strlen in order to get the trailing '\0' + */ + ANTLR3_MEMMOVE((void *)(string->chars), chars, (ANTLR3_UINT32)(len+1)); + string->len = len; + + return string->chars; + +} + +static pANTLR3_UINT8 +set16_8 (pANTLR3_STRING string, const char * chars) +{ + ANTLR3_UINT32 len; + ANTLR3_UINT32 count; + pANTLR3_UINT16 apPoint; + + len = (ANTLR3_UINT32)strlen(chars); + if (string->size < len + 1) + { + string->chars = (pANTLR3_UINT8) ANTLR3_REALLOC((void *)string->chars, (ANTLR3_UINT32)(sizeof(ANTLR3_UINT16)*(len + 1))); + string->size = len + 1; + } + apPoint = ((pANTLR3_UINT16)string->chars); + string->len = len; + + for (count = 0; count < string->len; count++) + { + *apPoint++ = *(chars + count); + } + *apPoint = '\0'; + + return string->chars; +} + +static pANTLR3_UINT8 +set16_16 (pANTLR3_STRING string, const char * chars) +{ + ANTLR3_UINT32 len; + pANTLR3_UINT16 in; + + /** First, determine the length of the input string + */ + in = (pANTLR3_UINT16)chars; + len = 0; + + while (*in++ != '\0') + { + len++; + } + + if (string->size < len + 1) + { + string->chars = (pANTLR3_UINT8) ANTLR3_REALLOC((void *)string->chars, (ANTLR3_UINT32)(sizeof(ANTLR3_UINT16)*(len + 1))); + string->size = len + 1; + } + + /* Note we copy one more byte than the strlen in order to get the trailing '\0' + */ + ANTLR3_MEMMOVE((void *)(string->chars), chars, (ANTLR3_UINT32)((len+1) * sizeof(ANTLR3_UINT16))); + string->len = len; + + return string->chars; + +} + +static pANTLR3_UINT8 +addc8 (pANTLR3_STRING string, ANTLR3_UINT32 c) +{ + if (string->size < string->len + 2) + { + string->chars = (pANTLR3_UINT8) ANTLR3_REALLOC((void *)string->chars, (ANTLR3_UINT32)(string->len + 2)); + string->size = string->len + 2; + } + *(string->chars + string->len) = (ANTLR3_UINT8)c; + *(string->chars + string->len + 1) = '\0'; + string->len++; + + return string->chars; +} + +static pANTLR3_UINT8 +addc16 (pANTLR3_STRING string, ANTLR3_UINT32 c) +{ + pANTLR3_UINT16 ptr; + + if (string->size < string->len + 2) + { + string->chars = (pANTLR3_UINT8) ANTLR3_REALLOC((void *)string->chars, (ANTLR3_UINT32)(sizeof(ANTLR3_UINT16) * (string->len + 2))); + string->size = string->len + 2; + } + ptr = (pANTLR3_UINT16)(string->chars); + + *(ptr + string->len) = (ANTLR3_UINT16)c; + *(ptr + string->len + 1) = '\0'; + string->len++; + + return string->chars; +} + +static pANTLR3_UINT8 +addi8 (pANTLR3_STRING string, ANTLR3_INT32 i) +{ + ANTLR3_UINT8 newbit[32]; + + sprintf((char *)newbit, "%d", i); + + return string->append8(string, (const char *)newbit); +} +static pANTLR3_UINT8 +addi16 (pANTLR3_STRING string, ANTLR3_INT32 i) +{ + ANTLR3_UINT8 newbit[32]; + + sprintf((char *)newbit, "%d", i); + + return string->append8(string, (const char *)newbit); +} + +static pANTLR3_UINT8 +inserti8 (pANTLR3_STRING string, ANTLR3_UINT32 point, ANTLR3_INT32 i) +{ + ANTLR3_UINT8 newbit[32]; + + sprintf((char *)newbit, "%d", i); + return string->insert8(string, point, (const char *)newbit); +} +static pANTLR3_UINT8 +inserti16 (pANTLR3_STRING string, ANTLR3_UINT32 point, ANTLR3_INT32 i) +{ + ANTLR3_UINT8 newbit[32]; + + sprintf((char *)newbit, "%d", i); + return string->insert8(string, point, (const char *)newbit); +} + +static pANTLR3_UINT8 +insert8 (pANTLR3_STRING string, ANTLR3_UINT32 point, const char * newbit) +{ + ANTLR3_UINT32 len; + + if (point >= string->len) + { + return string->append(string, newbit); + } + + len = (ANTLR3_UINT32)strlen(newbit); + + if (len == 0) + { + return string->chars; + } + + if (string->size < (string->len + len + 1)) + { + string->chars = (pANTLR3_UINT8) ANTLR3_REALLOC((void *)string->chars, (ANTLR3_UINT32)(string->len + len + 1)); + string->size = string->len + len + 1; + } + + /* Move the characters we are inserting before, including the delimiter + */ + ANTLR3_MEMMOVE((void *)(string->chars + point + len), (void *)(string->chars + point), (ANTLR3_UINT32)(string->len - point + 1)); + + /* Note we copy the exact number of bytes + */ + ANTLR3_MEMMOVE((void *)(string->chars + point), newbit, (ANTLR3_UINT32)(len)); + + string->len += len; + + return string->chars; +} + +static pANTLR3_UINT8 +insert16_8 (pANTLR3_STRING string, ANTLR3_UINT32 point, const char * newbit) +{ + ANTLR3_UINT32 len; + ANTLR3_UINT32 count; + pANTLR3_UINT16 inPoint; + + if (point >= string->len) + { + return string->append8(string, newbit); + } + + len = (ANTLR3_UINT32)strlen(newbit); + + if (len == 0) + { + return string->chars; + } + + if (string->size < (string->len + len + 1)) + { + string->chars = (pANTLR3_UINT8) ANTLR3_REALLOC((void *)string->chars, (ANTLR3_UINT32)(sizeof(ANTLR3_UINT16)*(string->len + len + 1))); + string->size = string->len + len + 1; + } + + /* Move the characters we are inserting before, including the delimiter + */ + ANTLR3_MEMMOVE((void *)(((pANTLR3_UINT16)string->chars) + point + len), (void *)(((pANTLR3_UINT16)string->chars) + point), (ANTLR3_UINT32)(sizeof(ANTLR3_UINT16)*(string->len - point + 1))); + + string->len += len; + + inPoint = ((pANTLR3_UINT16)(string->chars))+point; + for (count = 0; count<len; count++) + { + *(inPoint + count) = (ANTLR3_UINT16)(*(newbit+count)); + } + + return string->chars; +} + +static pANTLR3_UINT8 +insert16_16 (pANTLR3_STRING string, ANTLR3_UINT32 point, const char * newbit) +{ + ANTLR3_UINT32 len; + pANTLR3_UINT16 in; + + if (point >= string->len) + { + return string->append(string, newbit); + } + + /** First, determine the length of the input string + */ + in = (pANTLR3_UINT16)newbit; + len = 0; + + while (*in++ != '\0') + { + len++; + } + + if (len == 0) + { + return string->chars; + } + + if (string->size < (string->len + len + 1)) + { + string->chars = (pANTLR3_UINT8) ANTLR3_REALLOC((void *)string->chars, (ANTLR3_UINT32)(sizeof(ANTLR3_UINT16)*(string->len + len + 1))); + string->size = string->len + len + 1; + } + + /* Move the characters we are inserting before, including the delimiter + */ + ANTLR3_MEMMOVE((void *)(((pANTLR3_UINT16)string->chars) + point + len), (void *)(((pANTLR3_UINT16)string->chars) + point), (ANTLR3_UINT32)(sizeof(ANTLR3_UINT16)*(string->len - point + 1))); + + + /* Note we copy the exact number of characters + */ + ANTLR3_MEMMOVE((void *)(((pANTLR3_UINT16)string->chars) + point), newbit, (ANTLR3_UINT32)(sizeof(ANTLR3_UINT16)*(len))); + + string->len += len; + + return string->chars; +} + +static pANTLR3_UINT8 setS (pANTLR3_STRING string, pANTLR3_STRING chars) +{ + return string->set(string, (const char *)(chars->chars)); +} + +static pANTLR3_UINT8 appendS (pANTLR3_STRING string, pANTLR3_STRING newbit) +{ + /* We may be passed an empty string, in which case we just return the current pointer + */ + if (newbit == NULL || newbit->len == 0 || newbit->size == 0 || newbit->chars == NULL) + { + return string->chars; + } + else + { + return string->append(string, (const char *)(newbit->chars)); + } +} + +static pANTLR3_UINT8 insertS (pANTLR3_STRING string, ANTLR3_UINT32 point, pANTLR3_STRING newbit) +{ + return string->insert(string, point, (const char *)(newbit->chars)); +} + +/* Function that compares the text of a string to the supplied + * 8 bit character string and returns a result a la strcmp() + */ +static ANTLR3_UINT32 +compare8 (pANTLR3_STRING string, const char * compStr) +{ + return strcmp((const char *)(string->chars), compStr); +} + +/* Function that compares the text of a string with the supplied character string + * (which is assumed to be in the same encoding as the string itself) and returns a result + * a la strcmp() + */ +static ANTLR3_UINT32 +compare16_8 (pANTLR3_STRING string, const char * compStr) +{ + pANTLR3_UINT16 ourString; + ANTLR3_UINT32 charDiff; + + ourString = (pANTLR3_UINT16)(string->chars); + + while (((ANTLR3_UCHAR)(*ourString) != '\0') && ((ANTLR3_UCHAR)(*compStr) != '\0')) + { + charDiff = *ourString - *compStr; + if (charDiff != 0) + { + return charDiff; + } + ourString++; + compStr++; + } + + /* At this point, one of the strings was terminated + */ + return (ANTLR3_UINT32)((ANTLR3_UCHAR)(*ourString) - (ANTLR3_UCHAR)(*compStr)); + +} + +/* Function that compares the text of a string with the supplied character string + * (which is assumed to be in the same encoding as the string itself) and returns a result + * a la strcmp() + */ +static ANTLR3_UINT32 +compare16_16 (pANTLR3_STRING string, const char * compStr8) +{ + pANTLR3_UINT16 ourString; + pANTLR3_UINT16 compStr; + ANTLR3_UINT32 charDiff; + + ourString = (pANTLR3_UINT16)(string->chars); + compStr = (pANTLR3_UINT16)(compStr8); + + while (((ANTLR3_UCHAR)(*ourString) != '\0') && ((ANTLR3_UCHAR)(*((pANTLR3_UINT16)compStr)) != '\0')) + { + charDiff = *ourString - *compStr; + if (charDiff != 0) + { + return charDiff; + } + ourString++; + compStr++; + } + + /* At this point, one of the strings was terminated + */ + return (ANTLR3_UINT32)((ANTLR3_UCHAR)(*ourString) - (ANTLR3_UCHAR)(*compStr)); +} + +/* Function that compares the text of a string with the supplied string + * (which is assumed to be in the same encoding as the string itself) and returns a result + * a la strcmp() + */ +static ANTLR3_UINT32 +compareS (pANTLR3_STRING string, pANTLR3_STRING compStr) +{ + return string->compare(string, (const char *)compStr->chars); +} + + +/* Function that returns the character indexed at the supplied + * offset as a 32 bit character. + */ +static ANTLR3_UCHAR +charAt8 (pANTLR3_STRING string, ANTLR3_UINT32 offset) +{ + if (offset > string->len) + { + return (ANTLR3_UCHAR)'\0'; + } + else + { + return (ANTLR3_UCHAR)(*(string->chars + offset)); + } +} + +/* Function that returns the character indexed at the supplied + * offset as a 32 bit character. + */ +static ANTLR3_UCHAR +charAt16 (pANTLR3_STRING string, ANTLR3_UINT32 offset) +{ + if (offset > string->len) + { + return (ANTLR3_UCHAR)'\0'; + } + else + { + return (ANTLR3_UCHAR)(*((pANTLR3_UINT16)(string->chars) + offset)); + } +} + +/* Function that returns a substring of the supplied string a la .subString(s,e) + * in java runtimes. + */ +static pANTLR3_STRING +subString8 (pANTLR3_STRING string, ANTLR3_UINT32 startIndex, ANTLR3_UINT32 endIndex) +{ + pANTLR3_STRING newStr; + + if (endIndex > string->len) + { + endIndex = string->len + 1; + } + newStr = string->factory->newPtr(string->factory, string->chars + startIndex, endIndex - startIndex); + + return newStr; +} + +/* Returns a substring of the supplied string a la .subString(s,e) + * in java runtimes. + */ +static pANTLR3_STRING +subString16 (pANTLR3_STRING string, ANTLR3_UINT32 startIndex, ANTLR3_UINT32 endIndex) +{ + pANTLR3_STRING newStr; + + if (endIndex > string->len) + { + endIndex = string->len + 1; + } + newStr = string->factory->newPtr(string->factory, (pANTLR3_UINT8)((pANTLR3_UINT16)(string->chars) + startIndex), endIndex - startIndex); + + return newStr; +} + +/* Function that can convert the characters in the string to an integer + */ +static ANTLR3_INT32 +toInt32_8 (struct ANTLR3_STRING_struct * string) +{ + return atoi((const char *)(string->chars)); +} + +/* Function that can convert the characters in the string to an integer + */ +static ANTLR3_INT32 +toInt32_16 (struct ANTLR3_STRING_struct * string) +{ + pANTLR3_UINT16 input; + ANTLR3_INT32 value; + ANTLR3_BOOLEAN negate; + + value = 0; + input = (pANTLR3_UINT16)(string->chars); + negate = ANTLR3_FALSE; + + if (*input == (ANTLR3_UCHAR)'-') + { + negate = ANTLR3_TRUE; + input++; + } + else if (*input == (ANTLR3_UCHAR)'+') + { + input++; + } + + while (*input != '\0' && isdigit(*input)) + { + value = value * 10; + value += ((ANTLR3_UINT32)(*input) - (ANTLR3_UINT32)'0'); + input++; + } + + return negate ? -value : value; +} + +/* Function that returns a pointer to an 8 bit version of the string, + * which in this case is just the string as this is + * 8 bit encodiing anyway. + */ +static pANTLR3_STRING to8_8 (pANTLR3_STRING string) +{ + return string; +} + +/* Function that returns an 8 bit version of the string, + * which in this case is returning all the 16 bit characters + * narrowed back into 8 bits, with characters that are too large + * replaced with '_' + */ +static pANTLR3_STRING to8_16 (pANTLR3_STRING string) +{ + pANTLR3_STRING newStr; + ANTLR3_UINT32 i; + + /* Create a new 8 bit string + */ + newStr = newRaw8(string->factory); + + if (newStr == NULL) + { + return NULL; + } + + /* Always add one more byte for a terminator + */ + newStr->chars = (pANTLR3_UINT8) ANTLR3_MALLOC((size_t)(string->len + 1)); + newStr->size = string->len + 1; + newStr->len = string->len; + + /* Now copy each 16 bit charActer , making it an 8 bit character of + * some sort. + */ + for (i=0; i<string->len; i++) + { + ANTLR3_UCHAR c; + + c = *(((pANTLR3_UINT16)(string->chars)) + i); + + *(newStr->chars + i) = (ANTLR3_UINT8)(c > 255 ? '_' : c); + } + + /* Terminate + */ + *(newStr->chars + newStr->len) = '\0'; + + return newStr; +} diff --git a/antlr-3.1.3/runtime/C/src/antlr3stringstream.c b/antlr-3.1.3/runtime/C/src/antlr3stringstream.c new file mode 100644 index 0000000..a0c3f99 --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3stringstream.c @@ -0,0 +1,206 @@ +/// \file +/// Provides implementations of string (or memory) streams as input +/// for ANLTR3 lexers. +/// + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3.h> + +/// \brief Create an in-place ASCII string stream as input to ANTLR 3. +/// +/// An in-place string steam is the preferred method of supplying strings to ANTLR as input +/// for lexing and compiling. This is because we make no copies of the input string but +/// read from it right where it is. +/// +/// \param[in] inString Pointer to the string to be used as the input stream +/// \param[in] size Size (in 8 bit ASCII characters) of the input string +/// \param[in] name NAme to attach the input stream (can be NULL pointer) +/// +/// \return +/// - Pointer to new input stream context upon success +/// - One of the ANTLR3_ERR_ defines on error. +/// +/// \remark +/// - ANTLR does not alter the input string in any way. +/// - String is slightly incorrect in that the passed in pointer can be to any +/// memory in C version of ANTLR3 of course. +//// +ANTLR3_API pANTLR3_INPUT_STREAM +antlr3NewAsciiStringInPlaceStream (pANTLR3_UINT8 inString, ANTLR3_UINT32 size, pANTLR3_UINT8 name) +{ + // Pointer to the input stream we are going to create + // + pANTLR3_INPUT_STREAM input; + + // Allocate memory for the input stream structure + // + input = (pANTLR3_INPUT_STREAM) + ANTLR3_MALLOC(sizeof(ANTLR3_INPUT_STREAM)); + + if (input == NULL) + { + return NULL; + } + + // Structure was allocated correctly, now we can install the pointer. + // + input->isAllocated = ANTLR3_FALSE; + input->data = inString; + input->sizeBuf = size; + + // Call the common 8 bit ASCII input stream handler initializer. + // + antlr3AsciiSetupStream(input, ANTLR3_CHARSTREAM); + + // Now we can set up the file name + // + input->istream->streamName = input->strFactory->newStr(input->strFactory, name == NULL ? (pANTLR3_UINT8)"-memory-" : name); + input->fileName = input->istream->streamName; + + return input; +} + +/// \brief Create an in-place UCS2 string stream as input to ANTLR 3. +/// +/// An in-place string steam is the preferred method of supplying strings to ANTLR as input +/// for lexing and compiling. This is because we make no copies of the input string but +/// read from it right where it is. +/// +/// \param[in] inString Pointer to the string to be used as the input stream +/// \param[in] size Size (in 16 bit ASCII characters) of the input string +/// \param[in] name Name to attach the input stream (can be NULL pointer) +/// +/// \return +/// - Pointer to new input stream context upon success +/// - One of the ANTLR3_ERR_ defines on error. +/// +/// \remark +/// - ANTLR does not alter the input string in any way. +/// - String is slightly incorrect in that the passed in pointer can be to any +/// memory in C version of ANTLR3 of course. +//// +ANTLR3_API pANTLR3_INPUT_STREAM +antlr3NewUCS2StringInPlaceStream (pANTLR3_UINT16 inString, ANTLR3_UINT32 size, pANTLR3_UINT16 name) +{ + // Pointer to the input stream we are going to create + // + pANTLR3_INPUT_STREAM input; + + // Layout default file name string in correct encoding + // + ANTLR3_UINT16 defaultName[] = { '-', 'm', 'e', 'm', 'o', 'r', 'y', '-', '\0' }; + + // Allocate memory for the input stream structure + // + input = (pANTLR3_INPUT_STREAM) + ANTLR3_MALLOC(sizeof(ANTLR3_INPUT_STREAM)); + + if (input == NULL) + { + return NULL; + } + + // Structure was allocated correctly, now we can install the pointer. + // + input->isAllocated = ANTLR3_FALSE; + input->data = inString; + input->sizeBuf = size; + + // Call the common 16 bit input stream handler initializer. + // + antlr3UCS2SetupStream (input, ANTLR3_CHARSTREAM); + + input->istream->streamName = input->strFactory->newStr(input->strFactory, name == NULL ? (pANTLR3_UINT8)defaultName : (pANTLR3_UINT8)name); + input->fileName = input->istream->streamName; + + + return input; +} + +/// \brief Create an ASCII string stream as input to ANTLR 3, copying the input string. +/// +/// This string stream first makes a copy of the string at the supplied pointer +/// +/// \param[in] inString Pointer to the string to be copied as the input stream +/// \param[in] size Size (in 8 bit ASCII characters) of the input string +/// \param[in] name NAme to attach the input stream (can be NULL pointer) +/// +/// \return +/// - Pointer to new input stream context upon success +/// - One of the ANTLR3_ERR_ defines on error. +/// +/// \remark +/// - ANTLR does not alter the input string in any way. +/// - String is slightly incorrect in that the passed in pointer can be to any +/// memory in C version of ANTLR3 of course. +//// +pANTLR3_INPUT_STREAM antlr3NewAsciiStringCopyStream (pANTLR3_UINT8 inString, ANTLR3_UINT32 size, pANTLR3_UINT8 name) +{ + // Pointer to the input stream we are going to create + // + pANTLR3_INPUT_STREAM input; + + // Allocate memory for the input stream structure + // + input = (pANTLR3_INPUT_STREAM) + ANTLR3_MALLOC(sizeof(ANTLR3_INPUT_STREAM)); + + if (input == NULL) + { + return NULL; + } + + // Indicate that we allocated this input and allocate it + // + input->isAllocated = ANTLR3_TRUE; + input->data = ANTLR3_MALLOC((size_t)size); + + if (input->data == NULL) + { + return NULL; + } + + // Structure was allocated correctly, now we can install the pointer and set the size. + // + ANTLR3_MEMMOVE(input->data, (const void *)inString, size); + input->sizeBuf = size; + + // Call the common 8 bit ASCII input stream handler + // initializer type thingy doobry function. + // + antlr3AsciiSetupStream(input, ANTLR3_CHARSTREAM); + + + input->istream->streamName = input->strFactory->newStr(input->strFactory, name == NULL ? (pANTLR3_UINT8)"-memory-" : name); + input->fileName = input->istream->streamName; + + return input; +} diff --git a/antlr-3.1.3/runtime/C/src/antlr3tokenstream.c b/antlr-3.1.3/runtime/C/src/antlr3tokenstream.c new file mode 100644 index 0000000..4004759 --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3tokenstream.c @@ -0,0 +1,1042 @@ +/// \file +/// Default implementation of CommonTokenStream +/// + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3tokenstream.h> + +#ifdef ANTLR3_WINDOWS +#pragma warning( disable : 4100 ) +#endif + +// COMMON_TOKEN_STREAM API +// +static void setTokenTypeChannel (pANTLR3_COMMON_TOKEN_STREAM cts, ANTLR3_UINT32 ttype, ANTLR3_UINT32 channel); +static void discardTokenType (pANTLR3_COMMON_TOKEN_STREAM cts, ANTLR3_INT32 ttype); +static void discardOffChannel (pANTLR3_COMMON_TOKEN_STREAM cts, ANTLR3_BOOLEAN discard); +static pANTLR3_VECTOR getTokens (pANTLR3_COMMON_TOKEN_STREAM cts); +static pANTLR3_LIST getTokenRange (pANTLR3_COMMON_TOKEN_STREAM cts, ANTLR3_UINT32 start, ANTLR3_UINT32 stop); +static pANTLR3_LIST getTokensSet (pANTLR3_COMMON_TOKEN_STREAM cts, ANTLR3_UINT32 start, ANTLR3_UINT32 stop, pANTLR3_BITSET types); +static pANTLR3_LIST getTokensList (pANTLR3_COMMON_TOKEN_STREAM cts, ANTLR3_UINT32 start, ANTLR3_UINT32 stop, pANTLR3_LIST list); +static pANTLR3_LIST getTokensType (pANTLR3_COMMON_TOKEN_STREAM cts, ANTLR3_UINT32 start, ANTLR3_UINT32 stop, ANTLR3_UINT32 type); + +// TOKEN_STREAM API +// +static pANTLR3_COMMON_TOKEN tokLT (pANTLR3_TOKEN_STREAM ts, ANTLR3_INT32 k); +static pANTLR3_COMMON_TOKEN dbgTokLT (pANTLR3_TOKEN_STREAM ts, ANTLR3_INT32 k); +static pANTLR3_COMMON_TOKEN get (pANTLR3_TOKEN_STREAM ts, ANTLR3_UINT32 i); +static pANTLR3_TOKEN_SOURCE getTokenSource (pANTLR3_TOKEN_STREAM ts); +static void setTokenSource (pANTLR3_TOKEN_STREAM ts, pANTLR3_TOKEN_SOURCE tokenSource); +static pANTLR3_STRING toString (pANTLR3_TOKEN_STREAM ts); +static pANTLR3_STRING toStringSS (pANTLR3_TOKEN_STREAM ts, ANTLR3_UINT32 start, ANTLR3_UINT32 stop); +static pANTLR3_STRING toStringTT (pANTLR3_TOKEN_STREAM ts, pANTLR3_COMMON_TOKEN start, pANTLR3_COMMON_TOKEN stop); +static void setDebugListener (pANTLR3_TOKEN_STREAM ts, pANTLR3_DEBUG_EVENT_LISTENER debugger); + +// INT STREAM API +// +static void consume (pANTLR3_INT_STREAM is); +static void dbgConsume (pANTLR3_INT_STREAM is); +static ANTLR3_UINT32 _LA (pANTLR3_INT_STREAM is, ANTLR3_INT32 i); +static ANTLR3_UINT32 dbgLA (pANTLR3_INT_STREAM is, ANTLR3_INT32 i); +static ANTLR3_MARKER mark (pANTLR3_INT_STREAM is); +static ANTLR3_MARKER dbgMark (pANTLR3_INT_STREAM is); +static void release (pANTLR3_INT_STREAM is, ANTLR3_MARKER mark); +static ANTLR3_UINT32 size (pANTLR3_INT_STREAM is); +static ANTLR3_MARKER tindex (pANTLR3_INT_STREAM is); +static void rewindStream (pANTLR3_INT_STREAM is, ANTLR3_MARKER marker); +static void dbgRewindStream (pANTLR3_INT_STREAM is, ANTLR3_MARKER marker); +static void rewindLast (pANTLR3_INT_STREAM is); +static void dbgRewindLast (pANTLR3_INT_STREAM is); +static void seek (pANTLR3_INT_STREAM is, ANTLR3_MARKER index); +static void dbgSeek (pANTLR3_INT_STREAM is, ANTLR3_MARKER index); +static pANTLR3_STRING getSourceName (pANTLR3_INT_STREAM is); +static void antlr3TokenStreamFree (pANTLR3_TOKEN_STREAM stream); +static void antlr3CTSFree (pANTLR3_COMMON_TOKEN_STREAM stream); + +// Helpers +// +static void fillBuffer (pANTLR3_COMMON_TOKEN_STREAM tokenStream); +static ANTLR3_UINT32 skipOffTokenChannels (pANTLR3_COMMON_TOKEN_STREAM tokenStream, ANTLR3_INT32 i); +static ANTLR3_UINT32 skipOffTokenChannelsReverse (pANTLR3_COMMON_TOKEN_STREAM tokenStream, ANTLR3_INT32 i); +static pANTLR3_COMMON_TOKEN LB (pANTLR3_COMMON_TOKEN_STREAM tokenStream, ANTLR3_INT32 i); + +ANTLR3_API pANTLR3_TOKEN_STREAM +antlr3TokenStreamNew() +{ + pANTLR3_TOKEN_STREAM stream; + + // Memory for the interface structure + // + stream = (pANTLR3_TOKEN_STREAM) ANTLR3_MALLOC(sizeof(ANTLR3_TOKEN_STREAM)); + + if (stream == NULL) + { + return NULL; + } + + // Install basic API + // + stream->free = antlr3TokenStreamFree; + + + return stream; +} + +static void +antlr3TokenStreamFree(pANTLR3_TOKEN_STREAM stream) +{ + ANTLR3_FREE(stream); +} + +static void +antlr3CTSFree (pANTLR3_COMMON_TOKEN_STREAM stream) +{ + // We only free up our subordinate interfaces if they belong + // to us, otherwise we let whoever owns them deal with them. + // + if (stream->tstream->super == stream) + { + if (stream->tstream->istream->super == stream->tstream) + { + stream->tstream->istream->free(stream->tstream->istream); + stream->tstream->istream = NULL; + } + stream->tstream->free(stream->tstream); + } + + // Now we free our own resources + // + if (stream->tokens != NULL) + { + stream->tokens->free(stream->tokens); + stream->tokens = NULL; + } + if (stream->discardSet != NULL) + { + stream->discardSet->free(stream->discardSet); + stream->discardSet = NULL; + } + if (stream->channelOverrides != NULL) + { + stream->channelOverrides->free(stream->channelOverrides); + stream->channelOverrides = NULL; + } + + // Free our memory now + // + ANTLR3_FREE(stream); +} + +ANTLR3_API pANTLR3_COMMON_TOKEN_STREAM +antlr3CommonTokenDebugStreamSourceNew(ANTLR3_UINT32 hint, pANTLR3_TOKEN_SOURCE source, pANTLR3_DEBUG_EVENT_LISTENER debugger) +{ + pANTLR3_COMMON_TOKEN_STREAM stream; + + // Create a standard token stream + // + stream = antlr3CommonTokenStreamSourceNew(hint, source); + + // Install the debugger object + // + stream->tstream->debugger = debugger; + + // Override standard token stream methods with debugging versions + // + stream->tstream->initialStreamState = ANTLR3_FALSE; + + stream->tstream->_LT = dbgTokLT; + + stream->tstream->istream->consume = dbgConsume; + stream->tstream->istream->_LA = dbgLA; + stream->tstream->istream->mark = dbgMark; + stream->tstream->istream->rewind = dbgRewindStream; + stream->tstream->istream->rewindLast = dbgRewindLast; + stream->tstream->istream->seek = dbgSeek; + + return stream; +} + +ANTLR3_API pANTLR3_COMMON_TOKEN_STREAM +antlr3CommonTokenStreamSourceNew(ANTLR3_UINT32 hint, pANTLR3_TOKEN_SOURCE source) +{ + pANTLR3_COMMON_TOKEN_STREAM stream; + + stream = antlr3CommonTokenStreamNew(hint); + + stream->channel = ANTLR3_TOKEN_DEFAULT_CHANNEL; + + stream->channelOverrides = NULL; + stream->discardSet = NULL; + stream->discardOffChannel = ANTLR3_FALSE; + + stream->tstream->setTokenSource(stream->tstream, source); + + stream->free = antlr3CTSFree; + return stream; +} + +ANTLR3_API pANTLR3_COMMON_TOKEN_STREAM +antlr3CommonTokenStreamNew(ANTLR3_UINT32 hint) +{ + pANTLR3_COMMON_TOKEN_STREAM stream; + + /* Memory for the interface structure + */ + stream = (pANTLR3_COMMON_TOKEN_STREAM) ANTLR3_MALLOC(sizeof(ANTLR3_COMMON_TOKEN_STREAM)); + + if (stream == NULL) + { + return NULL; + } + + /* Create space for the token stream interface + */ + stream->tstream = antlr3TokenStreamNew(); + stream->tstream->super = stream; + + /* Create space for the INT_STREAM interfacce + */ + stream->tstream->istream = antlr3IntStreamNew(); + stream->tstream->istream->super = (stream->tstream); + stream->tstream->istream->type = ANTLR3_TOKENSTREAM; + + /* Install the token tracking tables + */ + stream->tokens = antlr3VectorNew(0); + + /* Defaults + */ + stream->p = -1; + + /* Install the common token stream API + */ + stream->setTokenTypeChannel = setTokenTypeChannel; + stream->discardTokenType = discardTokenType; + stream->discardOffChannelToks = discardOffChannel; + stream->getTokens = getTokens; + stream->getTokenRange = getTokenRange; + stream->getTokensSet = getTokensSet; + stream->getTokensList = getTokensList; + stream->getTokensType = getTokensType; + + /* Install the token stream API + */ + stream->tstream->_LT = tokLT; + stream->tstream->get = get; + stream->tstream->getTokenSource = getTokenSource; + stream->tstream->setTokenSource = setTokenSource; + stream->tstream->toString = toString; + stream->tstream->toStringSS = toStringSS; + stream->tstream->toStringTT = toStringTT; + stream->tstream->setDebugListener = setDebugListener; + + /* Install INT_STREAM interface + */ + stream->tstream->istream->_LA = _LA; + stream->tstream->istream->mark = mark; + stream->tstream->istream->release = release; + stream->tstream->istream->size = size; + stream->tstream->istream->index = tindex; + stream->tstream->istream->rewind = rewindStream; + stream->tstream->istream->rewindLast= rewindLast; + stream->tstream->istream->seek = seek; + stream->tstream->istream->consume = consume; + stream->tstream->istream->getSourceName = getSourceName; + + return stream; +} + +// Install a debug listener adn switch to debug mode methods +// +static void +setDebugListener (pANTLR3_TOKEN_STREAM ts, pANTLR3_DEBUG_EVENT_LISTENER debugger) +{ + // Install the debugger object + // + ts->debugger = debugger; + + // Override standard token stream methods with debugging versions + // + ts->initialStreamState = ANTLR3_FALSE; + + ts->_LT = dbgTokLT; + + ts->istream->consume = dbgConsume; + ts->istream->_LA = dbgLA; + ts->istream->mark = dbgMark; + ts->istream->rewind = dbgRewindStream; + ts->istream->rewindLast = dbgRewindLast; + ts->istream->seek = dbgSeek; +} + +/** Get the ith token from the current position 1..n where k=1 is the +* first symbol of lookahead. +*/ +static pANTLR3_COMMON_TOKEN +tokLT (pANTLR3_TOKEN_STREAM ts, ANTLR3_INT32 k) +{ + ANTLR3_INT32 i; + ANTLR3_INT32 n; + pANTLR3_COMMON_TOKEN_STREAM cts; + + cts = (pANTLR3_COMMON_TOKEN_STREAM)ts->super; + + if (k < 0) + { + return LB(cts, -k); + } + + if (cts->p == -1) + { + fillBuffer(cts); + } + if (k == 0) + { + return NULL; + } + + if ((cts->p + k - 1) >= (ANTLR3_INT32)ts->istream->cachedSize) + { + pANTLR3_COMMON_TOKEN teof = &(ts->tokenSource->eofToken); + + teof->setStartIndex (teof, ts->istream->index (ts->istream)); + teof->setStopIndex (teof, ts->istream->index (ts->istream)); + return teof; + } + + i = cts->p; + n = 1; + + /* Need to find k good tokens, skipping ones that are off channel + */ + while ( n < k) + { + /* Skip off-channel tokens */ + i = skipOffTokenChannels(cts, i+1); /* leave p on valid token */ + n++; + } + if ( (ANTLR3_UINT32) i >= ts->istream->cachedSize) + { + pANTLR3_COMMON_TOKEN teof = &(ts->tokenSource->eofToken); + + teof->setStartIndex (teof, ts->istream->index(ts->istream)); + teof->setStopIndex (teof, ts->istream->index(ts->istream)); + return teof; + } + + // Here the token must be in the input vector. Rather then incut + // function call penalty, we jsut return the pointer directly + // from the vector + // + return (pANTLR3_COMMON_TOKEN)cts->tokens->elements[i].element; + //return (pANTLR3_COMMON_TOKEN)cts->tokens->get(cts->tokens, i); +} + +/// Debug only method to flag consumption of initial off-channel +/// tokens in the input stream +/// +static void +consumeInitialHiddenTokens(pANTLR3_INT_STREAM is) +{ + ANTLR3_MARKER first; + ANTLR3_INT32 i; + pANTLR3_TOKEN_STREAM ts; + + ts = (pANTLR3_TOKEN_STREAM) is->super; + first = is->index(is); + + for (i=0; i<first; i++) + { + ts->debugger->consumeHiddenToken(ts->debugger, ts->get(ts, i)); + } + + ts->initialStreamState = ANTLR3_FALSE; + +} + +/// As per the normal tokLT but sends information to the debugger +/// +static pANTLR3_COMMON_TOKEN +dbgTokLT (pANTLR3_TOKEN_STREAM ts, ANTLR3_INT32 k) +{ + if (ts->initialStreamState == ANTLR3_TRUE) + { + consumeInitialHiddenTokens(ts->istream); + } + return tokLT(ts, k); +} + +#ifdef ANTLR3_WINDOWS + /* When fully optimized VC7 complains about non reachable code. + * Not yet sure if this is an optimizer bug, or a bug in the flow analysis + */ +#pragma warning( disable : 4702 ) +#endif + +static pANTLR3_COMMON_TOKEN +LB(pANTLR3_COMMON_TOKEN_STREAM cts, ANTLR3_INT32 k) +{ + ANTLR3_INT32 i; + ANTLR3_INT32 n; + + if (cts->p == -1) + { + fillBuffer(cts); + } + if (k == 0) + { + return NULL; + } + if ((cts->p - k) < 0) + { + return NULL; + } + + i = cts->p; + n = 1; + + /* Need to find k good tokens, going backwards, skipping ones that are off channel + */ + while (n <= (ANTLR3_INT32) k) + { + /* Skip off-channel tokens + */ + + i = skipOffTokenChannelsReverse(cts, i - 1); /* leave p on valid token */ + n++; + } + if (i < 0) + { + return NULL; + } + // Here the token must be in the input vector. Rather then incut + // function call penalty, we jsut return the pointer directly + // from the vector + // + return (pANTLR3_COMMON_TOKEN)cts->tokens->elements[i].element; +} + +static pANTLR3_COMMON_TOKEN +get (pANTLR3_TOKEN_STREAM ts, ANTLR3_UINT32 i) +{ + pANTLR3_COMMON_TOKEN_STREAM cts; + + cts = (pANTLR3_COMMON_TOKEN_STREAM)ts->super; + + return (pANTLR3_COMMON_TOKEN)(cts->tokens->get(cts->tokens, i)); /* Token index is zero based but vectors are 1 based */ +} + +static pANTLR3_TOKEN_SOURCE +getTokenSource (pANTLR3_TOKEN_STREAM ts) +{ + return ts->tokenSource; +} + +static void +setTokenSource ( pANTLR3_TOKEN_STREAM ts, + pANTLR3_TOKEN_SOURCE tokenSource) +{ + ts->tokenSource = tokenSource; +} + +static pANTLR3_STRING +toString (pANTLR3_TOKEN_STREAM ts) +{ + pANTLR3_COMMON_TOKEN_STREAM cts; + + cts = (pANTLR3_COMMON_TOKEN_STREAM)ts->super; + + if (cts->p == -1) + { + fillBuffer(cts); + } + + return ts->toStringSS(ts, 0, ts->istream->size(ts->istream)); +} + +static pANTLR3_STRING +toStringSS(pANTLR3_TOKEN_STREAM ts, ANTLR3_UINT32 start, ANTLR3_UINT32 stop) +{ + pANTLR3_STRING string; + pANTLR3_TOKEN_SOURCE tsource; + pANTLR3_COMMON_TOKEN tok; + ANTLR3_UINT32 i; + pANTLR3_COMMON_TOKEN_STREAM cts; + + cts = (pANTLR3_COMMON_TOKEN_STREAM) ts->super; + + if (cts->p == -1) + { + fillBuffer(cts); + } + if (stop >= ts->istream->size(ts->istream)) + { + stop = ts->istream->size(ts->istream) - 1; + } + + /* Who is giving us these tokens? + */ + tsource = ts->getTokenSource(ts); + + if (tsource != NULL && cts->tokens != NULL) + { + /* Finally, let's get a string + */ + string = tsource->strFactory->newRaw(tsource->strFactory); + + for (i = start; i <= stop; i++) + { + tok = ts->get(ts, i); + if (tok != NULL) + { + string->appendS(string, tok->getText(tok)); + } + } + + return string; + } + return NULL; + +} + +static pANTLR3_STRING +toStringTT (pANTLR3_TOKEN_STREAM ts, pANTLR3_COMMON_TOKEN start, pANTLR3_COMMON_TOKEN stop) +{ + if (start != NULL && stop != NULL) + { + return ts->toStringSS(ts, (ANTLR3_UINT32)start->getTokenIndex(start), (ANTLR3_UINT32)stop->getTokenIndex(stop)); + } + else + { + return NULL; + } +} + +/** Move the input pointer to the next incoming token. The stream + * must become active with LT(1) available. consume() simply + * moves the input pointer so that LT(1) points at the next + * input symbol. Consume at least one token. + * + * Walk past any token not on the channel the parser is listening to. + */ +static void +consume (pANTLR3_INT_STREAM is) +{ + pANTLR3_COMMON_TOKEN_STREAM cts; + pANTLR3_TOKEN_STREAM ts; + + ts = (pANTLR3_TOKEN_STREAM) is->super; + cts = (pANTLR3_COMMON_TOKEN_STREAM) ts->super; + + if ((ANTLR3_UINT32)cts->p < cts->tokens->size(cts->tokens)) + { + cts->p++; + cts->p = skipOffTokenChannels(cts, cts->p); + } +} + + +/// As per ordinary consume but notifies the debugger about hidden +/// tokens and so on. +/// +static void +dbgConsume (pANTLR3_INT_STREAM is) +{ + pANTLR3_TOKEN_STREAM ts; + ANTLR3_MARKER a; + ANTLR3_MARKER b; + pANTLR3_COMMON_TOKEN t; + + ts = (pANTLR3_TOKEN_STREAM) is->super; + + if (ts->initialStreamState == ANTLR3_TRUE) + { + consumeInitialHiddenTokens(is); + } + + a = is->index(is); // Where are we right now? + t = ts->_LT(ts, 1); // Current token from stream + + consume(is); // Standard consumer + + b = is->index(is); // Where are we after consuming 1 on channel token? + + ts->debugger->consumeToken(ts->debugger, t); // Tell the debugger that we consumed the first token + + if (b>a+1) + { + // The standard consume caused the index to advance by more than 1, + // which can only happen if it skipped some off-channel tokens. + // we need to tell the debugger about those tokens. + // + ANTLR3_MARKER i; + + for (i = a+1; i<b; i++) + { + ts->debugger->consumeHiddenToken(ts->debugger, ts->get(ts, (ANTLR3_UINT32)i)); + } + + } +} + +/** A simple filter mechanism whereby you can tell this token stream + * to force all tokens of type ttype to be on channel. For example, + * when interpreting, we cannot execute actions so we need to tell + * the stream to force all WS and NEWLINE to be a different, ignored, + * channel. + */ +static void +setTokenTypeChannel (pANTLR3_COMMON_TOKEN_STREAM tokenStream, ANTLR3_UINT32 ttype, ANTLR3_UINT32 channel) +{ + if (tokenStream->channelOverrides == NULL) + { + tokenStream->channelOverrides = antlr3ListNew(10); + } + + /* We add one to the channel so we can distinguish NULL as being no entry in the + * table for a particular token type. + */ + tokenStream->channelOverrides->put(tokenStream->channelOverrides, ttype, ANTLR3_FUNC_PTR((ANTLR3_UINT32)channel + 1), NULL); +} + +static void +discardTokenType (pANTLR3_COMMON_TOKEN_STREAM tokenStream, ANTLR3_INT32 ttype) +{ + if (tokenStream->discardSet == NULL) + { + tokenStream->discardSet = antlr3ListNew(31); + } + + /* We add one to the channel so we can distinguish NULL as being no entry in the + * table for a particular token type. We could use bitsets for this I suppose too. + */ + tokenStream->discardSet->put(tokenStream->discardSet, ttype, ANTLR3_FUNC_PTR((ANTLR3_UINT32)ttype + 1), NULL); +} + +static void +discardOffChannel (pANTLR3_COMMON_TOKEN_STREAM tokenStream, ANTLR3_BOOLEAN discard) +{ + tokenStream->discardOffChannel = discard; +} + +static pANTLR3_VECTOR +getTokens (pANTLR3_COMMON_TOKEN_STREAM tokenStream) +{ + if (tokenStream->p == -1) + { + fillBuffer(tokenStream); + } + + return tokenStream->tokens; +} + +static pANTLR3_LIST +getTokenRange (pANTLR3_COMMON_TOKEN_STREAM tokenStream, ANTLR3_UINT32 start, ANTLR3_UINT32 stop) +{ + return tokenStream->getTokensSet(tokenStream, start, stop, NULL); +} +/** Given a start and stop index, return a List of all tokens in + * the token type BitSet. Return null if no tokens were found. This + * method looks at both on and off channel tokens. + */ +static pANTLR3_LIST +getTokensSet (pANTLR3_COMMON_TOKEN_STREAM tokenStream, ANTLR3_UINT32 start, ANTLR3_UINT32 stop, pANTLR3_BITSET types) +{ + pANTLR3_LIST filteredList; + ANTLR3_UINT32 i; + ANTLR3_UINT32 n; + pANTLR3_COMMON_TOKEN tok; + + if (tokenStream->p == -1) + { + fillBuffer(tokenStream); + } + if (stop > tokenStream->tstream->istream->size(tokenStream->tstream->istream)) + { + stop = tokenStream->tstream->istream->size(tokenStream->tstream->istream); + } + if (start > stop) + { + return NULL; + } + + /* We have the range set, now we need to iterate through the + * installed tokens and create a new list with just the ones we want + * in it. We are just moving pointers about really. + */ + filteredList = antlr3ListNew((ANTLR3_UINT32)tokenStream->tstream->istream->size(tokenStream->tstream->istream)); + + for (i = start, n = 0; i<= stop; i++) + { + tok = tokenStream->tstream->get(tokenStream->tstream, i); + + if ( types == NULL + || types->isMember(types, tok->getType(tok) == ANTLR3_TRUE) + ) + { + filteredList->put(filteredList, n++, (void *)tok, NULL); + } + } + + /* Did we get any then? + */ + if (filteredList->size(filteredList) == 0) + { + filteredList->free(filteredList); + filteredList = NULL; + } + + return filteredList; +} + +static pANTLR3_LIST +getTokensList (pANTLR3_COMMON_TOKEN_STREAM tokenStream, ANTLR3_UINT32 start, ANTLR3_UINT32 stop, pANTLR3_LIST list) +{ + pANTLR3_BITSET bitSet; + pANTLR3_LIST newlist; + + bitSet = antlr3BitsetList(list->table); + + newlist = tokenStream->getTokensSet(tokenStream, start, stop, bitSet); + + bitSet->free(bitSet); + + return newlist; + +} + +static pANTLR3_LIST +getTokensType (pANTLR3_COMMON_TOKEN_STREAM tokenStream, ANTLR3_UINT32 start, ANTLR3_UINT32 stop, ANTLR3_UINT32 type) +{ + pANTLR3_BITSET bitSet; + pANTLR3_LIST newlist; + + bitSet = antlr3BitsetOf(type, -1); + newlist = tokenStream->getTokensSet(tokenStream, start, stop, bitSet); + + bitSet->free(bitSet); + + return newlist; +} + +static ANTLR3_UINT32 +_LA (pANTLR3_INT_STREAM is, ANTLR3_INT32 i) +{ + pANTLR3_TOKEN_STREAM ts; + pANTLR3_COMMON_TOKEN tok; + + ts = (pANTLR3_TOKEN_STREAM) is->super; + + tok = ts->_LT(ts, i); + + if (tok != NULL) + { + return tok->getType(tok); + } + else + { + return ANTLR3_TOKEN_INVALID; + } +} + +/// As per _LA() but for debug mode. +/// +static ANTLR3_UINT32 +dbgLA (pANTLR3_INT_STREAM is, ANTLR3_INT32 i) +{ + pANTLR3_TOKEN_STREAM ts; + + ts = (pANTLR3_TOKEN_STREAM) is->super; + + if (ts->initialStreamState == ANTLR3_TRUE) + { + consumeInitialHiddenTokens(is); + } + ts->debugger->LT(ts->debugger, i, tokLT(ts, i)); + return _LA(is, i); +} + +static ANTLR3_MARKER +mark (pANTLR3_INT_STREAM is) +{ + is->lastMarker = is->index(is); + return is->lastMarker; +} + +/// As per mark() but with a call to tell the debugger we are doing this +/// +static ANTLR3_MARKER +dbgMark (pANTLR3_INT_STREAM is) +{ + pANTLR3_TOKEN_STREAM ts; + + ts = (pANTLR3_TOKEN_STREAM) is->super; + + is->lastMarker = is->index(is); + ts->debugger->mark(ts->debugger, is->lastMarker); + + return is->lastMarker; +} + +static void +release (pANTLR3_INT_STREAM is, ANTLR3_MARKER mark) +{ + return; +} + +static ANTLR3_UINT32 +size (pANTLR3_INT_STREAM is) +{ + pANTLR3_COMMON_TOKEN_STREAM cts; + pANTLR3_TOKEN_STREAM ts; + + if (is->cachedSize > 0) + { + return is->cachedSize; + } + ts = (pANTLR3_TOKEN_STREAM) is->super; + cts = (pANTLR3_COMMON_TOKEN_STREAM) ts->super; + + is->cachedSize = cts->tokens->count; + return is->cachedSize; +} + +static ANTLR3_MARKER +tindex (pANTLR3_INT_STREAM is) +{ + pANTLR3_COMMON_TOKEN_STREAM cts; + pANTLR3_TOKEN_STREAM ts; + + ts = (pANTLR3_TOKEN_STREAM) is->super; + cts = (pANTLR3_COMMON_TOKEN_STREAM) ts->super; + + return cts->p; +} + +static void +dbgRewindLast (pANTLR3_INT_STREAM is) +{ + pANTLR3_TOKEN_STREAM ts; + + ts = (pANTLR3_TOKEN_STREAM) is->super; + + ts->debugger->rewindLast(ts->debugger); + + is->rewind(is, is->lastMarker); +} +static void +rewindLast (pANTLR3_INT_STREAM is) +{ + is->rewind(is, is->lastMarker); +} +static void +rewindStream (pANTLR3_INT_STREAM is, ANTLR3_MARKER marker) +{ + is->seek(is, (ANTLR3_UINT32)(marker)); +} +static void +dbgRewindStream (pANTLR3_INT_STREAM is, ANTLR3_MARKER marker) +{ + pANTLR3_TOKEN_STREAM ts; + + ts = (pANTLR3_TOKEN_STREAM) is->super; + + ts->debugger->rewind(ts->debugger, marker); + + is->seek(is, (ANTLR3_UINT32)(marker)); +} + +static void +seek (pANTLR3_INT_STREAM is, ANTLR3_MARKER index) +{ + pANTLR3_COMMON_TOKEN_STREAM cts; + pANTLR3_TOKEN_STREAM ts; + + ts = (pANTLR3_TOKEN_STREAM) is->super; + cts = (pANTLR3_COMMON_TOKEN_STREAM) ts->super; + + cts->p = (ANTLR3_UINT32)index; +} +static void +dbgSeek (pANTLR3_INT_STREAM is, ANTLR3_MARKER index) +{ + // TODO: Implement seek in debugger when Ter adds it to Java + // + seek(is, index); +} +ANTLR3_API void +fillBufferExt(pANTLR3_COMMON_TOKEN_STREAM tokenStream) +{ + fillBuffer(tokenStream); +} +static void +fillBuffer(pANTLR3_COMMON_TOKEN_STREAM tokenStream) { + ANTLR3_UINT32 index; + pANTLR3_COMMON_TOKEN tok; + ANTLR3_BOOLEAN discard; + void * channelI; + + /* Start at index 0 of course + */ + index = 0; + + /* Pick out the next token from the token source + * Remember we just get a pointer (reference if you like) here + * and so if we store it anywhere, we don't set any pointers to auto free it. + */ + tok = tokenStream->tstream->tokenSource->nextToken(tokenStream->tstream->tokenSource); + + while (tok != NULL && tok->type != ANTLR3_TOKEN_EOF) + { + discard = ANTLR3_FALSE; /* Assume we are not discarding */ + + /* I employ a bit of a trick, or perhaps hack here. Rather than + * store a pointer to a structure in the override map and discard set + * we store the value + 1 cast to a void *. Hence on systems where NULL = (void *)0 + * we can distinguish "not being there" from "being channel or type 0" + */ + + if (tokenStream->discardSet != NULL + && tokenStream->discardSet->get(tokenStream->discardSet, tok->getType(tok)) != NULL) + { + discard = ANTLR3_TRUE; + } + else if ( tokenStream->discardOffChannel == ANTLR3_TRUE + && tok->getChannel(tok) != tokenStream->channel + ) + { + discard = ANTLR3_TRUE; + } + else if (tokenStream->channelOverrides != NULL) + { + /* See if this type is in the override map + */ + channelI = tokenStream->channelOverrides->get(tokenStream->channelOverrides, tok->getType(tok) + 1); + + if (channelI != NULL) + { + /* Override found + */ + tok->setChannel(tok, ANTLR3_UINT32_CAST(channelI) - 1); + } + } + + /* If not discarding it, add it to the list at the current index + */ + if (discard == ANTLR3_FALSE) + { + /* Add it, indicating that we will delete it and the table should not + */ + tok->setTokenIndex(tok, index); + tokenStream->p++; + tokenStream->tokens->add(tokenStream->tokens, (void *) tok, NULL); + index++; + } + + tok = tokenStream->tstream->tokenSource->nextToken(tokenStream->tstream->tokenSource); + } + + /* Cache the size so we don't keep doing indirect method calls. We do this as + * early as possible so that anything after this may utilize the cached value. + */ + tokenStream->tstream->istream->cachedSize = tokenStream->tokens->count; + + /* Set the consume pointer to the first token that is on our channel + */ + tokenStream->p = 0; + tokenStream->p = skipOffTokenChannels(tokenStream, tokenStream->p); + +} + +/// Given a starting index, return the index of the first on-channel +/// token. +/// +static ANTLR3_UINT32 +skipOffTokenChannels(pANTLR3_COMMON_TOKEN_STREAM tokenStream, ANTLR3_INT32 i) { + ANTLR3_INT32 n; + pANTLR3_COMMON_TOKEN tok; + + n = tokenStream->tstream->istream->cachedSize; + + while (i < n) + { + tok = (pANTLR3_COMMON_TOKEN)tokenStream->tokens->elements[i].element; + + if (tok->channel!= tokenStream->channel) + { + i++; + } + else + { + return i; + } + } + return i; +} + +static ANTLR3_UINT32 +skipOffTokenChannelsReverse(pANTLR3_COMMON_TOKEN_STREAM tokenStream, ANTLR3_INT32 x) +{ + pANTLR3_COMMON_TOKEN tok; + + while (x >= 0) + { + tok = (pANTLR3_COMMON_TOKEN)tokenStream->tokens->elements[x].element; + + if ((tok->channel != tokenStream->channel)) + { + x--; + } + else + { + return x; + } + } + return x; +} + +/// Return a string that represents the name assoicated with the input source +/// +/// /param[in] is The ANTLR3_INT_STREAM interface that is representing this token stream. +/// +/// /returns +/// /implements ANTLR3_INT_STREAM_struct::getSourceName() +/// +static pANTLR3_STRING +getSourceName (pANTLR3_INT_STREAM is) +{ + // Slightly convoluted as we must trace back to the lexer's input source + // via the token source. The streamName that is here is not initialized + // because this is a token stream, not a file or string stream, which are the + // only things that have a context for a source name. + // + return ((pANTLR3_TOKEN_STREAM)(is->super))->tokenSource->fileName; +} diff --git a/antlr-3.1.3/runtime/C/src/antlr3treeparser.c b/antlr-3.1.3/runtime/C/src/antlr3treeparser.c new file mode 100644 index 0000000..4473590 --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3treeparser.c @@ -0,0 +1,247 @@ +/** \file + * Implementation of the tree parser and overrides for the base recognizer + */ + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include <antlr3treeparser.h> + +/* BASE Recognizer overrides + */ +static void mismatch (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_UINT32 ttype, pANTLR3_BITSET_LIST follow); + +/* Tree parser API + */ +static void setTreeNodeStream (pANTLR3_TREE_PARSER parser, pANTLR3_COMMON_TREE_NODE_STREAM input); +static pANTLR3_COMMON_TREE_NODE_STREAM + getTreeNodeStream (pANTLR3_TREE_PARSER parser); +static void freeParser (pANTLR3_TREE_PARSER parser); +static void * getCurrentInputSymbol (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM istream); +static void * getMissingSymbol (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM istream, pANTLR3_EXCEPTION e, + ANTLR3_UINT32 expectedTokenType, pANTLR3_BITSET_LIST follow); + + +ANTLR3_API pANTLR3_TREE_PARSER +antlr3TreeParserNewStream(ANTLR3_UINT32 sizeHint, pANTLR3_COMMON_TREE_NODE_STREAM ctnstream, pANTLR3_RECOGNIZER_SHARED_STATE state) +{ + pANTLR3_TREE_PARSER parser; + + /** Allocate tree parser memory + */ + parser =(pANTLR3_TREE_PARSER) ANTLR3_MALLOC(sizeof(ANTLR3_TREE_PARSER)); + + if (parser == NULL) + { + return NULL; + } + + /* Create and install a base recognizer which does most of the work for us + */ + parser->rec = antlr3BaseRecognizerNew(ANTLR3_TYPE_PARSER, sizeHint, state); + + if (parser->rec == NULL) + { + parser->free(parser); + return NULL; + } + + /* Ensure we can track back to the tree parser super structure + * from the base recognizer structure + */ + parser->rec->super = parser; + parser->rec->type = ANTLR3_TYPE_TREE_PARSER; + + /* Install our base recognizer overrides + */ + parser->rec->mismatch = mismatch; + parser->rec->exConstruct = antlr3MTNExceptionNew; + parser->rec->getCurrentInputSymbol = getCurrentInputSymbol; + parser->rec->getMissingSymbol = getMissingSymbol; + + /* Install tree parser API + */ + parser->getTreeNodeStream = getTreeNodeStream; + parser->setTreeNodeStream = setTreeNodeStream; + parser->free = freeParser; + + /* Install the tree node stream + */ + parser->setTreeNodeStream(parser, ctnstream); + + return parser; +} + +/** + * \brief + * Creates a new Mismatched Tree Nde Exception and inserts in the recognizer + * exception stack. + * + * \param recognizer + * Context pointer for this recognizer + * + */ +ANTLR3_API void +antlr3MTNExceptionNew(pANTLR3_BASE_RECOGNIZER recognizer) +{ + /* Create a basic recognition exception structure + */ + antlr3RecognitionExceptionNew(recognizer); + + /* Now update it to indicate this is a Mismatched token exception + */ + recognizer->state->exception->name = ANTLR3_MISMATCHED_TREE_NODE_NAME; + recognizer->state->exception->type = ANTLR3_MISMATCHED_TREE_NODE_EXCEPTION; + + return; +} + + +static void +freeParser (pANTLR3_TREE_PARSER parser) +{ + if (parser->rec != NULL) + { + // This may have ben a delegate or delegator parser, in which case the + // state may already have been freed (and set to NULL therefore) + // so we ignore the state if we don't have it. + // + if (parser->rec->state != NULL) + { + if (parser->rec->state->following != NULL) + { + parser->rec->state->following->free(parser->rec->state->following); + parser->rec->state->following = NULL; + } + } + parser->rec->free(parser->rec); + parser->rec = NULL; + } + + ANTLR3_FREE(parser); +} + +/** Set the input stream and reset the parser + */ +static void +setTreeNodeStream (pANTLR3_TREE_PARSER parser, pANTLR3_COMMON_TREE_NODE_STREAM input) +{ + parser->ctnstream = input; + parser->rec->reset (parser->rec); + parser->ctnstream->reset (parser->ctnstream); +} + +/** Return a pointer to the input stream + */ +static pANTLR3_COMMON_TREE_NODE_STREAM +getTreeNodeStream (pANTLR3_TREE_PARSER parser) +{ + return parser->ctnstream; +} + + +/** Override for standard base recognizer mismatch function + * as we have DOWN/UP nodes in the stream that have no line info, + * plus we want to alter the exception type. + */ +static void +mismatch (pANTLR3_BASE_RECOGNIZER recognizer, ANTLR3_UINT32 ttype, pANTLR3_BITSET_LIST follow) +{ + recognizer->exConstruct(recognizer); + recognizer->recoverFromMismatchedToken(recognizer, ttype, follow); +} + +#ifdef ANTLR3_WINDOWS +#pragma warning (push) +#pragma warning (disable : 4100) +#endif + +// Default implementation is for parser and assumes a token stream as supplied by the runtime. +// You MAY need override this function if the standard TOKEN_STREAM is not what you are using. +// +static void * +getCurrentInputSymbol (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM istream) +{ + pANTLR3_TREE_NODE_STREAM tns; + pANTLR3_COMMON_TREE_NODE_STREAM ctns; + + tns = (pANTLR3_TREE_NODE_STREAM)(istream->super); + ctns = tns->ctns; + return tns->_LT(tns, 1); +} + + +// Default implementation is for parser and assumes a token stream as supplied by the runtime. +// You MAY need override this function if the standard BASE_TREE is not what you are using. +// +static void * +getMissingSymbol (pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_INT_STREAM istream, pANTLR3_EXCEPTION e, + ANTLR3_UINT32 expectedTokenType, pANTLR3_BITSET_LIST follow) +{ + pANTLR3_TREE_NODE_STREAM tns; + pANTLR3_COMMON_TREE_NODE_STREAM ctns; + pANTLR3_BASE_TREE node; + pANTLR3_BASE_TREE current; + pANTLR3_COMMON_TOKEN token; + pANTLR3_STRING text; + + // Dereference the standard pointers + // + tns = (pANTLR3_TREE_NODE_STREAM)(istream->super); + ctns = tns->ctns; + + // Create a new empty node, by stealing the current one, or the previous one if the current one is EOF + // + current = tns->_LT(tns, 1); + + if (current == &ctns->EOF_NODE.baseTree) + { + current = tns->_LT(tns, -1); + } + node = current->dupNode(current); + + // Find the newly dupicated token + // + token = node->getToken(node); + + // Create the token text that shows it has been inserted + // + token->setText8 (token, (pANTLR3_UINT8)"<missing "); + text = token->getText (token); + text->append8 (text, (const char *)recognizer->state->tokenNames[expectedTokenType]); + text->append8 (text, (const char *)">"); + + // Finally return the pointer to our new node + // + return node; +} +#ifdef ANTLR3_WINDOWS +#pragma warning (pop) +#endif + diff --git a/antlr-3.1.3/runtime/C/src/antlr3ucs2inputstream.c b/antlr-3.1.3/runtime/C/src/antlr3ucs2inputstream.c new file mode 100644 index 0000000..ab1c457 --- /dev/null +++ b/antlr-3.1.3/runtime/C/src/antlr3ucs2inputstream.c @@ -0,0 +1,202 @@ +/// \file +/// Base functions to initialize and manipulate a UCS2 input stream +/// +#include <antlr3input.h> + +// [The "BSD licence"] +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC +// http://www.temporal-wave.com +// http://www.linkedin.com/in/jimidle +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// INT Stream API +// +static void antlr3UCS2Consume (pANTLR3_INT_STREAM is); +static ANTLR3_UCHAR antlr3UCS2LA (pANTLR3_INT_STREAM is, ANTLR3_INT32 la); +static ANTLR3_MARKER antlr3UCS2Index (pANTLR3_INT_STREAM is); +static void antlr3UCS2Seek (pANTLR3_INT_STREAM is, ANTLR3_MARKER seekPoint); + +// ucs2 Charstream API functions +// +static pANTLR3_STRING antlr3UCS2Substr (pANTLR3_INPUT_STREAM input, ANTLR3_MARKER start, ANTLR3_MARKER stop); + +/// \brief Common function to setup function interface for a 16 bit "UCS2" input stream. +/// +/// \param input Input stream context pointer +/// +/// \remark +/// - Strictly speaking, there is no such thing as a UCS2 input stream as the term +/// tends to confuse the notions of character encoding, unicode and so on. However +/// because there will possibly be a need for a UTF-16 stream, I needed to identify 16 bit +/// streams that do not support surrogate encodings and UCS2 is how it is mostly referred to. +/// For instance Java, Oracle and others use a 16 bit encoding of characters and so this type +/// of stream is very common. +/// Take it to mean, therefore, a straight 16 bit uncomplicated encoding of Unicode code points. +/// +void +antlr3UCS2SetupStream (pANTLR3_INPUT_STREAM input, ANTLR3_UINT32 type) +{ + // Build a string factory for this stream. This is a 16 bit string "UCS2" factory which is a standard + // part of the ANTLR3 string. The string factory is then passed through the whole chain of lexer->parser->tree->treeparser + // and so on. + // + input->strFactory = antlr3UCS2StringFactoryNew(); + + // Install function pointers for an 8 bit ASCII input, which are good for almost + // all input stream functions. We will then override those that won't work for 16 bit characters. + // + antlr3GenericSetupStream (input, type); + + // Intstream API overrides for UCS2 + // + input->istream->consume = antlr3UCS2Consume; // Consume the next 16 bit character in the buffer + input->istream->_LA = antlr3UCS2LA; // Return the UTF32 character at offset n (1 based) + input->istream->index = antlr3UCS2Index; // Calculate current index in input stream, 16 bit based + input->istream->seek = antlr3UCS2Seek; // How to seek to a specific point in the stream + + // Charstream API overrides for UCS2 + // + input->substr = antlr3UCS2Substr; // Return a string from the input stream + + input->charByteSize = 2; // Size in bytes of characters in this stream. + +} + +/// \brief Consume the next character in an 8 bit ASCII input stream +/// +/// \param input Input stream context pointer +/// +static void +antlr3UCS2Consume(pANTLR3_INT_STREAM is) +{ + pANTLR3_INPUT_STREAM input; + + input = ((pANTLR3_INPUT_STREAM) (is->super)); + + if ((pANTLR3_UINT16)(input->nextChar) < (((pANTLR3_UINT16)input->data) + input->sizeBuf)) + { + // Indicate one more character in this line + // + input->charPositionInLine++; + + if ((ANTLR3_UCHAR)(*((pANTLR3_UINT16)input->nextChar)) == input->newlineChar) + { + // Reset for start of a new line of input + // + input->line++; + input->charPositionInLine = 0; + input->currentLine = (void *)(((pANTLR3_UINT16)input->nextChar) + 1); + } + + // Increment to next character position + // + input->nextChar = (void *)(((pANTLR3_UINT16)input->nextChar) + 1); + } +} + +/// \brief Return the input element assuming an 8 bit ascii input +/// +/// \param[in] input Input stream context pointer +/// \param[in] la 1 based offset of next input stream element +/// +/// \return Next input character in internal ANTLR3 encoding (UTF32) +/// +static ANTLR3_UCHAR +antlr3UCS2LA(pANTLR3_INT_STREAM is, ANTLR3_INT32 la) +{ + pANTLR3_INPUT_STREAM input; + + input = ((pANTLR3_INPUT_STREAM) (is->super)); + + if (( ((pANTLR3_UINT16)input->nextChar) + la - 1) >= (((pANTLR3_UINT16)input->data) + input->sizeBuf)) + { + return ANTLR3_CHARSTREAM_EOF; + } + else + { + return (ANTLR3_UCHAR)(*((pANTLR3_UINT16)input->nextChar + la - 1)); + } +} + + +/// \brief Calculate the current index in the output stream. +/// \param[in] input Input stream context pointer +/// +static ANTLR3_MARKER +antlr3UCS2Index(pANTLR3_INT_STREAM is) +{ + pANTLR3_INPUT_STREAM input; + + input = ((pANTLR3_INPUT_STREAM) (is->super)); + + return (ANTLR3_MARKER)(input->nextChar); +} + +/// \brief Rewind the lexer input to the state specified by the supplied mark. +/// +/// \param[in] input Input stream context pointer +/// +/// \remark +/// Assumes ASCII (or at least, 8 Bit) input stream. +/// +static void +antlr3UCS2Seek (pANTLR3_INT_STREAM is, ANTLR3_MARKER seekPoint) +{ + ANTLR3_INT32 count; + pANTLR3_INPUT_STREAM input; + + input = ((pANTLR3_INPUT_STREAM) is->super); + + // If the requested seek point is less than the current + // input point, then we assume that we are resetting from a mark + // and do not need to scan, but can just set to there. + // + if (seekPoint <= (ANTLR3_MARKER)(input->nextChar)) + { + input->nextChar = (void *)seekPoint; + } + else + { + count = (ANTLR3_UINT32)((seekPoint - (ANTLR3_MARKER)(input->nextChar)) / 2); // 16 bits per character in UCS2 + + while (count--) + { + is->consume(is); + } + } +} +/// \brief Return a substring of the ucs2 (16 bit) input stream in +/// newly allocated memory. +/// +/// \param input Input stream context pointer +/// \param start Offset in input stream where the string starts +/// \param stop Offset in the input stream where the string ends. +/// +static pANTLR3_STRING +antlr3UCS2Substr (pANTLR3_INPUT_STREAM input, ANTLR3_MARKER start, ANTLR3_MARKER stop) +{ + return input->strFactory->newPtr(input->strFactory, (pANTLR3_UINT8)start, ((ANTLR3_UINT32_CAST(stop - start))/2) + 1); +} diff --git a/antlr-3.1.3/runtime/C/vsrulefiles/antlr3lexer.rules b/antlr-3.1.3/runtime/C/vsrulefiles/antlr3lexer.rules new file mode 100644 index 0000000..d80fefa --- /dev/null +++ b/antlr-3.1.3/runtime/C/vsrulefiles/antlr3lexer.rules @@ -0,0 +1,199 @@ +<?xml version="1.0" encoding="utf-8"?> +<VisualStudioToolFile + Name="ANTLR3 Lexer" + Version="8.00" + > + <Rules> + <CustomBuildRule + Name="Antlr3Lexer" + DisplayName="ANTLR 3 Lexer Grammar Translation" + CommandLine="[java] [JavaOptions] [ANTLR3Jar] org.antlr.Tool [LibDir] -[Absolute]o [OutputDirectory] -message-format vs2005 [DFA] [NFA] [Report] [Print] [Debug] [Profile] [AST] [TextDFA] [EBNFExits] [CollapseEdges] [DebugNFA] [MaxRules] [MaxDFAEdges] [DFATimeout] [inputs]" + Outputs="[OutputDirectory]\$(InputName).c;[OutputDirectory]\$(InputName).h" + FileExtensions="*.g3l;*.gl;*.g" + ExecutionDescription="Translating to lexer." + SupportsFileBatching="true" + > + <Properties> + <StringProperty + Name="JavaOptions" + DisplayName="Java VM Options" + PropertyPageName="Java" + Description="Specify any options required to invoke the java VM on this grammar file. Sometimes larger grammars require more memory than the standard allocation and you can specify this here." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="[value]" + Delimited="true" + Inheritable="true" + /> + <BooleanProperty + Name="DFA" + DisplayName="Generate DFA dots" + PropertyPageName="DOT" + Category="DOT Ouputs" + Description="When set to True ANTLR3 will produce a number of .dot files that can be used with dot/graphviz to genreate pictorial representations of the DFAs gnerated for this grammar." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-dfa" + /> + <BooleanProperty + Name="NFA" + DisplayName="Generate NFA DOTs" + Category="DOT Outputs" + Description="When set to True ANTLR3 will produce a number of .dot files that can be used with dot/graphviz to genreate pictorial representations of the NFAs generated for this grammar." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-nfa" + /> + <BooleanProperty + Name="Report" + DisplayName="Generate Report" + PropertyPageName="Reporting" + Category="Reporting" + Description="If set to True then ANTLR3 will generate reports about the grammar file(s) it processes." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-report" + /> + <BooleanProperty + Name="Print" + DisplayName="Print grammar" + PropertyPageName="Reporting" + Category="Reporting" + Description="If set to True ANTLR3 will print out the grammar without the associated actions" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-print" + /> + <BooleanProperty + Name="Debug" + DisplayName="Debug mode" + PropertyPageName="Code Generation" + Category="Output" + Description="If set to True ANTLR3 will generate code that fires debugging events. [JI - Not yet implemented]" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-debug" + /> + <BooleanProperty + Name="Profile" + DisplayName="Generate profile" + Category="Output" + Description="If set to True ANTLR3 will generate code that computes profiling information [JI - not yet implemented]" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-profile" + /> + <BooleanProperty + Name="AST" + DisplayName="Show AST" + PropertyPageName="Extended" + Category="Extended" + Description="If True ANTLR3 will print out the grammar AST" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xgrtree" + /> + <StringProperty + Name="LibDir" + DisplayName="Token directory" + PropertyPageName="Code Generation" + Category="General" + Description="In which directory can ANTLR3 locate grammar token files if not in the same directory as the grammar file." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-lib [value]" + DefaultValue="$(InputDir)" + /> + <BooleanProperty + Name="TextDFA" + DisplayName="Text DFA" + PropertyPageName="Extended" + Category="Extended" + Description="If True ANTLR3 will generate a text version of the DFAsfor this grammar." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xdfa" + /> + <BooleanProperty + Name="EBNFExits" + DisplayName="EBNF Exits" + PropertyPageName="Extended" + Category="Extended" + Description="If True ANTLR3 will not test EBNF exit branches." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xnoprune" + /> + <StringProperty + Name="OutputDirectory" + DisplayName="Output Directory" + PropertyPageName="Code Generation" + Description="Which directory the generated output files be sent to if not the same directory as the grammar file." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="[value]" + DefaultValue="$(InputDir)" + /> + <BooleanProperty + Name="CollapseEdges" + DisplayName="Collapse Edges" + PropertyPageName="Extended" + Category="Extended" + Description="Collapse incident edges into DFA states" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xnocollapse" + /> + <BooleanProperty + Name="DebugNFA" + DisplayName="Debug NFA" + Category="Reporting" + Description="If True, ANTLR3 will dump lots of information to the screen during NFA conversion." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xdbgconversion " + /> + <StringProperty + Name="ANTLR3Jar" + DisplayName="ANTLR3 Jar" + Category="JavaVM" + Description="Specifies the absolute location of the ANTLR3 jar file if it is not in a location covered by %CLASSPATH%. Specify using UNIX directory delimiters to minimize problems." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-jar "[value]"" + /> + <StringProperty + Name="Java" + DisplayName="Java command" + Description="Specifies the command that invokes the java VM. Usually java, but could be something else such as jikes" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="[value]" + DefaultValue="java" + /> + <IntegerProperty + Name="MaxRules" + DisplayName="Max rule call" + PropertyPageName="Extended" + Category="Analysis" + Description="Maximum number of rule invocations during conversion" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xm [value]" + DefaultValue="4" + /> + <IntegerProperty + Name="MaxDFAEdges" + DisplayName="Max DFA Edges" + PropertyPageName="Extended" + Category="Extended" + Description="Maximum "comfortable" number of edges for single DFA state" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xmaxdfaedges [value]" + DefaultValue="65534" + /> + <IntegerProperty + Name="DFATimeout" + DisplayName="DFA Timeout" + PropertyPageName="Extended" + Category="Extended" + Description="DFA conversion timeout period for each decision." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xconversiontimeout [value]" + DefaultValue="1000" + /> + <BooleanProperty + Name="Absolute" + DisplayName="Absolute Directories" + PropertyPageName="Code Generation" + Description="If true, causes ANTLR to assume output directory is always the absolute output path and not to use relative paths as per the intput spec. For visual studio, this should usually be set to true." + Switch="f" + DefaultValue="true" + /> + </Properties> + </CustomBuildRule> + </Rules> +</VisualStudioToolFile> diff --git a/antlr-3.1.3/runtime/C/vsrulefiles/antlr3lexerandparser.rules b/antlr-3.1.3/runtime/C/vsrulefiles/antlr3lexerandparser.rules new file mode 100644 index 0000000..12d100a --- /dev/null +++ b/antlr-3.1.3/runtime/C/vsrulefiles/antlr3lexerandparser.rules @@ -0,0 +1,201 @@ +<?xml version="1.0" encoding="utf-8"?> +<VisualStudioToolFile + Name="ANTLR3 Combo Lexer and Parser" + Version="8.00" + > + <Rules> + <CustomBuildRule + Name="Antlr3ParserLexer" + DisplayName="ANTLR 3 Parser/Lexer Grammar Translation" + CommandLine="[java] [JavaOptions] [ANTLR3Jar] org.antlr.Tool [LibDir] -[Absolute]o [OutputDirectory] -message-format vs2005 [DFA] [NFA] [Report] [Print] [Debug] [Profile] [AST] [TextDFA] [EBNFExits] [CollapseEdges] [DebugNFA] [MaxRules] [MaxDFAEdges] [DFATimeout] [inputs]" + Outputs="[OutputDirectory]\$(InputName)Parser.c;[OutputDirectory]\$(InputName)Parser.h;[OutputDirectory]\$(InputName)Lexer.c;[OutputDirectory]\$(InputName)Lexer.h" + FileExtensions="*.g3pl;*.g3;*.g" + ExecutionDescription="Translating to parser/lexer combination" + SupportsFileBatching="true" + ShowOnlyRuleProperties="false" + > + <Properties> + <StringProperty + Name="JavaOptions" + DisplayName="Java VM Options" + PropertyPageName="Java" + Description="Specify any options required to invoke the java VM on this grammar file. Sometimes larger grammars require more memory than the standard allocation and you can specify this here." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="[value]" + Delimited="true" + Inheritable="true" + /> + <BooleanProperty + Name="DFA" + DisplayName="Generate DFA dots" + PropertyPageName="DOT" + Category="DOT Ouputs" + Description="When set to True ANTLR3 will produce a number of .dot files that can be used with dot/graphviz to genreate pictorial representations of the DFAs gnerated for this grammar." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-dfa" + /> + <BooleanProperty + Name="NFA" + DisplayName="Generate NFA DOTs" + Category="DOT Outputs" + Description="When set to True ANTLR3 will produce a number of .dot files that can be used with dot/graphviz to genreate pictorial representations of the NFAs generated for this grammar." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-nfa" + /> + <BooleanProperty + Name="Report" + DisplayName="Generate Report" + PropertyPageName="Reporting" + Category="Reporting" + Description="If set to True then ANTLR3 will generate reports about the grammar file(s) it processes." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-report" + /> + <BooleanProperty + Name="Print" + DisplayName="Print grammar" + PropertyPageName="Reporting" + Category="Reporting" + Description="If set to True ANTLR3 will print out the grammar without the associated actions" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-print" + /> + <BooleanProperty + Name="Debug" + DisplayName="Debug mode" + PropertyPageName="Code Generation" + Category="Output" + Description="If set to True ANTLR3 will generate code that fires debugging events. [JI - Not yet implemented]" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-debug" + /> + <BooleanProperty + Name="Profile" + DisplayName="Generate profile" + Category="Output" + Description="If set to True ANTLR3 will generate code that computes profiling information [JI - not yet implemented]" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-profile" + /> + <BooleanProperty + Name="AST" + DisplayName="Show AST" + PropertyPageName="Extended" + Category="Extended" + Description="If True ANTLR3 will print out the grammar AST" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xgrtree" + /> + <StringProperty + Name="LibDir" + DisplayName="Token directory" + PropertyPageName="Code Generation" + Category="General" + Description="In which directory can ANTLR3 locate grammar token files if not in the same directory as the grammar file." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-lib [value]" + DefaultValue="$(InputDir)" + /> + <BooleanProperty + Name="TextDFA" + DisplayName="Text DFA" + PropertyPageName="Extended" + Category="Extended" + Description="If True ANTLR3 will generate a text version of the DFAsfor this grammar." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xdfa" + /> + <BooleanProperty + Name="EBNFExits" + DisplayName="EBNF Exits" + PropertyPageName="Extended" + Category="Extended" + Description="If True ANTLR3 will not test EBNF exit branches." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xnoprune" + /> + <StringProperty + Name="OutputDirectory" + DisplayName="Output Directory" + PropertyPageName="Code Generation" + Description="Which directory the generated output files be sent to if not the same directory as the grammar file." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="[value]" + DefaultValue="$(InputDir)" + /> + <BooleanProperty + Name="CollapseEdges" + DisplayName="Collapse Edges" + PropertyPageName="Extended" + Category="Extended" + Description="Collapse incident edges into DFA states" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xnocollapse" + /> + <BooleanProperty + Name="DebugNFA" + DisplayName="Debug NFA" + Category="Reporting" + Description="If True, ANTLR3 will dump lots of information to the screen during NFA conversion." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xdbgconversion " + /> + <StringProperty + Name="ANTLR3Jar" + DisplayName="ANTLR3 Jar" + PropertyPageName="Java" + Category="JavaVM" + Description="Specifies the absolute location of the ANTLR3 jar file if it is not in a location covered by %CLASSPATH%. Specify using UNIX directory delimiters to minimize problems." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-jar "[value]"" + /> + <StringProperty + Name="Java" + DisplayName="Java command" + Description="Specifies the command that invokes the java VM. Usually java, but could be something else such as jikes" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="[value]" + DefaultValue="java" + /> + <IntegerProperty + Name="MaxRules" + DisplayName="Max rule call" + PropertyPageName="Extended" + Category="Analysis" + Description="Maximum number of rule invocations during conversion" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xm [value]" + DefaultValue="4" + /> + <IntegerProperty + Name="MaxDFAEdges" + DisplayName="Max DFA Edges" + PropertyPageName="Extended" + Category="Extended" + Description="Maximum "comfortable" number of edges for single DFA state" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xmaxdfaedges [value]" + DefaultValue="65534" + /> + <IntegerProperty + Name="DFATimeout" + DisplayName="DFA Timeout" + PropertyPageName="Extended" + Category="Extended" + Description="DFA conversion timeout period for each decision." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xconversiontimeout [value]" + DefaultValue="1000" + /> + <BooleanProperty + Name="Absolute" + DisplayName="Absolute Directories" + PropertyPageName="Code Generation" + Description="If true, causes ANTLR to assume output directory is always the absolute output path and not to use relative paths as per the intput spec. For visual studio, this should usually be set to true." + Switch="f" + DefaultValue="true" + /> + </Properties> + </CustomBuildRule> + </Rules> +</VisualStudioToolFile> diff --git a/antlr-3.1.3/runtime/C/vsrulefiles/antlr3parser.rules b/antlr-3.1.3/runtime/C/vsrulefiles/antlr3parser.rules new file mode 100644 index 0000000..6332946 --- /dev/null +++ b/antlr-3.1.3/runtime/C/vsrulefiles/antlr3parser.rules @@ -0,0 +1,201 @@ +<?xml version="1.0" encoding="utf-8"?> +<VisualStudioToolFile + Name="ANTLR3 Parser" + Version="8.00" + > + <Rules> + <CustomBuildRule + Name="Antlr3Parser" + DisplayName="ANTLR 3 Parser Grammar Translation" + CommandLine="[java] [JavaOptions] [ANTLR3Jar] org.antlr.Tool [LibDir] -[Absolute]o [OutputDirectory] -message-format vs2005 [DFA] [NFA] [Report] [Print] [Debug] [Profile] [AST] [TextDFA] [EBNFExits] [CollapseEdges] [DebugNFA] [MaxRules] [MaxDFAEdges] [DFATimeout] [inputs]" + Outputs="[OutputDirectory]\$(InputName).c;[OutputDirectory]\$(InputName).h" + FileExtensions="*.g3p;*.gp;*.g" + ExecutionDescription="Translating to parser." + SupportsFileBatching="true" + > + <Properties> + <StringProperty + Name="JavaOptions" + DisplayName="Java VM Options" + PropertyPageName="Java" + Description="Specify any options required to invoke the java VM on this grammar file. Sometimes larger grammars require more memory than the standard allocation and you can specify this here." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="[value]" + Delimited="true" + Inheritable="true" + /> + <BooleanProperty + Name="DFA" + DisplayName="Generate DFA dots" + PropertyPageName="DOT" + Category="DOT Ouputs" + Description="When set to True ANTLR3 will produce a number of .dot files that can be used with dot/graphviz to genreate pictorial representations of the DFAs gnerated for this grammar." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-dfa" + /> + <BooleanProperty + Name="NFA" + DisplayName="Generate NFA DOTs" + Category="DOT Outputs" + Description="When set to True ANTLR3 will produce a number of .dot files that can be used with dot/graphviz to genreate pictorial representations of the NFAs generated for this grammar." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-nfa" + /> + <BooleanProperty + Name="Report" + DisplayName="Generate Report" + PropertyPageName="Reporting" + Category="Reporting" + Description="If set to True then ANTLR3 will generate reports about the grammar file(s) it processes." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-report" + /> + <BooleanProperty + Name="Print" + DisplayName="Print grammar" + PropertyPageName="Reporting" + Category="Reporting" + Description="If set to True ANTLR3 will print out the grammar without the associated actions" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-print" + /> + <BooleanProperty + Name="Debug" + DisplayName="Debug mode" + PropertyPageName="Code Generation" + Category="Output" + Description="If set to True ANTLR3 will generate code that fires debugging events. [JI - Not yet implemented]" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-debug" + /> + <BooleanProperty + Name="Profile" + DisplayName="Generate profile" + Category="Output" + Description="If set to True ANTLR3 will generate code that computes profiling information [JI - not yet implemented]" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-profile" + /> + <BooleanProperty + Name="AST" + DisplayName="Show AST" + PropertyPageName="Extended" + Category="Extended" + Description="If True ANTLR3 will print out the grammar AST" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xgrtree" + /> + <StringProperty + Name="LibDir" + DisplayName="Token directory" + PropertyPageName="Code Generation" + Category="General" + Description="In which directory can ANTLR3 locate grammar token files if not in the same directory as the grammar file." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-lib [value]" + DefaultValue="$(InputDir)" + /> + <BooleanProperty + Name="TextDFA" + DisplayName="Text DFA" + PropertyPageName="Extended" + Category="Extended" + Description="If True ANTLR3 will generate a text version of the DFAsfor this grammar." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xdfa" + /> + <BooleanProperty + Name="EBNFExits" + DisplayName="EBNF Exits" + PropertyPageName="Extended" + Category="Extended" + Description="If True ANTLR3 will not test EBNF exit branches." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xnoprune" + /> + <StringProperty + Name="OutputDirectory" + DisplayName="Output Directory" + PropertyPageName="Code Generation" + Description="Which directory the generated output files be sent to if not the same directory as the grammar file." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="[value]" + DefaultValue="$(InputDir)" + /> + <BooleanProperty + Name="CollapseEdges" + DisplayName="Collapse Edges" + PropertyPageName="Extended" + Category="Extended" + Description="Collapse incident edges into DFA states" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xnocollapse" + /> + <BooleanProperty + Name="DebugNFA" + DisplayName="Debug NFA" + Category="Reporting" + Description="If True, ANTLR3 will dump lots of information to the screen during NFA conversion." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xdbgconversion " + /> + <StringProperty + Name="ANTLR3Jar" + DisplayName="ANTLR3 Jar" + PropertyPageName="Java" + Category="JavaVM" + Description="Specifies the absolute location of the ANTLR3 jar file if it is not in a location covered by %CLASSPATH%. Specify using UNIX directory delimiters to minimize problems." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-jar "[value]"" + /> + <StringProperty + Name="Java" + DisplayName="Java command" + PropertyPageName="Java" + Description="Specifies the command that invokes the java VM. Usually java, but could be something else such as jikes" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="[value]" + DefaultValue="java" + /> + <IntegerProperty + Name="MaxRules" + DisplayName="Max rule call" + PropertyPageName="Extended" + Category="Analysis" + Description="Maximum number of rule invocations during conversion" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xm [value]" + DefaultValue="4" + /> + <IntegerProperty + Name="MaxDFAEdges" + DisplayName="Max DFA Edges" + PropertyPageName="Extended" + Category="Extended" + Description="Maximum "comfortable" number of edges for single DFA state" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xmaxdfaedges [value]" + DefaultValue="65534" + /> + <IntegerProperty + Name="DFATimeout" + DisplayName="DFA Timeout" + PropertyPageName="Extended" + Category="Extended" + Description="DFA conversion timeout period for each decision." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xconversiontimeout [value]" + DefaultValue="1000" + /> + <BooleanProperty + Name="Absolute" + DisplayName="Absolute paths" + PropertyPageName="Code Generation" + Description="If true, causes ANTLR to assume output directory is always the absolute output path and not to use relative paths as per the intput spec. For visual studio, this should usually be set to true." + Switch="f" + DefaultValue="true" + /> + </Properties> + </CustomBuildRule> + </Rules> +</VisualStudioToolFile> diff --git a/antlr-3.1.3/runtime/C/vsrulefiles/antlr3treeparser.rules b/antlr-3.1.3/runtime/C/vsrulefiles/antlr3treeparser.rules new file mode 100644 index 0000000..1f60f77 --- /dev/null +++ b/antlr-3.1.3/runtime/C/vsrulefiles/antlr3treeparser.rules @@ -0,0 +1,201 @@ +<?xml version="1.0" encoding="utf-8"?> +<VisualStudioToolFile + Name="ANTLR3 Tree Parser" + Version="8.00" + > + <Rules> + <CustomBuildRule + Name="Antlr3TreeParser" + DisplayName="ANTLR 3 Tree Parser Grammar Translation" + CommandLine="[java] [JavaOptions] [ANTLR3Jar] org.antlr.Tool [LibDir] -[Absolute]o [OutputDirectory] -message-format vs2005 [DFA] [NFA] [Report] [Print] [Debug] [Profile] [AST] [TextDFA] [EBNFExits] [CollapseEdges] [DebugNFA] [MaxRules] [MaxDFAEdges] [DFATimeout] [inputs]" + Outputs="[OutputDirectory]\$(InputName).c;[OutputDirectory]\$(InputName).h" + FileExtensions="*.g3t;*.gt;*.g" + ExecutionDescription="Translating to tree parser." + SupportsFileBatching="true" + > + <Properties> + <StringProperty + Name="JavaOptions" + DisplayName="Java VM Options" + PropertyPageName="Java" + Description="Specify any options required to invoke the java VM on this grammar file. Sometimes larger grammars require more memory than the standard allocation and you can specify this here." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="[value]" + Delimited="true" + Inheritable="true" + /> + <BooleanProperty + Name="DFA" + DisplayName="Generate DFA dots" + PropertyPageName="DOT" + Category="DOT Ouputs" + Description="When set to True ANTLR3 will produce a number of .dot files that can be used with dot/graphviz to genreate pictorial representations of the DFAs gnerated for this grammar." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-dfa" + /> + <BooleanProperty + Name="NFA" + DisplayName="Generate NFA DOTs" + Category="DOT Outputs" + Description="When set to True ANTLR3 will produce a number of .dot files that can be used with dot/graphviz to genreate pictorial representations of the NFAs generated for this grammar." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-nfa" + /> + <BooleanProperty + Name="Report" + DisplayName="Generate Report" + PropertyPageName="Reporting" + Category="Reporting" + Description="If set to True then ANTLR3 will generate reports about the grammar file(s) it processes." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-report" + /> + <BooleanProperty + Name="Print" + DisplayName="Print grammar" + PropertyPageName="Reporting" + Category="Reporting" + Description="If set to True ANTLR3 will print out the grammar without the associated actions" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-print" + /> + <BooleanProperty + Name="Debug" + DisplayName="Debug mode" + PropertyPageName="Code Generation" + Category="Output" + Description="If set to True ANTLR3 will generate code that fires debugging events. [JI - Not yet implemented]" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-debug" + /> + <BooleanProperty + Name="Profile" + DisplayName="Generate profile" + Category="Output" + Description="If set to True ANTLR3 will generate code that computes profiling information [JI - not yet implemented]" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-profile" + /> + <BooleanProperty + Name="AST" + DisplayName="Show AST" + PropertyPageName="Extended" + Category="Extended" + Description="If True ANTLR3 will print out the grammar AST" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xgrtree" + /> + <StringProperty + Name="LibDir" + DisplayName="Token directory" + PropertyPageName="Code Generation" + Category="General" + Description="In which directory can ANTLR3 locate grammar token files if not in the same directory as the grammar file." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-lib [value]" + DefaultValue="$(InputDir)" + /> + <BooleanProperty + Name="TextDFA" + DisplayName="Text DFA" + PropertyPageName="Extended" + Category="Extended" + Description="If True ANTLR3 will generate a text version of the DFAsfor this grammar." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xdfa" + /> + <BooleanProperty + Name="EBNFExits" + DisplayName="EBNF Exits" + PropertyPageName="Extended" + Category="Extended" + Description="If True ANTLR3 will not test EBNF exit branches." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xnoprune" + /> + <StringProperty + Name="OutputDirectory" + DisplayName="Output Directory" + PropertyPageName="Code Generation" + Description="Which directory the generated output files be sent to if not the same directory as the grammar file." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="[value]" + DefaultValue="$(InputDir)" + /> + <BooleanProperty + Name="CollapseEdges" + DisplayName="Collapse Edges" + PropertyPageName="Extended" + Category="Extended" + Description="Collapse incident edges into DFA states" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xnocollapse" + /> + <BooleanProperty + Name="DebugNFA" + DisplayName="Debug NFA" + Category="Reporting" + Description="If True, ANTLR3 will dump lots of information to the screen during NFA conversion." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xdbgconversion " + /> + <StringProperty + Name="ANTLR3Jar" + DisplayName="ANTLR3 Jar" + PropertyPageName="Java" + Category="JavaVM" + Description="Specifies the absolute location of the ANTLR3 jar file if it is not in a location covered by %CLASSPATH%. Specify using UNIX directory delimiters to minimize problems." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-jar "[value]"" + /> + <StringProperty + Name="Java" + DisplayName="Java command" + PropertyPageName="Java" + Description="Specifies the command that invokes the java VM. Usually java, but could be something else such as jikes" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="[value]" + DefaultValue="java" + /> + <IntegerProperty + Name="MaxRules" + DisplayName="Max rule call" + PropertyPageName="Extended" + Category="Analysis" + Description="Maximum number of rule invocations during conversion" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xm [value]" + DefaultValue="4" + /> + <IntegerProperty + Name="MaxDFAEdges" + DisplayName="Max DFA Edges" + PropertyPageName="Extended" + Category="Extended" + Description="Maximum "comfortable" number of edges for single DFA state" + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xmaxdfaedges [value]" + DefaultValue="65534" + /> + <IntegerProperty + Name="DFATimeout" + DisplayName="DFA Timeout" + PropertyPageName="Extended" + Category="Extended" + Description="DFA conversion timeout period for each decision." + HelpURL="http://www.antlr.org/wiki/display/ANTLR3/Command+line+options" + Switch="-Xconversiontimeout [value]" + DefaultValue="1000" + /> + <BooleanProperty + Name="Absolute" + DisplayName="Absolute directories" + PropertyPageName="Code Generation" + Description="If true, causes ANTLR to assume output directory is always the absolute output path and not to use relative paths as per the intput spec. For visual studio, this should usually be set to true." + Switch="f" + DefaultValue="true" + /> + </Properties> + </CustomBuildRule> + </Rules> +</VisualStudioToolFile> diff --git a/antlr-3.1.3/runtime/CSharp/Cutting a new release.txt b/antlr-3.1.3/runtime/CSharp/Cutting a new release.txt new file mode 100644 index 0000000..dbc4e3c --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Cutting a new release.txt @@ -0,0 +1,43 @@ +===================================================================== +NOTE: The following top-level directory names: + - build + - bin + - docs + are *reserved* for use by the build system. The 'nant clean' + command will remove directories with any of these names + without warning!! +===================================================================== + +To cut a new release, I need to do the following: + +a) Change the version numbers in + + all.antlr3.runtime.net.build + README.TXT + Sources/Antlr3.Runtime/default.build + Sources/Antlr3.Runtime/AssemblyInfo.cs + Sources/Antlr3.Runtime/Antlr.Runtime/Constants.cs + Sources/Antlr3.Utility/default.build + Sources/Antlr3.Utility/AssemblyInfo.cs + Sources/Antlr3.Runtime.Tests/default.build + +b) Update the contents of + + README.TXT + CHANGES.TXT + +c) Clean the build output directories: + + nant clean + +d) Build the release assemblies (for .NET v1.1 and .NET v2.0) + + nant release -t:net-1.1 + nant release -t:net-2.0 + +e) Build the release distro archives (for .NET v1.1 and .NET v2.0) + + nant dist + + + \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/LICENSE.TXT b/antlr-3.1.3/runtime/CSharp/LICENSE.TXT new file mode 100644 index 0000000..1a9b1dd --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/LICENSE.TXT @@ -0,0 +1,30 @@ +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner shall be + under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/antlr-3.1.3/runtime/CSharp/Libraries/MbUnit/MbUnit.Framework.dll b/antlr-3.1.3/runtime/CSharp/Libraries/MbUnit/MbUnit.Framework.dll new file mode 100644 index 0000000000000000000000000000000000000000..18108b9f12f2755538f6a79ed683b1163edc0a0a GIT binary patch literal 487424 zcmeFad7K<o)jnQRRb9Q!Ow#E|clMQpg6;`q0TPfU?6Sx%0T)1sf+&U6iAvf=a7O}) zB1;gFAa1xTiXuCRpvWkquL>imyeR7H%IhA!&vQ=g(=*e&^7Ee`^_l6ay7%03&OP_s zbI)Dt@Dtx_ScYNP_<!aZ!?+1|Ui--J#6RaDdT{>N28}NjA6R%(-(e3dJofZ6S_{th zy;u3CymrB<r<`?`w_(96)-Uikp0(hNvli@s#4!tA>z%fK*}y<)y8!i(2N=d-eU|a} zTaP<1r1qFGxUk&kfQh_eEYQ$fj|rYn#@#R~5<XS=W&rt@>%)jg__BZInJ)z61%L59 zcvWcQbl^RP&%paj3L<-*mpA$mw&6z0n3Ij0=zW1<6cX_TydRu+U$$ZW8#mzn?v+8l z_EEkQAk5;)%lwvqDguQ!@F;mX68FTl4<xnBU;i2pfaKKx&jLsI#I=uM?3;Lf{_%MU zJTHOgCGflio|nM$5_nz$&r9HW2|O=>=OysG1pa>{fe*7^jf;I#6aPbBwv1!1wu~YJ zajpBLY0N428AmQaw~_&qT;IEB_ScSo|CvKCJoDunPX5O)?wq^b!JpaLK7HTZSNm?; z{Ff*GaK&kV|N5Oz4IX;UAOHN}>g6|G{EyTB`0hWu3-)>FwEz0urC)gan)h$o^6^=@ zJzFPi+3@Y}Z?=DQ@LwJ~-FW>j|2$~XEk{56i2biEhhOr6cfI|4ubA`X+IfFDc*Eeg z=dU>ZJr8cW|JVm_Zhi06doHW)+-HQnUeldo7^NMJ>duyN0{HI3xPdvGvxd#ak*15T zuw%)u>0yANWXZ1&ptD_!PB`YpXIK}X;V#8vt<;!lI`7^5W#F)aySoD-ocg*F0arY} zBk+^X5otOHK3h6dOy~WU^L`;4VgI$};W@y4iRE1K{}t{_E$7m%xSs>rU*=X=M2_Cw z#a(58WLowIJzLpNHJvLg=L*|hkVOB~jx5*b0QZ%abEWOh9gF)pDAz5Pvn8#OqBE$w zkO?o-tx|x)Wq*4pcxwnRn@p<%ZMTuXKBEj641ZP3HiJqH!=cV~OTT9_JxoTNJ}2oJ zG*SBFlj%V+POtPC6sIR&sLvJud?tIO&u}&gUkvBvKb{QlGnRsV!kcSm;mO?ibyV4A zzFt~AMP6?SUug`?jSIuqKLC}v@z(J5XYzVm`1+8%-X6Z*Ew6WkuQ$r;o#E?8<@K)c z^>TSd5@q9E@+w@}^-|+a=0;(O&u0hx@cFcW89uKwHwq_wKFr*BJ5lj@A9JJdz~@!w zMqz-@uDS7^5N3|KQ8;1vRCA-S!DkyLjYTZ7Tm_zB?<=M|4a(VEVCj8^>D8bnFpRvF zoxE4ay}wa1EpLWA83oauvG&%~Ay?par=!Ts;k;$LhXJ|3!z#-a#K8(5&M4tU#xD_T zo;wR9Tu^43EWYLh_?i>po2mG0vD0Kid2nZgSaY6fEt_F(rWRQ8o2y*}HR*GqN={?3 zX`SGrI+g6@;{q`cjxi{?Lmn(UH)s#$m`Y`BC*w4Spd7~04)6+if~AOfq5@c(`8$@U zc_B~Tfyh%11Lk@uPwsrAagmUu5#NQcAd+#g7;-6J7R_U67&2h(vE<iI2#WM<V^Oy> z)l{0C$W?UEG6n*8(^9bjcf?x;7t82&A<f@3X`v0l$rbRs3}gvu$*&!e1?*V5Z27^G z;0g7VGE<4U63hGzD~V9Q#i^KYHV3U{*|cbDou=6sM9P$8)JMqXRk1S8G2Rs5RnNp0 z|3vfQK_sY)5Jt&c%n~U1$MnHhVcjt$(jF($%6Z6E$+Y$E--~3L!dt>{`DM#pa)lM< z?>z8Pf=v+GwUXI9)@mMQ);#D!$<o_OvtDwBcdwP}{btp!RdbDn6}yt#GElVg9uSqp zN(`H|{(OC1xst1|tL7@XiVb(^hlM5*H;AA)Cr6P%!gE;55+dU}>b^}r<O0-?+t31H zcwEm!XHszxR*+`p!~_5}hQ_i9Xe8ox320d6%AIq~=@~7P>~vLC$yhhK%O{|lh#N!q z4$*G@hGGQWL|~wU<I+U~K&9_0(?s0vQGUe)G&R$ZbZ7;FGVE#^0^(z2z1sw|6LDkm z92>hto)dwS<r$e7H_wT<F?8eBAwf40I2qkNC!ia}Sw>`ghPL(9w)LU;oGuC37Djp> z#Az$Z@-ub*59JiJpKF<jb}njHktRe&_|T6s5pD;F2oFy{F2xgMYQLCwG$3+?ZNd(y z?`exSo7GozD#}Y_M-L40GS>cT4D&KJ?hqv}IJ?nDzb<P&#-Xp6nE%)otA(dEMO8pL zGww%5ey94$%(%8v3f&D4`U?>rl$=~9yzj+k<bAhh+w^8hD`&v0kQcSLrnSxXR|0Z| z_#Y*wrnY6PQ@1wXj{3IM3DiN-4hLx^*{hIj=D5jb*m2TvWOH;-HaP=jDm-;#hhC+y zqYoiFlk$^E*8@Mt^~4W7YT-v8dgdpSt_ObB^~4Xoap6ZFdgdpSF2hgWfV&u!iCqs% z8HNbep@fosX-~Y-S_yCZ&@*qDbQ#|4*k(ob{N+9IL#r+P=tIx^WYYD(&nXc<Xiim* z$#EddvmnRXn94`yQuQWhuw7t%O^q?c>C?4P)AzvNX%T<T5Wls}g#Gug@4*_-j_jOC z_e788fbH^FJN>F&`N>pkEy5o7$)t-#)SaJK_sUPETKCLPCf#KGytY?<GS#|gelqDM z<LB&d{8(M|CsUQX@+0Xo`jbgF89%LF`N>q}p83h7n~a~=NBnTiW8C`NrN$*q0QGwH zr0LU=%bI}h`h8BoU#icObB~c=w5{>DJo-Yew$$pY6u=KJbUu$FH1S71-&xjKXd|R? zAdblAW4Qa0fTkJuvk>l{7}B(jAw_LudhhF%j%A>?D_1Js4Q-hj`;szNpd$wEsWJXi zn4ay1HeqA(s$7oAt8mG@rf{4T;!ev;Tca^JUZ(lT;CMxM9NL16!Etg|93mmYruk6G zjKLuip>8GoF4N!1>ctJr`dy}f4$}Qwe&8h{fXVpD7;vq)C{LzK_@!g`$)t-buB7eO z7G2t%p9j+N$r$kQ`B`kI<daF)13wtpmHy4d<&`nu<MWd#uS~ig_}S7EKN$nwGe4Ph zJ@9jNPyA#Ic+dP~()Ga4ha-L_^!-f#t<a3P<CQf0fnHDO`<edDDb30n{&DsDx`4lo z9eSSxkFg<IJIC0N_Y%5`?Y~OHv$j9fnT+kfGNd`K?f*!Kue<FJ^D>U@-x}jj*=^x+ zti4n&$K+MG9Ao=G6yi?XT-C-gI6kQP$jJQK?l@F~#^AUni^IZ5t1A*3n-`VL7#t!I z+RTLCZ_{r}E92(d!>*D(Xmw$_gx@de{*h9`Y`VC*P<~_m{+mSrJ@At;<300}NjDik zus(sUokTtvGu|^lnRJu!b4RcIWXyQa{AAKi#?Rf|_{nwApNtvr%1@Lo;XY*2O~%i? zz4DVW<Ky#_(dSIM$@sZH;%7p?Uuw>tx$(?D>%)Y8zob7O>0`-d&42g$_CUnn@n|0~ zzFXm#8_Vy(6gSy=Eb=mK9U^!p0xjpm0mFRV)--t)t@vdpWoYc=BstE~n2`&HK0-QY zMBv@%06a;n0$RK{!!u~>80(1SmNqbFOp@P>otP-U0?PdAL+|;`(3mX089F`W_o3eN zo3TR^<ySzNUw!C3zZn{n<u^m8hy4Da_xxt;+(h{mQ07-3de3i$#$@@;(CHz+KkA-e zv7?##o3W!|er2d7Q-1}N`PGN+`4t+O`kSGV%&*YN)ZYx99`gH0@A=Kx>51|ypv<p6 z^q$`gjmh$xq0>Wtf11cI`u}R56XV7@OOI7CmX02ewcCkKglPw0GRTxJ^R38!WIfeB zp3x({v<?KVPHef8G}Gm;G!s%#y4~#d&muY4Vz)VdCi8z&44sy8cccJzG8=nOF|^&$ zkmY7$*uO4nHoDDc%?R2lN0$kqZRkRSrk4u<Vj6KsHyUE9IcKI1prH>F(V)3=;bq1& z;*f4M#5|IQK7fWkOhkhw#>MDJOd}5IMng;zY3KuJ=)*)bSgl>mD#kS8kZv@xRwJ-G z6P5?7lDkuqMjX<OhEzS~Lm!Y2eMscvh0u5ERdQY>UB94SJBF1AMCN4_E8%b*7U^rU zFF54>CJImZbN;uWpYB>jS^i(5N7F;cs^ssI&-jGVG-`TmZ^-?h1a6eD<i+wkNUyj} z52Fty|Fh#FM4H)w?xSB;vHV|0X+0B3%Z-7&*M|ozJYH#z?vnRb;AQyNqm}$d3<CG{ z7n)ANTZyno{Jjey+XKa#xwQ!EQVe9>Hx)h^MrLO=qNQP=tXDQqzf0r^h?C_rR#fkd zXtJ84G$<-87nJ^6x*YzHz&nAg?j0W^ZB-iQp8}k-;ag(nm}Ae~WVj@fA$;tAL<IT^ zV7UO63&L_B+lNBg4iuYCQDqBDXM{3bzTf0Bd^*ajC3A<AwCS%cLNCxIDGd+kLJL`9 zIXug5Vv(io&f|)x0n-YWU+|T5vw8kY0ypZ8T#9bUO~x$_<2;ODm6{V$$<p}y1T>Oy z92?^m<Zah%-Xf}V(|O}-x4ivp0=mh#blxHfcBPWd8`c6xw6pSy<ND%p5_dOdE3wXW zqPQ_@a%_@g-v?{tv@Tg5x|N)FrsuF9bfWw4Bl(W_vs8Hs5$~xntRc6k5nP)xT}lM& zyJdZ#sjCMaJ6LtA`jo|sEgykQGI;wnf;MU{@a9p!uso16H>6lEjao}bvG_5MfYAQ3 zp3vG1z)wIq!HUHf+j;bN<qFn*4!KyXP2!9zMR8dB7lp^`f#G$nk-`YF(-q&eaqtD< zUGhRo|A)Nv$($Rkb7fog++4Vjo$Kq1K|X5Rs^>96b=`~%M*v@6mx-s00grtvW&i!q zjBw??^rTCUTi2{XR;K7vHGqxR8MS^~FdQ@%-Xpl5YlF7q?GBMGg%0*bb9WNq?ICIy zayT0}Uj+KlpNiSsM?qcykaA;&+RqJ*KEuQU(o2Ba@xF-Pz+^ran#@FV6q7*a)piaV z+pUO15J*VNeax6-YmKayVm`43Rb(P-uu68b-}bMiA>9+Km2Cg|@Hy1L9@5+~c^a$P zZzbqh{u5!EU}?LQL7KNQY3ikb&p1t=f!0y3)?UbfyElH$V=+allHSvV5|%wpc08}D zw!mLY<cninkL#74i8Bp24RWcShJRw%!6Tdq+jJKI4fcmPe6ck;*I|^@OI-&idf6sO zxL+d~PL$oki6jiq84JM$@%SfzdDGpFWZfn5i>(|Eou*Q-RYB|lHUtEGzX1vSYxwg( zD&LmW0|M#(FB>)IZ-5AEPV0$&!|9+tGGj0=@%|Iw#{L(^g#4LCNRK;b>g5=VAV|mp zWr(yy7pCo#JrGtDF2+|PY5QTcjG2fd-o**Lw!0IuU9uFHW4A5^x8=O)?ucOTGQ8xy zEAb1`B9HaB&jB8+s=jC*s#U30ZtQI5w+zqm*8uIbK6gJz&_4>#?*4dEDL8q62t(-p ztt;obCi{NV9R>}{@eTl7e*uggN5-%sv$Ux&&@hThv)leUQ_2yn7{UI!8A<=$^bP_J z%UuEVio-IN5*SwiKQ{$$Ndo`<WEzd6wgsk9*CZ&{eGzDS2Lr4BEdrsG0K|IU6=t9x zFpzctL!IN*omXPD++7pAE>dtK*e$5r0EN0d`iB#Jg3pQZ)AzF6)d~Dz{SWY4;-2}J z5bJhidN$g9w50~hSK5KQ5ToUYmRC9j{f%<L>jUC4_Y4-aOYqy#N<q2=3AYteBYiIR zcXm`8TsP{=y4hgUh<qyDGdU|=M(%FN0+yTXAvqzBSAfU)!ehZ2&aK`|5hsR8hDt+a zWf$8Rq$}eHqy5@u3=~9~MV0BdLYWqtHAk|hEsno@AP{z8_;&aj+h&b!??^7IcExVy zE4KLO+80U%J+fmTDhhg6#*t?l7WxH!CZ3NwJKEmD$T3$}e_}5!yfOYs5YBe<NMKq3 zS;QqY6qHb2>YcTW+pr2jQT?J@Q8lOKn#I74YJ~2ZmRZqQutT>pOZbPumWZ_pJqvvh z(;9NaaPoS{7+wcMUWb!hKGmH|yIDkEh0b0ha*2cXy=cr@+#8?!kHcpePCicopQu}q zskD@VG7U856h%S$^9ApPP;S{AHx)19<rK9tJTf{|9IGaeIL&EY*$?=iV!+i8mp_5J zUR`zKpmB5}2q*tnBRT3+r5<ozwHtNlE9-5)Rd8Ph4A@X(!-5wPEZzFYMyFS7<r{lv zpx!y{e&(BNwGLGs;Lr*(U>4Ijw0aE_M^Hubl{|3d102KM6bwAFo^VCLcFVNuKre7R zKk7yVQb^y}ro}$nP@sK>i%`;W_L#V6J(@KHCqGUThugXC;X|k%3Qzg6dc*6G{)oFf zNJk!gfpbsN9SQp)<$)giB1eu>u0eR0z5`1<qWo|5gRs9#+rCUcC<-^(Cg^@wD=ho& zh1ykTUpx-}AiPW7Ncp+R+X>^)4#K<8e(7^Yo0#B;jIrNAICbeb$Q6xmr5?1f1C5$m znX;7^Ny9<nCfY(^Uw$@@eHpio$@p8*Sk&ldUrgzjEdhPA1?!BlK1;?8%MBy1eoo}u z4|PyY;IM1AKztzd*W@yjad74dsQy>dPiJW8vzpPFg&{b7s?Y~E=a)MDBsQai;R4Wn zc__z(-<5%}+>-<-++)5y^VDYYt~41T{ZiI_7)HR7Vpmv3$XX|~<;D(xttoJ=btpv^ z?{9`{W;BQkF6}vRAA+912#A@q3MKcVqTy`dtE5Wzw_XwOpOlSzDg!wla~g0D19$6e zpeT*ZHv^Ql)<Fm;JD!hQ-dkuH&d7_x$kr+Z_G?^0;}(W-ns7iPixTOep@4@EdWrQ^ zF8MOgJsj+JAOP)`nbE#fQ{vh8xg^f9)xoq5x;-v>^`#B)0sF$F&>P2i1bIQL(^Fmm zr?MOQRQOb@w{{<sFL0@Fh+Tu&RK`Y*2y;EMD155x*jE+J6v~tQZbrLeZms0&W}6ws zQ)@9WRWXi1;i9P&>1HHY%>~i9K!y%v$TCappR0AC+G#zG+OQxltG{et%r=vC)k#JO zji?URI_Q$vsEY9NLF#p)O|(6UvlY6)p#Cu(aA{qI*ABW23h5^6FmZ?BNj(*!!VhL0 zjNORCeFHcs=MUg09RFF-8q+Kn4lC-+6j?rw2d8y30yfc1g4b?+zCIb7LqE21F1l6$ zd4Vk<jfBrihFh|C2_sCYxt-QAq-(-)JYOWkIyD>V$A^2Xz_Gt^0^l&_lftKSMT*t( zjs^1m20U+=bM%e87vq-qj>qrPg0~L0;clL{31?fmK@AZ*J>OWccQ-%QPMoi?FC5_H zu5FBo*4(#{S=OzWfme*|q<95{hdjW#dne-Ny#znlMr=9ti@pKMSY3nJ;MU(@IyU8+ zivpmRrhzbHf!PWL(y~hV3N`m_A}*OzS_B@zWyNlR8wed;{g>k*CtQwVD>laPRwCdL zAkuv2jj8o$2o|aJVi~cXu#DpJdskF`W8*G}%8dOYj6($JBz0NKX`nGwlyX9UkmXd+ zaw>-9)YX4yQ3+w?w`wd{*{wZw4A@Bn;~K&KN|?nPBD2ULm|LQ^ZiO=3y-+A`>LL0h z-Q+5aWyBiEbxLilT<Lc}pN#{-r>QD&5(H6hRD;ph@1tCB2#$9$LW6<UC%O!@k}s7< zzcIh-{9YgX>2kGB0WR+q_&JZYxOHmu%F0V$L+d$4MJnf_VkYZ3O$V>ml_=ix7^(2E zk#cDpr2a}|4~IH%(`~cfnaf*nLX+CVXuP2d4D6w#vn8F<A^jX>)n-&z`^SjLhN|r* z-L9~V0BoWU?LPpusJZXgDul9jj3uUFpp#h{0kS@E9&$RLQt_VzaL$86P-?Bm&!$}L z4Y=<?LsiO+L~WD=lymOo2;V?d{W-reXq-KNJMWc9J5U_XJ$eiLpPau|LtlkZ8O|tG z?81<DI$oC+3*H&HZ-i~{<IxI8gNkNI=eX*itN3cfdS^1_)W)ursnXLFYHVFM9*?HE zTBsDTZF**<;C+*AYOzwpYpLQ?irRffDm3+_;XBZYoT?qsN~MBMWJOIyipsRcQI%;4 zDy2$kBcy6p%at<FuBui08`}YQf2GV{?=`@@;RR^<y{|yT-fQt%>Blh<{eW=1v+%m& zyFe%md=v~!QwFM)Dj28+3^?8k09YMroK_i9+Qe8Ls0?@)VxUw;nyS+qODoeg7MgEX z2hGYrWzfmD{s@rj6w9tm@vv~yA(W8&F33$+a<xhg<Z1!AA&q}O;)gW8Ua2F#uJNO# zc>bOBaP6D4nf)A|_rw36@E_F$Jl9ZQFv7+L+>_y-!#ixT@$*dh`|$ocgj>+VB>Yhb zyAN@*5MIJFuXMYOR5EXn@PAx}S*GVp6yU9BF2Xe1=vvyA+d|w1h@`K>cc~xnHsp$6 zHjIUVBcw2bra7SKFk82=D=idCiWc9qv=k<$6~V-`7(`mUk4tMoh8Ewmv=k<$6~V-` z7(`mUk4tM|h8Ewmv=k<$6~V-`7(`mUCut?;mR}FSde_iY(YNe3^fJ$t@U7#7Uq4Rx z$2DAaS1>`D)B5yADM-?)0^n%aM5}4fEb(|K_Z-B9Ha2I#xiOBFc*`E{m$~9i0O)TV zXpig~no+NfppAUR7+4Z$q0{;TxG9@B^C{<j9*^ixp;n;<><AW|LZ$6TR3F@P5rGzC z5ye$^-;6ib#gJF#2TYzvpf+K=^96$O6-MGRV*~HrNMRt1@ln6q{R~1u1C18@UTnKB z01SM~isiip_`J8`CpYqFI)i+Lr&Vygw;>uv@kD)!ZFPU6siUuAsmo@Y6m-y7TAJp7 z;?H|;2L|}DVz0j4Wo(u_s~@npvHA^B))1-}^8?!{7dj~0QCbj(VRV+r<1^2^`OO{l z62s8#`B>|qJI#&^h@0-$C>r9SZR7QS!V{RF0G-G=(%;rQKuCB49qseLXGWV(c0(Q0 zxeBzSLAWJ{rceb4<=}uJtp>MANoMREh7MA;hws@ssxWaKjbPvd%ccA@=jz>iCzxIU zF)dhGrbxfJuX`8OrOkA#$h=1tIn38fgn!CD&Q~GCZ%Ls<GEi6+PFGk)M6fCs7F$<X zMntfRmn9v-W^I6Fz%$f5ySFn_?w$DEwd|h(Po?!PWPB48k20PX!kO;P0P!whNfNch z=ZshO8SEFKPZUL$P|w}F0o*KN&hs01IHBx+1&HTf1Yj&~s|CRC1}?1B3f?Z1H%vMT zqRsL)GkCj5-Y|JZY`WmEFgtvhlMh1Nivb3bl9yBb?WY)L&k>SbIj3laWHCjum?BwB zku1&%a2IDQTBW25@IZ;OTXly2wTKekyA-X8og!ATQ`9PUid@AG=~ZkHBz7fO36~m3 zUj_1}zX2QdZg@U27mnGu*io_@bAl;}4QND7Sl!lxK-G^mg}+3Ca9-jkaDTeZOE}>? zvD%%P#t!>NZc3mHSzC?XA}cC%f)nx$RS&TN=z0hKJwv^3gAY+k+M7(=196;X0F`mF z)FmSI;1;3g5e53&-yxvcmWccD?C6jx=*4FOChWJ_ZW6_%;L-9vAiuQjBTqzDU5v14 zjX>G8Kj2*k0Pp+2ZF!gDk$n|Q`v0eZCmSaJc*SaaS0EaPCLI*K4|!K2!1lJ_w_NLQ z?2s>PDaD8#?P!>dpaF1#2B5yKzmUK9j1}KyzA2li-nFg*rVevpN^=DO#?Jv9FYTYP z`<oaQwK~IqhdnT5eV4%5GTzx85CEb5vP9-g9@>u7SX6*FXWW7`uK=u$nVM}z#C@f@ zu6C3$J`90)OVBUTp}b%i)enahTTMizhEW4t@nB*C7b<cBmyWCk@KLucNn5I8B1JIH z=-`|?qmoluC&$G;2w7`iH@4aC)eL0$7b!?w@P6D62_)r~4!<S}PmH-+?jzJ+yR(eN znCtAs(qUR##vO8yqkqIyuATWXlACP-YZEH7cE*a=Mqt)#lt``4&Wd!oAmu#WA>i>e z;`}0T&JqjAU0#A5Yemd9Q%EOwYkr2=X2M_{$;{yGTCjml46q*Y7<@9HL+&p@TjiHn zV;~~|vKpomjnG>i_%^f(=n2W#g4X+kMb8-J{Q{^0n~)q2C48)dk*#ol18@&rs&tz5 z5xzK0T!zAf)Cc;8(v}Jy%lq#T5yDwt;xz7)h>~(=T||EgZ5(OC06h^WV)+jso|oyb zM84~Zv4*_yX@tKDX}NGBH?lrdd-p=9eY2Jf;rzu$0+fgPb0e6>3g$IJ$T&nG`3gAr z?E%~+NbmjCL{~W1n1?R?Kk+!=4Ci%#0_NFviur>3XYh{LZHOKI(dbZ@br&2u417-0 zxa^9tV{u%UeIN|QnaI~*Zn!aMCo;B~8Jm#`igGqJH|Pj>oR<hZ4vMlj)fvp;Kvy2W z>YWU>TQ5QHzJz>eH-Gg#Cid|-3V{K&5Tb0s)s}&P)z=ZiP6$bGQ)c~xwzn1PJy5*( zjN$G5BdD;~;k{~`6?@Qby$YnNIgBaf0#xgOs`U{<I7lMvw5s`9wNR|isa5B$Mq^@B z=2Yfx!SGAIQozv5^?==~DN2>%$Z#|{;(e4@=GCh68^>1WRpxKmz&MVtQ~;RsUW_(+ zbXB$AKNCy=(Z>KT>mn=tt&cP500urn76-xNpt3k>ROVygWqxITWgeQ6k5o$DCjdUY z(!VEzNOL;HtV{{fOa+>$issR?;H6<`r{sPTsl6NUQz-y%p)wc0b1QQzb1pt(@2Sr` z^UP2cLr!mm*qevu#DM4<)+QW4HZjIDyuu%tW}L0zk_RO{&8$odNmoI-8VLDMl%m7a zZ%W>$h-1NOHZ+w59_kUshg6)?Yt>p~eq{*bIiErB2DG?+)p}(*#&3k%8u-M34~CLH zi|7?UC}2Qn6WCOg3mb=57An3O7zLYK!Fi@Lyw3qrM&!=<GO!(3omrWQR(>&*4|Ha< z{*L6;S$LV{V#dX(&IZ%7m1!V@87mEc67JMO9ZgzPS%lG~MZsv(0*T*!H%JU13lwB= zWidb&D+nrFpNo7NhxQGg(6<Wqrq49KXr4G=Nq5*ZPBuq&)@MRZcF~Rv1wcAF8?H+0 ztfCPP+xmkcS+mWc&}Jf+NJsmaJX;!rMslIQ{WKt8%XdK<v}5S$+mKKPlTzBAIR;t| z1EUI+*5@G;E@V8`Y!fUW7gc}3`vM}H^Bw;PQ4YSDZ6Z-9?~4d%)E)m+M5iLYga}#e zs7SSZKjgnw;K-C5gX?%V0<M11Q`8GO<nx<Xqvc1z%A&ba=-+bOe<S#9iyTN_2O90h z)WCl(!Pa~Q$(Dvb^ONKF%(g7a)27yj!*df7nQd}}b97H9hEc1(uxT`Jdtb%dBSRq% zEO(w@Id{j<$3DiGdTO|~?HFVF=`4=kE|&WsKv{kP@ojxtwBp}|h{8$#OnWDj{A|xw z0|y3YD&`2>PHkQ4-q*l(e+^403dJoO7|!(!P*Z1WU$MS!pjd#(`GqB(czR97(2$!0 z7<4=nZg&sI@}UUc<b0c47?S{7oP%AXx7~Sjw?QB2aJ(5B5H1c@KwANG9RkL44eH+# zRjl)6P{@hQh&vsw@Wc^@JF=#7J>V_Vb&xaD&C72=ex(`On+;WP{(f?A1lDkK!Ff59 zhb3!&m_gIZxi*41+kaJ@8N0KGurK8o^U1&ve@=Y-6hGv_Y!j%pf5eIUH&98rFb1?2 z;>`soqn30a<zOC%!n`Y{Z*?%ZMDJ}++)#uOA8aGcHc^CpBz-5r9oZR$C5^7Ij1WHy z3>)VHui6f?O_~EWuCT*ex-DhLe;ADAJsJUYtJkq=qbXkTGp+Ca4Gtn!cg`Dk0?(U; zKVjajLawcwkqW!nyszW#)IBsSyxpp|+i>$A2X^;%J`GfjvmNga#(6+ia__>A>9}{} z*4YPKnQi%XE5PjCgHVikOviKHUx=i#lo^H>0Sf4S10enZh|+}-90Cyx60sRH`(zx1 zDS|h530L=0-d0=(Bn>BF+<VE8qWC5rWe(W84^Qs>am=?;F<J*=8^Auh_H`B-dUan* z{cXTm?hLR7c7&hVX?QF=*cZ%VD2$-;1&dzrJ|K88*D*O>g7%E}JA!vkFL(*sGu{UU z@4N)wMS&cG{BPa|<!E_?lSls!>H_S$mSbXlRj~Gb1dx7iC{P%cSv{0(5@t`r%oIel z*%Ox+v05&=&yifSeA2_QJi_TZZ5YlJpA+N%uHfHp0{m+QKjAj>(f{<b!v8(NzjOlp z&^GW-xXpa@AAeT(9}@g-0{?<g=DJ3{9_ced{n^t)=}a#B?+fl76S&8%D+KLX_Z}9! z&0g>lv}e3O5WLG0cxME%h-5$z{}jpq!|*y!FtL98P;f#`$JM_BrThrDnUDSlA_;37 zm8}E+MHcQOP%WwhU16RfOt1BXSS@$e1bk{eA)MBem9<b4y7T!X@_8nK#^+ODt|LsZ zd@=?0noP<k;gruGO~U7o$!E1bA)f+s5Mg@dlPN40^Y-JGyULSr%I7&mKY@Mx3Hki& z#C!_O)6a%arm)<7CgqcG%IBIHX+9^`|3?J>z7ybA{U@C2|M|}f|D%F`{|WFPB=w7M zoB8P9`>gPf3jPBV_-Ci>W8B^oG+}G9b@Hc(_N|!{>Y2doN0?sqj43SlkOY6-+c&~# z`JGSn2|b&*{2mkhhb8bYNasIp9|-E-6=9#eeRy1OzbJuwT-g$I0@?nIr2A$~C|iNq zg)qI!mMJXv=mdY=WlK1f?W>5sXW9N-@E@DNzciHXkoyZnHsvEcv4okxzxr9xctU8r zI6)(u2d#gE)B5+_4F0Sh|2LVKIeS7`3(PTu=~dQDVYw$xz^B?v!l|q;B>IG`vwS{D zKJT5FPl0*n+3?8}mizKa`6Qh3xyzh1pA*-&Ukd({C%}KG*fYXy=A-Xr@Mq=lD?s|! z5NP~%SYRF^Ot0m|6qbA11bk|F5l-cho12zHmd~fi=N<$apHG4D2-7Q{OkugFPs%6Z zl+SB3d`?_mzZU$jPT(KcJ`&XbVT65h`}iBd{h9>sY~9^gbb)Z{`{(DSWjrzOzZLvv zO@JSm(YGMnW<L6BGx)P*_&<R3Hxg+4G8CB46Q<WPWD3jmC*V_cjc{6qzs~SEu^fIU z_%|f*kMa8n;_omYOh<lyHt)YD$jb;ae%=M<TEg_2cc!r1Hzs(?>VW2*aGLj@6Me!i zPMr5Y2>wkI;6Ge+fN-1n=<l!~jXx`gKLXM}i9qAaL13;WOs{fa3d=or0zOp^gi|>@ zJ_(<gT`BoX7EZ{gz?@2$UioAS%YDnFd=gIiyoTs|F0Vfe{<kIYkI_|v_&+7qNLMG; zfu{xMI}$jvI`$&b0m5zOqd#TQv*G!F1^>Ge_{a702%7NoCg%Guf_DcUQo>l=WMe^p z75EE#;e(((^YJ&qdr>cV37Wv0tvi25w0{tVJAT~}n2QM0t4=b7<zABDFI&D^cL=9C z`Q2w#zW)&X?@!<#w+$qyKXY-YJ(HK&KLz&(61d0cJ3;)ziL*z2|CivrJb^PSk0V9j z3AdS#{+lC?b*y7zz1$}FuT0<{R~`iQZ;7x^E{|sf_f-kpS>6v4-U+Au-QPyod*R){ z<`~PpI)Q(Tyb0pZ-7YEbtRD9f<T!$iug3y&0bzR8W2Ug&YZJU>^R9YKIMw5uiN0ss zY6^a=l8DA^#w|C3`hSS9PhM`8;J!YAdt4hx(1eYcSl4X9`>_PxG37-NfBuqWc}<Kn zCpeRKHCw(8Q65f|<Cm|%oKKiu%a<uE_fv_ybT41RY59JU=zA{Tyx{*#0{<9U5yb!1 zvyfFmaDFa<b6lMvs6TsY$noSlQxx1^=mj@H{g)(g+gy)ioX>eb{Z6_r;w%BKg_H0~ zE>69}44^xJo8u1R*Z%;M?+LrXQ|U_OygL=Q<_vR&?A^pHor7t){MJHeE#~|h(@fpd ziA9Lc)}n;zoLU)l-y-vkgzGxTxi2E3`OuueGAM>!3>>^L!Mz_Mbc&vnvDbjdXl9#H zI!^?{FINa}%O3si3BvUrme3`Rm@c$gE~ZSKjisc-$0!6aSpV@A7EN}|<4sX{CD)}^ zAWLHXYBB@+GXo(%ZxwzRr2KGi-UFcZc7$`iTn+0Dti;kXu7s=FR=nq5S0z-7wQ5OD zDykGKr7dy>Ks7fcyXVfpOnB899jxXpY&qYV2%J%)FkH1pmV^tkbYow=zsOL`I|b|M zxZST@AFwLetAg#eAI8yj+-ZjeVW$JB_X)hq+i85e0dF=|Lk(b~Z>5B}X>6OTU~+oz zGqCDsN92iXskv*me1tJL4X=C)FUlhyyo9?cxsG#X6gCaAbnk_j%_Z#@LS8ceyJTDb zKIm@ihoGrjyiS4sbQn(^v5b?#^h2Ek5C~N{P;Y23xqI_q-ek?@2s%@`^4Y%y#TA@Y zdL1NSw*DI{2sC}0SiE23-LzWM9Rw4f>SG18kSWx?`@rU~HNDXnE+G;fqP`-JSTjK4 zawHMv!1?TLz>$L<7G63yIa3rN)DMLxm$AOax+v_6E`~M@d)b)zV82@|49a2*%m#>V zLmDP(p9D>FT7XW!c;NjP#2nZ6cS>HE|4?@=V-xat0mJ>D$3px*OU=)3A4ydL+Dz&7 zLx!V=l<<MDOtj-wQQ|={#0kifB>X+gK#SA&kk*lff!wp9dS)0q?PMI1)ic(w8%)D^ zx0KU}Fm@wS>qkhrL|C!^8Q8tM!JGHbe7GPX?<yNCjWyRJqe<9X0c&n^9s$PI4_KNF z@|Qps06ZE240i_@jR1D)4)D_mV0m|d#|Us6d03eN_$HZ5GIa}cxDP-(R72DMEkvQK zrDc6atee{+DPXfoLT62+-F!P_zO{g5)G<7DIS9vs>Nx!G#B-~_i!?`<qUg_d)0#1+ z=tqr5(TBp~;_qZ2MZRmkl`e}lpOg3Aim90q(U@Xd)*T=&CRnL%1sxaDitYe$F|CRL z23SJAvqMTCSdF}P74n43!T)(MGVj3uQan??q0SP11H!Pc(4eSzg*N2E$mYa0WETa2 z3e%vmQi)-ElAHvl(tQwmgc!MdiRy+bCbqR2;h@REnw$c61$+mo)b=hw{6(PczW~{B zX}`T8{!FJO$A)2eBEed@#6C}59ri;aq0KrZqCp)RuA2UlY1uTEnf{~cAk{a^y#l&s zx(@@DdpjO^#w<>Y)&5XqL+kF3LRuK)2-d)jM{9-Ymv>ARjnWdP15*DD%`aKae3G8U zz4me`e7AfIoBnQ-;eHIbqijeS^n`c)WO%PniU)X|_`AUVB}g2d<7|5mg9Yz9tlisV z^*zr;*Pw4B2q&b|LaKfwaoqD9;D8J9Z}YLd@qfjEQ77YK=(6qIN&#GhpOSMx4x#*S z;Qti-e-i(1!~bfrNd6fh7d0$F%Bv|SZAn&N4^Y#8d&CrMZW0OyxGS}*NV3d?1rcz= zGyNMP-0;Pdsfr46nCagefyfHrBoH>!v7{PH(N4!uIC~+5s*+PE>_kiZXERZg)aRLl zEbz+s&h9KgSh{W)^;q{K=cUcnnB{Oi)EcQRp${&;aFB8~(r;J;;}!rB$AD0R$O4!- z!iCo7GUDD#{H-UEuh`B-HcEUvtj~i(Sn9y41U}pJkZzk{da^=-Eb^`Aj>C6?-!>kM zo{=m0Q<xQD_9(ahkZ+B{S?=6RmGpP#Nls|*D2MlnoaQ6U@)qEC!#>D!BnQh_5a6TC zpF!ybT_aagw94?&yoE|5DR;%UbI2HQq-Cn{i-Z%6n+ljqBVN44h!QTCE)%z1G7e=c zSFr9LT;`i0mt5OBH+sX)twSMptgSsvN`!RLl|X8dca&!hqkKb$ntg-q0e2a~Y;55E zD@wh;Q7y=pADnIHEWrV?-V(4?(0x8nsJ_lcn#(0mOu@zZHW$-73iRi^uAn6!S{7Fj zwk=Gy$z$v9k$MTQ)VnKVe8GBW(>Ms>yn2y=w-ju4FwH_i9KoB}=9>o#Tk4=y5?xK| z5yQMdk5oUm2%i!T51_PRNnCZLoXMxi)a9P2xPI(|@T-s(a$RM%CB5jbgXVlm5D+0W z+vLub{YpGgl?MmjAGhJps@#tRCS><0$=$Or_YZ<+mb(pYmvS%QAye)p1Pv$3{TeAJ zrbv{#0F5p84~sm7$u@axIZPIw#ix7pwA=;X|E=6zmhaIjh+}y(+kDe<KL$@~cVqj( zuyna!D||}06w{({%bfy>%l*YD_pL~a5<J9gOZuqX_Xq+agyp=q16YMh%*%T?z`Jzu z8QAVSEpN8Tb*v9&<4Y)v;2evjeT&<Rok90H&}|jjf|~ABa5d1V7QJbBDC0zo&teq8 z`y2d`qBn$~;U^R$ZO(Jk)=b`xe3UY6RZ{Y*f^S}0pTl<KxS))*4t`9^f??W@z|Mqb zTk0U&8f{0$gGsg{0wZNY<x00B64#|2iRJvClGVpWR<nDM6*Ml<=E75gU1gZcYS(dP zH6Bb-Rsu7QtR(I~AS-Pz(CNhZkNP;`!_?x8rQ2JD$@(y#5_vA|L7vB_<SBI93{!a~ z$YykJJeZ_B1!f$1O5A@;p6j#nM5i~bRK3XaGa}FBJ;-xiN}fWu%`lZ`f^0^f<H025 zDKO*6Q{w((^88#@o*0XHHuC&}$nym~$n%7hJcVwXVJgoA*^E5LgGtI$V8)TB#Qn$Q z`K7EpQ4ybwJijdRJg5hGo|uxS&}}nJ<(VLxk>_|YNqGv)IP#RZ|Cl^)%F1&mj50)i z*W_*Y*F>I2_aM)gq~s}d+YD2ACdg*wIUY<>o&qzDJSFZwAkWEV^>vZeOM8&jOH;B! z-9_8YFqPFSVwKOxYCM>vtORBpSxH<VD?Oi7eK7ht?EM~)=t;Kl4X0A)Wx}cUU+HhD zPsUKMiTI6|XLy}Mgt-2_@r%i2eY?o|RXxc1<tbU;DY9mm%6e5?9Wt^W4<;#Vff+~E z64ym9(_<5NlOG*v(6NdAVusjf-ch8f@{GqO*y~TstZI6kca0K30=DB7q{}C8qn{9s z5AjSo*f--FQM||T2HB`Cry@&7MHq3cm3F;6I)8%ik)X?O<b!X<RE!17yPqc)k2O74 z<09SrL+Gy=_aa}^zvCipwpzo;Ah+AT9vTy$?UX#XFFC@NmErhfZ1;%_6aFdOxo0!R zc0bd%+CAto2HFz-zR+zmO!YWHHlxSm!6fxqV8+p7iHr1@;~w88&+U^zJMRB-F7`Vj zi}R2dZxepxi==O2&Kz$U#Gm)h#mn%oW&Cmycr+K!3Lc|e&kBBd7Je7-{~-9U@oQA* zM@PAk!H^&qD-ngS$dpHM+=S%i2~~ciWt~H>-xvW7jO6Tz@B1WipaKyGI{t!Vsz&C$ za}cQC`w@IUQu0o7Fi8CgRNLClU)WL3k%VU(;@|h*!XJE#F-_#tQioBf#@_qsSrH%? zUCiIY;7!XOYg*j5f&G9}7}64Ex=t1?Re4Mc;aeL3CsEqn7aP^R{ysPDhxQ#U(Z@vH zocHYN=69LC^<MBE>v{Kai&G@mlo8uVq1$Gd*3AUjOx+w0CRsNHW}LbyajClb5P5E& z3feKxg|Hl~4kKjjgZ21ffrYmbtv4`@RS5qf!bhNNx@e`fD@wLxwsymf14{TpS!p9< z`wIi3rF;`XE1{*26r=BkRov*P;efK9hrSkXKkkCts<qY-dA_wfZvBP2w+HS{!Sr5$ zd%@cize!4L6ZIUy8OFR_$I@asa9o;~+1d-KJItin`UusKB8b!w<&o6GDaZ)N2rZd` zlJwy`$G${!8q-=Hn#NM+mHNCtpV7Mw#uh2poXC~1UCV$GQ5i@Z-Ddi(u!5L860gFN zZdX`FM0g(+9$uA#jqBrH$Y+O<ksv6unanV*;De8^mUt*Uk6}EM$PpLvGAj5P8uK!U zc=9-8wogYy>YSKZE{uxPBy^Jz(l#XUoRP+(Jc@kXPoglfy2m{T1z@%bs94qZB=9mS zl8crNv(}XdM&P@8Ib*;yjK`QqEq}Y?AqL7s!M#Qvuj1ot@o0GmgN3SH!y##21*dy$ zL4)@~1P#B$@ebkr7{@!5_d^}`bKtt1-*_^l+;q+MSxDcU>YoBnC0LpB1pt_NeBkjm zDl6j~kS9rofx!XnIjji71S7xjxZ(nZ&=b#{)t^T}1Rwv}09W1YH``>i;N1(H-eF*+ zInRF(G<7mnzNw;-_=t)t93&DHyu*<K2f-t8^MrzTAMZ!$-Fp$DYRmTv2{5h;0jzPW zX@aelLW%$rC;>1`E4TZ8dZtxyh#U@{$C*~a$F-BWEH#eAVPt(sAz2(K3V*|U6qUb~ zdJp)+%nJn&gi!#)SfLRI6(x(nM-GNRh69;OdZZQ(Py_jLbfi}B4YV&AcfYZZrrt1( zEqyQhi$3$c+eLdqyZQ_2(+K*jYFKM>{!z)nVR2La+;B<*oZ6NR1Ps=5B+h7TQxW|$ z0dC2fk7x~9qR(W>DT{jMF6eS@?+uXD6QEx!S!-T}XRBJMRg0^S!Xr<X+XBx-igGVl zVgrXw9RV3}!QuSj6AnOoCTBqXF}NdipFQrw%WCAv$j{J2u^_72{N1mvl<V^w{Pm6m zivE1PFnw9BP(PtjPzv=EJP^ehc|xzgPD58>ZKd7VKLF9Vb<4NQ*MmplXa4Rhr{y(Z z#yan4a)@KKf{=O`5|-;Rh!@q6PaxpHTKDtNH8@*SaaLi)w!ORX3IlR-sc|rBTwM@O zbKI{W_+)$+xq?rKd{LeoVMU#ebxEv|IB_dZT#PXr6&zc|ZzWW4a@F1++4jscPBo8H zLGf)ao(l$RX*@|Cz^Wc%hS_4hmRcKqM@(2oJ8OHl3-O7+BNkYYDFI_)BIZjcj<lVe zZY=8Zy+VFV4f`UEUxKIBu@G01p=y5hho~IECq~4KINou9!l6mGK>a*?4X(5ll~;_4 zycE2<!Sg_I<aRXB@)3-c7016X0$zO&Bv2f=BN_X{IQC-_ixIpy?UQlr1rm!sYY;o= z_<xFG8)p^0<H3)#29BR!7V=lGqSlLjroQ8A7gTm?gjne20(=`Z$K#-i&iprd>m)~r zTLLqn`Ae4QiaVY89R*Tjrg?W!w@b~m38eBBR_^4?U!XF}pWuEOqVY};3jRREALJ)C zGmzhR38Xd^XVq;Fu!6@hSy3KH+;2pwQ95EXUkp`)(F(q9ifRj^RZ^oBmD%zr)p%UJ zFosCb2vls(2+<`mn8qbE!11q+V-ra5ks{<AAEo5Cw${SQhuX>a0X`2MyBq&vOc{oH z0xwL~{mz>2nkTp~K|*b-*)Bf?*r%YDLnUiwz4bE0!EJ<c>Ty*mH*wTOyC>H2TJU5Q zylVl*FWi>IX4*qXK_edB0)({z{Wgj%wV(=xaB9$hEYL6-4n8opuA0Y9Y!JU~R~r6x z_&R^_%J~YA1)N`6`9G^4M@}Npm#*AU$7*ju2WUP2GOxwGvOfk}_KQjox-1S|v}~}F zoBvWQ2NxA;Y_D(iQ}rF#PHOfeY?10`BVVBnfWVhWh!?G#5(EZ3)GE0!Qd4!w>Y6># z99Nv(cjb*Im$Do~52WUugtyiI1?^i}ahkINao2ZBHBR*bd`BiHrlYoeN(RZOffLt8 zqFT)pS4$fp_t{4kQC(qB;dHJ&O!b96Bz;5rsU`e}7j<bd{!we?8{gAJeGCJhzJYNc z<GuLb9na4ooce|SnEL3=sisFaau{8W8*s;WYNhH2jwH_(B;Fitw)-^zGy(W=0uEx| z!cBOn)ulCyeaRuf(+4*3Z2|9NgxJ;>E?W=#&}dKb9j8-}Q}-4k9n=@^6$rs1kfDG) z>VlqwEWUQLXnG$7bg41jN~E>t=&}*65+pojB=o&g1zQ+?a2Vd)+l<ZgvYpJ>8ZTR9 z#s#r#x;YYA;$_G-t!tyN9_Pg}=qm6Ed}Oq06iMf7v}q6z<<;@!*>=Cmm)G&dc5mkM z#vtPBe0jY@bT;r->$G^wb>1it&9b%eWRMuzW`T6)90~M3%~YHC>^_J`$XY$~H!!G8 z22iweS7W-(L}KkJXabB~d>aYjcwGo(O}gIh14LL*#K^G!BmmsgkbBep4x-#!nQkC> zVfg_li5g#VVCEDKCuEbsVSKKGfkUDUVFIW&%FH$}HmhZ(yy06BlmtHYuGwKisTUqj zat0T70HLS|)1DZmy&u8N!%X*Eq_@B6j_@70C`bQ*op};CTk6<pY|IWKFYFQ-tVW{x z2#<3?hgXo~!6=CpThuT=mjUiKQfJ6ZbNfKn^MkYl%g6G9akTZ=Jt9Sq4?Q3mzQpZ* z19$oE@e6};-r3aR!4i1N2Hh-J0+hbx-U(13SrA5`zL%CZP!<#=04ch<c+<=ezwjN5 z(`fmiyji#n_)!#hSfBMA%tXHT2JbkcQv?~cB+NH`si$yf-Lr?MT5;vs=UxQc&3-#@ zuy4Yv6<4&CrJQ|Kz4Yj3B{-^bD|g5DKy3f3py%$&OiszwWw#z--%5=BEm2&5t`^3P zzPfRoHFA68B~@~^`%2_}GlP(J^bjkq@hiu~Hm%r=!b#P27kz~ilT~HR5ViLnh$)Ar zGcZ!RH)N4<;|~oB<{+>L;15?gRv`9MYGWwZ<ah>6L^@pIX)VHVOMC^&7W+wFkBIt7 z`X!fOomdhdb!gmlv(o9t;GL0<*L9g<uSJo>@CtJ3&{X76Y^@pw+JYc1$q!9d$d86= z{%F49aNv<E9FSq3EgFxp<OI&t-mLF~nASH-+Nj?`HkP*tnqs#;OGbEh=9ln*d5}Ax zC~`(NHuJFk!;p^gJJ!#k0Mxq?fLb}2uXyaly`E&ka{N8hw4r<v-$~dGBLJ&ywPXei z(ni%aYiK7P13Fp7ZFzs=8f<K(lkv7OFgIWsZU!c2Aa`;Fc(~46VQep2(e1rjP=aoj zkHq&cWUHI-8;V=x@-}GiACX5rE7tLU3b}dc=a$f+SP?v$?YAMD;vzO?pdab*4B6?3 z%}Zt~4xB{?C!OaoD)X4*&yUl+o#}YGJJR7a_bvUJ4&Ukn$ALEp?@-h2jdW)F9Y`Y4 zj=x?4-WdmcAjbSIV&;a$#$4`JymUY@7dO8WGEnr1?Sm_R;`pBzZ0J$hVmAUB4@>BU zF^y*=U~?SMSV^`niUW?4fcL}!_#^`$E{+4Pk%0FiAW7=05_(BGRF2q2Uknx$dSn@h zHl9X#xE-uvMBkL0HHToL`QV<5Kz9>k*pQLQW)*RKz^A>UNM*M<4N>IVeQP3yd`k=; z-18DK%z(u3!972U38xOBFQ$BNj|z!t4=M$2EaPDGlx2s_0LW*DrG`ir6Wkk09dGZ} z8?%Bpa*Z1~#EnF8BUea3+2KZEMd~X0`f8~Spx=5D^{Vqe0k{|X+Ic@8Ti?Xyqt2!B z_!I#?z{jD^Wdb(^aFcG)6wo$*Ws9cNXKgzr-x9;UP683^b>g$Gvn>PY_hK{1PiX7n zZ<u7(2w1|l&`>-17fDO5!?cO->b8l~e+Kfky>}v`-kbO%28Cr4+8o=Pi5;h2f!j{o zl#sWMCQZt3AdnwCEfR4bk{F$<fY`Y2t72hk?hg2=uN<~&Tm0Fpg7$cL2(R9msJi~b zFsupZ?0<m+e#nV%N&bk((e0tP!s#%e#F*&2BfU`xn7^$&x?=!!W*SNv^Iiioru%2$ z6C<r{?rNjB*4Tbprp;v^`4g~Xe~;wuzlZ$27AUIuX?gc7JcyV~_jf?p7PBN{BQs=d z1pKlD9q*TrXKM80F%_T~Pw#Q0HQQ7!?>+#wHo=_3$)y~<Um>nPK+lSS0nX_`{yrP# zZ}o>D;2`jsFffrO!5w@v;gt2jod;qAF2;RJ*c|#a2(`{;hF*uCB0~Pk5N=-fW&tq3 zzvnK2=!@Q5gknS}1vwjG*p2P^$iir;*u+Zdm8cw#VD&h&lXw3Dd_i9CkFmZEScA}S zBUCnFieU5c?&GHHS;qG8S=F2}gN|^O46|98|1WMF$AAb#!TpHr$NmWaSfyj^f-)@O z9$shS0n0m#&G?^%XO=sC&J*#x4P_1Xfj0O)0rws8`vf_!g}{=F4t2@fh#xtqpq%&b z0q+=M_V2^peLW*EK8%^Ssy#X|;6H@WV(S_(unCqJgr+JNha6(y%NtoAFK1k>(P44s zcQwu)S&!_<2%w&rFhmaUS&z~P_}2lvOoTMtL4myv7!q~G|3v2fZ|V1u(?VkI!z}u9 zKqtTyK~l!_MKG1YaRA8cbtrDDO{2U9(~X8cUVKJvFAf=4mNdSy<*_5CTx;<WyTRws zs7=fg?Tx0yxdN-70+B-TQXDe?C9Bv6*m%$3e>wg!MkODDT>VKr*ownyzgwQ!K)6q8 z4H9E<5y+@R(Kxpo>>XIokJ=`%_r<VBcY}RAfj7T8!n-tr73$ov7-BpihJskwUNxr# z=UC+Px?M8-Jj31t!C3^fx&6o)FaLZXu-rCegSj-D>q4kC7(@99HXeoE)#U)fa1yjk zJ}I;LcEE@{F=EX0;>_wuET!!DPaxFxYD~a@AT5@s;Nu%JiaHhaeIVf^^_u`78Waql zKQ`L+GvRQQ)�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%0D33`T)_u% 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 Ck<b$W literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/CSharp/Libraries/MbUnit/MbUnit.MSBuild.Tasks.dll b/antlr-3.1.3/runtime/CSharp/Libraries/MbUnit/MbUnit.MSBuild.Tasks.dll new file mode 100644 index 0000000000000000000000000000000000000000..2de3b3f2af4a7d59705a5ba3d6e1072e30b9e683 GIT binary patch literal 9216 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 H_cHKzPGl?d literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/CSharp/Libraries/MbUnit/MbUnit.Tasks.dll b/antlr-3.1.3/runtime/CSharp/Libraries/MbUnit/MbUnit.Tasks.dll new file mode 100644 index 0000000000000000000000000000000000000000..47fab28e015161e54c7f4a08bbe8b0ec93c31db4 GIT binary patch literal 20480 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 literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/CSharp/Libraries/MbUnit/QuickGraph.Algorithms.dll b/antlr-3.1.3/runtime/CSharp/Libraries/MbUnit/QuickGraph.Algorithms.dll new file mode 100644 index 0000000000000000000000000000000000000000..b70672ef36fd24517d2039e43286083dda4a3be6 GIT binary patch literal 180224 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%0A1QrO~J<A>s+P3JZ0yF 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 literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/CSharp/Libraries/MbUnit/QuickGraph.dll b/antlr-3.1.3/runtime/CSharp/Libraries/MbUnit/QuickGraph.dll new file mode 100644 index 0000000000000000000000000000000000000000..5f7dbbf66a661849ee80c2b3f4e25e7cb1fd38c2 GIT binary patch literal 126976 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 CkhP8g literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/CSharp/Libraries/StringTemplate.NET/net-1.1/StringTemplate.dll b/antlr-3.1.3/runtime/CSharp/Libraries/StringTemplate.NET/net-1.1/StringTemplate.dll new file mode 100644 index 0000000000000000000000000000000000000000..bb586d4f50d14a41be87bc0a850df3a05ed2699c GIT binary patch literal 163840 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�%!aKWA( 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 PQ=m_QJ_Y_iq`?0Iyl1|R literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/CSharp/Libraries/StringTemplate.NET/net-1.1/antlr.runtime.dll b/antlr-3.1.3/runtime/CSharp/Libraries/StringTemplate.NET/net-1.1/antlr.runtime.dll new file mode 100644 index 0000000000000000000000000000000000000000..cb95c6a10afc161128d32433b26ecfbf0a68cee1 GIT binary patch literal 114688 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 literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/CSharp/Libraries/StringTemplate.NET/net-2.0/StringTemplate.dll b/antlr-3.1.3/runtime/CSharp/Libraries/StringTemplate.NET/net-2.0/StringTemplate.dll new file mode 100644 index 0000000000000000000000000000000000000000..b79f8924a51a6b0f92f571ffedf129a51610229a GIT binary patch literal 155648 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 literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/CSharp/Libraries/StringTemplate.NET/net-2.0/antlr.runtime.dll b/antlr-3.1.3/runtime/CSharp/Libraries/StringTemplate.NET/net-2.0/antlr.runtime.dll new file mode 100644 index 0000000000000000000000000000000000000000..cb95c6a10afc161128d32433b26ecfbf0a68cee1 GIT binary patch literal 114688 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 literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/CSharp/NOTICE.TXT b/antlr-3.1.3/runtime/CSharp/NOTICE.TXT new file mode 100644 index 0000000..9dda784 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/NOTICE.TXT @@ -0,0 +1,35 @@ +============================================================================= + +This software contains code derived from the ANTLR V3 Java Runtime Library +developed by Terence Parr in accordance with it's license: + + --------------------------------------------------------------------- + +[The "BSD licence"] +Copyright (c) 2003-2006 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +============================================================================= \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/README.TXT b/antlr-3.1.3/runtime/CSharp/README.TXT new file mode 100644 index 0000000..5676d84 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/README.TXT @@ -0,0 +1,103 @@ +ANTLR v3.1 .NET Runtime Library (for us with the ANTLR C# Code Generator) + +29 September, 2007 + +Kunle Odutola : kunle UNDERSCORE odutola AT hotmail DOT com +Micheal Jordan + +1. INTRODUCTION + +The ANTLR v3.1 .NET Runtime Library extend the ANTLR language processing +tools generator to the C#/CLI platforms such as Microsoft .NET, +Novell/Ximian Mono and dotGNU. It is written in the C# programming language +and was designed specifically for use with the ANTLR C# Code Generation +target but, it would work equally well with a VB.NET, C++/CLI or indeed +IronPython code generator were such a thing to be developed for ANTLR v3.1. + +We hope you find the ANTLR v3.1 .NET Runtime Library delightful and useful +even but, as per the license under which you may use it, this software is not +guaranteed to work. + +Please see LICENSE.TXT for the full text of the license and NOTICE.TXT +for attribution notices. + + +2. WHAT'S IN THE PACK? + +This distribution contains three projects, the project files needed to +build them with Microsoft Visual Studio 2003 & 2005 and, Nant build files. + +The projects are: + + 1. Antlr3.Runtime - the ANTLR v3.1 .NET Runtime Library + + 2. Antlr3.Utility - the ANTLR v3.1 .NET Runtime Utility Library + + 3. Antlr3.Runtime.Tests - the ANTLR v3.1 .NET Runtime Library Tests + +In addition the Libraries sub-directory contains externals dependencies. + +2.1 Dependencies + + 1. Antlr3.Runtime - none + + 2. Antlr3.Utility - Antlr3.Runtime.dll + StringTemplate.dll + antlr.runtime.dll + + 3. Antlr3.Runtime.Tests - Antlr3.Runtime.dll + StringTemplate.dll + antlr.runtime.dll + +In addition, Antlr3.Runtime.Tests has a dependency on the MbUnit v2.4 dlls. + + +3. USING The ANTLR v3.1 .NET Runtime Library + +Tou use the ANTLR v3.1 .NET Runtime Library in your projects, add a +reference to the following file in your projects: + - Antlr3.Runtime.dll + +If you are using StringTemplate out in your grammar, add the following +files too: + - StringTemplate.dll + - antlr.runtime.dll + +You can find examples of using ANTLR v3.1 and the ANTLR v3.1 .NET Runtime +Library at: + http://www.antlr.org/download/examples-v3.tar.gz + + +4. BUILDING The ANTLR v3.1 .NET Runtime Library + +If you wish to re-build The ANTLR v3.1 .NET Runtime Library for any reason, this +is what you need to know. + + nant clean + nant release -t:net-1.1 +or + nant clean + nant release -t:net-2.0 + + +5. ANTLR v3.1 .NET Runtime Library STATUS + +This release of the ANTLR v3.1 .NET Runtime Library is a stable beta release. + +There are currently 0 failures in the unit test suite. + + +Don't forget to visit the www.antlr.org for further info. The mailing lists +are (currently) low volume and have a very high Signal-to-Noise ratio. We'd +like to hear about how you're using ANTLR v3.1 and the .NET Runtime Library. + + +7. CONTRIBUTORS + +Kunle Odutola +Micheal Jordan + + +Enjoy! + +Kunle Odutola diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime (VS2003).sln b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime (VS2003).sln new file mode 100644 index 0000000..c4d2f6c --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime (VS2003).sln @@ -0,0 +1,37 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Antlr3.Runtime (VS2003)", "Antlr3.Runtime\Antlr3.Runtime (VS2003).csproj", "{38F943D7-937F-4911-9882-24955F6AD0CC}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Antlr3.Utility (VS2003)", "Antlr3.Utility\Antlr3.Utility (VS2003).csproj", "{B8845D7E-8201-4904-87E7-85508F58B2F0}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Antlr.Runtime.Tests (VS2003)", "Antlr3.Runtime.Tests\Antlr.Runtime.Tests (VS2003).csproj", "{B51F118A-098F-4432-98A6-8C69B83BA3B9}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {38F943D7-937F-4911-9882-24955F6AD0CC}.Debug.ActiveCfg = Debug|.NET + {38F943D7-937F-4911-9882-24955F6AD0CC}.Debug.Build.0 = Debug|.NET + {38F943D7-937F-4911-9882-24955F6AD0CC}.Release.ActiveCfg = Release|.NET + {38F943D7-937F-4911-9882-24955F6AD0CC}.Release.Build.0 = Release|.NET + {B8845D7E-8201-4904-87E7-85508F58B2F0}.Debug.ActiveCfg = Debug|.NET + {B8845D7E-8201-4904-87E7-85508F58B2F0}.Debug.Build.0 = Debug|.NET + {B8845D7E-8201-4904-87E7-85508F58B2F0}.Release.ActiveCfg = Release|.NET + {B8845D7E-8201-4904-87E7-85508F58B2F0}.Release.Build.0 = Release|.NET + {B51F118A-098F-4432-98A6-8C69B83BA3B9}.Debug.ActiveCfg = Debug|.NET + {B51F118A-098F-4432-98A6-8C69B83BA3B9}.Debug.Build.0 = Debug|.NET + {B51F118A-098F-4432-98A6-8C69B83BA3B9}.Release.ActiveCfg = Release|.NET + {B51F118A-098F-4432-98A6-8C69B83BA3B9}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime (VS2005).sln b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime (VS2005).sln new file mode 100644 index 0000000..e542995 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime (VS2005).sln @@ -0,0 +1,41 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Antlr3.Runtime (VS2005)", "Antlr3.Runtime\Antlr3.Runtime (VS2005).csproj", "{CF15D0D5-BE72-4F98-B70F-229ABA1DF0E8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Antlr3.Utility (VS2005)", "Antlr3.Utility\Antlr3.Utility (VS2005).csproj", "{BEB27DCC-ABFB-4951-B618-2B639EC65A46}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Antlr3.Runtime.Tests (VS2005)", "Antlr3.Runtime.Tests\Antlr3.Runtime.Tests (VS2005).csproj", "{784B3027-5E9C-4BF2-BFE6-B5002CAE30AB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {784B3027-5E9C-4BF2-BFE6-B5002CAE30AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {784B3027-5E9C-4BF2-BFE6-B5002CAE30AB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {784B3027-5E9C-4BF2-BFE6-B5002CAE30AB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {784B3027-5E9C-4BF2-BFE6-B5002CAE30AB}.Release|Any CPU.Build.0 = Release|Any CPU + {BEB27DCC-ABFB-4951-B618-2B639EC65A46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BEB27DCC-ABFB-4951-B618-2B639EC65A46}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BEB27DCC-ABFB-4951-B618-2B639EC65A46}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BEB27DCC-ABFB-4951-B618-2B639EC65A46}.Release|Any CPU.Build.0 = Release|Any CPU + {CF15D0D5-BE72-4F98-B70F-229ABA1DF0E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CF15D0D5-BE72-4F98-B70F-229ABA1DF0E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CF15D0D5-BE72-4F98-B70F-229ABA1DF0E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CF15D0D5-BE72-4F98-B70F-229ABA1DF0E8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + name = Antlr3.Runtime (VS2005) + version = 0.1 + StartupItem = Antlr3.Runtime\Antlr3.Runtime (VS2005).csproj + Policies = $0 + $0.DotNetNamingPolicy = $1 + $1.DirectoryNamespaceAssociation = None + $1.ResourceNamePolicy = FileName + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/ANTLRxxxxStreamFixture.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/ANTLRxxxxStreamFixture.cs new file mode 100644 index 0000000..c91ef69 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/ANTLRxxxxStreamFixture.cs @@ -0,0 +1,423 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#pragma warning disable 219 // No unused variable warnings + +namespace Antlr.Runtime.Tests +{ + using System; + using Stream = System.IO.Stream; + using FileStream = System.IO.FileStream; + using MemoryStream = System.IO.MemoryStream; + using FileMode = System.IO.FileMode; + using Encoding = System.Text.Encoding; + using Encoder = System.Text.Encoder; + + using ANTLRInputStream = Antlr.Runtime.ANTLRInputStream; + + using MbUnit.Framework; + + [TestFixture] + public class ANTLRxxxxStreamFixture : TestFixtureBase + { + private static readonly string grammarStr = "" + + "parser grammar p;" + NL + + "prog : WHILE ID LCURLY (assign)* RCURLY EOF;" + NL + + "assign : ID ASSIGN expr SEMI ;" + NL + + "expr : INT | FLOAT | ID ;" + NL; + + + #region ANTLRInputStream Tests + + [Test] + public void TestANTLRInputStreamConstructorDoesNotHang() + { + Encoding encoding = Encoding.Unicode; + byte[] grammarStrBuffer = encoding.GetBytes(grammarStr); + MemoryStream grammarStream = new MemoryStream(grammarStrBuffer); + + ANTLRInputStream input = new ANTLRInputStream(grammarStream, encoding); + } + + [Test] + public void TestSizeOnEmptyANTLRInputStream() + { + MemoryStream grammarStream = new MemoryStream(new byte[] { }); + + ANTLRInputStream inputStream = new ANTLRInputStream(grammarStream, Encoding.Unicode); + Assert.AreEqual(0, inputStream.Count); + } + + [Test] + public void TestSizeOnANTLRInputStream() + { + Encoding encoding = Encoding.Unicode; + byte[] grammarStrBuffer = encoding.GetBytes(grammarStr); + MemoryStream grammarStream = new MemoryStream(grammarStrBuffer); + + ANTLRInputStream inputStream = new ANTLRInputStream(grammarStream, Encoding.Unicode); + Assert.AreEqual(grammarStr.Length, inputStream.Count); + } + + [Test] + public void TestConsumeAndIndexOnANTLRInputStream() + { + Encoding encoding = Encoding.Unicode; + byte[] grammarStrBuffer = encoding.GetBytes(grammarStr); + MemoryStream grammarStream = new MemoryStream(grammarStrBuffer); + + ANTLRInputStream inputStream = new ANTLRInputStream(grammarStream, Encoding.Unicode); + Assert.AreEqual(0, inputStream.Index()); + + inputStream.Consume(); + Assert.AreEqual(1, inputStream.Index()); + + inputStream.Consume(); + Assert.AreEqual(2, inputStream.Index()); + + while (inputStream.Index() < inputStream.Count) + { + inputStream.Consume(); + } + Assert.AreEqual(inputStream.Index(), inputStream.Count); + } + + [Test] + public void TestConsumeAllCharactersInAnANTLRInputStream() + { + Encoding encoding = Encoding.Unicode; + byte[] grammarStrBuffer = encoding.GetBytes(grammarStr); + MemoryStream grammarStream = new MemoryStream(grammarStrBuffer); + + ANTLRInputStream inputStream = new ANTLRInputStream(grammarStream, Encoding.Unicode); + while (inputStream.Index() < inputStream.Count) + { + Console.Out.Write((char)inputStream.LA(1)); + inputStream.Consume(); + } + Assert.AreEqual(inputStream.Index(), inputStream.Count); + } + + [Test] + public void TestConsumeOnANTLRInputStream() + { + Encoding encoding = Encoding.Unicode; + byte[] buffer = encoding.GetBytes("One\r\nTwo"); + MemoryStream grammarStream = new MemoryStream(buffer); + + ANTLRInputStream inputStream = new ANTLRInputStream(grammarStream, Encoding.Unicode); + Assert.AreEqual(0, inputStream.Index()); + Assert.AreEqual(0, inputStream.CharPositionInLine); + Assert.AreEqual(1, inputStream.Line); + + inputStream.Consume(); // O + Assert.AreEqual(1, inputStream.Index()); + Assert.AreEqual(1, inputStream.CharPositionInLine); + Assert.AreEqual(1, inputStream.Line); + + inputStream.Consume(); // n + Assert.AreEqual(2, inputStream.Index()); + Assert.AreEqual(2, inputStream.CharPositionInLine); + Assert.AreEqual(1, inputStream.Line); + + inputStream.Consume(); // e + Assert.AreEqual(3, inputStream.Index()); + Assert.AreEqual(3, inputStream.CharPositionInLine); + Assert.AreEqual(1, inputStream.Line); + + inputStream.Consume(); // \r + Assert.AreEqual(4, inputStream.Index()); + Assert.AreEqual(4, inputStream.CharPositionInLine); + Assert.AreEqual(1, inputStream.Line); + + inputStream.Consume(); // \n + Assert.AreEqual(5, inputStream.Index()); + Assert.AreEqual(0, inputStream.CharPositionInLine); + Assert.AreEqual(2, inputStream.Line); + + inputStream.Consume(); // T + Assert.AreEqual(6, inputStream.Index()); + Assert.AreEqual(1, inputStream.CharPositionInLine); + Assert.AreEqual(2, inputStream.Line); + + inputStream.Consume(); // w + Assert.AreEqual(7, inputStream.Index()); + Assert.AreEqual(2, inputStream.CharPositionInLine); + Assert.AreEqual(2, inputStream.Line); + + inputStream.Consume(); // o + Assert.AreEqual(8, inputStream.Index()); + Assert.AreEqual(3, inputStream.CharPositionInLine); + Assert.AreEqual(2, inputStream.Line); + + inputStream.Consume(); // EOF + Assert.AreEqual(8, inputStream.Index()); + Assert.AreEqual(3, inputStream.CharPositionInLine); + Assert.AreEqual(2, inputStream.Line); + + inputStream.Consume(); // EOF + Assert.AreEqual(8, inputStream.Index()); + Assert.AreEqual(3, inputStream.CharPositionInLine); + Assert.AreEqual(2, inputStream.Line); + } + + [Test] + public void TestResetOnANTLRInputStream() + { + Encoding encoding = Encoding.Unicode; + byte[] buffer = encoding.GetBytes("One\r\nTwo"); + MemoryStream grammarStream = new MemoryStream(buffer); + + ANTLRInputStream inputStream = new ANTLRInputStream(grammarStream, encoding); + Assert.AreEqual(0, inputStream.Index()); + Assert.AreEqual(0, inputStream.CharPositionInLine); + Assert.AreEqual(1, inputStream.Line); + + inputStream.Consume(); // O + inputStream.Consume(); // n + + Assert.AreEqual('e', inputStream.LA(1)); + Assert.AreEqual(2, inputStream.Index()); + + inputStream.Reset(); + Assert.AreEqual('O', inputStream.LA(1)); + Assert.AreEqual(0, inputStream.Index()); + Assert.AreEqual(0, inputStream.CharPositionInLine); + Assert.AreEqual(1, inputStream.Line); + inputStream.Consume(); // O + + Assert.AreEqual('n', inputStream.LA(1)); + Assert.AreEqual(1, inputStream.Index()); + Assert.AreEqual(1, inputStream.CharPositionInLine); + Assert.AreEqual(1, inputStream.Line); + inputStream.Consume(); // n + + Assert.AreEqual('e', inputStream.LA(1)); + Assert.AreEqual(2, inputStream.Index()); + Assert.AreEqual(2, inputStream.CharPositionInLine); + Assert.AreEqual(1, inputStream.Line); + inputStream.Consume(); // e + } + + [Test] + public void TestSubstringOnANTLRInputStream() + { + Encoding encoding = Encoding.Unicode; + byte[] buffer = encoding.GetBytes("One\r\nTwo\r\nThree"); + MemoryStream grammarStream = new MemoryStream(buffer); + + ANTLRInputStream stream = new ANTLRInputStream(grammarStream, encoding); + + Assert.AreEqual("Two", stream.Substring(5, 7)); + Assert.AreEqual("One", stream.Substring(0, 2)); + Assert.AreEqual("Three", stream.Substring(10, 14)); + + stream.Consume(); + + Assert.AreEqual("Two", stream.Substring(5, 7)); + Assert.AreEqual("One", stream.Substring(0, 2)); + Assert.AreEqual("Three", stream.Substring(10, 14)); + } + + [Test] + public void TestSeekOnANTLRInputStream() + { + Encoding encoding = Encoding.Unicode; + byte[] buffer = encoding.GetBytes("One\r\nTwo\r\nThree"); + MemoryStream grammarStream = new MemoryStream(buffer); + + ANTLRInputStream stream = new ANTLRInputStream(grammarStream, encoding); + Assert.AreEqual('O', stream.LA(1)); + Assert.AreEqual(0, stream.Index()); + Assert.AreEqual(0, stream.CharPositionInLine); + Assert.AreEqual(1, stream.Line); + + stream.Seek(6); + Assert.AreEqual('w', stream.LA(1)); + Assert.AreEqual(6, stream.Index()); + Assert.AreEqual(1, stream.CharPositionInLine); + Assert.AreEqual(2, stream.Line); + + stream.Seek(11); + Assert.AreEqual('h', stream.LA(1)); + Assert.AreEqual(11, stream.Index()); + Assert.AreEqual(1, stream.CharPositionInLine); + Assert.AreEqual(3, stream.Line); + + // seeking backwards leaves state info (other than index in stream) unchanged + stream.Seek(1); + Assert.AreEqual('n', stream.LA(1)); + Assert.AreEqual(1, stream.Index()); + Assert.AreEqual(1, stream.CharPositionInLine); + Assert.AreEqual(3, stream.Line); + } + + #endregion + + + #region ANTLRStringStream Tests + + [Test] + public void TestSizeOnEmptyANTLRStringStream() + { + ANTLRStringStream s1 = new ANTLRStringStream(""); + Assert.AreEqual(0, s1.Count); + Assert.AreEqual(0, s1.Index()); + } + + [Test] + public void TestSizeOnANTLRStringStream() + { + ANTLRStringStream s1 = new ANTLRStringStream("lexer\r\n"); + Assert.AreEqual(7, s1.Count); + + ANTLRStringStream s2 = new ANTLRStringStream(grammarStr); + Assert.AreEqual(grammarStr.Length, s2.Count); + + ANTLRStringStream s3 = new ANTLRStringStream("grammar P;"); + Assert.AreEqual(10, s3.Count); + } + + [Test] + public void TestConsumeOnANTLRStringStream() + { + ANTLRStringStream stream = new ANTLRStringStream("One\r\nTwo"); + Assert.AreEqual(0, stream.Index()); + Assert.AreEqual(0, stream.CharPositionInLine); + Assert.AreEqual(1, stream.Line); + + stream.Consume(); // O + Assert.AreEqual(1, stream.Index()); + Assert.AreEqual(1, stream.CharPositionInLine); + Assert.AreEqual(1, stream.Line); + + stream.Consume(); // n + Assert.AreEqual(2, stream.Index()); + Assert.AreEqual(2, stream.CharPositionInLine); + Assert.AreEqual(1, stream.Line); + + stream.Consume(); // e + Assert.AreEqual(3, stream.Index()); + Assert.AreEqual(3, stream.CharPositionInLine); + Assert.AreEqual(1, stream.Line); + + stream.Consume(); // \r + Assert.AreEqual(4, stream.Index()); + Assert.AreEqual(4, stream.CharPositionInLine); + Assert.AreEqual(1, stream.Line); + + stream.Consume(); // \n + Assert.AreEqual(5, stream.Index()); + Assert.AreEqual(0, stream.CharPositionInLine); + Assert.AreEqual(2, stream.Line); + + stream.Consume(); // T + Assert.AreEqual(6, stream.Index()); + Assert.AreEqual(1, stream.CharPositionInLine); + Assert.AreEqual(2, stream.Line); + + stream.Consume(); // w + Assert.AreEqual(7, stream.Index()); + Assert.AreEqual(2, stream.CharPositionInLine); + Assert.AreEqual(2, stream.Line); + + stream.Consume(); // o + Assert.AreEqual(8, stream.Index()); + Assert.AreEqual(3, stream.CharPositionInLine); + Assert.AreEqual(2, stream.Line); + + stream.Consume(); // EOF + Assert.AreEqual(8, stream.Index()); + Assert.AreEqual(3, stream.CharPositionInLine); + Assert.AreEqual(2, stream.Line); + + stream.Consume(); // EOF + Assert.AreEqual(8, stream.Index()); + Assert.AreEqual(3, stream.CharPositionInLine); + Assert.AreEqual(2, stream.Line); + } + + [Test] + public void TestResetOnANTLRStringStream() + { + ANTLRStringStream stream = new ANTLRStringStream("One\r\nTwo"); + Assert.AreEqual(0, stream.Index()); + Assert.AreEqual(0, stream.CharPositionInLine); + Assert.AreEqual(1, stream.Line); + + stream.Consume(); // O + stream.Consume(); // n + + Assert.AreEqual('e', stream.LA(1)); + Assert.AreEqual(2, stream.Index()); + + stream.Reset(); + Assert.AreEqual('O', stream.LA(1)); + Assert.AreEqual(0, stream.Index()); + Assert.AreEqual(0, stream.CharPositionInLine); + Assert.AreEqual(1, stream.Line); + stream.Consume(); // O + + Assert.AreEqual('n', stream.LA(1)); + Assert.AreEqual(1, stream.Index()); + Assert.AreEqual(1, stream.CharPositionInLine); + Assert.AreEqual(1, stream.Line); + stream.Consume(); // n + + Assert.AreEqual('e', stream.LA(1)); + Assert.AreEqual(2, stream.Index()); + Assert.AreEqual(2, stream.CharPositionInLine); + Assert.AreEqual(1, stream.Line); + stream.Consume(); // e + } + + [Test] + public void TestSubstringOnANTLRStringStream() + { + ANTLRStringStream stream = new ANTLRStringStream("One\r\nTwo\r\nThree"); + + Assert.AreEqual("Two", stream.Substring(5, 7)); + Assert.AreEqual("One", stream.Substring(0, 2)); + Assert.AreEqual("Three", stream.Substring(10, 14)); + + stream.Consume(); + + Assert.AreEqual("Two", stream.Substring(5, 7)); + Assert.AreEqual("One", stream.Substring(0, 2)); + Assert.AreEqual("Three", stream.Substring(10, 14)); + } + + #endregion + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Tests (VS2003).csproj b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Tests (VS2003).csproj new file mode 100644 index 0000000..0d919bb --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Tests (VS2003).csproj @@ -0,0 +1,120 @@ +<VisualStudioProject> + <CSHARP + ProjectType = "Local" + ProductVersion = "7.10.3077" + SchemaVersion = "2.0" + ProjectGuid = "{B51F118A-098F-4432-98A6-8C69B83BA3B9}" + > + <Build> + <Settings + ApplicationIcon = "" + AssemblyKeyContainerName = "" + AssemblyName = "Antlr.Runtime.Tests" + AssemblyOriginatorKeyFile = "" + DefaultClientScript = "JScript" + DefaultHTMLPageLayout = "Grid" + DefaultTargetSchema = "IE50" + DelaySign = "false" + OutputType = "Exe" + PreBuildEvent = "" + PostBuildEvent = "" + RootNamespace = "Antlr.Runtime.Tests" + RunPostBuildEvent = "OnBuildSuccess" + StartupObject = "" + > + <Config + Name = "Debug" + AllowUnsafeBlocks = "false" + BaseAddress = "285212672" + CheckForOverflowUnderflow = "false" + ConfigurationOverrideFile = "" + DefineConstants = "DEBUG;STRONG_NAME;DOTNET1" + DocumentationFile = "" + DebugSymbols = "true" + FileAlignment = "4096" + IncrementalBuild = "false" + NoStdLib = "false" + NoWarn = "" + Optimize = "false" + OutputPath = "bin\Debug\net-1.1\" + RegisterForComInterop = "false" + RemoveIntegerChecks = "false" + TreatWarningsAsErrors = "false" + WarningLevel = "4" + /> + <Config + Name = "Release" + AllowUnsafeBlocks = "false" + BaseAddress = "285212672" + CheckForOverflowUnderflow = "false" + ConfigurationOverrideFile = "" + DefineConstants = "STRONG_NAME;DOTNET1" + DocumentationFile = "" + DebugSymbols = "false" + FileAlignment = "4096" + IncrementalBuild = "false" + NoStdLib = "false" + NoWarn = "" + Optimize = "false" + OutputPath = "bin\Release\net-1.1\" + RegisterForComInterop = "false" + RemoveIntegerChecks = "false" + TreatWarningsAsErrors = "false" + WarningLevel = "4" + /> + </Settings> + <References> + <Reference + Name = "Antlr3.Runtime (VS2003)" + Project = "{38F943D7-937F-4911-9882-24955F6AD0CC}" + Package = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}" + /> + <Reference + Name = "MbUnit.Framework" + AssemblyName = "MbUnit.Framework" + HintPath = "..\..\Libraries\MbUnit\MbUnit.Framework.dll" + /> + </References> + </Build> + <Files> + <Include> + <File + RelPath = "ANTLRxxxxStreamFixture.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "ITreeFixture.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "ITreeNodeStreamFixture.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "TestDriver.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "TestFixtureBase.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "TreeWizardFixture.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Properties\AssemblyInfo.cs" + SubType = "Code" + BuildAction = "Compile" + /> + </Include> + </Files> + </CSHARP> +</VisualStudioProject> + diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/Antlr3.Runtime.Tests (VS2005).csproj b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/Antlr3.Runtime.Tests (VS2005).csproj new file mode 100644 index 0000000..0b60862 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/Antlr3.Runtime.Tests (VS2005).csproj @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>8.0.50727</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{784B3027-5E9C-4BF2-BFE6-B5002CAE30AB}</ProjectGuid> + <OutputType>Exe</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>Antlr.Runtime.Tests</RootNamespace> + <AssemblyName>Antlr3.Runtime.Tests</AssemblyName> + <StartupObject> + </StartupObject> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\net-2.0\</OutputPath> + <DefineConstants>TRACE;DEBUG;STRONG_NAME;DOTNET2</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\net-2.0\</OutputPath> + <DefineConstants>TRACE;STRONG_NAME;DOTNET2</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + <UseVSHostingProcess>false</UseVSHostingProcess> + <DocumentationFile> + </DocumentationFile> + </PropertyGroup> + <ItemGroup> + <Compile Include="ANTLRxxxxStreamFixture.cs" /> + <Compile Include="RewriteRuleXxxxStreamFixture.cs" /> + <Compile Include="TestDriver.cs" /> + <Compile Include="TreeWizardFixture.cs" /> + <Compile Include="ITreeFixture.cs" /> + <Compile Include="ITreeNodeStreamFixture.cs" /> + <Compile Include="TestFixtureBase.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + </ItemGroup> + <ItemGroup> + <Reference Include="MbUnit.Framework, Version=1.0.2700.29885, Culture=neutral, PublicKeyToken=5e72ecd30bc408d5"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\..\Libraries\MbUnit\MbUnit.Framework.dll</HintPath> + </Reference> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\Antlr3.Runtime\Antlr3.Runtime (VS2005).csproj"> + <Project>{CF15D0D5-BE72-4F98-B70F-229ABA1DF0E8}</Project> + <Name>Antlr3.Runtime (VS2005)</Name> + </ProjectReference> + </ItemGroup> + <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project> \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/ITreeFixture.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/ITreeFixture.cs new file mode 100644 index 0000000..7c5fed0 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/ITreeFixture.cs @@ -0,0 +1,457 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tests +{ + using System; + using StringBuilder = System.Text.StringBuilder; + + using IToken = Antlr.Runtime.IToken; + using Token = Antlr.Runtime.Token; + using CommonToken = Antlr.Runtime.CommonToken; + using ITree = Antlr.Runtime.Tree.ITree; + using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; + using CommonTree = Antlr.Runtime.Tree.CommonTree; + using CommonTreeAdaptor = Antlr.Runtime.Tree.CommonTreeAdaptor; + + using MbUnit.Framework; + + [TestFixture] + public class ITreeFixture : TestFixtureBase + { + #region CommonTree Tests + + [Test] + public void testSingleNode() + { + CommonTree t = new CommonTree(new CommonToken(101)); + Assert.IsNull(t.parent); + Assert.AreEqual(-1, t.childIndex); + } + + [Test] + public void test4Nodes() + { + // ^(101 ^(102 103) 104) + CommonTree r0 = new CommonTree(new CommonToken(101)); + r0.AddChild(new CommonTree(new CommonToken(102))); + r0.GetChild(0).AddChild(new CommonTree(new CommonToken(103))); + r0.AddChild(new CommonTree(new CommonToken(104))); + + Assert.IsNull(r0.parent); + Assert.AreEqual(-1, r0.childIndex); + } + + [Test] + public void testList() + { + // ^(nil 101 102 103) + CommonTree r0 = new CommonTree((IToken)null); + CommonTree c0, c1, c2; + r0.AddChild(c0 = new CommonTree(new CommonToken(101))); + r0.AddChild(c1 = new CommonTree(new CommonToken(102))); + r0.AddChild(c2 = new CommonTree(new CommonToken(103))); + + Assert.IsNull(r0.parent); + Assert.AreEqual(-1, r0.childIndex); + Assert.AreEqual(r0, c0.parent); + Assert.AreEqual(0, c0.childIndex); + Assert.AreEqual(r0, c1.parent); + Assert.AreEqual(1, c1.childIndex); + Assert.AreEqual(r0, c2.parent); + Assert.AreEqual(2, c2.childIndex); + } + + [Test] + public void testList2() + { + // Add child ^(nil 101 102 103) to root 5 + // should pull 101 102 103 directly to become 5's child list + CommonTree root = new CommonTree(new CommonToken(5)); + + // child tree + CommonTree r0 = new CommonTree((IToken)null); + CommonTree c0, c1, c2; + r0.AddChild(c0 = new CommonTree(new CommonToken(101))); + r0.AddChild(c1 = new CommonTree(new CommonToken(102))); + r0.AddChild(c2 = new CommonTree(new CommonToken(103))); + + root.AddChild(r0); + + Assert.IsNull(root.parent); + Assert.AreEqual(-1, root.childIndex); + // check children of root all point at root + Assert.AreEqual(root, c0.parent); + Assert.AreEqual(0, c0.childIndex); + Assert.AreEqual(root, c0.parent); + Assert.AreEqual(1, c1.childIndex); + Assert.AreEqual(root, c0.parent); + Assert.AreEqual(2, c2.childIndex); + } + + [Test] + public void testAddListToExistChildren() + { + // Add child ^(nil 101 102 103) to root ^(5 6) + // should add 101 102 103 to end of 5's child list + CommonTree root = new CommonTree(new CommonToken(5)); + root.AddChild(new CommonTree(new CommonToken(6))); + + // child tree + CommonTree r0 = new CommonTree((IToken)null); + CommonTree c0, c1, c2; + r0.AddChild(c0 = new CommonTree(new CommonToken(101))); + r0.AddChild(c1 = new CommonTree(new CommonToken(102))); + r0.AddChild(c2 = new CommonTree(new CommonToken(103))); + + root.AddChild(r0); + + Assert.IsNull(root.parent); + Assert.AreEqual(-1, root.childIndex); + // check children of root all point at root + Assert.AreEqual(root, c0.parent); + Assert.AreEqual(1, c0.childIndex); + Assert.AreEqual(root, c0.parent); + Assert.AreEqual(2, c1.childIndex); + Assert.AreEqual(root, c0.parent); + Assert.AreEqual(3, c2.childIndex); + } + + [Test] + public void testDupTree() + { + // ^(101 ^(102 103 ^(106 107) ) 104 105) + CommonTree r0 = new CommonTree(new CommonToken(101)); + CommonTree r1 = new CommonTree(new CommonToken(102)); + r0.AddChild(r1); + r1.AddChild(new CommonTree(new CommonToken(103))); + ITree r2 = new CommonTree(new CommonToken(106)); + r2.AddChild(new CommonTree(new CommonToken(107))); + r1.AddChild(r2); + r0.AddChild(new CommonTree(new CommonToken(104))); + r0.AddChild(new CommonTree(new CommonToken(105))); + + CommonTree dup = (CommonTree)(new CommonTreeAdaptor()).DupTree(r0); + + Assert.IsNull(dup.parent); + Assert.AreEqual(-1, dup.childIndex); + dup.SanityCheckParentAndChildIndexes(); + } + + [Test] + public void testBecomeRoot() + { + // 5 becomes new root of ^(nil 101 102 103) + CommonTree newRoot = new CommonTree(new CommonToken(5)); + + CommonTree oldRoot = new CommonTree((IToken)null); + oldRoot.AddChild(new CommonTree(new CommonToken(101))); + oldRoot.AddChild(new CommonTree(new CommonToken(102))); + oldRoot.AddChild(new CommonTree(new CommonToken(103))); + + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + adaptor.BecomeRoot(newRoot, oldRoot); + newRoot.SanityCheckParentAndChildIndexes(); + } + + [Test] + public void testBecomeRoot2() + { + // 5 becomes new root of ^(101 102 103) + CommonTree newRoot = new CommonTree(new CommonToken(5)); + + CommonTree oldRoot = new CommonTree(new CommonToken(101)); + oldRoot.AddChild(new CommonTree(new CommonToken(102))); + oldRoot.AddChild(new CommonTree(new CommonToken(103))); + + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + adaptor.BecomeRoot(newRoot, oldRoot); + newRoot.SanityCheckParentAndChildIndexes(); + } + + [Test] + public void testBecomeRoot3() + { + // ^(nil 5) becomes new root of ^(nil 101 102 103) + CommonTree newRoot = new CommonTree((IToken)null); + newRoot.AddChild(new CommonTree(new CommonToken(5))); + + CommonTree oldRoot = new CommonTree((IToken)null); + oldRoot.AddChild(new CommonTree(new CommonToken(101))); + oldRoot.AddChild(new CommonTree(new CommonToken(102))); + oldRoot.AddChild(new CommonTree(new CommonToken(103))); + + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + adaptor.BecomeRoot(newRoot, oldRoot); + newRoot.SanityCheckParentAndChildIndexes(); + } + + [Test] + public void testBecomeRoot5() + { + // ^(nil 5) becomes new root of ^(101 102 103) + CommonTree newRoot = new CommonTree((IToken)null); + newRoot.AddChild(new CommonTree(new CommonToken(5))); + + CommonTree oldRoot = new CommonTree(new CommonToken(101)); + oldRoot.AddChild(new CommonTree(new CommonToken(102))); + oldRoot.AddChild(new CommonTree(new CommonToken(103))); + + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + adaptor.BecomeRoot(newRoot, oldRoot); + newRoot.SanityCheckParentAndChildIndexes(); + } + + [Test] + public void testBecomeRoot6() + { + // emulates construction of ^(5 6) + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + CommonTree root_0 = (CommonTree)adaptor.GetNilNode(); + CommonTree root_1 = (CommonTree)adaptor.GetNilNode(); + root_1 = (CommonTree)adaptor.BecomeRoot(new CommonTree(new CommonToken(5)), root_1); + + adaptor.AddChild(root_1, new CommonTree(new CommonToken(6))); + + adaptor.AddChild(root_0, root_1); + + root_0.SanityCheckParentAndChildIndexes(); + } + + // Test replaceChildren + + [Test] + public void testReplaceWithNoChildren() + { + CommonTree t = new CommonTree(new CommonToken(101)); + CommonTree newChild = new CommonTree(new CommonToken(5)); + bool error = false; + try + { + t.ReplaceChildren(0, 0, newChild); + } + catch (Exception) + { + error = true; + } + Assert.IsTrue(error); + } + + [Test] + public void testReplaceWithOneChildren() + { + // assume token type 99 and use text + CommonTree t = new CommonTree(new CommonToken(99, "a")); + CommonTree c0 = new CommonTree(new CommonToken(99, "b")); + t.AddChild(c0); + + CommonTree newChild = new CommonTree(new CommonToken(99, "c")); + t.ReplaceChildren(0, 0, newChild); + String expected = "(a c)"; + Assert.AreEqual(expected, t.ToStringTree()); + t.SanityCheckParentAndChildIndexes(); + } + + [Test] + public void testReplaceInMiddle() + { + CommonTree t = new CommonTree(new CommonToken(99, "a")); + t.AddChild(new CommonTree(new CommonToken(99, "b"))); + t.AddChild(new CommonTree(new CommonToken(99, "c"))); // index 1 + t.AddChild(new CommonTree(new CommonToken(99, "d"))); + + CommonTree newChild = new CommonTree(new CommonToken(99, "x")); + t.ReplaceChildren(1, 1, newChild); + String expected = "(a b x d)"; + Assert.AreEqual(expected, t.ToStringTree()); + t.SanityCheckParentAndChildIndexes(); + } + + [Test] + public void testReplaceAtLeft() + { + CommonTree t = new CommonTree(new CommonToken(99, "a")); + t.AddChild(new CommonTree(new CommonToken(99, "b"))); // index 0 + t.AddChild(new CommonTree(new CommonToken(99, "c"))); + t.AddChild(new CommonTree(new CommonToken(99, "d"))); + + CommonTree newChild = new CommonTree(new CommonToken(99, "x")); + t.ReplaceChildren(0, 0, newChild); + String expected = "(a x c d)"; + Assert.AreEqual(expected, t.ToStringTree()); + t.SanityCheckParentAndChildIndexes(); + } + + [Test] + public void testReplaceAtRight() + { + CommonTree t = new CommonTree(new CommonToken(99, "a")); + t.AddChild(new CommonTree(new CommonToken(99, "b"))); + t.AddChild(new CommonTree(new CommonToken(99, "c"))); + t.AddChild(new CommonTree(new CommonToken(99, "d"))); // index 2 + + CommonTree newChild = new CommonTree(new CommonToken(99, "x")); + t.ReplaceChildren(2, 2, newChild); + String expected = "(a b c x)"; + Assert.AreEqual(expected, t.ToStringTree()); + t.SanityCheckParentAndChildIndexes(); + } + + [Test] + public void testReplaceOneWithTwoAtLeft() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + CommonTree t = new CommonTree(new CommonToken(99, "a")); + t.AddChild(new CommonTree(new CommonToken(99, "b"))); + t.AddChild(new CommonTree(new CommonToken(99, "c"))); + t.AddChild(new CommonTree(new CommonToken(99, "d"))); + + CommonTree newChildren = (CommonTree)adaptor.GetNilNode(); + newChildren.AddChild(new CommonTree(new CommonToken(99, "x"))); + newChildren.AddChild(new CommonTree(new CommonToken(99, "y"))); + + t.ReplaceChildren(0, 0, newChildren); + String expected = "(a x y c d)"; + Assert.AreEqual(expected, t.ToStringTree()); + t.SanityCheckParentAndChildIndexes(); + } + + [Test] + public void testReplaceOneWithTwoAtRight() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + CommonTree t = new CommonTree(new CommonToken(99, "a")); + t.AddChild(new CommonTree(new CommonToken(99, "b"))); + t.AddChild(new CommonTree(new CommonToken(99, "c"))); + t.AddChild(new CommonTree(new CommonToken(99, "d"))); + + CommonTree newChildren = (CommonTree)adaptor.GetNilNode(); + newChildren.AddChild(new CommonTree(new CommonToken(99, "x"))); + newChildren.AddChild(new CommonTree(new CommonToken(99, "y"))); + + t.ReplaceChildren(2, 2, newChildren); + String expected = "(a b c x y)"; + Assert.AreEqual(expected, t.ToStringTree()); + t.SanityCheckParentAndChildIndexes(); + } + + [Test] + public void testReplaceOneWithTwoInMiddle() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + CommonTree t = new CommonTree(new CommonToken(99, "a")); + t.AddChild(new CommonTree(new CommonToken(99, "b"))); + t.AddChild(new CommonTree(new CommonToken(99, "c"))); + t.AddChild(new CommonTree(new CommonToken(99, "d"))); + + CommonTree newChildren = (CommonTree)adaptor.GetNilNode(); + newChildren.AddChild(new CommonTree(new CommonToken(99, "x"))); + newChildren.AddChild(new CommonTree(new CommonToken(99, "y"))); + + t.ReplaceChildren(1, 1, newChildren); + String expected = "(a b x y d)"; + Assert.AreEqual(expected, t.ToStringTree()); + t.SanityCheckParentAndChildIndexes(); + } + + [Test] + public void testReplaceTwoWithOneAtLeft() + { + CommonTree t = new CommonTree(new CommonToken(99, "a")); + t.AddChild(new CommonTree(new CommonToken(99, "b"))); + t.AddChild(new CommonTree(new CommonToken(99, "c"))); + t.AddChild(new CommonTree(new CommonToken(99, "d"))); + + CommonTree newChild = new CommonTree(new CommonToken(99, "x")); + + t.ReplaceChildren(0, 1, newChild); + String expected = "(a x d)"; + Assert.AreEqual(expected, t.ToStringTree()); + t.SanityCheckParentAndChildIndexes(); + } + + [Test] + public void testReplaceTwoWithOneAtRight() + { + CommonTree t = new CommonTree(new CommonToken(99, "a")); + t.AddChild(new CommonTree(new CommonToken(99, "b"))); + t.AddChild(new CommonTree(new CommonToken(99, "c"))); + t.AddChild(new CommonTree(new CommonToken(99, "d"))); + + CommonTree newChild = new CommonTree(new CommonToken(99, "x")); + + t.ReplaceChildren(1, 2, newChild); + String expected = "(a b x)"; + Assert.AreEqual(expected, t.ToStringTree()); + t.SanityCheckParentAndChildIndexes(); + } + + [Test] + public void testReplaceAllWithOne() + { + CommonTree t = new CommonTree(new CommonToken(99, "a")); + t.AddChild(new CommonTree(new CommonToken(99, "b"))); + t.AddChild(new CommonTree(new CommonToken(99, "c"))); + t.AddChild(new CommonTree(new CommonToken(99, "d"))); + + CommonTree newChild = new CommonTree(new CommonToken(99, "x")); + + t.ReplaceChildren(0, 2, newChild); + String expected = "(a x)"; + Assert.AreEqual(expected, t.ToStringTree()); + t.SanityCheckParentAndChildIndexes(); + } + + [Test] + public void testReplaceAllWithTwo() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + CommonTree t = new CommonTree(new CommonToken(99, "a")); + t.AddChild(new CommonTree(new CommonToken(99, "b"))); + t.AddChild(new CommonTree(new CommonToken(99, "c"))); + t.AddChild(new CommonTree(new CommonToken(99, "d"))); + + CommonTree newChildren = (CommonTree)adaptor.GetNilNode(); + newChildren.AddChild(new CommonTree(new CommonToken(99, "x"))); + newChildren.AddChild(new CommonTree(new CommonToken(99, "y"))); + + t.ReplaceChildren(0, 2, newChildren); + String expected = "(a x y)"; + Assert.AreEqual(expected, t.ToStringTree()); + t.SanityCheckParentAndChildIndexes(); + } + + #endregion + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/ITreeNodeStreamFixture.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/ITreeNodeStreamFixture.cs new file mode 100644 index 0000000..7969200 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/ITreeNodeStreamFixture.cs @@ -0,0 +1,660 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tests +{ + using System; + using StringBuilder = System.Text.StringBuilder; + + using IToken = Antlr.Runtime.IToken; + using Token = Antlr.Runtime.Token; + using CommonToken = Antlr.Runtime.CommonToken; + using ITree = Antlr.Runtime.Tree.ITree; + using ITreeNodeStream = Antlr.Runtime.Tree.ITreeNodeStream; + using CommonTree = Antlr.Runtime.Tree.CommonTree; + using CommonTreeNodeStream = Antlr.Runtime.Tree.CommonTreeNodeStream; + using UnBufferedTreeNodeStream = Antlr.Runtime.Tree.UnBufferedTreeNodeStream; + + using MbUnit.Framework; + + [TestFixture] + public class ITreeNodeStreamFixture : TestFixtureBase + { + #region CommonTreeNodeStream Tests + + [Test] + public void testSingleNode() + { + ITree t = new CommonTree(new CommonToken(101)); + + ITreeNodeStream stream = CreateCommonTreeNodeStream(t); + string expected = " 101"; + string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream); + Assert.AreEqual(expected, actual); + + expected = " 101"; + actual = stream.ToString(); + Assert.AreEqual(expected, actual); + } + + [Test] + /// <summary> + /// Test a tree with four nodes - ^(101 ^(102 103) 104) + /// </summary> + public void test4Nodes() + { + ITree t = new CommonTree(new CommonToken(101)); + t.AddChild(new CommonTree(new CommonToken(102))); + t.GetChild(0).AddChild(new CommonTree(new CommonToken(103))); + t.AddChild(new CommonTree(new CommonToken(104))); + + ITreeNodeStream stream = CreateCommonTreeNodeStream(t); + string expected = " 101 102 103 104"; + string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream); + Assert.AreEqual(expected, actual); + + expected = " 101 2 102 2 103 3 104 3"; + actual = stream.ToString(); + Assert.AreEqual(expected, actual); + } + + [Test] + public void testList() + { + ITree root = new CommonTree((IToken)null); + + ITree t = new CommonTree(new CommonToken(101)); + t.AddChild(new CommonTree(new CommonToken(102))); + t.GetChild(0).AddChild(new CommonTree(new CommonToken(103))); + t.AddChild(new CommonTree(new CommonToken(104))); + + ITree u = new CommonTree(new CommonToken(105)); + + root.AddChild(t); + root.AddChild(u); + + CommonTreeNodeStream stream = new CommonTreeNodeStream(root); + string expected = " 101 102 103 104 105"; + string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream); + Assert.AreEqual(expected, actual); + + expected = " 101 2 102 2 103 3 104 3 105"; + actual = stream.ToString(); + Assert.AreEqual(expected, actual); + } + + [Test] + public void testFlatList() + { + ITree root = new CommonTree((IToken)null); + + root.AddChild(new CommonTree(new CommonToken(101))); + root.AddChild(new CommonTree(new CommonToken(102))); + root.AddChild(new CommonTree(new CommonToken(103))); + + CommonTreeNodeStream stream = new CommonTreeNodeStream(root); + string expected = " 101 102 103"; + string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream); + Assert.AreEqual(expected, actual); + + expected = " 101 102 103"; + actual = stream.ToString(); + Assert.AreEqual(expected, actual); + } + + [Test] + public void testListWithOneNode() + { + ITree root = new CommonTree((IToken)null); + + root.AddChild(new CommonTree(new CommonToken(101))); + + CommonTreeNodeStream stream = new CommonTreeNodeStream(root); + string expected = " 101"; + string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream); + Assert.AreEqual(expected, actual); + + expected = " 101"; + actual = stream.ToString(); + Assert.AreEqual(expected, actual); + } + + [Test] + public void testAoverB() + { + ITree t = new CommonTree(new CommonToken(101)); + t.AddChild(new CommonTree(new CommonToken(102))); + + ITreeNodeStream stream = CreateCommonTreeNodeStream(t); + string expected = " 101 102"; + string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream); + Assert.AreEqual(expected, actual); + + expected = " 101 2 102 3"; + actual = stream.ToString(); + Assert.AreEqual(expected, actual); + } + + [Test] + public void testLT() + { + // ^(101 ^(102 103) 104) + ITree t = new CommonTree(new CommonToken(101)); + t.AddChild(new CommonTree(new CommonToken(102))); + t.GetChild(0).AddChild(new CommonTree(new CommonToken(103))); + t.AddChild(new CommonTree(new CommonToken(104))); + + ITreeNodeStream stream = CreateCommonTreeNodeStream(t); + Assert.AreEqual(101, ((ITree)stream.LT(1)).Type); + Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(2)).Type); + Assert.AreEqual(102, ((ITree)stream.LT(3)).Type); + Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(4)).Type); + Assert.AreEqual(103, ((ITree)stream.LT(5)).Type); + Assert.AreEqual(Token.UP, ((ITree)stream.LT(6)).Type); + Assert.AreEqual(104, ((ITree)stream.LT(7)).Type); + Assert.AreEqual(Token.UP, ((ITree)stream.LT(8)).Type); + Assert.AreEqual(Token.EOF, ((ITree)stream.LT(9)).Type); + // check way ahead + Assert.AreEqual(Token.EOF, ((ITree)stream.LT(100)).Type); + } + + [Test] + public void testMarkRewindEntire() + { + // ^(101 ^(102 103 ^(106 107) ) 104 105) + // stream has 7 real + 6 nav nodes + // Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF + ITree r0 = new CommonTree(new CommonToken(101)); + ITree r1 = new CommonTree(new CommonToken(102)); + r0.AddChild(r1); + r1.AddChild(new CommonTree(new CommonToken(103))); + ITree r2 = new CommonTree(new CommonToken(106)); + r2.AddChild(new CommonTree(new CommonToken(107))); + r1.AddChild(r2); + r0.AddChild(new CommonTree(new CommonToken(104))); + r0.AddChild(new CommonTree(new CommonToken(105))); + + CommonTreeNodeStream stream = new CommonTreeNodeStream(r0); + int m = stream.Mark(); // MARK + for (int k = 1; k <= 13; k++) + { // consume til end + stream.LT(1); + stream.Consume(); + } + Assert.AreEqual(Token.EOF, ((ITree)stream.LT(1)).Type); + Assert.AreEqual(Token.UP, ((ITree)stream.LT(-1)).Type); + stream.Rewind(m); // REWIND + + // consume til end again :) + for (int k = 1; k <= 13; k++) + { // consume til end + stream.LT(1); + stream.Consume(); + } + Assert.AreEqual(Token.EOF, ((ITree)stream.LT(1)).Type); + Assert.AreEqual(Token.UP, ((ITree)stream.LT(-1)).Type); + } + + [Test] + public void testMarkRewindInMiddle() + { + // ^(101 ^(102 103 ^(106 107) ) 104 105) + // stream has 7 real + 6 nav nodes + // Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF + ITree r0 = new CommonTree(new CommonToken(101)); + ITree r1 = new CommonTree(new CommonToken(102)); + r0.AddChild(r1); + r1.AddChild(new CommonTree(new CommonToken(103))); + ITree r2 = new CommonTree(new CommonToken(106)); + r2.AddChild(new CommonTree(new CommonToken(107))); + r1.AddChild(r2); + r0.AddChild(new CommonTree(new CommonToken(104))); + r0.AddChild(new CommonTree(new CommonToken(105))); + + CommonTreeNodeStream stream = new CommonTreeNodeStream(r0); + for (int k = 1; k <= 7; k++) + { // consume til middle + //System.out.println(((ITree)stream.LT(1)).Type); + stream.Consume(); + } + Assert.AreEqual(107, ((ITree)stream.LT(1)).Type); + int m = stream.Mark(); // MARK + stream.Consume(); // consume 107 + stream.Consume(); // consume UP + stream.Consume(); // consume UP + stream.Consume(); // consume 104 + stream.Rewind(m); // REWIND + + Assert.AreEqual(107, ((ITree)stream.LT(1)).Type); + stream.Consume(); + Assert.AreEqual(Token.UP, ((ITree)stream.LT(1)).Type); + stream.Consume(); + Assert.AreEqual(Token.UP, ((ITree)stream.LT(1)).Type); + stream.Consume(); + Assert.AreEqual(104, ((ITree)stream.LT(1)).Type); + stream.Consume(); + // now we're past rewind position + Assert.AreEqual(105, ((ITree)stream.LT(1)).Type); + stream.Consume(); + Assert.AreEqual(Token.UP, ((ITree)stream.LT(1)).Type); + stream.Consume(); + Assert.AreEqual(Token.EOF, ((ITree)stream.LT(1)).Type); + Assert.AreEqual(Token.UP, ((ITree)stream.LT(-1)).Type); + } + + [Test] + public void testMarkRewindNested() + { + // ^(101 ^(102 103 ^(106 107) ) 104 105) + // stream has 7 real + 6 nav nodes + // Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF + ITree r0 = new CommonTree(new CommonToken(101)); + ITree r1 = new CommonTree(new CommonToken(102)); + r0.AddChild(r1); + r1.AddChild(new CommonTree(new CommonToken(103))); + ITree r2 = new CommonTree(new CommonToken(106)); + r2.AddChild(new CommonTree(new CommonToken(107))); + r1.AddChild(r2); + r0.AddChild(new CommonTree(new CommonToken(104))); + r0.AddChild(new CommonTree(new CommonToken(105))); + + CommonTreeNodeStream stream = new CommonTreeNodeStream(r0); + int m = stream.Mark(); // MARK at start + stream.Consume(); // consume 101 + stream.Consume(); // consume DN + int m2 = stream.Mark(); // MARK on 102 + stream.Consume(); // consume 102 + stream.Consume(); // consume DN + stream.Consume(); // consume 103 + stream.Consume(); // consume 106 + stream.Rewind(m2); // REWIND to 102 + Assert.AreEqual(102, ((ITree)stream.LT(1)).Type); + stream.Consume(); + Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(1)).Type); + stream.Consume(); + // stop at 103 and rewind to start + stream.Rewind(m); // REWIND to 101 + Assert.AreEqual(101, ((ITree)stream.LT(1)).Type); + stream.Consume(); + Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(1)).Type); + stream.Consume(); + Assert.AreEqual(102, ((ITree)stream.LT(1)).Type); + stream.Consume(); + Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(1)).Type); + } + + [Test] + public void testSeek() + { + // ^(101 ^(102 103 ^(106 107) ) 104 105) + // stream has 7 real + 6 nav nodes + // Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF + ITree r0 = new CommonTree(new CommonToken(101)); + ITree r1 = new CommonTree(new CommonToken(102)); + r0.AddChild(r1); + r1.AddChild(new CommonTree(new CommonToken(103))); + ITree r2 = new CommonTree(new CommonToken(106)); + r2.AddChild(new CommonTree(new CommonToken(107))); + r1.AddChild(r2); + r0.AddChild(new CommonTree(new CommonToken(104))); + r0.AddChild(new CommonTree(new CommonToken(105))); + + CommonTreeNodeStream stream = new CommonTreeNodeStream(r0); + stream.Consume(); // consume 101 + stream.Consume(); // consume DN + stream.Consume(); // consume 102 + stream.Seek(7); // seek to 107 + Assert.AreEqual(107, ((ITree)stream.LT(1)).Type); + stream.Consume(); // consume 107 + stream.Consume(); // consume UP + stream.Consume(); // consume UP + Assert.AreEqual(104, ((ITree)stream.LT(1)).Type); + } + + [Test] + public void testSeekFromStart() + { + // ^(101 ^(102 103 ^(106 107) ) 104 105) + // stream has 7 real + 6 nav nodes + // Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF + ITree r0 = new CommonTree(new CommonToken(101)); + ITree r1 = new CommonTree(new CommonToken(102)); + r0.AddChild(r1); + r1.AddChild(new CommonTree(new CommonToken(103))); + ITree r2 = new CommonTree(new CommonToken(106)); + r2.AddChild(new CommonTree(new CommonToken(107))); + r1.AddChild(r2); + r0.AddChild(new CommonTree(new CommonToken(104))); + r0.AddChild(new CommonTree(new CommonToken(105))); + + CommonTreeNodeStream stream = new CommonTreeNodeStream(r0); + stream.Seek(7); // seek to 107 + Assert.AreEqual(107, ((ITree)stream.LT(1)).Type); + stream.Consume(); // consume 107 + stream.Consume(); // consume UP + stream.Consume(); // consume UP + Assert.AreEqual(104, ((ITree)stream.LT(1)).Type); + } + + [Test] + public void testPushPop() + { + // ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109) + // stream has 9 real + 8 nav nodes + // Sequence of types: 101 DN 102 DN 103 UP 104 DN 105 UP 106 DN 107 UP 108 109 UP + ITree r0 = new CommonTree(new CommonToken(101)); + ITree r1 = new CommonTree(new CommonToken(102)); + r1.AddChild(new CommonTree(new CommonToken(103))); + r0.AddChild(r1); + ITree r2 = new CommonTree(new CommonToken(104)); + r2.AddChild(new CommonTree(new CommonToken(105))); + r0.AddChild(r2); + ITree r3 = new CommonTree(new CommonToken(106)); + r3.AddChild(new CommonTree(new CommonToken(107))); + r0.AddChild(r3); + r0.AddChild(new CommonTree(new CommonToken(108))); + r0.AddChild(new CommonTree(new CommonToken(109))); + + CommonTreeNodeStream stream = new CommonTreeNodeStream(r0); + String expecting = " 101 2 102 2 103 3 104 2 105 3 106 2 107 3 108 109 3"; + String found = stream.ToString(); + Assert.AreEqual(expecting, found); + + // Assume we want to hit node 107 and then "call 102" then return + + int indexOf102 = 2; + int indexOf107 = 12; + for (int k = 1; k <= indexOf107; k++) + { // consume til 107 node + stream.Consume(); + } + // CALL 102 + Assert.AreEqual(107, ((ITree)stream.LT(1)).Type); + stream.Push(indexOf102); + Assert.AreEqual(102, ((ITree)stream.LT(1)).Type); + stream.Consume(); // consume 102 + Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(1)).Type); + stream.Consume(); // consume DN + Assert.AreEqual(103, ((ITree)stream.LT(1)).Type); + stream.Consume(); // consume 103 + Assert.AreEqual(Token.UP, ((ITree)stream.LT(1)).Type); + // RETURN + stream.Pop(); + Assert.AreEqual(107, ((ITree)stream.LT(1)).Type); + } + + [Test] + public void testNestedPushPop() + { + // ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109) + // stream has 9 real + 8 nav nodes + // Sequence of types: 101 DN 102 DN 103 UP 104 DN 105 UP 106 DN 107 UP 108 109 UP + ITree r0 = new CommonTree(new CommonToken(101)); + ITree r1 = new CommonTree(new CommonToken(102)); + r1.AddChild(new CommonTree(new CommonToken(103))); + r0.AddChild(r1); + ITree r2 = new CommonTree(new CommonToken(104)); + r2.AddChild(new CommonTree(new CommonToken(105))); + r0.AddChild(r2); + ITree r3 = new CommonTree(new CommonToken(106)); + r3.AddChild(new CommonTree(new CommonToken(107))); + r0.AddChild(r3); + r0.AddChild(new CommonTree(new CommonToken(108))); + r0.AddChild(new CommonTree(new CommonToken(109))); + + CommonTreeNodeStream stream = new CommonTreeNodeStream(r0); + + // Assume we want to hit node 107 and then "call 102", which + // calls 104, then return + + int indexOf102 = 2; + int indexOf107 = 12; + for (int k = 1; k <= indexOf107; k++) + { // consume til 107 node + stream.Consume(); + } + Assert.AreEqual(107, ((ITree)stream.LT(1)).Type); + // CALL 102 + stream.Push(indexOf102); + Assert.AreEqual(102, ((ITree)stream.LT(1)).Type); + stream.Consume(); // consume 102 + Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(1)).Type); + stream.Consume(); // consume DN + Assert.AreEqual(103, ((ITree)stream.LT(1)).Type); + stream.Consume(); // consume 103 + + // CALL 104 + int indexOf104 = 6; + stream.Push(indexOf104); + Assert.AreEqual(104, ((ITree)stream.LT(1)).Type); + stream.Consume(); // consume 102 + Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(1)).Type); + stream.Consume(); // consume DN + Assert.AreEqual(105, ((ITree)stream.LT(1)).Type); + stream.Consume(); // consume 103 + Assert.AreEqual(Token.UP, ((ITree)stream.LT(1)).Type); + // RETURN (to UP node in 102 subtree) + stream.Pop(); + + Assert.AreEqual(Token.UP, ((ITree)stream.LT(1)).Type); + // RETURN (to empty stack) + stream.Pop(); + Assert.AreEqual(107, ((ITree)stream.LT(1)).Type); + } + + [Test] + public void testPushPopFromEOF() + { + // ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109) + // stream has 9 real + 8 nav nodes + // Sequence of types: 101 DN 102 DN 103 UP 104 DN 105 UP 106 DN 107 UP 108 109 UP + ITree r0 = new CommonTree(new CommonToken(101)); + ITree r1 = new CommonTree(new CommonToken(102)); + r1.AddChild(new CommonTree(new CommonToken(103))); + r0.AddChild(r1); + ITree r2 = new CommonTree(new CommonToken(104)); + r2.AddChild(new CommonTree(new CommonToken(105))); + r0.AddChild(r2); + ITree r3 = new CommonTree(new CommonToken(106)); + r3.AddChild(new CommonTree(new CommonToken(107))); + r0.AddChild(r3); + r0.AddChild(new CommonTree(new CommonToken(108))); + r0.AddChild(new CommonTree(new CommonToken(109))); + + CommonTreeNodeStream stream = new CommonTreeNodeStream(r0); + + while (stream.LA(1) != Token.EOF) + { + stream.Consume(); + } + int indexOf102 = 2; + int indexOf104 = 6; + Assert.AreEqual(Token.EOF, ((ITree)stream.LT(1)).Type); + + // CALL 102 + stream.Push(indexOf102); + Assert.AreEqual(102, ((ITree)stream.LT(1)).Type); + stream.Consume(); // consume 102 + Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(1)).Type); + stream.Consume(); // consume DN + Assert.AreEqual(103, ((ITree)stream.LT(1)).Type); + stream.Consume(); // consume 103 + Assert.AreEqual(Token.UP, ((ITree)stream.LT(1)).Type); + // RETURN (to empty stack) + stream.Pop(); + Assert.AreEqual(Token.EOF, ((ITree)stream.LT(1)).Type); + + // CALL 104 + stream.Push(indexOf104); + Assert.AreEqual(104, ((ITree)stream.LT(1)).Type); + stream.Consume(); // consume 102 + Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(1)).Type); + stream.Consume(); // consume DN + Assert.AreEqual(105, ((ITree)stream.LT(1)).Type); + stream.Consume(); // consume 103 + Assert.AreEqual(Token.UP, ((ITree)stream.LT(1)).Type); + // RETURN (to empty stack) + stream.Pop(); + Assert.AreEqual(Token.EOF, ((ITree)stream.LT(1)).Type); + } + + [Test] + public void testStackStretch() + { + // make more than INITIAL_CALL_STACK_SIZE pushes + ITree r0 = new CommonTree(new CommonToken(101)); + CommonTreeNodeStream stream = new CommonTreeNodeStream(r0); + // go 1 over initial size + for (int i = 1; i <= CommonTreeNodeStream.INITIAL_CALL_STACK_SIZE + 1; i++) + { + stream.Push(i); + } + Assert.AreEqual(10, stream.Pop()); + Assert.AreEqual(9, stream.Pop()); + } + + #endregion + + + #region UnBufferedTreeNodeStream Tests + + [Test] + public void testBufferOverflow() + { + StringBuilder buf = new StringBuilder(); + StringBuilder buf2 = new StringBuilder(); + // make ^(101 102 ... n) + ITree t = new CommonTree(new CommonToken(101)); + buf.Append(" 101"); + buf2.Append(" 101"); + buf2.Append(" "); + buf2.Append(Token.DOWN); + for (int i = 0; i <= UnBufferedTreeNodeStream.INITIAL_LOOKAHEAD_BUFFER_SIZE + 10; i++) + { + t.AddChild(new CommonTree(new CommonToken(102 + i))); + buf.Append(" "); + buf.Append(102 + i); + buf2.Append(" "); + buf2.Append(102 + i); + } + buf2.Append(" "); + buf2.Append(Token.UP); + + ITreeNodeStream stream = CreateUnBufferedTreeNodeStream(t); + String expecting = buf.ToString(); + String found = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream); + Assert.AreEqual(expecting, found); + + expecting = buf2.ToString(); + found = stream.ToString(); + Assert.AreEqual(expecting, found); + } + + /// <summary> + /// Test what happens when tail hits the end of the buffer, but there + /// is more room left. + /// </summary> + /// <remarks> + /// Specifically that would mean that head is not at 0 but has + /// advanced somewhere to the middle of the lookahead buffer. + /// + /// Use Consume() to advance N nodes into lookahead. Then use LT() + /// to load at least INITIAL_LOOKAHEAD_BUFFER_SIZE-N nodes so the + /// buffer has to wrap. + /// </remarks> + [Test] + public void testBufferWrap() + { + int N = 10; + // make tree with types: 1 2 ... INITIAL_LOOKAHEAD_BUFFER_SIZE+N + ITree t = new CommonTree((IToken)null); + for (int i = 0; i < UnBufferedTreeNodeStream.INITIAL_LOOKAHEAD_BUFFER_SIZE + N; i++) + { + t.AddChild(new CommonTree(new CommonToken(i + 1))); + } + + // move head to index N + ITreeNodeStream stream = CreateUnBufferedTreeNodeStream(t); + for (int i = 1; i <= N; i++) + { // consume N + ITree node = (ITree)stream.LT(1); + Assert.AreEqual(i, node.Type); + stream.Consume(); + } + + // now use LT to lookahead past end of buffer + int remaining = UnBufferedTreeNodeStream.INITIAL_LOOKAHEAD_BUFFER_SIZE - N; + int wrapBy = 4; // wrap around by 4 nodes + Assert.IsTrue(wrapBy < N, "bad test code; wrapBy must be less than N"); + for (int i = 1; i <= remaining + wrapBy; i++) + { // wrap past end of buffer + ITree node = (ITree)stream.LT(i); // look ahead to ith token + Assert.AreEqual(N + i, node.Type); + } + } + + #endregion + + + #region Helper Methods + + protected ITreeNodeStream CreateCommonTreeNodeStream(object t) + { + return new CommonTreeNodeStream(t); + } + + protected ITreeNodeStream CreateUnBufferedTreeNodeStream(object t) + { + return new UnBufferedTreeNodeStream(t); + } + + public string GetStringOfEntireStreamContentsWithNodeTypesOnly(ITreeNodeStream nodes) + { + StringBuilder buf = new StringBuilder(); + for (int i = 0; i < nodes.Count; i++) + { + object t = nodes.LT(i + 1); + int type = nodes.TreeAdaptor.GetNodeType(t); + if (!((type == Token.DOWN) || (type == Token.UP))) + { + buf.Append(" "); + buf.Append(type); + } + } + return buf.ToString(); + } + + #endregion + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/Properties/AssemblyInfo.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..fc419c9 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/Properties/AssemblyInfo.cs @@ -0,0 +1,69 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Antlr3.Runtime.Tests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Toshiba")] +[assembly: AssemblyProduct("Antlr3.Runtime.Tests")] +[assembly: AssemblyCopyright("Copyright © Toshiba 2007")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("e7a97455-a3e3-4877-a90b-b1b12606dac1")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/RewriteRuleXxxxStreamFixture.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/RewriteRuleXxxxStreamFixture.cs new file mode 100644 index 0000000..e673685 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/RewriteRuleXxxxStreamFixture.cs @@ -0,0 +1,392 @@ +/* +[The "BSD licence"] +Copyright (c) 2007 Johannes Luber +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#pragma warning disable 219 // No unused variable warnings + +namespace Antlr.Runtime.Tests { + using System; + using System.Collections.Generic; + using Antlr.Runtime.Tree; + + using MbUnit.Framework; + + [TestFixture] + public class RewriteRuleXxxxStreamFixture : TestFixtureBase { + #region Check Constructors + + [Test] + public void CheckRewriteRuleTokenStreamConstructors() { + RewriteRuleTokenStream tokenTest1 = new RewriteRuleTokenStream(CreateTreeAdaptor(), + "RewriteRuleTokenStream test1"); + + RewriteRuleTokenStream tokenTest2 = new RewriteRuleTokenStream(CreateTreeAdaptor(), + "RewriteRuleTokenStream test2", CreateToken(1, + "test token without any real context")); + + RewriteRuleTokenStream tokenTest3 = new RewriteRuleTokenStream(CreateTreeAdaptor(), + "RewriteRuleTokenStream test3", CreateTokenList(4)); + } + + [Test] + public void CheckRewriteRuleSubtreeStreamConstructors() { + RewriteRuleSubtreeStream subtreeTest1 = + new RewriteRuleSubtreeStream(CreateTreeAdaptor(), + "RewriteRuleSubtreeStream test1"); + + RewriteRuleSubtreeStream subtreeTest2 = + new RewriteRuleSubtreeStream(CreateTreeAdaptor(), + "RewriteRuleSubtreeStream test2", CreateToken(1, + "test token without any real context")); + + RewriteRuleSubtreeStream subtreeTest3 = + new RewriteRuleSubtreeStream(CreateTreeAdaptor(), + "RewriteRuleSubtreeStream test3", CreateTokenList(4)); + } + + [Test] + public void CheckRewriteRuleNodeStreamConstructors() { + RewriteRuleNodeStream nodeTest1 = new RewriteRuleNodeStream(CreateTreeAdaptor(), + "RewriteRuleNodeStream test1"); + + RewriteRuleNodeStream nodeTest2 = new RewriteRuleNodeStream(CreateTreeAdaptor(), + "RewriteRuleNodeStream test2", CreateToken(1, + "test token without any real context")); + + RewriteRuleNodeStream nodeTest3 = new RewriteRuleNodeStream(CreateTreeAdaptor(), + "RewriteRuleNodeStream test3", CreateTokenList(4)); + } + #endregion + + #region Method Tests + + #region Empty Behaviour + [Test] + [ExpectedException(typeof(RewriteEmptyStreamException), "RewriteRuleTokenStream test")] + public void CheckRRTokenStreamBehaviourWhileEmpty1() { + string description = "RewriteRuleTokenStream test"; + RewriteRuleTokenStream tokenTest = + new RewriteRuleTokenStream(CreateTreeAdaptor(), description); + + Assert.IsFalse(tokenTest.HasNext(), "tokenTest has to give back false here."); + Assert.AreEqual(description.ToString(), tokenTest.Description, + "Description strings should be equal."); + Assert.AreEqual(0, tokenTest.Size(), "The number of elements should be zero."); + tokenTest.Reset(); + Assert.IsTrue(true, "Reset() shouldn't make any problems here."); + Assert.AreEqual(0, tokenTest.Size(), + "The number of elements should be still zero."); + tokenTest.NextNode(); + } + + [Test] + [ExpectedException(typeof(RewriteEmptyStreamException), + "RewriteRuleSubtreeStream test")] + public void CheckRRSubtreeStreamBehaviourWhileEmpty1() { + string description = "RewriteRuleSubtreeStream test"; + RewriteRuleSubtreeStream subtreeTest = + new RewriteRuleSubtreeStream(CreateTreeAdaptor(), description); + + Assert.IsFalse(subtreeTest.HasNext(), "HasNext() has to give back false here."); + Assert.AreEqual(description.ToString(), subtreeTest.Description, + "Description strings should be equal."); + Assert.AreEqual(0, subtreeTest.Size(), "The number of elements should be zero."); + subtreeTest.Reset(); + Assert.IsTrue(true, "Reset() shouldn't make any problems here."); + Assert.AreEqual(0, subtreeTest.Size(), + "The number of elements should be still zero."); + subtreeTest.NextNode(); + } + + [Test] + [ExpectedException(typeof(RewriteEmptyStreamException), "RewriteRuleNodeStream test")] + public void CheckRRNodeStreamBehaviourWhileEmpty1() { + string description = "RewriteRuleNodeStream test"; + RewriteRuleNodeStream nodeTest = + new RewriteRuleNodeStream(CreateTreeAdaptor(), description); + + Assert.IsFalse(nodeTest.HasNext(), "HasNext() has to give back false here."); + Assert.AreEqual(description.ToString(), nodeTest.Description, + "Description strings should be equal."); + Assert.AreEqual(0, nodeTest.Size(), "The number of elements should be zero."); + nodeTest.Reset(); + Assert.IsTrue(true, "Reset() shouldn't make any problems here."); + Assert.AreEqual(0, nodeTest.Size(), + "The number of elements should be still zero."); + nodeTest.NextNode(); + } + + [Test] + [ExpectedException(typeof(RewriteEmptyStreamException), "RewriteRuleTokenStream test")] + public void CheckRRTokenStreamBehaviourWhileEmpty2() { + RewriteRuleTokenStream tokenTest = new RewriteRuleTokenStream(CreateTreeAdaptor(), + "RewriteRuleTokenStream test"); + + tokenTest.NextTree(); + } + + [Test] + [ExpectedException(typeof(RewriteEmptyStreamException), + "RewriteRuleSubtreeStream test")] + public void CheckRRSubtreeStreamBehaviourWhileEmpty2() { + RewriteRuleSubtreeStream subtreeTest = new RewriteRuleSubtreeStream( + CreateTreeAdaptor(), "RewriteRuleSubtreeStream test"); + + subtreeTest.NextTree(); + } + + [Test] + [ExpectedException(typeof(RewriteEmptyStreamException), "RewriteRuleNodeStream test")] + public void CheckRRNodeStreamBehaviourWhileEmpty2() { + RewriteRuleNodeStream nodeTest = new RewriteRuleNodeStream(CreateTreeAdaptor(), + "RewriteRuleNodeStream test"); + + nodeTest.NextTree(); + } + + [Test] + [ExpectedException(typeof(RewriteEmptyStreamException), "RewriteRuleTokenStream test")] + public void CheckRRTokenStreamBehaviourWhileEmpty3() { + RewriteRuleTokenStream tokenTest = new RewriteRuleTokenStream(CreateTreeAdaptor(), + "RewriteRuleTokenStream test"); + + tokenTest.NextToken(); + } + + #endregion + + #region Behaviour with Elements + [Test] + [ExpectedException(typeof(RewriteCardinalityException), "RewriteRuleTokenStream test")] + public void CheckRRTokenStreamBehaviourWithElements() { + RewriteRuleTokenStream tokenTest = new RewriteRuleTokenStream(CreateTreeAdaptor(), + "RewriteRuleTokenStream test"); + + IToken token1 = CreateToken(1, "test token without any real context"); + + // Test Add() + tokenTest.Add(token1); + Assert.AreEqual(1, tokenTest.Size(), "tokenTest should have the size 1 (1)."); + Assert.IsTrue(tokenTest.HasNext(), "HasNext() should be true here (1)."); + + // Test NextNode() + CommonTree tree = (CommonTree) tokenTest.NextNode(); + Assert.AreEqual(token1, tree.Token, + "The returned token should be equal to the given token (1)."); + Assert.AreEqual(1, tokenTest.Size(), "tokenTest should have the size 1 (2)."); + Assert.IsFalse(tokenTest.HasNext(), "HasNext() should be false here (1)."); + tokenTest.Reset(); + Assert.AreEqual(1, tokenTest.Size(), "tokenTest should have the size 1 (3)."); + Assert.IsTrue(tokenTest.HasNext(), "HasNext() should be true here (2)."); + + // Test NextToken() + IToken returnedToken = tokenTest.NextToken(); + Assert.AreEqual(token1, returnedToken, + "The returned token should be equal to the given token (2)."); + Assert.AreEqual(1, tokenTest.Size(), "tokenTest should have the size 1 (4)."); + Assert.IsFalse(tokenTest.HasNext(), "HasNext() should be false here (2)."); + tokenTest.Reset(); + Assert.AreEqual(1, tokenTest.Size(), "tokenTest should have the size 1 (5)."); + Assert.IsTrue(tokenTest.HasNext(), "HasNext() should be true here (3)."); + + // Test NextTree() + returnedToken = (IToken) tokenTest.NextTree(); + Assert.AreEqual(token1, returnedToken, + "The returned token should be equal to the given token (3)."); + Assert.AreEqual(1, tokenTest.Size(), "tokenTest should have the size 1 (6)."); + Assert.IsFalse(tokenTest.HasNext(), "HasNext() should be false here (2)."); + tokenTest.Reset(); + Assert.AreEqual(1, tokenTest.Size(), "tokenTest should have the size 1 (7)."); + Assert.IsTrue(tokenTest.HasNext(), "HasNext() should be true here (3)."); + + // Test, what happens with two elements + IToken token2 = CreateToken(2, "test token without any real context"); + + tokenTest.Add(token2); + Assert.AreEqual(2, tokenTest.Size(), "tokenTest should have the size 2 (1)."); + Assert.IsTrue(tokenTest.HasNext(), "HasNext() should be true here (4)."); + returnedToken = tokenTest.NextToken(); + Assert.AreEqual(token1, returnedToken, + "The returned token should be equal to the given token (4)."); + Assert.AreEqual(2, tokenTest.Size(), "tokenTest should have the size 2 (2)."); + Assert.IsTrue(tokenTest.HasNext(), "HasNext() should be true here (5)."); + returnedToken = tokenTest.NextToken(); + Assert.AreEqual(token2, returnedToken, + "The returned token should be equal to the given token (5)."); + Assert.IsFalse(tokenTest.HasNext(), "HasNext() should be false here (3)."); + + // Test exception + tokenTest.NextToken(); + } + + [Test] + [ExpectedException(typeof(RewriteCardinalityException), + "RewriteRuleSubtreeStream test")] + public void CheckRRSubtreeStreamBehaviourWithElements() { + RewriteRuleSubtreeStream subtreeTest = + new RewriteRuleSubtreeStream(CreateTreeAdaptor(), + "RewriteRuleSubtreeStream test"); + + IToken token1 = CreateToken(1, "test token without any real context"); + ITree tree1 = CreateTree(token1); + + // Test Add() + subtreeTest.Add(tree1); + Assert.AreEqual(1, subtreeTest.Size(), "subtreeTest should have the size 1 (1)."); + Assert.IsTrue(subtreeTest.HasNext(), "HasNext() should be true here (1)."); + + // Test NextNode() + Assert.AreEqual(tree1, (ITree) subtreeTest.NextNode(), + "The returned tree should be equal to the given tree (1)."); + Assert.AreEqual(1, subtreeTest.Size(), "subtreeTest should have the size 1 (2)."); + Assert.IsFalse(subtreeTest.HasNext(), "HasNext() should be false here (1)."); + subtreeTest.Reset(); + Assert.AreEqual(1, subtreeTest.Size(), "subtreeTest should have the size 1 (3)."); + Assert.IsTrue(subtreeTest.HasNext(), "HasNext() should be true here (2)."); + + // Test NextTree() + CommonTree returnedTree = (CommonTree) subtreeTest.NextTree(); + Assert.AreEqual(token1, returnedTree.Token, + "The returned token should be equal to the given token (3)."); + Assert.AreEqual(1, subtreeTest.Size(), "subtreeTest should have the size 1 (4)."); + Assert.IsFalse(subtreeTest.HasNext(), "HasNext() should be false here (2)."); + subtreeTest.Reset(); + Assert.AreEqual(1, subtreeTest.Size(), "subtreeTest should have the size 1 (5)."); + Assert.IsTrue(subtreeTest.HasNext(), "HasNext() should be true here (3)."); + + // Test, what happens with two elements + IToken token2 = CreateToken(2, "test token without any real context"); + ITree tree2 = CreateTree(token2); + + subtreeTest.Add(tree2); + Assert.AreEqual(2, subtreeTest.Size(), "subtreeTest should have the size 2 (1)."); + Assert.IsTrue(subtreeTest.HasNext(), "HasNext() should be true here (4)."); + returnedTree = (CommonTree) subtreeTest.NextTree(); + Assert.AreEqual(token1, returnedTree.Token, + "The returned token should be equal to the given token (4)."); + Assert.AreEqual(2, subtreeTest.Size(), "subtreeTest should have the size 2 (2)."); + Assert.IsTrue(subtreeTest.HasNext(), "HasNext() should be true here (5)."); + returnedTree = (CommonTree) subtreeTest.NextTree(); + Assert.AreEqual(token2, returnedTree.Token, + "The returned token should be equal to the given token (5)."); + Assert.IsFalse(subtreeTest.HasNext(), "HasNext() should be false here (3)."); + + // Test exception + subtreeTest.NextTree(); + } + + [Test] + [ExpectedException(typeof(RewriteCardinalityException), "RewriteRuleNodeStream test")] + public void CheckRRNodeStreamBehaviourWithElements() { + RewriteRuleNodeStream nodeTest = new RewriteRuleNodeStream(CreateTreeAdaptor(), + "RewriteRuleNodeStream test"); + + IToken token1 = CreateToken(1, "test token without any real context"); + ITree tree1 = CreateTree(token1); + + // Test Add() + nodeTest.Add(tree1); + Assert.AreEqual(1, nodeTest.Size(), "nodeTest should have the size 1 (1)."); + Assert.IsTrue(nodeTest.HasNext(), "HasNext() should be true here (1)."); + + // Test NextNode() + CommonTree returnedTree = (CommonTree) nodeTest.NextNode(); + Assert.AreEqual(tree1.Type, returnedTree.Type, + "The returned tree should be equal to the given tree (1)."); + Assert.AreEqual(1, nodeTest.Size(), "nodeTest should have the size 1 (2)."); + Assert.IsFalse(nodeTest.HasNext(), "HasNext() should be false here (1)."); + nodeTest.Reset(); + Assert.AreEqual(1, nodeTest.Size(), "nodeTest should have the size 1 (3)."); + Assert.IsTrue(nodeTest.HasNext(), "HasNext() should be true here (2)."); + + // Test NextTree() + returnedTree = (CommonTree) nodeTest.NextTree(); + Assert.AreEqual(token1, returnedTree.Token, + "The returned token should be equal to the given token (3)."); + Assert.AreEqual(1, nodeTest.Size(), "nodeTest should have the size 1 (4)."); + Assert.IsFalse(nodeTest.HasNext(), "HasNext() should be false here (2)."); + nodeTest.Reset(); + Assert.AreEqual(1, nodeTest.Size(), "nodeTest should have the size 1 (5)."); + Assert.IsTrue(nodeTest.HasNext(), "HasNext() should be true here (3)."); + + // Test, what happens with two elements + IToken token2 = CreateToken(2, "test token without any real context"); + ITree tree2 = CreateTree(token2); + + nodeTest.Add(tree2); + Assert.AreEqual(2, nodeTest.Size(), "nodeTest should have the size 2 (1)."); + Assert.IsTrue(nodeTest.HasNext(), "HasNext() should be true here (4)."); + returnedTree = (CommonTree) nodeTest.NextTree(); + Assert.AreEqual(token1, returnedTree.Token, + "The returned token should be equal to the given token (4)."); + Assert.AreEqual(2, nodeTest.Size(), "nodeTest should have the size 2 (2)."); + Assert.IsTrue(nodeTest.HasNext(), "HasNext() should be true here (5)."); + returnedTree = (CommonTree) nodeTest.NextTree(); + Assert.AreEqual(token2, returnedTree.Token, + "The returned token should be equal to the given token (5)."); + Assert.IsFalse(nodeTest.HasNext(), "HasNext() should be false here (3)."); + + // Test exception + nodeTest.NextTree(); + } + + #endregion + + #endregion + + + #region Helper Methods + + private ITreeAdaptor CreateTreeAdaptor() { + return new CommonTreeAdaptor(); + } + + private ITree CreateTree(IToken token) { + return new CommonTree(token); + } + + private IToken CreateToken(int type, string text) { + return new CommonToken(type, text); + } + + private IList<IToken> CreateTokenList(int count) { + IList<IToken> list = new List<IToken>(); + for (int i = 0; i < count; i++) { + list.Add(new CommonToken((i+1), "test token " + (i+1).ToString() + + " without any real context")); + } + return list; + } + + #endregion + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/TestDriver.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/TestDriver.cs new file mode 100644 index 0000000..730ece9 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/TestDriver.cs @@ -0,0 +1,64 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tests +{ + using System; + using MbUnit.Framework; + using MbUnit.Core; + + public class TestDriver + { + public static void Main(string[] args) + { + // Change 'NOT_DEBUGGING' --> '!NOT_DEBUGGING' to run individual fixtures +#if !NOT_DEBUGGING + //ITreeFixture fixture = new ITreeFixture(); + ANTLRxxxxStreamFixture fixture = new ANTLRxxxxStreamFixture(); + fixture.TestConsumeAllCharactersInAnANTLRInputStream(); +#else + StartAutoRunner(); +#endif + } + + public static void StartAutoRunner() + { + using (AutoRunner auto = new AutoRunner()) + { + auto.Run(); + auto.ReportToHtml(); + } + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/TestFixtureBase.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/TestFixtureBase.cs new file mode 100644 index 0000000..2bfdc86 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/TestFixtureBase.cs @@ -0,0 +1,44 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tests +{ + using System; + using MbUnit.Framework; + + abstract public class TestFixtureBase + { + public static readonly string NL = Environment.NewLine; + } +} diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/TreeWizardFixture.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/TreeWizardFixture.cs new file mode 100644 index 0000000..e08d43e --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime.Tests/TreeWizardFixture.cs @@ -0,0 +1,515 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tests +{ + using System; + using IList = System.Collections.IList; + using IDictionary = System.Collections.IDictionary; + using ArrayList = System.Collections.ArrayList; + using Hashtable = System.Collections.Hashtable; + using StringBuilder = System.Text.StringBuilder; + + using IToken = Antlr.Runtime.IToken; + using Token = Antlr.Runtime.Token; + using CommonToken = Antlr.Runtime.CommonToken; + using ITree = Antlr.Runtime.Tree.ITree; + using TreeWizard = Antlr.Runtime.Tree.TreeWizard; + using CommonTree = Antlr.Runtime.Tree.CommonTree; + using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; + using CommonTreeAdaptor = Antlr.Runtime.Tree.CommonTreeAdaptor; + using CollectionUtils = Antlr.Runtime.Collections.CollectionUtils; + + using MbUnit.Framework; + + [TestFixture] + public class TreeWizardFixture : TestFixtureBase + { + protected static readonly String[] tokens = + new String[] { "", "", "", "", "", "A", "B", "C", "D", "E", "ID", "VAR" }; + + private sealed class RecordAllElementsVisitor : TreeWizard.Visitor + { + private IList list; + + public RecordAllElementsVisitor(IList list) + { + this.list = list; + } + + override public void Visit(object t) + { + list.Add(t); + } + } + + private sealed class Test1ContextVisitor : TreeWizard.ContextVisitor + { + private ITreeAdaptor adaptor; + private IList list; + + public Test1ContextVisitor(ITreeAdaptor adaptor, IList list) + { + this.adaptor = adaptor; + this.list = list; + } + + public void Visit(object t, object parent, int childIndex, IDictionary labels) + { + list.Add(adaptor.GetNodeText(t) + + "@" + ((parent != null) ? adaptor.GetNodeText(parent) : "nil") + + "[" + childIndex + "]"); + } + } + + private sealed class Test2ContextVisitor : TreeWizard.ContextVisitor + { + private ITreeAdaptor adaptor; + private IList list; + + public Test2ContextVisitor(ITreeAdaptor adaptor, IList list) + { + this.adaptor = adaptor; + this.list = list; + } + + public void Visit(object t, object parent, int childIndex, IDictionary labels) + { + + list.Add(adaptor.GetNodeText(t) + + "@" + ((parent != null) ? adaptor.GetNodeText(parent) : "nil") + + "[" + childIndex + "]" + labels["a"] + "&" + labels["b"]); + } + } + + #region TreeWizard Tests + + [Test] + public void testSingleNode() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("ID"); + string actual = t.ToStringTree(); + string expected = "ID"; + Assert.AreEqual(expected, actual); + } + + [Test] + public void testSingleNodeWithArg() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("ID[foo]"); + string actual = t.ToStringTree(); + string expected = "foo"; + Assert.AreEqual(expected, actual); + } + + [Test] + public void testSingleNodeTree() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A)"); + string actual = t.ToStringTree(); + string expected = "A"; + Assert.AreEqual(expected, actual); + } + + [Test] + public void testSingleLevelTree() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B C D)"); + string actual = t.ToStringTree(); + string expected = "(A B C D)"; + Assert.AreEqual(expected, actual); + } + + [Test] + public void testListTree() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(nil A B C)"); + string actual = t.ToStringTree(); + string expected = "A B C"; + Assert.AreEqual(expected, actual); + } + + [Test] + public void testInvalidListTree() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("A B C"); + Assert.IsTrue(t == null); + } + + [Test] + public void testDoubleLevelTree() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A (B C) (B D) E)"); + string actual = t.ToStringTree(); + string expected = "(A (B C) (B D) E)"; + Assert.AreEqual(expected, actual); + } + + [Test] + public void testSingleNodeIndex() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("ID"); + IDictionary m = wiz.Index(t); + string actual = CollectionUtils.DictionaryToString(m); + string expected = "{10=[ID]}"; + Assert.AreEqual(expected, actual); + } + + [Test] + public void testNoRepeatsIndex() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B C D)"); + IDictionary m = wiz.Index(t); + string actual = CollectionUtils.DictionaryToString(m); + //string expected = "{8=[D], 6=[B], 7=[C], 5=[A]}"; + string expected = "{8=[D], 7=[C], 6=[B], 5=[A]}"; + Assert.AreEqual(expected, actual); + } + + [Test] + public void testRepeatsIndex() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B (A C B) B D D)"); + IDictionary m = wiz.Index(t); + string actual = CollectionUtils.DictionaryToString(m); + //string expected = "{8=[D, D], 6=[B, B, B], 7=[C], 5=[A, A]}"; + string expected = "{8=[D, D], 7=[C], 6=[B, B, B], 5=[A, A]}"; + Assert.AreEqual(expected, actual); + } + + [Test] + public void testNoRepeatsVisit() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B C D)"); + IList elements = new ArrayList(); + wiz.Visit(t, wiz.GetTokenType("B"), new RecordAllElementsVisitor(elements)); + string actual = CollectionUtils.ListToString(elements); + string expected = "[B]"; + Assert.AreEqual(expected, actual); + } + + [Test] + public void testNoRepeatsVisit2() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B (A C B) B D D)"); + IList elements = new ArrayList(); + wiz.Visit(t, wiz.GetTokenType("C"), new RecordAllElementsVisitor(elements)); + string actual = CollectionUtils.ListToString(elements); + string expected = "[C]"; + Assert.AreEqual(expected, actual); + } + + [Test] + public void testRepeatsVisit() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B (A C B) B D D)"); + IList elements = new ArrayList(); + wiz.Visit(t, wiz.GetTokenType("B"), new RecordAllElementsVisitor(elements)); + string actual = CollectionUtils.ListToString(elements); + string expected = "[B, B, B]"; + Assert.AreEqual(expected, actual); + } + + [Test] + public void testRepeatsVisit2() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B (A C B) B D D)"); + IList elements = new ArrayList(); + wiz.Visit(t, wiz.GetTokenType("A"), new RecordAllElementsVisitor(elements)); + string actual = CollectionUtils.ListToString(elements); + string expected = "[A, A]"; + Assert.AreEqual(expected, actual); + } + + [Test] + public void testRepeatsVisitWithContext() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B (A C B) B D D)"); + IList elements = new ArrayList(); + wiz.Visit(t, wiz.GetTokenType("B"), new Test1ContextVisitor(adaptor, elements)); + string actual = CollectionUtils.ListToString(elements); + string expected = "[B@A[0], B@A[1], B@A[2]]"; + Assert.AreEqual(expected, actual); + } + + [Test] + public void testRepeatsVisitWithNullParentAndContext() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B (A C B) B D D)"); + IList elements = new ArrayList(); + wiz.Visit(t, wiz.GetTokenType("A"), new Test1ContextVisitor(adaptor, elements)); + string actual = CollectionUtils.ListToString(elements); + string expected = "[A@nil[0], A@A[1]]"; + Assert.AreEqual(expected, actual); + } + + [Test] + public void testVisitPattern() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B C (A B) D)"); + IList elements = new ArrayList(); + wiz.Visit(t, "(A B)", new RecordAllElementsVisitor(elements)); + string actual = CollectionUtils.ListToString(elements); + string expected = "[A]"; // shouldn't match overall root, just (A B) + Assert.AreEqual(expected, actual); + } + + [Test] + public void testVisitPatternMultiple() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B C (A B) (D (A B)))"); + IList elements = new ArrayList(); + wiz.Visit(t, "(A B)", new Test1ContextVisitor(adaptor, elements)); + string actual = CollectionUtils.ListToString(elements); + string expected = "[A@A[2], A@D[0]]"; // shouldn't match overall root, just (A B) + Assert.AreEqual(expected, actual); + } + + [Test] + public void testVisitPatternMultipleWithLabels() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B C (A[foo] B[bar]) (D (A[big] B[dog])))"); + IList elements = new ArrayList(); + wiz.Visit(t, "(%a:A %b:B)", new Test2ContextVisitor(adaptor, elements)); + string actual = CollectionUtils.ListToString(elements); + string expected = "[foo@A[2]foo&bar, big@D[0]big&dog]"; + Assert.AreEqual(expected, actual); + } + + [Test] + public void testParse() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B C)"); + bool valid = wiz.Parse(t, "(A B C)"); + Assert.IsTrue(valid); + } + + [Test] + public void testParseSingleNode() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("A"); + bool valid = wiz.Parse(t, "A"); + Assert.IsTrue(valid); + } + + [Test] + public void testParseFlatTree() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(nil A B C)"); + bool valid = wiz.Parse(t, "(nil A B C)"); + Assert.IsTrue(valid); + } + + [Test] + public void testWildcard() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B C)"); + bool valid = wiz.Parse(t, "(A . .)"); + Assert.IsTrue(valid); + } + + [Test] + public void testParseWithText() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B[foo] C[bar])"); + // C pattern has no text arg so despite [bar] in t, no need + // to match text--check structure only. + bool valid = wiz.Parse(t, "(A B[foo] C)"); + Assert.IsTrue(valid); + } + + [Test] + public void testParseWithTextFails() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B C)"); + bool valid = wiz.Parse(t, "(A[foo] B C)"); + Assert.IsTrue(!valid); // fails + } + + [Test] + public void testParseLabels() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B C)"); + IDictionary labels = new Hashtable(); + bool valid = wiz.Parse(t, "(%a:A %b:B %c:C)", labels); + Assert.IsTrue(valid); + Assert.AreEqual("A", labels["a"].ToString()); + Assert.AreEqual("B", labels["b"].ToString()); + Assert.AreEqual("C", labels["c"].ToString()); + } + + [Test] + public void testParseWithWildcardLabels() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B C)"); + IDictionary labels = new Hashtable(); + bool valid = wiz.Parse(t, "(A %b:. %c:.)", labels); + Assert.IsTrue(valid); + Assert.AreEqual("B", labels["b"].ToString()); + Assert.AreEqual("C", labels["c"].ToString()); + } + + [Test] + public void testParseLabelsAndTestText() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B[foo] C)"); + IDictionary labels = new Hashtable(); + bool valid = wiz.Parse(t, "(%a:A %b:B[foo] %c:C)", labels); + Assert.IsTrue(valid); + Assert.AreEqual("A", labels["a"].ToString()); + Assert.AreEqual("foo", labels["b"].ToString()); + Assert.AreEqual("C", labels["c"].ToString()); + } + + [Test] + public void testParseLabelsInNestedTree() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A (B C) (D E))"); + IDictionary labels = new Hashtable(); + bool valid = wiz.Parse(t, "(%a:A (%b:B %c:C) (%d:D %e:E) )", labels); + Assert.IsTrue(valid); + Assert.AreEqual("A", labels["a"].ToString()); + Assert.AreEqual("B", labels["b"].ToString()); + Assert.AreEqual("C", labels["c"].ToString()); + Assert.AreEqual("D", labels["d"].ToString()); + Assert.AreEqual("E", labels["e"].ToString()); + } + + [Test] + public void testEquals() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t1 = (CommonTree)wiz.Create("(A B C)"); + CommonTree t2 = (CommonTree)wiz.Create("(A B C)"); + bool same = TreeWizard.Equals(t1, t2, adaptor); + Assert.IsTrue(same); + } + + [Test] + public void testEqualsWithText() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t1 = (CommonTree)wiz.Create("(A B[foo] C)"); + CommonTree t2 = (CommonTree)wiz.Create("(A B[foo] C)"); + bool same = TreeWizard.Equals(t1, t2, adaptor); + Assert.IsTrue(same); + } + + [Test] + public void testEqualsWithMismatchedText() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t1 = (CommonTree)wiz.Create("(A B[foo] C)"); + CommonTree t2 = (CommonTree)wiz.Create("(A B C)"); + bool same = TreeWizard.Equals(t1, t2, adaptor); + Assert.IsTrue(!same); + } + + [Test] + public void testFindPattern() + { + ITreeAdaptor adaptor = new CommonTreeAdaptor(); + TreeWizard wiz = new TreeWizard(adaptor, tokens); + CommonTree t = (CommonTree)wiz.Create("(A B C (A[foo] B[bar]) (D (A[big] B[dog])))"); + IList subtrees = wiz.Find(t, "(A B)"); + IList elements = subtrees; + string actual = CollectionUtils.ListToString(elements); + string expected = "[foo, big]"; + Assert.AreEqual(expected, actual); + } + + #endregion + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Collections/CollectionUtils.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Collections/CollectionUtils.cs new file mode 100644 index 0000000..2afb16d --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Collections/CollectionUtils.cs @@ -0,0 +1,129 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Collections +{ + using System; + using IList = System.Collections.IList; + using IDictionary = System.Collections.IDictionary; + using DictionaryEntry = System.Collections.DictionaryEntry; + using IEnumerator = System.Collections.IEnumerator; + using StringBuilder = System.Text.StringBuilder; + + public class CollectionUtils + { + /// <summary> + /// Returns a string representation of this IList. + /// </summary> + /// <remarks> + /// The string representation is a list of the collection's elements in the order + /// they are returned by its IEnumerator, enclosed in square brackets ("[]"). + /// The separator is a comma followed by a space i.e. ", ". + /// </remarks> + /// <param name="coll">Collection whose string representation will be returned</param> + /// <returns>A string representation of the specified collection or "null"</returns> + public static string ListToString(IList coll) + { + StringBuilder sb = new StringBuilder(); + + if (coll != null) + { + sb.Append("["); + for (int i = 0; i < coll.Count; i++) + { + if (i > 0) + sb.Append(", "); + + object element = coll[i]; + if (element == null) + sb.Append("null"); + else if (element is IDictionary) + sb.Append(DictionaryToString((IDictionary)element)); + else if (element is IList) + sb.Append(ListToString((IList)element)); + else + sb.Append(element.ToString()); + + } + sb.Append("]"); + } + else + sb.Insert(0, "null"); + + return sb.ToString(); + } + + + /// <summary> + /// Returns a string representation of this IDictionary. + /// </summary> + /// <remarks> + /// The string representation is a list of the collection's elements in the order + /// they are returned by its IEnumerator, enclosed in curly brackets ("{}"). + /// The separator is a comma followed by a space i.e. ", ". + /// </remarks> + /// <param name="dict">Dictionary whose string representation will be returned</param> + /// <returns>A string representation of the specified dictionary or "null"</returns> + public static string DictionaryToString(IDictionary dict) + { + StringBuilder sb = new StringBuilder(); + + if (dict != null) + { + sb.Append("{"); + int i = 0; + foreach (DictionaryEntry e in dict) + { + if (i > 0) + { + sb.Append(", "); + } + + if (e.Value is IDictionary) + sb.AppendFormat("{0}={1}", e.Key.ToString(), DictionaryToString((IDictionary)e.Value)); + else if (e.Value is IList) + sb.AppendFormat("{0}={1}", e.Key.ToString(), ListToString((IList)e.Value)); + else + sb.AppendFormat("{0}={1}", e.Key.ToString(), e.Value.ToString()); + i++; + } + sb.Append("}"); + } + else + sb.Insert(0, "null"); + + return sb.ToString(); + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Collections/HashList.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Collections/HashList.cs new file mode 100644 index 0000000..fd4872c --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Collections/HashList.cs @@ -0,0 +1,501 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Collections +{ + using System; + using IDictionary = System.Collections.IDictionary; + using IDictionaryEnumerator = System.Collections.IDictionaryEnumerator; + using ICollection = System.Collections.ICollection; + using IEnumerator = System.Collections.IEnumerator; + using Hashtable = System.Collections.Hashtable; + using ArrayList = System.Collections.ArrayList; + using DictionaryEntry = System.Collections.DictionaryEntry; + using StringBuilder = System.Text.StringBuilder; + + /// <summary> + /// An Hashtable-backed dictionary that enumerates Keys and Values in + /// insertion order. + /// </summary> + public sealed class HashList : IDictionary + { + #region Helper classes + private sealed class HashListEnumerator : IDictionaryEnumerator + { + internal enum EnumerationMode + { + Key, + Value, + Entry + } + private HashList _hashList; + private ArrayList _orderList; + private EnumerationMode _mode; + private int _index; + private int _version; + private object _key; + private object _value; + + #region Constructors + + internal HashListEnumerator() + { + _index = 0; + _key = null; + _value = null; + } + + internal HashListEnumerator(HashList hashList, EnumerationMode mode) + { + _hashList = hashList; + _mode = mode; + _version = hashList._version; + _orderList = hashList._insertionOrderList; + _index = 0; + _key = null; + _value = null; + } + + #endregion + + #region IDictionaryEnumerator Members + + public object Key + { + get + { + if (_key == null) + { + throw new InvalidOperationException("Enumeration has either not started or has already finished."); + } + return _key; + } + } + + public object Value + { + get + { + if (_key == null) + { + throw new InvalidOperationException("Enumeration has either not started or has already finished."); + } + return _value; + } + } + + public DictionaryEntry Entry + { + get + { + if (_key == null) + { + throw new InvalidOperationException("Enumeration has either not started or has already finished."); + } + return new DictionaryEntry(_key, _value); + } + } + + #endregion + + #region IEnumerator Members + + public void Reset() + { + if (_version != _hashList._version) + { + throw new InvalidOperationException("Collection was modified; enumeration operation may not execute."); + } + _index = 0; + _key = null; + _value = null; + } + + public object Current + { + get + { + if (_key == null) + { + throw new InvalidOperationException("Enumeration has either not started or has already finished."); + } + + if (_mode == EnumerationMode.Key) + return _key; + else if (_mode == EnumerationMode.Value) + return _value; + + return new DictionaryEntry(_key, _value); + } + } + + public bool MoveNext() + { + if (_version != _hashList._version) + { + throw new InvalidOperationException("Collection was modified; enumeration operation may not execute."); + } + + if (_index < _orderList.Count) + { + _key = _orderList[_index]; + _value = _hashList[_key]; + _index++; + return true; + } + _key = null; + return false; + } + + #endregion + } + + private sealed class KeyCollection : ICollection + { + private HashList _hashList; + + #region Constructors + + internal KeyCollection() + { + } + + internal KeyCollection(HashList hashList) + { + _hashList = hashList; + } + + #endregion + + public override string ToString() + { + StringBuilder result = new StringBuilder(); + + result.Append("["); + ArrayList keys = _hashList._insertionOrderList; + for (int i = 0; i < keys.Count; i++) + { + if (i > 0) + { + result.Append(", "); + } + result.Append(keys[i]); + } + result.Append("]"); + + return result.ToString(); + } + + public override bool Equals(object o) + { + if (o is KeyCollection) + { + KeyCollection other = (KeyCollection) o; + if ((Count == 0) && (other.Count == 0)) + return true; + else if (Count == other.Count) + { + for (int i = 0; i < Count; i++) + { + if ((_hashList._insertionOrderList[i] == other._hashList._insertionOrderList[i]) || + (_hashList._insertionOrderList[i].Equals(other._hashList._insertionOrderList[i]))) + return true; + } + } + } + return false; + } + + public override int GetHashCode() + { + return _hashList._insertionOrderList.GetHashCode(); + } + + #region ICollection Members + + public bool IsSynchronized + { + get { return _hashList.IsSynchronized; } + } + + public int Count + { + get { return _hashList.Count; } + } + + public void CopyTo(Array array, int index) + { + _hashList.CopyKeysTo(array, index); + } + + public object SyncRoot + { + get { return _hashList.SyncRoot; } + } + + #endregion + + #region IEnumerable Members + + public IEnumerator GetEnumerator() + { + return new HashListEnumerator(_hashList, HashListEnumerator.EnumerationMode.Key); + } + + #endregion + } + + private sealed class ValueCollection : ICollection + { + private HashList _hashList; + + #region Constructors + + internal ValueCollection() + { + } + + internal ValueCollection(HashList hashList) + { + _hashList = hashList; + } + + #endregion + + public override string ToString() + { + StringBuilder result = new StringBuilder(); + + result.Append("["); + IEnumerator iter = new HashListEnumerator(_hashList, HashListEnumerator.EnumerationMode.Value); + if (iter.MoveNext()) + { + result.Append((iter.Current == null) ? "null" : iter.Current); + while (iter.MoveNext()) + { + result.Append(", "); + result.Append((iter.Current == null) ? "null" : iter.Current); + } + } + result.Append("]"); + + return result.ToString(); + } + + #region ICollection Members + + public bool IsSynchronized + { + get { return _hashList.IsSynchronized; } + } + + public int Count + { + get { return _hashList.Count; } + } + + public void CopyTo(Array array, int index) + { + _hashList.CopyValuesTo(array, index); + } + + public object SyncRoot + { + get { return _hashList.SyncRoot; } + } + + #endregion + + #region IEnumerable Members + + public IEnumerator GetEnumerator() + { + return new HashListEnumerator(_hashList, HashListEnumerator.EnumerationMode.Value); + } + + #endregion + } + + #endregion + + private Hashtable _dictionary = new Hashtable(); + private ArrayList _insertionOrderList = new ArrayList(); + private int _version; + + #region Constructors + + public HashList() : this(-1) + { + } + + public HashList(int capacity) + { + if (capacity < 0) + { + _dictionary = new Hashtable(); + _insertionOrderList = new ArrayList(); + } + else + { + _dictionary = new Hashtable(capacity); + _insertionOrderList = new ArrayList(capacity); + } + _version = 0; + } + + #endregion + + #region IDictionary Members + + public bool IsReadOnly { get { return _dictionary.IsReadOnly; } } + + public IDictionaryEnumerator GetEnumerator() + { + return new HashListEnumerator(this, HashListEnumerator.EnumerationMode.Entry); + } + + public object this[object key] + { + get { return _dictionary[key]; } + set + { + bool isNewEntry = !_dictionary.Contains(key); + _dictionary[key] = value; + if (isNewEntry) + _insertionOrderList.Add(key); + _version++; + } + } + + public void Remove(object key) + { + _dictionary.Remove(key); + _insertionOrderList.Remove(key); + _version++; + } + + public bool Contains(object key) + { + return _dictionary.Contains(key); + } + + public void Clear() + { + _dictionary.Clear(); + _insertionOrderList.Clear(); + _version++; + } + + public ICollection Values + { + get { return new ValueCollection(this); } + } + + public void Add(object key, object value) + { + _dictionary.Add(key, value); + _insertionOrderList.Add(key); + _version++; + } + + public ICollection Keys + { + get { return new KeyCollection(this); } + } + + public bool IsFixedSize + { + get { return _dictionary.IsFixedSize; } + } + + #endregion + + #region ICollection Members + + public bool IsSynchronized + { + get { return _dictionary.IsSynchronized; } + } + + public int Count + { + get { return _dictionary.Count; } + } + + public void CopyTo(Array array, int index) + { + int len = _insertionOrderList.Count; + for (int i = 0; i < len; i++) + { + DictionaryEntry e = new DictionaryEntry(_insertionOrderList[i], _dictionary[_insertionOrderList[i]]); + array.SetValue(e, index++); + } + } + + public object SyncRoot + { + get { return _dictionary.SyncRoot; } + } + + #endregion + + #region IEnumerable Members + + IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return new HashListEnumerator(this, HashListEnumerator.EnumerationMode.Entry); + } + + #endregion + + private void CopyKeysTo(Array array, int index) + { + int len = _insertionOrderList.Count; + for (int i = 0; i < len; i++) + { + array.SetValue(_insertionOrderList[i], index++); + } + } + + private void CopyValuesTo(Array array, int index) + { + int len = _insertionOrderList.Count; + for (int i = 0; i < len; i++) + { + array.SetValue(_dictionary[_insertionOrderList[i]], index++); + } + } + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Collections/StackList.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Collections/StackList.cs new file mode 100644 index 0000000..938d11f --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Collections/StackList.cs @@ -0,0 +1,77 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Collections +{ + using System; + using ArrayList = System.Collections.ArrayList; + + /// <summary> + /// Stack abstraction that also supports the IList interface + /// </summary> + public class StackList : ArrayList + { + public StackList() : base() + { + } + + /// <summary> + /// Adds an element to the top of the stack list. + /// </summary> + public void Push(object item) + { + Add(item); + } + + /// <summary> + /// Removes the element at the top of the stack list and returns it. + /// </summary> + /// <returns>The element at the top of the stack.</returns> + public object Pop() + { + object poppedItem = this[this.Count - 1]; + RemoveAt(this.Count - 1); + return poppedItem; + } + + /// <summary> + /// Removes the element at the top of the stack list without removing it. + /// </summary> + /// <returns>The element at the top of the stack.</returns> + public object Peek() + { + return this[this.Count - 1]; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/BlankDebugEventListener.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/BlankDebugEventListener.cs new file mode 100644 index 0000000..78fc0ab --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/BlankDebugEventListener.cs @@ -0,0 +1,95 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +Copyright (c) 2007-2008 Johannes Luber +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Debug +{ + using System; + using Antlr.Runtime; + using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; + using ITreeNodeStream = Antlr.Runtime.Tree.ITreeNodeStream; + + + /// <summary> + /// A blank listener that does nothing; useful for real classes so + /// they don't have to have lots of blank methods and are less + /// sensitive to updates to debug interface. + /// </summary> + public class BlankDebugEventListener : IDebugEventListener + { + public virtual void EnterRule(string grammarFileName, string ruleName) { } + public virtual void ExitRule(string grammarFileName, string ruleName) { } + public virtual void EnterAlt(int alt) { } + public virtual void EnterSubRule(int decisionNumber) { } + public virtual void ExitSubRule(int decisionNumber) { } + public virtual void EnterDecision(int decisionNumber) { } + public virtual void ExitDecision(int decisionNumber) { } + public virtual void Location(int line, int pos) { } + public virtual void ConsumeToken(IToken token) { } + public virtual void ConsumeHiddenToken(IToken token) { } + public virtual void LT(int i, IToken t) { } + public virtual void Mark(int i) { } + public virtual void Rewind(int i) { } + public virtual void Rewind() { } + public virtual void BeginBacktrack(int level) { } + public virtual void EndBacktrack(int level, bool successful) { } + public virtual void RecognitionException(RecognitionException e) { } + public virtual void BeginResync() { } + public virtual void EndResync() { } + public virtual void SemanticPredicate(bool result, string predicate) { } + public virtual void Commence() { } + public virtual void Terminate() { } + + + #region Tree Parsing Stuff + + public virtual void ConsumeNode(object t) { } + public virtual void LT(int i, object t) { } + + #endregion + + + #region AST Stuff + + public virtual void GetNilNode(object t) { } + public virtual void ErrorNode(object t) {} + public virtual void CreateNode(object t) { } + public virtual void CreateNode(object node, IToken token) { } + public virtual void BecomeRoot(object newRoot, object oldRoot) { } + public virtual void AddChild(object root, object child) { } + public virtual void SetTokenBoundaries(object t, int tokenStartIndex, int tokenStopIndex) { } + + #endregion + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugEventHub.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugEventHub.cs new file mode 100644 index 0000000..d25a1f7 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugEventHub.cs @@ -0,0 +1,370 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Debug +{ + using System; + using IList = System.Collections.IList; + using ArrayList = System.Collections.ArrayList; + using IToken = Antlr.Runtime.IToken; + using RecognitionException = Antlr.Runtime.RecognitionException; + + /// <summary> + /// Broadcast debug events to multiple listeners. + /// </summary> + /// <remarks> + /// Lets you debug and still use the event mechanism to build + /// parse trees etc... + /// Not thread-safe. Don't add events in one thread while parser + /// fires events in another. + /// </remarks> + public class DebugEventHub : IDebugEventListener + { + protected IList listeners = new ArrayList(); + + public DebugEventHub(IDebugEventListener listener) + { + listeners.Add(listener); + } + + public DebugEventHub(params IDebugEventListener[] listeners) + { + + foreach (IDebugEventListener listener in listeners) + { + this.listeners.Add(listener); + } + } + + /// <summary> + /// Add another listener to broadcast events too. + /// </summary> + /// <remarks> + /// Not thread-safe. Don't add events in one thread while parser + /// fires events in another. + /// </remarks> + public void AddListener(IDebugEventListener listener) + { + listeners.Add(listener); + } + + public void EnterRule(string grammarFileName, string ruleName) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.EnterRule(grammarFileName, ruleName); + } + } + + public void ExitRule(string grammarFileName, string ruleName) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.ExitRule(grammarFileName, ruleName); + } + } + + public void EnterAlt(int alt) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.EnterAlt(alt); + } + } + + public void EnterSubRule(int decisionNumber) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.EnterSubRule(decisionNumber); + } + } + + public void ExitSubRule(int decisionNumber) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.ExitSubRule(decisionNumber); + } + } + + public void EnterDecision(int decisionNumber) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.EnterDecision(decisionNumber); + } + } + + public void ExitDecision(int decisionNumber) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.ExitDecision(decisionNumber); + } + } + + public void Location(int line, int pos) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.Location(line, pos); + } + } + + public void ConsumeToken(IToken token) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.ConsumeToken(token); + } + } + + public void ConsumeHiddenToken(IToken token) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.ConsumeHiddenToken(token); + } + } + + public void LT(int index, IToken t) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.LT(index, t); + } + } + + public void Mark(int index) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.Mark(index); + } + } + + public void Rewind(int index) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.Rewind(index); + } + } + + public void Rewind() + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.Rewind(); + } + } + + public void BeginBacktrack(int level) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.BeginBacktrack(level); + } + } + + public void EndBacktrack(int level, bool successful) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.EndBacktrack(level, successful); + } + } + + public void RecognitionException(RecognitionException e) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.RecognitionException(e); + } + } + + public void BeginResync() + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.BeginResync(); + } + } + + public void EndResync() + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.EndResync(); + } + } + + public void SemanticPredicate(bool result, string predicate) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.SemanticPredicate(result, predicate); + } + } + + public void Commence() + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.Commence(); + } + } + + public void Terminate() + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.Terminate(); + } + } + + + #region Tree parsing stuff + + public void ConsumeNode(object t) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.ConsumeNode(t); + } + } + + public void LT(int index, object t) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.LT(index, t); + } + } + + #endregion + + + #region AST Stuff + + public void GetNilNode(object t) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.GetNilNode(t); + } + } + + public void ErrorNode(object t) { + for (int i = 0; i < listeners.Count; i++) { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.ErrorNode(t); + } + } + + public void CreateNode(object t) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.CreateNode(t); + } + } + + public void CreateNode(object node, IToken token) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.CreateNode(node, token); + } + } + + public void BecomeRoot(object newRoot, object oldRoot) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.BecomeRoot(newRoot, oldRoot); + } + } + + public void AddChild(object root, object child) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.AddChild(root, child); + } + } + + public void SetTokenBoundaries(object t, int tokenStartIndex, int tokenStopIndex) + { + for (int i = 0; i < listeners.Count; i++) + { + IDebugEventListener listener = (IDebugEventListener)listeners[i]; + listener.SetTokenBoundaries(t, tokenStartIndex, tokenStopIndex); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugEventRepeater.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugEventRepeater.cs new file mode 100644 index 0000000..e61811e --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugEventRepeater.cs @@ -0,0 +1,102 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Debug +{ + using System; + using IToken = Antlr.Runtime.IToken; + using RecognitionException = Antlr.Runtime.RecognitionException; + + /// <summary> + /// A simple event repeater (proxy) that delegates all functionality to + /// the listener sent into the ctor. + /// </summary> + /// <remarks> + /// Useful if you want to listen in on a few debug events w/o + /// interrupting the debugger. Just subclass the repeater and override + /// the methods you want to listen in on. Remember to call the method + /// in this class so the event will continue on to the original recipient. + /// </remarks> + public class DebugEventRepeater : IDebugEventListener + { + protected IDebugEventListener listener; + + public DebugEventRepeater(IDebugEventListener listener) + { + this.listener = listener; + } + + public void EnterRule(string grammarFileName, string ruleName) { listener.EnterRule(grammarFileName, ruleName); } + public void ExitRule(string grammarFileName, string ruleName) { listener.ExitRule(grammarFileName, ruleName); } + public void EnterAlt(int alt) { listener.EnterAlt(alt); } + public void EnterSubRule(int decisionNumber) { listener.EnterSubRule(decisionNumber); } + public void ExitSubRule(int decisionNumber) { listener.ExitSubRule(decisionNumber); } + public void EnterDecision(int decisionNumber) { listener.EnterDecision(decisionNumber); } + public void ExitDecision(int decisionNumber) { listener.ExitDecision(decisionNumber); } + public void Location(int line, int pos) { listener.Location(line, pos); } + public void ConsumeToken(IToken token) { listener.ConsumeToken(token); } + public void ConsumeHiddenToken(IToken token) { listener.ConsumeHiddenToken(token); } + public void LT(int i, IToken t) { listener.LT(i, t); } + public void Mark(int i) { listener.Mark(i); } + public void Rewind(int i) { listener.Rewind(i); } + public void Rewind() { listener.Rewind(); } + public void BeginBacktrack(int level) { listener.BeginBacktrack(level); } + public void EndBacktrack(int level, bool successful) { listener.EndBacktrack(level, successful); } + public void RecognitionException(RecognitionException e) { listener.RecognitionException(e); } + public void BeginResync() { listener.BeginResync(); } + public void EndResync() { listener.EndResync(); } + public void SemanticPredicate(bool result, string predicate) { listener.SemanticPredicate(result, predicate); } + public void Commence() { listener.Commence(); } + public void Terminate() { listener.Terminate(); } + + // Tree parsing stuff + + public void ConsumeNode(object t) { listener.ConsumeNode(t); } + public void LT(int i, object t) { listener.LT(i, t); } + + // AST Stuff + + public void GetNilNode(object t) { listener.GetNilNode(t); } + public void ErrorNode(object t) { listener.ErrorNode(t); } + public void CreateNode(object t) { listener.CreateNode(t); } + public void CreateNode(object node, IToken token) { listener.CreateNode(node, token); } + public void BecomeRoot(object newRoot, object oldRoot) { listener.BecomeRoot(newRoot, oldRoot); } + public void AddChild(object root, object child) { listener.AddChild(root, child); } + public void SetTokenBoundaries(object t, int tokenStartIndex, int tokenStopIndex) + { + listener.SetTokenBoundaries(t, tokenStartIndex, tokenStopIndex); + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugEventSocketProxy.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugEventSocketProxy.cs new file mode 100644 index 0000000..55a2a08 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugEventSocketProxy.cs @@ -0,0 +1,422 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Debug +{ + using System; + using StreamReader = System.IO.StreamReader; + using StreamWriter = System.IO.StreamWriter; + using Encoding = System.Text.Encoding; + using StringBuilder = System.Text.StringBuilder; + using TcpClient = System.Net.Sockets.TcpClient; + using TcpListener = System.Net.Sockets.TcpListener; + using IToken = Antlr.Runtime.IToken; + using RecognitionException = Antlr.Runtime.RecognitionException; + using BaseRecognizer = Antlr.Runtime.BaseRecognizer; + using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; + + /// <summary> + /// A proxy debug event listener that forwards events over a socket to + /// debugger (or any other listener) using a simple text-based protocol; + /// one event per line. + /// </summary> + /// <remarks> + /// ANTLRWorks listens on server socket with a + /// RemoteDebugEventSocketListener instance. These two objects must therefore + /// be kept in sync. New events must be handled on both sides of socket. + /// </remarks> + public class DebugEventSocketProxy : BlankDebugEventListener + { + public const int DEFAULT_DEBUGGER_PORT = 0xBFCC; + protected int port = DEFAULT_DEBUGGER_PORT; + protected TcpListener serverSocket; + protected TcpClient socket; + protected string grammarFileName; + protected StreamWriter writer; + protected StreamReader reader; + protected BaseRecognizer recognizer; + + /// <summary> + /// Almost certainly the recognizer will have adaptor set, but + /// we don't know how to cast it (Parser or TreeParser) to get + /// the adaptor field. Must be set with a constructor. :( + /// </summary> + protected ITreeAdaptor adaptor; + + public DebugEventSocketProxy(BaseRecognizer recognizer, ITreeAdaptor adaptor) + : this(recognizer, DEFAULT_DEBUGGER_PORT, adaptor) + { + } + + public DebugEventSocketProxy(BaseRecognizer recognizer, int port, ITreeAdaptor adaptor) + { + this.grammarFileName = recognizer.GrammarFileName; + this.port = port; + this.adaptor = adaptor; + } + + public virtual void Handshake() + { + if (serverSocket == null) + { + serverSocket = new TcpListener(port); + serverSocket.Start(); + socket = serverSocket.AcceptTcpClient(); + socket.NoDelay = true; + + reader = new StreamReader(socket.GetStream(), Encoding.UTF8); + writer = new StreamWriter(socket.GetStream(), Encoding.UTF8); + + writer.WriteLine("ANTLR " + Constants.DEBUG_PROTOCOL_VERSION); + writer.WriteLine("grammar \"" + grammarFileName); + writer.Flush(); + Ack(); + } + } + + public override void Commence() + { + // don't bother sending event; listener will trigger upon connection + } + + public override void Terminate() + { + Transmit("terminate"); + writer.Close(); + try + { + socket.Close(); + } + catch (System.IO.IOException ioe) + { + Console.Error.WriteLine(ioe.StackTrace); + } + } + + protected internal virtual void Ack() + { + try + { + reader.ReadLine(); + } + catch (System.IO.IOException ioe) + { + Console.Error.WriteLine(ioe.StackTrace); + } + } + + protected internal virtual void Transmit(string eventLabel) + { + writer.WriteLine(eventLabel); + writer.Flush(); + Ack(); + } + + public override void EnterRule(string grammarFileName, string ruleName) + { + Transmit("enterRule\t" + grammarFileName + "\t" + ruleName); + } + + public override void EnterAlt(int alt) + { + Transmit("enterAlt\t" + alt); + } + + public override void ExitRule(string grammarFileName, string ruleName) + { + Transmit("exitRule\t" + grammarFileName + "\t" + ruleName); + } + + public override void EnterSubRule(int decisionNumber) + { + Transmit("enterSubRule\t" + decisionNumber); + } + + public override void ExitSubRule(int decisionNumber) + { + Transmit("exitSubRule\t" + decisionNumber); + } + + public override void EnterDecision(int decisionNumber) + { + Transmit("enterDecision\t" + decisionNumber); + } + + public override void ExitDecision(int decisionNumber) + { + Transmit("exitDecision\t" + decisionNumber); + } + + public override void ConsumeToken(IToken t) + { + string buf = SerializeToken(t); + Transmit("consumeToken\t" + buf); + } + + public override void ConsumeHiddenToken(IToken t) + { + string buf = SerializeToken(t); + Transmit("consumeHiddenToken\t" + buf); + } + + public override void LT(int i, IToken t) + { + if (t != null) + Transmit("LT\t" + i + "\t" + SerializeToken(t)); + } + + public override void Mark(int i) + { + Transmit("mark\t" + i); + } + + public override void Rewind(int i) + { + Transmit("rewind\t" + i); + } + + public override void Rewind() + { + Transmit("rewind"); + } + + public override void BeginBacktrack(int level) + { + Transmit("beginBacktrack\t" + level); + } + + public override void EndBacktrack(int level, bool successful) + { + Transmit("endBacktrack\t" + level + "\t" + (successful ? true.ToString() : false.ToString())); + } + + public override void Location(int line, int pos) + { + Transmit("location\t" + line + "\t" + pos); + } + + public override void RecognitionException(RecognitionException e) + { + StringBuilder buf = new StringBuilder(50); + buf.Append("exception\t"); + buf.Append(e.GetType().FullName); + // dump only the data common to all exceptions for now + buf.Append("\t"); + buf.Append(e.Index); + buf.Append("\t"); + buf.Append(e.Line); + buf.Append("\t"); + buf.Append(e.CharPositionInLine); + Transmit(buf.ToString()); + } + + public override void BeginResync() + { + Transmit("beginResync"); + } + + public override void EndResync() + { + Transmit("endResync"); + } + + public override void SemanticPredicate(bool result, string predicate) + { + StringBuilder buf = new StringBuilder(50); + buf.Append("semanticPredicate\t"); + buf.Append(result); + SerializeText(buf, predicate); + Transmit(buf.ToString()); + } + + + #region A S T P a r s i n g E v e n t s + + public override void ConsumeNode(object t) + { + StringBuilder buf = new StringBuilder(50); + buf.Append("consumeNode\t"); + SerializeNode(buf, t); + Transmit(buf.ToString()); + } + + public override void LT(int i, object t) + { + int ID = adaptor.GetUniqueID(t); + string text = adaptor.GetNodeText(t); + int type = adaptor.GetNodeType(t); + StringBuilder buf = new StringBuilder(50); + buf.Append("LN\t"); // lookahead node; distinguish from LT in protocol + buf.Append(i); + SerializeNode(buf, t); + Transmit(buf.ToString()); + } + + #endregion + + + #region A S T E v e n t s + + public override void GetNilNode(object t) + { + int ID = adaptor.GetUniqueID(t); + Transmit("nilNode\t" + ID); + } + + public override void ErrorNode(object t) { + int ID = adaptor.GetUniqueID(t); + String text = t.ToString(); + StringBuilder buf = new StringBuilder(50); + buf.Append("errorNode\t"); + buf.Append(ID); + buf.Append("\t"); + buf.Append(Token.INVALID_TOKEN_TYPE); + SerializeText(buf, text); + Transmit(buf.ToString()); + } + + public override void CreateNode(object t) + { + int ID = adaptor.GetUniqueID(t); + string text = adaptor.GetNodeText(t); + int type = adaptor.GetNodeType(t); + StringBuilder buf = new StringBuilder(50); + buf.Append("createNodeFromTokenElements\t"); + buf.Append(ID); + buf.Append("\t"); + buf.Append(type); + SerializeText(buf, text); + Transmit(buf.ToString()); + } + + public override void CreateNode(object node, IToken token) + { + int ID = adaptor.GetUniqueID(node); + int tokenIndex = token.TokenIndex; + Transmit("createNode\t" + ID + "\t" + tokenIndex); + } + + public override void BecomeRoot(object newRoot, object oldRoot) + { + int newRootID = adaptor.GetUniqueID(newRoot); + int oldRootID = adaptor.GetUniqueID(oldRoot); + Transmit("becomeRoot\t" + newRootID + "\t" + oldRootID); + } + + public override void AddChild(object root, object child) + { + int rootID = adaptor.GetUniqueID(root); + int childID = adaptor.GetUniqueID(child); + Transmit("addChild\t" + rootID + "\t" + childID); + } + + public override void SetTokenBoundaries(object t, int tokenStartIndex, int tokenStopIndex) + { + int ID = adaptor.GetUniqueID(t); + Transmit("setTokenBoundaries\t" + ID + "\t" + tokenStartIndex + "\t" + tokenStopIndex); + } + + #endregion + + #region Support + + public ITreeAdaptor TreeAdaptor { + set { this.adaptor = value; } + get { return adaptor; } + } + + protected internal virtual string SerializeToken(IToken t) + { + StringBuilder buf = new StringBuilder(50); + buf.Append(t.TokenIndex); buf.Append('\t'); + buf.Append(t.Type); buf.Append('\t'); + buf.Append(t.Channel); buf.Append('\t'); + buf.Append(t.Line); buf.Append('\t'); + buf.Append(t.CharPositionInLine); + SerializeText(buf, t.Text); + return buf.ToString(); + } + + protected internal virtual string EscapeNewlines(string txt) + { + txt = txt.Replace("%", "%25"); // escape all escape char ;) + txt = txt.Replace("\n", "%0A"); // escape \n + txt = txt.Replace("\r", "%0D"); // escape \r + return txt; + } + + protected internal void SerializeNode(StringBuilder buf, object t) + { + int ID = adaptor.GetUniqueID(t); + string text = adaptor.GetNodeText(t); + int type = adaptor.GetNodeType(t); + buf.Append("\t"); + buf.Append(ID); + buf.Append("\t"); + buf.Append(type); + IToken token = adaptor.GetToken(t); + int line = -1; + int pos = -1; + if (token != null) + { + line = token.Line; + pos = token.CharPositionInLine; + } + buf.Append("\t"); + buf.Append(line); + buf.Append("\t"); + buf.Append(pos); + int tokenIndex = adaptor.GetTokenStartIndex(t); + buf.Append("\t"); + buf.Append(tokenIndex); + SerializeText(buf, text); + } + + protected void SerializeText(StringBuilder buf, string text) + { + buf.Append("\t\""); + if (text == null) + { + text = ""; + } + // escape \n and \r all text for token appears to exist on one line + // this escape is slow but easy to understand + text = EscapeNewlines(text); + buf.Append(text); + } + + #endregion + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugParser.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugParser.cs new file mode 100644 index 0000000..1fc97b8 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugParser.cs @@ -0,0 +1,112 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Debug +{ + using System; + using Antlr.Runtime; + using ErrorManager = Antlr.Runtime.Misc.ErrorManager; + + public class DebugParser : Parser + { + /// <summary> + /// Provide a new debug event listener for this parser. Notify the + /// input stream too that it should send events to this listener. + /// </summary> + virtual public IDebugEventListener DebugListener + { + get + { + return dbg; + } + + set + { + if (input is DebugTokenStream) + { + ((DebugTokenStream)input).DebugListener = value; + } + this.dbg = value; + } + + } + /// <summary>Who to notify when events in the parser occur. </summary> + protected internal IDebugEventListener dbg = null; + + /// <summary> + /// Used to differentiate between fixed lookahead and cyclic DFA decisions + /// while profiling. + /// </summary> + public bool isCyclicDecision = false; + + /// <summary> + /// Create a normal parser except wrap the token stream in a debug + /// proxy that fires consume events. + /// </summary> + public DebugParser(ITokenStream input, IDebugEventListener dbg, RecognizerSharedState state) + : base((input is DebugTokenStream ? input : new DebugTokenStream(input, dbg)), state) + { + DebugListener = dbg; + } + + public DebugParser(ITokenStream input, RecognizerSharedState state) + : base((input is DebugTokenStream ? input : new DebugTokenStream(input, null)), state) { + } + + public DebugParser(ITokenStream input, IDebugEventListener dbg) + : this((input is DebugTokenStream ? input : new DebugTokenStream(input, dbg)), dbg, null) + { + } + + public virtual void ReportError(System.IO.IOException e) + { + ErrorManager.InternalError(e); + } + + override public void BeginResync() + { + dbg.BeginResync(); + } + + override public void EndResync() + { + dbg.EndResync(); + } + + public override void ReportError(RecognitionException e) { + dbg.RecognitionException(e); + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugTokenStream.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugTokenStream.cs new file mode 100644 index 0000000..4cc858f --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugTokenStream.cs @@ -0,0 +1,189 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Debug +{ + using System; + using Antlr.Runtime; + + public class DebugTokenStream : ITokenStream + { + protected internal IDebugEventListener dbg; + public ITokenStream input; + protected internal bool initialStreamState = true; + /// <summary> + /// Track the last Mark() call result value for use in Rewind(). + /// </summary> + protected int lastMarker; + + virtual public IDebugEventListener DebugListener + { + set { this.dbg = value; } + } + + public DebugTokenStream(ITokenStream input, IDebugEventListener dbg) + { + this.input = input; + DebugListener = dbg; + // force TokenStream to get at least first valid token + // so we know if there are any hidden tokens first in the stream + input.LT(1); + } + + public virtual void Consume() + { + if (initialStreamState) + { + ConsumeInitialHiddenTokens(); + } + int a = input.Index(); + IToken t = input.LT(1); + input.Consume(); + int b = input.Index(); + dbg.ConsumeToken(t); + if (b > a + 1) + { + // then we consumed more than one token; must be off channel tokens + for (int i = a + 1; i < b; i++) + { + dbg.ConsumeHiddenToken(input.Get(i)); + } + } + } + + /// <summary>consume all initial off-channel tokens</summary> + protected internal virtual void ConsumeInitialHiddenTokens() + { + int firstOnChannelTokenIndex = input.Index(); + for (int i = 0; i < firstOnChannelTokenIndex; i++) + { + dbg.ConsumeHiddenToken(input.Get(i)); + } + initialStreamState = false; + } + + public virtual IToken LT(int i) + { + if (initialStreamState) + { + ConsumeInitialHiddenTokens(); + } + dbg.LT(i, input.LT(i)); + return input.LT(i); + } + + public virtual int LA(int i) + { + if (initialStreamState) + { + ConsumeInitialHiddenTokens(); + } + dbg.LT(i, input.LT(i)); + return input.LA(i); + } + + public virtual IToken Get(int i) + { + return input.Get(i); + } + + public virtual int Mark() + { + lastMarker = input.Mark(); + dbg.Mark(lastMarker); + return lastMarker; + } + + public virtual int Index() + { + return input.Index(); + } + + public virtual void Rewind(int marker) + { + dbg.Rewind(marker); + input.Rewind(marker); + } + + public virtual void Rewind() + { + dbg.Rewind(); + input.Rewind(lastMarker); + } + + public virtual void Release(int marker) + { + } + + public virtual void Seek(int index) + { + input.Seek(index); + } + + [Obsolete("Please use property Count instead.")] + public virtual int Size() + { + return Count; + } + + public virtual int Count { + get { return input.Count; } + } + + public virtual ITokenSource TokenSource + { + get { return input.TokenSource; } + } + + public virtual string SourceName { + get { return TokenSource.SourceName; } + } + + public override string ToString() + { + return input.ToString(); + } + + public virtual string ToString(int start, int stop) + { + return input.ToString(start, stop); + } + + public virtual string ToString(IToken start, IToken stop) + { + return input.ToString(start, stop); + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugTreeAdaptor.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugTreeAdaptor.cs new file mode 100644 index 0000000..63aa4c3 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugTreeAdaptor.cs @@ -0,0 +1,294 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Debug +{ + using System; + using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; + + /// <summary> + /// A TreeAdaptor proxy that fires debugging events to a DebugEventListener + /// delegate and uses the TreeAdaptor delegate to do the actual work. All + /// AST events are triggered by this adaptor; no code gen changes are needed + /// in generated rules. Debugging events are triggered *after* invoking + /// tree adaptor routines. + /// + /// Trees created with actions in rewrite actions like "-> ^(ADD {foo} {bar})" + /// cannot be tracked as they might not use the adaptor to create foo, bar. + /// The debug listener has to deal with tree node IDs for which it did + /// not see a CreateNode event. A single <unknown> node is sufficient even + /// if it represents a whole tree. + /// </summary> + public class DebugTreeAdaptor : ITreeAdaptor + { + protected IDebugEventListener dbg; + protected ITreeAdaptor adaptor; + + public DebugTreeAdaptor(IDebugEventListener dbg, ITreeAdaptor adaptor) + { + this.dbg = dbg; + this.adaptor = adaptor; + } + + public object Create(IToken payload) + { + if (payload.TokenIndex < 0) { + // could be token conjured up during error recovery + return Create(payload.Type, payload.Text); + } + object node = adaptor.Create(payload); + dbg.CreateNode(node, payload); + return node; + } + + public Object ErrorNode(ITokenStream input, IToken start, IToken stop, + RecognitionException e) + { + Object node = adaptor.ErrorNode(input, start, stop, e); + if (node != null) { + dbg.ErrorNode(node); + } + return node; + } + + public object DupTree(object tree) + { + Object t = adaptor.DupTree(tree); + // walk the tree and emit create and add child events + // to simulate what DupTree has done. DupTree does not call this debug + // adapter so I must simulate. + SimulateTreeConstruction(t); + return t; + } + + /** ^(A B C): emit create A, create B, add child, ...*/ + protected void SimulateTreeConstruction(Object t) { + dbg.CreateNode(t); + int n = adaptor.GetChildCount(t); + for (int i=0; i<n; i++) { + Object child = adaptor.GetChild(t, i); + SimulateTreeConstruction(child); + dbg.AddChild(t, child); + } + } + + public object DupNode(object treeNode) + { + Object d = adaptor.DupNode(treeNode); + dbg.CreateNode(d); + return d; + } + + public object GetNilNode() + { + object node = adaptor.GetNilNode(); + dbg.GetNilNode(node); + return node; + } + + public bool IsNil(object tree) + { + return adaptor.IsNil(tree); + } + + public void AddChild(object t, object child) + { + if ((t == null) || (child == null)) + { + return; + } + adaptor.AddChild(t, child); + dbg.AddChild(t, child); + } + + public object BecomeRoot(object newRoot, object oldRoot) + { + object n = adaptor.BecomeRoot(newRoot, oldRoot); + dbg.BecomeRoot(newRoot, oldRoot); + return n; + } + + public object RulePostProcessing(object root) + { + return adaptor.RulePostProcessing(root); + } + + public void AddChild(object t, IToken child) + { + object n = this.Create(child); + this.AddChild(t, n); + } + + public object BecomeRoot(IToken newRoot, object oldRoot) + { + object n = this.Create(newRoot); + adaptor.BecomeRoot(n, oldRoot); + dbg.BecomeRoot(newRoot, oldRoot); + return n; + } + + public object Create(int tokenType, IToken fromToken) + { + object node = adaptor.Create(tokenType, fromToken); + dbg.CreateNode(node); + return node; + } + + public object Create(int tokenType, IToken fromToken, string text) + { + object node = adaptor.Create(tokenType, fromToken, text); + dbg.CreateNode(node); + return node; + } + + public object Create(int tokenType, string text) + { + object node = adaptor.Create(tokenType, text); + dbg.CreateNode(node); + return node; + } + + public int GetNodeType(object t) + { + return adaptor.GetNodeType(t); + } + + public void SetNodeType(object t, int type) + { + adaptor.SetNodeType(t, type); + } + + public string GetNodeText(object t) + { + return adaptor.GetNodeText(t); + } + + public void SetNodeText(object t, string text) + { + adaptor.SetNodeText(t, text); + } + + public IToken GetToken(object treeNode) + { + return adaptor.GetToken(treeNode); + } + + public void SetTokenBoundaries(object t, IToken startToken, IToken stopToken) + { + adaptor.SetTokenBoundaries(t, startToken, stopToken); + if ( (t != null) && (startToken != null) && (stopToken != null) ) + { + dbg.SetTokenBoundaries(t, + startToken.TokenIndex, + stopToken.TokenIndex); + } + } + + public int GetTokenStartIndex(object t) + { + return adaptor.GetTokenStartIndex(t); + } + + public int GetTokenStopIndex(object t) + { + return adaptor.GetTokenStopIndex(t); + } + + public object GetChild(object t, int i) + { + return adaptor.GetChild(t, i); + } + + public void SetChild(object t, int i, object child) + { + adaptor.SetChild(t, i, child); + } + + public object DeleteChild(object t, int i) + { + return adaptor.DeleteChild(t, i); + } + + public int GetChildCount(object t) + { + return adaptor.GetChildCount(t); + } + + public int GetUniqueID(object node) + { + return adaptor.GetUniqueID(node); + } + + public object GetParent(object t) + { + return adaptor.GetParent(t); + } + + public int GetChildIndex(object t) + { + return adaptor.GetChildIndex(t); + } + + public void SetParent(object t, object parent) + { + adaptor.SetParent(t, parent); + } + + public void SetChildIndex(object t, int index) + { + adaptor.SetChildIndex(t, index); + } + + public void ReplaceChildren(object parent, int startChildIndex, int stopChildIndex, object t) + { + adaptor.ReplaceChildren(parent, startChildIndex, stopChildIndex, t); + } + + #region Support + + public IDebugEventListener DebugListener + { + get { return dbg; } + set { dbg = value; } + } + + public ITreeAdaptor TreeAdaptor + { + get { return adaptor; } + } + + #endregion + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugTreeNodeStream.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugTreeNodeStream.cs new file mode 100644 index 0000000..8b25f55 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugTreeNodeStream.cs @@ -0,0 +1,183 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Debug +{ + using System; + using Antlr.Runtime; + using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; + using ITreeNodeStream = Antlr.Runtime.Tree.ITreeNodeStream; + using ITokenStream = Antlr.Runtime.ITokenStream; + + + /// <summary> + /// Debug any tree node stream. The constructor accepts the stream + /// and a debug listener. As node stream calls come in, debug events + /// are triggered. + /// </summary> + public class DebugTreeNodeStream : ITreeNodeStream + { + protected IDebugEventListener dbg; + protected ITreeAdaptor adaptor; + protected ITreeNodeStream input; + protected bool initialStreamState = true; + + /// <summary>Track the last mark() call result value for use in rewind().</summary> + protected int lastMarker; + + public DebugTreeNodeStream(ITreeNodeStream input, IDebugEventListener dbg) + { + this.input = input; + this.adaptor = input.TreeAdaptor; + this.input.HasUniqueNavigationNodes = true; + SetDebugListener(dbg); + } + + public void SetDebugListener(IDebugEventListener dbg) + { + this.dbg = dbg; + } + + public ITokenStream TokenStream + { + get { return input.TokenStream; } + } + + public string SourceName { + get { return TokenStream.SourceName; } + } + + public ITreeAdaptor TreeAdaptor + { + get { return adaptor; } + } + + public void Consume() + { + object node = input.LT(1); + input.Consume(); + dbg.ConsumeNode(node); + } + + public object Get(int i) + { + return input.Get(i); + } + + public object LT(int i) + { + object node = input.LT(i); + dbg.LT(i, node); + return node; + } + + public int LA(int i) + { + object node = input.LT(i); + int type = adaptor.GetNodeType(node); + dbg.LT(i, node); + return type; + } + + public int Mark() + { + lastMarker = input.Mark(); + dbg.Mark(lastMarker); + return lastMarker; + } + + public int Index() + { + return input.Index(); + } + + public void Rewind(int marker) + { + dbg.Rewind(marker); + input.Rewind(marker); + } + + public void Rewind() + { + dbg.Rewind(); + input.Rewind(lastMarker); + } + + public void Release(int marker) + { + } + + public void Seek(int index) + { + input.Seek(index); + } + + [Obsolete("Please use property Count instead.")] + public int Size() + { + return Count; + } + + public int Count { + get { return input.Count; } + } + + public object TreeSource + { + get { return input; } + } + + /// <summary> + /// It is normally this object that instructs the node stream to + /// create unique nav nodes, but to satisfy interface, we have to + /// define it. It might be better to ignore the parameter but + /// there might be a use for it later, so I'll leave. + /// </summary> + public virtual bool HasUniqueNavigationNodes + { + set { input.HasUniqueNavigationNodes = value; } + } + + public void ReplaceChildren(object parent, int startChildIndex, int stopChildIndex, object t) + { + input.ReplaceChildren(parent, startChildIndex, stopChildIndex, t); + } + + public string ToString(object start, object stop) + { + return input.ToString(start, stop); + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugTreeParser.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugTreeParser.cs new file mode 100644 index 0000000..5650cc2 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/DebugTreeParser.cs @@ -0,0 +1,133 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Debug +{ + using System; + using System.IO; + using Antlr.Runtime; + using TreeParser = Antlr.Runtime.Tree.TreeParser; + using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; + using ITreeNodeStream = Antlr.Runtime.Tree.ITreeNodeStream; + using ErrorManager = Antlr.Runtime.Misc.ErrorManager; + + public class DebugTreeParser : TreeParser + { + /// <summary>Who to notify when events in the parser occur.</summary> + protected IDebugEventListener dbg = null; + + /// <summary> + /// Used to differentiate between fixed lookahead and cyclic DFA decisions + /// while profiling. + /// </summary> + public bool isCyclicDecision = false; + + /// <summary> + /// Create a normal parser except wrap the token stream in a debug + /// proxy that fires consume events. + /// </summary> + public DebugTreeParser(ITreeNodeStream input, IDebugEventListener dbg, RecognizerSharedState state) + : base((input is DebugTreeNodeStream ? input : new DebugTreeNodeStream(input, dbg)), state) + { + + DebugListener = dbg; + } + + public DebugTreeParser(ITreeNodeStream input, RecognizerSharedState state) + : base((input is DebugTreeNodeStream ? input : new DebugTreeNodeStream(input, null)), state) + { + } + + public DebugTreeParser(ITreeNodeStream input, IDebugEventListener dbg) + : this((input is DebugTreeNodeStream ? input : new DebugTreeNodeStream(input, dbg)), dbg, null) + { + } + + /// <summary> + /// Provide a new debug event listener for this parser. Notify the + /// input stream too that it should send events to this listener. + /// </summary> + public IDebugEventListener DebugListener + { + get { return dbg; } + set + { + if (input is DebugTreeNodeStream) + { + ((DebugTreeNodeStream)input).SetDebugListener(value); + } + this.dbg = value; + } + } + + public virtual void ReportError(IOException e) + { + ErrorManager.InternalError(e); + } + + public override void ReportError(RecognitionException e) { + dbg.RecognitionException(e); + } + + protected override object GetMissingSymbol(IIntStream input, + RecognitionException e, + int expectedTokenType, + BitSet follow) { + object o = base.GetMissingSymbol(input, e, expectedTokenType, follow); + dbg.ConsumeNode(o); + return o; + } + + override public void BeginResync() + { + dbg.BeginResync(); + } + + override public void EndResync() + { + dbg.EndResync(); + } + + override public void BeginBacktrack(int level) + { + dbg.BeginBacktrack(level); + } + + override public void EndBacktrack(int level, bool successful) + { + dbg.EndBacktrack(level, successful); + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/IDebugEventListener.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/IDebugEventListener.cs new file mode 100644 index 0000000..a68cb81 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/IDebugEventListener.cs @@ -0,0 +1,367 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Debug +{ + using System; + using Antlr.Runtime; + + /// <summary> + /// All debugging events that a recognizer can trigger. + /// </summary> + /// + /// <remarks> + /// I did not create a separate AST debugging interface as it would create + /// lots of extra classes and DebugParser has a dbg var defined, which makes + /// it hard to change to ASTDebugEventListener. I looked hard at this issue + /// and it is easier to understand as one monolithic event interface for all + /// possible events. Hopefully, adding ST debugging stuff won't be bad. Leave + /// for future. 4/26/2006. + /// </remarks> + public interface IDebugEventListener + { + /// <summary> + /// The parser has just entered a rule. No decision has been made about + /// which alt is predicted. This is fired AFTER init actions have been + /// executed. Attributes are defined and available etc... + /// The grammarFileName allows composite grammars to jump around among + /// multiple grammar files. + /// </summary> + void EnterRule(string grammarFileName, string ruleName); + + /// <summary> + /// Because rules can have lots of alternatives, it is very useful to + /// know which alt you are entering. This is 1..n for n alts. + /// </summary> + void EnterAlt(int alt); + + /// <summary> + /// This is the last thing executed before leaving a rule. It is + /// executed even if an exception is thrown. This is triggered after + /// error reporting and recovery have occurred (unless the exception is + /// not caught in this rule). This implies an "exitAlt" event. + /// The grammarFileName allows composite grammars to jump around among + /// multiple grammar files. + /// </summary> + void ExitRule(string grammarFileName, string ruleName); + + /// <summary>Track entry into any (...) subrule other EBNF construct </summary> + void EnterSubRule(int decisionNumber); + + void ExitSubRule(int decisionNumber); + + /// <summary> + /// Every decision, fixed k or arbitrary, has an enter/exit event + /// so that a GUI can easily track what LT/Consume events are + /// associated with prediction. You will see a single enter/exit + /// subrule but multiple enter/exit decision events, one for each + /// loop iteration. + /// </summary> + void EnterDecision(int decisionNumber); + + void ExitDecision(int decisionNumber); + + /// <summary> + /// An input token was consumed; matched by any kind of element. + /// Trigger after the token was matched by things like Match(), MatchAny(). + /// </summary> + void ConsumeToken(IToken t); + + /// <summary> + /// An off-channel input token was consumed. + /// Trigger after the token was matched by things like Match(), MatchAny(). + /// (unless of course the hidden token is first stuff in the input stream). + /// </summary> + void ConsumeHiddenToken(IToken t); + + /// <summary> + /// Somebody (anybody) looked ahead. Note that this actually gets + /// triggered by both LA and LT calls. The debugger will want to know + /// which Token object was examined. Like ConsumeToken, this indicates + /// what token was seen at that depth. A remote debugger cannot look + /// ahead into a file it doesn't have so LT events must pass the token + /// even if the info is redundant. + /// </summary> + void LT(int i, IToken t); + + /// <summary> + /// The parser is going to look arbitrarily ahead; mark this location, + /// the token stream's marker is sent in case you need it. + /// </summary> + void Mark(int marker); + + /// <summary> + /// After an arbitrairly long lookahead as with a cyclic DFA (or with + /// any backtrack), this informs the debugger that stream should be + /// rewound to the position associated with marker. + /// </summary> + void Rewind(int marker); + + /// <summary> + /// Rewind to the input position of the last marker. + /// Used currently only after a cyclic DFA and just + /// before starting a sem/syn predicate to get the + /// input position back to the start of the decision. + /// Do not "pop" the marker off the state. Mark(i) + /// and Rewind(i) should balance still. + /// </summary> + void Rewind(); + + void BeginBacktrack(int level); + + void EndBacktrack(int level, bool successful); + + /// <summary> + /// To watch a parser move through the grammar, the parser needs to + /// inform the debugger what line/charPos it is passing in the grammar. + /// For now, this does not know how to switch from one grammar to the + /// other and back for island grammars etc... + /// + /// This should also allow breakpoints because the debugger can stop + /// the parser whenever it hits this line/pos. + /// </summary> + void Location(int line, int pos); + + /// <summary> + /// A recognition exception occurred such as NoViableAltException. I made + /// this a generic event so that I can alter the exception hierachy later + /// without having to alter all the debug objects. + /// + /// Upon error, the stack of enter rule/subrule must be properly unwound. + /// If no viable alt occurs it is within an enter/exit decision, which + /// also must be rewound. Even the rewind for each mark must be unwount. + /// In the C# target this is pretty easy using try/finally, if a bit + /// ugly in the generated code. The rewind is generated in DFA.Predict() + /// actually so no code needs to be generated for that. For languages + /// w/o this "finally" feature (C++?), the target implementor will have + /// to build an event stack or something. + /// + /// Across a socket for remote debugging, only the RecognitionException + /// data fields are transmitted. The token object or whatever that + /// caused the problem was the last object referenced by LT. The + /// immediately preceding LT event should hold the unexpected Token or + /// char. + /// + /// Here is a sample event trace for grammar: + /// + /// b : C ({;}A|B) // {;} is there to prevent A|B becoming a set + /// | D + /// ; + /// + /// The sequence for this rule (with no viable alt in the subrule) for + /// input 'c c' (there are 3 tokens) is: + /// + /// Commence + /// LT(1) + /// EnterRule b + /// Location 7 1 + /// enter decision 3 + /// LT(1) + /// exit decision 3 + /// enterAlt1 + /// Location 7 5 + /// LT(1) + /// ConsumeToken <![CDATA[[c/<4>,1:0]]]> + /// Location 7 7 + /// EnterSubRule 2 + /// enter decision 2 + /// LT(1) + /// LT(1) + /// RecognitionException NoViableAltException 2 1 2 + /// exit decision 2 + /// ExitSubRule 2 + /// BeginResync + /// LT(1) + /// ConsumeToken <![CDATA[[c/<4>,1:1]]]> + /// LT(1) + /// EndResync + /// LT(-1) + /// ExitRule b + /// Terminate + /// </summary> + void RecognitionException(RecognitionException e); + + /// <summary> + /// Indicates the recognizer is about to consume tokens to resynchronize + /// the parser. Any Consume events from here until the recovered event + /// are not part of the parse--they are dead tokens. + /// </summary> + void BeginResync(); + + /// <summary> + /// Indicates that the recognizer has finished consuming tokens in order + /// to resychronize. There may be multiple BeginResync/EndResync pairs + /// before the recognizer comes out of errorRecovery mode (in which + /// multiple errors are suppressed). This will be useful + /// in a gui where you want to probably grey out tokens that are consumed + /// but not matched to anything in grammar. Anything between + /// a BeginResync/EndResync pair was tossed out by the parser. + /// </summary> + void EndResync(); + + /// <summary> + /// A semantic predicate was evaluate with this result and action text + /// </summary> + void SemanticPredicate(bool result, string predicate); + + /// <summary> + /// Announce that parsing has begun. Not technically useful except for + /// sending events over a socket. A GUI for example will launch a thread + /// to connect and communicate with a remote parser. The thread will want + /// to notify the GUI when a connection is made. ANTLR parsers + /// trigger this upon entry to the first rule (the ruleLevel is used to + /// figure this out). + /// </summary> + void Commence(); + + /// <summary> + /// Parsing is over; successfully or not. Mostly useful for telling + /// remote debugging listeners that it's time to quit. When the rule + /// invocation level goes to zero at the end of a rule, we are done + /// parsing. + /// </summary> + void Terminate(); + + + #region T r e e P a r s i n g + + /// <summary> + /// Input for a tree parser is an AST, but we know nothing for sure + /// about a node except its type and text (obtained from the adaptor). + /// This is the analog of the ConsumeToken method. Again, the ID is + /// the hashCode usually of the node so it only works if hashCode is + /// not implemented. If the type is UP or DOWN, then + /// the ID is not really meaningful as it's fixed--there is + /// just one UP node and one DOWN navigation node. + /// </summary> + void ConsumeNode(object t); + + /// <summary> + /// The tree parser lookedahead. If the type is UP or DOWN, + /// then the ID is not really meaningful as it's fixed--there is + /// just one UP node and one DOWN navigation node. + /// </summary> + void LT(int i, object t); + + #endregion + + + #region A S T E v e n t s + + /// <summary> + /// Announce the creation of a nil node + /// </summary> + /// <remarks> + /// A nil was created (even nil nodes have a unique ID... + /// they are not "null" per se). As of 4/28/2006, this + /// seems to be uniquely triggered when starting a new subtree + /// such as when entering a subrule in automatic mode and when + /// building a tree in rewrite mode. + /// + /// If you are receiving this event over a socket via + /// RemoteDebugEventSocketListener then only t.ID is set. + /// </remarks> + void GetNilNode(object t); + + /// <summary> + /// Upon syntax error, recognizers bracket the error with an error node + /// if they are building ASTs. + /// </summary> + /// <param name="t">The object</param> + void ErrorNode(object t); + + /// <summary> + /// Announce a new node built from token elements such as type etc... + /// </summary> + /// <remarks> + /// If you are receiving this event over a socket via + /// RemoteDebugEventSocketListener then only t.ID, type, + /// text are set. + /// </remarks> + void CreateNode(object t); + + /// <summary> + /// Announce a new node built from an existing token. + /// </summary> + /// <remarks> + /// If you are receiving this event over a socket via + /// RemoteDebugEventSocketListener then only node.ID + /// and token.tokenIndex are set. + /// </remarks> + void CreateNode(object node, IToken token); + + /// <summary> + /// Make a node the new root of an existing root. + /// </summary> + /// + /// <remarks> + /// Note: the newRootID parameter is possibly different + /// than the TreeAdaptor.BecomeRoot() newRoot parameter. + /// In our case, it will always be the result of calling + /// TreeAdaptor.BecomeRoot() and not root_n or whatever. + /// + /// The listener should assume that this event occurs + /// only when the current subrule (or rule) subtree is + /// being reset to newRootID. + /// + /// <see cref="Antlr.Runtime.Tree.ITreeAdaptor.BecomeRoot(object, object)"/> + /// + /// If you are receiving this event over a socket via + /// RemoteDebugEventSocketListener then only IDs are set. + /// </remarks> + void BecomeRoot(object newRoot, object oldRoot); + + /// <summary> + /// Make childID a child of rootID. + /// </summary> + /// <remarks> + /// If you are receiving this event over a socket via + /// RemoteDebugEventSocketListener then only IDs are set. + /// </remarks> + /// <see cref="Antlr.Runtime.Tree.ITreeAdaptor.AddChild(object,object)"/> + void AddChild(object root, object child); + + /// <summary> + /// Set the token start/stop token index for a subtree root or node + /// </summary> + /// <remarks> + /// If you are receiving this event over a socket via + /// RemoteDebugEventSocketListener then only IDs are set. + /// </remarks> + void SetTokenBoundaries(object t, int tokenStartIndex, int tokenStopIndex); + + #endregion + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/ParseTreeBuilder.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/ParseTreeBuilder.cs new file mode 100644 index 0000000..4f40d50 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/ParseTreeBuilder.cs @@ -0,0 +1,126 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Debug +{ + using System; + using System.Collections; + using Stack = System.Collections.Stack; + using IToken = Antlr.Runtime.IToken; + using RecognitionException = Antlr.Runtime.RecognitionException; + using ParseTree = Antlr.Runtime.Tree.ParseTree; + + + /// <summary> + /// This parser listener tracks rule entry/exit and token matches + /// to build a simple parse tree using ParseTree nodes. + /// </summary> + public class ParseTreeBuilder : BlankDebugEventListener + { + public static readonly String EPSILON_PAYLOAD = "<epsilon>"; + + Stack callStack = new Stack(); + IList hiddenTokens = new ArrayList(); + int backtracking = 0; + + public ParseTreeBuilder(string grammarName) + { + ParseTree root = Create("<grammar " + grammarName + ">"); + callStack.Push(root); + } + + public ParseTree Tree { + get { return (ParseTree)callStack.Peek(); } + } + + /// <summary> + /// What kind of node to create. You might want to override + /// so I factored out creation here. + /// </summary> + public ParseTree Create(object payload) + { + return new ParseTree(payload); + } + + public ParseTree EpsilonNode() { + return Create(EPSILON_PAYLOAD); + } + + /** Backtracking or cyclic DFA, don't want to add nodes to tree */ + override public void EnterDecision(int d) { backtracking++; } + override public void ExitDecision(int i) { backtracking--; } + + override public void EnterRule(string filename, string ruleName) { + if ( backtracking>0 ) return; + ParseTree parentRuleNode = (ParseTree)callStack.Peek(); + ParseTree ruleNode = Create(ruleName); + parentRuleNode.AddChild(ruleNode); + callStack.Push(ruleNode); + } + + override public void ExitRule(string filename, string ruleName) + { + if ( backtracking>0 ) return; + ParseTree ruleNode = (ParseTree)callStack.Peek(); + if ( ruleNode.ChildCount==0 ) { + ruleNode.AddChild(EpsilonNode()); + } + callStack.Pop(); + } + + override public void ConsumeToken(IToken token) + { + if ( backtracking>0 ) return; + ParseTree ruleNode = (ParseTree)callStack.Peek(); + ParseTree elementNode = Create(token); + elementNode.hiddenTokens = this.hiddenTokens; + this.hiddenTokens = new ArrayList(); + ruleNode.AddChild(elementNode); + } + + override public void ConsumeHiddenToken(IToken token) { + if ( backtracking>0 ) return; + hiddenTokens.Add(token); + } + + override public void RecognitionException(RecognitionException e) + { + if ( backtracking>0 ) return; + ParseTree ruleNode = (ParseTree)callStack.Peek(); + ParseTree errorNode = Create(e); + ruleNode.AddChild(errorNode); + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/Profiler.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/Profiler.cs new file mode 100644 index 0000000..962c511 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/Profiler.cs @@ -0,0 +1,522 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Debug +{ + using System; + using IList = System.Collections.IList; + using ArrayList = System.Collections.ArrayList; + using StringBuilder = System.Text.StringBuilder; + using IOException = System.IO.IOException; + using IToken = Antlr.Runtime.IToken; + using Token = Antlr.Runtime.Token; + using CommonToken = Antlr.Runtime.CommonToken; + using IIntStream = Antlr.Runtime.IIntStream; + using ITokenStream = Antlr.Runtime.ITokenStream; + using BaseRecognizer = Antlr.Runtime.BaseRecognizer; + using RecognitionException = Antlr.Runtime.RecognitionException; + using Stats = Antlr.Runtime.Misc.Stats; + + /// <summary> + /// Using the debug event interface, track what is happening in the parser + /// and record statistics about the runtime. + /// </summary> + public class Profiler : BlankDebugEventListener + { + /// <summary> + /// Because I may change the stats, I need to track that for later + /// computations to be consistent. + /// </summary> + public const string Version = "2"; + public const string RUNTIME_STATS_FILENAME = "runtime.stats"; + public const int NUM_RUNTIME_STATS = 29; + + public DebugParser parser = null; + + // working variables + + protected internal int ruleLevel = 0; + protected internal int decisionLevel = 0; + protected internal int maxLookaheadInCurrentDecision = 0; + protected internal CommonToken lastTokenConsumed = null; + + protected IList lookaheadStack = new ArrayList(); + + // stats variables + + public int numRuleInvocations = 0; + public int numGuessingRuleInvocations = 0; + public int maxRuleInvocationDepth = 0; + public int numFixedDecisions = 0; + public int numCyclicDecisions = 0; + public int numBacktrackDecisions = 0; + public int[] decisionMaxFixedLookaheads = new int[200]; // TODO: make List + public int[] decisionMaxCyclicLookaheads = new int[200]; + public IList decisionMaxSynPredLookaheads = new ArrayList(); + public int numHiddenTokens = 0; + public int numCharsMatched = 0; + public int numHiddenCharsMatched = 0; + public int numSemanticPredicates = 0; + public int numSyntacticPredicates = 0; + protected int numberReportedErrors = 0; + public int numMemoizationCacheMisses = 0; + public int numMemoizationCacheHits = 0; + public int numMemoizationCacheEntries = 0; + + public Profiler() + { + } + + public Profiler(DebugParser parser) + { + this.parser = parser; + } + + public override void EnterRule(string grammarFileName, string ruleName) + { + ruleLevel++; + numRuleInvocations++; + if (ruleLevel > maxRuleInvocationDepth) + { + maxRuleInvocationDepth = ruleLevel; + } + } + + /// <summary>Track memoization</summary> + /// <remarks> + /// This is not part of standard debug interface but is triggered by + /// profiling. Code gen inserts an override for this method in the + /// recognizer, which triggers this method. + /// </remarks> + public void ExamineRuleMemoization(IIntStream input, int ruleIndex, string ruleName) + { + int stopIndex = parser.GetRuleMemoization(ruleIndex, input.Index()); + if (stopIndex == BaseRecognizer.MEMO_RULE_UNKNOWN) + { + numMemoizationCacheMisses++; + numGuessingRuleInvocations++; // we'll have to enter + } + else + { + // regardless of rule success/failure, if in cache, we have a cache hit + numMemoizationCacheHits++; + } + } + + public void Memoize(IIntStream input, int ruleIndex, int ruleStartIndex, string ruleName) + { + // count how many entries go into table + numMemoizationCacheEntries++; + } + + public override void ExitRule(string grammarFileName, string ruleName) + { + ruleLevel--; + } + + public override void EnterDecision(int decisionNumber) + { + decisionLevel++; + int startingLookaheadIndex = parser.TokenStream.Index(); + lookaheadStack.Add(startingLookaheadIndex); + } + + public override void ExitDecision(int decisionNumber) + { + // track how many of acyclic, cyclic here as we don't know what kind + // yet in enterDecision event. + if (parser.isCyclicDecision) + { + numCyclicDecisions++; + } + else + { + numFixedDecisions++; + } + lookaheadStack.Remove(lookaheadStack.Count - 1); // pop lookahead depth counter + decisionLevel--; + if (parser.isCyclicDecision) + { + if (numCyclicDecisions >= decisionMaxCyclicLookaheads.Length) + { + int[] bigger = new int[decisionMaxCyclicLookaheads.Length * 2]; + Array.Copy(decisionMaxCyclicLookaheads, 0, bigger, 0, decisionMaxCyclicLookaheads.Length); + decisionMaxCyclicLookaheads = bigger; + } + decisionMaxCyclicLookaheads[numCyclicDecisions - 1] = maxLookaheadInCurrentDecision; + } + else + { + if (numFixedDecisions >= decisionMaxFixedLookaheads.Length) + { + int[] bigger = new int[decisionMaxFixedLookaheads.Length * 2]; + Array.Copy(decisionMaxFixedLookaheads, 0, bigger, 0, decisionMaxFixedLookaheads.Length); + decisionMaxFixedLookaheads = bigger; + } + decisionMaxFixedLookaheads[numFixedDecisions - 1] = maxLookaheadInCurrentDecision; + } + parser.isCyclicDecision = false; // can't nest so just reset to false + maxLookaheadInCurrentDecision = 0; + } + + public override void ConsumeToken(IToken token) + { + lastTokenConsumed = (CommonToken)token; + } + + /// <summary> + /// The parser is in a decision if the decision depth > 0. This works + /// for backtracking also, which can have nested decisions. + /// </summary> + public bool InDecision() + { + return decisionLevel > 0; + } + + public override void ConsumeHiddenToken(IToken token) + { + lastTokenConsumed = (CommonToken)token; + } + + /// <summary> + /// Track refs to lookahead if in a fixed/nonfixed decision. + /// </summary> + public override void LT(int i, IToken t) + { + if (InDecision()) + { + // get starting index off stack + int stackTop = lookaheadStack.Count - 1; + int startingIndex = (int)lookaheadStack[stackTop]; + // compute lookahead depth + int thisRefIndex = parser.TokenStream.Index(); + int numHidden = GetNumberOfHiddenTokens(startingIndex, thisRefIndex); + int depth = i + thisRefIndex - startingIndex - numHidden; + + if (depth > maxLookaheadInCurrentDecision) + { + maxLookaheadInCurrentDecision = depth; + } + } + } + + /// <summary> + /// Track backtracking decisions. You'll see a fixed or cyclic decision + /// and then a backtrack. + /// </summary> + /// <remarks> + /// enter rule + /// ... + /// enter decision + /// LA and possibly consumes (for cyclic DFAs) + /// begin backtrack level + /// mark m + /// rewind m + /// end backtrack level, success + /// exit decision + /// ... + /// exit rule + /// </remarks> + public override void BeginBacktrack(int level) + { + numBacktrackDecisions++; + } + + /// <summary>Successful or not, track how much lookahead synpreds use</summary> + public override void EndBacktrack(int level, bool successful) + { + decisionMaxSynPredLookaheads.Add(maxLookaheadInCurrentDecision); + } + + public override void RecognitionException(RecognitionException e) + { + numberReportedErrors++; + } + + public override void SemanticPredicate(bool result, string predicate) + { + if (InDecision()) + { + numSemanticPredicates++; + } + } + + public override void Terminate() + { + string stats = ToNotifyString(); + try + { + Stats.WriteReport(RUNTIME_STATS_FILENAME, stats); + } + catch (IOException ex) + { + Console.Error.WriteLine(ex); + Console.Error.WriteLine(ex.StackTrace); + } + Console.Out.WriteLine(Profiler.ToString(stats)); + } + + virtual public DebugParser Parser + { + set { this.parser = value; } + } + + // R E P O R T I N G + + + public virtual string ToNotifyString() + { + ITokenStream input = parser.TokenStream; + for (int i = 0; (i < input.Count) && (lastTokenConsumed != null) && (i <= lastTokenConsumed.TokenIndex); i++) + { + IToken t = input.Get(i); + if (t.Channel != Token.DEFAULT_CHANNEL) + { + numHiddenTokens++; + numHiddenCharsMatched += t.Text.Length; + } + } + numCharsMatched = lastTokenConsumed.StopIndex + 1; + decisionMaxFixedLookaheads = Trim(decisionMaxFixedLookaheads, numFixedDecisions); + decisionMaxCyclicLookaheads = Trim(decisionMaxCyclicLookaheads, numCyclicDecisions); + StringBuilder buf = new StringBuilder(); + buf.Append(Version); + buf.Append('\t'); + buf.Append(parser.GetType().FullName); + buf.Append('\t'); + buf.Append(numRuleInvocations); + buf.Append('\t'); + buf.Append(maxRuleInvocationDepth); + buf.Append('\t'); + buf.Append(numFixedDecisions); + buf.Append('\t'); + buf.Append(Stats.Min(decisionMaxFixedLookaheads)); + buf.Append('\t'); + buf.Append(Stats.Max(decisionMaxFixedLookaheads)); + buf.Append('\t'); + buf.Append(Stats.Avg(decisionMaxFixedLookaheads)); + buf.Append('\t'); + buf.Append(Stats.Stddev(decisionMaxFixedLookaheads)); + buf.Append('\t'); + buf.Append(numCyclicDecisions); + buf.Append('\t'); + buf.Append(Stats.Min(decisionMaxCyclicLookaheads)); + buf.Append('\t'); + buf.Append(Stats.Max(decisionMaxCyclicLookaheads)); + buf.Append('\t'); + buf.Append(Stats.Avg(decisionMaxCyclicLookaheads)); + buf.Append('\t'); + buf.Append(Stats.Stddev(decisionMaxCyclicLookaheads)); + buf.Append('\t'); + buf.Append(numBacktrackDecisions); + buf.Append('\t'); + buf.Append(Stats.Min(ToArray(decisionMaxSynPredLookaheads))); + buf.Append('\t'); + buf.Append(Stats.Max(ToArray(decisionMaxSynPredLookaheads))); + buf.Append('\t'); + buf.Append(Stats.Avg(ToArray(decisionMaxSynPredLookaheads))); + buf.Append('\t'); + buf.Append(Stats.Stddev(ToArray(decisionMaxSynPredLookaheads))); + buf.Append('\t'); + buf.Append(numSemanticPredicates); + buf.Append('\t'); + buf.Append(parser.TokenStream.Count); + buf.Append('\t'); + buf.Append(numHiddenTokens); + buf.Append('\t'); + buf.Append(numCharsMatched); + buf.Append('\t'); + buf.Append(numHiddenCharsMatched); + buf.Append('\t'); + buf.Append(numberReportedErrors); + buf.Append('\t'); + buf.Append(numMemoizationCacheHits); + buf.Append('\t'); + buf.Append(numMemoizationCacheMisses); + buf.Append('\t'); + buf.Append(numGuessingRuleInvocations); + buf.Append('\t'); + buf.Append(numMemoizationCacheEntries); + return buf.ToString(); + } + + public override string ToString() + { + return Profiler.ToString(ToNotifyString()); + } + + protected static string[] DecodeReportData(string data) + { + string[] fields = data.Split(new char[] { '\t' }); + if (fields.Length != NUM_RUNTIME_STATS) + { + return null; + } + return fields; + } + + public static string ToString(string notifyDataLine) + { + string[] fields = DecodeReportData(notifyDataLine); + if (fields == null) + { + return null; + } + StringBuilder buf = new StringBuilder(); + buf.Append("ANTLR Runtime Report; Profile Version "); + buf.Append(fields[0]); + buf.Append('\n'); + buf.Append("parser name "); + buf.Append(fields[1]); + buf.Append('\n'); + buf.Append("Number of rule invocations "); + buf.Append(fields[2]); + buf.Append('\n'); + buf.Append("Number of rule invocations in \"guessing\" mode "); + buf.Append(fields[27]); + buf.Append('\n'); + buf.Append("max rule invocation nesting depth "); + buf.Append(fields[3]); + buf.Append('\n'); + buf.Append("number of fixed lookahead decisions "); + buf.Append(fields[4]); + buf.Append('\n'); + buf.Append("min lookahead used in a fixed lookahead decision "); + buf.Append(fields[5]); + buf.Append('\n'); + buf.Append("max lookahead used in a fixed lookahead decision "); + buf.Append(fields[6]); + buf.Append('\n'); + buf.Append("average lookahead depth used in fixed lookahead decisions "); + buf.Append(fields[7]); + buf.Append('\n'); + buf.Append("standard deviation of depth used in fixed lookahead decisions "); + buf.Append(fields[8]); + buf.Append('\n'); + buf.Append("number of arbitrary lookahead decisions "); + buf.Append(fields[9]); + buf.Append('\n'); + buf.Append("min lookahead used in an arbitrary lookahead decision "); + buf.Append(fields[10]); + buf.Append('\n'); + buf.Append("max lookahead used in an arbitrary lookahead decision "); + buf.Append(fields[11]); + buf.Append('\n'); + buf.Append("average lookahead depth used in arbitrary lookahead decisions "); + buf.Append(fields[12]); + buf.Append('\n'); + buf.Append("standard deviation of depth used in arbitrary lookahead decisions "); + buf.Append(fields[13]); + buf.Append('\n'); + buf.Append("number of evaluated syntactic predicates "); + buf.Append(fields[14]); + buf.Append('\n'); + buf.Append("min lookahead used in a syntactic predicate "); + buf.Append(fields[15]); + buf.Append('\n'); + buf.Append("max lookahead used in a syntactic predicate "); + buf.Append(fields[16]); + buf.Append('\n'); + buf.Append("average lookahead depth used in syntactic predicates "); + buf.Append(fields[17]); + buf.Append('\n'); + buf.Append("standard deviation of depth used in syntactic predicates "); + buf.Append(fields[18]); + buf.Append('\n'); + buf.Append("rule memoization cache size "); + buf.Append(fields[28]); + buf.Append('\n'); + buf.Append("number of rule memoization cache hits "); + buf.Append(fields[25]); + buf.Append('\n'); + buf.Append("number of rule memoization cache misses "); + buf.Append(fields[26]); + buf.Append('\n'); + buf.Append("number of evaluated semantic predicates "); + buf.Append(fields[19]); + buf.Append('\n'); + buf.Append("number of tokens "); + buf.Append(fields[20]); + buf.Append('\n'); + buf.Append("number of hidden tokens "); + buf.Append(fields[21]); + buf.Append('\n'); + buf.Append("number of char "); + buf.Append(fields[22]); + buf.Append('\n'); + buf.Append("number of hidden char "); + buf.Append(fields[23]); + buf.Append('\n'); + buf.Append("number of syntax errors "); + buf.Append(fields[24]); + buf.Append('\n'); + return buf.ToString(); + } + + protected int[] Trim(int[] X, int n) + { + if (n < X.Length) + { + int[] trimmed = new int[n]; + Array.Copy(X, 0, trimmed, 0, n); + X = trimmed; + } + return X; + } + + protected int[] ToArray(IList a) + { + int[] x = new int[a.Count]; + a.CopyTo(x, 0); + return x; + } + + /// <summary>Get num hidden tokens between i..j inclusive</summary> + public int GetNumberOfHiddenTokens(int i, int j) + { + int n = 0; + ITokenStream input = parser.TokenStream; + for (int ti = i; ti < input.Count && ti <= j; ti++) + { + IToken t = input.Get(ti); + if (t.Channel != Token.DEFAULT_CHANNEL) + { + n++; + } + } + return n; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/RemoteDebugEventSocketListener.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/RemoteDebugEventSocketListener.cs new file mode 100644 index 0000000..bbae960 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/RemoteDebugEventSocketListener.cs @@ -0,0 +1,633 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Debug +{ + using System; + using System.Globalization; + using System.Threading; + using StreamReader = System.IO.StreamReader; + using StreamWriter = System.IO.StreamWriter; + using IOException = System.IO.IOException; + using Encoding = System.Text.Encoding; + using StringBuilder = System.Text.StringBuilder; + using TcpClient = System.Net.Sockets.TcpClient; + using TcpListener = System.Net.Sockets.TcpListener; + using Antlr.Runtime; + using ITree = Antlr.Runtime.Tree.ITree; + using BaseTree = Antlr.Runtime.Tree.BaseTree; + + + public class RemoteDebugEventSocketListener + { + internal const int MAX_EVENT_ELEMENTS = 8; + internal IDebugEventListener listener; + internal string hostName; + internal int port; + internal TcpClient channel = null; + internal StreamWriter writer; + internal StreamReader reader; + internal string eventLabel; + /// <summary>Version of ANTLR (dictates events)</summary> + public string version; + public string grammarFileName; + /// <summary> + /// Track the last token index we saw during a consume. If same, then + /// set a flag that we have a problem. + /// </summary> + int previousTokenIndex = -1; + bool tokenIndexesInvalid = false; + + #region ProxyToken Class + + public class ProxyToken : IToken + { + internal int index; + internal int type; + internal int channel; + internal int line; + internal int charPos; + internal string text; + + public ProxyToken(int index) + { + this.index = index; + } + + public ProxyToken(int index, int type, int channel, int line, int charPos, string text) + { + this.index = index; + this.type = type; + this.channel = channel; + this.line = line; + this.charPos = charPos; + this.text = text; + } + + public int Type + { + get { return this.type; } + set { this.type = value; } + } + + public int Line + { + get { return this.line; } + set { this.line = value; } + } + + public int CharPositionInLine + { + get { return this.charPos; } + set { this.charPos = value; } + } + + public int Channel + { + get { return this.channel; } + set { this.channel = value; } + } + + public int TokenIndex + { + get { return this.index; } + set { this.index = value; } + } + + public string Text + { + get { return this.text; } + set { this.text = value; } + } + + public ICharStream InputStream + { + get { return null; } + set { ; } + } + + public override string ToString() + { + string channelStr = ""; + if (channel != Token.DEFAULT_CHANNEL) + { + channelStr = ",channel=" + channel; + } + return "[" + Text + "/<" + type + ">" + channelStr + "," + line + ":" + CharPositionInLine + ",@" + index + "]"; + } + } + + #endregion + + #region ProxyTree Class + + public class ProxyTree : BaseTree + { + public int ID; + public int type; + public int line = 0; + public int charPos = -1; + public int tokenIndex = -1; + public string text; + + public ProxyTree(int ID) + { + this.ID = ID; + } + + public ProxyTree(int ID, int type, int line, int charPos, int tokenIndex, string text) + { + this.ID = ID; + this.type = type; + this.line = line; + this.charPos = charPos; + this.tokenIndex = tokenIndex; + this.text = text; + } + + override public int TokenStartIndex + { + get { return tokenIndex; } + set { ; } + } + override public int TokenStopIndex + { + get { return 0; } + set { ; } + } + override public ITree DupNode() + { + return null; + } + override public int Type + { + get { return type; } + } + override public string Text + { + get { return text; } + } + + override public string ToString() + { + return "fix this"; + } + } + + #endregion + + public RemoteDebugEventSocketListener(IDebugEventListener listener, string hostName, int port) + { + this.listener = listener; + this.hostName = hostName; + this.port = port; + + if (!OpenConnection()) + { + throw new System.Exception(); + } + } + + protected virtual void EventHandler() + { + try + { + Handshake(); + eventLabel = reader.ReadLine(); + while (eventLabel != null) + { + Dispatch(eventLabel); + Ack(); + eventLabel = reader.ReadLine(); + } + } + catch (System.Exception e) + { + Console.Error.WriteLine(e); + Console.Error.WriteLine(e.StackTrace); + } + finally + { + CloseConnection(); + } + } + + protected virtual bool OpenConnection() + { + bool success = false; + try + { + channel = new TcpClient(hostName, port); + channel.NoDelay = true; + writer = new StreamWriter(channel.GetStream(), Encoding.UTF8); + reader = new StreamReader(channel.GetStream(), Encoding.UTF8); + success = true; + } + catch (Exception e) + { + Console.Error.WriteLine(e); + } + return success; + } + + protected virtual void CloseConnection() + { + try + { + reader.Close(); reader = null; + writer.Close(); + writer = null; + channel.Close(); + channel = null; + } + catch (System.Exception e) + { + Console.Error.WriteLine(e); + Console.Error.WriteLine(e.StackTrace); + } + finally + { + if (reader != null) + { + try + { + reader.Close(); + } + catch (IOException ioe) + { + Console.Error.WriteLine(ioe); + } + } + if (writer != null) + { + writer.Close(); + } + if (channel != null) + { + try + { + channel.Close(); + } + catch (IOException ioe) + { + Console.Error.WriteLine(ioe); + } + } + } + } + + protected virtual void Handshake() + { + string antlrLine = reader.ReadLine(); + string[] antlrElements = GetEventElements(antlrLine); + version = antlrElements[1]; + string grammarLine = reader.ReadLine(); + string[] grammarElements = GetEventElements(grammarLine); + grammarFileName = grammarElements[1]; + Ack(); + listener.Commence(); // inform listener after handshake + } + + protected virtual void Ack() + { + writer.WriteLine("ack"); + writer.Flush(); + } + + protected virtual void Dispatch(string line) + { + string[] elements = GetEventElements(line); + if (elements == null || elements[0] == null) + { + Console.Error.WriteLine("unknown debug event: " + line); + return ; + } + if (elements[0].Equals("enterRule")) + { + listener.EnterRule(elements[1], elements[2]); + } + else if (elements[0].Equals("exitRule")) + { + listener.ExitRule(elements[1], elements[2]); + } + else if (elements[0].Equals("enterAlt")) + { + listener.EnterAlt(int.Parse(elements[1], CultureInfo.InvariantCulture)); + } + else if (elements[0].Equals("enterSubRule")) + { + listener.EnterSubRule(int.Parse(elements[1], CultureInfo.InvariantCulture)); + } + else if (elements[0].Equals("exitSubRule")) + { + listener.ExitSubRule(int.Parse(elements[1], CultureInfo.InvariantCulture)); + } + else if (elements[0].Equals("enterDecision")) + { + listener.EnterDecision(int.Parse(elements[1], CultureInfo.InvariantCulture)); + } + else if (elements[0].Equals("exitDecision")) + { + listener.ExitDecision(int.Parse(elements[1], CultureInfo.InvariantCulture)); + } + else if (elements[0].Equals("location")) + { + listener.Location(int.Parse(elements[1], CultureInfo.InvariantCulture), + int.Parse(elements[2], CultureInfo.InvariantCulture)); + } + else if (elements[0].Equals("consumeToken")) + { + ProxyToken t = DeserializeToken(elements, 1); + if (t.TokenIndex == previousTokenIndex) + { + tokenIndexesInvalid = true; + } + previousTokenIndex = t.TokenIndex; + listener.ConsumeToken(t); + } + else if (elements[0].Equals("consumeHiddenToken")) + { + ProxyToken t = DeserializeToken(elements, 1); + if (t.TokenIndex == previousTokenIndex) + { + tokenIndexesInvalid = true; + } + previousTokenIndex = t.TokenIndex; + listener.ConsumeHiddenToken(t); + } + else if (elements[0].Equals("LT")) + { + IToken t = DeserializeToken(elements, 2); + listener.LT(int.Parse(elements[1], CultureInfo.InvariantCulture), t); + } + else if (elements[0].Equals("mark")) + { + listener.Mark(int.Parse(elements[1], CultureInfo.InvariantCulture)); + } + else if (elements[0].Equals("rewind")) + { + if (elements[1] != null) + { + listener.Rewind(int.Parse(elements[1], CultureInfo.InvariantCulture)); + } + else + { + listener.Rewind(); + } + } + else if (elements[0].Equals("beginBacktrack")) + { + listener.BeginBacktrack(int.Parse(elements[1], CultureInfo.InvariantCulture)); + } + else if (elements[0].Equals("endBacktrack")) + { + int level = int.Parse(elements[1], CultureInfo.InvariantCulture); + int successI = int.Parse(elements[2], CultureInfo.InvariantCulture); + //listener.EndBacktrack(level, successI == (int)true); + listener.EndBacktrack(level, successI == 1 /*1=TRUE*/); + } + else if (elements[0].Equals("exception")) + { + string excName = elements[1]; + string indexS = elements[2]; + string lineS = elements[3]; + string posS = elements[4]; + Type excClass = null; + try + { + excClass = System.Type.GetType(excName); + RecognitionException e = (RecognitionException) System.Activator.CreateInstance(excClass); + e.Index = int.Parse(indexS, CultureInfo.InvariantCulture); + e.Line = int.Parse(lineS, CultureInfo.InvariantCulture); + e.CharPositionInLine = int.Parse(posS, CultureInfo.InvariantCulture); + listener.RecognitionException(e); + } + catch (System.UnauthorizedAccessException iae) + { + Console.Error.WriteLine("can't access class " + iae); + Console.Error.WriteLine(iae.StackTrace); + } + } + else if (elements[0].Equals("beginResync")) + { + listener.BeginResync(); + } + else if (elements[0].Equals("endResync")) + { + listener.EndResync(); + } + else if (elements[0].Equals("terminate")) + { + listener.Terminate(); + } + else if (elements[0].Equals("semanticPredicate")) + { + bool result = bool.Parse(elements[1]); + string predicateText = elements[2]; + predicateText = UnEscapeNewlines(predicateText); + listener.SemanticPredicate(result, predicateText); + } + else if (elements[0].Equals("consumeNode")) + { + ProxyTree node = DeserializeNode(elements, 1); + listener.ConsumeNode(node); + } + else if (elements[0].Equals("LN")) + { + int i = int.Parse(elements[1], CultureInfo.InvariantCulture); + ProxyTree node = DeserializeNode(elements, 2); + listener.LT(i, node); + } + else if (elements[0].Equals("createNodeFromTokenElements")) + { + int ID = int.Parse(elements[1], CultureInfo.InvariantCulture); + int type = int.Parse(elements[2], CultureInfo.InvariantCulture); + string text = elements[3]; + text = UnEscapeNewlines(text); + ProxyTree node = new ProxyTree(ID, type, -1, -1, -1, text); + listener.CreateNode(node); + } + else if (elements[0].Equals("createNode")) + { + int ID = int.Parse(elements[1], CultureInfo.InvariantCulture); + int tokenIndex = int.Parse(elements[2], CultureInfo.InvariantCulture); + // create dummy node/token filled with ID, tokenIndex + ProxyTree node = new ProxyTree(ID); + ProxyToken token = new ProxyToken(tokenIndex); + listener.CreateNode(node, token); + } + else if (elements[0].Equals("nilNode")) + { + int ID = int.Parse(elements[1], CultureInfo.InvariantCulture); + ProxyTree node = new ProxyTree(ID); + listener.GetNilNode(node); + } + else if ( elements[0].Equals("errorNode") ) { + // TODO: do we need a special tree here? + int ID = int.Parse(elements[1], CultureInfo.InvariantCulture); + int type = int.Parse(elements[2], CultureInfo.InvariantCulture); + String text = elements[3]; + text = UnEscapeNewlines(text); + ProxyTree node = new ProxyTree(ID, type, -1, -1, -1, text); + listener.ErrorNode(node); + } + else if (elements[0].Equals("becomeRoot")) + { + int newRootID = int.Parse(elements[1], CultureInfo.InvariantCulture); + int oldRootID = int.Parse(elements[2], CultureInfo.InvariantCulture); + ProxyTree newRoot = new ProxyTree(newRootID); + ProxyTree oldRoot = new ProxyTree(oldRootID); + listener.BecomeRoot(newRoot, oldRoot); + } + else if (elements[0].Equals("addChild")) + { + int rootID = int.Parse(elements[1], CultureInfo.InvariantCulture); + int childID = int.Parse(elements[2], CultureInfo.InvariantCulture); + ProxyTree root = new ProxyTree(rootID); + ProxyTree child = new ProxyTree(childID); + listener.AddChild(root, child); + } + else if (elements[0].Equals("setTokenBoundaries")) + { + int ID = int.Parse(elements[1], CultureInfo.InvariantCulture); + ProxyTree node = new ProxyTree(ID); + listener.SetTokenBoundaries(node, + int.Parse(elements[2], CultureInfo.InvariantCulture), + int.Parse(elements[3], CultureInfo.InvariantCulture)); + } + else + { + Console.Error.WriteLine("unknown debug event: " + line); + } + } + + protected internal ProxyTree DeserializeNode(string[] elements, int offset) + { + int ID = int.Parse(elements[offset + 0], CultureInfo.InvariantCulture); + int type = int.Parse(elements[offset + 1], CultureInfo.InvariantCulture); + int tokenLine = int.Parse(elements[offset + 2], CultureInfo.InvariantCulture); + int charPositionInLine = int.Parse(elements[offset + 3], CultureInfo.InvariantCulture); + int tokenIndex = int.Parse(elements[offset + 4], CultureInfo.InvariantCulture); + string text = elements[offset + 5]; + text = UnEscapeNewlines(text); + return new ProxyTree(ID, type, tokenLine, charPositionInLine, tokenIndex, text); + } + + protected internal virtual ProxyToken DeserializeToken(string[] elements, int offset) + { + string indexS = elements[offset + 0]; + string typeS = elements[offset + 1]; + string channelS = elements[offset + 2]; + string lineS = elements[offset + 3]; + string posS = elements[offset + 4]; + string text = elements[offset + 5]; + text = UnEscapeNewlines(text); + int index = int.Parse(indexS, CultureInfo.InvariantCulture); + ProxyToken t = new ProxyToken(index, int.Parse(typeS, CultureInfo.InvariantCulture), int.Parse(channelS, CultureInfo.InvariantCulture), int.Parse(lineS, CultureInfo.InvariantCulture), int.Parse(posS, CultureInfo.InvariantCulture), text); + return t; + } + + /// <summary>Create a thread to listen to the remote running recognizer </summary> + public virtual void start() + { + Thread t = new Thread(new ThreadStart(this.Run)); + t.Start(); + } + + public virtual void Run() + { + EventHandler(); + } + + // M i s c + + public virtual string[] GetEventElements(string eventLabel) + { + if (eventLabel == null) + return null; + + string[] elements = new string[MAX_EVENT_ELEMENTS]; + string str = null; // a string element if present (must be last) + try + { + int firstQuoteIndex = eventLabel.IndexOf('"'); + if (firstQuoteIndex >= 0) + { + // treat specially; has a string argument like "a comment\n + // Note that the string is terminated by \n not end quote. + // Easier to parse that way. + string eventWithoutString = eventLabel.Substring(0, (firstQuoteIndex) - (0)); + str = eventLabel.Substring(firstQuoteIndex + 1, (eventLabel.Length) - (firstQuoteIndex + 1)); + eventLabel = eventWithoutString; + } + + string[] strings = eventLabel.Split('\t'); + int i = 0; + for ( ; i < strings.Length; i++) + { + if (i >= MAX_EVENT_ELEMENTS) + { + return elements; + } + elements[i] = strings[i]; + } + + if (str != null) + { + elements[i] = str; + } + } + catch (System.Exception e) + { + Console.Error.WriteLine(e.StackTrace); + } + return elements; + } + + protected string UnEscapeNewlines(string txt) + { + // this unescape is slow but easy to understand + txt = txt.Replace("%0A", "\n"); // unescape \n + txt = txt.Replace("%0D", "\r"); // unescape \r + txt = txt.Replace("%25", "%"); // undo escaped escape chars + return txt; + } + + public bool TokenIndexesAreInvalid + { + get { return false; /*tokenIndexesInvalid;*/ } + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/TraceDebugEventListener.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/TraceDebugEventListener.cs new file mode 100644 index 0000000..dee88ff --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/TraceDebugEventListener.cs @@ -0,0 +1,126 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Debug +{ + using System; + using Antlr.Runtime; + using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; + using ITreeNodeStream = Antlr.Runtime.Tree.ITreeNodeStream; + + + /// <summary> + /// Print out (most of) the events... Useful for debugging, testing... + /// </summary> + public class TraceDebugEventListener : BlankDebugEventListener + { + ITreeAdaptor adaptor; + + public TraceDebugEventListener(ITreeAdaptor adaptor) + { + this.adaptor = adaptor; + } + + override public void EnterRule(string grammarFileName, string ruleName) { + Console.Out.WriteLine("EnterRule " + grammarFileName + " " + ruleName); + } + override public void ExitRule(string grammarFileName, string ruleName) { + Console.Out.WriteLine("ExitRule " + grammarFileName + " " + ruleName); + } + override public void EnterSubRule(int decisionNumber) { Console.Out.WriteLine("EnterSubRule"); } + override public void ExitSubRule(int decisionNumber) { Console.Out.WriteLine("ExitSubRule"); } + override public void Location(int line, int pos) { Console.Out.WriteLine("Location " + line + ":" + pos); } + + #region Tree parsing stuff + + override public void ConsumeNode(object t) + { + int ID = adaptor.GetUniqueID(t); + string text = adaptor.GetNodeText(t); + int type = adaptor.GetNodeType(t); + Console.Out.WriteLine("ConsumeNode " + ID + " " + text + " " + type); + } + + override public void LT(int i, object t) + { + int ID = adaptor.GetUniqueID(t); + string text = adaptor.GetNodeText(t); + int type = adaptor.GetNodeType(t); + Console.Out.WriteLine("LT " + i + " " + ID + " " + text + " " + type); + } + + #endregion + + #region AST stuff + + override public void GetNilNode(object t) + { + Console.Out.WriteLine("GetNilNode " + adaptor.GetUniqueID(t)); + } + + override public void CreateNode(object t) + { + int ID = adaptor.GetUniqueID(t); + string text = adaptor.GetNodeText(t); + int type = adaptor.GetNodeType(t); + Console.Out.WriteLine("Create " + ID + ": " + text + ", " + type); + } + + override public void CreateNode(object t, IToken token) + { + int ID = adaptor.GetUniqueID(t); + //string text = adaptor.GetNodeText(t); + int tokenIndex = token.TokenIndex; + Console.Out.WriteLine("Create " + ID + ": " + tokenIndex); + } + + override public void BecomeRoot(object newRoot, object oldRoot) + { + Console.Out.WriteLine("BecomeRoot " + adaptor.GetUniqueID(newRoot) + ", " + adaptor.GetUniqueID(oldRoot)); + } + + override public void AddChild(object root, object child) + { + Console.Out.WriteLine("AddChild " + adaptor.GetUniqueID(root) + ", " + adaptor.GetUniqueID(child)); + } + + override public void SetTokenBoundaries(object t, int tokenStartIndex, int tokenStopIndex) + { + Console.Out.WriteLine("SetTokenBoundaries " + adaptor.GetUniqueID(t) + ", " + tokenStartIndex + ", " + tokenStopIndex); + } + + #endregion + } +} + diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/Tracer.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/Tracer.cs new file mode 100644 index 0000000..3458f58 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Debug/Tracer.cs @@ -0,0 +1,87 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Debug +{ + using System; + using Antlr.Runtime; + using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; + using ITreeNodeStream = Antlr.Runtime.Tree.ITreeNodeStream; + + + /// <summary> + /// The default tracer mimics the traceParser behavior of ANTLR 2.x. + /// This listens for debugging events from the parser and implies + /// that you cannot debug and trace at the same time. + /// </summary> + public class Tracer : BlankDebugEventListener + { + public IIntStream input; + protected int level = 0; + + public Tracer(IIntStream input) + { + this.input = input; + } + + override public void EnterRule(string grammarFileName, string ruleName) + { + for (int i = 1; i <= level; i++) + { + Console.Out.Write(" "); + } + Console.Out.WriteLine("> " + grammarFileName + " " + ruleName + " lookahead(1)=" + GetInputSymbol(1)); + level++; + } + + override public void ExitRule(string grammarFileName, string ruleName) + { + level--; + for (int i = 1; i <= level; i++) + { + Console.Out.Write(" "); + } + Console.Out.WriteLine("< " + grammarFileName + " " + ruleName + " lookahead(1)=" + GetInputSymbol(1)); + } + + public virtual object GetInputSymbol(int k) + { + if (input is ITokenStream) + { + return ((ITokenStream) input).LT(k); + } + return (char) input.LA(k); + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Misc/ErrorManager.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Misc/ErrorManager.cs new file mode 100644 index 0000000..2c12838 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Misc/ErrorManager.cs @@ -0,0 +1,101 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Misc +{ + using System; + using StringBuilder = System.Text.StringBuilder; + using StackTrace = System.Diagnostics.StackTrace; + using StackFrame = System.Diagnostics.StackFrame; + using IList = System.Collections.IList; + + /// <summary>A minimal ANTLR3 error [message] manager with the ST bits</summary> + public class ErrorManager + { + public static void InternalError(object error, Exception e) + { + StackFrame location = GetLastNonErrorManagerCodeLocation(e); + string msg = "Exception " + e + "@" + location + ": " + error; + //Error(MSG_INTERNAL_ERROR, msg); + Error(msg); + } + + public static void InternalError(object error) + { + StackFrame location = GetLastNonErrorManagerCodeLocation(new Exception()); + string msg = location + ": " + error; + //Error(MSG_INTERNAL_ERROR, msg); + Error(msg); + } + + /// <summary> + /// Return first non ErrorManager code location for generating messages + /// </summary> + /// <param name="e">Current exception</param> + /// <returns></returns> + private static StackFrame GetLastNonErrorManagerCodeLocation(Exception e) + { + StackTrace stackTrace = new StackTrace(e); + int i = 0; + for (; i < stackTrace.FrameCount; i++) + { + StackFrame f = stackTrace.GetFrame(i); + if (f.ToString().IndexOf("ErrorManager") < 0) + { + break; + } + } + StackFrame location = stackTrace.GetFrame(i); + + return location; + } + + public static void Error(/*int msgID,*/ object arg) + { + //getErrorCount().errors++; + //getErrorListener().error(new ToolMessage(msgID, arg)); + + StringBuilder sb = new StringBuilder(); + //sb.AppendFormat("internal error: {0} {1}", arg); + sb.AppendFormat("internal error: {0} ", arg); + } + + /* + INTERNAL_ERROR(arg,arg2,exception,stackTrace) ::= << + internal error: <arg> <arg2><if(exception)>: <exception><endif> + <stackTrace; separator="\n"> + >> + */ + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Misc/Stats.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Misc/Stats.cs new file mode 100644 index 0000000..e2c475e --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Misc/Stats.cs @@ -0,0 +1,179 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Misc +{ + using System; + using FileInfo = System.IO.FileInfo; + using DirectoryInfo = System.IO.DirectoryInfo; + using StreamWriter = System.IO.StreamWriter; + using Path = System.IO.Path; + using IOException = System.IO.IOException; + + /// <summary>Stats routines needed by profiler etc...</summary> + /// <remarks> + /// Note that these routines return 0.0 if no values exist in X[] + /// which is not "correct" but, it is useful so I don't generate NaN + /// in my output + /// </remarks> + public class Stats + { + /// <summary>Compute the sample (unbiased estimator) standard deviation</summary> + /// <remarks> + /// The computation follows: + /// Computing Deviations: Standard Accuracy + /// Tony F. Chan and John Gregg Lewis + /// Stanford University + /// Communications of ACM September 1979 of Volume 22 the ACM Number 9 + /// + /// The "two-pass" method from the paper; supposed to have better + /// numerical properties than the textbook summation/sqrt. To me + /// this looks like the textbook method, but I ain't no numerical + /// methods guy. + /// </remarks> + public static double Stddev(int[] X) + { + int m = X.Length; + if (m <= 1) + { + return 0; + } + double xbar = Avg(X); + double s2 = 0.0; + for (int i = 0; i < m; i++) + { + s2 += (X[i] - xbar) * (X[i] - xbar); + } + s2 = s2 / (m - 1); + return Math.Sqrt(s2); + } + + /// <summary>Compute the sample mean</summary> + public static double Avg(int[] X) + { + double xbar = 0.0; + int m = X.Length; + if (m == 0) + { + return 0; + } + for (int i = 0; i < m; i++) + { + xbar += X[i]; + } + if (xbar >= 0.0) + { + return xbar / m; + } + return 0.0; + } + + public static int Min(int[] X) + { + int min = Int32.MaxValue; + int m = X.Length; + if (m == 0) + { + return 0; + } + for (int i = 0; i < m; i++) + { + if (X[i] < min) + { + min = X[i]; + } + } + return min; + } + + public static int Max(int[] X) + { + int max = Int32.MinValue; + int m = X.Length; + if (m == 0) + { + return 0; + } + for (int i = 0; i < m; i++) + { + if (X[i] > max) + { + max = X[i]; + } + } + return max; + } + + public static int Sum(int[] X) + { + int s = 0; + int m = X.Length; + if (m == 0) + { + return 0; + } + for (int i = 0; i < m; i++) + { + s += X[i]; + } + return s; + } + + public static void WriteReport(string filename, string data) + { + string absoluteFilename = GetAbsoluteFileName(filename); + FileInfo f = new FileInfo(absoluteFilename); + f.Directory.Create(); // ensure parent dir exists + // write file + try + { + StreamWriter w = new StreamWriter(f.FullName, true); // append + w.WriteLine(data); + w.Close(); + } + catch (IOException ioe) + { + ErrorManager.InternalError("can't write stats to " + absoluteFilename, + ioe); + } + } + + public static string GetAbsoluteFileName(string filename) + { + return Path.Combine( + Path.Combine(Environment.CurrentDirectory, Constants.ANTLRWORKS_DIR), + filename); + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/BaseTree.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/BaseTree.cs new file mode 100644 index 0000000..cec59f9 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/BaseTree.cs @@ -0,0 +1,455 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tree +{ + using System; + using IList = System.Collections.IList; + using ArrayList = System.Collections.ArrayList; + using StringBuilder = System.Text.StringBuilder; + + /// <summary> + /// A generic tree implementation with no payload. You must subclass to + /// actually have any user data. ANTLR v3 uses a list of children approach + /// instead of the child-sibling approach in v2. A flat tree (a list) is + /// an empty node whose children represent the list. An empty, but + /// non-null node is called "nil". + /// </summary> + [Serializable] + public abstract class BaseTree : ITree + { + public BaseTree() + { + } + + /// <summary>Create a new node from an existing node does nothing for BaseTree + /// as there are no fields other than the children list, which cannot + /// be copied as the children are not considered part of this node. + /// </summary> + public BaseTree(ITree node) + { + } + + virtual public int ChildCount + { + get + { + if (children == null) + { + return 0; + } + return children.Count; + } + } + + virtual public bool IsNil + { + get { return false; } + } + + virtual public int Line + { + get { return 0; } + } + + virtual public int CharPositionInLine + { + get { return 0; } + } + + protected IList children; + + public virtual ITree GetChild(int i) + { + if (children == null || i >= children.Count) + { + return null; + } + return (ITree) children[i]; + } + + /// <summary> + /// Get the children internal list of children. Manipulating the list + /// directly is not a supported operation (i.e. you do so at your own risk) + /// </summary> + public IList Children + { + get { return children; } + } + + /// <summary> + /// Add t as child of this node. + /// </summary> + /// <remarks> + /// Warning: if t has no children, but child does and child isNil then + /// this routine moves children to t via t.children = child.children; + /// i.e., without copying the array. + /// </remarks> + /// <param name="t"></param> + public virtual void AddChild(ITree t) + { + if (t == null) + { + return; + } + + BaseTree childTree = (BaseTree)t; + if (childTree.IsNil) // t is an empty node possibly with children + { + if ((children != null) && (children == childTree.children)) + { + throw new InvalidOperationException("attempt to add child list to itself"); + } + // just add all of childTree's children to this + if (childTree.children != null) + { + if (children != null) // must copy, this has children already + { + int n = childTree.children.Count; + for (int i = 0; i < n; i++) + { + ITree c = (ITree)childTree.Children[i]; + children.Add(c); + // handle double-link stuff for each child of nil root + c.Parent = this; + c.ChildIndex = children.Count - 1; + } + } + else + { + // no children for this but t has children; just set pointer + // call general freshener routine + children = childTree.children; + FreshenParentAndChildIndexes(); + } + } + } + else + { + // child is not nil (don't care about children) + if (children == null) + { + children = CreateChildrenList(); // create children list on demand + } + children.Add(t); + childTree.Parent = this; + childTree.ChildIndex = children.Count - 1; + } + } + + /// <summary> + /// Add all elements of kids list as children of this node + /// </summary> + /// <param name="kids"></param> + public void AddChildren(IList kids) + { + for (int i = 0; i < kids.Count; i++) + { + ITree t = (ITree) kids[i]; + AddChild(t); + } + } + + public virtual void SetChild(int i, ITree t) + { + if (t == null) + { + return; + } + if (t.IsNil) + { + throw new ArgumentException("Can't set single child to a list"); + } + if (children == null) + { + children = CreateChildrenList(); + } + children[i] = t; + t.Parent = this; + t.ChildIndex = i; + } + + public virtual object DeleteChild(int i) + { + if (children == null) + { + return null; + } + ITree killed = (ITree)children[i]; + children.RemoveAt(i); + // walk rest and decrement their child indexes + FreshenParentAndChildIndexes(i); + return killed; + } + + /// <summary> + /// Delete children from start to stop and replace with t even if t is + /// a list (nil-root tree). + /// </summary> + /// <remarks> + /// Number of children can increase or decrease. + /// For huge child lists, inserting children can force walking rest of + /// children to set their childindex; could be slow. + /// </remarks> + public virtual void ReplaceChildren(int startChildIndex, int stopChildIndex, object t) + { + /* + Console.Out.WriteLine("replaceChildren "+startChildIndex+", "+stopChildIndex+ + " with "+((BaseTree)t).ToStringTree()); + Console.Out.WriteLine("in="+ToStringTree()); + */ + if (children == null) + { + throw new ArgumentException("indexes invalid; no children in list"); + } + int replacingHowMany = stopChildIndex - startChildIndex + 1; + int replacingWithHowMany; + BaseTree newTree = (BaseTree)t; + IList newChildren; + // normalize to a list of children to add: newChildren + if (newTree.IsNil) + { + newChildren = newTree.Children; + } + else + { + newChildren = new ArrayList(1); + newChildren.Add(newTree); + } + replacingWithHowMany = newChildren.Count; + int numNewChildren = newChildren.Count; + int delta = replacingHowMany - replacingWithHowMany; + // if same number of nodes, do direct replace + if (delta == 0) + { + int j = 0; // index into new children + for (int i = startChildIndex; i <= stopChildIndex; i++) + { + BaseTree child = (BaseTree)newChildren[j]; + children[i] = child; + child.Parent = this; + child.ChildIndex = i; + j++; + } + } + else if (delta > 0) + { // fewer new nodes than there were + // set children and then delete extra + for (int j = 0; j < numNewChildren; j++) + { + children[startChildIndex + j] = newChildren[j]; + } + int indexToDelete = startChildIndex + numNewChildren; + for (int c = indexToDelete; c <= stopChildIndex; c++) + { + // delete same index, shifting everybody down each time + children.RemoveAt(indexToDelete); + } + FreshenParentAndChildIndexes(startChildIndex); + } + else + { // more new nodes than were there before + // fill in as many children as we can (replacingHowMany) w/o moving data + int replacedSoFar; + for (replacedSoFar = 0; replacedSoFar < replacingHowMany; replacedSoFar++) + { + children[startChildIndex + replacedSoFar] = newChildren[replacedSoFar]; + } + // replacedSoFar has correct index for children to add + for ( ; replacedSoFar < replacingWithHowMany; replacedSoFar++) + { + children.Insert(startChildIndex + replacedSoFar, newChildren[replacedSoFar]); + } + FreshenParentAndChildIndexes(startChildIndex); + } + //Console.Out.WriteLine("out="+ToStringTree()); + } + + /// <summary>Override in a subclass to change the impl of children list </summary> + protected internal virtual IList CreateChildrenList() + { + return new ArrayList(); + } + + /// <summary>Set the parent and child index values for all child of t</summary> + public virtual void FreshenParentAndChildIndexes() + { + FreshenParentAndChildIndexes(0); + } + + public virtual void FreshenParentAndChildIndexes(int offset) + { + int n = ChildCount; + for (int c = offset; c < n; c++) + { + ITree child = (ITree)GetChild(c); + child.ChildIndex = c; + child.Parent = this; + } + } + + public virtual void SanityCheckParentAndChildIndexes() + { + SanityCheckParentAndChildIndexes(null, -1); + } + + public virtual void SanityCheckParentAndChildIndexes(ITree parent, int i) + { + if (parent != this.Parent) + { + throw new ArgumentException("parents don't match; expected " + parent + " found " + this.Parent); + } + if (i != this.ChildIndex) + { + throw new NotSupportedException("child indexes don't match; expected " + i + " found " + this.ChildIndex); + } + int n = this.ChildCount; + for (int c = 0; c < n; c++) + { + CommonTree child = (CommonTree)this.GetChild(c); + child.SanityCheckParentAndChildIndexes(this, c); + } + } + + /// <summary>BaseTree doesn't track child indexes.</summary> + public virtual int ChildIndex + { + get { return 0; } + set { } + } + + /// <summary>BaseTree doesn't track parent pointers.</summary> + public virtual ITree Parent + { + get { return null; } + set { } + } + + /// <summary> + /// Walk upwards looking for ancestor with this token type. + /// </summary> + public bool HasAncestor(int ttype) { return GetAncestor(ttype)!=null; } + + /// <summary> + /// Walk upwards and get first ancestor with this token type. + /// </summary> + public ITree GetAncestor(int ttype) { + ITree t = this; + t = t.Parent; + while ( t!=null ) { + if ( t.Type == ttype ) return t; + t = t.Parent; + } + return null; + } + + /// <summary> + /// Return a list of all ancestors of this node. The first node of + /// list is the root and the last is the parent of this node. + /// </summary> + public IList GetAncestors() { + if ( Parent==null ) return null; + IList ancestors = new ArrayList(); + ITree t = this; + t = t.Parent; + while ( t!=null ) { + ancestors.Insert(0, t); // insert at start + t = t.Parent; + } + return ancestors; + } + + /// <summary> + /// Print out a whole tree not just a node + /// </summary> + public virtual string ToStringTree() + { + if (children == null || children.Count == 0) + { + return this.ToString(); + } + StringBuilder buf = new StringBuilder(); + if (!IsNil) + { + buf.Append("("); + buf.Append(this.ToString()); + buf.Append(' '); + } + for (int i = 0; children != null && i < children.Count; i++) + { + ITree t = (ITree) children[i]; + if (i > 0) + { + buf.Append(' '); + } + buf.Append(t.ToStringTree()); + } + if (!IsNil) + { + buf.Append(")"); + } + return buf.ToString(); + } + + /// <summary> + /// Force base classes override and say how a node (not a tree) + /// should look as text + /// </summary> + public override abstract string ToString(); + + public abstract ITree DupNode(); + + public abstract int Type + { + get; + } + + public abstract int TokenStartIndex + { + get; + set; + } + + public abstract int TokenStopIndex + { + get; + set; + } + + public abstract string Text + { + get; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/BaseTreeAdaptor.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/BaseTreeAdaptor.cs new file mode 100644 index 0000000..459015c --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/BaseTreeAdaptor.cs @@ -0,0 +1,382 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tree +{ + using System; + using IDictionary = System.Collections.IDictionary; + using Hashtable = System.Collections.Hashtable; + using IToken = Antlr.Runtime.IToken; + + /// <summary> + /// A TreeAdaptor that works with any Tree implementation + /// </summary> + public abstract class BaseTreeAdaptor : ITreeAdaptor + { + /// <summary>A map of tree node to unique IDs.</summary> + protected IDictionary treeToUniqueIDMap; + + /// <summary>Next available unique ID.</summary> + protected int uniqueNodeID = 1; + + public virtual object GetNilNode() + { + return Create(null); + } + + /// <summary> + /// Create tree node that holds the start and stop tokens associated + /// with an error. + /// </summary> + /// <remarks> + /// <para>If you specify your own kind of tree nodes, you will likely have to + /// override this method. CommonTree returns Token.INVALID_TOKEN_TYPE + /// if no token payload but you might have to set token type for diff + /// node type.</para> + /// + /// <para>You don't have to subclass CommonErrorNode; you will likely need to + /// subclass your own tree node class to avoid class cast exception.</para> + /// </remarks> + public virtual object ErrorNode(ITokenStream input, IToken start, IToken stop, + RecognitionException e) + { + CommonErrorNode t = new CommonErrorNode(input, start, stop, e); + //System.out.println("returning error node '"+t+"' @index="+input.index()); + return t; + } + + public virtual bool IsNil(object tree) + { + return ((ITree)tree).IsNil; + } + + public virtual object DupTree(object tree) + { + return DupTree(tree, null); + } + + /// <summary> + /// This is generic in the sense that it will work with any kind of + /// tree (not just the ITree interface). It invokes the adaptor routines + /// not the tree node routines to do the construction. + /// </summary> + public virtual object DupTree(object t, object parent) + { + if (t == null) + { + return null; + } + object newTree = DupNode(t); + // ensure new subtree root has parent/child index set + SetChildIndex(newTree, GetChildIndex(t)); // same index in new tree + SetParent(newTree, parent); + int n = GetChildCount(t); + for (int i = 0; i < n; i++) + { + object child = GetChild(t, i); + object newSubTree = DupTree(child, t); + AddChild(newTree, newSubTree); + } + return newTree; + } + + /// <summary> + /// Add a child to the tree t. If child is a flat tree (a list), make all + /// in list children of t. + /// </summary> + /// <remarks> + /// <para> + /// Warning: if t has no children, but child does and child isNil + /// then you can decide it is ok to move children to t via + /// t.children = child.children; i.e., without copying the array. + /// Just make sure that this is consistent with how the user will build + /// ASTs. + /// </para> + /// </remarks> + public virtual void AddChild(object t, object child) + { + if ((t != null) && (child != null)) + { + ((ITree) t).AddChild((ITree) child); + } + } + + /// <summary> + /// If oldRoot is a nil root, just copy or move the children to newRoot. + /// If not a nil root, make oldRoot a child of newRoot. + /// </summary> + /// <remarks> + /// + /// old=^(nil a b c), new=r yields ^(r a b c) + /// old=^(a b c), new=r yields ^(r ^(a b c)) + /// + /// If newRoot is a nil-rooted single child tree, use the single + /// child as the new root node. + /// + /// old=^(nil a b c), new=^(nil r) yields ^(r a b c) + /// old=^(a b c), new=^(nil r) yields ^(r ^(a b c)) + /// + /// If oldRoot was null, it's ok, just return newRoot (even if isNil). + /// + /// old=null, new=r yields r + /// old=null, new=^(nil r) yields ^(nil r) + /// + /// Return newRoot. Throw an exception if newRoot is not a + /// simple node or nil root with a single child node--it must be a root + /// node. If newRoot is ^(nil x) return x as newRoot. + /// + /// Be advised that it's ok for newRoot to point at oldRoot's + /// children; i.e., you don't have to copy the list. We are + /// constructing these nodes so we should have this control for + /// efficiency. + /// </remarks> + public virtual object BecomeRoot(object newRoot, object oldRoot) + { + ITree newRootTree = (ITree) newRoot; + ITree oldRootTree = (ITree) oldRoot; + if (oldRoot == null) + { + return newRoot; + } + // handle ^(nil real-node) + if (newRootTree.IsNil) + { + int nc = newRootTree.ChildCount; + if ( nc==1 ) newRootTree = (ITree)newRootTree.GetChild(0); + else if ( nc >1 ) { + throw new SystemException("more than one node as root (TODO: make exception hierarchy)"); + } + } + // add oldRoot to newRoot; AddChild takes care of case where oldRoot + // is a flat list (i.e., nil-rooted tree). All children of oldRoot + // are added to newRoot. + newRootTree.AddChild(oldRootTree); + return newRootTree; + } + + /// <summary>Transform ^(nil x) to x and nil to null</summary> + public virtual object RulePostProcessing(object root) + { + ITree r = (ITree) root; + if (r != null && r.IsNil) + { + if (r.ChildCount == 0) + { + r = null; + } + else if (r.ChildCount == 1) + { + r = (ITree)r.GetChild(0); + // whoever invokes rule will set parent and child index + r.Parent = null; + r.ChildIndex = -1; + } + } + return r; + } + + public virtual object BecomeRoot(IToken newRoot, object oldRoot) + { + return BecomeRoot(Create(newRoot), oldRoot); + } + + public virtual object Create(int tokenType, IToken fromToken) + { + fromToken = CreateToken(fromToken); + fromToken.Type = tokenType; + ITree t = (ITree) Create(fromToken); + return t; + } + + public virtual object Create(int tokenType, IToken fromToken, string text) + { + fromToken = CreateToken(fromToken); + fromToken.Type = tokenType; + fromToken.Text = text; + ITree t = (ITree) Create(fromToken); + return t; + } + + public virtual object Create(int tokenType, string text) + { + IToken fromToken = CreateToken(tokenType, text); + ITree t = (ITree) Create(fromToken); + return t; + } + + public virtual int GetNodeType(object t) + { + return ((ITree) t).Type; + } + + public virtual void SetNodeType(object t, int type) + { + throw new NotImplementedException("don't know enough about Tree node"); + } + + public virtual string GetNodeText(object t) + { + return ((ITree)t).Text; + } + + public virtual void SetNodeText(object t, string text) + { + throw new NotImplementedException("don't know enough about Tree node"); + } + + public virtual object GetChild(object t, int i) + { + return ((ITree)t).GetChild(i); + } + + public virtual void SetChild(object t, int i, object child) + { + ((ITree)t).SetChild(i, (ITree)child); + } + + public virtual object DeleteChild(object t, int i) + { + return ((ITree)t).DeleteChild(i); + } + + public virtual int GetChildCount(object t) + { + return ((ITree)t).ChildCount; + + } + + public abstract object DupNode(object param1); + public abstract object Create(IToken param1); + public abstract void SetTokenBoundaries(object param1, IToken param2, IToken param3); + public abstract int GetTokenStartIndex(object t); + public abstract int GetTokenStopIndex(object t); + public abstract IToken GetToken(object treeNode); + + /// <summary> + /// For identifying trees. How to identify nodes so we can say "add node + /// to a prior node"? + /// </summary> + /// <remarks> + /// <para> + /// System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode() is + /// not available in .NET 1.0. It is "broken/buggy" in .NET 1.1 + /// (for multi-appdomain scenarios). + /// </para> + /// <para> + /// We are tracking uniqueness of IDs ourselves manually since ANTLR + /// v3.1 release using hashtables. We will be tracking . Even though + /// it is expensive, we will create a hashtable with all tree nodes + /// in it as this is only for debugging. + /// </para> + /// </remarks> + public int GetUniqueID(object node) + { + if (treeToUniqueIDMap == null) + { + treeToUniqueIDMap = new Hashtable(); + } + object prevIdObj = treeToUniqueIDMap[node]; + if (prevIdObj != null) + { + return (int) prevIdObj; + } + int ID = uniqueNodeID; + treeToUniqueIDMap[node] = ID; + uniqueNodeID++; + return ID; + + //return node.GetHashCode(); + //return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(node); + } + + /// <summary> + /// Tell me how to create a token for use with imaginary token nodes. + /// For example, there is probably no input symbol associated with imaginary + /// token DECL, but you need to create it as a payload or whatever for + /// the DECL node as in ^(DECL type ID). + /// + /// If you care what the token payload objects' type is, you should + /// override this method and any other createToken variant. + /// </summary> + public abstract IToken CreateToken(int tokenType, string text); + + /// <summary> + /// Tell me how to create a token for use with imaginary token nodes. + /// For example, there is probably no input symbol associated with imaginary + /// token DECL, but you need to create it as a payload or whatever for + /// the DECL node as in ^(DECL type ID). + /// + /// This is a variant of createToken where the new token is derived from + /// an actual real input token. Typically this is for converting '{' + /// tokens to BLOCK etc... You'll see + /// + /// r : lc='{' ID+ '}' -> ^(BLOCK[$lc] ID+) ; + /// + /// If you care what the token payload objects' type is, you should + /// override this method and any other createToken variant. + /// </summary> + public abstract IToken CreateToken(IToken fromToken); + + /// <summary> + /// Who is the parent node of this node; if null, implies node is root. + /// </summary> + /// <remarks> + /// If your node type doesn't handle this, it's ok but the tree rewrites + /// in tree parsers need this functionality. + /// </remarks> + public abstract object GetParent(object t); + public abstract void SetParent(object t, object parent); + + /// <summary> + /// What index is this node in the child list? Range: 0..n-1 + /// </summary> + /// <remarks> + /// If your node type doesn't handle this, it's ok but the tree rewrites + /// in tree parsers need this functionality. + /// </remarks> + public abstract int GetChildIndex(object t); + public abstract void SetChildIndex(object t, int index); + + /// <summary> + /// Replace from start to stop child index of parent with t, which might + /// be a list. Number of children may be different after this call. + /// </summary> + /// <remarks> + /// If parent is null, don't do anything; must be at root of overall tree. + /// Can't replace whatever points to the parent externally. Do nothing. + /// </remarks> + public abstract void ReplaceChildren(object parent, int startChildIndex, int stopChildIndex, object t); + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/CommonErrorNode.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/CommonErrorNode.cs new file mode 100644 index 0000000..347d292 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/CommonErrorNode.cs @@ -0,0 +1,120 @@ +/* + [The "BSD licence"] + Copyright (c) 2007-2008 Johannes Luber + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +using Antlr.Runtime.Tree; +using System; + +namespace Antlr.Runtime +{ + + /** A node representing erroneous token range in token stream */ + [Serializable] + public class CommonErrorNode : CommonTree { + public IIntStream input; + public IToken start; + public IToken stop; + [NonSerialized] + public RecognitionException trappedException; + + public CommonErrorNode(ITokenStream input, IToken start, IToken stop, + RecognitionException e) { + if (stop == null || + (stop.TokenIndex < start.TokenIndex && + stop.Type != Runtime.Token.EOF) ) { + // sometimes resync does not consume a token (when LT(1) is + // in follow set). So, stop will be 1 to left to start. adjust. + // Also handle case where start is the first token and no token + // is consumed during recovery; LT(-1) will return null. + stop = start; + } + this.input = input; + this.start = start; + this.stop = stop; + this.trappedException = e; + } + + override public bool IsNil + { + get { return false; } + } + + override public int Type + { + get + { + return Runtime.Token.INVALID_TOKEN_TYPE; + } + } + + override public string Text + { + get + { + string badText = null; + if (start is IToken) { + int i = ((IToken)start).TokenIndex; + int j = ((IToken)stop).TokenIndex; + if ( ((IToken)stop).Type == Runtime.Token.EOF ) { + j = ((ITokenStream)input).Count; + } + badText = ((ITokenStream)input).ToString(i, j); + } + else if (start is ITree) { + badText = ((ITreeNodeStream)input).ToString(start, stop); + } + else { + // people should subclass if they alter the tree type so this + // next one is for sure correct. + badText = "<unknown>"; + } + return badText; + } + } + + public override string ToString() { + if (trappedException is MissingTokenException) { + return "<missing type: " + + ((MissingTokenException)trappedException).MissingType + + ">"; + } + else if (trappedException is UnwantedTokenException) { + return "<extraneous: " + + ((UnwantedTokenException)trappedException).UnexpectedToken + + ", resync=" + Text + ">"; + } + else if (trappedException is MismatchedTokenException) { + return "<mismatched token: " + trappedException.Token + ", resync=" + Text + ">"; + } + else if (trappedException is NoViableAltException) { + return "<unexpected: " + trappedException.Token + + ", resync=" + Text + ">"; + } + return "<error: " + Text + ">"; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/CommonTree.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/CommonTree.cs new file mode 100644 index 0000000..8403be0 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/CommonTree.cs @@ -0,0 +1,233 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tree +{ + using System; + using IToken = Antlr.Runtime.IToken; + + /// <summary>A tree node that is wrapper for a Token object. </summary> + /// <remarks> + /// After 3.0 release while building tree rewrite stuff, it became clear + /// that computing parent and child index is very difficult and cumbersome. + /// Better to spend the space in every tree node. If you don't want these + /// extra fields, it's easy to cut them out in your own BaseTree subclass. + /// </remarks> + [Serializable] + public class CommonTree : BaseTree + { + public CommonTree() + { + } + + public CommonTree(CommonTree node) + : base(node) + { + this.token = node.token; + this.startIndex = node.startIndex; + this.stopIndex = node.stopIndex; + } + + public CommonTree(IToken t) + { + this.token = t; + } + + virtual public IToken Token + { + get { return token; } + } + + override public bool IsNil + { + get { return token == null; } + } + + override public int Type + { + get + { + if (token == null) + { + return Runtime.Token.INVALID_TOKEN_TYPE; + } + return token.Type; + } + } + + override public string Text + { + get + { + if (token == null) + { + return null; + } + return token.Text; + } + } + + override public int Line + { + get + { + if (token == null || token.Line == 0) + { + if (ChildCount > 0) + { + return GetChild(0).Line; + } + return 0; + } + return token.Line; + } + } + + override public int CharPositionInLine + { + get + { + if (token == null || token.CharPositionInLine == - 1) + { + if (ChildCount > 0) + { + return GetChild(0).CharPositionInLine; + } + return 0; + } + return token.CharPositionInLine; + } + } + + override public int TokenStartIndex + { + get + { + if ( (startIndex == -1) && (token != null) ) + { + return token.TokenIndex; + } + return startIndex; + } + + set { startIndex = value; } + } + + override public int TokenStopIndex + { + get + { + if ( (stopIndex == -1) && (token != null) ) + { + return token.TokenIndex; + } + return stopIndex; + } + + set { stopIndex = value; } + } + + /// <summary> + /// For every node in this subtree, make sure it's start/stop token's + /// are set. Walk depth first, visit bottom up. Only updates nodes + /// with at least one token index < 0. + /// </summary> + public void SetUnknownTokenBoundaries() { + if ( children==null ) { + if ( startIndex<0 || stopIndex<0 ) { + startIndex = stopIndex = token.TokenIndex; + } + return; + } + for (int i=0; i<children.Count; i++) { + ((CommonTree)children[i]).SetUnknownTokenBoundaries(); + } + if ( startIndex>=0 && stopIndex>=0 ) return; // already set + if ( children.Count > 0 ) { + CommonTree firstChild = (CommonTree)children[0]; + CommonTree lastChild = (CommonTree)children[children.Count-1]; + startIndex = firstChild.TokenStartIndex; + stopIndex = lastChild.TokenStopIndex; + } + } + + override public int ChildIndex + { + get { return childIndex; } + set { childIndex = value; } + } + + override public ITree Parent + { + get { return parent; } + set { parent = (CommonTree)value; } + } + + /// <summary> + /// What token indexes bracket all tokens associated with this node + /// and below? + /// </summary> + public int startIndex = -1, stopIndex = -1; + + /// <summary>A single token is the payload </summary> + protected IToken token; + + /// <summary>Who is the parent node of this node; if null, implies node is root</summary> + public CommonTree parent; + + /// <summary>What index is this node in the child list? Range: 0..n-1</summary> + public int childIndex = -1; + + public override ITree DupNode() + { + return new CommonTree(this); + } + + public override string ToString() + { + if (IsNil) + { + return "nil"; + } + if ( Type == Runtime.Token.INVALID_TOKEN_TYPE ) { + return "<errornode>"; + } + if (token == null) { + return null; + } + return token.Text; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/CommonTreeAdaptor.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/CommonTreeAdaptor.cs new file mode 100644 index 0000000..ce6f98d --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/CommonTreeAdaptor.cs @@ -0,0 +1,239 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tree +{ + using System; + using CommonToken = Antlr.Runtime.CommonToken; + using IToken = Antlr.Runtime.IToken; + + /// <summary> + /// A TreeAdaptor that works with any Tree implementation. It provides + /// really just factory methods; all the work is done by BaseTreeAdaptor. + /// If you would like to have different tokens created than ClassicToken + /// objects, you need to override this and then set the parser tree adaptor to + /// use your subclass. + /// + /// To get your parser to build nodes of a different type, override + /// Create(Token), ErrorNode(), and to be safe, YourTreeClass.DupNode(). + /// DupNode() is called to duplicate nodes during rewrite operations. + /// </summary> + public class CommonTreeAdaptor : BaseTreeAdaptor + { + /// <summary> + /// Duplicate a node. This is part of the factory; + /// override if you want another kind of node to be built. + /// + /// I could use reflection to prevent having to override this + /// but reflection is slow. + /// </summary> + public override object DupNode(object t) + { + if (t == null) + { + return null; + } + return ((ITree)t).DupNode(); + } + + public override object Create(IToken payload) + { + return new CommonTree(payload); + } + + /// <summary>Create an imaginary token from a type and text </summary> + /// <remarks> + /// Tell me how to create a token for use with imaginary token nodes. + /// For example, there is probably no input symbol associated with imaginary + /// token DECL, but you need to create it as a payload or whatever for + /// the DECL node as in ^(DECL type ID). + /// + /// If you care what the token payload objects' type is, you should + /// override this method and any other createToken variant. + /// </remarks> + public override IToken CreateToken(int tokenType, string text) + { + return new CommonToken(tokenType, text); + } + + /// <summary>Create an imaginary token, copying the contents of a previous token </summary> + /// <remarks> + /// Tell me how to create a token for use with imaginary token nodes. + /// For example, there is probably no input symbol associated with imaginary + /// token DECL, but you need to create it as a payload or whatever for + /// the DECL node as in ^(DECL type ID). + /// + /// This is a variant of createToken where the new token is derived from + /// an actual real input token. Typically this is for converting '{' + /// tokens to BLOCK etc... You'll see + /// + /// r : lc='{' ID+ '}' -> ^(BLOCK[$lc] ID+) ; + /// + /// If you care what the token payload objects' type is, you should + /// override this method and any other createToken variant. + /// </remarks> + public override IToken CreateToken(IToken fromToken) + { + return new CommonToken(fromToken); + } + + /// <summary>track start/stop token for subtree root created for a rule </summary> + /// <remarks> + /// Track start/stop token for subtree root created for a rule. + /// Only works with Tree nodes. For rules that match nothing, + /// seems like this will yield start=i and stop=i-1 in a nil node. + /// Might be useful info so I'll not force to be i..i. + /// </remarks> + public override void SetTokenBoundaries(object t, IToken startToken, IToken stopToken) + { + if (t == null) + { + return ; + } + + int start = 0; + int stop = 0; + if (startToken != null) + { + start = startToken.TokenIndex; + } + if (stopToken != null) + { + stop = stopToken.TokenIndex; + } + ((ITree) t).TokenStartIndex = start; + ((ITree) t).TokenStopIndex = stop; + } + + override public int GetTokenStartIndex(object t) + { + if (t == null) + { + return -1; + } + return ((ITree)t).TokenStartIndex; + } + + override public int GetTokenStopIndex(object t) + { + if (t == null) + { + return -1; + } + return ((ITree)t).TokenStopIndex; + } + + override public string GetNodeText(object t) + { + if (t == null) + { + return null; + } + return ((ITree)t).Text; + } + + override public int GetNodeType(object t) + { + if (t == null) + { + return Token.INVALID_TOKEN_TYPE; + } + return ((ITree)t).Type; + } + + /// <summary> + /// What is the Token associated with this node? + /// </summary> + /// <remarks> + /// If you are not using CommonTree, then you must override this in your + /// own adaptor. + /// </remarks> + override public IToken GetToken(object treeNode) + { + if ( treeNode is CommonTree ) + { + return ((CommonTree)treeNode).Token; + } + return null; // no idea what to do + } + + override public object GetChild(object t, int i) + { + if (t == null) + { + return null; + } + return ((ITree)t).GetChild(i); + } + + override public int GetChildCount(object t) + { + if (t == null) + { + return 0; + } + return ((ITree)t).ChildCount; + } + + override public object GetParent(object t) + { + if ( t==null ) return null; + return ((ITree)t).Parent; + } + + override public void SetParent(object t, object parent) + { + if ( t==null ) ((ITree)t).Parent = (ITree)parent; + } + + override public int GetChildIndex(object t) + { + if ( t==null ) return 0; + return ((ITree)t).ChildIndex; + } + + override public void SetChildIndex(object t, int index) + { + if ( t==null ) ((ITree)t).ChildIndex = index; + } + + override public void ReplaceChildren(object parent, int startChildIndex, int stopChildIndex, object t) + { + if (parent != null) + { + ((ITree)parent).ReplaceChildren(startChildIndex, stopChildIndex, t); + } + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/CommonTreeNodeStream.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/CommonTreeNodeStream.cs new file mode 100644 index 0000000..a1ff3e3 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/CommonTreeNodeStream.cs @@ -0,0 +1,663 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tree +{ + using System; + using IEnumerable = System.Collections.IEnumerable; + using IEnumerator = System.Collections.IEnumerator; + using IDictionary = System.Collections.IDictionary; + using IList = System.Collections.IList; + using ArrayList = System.Collections.ArrayList; + using Hashtable = System.Collections.Hashtable; + using StringBuilder = System.Text.StringBuilder; + using StackList = Antlr.Runtime.Collections.StackList; + using Token = Antlr.Runtime.Token; + using ITokenStream = Antlr.Runtime.ITokenStream; + + /// <summary> + /// A buffered stream of tree nodes. Nodes can be from a tree of ANY kind. + /// </summary> + /// <remarks> + /// This node stream sucks all nodes out of the tree specified in the + /// constructor during construction and makes pointers into the tree + /// using an array of Object pointers. The stream necessarily includes + /// pointers to DOWN and UP and EOF nodes. + /// + /// This stream knows how to mark/release for backtracking. + /// + /// This stream is most suitable for tree interpreters that need to + /// jump around a lot or for tree parsers requiring speed (at cost of memory). + /// There is some duplicated functionality here with UnBufferedTreeNodeStream + /// but just in bookkeeping, not tree walking etc... + /// + /// <see cref="UnBufferedTreeNodeStream"/> + /// + /// </remarks> + public class CommonTreeNodeStream : ITreeNodeStream, IEnumerable + { + public const int DEFAULT_INITIAL_BUFFER_SIZE = 100; + public const int INITIAL_CALL_STACK_SIZE = 10; + + #region Helper classes + protected sealed class CommonTreeNodeStreamEnumerator : IEnumerator + { + private CommonTreeNodeStream _nodeStream; + private int _index; + private object _currentItem; + + #region Constructors + + internal CommonTreeNodeStreamEnumerator() + { + } + + internal CommonTreeNodeStreamEnumerator(CommonTreeNodeStream nodeStream) + { + _nodeStream = nodeStream; + Reset(); + } + + #endregion + + #region IEnumerator Members + + public void Reset() + { +// if (_version != _hashList._version) +// { +// throw new InvalidOperationException("Collection was modified; enumeration operation may not execute."); +// } + _index = 0; + _currentItem = null; + } + + public object Current + { + get + { + if (_currentItem == null) + { + throw new InvalidOperationException("Enumeration has either not started or has already finished."); + } + return _currentItem; + } + } + + public bool MoveNext() + { +// if (_version != _hashList._version) +// { +// throw new InvalidOperationException("Collection was modified; enumeration operation may not execute."); +// } + + if ( _index >= _nodeStream.nodes.Count ) + { + int current = _index; + _index++; + if ( current < _nodeStream.nodes.Count ) + { + _currentItem = _nodeStream.nodes[current]; + } + _currentItem = _nodeStream.eof; + return true; + } + _currentItem = null; + return false; + } + + #endregion + } + + #endregion + + #region IEnumerable Members + + public IEnumerator GetEnumerator() + { + if ( p == -1 ) + { + FillBuffer(); + } + return new CommonTreeNodeStreamEnumerator(this); + } + + #endregion + + #region Data Members + // all these navigation nodes are shared and hence they + // cannot contain any line/column info + + protected object down; + protected object up; + protected object eof; + + /// <summary> + /// The complete mapping from stream index to tree node. This buffer + /// includes pointers to DOWN, UP, and EOF nodes. + /// + /// It is built upon ctor invocation. The elements are type Object + /// as we don't what the trees look like. Load upon first need of + /// the buffer so we can set token types of interest for reverseIndexing. + /// Slows us down a wee bit to do all of the if p==-1 testing everywhere though. + /// </summary> + protected IList nodes; + + /// <summary>Pull nodes from which tree? </summary> + protected internal object root; + + /// <summary>IF this tree (root) was created from a token stream, track it</summary> + protected ITokenStream tokens; + + /// <summary>What tree adaptor was used to build these trees</summary> + ITreeAdaptor adaptor; + + /// <summary> + /// Reuse same DOWN, UP navigation nodes unless this is true + /// </summary> + protected bool uniqueNavigationNodes = false; + + /// <summary> + /// The index into the nodes list of the current node (next node + /// to consume). If -1, nodes array not filled yet. + /// </summary> + protected int p = -1; + + /// <summary> + /// Track the last mark() call result value for use in rewind(). + /// </summary> + protected int lastMarker; + + /// <summary> + /// Stack of indexes used for push/pop calls + /// </summary> + protected StackList calls; + + #endregion + + #region Constructors + + public CommonTreeNodeStream(object tree) + : this(new CommonTreeAdaptor(), tree) + { + } + + public CommonTreeNodeStream(ITreeAdaptor adaptor, object tree) + : this(adaptor, tree, DEFAULT_INITIAL_BUFFER_SIZE) + { + } + + public CommonTreeNodeStream(ITreeAdaptor adaptor, object tree, int initialBufferSize) + { + this.root = tree; + this.adaptor = adaptor; + nodes = new ArrayList(initialBufferSize); + down = adaptor.Create(Token.DOWN, "DOWN"); + up = adaptor.Create(Token.UP, "UP"); + eof = adaptor.Create(Token.EOF, "EOF"); + } + + #endregion + + #region Public API + + /// <summary> + /// Walk tree with depth-first-search and fill nodes buffer. + /// Don't do DOWN, UP nodes if its a list (t is isNil). + /// </summary> + protected void FillBuffer() + { + FillBuffer(root); + p = 0; // buffer of nodes intialized now + } + + public void FillBuffer(object t) + { + bool nil = adaptor.IsNil(t); + if ( !nil ) + { + nodes.Add(t); // add this node + } + // add DOWN node if t has children + int n = adaptor.GetChildCount(t); + if ( !nil && (n > 0) ) + { + AddNavigationNode(Token.DOWN); + } + // and now add all its children + for (int c = 0; c < n; c++) + { + object child = adaptor.GetChild(t, c); + FillBuffer(child); + } + // add UP node if t has children + if ( !nil && (n > 0) ) + { + AddNavigationNode(Token.UP); + } + } + + /// <summary> + /// Returns the stream index for the spcified node in the range 0..n-1 or, + /// -1 if node not found. + /// </summary> + protected int GetNodeIndex(object node) + { + if ( p == -1 ) + { + FillBuffer(); + } + for (int i = 0; i < nodes.Count; i++) + { + object t = (object) nodes[i]; + if ( t == node ) + { + return i; + } + } + return -1; + } + + /// <summary> + /// As we flatten the tree, we use UP, DOWN nodes to represent + /// the tree structure. When debugging we need unique nodes + /// so instantiate new ones when uniqueNavigationNodes is true. + /// </summary> + protected void AddNavigationNode(int ttype) + { + object navNode = null; + if ( ttype == Token.DOWN ) + { + if ( HasUniqueNavigationNodes ) + { + navNode = adaptor.Create(Token.DOWN, "DOWN"); + } + else + { + navNode = down; + } + } + else + { + if ( HasUniqueNavigationNodes ) + { + navNode = adaptor.Create(Token.UP, "UP"); + } + else + { + navNode = up; + } + } + nodes.Add(navNode); + } + + public object Get(int i) + { + if ( p == -1 ) + { + FillBuffer(); + } + return nodes[i]; + } + + public object LT(int k) + { + if ( p == -1 ) + { + FillBuffer(); + } + if ( k == 0 ) + { + return null; + } + if ( k < 0 ) + { + return LB(-k); + } + if ( (p+k-1) >= nodes.Count ) + { + return eof; + } + return nodes[p+k-1]; + } + + public virtual object CurrentSymbol { + get { return LT(1); } + } + + /// <summary> + /// Look backwards k nodes + /// </summary> + protected object LB(int k) + { + if ( k == 0 ) + { + return null; + } + if ( (p-k) < 0 ) + { + return null; + } + return nodes[p-k]; + } + + /// <summary> + /// Where is this stream pulling nodes from? This is not the name, but + /// the object that provides node objects. + /// </summary> + virtual public object TreeSource + { + get { return root; } + } + + virtual public string SourceName { + get { return TokenStream.SourceName; } + } + + virtual public ITokenStream TokenStream + { + get { return tokens; } + set { this.tokens = value; } + } + + public ITreeAdaptor TreeAdaptor + { + get { return adaptor; } + set { adaptor = value; } + } + + public bool HasUniqueNavigationNodes + { + get { return uniqueNavigationNodes; } + set { uniqueNavigationNodes = value; } + } + + /// <summary> + /// Make stream jump to a new location, saving old location. + /// Switch back with pop(). + /// </summary> + public void Push(int index) + { + if ( calls == null ) + { + calls = new StackList(); + } + calls.Push(p); // save current index + Seek(index); + } + + /// <summary> + /// Seek back to previous index saved during last Push() call. + /// Return top of stack (return index). + /// </summary> + public int Pop() + { + int ret = (int)calls.Pop(); + Seek(ret); + return ret; + } + + public void Reset() + { + p = -1; + lastMarker = 0; + if (calls != null) + { + calls.Clear(); + } + } + + #endregion + + #region Tree Rewrite Interface + + public void ReplaceChildren(object parent, int startChildIndex, int stopChildIndex, object t) + { + if (parent != null) + { + adaptor.ReplaceChildren(parent, startChildIndex, stopChildIndex, t); + } + } + + #endregion + + #region Satisfy IntStream interface + + public virtual void Consume() + { + if (p == -1) + { + FillBuffer(); + } + p++; + } + + public virtual int LA(int i) + { + return adaptor.GetNodeType( LT(i) ); + } + + /// <summary> + /// Record the current state of the tree walk which includes + /// the current node and stack state. + /// </summary> + public virtual int Mark() + { + if ( p == -1 ) + { + FillBuffer(); + } + lastMarker = Index(); + return lastMarker; + } + + public virtual void Release(int marker) + { + // no resources to release + } + + /// <summary> + /// Rewind the current state of the tree walk to the state it + /// was in when Mark() was called and it returned marker. Also, + /// wipe out the lookahead which will force reloading a few nodes + /// but it is better than making a copy of the lookahead buffer + /// upon Mark(). + /// </summary> + public virtual void Rewind(int marker) + { + Seek(marker); + } + + public void Rewind() + { + Seek(lastMarker); + } + + /// <summary> + /// Consume() ahead until we hit index. Can't just jump ahead--must + /// spit out the navigation nodes. + /// </summary> + public virtual void Seek(int index) + { + if ( p == -1 ) + { + FillBuffer(); + } + p = index; + } + + public virtual int Index() + { + return p; + } + + /// <summary> + /// Expensive to compute so I won't bother doing the right thing. + /// This method only returns how much input has been seen so far. So + /// after parsing it returns true size. + /// </summary> + [Obsolete("Please use property Count instead.")] + public virtual int Size() + { + return Count; + } + + /// <summary> + /// Expensive to compute so I won't bother doing the right thing. + /// This method only returns how much input has been seen so far. So + /// after parsing it returns true size. + /// </summary> + public virtual int Count + { + get + { + if ( p == -1 ) + { + FillBuffer(); + } + return nodes.Count; + } + } + + #endregion + + /// <summary> + /// Used for testing, just return the token type stream + /// </summary> + public override string ToString() + { + if ( p == -1 ) + { + FillBuffer(); + } + StringBuilder buf = new StringBuilder(); + for (int i = 0; i < nodes.Count; i++) + { + object t = (object) nodes[i]; + buf.Append(" "); + buf.Append(adaptor.GetNodeType(t)); + } + return buf.ToString(); + } + + /** Debugging */ + public String ToTokenString(int start, int stop) { + if ( p==-1 ) { + FillBuffer(); + } + StringBuilder buf = new StringBuilder(); + for (int i = start; i < nodes.Count && i <= stop; i++) { + Object t = (Object) nodes[i]; + buf.Append(" "); + buf.Append(adaptor.GetToken(t)); + } + return buf.ToString(); + } + + public virtual string ToString(object start, object stop) + { + Console.Out.WriteLine("ToString"); + if ( (start == null) || (stop == null) ) + { + return null; + } + if ( p == -1 ) + { + FillBuffer(); + } + //Console.Out.WriteLine("stop: " + stop); + if ( start is CommonTree ) + Console.Out.Write("ToString: " + ((CommonTree)start).Token + ", "); + else + Console.Out.WriteLine(start); + if ( stop is CommonTree ) + Console.Out.WriteLine(((CommonTree)stop).Token); + else + Console.Out.WriteLine(stop); + // if we have the token stream, use that to dump text in order + if ( tokens != null ) + { + int beginTokenIndex = adaptor.GetTokenStartIndex(start); + int endTokenIndex = adaptor.GetTokenStopIndex(stop); + // if it's a tree, use start/stop index from start node + // else use token range from start/stop nodes + if ( adaptor.GetNodeType(stop) == Token.UP ) + { + endTokenIndex = adaptor.GetTokenStopIndex(start); + } + else if ( adaptor.GetNodeType(stop) == Token.EOF ) + { + endTokenIndex = Count-2; // don't use EOF + } + return tokens.ToString(beginTokenIndex, endTokenIndex); + } + // walk nodes looking for start + object t = null; + int i = 0; + for (; i < nodes.Count; i++) + { + t = nodes[i]; + if ( t == start ) + { + break; + } + } + // now walk until we see stop, filling string buffer with text + StringBuilder buf = new StringBuilder(); + t = nodes[i]; + string text; + while ( t != stop ) + { + text = adaptor.GetNodeText(t); + if ( text == null ) + { + text = " " + adaptor.GetNodeType(t); + } + buf.Append(text); + i++; + t = nodes[i]; + } + // include stop node too + text = adaptor.GetNodeText(stop); + if ( text == null ) + { + text = " " + adaptor.GetNodeType(stop); + } + buf.Append(text); + return buf.ToString(); + } + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ITree.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ITree.cs new file mode 100644 index 0000000..a49278f --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ITree.cs @@ -0,0 +1,182 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tree +{ + using System; + using System.Collections; + using Token = Antlr.Runtime.Token; + + /// <summary> + /// What does a tree look like? ANTLR has a number of support classes + /// such as CommonTreeNodeStream that work on these kinds of trees. You + /// don't have to make your trees implement this interface, but if you do, + /// you'll be able to use more support code. + /// + /// NOTE: When constructing trees, ANTLR can build any kind of tree; it can + /// even use Token objects as trees if you add a child list to your tokens. + /// + /// This is a tree node without any payload; just navigation and factory stuff. + /// </summary> + public interface ITree + { + int ChildCount + { + get; + + } + + // Tree tracks parent and child index now > 3.0 + + ITree Parent + { + get; + set; + } + + /// <summary> + /// Is there is a node above with token type ttype? + /// </summary> + bool HasAncestor(int ttype); + + /// <summary> + /// Walk upwards and get first ancestor with this token type. + /// </summary> + /// <param name="ttype"> + /// A <see cref="System.Int32"/> + /// </param> + /// <returns> + /// A <see cref="ITree"/> + /// </returns> + ITree GetAncestor(int ttype); + + /// <summary> + /// Return a list of all ancestors of this node. The first node of + /// list is the root and the last is the parent of this node. + /// </summary> + /// <returns> + /// A <see cref="IList"/> + /// </returns> + IList GetAncestors(); + + /// <summary>This node is what child index? 0..n-1</summary> + int ChildIndex + { + get; + set; + } + + /// <summary>Set (or reset) the parent and child index values for all children</summary> + void FreshenParentAndChildIndexes(); + + /// <summary> + /// Indicates the node is a nil node but may still have children, meaning + /// the tree is a flat list. + /// </summary> + bool IsNil + { + get; + + } + /// <summary>Return a token type; needed for tree parsing </summary> + int Type + { + get; + + } + + string Text + { + get; + + } + + /// <summary>In case we don't have a token payload, what is the line for errors? </summary> + int Line + { + get; + + } + int CharPositionInLine + { + get; + + } + + ITree GetChild(int i); + + /// <summary> + /// Add t as a child to this node. If t is null, do nothing. If t + /// is nil, add all children of t to this' children. + /// </summary> + /// <param name="t">Tree to add</param> + void AddChild(ITree t); + + /// <summary>Set ith child (0..n-1) to t; t must be non-null and non-nil node</summary> + void SetChild(int i, ITree t); + + object DeleteChild(int i); + + /// <summary> + /// Delete children from start to stop and replace with t even if t is + /// a list (nil-root tree). num of children can increase or decrease. + /// For huge child lists, inserting children can force walking rest of + /// children to set their childindex; could be slow. + /// </summary> + void ReplaceChildren(int startChildIndex, int stopChildIndex, object t); + + /// <summary> + /// What is the smallest token index (indexing from 0) for this node + /// and its children? + /// </summary> + int TokenStartIndex { get; set; } + + /// <summary> + /// What is the largest token index (indexing from 0) for this node + /// and its children? + /// </summary> + int TokenStopIndex { get; set; } + + ITree DupNode(); + + string ToStringTree(); + + string ToString(); + } + + public sealed class Tree + { + public readonly static ITree INVALID_NODE = new CommonTree(Token.INVALID_TOKEN); + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ITreeAdaptor.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ITreeAdaptor.cs new file mode 100644 index 0000000..4500b95 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ITreeAdaptor.cs @@ -0,0 +1,323 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tree +{ + using System; + using IToken = Antlr.Runtime.IToken; + + /// <summary> + /// How to create and navigate trees. Rather than have a separate factory + /// and adaptor, I've merged them. Makes sense to encapsulate. + /// + /// This takes the place of the tree construction code generated in the + /// generated code in 2.x and the ASTFactory. + /// + /// I do not need to know the type of a tree at all so they are all + /// generic Objects. This may increase the amount of typecasting needed. :( + /// </summary> + public interface ITreeAdaptor + { + // C o n s t r u c t i o n + + /// <summary> + /// Create a tree node from Token object; for CommonTree type trees, + /// then the token just becomes the payload. + /// </summary> + /// <remarks> + /// This is the most common create call. Override if you want another kind of node to be built. + /// </remarks> + object Create(IToken payload); + + /// <summary>Duplicate a single tree node </summary> + /// <remarks> Override if you want another kind of node to be built.</remarks> + object DupNode(object treeNode); + + /// <summary>Duplicate tree recursively, using DupNode() for each node </summary> + object DupTree(object tree); + + /// <summary> + /// Return a nil node (an empty but non-null node) that can hold + /// a list of element as the children. If you want a flat tree (a list) + /// use "t=adaptor.nil(); t.AddChild(x); t.AddChild(y);" + /// </summary> + object GetNilNode(); + + /// <summary> + /// Return a tree node representing an error. This node records the + /// tokens consumed during error recovery. The start token indicates the + /// input symbol at which the error was detected. The stop token indicates + /// the last symbol consumed during recovery. + /// </summary> + /// <remarks> + /// <para>You must specify the input stream so that the erroneous text can + /// be packaged up in the error node. The exception could be useful + /// to some applications; default implementation stores ptr to it in + /// the CommonErrorNode.</para> + /// + /// <para>This only makes sense during token parsing, not tree parsing. + /// Tree parsing should happen only when parsing and tree construction + /// succeed.</para> + /// </remarks> + object ErrorNode(ITokenStream input, IToken start, IToken stop, RecognitionException e); + + /// <summary> + /// Is tree considered a nil node used to make lists of child nodes? + /// </summary> + bool IsNil(object tree); + + /// <summary> + /// Add a child to the tree t. If child is a flat tree (a list), make all + /// in list children of t. + /// </summary> + /// <remarks> + /// <para> + /// Warning: if t has no children, but child does and child isNil then you + /// can decide it is ok to move children to t via t.children = child.children; + /// i.e., without copying the array. Just make sure that this is consistent + /// with have the user will build ASTs. Do nothing if t or child is null. + /// </para> + /// <para> + /// This is for construction and I'm not sure it's completely general for + /// a tree's addChild method to work this way. Make sure you differentiate + /// between your tree's addChild and this parser tree construction addChild + /// if it's not ok to move children to t with a simple assignment. + /// </para> + /// </remarks> + void AddChild(object t, object child); + + /// <summary> + /// If oldRoot is a nil root, just copy or move the children to newRoot. + /// If not a nil root, make oldRoot a child of newRoot. + /// </summary> + /// <remarks> + /// + /// old=^(nil a b c), new=r yields ^(r a b c) + /// old=^(a b c), new=r yields ^(r ^(a b c)) + /// + /// If newRoot is a nil-rooted single child tree, use the single + /// child as the new root node. + /// + /// old=^(nil a b c), new=^(nil r) yields ^(r a b c) + /// old=^(a b c), new=^(nil r) yields ^(r ^(a b c)) + /// + /// If oldRoot was null, it's ok, just return newRoot (even if isNil). + /// + /// old=null, new=r yields r + /// old=null, new=^(nil r) yields ^(nil r) + /// + /// Return newRoot. Throw an exception if newRoot is not a + /// simple node or nil root with a single child node--it must be a root + /// node. If newRoot is ^(nil x) return x as newRoot. + /// + /// Be advised that it's ok for newRoot to point at oldRoot's + /// children; i.e., you don't have to copy the list. We are + /// constructing these nodes so we should have this control for + /// efficiency. + /// </remarks> + object BecomeRoot(object newRoot, object oldRoot); + + /// <summary> + /// Given the root of the subtree created for this rule, post process + /// it to do any simplifications or whatever you want. A required + /// behavior is to convert ^(nil singleSubtree) to singleSubtree + /// as the setting of start/stop indexes relies on a single non-nil root + /// for non-flat trees. + /// + /// Flat trees such as for lists like "idlist : ID+ ;" are left alone + /// unless there is only one ID. For a list, the start/stop indexes + /// are set in the nil node. + /// + /// This method is executed after all rule tree construction and right + /// before SetTokenBoundaries(). + /// </summary> + object RulePostProcessing(object root); + + /// <summary> + /// For identifying trees. How to identify nodes so we can say "add node + /// to a prior node"? + /// </summary> + /// <remarks> + /// Even BecomeRoot is an issue. Ok, we could: + /// <list type="number"> + /// <item>Number the nodes as they are created?</item> + /// <item> + /// Use the original framework assigned hashcode that's unique + /// across instances of a given type. + /// WARNING: This is usually implemented either as IL to make a + /// non-virt call to object.GetHashCode() or by via a call to + /// System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(). + /// Both have issues especially on .NET 1.x and Mono. + /// </item> + /// </list> + /// </remarks> + int GetUniqueID(object node); + + + #region R e w r i t e R u l e s + + /// <summary> + /// Create a node for newRoot make it the root of oldRoot. + /// If oldRoot is a nil root, just copy or move the children to newRoot. + /// If not a nil root, make oldRoot a child of newRoot. + /// + /// Return node created for newRoot. + /// </summary> + object BecomeRoot(IToken newRoot, object oldRoot); + + /// <summary>Create a new node derived from a token, with a new token type. + /// This is invoked from an imaginary node ref on right side of a + /// rewrite rule as IMAG[$tokenLabel]. + /// + /// This should invoke createToken(Token). + /// </summary> + object Create(int tokenType, IToken fromToken); + + /// <summary>Same as Create(tokenType,fromToken) except set the text too. + /// This is invoked from an imaginary node ref on right side of a + /// rewrite rule as IMAG[$tokenLabel, "IMAG"]. + /// + /// This should invoke createToken(Token). + /// </summary> + object Create(int tokenType, IToken fromToken, string text); + + /// <summary>Create a new node derived from a token, with a new token type. + /// This is invoked from an imaginary node ref on right side of a + /// rewrite rule as IMAG["IMAG"]. + /// + /// This should invoke createToken(int,String). + /// </summary> + object Create(int tokenType, string text); + + #endregion + + #region C o n t e n t + + /// <summary>For tree parsing, I need to know the token type of a node </summary> + int GetNodeType(object t); + + /// <summary>Node constructors can set the type of a node </summary> + void SetNodeType(object t, int type); + + string GetNodeText(object t); + + /// <summary>Node constructors can set the text of a node </summary> + void SetNodeText(object t, string text); + + + /// <summary> + /// Return the token object from which this node was created. + /// </summary> + /// <remarks> + /// Currently used only for printing an error message. The error + /// display routine in BaseRecognizer needs to display where the + /// input the error occurred. If your tree of limitation does not + /// store information that can lead you to the token, you can create + /// a token filled with the appropriate information and pass that back. + /// <see cref="BaseRecognizer.GetErrorMessage"/> + /// </remarks> + IToken GetToken(object treeNode); + + /// <summary> + /// Where are the bounds in the input token stream for this node and + /// all children? + /// </summary> + /// <remarks> + /// Each rule that creates AST nodes will call this + /// method right before returning. Flat trees (i.e., lists) will + /// still usually have a nil root node just to hold the children list. + /// That node would contain the start/stop indexes then. + /// </remarks> + void SetTokenBoundaries(object t, IToken startToken, IToken stopToken); + + /// <summary> + /// Get the token start index for this subtree; return -1 if no such index + /// </summary> + int GetTokenStartIndex(object t); + + /// <summary> + /// Get the token stop index for this subtree; return -1 if no such index + /// </summary> + int GetTokenStopIndex(object t); + + #endregion + + #region N a v i g a t i o n / T r e e P a r s i n g + + /// <summary>Get a child 0..n-1 node </summary> + object GetChild(object t, int i); + + /// <summary>Set ith child (0..n-1) to t; t must be non-null and non-nil node</summary> + void SetChild(object t, int i, object child); + + /// <summary>Remove ith child and shift children down from right.</summary> + object DeleteChild(object t, int i); + + /// <summary>How many children? If 0, then this is a leaf node </summary> + int GetChildCount(object t); + + /// <summary> + /// Who is the parent node of this node; if null, implies node is root. + /// </summary> + /// <remarks> + /// If your node type doesn't handle this, it's ok but the tree rewrites + /// in tree parsers need this functionality. + /// </remarks> + object GetParent(object t); + void SetParent(object t, object parent); + + /// <summary> + /// What index is this node in the child list? Range: 0..n-1 + /// </summary> + /// <remarks> + /// If your node type doesn't handle this, it's ok but the tree rewrites + /// in tree parsers need this functionality. + /// </remarks> + int GetChildIndex(object t); + void SetChildIndex(object t, int index); + + /// <summary> + /// Replace from start to stop child index of parent with t, which might + /// be a list. Number of children may be different after this call. + /// </summary> + /// <remarks> + /// If parent is null, don't do anything; must be at root of overall tree. + /// Can't replace whatever points to the parent externally. Do nothing. + /// </remarks> + void ReplaceChildren(object parent, int startChildIndex, int stopChildIndex, object t); + + #endregion + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ITreeNodeStream.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ITreeNodeStream.cs new file mode 100644 index 0000000..ca38e61 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ITreeNodeStream.cs @@ -0,0 +1,138 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tree +{ + using System; + using IIntStream = Antlr.Runtime.IIntStream; + using ITokenStream = Antlr.Runtime.ITokenStream; + + /// <summary>A stream of tree nodes, accessing nodes from a tree of some kind </summary> + public interface ITreeNodeStream : IIntStream + { + /// <summary>Get a tree node at an absolute index i; 0..n-1.</summary> + /// <remarks> + /// If you don't want to buffer up nodes, then this method makes no + /// sense for you. + /// </remarks> + object Get(int i); + + /// <summary> + /// Where is this stream pulling nodes from? This is not the name, but + /// the object that provides node objects. + /// + /// TODO: do we really need this? + /// </summary> + object TreeSource + { + get; + } + + /// <summary> + /// Get the ITokenStream from which this stream's Tree was created + /// (may be null) + /// </summary> + /// <remarks> + /// If the tree associated with this stream was created from a + /// TokenStream, you can specify it here. Used to do rule $text + /// attribute in tree parser. Optional unless you use tree parser + /// rule text attribute or output=template and rewrite=true options. + /// </remarks> + ITokenStream TokenStream + { + get; + } + + /// <summary> + /// What adaptor can tell me how to interpret/navigate nodes and trees. + /// E.g., get text of a node. + /// </summary> + ITreeAdaptor TreeAdaptor + { + get; + } + + /// <summary> + /// As we flatten the tree, we use UP, DOWN nodes to represent + /// the tree structure. When debugging we need unique nodes + /// so we have to instantiate new ones. When doing normal tree + /// parsing, it's slow and a waste of memory to create unique + /// navigation nodes. Default should be false; + /// </summary> + bool HasUniqueNavigationNodes + { + set; + } + + /// <summary> + /// Get tree node at current input pointer + i ahead where i=1 is next node. + /// i<0 indicates nodes in the past. So LT(-1) is previous node, but + /// implementations are not required to provide results for k < -1. + /// LT(0) is undefined. For i>=n, return null. + /// Return null for LT(0) and any index that results in an absolute address + /// that is negative. + /// + /// This is analogus to the LT() method of the TokenStream, but this + /// returns a tree node instead of a token. Makes code gen identical + /// for both parser and tree grammars. :) + /// </summary> + object LT(int k); + + /// <summary>Return the text of all nodes from start to stop, inclusive. + /// If the stream does not buffer all the nodes then it can still + /// walk recursively from start until stop. You can always return + /// null or "" too, but users should not access $ruleLabel.text in + /// an action of course in that case. + /// </summary> + string ToString(object start, object stop); + + #region REWRITING TREES (used by tree parser) + + /// <summary> + /// Replace from start to stop child index of parent with t, which might + /// be a list. Number of children may be different after this call. + /// </summary> + /// <remarks> + /// The stream is notified because it is walking the tree and might need + /// to know you are monkeying with the underlying tree. Also, it might be + /// able to modify the node stream to avoid restreaming for future phases. + /// + /// If parent is null, don't do anything; must be at root of overall tree. + /// Can't replace whatever points to the parent externally. Do nothing. + /// </remarks> + void ReplaceChildren(object parent, int startChildIndex, int stopChildIndex, object t); + + #endregion + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ITreeVisitorAction.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ITreeVisitorAction.cs new file mode 100644 index 0000000..382ef9c --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ITreeVisitorAction.cs @@ -0,0 +1,22 @@ +namespace Antlr.Runtime.Tree +{ + /// <summary> + /// How to execute code for node t when a visitor visits node t. Execute + /// Pre() before visiting children and execute Post() after visiting children. + /// </summary> + public interface ITreeVisitorAction + { + /// <summary> + /// Execute an action before visiting children of t. Return t or + /// a rewritten t. Children of returned value will be visited. + /// </summary> + object Pre(object t); + + /// <summary> + /// Execute an action after visiting children of t. Return t or + /// a rewritten t. It is up to the visitor to decide what to do + /// with the return value. + /// </summary> + object Post(object t); + } +} diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ParseTree.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ParseTree.cs new file mode 100644 index 0000000..98a5034 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/ParseTree.cs @@ -0,0 +1,136 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +Copyright (c) 2007-2008 Johannes Luber +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tree +{ + using System; + using System.Collections; + using System.Text; + using IToken = Antlr.Runtime.IToken; + + /// <summary> + /// A record of the rules used to Match a token sequence. The tokens + /// end up as the leaves of this tree and rule nodes are the interior nodes. + /// This really adds no functionality, it is just an alias for CommonTree + /// that is more meaningful (specific) and holds a String to display for a node. + /// </summary> + public class ParseTree : BaseTree + { + public object payload; + public IList hiddenTokens; + + public ParseTree(object label) + { + this.payload = label; + } + + override public int Type + { + get { return 0; } + } + + override public string Text + { + get { return ToString(); } + } + + override public int TokenStartIndex + { + get { return 0; } + set { ; } + } + + override public int TokenStopIndex + { + get { return 0; } + set { ; } + } + + public override ITree DupNode() + { + return null; + } + + public override string ToString() + { + if ( payload is IToken ) + { + IToken t = (IToken)payload; + if ( t.Type == Token.EOF ) + { + return "<EOF>"; + } + return t.Text; + } + return payload.ToString(); + } + + /** Emit a token and all hidden nodes before. EOF node holds all + * hidden tokens after last real token. + */ + public string ToStringWithHiddenTokens() { + StringBuilder buf = new StringBuilder(); + if ( hiddenTokens!=null ) { + for (int i = 0; i < hiddenTokens.Count; i++) { + IToken hidden = (IToken) hiddenTokens[i]; + buf.Append(hidden.Text); + } + } + String nodeText = this.ToString(); + if ( nodeText != "<EOF>" ) buf.Append(nodeText); + return buf.ToString(); + } + + /** Print out the leaves of this tree, which means printing original + * input back out. + */ + public string ToInputString() { + StringBuilder buf = new StringBuilder(); + _ToStringLeaves(buf); + return buf.ToString(); + } + + public void _ToStringLeaves(StringBuilder buf) { + if ( payload is IToken ) { // leaf node token? + buf.Append(this.ToStringWithHiddenTokens()); + return; + } + for (int i = 0; children!=null && i < children.Count; i++) { + ParseTree t = (ParseTree)children[i]; + t._ToStringLeaves(buf); + } + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteCardinalityException.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteCardinalityException.cs new file mode 100644 index 0000000..ab8f0ef --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteCardinalityException.cs @@ -0,0 +1,81 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tree +{ + using System; + + /// <summary>Base class for all exceptions thrown during AST rewrite construction.</summary> + /// <remarks> + /// This signifies a case where the cardinality of two or more elements + /// in a subrule are different: (ID INT)+ where |ID|!=|INT| + /// </remarks> + [Serializable] + public class RewriteCardinalityException : Exception + { + #region Constructors + + public RewriteCardinalityException(string elementDescription) + { + this.elementDescription = elementDescription; + } + + #endregion + + #region Public API + + /// <summary> + /// Returns the line at which the error occurred (for lexers) + /// </summary> + override public string Message + { + get + { + if ( elementDescription != null ) + { + return elementDescription; + } + return null; + } + } + + #endregion + + #region Data Members + + public string elementDescription; + + #endregion + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteEarlyExitException.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteEarlyExitException.cs new file mode 100644 index 0000000..2c49468 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteEarlyExitException.cs @@ -0,0 +1,55 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tree +{ + using System; + + /// <summary> + /// No elements within a (...)+ in a rewrite rule + /// </summary> + [Serializable] + public class RewriteEarlyExitException : RewriteCardinalityException + { + public RewriteEarlyExitException() + : base(null) + { + } + + public RewriteEarlyExitException(string elementDescription) + : base(elementDescription) + { + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteEmptyStreamException.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteEmptyStreamException.cs new file mode 100644 index 0000000..6dc2933 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteEmptyStreamException.cs @@ -0,0 +1,50 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tree +{ + using System; + + /// <summary> + /// Ref to ID or expr but no tokens in ID stream or subtrees in expr stream + /// </summary> + [Serializable] + public class RewriteEmptyStreamException : RewriteCardinalityException + { + public RewriteEmptyStreamException(string elementDescription) + : base(elementDescription) + { + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteRuleElementStream.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteRuleElementStream.cs new file mode 100644 index 0000000..480381f --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteRuleElementStream.cs @@ -0,0 +1,466 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +Copyright (c) 2007 Johannes Luber +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#if DOTNET1 +namespace Antlr.Runtime.Tree +{ + using System; + using IList = System.Collections.IList; + using ArrayList = System.Collections.ArrayList; + using IToken = Antlr.Runtime.IToken; + using CommonToken = Antlr.Runtime.CommonToken; + + /// <summary> + /// A generic list of elements tracked in an alternative to be used in + /// a -> rewrite rule. We need to subclass to fill in the next() method, + /// which returns either an AST node wrapped around a token payload or + /// an existing subtree. + /// + /// Once you start next()ing, do not try to add more elements. It will + /// break the cursor tracking I believe. + /// + /// <see cref="RewriteRuleSubtreeStream"/> + /// <see cref="RewriteRuleTokenStream"/> + /// + /// TODO: add mechanism to detect/puke on modification after reading from stream + /// </summary> + public abstract class RewriteRuleElementStream + { + /// <summary> + /// Cursor 0..n-1. If singleElement!=null, cursor is 0 until you next(), + /// which bumps it to 1 meaning no more elements. + /// </summary> + protected int cursor = 0; + + /// <summary> + /// Track single elements w/o creating a list. Upon 2nd add, alloc list + /// </summary> + protected object singleElement; + + /// <summary> + /// The list of tokens or subtrees we are tracking + /// </summary> + protected IList elements; + + /// <summary> + /// Tracks whether a node or subtree has been used in a stream + /// </summary> + /// <remarks> + /// Once a node or subtree has been used in a stream, it must be dup'd + /// from then on. Streams are reset after subrules so that the streams + /// can be reused in future subrules. So, reset must set a dirty bit. + /// If dirty, then next() always returns a dup. + /// </remarks> + protected bool dirty = false; + + /// <summary> + /// The element or stream description; usually has name of the token or + /// rule reference that this list tracks. Can include rulename too, but + /// the exception would track that info. + /// </summary> + protected string elementDescription; + protected ITreeAdaptor adaptor; + + public RewriteRuleElementStream(ITreeAdaptor adaptor, string elementDescription) + { + this.elementDescription = elementDescription; + this.adaptor = adaptor; + } + + /// <summary> + /// Create a stream with one element + /// </summary> + public RewriteRuleElementStream(ITreeAdaptor adaptor, string elementDescription, object oneElement) + : this(adaptor, elementDescription) + { + Add(oneElement); + } + + /// <summary> + /// Create a stream, but feed off an existing list + /// </summary> + public RewriteRuleElementStream(ITreeAdaptor adaptor, string elementDescription, IList elements) + : this(adaptor, elementDescription) + { + this.singleElement = null; + this.elements = elements; + } + + public void Add(object el) + { + if ( el == null ) + { + return; + } + if ( elements != null ) + { // if in list, just add + elements.Add(el); + return; + } + if ( singleElement == null ) + { // no elements yet, track w/o list + singleElement = el; + return; + } + // adding 2nd element, move to list + elements = new ArrayList(5); + elements.Add(singleElement); + singleElement = null; + elements.Add(el); + } + + /// <summary> + /// Reset the condition of this stream so that it appears we have + /// not consumed any of its elements. Elements themselves are untouched. + /// </summary> + /// <remarks> + /// Once we reset the stream, any future use will need duplicates. Set + /// the dirty bit. + /// </remarks> + public virtual void Reset() + { + cursor = 0; + dirty = true; + } + + public bool HasNext() + { + return ( ((singleElement != null) && (cursor < 1)) || + ((elements != null) && (cursor < elements.Count)) ); + } + + /// <summary> + /// Return the next element in the stream. + /// </summary> + /// <remarks> + /// If out of elements, throw an exception unless Count==1. + /// If Count is 1, then return elements[0]. + /// Return a duplicate node/subtree if stream is out of + /// elements and Count==1. + /// If we've already used the element, dup (dirty bit set). + /// </remarks> + public virtual object NextTree() + { + int size = Count; + if ( dirty || ((cursor >= size) && (size == 1)) ) + { + // if out of elements and size is 1, dup + return Dup(_Next()); + } + // test size above then fetch + return _Next(); + } + + /// <summary> + /// Do the work of getting the next element, making sure that + /// it's a tree node or subtree. + /// </summary> + /// <remarks> + /// Deal with the optimization of single-element list versus + /// list of size > 1. Throw an exception if the stream is + /// empty or we're out of elements and size>1. + /// </remarks> + protected object _Next() + { + int size = Count; + if ( size == 0 ) + { + throw new RewriteEmptyStreamException(elementDescription); + } + if ( cursor >= size ) + { // out of elements? + if ( size == 1 ) + { // if size is 1, it's ok; return and we'll dup + return ToTree(singleElement); + } + // out of elements and size was not 1, so we can't dup + throw new RewriteCardinalityException(elementDescription); + } + // we have elements + if ( singleElement != null ) + { + cursor++; // move cursor even for single element list + return ToTree(singleElement); + } + // must have more than one in list, pull from elements + return ToTree(elements[cursor++]); + } + + /// <summary> + /// When constructing trees, sometimes we need to dup a token or AST + /// subtree. Dup'ing a token means just creating another AST node + /// around it. For trees, you must call the adaptor.dupTree() + /// unless the element is for a tree root; then it must be a node dup + /// </summary> + protected abstract object Dup(object el); + + /// <summary> + /// Ensure stream emits trees; tokens must be converted to AST nodes. + /// AST nodes can be passed through unmolested. + /// </summary> + protected virtual object ToTree(object el) + { + return el; + } + +#warning Size() should be converted into a property named Count. + public int Size() + { + if (singleElement != null) { + return 1; + } + if (elements != null) { + return elements.Count; + } + return 0; + } + + public string Description + { + get { return elementDescription; } + } + } +} +#elif DOTNET2 +namespace Antlr.Runtime.Tree { + using System; + using System.Collections.Generic; + using IToken = Antlr.Runtime.IToken; + using CommonToken = Antlr.Runtime.CommonToken; + + /// <summary> + /// A generic list of elements tracked in an alternative to be used in + /// a -> rewrite rule. We need to subclass to fill in the next() method, + /// which returns either an AST node wrapped around a token payload or + /// an existing subtree. + /// + /// Once you start next()ing, do not try to add more elements. It will + /// break the cursor tracking I believe. + /// + /// <see cref="RewriteRuleSubtreeStream"/> + /// <see cref="RewriteRuleTokenStream"/> + /// + /// TODO: add mechanism to detect/puke on modification after reading from stream + /// </summary> + public abstract class RewriteRuleElementStream<T> { + /// <summary> + /// Cursor 0..n-1. If singleElement!=null, cursor is 0 until you next(), + /// which bumps it to 1 meaning no more elements. + /// </summary> + protected int cursor = 0; + + /// <summary> + /// Track single elements w/o creating a list. Upon 2nd add, alloc list + /// </summary> + protected T singleElement; + + /// <summary> + /// The list of tokens or subtrees we are tracking + /// </summary> + protected IList<T> elements; + + /// <summary> + /// Tracks whether a node or subtree has been used in a stream + /// </summary> + /// <remarks> + /// Once a node or subtree has been used in a stream, it must be dup'd + /// from then on. Streams are reset after subrules so that the streams + /// can be reused in future subrules. So, reset must set a dirty bit. + /// If dirty, then next() always returns a dup. + /// </remarks> + protected bool dirty = false; + + /// <summary> + /// The element or stream description; usually has name of the token or + /// rule reference that this list tracks. Can include rulename too, but + /// the exception would track that info. + /// </summary> + protected string elementDescription; + protected ITreeAdaptor adaptor; + + public RewriteRuleElementStream(ITreeAdaptor adaptor, string elementDescription) { + this.elementDescription = elementDescription; + this.adaptor = adaptor; + } + + /// <summary> + /// Create a stream with one element + /// </summary> + public RewriteRuleElementStream( + ITreeAdaptor adaptor, + string elementDescription, + T oneElement + ) + : this(adaptor, elementDescription) { + Add(oneElement); + } + + /// <summary> + /// Create a stream, but feed off an existing list + /// </summary> + public RewriteRuleElementStream( + ITreeAdaptor adaptor, + string elementDescription, + IList<T> elements + ) + : this(adaptor, elementDescription) { + this.singleElement = default(T); + this.elements = elements; + } + + /// <summary> + /// Create a stream, but feed off an existing list + /// </summary> + [Obsolete("This constructor is for internal use only and might be phased out soon. Use instead the one with IList<T>.")] + public RewriteRuleElementStream( + ITreeAdaptor adaptor, + string elementDescription, + System.Collections.IList elements + ) + : this(adaptor, elementDescription) { + this.singleElement = default(T); + this.elements = new List<T>(); + if (elements != null) { + foreach (T t in elements) { + this.elements.Add(t); + } + } + } + + public void Add(T el) { + if (el == null) { + return; + } + if (elements != null) { // if in list, just add + elements.Add(el); + return; + } + if (singleElement == null) { // no elements yet, track w/o list + singleElement = el; + return; + } + // adding 2nd element, move to list + elements = new List<T>(5); + elements.Add(singleElement); + singleElement = default(T); + elements.Add(el); + } + + /// <summary> + /// Reset the condition of this stream so that it appears we have + /// not consumed any of its elements. Elements themselves are untouched. + /// </summary> + /// <remarks> + /// Once we reset the stream, any future use will need duplicates. Set + /// the dirty bit. + /// </remarks> + public virtual void Reset() { + cursor = 0; + dirty = true; + } + + public bool HasNext() { + return (((singleElement != null) && (cursor < 1)) || + ((elements != null) && (cursor < elements.Count))); + } + + /// <summary> + /// Return the next element in the stream. + /// </summary> + public virtual object NextTree() { + return _Next(); + } + + /// <summary> + /// Do the work of getting the next element, making sure that + /// it's a tree node or subtree. + /// </summary> + /// <remarks> + /// Deal with the optimization of single-element list versus + /// list of size > 1. Throw an exception if the stream is + /// empty or we're out of elements and size>1. + /// </remarks> + protected object _Next() { + int size = Count; + if (size == 0) { + throw new RewriteEmptyStreamException(elementDescription); + } + if (cursor >= size) { // out of elements? + if (size == 1) { // if size is 1, it's ok; return and we'll dup + return ToTree(singleElement); + } + // out of elements and size was not 1, so we can't dup + throw new RewriteCardinalityException(elementDescription); + } + // we have elements + if (singleElement != null) { + cursor++; // move cursor even for single element list + return ToTree(singleElement); + } + // must have more than one in list, pull from elements + return ToTree(elements[cursor++]); + } + + /// <summary> + /// Ensure stream emits trees; tokens must be converted to AST nodes. + /// AST nodes can be passed through unmolested. + /// </summary> + protected virtual object ToTree(T el) { + return el; + } + + public int Count { + get { + if (singleElement != null) { + return 1; + } + if (elements != null) { + return elements.Count; + } + return 0; + } + } + + [Obsolete("Please use property Count instead.")] + public int Size() { + return Count; + } + + public string Description { + get { return elementDescription; } + } + } +} +#endif \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteRuleNodeStream.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteRuleNodeStream.cs new file mode 100644 index 0000000..33310c6 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteRuleNodeStream.cs @@ -0,0 +1,133 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +Copyright (c) 2007 Johannes Luber +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#if DOTNET1 +namespace Antlr.Runtime.Tree +{ + using System; + using IList = System.Collections.IList; + + /// <summary> + /// Queues up nodes matched on left side of -> in a tree parser. This is + /// the analog of RewriteRuleTokenStream for normal parsers. + /// </summary> + public class RewriteRuleNodeStream : RewriteRuleElementStream + { + public RewriteRuleNodeStream(ITreeAdaptor adaptor, string elementDescription) + : base(adaptor, elementDescription) + { + } + + /// <summary>Create a stream with one element</summary> + public RewriteRuleNodeStream(ITreeAdaptor adaptor, string elementDescription, object oneElement) + : base(adaptor, elementDescription, oneElement) + { + } + + /// <summary>Create a stream, but feed off an existing list</summary> + public RewriteRuleNodeStream(ITreeAdaptor adaptor, string elementDescription, IList elements) + : base(adaptor, elementDescription, elements) + { + } + + public object NextNode() + { + return _Next(); + } + + override protected object ToTree(object el) + { + return adaptor.DupNode(el); + } + + override protected object Dup(object el) + { + // we dup every node, so don't have to worry about calling dup; + // short-circuited NextTree() so it doesn't call. + throw new NotSupportedException("dup can't be called for a node stream."); + } + } +} +#elif DOTNET2 +namespace Antlr.Runtime.Tree { + using System; + using System.Collections.Generic; + using SpecializingType = System.Object; + + /// <summary> + /// Queues up nodes matched on left side of -> in a tree parser. This is + /// the analog of RewriteRuleTokenStream for normal parsers. + /// </summary> +#warning Check, if RewriteRuleNodeStream can be changed to take advantage of something more specific than object. + public class RewriteRuleNodeStream : RewriteRuleElementStream<SpecializingType> { + public RewriteRuleNodeStream(ITreeAdaptor adaptor, string elementDescription) + : base(adaptor, elementDescription) { + } + + /// <summary>Create a stream with one element</summary> + public RewriteRuleNodeStream( + ITreeAdaptor adaptor, + string elementDescription, + SpecializingType oneElement + ) : base(adaptor, elementDescription, oneElement) { + } + + /// <summary>Create a stream, but feed off an existing list</summary> + public RewriteRuleNodeStream( + ITreeAdaptor adaptor, + string elementDescription, + IList<SpecializingType> elements + ) : base(adaptor, elementDescription, elements) { + } + + /// <summary>Create a stream, but feed off an existing list</summary> + [Obsolete("This constructor is for internal use only and might be phased out soon. Use instead the one with IList<T>.")] + public RewriteRuleNodeStream( + ITreeAdaptor adaptor, + string elementDescription, + System.Collections.IList elements + ) : base(adaptor, elementDescription, elements) { + } + + public object NextNode() { + return _Next(); + } + + override protected object ToTree(object el) { + return adaptor.DupNode(el); + } + } +} +#endif \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteRuleSubtreeStream.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteRuleSubtreeStream.cs new file mode 100644 index 0000000..ec7e158 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteRuleSubtreeStream.cs @@ -0,0 +1,227 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +Copyright (c) 2007 Johannes Luber +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#if DOTNET1 +namespace Antlr.Runtime.Tree +{ + using System; + using IList = System.Collections.IList; + + public class RewriteRuleSubtreeStream : RewriteRuleElementStream + { + public RewriteRuleSubtreeStream(ITreeAdaptor adaptor, string elementDescription) + : base(adaptor, elementDescription) + { + } + + /// <summary> + /// Create a stream with one element + /// </summary> + public RewriteRuleSubtreeStream(ITreeAdaptor adaptor, string elementDescription, object oneElement) + : base(adaptor, elementDescription, oneElement) + { + } + + /// <summary> + /// Create a stream, but feed off an existing list + /// </summary> + public RewriteRuleSubtreeStream(ITreeAdaptor adaptor, string elementDescription, IList elements) + : base(adaptor, elementDescription, elements) + { + } + + /// <summary> + /// Treat next element as a single node even if it's a subtree. + /// </summary> + /// <remarks> + /// This is used instead of next() when the result has to be a + /// tree root node. Also prevents us from duplicating recently-added + /// children; e.g., ^(type ID)+ adds ID to type and then 2nd iteration + /// must dup the type node, but ID has been added. + /// + /// Referencing a rule result twice is ok; dup entire tree as + /// we can't be adding trees as root; e.g., expr expr. + /// + /// Hideous code duplication here with respect to base.NextTree() inherited from Java version. + /// Can't think of a proper way to refactor. This needs to always call dup node + /// and base.NextTree() doesn't know which to call: dup node or dup tree. + /// </remarks> + public object NextNode() + { + int size = Count; + if (dirty || ((cursor >= size) && (size == 1))) + { + // if out of elements and size is 1, dup (at most a single node + // since this is for making root nodes). + object el = _Next(); + return adaptor.DupNode(el); + } + // test size above then fetch + object elem = _Next(); + return elem; + } + + override protected object Dup(object el) + { + return adaptor.DupTree(el); + } + } +} +#elif DOTNET2 +namespace Antlr.Runtime.Tree { + using System; + using System.Collections.Generic; + using SpecializingType = System.Object; + +#warning Check, if RewriteRuleSubtreeStream can be changed to take advantage of something more specific than object. + /// <summary> + /// </summary> + /// <remarks></remarks> + /// <example></example> + public class RewriteRuleSubtreeStream : RewriteRuleElementStream<SpecializingType> { + + #region private delegate object ProcessHandler(object o) + /// <summary> + /// This delegate is used to allow the outfactoring of some common code. + /// </summary> + /// <param name="o">The to be processed object</param> + private delegate object ProcessHandler(object o); + #endregion + + public RewriteRuleSubtreeStream(ITreeAdaptor adaptor, string elementDescription) + : base(adaptor, elementDescription) { + } + + /// <summary> + /// Create a stream with one element + /// </summary> + public RewriteRuleSubtreeStream( + ITreeAdaptor adaptor, + string elementDescription, + SpecializingType oneElement + ) : base(adaptor, elementDescription, oneElement) { + } + + /// <summary>Create a stream, but feed off an existing list</summary> + public RewriteRuleSubtreeStream( + ITreeAdaptor adaptor, + string elementDescription, + IList<SpecializingType> elements + ) : base(adaptor, elementDescription, elements) { + } + + /// <summary>Create a stream, but feed off an existing list</summary> + [Obsolete("This constructor is for internal use only and might be phased out soon. Use instead the one with IList<T>.")] + public RewriteRuleSubtreeStream( + ITreeAdaptor adaptor, + string elementDescription, + System.Collections.IList elements + ) : base(adaptor, elementDescription, elements) { + } + + /// <summary> + /// Treat next element as a single node even if it's a subtree. + /// </summary> + /// <remarks> + /// This is used instead of next() when the result has to be a + /// tree root node. Also prevents us from duplicating recently-added + /// children; e.g., ^(type ID)+ adds ID to type and then 2nd iteration + /// must dup the type node, but ID has been added. + /// + /// Referencing a rule result twice is ok; dup entire tree as + /// we can't be adding trees as root; e.g., expr expr. + /// </remarks> + public object NextNode() { + // if necessary, dup (at most a single node since this is for making root nodes). + return FetchObject(delegate(object o) { return adaptor.DupNode(o); }); + } + + #region private object FetchObject(ProcessHandler ph) + /// <summary> + /// This method has the common code of two other methods, which differed in only one + /// function call. + /// </summary> + /// <param name="ph">The delegate, which has the chosen function</param> + /// <returns>The required object</returns> + private object FetchObject(ProcessHandler ph) { + if (RequiresDuplication()) { + // process the object + return ph(_Next()); + } + // test above then fetch + return _Next(); + } + #endregion + + /// <summary> + /// Tests, if the to be returned object requires duplication + /// </summary> + /// <returns><code>true</code>, if positive, <code>false</code>, if negative.</returns> + private bool RequiresDuplication() { + int size = Count; + // if dirty or if out of elements and size is 1 + return dirty || ((cursor >= size) && (size == 1)); + } + + #region public override object NextTree() + /// <summary> + /// Return the next element in the stream. + /// </summary> + /// <remarks> + /// If out of elements, throw an exception unless Count==1. + /// If Count is 1, then return elements[0]. + /// Return a duplicate node/subtree if stream is out of + /// elements and Count==1. + /// If we've already used the element, dup (dirty bit set). + /// </remarks> + public override object NextTree() { + // if out of elements and size is 1, dup + return FetchObject(delegate(object o) { return Dup(o); }); + } + #endregion + + + /// <summary> + /// When constructing trees, sometimes we need to dup a token or AST + /// subtree. Dup'ing a token means just creating another AST node + /// around it. For trees, you must call the adaptor.dupTree() + /// unless the element is for a tree root; then it must be a node dup + /// </summary> + private SpecializingType Dup(SpecializingType el) { + return adaptor.DupTree(el); + } + } +} +#endif \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteRuleTokenStream.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteRuleTokenStream.cs new file mode 100644 index 0000000..a409cc6 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/RewriteRuleTokenStream.cs @@ -0,0 +1,163 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +Copyright (c) 2007 Johannes Luber +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#if DOTNET1 +namespace Antlr.Runtime.Tree +{ + using System; + using IList = System.Collections.IList; + using IToken = Antlr.Runtime.IToken; + + public class RewriteRuleTokenStream : RewriteRuleElementStream + { + public RewriteRuleTokenStream(ITreeAdaptor adaptor, string elementDescription) + : base(adaptor, elementDescription) + { + } + + /// <summary> + /// Create a stream with one element + /// </summary> + public RewriteRuleTokenStream( + ITreeAdaptor adaptor, + string elementDescription, + object oneElement + ) : base(adaptor, elementDescription, oneElement) { + } + + /// <summary> + /// Create a stream, but feed off an existing list. + /// </summary> + public RewriteRuleTokenStream( + ITreeAdaptor adaptor, + string elementDescription, + IList elements + ) : base(adaptor, elementDescription, elements) { + } + + /// <summary> + /// Get next token from stream and make a node for it. + /// </summary> + public object NextNode() + { + return adaptor.Create((IToken)_Next()); + } + + public IToken NextToken() { + return (IToken) _Next(); + } + + /// <summary> + /// Don't convert to a tree unless they explicitly call NextTree(). + /// This way we can do hetero tree nodes in rewrite. + /// </summary> + override protected object ToTree(object el) { + return el; + } + + override protected object Dup(object el) { + //return adaptor.Create((IToken)el); + throw new NotSupportedException("dup can't be called for a token stream."); + } + } +} + +#elif DOTNET2 +namespace Antlr.Runtime.Tree { + using System; + using System.Collections.Generic; + using SpecializingType = Antlr.Runtime.IToken; + + /// <summary> + /// </summary> + /// <remarks></remarks> + /// <example></example> + public class RewriteRuleTokenStream : RewriteRuleElementStream<SpecializingType> { + public RewriteRuleTokenStream(ITreeAdaptor adaptor, string elementDescription) + : base(adaptor, elementDescription) { + } + + /// <summary> + /// Create a stream with one element + /// </summary> + public RewriteRuleTokenStream( + ITreeAdaptor adaptor, + string elementDescription, + SpecializingType oneElement + ) : base(adaptor, elementDescription, oneElement) { + } + + /// <summary>Create a stream, but feed off an existing list</summary> + public RewriteRuleTokenStream( + ITreeAdaptor adaptor, + string elementDescription, + IList<SpecializingType> elements + ) : base(adaptor, elementDescription, elements) { + } + + /// <summary>Create a stream, but feed off an existing list</summary> + [Obsolete("This constructor is for internal use only and might be phased out soon. Use instead the one with IList<T>.")] + public RewriteRuleTokenStream( + ITreeAdaptor adaptor, + string elementDescription, + System.Collections.IList elements + ) : base(adaptor, elementDescription, elements) { + } + + /// <summary> + /// Get next token from stream and make a node for it. + /// </summary> + /// <remarks> + /// ITreeAdaptor.Create() returns an object, so no further restrictions possible. + /// </remarks> + public object NextNode() { + return adaptor.Create((SpecializingType) _Next()); + } + + public SpecializingType NextToken() { + return (SpecializingType) _Next(); + } + + /// <summary> + /// + /// Don't convert to a tree unless they explicitly call NextTree(). + /// This way we can do hetero tree nodes in rewrite. + /// </summary> + override protected object ToTree(SpecializingType el) { + return el; + } + } +} +#endif \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreeParser.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreeParser.cs new file mode 100644 index 0000000..8b5699c --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreeParser.cs @@ -0,0 +1,201 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tree +{ + using System; + using System.Text.RegularExpressions; + using Antlr.Runtime; + + /// <summary> + /// A parser for a stream of tree nodes. "tree grammars" result in a subclass + /// of this. All the error reporting and recovery is shared with Parser via + /// the BaseRecognizer superclass. + /// </summary> + public class TreeParser : BaseRecognizer + { + public const int DOWN = Token.DOWN; + public const int UP = Token.UP; + + // precompiled regex used by InContext() + static readonly string dotdot = @".*[^.]\.\.[^.].*"; + static readonly string doubleEtc = @".*\.\.\.\s+\.\.\..*"; + static readonly string spaces = @"\s+"; + static readonly Regex dotdotPattern = new Regex(dotdot, RegexOptions.Compiled); + static readonly Regex doubleEtcPattern = new Regex(doubleEtc, RegexOptions.Compiled); + static readonly Regex spacesPattern = new Regex(spaces, RegexOptions.Compiled); + + public TreeParser(ITreeNodeStream input) + : base() // highlight that we go to super to set state object + { + TreeNodeStream = input; + } + + public TreeParser(ITreeNodeStream input, RecognizerSharedState state) + : base(state) // share the state object with another parser + { + TreeNodeStream = input; + } + + /// <summary>Set the input stream</summary> + virtual public ITreeNodeStream TreeNodeStream + { + get { return input; } + set { this.input = value; } + } + + override public string SourceName { + get { return input.SourceName; } + } + + protected override object GetCurrentInputSymbol(IIntStream input) { + return ((ITreeNodeStream)input).LT(1); + } + + protected override object GetMissingSymbol(IIntStream input, + RecognitionException e, + int expectedTokenType, + BitSet follow) { + string tokenText = "<missing " + TokenNames[expectedTokenType] + ">"; + return new CommonTree(new CommonToken(expectedTokenType, tokenText)); + } + + /// <summary>Reset the parser </summary> + override public void Reset() + { + base.Reset(); // reset all recognizer state variables + if ( input != null ) + { + input.Seek(0); // rewind the input + } + } + + /// <summary> + /// Match '.' in tree parser. + /// </summary> + /// <remarks> + /// Match '.' in tree parser has special meaning. Skip node or + /// entire tree if node has children. If children, scan until + /// corresponding UP node. + /// </remarks> + override public void MatchAny(IIntStream ignore /* ignore stream param, it's a copy of this.input */) + { + state.errorRecovery = false; + state.failed = false; + object look = input.LT(1); + if ( input.TreeAdaptor.GetChildCount(look) == 0 ) + { + input.Consume(); // not subtree, consume 1 node and return + return; + } + // current node is a subtree, skip to corresponding UP. + // must count nesting level to get right UP + int level = 0; + int tokenType = input.TreeAdaptor.GetNodeType(look); + while ( (tokenType != Token.EOF) && !( (tokenType == UP) && (level == 0) ) ) + { + input.Consume(); + look = input.LT(1); + tokenType = input.TreeAdaptor.GetNodeType(look); + if ( tokenType == DOWN ) + { + level++; + } + else if ( tokenType == UP ) + { + level--; + } + } + input.Consume(); // consume UP + } + + override public IIntStream Input + { + get { return input; } + } + + protected internal ITreeNodeStream input; + + /// <summary>We have DOWN/UP nodes in the stream that have no line info; override. + /// plus we want to alter the exception type. Don't try to recover + /// from tree parser errors inline... + /// </summary> + protected internal override object RecoverFromMismatchedToken(IIntStream input, int ttype, BitSet follow) { + throw new MismatchedTreeNodeException(ttype, (ITreeNodeStream)input); + } + + /// <summary> + /// Prefix error message with the grammar name because message is + /// always intended for the programmer because the parser built + /// the input tree not the user. + /// </summary> + override public string GetErrorHeader(RecognitionException e) + { + return GrammarFileName + ": node from " + + (e.approximateLineInfo ? "after " : "") + + "line " + e.Line + ":" + e.CharPositionInLine; + } + + /// <summary> + /// Tree parsers parse nodes they usually have a token object as + /// payload. Set the exception token and do the default behavior. + /// + /// </summary> + override public string GetErrorMessage(RecognitionException e, string[] tokenNames) + { + if ( this is TreeParser ) + { + ITreeAdaptor adaptor = ((ITreeNodeStream)e.Input).TreeAdaptor; + e.Token = adaptor.GetToken(e.Node); + if ( e.Token == null ) + { // could be an UP/DOWN node + e.Token = new CommonToken(adaptor.GetNodeType(e.Node), adaptor.GetNodeText(e.Node)); + } + } + return base.GetErrorMessage(e, tokenNames); + } + + public virtual void TraceIn(string ruleName, int ruleIndex) + { + base.TraceIn(ruleName, ruleIndex, input.LT(1)); + } + + public virtual void TraceOut(string ruleName, int ruleIndex) + { + base.TraceOut(ruleName, ruleIndex, input.LT(1)); + } + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreePatternLexer.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreePatternLexer.cs new file mode 100644 index 0000000..e0462b5 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreePatternLexer.cs @@ -0,0 +1,167 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tree +{ + using System; + using StringBuilder = System.Text.StringBuilder; + + public class TreePatternLexer + { + public const int EOF = -1; + public const int BEGIN = 1; + public const int END = 2; + public const int ID = 3; + public const int ARG = 4; + public const int PERCENT = 5; + public const int COLON = 6; + public const int DOT = 7; + + /// <summary>The tree pattern to lex like "(A B C)"</summary> + protected string pattern; + + /// <summary>Index into input string</summary> + protected int p = -1; + + /// <summary>Current char</summary> + protected int c; + + /// <summary>How long is the pattern in char?</summary> + protected int n; + + /// <summary> + /// Set when token type is ID or ARG (name mimics Java's StreamTokenizer) + /// </summary> + public StringBuilder sval = new StringBuilder(); + + public bool error = false; + + public TreePatternLexer(string pattern) + { + this.pattern = pattern; + this.n = pattern.Length; + Consume(); + } + + public int NextToken() + { + sval.Length = 0; // reset, but reuse buffer + while (c != EOF) + { + if (c == ' ' || c == '\n' || c == '\r' || c == '\t') + { + Consume(); + continue; + } + if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_') + { + sval.Append((char)c); + Consume(); + while ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9') || c == '_') + { + sval.Append((char)c); + Consume(); + } + return ID; + } + if (c == '(') + { + Consume(); + return BEGIN; + } + if (c == ')') + { + Consume(); + return END; + } + if (c == '%') + { + Consume(); + return PERCENT; + } + if (c == ':') + { + Consume(); + return COLON; + } + if (c == '.') + { + Consume(); + return DOT; + } + if (c == '[') + { // grab [x] as a string, returning x + Consume(); + while (c != ']') + { + if (c == '\\') + { + Consume(); + if (c != ']') + { + sval.Append('\\'); + } + sval.Append((char)c); + } + else + { + sval.Append((char)c); + } + Consume(); + } + Consume(); + return ARG; + } + Consume(); + error = true; + return EOF; + } + return EOF; + } + + protected void Consume() + { + p++; + if (p >= n) + { + c = EOF; + } + else + { + c = pattern[p]; + } + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreePatternParser.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreePatternParser.cs new file mode 100644 index 0000000..49ef88b --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreePatternParser.cs @@ -0,0 +1,189 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tree +{ + using System; + using IToken = Antlr.Runtime.IToken; + using CommonToken = Antlr.Runtime.CommonToken; + + public class TreePatternParser + { + protected TreePatternLexer tokenizer; + protected int ttype; + protected TreeWizard wizard; + protected ITreeAdaptor adaptor; + + public TreePatternParser(TreePatternLexer tokenizer, TreeWizard wizard, ITreeAdaptor adaptor) + { + this.tokenizer = tokenizer; + this.wizard = wizard; + this.adaptor = adaptor; + ttype = tokenizer.NextToken(); // kickstart + } + + public object Pattern() + { + if (ttype == TreePatternLexer.BEGIN) + { + return ParseTree(); + } + else if (ttype == TreePatternLexer.ID) + { + object node = ParseNode(); + if (ttype == TreePatternLexer.EOF) + { + return node; + } + return null; // extra junk on end + } + return null; + } + + public object ParseTree() + { + if (ttype != TreePatternLexer.BEGIN) + { + Console.Out.WriteLine("no BEGIN"); + return null; + } + ttype = tokenizer.NextToken(); + object root = ParseNode(); + if (root == null) + { + return null; + } + while (ttype == TreePatternLexer.BEGIN || + ttype == TreePatternLexer.ID || + ttype == TreePatternLexer.PERCENT || + ttype == TreePatternLexer.DOT) + { + if (ttype == TreePatternLexer.BEGIN) + { + object subtree = ParseTree(); + adaptor.AddChild(root, subtree); + } + else + { + object child = ParseNode(); + if (child == null) + { + return null; + } + adaptor.AddChild(root, child); + } + } + if (ttype != TreePatternLexer.END) + { + Console.Out.WriteLine("no END"); + return null; + } + ttype = tokenizer.NextToken(); + return root; + } + + public object ParseNode() + { + // "%label:" prefix + string label = null; + if (ttype == TreePatternLexer.PERCENT) + { + ttype = tokenizer.NextToken(); + if (ttype != TreePatternLexer.ID) + { + return null; + } + label = tokenizer.sval.ToString(); + ttype = tokenizer.NextToken(); + if (ttype != TreePatternLexer.COLON) + { + return null; + } + ttype = tokenizer.NextToken(); // move to ID following colon + } + + // Wildcard? + if (ttype == TreePatternLexer.DOT) + { + ttype = tokenizer.NextToken(); + IToken wildcardPayload = new CommonToken(0, "."); + TreeWizard.TreePattern node = new TreeWizard.WildcardTreePattern(wildcardPayload); + if (label != null) + { + node.label = label; + } + return node; + } + + // "ID" or "ID[arg]" + if (ttype != TreePatternLexer.ID) + { + return null; + } + string tokenName = tokenizer.sval.ToString(); + ttype = tokenizer.NextToken(); + if (tokenName.Equals("nil")) + { + return adaptor.GetNilNode(); + } + string text = tokenName; + // check for arg + string arg = null; + if (ttype == TreePatternLexer.ARG) + { + arg = tokenizer.sval.ToString(); + text = arg; + ttype = tokenizer.NextToken(); + } + + // create node + int treeNodeType = wizard.GetTokenType(tokenName); + if (treeNodeType == Token.INVALID_TOKEN_TYPE) + { + return null; + } + object nodeObj; + nodeObj = adaptor.Create(treeNodeType, text); + if ((label != null) && (nodeObj.GetType() == typeof(TreeWizard.TreePattern))) + { + ((TreeWizard.TreePattern)nodeObj).label = label; + } + if ((arg != null) && (nodeObj.GetType() == typeof(TreeWizard.TreePattern))) + { + ((TreeWizard.TreePattern)nodeObj).hasTextArg = true; + } + return nodeObj; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreeRuleReturnScope.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreeRuleReturnScope.cs new file mode 100644 index 0000000..7b220f1 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreeRuleReturnScope.cs @@ -0,0 +1,55 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2006 Kunle Odutola +Copyright (c) 2005 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +namespace Antlr.Runtime.Tree +{ + using System; + using RuleReturnScope = Antlr.Runtime.RuleReturnScope; + + /// <summary> + /// This is identical to the ParserRuleReturnScope except that + /// the start property is a tree node and not a Token object + /// when you are parsing trees. To be generic the tree node types + /// have to be Object :( + /// </summary> + public class TreeRuleReturnScope : RuleReturnScope + { + /// <summary>First node or root node of tree matched for this rule.</summary> + private object start; + + /// <summary>Return the start token or tree </summary> + override public object Start + { + get { return start; } + set { start = value; } + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreeVisitor.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreeVisitor.cs new file mode 100644 index 0000000..2fe0784 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreeVisitor.cs @@ -0,0 +1,46 @@ + +namespace Antlr.Runtime.Tree { + + /// <summary> + /// Do a depth first walk of a tree, applying pre() and post() actions + /// as we discover and finish nodes. + /// </summary> + public class TreeVisitor { + protected ITreeAdaptor adaptor; + + public TreeVisitor(ITreeAdaptor adaptor) { + this.adaptor = adaptor; + } + + public TreeVisitor() : this(new CommonTreeAdaptor()) { } + + /// <summary> + /// Visit every node in tree t and trigger an action for each node + /// before/after having visited all of its children. + /// Execute both actions even if t has no children. + /// If a child visit yields a new child, it can update its + /// parent's child list or just return the new child. The + /// child update code works even if the child visit alters its parent + /// and returns the new tree. + /// + /// Return result of applying post action to this node. + /// </summary> + public object Visit(object t, ITreeVisitorAction action) { + bool isNil = adaptor.IsNil(t); + if ( action!=null && !isNil ) { + t = action.Pre(t); // if rewritten, walk children of new t + } + int n = adaptor.GetChildCount(t); + for (int i=0; i<n; i++) { + object child = adaptor.GetChild(t, i); + object visitResult = Visit(child, action); + object childAfterVisit = adaptor.GetChild(t, i); + if ( visitResult != childAfterVisit ) { // result & child differ? + adaptor.SetChild(t, i, visitResult); + } + } + if ( action!=null && !isNil ) t = action.Post(t); + return t; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreeWizard.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreeWizard.cs new file mode 100644 index 0000000..1a93ee3 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/TreeWizard.cs @@ -0,0 +1,542 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +Copyright (c) 2007 Johannes Luber +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tree +{ + using System; + using IList = System.Collections.IList; + using IDictionary = System.Collections.IDictionary; + using Hashtable = System.Collections.Hashtable; + using ArrayList = System.Collections.ArrayList; + using IToken = Antlr.Runtime.IToken; + using Token = Antlr.Runtime.Token; + + /// <summary> + /// Build and navigate trees with this object. Must know about the names + /// of tokens so you have to pass in a map or array of token names (from which + /// this class can build the map). I.e., Token DECL means nothing unless the + /// class can translate it to a token type. + /// </summary> + /// <remarks> + /// In order to create nodes and navigate, this class needs a TreeAdaptor. + /// + /// This class can build a token type -> node index for repeated use or for + /// iterating over the various nodes with a particular type. + /// + /// This class works in conjunction with the TreeAdaptor rather than moving + /// all this functionality into the adaptor. An adaptor helps build and + /// navigate trees using methods. This class helps you do it with string + /// patterns like "(A B C)". You can create a tree from that pattern or + /// match subtrees against it. + /// </remarks> + public class TreeWizard + { + protected ITreeAdaptor adaptor; + protected IDictionary tokenNameToTypeMap; + + public interface ContextVisitor + { + void Visit(object t, object parent, int childIndex, IDictionary labels); + } + + public abstract class Visitor : ContextVisitor + { + public void Visit(object t, object parent, int childIndex, IDictionary labels) + { + Visit(t); + } + public abstract void Visit(object t); + } + + private sealed class RecordAllElementsVisitor : Visitor + { + private IList list; + + public RecordAllElementsVisitor(IList list) + { + this.list = list; + } + + override public void Visit(object t) + { + list.Add(t); + } + } + + private sealed class PatternMatchingContextVisitor : ContextVisitor + { + private TreeWizard owner; + private TreePattern pattern; + private IList list; + + public PatternMatchingContextVisitor(TreeWizard owner, TreePattern pattern, IList list) + { + this.owner = owner; + this.pattern = pattern; + this.list = list; + } + + public void Visit(object t, object parent, int childIndex, IDictionary labels) + { + if (owner._Parse(t, pattern, null)) + { + list.Add(t); + } + } + } + + private sealed class InvokeVisitorOnPatternMatchContextVisitor : ContextVisitor + { + private TreeWizard owner; + private TreePattern pattern; + private ContextVisitor visitor; + private Hashtable labels = new Hashtable(); + + public InvokeVisitorOnPatternMatchContextVisitor(TreeWizard owner, TreePattern pattern, ContextVisitor visitor) + { + this.owner = owner; + this.pattern = pattern; + this.visitor = visitor; + } + + public void Visit(object t, object parent, int childIndex, IDictionary unusedlabels) + { + // the unusedlabels arg is null as visit on token type doesn't set. + labels.Clear(); + if (owner._Parse(t, pattern, labels)) + { + visitor.Visit(t, parent, childIndex, labels); + } + } + } + + /// <summary> + /// When using %label:TOKENNAME in a tree for parse(), we must track the label. + /// </summary> + public class TreePattern : CommonTree + { + public string label; + public bool hasTextArg; + public TreePattern(IToken payload) + : base(payload) + { + } + + override public string ToString() + { + if (label != null) + { + return "%" + label + ":" + base.ToString(); + } + else + { + return base.ToString(); + } + } + } + + public class WildcardTreePattern : TreePattern + { + public WildcardTreePattern(IToken payload) + : base(payload) + { + } + } + + /// <summary> + /// This adaptor creates TreePattern objects for use during scan() + /// </summary> + public class TreePatternTreeAdaptor : CommonTreeAdaptor + { + override public object Create(IToken payload) + { + return new TreePattern(payload); + } + } + + public TreeWizard(ITreeAdaptor adaptor) + { + this.adaptor = adaptor; + } + + public TreeWizard(ITreeAdaptor adaptor, IDictionary tokenNameToTypeMap) + { + this.adaptor = adaptor; + this.tokenNameToTypeMap = tokenNameToTypeMap; + } + + public TreeWizard(ITreeAdaptor adaptor, string[] tokenNames) + { + this.adaptor = adaptor; + this.tokenNameToTypeMap = ComputeTokenTypes(tokenNames); + } + + public TreeWizard(string[] tokenNames) + : this(null, tokenNames) + { + } + + /// <summary> + /// Compute a Map<String, Integer> that is an inverted index of + /// tokenNames (which maps int token types to names). + /// </summary> + public IDictionary ComputeTokenTypes(string[] tokenNames) + { + IDictionary m = new Hashtable(); + if (tokenNames == null) { + return m; + } + for (int ttype = Token.MIN_TOKEN_TYPE; ttype < tokenNames.Length; ttype++) + { + string name = tokenNames[ttype]; + m.Add(name, ttype); + } + return m; + } + + /// <summary> + /// Using the map of token names to token types, return the type. + /// </summary> + public int GetTokenType(string tokenName) + { + if (tokenNameToTypeMap == null) + { + return Token.INVALID_TOKEN_TYPE; + } + object ttypeI = tokenNameToTypeMap[tokenName]; + if (ttypeI != null) + { + return (int)ttypeI; + } + return Token.INVALID_TOKEN_TYPE; + } + + /// <summary> + /// Walk the entire tree and make a node name to nodes mapping. + /// </summary> + /// <remarks> + /// For now, use recursion but later nonrecursive version may be + /// more efficient. Returns Map<Integer, List> where the List is + /// of your AST node type. The Integer is the token type of the node. + /// + /// TODO: save this index so that find and visit are faster + /// </remarks> + public IDictionary Index(object t) + { + IDictionary m = new Hashtable(); + _Index(t, m); + return m; + } + + /// <summary>Do the work for index</summary> + protected void _Index(object t, IDictionary m) + { + if (t == null) + { + return; + } + int ttype = adaptor.GetNodeType(t); + IList elements = m[ttype] as IList; + if (elements == null) + { + elements = new ArrayList(); + m[ttype] = elements; + } + elements.Add(t); + int n = adaptor.GetChildCount(t); + for (int i = 0; i < n; i++) + { + object child = adaptor.GetChild(t, i); + _Index(child, m); + } + } + + /// <summary>Return a List of tree nodes with token type ttype</summary> + public IList Find(object t, int ttype) + { + IList nodes = new ArrayList(); + Visit(t, ttype, new TreeWizard.RecordAllElementsVisitor(nodes)); + return nodes; + } + + /// <summary>Return a List of subtrees matching pattern</summary> + public IList Find(object t, string pattern) + { + IList subtrees = new ArrayList(); + // Create a TreePattern from the pattern + TreePatternLexer tokenizer = new TreePatternLexer(pattern); + TreePatternParser parser = new TreePatternParser(tokenizer, this, new TreePatternTreeAdaptor()); + TreePattern tpattern = (TreePattern)parser.Pattern(); + // don't allow invalid patterns + if ((tpattern == null) || tpattern.IsNil || (tpattern.GetType() == typeof(WildcardTreePattern))) + { + return null; + } + int rootTokenType = tpattern.Type; + Visit(t, rootTokenType, new TreeWizard.PatternMatchingContextVisitor(this, tpattern, subtrees)); + return subtrees; + } + + public object FindFirst(object t, int ttype) + { + return null; + } + + public object FindFirst(object t, string pattern) + { + return null; + } + + /// <summary> + /// Visit every ttype node in t, invoking the visitor. + /// </summary> + /// <remarks> + /// This is a quicker + /// version of the general visit(t, pattern) method. The labels arg + /// of the visitor action method is never set (it's null) since using + /// a token type rather than a pattern doesn't let us set a label. + /// </remarks> + public void Visit(object t, int ttype, ContextVisitor visitor) + { + _Visit(t, null, 0, ttype, visitor); + } + + /// <summary>Do the recursive work for visit</summary> + protected void _Visit(object t, object parent, int childIndex, int ttype, ContextVisitor visitor) + { + if (t == null) + { + return; + } + if (adaptor.GetNodeType(t) == ttype) + { + visitor.Visit(t, parent, childIndex, null); + } + int n = adaptor.GetChildCount(t); + for (int i = 0; i < n; i++) + { + object child = adaptor.GetChild(t, i); + _Visit(child, t, i, ttype, visitor); + } + } + + /// <summary> + /// For all subtrees that match the pattern, execute the visit action. + /// </summary> + /// <remarks> + /// The implementation uses the root node of the pattern in combination + /// with visit(t, ttype, visitor) so nil-rooted patterns are not allowed. + /// Patterns with wildcard roots are also not allowed. + /// </remarks> + public void Visit(object t, string pattern, ContextVisitor visitor) + { + // Create a TreePattern from the pattern + TreePatternLexer tokenizer = new TreePatternLexer(pattern); + TreePatternParser parser = new TreePatternParser(tokenizer, this, new TreePatternTreeAdaptor()); + TreePattern tpattern = (TreePattern)parser.Pattern(); + // don't allow invalid patterns + if ((tpattern == null) || tpattern.IsNil || (tpattern.GetType() == typeof(WildcardTreePattern))) + { + return; + } + //IDictionary labels = new Hashtable(); // reused for each _parse + int rootTokenType = tpattern.Type; + Visit(t, rootTokenType, + new TreeWizard.InvokeVisitorOnPatternMatchContextVisitor(this, tpattern, visitor)); + } + + /// <summary> + /// Given a pattern like (ASSIGN %lhs:ID %rhs:.) with optional labels + /// on the various nodes and '.' (dot) as the node/subtree wildcard, + /// return true if the pattern matches and fill the labels Map with + /// the labels pointing at the appropriate nodes. Return false if + /// the pattern is malformed or the tree does not match. + /// </summary> + /// <remarks> + /// If a node specifies a text arg in pattern, then that must match + /// for that node in t. + /// + /// TODO: what's a better way to indicate bad pattern? Exceptions are a hassle + /// </remarks> + public bool Parse(object t, string pattern, IDictionary labels) + { + TreePatternLexer tokenizer = new TreePatternLexer(pattern); + TreePatternParser parser = new TreePatternParser(tokenizer, this, new TreePatternTreeAdaptor()); + TreePattern tpattern = (TreePattern)parser.Pattern(); + + bool matched = _Parse(t, tpattern, labels); + return matched; + } + + public bool Parse(object t, string pattern) + { + return Parse(t, pattern, null); + } + + /// <summary> + /// Do the work for Parse(). Check to see if the t2 pattern fits the + /// structure and token types in t1. Check text if the pattern has + /// text arguments on nodes. Fill labels map with pointers to nodes + /// in tree matched against nodes in pattern with labels. + /// </summary> + protected bool _Parse(object t1, TreePattern t2, IDictionary labels) + { + // make sure both are non-null + if (t1 == null || t2 == null) + { + return false; + } + // check roots (wildcard matches anything) + if (t2.GetType() != typeof(WildcardTreePattern)) + { + if (adaptor.GetNodeType(t1) != t2.Type) + { + return false; + } + if (t2.hasTextArg && !adaptor.GetNodeText(t1).Equals(t2.Text)) + { + return false; + } + } + if (t2.label != null && labels != null) + { + // map label in pattern to node in t1 + labels[t2.label] = t1; + } + // check children + int n1 = adaptor.GetChildCount(t1); + int n2 = t2.ChildCount; + if (n1 != n2) + { + return false; + } + for (int i = 0; i < n1; i++) + { + object child1 = adaptor.GetChild(t1, i); + TreePattern child2 = (TreePattern)t2.GetChild(i); + if (!_Parse(child1, child2, labels)) + { + return false; + } + } + return true; + } + + /// <summary> + /// Create a tree or node from the indicated tree pattern that closely + /// follows ANTLR tree grammar tree element syntax: + /// + /// (root child1 ... child2). + /// + /// </summary> + /// <remarks> + /// You can also just pass in a node: ID + /// + /// Any node can have a text argument: ID[foo] + /// (notice there are no quotes around foo--it's clear it's a string). + /// + /// nil is a special name meaning "give me a nil node". Useful for + /// making lists: (nil A B C) is a list of A B C. + /// </remarks> + public object Create(string pattern) + { + TreePatternLexer tokenizer = new TreePatternLexer(pattern); + TreePatternParser parser = new TreePatternParser(tokenizer, this, adaptor); + object t = parser.Pattern(); + return t; + } + + /// <summary> + /// Compare t1 and t2; return true if token types/text, structure match exactly. + /// The trees are examined in their entirety so that (A B) does not match + /// (A B C) nor (A (B C)). + /// </summary> + /// <remarks> + /// TODO: allow them to pass in a comparator + /// TODO: have a version that is nonstatic so it can use instance adaptor + /// + /// I cannot rely on the tree node's equals() implementation as I make + /// no constraints at all on the node types nor interface etc... + /// </remarks> + public static bool Equals(object t1, object t2, ITreeAdaptor adaptor) + { + return _Equals(t1, t2, adaptor); + } + + /// <summary> + /// Compare type, structure, and text of two trees, assuming adaptor in + /// this instance of a TreeWizard. + /// </summary> + public new bool Equals(object t1, object t2) + { + return _Equals(t1, t2, adaptor); + } + + protected static bool _Equals(object t1, object t2, ITreeAdaptor adaptor) + { + // make sure both are non-null + if (t1 == null || t2 == null) + { + return false; + } + // check roots + if (adaptor.GetNodeType(t1) != adaptor.GetNodeType(t2)) + { + return false; + } + if (!adaptor.GetNodeText(t1).Equals(adaptor.GetNodeText(t2))) + { + return false; + } + // check children + int n1 = adaptor.GetChildCount(t1); + int n2 = adaptor.GetChildCount(t2); + if (n1 != n2) + { + return false; + } + for (int i = 0; i < n1; i++) + { + object child1 = adaptor.GetChild(t1, i); + object child2 = adaptor.GetChild(t2, i); + if (!_Equals(child1, child2, adaptor)) + { + return false; + } + } + return true; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/UnBufferedTreeNodeStream.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/UnBufferedTreeNodeStream.cs new file mode 100644 index 0000000..6ea83c8 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime.Tree/UnBufferedTreeNodeStream.cs @@ -0,0 +1,695 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime.Tree +{ + using System; + using StringBuilder = System.Text.StringBuilder; + using IList = System.Collections.IList; + using ArrayList = System.Collections.ArrayList; + using StackList = Antlr.Runtime.Collections.StackList; + using IToken = Antlr.Runtime.IToken; + using ITokenStream = Antlr.Runtime.ITokenStream; + + /// <summary> + /// A stream of tree nodes, accessing nodes from a tree of ANY kind. + /// </summary> + /// <remarks> + /// No new nodes should be created in tree during the walk. A small buffer + /// of tokens is kept to efficiently and easily handle LT(i) calls, though + /// the lookahead mechanism is fairly complicated. + /// + /// For tree rewriting during tree parsing, this must also be able + /// to replace a set of children without "losing its place". + /// That part is not yet implemented. Will permit a rule to return + /// a different tree and have it stitched into the output tree probably. + /// + /// <see cref="CommonTreeNodeStream"/> + /// + /// </remarks> + public class UnBufferedTreeNodeStream : ITreeNodeStream + { + /// <summary> + /// Where is this stream pulling nodes from? This is not the name, but + /// the object that provides node objects. + /// </summary> + virtual public object TreeSource + { + get { return root; } + } + + #region IEnumerator Members (implementation) + + private ITree currentEnumerationNode; + + virtual public void Reset() + { + currentNode = root; + previousNode = null; + currentChildIndex = - 1; + absoluteNodeIndex = -1; + head = tail = 0; + } + + /// <summary> + /// Navigates to the next node found during a depth-first walk of root. + /// Also, adds these nodes and DOWN/UP imaginary nodes into the lokoahead + /// buffer as a side-effect. Normally side-effects are bad, but because + /// we can Emit many tokens for every MoveNext() call, it's pretty hard to + /// use a single return value for that. We must add these tokens to + /// the lookahead buffer. + /// + /// This routine does *not* cause the 'Current' property to ever return the + /// DOWN/UP nodes; those are only returned by the LT() method. + /// + /// Ugh. This mechanism is much more complicated than a recursive + /// solution, but it's the only way to provide nodes on-demand instead + /// of walking once completely through and buffering up the nodes. :( + /// </summary> + public virtual bool MoveNext() + { + // already walked entire tree; nothing to return + if (currentNode == null) + { + AddLookahead(eof); + currentEnumerationNode = null; + // this is infinite stream returning EOF at end forever + // so don't throw NoSuchElementException + return false; + } + + // initial condition (first time method is called) + if (currentChildIndex == - 1) + { + currentEnumerationNode = (ITree)handleRootNode(); + return true; + } + + // index is in the child list? + if (currentChildIndex < adaptor.GetChildCount(currentNode)) + { + currentEnumerationNode = (ITree)VisitChild(currentChildIndex); + return true; + } + + // hit end of child list, return to parent node or its parent ... + WalkBackToMostRecentNodeWithUnvisitedChildren(); + if (currentNode != null) + { + currentEnumerationNode = (ITree)VisitChild(currentChildIndex); + return true; + } + return false; + } + + public virtual object Current + { + get { return currentEnumerationNode; } + } + + #endregion + + public const int INITIAL_LOOKAHEAD_BUFFER_SIZE = 5; + + /// <summary>Reuse same DOWN, UP navigation nodes unless this is true</summary> + protected bool uniqueNavigationNodes = false; + + /// <summary>Pull nodes from which tree? </summary> + protected internal object root; + + /// <summary>IF this tree (root) was created from a token stream, track it.</summary> + protected ITokenStream tokens; + + /// <summary>What tree adaptor was used to build these trees</summary> + ITreeAdaptor adaptor; + + /// <summary> + /// As we walk down the nodes, we must track parent nodes so we know + /// where to go after walking the last child of a node. When visiting + /// a child, push current node and current index. + /// </summary> + protected internal StackList nodeStack = new StackList(); + + /// <summary> + /// Track which child index you are visiting for each node we push. + /// TODO: pretty inefficient...use int[] when you have time + /// </summary> + protected internal StackList indexStack = new StackList(); + + /// <summary>Which node are we currently visiting? </summary> + protected internal object currentNode; + + /// <summary>Which node did we visit last? Used for LT(-1) calls. </summary> + protected internal object previousNode; + + /// <summary> + /// Which child are we currently visiting? If -1 we have not visited + /// this node yet; next Consume() request will set currentIndex to 0. + /// </summary> + protected internal int currentChildIndex; + + /// <summary> + /// What node index did we just consume? i=0..n-1 for n node trees. + /// IntStream.next is hence 1 + this value. Size will be same. + /// </summary> + protected int absoluteNodeIndex; + + /// <summary> + /// Buffer tree node stream for use with LT(i). This list grows + /// to fit new lookahead depths, but Consume() wraps like a circular + /// buffer. + /// </summary> + protected internal object[] lookahead = new object[INITIAL_LOOKAHEAD_BUFFER_SIZE]; + + /// <summary>lookahead[head] is the first symbol of lookahead, LT(1). </summary> + protected internal int head; + + /// <summary> + /// Add new lookahead at lookahead[tail]. tail wraps around at the + /// end of the lookahead buffer so tail could be less than head. + /// </summary> + protected internal int tail; + + /// <summary> + /// When walking ahead with cyclic DFA or for syntactic predicates, + /// we need to record the state of the tree node stream. This + /// class wraps up the current state of the UnBufferedTreeNodeStream. + /// Calling Mark() will push another of these on the markers stack. + /// </summary> + protected class TreeWalkState + { + protected internal int currentChildIndex; + protected internal int absoluteNodeIndex; + protected internal object currentNode; + protected internal object previousNode; + ///<summary>Record state of the nodeStack</summary> + protected internal int nodeStackSize; + ///<summary>Record state of the indexStack</summary> + protected internal int indexStackSize; + protected internal object[] lookahead; + } + + /// <summary> + /// Calls to Mark() may be nested so we have to track a stack of them. + /// The marker is an index into this stack. This is a List<TreeWalkState>. + /// Indexed from 1..markDepth. A null is kept at index 0. It is created + /// upon first call to Mark(). + /// </summary> + protected IList markers; + + ///<summary> + /// tracks how deep Mark() calls are nested + /// </summary> + protected int markDepth = 0; + + ///<summary> + /// Track the last Mark() call result value for use in Rewind(). + /// </summary> + protected int lastMarker; + + // navigation nodes + + protected object down; + protected object up; + protected object eof; + + public UnBufferedTreeNodeStream(object tree) + : this(new CommonTreeAdaptor(), tree) + { + } + + public UnBufferedTreeNodeStream(ITreeAdaptor adaptor, object tree) + { + this.root = tree; + this.adaptor = adaptor; + Reset(); + down = adaptor.Create(Token.DOWN, "DOWN"); + up = adaptor.Create(Token.UP, "UP"); + eof = adaptor.Create(Token.EOF, "EOF"); + } + + + public virtual object Get(int i) + { + throw new NotSupportedException("stream is unbuffered"); + } + + /// <summary> + /// Get tree node at current input pointer + i ahead where i=1 is next node. + /// i < 0 indicates nodes in the past. So -1 is previous node and -2 is + /// two nodes ago. LT(0) is undefined. For i>=n, return null. + /// Return null for LT(0) and any index that results in an absolute address + /// that is negative. + /// + /// This is analogus to the LT() method of the TokenStream, but this + /// returns a tree node instead of a token. Makes code gen identical + /// for both parser and tree grammars. :) + /// </summary> + public virtual object LT(int k) + { + if (k == - 1) + { + return previousNode; + } + if (k < 0) + { + throw new ArgumentNullException("tree node streams cannot look backwards more than 1 node", "k"); + } + if (k == 0) + { + return Tree.INVALID_NODE; + } + fill(k); + return lookahead[(head + k - 1) % lookahead.Length]; + } + + /// <summary>Make sure we have at least k symbols in lookahead buffer </summary> + protected internal virtual void fill(int k) + { + int n = LookaheadSize; + for (int i = 1; i <= k - n; i++) + { + MoveNext(); // get at least k-depth lookahead nodes + } + } + + /// <summary> + /// Add a node to the lookahead buffer. Add at lookahead[tail]. + /// If you tail+1 == head, then we must create a bigger buffer + /// and copy all the nodes over plus reset head, tail. After + /// this method, LT(1) will be lookahead[0]. + /// </summary> + protected internal virtual void AddLookahead(object node) + { + lookahead[tail] = node; + tail = (tail + 1) % lookahead.Length; + if (tail == head) + { + // buffer overflow: tail caught up with head + // allocate a buffer 2x as big + object[] bigger = new object[2 * lookahead.Length]; + // copy head to end of buffer to beginning of bigger buffer + int remainderHeadToEnd = lookahead.Length - head; + Array.Copy(lookahead, head, bigger, 0, remainderHeadToEnd); + // copy 0..tail to after that + Array.Copy(lookahead, 0, bigger, remainderHeadToEnd, tail); + lookahead = bigger; // reset to bigger buffer + head = 0; + tail += remainderHeadToEnd; + } + } + + // Satisfy IntStream interface + + public virtual void Consume() + { + // make sure there is something in lookahead buf, which might call next() + fill(1); + absoluteNodeIndex++; + previousNode = lookahead[head]; // track previous node before moving on + head = (head + 1) % lookahead.Length; + } + + public virtual int LA(int i) + { + object t = (ITree) LT(i); + if (t == null) + { + return Token.INVALID_TOKEN_TYPE; + } + return adaptor.GetNodeType(t); + } + + /// <summary> + /// Record the current state of the tree walk which includes + /// the current node and stack state as well as the lookahead + /// buffer. + /// </summary> + public virtual int Mark() + { + if (markers == null) + { + markers = new ArrayList(); + markers.Add(null); // depth 0 means no backtracking, leave blank + } + markDepth++; + TreeWalkState state = null; + if ( markDepth >= markers.Count ) + { + state = new TreeWalkState(); + markers.Add(state); + } + else + { + state = (TreeWalkState)markers[markDepth]; + + } + state.absoluteNodeIndex = absoluteNodeIndex; + state.currentChildIndex = currentChildIndex; + state.currentNode = currentNode; + state.previousNode = previousNode; + state.nodeStackSize = nodeStack.Count; + state.indexStackSize = indexStack.Count; + // take snapshot of lookahead buffer + int n = LookaheadSize; + int i = 0; + state.lookahead = new object[n]; + for (int k = 1; k <= n; k++, i++) + { + state.lookahead[i] = LT(k); + } + lastMarker = markDepth; + return markDepth; + } + + public virtual void Release(int marker) + { + // unwind any other markers made after marker and release marker + markDepth = marker; + // release this marker + markDepth--; + } + + /// <summary> + /// Rewind the current state of the tree walk to the state it + /// was in when Mark() was called and it returned marker. Also, + /// wipe out the lookahead which will force reloading a few nodes + /// but it is better than making a copy of the lookahead buffer + /// upon Mark(). + /// </summary> + public virtual void Rewind(int marker) + { + if ( markers == null ) + { + return; + } + TreeWalkState state = (TreeWalkState)markers[marker]; + absoluteNodeIndex = state.absoluteNodeIndex; + currentChildIndex = state.currentChildIndex; + currentNode = state.currentNode; + previousNode = state.previousNode; + // drop node and index stacks back to old size + nodeStack.Capacity = state.nodeStackSize; + indexStack.Capacity = state.indexStackSize; + head = tail = 0; // wack lookahead buffer and then refill + for (; tail < state.lookahead.Length; tail++) + { + lookahead[tail] = state.lookahead[tail]; + } + Release(marker); + } + + public void Rewind() + { + Rewind(lastMarker); + } + + /// <summary> + /// Consume() ahead until we hit index. Can't just jump ahead--must + /// spit out the navigation nodes. + /// </summary> + public virtual void Seek(int index) + { + if (index < this.Index()) + { + throw new ArgumentOutOfRangeException("can't seek backwards in node stream", "index"); + } + // seek forward, consume until we hit index + while (this.Index() < index) + { + Consume(); + } + } + + public virtual int Index() + { + return absoluteNodeIndex + 1; + } + + /// <summary> + /// Expensive to compute; recursively walk tree to find size; + /// include navigation nodes and EOF. Reuse functionality + /// in CommonTreeNodeStream as we only really use this + /// for testing. + /// </summary> + [Obsolete("Please use property Count instead.")] + public virtual int Size() + { + return Count; + + } + + /// <summary> + /// Expensive to compute; recursively walk tree to find size; + /// include navigation nodes and EOF. Reuse functionality + /// in CommonTreeNodeStream as we only really use this + /// for testing. + /// </summary> + public virtual int Count + { + get + { + CommonTreeNodeStream s = new CommonTreeNodeStream(root); + return s.Count; + } + } + + // Satisfy Java's Iterator interface + + protected internal virtual object handleRootNode() + { + object node; + node = currentNode; + // point to first child in prep for subsequent next() + currentChildIndex = 0; + if ( adaptor.IsNil(node) ) + { + // don't count this root nil node + node = VisitChild(currentChildIndex); + } + else + { + AddLookahead(node); + if ( adaptor.GetChildCount(currentNode) == 0 ) + { + // single node case + currentNode = null; // say we're done + } + } + return node; + } + + protected internal virtual object VisitChild(int child) + { + object node = null; + // save state + nodeStack.Push(currentNode); + indexStack.Push(child); + if (child == 0 && !adaptor.IsNil(currentNode)) + { + AddNavigationNode(Token.DOWN); + } + // visit child + currentNode = adaptor.GetChild(currentNode, child); + currentChildIndex = 0; + node = currentNode; // record node to return + AddLookahead(node); + WalkBackToMostRecentNodeWithUnvisitedChildren(); + return node; + } + + /// <summary> + /// As we flatten the tree, we use UP, DOWN nodes to represent + /// the tree structure. When debugging we need unique nodes + /// so instantiate new ones when uniqueNavigationNodes is true. + /// </summary> + protected internal virtual void AddNavigationNode(int ttype) + { + object navNode = null; + if (ttype == Token.DOWN) + { + if (HasUniqueNavigationNodes) + navNode = adaptor.Create(Token.DOWN, "DOWN"); + else + navNode = down; + } + else + { + if ( HasUniqueNavigationNodes ) + { + navNode = adaptor.Create(Token.UP, "UP"); + } + else + { + navNode = up; + } + } + AddLookahead(navNode); + } + + /// <summary> + /// Walk upwards looking for a node with more children to walk. + /// </summary> + protected internal virtual void WalkBackToMostRecentNodeWithUnvisitedChildren() + { + while ( (currentNode != null) && (currentChildIndex >= adaptor.GetChildCount(currentNode)) ) + { + currentNode = nodeStack.Pop(); + if ( currentNode == null ) + { // hit the root? + return; + } + currentChildIndex = ((int) indexStack.Pop()); + currentChildIndex++; // move to next child + if (currentChildIndex >= adaptor.GetChildCount(currentNode)) + { + if ( !adaptor.IsNil(currentNode) ) + { + AddNavigationNode(Token.UP); + } + if (currentNode == root) + { + // we done yet? + currentNode = null; + } + } + } + } + + public ITreeAdaptor TreeAdaptor + { + get { return adaptor; } + } + + public string SourceName { + get { return TokenStream.SourceName; } + } + + public ITokenStream TokenStream + { + get { return tokens; } + set { tokens = value; } + } + + public bool HasUniqueNavigationNodes + { + get { return uniqueNavigationNodes; } + set { uniqueNavigationNodes = value; } + } + + public void ReplaceChildren(object parent, int startChildIndex, int stopChildIndex, object t) + { + throw new NotSupportedException("can't do stream rewrites yet"); + } + + /// <summary> + /// Print out the entire tree including DOWN/UP nodes. Uses + /// a recursive walk. Mostly useful for testing as it yields + /// the token types not text. + /// </summary> + public override string ToString() + { + return ToString(root, null); + } + + protected int LookaheadSize + { + get { return tail < head ? (lookahead.Length - head + tail) : (tail - head); } + } + + /// <summary>TODO: not sure this is what we want for trees. </summary> + public virtual string ToString(object start, object stop) + { + if ( start == null ) + { + return null; + } + // if we have the token stream, use that to dump text in order + if ( tokens != null ) + { + // don't trust stop node as it's often an UP node etc... + // walk backwards until you find a non-UP, non-DOWN node + // and ask for it's token index. + int beginTokenIndex = adaptor.GetTokenStartIndex(start); + int endTokenIndex = adaptor.GetTokenStopIndex(stop); + if ( (stop != null) && (adaptor.GetNodeType(stop) == Token.UP) ) + { + endTokenIndex = adaptor.GetTokenStopIndex(start); + } + else + { + endTokenIndex = Count-1; + } + return tokens.ToString(beginTokenIndex, endTokenIndex); + } + StringBuilder buf = new StringBuilder(); + ToStringWork(start, stop, buf); + return buf.ToString(); + } + + protected internal virtual void ToStringWork(object p, object stop, StringBuilder buf) + { + if ( !adaptor.IsNil(p) ) + { + string text = adaptor.GetNodeText(p); + if (text == null) + { + text = " " + adaptor.GetNodeType(p); + } + buf.Append(text); // ask the node to go to string + } + if (p == stop) + { + return; + } + int n = adaptor.GetChildCount(p); + if ( (n > 0) && !adaptor.IsNil(p) ) + { + buf.Append(" "); + buf.Append(Token.DOWN); + } + for (int c = 0; c < n; c++) + { + object child = adaptor.GetChild(p, c); + ToStringWork(child, stop, buf); + } + if ( (n > 0) && !adaptor.IsNil(p) ) + { + buf.Append(" "); + buf.Append(Token.UP); + } + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ANTLRFileStream.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ANTLRFileStream.cs new file mode 100644 index 0000000..f66bbfc --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ANTLRFileStream.cs @@ -0,0 +1,150 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + using StreamReader = System.IO.StreamReader; + using FileInfo = System.IO.FileInfo; + using Encoding = System.Text.Encoding; + + /// <summary> + /// A character stream - an <see cref="ICharStream"/> - that loads + /// and caches the contents of it's underlying file fully during + /// object construction + /// </summary> + /// <remarks> + /// This looks very much like an ANTLReaderStream or an ANTLRInputStream + /// but, it is a special case. Since we know the exact size of the file to + /// load, we can avoid lots of data copying and buffer resizing. + /// </remarks> + public class ANTLRFileStream : ANTLRStringStream + { + #region Constructors + + /// <summary> + /// Initializes a new instance of the ANTLRFileStream class + /// </summary> + protected ANTLRFileStream() + { + } + + /// <summary> + /// Initializes a new instance of the ANTLRFileStream class for the + /// specified file name + /// </summary> + public ANTLRFileStream(string fileName) : + this(fileName, Encoding.Default) + { + } + + /// <summary> + /// Initializes a new instance of the ANTLRFileStream class for the + /// specified file name and encoding + /// </summary> + public ANTLRFileStream(string fileName, Encoding encoding) + { + this.fileName = fileName; + Load(fileName, encoding); + } + + /// <summary> + /// Gets the file name of this ANTLRFileStream underlying file + /// </summary> + override public string SourceName + { + get { return fileName; } + } + + #endregion + + + #region Public API + + /// <summary> + /// Loads and buffers the specified file to be used as this + /// ANTLRFileStream's source + /// </summary> + /// <param name="fileName">File to load</param> + /// <param name="encoding">Encoding to apply to file</param> + public virtual void Load(string fileName, Encoding encoding) + { + if (fileName == null) + return; + + StreamReader fr = null; + try + { + FileInfo f = new FileInfo(fileName); + int filelen = (int)GetFileLength(f); + data = new char[filelen]; + if (encoding != null) + fr = new StreamReader(fileName, encoding); + else + fr = new StreamReader(fileName, Encoding.Default); + n = fr.Read((Char[])data, 0, data.Length); + } + finally + { + if (fr != null) + { + fr.Close(); + } + } + } + + #endregion + + + #region Data Members + + /// <summary>Fully qualified name of the stream's underlying file</summary> + protected string fileName; + + #endregion + + + #region Private Members + + private long GetFileLength(FileInfo file) + { + if (file.Exists) + return file.Length; + else + return 0; + } + + #endregion + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ANTLRInputStream.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ANTLRInputStream.cs new file mode 100644 index 0000000..14c6891 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ANTLRInputStream.cs @@ -0,0 +1,120 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + using Encoding = System.Text.Encoding; + using Stream = System.IO.Stream; + using StreamReader = System.IO.StreamReader; + + /// <summary> + /// A character stream - an <see cref="ICharStream"/> - that loads + /// and caches the contents of it's underlying + /// <see cref="System.IO.Stream"/> fully during object construction + /// </summary> + /// <remarks> + /// Useful for reading from stdin and, for specifying file encodings etc... + /// </remarks> + public class ANTLRInputStream : ANTLRReaderStream + { + #region Constructors + + /// <summary> + /// Initializes a new instance of the ANTLRInputStream class + /// </summary> + protected ANTLRInputStream() + { + } + + /// <summary> + /// Initializes a new instance of the ANTLRInputStream class for the + /// specified stream + /// </summary> + public ANTLRInputStream(Stream istream) + : this(istream, null) + { + } + + /// <summary> + /// Initializes a new instance of the ANTLRInputStream class for the + /// specified stream and encoding + /// </summary> + public ANTLRInputStream(Stream istream, Encoding encoding) + : this(istream, INITIAL_BUFFER_SIZE, encoding) + { + + } + + /// <summary> + /// Initializes a new instance of the ANTLRInputStream class for the + /// specified stream and initial data buffer size + /// </summary> + public ANTLRInputStream(Stream istream, int size) + : this(istream, size, null) + { + } + + /// <summary> + /// Initializes a new instance of the ANTLRInputStream class for the + /// specified stream, encoding and initial data buffer size + /// </summary> + public ANTLRInputStream(Stream istream, int size, Encoding encoding) + : this(istream, size, READ_BUFFER_SIZE, encoding) + { + } + + /// <summary> + /// Initializes a new instance of the ANTLRInputStream class for the + /// specified stream, encoding, initial data buffer size and, using + /// a read buffer of the specified size + /// </summary> + public ANTLRInputStream(Stream istream, int size, int readBufferSize, Encoding encoding) + { + StreamReader reader; + if (encoding != null) + { + reader = new StreamReader(istream, encoding); + } + else + { + reader = new StreamReader(istream); + } + Load(reader, size, readBufferSize); + } + + #endregion + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ANTLRReaderStream.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ANTLRReaderStream.cs new file mode 100644 index 0000000..9cb9b9c --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ANTLRReaderStream.cs @@ -0,0 +1,149 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + using TextReader = System.IO.TextReader; + + /// <summary> + /// An ANTLRStringStream that caches all the input from a TextReader. It + /// behaves just like a plain ANTLRStringStream + /// </summary> + /// <remarks> + /// Manages the buffer manually to avoid unnecessary data copying. + /// If you need encoding, use ANTLRInputStream. + /// </remarks> + public class ANTLRReaderStream : ANTLRStringStream + { + /// <summary>Default size (in characters) of the buffer used for IO reads</summary> + public static readonly int READ_BUFFER_SIZE = 1024; + + /// <summary>Initial size (in characters) of the data cache</summary> + public static readonly int INITIAL_BUFFER_SIZE = 1024; + + #region Constructors + + /// <summary> + /// Initializes a new instance of the ANTLRReaderStream class + /// </summary> + protected ANTLRReaderStream() + { + } + + /// <summary> + /// Initializes a new instance of the ANTLRReaderStream class for the + /// specified TextReader + /// </summary> + public ANTLRReaderStream(TextReader reader) + : this(reader, INITIAL_BUFFER_SIZE, READ_BUFFER_SIZE) + { + + } + + /// <summary> + /// Initializes a new instance of the ANTLRReaderStream class for the + /// specified TextReader and initial data buffer size + /// </summary> + public ANTLRReaderStream(TextReader reader, int size) + : this(reader, size, READ_BUFFER_SIZE) + { + } + + /// <summary> + /// Initializes a new instance of the ANTLRReaderStream class for the + /// specified TextReader, initial data buffer size and, using + /// a read buffer of the specified size + /// </summary> + public ANTLRReaderStream(TextReader reader, int size, int readChunkSize) + { + Load(reader, size, readChunkSize); + } + + #endregion + + + #region Public API + + /// <summary> + /// Loads and buffers the contents of the specified reader to be + /// used as this ANTLRReaderStream's source + /// </summary> + public virtual void Load(TextReader reader, int size, int readChunkSize) + { + if (reader == null) + { + return; + } + if (size <= 0) + { + size = INITIAL_BUFFER_SIZE; + } + if (readChunkSize <= 0) + { + readChunkSize = READ_BUFFER_SIZE; + } + + try + { + // alloc initial buffer size. + data = new char[size]; + // read all the data in chunks of readChunkSize + int numRead = 0; + int p = 0; + do + { + if (p + readChunkSize > data.Length) + { // overflow? + char[] newdata = new char[data.Length * 2]; // resize + Array.Copy(data, 0, newdata, 0, data.Length); + data = newdata; + } + numRead = reader.Read(data, p, readChunkSize); + p += numRead; + } while (numRead != 0); // while not EOF + // set the actual size of the data available; + // EOF subtracted one above in p+=numRead; add one back + //n = p + 1; + n = p; + } + finally + { + reader.Close(); + } + } + + #endregion + } +} diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ANTLRStringStream.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ANTLRStringStream.cs new file mode 100644 index 0000000..4e66b0d --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ANTLRStringStream.cs @@ -0,0 +1,319 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + using IList = System.Collections.IList; + using ArrayList = System.Collections.ArrayList; + + /// <summary> + /// A pretty quick <see cref="ICharStream"/> that uses a character array + /// directly as it's underlying source. + /// </summary> + public class ANTLRStringStream : ICharStream + { + #region Constructors + + /// <summary> + /// Initializes a new instance of the ANTLRStringStream class + /// </summary> + protected ANTLRStringStream() + { + } + + /// <summary> + /// Initializes a new instance of the ANTLRStringStream class for the + /// specified string. This copies data from the string to a local + /// character array + /// </summary> + public ANTLRStringStream(string input) + { + this.data = input.ToCharArray(); + this.n = input.Length; + } + + /// <summary> + /// Initializes a new instance of the ANTLRStringStream class for the + /// specified character array. This is the preferred constructor as + /// no data is copied + /// </summary> + public ANTLRStringStream(char[] data, int numberOfActualCharsInArray) + { + this.data = data; + this.n = numberOfActualCharsInArray; + } + + #endregion + + #region Public API + + /// <summary> + /// Current line position in stream. + /// </summary> + virtual public int Line + { + get { return line; } + set { this.line = value; } + + } + + /// <summary> + /// Current character position on the current line stream + /// (i.e. columnn position) + /// </summary> + virtual public int CharPositionInLine + { + get { return charPositionInLine; } + set { this.charPositionInLine = value; } + + } + + /// <summary> + /// Resets the stream so that it is in the same state it was + /// when the object was created *except* the data array is not + /// touched. + /// </summary> + public virtual void Reset() + { + p = 0; + line = 1; + charPositionInLine = 0; + markDepth = 0; + } + + /// <summary> + /// Advances the read position of the stream. Updates line and column state + /// </summary> + public virtual void Consume() + { + if (p < n) + { + charPositionInLine++; + if (data[p] == '\n') + { + line++; + charPositionInLine = 0; + } + p++; + } + } + + /// <summary> + /// Return lookahead characters at the specified offset from the current read position. + /// The lookahead offset can be negative. + /// </summary> + public virtual int LA(int i) + { + if (i == 0) + { + return 0; // undefined + } + if (i < 0) + { + i++; // e.g., translate LA(-1) to use offset i=0; then data[p+0-1] + if ( (p + i - 1) < 0 ) + { + return (int)CharStreamConstants.EOF; // invalid; no char before first char + } + } + + if ((p + i - 1) >= n) + { + return (int)CharStreamConstants.EOF; + } + return data[p + i - 1]; + } + + public virtual int LT(int i) + { + return LA(i); + } + + /// <summary> + /// Return the current input symbol index 0..n where n indicates the + /// last symbol has been read. The index is the index of char to + /// be returned from LA(1). + /// </summary> + public virtual int Index() + { + return p; + } + + /// <summary> + /// Returns the size of the stream + /// </summary> + [Obsolete("Please use property Count instead.")] + public virtual int Size() + { + return Count; + } + + /// <summary> + /// Returns the size of the stream + /// </summary> + public virtual int Count + { + get { return n; } + } + + public virtual int Mark() + { + if (markers == null) + { + markers = new ArrayList(); + markers.Add(null); // depth 0 means no backtracking, leave blank + } + markDepth++; + CharStreamState state = null; + if (markDepth >= markers.Count) + { + state = new CharStreamState(); + markers.Add(state); + } + else + { + state = (CharStreamState)markers[markDepth]; + } + state.p = p; + state.line = line; + state.charPositionInLine = charPositionInLine; + lastMarker = markDepth; + return markDepth; + } + + public virtual void Rewind(int m) + { + CharStreamState state = (CharStreamState)markers[m]; + // restore stream state + Seek(state.p); + line = state.line; + charPositionInLine = state.charPositionInLine; + Release(m); + } + + public virtual void Rewind() + { + Rewind(lastMarker); + } + + public virtual void Release(int marker) + { + // unwind any other markers made after m and release m + markDepth = marker; + // release this marker + markDepth--; + } + + /// <summary>Seeks to the specified position.</summary> + /// <remarks> + /// Consume ahead until p==index; can't just set p=index as we must + /// update line and charPositionInLine. + /// </remarks> + public virtual void Seek(int index) + { + if (index <= p) + { + p = index; // just jump; don't update stream state (line, ...) + return; + } + // seek forward, consume until p hits index + while (p < index) + { + Consume(); + } + } + + public virtual string Substring(int start, int stop) + { + return new string(data, start, stop - start + 1); + } + + public virtual string SourceName { + get { return name; } + set { name = value; } + } + + #endregion + + + #region Data Members + + /// <summary>The data for the stream</summary> + protected internal char[] data; + + /// <summary>How many characters are actually in the buffer?</summary> + protected int n; + + + /// <summary>Index in our array for the next char (0..n-1)</summary> + protected internal int p = 0; + + /// <summary>Current line number within the input (1..n )</summary> + protected internal int line = 1; + + /// <summary> + /// The index of the character relative to the beginning of the + /// line (0..n-1) + /// </summary> + protected internal int charPositionInLine = 0; + + /// <summary> + /// Tracks the depth of nested <see cref="IIntStream.Mark"/> calls + /// </summary> + protected internal int markDepth = 0; + + /// <summary> + /// A list of CharStreamState objects that tracks the stream state + /// (i.e. line, charPositionInLine, and p) that can change as you + /// move through the input stream. Indexed from 1..markDepth. + /// A null is kept @ index 0. Create upon first call to Mark(). + /// </summary> + protected internal IList markers; + + /// <summary> + /// Track the last Mark() call result value for use in Rewind(). + /// </summary> + protected int lastMarker; + + /// <summary> + /// What is name or source of this char stream? + /// </summary> + protected string name; + + #endregion + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/BaseRecognizer.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/BaseRecognizer.cs new file mode 100644 index 0000000..3d28fb3 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/BaseRecognizer.cs @@ -0,0 +1,1008 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + using IList = System.Collections.IList; + using ArrayList = System.Collections.ArrayList; + using IDictionary = System.Collections.IDictionary; + using Hashtable = System.Collections.Hashtable; + using StackTrace = System.Diagnostics.StackTrace; + using StackFrame = System.Diagnostics.StackFrame; + using CollectionUtils = Antlr.Runtime.Collections.CollectionUtils; + + public delegate void SynPredPointer(); + + /// <summary> + /// A generic recognizer that can handle recognizers generated from + /// lexer, parser, and tree grammars. This is all the parsing + /// support code essentially; most of it is error recovery stuff and + /// backtracking. + /// </summary> + public abstract class BaseRecognizer + { + #region Constructors + + public BaseRecognizer() + { + state = new RecognizerSharedState(); + } + + public BaseRecognizer(RecognizerSharedState state) + { + if ( state==null ) { + state = new RecognizerSharedState(); + } + this.state = state; + } + + #endregion + + + #region Public API + + public virtual void BeginBacktrack(int level) + { + } + + public virtual void EndBacktrack(int level, bool successful) + { + } + + abstract public IIntStream Input { get; } + + public int BacktrackingLevel + { + get { return state.backtracking; } + set { state.backtracking = value; } + } + + /** Return whether or not a backtracking attempt failed. */ + public bool Failed() { return state.failed; } + + /// <summary>Reset the parser's state. Subclasses must rewind the input stream.</summary> + public virtual void Reset() + { + // wack everything related to error recovery + if (state == null) { + return; // no shared state work to do + } + state.followingStackPointer = -1; + state.errorRecovery = false; + state.lastErrorIndex = -1; + state.failed = false; + state.syntaxErrors = 0; + // wack everything related to backtracking and memoization + state.backtracking = 0; + for (int i = 0; (state.ruleMemo != null) && (i < state.ruleMemo.Length); i++) + { + // wipe cache + state.ruleMemo[i] = null; + } + } + + /// <summary> + /// Match current input symbol against ttype. Attempt + /// single token insertion or deletion error recovery. If + /// that fails, throw MismatchedTokenException. + /// </summary> + /// <remarks> + /// To turn off single token insertion or deletion error + /// recovery, override RecoverFromMismatchedToken() and have it call + /// pthrow an exception. See TreeParser.RecoverFromMismatchedToken(). + /// This way any error in a rule will cause an exception and + /// immediate exit from rule. Rule would recover by resynchronizing + /// to the set of symbols that can follow rule ref. + /// </remarks> + public virtual object Match(IIntStream input, int ttype, BitSet follow) { + object matchedSymbol = GetCurrentInputSymbol(input); + if (input.LA(1) == ttype) { + input.Consume(); + state.errorRecovery = false; + state.failed = false; + return matchedSymbol; + } + if (state.backtracking > 0) { + state.failed = true; + return matchedSymbol; + } + matchedSymbol = RecoverFromMismatchedToken(input, ttype, follow); + return matchedSymbol; + } + + /// <summary> Match the wildcard: in a symbol</summary> + public virtual void MatchAny(IIntStream input) + { + state.errorRecovery = false; + state.failed = false; + input.Consume(); + } + + public bool MismatchIsUnwantedToken(IIntStream input, int ttype) { + return input.LA(2) == ttype; + } + + public bool MismatchIsMissingToken(IIntStream input, BitSet follow) { + if (follow == null) { + // we have no information about the follow; we can only consume + // a single token and hope for the best + return false; + } + + // compute what can follow this grammar element reference + if (follow.Member(Token.EOR_TOKEN_TYPE)) { + BitSet viableTokensFollowingThisRule = ComputeContextSensitiveRuleFOLLOW(); + follow = follow.Or(viableTokensFollowingThisRule); + if (state.followingStackPointer >= 0) { // remove EOR if we're not the start symbol + follow.Remove(Token.EOR_TOKEN_TYPE); + } + } + + // if current token is consistent with what could come after set + // then we know we're missing a token; error recovery is free to + // "insert" the missing token + + // BitSet cannot handle negative numbers like -1 (EOF) so I leave EOR + // in follow set to indicate that the fall of the start symbol is + // in the set (EOF can follow). + if ( follow.Member(input.LA(1)) || follow.Member(Token.EOR_TOKEN_TYPE) ) { + return true; + } + return false; + } + + /// <summary> + /// Report a recognition problem. + /// </summary> + /// <remarks> + /// This method sets errorRecovery to indicate the parser is recovering + /// not parsing. Once in recovery mode, no errors are generated. + /// To get out of recovery mode, the parser must successfully Match + /// a token (after a resync). So it will go: + /// + /// 1. error occurs + /// 2. enter recovery mode, report error + /// 3. consume until token found in resynch set + /// 4. try to resume parsing + /// 5. next Match() will reset errorRecovery mode + /// + /// If you override, make sure to update syntaxErrors if you care about that. + /// </remarks> + public virtual void ReportError(RecognitionException e) + { + // if we've already reported an error and have not matched a token + // yet successfully, don't report any errors. + if (state.errorRecovery) + { + return; + } + state.syntaxErrors++; // don't count spurious + state.errorRecovery = true; + + DisplayRecognitionError(this.TokenNames, e); + } + + public virtual void DisplayRecognitionError(string[] tokenNames, RecognitionException e) + { + string hdr = GetErrorHeader(e); + string msg = GetErrorMessage(e, tokenNames); + EmitErrorMessage(hdr + " " + msg); + } + + /// <summary> + /// What error message should be generated for the various exception types? + /// + /// Not very object-oriented code, but I like having all error message generation + /// within one method rather than spread among all of the exception classes. This + /// also makes it much easier for the exception handling because the exception + /// classes do not have to have pointers back to this object to access utility + /// routines and so on. Also, changing the message for an exception type would be + /// difficult because you would have to subclassing exception, but then somehow get + /// ANTLR to make those kinds of exception objects instead of the default. + /// + /// This looks weird, but trust me--it makes the most sense in terms of flexibility. + /// + /// For grammar debugging, you will want to override this to add more information + /// such as the stack frame with GetRuleInvocationStack(e, this.GetType().Fullname) + /// and, for no viable alts, the decision description and state etc... + /// + /// Override this to change the message generated for one or more exception types. + /// </summary> + public virtual string GetErrorMessage(RecognitionException e, string[] tokenNames) + { + string msg = e.Message; + if (e is UnwantedTokenException) { + UnwantedTokenException ute = (UnwantedTokenException)e; + string tokenName="<unknown>"; + if ( ute.Expecting== Token.EOF ) { + tokenName = "EOF"; + } + else { + tokenName = tokenNames[ute.Expecting]; + } + msg = "extraneous input " + GetTokenErrorDisplay(ute.UnexpectedToken) + + " expecting " + tokenName; + } + else if (e is MissingTokenException) { + MissingTokenException mte = (MissingTokenException)e; + string tokenName="<unknown>"; + if (mte.Expecting == Token.EOF) { + tokenName = "EOF"; + } + else { + tokenName = tokenNames[mte.Expecting]; + } + msg = "missing " + tokenName + " at " + GetTokenErrorDisplay(e.Token); + } + else if (e is MismatchedTokenException) + { + MismatchedTokenException mte = (MismatchedTokenException)e; + string tokenName = "<unknown>"; + if (mte.Expecting == Token.EOF) + { + tokenName = "EOF"; + } + else + { + tokenName = tokenNames[mte.Expecting]; + } + msg = "mismatched input " + GetTokenErrorDisplay(e.Token) + " expecting " + tokenName; + + } + else if (e is MismatchedTreeNodeException) + { + MismatchedTreeNodeException mtne = (MismatchedTreeNodeException)e; + string tokenName = "<unknown>"; + if (mtne.expecting == Token.EOF) + { + tokenName = "EOF"; + } + else + { + tokenName = tokenNames[mtne.expecting]; + } + // The ternary operator is only necessary because of a bug in the .NET framework + msg = "mismatched tree node: " + ((mtne.Node!=null && mtne.Node.ToString()!=null) ? + mtne.Node : string.Empty) + " expecting " + tokenName; + } + else if (e is NoViableAltException) + { + //NoViableAltException nvae = (NoViableAltException)e; + // for development, can add "decision=<<"+nvae.grammarDecisionDescription+">>" + // and "(decision="+nvae.decisionNumber+") and + // "state "+nvae.stateNumber + msg = "no viable alternative at input " + GetTokenErrorDisplay(e.Token); + } + else if (e is EarlyExitException) + { + //EarlyExitException eee = (EarlyExitException)e; + // for development, can add "(decision="+eee.decisionNumber+")" + msg = "required (...)+ loop did not match anything at input " + GetTokenErrorDisplay(e.Token); + } + else if (e is MismatchedSetException) + { + MismatchedSetException mse = (MismatchedSetException)e; + msg = "mismatched input " + GetTokenErrorDisplay(e.Token) + " expecting set " + mse.expecting; + } + else if (e is MismatchedNotSetException) + { + MismatchedNotSetException mse = (MismatchedNotSetException)e; + msg = "mismatched input " + GetTokenErrorDisplay(e.Token) + " expecting set " + mse.expecting; + } + else if (e is FailedPredicateException) + { + FailedPredicateException fpe = (FailedPredicateException)e; + msg = "rule " + fpe.ruleName + " failed predicate: {" + fpe.predicateText + "}?"; + } + return msg; + } + + /// <summary> + /// Get number of recognition errors (lexer, parser, tree parser). Each + /// recognizer tracks its own number. So parser and lexer each have + /// separate count. Does not count the spurious errors found between + /// an error and next valid token match + /// + /// See also ReportError() + /// </summary> + public int NumberOfSyntaxErrors { + get { return state.syntaxErrors; } + } + + /// <summary> + /// What is the error header, normally line/character position information? + /// </summary> + public virtual string GetErrorHeader(RecognitionException e) + { + return "line " + e.Line + ":" + e.CharPositionInLine; + } + + /// <summary> + /// How should a token be displayed in an error message? The default + /// is to display just the text, but during development you might + /// want to have a lot of information spit out. Override in that case + /// to use t.ToString() (which, for CommonToken, dumps everything about + /// the token). This is better than forcing you to override a method in + /// your token objects because you don't have to go modify your lexer + /// so that it creates a new type. + /// </summary> + public virtual string GetTokenErrorDisplay(IToken t) + { + string s = t.Text; + if (s == null) + { + if (t.Type == Token.EOF) + { + s = "<EOF>"; + } + else + { + s = "<" + t.Type + ">"; + } + } + s = s.Replace("\n", "\\\\n"); + s = s.Replace("\r", "\\\\r"); + s = s.Replace("\t", "\\\\t"); + return "'" + s + "'"; + } + + /// <summary> + /// Override this method to change where error messages go + /// </summary> + public virtual void EmitErrorMessage(string msg) + { + Console.Error.WriteLine(msg); + } + + /// <summary> + /// Recover from an error found on the input stream. This is + /// for NoViableAlt and mismatched symbol exceptions. If you enable + /// single token insertion and deletion, this will usually not + /// handle mismatched symbol exceptions but there could be a mismatched + /// token that the Match() routine could not recover from. + /// </summary> + public virtual void Recover(IIntStream input, RecognitionException re) + { + if (state.lastErrorIndex == input.Index()) + { + // uh oh, another error at same token index; must be a case + // where LT(1) is in the recovery token set so nothing is + // consumed; consume a single token so at least to prevent + // an infinite loop; this is a failsafe. + input.Consume(); + } + state.lastErrorIndex = input.Index(); + BitSet followSet = ComputeErrorRecoverySet(); + BeginResync(); + ConsumeUntil(input, followSet); + EndResync(); + } + + /// <summary>A hook to listen in on the token consumption during error recovery. + /// The DebugParser subclasses this to fire events to the listenter. + /// </summary> + public virtual void BeginResync() + { + } + + public virtual void EndResync() + { + } + + /// <summary> + /// Attempt to Recover from a single missing or extra token. + /// </summary> + /// <remarks> + /// EXTRA TOKEN + /// + /// LA(1) is not what we are looking for. If LA(2) has the right token, + /// however, then assume LA(1) is some extra spurious token. Delete it + /// and LA(2) as if we were doing a normal Match(), which advances the + /// input. + /// + /// MISSING TOKEN + /// + /// If current token is consistent with what could come after + /// ttype then it is ok to "insert" the missing token, else throw + /// exception For example, Input "i=(3;" is clearly missing the + /// ')'. When the parser returns from the nested call to expr, it + /// will have call chain: + /// + /// stat -> expr -> atom + /// + /// and it will be trying to Match the ')' at this point in the + /// derivation: + /// + /// => ID '=' '(' INT ')' ('+' atom)* ';' + /// ^ + /// Match() will see that ';' doesn't Match ')' and report a + /// mismatched token error. To Recover, it sees that LA(1)==';' + /// is in the set of tokens that can follow the ')' token + /// reference in rule atom. It can assume that you forgot the ')'. + /// </remarks> + protected internal virtual Object RecoverFromMismatchedToken(IIntStream input, int ttype, BitSet follow) { + RecognitionException e = null; + // if next token is what we are looking for then "delete" this token + if (MismatchIsUnwantedToken(input, ttype)) { + e = new UnwantedTokenException(ttype, input); + BeginResync(); + input.Consume(); // simply delete extra token + EndResync(); + ReportError(e); // report after consuming so AW sees the token in the exception + // we want to return the token we're actually matching + object matchedSymbol = GetCurrentInputSymbol(input); + input.Consume(); // move past ttype token as if all were ok + return matchedSymbol; + } + // can't recover with single token deletion, try insertion + if (MismatchIsMissingToken(input, follow)) { + object inserted = GetMissingSymbol(input, e, ttype, follow); + e = new MissingTokenException(ttype, input, inserted); + ReportError(e); // report after inserting so AW sees the token in the exception + return inserted; + } + // even that didn't work; must throw the exception + e = new MismatchedTokenException(ttype, input); + throw e; + } + + /** Not currently used */ + public virtual object RecoverFromMismatchedSet(IIntStream input, RecognitionException e, BitSet follow) { + if (MismatchIsMissingToken(input, follow)) { + ReportError(e); + // we don't know how to conjure up a token for sets yet + return GetMissingSymbol(input, e, Token.INVALID_TOKEN_TYPE, follow); + } + // TODO do single token deletion like above for Token mismatch + throw e; + } + + public virtual void ConsumeUntil(IIntStream input, int tokenType) + { + int ttype = input.LA(1); + while (ttype != Token.EOF && ttype != tokenType) + { + input.Consume(); + ttype = input.LA(1); + } + } + + /// <summary>Consume tokens until one matches the given token set </summary> + public virtual void ConsumeUntil(IIntStream input, BitSet set) + { + int ttype = input.LA(1); + while (ttype != Token.EOF && !set.Member(ttype)) + { + input.Consume(); + ttype = input.LA(1); + } + } + + /// <summary> + /// Returns List <String> of the rules in your parser instance + /// leading up to a call to this method. You could override if + /// you want more details such as the file/line info of where + /// in the parser source code a rule is invoked. + /// </summary> + /// <remarks> + /// This is very useful for error messages and for context-sensitive + /// error recovery. + /// </remarks> + public virtual IList GetRuleInvocationStack() + { + string parserClassName = GetType().FullName; + return GetRuleInvocationStack(new System.Exception(), parserClassName); + } + + /// <summary> + /// A more general version of GetRuleInvocationStack where you can + /// pass in, for example, a RecognitionException to get it's rule + /// stack trace. This routine is shared with all recognizers, hence, + /// static. + /// + /// TODO: move to a utility class or something; weird having lexer call this + /// </summary> + public static IList GetRuleInvocationStack(Exception e, string recognizerClassName) + { + IList rules = new ArrayList(); + StackTrace st = new StackTrace(e); + int i = 0; + for (i = st.FrameCount - 1; i >= 0; i--) + { + StackFrame sf = st.GetFrame(i); + if (sf.GetMethod().DeclaringType.FullName.StartsWith("Antlr.Runtime.")) + { + continue; // skip support code such as this method + } + if (sf.GetMethod().Name.Equals(NEXT_TOKEN_RULE_NAME)) + { + continue; + } + if (!sf.GetMethod().DeclaringType.FullName.Equals(recognizerClassName)) + { + continue; // must not be part of this parser + } + //kunle: rules.Add(sf.GetMethod().DeclaringType.FullName + "." + sf.GetMethod().Name); + rules.Add(sf.GetMethod().Name); + } + return rules; + } + + /// <summary> + /// For debugging and other purposes, might want the grammar name. + /// Have ANTLR generate an implementation for this property. + /// </summary> + /// <returns></returns> + public virtual string GrammarFileName + { + get { return null; } + } + + /// <summary> + /// For debugging and other purposes, might want the source name. + /// Have ANTLR provide a hook for this property. + /// </summary> + /// <returns>The source name</returns> + public abstract string SourceName { + get; + } + + /// <summary>A convenience method for use most often with template rewrites. + /// Convert a List<Token> to List<String> + /// </summary> + public virtual IList ToStrings(IList tokens) + { + if (tokens == null) + return null; + IList strings = new ArrayList(tokens.Count); + for (int i = 0; i < tokens.Count; i++) + { + strings.Add(((IToken)tokens[i]).Text); + } + return strings; + } + + /// <summary> + /// Given a rule number and a start token index number, return + /// MEMO_RULE_UNKNOWN if the rule has not parsed input starting from + /// start index. If this rule has parsed input starting from the + /// start index before, then return where the rule stopped parsing. + /// It returns the index of the last token matched by the rule. + /// </summary> + /// <remarks> + /// For now we use a hashtable and just the slow Object-based one. + /// Later, we can make a special one for ints and also one that + /// tosses out data after we commit past input position i. + /// </remarks> + public virtual int GetRuleMemoization(int ruleIndex, int ruleStartIndex) + { + if (state.ruleMemo[ruleIndex] == null) + { + state.ruleMemo[ruleIndex] = new Hashtable(); + } + object stopIndexI = state.ruleMemo[ruleIndex][(int)ruleStartIndex]; + if (stopIndexI == null) + { + return MEMO_RULE_UNKNOWN; + } + return (int)stopIndexI; + } + + /// <summary> + /// Has this rule already parsed input at the current index in the + /// input stream? Return the stop token index or MEMO_RULE_UNKNOWN. + /// If we attempted but failed to parse properly before, return + /// MEMO_RULE_FAILED. + /// + /// This method has a side-effect: if we have seen this input for + /// this rule and successfully parsed before, then seek ahead to + /// 1 past the stop token matched for this rule last time. + /// </summary> + public virtual bool AlreadyParsedRule(IIntStream input, int ruleIndex) + { + int stopIndex = GetRuleMemoization(ruleIndex, input.Index()); + if (stopIndex == MEMO_RULE_UNKNOWN) + { + return false; + } + if (stopIndex == MEMO_RULE_FAILED) + { + state.failed = true; + } + else + { + input.Seek(stopIndex + 1); // jump to one past stop token + } + return true; + } + + /// <summary> + /// Record whether or not this rule parsed the input at this position + /// successfully. Use a standard hashtable for now. + /// </summary> + public virtual void Memoize(IIntStream input, int ruleIndex, int ruleStartIndex) + { + int stopTokenIndex = state.failed ? MEMO_RULE_FAILED : input.Index() - 1; + if (state.ruleMemo[ruleIndex] != null) + { + state.ruleMemo[ruleIndex][(int)ruleStartIndex] = (int)stopTokenIndex; + } + } + + /// <summary> + /// Return how many rule/input-index pairs there are in total. + /// TODO: this includes synpreds. :( + /// </summary> + /// <returns></returns> + public int GetRuleMemoizationCacheSize() + { + int n = 0; + for (int i = 0; state.ruleMemo != null && i < state.ruleMemo.Length; i++) + { + IDictionary ruleMap = state.ruleMemo[i]; + if (ruleMap != null) + { + n += ruleMap.Count; // how many input indexes are recorded? + } + } + return n; + } + + public virtual void TraceIn(string ruleName, int ruleIndex, object inputSymbol) + { + Console.Out.Write("enter " + ruleName + " " + inputSymbol); + if (state.backtracking > 0) + { + Console.Out.Write(" backtracking=" + state.backtracking); + } + Console.Out.WriteLine(); + } + + public virtual void TraceOut(string ruleName, int ruleIndex, object inputSymbol) { + Console.Out.Write("exit " + ruleName + " " + inputSymbol); + if (state.backtracking > 0) { + Console.Out.Write(" backtracking=" + state.backtracking); + if (state.failed) { + Console.Out.WriteLine(" failed" + state.failed); + } else { + Console.Out.WriteLine(" succeeded" + state.failed); + } + } + Console.Out.WriteLine(); + } + + + /// <summary> + /// Used to print out token names like ID during debugging and + /// error reporting. The generated parsers implement a method + /// that overrides this to point to their string[] tokenNames. + /// </summary> + virtual public string[] TokenNames + { + get { return null; } + } + + #endregion + + + #region Helper Methods + + /// <summary> + /// Factor out what to do upon token mismatch so tree parsers can behave + /// differently. Override and call RecoverFromMismatchedToken() + /// to get single token insertion and deletion. Use this to turn off + /// single token insertion and deletion. Override mismatchRecover + /// to call this instead. + /// + /// TODO: fix this comment, mismatchRecover doesn't exist, for example + /// </summary> + /* + protected internal virtual void Mismatch(IIntStream input, int ttype, BitSet follow) + { + if ( MismatchIsUnwantedToken(input, ttype) ) { + throw new UnwantedTokenException(ttype, input); + } + else if ( MismatchIsMissingToken(input, follow) ) { + throw new MissingTokenException(ttype, input, null); + } + throw new MismatchedTokenException(ttype, input); + }*/ + + /* Compute the error recovery set for the current rule. During + * rule invocation, the parser pushes the set of tokens that can + * follow that rule reference on the stack; this amounts to + * computing FIRST of what follows the rule reference in the + * enclosing rule. This local follow set only includes tokens + * from within the rule; i.e., the FIRST computation done by + * ANTLR stops at the end of a rule. + * + * EXAMPLE + * + * When you find a "no viable alt exception", the input is not + * consistent with any of the alternatives for rule r. The best + * thing to do is to consume tokens until you see something that + * can legally follow a call to r *or* any rule that called r. + * You don't want the exact set of viable next tokens because the + * input might just be missing a token--you might consume the + * rest of the input looking for one of the missing tokens. + * + * Consider grammar: + * + * a : '[' b ']' + * | '(' b ')' + * ; + * b : c '^' INT ; + * c : ID + * | INT + * ; + * + * At each rule invocation, the set of tokens that could follow + * that rule is pushed on a stack. Here are the various "local" + * follow sets: + * + * FOLLOW(b1_in_a) = FIRST(']') = ']' + * FOLLOW(b2_in_a) = FIRST(')') = ')' + * FOLLOW(c_in_b) = FIRST('^') = '^' + * + * Upon erroneous input "[]", the call chain is + * + * a -> b -> c + * + * and, hence, the follow context stack is: + * + * depth local follow set after call to rule + * 0 <EOF> a (from main()) + * 1 ']' b + * 3 '^' c + * + * Notice that ')' is not included, because b would have to have + * been called from a different context in rule a for ')' to be + * included. + * + * For error recovery, we cannot consider FOLLOW(c) + * (context-sensitive or otherwise). We need the combined set of + * all context-sensitive FOLLOW sets--the set of all tokens that + * could follow any reference in the call chain. We need to + * resync to one of those tokens. Note that FOLLOW(c)='^' and if + * we resync'd to that token, we'd consume until EOF. We need to + * sync to context-sensitive FOLLOWs for a, b, and c: {']','^'}. + * In this case, for input "[]", LA(1) is in this set so we would + * not consume anything and after printing an error rule c would + * return normally. It would not find the required '^' though. + * At this point, it gets a mismatched token error and throws an + * exception (since LA(1) is not in the viable following token + * set). The rule exception handler tries to Recover, but finds + * the same recovery set and doesn't consume anything. Rule b + * exits normally returning to rule a. Now it finds the ']' (and + * with the successful Match exits errorRecovery mode). + * + * So, you cna see that the parser walks up call chain looking + * for the token that was a member of the recovery set. + * + * Errors are not generated in errorRecovery mode. + * + * ANTLR's error recovery mechanism is based upon original ideas: + * + * "Algorithms + Data Structures = Programs" by Niklaus Wirth + * + * and + * + * "A note on error recovery in recursive descent parsers": + * http://portal.acm.org/citation.cfm?id=947902.947905 + * + * Later, Josef Grosch had some good ideas: + * + * "Efficient and Comfortable Error Recovery in Recursive Descent + * Parsers": + * ftp://www.cocolab.com/products/cocktail/doca4.ps/ell.ps.zip + * + * Like Grosch I implemented local FOLLOW sets that are combined + * at run-time upon error to avoid overhead during parsing. + */ + protected internal virtual BitSet ComputeErrorRecoverySet() + { + return CombineFollows(false); + } + + /// <summary>Compute the context-sensitive FOLLOW set for current rule. + /// This is set of token types that can follow a specific rule + /// reference given a specific call chain. You get the set of + /// viable tokens that can possibly come next (lookahead depth 1) + /// given the current call chain. Contrast this with the + /// definition of plain FOLLOW for rule r: + /// + /// FOLLOW(r)={x | S=>*alpha r beta in G and x in FIRST(beta)} + /// + /// where x in T* and alpha, beta in V*; T is set of terminals and + /// V is the set of terminals and nonterminals. In other words, + /// FOLLOW(r) is the set of all tokens that can possibly follow + /// references to r in *any* sentential form (context). At + /// runtime, however, we know precisely which context applies as + /// we have the call chain. We may compute the exact (rather + /// than covering superset) set of following tokens. + /// + /// For example, consider grammar: + /// + /// stat : ID '=' expr ';' // FOLLOW(stat)=={EOF} + /// | "return" expr '.' + /// ; + /// expr : atom ('+' atom)* ; // FOLLOW(expr)=={';','.',')'} + /// atom : INT // FOLLOW(atom)=={'+',')',';','.'} + /// | '(' expr ')' + /// ; + /// + /// The FOLLOW sets are all inclusive whereas context-sensitive + /// FOLLOW sets are precisely what could follow a rule reference. + /// For input input "i=(3);", here is the derivation: + /// + /// stat => ID '=' expr ';' + /// => ID '=' atom ('+' atom)* ';' + /// => ID '=' '(' expr ')' ('+' atom)* ';' + /// => ID '=' '(' atom ')' ('+' atom)* ';' + /// => ID '=' '(' INT ')' ('+' atom)* ';' + /// => ID '=' '(' INT ')' ';' + /// + /// At the "3" token, you'd have a call chain of + /// + /// stat -> expr -> atom -> expr -> atom + /// + /// What can follow that specific nested ref to atom? Exactly ')' + /// as you can see by looking at the derivation of this specific + /// input. Contrast this with the FOLLOW(atom)={'+',')',';','.'}. + /// + /// You want the exact viable token set when recovering from a + /// token mismatch. Upon token mismatch, if LA(1) is member of + /// the viable next token set, then you know there is most likely + /// a missing token in the input stream. "Insert" one by just not + /// throwing an exception. + /// </summary> + protected internal virtual BitSet ComputeContextSensitiveRuleFOLLOW() + { + return CombineFollows(true); + } + + protected internal virtual BitSet CombineFollows(bool exact) + { + int top = state.followingStackPointer; + BitSet followSet = new BitSet(); + for (int i = top; i >= 0; i--) + { + BitSet localFollowSet = (BitSet)state.following[i]; + followSet.OrInPlace(localFollowSet); + if (exact) { + // can we see end of rule? + if (localFollowSet.Member(Token.EOR_TOKEN_TYPE)) { + // Only leave EOR in set if at top (start rule); this lets + // us know if have to include follow(start rule); i.e., EOF + if (i > 0) { + followSet.Remove(Token.EOR_TOKEN_TYPE); + } + } + else { // can't see end of rule, quit + break; + } + } + } + return followSet; + } + + /// <summary> + /// Match needs to return the current input symbol, which gets put + /// into the label for the associated token ref; e.g., x=ID. Token + /// and tree parsers need to return different objects. Rather than test + /// for input stream type or change the IntStream interface, I use + /// a simple method to ask the recognizer to tell me what the current + /// input symbol is. + /// </summary> + /// <remarks>This is ignored for lexers.</remarks> + protected virtual object GetCurrentInputSymbol(IIntStream input) { + return null; + } + + /// <summary> + /// Conjure up a missing token during error recovery. + /// </summary> + /// <remarks> + /// The recognizer attempts to recover from single missing + /// symbols. But, actions might refer to that missing symbol. + /// For example, x=ID {f($x);}. The action clearly assumes + /// that there has been an identifier matched previously and that + /// $x points at that token. If that token is missing, but + /// the next token in the stream is what we want we assume that + /// this token is missing and we keep going. Because we + /// have to return some token to replace the missing token, + /// we have to conjure one up. This method gives the user control + /// over the tokens returned for missing tokens. Mostly, + /// you will want to create something special for identifier + /// tokens. For literals such as '{' and ',', the default + /// action in the parser or tree parser works. It simply creates + /// a CommonToken of the appropriate type. The text will be the token. + /// If you change what tokens must be created by the lexer, + /// override this method to create the appropriate tokens. + /// </remarks> + protected virtual object GetMissingSymbol(IIntStream input, + RecognitionException e, + int expectedTokenType, + BitSet follow) { + return null; + } + + /// <summary> + /// Push a rule's follow set using our own hardcoded stack + /// </summary> + /// <param name="fset"></param> + protected void PushFollow(BitSet fset) + { + if ((state.followingStackPointer + 1) >= state.following.Length) + { + BitSet[] f = new BitSet[state.following.Length * 2]; + Array.Copy(state.following, 0, f, 0, state.following.Length); + state.following = f; + } + state.following[++state.followingStackPointer] = fset; + } + + #endregion + + + #region Data Members + + public const int MEMO_RULE_FAILED = -2; + public const int MEMO_RULE_UNKNOWN = -1; + public const int INITIAL_FOLLOW_STACK_SIZE = 100; + + // copies from Token object for convenience in actions + public const int DEFAULT_TOKEN_CHANNEL = Token.DEFAULT_CHANNEL; + public const int HIDDEN = Token.HIDDEN_CHANNEL; + + public static readonly string NEXT_TOKEN_RULE_NAME = "nextToken"; + + /// <summary> + /// An externalized representation of the - shareable - internal state of + /// this lexer, parser or tree parser. + /// </summary> + /// <remarks> + /// The state of a lexer, parser, or tree parser are collected into + /// external state objects so that the state can be shared. This sharing + /// is needed to have one grammar import others and share same error + /// variables and other state variables. It's a kind of explicit multiple + /// inheritance via delegation of methods and shared state. + /// </remarks> + protected internal RecognizerSharedState state; + + #endregion + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/BitSet.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/BitSet.cs new file mode 100644 index 0000000..6c88d09 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/BitSet.cs @@ -0,0 +1,413 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + using IList = System.Collections.IList; + using StringBuilder = System.Text.StringBuilder; + + /// <summary> + /// A stripped-down version of org.antlr.misc.BitSet that is just + /// good enough to handle runtime requirements such as FOLLOW sets + /// for automatic error recovery. + /// </summary> + public class BitSet : ICloneable + { + #region Constructors + + /// <summary>Construct a bitset of size one word (64 bits) </summary> + public BitSet() + : this(BITS) + { + } + + /// <summary>Construction from a static array of ulongs </summary> + public BitSet(ulong[] bits_) + { + bits = bits_; + } + + /// <summary>Construction from a list of integers </summary> + public BitSet(IList items) + : this(BITS) + { + for (int i = 0; i < items.Count; i++) + { + int v = (int)items[i]; + Add(v); + } + } + + /// <summary>Construct a bitset given the size</summary> + /// <param name="nbits">The size of the bitset in bits</param> + public BitSet(int nbits) + { + bits = new ulong[((nbits - 1) >> LOG_BITS) + 1]; + } + + #endregion + + #region Public API + + public static BitSet Of(int el) + { + BitSet s = new BitSet(el + 1); + s.Add(el); + return s; + } + + public static BitSet Of(int a, int b) + { + BitSet s = new BitSet(Math.Max(a, b) + 1); + s.Add(a); + s.Add(b); + return s; + } + + public static BitSet Of(int a, int b, int c) + { + BitSet s = new BitSet(); + s.Add(a); + s.Add(b); + s.Add(c); + return s; + } + + public static BitSet Of(int a, int b, int c, int d) + { + BitSet s = new BitSet(); + s.Add(a); + s.Add(b); + s.Add(c); + s.Add(d); + return s; + } + + /// <summary>return "this | a" in a new set </summary> + public virtual BitSet Or(BitSet a) + { + if (a == null) + { + return this; + } + BitSet s = (BitSet)this.Clone(); + s.OrInPlace(a); + return s; + } + + /// <summary>Or this element into this set (grow as necessary to accommodate)</summary> + public virtual void Add(int el) + { + int n = WordNumber(el); + if (n >= bits.Length) + { + GrowToInclude(el); + } + bits[n] |= BitMask(el); + } + + /// <summary> Grows the set to a larger number of bits.</summary> + /// <param name="bit">element that must fit in set + /// </param> + public virtual void GrowToInclude(int bit) + { + int newSize = Math.Max(bits.Length << 1, NumWordsToHold(bit)); + ulong[] newbits = new ulong[newSize]; + Array.Copy(bits, 0, newbits, 0, bits.Length); + bits = newbits; + } + + public virtual void OrInPlace(BitSet a) + { + if (a == null) + { + return; + } + // If this is smaller than a, grow this first + if (a.bits.Length > bits.Length) + { + SetSize(a.bits.Length); + } + int min = Math.Min(bits.Length, a.bits.Length); + for (int i = min - 1; i >= 0; i--) + { + bits[i] |= a.bits[i]; + } + } + + virtual public bool Nil + { + get + { + for (int i = bits.Length - 1; i >= 0; i--) + { + if (bits[i] != 0) + return false; + } + return true; + } + + } + + public virtual object Clone() + { + BitSet s; + try + { + s = (BitSet)MemberwiseClone(); + s.bits = new ulong[bits.Length]; + Array.Copy(bits, 0, s.bits, 0, bits.Length); + } + catch (System.Exception e) + { + throw new InvalidOperationException("Unable to clone BitSet", e); + } + return s; + } + + public virtual int Count + { + get + { + int deg = 0; + for (int i = bits.Length - 1; i >= 0; i--) + { + ulong word = bits[i]; + if (word != 0L) + { + for (int bit = BITS - 1; bit >= 0; bit--) + { + if ((word & (1UL << bit)) != 0) + { + deg++; + } + } + } + } + return deg; + } + } + + public virtual bool Member(int el) + { + if (el < 0) + { + return false; + } + int n = WordNumber(el); + if (n >= bits.Length) + return false; + return (bits[n] & BitMask(el)) != 0; + } + + // remove this element from this set + public virtual void Remove(int el) + { + int n = WordNumber(el); + if (n < bits.Length) + { + bits[n] &= ~BitMask(el); + } + } + + public virtual int NumBits() + { + return bits.Length << LOG_BITS; // num words * bits per word + } + + /// <summary>return how much space is being used by the bits array not + /// how many actually have member bits on. + /// </summary> + public virtual int LengthInLongWords() + { + return bits.Length; + } + + public virtual int[] ToArray() + { + int[] elems = new int[Count]; + int en = 0; + for (int i = 0; i < (bits.Length << LOG_BITS); i++) + { + if (Member(i)) + { + elems[en++] = i; + } + } + return elems; + } + + public virtual ulong[] ToPackedArray() + { + return bits; + } + + private static int WordNumber(int bit) + { + return bit >> LOG_BITS; // bit / BITS + } + + public override string ToString() + { + return ToString(null); + } + + public virtual string ToString(string[] tokenNames) + { + StringBuilder buf = new StringBuilder(); + string separator = ","; + bool havePrintedAnElement = false; + + buf.Append('{'); + + for (int i = 0; i < (bits.Length << LOG_BITS); i++) + { + if (Member(i)) + { + if (i > 0 && havePrintedAnElement) + { + buf.Append(separator); + } + if (tokenNames != null) + { + buf.Append(tokenNames[i]); + } + else + { + buf.Append(i); + } + havePrintedAnElement = true; + } + } + buf.Append('}'); + return buf.ToString(); + } + + public override bool Equals(object other) + { + if (other == null || !(other is BitSet)) + { + return false; + } + + BitSet otherSet = (BitSet)other; + + int n = Math.Min(this.bits.Length, otherSet.bits.Length); + + // for any bits in common, compare + for (int i = 0; i < n; i++) + { + if (this.bits[i] != otherSet.bits[i]) + { + return false; + } + } + + // make sure any extra bits are off + + if (this.bits.Length > n) + { + for (int i = n + 1; i < this.bits.Length; i++) + { + if (this.bits[i] != 0) + { + return false; + } + } + } + else if (otherSet.bits.Length > n) + { + for (int i = n + 1; i < otherSet.bits.Length; i++) + { + if (otherSet.bits[i] != 0) + { + return false; + } + } + } + return true; + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + #endregion + + #region Data Members + + protected internal const int BITS = 64; // number of bits / ulong + protected internal const int LOG_BITS = 6; // 2^6 == 64 + + ///<summary> We will often need to do a mod operator (i mod nbits). + /// Its turns out that, for powers of two, this mod operation is + /// same as <![CDATA[(i & (nbits-1))]]>. Since mod is slow, we use a precomputed + /// mod mask to do the mod instead. + /// </summary> + protected internal static readonly int MOD_MASK = BITS - 1; + + /// <summary>The actual data bits </summary> + protected internal ulong[] bits; + + #endregion + + #region Private API + + private static ulong BitMask(int bitNumber) + { + int bitPosition = bitNumber & MOD_MASK; // bitNumber mod BITS + return 1UL << bitPosition; + } + + /// <summary> Sets the size of a set.</summary> + /// <param name="nwords">how many words the new set should be + /// </param> + private void SetSize(int nwords) + { + ulong[] newbits = new ulong[nwords]; + int n = Math.Min(nwords, bits.Length); + Array.Copy(bits, 0, newbits, 0, n); + bits = newbits; + } + + private int NumWordsToHold(int el) + { + return (el >> LOG_BITS) + 1; + } + + #endregion + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/CharStreamState.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/CharStreamState.cs new file mode 100644 index 0000000..778facd --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/CharStreamState.cs @@ -0,0 +1,57 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + /// <summary> + /// This is the complete state of a stream. + /// + /// When walking ahead with cyclic DFA for syntactic predicates, we + /// need to record the state of the input stream (char index, line, + /// etc...) so that we can rewind the state after scanning ahead. + /// </summary> + public class CharStreamState + { + /// <summary>Index into the char stream of next lookahead char </summary> + internal int p; + + /// <summary>What line number is the scanner at before processing buffer[p]? </summary> + internal int line; + + /// <summary>What char position 0..n-1 in line is scanner before processing buffer[p]? </summary> + internal int charPositionInLine; + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ClassicToken.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ClassicToken.cs new file mode 100644 index 0000000..4fc73b5 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ClassicToken.cs @@ -0,0 +1,161 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + /// <summary> + /// A Token object like we'd use in ANTLR 2.x; has an actual string created + /// and associated with this object. These objects are needed for imaginary + /// tree nodes that have payload objects. We need to create a Token object + /// that has a string; the tree node will point at this token. CommonToken + /// has indexes into a char stream and hence cannot be used to introduce + /// new strings. + /// </summary> + [Serializable] + public class ClassicToken : IToken + { + #region Constructors + + public ClassicToken(int type) + { + this.type = type; + } + + public ClassicToken(IToken oldToken) + { + text = oldToken.Text; + type = oldToken.Type; + line = oldToken.Line; + charPositionInLine = oldToken.CharPositionInLine; + channel = oldToken.Channel; + } + + public ClassicToken(int type, string text) + { + this.type = type; + this.text = text; + } + + public ClassicToken(int type, string text, int channel) + { + this.type = type; + this.text = text; + this.channel = channel; + } + + #endregion + + #region Public API + + virtual public int Type + { + get { return type; } + set { this.type = value; } + } + + virtual public int Line + { + get { return line; } + set { this.line = value; } + } + + virtual public int CharPositionInLine + { + get { return charPositionInLine; } + set { this.charPositionInLine = value; } + } + + virtual public int Channel + { + get { return channel; } + set { this.channel = value; } + } + + virtual public int TokenIndex + { + get { return index; } + set { this.index = value; } + } + + virtual public string Text + { + get { return text; } + set { text = value; } + } + + virtual public ICharStream InputStream + { + get { return null; } + set { } + } + + override public string ToString() + { + string channelStr = ""; + if (channel > 0) + { + channelStr = ",channel=" + channel; + } + string txt = Text; + if (txt != null) + { + txt = txt.Replace("\n", "\\\\n"); + txt = txt.Replace("\r", "\\\\r"); + txt = txt.Replace("\t", "\\\\t"); + } + else + { + txt = "<no text>"; + } + return "[@" + TokenIndex + ",'" + txt + "',<" + type + ">" + channelStr + "," + line + ":" + CharPositionInLine + "]"; + } + + #endregion + + #region Data Members + + protected internal string text; + protected internal int type; + protected internal int line; + protected internal int charPositionInLine; + protected internal int channel = Token.DEFAULT_CHANNEL; + + /// <summary>What token number is this from 0..n-1 tokens </summary> + protected internal int index; + + #endregion + } +} diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/CommonToken.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/CommonToken.cs new file mode 100644 index 0000000..473ff63 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/CommonToken.cs @@ -0,0 +1,207 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + [Serializable] + public class CommonToken : IToken + { + #region Constructors + + public CommonToken(int type) + { + this.type = type; + } + + public CommonToken(ICharStream input, int type, int channel, int start, int stop) + { + this.input = input; + this.type = type; + this.channel = channel; + this.start = start; + this.stop = stop; + } + + public CommonToken(int type, string text) + { + this.type = type; + this.channel = Token.DEFAULT_CHANNEL; + this.text = text; + } + + public CommonToken(IToken oldToken) + { + text = oldToken.Text; + type = oldToken.Type; + line = oldToken.Line; + index = oldToken.TokenIndex; + charPositionInLine = oldToken.CharPositionInLine; + channel = oldToken.Channel; + if (oldToken is CommonToken) { + start = ((CommonToken)oldToken).start; + stop = ((CommonToken)oldToken).stop; + } + } + + #endregion + + #region Public API + + virtual public int Type + { + get { return type; } + set { this.type = value; } + } + + virtual public int Line + { + get { return line; } + set { this.line = value; } + } + + virtual public int CharPositionInLine + { + get { return charPositionInLine; } + set { this.charPositionInLine = value; } + } + + virtual public int Channel + { + get { return channel; } + set { this.channel = value; } + } + + virtual public int StartIndex + { + get { return start; } + set { this.start = value; } + } + + virtual public int StopIndex + { + get { return stop; } + set { this.stop = value; } + } + + virtual public int TokenIndex + { + get { return index; } + set { this.index = value; } + } + + virtual public ICharStream InputStream + { + get { return input; } + set { this.input = value; } + } + + virtual public string Text + { + get + { + if (text != null) + { + return text; + } + if (input == null) + { + return null; + } + text = input.Substring(start, stop); + return text; + } + set + { + /* Override the text for this token. The property getter + * will return this text rather than pulling from the buffer. + * Note that this does not mean that start/stop indexes are + * not valid. It means that the input was converted to a new + * string in the token object. + */ + this.text = value; + } + } + + public override string ToString() + { + string channelStr = ""; + if (channel > 0) + { + channelStr = ",channel=" + channel; + } + string txt = Text; + if (txt != null) + { + txt = txt.Replace("\n", "\\\\n"); + txt = txt.Replace("\r", "\\\\r"); + txt = txt.Replace("\t", "\\\\t"); + } + else + { + txt = "<no text>"; + } + return "[@" + TokenIndex + "," + start + ":" + stop + "='" + txt + "',<" + type + ">" + channelStr + "," + line + ":" + CharPositionInLine + "]"; + } + + #endregion + + #region Data Members + + protected internal int type; + protected internal int line; + protected internal int charPositionInLine = -1; // set to invalid position + protected internal int channel = Token.DEFAULT_CHANNEL; + [NonSerialized] protected internal ICharStream input; + + /// <summary>We need to be able to change the text once in a while. If + /// this is non-null, then getText should return this. Note that + /// start/stop are not affected by changing this. + /// </summary> + protected internal string text; + + /// <summary>What token number is this from 0..n-1 tokens; < 0 implies invalid index </summary> + protected internal int index = -1; + + /// <summary>The char position into the input buffer where this token starts </summary> + protected internal int start; + + /// <summary>The char position into the input buffer where this token stops </summary> + protected internal int stop; + + #endregion + } +} diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/CommonTokenStream.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/CommonTokenStream.cs new file mode 100644 index 0000000..20a5709 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/CommonTokenStream.cs @@ -0,0 +1,488 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2006 Kunle Odutola +Copyright (c) 2005 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +namespace Antlr.Runtime +{ + using System; + using IList = System.Collections.IList; + using IDictionary = System.Collections.IDictionary; + using ArrayList = System.Collections.ArrayList; + using Hashtable = System.Collections.Hashtable; + using HashList = Antlr.Runtime.Collections.HashList; + + /// <summary> + /// The most common stream of tokens is one where every token is buffered up + /// and tokens are prefiltered for a certain channel (the parser will only + /// see these tokens and cannot change the filter channel number during the + /// parse). + /// + /// TODO: how to access the full token stream? How to track all tokens matched per rule? + /// </summary> + public class CommonTokenStream : ITokenStream + { + protected ITokenSource tokenSource; + + /// <summary>Record every single token pulled from the source so we can reproduce + /// chunks of it later. + /// </summary> + protected IList tokens; + + /// <summary><![CDATA[Map<tokentype, channel>]]> to override some Tokens' channel numbers </summary> + protected IDictionary channelOverrideMap; + + /// <summary><![CDATA[Set<tokentype>;]]> discard any tokens with this type </summary> + protected HashList discardSet; + + /// <summary>Skip tokens on any channel but this one; this is how we skip whitespace... </summary> + protected int channel; + + /// <summary>By default, track all incoming tokens </summary> + protected bool discardOffChannelTokens = false; + + /// <summary>Track the last Mark() call result value for use in Rewind().</summary> + protected int lastMarker; + + /// <summary> + /// The index into the tokens list of the current token (next token + /// to consume). p==-1 indicates that the tokens list is empty + /// </summary> + protected int p = -1; + + #region Constructors + + public CommonTokenStream() + { + channel = Token.DEFAULT_CHANNEL; + tokens = new ArrayList(500); + } + + public CommonTokenStream(ITokenSource tokenSource) : this() + { + this.tokenSource = tokenSource; + } + + public CommonTokenStream(ITokenSource tokenSource, int channel) : this(tokenSource) + { + this.channel = channel; + } + + #endregion + + #region ITokenStream Members + + /// <summary>Get the ith token from the current position 1..n where k=1 is the + /// first symbol of lookahead. + /// </summary> + public virtual IToken LT(int k) + { + if (p == -1) + { + FillBuffer(); + } + if (k == 0) + { + return null; + } + if (k < 0) + { + return LB(-k); + } + //System.out.print("LT(p="+p+","+k+")="); + if ((p + k - 1) >= tokens.Count) + { + return Token.EOF_TOKEN; + } + //System.out.println(tokens.get(p+k-1)); + int i = p; + int n = 1; + // find k good tokens + while (n < k) + { + // skip off-channel tokens + i = SkipOffTokenChannels(i + 1); // leave p on valid token + n++; + } + if (i >= tokens.Count) + { + return Token.EOF_TOKEN; + } + return (IToken)tokens[i]; + } + + /// <summary>Return absolute token i; ignore which channel the tokens are on; + /// that is, count all tokens not just on-channel tokens. + /// </summary> + public virtual IToken Get(int i) + { + return (IToken)tokens[i]; + } + + /// <summary> + /// Gets or sets the token source for this stream (i.e. the source + /// that supplies the stream with Token objects). + /// </summary> + /// + /// <remarks> + /// Setting the token source resets the stream. + /// </remarks> + public virtual ITokenSource TokenSource + { + get { return tokenSource; } + set + { + this.tokenSource = value; + tokens.Clear(); + p = -1; + channel = Token.DEFAULT_CHANNEL; + } + } + + public virtual string SourceName { + get { return TokenSource.SourceName; } + } + + public virtual string ToString(int start, int stop) + { + if ((start < 0) || (stop < 0)) + { + return null; + } + if (p == -1) + { + FillBuffer(); + } + if (stop >= tokens.Count) + { + stop = tokens.Count - 1; + } + System.Text.StringBuilder buf = new System.Text.StringBuilder(); + for (int i = start; i <= stop; i++) + { + IToken t = (IToken)tokens[i]; + buf.Append(t.Text); + } + return buf.ToString(); + } + + public virtual string ToString(IToken start, IToken stop) + { + if (start != null && stop != null) + { + return ToString(start.TokenIndex, stop.TokenIndex); + } + return null; + } + + #endregion + + #region IIntStream Members + + /// <summary>Move the input pointer to the next incoming token. The stream + /// must become active with LT(1) available. Consume() simply + /// moves the input pointer so that LT(1) points at the next + /// input symbol. Consume at least one token. + /// + /// Walk past any token not on the channel the parser is listening to. + /// </summary> + public virtual void Consume() + { + if (p < tokens.Count) + { + p++; + p = SkipOffTokenChannels(p); // leave p on valid token + } + } + + public virtual int LA(int i) + { + return LT(i).Type; + } + + public virtual int Mark() + { + if (p == -1) + { + FillBuffer(); + } + lastMarker = Index(); + return lastMarker; + } + + public virtual int Index() + { + return p; + } + + public virtual void Rewind(int marker) + { + Seek(marker); + } + + public virtual void Rewind() + { + Seek(lastMarker); + } + + public virtual void Reset() + { + p = 0; + lastMarker = 0; + } + + public virtual void Release(int marker) + { + // no resources to release + } + + public virtual void Seek(int index) + { + p = index; + } + + [Obsolete("Please use the property Count instead.")] + public virtual int Size() + { + return Count; + } + + public virtual int Count + { + get { return tokens.Count; } + } + + #endregion + + /// <summary>Load all tokens from the token source and put in tokens. + /// This is done upon first LT request because you might want to + /// set some token type / channel overrides before filling buffer. + /// </summary> + protected virtual void FillBuffer() + { + int index = 0; + IToken t = tokenSource.NextToken(); + while ((t != null) && (t.Type != (int)Antlr.Runtime.CharStreamConstants.EOF)) + { + bool discard = false; + // is there a channel override for token type? + if (channelOverrideMap != null) + { + object channelI = channelOverrideMap[(int) t.Type]; + if (channelI != null) + { + t.Channel = (int)channelI; + } + } + if (discardSet != null && discardSet.Contains(t.Type.ToString())) + { + discard = true; + } + else if (discardOffChannelTokens && t.Channel != this.channel) + { + discard = true; + } + if (!discard) + { + t.TokenIndex = index; + tokens.Add(t); + index++; + } + t = tokenSource.NextToken(); + } + // leave p pointing at first token on channel + p = 0; + p = SkipOffTokenChannels(p); + } + + /// <summary>Given a starting index, return the index of the first on-channel + /// token. + /// </summary> + protected virtual int SkipOffTokenChannels(int i) + { + int n = tokens.Count; + while (i < n && ((IToken) tokens[i]).Channel != channel) + { + i++; + } + return i; + } + + protected virtual int SkipOffTokenChannelsReverse(int i) + { + while (i >= 0 && ((IToken) tokens[i]).Channel != channel) + { + i--; + } + return i; + } + + /// <summary> + /// A simple filter mechanism whereby you can tell this token stream + /// to force all tokens of type ttype to be on channel. + /// </summary> + /// + /// <remarks> + /// For example, + /// when interpreting, we cannot exec actions so we need to tell + /// the stream to force all WS and NEWLINE to be a different, ignored + /// channel. + /// </remarks> + public virtual void SetTokenTypeChannel(int ttype, int channel) + { + if (channelOverrideMap == null) + { + channelOverrideMap = new Hashtable(); + } + channelOverrideMap[(int) ttype] = (int) channel; + } + + public virtual void DiscardTokenType(int ttype) + { + if (discardSet == null) + { + discardSet = new HashList(); + } + discardSet.Add(ttype.ToString(), ttype); + } + + public virtual void DiscardOffChannelTokens(bool discardOffChannelTokens) + { + this.discardOffChannelTokens = discardOffChannelTokens; + } + + public virtual IList GetTokens() + { + if (p == - 1) + { + FillBuffer(); + } + return tokens; + } + + public virtual IList GetTokens(int start, int stop) + { + return GetTokens(start, stop, (BitSet) null); + } + + /// <summary>Given a start and stop index, return a List of all tokens in + /// the token type BitSet. Return null if no tokens were found. This + /// method looks at both on and off channel tokens. + /// </summary> + public virtual IList GetTokens(int start, int stop, BitSet types) + { + if (p == - 1) + { + FillBuffer(); + } + if (stop >= tokens.Count) + { + stop = tokens.Count-1; + } + if (start < 0) + { + start = 0; + } + if (start > stop) + { + return null; + } + + // list = tokens[start:stop]:{Token t, t.getType() in types} + IList filteredTokens = new ArrayList(); + for (int i = start; i <= stop; i++) + { + IToken t = (IToken) tokens[i]; + if (types == null || types.Member(t.Type)) + { + filteredTokens.Add(t); + } + } + if (filteredTokens.Count == 0) + { + filteredTokens = null; + } + return filteredTokens; + } + + public virtual IList GetTokens(int start, int stop, IList types) + { + return GetTokens(start, stop, new BitSet(types)); + } + + public virtual IList GetTokens(int start, int stop, int ttype) + { + return GetTokens(start, stop, BitSet.Of(ttype)); + } + + /// <summary>Look backwards k tokens on-channel tokens </summary> + protected virtual IToken LB(int k) + { + //System.out.print("LB(p="+p+","+k+") "); + if (p == - 1) + { + FillBuffer(); + } + if (k == 0) + { + return null; + } + if ((p - k) < 0) + { + return null; + } + + int i = p; + int n = 1; + // find k good tokens looking backwards + while (n <= k) + { + // skip off-channel tokens + i = SkipOffTokenChannelsReverse(i - 1); // leave p on valid token + n++; + } + if (i < 0) + { + return null; + } + return (IToken) tokens[i]; + } + + public override string ToString() + { + if (p == - 1) + { + FillBuffer(); + } + return ToString(0, tokens.Count - 1); + } + + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/Constants.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/Constants.cs new file mode 100644 index 0000000..85a443a --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/Constants.cs @@ -0,0 +1,51 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + /// <summary> + /// Global constants + /// </summary> + internal sealed class Constants + { + public static readonly string VERSION = "3.1b1"; + + // Moved to version 2 for v3.1: added grammar name to enter/exit Rule + public static readonly string DEBUG_PROTOCOL_VERSION = "2"; + + public static readonly string ANTLRWORKS_DIR = "antlrworks"; + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/DFA.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/DFA.cs new file mode 100644 index 0000000..bbe62c2 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/DFA.cs @@ -0,0 +1,272 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + /// <summary> + /// A DFA implemented as a set of transition tables. + /// </summary> + /// <remarks> + /// <para> + /// Any state that has a semantic predicate edge is special; those states are + /// generated with if-then-else structures in a SpecialStateTransition() + /// which is generated by cyclicDFA template. + /// </para> + /// <para> + /// There are at most 32767 states (16-bit signed short). Could get away with byte + /// sometimes but would have to generate different types and the simulation code too. + /// </para> + /// <para> + /// As a point of reference, the Tokens rule DFA for the lexer in the Java grammar + /// sample has approximately 326 states. + /// </para> + /// </remarks> + abstract public class DFA + { + public delegate int SpecialStateTransitionHandler(DFA dfa, int s, IIntStream input); + + protected short[] eot; + protected short[] eof; + protected char[] min; + protected char[] max; + protected short[] accept; + protected short[] special; + protected short[][] transition; + + protected int decisionNumber; + + // HACK: Has to be public to allow generated recognizer to set. + public SpecialStateTransitionHandler specialStateTransitionHandler; + + /// <summary> + /// Which recognizer encloses this DFA? Needed to check backtracking + /// </summary> + protected BaseRecognizer recognizer; + + public const bool debug = false; + + /// <summary> + /// From the input stream, predict what alternative will succeed using this + /// DFA (representing the covering regular approximation to the underlying CFL). + /// </summary> + /// <param name="input">Input stream</param> + /// <returns>Return an alternative number 1..n. Throw an exception upon error.</returns> + public int Predict(IIntStream input) + { + if ( debug ) { + Console.Error.WriteLine("Enter DFA.predict for decision "+decisionNumber); + } + int mark = input.Mark(); // remember where decision started in input + int s = 0; // we always start at s0 + try + { + while (true) + { + if (debug) + Console.Error.WriteLine("DFA " + decisionNumber + " state " + s + " LA(1)=" + (char)input.LA(1) + "(" + input.LA(1) + "), index="+input.Index()); + int specialState = special[s]; + if (specialState >= 0) + { + if (debug) Console.Error.WriteLine("DFA " + decisionNumber + " state " + s + " is special state " + specialState); + s = specialStateTransitionHandler(this, specialState, input); + if ( debug ) { + Console.Error.WriteLine("DFA "+decisionNumber+ + " returns from special state "+specialState+" to "+s); + } + if ( s==-1 ) { + NoViableAlt(s,input); + return 0; + } + input.Consume(); + continue; + } + if (accept[s] >= 1) + { + if (debug) Console.Error.WriteLine("accept; predict " + accept[s] + " from state " + s); + return accept[s]; + } + // look for a normal char transition + char c = (char)input.LA(1); // -1 == \uFFFF, all tokens fit in 65000 space + if ((c >= min[s]) && (c <= max[s])) + { + int snext = transition[s][c - min[s]]; // move to next state + if (snext < 0) + { + // was in range but not a normal transition + // must check EOT, which is like the else clause. + // eot[s]>=0 indicates that an EOT edge goes to another + // state. + if (eot[s] >= 0) // EOT Transition to accept state? + { + if (debug) + Console.Error.WriteLine("EOT transition"); + s = eot[s]; + input.Consume(); + // TODO: I had this as return accept[eot[s]] + // which assumed here that the EOT edge always + // went to an accept...faster to do this, but + // what about predicated edges coming from EOT + // target? + continue; + } + NoViableAlt(s, input); + return 0; + } + s = snext; + input.Consume(); + continue; + } + if (eot[s] >= 0) + { // EOT Transition? + if (debug) + Console.Error.WriteLine("EOT transition"); + s = eot[s]; + input.Consume(); + continue; + } + if ((c == (char)Token.EOF) && (eof[s] >= 0)) + { // EOF Transition to accept state? + if (debug) + Console.Error.WriteLine("accept via EOF; predict " + accept[eof[s]] + " from " + eof[s]); + return accept[eof[s]]; + } + // not in range and not EOF/EOT, must be invalid symbol + if (debug) + { + Console.Error.WriteLine("min[" + s + "]=" + min[s]); + Console.Error.WriteLine("max[" + s + "]=" + max[s]); + Console.Error.WriteLine("eot[" + s + "]=" + eot[s]); + Console.Error.WriteLine("eof[" + s + "]=" + eof[s]); + for (int p = 0; p < transition[s].Length; p++) + { + Console.Error.Write(transition[s][p] + " "); + } + Console.Error.WriteLine(); + } + NoViableAlt(s, input); + return 0; + } + } + finally + { + input.Rewind(mark); + } + } + + protected void NoViableAlt(int s, IIntStream input) + { + if (recognizer.state.backtracking > 0) + { + recognizer.state.failed = true; + return; + } + NoViableAltException nvae = + new NoViableAltException(Description, + decisionNumber, + s, + input); + Error(nvae); + throw nvae; + } + + /// <summary> + /// A hook for debugging interface + /// </summary> + /// <param name="nvae"></param> + public virtual void Error(NoViableAltException nvae) { ; } + + public virtual int SpecialStateTransition(int s, IIntStream input) + { + return -1; + } + + public virtual string Description + { + get { return "n/a"; } + } + + public static short[] UnpackEncodedString( string encodedString ) + { + int size = 0; + for ( int i = 0; i < encodedString.Length; i += 2 ) + size += (int)encodedString[i]; + + short[] data = new short[size]; + int di = 0; + for ( int i = 0; i < encodedString.Length; i += 2 ) + { + char n = encodedString[i]; + char v = encodedString[i+1]; + // add v n times to data + for ( int j = 1; j <= n; j++ ) + data[di++] = (short)v; + } + + return data; + } + public static short[][] UnpackEncodedStringArray( string[] encodedStrings ) + { + short[][] result = new short[encodedStrings.Length][]; + for ( int i = 0; i < encodedStrings.Length; i++ ) + result[i] = UnpackEncodedString( encodedStrings[i] ); + return result; + } + public static char[] UnpackEncodedStringToUnsignedChars( string encodedString ) + { + int size = 0; + for ( int i = 0; i < encodedString.Length; i += 2 ) + size += (int)encodedString[i]; + + char[] data = new char[size]; + int di = 0; + for ( int i = 0; i < encodedString.Length; i += 2 ) + { + char n = encodedString[i]; + char v = encodedString[i+1]; + // add v n times to data + for ( int j = 1; j <= n; j++ ) + data[di++] = v; + } + + return data; + } + + public int SpecialTransition(int state, int symbol) + { + return 0; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/EarlyExitException.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/EarlyExitException.cs new file mode 100644 index 0000000..f3c8874 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/EarlyExitException.cs @@ -0,0 +1,59 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + /// <summary> + /// The recognizer did not match anything for a (..)+ loop. + /// </summary> + [Serializable] + public class EarlyExitException : RecognitionException + { + public int decisionNumber; + + /// <summary>Used for remote debugger deserialization </summary> + public EarlyExitException() + { + ; + } + + public EarlyExitException(int decisionNumber, IIntStream input) + : base(input) + { + this.decisionNumber = decisionNumber; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/FailedPredicateException.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/FailedPredicateException.cs new file mode 100644 index 0000000..ed9586e --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/FailedPredicateException.cs @@ -0,0 +1,68 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + /// <summary> + /// A semantic predicate failed during validation. Validation of predicates + /// occurs when normally parsing the alternative just like matching a token. + /// Disambiguating predicate evaluation occurs when we hoist a predicate into + /// a prediction decision. + /// </summary> + [Serializable] + public class FailedPredicateException : RecognitionException + { + public string ruleName; + public string predicateText; + + /// <summary>Used for remote debugger deserialization </summary> + public FailedPredicateException() + { + } + + public FailedPredicateException(IIntStream input, string ruleName, string predicateText) + : base(input) + { + this.ruleName = ruleName; + this.predicateText = predicateText; + } + + public override string ToString() + { + return "FailedPredicateException(" + ruleName + ",{" + predicateText + "}?)"; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ICharStream.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ICharStream.cs new file mode 100644 index 0000000..8531b23 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ICharStream.cs @@ -0,0 +1,85 @@ +/* +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + public enum CharStreamConstants + { + EOF = - 1, + } + + /// <summary>A source of characters for an ANTLR lexer </summary> + public interface ICharStream : IIntStream + { + /// <summary> + /// The current line in the character stream (ANTLR tracks the + /// line information automatically. To support rewinding character + /// streams, we are able to [re-]set the line. + /// </summary> + int Line + { + get; + set; + } + + /// <summary> + /// The index of the character relative to the beginning of the + /// line (0..n-1). To support rewinding character streams, we are + /// able to [re-]set the character position. + /// </summary> + int CharPositionInLine + { + get; + set; + } + + /// <summary> + /// Get the ith character of lookahead. This is usually the same as + /// LA(i). This will be used for labels in the generated lexer code. + /// I'd prefer to return a char here type-wise, but it's probably + /// better to be 32-bit clean and be consistent with LA. + /// </summary> + int LT(int i); + + /// <summary> + /// This primarily a useful interface for action code (just make sure + /// actions don't use this on streams that don't support it). + /// For infinite streams, you don't need this. + /// </summary> + string Substring(int start, int stop); + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/IIntStream.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/IIntStream.cs new file mode 100644 index 0000000..f7788cd --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/IIntStream.cs @@ -0,0 +1,169 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + /// <summary> + /// A simple stream of integers. This is useful when all we care about is the char + /// or token type sequence (such as for interpretation). + /// </summary> + public interface IIntStream + { + void Consume(); + + /// <summary> + /// Get int at current input pointer + i ahead (where i=1 is next int) + /// Negative indexes are allowed. LA(-1) is previous token (token just matched). + /// LA(-i) where i is before first token should yield -1, invalid char or EOF. + /// </summary> + int LA(int i); + + /// <summary>Tell the stream to start buffering if it hasn't already.</summary> + /// <remarks> + /// Executing Rewind(Mark()) on a stream should not affect the input position. + /// The Lexer tracks line/col info as well as input index so its markers are + /// not pure input indexes. Same for tree node streams. */ + /// </remarks> + /// <returns>Return a marker that can be passed to + /// <see cref="IIntStream.Rewind(int)"/> to return to the current position. + /// This could be the current input position, a value return from + /// <see cref="IIntStream.Index"/>, or some other marker.</returns> + int Mark(); + + /// <summary> + /// Return the current input symbol index 0..n where n indicates the + /// last symbol has been read. The index is the symbol about to be + /// read not the most recently read symbol. + /// </summary> + int Index(); + + /// <summary> + /// Resets the stream so that the next call to + /// <see cref="IIntStream.Index"/> would return marker. + /// </summary> + /// <remarks> + /// The marker will usually be <see cref="IIntStream.Index"/> but + /// it doesn't have to be. It's just a marker to indicate what + /// state the stream was in. This is essentially calling + /// <see cref="IIntStream.Release"/> and <see cref="IIntStream.Seek"/>. + /// If there are other markers created after the specified marker, + /// this routine must unroll them like a stack. Assumes the state the + /// stream was in when this marker was created. + /// </remarks> + void Rewind(int marker); + + /// <summary> + /// Rewind to the input position of the last marker. + /// </summary> + /// <remarks> + /// Used currently only after a cyclic DFA and just before starting + /// a sem/syn predicate to get the input position back to the start + /// of the decision. Do not "pop" the marker off the state. Mark(i) + /// and Rewind(i) should balance still. It is like invoking + /// Rewind(last marker) but it should not "pop" the marker off. + /// It's like Seek(last marker's input position). + /// </remarks> + void Rewind(); + + /// <summary> + /// You may want to commit to a backtrack but don't want to force the + /// stream to keep bookkeeping objects around for a marker that is + /// no longer necessary. This will have the same behavior as + /// <see cref="IIntStream.Rewind(int)"/> except it releases resources without + /// the backward seek. + /// </summary> + /// <remarks> + /// This must throw away resources for all markers back to the marker + /// argument. So if you're nested 5 levels of Mark(), and then Release(2) + /// you have to release resources for depths 2..5. + /// </remarks> + void Release(int marker); + + /// <summary> + /// Set the input cursor to the position indicated by index. This is + /// normally used to seek ahead in the input stream. + /// </summary> + /// <remarks> + /// No buffering is required to do this unless you know your stream + /// will use seek to move backwards such as when backtracking. + /// + /// This is different from rewind in its multi-directional requirement + /// and in that its argument is strictly an input cursor (index). + /// + /// For char streams, seeking forward must update the stream state such + /// as line number. For seeking backwards, you will be presumably + /// backtracking using the + /// <see cref="IIntStream.Mark"/>/<see cref="IIntStream.Rewind(int)"/> + /// mechanism that restores state and so this method does not need to + /// update state when seeking backwards. + /// + /// Currently, this method is only used for efficient backtracking using + /// memoization, but in the future it may be used for incremental parsing. + /// + /// The index is 0..n-1. A seek to position i means that LA(1) will return + /// the ith symbol. So, seeking to 0 means LA(1) will return the first + /// element in the stream. + /// </remarks> + void Seek(int index); + + /// <summary>Returns the size of the entire stream.</summary> + /// <remarks> + /// Only makes sense for streams that buffer everything up probably, + /// but might be useful to display the entire stream or for testing. + /// This value includes a single EOF. + /// </remarks> + [Obsolete("Please use property Count instead.")] + int Size(); + + /// <summary>Returns the size of the entire stream.</summary> + /// <remarks> + /// Only makes sense for streams that buffer everything up probably, + /// but might be useful to display the entire stream or for testing. + /// This value includes a single EOF. + /// </remarks> + int Count { get; } + + /// <summary> + /// Where are you getting symbols from? Normally, implementations will + /// pass the buck all the way to the lexer who can ask its input stream + /// for the file name or whatever. + /// </summary> + string SourceName { + get; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/IToken.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/IToken.cs new file mode 100644 index 0000000..9857fce --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/IToken.cs @@ -0,0 +1,92 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + public interface IToken + { + int Type + { + get; + set; + } + + /// <summary>The line number on which this token was matched; line=1..n</summary> + int Line + { + get; + set; + } + + /// <summary> + /// The index of the first character relative to the beginning of the line 0..n-1 + /// </summary> + int CharPositionInLine + { + get; + set; + } + + int Channel + { + get; + set; + } + + /// <summary> + /// An index from 0..n-1 of the token object in the input stream + /// </summary> + /// <remarks> + /// This must be valid in order to use the ANTLRWorks debugger. + /// </remarks> + int TokenIndex + { + get; + set; + } + + /// <summary>The text of the token</summary> + /// <remarks> + /// When setting the text, it might be a NOP such as for the CommonToken, + /// which doesn't have string pointers, just indexes into a char buffer. + /// </remarks> + string Text + { + get; + set; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ITokenSource.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ITokenSource.cs new file mode 100644 index 0000000..19ee66b --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ITokenSource.cs @@ -0,0 +1,72 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + /// <summary> + /// A source of tokens must provide a sequence of tokens via NextToken() + /// and also must reveal it's source of characters; CommonToken's text is + /// computed from a CharStream; it only store indices into the char stream. + /// + /// Errors from the lexer are never passed to the parser. Either you want + /// to keep going or you do not upon token recognition error. If you do not + /// want to continue lexing then you do not want to continue parsing. Just + /// throw an exception not under RecognitionException and Java will naturally + /// toss you all the way out of the recognizers. If you want to continue + /// lexing then you should not throw an exception to the parser--it has already + /// requested a token. Keep lexing until you get a valid one. Just report + /// errors and keep going, looking for a valid token. + /// </summary> + public interface ITokenSource + { + /// <summary> + /// Returns a Token object from the input stream (usually a CharStream). + /// Does not fail/return upon lexing error; just keeps chewing on the + /// characters until it gets a good one; errors are not passed through + /// to the parser. + /// </summary> + IToken NextToken(); + + /// <summary> + /// Where are you getting tokens from? normally the implication will simply + /// ask lexers input stream. + /// </summary> + string SourceName { + get; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ITokenStream.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ITokenStream.cs new file mode 100644 index 0000000..b57e80d --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ITokenStream.cs @@ -0,0 +1,82 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + /// <summary>A stream of tokens accessing tokens from a TokenSource </summary> + public interface ITokenStream : IIntStream + { + /// <summary> + /// Get Token at current input pointer + i ahead (where i=1 is next + /// Token). + /// i < 0 indicates tokens in the past. So -1 is previous token and -2 is + /// two tokens ago. LT(0) is undefined. For i>=n, return Token.EOFToken. + /// Return null for LT(0) and any index that results in an absolute address + /// that is negative. + /// </summary> + IToken LT(int k); + + /// <summary> + /// Get a token at an absolute index i; 0..n-1. This is really only + /// needed for profiling and debugging and token stream rewriting. + /// If you don't want to buffer up tokens, then this method makes no + /// sense for you. Naturally you can't use the rewrite stream feature. + /// I believe DebugTokenStream can easily be altered to not use + /// this method, removing the dependency. + /// </summary> + IToken Get(int i); + + /// <summary>Where is this stream pulling tokens from? This is not the name, but + /// the object that provides Token objects. + /// </summary> + ITokenSource TokenSource { get; } + + /// <summary>Return the text of all tokens from start to stop, inclusive. + /// If the stream does not buffer all the tokens then it can just + /// return "" or null; Users should not access $ruleLabel.text in + /// an action of course in that case. + /// </summary> + string ToString(int start, int stop); + + /// <summary>Because the user is not required to use a token with an index stored + /// in it, we must provide a means for two token objects themselves to + /// indicate the start/end location. Most often this will just delegate + /// to the other toString(int,int). This is also parallel with + /// the TreeNodeStream.toString(Object,Object). + /// </summary> + string ToString(IToken start, IToken stop); + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/Lexer.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/Lexer.cs new file mode 100644 index 0000000..ab511c7 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/Lexer.cs @@ -0,0 +1,410 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + using CollectionUtils = Antlr.Runtime.Collections.CollectionUtils; + + /// <summary> + /// A lexer is recognizer that draws input symbols from a character stream. + /// lexer grammars result in a subclass of this object. A Lexer object + /// uses simplified Match() and error recovery mechanisms in the interest + /// of speed. + /// </summary> + public abstract class Lexer : BaseRecognizer, ITokenSource + { + const int TOKEN_dot_EOF = (int)CharStreamConstants.EOF; + + #region Constructors + + public Lexer() + { + } + + public Lexer(ICharStream input) + { + this.input = input; + } + + public Lexer(ICharStream input, RecognizerSharedState state) + : base(state) { + this.input = input; + } + + #endregion + + #region Public API + + /// <summary>Set the char stream and reset the lexer </summary> + virtual public ICharStream CharStream + { + get { return this.input; } + set + { + this.input = null; + Reset(); + this.input = value; + } + } + + override public string SourceName { + get { return input.SourceName; } + } + + + override public IIntStream Input + { + get { return input; } + } + + virtual public int Line + { + get { return input.Line; } + } + + virtual public int CharPositionInLine + { + get { return input.CharPositionInLine; } + } + + /// <summary>What is the index of the current character of lookahead? </summary> + virtual public int CharIndex + { + get { return input.Index(); } + } + + /// <summary> + /// Gets or sets the 'lexeme' for the current token. + /// </summary> + /// <remarks> + /// <para> + /// The getter returns the text matched so far for the current token or any + /// text override. + /// </para> + /// <para> + /// The setter sets the complete text of this token. It overrides/wipes any + /// previous changes to the text. + /// </para> + /// </remarks> + virtual public string Text + { + get + { + if (state.text != null) + { + return state.text; + } + return input.Substring(state.tokenStartCharIndex, CharIndex - 1); + } + set + { + state.text = value; + } + } + + override public void Reset() + { + base.Reset(); // reset all recognizer state variables + // wack Lexer state variables + if (input != null) { + input.Seek(0); // rewind the input + } + if (state == null) { + return; // no shared state work to do + } + state.token = null; + state.type = Token.INVALID_TOKEN_TYPE; + state.channel = Token.DEFAULT_CHANNEL; + state.tokenStartCharIndex = -1; + state.tokenStartCharPositionInLine = -1; + state.tokenStartLine = -1; + state.text = null; + } + + /// <summary> + /// Return a token from this source; i.e., Match a token on the char stream. + /// </summary> + public virtual IToken NextToken() + { + while (true) + { + state.token = null; + state.channel = Token.DEFAULT_CHANNEL; + state.tokenStartCharIndex = input.Index(); + state.tokenStartCharPositionInLine = input.CharPositionInLine; + state.tokenStartLine = input.Line; + state.text = null; + if (input.LA(1) == (int)CharStreamConstants.EOF) + { + return Token.EOF_TOKEN; + } + try + { + mTokens(); + if (state.token == null) + { + Emit(); + } + else if (state.token == Token.SKIP_TOKEN) + { + continue; + } + return state.token; + } + catch (NoViableAltException nva) { + ReportError(nva); + Recover(nva); // throw out current char and try again + } + catch (RecognitionException re) { + ReportError(re); + // Match() routine has already called Recover() + } + } + } + + /// <summary> + /// Instruct the lexer to skip creating a token for current lexer rule and + /// look for another token. NextToken() knows to keep looking when a lexer + /// rule finishes with token set to SKIP_TOKEN. Recall that if token==null + /// at end of any token rule, it creates one for you and emits it. + /// </summary> + public void Skip() + { + state.token = Token.SKIP_TOKEN; + } + + /// <summary>This is the lexer entry point that sets instance var 'token' </summary> + public abstract void mTokens(); + + /// <summary> + /// Currently does not support multiple emits per nextToken invocation + /// for efficiency reasons. Subclass and override this method and + /// nextToken (to push tokens into a list and pull from that list rather + /// than a single variable as this implementation does). + /// </summary> + public virtual void Emit(IToken token) + { + state.token = token; + } + + /// <summary> + /// The standard method called to automatically emit a token at the + /// outermost lexical rule. The token object should point into the + /// char buffer start..stop. If there is a text override in 'text', + /// use that to set the token's text. + /// </summary> + /// <remarks><para>Override this method to emit custom Token objects.</para> + /// <para>If you are building trees, then you should also override + /// Parser or TreeParser.getMissingSymbol().</para> + ///</remarks> + public virtual IToken Emit() + { + IToken t = new CommonToken(input, state.type, state.channel, state.tokenStartCharIndex, CharIndex - 1); + t.Line = state.tokenStartLine; + t.Text = state.text; + t.CharPositionInLine = state.tokenStartCharPositionInLine; + Emit(t); + return t; + } + + public virtual void Match(string s) + { + int i = 0; + while (i < s.Length) + { + if (input.LA(1) != s[i]) + { + if (state.backtracking > 0) + { + state.failed = true; + return; + } + MismatchedTokenException mte = new MismatchedTokenException(s[i], input); + Recover(mte); // don't really recover; just consume in lexer + throw mte; + } + i++; + input.Consume(); + state.failed = false; + } + } + + public virtual void MatchAny() + { + input.Consume(); + } + + public virtual void Match(int c) + { + if (input.LA(1) != c) + { + if (state.backtracking > 0) + { + state.failed = true; + return; + } + MismatchedTokenException mte = new MismatchedTokenException(c, input); + Recover(mte); + throw mte; + } + input.Consume(); + state.failed = false; + } + + public virtual void MatchRange(int a, int b) + { + if (input.LA(1) < a || input.LA(1) > b) + { + if (state.backtracking > 0) + { + state.failed = true; + return; + } + MismatchedRangeException mre = new MismatchedRangeException(a, b, input); + Recover(mre); + throw mre; + } + input.Consume(); + state.failed = false; + } + + /// <summary> + /// Lexers can normally Match any char in it's vocabulary after matching + /// a token, so do the easy thing and just kill a character and hope + /// it all works out. You can instead use the rule invocation stack + /// to do sophisticated error recovery if you are in a Fragment rule. + /// </summary> + public virtual void Recover(RecognitionException re) + { + input.Consume(); + } + + public override void ReportError(RecognitionException e) + { + DisplayRecognitionError(this.TokenNames, e); + } + + override public string GetErrorMessage(RecognitionException e, string[] tokenNames) + { + string msg = null; + + if (e is MismatchedTokenException) + { + MismatchedTokenException mte = (MismatchedTokenException)e; + msg = "mismatched character " + GetCharErrorDisplay(e.Char) + " expecting " + GetCharErrorDisplay(mte.Expecting); + } + else if (e is NoViableAltException) + { + NoViableAltException nvae = (NoViableAltException)e; + // for development, can add "decision=<<"+nvae.grammarDecisionDescription+">>" + // and "(decision="+nvae.decisionNumber+") and + // "state "+nvae.stateNumber + msg = "no viable alternative at character " + GetCharErrorDisplay(nvae.Char); + } + else if (e is EarlyExitException) + { + EarlyExitException eee = (EarlyExitException)e; + // for development, can add "(decision="+eee.decisionNumber+")" + msg = "required (...)+ loop did not match anything at character " + GetCharErrorDisplay(eee.Char); + } + else if (e is MismatchedNotSetException) + { + MismatchedSetException mse = (MismatchedSetException)e; + msg = "mismatched character " + GetCharErrorDisplay(mse.Char) + " expecting set " + mse.expecting; + } + else if (e is MismatchedSetException) + { + MismatchedSetException mse = (MismatchedSetException)e; + msg = "mismatched character " + GetCharErrorDisplay(mse.Char) + " expecting set " + mse.expecting; + } + else if (e is MismatchedRangeException) + { + MismatchedRangeException mre = (MismatchedRangeException)e; + msg = "mismatched character " + GetCharErrorDisplay(mre.Char) + " expecting set " + GetCharErrorDisplay(mre.A) + ".." + GetCharErrorDisplay(mre.B); + } + else + { + msg = base.GetErrorMessage(e, tokenNames); + } + return msg; + } + + public string GetCharErrorDisplay(int c) + { + string s; + switch ( c ) + { + //case Token.EOF : + case TOKEN_dot_EOF : + s = "<EOF>"; + break; + case '\n' : + s = "\\n"; + break; + case '\t' : + s = "\\t"; + break; + case '\r' : + s = "\\r"; + break; + default: + s = Convert.ToString((char)c); + break; + } + return "'" + s + "'"; + } + + public virtual void TraceIn(string ruleName, int ruleIndex) + { + string inputSymbol = ((char)input.LT(1)) + " line=" + Line + ":" + CharPositionInLine; + base.TraceIn(ruleName, ruleIndex, inputSymbol); + } + + public virtual void TraceOut(string ruleName, int ruleIndex) + { + string inputSymbol = ((char)input.LT(1)) + " line=" + Line + ":" + CharPositionInLine; + base.TraceOut(ruleName, ruleIndex, inputSymbol); + } + #endregion + + #region Data Members + + /// <summary>Where is the lexer drawing characters from? </summary> + protected internal ICharStream input; + + #endregion + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedNotSetException.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedNotSetException.cs new file mode 100644 index 0000000..23c754d --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedNotSetException.cs @@ -0,0 +1,59 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + [Serializable] + public class MismatchedNotSetException : MismatchedSetException + { + + /// <summary>Used for remote debugger deserialization </summary> + public MismatchedNotSetException() + { + ; + } + + public MismatchedNotSetException(BitSet expecting, IIntStream input) + : base(expecting, input) + { + } + + public override string ToString() + { + return "MismatchedNotSetException(" + UnexpectedType + "!=" + expecting + ")"; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedRangeException.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedRangeException.cs new file mode 100644 index 0000000..bc4eb12 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedRangeException.cs @@ -0,0 +1,70 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + [Serializable] + public class MismatchedRangeException : RecognitionException { + private int a, b; + + public int A { + get { return a; } + set { a = value; } + } + + public int B { + get { return b; } + set { b = value; } + } + + /// <summary> + /// Used for remote debugger deserialization + /// </summary> + public MismatchedRangeException() { + } + + public MismatchedRangeException(int a, int b, IIntStream input) + : base(input) { + this.a = a; + this.b = b; + } + + public override string ToString() { + return "MismatchedNotSetException(" + UnexpectedType + " not in [" + a + "," + b + "])"; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedSetException.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedSetException.cs new file mode 100644 index 0000000..1ccc33c --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedSetException.cs @@ -0,0 +1,61 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + [Serializable] + public class MismatchedSetException : RecognitionException + { + public BitSet expecting; + + /// <summary>Used for remote debugger deserialization </summary> + public MismatchedSetException() + { + ; + } + + public MismatchedSetException(BitSet expecting, IIntStream input) + : base(input) + { + this.expecting = expecting; + } + + public override string ToString() + { + return "MismatchedSetException(" + UnexpectedType + "!=" + expecting + ")"; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedTokenException.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedTokenException.cs new file mode 100644 index 0000000..2e110a3 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedTokenException.cs @@ -0,0 +1,71 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + /// <summary> + /// A mismatched char or Token or tree node. + /// </summary> + [Serializable] + public class MismatchedTokenException : RecognitionException + { + private int expecting = Runtime.Token.INVALID_TOKEN_TYPE; + + public int Expecting { + get { return expecting; } + set { expecting = value; } + } + + /// <summary> + /// Used for remote debugger deserialization + /// </summary> + public MismatchedTokenException() + { + } + + public MismatchedTokenException(int expecting, IIntStream input) + : base(input) + { + this.expecting = expecting; + } + + public override string ToString() + { + return "MismatchedTokenException(" + UnexpectedType + "!=" + expecting + ")"; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedTreeNodeException.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedTreeNodeException.cs new file mode 100644 index 0000000..6acdccf --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MismatchedTreeNodeException.cs @@ -0,0 +1,61 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + using TreeNodeStream = Antlr.Runtime.Tree.ITreeNodeStream; + + + [Serializable] + public class MismatchedTreeNodeException : RecognitionException + { + public int expecting; + + public MismatchedTreeNodeException() + { + } + + public MismatchedTreeNodeException(int expecting, TreeNodeStream input) + : base(input) + { + this.expecting = expecting; + } + + public override string ToString() + { + return "MismatchedTreeNodeException(" + UnexpectedType + "!=" + expecting + ")"; + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MissingTokenException.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MissingTokenException.cs new file mode 100644 index 0000000..1722e87 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/MissingTokenException.cs @@ -0,0 +1,73 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +using System; + +namespace Antlr.Runtime +{ + + /// <summary> + /// We were expecting a token but it's not found. The current token + /// is actually what we wanted next. Used for tree node errors too. + /// </summary> + [Serializable] + public class MissingTokenException : MismatchedTokenException { + private object inserted; + + /// <summary> + /// Used for remote debugger deserialization + /// </summary> + public MissingTokenException() { + } + + public MissingTokenException(int expecting, IIntStream input, object inserted) + : base(expecting, input) { + this.inserted = inserted; + } + + public int MissingType { + get { return Expecting; } + } + + public object Inserted { + get { return inserted; } + set { inserted = value; } + } + + public override String ToString() { + if (inserted != null && token != null) { + return "MissingTokenException(inserted " + inserted + " at " + token.Text + ")"; + } + if (token != null) { + return "MissingTokenException(at " + token.Text + ")"; + } + return "MissingTokenException"; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/NoViableAltException.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/NoViableAltException.cs new file mode 100644 index 0000000..dd8951f --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/NoViableAltException.cs @@ -0,0 +1,71 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + [Serializable] + public class NoViableAltException : RecognitionException + { + public string grammarDecisionDescription; + public int decisionNumber; + public int stateNumber; + + /// <summary>Used for remote debugger deserialization</summary> + public NoViableAltException() + { + ; + } + + public NoViableAltException(string grammarDecisionDescription, int decisionNumber, int stateNumber, IIntStream input) + : base(input) + { + this.grammarDecisionDescription = grammarDecisionDescription; + this.decisionNumber = decisionNumber; + this.stateNumber = stateNumber; + } + + public override string ToString() + { + if (input is ICharStream) { + return "NoViableAltException('" + (char)UnexpectedType + "'@[" + grammarDecisionDescription + "])"; + } + else { + return "NoViableAltException(" + UnexpectedType + "@[" + grammarDecisionDescription + "])"; + } + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/Parser.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/Parser.cs new file mode 100644 index 0000000..91a3aff --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/Parser.cs @@ -0,0 +1,125 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + /// <summary>A parser for TokenStreams. Parser grammars result in a subclass + /// of this. + /// </summary> + public class Parser : BaseRecognizer + { + public Parser(ITokenStream input) + : base() // highlight that we go to base class to set state object + { + TokenStream = input; + } + + public Parser(ITokenStream input, RecognizerSharedState state) + : base(state) // share the state object with another parser + { + TokenStream = input; + } + + override public void Reset() + { + base.Reset(); // reset all recognizer state variables + if ( input != null ) + { + input.Seek(0); // rewind the input + } + } + + protected override object GetCurrentInputSymbol(IIntStream input) { + return ((ITokenStream)input).LT(1); + } + + protected override object GetMissingSymbol(IIntStream input, + RecognitionException e, + int expectedTokenType, + BitSet follow) + { + String tokenText = null; + if ( expectedTokenType==Token.EOF ) tokenText = "<missing EOF>"; + else tokenText = "<missing " + TokenNames[expectedTokenType] + ">"; + CommonToken t = new CommonToken(expectedTokenType, tokenText); + IToken current = ((ITokenStream)input).LT(1); + if (current.Type == Token.EOF) { + current = ((ITokenStream)input).LT(-1); + } + t.line = current.Line; + t.CharPositionInLine = current.CharPositionInLine; + t.Channel = DEFAULT_TOKEN_CHANNEL; + return t; + } + + /// <summary>Set the token stream and reset the parser </summary> + virtual public ITokenStream TokenStream + { + get { return input; } + + set + { + this.input = null; + Reset(); + this.input = value; + } + + } + + public override string SourceName { + get { return input.SourceName; } + } + + protected internal ITokenStream input; + + override public IIntStream Input + { + get { return input; } + } + + public virtual void TraceIn(string ruleName, int ruleIndex) + { + base.TraceIn(ruleName, ruleIndex, input.LT(1)); + } + + public virtual void TraceOut(string ruleName, int ruleIndex) + { + base.TraceOut(ruleName, ruleIndex, input.LT(1)); + } + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ParserRuleReturnScope.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ParserRuleReturnScope.cs new file mode 100644 index 0000000..3f4c9fa --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/ParserRuleReturnScope.cs @@ -0,0 +1,76 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + /// <summary> + /// Rules that return more than a single value must return an object + /// containing all the values. Besides the properties defined in + /// RuleLabelScope.PredefinedRulePropertiesScope there may be user-defined + /// return values. This class simply defines the minimum properties that + /// are always defined and methods to access the others that might be + /// available depending on output option such as template and tree. + /// + /// Note text is not an actual property of the return value, it is computed + /// from start and stop using the input stream's ToString() method. I + /// could add a ctor to this so that we can pass in and store the input + /// stream, but I'm not sure we want to do that. It would seem to be undefined + /// to get the .text property anyway if the rule matches tokens from multiple + /// input streams. + /// + /// I do not use getters for fields of objects that are used simply to + /// group values such as this aggregate. + /// </summary> + public class ParserRuleReturnScope : RuleReturnScope + { + private IToken start, stop; + + /// <summary>Return the start token or tree </summary> + override public object Start + { + get { return start; } + set { start = (IToken) value; } + } + + /// <summary>Return the stop token or tree </summary> + override public object Stop + { + get { return stop; } + set { stop = (IToken) value; } + } + + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/RecognitionException.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/RecognitionException.cs new file mode 100644 index 0000000..0f82e28 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/RecognitionException.cs @@ -0,0 +1,324 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + using ITree = Antlr.Runtime.Tree.ITree; + using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; + using ITreeNodeStream = Antlr.Runtime.Tree.ITreeNodeStream; + using CommonTreeNodeStream = Antlr.Runtime.Tree.CommonTreeNodeStream; + using CommonTree = Antlr.Runtime.Tree.CommonTree; + + /// <summary>The root of the ANTLR exception hierarchy.</summary> + /// <remarks> + /// To avoid English-only error messages and to generally make things + /// as flexible as possible, these exceptions are not created with strings, + /// but rather the information necessary to generate an error. Then + /// the various reporting methods in Parser and Lexer can be overridden + /// to generate a localized error message. For example, MismatchedToken + /// exceptions are built with the expected token type. + /// So, don't expect getMessage() to return anything. + /// + /// You can access the stack trace, which means that you can compute the + /// complete trace of rules from the start symbol. This gives you considerable + /// context information with which to generate useful error messages. + /// + /// ANTLR generates code that throws exceptions upon recognition error and + /// also generates code to catch these exceptions in each rule. If you + /// want to quit upon first error, you can turn off the automatic error + /// handling mechanism using rulecatch action, but you still need to + /// override methods mismatch and recoverFromMismatchSet. + /// + /// In general, the recognition exceptions can track where in a grammar a + /// problem occurred and/or what was the expected input. While the parser + /// knows its state (such as current input symbol and line info) that + /// state can change before the exception is reported so current token index + /// is computed and stored at exception time. From this info, you can + /// perhaps print an entire line of input not just a single token, for example. + /// Better to just say the recognizer had a problem and then let the parser + /// figure out a fancy report. + /// </remarks> + [Serializable] + public class RecognitionException : Exception + { + #region Constructors + + /// <summary>Used for remote debugger deserialization </summary> + public RecognitionException() + : this(null, null, null) + { + } + + public RecognitionException(string message) + : this(message, null, null) + { + } + + public RecognitionException(string message, Exception inner) + : this(message, inner, null) + { + } + + public RecognitionException(IIntStream input) + : this(null, null, input) + { + } + + public RecognitionException(string message, IIntStream input) + : this(message, null, input) + { + } + + public RecognitionException(string message, Exception inner, IIntStream input) + : base(message, inner) + { + this.input = input; + this.index = input.Index(); + if (input is ITokenStream) + { + this.token = ((ITokenStream)input).LT(1); + this.line = token.Line; + this.charPositionInLine = token.CharPositionInLine; + } + if (input is ITreeNodeStream) + { + ExtractInformationFromTreeNodeStream(input); + } + else if (input is ICharStream) + { + this.c = input.LA(1); + this.line = ((ICharStream)input).Line; + this.charPositionInLine = ((ICharStream)input).CharPositionInLine; + } + else + { + this.c = input.LA(1); + } + } + + #endregion + + #region Public API + + /// <summary>Returns the input stream in which the error occurred</summary> + public IIntStream Input + { + get { return input; } + set { input = value; } + } + + /// <summary> + /// Returns the token/char index in the stream when the error occurred + /// </summary> + public int Index + { + get { return index; } + set { index = value; } + } + + /// <summary> + /// Returns the current Token when the error occurred (for parsers + /// although a tree parser might also set the token) + /// </summary> + public IToken Token + { + get { return token; } + set { token = value; } + } + + /// <summary> + /// Returns the [tree parser] node where the error occured (for tree parsers). + /// </summary> + public object Node + { + get { return node; } + set { node = value; } + } + + /// <summary> + /// Returns the current char when the error occurred (for lexers) + /// </summary> + public int Char + { + get { return c; } + set { c = value; } + } + + /// <summary> + /// Returns the character position in the line when the error + /// occurred (for lexers) + /// </summary> + public int CharPositionInLine + { + get { return charPositionInLine; } + set { charPositionInLine = value; } + } + + /// <summary> + /// Returns the line at which the error occurred (for lexers) + /// </summary> + public int Line + { + get { return line; } + set { line = value; } + } + + /// <summary> + /// Returns the token type or char of the unexpected input element + /// </summary> + virtual public int UnexpectedType + { + get + { + if (input is ITokenStream) + { + return token.Type; + } + else if (input is ITreeNodeStream) + { + ITreeNodeStream nodes = (ITreeNodeStream)input; + ITreeAdaptor adaptor = nodes.TreeAdaptor; + return adaptor.GetNodeType(node); + } + else + { + return c; + } + } + + } + + #endregion + + #region Non-Public API + + protected void ExtractInformationFromTreeNodeStream(IIntStream input) + { + ITreeNodeStream nodes = (ITreeNodeStream)input; + this.node = nodes.LT(1); + ITreeAdaptor adaptor = nodes.TreeAdaptor; + IToken payload = adaptor.GetToken(node); + if ( payload != null ) + { + this.token = payload; + if ( payload.Line <= 0 ) + { + // imaginary node; no line/pos info; scan backwards + int i = -1; + object priorNode = nodes.LT(i); + while ( priorNode != null ) + { + IToken priorPayload = adaptor.GetToken(priorNode); + if ( (priorPayload != null) && (priorPayload.Line > 0) ) + { + // we found the most recent real line / pos info + this.line = priorPayload.Line; + this.charPositionInLine = priorPayload.CharPositionInLine; + this.approximateLineInfo = true; + break; + } + --i; + priorNode = nodes.LT(i); + } + } + else + { + // node created from real token + this.line = payload.Line; + this.charPositionInLine = payload.CharPositionInLine; + } + } + else if (this.node is ITree) + { + this.line = ((ITree)this.node).Line; + this.charPositionInLine = ((ITree)this.node).CharPositionInLine; + if (this.node is CommonTree) + { + this.token = ((CommonTree)this.node).Token; + } + } + else + { + int type = adaptor.GetNodeType(this.node); + string text = adaptor.GetNodeText(this.node); + this.token = new CommonToken(type, text); + } + } + + #endregion + + #region Data Members + + + /// <summary>What input stream did the error occur in? </summary> + [NonSerialized] + protected IIntStream input; + + /// <summary> + /// What is index of token/char were we looking at when the error occurred? + /// </summary> + protected int index; + + /// <summary> + /// The current Token when an error occurred. Since not all streams + /// can retrieve the ith Token, we have to track the Token object. + /// </summary> + protected IToken token; + + /// <summary>[Tree parser] Node with the problem.</summary> + protected object node; + + /// <summary>The current char when an error occurred. For lexers. </summary> + protected int c; + + /// <summary>Track the line at which the error occurred in case this is + /// generated from a lexer. We need to track this since the + /// unexpected char doesn't carry the line info. + /// </summary> + protected int line; + + protected int charPositionInLine; + + /// <summary> + /// If you are parsing a tree node stream, you will encounter some + /// imaginary nodes w/o line/col info. We now search backwards looking + /// for most recent token with line/col info, but notify getErrorHeader() + /// that info is approximate. + /// </summary> + public bool approximateLineInfo; + + #endregion + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/RecognizerSharedState.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/RecognizerSharedState.cs new file mode 100644 index 0000000..6a27686 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/RecognizerSharedState.cs @@ -0,0 +1,160 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + using IDictionary = System.Collections.IDictionary; + + /// <summary> + /// The set of fields needed by an abstract recognizer to recognize input + /// and recover from errors + /// </summary> + /// <remarks> + /// As a separate state object, it can be shared among multiple grammars; + /// e.g., when one grammar imports another. + /// These fields are publicly visible but the actual state pointer per + /// parser is protected. + /// </remarks> + public class RecognizerSharedState + { + /// <summary> + /// Tracks the set of token types that can follow any rule invocation. + /// Stack grows upwards. When it hits the max, it grows 2x in size + /// and keeps going. + /// </summary> + public BitSet[] following = new BitSet[BaseRecognizer.INITIAL_FOLLOW_STACK_SIZE]; + public int followingStackPointer = -1; + + /// <summary> + /// This is true when we see an error and before having successfully + /// matched a token. Prevents generation of more than one error message + /// per error. + /// </summary> + public bool errorRecovery = false; + + /// <summary> + /// The index into the input stream where the last error occurred. + /// </summary> + /// <remarks> + /// This is used to prevent infinite loops where an error is found + /// but no token is consumed during recovery...another error is found, + /// ad naseum. This is a failsafe mechanism to guarantee that at least + /// one token/tree node is consumed for two errors. + /// </remarks> + public int lastErrorIndex = -1; + + /// <summary> + /// In lieu of a return value, this indicates that a rule or token + /// has failed to match. Reset to false upon valid token match. + /// </summary> + public bool failed = false; + + /// <summary> + /// Did the recognizer encounter a syntax error? Track how many. + /// </summary> + public int syntaxErrors = 0; + + /// <summary> + /// If 0, no backtracking is going on. Safe to exec actions etc... + /// If >0 then it's the level of backtracking. + /// </summary> + public int backtracking = 0; + + /// <summary> + /// An array[size num rules] of Map<Integer,Integer> that tracks + /// the stop token index for each rule. + /// </summary> + /// <remarks> + /// ruleMemo[ruleIndex] is the memoization table for ruleIndex. + /// For key ruleStartIndex, you get back the stop token for + /// associated rule or MEMO_RULE_FAILED. + /// + /// This is only used if rule memoization is on (which it is by default). + /// </remarks> + public IDictionary[] ruleMemo; + + + #region Lexer Specific Members + // LEXER FIELDS (must be in same state object to avoid casting + // constantly in generated code and Lexer object) :( + + + /// <summary> + /// Token object normally returned by NextToken() after matching lexer rules. + /// </summary> + /// <remarks> + /// The goal of all lexer rules/methods is to create a token object. + /// This is an instance variable as multiple rules may collaborate to + /// create a single token. nextToken will return this object after + /// matching lexer rule(s). If you subclass to allow multiple token + /// emissions, then set this to the last token to be matched or + /// something nonnull so that the auto token emit mechanism will not + /// emit another token. + /// </remarks> + public IToken token; + + /// <summary> + /// What character index in the stream did the current token start at? + /// </summary> + /// <remarks> + /// Needed, for example, to get the text for current token. Set at + /// the start of nextToken. + /// </remarks> + public int tokenStartCharIndex = -1; + + /// <summary> + /// The line on which the first character of the token resides + /// </summary> + public int tokenStartLine; + + /// <summary>The character position of first character within the line</summary> + public int tokenStartCharPositionInLine; + + /// <summary>The channel number for the current token</summary> + public int channel; + + /// <summary>The token type for the current token</summary> + public int type; + + /// <summary> + /// You can set the text for the current token to override what is in + /// the input char buffer. Use setText() or can set this instance var. + /// </summary> + public string text; + + #endregion + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/RuleReturnScope.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/RuleReturnScope.cs new file mode 100644 index 0000000..e78abfd --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/RuleReturnScope.cs @@ -0,0 +1,74 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + + /// <summary> + /// Rules can return start/stop info as well as possible trees and templates + /// </summary> + public class RuleReturnScope + { + /// <summary>Return the start token or tree </summary> + virtual public object Start + { + get { return null; } + set { throw new NotSupportedException("Setter has not been defined for this property."); } + } + + /// <summary>Return the stop token or tree </summary> + virtual public object Stop + { + get { return null; } + set { throw new NotSupportedException("Setter has not been defined for this property."); } + } + + /// <summary>Has a value potentially if output=AST; </summary> + virtual public object Tree + { + get { return null; } + set { throw new NotSupportedException("Setter has not been defined for this property."); } + } + /// <summary> + /// Has a value potentially if output=template; + /// Don't use StringTemplate type to avoid dependency on ST assembly + /// </summary> + virtual public object Template + { + get { return null; } + + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/Token.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/Token.cs new file mode 100644 index 0000000..7965cdc --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/Token.cs @@ -0,0 +1,84 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + +#if DOTNET1 + public sealed class Token { + /// <summary> + /// Instead of a static modifier for Token. + /// </summary> + private Token() { + } +#else + public static class Token { +#endif + + public const int EOR_TOKEN_TYPE = 1; + + /// <summary>imaginary tree navigation type; traverse "get child" link </summary> + public const int DOWN = 2; + /// <summary>imaginary tree navigation type; finish with a child list </summary> + public const int UP = 3; + + public static readonly int MIN_TOKEN_TYPE = UP + 1; + + public static readonly int EOF = (int)CharStreamConstants.EOF; + public static readonly IToken EOF_TOKEN = new CommonToken(EOF); + + public const int INVALID_TOKEN_TYPE = 0; + public static readonly IToken INVALID_TOKEN = new CommonToken(INVALID_TOKEN_TYPE); + + /// <summary> + /// In an action, a lexer rule can set token to this SKIP_TOKEN and ANTLR + /// will avoid creating a token for this symbol and try to fetch another. + /// </summary> + public static readonly IToken SKIP_TOKEN = new CommonToken(INVALID_TOKEN_TYPE); + + /// <summary> + /// All tokens go to the parser (unless skip() is called in that rule) + /// on a particular "channel". The parser tunes to a particular channel + /// so that whitespace etc... can go to the parser on a "hidden" channel. + /// </summary> + public const int DEFAULT_CHANNEL = 0; + + /// <summary> + /// Anything on different channel than DEFAULT_CHANNEL is not parsed by parser. + /// </summary> + public const int HIDDEN_CHANNEL = 99; + } +} diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/TokenRewriteStream.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/TokenRewriteStream.cs new file mode 100644 index 0000000..c2d84f4 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/TokenRewriteStream.cs @@ -0,0 +1,664 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +Copyright (c) 2007-2008 Johannes Luber +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Runtime +{ + using System; + using StringBuilder = System.Text.StringBuilder; + using IList = System.Collections.IList; + using ArrayList = System.Collections.ArrayList; + using IDictionary = System.Collections.IDictionary; + using Hashtable = System.Collections.Hashtable; + using IComparer = System.Collections.IComparer; + using IEnumerator = System.Collections.IEnumerator; + + /// <summary>Useful for dumping out the input stream after doing some + /// augmentation or other manipulations. + /// </summary> + /// + /// <remarks> + /// You can insert stuff, Replace, and delete chunks. Note that the + /// operations are done lazily--only if you convert the buffer to a + /// String. This is very efficient because you are not moving data around + /// all the time. As the buffer of tokens is converted to strings, the + /// ToString() method(s) check to see if there is an operation at the + /// current index. If so, the operation is done and then normal String + /// rendering continues on the buffer. This is like having multiple Turing + /// machine instruction streams (programs) operating on a single input tape. :) + /// + /// Since the operations are done lazily at ToString-time, operations do not + /// screw up the token index values. That is, an insert operation at token + /// index i does not change the index values for tokens i+1..n-1. + /// + /// Because operations never actually alter the buffer, you may always get + /// the original token stream back without undoing anything. Since + /// the instructions are queued up, you can easily simulate transactions and + /// roll back any changes if there is an error just by removing instructions. + /// For example, + /// + /// CharStream input = new ANTLRFileStream("input"); + /// TLexer lex = new TLexer(input); + /// TokenRewriteStream tokens = new TokenRewriteStream(lex); + /// T parser = new T(tokens); + /// parser.startRule(); + /// + /// Then in the rules, you can execute + /// IToken t,u; + /// ... + /// input.InsertAfter(t, "text to put after t");} + /// input.InsertAfter(u, "text after u");} + /// System.out.println(tokens.ToString()); + /// + /// Actually, you have to cast the 'input' to a TokenRewriteStream. :( + /// + /// You can also have multiple "instruction streams" and get multiple + /// rewrites from a single pass over the input. Just name the instruction + /// streams and use that name again when printing the buffer. This could be + /// useful for generating a C file and also its header file--all from the + /// same buffer: + /// + /// tokens.InsertAfter("pass1", t, "text to put after t");} + /// tokens.InsertAfter("pass2", u, "text after u");} + /// System.out.println(tokens.ToString("pass1")); + /// System.out.println(tokens.ToString("pass2")); + /// + /// If you don't use named rewrite streams, a "default" stream is used as + /// the first example shows. + /// </remarks> + public class TokenRewriteStream : CommonTokenStream + { + public const string DEFAULT_PROGRAM_NAME = "default"; + public const int PROGRAM_INIT_SIZE = 100; + public const int MIN_TOKEN_INDEX = 0; + + private class RewriteOpComparer : IComparer + { + public virtual int Compare(object o1, object o2) + { + RewriteOperation r1 = (RewriteOperation) o1; + RewriteOperation r2 = (RewriteOperation) o2; + if (r1.index < r2.index) + return - 1; + if (r1.index > r2.index) + return 1; + return 0; + } + } + + // Define the rewrite operation hierarchy + + protected internal class RewriteOperation + { + /** What index into rewrites List are we? */ + protected internal int instructionIndex; + /** Token buffer index. */ + protected internal int index; + protected internal object text; + protected internal TokenRewriteStream parent; + + protected internal RewriteOperation(int index, object text, TokenRewriteStream parent) + { + this.index = index; + this.text = text; + this.parent = parent; + } + /// <summary>Execute the rewrite operation by possibly adding to the buffer. + /// Return the index of the next token to operate on. + /// </summary> + public virtual int Execute(StringBuilder buf) + { + return index; + } + public override string ToString() + { + string opName = GetType().FullName; + int dollarIndex = opName.IndexOf('$'); + opName = opName.Substring(dollarIndex + 1, (opName.Length) - (dollarIndex + 1)); + return "<" + opName + "@" + index + ":\"" + text + "\">"; + } + } + + protected internal class InsertBeforeOp : RewriteOperation + { + public InsertBeforeOp(int index, object text, TokenRewriteStream parent) + : base(index, text, parent) + { + } + public override int Execute(StringBuilder buf) + { + buf.Append(text); + buf.Append(parent.Get(index).Text); + return index+1; + } + } + + /// <summary>I'm going to try replacing range from x..y with (y-x)+1 ReplaceOp + /// instructions. + /// </summary> + protected internal class ReplaceOp : RewriteOperation + { + protected internal int lastIndex; + public ReplaceOp(int from, int to, object text, TokenRewriteStream parent) + : base(from, text, parent) + { + lastIndex = to; + } + + public override int Execute(StringBuilder buf) + { + if (text != null) + { + buf.Append(text); + } + return lastIndex + 1; + } + + public override string ToString() { + return "<ReplaceOp@" + index + ".." + lastIndex + ":\"" + text + "\">"; + } + } + + protected internal class DeleteOp : ReplaceOp + { + public DeleteOp(int from, int to, TokenRewriteStream parent) + : base(from, to, null, parent) + { + } + + public override string ToString() { + return "<DeleteOp@" + index + ".." + lastIndex + ">"; + } + } + + /// <summary>You may have multiple, named streams of rewrite operations. + /// I'm calling these things "programs." + /// Maps String (name) -> rewrite (IList) + /// </summary> + protected IDictionary programs = null; + + /// <summary>Map String (program name) -> Integer index </summary> + protected IDictionary lastRewriteTokenIndexes = null; + + public TokenRewriteStream() + { + Init(); + } + + public TokenRewriteStream(ITokenSource tokenSource) + : base(tokenSource) + { + Init(); + } + + public TokenRewriteStream(ITokenSource tokenSource, int channel) + : base(tokenSource, channel) + { + Init(); + } + + protected internal virtual void Init() + { + programs = new Hashtable(); + programs[DEFAULT_PROGRAM_NAME] = new ArrayList(PROGRAM_INIT_SIZE); + lastRewriteTokenIndexes = new Hashtable(); + } + + public virtual void Rollback(int instructionIndex) + { + Rollback(DEFAULT_PROGRAM_NAME, instructionIndex); + } + + /// <summary>Rollback the instruction stream for a program so that + /// the indicated instruction (via instructionIndex) is no + /// longer in the stream. UNTESTED! + /// </summary> + public virtual void Rollback(string programName, int instructionIndex) + { + IList instructionStream = (IList) programs[programName]; + if (instructionStream != null) + { + programs[programName] = (IList) ((ArrayList) instructionStream).GetRange(MIN_TOKEN_INDEX, instructionIndex - MIN_TOKEN_INDEX); + } + } + + public virtual void DeleteProgram() + { + DeleteProgram(DEFAULT_PROGRAM_NAME); + } + + /// <summary>Reset the program so that no instructions exist </summary> + public virtual void DeleteProgram(string programName) + { + Rollback(programName, MIN_TOKEN_INDEX); + } + + public virtual void InsertAfter(IToken t, object text) + { + InsertAfter(DEFAULT_PROGRAM_NAME, t, text); + } + + public virtual void InsertAfter(int index, object text) + { + InsertAfter(DEFAULT_PROGRAM_NAME, index, text); + } + + public virtual void InsertAfter(string programName, IToken t, object text) + { + InsertAfter(programName, t.TokenIndex, text); + } + + public virtual void InsertAfter(string programName, int index, object text) + { + // to insert after, just insert before next index (even if past end) + InsertBefore(programName, index + 1, text); + //AddToSortedRewriteList(programName, new InsertAfterOp(index,text)); + } + + public virtual void InsertBefore(IToken t, object text) + { + InsertBefore(DEFAULT_PROGRAM_NAME, t, text); + } + + public virtual void InsertBefore(int index, object text) + { + InsertBefore(DEFAULT_PROGRAM_NAME, index, text); + } + + public virtual void InsertBefore(string programName, IToken t, object text) + { + InsertBefore(programName, t.TokenIndex, text); + } + + public virtual void InsertBefore(string programName, int index, object text) + { + RewriteOperation op = new InsertBeforeOp(index, text, this); + IList rewrites = GetProgram(programName); + rewrites.Add(op); + } + + public virtual void Replace(int index, object text) + { + Replace(DEFAULT_PROGRAM_NAME, index, index, text); + } + + public virtual void Replace(int from, int to, object text) + { + Replace(DEFAULT_PROGRAM_NAME, from, to, text); + } + + public virtual void Replace(IToken indexT, object text) + { + Replace(DEFAULT_PROGRAM_NAME, indexT, indexT, text); + } + + public virtual void Replace(IToken from, IToken to, object text) + { + Replace(DEFAULT_PROGRAM_NAME, from, to, text); + } + + public virtual void Replace(string programName, int from, int to, object text) + { + if ( from > to || from<0 || to<0 || to >= tokens.Count ) { + throw new ArgumentOutOfRangeException("replace: range invalid: " + from + ".." + + to + "(size=" + tokens.Count + ")"); + } + RewriteOperation op = new ReplaceOp(from, to, text, this); + IList rewrites = GetProgram(programName); + op.instructionIndex = rewrites.Count; + rewrites.Add(op); + } + + public virtual void Replace(string programName, IToken from, IToken to, object text) + { + Replace(programName, from.TokenIndex, to.TokenIndex, text); + } + + public virtual void Delete(int index) + { + Delete(DEFAULT_PROGRAM_NAME, index, index); + } + + public virtual void Delete(int from, int to) + { + Delete(DEFAULT_PROGRAM_NAME, from, to); + } + + public virtual void Delete(IToken indexT) + { + Delete(DEFAULT_PROGRAM_NAME, indexT, indexT); + } + + public virtual void Delete(IToken from, IToken to) + { + Delete(DEFAULT_PROGRAM_NAME, from, to); + } + + public virtual void Delete(string programName, int from, int to) + { + Replace(programName, from, to, null); + } + + public virtual void Delete(string programName, IToken from, IToken to) + { + Replace(programName, from, to, null); + } + + public virtual int GetLastRewriteTokenIndex() + { + return GetLastRewriteTokenIndex(DEFAULT_PROGRAM_NAME); + } + + protected virtual int GetLastRewriteTokenIndex(string programName) + { + object I = lastRewriteTokenIndexes[programName]; + if (I == null) + { + return -1; + } + return (int)I; + } + + protected virtual void SetLastRewriteTokenIndex(string programName, int i) + { + lastRewriteTokenIndexes[programName] = i; + } + + protected virtual IList GetProgram(string name) + { + IList instructionStream = (IList) programs[name]; + if (instructionStream == null) + { + instructionStream = InitializeProgram(name); + } + return instructionStream; + } + + private IList InitializeProgram(string name) + { + IList instructionStream = new ArrayList(PROGRAM_INIT_SIZE); + programs[name] = instructionStream; + return instructionStream; + } + + public virtual string ToOriginalString() + { + return ToOriginalString(MIN_TOKEN_INDEX, Count - 1); + } + + public virtual string ToOriginalString(int start, int end) + { + StringBuilder buf = new StringBuilder(); + for (int i = start; (i >= MIN_TOKEN_INDEX) && (i <= end) && (i < tokens.Count); i++) + { + buf.Append(Get(i).Text); + } + return buf.ToString(); + } + + public override string ToString() + { + return ToString(MIN_TOKEN_INDEX, Count-1); + } + + public virtual string ToString(string programName) + { + return ToString(programName, MIN_TOKEN_INDEX, Count-1); + } + + public override string ToString(int start, int end) + { + return ToString(DEFAULT_PROGRAM_NAME, start, end); + } + + public virtual string ToString(string programName, int start, int end) + { + IList rewrites = (IList) programs[programName]; + + // ensure start/end are in range + if ( end>tokens.Count-1 ) end = tokens.Count-1; + if ( start<0 ) start = 0; + + if ( (rewrites == null) || (rewrites.Count == 0) ) + { + return ToOriginalString(start, end); // no instructions to execute + } + StringBuilder buf = new StringBuilder(); + + // First, optimize instruction stream + IDictionary indexToOp = ReduceToSingleOperationPerIndex(rewrites); + + // Walk buffer, executing instructions and emitting tokens + int i = start; + while ( i <= end && i < tokens.Count ) { + RewriteOperation op = (RewriteOperation)indexToOp[i]; + indexToOp.Remove(i); // remove so any left have index size-1 + IToken t = (IToken) tokens[i]; + if ( op==null ) { + // no operation at that index, just dump token + buf.Append(t.Text); + i++; // move to next token + } + else { + i = op.Execute(buf); // execute operation and skip + } + } + + // include stuff after end if it's last index in buffer + // So, if they did an insertAfter(lastValidIndex, "foo"), include + // foo if end==lastValidIndex. + if ( end==tokens.Count-1 ) { + // Scan any remaining operations after last token + // should be included (they will be inserts). + IEnumerator iter = indexToOp.Values.GetEnumerator(); + while (iter.MoveNext()) { + InsertBeforeOp iop = (InsertBeforeOp)iter.Current; + if ( iop.index >= tokens.Count-1 ) buf.Append(iop.text); + } + } + return buf.ToString(); + } + + /// <summary> + /// Return a map from token index to operation. + /// </summary> + /// <remarks>We need to combine operations and report invalid operations (like + /// overlapping replaces that are not completed nested). Inserts to + /// same index need to be combined etc... Here are the cases: + /// + /// I.i.u I.j.v leave alone, nonoverlapping + /// I.i.u I.i.v combine: Iivu + /// + /// R.i-j.u R.x-y.v | i-j in x-y delete first R + /// R.i-j.u R.i-j.v delete first R + /// R.i-j.u R.x-y.v | x-y in i-j ERROR + /// R.i-j.u R.x-y.v | boundaries overlap ERROR + /// + /// I.i.u R.x-y.v | i in x-y delete I + /// I.i.u R.x-y.v | i not in x-y leave alone, nonoverlapping + /// R.x-y.v I.i.u | i in x-y ERROR + /// R.x-y.v I.x.u R.x-y.uv (combine, delete I) + /// R.x-y.v I.i.u | i not in x-y leave alone, nonoverlapping + /// + /// I.i.u = insert u before op @ index i + /// R.x-y.u = replace x-y indexed tokens with u + /// + /// First we need to examine replaces. For any replace op: + /// + /// 1. wipe out any insertions before op within that range. + /// 2. Drop any replace op before that is contained completely within + /// that range. + /// 3. Throw exception upon boundary overlap with any previous replace. + /// + /// Then we can deal with inserts: + /// + /// 1. for any inserts to same index, combine even if not adjacent. + /// 2. for any prior replace with same left boundary, combine this + /// insert with replace and delete this replace. + /// 3. throw exception if index in same range as previous replace + /// + /// Don't actually delete; make op null in list. Easier to walk list. + /// Later we can throw as we add to index -> op map. + /// + /// Note that I.2 R.2-2 will wipe out I.2 even though, technically, the + /// inserted stuff would be before the replace range. But, if you + /// add tokens in front of a method body '{' and then delete the method + /// body, I think the stuff before the '{' you added should disappear too. + /// </remarks> + protected IDictionary ReduceToSingleOperationPerIndex(IList rewrites) { + + // WALK REPLACES + for (int i = 0; i < rewrites.Count; i++) { + RewriteOperation op = (RewriteOperation)rewrites[i]; + if ( op==null ) continue; + if ( !(op is ReplaceOp) ) continue; + ReplaceOp rop = (ReplaceOp)rewrites[i]; + // Wipe prior inserts within range + IList inserts = GetKindOfOps(rewrites, typeof(InsertBeforeOp), i); + for (int j = 0; j < inserts.Count; j++) { + InsertBeforeOp iop = (InsertBeforeOp) inserts[j]; + if ( iop.index >= rop.index && iop.index <= rop.lastIndex ) { + // delete insert as it's a no-op. + rewrites[iop.instructionIndex] = null; + } + } + // Drop any prior replaces contained within + IList prevReplaces = GetKindOfOps(rewrites, typeof(ReplaceOp), i); + for (int j = 0; j < prevReplaces.Count; j++) { + ReplaceOp prevRop = (ReplaceOp) prevReplaces[j]; + if ( prevRop.index>=rop.index && prevRop.lastIndex <= rop.lastIndex ) { + // delete replace as it's a no-op. + rewrites[prevRop.instructionIndex] = null; + continue; + } + // throw exception unless disjoint or identical + bool disjoint = + prevRop.lastIndex<rop.index || prevRop.index > rop.lastIndex; + bool same = + prevRop.index==rop.index && prevRop.lastIndex==rop.lastIndex; + if ( !disjoint && !same ) { + throw new ArgumentOutOfRangeException("replace op boundaries of "+rop+ + " overlap with previous "+prevRop); + } + } + } + + // WALK INSERTS + for (int i = 0; i < rewrites.Count; i++) { + RewriteOperation op = (RewriteOperation)rewrites[i]; + if ( op==null ) continue; + if ( !(op is InsertBeforeOp) ) continue; + InsertBeforeOp iop = (InsertBeforeOp)rewrites[i]; + // combine current insert with prior if any at same index + IList prevInserts = GetKindOfOps(rewrites, typeof(InsertBeforeOp), i); + for (int j = 0; j < prevInserts.Count; j++) { + InsertBeforeOp prevIop = (InsertBeforeOp) prevInserts[j]; + if ( prevIop.index == iop.index ) { // combine objects + // convert to strings...we're in process of toString'ing + // whole token buffer so no lazy eval issue with any templates + iop.text = CatOpText(iop.text,prevIop.text); + // delete redundant prior insert + rewrites[prevIop.instructionIndex] = null; + } + } + // look for replaces where iop.index is in range; error + IList prevReplaces = GetKindOfOps(rewrites, typeof(ReplaceOp), i); + for (int j = 0; j < prevReplaces.Count; j++) { + ReplaceOp rop = (ReplaceOp) prevReplaces[j]; + if ( iop.index == rop.index ) { + rop.text = CatOpText(iop.text,rop.text); + rewrites[i] = null; // delete current insert + continue; + } + if ( iop.index >= rop.index && iop.index <= rop.lastIndex ) { + throw new ArgumentOutOfRangeException("insert op "+iop+ + " within boundaries of previous "+rop); + } + } + } + // System.out.println("rewrites after="+rewrites); + IDictionary m = new Hashtable(); + for (int i = 0; i < rewrites.Count; i++) { + RewriteOperation op = (RewriteOperation)rewrites[i]; + if ( op==null ) continue; // ignore deleted ops + if ( m[op.index]!=null ) { + throw new Exception("should only be one op per index"); + } + m[op.index] = op; + } + //System.out.println("index to op: "+m); + return m; + } + + protected String CatOpText(Object a, Object b) { + String x = ""; + String y = ""; + if ( a!=null ) x = a.ToString(); + if ( b!=null ) y = b.ToString(); + return x+y; + } + + protected IList GetKindOfOps(IList rewrites, Type kind) { + return GetKindOfOps(rewrites, kind, rewrites.Count); + } + + /// <summary> + /// Get all operations before an index of a particular kind + /// </summary> + protected IList GetKindOfOps(IList rewrites, Type kind, int before) { + IList ops = new ArrayList(); + for (int i=0; i<before && i<rewrites.Count; i++) { + RewriteOperation op = (RewriteOperation)rewrites[i]; + if ( op==null ) continue; // ignore deleted + if ( op.GetType() == kind ) ops.Add(op); + } + return ops; + } + + public virtual string ToDebugString() + { + return ToDebugString(MIN_TOKEN_INDEX, Count-1); + } + + public virtual string ToDebugString(int start, int end) + { + StringBuilder buf = new StringBuilder(); + for (int i = start; i >= MIN_TOKEN_INDEX && i <= end && i < tokens.Count; i++) + { + buf.Append(Get(i)); + } + return buf.ToString(); + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/UnwantedTokenException.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/UnwantedTokenException.cs new file mode 100644 index 0000000..2ade9fa --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr.Runtime/UnwantedTokenException.cs @@ -0,0 +1,64 @@ +/* +[The "BSD licence"] +Copyright (c) 2007-2008 Johannes Luber +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +using System; + +namespace Antlr.Runtime +{ + + /// <summary> + /// An extra token while parsing a TokenStream. + /// </summary> + public class UnwantedTokenException : MismatchedTokenException { + /// <summary> + /// Used for remote debugger deserialization + /// </summary> + public UnwantedTokenException() { + } + + public UnwantedTokenException(int expecting, IIntStream input) + : base(expecting, input) { + } + + public IToken UnexpectedToken { + get { return token; } + } + + public override string ToString() { + string exp = ", expected " + Expecting; + if (Expecting == Runtime.Token.INVALID_TOKEN_TYPE) { + exp = ""; + } + if (token==null) { + return "UnwantedTokenException(found=" + null + exp + ")"; + } + return "UnwantedTokenException(found=" + token.Text + exp + ")"; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr3.Runtime (VS2003).csproj b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr3.Runtime (VS2003).csproj new file mode 100644 index 0000000..573d1fc --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr3.Runtime (VS2003).csproj @@ -0,0 +1,464 @@ +<VisualStudioProject> + <CSHARP + ProjectType = "Local" + ProductVersion = "7.10.3077" + SchemaVersion = "2.0" + ProjectGuid = "{38F943D7-937F-4911-9882-24955F6AD0CC}" + > + <Build> + <Settings + ApplicationIcon = "" + AssemblyKeyContainerName = "" + AssemblyName = "Antlr3.Runtime" + AssemblyOriginatorKeyFile = "" + DefaultClientScript = "JScript" + DefaultHTMLPageLayout = "Grid" + DefaultTargetSchema = "IE50" + DelaySign = "false" + OutputType = "Library" + PreBuildEvent = "" + PostBuildEvent = "" + RootNamespace = "Antlr.Runtime" + RunPostBuildEvent = "OnBuildSuccess" + StartupObject = "" + > + <Config + Name = "Debug" + AllowUnsafeBlocks = "false" + BaseAddress = "285212672" + CheckForOverflowUnderflow = "false" + ConfigurationOverrideFile = "" + DefineConstants = "DEBUG;STRONG_NAME;DOTNET1" + DocumentationFile = "bin\Debug\net-1.1\Antlr3.Runtime.xml" + DebugSymbols = "true" + FileAlignment = "4096" + IncrementalBuild = "false" + NoStdLib = "false" + NoWarn = "" + Optimize = "false" + OutputPath = "bin\Debug\net-1.1\" + RegisterForComInterop = "false" + RemoveIntegerChecks = "false" + TreatWarningsAsErrors = "false" + WarningLevel = "4" + /> + <Config + Name = "Release" + AllowUnsafeBlocks = "false" + BaseAddress = "285212672" + CheckForOverflowUnderflow = "false" + ConfigurationOverrideFile = "" + DefineConstants = "STRONG_NAME;DOTNET1" + DocumentationFile = "bin\Release\net-1.1\Antlr3.Runtime.xml" + DebugSymbols = "false" + FileAlignment = "4096" + IncrementalBuild = "false" + NoStdLib = "false" + NoWarn = "" + Optimize = "false" + OutputPath = "bin\Release\net-1.1\" + RegisterForComInterop = "false" + RemoveIntegerChecks = "false" + TreatWarningsAsErrors = "false" + WarningLevel = "4" + /> + </Settings> + <References> + <Reference + Name = "system" + AssemblyName = "System" + HintPath = "..\..\..\..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\system.dll" + /> + </References> + </Build> + <Files> + <Include> + <File + RelPath = "AssemblyInfo.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Messages.resx" + BuildAction = "EmbeddedResource" + /> + <File + RelPath = "Antlr.Runtime\ANTLRFileStream.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\ANTLRInputStream.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\ANTLRReaderStream.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\ANTLRStringStream.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\BaseRecognizer.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\BitSet.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\CharStreamState.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\ClassicToken.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\CommonToken.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\CommonTokenStream.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\Constants.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\DFA.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\EarlyExitException.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\FailedPredicateException.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\ICharStream.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\IIntStream.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\IToken.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\ITokenSource.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\ITokenStream.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\Lexer.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\MismatchedNotSetException.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\MismatchedRangeException.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\MismatchedSetException.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\MismatchedTokenException.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\MismatchedTreeNodeException.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\NoViableAltException.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\Parser.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\ParserRuleReturnScope.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\RecognitionException.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\RecognizerSharedState.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\RuleReturnScope.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\Token.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime\TokenRewriteStream.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Collections\CollectionUtils.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Collections\HashList.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Collections\StackList.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.debug\BlankDebugEventListener.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.debug\DebugEventHub.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.debug\DebugEventRepeater.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.debug\DebugEventSocketProxy.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.debug\DebugParser.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.debug\DebugTokenStream.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.debug\DebugTreeAdaptor.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.debug\DebugTreeNodeStream.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.debug\DebugTreeParser.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.debug\IDebugEventListener.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.debug\ParseTreeBuilder.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.debug\Profiler.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.debug\RemoteDebugEventSocketListener.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.debug\TraceDebugEventListener.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.debug\Tracer.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Misc\ErrorManager.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Misc\Stats.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\BaseTree.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\BaseTreeAdaptor.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\CommonTree.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\CommonTreeAdaptor.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\CommonTreeNodeStream.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\ITree.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\ITreeAdaptor.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\ITreeNodeStream.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\ParseTree.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\RewriteCardinalityException.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\RewriteEarlyExitException.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\RewriteEmptyStreamException.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\RewriteRuleElementStream.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\RewriteRuleNodeStream.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\RewriteRuleSubtreeStream.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\RewriteRuleTokenStream.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\TreeParser.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\TreePatternLexer.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\TreePatternParser.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\TreeRuleReturnScope.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\TreeWizard.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Runtime.Tree\UnBufferedTreeNodeStream.cs" + SubType = "Code" + BuildAction = "Compile" + /> + </Include> + </Files> + </CSHARP> +</VisualStudioProject> + diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr3.Runtime (VS2005).csproj b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr3.Runtime (VS2005).csproj new file mode 100644 index 0000000..19ec15e --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Antlr3.Runtime (VS2005).csproj @@ -0,0 +1,174 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <ProjectType>Local</ProjectType> + <ProductVersion>8.0.50727</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ApplicationIcon> + </ApplicationIcon> + <AssemblyKeyContainerName> + </AssemblyKeyContainerName> + <AssemblyName>Antlr3.Runtime</AssemblyName> + <AssemblyOriginatorKeyFile> + </AssemblyOriginatorKeyFile> + <DefaultClientScript>JScript</DefaultClientScript> + <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> + <DefaultTargetSchema>IE50</DefaultTargetSchema> + <DelaySign>false</DelaySign> + <OutputType>Library</OutputType> + <RootNamespace>Antlr.Runtime</RootNamespace> + <NoStandardLibraries>false</NoStandardLibraries> + <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent> + <StartupObject> + </StartupObject> + <FileUpgradeFlags> + </FileUpgradeFlags> + <ProjectGuid>{CF15D0D5-BE72-4F98-B70F-229ABA1DF0E8}</ProjectGuid> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <OutputPath>bin\Debug\net-2.0\</OutputPath> + <BaseAddress>285212672</BaseAddress> + <ConfigurationOverrideFile> + </ConfigurationOverrideFile> + <DefineConstants>TRACE;DEBUG;STRONG_NAME;DOTNET2</DefineConstants> + <DocumentationFile> + </DocumentationFile> + <DebugSymbols>true</DebugSymbols> + <FileAlignment>4096</FileAlignment> + <RegisterForComInterop>false</RegisterForComInterop> + <RemoveIntegerChecks>false</RemoveIntegerChecks> + <WarningLevel>4</WarningLevel> + <DebugType>full</DebugType> + <ErrorReport>prompt</ErrorReport> + <OutputType>Library</OutputType> + <RootNamespace>Antlr.Runtime</RootNamespace> + <Optimize>true</Optimize> + <StartupObject /> + <GenerateDocumentation>true</GenerateDocumentation> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <OutputPath>bin\Release\net-2.0\</OutputPath> + <BaseAddress>285212672</BaseAddress> + <ConfigurationOverrideFile> + </ConfigurationOverrideFile> + <DefineConstants>STRONG_NAME;DOTNET2</DefineConstants> + <DocumentationFile>bin\Release\net-2.0\Antlr3.Runtime.XML</DocumentationFile> + <DebugSymbols>true</DebugSymbols> + <FileAlignment>4096</FileAlignment> + <RegisterForComInterop>false</RegisterForComInterop> + <RemoveIntegerChecks>false</RemoveIntegerChecks> + <WarningLevel>4</WarningLevel> + <DebugType>full</DebugType> + <ErrorReport>prompt</ErrorReport> + <OutputType>Library</OutputType> + <RootNamespace>Antlr.Runtime</RootNamespace> + <Optimize>true</Optimize> + <StartupObject /> + </PropertyGroup> + <ItemGroup> + <Reference Include="System" /> + </ItemGroup> + <ItemGroup> + <Compile Include="Antlr.Runtime\ANTLRFileStream.cs" /> + <Compile Include="Antlr.Runtime\ANTLRStringStream.cs" /> + <Compile Include="AssemblyInfo.cs" /> + <Compile Include="Antlr.Runtime\BitSet.cs" /> + <Compile Include="Antlr.Runtime\ICharStream.cs" /> + <Compile Include="Antlr.Runtime\CharStreamState.cs" /> + <Compile Include="Antlr.Runtime\ClassicToken.cs" /> + <Compile Include="Antlr.Runtime\CommonToken.cs" /> + <Compile Include="Antlr.Runtime\DFA.cs" /> + <Compile Include="Antlr.Runtime\EarlyExitException.cs" /> + <Compile Include="Antlr.Runtime\FailedPredicateException.cs" /> + <Compile Include="Antlr.Runtime\IIntStream.cs" /> + <Compile Include="Antlr.Runtime\MismatchedNotSetException.cs" /> + <Compile Include="Antlr.Runtime\MismatchedRangeException.cs" /> + <Compile Include="Antlr.Runtime\MismatchedSetException.cs" /> + <Compile Include="Antlr.Runtime\MismatchedTokenException.cs" /> + <Compile Include="Antlr.Runtime\MismatchedTreeNodeException.cs" /> + <Compile Include="Antlr.Runtime\NoViableAltException.cs" /> + <Compile Include="Antlr.Runtime\Parser.cs" /> + <Compile Include="Antlr.Runtime\ParserRuleReturnScope.cs" /> + <Compile Include="Antlr.Runtime\RecognitionException.cs" /> + <Compile Include="Antlr.Runtime\RuleReturnScope.cs" /> + <Compile Include="Antlr.Runtime\Token.cs" /> + <Compile Include="Antlr.Runtime\ITokenSource.cs" /> + <Compile Include="Antlr.Runtime\MissingTokenException.cs" /> + <Compile Include="Antlr.Runtime.Tree\CommonErrorNode.cs" /> + <Compile Include="Antlr.Runtime\UnwantedTokenException.cs" /> + <Compile Include="Antlr.Runtime.Collections\CollectionUtils.cs" /> + <Compile Include="Antlr.Runtime.Collections\HashList.cs" /> + <Compile Include="Antlr.Runtime.Collections\StackList.cs" /> + <Compile Include="Antlr.Runtime.Tree\BaseTree.cs" /> + <Compile Include="Antlr.Runtime.Tree\BaseTreeAdaptor.cs" /> + <Compile Include="Antlr.Runtime.Tree\CommonTree.cs" /> + <Compile Include="Antlr.Runtime.Tree\CommonTreeAdaptor.cs" /> + <Compile Include="Antlr.Runtime.Tree\CommonTreeNodeStream.cs" /> + <Compile Include="Antlr.Runtime.Tree\ITree.cs" /> + <Compile Include="Antlr.Runtime.Tree\ITreeAdaptor.cs" /> + <Compile Include="Antlr.Runtime.Tree\ITreeNodeStream.cs" /> + <Compile Include="Antlr.Runtime.Tree\ParseTree.cs" /> + <Compile Include="Antlr.Runtime.Tree\TreeParser.cs" /> + <Compile Include="Antlr.Runtime.Tree\TreeRuleReturnScope.cs" /> + <Compile Include="Antlr.Runtime.Debug\DebugEventSocketProxy.cs" /> + <Compile Include="Antlr.Runtime.Debug\DebugParser.cs" /> + <Compile Include="Antlr.Runtime.Debug\DebugTokenStream.cs" /> + <Compile Include="Antlr.Runtime.Debug\IDebugEventListener.cs" /> + <Compile Include="Antlr.Runtime.Debug\DebugTreeAdaptor.cs" /> + <Compile Include="Antlr.Runtime\Constants.cs" /> + <Compile Include="Messages.Designer.cs"> + <DependentUpon>Messages.resx</DependentUpon> + </Compile> + <Compile Include="Antlr.Runtime.Debug\DebugTreeNodeStream.cs" /> + <Compile Include="Antlr.Runtime.Debug\BlankDebugEventListener.cs" /> + <Compile Include="Antlr.Runtime.Debug\RemoteDebugEventSocketListener.cs" /> + <Compile Include="Antlr.Runtime.Debug\TraceDebugEventListener.cs" /> + <Compile Include="Antlr.Runtime.Debug\DebugEventHub.cs" /> + <Compile Include="Antlr.Runtime.Debug\DebugEventRepeater.cs" /> + <Compile Include="Antlr.Runtime.Debug\DebugTreeParser.cs" /> + <Compile Include="Antlr.Runtime.Debug\ParseTreeBuilder.cs" /> + <Compile Include="Antlr.Runtime.Debug\Profiler.cs" /> + <Compile Include="Antlr.Runtime.Debug\Tracer.cs" /> + <Compile Include="Antlr.Runtime.Misc\Stats.cs" /> + <Compile Include="Antlr.Runtime.Misc\ErrorManager.cs" /> + <Compile Include="Antlr.Runtime.Tree\TreeWizard.cs" /> + <Compile Include="Antlr.Runtime.Tree\TreePatternLexer.cs" /> + <Compile Include="Antlr.Runtime.Tree\RewriteRuleNodeStream.cs" /> + <Compile Include="Antlr.Runtime.Tree\TreePatternParser.cs" /> + <Compile Include="Antlr.Runtime.Tree\RewriteCardinalityException.cs" /> + <Compile Include="Antlr.Runtime.Tree\RewriteEarlyExitException.cs" /> + <Compile Include="Antlr.Runtime.Tree\RewriteEmptyStreamException.cs" /> + <Compile Include="Antlr.Runtime.Tree\RewriteRuleElementStream.cs" /> + <Compile Include="Antlr.Runtime.Tree\RewriteRuleSubtreeStream.cs" /> + <Compile Include="Antlr.Runtime.Tree\RewriteRuleTokenStream.cs" /> + <Compile Include="Antlr.Runtime.Tree\UnBufferedTreeNodeStream.cs" /> + <Compile Include="Antlr.Runtime\ANTLRInputStream.cs" /> + <Compile Include="Antlr.Runtime\ANTLRReaderStream.cs" /> + <Compile Include="Antlr.Runtime\BaseRecognizer.cs" /> + <Compile Include="Antlr.Runtime\CommonTokenStream.cs" /> + <Compile Include="Antlr.Runtime\RecognizerSharedState.cs" /> + <Compile Include="Antlr.Runtime\IToken.cs" /> + <Compile Include="Antlr.Runtime\ITokenStream.cs" /> + <Compile Include="Antlr.Runtime\Lexer.cs" /> + <Compile Include="Antlr.Runtime\TokenRewriteStream.cs" /> + <Compile Include="Antlr.Runtime.Tree\ITreeVisitorAction.cs" /> + <Compile Include="Antlr.Runtime.Tree\TreeVisitor.cs" /> + </ItemGroup> + <ItemGroup> + <EmbeddedResource Include="Messages.resx"> + <SubType>Designer</SubType> + <Generator>ResXFileCodeGenerator</Generator> + </EmbeddedResource> + </ItemGroup> + <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> + <PropertyGroup> + <PreBuildEvent> + </PreBuildEvent> + <PostBuildEvent> + </PostBuildEvent> + <ProjectGuid>{CF15D0D5-BE72-4F98-B70F-229ABA1DF0E8}</ProjectGuid> + <RootNamespace>Antlr.Runtime</RootNamespace> + </PropertyGroup> +</Project> \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/AssemblyInfo.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/AssemblyInfo.cs new file mode 100644 index 0000000..02be7d5 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/AssemblyInfo.cs @@ -0,0 +1,111 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +using System.Reflection; +using System.Runtime.CompilerServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +// TODO: Review the values of the assembly attributes + +[assembly: AssemblyTitle("ANTLR3.Runtime.NET")] +[assembly: AssemblyDescription("ANTLR3 C# Runtime for .NET")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("Copyright (c) 2005-2007 Kunle Odutola, 2007-2009 Johannes Luber")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Allow the use of the assembly in medium trust for websites +[assembly: System.Security.AllowPartiallyTrustedCallers] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Revision +// Build Number +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("3.1.3.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\<configuration>. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\..\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// + +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyKeyName("")] + +#if STRONG_NAME +// This strongly suggests that the build is a VS.NET build. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("../../../Antlr3_KeyPair.snk")] +#elif NANT_STRONGNAME +// This strongly suggests that the build is a NANT build. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("../Antlr3_KeyPair.snk")] +#else +// This should never happen as the assembly should always be strong named. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +#endif + + diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Messages.Designer.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Messages.Designer.cs new file mode 100644 index 0000000..85c5c1e --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Messages.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.42 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace Antlr.Runtime { + using System; + + + /// <summary> + /// A strongly-typed resource class, for looking up localized strings, etc. + /// </summary> + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Messages { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Messages() { + } + + /// <summary> + /// Returns the cached ResourceManager instance used by this class. + /// </summary> + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Antlr.Runtime.Messages", typeof(Messages).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// <summary> + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// </summary> + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Messages.resx b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Messages.resx new file mode 100644 index 0000000..4fdb1b6 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/Messages.resx @@ -0,0 +1,101 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 1.3 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">1.3</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1">this is my long string</data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + [base64 mime encoded serialized .NET Framework object] + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + [base64 mime encoded string representing a byte array form of the .NET Framework object] + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>1.3</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/default.build b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/default.build new file mode 100644 index 0000000..4b818e9 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Runtime/default.build @@ -0,0 +1,132 @@ +<?xml version="1.0"?> +<project name="ANTLR C# Runtime Library" default="build"> + <tstamp/> + <property name="base.dir" value="${path::get-full-path( project::get-base-directory() )}" /> + + <include buildfile="../../antlr3.runtime.net.common.inc" /> + + <property name="antlr3.runtime.test" value="true" unless="${property::exists('antlr3.runtime.test')}" /> + <property name="enabletest" value="ALLOWTEST" unless="${property::exists('enabletest')}" /> + + <property name="name" value="Antlr3.Runtime" /> + <property name="test.name" value="${name}.Tests" /> + + <property name="assembly.name" value="${name}.dll" /> + <property name="test.assembly.name" value="${test.name}.exe" /> + + <property name="src.dir" value="${base.dir}/" /> + <property name="test.src.dir" value="${base.dir}/../Antlr3.Runtime.Tests" /> + + <property name="debug" value="true" unless="${property::exists('debug')}" /> + + <echo message="Building project: '${name}' version ${version} ==> '${assembly.name}'"/> + + <target name="build" depends="init, compile, test" description="compiles the source code"> + </target> + + <target name="init" depends="clean, copy_build_dependencies"> + <mkdir dir="${build.working.dir}/tests" /> + </target> + + <target name="copy_build_dependencies"> + <!-- Copy Antlr3.Runtime.Tests dependencies --> + <copy todir="${build.working.dir}" overwrite="true"> + <fileset basedir="${sharedlibrary.dir}/MbUnit"> + <include name="MbUnit.Framework.dll" /> + <include name="QuickGraph.Algorithms.dll" /> + <include name="QuickGraph.dll" /> + </fileset> + </copy> + <copy todir="${build.working.dir}" overwrite="true"> + <fileset basedir="${sharedlibrary.dir}/StringTemplate.NET/${target.clr}"> + <include name="StringTemplate.dll" /> + <include name="antlr.runtime.dll" /> + </fileset> + </copy> + </target> + + <target name="clean"> + </target> + + <target name="clean.vsnet" description="cleans up VS.NET build artifacts and output"> + <!-- delete VS.NET project artifacts directory --> + <echo message="Deleting VS.NET artifacts directory '${base.dir}/bin'" /> + <delete dir="${base.dir}/bin" failonerror="false" /> + <echo message="Deleting VS.NET artifacts directory '${base.dir}/obj'" /> + <delete dir="${base.dir}/obj" failonerror="false" /> + + <!-- delete VS.NET project artifacts directory for Tests projects--> + <echo message="Deleting VS.NET artifacts directory '${base.dir}/../Antlr3.Runtime.Tests/bin'" /> + <delete dir="${base.dir}/../Antlr3.Runtime.Tests/bin" failonerror="false" /> + <echo message="Deleting VS.NET artifacts directory '${base.dir}/../Antlr3.Runtime.Tests/obj'" /> + <delete dir="${base.dir}/../Antlr3.Runtime.Tests/obj" failonerror="false" /> + </target> + + <target name="test" depends="tests.run" if="${antlr3.runtime.test}"> + </target> + + <target name="tests.run" depends="tests.compile"> + <loadtasks assembly="${sharedlibrary.dir}/MbUnit/MbUnit.Tasks.dll" /> + <mbunit + report-types="Html" + report-filename-format="antlr3-runtime-report-{0}-{1}" + report-output-directory="${build.working.dir}" + halt-on-failure="true" + > + <assemblies> + <include name="${build.working.dir}/${test.assembly.name}" /> + </assemblies> + </mbunit> + </target> + + <target name="compile" depends="init"> + <csc + define="${strong_name};${dotnet_define}" + target="library" + debug="${debug}" + optimize="${optimize}" + output="${build.working.dir}/${assembly.name}" + doc="${build.working.dir}/${name}.xml"> + + <nowarn> + <warning number="1591" /> + <warning number="1572" /> + </nowarn> + + <sources basedir="${src.dir}" defaultexcludes="true"> + <include name="**/*.cs" /> + <exclude name="**/*.Designer.cs" + if="${framework::get-target-framework()=='net-1.1' or framework::get-target-framework()=='mono-1.0'}" + /> + </sources> + + <references> + <!-- <include name="${build.working.dir}/antlr.runtime.dll" /> --> + </references> + </csc> + </target> + + <target name="tests.compile" depends="init"> + <csc + define="${dotnet_define}" + target="exe" + debug="${debug}" + output="${build.working.dir}/${test.assembly.name}"> + + <sources basedir="${test.src.dir}" defaultexcludes="true"> + <include name="**/*.cs" /> + <exclude name="**/*.Designer.cs" + if="${framework::get-target-framework()=='net-1.1' or framework::get-target-framework()=='mono-1.0'}" + /> + </sources> + + <references> + <include name="${build.working.dir}/${assembly.name}" /> + <include name="${build.working.dir}/MbUnit.Framework.dll" /> + <include name="${build.working.dir}/QuickGraph.Algorithms.dll" /> + <include name="${build.working.dir}/QuickGraph.dll" /> + </references> + </csc> + </target> + +</project> diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/Antlr.Utility.Tree/DOTTreeGenerator.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/Antlr.Utility.Tree/DOTTreeGenerator.cs new file mode 100644 index 0000000..b816238 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/Antlr.Utility.Tree/DOTTreeGenerator.cs @@ -0,0 +1,226 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +namespace Antlr.Utility.Tree +{ + using System; + using IDictionary = System.Collections.IDictionary; + using Hashtable = System.Collections.Hashtable; + using StringTemplate = Antlr.StringTemplate.StringTemplate; + using ITree = Antlr.Runtime.Tree.ITree; + using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; + using CommonTreeAdaptor = Antlr.Runtime.Tree.CommonTreeAdaptor; + + /// <summary> + /// A utility class to generate DOT diagrams (graphviz) from + /// arbitrary trees. You can pass in your own templates and + /// can pass in any kind of tree or use Tree interface method. + /// I wanted this separator so that you don't have to include + /// ST just to use the org.antlr.runtime.tree.* package. + /// This is a set of non-static methods so you can subclass + /// to override. For example, here is an invocation: + /// + /// CharStream input = new ANTLRInputStream(Console.In); + /// TLexer lex = new TLexer(input); + /// CommonTokenStream tokens = new CommonTokenStream(lex); + /// TParser parser = new TParser(tokens); + /// TParser.e_return r = parser.e(); + /// Tree t = (Tree)r.tree; + /// Console.Out.WriteLine(t.ToStringTree()); + /// DOTTreeGenerator gen = new DOTTreeGenerator(); + /// StringTemplate st = gen.ToDOT(t); + /// Console.Out.WriteLine(st); + /// + /// </summary> + public class DOTTreeGenerator + { + public static StringTemplate _treeST = new StringTemplate( + "digraph {\n" + + " ordering=out;\n" + + " ranksep=.4;\n" + + " node [shape=plaintext, fixedsize=true, fontsize=11, fontname=\"Courier\",\n" + + " width=.25, height=.25];\n" + + " edge [arrowsize=.5]\n" + + " $nodes$\n" + + " $edges$\n" + + "}\n" + ); + + public static StringTemplate _nodeST = new StringTemplate("$name$ [label=\"$text$\"];\n"); + + public static StringTemplate _edgeST = new StringTemplate("$parent$ -> $child$ // \"$parentText$\" -> \"$childText$\"\n"); + + /// <summary> + /// Track node to number mapping so we can get proper node name back + /// </summary> + IDictionary nodeToNumberMap = new Hashtable(); + + /// <summary> + /// Track node number so we can get unique node names + /// </summary> + int nodeNumber = 0; + + public StringTemplate ToDOT(object tree, ITreeAdaptor adaptor, StringTemplate _treeST, StringTemplate _edgeST) + { + StringTemplate treeST = _treeST.GetInstanceOf(); + nodeNumber = 0; + ToDOTDefineNodes(tree, adaptor, treeST); + nodeNumber = 0; + ToDOTDefineEdges(tree, adaptor, treeST); + /* + if ( adaptor.GetChildCount(tree)==0 ) { + // single node, don't do edge. + treeST.SetAttribute("nodes", adaptor.GetNodeText(tree)); + } + */ + return treeST; + } + + public StringTemplate ToDOT(object tree, ITreeAdaptor adaptor) + { + return ToDOT(tree, adaptor, _treeST, _edgeST); + } + + /// <summary> + /// Generate DOT (graphviz) for a whole tree not just a node. + /// For example, 3+4*5 should generate: + /// + /// digraph { + /// node [shape=plaintext, fixedsize=true, fontsize=11, fontname="Courier", + /// width=.4, height=.2]; + /// edge [arrowsize=.7] + /// "+"->3 + /// "+"->"*" + /// "*"->4 + /// "*"->5 + /// } + /// + /// Return the ST not a string in case people want to alter. + /// + /// Takes a Tree interface object. + /// </summary> + public StringTemplate ToDOT(ITree tree) + { + return ToDOT(tree, new CommonTreeAdaptor()); + } + + protected void ToDOTDefineNodes(object tree, ITreeAdaptor adaptor, StringTemplate treeST) + { + if ( tree == null ) + { + return; + } + int n = adaptor.GetChildCount(tree); + if ( n == 0 ) + { + // must have already dumped as child from previous + // invocation; do nothing + return; + } + + // define parent node + StringTemplate parentNodeST = GetNodeST(adaptor, tree); + treeST.SetAttribute("nodes", parentNodeST); + + // for each child, do a "<unique-name> [label=text]" node def + for (int i = 0; i < n; i++) + { + object child = adaptor.GetChild(tree, i); + StringTemplate nodeST = GetNodeST(adaptor, child); + treeST.SetAttribute("nodes", nodeST); + ToDOTDefineNodes(child, adaptor, treeST); + } + } + + protected void ToDOTDefineEdges(object tree, ITreeAdaptor adaptor, StringTemplate treeST) + { + if ( tree == null ) + { + return; + } + int n = adaptor.GetChildCount(tree); + if ( n == 0 ) + { + // must have already dumped as child from previous + // invocation; do nothing + return; + } + + string parentName = "n" + GetNodeNumber(tree); + + // for each child, do a parent -> child edge using unique node names + string parentText = adaptor.GetNodeText(tree); + for (int i = 0; i < n; i++) + { + object child = adaptor.GetChild(tree, i); + string childText = adaptor.GetNodeText(child); + string childName = "n" + GetNodeNumber(child); + StringTemplate edgeST = _edgeST.GetInstanceOf(); + edgeST.SetAttribute("parent", parentName); + edgeST.SetAttribute("child", childName); + edgeST.SetAttribute("parentText", parentText); + edgeST.SetAttribute("childText", childText); + treeST.SetAttribute("edges", edgeST); + ToDOTDefineEdges(child, adaptor, treeST); + } + } + + protected StringTemplate GetNodeST(ITreeAdaptor adaptor, object t) + { + string text = adaptor.GetNodeText(t); + StringTemplate nodeST = _nodeST.GetInstanceOf(); + string uniqueName = "n" + GetNodeNumber(t); + nodeST.SetAttribute("name", uniqueName); + if (text != null) + text = text.Replace("\"", "\\\\\""); + nodeST.SetAttribute("text", text); + return nodeST; + } + + protected int GetNodeNumber(object t) + { + object boxedInt = nodeToNumberMap[t]; + if ( boxedInt != null ) + { + return (int)boxedInt; + } + else + { + nodeToNumberMap[t] = nodeNumber; + nodeNumber++; + return nodeNumber-1; + } + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/Antlr3.Utility (VS2003).csproj b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/Antlr3.Utility (VS2003).csproj new file mode 100644 index 0000000..d1f3282 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/Antlr3.Utility (VS2003).csproj @@ -0,0 +1,100 @@ +<VisualStudioProject> + <CSHARP + ProjectType = "Local" + ProductVersion = "7.10.3077" + SchemaVersion = "2.0" + ProjectGuid = "{B8845D7E-8201-4904-87E7-85508F58B2F0}" + > + <Build> + <Settings + ApplicationIcon = "" + AssemblyKeyContainerName = "" + AssemblyName = "Antlr3.Utility" + AssemblyOriginatorKeyFile = "" + DefaultClientScript = "JScript" + DefaultHTMLPageLayout = "Grid" + DefaultTargetSchema = "IE50" + DelaySign = "false" + OutputType = "Library" + PreBuildEvent = "" + PostBuildEvent = "" + RootNamespace = "Antlr3.Utility" + RunPostBuildEvent = "OnBuildSuccess" + StartupObject = "" + > + <Config + Name = "Debug" + AllowUnsafeBlocks = "false" + BaseAddress = "285212672" + CheckForOverflowUnderflow = "false" + ConfigurationOverrideFile = "" + DefineConstants = "DEBUG;TRACE;STRONG_NAME;DOTNET1" + DocumentationFile = "" + DebugSymbols = "true" + FileAlignment = "4096" + IncrementalBuild = "false" + NoStdLib = "false" + NoWarn = "" + Optimize = "false" + OutputPath = "bin\Debug\net-1.1\" + RegisterForComInterop = "false" + RemoveIntegerChecks = "false" + TreatWarningsAsErrors = "false" + WarningLevel = "4" + /> + <Config + Name = "Release" + AllowUnsafeBlocks = "false" + BaseAddress = "285212672" + CheckForOverflowUnderflow = "false" + ConfigurationOverrideFile = "" + DefineConstants = "TRACE;STRONG_NAME;DOTNET1" + DocumentationFile = "" + DebugSymbols = "false" + FileAlignment = "4096" + IncrementalBuild = "false" + NoStdLib = "false" + NoWarn = "" + Optimize = "true" + OutputPath = "bin\Release\net-1.1\" + RegisterForComInterop = "false" + RemoveIntegerChecks = "false" + TreatWarningsAsErrors = "false" + WarningLevel = "4" + /> + </Settings> + <References> + <Reference + Name = "System" + AssemblyName = "System" + HintPath = "..\..\..\..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.dll" + /> + <Reference + Name = "StringTemplate" + AssemblyName = "StringTemplate" + HintPath = "..\..\Libraries\StringTemplate.NET\net-1.1\StringTemplate.dll" + /> + <Reference + Name = "Antlr3.Runtime (VS2003)" + Project = "{38F943D7-937F-4911-9882-24955F6AD0CC}" + Package = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}" + /> + </References> + </Build> + <Files> + <Include> + <File + RelPath = "AssemblyInfo.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File + RelPath = "Antlr.Utility.Tree\DOTTreeGenerator.cs" + SubType = "Code" + BuildAction = "Compile" + /> + </Include> + </Files> + </CSHARP> +</VisualStudioProject> + diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/Antlr3.Utility (VS2005).csproj b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/Antlr3.Utility (VS2005).csproj new file mode 100644 index 0000000..9f75322 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/Antlr3.Utility (VS2005).csproj @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>8.0.50727</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{BEB27DCC-ABFB-4951-B618-2B639EC65A46}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>Antlr.Utility</RootNamespace> + <AssemblyName>Antlr3.Utility</AssemblyName> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\net-2.0\</OutputPath> + <DefineConstants>TRACE;DEBUG;STRONG_NAME;DOTNET2</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + <OutputType>Library</OutputType> + <RootNamespace>Antlr.Utility</RootNamespace> + <CheckForOverflowUnderflow>true</CheckForOverflowUnderflow> + <EnvironmentVariables> + <EnvironmentVariables /> + </EnvironmentVariables> + <GenerateDocumentation>true</GenerateDocumentation> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\net-2.0\</OutputPath> + <DefineConstants>TRACE;STRONG_NAME;DOTNET2</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + <DocumentationFile>bin\Release\net-2.0\Antlr3.Utility.XML</DocumentationFile> + <OutputType>Library</OutputType> + <DebugSymbols>true</DebugSymbols> + <RootNamespace>Antlr.Utility</RootNamespace> + <CheckForOverflowUnderflow>true</CheckForOverflowUnderflow> + </PropertyGroup> + <ItemGroup> + <Compile Include="Antlr.Utility.Tree\DOTTreeGenerator.cs" /> + <Compile Include="AssemblyInfo.cs" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\Antlr3.Runtime\Antlr3.Runtime (VS2005).csproj"> + <Project>{CF15D0D5-BE72-4F98-B70F-229ABA1DF0E8}</Project> + <Name>Antlr3.Runtime (VS2005)</Name> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <Reference Include="StringTemplate, Version=3.0.1.6846, Culture=neutral, PublicKeyToken=beee492b52c41e85"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\..\Libraries\StringTemplate.NET\net-2.0\StringTemplate.dll</HintPath> + </Reference> + </ItemGroup> + <ItemGroup> + <Folder Include="Properties/" /> + </ItemGroup> + <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project> \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/AssemblyInfo.cs b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/AssemblyInfo.cs new file mode 100644 index 0000000..eb59831 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/AssemblyInfo.cs @@ -0,0 +1,108 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +using System.Reflection; +using System.Runtime.CompilerServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +// TODO: Review the values of the assembly attributes + +[assembly: AssemblyTitle("ANTLR3 Utilities for .NET")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("Copyright (c) 2005-2007 Kunle Odutola")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Revision +// Build Number +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("0.1.0.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\<configuration>. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\..\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// + +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyKeyName("")] + +#if STRONG_NAME +// This strongly suggests that the build is a VS.NET build. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("../../../Antlr3_KeyPair.snk")] +#elif NANT_STRONGNAME +// This strongly suggests that the build is a NANT build. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("../Antlr3_KeyPair.snk")] +#else +// This should never happen as the assembly should always be strong named. +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +#endif + + diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/default.build b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/default.build new file mode 100644 index 0000000..537900a --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3.Utility/default.build @@ -0,0 +1,78 @@ +<?xml version="1.0"?> +<project name="ANTLR C# Runtime Utility Library" default="build"> + <tstamp/> + <property name="base.dir" value="${path::get-full-path( project::get-base-directory() )}" /> + + <include buildfile="../../antlr3.runtime.net.common.inc" /> + + <property name="version" value="0.1" /> + + <property name="name" value="Antlr3.Utility" /> + <property name="assembly.name" value="${name}.dll" /> + <property name="src.dir" value="${base.dir}/" /> + + <property name="debug" value="true" unless="${property::exists('debug')}" /> + + <echo message="Building project: '${name}' version ${version} ==> '${assembly.name}'"/> + + <target name="release" depends="clean" description="build non-debug version"> + <!-- build a clean release distribution for release --> + <property name="debug" value="false"/> + <echo message="Debug = ${debug}"/> + <call target="build"/> + </target> + + <target name="build" depends="init, compile" description="compiles the source code"> + </target> + + <target name="init" depends="clean"> + </target> + + <target name="clean"> + </target> + + <target name="clean.vsnet" description="cleans up VS.NET build artifacts and output"> + <!-- delete VS.NET project artifacts directory --> + <echo message="Deleting VS.NET artifacts directory '${base.dir}/bin'" /> + <delete dir="${base.dir}/bin" failonerror="false" /> + <echo message="Deleting VS.NET artifacts directory '${base.dir}/obj'" /> + <delete dir="${base.dir}/obj" failonerror="false" /> + </target> + + <target name="compile" depends="init"> + <csc + define="${strong_name};${dotnet_define}" + target="library" + debug="${debug}" + optimize="${optimize}" + output="${build.working.dir}/${assembly.name}" + doc="${build.working.dir}/${name}.xml"> + + <nowarn> + <warning number="1591" /> + <warning number="1572" /> + </nowarn> + + <resources prefix="Antlr.Utility" dynamicprefix="true"> + <include name="**/*.resx" /> + </resources> + + <sources basedir="${src.dir}" defaultexcludes="true"> + <include name="**/*.cs" /> + </sources> + + <references> + <include name="${build.working.dir}/Antlr3.Runtime.dll" /> + <include name="${build.working.dir}/StringTemplate.dll" /> + <include name="${build.working.dir}/antlr.runtime.dll" /> + </references> + </csc> + </target> + + <target name="docs"> + </target> + + <target name="dist" depends="docs"> + </target> + +</project> diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3_KeyPair.snk b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3_KeyPair.snk new file mode 100644 index 0000000000000000000000000000000000000000..52a67cf62c3f7b233efe8a2a27d5ba77c09dc6ca GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa500979+QsGf#h9!xc)7%#!JvWly<I-A7+6<J zqtOUwL6^u>v){}1vE9~RnDqsFGW5Qh?9pr`kh{0+s*2zp4G?pyGRZ^iaffRh<_#-N z%d_?=g0UNYLle}cbW&H$m-zF)$0KZ1)j*b6^YAr(VQIX4eSi#+;tx^r>{m@&G;p^Y z06L$y%<)5aFKZWsKjCd(!9MpLTtPgkBW?`Ce?f(WFw)eG<bu)v8HltfP|KU{+arZt zzroZbr6cR}pQYyKW`7;`JI)VqlunIcZ|%e*KC`{wxh&r#^$^*X!y>&BLdW0>X8F$0 zFy@@sqQVMWWX5b%kt;OdpozstBAUz5rWM&*fQLY0A5i)>5+{?3nB2>9FV>;(=8$b$ zc>BLRG?<DxCiQBHJY4oG00Q|az>1|?%w(SypW()lvhc{EpM$C)Bf(nl7cfL{{035j zyJc4OLOnQB67|Boh6?$|V@bo(BrM;xBG)?T(#zf)u?Q|^g8}mSe-)3DP|$qdWEFgB z-L^#o4!bkX4vaDG7^V?$Z?&Sg!u*6Q_NeyOejX!W6%gUsf9<upq6NeeX^d1%P37** z**=6x0o;VyK2RHjH_oggx9MFcy9*tE$H-xTS_{NOi{LdI%2$7zg!)ms(&DOI1v!M& zT}l(@<u5CjofFS&N8|Q)9V3j06u&$zWeKlNj4c$gurUe@IOUikj&x@{^Mi>!m=AoN iexXIb;Kkyg{mZmj-oAl5lk^DvbMWY;bb8(cwGU|f_bI3V literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/CSharp/Sources/Antlr3_PublicKey.snk b/antlr-3.1.3/runtime/CSharp/Sources/Antlr3_PublicKey.snk new file mode 100644 index 0000000000000000000000000000000000000000..dee0c49966ae76cc4dfeec81f5fc1efe78d11097 GIT binary patch literal 160 zcmV;R0AK$ABme*efB*oL000060ssI2Bme+XQ$aBR1ONa500979+QsGf#h9!xc)7%# z!JvWly<I-A7+6<JqtOUwL6^u>v){}1vE9~RnDqsFGW5Qh?9pr`kh{0+s*2zp4G?py zGRZ^iaffRh<_#-N%d_?=g0UNYLle}cbW&H$m-zF)$0KZ1)j*b6^YAr(VQIX4eSi#+ O;tx^r>{m@&G;p`E0Z0e{ literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/CSharp/all.antlr3.runtime.net.build b/antlr-3.1.3/runtime/CSharp/all.antlr3.runtime.net.build new file mode 100644 index 0000000..67720b8 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/all.antlr3.runtime.net.build @@ -0,0 +1,329 @@ +<?xml version="1.0" encoding='iso-8859-1' ?> +<project name="all" default="usage"> + + <property name="base.dir" value="${path::get-full-path( project::get-base-directory() )}" /> + <property name="sharedlibrary.dir" value="${base.dir}/Libraries" /> + <property name="tools.dir" value="${base.dir}/Tools" /> + <property name="tempdir" value="tempdir" /> + + <property name="version" value="3.1b1" /> + + <include buildfile="antlr3.runtime.net.common.inc" /> + + <!-- =================================================================== --> + <!-- Help on usage --> + <!-- =================================================================== --> + + <target name="usage"> + <echo message="ANTLR v3 C# Runtime - Nant Build file"/> + <echo message="-------------------------------------------------------------"/> + <echo message=""/> + <echo message="available targets are:"/> + <echo message=""/> + <echo message=" build - build debug or release version in '${base.dir}/build/${framework::get-target-framework()}'"/> + <echo message=" (use -Ddebug=true or -Ddebug=false )"/> + <echo message=""/> + <echo message=" release - build release version in '${base.dir}/build/${framework::get-target-framework()}'"/> + <echo message=""/> + <echo message=" dist - build src/bin/docs distro in '${base.dir}'"/> + <echo message=" (uses **pre-built** binaries.)"/> + <echo message=""/> + <echo message=" cleanall - delete all the Nant and VS.NET build artifacts"/> + <echo message=" clean - delete all the Nant build artifacts only"/> + <echo message=""/> + <echo message=" usage - show this message (default)"/> + <echo message=""/> + <echo message="-------------------------------------------------------------"/> + </target> + + <target name="build" + depends="clean, init, build.v3.runtime, build.v3.utility, copytobuilddir" + description="Build debug or release version ( -Ddebug=true|false )" + /> + + <target name="release" depends="clean" description="Builds release (i.e. non-debug) version"> + <!-- build a clean release distribution for release --> + <property name="debug" value="false"/> + <call target="build"/> + </target> + + <target name="cleanall" depends="clean" description="Cleans all the Nant and VS.NET build artifacts"> + <nant buildfile="Sources/Antlr3.Runtime/default.build" target="clean.vsnet" inheritall="true" /> + <nant buildfile="Sources/Antlr3.Utility/default.build" target="clean.vsnet" inheritall="true" /> + </target> + + <target name="dist" + depends="releaseDocs, zipsource, zip11, zip20, zipdoc" + description="Creates src/bin/docs distros (uses pre-built binaries)" + /> + + + <target name="clean" description="Cleans Nant build artifacts"> + <delete dir="${build.working.dir}" failonerror="false" /> + <delete dir="${build.dest.dir}" failonerror="false" /> + <!-- <delete dir="${doc.dir}" failonerror="false" /> --> + </target> + + <target name="init"> + <mkdir dir="${build.working.dir}" /> + <mkdir dir="${build.dest.dir}" /> + <call target="copy_build_dependencies" /> + </target> + + <target name="copy_build_dependencies"> + <copy todir="${build.dest.dir}"> + <fileset basedir="${sharedlibrary.dir}/MbUnit"> + <include name="MbUnit.Framework.dll" /> + <include name="QuickGraph.Algorithms.dll" /> + <include name="QuickGraph.dll" /> + </fileset> + </copy> + <copy todir="${build.dest.dir}"> + <fileset basedir="${sharedlibrary.dir}/StringTemplate.NET/${target.clr}"> + <include name="StringTemplate.dll" /> + <include name="antlr.runtime.dll" /> + </fileset> + </copy> + </target> + + <target name="build.v3.runtime" depends="init"> + <nant buildfile="Sources/Antlr3.Runtime/default.build" target="build" inheritall="true" /> + </target> + + <target name="build.v3.utility" depends="init"> + <nant buildfile="Sources/Antlr3.Utility/default.build" target="build" inheritall="true" /> + </target> + + <target name="copytobuilddir"> + <copy todir="${build.dest.dir}"> + <fileset basedir="${build.working.dir}"> + <include name="Antlr3.Runtime.dll" /> + <include name="Antlr3.Runtime.xml" /> + <include name="Antlr3.Utility.dll" /> + <include name="Antlr3.Utility.xml" /> + <include name="StringTemplate.dll" /> + <include name="antlr.runtime.dll" /> + + <include name="Antlr3.Runtime.pdb" /> + <include name="Antlr3.Utility.pdb" /> + <include name="StringTemplate.pdb" /> + <include name="antlr.runtime.pdb" /> + </fileset> + </copy> + </target> + + <target name="zip11"> + <zip zipfile="${base.dir}/Antlr3.C#.Runtime.v${version}.net-1.1.zip"> + <fileset basedir="${base.dir}/build"> + <include name="net-1.1/Antlr3.Runtime.dll" /> + <include name="net-1.1/Antlr3.Utility.dll" /> + <include name="net-1.1/StringTemplate.dll" /> + <include name="net-1.1/antlr.runtime.dll" /> + </fileset> + <fileset basedir="${base.dir}"> + <include name="README.TXT" /> + <include name="LICENSE.TXT" /> + <include name="NOTICE.TXT" /> + <include name="CHANGES.TXT" /> + </fileset> + <fileset basedir="${base.dir}/docs"> + <include name="Antlr3.Runtime.chm" /> + <include name="Antlr3.Utility.chm" /> + </fileset> + </zip> + </target> + + <target name="zip20"> + <zip zipfile="${base.dir}/Antlr3.C#.Runtime.v${version}.net-2.0.zip"> + <fileset basedir="${base.dir}/build"> + <include name="net-2.0/Antlr3.Runtime.dll" /> + <include name="net-2.0/Antlr3.Utility.dll" /> + <include name="net-2.0/StringTemplate.dll" /> + <include name="net-2.0/antlr.runtime.dll" /> + </fileset> + <fileset basedir="${base.dir}"> + <include name="README.TXT" /> + <include name="LICENSE.TXT" /> + <include name="NOTICE.TXT" /> + <include name="CHANGES.TXT" /> + </fileset> + <fileset basedir="${base.dir}/docs"> + <include name="Antlr3.Runtime.chm" /> + <include name="Antlr3.Utility.chm" /> + </fileset> + </zip> + </target> + + <target name="zipdoc"> + <zip zipfile="${base.dir}/Antlr3.C#.Runtime.v${version}.api-doc.zip"> + <fileset basedir="${base.dir}/docs"> + <include name="Antlr3.Runtime.chm" /> + <include name="Antlr3.Utility.chm" /> + </fileset> + </zip> + </target> + + <target name="zipsource"> + <zip zipfile="${base.dir}/Antlr3.C#.Runtime.v${version}.src.zip"> + <fileset basedir="${base.dir}"> + <include name="**/*.build" /> + <include name="**/*.xml" /> + <include name="**/*.inc" /> + <include name="**/*.sln" /> + <include name="**/*.cs" /> + <include name="**/*.csproj" /> + <include name="**/*.resx" /> + <include name="**/*.ico" /> + <include name="**/*.html" /> + <include name="**/*.jpg" /> + <include name="**/*.pdf" /> + + <include name="${sharedlibrary.dir}/**/*.dll" /> + + <include name="${tools.dir}/**/*.dll" /> + <include name="${tools.dir}/**/*.exe" /> + + <include name="README.TXT" /> + <include name="LICENSE.TXT" /> + <include name="NOTICE.TXT" /> + <include name="CHANGES.TXT" /> + + <exclude name="*.snk" /> + <exclude name="**/obj/Debug/*.*" /> + <exclude name="**/obj/Debug/net-1.1/*.*" /> + <exclude name="**/obj/Debug/net-2.0/*.*" /> + <exclude name="**/bin/Debug/*.*" /> + <exclude name="**/bin/Debug/net-1.1/*.*" /> + <exclude name="**/bin/Debug/net-2.0/*.*" /> + <exclude name="**/bin/*.*" /> + <exclude name="bin/**/*.*" /> + <exclude name="build/**/*.*" /> + <exclude name="**/*.user" /> + <exclude name="**/*.resharperoptions" /> + <exclude name="**/*.obj" /> + <exclude name="**/*.pch" /> + <exclude name="**/*.pdb" /> + <exclude name="**/*.idb" /> + <exclude name="**/*.log*" /> + <exclude name="**/*.suo" /> + <exclude name="**/*.bak" /> + <exclude name="**/*.new" /> + <exclude name="**/*.original" /> + </fileset> + </zip> + </target> + + <!-- Documentation generation. --> + <property name="base.dir" value="." /> + <property name="doc.dir" value="${base.dir}/docs" /> + <property name="tempBin.dir" value="${doc.dir}/bin"/> + <property name="outputDocs.file" value="Antlr3.Runtime"/> + + <!-- Docs generation properties. --> + <property name="ShowMissing" value="false"/> + <property name="ShowPrivate" value="false"/> + <property name="OutputTarget" value="HTMLHelp"/> + +<!-- + description: + Generates documentation with default properties. +--> + <target name="releaseDocs" depends="clean.docs"> + <call target="copyFilesToDocument"/> + <call target="generateReleaseDocs"/> + </target> + +<!-- + description: + Generates documentation for developers, with all missing information indicated and private members visible. +--> + <target name="devDocs" depends="clean.docs"> + <property name="ShowMissing" value="true"/> + <property name="ShowPrivate" value="true"/> + <property name="outputDocs.file" value="Antlr3.Runtime.Dev"/> + <call target="copyFilesToDocument"/> + <call target="generateReleaseDocs"/> + </target> + +<!-- + description: + Generates documentation for release. +--> + <target name="generateReleaseDocs"> + <ndoc failonerror="true"> + <assemblies basedir="${tempBin.dir}"> + <include name="Antlr3.Runtime.dll"/> + <include name="Antlr3.Utility.dll"/> + </assemblies> + <referencepaths> + <include name="Libraries/StringTemplate.NET/${framework::get-target-framework()}"/> + </referencepaths> + <documenters> + <documenter name="MSDN"> + <property name="OutputTarget" value="${OutputTarget}" /> + <property name="Preliminary" value="true" /> + <property name="BinaryTOC" value="true" /> + <property name="CleanIntermediates" value="true" /> + <property name="SdkLinksOnWeb" value="true" /> + + <property name="OutputDirectory" value="${doc.dir}" /> + <property name="HtmlHelpName" value="${outputDocs.file}" /> + <property name="IncludeFavorites" value="True" /> + <property name="SplitTOCs" value="False" /> + + <property name="Title" value="ANTLR v3 C# Runtime Library API documentation" /> + <property name="DefaulTOC" value="Antlr.Runtime" /> + + <property name="ShowVisualBasic" value="True" /> + <property name="ShowMissingSummaries" value="${ShowMissing}" /> + <property name="ShowMissingRemarks" value="${ShowMissing}" /> + <property name="ShowMissingParams" value="${ShowMissing}" /> + <property name="ShowMissingReturns" value="${ShowMissing}" /> + <property name="ShowMissingValues" value="${ShowMissing}" /> + <property name="DocumentEmptyNamespaces" value="${ShowMissing}" /> + + <property name="AutoPropertyBackerSummaries" value="true" /> + <property name="AutoDocumentConstructors" value="true" /> + <property name="DocumentProtected" value="True" /> + <property name="DocumentInternals" value="${ShowPrivate}" /> + <property name="DocumentPrivates" value="${ShowPrivate}" /> + + <property name="IncludeAssemblyVersion" value="True" /> + <property name="CopyrightText" value="Copyright 2005-2007 - Kunle Odutola" /> + <property name="CopyrightHref" value="http://www.antlr.org" /> + </documenter> + </documenters> + </ndoc> + </target> + +<!-- + description: + Copies all files to be documented to a single location to speed up the documentation process. +--> + <target name="copyFilesToDocument"> + <copy todir="${tempBin.dir}" flatten="true"> + <fileset basedir="build/${target.clr}"> + <include name="Antlr3.Runtime.dll"/> + <include name="Antlr3.Runtime.xml"/> + <include name="Antlr3.Utility.dll"/> + <include name="Antlr3.Utility.xml"/> + </fileset> + </copy> + </target> + +<!-- + description: + Cleans up prior to documentation generation. +--> + <target name="clean.docs"> + <delete> + <fileset> +<!-- + <include name="${doc.dir}/**"/> +--> + <exclude name="**/*.chm"/> + </fileset> + </delete> + </target> + +</project> diff --git a/antlr-3.1.3/runtime/CSharp/antlr3.runtime.net.common.inc b/antlr-3.1.3/runtime/CSharp/antlr3.runtime.net.common.inc new file mode 100644 index 0000000..fc718ac --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/antlr3.runtime.net.common.inc @@ -0,0 +1,62 @@ +<?xml version="1.0"?> +<project name="Common Build Properties"> + + <!-- Common properties that allow overrides --> + + <property name="rootbuild.dir" value="${directory::get-current-directory()}" /> + + <property name="build.dest.dir" value="${rootbuild.dir}/build/${framework::get-target-framework()}" /> + <property name="build.working.dir" value="${rootbuild.dir}/bin" /> + + <property name="strong_name" value="NANT_STRONGNAME" unless="${property::exists('strong_name')}" /> + <property name="debug" value="false" unless="${property::exists('debug')}" /> + <property name="optimize" value="true" unless="${property::exists('optimize')}" /> + <property name="doc.dir" value="${base.dir}/docs" /> + <property name="nunit.formatter" value="Plain" unless="${property::exists('nunit.formatter')}" /> + <property name="os" value="${operating-system::to-string(environment::get-operating-system())}" /> + <property name="isWindows" value="${string::starts-with(os, 'Microsoft Windows')}" /> + <property name="isMono" value="${string::starts-with(framework::get-target-framework(),'mono')}" /> + <property name="target.clr" value="${framework::get-target-framework()}" /> + + <if test="${framework::get-target-framework()=='netcf-1.0'}"> + <fail message=".NET-CF is not supported. Please use the .NET Framework or Mono." /> + </if> + + <if test="${framework::get-target-framework()=='net-1.1' or framework::get-target-framework()=='mono-1.0'}"> + <property name="dotnet_define" value="DOTNET1" /> + </if> + <if test="${not (framework::get-target-framework()=='net-1.1') and not (framework::get-target-framework()=='mono-1.0')}"> + <property name="dotnet_define" value="DOTNET2" /> + </if> + + + <!-- find out where nunit.framework.dll is --> + + <property name="lib.dir" + value="${path::combine(nant::get-base-directory(), 'lib')}" + dynamic="true" /> + + <property name="lib.family.dir" + value="${path::combine(lib.dir,framework::get-family(framework::get-target-framework()))}" + dynamic="true" /> + + <!-- for nant 0.85 rc2 or higher --> + + <property name="lib.framework.dir" + value="${path::combine(lib.family.dir, version::to-string(framework::get-version(framework::get-target-framework())))}" + dynamic="true" /> + + <!-- Uncomment this block for nant backward compatibility + <property name="lib.framework.dir" + value="${path::combine(lib.family.dir, framework::get-version(framework::get-target-framework()))}" + dynamic="true" /> + --> + + <property name="nunit.framework.dll" + value="${path::combine(lib.framework.dir, 'nunit.framework.dll')}" /> + + <property name="nant.tasks.nunit2" + value="False" + unless="${property::exists('nant.tasks.nunit2')}" /> + +</project> diff --git a/antlr-3.1.3/runtime/CSharp/dist/DOT-NET-runtime-3.1.3.zip b/antlr-3.1.3/runtime/CSharp/dist/DOT-NET-runtime-3.1.3.zip new file mode 100644 index 0000000000000000000000000000000000000000..200991c2914926e87467420e2bc8dd03f0fa1491 GIT binary patch literal 219401 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%0D*qwd+_MW(WiJ#K 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 V{eX~=9xgI9{<VfLSHS4-_AedGz$X9z literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/CSharp/doxyfile b/antlr-3.1.3/runtime/CSharp/doxyfile new file mode 100644 index 0000000..680316f --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp/doxyfile @@ -0,0 +1,264 @@ +# Doxyfile 1.5.2 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = "ANTLR API" +PROJECT_NUMBER = 3.1.2 +OUTPUT_DIRECTORY = api +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = YES +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = /Applications/ +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = YES +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = NO +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = NO +GENERATE_BUGLIST = NO +GENERATE_DEPRECATEDLIST= NO +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = /Users/parrt/antlr/code/antlr/main/runtime/CSharp/Sources +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.d \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.py +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = java::util \ + java::io +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = . +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = NO +MSCGEN_PATH = /Applications/Doxygen.app/Contents/Resources/ +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = YES +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = /Applications/Doxygen.app/Contents/Resources/ +DOTFILE_DIRS = +DOT_GRAPH_MAX_NODES = 50 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Antlr3.Runtime.Debug.csproj b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Antlr3.Runtime.Debug.csproj new file mode 100644 index 0000000..8bfee73 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Antlr3.Runtime.Debug.csproj @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>9.0.30729</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{5EE27A90-B023-42C9-AAF1-52B0424C5D0B}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>Antlr.Runtime.Debug</RootNamespace> + <AssemblyName>Antlr3.Runtime.Debug</AssemblyName> + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + <SccProjectName>SAK</SccProjectName> + <SccLocalPath>SAK</SccLocalPath> + <SccAuxPath>SAK</SccAuxPath> + <SccProvider>SAK</SccProvider> + <SignAssembly>true</SignAssembly> + <AssemblyOriginatorKeyFile>Key.snk</AssemblyOriginatorKeyFile> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="System" /> + <Reference Include="System.Core"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + </ItemGroup> + <ItemGroup> + <Compile Include="BlankDebugEventListener.cs" /> + <Compile Include="DebugEventHub.cs" /> + <Compile Include="DebugEventRepeater.cs" /> + <Compile Include="DebugEventSocketProxy.cs" /> + <Compile Include="DebugParser.cs" /> + <Compile Include="DebugTokenStream.cs" /> + <Compile Include="DebugTreeAdaptor.cs" /> + <Compile Include="DebugTreeNodeStream.cs" /> + <Compile Include="DebugTreeParser.cs" /> + <Compile Include="JavaExtensions\DictionaryExtensions.cs" /> + <Compile Include="JavaExtensions\EnumeratorExtensions.cs" /> + <Compile Include="JavaExtensions\ExceptionExtensions.cs" /> + <Compile Include="JavaExtensions\IOExtensions.cs" /> + <Compile Include="JavaExtensions\Iterator.cs" /> + <Compile Include="JavaExtensions\JSystem.cs" /> + <Compile Include="JavaExtensions\ListExtensions.cs" /> + <Compile Include="JavaExtensions\ObjectExtensions.cs" /> + <Compile Include="JavaExtensions\SetExtensions.cs" /> + <Compile Include="JavaExtensions\StackExtensions.cs" /> + <Compile Include="JavaExtensions\StringBuilderExtensions.cs" /> + <Compile Include="JavaExtensions\StringExtensions.cs" /> + <Compile Include="JavaExtensions\StringTokenizer.cs" /> + <Compile Include="JavaExtensions\SubList.cs" /> + <Compile Include="JavaExtensions\TreeExtensions.cs" /> + <Compile Include="JavaExtensions\TypeExtensions.cs" /> + <Compile Include="Misc\Stats.cs" /> + <None Include="ParserDebugger.cs" /> + <Compile Include="ParseTreeBuilder.cs" /> + <Compile Include="Profiler.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="RemoteDebugEventSocketListener.cs" /> + <Compile Include="TraceDebugEventListener.cs" /> + <Compile Include="Tracer.cs" /> + </ItemGroup> + <ItemGroup> + <None Include="Key.snk" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\Antlr3.Runtime\Antlr3.Runtime.csproj"> + <Project>{8FDC0A87-9005-4D5A-AB75-E55CEB575559}</Project> + <Name>Antlr3.Runtime</Name> + </ProjectReference> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project> \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Antlr3.Runtime.Debug.csproj.vspscc b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Antlr3.Runtime.Debug.csproj.vspscc new file mode 100644 index 0000000..b6d3289 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Antlr3.Runtime.Debug.csproj.vspscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/BlankDebugEventListener.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/BlankDebugEventListener.cs new file mode 100644 index 0000000..b018386 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/BlankDebugEventListener.cs @@ -0,0 +1,166 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Debug +{ + + /** <summary> + * A blank listener that does nothing; useful for real classes so + * they don't have to have lots of blank methods and are less + * sensitive to updates to debug interface. + * </summary> + */ + public class BlankDebugEventListener : IDebugEventListener + { + public int RuleLevel + { + get; + protected set; + } + + public virtual void Initialize() + { + } + + public virtual void EnterRule( string grammarFileName, string ruleName ) + { + if ( RuleLevel == 0 ) + Commence(); + RuleLevel++; + } + public virtual void ExitRule( string grammarFileName, string ruleName ) + { + RuleLevel--; + if ( RuleLevel == 0 ) + Terminate(); + } + public virtual void EnterAlt( int alt ) + { + } + public virtual void EnterSubRule( int decisionNumber ) + { + } + public virtual void ExitSubRule( int decisionNumber ) + { + } + public virtual void EnterDecision( int decisionNumber ) + { + } + public virtual void ExitDecision( int decisionNumber ) + { + } + public virtual void Location( int line, int pos ) + { + } + public virtual void ConsumeToken( IToken token ) + { + } + public virtual void ConsumeHiddenToken( IToken token ) + { + } + public virtual void LT( int i, IToken t ) + { + } + public virtual void Mark( int i ) + { + } + public virtual void Rewind( int i ) + { + } + public virtual void Rewind() + { + } + public virtual void BeginBacktrack( int level ) + { + } + public virtual void EndBacktrack( int level, bool successful ) + { + } + public virtual void RecognitionException( RecognitionException e ) + { + } + public virtual void BeginResync() + { + } + public virtual void EndResync() + { + } + public virtual void SemanticPredicate( bool result, string predicate ) + { + } + public virtual void Commence() + { + } + public virtual void Terminate() + { + } + + #region Tree parsing stuff + + public virtual void ConsumeNode( object t ) + { + } + public virtual void LT( int i, object t ) + { + } + + #endregion + + + #region AST Stuff + + public virtual void NilNode( object t ) + { + } + public virtual void ErrorNode( object t ) + { + } + public virtual void CreateNode( object t ) + { + } + public virtual void CreateNode( object node, IToken token ) + { + } + public virtual void BecomeRoot( object newRoot, object oldRoot ) + { + } + public virtual void AddChild( object root, object child ) + { + } + public virtual void SetTokenBoundaries( object t, int tokenStartIndex, int tokenStopIndex ) + { + } + + #endregion + } +} + diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventHub.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventHub.cs new file mode 100644 index 0000000..f8649c3 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventHub.cs @@ -0,0 +1,366 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Debug +{ + using System.Collections.Generic; + + /** <summary> + * Broadcast debug events to multiple listeners. Lets you debug and still + * use the event mechanism to build parse trees etc... Not thread-safe. + * Don't add events in one thread while parser fires events in another. + * </summary> + * + * <seealso cref="DebugEventRepeater"/> + */ + public class DebugEventHub : IDebugEventListener + { + protected IList<IDebugEventListener> _listeners = new List<IDebugEventListener>(); + + public DebugEventHub( params IDebugEventListener[] listeners ) + { + _listeners = new List<IDebugEventListener>( listeners ); + } + + public virtual void Initialize() + { + } + + /** <summary> + * Add another listener to broadcast events too. Not thread-safe. + * Don't add events in one thread while parser fires events in another. + * </summary> + */ + public virtual void AddListener( IDebugEventListener listener ) + { + _listeners.Add( listener ); + } + + /* To avoid a mess like this: + public void enterRule(final String ruleName) { + broadcast(new Code(){ + public void exec(DebugEventListener listener) {listener.enterRule(ruleName);}} + ); + } + I am dup'ing the for-loop in each. Where are Java closures!? blech! + */ + + public virtual void EnterRule( string grammarFileName, string ruleName ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.EnterRule( grammarFileName, ruleName ); + } + } + + public virtual void ExitRule( string grammarFileName, string ruleName ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.ExitRule( grammarFileName, ruleName ); + } + } + + public virtual void EnterAlt( int alt ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.EnterAlt( alt ); + } + } + + public virtual void EnterSubRule( int decisionNumber ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.EnterSubRule( decisionNumber ); + } + } + + public virtual void ExitSubRule( int decisionNumber ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.ExitSubRule( decisionNumber ); + } + } + + public virtual void EnterDecision( int decisionNumber ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.EnterDecision( decisionNumber ); + } + } + + public virtual void ExitDecision( int decisionNumber ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.ExitDecision( decisionNumber ); + } + } + + public virtual void Location( int line, int pos ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.Location( line, pos ); + } + } + + public virtual void ConsumeToken( IToken token ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.ConsumeToken( token ); + } + } + + public virtual void ConsumeHiddenToken( IToken token ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.ConsumeHiddenToken( token ); + } + } + + public virtual void LT( int index, IToken t ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.LT( index, t ); + } + } + + public virtual void Mark( int index ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.Mark( index ); + } + } + + public virtual void Rewind( int index ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.Rewind( index ); + } + } + + public virtual void Rewind() + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.Rewind(); + } + } + + public virtual void BeginBacktrack( int level ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.BeginBacktrack( level ); + } + } + + public virtual void EndBacktrack( int level, bool successful ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.EndBacktrack( level, successful ); + } + } + + public virtual void RecognitionException( RecognitionException e ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.RecognitionException( e ); + } + } + + public virtual void BeginResync() + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.BeginResync(); + } + } + + public virtual void EndResync() + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.EndResync(); + } + } + + public virtual void SemanticPredicate( bool result, string predicate ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.SemanticPredicate( result, predicate ); + } + } + + public virtual void Commence() + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.Commence(); + } + } + + public virtual void Terminate() + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.Terminate(); + } + } + + + #region Tree parsing stuff + + public virtual void ConsumeNode( object t ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.ConsumeNode( t ); + } + } + + public virtual void LT( int index, object t ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.LT( index, t ); + } + } + + #endregion + + + #region AST Stuff + + public virtual void NilNode( object t ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.NilNode( t ); + } + } + + public virtual void ErrorNode( object t ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.ErrorNode( t ); + } + } + + public virtual void CreateNode( object t ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.CreateNode( t ); + } + } + + public virtual void CreateNode( object node, IToken token ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.CreateNode( node, token ); + } + } + + public virtual void BecomeRoot( object newRoot, object oldRoot ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.BecomeRoot( newRoot, oldRoot ); + } + } + + public virtual void AddChild( object root, object child ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.AddChild( root, child ); + } + } + + public virtual void SetTokenBoundaries( object t, int tokenStartIndex, int tokenStopIndex ) + { + for ( int i = 0; i < _listeners.Count; i++ ) + { + IDebugEventListener listener = _listeners[i]; + listener.SetTokenBoundaries( t, tokenStartIndex, tokenStopIndex ); + } + } + + #endregion + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventRepeater.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventRepeater.cs new file mode 100644 index 0000000..2b9430e --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventRepeater.cs @@ -0,0 +1,196 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Debug +{ + + /** <summary> + * A simple event repeater (proxy) that delegates all functionality to the + * listener sent into the ctor. Useful if you want to listen in on a few + * debug events w/o interrupting the debugger. Just subclass the repeater + * and override the methods you want to listen in on. Remember to call + * the method in this class so the event will continue on to the original + * recipient. + * </summary> + * + * <seealso cref="DebugEventHub"/> + */ + public class DebugEventRepeater : IDebugEventListener + { + protected IDebugEventListener _listener; + + public DebugEventRepeater( IDebugEventListener listener ) + { + _listener = listener; + } + + public virtual void Initialize() + { + } + + public virtual void EnterRule( string grammarFileName, string ruleName ) + { + _listener.EnterRule( grammarFileName, ruleName ); + } + public virtual void ExitRule( string grammarFileName, string ruleName ) + { + _listener.ExitRule( grammarFileName, ruleName ); + } + public virtual void EnterAlt( int alt ) + { + _listener.EnterAlt( alt ); + } + public virtual void EnterSubRule( int decisionNumber ) + { + _listener.EnterSubRule( decisionNumber ); + } + public virtual void ExitSubRule( int decisionNumber ) + { + _listener.ExitSubRule( decisionNumber ); + } + public virtual void EnterDecision( int decisionNumber ) + { + _listener.EnterDecision( decisionNumber ); + } + public virtual void ExitDecision( int decisionNumber ) + { + _listener.ExitDecision( decisionNumber ); + } + public virtual void Location( int line, int pos ) + { + _listener.Location( line, pos ); + } + public virtual void ConsumeToken( IToken token ) + { + _listener.ConsumeToken( token ); + } + public virtual void ConsumeHiddenToken( IToken token ) + { + _listener.ConsumeHiddenToken( token ); + } + public virtual void LT( int i, IToken t ) + { + _listener.LT( i, t ); + } + public virtual void Mark( int i ) + { + _listener.Mark( i ); + } + public virtual void Rewind( int i ) + { + _listener.Rewind( i ); + } + public virtual void Rewind() + { + _listener.Rewind(); + } + public virtual void BeginBacktrack( int level ) + { + _listener.BeginBacktrack( level ); + } + public virtual void EndBacktrack( int level, bool successful ) + { + _listener.EndBacktrack( level, successful ); + } + public virtual void RecognitionException( RecognitionException e ) + { + _listener.RecognitionException( e ); + } + public virtual void BeginResync() + { + _listener.BeginResync(); + } + public virtual void EndResync() + { + _listener.EndResync(); + } + public virtual void SemanticPredicate( bool result, string predicate ) + { + _listener.SemanticPredicate( result, predicate ); + } + public virtual void Commence() + { + _listener.Commence(); + } + public virtual void Terminate() + { + _listener.Terminate(); + } + + #region Tree parsing stuff + + public virtual void ConsumeNode( object t ) + { + _listener.ConsumeNode( t ); + } + public virtual void LT( int i, object t ) + { + _listener.LT( i, t ); + } + + #endregion + + + #region AST Stuff + + public virtual void NilNode( object t ) + { + _listener.NilNode( t ); + } + public virtual void ErrorNode( object t ) + { + _listener.ErrorNode( t ); + } + public virtual void CreateNode( object t ) + { + _listener.CreateNode( t ); + } + public virtual void CreateNode( object node, IToken token ) + { + _listener.CreateNode( node, token ); + } + public virtual void BecomeRoot( object newRoot, object oldRoot ) + { + _listener.BecomeRoot( newRoot, oldRoot ); + } + public virtual void AddChild( object root, object child ) + { + _listener.AddChild( root, child ); + } + public virtual void SetTokenBoundaries( object t, int tokenStartIndex, int tokenStopIndex ) + { + _listener.SetTokenBoundaries( t, tokenStartIndex, tokenStopIndex ); + } + + #endregion + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventSocketProxy.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventSocketProxy.cs new file mode 100644 index 0000000..5ac1199 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugEventSocketProxy.cs @@ -0,0 +1,445 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Debug +{ + using System; + using Antlr.Runtime.JavaExtensions; + + using IOException = System.IO.IOException; + using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; + using Socket = System.Net.Sockets.Socket; + using StringBuilder = System.Text.StringBuilder; + using TcpListener = System.Net.Sockets.TcpListener; + + /** <summary> + * A proxy debug event listener that forwards events over a socket to + * a debugger (or any other listener) using a simple text-based protocol; + * one event per line. ANTLRWorks listens on server socket with a + * RemoteDebugEventSocketListener instance. These two objects must therefore + * be kept in sync. New events must be handled on both sides of socket. + * </summary> + */ + public class DebugEventSocketProxy : BlankDebugEventListener + { + public const int DEFAULT_DEBUGGER_PORT = 49100; + protected int port = DEFAULT_DEBUGGER_PORT; + protected TcpListener serverSocket; + protected Socket socket; + protected string grammarFileName; + //protected PrintWriter @out; + //protected BufferedReader @in; + + /** <summary>Who am i debugging?</summary> */ + protected BaseRecognizer recognizer; + + /** <summary> + * Almost certainly the recognizer will have adaptor set, but + * we don't know how to cast it (Parser or TreeParser) to get + * the adaptor field. Must be set with a constructor. :( + * </summary> + */ + protected ITreeAdaptor adaptor; + + public DebugEventSocketProxy( BaseRecognizer recognizer, ITreeAdaptor adaptor ) : + this( recognizer, DEFAULT_DEBUGGER_PORT, adaptor ) + { + } + + public DebugEventSocketProxy( BaseRecognizer recognizer, int port, ITreeAdaptor adaptor ) + { + this.grammarFileName = recognizer.GrammarFileName; + this.adaptor = adaptor; + this.port = port; + } + + #region Properties + public virtual ITreeAdaptor TreeAdaptor + { + get + { + return adaptor; + } + set + { + adaptor = value; + } + } + #endregion + + public virtual void Handshake() + { + if ( serverSocket == null ) + { + System.Net.IPHostEntry hostInfo = System.Net.Dns.GetHostEntry( "localhost" ); + System.Net.IPAddress ipAddress = hostInfo.AddressList[0]; + serverSocket = new TcpListener( ipAddress, port ); + socket = serverSocket.AcceptSocket(); + socket.NoDelay = true; + + System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); + socket.Send( encoding.GetBytes( "ANTLR " + DebugEventListenerConstants.ProtocolVersion + "\n" ) ); + socket.Send( encoding.GetBytes( "grammar \"" + grammarFileName + "\n" ) ); + Ack(); + + //serverSocket = new ServerSocket( port ); + //socket = serverSocket.accept(); + //socket.setTcpNoDelay( true ); + //OutputStream os = socket.getOutputStream(); + //OutputStreamWriter osw = new OutputStreamWriter( os, "UTF8" ); + //@out = new PrintWriter( new BufferedWriter( osw ) ); + //InputStream @is = socket.getInputStream(); + //InputStreamReader isr = new InputStreamReader( @is, "UTF8" ); + //@in = new BufferedReader( isr ); + //@out.println( "ANTLR " + DebugEventListenerConstants.PROTOCOL_VERSION ); + //@out.println( "grammar \"" + grammarFileName ); + //@out.flush(); + //ack(); + } + } + + public override void Commence() + { + // don't bother sending event; listener will trigger upon connection + } + + public override void Terminate() + { + Transmit( "terminate" ); + //@out.close(); + try + { + socket.Close(); + } + catch ( IOException ioe ) + { + ioe.PrintStackTrace( Console.Error ); + } + } + + protected virtual void Ack() + { + try + { + throw new NotImplementedException(); + //@in.readLine(); + } + catch ( IOException ioe ) + { + ioe.PrintStackTrace( Console.Error ); + } + } + + protected virtual void Transmit( string @event ) + { + socket.Send( new System.Text.UTF8Encoding().GetBytes( @event + "\n" ) ); + //@out.println( @event ); + //@out.flush(); + Ack(); + } + + public override void EnterRule( string grammarFileName, string ruleName ) + { + Transmit( "enterRule\t" + grammarFileName + "\t" + ruleName ); + } + + public override void EnterAlt( int alt ) + { + Transmit( "enterAlt\t" + alt ); + } + + public override void ExitRule( string grammarFileName, string ruleName ) + { + Transmit( "exitRule\t" + grammarFileName + "\t" + ruleName ); + } + + public override void EnterSubRule( int decisionNumber ) + { + Transmit( "enterSubRule\t" + decisionNumber ); + } + + public override void ExitSubRule( int decisionNumber ) + { + Transmit( "exitSubRule\t" + decisionNumber ); + } + + public override void EnterDecision( int decisionNumber ) + { + Transmit( "enterDecision\t" + decisionNumber ); + } + + public override void ExitDecision( int decisionNumber ) + { + Transmit( "exitDecision\t" + decisionNumber ); + } + + public override void ConsumeToken( IToken t ) + { + string buf = SerializeToken( t ); + Transmit( "consumeToken\t" + buf ); + } + + public override void ConsumeHiddenToken( IToken t ) + { + string buf = SerializeToken( t ); + Transmit( "consumeHiddenToken\t" + buf ); + } + + public override void LT( int i, IToken t ) + { + if ( t != null ) + Transmit( "LT\t" + i + "\t" + SerializeToken( t ) ); + } + + public override void Mark( int i ) + { + Transmit( "mark\t" + i ); + } + + public override void Rewind( int i ) + { + Transmit( "rewind\t" + i ); + } + + public override void Rewind() + { + Transmit( "rewind" ); + } + + public override void BeginBacktrack( int level ) + { + Transmit( "beginBacktrack\t" + level ); + } + + public override void EndBacktrack( int level, bool successful ) + { + Transmit( "endBacktrack\t" + level + "\t" + ( successful ? DebugEventListenerConstants.True : DebugEventListenerConstants.False ) ); + } + + public override void Location( int line, int pos ) + { + Transmit( "location\t" + line + "\t" + pos ); + } + + public override void RecognitionException( RecognitionException e ) + { + StringBuilder buf = new StringBuilder( 50 ); + buf.Append( "exception\t" ); + buf.Append( e.GetType().Name ); + // dump only the data common to all exceptions for now + buf.Append( "\t" ); + buf.Append( e.index ); + buf.Append( "\t" ); + buf.Append( e.line ); + buf.Append( "\t" ); + buf.Append( e.charPositionInLine ); + Transmit( buf.ToString() ); + } + + public override void BeginResync() + { + Transmit( "beginResync" ); + } + + public override void EndResync() + { + Transmit( "endResync" ); + } + + public override void SemanticPredicate( bool result, string predicate ) + { + StringBuilder buf = new StringBuilder( 50 ); + buf.Append( "semanticPredicate\t" ); + buf.Append( result ); + SerializeText( buf, predicate ); + Transmit( buf.ToString() ); + } + + #region AST Parsing Events + + public override void ConsumeNode( object t ) + { + StringBuilder buf = new StringBuilder( 50 ); + buf.Append( "consumeNode" ); + SerializeNode( buf, t ); + Transmit( buf.ToString() ); + } + + public override void LT( int i, object t ) + { + int ID = adaptor.GetUniqueID( t ); + string text = adaptor.GetText( t ); + int type = adaptor.GetType( t ); + StringBuilder buf = new StringBuilder( 50 ); + buf.Append( "LN\t" ); // lookahead node; distinguish from LT in protocol + buf.Append( i ); + SerializeNode( buf, t ); + Transmit( buf.ToString() ); + } + + protected virtual void SerializeNode( StringBuilder buf, object t ) + { + int ID = adaptor.GetUniqueID( t ); + string text = adaptor.GetText( t ); + int type = adaptor.GetType( t ); + buf.Append( "\t" ); + buf.Append( ID ); + buf.Append( "\t" ); + buf.Append( type ); + IToken token = adaptor.GetToken( t ); + int line = -1; + int pos = -1; + if ( token != null ) + { + line = token.Line; + pos = token.CharPositionInLine; + } + buf.Append( "\t" ); + buf.Append( line ); + buf.Append( "\t" ); + buf.Append( pos ); + int tokenIndex = adaptor.GetTokenStartIndex( t ); + buf.Append( "\t" ); + buf.Append( tokenIndex ); + SerializeText( buf, text ); + } + + #endregion + + + #region AST Events + + public override void NilNode( object t ) + { + int ID = adaptor.GetUniqueID( t ); + Transmit( "nilNode\t" + ID ); + } + + public override void ErrorNode( object t ) + { + int ID = adaptor.GetUniqueID( t ); + string text = t.ToString(); + StringBuilder buf = new StringBuilder( 50 ); + buf.Append( "errorNode\t" ); + buf.Append( ID ); + buf.Append( "\t" ); + buf.Append( TokenConstants.INVALID_TOKEN_TYPE ); + SerializeText( buf, text ); + Transmit( buf.ToString() ); + } + + public override void CreateNode( object t ) + { + int ID = adaptor.GetUniqueID( t ); + string text = adaptor.GetText( t ); + int type = adaptor.GetType( t ); + StringBuilder buf = new StringBuilder( 50 ); + buf.Append( "createNodeFromTokenElements\t" ); + buf.Append( ID ); + buf.Append( "\t" ); + buf.Append( type ); + SerializeText( buf, text ); + Transmit( buf.ToString() ); + } + + public override void CreateNode( object node, IToken token ) + { + int ID = adaptor.GetUniqueID( node ); + int tokenIndex = token.TokenIndex; + Transmit( "createNode\t" + ID + "\t" + tokenIndex ); + } + + public override void BecomeRoot( object newRoot, object oldRoot ) + { + int newRootID = adaptor.GetUniqueID( newRoot ); + int oldRootID = adaptor.GetUniqueID( oldRoot ); + Transmit( "becomeRoot\t" + newRootID + "\t" + oldRootID ); + } + + public override void AddChild( object root, object child ) + { + int rootID = adaptor.GetUniqueID( root ); + int childID = adaptor.GetUniqueID( child ); + Transmit( "addChild\t" + rootID + "\t" + childID ); + } + + public override void SetTokenBoundaries( object t, int tokenStartIndex, int tokenStopIndex ) + { + int ID = adaptor.GetUniqueID( t ); + Transmit( "setTokenBoundaries\t" + ID + "\t" + tokenStartIndex + "\t" + tokenStopIndex ); + } + + #endregion + + + #region Support + + protected virtual string SerializeToken( IToken t ) + { + StringBuilder buf = new StringBuilder( 50 ); + buf.Append( t.TokenIndex ); + buf.Append( '\t' ); + buf.Append( t.Type ); + buf.Append( '\t' ); + buf.Append( t.Channel ); + buf.Append( '\t' ); + buf.Append( t.Line ); + buf.Append( '\t' ); + buf.Append( t.CharPositionInLine ); + SerializeText( buf, t.Text ); + return buf.ToString(); + } + + protected virtual void SerializeText( StringBuilder buf, string text ) + { + buf.Append( "\t\"" ); + if ( text == null ) + { + text = ""; + } + // escape \n and \r all text for token appears to exist on one line + // this escape is slow but easy to understand + text = EscapeNewlines( text ); + buf.Append( text ); + } + + protected virtual string EscapeNewlines( string txt ) + { + txt = txt.replaceAll( "%", "%25" ); // escape all escape char ;) + txt = txt.replaceAll( "\n", "%0A" ); // escape \n + txt = txt.replaceAll( "\r", "%0D" ); // escape \r + return txt; + } + + #endregion + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugParser.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugParser.cs new file mode 100644 index 0000000..3e80f57 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugParser.cs @@ -0,0 +1,127 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Debug +{ + using Antlr.Runtime.JavaExtensions; + + using Console = System.Console; + using IOException = System.IO.IOException; + + public class DebugParser : Parser + { + /** <summary>Who to notify when events in the parser occur.</summary> */ + public IDebugEventListener dbg = null; + + /** <summary> + * Used to differentiate between fixed lookahead and cyclic DFA decisions + * while profiling. + * </summary> + */ + public bool isCyclicDecision = false; + + /** <summary> + * Create a normal parser except wrap the token stream in a debug + * proxy that fires consume events. + * </summary> + */ + public DebugParser( ITokenStream input, IDebugEventListener dbg, RecognizerSharedState state ) + : base( input is DebugTokenStream ? input : new DebugTokenStream( input, dbg ), state ) + { + DebugListener = dbg; + } + + public DebugParser( ITokenStream input, RecognizerSharedState state ) + : base( input is DebugTokenStream ? input : new DebugTokenStream( input, null ), state ) + { + } + + public DebugParser( ITokenStream input, IDebugEventListener dbg ) + : this( input is DebugTokenStream ? input : new DebugTokenStream( input, dbg ), dbg, null ) + { + } + + /** <summary> + * Provide a new debug event listener for this parser. Notify the + * input stream too that it should send events to this listener. + * </summary> + */ + public virtual IDebugEventListener DebugListener + { + get + { + return dbg; + } + set + { + DebugTokenStream debugTokenStream = input as DebugTokenStream; + if ( debugTokenStream != null ) + debugTokenStream.DebugListener = value; + + dbg = value; + } + } + + public virtual void ReportError( IOException e ) + { + Console.Error.WriteLine( e ); + e.PrintStackTrace( Console.Error ); + } + + public override void BeginResync() + { + dbg.BeginResync(); + base.BeginResync(); + } + + public override void EndResync() + { + dbg.EndResync(); + base.EndResync(); + } + + public virtual void BeginBacktrack( int level ) + { + dbg.BeginBacktrack( level ); + } + + public virtual void EndBacktrack( int level, bool successful ) + { + dbg.EndBacktrack( level, successful ); + } + + public override void ReportError( RecognitionException e ) + { + dbg.RecognitionException( e ); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTokenStream.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTokenStream.cs new file mode 100644 index 0000000..aaaacf1 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTokenStream.cs @@ -0,0 +1,204 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Debug +{ + + public class DebugTokenStream : ITokenStream + { + protected IDebugEventListener dbg; + public ITokenStream input; + protected bool initialStreamState = true; + + /** <summary>Track the last mark() call result value for use in rewind().</summary> */ + protected int lastMarker; + + public DebugTokenStream( ITokenStream input, IDebugEventListener dbg ) + { + this.input = input; + DebugListener = dbg; + // force TokenStream to get at least first valid token + // so we know if there are any hidden tokens first in the stream + input.LT( 1 ); + } + + #region Properties + public virtual int Index + { + get + { + return input.Index; + } + } + public virtual IDebugEventListener DebugListener + { + get + { + return dbg; + } + set + { + dbg = value; + } + } + #endregion + + [System.Obsolete] + public void SetDebugListener( IDebugEventListener dbg ) + { + DebugListener = dbg; + } + + public virtual void Consume() + { + if ( initialStreamState ) + { + ConsumeInitialHiddenTokens(); + } + int a = input.Index; + IToken t = input.LT( 1 ); + input.Consume(); + int b = input.Index; + dbg.ConsumeToken( t ); + if ( b > a + 1 ) + { + // then we consumed more than one token; must be off channel tokens + for ( int i = a + 1; i < b; i++ ) + { + dbg.ConsumeHiddenToken( input.Get( i ) ); + } + } + } + + /** <summary>Consume all initial off-channel tokens</summary> */ + protected virtual void ConsumeInitialHiddenTokens() + { + int firstOnChannelTokenIndex = input.Index; + for ( int i = 0; i < firstOnChannelTokenIndex; i++ ) + { + dbg.ConsumeHiddenToken( input.Get( i ) ); + } + initialStreamState = false; + } + + public virtual IToken LT( int i ) + { + if ( initialStreamState ) + { + ConsumeInitialHiddenTokens(); + } + dbg.LT( i, input.LT( i ) ); + return input.LT( i ); + } + + public virtual int LA( int i ) + { + if ( initialStreamState ) + { + ConsumeInitialHiddenTokens(); + } + dbg.LT( i, input.LT( i ) ); + return input.LA( i ); + } + + public virtual IToken Get( int i ) + { + return input.Get( i ); + } + + public virtual int Mark() + { + lastMarker = input.Mark(); + dbg.Mark( lastMarker ); + return lastMarker; + } + + public virtual void Rewind( int marker ) + { + dbg.Rewind( marker ); + input.Rewind( marker ); + } + + public virtual void Rewind() + { + dbg.Rewind(); + input.Rewind( lastMarker ); + } + + public virtual void Release( int marker ) + { + } + + public virtual void Seek( int index ) + { + // TODO: implement seek in dbg interface + // db.seek(index); + input.Seek( index ); + } + + public virtual int Size() + { + return input.Size(); + } + + public virtual ITokenSource TokenSource + { + get + { + return input.TokenSource; + } + } + + public virtual string SourceName + { + get + { + return TokenSource.SourceName; + } + } + + public override string ToString() + { + return input.ToString(); + } + + public virtual string ToString( int start, int stop ) + { + return input.ToString( start, stop ); + } + + public virtual string ToString( IToken start, IToken stop ) + { + return input.ToString( start, stop ); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeAdaptor.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeAdaptor.cs new file mode 100644 index 0000000..25d9aad --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeAdaptor.cs @@ -0,0 +1,301 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Debug +{ + using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; + + /** <summary> + * A TreeAdaptor proxy that fires debugging events to a DebugEventListener + * delegate and uses the TreeAdaptor delegate to do the actual work. All + * AST events are triggered by this adaptor; no code gen changes are needed + * in generated rules. Debugging events are triggered *after* invoking + * tree adaptor routines. + * </summary> + * + * <remarks> + * Trees created with actions in rewrite actions like "-> ^(ADD {foo} {bar})" + * cannot be tracked as they might not use the adaptor to create foo, bar. + * The debug listener has to deal with tree node IDs for which it did + * not see a createNode event. A single <unknown> node is sufficient even + * if it represents a whole tree. + * </remarks> + */ + public class DebugTreeAdaptor : ITreeAdaptor + { + protected IDebugEventListener dbg; + protected ITreeAdaptor adaptor; + + public DebugTreeAdaptor( IDebugEventListener dbg, ITreeAdaptor adaptor ) + { + this.dbg = dbg; + this.adaptor = adaptor; + } + + public virtual object Create( IToken payload ) + { + if ( payload.TokenIndex < 0 ) + { + // could be token conjured up during error recovery + return Create( payload.Type, payload.Text ); + } + object node = adaptor.Create( payload ); + dbg.CreateNode( node, payload ); + return node; + } + + public virtual object ErrorNode( ITokenStream input, IToken start, IToken stop, + RecognitionException e ) + { + object node = adaptor.ErrorNode( input, start, stop, e ); + if ( node != null ) + { + dbg.ErrorNode( node ); + } + return node; + } + + public virtual object DupTree( object tree ) + { + object t = adaptor.DupTree( tree ); + // walk the tree and emit create and add child events + // to simulate what dupTree has done. dupTree does not call this debug + // adapter so I must simulate. + SimulateTreeConstruction( t ); + return t; + } + + /** <summary>^(A B C): emit create A, create B, add child, ...</summary> */ + protected virtual void SimulateTreeConstruction( object t ) + { + dbg.CreateNode( t ); + int n = adaptor.GetChildCount( t ); + for ( int i = 0; i < n; i++ ) + { + object child = adaptor.GetChild( t, i ); + SimulateTreeConstruction( child ); + dbg.AddChild( t, child ); + } + } + + public virtual object DupNode( object treeNode ) + { + object d = adaptor.DupNode( treeNode ); + dbg.CreateNode( d ); + return d; + } + + public virtual object Nil() + { + object node = adaptor.Nil(); + dbg.NilNode( node ); + return node; + } + + public virtual bool IsNil( object tree ) + { + return adaptor.IsNil( tree ); + } + + public virtual void AddChild( object t, object child ) + { + if ( t == null || child == null ) + { + return; + } + adaptor.AddChild( t, child ); + dbg.AddChild( t, child ); + } + + public virtual object BecomeRoot( object newRoot, object oldRoot ) + { + object n = adaptor.BecomeRoot( newRoot, oldRoot ); + dbg.BecomeRoot( newRoot, oldRoot ); + return n; + } + + public virtual object RulePostProcessing( object root ) + { + return adaptor.RulePostProcessing( root ); + } + + public virtual void AddChild( object t, IToken child ) + { + object n = this.Create( child ); + this.AddChild( t, n ); + } + + public virtual object BecomeRoot( IToken newRoot, object oldRoot ) + { + object n = this.Create( newRoot ); + adaptor.BecomeRoot( n, oldRoot ); + dbg.BecomeRoot( newRoot, oldRoot ); + return n; + } + + public virtual object Create( int tokenType, IToken fromToken ) + { + object node = adaptor.Create( tokenType, fromToken ); + dbg.CreateNode( node ); + return node; + } + + public virtual object Create( int tokenType, IToken fromToken, string text ) + { + object node = adaptor.Create( tokenType, fromToken, text ); + dbg.CreateNode( node ); + return node; + } + + public virtual object Create( int tokenType, string text ) + { + object node = adaptor.Create( tokenType, text ); + dbg.CreateNode( node ); + return node; + } + + public virtual int GetType( object t ) + { + return adaptor.GetType( t ); + } + + public virtual void SetType( object t, int type ) + { + adaptor.SetType( t, type ); + } + + public virtual string GetText( object t ) + { + return adaptor.GetText( t ); + } + + public virtual void SetText( object t, string text ) + { + adaptor.SetText( t, text ); + } + + public virtual IToken GetToken( object t ) + { + return adaptor.GetToken( t ); + } + + public virtual void SetTokenBoundaries( object t, IToken startToken, IToken stopToken ) + { + adaptor.SetTokenBoundaries( t, startToken, stopToken ); + if ( t != null && startToken != null && stopToken != null ) + { + dbg.SetTokenBoundaries( + t, startToken.TokenIndex, + stopToken.TokenIndex ); + } + } + + public virtual int GetTokenStartIndex( object t ) + { + return adaptor.GetTokenStartIndex( t ); + } + + public virtual int GetTokenStopIndex( object t ) + { + return adaptor.GetTokenStopIndex( t ); + } + + public virtual object GetChild( object t, int i ) + { + return adaptor.GetChild( t, i ); + } + + public virtual void SetChild( object t, int i, object child ) + { + adaptor.SetChild( t, i, child ); + } + + public virtual object DeleteChild( object t, int i ) + { + return DeleteChild( t, i ); + } + + public virtual int GetChildCount( object t ) + { + return adaptor.GetChildCount( t ); + } + + public virtual int GetUniqueID( object node ) + { + return adaptor.GetUniqueID( node ); + } + + public virtual object GetParent( object t ) + { + return adaptor.GetParent( t ); + } + + public virtual int GetChildIndex( object t ) + { + return adaptor.GetChildIndex( t ); + } + + public virtual void SetParent( object t, object parent ) + { + adaptor.SetParent( t, parent ); + } + + public virtual void SetChildIndex( object t, int index ) + { + adaptor.SetChildIndex( t, index ); + } + + public virtual void ReplaceChildren( object parent, int startChildIndex, int stopChildIndex, object t ) + { + adaptor.ReplaceChildren( parent, startChildIndex, stopChildIndex, t ); + } + + #region support + + public virtual IDebugEventListener GetDebugListener() + { + return dbg; + } + + public virtual void SetDebugListener( IDebugEventListener dbg ) + { + this.dbg = dbg; + } + + public virtual ITreeAdaptor GetTreeAdaptor() + { + return adaptor; + } + + #endregion + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeNodeStream.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeNodeStream.cs new file mode 100644 index 0000000..3ac9c7a --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeNodeStream.cs @@ -0,0 +1,237 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Debug +{ + using Obsolete = System.ObsoleteAttribute; + using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; + using ITreeNodeStream = Antlr.Runtime.Tree.ITreeNodeStream; + + /** <summary> + * Debug any tree node stream. The constructor accepts the stream + * and a debug listener. As node stream calls come in, debug events + * are triggered. + * </summary> + */ + public class DebugTreeNodeStream : ITreeNodeStream + { + protected IDebugEventListener dbg; + protected ITreeAdaptor adaptor; + protected ITreeNodeStream input; + protected bool initialStreamState = true; + + /** <summary>Track the last mark() call result value for use in rewind().</summary> */ + protected int lastMarker; + + public DebugTreeNodeStream( ITreeNodeStream input, + IDebugEventListener dbg ) + { + this.input = input; + this.adaptor = input.TreeAdaptor; + this.input.UniqueNavigationNodes = true; + DebugListener = dbg; + } + + #region Properties + public virtual IDebugEventListener DebugListener + { + get + { + return dbg; + } + set + { + dbg = value; + } + } + public virtual int Index + { + get + { + return input.Index; + } + } + public virtual ITokenStream TokenStream + { + get + { + return input.TokenStream; + } + } + public virtual ITreeAdaptor TreeAdaptor + { + get + { + return adaptor; + } + } + public virtual object TreeSource + { + get + { + return input; + } + } + /** <summary> + * It is normally this object that instructs the node stream to + * create unique nav nodes, but to satisfy interface, we have to + * define it. It might be better to ignore the parameter but + * there might be a use for it later, so I'll leave. + * </summary> + */ + public bool UniqueNavigationNodes + { + get + { + return input.UniqueNavigationNodes; + } + set + { + input.UniqueNavigationNodes = value; + } + } + + #endregion + + [Obsolete] + public void SetDebugListener( IDebugEventListener dbg ) + { + DebugListener = dbg; + } + + [Obsolete] + public ITreeAdaptor GetTreeAdaptor() + { + return TreeAdaptor; + } + + public virtual void Consume() + { + object node = input.LT( 1 ); + input.Consume(); + dbg.ConsumeNode( node ); + } + + public virtual object this[int i] + { + get + { + return input[i]; + } + } + + public virtual object LT( int i ) + { + object node = input.LT( i ); + int ID = adaptor.GetUniqueID( node ); + string text = adaptor.GetText( node ); + int type = adaptor.GetType( node ); + dbg.LT( i, node ); + return node; + } + + public virtual int LA( int i ) + { + object node = input.LT( i ); + int ID = adaptor.GetUniqueID( node ); + string text = adaptor.GetText( node ); + int type = adaptor.GetType( node ); + dbg.LT( i, node ); + return type; + } + + public virtual int Mark() + { + lastMarker = input.Mark(); + dbg.Mark( lastMarker ); + return lastMarker; + } + + public virtual void Rewind( int marker ) + { + dbg.Rewind( marker ); + input.Rewind( marker ); + } + + public virtual void Rewind() + { + dbg.Rewind(); + input.Rewind( lastMarker ); + } + + public virtual void Release( int marker ) + { + } + + public virtual void Seek( int index ) + { + // TODO: implement seek in dbg interface + // db.seek(index); + input.Seek( index ); + } + + public virtual int Size() + { + return input.Size(); + } + + [Obsolete] + public object GetTreeSource() + { + return TreeSource; + } + + public virtual string SourceName + { + get + { + return TokenStream.SourceName; + } + } + + [Obsolete] + public ITokenStream GetTokenStream() + { + return TokenStream; + } + + public virtual void ReplaceChildren( object parent, int startChildIndex, int stopChildIndex, object t ) + { + input.ReplaceChildren( parent, startChildIndex, stopChildIndex, t ); + } + + public virtual string ToString( object start, object stop ) + { + return input.ToString( start, stop ); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeParser.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeParser.cs new file mode 100644 index 0000000..21e5b9b --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/DebugTreeParser.cs @@ -0,0 +1,136 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Debug +{ + using Antlr.Runtime.JavaExtensions; + + using Console = System.Console; + using IOException = System.IO.IOException; + using ITreeNodeStream = Antlr.Runtime.Tree.ITreeNodeStream; + using TreeParser = Antlr.Runtime.Tree.TreeParser; + + public class DebugTreeParser : TreeParser + { + /** <summary>Who to notify when events in the parser occur.</summary> */ + public IDebugEventListener dbg = null; + + /** <summary> + * Used to differentiate between fixed lookahead and cyclic DFA decisions + * while profiling. + * </summary> + */ + public bool isCyclicDecision = false; + + /** <summary> + * Create a normal parser except wrap the token stream in a debug + * proxy that fires consume events. + * </summary> + */ + public DebugTreeParser( ITreeNodeStream input, IDebugEventListener dbg, RecognizerSharedState state ) + : base( input is DebugTreeNodeStream ? input : new DebugTreeNodeStream( input, dbg ), state ) + { + DebugListener = dbg; + } + + public DebugTreeParser( ITreeNodeStream input, RecognizerSharedState state ) + : base( input is DebugTreeNodeStream ? input : new DebugTreeNodeStream( input, null ), state ) + { + } + + public DebugTreeParser( ITreeNodeStream input, IDebugEventListener dbg ) + : this( input is DebugTreeNodeStream ? input : new DebugTreeNodeStream( input, dbg ), dbg, null ) + { + } + + /** <summary> + * Provide a new debug event listener for this parser. Notify the + * input stream too that it should send events to this listener. + * </summary> + */ + public virtual IDebugEventListener DebugListener + { + get + { + return dbg; + } + set + { + if ( input is DebugTreeNodeStream ) + ( (DebugTreeNodeStream)input ).DebugListener = value; + + this.dbg = value; + } + } + + public virtual void ReportError( IOException e ) + { + Console.Error.WriteLine( e ); + e.PrintStackTrace( Console.Error ); + } + + public override void ReportError( RecognitionException e ) + { + dbg.RecognitionException( e ); + } + + protected override object GetMissingSymbol( IIntStream input, + RecognitionException e, + int expectedTokenType, + BitSet follow ) + { + object o = base.GetMissingSymbol( input, e, expectedTokenType, follow ); + dbg.ConsumeNode( o ); + return o; + } + + public override void BeginResync() + { + dbg.BeginResync(); + } + + public override void EndResync() + { + dbg.EndResync(); + } + + public virtual void BeginBacktrack( int level ) + { + dbg.BeginBacktrack( level ); + } + + public virtual void EndBacktrack( int level, bool successful ) + { + dbg.EndBacktrack( level, successful ); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/DictionaryExtensions.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/DictionaryExtensions.cs new file mode 100644 index 0000000..dbd63e6 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/DictionaryExtensions.cs @@ -0,0 +1,141 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +#if DEBUG +using System.Linq; +#endif + +using IDictionary = System.Collections.IDictionary; + +namespace Antlr.Runtime.JavaExtensions +{ + public static class DictionaryExtensions + { +#if DEBUG + [Obsolete] + public static bool containsKey( this IDictionary map, object key ) + { + return map.Contains( key ); + } + + [Obsolete] + public static object get( this IDictionary map, object key ) + { + return map[key]; + } +#endif + + public static TValue get<TKey, TValue>( this IDictionary<TKey, TValue> map, TKey key ) + { + TValue value; + if ( map.TryGetValue( key, out value ) ) + return value; + + if ( typeof( TValue ).IsValueType ) + throw new KeyNotFoundException(); + + return default( TValue ); + } + + // disambiguates + public static TValue get<TKey, TValue>( this Dictionary<TKey, TValue> map, TKey key ) + { + TValue value; + if ( map.TryGetValue( key, out value ) ) + return value; + + if ( typeof( TValue ).IsValueType ) + throw new KeyNotFoundException(); + + return default( TValue ); + } + + public static TValue get<TKey, TValue>( this SortedList<TKey, TValue> map, TKey key ) + { + TValue value; + if ( map.TryGetValue( key, out value ) ) + return value; + + if ( typeof( TValue ).IsValueType ) + throw new KeyNotFoundException(); + + return default( TValue ); + } + +#if DEBUG + [Obsolete] + public static void put( this IDictionary map, object key, object value ) + { + map[key] = value; + } + + [Obsolete] + public static void put<TKey, TValue>( this IDictionary<TKey, TValue> map, TKey key, TValue value ) + { + map[key] = value; + } + + [Obsolete] + public static void put<TKey, TValue>( this Dictionary<TKey, TValue> map, TKey key, TValue value ) + { + map[key] = value; + } + + [Obsolete] + public static HashSet<object> keySet( this IDictionary map ) + { + return new HashSet<object>( map.Keys.Cast<object>() ); + } + + [Obsolete] + public static HashSet<TKey> keySet<TKey, TValue>( this IDictionary<TKey, TValue> map ) + { + return new HashSet<TKey>( map.Keys ); + } + + // disambiguates for Dictionary, which implements both IDictionary<T,K> and IDictionary + [Obsolete] + public static HashSet<TKey> keySet<TKey, TValue>( this Dictionary<TKey, TValue> map ) + { + return new HashSet<TKey>( map.Keys ); + } + + [Obsolete] + public static HashSet<object> keySet<TKey, TValue>( this SortedList<TKey, TValue> map ) + { + return new HashSet<object>( map.Keys.Cast<object>() ); + } +#endif + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/EnumeratorExtensions.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/EnumeratorExtensions.cs new file mode 100644 index 0000000..74c77d3 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/EnumeratorExtensions.cs @@ -0,0 +1,44 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using IEnumerable = System.Collections.IEnumerable; + +namespace Antlr.Runtime.JavaExtensions +{ + public static class EnumeratorExtensions + { + public static Iterator iterator( this IEnumerable enumerable ) + { + return new Iterator( enumerable ); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/ExceptionExtensions.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/ExceptionExtensions.cs new file mode 100644 index 0000000..016a693 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/ExceptionExtensions.cs @@ -0,0 +1,99 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Diagnostics; +using System.Linq; + +using TargetInvocationException = System.Reflection.TargetInvocationException; + +namespace Antlr.Runtime.JavaExtensions +{ + public static class ExceptionExtensions + { +#if DEBUG + [Obsolete] + public static string getMessage( this Exception e ) + { + return e.Message; + } +#endif + + public static StackFrame[] getStackTrace( this Exception e ) + { + StackTrace trace = new StackTrace( e, true ); + StackFrame[] frames = trace.GetFrames(); + if ( frames == null ) + { + // don't include this helper function in the trace + frames = new StackTrace( true ).GetFrames().Skip( 1 ).ToArray(); + } + return frames; + } + +#if DEBUG + [Obsolete] + public static string getMethodName( this StackFrame frame ) + { + return frame.GetMethod().Name; + } + + [Obsolete] + public static string getClassName( this StackFrame frame ) + { + return frame.GetMethod().DeclaringType.Name; + } +#endif + + public static void PrintStackTrace( this Exception e ) + { + e.PrintStackTrace( Console.Out ); + } + public static void PrintStackTrace( this Exception e, System.IO.TextWriter writer ) + { + writer.WriteLine( e.ToString() ); + foreach ( string line in e.StackTrace.Split( '\n', '\r' ) ) + { + if ( !string.IsNullOrEmpty( line ) ) + writer.WriteLine( " " + line ); + } + } + +#if DEBUG + [Obsolete] + public static Exception getTargetException( this TargetInvocationException e ) + { + return e.InnerException ?? e; + } +#endif + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/IOExtensions.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/IOExtensions.cs new file mode 100644 index 0000000..c1fe293 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/IOExtensions.cs @@ -0,0 +1,94 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if DEBUG + +using System; + +using TextReader = System.IO.TextReader; +using TextWriter = System.IO.TextWriter; + +namespace Antlr.Runtime.JavaExtensions +{ + public static class IOExtensions + { + [Obsolete] + public static void close( this TextReader reader ) + { + reader.Close(); + } + + [Obsolete] + public static void close( this TextWriter writer ) + { + writer.Close(); + } + + [Obsolete] + public static void print<T>( this TextWriter writer, T value ) + { + writer.Write( value ); + } + + [Obsolete] + public static void println( this TextWriter writer ) + { + writer.WriteLine(); + } + + [Obsolete] + public static void println<T>( this TextWriter writer, T value ) + { + writer.WriteLine( value ); + } + + [Obsolete] + public static void write<T>( this TextWriter writer, T value ) + { + writer.Write( value ); + } + + [Obsolete] + public static int read( this TextReader reader, char[] buffer, int index, int count ) + { + return reader.Read( buffer, index, count ); + } + + [Obsolete] + public static string readLine( this TextReader reader ) + { + return reader.ReadLine(); + } + } +} + +#endif diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/Iterator.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/Iterator.cs new file mode 100644 index 0000000..96316c2 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/Iterator.cs @@ -0,0 +1,115 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using IEnumerable = System.Collections.IEnumerable; +using IEnumerator = System.Collections.IEnumerator; + +namespace Antlr.Runtime.JavaExtensions +{ + public class Iterator : IEnumerator + { + static readonly object[] EmptySource = new object[0]; + + IEnumerable _enumerable; + IEnumerator _iterator; + bool _hasNext; + + public Iterator() + : this( EmptySource ) + { + } + public Iterator( IEnumerable enumerable ) + { + _enumerable = enumerable; + _iterator = enumerable.GetEnumerator(); + _hasNext = _iterator.MoveNext(); + } + + public IEnumerable Source + { + get + { + return _enumerable; + } + } + + public virtual bool hasNext() + { + return _hasNext; + } + + public virtual object next() + { + object current = _iterator.Current; + _hasNext = _iterator.MoveNext(); + return current; + } + + // these are for simulation of ASTEnumeration + public virtual bool hasMoreNodes() + { + return _hasNext; + } + + public virtual object nextNode() + { + return next(); + } + + #region IEnumerator Members + public virtual object Current + { + get + { + return _iterator.Current; + } + } + public virtual bool MoveNext() + { + return _iterator.MoveNext(); + } + public virtual void Reset() + { + _iterator.Reset(); + } + #endregion + + #region IDisposable Members + public void Dispose() + { + _enumerable = null; + _hasNext = false; + _iterator = null; + } + #endregion + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/JSystem.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/JSystem.cs new file mode 100644 index 0000000..d2bc2c0 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/JSystem.cs @@ -0,0 +1,89 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if DEBUG +namespace Antlr.Runtime.JavaExtensions +{ + using System; + using System.IO; + + public static class JSystem + { + [Obsolete] + public static TextWriter err + { + get + { + return Console.Error; + } + } + + [Obsolete] + public static TextWriter @out + { + get + { + return Console.Out; + } + } + + [Obsolete] + public static void arraycopy<T>( T[] sourceArray, int sourceIndex, T[] destinationArray, int destinationIndex, int length ) + { + Array.Copy( sourceArray, sourceIndex, destinationArray, destinationIndex, length ); + } + + [Obsolete] + public static string getProperty( string name ) + { + switch ( name ) + { + case "file.encoding": + return System.Text.Encoding.Default.WebName; + + case "line.separator": + return Environment.NewLine; + + case "java.io.tmpdir": + return System.IO.Path.GetTempPath(); + + case "user.home": + return Environment.GetFolderPath( Environment.SpecialFolder.Personal ); + + default: + throw new ArgumentException( string.Format( "Unknown system property: '{0}'", name ) ); + } + } + + } +} +#endif diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/ListExtensions.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/ListExtensions.cs new file mode 100644 index 0000000..90b2987 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/ListExtensions.cs @@ -0,0 +1,239 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Linq; + +using ICollection = System.Collections.ICollection; +using IEnumerable = System.Collections.IEnumerable; +using IList = System.Collections.IList; + +namespace Antlr.Runtime.JavaExtensions +{ + public static class ListExtensions + { +#if DEBUG + [Obsolete] + public static bool add( this IList list, object value ) + { + int count = list.Count; + list.Add( value ); + return list.Count == count + 1; + } + + [Obsolete] + public static void add<T>( this ICollection<T> list, T value ) + { + list.Add( value ); + } + + [Obsolete] + public static void add<T>( this List<T> list, T value ) + { + list.Add( value ); + } + + [Obsolete] + public static void add( this IList list, int index, object value ) + { + list.Insert( index, value ); + } + + [Obsolete] + public static void addAll( this List<object> list, IEnumerable items ) + { + list.AddRange( items.Cast<object>() ); + } +#endif + + public static void addAll( this IList list, IEnumerable items ) + { + foreach ( object item in items ) + list.Add( item ); + } + + public static void addAll<T>( this ICollection<T> list, IEnumerable<T> items ) + { + foreach ( T item in items ) + list.Add( item ); + } + +#if DEBUG + [Obsolete] + public static void addElement( this List<object> list, object value ) + { + list.Add( value ); + } + + [Obsolete] + public static void clear( this IList list ) + { + list.Clear(); + } + + [Obsolete] + public static bool contains( this IList list, object value ) + { + return list.Contains( value ); + } + + [Obsolete] + public static bool contains<T>( this ICollection<T> list, T value ) + { + return list.Contains( value ); + } + + [Obsolete] + public static T elementAt<T>( this IList<T> list, int index ) + { + return list[index]; + } + + [Obsolete] + public static object get( this IList list, int index ) + { + return list[index]; + } + + [Obsolete] + public static T get<T>( this IList<T> list, int index ) + { + return list[index]; + } + + // disambiguate + [Obsolete] + public static T get<T>( this List<T> list, int index ) + { + return list[index]; + } + + [Obsolete] + public static object remove( this IList list, int index ) + { + object o = list[index]; + list.RemoveAt( index ); + return o; + } + + [Obsolete] + public static void remove<T>( this IList<T> list, T item ) + { + list.Remove( item ); + } + + [Obsolete] + public static void set( this IList list, int index, object value ) + { + list[index] = value; + } + + [Obsolete] + public static void set<T>( this IList<T> list, int index, T value ) + { + list[index] = value; + } + + [Obsolete] + public static void set<T>( this List<T> list, int index, T value ) + { + list[index] = value; + } +#endif + + public static void setSize<T>( this List<T> list, int size ) + { + if ( list.Count < size ) + { + list.AddRange( Enumerable.Repeat( default( T ), size - list.Count ) ); + } + else if ( list.Count > size ) + { + T[] items = list.Take( size ).ToArray(); + list.Clear(); + list.AddRange( items ); + } + } + +#if DEBUG + [Obsolete] + public static int size( this ICollection collection ) + { + return collection.Count; + } + + [Obsolete] + public static int size<T>( this ICollection<T> collection ) + { + return collection.Count; + } + + [Obsolete] + public static int size<T>( this List<T> list ) + { + return list.Count; + } +#endif + + public static IList subList( this IList list, int fromIndex, int toIndex ) + { + return new SubList( list, fromIndex, toIndex ); + //return + // list + // .Cast<object>() + // .Skip( fromIndex ) + // .Take( toIndex - fromIndex + 1 ) + // .ToList(); + } + + public static IList<T> subList<T>( this IList<T> list, int fromIndex, int toIndex ) + { + return new SubList<T>( list, fromIndex, toIndex ); + //return + // list + // .Skip( fromIndex ) + // .Take( toIndex - fromIndex + 1 ) + // .ToList(); + } + + public static IList<T> subList<T>( this List<T> list, int fromIndex, int toIndex ) + { + return new SubList<T>( list, fromIndex, toIndex ); + //return + // list + // .Skip( fromIndex ) + // .Take( toIndex - fromIndex + 1 ) + // .ToList(); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/ObjectExtensions.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/ObjectExtensions.cs new file mode 100644 index 0000000..fe6a274 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/ObjectExtensions.cs @@ -0,0 +1,123 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; + +namespace Antlr.Runtime.JavaExtensions +{ + public static class ObjectExtensions + { +#if DEBUG + [Obsolete] + public static bool booleanValue( this bool value ) + { + return value; + } + + [Obsolete] + public static Type getClass( this object o ) + { + return o.GetType(); + } +#endif + + public static int ShiftPrimeXOR( int a, int b ) + { + int hash = 23; + hash = ( ( hash << 5 ) * 37 ) ^ a; + hash = ( ( hash << 5 ) * 37 ) ^ b; + return hash; + } + + public static int ShiftPrimeXOR( int a, int b, int c ) + { + int hash = 23; + hash = ( ( hash << 5 ) * 37 ) ^ a; + hash = ( ( hash << 5 ) * 37 ) ^ b; + hash = ( ( hash << 5 ) * 37 ) ^ c; + return hash; + } + + public static int ShiftPrimeXOR( int a, int b, int c, int d ) + { + int hash = 23; + hash = ( ( hash << 5 ) * 37 ) ^ a; + hash = ( ( hash << 5 ) * 37 ) ^ b; + hash = ( ( hash << 5 ) * 37 ) ^ c; + hash = ( ( hash << 5 ) * 37 ) ^ d; + return hash; + } + + public static int ShiftPrimeXOR( params int[] a ) + { + int hash = 23; + foreach ( int i in a ) + hash = ( ( hash << 5 ) * 37 ) ^ i; + return hash; + } + + public static int ShiftPrimeAdd( int a, int b ) + { + int hash = 23; + hash = ( ( hash << 5 ) * 37 ) + a; + hash = ( ( hash << 5 ) * 37 ) + b; + return hash; + } + + public static int ShiftPrimeAdd( int a, int b, int c ) + { + int hash = 23; + hash = ( ( hash << 5 ) * 37 ) + a; + hash = ( ( hash << 5 ) * 37 ) + b; + hash = ( ( hash << 5 ) * 37 ) + c; + return hash; + } + + public static int ShiftPrimeAdd( int a, int b, int c, int d ) + { + int hash = 23; + hash = ( ( hash << 5 ) * 37 ) + a; + hash = ( ( hash << 5 ) * 37 ) + b; + hash = ( ( hash << 5 ) * 37 ) + c; + hash = ( ( hash << 5 ) * 37 ) + d; + return hash; + } + + public static int ShiftPrimeAdd( params int[] a ) + { + int hash = 23; + foreach ( int i in a ) + hash = ( ( hash << 5 ) * 37 ) + i; + return hash; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/SetExtensions.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/SetExtensions.cs new file mode 100644 index 0000000..881326e --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/SetExtensions.cs @@ -0,0 +1,89 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +#if DEBUG +using System.Linq; +#endif + +namespace Antlr.Runtime.JavaExtensions +{ + public static class SetExtensions + { +#if DEBUG + [Obsolete] + public static bool add<T>( this HashSet<T> set, T item ) + { + return set.Add( item ); + } +#endif + + public static void addAll<T>( this HashSet<T> set, IEnumerable<T> items ) + { + foreach ( T item in items ) + set.Add( item ); + } + +#if DEBUG + [Obsolete] + public static void clear<T>( this HashSet<T> set ) + { + set.Clear(); + } + + [Obsolete] + public static bool contains<T>( this HashSet<T> set, T value ) + { + return set.Contains( value ); + } + + [Obsolete] + public static bool remove<T>( this HashSet<T> set, T item ) + { + return set.Remove( item ); + } + + [Obsolete] + public static int size<T>( this HashSet<T> set ) + { + return set.Count; + } + + [Obsolete] + public static T[] toArray<T>( this HashSet<T> set ) + { + return set.ToArray(); + } +#endif + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/StackExtensions.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/StackExtensions.cs new file mode 100644 index 0000000..ab9ec71 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/StackExtensions.cs @@ -0,0 +1,84 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +#if DEBUG +using System.Linq; +#endif + +namespace Antlr.Runtime.JavaExtensions +{ + public static class StackExtensions + { +#if DEBUG + [Obsolete] + public static T elementAt<T>( this Stack<T> stack, int index ) + { + return stack.ElementAt( index ); + } + + [Obsolete] + public static T peek<T>( this Stack<T> stack ) + { + return stack.Peek(); + } + + [Obsolete] + public static T pop<T>( this Stack<T> stack ) + { + return stack.Pop(); + } + + [Obsolete] + public static void push<T>( this Stack<T> stack, T obj ) + { + stack.Push( obj ); + } + + [Obsolete] + public static int size<T>( this Stack<T> stack ) + { + return stack.Count; + } +#endif + + public static void setSize<T>( this Stack<T> stack, int size ) + { + if ( size > stack.Count ) + throw new ArgumentException(); + + while ( stack.Count > size ) + stack.Pop(); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/StringBuilderExtensions.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/StringBuilderExtensions.cs new file mode 100644 index 0000000..6ef6f27 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/StringBuilderExtensions.cs @@ -0,0 +1,75 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; + +using StringBuilder = System.Text.StringBuilder; + +#if DEBUG + +namespace Antlr.Runtime.JavaExtensions +{ + public static class StringBuilderExtensions + { + [Obsolete] + public static void append<T>( this StringBuilder buffer, T value ) + { + buffer.Append( value ); + } + + [Obsolete] + public static char charAt( this StringBuilder buffer, int index ) + { + return buffer[index]; + } + + [Obsolete] + public static int length( this StringBuilder buffer ) + { + return buffer.Length; + } + + [Obsolete] + public static void setCharAt( this StringBuilder buffer, int index, char c ) + { + buffer[index] = c; + } + + [Obsolete] + public static void setLength( this StringBuilder buffer, int length ) + { + buffer.Length = length; + } + } +} + +#endif diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/StringExtensions.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/StringExtensions.cs new file mode 100644 index 0000000..b9b6ac7 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/StringExtensions.cs @@ -0,0 +1,156 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Text; + +namespace Antlr.Runtime.JavaExtensions +{ + public static class StringExtensions + { +#if DEBUG + [Obsolete] + public static char charAt( this string str, int index ) + { + return str[index]; + } + + [Obsolete] + public static bool endsWith( this string str, string value ) + { + return str.EndsWith( value ); + } + + [Obsolete] + public static int indexOf( this string str, char value ) + { + return str.IndexOf( value ); + } + + [Obsolete] + public static int indexOf( this string str, char value, int startIndex ) + { + return str.IndexOf( value, startIndex ); + } + + [Obsolete] + public static int indexOf( this string str, string value ) + { + return str.IndexOf( value ); + } + + [Obsolete] + public static int indexOf( this string str, string value, int startIndex ) + { + return str.IndexOf( value, startIndex ); + } + + [Obsolete] + public static int lastIndexOf( this string str, char value ) + { + return str.LastIndexOf( value ); + } + + [Obsolete] + public static int lastIndexOf( this string str, string value ) + { + return str.LastIndexOf( value ); + } + + [Obsolete] + public static int length( this string str ) + { + return str.Length; + } +#endif + + public static string replace( this string str, char oldValue, char newValue ) + { + int index = str.IndexOf( oldValue ); + if ( index == -1 ) + return str; + + System.Text.StringBuilder builder = new StringBuilder( str ); + builder[index] = newValue; + return builder.ToString(); + } + + public static string replaceAll( this string str, string regex, string newValue ) + { + return System.Text.RegularExpressions.Regex.Replace( str, regex, newValue ); + } + + public static string replaceFirst( this string str, string regex, string replacement ) + { + return System.Text.RegularExpressions.Regex.Replace( str, regex, replacement ); + } + +#if DEBUG + [Obsolete] + public static bool startsWith( this string str, string value ) + { + return str.StartsWith( value ); + } +#endif + + [Obsolete] + public static string substring( this string str, int startOffset ) + { + return str.Substring( startOffset ); + } + + public static string substring( this string str, int startOffset, int endOffset ) + { + return str.Substring( startOffset, endOffset - startOffset ); + } + +#if DEBUG + [Obsolete] + public static char[] toCharArray( this string str ) + { + return str.ToCharArray(); + } + + [Obsolete] + public static string toUpperCase( this string str ) + { + return str.ToUpperInvariant(); + } + + [Obsolete] + public static string trim( this string str ) + { + return str.Trim(); + } +#endif + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/StringTokenizer.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/StringTokenizer.cs new file mode 100644 index 0000000..0145df5 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/StringTokenizer.cs @@ -0,0 +1,87 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Linq; + +namespace Antlr.Runtime.JavaExtensions +{ + public class StringTokenizer + { + string[] _tokens; + int _current; + + public StringTokenizer( string str, string separator ) + : this( str, separator, false ) + { + } + public StringTokenizer( string str, string separator, bool returnDelims ) + { + _tokens = str.Split( separator.ToCharArray(), StringSplitOptions.None ); + if ( returnDelims ) + { + char[] delims = separator.ToCharArray(); + _tokens = _tokens.SelectMany( ( token, i ) => + { + if ( i == _tokens.Length - 1 ) + { + if ( delims.Contains( str[str.Length - 1] ) ) + return new string[0]; + else + return new string[] { token }; + } + else if ( i == 0 ) + { + if ( delims.Contains( str[0] ) ) + return new string[] { str[0].ToString() }; + else + return new string[] { token }; + } + else + { + return new string[] { token, str[_tokens.Take( i + 1 ).Select( t => t.Length + 1 ).Sum() - 1].ToString() }; + } + } ).ToArray(); + } + } + + public bool hasMoreTokens() + { + return _current < _tokens.Length; + } + + public string nextToken() + { + return _tokens[_current++]; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/SubList.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/SubList.cs new file mode 100644 index 0000000..97025bf --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/SubList.cs @@ -0,0 +1,423 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Collections; + +namespace Antlr.Runtime.JavaExtensions +{ + public class SubList + : IList + { + IList _source; + int _startIndex; + int _endIndex; + + public SubList( IList source, int startIndex, int endIndex ) + { + if ( source == null ) + throw new ArgumentNullException( "source" ); + if ( startIndex < 0 || endIndex < 0 ) + throw new ArgumentOutOfRangeException(); + if ( startIndex > endIndex || endIndex >= source.Count ) + throw new ArgumentException(); + + _source = source; + _startIndex = startIndex; + _endIndex = endIndex; + } + + #region IList Members + + public int Add( object value ) + { + throw new NotSupportedException(); + } + + public void Clear() + { + throw new NotSupportedException(); + } + + public bool Contains( object value ) + { + return _source + .Cast<object>() + .Skip( _startIndex ) + .Take( _endIndex - _startIndex + 1 ) + .Contains( value ); + } + + public int IndexOf( object value ) + { + for ( int i = 0; i < Count; i++ ) + { + if ( object.Equals( this[i], value ) ) + return i; + } + + return -1; + } + + public void Insert( int index, object value ) + { + throw new NotSupportedException(); + } + + public bool IsFixedSize + { + get + { + return true; + } + } + + public bool IsReadOnly + { + get + { + return true; + } + } + + public void Remove( object value ) + { + throw new NotSupportedException(); + } + + public void RemoveAt( int index ) + { + throw new NotSupportedException(); + } + + public object this[int index] + { + get + { + if ( index < 0 || index >= Count ) + throw new ArgumentOutOfRangeException(); + + return _source[index + _startIndex]; + } + set + { + if ( index < 0 || index >= Count ) + throw new ArgumentOutOfRangeException(); + + _source[index + _startIndex] = value; + } + } + + #endregion + + #region ICollection Members + + public void CopyTo( Array array, int index ) + { + if ( array == null ) + throw new ArgumentNullException( "array" ); + + if ( index < 0 ) + throw new ArgumentOutOfRangeException(); + + if ( index + Count > array.Length ) + throw new ArgumentException(); + + for ( int i = 0; i < Count; i++ ) + { + array.SetValue( this[i], index + i ); + } + } + + public int Count + { + get + { + return _endIndex - _startIndex + 1; + } + } + + public bool IsSynchronized + { + get + { + return false; + } + } + + public object SyncRoot + { + get + { + return _source.SyncRoot; + } + } + + #endregion + + #region IEnumerable Members + + public System.Collections.IEnumerator GetEnumerator() + { + return _source.Cast<object>() + .Skip( _startIndex ) + .Take( _endIndex - _startIndex + 1 ) + .GetEnumerator(); + } + + #endregion + } + + public class SubList<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable + { + IList<T> _source; + int _startIndex; + int _endIndex; + + public SubList( IList<T> source, int startIndex, int endIndex ) + { + if ( source == null ) + throw new ArgumentNullException( "source" ); + if ( startIndex < 0 || endIndex < 0 ) + throw new ArgumentOutOfRangeException(); + if ( startIndex > endIndex || endIndex >= source.Count ) + throw new ArgumentException(); + + _source = source; + _startIndex = startIndex; + _endIndex = endIndex; + } + + #region IEnumerable Members + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + #endregion + + #region ICollection Members + + void ICollection.CopyTo( Array array, int index ) + { + if ( array == null ) + throw new ArgumentNullException( "array" ); + + if ( index < 0 ) + throw new ArgumentOutOfRangeException(); + + if ( index + Count > array.Length ) + throw new ArgumentException(); + + for ( int i = 0; i < Count; i++ ) + { + array.SetValue( this[i], index + i ); + } + } + + public int Count + { + get + { + return _endIndex - _startIndex + 1; + } + } + + public bool IsSynchronized + { + get + { + ICollection sourceCollection = _source as ICollection; + if ( sourceCollection != null ) + return sourceCollection.IsSynchronized; + + return false; + } + } + + public object SyncRoot + { + get + { + ICollection sourceCollection = _source as ICollection; + if ( sourceCollection != null ) + return sourceCollection.SyncRoot; + + return _source; + } + } + + #endregion + + #region IList Members + + int IList.Add( object value ) + { + throw new NotSupportedException(); + } + + void IList.Clear() + { + throw new NotSupportedException(); + } + + public bool Contains( object value ) + { + return _source.Cast<object>().Skip( _startIndex ).Take( Count ).Contains( value ); + } + + public int IndexOf( object value ) + { + for ( int i = _startIndex; i <= _endIndex; i++ ) + { + if ( object.Equals( _source[i], value ) ) + return i - _startIndex; + } + + return -1; + } + + void IList.Insert( int index, object value ) + { + throw new NotSupportedException(); + } + + public bool IsFixedSize + { + get + { + var sourceCollection = _source as IList; + if ( sourceCollection != null ) + return sourceCollection.IsFixedSize; + + return false; + } + } + + public bool IsReadOnly + { + get + { + return true; + } + } + + void IList.Remove( object value ) + { + throw new NotSupportedException(); + } + + void IList.RemoveAt( int index ) + { + throw new NotSupportedException(); + } + + object IList.this[int index] + { + get + { + return this[index]; + } + set + { + this[index] = (T)value; + } + } + + #endregion + + #region IEnumerable<T> Members + + public IEnumerator<T> GetEnumerator() + { + return _source.Skip( _startIndex ).Take( Count ).GetEnumerator(); + } + + #endregion + + #region ICollection<T> Members + + void ICollection<T>.Add( T item ) + { + throw new NotSupportedException(); + } + + void ICollection<T>.Clear() + { + throw new NotSupportedException(); + } + + public bool Contains( T item ) + { + return _source.Skip( _startIndex ).Take( Count ).Contains( item ); + } + + public void CopyTo( T[] array, int arrayIndex ) + { + if ( array == null ) + throw new ArgumentNullException( "array" ); + + if ( arrayIndex < 0 ) + throw new ArgumentOutOfRangeException(); + + if ( arrayIndex + Count > array.Length ) + throw new ArgumentException(); + + for ( int i = 0; i < Count; i++ ) + { + array[arrayIndex + i] = this[i]; + } + } + + bool ICollection<T>.Remove( T item ) + { + throw new NotSupportedException(); + } + + #endregion + + #region IList<T> Members + + public int IndexOf( T item ) + { + for ( int i = 0; i < Count; i++ ) + { + if ( object.Equals( this[i], item ) ) + return i; + } + + return -1; + } + + void IList<T>.Insert( int index, T item ) + { + throw new NotSupportedException(); + } + + void IList<T>.RemoveAt( int index ) + { + throw new NotSupportedException(); + } + + public T this[int index] + { + get + { + if ( index < 0 || index >= Count ) + throw new ArgumentOutOfRangeException(); + + return _source[index + _startIndex]; + } + set + { + if ( index < 0 || index >= Count ) + throw new ArgumentOutOfRangeException(); + + _source[index + _startIndex] = value; + } + } + + #endregion + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/TreeExtensions.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/TreeExtensions.cs new file mode 100644 index 0000000..6f7182f --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/TreeExtensions.cs @@ -0,0 +1,53 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using ITree = Antlr.Runtime.Tree.ITree; + +namespace Antlr.Runtime.JavaExtensions +{ + public static class TreeExtensions + { + public static ITree getNextSibling( this ITree tree ) + { + return tree.Parent.GetChild( tree.ChildIndex + 1 ); + //throw new NotImplementedException(); + } + + public static void setFirstChild( this ITree tree, ITree child ) + { + if ( tree.ChildCount == 0 ) + tree.AddChild( child ); + else + tree.SetChild( 0, child ); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/TypeExtensions.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/TypeExtensions.cs new file mode 100644 index 0000000..42c0368 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/JavaExtensions/TypeExtensions.cs @@ -0,0 +1,102 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Reflection; + +#if DEBUG + +namespace Antlr.Runtime.JavaExtensions +{ + public static class TypeExtensions + { + [Obsolete] + public static object get( this FieldInfo field, object obj ) + { + return field.GetValue( obj ); + } + + [Obsolete] + public static Type getComponentType( this Type type ) + { + return type.GetElementType(); + } + + [Obsolete] + public static ConstructorInfo getConstructor( this Type type, Type[] argumentTypes ) + { + return type.GetConstructor( argumentTypes ); + } + + [Obsolete] + public static FieldInfo getField( this Type type, string name ) + { + FieldInfo field = type.GetField( name ); + if ( field == null ) + throw new TargetException(); + + return field; + } + + [Obsolete] + public static string getName( this Type type ) + { + return type.Name; + } + + [Obsolete] + public static object invoke( this MethodInfo method, object obj, params object[] parameters ) + { + return method.Invoke( obj, parameters ); + } + + [Obsolete] + public static bool isArray( this Type type ) + { + return type.IsArray; + } + + [Obsolete] + public static bool isPrimitive( this Type type ) + { + return type.IsPrimitive; + } + + [Obsolete] + public static object newInstance( this Type type ) + { + return type.GetConstructor( new Type[0] ).Invoke( new object[0] ); + } + } +} + +#endif diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Misc/Stats.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Misc/Stats.cs new file mode 100644 index 0000000..8f163b1 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Misc/Stats.cs @@ -0,0 +1,143 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Misc +{ + using System.Collections.Generic; + using System.Linq; + using Antlr.Runtime.JavaExtensions; + + using Math = System.Math; + + /** <summary>Stats routines needed by profiler etc...</summary> + * + * <remarks> + * note that these routines return 0.0 if no values exist in the X[] + * which is not "correct", but it is useful so I don't generate NaN + * in my output + * </remarks> + */ + public class Stats + { + public const string ANTLRWORKS_DIR = "antlrworks"; + + /** <summary>Compute the sample (unbiased estimator) standard deviation following:</summary> + * + * <remarks> + * Computing Deviations: Standard Accuracy + * Tony F. Chan and John Gregg Lewis + * Stanford University + * Communications of ACM September 1979 of Volume 22 the ACM Number 9 + * + * The "two-pass" method from the paper; supposed to have better + * numerical properties than the textbook summation/sqrt. To me + * this looks like the textbook method, but I ain't no numerical + * methods guy. + * </remarks> + */ + public static double Stddev( int[] X ) + { + int m = X.Length; + if ( m <= 1 ) + { + return 0; + } + double xbar = X.Average(); + double s2 = 0.0; + for ( int i = 0; i < m; i++ ) + { + s2 += ( X[i] - xbar ) * ( X[i] - xbar ); + } + s2 = s2 / ( m - 1 ); + return Math.Sqrt( s2 ); + } + public static double Stddev( List<int> X ) + { + int m = X.Count; + if ( m <= 1 ) + { + return 0; + } + double xbar = X.Average(); + double s2 = 0.0; + for ( int i = 0; i < m; i++ ) + { + s2 += ( X[i] - xbar ) * ( X[i] - xbar ); + } + s2 = s2 / ( m - 1 ); + return Math.Sqrt( s2 ); + } + +#if DEBUG + /** <summary>Compute the sample mean</summary> */ + [System.Obsolete] + public static double avg( int[] X ) + { + return X.DefaultIfEmpty( 0 ).Average(); + } + + [System.Obsolete] + public static int min( int[] X ) + { + return X.DefaultIfEmpty( int.MaxValue ).Min(); + } + + [System.Obsolete] + public static int max( int[] X ) + { + return X.DefaultIfEmpty( int.MinValue ).Max(); + } + + [System.Obsolete] + public static int sum( int[] X ) + { + return X.Sum(); + } +#endif + + public static void WriteReport( string filename, string data ) + { + string absoluteFilename = GetAbsoluteFileName( filename ); + + System.IO.Directory.CreateDirectory( System.IO.Path.GetDirectoryName( absoluteFilename ) ); + System.IO.File.AppendAllText( absoluteFilename, data ); + } + + public static string GetAbsoluteFileName( string filename ) + { + string personalFolder = System.Environment.GetFolderPath( System.Environment.SpecialFolder.Personal ); + return personalFolder + System.IO.Path.DirectorySeparatorChar + + ANTLRWORKS_DIR + System.IO.Path.DirectorySeparatorChar + + filename; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/ParseTreeBuilder.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/ParseTreeBuilder.cs new file mode 100644 index 0000000..3206091 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/ParseTreeBuilder.cs @@ -0,0 +1,140 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Debug +{ + using System.Collections.Generic; + using Antlr.Runtime.JavaExtensions; + + using ParseTree = Antlr.Runtime.Tree.ParseTree; + + /** <summary> + * This parser listener tracks rule entry/exit and token matches + * to build a simple parse tree using ParseTree nodes. + * </summary> + */ + public class ParseTreeBuilder : BlankDebugEventListener + { + public const string EPSILON_PAYLOAD = "<epsilon>"; + + Stack<ParseTree> callStack = new Stack<ParseTree>(); + List<IToken> hiddenTokens = new List<IToken>(); + int backtracking = 0; + + public ParseTreeBuilder( string grammarName ) + { + ParseTree root = Create( "<grammar " + grammarName + ">" ); + callStack.Push( root ); + } + + public virtual ParseTree GetTree() + { + var enumerator = callStack.GetEnumerator(); + enumerator.MoveNext(); + return enumerator.Current; + } + + /** <summary> + * What kind of node to create. You might want to override + * so I factored out creation here. + * </summary> + */ + public virtual ParseTree Create( object payload ) + { + return new ParseTree( payload ); + } + + public virtual ParseTree EpsilonNode() + { + return Create( EPSILON_PAYLOAD ); + } + + /** <summary>Backtracking or cyclic DFA, don't want to add nodes to tree</summary> */ + public override void EnterDecision( int d ) + { + backtracking++; + } + public override void ExitDecision( int i ) + { + backtracking--; + } + + public override void EnterRule( string filename, string ruleName ) + { + if ( backtracking > 0 ) + return; + ParseTree parentRuleNode = callStack.Peek(); + ParseTree ruleNode = Create( ruleName ); + parentRuleNode.AddChild( ruleNode ); + callStack.Push( ruleNode ); + } + + public override void ExitRule( string filename, string ruleName ) + { + if ( backtracking > 0 ) + return; + ParseTree ruleNode = callStack.Peek(); + if ( ruleNode.ChildCount == 0 ) + { + ruleNode.AddChild( EpsilonNode() ); + } + callStack.Pop(); + } + + public override void ConsumeToken( IToken token ) + { + if ( backtracking > 0 ) + return; + ParseTree ruleNode = callStack.Peek(); + ParseTree elementNode = Create( token ); + elementNode.hiddenTokens = this.hiddenTokens; + this.hiddenTokens = new List<IToken>(); + ruleNode.AddChild( elementNode ); + } + + public override void ConsumeHiddenToken( IToken token ) + { + if ( backtracking > 0 ) + return; + hiddenTokens.Add( token ); + } + + public override void RecognitionException( RecognitionException e ) + { + if ( backtracking > 0 ) + return; + ParseTree ruleNode = callStack.Peek(); + ParseTree errorNode = Create( e ); + ruleNode.AddChild( errorNode ); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/ParserDebugger.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/ParserDebugger.cs new file mode 100644 index 0000000..0b60f2b --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/ParserDebugger.cs @@ -0,0 +1,49 @@ +namespace Antlr.Runtime.Debug +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Text; + + using IOException = System.IO.IOException; + using Antlr.Runtime.Tree; + + public class ParserDebugger + { + IDebugEventListener dbg; + + public ParserDebugger( Parser parser ) + : this( parser, DebugEventSocketProxy.DEFAULT_DEBUGGER_PORT ) + { + } + public ParserDebugger( Parser parser, int port ) + { + DebugEventSocketProxy proxy = new DebugEventSocketProxy( parser, port, null ); + DebugListener = proxy; + parser.TokenStream = new DebugTokenStream( parser.TokenStream, proxy ); + try + { + proxy.handshake(); + } + catch ( IOException e ) + { + reportError( ioe ); + } + ITreeAdaptor adap = new CommonTreeAdaptor(); + TreeAdaptor = adap; + proxy.TreeAdaptor = adap; + } + public ParserDebugger( Parser parser, IDebugEventListener dbg ) + { + ITreeAdaptor adap = new CommonTreeAdaptor(); + TreeAdaptor = adap; + } + + protected virtual bool EvalPredicate( bool result, string predicate ) + { + dbg.SemanticPredicate( result, predicate ); + return result; + } + + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Profiler.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Profiler.cs new file mode 100644 index 0000000..501d4b2 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Profiler.cs @@ -0,0 +1,565 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Debug +{ + using System.Collections.Generic; + using System.Linq; + using Antlr.Runtime.JavaExtensions; + + using Array = System.Array; + using Console = System.Console; + using IOException = System.IO.IOException; + using Stats = Antlr.Runtime.Misc.Stats; + using StringBuilder = System.Text.StringBuilder; + + /** <summary>Using the debug event interface, track what is happening in the parser + * and record statistics about the runtime. + */ + public class Profiler : BlankDebugEventListener + { + /** <summary>Because I may change the stats, I need to track that for later + * computations to be consistent. + */ + public const string Version = "2"; + public const string RUNTIME_STATS_FILENAME = "runtime.stats"; + public const int NUM_RUNTIME_STATS = 29; + + public DebugParser parser = null; + + #region working variables + + protected int ruleLevel = 0; + protected int decisionLevel = 0; + protected int maxLookaheadInCurrentDecision = 0; + protected CommonToken lastTokenConsumed = null; + + protected Stack<int> lookaheadStack = new Stack<int>(); + + #endregion + + + #region stats variables + + public int numRuleInvocations = 0; + public int numGuessingRuleInvocations = 0; + public int maxRuleInvocationDepth = 0; + public int numFixedDecisions = 0; + public int numCyclicDecisions = 0; + public int numBacktrackDecisions = 0; + public int[] decisionMaxFixedLookaheads = new int[200]; // TODO: make List + public int[] decisionMaxCyclicLookaheads = new int[200]; + public List<int> decisionMaxSynPredLookaheads = new List<int>(); + public int numHiddenTokens = 0; + public int numCharsMatched = 0; + public int numHiddenCharsMatched = 0; + public int numSemanticPredicates = 0; + public int numSyntacticPredicates = 0; + protected int numberReportedErrors = 0; + public int numMemoizationCacheMisses = 0; + public int numMemoizationCacheHits = 0; + public int numMemoizationCacheEntries = 0; + + #endregion + + public Profiler() + { + } + + public Profiler( DebugParser parser ) + { + this.parser = parser; + } + + public override void EnterRule( string grammarFileName, string ruleName ) + { + //System.out.println("enterRule "+ruleName); + ruleLevel++; + numRuleInvocations++; + if ( ruleLevel > maxRuleInvocationDepth ) + { + maxRuleInvocationDepth = ruleLevel; + } + + } + + /** <summary> + * Track memoization; this is not part of standard debug interface + * but is triggered by profiling. Code gen inserts an override + * for this method in the recognizer, which triggers this method. + * </summary> + */ + public virtual void ExamineRuleMemoization( IIntStream input, + int ruleIndex, + string ruleName ) + { + //System.out.println("examine memo "+ruleName); + int stopIndex = parser.GetRuleMemoization( ruleIndex, input.Index ); + if ( stopIndex == BaseRecognizer.MEMO_RULE_UNKNOWN ) + { + //System.out.println("rule "+ruleIndex+" missed @ "+input.index()); + numMemoizationCacheMisses++; + numGuessingRuleInvocations++; // we'll have to enter + } + else + { + // regardless of rule success/failure, if in cache, we have a cache hit + //System.out.println("rule "+ruleIndex+" hit @ "+input.index()); + numMemoizationCacheHits++; + } + } + + public virtual void Memoize( IIntStream input, + int ruleIndex, + int ruleStartIndex, + string ruleName ) + { + // count how many entries go into table + //System.out.println("memoize "+ruleName); + numMemoizationCacheEntries++; + } + + public override void ExitRule( string grammarFileName, string ruleName ) + { + ruleLevel--; + } + + public override void EnterDecision( int decisionNumber ) + { + decisionLevel++; + int startingLookaheadIndex = parser.TokenStream.Index; + //System.out.println("enterDecision "+decisionNumber+" @ index "+startingLookaheadIndex); + lookaheadStack.Push( startingLookaheadIndex ); + } + + public override void ExitDecision( int decisionNumber ) + { + //System.out.println("exitDecision "+decisionNumber); + // track how many of acyclic, cyclic here as we don't know what kind + // yet in enterDecision event. + if ( parser.isCyclicDecision ) + { + numCyclicDecisions++; + } + else + { + numFixedDecisions++; + } + lookaheadStack.Pop(); // pop lookahead depth counter + decisionLevel--; + if ( parser.isCyclicDecision ) + { + if ( numCyclicDecisions >= decisionMaxCyclicLookaheads.Length ) + { + int[] bigger = new int[decisionMaxCyclicLookaheads.Length * 2]; + Array.Copy( decisionMaxCyclicLookaheads, bigger, decisionMaxCyclicLookaheads.Length ); + decisionMaxCyclicLookaheads = bigger; + } + decisionMaxCyclicLookaheads[numCyclicDecisions - 1] = maxLookaheadInCurrentDecision; + } + else + { + if ( numFixedDecisions >= decisionMaxFixedLookaheads.Length ) + { + int[] bigger = new int[decisionMaxFixedLookaheads.Length * 2]; + Array.Copy( decisionMaxFixedLookaheads, bigger, decisionMaxFixedLookaheads.Length ); + decisionMaxFixedLookaheads = bigger; + } + decisionMaxFixedLookaheads[numFixedDecisions - 1] = maxLookaheadInCurrentDecision; + } + parser.isCyclicDecision = false; // can't nest so just reset to false + maxLookaheadInCurrentDecision = 0; + } + + public override void ConsumeToken( IToken token ) + { + //System.out.println("consume token "+token); + lastTokenConsumed = (CommonToken)token; + } + + /** <summary> + * The parser is in a decision if the decision depth > 0. This + * works for backtracking also, which can have nested decisions. + * </summary> + */ + public virtual bool InDecision + { + get + { + return decisionLevel > 0; + } + } + + public override void ConsumeHiddenToken( IToken token ) + { + //System.out.println("consume hidden token "+token); + lastTokenConsumed = (CommonToken)token; + } + + /** <summary>Track refs to lookahead if in a fixed/nonfixed decision.</summary> */ + public override void LT( int i, IToken t ) + { + if ( InDecision ) + { + // get starting index off stack + int startingIndex = lookaheadStack.Peek(); + // compute lookahead depth + int thisRefIndex = parser.TokenStream.Index; + int numHidden = GetNumberOfHiddenTokens( startingIndex, thisRefIndex ); + int depth = i + thisRefIndex - startingIndex - numHidden; + /* + System.out.println("LT("+i+") @ index "+thisRefIndex+" is depth "+depth+ + " max is "+maxLookaheadInCurrentDecision); + */ + if ( depth > maxLookaheadInCurrentDecision ) + { + maxLookaheadInCurrentDecision = depth; + } + } + } + + /** <summary> + * Track backtracking decisions. You'll see a fixed or cyclic decision + * and then a backtrack. + * </summary> + * + * <remarks> + * enter rule + * ... + * enter decision + * LA and possibly consumes (for cyclic DFAs) + * begin backtrack level + * mark m + * rewind m + * end backtrack level, success + * exit decision + * ... + * exit rule + * </remarks> + */ + public override void BeginBacktrack( int level ) + { + //System.out.println("enter backtrack "+level); + numBacktrackDecisions++; + } + + /** <summary>Successful or not, track how much lookahead synpreds use</summary> */ + public override void EndBacktrack( int level, bool successful ) + { + //System.out.println("exit backtrack "+level+": "+successful); + decisionMaxSynPredLookaheads.Add( + maxLookaheadInCurrentDecision + ); + } + +#if false + public void mark( int marker ) + { + int i = parser.TokenStream.Index; + JSystem.@out.println( "mark @ index " + i ); + synPredLookaheadStack.Push( i ); + } + + public void rewind( int marker ) + { + // pop starting index off stack + int startingIndex = synPredLookaheadStack.Pop(); + // compute lookahead depth + int stopIndex = parser.TokenStream.Index; + JSystem.@out.println( "rewind @ index " + stopIndex ); + int depth = stopIndex - startingIndex; + JSystem.@out.println( "depth of lookahead for synpred: " + depth ); + decisionMaxSynPredLookaheads.Add( depth ); + } +#endif + + public override void RecognitionException( RecognitionException e ) + { + numberReportedErrors++; + } + + public override void SemanticPredicate( bool result, string predicate ) + { + if ( InDecision ) + { + numSemanticPredicates++; + } + } + + public override void Terminate() + { + string stats = ToNotifyString(); + try + { + Stats.WriteReport( RUNTIME_STATS_FILENAME, stats ); + } + catch ( IOException ioe ) + { + Console.Error.WriteLine( ioe ); + ioe.PrintStackTrace( Console.Error ); + } + Console.Out.WriteLine( ToString( stats ) ); + } + + public virtual void SetParser( DebugParser parser ) + { + this.parser = parser; + } + + #region Reporting + + public virtual string ToNotifyString() + { + ITokenStream input = parser.TokenStream; + for ( int i = 0; i < input.Size() && lastTokenConsumed != null && i <= lastTokenConsumed.TokenIndex; i++ ) + { + IToken t = input.Get( i ); + if ( t.Channel != TokenConstants.DEFAULT_CHANNEL ) + { + numHiddenTokens++; + numHiddenCharsMatched += t.Text.Length; + } + } + numCharsMatched = lastTokenConsumed.StopIndex + 1; + decisionMaxFixedLookaheads = Trim( decisionMaxFixedLookaheads, numFixedDecisions ); + decisionMaxCyclicLookaheads = Trim( decisionMaxCyclicLookaheads, numCyclicDecisions ); + StringBuilder buf = new StringBuilder(); + buf.Append( Version ); + buf.Append( '\t' ); + buf.Append( parser.GetType().Name ); + buf.Append( '\t' ); + buf.Append( numRuleInvocations ); + buf.Append( '\t' ); + buf.Append( maxRuleInvocationDepth ); + buf.Append( '\t' ); + buf.Append( numFixedDecisions ); + buf.Append( '\t' ); + buf.Append( decisionMaxFixedLookaheads.DefaultIfEmpty( int.MaxValue ).Min() ); + buf.Append( '\t' ); + buf.Append( decisionMaxFixedLookaheads.DefaultIfEmpty( int.MinValue ).Max() ); + buf.Append( '\t' ); + buf.Append( decisionMaxFixedLookaheads.DefaultIfEmpty( 0 ).Average() ); + buf.Append( '\t' ); + buf.Append( Stats.Stddev( decisionMaxFixedLookaheads ) ); + buf.Append( '\t' ); + buf.Append( numCyclicDecisions ); + buf.Append( '\t' ); + buf.Append( decisionMaxCyclicLookaheads.DefaultIfEmpty( int.MaxValue ).Min() ); + buf.Append( '\t' ); + buf.Append( decisionMaxCyclicLookaheads.DefaultIfEmpty( int.MinValue ).Max() ); + buf.Append( '\t' ); + buf.Append( decisionMaxCyclicLookaheads.DefaultIfEmpty( 0 ).Average() ); + buf.Append( '\t' ); + buf.Append( Stats.Stddev( decisionMaxCyclicLookaheads ) ); + buf.Append( '\t' ); + buf.Append( numBacktrackDecisions ); + buf.Append( '\t' ); + buf.Append( decisionMaxSynPredLookaheads.DefaultIfEmpty( int.MaxValue ).Min() ); + buf.Append( '\t' ); + buf.Append( decisionMaxSynPredLookaheads.DefaultIfEmpty( int.MinValue ).Max() ); + buf.Append( '\t' ); + buf.Append( decisionMaxSynPredLookaheads.DefaultIfEmpty( 0 ).Average() ); + buf.Append( '\t' ); + buf.Append( Stats.Stddev( decisionMaxSynPredLookaheads ) ); + buf.Append( '\t' ); + buf.Append( numSemanticPredicates ); + buf.Append( '\t' ); + buf.Append( parser.TokenStream.Size() ); + buf.Append( '\t' ); + buf.Append( numHiddenTokens ); + buf.Append( '\t' ); + buf.Append( numCharsMatched ); + buf.Append( '\t' ); + buf.Append( numHiddenCharsMatched ); + buf.Append( '\t' ); + buf.Append( numberReportedErrors ); + buf.Append( '\t' ); + buf.Append( numMemoizationCacheHits ); + buf.Append( '\t' ); + buf.Append( numMemoizationCacheMisses ); + buf.Append( '\t' ); + buf.Append( numGuessingRuleInvocations ); + buf.Append( '\t' ); + buf.Append( numMemoizationCacheEntries ); + return buf.ToString(); + } + + public override string ToString() + { + return ToString( ToNotifyString() ); + } + + protected static string[] DecodeReportData( string data ) + { + string[] fields = new string[NUM_RUNTIME_STATS]; + StringTokenizer st = new StringTokenizer( data, "\t" ); + int i = 0; + while ( st.hasMoreTokens() ) + { + fields[i] = st.nextToken(); + i++; + } + if ( i != NUM_RUNTIME_STATS ) + { + return null; + } + return fields; + } + + public static string ToString( string notifyDataLine ) + { + string[] fields = DecodeReportData( notifyDataLine ); + if ( fields == null ) + { + return null; + } + StringBuilder buf = new StringBuilder(); + buf.Append( "ANTLR Runtime Report; Profile Version " ); + buf.Append( fields[0] ); + buf.Append( '\n' ); + buf.Append( "parser name " ); + buf.Append( fields[1] ); + buf.Append( '\n' ); + buf.Append( "Number of rule invocations " ); + buf.Append( fields[2] ); + buf.Append( '\n' ); + buf.Append( "Number of rule invocations in \"guessing\" mode " ); + buf.Append( fields[27] ); + buf.Append( '\n' ); + buf.Append( "max rule invocation nesting depth " ); + buf.Append( fields[3] ); + buf.Append( '\n' ); + buf.Append( "number of fixed lookahead decisions " ); + buf.Append( fields[4] ); + buf.Append( '\n' ); + buf.Append( "min lookahead used in a fixed lookahead decision " ); + buf.Append( fields[5] ); + buf.Append( '\n' ); + buf.Append( "max lookahead used in a fixed lookahead decision " ); + buf.Append( fields[6] ); + buf.Append( '\n' ); + buf.Append( "average lookahead depth used in fixed lookahead decisions " ); + buf.Append( fields[7] ); + buf.Append( '\n' ); + buf.Append( "standard deviation of depth used in fixed lookahead decisions " ); + buf.Append( fields[8] ); + buf.Append( '\n' ); + buf.Append( "number of arbitrary lookahead decisions " ); + buf.Append( fields[9] ); + buf.Append( '\n' ); + buf.Append( "min lookahead used in an arbitrary lookahead decision " ); + buf.Append( fields[10] ); + buf.Append( '\n' ); + buf.Append( "max lookahead used in an arbitrary lookahead decision " ); + buf.Append( fields[11] ); + buf.Append( '\n' ); + buf.Append( "average lookahead depth used in arbitrary lookahead decisions " ); + buf.Append( fields[12] ); + buf.Append( '\n' ); + buf.Append( "standard deviation of depth used in arbitrary lookahead decisions " ); + buf.Append( fields[13] ); + buf.Append( '\n' ); + buf.Append( "number of evaluated syntactic predicates " ); + buf.Append( fields[14] ); + buf.Append( '\n' ); + buf.Append( "min lookahead used in a syntactic predicate " ); + buf.Append( fields[15] ); + buf.Append( '\n' ); + buf.Append( "max lookahead used in a syntactic predicate " ); + buf.Append( fields[16] ); + buf.Append( '\n' ); + buf.Append( "average lookahead depth used in syntactic predicates " ); + buf.Append( fields[17] ); + buf.Append( '\n' ); + buf.Append( "standard deviation of depth used in syntactic predicates " ); + buf.Append( fields[18] ); + buf.Append( '\n' ); + buf.Append( "rule memoization cache size " ); + buf.Append( fields[28] ); + buf.Append( '\n' ); + buf.Append( "number of rule memoization cache hits " ); + buf.Append( fields[25] ); + buf.Append( '\n' ); + buf.Append( "number of rule memoization cache misses " ); + buf.Append( fields[26] ); + buf.Append( '\n' ); + buf.Append( "number of evaluated semantic predicates " ); + buf.Append( fields[19] ); + buf.Append( '\n' ); + buf.Append( "number of tokens " ); + buf.Append( fields[20] ); + buf.Append( '\n' ); + buf.Append( "number of hidden tokens " ); + buf.Append( fields[21] ); + buf.Append( '\n' ); + buf.Append( "number of char " ); + buf.Append( fields[22] ); + buf.Append( '\n' ); + buf.Append( "number of hidden char " ); + buf.Append( fields[23] ); + buf.Append( '\n' ); + buf.Append( "number of syntax errors " ); + buf.Append( fields[24] ); + buf.Append( '\n' ); + return buf.ToString(); + } + + #endregion + + protected virtual int[] Trim( int[] X, int n ) + { + if ( n < X.Length ) + { + int[] trimmed = new int[n]; + Array.Copy( X, trimmed, n ); + X = trimmed; + } + return X; + } + + /** <summary>Get num hidden tokens between i..j inclusive</summary> */ + public virtual int GetNumberOfHiddenTokens( int i, int j ) + { + int n = 0; + ITokenStream input = parser.TokenStream; + for ( int ti = i; ti < input.Size() && ti <= j; ti++ ) + { + IToken t = input.Get( ti ); + if ( t.Channel != TokenConstants.DEFAULT_CHANNEL ) + { + n++; + } + } + return n; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Properties/AssemblyInfo.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d01e826 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Properties/AssemblyInfo.cs @@ -0,0 +1,68 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle( "Antlr3.Runtime.Debug" )] +[assembly: AssemblyDescription( "" )] +[assembly: AssemblyConfiguration( "" )] +[assembly: AssemblyCompany( "Pixel Mine, Inc." )] +[assembly: AssemblyProduct( "Antlr3.Runtime.Debug" )] +[assembly: AssemblyCopyright( "Copyright © Pixel Mine 2008" )] +[assembly: AssemblyTrademark( "" )] +[assembly: AssemblyCulture( "" )] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible( false )] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid( "9f8fa018-6766-404c-9e72-551407e1b173" )] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion( "1.0.0.0" )] +[assembly: AssemblyFileVersion( "1.0.0.0" )] diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/RemoteDebugEventSocketListener.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/RemoteDebugEventSocketListener.cs new file mode 100644 index 0000000..7d7decc --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/RemoteDebugEventSocketListener.cs @@ -0,0 +1,728 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Debug +{ + using Antlr.Runtime.JavaExtensions; + + using BaseTree = Antlr.Runtime.Tree.BaseTree; + using Console = System.Console; + using SocketException = System.Net.Sockets.SocketException; + using Exception = System.Exception; + using IOException = System.IO.IOException; + using Socket = System.Net.Sockets.Socket; + using ITree = Antlr.Runtime.Tree.ITree; + + using TextWriter = System.IO.TextWriter; + using TextReader = System.IO.TextReader; + + public class RemoteDebugEventSocketListener + { + const int MAX_EVENT_ELEMENTS = 8; + IDebugEventListener listener; + string machine; + int port; + Socket channel = null; + TextWriter @out; + TextReader @in; + string @event; + /** <summary>Version of ANTLR (dictates events)</summary> */ + public string version; + public string grammarFileName; + /** <summary> + * Track the last token index we saw during a consume. If same, then + * set a flag that we have a problem. + * </summary> + */ + int previousTokenIndex = -1; + bool tokenIndexesInvalid = false; + + public class ProxyToken : IToken + { + int index; + int type; + int channel; + int line; + int charPos; + string text; + public ProxyToken( int index ) + { + this.index = index; + } + public ProxyToken( int index, int type, int channel, + int line, int charPos, string text ) + { + this.index = index; + this.type = type; + this.channel = channel; + this.line = line; + this.charPos = charPos; + this.text = text; + } + + #region IToken Members + public string Text + { + get + { + return text; + } + set + { + text = value; + } + } + + public int Type + { + get + { + return type; + } + set + { + type = value; + } + } + + public int Line + { + get + { + return line; + } + set + { + line = value; + } + } + + public int CharPositionInLine + { + get + { + return charPos; + } + set + { + charPos = value; + } + } + + public int Channel + { + get + { + return channel; + } + set + { + channel = value; + } + } + + public int TokenIndex + { + get + { + return index; + } + set + { + index = value; + } + } + + public ICharStream InputStream + { + get + { + return null; + } + set + { + } + } + + #endregion + + public override string ToString() + { + string channelStr = ""; + if ( channel != TokenConstants.DEFAULT_CHANNEL ) + { + channelStr = ",channel=" + channel; + } + return "[" + Text + "/<" + type + ">" + channelStr + "," + line + ":" + CharPositionInLine + ",@" + index + "]"; + } + } + + public class ProxyTree : BaseTree + { + public int ID; + public int type; + public int line = 0; + public int charPos = -1; + public int tokenIndex = -1; + public string text; + + public ProxyTree( int ID, int type, int line, int charPos, int tokenIndex, string text ) + { + this.ID = ID; + this.type = type; + this.line = line; + this.charPos = charPos; + this.tokenIndex = tokenIndex; + this.text = text; + } + + public ProxyTree( int ID ) + { + this.ID = ID; + } + + #region Properties + public override string Text + { + get + { + return text; + } + set + { + } + } + public override int TokenStartIndex + { + get + { + return tokenIndex; + } + set + { + } + } + public override int TokenStopIndex + { + get + { + return 0; + } + set + { + } + } + public override int Type + { + get + { + return type; + } + set + { + } + } + #endregion + + public override ITree DupNode() + { + return null; + } + + public override string ToString() + { + return "fix this"; + } + } + + public RemoteDebugEventSocketListener( IDebugEventListener listener, + string machine, + int port ) + { + this.listener = listener; + this.machine = machine; + this.port = port; + + if ( !OpenConnection() ) + { + throw new SocketException(); + } + } + + protected virtual void EventHandler() + { + try + { + Handshake(); + @event = @in.ReadLine(); + while ( @event != null ) + { + Dispatch( @event ); + Ack(); + @event = @in.ReadLine(); + } + } + catch ( Exception e ) + { + Console.Error.WriteLine( e ); + e.PrintStackTrace( Console.Error ); + } + finally + { + CloseConnection(); + } + } + + protected virtual bool OpenConnection() + { + bool success = false; + try + { + throw new System.NotImplementedException(); + //channel = new Socket( machine, port ); + //channel.setTcpNoDelay( true ); + //OutputStream os = channel.getOutputStream(); + //OutputStreamWriter osw = new OutputStreamWriter( os, "UTF8" ); + //@out = new PrintWriter( new BufferedWriter( osw ) ); + //InputStream @is = channel.getInputStream(); + //InputStreamReader isr = new InputStreamReader( @is, "UTF8" ); + //@in = new BufferedReader( isr ); + //success = true; + } + catch ( Exception e ) + { + Console.Error.WriteLine( e ); + } + return success; + } + + protected virtual void CloseConnection() + { + try + { + @in.Close(); + @in = null; + @out.Close(); + @out = null; + channel.Close(); + channel = null; + } + catch ( Exception e ) + { + Console.Error.WriteLine( e ); + e.PrintStackTrace( Console.Error ); + } + finally + { + if ( @in != null ) + { + try + { + @in.Close(); + } + catch ( IOException ioe ) + { + Console.Error.WriteLine( ioe ); + } + } + if ( @out != null ) + { + @out.Close(); + } + if ( channel != null ) + { + try + { + channel.Close(); + } + catch ( IOException ioe ) + { + Console.Error.WriteLine( ioe ); + } + } + } + + } + + protected virtual void Handshake() + { + string antlrLine = @in.ReadLine(); + string[] antlrElements = GetEventElements( antlrLine ); + version = antlrElements[1]; + string grammarLine = @in.ReadLine(); + string[] grammarElements = GetEventElements( grammarLine ); + grammarFileName = grammarElements[1]; + Ack(); + listener.Commence(); // inform listener after handshake + } + + protected virtual void Ack() + { + @out.WriteLine( "ack" ); + @out.Flush(); + } + + protected virtual void Dispatch( string line ) + { + //JSystem.@out.println( "event: " + line ); + string[] elements = GetEventElements( line ); + if ( elements == null || elements[0] == null ) + { + Console.Error.WriteLine( "unknown debug event: " + line ); + return; + } + if ( elements[0].Equals( "enterRule" ) ) + { + listener.EnterRule( elements[1], elements[2] ); + } + else if ( elements[0].Equals( "exitRule" ) ) + { + listener.ExitRule( elements[1], elements[2] ); + } + else if ( elements[0].Equals( "enterAlt" ) ) + { + listener.EnterAlt( int.Parse( elements[1] ) ); + } + else if ( elements[0].Equals( "enterSubRule" ) ) + { + listener.EnterSubRule( int.Parse( elements[1] ) ); + } + else if ( elements[0].Equals( "exitSubRule" ) ) + { + listener.ExitSubRule( int.Parse( elements[1] ) ); + } + else if ( elements[0].Equals( "enterDecision" ) ) + { + listener.EnterDecision( int.Parse( elements[1] ) ); + } + else if ( elements[0].Equals( "exitDecision" ) ) + { + listener.ExitDecision( int.Parse( elements[1] ) ); + } + else if ( elements[0].Equals( "location" ) ) + { + listener.Location( int.Parse( elements[1] ), + int.Parse( elements[2] ) ); + } + else if ( elements[0].Equals( "consumeToken" ) ) + { + ProxyToken t = DeserializeToken( elements, 1 ); + if ( t.TokenIndex == previousTokenIndex ) + { + tokenIndexesInvalid = true; + } + previousTokenIndex = t.TokenIndex; + listener.ConsumeToken( t ); + } + else if ( elements[0].Equals( "consumeHiddenToken" ) ) + { + ProxyToken t = DeserializeToken( elements, 1 ); + if ( t.TokenIndex == previousTokenIndex ) + { + tokenIndexesInvalid = true; + } + previousTokenIndex = t.TokenIndex; + listener.ConsumeHiddenToken( t ); + } + else if ( elements[0].Equals( "LT" ) ) + { + IToken t = DeserializeToken( elements, 2 ); + listener.LT( int.Parse( elements[1] ), t ); + } + else if ( elements[0].Equals( "mark" ) ) + { + listener.Mark( int.Parse( elements[1] ) ); + } + else if ( elements[0].Equals( "rewind" ) ) + { + if ( elements[1] != null ) + { + listener.Rewind( int.Parse( elements[1] ) ); + } + else + { + listener.Rewind(); + } + } + else if ( elements[0].Equals( "beginBacktrack" ) ) + { + listener.BeginBacktrack( int.Parse( elements[1] ) ); + } + else if ( elements[0].Equals( "endBacktrack" ) ) + { + int level = int.Parse( elements[1] ); + int successI = int.Parse( elements[2] ); + listener.EndBacktrack( level, successI == DebugEventListenerConstants.True ); + } + else if ( elements[0].Equals( "exception" ) ) + { +#if true + throw new System.NotImplementedException(); +#else + string excName = elements[1]; + string indexS = elements[2]; + string lineS = elements[3]; + string posS = elements[4]; + Class excClass = null; + try + { + excClass = Class.forName( excName ); + RecognitionException e = + (RecognitionException)excClass.newInstance(); + e.index = int.Parse( indexS ); + e.line = int.Parse( lineS ); + e.charPositionInLine = int.Parse( posS ); + listener.recognitionException( e ); + } + catch ( ClassNotFoundException cnfe ) + { + Console.Error.println( "can't find class " + cnfe ); + cnfe.printStackTrace( Console.Error ); + } + catch ( InstantiationException ie ) + { + Console.Error.println( "can't instantiate class " + ie ); + ie.printStackTrace( Console.Error ); + } + catch ( IllegalAccessException iae ) + { + Console.Error.println( "can't access class " + iae ); + iae.printStackTrace( Console.Error ); + } +#endif + } + else if ( elements[0].Equals( "beginResync" ) ) + { + listener.BeginResync(); + } + else if ( elements[0].Equals( "endResync" ) ) + { + listener.EndResync(); + } + else if ( elements[0].Equals( "terminate" ) ) + { + listener.Terminate(); + } + else if ( elements[0].Equals( "semanticPredicate" ) ) + { + bool result = bool.Parse( elements[1] ); + string predicateText = elements[2]; + predicateText = UnEscapeNewlines( predicateText ); + listener.SemanticPredicate( result, + predicateText ); + } + else if ( elements[0].Equals( "consumeNode" ) ) + { + ProxyTree node = DeserializeNode( elements, 1 ); + listener.ConsumeNode( node ); + } + else if ( elements[0].Equals( "LN" ) ) + { + int i = int.Parse( elements[1] ); + ProxyTree node = DeserializeNode( elements, 2 ); + listener.LT( i, node ); + } + else if ( elements[0].Equals( "createNodeFromTokenElements" ) ) + { + int ID = int.Parse( elements[1] ); + int type = int.Parse( elements[2] ); + string text = elements[3]; + text = UnEscapeNewlines( text ); + ProxyTree node = new ProxyTree( ID, type, -1, -1, -1, text ); + listener.CreateNode( node ); + } + else if ( elements[0].Equals( "createNode" ) ) + { + int ID = int.Parse( elements[1] ); + int tokenIndex = int.Parse( elements[2] ); + // create dummy node/token filled with ID, tokenIndex + ProxyTree node = new ProxyTree( ID ); + ProxyToken token = new ProxyToken( tokenIndex ); + listener.CreateNode( node, token ); + } + else if ( elements[0].Equals( "nilNode" ) ) + { + int ID = int.Parse( elements[1] ); + ProxyTree node = new ProxyTree( ID ); + listener.NilNode( node ); + } + else if ( elements[0].Equals( "errorNode" ) ) + { + // TODO: do we need a special tree here? + int ID = int.Parse( elements[1] ); + int type = int.Parse( elements[2] ); + string text = elements[3]; + text = UnEscapeNewlines( text ); + ProxyTree node = new ProxyTree( ID, type, -1, -1, -1, text ); + listener.ErrorNode( node ); + } + else if ( elements[0].Equals( "becomeRoot" ) ) + { + int newRootID = int.Parse( elements[1] ); + int oldRootID = int.Parse( elements[2] ); + ProxyTree newRoot = new ProxyTree( newRootID ); + ProxyTree oldRoot = new ProxyTree( oldRootID ); + listener.BecomeRoot( newRoot, oldRoot ); + } + else if ( elements[0].Equals( "addChild" ) ) + { + int rootID = int.Parse( elements[1] ); + int childID = int.Parse( elements[2] ); + ProxyTree root = new ProxyTree( rootID ); + ProxyTree child = new ProxyTree( childID ); + listener.AddChild( root, child ); + } + else if ( elements[0].Equals( "setTokenBoundaries" ) ) + { + int ID = int.Parse( elements[1] ); + ProxyTree node = new ProxyTree( ID ); + listener.SetTokenBoundaries( + node, + int.Parse( elements[2] ), + int.Parse( elements[3] ) ); + } + else + { + Console.Error.WriteLine( "unknown debug event: " + line ); + } + } + + protected virtual ProxyTree DeserializeNode( string[] elements, int offset ) + { + int ID = int.Parse( elements[offset + 0] ); + int type = int.Parse( elements[offset + 1] ); + int tokenLine = int.Parse( elements[offset + 2] ); + int charPositionInLine = int.Parse( elements[offset + 3] ); + int tokenIndex = int.Parse( elements[offset + 4] ); + string text = elements[offset + 5]; + text = UnEscapeNewlines( text ); + return new ProxyTree( ID, type, tokenLine, charPositionInLine, tokenIndex, text ); + } + + protected virtual ProxyToken DeserializeToken( string[] elements, + int offset ) + { + string indexS = elements[offset + 0]; + string typeS = elements[offset + 1]; + string channelS = elements[offset + 2]; + string lineS = elements[offset + 3]; + string posS = elements[offset + 4]; + string text = elements[offset + 5]; + text = UnEscapeNewlines( text ); + int index = int.Parse( indexS ); + ProxyToken t = + new ProxyToken( index, + int.Parse( typeS ), + int.Parse( channelS ), + int.Parse( lineS ), + int.Parse( posS ), + text ); + return t; + } + + /** <summary>Create a thread to listen to the remote running recognizer</summary> */ + public virtual void Start() + { + System.Threading.Thread t = new System.Threading.Thread( Run ); + t.Start(); + } + + public virtual void Run() + { + EventHandler(); + } + + #region Misc + + public virtual string[] GetEventElements( string @event ) + { + if ( @event == null ) + { + return null; + } + string[] elements = new string[MAX_EVENT_ELEMENTS]; + string str = null; // a string element if present (must be last) + try + { + int firstQuoteIndex = @event.IndexOf( '"' ); + if ( firstQuoteIndex >= 0 ) + { + // treat specially; has a string argument like "a comment\n + // Note that the string is terminated by \n not end quote. + // Easier to parse that way. + string eventWithoutString = @event.Substring( 0, firstQuoteIndex ); + str = @event.Substring( firstQuoteIndex + 1 ); + @event = eventWithoutString; + } + StringTokenizer st = new StringTokenizer( @event, "\t", false ); + int i = 0; + while ( st.hasMoreTokens() ) + { + if ( i >= MAX_EVENT_ELEMENTS ) + { + // ErrorManager.internalError("event has more than "+MAX_EVENT_ELEMENTS+" args: "+event); + return elements; + } + elements[i] = st.nextToken(); + i++; + } + if ( str != null ) + { + elements[i] = str; + } + } + catch ( Exception e ) + { + e.PrintStackTrace( Console.Error ); + } + return elements; + } + + protected virtual string UnEscapeNewlines( string txt ) + { + // this unescape is slow but easy to understand + txt = txt.replaceAll( "%0A", "\n" ); // unescape \n + txt = txt.replaceAll( "%0D", "\r" ); // unescape \r + txt = txt.replaceAll( "%25", "%" ); // undo escaped escape chars + return txt; + } + + public virtual bool TokenIndexesAreInvalid() + { + return false; + //return tokenIndexesInvalid; + } + + #endregion + + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/TraceDebugEventListener.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/TraceDebugEventListener.cs new file mode 100644 index 0000000..c71da4f --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/TraceDebugEventListener.cs @@ -0,0 +1,135 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Debug +{ + using Antlr.Runtime.JavaExtensions; + + using Console = System.Console; + using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor; + + /** <summary>Print out (most of) the events... Useful for debugging, testing...</summary> */ + public class TraceDebugEventListener : BlankDebugEventListener + { + ITreeAdaptor adaptor; + + public TraceDebugEventListener( ITreeAdaptor adaptor ) + { + this.adaptor = adaptor; + } + + public void EnterRule( string ruleName ) + { + Console.Out.WriteLine( "enterRule " + ruleName ); + } + public void ExitRule( string ruleName ) + { + Console.Out.WriteLine( "exitRule " + ruleName ); + } + public override void EnterSubRule( int decisionNumber ) + { + Console.Out.WriteLine( "enterSubRule" ); + } + public override void ExitSubRule( int decisionNumber ) + { + Console.Out.WriteLine( "exitSubRule" ); + } + public override void Location( int line, int pos ) + { + Console.Out.WriteLine( "location " + line + ":" + pos ); + } + + #region Tree parsing stuff + + public override void ConsumeNode( object t ) + { + int ID = adaptor.GetUniqueID( t ); + string text = adaptor.GetText( t ); + int type = adaptor.GetType( t ); + Console.Out.WriteLine( "consumeNode " + ID + " " + text + " " + type ); + } + + public override void LT( int i, object t ) + { + int ID = adaptor.GetUniqueID( t ); + string text = adaptor.GetText( t ); + int type = adaptor.GetType( t ); + Console.Out.WriteLine( "LT " + i + " " + ID + " " + text + " " + type ); + } + + #endregion + + + #region AST stuff + + public override void NilNode( object t ) + { + Console.Out.WriteLine( "nilNode " + adaptor.GetUniqueID( t ) ); + } + + public override void CreateNode( object t ) + { + int ID = adaptor.GetUniqueID( t ); + string text = adaptor.GetText( t ); + int type = adaptor.GetType( t ); + Console.Out.WriteLine( "create " + ID + ": " + text + ", " + type ); + } + + public override void CreateNode( object node, IToken token ) + { + int ID = adaptor.GetUniqueID( node ); + string text = adaptor.GetText( node ); + int tokenIndex = token.TokenIndex; + Console.Out.WriteLine( "create " + ID + ": " + tokenIndex ); + } + + public override void BecomeRoot( object newRoot, object oldRoot ) + { + Console.Out.WriteLine( "becomeRoot " + adaptor.GetUniqueID( newRoot ) + ", " + + adaptor.GetUniqueID( oldRoot ) ); + } + + public override void AddChild( object root, object child ) + { + Console.Out.WriteLine( "addChild " + adaptor.GetUniqueID( root ) + ", " + + adaptor.GetUniqueID( child ) ); + } + + public override void SetTokenBoundaries( object t, int tokenStartIndex, int tokenStopIndex ) + { + Console.Out.WriteLine( "setTokenBoundaries " + adaptor.GetUniqueID( t ) + ", " + + tokenStartIndex + ", " + tokenStopIndex ); + } + + #endregion + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Tracer.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Tracer.cs new file mode 100644 index 0000000..c99d4f7 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Debug/Tracer.cs @@ -0,0 +1,85 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Debug +{ + using Antlr.Runtime.JavaExtensions; + + using Console = System.Console; + + /** <summary> + * The default tracer mimics the traceParser behavior of ANTLR 2.x. + * This listens for debugging events from the parser and implies + * that you cannot debug and trace at the same time. + * </summary> + */ + public class Tracer : BlankDebugEventListener + { + public IIntStream input; + protected int level = 0; + + public Tracer( IIntStream input ) + { + this.input = input; + } + + public virtual void EnterRule( string ruleName ) + { + for ( int i = 1; i <= level; i++ ) + { + Console.Out.Write( " " ); + } + Console.Out.WriteLine( "> " + ruleName + " lookahead(1)=" + GetInputSymbol( 1 ) ); + level++; + } + + public virtual void ExitRule( string ruleName ) + { + level--; + for ( int i = 1; i <= level; i++ ) + { + Console.Out.Write( " " ); + } + Console.Out.WriteLine( "< " + ruleName + " lookahead(1)=" + GetInputSymbol( 1 ) ); + } + + public virtual object GetInputSymbol( int k ) + { + if ( input is ITokenStream ) + { + return ( (ITokenStream)input ).LT( k ); + } + return (char)input.LA( k ); + } + } +} + diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Antlr3.Runtime.JavaExtensions.csproj b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Antlr3.Runtime.JavaExtensions.csproj new file mode 100644 index 0000000..1b4a177 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Antlr3.Runtime.JavaExtensions.csproj @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>9.0.30729</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{A7EEC557-EB14-451C-9616-B7A61F4ECE69}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>Antlr3.Runtime.JavaExtensions</RootNamespace> + <AssemblyName>Antlr3.Runtime.JavaExtensions</AssemblyName> + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + <SccProjectName>SAK</SccProjectName> + <SccLocalPath>SAK</SccLocalPath> + <SccAuxPath>SAK</SccAuxPath> + <SccProvider>SAK</SccProvider> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="System" /> + <Reference Include="System.Core"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Xml.Linq"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Data.DataSetExtensions"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Data" /> + <Reference Include="System.Xml" /> + </ItemGroup> + <ItemGroup> + <Compile Include="DictionaryExtensions.cs" /> + <Compile Include="IOExtensions.cs" /> + <Compile Include="LexerExtensions.cs" /> + <Compile Include="JSystem.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\Antlr3.Runtime\Antlr3.Runtime.csproj"> + <Project>{8FDC0A87-9005-4D5A-AB75-E55CEB575559}</Project> + <Name>Antlr3.Runtime</Name> + </ProjectReference> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project> \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Antlr3.Runtime.JavaExtensions.csproj.vspscc b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Antlr3.Runtime.JavaExtensions.csproj.vspscc new file mode 100644 index 0000000..b27adcc --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Antlr3.Runtime.JavaExtensions.csproj.vspscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "relative:antlr\\main\\runtime\\CSharp3\\Sources\\Antlr3.Runtime.JavaExtensions" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/DictionaryExtensions.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/DictionaryExtensions.cs new file mode 100644 index 0000000..f2f8f84 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/DictionaryExtensions.cs @@ -0,0 +1,102 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if !DEBUG + +using System; +using System.Collections.Generic; +using System.Linq; + +using IDictionary = System.Collections.IDictionary; + +namespace Antlr.Runtime.JavaExtensions +{ + public static class DictionaryExtensions2 + { + [Obsolete] + public static bool containsKey( this IDictionary map, object key ) + { + return map.Contains( key ); + } + + [Obsolete] + public static object get( this IDictionary map, object key ) + { + return map[key]; + } + + [Obsolete] + public static void put( this IDictionary map, object key, object value ) + { + map[key] = value; + } + + [Obsolete] + public static void put<TKey, TValue>( this IDictionary<TKey, TValue> map, TKey key, TValue value ) + { + map[key] = value; + } + + [Obsolete] + public static void put<TKey, TValue>( this Dictionary<TKey, TValue> map, TKey key, TValue value ) + { + map[key] = value; + } + + [Obsolete] + public static HashSet<object> keySet( this IDictionary map ) + { + return new HashSet<object>( map.Keys.Cast<object>() ); + } + + [Obsolete] + public static HashSet<TKey> keySet<TKey, TValue>( this IDictionary<TKey, TValue> map ) + { + return new HashSet<TKey>( map.Keys ); + } + + // disambiguates for Dictionary, which implements both IDictionary<T,K> and IDictionary + [Obsolete] + public static HashSet<TKey> keySet<TKey, TValue>( this Dictionary<TKey, TValue> map ) + { + return new HashSet<TKey>( map.Keys ); + } + + [Obsolete] + public static HashSet<object> keySet<TKey, TValue>( this SortedList<TKey, TValue> map ) + { + return new HashSet<object>( map.Keys.Cast<object>() ); + } + } +} + +#endif diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/IOExtensions.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/IOExtensions.cs new file mode 100644 index 0000000..540af55 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/IOExtensions.cs @@ -0,0 +1,94 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if !DEBUG + +using System; + +using TextReader = System.IO.TextReader; +using TextWriter = System.IO.TextWriter; + +namespace Antlr.Runtime.JavaExtensions +{ + public static class IOExtensions + { + [Obsolete] + public static void close( this TextReader reader ) + { + reader.Close(); + } + + [Obsolete] + public static void close( this TextWriter writer ) + { + writer.Close(); + } + + [Obsolete] + public static void print<T>( this TextWriter writer, T value ) + { + writer.Write( value ); + } + + [Obsolete] + public static void println( this TextWriter writer ) + { + writer.WriteLine(); + } + + [Obsolete] + public static void println<T>( this TextWriter writer, T value ) + { + writer.WriteLine( value ); + } + + [Obsolete] + public static void write<T>( this TextWriter writer, T value ) + { + writer.Write( value ); + } + + [Obsolete] + public static int read( this TextReader reader, char[] buffer, int index, int count ) + { + return reader.Read( buffer, index, count ); + } + + [Obsolete] + public static string readLine( this TextReader reader ) + { + return reader.ReadLine(); + } + } +} + +#endif diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/JSystem.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/JSystem.cs new file mode 100644 index 0000000..2c27987 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/JSystem.cs @@ -0,0 +1,89 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if !DEBUG +namespace Antlr.Runtime.JavaExtensions +{ + using System; + using System.IO; + + public static class JSystem + { + [Obsolete] + public static TextWriter err + { + get + { + return Console.Error; + } + } + + [Obsolete] + public static TextWriter @out + { + get + { + return Console.Out; + } + } + + [Obsolete] + public static void arraycopy<T>( T[] sourceArray, int sourceIndex, T[] destinationArray, int destinationIndex, int length ) + { + Array.Copy( sourceArray, sourceIndex, destinationArray, destinationIndex, length ); + } + + [Obsolete] + public static string getProperty( string name ) + { + switch ( name ) + { + case "file.encoding": + return System.Text.Encoding.Default.WebName; + + case "line.separator": + return Environment.NewLine; + + case "java.io.tmpdir": + return System.IO.Path.GetTempPath(); + + case "user.home": + return Environment.GetFolderPath( Environment.SpecialFolder.Personal ); + + default: + throw new ArgumentException( string.Format( "Unknown system property: '{0}'", name ) ); + } + } + + } +} +#endif diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/LexerExtensions.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/LexerExtensions.cs new file mode 100644 index 0000000..4300b38 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/LexerExtensions.cs @@ -0,0 +1,42 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.JavaExtensions +{ + public static class LexerExtensions + { + public static void skip( this Lexer lexer ) + { + lexer.Skip(); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Properties/AssemblyInfo.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..1e4eaf8 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.JavaExtensions/Properties/AssemblyInfo.cs @@ -0,0 +1,68 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle( "Antlr3.Runtime.JavaExtensions" )] +[assembly: AssemblyDescription( "" )] +[assembly: AssemblyConfiguration( "" )] +[assembly: AssemblyCompany( "Pixel Mine, Inc." )] +[assembly: AssemblyProduct( "Antlr3.Runtime.JavaExtensions" )] +[assembly: AssemblyCopyright( "Copyright © Pixel Mine 2009" )] +[assembly: AssemblyTrademark( "" )] +[assembly: AssemblyCulture( "" )] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible( false )] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid( "ad48c7f7-0b1d-4b1e-9602-83425cb5699f" )] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion( "1.0.0.0" )] +[assembly: AssemblyFileVersion( "1.0.0.0" )] diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Antlr3.Runtime.Test.csproj b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Antlr3.Runtime.Test.csproj new file mode 100644 index 0000000..e569407 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Antlr3.Runtime.Test.csproj @@ -0,0 +1,184 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>9.0.30729</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{19B965DE-5100-4064-A580-159644F6980E}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>Antlr3.Runtime.Test</RootNamespace> + <AssemblyName>Antlr3.Runtime.Test</AssemblyName> + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + <SccProjectName>SAK</SccProjectName> + <SccLocalPath>SAK</SccLocalPath> + <SccAuxPath>SAK</SccAuxPath> + <SccProvider>SAK</SccProvider> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="System" /> + <Reference Include="System.Core"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Xml.Linq"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Data.DataSetExtensions"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Data" /> + <Reference Include="System.Xml" /> + <Reference Include="vjslib" /> + </ItemGroup> + <ItemGroup> + <Compile Include="Properties\AssemblyInfo.cs" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\Antlr3.Runtime.Debug\Antlr3.Runtime.Debug.csproj"> + <Project>{5EE27A90-B023-42C9-AAF1-52B0424C5D0B}</Project> + <Name>Antlr3.Runtime.Debug</Name> + </ProjectReference> + <ProjectReference Include="..\Antlr3.Runtime.JavaExtensions\Antlr3.Runtime.JavaExtensions.csproj"> + <Project>{A7EEC557-EB14-451C-9616-B7A61F4ECE69}</Project> + <Name>Antlr3.Runtime.JavaExtensions</Name> + </ProjectReference> + <ProjectReference Include="..\Antlr3.Runtime\Antlr3.Runtime.csproj"> + <Project>{8FDC0A87-9005-4D5A-AB75-E55CEB575559}</Project> + <Name>Antlr3.Runtime</Name> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <Antlr3 Include="JavaCompat\Expr.g3"> + <OutputFiles>JavaCompat\ExprLexer.cs;JavaCompat\ExprParser.cs;JavaCompat\Expr.tokens</OutputFiles> + </Antlr3> + <Compile Include="JavaCompat\ExprLexer.cs"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>Expr.g3</DependentUpon> + </Compile> + <Compile Include="JavaCompat\ExprParser.cs"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>Expr.g3</DependentUpon> + </Compile> + </ItemGroup> + <ItemGroup> + <Antlr3 Include="BuildOptions\DebugGrammar.g3"> + <GrammarOptions>-debug</GrammarOptions> + <OutputFiles>BuildOptions\DebugGrammarLexer.cs;BuildOptions\DebugGrammarParser.cs;BuildOptions\DebugGrammar.tokens</OutputFiles> + </Antlr3> + <Compile Include="BuildOptions\DebugGrammarLexer.cs"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>DebugGrammar.g3</DependentUpon> + </Compile> + <Compile Include="BuildOptions\DebugGrammarLexerHelper.cs"> + <DependentUpon>DebugGrammar.g3</DependentUpon> + </Compile> + <Compile Include="BuildOptions\DebugGrammarParser.cs"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>DebugGrammar.g3</DependentUpon> + </Compile> + <Compile Include="BuildOptions\DebugGrammarParserHelper.cs"> + <DependentUpon>DebugGrammar.g3</DependentUpon> + </Compile> + </ItemGroup> + <ItemGroup> + <Antlr3 Include="BuildOptions\DebugTreeGrammar.g3"> + <GrammarOptions>-debug</GrammarOptions> + <OutputFiles>BuildOptions\DebugTreeGrammar.cs;BuildOptions\DebugTreeGrammar.tokens</OutputFiles> + </Antlr3> + <Compile Include="BuildOptions\DebugTreeGrammar.cs"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>DebugTreeGrammar.g3</DependentUpon> + </Compile> + <Compile Include="BuildOptions\DebugTreeGrammarHelper.cs"> + <DependentUpon>DebugTreeGrammar.g3</DependentUpon> + </Compile> + </ItemGroup> + <ItemGroup> + <Antlr3 Include="BuildOptions\ProfileGrammar.g3"> + <GrammarOptions>-profile</GrammarOptions> + <OutputFiles>BuildOptions\ProfileGrammarLexer.cs;BuildOptions\ProfileGrammarParser.cs;BuildOptions\ProfileGrammar.tokens</OutputFiles> + </Antlr3> + <None Include="BuildOptions\ProfileGrammarLexer.cs"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>ProfileGrammar.g3</DependentUpon> + </None> + <None Include="BuildOptions\ProfileGrammarLexerHelper.cs"> + <DependentUpon>ProfileGrammar.g3</DependentUpon> + </None> + <None Include="BuildOptions\ProfileGrammarParser.cs"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>ProfileGrammar.g3</DependentUpon> + </None> + <None Include="BuildOptions\ProfileGrammarParserHelper.cs"> + <DependentUpon>ProfileGrammar.g3</DependentUpon> + </None> + </ItemGroup> + <ItemGroup> + <Antlr3 Include="BuildOptions\ProfileTreeGrammar.g3"> + <GrammarOptions>-profile</GrammarOptions> + <OutputFiles>BuildOptions\ProfileTreeGrammar.cs;BuildOptions\ProfileTreeGrammar.tokens</OutputFiles> + </Antlr3> + <None Include="BuildOptions\ProfileTreeGrammar.cs"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>ProfileTreeGrammar.g3</DependentUpon> + </None> + <None Include="BuildOptions\ProfileTreeGrammarHelper.cs"> + <DependentUpon>ProfileTreeGrammar.g3</DependentUpon> + </None> + </ItemGroup> + <PropertyGroup> + <UseHostCompilerIfAvailable>False</UseHostCompilerIfAvailable> + </PropertyGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <PropertyGroup> + <Antlr3ToolPath>$(MSBuildProjectDirectory)\..\..\..\..\..\..\antlrcs\main\bin\Bootstrap</Antlr3ToolPath> + <CoreCompileDependsOn>$(CoreCompileDependsOn);GenerateAntlrCode</CoreCompileDependsOn> + <CoreCleanDependsOn>$(CoreCleanDependsOn);CleanAntlrCode</CoreCleanDependsOn> + </PropertyGroup> + <Target Name="GenerateAntlrCode" Inputs="@(Antlr3)" Outputs="%(OutputFiles)"> + <Message Importance="normal" Text="Antlr: Transforming '@(Antlr3)' to '%(Antlr3.OutputFiles)'" /> + <!--<Exec Command="java -cp %22$(Antlr3ToolPath)\antlr3.jar;$(Antlr3ToolPath)\antlr-2.7.7.jar;$(Antlr3ToolPath)\stringtemplate-3.1b1.jar%22 org.antlr.Tool -lib %22%(RootDir)%(Directory).%22 -message-format vs2005 @(Antlr3)" Outputs="%(OutputFiles)" />--> + <Exec Command="%22$(Antlr3ToolPath)\Antlr3.exe%22 -Xconversiontimeout 60000 -lib %22%(RootDir)%(Directory).%22 -message-format vs2005 %(Antlr3.GrammarOptions) @(Antlr3)" Outputs="%(OutputFiles)" /> + </Target> + <Target Name="CleanAntlrCode"> + <ItemGroup> + <_CleanAntlrFileWrites Include="@(Antlr3->'%(RelativeDir)%(Filename).tokens')" /> + </ItemGroup> + <Message Importance="normal" Text="Antlr: Deleting output files '@(_CleanAntlrFileWrites)'" /> + <!--<Delete Files="@(_CleanAntlrFileWrites)" />--> + </Target> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project> \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Antlr3.Runtime.Test.csproj.vspscc b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Antlr3.Runtime.Test.csproj.vspscc new file mode 100644 index 0000000..162a4c7 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Antlr3.Runtime.Test.csproj.vspscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "relative:antlr\\main\\runtime\\CSharp3\\Sources\\Antlr3.Runtime.Test" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammar.g3 b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammar.g3 new file mode 100644 index 0000000..36b1884 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammar.g3 @@ -0,0 +1,100 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +grammar DebugGrammar; + +options +{ + language=CSharp3; + output=AST; + ASTLabelType=CommonTree; +} + +tokens +{ + // define pseudo-operations + FUNC; + CALL; +} + +// START:stat +prog: ( stat )* + ; + +stat: expr NEWLINE -> expr + | ID '=' expr NEWLINE -> ^('=' ID expr) + | func NEWLINE -> func + | NEWLINE -> // ignore + ; + +func: ID '(' formalPar ')' '=' expr -> ^(FUNC ID formalPar expr) + ; + finally { + functionDefinitions.Add($func.tree); + } + +formalPar + : ID + | INT + ; + +// END:stat + +// START:expr +expr: multExpr (('+'^|'-'^) multExpr)* + ; + +multExpr + : atom (('*'|'/'|'%')^ atom)* + ; + +atom: INT + | ID + | '(' expr ')' -> expr + | ID '(' expr ')' -> ^(CALL ID expr) + ; +// END:expr + +// START:tokens +ID : ('a'..'z'|'A'..'Z')+ + ; + +INT : '0'..'9'+ + ; + +NEWLINE + : '\r'? '\n' + ; + +WS : (' '|'\t')+ { Skip(); } + ; +// END:tokens diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarLexer.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarLexer.cs new file mode 100644 index 0000000..b707696 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarLexer.cs @@ -0,0 +1,691 @@ +// $ANTLR 3.1.2 BuildOptions\\DebugGrammar.g3 2009-03-16 13:19:17 + +// The variable 'variable' is assigned but its value is never used. +#pragma warning disable 219 +// Unreachable code detected. +#pragma warning disable 162 + + +using System.Collections.Generic; +using Antlr.Runtime; +using Stack = System.Collections.Generic.Stack<object>; +using List = System.Collections.IList; +using ArrayList = System.Collections.Generic.List<object>; + +public partial class DebugGrammarLexer : Lexer +{ + public const int EOF=-1; + public const int T__10=10; + public const int T__11=11; + public const int T__12=12; + public const int T__13=13; + public const int T__14=14; + public const int T__15=15; + public const int T__16=16; + public const int T__17=17; + public const int CALL=4; + public const int FUNC=5; + public const int ID=6; + public const int INT=7; + public const int NEWLINE=8; + public const int WS=9; + + // delegates + // delegators + + public DebugGrammarLexer() {} + public DebugGrammarLexer( ICharStream input ) + : this( input, new RecognizerSharedState() ) + { + } + public DebugGrammarLexer( ICharStream input, RecognizerSharedState state ) + : base( input, state ) + { + + } + public override string GrammarFileName { get { return "BuildOptions\\DebugGrammar.g3"; } } + + // $ANTLR start "T__10" + private void mT__10() + { + try + { + int _type = T__10; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\DebugGrammar.g3:7:9: ( '-' ) + // BuildOptions\\DebugGrammar.g3:7:9: '-' + { + Match('-'); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__10" + + // $ANTLR start "T__11" + private void mT__11() + { + try + { + int _type = T__11; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\DebugGrammar.g3:8:9: ( '%' ) + // BuildOptions\\DebugGrammar.g3:8:9: '%' + { + Match('%'); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__11" + + // $ANTLR start "T__12" + private void mT__12() + { + try + { + int _type = T__12; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\DebugGrammar.g3:9:9: ( '(' ) + // BuildOptions\\DebugGrammar.g3:9:9: '(' + { + Match('('); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__12" + + // $ANTLR start "T__13" + private void mT__13() + { + try + { + int _type = T__13; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\DebugGrammar.g3:10:9: ( ')' ) + // BuildOptions\\DebugGrammar.g3:10:9: ')' + { + Match(')'); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__13" + + // $ANTLR start "T__14" + private void mT__14() + { + try + { + int _type = T__14; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\DebugGrammar.g3:11:9: ( '*' ) + // BuildOptions\\DebugGrammar.g3:11:9: '*' + { + Match('*'); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__14" + + // $ANTLR start "T__15" + private void mT__15() + { + try + { + int _type = T__15; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\DebugGrammar.g3:12:9: ( '/' ) + // BuildOptions\\DebugGrammar.g3:12:9: '/' + { + Match('/'); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__15" + + // $ANTLR start "T__16" + private void mT__16() + { + try + { + int _type = T__16; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\DebugGrammar.g3:13:9: ( '+' ) + // BuildOptions\\DebugGrammar.g3:13:9: '+' + { + Match('+'); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__16" + + // $ANTLR start "T__17" + private void mT__17() + { + try + { + int _type = T__17; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\DebugGrammar.g3:14:9: ( '=' ) + // BuildOptions\\DebugGrammar.g3:14:9: '=' + { + Match('='); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__17" + + // $ANTLR start "ID" + private void mID() + { + try + { + int _type = ID; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\DebugGrammar.g3:88:9: ( ( 'a' .. 'z' | 'A' .. 'Z' )+ ) + // BuildOptions\\DebugGrammar.g3:88:9: ( 'a' .. 'z' | 'A' .. 'Z' )+ + { + // BuildOptions\\DebugGrammar.g3:88:9: ( 'a' .. 'z' | 'A' .. 'Z' )+ + int cnt1=0; + for ( ; ; ) + { + int alt1=2; + int LA1_0 = input.LA(1); + + if ( ((LA1_0>='A' && LA1_0<='Z')||(LA1_0>='a' && LA1_0<='z')) ) + { + alt1=1; + } + + + switch ( alt1 ) + { + case 1: + // BuildOptions\\DebugGrammar.g3: + { + input.Consume(); + + + } + break; + + default: + if ( cnt1 >= 1 ) + goto loop1; + + EarlyExitException eee1 = new EarlyExitException( 1, input ); + throw eee1; + } + cnt1++; + } + loop1: + ; + + + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "ID" + + // $ANTLR start "INT" + private void mINT() + { + try + { + int _type = INT; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\DebugGrammar.g3:91:9: ( ( '0' .. '9' )+ ) + // BuildOptions\\DebugGrammar.g3:91:9: ( '0' .. '9' )+ + { + // BuildOptions\\DebugGrammar.g3:91:9: ( '0' .. '9' )+ + int cnt2=0; + for ( ; ; ) + { + int alt2=2; + int LA2_0 = input.LA(1); + + if ( ((LA2_0>='0' && LA2_0<='9')) ) + { + alt2=1; + } + + + switch ( alt2 ) + { + case 1: + // BuildOptions\\DebugGrammar.g3: + { + input.Consume(); + + + } + break; + + default: + if ( cnt2 >= 1 ) + goto loop2; + + EarlyExitException eee2 = new EarlyExitException( 2, input ); + throw eee2; + } + cnt2++; + } + loop2: + ; + + + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "INT" + + // $ANTLR start "NEWLINE" + private void mNEWLINE() + { + try + { + int _type = NEWLINE; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\DebugGrammar.g3:95:7: ( ( '\\r' )? '\\n' ) + // BuildOptions\\DebugGrammar.g3:95:7: ( '\\r' )? '\\n' + { + // BuildOptions\\DebugGrammar.g3:95:7: ( '\\r' )? + int alt3=2; + int LA3_0 = input.LA(1); + + if ( (LA3_0=='\r') ) + { + alt3=1; + } + switch ( alt3 ) + { + case 1: + // BuildOptions\\DebugGrammar.g3:95:0: '\\r' + { + Match('\r'); + + } + break; + + } + + Match('\n'); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "NEWLINE" + + // $ANTLR start "WS" + private void mWS() + { + try + { + int _type = WS; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\DebugGrammar.g3:98:9: ( ( ' ' | '\\t' )+ ) + // BuildOptions\\DebugGrammar.g3:98:9: ( ' ' | '\\t' )+ + { + // BuildOptions\\DebugGrammar.g3:98:9: ( ' ' | '\\t' )+ + int cnt4=0; + for ( ; ; ) + { + int alt4=2; + int LA4_0 = input.LA(1); + + if ( (LA4_0=='\t'||LA4_0==' ') ) + { + alt4=1; + } + + + switch ( alt4 ) + { + case 1: + // BuildOptions\\DebugGrammar.g3: + { + input.Consume(); + + + } + break; + + default: + if ( cnt4 >= 1 ) + goto loop4; + + EarlyExitException eee4 = new EarlyExitException( 4, input ); + throw eee4; + } + cnt4++; + } + loop4: + ; + + + Skip(); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "WS" + + public override void mTokens() + { + // BuildOptions\\DebugGrammar.g3:1:10: ( T__10 | T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | ID | INT | NEWLINE | WS ) + int alt5=12; + switch ( input.LA(1) ) + { + case '-': + { + alt5=1; + } + break; + case '%': + { + alt5=2; + } + break; + case '(': + { + alt5=3; + } + break; + case ')': + { + alt5=4; + } + break; + case '*': + { + alt5=5; + } + break; + case '/': + { + alt5=6; + } + break; + case '+': + { + alt5=7; + } + break; + case '=': + { + alt5=8; + } + break; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + { + alt5=9; + } + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + alt5=10; + } + break; + case '\n': + case '\r': + { + alt5=11; + } + break; + case '\t': + case ' ': + { + alt5=12; + } + break; + default: + { + NoViableAltException nvae = new NoViableAltException("", 5, 0, input); + + throw nvae; + } + } + + switch ( alt5 ) + { + case 1: + // BuildOptions\\DebugGrammar.g3:1:10: T__10 + { + mT__10(); + + } + break; + case 2: + // BuildOptions\\DebugGrammar.g3:1:16: T__11 + { + mT__11(); + + } + break; + case 3: + // BuildOptions\\DebugGrammar.g3:1:22: T__12 + { + mT__12(); + + } + break; + case 4: + // BuildOptions\\DebugGrammar.g3:1:28: T__13 + { + mT__13(); + + } + break; + case 5: + // BuildOptions\\DebugGrammar.g3:1:34: T__14 + { + mT__14(); + + } + break; + case 6: + // BuildOptions\\DebugGrammar.g3:1:40: T__15 + { + mT__15(); + + } + break; + case 7: + // BuildOptions\\DebugGrammar.g3:1:46: T__16 + { + mT__16(); + + } + break; + case 8: + // BuildOptions\\DebugGrammar.g3:1:52: T__17 + { + mT__17(); + + } + break; + case 9: + // BuildOptions\\DebugGrammar.g3:1:58: ID + { + mID(); + + } + break; + case 10: + // BuildOptions\\DebugGrammar.g3:1:61: INT + { + mINT(); + + } + break; + case 11: + // BuildOptions\\DebugGrammar.g3:1:65: NEWLINE + { + mNEWLINE(); + + } + break; + case 12: + // BuildOptions\\DebugGrammar.g3:1:73: WS + { + mWS(); + + } + break; + + } + + } + + + #region DFA + + protected override void InitDFAs() + { + base.InitDFAs(); + } + + + #endregion + +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarLexerHelper.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarLexerHelper.cs new file mode 100644 index 0000000..7271295 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarLexerHelper.cs @@ -0,0 +1,32 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarParser.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarParser.cs new file mode 100644 index 0000000..87710f6 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarParser.cs @@ -0,0 +1,1551 @@ +// $ANTLR 3.1.2 BuildOptions\\DebugGrammar.g3 2009-03-16 13:19:16 + +// The variable 'variable' is assigned but its value is never used. +#pragma warning disable 219 +// Unreachable code detected. +#pragma warning disable 162 + + +using System.Collections.Generic; +using Antlr.Runtime; +using Stack = System.Collections.Generic.Stack<object>; +using List = System.Collections.IList; +using ArrayList = System.Collections.Generic.List<object>; + +using Antlr.Runtime.Debug; +using IOException = System.IO.IOException; + +using Antlr.Runtime.Tree; +using RewriteRuleITokenStream = Antlr.Runtime.Tree.RewriteRuleTokenStream; + +public partial class DebugGrammarParser : DebugParser +{ + public static readonly string[] tokenNames = new string[] { + "<invalid>", "<EOR>", "<DOWN>", "<UP>", "CALL", "FUNC", "ID", "INT", "NEWLINE", "WS", "'-'", "'%'", "'('", "')'", "'*'", "'/'", "'+'", "'='" + }; + public const int EOF=-1; + public const int T__10=10; + public const int T__11=11; + public const int T__12=12; + public const int T__13=13; + public const int T__14=14; + public const int T__15=15; + public const int T__16=16; + public const int T__17=17; + public const int CALL=4; + public const int FUNC=5; + public const int ID=6; + public const int INT=7; + public const int NEWLINE=8; + public const int WS=9; + + // delegates + // delegators + + public static readonly string[] ruleNames = + new string[] + { + "invalidRule", "atom", "expr", "formalPar", "func", "multExpr", "prog", + "stat" + }; + + int ruleLevel = 0; + public virtual int RuleLevel { get { return ruleLevel; } } + public virtual void IncRuleLevel() { ruleLevel++; } + public virtual void DecRuleLevel() { ruleLevel--; } + public DebugGrammarParser( ITokenStream input ) + : this( input, DebugEventSocketProxy.DEFAULT_DEBUGGER_PORT, new RecognizerSharedState() ) + { + } + public DebugGrammarParser( ITokenStream input, int port, RecognizerSharedState state ) + : base( input, state ) + { + DebugEventSocketProxy proxy = new DebugEventSocketProxy( this, port, adaptor ); + DebugListener = proxy; + // TODO: I had to manually correct this line from ITokenStream + TokenStream = new DebugTokenStream( input, proxy ); + try + { + proxy.Handshake(); + } + catch ( IOException ioe ) + { + ReportError( ioe ); + } + ITreeAdaptor adap = new CommonTreeAdaptor(); + TreeAdaptor = adap; + proxy.TreeAdaptor = adap; + } + public DebugGrammarParser( ITokenStream input, IDebugEventListener dbg ) + : base( input, dbg ) + { + + + ITreeAdaptor adap = new CommonTreeAdaptor(); + TreeAdaptor = adap; + + } + protected virtual bool EvalPredicate( bool result, string predicate ) + { + dbg.SemanticPredicate( result, predicate ); + return result; + } + + protected DebugTreeAdaptor adaptor; + public ITreeAdaptor TreeAdaptor + { + get + { + return adaptor; + } + set + { + this.adaptor = new DebugTreeAdaptor(dbg,adaptor); + + } + } + + + public override string[] GetTokenNames() { return DebugGrammarParser.tokenNames; } + public override string GrammarFileName { get { return "BuildOptions\\DebugGrammar.g3"; } } + + + #region Rules + public class prog_return : ParserRuleReturnScope + { + public CommonTree tree; + public override object Tree { get { return tree; } } + } + + // $ANTLR start "prog" + // BuildOptions\\DebugGrammar.g3:50:0: prog : ( stat )* ; + private DebugGrammarParser.prog_return prog( ) + { + DebugGrammarParser.prog_return retval = new DebugGrammarParser.prog_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + DebugGrammarParser.stat_return stat1 = default(DebugGrammarParser.stat_return); + + + try + { + dbg.EnterRule( GrammarFileName, "prog" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 50, -1 ); + + try + { + // BuildOptions\\DebugGrammar.g3:50:7: ( ( stat )* ) + dbg.EnterAlt( 1 ); + + // BuildOptions\\DebugGrammar.g3:50:7: ( stat )* + { + root_0 = (CommonTree)adaptor.Nil(); + + dbg.Location( 50, 6 ); + // BuildOptions\\DebugGrammar.g3:50:7: ( stat )* + try + { + dbg.EnterSubRule( 1 ); + + for ( ; ; ) + { + int alt1=2; + try + { + dbg.EnterDecision( 1 ); + + int LA1_0 = input.LA(1); + + if ( ((LA1_0>=ID && LA1_0<=NEWLINE)||LA1_0==12) ) + { + alt1=1; + } + + + } + finally + { + dbg.ExitDecision( 1 ); + } + + switch ( alt1 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\DebugGrammar.g3:50:9: stat + { + dbg.Location( 50, 8 ); + PushFollow(Follow._stat_in_prog53); + stat1=stat(); + + state._fsp--; + + adaptor.AddChild(root_0, stat1.Tree); + + } + break; + + default: + goto loop1; + } + } + + loop1: + ; + + } + finally + { + dbg.ExitSubRule( 1 ); + } + + + } + + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); + adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); + + } + finally + { + } + dbg.Location(51, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "prog" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return retval; + } + // $ANTLR end "prog" + + public class stat_return : ParserRuleReturnScope + { + public CommonTree tree; + public override object Tree { get { return tree; } } + } + + // $ANTLR start "stat" + // BuildOptions\\DebugGrammar.g3:53:0: stat : ( expr NEWLINE -> expr | ID '=' expr NEWLINE -> ^( '=' ID expr ) | func NEWLINE -> func | NEWLINE ->); + private DebugGrammarParser.stat_return stat( ) + { + DebugGrammarParser.stat_return retval = new DebugGrammarParser.stat_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + IToken NEWLINE3=null; + IToken ID4=null; + IToken char_literal5=null; + IToken NEWLINE7=null; + IToken NEWLINE9=null; + IToken NEWLINE10=null; + DebugGrammarParser.expr_return expr2 = default(DebugGrammarParser.expr_return); + DebugGrammarParser.expr_return expr6 = default(DebugGrammarParser.expr_return); + DebugGrammarParser.func_return func8 = default(DebugGrammarParser.func_return); + + CommonTree NEWLINE3_tree=null; + CommonTree ID4_tree=null; + CommonTree char_literal5_tree=null; + CommonTree NEWLINE7_tree=null; + CommonTree NEWLINE9_tree=null; + CommonTree NEWLINE10_tree=null; + RewriteRuleITokenStream stream_NEWLINE=new RewriteRuleITokenStream(adaptor,"token NEWLINE"); + RewriteRuleITokenStream stream_ID=new RewriteRuleITokenStream(adaptor,"token ID"); + RewriteRuleITokenStream stream_17=new RewriteRuleITokenStream(adaptor,"token 17"); + RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr"); + RewriteRuleSubtreeStream stream_func=new RewriteRuleSubtreeStream(adaptor,"rule func"); + try + { + dbg.EnterRule( GrammarFileName, "stat" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 53, -1 ); + + try + { + // BuildOptions\\DebugGrammar.g3:53:9: ( expr NEWLINE -> expr | ID '=' expr NEWLINE -> ^( '=' ID expr ) | func NEWLINE -> func | NEWLINE ->) + int alt2=4; + try + { + dbg.EnterDecision( 2 ); + + try + { + isCyclicDecision = true; + alt2 = dfa2.Predict(input); + } + catch ( NoViableAltException nvae ) + { + dbg.RecognitionException( nvae ); + throw nvae; + } + } + finally + { + dbg.ExitDecision( 2 ); + } + + switch ( alt2 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\DebugGrammar.g3:53:9: expr NEWLINE + { + dbg.Location( 53, 8 ); + PushFollow(Follow._expr_in_stat70); + expr2=expr(); + + state._fsp--; + + stream_expr.Add(expr2.Tree); + dbg.Location( 53, 13 ); + NEWLINE3=(IToken)Match(input,NEWLINE,Follow._NEWLINE_in_stat72); + stream_NEWLINE.Add(NEWLINE3); + + + + { + // AST REWRITE + // elements: expr + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.Nil(); + // 53:41: -> expr + { + dbg.Location( 53, 43 ); + adaptor.AddChild(root_0, stream_expr.NextTree()); + + } + + retval.tree = root_0; + } + + } + break; + case 2: + dbg.EnterAlt( 2 ); + + // BuildOptions\\DebugGrammar.g3:54:9: ID '=' expr NEWLINE + { + dbg.Location( 54, 8 ); + ID4=(IToken)Match(input,ID,Follow._ID_in_stat105); + stream_ID.Add(ID4); + + dbg.Location( 54, 11 ); + char_literal5=(IToken)Match(input,17,Follow._17_in_stat107); + stream_17.Add(char_literal5); + + dbg.Location( 54, 15 ); + PushFollow(Follow._expr_in_stat109); + expr6=expr(); + + state._fsp--; + + stream_expr.Add(expr6.Tree); + dbg.Location( 54, 20 ); + NEWLINE7=(IToken)Match(input,NEWLINE,Follow._NEWLINE_in_stat111); + stream_NEWLINE.Add(NEWLINE7); + + + + { + // AST REWRITE + // elements: 17, ID, expr + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.Nil(); + // 54:41: -> ^( '=' ID expr ) + { + dbg.Location( 54, 43 ); + // BuildOptions\\DebugGrammar.g3:54:44: ^( '=' ID expr ) + { + CommonTree root_1 = (CommonTree)adaptor.Nil(); + dbg.Location( 54, 45 ); + root_1 = (CommonTree)adaptor.BecomeRoot(stream_17.NextNode(), root_1); + + dbg.Location( 54, 49 ); + adaptor.AddChild(root_1, stream_ID.NextNode()); + dbg.Location( 54, 52 ); + adaptor.AddChild(root_1, stream_expr.NextTree()); + + adaptor.AddChild(root_0, root_1); + } + + } + + retval.tree = root_0; + } + + } + break; + case 3: + dbg.EnterAlt( 3 ); + + // BuildOptions\\DebugGrammar.g3:55:9: func NEWLINE + { + dbg.Location( 55, 8 ); + PushFollow(Follow._func_in_stat143); + func8=func(); + + state._fsp--; + + stream_func.Add(func8.Tree); + dbg.Location( 55, 13 ); + NEWLINE9=(IToken)Match(input,NEWLINE,Follow._NEWLINE_in_stat145); + stream_NEWLINE.Add(NEWLINE9); + + + + { + // AST REWRITE + // elements: func + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.Nil(); + // 55:41: -> func + { + dbg.Location( 55, 43 ); + adaptor.AddChild(root_0, stream_func.NextTree()); + + } + + retval.tree = root_0; + } + + } + break; + case 4: + dbg.EnterAlt( 4 ); + + // BuildOptions\\DebugGrammar.g3:56:9: NEWLINE + { + dbg.Location( 56, 8 ); + NEWLINE10=(IToken)Match(input,NEWLINE,Follow._NEWLINE_in_stat178); + stream_NEWLINE.Add(NEWLINE10); + + + + { + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.Nil(); + // 56:41: -> + { + dbg.Location( 57, 4 ); + root_0 = null; + } + + retval.tree = root_0; + } + + } + break; + + } + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); + adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); + + } + finally + { + } + dbg.Location(57, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "stat" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return retval; + } + // $ANTLR end "stat" + + public class func_return : ParserRuleReturnScope + { + public CommonTree tree; + public override object Tree { get { return tree; } } + } + + // $ANTLR start "func" + // BuildOptions\\DebugGrammar.g3:59:0: func : ID '(' formalPar ')' '=' expr -> ^( FUNC ID formalPar expr ) ; + private DebugGrammarParser.func_return func( ) + { + DebugGrammarParser.func_return retval = new DebugGrammarParser.func_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + IToken ID11=null; + IToken char_literal12=null; + IToken char_literal14=null; + IToken char_literal15=null; + DebugGrammarParser.formalPar_return formalPar13 = default(DebugGrammarParser.formalPar_return); + DebugGrammarParser.expr_return expr16 = default(DebugGrammarParser.expr_return); + + CommonTree ID11_tree=null; + CommonTree char_literal12_tree=null; + CommonTree char_literal14_tree=null; + CommonTree char_literal15_tree=null; + RewriteRuleITokenStream stream_ID=new RewriteRuleITokenStream(adaptor,"token ID"); + RewriteRuleITokenStream stream_12=new RewriteRuleITokenStream(adaptor,"token 12"); + RewriteRuleITokenStream stream_13=new RewriteRuleITokenStream(adaptor,"token 13"); + RewriteRuleITokenStream stream_17=new RewriteRuleITokenStream(adaptor,"token 17"); + RewriteRuleSubtreeStream stream_formalPar=new RewriteRuleSubtreeStream(adaptor,"rule formalPar"); + RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr"); + try + { + dbg.EnterRule( GrammarFileName, "func" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 59, -1 ); + + try + { + // BuildOptions\\DebugGrammar.g3:59:9: ( ID '(' formalPar ')' '=' expr -> ^( FUNC ID formalPar expr ) ) + dbg.EnterAlt( 1 ); + + // BuildOptions\\DebugGrammar.g3:59:9: ID '(' formalPar ')' '=' expr + { + dbg.Location( 59, 8 ); + ID11=(IToken)Match(input,ID,Follow._ID_in_func219); + stream_ID.Add(ID11); + + dbg.Location( 59, 12 ); + char_literal12=(IToken)Match(input,12,Follow._12_in_func222); + stream_12.Add(char_literal12); + + dbg.Location( 59, 16 ); + PushFollow(Follow._formalPar_in_func224); + formalPar13=formalPar(); + + state._fsp--; + + stream_formalPar.Add(formalPar13.Tree); + dbg.Location( 59, 26 ); + char_literal14=(IToken)Match(input,13,Follow._13_in_func226); + stream_13.Add(char_literal14); + + dbg.Location( 59, 30 ); + char_literal15=(IToken)Match(input,17,Follow._17_in_func228); + stream_17.Add(char_literal15); + + dbg.Location( 59, 34 ); + PushFollow(Follow._expr_in_func230); + expr16=expr(); + + state._fsp--; + + stream_expr.Add(expr16.Tree); + + + { + // AST REWRITE + // elements: ID, formalPar, expr + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.Nil(); + // 59:41: -> ^( FUNC ID formalPar expr ) + { + dbg.Location( 59, 43 ); + // BuildOptions\\DebugGrammar.g3:59:44: ^( FUNC ID formalPar expr ) + { + CommonTree root_1 = (CommonTree)adaptor.Nil(); + dbg.Location( 59, 45 ); + root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(FUNC, "FUNC"), root_1); + + dbg.Location( 59, 50 ); + adaptor.AddChild(root_1, stream_ID.NextNode()); + dbg.Location( 59, 53 ); + adaptor.AddChild(root_1, stream_formalPar.NextTree()); + dbg.Location( 59, 63 ); + adaptor.AddChild(root_1, stream_expr.NextTree()); + + adaptor.AddChild(root_0, root_1); + } + + } + + retval.tree = root_0; + } + + } + + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); + adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); + + } + finally + { + + functionDefinitions.Add(((CommonTree)retval.tree)); + + } + dbg.Location(60, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "func" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return retval; + } + // $ANTLR end "func" + + public class formalPar_return : ParserRuleReturnScope + { + public CommonTree tree; + public override object Tree { get { return tree; } } + } + + // $ANTLR start "formalPar" + // BuildOptions\\DebugGrammar.g3:65:0: formalPar : ( ID | INT ); + private DebugGrammarParser.formalPar_return formalPar( ) + { + DebugGrammarParser.formalPar_return retval = new DebugGrammarParser.formalPar_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + IToken set17=null; + + CommonTree set17_tree=null; + + try + { + dbg.EnterRule( GrammarFileName, "formalPar" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 65, -1 ); + + try + { + // BuildOptions\\DebugGrammar.g3:66:9: ( ID | INT ) + dbg.EnterAlt( 1 ); + + // BuildOptions\\DebugGrammar.g3: + { + root_0 = (CommonTree)adaptor.Nil(); + + dbg.Location( 66, 8 ); + set17=(IToken)input.LT(1); + if ( (input.LA(1)>=ID && input.LA(1)<=INT) ) + { + input.Consume(); + adaptor.AddChild(root_0, (CommonTree)adaptor.Create(set17)); + state.errorRecovery=false; + } + else + { + MismatchedSetException mse = new MismatchedSetException(null,input); + dbg.RecognitionException( mse ); + throw mse; + } + + + } + + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); + adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); + + } + finally + { + } + dbg.Location(68, 1); + + } + finally + { + dbg.ExitRule( GrammarFileName, "formalPar" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return retval; + } + // $ANTLR end "formalPar" + + public class expr_return : ParserRuleReturnScope + { + public CommonTree tree; + public override object Tree { get { return tree; } } + } + + // $ANTLR start "expr" + // BuildOptions\\DebugGrammar.g3:73:0: expr : multExpr ( ( '+' | '-' ) multExpr )* ; + private DebugGrammarParser.expr_return expr( ) + { + DebugGrammarParser.expr_return retval = new DebugGrammarParser.expr_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + IToken char_literal19=null; + IToken char_literal20=null; + DebugGrammarParser.multExpr_return multExpr18 = default(DebugGrammarParser.multExpr_return); + DebugGrammarParser.multExpr_return multExpr21 = default(DebugGrammarParser.multExpr_return); + + CommonTree char_literal19_tree=null; + CommonTree char_literal20_tree=null; + + try + { + dbg.EnterRule( GrammarFileName, "expr" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 73, -1 ); + + try + { + // BuildOptions\\DebugGrammar.g3:73:9: ( multExpr ( ( '+' | '-' ) multExpr )* ) + dbg.EnterAlt( 1 ); + + // BuildOptions\\DebugGrammar.g3:73:9: multExpr ( ( '+' | '-' ) multExpr )* + { + root_0 = (CommonTree)adaptor.Nil(); + + dbg.Location( 73, 8 ); + PushFollow(Follow._multExpr_in_expr288); + multExpr18=multExpr(); + + state._fsp--; + + adaptor.AddChild(root_0, multExpr18.Tree); + dbg.Location( 73, 17 ); + // BuildOptions\\DebugGrammar.g3:73:18: ( ( '+' | '-' ) multExpr )* + try + { + dbg.EnterSubRule( 4 ); + + for ( ; ; ) + { + int alt4=2; + try + { + dbg.EnterDecision( 4 ); + + int LA4_0 = input.LA(1); + + if ( (LA4_0==10||LA4_0==16) ) + { + alt4=1; + } + + + } + finally + { + dbg.ExitDecision( 4 ); + } + + switch ( alt4 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\DebugGrammar.g3:73:19: ( '+' | '-' ) multExpr + { + dbg.Location( 73, 18 ); + // BuildOptions\\DebugGrammar.g3:73:19: ( '+' | '-' ) + int alt3=2; + try + { + dbg.EnterSubRule( 3 ); + try + { + dbg.EnterDecision( 3 ); + + int LA3_0 = input.LA(1); + + if ( (LA3_0==16) ) + { + alt3=1; + } + else if ( (LA3_0==10) ) + { + alt3=2; + } + else + { + NoViableAltException nvae = new NoViableAltException("", 3, 0, input); + + dbg.RecognitionException( nvae ); + throw nvae; + } + } + finally + { + dbg.ExitDecision( 3 ); + } + + switch ( alt3 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\DebugGrammar.g3:73:20: '+' + { + dbg.Location( 73, 22 ); + char_literal19=(IToken)Match(input,16,Follow._16_in_expr292); + char_literal19_tree = (CommonTree)adaptor.Create(char_literal19); + root_0 = (CommonTree)adaptor.BecomeRoot(char_literal19_tree, root_0); + + + } + break; + case 2: + dbg.EnterAlt( 2 ); + + // BuildOptions\\DebugGrammar.g3:73:25: '-' + { + dbg.Location( 73, 27 ); + char_literal20=(IToken)Match(input,10,Follow._10_in_expr295); + char_literal20_tree = (CommonTree)adaptor.Create(char_literal20); + root_0 = (CommonTree)adaptor.BecomeRoot(char_literal20_tree, root_0); + + + } + break; + + } + } + finally + { + dbg.ExitSubRule( 3 ); + } + + dbg.Location( 73, 30 ); + PushFollow(Follow._multExpr_in_expr299); + multExpr21=multExpr(); + + state._fsp--; + + adaptor.AddChild(root_0, multExpr21.Tree); + + } + break; + + default: + goto loop4; + } + } + + loop4: + ; + + } + finally + { + dbg.ExitSubRule( 4 ); + } + + + } + + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); + adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); + + } + finally + { + } + dbg.Location(74, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "expr" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return retval; + } + // $ANTLR end "expr" + + public class multExpr_return : ParserRuleReturnScope + { + public CommonTree tree; + public override object Tree { get { return tree; } } + } + + // $ANTLR start "multExpr" + // BuildOptions\\DebugGrammar.g3:76:0: multExpr : atom ( ( '*' | '/' | '%' ) atom )* ; + private DebugGrammarParser.multExpr_return multExpr( ) + { + DebugGrammarParser.multExpr_return retval = new DebugGrammarParser.multExpr_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + IToken set23=null; + DebugGrammarParser.atom_return atom22 = default(DebugGrammarParser.atom_return); + DebugGrammarParser.atom_return atom24 = default(DebugGrammarParser.atom_return); + + CommonTree set23_tree=null; + + try + { + dbg.EnterRule( GrammarFileName, "multExpr" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 76, -1 ); + + try + { + // BuildOptions\\DebugGrammar.g3:77:9: ( atom ( ( '*' | '/' | '%' ) atom )* ) + dbg.EnterAlt( 1 ); + + // BuildOptions\\DebugGrammar.g3:77:9: atom ( ( '*' | '/' | '%' ) atom )* + { + root_0 = (CommonTree)adaptor.Nil(); + + dbg.Location( 77, 8 ); + PushFollow(Follow._atom_in_multExpr320); + atom22=atom(); + + state._fsp--; + + adaptor.AddChild(root_0, atom22.Tree); + dbg.Location( 77, 13 ); + // BuildOptions\\DebugGrammar.g3:77:14: ( ( '*' | '/' | '%' ) atom )* + try + { + dbg.EnterSubRule( 5 ); + + for ( ; ; ) + { + int alt5=2; + try + { + dbg.EnterDecision( 5 ); + + int LA5_0 = input.LA(1); + + if ( (LA5_0==11||(LA5_0>=14 && LA5_0<=15)) ) + { + alt5=1; + } + + + } + finally + { + dbg.ExitDecision( 5 ); + } + + switch ( alt5 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\DebugGrammar.g3:77:15: ( '*' | '/' | '%' ) atom + { + dbg.Location( 77, 27 ); + set23=(IToken)input.LT(1); + set23=(IToken)input.LT(1); + if ( input.LA(1)==11||(input.LA(1)>=14 && input.LA(1)<=15) ) + { + input.Consume(); + root_0 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(set23), root_0); + state.errorRecovery=false; + } + else + { + MismatchedSetException mse = new MismatchedSetException(null,input); + dbg.RecognitionException( mse ); + throw mse; + } + + dbg.Location( 77, 29 ); + PushFollow(Follow._atom_in_multExpr332); + atom24=atom(); + + state._fsp--; + + adaptor.AddChild(root_0, atom24.Tree); + + } + break; + + default: + goto loop5; + } + } + + loop5: + ; + + } + finally + { + dbg.ExitSubRule( 5 ); + } + + + } + + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); + adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); + + } + finally + { + } + dbg.Location(78, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "multExpr" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return retval; + } + // $ANTLR end "multExpr" + + public class atom_return : ParserRuleReturnScope + { + public CommonTree tree; + public override object Tree { get { return tree; } } + } + + // $ANTLR start "atom" + // BuildOptions\\DebugGrammar.g3:80:0: atom : ( INT | ID | '(' expr ')' -> expr | ID '(' expr ')' -> ^( CALL ID expr ) ); + private DebugGrammarParser.atom_return atom( ) + { + DebugGrammarParser.atom_return retval = new DebugGrammarParser.atom_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + IToken INT25=null; + IToken ID26=null; + IToken char_literal27=null; + IToken char_literal29=null; + IToken ID30=null; + IToken char_literal31=null; + IToken char_literal33=null; + DebugGrammarParser.expr_return expr28 = default(DebugGrammarParser.expr_return); + DebugGrammarParser.expr_return expr32 = default(DebugGrammarParser.expr_return); + + CommonTree INT25_tree=null; + CommonTree ID26_tree=null; + CommonTree char_literal27_tree=null; + CommonTree char_literal29_tree=null; + CommonTree ID30_tree=null; + CommonTree char_literal31_tree=null; + CommonTree char_literal33_tree=null; + RewriteRuleITokenStream stream_12=new RewriteRuleITokenStream(adaptor,"token 12"); + RewriteRuleITokenStream stream_13=new RewriteRuleITokenStream(adaptor,"token 13"); + RewriteRuleITokenStream stream_ID=new RewriteRuleITokenStream(adaptor,"token ID"); + RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr"); + try + { + dbg.EnterRule( GrammarFileName, "atom" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 80, -1 ); + + try + { + // BuildOptions\\DebugGrammar.g3:80:9: ( INT | ID | '(' expr ')' -> expr | ID '(' expr ')' -> ^( CALL ID expr ) ) + int alt6=4; + try + { + dbg.EnterDecision( 6 ); + + switch ( input.LA(1) ) + { + case INT: + { + alt6=1; + } + break; + case ID: + { + int LA6_2 = input.LA(2); + + if ( (LA6_2==12) ) + { + alt6=4; + } + else if ( (LA6_2==NEWLINE||(LA6_2>=10 && LA6_2<=11)||(LA6_2>=13 && LA6_2<=16)) ) + { + alt6=2; + } + else + { + NoViableAltException nvae = new NoViableAltException("", 6, 2, input); + + dbg.RecognitionException( nvae ); + throw nvae; + } + } + break; + case 12: + { + alt6=3; + } + break; + default: + { + NoViableAltException nvae = new NoViableAltException("", 6, 0, input); + + dbg.RecognitionException( nvae ); + throw nvae; + } + } + + } + finally + { + dbg.ExitDecision( 6 ); + } + + switch ( alt6 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\DebugGrammar.g3:80:9: INT + { + root_0 = (CommonTree)adaptor.Nil(); + + dbg.Location( 80, 8 ); + INT25=(IToken)Match(input,INT,Follow._INT_in_atom348); + INT25_tree = (CommonTree)adaptor.Create(INT25); + adaptor.AddChild(root_0, INT25_tree); + + + } + break; + case 2: + dbg.EnterAlt( 2 ); + + // BuildOptions\\DebugGrammar.g3:81:9: ID + { + root_0 = (CommonTree)adaptor.Nil(); + + dbg.Location( 81, 8 ); + ID26=(IToken)Match(input,ID,Follow._ID_in_atom358); + ID26_tree = (CommonTree)adaptor.Create(ID26); + adaptor.AddChild(root_0, ID26_tree); + + + } + break; + case 3: + dbg.EnterAlt( 3 ); + + // BuildOptions\\DebugGrammar.g3:82:9: '(' expr ')' + { + dbg.Location( 82, 8 ); + char_literal27=(IToken)Match(input,12,Follow._12_in_atom368); + stream_12.Add(char_literal27); + + dbg.Location( 82, 12 ); + PushFollow(Follow._expr_in_atom370); + expr28=expr(); + + state._fsp--; + + stream_expr.Add(expr28.Tree); + dbg.Location( 82, 17 ); + char_literal29=(IToken)Match(input,13,Follow._13_in_atom372); + stream_13.Add(char_literal29); + + + + { + // AST REWRITE + // elements: expr + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.Nil(); + // 82:25: -> expr + { + dbg.Location( 82, 27 ); + adaptor.AddChild(root_0, stream_expr.NextTree()); + + } + + retval.tree = root_0; + } + + } + break; + case 4: + dbg.EnterAlt( 4 ); + + // BuildOptions\\DebugGrammar.g3:83:9: ID '(' expr ')' + { + dbg.Location( 83, 8 ); + ID30=(IToken)Match(input,ID,Follow._ID_in_atom389); + stream_ID.Add(ID30); + + dbg.Location( 83, 11 ); + char_literal31=(IToken)Match(input,12,Follow._12_in_atom391); + stream_12.Add(char_literal31); + + dbg.Location( 83, 15 ); + PushFollow(Follow._expr_in_atom393); + expr32=expr(); + + state._fsp--; + + stream_expr.Add(expr32.Tree); + dbg.Location( 83, 20 ); + char_literal33=(IToken)Match(input,13,Follow._13_in_atom395); + stream_13.Add(char_literal33); + + + + { + // AST REWRITE + // elements: ID, expr + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.Nil(); + // 83:25: -> ^( CALL ID expr ) + { + dbg.Location( 83, 27 ); + // BuildOptions\\DebugGrammar.g3:83:28: ^( CALL ID expr ) + { + CommonTree root_1 = (CommonTree)adaptor.Nil(); + dbg.Location( 83, 29 ); + root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(CALL, "CALL"), root_1); + + dbg.Location( 83, 34 ); + adaptor.AddChild(root_1, stream_ID.NextNode()); + dbg.Location( 83, 37 ); + adaptor.AddChild(root_1, stream_expr.NextTree()); + + adaptor.AddChild(root_0, root_1); + } + + } + + retval.tree = root_0; + } + + } + break; + + } + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); + adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); + + } + finally + { + } + dbg.Location(84, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "atom" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return retval; + } + // $ANTLR end "atom" + #endregion + + // Delegated rules + + #region Synpreds + #endregion + + #region DFA + DFA2 dfa2; + + protected override void InitDFAs() + { + base.InitDFAs(); + dfa2 = new DFA2( this ); + } + + class DFA2 : DFA + { + + const string DFA2_eotS = + "\xA\xFFFF"; + const string DFA2_eofS = + "\xA\xFFFF"; + const string DFA2_minS = + "\x1\x6\x1\xFFFF\x1\x8\x1\xFFFF\x1\x6\x1\xFFFF\x2\xA\x1\x8\x1\xFFFF"; + const string DFA2_maxS = + "\x1\xC\x1\xFFFF\x1\x11\x1\xFFFF\x1\xC\x1\xFFFF\x2\x10\x1\x11\x1\xFFFF"; + const string DFA2_acceptS = + "\x1\xFFFF\x1\x1\x1\xFFFF\x1\x4\x1\xFFFF\x1\x2\x3\xFFFF\x1\x3"; + const string DFA2_specialS = + "\xA\xFFFF}>"; + static readonly string[] DFA2_transitionS = + { + "\x1\x2\x1\x1\x1\x3\x3\xFFFF\x1\x1", + "", + "\x1\x1\x1\xFFFF\x2\x1\x1\x4\x1\xFFFF\x3\x1\x1\x5", + "", + "\x1\x7\x1\x6\x4\xFFFF\x1\x1", + "", + "\x2\x1\x1\xFFFF\x1\x8\x3\x1", + "\x3\x1\x1\x8\x3\x1", + "\x1\x1\x1\xFFFF\x2\x1\x2\xFFFF\x3\x1\x1\x9", + "" + }; + + static readonly short[] DFA2_eot = DFA.UnpackEncodedString(DFA2_eotS); + static readonly short[] DFA2_eof = DFA.UnpackEncodedString(DFA2_eofS); + static readonly char[] DFA2_min = DFA.UnpackEncodedStringToUnsignedChars(DFA2_minS); + static readonly char[] DFA2_max = DFA.UnpackEncodedStringToUnsignedChars(DFA2_maxS); + static readonly short[] DFA2_accept = DFA.UnpackEncodedString(DFA2_acceptS); + static readonly short[] DFA2_special = DFA.UnpackEncodedString(DFA2_specialS); + static readonly short[][] DFA2_transition; + + static DFA2() + { + int numStates = DFA2_transitionS.Length; + DFA2_transition = new short[numStates][]; + for ( int i=0; i < numStates; i++ ) + { + DFA2_transition[i] = DFA.UnpackEncodedString(DFA2_transitionS[i]); + } + } + + public DFA2( BaseRecognizer recognizer ) + { + this.recognizer = recognizer; + this.decisionNumber = 2; + this.eot = DFA2_eot; + this.eof = DFA2_eof; + this.min = DFA2_min; + this.max = DFA2_max; + this.accept = DFA2_accept; + this.special = DFA2_special; + this.transition = DFA2_transition; + } + public override string GetDescription() + { + return "53:0: stat : ( expr NEWLINE -> expr | ID '=' expr NEWLINE -> ^( '=' ID expr ) | func NEWLINE -> func | NEWLINE ->);"; + } + public override void Error( NoViableAltException nvae ) + { + ((DebugParser)recognizer).dbg.RecognitionException( nvae ); + } + } + + + #endregion + + #region Follow Sets + public static class Follow + { + public static readonly BitSet _stat_in_prog53 = new BitSet(new ulong[]{0x11C2UL}); + public static readonly BitSet _expr_in_stat70 = new BitSet(new ulong[]{0x100UL}); + public static readonly BitSet _NEWLINE_in_stat72 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _ID_in_stat105 = new BitSet(new ulong[]{0x20000UL}); + public static readonly BitSet _17_in_stat107 = new BitSet(new ulong[]{0x10C0UL}); + public static readonly BitSet _expr_in_stat109 = new BitSet(new ulong[]{0x100UL}); + public static readonly BitSet _NEWLINE_in_stat111 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _func_in_stat143 = new BitSet(new ulong[]{0x100UL}); + public static readonly BitSet _NEWLINE_in_stat145 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _NEWLINE_in_stat178 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _ID_in_func219 = new BitSet(new ulong[]{0x1000UL}); + public static readonly BitSet _12_in_func222 = new BitSet(new ulong[]{0xC0UL}); + public static readonly BitSet _formalPar_in_func224 = new BitSet(new ulong[]{0x2000UL}); + public static readonly BitSet _13_in_func226 = new BitSet(new ulong[]{0x20000UL}); + public static readonly BitSet _17_in_func228 = new BitSet(new ulong[]{0x10C0UL}); + public static readonly BitSet _expr_in_func230 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _set_in_formalPar267 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _multExpr_in_expr288 = new BitSet(new ulong[]{0x10402UL}); + public static readonly BitSet _16_in_expr292 = new BitSet(new ulong[]{0x10C0UL}); + public static readonly BitSet _10_in_expr295 = new BitSet(new ulong[]{0x10C0UL}); + public static readonly BitSet _multExpr_in_expr299 = new BitSet(new ulong[]{0x10402UL}); + public static readonly BitSet _atom_in_multExpr320 = new BitSet(new ulong[]{0xC802UL}); + public static readonly BitSet _set_in_multExpr323 = new BitSet(new ulong[]{0x10C0UL}); + public static readonly BitSet _atom_in_multExpr332 = new BitSet(new ulong[]{0xC802UL}); + public static readonly BitSet _INT_in_atom348 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _ID_in_atom358 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _12_in_atom368 = new BitSet(new ulong[]{0x10C0UL}); + public static readonly BitSet _expr_in_atom370 = new BitSet(new ulong[]{0x2000UL}); + public static readonly BitSet _13_in_atom372 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _ID_in_atom389 = new BitSet(new ulong[]{0x1000UL}); + public static readonly BitSet _12_in_atom391 = new BitSet(new ulong[]{0x10C0UL}); + public static readonly BitSet _expr_in_atom393 = new BitSet(new ulong[]{0x2000UL}); + public static readonly BitSet _13_in_atom395 = new BitSet(new ulong[]{0x2UL}); + + } + #endregion +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarParserHelper.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarParserHelper.cs new file mode 100644 index 0000000..95beb20 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugGrammarParserHelper.cs @@ -0,0 +1,40 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; +using Antlr.Runtime.Tree; + +partial class DebugGrammarParser +{ + /** List of function definitions. Must point at the FUNC nodes. */ + List<CommonTree> functionDefinitions = new List<CommonTree>(); +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammar.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammar.cs new file mode 100644 index 0000000..38b1064 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammar.cs @@ -0,0 +1,858 @@ +// $ANTLR 3.1.2 BuildOptions\\DebugTreeGrammar.g3 2009-03-16 13:19:18 + +// The variable 'variable' is assigned but its value is never used. +#pragma warning disable 219 +// Unreachable code detected. +#pragma warning disable 162 + + +//import java.util.Map; +//import java.util.HashMap; +using BigInteger = java.math.BigInteger; +using Console = System.Console; + + +using System.Collections.Generic; +using Antlr.Runtime; +using Antlr.Runtime.Tree; +using RewriteRuleITokenStream = Antlr.Runtime.Tree.RewriteRuleTokenStream;using Stack = System.Collections.Generic.Stack<object>; +using List = System.Collections.IList; +using ArrayList = System.Collections.Generic.List<object>; + +using Antlr.Runtime.Debug; +using IOException = System.IO.IOException; +public partial class DebugTreeGrammar : DebugTreeParser +{ + public static readonly string[] tokenNames = new string[] { + "<invalid>", "<EOR>", "<DOWN>", "<UP>", "CALL", "FUNC", "ID", "INT", "NEWLINE", "WS", "'-'", "'%'", "'('", "')'", "'*'", "'/'", "'+'", "'='" + }; + public const int EOF=-1; + public const int T__10=10; + public const int T__11=11; + public const int T__12=12; + public const int T__13=13; + public const int T__14=14; + public const int T__15=15; + public const int T__16=16; + public const int T__17=17; + public const int CALL=4; + public const int FUNC=5; + public const int ID=6; + public const int INT=7; + public const int NEWLINE=8; + public const int WS=9; + + // delegates + // delegators + + public static readonly string[] ruleNames = + new string[] + { + "invalidRule", "call", "expr", "prog", "stat" + }; + + int ruleLevel = 0; + public virtual int RuleLevel { get { return ruleLevel; } } + public virtual void IncRuleLevel() { ruleLevel++; } + public virtual void DecRuleLevel() { ruleLevel--; } + public DebugTreeGrammar( ITreeNodeStream input ) + : this( input, DebugEventSocketProxy.DEFAULT_DEBUGGER_PORT, new RecognizerSharedState() ) + { + } + public DebugTreeGrammar( ITreeNodeStream input, int port, RecognizerSharedState state ) + : base( input, state ) + { + DebugEventSocketProxy proxy = new DebugEventSocketProxy( this, port, input.TreeAdaptor ); + DebugListener = proxy; + try + { + proxy.Handshake(); + } + catch ( IOException ioe ) + { + ReportError( ioe ); + } + } + public DebugTreeGrammar( ITreeNodeStream input, IDebugEventListener dbg ) + : base( input, dbg, new RecognizerSharedState() ) + { + + } + protected virtual bool EvalPredicate( bool result, string predicate ) + { + dbg.SemanticPredicate( result, predicate ); + return result; + } + + + public override string[] GetTokenNames() { return DebugTreeGrammar.tokenNames; } + public override string GrammarFileName { get { return "BuildOptions\\DebugTreeGrammar.g3"; } } + + + #region Rules + + // $ANTLR start "prog" + // BuildOptions\\DebugTreeGrammar.g3:53:0: prog : ( stat )* ; + private void prog( ) + { + try + { + dbg.EnterRule( GrammarFileName, "prog" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 53, -1 ); + + try + { + // BuildOptions\\DebugTreeGrammar.g3:53:9: ( ( stat )* ) + dbg.EnterAlt( 1 ); + + // BuildOptions\\DebugTreeGrammar.g3:53:9: ( stat )* + { + dbg.Location( 53, 8 ); + // BuildOptions\\DebugTreeGrammar.g3:53:9: ( stat )* + try + { + dbg.EnterSubRule( 1 ); + + for ( ; ; ) + { + int alt1=2; + try + { + dbg.EnterDecision( 1 ); + + int LA1_0 = input.LA(1); + + if ( ((LA1_0>=CALL && LA1_0<=INT)||(LA1_0>=10 && LA1_0<=11)||(LA1_0>=14 && LA1_0<=17)) ) + { + alt1=1; + } + + + } + finally + { + dbg.ExitDecision( 1 ); + } + + switch ( alt1 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\DebugTreeGrammar.g3:53:0: stat + { + dbg.Location( 53, 8 ); + PushFollow(Follow._stat_in_prog48); + stat(); + + state._fsp--; + + + } + break; + + default: + goto loop1; + } + } + + loop1: + ; + + } + finally + { + dbg.ExitSubRule( 1 ); + } + + + } + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + } + finally + { + } + dbg.Location(54, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "prog" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return ; + } + // $ANTLR end "prog" + + + // $ANTLR start "stat" + // BuildOptions\\DebugTreeGrammar.g3:56:0: stat : ( expr | ^( '=' ID expr ) | ^( FUNC ( . )+ ) ); + private void stat( ) + { + CommonTree ID2=null; + BigInteger expr1 = default(BigInteger); + BigInteger expr3 = default(BigInteger); + + try + { + dbg.EnterRule( GrammarFileName, "stat" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 56, -1 ); + + try + { + // BuildOptions\\DebugTreeGrammar.g3:56:9: ( expr | ^( '=' ID expr ) | ^( FUNC ( . )+ ) ) + int alt3=3; + try + { + dbg.EnterDecision( 3 ); + + switch ( input.LA(1) ) + { + case CALL: + case ID: + case INT: + case 10: + case 11: + case 14: + case 15: + case 16: + { + alt3=1; + } + break; + case 17: + { + alt3=2; + } + break; + case FUNC: + { + alt3=3; + } + break; + default: + { + NoViableAltException nvae = new NoViableAltException("", 3, 0, input); + + dbg.RecognitionException( nvae ); + throw nvae; + } + } + + } + finally + { + dbg.ExitDecision( 3 ); + } + + switch ( alt3 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\DebugTreeGrammar.g3:56:9: expr + { + dbg.Location( 56, 8 ); + PushFollow(Follow._expr_in_stat63); + expr1=expr(); + + state._fsp--; + + dbg.Location( 56, 35 ); + string result = expr1.ToString(); + Console.Out.WriteLine(expr1 + " (about " + result[0] + "*10^" + (result.Length-1) + ")"); + + + } + break; + case 2: + dbg.EnterAlt( 2 ); + + // BuildOptions\\DebugTreeGrammar.g3:59:9: ^( '=' ID expr ) + { + dbg.Location( 59, 8 ); + dbg.Location( 59, 10 ); + Match(input,17,Follow._17_in_stat98); + + Match(input, TokenConstants.DOWN, null); + dbg.Location( 59, 14 ); + ID2=(CommonTree)Match(input,ID,Follow._ID_in_stat100); + dbg.Location( 59, 17 ); + PushFollow(Follow._expr_in_stat102); + expr3=expr(); + + state._fsp--; + + + Match(input, TokenConstants.UP, null); + dbg.Location( 59, 35 ); + globalMemory[(ID2!=null?ID2.Text:null)] = expr3; + + } + break; + case 3: + dbg.EnterAlt( 3 ); + + // BuildOptions\\DebugTreeGrammar.g3:60:9: ^( FUNC ( . )+ ) + { + dbg.Location( 60, 8 ); + dbg.Location( 60, 10 ); + Match(input,FUNC,Follow._FUNC_in_stat128); + + Match(input, TokenConstants.DOWN, null); + dbg.Location( 60, 15 ); + // BuildOptions\\DebugTreeGrammar.g3:60:16: ( . )+ + int cnt2=0; + try + { + dbg.EnterSubRule( 2 ); + + for ( ; ; ) + { + int alt2=2; + try + { + dbg.EnterDecision( 2 ); + + int LA2_0 = input.LA(1); + + if ( ((LA2_0>=CALL && LA2_0<=17)) ) + { + alt2=1; + } + else if ( (LA2_0==UP) ) + { + alt2=2; + } + + + } + finally + { + dbg.ExitDecision( 2 ); + } + + switch ( alt2 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\DebugTreeGrammar.g3:60:0: . + { + dbg.Location( 60, 15 ); + MatchAny(input); + + } + break; + + default: + if ( cnt2 >= 1 ) + goto loop2; + + EarlyExitException eee2 = new EarlyExitException( 2, input ); + dbg.RecognitionException( eee2 ); + + throw eee2; + } + cnt2++; + } + loop2: + ; + + } + finally + { + dbg.ExitSubRule( 2 ); + } + + + Match(input, TokenConstants.UP, null); + + } + break; + + } + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + } + finally + { + } + dbg.Location(61, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "stat" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return ; + } + // $ANTLR end "stat" + + + // $ANTLR start "expr" + // BuildOptions\\DebugTreeGrammar.g3:63:0: expr returns [BigInteger value] : ( ^( '+' a= expr b= expr ) | ^( '-' a= expr b= expr ) | ^( '*' a= expr b= expr ) | ^( '/' a= expr b= expr ) | ^( '%' a= expr b= expr ) | ID | INT | call ); + private BigInteger expr( ) + { + + BigInteger value = default(BigInteger); + + CommonTree ID4=null; + CommonTree INT5=null; + BigInteger a = default(BigInteger); + BigInteger b = default(BigInteger); + BigInteger call6 = default(BigInteger); + + try + { + dbg.EnterRule( GrammarFileName, "expr" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 63, -1 ); + + try + { + // BuildOptions\\DebugTreeGrammar.g3:64:9: ( ^( '+' a= expr b= expr ) | ^( '-' a= expr b= expr ) | ^( '*' a= expr b= expr ) | ^( '/' a= expr b= expr ) | ^( '%' a= expr b= expr ) | ID | INT | call ) + int alt4=8; + try + { + dbg.EnterDecision( 4 ); + + switch ( input.LA(1) ) + { + case 16: + { + alt4=1; + } + break; + case 10: + { + alt4=2; + } + break; + case 14: + { + alt4=3; + } + break; + case 15: + { + alt4=4; + } + break; + case 11: + { + alt4=5; + } + break; + case ID: + { + alt4=6; + } + break; + case INT: + { + alt4=7; + } + break; + case CALL: + { + alt4=8; + } + break; + default: + { + NoViableAltException nvae = new NoViableAltException("", 4, 0, input); + + dbg.RecognitionException( nvae ); + throw nvae; + } + } + + } + finally + { + dbg.ExitDecision( 4 ); + } + + switch ( alt4 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\DebugTreeGrammar.g3:64:9: ^( '+' a= expr b= expr ) + { + dbg.Location( 64, 8 ); + dbg.Location( 64, 10 ); + Match(input,16,Follow._16_in_expr172); + + Match(input, TokenConstants.DOWN, null); + dbg.Location( 64, 15 ); + PushFollow(Follow._expr_in_expr176); + a=expr(); + + state._fsp--; + + dbg.Location( 64, 22 ); + PushFollow(Follow._expr_in_expr180); + b=expr(); + + state._fsp--; + + + Match(input, TokenConstants.UP, null); + dbg.Location( 64, 35 ); + value = a.add(b); + + } + break; + case 2: + dbg.EnterAlt( 2 ); + + // BuildOptions\\DebugTreeGrammar.g3:65:9: ^( '-' a= expr b= expr ) + { + dbg.Location( 65, 8 ); + dbg.Location( 65, 10 ); + Match(input,10,Follow._10_in_expr200); + + Match(input, TokenConstants.DOWN, null); + dbg.Location( 65, 15 ); + PushFollow(Follow._expr_in_expr204); + a=expr(); + + state._fsp--; + + dbg.Location( 65, 22 ); + PushFollow(Follow._expr_in_expr208); + b=expr(); + + state._fsp--; + + + Match(input, TokenConstants.UP, null); + dbg.Location( 65, 35 ); + value = a.subtract(b); + + } + break; + case 3: + dbg.EnterAlt( 3 ); + + // BuildOptions\\DebugTreeGrammar.g3:66:9: ^( '*' a= expr b= expr ) + { + dbg.Location( 66, 8 ); + dbg.Location( 66, 10 ); + Match(input,14,Follow._14_in_expr228); + + Match(input, TokenConstants.DOWN, null); + dbg.Location( 66, 15 ); + PushFollow(Follow._expr_in_expr232); + a=expr(); + + state._fsp--; + + dbg.Location( 66, 22 ); + PushFollow(Follow._expr_in_expr236); + b=expr(); + + state._fsp--; + + + Match(input, TokenConstants.UP, null); + dbg.Location( 66, 35 ); + value = a.multiply(b); + + } + break; + case 4: + dbg.EnterAlt( 4 ); + + // BuildOptions\\DebugTreeGrammar.g3:67:9: ^( '/' a= expr b= expr ) + { + dbg.Location( 67, 8 ); + dbg.Location( 67, 10 ); + Match(input,15,Follow._15_in_expr256); + + Match(input, TokenConstants.DOWN, null); + dbg.Location( 67, 15 ); + PushFollow(Follow._expr_in_expr260); + a=expr(); + + state._fsp--; + + dbg.Location( 67, 22 ); + PushFollow(Follow._expr_in_expr264); + b=expr(); + + state._fsp--; + + + Match(input, TokenConstants.UP, null); + dbg.Location( 67, 35 ); + value = a.divide(b); + + } + break; + case 5: + dbg.EnterAlt( 5 ); + + // BuildOptions\\DebugTreeGrammar.g3:68:9: ^( '%' a= expr b= expr ) + { + dbg.Location( 68, 8 ); + dbg.Location( 68, 10 ); + Match(input,11,Follow._11_in_expr284); + + Match(input, TokenConstants.DOWN, null); + dbg.Location( 68, 15 ); + PushFollow(Follow._expr_in_expr288); + a=expr(); + + state._fsp--; + + dbg.Location( 68, 22 ); + PushFollow(Follow._expr_in_expr292); + b=expr(); + + state._fsp--; + + + Match(input, TokenConstants.UP, null); + dbg.Location( 68, 35 ); + value = a.remainder(b); + + } + break; + case 6: + dbg.EnterAlt( 6 ); + + // BuildOptions\\DebugTreeGrammar.g3:69:9: ID + { + dbg.Location( 69, 8 ); + ID4=(CommonTree)Match(input,ID,Follow._ID_in_expr311); + dbg.Location( 69, 35 ); + value = getValue((ID4!=null?ID4.Text:null)); + + } + break; + case 7: + dbg.EnterAlt( 7 ); + + // BuildOptions\\DebugTreeGrammar.g3:70:9: INT + { + dbg.Location( 70, 8 ); + INT5=(CommonTree)Match(input,INT,Follow._INT_in_expr347); + dbg.Location( 70, 35 ); + value = new BigInteger((INT5!=null?INT5.Text:null)); + + } + break; + case 8: + dbg.EnterAlt( 8 ); + + // BuildOptions\\DebugTreeGrammar.g3:71:9: call + { + dbg.Location( 71, 8 ); + PushFollow(Follow._call_in_expr382); + call6=call(); + + state._fsp--; + + dbg.Location( 71, 35 ); + value = call6; + + } + break; + + } + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + } + finally + { + } + dbg.Location(72, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "expr" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return value; + } + // $ANTLR end "expr" + + + // $ANTLR start "call" + // BuildOptions\\DebugTreeGrammar.g3:74:0: call returns [BigInteger value] : ^( CALL ID expr ) ; + private BigInteger call( ) + { + + BigInteger value = default(BigInteger); + + CommonTree ID8=null; + BigInteger expr7 = default(BigInteger); + + try + { + dbg.EnterRule( GrammarFileName, "call" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 74, -1 ); + + try + { + // BuildOptions\\DebugTreeGrammar.g3:75:9: ( ^( CALL ID expr ) ) + dbg.EnterAlt( 1 ); + + // BuildOptions\\DebugTreeGrammar.g3:75:9: ^( CALL ID expr ) + { + dbg.Location( 75, 8 ); + dbg.Location( 75, 10 ); + Match(input,CALL,Follow._CALL_in_call430); + + Match(input, TokenConstants.DOWN, null); + dbg.Location( 75, 15 ); + ID8=(CommonTree)Match(input,ID,Follow._ID_in_call432); + dbg.Location( 75, 18 ); + PushFollow(Follow._expr_in_call434); + expr7=expr(); + + state._fsp--; + + + Match(input, TokenConstants.UP, null); + dbg.Location( 75, 35 ); + BigInteger p = expr7; + CommonTree funcRoot = findFunction((ID8!=null?ID8.Text:null), p); + if (funcRoot == null) { + Console.Error.WriteLine("No match found for " + (ID8!=null?ID8.Text:null) + "(" + p + ")"); + } else { + // Here we set up the local evaluator to run over the + // function definition with the parameter value. + // This re-reads a sub-AST of our input AST! + DebugTreeGrammar e = new DebugTreeGrammar(funcRoot, functionDefinitions, globalMemory, p); + value = e.expr(); + } + + + } + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + } + finally + { + } + dbg.Location(87, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "call" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return value; + } + // $ANTLR end "call" + #endregion + + // Delegated rules + + #region Synpreds + #endregion + + #region DFA + + protected override void InitDFAs() + { + base.InitDFAs(); + } + + #endregion + + #region Follow Sets + public static class Follow + { + public static readonly BitSet _stat_in_prog48 = new BitSet(new ulong[]{0x3CCF2UL}); + public static readonly BitSet _expr_in_stat63 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _17_in_stat98 = new BitSet(new ulong[]{0x4UL}); + public static readonly BitSet _ID_in_stat100 = new BitSet(new ulong[]{0x1CCD0UL}); + public static readonly BitSet _expr_in_stat102 = new BitSet(new ulong[]{0x8UL}); + public static readonly BitSet _FUNC_in_stat128 = new BitSet(new ulong[]{0x4UL}); + public static readonly BitSet _16_in_expr172 = new BitSet(new ulong[]{0x4UL}); + public static readonly BitSet _expr_in_expr176 = new BitSet(new ulong[]{0x1CCD0UL}); + public static readonly BitSet _expr_in_expr180 = new BitSet(new ulong[]{0x8UL}); + public static readonly BitSet _10_in_expr200 = new BitSet(new ulong[]{0x4UL}); + public static readonly BitSet _expr_in_expr204 = new BitSet(new ulong[]{0x1CCD0UL}); + public static readonly BitSet _expr_in_expr208 = new BitSet(new ulong[]{0x8UL}); + public static readonly BitSet _14_in_expr228 = new BitSet(new ulong[]{0x4UL}); + public static readonly BitSet _expr_in_expr232 = new BitSet(new ulong[]{0x1CCD0UL}); + public static readonly BitSet _expr_in_expr236 = new BitSet(new ulong[]{0x8UL}); + public static readonly BitSet _15_in_expr256 = new BitSet(new ulong[]{0x4UL}); + public static readonly BitSet _expr_in_expr260 = new BitSet(new ulong[]{0x1CCD0UL}); + public static readonly BitSet _expr_in_expr264 = new BitSet(new ulong[]{0x8UL}); + public static readonly BitSet _11_in_expr284 = new BitSet(new ulong[]{0x4UL}); + public static readonly BitSet _expr_in_expr288 = new BitSet(new ulong[]{0x1CCD0UL}); + public static readonly BitSet _expr_in_expr292 = new BitSet(new ulong[]{0x8UL}); + public static readonly BitSet _ID_in_expr311 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _INT_in_expr347 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _call_in_expr382 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _CALL_in_call430 = new BitSet(new ulong[]{0x4UL}); + public static readonly BitSet _ID_in_call432 = new BitSet(new ulong[]{0x1CCD0UL}); + public static readonly BitSet _expr_in_call434 = new BitSet(new ulong[]{0x8UL}); + + } + #endregion +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammar.g3 b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammar.g3 new file mode 100644 index 0000000..b16a73e --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammar.g3 @@ -0,0 +1,88 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +tree grammar DebugTreeGrammar; + +options +{ + language=CSharp3; + tokenVocab=DebugGrammar; + ASTLabelType=CommonTree; +} + +// START:members +@header +{ +//import java.util.Map; +//import java.util.HashMap; +using BigInteger = java.math.BigInteger; +using Console = System.Console; +} +// END:members + +// START:rules +prog: stat* + ; + +stat: expr { string result = $expr.value.ToString(); + Console.Out.WriteLine($expr.value + " (about " + result[0] + "*10^" + (result.Length-1) + ")"); + } + | ^('=' ID expr) { globalMemory[$ID.text] = $expr.value; } + | ^(FUNC .+) // ignore FUNCs - we added them to functionDefinitions already in parser. + ; + +expr returns [BigInteger value] + : ^('+' a=expr b=expr) { $value = $a.value.add($b.value); } + | ^('-' a=expr b=expr) { $value = $a.value.subtract($b.value); } + | ^('*' a=expr b=expr) { $value = $a.value.multiply($b.value); } + | ^('/' a=expr b=expr) { $value = $a.value.divide($b.value); } + | ^('%' a=expr b=expr) { $value = $a.value.remainder($b.value); } + | ID { $value = getValue($ID.text); } + | INT { $value = new BigInteger($INT.text); } + | call { $value = $call.value; } + ; + +call returns [BigInteger value] + : ^(CALL ID expr) { BigInteger p = $expr.value; + CommonTree funcRoot = findFunction($ID.text, p); + if (funcRoot == null) { + Console.Error.WriteLine("No match found for " + $ID.text + "(" + p + ")"); + } else { + // Here we set up the local evaluator to run over the + // function definition with the parameter value. + // This re-reads a sub-AST of our input AST! + DebugTreeGrammar e = new DebugTreeGrammar(funcRoot, functionDefinitions, globalMemory, p); + $value = e.expr(); + } + } + ; +// END:rules diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammarHelper.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammarHelper.cs new file mode 100644 index 0000000..189e733 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/DebugTreeGrammarHelper.cs @@ -0,0 +1,116 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; +using Antlr.Runtime.Tree; + +using BigInteger = java.math.BigInteger; +using Console = System.Console; + +partial class DebugTreeGrammar +{ + /** Points to functions tracked by tree builder. */ + private List<CommonTree> functionDefinitions; + + /** Remember local variables. Currently, this is only the function parameter. + */ + private readonly IDictionary<string, BigInteger> localMemory = new Dictionary<string, BigInteger>(); + + /** Remember global variables set by =. */ + private IDictionary<string, BigInteger> globalMemory = new Dictionary<string, BigInteger>(); + + /** Set up an evaluator with a node stream; and a set of function definition ASTs. */ + public DebugTreeGrammar( CommonTreeNodeStream nodes, List<CommonTree> functionDefinitions ) + : this( nodes ) + { + this.functionDefinitions = functionDefinitions; + } + + /** Set up a local evaluator for a nested function call. The evaluator gets the definition + * tree of the function; the set of all defined functions (to find locally called ones); a + * pointer to the global variable memory; and the value of the function parameter to be + * added to the local memory. + */ + private DebugTreeGrammar( CommonTree function, + List<CommonTree> functionDefinitions, + IDictionary<string, BigInteger> globalMemory, + BigInteger paramValue ) + // Expected tree for function: ^(FUNC ID ( INT | ID ) expr) + : this( new CommonTreeNodeStream( function.GetChild( 2 ) ), functionDefinitions ) + { + this.globalMemory = globalMemory; + localMemory[function.GetChild( 1 ).Text] = paramValue; + } + + /** Find matching function definition for a function name and parameter + * value. The first definition is returned where (a) the name matches + * and (b) the formal parameter agrees if it is defined as constant. + */ + private CommonTree findFunction( string name, BigInteger paramValue ) + { + foreach ( CommonTree f in functionDefinitions ) + { + // Expected tree for f: ^(FUNC ID (ID | INT) expr) + if ( f.GetChild( 0 ).Text.Equals( name ) ) + { + // Check whether parameter matches + CommonTree formalPar = (CommonTree)f.GetChild( 1 ); + if ( formalPar.Token.Type == INT + && !new BigInteger( formalPar.Token.Text ).Equals( paramValue ) ) + { + // Constant in formalPar list does not match actual value -> no match. + continue; + } + // Parameter (value for INT formal arg) as well as fct name agrees! + return f; + } + } + return null; + } + + /** Get value of name up call stack. */ + public BigInteger getValue( string name ) + { + BigInteger value; + if ( localMemory.TryGetValue( name, out value ) && value != null ) + { + return value; + } + if ( globalMemory.TryGetValue( name, out value ) && value != null ) + { + return value; + } + // not found in local memory or global memory + Console.Error.WriteLine( "undefined variable " + name ); + return new BigInteger( "0" ); + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammar.g3 b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammar.g3 new file mode 100644 index 0000000..5f8de16 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammar.g3 @@ -0,0 +1,100 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +grammar ProfileGrammar; + +options +{ + language=CSharp3; + output=AST; + ASTLabelType=CommonTree; +} + +tokens +{ + // define pseudo-operations + FUNC; + CALL; +} + +// START:stat +prog: ( stat )* + ; + +stat: expr NEWLINE -> expr + | ID '=' expr NEWLINE -> ^('=' ID expr) + | func NEWLINE -> func + | NEWLINE -> // ignore + ; + +func: ID '(' formalPar ')' '=' expr -> ^(FUNC ID formalPar expr) + ; + finally { + functionDefinitions.Add($func.tree); + } + +formalPar + : ID + | INT + ; + +// END:stat + +// START:expr +expr: multExpr (('+'^|'-'^) multExpr)* + ; + +multExpr + : atom (('*'|'/'|'%')^ atom)* + ; + +atom: INT + | ID + | '(' expr ')' -> expr + | ID '(' expr ')' -> ^(CALL ID expr) + ; +// END:expr + +// START:tokens +ID : ('a'..'z'|'A'..'Z')+ + ; + +INT : '0'..'9'+ + ; + +NEWLINE + : '\r'? '\n' + ; + +WS : (' '|'\t')+ { Skip(); } + ; +// END:tokens diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarLexer.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarLexer.cs new file mode 100644 index 0000000..5296172 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarLexer.cs @@ -0,0 +1,691 @@ +// $ANTLR 3.1.2 BuildOptions\\ProfileGrammar.g3 2009-03-16 13:19:19 + +// The variable 'variable' is assigned but its value is never used. +#pragma warning disable 219 +// Unreachable code detected. +#pragma warning disable 162 + + +using System.Collections.Generic; +using Antlr.Runtime; +using Stack = System.Collections.Generic.Stack<object>; +using List = System.Collections.IList; +using ArrayList = System.Collections.Generic.List<object>; + +public partial class ProfileGrammarLexer : Lexer +{ + public const int EOF=-1; + public const int T__10=10; + public const int T__11=11; + public const int T__12=12; + public const int T__13=13; + public const int T__14=14; + public const int T__15=15; + public const int T__16=16; + public const int T__17=17; + public const int CALL=4; + public const int FUNC=5; + public const int ID=6; + public const int INT=7; + public const int NEWLINE=8; + public const int WS=9; + + // delegates + // delegators + + public ProfileGrammarLexer() {} + public ProfileGrammarLexer( ICharStream input ) + : this( input, new RecognizerSharedState() ) + { + } + public ProfileGrammarLexer( ICharStream input, RecognizerSharedState state ) + : base( input, state ) + { + + } + public override string GrammarFileName { get { return "BuildOptions\\ProfileGrammar.g3"; } } + + // $ANTLR start "T__10" + private void mT__10() + { + try + { + int _type = T__10; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\ProfileGrammar.g3:7:9: ( '-' ) + // BuildOptions\\ProfileGrammar.g3:7:9: '-' + { + Match('-'); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__10" + + // $ANTLR start "T__11" + private void mT__11() + { + try + { + int _type = T__11; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\ProfileGrammar.g3:8:9: ( '%' ) + // BuildOptions\\ProfileGrammar.g3:8:9: '%' + { + Match('%'); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__11" + + // $ANTLR start "T__12" + private void mT__12() + { + try + { + int _type = T__12; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\ProfileGrammar.g3:9:9: ( '(' ) + // BuildOptions\\ProfileGrammar.g3:9:9: '(' + { + Match('('); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__12" + + // $ANTLR start "T__13" + private void mT__13() + { + try + { + int _type = T__13; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\ProfileGrammar.g3:10:9: ( ')' ) + // BuildOptions\\ProfileGrammar.g3:10:9: ')' + { + Match(')'); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__13" + + // $ANTLR start "T__14" + private void mT__14() + { + try + { + int _type = T__14; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\ProfileGrammar.g3:11:9: ( '*' ) + // BuildOptions\\ProfileGrammar.g3:11:9: '*' + { + Match('*'); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__14" + + // $ANTLR start "T__15" + private void mT__15() + { + try + { + int _type = T__15; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\ProfileGrammar.g3:12:9: ( '/' ) + // BuildOptions\\ProfileGrammar.g3:12:9: '/' + { + Match('/'); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__15" + + // $ANTLR start "T__16" + private void mT__16() + { + try + { + int _type = T__16; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\ProfileGrammar.g3:13:9: ( '+' ) + // BuildOptions\\ProfileGrammar.g3:13:9: '+' + { + Match('+'); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__16" + + // $ANTLR start "T__17" + private void mT__17() + { + try + { + int _type = T__17; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\ProfileGrammar.g3:14:9: ( '=' ) + // BuildOptions\\ProfileGrammar.g3:14:9: '=' + { + Match('='); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__17" + + // $ANTLR start "ID" + private void mID() + { + try + { + int _type = ID; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\ProfileGrammar.g3:88:9: ( ( 'a' .. 'z' | 'A' .. 'Z' )+ ) + // BuildOptions\\ProfileGrammar.g3:88:9: ( 'a' .. 'z' | 'A' .. 'Z' )+ + { + // BuildOptions\\ProfileGrammar.g3:88:9: ( 'a' .. 'z' | 'A' .. 'Z' )+ + int cnt1=0; + for ( ; ; ) + { + int alt1=2; + int LA1_0 = input.LA(1); + + if ( ((LA1_0>='A' && LA1_0<='Z')||(LA1_0>='a' && LA1_0<='z')) ) + { + alt1=1; + } + + + switch ( alt1 ) + { + case 1: + // BuildOptions\\ProfileGrammar.g3: + { + input.Consume(); + + + } + break; + + default: + if ( cnt1 >= 1 ) + goto loop1; + + EarlyExitException eee1 = new EarlyExitException( 1, input ); + throw eee1; + } + cnt1++; + } + loop1: + ; + + + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "ID" + + // $ANTLR start "INT" + private void mINT() + { + try + { + int _type = INT; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\ProfileGrammar.g3:91:9: ( ( '0' .. '9' )+ ) + // BuildOptions\\ProfileGrammar.g3:91:9: ( '0' .. '9' )+ + { + // BuildOptions\\ProfileGrammar.g3:91:9: ( '0' .. '9' )+ + int cnt2=0; + for ( ; ; ) + { + int alt2=2; + int LA2_0 = input.LA(1); + + if ( ((LA2_0>='0' && LA2_0<='9')) ) + { + alt2=1; + } + + + switch ( alt2 ) + { + case 1: + // BuildOptions\\ProfileGrammar.g3: + { + input.Consume(); + + + } + break; + + default: + if ( cnt2 >= 1 ) + goto loop2; + + EarlyExitException eee2 = new EarlyExitException( 2, input ); + throw eee2; + } + cnt2++; + } + loop2: + ; + + + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "INT" + + // $ANTLR start "NEWLINE" + private void mNEWLINE() + { + try + { + int _type = NEWLINE; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\ProfileGrammar.g3:95:7: ( ( '\\r' )? '\\n' ) + // BuildOptions\\ProfileGrammar.g3:95:7: ( '\\r' )? '\\n' + { + // BuildOptions\\ProfileGrammar.g3:95:7: ( '\\r' )? + int alt3=2; + int LA3_0 = input.LA(1); + + if ( (LA3_0=='\r') ) + { + alt3=1; + } + switch ( alt3 ) + { + case 1: + // BuildOptions\\ProfileGrammar.g3:95:0: '\\r' + { + Match('\r'); + + } + break; + + } + + Match('\n'); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "NEWLINE" + + // $ANTLR start "WS" + private void mWS() + { + try + { + int _type = WS; + int _channel = DEFAULT_TOKEN_CHANNEL; + // BuildOptions\\ProfileGrammar.g3:98:9: ( ( ' ' | '\\t' )+ ) + // BuildOptions\\ProfileGrammar.g3:98:9: ( ' ' | '\\t' )+ + { + // BuildOptions\\ProfileGrammar.g3:98:9: ( ' ' | '\\t' )+ + int cnt4=0; + for ( ; ; ) + { + int alt4=2; + int LA4_0 = input.LA(1); + + if ( (LA4_0=='\t'||LA4_0==' ') ) + { + alt4=1; + } + + + switch ( alt4 ) + { + case 1: + // BuildOptions\\ProfileGrammar.g3: + { + input.Consume(); + + + } + break; + + default: + if ( cnt4 >= 1 ) + goto loop4; + + EarlyExitException eee4 = new EarlyExitException( 4, input ); + throw eee4; + } + cnt4++; + } + loop4: + ; + + + Skip(); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "WS" + + public override void mTokens() + { + // BuildOptions\\ProfileGrammar.g3:1:10: ( T__10 | T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | ID | INT | NEWLINE | WS ) + int alt5=12; + switch ( input.LA(1) ) + { + case '-': + { + alt5=1; + } + break; + case '%': + { + alt5=2; + } + break; + case '(': + { + alt5=3; + } + break; + case ')': + { + alt5=4; + } + break; + case '*': + { + alt5=5; + } + break; + case '/': + { + alt5=6; + } + break; + case '+': + { + alt5=7; + } + break; + case '=': + { + alt5=8; + } + break; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + { + alt5=9; + } + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + alt5=10; + } + break; + case '\n': + case '\r': + { + alt5=11; + } + break; + case '\t': + case ' ': + { + alt5=12; + } + break; + default: + { + NoViableAltException nvae = new NoViableAltException("", 5, 0, input); + + throw nvae; + } + } + + switch ( alt5 ) + { + case 1: + // BuildOptions\\ProfileGrammar.g3:1:10: T__10 + { + mT__10(); + + } + break; + case 2: + // BuildOptions\\ProfileGrammar.g3:1:16: T__11 + { + mT__11(); + + } + break; + case 3: + // BuildOptions\\ProfileGrammar.g3:1:22: T__12 + { + mT__12(); + + } + break; + case 4: + // BuildOptions\\ProfileGrammar.g3:1:28: T__13 + { + mT__13(); + + } + break; + case 5: + // BuildOptions\\ProfileGrammar.g3:1:34: T__14 + { + mT__14(); + + } + break; + case 6: + // BuildOptions\\ProfileGrammar.g3:1:40: T__15 + { + mT__15(); + + } + break; + case 7: + // BuildOptions\\ProfileGrammar.g3:1:46: T__16 + { + mT__16(); + + } + break; + case 8: + // BuildOptions\\ProfileGrammar.g3:1:52: T__17 + { + mT__17(); + + } + break; + case 9: + // BuildOptions\\ProfileGrammar.g3:1:58: ID + { + mID(); + + } + break; + case 10: + // BuildOptions\\ProfileGrammar.g3:1:61: INT + { + mINT(); + + } + break; + case 11: + // BuildOptions\\ProfileGrammar.g3:1:65: NEWLINE + { + mNEWLINE(); + + } + break; + case 12: + // BuildOptions\\ProfileGrammar.g3:1:73: WS + { + mWS(); + + } + break; + + } + + } + + + #region DFA + + protected override void InitDFAs() + { + base.InitDFAs(); + } + + + #endregion + +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarLexerHelper.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarLexerHelper.cs new file mode 100644 index 0000000..7271295 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarLexerHelper.cs @@ -0,0 +1,32 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarParser.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarParser.cs new file mode 100644 index 0000000..7760525 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarParser.cs @@ -0,0 +1,1554 @@ +// $ANTLR 3.1.2 BuildOptions\\ProfileGrammar.g3 2009-03-16 13:19:19 + +// The variable 'variable' is assigned but its value is never used. +#pragma warning disable 219 +// Unreachable code detected. +#pragma warning disable 162 + + +using System.Collections.Generic; +using Antlr.Runtime; +using Stack = System.Collections.Generic.Stack<object>; +using List = System.Collections.IList; +using ArrayList = System.Collections.Generic.List<object>; + +using Antlr.Runtime.Debug; +using IOException = System.IO.IOException; + +using Antlr.Runtime.Tree; +using RewriteRuleITokenStream = Antlr.Runtime.Tree.RewriteRuleTokenStream; + +public partial class ProfileGrammarParser : DebugParser +{ + public static readonly string[] tokenNames = new string[] { + "<invalid>", "<EOR>", "<DOWN>", "<UP>", "CALL", "FUNC", "ID", "INT", "NEWLINE", "WS", "'-'", "'%'", "'('", "')'", "'*'", "'/'", "'+'", "'='" + }; + public const int EOF=-1; + public const int T__10=10; + public const int T__11=11; + public const int T__12=12; + public const int T__13=13; + public const int T__14=14; + public const int T__15=15; + public const int T__16=16; + public const int T__17=17; + public const int CALL=4; + public const int FUNC=5; + public const int ID=6; + public const int INT=7; + public const int NEWLINE=8; + public const int WS=9; + + // delegates + // delegators + + public static readonly string[] ruleNames = + new string[] + { + "invalidRule", "atom", "expr", "formalPar", "func", "multExpr", "prog", + "stat" + }; + + int ruleLevel = 0; + public virtual int RuleLevel { get { return ruleLevel; } } + public virtual void IncRuleLevel() { ruleLevel++; } + public virtual void DecRuleLevel() { ruleLevel--; } + public ProfileGrammarParser( ITokenStream input ) + : this( input, new Profiler(null), new RecognizerSharedState() ) + { + } + public ProfileGrammarParser( ITokenStream input, IDebugEventListener dbg, RecognizerSharedState state ) + : base( input, dbg, state ) + { + Profiler p = (Profiler)dbg; + p.setParser(this); + ITreeAdaptor adap = new CommonTreeAdaptor(); + TreeAdaptor = adap; + proxy.TreeAdaptor = adap; + } + + public ProfileGrammarParser( ITokenStream input, IDebugEventListener dbg ) + : base( input, dbg ) + { + Profiler p = (Profiler)dbg; + p.setParser(this); + + ITreeAdaptor adap = new CommonTreeAdaptor(); + TreeAdaptor = adap; + + } + public virtual bool AlreadyParsedRule( IIntStream input, int ruleIndex ) + { + ((Profiler)dbg).ExamineRuleMemoization(input, ruleIndex, ProfileGrammarParser.ruleNames[ruleIndex]); + return super.AlreadyParsedRule(input, ruleIndex); + } + + public virtual void Memoize( IIntStream input, int ruleIndex, int ruleStartIndex ) + { + ((Profiler)dbg).Memoize(input, ruleIndex, ruleStartIndex, ProfileGrammarParser.ruleNames[ruleIndex]); + super.Memoize(input, ruleIndex, ruleStartIndex); + } + protected virtual bool EvalPredicate( bool result, string predicate ) + { + dbg.SemanticPredicate( result, predicate ); + return result; + } + + protected DebugTreeAdaptor adaptor; + public ITreeAdaptor TreeAdaptor + { + get + { + return adaptor; + } + set + { + this.adaptor = new DebugTreeAdaptor(dbg,adaptor); + + } + } + + + public override string[] GetTokenNames() { return ProfileGrammarParser.tokenNames; } + public override string GrammarFileName { get { return "BuildOptions\\ProfileGrammar.g3"; } } + + + #region Rules + public class prog_return : ParserRuleReturnScope + { + public CommonTree tree; + public override object Tree { get { return tree; } } + } + + // $ANTLR start "prog" + // BuildOptions\\ProfileGrammar.g3:50:0: prog : ( stat )* ; + private ProfileGrammarParser.prog_return prog( ) + { + ProfileGrammarParser.prog_return retval = new ProfileGrammarParser.prog_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + ProfileGrammarParser.stat_return stat1 = default(ProfileGrammarParser.stat_return); + + + try + { + dbg.EnterRule( GrammarFileName, "prog" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 50, -1 ); + + try + { + // BuildOptions\\ProfileGrammar.g3:50:7: ( ( stat )* ) + dbg.EnterAlt( 1 ); + + // BuildOptions\\ProfileGrammar.g3:50:7: ( stat )* + { + root_0 = (CommonTree)adaptor.Nil(); + + dbg.Location( 50, 6 ); + // BuildOptions\\ProfileGrammar.g3:50:7: ( stat )* + try + { + dbg.EnterSubRule( 1 ); + + for ( ; ; ) + { + int alt1=2; + try + { + dbg.EnterDecision( 1 ); + + int LA1_0 = input.LA(1); + + if ( ((LA1_0>=ID && LA1_0<=NEWLINE)||LA1_0==12) ) + { + alt1=1; + } + + + } + finally + { + dbg.ExitDecision( 1 ); + } + + switch ( alt1 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\ProfileGrammar.g3:50:9: stat + { + dbg.Location( 50, 8 ); + PushFollow(Follow._stat_in_prog53); + stat1=stat(); + + state._fsp--; + + adaptor.AddChild(root_0, stat1.Tree); + + } + break; + + default: + goto loop1; + } + } + + loop1: + ; + + } + finally + { + dbg.ExitSubRule( 1 ); + } + + + } + + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); + adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); + + } + finally + { + } + dbg.Location(51, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "prog" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return retval; + } + // $ANTLR end "prog" + + public class stat_return : ParserRuleReturnScope + { + public CommonTree tree; + public override object Tree { get { return tree; } } + } + + // $ANTLR start "stat" + // BuildOptions\\ProfileGrammar.g3:53:0: stat : ( expr NEWLINE -> expr | ID '=' expr NEWLINE -> ^( '=' ID expr ) | func NEWLINE -> func | NEWLINE ->); + private ProfileGrammarParser.stat_return stat( ) + { + ProfileGrammarParser.stat_return retval = new ProfileGrammarParser.stat_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + IToken NEWLINE3=null; + IToken ID4=null; + IToken char_literal5=null; + IToken NEWLINE7=null; + IToken NEWLINE9=null; + IToken NEWLINE10=null; + ProfileGrammarParser.expr_return expr2 = default(ProfileGrammarParser.expr_return); + ProfileGrammarParser.expr_return expr6 = default(ProfileGrammarParser.expr_return); + ProfileGrammarParser.func_return func8 = default(ProfileGrammarParser.func_return); + + CommonTree NEWLINE3_tree=null; + CommonTree ID4_tree=null; + CommonTree char_literal5_tree=null; + CommonTree NEWLINE7_tree=null; + CommonTree NEWLINE9_tree=null; + CommonTree NEWLINE10_tree=null; + RewriteRuleITokenStream stream_NEWLINE=new RewriteRuleITokenStream(adaptor,"token NEWLINE"); + RewriteRuleITokenStream stream_ID=new RewriteRuleITokenStream(adaptor,"token ID"); + RewriteRuleITokenStream stream_17=new RewriteRuleITokenStream(adaptor,"token 17"); + RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr"); + RewriteRuleSubtreeStream stream_func=new RewriteRuleSubtreeStream(adaptor,"rule func"); + try + { + dbg.EnterRule( GrammarFileName, "stat" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 53, -1 ); + + try + { + // BuildOptions\\ProfileGrammar.g3:53:9: ( expr NEWLINE -> expr | ID '=' expr NEWLINE -> ^( '=' ID expr ) | func NEWLINE -> func | NEWLINE ->) + int alt2=4; + try + { + dbg.EnterDecision( 2 ); + + try + { + isCyclicDecision = true; + alt2 = dfa2.Predict(input); + } + catch ( NoViableAltException nvae ) + { + dbg.RecognitionException( nvae ); + throw nvae; + } + } + finally + { + dbg.ExitDecision( 2 ); + } + + switch ( alt2 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\ProfileGrammar.g3:53:9: expr NEWLINE + { + dbg.Location( 53, 8 ); + PushFollow(Follow._expr_in_stat70); + expr2=expr(); + + state._fsp--; + + stream_expr.Add(expr2.Tree); + dbg.Location( 53, 13 ); + NEWLINE3=(IToken)Match(input,NEWLINE,Follow._NEWLINE_in_stat72); + stream_NEWLINE.Add(NEWLINE3); + + + + { + // AST REWRITE + // elements: expr + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.Nil(); + // 53:41: -> expr + { + dbg.Location( 53, 43 ); + adaptor.AddChild(root_0, stream_expr.NextTree()); + + } + + retval.tree = root_0; + } + + } + break; + case 2: + dbg.EnterAlt( 2 ); + + // BuildOptions\\ProfileGrammar.g3:54:9: ID '=' expr NEWLINE + { + dbg.Location( 54, 8 ); + ID4=(IToken)Match(input,ID,Follow._ID_in_stat105); + stream_ID.Add(ID4); + + dbg.Location( 54, 11 ); + char_literal5=(IToken)Match(input,17,Follow._17_in_stat107); + stream_17.Add(char_literal5); + + dbg.Location( 54, 15 ); + PushFollow(Follow._expr_in_stat109); + expr6=expr(); + + state._fsp--; + + stream_expr.Add(expr6.Tree); + dbg.Location( 54, 20 ); + NEWLINE7=(IToken)Match(input,NEWLINE,Follow._NEWLINE_in_stat111); + stream_NEWLINE.Add(NEWLINE7); + + + + { + // AST REWRITE + // elements: 17, ID, expr + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.Nil(); + // 54:41: -> ^( '=' ID expr ) + { + dbg.Location( 54, 43 ); + // BuildOptions\\ProfileGrammar.g3:54:44: ^( '=' ID expr ) + { + CommonTree root_1 = (CommonTree)adaptor.Nil(); + dbg.Location( 54, 45 ); + root_1 = (CommonTree)adaptor.BecomeRoot(stream_17.NextNode(), root_1); + + dbg.Location( 54, 49 ); + adaptor.AddChild(root_1, stream_ID.NextNode()); + dbg.Location( 54, 52 ); + adaptor.AddChild(root_1, stream_expr.NextTree()); + + adaptor.AddChild(root_0, root_1); + } + + } + + retval.tree = root_0; + } + + } + break; + case 3: + dbg.EnterAlt( 3 ); + + // BuildOptions\\ProfileGrammar.g3:55:9: func NEWLINE + { + dbg.Location( 55, 8 ); + PushFollow(Follow._func_in_stat143); + func8=func(); + + state._fsp--; + + stream_func.Add(func8.Tree); + dbg.Location( 55, 13 ); + NEWLINE9=(IToken)Match(input,NEWLINE,Follow._NEWLINE_in_stat145); + stream_NEWLINE.Add(NEWLINE9); + + + + { + // AST REWRITE + // elements: func + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.Nil(); + // 55:41: -> func + { + dbg.Location( 55, 43 ); + adaptor.AddChild(root_0, stream_func.NextTree()); + + } + + retval.tree = root_0; + } + + } + break; + case 4: + dbg.EnterAlt( 4 ); + + // BuildOptions\\ProfileGrammar.g3:56:9: NEWLINE + { + dbg.Location( 56, 8 ); + NEWLINE10=(IToken)Match(input,NEWLINE,Follow._NEWLINE_in_stat178); + stream_NEWLINE.Add(NEWLINE10); + + + + { + // AST REWRITE + // elements: + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.Nil(); + // 56:41: -> + { + dbg.Location( 57, 4 ); + root_0 = null; + } + + retval.tree = root_0; + } + + } + break; + + } + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); + adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); + + } + finally + { + } + dbg.Location(57, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "stat" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return retval; + } + // $ANTLR end "stat" + + public class func_return : ParserRuleReturnScope + { + public CommonTree tree; + public override object Tree { get { return tree; } } + } + + // $ANTLR start "func" + // BuildOptions\\ProfileGrammar.g3:59:0: func : ID '(' formalPar ')' '=' expr -> ^( FUNC ID formalPar expr ) ; + private ProfileGrammarParser.func_return func( ) + { + ProfileGrammarParser.func_return retval = new ProfileGrammarParser.func_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + IToken ID11=null; + IToken char_literal12=null; + IToken char_literal14=null; + IToken char_literal15=null; + ProfileGrammarParser.formalPar_return formalPar13 = default(ProfileGrammarParser.formalPar_return); + ProfileGrammarParser.expr_return expr16 = default(ProfileGrammarParser.expr_return); + + CommonTree ID11_tree=null; + CommonTree char_literal12_tree=null; + CommonTree char_literal14_tree=null; + CommonTree char_literal15_tree=null; + RewriteRuleITokenStream stream_ID=new RewriteRuleITokenStream(adaptor,"token ID"); + RewriteRuleITokenStream stream_12=new RewriteRuleITokenStream(adaptor,"token 12"); + RewriteRuleITokenStream stream_13=new RewriteRuleITokenStream(adaptor,"token 13"); + RewriteRuleITokenStream stream_17=new RewriteRuleITokenStream(adaptor,"token 17"); + RewriteRuleSubtreeStream stream_formalPar=new RewriteRuleSubtreeStream(adaptor,"rule formalPar"); + RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr"); + try + { + dbg.EnterRule( GrammarFileName, "func" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 59, -1 ); + + try + { + // BuildOptions\\ProfileGrammar.g3:59:9: ( ID '(' formalPar ')' '=' expr -> ^( FUNC ID formalPar expr ) ) + dbg.EnterAlt( 1 ); + + // BuildOptions\\ProfileGrammar.g3:59:9: ID '(' formalPar ')' '=' expr + { + dbg.Location( 59, 8 ); + ID11=(IToken)Match(input,ID,Follow._ID_in_func219); + stream_ID.Add(ID11); + + dbg.Location( 59, 12 ); + char_literal12=(IToken)Match(input,12,Follow._12_in_func222); + stream_12.Add(char_literal12); + + dbg.Location( 59, 16 ); + PushFollow(Follow._formalPar_in_func224); + formalPar13=formalPar(); + + state._fsp--; + + stream_formalPar.Add(formalPar13.Tree); + dbg.Location( 59, 26 ); + char_literal14=(IToken)Match(input,13,Follow._13_in_func226); + stream_13.Add(char_literal14); + + dbg.Location( 59, 30 ); + char_literal15=(IToken)Match(input,17,Follow._17_in_func228); + stream_17.Add(char_literal15); + + dbg.Location( 59, 34 ); + PushFollow(Follow._expr_in_func230); + expr16=expr(); + + state._fsp--; + + stream_expr.Add(expr16.Tree); + + + { + // AST REWRITE + // elements: ID, formalPar, expr + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.Nil(); + // 59:41: -> ^( FUNC ID formalPar expr ) + { + dbg.Location( 59, 43 ); + // BuildOptions\\ProfileGrammar.g3:59:44: ^( FUNC ID formalPar expr ) + { + CommonTree root_1 = (CommonTree)adaptor.Nil(); + dbg.Location( 59, 45 ); + root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(FUNC, "FUNC"), root_1); + + dbg.Location( 59, 50 ); + adaptor.AddChild(root_1, stream_ID.NextNode()); + dbg.Location( 59, 53 ); + adaptor.AddChild(root_1, stream_formalPar.NextTree()); + dbg.Location( 59, 63 ); + adaptor.AddChild(root_1, stream_expr.NextTree()); + + adaptor.AddChild(root_0, root_1); + } + + } + + retval.tree = root_0; + } + + } + + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); + adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); + + } + finally + { + + functionDefinitions.Add(((CommonTree)retval.tree)); + + } + dbg.Location(60, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "func" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return retval; + } + // $ANTLR end "func" + + public class formalPar_return : ParserRuleReturnScope + { + public CommonTree tree; + public override object Tree { get { return tree; } } + } + + // $ANTLR start "formalPar" + // BuildOptions\\ProfileGrammar.g3:65:0: formalPar : ( ID | INT ); + private ProfileGrammarParser.formalPar_return formalPar( ) + { + ProfileGrammarParser.formalPar_return retval = new ProfileGrammarParser.formalPar_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + IToken set17=null; + + CommonTree set17_tree=null; + + try + { + dbg.EnterRule( GrammarFileName, "formalPar" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 65, -1 ); + + try + { + // BuildOptions\\ProfileGrammar.g3:66:9: ( ID | INT ) + dbg.EnterAlt( 1 ); + + // BuildOptions\\ProfileGrammar.g3: + { + root_0 = (CommonTree)adaptor.Nil(); + + dbg.Location( 66, 8 ); + set17=(IToken)input.LT(1); + if ( (input.LA(1)>=ID && input.LA(1)<=INT) ) + { + input.Consume(); + adaptor.AddChild(root_0, (CommonTree)adaptor.Create(set17)); + state.errorRecovery=false; + } + else + { + MismatchedSetException mse = new MismatchedSetException(null,input); + dbg.RecognitionException( mse ); + throw mse; + } + + + } + + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); + adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); + + } + finally + { + } + dbg.Location(68, 1); + + } + finally + { + dbg.ExitRule( GrammarFileName, "formalPar" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return retval; + } + // $ANTLR end "formalPar" + + public class expr_return : ParserRuleReturnScope + { + public CommonTree tree; + public override object Tree { get { return tree; } } + } + + // $ANTLR start "expr" + // BuildOptions\\ProfileGrammar.g3:73:0: expr : multExpr ( ( '+' | '-' ) multExpr )* ; + private ProfileGrammarParser.expr_return expr( ) + { + ProfileGrammarParser.expr_return retval = new ProfileGrammarParser.expr_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + IToken char_literal19=null; + IToken char_literal20=null; + ProfileGrammarParser.multExpr_return multExpr18 = default(ProfileGrammarParser.multExpr_return); + ProfileGrammarParser.multExpr_return multExpr21 = default(ProfileGrammarParser.multExpr_return); + + CommonTree char_literal19_tree=null; + CommonTree char_literal20_tree=null; + + try + { + dbg.EnterRule( GrammarFileName, "expr" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 73, -1 ); + + try + { + // BuildOptions\\ProfileGrammar.g3:73:9: ( multExpr ( ( '+' | '-' ) multExpr )* ) + dbg.EnterAlt( 1 ); + + // BuildOptions\\ProfileGrammar.g3:73:9: multExpr ( ( '+' | '-' ) multExpr )* + { + root_0 = (CommonTree)adaptor.Nil(); + + dbg.Location( 73, 8 ); + PushFollow(Follow._multExpr_in_expr288); + multExpr18=multExpr(); + + state._fsp--; + + adaptor.AddChild(root_0, multExpr18.Tree); + dbg.Location( 73, 17 ); + // BuildOptions\\ProfileGrammar.g3:73:18: ( ( '+' | '-' ) multExpr )* + try + { + dbg.EnterSubRule( 4 ); + + for ( ; ; ) + { + int alt4=2; + try + { + dbg.EnterDecision( 4 ); + + int LA4_0 = input.LA(1); + + if ( (LA4_0==10||LA4_0==16) ) + { + alt4=1; + } + + + } + finally + { + dbg.ExitDecision( 4 ); + } + + switch ( alt4 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\ProfileGrammar.g3:73:19: ( '+' | '-' ) multExpr + { + dbg.Location( 73, 18 ); + // BuildOptions\\ProfileGrammar.g3:73:19: ( '+' | '-' ) + int alt3=2; + try + { + dbg.EnterSubRule( 3 ); + try + { + dbg.EnterDecision( 3 ); + + int LA3_0 = input.LA(1); + + if ( (LA3_0==16) ) + { + alt3=1; + } + else if ( (LA3_0==10) ) + { + alt3=2; + } + else + { + NoViableAltException nvae = new NoViableAltException("", 3, 0, input); + + dbg.RecognitionException( nvae ); + throw nvae; + } + } + finally + { + dbg.ExitDecision( 3 ); + } + + switch ( alt3 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\ProfileGrammar.g3:73:20: '+' + { + dbg.Location( 73, 22 ); + char_literal19=(IToken)Match(input,16,Follow._16_in_expr292); + char_literal19_tree = (CommonTree)adaptor.Create(char_literal19); + root_0 = (CommonTree)adaptor.BecomeRoot(char_literal19_tree, root_0); + + + } + break; + case 2: + dbg.EnterAlt( 2 ); + + // BuildOptions\\ProfileGrammar.g3:73:25: '-' + { + dbg.Location( 73, 27 ); + char_literal20=(IToken)Match(input,10,Follow._10_in_expr295); + char_literal20_tree = (CommonTree)adaptor.Create(char_literal20); + root_0 = (CommonTree)adaptor.BecomeRoot(char_literal20_tree, root_0); + + + } + break; + + } + } + finally + { + dbg.ExitSubRule( 3 ); + } + + dbg.Location( 73, 30 ); + PushFollow(Follow._multExpr_in_expr299); + multExpr21=multExpr(); + + state._fsp--; + + adaptor.AddChild(root_0, multExpr21.Tree); + + } + break; + + default: + goto loop4; + } + } + + loop4: + ; + + } + finally + { + dbg.ExitSubRule( 4 ); + } + + + } + + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); + adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); + + } + finally + { + } + dbg.Location(74, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "expr" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return retval; + } + // $ANTLR end "expr" + + public class multExpr_return : ParserRuleReturnScope + { + public CommonTree tree; + public override object Tree { get { return tree; } } + } + + // $ANTLR start "multExpr" + // BuildOptions\\ProfileGrammar.g3:76:0: multExpr : atom ( ( '*' | '/' | '%' ) atom )* ; + private ProfileGrammarParser.multExpr_return multExpr( ) + { + ProfileGrammarParser.multExpr_return retval = new ProfileGrammarParser.multExpr_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + IToken set23=null; + ProfileGrammarParser.atom_return atom22 = default(ProfileGrammarParser.atom_return); + ProfileGrammarParser.atom_return atom24 = default(ProfileGrammarParser.atom_return); + + CommonTree set23_tree=null; + + try + { + dbg.EnterRule( GrammarFileName, "multExpr" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 76, -1 ); + + try + { + // BuildOptions\\ProfileGrammar.g3:77:9: ( atom ( ( '*' | '/' | '%' ) atom )* ) + dbg.EnterAlt( 1 ); + + // BuildOptions\\ProfileGrammar.g3:77:9: atom ( ( '*' | '/' | '%' ) atom )* + { + root_0 = (CommonTree)adaptor.Nil(); + + dbg.Location( 77, 8 ); + PushFollow(Follow._atom_in_multExpr320); + atom22=atom(); + + state._fsp--; + + adaptor.AddChild(root_0, atom22.Tree); + dbg.Location( 77, 13 ); + // BuildOptions\\ProfileGrammar.g3:77:14: ( ( '*' | '/' | '%' ) atom )* + try + { + dbg.EnterSubRule( 5 ); + + for ( ; ; ) + { + int alt5=2; + try + { + dbg.EnterDecision( 5 ); + + int LA5_0 = input.LA(1); + + if ( (LA5_0==11||(LA5_0>=14 && LA5_0<=15)) ) + { + alt5=1; + } + + + } + finally + { + dbg.ExitDecision( 5 ); + } + + switch ( alt5 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\ProfileGrammar.g3:77:15: ( '*' | '/' | '%' ) atom + { + dbg.Location( 77, 27 ); + set23=(IToken)input.LT(1); + set23=(IToken)input.LT(1); + if ( input.LA(1)==11||(input.LA(1)>=14 && input.LA(1)<=15) ) + { + input.Consume(); + root_0 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(set23), root_0); + state.errorRecovery=false; + } + else + { + MismatchedSetException mse = new MismatchedSetException(null,input); + dbg.RecognitionException( mse ); + throw mse; + } + + dbg.Location( 77, 29 ); + PushFollow(Follow._atom_in_multExpr332); + atom24=atom(); + + state._fsp--; + + adaptor.AddChild(root_0, atom24.Tree); + + } + break; + + default: + goto loop5; + } + } + + loop5: + ; + + } + finally + { + dbg.ExitSubRule( 5 ); + } + + + } + + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); + adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); + + } + finally + { + } + dbg.Location(78, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "multExpr" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return retval; + } + // $ANTLR end "multExpr" + + public class atom_return : ParserRuleReturnScope + { + public CommonTree tree; + public override object Tree { get { return tree; } } + } + + // $ANTLR start "atom" + // BuildOptions\\ProfileGrammar.g3:80:0: atom : ( INT | ID | '(' expr ')' -> expr | ID '(' expr ')' -> ^( CALL ID expr ) ); + private ProfileGrammarParser.atom_return atom( ) + { + ProfileGrammarParser.atom_return retval = new ProfileGrammarParser.atom_return(); + retval.start = input.LT(1); + + CommonTree root_0 = null; + + IToken INT25=null; + IToken ID26=null; + IToken char_literal27=null; + IToken char_literal29=null; + IToken ID30=null; + IToken char_literal31=null; + IToken char_literal33=null; + ProfileGrammarParser.expr_return expr28 = default(ProfileGrammarParser.expr_return); + ProfileGrammarParser.expr_return expr32 = default(ProfileGrammarParser.expr_return); + + CommonTree INT25_tree=null; + CommonTree ID26_tree=null; + CommonTree char_literal27_tree=null; + CommonTree char_literal29_tree=null; + CommonTree ID30_tree=null; + CommonTree char_literal31_tree=null; + CommonTree char_literal33_tree=null; + RewriteRuleITokenStream stream_12=new RewriteRuleITokenStream(adaptor,"token 12"); + RewriteRuleITokenStream stream_13=new RewriteRuleITokenStream(adaptor,"token 13"); + RewriteRuleITokenStream stream_ID=new RewriteRuleITokenStream(adaptor,"token ID"); + RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr"); + try + { + dbg.EnterRule( GrammarFileName, "atom" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 80, -1 ); + + try + { + // BuildOptions\\ProfileGrammar.g3:80:9: ( INT | ID | '(' expr ')' -> expr | ID '(' expr ')' -> ^( CALL ID expr ) ) + int alt6=4; + try + { + dbg.EnterDecision( 6 ); + + switch ( input.LA(1) ) + { + case INT: + { + alt6=1; + } + break; + case ID: + { + int LA6_2 = input.LA(2); + + if ( (LA6_2==12) ) + { + alt6=4; + } + else if ( (LA6_2==NEWLINE||(LA6_2>=10 && LA6_2<=11)||(LA6_2>=13 && LA6_2<=16)) ) + { + alt6=2; + } + else + { + NoViableAltException nvae = new NoViableAltException("", 6, 2, input); + + dbg.RecognitionException( nvae ); + throw nvae; + } + } + break; + case 12: + { + alt6=3; + } + break; + default: + { + NoViableAltException nvae = new NoViableAltException("", 6, 0, input); + + dbg.RecognitionException( nvae ); + throw nvae; + } + } + + } + finally + { + dbg.ExitDecision( 6 ); + } + + switch ( alt6 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\ProfileGrammar.g3:80:9: INT + { + root_0 = (CommonTree)adaptor.Nil(); + + dbg.Location( 80, 8 ); + INT25=(IToken)Match(input,INT,Follow._INT_in_atom348); + INT25_tree = (CommonTree)adaptor.Create(INT25); + adaptor.AddChild(root_0, INT25_tree); + + + } + break; + case 2: + dbg.EnterAlt( 2 ); + + // BuildOptions\\ProfileGrammar.g3:81:9: ID + { + root_0 = (CommonTree)adaptor.Nil(); + + dbg.Location( 81, 8 ); + ID26=(IToken)Match(input,ID,Follow._ID_in_atom358); + ID26_tree = (CommonTree)adaptor.Create(ID26); + adaptor.AddChild(root_0, ID26_tree); + + + } + break; + case 3: + dbg.EnterAlt( 3 ); + + // BuildOptions\\ProfileGrammar.g3:82:9: '(' expr ')' + { + dbg.Location( 82, 8 ); + char_literal27=(IToken)Match(input,12,Follow._12_in_atom368); + stream_12.Add(char_literal27); + + dbg.Location( 82, 12 ); + PushFollow(Follow._expr_in_atom370); + expr28=expr(); + + state._fsp--; + + stream_expr.Add(expr28.Tree); + dbg.Location( 82, 17 ); + char_literal29=(IToken)Match(input,13,Follow._13_in_atom372); + stream_13.Add(char_literal29); + + + + { + // AST REWRITE + // elements: expr + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.Nil(); + // 82:25: -> expr + { + dbg.Location( 82, 27 ); + adaptor.AddChild(root_0, stream_expr.NextTree()); + + } + + retval.tree = root_0; + } + + } + break; + case 4: + dbg.EnterAlt( 4 ); + + // BuildOptions\\ProfileGrammar.g3:83:9: ID '(' expr ')' + { + dbg.Location( 83, 8 ); + ID30=(IToken)Match(input,ID,Follow._ID_in_atom389); + stream_ID.Add(ID30); + + dbg.Location( 83, 11 ); + char_literal31=(IToken)Match(input,12,Follow._12_in_atom391); + stream_12.Add(char_literal31); + + dbg.Location( 83, 15 ); + PushFollow(Follow._expr_in_atom393); + expr32=expr(); + + state._fsp--; + + stream_expr.Add(expr32.Tree); + dbg.Location( 83, 20 ); + char_literal33=(IToken)Match(input,13,Follow._13_in_atom395); + stream_13.Add(char_literal33); + + + + { + // AST REWRITE + // elements: ID, expr + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (CommonTree)adaptor.Nil(); + // 83:25: -> ^( CALL ID expr ) + { + dbg.Location( 83, 27 ); + // BuildOptions\\ProfileGrammar.g3:83:28: ^( CALL ID expr ) + { + CommonTree root_1 = (CommonTree)adaptor.Nil(); + dbg.Location( 83, 29 ); + root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(CALL, "CALL"), root_1); + + dbg.Location( 83, 34 ); + adaptor.AddChild(root_1, stream_ID.NextNode()); + dbg.Location( 83, 37 ); + adaptor.AddChild(root_1, stream_expr.NextTree()); + + adaptor.AddChild(root_0, root_1); + } + + } + + retval.tree = root_0; + } + + } + break; + + } + retval.stop = input.LT(-1); + + retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0); + adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re); + + } + finally + { + } + dbg.Location(84, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "atom" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return retval; + } + // $ANTLR end "atom" + #endregion + + // Delegated rules + + #region Synpreds + #endregion + + #region DFA + DFA2 dfa2; + + protected override void InitDFAs() + { + base.InitDFAs(); + dfa2 = new DFA2( this ); + } + + class DFA2 : DFA + { + + const string DFA2_eotS = + "\xA\xFFFF"; + const string DFA2_eofS = + "\xA\xFFFF"; + const string DFA2_minS = + "\x1\x6\x1\xFFFF\x1\x8\x1\xFFFF\x1\x6\x1\xFFFF\x2\xA\x1\x8\x1\xFFFF"; + const string DFA2_maxS = + "\x1\xC\x1\xFFFF\x1\x11\x1\xFFFF\x1\xC\x1\xFFFF\x2\x10\x1\x11\x1\xFFFF"; + const string DFA2_acceptS = + "\x1\xFFFF\x1\x1\x1\xFFFF\x1\x4\x1\xFFFF\x1\x2\x3\xFFFF\x1\x3"; + const string DFA2_specialS = + "\xA\xFFFF}>"; + static readonly string[] DFA2_transitionS = + { + "\x1\x2\x1\x1\x1\x3\x3\xFFFF\x1\x1", + "", + "\x1\x1\x1\xFFFF\x2\x1\x1\x4\x1\xFFFF\x3\x1\x1\x5", + "", + "\x1\x7\x1\x6\x4\xFFFF\x1\x1", + "", + "\x2\x1\x1\xFFFF\x1\x8\x3\x1", + "\x3\x1\x1\x8\x3\x1", + "\x1\x1\x1\xFFFF\x2\x1\x2\xFFFF\x3\x1\x1\x9", + "" + }; + + static readonly short[] DFA2_eot = DFA.UnpackEncodedString(DFA2_eotS); + static readonly short[] DFA2_eof = DFA.UnpackEncodedString(DFA2_eofS); + static readonly char[] DFA2_min = DFA.UnpackEncodedStringToUnsignedChars(DFA2_minS); + static readonly char[] DFA2_max = DFA.UnpackEncodedStringToUnsignedChars(DFA2_maxS); + static readonly short[] DFA2_accept = DFA.UnpackEncodedString(DFA2_acceptS); + static readonly short[] DFA2_special = DFA.UnpackEncodedString(DFA2_specialS); + static readonly short[][] DFA2_transition; + + static DFA2() + { + int numStates = DFA2_transitionS.Length; + DFA2_transition = new short[numStates][]; + for ( int i=0; i < numStates; i++ ) + { + DFA2_transition[i] = DFA.UnpackEncodedString(DFA2_transitionS[i]); + } + } + + public DFA2( BaseRecognizer recognizer ) + { + this.recognizer = recognizer; + this.decisionNumber = 2; + this.eot = DFA2_eot; + this.eof = DFA2_eof; + this.min = DFA2_min; + this.max = DFA2_max; + this.accept = DFA2_accept; + this.special = DFA2_special; + this.transition = DFA2_transition; + } + public override string GetDescription() + { + return "53:0: stat : ( expr NEWLINE -> expr | ID '=' expr NEWLINE -> ^( '=' ID expr ) | func NEWLINE -> func | NEWLINE ->);"; + } + public override void Error( NoViableAltException nvae ) + { + ((DebugParser)recognizer).dbg.RecognitionException( nvae ); + } + } + + + #endregion + + #region Follow Sets + public static class Follow + { + public static readonly BitSet _stat_in_prog53 = new BitSet(new ulong[]{0x11C2UL}); + public static readonly BitSet _expr_in_stat70 = new BitSet(new ulong[]{0x100UL}); + public static readonly BitSet _NEWLINE_in_stat72 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _ID_in_stat105 = new BitSet(new ulong[]{0x20000UL}); + public static readonly BitSet _17_in_stat107 = new BitSet(new ulong[]{0x10C0UL}); + public static readonly BitSet _expr_in_stat109 = new BitSet(new ulong[]{0x100UL}); + public static readonly BitSet _NEWLINE_in_stat111 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _func_in_stat143 = new BitSet(new ulong[]{0x100UL}); + public static readonly BitSet _NEWLINE_in_stat145 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _NEWLINE_in_stat178 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _ID_in_func219 = new BitSet(new ulong[]{0x1000UL}); + public static readonly BitSet _12_in_func222 = new BitSet(new ulong[]{0xC0UL}); + public static readonly BitSet _formalPar_in_func224 = new BitSet(new ulong[]{0x2000UL}); + public static readonly BitSet _13_in_func226 = new BitSet(new ulong[]{0x20000UL}); + public static readonly BitSet _17_in_func228 = new BitSet(new ulong[]{0x10C0UL}); + public static readonly BitSet _expr_in_func230 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _set_in_formalPar267 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _multExpr_in_expr288 = new BitSet(new ulong[]{0x10402UL}); + public static readonly BitSet _16_in_expr292 = new BitSet(new ulong[]{0x10C0UL}); + public static readonly BitSet _10_in_expr295 = new BitSet(new ulong[]{0x10C0UL}); + public static readonly BitSet _multExpr_in_expr299 = new BitSet(new ulong[]{0x10402UL}); + public static readonly BitSet _atom_in_multExpr320 = new BitSet(new ulong[]{0xC802UL}); + public static readonly BitSet _set_in_multExpr323 = new BitSet(new ulong[]{0x10C0UL}); + public static readonly BitSet _atom_in_multExpr332 = new BitSet(new ulong[]{0xC802UL}); + public static readonly BitSet _INT_in_atom348 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _ID_in_atom358 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _12_in_atom368 = new BitSet(new ulong[]{0x10C0UL}); + public static readonly BitSet _expr_in_atom370 = new BitSet(new ulong[]{0x2000UL}); + public static readonly BitSet _13_in_atom372 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _ID_in_atom389 = new BitSet(new ulong[]{0x1000UL}); + public static readonly BitSet _12_in_atom391 = new BitSet(new ulong[]{0x10C0UL}); + public static readonly BitSet _expr_in_atom393 = new BitSet(new ulong[]{0x2000UL}); + public static readonly BitSet _13_in_atom395 = new BitSet(new ulong[]{0x2UL}); + + } + #endregion +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarParserHelper.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarParserHelper.cs new file mode 100644 index 0000000..ddd7533 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileGrammarParserHelper.cs @@ -0,0 +1,40 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; +using Antlr.Runtime.Tree; + +partial class ProfileGrammarParser +{ + /** List of function definitions. Must point at the FUNC nodes. */ + List<CommonTree> functionDefinitions = new List<CommonTree>(); +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammar.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammar.cs new file mode 100644 index 0000000..4491cb3 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammar.cs @@ -0,0 +1,863 @@ +// $ANTLR 3.1.2 BuildOptions\\ProfileTreeGrammar.g3 2009-03-16 13:19:20 + +// The variable 'variable' is assigned but its value is never used. +#pragma warning disable 219 +// Unreachable code detected. +#pragma warning disable 162 + + +//import java.util.Map; +//import java.util.HashMap; +using BigInteger = java.math.BigInteger; +using Console = System.Console; + + +using System.Collections.Generic; +using Antlr.Runtime; +using Antlr.Runtime.Tree; +using RewriteRuleITokenStream = Antlr.Runtime.Tree.RewriteRuleTokenStream;using Stack = System.Collections.Generic.Stack<object>; +using List = System.Collections.IList; +using ArrayList = System.Collections.Generic.List<object>; + +using Antlr.Runtime.Debug; +using IOException = System.IO.IOException; +public partial class ProfileTreeGrammar : DebugTreeParser +{ + public static readonly string[] tokenNames = new string[] { + "<invalid>", "<EOR>", "<DOWN>", "<UP>", "CALL", "FUNC", "ID", "INT", "NEWLINE", "WS", "'-'", "'%'", "'('", "')'", "'*'", "'/'", "'+'", "'='" + }; + public const int EOF=-1; + public const int T__10=10; + public const int T__11=11; + public const int T__12=12; + public const int T__13=13; + public const int T__14=14; + public const int T__15=15; + public const int T__16=16; + public const int T__17=17; + public const int CALL=4; + public const int FUNC=5; + public const int ID=6; + public const int INT=7; + public const int NEWLINE=8; + public const int WS=9; + + // delegates + // delegators + + public static readonly string[] ruleNames = + new string[] + { + "invalidRule", "call", "expr", "prog", "stat" + }; + + int ruleLevel = 0; + public virtual int RuleLevel { get { return ruleLevel; } } + public virtual void IncRuleLevel() { ruleLevel++; } + public virtual void DecRuleLevel() { ruleLevel--; } + public ProfileTreeGrammar( ITreeNodeStream input ) + : this( input, new Profiler(null), new RecognizerSharedState() ) + { + } + public ProfileTreeGrammar( ITreeNodeStream input, IDebugEventListener dbg, RecognizerSharedState state ) + : base( input, dbg, state ) + { + Profiler p = (Profiler)dbg; + p.setParser(this); + } + + public ProfileTreeGrammar( ITreeNodeStream input, IDebugEventListener dbg ) + : base( input, dbg, new RecognizerSharedState() ) + { + Profiler p = (Profiler)dbg; + p.setParser(this); + } + public virtual bool AlreadyParsedRule( IIntStream input, int ruleIndex ) + { + ((Profiler)dbg).ExamineRuleMemoization(input, ruleIndex, ProfileTreeGrammar.ruleNames[ruleIndex]); + return super.AlreadyParsedRule(input, ruleIndex); + } + + public virtual void Memoize( IIntStream input, int ruleIndex, int ruleStartIndex ) + { + ((Profiler)dbg).Memoize(input, ruleIndex, ruleStartIndex, ProfileTreeGrammar.ruleNames[ruleIndex]); + super.Memoize(input, ruleIndex, ruleStartIndex); + } + protected virtual bool EvalPredicate( bool result, string predicate ) + { + dbg.SemanticPredicate( result, predicate ); + return result; + } + + + public override string[] GetTokenNames() { return ProfileTreeGrammar.tokenNames; } + public override string GrammarFileName { get { return "BuildOptions\\ProfileTreeGrammar.g3"; } } + + + #region Rules + + // $ANTLR start "prog" + // BuildOptions\\ProfileTreeGrammar.g3:53:0: prog : ( stat )* ; + private void prog( ) + { + try + { + dbg.EnterRule( GrammarFileName, "prog" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 53, -1 ); + + try + { + // BuildOptions\\ProfileTreeGrammar.g3:53:9: ( ( stat )* ) + dbg.EnterAlt( 1 ); + + // BuildOptions\\ProfileTreeGrammar.g3:53:9: ( stat )* + { + dbg.Location( 53, 8 ); + // BuildOptions\\ProfileTreeGrammar.g3:53:9: ( stat )* + try + { + dbg.EnterSubRule( 1 ); + + for ( ; ; ) + { + int alt1=2; + try + { + dbg.EnterDecision( 1 ); + + int LA1_0 = input.LA(1); + + if ( ((LA1_0>=CALL && LA1_0<=INT)||(LA1_0>=10 && LA1_0<=11)||(LA1_0>=14 && LA1_0<=17)) ) + { + alt1=1; + } + + + } + finally + { + dbg.ExitDecision( 1 ); + } + + switch ( alt1 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\ProfileTreeGrammar.g3:53:0: stat + { + dbg.Location( 53, 8 ); + PushFollow(Follow._stat_in_prog48); + stat(); + + state._fsp--; + + + } + break; + + default: + goto loop1; + } + } + + loop1: + ; + + } + finally + { + dbg.ExitSubRule( 1 ); + } + + + } + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + } + finally + { + } + dbg.Location(54, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "prog" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return ; + } + // $ANTLR end "prog" + + + // $ANTLR start "stat" + // BuildOptions\\ProfileTreeGrammar.g3:56:0: stat : ( expr | ^( '=' ID expr ) | ^( FUNC ( . )+ ) ); + private void stat( ) + { + CommonTree ID2=null; + BigInteger expr1 = default(BigInteger); + BigInteger expr3 = default(BigInteger); + + try + { + dbg.EnterRule( GrammarFileName, "stat" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 56, -1 ); + + try + { + // BuildOptions\\ProfileTreeGrammar.g3:56:9: ( expr | ^( '=' ID expr ) | ^( FUNC ( . )+ ) ) + int alt3=3; + try + { + dbg.EnterDecision( 3 ); + + switch ( input.LA(1) ) + { + case CALL: + case ID: + case INT: + case 10: + case 11: + case 14: + case 15: + case 16: + { + alt3=1; + } + break; + case 17: + { + alt3=2; + } + break; + case FUNC: + { + alt3=3; + } + break; + default: + { + NoViableAltException nvae = new NoViableAltException("", 3, 0, input); + + dbg.RecognitionException( nvae ); + throw nvae; + } + } + + } + finally + { + dbg.ExitDecision( 3 ); + } + + switch ( alt3 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\ProfileTreeGrammar.g3:56:9: expr + { + dbg.Location( 56, 8 ); + PushFollow(Follow._expr_in_stat63); + expr1=expr(); + + state._fsp--; + + dbg.Location( 56, 35 ); + string result = expr1.ToString(); + Console.Out.WriteLine(expr1 + " (about " + result[0] + "*10^" + (result.Length-1) + ")"); + + + } + break; + case 2: + dbg.EnterAlt( 2 ); + + // BuildOptions\\ProfileTreeGrammar.g3:59:9: ^( '=' ID expr ) + { + dbg.Location( 59, 8 ); + dbg.Location( 59, 10 ); + Match(input,17,Follow._17_in_stat98); + + Match(input, TokenConstants.DOWN, null); + dbg.Location( 59, 14 ); + ID2=(CommonTree)Match(input,ID,Follow._ID_in_stat100); + dbg.Location( 59, 17 ); + PushFollow(Follow._expr_in_stat102); + expr3=expr(); + + state._fsp--; + + + Match(input, TokenConstants.UP, null); + dbg.Location( 59, 35 ); + globalMemory[(ID2!=null?ID2.Text:null)] = expr3; + + } + break; + case 3: + dbg.EnterAlt( 3 ); + + // BuildOptions\\ProfileTreeGrammar.g3:60:9: ^( FUNC ( . )+ ) + { + dbg.Location( 60, 8 ); + dbg.Location( 60, 10 ); + Match(input,FUNC,Follow._FUNC_in_stat128); + + Match(input, TokenConstants.DOWN, null); + dbg.Location( 60, 15 ); + // BuildOptions\\ProfileTreeGrammar.g3:60:16: ( . )+ + int cnt2=0; + try + { + dbg.EnterSubRule( 2 ); + + for ( ; ; ) + { + int alt2=2; + try + { + dbg.EnterDecision( 2 ); + + int LA2_0 = input.LA(1); + + if ( ((LA2_0>=CALL && LA2_0<=17)) ) + { + alt2=1; + } + else if ( (LA2_0==UP) ) + { + alt2=2; + } + + + } + finally + { + dbg.ExitDecision( 2 ); + } + + switch ( alt2 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\ProfileTreeGrammar.g3:60:0: . + { + dbg.Location( 60, 15 ); + MatchAny(input); + + } + break; + + default: + if ( cnt2 >= 1 ) + goto loop2; + + EarlyExitException eee2 = new EarlyExitException( 2, input ); + dbg.RecognitionException( eee2 ); + + throw eee2; + } + cnt2++; + } + loop2: + ; + + } + finally + { + dbg.ExitSubRule( 2 ); + } + + + Match(input, TokenConstants.UP, null); + + } + break; + + } + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + } + finally + { + } + dbg.Location(61, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "stat" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return ; + } + // $ANTLR end "stat" + + + // $ANTLR start "expr" + // BuildOptions\\ProfileTreeGrammar.g3:63:0: expr returns [BigInteger value] : ( ^( '+' a= expr b= expr ) | ^( '-' a= expr b= expr ) | ^( '*' a= expr b= expr ) | ^( '/' a= expr b= expr ) | ^( '%' a= expr b= expr ) | ID | INT | call ); + private BigInteger expr( ) + { + + BigInteger value = default(BigInteger); + + CommonTree ID4=null; + CommonTree INT5=null; + BigInteger a = default(BigInteger); + BigInteger b = default(BigInteger); + BigInteger call6 = default(BigInteger); + + try + { + dbg.EnterRule( GrammarFileName, "expr" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 63, -1 ); + + try + { + // BuildOptions\\ProfileTreeGrammar.g3:64:9: ( ^( '+' a= expr b= expr ) | ^( '-' a= expr b= expr ) | ^( '*' a= expr b= expr ) | ^( '/' a= expr b= expr ) | ^( '%' a= expr b= expr ) | ID | INT | call ) + int alt4=8; + try + { + dbg.EnterDecision( 4 ); + + switch ( input.LA(1) ) + { + case 16: + { + alt4=1; + } + break; + case 10: + { + alt4=2; + } + break; + case 14: + { + alt4=3; + } + break; + case 15: + { + alt4=4; + } + break; + case 11: + { + alt4=5; + } + break; + case ID: + { + alt4=6; + } + break; + case INT: + { + alt4=7; + } + break; + case CALL: + { + alt4=8; + } + break; + default: + { + NoViableAltException nvae = new NoViableAltException("", 4, 0, input); + + dbg.RecognitionException( nvae ); + throw nvae; + } + } + + } + finally + { + dbg.ExitDecision( 4 ); + } + + switch ( alt4 ) + { + case 1: + dbg.EnterAlt( 1 ); + + // BuildOptions\\ProfileTreeGrammar.g3:64:9: ^( '+' a= expr b= expr ) + { + dbg.Location( 64, 8 ); + dbg.Location( 64, 10 ); + Match(input,16,Follow._16_in_expr172); + + Match(input, TokenConstants.DOWN, null); + dbg.Location( 64, 15 ); + PushFollow(Follow._expr_in_expr176); + a=expr(); + + state._fsp--; + + dbg.Location( 64, 22 ); + PushFollow(Follow._expr_in_expr180); + b=expr(); + + state._fsp--; + + + Match(input, TokenConstants.UP, null); + dbg.Location( 64, 35 ); + value = a.add(b); + + } + break; + case 2: + dbg.EnterAlt( 2 ); + + // BuildOptions\\ProfileTreeGrammar.g3:65:9: ^( '-' a= expr b= expr ) + { + dbg.Location( 65, 8 ); + dbg.Location( 65, 10 ); + Match(input,10,Follow._10_in_expr200); + + Match(input, TokenConstants.DOWN, null); + dbg.Location( 65, 15 ); + PushFollow(Follow._expr_in_expr204); + a=expr(); + + state._fsp--; + + dbg.Location( 65, 22 ); + PushFollow(Follow._expr_in_expr208); + b=expr(); + + state._fsp--; + + + Match(input, TokenConstants.UP, null); + dbg.Location( 65, 35 ); + value = a.subtract(b); + + } + break; + case 3: + dbg.EnterAlt( 3 ); + + // BuildOptions\\ProfileTreeGrammar.g3:66:9: ^( '*' a= expr b= expr ) + { + dbg.Location( 66, 8 ); + dbg.Location( 66, 10 ); + Match(input,14,Follow._14_in_expr228); + + Match(input, TokenConstants.DOWN, null); + dbg.Location( 66, 15 ); + PushFollow(Follow._expr_in_expr232); + a=expr(); + + state._fsp--; + + dbg.Location( 66, 22 ); + PushFollow(Follow._expr_in_expr236); + b=expr(); + + state._fsp--; + + + Match(input, TokenConstants.UP, null); + dbg.Location( 66, 35 ); + value = a.multiply(b); + + } + break; + case 4: + dbg.EnterAlt( 4 ); + + // BuildOptions\\ProfileTreeGrammar.g3:67:9: ^( '/' a= expr b= expr ) + { + dbg.Location( 67, 8 ); + dbg.Location( 67, 10 ); + Match(input,15,Follow._15_in_expr256); + + Match(input, TokenConstants.DOWN, null); + dbg.Location( 67, 15 ); + PushFollow(Follow._expr_in_expr260); + a=expr(); + + state._fsp--; + + dbg.Location( 67, 22 ); + PushFollow(Follow._expr_in_expr264); + b=expr(); + + state._fsp--; + + + Match(input, TokenConstants.UP, null); + dbg.Location( 67, 35 ); + value = a.divide(b); + + } + break; + case 5: + dbg.EnterAlt( 5 ); + + // BuildOptions\\ProfileTreeGrammar.g3:68:9: ^( '%' a= expr b= expr ) + { + dbg.Location( 68, 8 ); + dbg.Location( 68, 10 ); + Match(input,11,Follow._11_in_expr284); + + Match(input, TokenConstants.DOWN, null); + dbg.Location( 68, 15 ); + PushFollow(Follow._expr_in_expr288); + a=expr(); + + state._fsp--; + + dbg.Location( 68, 22 ); + PushFollow(Follow._expr_in_expr292); + b=expr(); + + state._fsp--; + + + Match(input, TokenConstants.UP, null); + dbg.Location( 68, 35 ); + value = a.remainder(b); + + } + break; + case 6: + dbg.EnterAlt( 6 ); + + // BuildOptions\\ProfileTreeGrammar.g3:69:9: ID + { + dbg.Location( 69, 8 ); + ID4=(CommonTree)Match(input,ID,Follow._ID_in_expr311); + dbg.Location( 69, 35 ); + value = getValue((ID4!=null?ID4.Text:null)); + + } + break; + case 7: + dbg.EnterAlt( 7 ); + + // BuildOptions\\ProfileTreeGrammar.g3:70:9: INT + { + dbg.Location( 70, 8 ); + INT5=(CommonTree)Match(input,INT,Follow._INT_in_expr347); + dbg.Location( 70, 35 ); + value = new BigInteger((INT5!=null?INT5.Text:null)); + + } + break; + case 8: + dbg.EnterAlt( 8 ); + + // BuildOptions\\ProfileTreeGrammar.g3:71:9: call + { + dbg.Location( 71, 8 ); + PushFollow(Follow._call_in_expr382); + call6=call(); + + state._fsp--; + + dbg.Location( 71, 35 ); + value = call6; + + } + break; + + } + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + } + finally + { + } + dbg.Location(72, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "expr" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return value; + } + // $ANTLR end "expr" + + + // $ANTLR start "call" + // BuildOptions\\ProfileTreeGrammar.g3:74:0: call returns [BigInteger value] : ^( CALL ID expr ) ; + private BigInteger call( ) + { + + BigInteger value = default(BigInteger); + + CommonTree ID8=null; + BigInteger expr7 = default(BigInteger); + + try + { + dbg.EnterRule( GrammarFileName, "call" ); + if ( RuleLevel == 0 ) + { + dbg.Commence(); + } + IncRuleLevel(); + dbg.Location( 74, -1 ); + + try + { + // BuildOptions\\ProfileTreeGrammar.g3:75:9: ( ^( CALL ID expr ) ) + dbg.EnterAlt( 1 ); + + // BuildOptions\\ProfileTreeGrammar.g3:75:9: ^( CALL ID expr ) + { + dbg.Location( 75, 8 ); + dbg.Location( 75, 10 ); + Match(input,CALL,Follow._CALL_in_call430); + + Match(input, TokenConstants.DOWN, null); + dbg.Location( 75, 15 ); + ID8=(CommonTree)Match(input,ID,Follow._ID_in_call432); + dbg.Location( 75, 18 ); + PushFollow(Follow._expr_in_call434); + expr7=expr(); + + state._fsp--; + + + Match(input, TokenConstants.UP, null); + dbg.Location( 75, 35 ); + BigInteger p = expr7; + CommonTree funcRoot = findFunction((ID8!=null?ID8.Text:null), p); + if (funcRoot == null) { + Console.Error.WriteLine("No match found for " + (ID8!=null?ID8.Text:null) + "(" + p + ")"); + } else { + // Here we set up the local evaluator to run over the + // function definition with the parameter value. + // This re-reads a sub-AST of our input AST! + ProfileTreeGrammar e = new ProfileTreeGrammar(funcRoot, functionDefinitions, globalMemory, p); + value = e.expr(); + } + + + } + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + } + finally + { + } + dbg.Location(87, 4); + + } + finally + { + dbg.ExitRule( GrammarFileName, "call" ); + DecRuleLevel(); + if ( RuleLevel == 0 ) + { + dbg.Terminate(); + } + } + + return value; + } + // $ANTLR end "call" + #endregion + + // Delegated rules + + #region Synpreds + #endregion + + #region DFA + + protected override void InitDFAs() + { + base.InitDFAs(); + } + + #endregion + + #region Follow Sets + public static class Follow + { + public static readonly BitSet _stat_in_prog48 = new BitSet(new ulong[]{0x3CCF2UL}); + public static readonly BitSet _expr_in_stat63 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _17_in_stat98 = new BitSet(new ulong[]{0x4UL}); + public static readonly BitSet _ID_in_stat100 = new BitSet(new ulong[]{0x1CCD0UL}); + public static readonly BitSet _expr_in_stat102 = new BitSet(new ulong[]{0x8UL}); + public static readonly BitSet _FUNC_in_stat128 = new BitSet(new ulong[]{0x4UL}); + public static readonly BitSet _16_in_expr172 = new BitSet(new ulong[]{0x4UL}); + public static readonly BitSet _expr_in_expr176 = new BitSet(new ulong[]{0x1CCD0UL}); + public static readonly BitSet _expr_in_expr180 = new BitSet(new ulong[]{0x8UL}); + public static readonly BitSet _10_in_expr200 = new BitSet(new ulong[]{0x4UL}); + public static readonly BitSet _expr_in_expr204 = new BitSet(new ulong[]{0x1CCD0UL}); + public static readonly BitSet _expr_in_expr208 = new BitSet(new ulong[]{0x8UL}); + public static readonly BitSet _14_in_expr228 = new BitSet(new ulong[]{0x4UL}); + public static readonly BitSet _expr_in_expr232 = new BitSet(new ulong[]{0x1CCD0UL}); + public static readonly BitSet _expr_in_expr236 = new BitSet(new ulong[]{0x8UL}); + public static readonly BitSet _15_in_expr256 = new BitSet(new ulong[]{0x4UL}); + public static readonly BitSet _expr_in_expr260 = new BitSet(new ulong[]{0x1CCD0UL}); + public static readonly BitSet _expr_in_expr264 = new BitSet(new ulong[]{0x8UL}); + public static readonly BitSet _11_in_expr284 = new BitSet(new ulong[]{0x4UL}); + public static readonly BitSet _expr_in_expr288 = new BitSet(new ulong[]{0x1CCD0UL}); + public static readonly BitSet _expr_in_expr292 = new BitSet(new ulong[]{0x8UL}); + public static readonly BitSet _ID_in_expr311 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _INT_in_expr347 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _call_in_expr382 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _CALL_in_call430 = new BitSet(new ulong[]{0x4UL}); + public static readonly BitSet _ID_in_call432 = new BitSet(new ulong[]{0x1CCD0UL}); + public static readonly BitSet _expr_in_call434 = new BitSet(new ulong[]{0x8UL}); + + } + #endregion +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammar.g3 b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammar.g3 new file mode 100644 index 0000000..f6786db --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammar.g3 @@ -0,0 +1,88 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +tree grammar ProfileTreeGrammar; + +options +{ + language=CSharp3; + tokenVocab=ProfileGrammar; + ASTLabelType=CommonTree; +} + +// START:members +@header +{ +//import java.util.Map; +//import java.util.HashMap; +using BigInteger = java.math.BigInteger; +using Console = System.Console; +} +// END:members + +// START:rules +prog: stat* + ; + +stat: expr { string result = $expr.value.ToString(); + Console.Out.WriteLine($expr.value + " (about " + result[0] + "*10^" + (result.Length-1) + ")"); + } + | ^('=' ID expr) { globalMemory[$ID.text] = $expr.value; } + | ^(FUNC .+) // ignore FUNCs - we added them to functionDefinitions already in parser. + ; + +expr returns [BigInteger value] + : ^('+' a=expr b=expr) { $value = $a.value.add($b.value); } + | ^('-' a=expr b=expr) { $value = $a.value.subtract($b.value); } + | ^('*' a=expr b=expr) { $value = $a.value.multiply($b.value); } + | ^('/' a=expr b=expr) { $value = $a.value.divide($b.value); } + | ^('%' a=expr b=expr) { $value = $a.value.remainder($b.value); } + | ID { $value = getValue($ID.text); } + | INT { $value = new BigInteger($INT.text); } + | call { $value = $call.value; } + ; + +call returns [BigInteger value] + : ^(CALL ID expr) { BigInteger p = $expr.value; + CommonTree funcRoot = findFunction($ID.text, p); + if (funcRoot == null) { + Console.Error.WriteLine("No match found for " + $ID.text + "(" + p + ")"); + } else { + // Here we set up the local evaluator to run over the + // function definition with the parameter value. + // This re-reads a sub-AST of our input AST! + ProfileTreeGrammar e = new ProfileTreeGrammar(funcRoot, functionDefinitions, globalMemory, p); + $value = e.expr(); + } + } + ; +// END:rules diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammarHelper.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammarHelper.cs new file mode 100644 index 0000000..47cc8a8 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/BuildOptions/ProfileTreeGrammarHelper.cs @@ -0,0 +1,116 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; +using Antlr.Runtime.Tree; + +using BigInteger = java.math.BigInteger; +using Console = System.Console; + +partial class ProfileTreeGrammar +{ + /** Points to functions tracked by tree builder. */ + private List<CommonTree> functionDefinitions; + + /** Remember local variables. Currently, this is only the function parameter. + */ + private readonly IDictionary<string, BigInteger> localMemory = new Dictionary<string, BigInteger>(); + + /** Remember global variables set by =. */ + private IDictionary<string, BigInteger> globalMemory = new Dictionary<string, BigInteger>(); + + /** Set up an evaluator with a node stream; and a set of function definition ASTs. */ + public ProfileTreeGrammar( CommonTreeNodeStream nodes, List<CommonTree> functionDefinitions ) + : this( nodes ) + { + this.functionDefinitions = functionDefinitions; + } + + /** Set up a local evaluator for a nested function call. The evaluator gets the definition + * tree of the function; the set of all defined functions (to find locally called ones); a + * pointer to the global variable memory; and the value of the function parameter to be + * added to the local memory. + */ + private ProfileTreeGrammar( CommonTree function, + List<CommonTree> functionDefinitions, + IDictionary<string, BigInteger> globalMemory, + BigInteger paramValue ) + // Expected tree for function: ^(FUNC ID ( INT | ID ) expr) + : this( new CommonTreeNodeStream( function.GetChild( 2 ) ), functionDefinitions ) + { + this.globalMemory = globalMemory; + localMemory[function.GetChild( 1 ).Text] = paramValue; + } + + /** Find matching function definition for a function name and parameter + * value. The first definition is returned where (a) the name matches + * and (b) the formal parameter agrees if it is defined as constant. + */ + private CommonTree findFunction( string name, BigInteger paramValue ) + { + foreach ( CommonTree f in functionDefinitions ) + { + // Expected tree for f: ^(FUNC ID (ID | INT) expr) + if ( f.GetChild( 0 ).Text.Equals( name ) ) + { + // Check whether parameter matches + CommonTree formalPar = (CommonTree)f.GetChild( 1 ); + if ( formalPar.Token.Type == INT + && !new BigInteger( formalPar.Token.Text ).Equals( paramValue ) ) + { + // Constant in formalPar list does not match actual value -> no match. + continue; + } + // Parameter (value for INT formal arg) as well as fct name agrees! + return f; + } + } + return null; + } + + /** Get value of name up call stack. */ + public BigInteger getValue( string name ) + { + BigInteger value; + if ( localMemory.TryGetValue( name, out value ) && value != null ) + { + return value; + } + if ( globalMemory.TryGetValue( name, out value ) && value != null ) + { + return value; + } + // not found in local memory or global memory + Console.Error.WriteLine( "undefined variable " + name ); + return new BigInteger( "0" ); + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/JavaCompat/Expr.g3 b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/JavaCompat/Expr.g3 new file mode 100644 index 0000000..65e7c5d --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/JavaCompat/Expr.g3 @@ -0,0 +1,110 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +grammar Expr; + +/* + I had to make the following changes to the basic Expr grammar to make it work with the CSharp3 target in "Java compatibility mode". + For reference, see http://www.antlr.org/wiki/display/ANTLR3/Expression+evaluator. + + Add an options section to set the language to CSharp3. + + In the @header section, add: + // 'member' is obsolete + #pragma warning disable 612 + using Antlr.Runtime.JavaExtensions; + + In the @header section, replace: + import java.util.HashMap; + with: + using HashMap = System.Collections.Generic.Dictionary<object,object>; + + Change all instances of "System.out" with "JSystem.@out". + + Change all instances of "System.err" with "JSystem.err". + + Change all instances of "skip()" with "Skip()". + */ + +options +{ + language=CSharp3; +} + +@header { +// 'member' is obsolete +#pragma warning disable 612 + +using Antlr.Runtime.JavaExtensions; +using HashMap = System.Collections.Generic.Dictionary<object,object>; +using Integer = java.lang.Integer; +} + +@members { +/** Map variable name to Integer object holding value */ +HashMap memory = new HashMap(); +} + +prog: stat+ ; + +stat: expr NEWLINE {JSystem.@out.println($expr.value);} + | ID '=' expr NEWLINE + {memory.put($ID.text, new Integer($expr.value));} + | NEWLINE + ; + +expr returns [int value] + : e=multExpr {$value = $e.value;} + ( '+' e=multExpr {$value += $e.value;} + | '-' e=multExpr {$value -= $e.value;} + )* + ; + +multExpr returns [int value] + : e=atom {$value = $e.value;} ('*' e=atom {$value *= $e.value;})* + ; + +atom returns [int value] + : INT {$value = Integer.parseInt($INT.text);} + | ID + { + Integer v = (Integer)memory.get($ID.text); + if ( v!=null ) $value = v.intValue(); + else JSystem.err.println("undefined variable "+$ID.text); + } + | '(' expr ')' {$value = $expr.value;} + ; + +ID : ('a'..'z'|'A'..'Z')+ ; +INT : '0'..'9'+ ; +NEWLINE:'\r'? '\n' ; +WS : (' '|'\t')+ {Skip();} ; diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/JavaCompat/ExprLexer.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/JavaCompat/ExprLexer.cs new file mode 100644 index 0000000..98b22e1 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/JavaCompat/ExprLexer.cs @@ -0,0 +1,617 @@ +// $ANTLR 3.1.2 JavaCompat\\Expr.g3 2009-03-16 13:19:15 + +// The variable 'variable' is assigned but its value is never used. +#pragma warning disable 219 +// Unreachable code detected. +#pragma warning disable 162 + + +using System.Collections.Generic; +using Antlr.Runtime; +using Stack = System.Collections.Generic.Stack<object>; +using List = System.Collections.IList; +using ArrayList = System.Collections.Generic.List<object>; + +public partial class ExprLexer : Lexer +{ + public const int EOF=-1; + public const int T__8=8; + public const int T__9=9; + public const int T__10=10; + public const int T__11=11; + public const int T__12=12; + public const int T__13=13; + public const int ID=4; + public const int INT=5; + public const int NEWLINE=6; + public const int WS=7; + + // delegates + // delegators + + public ExprLexer() {} + public ExprLexer( ICharStream input ) + : this( input, new RecognizerSharedState() ) + { + } + public ExprLexer( ICharStream input, RecognizerSharedState state ) + : base( input, state ) + { + + } + public override string GrammarFileName { get { return "JavaCompat\\Expr.g3"; } } + + // $ANTLR start "T__8" + private void mT__8() + { + try + { + int _type = T__8; + int _channel = DEFAULT_TOKEN_CHANNEL; + // JavaCompat\\Expr.g3:7:8: ( '-' ) + // JavaCompat\\Expr.g3:7:8: '-' + { + Match('-'); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__8" + + // $ANTLR start "T__9" + private void mT__9() + { + try + { + int _type = T__9; + int _channel = DEFAULT_TOKEN_CHANNEL; + // JavaCompat\\Expr.g3:8:8: ( '(' ) + // JavaCompat\\Expr.g3:8:8: '(' + { + Match('('); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__9" + + // $ANTLR start "T__10" + private void mT__10() + { + try + { + int _type = T__10; + int _channel = DEFAULT_TOKEN_CHANNEL; + // JavaCompat\\Expr.g3:9:9: ( ')' ) + // JavaCompat\\Expr.g3:9:9: ')' + { + Match(')'); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__10" + + // $ANTLR start "T__11" + private void mT__11() + { + try + { + int _type = T__11; + int _channel = DEFAULT_TOKEN_CHANNEL; + // JavaCompat\\Expr.g3:10:9: ( '*' ) + // JavaCompat\\Expr.g3:10:9: '*' + { + Match('*'); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__11" + + // $ANTLR start "T__12" + private void mT__12() + { + try + { + int _type = T__12; + int _channel = DEFAULT_TOKEN_CHANNEL; + // JavaCompat\\Expr.g3:11:9: ( '+' ) + // JavaCompat\\Expr.g3:11:9: '+' + { + Match('+'); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__12" + + // $ANTLR start "T__13" + private void mT__13() + { + try + { + int _type = T__13; + int _channel = DEFAULT_TOKEN_CHANNEL; + // JavaCompat\\Expr.g3:12:9: ( '=' ) + // JavaCompat\\Expr.g3:12:9: '=' + { + Match('='); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "T__13" + + // $ANTLR start "ID" + private void mID() + { + try + { + int _type = ID; + int _channel = DEFAULT_TOKEN_CHANNEL; + // JavaCompat\\Expr.g3:107:9: ( ( 'a' .. 'z' | 'A' .. 'Z' )+ ) + // JavaCompat\\Expr.g3:107:9: ( 'a' .. 'z' | 'A' .. 'Z' )+ + { + // JavaCompat\\Expr.g3:107:9: ( 'a' .. 'z' | 'A' .. 'Z' )+ + int cnt1=0; + for ( ; ; ) + { + int alt1=2; + int LA1_0 = input.LA(1); + + if ( ((LA1_0>='A' && LA1_0<='Z')||(LA1_0>='a' && LA1_0<='z')) ) + { + alt1=1; + } + + + switch ( alt1 ) + { + case 1: + // JavaCompat\\Expr.g3: + { + input.Consume(); + + + } + break; + + default: + if ( cnt1 >= 1 ) + goto loop1; + + EarlyExitException eee1 = new EarlyExitException( 1, input ); + throw eee1; + } + cnt1++; + } + loop1: + ; + + + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "ID" + + // $ANTLR start "INT" + private void mINT() + { + try + { + int _type = INT; + int _channel = DEFAULT_TOKEN_CHANNEL; + // JavaCompat\\Expr.g3:108:9: ( ( '0' .. '9' )+ ) + // JavaCompat\\Expr.g3:108:9: ( '0' .. '9' )+ + { + // JavaCompat\\Expr.g3:108:9: ( '0' .. '9' )+ + int cnt2=0; + for ( ; ; ) + { + int alt2=2; + int LA2_0 = input.LA(1); + + if ( ((LA2_0>='0' && LA2_0<='9')) ) + { + alt2=1; + } + + + switch ( alt2 ) + { + case 1: + // JavaCompat\\Expr.g3: + { + input.Consume(); + + + } + break; + + default: + if ( cnt2 >= 1 ) + goto loop2; + + EarlyExitException eee2 = new EarlyExitException( 2, input ); + throw eee2; + } + cnt2++; + } + loop2: + ; + + + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "INT" + + // $ANTLR start "NEWLINE" + private void mNEWLINE() + { + try + { + int _type = NEWLINE; + int _channel = DEFAULT_TOKEN_CHANNEL; + // JavaCompat\\Expr.g3:109:9: ( ( '\\r' )? '\\n' ) + // JavaCompat\\Expr.g3:109:9: ( '\\r' )? '\\n' + { + // JavaCompat\\Expr.g3:109:9: ( '\\r' )? + int alt3=2; + int LA3_0 = input.LA(1); + + if ( (LA3_0=='\r') ) + { + alt3=1; + } + switch ( alt3 ) + { + case 1: + // JavaCompat\\Expr.g3:109:0: '\\r' + { + Match('\r'); + + } + break; + + } + + Match('\n'); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "NEWLINE" + + // $ANTLR start "WS" + private void mWS() + { + try + { + int _type = WS; + int _channel = DEFAULT_TOKEN_CHANNEL; + // JavaCompat\\Expr.g3:110:9: ( ( ' ' | '\\t' )+ ) + // JavaCompat\\Expr.g3:110:9: ( ' ' | '\\t' )+ + { + // JavaCompat\\Expr.g3:110:9: ( ' ' | '\\t' )+ + int cnt4=0; + for ( ; ; ) + { + int alt4=2; + int LA4_0 = input.LA(1); + + if ( (LA4_0=='\t'||LA4_0==' ') ) + { + alt4=1; + } + + + switch ( alt4 ) + { + case 1: + // JavaCompat\\Expr.g3: + { + input.Consume(); + + + } + break; + + default: + if ( cnt4 >= 1 ) + goto loop4; + + EarlyExitException eee4 = new EarlyExitException( 4, input ); + throw eee4; + } + cnt4++; + } + loop4: + ; + + + Skip(); + + } + + state.type = _type; + state.channel = _channel; + } + finally + { + } + } + // $ANTLR end "WS" + + public override void mTokens() + { + // JavaCompat\\Expr.g3:1:10: ( T__8 | T__9 | T__10 | T__11 | T__12 | T__13 | ID | INT | NEWLINE | WS ) + int alt5=10; + switch ( input.LA(1) ) + { + case '-': + { + alt5=1; + } + break; + case '(': + { + alt5=2; + } + break; + case ')': + { + alt5=3; + } + break; + case '*': + { + alt5=4; + } + break; + case '+': + { + alt5=5; + } + break; + case '=': + { + alt5=6; + } + break; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + { + alt5=7; + } + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + alt5=8; + } + break; + case '\n': + case '\r': + { + alt5=9; + } + break; + case '\t': + case ' ': + { + alt5=10; + } + break; + default: + { + NoViableAltException nvae = new NoViableAltException("", 5, 0, input); + + throw nvae; + } + } + + switch ( alt5 ) + { + case 1: + // JavaCompat\\Expr.g3:1:10: T__8 + { + mT__8(); + + } + break; + case 2: + // JavaCompat\\Expr.g3:1:15: T__9 + { + mT__9(); + + } + break; + case 3: + // JavaCompat\\Expr.g3:1:20: T__10 + { + mT__10(); + + } + break; + case 4: + // JavaCompat\\Expr.g3:1:26: T__11 + { + mT__11(); + + } + break; + case 5: + // JavaCompat\\Expr.g3:1:32: T__12 + { + mT__12(); + + } + break; + case 6: + // JavaCompat\\Expr.g3:1:38: T__13 + { + mT__13(); + + } + break; + case 7: + // JavaCompat\\Expr.g3:1:44: ID + { + mID(); + + } + break; + case 8: + // JavaCompat\\Expr.g3:1:47: INT + { + mINT(); + + } + break; + case 9: + // JavaCompat\\Expr.g3:1:51: NEWLINE + { + mNEWLINE(); + + } + break; + case 10: + // JavaCompat\\Expr.g3:1:59: WS + { + mWS(); + + } + break; + + } + + } + + + #region DFA + + protected override void InitDFAs() + { + base.InitDFAs(); + } + + + #endregion + +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/JavaCompat/ExprParser.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/JavaCompat/ExprParser.cs new file mode 100644 index 0000000..752dcef --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/JavaCompat/ExprParser.cs @@ -0,0 +1,533 @@ +// $ANTLR 3.1.2 JavaCompat\\Expr.g3 2009-03-16 13:19:15 + +// The variable 'variable' is assigned but its value is never used. +#pragma warning disable 219 +// Unreachable code detected. +#pragma warning disable 162 + + +// 'member' is obsolete +#pragma warning disable 612 + +using Antlr.Runtime.JavaExtensions; +using HashMap = System.Collections.Generic.Dictionary<object,object>; +using Integer = java.lang.Integer; + + +using System.Collections.Generic; +using Antlr.Runtime; +using Stack = System.Collections.Generic.Stack<object>; +using List = System.Collections.IList; +using ArrayList = System.Collections.Generic.List<object>; + +public partial class ExprParser : Parser +{ + public static readonly string[] tokenNames = new string[] { + "<invalid>", "<EOR>", "<DOWN>", "<UP>", "ID", "INT", "NEWLINE", "WS", "'-'", "'('", "')'", "'*'", "'+'", "'='" + }; + public const int EOF=-1; + public const int T__8=8; + public const int T__9=9; + public const int T__10=10; + public const int T__11=11; + public const int T__12=12; + public const int T__13=13; + public const int ID=4; + public const int INT=5; + public const int NEWLINE=6; + public const int WS=7; + + // delegates + // delegators + + public ExprParser( ITokenStream input ) + : this( input, new RecognizerSharedState() ) + { + } + public ExprParser( ITokenStream input, RecognizerSharedState state ) + : base( input, state ) + { + } + + + public override string[] GetTokenNames() { return ExprParser.tokenNames; } + public override string GrammarFileName { get { return "JavaCompat\\Expr.g3"; } } + + + /** Map variable name to Integer object holding value */ + HashMap memory = new HashMap(); + + + #region Rules + + // $ANTLR start "prog" + // JavaCompat\\Expr.g3:77:0: prog : ( stat )+ ; + private void prog( ) + { + try + { + // JavaCompat\\Expr.g3:77:9: ( ( stat )+ ) + // JavaCompat\\Expr.g3:77:9: ( stat )+ + { + // JavaCompat\\Expr.g3:77:9: ( stat )+ + int cnt1=0; + for ( ; ; ) + { + int alt1=2; + int LA1_0 = input.LA(1); + + if ( ((LA1_0>=ID && LA1_0<=NEWLINE)||LA1_0==9) ) + { + alt1=1; + } + + + switch ( alt1 ) + { + case 1: + // JavaCompat\\Expr.g3:77:0: stat + { + PushFollow(Follow._stat_in_prog40); + stat(); + + state._fsp--; + + + } + break; + + default: + if ( cnt1 >= 1 ) + goto loop1; + + EarlyExitException eee1 = new EarlyExitException( 1, input ); + throw eee1; + } + cnt1++; + } + loop1: + ; + + + + } + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + } + finally + { + } + return ; + } + // $ANTLR end "prog" + + + // $ANTLR start "stat" + // JavaCompat\\Expr.g3:79:0: stat : ( expr NEWLINE | ID '=' expr NEWLINE | NEWLINE ); + private void stat( ) + { + IToken ID2=null; + int expr1 = default(int); + int expr3 = default(int); + + try + { + // JavaCompat\\Expr.g3:79:9: ( expr NEWLINE | ID '=' expr NEWLINE | NEWLINE ) + int alt2=3; + switch ( input.LA(1) ) + { + case INT: + case 9: + { + alt2=1; + } + break; + case ID: + { + int LA2_2 = input.LA(2); + + if ( (LA2_2==13) ) + { + alt2=2; + } + else if ( (LA2_2==NEWLINE||LA2_2==8||(LA2_2>=11 && LA2_2<=12)) ) + { + alt2=1; + } + else + { + NoViableAltException nvae = new NoViableAltException("", 2, 2, input); + + throw nvae; + } + } + break; + case NEWLINE: + { + alt2=3; + } + break; + default: + { + NoViableAltException nvae = new NoViableAltException("", 2, 0, input); + + throw nvae; + } + } + + switch ( alt2 ) + { + case 1: + // JavaCompat\\Expr.g3:79:9: expr NEWLINE + { + PushFollow(Follow._expr_in_stat51); + expr1=expr(); + + state._fsp--; + + Match(input,NEWLINE,Follow._NEWLINE_in_stat53); + JSystem.@out.println(expr1); + + } + break; + case 2: + // JavaCompat\\Expr.g3:80:9: ID '=' expr NEWLINE + { + ID2=(IToken)Match(input,ID,Follow._ID_in_stat65); + Match(input,13,Follow._13_in_stat67); + PushFollow(Follow._expr_in_stat69); + expr3=expr(); + + state._fsp--; + + Match(input,NEWLINE,Follow._NEWLINE_in_stat71); + memory.put((ID2!=null?ID2.Text:null), new Integer(expr3)); + + } + break; + case 3: + // JavaCompat\\Expr.g3:82:9: NEWLINE + { + Match(input,NEWLINE,Follow._NEWLINE_in_stat91); + + } + break; + + } + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + } + finally + { + } + return ; + } + // $ANTLR end "stat" + + + // $ANTLR start "expr" + // JavaCompat\\Expr.g3:85:0: expr returns [int value] : e= multExpr ( '+' e= multExpr | '-' e= multExpr )* ; + private int expr( ) + { + + int value = default(int); + + int e = default(int); + + try + { + // JavaCompat\\Expr.g3:86:9: (e= multExpr ( '+' e= multExpr | '-' e= multExpr )* ) + // JavaCompat\\Expr.g3:86:9: e= multExpr ( '+' e= multExpr | '-' e= multExpr )* + { + PushFollow(Follow._multExpr_in_expr116); + e=multExpr(); + + state._fsp--; + + value = e; + // JavaCompat\\Expr.g3:87:9: ( '+' e= multExpr | '-' e= multExpr )* + for ( ; ; ) + { + int alt3=3; + int LA3_0 = input.LA(1); + + if ( (LA3_0==12) ) + { + alt3=1; + } + else if ( (LA3_0==8) ) + { + alt3=2; + } + + + switch ( alt3 ) + { + case 1: + // JavaCompat\\Expr.g3:87:13: '+' e= multExpr + { + Match(input,12,Follow._12_in_expr132); + PushFollow(Follow._multExpr_in_expr136); + e=multExpr(); + + state._fsp--; + + value += e; + + } + break; + case 2: + // JavaCompat\\Expr.g3:88:13: '-' e= multExpr + { + Match(input,8,Follow._8_in_expr152); + PushFollow(Follow._multExpr_in_expr156); + e=multExpr(); + + state._fsp--; + + value -= e; + + } + break; + + default: + goto loop3; + } + } + + loop3: + ; + + + + } + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + } + finally + { + } + return value; + } + // $ANTLR end "expr" + + + // $ANTLR start "multExpr" + // JavaCompat\\Expr.g3:92:0: multExpr returns [int value] : e= atom ( '*' e= atom )* ; + private int multExpr( ) + { + + int value = default(int); + + int e = default(int); + + try + { + // JavaCompat\\Expr.g3:93:9: (e= atom ( '*' e= atom )* ) + // JavaCompat\\Expr.g3:93:9: e= atom ( '*' e= atom )* + { + PushFollow(Follow._atom_in_multExpr194); + e=atom(); + + state._fsp--; + + value = e; + // JavaCompat\\Expr.g3:93:37: ( '*' e= atom )* + for ( ; ; ) + { + int alt4=2; + int LA4_0 = input.LA(1); + + if ( (LA4_0==11) ) + { + alt4=1; + } + + + switch ( alt4 ) + { + case 1: + // JavaCompat\\Expr.g3:93:38: '*' e= atom + { + Match(input,11,Follow._11_in_multExpr199); + PushFollow(Follow._atom_in_multExpr203); + e=atom(); + + state._fsp--; + + value *= e; + + } + break; + + default: + goto loop4; + } + } + + loop4: + ; + + + + } + + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + } + finally + { + } + return value; + } + // $ANTLR end "multExpr" + + + // $ANTLR start "atom" + // JavaCompat\\Expr.g3:96:0: atom returns [int value] : ( INT | ID | '(' expr ')' ); + private int atom( ) + { + + int value = default(int); + + IToken INT4=null; + IToken ID5=null; + int expr6 = default(int); + + try + { + // JavaCompat\\Expr.g3:97:9: ( INT | ID | '(' expr ')' ) + int alt5=3; + switch ( input.LA(1) ) + { + case INT: + { + alt5=1; + } + break; + case ID: + { + alt5=2; + } + break; + case 9: + { + alt5=3; + } + break; + default: + { + NoViableAltException nvae = new NoViableAltException("", 5, 0, input); + + throw nvae; + } + } + + switch ( alt5 ) + { + case 1: + // JavaCompat\\Expr.g3:97:9: INT + { + INT4=(IToken)Match(input,INT,Follow._INT_in_atom231); + value = Integer.parseInt((INT4!=null?INT4.Text:null)); + + } + break; + case 2: + // JavaCompat\\Expr.g3:98:9: ID + { + ID5=(IToken)Match(input,ID,Follow._ID_in_atom243); + + Integer v = (Integer)memory.get((ID5!=null?ID5.Text:null)); + if ( v!=null ) value = v.intValue(); + else JSystem.err.println("undefined variable "+(ID5!=null?ID5.Text:null)); + + + } + break; + case 3: + // JavaCompat\\Expr.g3:104:9: '(' expr ')' + { + Match(input,9,Follow._9_in_atom263); + PushFollow(Follow._expr_in_atom265); + expr6=expr(); + + state._fsp--; + + Match(input,10,Follow._10_in_atom267); + value = expr6; + + } + break; + + } + } + catch ( RecognitionException re ) + { + ReportError(re); + Recover(input,re); + } + finally + { + } + return value; + } + // $ANTLR end "atom" + #endregion + + // Delegated rules + + #region Synpreds + #endregion + + #region DFA + + protected override void InitDFAs() + { + base.InitDFAs(); + } + + #endregion + + #region Follow Sets + public static class Follow + { + public static readonly BitSet _stat_in_prog40 = new BitSet(new ulong[]{0x272UL}); + public static readonly BitSet _expr_in_stat51 = new BitSet(new ulong[]{0x40UL}); + public static readonly BitSet _NEWLINE_in_stat53 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _ID_in_stat65 = new BitSet(new ulong[]{0x2000UL}); + public static readonly BitSet _13_in_stat67 = new BitSet(new ulong[]{0x230UL}); + public static readonly BitSet _expr_in_stat69 = new BitSet(new ulong[]{0x40UL}); + public static readonly BitSet _NEWLINE_in_stat71 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _NEWLINE_in_stat91 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _multExpr_in_expr116 = new BitSet(new ulong[]{0x1102UL}); + public static readonly BitSet _12_in_expr132 = new BitSet(new ulong[]{0x230UL}); + public static readonly BitSet _multExpr_in_expr136 = new BitSet(new ulong[]{0x1102UL}); + public static readonly BitSet _8_in_expr152 = new BitSet(new ulong[]{0x230UL}); + public static readonly BitSet _multExpr_in_expr156 = new BitSet(new ulong[]{0x1102UL}); + public static readonly BitSet _atom_in_multExpr194 = new BitSet(new ulong[]{0x802UL}); + public static readonly BitSet _11_in_multExpr199 = new BitSet(new ulong[]{0x230UL}); + public static readonly BitSet _atom_in_multExpr203 = new BitSet(new ulong[]{0x802UL}); + public static readonly BitSet _INT_in_atom231 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _ID_in_atom243 = new BitSet(new ulong[]{0x2UL}); + public static readonly BitSet _9_in_atom263 = new BitSet(new ulong[]{0x230UL}); + public static readonly BitSet _expr_in_atom265 = new BitSet(new ulong[]{0x400UL}); + public static readonly BitSet _10_in_atom267 = new BitSet(new ulong[]{0x2UL}); + + } + #endregion +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Properties/AssemblyInfo.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..402410e --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.Test/Properties/AssemblyInfo.cs @@ -0,0 +1,68 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle( "Antlr3.Runtime.Test" )] +[assembly: AssemblyDescription( "" )] +[assembly: AssemblyConfiguration( "" )] +[assembly: AssemblyCompany( "Pixel Mine, Inc." )] +[assembly: AssemblyProduct( "Antlr3.Runtime.Test" )] +[assembly: AssemblyCopyright( "Copyright © Pixel Mine 2009" )] +[assembly: AssemblyTrademark( "" )] +[assembly: AssemblyCulture( "" )] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible( false )] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid( "1352b15b-eded-4380-9122-acde32f7ff38" )] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion( "1.0.0.0" )] +[assembly: AssemblyFileVersion( "1.0.0.0" )] diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.sln b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.sln new file mode 100644 index 0000000..1550134 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.sln @@ -0,0 +1,36 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Antlr3.Runtime", "Antlr3.Runtime\Antlr3.Runtime.csproj", "{8FDC0A87-9005-4D5A-AB75-E55CEB575559}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Antlr3.Runtime.Debug", "Antlr3.Runtime.Debug\Antlr3.Runtime.Debug.csproj", "{5EE27A90-B023-42C9-AAF1-52B0424C5D0B}" +EndProject +Global + GlobalSection(SourceCodeControl) = preSolution + SccNumberOfProjects = 3 + SccLocalPath0 = . + SccProjectUniqueName1 = Antlr3.Runtime\\Antlr3.Runtime.csproj + SccLocalPath1 = . + SccProjectFilePathRelativizedFromConnection1 = Antlr3.Runtime\\ + SccProjectUniqueName2 = Antlr3.Runtime.Debug\\Antlr3.Runtime.Debug.csproj + SccLocalPath2 = . + SccProjectFilePathRelativizedFromConnection2 = Antlr3.Runtime.Debug\\ + EndGlobalSection + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8FDC0A87-9005-4D5A-AB75-E55CEB575559}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8FDC0A87-9005-4D5A-AB75-E55CEB575559}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8FDC0A87-9005-4D5A-AB75-E55CEB575559}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8FDC0A87-9005-4D5A-AB75-E55CEB575559}.Release|Any CPU.Build.0 = Release|Any CPU + {5EE27A90-B023-42C9-AAF1-52B0424C5D0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5EE27A90-B023-42C9-AAF1-52B0424C5D0B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5EE27A90-B023-42C9-AAF1-52B0424C5D0B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5EE27A90-B023-42C9-AAF1-52B0424C5D0B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.vssscc b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.vssscc new file mode 100644 index 0000000..6cb031b --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime.vssscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT" +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRFileStream.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRFileStream.cs new file mode 100644 index 0000000..e7730ee --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRFileStream.cs @@ -0,0 +1,80 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + using Encoding = System.Text.Encoding; + + /** <summary> + * This is a char buffer stream that is loaded from a file + * all at once when you construct the object. This looks very + * much like an ANTLReader or ANTLRInputStream, but it's a special case + * since we know the exact size of the object to load. We can avoid lots + * of data copying. + * </summary> + */ + [System.Serializable] + public class ANTLRFileStream : ANTLRStringStream + { + protected string fileName; + + public ANTLRFileStream( string fileName ) + : this( fileName, null ) + { + } + + public ANTLRFileStream( string fileName, Encoding encoding ) + { + this.fileName = fileName; + Load( fileName, encoding ); + } + + public virtual void Load( string fileName, Encoding encoding ) + { + if ( fileName == null ) + { + return; + } + + data = System.IO.File.ReadAllText( fileName, encoding ).ToCharArray(); + n = data.Length; + } + + public override string SourceName + { + get + { + return fileName; + } + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRInputStream.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRInputStream.cs new file mode 100644 index 0000000..fdd8298 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRInputStream.cs @@ -0,0 +1,85 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + using Encoding = System.Text.Encoding; + using Stream = System.IO.Stream; + using StreamReader = System.IO.StreamReader; + + /** <summary> + * A kind of ReaderStream that pulls from an InputStream. + * Useful for reading from stdin and specifying file encodings etc... + * </summary> + */ + [System.Serializable] + public class ANTLRInputStream : ANTLRReaderStream + { + public ANTLRInputStream() + { + } + + public ANTLRInputStream( Stream input ) + : this( input, null ) + { + } + + public ANTLRInputStream( Stream input, int size ) + : this( input, size, null ) + { + } + + public ANTLRInputStream( Stream input, Encoding encoding ) + : this( input, INITIAL_BUFFER_SIZE, encoding ) + { + } + + public ANTLRInputStream( Stream input, int size, Encoding encoding ) + : this( input, size, READ_BUFFER_SIZE, encoding ) + { + } + + public ANTLRInputStream( Stream input, int size, int readBufferSize, Encoding encoding ) + { + StreamReader isr; + if ( encoding != null ) + { + isr = new StreamReader( input, encoding ); + } + else + { + isr = new StreamReader( input ); + } + Load( isr, size, readBufferSize ); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRReaderStream.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRReaderStream.cs new file mode 100644 index 0000000..b16f295 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRReaderStream.cs @@ -0,0 +1,97 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + using TextReader = System.IO.TextReader; + + /** <summary> + * Vacuum all input from a Reader and then treat it like a StringStream. + * Manage the buffer manually to avoid unnecessary data copying. + * </summary> + * + * <remarks> + * If you need encoding, use ANTLRInputStream. + * </remarks> + */ + [System.Serializable] + public class ANTLRReaderStream : ANTLRStringStream + { + public const int READ_BUFFER_SIZE = 1024; + public const int INITIAL_BUFFER_SIZE = 1024; + + public ANTLRReaderStream() + { + } + + public ANTLRReaderStream( TextReader r ) + : this( r, INITIAL_BUFFER_SIZE, READ_BUFFER_SIZE ) + { + } + + public ANTLRReaderStream( TextReader r, int size ) + : this( r, size, READ_BUFFER_SIZE ) + { + } + + public ANTLRReaderStream( TextReader r, int size, int readChunkSize ) + { + Load( r, size, readChunkSize ); + } + + public virtual void Load( TextReader r, int size, int readChunkSize ) + { + if ( r == null ) + { + return; + } + if ( size <= 0 ) + { + size = INITIAL_BUFFER_SIZE; + } + if ( readChunkSize <= 0 ) + { + readChunkSize = READ_BUFFER_SIZE; + } + // System.out.println("load "+size+" in chunks of "+readChunkSize); + try + { + data = r.ReadToEnd().ToCharArray(); + base.n = data.Length; + } + finally + { + r.Close(); + } + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRStringStream.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRStringStream.cs new file mode 100644 index 0000000..f334877 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ANTLRStringStream.cs @@ -0,0 +1,293 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + using System.Collections.Generic; + + /** <summary> + * A pretty quick CharStream that pulls all data from an array + * directly. Every method call counts in the lexer. Java's + * strings aren't very good so I'm avoiding. + * </summary> + */ + [System.Serializable] + public class ANTLRStringStream : ICharStream + { + /** <summary>The data being scanned</summary> */ + protected char[] data; + + /** <summary>How many characters are actually in the buffer</summary> */ + protected int n; + + /** <summary>0..n-1 index into string of next char</summary> */ + protected int p = 0; + + /** <summary>line number 1..n within the input</summary> */ + protected int line = 1; + + /** <summary>The index of the character relative to the beginning of the line 0..n-1</summary> */ + protected int charPositionInLine = 0; + + /** <summary>tracks how deep mark() calls are nested</summary> */ + protected int markDepth = 0; + + /** <summary> + * A list of CharStreamState objects that tracks the stream state + * values line, charPositionInLine, and p that can change as you + * move through the input stream. Indexed from 1..markDepth. + * A null is kept @ index 0. Create upon first call to mark(). + * </summary> + */ + protected IList<CharStreamState> markers; + + /** <summary>Track the last mark() call result value for use in rewind().</summary> */ + protected int lastMarker; + + /** <summary>What is name or source of this char stream?</summary> */ + public string name; + + public ANTLRStringStream() + { + } + + /** <summary>Copy data in string to a local char array</summary> */ + public ANTLRStringStream( string input ) + : this( input, null ) + { + } + + public ANTLRStringStream( string input, string sourceName ) + : this( input.ToCharArray(), input.Length, sourceName ) + { + } + + /** <summary>This is the preferred constructor as no data is copied</summary> */ + public ANTLRStringStream( char[] data, int numberOfActualCharsInArray ) + : this( data, numberOfActualCharsInArray, null ) + { + } + + public ANTLRStringStream( char[] data, int numberOfActualCharsInArray, string sourceName ) + : this() + { + this.data = data; + this.n = numberOfActualCharsInArray; + this.name = sourceName; + } + + /** <summary> + * Return the current input symbol index 0..n where n indicates the + * last symbol has been read. The index is the index of char to + * be returned from LA(1). + * </summary> + */ + public virtual int Index + { + get + { + return p; + } + } + public virtual int Line + { + get + { + return line; + } + set + { + line = value; + } + } + public virtual int CharPositionInLine + { + get + { + return charPositionInLine; + } + set + { + charPositionInLine = value; + } + } + + /** <summary> + * Reset the stream so that it's in the same state it was + * when the object was created *except* the data array is not + * touched. + * </summary> + */ + public virtual void Reset() + { + p = 0; + line = 1; + charPositionInLine = 0; + markDepth = 0; + } + + public virtual void Consume() + { + //System.out.println("prev p="+p+", c="+(char)data[p]); + if ( p < n ) + { + charPositionInLine++; + if ( data[p] == '\n' ) + { + /* + System.out.println("newline char found on line: "+line+ + "@ pos="+charPositionInLine); + */ + line++; + charPositionInLine = 0; + } + p++; + //System.out.println("p moves to "+p+" (c='"+(char)data[p]+"')"); + } + } + + public virtual int LA( int i ) + { + if ( i == 0 ) + { + return 0; // undefined + } + if ( i < 0 ) + { + i++; // e.g., translate LA(-1) to use offset i=0; then data[p+0-1] + if ( ( p + i - 1 ) < 0 ) + { + return CharStreamConstants.EOF; // invalid; no char before first char + } + } + + if ( ( p + i - 1 ) >= n ) + { + //System.out.println("char LA("+i+")=EOF; p="+p); + return CharStreamConstants.EOF; + } + //System.out.println("char LA("+i+")="+(char)data[p+i-1]+"; p="+p); + //System.out.println("LA("+i+"); p="+p+" n="+n+" data.length="+data.length); + return data[p + i - 1]; + } + + public virtual int LT( int i ) + { + return LA( i ); + } + + public virtual int Size() + { + return n; + } + + public virtual int Mark() + { + if ( markers == null ) + { + markers = new List<CharStreamState>(); + markers.Add( null ); // depth 0 means no backtracking, leave blank + } + markDepth++; + CharStreamState state = null; + if ( markDepth >= markers.Count ) + { + state = new CharStreamState(); + markers.Add( state ); + } + else + { + state = markers[markDepth]; + } + state.p = p; + state.line = line; + state.charPositionInLine = charPositionInLine; + lastMarker = markDepth; + return markDepth; + } + + public virtual void Rewind( int m ) + { + CharStreamState state = markers[m]; + // restore stream state + Seek( state.p ); + line = state.line; + charPositionInLine = state.charPositionInLine; + Release( m ); + } + + public virtual void Rewind() + { + Rewind( lastMarker ); + } + + public virtual void Release( int marker ) + { + // unwind any other markers made after m and release m + markDepth = marker; + // release this marker + markDepth--; + } + + /** <summary> + * consume() ahead until p==index; can't just set p=index as we must + * update line and charPositionInLine. + * </summary> + */ + public virtual void Seek( int index ) + { + if ( index <= p ) + { + p = index; // just jump; don't update stream state (line, ...) + return; + } + // seek forward, consume until p hits index + while ( p < index ) + { + Consume(); + } + } + + public virtual string substring( int start, int stop ) + { + return new string( data, start, stop - start + 1 ); + } + + public virtual string SourceName + { + get + { + return name; + } + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Antlr3.Runtime.csproj b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Antlr3.Runtime.csproj new file mode 100644 index 0000000..6608358 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Antlr3.Runtime.csproj @@ -0,0 +1,128 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>9.0.30729</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{8FDC0A87-9005-4D5A-AB75-E55CEB575559}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>Antlr.Runtime</RootNamespace> + <AssemblyName>Antlr3.Runtime</AssemblyName> + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + <SccProjectName>SAK</SccProjectName> + <SccLocalPath>SAK</SccLocalPath> + <SccAuxPath>SAK</SccAuxPath> + <SccProvider>SAK</SccProvider> + <SignAssembly>true</SignAssembly> + <AssemblyOriginatorKeyFile>Key.snk</AssemblyOriginatorKeyFile> + <TargetFrameworkSubset>Client</TargetFrameworkSubset> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="System" /> + <Reference Include="System.Core"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + </ItemGroup> + <ItemGroup> + <Compile Include="ANTLRFileStream.cs" /> + <Compile Include="ANTLRInputStream.cs" /> + <Compile Include="ANTLRReaderStream.cs" /> + <Compile Include="ANTLRStringStream.cs" /> + <Compile Include="BaseRecognizer.cs" /> + <Compile Include="BitSet.cs" /> + <Compile Include="CharStreamConstants.cs" /> + <Compile Include="CharStreamState.cs" /> + <Compile Include="ClassicToken.cs" /> + <Compile Include="CommonToken.cs" /> + <Compile Include="CommonTokenStream.cs" /> + <Compile Include="Debug\DebugEventListenerConstants.cs" /> + <Compile Include="Debug\IDebugEventListener.cs" /> + <Compile Include="DFA.cs" /> + <Compile Include="EarlyExitException.cs" /> + <Compile Include="FailedPredicateException.cs" /> + <Compile Include="ICharStream.cs" /> + <Compile Include="IIntStream.cs" /> + <Compile Include="IToken.cs" /> + <Compile Include="ITokenSource.cs" /> + <Compile Include="ITokenStream.cs" /> + <Compile Include="Lexer.cs" /> + <Compile Include="Misc\FastQueue.cs" /> + <Compile Include="Misc\LookaheadStream.cs" /> + <Compile Include="MismatchedNotSetException.cs" /> + <Compile Include="MismatchedRangeException.cs" /> + <Compile Include="MismatchedSetException.cs" /> + <Compile Include="MismatchedTokenException.cs" /> + <Compile Include="MismatchedTreeNodeException.cs" /> + <Compile Include="MissingTokenException.cs" /> + <Compile Include="NoViableAltException.cs" /> + <Compile Include="Parser.cs" /> + <Compile Include="ParserRuleReturnScope.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="RecognitionException.cs" /> + <Compile Include="RecognizerSharedState.cs" /> + <Compile Include="RuleReturnScope.cs" /> + <Compile Include="TokenConstants.cs" /> + <Compile Include="TokenRewriteStream.cs" /> + <Compile Include="Tree\BaseTree.cs" /> + <Compile Include="Tree\BaseTreeAdaptor.cs" /> + <Compile Include="Tree\BufferedTreeNodeStream.cs" /> + <Compile Include="Tree\CommonErrorNode.cs" /> + <Compile Include="Tree\CommonTree.cs" /> + <Compile Include="Tree\CommonTreeAdaptor.cs" /> + <Compile Include="Tree\CommonTreeNodeStream.cs" /> + <Compile Include="Tree\ITree.cs" /> + <Compile Include="Tree\ITreeAdaptor.cs" /> + <Compile Include="Tree\ITreeNodeStream.cs" /> + <Compile Include="Tree\ITreeVisitorAction.cs" /> + <Compile Include="Tree\ParseTree.cs" /> + <Compile Include="Tree\RewriteCardinalityException.cs" /> + <Compile Include="Tree\RewriteEarlyExitException.cs" /> + <Compile Include="Tree\RewriteEmptyStreamException.cs" /> + <Compile Include="Tree\RewriteRuleElementStream.cs" /> + <Compile Include="Tree\RewriteRuleNodeStream.cs" /> + <Compile Include="Tree\RewriteRuleSubtreeStream.cs" /> + <Compile Include="Tree\RewriteRuleTokenStream.cs" /> + <Compile Include="Tree\TreeConstants.cs" /> + <Compile Include="Tree\TreeFilter.cs" /> + <Compile Include="Tree\TreeIterator.cs" /> + <Compile Include="Tree\TreeParser.cs" /> + <Compile Include="Tree\TreePatternLexer.cs" /> + <Compile Include="Tree\TreePatternParser.cs" /> + <Compile Include="Tree\TreeRewriter.cs" /> + <Compile Include="Tree\TreeRuleReturnScope.cs" /> + <Compile Include="Tree\TreeVisitor.cs" /> + <Compile Include="Tree\TreeWizard.cs" /> + <Compile Include="UnwantedTokenException.cs" /> + </ItemGroup> + <ItemGroup> + <None Include="Key.snk" /> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project> \ No newline at end of file diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Antlr3.Runtime.csproj.vspscc b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Antlr3.Runtime.csproj.vspscc new file mode 100644 index 0000000..b6d3289 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Antlr3.Runtime.csproj.vspscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/BaseRecognizer.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/BaseRecognizer.cs new file mode 100644 index 0000000..7701609 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/BaseRecognizer.cs @@ -0,0 +1,1148 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + using System.Collections.Generic; + + using Array = System.Array; + using Conditional = System.Diagnostics.ConditionalAttribute; + using Console = System.Console; + using Exception = System.Exception; + using IDebugEventListener = Antlr.Runtime.Debug.IDebugEventListener; + using NotSupportedException = System.NotSupportedException; + using Regex = System.Text.RegularExpressions.Regex; + using StackFrame = System.Diagnostics.StackFrame; + using StackTrace = System.Diagnostics.StackTrace; + + /** <summary> + * A generic recognizer that can handle recognizers generated from + * lexer, parser, and tree grammars. This is all the parsing + * support code essentially; most of it is error recovery stuff and + * backtracking. + * </summary> + */ + public abstract class BaseRecognizer + { + public const int MEMO_RULE_FAILED = -2; + public const int MEMO_RULE_UNKNOWN = -1; + public const int INITIAL_FOLLOW_STACK_SIZE = 100; + + // copies from Token object for convenience in actions + public const int DEFAULT_TOKEN_CHANNEL = TokenConstants.DEFAULT_CHANNEL; + public const int HIDDEN = TokenConstants.HIDDEN_CHANNEL; + + public const string NEXT_TOKEN_RULE_NAME = "nextToken"; + + /** <summary> + * State of a lexer, parser, or tree parser are collected into a state + * object so the state can be shared. This sharing is needed to + * have one grammar import others and share same error variables + * and other state variables. It's a kind of explicit multiple + * inheritance via delegation of methods and shared state. + * </summary> + */ + protected internal RecognizerSharedState state; + + public BaseRecognizer() + { + state = new RecognizerSharedState(); + Initialize(); + InitDFAs(); + } + + public BaseRecognizer( RecognizerSharedState state ) + { + if ( state == null ) + { + state = new RecognizerSharedState(); + } + this.state = state; + Initialize(); + InitDFAs(); + } + + protected virtual void InitDFAs() + { + } + + protected virtual void Initialize() + { + } + + /** <summary>reset the parser's state; subclasses must rewinds the input stream</summary> */ + public virtual void Reset() + { + // wack everything related to error recovery + if ( state == null ) + { + return; // no shared state work to do + } + state._fsp = -1; + state.errorRecovery = false; + state.lastErrorIndex = -1; + state.failed = false; + state.syntaxErrors = 0; + // wack everything related to backtracking and memoization + state.backtracking = 0; + for ( int i = 0; state.ruleMemo != null && i < state.ruleMemo.Length; i++ ) + { // wipe cache + state.ruleMemo[i] = null; + } + } + + + /** <summary> + * Match current input symbol against ttype. Attempt + * single token insertion or deletion error recovery. If + * that fails, throw MismatchedTokenException. + * </summary> + * + * <remarks> + * To turn off single token insertion or deletion error + * recovery, override recoverFromMismatchedToken() and have it + * throw an exception. See TreeParser.recoverFromMismatchedToken(). + * This way any error in a rule will cause an exception and + * immediate exit from rule. Rule would recover by resynchronizing + * to the set of symbols that can follow rule ref. + * </remarks> + */ + public virtual object Match( IIntStream input, int ttype, BitSet follow ) + { + //System.out.println("match "+((TokenStream)input).LT(1)); + object matchedSymbol = GetCurrentInputSymbol( input ); + if ( input.LA( 1 ) == ttype ) + { + input.Consume(); + state.errorRecovery = false; + state.failed = false; + return matchedSymbol; + } + if ( state.backtracking > 0 ) + { + state.failed = true; + return matchedSymbol; + } + matchedSymbol = RecoverFromMismatchedToken( input, ttype, follow ); + return matchedSymbol; + } + + /** <summary>Match the wildcard: in a symbol</summary> */ + public virtual void MatchAny( IIntStream input ) + { + state.errorRecovery = false; + state.failed = false; + input.Consume(); + } + + public virtual bool MismatchIsUnwantedToken( IIntStream input, int ttype ) + { + return input.LA( 2 ) == ttype; + } + + public virtual bool MismatchIsMissingToken( IIntStream input, BitSet follow ) + { + if ( follow == null ) + { + // we have no information about the follow; we can only consume + // a single token and hope for the best + return false; + } + // compute what can follow this grammar element reference + if ( follow.Member( TokenConstants.EOR_TOKEN_TYPE ) ) + { + BitSet viableTokensFollowingThisRule = ComputeContextSensitiveRuleFOLLOW(); + follow = follow.Or( viableTokensFollowingThisRule ); + if ( state._fsp >= 0 ) + { // remove EOR if we're not the start symbol + follow.Remove( TokenConstants.EOR_TOKEN_TYPE ); + } + } + // if current token is consistent with what could come after set + // then we know we're missing a token; error recovery is free to + // "insert" the missing token + + //System.out.println("viable tokens="+follow.toString(getTokenNames())); + //System.out.println("LT(1)="+((TokenStream)input).LT(1)); + + // BitSet cannot handle negative numbers like -1 (EOF) so I leave EOR + // in follow set to indicate that the fall of the start symbol is + // in the set (EOF can follow). + if ( follow.Member( input.LA( 1 ) ) || follow.Member( TokenConstants.EOR_TOKEN_TYPE ) ) + { + //System.out.println("LT(1)=="+((TokenStream)input).LT(1)+" is consistent with what follows; inserting..."); + return true; + } + return false; + } + + /** <summary>Report a recognition problem.</summary> + * + * <remarks> + * This method sets errorRecovery to indicate the parser is recovering + * not parsing. Once in recovery mode, no errors are generated. + * To get out of recovery mode, the parser must successfully match + * a token (after a resync). So it will go: + * + * 1. error occurs + * 2. enter recovery mode, report error + * 3. consume until token found in resynch set + * 4. try to resume parsing + * 5. next match() will reset errorRecovery mode + * + * If you override, make sure to update syntaxErrors if you care about that. + * </remarks> + */ + public virtual void ReportError( RecognitionException e ) + { + // if we've already reported an error and have not matched a token + // yet successfully, don't report any errors. + if ( state.errorRecovery ) + { + //System.err.print("[SPURIOUS] "); + return; + } + state.syntaxErrors++; // don't count spurious + state.errorRecovery = true; + + DisplayRecognitionError( this.GetTokenNames(), e ); + } + + public virtual void DisplayRecognitionError( string[] tokenNames, + RecognitionException e ) + { + string hdr = GetErrorHeader( e ); + string msg = GetErrorMessage( e, tokenNames ); + EmitErrorMessage( hdr + " " + msg ); + } + + /** <summary>What error message should be generated for the various exception types?</summary> + * + * <remarks> + * Not very object-oriented code, but I like having all error message + * generation within one method rather than spread among all of the + * exception classes. This also makes it much easier for the exception + * handling because the exception classes do not have to have pointers back + * to this object to access utility routines and so on. Also, changing + * the message for an exception type would be difficult because you + * would have to subclassing exception, but then somehow get ANTLR + * to make those kinds of exception objects instead of the default. + * This looks weird, but trust me--it makes the most sense in terms + * of flexibility. + * + * For grammar debugging, you will want to override this to add + * more information such as the stack frame with + * getRuleInvocationStack(e, this.getClass().getName()) and, + * for no viable alts, the decision description and state etc... + * + * Override this to change the message generated for one or more + * exception types. + * </remarks> + */ + public virtual string GetErrorMessage( RecognitionException e, string[] tokenNames ) + { + string msg = e.Message; + if ( e is UnwantedTokenException ) + { + UnwantedTokenException ute = (UnwantedTokenException)e; + string tokenName = "<unknown>"; + if ( ute.expecting == TokenConstants.EOF ) + { + tokenName = "EOF"; + } + else + { + tokenName = tokenNames[ute.expecting]; + } + msg = "extraneous input " + GetTokenErrorDisplay( ute.UnexpectedToken ) + + " expecting " + tokenName; + } + else if ( e is MissingTokenException ) + { + MissingTokenException mte = (MissingTokenException)e; + string tokenName = "<unknown>"; + if ( mte.expecting == TokenConstants.EOF ) + { + tokenName = "EOF"; + } + else + { + tokenName = tokenNames[mte.expecting]; + } + msg = "missing " + tokenName + " at " + GetTokenErrorDisplay( e.token ); + } + else if ( e is MismatchedTokenException ) + { + MismatchedTokenException mte = (MismatchedTokenException)e; + string tokenName = "<unknown>"; + if ( mte.expecting == TokenConstants.EOF ) + { + tokenName = "EOF"; + } + else + { + tokenName = tokenNames[mte.expecting]; + } + msg = "mismatched input " + GetTokenErrorDisplay( e.token ) + + " expecting " + tokenName; + } + else if ( e is MismatchedTreeNodeException ) + { + MismatchedTreeNodeException mtne = (MismatchedTreeNodeException)e; + string tokenName = "<unknown>"; + if ( mtne.expecting == TokenConstants.EOF ) + { + tokenName = "EOF"; + } + else + { + tokenName = tokenNames[mtne.expecting]; + } + // workaround for a .NET framework bug (NullReferenceException) + string nodeText = ( mtne.node != null ) ? mtne.node.ToString() ?? string.Empty : string.Empty; + msg = "mismatched tree node: " + nodeText + " expecting " + tokenName; + } + else if ( e is NoViableAltException ) + { + //NoViableAltException nvae = (NoViableAltException)e; + // for development, can add "decision=<<"+nvae.grammarDecisionDescription+">>" + // and "(decision="+nvae.decisionNumber+") and + // "state "+nvae.stateNumber + msg = "no viable alternative at input " + GetTokenErrorDisplay( e.token ); + } + else if ( e is EarlyExitException ) + { + //EarlyExitException eee = (EarlyExitException)e; + // for development, can add "(decision="+eee.decisionNumber+")" + msg = "required (...)+ loop did not match anything at input " + + GetTokenErrorDisplay( e.token ); + } + else if ( e is MismatchedSetException ) + { + MismatchedSetException mse = (MismatchedSetException)e; + msg = "mismatched input " + GetTokenErrorDisplay( e.token ) + + " expecting set " + mse.expecting; + } + else if ( e is MismatchedNotSetException ) + { + MismatchedNotSetException mse = (MismatchedNotSetException)e; + msg = "mismatched input " + GetTokenErrorDisplay( e.token ) + + " expecting set " + mse.expecting; + } + else if ( e is FailedPredicateException ) + { + FailedPredicateException fpe = (FailedPredicateException)e; + msg = "rule " + fpe.ruleName + " failed predicate: {" + + fpe.predicateText + "}?"; + } + return msg; + } + + /** <summary> + * Get number of recognition errors (lexer, parser, tree parser). Each + * recognizer tracks its own number. So parser and lexer each have + * separate count. Does not count the spurious errors found between + * an error and next valid token match + * </summary> + * + * <seealso cref="reportError()"/> + */ + public virtual int NumberOfSyntaxErrors + { + get + { + return state.syntaxErrors; + } + } + + /** <summary>What is the error header, normally line/character position information?</summary> */ + public virtual string GetErrorHeader( RecognitionException e ) + { + return "line " + e.line + ":" + e.charPositionInLine; + } + + /** <summary> + * How should a token be displayed in an error message? The default + * is to display just the text, but during development you might + * want to have a lot of information spit out. Override in that case + * to use t.toString() (which, for CommonToken, dumps everything about + * the token). This is better than forcing you to override a method in + * your token objects because you don't have to go modify your lexer + * so that it creates a new Java type. + * </summary> + */ + public virtual string GetTokenErrorDisplay( IToken t ) + { + string s = t.Text; + if ( s == null ) + { + if ( t.Type == TokenConstants.EOF ) + { + s = "<EOF>"; + } + else + { + s = "<" + t.Type + ">"; + } + } + s = Regex.Replace( s, "\n", "\\\\n" ); + s = Regex.Replace( s, "\r", "\\\\r" ); + s = Regex.Replace( s, "\t", "\\\\t" ); + return "'" + s + "'"; + } + + /** <summary>Override this method to change where error messages go</summary> */ + public virtual void EmitErrorMessage( string msg ) + { + Console.Error.WriteLine( msg ); + } + + /** <summary> + * Recover from an error found on the input stream. This is + * for NoViableAlt and mismatched symbol exceptions. If you enable + * single token insertion and deletion, this will usually not + * handle mismatched symbol exceptions but there could be a mismatched + * token that the match() routine could not recover from. + * </summary> + */ + public virtual void Recover( IIntStream input, RecognitionException re ) + { + if ( state.lastErrorIndex == input.Index ) + { + // uh oh, another error at same token index; must be a case + // where LT(1) is in the recovery token set so nothing is + // consumed; consume a single token so at least to prevent + // an infinite loop; this is a failsafe. + input.Consume(); + } + state.lastErrorIndex = input.Index; + BitSet followSet = ComputeErrorRecoverySet(); + BeginResync(); + ConsumeUntil( input, followSet ); + EndResync(); + } + + /** <summary> + * A hook to listen in on the token consumption during error recovery. + * The DebugParser subclasses this to fire events to the listenter. + * </summary> + */ + public virtual void BeginResync() + { + } + + public virtual void EndResync() + { + } + + /* Compute the error recovery set for the current rule. During + * rule invocation, the parser pushes the set of tokens that can + * follow that rule reference on the stack; this amounts to + * computing FIRST of what follows the rule reference in the + * enclosing rule. This local follow set only includes tokens + * from within the rule; i.e., the FIRST computation done by + * ANTLR stops at the end of a rule. + * + * EXAMPLE + * + * When you find a "no viable alt exception", the input is not + * consistent with any of the alternatives for rule r. The best + * thing to do is to consume tokens until you see something that + * can legally follow a call to r *or* any rule that called r. + * You don't want the exact set of viable next tokens because the + * input might just be missing a token--you might consume the + * rest of the input looking for one of the missing tokens. + * + * Consider grammar: + * + * a : '[' b ']' + * | '(' b ')' + * ; + * b : c '^' INT ; + * c : ID + * | INT + * ; + * + * At each rule invocation, the set of tokens that could follow + * that rule is pushed on a stack. Here are the various "local" + * follow sets: + * + * FOLLOW(b1_in_a) = FIRST(']') = ']' + * FOLLOW(b2_in_a) = FIRST(')') = ')' + * FOLLOW(c_in_b) = FIRST('^') = '^' + * + * Upon erroneous input "[]", the call chain is + * + * a -> b -> c + * + * and, hence, the follow context stack is: + * + * depth local follow set after call to rule + * 0 <EOF> a (from main()) + * 1 ']' b + * 3 '^' c + * + * Notice that ')' is not included, because b would have to have + * been called from a different context in rule a for ')' to be + * included. + * + * For error recovery, we cannot consider FOLLOW(c) + * (context-sensitive or otherwise). We need the combined set of + * all context-sensitive FOLLOW sets--the set of all tokens that + * could follow any reference in the call chain. We need to + * resync to one of those tokens. Note that FOLLOW(c)='^' and if + * we resync'd to that token, we'd consume until EOF. We need to + * sync to context-sensitive FOLLOWs for a, b, and c: {']','^'}. + * In this case, for input "[]", LA(1) is in this set so we would + * not consume anything and after printing an error rule c would + * return normally. It would not find the required '^' though. + * At this point, it gets a mismatched token error and throws an + * exception (since LA(1) is not in the viable following token + * set). The rule exception handler tries to recover, but finds + * the same recovery set and doesn't consume anything. Rule b + * exits normally returning to rule a. Now it finds the ']' (and + * with the successful match exits errorRecovery mode). + * + * So, you cna see that the parser walks up call chain looking + * for the token that was a member of the recovery set. + * + * Errors are not generated in errorRecovery mode. + * + * ANTLR's error recovery mechanism is based upon original ideas: + * + * "Algorithms + Data Structures = Programs" by Niklaus Wirth + * + * and + * + * "A note on error recovery in recursive descent parsers": + * http://portal.acm.org/citation.cfm?id=947902.947905 + * + * Later, Josef Grosch had some good ideas: + * + * "Efficient and Comfortable Error Recovery in Recursive Descent + * Parsers": + * ftp://www.cocolab.com/products/cocktail/doca4.ps/ell.ps.zip + * + * Like Grosch I implemented local FOLLOW sets that are combined + * at run-time upon error to avoid overhead during parsing. + */ + protected virtual BitSet ComputeErrorRecoverySet() + { + return CombineFollows( false ); + } + + /** <summary> + * Compute the context-sensitive FOLLOW set for current rule. + * This is set of token types that can follow a specific rule + * reference given a specific call chain. You get the set of + * viable tokens that can possibly come next (lookahead depth 1) + * given the current call chain. Contrast this with the + * definition of plain FOLLOW for rule r: + * </summary> + * + * FOLLOW(r)={x | S=>*alpha r beta in G and x in FIRST(beta)} + * + * where x in T* and alpha, beta in V*; T is set of terminals and + * V is the set of terminals and nonterminals. In other words, + * FOLLOW(r) is the set of all tokens that can possibly follow + * references to r in *any* sentential form (context). At + * runtime, however, we know precisely which context applies as + * we have the call chain. We may compute the exact (rather + * than covering superset) set of following tokens. + * + * For example, consider grammar: + * + * stat : ID '=' expr ';' // FOLLOW(stat)=={EOF} + * | "return" expr '.' + * ; + * expr : atom ('+' atom)* ; // FOLLOW(expr)=={';','.',')'} + * atom : INT // FOLLOW(atom)=={'+',')',';','.'} + * | '(' expr ')' + * ; + * + * The FOLLOW sets are all inclusive whereas context-sensitive + * FOLLOW sets are precisely what could follow a rule reference. + * For input input "i=(3);", here is the derivation: + * + * stat => ID '=' expr ';' + * => ID '=' atom ('+' atom)* ';' + * => ID '=' '(' expr ')' ('+' atom)* ';' + * => ID '=' '(' atom ')' ('+' atom)* ';' + * => ID '=' '(' INT ')' ('+' atom)* ';' + * => ID '=' '(' INT ')' ';' + * + * At the "3" token, you'd have a call chain of + * + * stat -> expr -> atom -> expr -> atom + * + * What can follow that specific nested ref to atom? Exactly ')' + * as you can see by looking at the derivation of this specific + * input. Contrast this with the FOLLOW(atom)={'+',')',';','.'}. + * + * You want the exact viable token set when recovering from a + * token mismatch. Upon token mismatch, if LA(1) is member of + * the viable next token set, then you know there is most likely + * a missing token in the input stream. "Insert" one by just not + * throwing an exception. + */ + protected virtual BitSet ComputeContextSensitiveRuleFOLLOW() + { + return CombineFollows( true ); + } + + protected virtual BitSet CombineFollows( bool exact ) + { + int top = state._fsp; + BitSet followSet = new BitSet(); + for ( int i = top; i >= 0; i-- ) + { + BitSet localFollowSet = (BitSet)state.following[i]; + /* + System.out.println("local follow depth "+i+"="+ + localFollowSet.toString(getTokenNames())+")"); + */ + followSet.OrInPlace( localFollowSet ); + if ( exact ) + { + // can we see end of rule? + if ( localFollowSet.Member( TokenConstants.EOR_TOKEN_TYPE ) ) + { + // Only leave EOR in set if at top (start rule); this lets + // us know if have to include follow(start rule); i.e., EOF + if ( i > 0 ) + { + followSet.Remove( TokenConstants.EOR_TOKEN_TYPE ); + } + } + else + { // can't see end of rule, quit + break; + } + } + } + return followSet; + } + + /** <summary>Attempt to recover from a single missing or extra token.</summary> + * + * EXTRA TOKEN + * + * LA(1) is not what we are looking for. If LA(2) has the right token, + * however, then assume LA(1) is some extra spurious token. Delete it + * and LA(2) as if we were doing a normal match(), which advances the + * input. + * + * MISSING TOKEN + * + * If current token is consistent with what could come after + * ttype then it is ok to "insert" the missing token, else throw + * exception For example, Input "i=(3;" is clearly missing the + * ')'. When the parser returns from the nested call to expr, it + * will have call chain: + * + * stat -> expr -> atom + * + * and it will be trying to match the ')' at this point in the + * derivation: + * + * => ID '=' '(' INT ')' ('+' atom)* ';' + * ^ + * match() will see that ';' doesn't match ')' and report a + * mismatched token error. To recover, it sees that LA(1)==';' + * is in the set of tokens that can follow the ')' token + * reference in rule atom. It can assume that you forgot the ')'. + */ + protected virtual object RecoverFromMismatchedToken( IIntStream input, int ttype, BitSet follow ) + { + RecognitionException e = null; + // if next token is what we are looking for then "delete" this token + if ( MismatchIsUnwantedToken( input, ttype ) ) + { + e = new UnwantedTokenException( ttype, input ) + { + tokenNames = GetTokenNames() + }; + /* + System.err.println("recoverFromMismatchedToken deleting "+ + ((TokenStream)input).LT(1)+ + " since "+((TokenStream)input).LT(2)+" is what we want"); + */ + BeginResync(); + input.Consume(); // simply delete extra token + EndResync(); + ReportError( e ); // report after consuming so AW sees the token in the exception + // we want to return the token we're actually matching + object matchedSymbol = GetCurrentInputSymbol( input ); + input.Consume(); // move past ttype token as if all were ok + return matchedSymbol; + } + // can't recover with single token deletion, try insertion + if ( MismatchIsMissingToken( input, follow ) ) + { + object inserted = GetMissingSymbol( input, e, ttype, follow ); + e = new MissingTokenException( ttype, input, inserted ); + ReportError( e ); // report after inserting so AW sees the token in the exception + return inserted; + } + // even that didn't work; must throw the exception + e = new MismatchedTokenException( ttype, input ) + { + tokenNames = GetTokenNames() + }; + throw e; + } + + /** Not currently used */ + public virtual object RecoverFromMismatchedSet( IIntStream input, + RecognitionException e, + BitSet follow ) + { + if ( MismatchIsMissingToken( input, follow ) ) + { + // System.out.println("missing token"); + ReportError( e ); + // we don't know how to conjure up a token for sets yet + return GetMissingSymbol( input, e, TokenConstants.INVALID_TOKEN_TYPE, follow ); + } + // TODO do single token deletion like above for Token mismatch + throw e; + } + + /** <summary> + * Match needs to return the current input symbol, which gets put + * into the label for the associated token ref; e.g., x=ID. Token + * and tree parsers need to return different objects. Rather than test + * for input stream type or change the IntStream interface, I use + * a simple method to ask the recognizer to tell me what the current + * input symbol is. + * </summary> + * + * <remarks>This is ignored for lexers.</remarks> + */ + protected virtual object GetCurrentInputSymbol( IIntStream input ) + { + return null; + } + + /** <summary>Conjure up a missing token during error recovery.</summary> + * + * <remarks> + * The recognizer attempts to recover from single missing + * symbols. But, actions might refer to that missing symbol. + * For example, x=ID {f($x);}. The action clearly assumes + * that there has been an identifier matched previously and that + * $x points at that token. If that token is missing, but + * the next token in the stream is what we want we assume that + * this token is missing and we keep going. Because we + * have to return some token to replace the missing token, + * we have to conjure one up. This method gives the user control + * over the tokens returned for missing tokens. Mostly, + * you will want to create something special for identifier + * tokens. For literals such as '{' and ',', the default + * action in the parser or tree parser works. It simply creates + * a CommonToken of the appropriate type. The text will be the token. + * If you change what tokens must be created by the lexer, + * override this method to create the appropriate tokens. + * </remarks> + */ + protected virtual object GetMissingSymbol( IIntStream input, + RecognitionException e, + int expectedTokenType, + BitSet follow ) + { + return null; + } + + public virtual void ConsumeUntil( IIntStream input, int tokenType ) + { + //System.out.println("consumeUntil "+tokenType); + int ttype = input.LA( 1 ); + while ( ttype != TokenConstants.EOF && ttype != tokenType ) + { + input.Consume(); + ttype = input.LA( 1 ); + } + } + + /** <summary>Consume tokens until one matches the given token set</summary> */ + public virtual void ConsumeUntil( IIntStream input, BitSet set ) + { + //System.out.println("consumeUntil("+set.toString(getTokenNames())+")"); + int ttype = input.LA( 1 ); + while ( ttype != TokenConstants.EOF && !set.Member( ttype ) ) + { + //System.out.println("consume during recover LA(1)="+getTokenNames()[input.LA(1)]); + input.Consume(); + ttype = input.LA( 1 ); + } + } + + /** <summary>Push a rule's follow set using our own hardcoded stack</summary> */ + protected virtual void PushFollow( BitSet fset ) + { + if ( ( state._fsp + 1 ) >= state.following.Length ) + { + BitSet[] f = new BitSet[state.following.Length * 2]; + Array.Copy( state.following, f, state.following.Length ); + state.following = f; + } + state.following[++state._fsp] = fset; + } + + /** <summary> + * Return List<String> of the rules in your parser instance + * leading up to a call to this method. You could override if + * you want more details such as the file/line info of where + * in the parser java code a rule is invoked. + * </summary> + * + * <remarks> + * This is very useful for error messages and for context-sensitive + * error recovery. + * </remarks> + */ + public virtual IList<string> GetRuleInvocationStack() + { + string parserClassName = this.GetType().Name; + return GetRuleInvocationStack( new Exception(), parserClassName ); + } + + /** <summary> + * A more general version of getRuleInvocationStack where you can + * pass in, for example, a RecognitionException to get it's rule + * stack trace. This routine is shared with all recognizers, hence, + * static. + * </summary> + * + * <remarks> + * TODO: move to a utility class or something; weird having lexer call this + * </remarks> + */ + public static IList<string> GetRuleInvocationStack( Exception e, + string recognizerClassName ) + { + IList<string> rules = new List<string>(); + + StackTrace trace = new StackTrace( e, true ); + StackFrame[] stack = trace.GetFrames(); + if ( stack == null ) + stack = new StackTrace( true ).GetFrames(); + + int i = 0; + for ( i = stack.Length - 1; i >= 0; i-- ) + { + StackFrame t = stack[i]; + if ( t.GetMethod().DeclaringType.Name.StartsWith( "Antlr.Runtime." ) ) + { + continue; // skip support code such as this method + } + if ( t.GetMethod().Name.Equals( NEXT_TOKEN_RULE_NAME ) ) + { + continue; + } + if ( !t.GetMethod().DeclaringType.Name.Equals( recognizerClassName ) ) + { + continue; // must not be part of this parser + } + rules.Add( t.GetMethod().Name ); + } + return rules; + } + + public virtual int BacktrackingLevel + { + get + { + return state.backtracking; + } + set + { + state.backtracking = value; + } + } + + /** <summary>Return whether or not a backtracking attempt failed.</summary> */ + public virtual bool Failed + { + get + { + return state.failed; + } + } + + /** <summary> + * Used to print out token names like ID during debugging and + * error reporting. The generated parsers implement a method + * that overrides this to point to their String[] tokenNames. + * </summary> + */ + public virtual string[] GetTokenNames() + { + return null; + } + + /** <summary> + * For debugging and other purposes, might want the grammar name. + * Have ANTLR generate an implementation for this method. + * </summary> + */ + public virtual string GrammarFileName + { + get + { + return null; + } + } + + public abstract string SourceName + { + get; + } + + /** <summary> + * A convenience method for use most often with template rewrites. + * Convert a List<Token> to List<String> + * </summary> + */ + public virtual List<string> ToStrings( ICollection<IToken> tokens ) + { + if ( tokens == null ) + return null; + + List<string> strings = new List<string>( tokens.Count ); + foreach ( IToken token in tokens ) + { + strings.Add( token.Text ); + } + + return strings; + } + + /** <summary> + * Given a rule number and a start token index number, return + * MEMO_RULE_UNKNOWN if the rule has not parsed input starting from + * start index. If this rule has parsed input starting from the + * start index before, then return where the rule stopped parsing. + * It returns the index of the last token matched by the rule. + * </summary> + * + * <remarks> + * For now we use a hashtable and just the slow Object-based one. + * Later, we can make a special one for ints and also one that + * tosses out data after we commit past input position i. + * </remarks> + */ + public virtual int GetRuleMemoization( int ruleIndex, int ruleStartIndex ) + { + if ( state.ruleMemo[ruleIndex] == null ) + { + state.ruleMemo[ruleIndex] = new Dictionary<int, int>(); + } + + int stopIndex; + if ( !state.ruleMemo[ruleIndex].TryGetValue( ruleStartIndex, out stopIndex ) ) + return MEMO_RULE_UNKNOWN; + + return stopIndex; + } + + /** <summary> + * Has this rule already parsed input at the current index in the + * input stream? Return the stop token index or MEMO_RULE_UNKNOWN. + * If we attempted but failed to parse properly before, return + * MEMO_RULE_FAILED. + * </summary> + * + * <remarks> + * This method has a side-effect: if we have seen this input for + * this rule and successfully parsed before, then seek ahead to + * 1 past the stop token matched for this rule last time. + * </remarks> + */ + public virtual bool AlreadyParsedRule( IIntStream input, int ruleIndex ) + { + int stopIndex = GetRuleMemoization( ruleIndex, input.Index ); + if ( stopIndex == MEMO_RULE_UNKNOWN ) + { + return false; + } + if ( stopIndex == MEMO_RULE_FAILED ) + { + //System.out.println("rule "+ruleIndex+" will never succeed"); + state.failed = true; + } + else + { + //System.out.println("seen rule "+ruleIndex+" before; skipping ahead to @"+(stopIndex+1)+" failed="+state.failed); + input.Seek( stopIndex + 1 ); // jump to one past stop token + } + return true; + } + + /** <summary> + * Record whether or not this rule parsed the input at this position + * successfully. Use a standard java hashtable for now. + * </summary> + */ + public virtual void Memoize( IIntStream input, + int ruleIndex, + int ruleStartIndex ) + { + int stopTokenIndex = state.failed ? MEMO_RULE_FAILED : input.Index - 1; + if ( state.ruleMemo == null ) + { + Console.Error.WriteLine( "!!!!!!!!! memo array is null for " + GrammarFileName ); + } + if ( ruleIndex >= state.ruleMemo.Length ) + { + Console.Error.WriteLine( "!!!!!!!!! memo size is " + state.ruleMemo.Length + ", but rule index is " + ruleIndex ); + } + if ( state.ruleMemo[ruleIndex] != null ) + { + state.ruleMemo[ruleIndex][ruleStartIndex] = stopTokenIndex; + } + } + + /** <summary>return how many rule/input-index pairs there are in total.</summary> + * TODO: this includes synpreds. :( + */ + public virtual int GetRuleMemoizationCacheSize() + { + int n = 0; + for ( int i = 0; state.ruleMemo != null && i < state.ruleMemo.Length; i++ ) + { + var ruleMap = state.ruleMemo[i]; + if ( ruleMap != null ) + { + n += ruleMap.Count; // how many input indexes are recorded? + } + } + return n; + } + + public virtual void TraceIn( string ruleName, int ruleIndex, object inputSymbol ) + { + Console.Out.Write( "enter " + ruleName + " " + inputSymbol ); + if ( state.backtracking > 0 ) + { + Console.Out.Write( " backtracking=" + state.backtracking ); + } + Console.Out.WriteLine(); + } + + public virtual void TraceOut( string ruleName, + int ruleIndex, + object inputSymbol ) + { + Console.Out.Write( "exit " + ruleName + " " + inputSymbol ); + if ( state.backtracking > 0 ) + { + Console.Out.Write( " backtracking=" + state.backtracking ); + if ( state.failed ) + Console.Out.Write( " failed" ); + else + Console.Out.Write( " succeeded" ); + } + Console.Out.WriteLine(); + } + +#if NEW_DEBUGGER + #region Debugging support + public virtual IDebugEventListener DebugListener + { + get; + set; + } + + [Conditional( "DEBUG_GRAMMAR" )] + protected static void DebugEnterRule( IDebugEventListener dbg, string grammarFileName, string ruleName ) + { + if ( dbg != null ) + dbg.EnterRule( grammarFileName, ruleName ); + } + [Conditional( "DEBUG_GRAMMAR" )] + protected static void DebugExitRule( IDebugEventListener dbg, string grammarFileName, string ruleName ) + { + if ( dbg != null ) + dbg.ExitRule( grammarFileName, ruleName ); + } + + [Conditional( "DEBUG_GRAMMAR" )] + protected static void DebugEnterSubRule( IDebugEventListener dbg, int decisionNumber ) + { + if ( dbg != null ) + dbg.EnterSubRule( decisionNumber ); + } + [Conditional( "DEBUG_GRAMMAR" )] + protected static void DebugExitSubRule( IDebugEventListener dbg, int decisionNumber ) + { + if ( dbg != null ) + dbg.ExitSubRule( decisionNumber ); + } + + [Conditional( "DEBUG_GRAMMAR" )] + protected static void DebugEnterAlt( IDebugEventListener dbg, int alt ) + { + if ( dbg != null ) + dbg.EnterAlt( alt ); + } + + [Conditional( "DEBUG_GRAMMAR" )] + protected static void DebugEnterDecision( IDebugEventListener dbg, int decisionNumber ) + { + if ( dbg != null ) + dbg.EnterDecision( decisionNumber ); + } + [Conditional( "DEBUG_GRAMMAR" )] + protected static void DebugExitDecision( IDebugEventListener dbg, int decisionNumber ) + { + if ( dbg != null ) + dbg.ExitDecision( decisionNumber ); + } + + [Conditional( "DEBUG_GRAMMAR" )] + protected static void DebugLocation( IDebugEventListener dbg, int line, int charPositionInLine ) + { + if ( dbg != null ) + dbg.Location( line, charPositionInLine ); + } + + [Conditional( "DEBUG_GRAMMAR" )] + protected static void DebugSemanticPredicate( IDebugEventListener dbg, bool result, string predicate ) + { + if ( dbg != null ) + dbg.SemanticPredicate( result, predicate ); + } + #endregion +#endif + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/BitSet.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/BitSet.cs new file mode 100644 index 0000000..2f1e272 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/BitSet.cs @@ -0,0 +1,388 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + using System.Collections.Generic; + + using Array = System.Array; + using ICloneable = System.ICloneable; + using Math = System.Math; + using StringBuilder = System.Text.StringBuilder; + + /** <summary> + * A stripped-down version of org.antlr.misc.BitSet that is just + * good enough to handle runtime requirements such as FOLLOW sets + * for automatic error recovery. + * </summary> + */ + [System.Serializable] + public class BitSet : ICloneable + { + protected const int BITS = 64; // number of bits / long + protected const int LOG_BITS = 6; // 2^6 == 64 + + /** <summary> + * We will often need to do a mod operator (i mod nbits). Its + * turns out that, for powers of two, this mod operation is + * same as (i & (nbits-1)). Since mod is slow, we use a + * precomputed mod mask to do the mod instead. + * </summary> + */ + protected const int MOD_MASK = BITS - 1; + + /** <summary>The actual data bits</summary> */ + ulong[] _bits; + + /** <summary>Construct a bitset of size one word (64 bits)</summary> */ + public BitSet() + : this( BITS ) + { + } + + /** <summary>Construction from a static array of longs</summary> */ + public BitSet( ulong[] bits ) + { + _bits = bits; + } + + /** <summary>Construction from a list of integers</summary> */ + public BitSet( IEnumerable<int> items ) + : this() + { + foreach ( int i in items ) + Add( i ); + } + + /** <summary>Construct a bitset given the size</summary> + * <param name="nbits">The size of the bitset in bits</param> + */ + public BitSet( int nbits ) + { + _bits = new ulong[( ( nbits - 1 ) >> LOG_BITS ) + 1]; + } + + public static BitSet Of( int el ) + { + BitSet s = new BitSet( el + 1 ); + s.Add( el ); + return s; + } + + public static BitSet Of( int a, int b ) + { + BitSet s = new BitSet( Math.Max( a, b ) + 1 ); + s.Add( a ); + s.Add( b ); + return s; + } + + public static BitSet Of( int a, int b, int c ) + { + BitSet s = new BitSet(); + s.Add( a ); + s.Add( b ); + s.Add( c ); + return s; + } + + public static BitSet Of( int a, int b, int c, int d ) + { + BitSet s = new BitSet(); + s.Add( a ); + s.Add( b ); + s.Add( c ); + s.Add( d ); + return s; + } + + /** <summary>return this | a in a new set</summary> */ + public virtual BitSet Or( BitSet a ) + { + if ( a == null ) + { + return this; + } + BitSet s = (BitSet)this.Clone(); + s.OrInPlace( a ); + return s; + } + + /** <summary>or this element into this set (grow as necessary to accommodate)</summary> */ + public virtual void Add( int el ) + { + int n = WordNumber( el ); + if ( n >= _bits.Length ) + { + GrowToInclude( el ); + } + _bits[n] |= BitMask( el ); + } + + /** <summary>Grows the set to a larger number of bits.</summary> + * <param name="bit">element that must fit in set</param> + */ + public virtual void GrowToInclude( int bit ) + { + int newSize = Math.Max( _bits.Length << 1, NumWordsToHold( bit ) ); + ulong[] newbits = new ulong[newSize]; + Array.Copy( _bits, newbits, _bits.Length ); + _bits = newbits; + } + + public virtual void OrInPlace( BitSet a ) + { + if ( a == null ) + { + return; + } + // If this is smaller than a, grow this first + if ( a._bits.Length > _bits.Length ) + { + SetSize( a._bits.Length ); + } + int min = Math.Min( _bits.Length, a._bits.Length ); + for ( int i = min - 1; i >= 0; i-- ) + { + _bits[i] |= a._bits[i]; + } + } + + /** <summary>Sets the size of a set.</summary> + * <param name="nwords">how many words the new set should be</param> + */ + private void SetSize( int nwords ) + { + ulong[] newbits = new ulong[nwords]; + int n = Math.Min( nwords, _bits.Length ); + Array.Copy( _bits, newbits, n ); + _bits = newbits; + } + + private static ulong BitMask( int bitNumber ) + { + int bitPosition = bitNumber & MOD_MASK; // bitNumber mod BITS + return 1UL << bitPosition; + } + + public virtual object Clone() + { + return new BitSet( (ulong[])_bits.Clone() ); + } + + public virtual int Size() + { + int deg = 0; + for ( int i = _bits.Length - 1; i >= 0; i-- ) + { + ulong word = _bits[i]; + if ( word != 0L ) + { + for ( int bit = BITS - 1; bit >= 0; bit-- ) + { + if ( ( word & ( 1UL << bit ) ) != 0 ) + { + deg++; + } + } + } + } + return deg; + } + + public override int GetHashCode() + { + throw new System.NotImplementedException(); + } + + public override bool Equals( object other ) + { + if ( other == null || !( other is BitSet ) ) + { + return false; + } + + BitSet otherSet = (BitSet)other; + + int n = Math.Min( this._bits.Length, otherSet._bits.Length ); + + // for any bits in common, compare + for ( int i = 0; i < n; i++ ) + { + if ( this._bits[i] != otherSet._bits[i] ) + { + return false; + } + } + + // make sure any extra bits are off + + if ( this._bits.Length > n ) + { + for ( int i = n + 1; i < this._bits.Length; i++ ) + { + if ( this._bits[i] != 0 ) + { + return false; + } + } + } + else if ( otherSet._bits.Length > n ) + { + for ( int i = n + 1; i < otherSet._bits.Length; i++ ) + { + if ( otherSet._bits[i] != 0 ) + { + return false; + } + } + } + + return true; + } + + public virtual bool Member( int el ) + { + if ( el < 0 ) + { + return false; + } + int n = WordNumber( el ); + if ( n >= _bits.Length ) + return false; + return ( _bits[n] & BitMask( el ) ) != 0; + } + + // remove this element from this set + public virtual void Remove( int el ) + { + int n = WordNumber( el ); + if ( n < _bits.Length ) + { + _bits[n] &= ~BitMask( el ); + } + } + + public virtual bool IsNil() + { + for ( int i = _bits.Length - 1; i >= 0; i-- ) + { + if ( _bits[i] != 0 ) + return false; + } + return true; + } + + private int NumWordsToHold( int el ) + { + return ( el >> LOG_BITS ) + 1; + } + + public virtual int NumBits() + { + return _bits.Length << LOG_BITS; // num words * bits per word + } + + /** <summary>return how much space is being used by the bits array not how many actually have member bits on.</summary> */ + public virtual int LengthInLongWords() + { + return _bits.Length; + } + + /**Is this contained within a? */ + /* + public boolean subset(BitSet a) { + if (a == null || !(a instanceof BitSet)) return false; + return this.and(a).equals(this); + } + */ + + public virtual int[] ToArray() + { + int[] elems = new int[Size()]; + int en = 0; + for ( int i = 0; i < ( _bits.Length << LOG_BITS ); i++ ) + { + if ( Member( i ) ) + { + elems[en++] = i; + } + } + return elems; + } + + public virtual ulong[] ToPackedArray() + { + return _bits; + } + + private static int WordNumber( int bit ) + { + return bit >> LOG_BITS; // bit / BITS + } + + public override string ToString() + { + return ToString( null ); + } + + public virtual string ToString( string[] tokenNames ) + { + StringBuilder buf = new StringBuilder(); + string separator = ","; + bool havePrintedAnElement = false; + buf.Append( '{' ); + + for ( int i = 0; i < ( _bits.Length << LOG_BITS ); i++ ) + { + if ( Member( i ) ) + { + if ( i > 0 && havePrintedAnElement ) + { + buf.Append( separator ); + } + if ( tokenNames != null ) + { + buf.Append( tokenNames[i] ); + } + else + { + buf.Append( i ); + } + havePrintedAnElement = true; + } + } + buf.Append( '}' ); + return buf.ToString(); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/CharStreamConstants.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/CharStreamConstants.cs new file mode 100644 index 0000000..041af72 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/CharStreamConstants.cs @@ -0,0 +1,41 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + + public static class CharStreamConstants + { + public const int EOF = -1; + } + +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/CharStreamState.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/CharStreamState.cs new file mode 100644 index 0000000..939e1f0 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/CharStreamState.cs @@ -0,0 +1,56 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + + /** <summary> + * When walking ahead with cyclic DFA or for syntactic predicates, + * we need to record the state of the input stream (char index, + * line, etc...) so that we can rewind the state after scanning ahead. + * </summary> + * + * <remarks>This is the complete state of a stream.</remarks> + */ + [System.Serializable] + public class CharStreamState + { + /** <summary>Index into the char stream of next lookahead char</summary> */ + internal int p; + + /** <summary>What line number is the scanner at before processing buffer[p]?</summary> */ + internal int line; + + /** <summary>What char position 0..n-1 in line is scanner before processing buffer[p]?</summary> */ + internal int charPositionInLine; + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ClassicToken.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ClassicToken.cs new file mode 100644 index 0000000..25da2e9 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ClassicToken.cs @@ -0,0 +1,192 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + using Regex = System.Text.RegularExpressions.Regex; + + /** <summary> + * A Token object like we'd use in ANTLR 2.x; has an actual string created + * and associated with this object. These objects are needed for imaginary + * tree nodes that have payload objects. We need to create a Token object + * that has a string; the tree node will point at this token. CommonToken + * has indexes into a char stream and hence cannot be used to introduce + * new strings. + * </summary> + */ + [System.Serializable] + public class ClassicToken : IToken + { + protected string text; + protected int type; + protected int line; + protected int charPositionInLine; + protected int channel = TokenConstants.DEFAULT_CHANNEL; + + /** <summary>What token number is this from 0..n-1 tokens</summary> */ + protected int index; + + public ClassicToken( int type ) + { + this.type = type; + } + + public ClassicToken( IToken oldToken ) + { + text = oldToken.Text; + type = oldToken.Type; + line = oldToken.Line; + charPositionInLine = oldToken.CharPositionInLine; + channel = oldToken.Channel; + } + + public ClassicToken( int type, string text ) + { + this.type = type; + this.text = text; + } + + public ClassicToken( int type, string text, int channel ) + { + this.type = type; + this.text = text; + this.channel = channel; + } + + #region IToken Members + public string Text + { + get + { + return text; + } + set + { + text = value; + } + } + + public int Type + { + get + { + return type; + } + set + { + type = value; + } + } + + public int Line + { + get + { + return line; + } + set + { + line = value; + } + } + + public int CharPositionInLine + { + get + { + return charPositionInLine; + } + set + { + charPositionInLine = value; + } + } + + public int Channel + { + get + { + return channel; + } + set + { + channel = value; + } + } + + public int TokenIndex + { + get + { + return index; + } + set + { + index = value; + } + } + + public ICharStream InputStream + { + get + { + return null; + } + set + { + } + } + + #endregion + + public override string ToString() + { + string channelStr = ""; + if ( channel > 0 ) + { + channelStr = ",channel=" + channel; + } + string txt = Text; + if ( txt != null ) + { + txt = Regex.Replace( txt, "\n", "\\\\n" ); + txt = Regex.Replace( txt, "\r", "\\\\r" ); + txt = Regex.Replace( txt, "\t", "\\\\t" ); + } + else + { + txt = "<no text>"; + } + return "[@" + TokenIndex + ",'" + txt + "',<" + type + ">" + channelStr + "," + line + ":" + CharPositionInLine + "]"; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/CommonToken.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/CommonToken.cs new file mode 100644 index 0000000..9e1f9ce --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/CommonToken.cs @@ -0,0 +1,255 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + using NonSerialized = System.NonSerializedAttribute; + using Regex = System.Text.RegularExpressions.Regex; + using Serializable = System.SerializableAttribute; + + [Serializable] + public class CommonToken : IToken + { + int type; + int line; + int charPositionInLine = -1; // set to invalid position + int channel = TokenConstants.DEFAULT_CHANNEL; + [NonSerialized] + ICharStream input; + + /** <summary> + * We need to be able to change the text once in a while. If + * this is non-null, then getText should return this. Note that + * start/stop are not affected by changing this. + * </summary> + */ + string text; + + /** <summary>What token number is this from 0..n-1 tokens; < 0 implies invalid index</summary> */ + int index = -1; + + /** <summary>The char position into the input buffer where this token starts</summary> */ + int start; + + /** <summary>The char position into the input buffer where this token stops</summary> */ + int stop; + + public CommonToken( int type ) + { + this.type = type; + } + + public CommonToken( ICharStream input, int type, int channel, int start, int stop ) + { + this.input = input; + this.type = type; + this.channel = channel; + this.start = start; + this.stop = stop; + } + + public CommonToken( int type, string text ) + { + this.type = type; + this.channel = TokenConstants.DEFAULT_CHANNEL; + this.text = text; + } + + public CommonToken( IToken oldToken ) + { + text = oldToken.Text; + type = oldToken.Type; + line = oldToken.Line; + index = oldToken.TokenIndex; + charPositionInLine = oldToken.CharPositionInLine; + channel = oldToken.Channel; + if ( oldToken is CommonToken ) + { + start = ( (CommonToken)oldToken ).start; + stop = ( (CommonToken)oldToken ).stop; + } + } + + #region IToken Members + public string Text + { + get + { + if ( text != null ) + { + return text; + } + if ( input == null ) + { + return null; + } + text = input.substring( start, stop ); + return text; + } + set + { + /** Override the text for this token. getText() will return this text + * rather than pulling from the buffer. Note that this does not mean + * that start/stop indexes are not valid. It means that that input + * was converted to a new string in the token object. + */ + text = value; + } + } + + public int Type + { + get + { + return type; + } + set + { + type = value; + } + } + + public int Line + { + get + { + return line; + } + set + { + line = value; + } + } + + public int CharPositionInLine + { + get + { + return charPositionInLine; + } + set + { + charPositionInLine = value; + } + } + + public int Channel + { + get + { + return channel; + } + set + { + channel = value; + } + } + + public int TokenIndex + { + get + { + return index; + } + set + { + index = value; + } + } + + public ICharStream InputStream + { + get + { + return input; + } + set + { + input = value; + } + } + + #endregion + + public int StartIndex + { + get + { + return start; + } + set + { + start = value; + } + } + + public int StopIndex + { + get + { + return stop; + } + set + { + stop = value; + } + } + + public override string ToString() + { + string channelStr = ""; + if ( channel > 0 ) + { + channelStr = ",channel=" + channel; + } + string txt = Text; + if ( txt != null ) + { + txt = Regex.Replace( txt, "\n", "\\\\n" ); + txt = Regex.Replace( txt, "\r", "\\\\r" ); + txt = Regex.Replace( txt, "\t", "\\\\t" ); + } + else + { + txt = "<no text>"; + } + return "[@" + TokenIndex + "," + start + ":" + stop + "='" + txt + "',<" + type + ">" + channelStr + "," + line + ":" + CharPositionInLine + "]"; + } + + [System.Runtime.Serialization.OnSerializing] + internal void OnSerializing( System.Runtime.Serialization.StreamingContext context ) + { + if ( text == null ) + text = Text; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/CommonTokenStream.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/CommonTokenStream.cs new file mode 100644 index 0000000..25c3bce --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/CommonTokenStream.cs @@ -0,0 +1,489 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + using System.Collections.Generic; + + using StringBuilder = System.Text.StringBuilder; + + /** <summary> + * The most common stream of tokens is one where every token is buffered up + * and tokens are prefiltered for a certain channel (the parser will only + * see these tokens and cannot change the filter channel number during the + * parse). + * </summary> + * + * <remarks>TODO: how to access the full token stream? How to track all tokens matched per rule?</remarks> + */ + [System.Serializable] + public class CommonTokenStream : ITokenStream + { + [System.NonSerialized] + protected ITokenSource tokenSource; + + /** <summary> + * Record every single token pulled from the source so we can reproduce + * chunks of it later. + * </summary> + */ + protected List<IToken> tokens; + + /** <summary>Map<tokentype, channel> to override some Tokens' channel numbers</summary> */ + protected IDictionary<int, int> channelOverrideMap; + + /** <summary>Set<tokentype>; discard any tokens with this type</summary> */ + protected HashSet<int> discardSet; + + /** <summary>Skip tokens on any channel but this one; this is how we skip whitespace...</summary> */ + protected int channel = TokenConstants.DEFAULT_CHANNEL; + + /** <summary>By default, track all incoming tokens</summary> */ + protected bool discardOffChannelTokens = false; + + /** <summary>Track the last mark() call result value for use in rewind().</summary> */ + protected int lastMarker; + + /** <summary> + * The index into the tokens list of the current token (next token + * to consume). p==-1 indicates that the tokens list is empty + * </summary> + */ + protected int p = -1; + + public CommonTokenStream() + { + tokens = new List<IToken>( 500 ); + } + + public CommonTokenStream( ITokenSource tokenSource ) + : this() + { + this.tokenSource = tokenSource; + } + + public CommonTokenStream( ITokenSource tokenSource, int channel ) + : this( tokenSource ) + { + this.channel = channel; + } + + public virtual int Index + { + get + { + return p; + } + } + + /** <summary>Reset this token stream by setting its token source.</summary> */ + public virtual void SetTokenSource( ITokenSource tokenSource ) + { + this.tokenSource = tokenSource; + tokens.Clear(); + p = -1; + channel = TokenConstants.DEFAULT_CHANNEL; + } + + /** <summary> + * Load all tokens from the token source and put in tokens. + * This is done upon first LT request because you might want to + * set some token type / channel overrides before filling buffer. + * </summary> + */ + protected virtual void FillBuffer() + { + int index = 0; + IToken t = tokenSource.NextToken(); + while ( t != null && t.Type != CharStreamConstants.EOF ) + { + bool discard = false; + // is there a channel override for token type? + int channelI; + if ( channelOverrideMap != null && channelOverrideMap.TryGetValue( t.Type, out channelI ) ) + t.Channel = channelI; + + //if ( channelOverrideMap != null && channelOverrideMap.ContainsKey( t.getType() ) ) + //{ + // object channelI = channelOverrideMap.get( t.getType() ); + // if ( channelI != null ) + // { + // t.setChannel( (int)channelI ); + // } + //} + if ( discardSet != null && + discardSet.Contains( t.Type ) ) + { + discard = true; + } + else if ( discardOffChannelTokens && t.Channel != this.channel ) + { + discard = true; + } + if ( !discard ) + { + t.TokenIndex = index; + tokens.Add( t ); + index++; + } + t = tokenSource.NextToken(); + } + // leave p pointing at first token on channel + p = 0; + p = SkipOffTokenChannels( p ); + } + + /** <summary> + * Move the input pointer to the next incoming token. The stream + * must become active with LT(1) available. consume() simply + * moves the input pointer so that LT(1) points at the next + * input symbol. Consume at least one token. + * </summary> + * + * <remarks> + * Walk past any token not on the channel the parser is listening to. + * </remarks> + */ + public virtual void Consume() + { + if ( p < tokens.Count ) + { + p++; + p = SkipOffTokenChannels( p ); // leave p on valid token + } + } + + /** <summary>Given a starting index, return the index of the first on-channel token.</summary> */ + protected virtual int SkipOffTokenChannels( int i ) + { + int n = tokens.Count; + while ( i < n && ( (IToken)tokens[i] ).Channel != channel ) + { + i++; + } + return i; + } + + protected virtual int SkipOffTokenChannelsReverse( int i ) + { + while ( i >= 0 && ( (IToken)tokens[i] ).Channel != channel ) + { + i--; + } + return i; + } + + /** <summary> + * A simple filter mechanism whereby you can tell this token stream + * to force all tokens of type ttype to be on channel. For example, + * when interpreting, we cannot exec actions so we need to tell + * the stream to force all WS and NEWLINE to be a different, ignored + * channel. + * </summary> + */ + public virtual void SetTokenTypeChannel( int ttype, int channel ) + { + if ( channelOverrideMap == null ) + { + channelOverrideMap = new Dictionary<int, int>(); + } + channelOverrideMap[ttype] = channel; + } + + public virtual void DiscardTokenType( int ttype ) + { + if ( discardSet == null ) + { + discardSet = new HashSet<int>(); + } + discardSet.Add( ttype ); + } + + public virtual void SetDiscardOffChannelTokens( bool discardOffChannelTokens ) + { + this.discardOffChannelTokens = discardOffChannelTokens; + } + + public virtual IList<IToken> GetTokens() + { + if ( p == -1 ) + { + FillBuffer(); + } + return tokens; + } + + public virtual IList<IToken> GetTokens( int start, int stop ) + { + return GetTokens( start, stop, (BitSet)null ); + } + + /** <summary> + * Given a start and stop index, return a List of all tokens in + * the token type BitSet. Return null if no tokens were found. This + * method looks at both on and off channel tokens. + * </summary> + */ + public virtual IList<IToken> GetTokens( int start, int stop, BitSet types ) + { + if ( p == -1 ) + { + FillBuffer(); + } + if ( stop >= tokens.Count ) + { + stop = tokens.Count - 1; + } + if ( start < 0 ) + { + start = 0; + } + if ( start > stop ) + { + return null; + } + + // list = tokens[start:stop]:{Token t, t.getType() in types} + IList<IToken> filteredTokens = new List<IToken>(); + for ( int i = start; i <= stop; i++ ) + { + IToken t = tokens[i]; + if ( types == null || types.Member( t.Type ) ) + { + filteredTokens.Add( t ); + } + } + if ( filteredTokens.Count == 0 ) + { + filteredTokens = null; + } + return filteredTokens; + } + + public virtual IList<IToken> GetTokens( int start, int stop, IList<int> types ) + { + return GetTokens( start, stop, new BitSet( types ) ); + } + + public virtual IList<IToken> GetTokens( int start, int stop, int ttype ) + { + return GetTokens( start, stop, BitSet.Of( ttype ) ); + } + + /** <summary> + * Get the ith token from the current position 1..n where k=1 is the + * first symbol of lookahead. + * </summary> + */ + public virtual IToken LT( int k ) + { + if ( p == -1 ) + { + FillBuffer(); + } + if ( k == 0 ) + { + return null; + } + if ( k < 0 ) + { + return LB( -k ); + } + //System.out.print("LT(p="+p+","+k+")="); + if ( ( p + k - 1 ) >= tokens.Count ) + { + return TokenConstants.EOF_TOKEN; + } + //System.out.println(tokens.get(p+k-1)); + int i = p; + int n = 1; + // find k good tokens + while ( n < k ) + { + // skip off-channel tokens + i = SkipOffTokenChannels( i + 1 ); // leave p on valid token + n++; + } + if ( i >= tokens.Count ) + { + return TokenConstants.EOF_TOKEN; + } + return (IToken)tokens[i]; + } + + /** <summary>Look backwards k tokens on-channel tokens</summary> */ + protected virtual IToken LB( int k ) + { + //System.out.print("LB(p="+p+","+k+") "); + if ( p == -1 ) + { + FillBuffer(); + } + if ( k == 0 ) + { + return null; + } + if ( ( p - k ) < 0 ) + { + return null; + } + + int i = p; + int n = 1; + // find k good tokens looking backwards + while ( n <= k ) + { + // skip off-channel tokens + i = SkipOffTokenChannelsReverse( i - 1 ); // leave p on valid token + n++; + } + if ( i < 0 ) + { + return null; + } + return (IToken)tokens[i]; + } + + /** <summary> + * Return absolute token i; ignore which channel the tokens are on; + * that is, count all tokens not just on-channel tokens. + * </summary> + */ + public virtual IToken Get( int i ) + { + return (IToken)tokens[i]; + } + + public virtual int LA( int i ) + { + return LT( i ).Type; + } + + public virtual int Mark() + { + if ( p == -1 ) + { + FillBuffer(); + } + lastMarker = Index; + return lastMarker; + } + + public virtual void Release( int marker ) + { + // no resources to release + } + + public virtual int Size() + { + return tokens.Count; + } + + public virtual void Rewind( int marker ) + { + Seek( marker ); + } + + public virtual void Rewind() + { + Seek( lastMarker ); + } + + public virtual void Reset() + { + p = 0; + lastMarker = 0; + } + + public virtual void Seek( int index ) + { + p = index; + } + + public virtual ITokenSource TokenSource + { + get + { + return tokenSource; + } + } + + public virtual string SourceName + { + get + { + return TokenSource.SourceName; + } + } + + public override string ToString() + { + if ( p == -1 ) + { + FillBuffer(); + } + return ToString( 0, tokens.Count - 1 ); + } + + public virtual string ToString( int start, int stop ) + { + if ( start < 0 || stop < 0 ) + { + return null; + } + if ( p == -1 ) + { + FillBuffer(); + } + if ( stop >= tokens.Count ) + { + stop = tokens.Count - 1; + } + StringBuilder buf = new StringBuilder(); + for ( int i = start; i <= stop; i++ ) + { + IToken t = tokens[i]; + buf.Append( t.Text ); + } + return buf.ToString(); + } + + public virtual string ToString( IToken start, IToken stop ) + { + if ( start != null && stop != null ) + { + return ToString( start.TokenIndex, stop.TokenIndex ); + } + return null; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/DFA.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/DFA.cs new file mode 100644 index 0000000..e9f2ff9 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/DFA.cs @@ -0,0 +1,291 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + using Console = System.Console; + + public delegate int SpecialStateTransitionHandler( DFA dfa, int s, IIntStream input ); + + /** <summary>A DFA implemented as a set of transition tables.</summary> + * + * <remarks> + * Any state that has a semantic predicate edge is special; those states + * are generated with if-then-else structures in a specialStateTransition() + * which is generated by cyclicDFA template. + * + * There are at most 32767 states (16-bit signed short). + * Could get away with byte sometimes but would have to generate different + * types and the simulation code too. For a point of reference, the Java + * lexer's Tokens rule DFA has 326 states roughly. + * </remarks> + */ + public class DFA + { + public DFA() + : this( new SpecialStateTransitionHandler( SpecialStateTransitionDefault ) ) + { + } + public DFA( SpecialStateTransitionHandler specialStateTransition ) + { + this.SpecialStateTransition = specialStateTransition ?? new SpecialStateTransitionHandler( SpecialStateTransitionDefault ); + } + + protected short[] eot; + protected short[] eof; + protected char[] min; + protected char[] max; + protected short[] accept; + protected short[] special; + protected short[][] transition; + + protected int decisionNumber; + + /** <summary>Which recognizer encloses this DFA? Needed to check backtracking</summary> */ + protected BaseRecognizer recognizer; + + public readonly bool debug = false; + + /** <summary> + * From the input stream, predict what alternative will succeed + * using this DFA (representing the covering regular approximation + * to the underlying CFL). Return an alternative number 1..n. Throw + * an exception upon error. + * </summary> + */ + public virtual int Predict( IIntStream input ) + { + if ( debug ) + { + Console.Error.WriteLine( "Enter DFA.predict for decision " + decisionNumber ); + } + int mark = input.Mark(); // remember where decision started in input + int s = 0; // we always start at s0 + try + { + for ( ; ; ) + { + if ( debug ) + Console.Error.WriteLine( "DFA " + decisionNumber + " state " + s + " LA(1)=" + (char)input.LA( 1 ) + "(" + input.LA( 1 ) + + "), index=" + input.Index ); + int specialState = special[s]; + if ( specialState >= 0 ) + { + if ( debug ) + { + Console.Error.WriteLine( "DFA " + decisionNumber + + " state " + s + " is special state " + specialState ); + } + s = SpecialStateTransition( this, specialState, input ); + if ( debug ) + { + Console.Error.WriteLine( "DFA " + decisionNumber + + " returns from special state " + specialState + " to " + s ); + } + if ( s == -1 ) + { + NoViableAlt( s, input ); + return 0; + } + input.Consume(); + continue; + } + if ( accept[s] >= 1 ) + { + if ( debug ) + Console.Error.WriteLine( "accept; predict " + accept[s] + " from state " + s ); + return accept[s]; + } + // look for a normal char transition + char c = (char)input.LA( 1 ); // -1 == \uFFFF, all tokens fit in 65000 space + if ( c >= min[s] && c <= max[s] ) + { + int snext = transition[s][c - min[s]]; // move to next state + if ( snext < 0 ) + { + // was in range but not a normal transition + // must check EOT, which is like the else clause. + // eot[s]>=0 indicates that an EOT edge goes to another + // state. + if ( eot[s] >= 0 ) + { // EOT Transition to accept state? + if ( debug ) + Console.Error.WriteLine( "EOT transition" ); + s = eot[s]; + input.Consume(); + // TODO: I had this as return accept[eot[s]] + // which assumed here that the EOT edge always + // went to an accept...faster to do this, but + // what about predicated edges coming from EOT + // target? + continue; + } + NoViableAlt( s, input ); + return 0; + } + s = snext; + input.Consume(); + continue; + } + if ( eot[s] >= 0 ) + { // EOT Transition? + if ( debug ) + Console.Error.WriteLine( "EOT transition" ); + s = eot[s]; + input.Consume(); + continue; + } + if ( c == unchecked((char)TokenConstants.EOF) && eof[s] >= 0 ) + { // EOF Transition to accept state? + if ( debug ) + Console.Error.WriteLine( "accept via EOF; predict " + accept[eof[s]] + " from " + eof[s] ); + return accept[eof[s]]; + } + // not in range and not EOF/EOT, must be invalid symbol + if ( debug ) + { + Console.Error.WriteLine( "min[" + s + "]=" + min[s] ); + Console.Error.WriteLine( "max[" + s + "]=" + max[s] ); + Console.Error.WriteLine( "eot[" + s + "]=" + eot[s] ); + Console.Error.WriteLine( "eof[" + s + "]=" + eof[s] ); + for ( int p = 0; p < transition[s].Length; p++ ) + { + Console.Error.Write( transition[s][p] + " " ); + } + Console.Error.WriteLine(); + } + NoViableAlt( s, input ); + return 0; + } + } + finally + { + input.Rewind( mark ); + } + } + + protected virtual void NoViableAlt( int s, IIntStream input ) + { + if ( recognizer.state.backtracking > 0 ) + { + recognizer.state.failed = true; + return; + } + NoViableAltException nvae = + new NoViableAltException( GetDescription(), + decisionNumber, + s, + input ); + Error( nvae ); + throw nvae; + } + + /** <summary>A hook for debugging interface</summary> */ + public virtual void Error( NoViableAltException nvae ) + { + } + + public SpecialStateTransitionHandler SpecialStateTransition + { + get; + private set; + } + //public virtual int specialStateTransition( int s, IntStream input ) + //{ + // return -1; + //} + + static int SpecialStateTransitionDefault( DFA dfa, int s, IIntStream input ) + { + return -1; + } + + public virtual string GetDescription() + { + return "n/a"; + } + + /** <summary> + * Given a String that has a run-length-encoding of some unsigned shorts + * like "\1\2\3\9", convert to short[] {2,9,9,9}. We do this to avoid + * static short[] which generates so much init code that the class won't + * compile. :( + * </summary> + */ + public static short[] UnpackEncodedString( string encodedString ) + { + // walk first to find how big it is. + int size = 0; + for ( int i = 0; i < encodedString.Length; i += 2 ) + { + size += encodedString[i]; + } + short[] data = new short[size]; + int di = 0; + for ( int i = 0; i < encodedString.Length; i += 2 ) + { + char n = encodedString[i]; + char v = encodedString[i + 1]; + // add v n times to data + for ( int j = 1; j <= n; j++ ) + { + data[di++] = (short)v; + } + } + return data; + } + + /** <summary>Hideous duplication of code, but I need different typed arrays out :(</summary> */ + public static char[] UnpackEncodedStringToUnsignedChars( string encodedString ) + { + // walk first to find how big it is. + int size = 0; + for ( int i = 0; i < encodedString.Length; i += 2 ) + { + size += encodedString[i]; + } + char[] data = new char[size]; + int di = 0; + for ( int i = 0; i < encodedString.Length; i += 2 ) + { + char n = encodedString[i]; + char v = encodedString[i + 1]; + // add v n times to data + for ( int j = 1; j <= n; j++ ) + { + data[di++] = v; + } + } + return data; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Debug/DebugEventListenerConstants.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Debug/DebugEventListenerConstants.cs new file mode 100644 index 0000000..9032492 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Debug/DebugEventListenerConstants.cs @@ -0,0 +1,46 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Debug +{ + + public static class DebugEventListenerConstants + { + /** <summary>Moved to version 2 for v3.1: added grammar name to enter/exit Rule</summary> */ + public const string ProtocolVersion = "2"; + + /** <summary>Serialized version of true</summary> */ + public const int True = 1; + public const int False = 0; + } + +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Debug/IDebugEventListener.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Debug/IDebugEventListener.cs new file mode 100644 index 0000000..cf6c5e2 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Debug/IDebugEventListener.cs @@ -0,0 +1,387 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Debug +{ + + /** <summary>All debugging events that a recognizer can trigger.</summary> + * + * <remarks> + * I did not create a separate AST debugging interface as it would create + * lots of extra classes and DebugParser has a dbg var defined, which makes + * it hard to change to ASTDebugEventListener. I looked hard at this issue + * and it is easier to understand as one monolithic event interface for all + * possible events. Hopefully, adding ST debugging stuff won't be bad. Leave + * for future. 4/26/2006. + * </remarks> + */ + public interface IDebugEventListener + { + void Initialize(); + + /** <summary> + * The parser has just entered a rule. No decision has been made about + * which alt is predicted. This is fired AFTER init actions have been + * executed. Attributes are defined and available etc... + * The grammarFileName allows composite grammars to jump around among + * multiple grammar files. + * </summary> + */ + void EnterRule( string grammarFileName, string ruleName ); + + /** <summary> + * Because rules can have lots of alternatives, it is very useful to + * know which alt you are entering. This is 1..n for n alts. + * </summary> + */ + void EnterAlt( int alt ); + + /** <summary> + * This is the last thing executed before leaving a rule. It is + * executed even if an exception is thrown. This is triggered after + * error reporting and recovery have occurred (unless the exception is + * not caught in this rule). This implies an "exitAlt" event. + * The grammarFileName allows composite grammars to jump around among + * multiple grammar files. + * </summary> + */ + void ExitRule( string grammarFileName, string ruleName ); + + /** <summary>Track entry into any (...) subrule other EBNF construct</summary> */ + void EnterSubRule( int decisionNumber ); + + void ExitSubRule( int decisionNumber ); + + /** <summary> + * Every decision, fixed k or arbitrary, has an enter/exit event + * so that a GUI can easily track what LT/consume events are + * associated with prediction. You will see a single enter/exit + * subrule but multiple enter/exit decision events, one for each + * loop iteration. + * </summary> + */ + void EnterDecision( int decisionNumber ); + + void ExitDecision( int decisionNumber ); + + /** <summary> + * An input token was consumed; matched by any kind of element. + * Trigger after the token was matched by things like match(), matchAny(). + * </summary> + */ + void ConsumeToken( IToken t ); + + /** <summary> + * An off-channel input token was consumed. + * Trigger after the token was matched by things like match(), matchAny(). + * (unless of course the hidden token is first stuff in the input stream). + * </summary> + */ + void ConsumeHiddenToken( IToken t ); + + /** <summary> + * Somebody (anybody) looked ahead. Note that this actually gets + * triggered by both LA and LT calls. The debugger will want to know + * which Token object was examined. Like consumeToken, this indicates + * what token was seen at that depth. A remote debugger cannot look + * ahead into a file it doesn't have so LT events must pass the token + * even if the info is redundant. + * </summary> + */ + void LT( int i, IToken t ); + + /** <summary> + * The parser is going to look arbitrarily ahead; mark this location, + * the token stream's marker is sent in case you need it. + * </summary> + */ + void Mark( int marker ); + + /** <summary> + * After an arbitrairly long lookahead as with a cyclic DFA (or with + * any backtrack), this informs the debugger that stream should be + * rewound to the position associated with marker. + * </summary> + */ + void Rewind( int marker ); + + /** <summary> + * Rewind to the input position of the last marker. + * Used currently only after a cyclic DFA and just + * before starting a sem/syn predicate to get the + * input position back to the start of the decision. + * Do not "pop" the marker off the state. mark(i) + * and rewind(i) should balance still. + * </summary> + */ + void Rewind(); + + void BeginBacktrack( int level ); + + void EndBacktrack( int level, bool successful ); + + /** <summary> + * To watch a parser move through the grammar, the parser needs to + * inform the debugger what line/charPos it is passing in the grammar. + * For now, this does not know how to switch from one grammar to the + * other and back for island grammars etc... + * </summary> + * + * <remarks> + * This should also allow breakpoints because the debugger can stop + * the parser whenever it hits this line/pos. + * </remarks> + */ + void Location( int line, int pos ); + + /** <summary> + * A recognition exception occurred such as NoViableAltException. I made + * this a generic event so that I can alter the exception hierachy later + * without having to alter all the debug objects. + * </summary> + * + * <remarks> + * Upon error, the stack of enter rule/subrule must be properly unwound. + * If no viable alt occurs it is within an enter/exit decision, which + * also must be rewound. Even the rewind for each mark must be unwount. + * In the Java target this is pretty easy using try/finally, if a bit + * ugly in the generated code. The rewind is generated in DFA.predict() + * actually so no code needs to be generated for that. For languages + * w/o this "finally" feature (C++?), the target implementor will have + * to build an event stack or something. + * + * Across a socket for remote debugging, only the RecognitionException + * data fields are transmitted. The token object or whatever that + * caused the problem was the last object referenced by LT. The + * immediately preceding LT event should hold the unexpected Token or + * char. + * + * Here is a sample event trace for grammar: + * + * b : C ({;}A|B) // {;} is there to prevent A|B becoming a set + * | D + * ; + * + * The sequence for this rule (with no viable alt in the subrule) for + * input 'c c' (there are 3 tokens) is: + * + * commence + * LT(1) + * enterRule b + * location 7 1 + * enter decision 3 + * LT(1) + * exit decision 3 + * enterAlt1 + * location 7 5 + * LT(1) + * consumeToken [c/<4>,1:0] + * location 7 7 + * enterSubRule 2 + * enter decision 2 + * LT(1) + * LT(1) + * recognitionException NoViableAltException 2 1 2 + * exit decision 2 + * exitSubRule 2 + * beginResync + * LT(1) + * consumeToken [c/<4>,1:1] + * LT(1) + * endResync + * LT(-1) + * exitRule b + * terminate + * </remarks> + */ + void RecognitionException( RecognitionException e ); + + /** <summary> + * Indicates the recognizer is about to consume tokens to resynchronize + * the parser. Any consume events from here until the recovered event + * are not part of the parse--they are dead tokens. + * </summary> + */ + void BeginResync(); + + /** <summary> + * Indicates that the recognizer has finished consuming tokens in order + * to resychronize. There may be multiple beginResync/endResync pairs + * before the recognizer comes out of errorRecovery mode (in which + * multiple errors are suppressed). This will be useful + * in a gui where you want to probably grey out tokens that are consumed + * but not matched to anything in grammar. Anything between + * a beginResync/endResync pair was tossed out by the parser. + * </summary> + */ + void EndResync(); + + /** <summary>A semantic predicate was evaluate with this result and action text</summary> */ + void SemanticPredicate( bool result, string predicate ); + + /** <summary> + * Announce that parsing has begun. Not technically useful except for + * sending events over a socket. A GUI for example will launch a thread + * to connect and communicate with a remote parser. The thread will want + * to notify the GUI when a connection is made. ANTLR parsers + * trigger this upon entry to the first rule (the ruleLevel is used to + * figure this out). + * </summary> + */ + void Commence(); + + /** <summary> + * Parsing is over; successfully or not. Mostly useful for telling + * remote debugging listeners that it's time to quit. When the rule + * invocation level goes to zero at the end of a rule, we are done + * parsing. + * </summary> + */ + void Terminate(); + + + #region Tree Parsing + + /** <summary> + * Input for a tree parser is an AST, but we know nothing for sure + * about a node except its type and text (obtained from the adaptor). + * This is the analog of the consumeToken method. Again, the ID is + * the hashCode usually of the node so it only works if hashCode is + * not implemented. If the type is UP or DOWN, then + * the ID is not really meaningful as it's fixed--there is + * just one UP node and one DOWN navigation node. + * </summary> + * + * <param name="t" /> + */ + void ConsumeNode( object t ); + + /** <summary> + * The tree parser lookedahead. If the type is UP or DOWN, + * then the ID is not really meaningful as it's fixed--there is + * just one UP node and one DOWN navigation node. + * </summary> + */ + void LT( int i, object t ); + + #endregion + + + #region AST Events + + /** <summary> + * A nil was created (even nil nodes have a unique ID... + * they are not "null" per se). As of 4/28/2006, this + * seems to be uniquely triggered when starting a new subtree + * such as when entering a subrule in automatic mode and when + * building a tree in rewrite mode. + * </summary> + * + * <remarks> + * If you are receiving this event over a socket via + * RemoteDebugEventSocketListener then only t.ID is set. + * </remarks> + */ + void NilNode( object t ); + + /** <summary> + * Upon syntax error, recognizers bracket the error with an error node + * if they are building ASTs. + * </summary> + * + * <param name="t"/> + */ + void ErrorNode( object t ); + + /** <summary>Announce a new node built from token elements such as type etc...</summary> + * + * <remarks> + * If you are receiving this event over a socket via + * RemoteDebugEventSocketListener then only t.ID, type, text are + * set. + * </remarks> + */ + void CreateNode( object t ); + + /** <summary>Announce a new node built from an existing token.</summary> + * + * <remarks> + * If you are receiving this event over a socket via + * RemoteDebugEventSocketListener then only node.ID and token.tokenIndex + * are set. + * </remarks> + */ + void CreateNode( object node, IToken token ); + + /** <summary>Make a node the new root of an existing root. See</summary> + * + * <remarks> + * Note: the newRootID parameter is possibly different + * than the TreeAdaptor.becomeRoot() newRoot parameter. + * In our case, it will always be the result of calling + * TreeAdaptor.becomeRoot() and not root_n or whatever. + * + * The listener should assume that this event occurs + * only when the current subrule (or rule) subtree is + * being reset to newRootID. + * + * If you are receiving this event over a socket via + * RemoteDebugEventSocketListener then only IDs are set. + * </remarks> + * + * <seealso cref="Antlr.Runtime.Tree.TreeAdaptor.becomeRoot()"/> + */ + void BecomeRoot( object newRoot, object oldRoot ); + + /** <summary>Make childID a child of rootID.</summary> + * + * <remarks> + * If you are receiving this event over a socket via + * RemoteDebugEventSocketListener then only IDs are set. + * </remarks> + * + * <seealso cref="Antlr.Runtime.Tree.TreeAdaptor.addChild()"/> + */ + void AddChild( object root, object child ); + + /** <summary>Set the token start/stop token index for a subtree root or node.</summary> + * + * <remarks> + * If you are receiving this event over a socket via + * RemoteDebugEventSocketListener then only t.ID is set. + * </remarks> + */ + void SetTokenBoundaries( object t, int tokenStartIndex, int tokenStopIndex ); + + #endregion + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/EarlyExitException.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/EarlyExitException.cs new file mode 100644 index 0000000..8d77ed8 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/EarlyExitException.cs @@ -0,0 +1,52 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + + /** <summary>The recognizer did not match anything for a (..)+ loop.</summary> */ + public class EarlyExitException : RecognitionException + { + public int decisionNumber; + + /** <summary>Used for remote debugger deserialization</summary> */ + public EarlyExitException() + { + } + + public EarlyExitException( int decisionNumber, IIntStream input ) + : base( input ) + { + this.decisionNumber = decisionNumber; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/FailedPredicateException.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/FailedPredicateException.cs new file mode 100644 index 0000000..6f9376e --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/FailedPredicateException.cs @@ -0,0 +1,65 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + + /** <summary> + * A semantic predicate failed during validation. Validation of predicates + * occurs when normally parsing the alternative just like matching a token. + * Disambiguating predicate evaluation occurs when we hoist a predicate into + * a prediction decision. + * </summary> + */ + public class FailedPredicateException : RecognitionException + { + public string ruleName; + public string predicateText; + + /** <summary>Used for remote debugger deserialization</summary> */ + public FailedPredicateException() + { + } + + public FailedPredicateException( IIntStream input, string ruleName, string predicateText ) + : base( input ) + { + this.ruleName = ruleName; + this.predicateText = predicateText; + } + + public override string ToString() + { + return "FailedPredicateException(" + ruleName + ",{" + predicateText + "}?)"; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ICharStream.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ICharStream.cs new file mode 100644 index 0000000..5fa87db --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ICharStream.cs @@ -0,0 +1,72 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + + /** <summary>A source of characters for an ANTLR lexer</summary> */ + public interface ICharStream : IIntStream + { + + /** <summary> + * For infinite streams, you don't need this; primarily I'm providing + * a useful interface for action code. Just make sure actions don't + * use this on streams that don't support it. + * </summary> + */ + string substring( int start, int stop ); + + /** <summary> + * Get the ith character of lookahead. This is the same usually as + * LA(i). This will be used for labels in the generated + * lexer code. I'd prefer to return a char here type-wise, but it's + * probably better to be 32-bit clean and be consistent with LA. + * </summary> + */ + int LT( int i ); + + /** <summary>ANTLR tracks the line information automatically</summary> */ + /** <summary>Because this stream can rewind, we need to be able to reset the line</summary> */ + int Line + { + get; + set; + } + + /** <summary>The index of the character relative to the beginning of the line 0..n-1</summary> */ + int CharPositionInLine + { + get; + set; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/IIntStream.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/IIntStream.cs new file mode 100644 index 0000000..2181798 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/IIntStream.cs @@ -0,0 +1,158 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + + /** <summary> + * A simple stream of integers used when all I care about is the char + * or token type sequence (such as interpretation). + * </summary> + */ + public interface IIntStream + { + void Consume(); + + /** <summary> + * Get int at current input pointer + i ahead where i=1 is next int. + * Negative indexes are allowed. LA(-1) is previous token (token + * just matched). LA(-i) where i is before first token should + * yield -1, invalid char / EOF. + * </summary> + */ + int LA( int i ); + + /** <summary> + * Tell the stream to start buffering if it hasn't already. Return + * current input position, Index, or some other marker so that + * when passed to rewind() you get back to the same spot. + * rewind(mark()) should not affect the input cursor. The Lexer + * track line/col info as well as input index so its markers are + * not pure input indexes. Same for tree node streams. + * </summary> + */ + int Mark(); + + /** <summary> + * Return the current input symbol index 0..n where n indicates the + * last symbol has been read. The index is the symbol about to be + * read not the most recently read symbol. + * </summary> + */ + int Index + { + get; + } + + /** <summary> + * Reset the stream so that next call to index would return marker. + * The marker will usually be Index but it doesn't have to be. It's + * just a marker to indicate what state the stream was in. This is + * essentially calling release() and seek(). If there are markers + * created after this marker argument, this routine must unroll them + * like a stack. Assume the state the stream was in when this marker + * was created. + * </summary> + */ + void Rewind( int marker ); + + /** <summary> + * Rewind to the input position of the last marker. + * Used currently only after a cyclic DFA and just + * before starting a sem/syn predicate to get the + * input position back to the start of the decision. + * Do not "pop" the marker off the state. mark(i) + * and rewind(i) should balance still. It is + * like invoking rewind(last marker) but it should not "pop" + * the marker off. It's like seek(last marker's input position). + * </summary> + */ + void Rewind(); + + /** <summary> + * You may want to commit to a backtrack but don't want to force the + * stream to keep bookkeeping objects around for a marker that is + * no longer necessary. This will have the same behavior as + * rewind() except it releases resources without the backward seek. + * This must throw away resources for all markers back to the marker + * argument. So if you're nested 5 levels of mark(), and then release(2) + * you have to release resources for depths 2..5. + * </summary> + */ + void Release( int marker ); + + /** <summary> + * Set the input cursor to the position indicated by index. This is + * normally used to seek ahead in the input stream. No buffering is + * required to do this unless you know your stream will use seek to + * move backwards such as when backtracking. + * </summary> + * + * <remarks> + * This is different from rewind in its multi-directional + * requirement and in that its argument is strictly an input cursor (index). + * + * For char streams, seeking forward must update the stream state such + * as line number. For seeking backwards, you will be presumably + * backtracking using the mark/rewind mechanism that restores state and + * so this method does not need to update state when seeking backwards. + * + * Currently, this method is only used for efficient backtracking using + * memoization, but in the future it may be used for incremental parsing. + * + * The index is 0..n-1. A seek to position i means that LA(1) will + * return the ith symbol. So, seeking to 0 means LA(1) will return the + * first element in the stream. + * </remarks> + */ + void Seek( int index ); + + /** <summary> + * Only makes sense for streams that buffer everything up probably, but + * might be useful to display the entire stream or for testing. This + * value includes a single EOF. + * </summary> + */ + int Size(); + + /** <summary> + * Where are you getting symbols from? Normally, implementations will + * pass the buck all the way to the lexer who can ask its input stream + * for the file name or whatever. + * </summary> + */ + string SourceName + { + get; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/IToken.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/IToken.cs new file mode 100644 index 0000000..fb7ddfc --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/IToken.cs @@ -0,0 +1,94 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + + public interface IToken + { + /** <summary>Get the text of the token</summary> */ + string Text + { + get; + set; + } + + int Type + { + get; + set; + } + + /** <summary>The line number on which this token was matched; line=1..n</summary> */ + int Line + { + get; + set; + } + + /** <summary>The index of the first character relative to the beginning of the line 0..n-1</summary> */ + int CharPositionInLine + { + get; + set; + } + + int Channel + { + get; + set; + } + + /** <summary> + * An index from 0..n-1 of the token object in the input stream. + * This must be valid in order to use the ANTLRWorks debugger. + * </summary> + */ + int TokenIndex + { + get; + set; + } + + /** <summary> + * From what character stream was this token created? You don't have to + * implement but it's nice to know where a Token comes from if you have + * include files etc... on the input. + * </summary> + */ + ICharStream InputStream + { + get; + set; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ITokenSource.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ITokenSource.cs new file mode 100644 index 0000000..97a9b2c --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ITokenSource.cs @@ -0,0 +1,78 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + + /** <summary> + * A source of tokens must provide a sequence of tokens via nextToken() + * and also must reveal it's source of characters; CommonToken's text is + * computed from a CharStream; it only store indices into the char stream. + * </summary> + * + * <remarks> + * Errors from the lexer are never passed to the parser. Either you want + * to keep going or you do not upon token recognition error. If you do not + * want to continue lexing then you do not want to continue parsing. Just + * throw an exception not under RecognitionException and Java will naturally + * toss you all the way out of the recognizers. If you want to continue + * lexing then you should not throw an exception to the parser--it has already + * requested a token. Keep lexing until you get a valid one. Just report + * errors and keep going, looking for a valid token. + * </summary> + */ + public interface ITokenSource + { + /** <summary> + * Return a Token object from your input stream (usually a CharStream). + * Do not fail/return upon lexing error; keep chewing on the characters + * until you get a good one; errors are not passed through to the parser. + * </summary> + */ + IToken NextToken(); + + /** <summary> + * Where are you getting tokens from? normally the implication will simply + * ask lexers input stream. + * </summary> + */ + string SourceName + { + get; + } + + string[] TokenNames + { + get; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ITokenStream.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ITokenStream.cs new file mode 100644 index 0000000..6a74cbc --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ITokenStream.cs @@ -0,0 +1,86 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +namespace Antlr.Runtime +{ + + /** <summary>A stream of tokens accessing tokens from a TokenSource</summary> */ + public interface ITokenStream : IIntStream + { + /** <summary>Get Token at current input pointer + i ahead where i=1 is next Token. + * i<0 indicates tokens in the past. So -1 is previous token and -2 is + * two tokens ago. LT(0) is undefined. For i>=n, return Token.EOFToken. + * Return null for LT(0) and any index that results in an absolute address + * that is negative.</summary> + */ + IToken LT( int k ); + + /** <summary> + * Get a token at an absolute index i; 0..n-1. This is really only + * needed for profiling and debugging and token stream rewriting. + * If you don't want to buffer up tokens, then this method makes no + * sense for you. Naturally you can't use the rewrite stream feature. + * I believe DebugTokenStream can easily be altered to not use + * this method, removing the dependency. + * </summary> + */ + IToken Get( int i ); + + /** <summary> + * Where is this stream pulling tokens from? This is not the name, but + * the object that provides Token objects. + * </summary> + */ + ITokenSource TokenSource + { + get; + } + + /** <summary> + * Return the text of all tokens from start to stop, inclusive. + * If the stream does not buffer all the tokens then it can just + * return "" or null; Users should not access $ruleLabel.text in + * an action of course in that case. + * </summary> + */ + string ToString( int start, int stop ); + + /** <summary> + * Because the user is not required to use a token with an index stored + * in it, we must provide a means for two token objects themselves to + * indicate the start/end location. Most often this will just delegate + * to the other toString(int,int). This is also parallel with + * the TreeNodeStream.toString(Object,Object). + * </summary> + */ + string ToString( IToken start, IToken stop ); + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Lexer.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Lexer.cs new file mode 100644 index 0000000..b5d5608 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Lexer.cs @@ -0,0 +1,439 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + /** <summary> + * A lexer is recognizer that draws input symbols from a character stream. + * lexer grammars result in a subclass of this object. A Lexer object + * uses simplified match() and error recovery mechanisms in the interest + * of speed. + * </summary> + */ + public abstract class Lexer : BaseRecognizer, ITokenSource + { + /** <summary>Where is the lexer drawing characters from?</summary> */ + protected ICharStream input; + + public Lexer() + { + } + + public Lexer( ICharStream input ) + { + this.input = input; + } + + public Lexer( ICharStream input, RecognizerSharedState state ) : + base( state ) + { + this.input = input; + } + + #region Properties + public string Text + { + get + { + return GetText(); + } + set + { + SetText( value ); + } + } + public int Line + { + get + { + return input.Line; + } + set + { + input.Line = value; + } + } + public int CharPositionInLine + { + get + { + return input.CharPositionInLine; + } + set + { + input.CharPositionInLine = value; + } + } + public string[] TokenNames + { + get + { + return GetTokenNames(); + } + } + #endregion + + public override void Reset() + { + base.Reset(); // reset all recognizer state variables + // wack Lexer state variables + if ( input != null ) + { + input.Seek( 0 ); // rewind the input + } + if ( state == null ) + { + return; // no shared state work to do + } + state.token = null; + state.type = TokenConstants.INVALID_TOKEN_TYPE; + state.channel = TokenConstants.DEFAULT_CHANNEL; + state.tokenStartCharIndex = -1; + state.tokenStartCharPositionInLine = -1; + state.tokenStartLine = -1; + state.text = null; + } + + /** <summary>Return a token from this source; i.e., match a token on the char stream.</summary> */ + public virtual IToken NextToken() + { + for ( ; ; ) + { + state.token = null; + state.channel = TokenConstants.DEFAULT_CHANNEL; + state.tokenStartCharIndex = input.Index; + state.tokenStartCharPositionInLine = input.CharPositionInLine; + state.tokenStartLine = input.Line; + state.text = null; + if ( input.LA( 1 ) == CharStreamConstants.EOF ) + { + return TokenConstants.EOF_TOKEN; + } + try + { + mTokens(); + if ( state.token == null ) + { + Emit(); + } + else if ( state.token == TokenConstants.SKIP_TOKEN ) + { + continue; + } + return state.token; + } + catch ( NoViableAltException nva ) + { + ReportError( nva ); + Recover( nva ); // throw out current char and try again + } + catch ( RecognitionException re ) + { + ReportError( re ); + // match() routine has already called recover() + } + } + } + + /** <summary> + * Instruct the lexer to skip creating a token for current lexer rule + * and look for another token. nextToken() knows to keep looking when + * a lexer rule finishes with token set to SKIP_TOKEN. Recall that + * if token==null at end of any token rule, it creates one for you + * and emits it. + * </summary> + */ + public virtual void Skip() + { + state.token = TokenConstants.SKIP_TOKEN; + } + + /** <summary>This is the lexer entry point that sets instance var 'token'</summary> */ + public abstract void mTokens(); + + /** <summary>Set the char stream and reset the lexer</summary> */ + public virtual void SetCharStream( ICharStream input ) + { + this.input = null; + Reset(); + this.input = input; + } + + public virtual ICharStream GetCharStream() + { + return this.input; + } + + public override string SourceName + { + get + { + return input.SourceName; + } + } + + /** <summary> + * Currently does not support multiple emits per nextToken invocation + * for efficiency reasons. Subclass and override this method and + * nextToken (to push tokens into a list and pull from that list rather + * than a single variable as this implementation does). + * </summary> + */ + public virtual void Emit( IToken token ) + { + state.token = token; + } + + /** <summary> + * The standard method called to automatically emit a token at the + * outermost lexical rule. The token object should point into the + * char buffer start..stop. If there is a text override in 'text', + * use that to set the token's text. Override this method to emit + * custom Token objects. + * </summary> + * + * <remarks> + * If you are building trees, then you should also override + * Parser or TreeParser.getMissingSymbol(). + * </remarks> + */ + public virtual IToken Emit() + { + IToken t = new CommonToken( input, state.type, state.channel, state.tokenStartCharIndex, GetCharIndex() - 1 ); + t.Line = state.tokenStartLine; + t.Text = state.text; + t.CharPositionInLine = state.tokenStartCharPositionInLine; + Emit( t ); + return t; + } + + public virtual void Match( string s ) + { + int i = 0; + while ( i < s.Length ) + { + if ( input.LA( 1 ) != s[i] ) + { + if ( state.backtracking > 0 ) + { + state.failed = true; + return; + } + MismatchedTokenException mte = + new MismatchedTokenException( s[i], input ) + { + tokenNames = GetTokenNames() + }; + Recover( mte ); + throw mte; + } + i++; + input.Consume(); + state.failed = false; + } + } + + public virtual void MatchAny() + { + input.Consume(); + } + + public virtual void Match( int c ) + { + if ( input.LA( 1 ) != c ) + { + if ( state.backtracking > 0 ) + { + state.failed = true; + return; + } + MismatchedTokenException mte = + new MismatchedTokenException( c, input ) + { + tokenNames = GetTokenNames() + }; + Recover( mte ); // don't really recover; just consume in lexer + throw mte; + } + input.Consume(); + state.failed = false; + } + + public virtual void MatchRange( int a, int b ) + { + if ( input.LA( 1 ) < a || input.LA( 1 ) > b ) + { + if ( state.backtracking > 0 ) + { + state.failed = true; + return; + } + MismatchedRangeException mre = + new MismatchedRangeException( a, b, input ); + Recover( mre ); + throw mre; + } + input.Consume(); + state.failed = false; + } + + /** <summary>What is the index of the current character of lookahead?</summary> */ + public virtual int GetCharIndex() + { + return input.Index; + } + + /** <summary>Return the text matched so far for the current token or any text override.</summary> */ + public virtual string GetText() + { + if ( state.text != null ) + { + return state.text; + } + return input.substring( state.tokenStartCharIndex, GetCharIndex() - 1 ); + } + + /** <summary>Set the complete text of this token; it wipes any previous changes to the text.</summary> */ + public virtual void SetText( string text ) + { + state.text = text; + } + + public override void ReportError( RecognitionException e ) + { + /** TODO: not thought about recovery in lexer yet. + * + // if we've already reported an error and have not matched a token + // yet successfully, don't report any errors. + if ( errorRecovery ) { + //System.err.print("[SPURIOUS] "); + return; + } + errorRecovery = true; + */ + + DisplayRecognitionError( this.GetTokenNames(), e ); + } + + public override string GetErrorMessage( RecognitionException e, string[] tokenNames ) + { + string msg = null; + if ( e is MismatchedTokenException ) + { + MismatchedTokenException mte = (MismatchedTokenException)e; + msg = "mismatched character " + GetCharErrorDisplay( e.c ) + " expecting " + GetCharErrorDisplay( mte.expecting ); + } + else if ( e is NoViableAltException ) + { + NoViableAltException nvae = (NoViableAltException)e; + // for development, can add "decision=<<"+nvae.grammarDecisionDescription+">>" + // and "(decision="+nvae.decisionNumber+") and + // "state "+nvae.stateNumber + msg = "no viable alternative at character " + GetCharErrorDisplay( e.c ); + } + else if ( e is EarlyExitException ) + { + EarlyExitException eee = (EarlyExitException)e; + // for development, can add "(decision="+eee.decisionNumber+")" + msg = "required (...)+ loop did not match anything at character " + GetCharErrorDisplay( e.c ); + } + else if ( e is MismatchedNotSetException ) + { + MismatchedNotSetException mse = (MismatchedNotSetException)e; + msg = "mismatched character " + GetCharErrorDisplay( e.c ) + " expecting set " + mse.expecting; + } + else if ( e is MismatchedSetException ) + { + MismatchedSetException mse = (MismatchedSetException)e; + msg = "mismatched character " + GetCharErrorDisplay( e.c ) + " expecting set " + mse.expecting; + } + else if ( e is MismatchedRangeException ) + { + MismatchedRangeException mre = (MismatchedRangeException)e; + msg = "mismatched character " + GetCharErrorDisplay( e.c ) + " expecting set " + + GetCharErrorDisplay( mre.a ) + ".." + GetCharErrorDisplay( mre.b ); + } + else + { + msg = base.GetErrorMessage( e, tokenNames ); + } + return msg; + } + + public virtual string GetCharErrorDisplay( int c ) + { + string s = c.ToString(); //string.valueOf((char)c); + switch ( c ) + { + case TokenConstants.EOF: + s = "<EOF>"; + break; + case '\n': + s = "\\n"; + break; + case '\t': + s = "\\t"; + break; + case '\r': + s = "\\r"; + break; + } + return "'" + s + "'"; + } + + /** <summary> + * Lexers can normally match any char in it's vocabulary after matching + * a token, so do the easy thing and just kill a character and hope + * it all works out. You can instead use the rule invocation stack + * to do sophisticated error recovery if you are in a fragment rule. + * </summary> + */ + public virtual void Recover( RecognitionException re ) + { + //System.out.println("consuming char "+(char)input.LA(1)+" during recovery"); + //re.printStackTrace(); + input.Consume(); + } + + public virtual void TraceIn( string ruleName, int ruleIndex ) + { + string inputSymbol = ( (char)input.LT( 1 ) ) + " line=" + Line + ":" + CharPositionInLine; + base.TraceIn( ruleName, ruleIndex, inputSymbol ); + } + + public virtual void TraceOut( string ruleName, int ruleIndex ) + { + string inputSymbol = ( (char)input.LT( 1 ) ) + " line=" + Line + ":" + CharPositionInLine; + base.TraceOut( ruleName, ruleIndex, inputSymbol ); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/FastQueue.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/FastQueue.cs new file mode 100644 index 0000000..9f54ddc --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/FastQueue.cs @@ -0,0 +1,124 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Misc +{ + using System.Collections.Generic; + + /** A queue that can dequeue and get(i) in O(1) and grow arbitrarily large. + * A linked list is fast at dequeue but slow at get(i). An array is + * the reverse. This is O(1) for both operations. + * + * List grows until you dequeue last element at end of buffer. Then + * it resets to start filling at 0 again. If adds/removes are balanced, the + * buffer will not grow too large. + * + * No iterator stuff as that's not how we'll use it. + */ + public class FastQueue<T> + { + /** <summary>dynamically-sized buffer of elements</summary> */ + protected List<T> _data = new List<T>(); + /** <summary>index of next element to fill</summary> */ + protected int _p = 0; + + /** <summary>Get and remove first element in queue</summary> */ + public virtual T Dequeue() + { + T o = this[0]; + _p++; + // have we hit end of buffer? + if ( _p == _data.Count ) + { + // if so, it's an opportunity to start filling at index 0 again + Clear(); // size goes to 0, but retains memory + } + return o; + } + + public virtual void Enqueue( T o ) + { + _data.Add( o ); + } + + public virtual int Count + { + get + { + return _data.Count - _p; + } + } + + public virtual T Peek() + { + return this[0]; + } + + /** <summary> + * Return element i elements ahead of current element. i==0 gets + * current element. This is not an absolute index into the data list + * since p defines the start of the real list. + * </summary> + */ + public T this[int i] + { + get + { + if ( _p + i >= _data.Count ) + { + throw new System.ArgumentException( "queue index " + ( _p + i ) + " > size " + _data.Count ); + } + return _data[_p + i]; + } + } + + protected virtual void Clear() + { + _p = 0; + _data.Clear(); + } + + /** <summary>Return string of current buffer contents; non-destructive</summary> */ + public override string ToString() + { + System.Text.StringBuilder buf = new System.Text.StringBuilder(); + int n = Count; + for ( int i = 0; i < n; i++ ) + { + buf.Append( this[i] ); + if ( ( i + 1 ) < n ) + buf.Append( " " ); + } + return buf.ToString(); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/LookaheadStream.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/LookaheadStream.cs new file mode 100644 index 0000000..bd8b26c --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Misc/LookaheadStream.cs @@ -0,0 +1,231 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Misc +{ + + /** <summary> + * A lookahead queue that knows how to mark/release locations + * in the buffer for backtracking purposes. Any markers force the FastQueue + * superclass to keep all tokens until no more markers; then can reset + * to avoid growing a huge buffer. + * </summary> + */ + public abstract class LookaheadStream<T> + : FastQueue<T> + where T : class + { + public const int UninitializedEofElementIndex = int.MaxValue; + + /** <summary>Set to buffer index of eof when nextElement returns eof</summary> */ + int _eofElementIndex = UninitializedEofElementIndex; + + /** <summary>Returned by nextElement upon end of stream; we add to buffer also</summary> */ + T _eof = null; + + /** <summary>Track the last mark() call result value for use in rewind().</summary> */ + int _lastMarker; + + /** <summary>tracks how deep mark() calls are nested</summary> */ + int _markDepth; + + public LookaheadStream( T eof ) + { + this._eof = eof; + } + + public T Eof + { + get + { + return _eof; + } + protected set + { + _eof = value; + } + } + + protected override void Clear() + { + _eofElementIndex = UninitializedEofElementIndex; + base.Clear(); + } + + /** <summary> + * Implement nextElement to supply a stream of elements to this + * lookahead buffer. Return eof upon end of the stream we're pulling from. + * </summary> + */ + public abstract T NextElement(); + + /** <summary>Get and remove first element in queue; override FastQueue.remove()</summary> */ + public override T Dequeue() + { + T o = this[0]; + _p++; + // have we hit end of buffer and not backtracking? + if ( _p == _data.Count && _markDepth == 0 ) + { + // if so, it's an opportunity to start filling at index 0 again + Clear(); // size goes to 0, but retains memory + } + return o; + } + + /** <summary>Make sure we have at least one element to remove, even if EOF</summary> */ + public virtual void Consume() + { + Sync( 1 ); + Dequeue(); + } + + /** <summary> + * Make sure we have 'need' elements from current position p. Last valid + * p index is data.size()-1. p+need-1 is the data index 'need' elements + * ahead. If we need 1 element, (p+1-1)==p must be < data.size(). + * </summary> + */ + public virtual void Sync( int need ) + { + int n = ( _p + need - 1 ) - _data.Count + 1; // how many more elements we need? + if ( n > 0 ) + Fill( n ); // out of elements? + } + + /** <summary>add n elements to buffer</summary> */ + public virtual void Fill( int n ) + { + for ( int i = 1; i <= n; i++ ) + { + T o = NextElement(); + if ( o == _eof ) + { + _data.Add( _eof ); + _eofElementIndex = _data.Count - 1; + } + else + _data.Add( o ); + } + } + + /** <summary>Size of entire stream is unknown; we only know buffer size from FastQueue</summary> */ + public override int Count + { + get + { + throw new System.NotSupportedException( "streams are of unknown size" ); + } + } + + public virtual object LT( int k ) + { + if ( k == 0 ) + { + return null; + } + if ( k < 0 ) + { + return LB( -k ); + } + //System.out.print("LT(p="+p+","+k+")="); + if ( ( _p + k - 1 ) >= _eofElementIndex ) + { + // move to super.LT + return _eof; + } + Sync( k ); + return this[k - 1]; + } + + /** <summary>Look backwards k nodes</summary> */ + protected virtual object LB( int k ) + { + if ( k == 0 ) + { + return null; + } + if ( ( _p - k ) < 0 ) + { + return null; + } + return this[-k]; + } + + public virtual object GetCurrentSymbol() + { + return LT( 1 ); + } + + public virtual int Index + { + get + { + return _p; + } + } + + public virtual int Mark() + { + _markDepth++; + _lastMarker = Index; + return _lastMarker; + } + + public virtual void Release( int marker ) + { + _markDepth--; + } + + public virtual void Rewind( int marker ) + { + Seek( marker ); + Release( marker ); + } + + public virtual void Rewind() + { + Seek( _lastMarker ); + } + + /** <summary> + * Seek to a 0-indexed position within data buffer. Can't handle + * case where you seek beyond end of existing buffer. Normally used + * to seek backwards in the buffer. Does not force loading of nodes. + * </summary> + */ + public virtual void Seek( int index ) + { + _p = index; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedNotSetException.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedNotSetException.cs new file mode 100644 index 0000000..1eb2287 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedNotSetException.cs @@ -0,0 +1,53 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + + public class MismatchedNotSetException : MismatchedSetException + { + /** <summary>Used for remote debugger deserialization</summary> */ + public MismatchedNotSetException() + { + } + + public MismatchedNotSetException( BitSet expecting, IIntStream input ) + : base( expecting, input ) + { + } + + public override string ToString() + { + return "MismatchedNotSetException(" + UnexpectedType + "!=" + expecting + ")"; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedRangeException.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedRangeException.cs new file mode 100644 index 0000000..f18824c --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedRangeException.cs @@ -0,0 +1,58 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + + public class MismatchedRangeException : RecognitionException + { + public int a; + public int b; + + /** <summary>Used for remote debugger deserialization</summary> */ + public MismatchedRangeException() + { + } + + public MismatchedRangeException( int a, int b, IIntStream input ) + : base( input ) + { + this.a = a; + this.b = b; + } + + public override string ToString() + { + return "MismatchedNotSetException(" + UnexpectedType + " not in [" + a + "," + b + "])"; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedSetException.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedSetException.cs new file mode 100644 index 0000000..5652497 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedSetException.cs @@ -0,0 +1,56 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + + public class MismatchedSetException : RecognitionException + { + public BitSet expecting; + + /** <summary>Used for remote debugger deserialization</summary> */ + public MismatchedSetException() + { + } + + public MismatchedSetException( BitSet expecting, IIntStream input ) : + base( input ) + { + this.expecting = expecting; + } + + public override string ToString() + { + return "MismatchedSetException(" + UnexpectedType + "!=" + expecting + ")"; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedTokenException.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedTokenException.cs new file mode 100644 index 0000000..cbe3d11 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedTokenException.cs @@ -0,0 +1,62 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + + /** <summary>A mismatched char or Token or tree node</summary> */ + [System.Serializable] + public class MismatchedTokenException : RecognitionException + { + public int expecting = TokenConstants.INVALID_TOKEN_TYPE; + public string[] tokenNames; + + /** <summary>Used for remote debugger deserialization</summary> */ + public MismatchedTokenException() + { + } + + public MismatchedTokenException( int expecting, IIntStream input ) + : base( input ) + { + this.expecting = expecting; + } + + public override string ToString() + { + int unexpectedType = UnexpectedType; + string unexpected = ( tokenNames != null && unexpectedType >= 0 && unexpectedType < tokenNames.Length ) ? tokenNames[unexpectedType] : unexpectedType.ToString(); + string expected = ( tokenNames != null && expecting >= 0 && expecting < tokenNames.Length ) ? tokenNames[expecting] : expecting.ToString(); + return "MismatchedTokenException(" + unexpected + "!=" + expected + ")"; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedTreeNodeException.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedTreeNodeException.cs new file mode 100644 index 0000000..bedfb81 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MismatchedTreeNodeException.cs @@ -0,0 +1,58 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + using ITreeNodeStream = Antlr.Runtime.Tree.ITreeNodeStream; + + /** + */ + public class MismatchedTreeNodeException : RecognitionException + { + public int expecting; + + public MismatchedTreeNodeException() + { + } + + public MismatchedTreeNodeException( int expecting, ITreeNodeStream input ) : + base( input ) + { + this.expecting = expecting; + } + + public override string ToString() + { + return "MismatchedTreeNodeException(" + UnexpectedType + "!=" + expecting + ")"; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MissingTokenException.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MissingTokenException.cs new file mode 100644 index 0000000..dc0d817 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/MissingTokenException.cs @@ -0,0 +1,73 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + + /** <summary> + * We were expecting a token but it's not found. The current token + * is actually what we wanted next. Used for tree node errors too. + * </summary> + */ + public class MissingTokenException : MismatchedTokenException + { + public object inserted; + /** <summary>Used for remote debugger deserialization</summary> */ + public MissingTokenException() + { + } + + public MissingTokenException( int expecting, IIntStream input, object inserted ) : + base( expecting, input ) + { + this.inserted = inserted; + } + + public virtual int GetMissingType() + { + return expecting; + } + + public override string ToString() + { + if ( inserted != null && token != null ) + { + return "MissingTokenException(inserted " + inserted + " at " + token.Text + ")"; + } + if ( token != null ) + { + return "MissingTokenException(at " + token.Text + ")"; + } + return "MissingTokenException"; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/NoViableAltException.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/NoViableAltException.cs new file mode 100644 index 0000000..fb07d58 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/NoViableAltException.cs @@ -0,0 +1,70 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + + public class NoViableAltException : RecognitionException + { + public string grammarDecisionDescription; + public int decisionNumber; + public int stateNumber; + + /** <summary>Used for remote debugger deserialization</summary> */ + public NoViableAltException() + { + } + + public NoViableAltException( string grammarDecisionDescription, + int decisionNumber, + int stateNumber, + IIntStream input ) + : base( input ) + { + this.grammarDecisionDescription = grammarDecisionDescription; + this.decisionNumber = decisionNumber; + this.stateNumber = stateNumber; + } + + public override string ToString() + { + if ( input is ICharStream ) + { + return "NoViableAltException('" + (char)UnexpectedType + "'@[" + grammarDecisionDescription + "])"; + } + else + { + return "NoViableAltException(" + UnexpectedType + "@[" + grammarDecisionDescription + "])"; + } + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Parser.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Parser.cs new file mode 100644 index 0000000..3ff0a4f --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Parser.cs @@ -0,0 +1,148 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + /** <summary> + * A parser for TokenStreams. "parser grammars" result in a subclass + * of this. + * </summary> + */ + public class Parser : BaseRecognizer + { + public ITokenStream input; + + public Parser( ITokenStream input ) + : base() + { + //super(); // highlight that we go to super to set state object + TokenStream = input; + } + + public Parser( ITokenStream input, RecognizerSharedState state ) + : base( state ) + { + //super(state); // share the state object with another parser + TokenStream = input; + } + + public override void Reset() + { + base.Reset(); // reset all recognizer state variables + if ( input != null ) + { + input.Seek( 0 ); // rewind the input + } + } + + protected override object GetCurrentInputSymbol( IIntStream input ) + { + return ( (ITokenStream)input ).LT( 1 ); + } + + protected override object GetMissingSymbol( IIntStream input, + RecognitionException e, + int expectedTokenType, + BitSet follow ) + { + string tokenText = null; + if ( expectedTokenType == TokenConstants.EOF ) + tokenText = "<missing EOF>"; + else + tokenText = "<missing " + GetTokenNames()[expectedTokenType] + ">"; + CommonToken t = new CommonToken( expectedTokenType, tokenText ); + IToken current = ( (ITokenStream)input ).LT( 1 ); + if ( current.Type == TokenConstants.EOF ) + { + current = ( (ITokenStream)input ).LT( -1 ); + } + t.Line = current.Line; + t.CharPositionInLine = current.CharPositionInLine; + t.Channel = DEFAULT_TOKEN_CHANNEL; + return t; + } + + /** <summary>Gets or sets the token stream; resets the parser upon a set.</summary> */ + public virtual ITokenStream TokenStream + { + get + { + return input; + } + set + { + input = null; + Reset(); + input = value; + } + } + + public override string SourceName + { + get + { + return input.SourceName; + } + } + + public virtual void TraceIn( string ruleName, int ruleIndex ) + { + base.TraceIn( ruleName, ruleIndex, input.LT( 1 ) ); + } + + public virtual void TraceOut( string ruleName, int ruleIndex ) + { + base.TraceOut( ruleName, ruleIndex, input.LT( 1 ) ); + } + +#if false + protected bool EvaluatePredicate( System.Action predicate ) + { + state.backtracking++; + int start = input.Mark(); + try + { + predicate(); + } + catch ( RecognitionException re ) + { + System.Console.Error.WriteLine( "impossible: " + re ); + } + bool success = !state.failed; + input.Rewind( start ); + state.backtracking--; + state.failed = false; + return success; + } +#endif + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ParserRuleReturnScope.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ParserRuleReturnScope.cs new file mode 100644 index 0000000..4be95eb --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/ParserRuleReturnScope.cs @@ -0,0 +1,79 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + + /** <summary> + * Rules that return more than a single value must return an object + * containing all the values. Besides the properties defined in + * RuleLabelScope.predefinedRulePropertiesScope there may be user-defined + * return values. This class simply defines the minimum properties that + * are always defined and methods to access the others that might be + * available depending on output option such as template and tree. + * </summary> + * + * <remarks> + * Note text is not an actual property of the return value, it is computed + * from start and stop using the input stream's toString() method. I + * could add a ctor to this so that we can pass in and store the input + * stream, but I'm not sure we want to do that. It would seem to be undefined + * to get the .text property anyway if the rule matches tokens from multiple + * input streams. + * + * I do not use getters for fields of objects that are used simply to + * group values such as this aggregate. The getters/setters are there to + * satisfy the superclass interface. + * </remarks> + */ + public class ParserRuleReturnScope : RuleReturnScope + { + public IToken start; + public IToken stop; + + public override object Start + { + get + { + return start; + } + } + + public override object Stop + { + get + { + return stop; + } + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Properties/AssemblyInfo.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..f5143c7 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Properties/AssemblyInfo.cs @@ -0,0 +1,68 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle( "Antlr3.Runtime" )] +[assembly: AssemblyDescription( "" )] +[assembly: AssemblyConfiguration( "" )] +[assembly: AssemblyCompany( "Pixel Mine, Inc." )] +[assembly: AssemblyProduct( "Antlr3.Runtime" )] +[assembly: AssemblyCopyright( "Copyright © Pixel Mine 2008" )] +[assembly: AssemblyTrademark( "" )] +[assembly: AssemblyCulture( "" )] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible( false )] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid( "7a0b4db7-f127-4cf5-ac2c-e294957efcd6" )] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion( "3.2.17961.0" )] +[assembly: AssemblyFileVersion( "3.2.17961.0" )] diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/RecognitionException.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/RecognitionException.cs new file mode 100644 index 0000000..d32617e --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/RecognitionException.cs @@ -0,0 +1,223 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + using Antlr.Runtime.Tree; + + using Exception = System.Exception; + using NonSerialized = System.NonSerializedAttribute; + + /** <summary>The root of the ANTLR exception hierarchy.</summary> + * + * <remarks> + * To avoid English-only error messages and to generally make things + * as flexible as possible, these exceptions are not created with strings, + * but rather the information necessary to generate an error. Then + * the various reporting methods in Parser and Lexer can be overridden + * to generate a localized error message. For example, MismatchedToken + * exceptions are built with the expected token type. + * So, don't expect getMessage() to return anything. + * + * Note that as of Java 1.4, you can access the stack trace, which means + * that you can compute the complete trace of rules from the start symbol. + * This gives you considerable context information with which to generate + * useful error messages. + * + * ANTLR generates code that throws exceptions upon recognition error and + * also generates code to catch these exceptions in each rule. If you + * want to quit upon first error, you can turn off the automatic error + * handling mechanism using rulecatch action, but you still need to + * override methods mismatch and recoverFromMismatchSet. + * + * In general, the recognition exceptions can track where in a grammar a + * problem occurred and/or what was the expected input. While the parser + * knows its state (such as current input symbol and line info) that + * state can change before the exception is reported so current token index + * is computed and stored at exception time. From this info, you can + * perhaps print an entire line of input not just a single token, for example. + * Better to just say the recognizer had a problem and then let the parser + * figure out a fancy report. + * </remarks> + */ + [System.Serializable] + public class RecognitionException : Exception + { + /** <summary>What input stream did the error occur in?</summary> */ + [NonSerialized] + public IIntStream input; + + /** <summary>What is index of token/char were we looking at when the error occurred?</summary> */ + public int index; + + /** <summary> + * The current Token when an error occurred. Since not all streams + * can retrieve the ith Token, we have to track the Token object. + * For parsers. Even when it's a tree parser, token might be set. + * </summary> + */ + public IToken token; + + /** <summary> + * If this is a tree parser exception, node is set to the node with + * the problem. + * </summary> + */ + public object node; + + /** <summary>The current char when an error occurred. For lexers.</summary> */ + public int c; + + /** <summary> + * Track the line at which the error occurred in case this is + * generated from a lexer. We need to track this since the + * unexpected char doesn't carry the line info. + * </summary> + */ + public int line; + + public int charPositionInLine; + + /** <summary> + * If you are parsing a tree node stream, you will encounter som + * imaginary nodes w/o line/col info. We now search backwards looking + * for most recent token with line/col info, but notify getErrorHeader() + * that info is approximate. + * </summary> + */ + public bool approximateLineInfo; + + /** <summary>Used for remote debugger deserialization</summary> */ + public RecognitionException() + { + } + + public RecognitionException( IIntStream input ) + { + this.input = input; + this.index = input.Index; + if ( input is ITokenStream ) + { + this.token = ( (ITokenStream)input ).LT( 1 ); + this.line = token.Line; + this.charPositionInLine = token.CharPositionInLine; + } + if ( input is ITreeNodeStream ) + { + ExtractInformationFromTreeNodeStream( input ); + } + else if ( input is ICharStream ) + { + this.c = input.LA( 1 ); + this.line = ( (ICharStream)input ).Line; + this.charPositionInLine = ( (ICharStream)input ).CharPositionInLine; + } + else + { + this.c = input.LA( 1 ); + } + } + + protected virtual void ExtractInformationFromTreeNodeStream( IIntStream input ) + { + ITreeNodeStream nodes = (ITreeNodeStream)input; + this.node = nodes.LT( 1 ); + ITreeAdaptor adaptor = nodes.TreeAdaptor; + IToken payload = adaptor.GetToken( node ); + if ( payload != null ) + { + this.token = payload; + if ( payload.Line <= 0 ) + { + // imaginary node; no line/pos info; scan backwards + int i = -1; + object priorNode = nodes.LT( i ); + while ( priorNode != null ) + { + IToken priorPayload = adaptor.GetToken( priorNode ); + if ( priorPayload != null && priorPayload.Line > 0 ) + { + // we found the most recent real line / pos info + this.line = priorPayload.Line; + this.charPositionInLine = priorPayload.CharPositionInLine; + this.approximateLineInfo = true; + break; + } + --i; + priorNode = nodes.LT( i ); + } + } + else + { // node created from real token + this.line = payload.Line; + this.charPositionInLine = payload.CharPositionInLine; + } + } + else if ( this.node is Tree.ITree ) + { + this.line = ( (Tree.ITree)this.node ).Line; + this.charPositionInLine = ( (Tree.ITree)this.node ).CharPositionInLine; + if ( this.node is CommonTree ) + { + this.token = ( (CommonTree)this.node ).token; + } + } + else + { + int type = adaptor.GetType( this.node ); + string text = adaptor.GetText( this.node ); + this.token = new CommonToken( type, text ); + } + } + + /** <summary>Return the token type or char of the unexpected input element</summary> */ + public virtual int UnexpectedType + { + get + { + if ( input is ITokenStream ) + { + return token.Type; + } + + ITreeNodeStream treeNodeStream = input as ITreeNodeStream; + if ( treeNodeStream != null ) + { + ITreeAdaptor adaptor = treeNodeStream.TreeAdaptor; + return adaptor.GetType( node ); + } + + return c; + } + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/RecognizerSharedState.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/RecognizerSharedState.cs new file mode 100644 index 0000000..47d8534 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/RecognizerSharedState.cs @@ -0,0 +1,149 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + using System.Collections.Generic; + + /** <summary> + * The set of fields needed by an abstract recognizer to recognize input + * and recover from errors etc... As a separate state object, it can be + * shared among multiple grammars; e.g., when one grammar imports another. + * </summary> + * + * <remarks> + * These fields are publically visible but the actual state pointer per + * parser is protected. + * </remarks> + */ + public class RecognizerSharedState + { + /** <summary> + * Track the set of token types that can follow any rule invocation. + * Stack grows upwards. When it hits the max, it grows 2x in size + * and keeps going. + * </summary> + */ + public BitSet[] following = new BitSet[BaseRecognizer.INITIAL_FOLLOW_STACK_SIZE]; + public int _fsp = -1; + + /** <summary> + * This is true when we see an error and before having successfully + * matched a token. Prevents generation of more than one error message + * per error. + * </summary> + */ + public bool errorRecovery = false; + + /** <summary> + * The index into the input stream where the last error occurred. + * This is used to prevent infinite loops where an error is found + * but no token is consumed during recovery...another error is found, + * ad naseum. This is a failsafe mechanism to guarantee that at least + * one token/tree node is consumed for two errors. + * </summary> + */ + public int lastErrorIndex = -1; + + /** <summary> + * In lieu of a return value, this indicates that a rule or token + * has failed to match. Reset to false upon valid token match. + * </summary> + */ + public bool failed = false; + + /** <summary>Did the recognizer encounter a syntax error? Track how many.</summary> */ + public int syntaxErrors = 0; + + /** <summary> + * If 0, no backtracking is going on. Safe to exec actions etc... + * If >0 then it's the level of backtracking. + * </summary> + */ + public int backtracking = 0; + + /** <summary> + * An array[size num rules] of Map<Integer,Integer> that tracks + * the stop token index for each rule. ruleMemo[ruleIndex] is + * the memoization table for ruleIndex. For key ruleStartIndex, you + * get back the stop token for associated rule or MEMO_RULE_FAILED. + * </summary> + * + * <remarks>This is only used if rule memoization is on (which it is by default).</remarks> + */ + public IDictionary<int, int>[] ruleMemo; + + + // LEXER FIELDS (must be in same state object to avoid casting + // constantly in generated code and Lexer object) :( + + + /** <summary> + * The goal of all lexer rules/methods is to create a token object. + * This is an instance variable as multiple rules may collaborate to + * create a single token. nextToken will return this object after + * matching lexer rule(s). If you subclass to allow multiple token + * emissions, then set this to the last token to be matched or + * something nonnull so that the auto token emit mechanism will not + * emit another token. + * </summary> + */ + public IToken token; + + /** <summary> + * What character index in the stream did the current token start at? + * Needed, for example, to get the text for current token. Set at + * the start of nextToken. + * </summary> + */ + public int tokenStartCharIndex = -1; + + /** <summary>The line on which the first character of the token resides</summary> */ + public int tokenStartLine; + + /** <summary>The character position of first character within the line</summary> */ + public int tokenStartCharPositionInLine; + + /** <summary>The channel number for the current token</summary> */ + public int channel; + + /** <summary>The token type for the current token</summary> */ + public int type; + + /** <summary> + * You can set the text for the current token to override what is in + * the input char buffer. Use setText() or can set this instance var. + * </summary> + */ + public string text; + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/RuleReturnScope.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/RuleReturnScope.cs new file mode 100644 index 0000000..e0ec73c --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/RuleReturnScope.cs @@ -0,0 +1,78 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + /** <summary>Rules can return start/stop info as well as possible trees and templates</summary> */ + public class RuleReturnScope + { + /** <summary>Return the start token or tree</summary> */ + public virtual object Start + { + get + { + return null; + } + } + + /** <summary>Return the stop token or tree</summary> */ + public virtual object Stop + { + get + { + return null; + } + } + + /** <summary>Has a value potentially if output=AST;</summary> */ + public virtual object Tree + { + get + { + return null; + } + } + + /** <summary> + * Has a value potentially if output=template; Don't use StringTemplate + * type as it then causes a dependency with ST lib. + * </summary> + */ + public virtual object Template + { + get + { + return null; + } + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/TokenConstants.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/TokenConstants.cs new file mode 100644 index 0000000..de5f93c --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/TokenConstants.cs @@ -0,0 +1,74 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + public static class TokenConstants + { + public const int EOR_TOKEN_TYPE = 1; + + /** <summary>imaginary tree navigation type; traverse "get child" link</summary> */ + public const int DOWN = 2; + /** <summary>imaginary tree navigation type; finish with a child list</summary> */ + public const int UP = 3; + + public const int MIN_TOKEN_TYPE = UP + 1; + + public const int EOF = CharStreamConstants.EOF; + public static readonly IToken EOF_TOKEN = new CommonToken( EOF ); + + public const int INVALID_TOKEN_TYPE = 0; + public static readonly IToken INVALID_TOKEN = new CommonToken( INVALID_TOKEN_TYPE ); + + /** <summary> + * In an action, a lexer rule can set token to this SKIP_TOKEN and ANTLR + * will avoid creating a token for this symbol and try to fetch another. + * </summary> + */ + public static readonly IToken SKIP_TOKEN = new CommonToken( INVALID_TOKEN_TYPE ); + + /** <summary> + * All tokens go to the parser (unless skip() is called in that rule) + * on a particular "channel". The parser tunes to a particular channel + * so that whitespace etc... can go to the parser on a "hidden" channel. + * </summary> + */ + public const int DEFAULT_CHANNEL = 0; + + /** <summary> + * Anything on different channel than DEFAULT_CHANNEL is not parsed + * by parser. + * </summary> + */ + public const int HIDDEN_CHANNEL = 99; + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/TokenRewriteStream.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/TokenRewriteStream.cs new file mode 100644 index 0000000..122af80 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/TokenRewriteStream.cs @@ -0,0 +1,696 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + using System.Collections.Generic; + + using ArgumentException = System.ArgumentException; + using Exception = System.Exception; + using StringBuilder = System.Text.StringBuilder; + using Type = System.Type; + + /** Useful for dumping out the input stream after doing some + * augmentation or other manipulations. + * + * You can insert stuff, replace, and delete chunks. Note that the + * operations are done lazily--only if you convert the buffer to a + * String. This is very efficient because you are not moving data around + * all the time. As the buffer of tokens is converted to strings, the + * toString() method(s) check to see if there is an operation at the + * current index. If so, the operation is done and then normal String + * rendering continues on the buffer. This is like having multiple Turing + * machine instruction streams (programs) operating on a single input tape. :) + * + * Since the operations are done lazily at toString-time, operations do not + * screw up the token index values. That is, an insert operation at token + * index i does not change the index values for tokens i+1..n-1. + * + * Because operations never actually alter the buffer, you may always get + * the original token stream back without undoing anything. Since + * the instructions are queued up, you can easily simulate transactions and + * roll back any changes if there is an error just by removing instructions. + * For example, + * + * CharStream input = new ANTLRFileStream("input"); + * TLexer lex = new TLexer(input); + * TokenRewriteStream tokens = new TokenRewriteStream(lex); + * T parser = new T(tokens); + * parser.startRule(); + * + * Then in the rules, you can execute + * Token t,u; + * ... + * input.insertAfter(t, "text to put after t");} + * input.insertAfter(u, "text after u");} + * System.out.println(tokens.toString()); + * + * Actually, you have to cast the 'input' to a TokenRewriteStream. :( + * + * You can also have multiple "instruction streams" and get multiple + * rewrites from a single pass over the input. Just name the instruction + * streams and use that name again when printing the buffer. This could be + * useful for generating a C file and also its header file--all from the + * same buffer: + * + * tokens.insertAfter("pass1", t, "text to put after t");} + * tokens.insertAfter("pass2", u, "text after u");} + * System.out.println(tokens.toString("pass1")); + * System.out.println(tokens.toString("pass2")); + * + * If you don't use named rewrite streams, a "default" stream is used as + * the first example shows. + */ + [System.Serializable] + public class TokenRewriteStream : CommonTokenStream + { + public const string DEFAULT_PROGRAM_NAME = "default"; + public const int PROGRAM_INIT_SIZE = 100; + public const int MIN_TOKEN_INDEX = 0; + + // Define the rewrite operation hierarchy + + protected class RewriteOperation + { + /** <summary>What index into rewrites List are we?</summary> */ + public int instructionIndex; + /** <summary>Token buffer index.</summary> */ + public int index; + public object text; + // outer + protected TokenRewriteStream stream; + + protected RewriteOperation( TokenRewriteStream stream, int index, object text ) + { + this.index = index; + this.text = text; + this.stream = stream; + } + /** <summary> + * Execute the rewrite operation by possibly adding to the buffer. + * Return the index of the next token to operate on. + * </summary> + */ + public virtual int Execute( StringBuilder buf ) + { + return index; + } + public override string ToString() + { + string opName = this.GetType().Name; + int index = opName.IndexOf( '$' ); + opName = opName.Substring( index + 1 ); + return "<" + opName + "@" + this.index + ":\"" + text + "\">"; + } + } + + class InsertBeforeOp : RewriteOperation + { + public InsertBeforeOp( TokenRewriteStream stream, int index, object text ) : + base( stream, index, text ) + { + } + public override int Execute( StringBuilder buf ) + { + buf.Append( text ); + buf.Append( ( (IToken)stream.tokens[index] ).Text ); + return index + 1; + } + } + + /** <summary> + * I'm going to try replacing range from x..y with (y-x)+1 ReplaceOp + * instructions. + * </summary> + */ + class ReplaceOp : RewriteOperation + { + public int lastIndex; + public ReplaceOp( TokenRewriteStream stream, int from, int to, object text ) + : base( stream, from, text ) + { + lastIndex = to; + } + public override int Execute( StringBuilder buf ) + { + if ( text != null ) + { + buf.Append( text ); + } + return lastIndex + 1; + } + public override string ToString() + { + return "<ReplaceOp@" + index + ".." + lastIndex + ":\"" + text + "\">"; + } + } + + class DeleteOp : ReplaceOp + { + public DeleteOp( TokenRewriteStream stream, int from, int to ) : + base( stream, from, to, null ) + { + } + public override string ToString() + { + return "<DeleteOp@" + index + ".." + lastIndex + ">"; + } + } + + /** <summary> + * You may have multiple, named streams of rewrite operations. + * I'm calling these things "programs." + * Maps String (name) -> rewrite (List) + * </summary> + */ + protected IDictionary<string, IList<RewriteOperation>> programs = null; + + /** <summary>Map String (program name) -> Integer index</summary> */ + protected IDictionary<string, int> lastRewriteTokenIndexes = null; + + public TokenRewriteStream() + { + Init(); + } + + protected void Init() + { + programs = new Dictionary<string, IList<RewriteOperation>>(); + programs[DEFAULT_PROGRAM_NAME] = new List<RewriteOperation>( PROGRAM_INIT_SIZE ); + lastRewriteTokenIndexes = new Dictionary<string, int>(); + } + + public TokenRewriteStream( ITokenSource tokenSource ) + : base( tokenSource ) + { + Init(); + } + + public TokenRewriteStream( ITokenSource tokenSource, int channel ) + : base( tokenSource, channel ) + { + Init(); + } + + public virtual void Rollback( int instructionIndex ) + { + Rollback( DEFAULT_PROGRAM_NAME, instructionIndex ); + } + + /** <summary> + * Rollback the instruction stream for a program so that + * the indicated instruction (via instructionIndex) is no + * longer in the stream. UNTESTED! + * </summary> + */ + public virtual void Rollback( string programName, int instructionIndex ) + { + IList<RewriteOperation> @is; + if ( programs.TryGetValue( programName, out @is ) && @is != null ) + { + List<RewriteOperation> sublist = new List<RewriteOperation>(); + for ( int i = MIN_TOKEN_INDEX; i <= instructionIndex; i++ ) + sublist.Add( @is[i] ); + + programs[programName] = sublist; + } + } + + public virtual void DeleteProgram() + { + DeleteProgram( DEFAULT_PROGRAM_NAME ); + } + + /** <summary>Reset the program so that no instructions exist</summary> */ + public virtual void DeleteProgram( string programName ) + { + Rollback( programName, MIN_TOKEN_INDEX ); + } + + public virtual void InsertAfter( IToken t, object text ) + { + InsertAfter( DEFAULT_PROGRAM_NAME, t, text ); + } + + public virtual void InsertAfter( int index, object text ) + { + InsertAfter( DEFAULT_PROGRAM_NAME, index, text ); + } + + public virtual void InsertAfter( string programName, IToken t, object text ) + { + InsertAfter( programName, t.TokenIndex, text ); + } + + public virtual void InsertAfter( string programName, int index, object text ) + { + // to insert after, just insert before next index (even if past end) + InsertBefore( programName, index + 1, text ); + //addToSortedRewriteList(programName, new InsertAfterOp(index,text)); + } + + public virtual void InsertBefore( IToken t, object text ) + { + InsertBefore( DEFAULT_PROGRAM_NAME, t, text ); + } + + public virtual void InsertBefore( int index, object text ) + { + InsertBefore( DEFAULT_PROGRAM_NAME, index, text ); + } + + public virtual void InsertBefore( string programName, IToken t, object text ) + { + InsertBefore( programName, t.TokenIndex, text ); + } + + public virtual void InsertBefore( string programName, int index, object text ) + { + //addToSortedRewriteList(programName, new InsertBeforeOp(index,text)); + RewriteOperation op = new InsertBeforeOp( this, index, text ); + IList<RewriteOperation> rewrites = GetProgram( programName ); + op.instructionIndex = rewrites.Count; + rewrites.Add( op ); + } + + public virtual void Replace( int index, object text ) + { + Replace( DEFAULT_PROGRAM_NAME, index, index, text ); + } + + public virtual void Replace( int from, int to, object text ) + { + Replace( DEFAULT_PROGRAM_NAME, from, to, text ); + } + + public virtual void Replace( IToken indexT, object text ) + { + Replace( DEFAULT_PROGRAM_NAME, indexT, indexT, text ); + } + + public virtual void Replace( IToken from, IToken to, object text ) + { + Replace( DEFAULT_PROGRAM_NAME, from, to, text ); + } + + public virtual void Replace( string programName, int from, int to, object text ) + { + if ( from > to || from < 0 || to < 0 || to >= tokens.Count ) + { + throw new ArgumentException( "replace: range invalid: " + from + ".." + to + "(size=" + tokens.Count + ")" ); + } + RewriteOperation op = new ReplaceOp( this, from, to, text ); + IList<RewriteOperation> rewrites = GetProgram( programName ); + op.instructionIndex = rewrites.Count; + rewrites.Add( op ); + } + + public virtual void Replace( string programName, IToken from, IToken to, object text ) + { + Replace( programName, + from.TokenIndex, + to.TokenIndex, + text ); + } + + public virtual void Delete( int index ) + { + Delete( DEFAULT_PROGRAM_NAME, index, index ); + } + + public virtual void Delete( int from, int to ) + { + Delete( DEFAULT_PROGRAM_NAME, from, to ); + } + + public virtual void Delete( IToken indexT ) + { + Delete( DEFAULT_PROGRAM_NAME, indexT, indexT ); + } + + public virtual void Delete( IToken from, IToken to ) + { + Delete( DEFAULT_PROGRAM_NAME, from, to ); + } + + public virtual void Delete( string programName, int from, int to ) + { + Replace( programName, from, to, null ); + } + + public virtual void Delete( string programName, IToken from, IToken to ) + { + Replace( programName, from, to, null ); + } + + public virtual int GetLastRewriteTokenIndex() + { + return GetLastRewriteTokenIndex( DEFAULT_PROGRAM_NAME ); + } + + protected virtual int GetLastRewriteTokenIndex( string programName ) + { + int value; + if ( lastRewriteTokenIndexes.TryGetValue( programName, out value ) ) + return value; + + return -1; + } + + protected virtual void SetLastRewriteTokenIndex( string programName, int i ) + { + lastRewriteTokenIndexes[programName] = i; + } + + protected virtual IList<RewriteOperation> GetProgram( string name ) + { + IList<RewriteOperation> @is; + if ( !programs.TryGetValue( name, out @is ) || @is == null ) + { + @is = InitializeProgram( name ); + } + return @is; + } + + private IList<RewriteOperation> InitializeProgram( string name ) + { + IList<RewriteOperation> @is = new List<RewriteOperation>( PROGRAM_INIT_SIZE ); + programs[name] = @is; + return @is; + } + + public virtual string ToOriginalString() + { + return ToOriginalString( MIN_TOKEN_INDEX, Size() - 1 ); + } + + public virtual string ToOriginalString( int start, int end ) + { + StringBuilder buf = new StringBuilder(); + for ( int i = start; i >= MIN_TOKEN_INDEX && i <= end && i < tokens.Count; i++ ) + { + buf.Append( Get( i ).Text ); + } + return buf.ToString(); + } + + public override string ToString() + { + return ToString( MIN_TOKEN_INDEX, Size() - 1 ); + } + + public virtual string ToString( string programName ) + { + return ToString( programName, MIN_TOKEN_INDEX, Size() - 1 ); + } + + public override string ToString( int start, int end ) + { + return ToString( DEFAULT_PROGRAM_NAME, start, end ); + } + + public virtual string ToString( string programName, int start, int end ) + { + IList<RewriteOperation> rewrites; + if ( !programs.TryGetValue( programName, out rewrites ) ) + rewrites = null; + + // ensure start/end are in range + if ( end > tokens.Count - 1 ) + end = tokens.Count - 1; + if ( start < 0 ) + start = 0; + + if ( rewrites == null || rewrites.Count == 0 ) + { + return ToOriginalString( start, end ); // no instructions to execute + } + StringBuilder buf = new StringBuilder(); + + // First, optimize instruction stream + IDictionary<int, RewriteOperation> indexToOp = ReduceToSingleOperationPerIndex( rewrites ); + + // Walk buffer, executing instructions and emitting tokens + int i = start; + while ( i <= end && i < tokens.Count ) + { + RewriteOperation op; + bool exists = indexToOp.TryGetValue( i, out op ); + + if ( exists ) + { + // remove so any left have index size-1 + indexToOp.Remove( i ); + } + + if ( !exists || op == null ) + { + IToken t = tokens[i]; + // no operation at that index, just dump token + buf.Append( t.Text ); + i++; // move to next token + } + else + { + i = op.Execute( buf ); // execute operation and skip + } + } + + // include stuff after end if it's last index in buffer + // So, if they did an insertAfter(lastValidIndex, "foo"), include + // foo if end==lastValidIndex. + if ( end == tokens.Count - 1 ) + { + // Scan any remaining operations after last token + // should be included (they will be inserts). + foreach ( RewriteOperation op in indexToOp.Values ) + { + if ( op.index >= tokens.Count - 1 ) + buf.Append( op.text ); + } + } + return buf.ToString(); + } + + /** We need to combine operations and report invalid operations (like + * overlapping replaces that are not completed nested). Inserts to + * same index need to be combined etc... Here are the cases: + * + * I.i.u I.j.v leave alone, nonoverlapping + * I.i.u I.i.v combine: Iivu + * + * R.i-j.u R.x-y.v | i-j in x-y delete first R + * R.i-j.u R.i-j.v delete first R + * R.i-j.u R.x-y.v | x-y in i-j ERROR + * R.i-j.u R.x-y.v | boundaries overlap ERROR + * + * I.i.u R.x-y.v | i in x-y delete I + * I.i.u R.x-y.v | i not in x-y leave alone, nonoverlapping + * R.x-y.v I.i.u | i in x-y ERROR + * R.x-y.v I.x.u R.x-y.uv (combine, delete I) + * R.x-y.v I.i.u | i not in x-y leave alone, nonoverlapping + * + * I.i.u = insert u before op @ index i + * R.x-y.u = replace x-y indexed tokens with u + * + * First we need to examine replaces. For any replace op: + * + * 1. wipe out any insertions before op within that range. + * 2. Drop any replace op before that is contained completely within + * that range. + * 3. Throw exception upon boundary overlap with any previous replace. + * + * Then we can deal with inserts: + * + * 1. for any inserts to same index, combine even if not adjacent. + * 2. for any prior replace with same left boundary, combine this + * insert with replace and delete this replace. + * 3. throw exception if index in same range as previous replace + * + * Don't actually delete; make op null in list. Easier to walk list. + * Later we can throw as we add to index -> op map. + * + * Note that I.2 R.2-2 will wipe out I.2 even though, technically, the + * inserted stuff would be before the replace range. But, if you + * add tokens in front of a method body '{' and then delete the method + * body, I think the stuff before the '{' you added should disappear too. + * + * Return a map from token index to operation. + */ + protected virtual IDictionary<int, RewriteOperation> ReduceToSingleOperationPerIndex( IList<RewriteOperation> rewrites ) + { + //System.out.println("rewrites="+rewrites); + + // WALK REPLACES + for ( int i = 0; i < rewrites.Count; i++ ) + { + RewriteOperation op = rewrites[i]; + if ( op == null ) + continue; + if ( !( op is ReplaceOp ) ) + continue; + ReplaceOp rop = (ReplaceOp)rewrites[i]; + // Wipe prior inserts within range + var inserts = GetKindOfOps( rewrites, typeof( InsertBeforeOp ), i ); + for ( int j = 0; j < inserts.Count; j++ ) + { + InsertBeforeOp iop = (InsertBeforeOp)inserts[j]; + if ( iop.index >= rop.index && iop.index <= rop.lastIndex ) + { + // delete insert as it's a no-op. + rewrites[iop.instructionIndex] = null; + } + } + // Drop any prior replaces contained within + var prevReplaces = GetKindOfOps( rewrites, typeof( ReplaceOp ), i ); + for ( int j = 0; j < prevReplaces.Count; j++ ) + { + ReplaceOp prevRop = (ReplaceOp)prevReplaces[j]; + if ( prevRop.index >= rop.index && prevRop.lastIndex <= rop.lastIndex ) + { + // delete replace as it's a no-op. + rewrites[prevRop.instructionIndex] = null; + continue; + } + // throw exception unless disjoint or identical + bool disjoint = + prevRop.lastIndex < rop.index || prevRop.index > rop.lastIndex; + bool same = + prevRop.index == rop.index && prevRop.lastIndex == rop.lastIndex; + if ( !disjoint && !same ) + { + throw new ArgumentException( "replace op boundaries of " + rop + + " overlap with previous " + prevRop ); + } + } + } + + // WALK INSERTS + for ( int i = 0; i < rewrites.Count; i++ ) + { + RewriteOperation op = (RewriteOperation)rewrites[i]; + if ( op == null ) + continue; + if ( !( op is InsertBeforeOp ) ) + continue; + InsertBeforeOp iop = (InsertBeforeOp)rewrites[i]; + // combine current insert with prior if any at same index + var prevInserts = GetKindOfOps( rewrites, typeof( InsertBeforeOp ), i ); + for ( int j = 0; j < prevInserts.Count; j++ ) + { + InsertBeforeOp prevIop = (InsertBeforeOp)prevInserts[j]; + if ( prevIop.index == iop.index ) + { // combine objects + // convert to strings...we're in process of toString'ing + // whole token buffer so no lazy eval issue with any templates + iop.text = CatOpText( iop.text, prevIop.text ); + // delete redundant prior insert + rewrites[prevIop.instructionIndex] = null; + } + } + // look for replaces where iop.index is in range; error + var prevReplaces = GetKindOfOps( rewrites, typeof( ReplaceOp ), i ); + for ( int j = 0; j < prevReplaces.Count; j++ ) + { + ReplaceOp rop = (ReplaceOp)prevReplaces[j]; + if ( iop.index == rop.index ) + { + rop.text = CatOpText( iop.text, rop.text ); + rewrites[i] = null; // delete current insert + continue; + } + if ( iop.index >= rop.index && iop.index <= rop.lastIndex ) + { + throw new ArgumentException( "insert op " + iop + + " within boundaries of previous " + rop ); + } + } + } + // System.out.println("rewrites after="+rewrites); + IDictionary<int, RewriteOperation> m = new Dictionary<int, RewriteOperation>(); + for ( int i = 0; i < rewrites.Count; i++ ) + { + RewriteOperation op = (RewriteOperation)rewrites[i]; + if ( op == null ) + continue; // ignore deleted ops + + RewriteOperation existing; + if ( m.TryGetValue( op.index, out existing ) && existing != null ) + { + throw new Exception( "should only be one op per index" ); + } + m[op.index] = op; + } + //System.out.println("index to op: "+m); + return m; + } + + protected virtual string CatOpText( object a, object b ) + { + return string.Concat( a, b ); + } + protected virtual IList<RewriteOperation> GetKindOfOps( IList<RewriteOperation> rewrites, Type kind ) + { + return GetKindOfOps( rewrites, kind, rewrites.Count ); + } + + /** <summary>Get all operations before an index of a particular kind</summary> */ + protected virtual IList<RewriteOperation> GetKindOfOps( IList<RewriteOperation> rewrites, Type kind, int before ) + { + IList<RewriteOperation> ops = new List<RewriteOperation>(); + for ( int i = 0; i < before && i < rewrites.Count; i++ ) + { + RewriteOperation op = rewrites[i]; + if ( op == null ) + continue; // ignore deleted + if ( op.GetType() == kind ) + ops.Add( op ); + } + return ops; + } + + public virtual string ToDebugString() + { + return ToDebugString( MIN_TOKEN_INDEX, Size() - 1 ); + } + + public virtual string ToDebugString( int start, int end ) + { + StringBuilder buf = new StringBuilder(); + for ( int i = start; i >= MIN_TOKEN_INDEX && i <= end && i < tokens.Count; i++ ) + { + buf.Append( Get( i ) ); + } + return buf.ToString(); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BaseTree.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BaseTree.cs new file mode 100644 index 0000000..8a51a11 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BaseTree.cs @@ -0,0 +1,509 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + using System; + using System.Collections.Generic; + + using StringBuilder = System.Text.StringBuilder; + + /** <summary> + * A generic tree implementation with no payload. You must subclass to + * actually have any user data. ANTLR v3 uses a list of children approach + * instead of the child-sibling approach in v2. A flat tree (a list) is + * an empty node whose children represent the list. An empty, but + * non-null node is called "nil". + * </summary> + */ + [System.Serializable] + public abstract class BaseTree : ITree + { + protected List<ITree> children; + + public BaseTree() + { + } + + /** <summary> + * Create a new node from an existing node does nothing for BaseTree + * as there are no fields other than the children list, which cannot + * be copied as the children are not considered part of this node. + * </summary> + */ + public BaseTree( ITree node ) + { + } + + public virtual IList<ITree> Children + { + get + { + return children; + } + } + + #region ITree Members + + public virtual int ChildCount + { + get + { + if ( children == null ) + return 0; + + return children.Count; + } + } + + /** <summary>BaseTree doesn't track parent pointers.</summary> */ + public virtual ITree Parent + { + get + { + return null; + } + set + { + } + } + + /** <summary>BaseTree doesn't track child indexes.</summary> */ + public virtual int ChildIndex + { + get + { + return 0; + } + set + { + } + } + + public virtual bool IsNil + { + get + { + return false; + } + } + + public abstract int TokenStartIndex + { + get; + set; + } + + public abstract int TokenStopIndex + { + get; + set; + } + + public abstract int Type + { + get; + set; + } + + public abstract string Text + { + get; + set; + } + + public virtual int Line + { + get; + set; + } + + public virtual int CharPositionInLine + { + get; + set; + } + + #endregion + + public virtual ITree GetChild( int i ) + { + if ( children == null || i >= children.Count ) + return null; + + return children[i]; + } + + /** <summary> + * Get the children internal List; note that if you directly mess with + * the list, do so at your own risk. + * </summary> + */ + [Obsolete] + public IList<ITree> GetChildren() + { + return Children; + } + + public virtual ITree GetFirstChildWithType( int type ) + { + foreach ( ITree child in children ) + { + if ( child.Type == type ) + return child; + } + + return null; + } + + /** <summary>Add t as child of this node.</summary> + * + * <remarks> + * Warning: if t has no children, but child does + * and child isNil then this routine moves children to t via + * t.children = child.children; i.e., without copying the array. + * </remarks> + */ + public virtual void AddChild( ITree t ) + { + //System.out.println("add child "+t.toStringTree()+" "+this.toStringTree()); + //System.out.println("existing children: "+children); + if ( t == null ) + { + return; // do nothing upon addChild(null) + } + if ( t.IsNil ) + { + // t is an empty node possibly with children + BaseTree childTree = t as BaseTree; + if ( childTree != null && this.children != null && this.children == childTree.children ) + { + throw new Exception( "attempt to add child list to itself" ); + } + // just add all of childTree's children to this + if ( t.ChildCount > 0 ) + { + if ( this.children != null || childTree == null ) + { + if ( this.children == null ) + this.children = CreateChildrenList(); + + // must copy, this has children already + int n = t.ChildCount; + for ( int i = 0; i < n; i++ ) + { + ITree c = t.GetChild( i ); + this.children.Add( c ); + // handle double-link stuff for each child of nil root + c.Parent = this; + c.ChildIndex = children.Count - 1; + } + } + else + { + // no children for this but t is a BaseTree with children; + // just set pointer call general freshener routine + this.children = childTree.children; + this.FreshenParentAndChildIndexes(); + } + } + } + else + { + // child is not nil (don't care about children) + if ( children == null ) + { + children = CreateChildrenList(); // create children list on demand + } + children.Add( t ); + t.Parent = this; + t.ChildIndex = children.Count - 1; + } + // System.out.println("now children are: "+children); + } + + /** <summary>Add all elements of kids list as children of this node</summary> */ + public virtual void AddChildren( IEnumerable<ITree> kids ) + { + foreach ( ITree t in kids ) + AddChild( t ); + } + + public virtual void SetChild( int i, ITree t ) + { + if ( t == null ) + { + return; + } + if ( t.IsNil ) + { + throw new ArgumentException( "Can't set single child to a list" ); + } + if ( children == null ) + { + children = CreateChildrenList(); + } + children[i] = t; + t.Parent = this; + t.ChildIndex = i; + } + + public virtual object DeleteChild( int i ) + { + if ( children == null ) + return null; + + ITree killed = children[i]; + children.RemoveAt( i ); + // walk rest and decrement their child indexes + this.FreshenParentAndChildIndexes( i ); + return killed; + } + + /** <summary> + * Delete children from start to stop and replace with t even if t is + * a list (nil-root tree). num of children can increase or decrease. + * For huge child lists, inserting children can force walking rest of + * children to set their childindex; could be slow. + * </summary> + */ + public virtual void ReplaceChildren( int startChildIndex, int stopChildIndex, object t ) + { + /* + System.out.println("replaceChildren "+startChildIndex+", "+stopChildIndex+ + " with "+((BaseTree)t).toStringTree()); + System.out.println("in="+toStringTree()); + */ + if ( children == null ) + { + throw new ArgumentException( "indexes invalid; no children in list" ); + } + int replacingHowMany = stopChildIndex - startChildIndex + 1; + int replacingWithHowMany; + ITree newTree = (ITree)t; + List<ITree> newChildren = null; + // normalize to a list of children to add: newChildren + if ( newTree.IsNil ) + { + BaseTree baseTree = newTree as BaseTree; + if ( baseTree != null ) + { + newChildren = baseTree.children; + } + else + { + newChildren = CreateChildrenList(); + int n = newTree.ChildCount; + for ( int i = 0; i < n; i++ ) + newChildren.Add( newTree.GetChild( i ) ); + } + } + else + { + newChildren = new List<ITree>( 1 ); + newChildren.Add( newTree ); + } + replacingWithHowMany = newChildren.Count; + int numNewChildren = newChildren.Count; + int delta = replacingHowMany - replacingWithHowMany; + // if same number of nodes, do direct replace + if ( delta == 0 ) + { + int j = 0; // index into new children + for ( int i = startChildIndex; i <= stopChildIndex; i++ ) + { + ITree child = newChildren[j]; + children[i] = child; + child.Parent = this; + child.ChildIndex = i; + j++; + } + } + else if ( delta > 0 ) + { + // fewer new nodes than there were + // set children and then delete extra + for ( int j = 0; j < numNewChildren; j++ ) + { + children[startChildIndex + j] = newChildren[j]; + } + int indexToDelete = startChildIndex + numNewChildren; + for ( int c = indexToDelete; c <= stopChildIndex; c++ ) + { + // delete same index, shifting everybody down each time + children.RemoveAt( indexToDelete ); + } + FreshenParentAndChildIndexes( startChildIndex ); + } + else + { + // more new nodes than were there before + // fill in as many children as we can (replacingHowMany) w/o moving data + for ( int j = 0; j < replacingHowMany; j++ ) + { + children[startChildIndex + j] = newChildren[j]; + } + int numToInsert = replacingWithHowMany - replacingHowMany; + for ( int j = replacingHowMany; j < replacingWithHowMany; j++ ) + { + children.Insert( startChildIndex + j, newChildren[j] ); + } + FreshenParentAndChildIndexes( startChildIndex ); + } + //System.out.println("out="+toStringTree()); + } + + /** <summary>Override in a subclass to change the impl of children list</summary> */ + protected virtual List<ITree> CreateChildrenList() + { + return new List<ITree>(); + } + + /** <summary>Set the parent and child index values for all child of t</summary> */ + public virtual void FreshenParentAndChildIndexes() + { + FreshenParentAndChildIndexes( 0 ); + } + + public virtual void FreshenParentAndChildIndexes( int offset ) + { + int n = ChildCount; + for ( int c = offset; c < n; c++ ) + { + ITree child = GetChild( c ); + child.ChildIndex = c; + child.Parent = this; + } + } + + public virtual void SanityCheckParentAndChildIndexes() + { + SanityCheckParentAndChildIndexes( null, -1 ); + } + + public virtual void SanityCheckParentAndChildIndexes( ITree parent, int i ) + { + if ( parent != this.Parent ) + { + throw new InvalidOperationException( "parents don't match; expected " + parent + " found " + this.Parent ); + } + if ( i != this.ChildIndex ) + { + throw new InvalidOperationException( "child indexes don't match; expected " + i + " found " + this.ChildIndex ); + } + int n = this.ChildCount; + for ( int c = 0; c < n; c++ ) + { + BaseTree child = (BaseTree)this.GetChild( c ); + child.SanityCheckParentAndChildIndexes( this, c ); + } + } + + /** <summary>Walk upwards looking for ancestor with this token type.</summary> */ + public virtual bool HasAncestor( int ttype ) + { + return GetAncestor( ttype ) != null; + } + + /** <summary>Walk upwards and get first ancestor with this token type.</summary> */ + public virtual ITree GetAncestor( int ttype ) + { + ITree t = this; + t = t.Parent; + while ( t != null ) + { + if ( t.Type == ttype ) + return t; + t = t.Parent; + } + return null; + } + + /** <summary> + * Return a list of all ancestors of this node. The first node of + * list is the root and the last is the parent of this node. + * </summary> + */ + public virtual IList<ITree> GetAncestors() + { + if ( Parent == null ) + return null; + + List<ITree> ancestors = new List<ITree>(); + ITree t = this; + t = t.Parent; + while ( t != null ) + { + ancestors.Insert( 0, t ); // insert at start + t = t.Parent; + } + return ancestors; + } + + /** <summary>Print out a whole tree not just a node</summary> */ + public virtual string ToStringTree() + { + if ( children == null || children.Count == 0 ) + { + return this.ToString(); + } + StringBuilder buf = new StringBuilder(); + if ( !IsNil ) + { + buf.Append( "(" ); + buf.Append( this.ToString() ); + buf.Append( ' ' ); + } + for ( int i = 0; children != null && i < children.Count; i++ ) + { + ITree t = children[i]; + if ( i > 0 ) + { + buf.Append( ' ' ); + } + buf.Append( t.ToStringTree() ); + } + if ( !IsNil ) + { + buf.Append( ")" ); + } + return buf.ToString(); + } + + /** <summary>Override to say how a node (not a tree) should look as text</summary> */ + public override abstract string ToString(); + + #region Tree Members + public abstract ITree DupNode(); + #endregion + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BaseTreeAdaptor.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BaseTreeAdaptor.cs new file mode 100644 index 0000000..a0cace3 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BaseTreeAdaptor.cs @@ -0,0 +1,348 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + using System.Collections.Generic; + + using Exception = System.Exception; + using IDictionary = System.Collections.IDictionary; + using NotSupportedException = System.NotSupportedException; + + /** <summary>A TreeAdaptor that works with any Tree implementation.</summary> */ + public abstract class BaseTreeAdaptor : ITreeAdaptor + { + /** <summary> + * System.identityHashCode() is not always unique; we have to + * track ourselves. That's ok, it's only for debugging, though it's + * expensive: we have to create a hashtable with all tree nodes in it. + * </summary> + */ + protected IDictionary<object, int> treeToUniqueIDMap; + protected int uniqueNodeID = 1; + + public virtual object Nil() + { + return Create( null ); + } + + /** <summary> + * Create tree node that holds the start and stop tokens associated + * with an error. + * </summary> + * + * <remarks> + * If you specify your own kind of tree nodes, you will likely have to + * override this method. CommonTree returns Token.INVALID_TOKEN_TYPE + * if no token payload but you might have to set token type for diff + * node type. + * + * You don't have to subclass CommonErrorNode; you will likely need to + * subclass your own tree node class to avoid class cast exception. + * </remarks> + */ + public virtual object ErrorNode( ITokenStream input, IToken start, IToken stop, + RecognitionException e ) + { + CommonErrorNode t = new CommonErrorNode( input, start, stop, e ); + //System.out.println("returning error node '"+t+"' @index="+input.index()); + return t; + } + + public virtual bool IsNil( object tree ) + { + return ( (ITree)tree ).IsNil; + } + + public virtual object DupTree( object tree ) + { + return DupTree( tree, null ); + } + + /** <summary> + * This is generic in the sense that it will work with any kind of + * tree (not just ITree interface). It invokes the adaptor routines + * not the tree node routines to do the construction. + * </summary> + */ + public virtual object DupTree( object t, object parent ) + { + if ( t == null ) + { + return null; + } + object newTree = DupNode( t ); + // ensure new subtree root has parent/child index set + SetChildIndex( newTree, GetChildIndex( t ) ); // same index in new tree + SetParent( newTree, parent ); + int n = GetChildCount( t ); + for ( int i = 0; i < n; i++ ) + { + object child = GetChild( t, i ); + object newSubTree = DupTree( child, t ); + AddChild( newTree, newSubTree ); + } + return newTree; + } + + /** <summary> + * Add a child to the tree t. If child is a flat tree (a list), make all + * in list children of t. Warning: if t has no children, but child does + * and child isNil then you can decide it is ok to move children to t via + * t.children = child.children; i.e., without copying the array. Just + * make sure that this is consistent with have the user will build + * ASTs. + * </summary> + */ + public virtual void AddChild( object t, object child ) + { + if ( t != null && child != null ) + { + ( (ITree)t ).AddChild( (ITree)child ); + } + } + + /** <summary> + * If oldRoot is a nil root, just copy or move the children to newRoot. + * If not a nil root, make oldRoot a child of newRoot. + * </summary> + * + * <remarks> + * old=^(nil a b c), new=r yields ^(r a b c) + * old=^(a b c), new=r yields ^(r ^(a b c)) + * + * If newRoot is a nil-rooted single child tree, use the single + * child as the new root node. + * + * old=^(nil a b c), new=^(nil r) yields ^(r a b c) + * old=^(a b c), new=^(nil r) yields ^(r ^(a b c)) + * + * If oldRoot was null, it's ok, just return newRoot (even if isNil). + * + * old=null, new=r yields r + * old=null, new=^(nil r) yields ^(nil r) + * + * Return newRoot. Throw an exception if newRoot is not a + * simple node or nil root with a single child node--it must be a root + * node. If newRoot is ^(nil x) return x as newRoot. + * + * Be advised that it's ok for newRoot to point at oldRoot's + * children; i.e., you don't have to copy the list. We are + * constructing these nodes so we should have this control for + * efficiency. + * </remarks> + */ + public virtual object BecomeRoot( object newRoot, object oldRoot ) + { + //System.out.println("becomeroot new "+newRoot.toString()+" old "+oldRoot); + ITree newRootTree = (ITree)newRoot; + ITree oldRootTree = (ITree)oldRoot; + if ( oldRoot == null ) + { + return newRoot; + } + // handle ^(nil real-node) + if ( newRootTree.IsNil ) + { + int nc = newRootTree.ChildCount; + if ( nc == 1 ) + newRootTree = (ITree)newRootTree.GetChild( 0 ); + else if ( nc > 1 ) + { + // TODO: make tree run time exceptions hierarchy + throw new Exception( "more than one node as root (TODO: make exception hierarchy)" ); + } + } + // add oldRoot to newRoot; addChild takes care of case where oldRoot + // is a flat list (i.e., nil-rooted tree). All children of oldRoot + // are added to newRoot. + newRootTree.AddChild( oldRootTree ); + return newRootTree; + } + + /** <summary>Transform ^(nil x) to x and nil to null</summary> */ + public virtual object RulePostProcessing( object root ) + { + //System.out.println("rulePostProcessing: "+((Tree)root).toStringTree()); + ITree r = (ITree)root; + if ( r != null && r.IsNil ) + { + if ( r.ChildCount == 0 ) + { + r = null; + } + else if ( r.ChildCount == 1 ) + { + r = (ITree)r.GetChild( 0 ); + // whoever invokes rule will set parent and child index + r.Parent = null; + r.ChildIndex = -1; + } + } + return r; + } + + public virtual object BecomeRoot( IToken newRoot, object oldRoot ) + { + return BecomeRoot( Create( newRoot ), oldRoot ); + } + + public virtual object Create( int tokenType, IToken fromToken ) + { + fromToken = CreateToken( fromToken ); + //((ClassicToken)fromToken).setType(tokenType); + fromToken.Type = tokenType; + ITree t = (ITree)Create( fromToken ); + return t; + } + + public virtual object Create( int tokenType, IToken fromToken, string text ) + { + fromToken = CreateToken( fromToken ); + fromToken.Type = tokenType; + fromToken.Text = text; + ITree t = (ITree)Create( fromToken ); + return t; + } + + public virtual object Create( int tokenType, string text ) + { + IToken fromToken = CreateToken( tokenType, text ); + ITree t = (ITree)Create( fromToken ); + return t; + } + + public virtual int GetType( object t ) + { + return ( (ITree)t ).Type; + } + + public virtual void SetType( object t, int type ) + { + throw new NotSupportedException( "don't know enough about Tree node" ); + } + + public virtual string GetText( object t ) + { + return ( (ITree)t ).Text; + } + + public virtual void SetText( object t, string text ) + { + throw new NotSupportedException( "don't know enough about Tree node" ); + } + + public virtual object GetChild( object t, int i ) + { + return ( (ITree)t ).GetChild( i ); + } + + public virtual void SetChild( object t, int i, object child ) + { + ( (ITree)t ).SetChild( i, (ITree)child ); + } + + public virtual object DeleteChild( object t, int i ) + { + return ( (ITree)t ).DeleteChild( i ); + } + + public virtual int GetChildCount( object t ) + { + return ( (ITree)t ).ChildCount; + } + + public virtual int GetUniqueID( object node ) + { + if ( treeToUniqueIDMap == null ) + { + treeToUniqueIDMap = new Dictionary<object, int>(); + } + int id; + if ( treeToUniqueIDMap.TryGetValue( node, out id ) ) + return id; + + id = uniqueNodeID; + treeToUniqueIDMap[node] = id; + uniqueNodeID++; + return id; + // GC makes these nonunique: + // return System.identityHashCode(node); + } + + /** <summary> + * Tell me how to create a token for use with imaginary token nodes. + * For example, there is probably no input symbol associated with imaginary + * token DECL, but you need to create it as a payload or whatever for + * the DECL node as in ^(DECL type ID). + * </summary> + * + * <remarks> + * If you care what the token payload objects' type is, you should + * override this method and any other createToken variant. + * </remarks> + */ + public abstract IToken CreateToken( int tokenType, string text ); + + /** <summary> + * Tell me how to create a token for use with imaginary token nodes. + * For example, there is probably no input symbol associated with imaginary + * token DECL, but you need to create it as a payload or whatever for + * the DECL node as in ^(DECL type ID). + * </summary> + * + * <remarks> + * This is a variant of createToken where the new token is derived from + * an actual real input token. Typically this is for converting '{' + * tokens to BLOCK etc... You'll see + * + * r : lc='{' ID+ '}' -> ^(BLOCK[$lc] ID+) ; + * + * If you care what the token payload objects' type is, you should + * override this method and any other createToken variant. + * </remarks> + */ + public abstract IToken CreateToken( IToken fromToken ); + + public abstract object Create( IToken payload ); + public abstract object DupNode( object treeNode ); + public abstract IToken GetToken( object t ); + public abstract void SetTokenBoundaries( object t, IToken startToken, IToken stopToken ); + public abstract int GetTokenStartIndex( object t ); + public abstract int GetTokenStopIndex( object t ); + public abstract object GetParent( object t ); + public abstract void SetParent( object t, object parent ); + public abstract int GetChildIndex( object t ); + public abstract void SetChildIndex( object t, int index ); + public abstract void ReplaceChildren( object parent, int startChildIndex, int stopChildIndex, object t ); + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BufferedTreeNodeStream.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BufferedTreeNodeStream.cs new file mode 100644 index 0000000..699903f --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/BufferedTreeNodeStream.cs @@ -0,0 +1,627 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + using System.Collections.Generic; + + using Console = System.Console; + using IList = System.Collections.IList; + using StringBuilder = System.Text.StringBuilder; + + /** <summary>A buffered stream of tree nodes. Nodes can be from a tree of ANY kind.</summary> + * + * This node stream sucks all nodes out of the tree specified in + * the constructor during construction and makes pointers into + * the tree using an array of Object pointers. The stream necessarily + * includes pointers to DOWN and UP and EOF nodes. + * + * This stream knows how to mark/release for backtracking. + * + * This stream is most suitable for tree interpreters that need to + * jump around a lot or for tree parsers requiring speed (at cost of memory). + * There is some duplicated functionality here with UnBufferedTreeNodeStream + * but just in bookkeeping, not tree walking etc... + * + * TARGET DEVELOPERS: + * + * This is the old CommonTreeNodeStream that buffered up entire node stream. + * No need to implement really as new CommonTreeNodeStream is much better + * and covers what we need. + * + * @see CommonTreeNodeStream + */ + public class BufferedTreeNodeStream : ITreeNodeStream + { + public const int DEFAULT_INITIAL_BUFFER_SIZE = 100; + public const int INITIAL_CALL_STACK_SIZE = 10; + + protected sealed class StreamIterator : IEnumerator<object> + { + BufferedTreeNodeStream _outer; + int _index; + + public StreamIterator( BufferedTreeNodeStream outer ) + { + _outer = outer; + _index = -1; + } + + #region IEnumerator<object> Members + + public object Current + { + get + { + if ( _index < _outer.nodes.Count ) + return _outer.nodes[_index]; + + return _outer.eof; + } + } + + #endregion + + #region IDisposable Members + + public void Dispose() + { + } + + #endregion + + #region IEnumerator Members + + public bool MoveNext() + { + if ( _index < _outer.nodes.Count ) + _index++; + + return _index < _outer.nodes.Count; + } + + public void Reset() + { + _index = -1; + } + + #endregion + } + + // all these navigation nodes are shared and hence they + // cannot contain any line/column info + + protected object down; + protected object up; + protected object eof; + + /** <summary>The complete mapping from stream index to tree node. + * This buffer includes pointers to DOWN, UP, and EOF nodes. + * It is built upon ctor invocation. The elements are type + * Object as we don't what the trees look like.</summary> + * + * Load upon first need of the buffer so we can set token types + * of interest for reverseIndexing. Slows us down a wee bit to + * do all of the if p==-1 testing everywhere though. + */ + protected IList nodes; + + /** <summary>Pull nodes from which tree?</summary> */ + protected object root; + + /** <summary>IF this tree (root) was created from a token stream, track it.</summary> */ + protected ITokenStream tokens; + + /** <summary>What tree adaptor was used to build these trees</summary> */ + ITreeAdaptor adaptor; + + /** <summary>Reuse same DOWN, UP navigation nodes unless this is true</summary> */ + protected bool uniqueNavigationNodes = false; + + /** <summary>The index into the nodes list of the current node (next node + * to consume). If -1, nodes array not filled yet.</summary> + */ + protected int p = -1; + + /** <summary>Track the last mark() call result value for use in rewind().</summary> */ + protected int lastMarker; + + /** <summary>Stack of indexes used for push/pop calls</summary> */ + protected Stack<int> calls; + + public BufferedTreeNodeStream( object tree ) + : this( new CommonTreeAdaptor(), tree ) + { + } + + public BufferedTreeNodeStream( ITreeAdaptor adaptor, object tree ) + : this( adaptor, tree, DEFAULT_INITIAL_BUFFER_SIZE ) + { + } + + public BufferedTreeNodeStream( ITreeAdaptor adaptor, object tree, int initialBufferSize ) + { + this.root = tree; + this.adaptor = adaptor; + nodes = new List<object>( initialBufferSize ); + down = adaptor.Create( TokenConstants.DOWN, "DOWN" ); + up = adaptor.Create( TokenConstants.UP, "UP" ); + eof = adaptor.Create( TokenConstants.EOF, "EOF" ); + } + + #region Properties + + public virtual object TreeSource + { + get + { + return root; + } + } + + public virtual string SourceName + { + get + { + return TokenStream.SourceName; + } + } + + public virtual ITokenStream TokenStream + { + get + { + return tokens; + } + set + { + tokens = value; + } + } + + public virtual ITreeAdaptor TreeAdaptor + { + get + { + return adaptor; + } + set + { + adaptor = value; + } + } + + public virtual bool UniqueNavigationNodes + { + get + { + return uniqueNavigationNodes; + } + set + { + uniqueNavigationNodes = value; + } + } + + #endregion + + /** Walk tree with depth-first-search and fill nodes buffer. + * Don't do DOWN, UP nodes if its a list (t is isNil). + */ + protected virtual void FillBuffer() + { + FillBuffer( root ); + //Console.Out.WriteLine( "revIndex=" + tokenTypeToStreamIndexesMap ); + p = 0; // buffer of nodes intialized now + } + + public virtual void FillBuffer( object t ) + { + bool nil = adaptor.IsNil( t ); + if ( !nil ) + { + nodes.Add( t ); // add this node + } + // add DOWN node if t has children + int n = adaptor.GetChildCount( t ); + if ( !nil && n > 0 ) + { + AddNavigationNode( TokenConstants.DOWN ); + } + // and now add all its children + for ( int c = 0; c < n; c++ ) + { + object child = adaptor.GetChild( t, c ); + FillBuffer( child ); + } + // add UP node if t has children + if ( !nil && n > 0 ) + { + AddNavigationNode( TokenConstants.UP ); + } + } + + /** What is the stream index for node? 0..n-1 + * Return -1 if node not found. + */ + protected virtual int GetNodeIndex( object node ) + { + if ( p == -1 ) + { + FillBuffer(); + } + for ( int i = 0; i < nodes.Count; i++ ) + { + object t = nodes[i]; + if ( t == node ) + { + return i; + } + } + return -1; + } + + /** As we flatten the tree, we use UP, DOWN nodes to represent + * the tree structure. When debugging we need unique nodes + * so instantiate new ones when uniqueNavigationNodes is true. + */ + protected virtual void AddNavigationNode( int ttype ) + { + object navNode = null; + if ( ttype == TokenConstants.DOWN ) + { + if ( UniqueNavigationNodes ) + { + navNode = adaptor.Create( TokenConstants.DOWN, "DOWN" ); + } + else + { + navNode = down; + } + } + else + { + if ( UniqueNavigationNodes ) + { + navNode = adaptor.Create( TokenConstants.UP, "UP" ); + } + else + { + navNode = up; + } + } + nodes.Add( navNode ); + } + + public virtual object this[int i] + { + get + { + if ( p == -1 ) + { + FillBuffer(); + } + return nodes[i]; + } + } + + public virtual object LT( int k ) + { + if ( p == -1 ) + { + FillBuffer(); + } + if ( k == 0 ) + { + return null; + } + if ( k < 0 ) + { + return LB( -k ); + } + //System.out.print("LT(p="+p+","+k+")="); + if ( ( p + k - 1 ) >= nodes.Count ) + { + return eof; + } + return nodes[p + k - 1]; + } + + public virtual object GetCurrentSymbol() + { + return LT( 1 ); + } + +#if false + public virtual object getLastTreeNode() + { + int i = Index; + if ( i >= size() ) + { + i--; // if at EOF, have to start one back + } + Console.Out.WriteLine( "start last node: " + i + " size==" + nodes.Count ); + while ( i >= 0 && + ( adaptor.getType( this[i] ) == TokenConstants.EOF || + adaptor.getType( this[i] ) == TokenConstants.UP || + adaptor.getType( this[i] ) == TokenConstants.DOWN ) ) + { + i--; + } + Console.Out.WriteLine( "stop at node: " + i + " " + nodes[i] ); + return nodes[i]; + } +#endif + + /** <summary>Look backwards k nodes</summary> */ + protected virtual object LB( int k ) + { + if ( k == 0 ) + { + return null; + } + if ( ( p - k ) < 0 ) + { + return null; + } + return nodes[p - k]; + } + + public virtual void Consume() + { + if ( p == -1 ) + { + FillBuffer(); + } + p++; + } + + public virtual int LA( int i ) + { + return adaptor.GetType( LT( i ) ); + } + + public virtual int Mark() + { + if ( p == -1 ) + { + FillBuffer(); + } + lastMarker = Index; + return lastMarker; + } + + public virtual void Release( int marker ) + { + // no resources to release + } + + public virtual int Index + { + get + { + return p; + } + } + + public virtual void Rewind( int marker ) + { + Seek( marker ); + } + + public virtual void Rewind() + { + Seek( lastMarker ); + } + + public virtual void Seek( int index ) + { + if ( p == -1 ) + { + FillBuffer(); + } + p = index; + } + + /** <summary> + * Make stream jump to a new location, saving old location. + * Switch back with pop(). + * </summary> + */ + public virtual void Push( int index ) + { + if ( calls == null ) + { + calls = new Stack<int>(); + } + calls.Push( p ); // save current index + Seek( index ); + } + + /** <summary> + * Seek back to previous index saved during last push() call. + * Return top of stack (return index). + * </summary> + */ + public virtual int Pop() + { + int ret = calls.Pop(); + Seek( ret ); + return ret; + } + + public virtual void Reset() + { + p = 0; + lastMarker = 0; + if ( calls != null ) + { + calls.Clear(); + } + } + + public virtual int Size() + { + if ( p == -1 ) + { + FillBuffer(); + } + return nodes.Count; + } + + public virtual IEnumerator<object> Iterator() + { + if ( p == -1 ) + { + FillBuffer(); + } + + return new StreamIterator( this ); + } + + // TREE REWRITE INTERFACE + + public virtual void ReplaceChildren( object parent, int startChildIndex, int stopChildIndex, object t ) + { + if ( parent != null ) + { + adaptor.ReplaceChildren( parent, startChildIndex, stopChildIndex, t ); + } + } + + /** <summary>Used for testing, just return the token type stream</summary> */ + public virtual string ToTokenTypeString() + { + if ( p == -1 ) + { + FillBuffer(); + } + StringBuilder buf = new StringBuilder(); + for ( int i = 0; i < nodes.Count; i++ ) + { + object t = nodes[i]; + buf.Append( " " ); + buf.Append( adaptor.GetType( t ) ); + } + return buf.ToString(); + } + + /** <summary>Debugging</summary> */ + public virtual string ToTokenString( int start, int stop ) + { + if ( p == -1 ) + { + FillBuffer(); + } + StringBuilder buf = new StringBuilder(); + for ( int i = start; i < nodes.Count && i <= stop; i++ ) + { + object t = nodes[i]; + buf.Append( " " ); + buf.Append( adaptor.GetToken( t ) ); + } + return buf.ToString(); + } + + public virtual string ToString( object start, object stop ) + { + Console.Out.WriteLine( "toString" ); + if ( start == null || stop == null ) + { + return null; + } + if ( p == -1 ) + { + FillBuffer(); + } + //Console.Out.WriteLine( "stop: " + stop ); + if ( start is CommonTree ) + Console.Out.Write( "toString: " + ( (CommonTree)start ).Token + ", " ); + else + Console.Out.WriteLine( start ); + if ( stop is CommonTree ) + Console.Out.WriteLine( ( (CommonTree)stop ).Token ); + else + Console.Out.WriteLine( stop ); + // if we have the token stream, use that to dump text in order + if ( tokens != null ) + { + int beginTokenIndex = adaptor.GetTokenStartIndex( start ); + int endTokenIndex = adaptor.GetTokenStopIndex( stop ); + // if it's a tree, use start/stop index from start node + // else use token range from start/stop nodes + if ( adaptor.GetType( stop ) == TokenConstants.UP ) + { + endTokenIndex = adaptor.GetTokenStopIndex( start ); + } + else if ( adaptor.GetType( stop ) == TokenConstants.EOF ) + { + endTokenIndex = Size() - 2; // don't use EOF + } + return tokens.ToString( beginTokenIndex, endTokenIndex ); + } + // walk nodes looking for start + object t = null; + int i = 0; + for ( ; i < nodes.Count; i++ ) + { + t = nodes[i]; + if ( t == start ) + { + break; + } + } + // now walk until we see stop, filling string buffer with text + StringBuilder buf = new StringBuilder(); + t = nodes[i]; + while ( t != stop ) + { + string text = adaptor.GetText( t ); + if ( text == null ) + { + text = " " + adaptor.GetType( t ).ToString(); + } + buf.Append( text ); + i++; + t = nodes[i]; + } + // include stop node too + string text2 = adaptor.GetText( stop ); + if ( text2 == null ) + { + text2 = " " + adaptor.GetType( stop ).ToString(); + } + buf.Append( text2 ); + return buf.ToString(); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonErrorNode.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonErrorNode.cs new file mode 100644 index 0000000..cd5a853 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonErrorNode.cs @@ -0,0 +1,142 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + + /** <summary>A node representing erroneous token range in token stream</summary> */ + [System.Serializable] + public class CommonErrorNode : CommonTree + { + public IIntStream input; + public IToken start; + public IToken stop; + public RecognitionException trappedException; + + public CommonErrorNode( ITokenStream input, IToken start, IToken stop, + RecognitionException e ) + { + //System.out.println("start: "+start+", stop: "+stop); + if ( stop == null || + ( stop.TokenIndex < start.TokenIndex && + stop.Type != TokenConstants.EOF ) ) + { + // sometimes resync does not consume a token (when LT(1) is + // in follow set. So, stop will be 1 to left to start. adjust. + // Also handle case where start is the first token and no token + // is consumed during recovery; LT(-1) will return null. + stop = start; + } + this.input = input; + this.start = start; + this.stop = stop; + this.trappedException = e; + } + + #region Properties + public override bool IsNil + { + get + { + return false; + } + } + public override string Text + { + get + { + string badText = null; + if ( start is IToken ) + { + int i = ( (IToken)start ).TokenIndex; + int j = ( (IToken)stop ).TokenIndex; + if ( ( (IToken)stop ).Type == TokenConstants.EOF ) + { + j = ( (ITokenStream)input ).Size(); + } + badText = ( (ITokenStream)input ).ToString( i, j ); + } + else if ( start is ITree ) + { + badText = ( (ITreeNodeStream)input ).ToString( start, stop ); + } + else + { + // people should subclass if they alter the tree type so this + // next one is for sure correct. + badText = "<unknown>"; + } + return badText; + } + set + { + } + } + public override int Type + { + get + { + return TokenConstants.INVALID_TOKEN_TYPE; + } + set + { + } + } + #endregion + + public override string ToString() + { + if ( trappedException is MissingTokenException ) + { + return "<missing type: " + + ( (MissingTokenException)trappedException ).GetMissingType() + + ">"; + } + else if ( trappedException is UnwantedTokenException ) + { + return "<extraneous: " + + ( (UnwantedTokenException)trappedException ).UnexpectedToken + + ", resync=" + Text + ">"; + } + else if ( trappedException is MismatchedTokenException ) + { + return "<mismatched token: " + trappedException.token + ", resync=" + Text + ">"; + } + else if ( trappedException is NoViableAltException ) + { + return "<unexpected: " + trappedException.token + + ", resync=" + Text + ">"; + } + return "<error: " + Text + ">"; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTree.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTree.cs new file mode 100644 index 0000000..498d9cf --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTree.cs @@ -0,0 +1,266 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + /** <summary> + * A tree node that is wrapper for a Token object. After 3.0 release + * while building tree rewrite stuff, it became clear that computing + * parent and child index is very difficult and cumbersome. Better to + * spend the space in every tree node. If you don't want these extra + * fields, it's easy to cut them out in your own BaseTree subclass. + * </summary> + */ + [System.Serializable] + public class CommonTree : BaseTree + { + /** <summary>A single token is the payload</summary> */ + public IToken token; + + /** <summary> + * What token indexes bracket all tokens associated with this node + * and below? + * </summary> + */ + protected int startIndex = -1; + protected int stopIndex = -1; + + /** <summary>Who is the parent node of this node; if null, implies node is root</summary> */ + public CommonTree parent; + + /** <summary>What index is this node in the child list? Range: 0..n-1</summary> */ + public int childIndex = -1; + + public CommonTree() + { + } + + public CommonTree( CommonTree node ) + : base( node ) + { + this.token = node.token; + this.startIndex = node.startIndex; + this.stopIndex = node.stopIndex; + } + + public CommonTree( IToken t ) + { + this.token = t; + } + + #region Properties + public override int CharPositionInLine + { + get + { + if ( token == null || token.CharPositionInLine == -1 ) + { + if ( ChildCount > 0 ) + { + return GetChild( 0 ).CharPositionInLine; + } + return 0; + } + return token.CharPositionInLine; + } + set + { + base.CharPositionInLine = value; + } + } + public override int ChildIndex + { + get + { + return childIndex; + } + set + { + childIndex = value; + } + } + public override bool IsNil + { + get + { + return token == null; + } + } + public override int Line + { + get + { + if ( token == null || token.Line == 0 ) + { + if ( ChildCount > 0 ) + { + return GetChild( 0 ).Line; + } + return 0; + } + return token.Line; + } + set + { + base.Line = value; + } + } + public override ITree Parent + { + get + { + return parent; + } + set + { + parent = (CommonTree)value; + } + } + public override string Text + { + get + { + if ( token == null ) + return null; + + return token.Text; + } + set + { + } + } + public virtual IToken Token + { + get + { + return token; + } + } + public override int TokenStartIndex + { + get + { + if ( startIndex == -1 && token != null ) + { + return token.TokenIndex; + } + return startIndex; + } + set + { + startIndex = value; + } + } + public override int TokenStopIndex + { + get + { + if ( stopIndex == -1 && token != null ) + { + return token.TokenIndex; + } + return stopIndex; + } + set + { + stopIndex = value; + } + } + public override int Type + { + get + { + if ( token == null ) + return TokenConstants.INVALID_TOKEN_TYPE; + + return token.Type; + } + set + { + } + } + #endregion + + public override ITree DupNode() + { + return new CommonTree( this ); + } + + /** <summary> + * For every node in this subtree, make sure it's start/stop token's + * are set. Walk depth first, visit bottom up. Only updates nodes + * with at least one token index < 0. + * </summary> + */ + public virtual void SetUnknownTokenBoundaries() + { + if ( children == null ) + { + if ( startIndex < 0 || stopIndex < 0 ) + { + startIndex = stopIndex = token.TokenIndex; + } + return; + } + for ( int i = 0; i < children.Count; i++ ) + { + ( (CommonTree)children[i] ).SetUnknownTokenBoundaries(); + } + if ( startIndex >= 0 && stopIndex >= 0 ) + return; // already set + if ( children.Count > 0 ) + { + CommonTree firstChild = (CommonTree)children[0]; + CommonTree lastChild = (CommonTree)children[children.Count - 1]; + startIndex = firstChild.TokenStartIndex; + stopIndex = lastChild.TokenStopIndex; + } + } + + public override string ToString() + { + if ( IsNil ) + { + return "nil"; + } + if ( Type == TokenConstants.INVALID_TOKEN_TYPE ) + { + return "<errornode>"; + } + if ( token == null ) + { + return null; + } + return token.Text; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeAdaptor.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeAdaptor.cs new file mode 100644 index 0000000..d55fa20 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeAdaptor.cs @@ -0,0 +1,239 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + + /** <summary> + * A TreeAdaptor that works with any Tree implementation. It provides + * really just factory methods; all the work is done by BaseTreeAdaptor. + * If you would like to have different tokens created than ClassicToken + * objects, you need to override this and then set the parser tree adaptor to + * use your subclass. + * </summary> + * + * <remarks> + * To get your parser to build nodes of a different type, override + * create(Token), errorNode(), and to be safe, YourTreeClass.dupNode(). + * dupNode is called to duplicate nodes during rewrite operations. + * </remarks> + */ + public class CommonTreeAdaptor : BaseTreeAdaptor + { + /** <summary> + * Duplicate a node. This is part of the factory; + * override if you want another kind of node to be built. + * </summary> + * + * <remarks> + * I could use reflection to prevent having to override this + * but reflection is slow. + * </remarks> + */ + public override object DupNode( object t ) + { + if ( t == null ) + return null; + + return ( (ITree)t ).DupNode(); + } + + public override object Create( IToken payload ) + { + return new CommonTree( payload ); + } + + /** <summary> + * Tell me how to create a token for use with imaginary token nodes. + * For example, there is probably no input symbol associated with imaginary + * token DECL, but you need to create it as a payload or whatever for + * the DECL node as in ^(DECL type ID). + * </summary> + * + * <remarks> + * If you care what the token payload objects' type is, you should + * override this method and any other createToken variant. + * </remarks> + */ + public override IToken CreateToken( int tokenType, string text ) + { + return new CommonToken( tokenType, text ); + } + + /** <summary> + * Tell me how to create a token for use with imaginary token nodes. + * For example, there is probably no input symbol associated with imaginary + * token DECL, but you need to create it as a payload or whatever for + * the DECL node as in ^(DECL type ID). + * </summary> + * + * <remarks> + * This is a variant of createToken where the new token is derived from + * an actual real input token. Typically this is for converting '{' + * tokens to BLOCK etc... You'll see + * + * r : lc='{' ID+ '}' -> ^(BLOCK[$lc] ID+) ; + * + * If you care what the token payload objects' type is, you should + * override this method and any other createToken variant. + * </remarks> + */ + public override IToken CreateToken( IToken fromToken ) + { + return new CommonToken( fromToken ); + } + + /** <summary> + * Track start/stop token for subtree root created for a rule. + * Only works with Tree nodes. For rules that match nothing, + * seems like this will yield start=i and stop=i-1 in a nil node. + * Might be useful info so I'll not force to be i..i. + * </summary> + */ + public override void SetTokenBoundaries( object t, IToken startToken, IToken stopToken ) + { + if ( t == null ) + return; + + int start = 0; + int stop = 0; + + if ( startToken != null ) + start = startToken.TokenIndex; + + if ( stopToken != null ) + stop = stopToken.TokenIndex; + + ( (ITree)t ).TokenStartIndex = start; + ( (ITree)t ).TokenStopIndex = stop; + } + + public override int GetTokenStartIndex( object t ) + { + if ( t == null ) + return -1; + + return ( (ITree)t ).TokenStartIndex; + } + + public override int GetTokenStopIndex( object t ) + { + if ( t == null ) + return -1; + + return ( (ITree)t ).TokenStopIndex; + } + + public override string GetText( object t ) + { + if ( t == null ) + return null; + + return ( (ITree)t ).Text; + } + + public override int GetType( object t ) + { + if ( t == null ) + return TokenConstants.INVALID_TOKEN_TYPE; + + return ( (ITree)t ).Type; + } + + /** <summary> + * What is the Token associated with this node? If + * you are not using CommonTree, then you must + * override this in your own adaptor. + * </summary> + */ + public override IToken GetToken( object t ) + { + if ( t is CommonTree ) + { + return ( (CommonTree)t ).Token; + } + return null; // no idea what to do + } + + public override object GetChild( object t, int i ) + { + if ( t == null ) + return null; + + return ( (ITree)t ).GetChild( i ); + } + + public override int GetChildCount( object t ) + { + if ( t == null ) + return 0; + + return ( (ITree)t ).ChildCount; + } + + public override object GetParent( object t ) + { + if ( t == null ) + return null; + + return ( (ITree)t ).Parent; + } + + public override void SetParent( object t, object parent ) + { + if ( t != null ) + ( (ITree)t ).Parent = (ITree)parent; + } + + public override int GetChildIndex( object t ) + { + if ( t == null ) + return 0; + + return ( (ITree)t ).ChildIndex; + } + + public override void SetChildIndex( object t, int index ) + { + if ( t != null ) + ( (ITree)t ).ChildIndex = index; + } + + public override void ReplaceChildren( object parent, int startChildIndex, int stopChildIndex, object t ) + { + if ( parent != null ) + { + ( (ITree)parent ).ReplaceChildren( startChildIndex, stopChildIndex, t ); + } + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeNodeStream.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeNodeStream.cs new file mode 100644 index 0000000..04da854 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/CommonTreeNodeStream.cs @@ -0,0 +1,250 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + using System.Collections.Generic; + using Antlr.Runtime.Misc; + + using StringBuilder = System.Text.StringBuilder; + + [System.Serializable] + public class CommonTreeNodeStream : LookaheadStream<object>, ITreeNodeStream + { + public const int DEFAULT_INITIAL_BUFFER_SIZE = 100; + public const int INITIAL_CALL_STACK_SIZE = 10; + + /** <summary>Pull nodes from which tree?</summary> */ + object _root; + + /** <summary>If this tree (root) was created from a token stream, track it.</summary> */ + protected ITokenStream tokens; + + /** <summary>What tree adaptor was used to build these trees</summary> */ + [System.NonSerialized] + ITreeAdaptor _adaptor; + + /** The tree iterator we are using */ + TreeIterator _it; + + /** <summary>Stack of indexes used for push/pop calls</summary> */ + Stack<int> _calls; + + /** <summary>Tree (nil A B C) trees like flat A B C streams</summary> */ + bool _hasNilRoot = false; + + /** <summary>Tracks tree depth. Level=0 means we're at root node level.</summary> */ + int _level = 0; + + public CommonTreeNodeStream( object tree ) + : this( new CommonTreeAdaptor(), tree ) + { + } + + public CommonTreeNodeStream( ITreeAdaptor adaptor, object tree ) + : base( adaptor.Create(TokenConstants.EOF,"EOF") ) // set EOF + { + this._root = tree; + this._adaptor = adaptor; + _it = new TreeIterator( adaptor, _root ); + _it.eof = this.Eof; // make sure tree iterator returns the EOF we want + } + + #region Properties + public virtual string SourceName + { + get + { + if ( TokenStream == null ) + return null; + + return TokenStream.SourceName; + } + } + public virtual ITokenStream TokenStream + { + get + { + return tokens; + } + set + { + tokens = value; + } + } + public virtual ITreeAdaptor TreeAdaptor + { + get + { + return _adaptor; + } + set + { + _adaptor = value; + } + } + public virtual object TreeSource + { + get + { + return _root; + } + } + public virtual bool UniqueNavigationNodes + { + get + { + return false; + } + set + { + } + } + #endregion + + public virtual void Reset() + { + base.Clear(); + _it.Reset(); + _hasNilRoot = false; + _level = 0; + if ( _calls != null ) + _calls.Clear(); + } + + public override object NextElement() + { + _it.MoveNext(); + object t = _it.Current; + //System.out.println("pulled "+adaptor.getType(t)); + if ( t == _it.up ) + { + _level--; + if ( _level == 0 && _hasNilRoot ) + { + _it.MoveNext(); + return _it.Current; // don't give last UP; get EOF + } + } + else if ( t == _it.down ) + { + _level++; + } + + if ( _level == 0 && _adaptor.IsNil( t ) ) + { + // if nil root, scarf nil, DOWN + _hasNilRoot = true; + _it.MoveNext(); + t = _it.Current; // t is now DOWN, so get first real node next + _level++; + _it.MoveNext(); + t = _it.Current; + } + return t; + } + + public virtual int LA( int i ) + { + return _adaptor.GetType( LT( i ) ); + } + + /** Make stream jump to a new location, saving old location. + * Switch back with pop(). + */ + public virtual void Push( int index ) + { + if ( _calls == null ) + { + _calls = new Stack<int>(); + } + _calls.Push( _p ); // save current index + Seek( index ); + } + + /** Seek back to previous index saved during last push() call. + * Return top of stack (return index). + */ + public virtual int Pop() + { + int ret = _calls.Pop(); + Seek( ret ); + return ret; + } + + #region Tree rewrite interface + + public virtual void ReplaceChildren( object parent, int startChildIndex, int stopChildIndex, object t ) + { + if ( parent != null ) + { + _adaptor.ReplaceChildren( parent, startChildIndex, stopChildIndex, t ); + } + } + + #endregion + + public virtual string ToString( object start, object stop ) + { + // we'll have to walk from start to stop in tree; we're not keeping + // a complete node stream buffer + return "n/a"; + } + + /** <summary>For debugging; destructive: moves tree iterator to end.</summary> */ + public virtual string ToTokenTypeString() + { + Reset(); + StringBuilder buf = new StringBuilder(); + object o = LT( 1 ); + int type = _adaptor.GetType( o ); + while ( type != TokenConstants.EOF ) + { + buf.Append( " " ); + buf.Append( type ); + Consume(); + o = LT( 1 ); + type = _adaptor.GetType( o ); + } + return buf.ToString(); + } + + #region IIntStream Members + + int IIntStream.Size() + { + return Count; + } + + #endregion + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITree.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITree.cs new file mode 100644 index 0000000..a3eb034 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITree.cs @@ -0,0 +1,173 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + using System.Collections.Generic; + + /** <summary> + * What does a tree look like? ANTLR has a number of support classes + * such as CommonTreeNodeStream that work on these kinds of trees. You + * don't have to make your trees implement this interface, but if you do, + * you'll be able to use more support code. + * </summary> + * + * <remarks> + * NOTE: When constructing trees, ANTLR can build any kind of tree; it can + * even use Token objects as trees if you add a child list to your tokens. + * + * This is a tree node without any payload; just navigation and factory stuff. + * </remarks> + */ + public interface ITree + { + + ITree GetChild( int i ); + + int ChildCount + { + get; + } + + // Tree tracks parent and child index now > 3.0 + + ITree Parent + { + get; + set; + } + + /** <summary>Is there is a node above with token type ttype?</summary> */ + bool HasAncestor( int ttype ); + + /** <summary>Walk upwards and get first ancestor with this token type.</summary> */ + ITree GetAncestor( int ttype ); + + /** <summary> + * Return a list of all ancestors of this node. The first node of + * list is the root and the last is the parent of this node. + * </summary> + */ + IList<ITree> GetAncestors(); + + /** <summary>This node is what child index? 0..n-1</summary> */ + int ChildIndex + { + get; + set; + } + + /** <summary>Set the parent and child index values for all children</summary> */ + void FreshenParentAndChildIndexes(); + + /** <summary> + * Add t as a child to this node. If t is null, do nothing. If t + * is nil, add all children of t to this' children. + * </summary> + */ + void AddChild( ITree t ); + + /** <summary>Set ith child (0..n-1) to t; t must be non-null and non-nil node</summary> */ + void SetChild( int i, ITree t ); + + object DeleteChild( int i ); + + /** <summary> + * Delete children from start to stop and replace with t even if t is + * a list (nil-root tree). num of children can increase or decrease. + * For huge child lists, inserting children can force walking rest of + * children to set their childindex; could be slow. + * </summary> + */ + void ReplaceChildren( int startChildIndex, int stopChildIndex, object t ); + + /** <summary> + * Indicates the node is a nil node but may still have children, meaning + * the tree is a flat list. + * </summary> + */ + bool IsNil + { + get; + } + + /** <summary> + * What is the smallest token index (indexing from 0) for this node + * and its children? + * </summary> + */ + int TokenStartIndex + { + get; + set; + } + + /** <summary> + * What is the largest token index (indexing from 0) for this node + * and its children? + * </summary> + */ + int TokenStopIndex + { + get; + set; + } + + ITree DupNode(); + + /** <summary>Return a token type; needed for tree parsing</summary> */ + int Type + { + get; + } + + string Text + { + get; + } + + /** <summary>In case we don't have a token payload, what is the line for errors?</summary> */ + int Line + { + get; + } + + int CharPositionInLine + { + get; + } + + string ToStringTree(); + + string ToString(); + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeAdaptor.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeAdaptor.cs new file mode 100644 index 0000000..90fe6f3 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeAdaptor.cs @@ -0,0 +1,328 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + + /** <summary> + * How to create and navigate trees. Rather than have a separate factory + * and adaptor, I've merged them. Makes sense to encapsulate. + * </summary> + * + * <remarks> + * This takes the place of the tree construction code generated in the + * generated code in 2.x and the ASTFactory. + * + * I do not need to know the type of a tree at all so they are all + * generic Objects. This may increase the amount of typecasting needed. :( + * </remarks> + */ + public interface ITreeAdaptor + { + #region Construction + + /** <summary> + * Create a tree node from Token object; for CommonTree type trees, + * then the token just becomes the payload. This is the most + * common create call. + * </summary> + * + * <remarks> + * Override if you want another kind of node to be built. + * </remarks> + */ + object Create( IToken payload ); + + /** <summary>Duplicate a single tree node.</summary> + * <remarks>Override if you want another kind of node to be built.</remarks> + */ + object DupNode( object treeNode ); + + /** <summary>Duplicate tree recursively, using dupNode() for each node</summary> */ + object DupTree( object tree ); + + /** <summary> + * Return a nil node (an empty but non-null node) that can hold + * a list of element as the children. If you want a flat tree (a list) + * use "t=adaptor.nil(); t.addChild(x); t.addChild(y);" + * </summary> + */ + object Nil(); + + /** <summary> + * Return a tree node representing an error. This node records the + * tokens consumed during error recovery. The start token indicates the + * input symbol at which the error was detected. The stop token indicates + * the last symbol consumed during recovery. + * </summary> + * + * </remarks> + * You must specify the input stream so that the erroneous text can + * be packaged up in the error node. The exception could be useful + * to some applications; default implementation stores ptr to it in + * the CommonErrorNode. + * + * This only makes sense during token parsing, not tree parsing. + * Tree parsing should happen only when parsing and tree construction + * succeed. + * </remarks> + */ + object ErrorNode( ITokenStream input, IToken start, IToken stop, RecognitionException e ); + + /** <summary>Is tree considered a nil node used to make lists of child nodes?</summary> */ + bool IsNil( object tree ); + + /** <summary> + * Add a child to the tree t. If child is a flat tree (a list), make all + * in list children of t. Warning: if t has no children, but child does + * and child isNil then you can decide it is ok to move children to t via + * t.children = child.children; i.e., without copying the array. Just + * make sure that this is consistent with have the user will build + * ASTs. Do nothing if t or child is null. + * </summary> + */ + void AddChild( object t, object child ); + + /** <summary> + * If oldRoot is a nil root, just copy or move the children to newRoot. + * If not a nil root, make oldRoot a child of newRoot. + * </summary> + * + * <remarks> + * old=^(nil a b c), new=r yields ^(r a b c) + * old=^(a b c), new=r yields ^(r ^(a b c)) + * + * If newRoot is a nil-rooted single child tree, use the single + * child as the new root node. + * + * old=^(nil a b c), new=^(nil r) yields ^(r a b c) + * old=^(a b c), new=^(nil r) yields ^(r ^(a b c)) + * + * If oldRoot was null, it's ok, just return newRoot (even if isNil). + * + * old=null, new=r yields r + * old=null, new=^(nil r) yields ^(nil r) + * + * Return newRoot. Throw an exception if newRoot is not a + * simple node or nil root with a single child node--it must be a root + * node. If newRoot is ^(nil x) return x as newRoot. + * + * Be advised that it's ok for newRoot to point at oldRoot's + * children; i.e., you don't have to copy the list. We are + * constructing these nodes so we should have this control for + * efficiency. + * </remarks> + */ + object BecomeRoot( object newRoot, object oldRoot ); + + /** <summary> + * Given the root of the subtree created for this rule, post process + * it to do any simplifications or whatever you want. A required + * behavior is to convert ^(nil singleSubtree) to singleSubtree + * as the setting of start/stop indexes relies on a single non-nil root + * for non-flat trees. + * </summary> + * + * <remarks> + * Flat trees such as for lists like "idlist : ID+ ;" are left alone + * unless there is only one ID. For a list, the start/stop indexes + * are set in the nil node. + * + * This method is executed after all rule tree construction and right + * before setTokenBoundaries(). + * </remarks> + */ + object RulePostProcessing( object root ); + + /** <summary>For identifying trees.</summary> + * + * <remarks> + * How to identify nodes so we can say "add node to a prior node"? + * Even becomeRoot is an issue. Use System.identityHashCode(node) + * usually. + * </remarks> + */ + int GetUniqueID( object node ); + + + // R e w r i t e R u l e s + + /** <summary> + * Create a node for newRoot make it the root of oldRoot. + * If oldRoot is a nil root, just copy or move the children to newRoot. + * If not a nil root, make oldRoot a child of newRoot. + * </summary> + * + * <returns> + * Return node created for newRoot. + * </returns> + * + * <remarks> + * Be advised: when debugging ASTs, the DebugTreeAdaptor manually + * calls create(Token child) and then plain becomeRoot(node, node) + * because it needs to trap calls to create, but it can't since it delegates + * to not inherits from the TreeAdaptor. + * </remarks> + */ + object BecomeRoot( IToken newRoot, object oldRoot ); + + /** <summary> + * Create a new node derived from a token, with a new token type. + * This is invoked from an imaginary node ref on right side of a + * rewrite rule as IMAG[$tokenLabel]. + * </summary> + * + * <remarks> + * This should invoke createToken(Token). + * </remarks> + */ + object Create( int tokenType, IToken fromToken ); + + /** <summary> + * Same as create(tokenType,fromToken) except set the text too. + * This is invoked from an imaginary node ref on right side of a + * rewrite rule as IMAG[$tokenLabel, "IMAG"]. + * </summary> + * + * <remarks> + * This should invoke createToken(Token). + * </remarks> + */ + object Create( int tokenType, IToken fromToken, string text ); + + /** <summary> + * Create a new node derived from a token, with a new token type. + * This is invoked from an imaginary node ref on right side of a + * rewrite rule as IMAG["IMAG"]. + * </summary> + * + * <remarks> + * This should invoke createToken(int,String). + * </remarks> + */ + object Create( int tokenType, string text ); + + #endregion + + + #region Content + + /** <summary>For tree parsing, I need to know the token type of a node</summary> */ + int GetType( object t ); + + /** <summary>Node constructors can set the type of a node</summary> */ + void SetType( object t, int type ); + + string GetText( object t ); + + /** <summary>Node constructors can set the text of a node</summary> */ + void SetText( object t, string text ); + + /** <summary> + * Return the token object from which this node was created. + * Currently used only for printing an error message. + * The error display routine in BaseRecognizer needs to + * display where the input the error occurred. If your + * tree of limitation does not store information that can + * lead you to the token, you can create a token filled with + * the appropriate information and pass that back. See + * BaseRecognizer.getErrorMessage(). + * </summary> + */ + IToken GetToken( object t ); + + /** <summary> + * Where are the bounds in the input token stream for this node and + * all children? Each rule that creates AST nodes will call this + * method right before returning. Flat trees (i.e., lists) will + * still usually have a nil root node just to hold the children list. + * That node would contain the start/stop indexes then. + * </summary> + */ + void SetTokenBoundaries( object t, IToken startToken, IToken stopToken ); + + /** <summary>Get the token start index for this subtree; return -1 if no such index</summary> */ + int GetTokenStartIndex( object t ); + + /** <summary>Get the token stop index for this subtree; return -1 if no such index</summary> */ + int GetTokenStopIndex( object t ); + + #endregion + + + #region Navigation / Tree Parsing + + /** <summary>Get a child 0..n-1 node</summary> */ + object GetChild( object t, int i ); + + /** <summary>Set ith child (0..n-1) to t; t must be non-null and non-nil node</summary> */ + void SetChild( object t, int i, object child ); + + /** <summary>Remove ith child and shift children down from right.</summary> */ + object DeleteChild( object t, int i ); + + /** <summary>How many children? If 0, then this is a leaf node</summary> */ + int GetChildCount( object t ); + + /** <summary> + * Who is the parent node of this node; if null, implies node is root. + * If your node type doesn't handle this, it's ok but the tree rewrites + * in tree parsers need this functionality. + * </summary> + */ + object GetParent( object t ); + void SetParent( object t, object parent ); + + /** <summary> + * What index is this node in the child list? Range: 0..n-1 + * If your node type doesn't handle this, it's ok but the tree rewrites + * in tree parsers need this functionality. + * </summary> + */ + int GetChildIndex( object t ); + void SetChildIndex( object t, int index ); + + /** <summary> + * Replace from start to stop child index of parent with t, which might + * be a list. Number of children may be different after this call. + * </summary> + * + * <remarks> + * If parent is null, don't do anything; must be at root of overall tree. + * Can't replace whatever points to the parent externally. Do nothing. + * </remarks> + */ + void ReplaceChildren( object parent, int startChildIndex, int stopChildIndex, object t ); + + #endregion + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeNodeStream.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeNodeStream.cs new file mode 100644 index 0000000..b133f39 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeNodeStream.cs @@ -0,0 +1,144 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + /** <summary>A stream of tree nodes, accessing nodes from a tree of some kind</summary> */ + public interface ITreeNodeStream : IIntStream + { + /** <summary> + * Get a tree node at an absolute index i; 0..n-1. + * If you don't want to buffer up nodes, then this method makes no + * sense for you. + * </summary> + */ + object this[int i] + { + get; + } + + /** <summary> + * Get tree node at current input pointer + i ahead where i=1 is next node. + * i<0 indicates nodes in the past. So LT(-1) is previous node, but + * implementations are not required to provide results for k < -1. + * LT(0) is undefined. For i>=n, return null. + * Return null for LT(0) and any index that results in an absolute address + * that is negative. + * </summary> + * + * <remarks> + * This is analogus to the LT() method of the TokenStream, but this + * returns a tree node instead of a token. Makes code gen identical + * for both parser and tree grammars. :) + * </remarks> + */ + object LT( int k ); + + /** <summary> + * Where is this stream pulling nodes from? This is not the name, but + * the object that provides node objects. + * </summary> + */ + object TreeSource + { + get; + } + + /** <summary> + * If the tree associated with this stream was created from a TokenStream, + * you can specify it here. Used to do rule $text attribute in tree + * parser. Optional unless you use tree parser rule text attribute + * or output=template and rewrite=true options. + * </summary> + */ + ITokenStream TokenStream + { + get; + } + + /** <summary> + * What adaptor can tell me how to interpret/navigate nodes and + * trees. E.g., get text of a node. + * </summary> + */ + ITreeAdaptor TreeAdaptor + { + get; + } + + /** <summary> + * As we flatten the tree, we use UP, DOWN nodes to represent + * the tree structure. When debugging we need unique nodes + * so we have to instantiate new ones. When doing normal tree + * parsing, it's slow and a waste of memory to create unique + * navigation nodes. Default should be false; + * </summary> + */ + bool UniqueNavigationNodes + { + get; + set; + } + + /** <summary> + * Return the text of all nodes from start to stop, inclusive. + * If the stream does not buffer all the nodes then it can still + * walk recursively from start until stop. You can always return + * null or "" too, but users should not access $ruleLabel.text in + * an action of course in that case. + * </summary> + */ + string ToString( object start, object stop ); + + + #region REWRITING TREES (used by tree parser) + + /** <summary> + * Replace from start to stop child index of parent with t, which might + * be a list. Number of children may be different + * after this call. The stream is notified because it is walking the + * tree and might need to know you are monkeying with the underlying + * tree. Also, it might be able to modify the node stream to avoid + * restreaming for future phases. + * </summary> + * + * <remarks> + * If parent is null, don't do anything; must be at root of overall tree. + * Can't replace whatever points to the parent externally. Do nothing. + * </remarks> + */ + void ReplaceChildren( object parent, int startChildIndex, int stopChildIndex, object t ); + + #endregion + + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeVisitorAction.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeVisitorAction.cs new file mode 100644 index 0000000..826f6be --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ITreeVisitorAction.cs @@ -0,0 +1,88 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + /** <summary> + * How to execute code for node t when a visitor visits node t. Execute + * pre() before visiting children and execute post() after visiting children. + * </summary> + */ + public interface ITreeVisitorAction + { + /** <summary> + * Execute an action before visiting children of t. Return t or + * a rewritten t. It is up to the visitor to decide what to do + * with the return value. Children of returned value will be + * visited if using TreeVisitor.visit(). + * </summary> + */ + object Pre( object t ); + + /** <summary> + * Execute an action after visiting children of t. Return t or + * a rewritten t. It is up to the visitor to decide what to do + * with the return value. + * </summary> + */ + object Post( object t ); + } + + public class TreeVisitorAction + : ITreeVisitorAction + { + System.Func<object, object> _preAction; + System.Func<object, object> _postAction; + + public TreeVisitorAction( System.Func<object, object> preAction, System.Func<object, object> postAction ) + { + _preAction = preAction; + _postAction = postAction; + } + + public object Pre( object t ) + { + if ( _preAction != null ) + return _preAction( t ); + + return t; + } + + public object Post( object t ) + { + if ( _postAction != null ) + return _postAction( t ); + + return t; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ParseTree.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ParseTree.cs new file mode 100644 index 0000000..e7031fc --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/ParseTree.cs @@ -0,0 +1,167 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + using System.Collections.Generic; + + using StringBuilder = System.Text.StringBuilder; + + /** <summary> + * A record of the rules used to match a token sequence. The tokens + * end up as the leaves of this tree and rule nodes are the interior nodes. + * This really adds no functionality, it is just an alias for CommonTree + * that is more meaningful (specific) and holds a String to display for a node. + * </summary> + */ + [System.Serializable] + public class ParseTree : BaseTree + { + public object payload; + public List<IToken> hiddenTokens; + + public ParseTree( object label ) + { + this.payload = label; + } + + #region Properties + public override string Text + { + get + { + return ToString(); + } + set + { + } + } + public override int TokenStartIndex + { + get + { + return 0; + } + set + { + } + } + public override int TokenStopIndex + { + get + { + return 0; + } + set + { + } + } + public override int Type + { + get + { + return 0; + } + set + { + } + } + #endregion + + public override ITree DupNode() + { + return null; + } + + public override string ToString() + { + if ( payload is IToken ) + { + IToken t = (IToken)payload; + if ( t.Type == TokenConstants.EOF ) + { + return "<EOF>"; + } + return t.Text; + } + return payload.ToString(); + } + + /** <summary> + * Emit a token and all hidden nodes before. EOF node holds all + * hidden tokens after last real token. + * </summary> + */ + public virtual string ToStringWithHiddenTokens() + { + StringBuilder buf = new StringBuilder(); + if ( hiddenTokens != null ) + { + for ( int i = 0; i < hiddenTokens.Count; i++ ) + { + IToken hidden = (IToken)hiddenTokens[i]; + buf.Append( hidden.Text ); + } + } + string nodeText = this.ToString(); + if ( !nodeText.Equals( "<EOF>" ) ) + buf.Append( nodeText ); + return buf.ToString(); + } + + /** <summary> + * Print out the leaves of this tree, which means printing original + * input back out. + * </summary> + */ + public virtual string ToInputString() + { + StringBuilder buf = new StringBuilder(); + _ToStringLeaves( buf ); + return buf.ToString(); + } + + public virtual void _ToStringLeaves( StringBuilder buf ) + { + if ( payload is IToken ) + { // leaf node token? + buf.Append( this.ToStringWithHiddenTokens() ); + return; + } + for ( int i = 0; children != null && i < children.Count; i++ ) + { + ParseTree t = (ParseTree)children[i]; + t._ToStringLeaves( buf ); + } + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteCardinalityException.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteCardinalityException.cs new file mode 100644 index 0000000..87cecd7 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteCardinalityException.cs @@ -0,0 +1,61 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + using Exception = System.Exception; + + /** <summary> + * Base class for all exceptions thrown during AST rewrite construction. + * This signifies a case where the cardinality of two or more elements + * in a subrule are different: (ID INT)+ where |ID|!=|INT| + * </summary> + */ + [System.Serializable] + public class RewriteCardinalityException : Exception + { + public string elementDescription; + + public RewriteCardinalityException( string elementDescription ) + { + this.elementDescription = elementDescription; + } + + public override string Message + { + get + { + return elementDescription; + } + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteEarlyExitException.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteEarlyExitException.cs new file mode 100644 index 0000000..af42e55 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteEarlyExitException.cs @@ -0,0 +1,50 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + + /** <summary>No elements within a (...)+ in a rewrite rule</summary> */ + [System.Serializable] + public class RewriteEarlyExitException : RewriteCardinalityException + { + public RewriteEarlyExitException() + : base( null ) + { + } + public RewriteEarlyExitException( string elementDescription ) + : base( elementDescription ) + { + } + + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteEmptyStreamException.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteEmptyStreamException.cs new file mode 100644 index 0000000..95be1d2 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteEmptyStreamException.cs @@ -0,0 +1,45 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + + /** <summary>Ref to ID or expr but no tokens in ID stream or subtrees in expr stream</summary> */ + [System.Serializable] + public class RewriteEmptyStreamException : RewriteCardinalityException + { + public RewriteEmptyStreamException( string elementDescription ) + : base( elementDescription ) + { + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleElementStream.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleElementStream.cs new file mode 100644 index 0000000..59b4342 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleElementStream.cs @@ -0,0 +1,253 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + using System.Collections.Generic; + using IList = System.Collections.IList; + + /** <summary> + * A generic list of elements tracked in an alternative to be used in + * a -> rewrite rule. We need to subclass to fill in the next() method, + * which returns either an AST node wrapped around a token payload or + * an existing subtree. + * </summary> + * + * <remarks> + * Once you start next()ing, do not try to add more elements. It will + * break the cursor tracking I believe. + * + * TODO: add mechanism to detect/puke on modification after reading from stream + * </remarks> + * + * <see cref="RewriteRuleSubtreeStream"/> + * <see cref="RewriteRuleTokenStream"/> + */ + [System.Serializable] + public abstract class RewriteRuleElementStream + { + /** <summary> + * Cursor 0..n-1. If singleElement!=null, cursor is 0 until you next(), + * which bumps it to 1 meaning no more elements. + * </summary> + */ + protected int cursor = 0; + + /** <summary>Track single elements w/o creating a list. Upon 2nd add, alloc list */ + protected object singleElement; + + /** <summary>The list of tokens or subtrees we are tracking */ + protected IList elements; + + /** <summary>Once a node / subtree has been used in a stream, it must be dup'd + * from then on. Streams are reset after subrules so that the streams + * can be reused in future subrules. So, reset must set a dirty bit. + * If dirty, then next() always returns a dup. + * + * I wanted to use "naughty bit" here, but couldn't think of a way + * to use "naughty". + */ + protected bool dirty = false; + + /** <summary>The element or stream description; usually has name of the token or + * rule reference that this list tracks. Can include rulename too, but + * the exception would track that info. + */ + protected string elementDescription; + protected ITreeAdaptor adaptor; + + public RewriteRuleElementStream( ITreeAdaptor adaptor, string elementDescription ) + { + this.elementDescription = elementDescription; + this.adaptor = adaptor; + } + + /** <summary>Create a stream with one element</summary> */ + public RewriteRuleElementStream( ITreeAdaptor adaptor, string elementDescription, object oneElement ) + : this( adaptor, elementDescription ) + { + Add( oneElement ); + } + + /** <summary>Create a stream, but feed off an existing list</summary> */ + public RewriteRuleElementStream( ITreeAdaptor adaptor, string elementDescription, IList elements ) + : this( adaptor, elementDescription ) + { + this.singleElement = null; + this.elements = elements; + } + + /** <summary> + * Reset the condition of this stream so that it appears we have + * not consumed any of its elements. Elements themselves are untouched. + * Once we reset the stream, any future use will need duplicates. Set + * the dirty bit. + * </summary> + */ + public virtual void Reset() + { + cursor = 0; + dirty = true; + } + + public virtual void Add( object el ) + { + //System.out.println("add '"+elementDescription+"' is "+el); + if ( el == null ) + { + return; + } + if ( elements != null ) + { // if in list, just add + elements.Add( el ); + return; + } + if ( singleElement == null ) + { // no elements yet, track w/o list + singleElement = el; + return; + } + // adding 2nd element, move to list + elements = new List<object>( 5 ); + elements.Add( singleElement ); + singleElement = null; + elements.Add( el ); + } + + /** <summary> + * Return the next element in the stream. If out of elements, throw + * an exception unless size()==1. If size is 1, then return elements[0]. + * Return a duplicate node/subtree if stream is out of elements and + * size==1. If we've already used the element, dup (dirty bit set). + * </summary> + */ + public virtual object NextTree() + { + int n = Count; + if ( dirty || ( cursor >= n && n == 1 ) ) + { + // if out of elements and size is 1, dup + object el = _Next(); + return Dup( el ); + } + // test size above then fetch + object el2 = _Next(); + return el2; + } + + /** <summary> + * Do the work of getting the next element, making sure that it's + * a tree node or subtree. Deal with the optimization of single- + * element list versus list of size > 1. Throw an exception + * if the stream is empty or we're out of elements and size>1. + * protected so you can override in a subclass if necessary. + * </summary> + */ + protected virtual object _Next() + { + int n = Count; + if ( n == 0 ) + { + throw new RewriteEmptyStreamException( elementDescription ); + } + if ( cursor >= n ) + { // out of elements? + if ( n == 1 ) + { // if size is 1, it's ok; return and we'll dup + return ToTree( singleElement ); + } + // out of elements and size was not 1, so we can't dup + throw new RewriteCardinalityException( elementDescription ); + } + // we have elements + if ( singleElement != null ) + { + cursor++; // move cursor even for single element list + return ToTree( singleElement ); + } + // must have more than one in list, pull from elements + object o = ToTree( elements[cursor] ); + cursor++; + return o; + } + + /** <summary> + * When constructing trees, sometimes we need to dup a token or AST + * subtree. Dup'ing a token means just creating another AST node + * around it. For trees, you must call the adaptor.dupTree() unless + * the element is for a tree root; then it must be a node dup. + * </summary> + */ + protected abstract object Dup( object el ); + + /** <summary> + * Ensure stream emits trees; tokens must be converted to AST nodes. + * AST nodes can be passed through unmolested. + * </summary> + */ + protected virtual object ToTree( object el ) + { + return el; + } + + public virtual bool HasNext + { + get + { + return ( singleElement != null && cursor < 1 ) || + ( elements != null && cursor < elements.Count ); + } + } + + public virtual int Count + { + get + { + int n = 0; + if ( singleElement != null ) + { + n = 1; + } + if ( elements != null ) + { + return elements.Count; + } + return n; + } + } + + public virtual string GetDescription() + { + return elementDescription; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleNodeStream.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleNodeStream.cs new file mode 100644 index 0000000..7e6fa88 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleNodeStream.cs @@ -0,0 +1,81 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + using IList = System.Collections.IList; + using NotSupportedException = System.NotSupportedException; + + /** <summary> + * Queues up nodes matched on left side of -> in a tree parser. This is + * the analog of RewriteRuleTokenStream for normal parsers. + * </summary> + */ + [System.Serializable] + public class RewriteRuleNodeStream : RewriteRuleElementStream + { + + public RewriteRuleNodeStream( ITreeAdaptor adaptor, string elementDescription ) + : base( adaptor, elementDescription ) + { + } + + /** <summary>Create a stream with one element</summary> */ + public RewriteRuleNodeStream( ITreeAdaptor adaptor, string elementDescription, object oneElement ) + : base( adaptor, elementDescription, oneElement ) + { + } + + /** <summary>Create a stream, but feed off an existing list</summary> */ + public RewriteRuleNodeStream( ITreeAdaptor adaptor, string elementDescription, IList elements ) + : base( adaptor, elementDescription, elements ) + { + } + + public virtual object NextNode() + { + return _Next(); + } + + protected override object ToTree( object el ) + { + return adaptor.DupNode( el ); + } + + protected override object Dup( object el ) + { + // we dup every node, so don't have to worry about calling dup; short- + // circuited next() so it doesn't call. + throw new NotSupportedException( "dup can't be called for a node stream." ); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleSubtreeStream.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleSubtreeStream.cs new file mode 100644 index 0000000..ccae029 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleSubtreeStream.cs @@ -0,0 +1,95 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + using IList = System.Collections.IList; + + [System.Serializable] + public class RewriteRuleSubtreeStream : RewriteRuleElementStream + { + + public RewriteRuleSubtreeStream( ITreeAdaptor adaptor, string elementDescription ) + : base( adaptor, elementDescription ) + { + } + + /** <summary>Create a stream with one element</summary> */ + public RewriteRuleSubtreeStream( ITreeAdaptor adaptor, string elementDescription, object oneElement ) + : base( adaptor, elementDescription, oneElement ) + { + } + + /** <summary>Create a stream, but feed off an existing list</summary> */ + public RewriteRuleSubtreeStream( ITreeAdaptor adaptor, string elementDescription, IList elements ) + : base( adaptor, elementDescription, elements ) + { + } + + /** <summary> + * Treat next element as a single node even if it's a subtree. + * This is used instead of next() when the result has to be a + * tree root node. Also prevents us from duplicating recently-added + * children; e.g., ^(type ID)+ adds ID to type and then 2nd iteration + * must dup the type node, but ID has been added. + * </summary> + * + * <remarks> + * Referencing a rule result twice is ok; dup entire tree as + * we can't be adding trees as root; e.g., expr expr. + * + * Hideous code duplication here with super.next(). Can't think of + * a proper way to refactor. This needs to always call dup node + * and super.next() doesn't know which to call: dup node or dup tree. + * </remarks> + */ + public virtual object NextNode() + { + int n = Count; + if ( dirty || ( cursor >= n && n == 1 ) ) + { + // if out of elements and size is 1, dup (at most a single node + // since this is for making root nodes). + object el = _Next(); + return adaptor.DupNode( el ); + } + // test size above then fetch + object el2 = _Next(); + return el2; + } + + protected override object Dup( object el ) + { + return adaptor.DupTree( el ); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleTokenStream.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleTokenStream.cs new file mode 100644 index 0000000..0d429cf --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/RewriteRuleTokenStream.cs @@ -0,0 +1,86 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + using IList = System.Collections.IList; + using NotSupportedException = System.NotSupportedException; + + [System.Serializable] + public class RewriteRuleTokenStream : RewriteRuleElementStream + { + + public RewriteRuleTokenStream( ITreeAdaptor adaptor, string elementDescription ) + : base( adaptor, elementDescription ) + { + } + + /** <summary>Create a stream with one element</summary> */ + public RewriteRuleTokenStream( ITreeAdaptor adaptor, string elementDescription, object oneElement ) + : base( adaptor, elementDescription, oneElement ) + { + } + + /** <summary>Create a stream, but feed off an existing list</summary> */ + public RewriteRuleTokenStream( ITreeAdaptor adaptor, string elementDescription, IList elements ) + : base( adaptor, elementDescription, elements ) + { + } + + /** <summary>Get next token from stream and make a node for it</summary> */ + public virtual object NextNode() + { + IToken t = (IToken)_Next(); + return adaptor.Create( t ); + } + + public virtual IToken NextToken() + { + return (IToken)_Next(); + } + + /** <summary> + * Don't convert to a tree unless they explicitly call nextTree. + * This way we can do hetero tree nodes in rewrite. + * </summary> + */ + protected override object ToTree( object el ) + { + return el; + } + + protected override object Dup( object el ) + { + throw new NotSupportedException( "dup can't be called for a token stream." ); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeConstants.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeConstants.cs new file mode 100644 index 0000000..4112bf0 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeConstants.cs @@ -0,0 +1,39 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + public static class TreeConstants + { + public static readonly ITree INVALID_NODE = new CommonTree( TokenConstants.INVALID_TOKEN ); + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeFilter.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeFilter.cs new file mode 100644 index 0000000..0fe7bd6 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeFilter.cs @@ -0,0 +1,104 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + public class TreeFilter : TreeParser + { + protected ITokenStream originalTokenStream; + protected ITreeAdaptor originalAdaptor; + + System.Action topdown_action; + System.Action bottomup_action; + + public TreeFilter( ITreeNodeStream input ) + : base( input ) + { + topdown_action = () => Topdown(); + bottomup_action = () => Bottomup(); + } + public TreeFilter( ITreeNodeStream input, RecognizerSharedState state ) + : base( input, state ) + { + originalAdaptor = input.TreeAdaptor; + originalTokenStream = input.TokenStream; + topdown_action = () => Topdown(); + bottomup_action = () => Bottomup(); + } + + public virtual void ApplyOnce( object t, System.Action whichRule ) + { + if ( t == null ) + return; + + try + { + // share TreeParser object but not parsing-related state + state = new RecognizerSharedState(); + input = new CommonTreeNodeStream( originalAdaptor, t ); + ( (CommonTreeNodeStream)input ).TokenStream = originalTokenStream; + BacktrackingLevel = 1; + whichRule(); + BacktrackingLevel = 0; + } + catch ( RecognitionException ) + { + } + } + + public virtual void Downup( object t ) + { + TreeVisitor v = new TreeVisitor( new CommonTreeAdaptor() ); + System.Func<object, object> pre = ( o ) => + { + ApplyOnce( o, topdown_action ); + return o; + }; + System.Func<object, object> post = ( o ) => + { + ApplyOnce( o, topdown_action ); + return o; + }; + v.Visit( t, pre, post ); + } + + // methods the downup strategy uses to do the up and down rules. + // to override, just define tree grammar rule topdown and turn on + // filter=true. + public virtual void Topdown() + { + } + public virtual void Bottomup() + { + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeIterator.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeIterator.cs new file mode 100644 index 0000000..c83375f --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeIterator.cs @@ -0,0 +1,177 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + using System.Collections.Generic; + + /** Return a node stream from a doubly-linked tree whose nodes + * know what child index they are. No remove() is supported. + * + * Emit navigation nodes (DOWN, UP, and EOF) to let show tree structure. + */ + public class TreeIterator : IEnumerator<object> + { + protected ITreeAdaptor adaptor; + protected object root; + protected object tree; + protected bool firstTime = true; + + // navigation nodes to return during walk and at end + public object up; + public object down; + public object eof; + + /** If we emit UP/DOWN nodes, we need to spit out multiple nodes per + * next() call. + */ + protected Queue<object> nodes; + + public TreeIterator( object tree ) + : this( new CommonTreeAdaptor(), tree ) + { + } + + public TreeIterator( ITreeAdaptor adaptor, object tree ) + { + this.adaptor = adaptor; + this.tree = tree; + this.root = tree; + nodes = new Queue<object>(); + down = adaptor.Create( TokenConstants.DOWN, "DOWN" ); + up = adaptor.Create( TokenConstants.UP, "UP" ); + eof = adaptor.Create( TokenConstants.EOF, "EOF" ); + } + + #region IEnumerator<object> Members + + public object Current + { + get; + private set; + } + + #endregion + + #region IDisposable Members + + public void Dispose() + { + } + + #endregion + + #region IEnumerator Members + + public bool MoveNext() + { + if ( firstTime ) + { + // initial condition + firstTime = false; + if ( adaptor.GetChildCount( tree ) == 0 ) + { + // single node tree (special) + nodes.Enqueue( eof ); + } + Current = tree; + } + else + { + // if any queued up, use those first + if ( nodes != null && nodes.Count > 0 ) + { + Current = nodes.Dequeue(); + } + else + { + // no nodes left? + if ( tree == null ) + { + Current = eof; + } + else + { + // next node will be child 0 if any children + if ( adaptor.GetChildCount( tree ) > 0 ) + { + tree = adaptor.GetChild( tree, 0 ); + nodes.Enqueue( tree ); // real node is next after DOWN + Current = down; + } + else + { + // if no children, look for next sibling of tree or ancestor + object parent = adaptor.GetParent( tree ); + // while we're out of siblings, keep popping back up towards root + while ( parent != null && + adaptor.GetChildIndex( tree ) + 1 >= adaptor.GetChildCount( parent ) ) + { + nodes.Enqueue( up ); // we're moving back up + tree = parent; + parent = adaptor.GetParent( tree ); + } + + // no nodes left? + if ( parent == null ) + { + tree = null; // back at root? nothing left then + nodes.Enqueue( eof ); // add to queue, might have UP nodes in there + Current = nodes.Dequeue(); + } + else + { + // must have found a node with an unvisited sibling + // move to it and return it + int nextSiblingIndex = adaptor.GetChildIndex( tree ) + 1; + tree = adaptor.GetChild( parent, nextSiblingIndex ); + nodes.Enqueue( tree ); // add to queue, might have UP nodes in there + Current = nodes.Dequeue(); + } + } + } + } + } + + return Current != eof; + } + + public void Reset() + { + firstTime = true; + tree = root; + nodes.Clear(); + } + + #endregion + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeParser.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeParser.cs new file mode 100644 index 0000000..dade417 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeParser.cs @@ -0,0 +1,205 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + using Regex = System.Text.RegularExpressions.Regex; + using RegexOptions = System.Text.RegularExpressions.RegexOptions; + + /** <summary> + * A parser for a stream of tree nodes. "tree grammars" result in a subclass + * of this. All the error reporting and recovery is shared with Parser via + * the BaseRecognizer superclass. + * </summary> + */ + public class TreeParser : BaseRecognizer + { + public const int DOWN = TokenConstants.DOWN; + public const int UP = TokenConstants.UP; + + // precompiled regex used by inContext + static string dotdot = ".*[^.]\\.\\.[^.].*"; + static string doubleEtc = ".*\\.\\.\\.\\s+\\.\\.\\..*"; + static Regex dotdotPattern = new Regex( dotdot, RegexOptions.Compiled ); + static Regex doubleEtcPattern = new Regex( doubleEtc, RegexOptions.Compiled ); + + protected ITreeNodeStream input; + + public TreeParser( ITreeNodeStream input ) + : base() // highlight that we go to super to set state object + { + SetTreeNodeStream( input ); + } + + public TreeParser( ITreeNodeStream input, RecognizerSharedState state ) + : base( state ) // share the state object with another parser + { + SetTreeNodeStream( input ); + } + + public override void Reset() + { + base.Reset(); // reset all recognizer state variables + if ( input != null ) + { + input.Seek( 0 ); // rewind the input + } + } + + /** <summary>Set the input stream</summary> */ + public virtual void SetTreeNodeStream( ITreeNodeStream input ) + { + this.input = input; + } + + public virtual ITreeNodeStream GetTreeNodeStream() + { + return input; + } + + public override string SourceName + { + get + { + return input.SourceName; + } + } + + protected override object GetCurrentInputSymbol( IIntStream input ) + { + return ( (ITreeNodeStream)input ).LT( 1 ); + } + + protected override object GetMissingSymbol( IIntStream input, + RecognitionException e, + int expectedTokenType, + BitSet follow ) + { + string tokenText = + "<missing " + GetTokenNames()[expectedTokenType] + ">"; + return new CommonTree( new CommonToken( expectedTokenType, tokenText ) ); + } + + /** <summary> + * Match '.' in tree parser has special meaning. Skip node or + * entire tree if node has children. If children, scan until + * corresponding UP node. + * </summary> + */ + public override void MatchAny( IIntStream ignore ) + { + state.errorRecovery = false; + state.failed = false; + // always consume the current node + input.Consume(); + // if the next node is DOWN, then the current node is a subtree: + // skip to corresponding UP. must count nesting level to get right UP + int look = input.LA( 1 ); + if ( look == DOWN ) + { + input.Consume(); + int level = 1; + while ( level > 0 ) + { + switch ( input.LA( 1 ) ) + { + case DOWN: + level++; + break; + case UP: + level--; + break; + case TokenConstants.EOF: + return; + default: + break; + } + input.Consume(); + } + } + } + + /** <summary> + * We have DOWN/UP nodes in the stream that have no line info; override. + * plus we want to alter the exception type. Don't try to recover + * from tree parser errors inline... + * </summary> + */ + protected override object RecoverFromMismatchedToken( IIntStream input, int ttype, BitSet follow ) + { + throw new MismatchedTreeNodeException( ttype, (ITreeNodeStream)input ); + } + + /** <summary> + * Prefix error message with the grammar name because message is + * always intended for the programmer because the parser built + * the input tree not the user. + * </summary> + */ + public override string GetErrorHeader( RecognitionException e ) + { + return GrammarFileName + ": node from " + + ( e.approximateLineInfo ? "after " : "" ) + "line " + e.line + ":" + e.charPositionInLine; + } + + /** <summary> + * Tree parsers parse nodes they usually have a token object as + * payload. Set the exception token and do the default behavior. + * </summary> + */ + public override string GetErrorMessage( RecognitionException e, string[] tokenNames ) + { + if ( this is TreeParser ) + { + ITreeAdaptor adaptor = ( (ITreeNodeStream)e.input ).TreeAdaptor; + e.token = adaptor.GetToken( e.node ); + if ( e.token == null ) + { // could be an UP/DOWN node + e.token = new CommonToken( adaptor.GetType( e.node ), + adaptor.GetText( e.node ) ); + } + } + return base.GetErrorMessage( e, tokenNames ); + } + + public virtual void TraceIn( string ruleName, int ruleIndex ) + { + base.TraceIn( ruleName, ruleIndex, input.LT( 1 ) ); + } + + public virtual void TraceOut( string ruleName, int ruleIndex ) + { + base.TraceOut( ruleName, ruleIndex, input.LT( 1 ) ); + } + + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreePatternLexer.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreePatternLexer.cs new file mode 100644 index 0000000..f4f60bb --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreePatternLexer.cs @@ -0,0 +1,162 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + using StringBuilder = System.Text.StringBuilder; + + public class TreePatternLexer + { + public const int EOF = -1; + public const int BEGIN = 1; + public const int END = 2; + public const int ID = 3; + public const int ARG = 4; + public const int PERCENT = 5; + public const int COLON = 6; + public const int DOT = 7; + + /** <summary>The tree pattern to lex like "(A B C)"</summary> */ + protected string pattern; + + /** <summary>Index into input string</summary> */ + protected int p = -1; + + /** <summary>Current char</summary> */ + protected int c; + + /** <summary>How long is the pattern in char?</summary> */ + protected int n; + + /** <summary>Set when token type is ID or ARG (name mimics Java's StreamTokenizer)</summary> */ + public StringBuilder sval = new StringBuilder(); + + public bool error = false; + + public TreePatternLexer( string pattern ) + { + this.pattern = pattern; + this.n = pattern.Length; + Consume(); + } + + public virtual int NextToken() + { + sval.Length = 0; // reset, but reuse buffer + while ( c != EOF ) + { + if ( c == ' ' || c == '\n' || c == '\r' || c == '\t' ) + { + Consume(); + continue; + } + if ( ( c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ) || c == '_' ) + { + sval.Append( (char)c ); + Consume(); + while ( ( c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ) || + ( c >= '0' && c <= '9' ) || c == '_' ) + { + sval.Append( (char)c ); + Consume(); + } + return ID; + } + if ( c == '(' ) + { + Consume(); + return BEGIN; + } + if ( c == ')' ) + { + Consume(); + return END; + } + if ( c == '%' ) + { + Consume(); + return PERCENT; + } + if ( c == ':' ) + { + Consume(); + return COLON; + } + if ( c == '.' ) + { + Consume(); + return DOT; + } + if ( c == '[' ) + { // grab [x] as a string, returning x + Consume(); + while ( c != ']' ) + { + if ( c == '\\' ) + { + Consume(); + if ( c != ']' ) + { + sval.Append( '\\' ); + } + sval.Append( (char)c ); + } + else + { + sval.Append( (char)c ); + } + Consume(); + } + Consume(); + return ARG; + } + Consume(); + error = true; + return EOF; + } + return EOF; + } + + protected virtual void Consume() + { + p++; + if ( p >= n ) + { + c = EOF; + } + else + { + c = pattern[p]; + } + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreePatternParser.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreePatternParser.cs new file mode 100644 index 0000000..3522be6 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreePatternParser.cs @@ -0,0 +1,186 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + using Console = System.Console; + + public class TreePatternParser + { + protected TreePatternLexer tokenizer; + protected int ttype; + protected TreeWizard wizard; + protected ITreeAdaptor adaptor; + + public TreePatternParser( TreePatternLexer tokenizer, TreeWizard wizard, ITreeAdaptor adaptor ) + { + this.tokenizer = tokenizer; + this.wizard = wizard; + this.adaptor = adaptor; + ttype = tokenizer.NextToken(); // kickstart + } + + public virtual object Pattern() + { + if ( ttype == TreePatternLexer.BEGIN ) + { + return ParseTree(); + } + else if ( ttype == TreePatternLexer.ID ) + { + object node = ParseNode(); + if ( ttype == TreePatternLexer.EOF ) + { + return node; + } + return null; // extra junk on end + } + return null; + } + + public virtual object ParseTree() + { + if ( ttype != TreePatternLexer.BEGIN ) + { + Console.Out.WriteLine( "no BEGIN" ); + return null; + } + ttype = tokenizer.NextToken(); + object root = ParseNode(); + if ( root == null ) + { + return null; + } + while ( ttype == TreePatternLexer.BEGIN || + ttype == TreePatternLexer.ID || + ttype == TreePatternLexer.PERCENT || + ttype == TreePatternLexer.DOT ) + { + if ( ttype == TreePatternLexer.BEGIN ) + { + object subtree = ParseTree(); + adaptor.AddChild( root, subtree ); + } + else + { + object child = ParseNode(); + if ( child == null ) + { + return null; + } + adaptor.AddChild( root, child ); + } + } + if ( ttype != TreePatternLexer.END ) + { + Console.Out.WriteLine( "no END" ); + return null; + } + ttype = tokenizer.NextToken(); + return root; + } + + public virtual object ParseNode() + { + // "%label:" prefix + string label = null; + if ( ttype == TreePatternLexer.PERCENT ) + { + ttype = tokenizer.NextToken(); + if ( ttype != TreePatternLexer.ID ) + { + return null; + } + label = tokenizer.sval.ToString(); + ttype = tokenizer.NextToken(); + if ( ttype != TreePatternLexer.COLON ) + { + return null; + } + ttype = tokenizer.NextToken(); // move to ID following colon + } + + // Wildcard? + if ( ttype == TreePatternLexer.DOT ) + { + ttype = tokenizer.NextToken(); + IToken wildcardPayload = new CommonToken( 0, "." ); + TreeWizard.TreePattern node = + new TreeWizard.WildcardTreePattern( wildcardPayload ); + if ( label != null ) + { + node.label = label; + } + return node; + } + + // "ID" or "ID[arg]" + if ( ttype != TreePatternLexer.ID ) + { + return null; + } + string tokenName = tokenizer.sval.ToString(); + ttype = tokenizer.NextToken(); + if ( tokenName.Equals( "nil" ) ) + { + return adaptor.Nil(); + } + string text = tokenName; + // check for arg + string arg = null; + if ( ttype == TreePatternLexer.ARG ) + { + arg = tokenizer.sval.ToString(); + text = arg; + ttype = tokenizer.NextToken(); + } + + // create node + int treeNodeType = wizard.GetTokenType( tokenName ); + if ( treeNodeType == TokenConstants.INVALID_TOKEN_TYPE ) + { + return null; + } + object node2; + node2 = adaptor.Create( treeNodeType, text ); + if ( label != null && node2.GetType() == typeof( TreeWizard.TreePattern ) ) + { + ( (TreeWizard.TreePattern)node2 ).label = label; + } + if ( arg != null && node2.GetType() == typeof( TreeWizard.TreePattern ) ) + { + ( (TreeWizard.TreePattern)node2 ).hasTextArg = true; + } + return node2; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeRewriter.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeRewriter.cs new file mode 100644 index 0000000..e5dcf99 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeRewriter.cs @@ -0,0 +1,123 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + using Console = System.Console; + + public class TreeRewriter : TreeParser + { + protected ITokenStream originalTokenStream; + protected ITreeAdaptor originalAdaptor; + + System.Func<TreeRuleReturnScope> topdown_func; + System.Func<TreeRuleReturnScope> bottomup_func; + + public TreeRewriter( ITreeNodeStream input ) + : base( input ) + { + topdown_func = () => Topdown(); + bottomup_func = () => Bottomup(); + } + public TreeRewriter( ITreeNodeStream input, RecognizerSharedState state ) + : base( input, state ) + { + originalAdaptor = input.TreeAdaptor; + originalTokenStream = input.TokenStream; + topdown_func = () => Topdown(); + bottomup_func = () => Bottomup(); + } + + public virtual object ApplyOnce( object t, System.Func<TreeRuleReturnScope> whichRule ) + { + if ( t == null ) + return null; + + try + { + // share TreeParser object but not parsing-related state + state = new RecognizerSharedState(); + input = new CommonTreeNodeStream( originalAdaptor, t ); + ( (CommonTreeNodeStream)input ).TokenStream = originalTokenStream; + BacktrackingLevel = 1; + TreeRuleReturnScope r = whichRule(); + BacktrackingLevel = 0; + if ( Failed ) + return t; + if ( r != null && !t.Equals( r.Tree ) && r.Tree != null ) + { // show any transformations + Console.Out.WriteLine( ( (CommonTree)t ).ToStringTree() + " -> " + + ( (CommonTree)r.Tree ).ToStringTree() ); + } + if ( r != null && r.Tree != null ) + return r.Tree; + else + return t; + } + catch ( RecognitionException ) + { + } + return t; + } + + public virtual object ApplyRepeatedly( object t, System.Func<TreeRuleReturnScope> whichRule ) + { + bool treeChanged = true; + while ( treeChanged ) + { + object u = ApplyOnce( t, whichRule ); + treeChanged = !t.Equals( u ); + t = u; + } + return t; + } + + public virtual object Downup( object t ) + { + TreeVisitor v = new TreeVisitor( new CommonTreeAdaptor() ); + t = v.Visit( t, ( o ) => ApplyOnce( o, topdown_func ), ( o ) => ApplyRepeatedly( o, bottomup_func ) ); + return t; + } + + // methods the downup strategy uses to do the up and down rules. + // to override, just define tree grammar rule topdown and turn on + // filter=true. + public virtual TreeRuleReturnScope Topdown() + { + return null; + } + public virtual TreeRuleReturnScope Bottomup() + { + return null; + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeRuleReturnScope.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeRuleReturnScope.cs new file mode 100644 index 0000000..5f08443 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeRuleReturnScope.cs @@ -0,0 +1,55 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + /** <summary> + * This is identical to the ParserRuleReturnScope except that + * the start property is a tree nodes not Token object + * when you are parsing trees. To be generic the tree node types + * have to be Object. + * </summary> + */ + [System.Serializable] + public class TreeRuleReturnScope : RuleReturnScope + { + /** <summary>First node or root node of tree matched for this rule.</summary> */ + public object start; + public override object Start + { + get + { + return start; + } + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeVisitor.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeVisitor.cs new file mode 100644 index 0000000..8450f85 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeVisitor.cs @@ -0,0 +1,82 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime.Tree +{ + /** <summary>Do a depth first walk of a tree, applying pre() and post() actions as we go.</summary> */ + public class TreeVisitor + { + protected ITreeAdaptor adaptor; + + public TreeVisitor( ITreeAdaptor adaptor ) + { + this.adaptor = adaptor; + } + public TreeVisitor() + : this( new CommonTreeAdaptor() ) + { + } + + /** <summary> + * Visit every node in tree t and trigger an action for each node + * before/after having visited all of its children. Bottom up walk. + * Execute both actions even if t has no children. Ignore return + * results from transforming children since they will have altered + * the child list of this node (their parent). Return result of + * applying post action to this node. + * </summary> + */ + public object Visit( object t, ITreeVisitorAction action ) + { + // System.out.println("visit "+((Tree)t).toStringTree()); + bool isNil = adaptor.IsNil( t ); + if ( action != null && !isNil ) + { + t = action.Pre( t ); // if rewritten, walk children of new t + } + int n = adaptor.GetChildCount( t ); + for ( int i = 0; i < n; i++ ) + { + object child = adaptor.GetChild( t, i ); + Visit( child, action ); + } + if ( action != null && !isNil ) + t = action.Post( t ); + return t; + } + + public object Visit( object t, System.Func<object, object> preAction, System.Func<object, object> postAction ) + { + return Visit( t, new TreeVisitorAction( preAction, postAction ) ); + } + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeWizard.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeWizard.cs new file mode 100644 index 0000000..e3b20e0 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/Tree/TreeWizard.cs @@ -0,0 +1,736 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// TODO: build indexes for wizard +//#define BUILD_INDEXES + +namespace Antlr.Runtime.Tree +{ + using System.Collections.Generic; + + using IList = System.Collections.IList; +#if BUILD_INDEXES + using IDictionary = System.Collections.IDictionary; +#endif + + /** <summary> + * Build and navigate trees with this object. Must know about the names + * of tokens so you have to pass in a map or array of token names (from which + * this class can build the map). I.e., Token DECL means nothing unless the + * class can translate it to a token type. + * </summary> + * + * <remarks> + * In order to create nodes and navigate, this class needs a TreeAdaptor. + * + * This class can build a token type -> node index for repeated use or for + * iterating over the various nodes with a particular type. + * + * This class works in conjunction with the TreeAdaptor rather than moving + * all this functionality into the adaptor. An adaptor helps build and + * navigate trees using methods. This class helps you do it with string + * patterns like "(A B C)". You can create a tree from that pattern or + * match subtrees against it. + * </remarks> + */ + public class TreeWizard + { + protected ITreeAdaptor adaptor; + protected IDictionary<string, int> tokenNameToTypeMap; + + public interface IContextVisitor + { + // TODO: should this be called visit or something else? + void Visit( object t, object parent, int childIndex, IDictionary<string, object> labels ); + } + + public abstract class Visitor : IContextVisitor + { + public virtual void Visit( object t, object parent, int childIndex, IDictionary<string, object> labels ) + { + Visit( t ); + } + public abstract void Visit( object t ); + } + + class ActionVisitor : Visitor + { + System.Action<object> _action; + + public ActionVisitor( System.Action<object> action ) + { + _action = action; + } + + public override void Visit( object t ) + { + _action( t ); + } + } + + /** <summary> + * When using %label:TOKENNAME in a tree for parse(), we must + * track the label. + * </summary> + */ + public class TreePattern : CommonTree + { + public string label; + public bool hasTextArg; + public TreePattern( IToken payload ) : + base( payload ) + { + } + public override string ToString() + { + if ( label != null ) + { + return "%" + label + ":"; //+ base.ToString(); + } + else + { + return base.ToString(); + } + } + } + + public class WildcardTreePattern : TreePattern + { + public WildcardTreePattern( IToken payload ) : + base( payload ) + { + } + } + + /** <summary>This adaptor creates TreePattern objects for use during scan()</summary> */ + public class TreePatternTreeAdaptor : CommonTreeAdaptor + { + public override object Create( IToken payload ) + { + return new TreePattern( payload ); + } + } + +#if BUILD_INDEXES + // TODO: build indexes for the wizard + + /** <summary> + * During fillBuffer(), we can make a reverse index from a set + * of token types of interest to the list of indexes into the + * node stream. This lets us convert a node pointer to a + * stream index semi-efficiently for a list of interesting + * nodes such as function definition nodes (you'll want to seek + * to their bodies for an interpreter). Also useful for doing + * dynamic searches; i.e., go find me all PLUS nodes. + * </summary> + */ + protected IDictionary<int, IList<int>> tokenTypeToStreamIndexesMap; + + /** <summary> + * If tokenTypesToReverseIndex set to INDEX_ALL then indexing + * occurs for all token types. + * </summary> + */ + public static readonly HashSet<int> INDEX_ALL = new HashSet<int>(); + + /** <summary> + * A set of token types user would like to index for faster lookup. + * If this is INDEX_ALL, then all token types are tracked. If null, + * then none are indexed. + * </summary> + */ + protected HashSet<int> tokenTypesToReverseIndex = null; +#endif + + public TreeWizard( ITreeAdaptor adaptor ) + { + this.adaptor = adaptor; + } + + public TreeWizard( ITreeAdaptor adaptor, IDictionary<string, int> tokenNameToTypeMap ) + { + this.adaptor = adaptor; + this.tokenNameToTypeMap = tokenNameToTypeMap; + } + + public TreeWizard( ITreeAdaptor adaptor, string[] tokenNames ) + { + this.adaptor = adaptor; + this.tokenNameToTypeMap = ComputeTokenTypes( tokenNames ); + } + + public TreeWizard( string[] tokenNames ) : + this( null, tokenNames ) + { + } + + /** <summary> + * Compute a Map<String, Integer> that is an inverted index of + * tokenNames (which maps int token types to names). + * </summary> + */ + public virtual IDictionary<string, int> ComputeTokenTypes( string[] tokenNames ) + { + IDictionary<string, int> m = new Dictionary<string, int>(); + if ( tokenNames == null ) + { + return m; + } + for ( int ttype = TokenConstants.MIN_TOKEN_TYPE; ttype < tokenNames.Length; ttype++ ) + { + string name = tokenNames[ttype]; + m[name] = ttype; + } + return m; + } + + /** <summary>Using the map of token names to token types, return the type.</summary> */ + public virtual int GetTokenType( string tokenName ) + { + if ( tokenNameToTypeMap == null ) + { + return TokenConstants.INVALID_TOKEN_TYPE; + } + + int value; + if ( tokenNameToTypeMap.TryGetValue( tokenName, out value ) ) + return value; + + return TokenConstants.INVALID_TOKEN_TYPE; + } + + /** <summary> + * Walk the entire tree and make a node name to nodes mapping. + * For now, use recursion but later nonrecursive version may be + * more efficient. Returns Map<Integer, List> where the List is + * of your AST node type. The Integer is the token type of the node. + * </summary> + * + * <remarks> + * TODO: save this index so that find and visit are faster + * </remarks> + */ + public virtual IDictionary<int, IList> Index( object t ) + { + IDictionary<int, IList> m = new Dictionary<int, IList>(); + _Index( t, m ); + return m; + } + + /** <summary>Do the work for index</summary> */ + protected virtual void _Index( object t, IDictionary<int, IList> m ) + { + if ( t == null ) + { + return; + } + int ttype = adaptor.GetType( t ); + IList elements; + if ( !m.TryGetValue( ttype, out elements ) || elements == null ) + { + elements = new List<object>(); + m[ttype] = elements; + } + elements.Add( t ); + int n = adaptor.GetChildCount( t ); + for ( int i = 0; i < n; i++ ) + { + object child = adaptor.GetChild( t, i ); + _Index( child, m ); + } + } + + class FindTreeWizardVisitor : TreeWizard.Visitor + { + IList _nodes; + public FindTreeWizardVisitor( IList nodes ) + { + _nodes = nodes; + } + public override void Visit( object t ) + { + _nodes.Add( t ); + } + } + class FindTreeWizardContextVisitor : TreeWizard.IContextVisitor + { + TreeWizard _outer; + TreePattern _tpattern; + IList _subtrees; + public FindTreeWizardContextVisitor( TreeWizard outer, TreePattern tpattern, IList subtrees ) + { + _outer = outer; + _tpattern = tpattern; + _subtrees = subtrees; + } + + public void Visit( object t, object parent, int childIndex, IDictionary<string, object> labels ) + { + if ( _outer._Parse( t, _tpattern, null ) ) + { + _subtrees.Add( t ); + } + } + } + + /** <summary>Return a List of tree nodes with token type ttype</summary> */ + public virtual IList Find( object t, int ttype ) + { + IList nodes = new List<object>(); + Visit( t, ttype, new FindTreeWizardVisitor( nodes ) ); + return nodes; + } + + /** <summary>Return a List of subtrees matching pattern.</summary> */ + public virtual IList Find( object t, string pattern ) + { + IList subtrees = new List<object>(); + // Create a TreePattern from the pattern + TreePatternLexer tokenizer = new TreePatternLexer( pattern ); + TreePatternParser parser = + new TreePatternParser( tokenizer, this, new TreePatternTreeAdaptor() ); + TreePattern tpattern = (TreePattern)parser.Pattern(); + // don't allow invalid patterns + if ( tpattern == null || + tpattern.IsNil || + tpattern.GetType() == typeof( WildcardTreePattern ) ) + { + return null; + } + int rootTokenType = tpattern.Type; + Visit( t, rootTokenType, new FindTreeWizardContextVisitor( this, tpattern, subtrees ) ); + return subtrees; + } + + public virtual object FindFirst( object t, int ttype ) + { + return null; + } + + public virtual object FindFirst( object t, string pattern ) + { + return null; + } + + /** <summary> + * Visit every ttype node in t, invoking the visitor. This is a quicker + * version of the general visit(t, pattern) method. The labels arg + * of the visitor action method is never set (it's null) since using + * a token type rather than a pattern doesn't let us set a label. + * </summary> + */ + public virtual void Visit( object t, int ttype, IContextVisitor visitor ) + { + _Visit( t, null, 0, ttype, visitor ); + } + + public virtual void Visit( object t, int ttype, System.Action<object> action ) + { + Visit( t, ttype, new ActionVisitor( action ) ); + } + + /** <summary>Do the recursive work for visit</summary> */ + protected virtual void _Visit( object t, object parent, int childIndex, int ttype, IContextVisitor visitor ) + { + if ( t == null ) + { + return; + } + if ( adaptor.GetType( t ) == ttype ) + { + visitor.Visit( t, parent, childIndex, null ); + } + int n = adaptor.GetChildCount( t ); + for ( int i = 0; i < n; i++ ) + { + object child = adaptor.GetChild( t, i ); + _Visit( child, t, i, ttype, visitor ); + } + } + + class VisitTreeWizardContextVisitor : TreeWizard.IContextVisitor + { + TreeWizard _outer; + IContextVisitor _visitor; + IDictionary<string, object> _labels; + TreePattern _tpattern; + + public VisitTreeWizardContextVisitor( TreeWizard outer, IContextVisitor visitor, IDictionary<string, object> labels, TreePattern tpattern ) + { + _outer = outer; + _visitor = visitor; + _labels = labels; + _tpattern = tpattern; + } + + public void Visit( object t, object parent, int childIndex, IDictionary<string, object> unusedlabels ) + { + // the unusedlabels arg is null as visit on token type doesn't set. + _labels.Clear(); + if ( _outer._Parse( t, _tpattern, _labels ) ) + { + _visitor.Visit( t, parent, childIndex, _labels ); + } + } + } + + /** <summary> + * For all subtrees that match the pattern, execute the visit action. + * The implementation uses the root node of the pattern in combination + * with visit(t, ttype, visitor) so nil-rooted patterns are not allowed. + * Patterns with wildcard roots are also not allowed. + * </summary> + */ + public virtual void Visit( object t, string pattern, IContextVisitor visitor ) + { + // Create a TreePattern from the pattern + TreePatternLexer tokenizer = new TreePatternLexer( pattern ); + TreePatternParser parser = + new TreePatternParser( tokenizer, this, new TreePatternTreeAdaptor() ); + TreePattern tpattern = (TreePattern)parser.Pattern(); + // don't allow invalid patterns + if ( tpattern == null || + tpattern.IsNil || + tpattern.GetType() == typeof( WildcardTreePattern ) ) + { + return; + } + IDictionary<string, object> labels = new Dictionary<string, object>(); // reused for each _parse + int rootTokenType = tpattern.Type; + Visit( t, rootTokenType, new VisitTreeWizardContextVisitor( this, visitor, labels, tpattern ) ); + } + + /** <summary> + * Given a pattern like (ASSIGN %lhs:ID %rhs:.) with optional labels + * on the various nodes and '.' (dot) as the node/subtree wildcard, + * return true if the pattern matches and fill the labels Map with + * the labels pointing at the appropriate nodes. Return false if + * the pattern is malformed or the tree does not match. + * </summary> + * + * <remarks> + * If a node specifies a text arg in pattern, then that must match + * for that node in t. + * + * TODO: what's a better way to indicate bad pattern? Exceptions are a hassle + * </remarks> + */ + public virtual bool Parse( object t, string pattern, IDictionary<string, object> labels ) + { + TreePatternLexer tokenizer = new TreePatternLexer( pattern ); + TreePatternParser parser = + new TreePatternParser( tokenizer, this, new TreePatternTreeAdaptor() ); + TreePattern tpattern = (TreePattern)parser.Pattern(); + /* + System.out.println("t="+((Tree)t).toStringTree()); + System.out.println("scant="+tpattern.toStringTree()); + */ + bool matched = _Parse( t, tpattern, labels ); + return matched; + } + + public virtual bool Parse( object t, string pattern ) + { + return Parse( t, pattern, null ); + } + + /** <summary> + * Do the work for parse. Check to see if the t2 pattern fits the + * structure and token types in t1. Check text if the pattern has + * text arguments on nodes. Fill labels map with pointers to nodes + * in tree matched against nodes in pattern with labels. + * </summary> + */ + protected virtual bool _Parse( object t1, TreePattern tpattern, IDictionary<string, object> labels ) + { + // make sure both are non-null + if ( t1 == null || tpattern == null ) + { + return false; + } + // check roots (wildcard matches anything) + if ( tpattern.GetType() != typeof( WildcardTreePattern ) ) + { + if ( adaptor.GetType( t1 ) != tpattern.Type ) + { + return false; + } + // if pattern has text, check node text + if ( tpattern.hasTextArg && !adaptor.GetText( t1 ).Equals( tpattern.Text ) ) + { + return false; + } + } + if ( tpattern.label != null && labels != null ) + { + // map label in pattern to node in t1 + labels[tpattern.label] = t1; + } + // check children + int n1 = adaptor.GetChildCount( t1 ); + int n2 = tpattern.ChildCount; + if ( n1 != n2 ) + { + return false; + } + for ( int i = 0; i < n1; i++ ) + { + object child1 = adaptor.GetChild( t1, i ); + TreePattern child2 = (TreePattern)tpattern.GetChild( i ); + if ( !_Parse( child1, child2, labels ) ) + { + return false; + } + } + return true; + } + + /** <summary> + * Create a tree or node from the indicated tree pattern that closely + * follows ANTLR tree grammar tree element syntax: + * + * (root child1 ... child2). + * </summary> + * + * <remarks> + * You can also just pass in a node: ID + * + * Any node can have a text argument: ID[foo] + * (notice there are no quotes around foo--it's clear it's a string). + * + * nil is a special name meaning "give me a nil node". Useful for + * making lists: (nil A B C) is a list of A B C. + * </remarks> + */ + public virtual object Create( string pattern ) + { + TreePatternLexer tokenizer = new TreePatternLexer( pattern ); + TreePatternParser parser = new TreePatternParser( tokenizer, this, adaptor ); + object t = parser.Pattern(); + return t; + } + + /** <summary> + * Compare t1 and t2; return true if token types/text, structure match exactly. + * The trees are examined in their entirety so that (A B) does not match + * (A B C) nor (A (B C)). + * </summary> + * + * <remarks> + * TODO: allow them to pass in a comparator + * TODO: have a version that is nonstatic so it can use instance adaptor + * + * I cannot rely on the tree node's equals() implementation as I make + * no constraints at all on the node types nor interface etc... + * </remarks> + */ + public static bool Equals( object t1, object t2, ITreeAdaptor adaptor ) + { + return _Equals( t1, t2, adaptor ); + } + + /** <summary> + * Compare type, structure, and text of two trees, assuming adaptor in + * this instance of a TreeWizard. + * </summary> + */ + public virtual new bool Equals( object t1, object t2 ) + { + return _Equals( t1, t2, adaptor ); + } + + protected static bool _Equals( object t1, object t2, ITreeAdaptor adaptor ) + { + // make sure both are non-null + if ( t1 == null || t2 == null ) + { + return false; + } + // check roots + if ( adaptor.GetType( t1 ) != adaptor.GetType( t2 ) ) + { + return false; + } + if ( !adaptor.GetText( t1 ).Equals( adaptor.GetText( t2 ) ) ) + { + return false; + } + // check children + int n1 = adaptor.GetChildCount( t1 ); + int n2 = adaptor.GetChildCount( t2 ); + if ( n1 != n2 ) + { + return false; + } + for ( int i = 0; i < n1; i++ ) + { + object child1 = adaptor.GetChild( t1, i ); + object child2 = adaptor.GetChild( t2, i ); + if ( !_Equals( child1, child2, adaptor ) ) + { + return false; + } + } + return true; + } + +#if BUILD_INDEXES + // TODO: next stuff taken from CommonTreeNodeStream + + /** <summary> + * Given a node, add this to the reverse index tokenTypeToStreamIndexesMap. + * You can override this method to alter how indexing occurs. The + * default is to create a + * + * Map<Integer token type,ArrayList<Integer stream index>> + * </summary> + * + * <remarks> + * This data structure allows you to find all nodes with type INT in order. + * + * If you really need to find a node of type, say, FUNC quickly then perhaps + * + * Map<Integertoken type,Map<Object tree node,Integer stream index>> + * + * would be better for you. The interior maps map a tree node to + * the index so you don't have to search linearly for a specific node. + * + * If you change this method, you will likely need to change + * getNodeIndex(), which extracts information. + * </remarks> + */ + protected void fillReverseIndex( object node, int streamIndex ) + { + //System.out.println("revIndex "+node+"@"+streamIndex); + if ( tokenTypesToReverseIndex == null ) + { + return; // no indexing if this is empty (nothing of interest) + } + if ( tokenTypeToStreamIndexesMap == null ) + { + tokenTypeToStreamIndexesMap = new Dictionary<int, IList<int>>(); // first indexing op + } + int tokenType = adaptor.getType( node ); + if ( !( tokenTypesToReverseIndex == INDEX_ALL || + tokenTypesToReverseIndex.Contains( tokenType ) ) ) + { + return; // tokenType not of interest + } + IList<int> indexes; + + if ( !tokenTypeToStreamIndexesMap.TryGetValue( tokenType, out indexes ) || indexes == null ) + { + indexes = new List<int>(); // no list yet for this token type + indexes.Add( streamIndex ); // not there yet, add + tokenTypeToStreamIndexesMap[tokenType] = indexes; + } + else + { + if ( !indexes.Contains( streamIndex ) ) + { + indexes.Add( streamIndex ); // not there yet, add + } + } + } + + /** <summary> + * Track the indicated token type in the reverse index. Call this + * repeatedly for each type or use variant with Set argument to + * set all at once. + * </summary> + * + * <param name="tokenType" /> + */ + public void reverseIndex( int tokenType ) + { + if ( tokenTypesToReverseIndex == null ) + { + tokenTypesToReverseIndex = new HashSet<int>(); + } + else if ( tokenTypesToReverseIndex == INDEX_ALL ) + { + return; + } + tokenTypesToReverseIndex.add( tokenType ); + } + + /** <summary> + * Track the indicated token types in the reverse index. Set + * to INDEX_ALL to track all token types. + * </summary> + */ + public void reverseIndex( HashSet<int> tokenTypes ) + { + tokenTypesToReverseIndex = tokenTypes; + } + + /** <summary> + * Given a node pointer, return its index into the node stream. + * This is not its Token stream index. If there is no reverse map + * from node to stream index or the map does not contain entries + * for node's token type, a linear search of entire stream is used. + * </summary> + * + * <remarks> + * Return -1 if exact node pointer not in stream. + * </remarks> + */ + public int getNodeIndex( object node ) + { + //System.out.println("get "+node); + if ( tokenTypeToStreamIndexesMap == null ) + { + return getNodeIndexLinearly( node ); + } + int tokenType = adaptor.getType( node ); + IList<int> indexes; + if ( !tokenTypeToStreamIndexesMap.TryGetValue( tokenType, out indexes ) || indexes == null ) + { + //System.out.println("found linearly; stream index = "+getNodeIndexLinearly(node)); + return getNodeIndexLinearly( node ); + } + for ( int i = 0; i < indexes.size(); i++ ) + { + int streamIndex = indexes[i]; + object n = get( streamIndex ); + if ( n == node ) + { + //System.out.println("found in index; stream index = "+streamIndexI); + return streamIndex; // found it! + } + } + return -1; + } +#endif + + } +} diff --git a/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/UnwantedTokenException.cs b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/UnwantedTokenException.cs new file mode 100644 index 0000000..d65c870 --- /dev/null +++ b/antlr-3.1.3/runtime/CSharp3/Sources/Antlr3.Runtime/UnwantedTokenException.cs @@ -0,0 +1,77 @@ +/* + * [The "BSD licence"] + * Copyright (c) 2005-2008 Terence Parr + * All rights reserved. + * + * Conversion to C#: + * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +namespace Antlr.Runtime +{ + using System; + + /** <summary>An extra token while parsing a TokenStream</summary> */ + [Serializable] + public class UnwantedTokenException : MismatchedTokenException + { + /** <summary>Used for remote debugger deserialization</summary> */ + public UnwantedTokenException() + { + } + + public UnwantedTokenException( int expecting, IIntStream input ) + : base( expecting, input ) + { + } + + public virtual IToken UnexpectedToken + { + get + { + return token; + } + } + + public override string ToString() + { + //int unexpectedType = getUnexpectedType(); + //string unexpected = ( tokenNames != null && unexpectedType >= 0 && unexpectedType < tokenNames.Length ) ? tokenNames[unexpectedType] : unexpectedType.ToString(); + string expected = ( tokenNames != null && expecting >= 0 && expecting < tokenNames.Length ) ? tokenNames[expecting] : expecting.ToString(); + + String exp = ", expected " + expected; + if ( expecting == TokenConstants.INVALID_TOKEN_TYPE ) + { + exp = ""; + } + if ( token == null ) + { + return "UnwantedTokenException(found=" + null + exp + ")"; + } + return "UnwantedTokenException(found=" + token.Text + exp + ")"; + } + } +} diff --git a/antlr-3.1.3/runtime/Delphi/LICENSE.TXT b/antlr-3.1.3/runtime/Delphi/LICENSE.TXT new file mode 100644 index 0000000..df31c1f --- /dev/null +++ b/antlr-3.1.3/runtime/Delphi/LICENSE.TXT @@ -0,0 +1,31 @@ +[The "BSD licence"] +Copyright (c) 2008 Erik van Bilsen +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner shall be + under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/antlr-3.1.3/runtime/Delphi/NOTICE.TXT b/antlr-3.1.3/runtime/Delphi/NOTICE.TXT new file mode 100644 index 0000000..9dda784 --- /dev/null +++ b/antlr-3.1.3/runtime/Delphi/NOTICE.TXT @@ -0,0 +1,35 @@ +============================================================================= + +This software contains code derived from the ANTLR V3 Java Runtime Library +developed by Terence Parr in accordance with it's license: + + --------------------------------------------------------------------- + +[The "BSD licence"] +Copyright (c) 2003-2006 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +============================================================================= \ No newline at end of file diff --git a/antlr-3.1.3/runtime/Delphi/README.TXT b/antlr-3.1.3/runtime/Delphi/README.TXT new file mode 100644 index 0000000..f29e9b1 --- /dev/null +++ b/antlr-3.1.3/runtime/Delphi/README.TXT @@ -0,0 +1,265 @@ +================================================== +ANTLR v3 Delphi Code generator and Runtime library +================================================== + +October 27, 2008 +Erik van Bilsen (erik AT bilsen DOT com) + +Please see LICENSE.TXT for the full text of the license and NOTICE.TXT +for attribution notices. + +Architecture +============ +The Delphi target consists of a set of code generation templates and a runtime +library (written in Delphi 2009) for the Win32 platform. +The Delphi code generation targets and the runtime library are modeled on the +C# version. + +You need to use Delphi 2009 or a later version to be able to use this target. +You will not be able to compile generated code with older versions of Delphi. +The reason for this is that this Delphi target uses a lot of new Delphi +language features such as generics. + +To use the Delphi target, you only need to put the runtime source code in a +directory of your choice, and add this directory to you Delphi library path or +to your project's search path. + +The runtime consists of the following units: +-Antlr.Runtime: the main Antlr unit that contains the parser and lexer classes +-Antlr.Runtime.Tree: the tree parser class and other tree related classes +-Antlr.Runtime.Collections: several collection utilities +-Antlr.Runtime.Tools: this is a special Delphi addition to the runtime + containing several helper classes and utilities +You will find these files in the "Antlr3.Runtime" subdirectory. + +In your projects, you usually only need to use the Antlr.Runtime unit, and the +Antlr.Runtime.Tree unit for tree parsers. +This target does not require any third party libraries, and you do not have to +deploy any DLLs or other files with your ANTLR Delphi projects. + +Please note that this Delphi target does not support StringTemplate output, but +it does support all other output types, including AST output. + +Status +====== +As of October 2008, the Delphi target is in sync with ANTLR 3.1. + +This version passes all the unit tests (which you can find in the +"Antlr3.Runtime.Tests" subdirectory) without any memory leaks. +Also, all the grammar samples in the "examples-v3\Delphi" directory function +correctly and without any memory leaks. + +Performance +=========== +This target should perform reasonably well compared to other ANTLR targets. +For some grammars, especially tree grammars, the code that is generated is not +as efficient as for other targets. This has to do with the way the code is +generated to work around some issues with the Delphi language. But even with +these workarounds, the target performs within reasonable boundaries. + +Usage +===== +Here is a short list of Delphi specific issues you need to take into account +when using this target. Please check out the Delphi sample grammars in the +"examples-v3" archive for examples of all the issues described below. And these +examples are a great way to get started with ANTLR. + +Specify that Delphi code should be generated for a grammar +---------------------------------------------------------- +To specify that the ANTLR tool should generate Delphi (2009) code (rather than +the default of generating Java code) for a grammar, set the grammar-level option +named "language" to the value "Delphi" as shown below: + + grammar MyGrammar; + + options { + language=Delphi; + } + ... + +For the example grammar named MyGrammar above, the grammar file would typically +be named MyGrammar.g. The grammar filename (excluding the extension) must match +the grammar name as declared with the grammar directive in the file. + +Use Delphi code in actions +-------------------------- +Obviously, any custom actions inside your grammars should be written in the +Delphi language. This also applies to less obvious actions like +{$channel=HIDDEN;}, which should be written as {$channel:=HIDDEN;} (with the +colon before the equals sign). + +Rule names must not be case sensitive +------------------------------------- +Since the Delphi language is not case sensitive, you must take care that the +names of rules in your grammars differ by more than only case. For example, if +you have a parser rule called "expression", then you shouldn't have a lexer rule +called "EXPRESSION" or "Expression" or any other combination of upper- and lower +case characters that math the same word. ANTLR will still be able to generate +Delphi code for this, but you will not be able to compile it because of +duplicate identifiers. + +The @members grammar action +--------------------------- +The Delphi target does not recognize the default @members grammar action. It +uses the following three grammar actions instead (see the C and Java sample +grammars for examples): + +@memberDeclarations: use this action that declare members in the generated +parser/lexer class. For example: + + @memberDeclarations { + enumIsKeyword: Boolean; + function isTypeName(const name: String): Boolean; + } + + These declarations will appear inside the parser/lexer class declaration. + +@memberInitializations: use this action to initialize variables declared in the +@memberDeclarations action. For example: + + @memberInitializations { + enumIsKeyword := True; + } + + These statements will appear inside the constructor of the parser/lexer class. + +@memberImplementations: use this action for any code that must appear in the +parser class implementation. For example: + + @memberImplementations { + function TCParser.isTypeName(const name: String): Boolean; + begin + Result := [...] + end; + } + + The code inside this action appears as-is inside the implementation section of + the parser/lexer unit. This means that you need to specify the full name of + the method, including the parser/lexer class name (eg. TCParser.isTypeName). + The class name is based on the name of the grammar, and whether it is a parser + or lexer. So, if your grammar is called "MyGrammar", then the lexer class will + be called TMyGrammarLexer and the parser class will be called + TMyGrammarParser. + +The @vars grammar action +------------------------ +ANTLR supports an @init (and @after) grammar action for any code you want to +execute at the beginning (or end) of a rule. If that code, or any other code +inside the rule, makes use of a local variable, then you need to declare that +variable first. The Delphi target adds the @vars grammar action for this +purpose. You can declare any local variables inside this action, as in this +example (taken from the Python example grammar): + + LEADING_WS + @vars { + spaces: Integer; + S: String; + } + @init { + spaces := 0; + } + +The variables you declare in the @vars action will appear inside the "var" +declaration block of the method for the rule (in this case for the +LEADING_WS rule). + +The @usesInterface and @usedImplementation grammar actions +---------------------------------------------------------- +If you need to add units to the uses clause of the generated units, then you can +use the @usesInterface and @usesImplementation grammar actions. For example, if +some code inside the grammer rules needs access to the Delphi TStringList class, +then you will need to use the Classes unit. +Use the @usesInterface action if you need the units to appear in the interface +part, or @usesImplementation if you only need a unit inside the implementation. +For example: + + @usesImplementation { + Classes, + Generics.Collections, + } + +Note that you need to add a comma after each unit in this list. The Delphi units +SysUtils, StrUtils and Math are added to the uses clause automatically. +Also note that you will usually put the @usesInterface/@usesImplementation +actions at the top of your grammar file, like you would the with the @header +action for other language targets. + +The Delphi target is interface based +------------------------------------ +All classes inside the Delphi ANTLR runtime use object interfaces. This greatly +simplifies memory management and makes using the runtime much easier. This means +that you will never declare class variables for ANTLR objects, but only use +interface variables. For example, a typical test rig in Delphi looks like this +(taken from the SimpleC example): + + procedure Run(const InputFilename: String); + var + Input: ICharStream; + Lex: ISimpleCLexer; + Tokens: ICommonTokenStream; + Parser: ISimpleCParser; + R: Iprog_return; + begin + Input := TANTLRFileStream.Create(InputFilename); + Lex := TSimpleCLexer.Create(Input); + Tokens := TCommonTokenStream.Create(Lex); + Parser := TSimpleCParser.Create(Tokens); + R := Parser.prog; + WriteLn('tree=' + (R.Tree as ITree).ToStringTree); + end; + +Note that all variables are declared as interface variables (starting with a +capital I) instead of class variables (with a capital T). And there is no need +to destroy these objects yourself (there are no calls to Free and no +try..finally blocks to protect these resources). + +If you are new to interface-based programming, then don't worry: just remember +to declare all ANTLR objects using interface variables, and don't call Free +on them. + +Note that the C# and Java versions of the tree creation classes use the general +Object type for tree nodes. In the Delphi version, tree nodes are of type +IANTLRInterface, and can be implemented in various class (like TCommonTree). + +Antlr.Runtime.Tools +------------------- +This unit contains some classes and interfaces you may find useful inside ANTLR +projects. Also, this unit contains declarations for the IANTLRInterface +interface and TANTLRObject class. All ANTLR classes derive from TANTLRObject and +implement the IANTLRInterface interface. + +Other interfaces/classes you may find useful are: + +* IANTLRString (implemented in TANTLRString): a wrapper around a Delphi string + that allows you to treat a string as a regular ANTLR object. + +* IList<T> (implemented in TList<T>): a generic list containing elements of + type <T>. For example, you can create a list of Integers like this: + + var + List: IList<Integer>; + begin + List := TList<Integer>.Create; + List.Add(123); + end; + + Note that this is basically the same TList<T> declared in Delphi's unit + Generics.Collections, but it implements the IList<T> interface. + +* IDictionary<TKey, TValue> (implemented in TDictionary<TKey, TValue>): a + generic dictionary that maps elements of type <TKey> to <TValue>. For example, + to map Strings to TANTLRObjects, use: + + var + Map: IDictionary<String, IANTLRInterface> + begin + Map := TDictionary<String, IANTLRInterface>.Create; + Map.Add('foo', TANTLRObject.Create); + end; + + Again, this class is similar to Delphi's TDictionary, but it implements the + IDictionary<TKey, TValue> interface. + + + +Erik van Bilsen diff --git a/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Collections.Tests.pas b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Collections.Tests.pas new file mode 100644 index 0000000..2dd30a1 --- /dev/null +++ b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Collections.Tests.pas @@ -0,0 +1,134 @@ +unit Antlr.Runtime.Collections.Tests; +{ + + Delphi DUnit Test Case + ---------------------- + This unit contains a skeleton test case class generated by the Test Case Wizard. + Modify the generated code to correctly setup and call the methods from the unit + being tested. + +} + +interface + +uses + TestFramework, + Antlr.Runtime.Collections, + Generics.Collections, + Antlr.Runtime.Tools; + +type + // Test methods for class IHashList + TestIHashList = class(TTestCase) + strict private + FIHashList: IHashList<Integer, String>; + public + procedure SetUp; override; + procedure TearDown; override; + published + procedure TestInsertionOrder; + procedure TestRemove; + end; + + // Test methods for class IStackList + TestIStackList = class(TTestCase) + strict private + FIStackList: IStackList<String>; + public + procedure SetUp; override; + procedure TearDown; override; + published + procedure TestPushPop; + procedure TestPeek; + end; + +implementation + +uses + SysUtils; + +const + Values: array [0..9] of Integer = (50, 1, 33, 76, -22, 22, 34, 2, 88, 12); + +procedure TestIHashList.SetUp; +var + I: Integer; +begin + FIHashList := THashList<Integer, String>.Create; + for I in Values do + FIHashList.Add(I,'Value' + IntToStr(I)); +end; + +procedure TestIHashList.TearDown; +begin + FIHashList := nil; +end; + +procedure TestIHashList.TestInsertionOrder; +var + I: Integer; + P: TPair<Integer, String>; +begin + I := 0; + for P in FIHashList do + begin + CheckEquals(P.Key, Values[I]); + CheckEquals(P.Value, 'Value' + IntToStr(Values[I])); + Inc(I); + end; +end; + +procedure TestIHashList.TestRemove; +var + I: Integer; + P: TPair<Integer, String>; +begin + FIHashList.Remove(34); + I := 0; + for P in FIHashList do + begin + if (Values[I] = 34) then + Inc(I); + CheckEquals(P.Key, Values[I]); + CheckEquals(P.Value, 'Value' + IntToStr(Values[I])); + Inc(I); + end; +end; + +procedure TestIStackList.SetUp; +begin + FIStackList := TStackList<String>.Create; +end; + +procedure TestIStackList.TearDown; +begin + FIStackList := nil; +end; + +procedure TestIStackList.TestPushPop; +var + Item: String; +begin + Item := 'Item 1'; + FIStackList.Push(Item); + Item := 'Item 2'; + FIStackList.Push(Item); + CheckEquals(FIStackList.Pop,'Item 2'); + CheckEquals(FIStackList.Pop,'Item 1'); +end; + +procedure TestIStackList.TestPeek; +begin + FIStackList.Push('Item 1'); + FIStackList.Push('Item 2'); + FIStackList.Push('Item 3'); + FIStackList.Pop; + CheckEquals(FIStackList.Peek, 'Item 2'); + CheckEquals(FIStackList.Pop, 'Item 2'); +end; + +initialization + // Register any test cases with the test runner + RegisterTest(TestIHashList.Suite); + RegisterTest(TestIStackList.Suite); +end. diff --git a/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Tests.pas b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Tests.pas new file mode 100644 index 0000000..75cf45b --- /dev/null +++ b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Tests.pas @@ -0,0 +1,183 @@ +unit Antlr.Runtime.Tests; + +interface + +uses + Classes, + SysUtils, + TestFramework, + Antlr.Runtime; + +type + // Test methods for class IANTLRStringStream + TestANTLRStringStream = class(TTestCase) + strict private + const + NL = #13#10; + GRAMMARSTR = '' + + 'parser grammar p;' + NL + + 'prog : WHILE ID LCURLY (assign)* RCURLY EOF;' + NL + + 'assign : ID ASSIGN expr SEMI ;' + NL + + 'expr : INT | FLOAT | ID ;' + NL; + public + procedure SetUp; override; + procedure TearDown; override; + published + procedure TestSizeOnEmptyANTLRStringStream; + procedure TestSizeOnANTLRStringStream; + procedure TestConsumeOnANTLRStringStream; + procedure TestResetOnANTLRStringStream; + procedure TestSubstringOnANTLRStringStream; + end; + +implementation + +{ TestANTLRStringStream } + +procedure TestANTLRStringStream.SetUp; +begin +end; + +procedure TestANTLRStringStream.TearDown; +begin +end; + +procedure TestANTLRStringStream.TestConsumeOnANTLRStringStream; +var + Stream: IANTLRStringStream; +begin + Stream := TANTLRStringStream.Create('One'#13#10'Two'); + CheckEquals(0, Stream.Index); + CheckEquals(0, Stream.CharPositionInLine); + CheckEquals(1, Stream.Line); + + Stream.Consume; // O + CheckEquals(1, Stream.Index); + CheckEquals(1, Stream.CharPositionInLine); + CheckEquals(1, Stream.Line); + + Stream.Consume; // n + CheckEquals(2, Stream.Index); + CheckEquals(2, Stream.CharPositionInLine); + CheckEquals(1, Stream.Line); + + Stream.Consume; // e + CheckEquals(3, Stream.Index); + CheckEquals(3, Stream.CharPositionInLine); + CheckEquals(1, Stream.Line); + + Stream.Consume; // #13 + CheckEquals(4, Stream.Index); + CheckEquals(4, Stream.CharPositionInLine); + CheckEquals(1, Stream.Line); + + Stream.Consume; // #10 + CheckEquals(5, Stream.Index); + CheckEquals(0, Stream.CharPositionInLine); + CheckEquals(2, Stream.Line); + + Stream.Consume; // T + CheckEquals(6, Stream.Index); + CheckEquals(1, Stream.CharPositionInLine); + CheckEquals(2, Stream.Line); + + Stream.Consume; // w + CheckEquals(7, Stream.Index); + CheckEquals(2, Stream.CharPositionInLine); + CheckEquals(2, Stream.Line); + + Stream.Consume; // o + CheckEquals(8, Stream.Index); + CheckEquals(3, Stream.CharPositionInLine); + CheckEquals(2, Stream.Line); + + Stream.Consume; // EOF + CheckEquals(8, Stream.Index); + CheckEquals(3, Stream.CharPositionInLine); + CheckEquals(2, Stream.Line); + + Stream.Consume; // EOF + CheckEquals(8, Stream.Index); + CheckEquals(3, Stream.CharPositionInLine); + CheckEquals(2, Stream.Line); +end; + +procedure TestANTLRStringStream.TestResetOnANTLRStringStream; +var + Stream: IANTLRStringStream; +begin + Stream := TANTLRStringStream.Create('One'#13#10'Two'); + CheckEquals(0, Stream.Index); + CheckEquals(0, Stream.CharPositionInLine); + CheckEquals(1, Stream.Line); + + Stream.Consume; // O + Stream.Consume; // n + + CheckEquals(Ord('e'), Stream.LA(1)); + CheckEquals(2, Stream.Index); + + Stream.Reset; + CheckEquals(Ord('O'), Stream.LA(1)); + CheckEquals(0, Stream.Index); + CheckEquals(0, Stream.CharPositionInLine); + CheckEquals(1, Stream.Line); + Stream.Consume; // O + + CheckEquals(Ord('n'), Stream.LA(1)); + CheckEquals(1, Stream.Index); + CheckEquals(1, Stream.CharPositionInLine); + CheckEquals(1, Stream.Line); + Stream.Consume; // n + + CheckEquals(Ord('e'), Stream.LA(1)); + CheckEquals(2, Stream.Index); + CheckEquals(2, Stream.CharPositionInLine); + CheckEquals(1, Stream.Line); + Stream.Consume; // n +end; + +procedure TestANTLRStringStream.TestSizeOnANTLRStringStream; +var + S1, S2, S3: IANTLRStringStream; +begin + S1 := TANTLRStringStream.Create('lexer'#13#10); + CheckEquals(7, S1.Size); + + S2 := TANTLRStringStream.Create(GRAMMARSTR); + CheckEquals(Length(GRAMMARSTR), S2.Size); + + S3 := TANTLRStringStream.Create('grammar P;'); + CheckEquals(10, S3.Size); +end; + +procedure TestANTLRStringStream.TestSizeOnEmptyANTLRStringStream; +var + S1: IANTLRStringStream; +begin + S1 := TANTLRStringStream.Create(''); + CheckEquals(0, S1.Size); + CheckEquals(0, S1.Index); +end; + +procedure TestANTLRStringStream.TestSubstringOnANTLRStringStream; +var + Stream: IANTLRStringStream; +begin + Stream := TANTLRStringStream.Create('One'#13#10'Two'#13#10'Three'); + + CheckEquals('Two', Stream.Substring(5, 7)); + CheckEquals('One', Stream.Substring(0, 2)); + CheckEquals('Three', Stream.Substring(10, 14)); + + Stream.Consume; + + CheckEquals('Two', Stream.Substring(5, 7)); + CheckEquals('One', Stream.Substring(0, 2)); + CheckEquals('Three', Stream.Substring(10, 14)); +end; + +initialization + // Register any test cases with the test runner + RegisterTest(TestANTLRStringStream.Suite); +end. diff --git a/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Tools.Tests.pas b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Tools.Tests.pas new file mode 100644 index 0000000..f7d9663 --- /dev/null +++ b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Tools.Tests.pas @@ -0,0 +1,633 @@ +unit Antlr.Runtime.Tools.Tests; +{ + + Delphi DUnit Test Case + ---------------------- + This unit contains a skeleton test case class generated by the Test Case Wizard. + Modify the generated code to correctly setup and call the methods from the unit + being tested. + +} + +interface + +uses + SysUtils, + TestFramework, + Generics.Defaults, + Generics.Collections, + Antlr.Runtime.Tools; + +type + // Test methods for class IANTLRString + TestIANTLRString = class(TTestCase) + strict private + FIANTLRString: IANTLRString; + public + procedure SetUp; override; + procedure TearDown; override; + published + procedure TestGetValue; + procedure TestSetValue; + end; + + // Test methods for class TANTLRString + TestTANTLRString = class(TTestCase) + strict private + FANTLRString: TANTLRString; + public + procedure SetUp; override; + procedure TearDown; override; + published + procedure TestToString; + end; + + // Test methods for class ICloneable + TestICloneable = class(TTestCase) + strict private + FICloneable: ICloneable; + public + procedure SetUp; override; + procedure TearDown; override; + published + procedure TestClone; + end; + + // Test methods for class IList + TestIList = class(TTestCase) + strict private + FIList: IList<Integer>; + public + procedure SetUp; override; + procedure TearDown; override; + published + procedure TestGetCapacity; + procedure TestSetCapacity; + procedure TestGetCount; + procedure TestSetCount; + procedure TestGetItem; + procedure TestSetItem; + procedure TestAdd; + procedure TestAddRange; + procedure TestInsert; + procedure TestRemove; + procedure TestDelete; + procedure TestDeleteRange; + procedure TestClear; + procedure TestContains; + procedure TestIndexOf; + end; + + // Test methods for class IDictionary + TestIDictionary = class(TTestCase) + strict private + FIDictionary: IDictionary<String, Integer>; + public + procedure SetUp; override; + procedure TearDown; override; + published + procedure TestGetItem; + procedure TestSetItem; + procedure TestGetCount; + procedure TestAdd; + procedure TestRemove; + procedure TestTryGetValue; + procedure TestContainsKey; + procedure TestContainsValue; + procedure TestEnumeration; + end; + + // Test methods for record TLocalStorage + TestTLocalStorage = class(TTestCase) + published + procedure TestLocalIntegerStorage; + procedure TestLocalInterfaceStorage; + end; + +implementation + +type + IFoo = interface(IANTLRInterface) + ['{48E3FC72-4E63-46D8-8450-A561ECF76995}'] + function GetValue: String; + procedure SetValue(const V: String); + property Value: String read GetValue write SetValue; + end; + + TFoo = class(TANTLRObject, ICloneable, IFoo) + FValue: String; + function GetValue: String; + procedure SetValue(const V: String); + function Clone: IANTLRInterface; + end; + +function TFoo.GetValue: String; +begin + Result := FValue; +end; + +procedure TFoo.SetValue(const V: String); +begin + FValue := V; +end; + +function TFoo.Clone: IANTLRInterface; +var + Foo: IFoo; +begin + Foo := TFoo.Create; + Foo.Value := FValue; + Result := Foo; +end; + +procedure TestIANTLRString.SetUp; +begin + FIANTLRString := TANTLRString.Create('foo'); +end; + +procedure TestIANTLRString.TearDown; +begin + FIANTLRString := nil; +end; + +procedure TestIANTLRString.TestGetValue; +var + ReturnValue: string; +begin + ReturnValue := FIANTLRString.GetValue; + CheckEquals(ReturnValue,'foo'); +end; + +procedure TestIANTLRString.TestSetValue; +var + Value: string; +begin + Value := 'bar'; + FIANTLRString.SetValue(Value); + CheckEquals(FIANTLRString.Value,'bar'); +end; + +procedure TestTANTLRString.SetUp; +begin + FANTLRString := TANTLRString.Create('foo'); +end; + +procedure TestTANTLRString.TearDown; +begin + FANTLRString.Free; + FANTLRString := nil; +end; + +procedure TestTANTLRString.TestToString; +var + ReturnValue: string; +begin + ReturnValue := FANTLRString.ToString; + CheckEquals(ReturnValue,'foo'); +end; + +procedure TestICloneable.SetUp; +var + Foo: IFoo; +begin + Foo := TFoo.Create; + Foo.Value := 'original'; + FICloneable := Foo as ICloneable; +end; + +procedure TestICloneable.TearDown; +begin + FICloneable := nil; +end; + +procedure TestICloneable.TestClone; +var + ReturnValue: IANTLRInterface; +begin + ReturnValue := FICloneable.Clone; + Check(Supports(ReturnValue, IFoo)); + CheckEquals((ReturnValue as IFoo).Value,(FICloneable as IFoo).Value); +end; + +procedure TestIList.SetUp; +begin + FIList := TList<Integer>.Create; +end; + +procedure TestIList.TearDown; +begin + FIList := nil; +end; + +procedure TestIList.TestGetCapacity; +var + ReturnValue: Integer; +begin + FIList.Capacity := 100; + ReturnValue := FIList.GetCapacity; + CheckEquals(ReturnValue,100); +end; + +procedure TestIList.TestSetCapacity; +var + Value: Integer; +begin + Value := 100; + FIList.SetCapacity(Value); + CheckEquals(FIList.Capacity,100); +end; + +procedure TestIList.TestGetCount; +var + ReturnValue: Integer; +begin + FIList.Clear; + FIList.Add(123); + ReturnValue := FIList.GetCount; + CheckEquals(ReturnValue,1); +end; + +procedure TestIList.TestSetCount; +var + Value: Integer; +begin + Value := 4; + FIList.SetCount(Value); + CheckEquals(FIList.Count,4); +end; + +procedure TestIList.TestGetItem; +var + ReturnValue: Integer; + Index: Integer; +begin + FIList.Clear; + FIList.Add(100); + FIList.Add(200); + FIList.Add(300); + FIList.Add(400); + Index := 2; + ReturnValue := FIList.GetItem(Index); + CheckEquals(ReturnValue,300); +end; + +procedure TestIList.TestSetItem; +var + Value: Integer; + Index: Integer; +begin + FIList.Clear; + FIList.Add(100); + FIList.Add(200); + FIList.Add(300); + FIList.Add(400); + Index := 3; + Value := 333; + FIList.SetItem(Index, Value); + CheckEquals(FIList.Items[3],333); +end; + +procedure TestIList.TestAdd; +var + ReturnValue: Integer; + Value: Integer; +begin + FIList.Clear; + Value := 3; + ReturnValue := FIList.Add(Value); + CheckEquals(ReturnValue,0); +end; + +procedure TestIList.TestAddRange; +var + Values: array [0..3] of Integer; +begin + FIList.Clear; + Values[0] := 111; + Values[1] := 222; + Values[2] := 333; + Values[3] := 444; + FIList.AddRange(Values); + CheckEquals(FIList[0],111); + CheckEquals(FIList[1],222); + CheckEquals(FIList[2],333); + CheckEquals(FIList[3],444); +end; + +procedure TestIList.TestInsert; +var + Value: Integer; + Index: Integer; +begin + FIList.Clear; + FIList.Add(100); + FIList.Add(200); + FIList.Add(300); + FIList.Add(400); + Index := 2; + Value := 250; + FIList.Insert(Index, Value); + CheckEquals(FIList[1],200); + CheckEquals(FIList[2],250); + CheckEquals(FIList[3],300); +end; + +procedure TestIList.TestRemove; +var + ReturnValue: Integer; + Value: Integer; +begin + FIList.Clear; + FIList.Add(100); + FIList.Add(200); + FIList.Add(300); + FIList.Add(400); + Value := 300; + ReturnValue := FIList.Remove(Value); + CheckEquals(ReturnValue,2); +end; + +procedure TestIList.TestDelete; +var + Index: Integer; +begin + FIList.Clear; + FIList.Add(100); + FIList.Add(200); + FIList.Add(300); + FIList.Add(400); + Index := 2; + FIList.Delete(Index); + CheckEquals(FIList[2],400); +end; + +procedure TestIList.TestDeleteRange; +var + ACount: Integer; + AIndex: Integer; +begin + FIList.Clear; + FIList.Add(100); + FIList.Add(200); + FIList.Add(300); + FIList.Add(400); + AIndex := 1; + ACount := 2; + FIList.DeleteRange(AIndex, ACount); + CheckEquals(FIlist[0],100); + CheckEquals(FIlist[1],400); +end; + +procedure TestIList.TestClear; +begin + FIList.Clear; + FIList.Add(100); + FIList.Add(200); + FIList.Add(300); + FIList.Add(400); + FIList.Clear; + CheckEquals(FIList.Count,0); +end; + +procedure TestIList.TestContains; +var + ReturnValue: Boolean; + Value: Integer; +begin + FIList.Clear; + FIList.Add(100); + FIList.Add(200); + FIList.Add(300); + FIList.Add(400); + Value := 200; + ReturnValue := FIList.Contains(Value); + CheckTrue(ReturnValue); + Value := 250; + ReturnValue := FIList.Contains(Value); + CheckFalse(ReturnValue); +end; + +procedure TestIList.TestIndexOf; +var + ReturnValue: Integer; + Value: Integer; +begin + FIList.Clear; + FIList.Add(100); + FIList.Add(200); + FIList.Add(300); + FIList.Add(400); + Value := 300; + ReturnValue := FIList.IndexOf(Value); + CheckEquals(ReturnValue,2); + Value := 301; + ReturnValue := FIList.IndexOf(Value); + CheckEquals(ReturnValue,-1); +end; + +procedure TestIDictionary.SetUp; +begin + FIDictionary := TDictionary<String, Integer>.Create; + FIDictionary.Add('Foo',1); + FIDictionary.Add('Bar',3); + FIDictionary.Add('Baz',7); + FIDictionary.Add('Zip',7); +end; + +procedure TestIDictionary.TearDown; +begin + FIDictionary := nil; +end; + +procedure TestIDictionary.TestGetItem; +var + ReturnValue: Integer; + Key: String; +begin + Key := 'Baz'; + ReturnValue := FIDictionary.GetItem(Key); + CheckEquals(ReturnValue,7); +end; + +procedure TestIDictionary.TestSetItem; +var + Value: Integer; + Key: String; +begin + Key := 'Bar'; + Value := 20; + FIDictionary.SetItem(Key, Value); + CheckEquals(FIDictionary['Bar'],20); +end; + +procedure TestIDictionary.TestGetCount; +var + ReturnValue: Integer; +begin + ReturnValue := FIDictionary.GetCount; + CheckEquals(ReturnValue,4); +end; + +procedure TestIDictionary.TestAdd; +var + Value: Integer; + Key: String; +begin + Key := 'Key'; + Value := -1; + FIDictionary.Add(Key, Value); + CheckEquals(FIDictionary['Key'],-1); +end; + +procedure TestIDictionary.TestRemove; +var + Key: String; +begin + Key := 'Bar'; + FIDictionary.Remove(Key); + CheckEquals(FIDictionary.Count,3); +end; + +procedure TestIDictionary.TestTryGetValue; +var + ReturnValue: Boolean; + Value: Integer; + Key: String; +begin + Key := 'Zip'; + ReturnValue := FIDictionary.TryGetValue(Key, Value); + CheckTrue(ReturnValue); + CheckEquals(Value,7); + + Key := 'Oops'; + ReturnValue := FIDictionary.TryGetValue(Key, Value); + CheckFalse(ReturnValue); +end; + +procedure TestIDictionary.TestContainsKey; +var + ReturnValue: Boolean; + Key: String; +begin + Key := 'Foo'; + ReturnValue := FIDictionary.ContainsKey(Key); + CheckTrue(ReturnValue); + + Key := 'foo'; + ReturnValue := FIDictionary.ContainsKey(Key); + CheckFalse(ReturnValue); +end; + +procedure TestIDictionary.TestContainsValue; +var + ReturnValue: Boolean; + Value: Integer; +begin + Value := 3; + ReturnValue := FIDictionary.ContainsValue(Value); + CheckTrue(ReturnValue); + + Value := 2; + ReturnValue := FIDictionary.ContainsValue(Value); + CheckFalse(ReturnValue); +end; + +procedure TestIDictionary.TestEnumeration; +var + Pair: TPair<String, Integer>; + Foo, Bar, Baz, Zip: Boolean; +begin + Foo := False; + Bar := False; + Baz := False; + Zip := False; + + for Pair in FIDictionary do + begin + if (Pair.Key = 'Foo') then + begin + Foo := True; + CheckEquals(Pair.Value, 1); + end + else + if (Pair.Key = 'Bar') then + begin + Bar := True; + CheckEquals(Pair.Value, 3); + end + else + if (Pair.Key = 'Baz') then + begin + Baz := True; + CheckEquals(Pair.Value, 7); + end + else + if (Pair.Key = 'Zip') then + begin + Zip := True; + CheckEquals(Pair.Value, 7); + end + else + Check(False, 'Unknown key in dictionary'); + end; + CheckTrue(Foo); + CheckTrue(Bar); + CheckTrue(Baz); + CheckTrue(Zip); +end; + +{ TestTLocalStorage } + +procedure TestTLocalStorage.TestLocalIntegerStorage; +var + Locals: TLocalStorage; +begin + Locals.Initialize; + try + Locals.AsInteger['x'] := 2; + Locals.AsInteger['X'] := 3; + CheckEquals(2, Locals.AsInteger['x']); + CheckEquals(3, Locals.AsInteger['X']); + CheckEquals(0, Locals.AsInteger['y']); + Locals.AsInteger['X'] := Locals.AsInteger['x'] * 2; + CheckEquals(4, Locals.AsInteger['X']); + CheckEquals(2, Locals.Count); + finally + Locals.Finalize; + end; +end; + +procedure TestTLocalStorage.TestLocalInterfaceStorage; +var + Locals: TLocalStorage; +begin + Locals.Initialize; + try + { Local variable Z is never accessed again. We add it to check that there + will be no memory leak. } + Locals['Z'] := TANTLRString.Create('Value Z'); + + Locals['x'] := TANTLRString.Create('Value x'); + Locals['X'] := TANTLRString.Create('Value X'); + CheckEquals('Value x', (Locals['x'] as IANTLRString).Value); + CheckEquals('Value X', (Locals['X'] as IANTLRString).Value); + Check(Locals['y'] = nil); + + Locals['X'] := TANTLRString.Create( + (Locals['X'] as IANTLRString).Value + ' Update'); + CheckEquals('Value X Update', (Locals['X'] as IANTLRString).Value); + CheckEquals(3, Locals.Count); + finally + Locals.Finalize; + end; +end; + +initialization + // Register any test cases with the test runner + RegisterTest(TestIANTLRString.Suite); + RegisterTest(TestTANTLRString.Suite); + RegisterTest(TestICloneable.Suite); + RegisterTest(TestIList.Suite); + RegisterTest(TestIDictionary.Suite); + RegisterTest(TestTLocalStorage.Suite); +end. diff --git a/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Tree.Tests.pas b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Tree.Tests.pas new file mode 100644 index 0000000..f6aba37 --- /dev/null +++ b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/Antlr.Runtime.Tree.Tests.pas @@ -0,0 +1,2136 @@ +unit Antlr.Runtime.Tree.Tests; +{ + + Delphi DUnit Test Case + ---------------------- + This unit contains a skeleton test case class generated by the Test Case Wizard. + Modify the generated code to correctly setup and call the methods from the unit + being tested. + +} + +interface + +uses + TestFramework, + Antlr.Runtime.Collections, + Antlr.Runtime.Tree, + Classes, + SysUtils, + Antlr.Runtime, + Antlr.Runtime.Tools; + +type + // Test methods for class ICommonTree + TestICommonTree = class(TTestCase) + public + procedure SetUp; override; + procedure TearDown; override; + published + procedure TestSingleNode; + procedure Test4Nodes; + procedure TestList; + procedure TestList2; + procedure TestAddListToExistChildren; + procedure TestDupTree; + procedure TestBecomeRoot; + procedure TestBecomeRoot2; + procedure TestBecomeRoot3; + procedure TestBecomeRoot5; + procedure TestBecomeRoot6; + procedure TestReplaceWithNoChildren; + procedure TestReplaceWithOneChildren; + procedure TestReplaceInMiddle; + procedure TestReplaceAtLeft; + procedure TestReplaceAtRight; + procedure TestReplaceOneWithTwoAtLeft; + procedure TestReplaceOneWithTwoAtRight; + procedure TestReplaceOneWithTwoInMiddle; + procedure TestReplaceTwoWithOneAtLeft; + procedure TestReplaceTwoWithOneAtRight; + procedure TestReplaceAllWithOne; + procedure TestReplaceAllWithTwo; + end; + + // Test methods for class ICommonTreeNodeStream + TestICommonTreeNodeStream = class(TTestCase) + private + function CreateCommonTreeNodeStream(const T: IANTLRInterface): ITreeNodeStream; + function GetStringOfEntireStreamContentsWithNodeTypesOnly( + const Nodes: ITreeNodeStream): String; + function CreateUnBufferedTreeNodeStream(const T: IANTLRInterface): ITreeNodeStream; + public + procedure SetUp; override; + procedure TearDown; override; + published + procedure TestSingleNode; + procedure Test4Nodes; + procedure TestList; + procedure TestFlatList; + procedure TestListWithOneNode; + procedure TestAoverB; + procedure TestLT; + procedure TestMarkRewindEntire; + procedure TestMarkRewindInMiddle; + procedure TestMarkRewindNested; + procedure TestSeek; + procedure TestSeekFromStart; + procedure TestPushPop; + procedure TestNestedPushPop; + procedure TestPushPopFromEOF; + procedure TestStackStretch; + procedure TestBufferOverflow; + procedure TestBufferWrap; + end; + + // Test methods for class IRewriteRuleXxxxStream + TestIRewriteRuleXxxxStream = class(TTestCase) + strict private + function CreateTreeAdaptor: ITreeAdaptor; + function CreateTree(const Token: IToken): ITree; + function CreateToken(const TokenType: Integer; const Text: String): IToken; + function CreateTokenList(const Count: Integer): IList<IToken>; + public + procedure SetUp; override; + procedure TearDown; override; + published + procedure TestRewriteRuleTokenStreamConstructors; + procedure TestRewriteRuleSubtreeStreamConstructors; + procedure TestRewriteRuleNodeStreamConstructors; + + procedure TestRRTokenStreamBehaviourWhileEmpty1; + procedure TestRRSubtreeStreamBehaviourWhileEmpty1; + procedure TestRRNodeStreamBehaviourWhileEmpty1; + + procedure TestRRTokenStreamBehaviourWhileEmpty2; + procedure TestRRSubtreeStreamBehaviourWhileEmpty2; + procedure TestRRNodeStreamBehaviourWhileEmpty2; + + procedure TestRRTokenStreamBehaviourWhileEmpty3; + + procedure TestRRTokenStreamBehaviourWithElements; + procedure TestRRSubtreeStreamBehaviourWithElements; + procedure TestRRNodeStreamBehaviourWithElements; + end; + + // Test methods for class ITreeWizard + TestITreeWizard = class(TTestCase) + strict private + FTokens: TStringArray; + strict private + type + TRecordAllElementsVisitor = class sealed(TTreeWizard.TVisitor) + strict private + FList: IList<IANTLRInterface>; + strict protected + procedure Visit(const T: IANTLRInterface); override; + public + constructor Create(const AList: IList<IANTLRInterface>); + end; + + TTest1ContextVisitor = class sealed(TANTLRObject, IContextVisitor) + strict private + FAdaptor: ITreeAdaptor; + FList: IList<IANTLRInterface>; + protected + { IContextVisitor } + procedure Visit(const T, Parent: IANTLRInterface; const ChildIndex: Integer; + const Labels: IDictionary<String, IANTLRInterface>); + public + constructor Create(const AAdaptor: ITreeAdaptor; + const AList: IList<IANTLRInterface>); + end; + + TTest2ContextVisitor = class sealed(TANTLRObject, IContextVisitor) + strict private + FAdaptor: ITreeAdaptor; + FList: IList<IANTLRInterface>; + protected + { IContextVisitor } + procedure Visit(const T, Parent: IANTLRInterface; const ChildIndex: Integer; + const Labels: IDictionary<String, IANTLRInterface>); + public + constructor Create(const AAdaptor: ITreeAdaptor; + const AList: IList<IANTLRInterface>); + end; + public + constructor Create(MethodName: String); override; + procedure SetUp; override; + procedure TearDown; override; + published + procedure TestSingleNode; + procedure TestSingleNodeWithArg; + procedure TestSingleNodeTree; + procedure TestSingleLevelTree; + procedure TestListTree; + procedure TestInvalidListTree; + procedure TestDoubleLevelTree; + procedure TestSingleNodeIndex; + procedure TestNoRepeatsIndex; + procedure TestRepeatsIndex; + procedure TestNoRepeatsVisit; + procedure TestNoRepeatsVisit2; + procedure TestRepeatsVisit; + procedure TestRepeatsVisit2; + procedure TestRepeatsVisitWithContext; + procedure TestRepeatsVisitWithNullParentAndContext; + procedure TestVisitPattern; + procedure TestVisitPatternMultiple; + procedure TestVisitPatternMultipleWithLabels; + procedure TestParse; + procedure TestParseSingleNode; + procedure TestParseFlatTree; + procedure TestWildcard; + procedure TestParseWithText; + procedure TestParseWithTextFails; + procedure TestParseLabels; + procedure TestParseWithWildcardLabels; + procedure TestParseLabelsAndTestText; + procedure TestParseLabelsInNestedTree; + procedure TestEquals; + procedure TestEqualsWithText; + procedure TestEqualsWithMismatchedText; + procedure TestFindPattern; + end; + +implementation + +procedure TestICommonTree.SetUp; +begin +end; + +procedure TestICommonTree.TearDown; +begin +end; + +procedure TestICommonTree.Test4Nodes; +var + R0: ICommonTree; +begin + // ^(101 ^(102 103) 104) + R0 := TCommonTree.Create(TCommonToken.Create(101)); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(102))); + R0.GetChild(0).AddChild(TCommonTree.Create(TCommonToken.Create(103))); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(104))); + CheckNull(R0.Parent); + CheckEquals(R0.ChildIndex,-1); +end; + +procedure TestICommonTree.TestAddListToExistChildren; +var + Root, R0, C0, C1, C2: ICommonTree; +begin + // Add child ^(nil 101 102 103) to root ^(5 6) + // should add 101 102 103 to end of 5's child list + Root := TCommonTree.Create(TCommonToken.Create(5)); + Root.AddChild(TCommonTree.Create(TCommonToken.Create(6))); + + // child tree + R0 := TCommonTree.Create(IToken(nil)); + C0 := TCommonTree.Create(TCommonToken.Create(101)); + C1 := TCommonTree.Create(TCommonToken.Create(102)); + C2 := TCommonTree.Create(TCommonToken.Create(103)); + R0.AddChild(C0); + R0.AddChild(C1); + R0.AddChild(C2); + + Root.AddChild(R0); + + CheckNull(Root.Parent); + CheckEquals(Root.ChildIndex, -1); + + // check children of root all point at root + Check(C0.Parent = Root); + Check(C0.ChildIndex = 1); + Check(C1.Parent = Root); + Check(C1.ChildIndex = 2); + Check(C2.Parent = Root); + Check(C2.ChildIndex = 3); +end; + +procedure TestICommonTree.TestBecomeRoot; +var + OldRoot, NewRoot: ICommonTree; + Adaptor: ITreeAdaptor; +begin + // 5 becomes new root of ^(nil 101 102 103) + NewRoot := TCommonTree.Create(TCommonToken.Create(5)); + OldRoot := TCommonTree.Create(IToken(nil)); + OldRoot.AddChild(TCommonTree.Create(TCommonToken.Create(101))); + OldRoot.AddChild(TCommonTree.Create(TCommonToken.Create(102))); + OldRoot.AddChild(TCommonTree.Create(TCommonToken.Create(103))); + Adaptor := TCommonTreeAdaptor.Create; + Adaptor.BecomeRoot(NewRoot, OldRoot); + NewRoot.SanityCheckParentAndChildIndexes; +end; + +procedure TestICommonTree.TestBecomeRoot2; +var + OldRoot, NewRoot: ICommonTree; + Adaptor: ITreeAdaptor; +begin + // 5 becomes new root of ^(101 102 103) + NewRoot := TCommonTree.Create(TCommonToken.Create(5)); + OldRoot := TCommonTree.Create(TCommonToken.Create(101)); + OldRoot.AddChild(TCommonTree.Create(TCommonToken.Create(102))); + OldRoot.AddChild(TCommonTree.Create(TCommonToken.Create(103))); + Adaptor := TCommonTreeAdaptor.Create; + Adaptor.BecomeRoot(NewRoot, OldRoot); + NewRoot.SanityCheckParentAndChildIndexes; +end; + +procedure TestICommonTree.TestBecomeRoot3; +var + OldRoot, NewRoot: ICommonTree; + Adaptor: ITreeAdaptor; +begin + // ^(nil 5) becomes new root of ^(nil 101 102 103) + NewRoot := TCommonTree.Create(IToken(nil)); + NewRoot.AddChild(TCommonTree.Create(TCommonToken.Create(5))); + OldRoot := TCommonTree.Create(IToken(nil)); + OldRoot.AddChild(TCommonTree.Create(TCommonToken.Create(101))); + OldRoot.AddChild(TCommonTree.Create(TCommonToken.Create(102))); + OldRoot.AddChild(TCommonTree.Create(TCommonToken.Create(103))); + Adaptor := TCommonTreeAdaptor.Create; + Adaptor.BecomeRoot(NewRoot, OldRoot); + NewRoot.SanityCheckParentAndChildIndexes; +end; + +procedure TestICommonTree.TestBecomeRoot5; +var + OldRoot, NewRoot: ICommonTree; + Adaptor: ITreeAdaptor; +begin + // ^(nil 5) becomes new root of ^(101 102 103) + NewRoot := TCommonTree.Create(IToken(nil)); + NewRoot.AddChild(TCommonTree.Create(TCommonToken.Create(5))); + OldRoot := TCommonTree.Create(TCommonToken.Create(101)); + OldRoot.AddChild(TCommonTree.Create(TCommonToken.Create(102))); + OldRoot.AddChild(TCommonTree.Create(TCommonToken.Create(103))); + Adaptor := TCommonTreeAdaptor.Create; + Adaptor.BecomeRoot(NewRoot, OldRoot); + NewRoot.SanityCheckParentAndChildIndexes; +end; + +procedure TestICommonTree.TestBecomeRoot6; +var + Root0, Root1: ICommonTree; + Adaptor: ITreeAdaptor; +begin + // emulates construction of ^(5 6) + Adaptor := TCommonTreeAdaptor.Create; + Root0 := Adaptor.GetNilNode as ICommonTree; + Root1 := Adaptor.GetNilNode as ICommonTree; + Root1 := Adaptor.BecomeRoot(TCommonTree.Create(TCommonToken.Create(5)), Root1) as ICommonTree; + Adaptor.AddChild(Root1, TCommonTree.Create(TCommonToken.Create(6))); + Adaptor.AddChild(Root0, Root1); + Root0.SanityCheckParentAndChildIndexes; +end; + +procedure TestICommonTree.TestDupTree; +var + R0, R1, Dup: ICommonTree; + R2: ITree; + Adaptor: ICommonTreeAdaptor; +begin + // ^(101 ^(102 103 ^(106 107) ) 104 105) + R0 := TCommonTree.Create(TCommonToken.Create(101)); + R1 := TCommonTree.Create(TCommonToken.Create(102)); + R0.AddChild(R1); + R1.AddChild(TCommonTree.Create(TCommonToken.Create(103))); + R2 := TCommonTree.Create(TCommonToken.Create(106)); + R2.AddChild(TCommonTree.Create(TCommonToken.Create(107))); + R1.AddChild(R2); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(104))); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(105))); + + Adaptor := TCommonTreeAdaptor.Create; + Dup := Adaptor.DupTree(R0) as ICommonTree; + + CheckNull(Dup.Parent); + CheckEquals(Dup.ChildIndex, -1); + Dup.SanityCheckParentAndChildIndexes; +end; + +procedure TestICommonTree.TestList; +var + R0, C0, C1, C2: ICommonTree; +begin + // ^(nil 101 102 103) + R0 := TCommonTree.Create(IToken(nil)); + C0 := TCommonTree.Create(TCommonToken.Create(101)); + C1 := TCommonTree.Create(TCommonToken.Create(102)); + C2 := TCommonTree.Create(TCommonToken.Create(103)); + R0.AddChild(C0); + R0.AddChild(C1); + R0.AddChild(C2); + + CheckNull(R0.Parent); + CheckEquals(R0.ChildIndex, -1); + Check(C0.Parent = R0); + CheckEquals(C0.ChildIndex, 0); + Check(C1.Parent = R0); + CheckEquals(C1.ChildIndex, 1); + Check(C2.Parent = R0); + CheckEquals(C2.ChildIndex, 2); +end; + +procedure TestICommonTree.TestList2; +var + Root, R0, C0, C1, C2: ICommonTree; +begin + // Add child ^(nil 101 102 103) to root 5 + // should pull 101 102 103 directly to become 5's child list + Root := TCommonTree.Create(TClassicToken.Create(5)); + + // child tree + R0 := TCommonTree.Create(IToken(nil)); + C0 := TCommonTree.Create(TCommonToken.Create(101)); + C1 := TCommonTree.Create(TCommonToken.Create(102)); + C2 := TCommonTree.Create(TCommonToken.Create(103)); + R0.AddChild(C0); + R0.AddChild(C1); + R0.AddChild(C2); + + Root.AddChild(R0); + + CheckNull(Root.Parent); + CheckEquals(Root.ChildIndex, -1); + + // check children of root all point at root + Check(C0.Parent = Root); + Check(C0.ChildIndex = 0); + Check(C1.Parent = Root); + Check(C1.ChildIndex = 1); + Check(C2.Parent = Root); + Check(C2.ChildIndex = 2); +end; + +procedure TestICommonTree.TestReplaceAllWithOne; +var + T, NewChild: ICommonTree; +begin + T := TCommonTree.Create(TCommonToken.Create(99, 'a')); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'b'))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'c'))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'd'))); + NewChild := TCommonTree.Create(TCommonToken.Create(99, 'x')); + T.ReplaceChildren(0, 2, NewChild); + CheckEquals(T.ToStringTree, '(a x)'); + T.SanityCheckParentAndChildIndexes; +end; + +procedure TestICommonTree.TestReplaceAllWithTwo; +var + Adaptor: ITreeAdaptor; + T, NewChildren: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + T := TCommonTree.Create(TCommonToken.Create(99, 'a')); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'b'))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'c'))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'd'))); + NewChildren := Adaptor.GetNilNode as ICommonTree; + NewChildren.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'x'))); + NewChildren.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'y'))); + T.ReplaceChildren(0, 2, NewChildren); + CheckEquals(T.ToStringTree, '(a x y)'); + T.SanityCheckParentAndChildIndexes; +end; + +procedure TestICommonTree.TestReplaceAtLeft; +var + T, NewChild: ICommonTree; +begin + T := TCommonTree.Create(TCommonToken.Create(99, 'a')); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'b'))); // index 0 + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'c'))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'd'))); + NewChild := TCommonTree.Create(TCommonToken.Create(99, 'x')); + T.ReplaceChildren(0, 0, NewChild); + CheckEquals(T.ToStringTree, '(a x c d)'); + T.SanityCheckParentAndChildIndexes; +end; + +procedure TestICommonTree.TestReplaceAtRight; +var + T, NewChild: ICommonTree; +begin + T := TCommonTree.Create(TCommonToken.Create(99, 'a')); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'b'))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'c'))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'd'))); // index 2 + NewChild := TCommonTree.Create(TCommonToken.Create(99, 'x')); + T.ReplaceChildren(2, 2, NewChild); + CheckEquals(T.ToStringTree, '(a b c x)'); + T.SanityCheckParentAndChildIndexes; +end; + +procedure TestICommonTree.TestReplaceInMiddle; +var + T, NewChild: ICommonTree; +begin + T := TCommonTree.Create(TCommonToken.Create(99, 'a')); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'b'))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'c'))); // index 1 + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'd'))); + NewChild := TCommonTree.Create(TCommonToken.Create(99, 'x')); + T.ReplaceChildren(1, 1, NewChild); + CheckEquals(T.ToStringTree, '(a b x d)'); + T.SanityCheckParentAndChildIndexes; +end; + +procedure TestICommonTree.TestReplaceOneWithTwoAtLeft; +var + Adaptor: ITreeAdaptor; + T, NewChildren: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + T := TCommonTree.Create(TCommonToken.Create(99, 'a')); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'b'))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'c'))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'd'))); + NewChildren := Adaptor.GetNilNode as ICommonTree; + NewChildren.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'x'))); + NewChildren.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'y'))); + T.ReplaceChildren(0, 0, NewChildren); + CheckEquals(T.ToStringTree, '(a x y c d)'); + T.SanityCheckParentAndChildIndexes; +end; + +procedure TestICommonTree.TestReplaceOneWithTwoAtRight; +var + Adaptor: ITreeAdaptor; + T, NewChildren: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + T := TCommonTree.Create(TCommonToken.Create(99, 'a')); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'b'))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'c'))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'd'))); + NewChildren := Adaptor.GetNilNode as ICommonTree; + NewChildren.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'x'))); + NewChildren.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'y'))); + T.ReplaceChildren(2, 2, NewChildren); + CheckEquals(T.ToStringTree, '(a b c x y)'); + T.SanityCheckParentAndChildIndexes; +end; + +procedure TestICommonTree.TestReplaceOneWithTwoInMiddle; +var + Adaptor: ITreeAdaptor; + T, NewChildren: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + T := TCommonTree.Create(TCommonToken.Create(99, 'a')); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'b'))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'c'))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'd'))); + NewChildren := Adaptor.GetNilNode as ICommonTree; + NewChildren.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'x'))); + NewChildren.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'y'))); + T.ReplaceChildren(1, 1, NewChildren); + CheckEquals(T.ToStringTree, '(a b x y d)'); + T.SanityCheckParentAndChildIndexes; +end; + +procedure TestICommonTree.TestReplaceTwoWithOneAtLeft; +var + T, NewChild: ICommonTree; +begin + T := TCommonTree.Create(TCommonToken.Create(99, 'a')); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'b'))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'c'))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'd'))); + NewChild := TCommonTree.Create(TCommonToken.Create(99, 'x')); + T.ReplaceChildren(0, 1, NewChild); + CheckEquals(T.ToStringTree, '(a x d)'); + T.SanityCheckParentAndChildIndexes; +end; + +procedure TestICommonTree.TestReplaceTwoWithOneAtRight; +var + T, NewChild: ICommonTree; +begin + T := TCommonTree.Create(TCommonToken.Create(99, 'a')); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'b'))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'c'))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(99, 'd'))); + NewChild := TCommonTree.Create(TCommonToken.Create(99, 'x')); + T.ReplaceChildren(1, 2, NewChild); + CheckEquals(T.ToStringTree, '(a b x)'); + T.SanityCheckParentAndChildIndexes; +end; + +procedure TestICommonTree.TestReplaceWithNoChildren; +var + T, NewChild: ICommonTree; + Error: Boolean; +begin + Exit; // already checked. Avoid exception + T := TCommonTree.Create(TCommonToken.Create(101)); + NewChild := TCommonTree.Create(TCommonToken.Create(5)); + Error := False; + try + T.ReplaceChildren(0, 0, NewChild); + except + Error := True; + end; + CheckTrue(Error); +end; + +procedure TestICommonTree.TestReplaceWithOneChildren; +var + T, C0, NewChild: ICommonTree; +begin + // assume token type 99 and use text + T := TCommonTree.Create(TCommonToken.Create(99, 'a')); + C0 := TCommonTree.Create(TCommonToken.Create(99, 'b')); + T.AddChild(C0); + NewChild := TCommonTree.Create(TCommonToken.Create(99, 'c')); + T.ReplaceChildren(0, 0, NewChild); + CheckEquals(T.ToStringTree,'(a c)'); + T.SanityCheckParentAndChildIndexes; +end; + +procedure TestICommonTree.TestSingleNode; +var + T: ICommonTree; +begin + T := TCommonTree.Create(TCommonToken.Create(101)); + CheckNull(T.Parent); + CheckEquals(T.ChildIndex, -1); +end; + +function TestICommonTreeNodeStream.CreateCommonTreeNodeStream( + const T: IANTLRInterface): ITreeNodeStream; +begin + Result := TCommonTreeNodeStream.Create(T); +end; + +function TestICommonTreeNodeStream.CreateUnBufferedTreeNodeStream( + const T: IANTLRInterface): ITreeNodeStream; +begin + Result := TUnBufferedTreeNodeStream.Create(T); +end; + +function TestICommonTreeNodeStream.GetStringOfEntireStreamContentsWithNodeTypesOnly( + const Nodes: ITreeNodeStream): String; +var + Buf: TStringBuilder; + I, TokenType: Integer; + T: IANTLRInterface; +begin + Buf := TStringBuilder.Create; + try + for I := 0 to Nodes.Size - 1 do + begin + T := Nodes.LT(I + 1); + TokenType := Nodes.TreeAdaptor.GetNodeType(T); + if (TokenType <> TToken.DOWN) and (TokenType <> TToken.UP) then + begin + Buf.Append(' '); + Buf.Append(TokenType) + end; + end; + Result := Buf.ToString; + finally + Buf.Free; + end; +end; + +procedure TestICommonTreeNodeStream.SetUp; +begin +end; + +procedure TestICommonTreeNodeStream.TearDown; +begin +end; + +procedure TestICommonTreeNodeStream.Test4Nodes; +var + T: ITree; + Stream: ITreeNodeStream; +begin + /// Test a tree with four nodes - ^(101 ^(102 103) 104) + T := TCommonTree.Create(TCommonToken.Create(101)); + T.AddChild(TCommonTree.Create(TCommonToken.Create(102))); + T.GetChild(0).AddChild(TCommonTree.Create(TCommonToken.Create(103))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(104))); + + Stream := CreateCommonTreeNodeStream(T); + CheckEquals(GetStringOfEntireStreamContentsWithNodeTypesOnly(Stream),' 101 102 103 104'); + CheckEquals(Stream.ToString, ' 101 2 102 2 103 3 104 3'); +end; + +procedure TestICommonTreeNodeStream.TestAoverB; +var + T: ITree; + Stream: ITreeNodeStream; +begin + T := TCommonTree.Create(TCommonToken.Create(101)); + T.AddChild(TCommonTree.Create(TCommonToken.Create(102))); + + Stream := CreateCommonTreeNodeStream(T); + CheckEquals(GetStringOfEntireStreamContentsWithNodeTypesOnly(Stream),' 101 102'); + CheckEquals(Stream.ToString, ' 101 2 102 3'); +end; + +procedure TestICommonTreeNodeStream.TestBufferOverflow; +var + Buf, Buf2: TStringBuilder; + Stream: ITreeNodeStream; + T: ITree; + I: Integer; +begin + Buf := TStringBuilder.Create; + Buf2 := TStringBuilder.Create; + try + // make ^(101 102 ... n) + T := TCommonTree.Create(TCommonToken.Create(101)); + Buf.Append(' 101'); + Buf2.Append(' 101'); + Buf2.Append(' '); + Buf2.Append(TToken.DOWN); + + for I := 0 to TUnBufferedTreeNodeStream.INITIAL_LOOKAHEAD_BUFFER_SIZE + 10 do + begin + T.AddChild(TCommonTree.Create(TCommonToken.Create(102 + I))); + Buf.Append(' '); + Buf.Append(102 + I); + Buf2.Append(' '); + Buf2.Append(102 + I); + end; + Buf2.Append(' '); + Buf2.Append(TToken.UP); + + Stream := CreateUnBufferedTreeNodeStream(T); + CheckEquals(GetStringOfEntireStreamContentsWithNodeTypesOnly(Stream), Buf.ToString); + CheckEquals(Stream.ToString, Buf2.ToString); + finally + Buf2.Free; + Buf.Free; + end; +end; + +/// <summary> +/// Test what happens when tail hits the end of the buffer, but there +/// is more room left. +/// </summary> +/// <remarks> +/// Specifically that would mean that head is not at 0 but has +/// advanced somewhere to the middle of the lookahead buffer. +/// +/// Use Consume() to advance N nodes into lookahead. Then use LT() +/// to load at least INITIAL_LOOKAHEAD_BUFFER_SIZE-N nodes so the +/// buffer has to wrap. +/// </remarks> +procedure TestICommonTreeNodeStream.TestBufferWrap; +const + N = 10; + WrapBy = 4; // wrap around by 4 nodes +var + T: ITree; + I, Remaining: Integer; + Stream: ITreeNodeStream; + Node: ITree; +begin + // make tree with types: 1 2 ... INITIAL_LOOKAHEAD_BUFFER_SIZE+N + T := TCommonTree.Create(IToken(nil)); + for I := 0 to TUnBufferedTreeNodeStream.INITIAL_LOOKAHEAD_BUFFER_SIZE + N - 1 do + T.AddChild(TCommonTree.Create(TCommonToken.Create(I + 1))); + + // move head to index N + Stream := CreateUnBufferedTreeNodeStream(T); + for I := 1 to N do + begin + // consume N + Node := Stream.LT(1) as ITree; + CheckEquals(Node.TokenType, I); + Stream.Consume; + end; + + // now use LT to lookahead past end of buffer + Remaining := TUnBufferedTreeNodeStream.INITIAL_LOOKAHEAD_BUFFER_SIZE - N; + CheckTrue(WrapBy < N); + for I := 1 to Remaining + WrapBy do + begin + // wrap past end of buffer + Node := Stream.LT(I) as ITree; // look ahead to ith token + CheckEquals(Node.TokenType, N + I); + end; +end; + +procedure TestICommonTreeNodeStream.TestFlatList; +var + Root: ITree; + Stream: ITreeNodeStream; +begin + Root := TCommonTree.Create(IToken(nil)); + Root.AddChild(TCommonTree.Create(TCommonToken.Create(101))); + Root.AddChild(TCommonTree.Create(TCommonToken.Create(102))); + Root.AddChild(TCommonTree.Create(TCommonToken.Create(103))); + + Stream := CreateCommonTreeNodeStream(Root); + CheckEquals(GetStringOfEntireStreamContentsWithNodeTypesOnly(Stream),' 101 102 103'); + CheckEquals(Stream.ToString, ' 101 102 103'); +end; + +procedure TestICommonTreeNodeStream.TestList; +var + Root, T, U: ITree; + Stream: ITreeNodeStream; +begin + Root := TCommonTree.Create(IToken(nil)); + + T := TCommonTree.Create(TCommonToken.Create(101)); + T.AddChild(TCommonTree.Create(TCommonToken.Create(102))); + T.GetChild(0).AddChild(TCommonTree.Create(TCommonToken.Create(103))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(104))); + + U := TCommonTree.Create(TCommonToken.Create(105)); + + Root.AddChild(T); + Root.AddChild(U); + + Stream := CreateCommonTreeNodeStream(Root); + CheckEquals(GetStringOfEntireStreamContentsWithNodeTypesOnly(Stream),' 101 102 103 104 105'); + CheckEquals(Stream.ToString, ' 101 2 102 2 103 3 104 3 105'); +end; + +procedure TestICommonTreeNodeStream.TestListWithOneNode; +var + Root: ITree; + Stream: ITreeNodeStream; +begin + Root := TCommonTree.Create(IToken(nil)); + Root.AddChild(TCommonTree.Create(TCommonToken.Create(101))); + + Stream := CreateCommonTreeNodeStream(Root); + CheckEquals(GetStringOfEntireStreamContentsWithNodeTypesOnly(Stream),' 101'); + CheckEquals(Stream.ToString, ' 101'); +end; + +procedure TestICommonTreeNodeStream.TestLT; +var + T: ITree; + Stream: ITreeNodeStream; +begin + // ^(101 ^(102 103) 104) + T := TCommonTree.Create(TCommonToken.Create(101)); + T.AddChild(TCommonTree.Create(TCommonToken.Create(102))); + T.GetChild(0).AddChild(TCommonTree.Create(TCommonToken.Create(103))); + T.AddChild(TCommonTree.Create(TCommonToken.Create(104))); + + Stream := CreateCommonTreeNodeStream(T); + CheckEquals((Stream.LT(1) as ITree).TokenType,101); + CheckEquals((Stream.LT(2) as ITree).TokenType,TToken.DOWN); + CheckEquals((Stream.LT(3) as ITree).TokenType,102); + CheckEquals((Stream.LT(4) as ITree).TokenType,TToken.DOWN); + CheckEquals((Stream.LT(5) as ITree).TokenType,103); + CheckEquals((Stream.LT(6) as ITree).TokenType,TToken.UP); + CheckEquals((Stream.LT(7) as ITree).TokenType,104); + CheckEquals((Stream.LT(8) as ITree).TokenType,TToken.UP); + CheckEquals((Stream.LT(9) as ITree).TokenType,TToken.EOF); + // check way ahead + CheckEquals((Stream.LT(100) as ITree).TokenType,TToken.EOF); +end; + +procedure TestICommonTreeNodeStream.TestMarkRewindEntire; +var + R0, R1, R2: ITree; + Stream: ICommonTreeNodeStream; + M, K: Integer; +begin + // ^(101 ^(102 103 ^(106 107) ) 104 105) + // stream has 7 real + 6 nav nodes + // Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF + R0 := TCommonTree.Create(TCommonToken.Create(101)); + R1 := TCommonTree.Create(TCommonToken.Create(102)); + R0.AddChild(R1); + R1.AddChild(TCommonTree.Create(TCommonToken.Create(103))); + R2 := TCommonTree.Create(TCommonToken.Create(106)); + R2.AddChild(TCommonTree.Create(TCommonToken.Create(107))); + R1.AddChild(R2); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(104))); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(105))); + + Stream := TCommonTreeNodeStream.Create(R0); + M := Stream.Mark; + for K := 1 to 13 do + begin + // consume til end + Stream.LT(1); + Stream.Consume; + end; + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.EOF); + CheckEquals((Stream.LT(-1) as ITree).TokenType,TToken.UP); + Stream.Rewind(M); + + for K := 1 to 13 do + begin + // consume til end + Stream.LT(1); + Stream.Consume; + end; + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.EOF); + CheckEquals((Stream.LT(-1) as ITree).TokenType,TToken.UP); +end; + +procedure TestICommonTreeNodeStream.TestMarkRewindInMiddle; +var + R0, R1, R2: ITree; + Stream: ICommonTreeNodeStream; + M, K: Integer; +begin + // ^(101 ^(102 103 ^(106 107) ) 104 105) + // stream has 7 real + 6 nav nodes + // Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF + R0 := TCommonTree.Create(TCommonToken.Create(101)); + R1 := TCommonTree.Create(TCommonToken.Create(102)); + R0.AddChild(R1); + R1.AddChild(TCommonTree.Create(TCommonToken.Create(103))); + R2 := TCommonTree.Create(TCommonToken.Create(106)); + R2.AddChild(TCommonTree.Create(TCommonToken.Create(107))); + R1.AddChild(R2); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(104))); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(105))); + + Stream := TCommonTreeNodeStream.Create(R0); + for K := 1 to 7 do + begin + // consume til middle + Stream.Consume; + end; + CheckEquals((Stream.LT(1) as ITree).TokenType,107); + M := Stream.Mark; + Stream.Consume; // consume 107 + Stream.Consume; // consume UP + Stream.Consume; // consume UP + Stream.Consume; // consume 104 + Stream.Rewind(M); + + CheckEquals((Stream.LT(1) as ITree).TokenType,107); + Stream.Consume; + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.UP); + Stream.Consume; + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.UP); + Stream.Consume; + CheckEquals((Stream.LT(1) as ITree).TokenType,104); + Stream.Consume; + // now we're past rewind position + CheckEquals((Stream.LT(1) as ITree).TokenType,105); + Stream.Consume; + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.UP); + Stream.Consume; + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.EOF); + CheckEquals((Stream.LT(-1) as ITree).TokenType,TToken.UP); +end; + +procedure TestICommonTreeNodeStream.TestMarkRewindNested; +var + R0, R1, R2: ITree; + Stream: ICommonTreeNodeStream; + M, M2: Integer; +begin + // ^(101 ^(102 103 ^(106 107) ) 104 105) + // stream has 7 real + 6 nav nodes + // Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF + R0 := TCommonTree.Create(TCommonToken.Create(101)); + R1 := TCommonTree.Create(TCommonToken.Create(102)); + R0.AddChild(R1); + R1.AddChild(TCommonTree.Create(TCommonToken.Create(103))); + R2 := TCommonTree.Create(TCommonToken.Create(106)); + R2.AddChild(TCommonTree.Create(TCommonToken.Create(107))); + R1.AddChild(R2); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(104))); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(105))); + + Stream := TCommonTreeNodeStream.Create(R0); + M := Stream.Mark; // MARK at start + Stream.Consume; // consume 101 + Stream.Consume; // consume DN + M2:= Stream.Mark; // MARK on 102 + Stream.Consume; // consume 102 + Stream.Consume; // consume DN + Stream.Consume; // consume 103 + Stream.Consume; // consume 106 + Stream.Rewind(M2); + CheckEquals((Stream.LT(1) as ITree).TokenType,102); + Stream.Consume; + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.DOWN); + Stream.Consume; + // stop at 103 and rewind to start + Stream.Rewind(M); // REWIND to 101 + CheckEquals((Stream.LT(1) as ITree).TokenType,101); + Stream.Consume; + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.DOWN); + Stream.Consume; + CheckEquals((Stream.LT(1) as ITree).TokenType,102); + Stream.Consume; + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.DOWN); +end; + +procedure TestICommonTreeNodeStream.TestNestedPushPop; +const + IndexOf102 = 2; + IndexOf104 = 6; + IndexOf107 = 12; +var + R0, R1, R2, R3: ITree; + Stream: ICommonTreeNodeStream; + K: Integer; +begin + // ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109) + // stream has 9 real + 8 nav nodes + // Sequence of types: 101 DN 102 DN 103 UP 104 DN 105 UP 106 DN 107 UP 108 109 UP + R0 := TCommonTree.Create(TCommonToken.Create(101)); + R1 := TCommonTree.Create(TCommonToken.Create(102)); + R1.AddChild(TCommonTree.Create(TCommonToken.Create(103))); + R0.AddChild(R1); + R2 := TCommonTree.Create(TCommonToken.Create(104)); + R2.AddChild(TCommonTree.Create(TCommonToken.Create(105))); + R0.AddChild(R2); + R3 := TCommonTree.Create(TCommonToken.Create(106)); + R3.AddChild(TCommonTree.Create(TCommonToken.Create(107))); + R0.AddChild(R3); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(108))); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(109))); + + Stream := TCommonTreeNodeStream.Create(R0); + CheckEquals(Stream.ToString, ' 101 2 102 2 103 3 104 2 105 3 106 2 107 3 108 109 3'); + + // Assume we want to hit node 107 and then "call 102", which + // calls 104, then return + for K := 1 to IndexOf107 do + // consume til 107 node + Stream.Consume; + + CheckEquals((Stream.LT(1) as ITree).TokenType,107); + // CALL 102 + Stream.Push(IndexOf102); + CheckEquals((Stream.LT(1) as ITree).TokenType,102); + Stream.Consume; // consume 102 + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.DOWN); + Stream.Consume; // consume DN + CheckEquals((Stream.LT(1) as ITree).TokenType,103); + Stream.Consume; // consume 103 + + // CALL 104 + Stream.Push(IndexOf104); + CheckEquals((Stream.LT(1) as ITree).TokenType,104); + Stream.Consume; // consume 104 + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.DOWN); + Stream.Consume; // consume DN + CheckEquals((Stream.LT(1) as ITree).TokenType,105); + Stream.Consume; // consume 1045 + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.UP); + + // RETURN (to UP node in 102 subtree) + Stream.Pop; + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.UP); + + // RETURN (to empty stack) + Stream.Pop; + CheckEquals((Stream.LT(1) as ITree).TokenType,107); +end; + +procedure TestICommonTreeNodeStream.TestPushPop; +const + IndexOf102 = 2; + IndexOf107 = 12; +var + R0, R1, R2, R3: ITree; + Stream: ICommonTreeNodeStream; + K: Integer; +begin + // ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109) + // stream has 9 real + 8 nav nodes + // Sequence of types: 101 DN 102 DN 103 UP 104 DN 105 UP 106 DN 107 UP 108 109 UP + R0 := TCommonTree.Create(TCommonToken.Create(101)); + R1 := TCommonTree.Create(TCommonToken.Create(102)); + R1.AddChild(TCommonTree.Create(TCommonToken.Create(103))); + R0.AddChild(R1); + R2 := TCommonTree.Create(TCommonToken.Create(104)); + R2.AddChild(TCommonTree.Create(TCommonToken.Create(105))); + R0.AddChild(R2); + R3 := TCommonTree.Create(TCommonToken.Create(106)); + R3.AddChild(TCommonTree.Create(TCommonToken.Create(107))); + R0.AddChild(R3); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(108))); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(109))); + + Stream := TCommonTreeNodeStream.Create(R0); + CheckEquals(Stream.ToString, ' 101 2 102 2 103 3 104 2 105 3 106 2 107 3 108 109 3'); + + // Assume we want to hit node 107 and then "call 102" then return + for K := 1 to IndexOf107 do + // consume til 107 node + Stream.Consume; + + // CALL 102 + CheckEquals((Stream.LT(1) as ITree).TokenType,107); + Stream.Push(IndexOf102); + CheckEquals((Stream.LT(1) as ITree).TokenType,102); + Stream.Consume; // consume 102 + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.DOWN); + Stream.Consume; // consume DN + CheckEquals((Stream.LT(1) as ITree).TokenType,103); + Stream.Consume; // consume 103 + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.UP); + // RETURN + Stream.Pop; + CheckEquals((Stream.LT(1) as ITree).TokenType,107); +end; + +procedure TestICommonTreeNodeStream.TestPushPopFromEOF; +const + IndexOf102 = 2; + IndexOf104 = 6; +var + R0, R1, R2, R3: ITree; + Stream: ICommonTreeNodeStream; +begin + // ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109) + // stream has 9 real + 8 nav nodes + // Sequence of types: 101 DN 102 DN 103 UP 104 DN 105 UP 106 DN 107 UP 108 109 UP + R0 := TCommonTree.Create(TCommonToken.Create(101)); + R1 := TCommonTree.Create(TCommonToken.Create(102)); + R1.AddChild(TCommonTree.Create(TCommonToken.Create(103))); + R0.AddChild(R1); + R2 := TCommonTree.Create(TCommonToken.Create(104)); + R2.AddChild(TCommonTree.Create(TCommonToken.Create(105))); + R0.AddChild(R2); + R3 := TCommonTree.Create(TCommonToken.Create(106)); + R3.AddChild(TCommonTree.Create(TCommonToken.Create(107))); + R0.AddChild(R3); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(108))); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(109))); + + Stream := TCommonTreeNodeStream.Create(R0); + CheckEquals(Stream.ToString, ' 101 2 102 2 103 3 104 2 105 3 106 2 107 3 108 109 3'); + + while (Stream.LA(1) <> TToken.EOF) do + Stream.Consume; + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.EOF); + + // CALL 102 + Stream.Push(IndexOf102); + CheckEquals((Stream.LT(1) as ITree).TokenType,102); + Stream.Consume; // consume 102 + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.DOWN); + Stream.Consume; // consume DN + CheckEquals((Stream.LT(1) as ITree).TokenType,103); + Stream.Consume; // consume 103 + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.UP); + // RETURN (to empty stack) + Stream.Pop; + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.EOF); + + // CALL 104 + Stream.Push(IndexOf104); + CheckEquals((Stream.LT(1) as ITree).TokenType,104); + Stream.Consume; // consume 104 + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.DOWN); + Stream.Consume; // consume DN + CheckEquals((Stream.LT(1) as ITree).TokenType,105); + Stream.Consume; // consume 105 + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.UP); + // RETURN (to empty stack) + Stream.Pop; + CheckEquals((Stream.LT(1) as ITree).TokenType,TToken.EOF); +end; + +procedure TestICommonTreeNodeStream.TestSeek; +var + R0, R1, R2: ITree; + Stream: ICommonTreeNodeStream; +begin + // ^(101 ^(102 103 ^(106 107) ) 104 105) + // stream has 7 real + 6 nav nodes + // Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF + R0 := TCommonTree.Create(TCommonToken.Create(101)); + R1 := TCommonTree.Create(TCommonToken.Create(102)); + R0.AddChild(R1); + R1.AddChild(TCommonTree.Create(TCommonToken.Create(103))); + R2 := TCommonTree.Create(TCommonToken.Create(106)); + R2.AddChild(TCommonTree.Create(TCommonToken.Create(107))); + R1.AddChild(R2); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(104))); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(105))); + + Stream := TCommonTreeNodeStream.Create(R0); + Stream.Consume; // consume 101 + Stream.Consume; // consume DN + Stream.Consume; // consume 102 + Stream.Seek(7); // seek to 107 + CheckEquals((Stream.LT(1) as ITree).TokenType,107); + Stream.Consume; // consume 107 + Stream.Consume; // consume UP + Stream.Consume; // consume UP + CheckEquals((Stream.LT(1) as ITree).TokenType,104); +end; + +procedure TestICommonTreeNodeStream.TestSeekFromStart; +var + R0, R1, R2: ITree; + Stream: ICommonTreeNodeStream; +begin + // ^(101 ^(102 103 ^(106 107) ) 104 105) + // stream has 7 real + 6 nav nodes + // Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF + R0 := TCommonTree.Create(TCommonToken.Create(101)); + R1 := TCommonTree.Create(TCommonToken.Create(102)); + R0.AddChild(R1); + R1.AddChild(TCommonTree.Create(TCommonToken.Create(103))); + R2 := TCommonTree.Create(TCommonToken.Create(106)); + R2.AddChild(TCommonTree.Create(TCommonToken.Create(107))); + R1.AddChild(R2); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(104))); + R0.AddChild(TCommonTree.Create(TCommonToken.Create(105))); + + Stream := TCommonTreeNodeStream.Create(R0); + Stream.Seek(7); // seek to 107 + CheckEquals((Stream.LT(1) as ITree).TokenType,107); + Stream.Consume; // consume 107 + Stream.Consume; // consume UP + Stream.Consume; // consume UP + CheckEquals((Stream.LT(1) as ITree).TokenType,104); +end; + +procedure TestICommonTreeNodeStream.TestSingleNode; +var + T: ITree; + Stream: ITreeNodeStream; +begin + T := TCommonTree.Create(TCommonToken.Create(101)); + Stream := CreateCommonTreeNodeStream(T); + CheckEquals(GetStringOfEntireStreamContentsWithNodeTypesOnly(Stream),' 101'); + CheckEquals(Stream.ToString, ' 101'); +end; + +procedure TestICommonTreeNodeStream.TestStackStretch; +var + R0: ICommonTree; + Stream: ICommonTreeNodeStream; + I: Integer; +begin + // make more than INITIAL_CALL_STACK_SIZE pushes + R0 := TCommonTree.Create(TCommonToken.Create(101)); + Stream := TCommonTreeNodeStream.Create(R0); + + // go 1 over initial size + for I := 1 to TCommonTreeNodeStream.INITIAL_CALL_STACK_SIZE + 1 do + Stream.Push(I); + + CheckEquals(Stream.Pop, 10); + CheckEquals(Stream.Pop, 9); +end; + +function TestIRewriteRuleXxxxStream.CreateToken(const TokenType: Integer; + const Text: String): IToken; +begin + Result := TCommonToken.Create(TokenType, Text); +end; + +function TestIRewriteRuleXxxxStream.CreateTokenList( + const Count: Integer): IList<IToken>; +var + I: Integer; +begin + Result := TList<IToken>.Create; + for I := 0 to Count - 1 do + Result.Add(TCommonToken.Create(I + 1,'test token ' + IntToStr(I + 1) + + ' without any real context')); +end; + +function TestIRewriteRuleXxxxStream.CreateTree(const Token: IToken): ITree; +begin + Result := TCommonTree.Create(Token); +end; + +function TestIRewriteRuleXxxxStream.CreateTreeAdaptor: ITreeAdaptor; +begin + Result := TCommonTreeAdaptor.Create; +end; + +procedure TestIRewriteRuleXxxxStream.SetUp; +begin +end; + +procedure TestIRewriteRuleXxxxStream.TearDown; +begin +end; + +procedure TestIRewriteRuleXxxxStream.TestRewriteRuleNodeStreamConstructors; +var + NodeTest1, NodeTest2, NodeTest3: IRewriteRuleNodeStream; +begin + NodeTest1 := TRewriteRuleNodeStream.Create(CreateTreeAdaptor, + 'RewriteRuleNodeStream test1'); + + NodeTest2 := TRewriteRuleNodeStream.Create(CreateTreeAdaptor, + 'RewriteRuleNodeStream test2', + CreateToken(1,'test token without any real context')); + + NodeTest3 := TRewriteRuleNodeStream.Create(CreateTreeAdaptor, + 'RewriteRuleNodeStream test3', CreateTokenList(4)); +end; + +procedure TestIRewriteRuleXxxxStream.TestRewriteRuleSubtreeStreamConstructors; +var + SubtreeTest1, SubtreeTest2, SubtreeTest3: IRewriteRuleSubtreeStream; +begin + SubtreeTest1 := TRewriteRuleSubtreeStream.Create(CreateTreeAdaptor, + 'RewriteRuleSubtreeStream test1'); + + SubtreeTest2 := TRewriteRuleSubtreeStream.Create(CreateTreeAdaptor, + 'RewriteRuleSubtreeStream test2', + CreateToken(1,'test token without any real context')); + + SubtreeTest3 := TRewriteRuleSubtreeStream.Create(CreateTreeAdaptor, + 'RewriteRuleSubtreeStream test3', CreateTokenList(4)); +end; + +procedure TestIRewriteRuleXxxxStream.TestRewriteRuleTokenStreamConstructors; +var + TokenTest1, TokenTest2, TokenTest3: IRewriteRuleTokenStream; +begin + TokenTest1 := TRewriteRuleTokenStream.Create(CreateTreeAdaptor, + 'RewriteRuleTokenStream test1'); + + TokenTest2 := TRewriteRuleTokenStream.Create(CreateTreeAdaptor, + 'RewriteRuleTokenStream test2', + CreateToken(1, 'test token without any real context')); + + TokenTest3 := TRewriteRuleTokenStream.Create(CreateTreeAdaptor, + 'RewriteRuleTokenStream test3', CreateTokenList(4)); +end; + +procedure TestIRewriteRuleXxxxStream.TestRRNodeStreamBehaviourWhileEmpty1; +const + Description = 'RewriteRuleNodeStream test'; +var + NodeTest: IRewriteRuleNodeStream; +begin + ExpectedException := ERewriteEmptyStreamException; + NodeTest := TRewriteRuleNodeStream.Create(CreateTreeAdaptor, Description); + + CheckFalse(NodeTest.HasNext); + CheckEquals(Description, NodeTest.Description); + CheckEquals(NodeTest.Size, 0); + NodeTest.Reset; + CheckEquals(NodeTest.Size, 0); + NodeTest.NextNode; +end; + +procedure TestIRewriteRuleXxxxStream.TestRRNodeStreamBehaviourWhileEmpty2; +const + Description = 'RewriteRuleNodeStream test'; +var + NodeTest: IRewriteRuleNodeStream; +begin + ExpectedException := ERewriteEmptyStreamException; + NodeTest := TRewriteRuleNodeStream.Create(CreateTreeAdaptor, Description); + NodeTest.NextTree; +end; + +procedure TestIRewriteRuleXxxxStream.TestRRNodeStreamBehaviourWithElements; +var + NodeTest: IRewriteRuleNodeStream; + Token1, Token2: IToken; + Tree1, Tree2: ITree; + ReturnedTree: ICommonTree; +begin + ExpectedException := ERewriteCardinalityException; + NodeTest := TRewriteRuleNodeStream.Create(CreateTreeAdaptor, 'RewriteRuleNodeStream test'); + Token1 := CreateToken(1, 'test token without any real context'); + Tree1 := CreateTree(Token1); + + // Test Add() + NodeTest.Add(Tree1); + CheckEquals(NodeTest.Size, 1); + CheckTrue(NodeTest.HasNext); + + // Test NextNode() + ReturnedTree := NodeTest.NextNode as ICommoNTree; + CheckEquals(ReturnedTree.TokenType, Tree1.TokenType); + CheckEquals(NodeTest.Size, 1); + CheckFalse(NodeTest.HasNext); + NodeTest.Reset; + CheckEquals(NodeTest.Size, 1); + CheckTrue(NodeTest.HasNext); + + // Test NextTree() + ReturnedTree := NodeTest.NextTree as ICommonTree; + Check(SameObj(Token1, ReturnedTree.Token)); + CheckEquals(NodeTest.Size, 1); + CheckFalse(NodeTest.HasNext); + NodeTest.Reset; + CheckEquals(NodeTest.Size, 1); + CheckTrue(NodeTest.HasNext); + + // Test, what happens with two elements + Token2 := CreateToken(2, 'test token without any real context'); + Tree2 := CreateTree(Token2); + NodeTest.Add(Tree2); + CheckEquals(NodeTest.Size, 2); + CheckTrue(NodeTest.HasNext); + ReturnedTree := NodeTest.NextTree as ICommonTree; + Check(SameObj(Token1, ReturnedTree.Token)); + CheckEquals(NodeTest.Size, 2); + CheckTrue(NodeTest.HasNext); + ReturnedTree := NodeTest.NextTree as ICommonTree; + Check(SameObj(Token2, ReturnedTree.Token)); + CheckFalse(NodeTest.HasNext); + + // Test exception + NodeTest.NextTree; +end; + +procedure TestIRewriteRuleXxxxStream.TestRRSubtreeStreamBehaviourWhileEmpty1; +const + Description = 'RewriteRuleSubtreeStream test'; +var + SubtreeTest: IRewriteRuleSubtreeStream; +begin + ExpectedException := ERewriteEmptyStreamException; + SubtreeTest := TRewriteRuleSubtreeStream.Create(CreateTreeAdaptor, Description); + + CheckFalse(SubtreeTest.HasNext); + CheckEquals(Description, SubtreeTest.Description); + CheckEquals(SubtreeTest.Size, 0); + SubtreeTest.Reset; + CheckEquals(SubtreeTest.Size, 0); + SubtreeTest.NextNode; +end; + +procedure TestIRewriteRuleXxxxStream.TestRRSubtreeStreamBehaviourWhileEmpty2; +const + Description = 'RewriteRuleSubtreeStream test'; +var + SubtreeTest: IRewriteRuleSubtreeStream; +begin + ExpectedException := ERewriteEmptyStreamException; + SubtreeTest := TRewriteRuleSubtreeStream.Create(CreateTreeAdaptor, Description); + SubtreeTest.NextTree; +end; + +procedure TestIRewriteRuleXxxxStream.TestRRSubtreeStreamBehaviourWithElements; +var + SubtreeTest: IRewriteRuleSubtreeStream; + Token1, Token2: IToken; + Tree1, Tree2: ITree; + ReturnedTree: ICommonTree; +begin + ExpectedException := ERewriteCardinalityException; + SubtreeTest := TRewriteRuleSubtreeStream.Create(CreateTreeAdaptor, 'RewriteRuleSubtreeStream test'); + Token1 := CreateToken(1, 'test token without any real context'); + Tree1 := CreateTree(Token1); + + // Test Add() + SubtreeTest.Add(Tree1); + CheckEquals(SubtreeTest.Size, 1); + CheckTrue(SubtreeTest.HasNext); + + // Test NextNode() + Check(SameObj(SubtreeTest.NextNode, Tree1)); + CheckEquals(SubtreeTest.Size, 1); + CheckFalse(SubtreeTest.HasNext); + SubtreeTest.Reset; + CheckEquals(SubtreeTest.Size, 1); + CheckTrue(SubtreeTest.HasNext); + + // Test NextTree() + ReturnedTree := SubtreeTest.NextTree as ICommonTree; + Check(SameObj(Token1, ReturnedTree.Token)); + CheckEquals(SubtreeTest.Size, 1); + CheckFalse(SubtreeTest.HasNext); + SubtreeTest.Reset; + CheckEquals(SubtreeTest.Size, 1); + CheckTrue(SubtreeTest.HasNext); + + // Test, what happens with two elements + Token2 := CreateToken(2, 'test token without any real context'); + Tree2 := CreateTree(Token2); + SubtreeTest.Add(Tree2); + CheckEquals(SubtreeTest.Size, 2); + CheckTrue(SubtreeTest.HasNext); + ReturnedTree := SubtreeTest.NextTree as ICommonTree; + Check(SameObj(Token1, ReturnedTree.Token)); + CheckEquals(SubtreeTest.Size, 2); + CheckTrue(SubtreeTest.HasNext); + ReturnedTree := SubtreeTest.NextTree as ICommonTree; + Check(SameObj(Token2, ReturnedTree.Token)); + CheckFalse(SubtreeTest.HasNext); + + // Test exception + SubtreeTest.NextTree; +end; + +procedure TestIRewriteRuleXxxxStream.TestRRTokenStreamBehaviourWhileEmpty1; +const + Description = 'RewriteRuleTokenStream test'; +var + TokenTest: IRewriteRuleTokenStream; +begin + ExpectedException := ERewriteEmptyStreamException; + TokenTest := TRewriteRuleTokenStream.Create(CreateTreeAdaptor, Description); + + CheckFalse(TokenTest.HasNext); + CheckEquals(Description, TokenTest.Description); + CheckEquals(TokenTest.Size, 0); + TokenTest.Reset; + CheckEquals(TokenTest.Size, 0); + TokenTest.NextNode; +end; + +procedure TestIRewriteRuleXxxxStream.TestRRTokenStreamBehaviourWhileEmpty2; +const + Description = 'RewriteRuleTokenStream test'; +var + TokenTest: IRewriteRuleTokenStream; +begin + ExpectedException := ERewriteEmptyStreamException; + TokenTest := TRewriteRuleTokenStream.Create(CreateTreeAdaptor, Description); + TokenTest.NextTree; +end; + +procedure TestIRewriteRuleXxxxStream.TestRRTokenStreamBehaviourWhileEmpty3; +const + Description = 'RewriteRuleTokenStream test'; +var + TokenTest: IRewriteRuleTokenStream; +begin + ExpectedException := ERewriteEmptyStreamException; + TokenTest := TRewriteRuleTokenStream.Create(CreateTreeAdaptor, Description); + TokenTest.NextToken; +end; + +procedure TestIRewriteRuleXxxxStream.TestRRTokenStreamBehaviourWithElements; +var + TokenTest: IRewriteRuleTokenStream; + Token1, Token2, ReturnedToken: IToken; + Tree: ICommonTree; +begin + ExpectedException := ERewriteCardinalityException; + TokenTest := TRewriteRuleTokenStream.Create(CreateTreeAdaptor, 'RewriteRuleTokenStream test'); + Token1 := CreateToken(1, 'test token without any real context'); + + // Test Add() + TokenTest.Add(Token1); + CheckEquals(TokenTest.Size, 1); + CheckTrue(TokenTest.HasNext); + + // Test NextNode() + Tree := TokenTest.NextNode as ICommonTree; + Check(SameObj(Tree.Token, Token1)); + CheckEquals(TokenTest.Size, 1); + CheckFalse(TokenTest.HasNext); + TokenTest.Reset; + CheckEquals(TokenTest.Size, 1); + CheckTrue(TokenTest.HasNext); + + // Test NextToken() + ReturnedToken := TokenTest.NextToken; + Check(SameObj(Token1, ReturnedToken)); + CheckEquals(TokenTest.Size, 1); + CheckFalse(TokenTest.HasNext); + TokenTest.Reset; + CheckEquals(TokenTest.Size, 1); + CheckTrue(TokenTest.HasNext); + + // Test NextTree() + ReturnedToken := TokenTest.NextTree as IToken; + Check(SameObj(Token1, ReturnedToken)); + CheckEquals(TokenTest.Size, 1); + CheckFalse(TokenTest.HasNext); + TokenTest.Reset; + CheckEquals(TokenTest.Size, 1); + CheckTrue(TokenTest.HasNext); + + // Test, what happens with two elements + Token2 := CreateToken(2, 'test token without any real context'); + TokenTest.Add(Token2); + CheckEquals(TokenTest.Size, 2); + CheckTrue(TokenTest.HasNext); + ReturnedToken := TokenTest.NextToken; + Check(SameObj(Token1, ReturnedToken)); + CheckEquals(TokenTest.Size, 2); + CheckTrue(TokenTest.HasNext); + ReturnedToken := TokenTest.NextToken; + Check(SameObj(Token2, ReturnedToken)); + CheckFalse(TokenTest.HasNext); + + // Test exception + TokenTest.NextToken; +end; + +constructor TestITreeWizard.Create(MethodName: String); +const + TOKENS: array [0..11] of String = ('', '', '', '', '', 'A', 'B', 'C', 'D', 'E', 'ID', 'VAR'); +var + I: Integer; +begin + inherited; + SetLength(FTokens,Length(TOKENS)); + for I := 0 to Length(TOKENS) - 1 do + FTokens[I] := TOKENS[I]; +end; + +procedure TestITreeWizard.SetUp; +begin +end; + +procedure TestITreeWizard.TearDown; +begin +end; + +procedure TestITreeWizard.TestDoubleLevelTree; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A (B C) (B D) E)') as ICommonTree; + CheckEquals(T.ToStringTree, '(A (B C) (B D) E)'); +end; + +procedure TestITreeWizard.TestEquals; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T1, T2: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T1 := Wiz.CreateTreeOrNode('(A B C)') as ICommonTree; + T2 := Wiz.CreateTreeOrNode('(A B C)') as ICommonTree; + CheckTrue(Wiz.Equals(T1, T2, Adaptor)); +end; + +procedure TestITreeWizard.TestEqualsWithMismatchedText; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T1, T2: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T1 := Wiz.CreateTreeOrNode('(A B[foo] C)') as ICommonTree; + T2 := Wiz.CreateTreeOrNode('(A B C)') as ICommonTree; + CheckFalse(Wiz.Equals(T1, T2, Adaptor)); +end; + +procedure TestITreeWizard.TestEqualsWithText; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T1, T2: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T1 := Wiz.CreateTreeOrNode('(A B[foo] C)') as ICommonTree; + T2 := Wiz.CreateTreeOrNode('(A B[foo] C)') as ICommonTree; + CheckTrue(Wiz.Equals(T1, T2, Adaptor)); +end; + +procedure TestITreeWizard.TestFindPattern; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; + Subtrees, Elements: IList<IANTLRInterface>; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B C (A[foo] B[bar]) (D (A[big] B[dog])))') as ICommonTree; + Subtrees := Wiz.Find(T, '(A B)'); + Elements := Subtrees; + CheckEquals('[foo, big]', TCollectionUtils.ListToString(Elements)); +end; + +procedure TestITreeWizard.TestInvalidListTree; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('A B C') as ICommonTree; + CheckNull(T); +end; + +procedure TestITreeWizard.TestListTree; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(nil A B C)') as ICommonTree; + CheckEquals(T.ToStringTree, 'A B C'); +end; + +procedure TestITreeWizard.TestNoRepeatsIndex; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; + M: IDictionary<Integer, IList<IANTLRInterface>>; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B C D)') as ICommonTree; + M := Wiz.Index(T); + CheckEquals('{5=[A], 8=[D], 7=[C], 6=[B]}' ,TCollectionUtils.DictionaryToString(M)); +end; + +procedure TestITreeWizard.TestNoRepeatsVisit; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; + Elements: IList<IANTLRInterface>; + Visitor: IContextVisitor; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B C D)') as ICommonTree; + Elements := TList<IANTLRInterface>.Create; + Visitor := TRecordAllElementsVisitor.Create(Elements); + Wiz.Visit(T, Wiz.GetTokenType('B'), Visitor); + CheckEquals('[B]' ,TCollectionUtils.ListToString(Elements)); +end; + +procedure TestITreeWizard.TestNoRepeatsVisit2; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; + Elements: IList<IANTLRInterface>; + Visitor: IContextVisitor; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B (A C B) B D D)') as ICommonTree; + Elements := TList<IANTLRInterface>.Create; + Visitor := TRecordAllElementsVisitor.Create(Elements); + Wiz.Visit(T, Wiz.GetTokenType('C'), Visitor); + CheckEquals('[C]' ,TCollectionUtils.ListToString(Elements)); +end; + +procedure TestITreeWizard.TestParse; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B C)') as ICommonTree; + CheckTrue(Wiz.Parse(T, '(A B C)')); +end; + +procedure TestITreeWizard.TestParseFlatTree; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(nil A B C)') as ICommonTree; + CheckTrue(Wiz.Parse(T, '(nil A B C)')); +end; + +procedure TestITreeWizard.TestParseLabels; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; + Labels: IDictionary<String, IANTLRInterface>; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B C)') as ICommonTree; + Labels := TDictionary<String, IANTLRInterface>.Create; + CheckTrue(Wiz.Parse(T, '(%a:A %b:B %c:C)', Labels)); + CheckEquals('A', Labels['a'].ToString); + CheckEquals('B', Labels['b'].ToString); + CheckEquals('C', Labels['c'].ToString); +end; + +procedure TestITreeWizard.TestParseLabelsAndTestText; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; + Labels: IDictionary<String, IANTLRInterface>; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B[foo] C)') as ICommonTree; + Labels := TDictionary<String, IANTLRInterface>.Create; + CheckTrue(Wiz.Parse(T, '(%a:A %b:B[foo] %c:C)', Labels)); + CheckEquals('A', Labels['a'].ToString); + CheckEquals('foo', Labels['b'].ToString); + CheckEquals('C', Labels['c'].ToString); +end; + +procedure TestITreeWizard.TestParseLabelsInNestedTree; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; + Labels: IDictionary<String, IANTLRInterface>; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A (B C) (D E))') as ICommonTree; + Labels := TDictionary<String, IANTLRInterface>.Create; + CheckTrue(Wiz.Parse(T, '(%a:A (%b:B %c:C) (%d:D %e:E) )', Labels)); + CheckEquals('A', Labels['a'].ToString); + CheckEquals('B', Labels['b'].ToString); + CheckEquals('C', Labels['c'].ToString); + CheckEquals('D', Labels['d'].ToString); + CheckEquals('E', Labels['e'].ToString); +end; + +procedure TestITreeWizard.TestParseSingleNode; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('A') as ICommonTree; + CheckTrue(Wiz.Parse(T, 'A')); +end; + +procedure TestITreeWizard.TestParseWithText; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B[foo] C[bar])') as ICommonTree; + // C pattern has no text arg so despite [bar] in t, no need + // to match text--check structure only. + CheckTrue(Wiz.Parse(T, '(A B[foo] C)')); +end; + +procedure TestITreeWizard.TestParseWithTextFails; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B C)') as ICommonTree; + CheckFalse(Wiz.Parse(T, '(A[foo] B C)')); +end; + +procedure TestITreeWizard.TestParseWithWildcardLabels; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; + Labels: IDictionary<String, IANTLRInterface>; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B C)') as ICommonTree; + Labels := TDictionary<String, IANTLRInterface>.Create; + CheckTrue(Wiz.Parse(T, '(A %b:. %c:.)', Labels)); + CheckEquals('B', Labels['b'].ToString); + CheckEquals('C', Labels['c'].ToString); +end; + +procedure TestITreeWizard.TestRepeatsIndex; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; + M: IDictionary<Integer, IList<IANTLRInterface>>; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B (A C B) B D D)') as ICommonTree; + M := Wiz.Index(T); + CheckEquals('{5=[A, A], 8=[D, D], 7=[C], 6=[B, B, B]}' ,TCollectionUtils.DictionaryToString(M)); +end; + +procedure TestITreeWizard.TestRepeatsVisit; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; + Elements: IList<IANTLRInterface>; + Visitor: IContextVisitor; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B (A C B) B D D)') as ICommonTree; + Elements := TList<IANTLRInterface>.Create; + Visitor := TRecordAllElementsVisitor.Create(Elements); + Wiz.Visit(T, Wiz.GetTokenType('B'), Visitor); + CheckEquals('[B, B, B]' ,TCollectionUtils.ListToString(Elements)); +end; + +procedure TestITreeWizard.TestRepeatsVisit2; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; + Elements: IList<IANTLRInterface>; + Visitor: IContextVisitor; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B (A C B) B D D)') as ICommonTree; + Elements := TList<IANTLRInterface>.Create; + Visitor := TRecordAllElementsVisitor.Create(Elements); + Wiz.Visit(T, Wiz.GetTokenType('A'), Visitor); + CheckEquals('[A, A]' ,TCollectionUtils.ListToString(Elements)); +end; + +procedure TestITreeWizard.TestRepeatsVisitWithContext; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; + Elements: IList<IANTLRInterface>; + Visitor: IContextVisitor; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B (A C B) B D D)') as ICommonTree; + Elements := TList<IANTLRInterface>.Create; + Visitor := TTest1ContextVisitor.Create(Adaptor, Elements); + Wiz.Visit(T, Wiz.GetTokenType('B'), Visitor); + CheckEquals('[B@A[0], B@A[1], B@A[2]]', TCollectionUtils.ListToString(Elements)); +end; + +procedure TestITreeWizard.TestRepeatsVisitWithNullParentAndContext; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; + Elements: IList<IANTLRInterface>; + Visitor: IContextVisitor; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B (A C B) B D D)') as ICommonTree; + Elements := TList<IANTLRInterface>.Create; + Visitor := TTest1ContextVisitor.Create(Adaptor, Elements); + Wiz.Visit(T, Wiz.GetTokenType('A'), Visitor); + CheckEquals('[A@nil[0], A@A[1]]', TCollectionUtils.ListToString(Elements)); +end; + +procedure TestITreeWizard.TestSingleLevelTree; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B C D)') as ICommonTree; + CheckEquals(T.ToStringTree, '(A B C D)'); +end; + +procedure TestITreeWizard.TestSingleNode; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('ID') as ICommonTree; + CheckEquals(T.ToStringTree, 'ID'); +end; + +procedure TestITreeWizard.TestSingleNodeIndex; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; + M: IDictionary<Integer, IList<IANTLRInterface>>; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('ID') as ICommonTree; + M := Wiz.Index(T); + CheckEquals('{10=[ID]}' ,TCollectionUtils.DictionaryToString(M)); +end; + +procedure TestITreeWizard.TestSingleNodeTree; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A)') as ICommonTree; + CheckEquals(T.ToStringTree, 'A'); +end; + +procedure TestITreeWizard.TestSingleNodeWithArg; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('ID[foo]') as ICommonTree; + CheckEquals(T.ToStringTree, 'foo'); +end; + +procedure TestITreeWizard.TestVisitPattern; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; + Elements: IList<IANTLRInterface>; + Visitor: IContextVisitor; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B C (A B) D)') as ICommonTree; + Elements := TList<IANTLRInterface>.Create; + Visitor := TRecordAllElementsVisitor.Create(Elements); + Wiz.Visit(T, '(A B)', Visitor); + CheckEquals('[A]', TCollectionUtils.ListToString(Elements)); +end; + +procedure TestITreeWizard.TestVisitPatternMultiple; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; + Elements: IList<IANTLRInterface>; + Visitor: IContextVisitor; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B C (A B) (D (A B)))') as ICommonTree; + Elements := TList<IANTLRInterface>.Create; + Visitor := TTest1ContextVisitor.Create(Adaptor, Elements); + Wiz.Visit(T, '(A B)', Visitor); + CheckEquals('[A@A[2], A@D[0]]', TCollectionUtils.ListToString(Elements)); +end; + +procedure TestITreeWizard.TestVisitPatternMultipleWithLabels; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; + Elements: IList<IANTLRInterface>; + Visitor: IContextVisitor; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B C (A[foo] B[bar]) (D (A[big] B[dog])))') as ICommonTree; + Elements := TList<IANTLRInterface>.Create; + Visitor := TTest2ContextVisitor.Create(Adaptor, Elements); + Wiz.Visit(T, '(%a:A %b:B)', Visitor); + CheckEquals('[foo@A[2]foo&bar, big@D[0]big&dog]', TCollectionUtils.ListToString(Elements)); +end; + +procedure TestITreeWizard.TestWildcard; +var + Adaptor: ITreeAdaptor; + Wiz: ITreeWizard; + T: ICommonTree; +begin + Adaptor := TCommonTreeAdaptor.Create; + Wiz := TTreeWizard.Create(Adaptor, FTokens); + T := Wiz.CreateTreeOrNode('(A B C)') as ICommonTree; + CheckTrue(Wiz.Parse(T, '(A . .)')); +end; + +{ TestITreeWizard.TRecordAllElementsVisitor } + +constructor TestITreeWizard.TRecordAllElementsVisitor.Create( + const AList: IList<IANTLRInterface>); +begin + inherited Create; + FList := AList; +end; + +procedure TestITreeWizard.TRecordAllElementsVisitor.Visit( + const T: IANTLRInterface); +begin + FList.Add(T); +end; + +{ TestITreeWizard.TTest1ContextVisitor } + +constructor TestITreeWizard.TTest1ContextVisitor.Create( + const AAdaptor: ITreeAdaptor; const AList: IList<IANTLRInterface>); +begin + inherited Create; + FAdaptor := AAdaptor; + FList := AList; +end; + +procedure TestITreeWizard.TTest1ContextVisitor.Visit(const T, + Parent: IANTLRInterface; const ChildIndex: Integer; + const Labels: IDictionary<String, IANTLRInterface>); +var + S: String; +begin + S := FAdaptor.GetNodeText(T) + '@'; + if Assigned(Parent) then + S := S + FAdaptor.GetNodeText(Parent) + else + S := S + 'nil'; + FList.Add(TANTLRString.Create(S + '[' + IntToStr(ChildIndex) + ']')); +end; + +{ TestITreeWizard.TTest2ContextVisitor } + +constructor TestITreeWizard.TTest2ContextVisitor.Create( + const AAdaptor: ITreeAdaptor; const AList: IList<IANTLRInterface>); +begin + inherited Create; + FAdaptor := AAdaptor; + FList := AList; +end; + +procedure TestITreeWizard.TTest2ContextVisitor.Visit(const T, + Parent: IANTLRInterface; const ChildIndex: Integer; + const Labels: IDictionary<String, IANTLRInterface>); +var + S: String; +begin + S := FAdaptor.GetNodeText(T) + '@'; + if Assigned(Parent) then + S := S + FAdaptor.GetNodeText(Parent) + else + S := S + 'nil'; + FList.Add(TANTLRString.Create(S + '[' + IntToStr(ChildIndex) + ']' + + Labels['a'].ToString + '&' + Labels['b'].ToString)); +end; + +initialization + // Register any test cases with the test runner + RegisterTest(TestICommonTree.Suite); + RegisterTest(TestICommonTreeNodeStream.Suite); + RegisterTest(TestIRewriteRuleXxxxStream.Suite); + RegisterTest(TestITreeWizard.Suite); +end. + diff --git a/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/TestDriver.dpr b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/TestDriver.dpr new file mode 100644 index 0000000..82caf80 --- /dev/null +++ b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/TestDriver.dpr @@ -0,0 +1,37 @@ +program TestDriver; +{ + + Delphi DUnit Test Project + ------------------------- + This project contains the DUnit test framework and the GUI/Console test runners. + Add "CONSOLE_TESTRUNNER" to the conditional defines entry in the project options + to use the console test runner. Otherwise the GUI test runner will be used by + default. + +} + +{$IFDEF CONSOLE_TESTRUNNER} +{$APPTYPE CONSOLE} +{$ENDIF} + +uses + Forms, + TestFramework, + GUITestRunner, + TextTestRunner, + Antlr.Runtime.Tools.Tests in 'Antlr.Runtime.Tools.Tests.pas', + Antlr.Runtime.Collections.Tests in 'Antlr.Runtime.Collections.Tests.pas', + Antlr.Runtime.Tree.Tests in 'Antlr.Runtime.Tree.Tests.pas', + Antlr.Runtime.Tests in 'Antlr.Runtime.Tests.pas'; + +{$R *.RES} + +begin + ReportMemoryLeaksOnShutdown := True; + Application.Initialize; + if IsConsole then + TextTestRunner.RunRegisteredTests + else + GUITestRunner.RunRegisteredTests; +end. + diff --git a/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/TestDriver.dproj b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/TestDriver.dproj new file mode 100644 index 0000000..6c56d2f --- /dev/null +++ b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/TestDriver.dproj @@ -0,0 +1,115 @@ + <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <ProjectGuid>{661C3860-250E-41EC-A3D4-DCBDD076574F}</ProjectGuid> + <ProjectVersion>12.0</ProjectVersion> + <Config Condition="'$(Config)'==''">Debug</Config> + <DCC_DCCCompiler>DCC32</DCC_DCCCompiler> + <MainSource>TestDriver.dpr</MainSource> + </PropertyGroup> + <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''"> + <Base>true</Base> + </PropertyGroup> + <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''"> + <Cfg_1>true</Cfg_1> + <CfgParent>Base</CfgParent> + <Base>true</Base> + </PropertyGroup> + <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''"> + <Cfg_2>true</Cfg_2> + <CfgParent>Base</CfgParent> + <Base>true</Base> + </PropertyGroup> + <PropertyGroup Condition="'$(Base)'!=''"> + <DCC_UnitSearchPath>$(BDS)\Source\DUnit\src;$(DCC_UnitSearchPath)</DCC_UnitSearchPath> + <DCC_DependencyCheckOutputName>TestDriver.exe</DCC_DependencyCheckOutputName> + <DCC_ImageBase>00400000</DCC_ImageBase> + <DCC_UnitAlias>WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias)</DCC_UnitAlias> + <DCC_Platform>x86</DCC_Platform> + <DCC_Define>_CONSOLE_TESTRUNNER;$(DCC_Define)</DCC_Define> + <DCC_K>false</DCC_K> + <DCC_N>false</DCC_N> + <DCC_S>false</DCC_S> + <DCC_DcuOutput>.</DCC_DcuOutput> + <DCC_E>false</DCC_E> + <DCC_F>false</DCC_F> + </PropertyGroup> + <PropertyGroup Condition="'$(Cfg_1)'!=''"> + <DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols> + <DCC_Define>RELEASE;$(DCC_Define)</DCC_Define> + <DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo> + <DCC_DebugInformation>false</DCC_DebugInformation> + </PropertyGroup> + <PropertyGroup Condition="'$(Cfg_2)'!=''"> + <DCC_DebugDCUs>true</DCC_DebugDCUs> + <DCC_Define>DEBUG;$(DCC_Define)</DCC_Define> + </PropertyGroup> + <ItemGroup> + <DelphiCompile Include="TestDriver.dpr"> + <MainSource>MainSource</MainSource> + </DelphiCompile> + <DCCReference Include="Antlr.Runtime.Tools.Tests.pas"/> + <DCCReference Include="Antlr.Runtime.Collections.Tests.pas"/> + <DCCReference Include="Antlr.Runtime.Tree.Tests.pas"/> + <DCCReference Include="Antlr.Runtime.Tests.pas"/> + <BuildConfiguration Include="Base"> + <Key>Base</Key> + </BuildConfiguration> + <BuildConfiguration Include="Debug"> + <Key>Cfg_2</Key> + <CfgParent>Base</CfgParent> + </BuildConfiguration> + <BuildConfiguration Include="Release"> + <Key>Cfg_1</Key> + <CfgParent>Base</CfgParent> + </BuildConfiguration> + </ItemGroup> + <Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/> + <ProjectExtensions> + <Borland.Personality>Delphi.Personality.12</Borland.Personality> + <Borland.ProjectType/> + <BorlandProject> + <Delphi.Personality> + <Parameters> + <Parameters Name="UseLauncher">False</Parameters> + <Parameters Name="LoadAllSymbols">True</Parameters> + <Parameters Name="LoadUnspecifiedSymbols">False</Parameters> + </Parameters> + <VersionInfo> + <VersionInfo Name="IncludeVerInfo">False</VersionInfo> + <VersionInfo Name="AutoIncBuild">False</VersionInfo> + <VersionInfo Name="MajorVer">1</VersionInfo> + <VersionInfo Name="MinorVer">0</VersionInfo> + <VersionInfo Name="Release">0</VersionInfo> + <VersionInfo Name="Build">0</VersionInfo> + <VersionInfo Name="Debug">False</VersionInfo> + <VersionInfo Name="PreRelease">False</VersionInfo> + <VersionInfo Name="Special">False</VersionInfo> + <VersionInfo Name="Private">False</VersionInfo> + <VersionInfo Name="DLL">False</VersionInfo> + <VersionInfo Name="Locale">1033</VersionInfo> + <VersionInfo Name="CodePage">1252</VersionInfo> + </VersionInfo> + <VersionInfoKeys> + <VersionInfoKeys Name="CompanyName"/> + <VersionInfoKeys Name="FileDescription"/> + <VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys> + <VersionInfoKeys Name="InternalName"/> + <VersionInfoKeys Name="LegalCopyright"/> + <VersionInfoKeys Name="LegalTrademarks"/> + <VersionInfoKeys Name="OriginalFilename"/> + <VersionInfoKeys Name="ProductName"/> + <VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys> + <VersionInfoKeys Name="Comments"/> + </VersionInfoKeys> + <Source> + <Source Name="MainSource">TestDriver.dpr</Source> + </Source> + </Delphi.Personality> + <UnitTesting> + <TestFramework>DUnit / Delphi Win32</TestFramework> + <TestRunner>GUI</TestRunner> + </UnitTesting> + </BorlandProject> + <ProjectFileVersion>12</ProjectFileVersion> + </ProjectExtensions> + </Project> diff --git a/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/TestDriver.res b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime.Tests/TestDriver.res new file mode 100644 index 0000000000000000000000000000000000000000..78ddf5c45b78adcd862d0efea0018bc728c1c557 GIT binary patch literal 5280 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 H9q0Z7@M0yN literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime/Antlr.Runtime.Collections.pas b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime/Antlr.Runtime.Collections.pas new file mode 100644 index 0000000..512efc0 --- /dev/null +++ b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime/Antlr.Runtime.Collections.pas @@ -0,0 +1,431 @@ +unit Antlr.Runtime.Collections; +(* +[The "BSD licence"] +Copyright (c) 2008 Erik van Bilsen +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*) + +interface + +{$IF CompilerVersion < 20} +{$MESSAGE ERROR 'You need Delphi 2009 or higher to use the Antlr runtime'} +{$IFEND} + +uses + Generics.Collections, + Antlr.Runtime.Tools; + +type + /// <summary> + /// An Hashtable-backed dictionary that enumerates Keys and Values in + /// insertion order. + /// </summary> + IHashList<TKey, TValue> = interface(IDictionary<TKey, TValue>) + end; + + /// <summary> + /// Stack abstraction that also supports the IList interface + /// </summary> + IStackList<T> = interface(IList<T>) + { Methods } + + /// <summary> + /// Adds an element to the top of the stack list. + /// </summary> + procedure Push(const Item: T); + + /// <summary> + /// Removes the element at the top of the stack list and returns it. + /// </summary> + /// <returns>The element at the top of the stack.</returns> + function Pop: T; + + /// <summary> + /// Removes the element at the top of the stack list without removing it. + /// </summary> + /// <returns>The element at the top of the stack.</returns> + function Peek: T; + end; + +type + THashList<TKey, TValue> = class(TANTLRObject, IHashList<TKey, TValue>) + strict private + type + TPairEnumerator = class(TEnumerator<TPair<TKey, TValue>>) + private + FHashList: THashList<TKey, TValue>; + FOrderList: IList<TKey>; + FIndex: Integer; + FVersion: Integer; + FPair: TPair<TKey, TValue>; + function GetCurrent: TPair<TKey, TValue>; + protected + function DoGetCurrent: TPair<TKey, TValue>; override; + function DoMoveNext: Boolean; override; + public + constructor Create(const AHashList: THashList<TKey, TValue>); + function MoveNext: Boolean; + property Current: TPair<TKey, TValue> read GetCurrent; + end; + private + FDictionary: IDictionary<TKey, TValue>; + FInsertionOrderList: IList<TKey>; + FVersion: Integer; + protected + { IDictionary<TKey, TValue> } + function GetItem(const Key: TKey): TValue; + procedure SetItem(const Key: TKey; const Value: TValue); + function GetCount: Integer; + + procedure Add(const Key: TKey; const Value: TValue); + procedure Remove(const Key: TKey); + procedure Clear; + procedure TrimExcess; + function TryGetValue(const Key: TKey; out Value: TValue): Boolean; + procedure AddOrSetValue(const Key: TKey; const Value: TValue); + function ContainsKey(const Key: TKey): Boolean; + function ContainsValue(const Value: TValue): Boolean; + public + constructor Create; overload; + constructor Create(const ACapacity: Integer); overload; + function GetEnumerator: TEnumerator<TPair<TKey, TValue>>; + + property Items[const Key: TKey]: TValue read GetItem write SetItem; default; + end; + + TStackList<T> = class(TList<T>, IStackList<T>) + protected + { IStackList<T> } + procedure Push(const Item: T); + function Pop: T; + function Peek: T; + end; + + TCollectionUtils = class + public + /// <summary> + /// Returns a string representation of this IDictionary. + /// </summary> + /// <remarks> + /// The string representation is a list of the collection's elements in the order + /// they are returned by its enumerator, enclosed in curly brackets ("{}"). + /// The separator is a comma followed by a space i.e. ", ". + /// </remarks> + /// <param name="dict">Dictionary whose string representation will be returned</param> + /// <returns>A string representation of the specified dictionary or "null"</returns> + class function DictionaryToString(const Dict: IDictionary<Integer, IList<IANTLRInterface>>): String; static; + + /// <summary> + /// Returns a string representation of this IList. + /// </summary> + /// <remarks> + /// The string representation is a list of the collection's elements in the order + /// they are returned by its enumerator, enclosed in square brackets ("[]"). + /// The separator is a comma followed by a space i.e. ", ". + /// </remarks> + /// <param name="coll">Collection whose string representation will be returned</param> + /// <returns>A string representation of the specified collection or "null"</returns> + class function ListToString(const Coll: IList<IANTLRInterface>): String; overload; static; + class function ListToString(const Coll: IList<String>): String; overload; static; + end; + +implementation + +uses + Classes, + SysUtils; + +{ THashList<TKey, TValue> } + +procedure THashList<TKey, TValue>.Add(const Key: TKey; const Value: TValue); +begin + FDictionary.Add(Key, Value); + FInsertionOrderList.Add(Key); + Inc(FVersion); +end; + +procedure THashList<TKey, TValue>.AddOrSetValue(const Key: TKey; + const Value: TValue); +begin + if FDictionary.ContainsKey(Key) then + SetItem(Key, Value) + else + Add(Key, Value); +end; + +procedure THashList<TKey, TValue>.Clear; +begin + FDictionary.Clear; + FInsertionOrderList.Clear; + Inc(FVersion); +end; + +function THashList<TKey, TValue>.ContainsKey(const Key: TKey): Boolean; +begin + Result := FDictionary.ContainsKey(Key); +end; + +function THashList<TKey, TValue>.ContainsValue(const Value: TValue): Boolean; +begin + Result := FDictionary.ContainsValue(Value); +end; + +constructor THashList<TKey, TValue>.Create; +begin + Create(-1); +end; + +constructor THashList<TKey, TValue>.Create(const ACapacity: Integer); +begin + inherited Create; + if (ACapacity < 0) then + begin + FDictionary := TDictionary<TKey, TValue>.Create; + FInsertionOrderList := TList<TKey>.Create; + end + else + begin + FDictionary := TDictionary<TKey, TValue>.Create(ACapacity); + FInsertionOrderList := TList<TKey>.Create; + FInsertionOrderList.Capacity := ACapacity; + end; +end; + +function THashList<TKey, TValue>.GetCount: Integer; +begin + Result := FDictionary.Count; +end; + +function THashList<TKey, TValue>.GetEnumerator: TEnumerator<TPair<TKey, TValue>>; +begin + Result := TPairEnumerator.Create(Self); +end; + +function THashList<TKey, TValue>.GetItem(const Key: TKey): TValue; +begin + Result := FDictionary[Key]; +end; + +procedure THashList<TKey, TValue>.Remove(const Key: TKey); +begin + FDictionary.Remove(Key); + FInsertionOrderList.Remove(Key); + Inc(FVersion); +end; + +procedure THashList<TKey, TValue>.SetItem(const Key: TKey; const Value: TValue); +var + IsNewEntry: Boolean; +begin + IsNewEntry := (not FDictionary.ContainsKey(Key)); + FDictionary[Key] := Value; + if (IsNewEntry) then + FInsertionOrderList.Add(Key); + Inc(FVersion); +end; + +procedure THashList<TKey, TValue>.TrimExcess; +begin + FDictionary.TrimExcess; + FInsertionOrderList.Capacity := FDictionary.Count; +end; + +function THashList<TKey, TValue>.TryGetValue(const Key: TKey; + out Value: TValue): Boolean; +begin + Result := FDictionary.TryGetValue(Key,Value); +end; + +{ THashList<TKey, TValue>.TPairEnumerator } + +constructor THashList<TKey, TValue>.TPairEnumerator.Create( + const AHashList: THashList<TKey, TValue>); +begin + inherited Create; + FHashList := AHashList; + FVersion := FHashList.FVersion; + FOrderList := FHashList.FInsertionOrderList; +end; + +function THashList<TKey, TValue>.TPairEnumerator.DoGetCurrent: TPair<TKey, TValue>; +begin + Result := GetCurrent; +end; + +function THashList<TKey, TValue>.TPairEnumerator.DoMoveNext: Boolean; +begin + Result := MoveNext; +end; + +function THashList<TKey, TValue>.TPairEnumerator.GetCurrent: TPair<TKey, TValue>; +begin + Result := FPair; +end; + +function THashList<TKey, TValue>.TPairEnumerator.MoveNext: Boolean; +begin + if (FVersion <> FHashList.FVersion) then + raise EInvalidOperation.Create('Collection was modified; enumeration operation may not execute.'); + if (FIndex < FOrderList.Count) then + begin + FPair.Key := FOrderList[FIndex]; + FPair.Value := FHashList[FPair.Key]; + Inc(FIndex); + Result := True; + end + else + begin + FPair.Key := Default(TKey); + FPair.Value := Default(TValue); + Result := False; + end; +end; + +{ TStackList<T> } + +function TStackList<T>.Peek: T; +begin + Result := GetItem(GetCount - 1); +end; + +function TStackList<T>.Pop: T; +var + I: Integer; +begin + I := GetCount - 1; + Result := GetItem(I); + Delete(I); +end; + +procedure TStackList<T>.Push(const Item: T); +begin + Add(Item); +end; + +{ TCollectionUtils } + +class function TCollectionUtils.DictionaryToString( + const Dict: IDictionary<Integer, IList<IANTLRInterface>>): String; +var + SB: TStringBuilder; + I: Integer; + E: TPair<Integer, IList<IANTLRInterface>>; +begin + SB := TStringBuilder.Create; + try + if Assigned(Dict) then + begin + SB.Append('{'); + I := 0; + for E in Dict do + begin + if (I > 0) then + SB.Append(', '); + SB.AppendFormat('%d=%s', [E.Key, ListToString(E.Value)]); + Inc(I); + end; + SB.Append('}'); + end + else + SB.Insert(0, 'null'); + Result := SB.ToString; + finally + SB.Free; + end; +end; + +class function TCollectionUtils.ListToString( + const Coll: IList<IANTLRInterface>): String; +var + SB: TStringBuilder; + I: Integer; + Element: IANTLRInterface; + Dict: IDictionary<Integer, IList<IANTLRInterface>>; + List: IList<IANTLRInterface>; +begin + SB := TStringBuilder.Create; + try + if (Coll <> nil) then + begin + SB.Append('['); + for I := 0 to Coll.Count - 1 do + begin + if (I > 0) then + SB.Append(', '); + Element := Coll[I]; + if (Element = nil) then + SB.Append('null') + else + if Supports(Element, IDictionary<Integer, IList<IANTLRInterface>>, Dict) then + SB.Append(DictionaryToString(Dict)) + else + if Supports(Element, IList<IANTLRInterface>, List) then + SB.Append(ListToString(List)) + else + SB.Append(Element.ToString); + end; + SB.Append(']'); + end + else + SB.Insert(0, 'null'); + Result := SB.ToString; + finally + SB.Free; + end; +end; + +class function TCollectionUtils.ListToString(const Coll: IList<String>): String; +var + SB: TStringBuilder; + I: Integer; +begin + SB := TStringBuilder.Create; + try + if (Coll <> nil) then + begin + SB.Append('['); + for I := 0 to Coll.Count - 1 do + begin + if (I > 0) then + SB.Append(', '); + SB.Append(Coll[I]); + end; + SB.Append(']'); + end + else + SB.Insert(0, 'null'); + Result := SB.ToString; + finally + SB.Free; + end; +end; + +end. diff --git a/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime/Antlr.Runtime.Tools.pas b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime/Antlr.Runtime.Tools.pas new file mode 100644 index 0000000..442f876 --- /dev/null +++ b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime/Antlr.Runtime.Tools.pas @@ -0,0 +1,998 @@ +unit Antlr.Runtime.Tools; +(* +[The "BSD licence"] +Copyright (c) 2008 Erik van Bilsen +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*) + +interface + +{$IF CompilerVersion < 20} +{$MESSAGE ERROR 'You need Delphi 2009 or higher to use the Antlr runtime'} +{$IFEND} + +uses + Classes, + Generics.Defaults, + Generics.Collections; + +type + TSmallintArray = array of Smallint; + TSmallintMatrix = array of TSmallintArray; + TIntegerArray = array of Integer; + TUInt64Array = array of UInt64; + TStringArray = array of String; + +type + /// <summary> + /// Base interface for ANTLR objects + /// </summary> + IANTLRInterface = interface + ['{FA98F2EE-89D3-42A5-BC9C-1E8A9B278C3B}'] + function ToString: String; + end; + TANTLRInterfaceArray = array of IANTLRInterface; + +type + /// <summary> + /// Gives access to implementing object + /// </summary> + IANTLRObject = interface + ['{E56CE28B-8D92-4961-90ED-418A1E8FEDF2}'] + { Property accessors } + function GetImplementor: TObject; + + { Properties } + property Implementor: TObject read GetImplementor; + end; + +type + /// <summary> + /// Base for ANTLR objects + /// </summary> + TANTLRObject = class(TInterfacedObject, IANTLRInterface, IANTLRObject) + protected + { IANTLRObject } + function GetImplementor: TObject; + end; + +type + /// <summary> + /// Allows strings to be treated as object interfaces + /// </summary> + IANTLRString = interface(IANTLRInterface) + ['{1C7F2030-446C-4756-81E3-EC37E04E2296}'] + { Property accessors } + function GetValue: String; + procedure SetValue(const Value: String); + + { Properties } + property Value: String read GetValue write SetValue; + end; + +type + /// <summary> + /// Allows strings to be treated as object interfaces + /// </summary> + TANTLRString = class(TANTLRObject, IANTLRString) + strict private + FValue: String; + protected + { IANTLRString } + function GetValue: String; + procedure SetValue(const Value: String); + public + constructor Create(const AValue: String); + + function ToString: String; override; + end; + +type + /// <summary> + /// Win32 version of .NET's ICloneable + /// </summary> + ICloneable = interface(IANTLRInterface) + ['{90240BF0-3A09-46B6-BC47-C13064809F97}'] + { Methods } + function Clone: IANTLRInterface; + end; + +type + IList<T> = interface(IANTLRInterface) + ['{107DB2FE-A351-4F08-B9AD-E1BA8A4690FF}'] + { Property accessors } + function GetCapacity: Integer; + procedure SetCapacity(Value: Integer); + function GetCount: Integer; + procedure SetCount(Value: Integer); + function GetItem(Index: Integer): T; + procedure SetItem(Index: Integer; const Value: T); + function GetOnNotify: TCollectionNotifyEvent<T>; + procedure SetOnNotify(Value: TCollectionNotifyEvent<T>); + + { Methods } + function Add(const Value: T): Integer; + + procedure AddRange(const Values: array of T); overload; + procedure AddRange(const Collection: IEnumerable<T>); overload; + procedure AddRange(Collection: TEnumerable<T>); overload; + procedure AddRange(const List: IList<T>); overload; + + procedure Insert(Index: Integer; const Value: T); + + procedure InsertRange(Index: Integer; const Values: array of T); overload; + procedure InsertRange(Index: Integer; const Collection: IEnumerable<T>); overload; + procedure InsertRange(Index: Integer; const Collection: TEnumerable<T>); overload; + procedure InsertRange(Index: Integer; const List: IList<T>); overload; + + function Remove(const Value: T): Integer; + procedure Delete(Index: Integer); + procedure DeleteRange(AIndex, ACount: Integer); + function Extract(const Value: T): T; + + procedure Clear; + + function Contains(const Value: T): Boolean; + function IndexOf(const Value: T): Integer; + function LastIndexOf(const Value: T): Integer; + + procedure Reverse; + + procedure Sort; overload; + procedure Sort(const AComparer: IComparer<T>); overload; + function BinarySearch(const Item: T; out Index: Integer): Boolean; overload; + function BinarySearch(const Item: T; out Index: Integer; const AComparer: IComparer<T>): Boolean; overload; + + procedure TrimExcess; + function GetEnumerator: TList<T>.TEnumerator; + function GetRange(const Index, Count: Integer): IList<T>; + + { Properties } + + property Capacity: Integer read GetCapacity write SetCapacity; + property Count: Integer read GetCount write SetCount; + property Items[Index: Integer]: T read GetItem write SetItem; default; + property OnNotify: TCollectionNotifyEvent<T> read GetOnNotify write SetOnNotify; + end; + +type + IDictionary<TKey,TValue> = interface(IANTLRInterface) + ['{5937BD21-C2C8-4E30-9787-4AEFDF1072CD}'] + { Property accessors } + function GetItem(const Key: TKey): TValue; + procedure SetItem(const Key: TKey; const Value: TValue); + function GetCount: Integer; + + { Methods } + procedure Add(const Key: TKey; const Value: TValue); + procedure Remove(const Key: TKey); + procedure Clear; + procedure TrimExcess; + function TryGetValue(const Key: TKey; out Value: TValue): Boolean; + procedure AddOrSetValue(const Key: TKey; const Value: TValue); + function ContainsKey(const Key: TKey): Boolean; + function ContainsValue(const Value: TValue): Boolean; + function GetEnumerator: TEnumerator<TPair<TKey, TValue>>; + + { Properties } + property Items[const Key: TKey]: TValue read GetItem write SetItem; default; + property Count: Integer read GetCount; + end; + +type + TList<T> = class(Generics.Collections.TList<T>, IList<T>) + strict private + FRefCount: Integer; + protected + { IInterface } + function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; + function _AddRef: Integer; stdcall; + function _Release: Integer; stdcall; + + { IList<T> } + function GetCapacity: Integer; + procedure SetCapacity(Value: Integer); + function GetCount: Integer; + procedure SetCount(Value: Integer); + function GetItem(Index: Integer): T; + procedure SetItem(Index: Integer; const Value: T); + function GetOnNotify: TCollectionNotifyEvent<T>; + procedure SetOnNotify(Value: TCollectionNotifyEvent<T>); + function GetRange(const Index, Count: Integer): IList<T>; + procedure AddRange(const List: IList<T>); overload; + procedure InsertRange(Index: Integer; const List: IList<T>); overload; + end; + +type + TDictionaryArray<TKey,TValue> = array of IDictionary<TKey,TValue>; + + { The TDictionary class in the first release of Delphi 2009 is very buggy. + This is a partial copy of that class with bug fixes. } + TDictionary<TKey,TValue> = class(TEnumerable<TPair<TKey,TValue>>, IDictionary<TKey, TValue>) + private + type + TItem = record + HashCode: Integer; + Key: TKey; + Value: TValue; + end; + TItemArray = array of TItem; + private + FItems: TItemArray; + FCount: Integer; + FComparer: IEqualityComparer<TKey>; + FGrowThreshold: Integer; + + procedure SetCapacity(ACapacity: Integer); + procedure Rehash(NewCapPow2: Integer); + procedure Grow; + function GetBucketIndex(const Key: TKey; HashCode: Integer): Integer; + function Hash(const Key: TKey): Integer; + procedure RehashAdd(HashCode: Integer; const Key: TKey; const Value: TValue); + procedure DoAdd(HashCode, Index: Integer; const Key: TKey; const Value: TValue); + protected + function DoGetEnumerator: TEnumerator<TPair<TKey,TValue>>; override; + public + constructor Create(ACapacity: Integer = 0); overload; + constructor Create(const AComparer: IEqualityComparer<TKey>); overload; + constructor Create(ACapacity: Integer; const AComparer: IEqualityComparer<TKey>); overload; + constructor Create(Collection: TEnumerable<TPair<TKey,TValue>>); overload; + constructor Create(Collection: TEnumerable<TPair<TKey,TValue>>; const AComparer: IEqualityComparer<TKey>); overload; + destructor Destroy; override; + + type + TPairEnumerator = class(TEnumerator<TPair<TKey,TValue>>) + private + FDictionary: TDictionary<TKey,TValue>; + FIndex: Integer; + function GetCurrent: TPair<TKey,TValue>; + protected + function DoGetCurrent: TPair<TKey,TValue>; override; + function DoMoveNext: Boolean; override; + public + constructor Create(ADictionary: TDictionary<TKey,TValue>); + property Current: TPair<TKey,TValue> read GetCurrent; + function MoveNext: Boolean; + end; + protected + { IInterface } + FRefCount: Integer; + function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; + function _AddRef: Integer; stdcall; + function _Release: Integer; stdcall; + protected + { IDictionary<TKey, TValue> } + function GetItem(const Key: TKey): TValue; + procedure SetItem(const Key: TKey; const Value: TValue); + function GetCount: Integer; + + procedure Add(const Key: TKey; const Value: TValue); + procedure Remove(const Key: TKey); + procedure Clear; + procedure TrimExcess; + function TryGetValue(const Key: TKey; out Value: TValue): Boolean; + procedure AddOrSetValue(const Key: TKey; const Value: TValue); + function ContainsKey(const Key: TKey): Boolean; + function ContainsValue(const Value: TValue): Boolean; + public + function GetEnumerator: TEnumerator<TPair<TKey, TValue>>; + end; + +type + /// <summary> + /// Helper for storing local variables inside a routine. The code that ANTLR + /// generates contains a lot of block-level variable declarations, which + /// the Delphi language does not support. When generating Delphi source code, + /// I try to detect those declarations and move them to the routine header + /// as much as possible. But sometimes, this is impossible. + /// This is a bit of an ugly (and slow) solution, but it works. Declare an + /// variable of the TLocalStorage type inside a routine, and you can use it + /// to access variables by name. For example, see the following C code: + /// { + /// int x = 3; + /// { + /// int y = x * 2; + /// } + /// } + /// If the Delphi code generator cannot detect the inner "y" variable, then + /// it uses the local storage as follows: + /// var + /// x: Integer; + /// Locals: TLocalStorage; + /// begin + /// Locals.Initialize; + /// try + /// x := 3; + /// Locals['y'] := x * 2; + /// finally + /// Locals.Finalize; + /// end; + /// end; + /// </summary> + /// <remarks> + /// This is a slow solution because it involves looking up variable names. + /// This could be done using hashing or binary search, but this is inefficient + /// with small collections. Since small collections are more typical in these + /// scenarios, we use simple linear search here. + /// </remarks> + /// <remarks> + /// The TLocalStorage record has space for 256 variables. For performance + /// reasons, this space is preallocated on the stack and does not grow if + /// needed. Also, no range checking is done. But 256 local variables should + /// be enough for all generated code. + /// </remarks> + /// <remarks> + /// Also note that the variable names are case sensitive, so 'x' is a + /// different variable than 'X'. + /// </remarks> + /// <remarks> + /// TLocalStorage can only store variables that are 32 bits in size, and + /// supports the following data typesL + /// -Integer + /// -IInterface descendants (default property) + /// </remarks> + /// <remarks> + /// You MUST call the Finalize method at the end of the routine to make + /// sure that any stored variables of type IInterface are released. + /// </remarks> + TLocalStorage = record + private + type + TLocalStorageEntry = record + FName: String; + FValue: Pointer; + FDataType: (dtInteger, dtInterface); + end; + private + FEntries: array [0..255] of TLocalStorageEntry; + FCount: Integer; + function GetAsInteger(const Name: String): Integer; + procedure SetAsInteger(const Name: String; const Value: Integer); + function GetAsInterface(const Name: String): IInterface; + procedure SetAsInterface(const Name: String; const Value: IInterface); + public + procedure Initialize; + procedure Finalize; + + property Count: Integer read FCount; + property AsInteger[const Name: String]: Integer read GetAsInteger write SetAsInteger; + property AsInterface[const Name: String]: IInterface read GetAsInterface write SetAsInterface; default; + end; + +function InCircularRange(Bottom, Item, TopInc: Integer): Boolean; + +{ Checks if A and B are implemented by the same object } +function SameObj(const A, B: IInterface): Boolean; + +function IfThen(const AValue: Boolean; const ATrue: IANTLRInterface; const AFalse: IANTLRInterface = nil): IANTLRInterface; overload; + +function IsUpper(const C: Char): Boolean; + +implementation + +uses + Windows, + SysUtils; + +function SameObj(const A, B: IInterface): Boolean; +var + X, Y: IInterface; +begin + if (A = nil) or (B = nil) then + Result := (A = B) + else if (A.QueryInterface(IInterface, X) = S_OK) + and (B.QueryInterface(IInterface, Y) = S_OK) + then + Result := (X = Y) + else + Result := (A = B); +end; + +function IfThen(const AValue: Boolean; const ATrue: IANTLRInterface; const AFalse: IANTLRInterface = nil): IANTLRInterface; overload; +begin + if AValue then + Result := ATrue + else + Result := AFalse; +end; + +function IsUpper(const C: Char): Boolean; +begin + Result := (C >= 'A') and (C <= 'Z'); + +end; +{ TANTLRObject } + +function TANTLRObject.GetImplementor: TObject; +begin + Result := Self; +end; + +{ TANTLRString } + +constructor TANTLRString.Create(const AValue: String); +begin + inherited Create; + FValue := AValue; +end; + +function TANTLRString.GetValue: String; +begin + Result := FValue; +end; + +procedure TANTLRString.SetValue(const Value: String); +begin + FValue := Value; +end; + +function TANTLRString.ToString: String; +begin + Result := FValue; +end; + +{ TList<T> } + +procedure TList<T>.AddRange(const List: IList<T>); +begin + InsertRange(GetCount, List); +end; + +function TList<T>.GetCapacity: Integer; +begin + Result := inherited Capacity; +end; + +function TList<T>.GetCount: Integer; +begin + Result := inherited Count; +end; + +function TList<T>.GetItem(Index: Integer): T; +begin + Result := inherited Items[Index]; +end; + +function TList<T>.GetOnNotify: TCollectionNotifyEvent<T>; +begin + Result := inherited OnNotify; +end; + +function TList<T>.GetRange(const Index, Count: Integer): IList<T>; +var + I: Integer; +begin + Result := TList<T>.Create; + Result.Capacity := Count; + for I := Index to Index + Count - 1 do + Result.Add(GetItem(I)); +end; + +procedure TList<T>.InsertRange(Index: Integer; const List: IList<T>); +var + Item: T; +begin + for Item in List do + begin + Insert(Index, Item); + Inc(Index); + end; +end; + +function TList<T>.QueryInterface(const IID: TGUID; out Obj): HResult; +begin + if GetInterface(IID, Obj) then + Result := 0 + else + Result := E_NOINTERFACE; +end; + +procedure TList<T>.SetCapacity(Value: Integer); +begin + inherited Capacity := Value; +end; + +procedure TList<T>.SetCount(Value: Integer); +begin + inherited Count := Value; +end; + +procedure TList<T>.SetItem(Index: Integer; const Value: T); +begin + inherited Items[Index] := Value; +end; + +procedure TList<T>.SetOnNotify(Value: TCollectionNotifyEvent<T>); +begin + inherited OnNotify := Value; +end; + +function TList<T>._AddRef: Integer; +begin + Result := InterlockedIncrement(FRefCount); +end; + +function TList<T>._Release: Integer; +begin + Result := InterlockedDecrement(FRefCount); + if (Result = 0) then + Destroy; +end; + +{ TDictionary<TKey, TValue> } + +procedure TDictionary<TKey,TValue>.Rehash(NewCapPow2: Integer); +var + oldItems, newItems: TItemArray; + i: Integer; +begin + if NewCapPow2 = Length(FItems) then + Exit + else if NewCapPow2 < 0 then + OutOfMemoryError; + + oldItems := FItems; + SetLength(newItems, NewCapPow2); + FItems := newItems; + FGrowThreshold := NewCapPow2 shr 1 + NewCapPow2 shr 2; + + for i := 0 to Length(oldItems) - 1 do + if oldItems[i].HashCode <> 0 then + RehashAdd(oldItems[i].HashCode, oldItems[i].Key, oldItems[i].Value); +end; + +procedure TDictionary<TKey,TValue>.SetCapacity(ACapacity: Integer); +var + newCap: Integer; +begin + if ACapacity < FCount then + raise EArgumentOutOfRangeException.CreateRes(@sArgumentOutOfRange); + + if ACapacity = 0 then + Rehash(0) + else + begin + newCap := 4; + while newCap < ACapacity do + newCap := newCap shl 1; + Rehash(newCap); + end +end; + +procedure TDictionary<TKey,TValue>.Grow; +var + newCap: Integer; +begin + newCap := Length(FItems) * 2; + if newCap = 0 then + newCap := 4; + Rehash(newCap); +end; + +function TDictionary<TKey,TValue>.GetBucketIndex(const Key: TKey; HashCode: Integer): Integer; +var + start, hc: Integer; +begin + if Length(FItems) = 0 then + Exit(not High(Integer)); + + start := HashCode and (Length(FItems) - 1); + Result := start; + while True do + begin + hc := FItems[Result].HashCode; + + // Not found: return complement of insertion point. + if hc = 0 then + Exit(not Result); + + // Found: return location. + if (hc = HashCode) and FComparer.Equals(FItems[Result].Key, Key) then + Exit(Result); + + Inc(Result); + if Result >= Length(FItems) then + Result := 0; + end; +end; + +function TDictionary<TKey, TValue>.GetCount: Integer; +begin + Result := FCount; +end; + +function TDictionary<TKey,TValue>.Hash(const Key: TKey): Integer; +const + PositiveMask = not Integer($80000000); +begin + // Double-Abs to avoid -MaxInt and MinInt problems. + // Not using compiler-Abs because we *must* get a positive integer; + // for compiler, Abs(Low(Integer)) is a null op. + Result := PositiveMask and ((PositiveMask and FComparer.GetHashCode(Key)) + 1); +end; + +function TDictionary<TKey,TValue>.GetItem(const Key: TKey): TValue; +var + index: Integer; +begin + index := GetBucketIndex(Key, Hash(Key)); + if index < 0 then + raise EListError.CreateRes(@sGenericItemNotFound); + Result := FItems[index].Value; +end; + +procedure TDictionary<TKey,TValue>.SetItem(const Key: TKey; const Value: TValue); +var + index: Integer; + oldValue: TValue; +begin + index := GetBucketIndex(Key, Hash(Key)); + if index < 0 then + raise EListError.CreateRes(@sGenericItemNotFound); + + oldValue := FItems[index].Value; + FItems[index].Value := Value; +end; + +procedure TDictionary<TKey,TValue>.RehashAdd(HashCode: Integer; const Key: TKey; const Value: TValue); +var + index: Integer; +begin + index := not GetBucketIndex(Key, HashCode); + FItems[index].HashCode := HashCode; + FItems[index].Key := Key; + FItems[index].Value := Value; +end; + +function TDictionary<TKey, TValue>.QueryInterface(const IID: TGUID; + out Obj): HResult; +begin + if GetInterface(IID, Obj) then + Result := 0 + else + Result := E_NOINTERFACE; +end; + +function TDictionary<TKey, TValue>._AddRef: Integer; +begin + Result := InterlockedIncrement(FRefCount); +end; + +function TDictionary<TKey, TValue>._Release: Integer; +begin + Result := InterlockedDecrement(FRefCount); + if (Result = 0) then + Destroy; +end; + +constructor TDictionary<TKey,TValue>.Create(ACapacity: Integer = 0); +begin + Create(ACapacity, nil); +end; + +constructor TDictionary<TKey,TValue>.Create(const AComparer: IEqualityComparer<TKey>); +begin + Create(0, AComparer); +end; + +constructor TDictionary<TKey,TValue>.Create(ACapacity: Integer; const AComparer: IEqualityComparer<TKey>); +var + cap: Integer; +begin + inherited Create; + if ACapacity < 0 then + raise EArgumentOutOfRangeException.CreateRes(@sArgumentOutOfRange); + FComparer := AComparer; + if FComparer = nil then + FComparer := TEqualityComparer<TKey>.Default; + SetCapacity(ACapacity); +end; + +constructor TDictionary<TKey, TValue>.Create( + Collection: TEnumerable<TPair<TKey, TValue>>); +var + item: TPair<TKey,TValue>; +begin + Create(0, nil); + for item in Collection do + AddOrSetValue(item.Key, item.Value); +end; + +constructor TDictionary<TKey, TValue>.Create( + Collection: TEnumerable<TPair<TKey, TValue>>; + const AComparer: IEqualityComparer<TKey>); +var + item: TPair<TKey,TValue>; +begin + Create(0, AComparer); + for item in Collection do + AddOrSetValue(item.Key, item.Value); +end; + +destructor TDictionary<TKey,TValue>.Destroy; +begin + Clear; + inherited; +end; + +procedure TDictionary<TKey,TValue>.Add(const Key: TKey; const Value: TValue); +var + index, hc: Integer; +begin + if FCount >= FGrowThreshold then + Grow; + + hc := Hash(Key); + index := GetBucketIndex(Key, hc); + if index >= 0 then + raise EListError.CreateRes(@sGenericDuplicateItem); + + DoAdd(hc, not index, Key, Value); +end; + +function InCircularRange(Bottom, Item, TopInc: Integer): Boolean; +begin + Result := (Bottom < Item) and (Item <= TopInc) // normal + or (TopInc < Bottom) and (Item > Bottom) // top wrapped + or (TopInc < Bottom) and (Item <= TopInc) // top and item wrapped +end; + +procedure TDictionary<TKey,TValue>.Remove(const Key: TKey); +var + gap, index, hc, bucket: Integer; + oldValue: TValue; +begin + hc := Hash(Key); + index := GetBucketIndex(Key, hc); + if index < 0 then + Exit; + + // Removing item from linear probe hash table is moderately + // tricky. We need to fill in gaps, which will involve moving items + // which may not even hash to the same location. + // Knuth covers it well enough in Vol III. 6.4.; but beware, Algorithm R + // (2nd ed) has a bug: step R4 should go to step R1, not R2 (already errata'd). + // My version does linear probing forward, not backward, however. + + // gap refers to the hole that needs filling-in by shifting items down. + // index searches for items that have been probed out of their slot, + // but being careful not to move items if their bucket is between + // our gap and our index (so that they'd be moved before their bucket). + // We move the item at index into the gap, whereupon the new gap is + // at the index. If the index hits a hole, then we're done. + + // If our load factor was exactly 1, we'll need to hit this hole + // in order to terminate. Shouldn't normally be necessary, though. + FItems[index].HashCode := 0; + + gap := index; + while True do + begin + Inc(index); + if index = Length(FItems) then + index := 0; + + hc := FItems[index].HashCode; + if hc = 0 then + Break; + + bucket := hc and (Length(FItems) - 1); + if not InCircularRange(gap, bucket, index) then + begin + FItems[gap] := FItems[index]; + gap := index; + // The gap moved, but we still need to find it to terminate. + FItems[gap].HashCode := 0; + end; + end; + + FItems[gap].HashCode := 0; + FItems[gap].Key := Default(TKey); + oldValue := FItems[gap].Value; + FItems[gap].Value := Default(TValue); + Dec(FCount); +end; + +procedure TDictionary<TKey,TValue>.Clear; +begin + FCount := 0; + FGrowThreshold := 0; + SetLength(FItems, 0); + SetCapacity(0); +end; + +procedure TDictionary<TKey,TValue>.TrimExcess; +begin + SetCapacity(FCount); +end; + +function TDictionary<TKey,TValue>.TryGetValue(const Key: TKey; out Value: TValue): Boolean; +var + index: Integer; +begin + index := GetBucketIndex(Key, Hash(Key)); + Result := index >= 0; + if Result then + Value := FItems[index].Value + else + Value := Default(TValue); +end; + +procedure TDictionary<TKey,TValue>.DoAdd(HashCode, Index: Integer; const Key: TKey; const Value: TValue); +begin + FItems[Index].HashCode := HashCode; + FItems[Index].Key := Key; + FItems[Index].Value := Value; + Inc(FCount); +end; + +function TDictionary<TKey, TValue>.DoGetEnumerator: TEnumerator<TPair<TKey, TValue>>; +begin + Result := GetEnumerator; +end; + +procedure TDictionary<TKey,TValue>.AddOrSetValue(const Key: TKey; const Value: TValue); +begin + if ContainsKey(Key) then + SetItem(Key,Value) + else + Add(Key,Value); +end; + +function TDictionary<TKey,TValue>.ContainsKey(const Key: TKey): Boolean; +begin + Result := GetBucketIndex(Key, Hash(Key)) >= 0; +end; + +function TDictionary<TKey,TValue>.ContainsValue(const Value: TValue): Boolean; +var + i: Integer; + c: IEqualityComparer<TValue>; +begin + c := TEqualityComparer<TValue>.Default; + + for i := 0 to Length(FItems) - 1 do + if (FItems[i].HashCode <> 0) and c.Equals(FItems[i].Value, Value) then + Exit(True); + Result := False; +end; + +function TDictionary<TKey,TValue>.GetEnumerator: TPairEnumerator; +begin + Result := TPairEnumerator.Create(Self); +end; + +// Pairs + +constructor TDictionary<TKey,TValue>.TPairEnumerator.Create(ADictionary: TDictionary<TKey,TValue>); +begin + inherited Create; + FIndex := -1; + FDictionary := ADictionary; +end; + +function TDictionary<TKey, TValue>.TPairEnumerator.DoGetCurrent: TPair<TKey, TValue>; +begin + Result := GetCurrent; +end; + +function TDictionary<TKey, TValue>.TPairEnumerator.DoMoveNext: Boolean; +begin + Result := MoveNext; +end; + +function TDictionary<TKey,TValue>.TPairEnumerator.GetCurrent: TPair<TKey,TValue>; +begin + Result.Key := FDictionary.FItems[FIndex].Key; + Result.Value := FDictionary.FItems[FIndex].Value; +end; + +function TDictionary<TKey,TValue>.TPairEnumerator.MoveNext: Boolean; +begin + while FIndex < Length(FDictionary.FItems) - 1 do + begin + Inc(FIndex); + if FDictionary.FItems[FIndex].HashCode <> 0 then + Exit(True); + end; + Result := False; +end; + +{ TLocalStorage } + +procedure TLocalStorage.Finalize; +var + I: Integer; +begin + for I := 0 to FCount - 1 do + if (FEntries[I].FDataType = dtInterface) then + IInterface(FEntries[I].FValue) := nil; +end; + +function TLocalStorage.GetAsInteger(const Name: String): Integer; +var + I: Integer; +begin + for I := 0 to FCount - 1 do + if (FEntries[I].FName = Name) then + Exit(Integer(FEntries[I].FValue)); + Result := 0; +end; + +function TLocalStorage.GetAsInterface(const Name: String): IInterface; +var + I: Integer; +begin + for I := 0 to FCount - 1 do + if (FEntries[I].FName = Name) then + Exit(IInterface(FEntries[I].FValue)); + Result := nil; +end; + +procedure TLocalStorage.Initialize; +begin + FCount := 0; +end; + +procedure TLocalStorage.SetAsInteger(const Name: String; const Value: Integer); +var + I: Integer; +begin + for I := 0 to FCount - 1 do + if (FEntries[I].FName = Name) then + begin + FEntries[I].FValue := Pointer(Value); + Exit; + end; + FEntries[FCount].FName := Name; + FEntries[FCount].FValue := Pointer(Value); + FEntries[FCount].FDataType := dtInteger; + Inc(FCount); +end; + +procedure TLocalStorage.SetAsInterface(const Name: String; + const Value: IInterface); +var + I: Integer; +begin + for I := 0 to FCount - 1 do + if (FEntries[I].FName = Name) then + begin + IInterface(FEntries[I].FValue) := Value; + Exit; + end; + FEntries[FCount].FName := Name; + FEntries[FCount].FValue := nil; + IInterface(FEntries[FCount].FValue) := Value; + FEntries[FCount].FDataType := dtInterface; + Inc(FCount); +end; + +end. diff --git a/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime/Antlr.Runtime.Tree.pas b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime/Antlr.Runtime.Tree.pas new file mode 100644 index 0000000..a90f739 --- /dev/null +++ b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime/Antlr.Runtime.Tree.pas @@ -0,0 +1,5063 @@ +unit Antlr.Runtime.Tree; +(* +[The "BSD licence"] +Copyright (c) 2008 Erik van Bilsen +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*) + +interface + +{$IF CompilerVersion < 20} +{$MESSAGE ERROR 'You need Delphi 2009 or higher to use the Antlr runtime'} +{$IFEND} + +uses + Classes, + SysUtils, + Antlr.Runtime, + Antlr.Runtime.Tools, + Antlr.Runtime.Collections; + +type + /// <summary> + /// How to create and navigate trees. Rather than have a separate factory + /// and adaptor, I've merged them. Makes sense to encapsulate. + /// + /// This takes the place of the tree construction code generated in the + /// generated code in 2.x and the ASTFactory. + /// + /// I do not need to know the type of a tree at all so they are all + /// generic Objects. This may increase the amount of typecasting needed. :( + /// </summary> + ITreeAdaptor = interface(IANTLRInterface) + ['{F9DEB286-F555-4CC8-A51A-93F3F649B248}'] + { Methods } + + // C o n s t r u c t i o n + + /// <summary> + /// Create a tree node from Token object; for CommonTree type trees, + /// then the token just becomes the payload. + /// </summary> + /// <remarks> + /// This is the most common create call. Override if you want another kind of node to be built. + /// </remarks> + function CreateNode(const Payload: IToken): IANTLRInterface; overload; + + /// <summary>Duplicate a single tree node </summary> + /// <remarks> Override if you want another kind of node to be built.</remarks> + function DupNode(const TreeNode: IANTLRInterface): IANTLRInterface; + + /// <summary>Duplicate tree recursively, using DupNode() for each node </summary> + function DupTree(const Tree: IANTLRInterface): IANTLRInterface; + + /// <summary> + /// Return a nil node (an empty but non-null node) that can hold + /// a list of element as the children. If you want a flat tree (a list) + /// use "t=adaptor.nil(); t.AddChild(x); t.AddChild(y);" + /// </summary> + function GetNilNode: IANTLRInterface; + + /// <summary> + /// Return a tree node representing an error. This node records the + /// tokens consumed during error recovery. The start token indicates the + /// input symbol at which the error was detected. The stop token indicates + /// the last symbol consumed during recovery. + /// </summary> + /// <remarks> + /// <para>You must specify the input stream so that the erroneous text can + /// be packaged up in the error node. The exception could be useful + /// to some applications; default implementation stores ptr to it in + /// the CommonErrorNode.</para> + /// + /// <para>This only makes sense during token parsing, not tree parsing. + /// Tree parsing should happen only when parsing and tree construction + /// succeed.</para> + /// </remarks> + function ErrorNode(const Input: ITokenStream; const Start, Stop: IToken; + const E: ERecognitionException): IANTLRInterface; + + /// <summary> + /// Is tree considered a nil node used to make lists of child nodes? + /// </summary> + function IsNil(const Tree: IANTLRInterface): Boolean; + + /// <summary> + /// Add a child to the tree t. If child is a flat tree (a list), make all + /// in list children of t. + /// </summary> + /// <remarks> + /// <para> + /// Warning: if t has no children, but child does and child isNil then you + /// can decide it is ok to move children to t via t.children = child.children; + /// i.e., without copying the array. Just make sure that this is consistent + /// with have the user will build ASTs. Do nothing if t or child is null. + /// </para> + /// <para> + /// This is for construction and I'm not sure it's completely general for + /// a tree's addChild method to work this way. Make sure you differentiate + /// between your tree's addChild and this parser tree construction addChild + /// if it's not ok to move children to t with a simple assignment. + /// </para> + /// </remarks> + procedure AddChild(const T, Child: IANTLRInterface); + + /// <summary> + /// If oldRoot is a nil root, just copy or move the children to newRoot. + /// If not a nil root, make oldRoot a child of newRoot. + /// </summary> + /// <remarks> + /// + /// old=^(nil a b c), new=r yields ^(r a b c) + /// old=^(a b c), new=r yields ^(r ^(a b c)) + /// + /// If newRoot is a nil-rooted single child tree, use the single + /// child as the new root node. + /// + /// old=^(nil a b c), new=^(nil r) yields ^(r a b c) + /// old=^(a b c), new=^(nil r) yields ^(r ^(a b c)) + /// + /// If oldRoot was null, it's ok, just return newRoot (even if isNil). + /// + /// old=null, new=r yields r + /// old=null, new=^(nil r) yields ^(nil r) + /// + /// Return newRoot. Throw an exception if newRoot is not a + /// simple node or nil root with a single child node--it must be a root + /// node. If newRoot is ^(nil x) return x as newRoot. + /// + /// Be advised that it's ok for newRoot to point at oldRoot's + /// children; i.e., you don't have to copy the list. We are + /// constructing these nodes so we should have this control for + /// efficiency. + /// </remarks> + function BecomeRoot(const NewRoot, OldRoot: IANTLRInterface): IANTLRInterface; overload; + + /// <summary> + /// Given the root of the subtree created for this rule, post process + /// it to do any simplifications or whatever you want. A required + /// behavior is to convert ^(nil singleSubtree) to singleSubtree + /// as the setting of start/stop indexes relies on a single non-nil root + /// for non-flat trees. + /// + /// Flat trees such as for lists like "idlist : ID+ ;" are left alone + /// unless there is only one ID. For a list, the start/stop indexes + /// are set in the nil node. + /// + /// This method is executed after all rule tree construction and right + /// before SetTokenBoundaries(). + /// </summary> + function RulePostProcessing(const Root: IANTLRInterface): IANTLRInterface; + + /// <summary> + /// For identifying trees. How to identify nodes so we can say "add node + /// to a prior node"? + /// </summary> + /// <remarks> + /// Even BecomeRoot is an issue. Ok, we could: + /// <list type="number"> + /// <item>Number the nodes as they are created?</item> + /// <item> + /// Use the original framework assigned hashcode that's unique + /// across instances of a given type. + /// WARNING: This is usually implemented either as IL to make a + /// non-virt call to object.GetHashCode() or by via a call to + /// System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(). + /// Both have issues especially on .NET 1.x and Mono. + /// </item> + /// </list> + /// </remarks> + function GetUniqueID(const Node: IANTLRInterface): Integer; + + // R e w r i t e R u l e s + + /// <summary> + /// Create a node for newRoot make it the root of oldRoot. + /// If oldRoot is a nil root, just copy or move the children to newRoot. + /// If not a nil root, make oldRoot a child of newRoot. + /// + /// Return node created for newRoot. + /// </summary> + function BecomeRoot(const NewRoot: IToken; const OldRoot: IANTLRInterface): IANTLRInterface; overload; + + /// <summary>Create a new node derived from a token, with a new token type. + /// This is invoked from an imaginary node ref on right side of a + /// rewrite rule as IMAG[$tokenLabel]. + /// + /// This should invoke createToken(Token). + /// </summary> + function CreateNode(const TokenType: Integer; const FromToken: IToken): IANTLRInterface; overload; + + /// <summary>Same as Create(tokenType,fromToken) except set the text too. + /// This is invoked from an imaginary node ref on right side of a + /// rewrite rule as IMAG[$tokenLabel, "IMAG"]. + /// + /// This should invoke createToken(Token). + /// </summary> + function CreateNode(const TokenType: Integer; const FromToken: IToken; + const Text: String): IANTLRInterface; overload; + + /// <summary>Create a new node derived from a token, with a new token type. + /// This is invoked from an imaginary node ref on right side of a + /// rewrite rule as IMAG["IMAG"]. + /// + /// This should invoke createToken(int,String). + /// </summary> + function CreateNode(const TokenType: Integer; const Text: String): IANTLRInterface; overload; + + // C o n t e n t + + /// <summary>For tree parsing, I need to know the token type of a node </summary> + function GetNodeType(const T: IANTLRInterface): Integer; + + /// <summary>Node constructors can set the type of a node </summary> + procedure SetNodeType(const T: IANTLRInterface; const NodeType: Integer); + + function GetNodeText(const T: IANTLRInterface): String; + + /// <summary>Node constructors can set the text of a node </summary> + procedure SetNodeText(const T: IANTLRInterface; const Text: String); + + /// <summary> + /// Return the token object from which this node was created. + /// </summary> + /// <remarks> + /// Currently used only for printing an error message. The error + /// display routine in BaseRecognizer needs to display where the + /// input the error occurred. If your tree of limitation does not + /// store information that can lead you to the token, you can create + /// a token filled with the appropriate information and pass that back. + /// <see cref="BaseRecognizer.GetErrorMessage"/> + /// </remarks> + function GetToken(const TreeNode: IANTLRInterface): IToken; + + /// <summary> + /// Where are the bounds in the input token stream for this node and + /// all children? + /// </summary> + /// <remarks> + /// Each rule that creates AST nodes will call this + /// method right before returning. Flat trees (i.e., lists) will + /// still usually have a nil root node just to hold the children list. + /// That node would contain the start/stop indexes then. + /// </remarks> + procedure SetTokenBoundaries(const T: IANTLRInterface; const StartToken, + StopToken: IToken); + + /// <summary> + /// Get the token start index for this subtree; return -1 if no such index + /// </summary> + function GetTokenStartIndex(const T: IANTLRInterface): Integer; + + /// <summary> + /// Get the token stop index for this subtree; return -1 if no such index + /// </summary> + function GetTokenStopIndex(const T: IANTLRInterface): Integer; + + // N a v i g a t i o n / T r e e P a r s i n g + + /// <summary>Get a child 0..n-1 node </summary> + function GetChild(const T: IANTLRInterface; const I: Integer): IANTLRInterface; + + /// <summary>Set ith child (0..n-1) to t; t must be non-null and non-nil node</summary> + procedure SetChild(const T: IANTLRInterface; const I: Integer; const Child: IANTLRInterface); + + /// <summary>Remove ith child and shift children down from right.</summary> + function DeleteChild(const T: IANTLRInterface; const I: Integer): IANTLRInterface; + + /// <summary>How many children? If 0, then this is a leaf node </summary> + function GetChildCount(const T: IANTLRInterface): Integer; + + /// <summary> + /// Who is the parent node of this node; if null, implies node is root. + /// </summary> + /// <remarks> + /// If your node type doesn't handle this, it's ok but the tree rewrites + /// in tree parsers need this functionality. + /// </remarks> + function GetParent(const T: IANTLRInterface): IANTLRInterface; + procedure SetParent(const T, Parent: IANTLRInterface); + + /// <summary> + /// What index is this node in the child list? Range: 0..n-1 + /// </summary> + /// <remarks> + /// If your node type doesn't handle this, it's ok but the tree rewrites + /// in tree parsers need this functionality. + /// </remarks> + function GetChildIndex(const T: IANTLRInterface): Integer; + procedure SetChildIdex(const T: IANTLRInterface; const Index: Integer); + + /// <summary> + /// Replace from start to stop child index of parent with t, which might + /// be a list. Number of children may be different after this call. + /// </summary> + /// <remarks> + /// If parent is null, don't do anything; must be at root of overall tree. + /// Can't replace whatever points to the parent externally. Do nothing. + /// </remarks> + procedure ReplaceChildren(const Parent: IANTLRInterface; const StartChildIndex, + StopChildIndex: Integer; const T: IANTLRInterface); + end; + + /// <summary>A stream of tree nodes, accessing nodes from a tree of some kind </summary> + ITreeNodeStream = interface(IIntStream) + ['{75EA5C06-8145-48F5-9A56-43E481CE86C6}'] + { Property accessors } + function GetTreeSource: IANTLRInterface; + function GetTokenStream: ITokenStream; + function GetTreeAdaptor: ITreeAdaptor; + procedure SetHasUniqueNavigationNodes(const Value: Boolean); + + { Methods } + + /// <summary>Get a tree node at an absolute index i; 0..n-1.</summary> + /// <remarks> + /// If you don't want to buffer up nodes, then this method makes no + /// sense for you. + /// </remarks> + function Get(const I: Integer): IANTLRInterface; + + /// <summary> + /// Get tree node at current input pointer + i ahead where i=1 is next node. + /// i<0 indicates nodes in the past. So LT(-1) is previous node, but + /// implementations are not required to provide results for k < -1. + /// LT(0) is undefined. For i>=n, return null. + /// Return null for LT(0) and any index that results in an absolute address + /// that is negative. + /// + /// This is analogus to the LT() method of the TokenStream, but this + /// returns a tree node instead of a token. Makes code gen identical + /// for both parser and tree grammars. :) + /// </summary> + function LT(const K: Integer): IANTLRInterface; + + /// <summary>Return the text of all nodes from start to stop, inclusive. + /// If the stream does not buffer all the nodes then it can still + /// walk recursively from start until stop. You can always return + /// null or "" too, but users should not access $ruleLabel.text in + /// an action of course in that case. + /// </summary> + function ToString(const Start, Stop: IANTLRInterface): String; overload; + function ToString: String; overload; + + // REWRITING TREES (used by tree parser) + + /// <summary> + /// Replace from start to stop child index of parent with t, which might + /// be a list. Number of children may be different after this call. + /// </summary> + /// <remarks> + /// The stream is notified because it is walking the tree and might need + /// to know you are monkeying with the underlying tree. Also, it might be + /// able to modify the node stream to avoid restreaming for future phases. + /// + /// If parent is null, don't do anything; must be at root of overall tree. + /// Can't replace whatever points to the parent externally. Do nothing. + /// </remarks> + procedure ReplaceChildren(const Parent: IANTLRInterface; const StartChildIndex, + StopChildIndex: Integer; const T: IANTLRInterface); + + { Properties } + + /// <summary> + /// Where is this stream pulling nodes from? This is not the name, but + /// the object that provides node objects. + /// + /// TODO: do we really need this? + /// </summary> + property TreeSource: IANTLRInterface read GetTreeSource; + + /// <summary> + /// Get the ITokenStream from which this stream's Tree was created + /// (may be null) + /// </summary> + /// <remarks> + /// If the tree associated with this stream was created from a + /// TokenStream, you can specify it here. Used to do rule $text + /// attribute in tree parser. Optional unless you use tree parser + /// rule text attribute or output=template and rewrite=true options. + /// </remarks> + property TokenStream: ITokenStream read GetTokenStream; + + /// <summary> + /// What adaptor can tell me how to interpret/navigate nodes and trees. + /// E.g., get text of a node. + /// </summary> + property TreeAdaptor: ITreeAdaptor read GetTreeAdaptor; + + /// <summary> + /// As we flatten the tree, we use UP, DOWN nodes to represent + /// the tree structure. When debugging we need unique nodes + /// so we have to instantiate new ones. When doing normal tree + /// parsing, it's slow and a waste of memory to create unique + /// navigation nodes. Default should be false; + /// </summary> + property HasUniqueNavigationNodes: Boolean write SetHasUniqueNavigationNodes; + end; + + /// <summary> + /// What does a tree look like? ANTLR has a number of support classes + /// such as CommonTreeNodeStream that work on these kinds of trees. You + /// don't have to make your trees implement this interface, but if you do, + /// you'll be able to use more support code. + /// + /// NOTE: When constructing trees, ANTLR can build any kind of tree; it can + /// even use Token objects as trees if you add a child list to your tokens. + /// + /// This is a tree node without any payload; just navigation and factory stuff. + /// </summary> + ITree = interface(IANTLRInterface) + ['{4B6EFB53-EBF6-4647-BA4D-48B68134DC2A}'] + { Property accessors } + function GetChildCount: Integer; + function GetParent: ITree; + procedure SetParent(const Value: ITree); + function GetChildIndex: Integer; + procedure SetChildIndex(const Value: Integer); + function GetIsNil: Boolean; + function GetTokenType: Integer; + function GetText: String; + function GetLine: Integer; + function GetCharPositionInLine: Integer; + function GetTokenStartIndex: Integer; + procedure SetTokenStartIndex(const Value: Integer); + function GetTokenStopIndex: Integer; + procedure SetTokenStopIndex(const Value: Integer); + + { Methods } + + /// <summary>Set (or reset) the parent and child index values for all children</summary> + procedure FreshenParentAndChildIndexes; + + function GetChild(const I: Integer): ITree; + + /// <summary> + /// Add t as a child to this node. If t is null, do nothing. If t + /// is nil, add all children of t to this' children. + /// </summary> + /// <param name="t">Tree to add</param> + procedure AddChild(const T: ITree); + + /// <summary>Set ith child (0..n-1) to t; t must be non-null and non-nil node</summary> + procedure SetChild(const I: Integer; const T: ITree); + + function DeleteChild(const I: Integer): IANTLRInterface; + + /// <summary> + /// Delete children from start to stop and replace with t even if t is + /// a list (nil-root tree). num of children can increase or decrease. + /// For huge child lists, inserting children can force walking rest of + /// children to set their childindex; could be slow. + /// </summary> + procedure ReplaceChildren(const StartChildIndex, StopChildIndex: Integer; + const T: IANTLRInterface); + + function DupNode: ITree; + + function ToStringTree: String; + + function ToString: String; + + { Properties } + + property ChildCount: Integer read GetChildCount; + + // Tree tracks parent and child index now > 3.0 + property Parent: ITree read GetParent write SetParent; + + /// <summary>This node is what child index? 0..n-1</summary> + property ChildIndex: Integer read GetChildIndex write SetChildIndex; + + /// <summary> + /// Indicates the node is a nil node but may still have children, meaning + /// the tree is a flat list. + /// </summary> + property IsNil: Boolean read GetIsNil; + + /// <summary>Return a token type; needed for tree parsing </summary> + property TokenType: Integer read GetTokenType; + + property Text: String read GetText; + + /// <summary>In case we don't have a token payload, what is the line for errors? </summary> + property Line: Integer read GetLine; + property CharPositionInLine: Integer read GetCharPositionInLine; + + /// <summary> + /// What is the smallest token index (indexing from 0) for this node + /// and its children? + /// </summary> + property TokenStartIndex: Integer read GetTokenStartIndex write SetTokenStartIndex; + + /// <summary> + /// What is the largest token index (indexing from 0) for this node + /// and its children? + /// </summary> + property TokenStopIndex: Integer read GetTokenStopIndex write SetTokenStopIndex; + end; + + /// <summary> + /// A generic tree implementation with no payload. You must subclass to + /// actually have any user data. ANTLR v3 uses a list of children approach + /// instead of the child-sibling approach in v2. A flat tree (a list) is + /// an empty node whose children represent the list. An empty, but + /// non-null node is called "nil". + /// </summary> + IBaseTree = interface(ITree) + ['{6772F6EA-5FE0-40C6-BE5C-800AB2540E55}'] + { Property accessors } + function GetChildren: IList<IBaseTree>; + function GetChildIndex: Integer; + procedure SetChildIndex(const Value: Integer); + function GetParent: ITree; + procedure SetParent(const Value: ITree); + function GetTokenType: Integer; + function GetTokenStartIndex: Integer; + procedure SetTokenStartIndex(const Value: Integer); + function GetTokenStopIndex: Integer; + procedure SetTokenStopIndex(const Value: Integer); + function GetText: String; + + { Methods } + + /// <summary> + /// Add all elements of kids list as children of this node + /// </summary> + /// <param name="kids"></param> + procedure AddChildren(const Kids: IList<IBaseTree>); + + procedure SetChild(const I: Integer; const T: ITree); + procedure FreshenParentAndChildIndexes(const Offset: Integer); + + procedure SanityCheckParentAndChildIndexes; overload; + procedure SanityCheckParentAndChildIndexes(const Parent: ITree; + const I: Integer); overload; + + /// <summary> + /// Print out a whole tree not just a node + /// </summary> + function ToStringTree: String; + + function DupNode: ITree; + + { Properties } + + /// <summary> + /// Get the children internal list of children. Manipulating the list + /// directly is not a supported operation (i.e. you do so at your own risk) + /// </summary> + property Children: IList<IBaseTree> read GetChildren; + + /// <summary>BaseTree doesn't track child indexes.</summary> + property ChildIndex: Integer read GetChildIndex write SetChildIndex; + + /// <summary>BaseTree doesn't track parent pointers.</summary> + property Parent: ITree read GetParent write SetParent; + + /// <summary>Return a token type; needed for tree parsing </summary> + property TokenType: Integer read GetTokenType; + + /// <summary> + /// What is the smallest token index (indexing from 0) for this node + /// and its children? + /// </summary> + property TokenStartIndex: Integer read GetTokenStartIndex write SetTokenStartIndex; + + /// <summary> + /// What is the largest token index (indexing from 0) for this node + /// and its children? + /// </summary> + property TokenStopIndex: Integer read GetTokenStopIndex write SetTokenStopIndex; + + property Text: String read GetText; + end; + + /// <summary>A tree node that is wrapper for a Token object. </summary> + /// <remarks> + /// After 3.0 release while building tree rewrite stuff, it became clear + /// that computing parent and child index is very difficult and cumbersome. + /// Better to spend the space in every tree node. If you don't want these + /// extra fields, it's easy to cut them out in your own BaseTree subclass. + /// </remarks> + ICommonTree = interface(IBaseTree) + ['{791C0EA6-1E4D-443E-83E2-CC1EFEAECC8B}'] + { Property accessors } + function GetToken: IToken; + function GetStartIndex: Integer; + procedure SetStartIndex(const Value: Integer); + function GetStopIndex: Integer; + procedure SetStopIndex(const Value: Integer); + + { Properties } + property Token: IToken read GetToken; + property StartIndex: Integer read GetStartIndex write SetStartIndex; + property StopIndex: Integer read GetStopIndex write SetStopIndex; + end; + + // A node representing erroneous token range in token stream + ICommonErrorNode = interface(ICommonTree) + ['{20FF30BA-C055-4E8F-B3E7-7FFF6313853E}'] + end; + + /// <summary> + /// A TreeAdaptor that works with any Tree implementation + /// </summary> + IBaseTreeAdaptor = interface(ITreeAdaptor) + ['{B9CE670A-E53F-494C-B700-E4A3DF42D482}'] + /// <summary> + /// This is generic in the sense that it will work with any kind of + /// tree (not just the ITree interface). It invokes the adaptor routines + /// not the tree node routines to do the construction. + /// </summary> + function DupTree(const Tree: IANTLRInterface): IANTLRInterface; overload; + function DupTree(const T, Parent: IANTLRInterface): IANTLRInterface; overload; + + /// <summary> + /// Tell me how to create a token for use with imaginary token nodes. + /// For example, there is probably no input symbol associated with imaginary + /// token DECL, but you need to create it as a payload or whatever for + /// the DECL node as in ^(DECL type ID). + /// + /// If you care what the token payload objects' type is, you should + /// override this method and any other createToken variant. + /// </summary> + function CreateToken(const TokenType: Integer; const Text: String): IToken; overload; + + /// <summary> + /// Tell me how to create a token for use with imaginary token nodes. + /// For example, there is probably no input symbol associated with imaginary + /// token DECL, but you need to create it as a payload or whatever for + /// the DECL node as in ^(DECL type ID). + /// + /// This is a variant of createToken where the new token is derived from + /// an actual real input token. Typically this is for converting '{' + /// tokens to BLOCK etc... You'll see + /// + /// r : lc='{' ID+ '}' -> ^(BLOCK[$lc] ID+) ; + /// + /// If you care what the token payload objects' type is, you should + /// override this method and any other createToken variant. + /// </summary> + function CreateToken(const FromToken: IToken): IToken; overload; + end; + + /// <summary> + /// A TreeAdaptor that works with any Tree implementation. It provides + /// really just factory methods; all the work is done by BaseTreeAdaptor. + /// If you would like to have different tokens created than ClassicToken + /// objects, you need to override this and then set the parser tree adaptor to + /// use your subclass. + /// + /// To get your parser to build nodes of a different type, override + /// Create(Token). + /// </summary> + ICommonTreeAdaptor = interface(IBaseTreeAdaptor) + ['{B067EE7A-38EB-4156-9447-CDD6DDD6D13B}'] + end; + + /// <summary> + /// A buffered stream of tree nodes. Nodes can be from a tree of ANY kind. + /// </summary> + /// <remarks> + /// This node stream sucks all nodes out of the tree specified in the + /// constructor during construction and makes pointers into the tree + /// using an array of Object pointers. The stream necessarily includes + /// pointers to DOWN and UP and EOF nodes. + /// + /// This stream knows how to mark/release for backtracking. + /// + /// This stream is most suitable for tree interpreters that need to + /// jump around a lot or for tree parsers requiring speed (at cost of memory). + /// There is some duplicated functionality here with UnBufferedTreeNodeStream + /// but just in bookkeeping, not tree walking etc... + /// + /// <see cref="UnBufferedTreeNodeStream"/> + /// + /// </remarks> + ICommonTreeNodeStream = interface(ITreeNodeStream) + ['{0112FB31-AA1E-471C-ADC3-D97AC5D77E05}'] + { Property accessors } + function GetCurrentSymbol: IANTLRInterface; + function GetTreeSource: IANTLRInterface; + function GetSourceName: String; + function GetTokenStream: ITokenStream; + procedure SetTokenStream(const Value: ITokenStream); + function GetTreeAdaptor: ITreeAdaptor; + procedure SetTreeAdaptor(const Value: ITreeAdaptor); + function GetHasUniqueNavigationNodes: Boolean; + procedure SetHasUniqueNavigationNodes(const Value: Boolean); + + { Methods } + /// <summary> + /// Walk tree with depth-first-search and fill nodes buffer. + /// Don't do DOWN, UP nodes if its a list (t is isNil). + /// </summary> + procedure FillBuffer(const T: IANTLRInterface); + + function Get(const I: Integer): IANTLRInterface; + + function LT(const K: Integer): IANTLRInterface; + + /// <summary> + /// Look backwards k nodes + /// </summary> + function LB(const K: Integer): IANTLRInterface; + + /// <summary> + /// Make stream jump to a new location, saving old location. + /// Switch back with pop(). + /// </summary> + procedure Push(const Index: Integer); + + /// <summary> + /// Seek back to previous index saved during last Push() call. + /// Return top of stack (return index). + /// </summary> + function Pop: Integer; + + procedure Reset; + + // Debugging + function ToTokenString(const Start, Stop: Integer): String; + function ToString(const Start, Stop: IANTLRInterface): String; overload; + function ToString: String; overload; + + { Properties } + property CurrentSymbol: IANTLRInterface read GetCurrentSymbol; + + /// <summary> + /// Where is this stream pulling nodes from? This is not the name, but + /// the object that provides node objects. + /// </summary> + property TreeSource: IANTLRInterface read GetTreeSource; + + property SourceName: String read GetSourceName; + property TokenStream: ITokenStream read GetTokenStream write SetTokenStream; + property TreeAdaptor: ITreeAdaptor read GetTreeAdaptor write SetTreeAdaptor; + property HasUniqueNavigationNodes: Boolean read GetHasUniqueNavigationNodes write SetHasUniqueNavigationNodes; + end; + + /// <summary> + /// A record of the rules used to Match a token sequence. The tokens + /// end up as the leaves of this tree and rule nodes are the interior nodes. + /// This really adds no functionality, it is just an alias for CommonTree + /// that is more meaningful (specific) and holds a String to display for a node. + /// </summary> + IParseTree = interface(IANTLRInterface) + ['{1558F260-CAF8-4488-A242-3559BCE4E573}'] + { Methods } + + // Emit a token and all hidden nodes before. EOF node holds all + // hidden tokens after last real token. + function ToStringWithHiddenTokens: String; + + // Print out the leaves of this tree, which means printing original + // input back out. + function ToInputString: String; + + procedure _ToStringLeaves(const Buf: TStringBuilder); + end; + + /// <summary> + /// A generic list of elements tracked in an alternative to be used in + /// a -> rewrite rule. We need to subclass to fill in the next() method, + /// which returns either an AST node wrapped around a token payload or + /// an existing subtree. + /// + /// Once you start next()ing, do not try to add more elements. It will + /// break the cursor tracking I believe. + /// + /// <see cref="RewriteRuleSubtreeStream"/> + /// <see cref="RewriteRuleTokenStream"/> + /// + /// TODO: add mechanism to detect/puke on modification after reading from stream + /// </summary> + IRewriteRuleElementStream = interface(IANTLRInterface) + ['{3CB6C521-F583-40DC-A1E3-4D7D57B98C74}'] + { Property accessors } + function GetDescription: String; + + { Methods } + procedure Add(const El: IANTLRInterface); + + /// <summary> + /// Reset the condition of this stream so that it appears we have + /// not consumed any of its elements. Elements themselves are untouched. + /// </summary> + /// <remarks> + /// Once we reset the stream, any future use will need duplicates. Set + /// the dirty bit. + /// </remarks> + procedure Reset; + + function HasNext: Boolean; + + /// <summary> + /// Return the next element in the stream. + /// </summary> + function NextTree: IANTLRInterface; + function NextNode: IANTLRInterface; + + function Size: Integer; + + { Properties } + property Description: String read GetDescription; + end; + + /// <summary> + /// Queues up nodes matched on left side of -> in a tree parser. This is + /// the analog of RewriteRuleTokenStream for normal parsers. + /// </summary> + IRewriteRuleNodeStream = interface(IRewriteRuleElementStream) + ['{F60D1D36-FE13-4312-99DA-11E5F4BEBB66}'] + { Methods } + function NextNode: IANTLRInterface; + end; + + IRewriteRuleSubtreeStream = interface(IRewriteRuleElementStream) + ['{C6BDA145-D926-45BC-B293-67490D72829B}'] + { Methods } + + /// <summary> + /// Treat next element as a single node even if it's a subtree. + /// </summary> + /// <remarks> + /// This is used instead of next() when the result has to be a + /// tree root node. Also prevents us from duplicating recently-added + /// children; e.g., ^(type ID)+ adds ID to type and then 2nd iteration + /// must dup the type node, but ID has been added. + /// + /// Referencing a rule result twice is ok; dup entire tree as + /// we can't be adding trees as root; e.g., expr expr. + /// </remarks> + function NextNode: IANTLRInterface; + end; + + IRewriteRuleTokenStream = interface(IRewriteRuleElementStream) + ['{4D46AB00-7A19-4F69-B159-1EF09DB8C09C}'] + /// <summary> + /// Get next token from stream and make a node for it. + /// </summary> + /// <remarks> + /// ITreeAdaptor.Create() returns an object, so no further restrictions possible. + /// </remarks> + function NextNode: IANTLRInterface; + + function NextToken: IToken; + end; + + /// <summary> + /// A parser for a stream of tree nodes. "tree grammars" result in a subclass + /// of this. All the error reporting and recovery is shared with Parser via + /// the BaseRecognizer superclass. + /// </summary> + ITreeParser = interface(IBaseRecognizer) + ['{20611FB3-9830-444D-B385-E8C2D094484B}'] + { Property accessors } + function GetTreeNodeStream: ITreeNodeStream; + procedure SetTreeNodeStream(const Value: ITreeNodeStream); + + { Methods } + procedure TraceIn(const RuleName: String; const RuleIndex: Integer); + procedure TraceOut(const RuleName: String; const RuleIndex: Integer); + + { Properties } + property TreeNodeStream: ITreeNodeStream read GetTreeNodeStream write SetTreeNodeStream; + end; + + ITreePatternLexer = interface(IANTLRInterface) + ['{C3FEC614-9E6F-48D2-ABAB-59FC83D8BC2F}'] + { Methods } + function NextToken: Integer; + function SVal: String; + end; + + IContextVisitor = interface(IANTLRInterface) + ['{92B80D23-C63E-48B4-A9CD-EC2639317E43}'] + { Methods } + procedure Visit(const T, Parent: IANTLRInterface; const ChildIndex: Integer; + const Labels: IDictionary<String, IANTLRInterface>); + end; + + /// <summary> + /// Build and navigate trees with this object. Must know about the names + /// of tokens so you have to pass in a map or array of token names (from which + /// this class can build the map). I.e., Token DECL means nothing unless the + /// class can translate it to a token type. + /// </summary> + /// <remarks> + /// In order to create nodes and navigate, this class needs a TreeAdaptor. + /// + /// This class can build a token type -> node index for repeated use or for + /// iterating over the various nodes with a particular type. + /// + /// This class works in conjunction with the TreeAdaptor rather than moving + /// all this functionality into the adaptor. An adaptor helps build and + /// navigate trees using methods. This class helps you do it with string + /// patterns like "(A B C)". You can create a tree from that pattern or + /// match subtrees against it. + /// </remarks> + ITreeWizard = interface(IANTLRInterface) + ['{4F440E19-893A-4E52-A979-E5377EAFA3B8}'] + { Methods } + /// <summary> + /// Compute a Map<String, Integer> that is an inverted index of + /// tokenNames (which maps int token types to names). + /// </summary> + function ComputeTokenTypes(const TokenNames: TStringArray): IDictionary<String, Integer>; + + /// <summary> + /// Using the map of token names to token types, return the type. + /// </summary> + function GetTokenType(const TokenName: String): Integer; + + /// <summary> + /// Walk the entire tree and make a node name to nodes mapping. + /// </summary> + /// <remarks> + /// For now, use recursion but later nonrecursive version may be + /// more efficient. Returns Map<Integer, List> where the List is + /// of your AST node type. The Integer is the token type of the node. + /// + /// TODO: save this index so that find and visit are faster + /// </remarks> + function Index(const T: IANTLRInterface): IDictionary<Integer, IList<IANTLRInterface>>; + + /// <summary>Return a List of tree nodes with token type ttype</summary> + function Find(const T: IANTLRInterface; const TokenType: Integer): IList<IANTLRInterface>; overload; + + /// <summary>Return a List of subtrees matching pattern</summary> + function Find(const T: IANTLRInterface; const Pattern: String): IList<IANTLRInterface>; overload; + + function FindFirst(const T: IANTLRInterface; const TokenType: Integer): IANTLRInterface; overload; + function FindFirst(const T: IANTLRInterface; const Pattern: String): IANTLRInterface; overload; + + /// <summary> + /// Visit every ttype node in t, invoking the visitor. + /// </summary> + /// <remarks> + /// This is a quicker + /// version of the general visit(t, pattern) method. The labels arg + /// of the visitor action method is never set (it's null) since using + /// a token type rather than a pattern doesn't let us set a label. + /// </remarks> + procedure Visit(const T: IANTLRInterface; const TokenType: Integer; + const Visitor: IContextVisitor); overload; + + /// <summary> + /// For all subtrees that match the pattern, execute the visit action. + /// </summary> + /// <remarks> + /// The implementation uses the root node of the pattern in combination + /// with visit(t, ttype, visitor) so nil-rooted patterns are not allowed. + /// Patterns with wildcard roots are also not allowed. + /// </remarks> + procedure Visit(const T: IANTLRInterface; const Pattern: String; + const Visitor: IContextVisitor); overload; + + /// <summary> + /// Given a pattern like (ASSIGN %lhs:ID %rhs:.) with optional labels + /// on the various nodes and '.' (dot) as the node/subtree wildcard, + /// return true if the pattern matches and fill the labels Map with + /// the labels pointing at the appropriate nodes. Return false if + /// the pattern is malformed or the tree does not match. + /// </summary> + /// <remarks> + /// If a node specifies a text arg in pattern, then that must match + /// for that node in t. + /// + /// TODO: what's a better way to indicate bad pattern? Exceptions are a hassle + /// </remarks> + function Parse(const T: IANTLRInterface; const Pattern: String; + const Labels: IDictionary<String, IANTLRInterface>): Boolean; overload; + function Parse(const T: IANTLRInterface; const Pattern: String): Boolean; overload; + + /// <summary> + /// Create a tree or node from the indicated tree pattern that closely + /// follows ANTLR tree grammar tree element syntax: + /// + /// (root child1 ... child2). + /// + /// </summary> + /// <remarks> + /// You can also just pass in a node: ID + /// + /// Any node can have a text argument: ID[foo] + /// (notice there are no quotes around foo--it's clear it's a string). + /// + /// nil is a special name meaning "give me a nil node". Useful for + /// making lists: (nil A B C) is a list of A B C. + /// </remarks> + function CreateTreeOrNode(const Pattern: String): IANTLRInterface; + + /// <summary> + /// Compare type, structure, and text of two trees, assuming adaptor in + /// this instance of a TreeWizard. + /// </summary> + function Equals(const T1, T2: IANTLRInterface): Boolean; overload; + + /// <summary> + /// Compare t1 and t2; return true if token types/text, structure match exactly. + /// The trees are examined in their entirety so that (A B) does not match + /// (A B C) nor (A (B C)). + /// </summary> + /// <remarks> + /// TODO: allow them to pass in a comparator + /// TODO: have a version that is nonstatic so it can use instance adaptor + /// + /// I cannot rely on the tree node's equals() implementation as I make + /// no constraints at all on the node types nor interface etc... + /// </remarks> + function Equals(const T1, T2: IANTLRInterface; const Adaptor: ITreeAdaptor): Boolean; overload; + end; + + ITreePatternParser = interface(IANTLRInterface) + ['{0CE3DF2A-7E4C-4A7C-8FE8-F1D7AFF97CAE}'] + { Methods } + function Pattern: IANTLRInterface; + function ParseTree: IANTLRInterface; + function ParseNode: IANTLRInterface; + end; + + /// <summary> + /// This is identical to the ParserRuleReturnScope except that + /// the start property is a tree node and not a Token object + /// when you are parsing trees. To be generic the tree node types + /// have to be Object :( + /// </summary> + ITreeRuleReturnScope = interface(IRuleReturnScope) + ['{FA2B1766-34E5-4D92-8996-371D5CFED999}'] + end; + + /// <summary> + /// A stream of tree nodes, accessing nodes from a tree of ANY kind. + /// </summary> + /// <remarks> + /// No new nodes should be created in tree during the walk. A small buffer + /// of tokens is kept to efficiently and easily handle LT(i) calls, though + /// the lookahead mechanism is fairly complicated. + /// + /// For tree rewriting during tree parsing, this must also be able + /// to replace a set of children without "losing its place". + /// That part is not yet implemented. Will permit a rule to return + /// a different tree and have it stitched into the output tree probably. + /// + /// <see cref="CommonTreeNodeStream"/> + /// + /// </remarks> + IUnBufferedTreeNodeStream = interface(ITreeNodeStream) + ['{E46367AD-ED41-4D97-824E-575A48F7435D}'] + { Property accessors } + function GetHasUniqueNavigationNodes: Boolean; + procedure SetHasUniqueNavigationNodes(const Value: Boolean); + function GetCurrent: IANTLRInterface; + function GetTokenStream: ITokenStream; + procedure SetTokenStream(const Value: ITokenStream); + + { Methods } + procedure Reset; + function MoveNext: Boolean; + + { Properties } + property HasUniqueNavigationNodes: Boolean read GetHasUniqueNavigationNodes write SetHasUniqueNavigationNodes; + property Current: IANTLRInterface read GetCurrent; + property TokenStream: ITokenStream read GetTokenStream write SetTokenStream; + end; + + /// <summary>Base class for all exceptions thrown during AST rewrite construction.</summary> + /// <remarks> + /// This signifies a case where the cardinality of two or more elements + /// in a subrule are different: (ID INT)+ where |ID|!=|INT| + /// </remarks> + ERewriteCardinalityException = class(Exception) + strict private + FElementDescription: String; + public + constructor Create(const AElementDescription: String); + + property ElementDescription: String read FElementDescription write FElementDescription; + end; + + /// <summary> + /// No elements within a (...)+ in a rewrite rule + /// </summary> + ERewriteEarlyExitException = class(ERewriteCardinalityException) + // No new declarations + end; + + /// <summary> + /// Ref to ID or expr but no tokens in ID stream or subtrees in expr stream + /// </summary> + ERewriteEmptyStreamException = class(ERewriteCardinalityException) + // No new declarations + end; + +type + TTree = class sealed + strict private + class var + FINVALID_NODE: ITree; + private + class procedure Initialize; static; + public + class property INVALID_NODE: ITree read FINVALID_NODE; + end; + + TBaseTree = class abstract(TANTLRObject, IBaseTree, ITree) + protected + { ITree / IBaseTree } + function GetParent: ITree; virtual; + procedure SetParent(const Value: ITree); virtual; + function GetChildIndex: Integer; virtual; + procedure SetChildIndex(const Value: Integer); virtual; + function GetTokenType: Integer; virtual; abstract; + function GetText: String; virtual; abstract; + function GetTokenStartIndex: Integer; virtual; abstract; + procedure SetTokenStartIndex(const Value: Integer); virtual; abstract; + function GetTokenStopIndex: Integer; virtual; abstract; + procedure SetTokenStopIndex(const Value: Integer); virtual; abstract; + function DupNode: ITree; virtual; abstract; + function ToStringTree: String; virtual; + function GetChildCount: Integer; virtual; + function GetIsNil: Boolean; virtual; + function GetLine: Integer; virtual; + function GetCharPositionInLine: Integer; virtual; + function GetChild(const I: Integer): ITree; virtual; + procedure AddChild(const T: ITree); + function DeleteChild(const I: Integer): IANTLRInterface; + procedure FreshenParentAndChildIndexes; overload; + procedure ReplaceChildren(const StartChildIndex, StopChildIndex: Integer; + const T: IANTLRInterface); + protected + { IBaseTree } + function GetChildren: IList<IBaseTree>; + procedure AddChildren(const Kids: IList<IBaseTree>); + procedure SetChild(const I: Integer; const T: ITree); virtual; + procedure FreshenParentAndChildIndexes(const Offset: Integer); overload; + procedure SanityCheckParentAndChildIndexes; overload; virtual; + procedure SanityCheckParentAndChildIndexes(const Parent: ITree; + const I: Integer); overload; virtual; + strict protected + FChildren: IList<IBaseTree>; + + /// <summary>Override in a subclass to change the impl of children list </summary> + function CreateChildrenList: IList<IBaseTree>; virtual; + + public + constructor Create; overload; + + /// <summary>Create a new node from an existing node does nothing for BaseTree + /// as there are no fields other than the children list, which cannot + /// be copied as the children are not considered part of this node. + /// </summary> + constructor Create(const ANode: ITree); overload; + + function ToString: String; override; abstract; + end; + + TCommonTree = class(TBaseTree, ICommonTree) + strict protected + /// <summary>A single token is the payload </summary> + FToken: IToken; + + /// <summary> + /// What token indexes bracket all tokens associated with this node + /// and below? + /// </summary> + FStartIndex: Integer; + FStopIndex: Integer; + + /// <summary>Who is the parent node of this node; if null, implies node is root</summary> + /// <remarks> + /// FParent should be of type ICommonTree, but that would introduce a + /// circular reference because the tree also maintains links to it's + /// children. This circular reference would cause a memory leak because + /// the reference count will never reach 0. This is avoided by making + /// FParent a regular pointer and letting the GetParent and SetParent + /// property accessors do the conversion to/from ICommonTree. + /// </remarks> + FParent: Pointer; { ICommonTree ; } + + /// <summary>What index is this node in the child list? Range: 0..n-1</summary> + FChildIndex: Integer; + protected + { ITree / IBaseTree } + function GetIsNil: Boolean; override; + function GetTokenType: Integer; override; + function GetText: String; override; + function GetLine: Integer; override; + function GetCharPositionInLine: Integer; override; + function GetTokenStartIndex: Integer; override; + procedure SetTokenStartIndex(const Value: Integer); override; + function GetTokenStopIndex: Integer; override; + procedure SetTokenStopIndex(const Value: Integer); override; + function GetChildIndex: Integer; override; + procedure SetChildIndex(const Value: Integer); override; + function GetParent: ITree; override; + procedure SetParent(const Value: ITree); override; + function DupNode: ITree; override; + protected + { ICommonTree } + function GetToken: IToken; + function GetStartIndex: Integer; + procedure SetStartIndex(const Value: Integer); + function GetStopIndex: Integer; + procedure SetStopIndex(const Value: Integer); + public + constructor Create; overload; + constructor Create(const ANode: ICommonTree); overload; + constructor Create(const AToken: IToken); overload; + + function ToString: String; override; + end; + + TCommonErrorNode = class(TCommonTree, ICommonErrorNode) + strict private + FInput: IIntStream; + FStart: IToken; + FStop: IToken; + FTrappedException: ERecognitionException; + protected + { ITree / IBaseTree } + function GetIsNil: Boolean; override; + function GetTokenType: Integer; override; + function GetText: String; override; + public + constructor Create(const AInput: ITokenStream; const AStart, AStop: IToken; + const AException: ERecognitionException); + + function ToString: String; override; + end; + + TBaseTreeAdaptor = class abstract(TANTLRObject, IBaseTreeAdaptor, ITreeAdaptor) + strict private + /// <summary>A map of tree node to unique IDs.</summary> + FTreeToUniqueIDMap: IDictionary<IANTLRInterface, Integer>; + + /// <summary>Next available unique ID.</summary> + FUniqueNodeID: Integer; + protected + { ITreeAdaptor } + function CreateNode(const Payload: IToken): IANTLRInterface; overload; virtual; abstract; + function DupNode(const TreeNode: IANTLRInterface): IANTLRInterface; virtual; abstract; + function DupTree(const Tree: IANTLRInterface): IANTLRInterface; overload; virtual; + function GetNilNode: IANTLRInterface; virtual; + function ErrorNode(const Input: ITokenStream; const Start, Stop: IToken; + const E: ERecognitionException): IANTLRInterface; virtual; + function IsNil(const Tree: IANTLRInterface): Boolean; virtual; + procedure AddChild(const T, Child: IANTLRInterface); virtual; + function BecomeRoot(const NewRoot, OldRoot: IANTLRInterface): IANTLRInterface; overload; virtual; + function RulePostProcessing(const Root: IANTLRInterface): IANTLRInterface; virtual; + function GetUniqueID(const Node: IANTLRInterface): Integer; + function BecomeRoot(const NewRoot: IToken; const OldRoot: IANTLRInterface): IANTLRInterface; overload; virtual; + function CreateNode(const TokenType: Integer; const FromToken: IToken): IANTLRInterface; overload; virtual; + function CreateNode(const TokenType: Integer; const FromToken: IToken; + const Text: String): IANTLRInterface; overload; virtual; + function CreateNode(const TokenType: Integer; const Text: String): IANTLRInterface; overload; virtual; + function GetNodeType(const T: IANTLRInterface): Integer; virtual; + procedure SetNodeType(const T: IANTLRInterface; const NodeType: Integer); virtual; + function GetNodeText(const T: IANTLRInterface): String; virtual; + procedure SetNodeText(const T: IANTLRInterface; const Text: String); virtual; + function GetToken(const TreeNode: IANTLRInterface): IToken; virtual; abstract; + procedure SetTokenBoundaries(const T: IANTLRInterface; const StartToken, + StopToken: IToken); virtual; abstract; + function GetTokenStartIndex(const T: IANTLRInterface): Integer; virtual; abstract; + function GetTokenStopIndex(const T: IANTLRInterface): Integer; virtual; abstract; + function GetChild(const T: IANTLRInterface; const I: Integer): IANTLRInterface; virtual; + procedure SetChild(const T: IANTLRInterface; const I: Integer; const Child: IANTLRInterface); virtual; + function DeleteChild(const T: IANTLRInterface; const I: Integer): IANTLRInterface; virtual; + function GetChildCount(const T: IANTLRInterface): Integer; virtual; + function GetParent(const T: IANTLRInterface): IANTLRInterface; virtual; abstract; + procedure SetParent(const T, Parent: IANTLRInterface); virtual; abstract; + function GetChildIndex(const T: IANTLRInterface): Integer; virtual; abstract; + procedure SetChildIdex(const T: IANTLRInterface; const Index: Integer); virtual; abstract; + procedure ReplaceChildren(const Parent: IANTLRInterface; const StartChildIndex, + StopChildIndex: Integer; const T: IANTLRInterface); virtual; abstract; + protected + { IBaseTreeAdaptor } + function DupTree(const T, Parent: IANTLRInterface): IANTLRInterface; overload; virtual; + function CreateToken(const TokenType: Integer; const Text: String): IToken; overload; virtual; abstract; + function CreateToken(const FromToken: IToken): IToken; overload; virtual; abstract; + public + constructor Create; + end; + + TCommonTreeAdaptor = class(TBaseTreeAdaptor, ICommonTreeAdaptor) + protected + { ITreeAdaptor } + function DupNode(const TreeNode: IANTLRInterface): IANTLRInterface; override; + function CreateNode(const Payload: IToken): IANTLRInterface; overload; override; + procedure SetTokenBoundaries(const T: IANTLRInterface; const StartToken, + StopToken: IToken); override; + function GetTokenStartIndex(const T: IANTLRInterface): Integer; override; + function GetTokenStopIndex(const T: IANTLRInterface): Integer; override; + function GetNodeText(const T: IANTLRInterface): String; override; + function GetToken(const TreeNode: IANTLRInterface): IToken; override; + function GetNodeType(const T: IANTLRInterface): Integer; override; + function GetChild(const T: IANTLRInterface; const I: Integer): IANTLRInterface; override; + function GetChildCount(const T: IANTLRInterface): Integer; override; + function GetParent(const T: IANTLRInterface): IANTLRInterface; override; + procedure SetParent(const T, Parent: IANTLRInterface); override; + function GetChildIndex(const T: IANTLRInterface): Integer; override; + procedure SetChildIdex(const T: IANTLRInterface; const Index: Integer); override; + procedure ReplaceChildren(const Parent: IANTLRInterface; const StartChildIndex, + StopChildIndex: Integer; const T: IANTLRInterface); override; + protected + { IBaseTreeAdaptor } + function CreateToken(const TokenType: Integer; const Text: String): IToken; overload; override; + function CreateToken(const FromToken: IToken): IToken; overload; override; + end; + + TCommonTreeNodeStream = class(TANTLRObject, ICommonTreeNodeStream, ITreeNodeStream) + public + const + DEFAULT_INITIAL_BUFFER_SIZE = 100; + INITIAL_CALL_STACK_SIZE = 10; + strict private + // all these navigation nodes are shared and hence they + // cannot contain any line/column info + FDown: IANTLRInterface; + FUp: IANTLRInterface; + FEof: IANTLRInterface; + + /// <summary> + /// The complete mapping from stream index to tree node. This buffer + /// includes pointers to DOWN, UP, and EOF nodes. + /// + /// It is built upon ctor invocation. The elements are type Object + /// as we don't what the trees look like. Load upon first need of + /// the buffer so we can set token types of interest for reverseIndexing. + /// Slows us down a wee bit to do all of the if p==-1 testing everywhere though. + /// </summary> + FNodes: IList<IANTLRInterface>; + + /// <summary>Pull nodes from which tree? </summary> + FRoot: IANTLRInterface; + + /// <summary>IF this tree (root) was created from a token stream, track it</summary> + FTokens: ITokenStream; + + /// <summary>What tree adaptor was used to build these trees</summary> + FAdaptor: ITreeAdaptor; + + /// <summary> + /// Reuse same DOWN, UP navigation nodes unless this is true + /// </summary> + FUniqueNavigationNodes: Boolean; + + /// <summary> + /// The index into the nodes list of the current node (next node + /// to consume). If -1, nodes array not filled yet. + /// </summary> + FP: Integer; + + /// <summary> + /// Track the last mark() call result value for use in rewind(). + /// </summary> + FLastMarker: Integer; + + /// <summary> + /// Stack of indexes used for push/pop calls + /// </summary> + FCalls: IStackList<Integer>; + protected + { IIntStream } + function GetSourceName: String; virtual; + + procedure Consume; virtual; + function LA(I: Integer): Integer; virtual; + function LAChar(I: Integer): Char; + function Mark: Integer; virtual; + function Index: Integer; virtual; + procedure Rewind(const Marker: Integer); overload; virtual; + procedure Rewind; overload; + procedure Release(const Marker: Integer); virtual; + procedure Seek(const Index: Integer); virtual; + function Size: Integer; virtual; + protected + { ITreeNodeStream } + function GetTreeSource: IANTLRInterface; virtual; + function GetTokenStream: ITokenStream; virtual; + function GetTreeAdaptor: ITreeAdaptor; + procedure SetHasUniqueNavigationNodes(const Value: Boolean); + + function Get(const I: Integer): IANTLRInterface; + function LT(const K: Integer): IANTLRInterface; + function ToString(const Start, Stop: IANTLRInterface): String; reintroduce; overload; + procedure ReplaceChildren(const Parent: IANTLRInterface; const StartChildIndex, + StopChildIndex: Integer; const T: IANTLRInterface); + protected + { ICommonTreeNodeStream } + function GetCurrentSymbol: IANTLRInterface; virtual; + procedure SetTokenStream(const Value: ITokenStream); virtual; + procedure SetTreeAdaptor(const Value: ITreeAdaptor); + function GetHasUniqueNavigationNodes: Boolean; + + procedure FillBuffer(const T: IANTLRInterface); overload; + function LB(const K: Integer): IANTLRInterface; + procedure Push(const Index: Integer); + function Pop: Integer; + procedure Reset; + function ToTokenString(const Start, Stop: Integer): String; + strict protected + /// <summary> + /// Walk tree with depth-first-search and fill nodes buffer. + /// Don't do DOWN, UP nodes if its a list (t is isNil). + /// </summary> + procedure FillBuffer; overload; + + /// <summary> + /// As we flatten the tree, we use UP, DOWN nodes to represent + /// the tree structure. When debugging we need unique nodes + /// so instantiate new ones when uniqueNavigationNodes is true. + /// </summary> + procedure AddNavigationNode(const TokenType: Integer); + + /// <summary> + /// Returns the stream index for the spcified node in the range 0..n-1 or, + /// -1 if node not found. + /// </summary> + function GetNodeIndex(const Node: IANTLRInterface): Integer; + public + constructor Create; overload; + constructor Create(const ATree: IANTLRInterface); overload; + constructor Create(const AAdaptor: ITreeAdaptor; + const ATree: IANTLRInterface); overload; + constructor Create(const AAdaptor: ITreeAdaptor; + const ATree: IANTLRInterface; const AInitialBufferSize: Integer); overload; + + function ToString: String; overload; override; + end; + + TParseTree = class(TBaseTree, IParseTree) + strict private + FPayload: IANTLRInterface; + FHiddenTokens: IList<IToken>; + protected + { ITree / IBaseTree } + function GetTokenType: Integer; override; + function GetText: String; override; + function GetTokenStartIndex: Integer; override; + procedure SetTokenStartIndex(const Value: Integer); override; + function GetTokenStopIndex: Integer; override; + procedure SetTokenStopIndex(const Value: Integer); override; + function DupNode: ITree; override; + protected + { IParseTree } + function ToStringWithHiddenTokens: String; + function ToInputString: String; + procedure _ToStringLeaves(const Buf: TStringBuilder); + public + constructor Create(const ALabel: IANTLRInterface); + + function ToString: String; override; + end; + + TRewriteRuleElementStream = class abstract(TANTLRObject, IRewriteRuleElementStream) + private + /// <summary> + /// Cursor 0..n-1. If singleElement!=null, cursor is 0 until you next(), + /// which bumps it to 1 meaning no more elements. + /// </summary> + FCursor: Integer; + + /// <summary> + /// Track single elements w/o creating a list. Upon 2nd add, alloc list + /// </summary> + FSingleElement: IANTLRInterface; + + /// <summary> + /// The list of tokens or subtrees we are tracking + /// </summary> + FElements: IList<IANTLRInterface>; + + /// <summary> + /// Tracks whether a node or subtree has been used in a stream + /// </summary> + /// <remarks> + /// Once a node or subtree has been used in a stream, it must be dup'd + /// from then on. Streams are reset after subrules so that the streams + /// can be reused in future subrules. So, reset must set a dirty bit. + /// If dirty, then next() always returns a dup. + /// </remarks> + FDirty: Boolean; + + /// <summary> + /// The element or stream description; usually has name of the token or + /// rule reference that this list tracks. Can include rulename too, but + /// the exception would track that info. + /// </summary> + FElementDescription: String; + FAdaptor: ITreeAdaptor; + protected + { IRewriteRuleElementStream } + function GetDescription: String; + + procedure Add(const El: IANTLRInterface); + procedure Reset; virtual; + function HasNext: Boolean; + function NextTree: IANTLRInterface; virtual; + function NextNode: IANTLRInterface; virtual; abstract; + function Size: Integer; + strict protected + /// <summary> + /// Do the work of getting the next element, making sure that + /// it's a tree node or subtree. + /// </summary> + /// <remarks> + /// Deal with the optimization of single-element list versus + /// list of size > 1. Throw an exception if the stream is + /// empty or we're out of elements and size>1. + /// </remarks> + function _Next: IANTLRInterface; + + /// <summary> + /// Ensure stream emits trees; tokens must be converted to AST nodes. + /// AST nodes can be passed through unmolested. + /// </summary> + function ToTree(const El: IANTLRInterface): IANTLRInterface; virtual; + public + constructor Create(const AAdaptor: ITreeAdaptor; + const AElementDescription: String); overload; + + /// <summary> + /// Create a stream with one element + /// </summary> + constructor Create(const AAdaptor: ITreeAdaptor; + const AElementDescription: String; const AOneElement: IANTLRInterface); overload; + + /// <summary> + /// Create a stream, but feed off an existing list + /// </summary> + constructor Create(const AAdaptor: ITreeAdaptor; + const AElementDescription: String; const AElements: IList<IANTLRInterface>); overload; + end; + + TRewriteRuleNodeStream = class(TRewriteRuleElementStream, IRewriteRuleNodeStream) + protected + { IRewriteRuleElementStream } + function NextNode: IANTLRInterface; override; + function ToTree(const El: IANTLRInterface): IANTLRInterface; override; + end; + + TRewriteRuleSubtreeStream = class(TRewriteRuleElementStream, IRewriteRuleSubtreeStream) + public + type + /// <summary> + /// This delegate is used to allow the outfactoring of some common code. + /// </summary> + /// <param name="o">The to be processed object</param> + TProcessHandler = function(const O: IANTLRInterface): IANTLRInterface of Object; + strict private + /// <summary> + /// This method has the common code of two other methods, which differed in only one + /// function call. + /// </summary> + /// <param name="ph">The delegate, which has the chosen function</param> + /// <returns>The required object</returns> + function FetchObject(const PH: TProcessHandler): IANTLRInterface; + function DupNode(const O: IANTLRInterface): IANTLRInterface; + + /// <summary> + /// Tests, if the to be returned object requires duplication + /// </summary> + /// <returns><code>true</code>, if positive, <code>false</code>, if negative.</returns> + function RequiresDuplication: Boolean; + + /// <summary> + /// When constructing trees, sometimes we need to dup a token or AST + /// subtree. Dup'ing a token means just creating another AST node + /// around it. For trees, you must call the adaptor.dupTree() + /// unless the element is for a tree root; then it must be a node dup + /// </summary> + function Dup(const O: IANTLRInterface): IANTLRInterface; + protected + { IRewriteRuleElementStream } + function NextNode: IANTLRInterface; override; + function NextTree: IANTLRInterface; override; + end; + + TRewriteRuleTokenStream = class(TRewriteRuleElementStream, IRewriteRuleTokenStream) + protected + { IRewriteRuleElementStream } + function NextNode: IANTLRInterface; override; + function NextToken: IToken; + function ToTree(const El: IANTLRInterface): IANTLRInterface; override; + end; + + TTreeParser = class(TBaseRecognizer, ITreeParser) + public + const + DOWN = TToken.DOWN; + UP = TToken.UP; + strict private + FInput: ITreeNodeStream; + strict protected + property Input: ITreeNodeStream read FInput; + protected + { IBaseRecognizer } + function GetSourceName: String; override; + procedure Reset; override; + procedure MatchAny(const Input: IIntStream); override; + function GetInput: IIntStream; override; + function GetErrorHeader(const E: ERecognitionException): String; override; + function GetErrorMessage(const E: ERecognitionException; + const TokenNames: TStringArray): String; override; + protected + { ITreeParser } + function GetTreeNodeStream: ITreeNodeStream; virtual; + procedure SetTreeNodeStream(const Value: ITreeNodeStream); virtual; + + procedure TraceIn(const RuleName: String; const RuleIndex: Integer); reintroduce; overload; virtual; + procedure TraceOut(const RuleName: String; const RuleIndex: Integer); reintroduce; overload; virtual; + strict protected + function GetCurrentInputSymbol(const Input: IIntStream): IANTLRInterface; override; + function GetMissingSymbol(const Input: IIntStream; + const E: ERecognitionException; const ExpectedTokenType: Integer; + const Follow: IBitSet): IANTLRInterface; override; + procedure Mismatch(const Input: IIntStream; const TokenType: Integer; + const Follow: IBitSet); override; + public + constructor Create(const AInput: ITreeNodeStream); overload; + constructor Create(const AInput: ITreeNodeStream; + const AState: IRecognizerSharedState); overload; + end; + + TTreePatternLexer = class(TANTLRObject, ITreePatternLexer) + public + const + EOF = -1; + START = 1; + STOP = 2; + ID = 3; + ARG = 4; + PERCENT = 5; + COLON = 6; + DOT = 7; + strict private + /// <summary>The tree pattern to lex like "(A B C)"</summary> + FPattern: String; + + /// <summary>Index into input string</summary> + FP: Integer; + + /// <summary>Current char</summary> + FC: Integer; + + /// <summary>How long is the pattern in char?</summary> + FN: Integer; + + /// <summary> + /// Set when token type is ID or ARG (name mimics Java's StreamTokenizer) + /// </summary> + FSVal: TStringBuilder; + + FError: Boolean; + protected + { ITreePatternLexer } + function NextToken: Integer; + function SVal: String; + strict protected + procedure Consume; + public + constructor Create; overload; + constructor Create(const APattern: String); overload; + destructor Destroy; override; + end; + + TTreeWizard = class(TANTLRObject, ITreeWizard) + strict private + FAdaptor: ITreeAdaptor; + FTokenNameToTypeMap: IDictionary<String, Integer>; + public + type + /// <summary> + /// When using %label:TOKENNAME in a tree for parse(), we must track the label. + /// </summary> + ITreePattern = interface(ICommonTree) + ['{893C6B4E-8474-4A1E-BEAA-8B704868401B}'] + { Property accessors } + function GetHasTextArg: Boolean; + procedure SetHasTextArg(const Value: Boolean); + function GetTokenLabel: String; + procedure SetTokenLabel(const Value: String); + + { Properties } + property HasTextArg: Boolean read GetHasTextArg write SetHasTextArg; + property TokenLabel: String read GetTokenLabel write SetTokenLabel; + end; + + IWildcardTreePattern = interface(ITreePattern) + ['{4778789A-5EAB-47E3-A05B-7F35CD87ECE4}'] + end; + type + TVisitor = class abstract(TANTLRObject, IContextVisitor) + protected + { IContextVisitor } + procedure Visit(const T, Parent: IANTLRInterface; const ChildIndex: Integer; + const Labels: IDictionary<String, IANTLRInterface>); overload; + strict protected + procedure Visit(const T: IANTLRInterface); overload; virtual; abstract; + end; + + TTreePattern = class(TCommonTree, ITreePattern) + strict private + FLabel: String; + FHasTextArg: Boolean; + protected + { ITreePattern } + function GetHasTextArg: Boolean; + procedure SetHasTextArg(const Value: Boolean); + function GetTokenLabel: String; + procedure SetTokenLabel(const Value: String); + public + function ToString: String; override; + end; + + TWildcardTreePattern = class(TTreePattern, IWildcardTreePattern) + + end; + + /// <summary> + /// This adaptor creates TreePattern objects for use during scan() + /// </summary> + TTreePatternTreeAdaptor = class(TCommonTreeAdaptor) + protected + { ITreeAdaptor } + function CreateNode(const Payload: IToken): IANTLRInterface; overload; override; + end; + strict private + type + TRecordAllElementsVisitor = class sealed(TVisitor) + strict private + FList: IList<IANTLRInterface>; + strict protected + procedure Visit(const T: IANTLRInterface); override; + public + constructor Create(const AList: IList<IANTLRInterface>); + end; + + type + TPatternMatchingContextVisitor = class sealed(TANTLRObject, IContextVisitor) + strict private + FOwner: TTreeWizard; + FPattern: ITreePattern; + FList: IList<IANTLRInterface>; + protected + { IContextVisitor } + procedure Visit(const T, Parent: IANTLRInterface; const ChildIndex: Integer; + const Labels: IDictionary<String, IANTLRInterface>); overload; + public + constructor Create(const AOwner: TTreeWizard; const APattern: ITreePattern; + const AList: IList<IANTLRInterface>); + end; + + type + TInvokeVisitorOnPatternMatchContextVisitor = class sealed(TANTLRObject, IContextVisitor) + strict private + FOwner: TTreeWizard; + FPattern: ITreePattern; + FVisitor: IContextVisitor; + FLabels: IDictionary<String, IANTLRInterface>; + protected + { IContextVisitor } + procedure Visit(const T, Parent: IANTLRInterface; const ChildIndex: Integer; + const UnusedLabels: IDictionary<String, IANTLRInterface>); overload; + public + constructor Create(const AOwner: TTreeWizard; const APattern: ITreePattern; + const AVisitor: IContextVisitor); + end; + protected + { ITreeWizard } + function ComputeTokenTypes(const TokenNames: TStringArray): IDictionary<String, Integer>; + function GetTokenType(const TokenName: String): Integer; + function Index(const T: IANTLRInterface): IDictionary<Integer, IList<IANTLRInterface>>; + function Find(const T: IANTLRInterface; const TokenType: Integer): IList<IANTLRInterface>; overload; + function Find(const T: IANTLRInterface; const Pattern: String): IList<IANTLRInterface>; overload; + function FindFirst(const T: IANTLRInterface; const TokenType: Integer): IANTLRInterface; overload; + function FindFirst(const T: IANTLRInterface; const Pattern: String): IANTLRInterface; overload; + procedure Visit(const T: IANTLRInterface; const TokenType: Integer; + const Visitor: IContextVisitor); overload; + procedure Visit(const T: IANTLRInterface; const Pattern: String; + const Visitor: IContextVisitor); overload; + function Parse(const T: IANTLRInterface; const Pattern: String; + const Labels: IDictionary<String, IANTLRInterface>): Boolean; overload; + function Parse(const T: IANTLRInterface; const Pattern: String): Boolean; overload; + function CreateTreeOrNode(const Pattern: String): IANTLRInterface; + function Equals(const T1, T2: IANTLRInterface): Boolean; reintroduce; overload; + function Equals(const T1, T2: IANTLRInterface; + const Adaptor: ITreeAdaptor): Boolean; reintroduce; overload; + strict protected + function _Parse(const T1: IANTLRInterface; const T2: ITreePattern; + const Labels: IDictionary<String, IANTLRInterface>): Boolean; + + /// <summary>Do the work for index</summary> + procedure _Index(const T: IANTLRInterface; + const M: IDictionary<Integer, IList<IANTLRInterface>>); + + /// <summary>Do the recursive work for visit</summary> + procedure _Visit(const T, Parent: IANTLRInterface; const ChildIndex, + TokenType: Integer; const Visitor: IContextVisitor); + + class function _Equals(const T1, T2: IANTLRInterface; + const Adaptor: ITreeAdaptor): Boolean; static; + public + constructor Create(const AAdaptor: ITreeAdaptor); overload; + constructor Create(const AAdaptor: ITreeAdaptor; + const ATokenNameToTypeMap: IDictionary<String, Integer>); overload; + constructor Create(const AAdaptor: ITreeAdaptor; + const TokenNames: TStringArray); overload; + constructor Create(const TokenNames: TStringArray); overload; + end; + + TTreePatternParser = class(TANTLRObject, ITreePatternParser) + strict private + FTokenizer: ITreePatternLexer; + FTokenType: Integer; + FWizard: ITreeWizard; + FAdaptor: ITreeAdaptor; + protected + { ITreePatternParser } + function Pattern: IANTLRInterface; + function ParseTree: IANTLRInterface; + function ParseNode: IANTLRInterface; + public + constructor Create(const ATokenizer: ITreePatternLexer; + const AWizard: ITreeWizard; const AAdaptor: ITreeAdaptor); + end; + + TTreeRuleReturnScope = class(TRuleReturnScope, ITreeRuleReturnScope) + strict private + /// <summary>First node or root node of tree matched for this rule.</summary> + FStart: IANTLRInterface; + protected + { IRuleReturnScope } + function GetStart: IANTLRInterface; override; + procedure SetStart(const Value: IANTLRInterface); override; + end; + + TUnBufferedTreeNodeStream = class(TANTLRObject, IUnBufferedTreeNodeStream, ITreeNodeStream) + public + const + INITIAL_LOOKAHEAD_BUFFER_SIZE = 5; + strict protected + type + /// <summary> + /// When walking ahead with cyclic DFA or for syntactic predicates, + /// we need to record the state of the tree node stream. This + /// class wraps up the current state of the UnBufferedTreeNodeStream. + /// Calling Mark() will push another of these on the markers stack. + /// </summary> + ITreeWalkState = interface(IANTLRInterface) + ['{506D1014-53CF-4B9D-BE0E-1666E9C22091}'] + { Property accessors } + function GetCurrentChildIndex: Integer; + procedure SetCurrentChildIndex(const Value: Integer); + function GetAbsoluteNodeIndex: Integer; + procedure SetAbsoluteNodeIndex(const Value: Integer); + function GetCurrentNode: IANTLRInterface; + procedure SetCurrentNode(const Value: IANTLRInterface); + function GetPreviousNode: IANTLRInterface; + procedure SetPreviousNode(const Value: IANTLRInterface); + function GetNodeStackSize: Integer; + procedure SetNodeStackSize(const Value: Integer); + function GetIndexStackSize: integer; + procedure SetIndexStackSize(const Value: integer); + function GetLookAhead: TANTLRInterfaceArray; + procedure SetLookAhead(const Value: TANTLRInterfaceArray); + + { Properties } + property CurrentChildIndex: Integer read GetCurrentChildIndex write SetCurrentChildIndex; + property AbsoluteNodeIndex: Integer read GetAbsoluteNodeIndex write SetAbsoluteNodeIndex; + property CurrentNode: IANTLRInterface read GetCurrentNode write SetCurrentNode; + property PreviousNode: IANTLRInterface read GetPreviousNode write SetPreviousNode; + ///<summary>Record state of the nodeStack</summary> + property NodeStackSize: Integer read GetNodeStackSize write SetNodeStackSize; + ///<summary>Record state of the indexStack</summary> + property IndexStackSize: integer read GetIndexStackSize write SetIndexStackSize; + property LookAhead: TANTLRInterfaceArray read GetLookAhead write SetLookAhead; + end; + + TTreeWalkState = class(TANTLRObject, ITreeWalkState) + strict private + FCurrentChildIndex: Integer; + FAbsoluteNodeIndex: Integer; + FCurrentNode: IANTLRInterface; + FPreviousNode: IANTLRInterface; + ///<summary>Record state of the nodeStack</summary> + FNodeStackSize: Integer; + ///<summary>Record state of the indexStack</summary> + FIndexStackSize: integer; + FLookAhead: TANTLRInterfaceArray; + protected + { ITreeWalkState } + function GetCurrentChildIndex: Integer; + procedure SetCurrentChildIndex(const Value: Integer); + function GetAbsoluteNodeIndex: Integer; + procedure SetAbsoluteNodeIndex(const Value: Integer); + function GetCurrentNode: IANTLRInterface; + procedure SetCurrentNode(const Value: IANTLRInterface); + function GetPreviousNode: IANTLRInterface; + procedure SetPreviousNode(const Value: IANTLRInterface); + function GetNodeStackSize: Integer; + procedure SetNodeStackSize(const Value: Integer); + function GetIndexStackSize: integer; + procedure SetIndexStackSize(const Value: integer); + function GetLookAhead: TANTLRInterfaceArray; + procedure SetLookAhead(const Value: TANTLRInterfaceArray); + end; + strict private + /// <summary>Reuse same DOWN, UP navigation nodes unless this is true</summary> + FUniqueNavigationNodes: Boolean; + + /// <summary>Pull nodes from which tree? </summary> + FRoot: IANTLRInterface; + + /// <summary>IF this tree (root) was created from a token stream, track it.</summary> + FTokens: ITokenStream; + + /// <summary>What tree adaptor was used to build these trees</summary> + FAdaptor: ITreeAdaptor; + + /// <summary> + /// As we walk down the nodes, we must track parent nodes so we know + /// where to go after walking the last child of a node. When visiting + /// a child, push current node and current index. + /// </summary> + FNodeStack: IStackList<IANTLRInterface>; + + /// <summary> + /// Track which child index you are visiting for each node we push. + /// TODO: pretty inefficient...use int[] when you have time + /// </summary> + FIndexStack: IStackList<Integer>; + + /// <summary>Which node are we currently visiting? </summary> + FCurrentNode: IANTLRInterface; + + /// <summary>Which node did we visit last? Used for LT(-1) calls. </summary> + FPreviousNode: IANTLRInterface; + + /// <summary> + /// Which child are we currently visiting? If -1 we have not visited + /// this node yet; next Consume() request will set currentIndex to 0. + /// </summary> + FCurrentChildIndex: Integer; + + /// <summary> + /// What node index did we just consume? i=0..n-1 for n node trees. + /// IntStream.next is hence 1 + this value. Size will be same. + /// </summary> + FAbsoluteNodeIndex: Integer; + + /// <summary> + /// Buffer tree node stream for use with LT(i). This list grows + /// to fit new lookahead depths, but Consume() wraps like a circular + /// buffer. + /// </summary> + FLookahead: TANTLRInterfaceArray; + + /// <summary>lookahead[head] is the first symbol of lookahead, LT(1). </summary> + FHead: Integer; + + /// <summary> + /// Add new lookahead at lookahead[tail]. tail wraps around at the + /// end of the lookahead buffer so tail could be less than head. + /// </summary> + FTail: Integer; + + /// <summary> + /// Calls to Mark() may be nested so we have to track a stack of them. + /// The marker is an index into this stack. This is a List<TreeWalkState>. + /// Indexed from 1..markDepth. A null is kept at index 0. It is created + /// upon first call to Mark(). + /// </summary> + FMarkers: IList<ITreeWalkState>; + + ///<summary> + /// tracks how deep Mark() calls are nested + /// </summary> + FMarkDepth: Integer; + + ///<summary> + /// Track the last Mark() call result value for use in Rewind(). + /// </summary> + FLastMarker: Integer; + + // navigation nodes + FDown: IANTLRInterface; + FUp: IANTLRInterface; + FEof: IANTLRInterface; + + FCurrentEnumerationNode: ITree; + protected + { IIntStream } + function GetSourceName: String; + + procedure Consume; virtual; + function LA(I: Integer): Integer; virtual; + function LAChar(I: Integer): Char; + function Mark: Integer; virtual; + function Index: Integer; virtual; + procedure Rewind(const Marker: Integer); overload; virtual; + procedure Rewind; overload; + procedure Release(const Marker: Integer); virtual; + procedure Seek(const Index: Integer); virtual; + function Size: Integer; virtual; + protected + { ITreeNodeStream } + function GetTreeSource: IANTLRInterface; virtual; + function GetTokenStream: ITokenStream; + function GetTreeAdaptor: ITreeAdaptor; + + function Get(const I: Integer): IANTLRInterface; virtual; + function LT(const K: Integer): IANTLRInterface; virtual; + function ToString(const Start, Stop: IANTLRInterface): String; reintroduce; overload; virtual; + procedure ReplaceChildren(const Parent: IANTLRInterface; const StartChildIndex, + StopChildIndex: Integer; const T: IANTLRInterface); + protected + { IUnBufferedTreeNodeStream } + function GetHasUniqueNavigationNodes: Boolean; + procedure SetHasUniqueNavigationNodes(const Value: Boolean); + function GetCurrent: IANTLRInterface; virtual; + procedure SetTokenStream(const Value: ITokenStream); + + procedure Reset; virtual; + + /// <summary> + /// Navigates to the next node found during a depth-first walk of root. + /// Also, adds these nodes and DOWN/UP imaginary nodes into the lokoahead + /// buffer as a side-effect. Normally side-effects are bad, but because + /// we can Emit many tokens for every MoveNext() call, it's pretty hard to + /// use a single return value for that. We must add these tokens to + /// the lookahead buffer. + /// + /// This routine does *not* cause the 'Current' property to ever return the + /// DOWN/UP nodes; those are only returned by the LT() method. + /// + /// Ugh. This mechanism is much more complicated than a recursive + /// solution, but it's the only way to provide nodes on-demand instead + /// of walking once completely through and buffering up the nodes. :( + /// </summary> + function MoveNext: Boolean; virtual; + strict protected + /// <summary>Make sure we have at least k symbols in lookahead buffer </summary> + procedure Fill(const K: Integer); virtual; + function LookaheadSize: Integer; + + /// <summary> + /// Add a node to the lookahead buffer. Add at lookahead[tail]. + /// If you tail+1 == head, then we must create a bigger buffer + /// and copy all the nodes over plus reset head, tail. After + /// this method, LT(1) will be lookahead[0]. + /// </summary> + procedure AddLookahead(const Node: IANTLRInterface); virtual; + + procedure ToStringWork(const P, Stop: IANTLRInterface; + const Buf: TStringBuilder); virtual; + + function HandleRootNode: IANTLRInterface; virtual; + function VisitChild(const Child: Integer): IANTLRInterface; virtual; + + /// <summary> + /// Walk upwards looking for a node with more children to walk. + /// </summary> + procedure WalkBackToMostRecentNodeWithUnvisitedChildren; virtual; + + /// <summary> + /// As we flatten the tree, we use UP, DOWN nodes to represent + /// the tree structure. When debugging we need unique nodes + /// so instantiate new ones when uniqueNavigationNodes is true. + /// </summary> + procedure AddNavigationNode(const TokenType: Integer); virtual; + public + constructor Create; overload; + constructor Create(const ATree: IANTLRInterface); overload; + constructor Create(const AAdaptor: ITreeAdaptor; const ATree: IANTLRInterface); overload; + + function ToString: String; overload; override; + end; + +{ These functions return X or, if X = nil, an empty default instance } +function Def(const X: ICommonTree): ICommonTree; overload; + +implementation + +uses + Math; + +{ TTree } + +class procedure TTree.Initialize; +begin + FINVALID_NODE := TCommonTree.Create(TToken.INVALID_TOKEN); +end; + +{ TBaseTree } + +constructor TBaseTree.Create; +begin + inherited; +end; + +procedure TBaseTree.AddChild(const T: ITree); +var + ChildTree: IBaseTree; + C: IBaseTree; +begin + if (T = nil) then + Exit; + + ChildTree := T as IBaseTree; + if ChildTree.IsNil then // t is an empty node possibly with children + begin + if Assigned(FChildren) and SameObj(FChildren, ChildTree.Children) then + raise EInvalidOperation.Create('Attempt to add child list to itself'); + + // just add all of childTree's children to this + if Assigned(ChildTree.Children) then + begin + if Assigned(FChildren) then // must copy, this has children already + begin + for C in ChildTree.Children do + begin + FChildren.Add(C); + // handle double-link stuff for each child of nil root + C.Parent := Self; + C.ChildIndex := FChildren.Count - 1; + end; + end + else begin + // no children for this but t has children; just set pointer + // call general freshener routine + FChildren := ChildTree.Children; + FreshenParentAndChildIndexes; + end; + end; + end + else + begin + // child is not nil (don't care about children) + if (FChildren = nil) then + begin + FChildren := CreateChildrenList; // create children list on demand + end; + FChildren.Add(ChildTree); + ChildTree.Parent := Self; + ChildTree.ChildIndex := FChildren.Count - 1; + end; +end; + +procedure TBaseTree.AddChildren(const Kids: IList<IBaseTree>); +var + T: IBaseTree; +begin + for T in Kids do + AddChild(T); +end; + +constructor TBaseTree.Create(const ANode: ITree); +begin + Create; + // No default implementation +end; + +function TBaseTree.CreateChildrenList: IList<IBaseTree>; +begin + Result := TList<IBaseTree>.Create; +end; + +function TBaseTree.DeleteChild(const I: Integer): IANTLRInterface; +begin + if (FChildren = nil) then + Result := nil + else + begin + Result := FChildren[I]; + FChildren.Delete(I); + // walk rest and decrement their child indexes + FreshenParentAndChildIndexes(I); + end; +end; + +procedure TBaseTree.FreshenParentAndChildIndexes(const Offset: Integer); +var + N, C: Integer; + Child: ITree; +begin + N := GetChildCount; + for C := Offset to N - 1 do + begin + Child := GetChild(C); + Child.ChildIndex := C; + Child.Parent := Self; + end; +end; + +procedure TBaseTree.FreshenParentAndChildIndexes; +begin + FreshenParentAndChildIndexes(0); +end; + +function TBaseTree.GetCharPositionInLine: Integer; +begin + Result := 0; +end; + +function TBaseTree.GetChild(const I: Integer): ITree; +begin + if (FChildren = nil) or (I >= FChildren.Count) then + Result := nil + else + Result := FChildren[I]; +end; + +function TBaseTree.GetChildCount: Integer; +begin + if Assigned(FChildren) then + Result := FChildren.Count + else + Result := 0; +end; + +function TBaseTree.GetChildIndex: Integer; +begin + // No default implementation + Result := 0; +end; + +function TBaseTree.GetChildren: IList<IBaseTree>; +begin + Result := FChildren; +end; + +function TBaseTree.GetIsNil: Boolean; +begin + Result := False; +end; + +function TBaseTree.GetLine: Integer; +begin + Result := 0; +end; + +function TBaseTree.GetParent: ITree; +begin + // No default implementation + Result := nil; +end; + +procedure TBaseTree.ReplaceChildren(const StartChildIndex, + StopChildIndex: Integer; const T: IANTLRInterface); +var + ReplacingHowMany, ReplacingWithHowMany, NumNewChildren, Delta, I, J: Integer; + IndexToDelete, C, ReplacedSoFar: Integer; + NewTree, Killed: IBaseTree; + NewChildren: IList<IBaseTree>; + Child: IBaseTree; +begin + if (FChildren = nil) then + raise EArgumentException.Create('indexes invalid; no children in list'); + ReplacingHowMany := StopChildIndex - StartChildIndex + 1; + NewTree := T as IBaseTree; + + // normalize to a list of children to add: newChildren + if (NewTree.IsNil) then + NewChildren := NewTree.Children + else + begin + NewChildren := TList<IBaseTree>.Create; + NewChildren.Add(NewTree); + end; + + ReplacingWithHowMany := NewChildren.Count; + NumNewChildren := NewChildren.Count; + Delta := ReplacingHowMany - ReplacingWithHowMany; + + // if same number of nodes, do direct replace + if (Delta = 0) then + begin + J := 0; // index into new children + for I := StartChildIndex to StopChildIndex do + begin + Child := NewChildren[J]; + FChildren[I] := Child; + Child.Parent := Self; + Child.ChildIndex := I; + Inc(J); + end; + end + else + if (Delta > 0) then + begin + // fewer new nodes than there were + // set children and then delete extra + for J := 0 to NumNewChildren - 1 do + FChildren[StartChildIndex + J] := NewChildren[J]; + IndexToDelete := StartChildIndex + NumNewChildren; + for C := IndexToDelete to StopChildIndex do + begin + // delete same index, shifting everybody down each time + Killed := FChildren[IndexToDelete]; + FChildren.Delete(IndexToDelete); + end; + FreshenParentAndChildIndexes(StartChildIndex); + end + else + begin + // more new nodes than were there before + // fill in as many children as we can (replacingHowMany) w/o moving data + ReplacedSoFar := 0; + while (ReplacedSoFar < ReplacingHowMany) do + begin + FChildren[StartChildIndex + ReplacedSoFar] := NewChildren[ReplacedSoFar]; + Inc(ReplacedSoFar); + end; + + // replacedSoFar has correct index for children to add + while (ReplacedSoFar < ReplacingWithHowMany) do + begin + FChildren.Insert(StartChildIndex + ReplacedSoFar,NewChildren[ReplacedSoFar]); + Inc(ReplacedSoFar); + end; + + FreshenParentAndChildIndexes(StartChildIndex); + end; +end; + +procedure TBaseTree.SanityCheckParentAndChildIndexes; +begin + SanityCheckParentAndChildIndexes(nil, -1); +end; + +procedure TBaseTree.SanityCheckParentAndChildIndexes(const Parent: ITree; + const I: Integer); +var + N, C: Integer; + Child: ICommonTree; +begin + if not SameObj(Parent, GetParent) then + raise EArgumentException.Create('parents don''t match; expected ' + + Parent.ToString + ' found ' + GetParent.ToString); + + if (I <> GetChildIndex) then + raise EArgumentException.Create('child indexes don''t match; expected ' + + IntToStr(I) + ' found ' + IntToStr(GetChildIndex)); + + N := GetChildCount; + for C := 0 to N - 1 do + begin + Child := GetChild(C) as ICommonTree; + Child.SanityCheckParentAndChildIndexes(Self, C); + end; +end; + +procedure TBaseTree.SetChild(const I: Integer; const T: ITree); +begin + if (T = nil) then + Exit; + + if T.IsNil then + raise EArgumentException.Create('Cannot set single child to a list'); + + if (FChildren = nil) then + begin + FChildren := CreateChildrenList; + end; + + FChildren[I] := T as IBaseTree; + T.Parent := Self; + T.ChildIndex := I; +end; + +procedure TBaseTree.SetChildIndex(const Value: Integer); +begin + // No default implementation +end; + +procedure TBaseTree.SetParent(const Value: ITree); +begin + // No default implementation +end; + +function TBaseTree.ToStringTree: String; +var + Buf: TStringBuilder; + I: Integer; + T: IBaseTree; +begin + if (FChildren = nil) or (FChildren.Count = 0) then + Result := ToString + else + begin + Buf := TStringBuilder.Create; + try + if (not GetIsNil) then + begin + Buf.Append('('); + Buf.Append(ToString); + Buf.Append(' '); + end; + + for I := 0 to FChildren.Count - 1 do + begin + T := FChildren[I]; + if (I > 0) then + Buf.Append(' '); + Buf.Append(T.ToStringTree); + end; + + if (not GetIsNil) then + Buf.Append(')'); + + Result := Buf.ToString; + finally + Buf.Free; + end; + end; +end; + +{ TCommonTree } + +constructor TCommonTree.Create; +begin + inherited; + FStartIndex := -1; + FStopIndex := -1; + FChildIndex := -1; +end; + +constructor TCommonTree.Create(const ANode: ICommonTree); +begin + inherited Create(ANode); + FToken := ANode.Token; + FStartIndex := ANode.StartIndex; + FStopIndex := ANode.StopIndex; + FChildIndex := -1; +end; + +constructor TCommonTree.Create(const AToken: IToken); +begin + Create; + FToken := AToken; +end; + +function TCommonTree.DupNode: ITree; +begin + Result := TCommonTree.Create(Self) as ICommonTree; +end; + +function TCommonTree.GetCharPositionInLine: Integer; +begin + if (FToken = nil) or (FToken.CharPositionInLine = -1) then + begin + if (GetChildCount > 0) then + Result := GetChild(0).CharPositionInLine + else + Result := 0; + end + else + Result := FToken.CharPositionInLine; +end; + +function TCommonTree.GetChildIndex: Integer; +begin + Result := FChildIndex; +end; + +function TCommonTree.GetIsNil: Boolean; +begin + Result := (FToken = nil); +end; + +function TCommonTree.GetLine: Integer; +begin + if (FToken = nil) or (FToken.Line = 0) then + begin + if (GetChildCount > 0) then + Result := GetChild(0).Line + else + Result := 0 + end + else + Result := FToken.Line; +end; + +function TCommonTree.GetParent: ITree; +begin + Result := ITree(FParent); +end; + +function TCommonTree.GetStartIndex: Integer; +begin + Result := FStartIndex; +end; + +function TCommonTree.GetStopIndex: Integer; +begin + Result := FStopIndex; +end; + +function TCommonTree.GetText: String; +begin + if (FToken = nil) then + Result := '' + else + Result := FToken.Text; +end; + +function TCommonTree.GetToken: IToken; +begin + Result := FToken; +end; + +function TCommonTree.GetTokenStartIndex: Integer; +begin + if (FStartIndex = -1) and (FToken <> nil) then + Result := FToken.TokenIndex + else + Result := FStartIndex; +end; + +function TCommonTree.GetTokenStopIndex: Integer; +begin + if (FStopIndex = -1) and (FToken <> nil) then + Result := FToken.TokenIndex + else + Result := FStopIndex; +end; + +function TCommonTree.GetTokenType: Integer; +begin + if (FToken = nil) then + Result := TToken.INVALID_TOKEN_TYPE + else + Result := FToken.TokenType; +end; + +procedure TCommonTree.SetChildIndex(const Value: Integer); +begin + FChildIndex := Value; +end; + +procedure TCommonTree.SetParent(const Value: ITree); +begin + FParent := Pointer(Value as ICommonTree); +end; + +procedure TCommonTree.SetStartIndex(const Value: Integer); +begin + FStartIndex := Value; +end; + +procedure TCommonTree.SetStopIndex(const Value: Integer); +begin + FStopIndex := Value; +end; + +procedure TCommonTree.SetTokenStartIndex(const Value: Integer); +begin + FStartIndex := Value; +end; + +procedure TCommonTree.SetTokenStopIndex(const Value: Integer); +begin + FStopIndex := Value; +end; + +function TCommonTree.ToString: String; +begin + if (GetIsNil) then + Result := 'nil' + else + if (GetTokenType = TToken.INVALID_TOKEN_TYPE) then + Result := '<errornode>' + else + if (FToken = nil) then + Result := '' + else + Result := FToken.Text; +end; + +{ TCommonErrorNode } + +constructor TCommonErrorNode.Create(const AInput: ITokenStream; const AStart, + AStop: IToken; const AException: ERecognitionException); +begin + inherited Create; + if (AStop = nil) or ((AStop.TokenIndex < AStart.TokenIndex) + and (AStop.TokenType <> TToken.EOF)) + then + // sometimes resync does not consume a token (when LT(1) is + // in follow set). So, stop will be 1 to left to start. adjust. + // Also handle case where start is the first token and no token + // is consumed during recovery; LT(-1) will return null. + FStop := AStart + else + FStop := AStop; + FInput := AInput; + FStart := AStart; + FTrappedException := AException; +end; + +function TCommonErrorNode.GetIsNil: Boolean; +begin + Result := False; +end; + +function TCommonErrorNode.GetText: String; +var + I, J: Integer; +begin + I := FStart.TokenIndex; + if (FStop.TokenType = TToken.EOF) then + J := (FInput as ITokenStream).Size + else + J := FStop.TokenIndex; + Result := (FInput as ITokenStream).ToString(I, J); +end; + +function TCommonErrorNode.GetTokenType: Integer; +begin + Result := TToken.INVALID_TOKEN_TYPE; +end; + +function TCommonErrorNode.ToString: String; +begin + if (FTrappedException is EMissingTokenException) then + Result := '<missing type: ' + + IntToStr(EMissingTokenException(FTrappedException).MissingType) + '>' + else + if (FTrappedException is EUnwantedTokenException) then + Result := '<extraneous: ' + + EUnwantedTokenException(FTrappedException).UnexpectedToken.ToString + + ', resync=' + GetText + '>' + else + if (FTrappedException is EMismatchedTokenException) then + Result := '<mismatched token: ' + FTrappedException.Token.ToString + + ', resync=' + GetText + '>' + else + if (FTrappedException is ENoViableAltException) then + Result := '<unexpected: ' + FTrappedException.Token.ToString + + ', resync=' + GetText + '>' + else + Result := '<error: ' + GetText + '>'; +end; + +{ TBaseTreeAdaptor } + +procedure TBaseTreeAdaptor.AddChild(const T, Child: IANTLRInterface); +begin + if Assigned(T) and Assigned(Child) then + (T as ITree).AddChild(Child as ITree); +end; + +function TBaseTreeAdaptor.BecomeRoot(const NewRoot, + OldRoot: IANTLRInterface): IANTLRInterface; +var + NewRootTree, OldRootTree: ITree; + NC: Integer; +begin + NewRootTree := NewRoot as ITree; + OldRootTree := OldRoot as ITree; + if (OldRoot = nil) then + Result := NewRoot + else + begin + // handle ^(nil real-node) + if (NewRootTree.IsNil) then + begin + NC := NewRootTree.ChildCount; + if (NC = 1) then + NewRootTree := NewRootTree.GetChild(0) + else + if (NC > 1) then + raise Exception.Create('more than one node as root'); + end; + // add oldRoot to newRoot; AddChild takes care of case where oldRoot + // is a flat list (i.e., nil-rooted tree). All children of oldRoot + // are added to newRoot. + NewRootTree.AddChild(OldRootTree); + Result := NewRootTree; + end; +end; + +function TBaseTreeAdaptor.BecomeRoot(const NewRoot: IToken; + const OldRoot: IANTLRInterface): IANTLRInterface; +begin + Result := BecomeRoot(CreateNode(NewRoot), OldRoot); +end; + +function TBaseTreeAdaptor.CreateNode(const TokenType: Integer; + const FromToken: IToken): IANTLRInterface; +var + Token: IToken; +begin + Token := CreateToken(FromToken); + Token.TokenType := TokenType; + Result := CreateNode(Token); +end; + +function TBaseTreeAdaptor.CreateNode(const TokenType: Integer; + const Text: String): IANTLRInterface; +var + Token: IToken; +begin + Token := CreateToken(TokenType, Text); + Result := CreateNode(Token); +end; + +function TBaseTreeAdaptor.CreateNode(const TokenType: Integer; + const FromToken: IToken; const Text: String): IANTLRInterface; +var + Token: IToken; +begin + Token := CreateToken(FromToken); + Token.TokenType := TokenType; + Token.Text := Text; + Result := CreateNode(Token); +end; + +constructor TBaseTreeAdaptor.Create; +begin + inherited Create; + FUniqueNodeID := 1; +end; + +function TBaseTreeAdaptor.DeleteChild(const T: IANTLRInterface; + const I: Integer): IANTLRInterface; +begin + Result := (T as ITree).DeleteChild(I); +end; + +function TBaseTreeAdaptor.DupTree(const T, + Parent: IANTLRInterface): IANTLRInterface; +var + I, N: Integer; + Child, NewSubTree: IANTLRInterface; +begin + if (T = nil) then + Result := nil + else + begin + Result := DupNode(T); + // ensure new subtree root has parent/child index set + SetChildIdex(Result, GetChildIndex(T)); + SetParent(Result, Parent); + N := GetChildCount(T); + for I := 0 to N - 1 do + begin + Child := GetChild(T, I); + NewSubTree := DupTree(Child, T); + AddChild(Result, NewSubTree); + end; + end; +end; + +function TBaseTreeAdaptor.DupTree(const Tree: IANTLRInterface): IANTLRInterface; +begin + Result := DupTree(Tree, nil); +end; + +function TBaseTreeAdaptor.ErrorNode(const Input: ITokenStream; const Start, + Stop: IToken; const E: ERecognitionException): IANTLRInterface; +begin + Result := TCommonErrorNode.Create(Input, Start, Stop, E); +end; + +function TBaseTreeAdaptor.GetChild(const T: IANTLRInterface; + const I: Integer): IANTLRInterface; +begin + Result := (T as ITree).GetChild(I); +end; + +function TBaseTreeAdaptor.GetChildCount(const T: IANTLRInterface): Integer; +begin + Result := (T as ITree).ChildCount; +end; + +function TBaseTreeAdaptor.GetNilNode: IANTLRInterface; +begin + Result := CreateNode(nil); +end; + +function TBaseTreeAdaptor.GetNodeText(const T: IANTLRInterface): String; +begin + Result := (T as ITree).Text; +end; + +function TBaseTreeAdaptor.GetNodeType(const T: IANTLRInterface): Integer; +begin + Result := 0; +end; + +function TBaseTreeAdaptor.GetUniqueID(const Node: IANTLRInterface): Integer; +begin + if (FTreeToUniqueIDMap = nil) then + FTreeToUniqueIDMap := TDictionary<IANTLRInterface, Integer>.Create; + if (not FTreeToUniqueIDMap.TryGetValue(Node, Result)) then + begin + Result := FUniqueNodeID; + FTreeToUniqueIDMap[Node] := Result; + Inc(FUniqueNodeID); + end; +end; + +function TBaseTreeAdaptor.IsNil(const Tree: IANTLRInterface): Boolean; +begin + Result := (Tree as ITree).IsNil; +end; + +function TBaseTreeAdaptor.RulePostProcessing( + const Root: IANTLRInterface): IANTLRInterface; +var + R: ITree; +begin + R := Root as ITree; + if Assigned(R) and (R.IsNil) then + begin + if (R.ChildCount = 0) then + R := nil + else + if (R.ChildCount = 1) then + begin + R := R.GetChild(0); + // whoever invokes rule will set parent and child index + R.Parent := nil; + R.ChildIndex := -1; + end; + end; + Result := R; +end; + +procedure TBaseTreeAdaptor.SetChild(const T: IANTLRInterface; const I: Integer; + const Child: IANTLRInterface); +begin + (T as ITree).SetChild(I, Child as ITree); +end; + +procedure TBaseTreeAdaptor.SetNodeText(const T: IANTLRInterface; + const Text: String); +begin + raise EInvalidOperation.Create('don''t know enough about Tree node'); +end; + +procedure TBaseTreeAdaptor.SetNodeType(const T: IANTLRInterface; + const NodeType: Integer); +begin + raise EInvalidOperation.Create('don''t know enough about Tree node'); +end; + +{ TCommonTreeAdaptor } + +function TCommonTreeAdaptor.CreateNode(const Payload: IToken): IANTLRInterface; +begin + Result := TCommonTree.Create(Payload); +end; + +function TCommonTreeAdaptor.CreateToken(const TokenType: Integer; + const Text: String): IToken; +begin + Result := TCommonToken.Create(TokenType, Text); +end; + +function TCommonTreeAdaptor.CreateToken(const FromToken: IToken): IToken; +begin + Result := TCommonToken.Create(FromToken); +end; + +function TCommonTreeAdaptor.DupNode( + const TreeNode: IANTLRInterface): IANTLRInterface; +begin + if (TreeNode = nil) then + Result := nil + else + Result := (TreeNode as ITree).DupNode; +end; + +function TCommonTreeAdaptor.GetChild(const T: IANTLRInterface; + const I: Integer): IANTLRInterface; +begin + if (T = nil) then + Result := nil + else + Result := (T as ITree).GetChild(I); +end; + +function TCommonTreeAdaptor.GetChildCount(const T: IANTLRInterface): Integer; +begin + if (T = nil) then + Result := 0 + else + Result := (T as ITree).ChildCount; +end; + +function TCommonTreeAdaptor.GetChildIndex(const T: IANTLRInterface): Integer; +begin + Result := (T as ITree).ChildIndex; +end; + +function TCommonTreeAdaptor.GetNodeText(const T: IANTLRInterface): String; +begin + if (T = nil) then + Result := '' + else + Result := (T as ITree).Text; +end; + +function TCommonTreeAdaptor.GetNodeType(const T: IANTLRInterface): Integer; +begin + if (T = nil) then + Result := TToken.INVALID_TOKEN_TYPE + else + Result := (T as ITree).TokenType; +end; + +function TCommonTreeAdaptor.GetParent( + const T: IANTLRInterface): IANTLRInterface; +begin + Result := (T as ITree).Parent; +end; + +function TCommonTreeAdaptor.GetToken(const TreeNode: IANTLRInterface): IToken; +var + CommonTree: ICommonTree; +begin + if Supports(TreeNode, ICommonTree, CommonTree) then + Result := CommonTree.Token + else + Result := nil; // no idea what to do +end; + +function TCommonTreeAdaptor.GetTokenStartIndex( + const T: IANTLRInterface): Integer; +begin + if (T = nil) then + Result := -1 + else + Result := (T as ITree).TokenStartIndex; +end; + +function TCommonTreeAdaptor.GetTokenStopIndex( + const T: IANTLRInterface): Integer; +begin + if (T = nil) then + Result := -1 + else + Result := (T as ITree).TokenStopIndex; +end; + +procedure TCommonTreeAdaptor.ReplaceChildren(const Parent: IANTLRInterface; + const StartChildIndex, StopChildIndex: Integer; const T: IANTLRInterface); +begin + if Assigned(Parent) then + (Parent as ITree).ReplaceChildren(StartChildIndex, StopChildIndex, T); +end; + +procedure TCommonTreeAdaptor.SetChildIdex(const T: IANTLRInterface; + const Index: Integer); +begin + (T as ITree).ChildIndex := Index; +end; + +procedure TCommonTreeAdaptor.SetParent(const T, Parent: IANTLRInterface); +begin + (T as ITree).Parent := (Parent as ITree); +end; + +procedure TCommonTreeAdaptor.SetTokenBoundaries(const T: IANTLRInterface; + const StartToken, StopToken: IToken); +var + Start, Stop: Integer; +begin + if Assigned(T) then + begin + if Assigned(StartToken) then + Start := StartToken.TokenIndex + else + Start := 0; + + if Assigned(StopToken) then + Stop := StopToken.TokenIndex + else + Stop := 0; + + (T as ITree).TokenStartIndex := Start; + (T as ITree).TokenStopIndex := Stop; + end; +end; + +{ TCommonTreeNodeStream } + +procedure TCommonTreeNodeStream.AddNavigationNode(const TokenType: Integer); +var + NavNode: IANTLRInterface; +begin + if (TokenType = TToken.DOWN) then + begin + if (GetHasUniqueNavigationNodes) then + NavNode := FAdaptor.CreateNode(TToken.DOWN, 'DOWN') + else + NavNode := FDown; + end + else + begin + if (GetHasUniqueNavigationNodes) then + NavNode := FAdaptor.CreateNode(TToken.UP, 'UP') + else + NavNode := FUp; + end; + FNodes.Add(NavNode); +end; + +procedure TCommonTreeNodeStream.Consume; +begin + if (FP = -1) then + FillBuffer; + Inc(FP); +end; + +constructor TCommonTreeNodeStream.Create; +begin + inherited; + FP := -1; +end; + +constructor TCommonTreeNodeStream.Create(const ATree: IANTLRInterface); +begin + Create(TCommonTreeAdaptor.Create, ATree); +end; + +constructor TCommonTreeNodeStream.Create(const AAdaptor: ITreeAdaptor; + const ATree: IANTLRInterface); +begin + Create(AAdaptor, ATree, DEFAULT_INITIAL_BUFFER_SIZE); +end; + +constructor TCommonTreeNodeStream.Create(const AAdaptor: ITreeAdaptor; + const ATree: IANTLRInterface; const AInitialBufferSize: Integer); +begin + Create; + FRoot := ATree; + FAdaptor := AAdaptor; + FNodes := TList<IANTLRInterface>.Create; + FNodes.Capacity := AInitialBufferSize; + FDown := FAdaptor.CreateNode(TToken.DOWN, 'DOWN'); + FUp := FAdaptor.CreateNode(TToken.UP, 'UP'); + FEof := FAdaptor.CreateNode(TToken.EOF, 'EOF'); +end; + +procedure TCommonTreeNodeStream.FillBuffer; +begin + FillBuffer(FRoot); + FP := 0; // buffer of nodes intialized now +end; + +procedure TCommonTreeNodeStream.FillBuffer(const T: IANTLRInterface); +var + IsNil: Boolean; + C, N: Integer; +begin + IsNil := FAdaptor.IsNil(T); + if (not IsNil) then + FNodes.Add(T); // add this node + + // add DOWN node if t has children + N := FAdaptor.GetChildCount(T); + if (not IsNil) and (N > 0) then + AddNavigationNode(TToken.DOWN); + + // and now add all its children + for C := 0 to N - 1 do + FillBuffer(FAdaptor.GetChild(T, C)); + + // add UP node if t has children + if (not IsNil) and (N > 0) then + AddNavigationNode(TToken.UP); +end; + +function TCommonTreeNodeStream.Get(const I: Integer): IANTLRInterface; +begin + if (FP = -1) then + FillBuffer; + Result := FNodes[I]; +end; + +function TCommonTreeNodeStream.GetCurrentSymbol: IANTLRInterface; +begin + Result := LT(1); +end; + +function TCommonTreeNodeStream.GetHasUniqueNavigationNodes: Boolean; +begin + Result := FUniqueNavigationNodes; +end; + +function TCommonTreeNodeStream.GetNodeIndex( + const Node: IANTLRInterface): Integer; +var + T: IANTLRInterface; +begin + if (FP = -1) then + FillBuffer; + for Result := 0 to FNodes.Count - 1 do + begin + T := FNodes[Result]; + if (T = Node) then + Exit; + end; + Result := -1; +end; + +function TCommonTreeNodeStream.GetSourceName: String; +begin + Result := GetTokenStream.SourceName; +end; + +function TCommonTreeNodeStream.GetTokenStream: ITokenStream; +begin + Result := FTokens; +end; + +function TCommonTreeNodeStream.GetTreeAdaptor: ITreeAdaptor; +begin + Result := FAdaptor; +end; + +function TCommonTreeNodeStream.GetTreeSource: IANTLRInterface; +begin + Result := FRoot; +end; + +function TCommonTreeNodeStream.Index: Integer; +begin + Result := FP; +end; + +function TCommonTreeNodeStream.LA(I: Integer): Integer; +begin + Result := FAdaptor.GetNodeType(LT(I)); +end; + +function TCommonTreeNodeStream.LAChar(I: Integer): Char; +begin + Result := Char(LA(I)); +end; + +function TCommonTreeNodeStream.LB(const K: Integer): IANTLRInterface; +begin + if (K = 0) then + Result := nil + else + if ((FP - K) < 0) then + Result := nil + else + Result := FNodes[FP - K]; +end; + +function TCommonTreeNodeStream.LT(const K: Integer): IANTLRInterface; +begin + if (FP = -1) then + FillBuffer; + if (K = 0) then + Result := nil + else + if (K < 0) then + Result := LB(-K) + else + if ((FP + K - 1) >= FNodes.Count) then + Result := FEof + else + Result := FNodes[FP + K - 1]; +end; + +function TCommonTreeNodeStream.Mark: Integer; +begin + if (FP = -1) then + FillBuffer; + FLastMarker := Index; + Result := FLastMarker; +end; + +function TCommonTreeNodeStream.Pop: Integer; +begin + Result := FCalls.Pop; + Seek(Result); +end; + +procedure TCommonTreeNodeStream.Push(const Index: Integer); +begin + if (FCalls = nil) then + FCalls := TStackList<Integer>.Create; + FCalls.Push(FP); // save current index + Seek(Index); +end; + +procedure TCommonTreeNodeStream.Release(const Marker: Integer); +begin + // no resources to release +end; + +procedure TCommonTreeNodeStream.ReplaceChildren(const Parent: IANTLRInterface; + const StartChildIndex, StopChildIndex: Integer; const T: IANTLRInterface); +begin + if Assigned(Parent) then + FAdaptor.ReplaceChildren(Parent, StartChildIndex, StopChildIndex, T); +end; + +procedure TCommonTreeNodeStream.Reset; +begin + FP := -1; + FLastMarker := 0; + if Assigned(FCalls) then + FCalls.Clear; +end; + +procedure TCommonTreeNodeStream.Rewind(const Marker: Integer); +begin + Seek(Marker); +end; + +procedure TCommonTreeNodeStream.Rewind; +begin + Seek(FLastMarker); +end; + +procedure TCommonTreeNodeStream.Seek(const Index: Integer); +begin + if (FP = -1) then + FillBuffer; + FP := Index; +end; + +procedure TCommonTreeNodeStream.SetHasUniqueNavigationNodes( + const Value: Boolean); +begin + FUniqueNavigationNodes := Value; +end; + +procedure TCommonTreeNodeStream.SetTokenStream(const Value: ITokenStream); +begin + FTokens := Value; +end; + +procedure TCommonTreeNodeStream.SetTreeAdaptor(const Value: ITreeAdaptor); +begin + FAdaptor := Value; +end; + +function TCommonTreeNodeStream.Size: Integer; +begin + if (FP = -1) then + FillBuffer; + Result := FNodes.Count; +end; + +function TCommonTreeNodeStream.ToString(const Start, + Stop: IANTLRInterface): String; +var + CommonTree: ICommonTree; + I, BeginTokenIndex, EndTokenIndex: Integer; + T: IANTLRInterface; + Buf: TStringBuilder; + Text: String; +begin + WriteLn('ToString'); + if (Start = nil) or (Stop = nil) then + Exit; + if (FP = -1) then + FillBuffer; + + if Supports(Start, ICommonTree, CommonTree) then + Write('ToString: ' + CommonTree.Token.ToString + ', ') + else + WriteLn(Start.ToString); + + if Supports(Stop, ICommonTree, CommonTree) then + WriteLn(CommonTree.Token.ToString) + else + WriteLn(Stop.ToString); + + // if we have the token stream, use that to dump text in order + if Assigned(FTokens) then + begin + BeginTokenIndex := FAdaptor.GetTokenStartIndex(Start); + EndTokenIndex := FAdaptor.GetTokenStartIndex(Stop); + // if it's a tree, use start/stop index from start node + // else use token range from start/stop nodes + if (FAdaptor.GetNodeType(Stop) = TToken.UP) then + EndTokenIndex := FAdaptor.GetTokenStopIndex(Start) + else + if (FAdaptor.GetNodeType(Stop) = TToken.EOF) then + EndTokenIndex := Size - 2; // don't use EOF + Result := FTokens.ToString(BeginTokenIndex, EndTokenIndex); + Exit; + end; + + // walk nodes looking for start + T := nil; + I := 0; + while (I < FNodes.Count) do + begin + T := FNodes[I]; + if SameObj(T, Start) then + Break; + Inc(I); + end; + + // now walk until we see stop, filling string buffer with text + Buf := TStringBuilder.Create; + try + T := FNodes[I]; + while (T <> Stop) do + begin + Text := FAdaptor.GetNodeText(T); + if (Text = '') then + Text := ' ' + IntToStr(FAdaptor.GetNodeType(T)); + Buf.Append(Text); + Inc(I); + T := FNodes[I]; + end; + + // include stop node too + Text := FAdaptor.GetNodeText(Stop); + if (Text = '') then + Text := ' ' + IntToStr(FAdaptor.GetNodeType(Stop)); + Buf.Append(Text); + Result := Buf.ToString; + finally + Buf.Free; + end; +end; + +function TCommonTreeNodeStream.ToString: String; +var + Buf: TStringBuilder; + T: IANTLRInterface; +begin + if (FP = -1) then + FillBuffer; + Buf := TStringBuilder.Create; + try + for T in FNodes do + begin + Buf.Append(' '); + Buf.Append(FAdaptor.GetNodeType(T)); + end; + Result := Buf.ToString; + finally + Buf.Free; + end; +end; + +function TCommonTreeNodeStream.ToTokenString(const Start, + Stop: Integer): String; +var + I: Integer; + T: IANTLRInterface; + Buf: TStringBuilder; +begin + if (FP = -1) then + FillBuffer; + Buf := TStringBuilder.Create; + try + for I := Stop to Min(FNodes.Count - 1, Stop) do + begin + T := FNodes[I]; + Buf.Append(' '); + Buf.Append(FAdaptor.GetToken(T).ToString); + end; + + Result := Buf.ToString; + finally + Buf.Free; + end; +end; + +{ TParseTree } + +constructor TParseTree.Create(const ALabel: IANTLRInterface); +begin + inherited Create; + FPayload := ALabel; +end; + +function TParseTree.DupNode: ITree; +begin + Result := nil; +end; + +function TParseTree.GetText: String; +begin + Result := ToString; +end; + +function TParseTree.GetTokenStartIndex: Integer; +begin + Result := 0; +end; + +function TParseTree.GetTokenStopIndex: Integer; +begin + Result := 0; +end; + +function TParseTree.GetTokenType: Integer; +begin + Result := 0; +end; + +procedure TParseTree.SetTokenStartIndex(const Value: Integer); +begin + // No implementation +end; + +procedure TParseTree.SetTokenStopIndex(const Value: Integer); +begin + // No implementation +end; + +function TParseTree.ToInputString: String; +var + Buf: TStringBuilder; +begin + Buf := TStringBuilder.Create; + try + _ToStringLeaves(Buf); + Result := Buf.ToString; + finally + Buf.Free; + end; +end; + +function TParseTree.ToString: String; +var + T: IToken; +begin + if Supports(FPayload, IToken, T) then + begin + if (T.TokenType = TToken.EOF) then + Result := '<EOF>' + else + Result := T.Text; + end + else + Result := FPayload.ToString; +end; + +function TParseTree.ToStringWithHiddenTokens: String; +var + Buf: TStringBuilder; + Hidden: IToken; + NodeText: String; +begin + Buf := TStringBuilder.Create; + try + if Assigned(FHiddenTokens) then + begin + for Hidden in FHiddenTokens do + Buf.Append(Hidden.Text); + end; + NodeText := ToString; + if (NodeText <> '<EOF>') then + Buf.Append(NodeText); + Result := Buf.ToString; + finally + Buf.Free; + end; +end; + +procedure TParseTree._ToStringLeaves(const Buf: TStringBuilder); +var + T: IBaseTree; +begin + if Supports(FPayload, IToken) then + begin + // leaf node token? + Buf.Append(ToStringWithHiddenTokens); + Exit; + end; + if Assigned(FChildren) then + for T in FChildren do + (T as IParseTree)._ToStringLeaves(Buf); +end; + +{ ERewriteCardinalityException } + +constructor ERewriteCardinalityException.Create( + const AElementDescription: String); +begin + inherited Create(AElementDescription); + FElementDescription := AElementDescription; +end; + +{ TRewriteRuleElementStream } + +procedure TRewriteRuleElementStream.Add(const El: IANTLRInterface); +begin + if (El = nil) then + Exit; + if Assigned(FElements) then + // if in list, just add + FElements.Add(El) + else + if (FSingleElement = nil) then + // no elements yet, track w/o list + FSingleElement := El + else + begin + // adding 2nd element, move to list + FElements := TList<IANTLRInterface>.Create; + FElements.Capacity := 5; + FElements.Add(FSingleElement); + FSingleElement := nil; + FElements.Add(El); + end; +end; + +constructor TRewriteRuleElementStream.Create(const AAdaptor: ITreeAdaptor; + const AElementDescription: String); +begin + inherited Create; + FAdaptor := AAdaptor; + FElementDescription := AElementDescription; +end; + +constructor TRewriteRuleElementStream.Create(const AAdaptor: ITreeAdaptor; + const AElementDescription: String; const AOneElement: IANTLRInterface); +begin + Create(AAdaptor, AElementDescription); + Add(AOneElement); +end; + +constructor TRewriteRuleElementStream.Create(const AAdaptor: ITreeAdaptor; + const AElementDescription: String; const AElements: IList<IANTLRInterface>); +begin + Create(AAdaptor, AElementDescription); + FElements := AElements; +end; + +function TRewriteRuleElementStream.GetDescription: String; +begin + Result := FElementDescription; +end; + +function TRewriteRuleElementStream.HasNext: Boolean; +begin + Result := ((FSingleElement <> nil) and (FCursor < 1)) + or ((FElements <> nil) and (FCursor < FElements.Count)); +end; + +function TRewriteRuleElementStream.NextTree: IANTLRInterface; +begin + Result := _Next; +end; + +procedure TRewriteRuleElementStream.Reset; +begin + FCursor := 0; + FDirty := True; +end; + +function TRewriteRuleElementStream.Size: Integer; +begin + if Assigned(FSingleElement) then + Result := 1 + else + if Assigned(FElements) then + Result := FElements.Count + else + Result := 0; +end; + +function TRewriteRuleElementStream.ToTree(const El: IANTLRInterface): IANTLRInterface; +begin + Result := El; +end; + +function TRewriteRuleElementStream._Next: IANTLRInterface; +var + Size: Integer; +begin + Size := Self.Size; + if (Size = 0) then + raise ERewriteEmptyStreamException.Create(FElementDescription); + + if (FCursor >= Size) then + begin + // out of elements? + if (Size = 1) then + // if size is 1, it's ok; return and we'll dup + Result := ToTree(FSingleElement) + else + // out of elements and size was not 1, so we can't dup + raise ERewriteCardinalityException.Create(FElementDescription); + end + else + begin + // we have elements + if Assigned(FSingleElement) then + begin + Inc(FCursor); // move cursor even for single element list + Result := ToTree(FSingleElement); + end + else + begin + // must have more than one in list, pull from elements + Result := ToTree(FElements[FCursor]); + Inc(FCursor); + end; + end; +end; + +{ TRewriteRuleNodeStream } + +function TRewriteRuleNodeStream.NextNode: IANTLRInterface; +begin + Result := _Next; +end; + +function TRewriteRuleNodeStream.ToTree( + const El: IANTLRInterface): IANTLRInterface; +begin + Result := FAdaptor.DupNode(El); +end; + +{ TRewriteRuleSubtreeStream } + +function TRewriteRuleSubtreeStream.Dup( + const O: IANTLRInterface): IANTLRInterface; +begin + Result := FAdaptor.DupTree(O); +end; + +function TRewriteRuleSubtreeStream.DupNode( + const O: IANTLRInterface): IANTLRInterface; +begin + Result := FAdaptor.DupNode(O); +end; + +function TRewriteRuleSubtreeStream.FetchObject( + const PH: TProcessHandler): IANTLRInterface; +begin + if (RequiresDuplication) then + // process the object + Result := PH(_Next) + else + // test above then fetch + Result := _Next; +end; + +function TRewriteRuleSubtreeStream.NextNode: IANTLRInterface; +begin + // if necessary, dup (at most a single node since this is for making root nodes). + Result := FetchObject(DupNode); +end; + +function TRewriteRuleSubtreeStream.NextTree: IANTLRInterface; +begin + // if out of elements and size is 1, dup + Result := FetchObject(Dup); +end; + +function TRewriteRuleSubtreeStream.RequiresDuplication: Boolean; +var + Size: Integer; +begin + Size := Self.Size; + // if dirty or if out of elements and size is 1 + Result := FDirty or ((FCursor >= Size) and (Size = 1)); +end; + +{ TRewriteRuleTokenStream } + +function TRewriteRuleTokenStream.NextNode: IANTLRInterface; +begin + Result := FAdaptor.CreateNode(_Next as IToken) +end; + +function TRewriteRuleTokenStream.NextToken: IToken; +begin + Result := _Next as IToken; +end; + +function TRewriteRuleTokenStream.ToTree( + const El: IANTLRInterface): IANTLRInterface; +begin + Result := El; +end; + +{ TTreeParser } + +constructor TTreeParser.Create(const AInput: ITreeNodeStream); +begin + inherited Create; // highlight that we go to super to set state object + SetTreeNodeStream(AInput); +end; + +constructor TTreeParser.Create(const AInput: ITreeNodeStream; + const AState: IRecognizerSharedState); +begin + inherited Create(AState); // share the state object with another parser + SetTreeNodeStream(AInput); +end; + +function TTreeParser.GetCurrentInputSymbol( + const Input: IIntStream): IANTLRInterface; +begin + Result := FInput.LT(1); +end; + +function TTreeParser.GetErrorHeader(const E: ERecognitionException): String; +begin + Result := GetGrammarFileName + ': node from '; + if (E.ApproximateLineInfo) then + Result := Result + 'after '; + Result := Result + 'line ' + IntToStr(E.Line) + ':' + IntToStr(E.CharPositionInLine); +end; + +function TTreeParser.GetErrorMessage(const E: ERecognitionException; + const TokenNames: TStringArray): String; +var + Adaptor: ITreeAdaptor; +begin + if (Self is TTreeParser) then + begin + Adaptor := (E.Input as ITreeNodeStream).TreeAdaptor; + E.Token := Adaptor.GetToken(E.Node); + if (E.Token = nil) then + // could be an UP/DOWN node + E.Token := TCommonToken.Create(Adaptor.GetNodeType(E.Node), + Adaptor.GetNodeText(E.Node)); + end; + Result := inherited GetErrorMessage(E, TokenNames); +end; + +function TTreeParser.GetInput: IIntStream; +begin + Result := FInput; +end; + +function TTreeParser.GetMissingSymbol(const Input: IIntStream; + const E: ERecognitionException; const ExpectedTokenType: Integer; + const Follow: IBitSet): IANTLRInterface; +var + TokenText: String; +begin + TokenText := '<missing ' + GetTokenNames[ExpectedTokenType] + '>'; + Result := TCommonTree.Create(TCommonToken.Create(ExpectedTokenType, TokenText)); +end; + +function TTreeParser.GetSourceName: String; +begin + Result := FInput.SourceName; +end; + +function TTreeParser.GetTreeNodeStream: ITreeNodeStream; +begin + Result := FInput; +end; + +procedure TTreeParser.MatchAny(const Input: IIntStream); +var + Look: IANTLRInterface; + Level, TokenType: Integer; +begin + FState.ErrorRecovery := False; + FState.Failed := False; + Look := FInput.LT(1); + if (FInput.TreeAdaptor.GetChildCount(Look) = 0) then + begin + FInput.Consume; // not subtree, consume 1 node and return + Exit; + end; + + // current node is a subtree, skip to corresponding UP. + // must count nesting level to get right UP + Level := 0; + TokenType := FInput.TreeAdaptor.GetNodeType(Look); + while (TokenType <> TToken.EOF) and not ((TokenType = UP) and (Level = 0)) do + begin + FInput.Consume; + Look := FInput.LT(1); + TokenType := FInput.TreeAdaptor.GetNodeType(Look); + if (TokenType = DOWN) then + Inc(Level) + else + if (TokenType = UP) then + Dec(Level); + end; + FInput.Consume; // consume UP +end; + +procedure TTreeParser.Mismatch(const Input: IIntStream; + const TokenType: Integer; const Follow: IBitSet); +begin + raise EMismatchedTreeNodeException.Create(TokenType, FInput); +end; + +procedure TTreeParser.Reset; +begin + inherited; // reset all recognizer state variables + if Assigned(FInput) then + FInput.Seek(0); // rewind the input +end; + +procedure TTreeParser.SetTreeNodeStream(const Value: ITreeNodeStream); +begin + FInput := Value; +end; + +procedure TTreeParser.TraceIn(const RuleName: String; const RuleIndex: Integer); +begin + inherited TraceIn(RuleName, RuleIndex, FInput.LT(1).ToString); +end; + +procedure TTreeParser.TraceOut(const RuleName: String; + const RuleIndex: Integer); +begin + inherited TraceOut(RuleName, RuleIndex, FInput.LT(1).ToString); +end; + +{ TTreePatternLexer } + +constructor TTreePatternLexer.Create; +begin + inherited; + FSVal := TStringBuilder.Create; +end; + +procedure TTreePatternLexer.Consume; +begin + Inc(FP); + if (FP > FN) then + FC := EOF + else + FC := Integer(FPattern[FP]); +end; + +constructor TTreePatternLexer.Create(const APattern: String); +begin + Create; + FPattern := APattern; + FN := Length(FPattern); + Consume; +end; + +destructor TTreePatternLexer.Destroy; +begin + FSVal.Free; + inherited; +end; + +function TTreePatternLexer.NextToken: Integer; +begin + FSVal.Length := 0; // reset, but reuse buffer + while (FC <> EOF) do + begin + if (FC = 32) or (FC = 10) or (FC = 13) or (FC = 9) then + begin + Consume; + Continue; + end; + + if ((FC >= Ord('a')) and (FC <= Ord('z'))) + or ((FC >= Ord('A')) and (FC <= Ord('Z'))) + or (FC = Ord('_')) + then begin + FSVal.Append(Char(FC)); + Consume; + while ((FC >= Ord('a')) and (FC <= Ord('z'))) + or ((FC >= Ord('A')) and (FC <= Ord('Z'))) + or ((FC >= Ord('0')) and (FC <= Ord('9'))) + or (FC = Ord('_')) do + begin + FSVal.Append(Char(FC)); + Consume; + end; + Exit(ID); + end; + + if (FC = Ord('(')) then + begin + Consume; + Exit(START); + end; + + if (FC = Ord(')')) then + begin + Consume; + Exit(STOP); + end; + + if (FC = Ord('%')) then + begin + Consume; + Exit(PERCENT); + end; + + if (FC = Ord(':')) then + begin + Consume; + Exit(COLON); + end; + + if (FC = Ord('.')) then + begin + Consume; + Exit(DOT); + end; + + if (FC = Ord('[')) then + begin + // grab [x] as a string, returning x + Consume; + while (FC <> Ord(']')) do + begin + if (FC = Ord('\')) then + begin + Consume; + if (FC <> Ord(']')) then + FSVal.Append('\'); + FSVal.Append(Char(FC)); + end + else + FSVal.Append(Char(FC)); + Consume; + end; + Consume; + Exit(ARG); + end; + + Consume; + FError := True; + Exit(EOF); + end; + Result := EOF; +end; + +function TTreePatternLexer.SVal: String; +begin + Result := FSVal.ToString; +end; + +{ TTreeWizard } + +function TTreeWizard.ComputeTokenTypes( + const TokenNames: TStringArray): IDictionary<String, Integer>; +var + TokenType: Integer; +begin + Result := TDictionary<String, Integer>.Create; + if (Length(TokenNames) > 0)then + begin + for TokenType := TToken.MIN_TOKEN_TYPE to Length(TokenNames) - 1 do + Result.Add(TokenNames[TokenType], TokenType); + end; +end; + +constructor TTreeWizard.Create(const AAdaptor: ITreeAdaptor); +begin + inherited Create; + FAdaptor := AAdaptor; +end; + +constructor TTreeWizard.Create(const AAdaptor: ITreeAdaptor; + const ATokenNameToTypeMap: IDictionary<String, Integer>); +begin + inherited Create; + FAdaptor := AAdaptor; + FTokenNameToTypeMap := ATokenNameToTypeMap; +end; + +constructor TTreeWizard.Create(const AAdaptor: ITreeAdaptor; + const TokenNames: TStringArray); +begin + inherited Create; + FAdaptor := AAdaptor; + FTokenNameToTypeMap := ComputeTokenTypes(TokenNames); +end; + +function TTreeWizard.CreateTreeOrNode(const Pattern: String): IANTLRInterface; +var + Tokenizer: ITreePatternLexer; + Parser: ITreePatternParser; +begin + Tokenizer := TTreePatternLexer.Create(Pattern); + Parser := TTreePatternParser.Create(Tokenizer, Self, FAdaptor); + Result := Parser.Pattern; +end; + +function TTreeWizard.Equals(const T1, T2: IANTLRInterface; + const Adaptor: ITreeAdaptor): Boolean; +begin + Result := _Equals(T1, T2, Adaptor); +end; + +function TTreeWizard.Equals(const T1, T2: IANTLRInterface): Boolean; +begin + Result := _Equals(T1, T2, FAdaptor); +end; + +function TTreeWizard.Find(const T: IANTLRInterface; + const Pattern: String): IList<IANTLRInterface>; +var + Tokenizer: ITreePatternLexer; + Parser: ITreePatternParser; + TreePattern: ITreePattern; + RootTokenType: Integer; + Visitor: IContextVisitor; +begin + Result := TList<IANTLRInterface>.Create; + + // Create a TreePattern from the pattern + Tokenizer := TTreePatternLexer.Create(Pattern); + Parser := TTreePatternParser.Create(Tokenizer, Self, TTreePatternTreeAdaptor.Create); + TreePattern := Parser.Pattern as ITreePattern; + + // don't allow invalid patterns + if (TreePattern = nil) or (TreePattern.IsNil) + or Supports(TreePattern, IWildcardTreePattern) + then + Exit(nil); + + RootTokenType := TreePattern.TokenType; + Visitor := TPatternMatchingContextVisitor.Create(Self, TreePattern, Result); + Visit(T, RootTokenType, Visitor); +end; + +function TTreeWizard.Find(const T: IANTLRInterface; + const TokenType: Integer): IList<IANTLRInterface>; +begin + Result := TList<IANTLRInterface>.Create; + Visit(T, TokenType, TRecordAllElementsVisitor.Create(Result)); +end; + +function TTreeWizard.FindFirst(const T: IANTLRInterface; + const TokenType: Integer): IANTLRInterface; +begin + Result := nil; +end; + +function TTreeWizard.FindFirst(const T: IANTLRInterface; + const Pattern: String): IANTLRInterface; +begin + Result := nil; +end; + +function TTreeWizard.GetTokenType(const TokenName: String): Integer; +begin + if (FTokenNameToTypeMap = nil) then + Exit(TToken.INVALID_TOKEN_TYPE); + if (not FTokenNameToTypeMap.TryGetValue(TokenName, Result)) then + Result := TToken.INVALID_TOKEN_TYPE; +end; + +function TTreeWizard.Index( + const T: IANTLRInterface): IDictionary<Integer, IList<IANTLRInterface>>; +begin + Result := TDictionary<Integer, IList<IANTLRInterface>>.Create; + _Index(T, Result); +end; + +function TTreeWizard.Parse(const T: IANTLRInterface; + const Pattern: String): Boolean; +begin + Result := Parse(T, Pattern, nil); +end; + +function TTreeWizard.Parse(const T: IANTLRInterface; const Pattern: String; + const Labels: IDictionary<String, IANTLRInterface>): Boolean; +var + Tokenizer: ITreePatternLexer; + Parser: ITreePatternParser; + TreePattern: ITreePattern; +begin + Tokenizer := TTreePatternLexer.Create(Pattern); + Parser := TTreePatternParser.Create(Tokenizer, Self, TTreePatternTreeAdaptor.Create); + TreePattern := Parser.Pattern as ITreePattern; + Result := _Parse(T, TreePattern, Labels); +end; + +procedure TTreeWizard.Visit(const T: IANTLRInterface; const Pattern: String; + const Visitor: IContextVisitor); +var + Tokenizer: ITreePatternLexer; + Parser: ITreePatternParser; + TreePattern: ITreePattern; + RootTokenType: Integer; + PatternVisitor: IContextVisitor; +begin + // Create a TreePattern from the pattern + Tokenizer := TTreePatternLexer.Create(Pattern); + Parser := TTreePatternParser.Create(Tokenizer, Self, TTreePatternTreeAdaptor.Create); + TreePattern := Parser.Pattern as ITreePattern; + if (TreePattern = nil) or (TreePattern.IsNil) + or Supports(TreePattern, IWildcardTreePattern) + then + Exit; + RootTokenType := TreePattern.TokenType; + PatternVisitor := TInvokeVisitorOnPatternMatchContextVisitor.Create(Self, TreePattern, Visitor); + Visit(T, RootTokenType, PatternVisitor); +end; + +class function TTreeWizard._Equals(const T1, T2: IANTLRInterface; + const Adaptor: ITreeAdaptor): Boolean; +var + I, N1, N2: Integer; + Child1, Child2: IANTLRInterface; +begin + // make sure both are non-null + if (T1 = nil) or (T2 = nil) then + Exit(False); + + // check roots + if (Adaptor.GetNodeType(T1) <> Adaptor.GetNodeType(T2)) then + Exit(False); + if (Adaptor.GetNodeText(T1) <> Adaptor.GetNodeText(T2)) then + Exit(False); + + // check children + N1 := Adaptor.GetChildCount(T1); + N2 := Adaptor.GetChildCount(T2); + if (N1 <> N2) then + Exit(False); + for I := 0 to N1 - 1 do + begin + Child1 := Adaptor.GetChild(T1, I); + Child2 := Adaptor.GetChild(T2, I); + if (not _Equals(Child1, Child2, Adaptor)) then + Exit(False); + end; + + Result := True; +end; + +procedure TTreeWizard._Index(const T: IANTLRInterface; + const M: IDictionary<Integer, IList<IANTLRInterface>>); +var + I, N, TType: Integer; + Elements: IList<IANTLRInterface>; +begin + if (T = nil) then + Exit; + TType := FAdaptor.GetNodeType(T); + if (not M.TryGetValue(TType, Elements)) then + Elements := nil; + if (Elements = nil) then + begin + Elements := TList<IANTLRInterface>.Create; + M.Add(TType, Elements); + end; + Elements.Add(T); + N := FAdaptor.GetChildCount(T); + for I := 0 to N - 1 do + _Index(FAdaptor.GetChild(T, I), M); +end; + +function TTreeWizard._Parse(const T1: IANTLRInterface; const T2: ITreePattern; + const Labels: IDictionary<String, IANTLRInterface>): Boolean; +var + I, N1, N2: Integer; + Child1: IANTLRInterface; + Child2: ITreePattern; +begin + // make sure both are non-null + if (T1 = nil) or (T2 = nil) then + Exit(False); + + // check roots (wildcard matches anything) + if (not Supports(T2, IWildcardTreePattern)) then + begin + if (FAdaptor.GetNodeType(T1) <> T2.TokenType) then + Exit(False); + if (T2.HasTextArg) and (FAdaptor.GetNodeText(T1) <> T2.Text) then + Exit(False); + end; + + if (T2.TokenLabel <> '') and Assigned(Labels) then + // map label in pattern to node in t1 + Labels.AddOrSetValue(T2.TokenLabel, T1); + + // check children + N1 := FAdaptor.GetChildCount(T1); + N2 := T2.ChildCount; + if (N1 <> N2) then + Exit(False); + + for I := 0 to N1 - 1 do + begin + Child1 := FAdaptor.GetChild(T1, I); + Child2 := T2.GetChild(I) as ITreePattern; + if (not _Parse(Child1, Child2, Labels)) then + Exit(False); + end; + + Result := True; +end; + +procedure TTreeWizard._Visit(const T, Parent: IANTLRInterface; const ChildIndex, + TokenType: Integer; const Visitor: IContextVisitor); +var + I, N: Integer; +begin + if (T = nil) then + Exit; + if (FAdaptor.GetNodeType(T) = TokenType) then + Visitor.Visit(T, Parent, ChildIndex, nil); + + N := FAdaptor.GetChildCount(T); + for I := 0 to N - 1 do + _Visit(FAdaptor.GetChild(T, I), T, I, TokenType, Visitor); +end; + +procedure TTreeWizard.Visit(const T: IANTLRInterface; const TokenType: Integer; + const Visitor: IContextVisitor); +begin + _Visit(T, nil, 0, TokenType, Visitor); +end; + +constructor TTreeWizard.Create(const TokenNames: TStringArray); +begin + Create(nil, TokenNames); +end; + +{ TTreePatternParser } + +constructor TTreePatternParser.Create(const ATokenizer: ITreePatternLexer; + const AWizard: ITreeWizard; const AAdaptor: ITreeAdaptor); +begin + inherited Create; + FTokenizer := ATokenizer; + FWizard := AWizard; + FAdaptor := AAdaptor; + FTokenType := FTokenizer.NextToken; // kickstart +end; + +function TTreePatternParser.ParseNode: IANTLRInterface; +var + Lbl, TokenName, Text, Arg: String; + WildcardPayload: IToken; + Node: TTreeWizard.ITreePattern; + TreeNodeType: Integer; +begin + // "%label:" prefix + Lbl := ''; + if (FTokenType = TTreePatternLexer.PERCENT) then + begin + FTokenType := FTokenizer.NextToken; + if (FTokenType <> TTreePatternLexer.ID) then + Exit(nil); + Lbl := FTokenizer.SVal; + FTokenType := FTokenizer.NextToken; + if (FTokenType <> TTreePatternLexer.COLON) then + Exit(nil); + FTokenType := FTokenizer.NextToken; // move to ID following colon + end; + + // Wildcard? + if (FTokenType = TTreePatternLexer.DOT) then + begin + FTokenType := FTokenizer.NextToken; + WildcardPayload := TCommonToken.Create(0, '.'); + Node := TTreeWizard.TWildcardTreePattern.Create(WildcardPayload); + if (Lbl <> '') then + Node.TokenLabel := Lbl; + Exit(Node); + end; + + // "ID" or "ID[arg]" + if (FTokenType <> TTreePatternLexer.ID) then + Exit(nil); + TokenName := FTokenizer.SVal; + FTokenType := FTokenizer.NextToken; + if (TokenName = 'nil') then + Exit(FAdaptor.GetNilNode); + Text := TokenName; + + // check for arg + Arg := ''; + if (FTokenType = TTreePatternLexer.ARG) then + begin + Arg := FTokenizer.SVal; + Text := Arg; + FTokenType := FTokenizer.NextToken; + end; + + // create node + TreeNodeType := FWizard.GetTokenType(TokenName); + if (TreeNodeType = TToken.INVALID_TOKEN_TYPE) then + Exit(nil); + + Result := FAdaptor.CreateNode(TreeNodeType, Text); + if (Lbl <> '') and Supports(Result, TTreeWizard.ITreePattern, Node) then + Node.TokenLabel := Lbl; + if (Arg <> '') and Supports(Result, TTreeWizard.ITreePattern, Node) then + Node.HasTextArg := True; +end; + +function TTreePatternParser.ParseTree: IANTLRInterface; +var + Subtree, Child: IANTLRInterface; +begin + if (FTokenType <> TTreePatternLexer.START) then + begin + WriteLn('no BEGIN'); + Exit(nil); + end; + + FTokenType := FTokenizer.NextToken; + Result := ParseNode; + if (Result = nil) then + Exit; + + while (FTokenType in [TTreePatternLexer.START, TTreePatternLexer.ID, + TTreePatternLexer.PERCENT, TTreePatternLexer.DOT]) do + begin + if (FTokenType = TTreePatternLexer.START) then + begin + Subtree := ParseTree; + FAdaptor.AddChild(Result, Subtree); + end + else + begin + Child := ParseNode; + if (Child = nil) then + Exit(nil); + FAdaptor.AddChild(Result, Child); + end; + end; + + if (FTokenType <> TTreePatternLexer.STOP) then + begin + WriteLn('no END'); + Exit(nil); + end; + + FTokenType := FTokenizer.NextToken; +end; + +function TTreePatternParser.Pattern: IANTLRInterface; +var + Node: IANTLRInterface; +begin + if (FTokenType = TTreePatternLexer.START) then + Exit(ParseTree); + + if (FTokenType = TTreePatternLexer.ID) then + begin + Node := ParseNode; + if (FTokenType = TTreePatternLexer.EOF) then + Result := Node + else + Result := nil; // extra junk on end + end + else + Result := nil; +end; + +{ TTreeWizard.TVisitor } + +procedure TTreeWizard.TVisitor.Visit(const T, Parent: IANTLRInterface; + const ChildIndex: Integer; + const Labels: IDictionary<String, IANTLRInterface>); +begin + Visit(T); +end; + +{ TTreeWizard.TRecordAllElementsVisitor } + +constructor TTreeWizard.TRecordAllElementsVisitor.Create( + const AList: IList<IANTLRInterface>); +begin + inherited Create; + FList := AList; +end; + +procedure TTreeWizard.TRecordAllElementsVisitor.Visit(const T: IANTLRInterface); +begin + FList.Add(T); +end; + +{ TTreeWizard.TPatternMatchingContextVisitor } + +constructor TTreeWizard.TPatternMatchingContextVisitor.Create( + const AOwner: TTreeWizard; const APattern: ITreePattern; + const AList: IList<IANTLRInterface>); +begin + inherited Create; + FOwner := AOwner; + FPattern := APattern; + FList := AList; +end; + +procedure TTreeWizard.TPatternMatchingContextVisitor.Visit(const T, + Parent: IANTLRInterface; const ChildIndex: Integer; + const Labels: IDictionary<String, IANTLRInterface>); +begin + if (FOwner._Parse(T, FPattern, nil)) then + FList.Add(T); +end; + +{ TTreeWizard.TInvokeVisitorOnPatternMatchContextVisitor } + +constructor TTreeWizard.TInvokeVisitorOnPatternMatchContextVisitor.Create( + const AOwner: TTreeWizard; const APattern: ITreePattern; + const AVisitor: IContextVisitor); +begin + inherited Create; + FOwner := AOwner; + FPattern := APattern; + FVisitor := AVisitor; + FLabels := TDictionary<String, IANTLRInterface>.Create; +end; + +procedure TTreeWizard.TInvokeVisitorOnPatternMatchContextVisitor.Visit(const T, + Parent: IANTLRInterface; const ChildIndex: Integer; + const UnusedLabels: IDictionary<String, IANTLRInterface>); +begin + // the unusedlabels arg is null as visit on token type doesn't set. + FLabels.Clear; + if (FOwner._Parse(T, FPattern, FLabels)) then + FVisitor.Visit(T, Parent, ChildIndex, FLabels); +end; + +{ TTreeWizard.TTreePattern } + +function TTreeWizard.TTreePattern.GetHasTextArg: Boolean; +begin + Result := FHasTextArg; +end; + +function TTreeWizard.TTreePattern.GetTokenLabel: String; +begin + Result := FLabel; +end; + +procedure TTreeWizard.TTreePattern.SetHasTextArg(const Value: Boolean); +begin + FHasTextArg := Value; +end; + +procedure TTreeWizard.TTreePattern.SetTokenLabel(const Value: String); +begin + FLabel := Value; +end; + +function TTreeWizard.TTreePattern.ToString: String; +begin + if (FLabel <> '') then + Result := '%' + FLabel + ':' + inherited ToString + else + Result := inherited ToString; +end; + +{ TTreeWizard.TTreePatternTreeAdaptor } + +function TTreeWizard.TTreePatternTreeAdaptor.CreateNode( + const Payload: IToken): IANTLRInterface; +begin + Result := TTreePattern.Create(Payload); +end; + +{ TTreeRuleReturnScope } + +function TTreeRuleReturnScope.GetStart: IANTLRInterface; +begin + Result := FStart; +end; + +procedure TTreeRuleReturnScope.SetStart(const Value: IANTLRInterface); +begin + FStart := Value; +end; + +{ TUnBufferedTreeNodeStream } + +procedure TUnBufferedTreeNodeStream.AddLookahead(const Node: IANTLRInterface); +var + Bigger: TANTLRInterfaceArray; + I, RemainderHeadToEnd: Integer; +begin + FLookahead[FTail] := Node; + FTail := (FTail + 1) mod Length(FLookahead); + if (FTail = FHead) then + begin + // buffer overflow: tail caught up with head + // allocate a buffer 2x as big + SetLength(Bigger,2 * Length(FLookahead)); + // copy head to end of buffer to beginning of bigger buffer + RemainderHeadToEnd := Length(FLookahead) - FHead; + for I := 0 to RemainderHeadToEnd - 1 do + Bigger[I] := FLookahead[FHead + I]; + // copy 0..tail to after that + for I := 0 to FTail - 1 do + Bigger[RemainderHeadToEnd + I] := FLookahead[I]; + FLookahead := Bigger; // reset to bigger buffer + FHead := 0; + Inc(FTail,RemainderHeadToEnd); + end; +end; + +procedure TUnBufferedTreeNodeStream.AddNavigationNode(const TokenType: Integer); +var + NavNode: IANTLRInterface; +begin + if (TokenType = TToken.DOWN) then + begin + if (GetHasUniqueNavigationNodes) then + NavNode := FAdaptor.CreateNode(TToken.DOWN,'DOWN') + else + NavNode := FDown; + end + else + begin + if (GetHasUniqueNavigationNodes) then + NavNode := FAdaptor.CreateNode(TToken.UP,'UP') + else + NavNode := FUp; + end; + AddLookahead(NavNode); +end; + +procedure TUnBufferedTreeNodeStream.Consume; +begin + // make sure there is something in lookahead buf, which might call next() + Fill(1); + Inc(FAbsoluteNodeIndex); + FPreviousNode := FLookahead[FHead]; // track previous node before moving on + FHead := (FHead + 1) mod Length(FLookahead); +end; + +constructor TUnBufferedTreeNodeStream.Create; +begin + inherited; + SetLength(FLookAhead,INITIAL_LOOKAHEAD_BUFFER_SIZE); + FNodeStack := TStackList<IANTLRInterface>.Create; + FIndexStack := TStackList<Integer>.Create; +end; + +constructor TUnBufferedTreeNodeStream.Create(const ATree: IANTLRInterface); +begin + Create(TCommonTreeAdaptor.Create, ATree); +end; + +constructor TUnBufferedTreeNodeStream.Create(const AAdaptor: ITreeAdaptor; + const ATree: IANTLRInterface); +begin + Create; + FRoot := ATree; + FAdaptor := AAdaptor; + Reset; + FDown := FAdaptor.CreateNode(TToken.DOWN, 'DOWN'); + FUp := FAdaptor.CreateNode(TToken.UP, 'UP'); + FEof := FAdaptor.CreateNode(TToken.EOF, 'EOF'); +end; + +procedure TUnBufferedTreeNodeStream.Fill(const K: Integer); +var + I, N: Integer; +begin + N := LookaheadSize; + for I := 1 to K - N do + MoveNext; // get at least k-depth lookahead nodes +end; + +function TUnBufferedTreeNodeStream.Get(const I: Integer): IANTLRInterface; +begin + raise EInvalidOperation.Create('stream is unbuffered'); +end; + +function TUnBufferedTreeNodeStream.GetCurrent: IANTLRInterface; +begin + Result := FCurrentEnumerationNode; +end; + +function TUnBufferedTreeNodeStream.GetHasUniqueNavigationNodes: Boolean; +begin + Result := FUniqueNavigationNodes; +end; + +function TUnBufferedTreeNodeStream.GetSourceName: String; +begin + Result := GetTokenStream.SourceName; +end; + +function TUnBufferedTreeNodeStream.GetTokenStream: ITokenStream; +begin + Result := FTokens; +end; + +function TUnBufferedTreeNodeStream.GetTreeAdaptor: ITreeAdaptor; +begin + Result := FAdaptor; +end; + +function TUnBufferedTreeNodeStream.GetTreeSource: IANTLRInterface; +begin + Result := FRoot; +end; + +function TUnBufferedTreeNodeStream.HandleRootNode: IANTLRInterface; +begin + Result := FCurrentNode; + // point to first child in prep for subsequent next() + FCurrentChildIndex := 0; + if (FAdaptor.IsNil(Result)) then + // don't count this root nil node + Result := VisitChild(FCurrentChildIndex) + else + begin + AddLookahead(Result); + if (FAdaptor.GetChildCount(FCurrentNode) = 0) then + // single node case + Result := nil; // say we're done + end; +end; + +function TUnBufferedTreeNodeStream.Index: Integer; +begin + Result := FAbsoluteNodeIndex + 1; +end; + +function TUnBufferedTreeNodeStream.LA(I: Integer): Integer; +var + T: IANTLRInterface; +begin + T := LT(I); + if (T = nil) then + Result := TToken.INVALID_TOKEN_TYPE + else + Result := FAdaptor.GetNodeType(T); +end; + +function TUnBufferedTreeNodeStream.LAChar(I: Integer): Char; +begin + Result := Char(LA(I)); +end; + +function TUnBufferedTreeNodeStream.LookaheadSize: Integer; +begin + if (FTail < FHead) then + Result := Length(FLookahead) - FHead + FTail + else + Result := FTail - FHead; +end; + +function TUnBufferedTreeNodeStream.LT(const K: Integer): IANTLRInterface; +begin + if (K = -1) then + Exit(FPreviousNode); + + if (K < 0) then + raise EArgumentException.Create('tree node streams cannot look backwards more than 1 node'); + + if (K = 0) then + Exit(TTree.INVALID_NODE); + + Fill(K); + Result := FLookahead[(FHead + K - 1) mod Length(FLookahead)]; +end; + +function TUnBufferedTreeNodeStream.Mark: Integer; +var + State: ITreeWalkState; + I, N, K: Integer; + LA: TANTLRInterfaceArray; +begin + if (FMarkers = nil) then + begin + FMarkers := TList<ITreeWalkState>.Create; + FMarkers.Add(nil); // depth 0 means no backtracking, leave blank + end; + + Inc(FMarkDepth); + State := nil; + if (FMarkDepth >= FMarkers.Count) then + begin + State := TTreeWalkState.Create; + FMarkers.Add(State); + end + else + State := FMarkers[FMarkDepth]; + + State.AbsoluteNodeIndex := FAbsoluteNodeIndex; + State.CurrentChildIndex := FCurrentChildIndex; + State.CurrentNode := FCurrentNode; + State.PreviousNode := FPreviousNode; + State.NodeStackSize := FNodeStack.Count; + State.IndexStackSize := FIndexStack.Count; + + // take snapshot of lookahead buffer + N := LookaheadSize; + I := 0; + SetLength(LA,N); + for K := 1 to N do + begin + LA[I] := LT(K); + Inc(I); + end; + State.LookAhead := LA; + FLastMarker := FMarkDepth; + Result := FMarkDepth; +end; + +function TUnBufferedTreeNodeStream.MoveNext: Boolean; +begin + // already walked entire tree; nothing to return + if (FCurrentNode = nil) then + begin + AddLookahead(FEof); + FCurrentEnumerationNode := nil; + // this is infinite stream returning EOF at end forever + // so don't throw NoSuchElementException + Exit(False); + end; + + // initial condition (first time method is called) + if (FCurrentChildIndex = -1) then + begin + FCurrentEnumerationNode := HandleRootNode as ITree; + Exit(True); + end; + + // index is in the child list? + if (FCurrentChildIndex < FAdaptor.GetChildCount(FCurrentNode)) then + begin + FCurrentEnumerationNode := VisitChild(FCurrentChildIndex) as ITree; + Exit(True); + end; + + // hit end of child list, return to parent node or its parent ... + WalkBackToMostRecentNodeWithUnvisitedChildren; + if (FCurrentNode <> nil) then + begin + FCurrentEnumerationNode := VisitChild(FCurrentChildIndex) as ITree; + Result := True; + end + else + Result := False; +end; + +procedure TUnBufferedTreeNodeStream.Release(const Marker: Integer); +begin + // unwind any other markers made after marker and release marker + FMarkDepth := Marker; + // release this marker + Dec(FMarkDepth); +end; + +procedure TUnBufferedTreeNodeStream.ReplaceChildren( + const Parent: IANTLRInterface; const StartChildIndex, StopChildIndex: Integer; + const T: IANTLRInterface); +begin + raise EInvalidOperation.Create('can''t do stream rewrites yet'); +end; + +procedure TUnBufferedTreeNodeStream.Reset; +begin + FCurrentNode := FRoot; + FPreviousNode := nil; + FCurrentChildIndex := -1; + FAbsoluteNodeIndex := -1; + FHead := 0; + FTail := 0; +end; + +procedure TUnBufferedTreeNodeStream.Rewind(const Marker: Integer); +var + State: ITreeWalkState; +begin + if (FMarkers = nil) then + Exit; + State := FMarkers[Marker]; + FAbsoluteNodeIndex := State.AbsoluteNodeIndex; + FCurrentChildIndex := State.CurrentChildIndex; + FCurrentNode := State.CurrentNode; + FPreviousNode := State.PreviousNode; + // drop node and index stacks back to old size + FNodeStack.Capacity := State.NodeStackSize; + FIndexStack.Capacity := State.IndexStackSize; + FHead := 0; // wack lookahead buffer and then refill + FTail := 0; + while (FTail < Length(State.LookAhead)) do + begin + FLookahead[FTail] := State.LookAhead[FTail]; + Inc(FTail); + end; + Release(Marker); +end; + +procedure TUnBufferedTreeNodeStream.Rewind; +begin + Rewind(FLastMarker); +end; + +procedure TUnBufferedTreeNodeStream.Seek(const Index: Integer); +begin + if (Index < Self.Index) then + raise EArgumentOutOfRangeException.Create('can''t seek backwards in node stream'); + + // seek forward, consume until we hit index + while (Self.Index < Index) do + Consume; +end; + +procedure TUnBufferedTreeNodeStream.SetHasUniqueNavigationNodes( + const Value: Boolean); +begin + FUniqueNavigationNodes := Value; +end; + +procedure TUnBufferedTreeNodeStream.SetTokenStream(const Value: ITokenStream); +begin + FTokens := Value; +end; + +function TUnBufferedTreeNodeStream.Size: Integer; +var + S: ICommonTreeNodeStream; +begin + S := TCommonTreeNodeStream.Create(FRoot); + Result := S.Size; +end; + +function TUnBufferedTreeNodeStream.ToString: String; +begin + Result := ToString(FRoot, nil); +end; + +procedure TUnBufferedTreeNodeStream.ToStringWork(const P, Stop: IANTLRInterface; + const Buf: TStringBuilder); +var + Text: String; + C, N: Integer; +begin + if (not FAdaptor.IsNil(P)) then + begin + Text := FAdaptor.GetNodeText(P); + if (Text = '') then + Text := ' ' + IntToStr(FAdaptor.GetNodeType(P)); + Buf.Append(Text); // ask the node to go to string + end; + + if SameObj(P, Stop) then + Exit; + + N := FAdaptor.GetChildCount(P); + if (N > 0) and (not FAdaptor.IsNil(P)) then + begin + Buf.Append(' '); + Buf.Append(TToken.DOWN); + end; + + for C := 0 to N - 1 do + ToStringWork(FAdaptor.GetChild(P, C), Stop, Buf); + + if (N > 0) and (not FAdaptor.IsNil(P)) then + begin + Buf.Append(' '); + Buf.Append(TToken.UP); + end; +end; + +function TUnBufferedTreeNodeStream.VisitChild( + const Child: Integer): IANTLRInterface; +begin + Result := nil; + // save state + FNodeStack.Push(FCurrentNode); + FIndexStack.Push(Child); + if (Child = 0) and (not FAdaptor.IsNil(FCurrentNode)) then + AddNavigationNode(TToken.DOWN); + // visit child + FCurrentNode := FAdaptor.GetChild(FCurrentNode, Child); + FCurrentChildIndex := 0; + Result := FCurrentNode; + AddLookahead(Result); + WalkBackToMostRecentNodeWithUnvisitedChildren; +end; + +procedure TUnBufferedTreeNodeStream.WalkBackToMostRecentNodeWithUnvisitedChildren; +begin + while (FCurrentNode <> nil) and (FCurrentChildIndex >= FAdaptor.GetChildCount(FCurrentNode)) do + begin + FCurrentNode := FNodeStack.Pop; + if (FCurrentNode = nil) then + // hit the root? + Exit; + + FCurrentChildIndex := FIndexStack.Pop; + Inc(FCurrentChildIndex); // move to next child + if (FCurrentChildIndex >= FAdaptor.GetChildCount(FCurrentNode)) then + begin + if (not FAdaptor.IsNil(FCurrentNode)) then + AddNavigationNode(TToken.UP); + if SameObj(FCurrentNode, FRoot) then + // we done yet? + FCurrentNode := nil; + end; + end; +end; + +function TUnBufferedTreeNodeStream.ToString(const Start, + Stop: IANTLRInterface): String; +var + BeginTokenIndex, EndTokenIndex: Integer; + Buf: TStringBuilder; +begin + if (Start = nil) then + Exit(''); + + // if we have the token stream, use that to dump text in order + if (FTokens <> nil) then + begin + // don't trust stop node as it's often an UP node etc... + // walk backwards until you find a non-UP, non-DOWN node + // and ask for it's token index. + BeginTokenIndex := FAdaptor.GetTokenStartIndex(Start); + if (Stop <> nil) and (FAdaptor.GetNodeType(Stop) = TToken.UP) then + EndTokenIndex := FAdaptor.GetTokenStopIndex(Start) + else + EndTokenIndex := Size - 1; + Exit(FTokens.ToString(BeginTokenIndex, EndTokenIndex)); + end; + + Buf := TStringBuilder.Create; + try + ToStringWork(Start, Stop, Buf); + Result := Buf.ToString; + finally + Buf.Free; + end; +end; + +{ TUnBufferedTreeNodeStream.TTreeWalkState } + +function TUnBufferedTreeNodeStream.TTreeWalkState.GetAbsoluteNodeIndex: Integer; +begin + Result := FAbsoluteNodeIndex; +end; + +function TUnBufferedTreeNodeStream.TTreeWalkState.GetCurrentChildIndex: Integer; +begin + Result := FCurrentChildIndex; +end; + +function TUnBufferedTreeNodeStream.TTreeWalkState.GetCurrentNode: IANTLRInterface; +begin + Result := FCurrentNode; +end; + +function TUnBufferedTreeNodeStream.TTreeWalkState.GetIndexStackSize: integer; +begin + Result := FIndexStackSize; +end; + +function TUnBufferedTreeNodeStream.TTreeWalkState.GetLookAhead: TANTLRInterfaceArray; +begin + Result := FLookAhead; +end; + +function TUnBufferedTreeNodeStream.TTreeWalkState.GetNodeStackSize: Integer; +begin + Result := FNodeStackSize; +end; + +function TUnBufferedTreeNodeStream.TTreeWalkState.GetPreviousNode: IANTLRInterface; +begin + Result := FPreviousNode; +end; + +procedure TUnBufferedTreeNodeStream.TTreeWalkState.SetAbsoluteNodeIndex( + const Value: Integer); +begin + FAbsoluteNodeIndex := Value; +end; + +procedure TUnBufferedTreeNodeStream.TTreeWalkState.SetCurrentChildIndex( + const Value: Integer); +begin + FCurrentChildIndex := Value; +end; + +procedure TUnBufferedTreeNodeStream.TTreeWalkState.SetCurrentNode( + const Value: IANTLRInterface); +begin + FCurrentNode := Value; +end; + +procedure TUnBufferedTreeNodeStream.TTreeWalkState.SetIndexStackSize( + const Value: integer); +begin + FIndexStackSize := Value; +end; + +procedure TUnBufferedTreeNodeStream.TTreeWalkState.SetLookAhead( + const Value: TANTLRInterfaceArray); +begin + FLookAhead := Value; +end; + +procedure TUnBufferedTreeNodeStream.TTreeWalkState.SetNodeStackSize( + const Value: Integer); +begin + FNodeStackSize := Value; +end; + +procedure TUnBufferedTreeNodeStream.TTreeWalkState.SetPreviousNode( + const Value: IANTLRInterface); +begin + FPreviousNode := Value; +end; + +{ Utilities } + +var + EmptyCommonTree: ICommonTree = nil; + +function Def(const X: ICommonTree): ICommonTree; overload; +begin + if Assigned(X) then + Result := X + else + begin + if (EmptyCommonTree = nil) then + EmptyCommonTree := TCommonTree.Create; + Result := EmptyCommonTree; + end; +end; + +initialization + TTree.Initialize; + +end. diff --git a/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime/Antlr.Runtime.pas b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime/Antlr.Runtime.pas new file mode 100644 index 0000000..c81ffe9 --- /dev/null +++ b/antlr-3.1.3/runtime/Delphi/Sources/Antlr3.Runtime/Antlr.Runtime.pas @@ -0,0 +1,6563 @@ +unit Antlr.Runtime; +(* +[The "BSD licence"] +Copyright (c) 2008 Erik van Bilsen +Copyright (c) 2005-2007 Kunle Odutola +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code MUST RETAIN the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form MUST REPRODUCE the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior WRITTEN permission. +4. Unless explicitly state otherwise, any contribution intentionally + submitted for inclusion in this work to the copyright owner or licensor + shall be under the terms and conditions of this license, without any + additional terms or conditions. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*) + +interface + +{$IF CompilerVersion < 20} +{$MESSAGE ERROR 'You need Delphi 2009 or higher to use the Antlr runtime'} +{$IFEND} + +uses + SysUtils, + Classes, + Generics.Defaults, + Generics.Collections, + Antlr.Runtime.Tools, + Antlr.Runtime.Collections; + +type + TCharStreamConstants = (cscEOF = -1); + +type + ERecognitionException = class; + ENoViableAltException = class; + + /// <summary> + /// A simple stream of integers. This is useful when all we care about is the char + /// or token type sequence (such as for interpretation). + /// </summary> + IIntStream = interface(IANTLRInterface) + ['{6B851BDB-DD9C-422B-AD1E-567E52D2654F}'] + { Property accessors } + function GetSourceName: String; + + { Methods } + /// <summary> + /// Advances the read position of the stream. Updates line and column state + /// </summary> + procedure Consume; + + /// <summary> + /// Get int at current input pointer + I ahead (where I=1 is next int) + /// Negative indexes are allowed. LA(-1) is previous token (token just matched). + /// LA(-i) where i is before first token should yield -1, invalid char or EOF. + /// </summary> + function LA(I: Integer): Integer; + function LAChar(I: Integer): Char; + + /// <summary>Tell the stream to start buffering if it hasn't already.</summary> + /// <remarks> + /// Executing Rewind(Mark()) on a stream should not affect the input position. + /// The Lexer tracks line/col info as well as input index so its markers are + /// not pure input indexes. Same for tree node streams. */ + /// </remarks> + /// <returns>Return a marker that can be passed to + /// <see cref="IIntStream.Rewind(Integer)"/> to return to the current position. + /// This could be the current input position, a value return from + /// <see cref="IIntStream.Index"/>, or some other marker.</returns> + function Mark: Integer; + + /// <summary> + /// Return the current input symbol index 0..N where N indicates the + /// last symbol has been read. The index is the symbol about to be + /// read not the most recently read symbol. + /// </summary> + function Index: Integer; + + /// <summary> + /// Resets the stream so that the next call to + /// <see cref="IIntStream.Index"/> would return marker. + /// </summary> + /// <remarks> + /// The marker will usually be <see cref="IIntStream.Index"/> but + /// it doesn't have to be. It's just a marker to indicate what + /// state the stream was in. This is essentially calling + /// <see cref="IIntStream.Release"/> and <see cref="IIntStream.Seek"/>. + /// If there are other markers created after the specified marker, + /// this routine must unroll them like a stack. Assumes the state the + /// stream was in when this marker was created. + /// </remarks> + procedure Rewind(const Marker: Integer); overload; + + /// <summary> + /// Rewind to the input position of the last marker. + /// </summary> + /// <remarks> + /// Used currently only after a cyclic DFA and just before starting + /// a sem/syn predicate to get the input position back to the start + /// of the decision. Do not "pop" the marker off the state. Mark(I) + /// and Rewind(I) should balance still. It is like invoking + /// Rewind(last marker) but it should not "pop" the marker off. + /// It's like Seek(last marker's input position). + /// </remarks> + procedure Rewind; overload; + + /// <summary> + /// You may want to commit to a backtrack but don't want to force the + /// stream to keep bookkeeping objects around for a marker that is + /// no longer necessary. This will have the same behavior as + /// <see cref="IIntStream.Rewind(Integer)"/> except it releases resources without + /// the backward seek. + /// </summary> + /// <remarks> + /// This must throw away resources for all markers back to the marker + /// argument. So if you're nested 5 levels of Mark(), and then Release(2) + /// you have to release resources for depths 2..5. + /// </remarks> + procedure Release(const Marker: Integer); + + /// <summary> + /// Set the input cursor to the position indicated by index. This is + /// normally used to seek ahead in the input stream. + /// </summary> + /// <remarks> + /// No buffering is required to do this unless you know your stream + /// will use seek to move backwards such as when backtracking. + /// + /// This is different from rewind in its multi-directional requirement + /// and in that its argument is strictly an input cursor (index). + /// + /// For char streams, seeking forward must update the stream state such + /// as line number. For seeking backwards, you will be presumably + /// backtracking using the + /// <see cref="IIntStream.Mark"/>/<see cref="IIntStream.Rewind(Integer)"/> + /// mechanism that restores state and so this method does not need to + /// update state when seeking backwards. + /// + /// Currently, this method is only used for efficient backtracking using + /// memoization, but in the future it may be used for incremental parsing. + /// + /// The index is 0..N-1. A seek to position i means that LA(1) will return + /// the ith symbol. So, seeking to 0 means LA(1) will return the first + /// element in the stream. + /// </remarks> + procedure Seek(const Index: Integer); + + /// <summary>Returns the size of the entire stream.</summary> + /// <remarks> + /// Only makes sense for streams that buffer everything up probably, + /// but might be useful to display the entire stream or for testing. + /// This value includes a single EOF. + /// </remarks> + function Size: Integer; + + { Properties } + + /// <summary> + /// Where are you getting symbols from? Normally, implementations will + /// pass the buck all the way to the lexer who can ask its input stream + /// for the file name or whatever. + /// </summary> + property SourceName: String read GetSourceName; + end; + + /// <summary>A source of characters for an ANTLR lexer </summary> + ICharStream = interface(IIntStream) + ['{C30EF0DB-F4BD-4CBC-8C8F-828DABB6FF36}'] + { Property accessors } + function GetLine: Integer; + procedure SetLine(const Value: Integer); + function GetCharPositionInLine: Integer; + procedure SetCharPositionInLine(const Value: Integer); + + { Methods } + + /// <summary> + /// Get the ith character of lookahead. This is usually the same as + /// LA(I). This will be used for labels in the generated lexer code. + /// I'd prefer to return a char here type-wise, but it's probably + /// better to be 32-bit clean and be consistent with LA. + /// </summary> + function LT(const I: Integer): Integer; + + /// <summary> + /// This primarily a useful interface for action code (just make sure + /// actions don't use this on streams that don't support it). + /// For infinite streams, you don't need this. + /// </summary> + function Substring(const Start, Stop: Integer): String; + + { Properties } + + /// <summary> + /// The current line in the character stream (ANTLR tracks the + /// line information automatically. To support rewinding character + /// streams, we are able to [re-]set the line. + /// </summary> + property Line: Integer read GetLine write SetLine; + + /// <summary> + /// The index of the character relative to the beginning of the + /// line (0..N-1). To support rewinding character streams, we are + /// able to [re-]set the character position. + /// </summary> + property CharPositionInLine: Integer read GetCharPositionInLine write SetCharPositionInLine; + end; + + IToken = interface(IANTLRInterface) + ['{73BF129C-2F45-4C68-838E-BF5D3536AC6D}'] + { Property accessors } + function GetTokenType: Integer; + procedure SetTokenType(const Value: Integer); + function GetLine: Integer; + procedure SetLine(const Value: Integer); + function GetCharPositionInLine: Integer; + procedure SetCharPositionInLine(const Value: Integer); + function GetChannel: Integer; + procedure SetChannel(const Value: Integer); + function GetTokenIndex: Integer; + procedure SetTokenIndex(const Value: Integer); + function GetText: String; + procedure SetText(const Value: String); + + { Properties } + property TokenType: Integer read GetTokenType write SetTokenType; + + /// <summary>The line number on which this token was matched; line=1..N</summary> + property Line: Integer read GetLine write SetLine; + + /// <summary> + /// The index of the first character relative to the beginning of the line 0..N-1 + /// </summary> + property CharPositionInLine: Integer read GetCharPositionInLine write SetCharPositionInLine; + + /// <summary>The line number on which this token was matched; line=1..N</summary> + property Channel: Integer read GetChannel write SetChannel; + + /// <summary> + /// An index from 0..N-1 of the token object in the input stream + /// </summary> + /// <remarks> + /// This must be valid in order to use the ANTLRWorks debugger. + /// </remarks> + property TokenIndex: Integer read GetTokenIndex write SetTokenIndex; + + /// <summary>The text of the token</summary> + /// <remarks> + /// When setting the text, it might be a NOP such as for the CommonToken, + /// which doesn't have string pointers, just indexes into a char buffer. + /// </remarks> + property Text: String read GetText write SetText; + end; + + /// <summary> + /// A source of tokens must provide a sequence of tokens via NextToken() + /// and also must reveal it's source of characters; CommonToken's text is + /// computed from a CharStream; it only store indices into the char stream. + /// + /// Errors from the lexer are never passed to the parser. Either you want + /// to keep going or you do not upon token recognition error. If you do not + /// want to continue lexing then you do not want to continue parsing. Just + /// throw an exception not under RecognitionException and Delphi will naturally + /// toss you all the way out of the recognizers. If you want to continue + /// lexing then you should not throw an exception to the parser--it has already + /// requested a token. Keep lexing until you get a valid one. Just report + /// errors and keep going, looking for a valid token. + /// </summary> + ITokenSource = interface(IANTLRInterface) + ['{2C71FAD0-AEEE-417D-B576-4059F7C4CEB4}'] + { Property accessors } + function GetSourceName: String; + + { Methods } + + /// <summary> + /// Returns a Token object from the input stream (usually a CharStream). + /// Does not fail/return upon lexing error; just keeps chewing on the + /// characters until it gets a good one; errors are not passed through + /// to the parser. + /// </summary> + function NextToken: IToken; + + { Properties } + + /// <summary> + /// Where are you getting tokens from? normally the implication will simply + /// ask lexers input stream. + /// </summary> + property SourceName: String read GetSourceName; + end; + + /// <summary>A stream of tokens accessing tokens from a TokenSource </summary> + ITokenStream = interface(IIntStream) + ['{59E5B39D-31A6-496D-9FA9-AC75CC584B68}'] + { Property accessors } + function GetTokenSource: ITokenSource; + procedure SetTokenSource(const Value: ITokenSource); + + { Methods } + + /// <summary> + /// Get Token at current input pointer + I ahead (where I=1 is next + /// Token). + /// I < 0 indicates tokens in the past. So -1 is previous token and -2 is + /// two tokens ago. LT(0) is undefined. For I>=N, return Token.EOFToken. + /// Return null for LT(0) and any index that results in an absolute address + /// that is negative. + /// </summary> + function LT(const K: Integer): IToken; + + /// <summary> + /// Get a token at an absolute index I; 0..N-1. This is really only + /// needed for profiling and debugging and token stream rewriting. + /// If you don't want to buffer up tokens, then this method makes no + /// sense for you. Naturally you can't use the rewrite stream feature. + /// I believe DebugTokenStream can easily be altered to not use + /// this method, removing the dependency. + /// </summary> + function Get(const I: Integer): IToken; + + /// <summary>Return the text of all tokens from start to stop, inclusive. + /// If the stream does not buffer all the tokens then it can just + /// return ''; Users should not access $ruleLabel.text in + /// an action of course in that case. + /// </summary> + function ToString(const Start, Stop: Integer): String; overload; + + /// <summary>Because the user is not required to use a token with an index stored + /// in it, we must provide a means for two token objects themselves to + /// indicate the start/end location. Most often this will just delegate + /// to the other ToString(Integer,Integer). This is also parallel with + /// the TreeNodeStream.ToString(Object,Object). + /// </summary> + function ToString(const Start, Stop: IToken): String; overload; + + { Properties } + property TokenSource: ITokenSource read GetTokenSource write SetTokenSource; + end; + + /// <summary> + /// This is the complete state of a stream. + /// + /// When walking ahead with cyclic DFA for syntactic predicates, we + /// need to record the state of the input stream (char index, line, + /// etc...) so that we can rewind the state after scanning ahead. + /// </summary> + ICharStreamState = interface(IANTLRInterface) + ['{62D2A1CD-ED3A-4C95-A366-AB8F2E54060B}'] + { Property accessors } + function GetP: Integer; + procedure SetP(const Value: Integer); + function GetLine: Integer; + procedure SetLine(const Value: Integer); + function GetCharPositionInLine: Integer; + procedure SetCharPositionInLine(const Value: Integer); + + { Properties } + /// <summary>Index into the char stream of next lookahead char </summary> + property P: Integer read GetP write SetP; + + /// <summary>What line number is the scanner at before processing buffer[P]? </summary> + property Line: Integer read GetLine write SetLine; + + /// <summary>What char position 0..N-1 in line is scanner before processing buffer[P]? </summary> + property CharPositionInLine: Integer read GetCharPositionInLine write SetCharPositionInLine; + end; + + /// <summary> + /// A pretty quick <see cref="ICharStream"/> that uses a character array + /// directly as it's underlying source. + /// </summary> + IANTLRStringStream = interface(ICharStream) + ['{2FA24299-FF97-4AB6-8CA6-5D3DA13C4AB2}'] + { Methods } + + /// <summary> + /// Resets the stream so that it is in the same state it was + /// when the object was created *except* the data array is not + /// touched. + /// </summary> + procedure Reset; + + end; + + /// <summary> + /// A character stream - an <see cref="ICharStream"/> - that loads + /// and caches the contents of it's underlying file fully during + /// object construction + /// </summary> + /// <remarks> + /// This looks very much like an ANTLReaderStream or an ANTLRInputStream + /// but, it is a special case. Since we know the exact size of the file to + /// load, we can avoid lots of data copying and buffer resizing. + /// </remarks> + IANTLRFileStream = interface(IANTLRStringStream) + ['{2B0145DB-2DAA-48A0-8316-B47A69EDDD1A}'] + { Methods } + + /// <summary> + /// Loads and buffers the specified file to be used as this + /// ANTLRFileStream's source + /// </summary> + /// <param name="FileName">File to load</param> + /// <param name="Encoding">Encoding to apply to file</param> + procedure Load(const FileName: String; const Encoding: TEncoding); + end; + + /// <summary> + /// A stripped-down version of org.antlr.misc.BitSet that is just + /// good enough to handle runtime requirements such as FOLLOW sets + /// for automatic error recovery. + /// </summary> + IBitSet = interface(IANTLRInterface) + ['{F2045045-FC46-4779-A65D-56C65D257A8E}'] + { Property accessors } + function GetIsNil: Boolean; + + { Methods } + + /// <summary>return "this or a" in a new set </summary> + function BitSetOr(const A: IBitSet): IBitSet; + + /// <summary>Or this element into this set (grow as necessary to accommodate)</summary> + procedure Add(const El: Integer); + + /// <summary> Grows the set to a larger number of bits.</summary> + /// <param name="bit">element that must fit in set + /// </param> + procedure GrowToInclude(const Bit: Integer); + + procedure OrInPlace(const A: IBitSet); + function Size: Integer; + function Member(const El: Integer): Boolean; + + // remove this element from this set + procedure Remove(const El: Integer); + + function NumBits: Integer; + + /// <summary>return how much space is being used by the bits array not + /// how many actually have member bits on. + /// </summary> + function LengthInLongWords: Integer; + + function ToArray: TIntegerArray; + function ToPackedArray: TUInt64Array; + + function ToString: String; overload; + function ToString(const TokenNames: TStringArray): String; overload; + function Equals(Obj: TObject): Boolean; + + { Properties } + property IsNil: Boolean read GetIsNil; + end; + TBitSetArray = array of IBitSet; + + /// <summary> + /// The set of fields needed by an abstract recognizer to recognize input + /// and recover from errors + /// </summary> + /// <remarks> + /// As a separate state object, it can be shared among multiple grammars; + /// e.g., when one grammar imports another. + /// These fields are publicly visible but the actual state pointer per + /// parser is protected. + /// </remarks> + IRecognizerSharedState = interface(IANTLRInterface) + ['{6CB6E17A-0B01-4AA7-8D49-5742A3CB8901}'] + { Property accessors } + function GetFollowing: TBitSetArray; + procedure SetFollowing(const Value: TBitSetArray); + function GetFollowingStackPointer: Integer; + procedure SetFollowingStackPointer(const Value: Integer); + function GetErrorRecovery: Boolean; + procedure SetErrorRecovery(const Value: Boolean); + function GetLastErrorIndex: Integer; + procedure SetLastErrorIndex(const Value: Integer); + function GetFailed: Boolean; + procedure SetFailed(const Value: Boolean); + function GetSyntaxErrors: Integer; + procedure SetSyntaxErrors(const Value: Integer); + function GetBacktracking: Integer; + procedure SetBacktracking(const Value: Integer); + function GetRuleMemo: TDictionaryArray<Integer, Integer>; + function GetRuleMemoCount: Integer; + procedure SetRuleMemoCount(const Value: Integer); + function GetToken: IToken; + procedure SetToken(const Value: IToken); + function GetTokenStartCharIndex: Integer; + procedure SetTokenStartCharIndex(const Value: Integer); + function GetTokenStartLine: Integer; + procedure SetTokenStartLine(const Value: Integer); + function GetTokenStartCharPositionInLine: Integer; + procedure SetTokenStartCharPositionInLine(const Value: Integer); + function GetChannel: Integer; + procedure SetChannel(const Value: Integer); + function GetTokenType: Integer; + procedure SetTokenType(const Value: Integer); + function GetText: String; + procedure SetText(const Value: String); + + { Properties } + + /// <summary> + /// Tracks the set of token types that can follow any rule invocation. + /// Stack grows upwards. When it hits the max, it grows 2x in size + /// and keeps going. + /// </summary> + property Following: TBitSetArray read GetFollowing write SetFollowing; + property FollowingStackPointer: Integer read GetFollowingStackPointer write SetFollowingStackPointer; + + /// <summary> + /// This is true when we see an error and before having successfully + /// matched a token. Prevents generation of more than one error message + /// per error. + /// </summary> + property ErrorRecovery: Boolean read GetErrorRecovery write SetErrorRecovery; + + /// <summary> + /// The index into the input stream where the last error occurred. + /// </summary> + /// <remarks> + /// This is used to prevent infinite loops where an error is found + /// but no token is consumed during recovery...another error is found, + /// ad naseum. This is a failsafe mechanism to guarantee that at least + /// one token/tree node is consumed for two errors. + /// </remarks> + property LastErrorIndex: Integer read GetLastErrorIndex write SetLastErrorIndex; + + /// <summary> + /// In lieu of a return value, this indicates that a rule or token + /// has failed to match. Reset to false upon valid token match. + /// </summary> + property Failed: Boolean read GetFailed write SetFailed; + + /// <summary> + /// Did the recognizer encounter a syntax error? Track how many. + /// </summary> + property SyntaxErrors: Integer read GetSyntaxErrors write SetSyntaxErrors; + + /// <summary> + /// If 0, no backtracking is going on. Safe to exec actions etc... + /// If >0 then it's the level of backtracking. + /// </summary> + property Backtracking: Integer read GetBacktracking write SetBacktracking; + + /// <summary> + /// An array[size num rules] of Map<Integer,Integer> that tracks + /// the stop token index for each rule. + /// </summary> + /// <remarks> + /// RuleMemo[RuleIndex] is the memoization table for RuleIndex. + /// For key RuleStartIndex, you get back the stop token for + /// associated rule or MEMO_RULE_FAILED. + /// + /// This is only used if rule memoization is on (which it is by default). + /// </remarks> + property RuleMemo: TDictionaryArray<Integer, Integer> read GetRuleMemo; + property RuleMemoCount: Integer read GetRuleMemoCount write SetRuleMemoCount; + + // Lexer Specific Members + // LEXER FIELDS (must be in same state object to avoid casting + // constantly in generated code and Lexer object) :( + + /// <summary> + /// Token object normally returned by NextToken() after matching lexer rules. + /// </summary> + /// <remarks> + /// The goal of all lexer rules/methods is to create a token object. + /// This is an instance variable as multiple rules may collaborate to + /// create a single token. NextToken will return this object after + /// matching lexer rule(s). If you subclass to allow multiple token + /// emissions, then set this to the last token to be matched or + /// something nonnull so that the auto token emit mechanism will not + /// emit another token. + /// </remarks> + property Token: IToken read GetToken write SetToken; + + /// <summary> + /// What character index in the stream did the current token start at? + /// </summary> + /// <remarks> + /// Needed, for example, to get the text for current token. Set at + /// the start of nextToken. + /// </remarks> + property TokenStartCharIndex: Integer read GetTokenStartCharIndex write SetTokenStartCharIndex; + + /// <summary> + /// The line on which the first character of the token resides + /// </summary> + property TokenStartLine: Integer read GetTokenStartLine write SetTokenStartLine; + + /// <summary>The character position of first character within the line</summary> + property TokenStartCharPositionInLine: Integer read GetTokenStartCharPositionInLine write SetTokenStartCharPositionInLine; + + /// <summary>The channel number for the current token</summary> + property Channel: Integer read GetChannel write SetChannel; + + /// <summary>The token type for the current token</summary> + property TokenType: Integer read GetTokenType write SetTokenType; + + /// <summary> + /// You can set the text for the current token to override what is in + /// the input char buffer. Use setText() or can set this instance var. + /// </summary> + property Text: String read GetText write SetText; + end; + + ICommonToken = interface(IToken) + ['{06B1B0C3-2A0D-477A-AE30-414F51ACE8A0}'] + { Property accessors } + function GetStartIndex: Integer; + procedure SetStartIndex(const Value: Integer); + function GetStopIndex: Integer; + procedure SetStopIndex(const Value: Integer); + function GetInputStream: ICharStream; + procedure SetInputStream(const Value: ICharStream); + + { Methods } + function ToString: String; + + { Properties } + property StartIndex: Integer read GetStartIndex write SetStartIndex; + property StopIndex: Integer read GetStopIndex write SetStopIndex; + property InputStream: ICharStream read GetInputStream write SetInputStream; + end; + + /// <summary> + /// A Token object like we'd use in ANTLR 2.x; has an actual string created + /// and associated with this object. These objects are needed for imaginary + /// tree nodes that have payload objects. We need to create a Token object + /// that has a string; the tree node will point at this token. CommonToken + /// has indexes into a char stream and hence cannot be used to introduce + /// new strings. + /// </summary> + IClassicToken = interface(IToken) + { Property accessors } + function GetTokenType: Integer; + procedure SetTokenType(const Value: Integer); + function GetLine: Integer; + procedure SetLine(const Value: Integer); + function GetCharPositionInLine: Integer; + procedure SetCharPositionInLine(const Value: Integer); + function GetChannel: Integer; + procedure SetChannel(const Value: Integer); + function GetTokenIndex: Integer; + procedure SetTokenIndex(const Value: Integer); + function GetText: String; + procedure SetText(const Value: String); + function GetInputStream: ICharStream; + procedure SetInputStream(const Value: ICharStream); + + { Properties } + property TokenType: Integer read GetTokenType write SetTokenType; + property Line: Integer read GetLine write SetLine; + property CharPositionInLine: Integer read GetCharPositionInLine write SetCharPositionInLine; + property Channel: Integer read GetChannel write SetChannel; + property TokenIndex: Integer read GetTokenIndex write SetTokenIndex; + property Text: String read GetText write SetText; + property InputStream: ICharStream read GetInputStream write SetInputStream; + end; + + /// <summary> + /// A generic recognizer that can handle recognizers generated from + /// lexer, parser, and tree grammars. This is all the parsing + /// support code essentially; most of it is error recovery stuff and + /// backtracking. + /// </summary> + IBaseRecognizer = interface(IANTLRObject) + ['{90813CE2-614B-4773-A26E-936E7DE7E9E9}'] + { Property accessors } + function GetInput: IIntStream; + function GetBacktrackingLevel: Integer; + function GetState: IRecognizerSharedState; + function GetNumberOfSyntaxErrors: Integer; + function GetGrammarFileName: String; + function GetSourceName: String; + function GetTokenNames: TStringArray; + + { Methods } + procedure BeginBacktrack(const Level: Integer); + procedure EndBacktrack(const Level: Integer; const Successful: Boolean); + + /// <summary>Reset the parser's state. Subclasses must rewind the input stream.</summary> + procedure Reset; + + /// <summary> + /// Match current input symbol against ttype. Attempt + /// single token insertion or deletion error recovery. If + /// that fails, throw EMismatchedTokenException. + /// </summary> + /// <remarks> + /// To turn off single token insertion or deletion error + /// recovery, override MismatchRecover() and have it call + /// plain Mismatch(), which does not recover. Then any error + /// in a rule will cause an exception and immediate exit from + /// rule. Rule would recover by resynchronizing to the set of + /// symbols that can follow rule ref. + /// </remarks> + function Match(const Input: IIntStream; const TokenType: Integer; + const Follow: IBitSet): IANTLRInterface; + + function MismatchIsUnwantedToken(const Input: IIntStream; + const TokenType: Integer): Boolean; + + function MismatchIsMissingToken(const Input: IIntStream; + const Follow: IBitSet): Boolean; + + /// <summary>A hook to listen in on the token consumption during error recovery. + /// The DebugParser subclasses this to fire events to the listenter. + /// </summary> + procedure BeginResync; + procedure EndResync; + + /// <summary> + /// Report a recognition problem. + /// </summary> + /// <remarks> + /// This method sets errorRecovery to indicate the parser is recovering + /// not parsing. Once in recovery mode, no errors are generated. + /// To get out of recovery mode, the parser must successfully Match + /// a token (after a resync). So it will go: + /// + /// 1. error occurs + /// 2. enter recovery mode, report error + /// 3. consume until token found in resynch set + /// 4. try to resume parsing + /// 5. next Match() will reset errorRecovery mode + /// + /// If you override, make sure to update syntaxErrors if you care about that. + /// </remarks> + procedure ReportError(const E: ERecognitionException); + + /// <summary> Match the wildcard: in a symbol</summary> + procedure MatchAny(const Input: IIntStream); + + procedure DisplayRecognitionError(const TokenNames: TStringArray; + const E: ERecognitionException); + + /// <summary> + /// What error message should be generated for the various exception types? + /// + /// Not very object-oriented code, but I like having all error message generation + /// within one method rather than spread among all of the exception classes. This + /// also makes it much easier for the exception handling because the exception + /// classes do not have to have pointers back to this object to access utility + /// routines and so on. Also, changing the message for an exception type would be + /// difficult because you would have to subclassing exception, but then somehow get + /// ANTLR to make those kinds of exception objects instead of the default. + /// + /// This looks weird, but trust me--it makes the most sense in terms of flexibility. + /// + /// For grammar debugging, you will want to override this to add more information + /// such as the stack frame with GetRuleInvocationStack(e, this.GetType().Fullname) + /// and, for no viable alts, the decision description and state etc... + /// + /// Override this to change the message generated for one or more exception types. + /// </summary> + function GetErrorMessage(const E: ERecognitionException; + const TokenNames: TStringArray): String; + + /// <summary> + /// What is the error header, normally line/character position information? + /// </summary> + function GetErrorHeader(const E: ERecognitionException): String; + + /// <summary> + /// How should a token be displayed in an error message? The default + /// is to display just the text, but during development you might + /// want to have a lot of information spit out. Override in that case + /// to use t.ToString() (which, for CommonToken, dumps everything about + /// the token). This is better than forcing you to override a method in + /// your token objects because you don't have to go modify your lexer + /// so that it creates a new type. + /// </summary> + function GetTokenErrorDisplay(const T: IToken): String; + + /// <summary> + /// Override this method to change where error messages go + /// </summary> + procedure EmitErrorMessage(const Msg: String); + + /// <summary> + /// Recover from an error found on the input stream. This is + /// for NoViableAlt and mismatched symbol exceptions. If you enable + /// single token insertion and deletion, this will usually not + /// handle mismatched symbol exceptions but there could be a mismatched + /// token that the Match() routine could not recover from. + /// </summary> + procedure Recover(const Input: IIntStream; const RE: ERecognitionException); + + // Not currently used + function RecoverFromMismatchedSet(const Input: IIntStream; + const E: ERecognitionException; const Follow: IBitSet): IANTLRInterface; + + procedure ConsumeUntil(const Input: IIntStream; const TokenType: Integer); overload; + + /// <summary>Consume tokens until one matches the given token set </summary> + procedure ConsumeUntil(const Input: IIntStream; const BitSet: IBitSet); overload; + + /// <summary> + /// Returns List <String> of the rules in your parser instance + /// leading up to a call to this method. You could override if + /// you want more details such as the file/line info of where + /// in the parser source code a rule is invoked. + /// </summary> + /// <remarks> + /// NOT IMPLEMENTED IN THE DELPHI VERSION YET + /// This is very useful for error messages and for context-sensitive + /// error recovery. + /// </remarks> + //function GetRuleInvocationStack: IList<IANTLRInterface>; overload; + + /// <summary> + /// A more general version of GetRuleInvocationStack where you can + /// pass in, for example, a RecognitionException to get it's rule + /// stack trace. This routine is shared with all recognizers, hence, + /// static. + /// + /// TODO: move to a utility class or something; weird having lexer call this + /// </summary> + /// <remarks> + /// NOT IMPLEMENTED IN THE DELPHI VERSION YET + /// </remarks> + //function GetRuleInvocationStack(const E: Exception; + // const RecognizerClassName: String): IList<IANTLRInterface>; overload; + + /// <summary>A convenience method for use most often with template rewrites. + /// Convert a List<Token> to List<String> + /// </summary> + function ToStrings(const Tokens: IList<IToken>): IList<String>; + + /// <summary> + /// Given a rule number and a start token index number, return + /// MEMO_RULE_UNKNOWN if the rule has not parsed input starting from + /// start index. If this rule has parsed input starting from the + /// start index before, then return where the rule stopped parsing. + /// It returns the index of the last token matched by the rule. + /// </summary> + /// <remarks> + /// For now we use a hashtable and just the slow Object-based one. + /// Later, we can make a special one for ints and also one that + /// tosses out data after we commit past input position i. + /// </remarks> + function GetRuleMemoization(const RuleIndex, RuleStartIndex: Integer): Integer; + + /// <summary> + /// Has this rule already parsed input at the current index in the + /// input stream? Return the stop token index or MEMO_RULE_UNKNOWN. + /// If we attempted but failed to parse properly before, return + /// MEMO_RULE_FAILED. + /// + /// This method has a side-effect: if we have seen this input for + /// this rule and successfully parsed before, then seek ahead to + /// 1 past the stop token matched for this rule last time. + /// </summary> + function AlreadyParsedRule(const Input: IIntStream; + const RuleIndex: Integer): Boolean; + + /// <summary> + /// Record whether or not this rule parsed the input at this position + /// successfully. Use a standard hashtable for now. + /// </summary> + procedure Memoize(const Input: IIntStream; const RuleIndex, + RuleStartIndex: Integer); + + /// <summary> + /// Return how many rule/input-index pairs there are in total. + /// TODO: this includes synpreds. :( + /// </summary> + /// <returns></returns> + function GetRuleMemoizationChaceSize: Integer; + + procedure TraceIn(const RuleName: String; const RuleIndex: Integer; + const InputSymbol: String); + procedure TraceOut(const RuleName: String; const RuleIndex: Integer; + const InputSymbol: String); + + { Properties } + property Input: IIntStream read GetInput; + property BacktrackingLevel: Integer read GetBacktrackingLevel; + property State: IRecognizerSharedState read GetState; + + /// <summary> + /// Get number of recognition errors (lexer, parser, tree parser). Each + /// recognizer tracks its own number. So parser and lexer each have + /// separate count. Does not count the spurious errors found between + /// an error and next valid token match + /// + /// See also ReportError() + /// </summary> + property NumberOfSyntaxErrors: Integer read GetNumberOfSyntaxErrors; + + /// <summary> + /// For debugging and other purposes, might want the grammar name. + /// Have ANTLR generate an implementation for this property. + /// </summary> + /// <returns></returns> + property GrammarFileName: String read GetGrammarFileName; + + /// <summary> + /// For debugging and other purposes, might want the source name. + /// Have ANTLR provide a hook for this property. + /// </summary> + /// <returns>The source name</returns> + property SourceName: String read GetSourceName; + + /// <summary> + /// Used to print out token names like ID during debugging and + /// error reporting. The generated parsers implement a method + /// that overrides this to point to their string[] tokenNames. + /// </summary> + property TokenNames: TStringArray read GetTokenNames; + end; + + /// <summary> + /// The most common stream of tokens is one where every token is buffered up + /// and tokens are prefiltered for a certain channel (the parser will only + /// see these tokens and cannot change the filter channel number during the + /// parse). + /// + /// TODO: how to access the full token stream? How to track all tokens matched per rule? + /// </summary> + ICommonTokenStream = interface(ITokenStream) + { Methods } + + /// <summary> + /// A simple filter mechanism whereby you can tell this token stream + /// to force all tokens of type TType to be on Channel. + /// </summary> + /// + /// <remarks> + /// For example, + /// when interpreting, we cannot exec actions so we need to tell + /// the stream to force all WS and NEWLINE to be a different, ignored + /// channel. + /// </remarks> + procedure SetTokenTypeChannel(const TType, Channel: Integer); + + procedure DiscardTokenType(const TType: Integer); + + procedure DiscardOffChannelTokens(const Discard: Boolean); + + function GetTokens: IList<IToken>; overload; + function GetTokens(const Start, Stop: Integer): IList<IToken>; overload; + + /// <summary>Given a start and stop index, return a List of all tokens in + /// the token type BitSet. Return null if no tokens were found. This + /// method looks at both on and off channel tokens. + /// </summary> + function GetTokens(const Start, Stop: Integer; + const Types: IBitSet): IList<IToken>; overload; + + function GetTokens(const Start, Stop: Integer; + const Types: IList<Integer>): IList<IToken>; overload; + + function GetTokens(const Start, Stop, + TokenType: Integer): IList<IToken>; overload; + + procedure Reset; + end; + + IDFA = interface; + + TSpecialStateTransitionHandler = function(const DFA: IDFA; S: Integer; + const Input: IIntStream): Integer of Object; + + /// <summary> + /// A DFA implemented as a set of transition tables. + /// </summary> + /// <remarks> + /// <para> + /// Any state that has a semantic predicate edge is special; those states are + /// generated with if-then-else structures in a SpecialStateTransition() + /// which is generated by cyclicDFA template. + /// </para> + /// <para> + /// There are at most 32767 states (16-bit signed short). Could get away with byte + /// sometimes but would have to generate different types and the simulation code too. + /// </para> + /// <para> + /// As a point of reference, the Tokens rule DFA for the lexer in the Java grammar + /// sample has approximately 326 states. + /// </para> + /// </remarks> + IDFA = interface(IANTLRInterface) + ['{36312B59-B718-48EF-A0EC-4529DE70F4C2}'] + { Property accessors } + function GetSpecialStateTransitionHandler: TSpecialStateTransitionHandler; + procedure SetSpecialStateTransitionHandler(const Value: TSpecialStateTransitionHandler); + + { Methods } + + /// <summary> + /// From the input stream, predict what alternative will succeed using this + /// DFA (representing the covering regular approximation to the underlying CFL). + /// </summary> + /// <param name="Input">Input stream</param> + /// <returns>Return an alternative number 1..N. Throw an exception upon error.</returns> + function Predict(const Input: IIntStream): Integer; + + /// <summary> + /// A hook for debugging interface + /// </summary> + /// <param name="NVAE"></param> + procedure Error(const NVAE: ENoViableAltException); + + function SpecialStateTransition(const S: Integer; const Input: IIntStream): Integer; + + function Description: String; + + function SpecialTransition(const State, Symbol: Integer): Integer; + + { Properties } + property SpecialStateTransitionHandler: TSpecialStateTransitionHandler read GetSpecialStateTransitionHandler write SetSpecialStateTransitionHandler; + end; + + /// <summary> + /// A lexer is recognizer that draws input symbols from a character stream. + /// lexer grammars result in a subclass of this object. A Lexer object + /// uses simplified Match() and error recovery mechanisms in the interest + /// of speed. + /// </summary> + ILexer = interface(IBaseRecognizer) + ['{331AAB49-E7CD-40E7-AEF5-427F7D6577AD}'] + { Property accessors } + function GetCharStream: ICharStream; + procedure SetCharStream(const Value: ICharStream); + function GetLine: Integer; + function GetCharPositionInLine: Integer; + function GetCharIndex: Integer; + function GetText: String; + procedure SetText(const Value: String); + + { Methods } + + /// <summary> + /// Return a token from this source; i.e., Match a token on the char stream. + /// </summary> + function NextToken: IToken; + + /// <summary> + /// Instruct the lexer to skip creating a token for current lexer rule and + /// look for another token. NextToken() knows to keep looking when a lexer + /// rule finishes with token set to SKIP_TOKEN. Recall that if token==null + /// at end of any token rule, it creates one for you and emits it. + /// </summary> + procedure Skip; + + /// <summary>This is the lexer entry point that sets instance var 'token' </summary> + procedure DoTokens; + + /// <summary> + /// Currently does not support multiple emits per nextToken invocation + /// for efficiency reasons. Subclass and override this method and + /// NextToken (to push tokens into a list and pull from that list rather + /// than a single variable as this implementation does). + /// </summary> + procedure Emit(const Token: IToken); overload; + + /// <summary> + /// The standard method called to automatically emit a token at the + /// outermost lexical rule. The token object should point into the + /// char buffer start..stop. If there is a text override in 'text', + /// use that to set the token's text. + /// </summary> + /// <remarks><para>Override this method to emit custom Token objects.</para> + /// <para>If you are building trees, then you should also override + /// Parser or TreeParser.GetMissingSymbol().</para> + ///</remarks> + function Emit: IToken; overload; + + procedure Match(const S: String); overload; + procedure Match(const C: Integer); overload; + procedure MatchAny; + procedure MatchRange(const A, B: Integer); + + /// <summary> + /// Lexers can normally Match any char in it's vocabulary after matching + /// a token, so do the easy thing and just kill a character and hope + /// it all works out. You can instead use the rule invocation stack + /// to do sophisticated error recovery if you are in a Fragment rule. + /// </summary> + procedure Recover(const RE: ERecognitionException); + + function GetCharErrorDisplay(const C: Integer): String; + + procedure TraceIn(const RuleName: String; const RuleIndex: Integer); + procedure TraceOut(const RuleName: String; const RuleIndex: Integer); + + { Properties } + + /// <summary>Set the char stream and reset the lexer </summary> + property CharStream: ICharStream read GetCharStream write SetCharStream; + property Line: Integer read GetLine; + property CharPositionInLine: Integer read GetCharPositionInLine; + + /// <summary>What is the index of the current character of lookahead? </summary> + property CharIndex: Integer read GetCharIndex; + + /// <summary> + /// Gets or sets the 'lexeme' for the current token. + /// </summary> + /// <remarks> + /// <para> + /// The getter returns the text matched so far for the current token or any + /// text override. + /// </para> + /// <para> + /// The setter sets the complete text of this token. It overrides/wipes any + /// previous changes to the text. + /// </para> + /// </remarks> + property Text: String read GetText write SetText; + end; + + /// <summary>A parser for TokenStreams. Parser grammars result in a subclass + /// of this. + /// </summary> + IParser = interface(IBaseRecognizer) + ['{7420879A-5D1F-43CA-BD49-2264D7514501}'] + { Property accessors } + function GetTokenStream: ITokenStream; + procedure SetTokenStream(const Value: ITokenStream); + + { Methods } + procedure TraceIn(const RuleName: String; const RuleIndex: Integer); + procedure TraceOut(const RuleName: String; const RuleIndex: Integer); + + { Properties } + + /// <summary>Set the token stream and reset the parser </summary> + property TokenStream: ITokenStream read GetTokenStream write SetTokenStream; + end; + + /// <summary> + /// Rules can return start/stop info as well as possible trees and templates + /// </summary> + IRuleReturnScope = interface(IANTLRInterface) + ['{E9870056-BF6D-4CB2-B71C-10B80797C0B4}'] + { Property accessors } + function GetStart: IANTLRInterface; + procedure SetStart(const Value: IANTLRInterface); + function GetStop: IANTLRInterface; + procedure SetStop(const Value: IANTLRInterface); + function GetTree: IANTLRInterface; + procedure SetTree(const Value: IANTLRInterface); + function GetTemplate: IANTLRInterface; + + { Properties } + + /// <summary>Return the start token or tree </summary> + property Start: IANTLRInterface read GetStart write SetStart; + + /// <summary>Return the stop token or tree </summary> + property Stop: IANTLRInterface read GetStop write SetStop; + + /// <summary>Has a value potentially if output=AST; </summary> + property Tree: IANTLRInterface read GetTree write SetTree; + + /// <summary> + /// Has a value potentially if output=template; + /// Don't use StringTemplate type to avoid dependency on ST assembly + /// </summary> + property Template: IANTLRInterface read GetTemplate; + end; + + /// <summary> + /// Rules that return more than a single value must return an object + /// containing all the values. Besides the properties defined in + /// RuleLabelScope.PredefinedRulePropertiesScope there may be user-defined + /// return values. This class simply defines the minimum properties that + /// are always defined and methods to access the others that might be + /// available depending on output option such as template and tree. + /// + /// Note text is not an actual property of the return value, it is computed + /// from start and stop using the input stream's ToString() method. I + /// could add a ctor to this so that we can pass in and store the input + /// stream, but I'm not sure we want to do that. It would seem to be undefined + /// to get the .text property anyway if the rule matches tokens from multiple + /// input streams. + /// + /// I do not use getters for fields of objects that are used simply to + /// group values such as this aggregate. + /// </summary> + IParserRuleReturnScope = interface(IRuleReturnScope) + ['{9FB62050-E23B-4FE4-87D5-2C1EE67AEC3E}'] + end; + + /// <summary>Useful for dumping out the input stream after doing some + /// augmentation or other manipulations. + /// </summary> + /// + /// <remarks> + /// You can insert stuff, Replace, and delete chunks. Note that the + /// operations are done lazily--only if you convert the buffer to a + /// String. This is very efficient because you are not moving data around + /// all the time. As the buffer of tokens is converted to strings, the + /// ToString() method(s) check to see if there is an operation at the + /// current index. If so, the operation is done and then normal String + /// rendering continues on the buffer. This is like having multiple Turing + /// machine instruction streams (programs) operating on a single input tape. :) + /// + /// Since the operations are done lazily at ToString-time, operations do not + /// screw up the token index values. That is, an insert operation at token + /// index I does not change the index values for tokens I+1..N-1. + /// + /// Because operations never actually alter the buffer, you may always get + /// the original token stream back without undoing anything. Since + /// the instructions are queued up, you can easily simulate transactions and + /// roll back any changes if there is an error just by removing instructions. + /// For example, + /// + /// var + /// Input: ICharStream; + /// Lex: ILexer; + /// Tokens: ITokenRewriteStream; + /// Parser: IParser; + /// Input := TANTLRFileStream.Create('input'); + /// Lex := TLexer.Create(Input); + /// Tokens := TTokenRewriteStream.Create(Lex); + /// Parser := TParser.Create(tokens); + /// Parser.startRule(); + /// + /// Then in the rules, you can execute + /// var + /// t,u: IToken; + /// ... + /// Input.InsertAfter(t, 'text to put after t'); + /// Input.InsertAfter(u, 'text after u'); + /// WriteLn(Tokens.ToString()); + /// + /// Actually, you have to cast the 'input' to a TokenRewriteStream. :( + /// + /// You can also have multiple "instruction streams" and get multiple + /// rewrites from a single pass over the input. Just name the instruction + /// streams and use that name again when printing the buffer. This could be + /// useful for generating a C file and also its header file--all from the + /// same buffer: + /// + /// Tokens.InsertAfter('pass1', t, 'text to put after t'); + /// Tokens.InsertAfter('pass2', u, 'text after u'); + /// WriteLn(Tokens.ToString('pass1')); + /// WriteLn(Tokens.ToString('pass2')); + /// + /// If you don't use named rewrite streams, a "default" stream is used as + /// the first example shows. + /// </remarks> + ITokenRewriteStream = interface(ICommonTokenStream) + ['{7B49CBB6-9395-4781-B616-F201889EEA13}'] + { Methods } + procedure Rollback(const InstructionIndex: Integer); overload; + + /// <summary>Rollback the instruction stream for a program so that + /// the indicated instruction (via instructionIndex) is no + /// longer in the stream. UNTESTED! + /// </summary> + procedure Rollback(const ProgramName: String; + const InstructionIndex: Integer); overload; + + procedure DeleteProgram; overload; + + /// <summary>Reset the program so that no instructions exist </summary> + procedure DeleteProgram(const ProgramName: String); overload; + + procedure InsertAfter(const T: IToken; const Text: IANTLRInterface); overload; + procedure InsertAfter(const Index: Integer; const Text: IANTLRInterface); overload; + procedure InsertAfter(const ProgramName: String; const T: IToken; + const Text: IANTLRInterface); overload; + procedure InsertAfter(const ProgramName: String; const Index: Integer; + const Text: IANTLRInterface); overload; + procedure InsertAfter(const T: IToken; const Text: String); overload; + procedure InsertAfter(const Index: Integer; const Text: String); overload; + procedure InsertAfter(const ProgramName: String; const T: IToken; + const Text: String); overload; + procedure InsertAfter(const ProgramName: String; const Index: Integer; + const Text: String); overload; + + procedure InsertBefore(const T: IToken; const Text: IANTLRInterface); overload; + procedure InsertBefore(const Index: Integer; const Text: IANTLRInterface); overload; + procedure InsertBefore(const ProgramName: String; const T: IToken; + const Text: IANTLRInterface); overload; + procedure InsertBefore(const ProgramName: String; const Index: Integer; + const Text: IANTLRInterface); overload; + procedure InsertBefore(const T: IToken; const Text: String); overload; + procedure InsertBefore(const Index: Integer; const Text: String); overload; + procedure InsertBefore(const ProgramName: String; const T: IToken; + const Text: String); overload; + procedure InsertBefore(const ProgramName: String; const Index: Integer; + const Text: String); overload; + + procedure Replace(const Index: Integer; const Text: IANTLRInterface); overload; + procedure Replace(const Start, Stop: Integer; const Text: IANTLRInterface); overload; + procedure Replace(const IndexT: IToken; const Text: IANTLRInterface); overload; + procedure Replace(const Start, Stop: IToken; const Text: IANTLRInterface); overload; + procedure Replace(const ProgramName: String; const Start, Stop: Integer; + const Text: IANTLRInterface); overload; + procedure Replace(const ProgramName: String; const Start, Stop: IToken; + const Text: IANTLRInterface); overload; + procedure Replace(const Index: Integer; const Text: String); overload; + procedure Replace(const Start, Stop: Integer; const Text: String); overload; + procedure Replace(const IndexT: IToken; const Text: String); overload; + procedure Replace(const Start, Stop: IToken; const Text: String); overload; + procedure Replace(const ProgramName: String; const Start, Stop: Integer; + const Text: String); overload; + procedure Replace(const ProgramName: String; const Start, Stop: IToken; + const Text: String); overload; + + procedure Delete(const Index: Integer); overload; + procedure Delete(const Start, Stop: Integer); overload; + procedure Delete(const IndexT: IToken); overload; + procedure Delete(const Start, Stop: IToken); overload; + procedure Delete(const ProgramName: String; const Start, Stop: Integer); overload; + procedure Delete(const ProgramName: String; const Start, Stop: IToken); overload; + + function GetLastRewriteTokenIndex: Integer; + + function ToOriginalString: String; overload; + function ToOriginalString(const Start, Stop: Integer): String; overload; + + function ToString(const ProgramName: String): String; overload; + function ToString(const ProgramName: String; + const Start, Stop: Integer): String; overload; + + function ToDebugString: String; overload; + function ToDebugString(const Start, Stop: Integer): String; overload; + end; + + /// <summary>The root of the ANTLR exception hierarchy.</summary> + /// <remarks> + /// To avoid English-only error messages and to generally make things + /// as flexible as possible, these exceptions are not created with strings, + /// but rather the information necessary to generate an error. Then + /// the various reporting methods in Parser and Lexer can be overridden + /// to generate a localized error message. For example, MismatchedToken + /// exceptions are built with the expected token type. + /// So, don't expect getMessage() to return anything. + /// + /// You can access the stack trace, which means that you can compute the + /// complete trace of rules from the start symbol. This gives you considerable + /// context information with which to generate useful error messages. + /// + /// ANTLR generates code that throws exceptions upon recognition error and + /// also generates code to catch these exceptions in each rule. If you + /// want to quit upon first error, you can turn off the automatic error + /// handling mechanism using rulecatch action, but you still need to + /// override methods mismatch and recoverFromMismatchSet. + /// + /// In general, the recognition exceptions can track where in a grammar a + /// problem occurred and/or what was the expected input. While the parser + /// knows its state (such as current input symbol and line info) that + /// state can change before the exception is reported so current token index + /// is computed and stored at exception time. From this info, you can + /// perhaps print an entire line of input not just a single token, for example. + /// Better to just say the recognizer had a problem and then let the parser + /// figure out a fancy report. + /// </remarks> + ERecognitionException = class(Exception) + strict private + FApproximateLineInfo: Boolean; + strict protected + /// <summary>What input stream did the error occur in? </summary> + FInput: IIntStream; + + /// <summary> + /// What is index of token/char were we looking at when the error occurred? + /// </summary> + FIndex: Integer; + + /// <summary> + /// The current Token when an error occurred. Since not all streams + /// can retrieve the ith Token, we have to track the Token object. + /// </summary> + FToken: IToken; + + /// <summary>[Tree parser] Node with the problem.</summary> + FNode: IANTLRInterface; + + /// <summary>The current char when an error occurred. For lexers. </summary> + FC: Integer; + + /// <summary>Track the line at which the error occurred in case this is + /// generated from a lexer. We need to track this since the + /// unexpected char doesn't carry the line info. + /// </summary> + FLine: Integer; + FCharPositionInLine: Integer; + strict protected + procedure ExtractInformationFromTreeNodeStream(const Input: IIntStream); + function GetUnexpectedType: Integer; virtual; + public + /// <summary>Used for remote debugger deserialization </summary> + constructor Create; overload; + constructor Create(const AMessage: String); overload; + constructor Create(const AInput: IIntStream); overload; + constructor Create(const AMessage: String; const AInput: IIntStream); overload; + + /// <summary> + /// If you are parsing a tree node stream, you will encounter some + /// imaginary nodes w/o line/col info. We now search backwards looking + /// for most recent token with line/col info, but notify getErrorHeader() + /// that info is approximate. + /// </summary> + property ApproximateLineInfo: Boolean read FApproximateLineInfo write FApproximateLineInfo; + + /// <summary> + /// Returns the current Token when the error occurred (for parsers + /// although a tree parser might also set the token) + /// </summary> + property Token: IToken read FToken write FToken; + + /// <summary> + /// Returns the [tree parser] node where the error occured (for tree parsers). + /// </summary> + property Node: IANTLRInterface read FNode write FNode; + + /// <summary> + /// Returns the line at which the error occurred (for lexers) + /// </summary> + property Line: Integer read FLine write FLine; + + /// <summary> + /// Returns the character position in the line when the error + /// occurred (for lexers) + /// </summary> + property CharPositionInLine: Integer read FCharPositionInLine write FCharPositionInLine; + + /// <summary>Returns the input stream in which the error occurred</summary> + property Input: IIntStream read FInput write FInput; + + /// <summary> + /// Returns the token type or char of the unexpected input element + /// </summary> + property UnexpectedType: Integer read GetUnexpectedType; + + /// <summary> + /// Returns the current char when the error occurred (for lexers) + /// </summary> + property Character: Integer read FC write FC; + + /// <summary> + /// Returns the token/char index in the stream when the error occurred + /// </summary> + property Index: Integer read FIndex write FIndex; + end; + + /// <summary> + /// A mismatched char or Token or tree node. + /// </summary> + EMismatchedTokenException = class(ERecognitionException) + strict private + FExpecting: Integer; + public + constructor Create(const AExpecting: Integer; const AInput: IIntStream); + + function ToString: String; override; + + property Expecting: Integer read FExpecting write FExpecting; + end; + + EUnwantedTokenException = class(EMismatchedTokenException) + strict private + function GetUnexpectedToken: IToken; + public + property UnexpectedToken: IToken read GetUnexpectedToken; + + function ToString: String; override; + end; + + /// <summary> + /// We were expecting a token but it's not found. The current token + /// is actually what we wanted next. Used for tree node errors too. + /// </summary> + EMissingTokenException = class(EMismatchedTokenException) + strict private + FInserted: IANTLRInterface; + function GetMissingType: Integer; + public + constructor Create(const AExpecting: Integer; const AInput: IIntStream; + const AInserted: IANTLRInterface); + + function ToString: String; override; + + property MissingType: Integer read GetMissingType; + property Inserted: IANTLRInterface read FInserted write FInserted; + end; + + EMismatchedTreeNodeException = class(ERecognitionException) + strict private + FExpecting: Integer; + public + constructor Create(const AExpecting: Integer; const AInput: IIntStream); + + function ToString: String; override; + + property Expecting: Integer read FExpecting write FExpecting; + end; + + ENoViableAltException = class(ERecognitionException) + strict private + FGrammarDecisionDescription: String; + FDecisionNumber: Integer; + FStateNumber: Integer; + public + constructor Create(const AGrammarDecisionDescription: String; + const ADecisionNumber, AStateNumber: Integer; const AInput: IIntStream); + + function ToString: String; override; + + property GrammarDecisionDescription: String read FGrammarDecisionDescription; + property DecisionNumber: Integer read FDecisionNumber; + property StateNumber: Integer read FStateNumber; + end; + + EEarlyExitException = class(ERecognitionException) + strict private + FDecisionNumber: Integer; + public + constructor Create(const ADecisionNumber: Integer; const AInput: IIntStream); + + property DecisionNumber: Integer read FDecisionNumber; + end; + + EMismatchedSetException = class(ERecognitionException) + strict private + FExpecting: IBitSet; + public + constructor Create(const AExpecting: IBitSet; const AInput: IIntStream); + + function ToString: String; override; + + property Expecting: IBitSet read FExpecting write FExpecting; + end; + + EMismatchedNotSetException = class(EMismatchedSetException) + + public + function ToString: String; override; + end; + + EFailedPredicateException = class(ERecognitionException) + strict private + FRuleName: String; + FPredicateText: String; + public + constructor Create(const AInput: IIntStream; const ARuleName, + APredicateText: String); + + function ToString: String; override; + + property RuleName: String read FRuleName write FRuleName; + property PredicateText: String read FPredicateText write FPredicateText; + end; + + EMismatchedRangeException = class(ERecognitionException) + strict private + FA: Integer; + FB: Integer; + public + constructor Create(const AA, AB: Integer; const AInput: IIntStream); + + function ToString: String; override; + + property A: Integer read FA write FA; + property B: Integer read FB write FB; + end; + +type + TCharStreamState = class(TANTLRObject, ICharStreamState) + strict private + FP: Integer; + FLine: Integer; + FCharPositionInLine: Integer; + protected + { ICharStreamState } + function GetP: Integer; + procedure SetP(const Value: Integer); + function GetLine: Integer; + procedure SetLine(const Value: Integer); + function GetCharPositionInLine: Integer; + procedure SetCharPositionInLine(const Value: Integer); + end; + +type + TANTLRStringStream = class(TANTLRObject, IANTLRStringStream, ICharStream) + private + FData: PChar; + FOwnsData: Boolean; + + /// <summary>How many characters are actually in the buffer?</summary> + FN: Integer; + + /// <summary>Current line number within the input (1..n )</summary> + FLine: Integer; + + /// <summary>Index in our array for the next char (0..n-1)</summary> + FP: Integer; + + /// <summary> + /// The index of the character relative to the beginning of the + /// line (0..n-1) + /// </summary> + FCharPositionInLine: Integer; + + /// <summary> + /// Tracks the depth of nested <see cref="IIntStream.Mark"/> calls + /// </summary> + FMarkDepth: Integer; + + /// <summary> + /// A list of CharStreamState objects that tracks the stream state + /// (i.e. line, charPositionInLine, and p) that can change as you + /// move through the input stream. Indexed from 1..markDepth. + /// A null is kept @ index 0. Create upon first call to Mark(). + /// </summary> + FMarkers: IList<ICharStreamState>; + + /// <summary> + /// Track the last Mark() call result value for use in Rewind(). + /// </summary> + FLastMarker: Integer; + /// <summary> + /// What is name or source of this char stream? + /// </summary> + FName: String; + protected + { IIntStream } + function GetSourceName: String; virtual; + + procedure Consume; virtual; + function LA(I: Integer): Integer; virtual; + function LAChar(I: Integer): Char; + function Index: Integer; + function Size: Integer; + function Mark: Integer; virtual; + procedure Rewind(const Marker: Integer); overload; virtual; + procedure Rewind; overload; virtual; + procedure Release(const Marker: Integer); virtual; + procedure Seek(const Index: Integer); virtual; + + property SourceName: String read GetSourceName write FName; + protected + { ICharStream } + function GetLine: Integer; virtual; + procedure SetLine(const Value: Integer); virtual; + function GetCharPositionInLine: Integer; virtual; + procedure SetCharPositionInLine(const Value: Integer); virtual; + function LT(const I: Integer): Integer; virtual; + function Substring(const Start, Stop: Integer): String; virtual; + protected + { IANTLRStringStream } + procedure Reset; virtual; + public + constructor Create; overload; + + /// <summary> + /// Initializes a new instance of the ANTLRStringStream class for the + /// specified string. This copies data from the string to a local + /// character array + /// </summary> + constructor Create(const AInput: String); overload; + + /// <summary> + /// Initializes a new instance of the ANTLRStringStream class for the + /// specified character array. This is the preferred constructor as + /// no data is copied + /// </summary> + constructor Create(const AData: PChar; + const ANumberOfActualCharsInArray: Integer); overload; + + destructor Destroy; override; + end; + + TANTLRFileStream = class(TANTLRStringStream, IANTLRFileStream) + strict private + /// <summary>Fully qualified name of the stream's underlying file</summary> + FFileName: String; + protected + { IIntStream } + function GetSourceName: String; override; + protected + { IANTLRFileStream } + + procedure Load(const FileName: String; const Encoding: TEncoding); virtual; + public + /// <summary> + /// Initializes a new instance of the ANTLRFileStream class for the + /// specified file name + /// </summary> + constructor Create(const AFileName: String); overload; + + /// <summary> + /// Initializes a new instance of the ANTLRFileStream class for the + /// specified file name and encoding + /// </summary> + constructor Create(const AFileName: String; const AEncoding: TEncoding); overload; + end; + + TBitSet = class(TANTLRObject, IBitSet, ICloneable) + strict private + const + BITS = 64; // number of bits / ulong + LOG_BITS = 6; // 2 shl 6 = 64 + + ///<summary> We will often need to do a mod operator (i mod nbits). + /// Its turns out that, for powers of two, this mod operation is + /// same as <![CDATA[(I and (nbits-1))]]>. Since mod is slow, we use a precomputed + /// mod mask to do the mod instead. + /// </summary> + MOD_MASK = BITS - 1; + strict private + /// <summary>The actual data bits </summary> + FBits: TUInt64Array; + strict private + class function WordNumber(const Bit: Integer): Integer; static; + class function BitMask(const BitNumber: Integer): UInt64; static; + class function NumWordsToHold(const El: Integer): Integer; static; + protected + { ICloneable } + function Clone: IANTLRInterface; virtual; + protected + { IBitSet } + function GetIsNil: Boolean; virtual; + function BitSetOr(const A: IBitSet): IBitSet; virtual; + procedure Add(const El: Integer); virtual; + procedure GrowToInclude(const Bit: Integer); virtual; + procedure OrInPlace(const A: IBitSet); virtual; + function Size: Integer; virtual; + function Member(const El: Integer): Boolean; virtual; + procedure Remove(const El: Integer); virtual; + function NumBits: Integer; virtual; + function LengthInLongWords: Integer; virtual; + function ToArray: TIntegerArray; virtual; + function ToPackedArray: TUInt64Array; virtual; + function ToString(const TokenNames: TStringArray): String; reintroduce; overload; virtual; + public + /// <summary>Construct a bitset of size one word (64 bits) </summary> + constructor Create; overload; + + /// <summary>Construction from a static array of ulongs </summary> + constructor Create(const ABits: array of UInt64); overload; + + /// <summary>Construction from a list of integers </summary> + constructor Create(const AItems: IList<Integer>); overload; + + /// <summary>Construct a bitset given the size</summary> + /// <param name="nbits">The size of the bitset in bits</param> + constructor Create(const ANBits: Integer); overload; + + class function BitSetOf(const El: Integer): IBitSet; overload; static; + class function BitSetOf(const A, B: Integer): IBitSet; overload; static; + class function BitSetOf(const A, B, C: Integer): IBitSet; overload; static; + class function BitSetOf(const A, B, C, D: Integer): IBitSet; overload; static; + + function ToString: String; overload; override; + function Equals(Obj: TObject): Boolean; override; + end; + + TRecognizerSharedState = class(TANTLRObject, IRecognizerSharedState) + strict private + FFollowing: TBitSetArray; + FFollowingStackPointer: Integer; + FErrorRecovery: Boolean; + FLastErrorIndex: Integer; + FFailed: Boolean; + FSyntaxErrors: Integer; + FBacktracking: Integer; + FRuleMemo: TDictionaryArray<Integer, Integer>; + FToken: IToken; + FTokenStartCharIndex: Integer; + FTokenStartLine: Integer; + FTokenStartCharPositionInLine: Integer; + FChannel: Integer; + FTokenType: Integer; + FText: String; + protected + { IRecognizerSharedState } + function GetFollowing: TBitSetArray; + procedure SetFollowing(const Value: TBitSetArray); + function GetFollowingStackPointer: Integer; + procedure SetFollowingStackPointer(const Value: Integer); + function GetErrorRecovery: Boolean; + procedure SetErrorRecovery(const Value: Boolean); + function GetLastErrorIndex: Integer; + procedure SetLastErrorIndex(const Value: Integer); + function GetFailed: Boolean; + procedure SetFailed(const Value: Boolean); + function GetSyntaxErrors: Integer; + procedure SetSyntaxErrors(const Value: Integer); + function GetBacktracking: Integer; + procedure SetBacktracking(const Value: Integer); + function GetRuleMemo: TDictionaryArray<Integer, Integer>; + function GetRuleMemoCount: Integer; + procedure SetRuleMemoCount(const Value: Integer); + function GetToken: IToken; + procedure SetToken(const Value: IToken); + function GetTokenStartCharIndex: Integer; + procedure SetTokenStartCharIndex(const Value: Integer); + function GetTokenStartLine: Integer; + procedure SetTokenStartLine(const Value: Integer); + function GetTokenStartCharPositionInLine: Integer; + procedure SetTokenStartCharPositionInLine(const Value: Integer); + function GetChannel: Integer; + procedure SetChannel(const Value: Integer); + function GetTokenType: Integer; + procedure SetTokenType(const Value: Integer); + function GetText: String; + procedure SetText(const Value: String); + public + constructor Create; + end; + + TCommonToken = class(TANTLRObject, ICommonToken, IToken) + strict protected + FTokenType: Integer; + FLine: Integer; + FCharPositionInLine: Integer; + FChannel: Integer; + FInput: ICharStream; + + /// <summary>We need to be able to change the text once in a while. If + /// this is non-null, then getText should return this. Note that + /// start/stop are not affected by changing this. + /// </summary> + FText: String; + + /// <summary>What token number is this from 0..n-1 tokens; < 0 implies invalid index </summary> + FIndex: Integer; + + /// <summary>The char position into the input buffer where this token starts </summary> + FStart: Integer; + + /// <summary>The char position into the input buffer where this token stops </summary> + FStop: Integer; + protected + { IToken } + function GetTokenType: Integer; virtual; + procedure SetTokenType(const Value: Integer); virtual; + function GetLine: Integer; virtual; + procedure SetLine(const Value: Integer); virtual; + function GetCharPositionInLine: Integer; virtual; + procedure SetCharPositionInLine(const Value: Integer); virtual; + function GetChannel: Integer; virtual; + procedure SetChannel(const Value: Integer); virtual; + function GetTokenIndex: Integer; virtual; + procedure SetTokenIndex(const Value: Integer); virtual; + function GetText: String; virtual; + procedure SetText(const Value: String); virtual; + protected + { ICommonToken } + function GetStartIndex: Integer; + procedure SetStartIndex(const Value: Integer); + function GetStopIndex: Integer; + procedure SetStopIndex(const Value: Integer); + function GetInputStream: ICharStream; + procedure SetInputStream(const Value: ICharStream); + protected + constructor Create; overload; + public + constructor Create(const ATokenType: Integer); overload; + constructor Create(const AInput: ICharStream; const ATokenType, AChannel, + AStart, AStop: Integer); overload; + constructor Create(const ATokenType: Integer; const AText: String); overload; + constructor Create(const AOldToken: IToken); overload; + + function ToString: String; override; + end; + + TClassicToken = class(TANTLRObject, IClassicToken, IToken) + strict private + FText: String; + FTokenType: Integer; + FLine: Integer; + FCharPositionInLine: Integer; + FChannel: Integer; + + /// <summary>What token number is this from 0..n-1 tokens </summary> + FIndex: Integer; + protected + { IClassicToken } + function GetTokenType: Integer; virtual; + procedure SetTokenType(const Value: Integer); virtual; + function GetLine: Integer; virtual; + procedure SetLine(const Value: Integer); virtual; + function GetCharPositionInLine: Integer; virtual; + procedure SetCharPositionInLine(const Value: Integer); virtual; + function GetChannel: Integer; virtual; + procedure SetChannel(const Value: Integer); virtual; + function GetTokenIndex: Integer; virtual; + procedure SetTokenIndex(const Value: Integer); virtual; + function GetText: String; virtual; + procedure SetText(const Value: String); virtual; + function GetInputStream: ICharStream; virtual; + procedure SetInputStream(const Value: ICharStream); virtual; + public + constructor Create(const ATokenType: Integer); overload; + constructor Create(const AOldToken: IToken); overload; + constructor Create(const ATokenType: Integer; const AText: String); overload; + constructor Create(const ATokenType: Integer; const AText: String; + const AChannel: Integer); overload; + + function ToString: String; override; + end; + + TToken = class sealed + public + const + EOR_TOKEN_TYPE = 1; + + /// <summary>imaginary tree navigation type; traverse "get child" link </summary> + DOWN = 2; + + /// <summary>imaginary tree navigation type; finish with a child list </summary> + UP = 3; + + MIN_TOKEN_TYPE = UP + 1; + EOF = Integer(cscEOF); + INVALID_TOKEN_TYPE = 0; + + /// <summary> + /// All tokens go to the parser (unless skip() is called in that rule) + /// on a particular "channel". The parser tunes to a particular channel + /// so that whitespace etc... can go to the parser on a "hidden" channel. + /// </summary> + DEFAULT_CHANNEL = 0; + + /// <summary> + /// Anything on different channel than DEFAULT_CHANNEL is not parsed by parser. + /// </summary> + HIDDEN_CHANNEL = 99; + public + class var + EOF_TOKEN: IToken; + INVALID_TOKEN: IToken; + /// <summary> + /// In an action, a lexer rule can set token to this SKIP_TOKEN and ANTLR + /// will avoid creating a token for this symbol and try to fetch another. + /// </summary> + SKIP_TOKEN: IToken; + private + class procedure Initialize; static; + end; + + /// <summary> + /// Global constants + /// </summary> + TConstants = class sealed + public + const + VERSION = '3.1b1'; + + // Moved to version 2 for v3.1: added grammar name to enter/exit Rule + DEBUG_PROTOCOL_VERSION = '2'; + + ANTLRWORKS_DIR = 'antlrworks'; + end; + + TBaseRecognizer = class abstract(TANTLRObject, IBaseRecognizer) + public + const + MEMO_RULE_FAILED = -2; + MEMO_RULE_UNKNOWN = -1; + INITIAL_FOLLOW_STACK_SIZE = 100; + NEXT_TOKEN_RULE_NAME = 'nextToken'; + // copies from Token object for convenience in actions + DEFAULT_TOKEN_CHANNEL = TToken.DEFAULT_CHANNEL; + HIDDEN = TToken.HIDDEN_CHANNEL; + strict protected + /// <summary> + /// An externalized representation of the - shareable - internal state of + /// this lexer, parser or tree parser. + /// </summary> + /// <remarks> + /// The state of a lexer, parser, or tree parser are collected into + /// external state objects so that the state can be shared. This sharing + /// is needed to have one grammar import others and share same error + /// variables and other state variables. It's a kind of explicit multiple + /// inheritance via delegation of methods and shared state. + /// </remarks> + FState: IRecognizerSharedState; + + property State: IRecognizerSharedState read FState; + strict protected + /// <summary> + /// Match needs to return the current input symbol, which gets put + /// into the label for the associated token ref; e.g., x=ID. Token + /// and tree parsers need to return different objects. Rather than test + /// for input stream type or change the IntStream interface, I use + /// a simple method to ask the recognizer to tell me what the current + /// input symbol is. + /// </summary> + /// <remarks>This is ignored for lexers.</remarks> + function GetCurrentInputSymbol(const Input: IIntStream): IANTLRInterface; virtual; + + /// <summary> + /// Factor out what to do upon token mismatch so tree parsers can behave + /// differently. Override and call MismatchRecover(input, ttype, follow) + /// to get single token insertion and deletion. Use this to turn off + /// single token insertion and deletion. Override mismatchRecover + /// to call this instead. + /// </summary> + procedure Mismatch(const Input: IIntStream; const TokenType: Integer; + const Follow: IBitSet); virtual; + + /// <summary> + /// Attempt to Recover from a single missing or extra token. + /// </summary> + /// <remarks> + /// EXTRA TOKEN + /// + /// LA(1) is not what we are looking for. If LA(2) has the right token, + /// however, then assume LA(1) is some extra spurious token. Delete it + /// and LA(2) as if we were doing a normal Match(), which advances the + /// input. + /// + /// MISSING TOKEN + /// + /// If current token is consistent with what could come after + /// ttype then it is ok to "insert" the missing token, else throw + /// exception For example, Input "i=(3;" is clearly missing the + /// ')'. When the parser returns from the nested call to expr, it + /// will have call chain: + /// + /// stat -> expr -> atom + /// + /// and it will be trying to Match the ')' at this point in the + /// derivation: + /// + /// => ID '=' '(' INT ')' ('+' atom)* ';' + /// ^ + /// Match() will see that ';' doesn't Match ')' and report a + /// mismatched token error. To Recover, it sees that LA(1)==';' + /// is in the set of tokens that can follow the ')' token + /// reference in rule atom. It can assume that you forgot the ')'. + /// </remarks> + function RecoverFromMismatchedToken(const Input: IIntStream; + const TokenType: Integer; const Follow: IBitSet): IANTLRInterface; virtual; + + /// <summary> + /// Conjure up a missing token during error recovery. + /// </summary> + /// <remarks> + /// The recognizer attempts to recover from single missing + /// symbols. But, actions might refer to that missing symbol. + /// For example, x=ID {f($x);}. The action clearly assumes + /// that there has been an identifier matched previously and that + /// $x points at that token. If that token is missing, but + /// the next token in the stream is what we want we assume that + /// this token is missing and we keep going. Because we + /// have to return some token to replace the missing token, + /// we have to conjure one up. This method gives the user control + /// over the tokens returned for missing tokens. Mostly, + /// you will want to create something special for identifier + /// tokens. For literals such as '{' and ',', the default + /// action in the parser or tree parser works. It simply creates + /// a CommonToken of the appropriate type. The text will be the token. + /// If you change what tokens must be created by the lexer, + /// override this method to create the appropriate tokens. + /// </remarks> + function GetMissingSymbol(const Input: IIntStream; + const E: ERecognitionException; const ExpectedTokenType: Integer; + const Follow: IBitSet): IANTLRInterface; virtual; + + /// <summary> + /// Push a rule's follow set using our own hardcoded stack + /// </summary> + /// <param name="fset"></param> + procedure PushFollow(const FSet: IBitSet); + + /// <summary>Compute the context-sensitive FOLLOW set for current rule. + /// This is set of token types that can follow a specific rule + /// reference given a specific call chain. You get the set of + /// viable tokens that can possibly come next (lookahead depth 1) + /// given the current call chain. Contrast this with the + /// definition of plain FOLLOW for rule r: + /// + /// FOLLOW(r)={x | S=>*alpha r beta in G and x in FIRST(beta)} + /// + /// where x in T* and alpha, beta in V*; T is set of terminals and + /// V is the set of terminals and nonterminals. In other words, + /// FOLLOW(r) is the set of all tokens that can possibly follow + /// references to r in *any* sentential form (context). At + /// runtime, however, we know precisely which context applies as + /// we have the call chain. We may compute the exact (rather + /// than covering superset) set of following tokens. + /// + /// For example, consider grammar: + /// + /// stat : ID '=' expr ';' // FOLLOW(stat)=={EOF} + /// | "return" expr '.' + /// ; + /// expr : atom ('+' atom)* ; // FOLLOW(expr)=={';','.',')'} + /// atom : INT // FOLLOW(atom)=={'+',')',';','.'} + /// | '(' expr ')' + /// ; + /// + /// The FOLLOW sets are all inclusive whereas context-sensitive + /// FOLLOW sets are precisely what could follow a rule reference. + /// For input input "i=(3);", here is the derivation: + /// + /// stat => ID '=' expr ';' + /// => ID '=' atom ('+' atom)* ';' + /// => ID '=' '(' expr ')' ('+' atom)* ';' + /// => ID '=' '(' atom ')' ('+' atom)* ';' + /// => ID '=' '(' INT ')' ('+' atom)* ';' + /// => ID '=' '(' INT ')' ';' + /// + /// At the "3" token, you'd have a call chain of + /// + /// stat -> expr -> atom -> expr -> atom + /// + /// What can follow that specific nested ref to atom? Exactly ')' + /// as you can see by looking at the derivation of this specific + /// input. Contrast this with the FOLLOW(atom)={'+',')',';','.'}. + /// + /// You want the exact viable token set when recovering from a + /// token mismatch. Upon token mismatch, if LA(1) is member of + /// the viable next token set, then you know there is most likely + /// a missing token in the input stream. "Insert" one by just not + /// throwing an exception. + /// </summary> + function ComputeContextSensitiveRuleFOLLOW: IBitSet; virtual; + + (* Compute the error recovery set for the current rule. During + * rule invocation, the parser pushes the set of tokens that can + * follow that rule reference on the stack; this amounts to + * computing FIRST of what follows the rule reference in the + * enclosing rule. This local follow set only includes tokens + * from within the rule; i.e., the FIRST computation done by + * ANTLR stops at the end of a rule. + * + * EXAMPLE + * + * When you find a "no viable alt exception", the input is not + * consistent with any of the alternatives for rule r. The best + * thing to do is to consume tokens until you see something that + * can legally follow a call to r *or* any rule that called r. + * You don't want the exact set of viable next tokens because the + * input might just be missing a token--you might consume the + * rest of the input looking for one of the missing tokens. + * + * Consider grammar: + * + * a : '[' b ']' + * | '(' b ')' + * ; + * b : c '^' INT ; + * c : ID + * | INT + * ; + * + * At each rule invocation, the set of tokens that could follow + * that rule is pushed on a stack. Here are the various "local" + * follow sets: + * + * FOLLOW(b1_in_a) = FIRST(']') = ']' + * FOLLOW(b2_in_a) = FIRST(')') = ')' + * FOLLOW(c_in_b) = FIRST('^') = '^' + * + * Upon erroneous input "[]", the call chain is + * + * a -> b -> c + * + * and, hence, the follow context stack is: + * + * depth local follow set after call to rule + * 0 <EOF> a (from main()) + * 1 ']' b + * 3 '^' c + * + * Notice that ')' is not included, because b would have to have + * been called from a different context in rule a for ')' to be + * included. + * + * For error recovery, we cannot consider FOLLOW(c) + * (context-sensitive or otherwise). We need the combined set of + * all context-sensitive FOLLOW sets--the set of all tokens that + * could follow any reference in the call chain. We need to + * resync to one of those tokens. Note that FOLLOW(c)='^' and if + * we resync'd to that token, we'd consume until EOF. We need to + * sync to context-sensitive FOLLOWs for a, b, and c: {']','^'}. + * In this case, for input "[]", LA(1) is in this set so we would + * not consume anything and after printing an error rule c would + * return normally. It would not find the required '^' though. + * At this point, it gets a mismatched token error and throws an + * exception (since LA(1) is not in the viable following token + * set). The rule exception handler tries to Recover, but finds + * the same recovery set and doesn't consume anything. Rule b + * exits normally returning to rule a. Now it finds the ']' (and + * with the successful Match exits errorRecovery mode). + * + * So, you cna see that the parser walks up call chain looking + * for the token that was a member of the recovery set. + * + * Errors are not generated in errorRecovery mode. + * + * ANTLR's error recovery mechanism is based upon original ideas: + * + * "Algorithms + Data Structures = Programs" by Niklaus Wirth + * + * and + * + * "A note on error recovery in recursive descent parsers": + * http://portal.acm.org/citation.cfm?id=947902.947905 + * + * Later, Josef Grosch had some good ideas: + * + * "Efficient and Comfortable Error Recovery in Recursive Descent + * Parsers": + * ftp://www.cocolab.com/products/cocktail/doca4.ps/ell.ps.zip + * + * Like Grosch I implemented local FOLLOW sets that are combined + * at run-time upon error to avoid overhead during parsing. + *) + function ComputeErrorRecoverySet: IBitSet; virtual; + + function CombineFollows(const Exact: Boolean): IBitSet; + protected + { IBaseRecognizer } + function GetInput: IIntStream; virtual; abstract; + function GetBacktrackingLevel: Integer; + function GetState: IRecognizerSharedState; + function GetNumberOfSyntaxErrors: Integer; + function GetGrammarFileName: String; virtual; + function GetSourceName: String; virtual; abstract; + function GetTokenNames: TStringArray; virtual; + + procedure BeginBacktrack(const Level: Integer); virtual; + procedure EndBacktrack(const Level: Integer; const Successful: Boolean); virtual; + procedure Reset; virtual; + function Match(const Input: IIntStream; const TokenType: Integer; + const Follow: IBitSet): IANTLRInterface; virtual; + function MismatchIsUnwantedToken(const Input: IIntStream; + const TokenType: Integer): Boolean; + function MismatchIsMissingToken(const Input: IIntStream; + const Follow: IBitSet): Boolean; + procedure BeginResync; virtual; + procedure EndResync; virtual; + procedure ReportError(const E: ERecognitionException); virtual; + procedure MatchAny(const Input: IIntStream); virtual; + procedure DisplayRecognitionError(const TokenNames: TStringArray; + const E: ERecognitionException); virtual; + function GetErrorMessage(const E: ERecognitionException; + const TokenNames: TStringArray): String; virtual; + function GetErrorHeader(const E: ERecognitionException): String; virtual; + function GetTokenErrorDisplay(const T: IToken): String; virtual; + procedure EmitErrorMessage(const Msg: String); virtual; + procedure Recover(const Input: IIntStream; const RE: ERecognitionException); virtual; + function RecoverFromMismatchedSet(const Input: IIntStream; + const E: ERecognitionException; const Follow: IBitSet): IANTLRInterface; virtual; + procedure ConsumeUntil(const Input: IIntStream; const TokenType: Integer); overload; virtual; + procedure ConsumeUntil(const Input: IIntStream; const BitSet: IBitSet); overload; virtual; + //function GetRuleInvocationStack: IList<IANTLRInterface>; overload; virtual; + //function GetRuleInvocationStack(const E: Exception; + // const RecognizerClassName: String): IList<IANTLRInterface>; overload; + function ToStrings(const Tokens: IList<IToken>): IList<String>; virtual; + function GetRuleMemoization(const RuleIndex, RuleStartIndex: Integer): Integer; virtual; + function AlreadyParsedRule(const Input: IIntStream; + const RuleIndex: Integer): Boolean; virtual; + procedure Memoize(const Input: IIntStream; const RuleIndex, + RuleStartIndex: Integer); virtual; + function GetRuleMemoizationChaceSize: Integer; + + procedure TraceIn(const RuleName: String; const RuleIndex: Integer; + const InputSymbol: String); virtual; + procedure TraceOut(const RuleName: String; const RuleIndex: Integer; + const InputSymbol: String); virtual; + + property Input: IIntStream read GetInput; + public + constructor Create; overload; + constructor Create(const AState: IRecognizerSharedState); overload; + end; + + TCommonTokenStream = class(TANTLRObject, ICommonTokenStream, ITokenStream) + strict private + FTokenSource: ITokenSource; + + /// <summary>Record every single token pulled from the source so we can reproduce + /// chunks of it later. + /// </summary> + FTokens: IList<IToken>; + + /// <summary><![CDATA[Map<tokentype, channel>]]> to override some Tokens' channel numbers </summary> + FChannelOverrideMap: IDictionary<Integer, Integer>; + + /// <summary><![CDATA[Set<tokentype>;]]> discard any tokens with this type </summary> + FDiscardSet: IHashList<Integer, Integer>; + + /// <summary>Skip tokens on any channel but this one; this is how we skip whitespace... </summary> + FChannel: Integer; + + /// <summary>By default, track all incoming tokens </summary> + FDiscardOffChannelTokens: Boolean; + + /// <summary>Track the last Mark() call result value for use in Rewind().</summary> + FLastMarker: Integer; + + /// <summary> + /// The index into the tokens list of the current token (next token + /// to consume). p==-1 indicates that the tokens list is empty + /// </summary> + FP: Integer; + strict protected + /// <summary>Load all tokens from the token source and put in tokens. + /// This is done upon first LT request because you might want to + /// set some token type / channel overrides before filling buffer. + /// </summary> + procedure FillBuffer; virtual; + + /// <summary>Look backwards k tokens on-channel tokens </summary> + function LB(const K: Integer): IToken; virtual; + + /// <summary>Given a starting index, return the index of the first on-channel + /// token. + /// </summary> + function SkipOffTokenChannels(const I: Integer): Integer; virtual; + function SkipOffTokenChannelsReverse(const I: Integer): Integer; virtual; + protected + { IIntStream } + function GetSourceName: String; virtual; + + procedure Consume; virtual; + function LA(I: Integer): Integer; virtual; + function LAChar(I: Integer): Char; + function Mark: Integer; virtual; + function Index: Integer; virtual; + procedure Rewind(const Marker: Integer); overload; virtual; + procedure Rewind; overload; virtual; + procedure Release(const Marker: Integer); virtual; + procedure Seek(const Index: Integer); virtual; + function Size: Integer; virtual; + protected + { ITokenStream } + function GetTokenSource: ITokenSource; virtual; + procedure SetTokenSource(const Value: ITokenSource); virtual; + + function LT(const K: Integer): IToken; virtual; + function Get(const I: Integer): IToken; virtual; + function ToString(const Start, Stop: Integer): String; reintroduce; overload; virtual; + function ToString(const Start, Stop: IToken): String; reintroduce; overload; virtual; + protected + { ICommonTokenStream } + procedure SetTokenTypeChannel(const TType, Channel: Integer); + procedure DiscardTokenType(const TType: Integer); + procedure DiscardOffChannelTokens(const Discard: Boolean); + function GetTokens: IList<IToken>; overload; + function GetTokens(const Start, Stop: Integer): IList<IToken>; overload; + function GetTokens(const Start, Stop: Integer; + const Types: IBitSet): IList<IToken>; overload; + function GetTokens(const Start, Stop: Integer; + const Types: IList<Integer>): IList<IToken>; overload; + function GetTokens(const Start, Stop, + TokenType: Integer): IList<IToken>; overload; + procedure Reset; virtual; + public + constructor Create; overload; + constructor Create(const ATokenSource: ITokenSource); overload; + constructor Create(const ATokenSource: ITokenSource; + const AChannel: Integer); overload; + constructor Create(const ALexer: ILexer); overload; + constructor Create(const ALexer: ILexer; + const AChannel: Integer); overload; + + function ToString: String; overload; override; + end; + + TDFA = class abstract(TANTLRObject, IDFA) + strict private + FSpecialStateTransitionHandler: TSpecialStateTransitionHandler; + FEOT: TSmallintArray; + FEOF: TSmallintArray; + FMin: TCharArray; + FMax: TCharArray; + FAccept: TSmallintArray; + FSpecial: TSmallintArray; + FTransition: TSmallintMatrix; + FDecisionNumber: Integer; + FRecognizer: Pointer; { IBaseRecognizer } + function GetRecognizer: IBaseRecognizer; + procedure SetRecognizer(const Value: IBaseRecognizer); + strict protected + procedure NoViableAlt(const S: Integer; const Input: IIntStream); + + property Recognizer: IBaseRecognizer read GetRecognizer write SetRecognizer; + property DecisionNumber: Integer read FDecisionNumber write FDecisionNumber; + property EOT: TSmallintArray read FEOT write FEOT; + property EOF: TSmallintArray read FEOF write FEOF; + property Min: TCharArray read FMin write FMin; + property Max: TCharArray read FMax write FMax; + property Accept: TSmallintArray read FAccept write FAccept; + property Special: TSmallintArray read FSpecial write FSpecial; + property Transition: TSmallintMatrix read FTransition write FTransition; + protected + { IDFA } + function GetSpecialStateTransitionHandler: TSpecialStateTransitionHandler; + procedure SetSpecialStateTransitionHandler(const Value: TSpecialStateTransitionHandler); + + function Predict(const Input: IIntStream): Integer; + procedure Error(const NVAE: ENoViableAltException); virtual; + function SpecialStateTransition(const S: Integer; + const Input: IIntStream): Integer; virtual; + function Description: String; virtual; + function SpecialTransition(const State, Symbol: Integer): Integer; + public + class function UnpackEncodedString(const EncodedString: String): TSmallintArray; static; + class function UnpackEncodedStringArray(const EncodedStrings: TStringArray): TSmallintMatrix; overload; static; + class function UnpackEncodedStringArray(const EncodedStrings: array of String): TSmallintMatrix; overload; static; + class function UnpackEncodedStringToUnsignedChars(const EncodedString: String): TCharArray; static; + end; + + TLexer = class abstract(TBaseRecognizer, ILexer, ITokenSource) + strict private + const + TOKEN_dot_EOF = Ord(cscEOF); + strict private + /// <summary>Where is the lexer drawing characters from? </summary> + FInput: ICharStream; + protected + { IBaseRecognizer } + function GetSourceName: String; override; + function GetInput: IIntStream; override; + procedure Reset; override; + procedure ReportError(const E: ERecognitionException); override; + function GetErrorMessage(const E: ERecognitionException; + const TokenNames: TStringArray): String; override; + protected + { ILexer } + function GetCharStream: ICharStream; virtual; + procedure SetCharStream(const Value: ICharStream); virtual; + function GetLine: Integer; virtual; + function GetCharPositionInLine: Integer; virtual; + function GetCharIndex: Integer; virtual; + function GetText: String; virtual; + procedure SetText(const Value: String); virtual; + + function NextToken: IToken; virtual; + procedure Skip; + procedure DoTokens; virtual; abstract; + procedure Emit(const Token: IToken); overload; virtual; + function Emit: IToken; overload; virtual; + procedure Match(const S: String); reintroduce; overload; virtual; + procedure Match(const C: Integer); reintroduce; overload; virtual; + procedure MatchAny; reintroduce; overload; virtual; + procedure MatchRange(const A, B: Integer); virtual; + procedure Recover(const RE: ERecognitionException); reintroduce; overload; virtual; + function GetCharErrorDisplay(const C: Integer): String; + procedure TraceIn(const RuleName: String; const RuleIndex: Integer); reintroduce; overload; virtual; + procedure TraceOut(const RuleName: String; const RuleIndex: Integer); reintroduce; overload; virtual; + strict protected + property Input: ICharStream read FInput; + property CharIndex: Integer read GetCharIndex; + property Text: String read GetText write SetText; + public + constructor Create; overload; + constructor Create(const AInput: ICharStream); overload; + constructor Create(const AInput: ICharStream; + const AState: IRecognizerSharedState); overload; + end; + + TParser = class(TBaseRecognizer, IParser) + strict private + FInput: ITokenStream; + protected + property Input: ITokenStream read FInput; + protected + { IBaseRecognizer } + procedure Reset; override; + function GetCurrentInputSymbol(const Input: IIntStream): IANTLRInterface; override; + function GetMissingSymbol(const Input: IIntStream; + const E: ERecognitionException; const ExpectedTokenType: Integer; + const Follow: IBitSet): IANTLRInterface; override; + function GetSourceName: String; override; + function GetInput: IIntStream; override; + protected + { IParser } + function GetTokenStream: ITokenStream; virtual; + procedure SetTokenStream(const Value: ITokenStream); virtual; + + procedure TraceIn(const RuleName: String; const RuleIndex: Integer); reintroduce; overload; + procedure TraceOut(const RuleName: String; const RuleIndex: Integer); reintroduce; overload; + public + constructor Create(const AInput: ITokenStream); overload; + constructor Create(const AInput: ITokenStream; + const AState: IRecognizerSharedState); overload; + end; + + TRuleReturnScope = class(TANTLRObject, IRuleReturnScope) + protected + { IRuleReturnScope } + function GetStart: IANTLRInterface; virtual; + procedure SetStart(const Value: IANTLRInterface); virtual; + function GetStop: IANTLRInterface; virtual; + procedure SetStop(const Value: IANTLRInterface); virtual; + function GetTree: IANTLRInterface; virtual; + procedure SetTree(const Value: IANTLRInterface); virtual; + function GetTemplate: IANTLRInterface; virtual; + end; + + TParserRuleReturnScope = class(TRuleReturnScope, IParserRuleReturnScope) + strict private + FStart: IToken; + FStop: IToken; + protected + { IRuleReturnScope } + function GetStart: IANTLRInterface; override; + procedure SetStart(const Value: IANTLRInterface); override; + function GetStop: IANTLRInterface; override; + procedure SetStop(const Value: IANTLRInterface); override; + end; + + TTokenRewriteStream = class(TCommonTokenStream, ITokenRewriteStream) + public + const + DEFAULT_PROGRAM_NAME = 'default'; + PROGRAM_INIT_SIZE = 100; + MIN_TOKEN_INDEX = 0; + strict protected + // Define the rewrite operation hierarchy + type + IRewriteOperation = interface(IANTLRInterface) + ['{285A54ED-58FF-44B1-A268-2686476D4419}'] + { Property accessors } + function GetInstructionIndex: Integer; + procedure SetInstructionIndex(const Value: Integer); + function GetIndex: Integer; + procedure SetIndex(const Value: Integer); + function GetText: IANTLRInterface; + procedure SetText(const Value: IANTLRInterface); + function GetParent: ITokenRewriteStream; + procedure SetParent(const Value: ITokenRewriteStream); + + { Methods } + + /// <summary>Execute the rewrite operation by possibly adding to the buffer. + /// Return the index of the next token to operate on. + /// </summary> + function Execute(const Buf: TStringBuilder): Integer; + + { Properties } + property InstructionIndex: Integer read GetInstructionIndex write SetInstructionIndex; + property Index: Integer read GetIndex write SetIndex; + property Text: IANTLRInterface read GetText write SetText; + property Parent: ITokenRewriteStream read GetParent write SetParent; + end; + + TRewriteOperation = class(TANTLRObject, IRewriteOperation) + strict private + // What index into rewrites List are we? + FInstructionIndex: Integer; + // Token buffer index + FIndex: Integer; + FText: IANTLRInterface; + FParent: Pointer; {ITokenRewriteStream;} + protected + { IRewriteOperation } + function GetInstructionIndex: Integer; + procedure SetInstructionIndex(const Value: Integer); + function GetIndex: Integer; + procedure SetIndex(const Value: Integer); + function GetText: IANTLRInterface; + procedure SetText(const Value: IANTLRInterface); + function GetParent: ITokenRewriteStream; + procedure SetParent(const Value: ITokenRewriteStream); + + function Execute(const Buf: TStringBuilder): Integer; virtual; + protected + constructor Create(const AIndex: Integer; const AText: IANTLRInterface; + const AParent: ITokenRewriteStream); + + property Index: Integer read FIndex write FIndex; + property Text: IANTLRInterface read FText write FText; + property Parent: ITokenRewriteStream read GetParent write SetParent; + public + function ToString: String; override; + end; + + IInsertBeforeOp = interface(IRewriteOperation) + ['{BFB732E2-BE6A-4691-AE3B-5C8013DE924E}'] + end; + + TInsertBeforeOp = class(TRewriteOperation, IInsertBeforeOp) + protected + { IRewriteOperation } + function Execute(const Buf: TStringBuilder): Integer; override; + end; + + /// <summary>I'm going to try replacing range from x..y with (y-x)+1 ReplaceOp + /// instructions. + /// </summary> + IReplaceOp = interface(IRewriteOperation) + ['{630C434A-99EA-4589-A65D-64A7B3DAC407}'] + { Property accessors } + function GetLastIndex: Integer; + procedure SetLastIndex(const Value: Integer); + + { Properties } + property LastIndex: Integer read GetLastIndex write SetLastIndex; + end; + + TReplaceOp = class(TRewriteOperation, IReplaceOp) + private + FLastIndex: Integer; + protected + { IRewriteOperation } + function Execute(const Buf: TStringBuilder): Integer; override; + protected + { IReplaceOp } + function GetLastIndex: Integer; + procedure SetLastIndex(const Value: Integer); + public + constructor Create(const AStart, AStop: Integer; + const AText: IANTLRInterface; const AParent: ITokenRewriteStream); + + function ToString: String; override; + end; + + IDeleteOp = interface(IRewriteOperation) + ['{C39345BC-F170-4C3A-A989-65E6B9F0712B}'] + end; + + TDeleteOp = class(TReplaceOp) + public + function ToString: String; override; + end; + strict private + type + TRewriteOpComparer<T: IRewriteOperation> = class(TComparer<T>) + public + function Compare(const Left, Right: T): Integer; override; + end; + strict private + /// <summary>You may have multiple, named streams of rewrite operations. + /// I'm calling these things "programs." + /// Maps String (name) -> rewrite (IList) + /// </summary> + FPrograms: IDictionary<String, IList<IRewriteOperation>>; + + /// <summary>Map String (program name) -> Integer index </summary> + FLastRewriteTokenIndexes: IDictionary<String, Integer>; + strict private + function InitializeProgram(const Name: String): IList<IRewriteOperation>; + protected + { ITokenRewriteStream } + procedure Rollback(const InstructionIndex: Integer); overload; virtual; + procedure Rollback(const ProgramName: String; + const InstructionIndex: Integer); overload; virtual; + + procedure DeleteProgram; overload; virtual; + procedure DeleteProgram(const ProgramName: String); overload; virtual; + + procedure InsertAfter(const T: IToken; const Text: IANTLRInterface); overload; virtual; + procedure InsertAfter(const Index: Integer; const Text: IANTLRInterface); overload; virtual; + procedure InsertAfter(const ProgramName: String; const T: IToken; + const Text: IANTLRInterface); overload; virtual; + procedure InsertAfter(const ProgramName: String; const Index: Integer; + const Text: IANTLRInterface); overload; virtual; + procedure InsertAfter(const T: IToken; const Text: String); overload; + procedure InsertAfter(const Index: Integer; const Text: String); overload; + procedure InsertAfter(const ProgramName: String; const T: IToken; + const Text: String); overload; + procedure InsertAfter(const ProgramName: String; const Index: Integer; + const Text: String); overload; + + procedure InsertBefore(const T: IToken; const Text: IANTLRInterface); overload; virtual; + procedure InsertBefore(const Index: Integer; const Text: IANTLRInterface); overload; virtual; + procedure InsertBefore(const ProgramName: String; const T: IToken; + const Text: IANTLRInterface); overload; virtual; + procedure InsertBefore(const ProgramName: String; const Index: Integer; + const Text: IANTLRInterface); overload; virtual; + procedure InsertBefore(const T: IToken; const Text: String); overload; + procedure InsertBefore(const Index: Integer; const Text: String); overload; + procedure InsertBefore(const ProgramName: String; const T: IToken; + const Text: String); overload; + procedure InsertBefore(const ProgramName: String; const Index: Integer; + const Text: String); overload; + + procedure Replace(const Index: Integer; const Text: IANTLRInterface); overload; virtual; + procedure Replace(const Start, Stop: Integer; const Text: IANTLRInterface); overload; virtual; + procedure Replace(const IndexT: IToken; const Text: IANTLRInterface); overload; virtual; + procedure Replace(const Start, Stop: IToken; const Text: IANTLRInterface); overload; virtual; + procedure Replace(const ProgramName: String; const Start, Stop: Integer; + const Text: IANTLRInterface); overload; virtual; + procedure Replace(const ProgramName: String; const Start, Stop: IToken; + const Text: IANTLRInterface); overload; virtual; + procedure Replace(const Index: Integer; const Text: String); overload; + procedure Replace(const Start, Stop: Integer; const Text: String); overload; + procedure Replace(const IndexT: IToken; const Text: String); overload; + procedure Replace(const Start, Stop: IToken; const Text: String); overload; + procedure Replace(const ProgramName: String; const Start, Stop: Integer; + const Text: String); overload; + procedure Replace(const ProgramName: String; const Start, Stop: IToken; + const Text: String); overload; + + procedure Delete(const Index: Integer); overload; virtual; + procedure Delete(const Start, Stop: Integer); overload; virtual; + procedure Delete(const IndexT: IToken); overload; virtual; + procedure Delete(const Start, Stop: IToken); overload; virtual; + procedure Delete(const ProgramName: String; const Start, Stop: Integer); overload; virtual; + procedure Delete(const ProgramName: String; const Start, Stop: IToken); overload; virtual; + + function GetLastRewriteTokenIndex: Integer; overload; virtual; + + function ToOriginalString: String; overload; virtual; + function ToOriginalString(const Start, Stop: Integer): String; overload; virtual; + + function ToString(const ProgramName: String): String; overload; virtual; + function ToString(const ProgramName: String; + const Start, Stop: Integer): String; overload; virtual; + + function ToDebugString: String; overload; virtual; + function ToDebugString(const Start, Stop: Integer): String; overload; virtual; + protected + { ITokenStream } + function ToString(const Start, Stop: Integer): String; overload; override; + strict protected + procedure Init; virtual; + function GetProgram(const Name: String): IList<IRewriteOperation>; virtual; + function GetLastRewriteTokenIndex(const ProgramName: String): Integer; overload; virtual; + procedure SetLastRewriteTokenIndex(const ProgramName: String; const I: Integer); overload; virtual; + + /// <summary> + /// Return a map from token index to operation. + /// </summary> + /// <remarks>We need to combine operations and report invalid operations (like + /// overlapping replaces that are not completed nested). Inserts to + /// same index need to be combined etc... Here are the cases: + /// + /// I.i.u I.j.v leave alone, nonoverlapping + /// I.i.u I.i.v combine: Iivu + /// + /// R.i-j.u R.x-y.v | i-j in x-y delete first R + /// R.i-j.u R.i-j.v delete first R + /// R.i-j.u R.x-y.v | x-y in i-j ERROR + /// R.i-j.u R.x-y.v | boundaries overlap ERROR + /// + /// I.i.u R.x-y.v | i in x-y delete I + /// I.i.u R.x-y.v | i not in x-y leave alone, nonoverlapping + /// R.x-y.v I.i.u | i in x-y ERROR + /// R.x-y.v I.x.u R.x-y.uv (combine, delete I) + /// R.x-y.v I.i.u | i not in x-y leave alone, nonoverlapping + /// + /// I.i.u = insert u before op @ index i + /// R.x-y.u = replace x-y indexed tokens with u + /// + /// First we need to examine replaces. For any replace op: + /// + /// 1. wipe out any insertions before op within that range. + /// 2. Drop any replace op before that is contained completely within + /// that range. + /// 3. Throw exception upon boundary overlap with any previous replace. + /// + /// Then we can deal with inserts: + /// + /// 1. for any inserts to same index, combine even if not adjacent. + /// 2. for any prior replace with same left boundary, combine this + /// insert with replace and delete this replace. + /// 3. throw exception if index in same range as previous replace + /// + /// Don't actually delete; make op null in list. Easier to walk list. + /// Later we can throw as we add to index -> op map. + /// + /// Note that I.2 R.2-2 will wipe out I.2 even though, technically, the + /// inserted stuff would be before the replace range. But, if you + /// add tokens in front of a method body '{' and then delete the method + /// body, I think the stuff before the '{' you added should disappear too. + /// </remarks> + function ReduceToSingleOperationPerIndex( + const Rewrites: IList<IRewriteOperation>): IDictionary<Integer, IRewriteOperation>; + + function GetKindOfOps(const Rewrites: IList<IRewriteOperation>; + const Kind: TGUID): IList<IRewriteOperation>; overload; + /// <summary> + /// Get all operations before an index of a particular kind + /// </summary> + function GetKindOfOps(const Rewrites: IList<IRewriteOperation>; + const Kind: TGUID; const Before: Integer): IList<IRewriteOperation>; overload; + + function CatOpText(const A, B: IANTLRInterface): IANTLRInterface; + public + constructor Create; overload; + constructor Create(const ATokenSource: ITokenSource); overload; + constructor Create(const ATokenSource: ITokenSource; + const AChannel: Integer); overload; + constructor Create(const ALexer: ILexer); overload; + constructor Create(const ALexer: ILexer; + const AChannel: Integer); overload; + + function ToString: String; overload; override; + end; + +{ These functions return X or, if X = nil, an empty default instance } +function Def(const X: IToken): IToken; overload; +function Def(const X: IRuleReturnScope): IRuleReturnScope; overload; + +implementation + +uses + StrUtils, + Math, + Antlr.Runtime.Tree; + +{ ERecognitionException } + +constructor ERecognitionException.Create; +begin + Create('', nil); +end; + +constructor ERecognitionException.Create(const AMessage: String); +begin + Create(AMessage, nil); +end; + +constructor ERecognitionException.Create(const AInput: IIntStream); +begin + Create('', AInput); +end; + +constructor ERecognitionException.Create(const AMessage: String; + const AInput: IIntStream); +var + TokenStream: ITokenStream; + CharStream: ICharStream; +begin + inherited Create(AMessage); + FInput := AInput; + FIndex := AInput.Index; + + if Supports(AInput, ITokenStream, TokenStream) then + begin + FToken := TokenStream.LT(1); + FLine := FToken.Line; + FCharPositionInLine := FToken.CharPositionInLine; + end; + + if Supports(AInput, ITreeNodeStream) then + ExtractInformationFromTreeNodeStream(AInput) + else + begin + if Supports(AInput, ICharStream, CharStream) then + begin + FC := AInput.LA(1); + FLine := CharStream.Line; + FCharPositionInLine := CharStream.CharPositionInLine; + end + else + FC := AInput.LA(1); + end; +end; + +procedure ERecognitionException.ExtractInformationFromTreeNodeStream( + const Input: IIntStream); +var + Nodes: ITreeNodeStream; + Adaptor: ITreeAdaptor; + Payload, PriorPayload: IToken; + I, NodeType: Integer; + PriorNode: IANTLRInterface; + Tree: ITree; + Text: String; + CommonTree: ICommonTree; +begin + Nodes := Input as ITreeNodeStream; + FNode := Nodes.LT(1); + Adaptor := Nodes.TreeAdaptor; + Payload := Adaptor.GetToken(FNode); + + if Assigned(Payload) then + begin + FToken := Payload; + if (Payload.Line <= 0) then + begin + // imaginary node; no line/pos info; scan backwards + I := -1; + PriorNode := Nodes.LT(I); + while Assigned(PriorNode) do + begin + PriorPayload := Adaptor.GetToken(PriorNode); + if Assigned(PriorPayload) and (PriorPayload.Line > 0) then + begin + // we found the most recent real line / pos info + FLine := PriorPayload.Line; + FCharPositionInLine := PriorPayload.CharPositionInLine; + FApproximateLineInfo := True; + Break; + end; + Dec(I); + PriorNode := Nodes.LT(I) + end; + end + else + begin + // node created from real token + FLine := Payload.Line; + FCharPositionInLine := Payload.CharPositionInLine; + end; + end else + if Supports(FNode, ITree, Tree) then + begin + FLine := Tree.Line; + FCharPositionInLine := Tree.CharPositionInLine; + if Supports(FNode, ICommonTree, CommonTree) then + FToken := CommonTree.Token; + end + else + begin + NodeType := Adaptor.GetNodeType(FNode); + Text := Adaptor.GetNodeText(FNode); + FToken := TCommonToken.Create(NodeType, Text); + end; +end; + +function ERecognitionException.GetUnexpectedType: Integer; +var + Nodes: ITreeNodeStream; + Adaptor: ITreeAdaptor; +begin + if Supports(FInput, ITokenStream) then + Result := FToken.TokenType + else + if Supports(FInput, ITreeNodeStream, Nodes) then + begin + Adaptor := Nodes.TreeAdaptor; + Result := Adaptor.GetNodeType(FNode); + end else + Result := FC; +end; + +{ EMismatchedTokenException } + +constructor EMismatchedTokenException.Create(const AExpecting: Integer; + const AInput: IIntStream); +begin + inherited Create(AInput); + FExpecting := AExpecting; +end; + +function EMismatchedTokenException.ToString: String; +begin + Result := 'MismatchedTokenException(' + IntToStr(UnexpectedType) + + '!=' + IntToStr(Expecting) + ')'; + +end; + +{ EUnwantedTokenException } + +function EUnwantedTokenException.GetUnexpectedToken: IToken; +begin + Result := FToken; +end; + +function EUnwantedTokenException.ToString: String; +var + Exp: String; +begin + if (Expecting = TToken.INVALID_TOKEN_TYPE) then + Exp := '' + else + Exp := ', expected ' + IntToStr(Expecting); + if (Token = nil) then + Result := 'UnwantedTokenException(found=nil' + Exp + ')' + else + Result := 'UnwantedTokenException(found=' + Token.Text + Exp + ')' +end; + +{ EMissingTokenException } + +constructor EMissingTokenException.Create(const AExpecting: Integer; + const AInput: IIntStream; const AInserted: IANTLRInterface); +begin + inherited Create(AExpecting, AInput); + FInserted := AInserted; +end; + +function EMissingTokenException.GetMissingType: Integer; +begin + Result := Expecting; +end; + +function EMissingTokenException.ToString: String; +begin + if Assigned(FInserted) and Assigned(FToken) then + Result := 'MissingTokenException(inserted ' + FInserted.ToString + + ' at ' + FToken.Text + ')' + else + if Assigned(FToken) then + Result := 'MissingTokenException(at ' + FToken.Text + ')' + else + Result := 'MissingTokenException'; +end; + +{ EMismatchedTreeNodeException } + +constructor EMismatchedTreeNodeException.Create(const AExpecting: Integer; + const AInput: IIntStream); +begin + inherited Create(AInput); + FExpecting := AExpecting; +end; + +function EMismatchedTreeNodeException.ToString: String; +begin + Result := 'MismatchedTreeNodeException(' + IntToStr(UnexpectedType) + + '!=' + IntToStr(Expecting) + ')'; +end; + +{ ENoViableAltException } + +constructor ENoViableAltException.Create( + const AGrammarDecisionDescription: String; const ADecisionNumber, + AStateNumber: Integer; const AInput: IIntStream); +begin + inherited Create(AInput); + FGrammarDecisionDescription := AGrammarDecisionDescription; + FDecisionNumber := ADecisionNumber; + FStateNumber := AStateNumber; +end; + +function ENoViableAltException.ToString: String; +begin + if Supports(Input, ICharStream) then + Result := 'NoViableAltException(''' + Char(UnexpectedType) + '''@[' + + FGrammarDecisionDescription + '])' + else + Result := 'NoViableAltException(''' + IntToStr(UnexpectedType) + '''@[' + + FGrammarDecisionDescription + '])' +end; + +{ EEarlyExitException } + +constructor EEarlyExitException.Create(const ADecisionNumber: Integer; + const AInput: IIntStream); +begin + inherited Create(AInput); + FDecisionNumber := ADecisionNumber; +end; + +{ EMismatchedSetException } + +constructor EMismatchedSetException.Create(const AExpecting: IBitSet; + const AInput: IIntStream); +begin + inherited Create(AInput); + FExpecting := AExpecting; +end; + +function EMismatchedSetException.ToString: String; +begin + Result := 'MismatchedSetException(' + IntToStr(UnexpectedType) + + '!=' + Expecting.ToString + ')'; +end; + +{ EMismatchedNotSetException } + +function EMismatchedNotSetException.ToString: String; +begin + Result := 'MismatchedNotSetException(' + IntToStr(UnexpectedType) + + '!=' + Expecting.ToString + ')'; +end; + +{ EFailedPredicateException } + +constructor EFailedPredicateException.Create(const AInput: IIntStream; + const ARuleName, APredicateText: String); +begin + inherited Create(AInput); + FRuleName := ARuleName; + FPredicateText := APredicateText; +end; + +function EFailedPredicateException.ToString: String; +begin + Result := 'FailedPredicateException(' + FRuleName + ',{' + FPredicateText + '}?)'; +end; + +{ EMismatchedRangeException } + +constructor EMismatchedRangeException.Create(const AA, AB: Integer; + const AInput: IIntStream); +begin + inherited Create(FInput); + FA := AA; + FB := AB; +end; + +function EMismatchedRangeException.ToString: String; +begin + Result := 'MismatchedNotSetException(' + IntToStr(UnexpectedType) + + ' not in [' + IntToStr(FA)+ ',' + IntToStr(FB) + '])'; +end; + +{ TCharStreamState } + +function TCharStreamState.GetCharPositionInLine: Integer; +begin + Result := FCharPositionInLine; +end; + +function TCharStreamState.GetLine: Integer; +begin + Result := FLine; +end; + +function TCharStreamState.GetP: Integer; +begin + Result := FP; +end; + +procedure TCharStreamState.SetCharPositionInLine(const Value: Integer); +begin + FCharPositionInLine := Value; +end; + +procedure TCharStreamState.SetLine(const Value: Integer); +begin + FLine := Value; +end; + +procedure TCharStreamState.SetP(const Value: Integer); +begin + FP := Value; +end; + +{ TANTLRStringStream } + +constructor TANTLRStringStream.Create(const AInput: String); +begin + inherited Create; + FLine := 1; + FOwnsData := True; + FN := Length(AInput); + if (FN > 0) then + begin + GetMem(FData,FN * SizeOf(Char)); + Move(AInput[1],FData^,FN * SizeOf(Char)); + end; +end; + +procedure TANTLRStringStream.Consume; +begin + if (FP < FN) then + begin + Inc(FCharPositionInLine); + if (FData[FP] = #10) then + begin + Inc(FLine); + FCharPositionInLine := 0; + end; + Inc(FP); + end; +end; + +constructor TANTLRStringStream.Create(const AData: PChar; + const ANumberOfActualCharsInArray: Integer); +begin + inherited Create; + FLine := 1; + FOwnsData := False; + FData := AData; + FN := ANumberOfActualCharsInArray; +end; + +constructor TANTLRStringStream.Create; +begin + inherited Create; + FLine := 1; +end; + +destructor TANTLRStringStream.Destroy; +begin + if (FOwnsData) then + FreeMem(FData); + inherited; +end; + +function TANTLRStringStream.GetCharPositionInLine: Integer; +begin + Result := FCharPositionInLine; +end; + +function TANTLRStringStream.GetLine: Integer; +begin + Result := FLine; +end; + +function TANTLRStringStream.GetSourceName: String; +begin + Result := FName; +end; + +function TANTLRStringStream.Index: Integer; +begin + Result := FP; +end; + +function TANTLRStringStream.LA(I: Integer): Integer; +begin + if (I = 0) then + Result := 0 // undefined + else begin + if (I < 0) then + begin + Inc(I); // e.g., translate LA(-1) to use offset i=0; then data[p+0-1] + if ((FP + I - 1) < 0) then + begin + Result := Integer(cscEOF); + Exit; + end; + end; + + if ((FP + I - 1) >= FN) then + Result := Integer(cscEOF) + else + Result := Integer(FData[FP + I - 1]); + end; +end; + +function TANTLRStringStream.LAChar(I: Integer): Char; +begin + Result := Char(LA(I)); +end; + +function TANTLRStringStream.LT(const I: Integer): Integer; +begin + Result := LA(I); +end; + +function TANTLRStringStream.Mark: Integer; +var + State: ICharStreamState; +begin + if (FMarkers = nil) then + begin + FMarkers := TList<ICharStreamState>.Create; + FMarkers.Add(nil); // depth 0 means no backtracking, leave blank + end; + + Inc(FMarkDepth); + if (FMarkDepth >= FMarkers.Count) then + begin + State := TCharStreamState.Create; + FMarkers.Add(State); + end + else + State := FMarkers[FMarkDepth]; + + State.P := FP; + State.Line := FLine; + State.CharPositionInLine := FCharPositionInLine; + FLastMarker := FMarkDepth; + Result := FMarkDepth; +end; + +procedure TANTLRStringStream.Release(const Marker: Integer); +begin + // unwind any other markers made after m and release m + FMarkDepth := Marker; + // release this marker + Dec(FMarkDepth); +end; + +procedure TANTLRStringStream.Reset; +begin + FP := 0; + FLine := 1; + FCharPositionInLine := 0; + FMarkDepth := 0; +end; + +procedure TANTLRStringStream.Rewind(const Marker: Integer); +var + State: ICharStreamState; +begin + State := FMarkers[Marker]; + // restore stream state + Seek(State.P); + FLine := State.Line; + FCharPositionInLine := State.CharPositionInLine; + Release(Marker); +end; + +procedure TANTLRStringStream.Rewind; +begin + Rewind(FLastMarker); +end; + +procedure TANTLRStringStream.Seek(const Index: Integer); +begin + if (Index <= FP) then + FP := Index // just jump; don't update stream state (line, ...) + else begin + // seek forward, consume until p hits index + while (FP < Index) do + Consume; + end; +end; + +procedure TANTLRStringStream.SetCharPositionInLine(const Value: Integer); +begin + FCharPositionInLine := Value; +end; + +procedure TANTLRStringStream.SetLine(const Value: Integer); +begin + FLine := Value; +end; + +function TANTLRStringStream.Size: Integer; +begin + Result := FN; +end; + +function TANTLRStringStream.Substring(const Start, Stop: Integer): String; +begin + Result := Copy(FData, Start + 1, Stop - Start + 1); +end; + +{ TANTLRFileStream } + +constructor TANTLRFileStream.Create(const AFileName: String); +begin + Create(AFilename,TEncoding.Default); +end; + +constructor TANTLRFileStream.Create(const AFileName: String; + const AEncoding: TEncoding); +begin + inherited Create; + FFileName := AFileName; + Load(FFileName, AEncoding); +end; + +function TANTLRFileStream.GetSourceName: String; +begin + Result := FFileName; +end; + +procedure TANTLRFileStream.Load(const FileName: String; + const Encoding: TEncoding); +var + FR: TStreamReader; + S: String; +begin + if (FFileName <> '') then + begin + if (Encoding = nil) then + FR := TStreamReader.Create(FileName,TEncoding.Default) + else + FR := TStreamReader.Create(FileName,Encoding); + + try + if (FOwnsData) then + begin + FreeMem(FData); + FData := nil; + end; + + FOwnsData := True; + S := FR.ReadToEnd; + FN := Length(S); + if (FN > 0) then + begin + GetMem(FData,FN * SizeOf(Char)); + Move(S[1],FData^,FN * SizeOf(Char)); + end; + finally + FR.Free; + end; + end; +end; + +{ TBitSet } + +class function TBitSet.BitSetOf(const El: Integer): IBitSet; +begin + Result := TBitSet.Create(El + 1); + Result.Add(El); +end; + +class function TBitSet.BitSetOf(const A, B: Integer): IBitSet; +begin + Result := TBitSet.Create(Max(A,B) + 1); + Result.Add(A); + Result.Add(B); +end; + +class function TBitSet.BitSetOf(const A, B, C: Integer): IBitSet; +begin + Result := TBitSet.Create; + Result.Add(A); + Result.Add(B); + Result.Add(C); +end; + +class function TBitSet.BitSetOf(const A, B, C, D: Integer): IBitSet; +begin + Result := TBitSet.Create; + Result.Add(A); + Result.Add(B); + Result.Add(C); + Result.Add(D); +end; + +procedure TBitSet.Add(const El: Integer); +var + N: Integer; +begin + N := WordNumber(El); + if (N >= Length(FBits)) then + GrowToInclude(El); + FBits[N] := FBits[N] or BitMask(El); +end; + +class function TBitSet.BitMask(const BitNumber: Integer): UInt64; +var + BitPosition: Integer; +begin + BitPosition := BitNumber and MOD_MASK; + Result := UInt64(1) shl BitPosition; +end; + +function TBitSet.BitSetOr(const A: IBitSet): IBitSet; +begin + Result := Clone as IBitSet; + Result.OrInPlace(A); +end; + +function TBitSet.Clone: IANTLRInterface; +var + BS: TBitSet; +begin + BS := TBitSet.Create; + Result := BS; + SetLength(BS.FBits,Length(FBits)); + if (Length(FBits) > 0) then + Move(FBits[0],BS.FBits[0],Length(FBits) * SizeOf(UInt64)); +end; + +constructor TBitSet.Create; +begin + Create(BITS); +end; + +constructor TBitSet.Create(const ABits: array of UInt64); +begin + inherited Create; + SetLength(FBits, Length(ABits)); + if (Length(ABits) > 0) then + Move(ABits[0], FBits[0], Length(ABits) * SizeOf(UInt64)); +end; + +constructor TBitSet.Create(const AItems: IList<Integer>); +var + V: Integer; +begin + Create(BITS); + for V in AItems do + Add(V); +end; + +constructor TBitSet.Create(const ANBits: Integer); +begin + inherited Create; + SetLength(FBits,((ANBits - 1) shr LOG_BITS) + 1); +end; + +function TBitSet.Equals(Obj: TObject): Boolean; +var + OtherSet: TBitSet absolute Obj; + I, N: Integer; +begin + Result := False; + if (Obj = nil) or (not (Obj is TBitSet)) then + Exit; + + N := Min(Length(FBits), Length(OtherSet.FBits)); + + // for any bits in common, compare + for I := 0 to N - 1 do + begin + if (FBits[I] <> OtherSet.FBits[I]) then + Exit; + end; + + // make sure any extra bits are off + if (Length(FBits) > N) then + begin + for I := N + 1 to Length(FBits) - 1 do + begin + if (FBits[I] <> 0) then + Exit; + end; + end + else + if (Length(OtherSet.FBits) > N) then + begin + for I := N + 1 to Length(OtherSet.FBits) - 1 do + begin + if (OtherSet.FBits[I] <> 0) then + Exit; + end; + end; + + Result := True; +end; + +function TBitSet.GetIsNil: Boolean; +var + I: Integer; +begin + for I := Length(FBits) - 1 downto 0 do + if (FBits[I] <> 0) then + begin + Result := False; + Exit; + end; + Result := True; +end; + +procedure TBitSet.GrowToInclude(const Bit: Integer); +var + NewSize: Integer; +begin + NewSize := Max(Length(FBits) shl 1,NumWordsToHold(Bit)); + SetLength(FBits,NewSize); +end; + +function TBitSet.LengthInLongWords: Integer; +begin + Result := Length(FBits); +end; + +function TBitSet.Member(const El: Integer): Boolean; +var + N: Integer; +begin + if (El < 0) then + Result := False + else + begin + N := WordNumber(El); + if (N >= Length(FBits)) then + Result := False + else + Result := ((FBits[N] and BitMask(El)) <> 0); + end; +end; + +function TBitSet.NumBits: Integer; +begin + Result := Length(FBits) shl LOG_BITS; +end; + +class function TBitSet.NumWordsToHold(const El: Integer): Integer; +begin + Result := (El shr LOG_BITS) + 1; +end; + +procedure TBitSet.OrInPlace(const A: IBitSet); +var + I, M: Integer; + ABits: TUInt64Array; +begin + if Assigned(A) then + begin + // If this is smaller than a, grow this first + if (A.LengthInLongWords > Length(FBits)) then + SetLength(FBits,A.LengthInLongWords); + M := Min(Length(FBits), A.LengthInLongWords); + ABits := A.ToPackedArray; + for I := M - 1 downto 0 do + FBits[I] := FBits[I] or ABits[I]; + end; +end; + +procedure TBitSet.Remove(const El: Integer); +var + N: Integer; +begin + N := WordNumber(El); + if (N < Length(FBits)) then + FBits[N] := (FBits[N] and not BitMask(El)); +end; + +function TBitSet.Size: Integer; +var + I, Bit: Integer; + W: UInt64; +begin + Result := 0; + for I := Length(FBits) - 1 downto 0 do + begin + W := FBits[I]; + if (W <> 0) then + begin + for Bit := BITS - 1 downto 0 do + begin + if ((W and (UInt64(1) shl Bit)) <> 0) then + Inc(Result); + end; + end; + end; +end; + +function TBitSet.ToArray: TIntegerArray; +var + I, En: Integer; +begin + SetLength(Result,Size); + En := 0; + for I := 0 to (Length(FBits) shl LOG_BITS) - 1 do + begin + if Member(I) then + begin + Result[En] := I; + Inc(En); + end; + end; +end; + +function TBitSet.ToPackedArray: TUInt64Array; +begin + Result := FBits; +end; + +function TBitSet.ToString: String; +begin + Result := ToString(nil); +end; + +function TBitSet.ToString(const TokenNames: TStringArray): String; +var + Buf: TStringBuilder; + I: Integer; + HavePrintedAnElement: Boolean; +begin + HavePrintedAnElement := False; + Buf := TStringBuilder.Create; + try + Buf.Append('{'); + for I := 0 to (Length(FBits) shl LOG_BITS) - 1 do + begin + if Member(I) then + begin + if (I > 0) and HavePrintedAnElement then + Buf.Append(','); + if Assigned(TokenNames) then + Buf.Append(TokenNames[I]) + else + Buf.Append(I); + HavePrintedAnElement := True; + end; + end; + Buf.Append('}'); + Result := Buf.ToString; + finally + Buf.Free; + end; +end; + +class function TBitSet.WordNumber(const Bit: Integer): Integer; +begin + Result := Bit shr LOG_BITS; // Bit / BITS +end; + +{ TRecognizerSharedState } + +constructor TRecognizerSharedState.Create; +var + I: Integer; +begin + inherited; + SetLength(FFollowing,TBaseRecognizer.INITIAL_FOLLOW_STACK_SIZE); + for I := 0 to TBaseRecognizer.INITIAL_FOLLOW_STACK_SIZE - 1 do + FFollowing[I] := TBitSet.Create; + FFollowingStackPointer := -1; + FLastErrorIndex := -1; + FTokenStartCharIndex := -1; +end; + +function TRecognizerSharedState.GetBacktracking: Integer; +begin + Result := FBacktracking; +end; + +function TRecognizerSharedState.GetChannel: Integer; +begin + Result := FChannel; +end; + +function TRecognizerSharedState.GetErrorRecovery: Boolean; +begin + Result := FErrorRecovery; +end; + +function TRecognizerSharedState.GetFailed: Boolean; +begin + Result := FFailed; +end; + +function TRecognizerSharedState.GetFollowing: TBitSetArray; +begin + Result := FFollowing; +end; + +function TRecognizerSharedState.GetFollowingStackPointer: Integer; +begin + Result := FFollowingStackPointer; +end; + +function TRecognizerSharedState.GetLastErrorIndex: Integer; +begin + Result := FLastErrorIndex; +end; + +function TRecognizerSharedState.GetRuleMemo: TDictionaryArray<Integer, Integer>; +begin + Result := FRuleMemo; +end; + +function TRecognizerSharedState.GetRuleMemoCount: Integer; +begin + Result := Length(FRuleMemo); +end; + +function TRecognizerSharedState.GetSyntaxErrors: Integer; +begin + Result := FSyntaxErrors; +end; + +function TRecognizerSharedState.GetText: String; +begin + Result := FText; +end; + +function TRecognizerSharedState.GetToken: IToken; +begin + Result := FToken; +end; + +function TRecognizerSharedState.GetTokenStartCharIndex: Integer; +begin + Result := FTokenStartCharIndex; +end; + +function TRecognizerSharedState.GetTokenStartCharPositionInLine: Integer; +begin + Result := FTokenStartCharPositionInLine; +end; + +function TRecognizerSharedState.GetTokenStartLine: Integer; +begin + Result := FTokenStartLine; +end; + +function TRecognizerSharedState.GetTokenType: Integer; +begin + Result := FTokenType; +end; + +procedure TRecognizerSharedState.SetBacktracking(const Value: Integer); +begin + FBacktracking := Value; +end; + +procedure TRecognizerSharedState.SetChannel(const Value: Integer); +begin + FChannel := Value; +end; + +procedure TRecognizerSharedState.SetErrorRecovery(const Value: Boolean); +begin + FErrorRecovery := Value; +end; + +procedure TRecognizerSharedState.SetFailed(const Value: Boolean); +begin + FFailed := Value; +end; + +procedure TRecognizerSharedState.SetFollowing(const Value: TBitSetArray); +begin + FFollowing := Value; +end; + +procedure TRecognizerSharedState.SetFollowingStackPointer(const Value: Integer); +begin + FFollowingStackPointer := Value; +end; + +procedure TRecognizerSharedState.SetLastErrorIndex(const Value: Integer); +begin + FLastErrorIndex := Value; +end; + +procedure TRecognizerSharedState.SetRuleMemoCount(const Value: Integer); +begin + SetLength(FRuleMemo, Value); +end; + +procedure TRecognizerSharedState.SetSyntaxErrors(const Value: Integer); +begin + FSyntaxErrors := Value; +end; + +procedure TRecognizerSharedState.SetText(const Value: String); +begin + FText := Value; +end; + +procedure TRecognizerSharedState.SetToken(const Value: IToken); +begin + FToken := Value; +end; + +procedure TRecognizerSharedState.SetTokenStartCharIndex(const Value: Integer); +begin + FTokenStartCharIndex := Value; +end; + +procedure TRecognizerSharedState.SetTokenStartCharPositionInLine( + const Value: Integer); +begin + FTokenStartCharPositionInLine := Value; +end; + +procedure TRecognizerSharedState.SetTokenStartLine(const Value: Integer); +begin + FTokenStartLine := Value; +end; + +procedure TRecognizerSharedState.SetTokenType(const Value: Integer); +begin + FTokenType := Value; +end; + +{ TCommonToken } + +constructor TCommonToken.Create; +begin + inherited; + FChannel := TToken.DEFAULT_CHANNEL; + FCharPositionInLine := -1; + FIndex := -1; +end; + +constructor TCommonToken.Create(const ATokenType: Integer); +begin + Create; + FTokenType := ATokenType; +end; + +constructor TCommonToken.Create(const AInput: ICharStream; const ATokenType, + AChannel, AStart, AStop: Integer); +begin + Create; + FInput := AInput; + FTokenType := ATokenType; + FChannel := AChannel; + FStart := AStart; + FStop := AStop; +end; + +constructor TCommonToken.Create(const ATokenType: Integer; const AText: String); +begin + Create; + FTokenType := ATokenType; + FChannel := TToken.DEFAULT_CHANNEL; + FText := AText; +end; + +function TCommonToken.GetChannel: Integer; +begin + Result := FChannel; +end; + +function TCommonToken.GetCharPositionInLine: Integer; +begin + Result := FCharPositionInLine; +end; + +function TCommonToken.GetInputStream: ICharStream; +begin + Result := FInput; +end; + +function TCommonToken.GetLine: Integer; +begin + Result := FLine; +end; + +function TCommonToken.GetStartIndex: Integer; +begin + Result := FStart; +end; + +function TCommonToken.GetStopIndex: Integer; +begin + Result := FStop; +end; + +function TCommonToken.GetText: String; +begin + if (FText <> '') then + Result := FText + else + if (FInput = nil) then + Result := '' + else + Result := FInput.Substring(FStart, FStop); +end; + +function TCommonToken.GetTokenIndex: Integer; +begin + Result := FIndex; +end; + +function TCommonToken.GetTokenType: Integer; +begin + Result := FTokenType; +end; + +procedure TCommonToken.SetChannel(const Value: Integer); +begin + FChannel := Value; +end; + +procedure TCommonToken.SetCharPositionInLine(const Value: Integer); +begin + FCharPositionInLine := Value; +end; + +procedure TCommonToken.SetInputStream(const Value: ICharStream); +begin + FInput := Value; +end; + +procedure TCommonToken.SetLine(const Value: Integer); +begin + FLine := Value; +end; + +procedure TCommonToken.SetStartIndex(const Value: Integer); +begin + FStart := Value; +end; + +procedure TCommonToken.SetStopIndex(const Value: Integer); +begin + FStop := Value; +end; + +procedure TCommonToken.SetText(const Value: String); +begin + (* Override the text for this token. The property getter + * will return this text rather than pulling from the buffer. + * Note that this does not mean that start/stop indexes are + * not valid. It means that the input was converted to a new + * string in the token object. + *) + FText := Value; +end; + +procedure TCommonToken.SetTokenIndex(const Value: Integer); +begin + FIndex := Value; +end; + +procedure TCommonToken.SetTokenType(const Value: Integer); +begin + FTokenType := Value; +end; + +function TCommonToken.ToString: String; +var + ChannelStr, Txt: String; +begin + if (FChannel > 0) then + ChannelStr := ',channel=' + IntToStr(FChannel) + else + ChannelStr := ''; + + Txt := GetText; + if (Txt <> '') then + begin + Txt := ReplaceStr(Txt,#10,'\n'); + Txt := ReplaceStr(Txt,#13,'\r'); + Txt := ReplaceStr(Txt,#9,'\t'); + end else + Txt := '<no text>'; + + Result := Format('[@%d,%d:%d=''%s'',<%d>%s,%d:%d]', + [FIndex,FStart,FStop,Txt,FTokenType,ChannelStr,FLine,FCharPositionInLine]); +end; + +constructor TCommonToken.Create(const AOldToken: IToken); +var + OldCommonToken: ICommonToken; +begin + Create; + FText := AOldToken.Text; + FTokenType := AOldToken.TokenType; + FLine := AOldToken.Line; + FIndex := AOldToken.TokenIndex; + FCharPositionInLine := AOldToken.CharPositionInLine; + FChannel := AOldToken.Channel; + if Supports(AOldToken, ICommonToken, OldCommonToken) then + begin + FStart := OldCommonToken.StartIndex; + FStop := OldCommonToken.StopIndex; + end; +end; + +{ TClassicToken } + +constructor TClassicToken.Create(const AOldToken: IToken); +begin + inherited Create; + FText := AOldToken.Text; + FTokenType := AOldToken.TokenType; + FLine := AOldToken.Line; + FCharPositionInLine := AOldToken.CharPositionInLine; + FChannel := AOldToken.Channel; +end; + +constructor TClassicToken.Create(const ATokenType: Integer); +begin + inherited Create; + FTokenType := ATokenType; +end; + +constructor TClassicToken.Create(const ATokenType: Integer; const AText: String; + const AChannel: Integer); +begin + inherited Create; + FTokenType := ATokenType; + FText := AText; + FChannel := AChannel; +end; + +constructor TClassicToken.Create(const ATokenType: Integer; + const AText: String); +begin + inherited Create; + FTokenType := ATokenType; + FText := AText; +end; + +function TClassicToken.GetChannel: Integer; +begin + Result := FChannel; +end; + +function TClassicToken.GetCharPositionInLine: Integer; +begin + Result := FCharPositionInLine; +end; + +function TClassicToken.GetInputStream: ICharStream; +begin + // No default implementation + Result := nil; +end; + +function TClassicToken.GetLine: Integer; +begin + Result := FLine; +end; + +function TClassicToken.GetText: String; +begin + Result := FText; +end; + +function TClassicToken.GetTokenIndex: Integer; +begin + Result := FIndex; +end; + +function TClassicToken.GetTokenType: Integer; +begin + Result := FTokenType; +end; + +procedure TClassicToken.SetChannel(const Value: Integer); +begin + FChannel := Value; +end; + +procedure TClassicToken.SetCharPositionInLine(const Value: Integer); +begin + FCharPositionInLine := Value; +end; + +procedure TClassicToken.SetInputStream(const Value: ICharStream); +begin + // No default implementation +end; + +procedure TClassicToken.SetLine(const Value: Integer); +begin + FLine := Value; +end; + +procedure TClassicToken.SetText(const Value: String); +begin + FText := Value; +end; + +procedure TClassicToken.SetTokenIndex(const Value: Integer); +begin + FIndex := Value; +end; + +procedure TClassicToken.SetTokenType(const Value: Integer); +begin + FTokenType := Value; +end; + +function TClassicToken.ToString: String; +var + ChannelStr, Txt: String; +begin + if (FChannel > 0) then + ChannelStr := ',channel=' + IntToStr(FChannel) + else + ChannelStr := ''; + Txt := FText; + if (Txt <> '') then + begin + Txt := ReplaceStr(Txt,#10,'\n'); + Txt := ReplaceStr(Txt,#13,'\r'); + Txt := ReplaceStr(Txt,#9,'\t'); + end else + Txt := '<no text>'; + + Result := Format('[@%d,''%s'',<%d>%s,%d:%d]', + [FIndex,Txt,FTokenType,ChannelStr,FLine,FCharPositionInLine]); +end; + +{ TToken } + +class procedure TToken.Initialize; +begin + EOF_TOKEN := TCommonToken.Create(EOF); + INVALID_TOKEN := TCommonToken.Create(INVALID_TOKEN_TYPE); + SKIP_TOKEN := TCommonToken.Create(INVALID_TOKEN_TYPE); +end; + +{ TBaseRecognizer } + +constructor TBaseRecognizer.Create; +begin + inherited; + FState := TRecognizerSharedState.Create; +end; + +function TBaseRecognizer.AlreadyParsedRule(const Input: IIntStream; + const RuleIndex: Integer): Boolean; +var + StopIndex: Integer; +begin + StopIndex := GetRuleMemoization(RuleIndex, Input.Index); + Result := (StopIndex <> MEMO_RULE_UNKNOWN); + if Result then + begin + if (StopIndex = MEMO_RULE_FAILED) then + FState.Failed := True + else + Input.Seek(StopIndex + 1); // jump to one past stop token + end; +end; + +procedure TBaseRecognizer.BeginBacktrack(const Level: Integer); +begin + // No defeault implementation +end; + +procedure TBaseRecognizer.BeginResync; +begin + // No defeault implementation +end; + +procedure TBaseRecognizer.ConsumeUntil(const Input: IIntStream; + const TokenType: Integer); +var + TType: Integer; +begin + TType := Input.LA(1); + while (TType <> TToken.EOF) and (TType <> TokenType) do + begin + Input.Consume; + TType := Input.LA(1); + end; +end; + +function TBaseRecognizer.CombineFollows(const Exact: Boolean): IBitSet; +var + I, Top: Integer; + LocalFollowSet: IBitSet; +begin + Top := FState.FollowingStackPointer; + Result := TBitSet.Create; + for I := Top downto 0 do + begin + LocalFollowSet := FState.Following[I]; + Result.OrInPlace(LocalFollowSet); + if (Exact) then + begin + // can we see end of rule? + if LocalFollowSet.Member(TToken.EOR_TOKEN_TYPE) then + begin + // Only leave EOR in set if at top (start rule); this lets + // us know if have to include follow(start rule); i.e., EOF + if (I > 0) then + Result.Remove(TToken.EOR_TOKEN_TYPE); + end + else + // can't see end of rule, quit + Break; + end; + end; +end; + +function TBaseRecognizer.ComputeContextSensitiveRuleFOLLOW: IBitSet; +begin + Result := CombineFollows(True); +end; + +function TBaseRecognizer.ComputeErrorRecoverySet: IBitSet; +begin + Result := CombineFollows(False); +end; + +procedure TBaseRecognizer.ConsumeUntil(const Input: IIntStream; + const BitSet: IBitSet); +var + TType: Integer; +begin + TType := Input.LA(1); + while (TType <> TToken.EOF) and (not BitSet.Member(TType)) do + begin + Input.Consume; + TType := Input.LA(1); + end; +end; + +constructor TBaseRecognizer.Create(const AState: IRecognizerSharedState); +begin + if (AState = nil) then + Create + else + begin + inherited Create; + FState := AState; + end; +end; + +procedure TBaseRecognizer.DisplayRecognitionError( + const TokenNames: TStringArray; const E: ERecognitionException); +var + Hdr, Msg: String; +begin + Hdr := GetErrorHeader(E); + Msg := GetErrorMessage(E, TokenNames); + EmitErrorMessage(Hdr + ' ' + Msg); +end; + +procedure TBaseRecognizer.EmitErrorMessage(const Msg: String); +begin + WriteLn(Msg); +end; + +procedure TBaseRecognizer.EndBacktrack(const Level: Integer; + const Successful: Boolean); +begin + // No defeault implementation +end; + +procedure TBaseRecognizer.EndResync; +begin + // No defeault implementation +end; + +function TBaseRecognizer.GetBacktrackingLevel: Integer; +begin + Result := FState.Backtracking; +end; + +function TBaseRecognizer.GetCurrentInputSymbol( + const Input: IIntStream): IANTLRInterface; +begin + // No defeault implementation + Result := nil; +end; + +function TBaseRecognizer.GetErrorHeader(const E: ERecognitionException): String; +begin + Result := 'line ' + IntToStr(E.Line) + ':' + IntToStr(E.CharPositionInLine); +end; + +function TBaseRecognizer.GetErrorMessage(const E: ERecognitionException; + const TokenNames: TStringArray): String; +var + UTE: EUnwantedTokenException absolute E; + MTE: EMissingTokenException absolute E; + MMTE: EMismatchedTokenException absolute E; + MTNE: EMismatchedTreeNodeException absolute E; + NVAE: ENoViableAltException absolute E; + EEE: EEarlyExitException absolute E; + MSE: EMismatchedSetException absolute E; + MNSE: EMismatchedNotSetException absolute E; + FPE: EFailedPredicateException absolute E; + TokenName: String; +begin + Result := E.Message; + if (E is EUnwantedTokenException) then + begin + if (UTE.Expecting = TToken.EOF) then + TokenName := 'EOF' + else + TokenName := TokenNames[UTE.Expecting]; + Result := 'extraneous input ' + GetTokenErrorDisplay(UTE.UnexpectedToken) + + ' expecting ' + TokenName; + end + else + if (E is EMissingTokenException) then + begin + if (MTE.Expecting = TToken.EOF) then + TokenName := 'EOF' + else + TokenName := TokenNames[MTE.Expecting]; + Result := 'missing ' + TokenName + ' at ' + GetTokenErrorDisplay(E.Token); + end + else + if (E is EMismatchedTokenException) then + begin + if (MMTE.Expecting = TToken.EOF) then + TokenName := 'EOF' + else + TokenName := TokenNames[MMTE.Expecting]; + Result := 'mismatched input ' + GetTokenErrorDisplay(E.Token) + + ' expecting ' + TokenName; + end + else + if (E is EMismatchedTreeNodeException) then + begin + if (MTNE.Expecting = TToken.EOF) then + Result := 'EOF' + else + Result := TokenNames[MTNE.Expecting]; + // The ternary operator is only necessary because of a bug in the .NET framework + Result := 'mismatched tree node: '; + if (MTNE.Node <> nil) and (MTNE.Node.ToString <> '') then + Result := Result + MTNE.Node.ToString; + Result := Result + ' expecting ' + TokenName; + end + else + if (E is ENoViableAltException) then + begin + // for development, can add "decision=<<"+nvae.grammarDecisionDescription+">>" + // and "(decision="+nvae.decisionNumber+") and + // "state "+nvae.stateNumber + Result := 'no viable alternative at input ' + GetTokenErrorDisplay(E.Token); + end + else + if (E is EEarlyExitException) then + begin + // for development, can add "(decision="+eee.decisionNumber+")" + Result := 'required (...)+ loop did not match anyting at input ' + + GetTokenErrorDisplay(E.Token); + end else + if (E is EMismatchedSetException) then + begin + Result := 'mismatched input ' + GetTokenErrorDisplay(E.Token) + + ' expecting set ' + MSE.Expecting.ToString; + end + else + if (E is EMismatchedNotSetException) then + begin + Result := 'mismatched input ' + GetTokenErrorDisplay(E.Token) + + ' expecting set ' + MSE.Expecting.ToString; + end + else + if (E is EFailedPredicateException) then + begin + Result := 'rule ' + FPE.RuleName + + ' failed predicate: {' + FPE.PredicateText + '}?'; + end; +end; + +function TBaseRecognizer.GetGrammarFileName: String; +begin + // No defeault implementation + Result := ''; +end; + +function TBaseRecognizer.GetMissingSymbol(const Input: IIntStream; + const E: ERecognitionException; const ExpectedTokenType: Integer; + const Follow: IBitSet): IANTLRInterface; +begin + // No defeault implementation + Result := nil; +end; + +function TBaseRecognizer.GetNumberOfSyntaxErrors: Integer; +begin + Result := FState.SyntaxErrors; +end; + +function TBaseRecognizer.GetRuleMemoization(const RuleIndex, + RuleStartIndex: Integer): Integer; +var + Dict: IDictionary<Integer, Integer>; +begin + Dict := FState.RuleMemo[RuleIndex]; + if (Dict = nil) then + begin + Dict := TDictionary<Integer, Integer>.Create; + FState.RuleMemo[RuleIndex] := Dict; + end; + if (not Dict.TryGetValue(RuleStartIndex, Result)) then + Result := MEMO_RULE_UNKNOWN; +end; + +function TBaseRecognizer.GetRuleMemoizationChaceSize: Integer; +var + RuleMap: IDictionary<Integer, Integer>; +begin + Result := 0; + if Assigned(FState.RuleMemo) then + begin + for RuleMap in FState.RuleMemo do + if Assigned(RuleMap) then + Inc(Result,RuleMap.Count); // how many input indexes are recorded? + end; +end; + +function TBaseRecognizer.GetState: IRecognizerSharedState; +begin + Result := FState; +end; + +function TBaseRecognizer.GetTokenErrorDisplay(const T: IToken): String; +begin + Result := T.Text; + if (Result = '') then + begin + if (T.TokenType = TToken.EOF) then + Result := '<EOF>' + else + Result := '<' + IntToStr(T.TokenType) + '>'; + end; + Result := ReplaceStr(Result,#10,'\n'); + Result := ReplaceStr(Result,#13,'\r'); + Result := ReplaceStr(Result,#9,'\t'); + Result := '''' + Result + ''''; +end; + +function TBaseRecognizer.GetTokenNames: TStringArray; +begin + // no default implementation + Result := nil; +end; + +function TBaseRecognizer.Match(const Input: IIntStream; + const TokenType: Integer; const Follow: IBitSet): IANTLRInterface; +begin + Result := GetCurrentInputSymbol(Input); + if (Input.LA(1) = TokenType) then + begin + Input.Consume; + FState.ErrorRecovery := False; + FState.Failed := False; + end else + begin + if (FState.Backtracking > 0) then + FState.Failed := True + else + begin + Mismatch(Input, TokenType, Follow); + Result := RecoverFromMismatchedToken(Input, TokenType, Follow); + end; + end; +end; + +procedure TBaseRecognizer.MatchAny(const Input: IIntStream); +begin + FState.ErrorRecovery := False; + FState.Failed := False; + Input.Consume; +end; + +procedure TBaseRecognizer.Memoize(const Input: IIntStream; const RuleIndex, + RuleStartIndex: Integer); +var + StopTokenIndex: Integer; + Dict: IDictionary<Integer, Integer>; +begin + Dict := FState.RuleMemo[RuleIndex]; + if Assigned(Dict) then + begin + if FState.Failed then + StopTokenIndex := MEMO_RULE_FAILED + else + StopTokenIndex := Input.Index - 1; + Dict.AddOrSetValue(RuleStartIndex, StopTokenIndex); + end; +end; + +procedure TBaseRecognizer.Mismatch(const Input: IIntStream; + const TokenType: Integer; const Follow: IBitSet); +begin + if MismatchIsUnwantedToken(Input, TokenType) then + raise EUnwantedTokenException.Create(TokenType, Input) + else + if MismatchIsMissingToken(Input, Follow) then + raise EMissingTokenException.Create(TokenType, Input, nil) + else + raise EMismatchedTokenException.Create(TokenType, Input); +end; + +function TBaseRecognizer.MismatchIsMissingToken(const Input: IIntStream; + const Follow: IBitSet): Boolean; +var + ViableTokensFollowingThisRule, Follow2: IBitSet; +begin + if (Follow = nil) then + // we have no information about the follow; we can only consume + // a single token and hope for the best + Result := False + else + begin + Follow2 := Follow; + // compute what can follow this grammar element reference + if (Follow.Member(TToken.EOR_TOKEN_TYPE)) then + begin + ViableTokensFollowingThisRule := ComputeContextSensitiveRuleFOLLOW(); + Follow2 := Follow.BitSetOr(ViableTokensFollowingThisRule); + if (FState.FollowingStackPointer >= 0) then + // remove EOR if we're not the start symbol + Follow2.Remove(TToken.EOR_TOKEN_TYPE); + end; + + // if current token is consistent with what could come after set + // then we know we're missing a token; error recovery is free to + // "insert" the missing token + + // BitSet cannot handle negative numbers like -1 (EOF) so I leave EOR + // in follow set to indicate that the fall of the start symbol is + // in the set (EOF can follow). + if (Follow2.Member(Input.LA(1)) or Follow2.Member(TToken.EOR_TOKEN_TYPE)) then + Result := True + else + Result := False; + end; +end; + +function TBaseRecognizer.MismatchIsUnwantedToken(const Input: IIntStream; + const TokenType: Integer): Boolean; +begin + Result := (Input.LA(2) = TokenType); +end; + +procedure TBaseRecognizer.PushFollow(const FSet: IBitSet); +var + F: TBitSetArray; + I: Integer; +begin + if ((FState.FollowingStackPointer + 1) >= Length(FState.Following)) then + begin + SetLength(F, Length(FState.Following) * 2); + FillChar(F[0], Length(F) * SizeOf(IBitSet), 0); + for I := 0 to Length(FState.Following) - 1 do + F[I] := FState.Following[I]; + FState.Following := F; + end; + FState.FollowingStackPointer := FState.FollowingStackPointer + 1; + FState.Following[FState.FollowingStackPointer] := FSet; +end; + +procedure TBaseRecognizer.Recover(const Input: IIntStream; + const RE: ERecognitionException); +var + FollowSet: IBitSet; +begin + if (FState.LastErrorIndex = Input.Index) then + // uh oh, another error at same token index; must be a case + // where LT(1) is in the recovery token set so nothing is + // consumed; consume a single token so at least to prevent + // an infinite loop; this is a failsafe. + Input.Consume; + FState.LastErrorIndex := Input.Index; + FollowSet := ComputeErrorRecoverySet; + BeginResync; + ConsumeUntil(Input,FollowSet); + EndResync; +end; + +function TBaseRecognizer.RecoverFromMismatchedSet(const Input: IIntStream; + const E: ERecognitionException; const Follow: IBitSet): IANTLRInterface; +begin + if MismatchIsMissingToken(Input, Follow) then + begin + ReportError(E); + // we don't know how to conjure up a token for sets yet + Result := GetMissingSymbol(Input, E, TToken.INVALID_TOKEN_TYPE, Follow); + end + else + begin + // TODO do single token deletion like above for Token mismatch + Result := nil; + raise E; + end; +end; + +function TBaseRecognizer.RecoverFromMismatchedToken(const Input: IIntStream; + const TokenType: Integer; const Follow: IBitSet): IANTLRInterface; +var + E: ERecognitionException; +begin + // if next token is what we are looking for then "delete" this token + if MismatchIsUnwantedToken(Input, TokenType) then + begin + E := EUnwantedTokenException.Create(TokenType, Input); + BeginResync; + Input.Consume; // simply delete extra token + EndResync; + ReportError(E); // report after consuming so AW sees the token in the exception + // we want to return the token we're actually matching + Result := GetCurrentInputSymbol(Input); + Input.Consume; // move past ttype token as if all were ok + end + else + begin + // can't recover with single token deletion, try insertion + if MismatchIsMissingToken(Input, Follow) then + begin + E := nil; + Result := GetMissingSymbol(Input, E, TokenType, Follow); + E := EMissingTokenException.Create(TokenType, Input, Result); + ReportError(E); // report after inserting so AW sees the token in the exception + end + else + begin + // even that didn't work; must throw the exception + raise EMismatchedTokenException.Create(TokenType, Input); + end; + end; +end; + +procedure TBaseRecognizer.ReportError(const E: ERecognitionException); +begin + // if we've already reported an error and have not matched a token + // yet successfully, don't report any errors. + if (not FState.ErrorRecovery) then + begin + FState.SyntaxErrors := FState.SyntaxErrors + 1; // don't count spurious + FState.ErrorRecovery := True; + DisplayRecognitionError(GetTokenNames, E); + end; +end; + +procedure TBaseRecognizer.Reset; +var + I: Integer; +begin + // wack everything related to error recovery + if (FState = nil) then + Exit; // no shared state work to do + + FState.FollowingStackPointer := -1; + FState.ErrorRecovery := False; + FState.LastErrorIndex := -1; + FState.Failed := False; + FState.SyntaxErrors := 0; + + // wack everything related to backtracking and memoization + FState.Backtracking := 0; + if Assigned(FState.RuleMemo) then + for I := 0 to Length(FState.RuleMemo) - 1 do + begin + // wipe cache + FState.RuleMemo[I] := nil; + end; +end; + +function TBaseRecognizer.ToStrings(const Tokens: IList<IToken>): IList<String>; +var + Token: IToken; +begin + if (Tokens = nil) then + Result := nil + else + begin + Result := TList<String>.Create; + for Token in Tokens do + Result.Add(Token.Text); + end; +end; + +procedure TBaseRecognizer.TraceIn(const RuleName: String; + const RuleIndex: Integer; const InputSymbol: String); +begin + Write('enter ' + RuleName + ' ' + InputSymbol); + if (FState.Failed) then + WriteLn(' failed=True'); + if (FState.Backtracking > 0) then + Write(' backtracking=' + IntToStr(FState.Backtracking)); + WriteLn; +end; + +procedure TBaseRecognizer.TraceOut(const RuleName: String; + const RuleIndex: Integer; const InputSymbol: String); +begin + Write('exit ' + RuleName + ' ' + InputSymbol); + if (FState.Failed) then + WriteLn(' failed=True'); + if (FState.Backtracking > 0) then + Write(' backtracking=' + IntToStr(FState.Backtracking)); + WriteLn; +end; + +{ TCommonTokenStream } + +procedure TCommonTokenStream.Consume; +begin + if (FP < FTokens.Count) then + begin + Inc(FP); + FP := SkipOffTokenChannels(FP); // leave p on valid token + end; +end; + +constructor TCommonTokenStream.Create; +begin + inherited; + FP := -1; + FChannel := TToken.DEFAULT_CHANNEL; + FTokens := TList<IToken>.Create; + FTokens.Capacity := 500; +end; + +constructor TCommonTokenStream.Create(const ATokenSource: ITokenSource); +begin + Create; + FTokenSource := ATokenSource; +end; + +procedure TCommonTokenStream.DiscardOffChannelTokens(const Discard: Boolean); +begin + FDiscardOffChannelTokens := Discard; +end; + +procedure TCommonTokenStream.DiscardTokenType(const TType: Integer); +begin + if (FDiscardSet = nil) then + FDiscardSet := THashList<Integer, Integer>.Create; + FDiscardSet.Add(TType, TType); +end; + +procedure TCommonTokenStream.FillBuffer; +var + Index: Integer; + T: IToken; + Discard: Boolean; +begin + Index := 0; + T := FTokenSource.NextToken; + while Assigned(T) and (T.TokenType <> Integer(cscEOF)) do + begin + Discard := False; + // is there a channel override for token type? + if Assigned(FChannelOverrideMap) then + if FChannelOverrideMap.ContainsKey(T.TokenType) then + T.Channel := FChannelOverrideMap[T.TokenType]; + + if Assigned(FDiscardSet) and FDiscardSet.ContainsKey(T.TokenType) then + Discard := True + else + if FDiscardOffChannelTokens and (T.Channel <> FChannel) then + Discard := True; + + if (not Discard) then + begin + T.TokenIndex := Index; + FTokens.Add(T); + Inc(Index); + end; + + T := FTokenSource.NextToken; + end; + // leave p pointing at first token on channel + FP := 0; + FP := SkipOffTokenChannels(FP); +end; + +function TCommonTokenStream.Get(const I: Integer): IToken; +begin + Result := FTokens[I]; +end; + +function TCommonTokenStream.GetSourceName: String; +begin + Result := FTokenSource.SourceName; +end; + +function TCommonTokenStream.GetTokens(const Start, Stop: Integer; + const Types: IList<Integer>): IList<IToken>; +begin + Result := GetTokens(Start, Stop, TBitSet.Create(Types)); +end; + +function TCommonTokenStream.GetTokens(const Start, Stop, + TokenType: Integer): IList<IToken>; +begin + Result := GetTokens(Start, Stop, TBitSet.BitSetOf(TokenType)); +end; + +function TCommonTokenStream.GetTokens(const Start, Stop: Integer; + const Types: IBitSet): IList<IToken>; +var + I, StartIndex, StopIndex: Integer; + T: IToken; +begin + if (FP = -1) then + FillBuffer; + StopIndex := Min(Stop,FTokens.Count - 1); + StartIndex := Max(Start,0); + if (StartIndex > StopIndex) then + Result := nil + else + begin + Result := TList<IToken>.Create; + for I := StartIndex to StopIndex do + begin + T := FTokens[I]; + if (Types = nil) or Types.Member(T.TokenType) then + Result.Add(T); + end; + if (Result.Count = 0) then + Result := nil; + end; +end; + +function TCommonTokenStream.GetTokens: IList<IToken>; +begin + if (FP = -1) then + FillBuffer; + Result := FTokens; +end; + +function TCommonTokenStream.GetTokens(const Start, + Stop: Integer): IList<IToken>; +begin + Result := GetTokens(Start, Stop, IBitSet(nil)); +end; + +function TCommonTokenStream.GetTokenSource: ITokenSource; +begin + Result := FTokenSource; +end; + +function TCommonTokenStream.Index: Integer; +begin + Result := FP; +end; + +function TCommonTokenStream.LA(I: Integer): Integer; +begin + Result := LT(I).TokenType; +end; + +function TCommonTokenStream.LAChar(I: Integer): Char; +begin + Result := Char(LA(I)); +end; + +function TCommonTokenStream.LB(const K: Integer): IToken; +var + I, N: Integer; +begin + if (FP = -1) then + FillBuffer; + if (K = 0) then + Result := nil + else + if ((FP - K) < 0) then + Result := nil + else + begin + I := FP; + N := 1; + // find k good tokens looking backwards + while (N <= K) do + begin + // skip off-channel tokens + I := SkipOffTokenChannelsReverse(I - 1); // leave p on valid token + Inc(N); + end; + if (I < 0) then + Result := nil + else + Result := FTokens[I]; + end; +end; + +function TCommonTokenStream.LT(const K: Integer): IToken; +var + I, N: Integer; +begin + if (FP = -1) then + FillBuffer; + if (K = 0) then + Result := nil + else + if (K < 0) then + Result := LB(-K) + else + if ((FP + K - 1) >= FTokens.Count) then + Result := TToken.EOF_TOKEN + else + begin + I := FP; + N := 1; + // find k good tokens + while (N < K) do + begin + // skip off-channel tokens + I := SkipOffTokenChannels(I + 1); // leave p on valid token + Inc(N); + end; + if (I >= FTokens.Count) then + Result := TToken.EOF_TOKEN + else + Result := FTokens[I]; + end; +end; + +function TCommonTokenStream.Mark: Integer; +begin + if (FP = -1) then + FillBuffer; + FLastMarker := Index; + Result := FLastMarker; +end; + +procedure TCommonTokenStream.Release(const Marker: Integer); +begin + // no resources to release +end; + +procedure TCommonTokenStream.Reset; +begin + FP := 0; + FLastMarker := 0; +end; + +procedure TCommonTokenStream.Rewind(const Marker: Integer); +begin + Seek(Marker); +end; + +procedure TCommonTokenStream.Rewind; +begin + Seek(FLastMarker); +end; + +procedure TCommonTokenStream.Seek(const Index: Integer); +begin + FP := Index; +end; + +procedure TCommonTokenStream.SetTokenSource(const Value: ITokenSource); +begin + FTokenSource := Value; + FTokens.Clear; + FP := -1; + FChannel := TToken.DEFAULT_CHANNEL; +end; + +procedure TCommonTokenStream.SetTokenTypeChannel(const TType, Channel: Integer); +begin + if (FChannelOverrideMap = nil) then + FChannelOverrideMap := TDictionary<Integer, Integer>.Create; + FChannelOverrideMap[TType] := Channel; +end; + +function TCommonTokenStream.Size: Integer; +begin + Result := FTokens.Count; +end; + +function TCommonTokenStream.SkipOffTokenChannels(const I: Integer): Integer; +var + N: Integer; +begin + Result := I; + N := FTokens.Count; + while (Result < N) and (FTokens[Result].Channel <> FChannel) do + Inc(Result); +end; + +function TCommonTokenStream.SkipOffTokenChannelsReverse( + const I: Integer): Integer; +begin + Result := I; + while (Result >= 0) and (FTokens[Result].Channel <> FChannel) do + Dec(Result); +end; + +function TCommonTokenStream.ToString: String; +begin + if (FP = -1) then + FillBuffer; + Result := ToString(0, FTokens.Count - 1); +end; + +function TCommonTokenStream.ToString(const Start, Stop: Integer): String; +var + I, Finish: Integer; + Buf: TStringBuilder; + T: IToken; +begin + if (Start < 0) or (Stop < 0) then + Result := '' + else + begin + if (FP = -1) then + FillBuffer; + if (Stop >= FTokens.Count) then + Finish := FTokens.Count - 1 + else + Finish := Stop; + Buf := TStringBuilder.Create; + try + for I := Start to Finish do + begin + T := FTokens[I]; + Buf.Append(T.Text); + end; + Result := Buf.ToString; + finally + Buf.Free; + end; + end; +end; + +function TCommonTokenStream.ToString(const Start, Stop: IToken): String; +begin + if Assigned(Start) and Assigned(Stop) then + Result := ToString(Start.TokenIndex, Stop.TokenIndex) + else + Result := ''; +end; + +constructor TCommonTokenStream.Create(const ATokenSource: ITokenSource; + const AChannel: Integer); +begin + Create(ATokenSource); + FChannel := AChannel; +end; + +constructor TCommonTokenStream.Create(const ALexer: ILexer); +begin + Create(ALexer as ITokenSource); +end; + +constructor TCommonTokenStream.Create(const ALexer: ILexer; + const AChannel: Integer); +begin + Create(ALexer as ITokenSource, AChannel); +end; + +{ TDFA } + +function TDFA.Description: String; +begin + Result := 'n/a'; +end; + +procedure TDFA.Error(const NVAE: ENoViableAltException); +begin + // No default implementation +end; + +function TDFA.GetRecognizer: IBaseRecognizer; +begin + Result := IBaseRecognizer(FRecognizer); +end; + +function TDFA.GetSpecialStateTransitionHandler: TSpecialStateTransitionHandler; +begin + Result := FSpecialStateTransitionHandler; +end; + +procedure TDFA.NoViableAlt(const S: Integer; const Input: IIntStream); +var + NVAE: ENoViableAltException; +begin + if (Recognizer.State.Backtracking > 0) then + Recognizer.State.Failed := True + else + begin + NVAE := ENoViableAltException.Create(Description, FDecisionNumber, S, Input); + Error(NVAE); + raise NVAE; + end; +end; + +function TDFA.Predict(const Input: IIntStream): Integer; +var + Mark, S, SNext, SpecialState: Integer; + C: Char; +begin + Result := 0; + Mark := Input.Mark; // remember where decision started in input + S := 0; // we always start at s0 + try + while True do + begin + SpecialState := FSpecial[S]; + if (SpecialState >= 0) then + begin + S := FSpecialStateTransitionHandler(Self, SpecialState, Input); + if (S = -1) then + begin + NoViableAlt(S, Input); + Exit; + end; + Input.Consume; + Continue; + end; + + if (FAccept[S] >= 1) then + begin + Result := FAccept[S]; + Exit; + end; + + // look for a normal char transition + C := Char(Input.LA(1)); // -1 == \uFFFF, all tokens fit in 65000 space + if (C >= FMin[S]) and (C <= FMax[S]) then + begin + SNext := FTransition[S,Integer(C) - Integer(FMin[S])]; // move to next state + if (SNext < 0) then + begin + // was in range but not a normal transition + // must check EOT, which is like the else clause. + // eot[s]>=0 indicates that an EOT edge goes to another + // state. + if (FEOT[S] >= 0) then // EOT Transition to accept state? + begin + S := FEOT[S]; + Input.Consume; + // TODO: I had this as return accept[eot[s]] + // which assumed here that the EOT edge always + // went to an accept...faster to do this, but + // what about predicated edges coming from EOT + // target? + Continue; + end; + + NoViableAlt(S, Input); + Exit; + end; + S := SNext; + Input.Consume; + Continue; + end; + + if (FEOT[S] >= 0) then + begin + // EOT Transition? + S := FEOT[S]; + Input.Consume; + Continue; + end; + + if (C = Char(TToken.EOF)) and (FEOF[S] >= 0) then + begin + // EOF Transition to accept state? + Result := FAccept[FEOF[S]]; + Exit; + end; + + // not in range and not EOF/EOT, must be invalid symbol + NoViableAlt(S, Input); + Exit; + end; + finally + Input.Rewind(Mark); + end; +end; + +procedure TDFA.SetRecognizer(const Value: IBaseRecognizer); +begin + FRecognizer := Pointer(Value); +end; + +procedure TDFA.SetSpecialStateTransitionHandler( + const Value: TSpecialStateTransitionHandler); +begin + FSpecialStateTransitionHandler := Value; +end; + +function TDFA.SpecialStateTransition(const S: Integer; + const Input: IIntStream): Integer; +begin + // No default implementation + Result := -1; +end; + +function TDFA.SpecialTransition(const State, Symbol: Integer): Integer; +begin + Result := 0; +end; + +class function TDFA.UnpackEncodedString( + const EncodedString: String): TSmallintArray; +var + I, J, DI, Size: Integer; + N, V: Char; +begin + Size := 0; + I := 1; + while (I <= Length(EncodedString)) do + begin + Inc(Size,Integer(EncodedString[I])); + Inc(I,2); + end; + + SetLength(Result,Size); + DI := 0; + I := 1; + while (I <= Length(EncodedString)) do + begin + N := EncodedString[I]; + V := EncodedString[I + 1]; + // add v n times to data + for J := 1 to Integer(N) do + begin + Result[DI] := Smallint(V); + Inc(DI); + end; + Inc(I,2); + end; +end; + +class function TDFA.UnpackEncodedStringArray( + const EncodedStrings: array of String): TSmallintMatrix; +var + I: Integer; +begin + SetLength(Result,Length(EncodedStrings)); + for I := 0 to Length(EncodedStrings) - 1 do + Result[I] := UnpackEncodedString(EncodedStrings[I]); +end; + +class function TDFA.UnpackEncodedStringArray( + const EncodedStrings: TStringArray): TSmallintMatrix; +var + I: Integer; +begin + SetLength(Result,Length(EncodedStrings)); + for I := 0 to Length(EncodedStrings) - 1 do + Result[I] := UnpackEncodedString(EncodedStrings[I]); +end; + +class function TDFA.UnpackEncodedStringToUnsignedChars( + const EncodedString: String): TCharArray; +var + I, J, DI, Size: Integer; + N, V: Char; +begin + Size := 0; + I := 1; + while (I <= Length(EncodedString)) do + begin + Inc(Size,Integer(EncodedString[I])); + Inc(I,2); + end; + + SetLength(Result,Size); + DI := 0; + I := 1; + while (I <= Length(EncodedString)) do + begin + N := EncodedString[I]; + V := EncodedString[I + 1]; + // add v n times to data + for J := 1 to Integer(N) do + begin + Result[DI] := V; + Inc(DI); + end; + Inc(I,2); + end; +end; + +{ TLexer } + +constructor TLexer.Create; +begin + inherited; +end; + +constructor TLexer.Create(const AInput: ICharStream); +begin + inherited Create; + FInput := AInput; +end; + +constructor TLexer.Create(const AInput: ICharStream; + const AState: IRecognizerSharedState); +begin + inherited Create(AState); + FInput := AInput; +end; + +function TLexer.Emit: IToken; +begin + Result := TCommonToken.Create(FInput, FState.TokenType, FState.Channel, + FState.TokenStartCharIndex, GetCharIndex - 1); + Result.Line := FState.TokenStartLine; + Result.Text := FState.Text; + Result.CharPositionInLine := FState.TokenStartCharPositionInLine; + Emit(Result); +end; + +procedure TLexer.Emit(const Token: IToken); +begin + FState.Token := Token; +end; + +function TLexer.GetCharErrorDisplay(const C: Integer): String; +begin + case C of + // TToken.EOF + TOKEN_dot_EOF: + Result := '<EOF>'; + 10: + Result := '\n'; + 9: + Result := '\t'; + 13: + Result := '\r'; + else + Result := Char(C); + end; + Result := '''' + Result + ''''; +end; + +function TLexer.GetCharIndex: Integer; +begin + Result := FInput.Index; +end; + +function TLexer.GetCharPositionInLine: Integer; +begin + Result := FInput.CharPositionInLine; +end; + +function TLexer.GetCharStream: ICharStream; +begin + Result := FInput; +end; + +function TLexer.GetErrorMessage(const E: ERecognitionException; + const TokenNames: TStringArray): String; +var + MTE: EMismatchedTokenException absolute E; + NVAE: ENoViableAltException absolute E; + EEE: EEarlyExitException absolute E; + MNSE: EMismatchedNotSetException absolute E; + MSE: EMismatchedSetException absolute E; + MRE: EMismatchedRangeException absolute E; +begin + if (E is EMismatchedTokenException) then + Result := 'mismatched character ' + GetCharErrorDisplay(E.Character) + + ' expecting ' + GetCharErrorDisplay(MTE.Expecting) + else + if (E is ENoViableAltException) then + // for development, can add "decision=<<"+nvae.grammarDecisionDescription+">>" + // and "(decision="+nvae.decisionNumber+") and + // "state "+nvae.stateNumber + Result := 'no viable alternative at character ' + GetCharErrorDisplay(NVAE.Character) + else + if (E is EEarlyExitException) then + // for development, can add "(decision="+eee.decisionNumber+")" + Result := 'required (...)+ loop did not match anything at character ' + + GetCharErrorDisplay(EEE.Character) + else + if (E is EMismatchedNotSetException) then + Result := 'mismatched character ' + GetCharErrorDisplay(MNSE.Character) + + ' expecting set ' + MNSE.Expecting.ToString + else + if (E is EMismatchedSetException) then + Result := 'mismatched character ' + GetCharErrorDisplay(MSE.Character) + + ' expecting set ' + MSE.Expecting.ToString + else + if (E is EMismatchedRangeException) then + Result := 'mismatched character ' + GetCharErrorDisplay(MRE.Character) + + ' expecting set ' + GetCharErrorDisplay(MRE.A) + '..' + + GetCharErrorDisplay(MRE.B) + else + Result := inherited GetErrorMessage(E, TokenNames); +end; + +function TLexer.GetInput: IIntStream; +begin + Result := FInput; +end; + +function TLexer.GetLine: Integer; +begin + Result := FInput.Line; +end; + +function TLexer.GetSourceName: String; +begin + Result := FInput.SourceName; +end; + +function TLexer.GetText: String; +begin + if (FState.Text <> '') then + Result := FState.Text + else + Result := FInput.Substring(FState.TokenStartCharIndex, GetCharIndex - 1) +end; + +procedure TLexer.Match(const S: String); +var + I: Integer; + MTE: EMismatchedTokenException; +begin + for I := 1 to Length(S) do + begin + if (FInput.LA(1) <> Integer(S[I])) then + begin + if (FState.Backtracking > 0) then + begin + FState.Failed := True; + Exit; + end; + MTE := EMismatchedTokenException.Create(Integer(S[I]), FInput); + Recover(MTE); // don't really recover; just consume in lexer + raise MTE; + end; + FInput.Consume; + FState.Failed := False; + end; +end; + +procedure TLexer.Match(const C: Integer); +var + MTE: EMismatchedTokenException; +begin + if (FInput.LA(1) <> C) then + begin + if (FState.Backtracking > 0) then + begin + FState.Failed := True; + Exit; + end; + MTE := EMismatchedTokenException.Create(C, FInput); + Recover(MTE); + raise MTE; + end; + FInput.Consume; + FState.Failed := False; +end; + +procedure TLexer.MatchAny; +begin + FInput.Consume; +end; + +procedure TLexer.MatchRange(const A, B: Integer); +var + MRE: EMismatchedRangeException; +begin + if (FInput.LA(1) < A) or (FInput.LA(1) > B) then + begin + if (FState.Backtracking > 0) then + begin + FState.Failed := True; + Exit; + end; + MRE := EMismatchedRangeException.Create(A, B, FInput); + Recover(MRE); + raise MRE; + end; + FInput.Consume; + FState.Failed := False; +end; + +function TLexer.NextToken: IToken; +begin + while True do + begin + FState.Token := nil; + FState.Channel := TToken.DEFAULT_CHANNEL; + FState.TokenStartCharIndex := FInput.Index; + FState.TokenStartCharPositionInLine := FInput.CharPositionInLine; + FState.TokenStartLine := Finput.Line; + FState.Text := ''; + if (FInput.LA(1) = Integer(cscEOF)) then + begin + Result := TToken.EOF_TOKEN; + Exit; + end; + + try + DoTokens; + if (FState.Token = nil) then + Emit + else + if (FState.Token = TToken.SKIP_TOKEN) then + Continue; + Exit(FState.Token); + except + on NVA: ENoViableAltException do + begin + ReportError(NVA); + Recover(NVA); // throw out current char and try again + end; + + on RE: ERecognitionException do + begin + ReportError(RE); + // Match() routine has already called Recover() + end; + end; + end; +end; + +procedure TLexer.Recover(const RE: ERecognitionException); +begin + FInput.Consume; +end; + +procedure TLexer.ReportError(const E: ERecognitionException); +begin + DisplayRecognitionError(GetTokenNames, E); +end; + +procedure TLexer.Reset; +begin + inherited; // reset all recognizer state variables + // wack Lexer state variables + if Assigned(FInput) then + FInput.Seek(0); // rewind the input + if (FState = nil) then + Exit; // no shared state work to do + FState.Token := nil; + FState.TokenType := TToken.INVALID_TOKEN_TYPE; + FState.Channel := TToken.DEFAULT_CHANNEL; + FState.TokenStartCharIndex := -1; + FState.TokenStartCharPositionInLine := -1; + FState.TokenStartLine := -1; + FState.Text := ''; +end; + +procedure TLexer.SetCharStream(const Value: ICharStream); +begin + FInput := nil; + Reset; + FInput := Value; +end; + +procedure TLexer.SetText(const Value: String); +begin + FState.Text := Value; +end; + +procedure TLexer.Skip; +begin + FState.Token := TToken.SKIP_TOKEN; +end; + +procedure TLexer.TraceIn(const RuleName: String; const RuleIndex: Integer); +var + InputSymbol: String; +begin + InputSymbol := Char(FInput.LT(1)) + ' line=' + IntToStr(GetLine) + ':' + + IntToStr(GetCharPositionInLine); + inherited TraceIn(RuleName, RuleIndex, InputSymbol); +end; + +procedure TLexer.TraceOut(const RuleName: String; const RuleIndex: Integer); +var + InputSymbol: String; +begin + InputSymbol := Char(FInput.LT(1)) + ' line=' + IntToStr(GetLine) + ':' + + IntToStr(GetCharPositionInLine); + inherited TraceOut(RuleName, RuleIndex, InputSymbol); +end; + +{ TParser } + +constructor TParser.Create(const AInput: ITokenStream); +begin + inherited Create; // highlight that we go to base class to set state object + SetTokenStream(AInput); +end; + +constructor TParser.Create(const AInput: ITokenStream; + const AState: IRecognizerSharedState); +begin + inherited Create(AState); // share the state object with another parser + SetTokenStream(AInput); +end; + +function TParser.GetCurrentInputSymbol( + const Input: IIntStream): IANTLRInterface; +begin + Result := FInput.LT(1) +end; + +function TParser.GetInput: IIntStream; +begin + Result := FInput; +end; + +function TParser.GetMissingSymbol(const Input: IIntStream; + const E: ERecognitionException; const ExpectedTokenType: Integer; + const Follow: IBitSet): IANTLRInterface; +var + TokenText: String; + T: ICommonToken; + Current: IToken; +begin + if (ExpectedTokenType = TToken.EOF) then + TokenText := '<missing EOF>' + else + TokenText := '<missing ' + GetTokenNames[ExpectedTokenType] + '>'; + T := TCommonToken.Create(ExpectedTokenType, TokenText); + Current := FInput.LT(1); + if (Current.TokenType = TToken.EOF) then + Current := FInput.LT(-1); + T.Line := Current.Line; + T.CharPositionInLine := Current.CharPositionInLine; + T.Channel := DEFAULT_TOKEN_CHANNEL; + Result := T; +end; + +function TParser.GetSourceName: String; +begin + Result := FInput.SourceName; +end; + +function TParser.GetTokenStream: ITokenStream; +begin + Result := FInput; +end; + +procedure TParser.Reset; +begin + inherited; // reset all recognizer state variables + if Assigned(FInput) then + FInput.Seek(0); // rewind the input +end; + +procedure TParser.SetTokenStream(const Value: ITokenStream); +begin + FInput := nil; + Reset; + FInput := Value; +end; + +procedure TParser.TraceIn(const RuleName: String; const RuleIndex: Integer); +begin + inherited TraceIn(RuleName, RuleIndex, FInput.LT(1).ToString); +end; + +procedure TParser.TraceOut(const RuleName: String; const RuleIndex: Integer); +begin + inherited TraceOut(RuleName, RuleIndex, FInput.LT(1).ToString); +end; + +{ TRuleReturnScope } + +function TRuleReturnScope.GetStart: IANTLRInterface; +begin + Result := nil; +end; + +function TRuleReturnScope.GetStop: IANTLRInterface; +begin + Result := nil; +end; + +function TRuleReturnScope.GetTemplate: IANTLRInterface; +begin + Result := nil; +end; + +function TRuleReturnScope.GetTree: IANTLRInterface; +begin + Result := nil; +end; + +procedure TRuleReturnScope.SetStart(const Value: IANTLRInterface); +begin + raise EInvalidOperation.Create('Setter has not been defined for this property.'); +end; + +procedure TRuleReturnScope.SetStop(const Value: IANTLRInterface); +begin + raise EInvalidOperation.Create('Setter has not been defined for this property.'); +end; + +procedure TRuleReturnScope.SetTree(const Value: IANTLRInterface); +begin + raise EInvalidOperation.Create('Setter has not been defined for this property.'); +end; + +{ TParserRuleReturnScope } + +function TParserRuleReturnScope.GetStart: IANTLRInterface; +begin + Result := FStart; +end; + +function TParserRuleReturnScope.GetStop: IANTLRInterface; +begin + Result := FStop; +end; + +procedure TParserRuleReturnScope.SetStart(const Value: IANTLRInterface); +begin + FStart := Value as IToken; +end; + +procedure TParserRuleReturnScope.SetStop(const Value: IANTLRInterface); +begin + FStop := Value as IToken; +end; + +{ TTokenRewriteStream } + +procedure TTokenRewriteStream.Delete(const Start, Stop: IToken); +begin + Delete(DEFAULT_PROGRAM_NAME, Start, Stop); +end; + +procedure TTokenRewriteStream.Delete(const IndexT: IToken); +begin + Delete(DEFAULT_PROGRAM_NAME, IndexT, IndexT); +end; + +constructor TTokenRewriteStream.Create; +begin + inherited; + Init; +end; + +constructor TTokenRewriteStream.Create(const ATokenSource: ITokenSource); +begin + inherited Create(ATokenSource); + Init; +end; + +constructor TTokenRewriteStream.Create(const ALexer: ILexer); +begin + Create(ALexer as ITokenSource); +end; + +constructor TTokenRewriteStream.Create(const ALexer: ILexer; + const AChannel: Integer); +begin + Create(ALexer as ITokenSource, AChannel); +end; + +function TTokenRewriteStream.CatOpText(const A, B: IANTLRInterface): IANTLRInterface; +var + X, Y: String; +begin + if Assigned(A) then + X := A.ToString + else + X := ''; + + if Assigned(B) then + Y := B.ToString + else + Y := ''; + + Result := TANTLRString.Create(X + Y); +end; + +constructor TTokenRewriteStream.Create(const ATokenSource: ITokenSource; + const AChannel: Integer); +begin + inherited Create(ATokenSource, AChannel); + Init; +end; + +procedure TTokenRewriteStream.Delete(const ProgramName: String; const Start, + Stop: IToken); +begin + Replace(ProgramName, Start, Stop, nil); +end; + +procedure TTokenRewriteStream.Delete(const ProgramName: String; const Start, + Stop: Integer); +begin + Replace(ProgramName, Start, Stop, nil); +end; + +procedure TTokenRewriteStream.Delete(const Start, Stop: Integer); +begin + Delete(DEFAULT_PROGRAM_NAME, Start, Stop); +end; + +procedure TTokenRewriteStream.Delete(const Index: Integer); +begin + Delete(DEFAULT_PROGRAM_NAME, Index, Index); +end; + +procedure TTokenRewriteStream.DeleteProgram(const ProgramName: String); +begin + Rollback(ProgramName, MIN_TOKEN_INDEX); +end; + +procedure TTokenRewriteStream.DeleteProgram; +begin + DeleteProgram(DEFAULT_PROGRAM_NAME); +end; + +function TTokenRewriteStream.GetLastRewriteTokenIndex: Integer; +begin + Result := GetLastRewriteTokenIndex(DEFAULT_PROGRAM_NAME); +end; + +function TTokenRewriteStream.GetKindOfOps( + const Rewrites: IList<IRewriteOperation>; + const Kind: TGUID): IList<IRewriteOperation>; +begin + Result := GetKindOfOps(Rewrites, Kind, Rewrites.Count); +end; + +function TTokenRewriteStream.GetKindOfOps( + const Rewrites: IList<IRewriteOperation>; const Kind: TGUID; + const Before: Integer): IList<IRewriteOperation>; +var + I: Integer; + Op: IRewriteOperation; + Obj: IInterface; +begin + Result := TList<IRewriteOperation>.Create; + I := 0; + while (I < Before) and (I < Rewrites.Count) do + begin + Op := Rewrites[I]; + if Assigned(Op) and (Op.QueryInterface(Kind, Obj) = 0) then + Result.Add(Op); + Inc(I); + end; +end; + +function TTokenRewriteStream.GetLastRewriteTokenIndex( + const ProgramName: String): Integer; +begin + if (not FLastRewriteTokenIndexes.TryGetValue(ProgramName, Result)) then + Result := -1; +end; + +function TTokenRewriteStream.GetProgram( + const Name: String): IList<IRewriteOperation>; +var + InstructionStream: IList<IRewriteOperation>; +begin + InstructionStream := FPrograms[Name]; + if (InstructionStream = nil) then + InstructionStream := InitializeProgram(Name); + Result := InstructionStream; +end; + +procedure TTokenRewriteStream.InsertAfter(const ProgramName: String; + const T: IToken; const Text: IANTLRInterface); +begin + InsertAfter(ProgramName, T.TokenIndex, Text); +end; + +procedure TTokenRewriteStream.Init; +var + List: IList<IRewriteOperation>; +begin + FPrograms := TDictionary<String, IList<IRewriteOperation>>.Create; + List := TList<IRewriteOperation>.Create; + List.Capacity := PROGRAM_INIT_SIZE; + FPrograms.Add(DEFAULT_PROGRAM_NAME, List); + FLastRewriteTokenIndexes := TDictionary<String, Integer>.Create; +end; + +function TTokenRewriteStream.InitializeProgram( + const Name: String): IList<IRewriteOperation>; +begin + Result := TList<IRewriteOperation>.Create; + Result.Capacity := PROGRAM_INIT_SIZE; + FPrograms[Name] := Result; +end; + +procedure TTokenRewriteStream.InsertAfter(const ProgramName: String; + const Index: Integer; const Text: IANTLRInterface); +begin + // to insert after, just insert before next index (even if past end) + InsertBefore(ProgramName, Index + 1, Text); +end; + +procedure TTokenRewriteStream.InsertAfter(const T: IToken; + const Text: IANTLRInterface); +begin + InsertAfter(DEFAULT_PROGRAM_NAME, T, Text); +end; + +procedure TTokenRewriteStream.InsertAfter(const Index: Integer; + const Text: IANTLRInterface); +begin + InsertAfter(DEFAULT_PROGRAM_NAME, Index, Text); +end; + +procedure TTokenRewriteStream.InsertBefore(const Index: Integer; + const Text: IANTLRInterface); +begin + InsertBefore(DEFAULT_PROGRAM_NAME, Index, Text); +end; + +procedure TTokenRewriteStream.InsertBefore(const ProgramName: String; + const T: IToken; const Text: IANTLRInterface); +begin + InsertBefore(ProgramName, T.TokenIndex, Text); +end; + +procedure TTokenRewriteStream.InsertBefore(const ProgramName: String; + const Index: Integer; const Text: IANTLRInterface); +var + Op: IRewriteOperation; +begin + Op := TInsertBeforeOp.Create(Index, Text, Self); + GetProgram(ProgramName).Add(Op); +end; + +procedure TTokenRewriteStream.InsertBefore(const T: IToken; + const Text: IANTLRInterface); +begin + InsertBefore(DEFAULT_PROGRAM_NAME, T, Text); +end; + +procedure TTokenRewriteStream.Replace(const Start, Stop: IToken; + const Text: IANTLRInterface); +begin + Replace(DEFAULT_PROGRAM_NAME, Stop, Stop, Text); +end; + +procedure TTokenRewriteStream.Replace(const IndexT: IToken; + const Text: IANTLRInterface); +begin + Replace(DEFAULT_PROGRAM_NAME, IndexT, IndexT, Text); +end; + +procedure TTokenRewriteStream.Replace(const ProgramName: String; const Start, + Stop: Integer; const Text: IANTLRInterface); +var + Op: IRewriteOperation; + Rewrites: IList<IRewriteOperation>; +begin + if (Start > Stop) or (Start < 0) or (Stop < 0) or (Stop >= GetTokens.Count) then + raise EArgumentOutOfRangeException.Create('replace: range invalid: ' + + IntToStr(Start) + '..' + IntToStr(Stop) + '(size=' + + IntToStr(GetTokens.Count) + ')'); + + Op := TReplaceOp.Create(Start, Stop, Text, Self); + Rewrites := GetProgram(ProgramName); + Op.InstructionIndex := Rewrites.Count; + Rewrites.Add(Op); +end; + +function TTokenRewriteStream.ReduceToSingleOperationPerIndex( + const Rewrites: IList<IRewriteOperation>): IDictionary<Integer, IRewriteOperation>; +var + I, J: Integer; + Op: IRewriteOperation; + ROp, PrevROp: IReplaceOp; + IOp, PrevIOp: IInsertBeforeOp; + Inserts, PrevInserts, PrevReplaces: IList<IRewriteOperation>; + Disjoint, Same: Boolean; +begin + // WALK REPLACES + for I := 0 to Rewrites.Count - 1 do + begin + Op := Rewrites[I]; + if (Op = nil) then + Continue; + if (not Supports(Op, IReplaceOp, ROp)) then + Continue; + + // Wipe prior inserts within range + Inserts := GetKindOfOps(Rewrites, IInsertBeforeOp, I); + for J := 0 to Inserts.Count - 1 do + begin + IOp := Inserts[J] as IInsertBeforeOp; + if (IOp.Index >= ROp.Index) and (IOp.Index <= ROp.LastIndex) then + begin + // delete insert as it's a no-op. + Rewrites[IOp.InstructionIndex] := nil; + end; + end; + + // Drop any prior replaces contained within + PrevReplaces := GetKindOfOps(Rewrites, IReplaceOp, I); + for J := 0 to PrevReplaces.Count - 1 do + begin + PrevROp := PrevReplaces[J] as IReplaceOp; + if (PrevROp.Index >= ROp.Index) and (PrevROp.LastIndex <= ROp.LastIndex) then + begin + // delete replace as it's a no-op. + Rewrites[PrevROp.InstructionIndex] := nil; + Continue; + end; + // throw exception unless disjoint or identical + Disjoint := (PrevROp.LastIndex < ROp.Index) or (PrevROp.Index > ROp.LastIndex); + Same := (PrevROp.Index = ROp.Index) and (PrevROp.LastIndex = ROp.LastIndex); + if (not Disjoint) and (not Same) then + raise EArgumentOutOfRangeException.Create('replace of boundaries of ' + + ROp.ToString + ' overlap with previous ' + PrevROp.ToString); + end; + end; + + // WALK INSERTS + for I := 0 to Rewrites.Count - 1 do + begin + Op := Rewrites[I]; + if (Op = nil) then + Continue; + if (not Supports(Op, IInsertBeforeOp, IOp)) then + Continue; + + // combine current insert with prior if any at same index + PrevInserts := GetKindOfOps(Rewrites, IInsertBeforeOp, I); + for J := 0 to PrevInserts.Count - 1 do + begin + PrevIOp := PrevInserts[J] as IInsertBeforeOp; + if (PrevIOp.Index = IOp.Index) then + begin + // combine objects + // convert to strings...we're in process of toString'ing + // whole token buffer so no lazy eval issue with any templates + IOp.Text := CatOpText(IOp.Text, PrevIOp.Text); + // delete redundant prior insert + Rewrites[PrevIOp.InstructionIndex] := nil; + end; + end; + + // look for replaces where iop.index is in range; error + PrevReplaces := GetKindOfOps(Rewrites, IReplaceOp, I); + for J := 0 to PrevReplaces.Count - 1 do + begin + Rop := PrevReplaces[J] as IReplaceOp; + if (IOp.Index = ROp.Index) then + begin + ROp.Text := CatOpText(IOp.Text, ROp.Text); + Rewrites[I] := nil; // delete current insert + Continue; + end; + if (IOp.Index >= ROp.Index) and (IOp.Index <= ROp.LastIndex) then + raise EArgumentOutOfRangeException.Create('insert op ' + + IOp.ToString + ' within boundaries of previous ' + ROp.ToString); + end; + end; + + Result := TDictionary<Integer, IRewriteOperation>.Create; + for Op in Rewrites do + begin + if (Op = nil) then + Continue; // ignore deleted ops + if (Result.ContainsKey(Op.Index)) then + raise Exception.Create('should only be one op per index'); + Result.Add(Op.Index, Op); + end; +end; + +procedure TTokenRewriteStream.Replace(const ProgramName: String; const Start, + Stop: IToken; const Text: IANTLRInterface); +begin + Replace(ProgramName, Start.TokenIndex, Stop.TokenIndex, Text); +end; + +procedure TTokenRewriteStream.Replace(const Index: Integer; + const Text: IANTLRInterface); +begin + Replace(DEFAULT_PROGRAM_NAME, Index, Index, Text); +end; + +procedure TTokenRewriteStream.Replace(const Start, Stop: Integer; + const Text: IANTLRInterface); +begin + Replace(DEFAULT_PROGRAM_NAME, Start, Stop, Text); +end; + +procedure TTokenRewriteStream.Rollback(const InstructionIndex: Integer); +begin + Rollback(DEFAULT_PROGRAM_NAME, InstructionIndex); +end; + +procedure TTokenRewriteStream.Rollback(const ProgramName: String; + const InstructionIndex: Integer); +var + InstructionStream: IList<IRewriteOperation>; +begin + InstructionStream := FPrograms[ProgramName]; + if Assigned(InstructionStream) then + FPrograms[ProgramName] := InstructionStream.GetRange(MIN_TOKEN_INDEX, + InstructionIndex - MIN_TOKEN_INDEX); +end; + +procedure TTokenRewriteStream.SetLastRewriteTokenIndex( + const ProgramName: String; const I: Integer); +begin + FLastRewriteTokenIndexes[ProgramName] := I; +end; + +function TTokenRewriteStream.ToDebugString: String; +begin + Result := ToDebugString(MIN_TOKEN_INDEX, Size - 1); +end; + +function TTokenRewriteStream.ToDebugString(const Start, Stop: Integer): String; +var + Buf: TStringBuilder; + I: Integer; +begin + Buf := TStringBuilder.Create; + try + if (Start >= MIN_TOKEN_INDEX) then + for I := Start to Min(Stop,GetTokens.Count - 1) do + Buf.Append(Get(I).ToString); + finally + Buf.Free; + end; +end; + +function TTokenRewriteStream.ToOriginalString: String; +begin + Result := ToOriginalString(MIN_TOKEN_INDEX, Size - 1); +end; + +function TTokenRewriteStream.ToOriginalString(const Start, + Stop: Integer): String; +var + Buf: TStringBuilder; + I: Integer; +begin + Buf := TStringBuilder.Create; + try + if (Start >= MIN_TOKEN_INDEX) then + for I := Start to Min(Stop, GetTokens.Count - 1) do + Buf.Append(Get(I).Text); + Result := Buf.ToString; + finally + Buf.Free; + end; +end; + +function TTokenRewriteStream.ToString: String; +begin + Result := ToString(MIN_TOKEN_INDEX, Size - 1); +end; + +function TTokenRewriteStream.ToString(const ProgramName: String): String; +begin + Result := ToString(ProgramName, MIN_TOKEN_INDEX, Size - 1); +end; + +function TTokenRewriteStream.ToString(const ProgramName: String; const Start, + Stop: Integer): String; +var + Rewrites: IList<IRewriteOperation>; + I, StartIndex, StopIndex: Integer; + IndexToOp: IDictionary<Integer, IRewriteOperation>; + Buf: TStringBuilder; + Tokens: IList<IToken>; + T: IToken; + Op: IRewriteOperation; + Pair: TPair<Integer, IRewriteOperation>; +begin + Rewrites := FPrograms[ProgramName]; + Tokens := GetTokens; + // ensure start/end are in range + StopIndex := Min(Stop,Tokens.Count - 1); + StartIndex := Max(Start,0); + + if (Rewrites = nil) or (Rewrites.Count = 0) then + begin + // no instructions to execute + Result := ToOriginalString(StartIndex, StopIndex); + Exit; + end; + + Buf := TStringBuilder.Create; + try + // First, optimize instruction stream + IndexToOp := ReduceToSingleOperationPerIndex(Rewrites); + + // Walk buffer, executing instructions and emitting tokens + I := StartIndex; + while (I <= StopIndex) and (I < Tokens.Count) do + begin + if (not IndexToOp.TryGetValue(I, Op)) then + Op := nil; + IndexToOp.Remove(I); // remove so any left have index size-1 + T := Tokens[I]; + if (Op = nil) then + begin + // no operation at that index, just dump token + Buf.Append(T.Text); + Inc(I); // move to next token + end + else + I := Op.Execute(Buf); // execute operation and skip + end; + + // include stuff after end if it's last index in buffer + // So, if they did an insertAfter(lastValidIndex, "foo"), include + // foo if end==lastValidIndex. + if (StopIndex = Tokens.Count - 1) then + begin + // Scan any remaining operations after last token + // should be included (they will be inserts). + for Pair in IndexToOp do + begin + if (Pair.Value.Index >= Tokens.Count - 1) then + Buf.Append(Pair.Value.Text.ToString); + end; + end; + Result := Buf.ToString; + finally + Buf.Free; + end; +end; + +function TTokenRewriteStream.ToString(const Start, Stop: Integer): String; +begin + Result := ToString(DEFAULT_PROGRAM_NAME, Start, Stop); +end; + +procedure TTokenRewriteStream.InsertBefore(const Index: Integer; + const Text: String); +var + S: IANTLRString; +begin + S := TANTLRString.Create(Text); + InsertBefore(Index, S); +end; + +procedure TTokenRewriteStream.InsertBefore(const T: IToken; const Text: String); +var + S: IANTLRString; +begin + S := TANTLRString.Create(Text); + InsertBefore(T, S); +end; + +procedure TTokenRewriteStream.InsertBefore(const ProgramName: String; + const Index: Integer; const Text: String); +var + S: IANTLRString; +begin + S := TANTLRString.Create(Text); + InsertBefore(ProgramName, Index, S); +end; + +procedure TTokenRewriteStream.InsertBefore(const ProgramName: String; + const T: IToken; const Text: String); +var + S: IANTLRString; +begin + S := TANTLRString.Create(Text); + InsertBefore(ProgramName, T, S); +end; + +procedure TTokenRewriteStream.InsertAfter(const Index: Integer; + const Text: String); +var + S: IANTLRString; +begin + S := TANTLRString.Create(Text); + InsertAfter(Index,S); +end; + +procedure TTokenRewriteStream.InsertAfter(const T: IToken; const Text: String); +var + S: IANTLRString; +begin + S := TANTLRString.Create(Text); + InsertAfter(T,S); +end; + +procedure TTokenRewriteStream.InsertAfter(const ProgramName: String; + const Index: Integer; const Text: String); +var + S: IANTLRString; +begin + S := TANTLRString.Create(Text); + InsertAfter(ProgramName,Index,S); +end; + +procedure TTokenRewriteStream.InsertAfter(const ProgramName: String; + const T: IToken; const Text: String); +var + S: IANTLRString; +begin + S := TANTLRString.Create(Text); + InsertAfter(ProgramName,T,S); +end; + +procedure TTokenRewriteStream.Replace(const IndexT: IToken; const Text: String); +var + S: IANTLRString; +begin + S := TANTLRString.Create(Text); + Replace(IndexT, S); +end; + +procedure TTokenRewriteStream.Replace(const Start, Stop: Integer; + const Text: String); +var + S: IANTLRString; +begin + S := TANTLRString.Create(Text); + Replace(Start, Stop, S); +end; + +procedure TTokenRewriteStream.Replace(const Index: Integer; const Text: String); +var + S: IANTLRString; +begin + S := TANTLRString.Create(Text); + Replace(Index, S); +end; + +procedure TTokenRewriteStream.Replace(const ProgramName: String; const Start, + Stop: IToken; const Text: String); +var + S: IANTLRString; +begin + S := TANTLRString.Create(Text); + Replace(ProgramName, Start, Stop, S); +end; + +procedure TTokenRewriteStream.Replace(const ProgramName: String; const Start, + Stop: Integer; const Text: String); +var + S: IANTLRString; +begin + S := TANTLRString.Create(Text); + Replace(ProgramName, Start, Stop, S); +end; + +procedure TTokenRewriteStream.Replace(const Start, Stop: IToken; + const Text: String); +var + S: IANTLRString; +begin + S := TANTLRString.Create(Text); + Replace(Start, Stop, S); +end; + +{ TTokenRewriteStream.TRewriteOperation } + +constructor TTokenRewriteStream.TRewriteOperation.Create(const AIndex: Integer; + const AText: IANTLRInterface; const AParent: ITokenRewriteStream); +begin + inherited Create; + FIndex := AIndex; + FText := AText; + FParent := Pointer(AParent); +end; + +function TTokenRewriteStream.TRewriteOperation.Execute( + const Buf: TStringBuilder): Integer; +begin + Result := FIndex; +end; + +function TTokenRewriteStream.TRewriteOperation.GetIndex: Integer; +begin + Result := FIndex; +end; + +function TTokenRewriteStream.TRewriteOperation.GetInstructionIndex: Integer; +begin + Result := FInstructionIndex; +end; + +function TTokenRewriteStream.TRewriteOperation.GetParent: ITokenRewriteStream; +begin + Result := ITokenRewriteStream(FParent); +end; + +function TTokenRewriteStream.TRewriteOperation.GetText: IANTLRInterface; +begin + Result := FText; +end; + +procedure TTokenRewriteStream.TRewriteOperation.SetIndex(const Value: Integer); +begin + FIndex := Value; +end; + +procedure TTokenRewriteStream.TRewriteOperation.SetInstructionIndex( + const Value: Integer); +begin + FInstructionIndex := Value; +end; + +procedure TTokenRewriteStream.TRewriteOperation.SetParent( + const Value: ITokenRewriteStream); +begin + FParent := Pointer(Value); +end; + +procedure TTokenRewriteStream.TRewriteOperation.SetText( + const Value: IANTLRInterface); +begin + FText := Value; +end; + +function TTokenRewriteStream.TRewriteOperation.ToString: String; +var + OpName: String; + DollarIndex: Integer; +begin + OpName := ClassName; + DollarIndex := Pos('$',OpName) - 1; // Delphi strings are 1-based + if (DollarIndex >= 0) then + OpName := Copy(OpName,DollarIndex + 1,Length(OpName) - (DollarIndex + 1)); + Result := '<' + OpName + '@' + IntToStr(FIndex) + ':"' + FText.ToString + '">'; +end; + +{ TTokenRewriteStream.TRewriteOpComparer<T> } + +function TTokenRewriteStream.TRewriteOpComparer<T>.Compare(const Left, + Right: T): Integer; +begin + if (Left.GetIndex < Right.GetIndex) then + Result := -1 + else + if (Left.GetIndex > Right.GetIndex) then + Result := 1 + else + Result := 0; +end; + +{ TTokenRewriteStream.TInsertBeforeOp } + +function TTokenRewriteStream.TInsertBeforeOp.Execute( + const Buf: TStringBuilder): Integer; +begin + Buf.Append(Text.ToString); + Buf.Append(Parent.Get(Index).Text); + Result := Index + 1; +end; + +{ TTokenRewriteStream.TReplaceOp } + +constructor TTokenRewriteStream.TReplaceOp.Create(const AStart, AStop: Integer; + const AText: IANTLRInterface; const AParent: ITokenRewriteStream); +begin + inherited Create(AStart, AText, AParent); + FLastIndex := AStop; +end; + +function TTokenRewriteStream.TReplaceOp.Execute( + const Buf: TStringBuilder): Integer; +begin + if (Text <> nil) then + Buf.Append(Text.ToString); + Result := FLastIndex + 1; +end; + +function TTokenRewriteStream.TReplaceOp.GetLastIndex: Integer; +begin + Result := FLastIndex; +end; + +procedure TTokenRewriteStream.TReplaceOp.SetLastIndex(const Value: Integer); +begin + FLastIndex := Value; +end; + +function TTokenRewriteStream.TReplaceOp.ToString: String; +begin + Result := '<ReplaceOp@' + IntToStr(Index) + '..' + IntToStr(FLastIndex) + + ':"' + Text.ToString + '">'; +end; + +{ TTokenRewriteStream.TDeleteOp } + +function TTokenRewriteStream.TDeleteOp.ToString: String; +begin + Result := '<DeleteOp@' + IntToStr(Index) + '..' + IntToStr(FLastIndex) + '>'; +end; + +{ Utilities } + +var + EmptyToken: IToken = nil; + EmptyRuleReturnScope: IRuleReturnScope = nil; + +function Def(const X: IToken): IToken; overload; +begin + if Assigned(X) then + Result := X + else + begin + if (EmptyToken = nil) then + EmptyToken := TCommonToken.Create; + Result := EmptyToken; + end; +end; + +function Def(const X: IRuleReturnScope): IRuleReturnScope; +begin + if Assigned(X) then + Result := X + else + begin + if (EmptyRuleReturnScope = nil) then + EmptyRuleReturnScope := TRuleReturnScope.Create; + Result := EmptyRuleReturnScope; + end; +end; + +initialization + TToken.Initialize; + +end. diff --git a/antlr-3.1.3/runtime/Java/antlr.config b/antlr-3.1.3/runtime/Java/antlr.config new file mode 100644 index 0000000..e69de29 diff --git a/antlr-3.1.3/runtime/Java/doxyfile b/antlr-3.1.3/runtime/Java/doxyfile new file mode 100644 index 0000000..c539907 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/doxyfile @@ -0,0 +1,264 @@ +# Doxyfile 1.5.2 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = "ANTLR API" +PROJECT_NUMBER = 3.1.2 +OUTPUT_DIRECTORY = api +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = YES +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = /Applications/ +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = YES +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = NO +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = NO +GENERATE_BUGLIST = NO +GENERATE_DEPRECATEDLIST= NO +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = /Users/parrt/antlr/code/antlr/main/runtime/Java/src +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.d \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.py +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = java::util \ + java::io +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = . +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = NO +MSCGEN_PATH = /Applications/Doxygen.app/Contents/Resources/ +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = YES +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = /Applications/Doxygen.app/Contents/Resources/ +DOTFILE_DIRS = +DOT_GRAPH_MAX_NODES = 50 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/antlr-3.1.3/runtime/Java/pom.xml b/antlr-3.1.3/runtime/Java/pom.xml new file mode 100644 index 0000000..2bf6523 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/pom.xml @@ -0,0 +1,119 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>org.antlr</groupId> + <artifactId>antlr-runtime</artifactId> + <packaging>jar</packaging> + + <!-- + + Inherit from the ANTLR master pom, which tells us what + version we are and allows us to inherit dependencies + and so on. + + --> + <parent> + <groupId>org.antlr</groupId> + <artifactId>antlr-master</artifactId> + <version>3.1.3</version> + </parent> + + <name>Antlr 3 Runtime</name> + <description>A framework for constructing recognizers, compilers, and translators from grammatical descriptions containing Java, C#, C++, or Python actions.</description> + <url>http://www.antlr.org</url> + <developers> + <developer> + <name>Terence Parr</name> + <organization>USFCA</organization> + <organizationUrl>http://www.cs.usfca.edu</organizationUrl> + <email>parrt@antlr.org</email> + <roles> + <role>Project Leader</role> + <role>Developer - Java Target</role> + </roles> + <timezone>PST</timezone> + </developer> + <developer> + <name>Jim Idle</name> + <organization>Temporal Wave LLC</organization> + <organizationUrl>http://www.temporal-wave.com</organizationUrl> + <email>jimi@temporal-wave.com</email> + <roles> + <role>Developer - Maven stuff</role> + <role>Developer - C Target</role> + </roles> + <timezone>PST</timezone> + </developer> + </developers> + + <scm> + <url>http://fisheye2.cenqua.com/browse/antlr</url> + <connection>http://fisheye2.cenqua.com/browse/antlr</connection> + </scm> + + <!-- + Definition of the ANTLR repositories. Note that you can only deploy + to the repositories via scp, and so the server must already know about + your public key. ONly ANTLR developers are allowed to deploy to the + release and snapshot repositories, which are synced with the Maven central + repository. + --> + <distributionManagement> + + <repository> + <id>antlr-repo</id> + <name>ANTLR Testing repository</name> + <url>scpexe://antlr.org/home/mavensync/antlr-repo</url> + </repository> + + <snapshotRepository> + <id>antlr-snapshot</id> + <name>ANTLR Testing Snapshot Repository</name> + <url>scpexe://antlr.org/home/mavensync/antlr-snapshot</url> + </snapshotRepository> + + </distributionManagement> + + <dependencies> + + <dependency> + <groupId>org.antlr</groupId> + <artifactId>stringtemplate</artifactId> + <version>3.2</version> + <scope>compile</scope> + </dependency> + + </dependencies> + +<build> + <defaultGoal>install</defaultGoal> + <extensions> + <extension> + <groupId>org.apache.maven.wagon</groupId> + <artifactId>wagon-ssh-external</artifactId> + <version>1.0-beta-2</version> + </extension> + </extensions> + <plugins> + <plugin> + <artifactId>maven-compiler-plugin</artifactId> + <version>2.0.2</version> + <configuration> + <source>1.5</source> + <target>1.5</target> + </configuration> + </plugin> + + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>findbugs-maven-plugin</artifactId> + <configuration> + <findbugsXmlOutput>true</findbugsXmlOutput> + <findbugsXmlWithMessages>true</findbugsXmlWithMessages> + <xmlOutput>true</xmlOutput> + </configuration> + </plugin> + </plugins> +</build> + +</project> diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ANTLRFileStream.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ANTLRFileStream.java new file mode 100644 index 0000000..155f248 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ANTLRFileStream.java @@ -0,0 +1,78 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +import java.io.*; + +/** This is a char buffer stream that is loaded from a file + * all at once when you construct the object. This looks very + * much like an ANTLReader or ANTLRInputStream, but it's a special case + * since we know the exact size of the object to load. We can avoid lots + * of data copying. + */ +public class ANTLRFileStream extends ANTLRStringStream { + protected String fileName; + + public ANTLRFileStream(String fileName) throws IOException { + this(fileName, null); + } + + public ANTLRFileStream(String fileName, String encoding) throws IOException { + this.fileName = fileName; + load(fileName, encoding); + } + + public void load(String fileName, String encoding) + throws IOException + { + if ( fileName==null ) { + return; + } + File f = new File(fileName); + int size = (int)f.length(); + InputStreamReader isr; + FileInputStream fis = new FileInputStream(fileName); + if ( encoding!=null ) { + isr = new InputStreamReader(fis, encoding); + } + else { + isr = new InputStreamReader(fis); + } + try { + data = new char[size]; + super.n = isr.read(data); + } + finally { + isr.close(); + } + } + + public String getSourceName() { + return fileName; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ANTLRInputStream.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ANTLRInputStream.java new file mode 100644 index 0000000..d2f5325 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ANTLRInputStream.java @@ -0,0 +1,70 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +import java.io.*; + +/** A kind of ReaderStream that pulls from an InputStream. + * Useful for reading from stdin and specifying file encodings etc... + */ +public class ANTLRInputStream extends ANTLRReaderStream { + public ANTLRInputStream() { + } + + public ANTLRInputStream(InputStream input) throws IOException { + this(input, null); + } + + public ANTLRInputStream(InputStream input, int size) throws IOException { + this(input, size, null); + } + + public ANTLRInputStream(InputStream input, String encoding) throws IOException { + this(input, INITIAL_BUFFER_SIZE, encoding); + } + + public ANTLRInputStream(InputStream input, int size, String encoding) throws IOException { + this(input, size, READ_BUFFER_SIZE, encoding); + } + + public ANTLRInputStream(InputStream input, + int size, + int readBufferSize, + String encoding) + throws IOException + { + InputStreamReader isr; + if ( encoding!=null ) { + isr = new InputStreamReader(input, encoding); + } + else { + isr = new InputStreamReader(input); + } + load(isr, size, readBufferSize); + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ANTLRReaderStream.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ANTLRReaderStream.java new file mode 100644 index 0000000..d53ebd6 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ANTLRReaderStream.java @@ -0,0 +1,95 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +import java.io.*; + +/** Vacuum all input from a Reader and then treat it like a StringStream. + * Manage the buffer manually to avoid unnecessary data copying. + * + * If you need encoding, use ANTLRInputStream. + */ +public class ANTLRReaderStream extends ANTLRStringStream { + public static final int READ_BUFFER_SIZE = 1024; + public static final int INITIAL_BUFFER_SIZE = 1024; + + public ANTLRReaderStream() { + } + + public ANTLRReaderStream(Reader r) throws IOException { + this(r, INITIAL_BUFFER_SIZE, READ_BUFFER_SIZE); + } + + public ANTLRReaderStream(Reader r, int size) throws IOException { + this(r, size, READ_BUFFER_SIZE); + } + + public ANTLRReaderStream(Reader r, int size, int readChunkSize) throws IOException { + load(r, size, readChunkSize); + } + + public void load(Reader r, int size, int readChunkSize) + throws IOException + { + if ( r==null ) { + return; + } + if ( size<=0 ) { + size = INITIAL_BUFFER_SIZE; + } + if ( readChunkSize<=0 ) { + readChunkSize = READ_BUFFER_SIZE; + } + // System.out.println("load "+size+" in chunks of "+readChunkSize); + try { + // alloc initial buffer size. + data = new char[size]; + // read all the data in chunks of readChunkSize + int numRead=0; + int p = 0; + do { + if ( p+readChunkSize > data.length ) { // overflow? + // System.out.println("### overflow p="+p+", data.length="+data.length); + char[] newdata = new char[data.length*2]; // resize + System.arraycopy(data, 0, newdata, 0, data.length); + data = newdata; + } + numRead = r.read(data, p, readChunkSize); + // System.out.println("read "+numRead+" chars; p was "+p+" is now "+(p+numRead)); + p += numRead; + } while (numRead!=-1); // while not EOF + // set the actual size of the data available; + // EOF subtracted one above in p+=numRead; add one back + super.n = p+1; + //System.out.println("n="+n); + } + finally { + r.close(); + } + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ANTLRStringStream.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ANTLRStringStream.java new file mode 100644 index 0000000..eb4df2e --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ANTLRStringStream.java @@ -0,0 +1,228 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +import java.util.ArrayList; +import java.util.List; + +/** A pretty quick CharStream that pulls all data from an array + * directly. Every method call counts in the lexer. Java's + * strings aren't very good so I'm avoiding. + */ +public class ANTLRStringStream implements CharStream { + /** The data being scanned */ + protected char[] data; + + /** How many characters are actually in the buffer */ + protected int n; + + /** 0..n-1 index into string of next char */ + protected int p=0; + + /** line number 1..n within the input */ + protected int line = 1; + + /** The index of the character relative to the beginning of the line 0..n-1 */ + protected int charPositionInLine = 0; + + /** tracks how deep mark() calls are nested */ + protected int markDepth = 0; + + /** A list of CharStreamState objects that tracks the stream state + * values line, charPositionInLine, and p that can change as you + * move through the input stream. Indexed from 1..markDepth. + * A null is kept @ index 0. Create upon first call to mark(). + */ + protected List markers; + + /** Track the last mark() call result value for use in rewind(). */ + protected int lastMarker; + + /** What is name or source of this char stream? */ + public String name; + + public ANTLRStringStream() { + } + + /** Copy data in string to a local char array */ + public ANTLRStringStream(String input) { + this(); + this.data = input.toCharArray(); + this.n = input.length(); + } + + /** This is the preferred constructor as no data is copied */ + public ANTLRStringStream(char[] data, int numberOfActualCharsInArray) { + this(); + this.data = data; + this.n = numberOfActualCharsInArray; + } + + /** Reset the stream so that it's in the same state it was + * when the object was created *except* the data array is not + * touched. + */ + public void reset() { + p = 0; + line = 1; + charPositionInLine = 0; + markDepth = 0; + } + + public void consume() { + //System.out.println("prev p="+p+", c="+(char)data[p]); + if ( p < n ) { + charPositionInLine++; + if ( data[p]=='\n' ) { + /* + System.out.println("newline char found on line: "+line+ + "@ pos="+charPositionInLine); + */ + line++; + charPositionInLine=0; + } + p++; + //System.out.println("p moves to "+p+" (c='"+(char)data[p]+"')"); + } + } + + public int LA(int i) { + if ( i==0 ) { + return 0; // undefined + } + if ( i<0 ) { + i++; // e.g., translate LA(-1) to use offset i=0; then data[p+0-1] + if ( (p+i-1) < 0 ) { + return CharStream.EOF; // invalid; no char before first char + } + } + + if ( (p+i-1) >= n ) { + //System.out.println("char LA("+i+")=EOF; p="+p); + return CharStream.EOF; + } + //System.out.println("char LA("+i+")="+(char)data[p+i-1]+"; p="+p); + //System.out.println("LA("+i+"); p="+p+" n="+n+" data.length="+data.length); + return data[p+i-1]; + } + + public int LT(int i) { + return LA(i); + } + + /** Return the current input symbol index 0..n where n indicates the + * last symbol has been read. The index is the index of char to + * be returned from LA(1). + */ + public int index() { + return p; + } + + public int size() { + return n; + } + + public int mark() { + if ( markers==null ) { + markers = new ArrayList(); + markers.add(null); // depth 0 means no backtracking, leave blank + } + markDepth++; + CharStreamState state = null; + if ( markDepth>=markers.size() ) { + state = new CharStreamState(); + markers.add(state); + } + else { + state = (CharStreamState)markers.get(markDepth); + } + state.p = p; + state.line = line; + state.charPositionInLine = charPositionInLine; + lastMarker = markDepth; + return markDepth; + } + + public void rewind(int m) { + CharStreamState state = (CharStreamState)markers.get(m); + // restore stream state + seek(state.p); + line = state.line; + charPositionInLine = state.charPositionInLine; + release(m); + } + + public void rewind() { + rewind(lastMarker); + } + + public void release(int marker) { + // unwind any other markers made after m and release m + markDepth = marker; + // release this marker + markDepth--; + } + + /** consume() ahead until p==index; can't just set p=index as we must + * update line and charPositionInLine. + */ + public void seek(int index) { + if ( index<=p ) { + p = index; // just jump; don't update stream state (line, ...) + return; + } + // seek forward, consume until p hits index + while ( p<index ) { + consume(); + } + } + + public String substring(int start, int stop) { + return new String(data,start,stop-start+1); + } + + public int getLine() { + return line; + } + + public int getCharPositionInLine() { + return charPositionInLine; + } + + public void setLine(int line) { + this.line = line; + } + + public void setCharPositionInLine(int pos) { + this.charPositionInLine = pos; + } + + public String getSourceName() { + return name; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/BaseRecognizer.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/BaseRecognizer.java new file mode 100644 index 0000000..fa71917 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/BaseRecognizer.java @@ -0,0 +1,879 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** A generic recognizer that can handle recognizers generated from + * lexer, parser, and tree grammars. This is all the parsing + * support code essentially; most of it is error recovery stuff and + * backtracking. + */ +public abstract class BaseRecognizer { + public static final int MEMO_RULE_FAILED = -2; + public static final int MEMO_RULE_UNKNOWN = -1; + public static final int INITIAL_FOLLOW_STACK_SIZE = 100; + + // copies from Token object for convenience in actions + public static final int DEFAULT_TOKEN_CHANNEL = Token.DEFAULT_CHANNEL; + public static final int HIDDEN = Token.HIDDEN_CHANNEL; + + public static final String NEXT_TOKEN_RULE_NAME = "nextToken"; + + /** State of a lexer, parser, or tree parser are collected into a state + * object so the state can be shared. This sharing is needed to + * have one grammar import others and share same error variables + * and other state variables. It's a kind of explicit multiple + * inheritance via delegation of methods and shared state. + */ + protected RecognizerSharedState state; + + public BaseRecognizer() { + state = new RecognizerSharedState(); + } + + public BaseRecognizer(RecognizerSharedState state) { + if ( state==null ) { + state = new RecognizerSharedState(); + } + this.state = state; + } + + /** reset the parser's state; subclasses must rewinds the input stream */ + public void reset() { + // wack everything related to error recovery + if ( state==null ) { + return; // no shared state work to do + } + state._fsp = -1; + state.errorRecovery = false; + state.lastErrorIndex = -1; + state.failed = false; + state.syntaxErrors = 0; + // wack everything related to backtracking and memoization + state.backtracking = 0; + for (int i = 0; state.ruleMemo!=null && i < state.ruleMemo.length; i++) { // wipe cache + state.ruleMemo[i] = null; + } + } + + + /** Match current input symbol against ttype. Attempt + * single token insertion or deletion error recovery. If + * that fails, throw MismatchedTokenException. + * + * To turn off single token insertion or deletion error + * recovery, override recoverFromMismatchedToken() and have it + * throw an exception. See TreeParser.recoverFromMismatchedToken(). + * This way any error in a rule will cause an exception and + * immediate exit from rule. Rule would recover by resynchronizing + * to the set of symbols that can follow rule ref. + */ + public Object match(IntStream input, int ttype, BitSet follow) + throws RecognitionException + { + //System.out.println("match "+((TokenStream)input).LT(1)); + Object matchedSymbol = getCurrentInputSymbol(input); + if ( input.LA(1)==ttype ) { + input.consume(); + state.errorRecovery = false; + state.failed = false; + return matchedSymbol; + } + if ( state.backtracking>0 ) { + state.failed = true; + return matchedSymbol; + } + matchedSymbol = recoverFromMismatchedToken(input, ttype, follow); + return matchedSymbol; + } + + /** Match the wildcard: in a symbol */ + public void matchAny(IntStream input) { + state.errorRecovery = false; + state.failed = false; + input.consume(); + } + + public boolean mismatchIsUnwantedToken(IntStream input, int ttype) { + return input.LA(2)==ttype; + } + + public boolean mismatchIsMissingToken(IntStream input, BitSet follow) { + if ( follow==null ) { + // we have no information about the follow; we can only consume + // a single token and hope for the best + return false; + } + // compute what can follow this grammar element reference + if ( follow.member(Token.EOR_TOKEN_TYPE) ) { + BitSet viableTokensFollowingThisRule = computeContextSensitiveRuleFOLLOW(); + follow = follow.or(viableTokensFollowingThisRule); + if ( state._fsp>=0 ) { // remove EOR if we're not the start symbol + follow.remove(Token.EOR_TOKEN_TYPE); + } + } + // if current token is consistent with what could come after set + // then we know we're missing a token; error recovery is free to + // "insert" the missing token + + //System.out.println("viable tokens="+follow.toString(getTokenNames())); + //System.out.println("LT(1)="+((TokenStream)input).LT(1)); + + // BitSet cannot handle negative numbers like -1 (EOF) so I leave EOR + // in follow set to indicate that the fall of the start symbol is + // in the set (EOF can follow). + if ( follow.member(input.LA(1)) || follow.member(Token.EOR_TOKEN_TYPE) ) { + //System.out.println("LT(1)=="+((TokenStream)input).LT(1)+" is consistent with what follows; inserting..."); + return true; + } + return false; + } + + /** Report a recognition problem. + * + * This method sets errorRecovery to indicate the parser is recovering + * not parsing. Once in recovery mode, no errors are generated. + * To get out of recovery mode, the parser must successfully match + * a token (after a resync). So it will go: + * + * 1. error occurs + * 2. enter recovery mode, report error + * 3. consume until token found in resynch set + * 4. try to resume parsing + * 5. next match() will reset errorRecovery mode + * + * If you override, make sure to update syntaxErrors if you care about that. + */ + public void reportError(RecognitionException e) { + // if we've already reported an error and have not matched a token + // yet successfully, don't report any errors. + if ( state.errorRecovery ) { + //System.err.print("[SPURIOUS] "); + return; + } + state.syntaxErrors++; // don't count spurious + state.errorRecovery = true; + + displayRecognitionError(this.getTokenNames(), e); + } + + public void displayRecognitionError(String[] tokenNames, + RecognitionException e) + { + String hdr = getErrorHeader(e); + String msg = getErrorMessage(e, tokenNames); + emitErrorMessage(hdr+" "+msg); + } + + /** What error message should be generated for the various + * exception types? + * + * Not very object-oriented code, but I like having all error message + * generation within one method rather than spread among all of the + * exception classes. This also makes it much easier for the exception + * handling because the exception classes do not have to have pointers back + * to this object to access utility routines and so on. Also, changing + * the message for an exception type would be difficult because you + * would have to subclassing exception, but then somehow get ANTLR + * to make those kinds of exception objects instead of the default. + * This looks weird, but trust me--it makes the most sense in terms + * of flexibility. + * + * For grammar debugging, you will want to override this to add + * more information such as the stack frame with + * getRuleInvocationStack(e, this.getClass().getName()) and, + * for no viable alts, the decision description and state etc... + * + * Override this to change the message generated for one or more + * exception types. + */ + public String getErrorMessage(RecognitionException e, String[] tokenNames) { + String msg = e.getMessage(); + if ( e instanceof UnwantedTokenException ) { + UnwantedTokenException ute = (UnwantedTokenException)e; + String tokenName="<unknown>"; + if ( ute.expecting== Token.EOF ) { + tokenName = "EOF"; + } + else { + tokenName = tokenNames[ute.expecting]; + } + msg = "extraneous input "+getTokenErrorDisplay(ute.getUnexpectedToken())+ + " expecting "+tokenName; + } + else if ( e instanceof MissingTokenException ) { + MissingTokenException mte = (MissingTokenException)e; + String tokenName="<unknown>"; + if ( mte.expecting== Token.EOF ) { + tokenName = "EOF"; + } + else { + tokenName = tokenNames[mte.expecting]; + } + msg = "missing "+tokenName+" at "+getTokenErrorDisplay(e.token); + } + else if ( e instanceof MismatchedTokenException ) { + MismatchedTokenException mte = (MismatchedTokenException)e; + String tokenName="<unknown>"; + if ( mte.expecting== Token.EOF ) { + tokenName = "EOF"; + } + else { + tokenName = tokenNames[mte.expecting]; + } + msg = "mismatched input "+getTokenErrorDisplay(e.token)+ + " expecting "+tokenName; + } + else if ( e instanceof MismatchedTreeNodeException ) { + MismatchedTreeNodeException mtne = (MismatchedTreeNodeException)e; + String tokenName="<unknown>"; + if ( mtne.expecting==Token.EOF ) { + tokenName = "EOF"; + } + else { + tokenName = tokenNames[mtne.expecting]; + } + msg = "mismatched tree node: "+mtne.node+ + " expecting "+tokenName; + } + else if ( e instanceof NoViableAltException ) { + //NoViableAltException nvae = (NoViableAltException)e; + // for development, can add "decision=<<"+nvae.grammarDecisionDescription+">>" + // and "(decision="+nvae.decisionNumber+") and + // "state "+nvae.stateNumber + msg = "no viable alternative at input "+getTokenErrorDisplay(e.token); + } + else if ( e instanceof EarlyExitException ) { + //EarlyExitException eee = (EarlyExitException)e; + // for development, can add "(decision="+eee.decisionNumber+")" + msg = "required (...)+ loop did not match anything at input "+ + getTokenErrorDisplay(e.token); + } + else if ( e instanceof MismatchedSetException ) { + MismatchedSetException mse = (MismatchedSetException)e; + msg = "mismatched input "+getTokenErrorDisplay(e.token)+ + " expecting set "+mse.expecting; + } + else if ( e instanceof MismatchedNotSetException ) { + MismatchedNotSetException mse = (MismatchedNotSetException)e; + msg = "mismatched input "+getTokenErrorDisplay(e.token)+ + " expecting set "+mse.expecting; + } + else if ( e instanceof FailedPredicateException ) { + FailedPredicateException fpe = (FailedPredicateException)e; + msg = "rule "+fpe.ruleName+" failed predicate: {"+ + fpe.predicateText+"}?"; + } + return msg; + } + + /** Get number of recognition errors (lexer, parser, tree parser). Each + * recognizer tracks its own number. So parser and lexer each have + * separate count. Does not count the spurious errors found between + * an error and next valid token match + * + * See also reportError() + */ + public int getNumberOfSyntaxErrors() { + return state.syntaxErrors; + } + + /** What is the error header, normally line/character position information? */ + public String getErrorHeader(RecognitionException e) { + return "line "+e.line+":"+e.charPositionInLine; + } + + /** How should a token be displayed in an error message? The default + * is to display just the text, but during development you might + * want to have a lot of information spit out. Override in that case + * to use t.toString() (which, for CommonToken, dumps everything about + * the token). This is better than forcing you to override a method in + * your token objects because you don't have to go modify your lexer + * so that it creates a new Java type. + */ + public String getTokenErrorDisplay(Token t) { + String s = t.getText(); + if ( s==null ) { + if ( t.getType()==Token.EOF ) { + s = "<EOF>"; + } + else { + s = "<"+t.getType()+">"; + } + } + s = s.replaceAll("\n","\\\\n"); + s = s.replaceAll("\r","\\\\r"); + s = s.replaceAll("\t","\\\\t"); + return "'"+s+"'"; + } + + /** Override this method to change where error messages go */ + public void emitErrorMessage(String msg) { + System.err.println(msg); + } + + /** Recover from an error found on the input stream. This is + * for NoViableAlt and mismatched symbol exceptions. If you enable + * single token insertion and deletion, this will usually not + * handle mismatched symbol exceptions but there could be a mismatched + * token that the match() routine could not recover from. + */ + public void recover(IntStream input, RecognitionException re) { + if ( state.lastErrorIndex==input.index() ) { + // uh oh, another error at same token index; must be a case + // where LT(1) is in the recovery token set so nothing is + // consumed; consume a single token so at least to prevent + // an infinite loop; this is a failsafe. + input.consume(); + } + state.lastErrorIndex = input.index(); + BitSet followSet = computeErrorRecoverySet(); + beginResync(); + consumeUntil(input, followSet); + endResync(); + } + + /** A hook to listen in on the token consumption during error recovery. + * The DebugParser subclasses this to fire events to the listenter. + */ + public void beginResync() { + } + + public void endResync() { + } + + /* Compute the error recovery set for the current rule. During + * rule invocation, the parser pushes the set of tokens that can + * follow that rule reference on the stack; this amounts to + * computing FIRST of what follows the rule reference in the + * enclosing rule. This local follow set only includes tokens + * from within the rule; i.e., the FIRST computation done by + * ANTLR stops at the end of a rule. + * + * EXAMPLE + * + * When you find a "no viable alt exception", the input is not + * consistent with any of the alternatives for rule r. The best + * thing to do is to consume tokens until you see something that + * can legally follow a call to r *or* any rule that called r. + * You don't want the exact set of viable next tokens because the + * input might just be missing a token--you might consume the + * rest of the input looking for one of the missing tokens. + * + * Consider grammar: + * + * a : '[' b ']' + * | '(' b ')' + * ; + * b : c '^' INT ; + * c : ID + * | INT + * ; + * + * At each rule invocation, the set of tokens that could follow + * that rule is pushed on a stack. Here are the various "local" + * follow sets: + * + * FOLLOW(b1_in_a) = FIRST(']') = ']' + * FOLLOW(b2_in_a) = FIRST(')') = ')' + * FOLLOW(c_in_b) = FIRST('^') = '^' + * + * Upon erroneous input "[]", the call chain is + * + * a -> b -> c + * + * and, hence, the follow context stack is: + * + * depth local follow set after call to rule + * 0 <EOF> a (from main()) + * 1 ']' b + * 3 '^' c + * + * Notice that ')' is not included, because b would have to have + * been called from a different context in rule a for ')' to be + * included. + * + * For error recovery, we cannot consider FOLLOW(c) + * (context-sensitive or otherwise). We need the combined set of + * all context-sensitive FOLLOW sets--the set of all tokens that + * could follow any reference in the call chain. We need to + * resync to one of those tokens. Note that FOLLOW(c)='^' and if + * we resync'd to that token, we'd consume until EOF. We need to + * sync to context-sensitive FOLLOWs for a, b, and c: {']','^'}. + * In this case, for input "[]", LA(1) is in this set so we would + * not consume anything and after printing an error rule c would + * return normally. It would not find the required '^' though. + * At this point, it gets a mismatched token error and throws an + * exception (since LA(1) is not in the viable following token + * set). The rule exception handler tries to recover, but finds + * the same recovery set and doesn't consume anything. Rule b + * exits normally returning to rule a. Now it finds the ']' (and + * with the successful match exits errorRecovery mode). + * + * So, you cna see that the parser walks up call chain looking + * for the token that was a member of the recovery set. + * + * Errors are not generated in errorRecovery mode. + * + * ANTLR's error recovery mechanism is based upon original ideas: + * + * "Algorithms + Data Structures = Programs" by Niklaus Wirth + * + * and + * + * "A note on error recovery in recursive descent parsers": + * http://portal.acm.org/citation.cfm?id=947902.947905 + * + * Later, Josef Grosch had some good ideas: + * + * "Efficient and Comfortable Error Recovery in Recursive Descent + * Parsers": + * ftp://www.cocolab.com/products/cocktail/doca4.ps/ell.ps.zip + * + * Like Grosch I implemented local FOLLOW sets that are combined + * at run-time upon error to avoid overhead during parsing. + */ + protected BitSet computeErrorRecoverySet() { + return combineFollows(false); + } + + /** Compute the context-sensitive FOLLOW set for current rule. + * This is set of token types that can follow a specific rule + * reference given a specific call chain. You get the set of + * viable tokens that can possibly come next (lookahead depth 1) + * given the current call chain. Contrast this with the + * definition of plain FOLLOW for rule r: + * + * FOLLOW(r)={x | S=>*alpha r beta in G and x in FIRST(beta)} + * + * where x in T* and alpha, beta in V*; T is set of terminals and + * V is the set of terminals and nonterminals. In other words, + * FOLLOW(r) is the set of all tokens that can possibly follow + * references to r in *any* sentential form (context). At + * runtime, however, we know precisely which context applies as + * we have the call chain. We may compute the exact (rather + * than covering superset) set of following tokens. + * + * For example, consider grammar: + * + * stat : ID '=' expr ';' // FOLLOW(stat)=={EOF} + * | "return" expr '.' + * ; + * expr : atom ('+' atom)* ; // FOLLOW(expr)=={';','.',')'} + * atom : INT // FOLLOW(atom)=={'+',')',';','.'} + * | '(' expr ')' + * ; + * + * The FOLLOW sets are all inclusive whereas context-sensitive + * FOLLOW sets are precisely what could follow a rule reference. + * For input input "i=(3);", here is the derivation: + * + * stat => ID '=' expr ';' + * => ID '=' atom ('+' atom)* ';' + * => ID '=' '(' expr ')' ('+' atom)* ';' + * => ID '=' '(' atom ')' ('+' atom)* ';' + * => ID '=' '(' INT ')' ('+' atom)* ';' + * => ID '=' '(' INT ')' ';' + * + * At the "3" token, you'd have a call chain of + * + * stat -> expr -> atom -> expr -> atom + * + * What can follow that specific nested ref to atom? Exactly ')' + * as you can see by looking at the derivation of this specific + * input. Contrast this with the FOLLOW(atom)={'+',')',';','.'}. + * + * You want the exact viable token set when recovering from a + * token mismatch. Upon token mismatch, if LA(1) is member of + * the viable next token set, then you know there is most likely + * a missing token in the input stream. "Insert" one by just not + * throwing an exception. + */ + protected BitSet computeContextSensitiveRuleFOLLOW() { + return combineFollows(true); + } + + protected BitSet combineFollows(boolean exact) { + int top = state._fsp; + BitSet followSet = new BitSet(); + for (int i=top; i>=0; i--) { + BitSet localFollowSet = (BitSet)state.following[i]; + /* + System.out.println("local follow depth "+i+"="+ + localFollowSet.toString(getTokenNames())+")"); + */ + followSet.orInPlace(localFollowSet); + if ( exact ) { + // can we see end of rule? + if ( localFollowSet.member(Token.EOR_TOKEN_TYPE) ) { + // Only leave EOR in set if at top (start rule); this lets + // us know if have to include follow(start rule); i.e., EOF + if ( i>0 ) { + followSet.remove(Token.EOR_TOKEN_TYPE); + } + } + else { // can't see end of rule, quit + break; + } + } + } + return followSet; + } + + /** Attempt to recover from a single missing or extra token. + * + * EXTRA TOKEN + * + * LA(1) is not what we are looking for. If LA(2) has the right token, + * however, then assume LA(1) is some extra spurious token. Delete it + * and LA(2) as if we were doing a normal match(), which advances the + * input. + * + * MISSING TOKEN + * + * If current token is consistent with what could come after + * ttype then it is ok to "insert" the missing token, else throw + * exception For example, Input "i=(3;" is clearly missing the + * ')'. When the parser returns from the nested call to expr, it + * will have call chain: + * + * stat -> expr -> atom + * + * and it will be trying to match the ')' at this point in the + * derivation: + * + * => ID '=' '(' INT ')' ('+' atom)* ';' + * ^ + * match() will see that ';' doesn't match ')' and report a + * mismatched token error. To recover, it sees that LA(1)==';' + * is in the set of tokens that can follow the ')' token + * reference in rule atom. It can assume that you forgot the ')'. + */ + protected Object recoverFromMismatchedToken(IntStream input, int ttype, BitSet follow) + throws RecognitionException + { + RecognitionException e = null; + // if next token is what we are looking for then "delete" this token + if ( mismatchIsUnwantedToken(input, ttype) ) { + e = new UnwantedTokenException(ttype, input); + /* + System.err.println("recoverFromMismatchedToken deleting "+ + ((TokenStream)input).LT(1)+ + " since "+((TokenStream)input).LT(2)+" is what we want"); + */ + beginResync(); + input.consume(); // simply delete extra token + endResync(); + reportError(e); // report after consuming so AW sees the token in the exception + // we want to return the token we're actually matching + Object matchedSymbol = getCurrentInputSymbol(input); + input.consume(); // move past ttype token as if all were ok + return matchedSymbol; + } + // can't recover with single token deletion, try insertion + if ( mismatchIsMissingToken(input, follow) ) { + Object inserted = getMissingSymbol(input, e, ttype, follow); + e = new MissingTokenException(ttype, input, inserted); + reportError(e); // report after inserting so AW sees the token in the exception + return inserted; + } + // even that didn't work; must throw the exception + e = new MismatchedTokenException(ttype, input); + throw e; + } + + /** Not currently used */ + public Object recoverFromMismatchedSet(IntStream input, + RecognitionException e, + BitSet follow) + throws RecognitionException + { + if ( mismatchIsMissingToken(input, follow) ) { + // System.out.println("missing token"); + reportError(e); + // we don't know how to conjure up a token for sets yet + return getMissingSymbol(input, e, Token.INVALID_TOKEN_TYPE, follow); + } + // TODO do single token deletion like above for Token mismatch + throw e; + } + + /** Match needs to return the current input symbol, which gets put + * into the label for the associated token ref; e.g., x=ID. Token + * and tree parsers need to return different objects. Rather than test + * for input stream type or change the IntStream interface, I use + * a simple method to ask the recognizer to tell me what the current + * input symbol is. + * + * This is ignored for lexers. + */ + protected Object getCurrentInputSymbol(IntStream input) { return null; } + + /** Conjure up a missing token during error recovery. + * + * The recognizer attempts to recover from single missing + * symbols. But, actions might refer to that missing symbol. + * For example, x=ID {f($x);}. The action clearly assumes + * that there has been an identifier matched previously and that + * $x points at that token. If that token is missing, but + * the next token in the stream is what we want we assume that + * this token is missing and we keep going. Because we + * have to return some token to replace the missing token, + * we have to conjure one up. This method gives the user control + * over the tokens returned for missing tokens. Mostly, + * you will want to create something special for identifier + * tokens. For literals such as '{' and ',', the default + * action in the parser or tree parser works. It simply creates + * a CommonToken of the appropriate type. The text will be the token. + * If you change what tokens must be created by the lexer, + * override this method to create the appropriate tokens. + */ + protected Object getMissingSymbol(IntStream input, + RecognitionException e, + int expectedTokenType, + BitSet follow) + { + return null; + } + + public void consumeUntil(IntStream input, int tokenType) { + //System.out.println("consumeUntil "+tokenType); + int ttype = input.LA(1); + while (ttype != Token.EOF && ttype != tokenType) { + input.consume(); + ttype = input.LA(1); + } + } + + /** Consume tokens until one matches the given token set */ + public void consumeUntil(IntStream input, BitSet set) { + //System.out.println("consumeUntil("+set.toString(getTokenNames())+")"); + int ttype = input.LA(1); + while (ttype != Token.EOF && !set.member(ttype) ) { + //System.out.println("consume during recover LA(1)="+getTokenNames()[input.LA(1)]); + input.consume(); + ttype = input.LA(1); + } + } + + /** Push a rule's follow set using our own hardcoded stack */ + protected void pushFollow(BitSet fset) { + if ( (state._fsp +1)>=state.following.length ) { + BitSet[] f = new BitSet[state.following.length*2]; + System.arraycopy(state.following, 0, f, 0, state.following.length); + state.following = f; + } + state.following[++state._fsp] = fset; + } + + /** Return List<String> of the rules in your parser instance + * leading up to a call to this method. You could override if + * you want more details such as the file/line info of where + * in the parser java code a rule is invoked. + * + * This is very useful for error messages and for context-sensitive + * error recovery. + */ + public List getRuleInvocationStack() { + String parserClassName = getClass().getName(); + return getRuleInvocationStack(new Throwable(), parserClassName); + } + + /** A more general version of getRuleInvocationStack where you can + * pass in, for example, a RecognitionException to get it's rule + * stack trace. This routine is shared with all recognizers, hence, + * static. + * + * TODO: move to a utility class or something; weird having lexer call this + */ + public static List getRuleInvocationStack(Throwable e, + String recognizerClassName) + { + List rules = new ArrayList(); + StackTraceElement[] stack = e.getStackTrace(); + int i = 0; + for (i=stack.length-1; i>=0; i--) { + StackTraceElement t = stack[i]; + if ( t.getClassName().startsWith("org.antlr.runtime.") ) { + continue; // skip support code such as this method + } + if ( t.getMethodName().equals(NEXT_TOKEN_RULE_NAME) ) { + continue; + } + if ( !t.getClassName().equals(recognizerClassName) ) { + continue; // must not be part of this parser + } + rules.add(t.getMethodName()); + } + return rules; + } + + public int getBacktrackingLevel() { return state.backtracking; } + + public void setBacktrackingLevel(int n) { state.backtracking = n; } + + /** Return whether or not a backtracking attempt failed. */ + public boolean failed() { return state.failed; } + + /** Used to print out token names like ID during debugging and + * error reporting. The generated parsers implement a method + * that overrides this to point to their String[] tokenNames. + */ + public String[] getTokenNames() { + return null; + } + + /** For debugging and other purposes, might want the grammar name. + * Have ANTLR generate an implementation for this method. + */ + public String getGrammarFileName() { + return null; + } + + public abstract String getSourceName(); + + /** A convenience method for use most often with template rewrites. + * Convert a List<Token> to List<String> + */ + public List toStrings(List tokens) { + if ( tokens==null ) return null; + List strings = new ArrayList(tokens.size()); + for (int i=0; i<tokens.size(); i++) { + strings.add(((Token)tokens.get(i)).getText()); + } + return strings; + } + + /** Given a rule number and a start token index number, return + * MEMO_RULE_UNKNOWN if the rule has not parsed input starting from + * start index. If this rule has parsed input starting from the + * start index before, then return where the rule stopped parsing. + * It returns the index of the last token matched by the rule. + * + * For now we use a hashtable and just the slow Object-based one. + * Later, we can make a special one for ints and also one that + * tosses out data after we commit past input position i. + */ + public int getRuleMemoization(int ruleIndex, int ruleStartIndex) { + if ( state.ruleMemo[ruleIndex]==null ) { + state.ruleMemo[ruleIndex] = new HashMap(); + } + Integer stopIndexI = + (Integer)state.ruleMemo[ruleIndex].get(new Integer(ruleStartIndex)); + if ( stopIndexI==null ) { + return MEMO_RULE_UNKNOWN; + } + return stopIndexI.intValue(); + } + + /** Has this rule already parsed input at the current index in the + * input stream? Return the stop token index or MEMO_RULE_UNKNOWN. + * If we attempted but failed to parse properly before, return + * MEMO_RULE_FAILED. + * + * This method has a side-effect: if we have seen this input for + * this rule and successfully parsed before, then seek ahead to + * 1 past the stop token matched for this rule last time. + */ + public boolean alreadyParsedRule(IntStream input, int ruleIndex) { + int stopIndex = getRuleMemoization(ruleIndex, input.index()); + if ( stopIndex==MEMO_RULE_UNKNOWN ) { + return false; + } + if ( stopIndex==MEMO_RULE_FAILED ) { + //System.out.println("rule "+ruleIndex+" will never succeed"); + state.failed=true; + } + else { + //System.out.println("seen rule "+ruleIndex+" before; skipping ahead to @"+(stopIndex+1)+" failed="+state.failed); + input.seek(stopIndex+1); // jump to one past stop token + } + return true; + } + + /** Record whether or not this rule parsed the input at this position + * successfully. Use a standard java hashtable for now. + */ + public void memoize(IntStream input, + int ruleIndex, + int ruleStartIndex) + { + int stopTokenIndex = state.failed?MEMO_RULE_FAILED:input.index()-1; + if ( state.ruleMemo==null ) { + System.err.println("!!!!!!!!! memo array is null for "+ getGrammarFileName()); + } + if ( ruleIndex >= state.ruleMemo.length ) { + System.err.println("!!!!!!!!! memo size is "+state.ruleMemo.length+", but rule index is "+ruleIndex); + } + if ( state.ruleMemo[ruleIndex]!=null ) { + state.ruleMemo[ruleIndex].put( + new Integer(ruleStartIndex), new Integer(stopTokenIndex) + ); + } + } + + /** return how many rule/input-index pairs there are in total. + * TODO: this includes synpreds. :( + */ + public int getRuleMemoizationCacheSize() { + int n = 0; + for (int i = 0; state.ruleMemo!=null && i < state.ruleMemo.length; i++) { + Map ruleMap = state.ruleMemo[i]; + if ( ruleMap!=null ) { + n += ruleMap.size(); // how many input indexes are recorded? + } + } + return n; + } + + public void traceIn(String ruleName, int ruleIndex, Object inputSymbol) { + System.out.print("enter "+ruleName+" "+inputSymbol); + if ( state.backtracking>0 ) { + System.out.print(" backtracking="+state.backtracking); + } + System.out.println(); + } + + public void traceOut(String ruleName, + int ruleIndex, + Object inputSymbol) + { + System.out.print("exit "+ruleName+" "+inputSymbol); + if ( state.backtracking>0 ) { + System.out.print(" backtracking="+state.backtracking); + if ( state.failed ) System.out.print(" failed"); + else System.out.print(" succeeded"); + } + System.out.println(); + } + +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/BitSet.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/BitSet.java new file mode 100644 index 0000000..2a19675 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/BitSet.java @@ -0,0 +1,325 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +import java.util.List; + +/**A stripped-down version of org.antlr.misc.BitSet that is just + * good enough to handle runtime requirements such as FOLLOW sets + * for automatic error recovery. + */ +public class BitSet implements Cloneable { + protected final static int BITS = 64; // number of bits / long + protected final static int LOG_BITS = 6; // 2^6 == 64 + + /* We will often need to do a mod operator (i mod nbits). Its + * turns out that, for powers of two, this mod operation is + * same as (i & (nbits-1)). Since mod is slow, we use a + * precomputed mod mask to do the mod instead. + */ + protected final static int MOD_MASK = BITS - 1; + + /** The actual data bits */ + protected long bits[]; + + /** Construct a bitset of size one word (64 bits) */ + public BitSet() { + this(BITS); + } + + /** Construction from a static array of longs */ + public BitSet(long[] bits_) { + bits = bits_; + } + + /** Construction from a list of integers */ + public BitSet(List items) { + this(); + for (int i = 0; i < items.size(); i++) { + Integer v = (Integer) items.get(i); + add(v.intValue()); + } + } + + /** Construct a bitset given the size + * @param nbits The size of the bitset in bits + */ + public BitSet(int nbits) { + bits = new long[((nbits - 1) >> LOG_BITS) + 1]; + } + + public static BitSet of(int el) { + BitSet s = new BitSet(el + 1); + s.add(el); + return s; + } + + public static BitSet of(int a, int b) { + BitSet s = new BitSet(Math.max(a,b)+1); + s.add(a); + s.add(b); + return s; + } + + public static BitSet of(int a, int b, int c) { + BitSet s = new BitSet(); + s.add(a); + s.add(b); + s.add(c); + return s; + } + + public static BitSet of(int a, int b, int c, int d) { + BitSet s = new BitSet(); + s.add(a); + s.add(b); + s.add(c); + s.add(d); + return s; + } + + /** return this | a in a new set */ + public BitSet or(BitSet a) { + if ( a==null ) { + return this; + } + BitSet s = (BitSet)this.clone(); + s.orInPlace(a); + return s; + } + + /** or this element into this set (grow as necessary to accommodate) */ + public void add(int el) { + int n = wordNumber(el); + if (n >= bits.length) { + growToInclude(el); + } + bits[n] |= bitMask(el); + } + + /** + * Grows the set to a larger number of bits. + * @param bit element that must fit in set + */ + public void growToInclude(int bit) { + int newSize = Math.max(bits.length << 1, numWordsToHold(bit)); + long newbits[] = new long[newSize]; + System.arraycopy(bits, 0, newbits, 0, bits.length); + bits = newbits; + } + + public void orInPlace(BitSet a) { + if ( a==null ) { + return; + } + // If this is smaller than a, grow this first + if (a.bits.length > bits.length) { + setSize(a.bits.length); + } + int min = Math.min(bits.length, a.bits.length); + for (int i = min - 1; i >= 0; i--) { + bits[i] |= a.bits[i]; + } + } + + /** + * Sets the size of a set. + * @param nwords how many words the new set should be + */ + private void setSize(int nwords) { + long newbits[] = new long[nwords]; + int n = Math.min(nwords, bits.length); + System.arraycopy(bits, 0, newbits, 0, n); + bits = newbits; + } + + private final static long bitMask(int bitNumber) { + int bitPosition = bitNumber & MOD_MASK; // bitNumber mod BITS + return 1L << bitPosition; + } + + public Object clone() { + BitSet s; + try { + s = (BitSet)super.clone(); + s.bits = new long[bits.length]; + System.arraycopy(bits, 0, s.bits, 0, bits.length); + } + catch (CloneNotSupportedException e) { + throw new InternalError(); + } + return s; + } + + public int size() { + int deg = 0; + for (int i = bits.length - 1; i >= 0; i--) { + long word = bits[i]; + if (word != 0L) { + for (int bit = BITS - 1; bit >= 0; bit--) { + if ((word & (1L << bit)) != 0) { + deg++; + } + } + } + } + return deg; + } + + public boolean equals(Object other) { + if ( other == null || !(other instanceof BitSet) ) { + return false; + } + + BitSet otherSet = (BitSet)other; + + int n = Math.min(this.bits.length, otherSet.bits.length); + + // for any bits in common, compare + for (int i=0; i<n; i++) { + if (this.bits[i] != otherSet.bits[i]) { + return false; + } + } + + // make sure any extra bits are off + + if (this.bits.length > n) { + for (int i = n+1; i<this.bits.length; i++) { + if (this.bits[i] != 0) { + return false; + } + } + } + else if (otherSet.bits.length > n) { + for (int i = n+1; i<otherSet.bits.length; i++) { + if (otherSet.bits[i] != 0) { + return false; + } + } + } + + return true; + } + + public boolean member(int el) { + if ( el<0 ) { + return false; + } + int n = wordNumber(el); + if (n >= bits.length) return false; + return (bits[n] & bitMask(el)) != 0; + } + + // remove this element from this set + public void remove(int el) { + int n = wordNumber(el); + if (n < bits.length) { + bits[n] &= ~bitMask(el); + } + } + + public boolean isNil() { + for (int i = bits.length - 1; i >= 0; i--) { + if (bits[i] != 0) return false; + } + return true; + } + + private final int numWordsToHold(int el) { + return (el >> LOG_BITS) + 1; + } + + public int numBits() { + return bits.length << LOG_BITS; // num words * bits per word + } + + /** return how much space is being used by the bits array not + * how many actually have member bits on. + */ + public int lengthInLongWords() { + return bits.length; + } + + /**Is this contained within a? */ + /* + public boolean subset(BitSet a) { + if (a == null || !(a instanceof BitSet)) return false; + return this.and(a).equals(this); + } + */ + + public int[] toArray() { + int[] elems = new int[size()]; + int en = 0; + for (int i = 0; i < (bits.length << LOG_BITS); i++) { + if (member(i)) { + elems[en++] = i; + } + } + return elems; + } + + public long[] toPackedArray() { + return bits; + } + + private final static int wordNumber(int bit) { + return bit >> LOG_BITS; // bit / BITS + } + + public String toString() { + return toString(null); + } + + public String toString(String[] tokenNames) { + StringBuffer buf = new StringBuffer(); + String separator = ","; + boolean havePrintedAnElement = false; + buf.append('{'); + + for (int i = 0; i < (bits.length << LOG_BITS); i++) { + if (member(i)) { + if (i > 0 && havePrintedAnElement ) { + buf.append(separator); + } + if ( tokenNames!=null ) { + buf.append(tokenNames[i]); + } + else { + buf.append(i); + } + havePrintedAnElement = true; + } + } + buf.append('}'); + return buf.toString(); + } + + +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/CharStream.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/CharStream.java new file mode 100644 index 0000000..668d71a --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/CharStream.java @@ -0,0 +1,57 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +/** A source of characters for an ANTLR lexer */ +public interface CharStream extends IntStream { + public static final int EOF = -1; + + /** For infinite streams, you don't need this; primarily I'm providing + * a useful interface for action code. Just make sure actions don't + * use this on streams that don't support it. + */ + public String substring(int start, int stop); + + /** Get the ith character of lookahead. This is the same usually as + * LA(i). This will be used for labels in the generated + * lexer code. I'd prefer to return a char here type-wise, but it's + * probably better to be 32-bit clean and be consistent with LA. + */ + public int LT(int i); + + /** ANTLR tracks the line information automatically */ + int getLine(); + + /** Because this stream can rewind, we need to be able to reset the line */ + void setLine(int line); + + void setCharPositionInLine(int pos); + + /** The index of the character relative to the beginning of the line 0..n-1 */ + int getCharPositionInLine(); +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/CharStreamState.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/CharStreamState.java new file mode 100644 index 0000000..f8a206e --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/CharStreamState.java @@ -0,0 +1,45 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +/** When walking ahead with cyclic DFA or for syntactic predicates, + * we need to record the state of the input stream (char index, + * line, etc...) so that we can rewind the state after scanning ahead. + * + * This is the complete state of a stream. + */ +public class CharStreamState { + /** Index into the char stream of next lookahead char */ + int p; + + /** What line number is the scanner at before processing buffer[p]? */ + int line; + + /** What char position 0..n-1 in line is scanner before processing buffer[p]? */ + int charPositionInLine; +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ClassicToken.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ClassicToken.java new file mode 100644 index 0000000..78a5f9d --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ClassicToken.java @@ -0,0 +1,141 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +/** A Token object like we'd use in ANTLR 2.x; has an actual string created + * and associated with this object. These objects are needed for imaginary + * tree nodes that have payload objects. We need to create a Token object + * that has a string; the tree node will point at this token. CommonToken + * has indexes into a char stream and hence cannot be used to introduce + * new strings. + */ +public class ClassicToken implements Token { + protected String text; + protected int type; + protected int line; + protected int charPositionInLine; + protected int channel=DEFAULT_CHANNEL; + + /** What token number is this from 0..n-1 tokens */ + protected int index; + + public ClassicToken(int type) { + this.type = type; + } + + public ClassicToken(Token oldToken) { + text = oldToken.getText(); + type = oldToken.getType(); + line = oldToken.getLine(); + charPositionInLine = oldToken.getCharPositionInLine(); + channel = oldToken.getChannel(); + } + + public ClassicToken(int type, String text) { + this.type = type; + this.text = text; + } + + public ClassicToken(int type, String text, int channel) { + this.type = type; + this.text = text; + this.channel = channel; + } + + public int getType() { + return type; + } + + public void setLine(int line) { + this.line = line; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public int getLine() { + return line; + } + + public int getCharPositionInLine() { + return charPositionInLine; + } + + public void setCharPositionInLine(int charPositionInLine) { + this.charPositionInLine = charPositionInLine; + } + + public int getChannel() { + return channel; + } + + public void setChannel(int channel) { + this.channel = channel; + } + + public void setType(int type) { + this.type = type; + } + + public int getTokenIndex() { + return index; + } + + public void setTokenIndex(int index) { + this.index = index; + } + + public CharStream getInputStream() { + return null; + } + + public void setInputStream(CharStream input) { + } + + public String toString() { + String channelStr = ""; + if ( channel>0 ) { + channelStr=",channel="+channel; + } + String txt = getText(); + if ( txt!=null ) { + txt = txt.replaceAll("\n","\\\\n"); + txt = txt.replaceAll("\r","\\\\r"); + txt = txt.replaceAll("\t","\\\\t"); + } + else { + txt = "<no text>"; + } + return "[@"+getTokenIndex()+",'"+txt+"',<"+type+">"+channelStr+","+line+":"+getCharPositionInLine()+"]"; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/CommonToken.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/CommonToken.java new file mode 100644 index 0000000..0e252ea --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/CommonToken.java @@ -0,0 +1,185 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +import java.io.Serializable; + +public class CommonToken implements Token, Serializable { + protected int type; + protected int line; + protected int charPositionInLine = -1; // set to invalid position + protected int channel=DEFAULT_CHANNEL; + protected transient CharStream input; + + /** We need to be able to change the text once in a while. If + * this is non-null, then getText should return this. Note that + * start/stop are not affected by changing this. + */ + protected String text; + + /** What token number is this from 0..n-1 tokens; < 0 implies invalid index */ + protected int index = -1; + + /** The char position into the input buffer where this token starts */ + protected int start; + + /** The char position into the input buffer where this token stops */ + protected int stop; + + public CommonToken(int type) { + this.type = type; + } + + public CommonToken(CharStream input, int type, int channel, int start, int stop) { + this.input = input; + this.type = type; + this.channel = channel; + this.start = start; + this.stop = stop; + } + + public CommonToken(int type, String text) { + this.type = type; + this.channel = DEFAULT_CHANNEL; + this.text = text; + } + + public CommonToken(Token oldToken) { + text = oldToken.getText(); + type = oldToken.getType(); + line = oldToken.getLine(); + index = oldToken.getTokenIndex(); + charPositionInLine = oldToken.getCharPositionInLine(); + channel = oldToken.getChannel(); + if ( oldToken instanceof CommonToken ) { + start = ((CommonToken)oldToken).start; + stop = ((CommonToken)oldToken).stop; + } + } + + public int getType() { + return type; + } + + public void setLine(int line) { + this.line = line; + } + + public String getText() { + if ( text!=null ) { + return text; + } + if ( input==null ) { + return null; + } + text = input.substring(start,stop); + return text; + } + + /** Override the text for this token. getText() will return this text + * rather than pulling from the buffer. Note that this does not mean + * that start/stop indexes are not valid. It means that that input + * was converted to a new string in the token object. + */ + public void setText(String text) { + this.text = text; + } + + public int getLine() { + return line; + } + + public int getCharPositionInLine() { + return charPositionInLine; + } + + public void setCharPositionInLine(int charPositionInLine) { + this.charPositionInLine = charPositionInLine; + } + + public int getChannel() { + return channel; + } + + public void setChannel(int channel) { + this.channel = channel; + } + + public void setType(int type) { + this.type = type; + } + + public int getStartIndex() { + return start; + } + + public void setStartIndex(int start) { + this.start = start; + } + + public int getStopIndex() { + return stop; + } + + public void setStopIndex(int stop) { + this.stop = stop; + } + + public int getTokenIndex() { + return index; + } + + public void setTokenIndex(int index) { + this.index = index; + } + + public CharStream getInputStream() { + return input; + } + + public void setInputStream(CharStream input) { + this.input = input; + } + + public String toString() { + String channelStr = ""; + if ( channel>0 ) { + channelStr=",channel="+channel; + } + String txt = getText(); + if ( txt!=null ) { + txt = txt.replaceAll("\n","\\\\n"); + txt = txt.replaceAll("\r","\\\\r"); + txt = txt.replaceAll("\t","\\\\t"); + } + else { + txt = "<no text>"; + } + return "[@"+getTokenIndex()+","+start+":"+stop+"='"+txt+"',<"+type+">"+channelStr+","+line+":"+getCharPositionInLine()+"]"; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/CommonTokenStream.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/CommonTokenStream.java new file mode 100644 index 0000000..ec85ba9 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/CommonTokenStream.java @@ -0,0 +1,379 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +import java.util.*; + +/** The most common stream of tokens is one where every token is buffered up + * and tokens are prefiltered for a certain channel (the parser will only + * see these tokens and cannot change the filter channel number during the + * parse). + * + * TODO: how to access the full token stream? How to track all tokens matched per rule? + */ +public class CommonTokenStream implements TokenStream { + protected TokenSource tokenSource; + + /** Record every single token pulled from the source so we can reproduce + * chunks of it later. + */ + protected List tokens; + + /** Map<tokentype, channel> to override some Tokens' channel numbers */ + protected Map channelOverrideMap; + + /** Set<tokentype>; discard any tokens with this type */ + protected Set discardSet; + + /** Skip tokens on any channel but this one; this is how we skip whitespace... */ + protected int channel = Token.DEFAULT_CHANNEL; + + /** By default, track all incoming tokens */ + protected boolean discardOffChannelTokens = false; + + /** Track the last mark() call result value for use in rewind(). */ + protected int lastMarker; + + /** The index into the tokens list of the current token (next token + * to consume). p==-1 indicates that the tokens list is empty + */ + protected int p = -1; + + public CommonTokenStream() { + tokens = new ArrayList(500); + } + + public CommonTokenStream(TokenSource tokenSource) { + this(); + this.tokenSource = tokenSource; + } + + public CommonTokenStream(TokenSource tokenSource, int channel) { + this(tokenSource); + this.channel = channel; + } + + /** Reset this token stream by setting its token source. */ + public void setTokenSource(TokenSource tokenSource) { + this.tokenSource = tokenSource; + tokens.clear(); + p = -1; + channel = Token.DEFAULT_CHANNEL; + } + + /** Load all tokens from the token source and put in tokens. + * This is done upon first LT request because you might want to + * set some token type / channel overrides before filling buffer. + */ + protected void fillBuffer() { + int index = 0; + Token t = tokenSource.nextToken(); + while ( t!=null && t.getType()!=CharStream.EOF ) { + boolean discard = false; + // is there a channel override for token type? + if ( channelOverrideMap!=null ) { + Integer channelI = (Integer) + channelOverrideMap.get(new Integer(t.getType())); + if ( channelI!=null ) { + t.setChannel(channelI.intValue()); + } + } + if ( discardSet!=null && + discardSet.contains(new Integer(t.getType())) ) + { + discard = true; + } + else if ( discardOffChannelTokens && t.getChannel()!=this.channel ) { + discard = true; + } + if ( !discard ) { + t.setTokenIndex(index); + tokens.add(t); + index++; + } + t = tokenSource.nextToken(); + } + // leave p pointing at first token on channel + p = 0; + p = skipOffTokenChannels(p); + } + + /** Move the input pointer to the next incoming token. The stream + * must become active with LT(1) available. consume() simply + * moves the input pointer so that LT(1) points at the next + * input symbol. Consume at least one token. + * + * Walk past any token not on the channel the parser is listening to. + */ + public void consume() { + if ( p<tokens.size() ) { + p++; + p = skipOffTokenChannels(p); // leave p on valid token + } + } + + /** Given a starting index, return the index of the first on-channel + * token. + */ + protected int skipOffTokenChannels(int i) { + int n = tokens.size(); + while ( i<n && ((Token)tokens.get(i)).getChannel()!=channel ) { + i++; + } + return i; + } + + protected int skipOffTokenChannelsReverse(int i) { + while ( i>=0 && ((Token)tokens.get(i)).getChannel()!=channel ) { + i--; + } + return i; + } + + /** A simple filter mechanism whereby you can tell this token stream + * to force all tokens of type ttype to be on channel. For example, + * when interpreting, we cannot exec actions so we need to tell + * the stream to force all WS and NEWLINE to be a different, ignored + * channel. + */ + public void setTokenTypeChannel(int ttype, int channel) { + if ( channelOverrideMap==null ) { + channelOverrideMap = new HashMap(); + } + channelOverrideMap.put(new Integer(ttype), new Integer(channel)); + } + + public void discardTokenType(int ttype) { + if ( discardSet==null ) { + discardSet = new HashSet(); + } + discardSet.add(new Integer(ttype)); + } + + public void discardOffChannelTokens(boolean discardOffChannelTokens) { + this.discardOffChannelTokens = discardOffChannelTokens; + } + + public List getTokens() { + if ( p == -1 ) { + fillBuffer(); + } + return tokens; + } + + public List getTokens(int start, int stop) { + return getTokens(start, stop, (BitSet)null); + } + + /** Given a start and stop index, return a List of all tokens in + * the token type BitSet. Return null if no tokens were found. This + * method looks at both on and off channel tokens. + */ + public List getTokens(int start, int stop, BitSet types) { + if ( p == -1 ) { + fillBuffer(); + } + if ( stop>=tokens.size() ) { + stop=tokens.size()-1; + } + if ( start<0 ) { + start=0; + } + if ( start>stop ) { + return null; + } + + // list = tokens[start:stop]:{Token t, t.getType() in types} + List filteredTokens = new ArrayList(); + for (int i=start; i<=stop; i++) { + Token t = (Token)tokens.get(i); + if ( types==null || types.member(t.getType()) ) { + filteredTokens.add(t); + } + } + if ( filteredTokens.size()==0 ) { + filteredTokens = null; + } + return filteredTokens; + } + + public List getTokens(int start, int stop, List types) { + return getTokens(start,stop,new BitSet(types)); + } + + public List getTokens(int start, int stop, int ttype) { + return getTokens(start,stop,BitSet.of(ttype)); + } + + /** Get the ith token from the current position 1..n where k=1 is the + * first symbol of lookahead. + */ + public Token LT(int k) { + if ( p == -1 ) { + fillBuffer(); + } + if ( k==0 ) { + return null; + } + if ( k<0 ) { + return LB(-k); + } + //System.out.print("LT(p="+p+","+k+")="); + if ( (p+k-1) >= tokens.size() ) { + return Token.EOF_TOKEN; + } + //System.out.println(tokens.get(p+k-1)); + int i = p; + int n = 1; + // find k good tokens + while ( n<k ) { + // skip off-channel tokens + i = skipOffTokenChannels(i+1); // leave p on valid token + n++; + } + if ( i>=tokens.size() ) { + return Token.EOF_TOKEN; + } + return (Token)tokens.get(i); + } + + /** Look backwards k tokens on-channel tokens */ + protected Token LB(int k) { + //System.out.print("LB(p="+p+","+k+") "); + if ( p == -1 ) { + fillBuffer(); + } + if ( k==0 ) { + return null; + } + if ( (p-k)<0 ) { + return null; + } + + int i = p; + int n = 1; + // find k good tokens looking backwards + while ( n<=k ) { + // skip off-channel tokens + i = skipOffTokenChannelsReverse(i-1); // leave p on valid token + n++; + } + if ( i<0 ) { + return null; + } + return (Token)tokens.get(i); + } + + /** Return absolute token i; ignore which channel the tokens are on; + * that is, count all tokens not just on-channel tokens. + */ + public Token get(int i) { + return (Token)tokens.get(i); + } + + public int LA(int i) { + return LT(i).getType(); + } + + public int mark() { + if ( p == -1 ) { + fillBuffer(); + } + lastMarker = index(); + return lastMarker; + } + + public void release(int marker) { + // no resources to release + } + + public int size() { + return tokens.size(); + } + + public int index() { + return p; + } + + public void rewind(int marker) { + seek(marker); + } + + public void rewind() { + seek(lastMarker); + } + + public void reset() { + p = 0; + lastMarker = 0; + } + + public void seek(int index) { + p = index; + } + + public TokenSource getTokenSource() { + return tokenSource; + } + + public String getSourceName() { + return getTokenSource().getSourceName(); + } + + public String toString() { + if ( p == -1 ) { + fillBuffer(); + } + return toString(0, tokens.size()-1); + } + + public String toString(int start, int stop) { + if ( start<0 || stop<0 ) { + return null; + } + if ( p == -1 ) { + fillBuffer(); + } + if ( stop>=tokens.size() ) { + stop = tokens.size()-1; + } + StringBuffer buf = new StringBuffer(); + for (int i = start; i <= stop; i++) { + Token t = (Token)tokens.get(i); + buf.append(t.getText()); + } + return buf.toString(); + } + + public String toString(Token start, Token stop) { + if ( start!=null && stop!=null ) { + return toString(start.getTokenIndex(), stop.getTokenIndex()); + } + return null; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/DFA.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/DFA.java new file mode 100644 index 0000000..d4ae12c --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/DFA.java @@ -0,0 +1,229 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +/** A DFA implemented as a set of transition tables. + * + * Any state that has a semantic predicate edge is special; those states + * are generated with if-then-else structures in a specialStateTransition() + * which is generated by cyclicDFA template. + * + * There are at most 32767 states (16-bit signed short). + * Could get away with byte sometimes but would have to generate different + * types and the simulation code too. For a point of reference, the Java + * lexer's Tokens rule DFA has 326 states roughly. + */ +public class DFA { + protected short[] eot; + protected short[] eof; + protected char[] min; + protected char[] max; + protected short[] accept; + protected short[] special; + protected short[][] transition; + + protected int decisionNumber; + + /** Which recognizer encloses this DFA? Needed to check backtracking */ + protected BaseRecognizer recognizer; + + public static final boolean debug = false; + + /** From the input stream, predict what alternative will succeed + * using this DFA (representing the covering regular approximation + * to the underlying CFL). Return an alternative number 1..n. Throw + * an exception upon error. + */ + public int predict(IntStream input) + throws RecognitionException + { + if ( debug ) { + System.err.println("Enter DFA.predict for decision "+decisionNumber); + } + int mark = input.mark(); // remember where decision started in input + int s = 0; // we always start at s0 + try { + while ( true ) { + if ( debug ) System.err.println("DFA "+decisionNumber+" state "+s+" LA(1)="+(char)input.LA(1)+"("+input.LA(1)+ + "), index="+input.index()); + int specialState = special[s]; + if ( specialState>=0 ) { + if ( debug ) { + System.err.println("DFA "+decisionNumber+ + " state "+s+" is special state "+specialState); + } + s = specialStateTransition(specialState,input); + if ( debug ) { + System.err.println("DFA "+decisionNumber+ + " returns from special state "+specialState+" to "+s); + } + if ( s==-1 ) { + noViableAlt(s,input); + return 0; + } + input.consume(); + continue; + } + if ( accept[s] >= 1 ) { + if ( debug ) System.err.println("accept; predict "+accept[s]+" from state "+s); + return accept[s]; + } + // look for a normal char transition + char c = (char)input.LA(1); // -1 == \uFFFF, all tokens fit in 65000 space + if (c>=min[s] && c<=max[s]) { + int snext = transition[s][c-min[s]]; // move to next state + if ( snext < 0 ) { + // was in range but not a normal transition + // must check EOT, which is like the else clause. + // eot[s]>=0 indicates that an EOT edge goes to another + // state. + if ( eot[s]>=0 ) { // EOT Transition to accept state? + if ( debug ) System.err.println("EOT transition"); + s = eot[s]; + input.consume(); + // TODO: I had this as return accept[eot[s]] + // which assumed here that the EOT edge always + // went to an accept...faster to do this, but + // what about predicated edges coming from EOT + // target? + continue; + } + noViableAlt(s,input); + return 0; + } + s = snext; + input.consume(); + continue; + } + if ( eot[s]>=0 ) { // EOT Transition? + if ( debug ) System.err.println("EOT transition"); + s = eot[s]; + input.consume(); + continue; + } + if ( c==(char)Token.EOF && eof[s]>=0 ) { // EOF Transition to accept state? + if ( debug ) System.err.println("accept via EOF; predict "+accept[eof[s]]+" from "+eof[s]); + return accept[eof[s]]; + } + // not in range and not EOF/EOT, must be invalid symbol + if ( debug ) { + System.err.println("min["+s+"]="+min[s]); + System.err.println("max["+s+"]="+max[s]); + System.err.println("eot["+s+"]="+eot[s]); + System.err.println("eof["+s+"]="+eof[s]); + for (int p=0; p<transition[s].length; p++) { + System.err.print(transition[s][p]+" "); + } + System.err.println(); + } + noViableAlt(s,input); + return 0; + } + } + finally { + input.rewind(mark); + } + } + + protected void noViableAlt(int s, IntStream input) throws NoViableAltException { + if (recognizer.state.backtracking>0) { + recognizer.state.failed=true; + return; + } + NoViableAltException nvae = + new NoViableAltException(getDescription(), + decisionNumber, + s, + input); + error(nvae); + throw nvae; + } + + /** A hook for debugging interface */ + protected void error(NoViableAltException nvae) { ; } + + public int specialStateTransition(int s, IntStream input) + throws NoViableAltException + { + return -1; + } + + public String getDescription() { + return "n/a"; + } + + /** Given a String that has a run-length-encoding of some unsigned shorts + * like "\1\2\3\9", convert to short[] {2,9,9,9}. We do this to avoid + * static short[] which generates so much init code that the class won't + * compile. :( + */ + public static short[] unpackEncodedString(String encodedString) { + // walk first to find how big it is. + int size = 0; + for (int i=0; i<encodedString.length(); i+=2) { + size += encodedString.charAt(i); + } + short[] data = new short[size]; + int di = 0; + for (int i=0; i<encodedString.length(); i+=2) { + char n = encodedString.charAt(i); + char v = encodedString.charAt(i+1); + // add v n times to data + for (int j=1; j<=n; j++) { + data[di++] = (short)v; + } + } + return data; + } + + /** Hideous duplication of code, but I need different typed arrays out :( */ + public static char[] unpackEncodedStringToUnsignedChars(String encodedString) { + // walk first to find how big it is. + int size = 0; + for (int i=0; i<encodedString.length(); i+=2) { + size += encodedString.charAt(i); + } + char[] data = new char[size]; + int di = 0; + for (int i=0; i<encodedString.length(); i+=2) { + char n = encodedString.charAt(i); + char v = encodedString.charAt(i+1); + // add v n times to data + for (int j=1; j<=n; j++) { + data[di++] = v; + } + } + return data; + } + + /* + public int specialTransition(int state, int symbol) { + return 0; + } + */ +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/EarlyExitException.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/EarlyExitException.java new file mode 100644 index 0000000..535e77a --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/EarlyExitException.java @@ -0,0 +1,41 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +/** The recognizer did not match anything for a (..)+ loop. */ +public class EarlyExitException extends RecognitionException { + public int decisionNumber; + + /** Used for remote debugger deserialization */ + public EarlyExitException() {;} + + public EarlyExitException(int decisionNumber, IntStream input) { + super(input); + this.decisionNumber = decisionNumber; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/FailedPredicateException.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/FailedPredicateException.java new file mode 100644 index 0000000..b330c49 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/FailedPredicateException.java @@ -0,0 +1,54 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +/** A semantic predicate failed during validation. Validation of predicates + * occurs when normally parsing the alternative just like matching a token. + * Disambiguating predicate evaluation occurs when we hoist a predicate into + * a prediction decision. + */ +public class FailedPredicateException extends RecognitionException { + public String ruleName; + public String predicateText; + + /** Used for remote debugger deserialization */ + public FailedPredicateException() {;} + + public FailedPredicateException(IntStream input, + String ruleName, + String predicateText) + { + super(input); + this.ruleName = ruleName; + this.predicateText = predicateText; + } + + public String toString() { + return "FailedPredicateException("+ruleName+",{"+predicateText+"}?)"; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/IntStream.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/IntStream.java new file mode 100644 index 0000000..63e2f48 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/IntStream.java @@ -0,0 +1,122 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +/** A simple stream of integers used when all I care about is the char + * or token type sequence (such as interpretation). + */ +public interface IntStream { + void consume(); + + /** Get int at current input pointer + i ahead where i=1 is next int. + * Negative indexes are allowed. LA(-1) is previous token (token + * just matched). LA(-i) where i is before first token should + * yield -1, invalid char / EOF. + */ + int LA(int i); + + /** Tell the stream to start buffering if it hasn't already. Return + * current input position, index(), or some other marker so that + * when passed to rewind() you get back to the same spot. + * rewind(mark()) should not affect the input cursor. The Lexer + * track line/col info as well as input index so its markers are + * not pure input indexes. Same for tree node streams. + */ + int mark(); + + /** Return the current input symbol index 0..n where n indicates the + * last symbol has been read. The index is the symbol about to be + * read not the most recently read symbol. + */ + int index(); + + /** Reset the stream so that next call to index would return marker. + * The marker will usually be index() but it doesn't have to be. It's + * just a marker to indicate what state the stream was in. This is + * essentially calling release() and seek(). If there are markers + * created after this marker argument, this routine must unroll them + * like a stack. Assume the state the stream was in when this marker + * was created. + */ + void rewind(int marker); + + /** Rewind to the input position of the last marker. + * Used currently only after a cyclic DFA and just + * before starting a sem/syn predicate to get the + * input position back to the start of the decision. + * Do not "pop" the marker off the state. mark(i) + * and rewind(i) should balance still. It is + * like invoking rewind(last marker) but it should not "pop" + * the marker off. It's like seek(last marker's input position). + */ + void rewind(); + + /** You may want to commit to a backtrack but don't want to force the + * stream to keep bookkeeping objects around for a marker that is + * no longer necessary. This will have the same behavior as + * rewind() except it releases resources without the backward seek. + * This must throw away resources for all markers back to the marker + * argument. So if you're nested 5 levels of mark(), and then release(2) + * you have to release resources for depths 2..5. + */ + void release(int marker); + + /** Set the input cursor to the position indicated by index. This is + * normally used to seek ahead in the input stream. No buffering is + * required to do this unless you know your stream will use seek to + * move backwards such as when backtracking. + * + * This is different from rewind in its multi-directional + * requirement and in that its argument is strictly an input cursor (index). + * + * For char streams, seeking forward must update the stream state such + * as line number. For seeking backwards, you will be presumably + * backtracking using the mark/rewind mechanism that restores state and + * so this method does not need to update state when seeking backwards. + * + * Currently, this method is only used for efficient backtracking using + * memoization, but in the future it may be used for incremental parsing. + * + * The index is 0..n-1. A seek to position i means that LA(1) will + * return the ith symbol. So, seeking to 0 means LA(1) will return the + * first element in the stream. + */ + void seek(int index); + + /** Only makes sense for streams that buffer everything up probably, but + * might be useful to display the entire stream or for testing. This + * value includes a single EOF. + */ + int size(); + + /** Where are you getting symbols from? Normally, implementations will + * pass the buck all the way to the lexer who can ask its input stream + * for the file name or whatever. + */ + public String getSourceName(); +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/Lexer.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/Lexer.java new file mode 100644 index 0000000..6978519 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/Lexer.java @@ -0,0 +1,335 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +/** A lexer is recognizer that draws input symbols from a character stream. + * lexer grammars result in a subclass of this object. A Lexer object + * uses simplified match() and error recovery mechanisms in the interest + * of speed. + */ +public abstract class Lexer extends BaseRecognizer implements TokenSource { + /** Where is the lexer drawing characters from? */ + protected CharStream input; + + public Lexer() { + } + + public Lexer(CharStream input) { + this.input = input; + } + + public Lexer(CharStream input, RecognizerSharedState state) { + super(state); + this.input = input; + } + + public void reset() { + super.reset(); // reset all recognizer state variables + // wack Lexer state variables + if ( input!=null ) { + input.seek(0); // rewind the input + } + if ( state==null ) { + return; // no shared state work to do + } + state.token = null; + state.type = Token.INVALID_TOKEN_TYPE; + state.channel = Token.DEFAULT_CHANNEL; + state.tokenStartCharIndex = -1; + state.tokenStartCharPositionInLine = -1; + state.tokenStartLine = -1; + state.text = null; + } + + /** Return a token from this source; i.e., match a token on the char + * stream. + */ + public Token nextToken() { + while (true) { + state.token = null; + state.channel = Token.DEFAULT_CHANNEL; + state.tokenStartCharIndex = input.index(); + state.tokenStartCharPositionInLine = input.getCharPositionInLine(); + state.tokenStartLine = input.getLine(); + state.text = null; + if ( input.LA(1)==CharStream.EOF ) { + return Token.EOF_TOKEN; + } + try { + mTokens(); + if ( state.token==null ) { + emit(); + } + else if ( state.token==Token.SKIP_TOKEN ) { + continue; + } + return state.token; + } + catch (NoViableAltException nva) { + reportError(nva); + recover(nva); // throw out current char and try again + } + catch (RecognitionException re) { + reportError(re); + // match() routine has already called recover() + } + } + } + + /** Instruct the lexer to skip creating a token for current lexer rule + * and look for another token. nextToken() knows to keep looking when + * a lexer rule finishes with token set to SKIP_TOKEN. Recall that + * if token==null at end of any token rule, it creates one for you + * and emits it. + */ + public void skip() { + state.token = Token.SKIP_TOKEN; + } + + /** This is the lexer entry point that sets instance var 'token' */ + public abstract void mTokens() throws RecognitionException; + + /** Set the char stream and reset the lexer */ + public void setCharStream(CharStream input) { + this.input = null; + reset(); + this.input = input; + } + + public CharStream getCharStream() { + return this.input; + } + + public String getSourceName() { + return input.getSourceName(); + } + + /** Currently does not support multiple emits per nextToken invocation + * for efficiency reasons. Subclass and override this method and + * nextToken (to push tokens into a list and pull from that list rather + * than a single variable as this implementation does). + */ + public void emit(Token token) { + state.token = token; + } + + /** The standard method called to automatically emit a token at the + * outermost lexical rule. The token object should point into the + * char buffer start..stop. If there is a text override in 'text', + * use that to set the token's text. Override this method to emit + * custom Token objects. + * + * If you are building trees, then you should also override + * Parser or TreeParser.getMissingSymbol(). + */ + public Token emit() { + Token t = new CommonToken(input, state.type, state.channel, state.tokenStartCharIndex, getCharIndex()-1); + t.setLine(state.tokenStartLine); + t.setText(state.text); + t.setCharPositionInLine(state.tokenStartCharPositionInLine); + emit(t); + return t; + } + + public void match(String s) throws MismatchedTokenException { + int i = 0; + while ( i<s.length() ) { + if ( input.LA(1)!=s.charAt(i) ) { + if ( state.backtracking>0 ) { + state.failed = true; + return; + } + MismatchedTokenException mte = + new MismatchedTokenException(s.charAt(i), input); + recover(mte); + throw mte; + } + i++; + input.consume(); + state.failed = false; + } + } + + public void matchAny() { + input.consume(); + } + + public void match(int c) throws MismatchedTokenException { + if ( input.LA(1)!=c ) { + if ( state.backtracking>0 ) { + state.failed = true; + return; + } + MismatchedTokenException mte = + new MismatchedTokenException(c, input); + recover(mte); // don't really recover; just consume in lexer + throw mte; + } + input.consume(); + state.failed = false; + } + + public void matchRange(int a, int b) + throws MismatchedRangeException + { + if ( input.LA(1)<a || input.LA(1)>b ) { + if ( state.backtracking>0 ) { + state.failed = true; + return; + } + MismatchedRangeException mre = + new MismatchedRangeException(a,b,input); + recover(mre); + throw mre; + } + input.consume(); + state.failed = false; + } + + public int getLine() { + return input.getLine(); + } + + public int getCharPositionInLine() { + return input.getCharPositionInLine(); + } + + /** What is the index of the current character of lookahead? */ + public int getCharIndex() { + return input.index(); + } + + /** Return the text matched so far for the current token or any + * text override. + */ + public String getText() { + if ( state.text!=null ) { + return state.text; + } + return input.substring(state.tokenStartCharIndex,getCharIndex()-1); + } + + /** Set the complete text of this token; it wipes any previous + * changes to the text. + */ + public void setText(String text) { + state.text = text; + } + + public void reportError(RecognitionException e) { + /** TODO: not thought about recovery in lexer yet. + * + // if we've already reported an error and have not matched a token + // yet successfully, don't report any errors. + if ( errorRecovery ) { + //System.err.print("[SPURIOUS] "); + return; + } + errorRecovery = true; + */ + + displayRecognitionError(this.getTokenNames(), e); + } + + public String getErrorMessage(RecognitionException e, String[] tokenNames) { + String msg = null; + if ( e instanceof MismatchedTokenException ) { + MismatchedTokenException mte = (MismatchedTokenException)e; + msg = "mismatched character "+getCharErrorDisplay(e.c)+" expecting "+getCharErrorDisplay(mte.expecting); + } + else if ( e instanceof NoViableAltException ) { + NoViableAltException nvae = (NoViableAltException)e; + // for development, can add "decision=<<"+nvae.grammarDecisionDescription+">>" + // and "(decision="+nvae.decisionNumber+") and + // "state "+nvae.stateNumber + msg = "no viable alternative at character "+getCharErrorDisplay(e.c); + } + else if ( e instanceof EarlyExitException ) { + EarlyExitException eee = (EarlyExitException)e; + // for development, can add "(decision="+eee.decisionNumber+")" + msg = "required (...)+ loop did not match anything at character "+getCharErrorDisplay(e.c); + } + else if ( e instanceof MismatchedNotSetException ) { + MismatchedNotSetException mse = (MismatchedNotSetException)e; + msg = "mismatched character "+getCharErrorDisplay(e.c)+" expecting set "+mse.expecting; + } + else if ( e instanceof MismatchedSetException ) { + MismatchedSetException mse = (MismatchedSetException)e; + msg = "mismatched character "+getCharErrorDisplay(e.c)+" expecting set "+mse.expecting; + } + else if ( e instanceof MismatchedRangeException ) { + MismatchedRangeException mre = (MismatchedRangeException)e; + msg = "mismatched character "+getCharErrorDisplay(e.c)+" expecting set "+ + getCharErrorDisplay(mre.a)+".."+getCharErrorDisplay(mre.b); + } + else { + msg = super.getErrorMessage(e, tokenNames); + } + return msg; + } + + public String getCharErrorDisplay(int c) { + String s = String.valueOf((char)c); + switch ( c ) { + case Token.EOF : + s = "<EOF>"; + break; + case '\n' : + s = "\\n"; + break; + case '\t' : + s = "\\t"; + break; + case '\r' : + s = "\\r"; + break; + } + return "'"+s+"'"; + } + + /** Lexers can normally match any char in it's vocabulary after matching + * a token, so do the easy thing and just kill a character and hope + * it all works out. You can instead use the rule invocation stack + * to do sophisticated error recovery if you are in a fragment rule. + */ + public void recover(RecognitionException re) { + //System.out.println("consuming char "+(char)input.LA(1)+" during recovery"); + //re.printStackTrace(); + input.consume(); + } + + public void traceIn(String ruleName, int ruleIndex) { + String inputSymbol = ((char)input.LT(1))+" line="+getLine()+":"+getCharPositionInLine(); + super.traceIn(ruleName, ruleIndex, inputSymbol); + } + + public void traceOut(String ruleName, int ruleIndex) { + String inputSymbol = ((char)input.LT(1))+" line="+getLine()+":"+getCharPositionInLine(); + super.traceOut(ruleName, ruleIndex, inputSymbol); + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedNotSetException.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedNotSetException.java new file mode 100644 index 0000000..694e81a --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedNotSetException.java @@ -0,0 +1,41 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +public class MismatchedNotSetException extends MismatchedSetException { + /** Used for remote debugger deserialization */ + public MismatchedNotSetException() {;} + + public MismatchedNotSetException(BitSet expecting, IntStream input) { + super(expecting, input); + } + + public String toString() { + return "MismatchedNotSetException("+getUnexpectedType()+"!="+expecting+")"; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedRangeException.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedRangeException.java new file mode 100644 index 0000000..716f51c --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedRangeException.java @@ -0,0 +1,45 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +public class MismatchedRangeException extends RecognitionException { + public int a,b; + + /** Used for remote debugger deserialization */ + public MismatchedRangeException() {;} + + public MismatchedRangeException(int a, int b, IntStream input) { + super(input); + this.a = a; + this.b = b; + } + + public String toString() { + return "MismatchedNotSetException("+getUnexpectedType()+" not in ["+a+","+b+"])"; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedSetException.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedSetException.java new file mode 100644 index 0000000..ffd53cd --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedSetException.java @@ -0,0 +1,44 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +public class MismatchedSetException extends RecognitionException { + public BitSet expecting; + + /** Used for remote debugger deserialization */ + public MismatchedSetException() {;} + + public MismatchedSetException(BitSet expecting, IntStream input) { + super(input); + this.expecting = expecting; + } + + public String toString() { + return "MismatchedSetException("+getUnexpectedType()+"!="+expecting+")"; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedTokenException.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedTokenException.java new file mode 100644 index 0000000..2b3a75b --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedTokenException.java @@ -0,0 +1,45 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +/** A mismatched char or Token or tree node */ +public class MismatchedTokenException extends RecognitionException { + public int expecting = Token.INVALID_TOKEN_TYPE; + + /** Used for remote debugger deserialization */ + public MismatchedTokenException() {;} + + public MismatchedTokenException(int expecting, IntStream input) { + super(input); + this.expecting = expecting; + } + + public String toString() { + return "MismatchedTokenException("+getUnexpectedType()+"!="+expecting+")"; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedTreeNodeException.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedTreeNodeException.java new file mode 100644 index 0000000..d6ff998 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MismatchedTreeNodeException.java @@ -0,0 +1,49 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +import org.antlr.runtime.tree.TreeNodeStream; +import org.antlr.runtime.tree.Tree; + +/** + */ +public class MismatchedTreeNodeException extends RecognitionException { + public int expecting; + + public MismatchedTreeNodeException() { + } + + public MismatchedTreeNodeException(int expecting, TreeNodeStream input) { + super(input); + this.expecting = expecting; + } + + public String toString() { + return "MismatchedTreeNodeException("+getUnexpectedType()+"!="+expecting+")"; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MissingTokenException.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MissingTokenException.java new file mode 100644 index 0000000..d6d45da --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/MissingTokenException.java @@ -0,0 +1,56 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +/** We were expecting a token but it's not found. The current token + * is actually what we wanted next. Used for tree node errors too. + */ +public class MissingTokenException extends MismatchedTokenException { + public Object inserted; + /** Used for remote debugger deserialization */ + public MissingTokenException() {;} + + public MissingTokenException(int expecting, IntStream input, Object inserted) { + super(expecting, input); + this.inserted = inserted; + } + + public int getMissingType() { + return expecting; + } + + public String toString() { + if ( inserted!=null && token!=null ) { + return "MissingTokenException(inserted "+inserted+" at "+token.getText()+")"; + } + if ( token!=null ) { + return "MissingTokenException(at "+token.getText()+")"; + } + return "MissingTokenException"; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/NoViableAltException.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/NoViableAltException.java new file mode 100644 index 0000000..3074760 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/NoViableAltException.java @@ -0,0 +1,57 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +public class NoViableAltException extends RecognitionException { + public String grammarDecisionDescription; + public int decisionNumber; + public int stateNumber; + + /** Used for remote debugger deserialization */ + public NoViableAltException() {;} + + public NoViableAltException(String grammarDecisionDescription, + int decisionNumber, + int stateNumber, + IntStream input) + { + super(input); + this.grammarDecisionDescription = grammarDecisionDescription; + this.decisionNumber = decisionNumber; + this.stateNumber = stateNumber; + } + + public String toString() { + if ( input instanceof CharStream ) { + return "NoViableAltException('"+(char)getUnexpectedType()+"'@["+grammarDecisionDescription+"])"; + } + else { + return "NoViableAltException("+getUnexpectedType()+"@["+grammarDecisionDescription+"])"; + } + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/Parser.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/Parser.java new file mode 100644 index 0000000..a8dfa80 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/Parser.java @@ -0,0 +1,98 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +/** A parser for TokenStreams. "parser grammars" result in a subclass + * of this. + */ +public class Parser extends BaseRecognizer { + public TokenStream input; + + public Parser(TokenStream input) { + super(); // highlight that we go to super to set state object + setTokenStream(input); + } + + public Parser(TokenStream input, RecognizerSharedState state) { + super(state); // share the state object with another parser + setTokenStream(input); + } + + public void reset() { + super.reset(); // reset all recognizer state variables + if ( input!=null ) { + input.seek(0); // rewind the input + } + } + + protected Object getCurrentInputSymbol(IntStream input) { + return ((TokenStream)input).LT(1); + } + + protected Object getMissingSymbol(IntStream input, + RecognitionException e, + int expectedTokenType, + BitSet follow) + { + String tokenText = null; + if ( expectedTokenType==Token.EOF ) tokenText = "<missing EOF>"; + else tokenText = "<missing "+getTokenNames()[expectedTokenType]+">"; + CommonToken t = new CommonToken(expectedTokenType, tokenText); + Token current = ((TokenStream)input).LT(1); + if ( current.getType() == Token.EOF ) { + current = ((TokenStream)input).LT(-1); + } + t.line = current.getLine(); + t.charPositionInLine = current.getCharPositionInLine(); + t.channel = DEFAULT_TOKEN_CHANNEL; + return t; + } + + /** Set the token stream and reset the parser */ + public void setTokenStream(TokenStream input) { + this.input = null; + reset(); + this.input = input; + } + + public TokenStream getTokenStream() { + return input; + } + + public String getSourceName() { + return input.getSourceName(); + } + + public void traceIn(String ruleName, int ruleIndex) { + super.traceIn(ruleName, ruleIndex, input.LT(1)); + } + + public void traceOut(String ruleName, int ruleIndex) { + super.traceOut(ruleName, ruleIndex, input.LT(1)); + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ParserRuleReturnScope.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ParserRuleReturnScope.java new file mode 100644 index 0000000..e61cad8 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/ParserRuleReturnScope.java @@ -0,0 +1,52 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +/** Rules that return more than a single value must return an object + * containing all the values. Besides the properties defined in + * RuleLabelScope.predefinedRulePropertiesScope there may be user-defined + * return values. This class simply defines the minimum properties that + * are always defined and methods to access the others that might be + * available depending on output option such as template and tree. + * + * Note text is not an actual property of the return value, it is computed + * from start and stop using the input stream's toString() method. I + * could add a ctor to this so that we can pass in and store the input + * stream, but I'm not sure we want to do that. It would seem to be undefined + * to get the .text property anyway if the rule matches tokens from multiple + * input streams. + * + * I do not use getters for fields of objects that are used simply to + * group values such as this aggregate. The getters/setters are there to + * satisfy the superclass interface. + */ +public class ParserRuleReturnScope extends RuleReturnScope { + public Token start, stop; + public Object getStart() { return start; } + public Object getStop() { return stop; } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/RecognitionException.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/RecognitionException.java new file mode 100644 index 0000000..fa34907 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/RecognitionException.java @@ -0,0 +1,180 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +import org.antlr.runtime.tree.*; + +/** The root of the ANTLR exception hierarchy. + * + * To avoid English-only error messages and to generally make things + * as flexible as possible, these exceptions are not created with strings, + * but rather the information necessary to generate an error. Then + * the various reporting methods in Parser and Lexer can be overridden + * to generate a localized error message. For example, MismatchedToken + * exceptions are built with the expected token type. + * So, don't expect getMessage() to return anything. + * + * Note that as of Java 1.4, you can access the stack trace, which means + * that you can compute the complete trace of rules from the start symbol. + * This gives you considerable context information with which to generate + * useful error messages. + * + * ANTLR generates code that throws exceptions upon recognition error and + * also generates code to catch these exceptions in each rule. If you + * want to quit upon first error, you can turn off the automatic error + * handling mechanism using rulecatch action, but you still need to + * override methods mismatch and recoverFromMismatchSet. + * + * In general, the recognition exceptions can track where in a grammar a + * problem occurred and/or what was the expected input. While the parser + * knows its state (such as current input symbol and line info) that + * state can change before the exception is reported so current token index + * is computed and stored at exception time. From this info, you can + * perhaps print an entire line of input not just a single token, for example. + * Better to just say the recognizer had a problem and then let the parser + * figure out a fancy report. + */ +public class RecognitionException extends Exception { + /** What input stream did the error occur in? */ + public transient IntStream input; + + /** What is index of token/char were we looking at when the error occurred? */ + public int index; + + /** The current Token when an error occurred. Since not all streams + * can retrieve the ith Token, we have to track the Token object. + * For parsers. Even when it's a tree parser, token might be set. + */ + public Token token; + + /** If this is a tree parser exception, node is set to the node with + * the problem. + */ + public Object node; + + /** The current char when an error occurred. For lexers. */ + public int c; + + /** Track the line at which the error occurred in case this is + * generated from a lexer. We need to track this since the + * unexpected char doesn't carry the line info. + */ + public int line; + + public int charPositionInLine; + + /** If you are parsing a tree node stream, you will encounter som + * imaginary nodes w/o line/col info. We now search backwards looking + * for most recent token with line/col info, but notify getErrorHeader() + * that info is approximate. + */ + public boolean approximateLineInfo; + + /** Used for remote debugger deserialization */ + public RecognitionException() { + } + + public RecognitionException(IntStream input) { + this.input = input; + this.index = input.index(); + if ( input instanceof TokenStream ) { + this.token = ((TokenStream)input).LT(1); + this.line = token.getLine(); + this.charPositionInLine = token.getCharPositionInLine(); + } + if ( input instanceof TreeNodeStream ) { + extractInformationFromTreeNodeStream(input); + } + else if ( input instanceof CharStream ) { + this.c = input.LA(1); + this.line = ((CharStream)input).getLine(); + this.charPositionInLine = ((CharStream)input).getCharPositionInLine(); + } + else { + this.c = input.LA(1); + } + } + + protected void extractInformationFromTreeNodeStream(IntStream input) { + TreeNodeStream nodes = (TreeNodeStream)input; + this.node = nodes.LT(1); + TreeAdaptor adaptor = nodes.getTreeAdaptor(); + Token payload = adaptor.getToken(node); + if ( payload!=null ) { + this.token = payload; + if ( payload.getLine()<= 0 ) { + // imaginary node; no line/pos info; scan backwards + int i = -1; + Object priorNode = nodes.LT(i); + while ( priorNode!=null ) { + Token priorPayload = adaptor.getToken(priorNode); + if ( priorPayload!=null && priorPayload.getLine()>0 ) { + // we found the most recent real line / pos info + this.line = priorPayload.getLine(); + this.charPositionInLine = priorPayload.getCharPositionInLine(); + this.approximateLineInfo = true; + break; + } + --i; + priorNode = nodes.LT(i); + } + } + else { // node created from real token + this.line = payload.getLine(); + this.charPositionInLine = payload.getCharPositionInLine(); + } + } + else if ( this.node instanceof Tree) { + this.line = ((Tree)this.node).getLine(); + this.charPositionInLine = ((Tree)this.node).getCharPositionInLine(); + if ( this.node instanceof CommonTree) { + this.token = ((CommonTree)this.node).token; + } + } + else { + int type = adaptor.getType(this.node); + String text = adaptor.getText(this.node); + this.token = new CommonToken(type, text); + } + } + + /** Return the token type or char of the unexpected input element */ + public int getUnexpectedType() { + if ( input instanceof TokenStream ) { + return token.getType(); + } + else if ( input instanceof TreeNodeStream ) { + TreeNodeStream nodes = (TreeNodeStream)input; + TreeAdaptor adaptor = nodes.getTreeAdaptor(); + return adaptor.getType(node); + } + else { + return c; + } + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/RecognizerSharedState.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/RecognizerSharedState.java new file mode 100644 index 0000000..0c0f064 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/RecognizerSharedState.java @@ -0,0 +1,119 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2008 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/package org.antlr.runtime; + +import java.util.Map; + +/** The set of fields needed by an abstract recognizer to recognize input + * and recover from errors etc... As a separate state object, it can be + * shared among multiple grammars; e.g., when one grammar imports another. + * + * These fields are publically visible but the actual state pointer per + * parser is protected. + */ +public class RecognizerSharedState { + /** Track the set of token types that can follow any rule invocation. + * Stack grows upwards. When it hits the max, it grows 2x in size + * and keeps going. + */ + public BitSet[] following = new BitSet[BaseRecognizer.INITIAL_FOLLOW_STACK_SIZE]; + public int _fsp = -1; + + /** This is true when we see an error and before having successfully + * matched a token. Prevents generation of more than one error message + * per error. + */ + public boolean errorRecovery = false; + + /** The index into the input stream where the last error occurred. + * This is used to prevent infinite loops where an error is found + * but no token is consumed during recovery...another error is found, + * ad naseum. This is a failsafe mechanism to guarantee that at least + * one token/tree node is consumed for two errors. + */ + public int lastErrorIndex = -1; + + /** In lieu of a return value, this indicates that a rule or token + * has failed to match. Reset to false upon valid token match. + */ + public boolean failed = false; + + /** Did the recognizer encounter a syntax error? Track how many. */ + public int syntaxErrors = 0; + + /** If 0, no backtracking is going on. Safe to exec actions etc... + * If >0 then it's the level of backtracking. + */ + public int backtracking = 0; + + /** An array[size num rules] of Map<Integer,Integer> that tracks + * the stop token index for each rule. ruleMemo[ruleIndex] is + * the memoization table for ruleIndex. For key ruleStartIndex, you + * get back the stop token for associated rule or MEMO_RULE_FAILED. + * + * This is only used if rule memoization is on (which it is by default). + */ + public Map[] ruleMemo; + + + // LEXER FIELDS (must be in same state object to avoid casting + // constantly in generated code and Lexer object) :( + + + /** The goal of all lexer rules/methods is to create a token object. + * This is an instance variable as multiple rules may collaborate to + * create a single token. nextToken will return this object after + * matching lexer rule(s). If you subclass to allow multiple token + * emissions, then set this to the last token to be matched or + * something nonnull so that the auto token emit mechanism will not + * emit another token. + */ + public Token token; + + /** What character index in the stream did the current token start at? + * Needed, for example, to get the text for current token. Set at + * the start of nextToken. + */ + public int tokenStartCharIndex = -1; + + /** The line on which the first character of the token resides */ + public int tokenStartLine; + + /** The character position of first character within the line */ + public int tokenStartCharPositionInLine; + + /** The channel number for the current token */ + public int channel; + + /** The token type for the current token */ + public int type; + + /** You can set the text for the current token to override what is in + * the input char buffer. Use setText() or can set this instance var. + */ + public String text; +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/RuleReturnScope.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/RuleReturnScope.java new file mode 100644 index 0000000..5b80b85 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/RuleReturnScope.java @@ -0,0 +1,42 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +/** Rules can return start/stop info as well as possible trees and templates */ +public class RuleReturnScope { + /** Return the start token or tree */ + public Object getStart() { return null; } + /** Return the stop token or tree */ + public Object getStop() { return null; } + /** Has a value potentially if output=AST; */ + public Object getTree() { return null; } + /** Has a value potentially if output=template; Don't use StringTemplate + * type as it then causes a dependency with ST lib. + */ + public Object getTemplate() { return null; } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/SerializedGrammar.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/SerializedGrammar.java new file mode 100644 index 0000000..53522f9 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/SerializedGrammar.java @@ -0,0 +1,170 @@ +package org.antlr.runtime; + +import java.io.IOException; +import java.io.FileInputStream; +import java.io.BufferedInputStream; +import java.io.DataInputStream; +import java.util.List; +import java.util.ArrayList; + +public class SerializedGrammar { + public static final String COOKIE = "$ANTLR"; + public static final int FORMAT_VERSION = 1; + //public static org.antlr.tool.Grammar gr; // TESTING ONLY; remove later + + public String name; + public char type; // in {l, p, t, c} + public List rules; + + class Rule { + String name; + Block block; + public Rule(String name, Block block) { + this.name = name; + this.block = block; + } + public String toString() { + return name+":"+block; + } + } + + class Block { + List[] alts; + public Block(List[] alts) { + this.alts = alts; + } + public String toString() { + StringBuffer buf = new StringBuffer(); + buf.append("("); + for (int i = 0; i < alts.length; i++) { + List alt = alts[i]; + if ( i>0 ) buf.append("|"); + buf.append(alt.toString()); + } + buf.append(")"); + return buf.toString(); + } + } + + class TokenRef { + int ttype; + public TokenRef(int ttype) { this.ttype = ttype; } + public String toString() { return String.valueOf(ttype); } + } + + class RuleRef { + int ruleIndex; + public RuleRef(int ruleIndex) { this.ruleIndex = ruleIndex; } + public String toString() { return String.valueOf(ruleIndex); } + } + + public SerializedGrammar(String filename) throws IOException { + System.out.println("loading "+filename); + FileInputStream fis = new FileInputStream(filename); + BufferedInputStream bos = new BufferedInputStream(fis); + DataInputStream in = new DataInputStream(bos); + readFile(in); + in.close(); + } + + protected void readFile(DataInputStream in) throws IOException { + String cookie = readString(in); // get $ANTLR + if ( !cookie.equals(COOKIE) ) throw new IOException("not a serialized grammar file"); + int version = in.readByte(); + char grammarType = (char)in.readByte(); + this.type = grammarType; + String grammarName = readString(in); + this.name = grammarName; + System.out.println(grammarType+" grammar "+grammarName); + int numRules = in.readShort(); + System.out.println("num rules = "+numRules); + rules = readRules(in, numRules); + } + + protected List readRules(DataInputStream in, int numRules) throws IOException { + List rules = new ArrayList(); + for (int i=0; i<numRules; i++) { + Rule r = readRule(in); + rules.add(r); + } + return rules; + } + + protected Rule readRule(DataInputStream in) throws IOException { + byte R = in.readByte(); + if ( R!='R' ) throw new IOException("missing R on start of rule"); + String name = readString(in); + System.out.println("rule: "+name); + byte B = in.readByte(); + Block b = readBlock(in); + byte period = in.readByte(); + if ( period!='.' ) throw new IOException("missing . on end of rule"); + return new Rule(name, b); + } + + protected Block readBlock(DataInputStream in) throws IOException { + int nalts = in.readShort(); + List[] alts = new List[nalts]; + //System.out.println("enter block n="+nalts); + for (int i=0; i<nalts; i++) { + List alt = readAlt(in); + alts[i] = alt; + } + //System.out.println("exit block"); + return new Block(alts); + } + + protected List readAlt(DataInputStream in) throws IOException { + List alt = new ArrayList(); + byte A = in.readByte(); + if ( A!='A' ) throw new IOException("missing A on start of alt"); + byte cmd = in.readByte(); + while ( cmd!=';' ) { + switch (cmd) { + case 't' : + int ttype = in.readShort(); + alt.add(new TokenRef(ttype)); + //System.out.println("read token "+gr.getTokenDisplayName(ttype)); + break; + case 'r' : + int ruleIndex = in.readShort(); + alt.add(new RuleRef(ruleIndex)); + //System.out.println("read rule "+gr.getRuleName(ruleIndex)); + break; + case '.' : // wildcard + break; + case '-' : // range + int from = in.readChar(); + int to = in.readChar(); + break; + case '~' : // not + int notThisTokenType = in.readShort(); + break; + case 'B' : // nested block + Block b = readBlock(in); + alt.add(b); + break; + } + cmd = in.readByte(); + } + //System.out.println("exit alt"); + return alt; + } + + protected String readString(DataInputStream in) throws IOException { + byte c = in.readByte(); + StringBuffer buf = new StringBuffer(); + while ( c!=';' ) { + buf.append((char)c); + c = in.readByte(); + } + return buf.toString(); + } + + public String toString() { + StringBuffer buf = new StringBuffer(); + buf.append(type+" grammar "+name); + buf.append(rules); + return buf.toString(); + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/Token.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/Token.java new file mode 100644 index 0000000..e469e31 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/Token.java @@ -0,0 +1,91 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +public interface Token { + public static final int EOR_TOKEN_TYPE = 1; + + /** imaginary tree navigation type; traverse "get child" link */ + public static final int DOWN = 2; + /** imaginary tree navigation type; finish with a child list */ + public static final int UP = 3; + + public static final int MIN_TOKEN_TYPE = UP+1; + + public static final int EOF = CharStream.EOF; + public static final Token EOF_TOKEN = new CommonToken(EOF); + + public static final int INVALID_TOKEN_TYPE = 0; + public static final Token INVALID_TOKEN = new CommonToken(INVALID_TOKEN_TYPE); + + /** In an action, a lexer rule can set token to this SKIP_TOKEN and ANTLR + * will avoid creating a token for this symbol and try to fetch another. + */ + public static final Token SKIP_TOKEN = new CommonToken(INVALID_TOKEN_TYPE); + + /** All tokens go to the parser (unless skip() is called in that rule) + * on a particular "channel". The parser tunes to a particular channel + * so that whitespace etc... can go to the parser on a "hidden" channel. + */ + public static final int DEFAULT_CHANNEL = 0; + + /** Anything on different channel than DEFAULT_CHANNEL is not parsed + * by parser. + */ + public static final int HIDDEN_CHANNEL = 99; + + /** Get the text of the token */ + public String getText(); + public void setText(String text); + + public int getType(); + public void setType(int ttype); + /** The line number on which this token was matched; line=1..n */ + public int getLine(); + public void setLine(int line); + + /** The index of the first character relative to the beginning of the line 0..n-1 */ + public int getCharPositionInLine(); + public void setCharPositionInLine(int pos); + + public int getChannel(); + public void setChannel(int channel); + + /** An index from 0..n-1 of the token object in the input stream. + * This must be valid in order to use the ANTLRWorks debugger. + */ + public int getTokenIndex(); + public void setTokenIndex(int index); + + /** From what character stream was this token created? You don't have to + * implement but it's nice to know where a Token comes from if you have + * include files etc... on the input. + */ + public CharStream getInputStream(); + public void setInputStream(CharStream input); +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/TokenRewriteStream.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/TokenRewriteStream.java new file mode 100644 index 0000000..1e3bc2b --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/TokenRewriteStream.java @@ -0,0 +1,566 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +import java.util.*; + +/** Useful for dumping out the input stream after doing some + * augmentation or other manipulations. + * + * You can insert stuff, replace, and delete chunks. Note that the + * operations are done lazily--only if you convert the buffer to a + * String. This is very efficient because you are not moving data around + * all the time. As the buffer of tokens is converted to strings, the + * toString() method(s) check to see if there is an operation at the + * current index. If so, the operation is done and then normal String + * rendering continues on the buffer. This is like having multiple Turing + * machine instruction streams (programs) operating on a single input tape. :) + * + * Since the operations are done lazily at toString-time, operations do not + * screw up the token index values. That is, an insert operation at token + * index i does not change the index values for tokens i+1..n-1. + * + * Because operations never actually alter the buffer, you may always get + * the original token stream back without undoing anything. Since + * the instructions are queued up, you can easily simulate transactions and + * roll back any changes if there is an error just by removing instructions. + * For example, + * + * CharStream input = new ANTLRFileStream("input"); + * TLexer lex = new TLexer(input); + * TokenRewriteStream tokens = new TokenRewriteStream(lex); + * T parser = new T(tokens); + * parser.startRule(); + * + * Then in the rules, you can execute + * Token t,u; + * ... + * input.insertAfter(t, "text to put after t");} + * input.insertAfter(u, "text after u");} + * System.out.println(tokens.toString()); + * + * Actually, you have to cast the 'input' to a TokenRewriteStream. :( + * + * You can also have multiple "instruction streams" and get multiple + * rewrites from a single pass over the input. Just name the instruction + * streams and use that name again when printing the buffer. This could be + * useful for generating a C file and also its header file--all from the + * same buffer: + * + * tokens.insertAfter("pass1", t, "text to put after t");} + * tokens.insertAfter("pass2", u, "text after u");} + * System.out.println(tokens.toString("pass1")); + * System.out.println(tokens.toString("pass2")); + * + * If you don't use named rewrite streams, a "default" stream is used as + * the first example shows. + */ +public class TokenRewriteStream extends CommonTokenStream { + public static final String DEFAULT_PROGRAM_NAME = "default"; + public static final int PROGRAM_INIT_SIZE = 100; + public static final int MIN_TOKEN_INDEX = 0; + + // Define the rewrite operation hierarchy + + class RewriteOperation { + /** What index into rewrites List are we? */ + protected int instructionIndex; + /** Token buffer index. */ + protected int index; + protected Object text; + protected RewriteOperation(int index, Object text) { + this.index = index; + this.text = text; + } + /** Execute the rewrite operation by possibly adding to the buffer. + * Return the index of the next token to operate on. + */ + public int execute(StringBuffer buf) { + return index; + } + public String toString() { + String opName = getClass().getName(); + int $index = opName.indexOf('$'); + opName = opName.substring($index+1, opName.length()); + return "<"+opName+"@"+index+":\""+text+"\">"; + } + } + + class InsertBeforeOp extends RewriteOperation { + public InsertBeforeOp(int index, Object text) { + super(index,text); + } + public int execute(StringBuffer buf) { + buf.append(text); + buf.append(((Token)tokens.get(index)).getText()); + return index+1; + } + } + + /** I'm going to try replacing range from x..y with (y-x)+1 ReplaceOp + * instructions. + */ + class ReplaceOp extends RewriteOperation { + protected int lastIndex; + public ReplaceOp(int from, int to, Object text) { + super(from,text); + lastIndex = to; + } + public int execute(StringBuffer buf) { + if ( text!=null ) { + buf.append(text); + } + return lastIndex+1; + } + public String toString() { + return "<ReplaceOp@"+index+".."+lastIndex+":\""+text+"\">"; + } + } + + class DeleteOp extends ReplaceOp { + public DeleteOp(int from, int to) { + super(from, to, null); + } + public String toString() { + return "<DeleteOp@"+index+".."+lastIndex+">"; + } + } + + /** You may have multiple, named streams of rewrite operations. + * I'm calling these things "programs." + * Maps String (name) -> rewrite (List) + */ + protected Map programs = null; + + /** Map String (program name) -> Integer index */ + protected Map lastRewriteTokenIndexes = null; + + public TokenRewriteStream() { + init(); + } + + protected void init() { + programs = new HashMap(); + programs.put(DEFAULT_PROGRAM_NAME, new ArrayList(PROGRAM_INIT_SIZE)); + lastRewriteTokenIndexes = new HashMap(); + } + + public TokenRewriteStream(TokenSource tokenSource) { + super(tokenSource); + init(); + } + + public TokenRewriteStream(TokenSource tokenSource, int channel) { + super(tokenSource, channel); + init(); + } + + public void rollback(int instructionIndex) { + rollback(DEFAULT_PROGRAM_NAME, instructionIndex); + } + + /** Rollback the instruction stream for a program so that + * the indicated instruction (via instructionIndex) is no + * longer in the stream. UNTESTED! + */ + public void rollback(String programName, int instructionIndex) { + List is = (List)programs.get(programName); + if ( is!=null ) { + programs.put(programName, is.subList(MIN_TOKEN_INDEX,instructionIndex)); + } + } + + public void deleteProgram() { + deleteProgram(DEFAULT_PROGRAM_NAME); + } + + /** Reset the program so that no instructions exist */ + public void deleteProgram(String programName) { + rollback(programName, MIN_TOKEN_INDEX); + } + + public void insertAfter(Token t, Object text) { + insertAfter(DEFAULT_PROGRAM_NAME, t, text); + } + + public void insertAfter(int index, Object text) { + insertAfter(DEFAULT_PROGRAM_NAME, index, text); + } + + public void insertAfter(String programName, Token t, Object text) { + insertAfter(programName,t.getTokenIndex(), text); + } + + public void insertAfter(String programName, int index, Object text) { + // to insert after, just insert before next index (even if past end) + insertBefore(programName,index+1, text); + //addToSortedRewriteList(programName, new InsertAfterOp(index,text)); + } + + public void insertBefore(Token t, Object text) { + insertBefore(DEFAULT_PROGRAM_NAME, t, text); + } + + public void insertBefore(int index, Object text) { + insertBefore(DEFAULT_PROGRAM_NAME, index, text); + } + + public void insertBefore(String programName, Token t, Object text) { + insertBefore(programName, t.getTokenIndex(), text); + } + + public void insertBefore(String programName, int index, Object text) { + //addToSortedRewriteList(programName, new InsertBeforeOp(index,text)); + RewriteOperation op = new InsertBeforeOp(index,text); + List rewrites = getProgram(programName); + op.instructionIndex = rewrites.size(); + rewrites.add(op); + } + + public void replace(int index, Object text) { + replace(DEFAULT_PROGRAM_NAME, index, index, text); + } + + public void replace(int from, int to, Object text) { + replace(DEFAULT_PROGRAM_NAME, from, to, text); + } + + public void replace(Token indexT, Object text) { + replace(DEFAULT_PROGRAM_NAME, indexT, indexT, text); + } + + public void replace(Token from, Token to, Object text) { + replace(DEFAULT_PROGRAM_NAME, from, to, text); + } + + public void replace(String programName, int from, int to, Object text) { + if ( from > to || from<0 || to<0 || to >= tokens.size() ) { + throw new IllegalArgumentException("replace: range invalid: "+from+".."+to+"(size="+tokens.size()+")"); + } + RewriteOperation op = new ReplaceOp(from, to, text); + List rewrites = getProgram(programName); + op.instructionIndex = rewrites.size(); + rewrites.add(op); + } + + public void replace(String programName, Token from, Token to, Object text) { + replace(programName, + from.getTokenIndex(), + to.getTokenIndex(), + text); + } + + public void delete(int index) { + delete(DEFAULT_PROGRAM_NAME, index, index); + } + + public void delete(int from, int to) { + delete(DEFAULT_PROGRAM_NAME, from, to); + } + + public void delete(Token indexT) { + delete(DEFAULT_PROGRAM_NAME, indexT, indexT); + } + + public void delete(Token from, Token to) { + delete(DEFAULT_PROGRAM_NAME, from, to); + } + + public void delete(String programName, int from, int to) { + replace(programName,from,to,null); + } + + public void delete(String programName, Token from, Token to) { + replace(programName,from,to,null); + } + + public int getLastRewriteTokenIndex() { + return getLastRewriteTokenIndex(DEFAULT_PROGRAM_NAME); + } + + protected int getLastRewriteTokenIndex(String programName) { + Integer I = (Integer)lastRewriteTokenIndexes.get(programName); + if ( I==null ) { + return -1; + } + return I.intValue(); + } + + protected void setLastRewriteTokenIndex(String programName, int i) { + lastRewriteTokenIndexes.put(programName, new Integer(i)); + } + + protected List getProgram(String name) { + List is = (List)programs.get(name); + if ( is==null ) { + is = initializeProgram(name); + } + return is; + } + + private List initializeProgram(String name) { + List is = new ArrayList(PROGRAM_INIT_SIZE); + programs.put(name, is); + return is; + } + + public String toOriginalString() { + return toOriginalString(MIN_TOKEN_INDEX, size()-1); + } + + public String toOriginalString(int start, int end) { + StringBuffer buf = new StringBuffer(); + for (int i=start; i>=MIN_TOKEN_INDEX && i<=end && i<tokens.size(); i++) { + buf.append(get(i).getText()); + } + return buf.toString(); + } + + public String toString() { + return toString(MIN_TOKEN_INDEX, size()-1); + } + + public String toString(String programName) { + return toString(programName, MIN_TOKEN_INDEX, size()-1); + } + + public String toString(int start, int end) { + return toString(DEFAULT_PROGRAM_NAME, start, end); + } + + public String toString(String programName, int start, int end) { + List rewrites = (List)programs.get(programName); + + // ensure start/end are in range + if ( end>tokens.size()-1 ) end = tokens.size()-1; + if ( start<0 ) start = 0; + + if ( rewrites==null || rewrites.size()==0 ) { + return toOriginalString(start,end); // no instructions to execute + } + StringBuffer buf = new StringBuffer(); + + // First, optimize instruction stream + Map indexToOp = reduceToSingleOperationPerIndex(rewrites); + + // Walk buffer, executing instructions and emitting tokens + int i = start; + while ( i <= end && i < tokens.size() ) { + RewriteOperation op = (RewriteOperation)indexToOp.get(new Integer(i)); + indexToOp.remove(new Integer(i)); // remove so any left have index size-1 + Token t = (Token) tokens.get(i); + if ( op==null ) { + // no operation at that index, just dump token + buf.append(t.getText()); + i++; // move to next token + } + else { + i = op.execute(buf); // execute operation and skip + } + } + + // include stuff after end if it's last index in buffer + // So, if they did an insertAfter(lastValidIndex, "foo"), include + // foo if end==lastValidIndex. + if ( end==tokens.size()-1 ) { + // Scan any remaining operations after last token + // should be included (they will be inserts). + Iterator it = indexToOp.values().iterator(); + while (it.hasNext()) { + RewriteOperation op = (RewriteOperation)it.next(); + if ( op.index >= tokens.size()-1 ) buf.append(op.text); + } + } + return buf.toString(); + } + + /** We need to combine operations and report invalid operations (like + * overlapping replaces that are not completed nested). Inserts to + * same index need to be combined etc... Here are the cases: + * + * I.i.u I.j.v leave alone, nonoverlapping + * I.i.u I.i.v combine: Iivu + * + * R.i-j.u R.x-y.v | i-j in x-y delete first R + * R.i-j.u R.i-j.v delete first R + * R.i-j.u R.x-y.v | x-y in i-j ERROR + * R.i-j.u R.x-y.v | boundaries overlap ERROR + * + * I.i.u R.x-y.v | i in x-y delete I + * I.i.u R.x-y.v | i not in x-y leave alone, nonoverlapping + * R.x-y.v I.i.u | i in x-y ERROR + * R.x-y.v I.x.u R.x-y.uv (combine, delete I) + * R.x-y.v I.i.u | i not in x-y leave alone, nonoverlapping + * + * I.i.u = insert u before op @ index i + * R.x-y.u = replace x-y indexed tokens with u + * + * First we need to examine replaces. For any replace op: + * + * 1. wipe out any insertions before op within that range. + * 2. Drop any replace op before that is contained completely within + * that range. + * 3. Throw exception upon boundary overlap with any previous replace. + * + * Then we can deal with inserts: + * + * 1. for any inserts to same index, combine even if not adjacent. + * 2. for any prior replace with same left boundary, combine this + * insert with replace and delete this replace. + * 3. throw exception if index in same range as previous replace + * + * Don't actually delete; make op null in list. Easier to walk list. + * Later we can throw as we add to index -> op map. + * + * Note that I.2 R.2-2 will wipe out I.2 even though, technically, the + * inserted stuff would be before the replace range. But, if you + * add tokens in front of a method body '{' and then delete the method + * body, I think the stuff before the '{' you added should disappear too. + * + * Return a map from token index to operation. + */ + protected Map reduceToSingleOperationPerIndex(List rewrites) { + //System.out.println("rewrites="+rewrites); + + // WALK REPLACES + for (int i = 0; i < rewrites.size(); i++) { + RewriteOperation op = (RewriteOperation)rewrites.get(i); + if ( op==null ) continue; + if ( !(op instanceof ReplaceOp) ) continue; + ReplaceOp rop = (ReplaceOp)rewrites.get(i); + // Wipe prior inserts within range + List inserts = getKindOfOps(rewrites, InsertBeforeOp.class, i); + for (int j = 0; j < inserts.size(); j++) { + InsertBeforeOp iop = (InsertBeforeOp) inserts.get(j); + if ( iop.index >= rop.index && iop.index <= rop.lastIndex ) { + // delete insert as it's a no-op. + rewrites.set(iop.instructionIndex, null); + } + } + // Drop any prior replaces contained within + List prevReplaces = getKindOfOps(rewrites, ReplaceOp.class, i); + for (int j = 0; j < prevReplaces.size(); j++) { + ReplaceOp prevRop = (ReplaceOp) prevReplaces.get(j); + if ( prevRop.index>=rop.index && prevRop.lastIndex <= rop.lastIndex ) { + // delete replace as it's a no-op. + rewrites.set(prevRop.instructionIndex, null); + continue; + } + // throw exception unless disjoint or identical + boolean disjoint = + prevRop.lastIndex<rop.index || prevRop.index > rop.lastIndex; + boolean same = + prevRop.index==rop.index && prevRop.lastIndex==rop.lastIndex; + if ( !disjoint && !same ) { + throw new IllegalArgumentException("replace op boundaries of "+rop+ + " overlap with previous "+prevRop); + } + } + } + + // WALK INSERTS + for (int i = 0; i < rewrites.size(); i++) { + RewriteOperation op = (RewriteOperation)rewrites.get(i); + if ( op==null ) continue; + if ( !(op instanceof InsertBeforeOp) ) continue; + InsertBeforeOp iop = (InsertBeforeOp)rewrites.get(i); + // combine current insert with prior if any at same index + List prevInserts = getKindOfOps(rewrites, InsertBeforeOp.class, i); + for (int j = 0; j < prevInserts.size(); j++) { + InsertBeforeOp prevIop = (InsertBeforeOp) prevInserts.get(j); + if ( prevIop.index == iop.index ) { // combine objects + // convert to strings...we're in process of toString'ing + // whole token buffer so no lazy eval issue with any templates + iop.text = catOpText(iop.text,prevIop.text); + // delete redundant prior insert + rewrites.set(prevIop.instructionIndex, null); + } + } + // look for replaces where iop.index is in range; error + List prevReplaces = getKindOfOps(rewrites, ReplaceOp.class, i); + for (int j = 0; j < prevReplaces.size(); j++) { + ReplaceOp rop = (ReplaceOp) prevReplaces.get(j); + if ( iop.index == rop.index ) { + rop.text = catOpText(iop.text,rop.text); + rewrites.set(i, null); // delete current insert + continue; + } + if ( iop.index >= rop.index && iop.index <= rop.lastIndex ) { + throw new IllegalArgumentException("insert op "+iop+ + " within boundaries of previous "+rop); + } + } + } + // System.out.println("rewrites after="+rewrites); + Map m = new HashMap(); + for (int i = 0; i < rewrites.size(); i++) { + RewriteOperation op = (RewriteOperation)rewrites.get(i); + if ( op==null ) continue; // ignore deleted ops + if ( m.get(new Integer(op.index))!=null ) { + throw new Error("should only be one op per index"); + } + m.put(new Integer(op.index), op); + } + //System.out.println("index to op: "+m); + return m; + } + + protected String catOpText(Object a, Object b) { + String x = ""; + String y = ""; + if ( a!=null ) x = a.toString(); + if ( b!=null ) y = b.toString(); + return x+y; + } + protected List getKindOfOps(List rewrites, Class kind) { + return getKindOfOps(rewrites, kind, rewrites.size()); + } + + /** Get all operations before an index of a particular kind */ + protected List getKindOfOps(List rewrites, Class kind, int before) { + List ops = new ArrayList(); + for (int i=0; i<before && i<rewrites.size(); i++) { + RewriteOperation op = (RewriteOperation)rewrites.get(i); + if ( op==null ) continue; // ignore deleted + if ( op.getClass() == kind ) ops.add(op); + } + return ops; + } + + public String toDebugString() { + return toDebugString(MIN_TOKEN_INDEX, size()-1); + } + + public String toDebugString(int start, int end) { + StringBuffer buf = new StringBuffer(); + for (int i=start; i>=MIN_TOKEN_INDEX && i<=end && i<tokens.size(); i++) { + buf.append(get(i)); + } + return buf.toString(); + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/TokenSource.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/TokenSource.java new file mode 100644 index 0000000..71f3ab8 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/TokenSource.java @@ -0,0 +1,54 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +/** A source of tokens must provide a sequence of tokens via nextToken() + * and also must reveal it's source of characters; CommonToken's text is + * computed from a CharStream; it only store indices into the char stream. + * + * Errors from the lexer are never passed to the parser. Either you want + * to keep going or you do not upon token recognition error. If you do not + * want to continue lexing then you do not want to continue parsing. Just + * throw an exception not under RecognitionException and Java will naturally + * toss you all the way out of the recognizers. If you want to continue + * lexing then you should not throw an exception to the parser--it has already + * requested a token. Keep lexing until you get a valid one. Just report + * errors and keep going, looking for a valid token. + */ +public interface TokenSource { + /** Return a Token object from your input stream (usually a CharStream). + * Do not fail/return upon lexing error; keep chewing on the characters + * until you get a good one; errors are not passed through to the parser. + */ + public Token nextToken(); + + /** Where are you getting tokens from? normally the implication will simply + * ask lexers input stream. + */ + public String getSourceName(); +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/TokenStream.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/TokenStream.java new file mode 100644 index 0000000..9cfac81 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/TokenStream.java @@ -0,0 +1,68 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +/** A stream of tokens accessing tokens from a TokenSource */ +public interface TokenStream extends IntStream { + /** Get Token at current input pointer + i ahead where i=1 is next Token. + * i<0 indicates tokens in the past. So -1 is previous token and -2 is + * two tokens ago. LT(0) is undefined. For i>=n, return Token.EOFToken. + * Return null for LT(0) and any index that results in an absolute address + * that is negative. + */ + public Token LT(int k); + + /** Get a token at an absolute index i; 0..n-1. This is really only + * needed for profiling and debugging and token stream rewriting. + * If you don't want to buffer up tokens, then this method makes no + * sense for you. Naturally you can't use the rewrite stream feature. + * I believe DebugTokenStream can easily be altered to not use + * this method, removing the dependency. + */ + public Token get(int i); + + /** Where is this stream pulling tokens from? This is not the name, but + * the object that provides Token objects. + */ + public TokenSource getTokenSource(); + + /** Return the text of all tokens from start to stop, inclusive. + * If the stream does not buffer all the tokens then it can just + * return "" or null; Users should not access $ruleLabel.text in + * an action of course in that case. + */ + public String toString(int start, int stop); + + /** Because the user is not required to use a token with an index stored + * in it, we must provide a means for two token objects themselves to + * indicate the start/end location. Most often this will just delegate + * to the other toString(int,int). This is also parallel with + * the TreeNodeStream.toString(Object,Object). + */ + public String toString(Token start, Token stop); +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/UnwantedTokenException.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/UnwantedTokenException.java new file mode 100644 index 0000000..44e0b1f --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/UnwantedTokenException.java @@ -0,0 +1,53 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime; + +/** An extra token while parsing a TokenStream */ +public class UnwantedTokenException extends MismatchedTokenException { + /** Used for remote debugger deserialization */ + public UnwantedTokenException() {;} + + public UnwantedTokenException(int expecting, IntStream input) { + super(expecting, input); + } + + public Token getUnexpectedToken() { + return token; + } + + public String toString() { + String exp = ", expected "+expecting; + if ( expecting==Token.INVALID_TOKEN_TYPE ) { + exp = ""; + } + if ( token==null ) { + return "UnwantedTokenException(found="+null+exp+")"; + } + return "UnwantedTokenException(found="+token.getText()+exp+")"; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/BlankDebugEventListener.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/BlankDebugEventListener.java new file mode 100755 index 0000000..073c8a3 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/BlankDebugEventListener.java @@ -0,0 +1,77 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.debug; + +import org.antlr.runtime.RecognitionException; +import org.antlr.runtime.Token; + +/** A blank listener that does nothing; useful for real classes so + * they don't have to have lots of blank methods and are less + * sensitive to updates to debug interface. + */ +public class BlankDebugEventListener implements DebugEventListener { + public void enterRule(String grammarFileName, String ruleName) {} + public void exitRule(String grammarFileName, String ruleName) {} + public void enterAlt(int alt) {} + public void enterSubRule(int decisionNumber) {} + public void exitSubRule(int decisionNumber) {} + public void enterDecision(int decisionNumber) {} + public void exitDecision(int decisionNumber) {} + public void location(int line, int pos) {} + public void consumeToken(Token token) {} + public void consumeHiddenToken(Token token) {} + public void LT(int i, Token t) {} + public void mark(int i) {} + public void rewind(int i) {} + public void rewind() {} + public void beginBacktrack(int level) {} + public void endBacktrack(int level, boolean successful) {} + public void recognitionException(RecognitionException e) {} + public void beginResync() {} + public void endResync() {} + public void semanticPredicate(boolean result, String predicate) {} + public void commence() {} + public void terminate() {} + + // Tree parsing stuff + + public void consumeNode(Object t) {} + public void LT(int i, Object t) {} + + // AST Stuff + + public void nilNode(Object t) {} + public void errorNode(Object t) {} + public void createNode(Object t) {} + public void createNode(Object node, Token token) {} + public void becomeRoot(Object newRoot, Object oldRoot) {} + public void addChild(Object root, Object child) {} + public void setTokenBoundaries(Object t, int tokenStartIndex, int tokenStopIndex) {} +} + + diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugEventHub.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugEventHub.java new file mode 100644 index 0000000..3b9b1e9 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugEventHub.java @@ -0,0 +1,292 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.debug; + +import org.antlr.runtime.Token; +import org.antlr.runtime.RecognitionException; + +import java.util.List; +import java.util.ArrayList; + +/** Broadcast debug events to multiple listeners. Lets you debug and still + * use the event mechanism to build parse trees etc... Not thread-safe. + * Don't add events in one thread while parser fires events in another. + * + * @see also DebugEventRepeater + */ +public class DebugEventHub implements DebugEventListener { + protected List listeners = new ArrayList(); + + public DebugEventHub(DebugEventListener listener) { + listeners.add(listener); + } + + public DebugEventHub(DebugEventListener a, DebugEventListener b) { + listeners.add(a); + listeners.add(b); + } + + /** Add another listener to broadcast events too. Not thread-safe. + * Don't add events in one thread while parser fires events in another. + */ + public void addListener(DebugEventListener listener) { + listeners.add(listener); + } + + /* To avoid a mess like this: + public void enterRule(final String ruleName) { + broadcast(new Code(){ + public void exec(DebugEventListener listener) {listener.enterRule(ruleName);}} + ); + } + I am dup'ing the for-loop in each. Where are Java closures!? blech! + */ + + public void enterRule(String grammarFileName, String ruleName) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.enterRule(grammarFileName,ruleName); + } + } + + public void exitRule(String grammarFileName, String ruleName) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.exitRule(grammarFileName, ruleName); + } + } + + public void enterAlt(int alt) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.enterAlt(alt); + } + } + + public void enterSubRule(int decisionNumber) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.enterSubRule(decisionNumber); + } + } + + public void exitSubRule(int decisionNumber) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.exitSubRule(decisionNumber); + } + } + + public void enterDecision(int decisionNumber) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.enterDecision(decisionNumber); + } + } + + public void exitDecision(int decisionNumber) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.exitDecision(decisionNumber); + } + } + + public void location(int line, int pos) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.location(line, pos); + } + } + + public void consumeToken(Token token) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.consumeToken(token); + } + } + + public void consumeHiddenToken(Token token) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.consumeHiddenToken(token); + } + } + + public void LT(int index, Token t) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.LT(index, t); + } + } + + public void mark(int index) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.mark(index); + } + } + + public void rewind(int index) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.rewind(index); + } + } + + public void rewind() { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.rewind(); + } + } + + public void beginBacktrack(int level) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.beginBacktrack(level); + } + } + + public void endBacktrack(int level, boolean successful) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.endBacktrack(level, successful); + } + } + + public void recognitionException(RecognitionException e) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.recognitionException(e); + } + } + + public void beginResync() { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.beginResync(); + } + } + + public void endResync() { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.endResync(); + } + } + + public void semanticPredicate(boolean result, String predicate) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.semanticPredicate(result, predicate); + } + } + + public void commence() { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.commence(); + } + } + + public void terminate() { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.terminate(); + } + } + + + // Tree parsing stuff + + public void consumeNode(Object t) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.consumeNode(t); + } + } + + public void LT(int index, Object t) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.LT(index, t); + } + } + + + // AST Stuff + + public void nilNode(Object t) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.nilNode(t); + } + } + + public void errorNode(Object t) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.errorNode(t); + } + } + + public void createNode(Object t) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.createNode(t); + } + } + + public void createNode(Object node, Token token) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.createNode(node, token); + } + } + + public void becomeRoot(Object newRoot, Object oldRoot) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.becomeRoot(newRoot, oldRoot); + } + } + + public void addChild(Object root, Object child) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.addChild(root, child); + } + } + + public void setTokenBoundaries(Object t, int tokenStartIndex, int tokenStopIndex) { + for (int i = 0; i < listeners.size(); i++) { + DebugEventListener listener = (DebugEventListener)listeners.get(i); + listener.setTokenBoundaries(t, tokenStartIndex, tokenStopIndex); + } + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugEventListener.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugEventListener.java new file mode 100644 index 0000000..56f605a --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugEventListener.java @@ -0,0 +1,323 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.debug; + +import org.antlr.runtime.RecognitionException; +import org.antlr.runtime.Token; + +/** All debugging events that a recognizer can trigger. + * + * I did not create a separate AST debugging interface as it would create + * lots of extra classes and DebugParser has a dbg var defined, which makes + * it hard to change to ASTDebugEventListener. I looked hard at this issue + * and it is easier to understand as one monolithic event interface for all + * possible events. Hopefully, adding ST debugging stuff won't be bad. Leave + * for future. 4/26/2006. + */ +public interface DebugEventListener { + /** Moved to version 2 for v3.1: added grammar name to enter/exit Rule */ + public static final String PROTOCOL_VERSION = "2"; + + /** serialized version of true */ + public static final int TRUE = 1; + public static final int FALSE = 0; + + /** The parser has just entered a rule. No decision has been made about + * which alt is predicted. This is fired AFTER init actions have been + * executed. Attributes are defined and available etc... + * The grammarFileName allows composite grammars to jump around among + * multiple grammar files. + */ + public void enterRule(String grammarFileName, String ruleName); + + /** Because rules can have lots of alternatives, it is very useful to + * know which alt you are entering. This is 1..n for n alts. + */ + public void enterAlt(int alt); + + /** This is the last thing executed before leaving a rule. It is + * executed even if an exception is thrown. This is triggered after + * error reporting and recovery have occurred (unless the exception is + * not caught in this rule). This implies an "exitAlt" event. + * The grammarFileName allows composite grammars to jump around among + * multiple grammar files. + */ + public void exitRule(String grammarFileName, String ruleName); + + /** Track entry into any (...) subrule other EBNF construct */ + public void enterSubRule(int decisionNumber); + + public void exitSubRule(int decisionNumber); + + /** Every decision, fixed k or arbitrary, has an enter/exit event + * so that a GUI can easily track what LT/consume events are + * associated with prediction. You will see a single enter/exit + * subrule but multiple enter/exit decision events, one for each + * loop iteration. + */ + public void enterDecision(int decisionNumber); + + public void exitDecision(int decisionNumber); + + /** An input token was consumed; matched by any kind of element. + * Trigger after the token was matched by things like match(), matchAny(). + */ + public void consumeToken(Token t); + + /** An off-channel input token was consumed. + * Trigger after the token was matched by things like match(), matchAny(). + * (unless of course the hidden token is first stuff in the input stream). + */ + public void consumeHiddenToken(Token t); + + /** Somebody (anybody) looked ahead. Note that this actually gets + * triggered by both LA and LT calls. The debugger will want to know + * which Token object was examined. Like consumeToken, this indicates + * what token was seen at that depth. A remote debugger cannot look + * ahead into a file it doesn't have so LT events must pass the token + * even if the info is redundant. + */ + public void LT(int i, Token t); + + /** The parser is going to look arbitrarily ahead; mark this location, + * the token stream's marker is sent in case you need it. + */ + public void mark(int marker); + + /** After an arbitrairly long lookahead as with a cyclic DFA (or with + * any backtrack), this informs the debugger that stream should be + * rewound to the position associated with marker. + */ + public void rewind(int marker); + + /** Rewind to the input position of the last marker. + * Used currently only after a cyclic DFA and just + * before starting a sem/syn predicate to get the + * input position back to the start of the decision. + * Do not "pop" the marker off the state. mark(i) + * and rewind(i) should balance still. + */ + public void rewind(); + + public void beginBacktrack(int level); + + public void endBacktrack(int level, boolean successful); + + /** To watch a parser move through the grammar, the parser needs to + * inform the debugger what line/charPos it is passing in the grammar. + * For now, this does not know how to switch from one grammar to the + * other and back for island grammars etc... + * + * This should also allow breakpoints because the debugger can stop + * the parser whenever it hits this line/pos. + */ + public void location(int line, int pos); + + /** A recognition exception occurred such as NoViableAltException. I made + * this a generic event so that I can alter the exception hierachy later + * without having to alter all the debug objects. + * + * Upon error, the stack of enter rule/subrule must be properly unwound. + * If no viable alt occurs it is within an enter/exit decision, which + * also must be rewound. Even the rewind for each mark must be unwount. + * In the Java target this is pretty easy using try/finally, if a bit + * ugly in the generated code. The rewind is generated in DFA.predict() + * actually so no code needs to be generated for that. For languages + * w/o this "finally" feature (C++?), the target implementor will have + * to build an event stack or something. + * + * Across a socket for remote debugging, only the RecognitionException + * data fields are transmitted. The token object or whatever that + * caused the problem was the last object referenced by LT. The + * immediately preceding LT event should hold the unexpected Token or + * char. + * + * Here is a sample event trace for grammar: + * + * b : C ({;}A|B) // {;} is there to prevent A|B becoming a set + * | D + * ; + * + * The sequence for this rule (with no viable alt in the subrule) for + * input 'c c' (there are 3 tokens) is: + * + * commence + * LT(1) + * enterRule b + * location 7 1 + * enter decision 3 + * LT(1) + * exit decision 3 + * enterAlt1 + * location 7 5 + * LT(1) + * consumeToken [c/<4>,1:0] + * location 7 7 + * enterSubRule 2 + * enter decision 2 + * LT(1) + * LT(1) + * recognitionException NoViableAltException 2 1 2 + * exit decision 2 + * exitSubRule 2 + * beginResync + * LT(1) + * consumeToken [c/<4>,1:1] + * LT(1) + * endResync + * LT(-1) + * exitRule b + * terminate + */ + public void recognitionException(RecognitionException e); + + /** Indicates the recognizer is about to consume tokens to resynchronize + * the parser. Any consume events from here until the recovered event + * are not part of the parse--they are dead tokens. + */ + public void beginResync(); + + /** Indicates that the recognizer has finished consuming tokens in order + * to resychronize. There may be multiple beginResync/endResync pairs + * before the recognizer comes out of errorRecovery mode (in which + * multiple errors are suppressed). This will be useful + * in a gui where you want to probably grey out tokens that are consumed + * but not matched to anything in grammar. Anything between + * a beginResync/endResync pair was tossed out by the parser. + */ + public void endResync(); + + /** A semantic predicate was evaluate with this result and action text */ + public void semanticPredicate(boolean result, String predicate); + + /** Announce that parsing has begun. Not technically useful except for + * sending events over a socket. A GUI for example will launch a thread + * to connect and communicate with a remote parser. The thread will want + * to notify the GUI when a connection is made. ANTLR parsers + * trigger this upon entry to the first rule (the ruleLevel is used to + * figure this out). + */ + public void commence(); + + /** Parsing is over; successfully or not. Mostly useful for telling + * remote debugging listeners that it's time to quit. When the rule + * invocation level goes to zero at the end of a rule, we are done + * parsing. + */ + public void terminate(); + + + // T r e e P a r s i n g + + /** Input for a tree parser is an AST, but we know nothing for sure + * about a node except its type and text (obtained from the adaptor). + * This is the analog of the consumeToken method. Again, the ID is + * the hashCode usually of the node so it only works if hashCode is + * not implemented. If the type is UP or DOWN, then + * the ID is not really meaningful as it's fixed--there is + * just one UP node and one DOWN navigation node. + * @param t + */ + public void consumeNode(Object t); + + /** The tree parser lookedahead. If the type is UP or DOWN, + * then the ID is not really meaningful as it's fixed--there is + * just one UP node and one DOWN navigation node. + */ + public void LT(int i, Object t); + + + // A S T E v e n t s + + /** A nil was created (even nil nodes have a unique ID... + * they are not "null" per se). As of 4/28/2006, this + * seems to be uniquely triggered when starting a new subtree + * such as when entering a subrule in automatic mode and when + * building a tree in rewrite mode. + * + * If you are receiving this event over a socket via + * RemoteDebugEventSocketListener then only t.ID is set. + */ + public void nilNode(Object t); + + /** Upon syntax error, recognizers bracket the error with an error node + * if they are building ASTs. + * @param t + */ + public void errorNode(Object t); + + /** Announce a new node built from token elements such as type etc... + * + * If you are receiving this event over a socket via + * RemoteDebugEventSocketListener then only t.ID, type, text are + * set. + */ + public void createNode(Object t); + + /** Announce a new node built from an existing token. + * + * If you are receiving this event over a socket via + * RemoteDebugEventSocketListener then only node.ID and token.tokenIndex + * are set. + */ + public void createNode(Object node, Token token); + + /** Make a node the new root of an existing root. See + * + * Note: the newRootID parameter is possibly different + * than the TreeAdaptor.becomeRoot() newRoot parameter. + * In our case, it will always be the result of calling + * TreeAdaptor.becomeRoot() and not root_n or whatever. + * + * The listener should assume that this event occurs + * only when the current subrule (or rule) subtree is + * being reset to newRootID. + * + * If you are receiving this event over a socket via + * RemoteDebugEventSocketListener then only IDs are set. + * + * @see org.antlr.runtime.tree.TreeAdaptor.becomeRoot() + */ + public void becomeRoot(Object newRoot, Object oldRoot); + + /** Make childID a child of rootID. + * + * If you are receiving this event over a socket via + * RemoteDebugEventSocketListener then only IDs are set. + * + * @see org.antlr.runtime.tree.TreeAdaptor.addChild() + */ + public void addChild(Object root, Object child); + + /** Set the token start/stop token index for a subtree root or node. + * + * If you are receiving this event over a socket via + * RemoteDebugEventSocketListener then only t.ID is set. + */ + public void setTokenBoundaries(Object t, int tokenStartIndex, int tokenStopIndex); +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugEventRepeater.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugEventRepeater.java new file mode 100644 index 0000000..4a97685 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugEventRepeater.java @@ -0,0 +1,88 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.debug; + +import org.antlr.runtime.Token; +import org.antlr.runtime.RecognitionException; + +/** A simple event repeater (proxy) that delegates all functionality to the + * listener sent into the ctor. Useful if you want to listen in on a few + * debug events w/o interrupting the debugger. Just subclass the repeater + * and override the methods you want to listen in on. Remember to call + * the method in this class so the event will continue on to the original + * recipient. + * + * @see DebugEventHub + */ +public class DebugEventRepeater implements DebugEventListener { + protected DebugEventListener listener; + + public DebugEventRepeater(DebugEventListener listener) { + this.listener = listener; + } + + public void enterRule(String grammarFileName, String ruleName) { listener.enterRule(grammarFileName, ruleName); } + public void exitRule(String grammarFileName, String ruleName) { listener.exitRule(grammarFileName, ruleName); } + public void enterAlt(int alt) { listener.enterAlt(alt); } + public void enterSubRule(int decisionNumber) { listener.enterSubRule(decisionNumber); } + public void exitSubRule(int decisionNumber) { listener.exitSubRule(decisionNumber); } + public void enterDecision(int decisionNumber) { listener.enterDecision(decisionNumber); } + public void exitDecision(int decisionNumber) { listener.exitDecision(decisionNumber); } + public void location(int line, int pos) { listener.location(line, pos); } + public void consumeToken(Token token) { listener.consumeToken(token); } + public void consumeHiddenToken(Token token) { listener.consumeHiddenToken(token); } + public void LT(int i, Token t) { listener.LT(i, t); } + public void mark(int i) { listener.mark(i); } + public void rewind(int i) { listener.rewind(i); } + public void rewind() { listener.rewind(); } + public void beginBacktrack(int level) { listener.beginBacktrack(level); } + public void endBacktrack(int level, boolean successful) { listener.endBacktrack(level, successful); } + public void recognitionException(RecognitionException e) { listener.recognitionException(e); } + public void beginResync() { listener.beginResync(); } + public void endResync() { listener.endResync(); } + public void semanticPredicate(boolean result, String predicate) { listener.semanticPredicate(result, predicate); } + public void commence() { listener.commence(); } + public void terminate() { listener.terminate(); } + + // Tree parsing stuff + + public void consumeNode(Object t) { listener.consumeNode(t); } + public void LT(int i, Object t) { listener.LT(i, t); } + + // AST Stuff + + public void nilNode(Object t) { listener.nilNode(t); } + public void errorNode(Object t) { listener.errorNode(t); } + public void createNode(Object t) { listener.createNode(t); } + public void createNode(Object node, Token token) { listener.createNode(node, token); } + public void becomeRoot(Object newRoot, Object oldRoot) { listener.becomeRoot(newRoot, oldRoot); } + public void addChild(Object root, Object child) { listener.addChild(root, child); } + public void setTokenBoundaries(Object t, int tokenStartIndex, int tokenStopIndex) { + listener.setTokenBoundaries(t, tokenStartIndex, tokenStopIndex); + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugEventSocketProxy.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugEventSocketProxy.java new file mode 100644 index 0000000..6787594 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugEventSocketProxy.java @@ -0,0 +1,354 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.debug; + +import org.antlr.runtime.RecognitionException; +import org.antlr.runtime.Token; +import org.antlr.runtime.BaseRecognizer; +import org.antlr.runtime.tree.TreeAdaptor; + +import java.io.*; +import java.net.ServerSocket; +import java.net.Socket; + +/** A proxy debug event listener that forwards events over a socket to + * a debugger (or any other listener) using a simple text-based protocol; + * one event per line. ANTLRWorks listens on server socket with a + * RemoteDebugEventSocketListener instance. These two objects must therefore + * be kept in sync. New events must be handled on both sides of socket. + */ +public class DebugEventSocketProxy extends BlankDebugEventListener { + public static final int DEFAULT_DEBUGGER_PORT = 49100; // was 49153 + protected int port = DEFAULT_DEBUGGER_PORT; + protected ServerSocket serverSocket; + protected Socket socket; + protected String grammarFileName; + protected PrintWriter out; + protected BufferedReader in; + + /** Who am i debugging? */ + protected BaseRecognizer recognizer; + + /** Almost certainly the recognizer will have adaptor set, but + * we don't know how to cast it (Parser or TreeParser) to get + * the adaptor field. Must be set with a constructor. :( + */ + protected TreeAdaptor adaptor; + + public DebugEventSocketProxy(BaseRecognizer recognizer, TreeAdaptor adaptor) { + this(recognizer, DEFAULT_DEBUGGER_PORT, adaptor); + } + + public DebugEventSocketProxy(BaseRecognizer recognizer, int port, TreeAdaptor adaptor) { + this.grammarFileName = recognizer.getGrammarFileName(); + this.adaptor = adaptor; + this.port = port; + } + + public void handshake() throws IOException { + if ( serverSocket==null ) { + serverSocket = new ServerSocket(port); + socket = serverSocket.accept(); + socket.setTcpNoDelay(true); + OutputStream os = socket.getOutputStream(); + OutputStreamWriter osw = new OutputStreamWriter(os, "UTF8"); + out = new PrintWriter(new BufferedWriter(osw)); + InputStream is = socket.getInputStream(); + InputStreamReader isr = new InputStreamReader(is, "UTF8"); + in = new BufferedReader(isr); + out.println("ANTLR "+ DebugEventListener.PROTOCOL_VERSION); + out.println("grammar \""+ grammarFileName); + out.flush(); + ack(); + } + } + + public void commence() { + // don't bother sending event; listener will trigger upon connection + } + + public void terminate() { + transmit("terminate"); + out.close(); + try { + socket.close(); + } + catch (IOException ioe) { + ioe.printStackTrace(System.err); + } + } + + protected void ack() { + try { + in.readLine(); + } + catch (IOException ioe) { + ioe.printStackTrace(System.err); + } + } + + protected void transmit(String event) { + out.println(event); + out.flush(); + ack(); + } + + public void enterRule(String grammarFileName, String ruleName) { + transmit("enterRule\t"+grammarFileName+"\t"+ruleName); + } + + public void enterAlt(int alt) { + transmit("enterAlt\t"+alt); + } + + public void exitRule(String grammarFileName, String ruleName) { + transmit("exitRule\t"+grammarFileName+"\t"+ruleName); + } + + public void enterSubRule(int decisionNumber) { + transmit("enterSubRule\t"+decisionNumber); + } + + public void exitSubRule(int decisionNumber) { + transmit("exitSubRule\t"+decisionNumber); + } + + public void enterDecision(int decisionNumber) { + transmit("enterDecision\t"+decisionNumber); + } + + public void exitDecision(int decisionNumber) { + transmit("exitDecision\t"+decisionNumber); + } + + public void consumeToken(Token t) { + String buf = serializeToken(t); + transmit("consumeToken\t"+buf); + } + + public void consumeHiddenToken(Token t) { + String buf = serializeToken(t); + transmit("consumeHiddenToken\t"+buf); + } + + public void LT(int i, Token t) { + if(t != null) + transmit("LT\t"+i+"\t"+serializeToken(t)); + } + + public void mark(int i) { + transmit("mark\t"+i); + } + + public void rewind(int i) { + transmit("rewind\t"+i); + } + + public void rewind() { + transmit("rewind"); + } + + public void beginBacktrack(int level) { + transmit("beginBacktrack\t"+level); + } + + public void endBacktrack(int level, boolean successful) { + transmit("endBacktrack\t"+level+"\t"+(successful?TRUE:FALSE)); + } + + public void location(int line, int pos) { + transmit("location\t"+line+"\t"+pos); + } + + public void recognitionException(RecognitionException e) { + StringBuffer buf = new StringBuffer(50); + buf.append("exception\t"); + buf.append(e.getClass().getName()); + // dump only the data common to all exceptions for now + buf.append("\t"); + buf.append(e.index); + buf.append("\t"); + buf.append(e.line); + buf.append("\t"); + buf.append(e.charPositionInLine); + transmit(buf.toString()); + } + + public void beginResync() { + transmit("beginResync"); + } + + public void endResync() { + transmit("endResync"); + } + + public void semanticPredicate(boolean result, String predicate) { + StringBuffer buf = new StringBuffer(50); + buf.append("semanticPredicate\t"); + buf.append(result); + serializeText(buf, predicate); + transmit(buf.toString()); + } + + // A S T P a r s i n g E v e n t s + + public void consumeNode(Object t) { + StringBuffer buf = new StringBuffer(50); + buf.append("consumeNode"); + serializeNode(buf, t); + transmit(buf.toString()); + } + + public void LT(int i, Object t) { + int ID = adaptor.getUniqueID(t); + String text = adaptor.getText(t); + int type = adaptor.getType(t); + StringBuffer buf = new StringBuffer(50); + buf.append("LN\t"); // lookahead node; distinguish from LT in protocol + buf.append(i); + serializeNode(buf, t); + transmit(buf.toString()); + } + + protected void serializeNode(StringBuffer buf, Object t) { + int ID = adaptor.getUniqueID(t); + String text = adaptor.getText(t); + int type = adaptor.getType(t); + buf.append("\t"); + buf.append(ID); + buf.append("\t"); + buf.append(type); + Token token = adaptor.getToken(t); + int line = -1; + int pos = -1; + if ( token!=null ) { + line = token.getLine(); + pos = token.getCharPositionInLine(); + } + buf.append("\t"); + buf.append(line); + buf.append("\t"); + buf.append(pos); + int tokenIndex = adaptor.getTokenStartIndex(t); + buf.append("\t"); + buf.append(tokenIndex); + serializeText(buf, text); + } + + + // A S T E v e n t s + + public void nilNode(Object t) { + int ID = adaptor.getUniqueID(t); + transmit("nilNode\t"+ID); + } + + public void errorNode(Object t) { + int ID = adaptor.getUniqueID(t); + String text = t.toString(); + StringBuffer buf = new StringBuffer(50); + buf.append("errorNode\t"); + buf.append(ID); + buf.append("\t"); + buf.append(Token.INVALID_TOKEN_TYPE); + serializeText(buf, text); + transmit(buf.toString()); + } + + public void createNode(Object t) { + int ID = adaptor.getUniqueID(t); + String text = adaptor.getText(t); + int type = adaptor.getType(t); + StringBuffer buf = new StringBuffer(50); + buf.append("createNodeFromTokenElements\t"); + buf.append(ID); + buf.append("\t"); + buf.append(type); + serializeText(buf, text); + transmit(buf.toString()); + } + + public void createNode(Object node, Token token) { + int ID = adaptor.getUniqueID(node); + int tokenIndex = token.getTokenIndex(); + transmit("createNode\t"+ID+"\t"+tokenIndex); + } + + public void becomeRoot(Object newRoot, Object oldRoot) { + int newRootID = adaptor.getUniqueID(newRoot); + int oldRootID = adaptor.getUniqueID(oldRoot); + transmit("becomeRoot\t"+newRootID+"\t"+oldRootID); + } + + public void addChild(Object root, Object child) { + int rootID = adaptor.getUniqueID(root); + int childID = adaptor.getUniqueID(child); + transmit("addChild\t"+rootID+"\t"+childID); + } + + public void setTokenBoundaries(Object t, int tokenStartIndex, int tokenStopIndex) { + int ID = adaptor.getUniqueID(t); + transmit("setTokenBoundaries\t"+ID+"\t"+tokenStartIndex+"\t"+tokenStopIndex); + } + + + // support + + public void setTreeAdaptor(TreeAdaptor adaptor) { this.adaptor = adaptor; } + public TreeAdaptor getTreeAdaptor() { return adaptor; } + + protected String serializeToken(Token t) { + StringBuffer buf = new StringBuffer(50); + buf.append(t.getTokenIndex()); buf.append('\t'); + buf.append(t.getType()); buf.append('\t'); + buf.append(t.getChannel()); buf.append('\t'); + buf.append(t.getLine()); buf.append('\t'); + buf.append(t.getCharPositionInLine()); + serializeText(buf, t.getText()); + return buf.toString(); + } + + protected void serializeText(StringBuffer buf, String text) { + buf.append("\t\""); + if ( text==null ) { + text = ""; + } + // escape \n and \r all text for token appears to exist on one line + // this escape is slow but easy to understand + text = escapeNewlines(text); + buf.append(text); + } + + protected String escapeNewlines(String txt) { + txt = txt.replaceAll("%","%25"); // escape all escape char ;) + txt = txt.replaceAll("\n","%0A"); // escape \n + txt = txt.replaceAll("\r","%0D"); // escape \r + return txt; + } +} + diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugParser.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugParser.java new file mode 100644 index 0000000..5e827b9 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugParser.java @@ -0,0 +1,97 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.debug; + +import org.antlr.runtime.*; + +import java.io.IOException; + +public class DebugParser extends Parser { + /** Who to notify when events in the parser occur. */ + protected DebugEventListener dbg = null; + + /** Used to differentiate between fixed lookahead and cyclic DFA decisions + * while profiling. + */ + public boolean isCyclicDecision = false; + + /** Create a normal parser except wrap the token stream in a debug + * proxy that fires consume events. + */ + public DebugParser(TokenStream input, DebugEventListener dbg, RecognizerSharedState state) { + super(input instanceof DebugTokenStream?input:new DebugTokenStream(input,dbg), state); + setDebugListener(dbg); + } + + public DebugParser(TokenStream input, RecognizerSharedState state) { + super(input instanceof DebugTokenStream?input:new DebugTokenStream(input,null), state); + } + + public DebugParser(TokenStream input, DebugEventListener dbg) { + this(input instanceof DebugTokenStream?input:new DebugTokenStream(input,dbg), dbg, null); + } + + /** Provide a new debug event listener for this parser. Notify the + * input stream too that it should send events to this listener. + */ + public void setDebugListener(DebugEventListener dbg) { + if ( input instanceof DebugTokenStream ) { + ((DebugTokenStream)input).setDebugListener(dbg); + } + this.dbg = dbg; + } + + public DebugEventListener getDebugListener() { + return dbg; + } + + public void reportError(IOException e) { + System.err.println(e); + e.printStackTrace(System.err); + } + + public void beginResync() { + dbg.beginResync(); + } + + public void endResync() { + dbg.endResync(); + } + + public void beginBacktrack(int level) { + dbg.beginBacktrack(level); + } + + public void endBacktrack(int level, boolean successful) { + dbg.endBacktrack(level,successful); + } + + public void reportError(RecognitionException e) { + dbg.recognitionException(e); + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugTokenStream.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugTokenStream.java new file mode 100644 index 0000000..fbab814 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugTokenStream.java @@ -0,0 +1,150 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.debug; + +import org.antlr.runtime.*; + +public class DebugTokenStream implements TokenStream { + protected DebugEventListener dbg; + public TokenStream input; + protected boolean initialStreamState = true; + + /** Track the last mark() call result value for use in rewind(). */ + protected int lastMarker; + + public DebugTokenStream(TokenStream input, DebugEventListener dbg) { + this.input = input; + setDebugListener(dbg); + // force TokenStream to get at least first valid token + // so we know if there are any hidden tokens first in the stream + input.LT(1); + } + + public void setDebugListener(DebugEventListener dbg) { + this.dbg = dbg; + } + + public void consume() { + if ( initialStreamState ) { + consumeInitialHiddenTokens(); + } + int a = input.index(); + Token t = input.LT(1); + input.consume(); + int b = input.index(); + dbg.consumeToken(t); + if ( b>a+1 ) { + // then we consumed more than one token; must be off channel tokens + for (int i=a+1; i<b; i++) { + dbg.consumeHiddenToken(input.get(i)); + } + } + } + + /* consume all initial off-channel tokens */ + protected void consumeInitialHiddenTokens() { + int firstOnChannelTokenIndex = input.index(); + for (int i=0; i<firstOnChannelTokenIndex; i++) { + dbg.consumeHiddenToken(input.get(i)); + } + initialStreamState = false; + } + + public Token LT(int i) { + if ( initialStreamState ) { + consumeInitialHiddenTokens(); + } + dbg.LT(i, input.LT(i)); + return input.LT(i); + } + + public int LA(int i) { + if ( initialStreamState ) { + consumeInitialHiddenTokens(); + } + dbg.LT(i, input.LT(i)); + return input.LA(i); + } + + public Token get(int i) { + return input.get(i); + } + + public int mark() { + lastMarker = input.mark(); + dbg.mark(lastMarker); + return lastMarker; + } + + public int index() { + return input.index(); + } + + public void rewind(int marker) { + dbg.rewind(marker); + input.rewind(marker); + } + + public void rewind() { + dbg.rewind(); + input.rewind(lastMarker); + } + + public void release(int marker) { + } + + public void seek(int index) { + // TODO: implement seek in dbg interface + // db.seek(index); + input.seek(index); + } + + public int size() { + return input.size(); + } + + public TokenSource getTokenSource() { + return input.getTokenSource(); + } + + public String getSourceName() { + return getTokenSource().getSourceName(); + } + + public String toString() { + return input.toString(); + } + + public String toString(int start, int stop) { + return input.toString(start,stop); + } + + public String toString(Token start, Token stop) { + return input.toString(start,stop); + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugTreeAdaptor.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugTreeAdaptor.java new file mode 100644 index 0000000..fefd899 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugTreeAdaptor.java @@ -0,0 +1,250 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.debug; + +import org.antlr.runtime.Token; +import org.antlr.runtime.TokenStream; +import org.antlr.runtime.RecognitionException; +import org.antlr.runtime.tree.TreeAdaptor; + +/** A TreeAdaptor proxy that fires debugging events to a DebugEventListener + * delegate and uses the TreeAdaptor delegate to do the actual work. All + * AST events are triggered by this adaptor; no code gen changes are needed + * in generated rules. Debugging events are triggered *after* invoking + * tree adaptor routines. + * + * Trees created with actions in rewrite actions like "-> ^(ADD {foo} {bar})" + * cannot be tracked as they might not use the adaptor to create foo, bar. + * The debug listener has to deal with tree node IDs for which it did + * not see a createNode event. A single <unknown> node is sufficient even + * if it represents a whole tree. + */ +public class DebugTreeAdaptor implements TreeAdaptor { + protected DebugEventListener dbg; + protected TreeAdaptor adaptor; + + public DebugTreeAdaptor(DebugEventListener dbg, TreeAdaptor adaptor) { + this.dbg = dbg; + this.adaptor = adaptor; + } + + public Object create(Token payload) { + if ( payload.getTokenIndex() < 0 ) { + // could be token conjured up during error recovery + return create(payload.getType(), payload.getText()); + } + Object node = adaptor.create(payload); + dbg.createNode(node, payload); + return node; + } + + public Object errorNode(TokenStream input, Token start, Token stop, + RecognitionException e) + { + Object node = adaptor.errorNode(input, start, stop, e); + if ( node!=null ) { + dbg.errorNode(node); + } + return node; + } + + public Object dupTree(Object tree) { + Object t = adaptor.dupTree(tree); + // walk the tree and emit create and add child events + // to simulate what dupTree has done. dupTree does not call this debug + // adapter so I must simulate. + simulateTreeConstruction(t); + return t; + } + + /** ^(A B C): emit create A, create B, add child, ...*/ + protected void simulateTreeConstruction(Object t) { + dbg.createNode(t); + int n = adaptor.getChildCount(t); + for (int i=0; i<n; i++) { + Object child = adaptor.getChild(t, i); + simulateTreeConstruction(child); + dbg.addChild(t, child); + } + } + + public Object dupNode(Object treeNode) { + Object d = adaptor.dupNode(treeNode); + dbg.createNode(d); + return d; + } + + public Object nil() { + Object node = adaptor.nil(); + dbg.nilNode(node); + return node; + } + + public boolean isNil(Object tree) { + return adaptor.isNil(tree); + } + + public void addChild(Object t, Object child) { + if ( t==null || child==null ) { + return; + } + adaptor.addChild(t,child); + dbg.addChild(t, child); + } + + public Object becomeRoot(Object newRoot, Object oldRoot) { + Object n = adaptor.becomeRoot(newRoot, oldRoot); + dbg.becomeRoot(newRoot, oldRoot); + return n; + } + + public Object rulePostProcessing(Object root) { + return adaptor.rulePostProcessing(root); + } + + public void addChild(Object t, Token child) { + Object n = this.create(child); + this.addChild(t, n); + } + + public Object becomeRoot(Token newRoot, Object oldRoot) { + Object n = this.create(newRoot); + adaptor.becomeRoot(n, oldRoot); + dbg.becomeRoot(newRoot, oldRoot); + return n; + } + + public Object create(int tokenType, Token fromToken) { + Object node = adaptor.create(tokenType, fromToken); + dbg.createNode(node); + return node; + } + + public Object create(int tokenType, Token fromToken, String text) { + Object node = adaptor.create(tokenType, fromToken, text); + dbg.createNode(node); + return node; + } + + public Object create(int tokenType, String text) { + Object node = adaptor.create(tokenType, text); + dbg.createNode(node); + return node; + } + + public int getType(Object t) { + return adaptor.getType(t); + } + + public void setType(Object t, int type) { + adaptor.setType(t, type); + } + + public String getText(Object t) { + return adaptor.getText(t); + } + + public void setText(Object t, String text) { + adaptor.setText(t, text); + } + + public Token getToken(Object t) { + return adaptor.getToken(t); + } + + public void setTokenBoundaries(Object t, Token startToken, Token stopToken) { + adaptor.setTokenBoundaries(t, startToken, stopToken); + if ( t!=null && startToken!=null && stopToken!=null ) { + dbg.setTokenBoundaries( + t, startToken.getTokenIndex(), + stopToken.getTokenIndex()); + } + } + + public int getTokenStartIndex(Object t) { + return adaptor.getTokenStartIndex(t); + } + + public int getTokenStopIndex(Object t) { + return adaptor.getTokenStopIndex(t); + } + + public Object getChild(Object t, int i) { + return adaptor.getChild(t, i); + } + + public void setChild(Object t, int i, Object child) { + adaptor.setChild(t, i, child); + } + + public Object deleteChild(Object t, int i) { + return deleteChild(t, i); + } + + public int getChildCount(Object t) { + return adaptor.getChildCount(t); + } + + public int getUniqueID(Object node) { + return adaptor.getUniqueID(node); + } + + public Object getParent(Object t) { + return adaptor.getParent(t); + } + + public int getChildIndex(Object t) { + return adaptor.getChildIndex(t); + } + + public void setParent(Object t, Object parent) { + adaptor.setParent(t, parent); + } + + public void setChildIndex(Object t, int index) { + adaptor.setChildIndex(t, index); + } + + public void replaceChildren(Object parent, int startChildIndex, int stopChildIndex, Object t) { + adaptor.replaceChildren(parent, startChildIndex, stopChildIndex, t); + } + + // support + + public DebugEventListener getDebugListener() { + return dbg; + } + + public void setDebugListener(DebugEventListener dbg) { + this.dbg = dbg; + } + + public TreeAdaptor getTreeAdaptor() { + return adaptor; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugTreeNodeStream.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugTreeNodeStream.java new file mode 100644 index 0000000..0f8cb02 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugTreeNodeStream.java @@ -0,0 +1,153 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.debug; + +import org.antlr.runtime.tree.TreeAdaptor; +import org.antlr.runtime.tree.TreeNodeStream; +import org.antlr.runtime.TokenStream; + +/** Debug any tree node stream. The constructor accepts the stream + * and a debug listener. As node stream calls come in, debug events + * are triggered. + */ +public class DebugTreeNodeStream implements TreeNodeStream { + protected DebugEventListener dbg; + protected TreeAdaptor adaptor; + protected TreeNodeStream input; + protected boolean initialStreamState = true; + + /** Track the last mark() call result value for use in rewind(). */ + protected int lastMarker; + + public DebugTreeNodeStream(TreeNodeStream input, + DebugEventListener dbg) + { + this.input = input; + this.adaptor = input.getTreeAdaptor(); + this.input.setUniqueNavigationNodes(true); + setDebugListener(dbg); + } + + public void setDebugListener(DebugEventListener dbg) { + this.dbg = dbg; + } + + public TreeAdaptor getTreeAdaptor() { + return adaptor; + } + + public void consume() { + Object node = input.LT(1); + input.consume(); + dbg.consumeNode(node); + } + + public Object get(int i) { + return input.get(i); + } + + public Object LT(int i) { + Object node = input.LT(i); + int ID = adaptor.getUniqueID(node); + String text = adaptor.getText(node); + int type = adaptor.getType(node); + dbg.LT(i, node); + return node; + } + + public int LA(int i) { + Object node = input.LT(i); + int ID = adaptor.getUniqueID(node); + String text = adaptor.getText(node); + int type = adaptor.getType(node); + dbg.LT(i, node); + return type; + } + + public int mark() { + lastMarker = input.mark(); + dbg.mark(lastMarker); + return lastMarker; + } + + public int index() { + return input.index(); + } + + public void rewind(int marker) { + dbg.rewind(marker); + input.rewind(marker); + } + + public void rewind() { + dbg.rewind(); + input.rewind(lastMarker); + } + + public void release(int marker) { + } + + public void seek(int index) { + // TODO: implement seek in dbg interface + // db.seek(index); + input.seek(index); + } + + public int size() { + return input.size(); + } + + public Object getTreeSource() { + return input; + } + + public String getSourceName() { + return getTokenStream().getSourceName(); + } + + public TokenStream getTokenStream() { + return input.getTokenStream(); + } + + /** It is normally this object that instructs the node stream to + * create unique nav nodes, but to satisfy interface, we have to + * define it. It might be better to ignore the parameter but + * there might be a use for it later, so I'll leave. + */ + public void setUniqueNavigationNodes(boolean uniqueNavigationNodes) { + input.setUniqueNavigationNodes(uniqueNavigationNodes); + } + + public void replaceChildren(Object parent, int startChildIndex, int stopChildIndex, Object t) { + input.replaceChildren(parent, startChildIndex, stopChildIndex, t); + } + + public String toString(Object start, Object stop) { + return input.toString(start,stop); + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugTreeParser.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugTreeParser.java new file mode 100644 index 0000000..4091909 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/DebugTreeParser.java @@ -0,0 +1,109 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.debug; + +import org.antlr.runtime.*; +import org.antlr.runtime.tree.TreeNodeStream; +import org.antlr.runtime.tree.TreeParser; + +import java.io.IOException; + +public class DebugTreeParser extends TreeParser { + /** Who to notify when events in the parser occur. */ + protected DebugEventListener dbg = null; + + /** Used to differentiate between fixed lookahead and cyclic DFA decisions + * while profiling. + */ + public boolean isCyclicDecision = false; + + /** Create a normal parser except wrap the token stream in a debug + * proxy that fires consume events. + */ + public DebugTreeParser(TreeNodeStream input, DebugEventListener dbg, RecognizerSharedState state) { + super(input instanceof DebugTreeNodeStream?input:new DebugTreeNodeStream(input,dbg), state); + setDebugListener(dbg); + } + + public DebugTreeParser(TreeNodeStream input, RecognizerSharedState state) { + super(input instanceof DebugTreeNodeStream?input:new DebugTreeNodeStream(input,null), state); + } + + public DebugTreeParser(TreeNodeStream input, DebugEventListener dbg) { + this(input instanceof DebugTreeNodeStream?input:new DebugTreeNodeStream(input,dbg), dbg, null); + } + + /** Provide a new debug event listener for this parser. Notify the + * input stream too that it should send events to this listener. + */ + public void setDebugListener(DebugEventListener dbg) { + if ( input instanceof DebugTreeNodeStream ) { + ((DebugTreeNodeStream)input).setDebugListener(dbg); + } + this.dbg = dbg; + } + + public DebugEventListener getDebugListener() { + return dbg; + } + + public void reportError(IOException e) { + System.err.println(e); + e.printStackTrace(System.err); + } + + public void reportError(RecognitionException e) { + dbg.recognitionException(e); + } + + protected Object getMissingSymbol(IntStream input, + RecognitionException e, + int expectedTokenType, + BitSet follow) + { + Object o = super.getMissingSymbol(input, e, expectedTokenType, follow); + dbg.consumeNode(o); + return o; + } + + public void beginResync() { + dbg.beginResync(); + } + + public void endResync() { + dbg.endResync(); + } + + public void beginBacktrack(int level) { + dbg.beginBacktrack(level); + } + + public void endBacktrack(int level, boolean successful) { + dbg.endBacktrack(level,successful); + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/ParseTreeBuilder.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/ParseTreeBuilder.java new file mode 100644 index 0000000..6306ed4 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/ParseTreeBuilder.java @@ -0,0 +1,109 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.debug; + +import org.antlr.runtime.RecognitionException; +import org.antlr.runtime.Token; +import org.antlr.runtime.tree.ParseTree; + +import java.util.Stack; +import java.util.ArrayList; +import java.util.List; + +/** This parser listener tracks rule entry/exit and token matches + * to build a simple parse tree using ParseTree nodes. + */ +public class ParseTreeBuilder extends BlankDebugEventListener { + public static final String EPSILON_PAYLOAD = "<epsilon>"; + + Stack callStack = new Stack(); + List hiddenTokens = new ArrayList(); + int backtracking = 0; + + public ParseTreeBuilder(String grammarName) { + ParseTree root = create("<grammar "+grammarName+">"); + callStack.push(root); + } + + public ParseTree getTree() { + return (ParseTree)callStack.elementAt(0); + } + + /** What kind of node to create. You might want to override + * so I factored out creation here. + */ + public ParseTree create(Object payload) { + return new ParseTree(payload); + } + + public ParseTree epsilonNode() { + return create(EPSILON_PAYLOAD); + } + + /** Backtracking or cyclic DFA, don't want to add nodes to tree */ + public void enterDecision(int d) { backtracking++; } + public void exitDecision(int i) { backtracking--; } + + public void enterRule(String filename, String ruleName) { + if ( backtracking>0 ) return; + ParseTree parentRuleNode = (ParseTree)callStack.peek(); + ParseTree ruleNode = create(ruleName); + parentRuleNode.addChild(ruleNode); + callStack.push(ruleNode); + } + + public void exitRule(String filename, String ruleName) { + if ( backtracking>0 ) return; + ParseTree ruleNode = (ParseTree)callStack.peek(); + if ( ruleNode.getChildCount()==0 ) { + ruleNode.addChild(epsilonNode()); + } + callStack.pop(); + } + + public void consumeToken(Token token) { + if ( backtracking>0 ) return; + ParseTree ruleNode = (ParseTree)callStack.peek(); + ParseTree elementNode = create(token); + elementNode.hiddenTokens = this.hiddenTokens; + this.hiddenTokens = new ArrayList(); + ruleNode.addChild(elementNode); + } + + public void consumeHiddenToken(Token token) { + if ( backtracking>0 ) return; + hiddenTokens.add(token); + } + + public void recognitionException(RecognitionException e) { + if ( backtracking>0 ) return; + ParseTree ruleNode = (ParseTree)callStack.peek(); + ParseTree errorNode = create(e); + ruleNode.addChild(errorNode); + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/Profiler.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/Profiler.java new file mode 100644 index 0000000..12b878b --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/Profiler.java @@ -0,0 +1,506 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.debug; + +import org.antlr.runtime.*; +import org.antlr.runtime.misc.Stats; + +import java.util.*; +import java.io.IOException; + +/** Using the debug event interface, track what is happening in the parser + * and record statistics about the runtime. + */ +public class Profiler extends BlankDebugEventListener { + /** Because I may change the stats, I need to track that for later + * computations to be consistent. + */ + public static final String Version = "2"; + public static final String RUNTIME_STATS_FILENAME = "runtime.stats"; + public static final int NUM_RUNTIME_STATS = 29; + + public DebugParser parser = null; + + // working variables + + protected int ruleLevel = 0; + protected int decisionLevel = 0; + protected int maxLookaheadInCurrentDecision = 0; + protected CommonToken lastTokenConsumed=null; + + protected List lookaheadStack = new ArrayList(); + + // stats variables + + public int numRuleInvocations = 0; + public int numGuessingRuleInvocations = 0; + public int maxRuleInvocationDepth = 0; + public int numFixedDecisions = 0; + public int numCyclicDecisions = 0; + public int numBacktrackDecisions = 0; + public int[] decisionMaxFixedLookaheads = new int[200]; // TODO: make List + public int[] decisionMaxCyclicLookaheads = new int[200]; + public List decisionMaxSynPredLookaheads = new ArrayList(); + public int numHiddenTokens = 0; + public int numCharsMatched = 0; + public int numHiddenCharsMatched = 0; + public int numSemanticPredicates = 0; + public int numSyntacticPredicates = 0; + protected int numberReportedErrors = 0; + public int numMemoizationCacheMisses = 0; + public int numMemoizationCacheHits = 0; + public int numMemoizationCacheEntries = 0; + + public Profiler() { + } + + public Profiler(DebugParser parser) { + this.parser = parser; + } + + public void enterRule(String grammarFileName, String ruleName) { + //System.out.println("enterRule "+ruleName); + ruleLevel++; + numRuleInvocations++; + if ( ruleLevel >maxRuleInvocationDepth ) { + maxRuleInvocationDepth = ruleLevel; + } + + } + + /** Track memoization; this is not part of standard debug interface + * but is triggered by profiling. Code gen inserts an override + * for this method in the recognizer, which triggers this method. + */ + public void examineRuleMemoization(IntStream input, + int ruleIndex, + String ruleName) + { + //System.out.println("examine memo "+ruleName); + int stopIndex = parser.getRuleMemoization(ruleIndex, input.index()); + if ( stopIndex==BaseRecognizer.MEMO_RULE_UNKNOWN ) { + //System.out.println("rule "+ruleIndex+" missed @ "+input.index()); + numMemoizationCacheMisses++; + numGuessingRuleInvocations++; // we'll have to enter + } + else { + // regardless of rule success/failure, if in cache, we have a cache hit + //System.out.println("rule "+ruleIndex+" hit @ "+input.index()); + numMemoizationCacheHits++; + } + } + + public void memoize(IntStream input, + int ruleIndex, + int ruleStartIndex, + String ruleName) + { + // count how many entries go into table + //System.out.println("memoize "+ruleName); + numMemoizationCacheEntries++; + } + + public void exitRule(String grammarFileName, String ruleName) { + ruleLevel--; + } + + public void enterDecision(int decisionNumber) { + decisionLevel++; + int startingLookaheadIndex = parser.getTokenStream().index(); + //System.out.println("enterDecision "+decisionNumber+" @ index "+startingLookaheadIndex); + lookaheadStack.add(new Integer(startingLookaheadIndex)); + } + + public void exitDecision(int decisionNumber) { + //System.out.println("exitDecision "+decisionNumber); + // track how many of acyclic, cyclic here as we don't know what kind + // yet in enterDecision event. + if ( parser.isCyclicDecision ) { + numCyclicDecisions++; + } + else { + numFixedDecisions++; + } + lookaheadStack.remove(lookaheadStack.size()-1); // pop lookahead depth counter + decisionLevel--; + if ( parser.isCyclicDecision ) { + if ( numCyclicDecisions>=decisionMaxCyclicLookaheads.length ) { + int[] bigger = new int[decisionMaxCyclicLookaheads.length*2]; + System.arraycopy(decisionMaxCyclicLookaheads,0,bigger,0,decisionMaxCyclicLookaheads.length); + decisionMaxCyclicLookaheads = bigger; + } + decisionMaxCyclicLookaheads[numCyclicDecisions-1] = maxLookaheadInCurrentDecision; + } + else { + if ( numFixedDecisions>=decisionMaxFixedLookaheads.length ) { + int[] bigger = new int[decisionMaxFixedLookaheads.length*2]; + System.arraycopy(decisionMaxFixedLookaheads,0,bigger,0,decisionMaxFixedLookaheads.length); + decisionMaxFixedLookaheads = bigger; + } + decisionMaxFixedLookaheads[numFixedDecisions-1] = maxLookaheadInCurrentDecision; + } + parser.isCyclicDecision = false; // can't nest so just reset to false + maxLookaheadInCurrentDecision = 0; + } + + public void consumeToken(Token token) { + //System.out.println("consume token "+token); + lastTokenConsumed = (CommonToken)token; + } + + /** The parser is in a decision if the decision depth > 0. This + * works for backtracking also, which can have nested decisions. + */ + public boolean inDecision() { + return decisionLevel>0; + } + + public void consumeHiddenToken(Token token) { + //System.out.println("consume hidden token "+token); + lastTokenConsumed = (CommonToken)token; + } + + /** Track refs to lookahead if in a fixed/nonfixed decision. + */ + public void LT(int i, Token t) { + if ( inDecision() ) { + // get starting index off stack + int stackTop = lookaheadStack.size()-1; + Integer startingIndex = (Integer)lookaheadStack.get(stackTop); + // compute lookahead depth + int thisRefIndex = parser.getTokenStream().index(); + int numHidden = + getNumberOfHiddenTokens(startingIndex.intValue(), thisRefIndex); + int depth = i + thisRefIndex - startingIndex.intValue() - numHidden; + /* + System.out.println("LT("+i+") @ index "+thisRefIndex+" is depth "+depth+ + " max is "+maxLookaheadInCurrentDecision); + */ + if ( depth>maxLookaheadInCurrentDecision ) { + maxLookaheadInCurrentDecision = depth; + } + } + } + + /** Track backtracking decisions. You'll see a fixed or cyclic decision + * and then a backtrack. + * + * enter rule + * ... + * enter decision + * LA and possibly consumes (for cyclic DFAs) + * begin backtrack level + * mark m + * rewind m + * end backtrack level, success + * exit decision + * ... + * exit rule + */ + public void beginBacktrack(int level) { + //System.out.println("enter backtrack "+level); + numBacktrackDecisions++; + } + + /** Successful or not, track how much lookahead synpreds use */ + public void endBacktrack(int level, boolean successful) { + //System.out.println("exit backtrack "+level+": "+successful); + decisionMaxSynPredLookaheads.add( + new Integer(maxLookaheadInCurrentDecision) + ); + } + + /* + public void mark(int marker) { + int i = parser.getTokenStream().index(); + System.out.println("mark @ index "+i); + synPredLookaheadStack.add(new Integer(i)); + } + + public void rewind(int marker) { + // pop starting index off stack + int stackTop = synPredLookaheadStack.size()-1; + Integer startingIndex = (Integer)synPredLookaheadStack.get(stackTop); + synPredLookaheadStack.remove(synPredLookaheadStack.size()-1); + // compute lookahead depth + int stopIndex = parser.getTokenStream().index(); + System.out.println("rewind @ index "+stopIndex); + int depth = stopIndex - startingIndex.intValue(); + System.out.println("depth of lookahead for synpred: "+depth); + decisionMaxSynPredLookaheads.add( + new Integer(depth) + ); + } + */ + + public void recognitionException(RecognitionException e) { + numberReportedErrors++; + } + + public void semanticPredicate(boolean result, String predicate) { + if ( inDecision() ) { + numSemanticPredicates++; + } + } + + public void terminate() { + String stats = toNotifyString(); + try { + Stats.writeReport(RUNTIME_STATS_FILENAME,stats); + } + catch (IOException ioe) { + System.err.println(ioe); + ioe.printStackTrace(System.err); + } + System.out.println(toString(stats)); + } + + public void setParser(DebugParser parser) { + this.parser = parser; + } + + // R E P O R T I N G + + public String toNotifyString() { + TokenStream input = parser.getTokenStream(); + for (int i=0; i<input.size()&&lastTokenConsumed!=null&&i<=lastTokenConsumed.getTokenIndex(); i++) { + Token t = input.get(i); + if ( t.getChannel()!=Token.DEFAULT_CHANNEL ) { + numHiddenTokens++; + numHiddenCharsMatched += t.getText().length(); + } + } + numCharsMatched = lastTokenConsumed.getStopIndex() + 1; + decisionMaxFixedLookaheads = trim(decisionMaxFixedLookaheads, numFixedDecisions); + decisionMaxCyclicLookaheads = trim(decisionMaxCyclicLookaheads, numCyclicDecisions); + StringBuffer buf = new StringBuffer(); + buf.append(Version); + buf.append('\t'); + buf.append(parser.getClass().getName()); + buf.append('\t'); + buf.append(numRuleInvocations); + buf.append('\t'); + buf.append(maxRuleInvocationDepth); + buf.append('\t'); + buf.append(numFixedDecisions); + buf.append('\t'); + buf.append(Stats.min(decisionMaxFixedLookaheads)); + buf.append('\t'); + buf.append(Stats.max(decisionMaxFixedLookaheads)); + buf.append('\t'); + buf.append(Stats.avg(decisionMaxFixedLookaheads)); + buf.append('\t'); + buf.append(Stats.stddev(decisionMaxFixedLookaheads)); + buf.append('\t'); + buf.append(numCyclicDecisions); + buf.append('\t'); + buf.append(Stats.min(decisionMaxCyclicLookaheads)); + buf.append('\t'); + buf.append(Stats.max(decisionMaxCyclicLookaheads)); + buf.append('\t'); + buf.append(Stats.avg(decisionMaxCyclicLookaheads)); + buf.append('\t'); + buf.append(Stats.stddev(decisionMaxCyclicLookaheads)); + buf.append('\t'); + buf.append(numBacktrackDecisions); + buf.append('\t'); + buf.append(Stats.min(toArray(decisionMaxSynPredLookaheads))); + buf.append('\t'); + buf.append(Stats.max(toArray(decisionMaxSynPredLookaheads))); + buf.append('\t'); + buf.append(Stats.avg(toArray(decisionMaxSynPredLookaheads))); + buf.append('\t'); + buf.append(Stats.stddev(toArray(decisionMaxSynPredLookaheads))); + buf.append('\t'); + buf.append(numSemanticPredicates); + buf.append('\t'); + buf.append(parser.getTokenStream().size()); + buf.append('\t'); + buf.append(numHiddenTokens); + buf.append('\t'); + buf.append(numCharsMatched); + buf.append('\t'); + buf.append(numHiddenCharsMatched); + buf.append('\t'); + buf.append(numberReportedErrors); + buf.append('\t'); + buf.append(numMemoizationCacheHits); + buf.append('\t'); + buf.append(numMemoizationCacheMisses); + buf.append('\t'); + buf.append(numGuessingRuleInvocations); + buf.append('\t'); + buf.append(numMemoizationCacheEntries); + return buf.toString(); + } + + public String toString() { + return toString(toNotifyString()); + } + + protected static String[] decodeReportData(String data) { + String[] fields = new String[NUM_RUNTIME_STATS]; + StringTokenizer st = new StringTokenizer(data, "\t"); + int i = 0; + while ( st.hasMoreTokens() ) { + fields[i] = st.nextToken(); + i++; + } + if ( i!=NUM_RUNTIME_STATS ) { + return null; + } + return fields; + } + + public static String toString(String notifyDataLine) { + String[] fields = decodeReportData(notifyDataLine); + if ( fields==null ) { + return null; + } + StringBuffer buf = new StringBuffer(); + buf.append("ANTLR Runtime Report; Profile Version "); + buf.append(fields[0]); + buf.append('\n'); + buf.append("parser name "); + buf.append(fields[1]); + buf.append('\n'); + buf.append("Number of rule invocations "); + buf.append(fields[2]); + buf.append('\n'); + buf.append("Number of rule invocations in \"guessing\" mode "); + buf.append(fields[27]); + buf.append('\n'); + buf.append("max rule invocation nesting depth "); + buf.append(fields[3]); + buf.append('\n'); + buf.append("number of fixed lookahead decisions "); + buf.append(fields[4]); + buf.append('\n'); + buf.append("min lookahead used in a fixed lookahead decision "); + buf.append(fields[5]); + buf.append('\n'); + buf.append("max lookahead used in a fixed lookahead decision "); + buf.append(fields[6]); + buf.append('\n'); + buf.append("average lookahead depth used in fixed lookahead decisions "); + buf.append(fields[7]); + buf.append('\n'); + buf.append("standard deviation of depth used in fixed lookahead decisions "); + buf.append(fields[8]); + buf.append('\n'); + buf.append("number of arbitrary lookahead decisions "); + buf.append(fields[9]); + buf.append('\n'); + buf.append("min lookahead used in an arbitrary lookahead decision "); + buf.append(fields[10]); + buf.append('\n'); + buf.append("max lookahead used in an arbitrary lookahead decision "); + buf.append(fields[11]); + buf.append('\n'); + buf.append("average lookahead depth used in arbitrary lookahead decisions "); + buf.append(fields[12]); + buf.append('\n'); + buf.append("standard deviation of depth used in arbitrary lookahead decisions "); + buf.append(fields[13]); + buf.append('\n'); + buf.append("number of evaluated syntactic predicates "); + buf.append(fields[14]); + buf.append('\n'); + buf.append("min lookahead used in a syntactic predicate "); + buf.append(fields[15]); + buf.append('\n'); + buf.append("max lookahead used in a syntactic predicate "); + buf.append(fields[16]); + buf.append('\n'); + buf.append("average lookahead depth used in syntactic predicates "); + buf.append(fields[17]); + buf.append('\n'); + buf.append("standard deviation of depth used in syntactic predicates "); + buf.append(fields[18]); + buf.append('\n'); + buf.append("rule memoization cache size "); + buf.append(fields[28]); + buf.append('\n'); + buf.append("number of rule memoization cache hits "); + buf.append(fields[25]); + buf.append('\n'); + buf.append("number of rule memoization cache misses "); + buf.append(fields[26]); + buf.append('\n'); + buf.append("number of evaluated semantic predicates "); + buf.append(fields[19]); + buf.append('\n'); + buf.append("number of tokens "); + buf.append(fields[20]); + buf.append('\n'); + buf.append("number of hidden tokens "); + buf.append(fields[21]); + buf.append('\n'); + buf.append("number of char "); + buf.append(fields[22]); + buf.append('\n'); + buf.append("number of hidden char "); + buf.append(fields[23]); + buf.append('\n'); + buf.append("number of syntax errors "); + buf.append(fields[24]); + buf.append('\n'); + return buf.toString(); + } + + protected int[] trim(int[] X, int n) { + if ( n<X.length ) { + int[] trimmed = new int[n]; + System.arraycopy(X,0,trimmed,0,n); + X = trimmed; + } + return X; + } + + protected int[] toArray(List a) { + int[] x = new int[a.size()]; + for (int i = 0; i < a.size(); i++) { + Integer I = (Integer) a.get(i); + x[i] = I.intValue(); + } + return x; + } + + /** Get num hidden tokens between i..j inclusive */ + public int getNumberOfHiddenTokens(int i, int j) { + int n = 0; + TokenStream input = parser.getTokenStream(); + for (int ti = i; ti<input.size() && ti <= j; ti++) { + Token t = input.get(ti); + if ( t.getChannel()!=Token.DEFAULT_CHANNEL ) { + n++; + } + } + return n; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/RemoteDebugEventSocketListener.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/RemoteDebugEventSocketListener.java new file mode 100644 index 0000000..86f3276 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/RemoteDebugEventSocketListener.java @@ -0,0 +1,527 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.debug; + +import org.antlr.runtime.RecognitionException; +import org.antlr.runtime.Token; +import org.antlr.runtime.CharStream; +import org.antlr.runtime.tree.BaseTree; +import org.antlr.runtime.tree.Tree; + +import java.io.*; +import java.net.ConnectException; +import java.net.Socket; +import java.util.StringTokenizer; + +public class RemoteDebugEventSocketListener implements Runnable { + static final int MAX_EVENT_ELEMENTS = 8; + DebugEventListener listener; + String machine; + int port; + Socket channel = null; + PrintWriter out; + BufferedReader in; + String event; + /** Version of ANTLR (dictates events) */ + public String version; + public String grammarFileName; + /** Track the last token index we saw during a consume. If same, then + * set a flag that we have a problem. + */ + int previousTokenIndex = -1; + boolean tokenIndexesInvalid = false; + + public static class ProxyToken implements Token { + int index; + int type; + int channel; + int line; + int charPos; + String text; + public ProxyToken(int index) { this.index = index; } + public ProxyToken(int index, int type, int channel, + int line, int charPos, String text) + { + this.index = index; + this.type = type; + this.channel = channel; + this.line = line; + this.charPos = charPos; + this.text = text; + } + public String getText() { + return text; + } + public void setText(String text) { + this.text = text; + } + public int getType() { + return type; + } + public void setType(int ttype) { + this.type = ttype; + } + public int getLine() { + return line; + } + public void setLine(int line) { + this.line = line; + } + public int getCharPositionInLine() { + return charPos; + } + public void setCharPositionInLine(int pos) { + this.charPos = pos; + } + public int getChannel() { + return channel; + } + public void setChannel(int channel) { + this.channel = channel; + } + public int getTokenIndex() { + return index; + } + public void setTokenIndex(int index) { + this.index = index; + } + public CharStream getInputStream() { + return null; + } + public void setInputStream(CharStream input) { + } + public String toString() { + String channelStr = ""; + if ( channel!=Token.DEFAULT_CHANNEL ) { + channelStr=",channel="+channel; + } + return "["+getText()+"/<"+type+">"+channelStr+","+line+":"+getCharPositionInLine()+",@"+index+"]"; + } + } + + public static class ProxyTree extends BaseTree { + public int ID; + public int type; + public int line = 0; + public int charPos = -1; + public int tokenIndex = -1; + public String text; + + public ProxyTree(int ID, int type, int line, int charPos, int tokenIndex, String text) { + this.ID = ID; + this.type = type; + this.line = line; + this.charPos = charPos; + this.tokenIndex = tokenIndex; + this.text = text; + } + + public ProxyTree(int ID) { this.ID = ID; } + + public int getTokenStartIndex() { return tokenIndex; } + public void setTokenStartIndex(int index) { } + public int getTokenStopIndex() { return 0; } + public void setTokenStopIndex(int index) { } + public Tree dupNode() { return null; } + public int getType() { return type; } + public String getText() { return text; } + public String toString() { + return "fix this"; + } + } + + public RemoteDebugEventSocketListener(DebugEventListener listener, + String machine, + int port) throws IOException + { + this.listener = listener; + this.machine = machine; + this.port = port; + + if( !openConnection() ) { + throw new ConnectException(); + } + } + + protected void eventHandler() { + try { + handshake(); + event = in.readLine(); + while ( event!=null ) { + dispatch(event); + ack(); + event = in.readLine(); + } + } + catch (Exception e) { + System.err.println(e); + e.printStackTrace(System.err); + } + finally { + closeConnection(); + } + } + + protected boolean openConnection() { + boolean success = false; + try { + channel = new Socket(machine, port); + channel.setTcpNoDelay(true); + OutputStream os = channel.getOutputStream(); + OutputStreamWriter osw = new OutputStreamWriter(os, "UTF8"); + out = new PrintWriter(new BufferedWriter(osw)); + InputStream is = channel.getInputStream(); + InputStreamReader isr = new InputStreamReader(is, "UTF8"); + in = new BufferedReader(isr); + success = true; + } catch(Exception e) { + System.err.println(e); + } + return success; + } + + protected void closeConnection() { + try { + in.close(); in = null; + out.close(); out = null; + channel.close(); channel=null; + } + catch (Exception e) { + System.err.println(e); + e.printStackTrace(System.err); + } + finally { + if ( in!=null ) { + try {in.close();} catch (IOException ioe) { + System.err.println(ioe); + } + } + if ( out!=null ) { + out.close(); + } + if ( channel!=null ) { + try {channel.close();} catch (IOException ioe) { + System.err.println(ioe); + } + } + } + + } + + protected void handshake() throws IOException { + String antlrLine = in.readLine(); + String[] antlrElements = getEventElements(antlrLine); + version = antlrElements[1]; + String grammarLine = in.readLine(); + String[] grammarElements = getEventElements(grammarLine); + grammarFileName = grammarElements[1]; + ack(); + listener.commence(); // inform listener after handshake + } + + protected void ack() { + out.println("ack"); + out.flush(); + } + + protected void dispatch(String line) { + //System.out.println("event: "+line); + String[] elements = getEventElements(line); + if ( elements==null || elements[0]==null ) { + System.err.println("unknown debug event: "+line); + return; + } + if ( elements[0].equals("enterRule") ) { + listener.enterRule(elements[1], elements[2]); + } + else if ( elements[0].equals("exitRule") ) { + listener.exitRule(elements[1], elements[2]); + } + else if ( elements[0].equals("enterAlt") ) { + listener.enterAlt(Integer.parseInt(elements[1])); + } + else if ( elements[0].equals("enterSubRule") ) { + listener.enterSubRule(Integer.parseInt(elements[1])); + } + else if ( elements[0].equals("exitSubRule") ) { + listener.exitSubRule(Integer.parseInt(elements[1])); + } + else if ( elements[0].equals("enterDecision") ) { + listener.enterDecision(Integer.parseInt(elements[1])); + } + else if ( elements[0].equals("exitDecision") ) { + listener.exitDecision(Integer.parseInt(elements[1])); + } + else if ( elements[0].equals("location") ) { + listener.location(Integer.parseInt(elements[1]), + Integer.parseInt(elements[2])); + } + else if ( elements[0].equals("consumeToken") ) { + ProxyToken t = deserializeToken(elements, 1); + if ( t.getTokenIndex() == previousTokenIndex ) { + tokenIndexesInvalid = true; + } + previousTokenIndex = t.getTokenIndex(); + listener.consumeToken(t); + } + else if ( elements[0].equals("consumeHiddenToken") ) { + ProxyToken t = deserializeToken(elements, 1); + if ( t.getTokenIndex() == previousTokenIndex ) { + tokenIndexesInvalid = true; + } + previousTokenIndex = t.getTokenIndex(); + listener.consumeHiddenToken(t); + } + else if ( elements[0].equals("LT") ) { + Token t = deserializeToken(elements, 2); + listener.LT(Integer.parseInt(elements[1]), t); + } + else if ( elements[0].equals("mark") ) { + listener.mark(Integer.parseInt(elements[1])); + } + else if ( elements[0].equals("rewind") ) { + if ( elements[1]!=null ) { + listener.rewind(Integer.parseInt(elements[1])); + } + else { + listener.rewind(); + } + } + else if ( elements[0].equals("beginBacktrack") ) { + listener.beginBacktrack(Integer.parseInt(elements[1])); + } + else if ( elements[0].equals("endBacktrack") ) { + int level = Integer.parseInt(elements[1]); + int successI = Integer.parseInt(elements[2]); + listener.endBacktrack(level, successI==DebugEventListener.TRUE); + } + else if ( elements[0].equals("exception") ) { + String excName = elements[1]; + String indexS = elements[2]; + String lineS = elements[3]; + String posS = elements[4]; + Class excClass = null; + try { + excClass = Class.forName(excName); + RecognitionException e = + (RecognitionException)excClass.newInstance(); + e.index = Integer.parseInt(indexS); + e.line = Integer.parseInt(lineS); + e.charPositionInLine = Integer.parseInt(posS); + listener.recognitionException(e); + } + catch (ClassNotFoundException cnfe) { + System.err.println("can't find class "+cnfe); + cnfe.printStackTrace(System.err); + } + catch (InstantiationException ie) { + System.err.println("can't instantiate class "+ie); + ie.printStackTrace(System.err); + } + catch (IllegalAccessException iae) { + System.err.println("can't access class "+iae); + iae.printStackTrace(System.err); + } + } + else if ( elements[0].equals("beginResync") ) { + listener.beginResync(); + } + else if ( elements[0].equals("endResync") ) { + listener.endResync(); + } + else if ( elements[0].equals("terminate") ) { + listener.terminate(); + } + else if ( elements[0].equals("semanticPredicate") ) { + Boolean result = Boolean.valueOf(elements[1]); + String predicateText = elements[2]; + predicateText = unEscapeNewlines(predicateText); + listener.semanticPredicate(result.booleanValue(), + predicateText); + } + else if ( elements[0].equals("consumeNode") ) { + ProxyTree node = deserializeNode(elements, 1); + listener.consumeNode(node); + } + else if ( elements[0].equals("LN") ) { + int i = Integer.parseInt(elements[1]); + ProxyTree node = deserializeNode(elements, 2); + listener.LT(i, node); + } + else if ( elements[0].equals("createNodeFromTokenElements") ) { + int ID = Integer.parseInt(elements[1]); + int type = Integer.parseInt(elements[2]); + String text = elements[3]; + text = unEscapeNewlines(text); + ProxyTree node = new ProxyTree(ID, type, -1, -1, -1, text); + listener.createNode(node); + } + else if ( elements[0].equals("createNode") ) { + int ID = Integer.parseInt(elements[1]); + int tokenIndex = Integer.parseInt(elements[2]); + // create dummy node/token filled with ID, tokenIndex + ProxyTree node = new ProxyTree(ID); + ProxyToken token = new ProxyToken(tokenIndex); + listener.createNode(node, token); + } + else if ( elements[0].equals("nilNode") ) { + int ID = Integer.parseInt(elements[1]); + ProxyTree node = new ProxyTree(ID); + listener.nilNode(node); + } + else if ( elements[0].equals("errorNode") ) { + // TODO: do we need a special tree here? + int ID = Integer.parseInt(elements[1]); + int type = Integer.parseInt(elements[2]); + String text = elements[3]; + text = unEscapeNewlines(text); + ProxyTree node = new ProxyTree(ID, type, -1, -1, -1, text); + listener.errorNode(node); + } + else if ( elements[0].equals("becomeRoot") ) { + int newRootID = Integer.parseInt(elements[1]); + int oldRootID = Integer.parseInt(elements[2]); + ProxyTree newRoot = new ProxyTree(newRootID); + ProxyTree oldRoot = new ProxyTree(oldRootID); + listener.becomeRoot(newRoot, oldRoot); + } + else if ( elements[0].equals("addChild") ) { + int rootID = Integer.parseInt(elements[1]); + int childID = Integer.parseInt(elements[2]); + ProxyTree root = new ProxyTree(rootID); + ProxyTree child = new ProxyTree(childID); + listener.addChild(root, child); + } + else if ( elements[0].equals("setTokenBoundaries") ) { + int ID = Integer.parseInt(elements[1]); + ProxyTree node = new ProxyTree(ID); + listener.setTokenBoundaries( + node, + Integer.parseInt(elements[2]), + Integer.parseInt(elements[3])); + } + else { + System.err.println("unknown debug event: "+line); + } + } + + protected ProxyTree deserializeNode(String[] elements, int offset) { + int ID = Integer.parseInt(elements[offset+0]); + int type = Integer.parseInt(elements[offset+1]); + int tokenLine = Integer.parseInt(elements[offset+2]); + int charPositionInLine = Integer.parseInt(elements[offset+3]); + int tokenIndex = Integer.parseInt(elements[offset+4]); + String text = elements[offset+5]; + text = unEscapeNewlines(text); + return new ProxyTree(ID, type, tokenLine, charPositionInLine, tokenIndex, text); + } + + protected ProxyToken deserializeToken(String[] elements, + int offset) + { + String indexS = elements[offset+0]; + String typeS = elements[offset+1]; + String channelS = elements[offset+2]; + String lineS = elements[offset+3]; + String posS = elements[offset+4]; + String text = elements[offset+5]; + text = unEscapeNewlines(text); + int index = Integer.parseInt(indexS); + ProxyToken t = + new ProxyToken(index, + Integer.parseInt(typeS), + Integer.parseInt(channelS), + Integer.parseInt(lineS), + Integer.parseInt(posS), + text); + return t; + } + + /** Create a thread to listen to the remote running recognizer */ + public void start() { + Thread t = new Thread(this); + t.start(); + } + + public void run() { + eventHandler(); + } + + // M i s c + + public String[] getEventElements(String event) { + if ( event==null ) { + return null; + } + String[] elements = new String[MAX_EVENT_ELEMENTS]; + String str = null; // a string element if present (must be last) + try { + int firstQuoteIndex = event.indexOf('"'); + if ( firstQuoteIndex>=0 ) { + // treat specially; has a string argument like "a comment\n + // Note that the string is terminated by \n not end quote. + // Easier to parse that way. + String eventWithoutString = event.substring(0,firstQuoteIndex); + str = event.substring(firstQuoteIndex+1,event.length()); + event = eventWithoutString; + } + StringTokenizer st = new StringTokenizer(event, "\t", false); + int i = 0; + while ( st.hasMoreTokens() ) { + if ( i>=MAX_EVENT_ELEMENTS ) { + // ErrorManager.internalError("event has more than "+MAX_EVENT_ELEMENTS+" args: "+event); + return elements; + } + elements[i] = st.nextToken(); + i++; + } + if ( str!=null ) { + elements[i] = str; + } + } + catch (Exception e) { + e.printStackTrace(System.err); + } + return elements; + } + + protected String unEscapeNewlines(String txt) { + // this unescape is slow but easy to understand + txt = txt.replaceAll("%0A","\n"); // unescape \n + txt = txt.replaceAll("%0D","\r"); // unescape \r + txt = txt.replaceAll("%25","%"); // undo escaped escape chars + return txt; + } + + public boolean tokenIndexesAreInvalid() { + return false; + //return tokenIndexesInvalid; + } + +} + diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/TraceDebugEventListener.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/TraceDebugEventListener.java new file mode 100644 index 0000000..0c8d7d2 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/TraceDebugEventListener.java @@ -0,0 +1,96 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.debug; + +import org.antlr.runtime.Token; +import org.antlr.runtime.tree.TreeAdaptor; + +/** Print out (most of) the events... Useful for debugging, testing... */ +public class TraceDebugEventListener extends BlankDebugEventListener { + TreeAdaptor adaptor; + + public TraceDebugEventListener(TreeAdaptor adaptor) { + this.adaptor = adaptor; + } + + public void enterRule(String ruleName) { System.out.println("enterRule "+ruleName); } + public void exitRule(String ruleName) { System.out.println("exitRule "+ruleName); } + public void enterSubRule(int decisionNumber) { System.out.println("enterSubRule"); } + public void exitSubRule(int decisionNumber) { System.out.println("exitSubRule"); } + public void location(int line, int pos) {System.out.println("location "+line+":"+pos);} + + // Tree parsing stuff + + public void consumeNode(Object t) { + int ID = adaptor.getUniqueID(t); + String text = adaptor.getText(t); + int type = adaptor.getType(t); + System.out.println("consumeNode "+ID+" "+text+" "+type); + } + + public void LT(int i, Object t) { + int ID = adaptor.getUniqueID(t); + String text = adaptor.getText(t); + int type = adaptor.getType(t); + System.out.println("LT "+i+" "+ID+" "+text+" "+type); + } + + + // AST stuff + public void nilNode(Object t) {System.out.println("nilNode "+adaptor.getUniqueID(t));} + + public void createNode(Object t) { + int ID = adaptor.getUniqueID(t); + String text = adaptor.getText(t); + int type = adaptor.getType(t); + System.out.println("create "+ID+": "+text+", "+type); + } + + public void createNode(Object node, Token token) { + int ID = adaptor.getUniqueID(node); + String text = adaptor.getText(node); + int tokenIndex = token.getTokenIndex(); + System.out.println("create "+ID+": "+tokenIndex); + } + + public void becomeRoot(Object newRoot, Object oldRoot) { + System.out.println("becomeRoot "+adaptor.getUniqueID(newRoot)+", "+ + adaptor.getUniqueID(oldRoot)); + } + + public void addChild(Object root, Object child) { + System.out.println("addChild "+adaptor.getUniqueID(root)+", "+ + adaptor.getUniqueID(child)); + } + + public void setTokenBoundaries(Object t, int tokenStartIndex, int tokenStopIndex) { + System.out.println("setTokenBoundaries "+adaptor.getUniqueID(t)+", "+ + tokenStartIndex+", "+tokenStopIndex); + } +} + diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/Tracer.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/Tracer.java new file mode 100644 index 0000000..2630cb5 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/debug/Tracer.java @@ -0,0 +1,65 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.debug; + +import org.antlr.runtime.IntStream; +import org.antlr.runtime.TokenStream; + +/** The default tracer mimics the traceParser behavior of ANTLR 2.x. + * This listens for debugging events from the parser and implies + * that you cannot debug and trace at the same time. + */ +public class Tracer extends BlankDebugEventListener { + public IntStream input; + protected int level = 0; + + public Tracer(IntStream input) { + this.input = input; + } + + public void enterRule(String ruleName) { + for (int i=1; i<=level; i++) {System.out.print(" ");} + System.out.println("> "+ruleName+" lookahead(1)="+getInputSymbol(1)); + level++; + } + + public void exitRule(String ruleName) { + level--; + for (int i=1; i<=level; i++) {System.out.print(" ");} + System.out.println("< "+ruleName+" lookahead(1)="+getInputSymbol(1)); + } + + public Object getInputSymbol(int k) { + if ( input instanceof TokenStream ) { + return ((TokenStream)input).LT(k); + } + return new Character((char)input.LA(k)); + } +} + + diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/misc/FastQueue.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/misc/FastQueue.java new file mode 100644 index 0000000..25f34d6 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/misc/FastQueue.java @@ -0,0 +1,93 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2008 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.misc; + +import java.util.List; +import java.util.ArrayList; +import java.util.NoSuchElementException; + +/** A queue that can dequeue and get(i) in O(1) and grow arbitrarily large. + * A linked list is fast at dequeue but slow at get(i). An array is + * the reverse. This is O(1) for both operations. + * + * List grows until you dequeue last element at end of buffer. Then + * it resets to start filling at 0 again. If adds/removes are balanced, the + * buffer will not grow too large. + * + * No iterator stuff as that's not how we'll use it. + */ +public class FastQueue<T> { + /** dynamically-sized buffer of elements */ + protected List<T> data = new ArrayList<T>(); + /** index of next element to fill */ + protected int p = 0; + + public void reset() { p = 0; data.clear(); } + + /** Get and remove first element in queue */ + public T remove() { + T o = get(0); + p++; + // have we hit end of buffer? + if ( p == data.size() ) { + // if so, it's an opportunity to start filling at index 0 again + clear(); // size goes to 0, but retains memory + } + return o; + } + + public void add(T o) { data.add(o); } + + public int size() { return data.size() - p; } + + public T head() { return get(0); } + + /** Return element i elements ahead of current element. i==0 gets + * current element. This is not an absolute index into the data list + * since p defines the start of the real list. + */ + public T get(int i) { + if ( p+i >= data.size() ) { + throw new NoSuchElementException("queue index "+(p+i)+" > size "+data.size()); + } + return data.get(p+i); + } + + public void clear() { p = 0; data.clear(); } + + /** Return string of current buffer contents; non-destructive */ + public String toString() { + StringBuffer buf = new StringBuffer(); + int n = size(); + for (int i=0; i<n; i++) { + buf.append(get(i)); + if ( (i+1)<n ) buf.append(" "); + } + return buf.toString(); + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/misc/IntArray.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/misc/IntArray.java new file mode 100644 index 0000000..a075770 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/misc/IntArray.java @@ -0,0 +1,87 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.misc; + +/** A dynamic array that uses int not Integer objects. In principle this + * is more efficient in time, but certainly in space. + * + * This is simple enough that you can access the data array directly, + * but make sure that you append elements only with add() so that you + * get dynamic sizing. Make sure to call ensureCapacity() when you are + * manually adding new elements. + * + * Doesn't impl List because it doesn't return objects and I mean this + * really as just an array not a List per se. Manipulate the elements + * at will. This has stack methods too. + * + * When runtime can be 1.5, I'll make this generic. + */ +public class IntArray { + public static final int INITIAL_SIZE = 10; + public int[] data; + protected int p = -1; + + public void add(int v) { + ensureCapacity(p+1); + data[++p] = v; + } + + public void push(int v) { + add(v); + } + + public int pop() { + int v = data[p]; + p--; + return v; + } + + /** This only tracks elements added via push/add. */ + public int size() { + return p; + } + + public void clear() { + p = -1; + } + + public void ensureCapacity(int index) { + if ( data==null ) { + data = new int[INITIAL_SIZE]; + } + else if ( (index+1)>=data.length ) { + int newSize = data.length*2; + if ( index>newSize ) { + newSize = index+1; + } + int[] newData = new int[newSize]; + System.arraycopy(data, 0, newData, 0, data.length); + data = newData; + } + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/misc/LookaheadStream.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/misc/LookaheadStream.java new file mode 100644 index 0000000..097d7a9 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/misc/LookaheadStream.java @@ -0,0 +1,163 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2008 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.misc; + +import java.util.List; +import java.util.ArrayList; + +/** A lookahead queue that knows how to mark/release locations + * in the buffer for backtracking purposes. Any markers force the FastQueue + * superclass to keep all tokens until no more markers; then can reset + * to avoid growing a huge buffer. + */ +public abstract class LookaheadStream<T> extends FastQueue<T> { + public static final int UNINITIALIZED_EOF_ELEMENT_INDEX = Integer.MAX_VALUE; + + /** Set to buffer index of eof when nextElement returns eof */ + protected int eofElementIndex = UNINITIALIZED_EOF_ELEMENT_INDEX; + + /** Returned by nextElement upon end of stream; we add to buffer also */ + public T eof = null; + + /** Track the last mark() call result value for use in rewind(). */ + protected int lastMarker; + + /** tracks how deep mark() calls are nested */ + protected int markDepth = 0; + + public LookaheadStream(T eof) { + this.eof = eof; + } + + public void reset() { + eofElementIndex = UNINITIALIZED_EOF_ELEMENT_INDEX; + super.reset(); + } + + /** Implement nextElement to supply a stream of elements to this + * lookahead buffer. Return eof upon end of the stream we're pulling from. + */ + public abstract T nextElement(); + + /** Get and remove first element in queue; override FastQueue.remove() */ + public T remove() { + T o = get(0); + p++; + // have we hit end of buffer and not backtracking? + if ( p == data.size() && markDepth==0 ) { + // if so, it's an opportunity to start filling at index 0 again + clear(); // size goes to 0, but retains memory + } + return o; + } + + /** Make sure we have at least one element to remove, even if EOF */ + public void consume() { sync(1); remove(); } + + /** Make sure we have 'need' elements from current position p. Last valid + * p index is data.size()-1. p+need-1 is the data index 'need' elements + * ahead. If we need 1 element, (p+1-1)==p must be < data.size(). + */ + public void sync(int need) { + int n = (p+need-1) - data.size() + 1; // how many more elements we need? + if ( n > 0 ) fill(n); // out of elements? + } + + /** add n elements to buffer */ + public void fill(int n) { + for (int i=1; i<=n; i++) { + T o = nextElement(); + if ( o==eof ) { + data.add(eof); + eofElementIndex = data.size()-1; + } + else data.add(o); + } + } + + //public boolean hasNext() { return eofElementIndex!=UNINITIALIZED_EOF_ELEMENT_INDEX; } + + /** Size of entire stream is unknown; we only know buffer size from FastQueue */ + public int size() { throw new UnsupportedOperationException("streams are of unknown size"); } + + public Object LT(int k) { + if ( k==0 ) { + return null; + } + if ( k<0 ) { + return LB(-k); + } + //System.out.print("LT(p="+p+","+k+")="); + if ( (p+k-1) >= eofElementIndex ) { // move to super.LT + return eof; + } + sync(k); + return get(k-1); + } + + /** Look backwards k nodes */ + protected Object LB(int k) { + if ( k==0 ) { + return null; + } + if ( (p-k)<0 ) { + return null; + } + return get(-k); + } + + public Object getCurrentSymbol() { return LT(1); } + + public int index() { return p; } + + public int mark() { + markDepth++; + lastMarker = index(); + return lastMarker; + } + + public void release(int marker) { + // no resources to release + } + + public void rewind(int marker) { + markDepth--; + seek(marker); // assume marker is top + // release(marker); // waste of call; it does nothing in this class + } + + public void rewind() { + seek(lastMarker); // rewind but do not release marker + } + + /** Seek to a 0-indexed position within data buffer. Can't handle + * case where you seek beyond end of existing buffer. Normally used + * to seek backwards in the buffer. Does not force loading of nodes. + */ + public void seek(int index) { p = index; } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/misc/Stats.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/misc/Stats.java new file mode 100644 index 0000000..1d73772 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/misc/Stats.java @@ -0,0 +1,144 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.misc; + +import java.io.*; + +/** Stats routines needed by profiler etc... + + // note that these routines return 0.0 if no values exist in the X[] + // which is not "correct", but it is useful so I don't generate NaN + // in my output + + */ +public class Stats { + public static final String ANTLRWORKS_DIR = "antlrworks"; + + /** Compute the sample (unbiased estimator) standard deviation following: + * + * Computing Deviations: Standard Accuracy + * Tony F. Chan and John Gregg Lewis + * Stanford University + * Communications of ACM September 1979 of Volume 22 the ACM Number 9 + * + * The "two-pass" method from the paper; supposed to have better + * numerical properties than the textbook summation/sqrt. To me + * this looks like the textbook method, but I ain't no numerical + * methods guy. + */ + public static double stddev(int[] X) { + int m = X.length; + if ( m<=1 ) { + return 0; + } + double xbar = avg(X); + double s2 = 0.0; + for (int i=0; i<m; i++){ + s2 += (X[i] - xbar)*(X[i] - xbar); + } + s2 = s2/(m-1); + return Math.sqrt(s2); + } + + /** Compute the sample mean */ + public static double avg(int[] X) { + double xbar = 0.0; + int m = X.length; + if ( m==0 ) { + return 0; + } + for (int i=0; i<m; i++){ + xbar += X[i]; + } + if ( xbar>=0.0 ) { + return xbar / m; + } + return 0.0; + } + + public static int min(int[] X) { + int min = Integer.MAX_VALUE; + int m = X.length; + if ( m==0 ) { + return 0; + } + for (int i=0; i<m; i++){ + if ( X[i] < min ) { + min = X[i]; + } + } + return min; + } + + public static int max(int[] X) { + int max = Integer.MIN_VALUE; + int m = X.length; + if ( m==0 ) { + return 0; + } + for (int i=0; i<m; i++){ + if ( X[i] > max ) { + max = X[i]; + } + } + return max; + } + + public static int sum(int[] X) { + int s = 0; + int m = X.length; + if ( m==0 ) { + return 0; + } + for (int i=0; i<m; i++){ + s += X[i]; + } + return s; + } + + public static void writeReport(String filename, String data) throws IOException { + String absoluteFilename = getAbsoluteFileName(filename); + File f = new File(absoluteFilename); + File parent = f.getParentFile(); + parent.mkdirs(); // ensure parent dir exists + // write file + FileOutputStream fos = new FileOutputStream(f, true); // append + BufferedOutputStream bos = new BufferedOutputStream(fos); + PrintStream ps = new PrintStream(bos); + ps.println(data); + ps.close(); + bos.close(); + fos.close(); + } + + public static String getAbsoluteFileName(String filename) { + return System.getProperty("user.home")+File.separator+ + ANTLRWORKS_DIR +File.separator+ + filename; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/BaseTree.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/BaseTree.java new file mode 100644 index 0000000..991768d --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/BaseTree.java @@ -0,0 +1,349 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import java.util.ArrayList; +import java.util.List; + +/** A generic tree implementation with no payload. You must subclass to + * actually have any user data. ANTLR v3 uses a list of children approach + * instead of the child-sibling approach in v2. A flat tree (a list) is + * an empty node whose children represent the list. An empty, but + * non-null node is called "nil". + */ +public abstract class BaseTree implements Tree { + protected List children; + + public BaseTree() { + } + + /** Create a new node from an existing node does nothing for BaseTree + * as there are no fields other than the children list, which cannot + * be copied as the children are not considered part of this node. + */ + public BaseTree(Tree node) { + } + + public Tree getChild(int i) { + if ( children==null || i>=children.size() ) { + return null; + } + return (Tree)children.get(i); + } + + /** Get the children internal List; note that if you directly mess with + * the list, do so at your own risk. + */ + public List getChildren() { + return children; + } + + public Tree getFirstChildWithType(int type) { + for (int i = 0; children!=null && i < children.size(); i++) { + Tree t = (Tree) children.get(i); + if ( t.getType()==type ) { + return t; + } + } + return null; + } + + public int getChildCount() { + if ( children==null ) { + return 0; + } + return children.size(); + } + + /** Add t as child of this node. + * + * Warning: if t has no children, but child does + * and child isNil then this routine moves children to t via + * t.children = child.children; i.e., without copying the array. + */ + public void addChild(Tree t) { + //System.out.println("add child "+t.toStringTree()+" "+this.toStringTree()); + //System.out.println("existing children: "+children); + if ( t==null ) { + return; // do nothing upon addChild(null) + } + BaseTree childTree = (BaseTree)t; + if ( childTree.isNil() ) { // t is an empty node possibly with children + if ( this.children!=null && this.children == childTree.children ) { + throw new RuntimeException("attempt to add child list to itself"); + } + // just add all of childTree's children to this + if ( childTree.children!=null ) { + if ( this.children!=null ) { // must copy, this has children already + int n = childTree.children.size(); + for (int i = 0; i < n; i++) { + Tree c = (Tree)childTree.children.get(i); + this.children.add(c); + // handle double-link stuff for each child of nil root + c.setParent(this); + c.setChildIndex(children.size()-1); + } + } + else { + // no children for this but t has children; just set pointer + // call general freshener routine + this.children = childTree.children; + this.freshenParentAndChildIndexes(); + } + } + } + else { // child is not nil (don't care about children) + if ( children==null ) { + children = createChildrenList(); // create children list on demand + } + children.add(t); + childTree.setParent(this); + childTree.setChildIndex(children.size()-1); + } + // System.out.println("now children are: "+children); + } + + /** Add all elements of kids list as children of this node */ + public void addChildren(List kids) { + for (int i = 0; i < kids.size(); i++) { + Tree t = (Tree) kids.get(i); + addChild(t); + } + } + + public void setChild(int i, Tree t) { + if ( t==null ) { + return; + } + if ( t.isNil() ) { + throw new IllegalArgumentException("Can't set single child to a list"); + } + if ( children==null ) { + children = createChildrenList(); + } + children.set(i, t); + t.setParent(this); + t.setChildIndex(i); + } + + public Object deleteChild(int i) { + if ( children==null ) { + return null; + } + Tree killed = (Tree)children.remove(i); + // walk rest and decrement their child indexes + this.freshenParentAndChildIndexes(i); + return killed; + } + + /** Delete children from start to stop and replace with t even if t is + * a list (nil-root tree). num of children can increase or decrease. + * For huge child lists, inserting children can force walking rest of + * children to set their childindex; could be slow. + */ + public void replaceChildren(int startChildIndex, int stopChildIndex, Object t) { + /* + System.out.println("replaceChildren "+startChildIndex+", "+stopChildIndex+ + " with "+((BaseTree)t).toStringTree()); + System.out.println("in="+toStringTree()); + */ + if ( children==null ) { + throw new IllegalArgumentException("indexes invalid; no children in list"); + } + int replacingHowMany = stopChildIndex - startChildIndex + 1; + int replacingWithHowMany; + BaseTree newTree = (BaseTree)t; + List newChildren = null; + // normalize to a list of children to add: newChildren + if ( newTree.isNil() ) { + newChildren = newTree.children; + } + else { + newChildren = new ArrayList(1); + newChildren.add(newTree); + } + replacingWithHowMany = newChildren.size(); + int numNewChildren = newChildren.size(); + int delta = replacingHowMany - replacingWithHowMany; + // if same number of nodes, do direct replace + if ( delta == 0 ) { + int j = 0; // index into new children + for (int i=startChildIndex; i<=stopChildIndex; i++) { + BaseTree child = (BaseTree)newChildren.get(j); + children.set(i, child); + child.setParent(this); + child.setChildIndex(i); + j++; + } + } + else if ( delta > 0 ) { // fewer new nodes than there were + // set children and then delete extra + for (int j=0; j<numNewChildren; j++) { + children.set(startChildIndex+j, newChildren.get(j)); + } + int indexToDelete = startChildIndex+numNewChildren; + for (int c=indexToDelete; c<=stopChildIndex; c++) { + // delete same index, shifting everybody down each time + children.remove(indexToDelete); + } + freshenParentAndChildIndexes(startChildIndex); + } + else { // more new nodes than were there before + // fill in as many children as we can (replacingHowMany) w/o moving data + for (int j=0; j<replacingHowMany; j++) { + children.set(startChildIndex+j, newChildren.get(j)); + } + int numToInsert = replacingWithHowMany-replacingHowMany; + for (int j=replacingHowMany; j<replacingWithHowMany; j++) { + children.add(startChildIndex+j, newChildren.get(j)); + } + freshenParentAndChildIndexes(startChildIndex); + } + //System.out.println("out="+toStringTree()); + } + + /** Override in a subclass to change the impl of children list */ + protected List createChildrenList() { + return new ArrayList(); + } + + public boolean isNil() { + return false; + } + + /** Set the parent and child index values for all child of t */ + public void freshenParentAndChildIndexes() { + freshenParentAndChildIndexes(0); + } + + public void freshenParentAndChildIndexes(int offset) { + int n = getChildCount(); + for (int c = offset; c < n; c++) { + Tree child = (Tree)getChild(c); + child.setChildIndex(c); + child.setParent(this); + } + } + + public void sanityCheckParentAndChildIndexes() { + sanityCheckParentAndChildIndexes(null, -1); + } + + public void sanityCheckParentAndChildIndexes(Tree parent, int i) { + if ( parent!=this.getParent() ) { + throw new IllegalStateException("parents don't match; expected "+parent+" found "+this.getParent()); + } + if ( i!=this.getChildIndex() ) { + throw new IllegalStateException("child indexes don't match; expected "+i+" found "+this.getChildIndex()); + } + int n = this.getChildCount(); + for (int c = 0; c < n; c++) { + CommonTree child = (CommonTree)this.getChild(c); + child.sanityCheckParentAndChildIndexes(this, c); + } + } + + /** BaseTree doesn't track child indexes. */ + public int getChildIndex() { + return 0; + } + public void setChildIndex(int index) { + } + + /** BaseTree doesn't track parent pointers. */ + public Tree getParent() { + return null; + } + + public void setParent(Tree t) { + } + + /** Walk upwards looking for ancestor with this token type. */ + public boolean hasAncestor(int ttype) { return getAncestor(ttype)!=null; } + + /** Walk upwards and get first ancestor with this token type. */ + public Tree getAncestor(int ttype) { + Tree t = this; + t = t.getParent(); + while ( t!=null ) { + if ( t.getType()==ttype ) return t; + t = t.getParent(); + } + return null; + } + + /** Return a list of all ancestors of this node. The first node of + * list is the root and the last is the parent of this node. + */ + public List getAncestors() { + if ( getParent()==null ) return null; + List ancestors = new ArrayList(); + Tree t = this; + t = t.getParent(); + while ( t!=null ) { + ancestors.add(0, t); // insert at start + t = t.getParent(); + } + return ancestors; + } + + /** Print out a whole tree not just a node */ + public String toStringTree() { + if ( children==null || children.size()==0 ) { + return this.toString(); + } + StringBuffer buf = new StringBuffer(); + if ( !isNil() ) { + buf.append("("); + buf.append(this.toString()); + buf.append(' '); + } + for (int i = 0; children!=null && i < children.size(); i++) { + Tree t = (Tree)children.get(i); + if ( i>0 ) { + buf.append(' '); + } + buf.append(t.toStringTree()); + } + if ( !isNil() ) { + buf.append(")"); + } + return buf.toString(); + } + + public int getLine() { + return 0; + } + + public int getCharPositionInLine() { + return 0; + } + + /** Override to say how a node (not a tree) should look as text */ + public abstract String toString(); +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/BaseTreeAdaptor.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/BaseTreeAdaptor.java new file mode 100644 index 0000000..6b1a853 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/BaseTreeAdaptor.java @@ -0,0 +1,278 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.runtime.Token; +import org.antlr.runtime.TokenStream; +import org.antlr.runtime.RecognitionException; + +import java.util.HashMap; +import java.util.Map; + +/** A TreeAdaptor that works with any Tree implementation. */ +public abstract class BaseTreeAdaptor implements TreeAdaptor { + /** System.identityHashCode() is not always unique; we have to + * track ourselves. That's ok, it's only for debugging, though it's + * expensive: we have to create a hashtable with all tree nodes in it. + */ + protected Map treeToUniqueIDMap; + protected int uniqueNodeID = 1; + + public Object nil() { + return create(null); + } + + /** create tree node that holds the start and stop tokens associated + * with an error. + * + * If you specify your own kind of tree nodes, you will likely have to + * override this method. CommonTree returns Token.INVALID_TOKEN_TYPE + * if no token payload but you might have to set token type for diff + * node type. + * + * You don't have to subclass CommonErrorNode; you will likely need to + * subclass your own tree node class to avoid class cast exception. + */ + public Object errorNode(TokenStream input, Token start, Token stop, + RecognitionException e) + { + CommonErrorNode t = new CommonErrorNode(input, start, stop, e); + //System.out.println("returning error node '"+t+"' @index="+input.index()); + return t; + } + + public boolean isNil(Object tree) { + return ((Tree)tree).isNil(); + } + + public Object dupTree(Object tree) { + return dupTree(tree, null); + } + + /** This is generic in the sense that it will work with any kind of + * tree (not just Tree interface). It invokes the adaptor routines + * not the tree node routines to do the construction. + */ + public Object dupTree(Object t, Object parent) { + if ( t==null ) { + return null; + } + Object newTree = dupNode(t); + // ensure new subtree root has parent/child index set + setChildIndex(newTree, getChildIndex(t)); // same index in new tree + setParent(newTree, parent); + int n = getChildCount(t); + for (int i = 0; i < n; i++) { + Object child = getChild(t, i); + Object newSubTree = dupTree(child, t); + addChild(newTree, newSubTree); + } + return newTree; + } + + /** Add a child to the tree t. If child is a flat tree (a list), make all + * in list children of t. Warning: if t has no children, but child does + * and child isNil then you can decide it is ok to move children to t via + * t.children = child.children; i.e., without copying the array. Just + * make sure that this is consistent with have the user will build + * ASTs. + */ + public void addChild(Object t, Object child) { + if ( t!=null && child!=null ) { + ((Tree)t).addChild((Tree)child); + } + } + + /** If oldRoot is a nil root, just copy or move the children to newRoot. + * If not a nil root, make oldRoot a child of newRoot. + * + * old=^(nil a b c), new=r yields ^(r a b c) + * old=^(a b c), new=r yields ^(r ^(a b c)) + * + * If newRoot is a nil-rooted single child tree, use the single + * child as the new root node. + * + * old=^(nil a b c), new=^(nil r) yields ^(r a b c) + * old=^(a b c), new=^(nil r) yields ^(r ^(a b c)) + * + * If oldRoot was null, it's ok, just return newRoot (even if isNil). + * + * old=null, new=r yields r + * old=null, new=^(nil r) yields ^(nil r) + * + * Return newRoot. Throw an exception if newRoot is not a + * simple node or nil root with a single child node--it must be a root + * node. If newRoot is ^(nil x) return x as newRoot. + * + * Be advised that it's ok for newRoot to point at oldRoot's + * children; i.e., you don't have to copy the list. We are + * constructing these nodes so we should have this control for + * efficiency. + */ + public Object becomeRoot(Object newRoot, Object oldRoot) { + //System.out.println("becomeroot new "+newRoot.toString()+" old "+oldRoot); + Tree newRootTree = (Tree)newRoot; + Tree oldRootTree = (Tree)oldRoot; + if ( oldRoot==null ) { + return newRoot; + } + // handle ^(nil real-node) + if ( newRootTree.isNil() ) { + int nc = newRootTree.getChildCount(); + if ( nc==1 ) newRootTree = (Tree)newRootTree.getChild(0); + else if ( nc >1 ) { + // TODO: make tree run time exceptions hierarchy + throw new RuntimeException("more than one node as root (TODO: make exception hierarchy)"); + } + } + // add oldRoot to newRoot; addChild takes care of case where oldRoot + // is a flat list (i.e., nil-rooted tree). All children of oldRoot + // are added to newRoot. + newRootTree.addChild(oldRootTree); + return newRootTree; + } + + /** Transform ^(nil x) to x and nil to null */ + public Object rulePostProcessing(Object root) { + //System.out.println("rulePostProcessing: "+((Tree)root).toStringTree()); + Tree r = (Tree)root; + if ( r!=null && r.isNil() ) { + if ( r.getChildCount()==0 ) { + r = null; + } + else if ( r.getChildCount()==1 ) { + r = (Tree)r.getChild(0); + // whoever invokes rule will set parent and child index + r.setParent(null); + r.setChildIndex(-1); + } + } + return r; + } + + public Object becomeRoot(Token newRoot, Object oldRoot) { + return becomeRoot(create(newRoot), oldRoot); + } + + public Object create(int tokenType, Token fromToken) { + fromToken = createToken(fromToken); + //((ClassicToken)fromToken).setType(tokenType); + fromToken.setType(tokenType); + Tree t = (Tree)create(fromToken); + return t; + } + + public Object create(int tokenType, Token fromToken, String text) { + fromToken = createToken(fromToken); + fromToken.setType(tokenType); + fromToken.setText(text); + Tree t = (Tree)create(fromToken); + return t; + } + + public Object create(int tokenType, String text) { + Token fromToken = createToken(tokenType, text); + Tree t = (Tree)create(fromToken); + return t; + } + + public int getType(Object t) { + return ((Tree)t).getType(); + } + + public void setType(Object t, int type) { + throw new NoSuchMethodError("don't know enough about Tree node"); + } + + public String getText(Object t) { + return ((Tree)t).getText(); + } + + public void setText(Object t, String text) { + throw new NoSuchMethodError("don't know enough about Tree node"); + } + + public Object getChild(Object t, int i) { + return ((Tree)t).getChild(i); + } + + public void setChild(Object t, int i, Object child) { + ((Tree)t).setChild(i, (Tree)child); + } + + public Object deleteChild(Object t, int i) { + return ((Tree)t).deleteChild(i); + } + + public int getChildCount(Object t) { + return ((Tree)t).getChildCount(); + } + + public int getUniqueID(Object node) { + if ( treeToUniqueIDMap==null ) { + treeToUniqueIDMap = new HashMap(); + } + Integer prevID = (Integer)treeToUniqueIDMap.get(node); + if ( prevID!=null ) { + return prevID.intValue(); + } + int ID = uniqueNodeID; + treeToUniqueIDMap.put(node, new Integer(ID)); + uniqueNodeID++; + return ID; + // GC makes these nonunique: + // return System.identityHashCode(node); + } + + /** Tell me how to create a token for use with imaginary token nodes. + * For example, there is probably no input symbol associated with imaginary + * token DECL, but you need to create it as a payload or whatever for + * the DECL node as in ^(DECL type ID). + * + * If you care what the token payload objects' type is, you should + * override this method and any other createToken variant. + */ + public abstract Token createToken(int tokenType, String text); + + /** Tell me how to create a token for use with imaginary token nodes. + * For example, there is probably no input symbol associated with imaginary + * token DECL, but you need to create it as a payload or whatever for + * the DECL node as in ^(DECL type ID). + * + * This is a variant of createToken where the new token is derived from + * an actual real input token. Typically this is for converting '{' + * tokens to BLOCK etc... You'll see + * + * r : lc='{' ID+ '}' -> ^(BLOCK[$lc] ID+) ; + * + * If you care what the token payload objects' type is, you should + * override this method and any other createToken variant. + */ + public abstract Token createToken(Token fromToken); +} + diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/BufferedTreeNodeStream.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/BufferedTreeNodeStream.java new file mode 100644 index 0000000..8a1bacb --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/BufferedTreeNodeStream.java @@ -0,0 +1,478 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2008 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.runtime.Token; +import org.antlr.runtime.TokenStream; +import org.antlr.runtime.misc.IntArray; +import java.util.*; + +/** A buffered stream of tree nodes. Nodes can be from a tree of ANY kind. + * + * This node stream sucks all nodes out of the tree specified in + * the constructor during construction and makes pointers into + * the tree using an array of Object pointers. The stream necessarily + * includes pointers to DOWN and UP and EOF nodes. + * + * This stream knows how to mark/release for backtracking. + * + * This stream is most suitable for tree interpreters that need to + * jump around a lot or for tree parsers requiring speed (at cost of memory). + * There is some duplicated functionality here with UnBufferedTreeNodeStream + * but just in bookkeeping, not tree walking etc... + * + * TARGET DEVELOPERS: + * + * This is the old CommonTreeNodeStream that buffered up entire node stream. + * No need to implement really as new CommonTreeNodeStream is much better + * and covers what we need. + * + * @see CommonTreeNodeStream + */ +public class BufferedTreeNodeStream implements TreeNodeStream { + public static final int DEFAULT_INITIAL_BUFFER_SIZE = 100; + public static final int INITIAL_CALL_STACK_SIZE = 10; + + protected class StreamIterator implements Iterator { + int i = 0; + public boolean hasNext() { + return i<nodes.size(); + } + + public Object next() { + int current = i; + i++; + if ( current < nodes.size() ) { + return nodes.get(current); + } + return eof; + } + + public void remove() { + throw new RuntimeException("cannot remove nodes from stream"); + } + } + + // all these navigation nodes are shared and hence they + // cannot contain any line/column info + + protected Object down; + protected Object up; + protected Object eof; + + /** The complete mapping from stream index to tree node. + * This buffer includes pointers to DOWN, UP, and EOF nodes. + * It is built upon ctor invocation. The elements are type + * Object as we don't what the trees look like. + * + * Load upon first need of the buffer so we can set token types + * of interest for reverseIndexing. Slows us down a wee bit to + * do all of the if p==-1 testing everywhere though. + */ + protected List nodes; + + /** Pull nodes from which tree? */ + protected Object root; + + /** IF this tree (root) was created from a token stream, track it. */ + protected TokenStream tokens; + + /** What tree adaptor was used to build these trees */ + TreeAdaptor adaptor; + + /** Reuse same DOWN, UP navigation nodes unless this is true */ + protected boolean uniqueNavigationNodes = false; + + /** The index into the nodes list of the current node (next node + * to consume). If -1, nodes array not filled yet. + */ + protected int p = -1; + + /** Track the last mark() call result value for use in rewind(). */ + protected int lastMarker; + + /** Stack of indexes used for push/pop calls */ + protected IntArray calls; + + public BufferedTreeNodeStream(Object tree) { + this(new CommonTreeAdaptor(), tree); + } + + public BufferedTreeNodeStream(TreeAdaptor adaptor, Object tree) { + this(adaptor, tree, DEFAULT_INITIAL_BUFFER_SIZE); + } + + public BufferedTreeNodeStream(TreeAdaptor adaptor, Object tree, int initialBufferSize) { + this.root = tree; + this.adaptor = adaptor; + nodes = new ArrayList(initialBufferSize); + down = adaptor.create(Token.DOWN, "DOWN"); + up = adaptor.create(Token.UP, "UP"); + eof = adaptor.create(Token.EOF, "EOF"); + } + + /** Walk tree with depth-first-search and fill nodes buffer. + * Don't do DOWN, UP nodes if its a list (t is isNil). + */ + protected void fillBuffer() { + fillBuffer(root); + //System.out.println("revIndex="+tokenTypeToStreamIndexesMap); + p = 0; // buffer of nodes intialized now + } + + public void fillBuffer(Object t) { + boolean nil = adaptor.isNil(t); + if ( !nil ) { + nodes.add(t); // add this node + } + // add DOWN node if t has children + int n = adaptor.getChildCount(t); + if ( !nil && n>0 ) { + addNavigationNode(Token.DOWN); + } + // and now add all its children + for (int c=0; c<n; c++) { + Object child = adaptor.getChild(t,c); + fillBuffer(child); + } + // add UP node if t has children + if ( !nil && n>0 ) { + addNavigationNode(Token.UP); + } + } + + /** What is the stream index for node? 0..n-1 + * Return -1 if node not found. + */ + protected int getNodeIndex(Object node) { + if ( p==-1 ) { + fillBuffer(); + } + for (int i = 0; i < nodes.size(); i++) { + Object t = (Object) nodes.get(i); + if ( t==node ) { + return i; + } + } + return -1; + } + + /** As we flatten the tree, we use UP, DOWN nodes to represent + * the tree structure. When debugging we need unique nodes + * so instantiate new ones when uniqueNavigationNodes is true. + */ + protected void addNavigationNode(final int ttype) { + Object navNode = null; + if ( ttype==Token.DOWN ) { + if ( hasUniqueNavigationNodes() ) { + navNode = adaptor.create(Token.DOWN, "DOWN"); + } + else { + navNode = down; + } + } + else { + if ( hasUniqueNavigationNodes() ) { + navNode = adaptor.create(Token.UP, "UP"); + } + else { + navNode = up; + } + } + nodes.add(navNode); + } + + public Object get(int i) { + if ( p==-1 ) { + fillBuffer(); + } + return nodes.get(i); + } + + public Object LT(int k) { + if ( p==-1 ) { + fillBuffer(); + } + if ( k==0 ) { + return null; + } + if ( k<0 ) { + return LB(-k); + } + //System.out.print("LT(p="+p+","+k+")="); + if ( (p+k-1) >= nodes.size() ) { + return eof; + } + return nodes.get(p+k-1); + } + + public Object getCurrentSymbol() { return LT(1); } + +/* + public Object getLastTreeNode() { + int i = index(); + if ( i>=size() ) { + i--; // if at EOF, have to start one back + } + System.out.println("start last node: "+i+" size=="+nodes.size()); + while ( i>=0 && + (adaptor.getType(get(i))==Token.EOF || + adaptor.getType(get(i))==Token.UP || + adaptor.getType(get(i))==Token.DOWN) ) + { + i--; + } + System.out.println("stop at node: "+i+" "+nodes.get(i)); + return nodes.get(i); + } +*/ + + /** Look backwards k nodes */ + protected Object LB(int k) { + if ( k==0 ) { + return null; + } + if ( (p-k)<0 ) { + return null; + } + return nodes.get(p-k); + } + + public Object getTreeSource() { + return root; + } + + public String getSourceName() { + return getTokenStream().getSourceName(); + } + + public TokenStream getTokenStream() { + return tokens; + } + + public void setTokenStream(TokenStream tokens) { + this.tokens = tokens; + } + + public TreeAdaptor getTreeAdaptor() { + return adaptor; + } + + public void setTreeAdaptor(TreeAdaptor adaptor) { + this.adaptor = adaptor; + } + + public boolean hasUniqueNavigationNodes() { + return uniqueNavigationNodes; + } + + public void setUniqueNavigationNodes(boolean uniqueNavigationNodes) { + this.uniqueNavigationNodes = uniqueNavigationNodes; + } + + public void consume() { + if ( p==-1 ) { + fillBuffer(); + } + p++; + } + + public int LA(int i) { + return adaptor.getType(LT(i)); + } + + public int mark() { + if ( p==-1 ) { + fillBuffer(); + } + lastMarker = index(); + return lastMarker; + } + + public void release(int marker) { + // no resources to release + } + + public int index() { + return p; + } + + public void rewind(int marker) { + seek(marker); + } + + public void rewind() { + seek(lastMarker); + } + + public void seek(int index) { + if ( p==-1 ) { + fillBuffer(); + } + p = index; + } + + /** Make stream jump to a new location, saving old location. + * Switch back with pop(). + */ + public void push(int index) { + if ( calls==null ) { + calls = new IntArray(); + } + calls.push(p); // save current index + seek(index); + } + + /** Seek back to previous index saved during last push() call. + * Return top of stack (return index). + */ + public int pop() { + int ret = calls.pop(); + seek(ret); + return ret; + } + + public void reset() { + p = 0; + lastMarker = 0; + if (calls != null) { + calls.clear(); + } + } + + public int size() { + if ( p==-1 ) { + fillBuffer(); + } + return nodes.size(); + } + + public Iterator iterator() { + if ( p==-1 ) { + fillBuffer(); + } + return new StreamIterator(); + } + + // TREE REWRITE INTERFACE + + public void replaceChildren(Object parent, int startChildIndex, int stopChildIndex, Object t) { + if ( parent!=null ) { + adaptor.replaceChildren(parent, startChildIndex, stopChildIndex, t); + } + } + + /** Used for testing, just return the token type stream */ + public String toTokenTypeString() { + if ( p==-1 ) { + fillBuffer(); + } + StringBuffer buf = new StringBuffer(); + for (int i = 0; i < nodes.size(); i++) { + Object t = (Object) nodes.get(i); + buf.append(" "); + buf.append(adaptor.getType(t)); + } + return buf.toString(); + } + + /** Debugging */ + public String toTokenString(int start, int stop) { + if ( p==-1 ) { + fillBuffer(); + } + StringBuffer buf = new StringBuffer(); + for (int i = start; i < nodes.size() && i <= stop; i++) { + Object t = (Object) nodes.get(i); + buf.append(" "); + buf.append(adaptor.getToken(t)); + } + return buf.toString(); + } + + public String toString(Object start, Object stop) { + System.out.println("toString"); + if ( start==null || stop==null ) { + return null; + } + if ( p==-1 ) { + fillBuffer(); + } + //System.out.println("stop: "+stop); + if ( start instanceof CommonTree ) + System.out.print("toString: "+((CommonTree)start).getToken()+", "); + else + System.out.println(start); + if ( stop instanceof CommonTree ) + System.out.println(((CommonTree)stop).getToken()); + else + System.out.println(stop); + // if we have the token stream, use that to dump text in order + if ( tokens!=null ) { + int beginTokenIndex = adaptor.getTokenStartIndex(start); + int endTokenIndex = adaptor.getTokenStopIndex(stop); + // if it's a tree, use start/stop index from start node + // else use token range from start/stop nodes + if ( adaptor.getType(stop)==Token.UP ) { + endTokenIndex = adaptor.getTokenStopIndex(start); + } + else if ( adaptor.getType(stop)==Token.EOF ) { + endTokenIndex = size()-2; // don't use EOF + } + return tokens.toString(beginTokenIndex, endTokenIndex); + } + // walk nodes looking for start + Object t = null; + int i = 0; + for (; i < nodes.size(); i++) { + t = nodes.get(i); + if ( t==start ) { + break; + } + } + // now walk until we see stop, filling string buffer with text + StringBuffer buf = new StringBuffer(); + t = nodes.get(i); + while ( t!=stop ) { + String text = adaptor.getText(t); + if ( text==null ) { + text = " "+String.valueOf(adaptor.getType(t)); + } + buf.append(text); + i++; + t = nodes.get(i); + } + // include stop node too + String text = adaptor.getText(stop); + if ( text==null ) { + text = " "+String.valueOf(adaptor.getType(stop)); + } + buf.append(text); + return buf.toString(); + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/CommonErrorNode.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/CommonErrorNode.java new file mode 100644 index 0000000..5884495 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/CommonErrorNode.java @@ -0,0 +1,108 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.runtime.*; + +/** A node representing erroneous token range in token stream */ +public class CommonErrorNode extends CommonTree { + public IntStream input; + public Token start; + public Token stop; + public RecognitionException trappedException; + + public CommonErrorNode(TokenStream input, Token start, Token stop, + RecognitionException e) + { + //System.out.println("start: "+start+", stop: "+stop); + if ( stop==null || + (stop.getTokenIndex() < start.getTokenIndex() && + stop.getType()!=Token.EOF) ) + { + // sometimes resync does not consume a token (when LT(1) is + // in follow set. So, stop will be 1 to left to start. adjust. + // Also handle case where start is the first token and no token + // is consumed during recovery; LT(-1) will return null. + stop = start; + } + this.input = input; + this.start = start; + this.stop = stop; + this.trappedException = e; + } + + public boolean isNil() { + return false; + } + + public int getType() { + return Token.INVALID_TOKEN_TYPE; + } + + public String getText() { + String badText = null; + if ( start instanceof Token ) { + int i = ((Token)start).getTokenIndex(); + int j = ((Token)stop).getTokenIndex(); + if ( ((Token)stop).getType() == Token.EOF ) { + j = ((TokenStream)input).size(); + } + badText = ((TokenStream)input).toString(i, j); + } + else if ( start instanceof Tree ) { + badText = ((TreeNodeStream)input).toString(start, stop); + } + else { + // people should subclass if they alter the tree type so this + // next one is for sure correct. + badText = "<unknown>"; + } + return badText; + } + + public String toString() { + if ( trappedException instanceof MissingTokenException ) { + return "<missing type: "+ + ((MissingTokenException)trappedException).getMissingType()+ + ">"; + } + else if ( trappedException instanceof UnwantedTokenException ) { + return "<extraneous: "+ + ((UnwantedTokenException)trappedException).getUnexpectedToken()+ + ", resync="+getText()+">"; + } + else if ( trappedException instanceof MismatchedTokenException ) { + return "<mismatched token: "+trappedException.token+", resync="+getText()+">"; + } + else if ( trappedException instanceof NoViableAltException ) { + return "<unexpected: "+trappedException.token+ + ", resync="+getText()+">"; + } + return "<error: "+getText()+">"; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/CommonTree.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/CommonTree.java new file mode 100644 index 0000000..b86246f --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/CommonTree.java @@ -0,0 +1,185 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.runtime.Token; + +/** A tree node that is wrapper for a Token object. After 3.0 release + * while building tree rewrite stuff, it became clear that computing + * parent and child index is very difficult and cumbersome. Better to + * spend the space in every tree node. If you don't want these extra + * fields, it's easy to cut them out in your own BaseTree subclass. + */ +public class CommonTree extends BaseTree { + /** A single token is the payload */ + public Token token; + + /** What token indexes bracket all tokens associated with this node + * and below? + */ + protected int startIndex=-1, stopIndex=-1; + + /** Who is the parent node of this node; if null, implies node is root */ + public CommonTree parent; + + /** What index is this node in the child list? Range: 0..n-1 */ + public int childIndex = -1; + + public CommonTree() { } + + public CommonTree(CommonTree node) { + super(node); + this.token = node.token; + this.startIndex = node.startIndex; + this.stopIndex = node.stopIndex; + } + + public CommonTree(Token t) { + this.token = t; + } + + public Token getToken() { + return token; + } + + public Tree dupNode() { + return new CommonTree(this); + } + + public boolean isNil() { + return token==null; + } + + public int getType() { + if ( token==null ) { + return Token.INVALID_TOKEN_TYPE; + } + return token.getType(); + } + + public String getText() { + if ( token==null ) { + return null; + } + return token.getText(); + } + + public int getLine() { + if ( token==null || token.getLine()==0 ) { + if ( getChildCount()>0 ) { + return getChild(0).getLine(); + } + return 0; + } + return token.getLine(); + } + + public int getCharPositionInLine() { + if ( token==null || token.getCharPositionInLine()==-1 ) { + if ( getChildCount()>0 ) { + return getChild(0).getCharPositionInLine(); + } + return 0; + } + return token.getCharPositionInLine(); + } + + public int getTokenStartIndex() { + if ( startIndex==-1 && token!=null ) { + return token.getTokenIndex(); + } + return startIndex; + } + + public void setTokenStartIndex(int index) { + startIndex = index; + } + + public int getTokenStopIndex() { + if ( stopIndex==-1 && token!=null ) { + return token.getTokenIndex(); + } + return stopIndex; + } + + public void setTokenStopIndex(int index) { + stopIndex = index; + } + + /** For every node in this subtree, make sure it's start/stop token's + * are set. Walk depth first, visit bottom up. Only updates nodes + * with at least one token index < 0. + */ + public void setUnknownTokenBoundaries() { + if ( children==null ) { + if ( startIndex<0 || stopIndex<0 ) { + startIndex = stopIndex = token.getTokenIndex(); + } + return; + } + for (int i=0; i<children.size(); i++) { + ((CommonTree)children.get(i)).setUnknownTokenBoundaries(); + } + if ( startIndex>=0 && stopIndex>=0 ) return; // already set + if ( children.size() > 0 ) { + CommonTree firstChild = (CommonTree)children.get(0); + CommonTree lastChild = (CommonTree)children.get(children.size()-1); + startIndex = firstChild.getTokenStartIndex(); + stopIndex = lastChild.getTokenStopIndex(); + } + } + + public int getChildIndex() { + return childIndex; + } + + public Tree getParent() { + return parent; + } + + public void setParent(Tree t) { + this.parent = (CommonTree)t; + } + + public void setChildIndex(int index) { + this.childIndex = index; + } + + public String toString() { + if ( isNil() ) { + return "nil"; + } + if ( getType()==Token.INVALID_TOKEN_TYPE ) { + return "<errornode>"; + } + if ( token==null ) { + return null; + } + return token.getText(); + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/CommonTreeAdaptor.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/CommonTreeAdaptor.java new file mode 100644 index 0000000..1377ee8 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/CommonTreeAdaptor.java @@ -0,0 +1,168 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.runtime.CommonToken; +import org.antlr.runtime.Token; + +/** A TreeAdaptor that works with any Tree implementation. It provides + * really just factory methods; all the work is done by BaseTreeAdaptor. + * If you would like to have different tokens created than ClassicToken + * objects, you need to override this and then set the parser tree adaptor to + * use your subclass. + * + * To get your parser to build nodes of a different type, override + * create(Token), errorNode(), and to be safe, YourTreeClass.dupNode(). + * dupNode is called to duplicate nodes during rewrite operations. + */ +public class CommonTreeAdaptor extends BaseTreeAdaptor { + /** Duplicate a node. This is part of the factory; + * override if you want another kind of node to be built. + * + * I could use reflection to prevent having to override this + * but reflection is slow. + */ + public Object dupNode(Object t) { + if ( t==null ) return null; + return ((Tree)t).dupNode(); + } + + public Object create(Token payload) { + return new CommonTree(payload); + } + + /** Tell me how to create a token for use with imaginary token nodes. + * For example, there is probably no input symbol associated with imaginary + * token DECL, but you need to create it as a payload or whatever for + * the DECL node as in ^(DECL type ID). + * + * If you care what the token payload objects' type is, you should + * override this method and any other createToken variant. + */ + public Token createToken(int tokenType, String text) { + return new CommonToken(tokenType, text); + } + + /** Tell me how to create a token for use with imaginary token nodes. + * For example, there is probably no input symbol associated with imaginary + * token DECL, but you need to create it as a payload or whatever for + * the DECL node as in ^(DECL type ID). + * + * This is a variant of createToken where the new token is derived from + * an actual real input token. Typically this is for converting '{' + * tokens to BLOCK etc... You'll see + * + * r : lc='{' ID+ '}' -> ^(BLOCK[$lc] ID+) ; + * + * If you care what the token payload objects' type is, you should + * override this method and any other createToken variant. + */ + public Token createToken(Token fromToken) { + return new CommonToken(fromToken); + } + + /** Track start/stop token for subtree root created for a rule. + * Only works with Tree nodes. For rules that match nothing, + * seems like this will yield start=i and stop=i-1 in a nil node. + * Might be useful info so I'll not force to be i..i. + */ + public void setTokenBoundaries(Object t, Token startToken, Token stopToken) { + if ( t==null ) return; + int start = 0; + int stop = 0; + if ( startToken!=null ) start = startToken.getTokenIndex(); + if ( stopToken!=null ) stop = stopToken.getTokenIndex(); + ((Tree)t).setTokenStartIndex(start); + ((Tree)t).setTokenStopIndex(stop); + } + + public int getTokenStartIndex(Object t) { + if ( t==null ) return -1; + return ((Tree)t).getTokenStartIndex(); + } + + public int getTokenStopIndex(Object t) { + if ( t==null ) return -1; + return ((Tree)t).getTokenStopIndex(); + } + + public String getText(Object t) { + if ( t==null ) return null; + return ((Tree)t).getText(); + } + + public int getType(Object t) { + if ( t==null ) return Token.INVALID_TOKEN_TYPE; + return ((Tree)t).getType(); + } + + /** What is the Token associated with this node? If + * you are not using CommonTree, then you must + * override this in your own adaptor. + */ + public Token getToken(Object t) { + if ( t instanceof CommonTree ) { + return ((CommonTree)t).getToken(); + } + return null; // no idea what to do + } + + public Object getChild(Object t, int i) { + if ( t==null ) return null; + return ((Tree)t).getChild(i); + } + + public int getChildCount(Object t) { + if ( t==null ) return 0; + return ((Tree)t).getChildCount(); + } + + public Object getParent(Object t) { + if ( t==null ) return null; + return ((Tree)t).getParent(); + } + + public void setParent(Object t, Object parent) { + if ( t!=null ) ((Tree)t).setParent((Tree)parent); + } + + public int getChildIndex(Object t) { + if ( t==null ) return 0; + return ((Tree)t).getChildIndex(); + } + + public void setChildIndex(Object t, int index) { + if ( t!=null ) ((Tree)t).setChildIndex(index); + } + + public void replaceChildren(Object parent, int startChildIndex, int stopChildIndex, Object t) { + if ( parent!=null ) { + ((Tree)parent).replaceChildren(startChildIndex, stopChildIndex, t); + } + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/CommonTreeNodeStream.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/CommonTreeNodeStream.java new file mode 100644 index 0000000..d1e2594 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/CommonTreeNodeStream.java @@ -0,0 +1,167 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2008 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.runtime.Token; +import org.antlr.runtime.TokenStream; +import org.antlr.runtime.misc.LookaheadStream; +import org.antlr.runtime.misc.IntArray; + +import java.util.*; + +public class CommonTreeNodeStream extends LookaheadStream<Object> implements TreeNodeStream { + public static final int DEFAULT_INITIAL_BUFFER_SIZE = 100; + public static final int INITIAL_CALL_STACK_SIZE = 10; + + /** Pull nodes from which tree? */ + protected Object root; + + /** If this tree (root) was created from a token stream, track it. */ + protected TokenStream tokens; + + /** What tree adaptor was used to build these trees */ + TreeAdaptor adaptor; + + /** The tree iterator we using */ + protected TreeIterator it; + + /** Stack of indexes used for push/pop calls */ + protected IntArray calls; + + /** Tree (nil A B C) trees like flat A B C streams */ + protected boolean hasNilRoot = false; + + /** Tracks tree depth. Level=0 means we're at root node level. */ + protected int level = 0; + + public CommonTreeNodeStream(Object tree) { + this(new CommonTreeAdaptor(), tree); + } + + public CommonTreeNodeStream(TreeAdaptor adaptor, Object tree) { + super(adaptor.create(Token.EOF, "EOF")); // set EOF + this.root = tree; + this.adaptor = adaptor; + it = new TreeIterator(root); + it.eof = this.eof; // make sure tree iterator returns the EOF we want + } + + public void reset() { + super.reset(); + it.reset(); + hasNilRoot = false; + level = 0; + if ( calls != null ) calls.clear(); + } + + /** Pull elements from tree iterator. Track tree level 0..max_level. + * If nil rooted tree, don't give initial nil and DOWN nor final UP. + */ + public Object nextElement() { + Object t = it.next(); + //System.out.println("pulled "+adaptor.getType(t)); + if ( t == it.up ) { + level--; + if ( level==0 && hasNilRoot ) return it.next(); // don't give last UP; get EOF + } + else if ( t == it.down ) level++; + if ( level==0 && adaptor.isNil(t) ) { // if nil root, scarf nil, DOWN + hasNilRoot = true; + t = it.next(); // t is now DOWN, so get first real node next + level++; + t = it.next(); + } + return t; + } + + public void setUniqueNavigationNodes(boolean uniqueNavigationNodes) { } + + public Object getTreeSource() { return root; } + + public String getSourceName() { return getTokenStream().getSourceName(); } + + public TokenStream getTokenStream() { return tokens; } + + public void setTokenStream(TokenStream tokens) { this.tokens = tokens; } + + public TreeAdaptor getTreeAdaptor() { return adaptor; } + + public void setTreeAdaptor(TreeAdaptor adaptor) { this.adaptor = adaptor; } + + public int LA(int i) { return adaptor.getType(LT(i)); } + + /** Make stream jump to a new location, saving old location. + * Switch back with pop(). + */ + public void push(int index) { + if ( calls==null ) { + calls = new IntArray(); + } + calls.push(p); // save current index + seek(index); + } + + /** Seek back to previous index saved during last push() call. + * Return top of stack (return index). + */ + public int pop() { + int ret = calls.pop(); + seek(ret); + return ret; + } + + // TREE REWRITE INTERFACE + + public void replaceChildren(Object parent, int startChildIndex, int stopChildIndex, Object t) { + if ( parent!=null ) { + adaptor.replaceChildren(parent, startChildIndex, stopChildIndex, t); + } + } + + public String toString(Object start, Object stop) { + // we'll have to walk from start to stop in tree; we're not keeping + // a complete node stream buffer + return "n/a"; + } + + /** For debugging; destructive: moves tree iterator to end. */ + public String toTokenTypeString() { + reset(); + StringBuffer buf = new StringBuffer(); + Object o = LT(1); + int type = adaptor.getType(o); + while ( type!=Token.EOF ) { + buf.append(" "); + buf.append(type); + consume(); + o = LT(1); + type = adaptor.getType(o); + } + return buf.toString(); + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/DOTTreeGenerator.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/DOTTreeGenerator.java new file mode 100644 index 0000000..78ff661 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/DOTTreeGenerator.java @@ -0,0 +1,224 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.stringtemplate.StringTemplate; + +import java.util.HashMap; + +/** A utility class to generate DOT diagrams (graphviz) from + * arbitrary trees. You can pass in your own templates and + * can pass in any kind of tree or use Tree interface method. + * I wanted this separator so that you don't have to include + * ST just to use the org.antlr.runtime.tree.* package. + * This is a set of non-static methods so you can subclass + * to override. For example, here is an invocation: + * + * CharStream input = new ANTLRInputStream(System.in); + * TLexer lex = new TLexer(input); + * CommonTokenStream tokens = new CommonTokenStream(lex); + * TParser parser = new TParser(tokens); + * TParser.e_return r = parser.e(); + * Tree t = (Tree)r.tree; + * System.out.println(t.toStringTree()); + * DOTTreeGenerator gen = new DOTTreeGenerator(); + * StringTemplate st = gen.toDOT(t); + * System.out.println(st); + */ +public class DOTTreeGenerator { + + public static StringTemplate _treeST = + new StringTemplate( + "digraph {\n\n" + + "\tordering=out;\n" + + "\tranksep=.4;\n" + + "\tbgcolor=\"lightgrey\"; node [shape=box, fixedsize=false, fontsize=12, fontname=\"Helvetica-bold\", fontcolor=\"blue\"\n" + + "\t\twidth=.25, height=.25, color=\"black\", fillcolor=\"white\", style=\"filled, solid, bold\"];\n" + + "\tedge [arrowsize=.5, color=\"black\", style=\"bold\"]\n\n" + + " $nodes$\n" + + " $edges$\n" + + "}\n"); + + public static StringTemplate _nodeST = + new StringTemplate("$name$ [label=\"$text$\"];\n"); + + public static StringTemplate _edgeST = + new StringTemplate("$parent$ -> $child$ // \"$parentText$\" -> \"$childText$\"\n"); + + /** Track node to number mapping so we can get proper node name back */ + HashMap nodeToNumberMap = new HashMap(); + + /** Track node number so we can get unique node names */ + int nodeNumber = 0; + + public StringTemplate toDOT(Object tree, + TreeAdaptor adaptor, + StringTemplate _treeST, + StringTemplate _edgeST) + { + StringTemplate treeST = _treeST.getInstanceOf(); + nodeNumber = 0; + toDOTDefineNodes(tree, adaptor, treeST); + nodeNumber = 0; + toDOTDefineEdges(tree, adaptor, treeST); + /* + if ( adaptor.getChildCount(tree)==0 ) { + // single node, don't do edge. + treeST.setAttribute("nodes", adaptor.getText(tree)); + } + */ + return treeST; + } + + public StringTemplate toDOT(Object tree, + TreeAdaptor adaptor) + { + return toDOT(tree, adaptor, _treeST, _edgeST); + } + + /** Generate DOT (graphviz) for a whole tree not just a node. + * For example, 3+4*5 should generate: + * + * digraph { + * node [shape=plaintext, fixedsize=true, fontsize=11, fontname="Courier", + * width=.4, height=.2]; + * edge [arrowsize=.7] + * "+"->3 + * "+"->"*" + * "*"->4 + * "*"->5 + * } + * + * Return the ST not a string in case people want to alter. + * + * Takes a Tree interface object. + */ + public StringTemplate toDOT(Tree tree) { + return toDOT(tree, new CommonTreeAdaptor()); + } + + protected void toDOTDefineNodes(Object tree, + TreeAdaptor adaptor, + StringTemplate treeST) + { + if ( tree==null ) { + return; + } + int n = adaptor.getChildCount(tree); + if ( n==0 ) { + // must have already dumped as child from previous + // invocation; do nothing + return; + } + + // define parent node + StringTemplate parentNodeST = getNodeST(adaptor, tree); + treeST.setAttribute("nodes", parentNodeST); + + // for each child, do a "<unique-name> [label=text]" node def + for (int i = 0; i < n; i++) { + Object child = adaptor.getChild(tree, i); + StringTemplate nodeST = getNodeST(adaptor, child); + treeST.setAttribute("nodes", nodeST); + toDOTDefineNodes(child, adaptor, treeST); + } + } + + protected void toDOTDefineEdges(Object tree, + TreeAdaptor adaptor, + StringTemplate treeST) + { + if ( tree==null ) { + return; + } + int n = adaptor.getChildCount(tree); + if ( n==0 ) { + // must have already dumped as child from previous + // invocation; do nothing + return; + } + + String parentName = "n"+getNodeNumber(tree); + + // for each child, do a parent -> child edge using unique node names + String parentText = adaptor.getText(tree); + for (int i = 0; i < n; i++) { + Object child = adaptor.getChild(tree, i); + String childText = adaptor.getText(child); + String childName = "n"+getNodeNumber(child); + StringTemplate edgeST = _edgeST.getInstanceOf(); + edgeST.setAttribute("parent", parentName); + edgeST.setAttribute("child", childName); + edgeST.setAttribute("parentText", fixString(parentText)); + edgeST.setAttribute("childText", fixString(childText)); + treeST.setAttribute("edges", edgeST); + toDOTDefineEdges(child, adaptor, treeST); + } + } + + protected StringTemplate getNodeST(TreeAdaptor adaptor, Object t) { + String text = adaptor.getText(t); + StringTemplate nodeST = _nodeST.getInstanceOf(); + String uniqueName = "n"+getNodeNumber(t); + nodeST.setAttribute("name", uniqueName); + + nodeST.setAttribute("text", fixString(text)); + return nodeST; + } + + protected int getNodeNumber(Object t) { + Integer nI = (Integer)nodeToNumberMap.get(t); + if ( nI!=null ) { + return nI.intValue(); + } + else { + nodeToNumberMap.put(t, new Integer(nodeNumber)); + nodeNumber++; + return nodeNumber-1; + } + } + + protected String fixString(String in) + { + String text = in; + + if (text!=null) { + + text = text.replaceAll("\"", "\\\\\""); + text = text.replaceAll("\\t", " "); + text = text.replaceAll("\\n", "\\\\n"); + text = text.replaceAll("\\r", "\\\\r"); + if (text.length() > 20) { + text = text.substring(0, 8) + "..." + text.substring(text.length()-8); + } + + } + + return text; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/ParseTree.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/ParseTree.java new file mode 100644 index 0000000..6fb2b7f --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/ParseTree.java @@ -0,0 +1,119 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.runtime.Token; + +import java.util.List; + +/** A record of the rules used to match a token sequence. The tokens + * end up as the leaves of this tree and rule nodes are the interior nodes. + * This really adds no functionality, it is just an alias for CommonTree + * that is more meaningful (specific) and holds a String to display for a node. + */ +public class ParseTree extends BaseTree { + public Object payload; + public List hiddenTokens; + + public ParseTree(Object label) { + this.payload = label; + } + + public Tree dupNode() { + return null; + } + + public int getType() { + return 0; + } + + public String getText() { + return toString(); + } + + public int getTokenStartIndex() { + return 0; + } + + public void setTokenStartIndex(int index) { + } + + public int getTokenStopIndex() { + return 0; + } + + public void setTokenStopIndex(int index) { + } + + public String toString() { + if ( payload instanceof Token ) { + Token t = (Token)payload; + if ( t.getType() == Token.EOF ) { + return "<EOF>"; + } + return t.getText(); + } + return payload.toString(); + } + + /** Emit a token and all hidden nodes before. EOF node holds all + * hidden tokens after last real token. + */ + public String toStringWithHiddenTokens() { + StringBuffer buf = new StringBuffer(); + if ( hiddenTokens!=null ) { + for (int i = 0; i < hiddenTokens.size(); i++) { + Token hidden = (Token) hiddenTokens.get(i); + buf.append(hidden.getText()); + } + } + String nodeText = this.toString(); + if ( !nodeText.equals("<EOF>") ) buf.append(nodeText); + return buf.toString(); + } + + /** Print out the leaves of this tree, which means printing original + * input back out. + */ + public String toInputString() { + StringBuffer buf = new StringBuffer(); + _toStringLeaves(buf); + return buf.toString(); + } + + public void _toStringLeaves(StringBuffer buf) { + if ( payload instanceof Token ) { // leaf node token? + buf.append(this.toStringWithHiddenTokens()); + return; + } + for (int i = 0; children!=null && i < children.size(); i++) { + ParseTree t = (ParseTree)children.get(i); + t._toStringLeaves(buf); + } + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteCardinalityException.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteCardinalityException.java new file mode 100644 index 0000000..c46c26c --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteCardinalityException.java @@ -0,0 +1,47 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +/** Base class for all exceptions thrown during AST rewrite construction. + * This signifies a case where the cardinality of two or more elements + * in a subrule are different: (ID INT)+ where |ID|!=|INT| + */ +public class RewriteCardinalityException extends RuntimeException { + public String elementDescription; + + public RewriteCardinalityException(String elementDescription) { + this.elementDescription = elementDescription; + } + + public String getMessage() { + if ( elementDescription!=null ) { + return elementDescription; + } + return null; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteEarlyExitException.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteEarlyExitException.java new file mode 100644 index 0000000..07b268e --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteEarlyExitException.java @@ -0,0 +1,39 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +/** No elements within a (...)+ in a rewrite rule */ +public class RewriteEarlyExitException extends RewriteCardinalityException { + public RewriteEarlyExitException() { + super(null); + } + public RewriteEarlyExitException(String elementDescription) { + super(elementDescription); + } + +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteEmptyStreamException.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteEmptyStreamException.java new file mode 100644 index 0000000..865288c --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteEmptyStreamException.java @@ -0,0 +1,35 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +/** Ref to ID or expr but no tokens in ID stream or subtrees in expr stream */ +public class RewriteEmptyStreamException extends RewriteCardinalityException { + public RewriteEmptyStreamException(String elementDescription) { + super(elementDescription); + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteRuleElementStream.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteRuleElementStream.java new file mode 100644 index 0000000..23ed373 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteRuleElementStream.java @@ -0,0 +1,211 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.runtime.Token; +import org.antlr.runtime.CommonToken; + +import java.util.List; +import java.util.ArrayList; + +/** A generic list of elements tracked in an alternative to be used in + * a -> rewrite rule. We need to subclass to fill in the next() method, + * which returns either an AST node wrapped around a token payload or + * an existing subtree. + * + * Once you start next()ing, do not try to add more elements. It will + * break the cursor tracking I believe. + * + * @see org.antlr.runtime.tree.RewriteRuleSubtreeStream + * @see org.antlr.runtime.tree.RewriteRuleTokenStream + * + * TODO: add mechanism to detect/puke on modification after reading from stream + */ +public abstract class RewriteRuleElementStream { + /** Cursor 0..n-1. If singleElement!=null, cursor is 0 until you next(), + * which bumps it to 1 meaning no more elements. + */ + protected int cursor = 0; + + /** Track single elements w/o creating a list. Upon 2nd add, alloc list */ + protected Object singleElement; + + /** The list of tokens or subtrees we are tracking */ + protected List elements; + + /** Once a node / subtree has been used in a stream, it must be dup'd + * from then on. Streams are reset after subrules so that the streams + * can be reused in future subrules. So, reset must set a dirty bit. + * If dirty, then next() always returns a dup. + * + * I wanted to use "naughty bit" here, but couldn't think of a way + * to use "naughty". + */ + protected boolean dirty = false; + + /** The element or stream description; usually has name of the token or + * rule reference that this list tracks. Can include rulename too, but + * the exception would track that info. + */ + protected String elementDescription; + protected TreeAdaptor adaptor; + + public RewriteRuleElementStream(TreeAdaptor adaptor, String elementDescription) { + this.elementDescription = elementDescription; + this.adaptor = adaptor; + } + + /** Create a stream with one element */ + public RewriteRuleElementStream(TreeAdaptor adaptor, + String elementDescription, + Object oneElement) + { + this(adaptor, elementDescription); + add(oneElement); + } + + /** Create a stream, but feed off an existing list */ + public RewriteRuleElementStream(TreeAdaptor adaptor, + String elementDescription, + List elements) + { + this(adaptor, elementDescription); + this.singleElement = null; + this.elements = elements; + } + + /** Reset the condition of this stream so that it appears we have + * not consumed any of its elements. Elements themselves are untouched. + * Once we reset the stream, any future use will need duplicates. Set + * the dirty bit. + */ + public void reset() { + cursor = 0; + dirty = true; + } + + public void add(Object el) { + //System.out.println("add '"+elementDescription+"' is "+el); + if ( el==null ) { + return; + } + if ( elements!=null ) { // if in list, just add + elements.add(el); + return; + } + if ( singleElement == null ) { // no elements yet, track w/o list + singleElement = el; + return; + } + // adding 2nd element, move to list + elements = new ArrayList(5); + elements.add(singleElement); + singleElement = null; + elements.add(el); + } + + /** Return the next element in the stream. If out of elements, throw + * an exception unless size()==1. If size is 1, then return elements[0]. + * Return a duplicate node/subtree if stream is out of elements and + * size==1. If we've already used the element, dup (dirty bit set). + */ + public Object nextTree() { + int n = size(); + if ( dirty || (cursor>=n && n==1) ) { + // if out of elements and size is 1, dup + Object el = _next(); + return dup(el); + } + // test size above then fetch + Object el = _next(); + return el; + } + + /** do the work of getting the next element, making sure that it's + * a tree node or subtree. Deal with the optimization of single- + * element list versus list of size > 1. Throw an exception + * if the stream is empty or we're out of elements and size>1. + * protected so you can override in a subclass if necessary. + */ + protected Object _next() { + int n = size(); + if ( n ==0 ) { + throw new RewriteEmptyStreamException(elementDescription); + } + if ( cursor>= n) { // out of elements? + if ( n ==1 ) { // if size is 1, it's ok; return and we'll dup + return toTree(singleElement); + } + // out of elements and size was not 1, so we can't dup + throw new RewriteCardinalityException(elementDescription); + } + // we have elements + if ( singleElement!=null ) { + cursor++; // move cursor even for single element list + return toTree(singleElement); + } + // must have more than one in list, pull from elements + Object o = toTree(elements.get(cursor)); + cursor++; + return o; + } + + /** When constructing trees, sometimes we need to dup a token or AST + * subtree. Dup'ing a token means just creating another AST node + * around it. For trees, you must call the adaptor.dupTree() unless + * the element is for a tree root; then it must be a node dup. + */ + protected abstract Object dup(Object el); + + /** Ensure stream emits trees; tokens must be converted to AST nodes. + * AST nodes can be passed through unmolested. + */ + protected Object toTree(Object el) { + return el; + } + + public boolean hasNext() { + return (singleElement != null && cursor < 1) || + (elements!=null && cursor < elements.size()); + } + + public int size() { + int n = 0; + if ( singleElement != null ) { + n = 1; + } + if ( elements!=null ) { + return elements.size(); + } + return n; + } + + public String getDescription() { + return elementDescription; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteRuleNodeStream.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteRuleNodeStream.java new file mode 100644 index 0000000..7900b09 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteRuleNodeStream.java @@ -0,0 +1,70 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import java.util.List; + +/** Queues up nodes matched on left side of -> in a tree parser. This is + * the analog of RewriteRuleTokenStream for normal parsers. + */ +public class RewriteRuleNodeStream extends RewriteRuleElementStream { + + public RewriteRuleNodeStream(TreeAdaptor adaptor, String elementDescription) { + super(adaptor, elementDescription); + } + + /** Create a stream with one element */ + public RewriteRuleNodeStream(TreeAdaptor adaptor, + String elementDescription, + Object oneElement) + { + super(adaptor, elementDescription, oneElement); + } + + /** Create a stream, but feed off an existing list */ + public RewriteRuleNodeStream(TreeAdaptor adaptor, + String elementDescription, + List elements) + { + super(adaptor, elementDescription, elements); + } + + public Object nextNode() { + return _next(); + } + + protected Object toTree(Object el) { + return adaptor.dupNode(el); + } + + protected Object dup(Object el) { + // we dup every node, so don't have to worry about calling dup; short- + // circuited next() so it doesn't call. + throw new UnsupportedOperationException("dup can't be called for a node stream."); + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteRuleSubtreeStream.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteRuleSubtreeStream.java new file mode 100644 index 0000000..08aa72f --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteRuleSubtreeStream.java @@ -0,0 +1,83 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import java.util.List; + +public class RewriteRuleSubtreeStream extends RewriteRuleElementStream { + + public RewriteRuleSubtreeStream(TreeAdaptor adaptor, String elementDescription) { + super(adaptor, elementDescription); + } + + /** Create a stream with one element */ + public RewriteRuleSubtreeStream(TreeAdaptor adaptor, + String elementDescription, + Object oneElement) + { + super(adaptor, elementDescription, oneElement); + } + + /** Create a stream, but feed off an existing list */ + public RewriteRuleSubtreeStream(TreeAdaptor adaptor, + String elementDescription, + List elements) + { + super(adaptor, elementDescription, elements); + } + + /** Treat next element as a single node even if it's a subtree. + * This is used instead of next() when the result has to be a + * tree root node. Also prevents us from duplicating recently-added + * children; e.g., ^(type ID)+ adds ID to type and then 2nd iteration + * must dup the type node, but ID has been added. + * + * Referencing a rule result twice is ok; dup entire tree as + * we can't be adding trees as root; e.g., expr expr. + * + * Hideous code duplication here with super.next(). Can't think of + * a proper way to refactor. This needs to always call dup node + * and super.next() doesn't know which to call: dup node or dup tree. + */ + public Object nextNode() { + int n = size(); + if ( dirty || (cursor>=n && n==1) ) { + // if out of elements and size is 1, dup (at most a single node + // since this is for making root nodes). + Object el = _next(); + return adaptor.dupNode(el); + } + // test size above then fetch + Object el = _next(); + return el; + } + + protected Object dup(Object el) { + return adaptor.dupTree(el); + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteRuleTokenStream.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteRuleTokenStream.java new file mode 100644 index 0000000..f25bf31 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/RewriteRuleTokenStream.java @@ -0,0 +1,76 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.runtime.Token; + +import java.util.List; + +public class RewriteRuleTokenStream extends RewriteRuleElementStream { + + public RewriteRuleTokenStream(TreeAdaptor adaptor, String elementDescription) { + super(adaptor, elementDescription); + } + + /** Create a stream with one element */ + public RewriteRuleTokenStream(TreeAdaptor adaptor, + String elementDescription, + Object oneElement) + { + super(adaptor, elementDescription, oneElement); + } + + /** Create a stream, but feed off an existing list */ + public RewriteRuleTokenStream(TreeAdaptor adaptor, + String elementDescription, + List elements) + { + super(adaptor, elementDescription, elements); + } + + /** Get next token from stream and make a node for it */ + public Object nextNode() { + Token t = (Token)_next(); + return adaptor.create(t); + } + + public Token nextToken() { + return (Token)_next(); + } + + /** Don't convert to a tree unless they explicitly call nextTree. + * This way we can do hetero tree nodes in rewrite. + */ + protected Object toTree(Object el) { + return el; + } + + protected Object dup(Object el) { + throw new UnsupportedOperationException("dup can't be called for a token stream."); + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/Tree.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/Tree.java new file mode 100644 index 0000000..79f5523 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/Tree.java @@ -0,0 +1,127 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.runtime.Token; + +import java.util.List; + +/** What does a tree look like? ANTLR has a number of support classes + * such as CommonTreeNodeStream that work on these kinds of trees. You + * don't have to make your trees implement this interface, but if you do, + * you'll be able to use more support code. + * + * NOTE: When constructing trees, ANTLR can build any kind of tree; it can + * even use Token objects as trees if you add a child list to your tokens. + * + * This is a tree node without any payload; just navigation and factory stuff. + */ +public interface Tree { + public static final Tree INVALID_NODE = new CommonTree(Token.INVALID_TOKEN); + + Tree getChild(int i); + + int getChildCount(); + + // Tree tracks parent and child index now > 3.0 + + public Tree getParent(); + + public void setParent(Tree t); + + /** Is there is a node above with token type ttype? */ + public boolean hasAncestor(int ttype); + + /** Walk upwards and get first ancestor with this token type. */ + public Tree getAncestor(int ttype); + + /** Return a list of all ancestors of this node. The first node of + * list is the root and the last is the parent of this node. + */ + public List getAncestors(); + + /** This node is what child index? 0..n-1 */ + public int getChildIndex(); + + public void setChildIndex(int index); + + /** Set the parent and child index values for all children */ + public void freshenParentAndChildIndexes(); + + /** Add t as a child to this node. If t is null, do nothing. If t + * is nil, add all children of t to this' children. + */ + void addChild(Tree t); + + /** Set ith child (0..n-1) to t; t must be non-null and non-nil node */ + public void setChild(int i, Tree t); + + public Object deleteChild(int i); + + /** Delete children from start to stop and replace with t even if t is + * a list (nil-root tree). num of children can increase or decrease. + * For huge child lists, inserting children can force walking rest of + * children to set their childindex; could be slow. + */ + public void replaceChildren(int startChildIndex, int stopChildIndex, Object t); + + /** Indicates the node is a nil node but may still have children, meaning + * the tree is a flat list. + */ + boolean isNil(); + + /** What is the smallest token index (indexing from 0) for this node + * and its children? + */ + int getTokenStartIndex(); + + void setTokenStartIndex(int index); + + /** What is the largest token index (indexing from 0) for this node + * and its children? + */ + int getTokenStopIndex(); + + void setTokenStopIndex(int index); + + Tree dupNode(); + + /** Return a token type; needed for tree parsing */ + int getType(); + + String getText(); + + /** In case we don't have a token payload, what is the line for errors? */ + int getLine(); + + int getCharPositionInLine(); + + String toStringTree(); + + String toString(); +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeAdaptor.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeAdaptor.java new file mode 100644 index 0000000..d34d654 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeAdaptor.java @@ -0,0 +1,263 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.runtime.Token; +import org.antlr.runtime.TokenStream; +import org.antlr.runtime.RecognitionException; + +/** How to create and navigate trees. Rather than have a separate factory + * and adaptor, I've merged them. Makes sense to encapsulate. + * + * This takes the place of the tree construction code generated in the + * generated code in 2.x and the ASTFactory. + * + * I do not need to know the type of a tree at all so they are all + * generic Objects. This may increase the amount of typecasting needed. :( + */ +public interface TreeAdaptor { + // C o n s t r u c t i o n + + /** Create a tree node from Token object; for CommonTree type trees, + * then the token just becomes the payload. This is the most + * common create call. + * + * Override if you want another kind of node to be built. + */ + public Object create(Token payload); + + /** Duplicate a single tree node. + * Override if you want another kind of node to be built. + */ + public Object dupNode(Object treeNode); + + /** Duplicate tree recursively, using dupNode() for each node */ + public Object dupTree(Object tree); + + /** Return a nil node (an empty but non-null node) that can hold + * a list of element as the children. If you want a flat tree (a list) + * use "t=adaptor.nil(); t.addChild(x); t.addChild(y);" + */ + public Object nil(); + + /** Return a tree node representing an error. This node records the + * tokens consumed during error recovery. The start token indicates the + * input symbol at which the error was detected. The stop token indicates + * the last symbol consumed during recovery. + * + * You must specify the input stream so that the erroneous text can + * be packaged up in the error node. The exception could be useful + * to some applications; default implementation stores ptr to it in + * the CommonErrorNode. + * + * This only makes sense during token parsing, not tree parsing. + * Tree parsing should happen only when parsing and tree construction + * succeed. + */ + public Object errorNode(TokenStream input, Token start, Token stop, RecognitionException e); + + /** Is tree considered a nil node used to make lists of child nodes? */ + public boolean isNil(Object tree); + + /** Add a child to the tree t. If child is a flat tree (a list), make all + * in list children of t. Warning: if t has no children, but child does + * and child isNil then you can decide it is ok to move children to t via + * t.children = child.children; i.e., without copying the array. Just + * make sure that this is consistent with have the user will build + * ASTs. Do nothing if t or child is null. + */ + public void addChild(Object t, Object child); + + /** If oldRoot is a nil root, just copy or move the children to newRoot. + * If not a nil root, make oldRoot a child of newRoot. + * + * old=^(nil a b c), new=r yields ^(r a b c) + * old=^(a b c), new=r yields ^(r ^(a b c)) + * + * If newRoot is a nil-rooted single child tree, use the single + * child as the new root node. + * + * old=^(nil a b c), new=^(nil r) yields ^(r a b c) + * old=^(a b c), new=^(nil r) yields ^(r ^(a b c)) + * + * If oldRoot was null, it's ok, just return newRoot (even if isNil). + * + * old=null, new=r yields r + * old=null, new=^(nil r) yields ^(nil r) + * + * Return newRoot. Throw an exception if newRoot is not a + * simple node or nil root with a single child node--it must be a root + * node. If newRoot is ^(nil x) return x as newRoot. + * + * Be advised that it's ok for newRoot to point at oldRoot's + * children; i.e., you don't have to copy the list. We are + * constructing these nodes so we should have this control for + * efficiency. + */ + public Object becomeRoot(Object newRoot, Object oldRoot); + + /** Given the root of the subtree created for this rule, post process + * it to do any simplifications or whatever you want. A required + * behavior is to convert ^(nil singleSubtree) to singleSubtree + * as the setting of start/stop indexes relies on a single non-nil root + * for non-flat trees. + * + * Flat trees such as for lists like "idlist : ID+ ;" are left alone + * unless there is only one ID. For a list, the start/stop indexes + * are set in the nil node. + * + * This method is executed after all rule tree construction and right + * before setTokenBoundaries(). + */ + public Object rulePostProcessing(Object root); + + /** For identifying trees. + * + * How to identify nodes so we can say "add node to a prior node"? + * Even becomeRoot is an issue. Use System.identityHashCode(node) + * usually. + */ + public int getUniqueID(Object node); + + + // R e w r i t e R u l e s + + /** Create a node for newRoot make it the root of oldRoot. + * If oldRoot is a nil root, just copy or move the children to newRoot. + * If not a nil root, make oldRoot a child of newRoot. + * + * Return node created for newRoot. + * + * Be advised: when debugging ASTs, the DebugTreeAdaptor manually + * calls create(Token child) and then plain becomeRoot(node, node) + * because it needs to trap calls to create, but it can't since it delegates + * to not inherits from the TreeAdaptor. + */ + public Object becomeRoot(Token newRoot, Object oldRoot); + + /** Create a new node derived from a token, with a new token type. + * This is invoked from an imaginary node ref on right side of a + * rewrite rule as IMAG[$tokenLabel]. + * + * This should invoke createToken(Token). + */ + public Object create(int tokenType, Token fromToken); + + /** Same as create(tokenType,fromToken) except set the text too. + * This is invoked from an imaginary node ref on right side of a + * rewrite rule as IMAG[$tokenLabel, "IMAG"]. + * + * This should invoke createToken(Token). + */ + public Object create(int tokenType, Token fromToken, String text); + + /** Create a new node derived from a token, with a new token type. + * This is invoked from an imaginary node ref on right side of a + * rewrite rule as IMAG["IMAG"]. + * + * This should invoke createToken(int,String). + */ + public Object create(int tokenType, String text); + + + // C o n t e n t + + /** For tree parsing, I need to know the token type of a node */ + public int getType(Object t); + + /** Node constructors can set the type of a node */ + public void setType(Object t, int type); + + public String getText(Object t); + + /** Node constructors can set the text of a node */ + public void setText(Object t, String text); + + /** Return the token object from which this node was created. + * Currently used only for printing an error message. + * The error display routine in BaseRecognizer needs to + * display where the input the error occurred. If your + * tree of limitation does not store information that can + * lead you to the token, you can create a token filled with + * the appropriate information and pass that back. See + * BaseRecognizer.getErrorMessage(). + */ + public Token getToken(Object t); + + /** Where are the bounds in the input token stream for this node and + * all children? Each rule that creates AST nodes will call this + * method right before returning. Flat trees (i.e., lists) will + * still usually have a nil root node just to hold the children list. + * That node would contain the start/stop indexes then. + */ + public void setTokenBoundaries(Object t, Token startToken, Token stopToken); + + /** Get the token start index for this subtree; return -1 if no such index */ + public int getTokenStartIndex(Object t); + + /** Get the token stop index for this subtree; return -1 if no such index */ + public int getTokenStopIndex(Object t); + + + // N a v i g a t i o n / T r e e P a r s i n g + + /** Get a child 0..n-1 node */ + public Object getChild(Object t, int i); + + /** Set ith child (0..n-1) to t; t must be non-null and non-nil node */ + public void setChild(Object t, int i, Object child); + + /** Remove ith child and shift children down from right. */ + public Object deleteChild(Object t, int i); + + /** How many children? If 0, then this is a leaf node */ + public int getChildCount(Object t); + + /** Who is the parent node of this node; if null, implies node is root. + * If your node type doesn't handle this, it's ok but the tree rewrites + * in tree parsers need this functionality. + */ + public Object getParent(Object t); + public void setParent(Object t, Object parent); + + /** What index is this node in the child list? Range: 0..n-1 + * If your node type doesn't handle this, it's ok but the tree rewrites + * in tree parsers need this functionality. + */ + public int getChildIndex(Object t); + public void setChildIndex(Object t, int index); + + /** Replace from start to stop child index of parent with t, which might + * be a list. Number of children may be different + * after this call. + * + * If parent is null, don't do anything; must be at root of overall tree. + * Can't replace whatever points to the parent externally. Do nothing. + */ + public void replaceChildren(Object parent, int startChildIndex, int stopChildIndex, Object t); +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeFilter.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeFilter.java new file mode 100644 index 0000000..3fe89d6 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeFilter.java @@ -0,0 +1,91 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.runtime.RecognizerSharedState; +import org.antlr.runtime.RecognitionException; +import org.antlr.runtime.TokenStream; + +public class TreeFilter extends TreeParser { + public interface fptr { + public void rule() throws RecognitionException; + } + + protected TokenStream originalTokenStream; + protected TreeAdaptor originalAdaptor; + + public TreeFilter(TreeNodeStream input) { + super(input); + } + public TreeFilter(TreeNodeStream input, RecognizerSharedState state) { + super(input, state); + originalAdaptor = input.getTreeAdaptor(); + originalTokenStream = input.getTokenStream(); + } + + public void applyOnce(Object t, fptr whichRule) { + if ( t==null ) return; + try { + // share TreeParser object but not parsing-related state + state = new RecognizerSharedState(); + input = new CommonTreeNodeStream(originalAdaptor, t); + ((CommonTreeNodeStream)input).setTokenStream(originalTokenStream); + setBacktrackingLevel(1); + whichRule.rule(); + setBacktrackingLevel(0); + } + catch (RecognitionException e) { ; } + } + + public void downup(Object t) { + TreeVisitor v = new TreeVisitor(new CommonTreeAdaptor()); + TreeVisitorAction actions = new TreeVisitorAction() { + public Object pre(Object t) { applyOnce(t, topdown_fptr); return t; } + public Object post(Object t) { applyOnce(t, bottomup_fptr); return t; } + }; + v.visit(t, actions); + } + + fptr topdown_fptr = new fptr() { + public void rule() throws RecognitionException { + topdown(); + } + }; + + fptr bottomup_fptr = new fptr() { + public void rule() throws RecognitionException { + bottomup(); + } + }; + + // methods the downup strategy uses to do the up and down rules. + // to override, just define tree grammar rule topdown and turn on + // filter=true. + public void topdown() throws RecognitionException {;} + public void bottomup() throws RecognitionException {;} +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeIterator.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeIterator.java new file mode 100644 index 0000000..b852ade --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeIterator.java @@ -0,0 +1,131 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2008 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.runtime.Token; +import org.antlr.runtime.misc.FastQueue; + +import java.util.Iterator; + +/** Return a node stream from a doubly-linked tree whose nodes + * know what child index they are. No remove() is supported. + * + * Emit navigation nodes (DOWN, UP, and EOF) to let show tree structure. + */ +public class TreeIterator implements Iterator { + protected TreeAdaptor adaptor; + protected Object root; + protected Object tree; + protected boolean firstTime = true; + + // navigation nodes to return during walk and at end + public Object up; + public Object down; + public Object eof; + + /** If we emit UP/DOWN nodes, we need to spit out multiple nodes per + * next() call. + */ + protected FastQueue nodes; + + public TreeIterator(Object tree) { + this(new CommonTreeAdaptor(),tree); + } + + public TreeIterator(TreeAdaptor adaptor, Object tree) { + this.adaptor = adaptor; + this.tree = tree; + this.root = tree; + nodes = new FastQueue(); + down = adaptor.create(Token.DOWN, "DOWN"); + up = adaptor.create(Token.UP, "UP"); + eof = adaptor.create(Token.EOF, "EOF"); + } + + public void reset() { + firstTime = true; + tree = root; + nodes.clear(); + } + + public boolean hasNext() { + if ( firstTime ) return root!=null; + if ( nodes!=null && nodes.size()>0 ) return true; + if ( tree==null ) return false; + if ( adaptor.getChildCount(tree)>0 ) return true; + return adaptor.getParent(tree)!=null; // back at root? + } + + public Object next() { + if ( firstTime ) { // initial condition + firstTime = false; + if ( adaptor.getChildCount(tree)==0 ) { // single node tree (special) + nodes.add(eof); + return tree; + } + return tree; + } + // if any queued up, use those first + if ( nodes!=null && nodes.size()>0 ) return nodes.remove(); + + // no nodes left? + if ( tree==null ) return eof; + + // next node will be child 0 if any children + if ( adaptor.getChildCount(tree)>0 ) { + tree = adaptor.getChild(tree, 0); + nodes.add(tree); // real node is next after DOWN + return down; + } + // if no children, look for next sibling of tree or ancestor + Object parent = adaptor.getParent(tree); + // while we're out of siblings, keep popping back up towards root + while ( parent!=null && + adaptor.getChildIndex(tree)+1 >= adaptor.getChildCount(parent) ) + { + nodes.add(up); // we're moving back up + tree = parent; + parent = adaptor.getParent(tree); + } + // no nodes left? + if ( parent==null ) { + tree = null; // back at root? nothing left then + nodes.add(eof); // add to queue, might have UP nodes in there + return nodes.remove(); + } + + // must have found a node with an unvisited sibling + // move to it and return it + int nextSiblingIndex = adaptor.getChildIndex(tree) + 1; + tree = adaptor.getChild(parent, nextSiblingIndex); + nodes.add(tree); // add to queue, might have UP nodes in there + return nodes.remove(); + } + + public void remove() { throw new UnsupportedOperationException(); } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeNodeStream.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeNodeStream.java new file mode 100644 index 0000000..c26cab2 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeNodeStream.java @@ -0,0 +1,101 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2008 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.runtime.IntStream; +import org.antlr.runtime.TokenStream; + +/** A stream of tree nodes, accessing nodes from a tree of some kind */ +public interface TreeNodeStream extends IntStream { + /** Get a tree node at an absolute index i; 0..n-1. + * If you don't want to buffer up nodes, then this method makes no + * sense for you. + */ + public Object get(int i); + + /** Get tree node at current input pointer + i ahead where i=1 is next node. + * i<0 indicates nodes in the past. So LT(-1) is previous node, but + * implementations are not required to provide results for k < -1. + * LT(0) is undefined. For i>=n, return null. + * Return null for LT(0) and any index that results in an absolute address + * that is negative. + * + * This is analogus to the LT() method of the TokenStream, but this + * returns a tree node instead of a token. Makes code gen identical + * for both parser and tree grammars. :) + */ + public Object LT(int k); + + /** Where is this stream pulling nodes from? This is not the name, but + * the object that provides node objects. + */ + public Object getTreeSource(); + + /** If the tree associated with this stream was created from a TokenStream, + * you can specify it here. Used to do rule $text attribute in tree + * parser. Optional unless you use tree parser rule text attribute + * or output=template and rewrite=true options. + */ + public TokenStream getTokenStream(); + + /** What adaptor can tell me how to interpret/navigate nodes and + * trees. E.g., get text of a node. + */ + public TreeAdaptor getTreeAdaptor(); + + /** As we flatten the tree, we use UP, DOWN nodes to represent + * the tree structure. When debugging we need unique nodes + * so we have to instantiate new ones. When doing normal tree + * parsing, it's slow and a waste of memory to create unique + * navigation nodes. Default should be false; + */ + public void setUniqueNavigationNodes(boolean uniqueNavigationNodes); + + /** Return the text of all nodes from start to stop, inclusive. + * If the stream does not buffer all the nodes then it can still + * walk recursively from start until stop. You can always return + * null or "" too, but users should not access $ruleLabel.text in + * an action of course in that case. + */ + public String toString(Object start, Object stop); + + + // REWRITING TREES (used by tree parser) + + /** Replace from start to stop child index of parent with t, which might + * be a list. Number of children may be different + * after this call. The stream is notified because it is walking the + * tree and might need to know you are monkeying with the underlying + * tree. Also, it might be able to modify the node stream to avoid + * restreaming for future phases. + * + * If parent is null, don't do anything; must be at root of overall tree. + * Can't replace whatever points to the parent externally. Do nothing. + */ + public void replaceChildren(Object parent, int startChildIndex, int stopChildIndex, Object t); +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeParser.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeParser.java new file mode 100644 index 0000000..c02fd98 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeParser.java @@ -0,0 +1,168 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.runtime.*; + +import java.util.regex.Pattern; +import java.util.regex.Matcher; + +/** A parser for a stream of tree nodes. "tree grammars" result in a subclass + * of this. All the error reporting and recovery is shared with Parser via + * the BaseRecognizer superclass. +*/ +public class TreeParser extends BaseRecognizer { + public static final int DOWN = Token.DOWN; + public static final int UP = Token.UP; + + // precompiled regex used by inContext + static String dotdot = ".*[^.]\\.\\.[^.].*"; + static String doubleEtc = ".*\\.\\.\\.\\s+\\.\\.\\..*"; + static Pattern dotdotPattern = Pattern.compile(dotdot); + static Pattern doubleEtcPattern = Pattern.compile(doubleEtc); + + protected TreeNodeStream input; + + public TreeParser(TreeNodeStream input) { + super(); // highlight that we go to super to set state object + setTreeNodeStream(input); + } + + public TreeParser(TreeNodeStream input, RecognizerSharedState state) { + super(state); // share the state object with another parser + setTreeNodeStream(input); + } + + public void reset() { + super.reset(); // reset all recognizer state variables + if ( input!=null ) { + input.seek(0); // rewind the input + } + } + + /** Set the input stream */ + public void setTreeNodeStream(TreeNodeStream input) { + this.input = input; + } + + public TreeNodeStream getTreeNodeStream() { + return input; + } + + public String getSourceName() { + return input.getSourceName(); + } + + protected Object getCurrentInputSymbol(IntStream input) { + return ((TreeNodeStream)input).LT(1); + } + + protected Object getMissingSymbol(IntStream input, + RecognitionException e, + int expectedTokenType, + BitSet follow) + { + String tokenText = + "<missing "+getTokenNames()[expectedTokenType]+">"; + return new CommonTree(new CommonToken(expectedTokenType, tokenText)); + } + + /** Match '.' in tree parser has special meaning. Skip node or + * entire tree if node has children. If children, scan until + * corresponding UP node. + */ + public void matchAny(IntStream ignore) { // ignore stream, copy of input + state.errorRecovery = false; + state.failed = false; + Object look = input.LT(1); + if ( input.getTreeAdaptor().getChildCount(look)==0 ) { + input.consume(); // not subtree, consume 1 node and return + return; + } + // current node is a subtree, skip to corresponding UP. + // must count nesting level to get right UP + int level=0; + int tokenType = input.getTreeAdaptor().getType(look); + while ( tokenType!=Token.EOF && !(tokenType==UP && level==0) ) { + input.consume(); + look = input.LT(1); + tokenType = input.getTreeAdaptor().getType(look); + if ( tokenType == DOWN ) { + level++; + } + else if ( tokenType == UP ) { + level--; + } + } + input.consume(); // consume UP + } + + /** We have DOWN/UP nodes in the stream that have no line info; override. + * plus we want to alter the exception type. Don't try to recover + * from tree parser errors inline... + */ + protected Object recoverFromMismatchedToken(IntStream input, + int ttype, + BitSet follow) + throws RecognitionException + { + throw new MismatchedTreeNodeException(ttype, (TreeNodeStream)input); + } + + /** Prefix error message with the grammar name because message is + * always intended for the programmer because the parser built + * the input tree not the user. + */ + public String getErrorHeader(RecognitionException e) { + return getGrammarFileName()+": node from "+ + (e.approximateLineInfo?"after ":"")+"line "+e.line+":"+e.charPositionInLine; + } + + /** Tree parsers parse nodes they usually have a token object as + * payload. Set the exception token and do the default behavior. + */ + public String getErrorMessage(RecognitionException e, String[] tokenNames) { + if ( this instanceof TreeParser ) { + TreeAdaptor adaptor = ((TreeNodeStream)e.input).getTreeAdaptor(); + e.token = adaptor.getToken(e.node); + if ( e.token==null ) { // could be an UP/DOWN node + e.token = new CommonToken(adaptor.getType(e.node), + adaptor.getText(e.node)); + } + } + return super.getErrorMessage(e, tokenNames); + } + + public void traceIn(String ruleName, int ruleIndex) { + super.traceIn(ruleName, ruleIndex, input.LT(1)); + } + + public void traceOut(String ruleName, int ruleIndex) { + super.traceOut(ruleName, ruleIndex, input.LT(1)); + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreePatternLexer.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreePatternLexer.java new file mode 100644 index 0000000..6f9cabf --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreePatternLexer.java @@ -0,0 +1,135 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +public class TreePatternLexer { + public static final int EOF = -1; + public static final int BEGIN = 1; + public static final int END = 2; + public static final int ID = 3; + public static final int ARG = 4; + public static final int PERCENT = 5; + public static final int COLON = 6; + public static final int DOT = 7; + + /** The tree pattern to lex like "(A B C)" */ + protected String pattern; + + /** Index into input string */ + protected int p = -1; + + /** Current char */ + protected int c; + + /** How long is the pattern in char? */ + protected int n; + + /** Set when token type is ID or ARG (name mimics Java's StreamTokenizer) */ + public StringBuffer sval = new StringBuffer(); + + public boolean error = false; + + public TreePatternLexer(String pattern) { + this.pattern = pattern; + this.n = pattern.length(); + consume(); + } + + public int nextToken() { + sval.setLength(0); // reset, but reuse buffer + while ( c != EOF ) { + if ( c==' ' || c=='\n' || c=='\r' || c=='\t' ) { + consume(); + continue; + } + if ( (c>='a' && c<='z') || (c>='A' && c<='Z') || c=='_' ) { + sval.append((char)c); + consume(); + while ( (c>='a' && c<='z') || (c>='A' && c<='Z') || + (c>='0' && c<='9') || c=='_' ) + { + sval.append((char)c); + consume(); + } + return ID; + } + if ( c=='(' ) { + consume(); + return BEGIN; + } + if ( c==')' ) { + consume(); + return END; + } + if ( c=='%' ) { + consume(); + return PERCENT; + } + if ( c==':' ) { + consume(); + return COLON; + } + if ( c=='.' ) { + consume(); + return DOT; + } + if ( c=='[' ) { // grab [x] as a string, returning x + consume(); + while ( c!=']' ) { + if ( c=='\\' ) { + consume(); + if ( c!=']' ) { + sval.append('\\'); + } + sval.append((char)c); + } + else { + sval.append((char)c); + } + consume(); + } + consume(); + return ARG; + } + consume(); + error = true; + return EOF; + } + return EOF; + } + + protected void consume() { + p++; + if ( p>=n ) { + c = EOF; + } + else { + c = pattern.charAt(p); + } + } +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreePatternParser.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreePatternParser.java new file mode 100644 index 0000000..a0e8984 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreePatternParser.java @@ -0,0 +1,156 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.runtime.Token; +import org.antlr.runtime.CommonToken; + +public class TreePatternParser { + protected TreePatternLexer tokenizer; + protected int ttype; + protected TreeWizard wizard; + protected TreeAdaptor adaptor; + + public TreePatternParser(TreePatternLexer tokenizer, TreeWizard wizard, TreeAdaptor adaptor) { + this.tokenizer = tokenizer; + this.wizard = wizard; + this.adaptor = adaptor; + ttype = tokenizer.nextToken(); // kickstart + } + + public Object pattern() { + if ( ttype==TreePatternLexer.BEGIN ) { + return parseTree(); + } + else if ( ttype==TreePatternLexer.ID ) { + Object node = parseNode(); + if ( ttype==TreePatternLexer.EOF ) { + return node; + } + return null; // extra junk on end + } + return null; + } + + public Object parseTree() { + if ( ttype != TreePatternLexer.BEGIN ) { + System.out.println("no BEGIN"); + return null; + } + ttype = tokenizer.nextToken(); + Object root = parseNode(); + if ( root==null ) { + return null; + } + while ( ttype==TreePatternLexer.BEGIN || + ttype==TreePatternLexer.ID || + ttype==TreePatternLexer.PERCENT || + ttype==TreePatternLexer.DOT ) + { + if ( ttype==TreePatternLexer.BEGIN ) { + Object subtree = parseTree(); + adaptor.addChild(root, subtree); + } + else { + Object child = parseNode(); + if ( child==null ) { + return null; + } + adaptor.addChild(root, child); + } + } + if ( ttype != TreePatternLexer.END ) { + System.out.println("no END"); + return null; + } + ttype = tokenizer.nextToken(); + return root; + } + + public Object parseNode() { + // "%label:" prefix + String label = null; + if ( ttype == TreePatternLexer.PERCENT ) { + ttype = tokenizer.nextToken(); + if ( ttype != TreePatternLexer.ID ) { + return null; + } + label = tokenizer.sval.toString(); + ttype = tokenizer.nextToken(); + if ( ttype != TreePatternLexer.COLON ) { + return null; + } + ttype = tokenizer.nextToken(); // move to ID following colon + } + + // Wildcard? + if ( ttype == TreePatternLexer.DOT ) { + ttype = tokenizer.nextToken(); + Token wildcardPayload = new CommonToken(0, "."); + TreeWizard.TreePattern node = + new TreeWizard.WildcardTreePattern(wildcardPayload); + if ( label!=null ) { + node.label = label; + } + return node; + } + + // "ID" or "ID[arg]" + if ( ttype != TreePatternLexer.ID ) { + return null; + } + String tokenName = tokenizer.sval.toString(); + ttype = tokenizer.nextToken(); + if ( tokenName.equals("nil") ) { + return adaptor.nil(); + } + String text = tokenName; + // check for arg + String arg = null; + if ( ttype == TreePatternLexer.ARG ) { + arg = tokenizer.sval.toString(); + text = arg; + ttype = tokenizer.nextToken(); + } + + // create node + int treeNodeType = wizard.getTokenType(tokenName); + if ( treeNodeType==Token.INVALID_TOKEN_TYPE ) { + return null; + } + Object node; + node = adaptor.create(treeNodeType, text); + if ( label!=null && node.getClass()==TreeWizard.TreePattern.class ) { + ((TreeWizard.TreePattern)node).label = label; + } + if ( arg!=null && node.getClass()==TreeWizard.TreePattern.class ) { + ((TreeWizard.TreePattern)node).hasTextArg = true; + } + return node; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeRewriter.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeRewriter.java new file mode 100644 index 0000000..723ef53 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeRewriter.java @@ -0,0 +1,106 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.runtime.RecognizerSharedState; +import org.antlr.runtime.RecognitionException; +import org.antlr.runtime.TokenStream; + +public class TreeRewriter extends TreeParser { + public interface fptr { + public Object rule() throws RecognitionException; + } + + protected TokenStream originalTokenStream; + protected TreeAdaptor originalAdaptor; + + public TreeRewriter(TreeNodeStream input) { + super(input); + } + public TreeRewriter(TreeNodeStream input, RecognizerSharedState state) { + super(input, state); + originalAdaptor = input.getTreeAdaptor(); + originalTokenStream = input.getTokenStream(); + } + + public Object applyOnce(Object t, fptr whichRule) { + if ( t==null ) return null; + try { + // share TreeParser object but not parsing-related state + state = new RecognizerSharedState(); + input = new CommonTreeNodeStream(originalAdaptor, t); + ((CommonTreeNodeStream)input).setTokenStream(originalTokenStream); + setBacktrackingLevel(1); + TreeRuleReturnScope r = (TreeRuleReturnScope)whichRule.rule(); + setBacktrackingLevel(0); + if ( failed() ) return t; + if ( r!=null && !t.equals(r.getTree()) && r.getTree()!=null ) { // show any transformations + System.out.println(((CommonTree)t).toStringTree()+" -> "+ + ((CommonTree)r.getTree()).toStringTree()); + } + if ( r!=null && r.getTree()!=null ) return r.getTree(); + else return t; + } + catch (RecognitionException e) { ; } + return t; + } + + public Object applyRepeatedly(Object t, fptr whichRule) { + boolean treeChanged = true; + while ( treeChanged ) { + Object u = applyOnce(t, whichRule); + treeChanged = !t.equals(u); + t = u; + } + return t; + } + + public Object downup(Object t) { + TreeVisitor v = new TreeVisitor(new CommonTreeAdaptor()); + TreeVisitorAction actions = new TreeVisitorAction() { + public Object pre(Object t) { return applyOnce(t, topdown_fptr); } + public Object post(Object t) { return applyRepeatedly(t, bottomup_ftpr); } + }; + t = v.visit(t, actions); + return t; + } + + fptr topdown_fptr = new fptr() { + public Object rule() throws RecognitionException { return topdown(); } + }; + + fptr bottomup_ftpr = new fptr() { + public Object rule() throws RecognitionException { return bottomup(); } + }; + + // methods the downup strategy uses to do the up and down rules. + // to override, just define tree grammar rule topdown and turn on + // filter=true. + public Object topdown() throws RecognitionException { return null; } + public Object bottomup() throws RecognitionException { return null; } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeRuleReturnScope.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeRuleReturnScope.java new file mode 100644 index 0000000..ffe0d93 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeRuleReturnScope.java @@ -0,0 +1,41 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.runtime.RuleReturnScope; + +/** This is identical to the ParserRuleReturnScope except that + * the start property is a tree nodes not Token object + * when you are parsing trees. To be generic the tree node types + * have to be Object. + */ +public class TreeRuleReturnScope extends RuleReturnScope { + /** First node or root node of tree matched for this rule. */ + public Object start; + public Object getStart() { return start; } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeVisitor.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeVisitor.java new file mode 100644 index 0000000..04a8b48 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeVisitor.java @@ -0,0 +1,42 @@ +package org.antlr.runtime.tree; + +/** Do a depth first walk of a tree, applying pre() and post() actions + * as we discover and finish nodes. + */ +public class TreeVisitor { + protected TreeAdaptor adaptor; + + public TreeVisitor(TreeAdaptor adaptor) { + this.adaptor = adaptor; + } + public TreeVisitor() { this(new CommonTreeAdaptor()); } + + /** Visit every node in tree t and trigger an action for each node + * before/after having visited all of its children. + * Execute both actions even if t has no children. + * If a child visit yields a new child, it can update its + * parent's child list or just return the new child. The + * child update code works even if the child visit alters its parent + * and returns the new tree. + * + * Return result of applying post action to this node. + */ + public Object visit(Object t, TreeVisitorAction action) { + // System.out.println("visit "+((Tree)t).toStringTree()); + boolean isNil = adaptor.isNil(t); + if ( action!=null && !isNil ) { + t = action.pre(t); // if rewritten, walk children of new t + } + int n = adaptor.getChildCount(t); + for (int i=0; i<n; i++) { + Object child = adaptor.getChild(t, i); + Object visitResult = visit(child, action); + Object childAfterVisit = adaptor.getChild(t, i); + if ( visitResult != childAfterVisit ) { // result & child differ? + adaptor.setChild(t, i, visitResult); + } + } + if ( action!=null && !isNil ) t = action.post(t); + return t; + } +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeVisitorAction.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeVisitorAction.java new file mode 100644 index 0000000..5d02d42 --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeVisitorAction.java @@ -0,0 +1,19 @@ +package org.antlr.runtime.tree; + +/** How to execute code for node t when a visitor visits node t. Execute + * pre() before visiting children and execute post() after visiting children. + */ +public interface TreeVisitorAction { + /** Execute an action before visiting children of t. Return t or + * a rewritten t. It is up to the visitor to decide what to do + * with the return value. Children of returned value will be + * visited if using TreeVisitor.visit(). + */ + public Object pre(Object t); + + /** Execute an action after visiting children of t. Return t or + * a rewritten t. It is up to the visitor to decide what to do + * with the return value. + */ + public Object post(Object t); +} diff --git a/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeWizard.java b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeWizard.java new file mode 100644 index 0000000..5172ede --- /dev/null +++ b/antlr-3.1.3/runtime/Java/src/main/java/org/antlr/runtime/tree/TreeWizard.java @@ -0,0 +1,528 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.runtime.tree; + +import org.antlr.runtime.Token; + +import java.util.*; + +/** Build and navigate trees with this object. Must know about the names + * of tokens so you have to pass in a map or array of token names (from which + * this class can build the map). I.e., Token DECL means nothing unless the + * class can translate it to a token type. + * + * In order to create nodes and navigate, this class needs a TreeAdaptor. + * + * This class can build a token type -> node index for repeated use or for + * iterating over the various nodes with a particular type. + * + * This class works in conjunction with the TreeAdaptor rather than moving + * all this functionality into the adaptor. An adaptor helps build and + * navigate trees using methods. This class helps you do it with string + * patterns like "(A B C)". You can create a tree from that pattern or + * match subtrees against it. + */ +public class TreeWizard { + protected TreeAdaptor adaptor; + protected Map tokenNameToTypeMap; + + public interface ContextVisitor { + // TODO: should this be called visit or something else? + public void visit(Object t, Object parent, int childIndex, Map labels); + } + + public static abstract class Visitor implements ContextVisitor { + public void visit(Object t, Object parent, int childIndex, Map labels) { + visit(t); + } + public abstract void visit(Object t); + } + + /** When using %label:TOKENNAME in a tree for parse(), we must + * track the label. + */ + public static class TreePattern extends CommonTree { + public String label; + public boolean hasTextArg; + public TreePattern(Token payload) { + super(payload); + } + public String toString() { + if ( label!=null ) { + return "%"+label+":"+super.toString(); + } + else { + return super.toString(); + } + } + } + + public static class WildcardTreePattern extends TreePattern { + public WildcardTreePattern(Token payload) { + super(payload); + } + } + + /** This adaptor creates TreePattern objects for use during scan() */ + public static class TreePatternTreeAdaptor extends CommonTreeAdaptor { + public Object create(Token payload) { + return new TreePattern(payload); + } + } + + // TODO: build indexes for the wizard + + /** During fillBuffer(), we can make a reverse index from a set + * of token types of interest to the list of indexes into the + * node stream. This lets us convert a node pointer to a + * stream index semi-efficiently for a list of interesting + * nodes such as function definition nodes (you'll want to seek + * to their bodies for an interpreter). Also useful for doing + * dynamic searches; i.e., go find me all PLUS nodes. + protected Map tokenTypeToStreamIndexesMap; + + /** If tokenTypesToReverseIndex set to INDEX_ALL then indexing + * occurs for all token types. + public static final Set INDEX_ALL = new HashSet(); + + /** A set of token types user would like to index for faster lookup. + * If this is INDEX_ALL, then all token types are tracked. If null, + * then none are indexed. + protected Set tokenTypesToReverseIndex = null; + */ + + public TreeWizard(TreeAdaptor adaptor) { + this.adaptor = adaptor; + } + + public TreeWizard(TreeAdaptor adaptor, Map tokenNameToTypeMap) { + this.adaptor = adaptor; + this.tokenNameToTypeMap = tokenNameToTypeMap; + } + + public TreeWizard(TreeAdaptor adaptor, String[] tokenNames) { + this.adaptor = adaptor; + this.tokenNameToTypeMap = computeTokenTypes(tokenNames); + } + + public TreeWizard(String[] tokenNames) { + this(null, tokenNames); + } + + /** Compute a Map<String, Integer> that is an inverted index of + * tokenNames (which maps int token types to names). + */ + public Map computeTokenTypes(String[] tokenNames) { + Map m = new HashMap(); + if ( tokenNames==null ) { + return m; + } + for (int ttype = Token.MIN_TOKEN_TYPE; ttype < tokenNames.length; ttype++) { + String name = tokenNames[ttype]; + m.put(name, new Integer(ttype)); + } + return m; + } + + /** Using the map of token names to token types, return the type. */ + public int getTokenType(String tokenName) { + if ( tokenNameToTypeMap==null ) { + return Token.INVALID_TOKEN_TYPE; + } + Integer ttypeI = (Integer)tokenNameToTypeMap.get(tokenName); + if ( ttypeI!=null ) { + return ttypeI.intValue(); + } + return Token.INVALID_TOKEN_TYPE; + } + + /** Walk the entire tree and make a node name to nodes mapping. + * For now, use recursion but later nonrecursive version may be + * more efficient. Returns Map<Integer, List> where the List is + * of your AST node type. The Integer is the token type of the node. + * + * TODO: save this index so that find and visit are faster + */ + public Map index(Object t) { + Map m = new HashMap(); + _index(t, m); + return m; + } + + /** Do the work for index */ + protected void _index(Object t, Map m) { + if ( t==null ) { + return; + } + int ttype = adaptor.getType(t); + List elements = (List)m.get(new Integer(ttype)); + if ( elements==null ) { + elements = new ArrayList(); + m.put(new Integer(ttype), elements); + } + elements.add(t); + int n = adaptor.getChildCount(t); + for (int i=0; i<n; i++) { + Object child = adaptor.getChild(t, i); + _index(child, m); + } + } + + /** Return a List of tree nodes with token type ttype */ + public List find(Object t, int ttype) { + final List nodes = new ArrayList(); + visit(t, ttype, new TreeWizard.Visitor() { + public void visit(Object t) { + nodes.add(t); + } + }); + return nodes; + } + + /** Return a List of subtrees matching pattern. */ + public List find(Object t, String pattern) { + final List subtrees = new ArrayList(); + // Create a TreePattern from the pattern + TreePatternLexer tokenizer = new TreePatternLexer(pattern); + TreePatternParser parser = + new TreePatternParser(tokenizer, this, new TreePatternTreeAdaptor()); + final TreePattern tpattern = (TreePattern)parser.pattern(); + // don't allow invalid patterns + if ( tpattern==null || + tpattern.isNil() || + tpattern.getClass()==WildcardTreePattern.class ) + { + return null; + } + int rootTokenType = tpattern.getType(); + visit(t, rootTokenType, new TreeWizard.ContextVisitor() { + public void visit(Object t, Object parent, int childIndex, Map labels) { + if ( _parse(t, tpattern, null) ) { + subtrees.add(t); + } + } + }); + return subtrees; + } + + public Object findFirst(Object t, int ttype) { + return null; + } + + public Object findFirst(Object t, String pattern) { + return null; + } + + /** Visit every ttype node in t, invoking the visitor. This is a quicker + * version of the general visit(t, pattern) method. The labels arg + * of the visitor action method is never set (it's null) since using + * a token type rather than a pattern doesn't let us set a label. + */ + public void visit(Object t, int ttype, ContextVisitor visitor) { + _visit(t, null, 0, ttype, visitor); + } + + /** Do the recursive work for visit */ + protected void _visit(Object t, Object parent, int childIndex, int ttype, ContextVisitor visitor) { + if ( t==null ) { + return; + } + if ( adaptor.getType(t)==ttype ) { + visitor.visit(t, parent, childIndex, null); + } + int n = adaptor.getChildCount(t); + for (int i=0; i<n; i++) { + Object child = adaptor.getChild(t, i); + _visit(child, t, i, ttype, visitor); + } + } + + /** For all subtrees that match the pattern, execute the visit action. + * The implementation uses the root node of the pattern in combination + * with visit(t, ttype, visitor) so nil-rooted patterns are not allowed. + * Patterns with wildcard roots are also not allowed. + */ + public void visit(Object t, final String pattern, final ContextVisitor visitor) { + // Create a TreePattern from the pattern + TreePatternLexer tokenizer = new TreePatternLexer(pattern); + TreePatternParser parser = + new TreePatternParser(tokenizer, this, new TreePatternTreeAdaptor()); + final TreePattern tpattern = (TreePattern)parser.pattern(); + // don't allow invalid patterns + if ( tpattern==null || + tpattern.isNil() || + tpattern.getClass()==WildcardTreePattern.class ) + { + return; + } + final Map labels = new HashMap(); // reused for each _parse + int rootTokenType = tpattern.getType(); + visit(t, rootTokenType, new TreeWizard.ContextVisitor() { + public void visit(Object t, Object parent, int childIndex, Map unusedlabels) { + // the unusedlabels arg is null as visit on token type doesn't set. + labels.clear(); + if ( _parse(t, tpattern, labels) ) { + visitor.visit(t, parent, childIndex, labels); + } + } + }); + } + + /** Given a pattern like (ASSIGN %lhs:ID %rhs:.) with optional labels + * on the various nodes and '.' (dot) as the node/subtree wildcard, + * return true if the pattern matches and fill the labels Map with + * the labels pointing at the appropriate nodes. Return false if + * the pattern is malformed or the tree does not match. + * + * If a node specifies a text arg in pattern, then that must match + * for that node in t. + * + * TODO: what's a better way to indicate bad pattern? Exceptions are a hassle + */ + public boolean parse(Object t, String pattern, Map labels) { + TreePatternLexer tokenizer = new TreePatternLexer(pattern); + TreePatternParser parser = + new TreePatternParser(tokenizer, this, new TreePatternTreeAdaptor()); + TreePattern tpattern = (TreePattern)parser.pattern(); + /* + System.out.println("t="+((Tree)t).toStringTree()); + System.out.println("scant="+tpattern.toStringTree()); + */ + boolean matched = _parse(t, tpattern, labels); + return matched; + } + + public boolean parse(Object t, String pattern) { + return parse(t, pattern, null); + } + + /** Do the work for parse. Check to see if the t2 pattern fits the + * structure and token types in t1. Check text if the pattern has + * text arguments on nodes. Fill labels map with pointers to nodes + * in tree matched against nodes in pattern with labels. + */ + protected boolean _parse(Object t1, TreePattern tpattern, Map labels) { + // make sure both are non-null + if ( t1==null || tpattern==null ) { + return false; + } + // check roots (wildcard matches anything) + if ( tpattern.getClass() != WildcardTreePattern.class ) { + if ( adaptor.getType(t1) != tpattern.getType() ) return false; + // if pattern has text, check node text + if ( tpattern.hasTextArg && !adaptor.getText(t1).equals(tpattern.getText()) ) { + return false; + } + } + if ( tpattern.label!=null && labels!=null ) { + // map label in pattern to node in t1 + labels.put(tpattern.label, t1); + } + // check children + int n1 = adaptor.getChildCount(t1); + int n2 = tpattern.getChildCount(); + if ( n1 != n2 ) { + return false; + } + for (int i=0; i<n1; i++) { + Object child1 = adaptor.getChild(t1, i); + TreePattern child2 = (TreePattern)tpattern.getChild(i); + if ( !_parse(child1, child2, labels) ) { + return false; + } + } + return true; + } + + /** Create a tree or node from the indicated tree pattern that closely + * follows ANTLR tree grammar tree element syntax: + * + * (root child1 ... child2). + * + * You can also just pass in a node: ID + * + * Any node can have a text argument: ID[foo] + * (notice there are no quotes around foo--it's clear it's a string). + * + * nil is a special name meaning "give me a nil node". Useful for + * making lists: (nil A B C) is a list of A B C. + */ + public Object create(String pattern) { + TreePatternLexer tokenizer = new TreePatternLexer(pattern); + TreePatternParser parser = new TreePatternParser(tokenizer, this, adaptor); + Object t = parser.pattern(); + return t; + } + + /** Compare t1 and t2; return true if token types/text, structure match exactly. + * The trees are examined in their entirety so that (A B) does not match + * (A B C) nor (A (B C)). + // TODO: allow them to pass in a comparator + * TODO: have a version that is nonstatic so it can use instance adaptor + * + * I cannot rely on the tree node's equals() implementation as I make + * no constraints at all on the node types nor interface etc... + */ + public static boolean equals(Object t1, Object t2, TreeAdaptor adaptor) { + return _equals(t1, t2, adaptor); + } + + /** Compare type, structure, and text of two trees, assuming adaptor in + * this instance of a TreeWizard. + */ + public boolean equals(Object t1, Object t2) { + return _equals(t1, t2, adaptor); + } + + protected static boolean _equals(Object t1, Object t2, TreeAdaptor adaptor) { + // make sure both are non-null + if ( t1==null || t2==null ) { + return false; + } + // check roots + if ( adaptor.getType(t1) != adaptor.getType(t2) ) { + return false; + } + if ( !adaptor.getText(t1).equals(adaptor.getText(t2)) ) { + return false; + } + // check children + int n1 = adaptor.getChildCount(t1); + int n2 = adaptor.getChildCount(t2); + if ( n1 != n2 ) { + return false; + } + for (int i=0; i<n1; i++) { + Object child1 = adaptor.getChild(t1, i); + Object child2 = adaptor.getChild(t2, i); + if ( !_equals(child1, child2, adaptor) ) { + return false; + } + } + return true; + } + + // TODO: next stuff taken from CommonTreeNodeStream + + /** Given a node, add this to the reverse index tokenTypeToStreamIndexesMap. + * You can override this method to alter how indexing occurs. The + * default is to create a + * + * Map<Integer token type,ArrayList<Integer stream index>> + * + * This data structure allows you to find all nodes with type INT in order. + * + * If you really need to find a node of type, say, FUNC quickly then perhaps + * + * Map<Integertoken type,Map<Object tree node,Integer stream index>> + * + * would be better for you. The interior maps map a tree node to + * the index so you don't have to search linearly for a specific node. + * + * If you change this method, you will likely need to change + * getNodeIndex(), which extracts information. + protected void fillReverseIndex(Object node, int streamIndex) { + //System.out.println("revIndex "+node+"@"+streamIndex); + if ( tokenTypesToReverseIndex==null ) { + return; // no indexing if this is empty (nothing of interest) + } + if ( tokenTypeToStreamIndexesMap==null ) { + tokenTypeToStreamIndexesMap = new HashMap(); // first indexing op + } + int tokenType = adaptor.getType(node); + Integer tokenTypeI = new Integer(tokenType); + if ( !(tokenTypesToReverseIndex==INDEX_ALL || + tokenTypesToReverseIndex.contains(tokenTypeI)) ) + { + return; // tokenType not of interest + } + Integer streamIndexI = new Integer(streamIndex); + ArrayList indexes = (ArrayList)tokenTypeToStreamIndexesMap.get(tokenTypeI); + if ( indexes==null ) { + indexes = new ArrayList(); // no list yet for this token type + indexes.add(streamIndexI); // not there yet, add + tokenTypeToStreamIndexesMap.put(tokenTypeI, indexes); + } + else { + if ( !indexes.contains(streamIndexI) ) { + indexes.add(streamIndexI); // not there yet, add + } + } + } + + /** Track the indicated token type in the reverse index. Call this + * repeatedly for each type or use variant with Set argument to + * set all at once. + * @param tokenType + public void reverseIndex(int tokenType) { + if ( tokenTypesToReverseIndex==null ) { + tokenTypesToReverseIndex = new HashSet(); + } + else if ( tokenTypesToReverseIndex==INDEX_ALL ) { + return; + } + tokenTypesToReverseIndex.add(new Integer(tokenType)); + } + + /** Track the indicated token types in the reverse index. Set + * to INDEX_ALL to track all token types. + public void reverseIndex(Set tokenTypes) { + tokenTypesToReverseIndex = tokenTypes; + } + + /** Given a node pointer, return its index into the node stream. + * This is not its Token stream index. If there is no reverse map + * from node to stream index or the map does not contain entries + * for node's token type, a linear search of entire stream is used. + * + * Return -1 if exact node pointer not in stream. + public int getNodeIndex(Object node) { + //System.out.println("get "+node); + if ( tokenTypeToStreamIndexesMap==null ) { + return getNodeIndexLinearly(node); + } + int tokenType = adaptor.getType(node); + Integer tokenTypeI = new Integer(tokenType); + ArrayList indexes = (ArrayList)tokenTypeToStreamIndexesMap.get(tokenTypeI); + if ( indexes==null ) { + //System.out.println("found linearly; stream index = "+getNodeIndexLinearly(node)); + return getNodeIndexLinearly(node); + } + for (int i = 0; i < indexes.size(); i++) { + Integer streamIndexI = (Integer)indexes.get(i); + Object n = get(streamIndexI.intValue()); + if ( n==node ) { + //System.out.println("found in index; stream index = "+streamIndexI); + return streamIndexI.intValue(); // found it! + } + } + return -1; + } + + */ +} diff --git a/antlr-3.1.3/runtime/JavaScript/AUTHORS b/antlr-3.1.3/runtime/JavaScript/AUTHORS new file mode 100755 index 0000000..4abcdb2 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/AUTHORS @@ -0,0 +1,3 @@ +Joscha Feth <joscha at feth dot com>: Contributor +Joseph Hurst <jhurstus at gmail dot com>: Maintainer +Jeff Saremi <jeffsaremi at yahoo dot com>: Contributor diff --git a/antlr-3.1.3/runtime/JavaScript/ChangeLog b/antlr-3.1.3/runtime/JavaScript/ChangeLog new file mode 100755 index 0000000..a80e29d --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/ChangeLog @@ -0,0 +1,2 @@ +0.0.1 + - First release! diff --git a/antlr-3.1.3/runtime/JavaScript/build/README b/antlr-3.1.3/runtime/JavaScript/build/README new file mode 100755 index 0000000..89c4963 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/build/README @@ -0,0 +1,22 @@ +### DEPENDENCIES ### +For detailed build instructions see: +http://code.google.com/p/antlr-javascript/wiki/BuildingANTLRJavaScriptTarget + +Before building the JavaScript target you will need to download a few third +party open source libraries: + + * ant-contrib: Download ant-contrib here: http://downloads.sourceforge.net/ant-contrib/ant-contrib-1.0b3-bin.zip?modtime=1162486738&big_mirror=0 + * Unzip the downloaded file. + * Move ant-contrib-1.0b3.jar from the unzipped directory to antlr-javscript/runtime/JavaScript/third/ + + * yuicompressor: Download yuicompressor here: http://www.julienlecomte.net/yuicompressor/yuicompressor-2.3.5.zip + * Unzip the downloaded file. + * Move yuicompressor-2.3.5.jar from the unzipped directory to antlr-javscript/runtime/JavaScript/third/ + + * jsdoc-toolkit: Download the latest release from here: http://code.google.com/p/jsdoc-toolkit/downloads/list + * Unzip the downloaded file. + * Move the unzipped folder to antlr-javscript/runtime/JavaScript/third/jsdoc-toolkit + + * jsunit: Download here: https://sourceforge.net/project/showfiles.php?group_id=28041&package_id=19823&release_id=404277 + * Unzip the downloaded file. + * Move the unzipped folder to antlr-javscript/runtime/JavaScript/tests/jsunit diff --git a/antlr-3.1.3/runtime/JavaScript/build/antlr3.properties b/antlr-3.1.3/runtime/JavaScript/build/antlr3.properties new file mode 100755 index 0000000..b9672f9 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/build/antlr3.properties @@ -0,0 +1,55 @@ +# license file to be placed at the beginning of each file +antlr3.license=license.txt + +# list of build targets +antlr3.list=all,cli +#,lexer,parser,lexer-parser,tree + +# the entire antlr3 library +antlr3.all.list=\ + org/antlr.js,\ + org/antlr/runtime/RecognizerSharedState.js,\ + org/antlr/runtime/IndexOutOfBoundsExceptions.js,\ + org/antlr/runtime/RecognitionException.js,\ + org/antlr/runtime/MismatchedTokenException.js,\ + org/antlr/runtime/UnwantedTokenException.js,\ + org/antlr/runtime/MissingTokenException.js,\ + org/antlr/runtime/NoViableAltException.js,\ + org/antlr/runtime/EarlyExitException.js,\ + org/antlr/runtime/MismatchedSetException.js,\ + org/antlr/runtime/MismatchedNotSetException.js,\ + org/antlr/runtime/MismatchedRangeExceptions.js,\ + org/antlr/runtime/FailedPredicateException.js,\ + org/antlr/runtime/BitSet.js,\ + org/antlr/runtime/CharStream.js,\ + org/antlr/runtime/CommonToken.js,\ + org/antlr/runtime/Token.js,\ + org/antlr/runtime/tree/RewriteCardinalityException.js,\ + org/antlr/runtime/tree/RewriteEmptyStreamException.js,\ + org/antlr/runtime/tree/RewriteEarlyExitException.js,\ + org/antlr/runtime/MismatchedTreeNodeException.js,\ + org/antlr/runtime/tree/BaseTree.js,\ + org/antlr/runtime/tree/CommonTree.js,\ + org/antlr/runtime/tree/Tree.js,\ + org/antlr/runtime/tree/CommonErrorNode.js,\ + org/antlr/runtime/tree/BaseTreeAdaptor.js,\ + org/antlr/runtime/tree/CommonTreeAdaptor.js,\ + org/antlr/runtime/ANTLRStringStream.js,\ + org/antlr/runtime/CommonTokenStream.js,\ + org/antlr/runtime/TokenRewriteStream.js,\ + org/antlr/runtime/tree/TreeNodeStream.js,\ + org/antlr/runtime/tree/CommonTreeNodeStream.js,\ + org/antlr/runtime/tree/RewriteRuleElementStream.js,\ + org/antlr/runtime/tree/RewriteRuleNodeStream.js,\ + org/antlr/runtime/tree/RewriteRuleTokenStream.js,\ + org/antlr/runtime/tree/RewriteRuleSubtreeStream.js,\ + org/antlr/runtime/BaseRecognizer.js,\ + org/antlr/runtime/Lexer.js,\ + org/antlr/runtime/ParserRuleReturnScope.js,\ + org/antlr/runtime/tree/TreeRuleReturnScope.js,\ + org/antlr/runtime/Parser.js,\ + org/antlr/runtime/DFA.js,\ + org/antlr/runtime/tree/TreeParser.js + +antlr3.cli.list=\ + org/antlr/runtime/ANTLRFileStream.js diff --git a/antlr-3.1.3/runtime/JavaScript/build/build.xml b/antlr-3.1.3/runtime/JavaScript/build/build.xml new file mode 100755 index 0000000..e916199 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/build/build.xml @@ -0,0 +1,185 @@ +<project name="Antlr3JavaScriptRuntime" basedir=".." default="build"> +<description> +Build procedure and task automation for the ANTLR JavaScript target. +</description> + + <property name="build.dir" value="${basedir}/build" /> + <property name="out.dir" value="${build.dir}/out" /> + <property name="lib.dir" value="${basedir}/lib" /> + <property name="doc.dir" value="${basedir}/doc" /> + <property name="test.dir" value="${basedir}/tests" /> + <property name="src.dir" value="${basedir}/src" /> + <property name="third.dir" value="${basedir}/third" /> + <property file="${build.dir}/antlr3.properties" /> + <property name="examples.dir" value="${basedir}/examples" /> + + <taskdef file="${third.dir}/antcontrib.properties" classpath="${third.dir}/ant-contrib-1.0b3.jar" /> + + <!-- classpath to get the (development) antlr tool running --> + <path id="antlrToolCP"> + <pathelement location="../../lib/stringtemplate-3.2.jar"/> + <pathelement location="../../lib/antlr-2.7.7.jar"/> + <pathelement location="../../src"/> + <pathelement location="../Java/src"/> + </path> + + <!-- ******* --> + <!-- LIBRARY --> + <!-- ******* --> + + <target name="build" depends="-init" description="Build ANTLR JavaScript runtime library."> + <antcall target="-make-debug" /> + <antcall target="-make-min" /> + <!--<antcall target="-make-docs" />--> + <antcall target="-del-build" /> + </target> + + <!-- Make uncompressed JS runtime files --> + <target name="-make-debug"> + <!-- no file name suffix for debug files --> + <property name="debugormin" value="" /> + <antcall target="-make-packages" inheritall="true" /> + </target> + + <!-- Make compressed JS files --> + <target name="-make-min"> + <property name="debugormin" value="-min" /> + <antcall target="-make-packages" inheritall="true" /> + </target> + + <!-- Make each package defined in atlr3.list --> + <target name="-make-packages"> + <property name="pkg" value="" /> + <foreach list="${antlr3.list}" target="-make-package" param="pkg" inheritall="true" /> + </target> + + <!-- Create a package --> + <target name="-make-package"> + <var name="package" value="${pkg}" /> + <property name="dest" value="${lib.dir}/antlr3-${package}${debugormin}.js" /> + <propertycopy property="list" from="antlr3.${package}.list" override="true" /> + <propertyregex property="list" input="${list}" regexp=" +" replace="" override="true" /> + + <concat destfile="${dest}"> + <filelist dir="${src.dir}" files="${list}" /> + </concat> + + <if> + <equals arg1="${debugormin}" arg2="-min" /> + <then> + <antcall target="-compress" inheritall="true" /> + </then> + </if> + + <antcall target="-add-license" inheritall="true" /> + </target> + + <!-- Compress JavaScript using YUICompressor --> + <target name="-compress"> + <java fork="true" jar="${third.dir}/yuicompressor-2.3.5.jar"> + <arg line="-o ${dest}" /> + <arg value="${dest}" /> + </java> + </target> + + <!-- insert required legaleze at the top of a file --> + <target name="-add-license"> + <property name="tmp-file" value="${dest}.tmp" /> + <move file="${dest}" tofile="${tmp-file}" /> + <concat destfile="${dest}"> + <header file="${build.dir}/${antlr3.license}" /> + <fileset file="${tmp-file}" /> + </concat> + <delete file="${tmp-file}" /> + </target> + + <!-- delete build directory --> + <target name="-del-build"> + <delete dir="${out.dir}" /> + </target> + + <!-- ***** --> + <!-- TESTS --> + <!-- ***** --> + + <target name="compile-tests" depends="build" description="Compile all test grammars."> + <foreach target="-compile-test-class" param="testdirectory" inheritall="true"> + <path> + <dirset dir="${test.dir}" includes="*" excludes="README" /> + </path> + </foreach> + </target> + + <target name="-compile-test-class" > + <foreach target="-compile-single-test" param="grammar" inheritall="true"> + <path> + <fileset dir="${testdirectory}" includes="*.g" excludes="*__.g" /> + </path> + </foreach> + </target> + + <target name="-compile-single-test"> + <!-- turn on antlr tracing if necessary --> + <var name="g" value="${grammar}" /> + <loadfile property="g-contents" srcfile="${g}" /> + <var name="opt" value="" /> + <property name="trace-key" value="// @@ANTLR Tool Options@@: -trace" /> + <if> + <contains string="${g-contents}" substring="${trace-key}" /> + <then> + <var name="opt" value="-trace" /> + </then> + </if> + + <java dir="${testdirectory}" classname="org.antlr.Tool" classpathref="antlrToolCP" fork="yes"> + <arg line=" "${g}" ${opt}" /> + </java> + </target> + + <!-- ******** --> + <!-- EXAMPLES --> + <!-- ******** --> + + <target name="compile-examples" depends="build" description="Compile all example grammars."> + <echo message="Building Examples: This will take a few minutes . . ." /> + <path id="example-dirs"><dirset dir="${examples.dir}" /></path> + + <foreach target="compile-single-example" param="example-folder" inheritrefs="true"> + <path refid="example-dirs"/> + </foreach> + </target> + + <target name="compile-single-example" description="Compile example grammar files in a given folder"> + <echo message="Example: ${example-folder}" /> + <fileset id="gfiles" dir="${example-folder}" excludes="*__.g" includes="*.g" /> + + <pathconvert property="gfiles.value" refid="gfiles" + pathsep="" "" + /> + + <echo message="Compiling Grammar Files: ${gfiles.value}" /> + <java dir="${example-folder}" classpathref="antlrToolCP" classname="org.antlr.Tool" fork="yes"> + <arg line=""${gfiles.value}""/> + </java> + </target> + + <!-- **** --> + <!-- DOCS --> + <!-- **** --> + + <target name="make-docs" description="Generate jsdoc API documentation." depends="-init"> + <property name="jsdoc.dir" value="${third.dir}/jsdoc-toolkit" /> + <property name="docs.dir" value="${lib.dir}/docs" /> + + <mkdir dir="${docs.dir}" /> + <java jar="${jsdoc.dir}/jsrun.jar" fork="yes"> + <arg line="${jsdoc.dir}/app/run.js ${src.dir} -r=10 -t=${jsdoc.dir}/templates/jsdoc -d=${docs.dir}" /> + </java> + </target> + + <target name="-init"> + <!-- clear build dir --> + <delete dir="${out.dir}" quiet="true" /> + <mkdir dir="${out.dir}" /> + </target> +</project> diff --git a/antlr-3.1.3/runtime/JavaScript/build/license.txt b/antlr-3.1.3/runtime/JavaScript/build/license.txt new file mode 100755 index 0000000..cf297f9 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/build/license.txt @@ -0,0 +1,10 @@ +/* +Copyright (c) 2003-2008 Terence Parr. All rights reserved. +Code licensed under the BSD License: +http://www.antlr.org/license.html + +Some parts of the ANTLR class: +Copyright (c) 2008, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +*/ diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr.js new file mode 100755 index 0000000..e536387 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr.js @@ -0,0 +1,504 @@ +/* +Some portions: +Copyright (c) 2008, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.5.1 +*/ + +// create org.antlr module +if (typeof org == "undefined" || !org) { + var org = {}; +} +if (typeof org.antlr == "undefined" || !org.antlr) { + /** + * The org.antlr global namespace object. If antlr is already defined, the + * existing antlr object will not be overwritten so that defined + * namespaces are preserved. + * @namespace org.antlr + */ + org.antlr = {}; +} + +/** + * The global JavaScript object. + */ +org.antlr.global = (function() { + return this; +}).call(null); + +/** + * Returns the namespace specified and creates it if it doesn't exist. + * + * Be careful when naming packages. Reserved words may work in some browsers + * and not others. For instance, the following will fail in Safari: + * <pre> + * org.antlr.namespace("really.long.nested.namespace"); + * </pre> + * This fails because "long" is a future reserved word in ECMAScript + * + * @static + * @param {String*} arguments 1-n namespaces to create + * @return {Object} A reference to the last namespace object created + * @example + * org.antlr.namespace("org.antlr.property.package"); + */ +org.antlr.namespace = function() { + var a=arguments, o=null, i, j, d; + for (i=0; i<a.length; i=i+1) { + d=a[i].split("."); + o=org.antlr.global; + + // ANTLR is implied, so it is ignored if it is included + for (j=0; j<d.length; j=j+1) { + o[d[j]]=o[d[j]] || {}; + o=o[d[j]]; + } + } + + return o; +}; + +/** + * org.antlr.env is used to keep track of what is known about the library and + * the browsing environment + * @namespace org.antlr.env + */ +org.antlr.env = org.antlr.env || {}; + +/** + * Do not fork for a browser if it can be avoided. Use feature detection when + * you can. Use the user agent as a last resort. org.antlr.env.ua stores a + * version number for the browser engine, 0 otherwise. This value may or may + * not map to the version number of the browser using the engine. The value is + * presented as a float so that it can easily be used for boolean evaluation + * as well as for looking for a particular range of versions. Because of this, + * some of the granularity of the version info may be lost (e.g., Gecko 1.8.0.9 + * reports 1.8). + * @namespace org.antlr.env.ua + */ +org.antlr.env.ua = function() { + var o= /** @lends org.antlr.env.ua */ { + + /** + * Internet Explorer version number or 0. Example: 6 + * @property ie + * @type float + */ + ie:0, + + /** + * Opera version number or 0. Example: 9.2 + * @property opera + * @type float + */ + opera:0, + + /** + * Gecko engine revision number. Will evaluate to 1 if Gecko + * is detected but the revision could not be found. Other browsers + * will be 0. Example: 1.8 + * <pre> + * Firefox 1.0.0.4: 1.7.8 <-- Reports 1.7 + * Firefox 1.5.0.9: 1.8.0.9 <-- Reports 1.8 + * Firefox 2.0.0.3: 1.8.1.3 <-- Reports 1.8 + * Firefox 3 alpha: 1.9a4 <-- Reports 1.9 + * </pre> + * @property gecko + * @type float + */ + gecko:0, + + /** + * AppleWebKit version. KHTML browsers that are not WebKit browsers + * will evaluate to 1, other browsers 0. Example: 418.9.1 + * <pre> + * Safari 1.3.2 (312.6): 312.8.1 <-- Reports 312.8 -- currently the + * latest available for Mac OSX 10.3. + * Safari 2.0.2: 416 <-- hasOwnProperty introduced + * Safari 2.0.4: 418 <-- preventDefault fixed + * Safari 2.0.4 (419.3): 418.9.1 <-- One version of Safari may run + * different versions of webkit + * Safari 2.0.4 (419.3): 419 <-- Tiger installations that have been + * updated, but not updated + * to the latest patch. + * Webkit 212 nightly: 522+ <-- Safari 3.0 precursor (with native SVG + * and many major issues fixed). + * 3.x yahoo.com, flickr:422 <-- Safari 3.x hacks the user agent + * string when hitting yahoo.com and + * flickr.com. + * Safari 3.0.4 (523.12):523.12 <-- First Tiger release - automatic update + * from 2.x via the 10.4.11 OS patch + * Webkit nightly 1/2008:525+ <-- Supports DOMContentLoaded event. + * yahoo.com user agent hack removed. + * + * </pre> + * http://developer.apple.com/internet/safari/uamatrix.html + * @property webkit + * @type float + */ + webkit: 0, + + /** + * The mobile property will be set to a string containing any relevant + * user agent information when a modern mobile browser is detected. + * Currently limited to Safari on the iPhone/iPod Touch, Nokia N-series + * devices with the WebKit-based browser, and Opera Mini. + * @property mobile + * @type string + */ + mobile: null, + + /** + * Adobe AIR version number or 0. Only populated if webkit is detected. + * Example: 1.0 + * @property air + * @type float + */ + air: 0, + + /** + * Is this the Rhino interpreter? + * @property rhino + * @type Boolean + */ + rhino: false + + }; + + var ua, m; + + try { + ua = navigator.userAgent; + + // Modern KHTML browsers should qualify as Safari X-Grade + if ((/KHTML/).test(ua)) { + o.webkit=1; + } + // Modern WebKit browsers are at least X-Grade + m=ua.match(/AppleWebKit\/([^\s]*)/); + if (m&&m[1]) { + o.webkit=parseFloat(m[1]); + + // Mobile browser check + if (/ Mobile\//.test(ua)) { + o.mobile = "Apple"; // iPhone or iPod Touch + } else { + m=ua.match(/NokiaN[^\/]*/); + if (m) { + o.mobile = m[0]; // Nokia N-series, ex: NokiaN95 + } + } + + m=ua.match(/AdobeAIR\/([^\s]*)/); + if (m) { + o.air = m[0]; // Adobe AIR 1.0 or better + } + + } + + if (!o.webkit) { // not webkit + // @todo check Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1316; fi; U; ssr) + m=ua.match(/Opera[\s\/]([^\s]*)/); + if (m&&m[1]) { + o.opera=parseFloat(m[1]); + m=ua.match(/Opera Mini[^;]*/); + if (m) { + o.mobile = m[0]; // ex: Opera Mini/2.0.4509/1316 + } + } else { // not opera or webkit + m=ua.match(/MSIE\s([^;]*)/); + if (m&&m[1]) { + o.ie=parseFloat(m[1]); + } else { // not opera, webkit, or ie + m=ua.match(/Gecko\/([^\s]*)/); + if (m) { + o.gecko=1; // Gecko detected, look for revision + m=ua.match(/rv:([^\s\)]*)/); + if (m&&m[1]) { + o.gecko=parseFloat(m[1]); + } + } + } + } + } + } catch(e) { + // ignore this if we're not in a browser + } + + try { + if (typeof window=="undefined" && typeof loadClass!="undefined") { + o.rhino = true; + } + } catch(e) {} + + + return o; +}(); + +/** + * JavaScript runtime library code. + * @name org.antlr.runtime + * @namespace + */ +/** + * JavaScript runtime library tree parser code. + * @name org.antlr.runtime.tree + * @namespace + */ +org.antlr.namespace("org.antlr.runtime.tree"); + +/** + * Provides the language utilites and extensions used by the library + * @namespace org.antlr.lang + */ +org.antlr.lang = org.antlr.lang || /** @lends org.antlr.lang */ { + /** + * Determines whether or not the provided object is an array. + * Testing typeof/instanceof/constructor of arrays across frame + * boundaries isn't possible in Safari unless you have a reference + * to the other frame to test against its Array prototype. To + * handle this case, we test well-known array properties instead. + * properties. + * @param {any} o The object being testing + * @return {boolean} the result + */ + isArray: function(o) { + if (o) { + var l = org.antlr.lang; + return l.isNumber(o.length) && l.isFunction(o.splice); + } + return false; + }, + + /** + * Determines whether or not the provided object is a boolean + * @param {any} o The object being testing + * @return {boolean} the result + */ + isBoolean: function(o) { + return typeof o === 'boolean'; + }, + + /** + * Determines whether or not the provided object is a function + * @param {any} o The object being testing + * @return {boolean} the result + */ + isFunction: function(o) { + return typeof o === 'function'; + }, + + /** + * Determines whether or not the provided object is null + * @param {any} o The object being testing + * @return {boolean} the result + */ + isNull: function(o) { + return o === null; + }, + + /** + * Determines whether or not the provided object is a legal number + * @param {any} o The object being testing + * @return {boolean} the result + */ + isNumber: function(o) { + return typeof o === 'number' && isFinite(o); + }, + + /** + * Determines whether or not the provided object is of type object + * or function + * @param {any} o The object being testing + * @return {boolean} the result + */ + isObject: function(o) { +return (o && (typeof o === 'object' || org.antlr.lang.isFunction(o))) || false; + }, + + /** + * Determines whether or not the provided object is a string + * @param {any} o The object being testing + * @return {boolean} the result + */ + isString: function(o) { + return typeof o === 'string'; + }, + + /** + * Determines whether or not the provided object is undefined + * @param {any} o The object being testing + * @return {boolean} the result + */ + isUndefined: function(o) { + return typeof o === 'undefined'; + }, + + /** + * IE will not enumerate native functions in a derived object even if the + * function was overridden. This is a workaround for specific functions + * we care about on the Object prototype. + * @param {Function} r the object to receive the augmentation + * @param {Function} s the object that supplies the properties to augment + * @private + */ + _IEEnumFix: function(r, s) { + if (org.antlr.env.ua.ie) { + var add=["toString", "valueOf"], i; + for (i=0;i<add.length;i=i+1) { + var fname=add[i],f=s[fname]; + if (org.antlr.lang.isFunction(f) && f!=Object.prototype[fname]) { + r[fname]=f; + } + } + } + }, + + /** + * Utility to set up the prototype, constructor and superclass properties to + * support an inheritance strategy that can chain constructors and methods. + * Static members will not be inherited. + * + * @method extend + * @static + * @param {Function} subc the object to modify + * @param {Function} superc the object to inherit + * @param {Object} [overrides] additional properties/methods to add to the + * subclass prototype. These will override the + * matching items obtained from the superclass + * if present. + */ + extend: function(subc, superc, overrides) { + if (!superc||!subc) { + throw new Error("org.antlr.lang.extend failed, please check that " + + "all dependencies are included."); + } + var F = function() {}; + F.prototype=superc.prototype; + subc.prototype=new F(); + subc.prototype.constructor=subc; + subc.superclass=superc.prototype; + if (superc.prototype.constructor == Object.prototype.constructor) { + superc.prototype.constructor=superc; + } + + if (overrides) { + for (var i in overrides) { + subc.prototype[i]=overrides[i]; + } + + org.antlr.lang._IEEnumFix(subc.prototype, overrides); + } + }, + + /** + * Applies all properties in the supplier to the receiver if the + * receiver does not have these properties yet. Optionally, one or + * more methods/properties can be specified (as additional + * parameters). This option will overwrite the property if receiver + * has it already. If true is passed as the third parameter, all + * properties will be applied and _will_ overwrite properties in + * the receiver. + * + * @param {Function} r the object to receive the augmentation + * @param {Function} s the object that supplies the properties to augment + * @param {String*|boolean} [arguments] zero or more properties methods + * to augment the receiver with. If none specified, everything + * in the supplier will be used unless it would + * overwrite an existing property in the receiver. If true + * is specified as the third parameter, all properties will + * be applied and will overwrite an existing property in + * the receiver + */ + augmentObject: function(r, s) { + if (!s||!r) { + throw new Error("Absorb failed, verify dependencies."); + } + var a=arguments, i, p, override=a[2]; + if (override && override!==true) { // only absorb the specified properties + for (i=2; i<a.length; i=i+1) { + r[a[i]] = s[a[i]]; + } + } else { // take everything, overwriting only if the third parameter is true + for (p in s) { + if (override || !r[p]) { + r[p] = s[p]; + } + } + + org.antlr.lang._IEEnumFix(r, s); + } + }, + + /** + * Same as org.antlr.lang.augmentObject, except it only applies prototype properties + * @see org.antlr.lang.augmentObject + * @param {Function} r the object to receive the augmentation + * @param {Function} s the object that supplies the properties to augment + * @param {String*|boolean} [arguments] zero or more properties methods + * to augment the receiver with. If none specified, everything + * in the supplier will be used unless it would overwrite an existing + * property in the receiver. if true is specified as the third + * parameter, all properties will be applied and will overwrite an + * existing property in the receiver + */ + augmentProto: function(r, s) { + if (!s||!r) { + throw new Error("Augment failed, verify dependencies."); + } + //var a=[].concat(arguments); + var a=[r.prototype,s.prototype]; + for (var i=2;i<arguments.length;i=i+1) { + a.push(arguments[i]); + } + org.antlr.lang.augmentObject.apply(this, a); + }, + + /** + * Returns a new object containing all of the properties of + * all the supplied objects. The properties from later objects + * will overwrite those in earlier objects. + * @param arguments {Object*} the objects to merge + * @return the new merged object + */ + merge: function() { + var o={}, a=arguments; + for (var i=0, l=a.length; i<l; i=i+1) { + org.antlr.lang.augmentObject(o, a[i], true); + } + return o; + }, + + /** + * A convenience method for detecting a legitimate non-null value. + * Returns false for null/undefined/NaN, true for other values, + * including 0/false/'' + * @param o {any} the item to test + * @return {boolean} true if it is not null/undefined/NaN || false + */ + isValue: function(o) { + var l = org.antlr.lang; +return (l.isObject(o) || l.isString(o) || l.isNumber(o) || l.isBoolean(o)); + }, + + /** @namespace org.antlr.lang.array Array convenience methods. */ + array: /** @lends org.antlr.lang.array */ { + /** + * Retrieve the last element of an array. Throws an error if a is not + * an array or empty. + * @param a {Array} the array stack to peek in + * @return the last element of the array + */ + peek: function(a) { + if (!org.antlr.lang.isArray(a)) { + throw new Error("org.antlr.lang.array.peek: a is not an array."); + } + var l = a.length; + if (l<=0) { + throw new Error("org.antlr.lang.array.peek: a is empty."); + } + return a[l-1]; + } + } +}; diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/ANTLRFileStream.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/ANTLRFileStream.js new file mode 100755 index 0000000..d2d0ea1 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/ANTLRFileStream.js @@ -0,0 +1,63 @@ +/** + * Loads the contents of a file all at once and passes its contents off to + * {@link org.antlr.runtime.ANTLRStringStream}. + * Currently this class can only be used in the Rhino JS interpreter. + * @class + * @extends org.antlr.runtime.ANTLRStringStream + * @param {String} fileName path of the file to be loaded + * @param {String} [encoding] name of the charset used for decoding + */ +org.antlr.runtime.ANTLRFileStream = function(fileName, encoding) { + this.fileName = fileName; + + // @todo need to add support for other JS interpreters that have file i/o + // hooks (SpiderMonkey and WSH come to mind). + var method; + if (org.antlr.env.ua.rhino) { + method = "loadFileUsingJava"; + } else { + throw new Error( + "ANTLR File I/O is not supported in this JS implementation." + ); + } + + var data = this[method](fileName, encoding); + org.antlr.runtime.ANTLRFileStream.superclass.constructor.call(this, data); +}; + +org.antlr.lang.extend(org.antlr.runtime.ANTLRFileStream, + org.antlr.runtime.ANTLRStringStream, +/** @lends org.antlr.runtime.ANTLRFileStream.prototype */{ + /** + * Get the file path from which the input was loaded. + * @returns {String} the file path from which the input was loaded + */ + getSourceName: function() { + return this.fileName; + }, + + /** + * Read the file and return its contents as a JS string. + * @private + * @param {String} fileName path of the file to be loaded + * @param {String} [encoding] name of the charset used for decoding + * @returns {String} the contents of the file + */ + loadFileUsingJava: function(fileName, encoding) { + // read the file using Java methods + var f = new java.io.File(fileName), + size = f.length(), + isr, + fis = new java.io.FileInputStream(f); + if (encoding) { + isr = new java.io.InputStreamReader(fis, encoding); + } else { + isr = new java.io.InputStreamReader(fis); + } + var data = java.lang.reflect.Array.newInstance(java.lang.Character.TYPE, size); + isr.read(data, 0, size); + + // convert java char array to a javascript string + return new String(new java.lang.String(data)); + } +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/ANTLRStringStream.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/ANTLRStringStream.js new file mode 100755 index 0000000..8d1374e --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/ANTLRStringStream.js @@ -0,0 +1,318 @@ +/** + * A stream of characters created from a JavaScript string that in turn gets + * fed to a lexer. + * @class + * @extends org.antlr.runtime.CharStream + * @param {String} data the string from which this stream will be created. + */ +org.antlr.runtime.ANTLRStringStream = function(data) { + /** + * Location in the stream. + * Ranges from 0 to (stream length - 1). + * @private + * @type Number + */ + this.p = 0; + + /** + * The current line in the input. + * Ranges from 1 to (number of lines). + * @private + * @type Number + */ + this.line = 1; + + /** + * The index of the character relative to the beginning of the line. + * Ranges from 0 to (length of line - 1). + * @private + * @type Number + */ + this.charPositionInLine = 0; + + /** + * Tracks how deep mark() calls are nested + * @private + * @type Number + */ + this.markDepth = 0; + + /** + * An Array of objects that tracks the stream state + * values line, charPositionInLine, and p that can change as you + * move through the input stream. Indexed from 1..markDepth. + * A null is kept at index 0. Created upon first call to mark(). + * @private + * @type Array + */ + this.markers = null; + + /** + * Track the last mark() call result value for use in rewind(). + * @private + * @type Number + */ + this.lastMarker = null; + + /** + * The data being scanned. + * @private + * @type String + */ + this.data = data; + + /** + * The number of characters in the stream. + * @private + * @type Number + */ + this.n = data.length; +}; + +org.antlr.lang.extend(org.antlr.runtime.ANTLRStringStream, + org.antlr.runtime.CharStream, +/** @lends org.antlr.runtime.ANTLRStringStream.prototype */ +{ + /** + * Reset the stream so that it's in the same state it was + * when the object was created *except* the data array is not + * touched. + */ + reset: function() { + this.p = 0; + this.line = 1; + this.charPositionInLine = 0; + this.markDepth = 0; + }, + + /** + * Consume the next character of data in the stream. + */ + consume: function() { + if ( this.p < this.n ) { + this.charPositionInLine++; + if ( this.data.charAt(this.p)==="\n" ) { + this.line++; + this.charPositionInLine=0; + } + this.p++; + } + }, + + /** + * Get character at current input pointer + i ahead where i=1 is next int. + * Negative indexes are allowed. LA(-1) is previous token (token + * just matched). LA(-i) where i is before first token should + * yield -1, invalid char / EOF. + * @param {Number} i non-zero amount of lookahead or lookback + * @returns {String|Number} The charcter at the specified position or -1 if + * you fell off either end of the stream. + */ + LA: function(i) { + if ( i<0 ) { + i++; // e.g., translate LA(-1) to use offset i=0; then data[p+0-1] + } + + var new_pos = this.p+i-1; + if (new_pos>=this.n || new_pos<0) { + return org.antlr.runtime.CharStream.EOF; + } + return this.data.charAt(new_pos); + }, + + + /** + * Return the current input symbol index 0..n where n indicates the + * last symbol has been read. The index is the index of char to + * be returned from LA(1) (i.e. the one about to be consumed). + * @returns {Number} the index of the current input symbol + */ + index: function() { + return this.p; + }, + + /** + * The length of this stream. + * @returns {Number} the length of this stream. + */ + size: function() { + return this.n; + }, + + /** + * Tell the stream to start buffering if it hasn't already. Return + * current input position, index(), or some other marker so that + * when passed to rewind() you get back to the same spot. + * rewind(mark()) should not affect the input cursor. The Lexer + * tracks line/col info as well as input index so its markers are + * not pure input indexes. Same for tree node streams. + * + * <p>Marking is a mechanism for storing the current position of a stream + * in a stack. This corresponds with the predictive look-ahead mechanism + * used in Lexers.</p> + * @returns {Number} the current size of the mark stack. + */ + mark: function() { + if ( !this.markers ) { + this.markers = []; + this.markers.push(null); // depth 0 means no backtracking, leave blank + } + this.markDepth++; + var state = null; + if ( this.markDepth>=this.markers.length ) { + state = {}; + this.markers.push(state); + } + else { + state = this.markers[this.markDepth]; + } + state.p = this.p; + state.line = this.line; + state.charPositionInLine = this.charPositionInLine; + this.lastMarker = this.markDepth; + return this.markDepth; + }, + + /** + * Rewind to the input position of the last marker. + * Used currently only after a cyclic DFA and just + * before starting a sem/syn predicate to get the + * input position back to the start of the decision. + * Do not "pop" the marker off the state. mark(i) + * and rewind(i) should balance still. It is + * like invoking rewind(last marker) but it should not "pop" + * the marker off. It's like seek(last marker's input position). + * @param {Number} [m] the index in the mark stack to load instead of the + * last. + */ + rewind: function(m) { + if (!org.antlr.lang.isNumber(m)) { + m = this.lastMarker; + } + + var state = this.markers[m]; + // restore stream state + this.seek(state.p); + this.line = state.line; + this.charPositionInLine = state.charPositionInLine; + this.release(m); + }, + + /** + * You may want to commit to a backtrack but don't want to force the + * stream to keep bookkeeping objects around for a marker that is + * no longer necessary. This will have the same behavior as + * rewind() except it releases resources without the backward seek. + * This must throw away resources for all markers back to the marker + * argument. So if you're nested 5 levels of mark(), and then release(2) + * you have to release resources for depths 2..5. + * @param {Number} marker the mark depth above which all mark states will + * be released. + */ + release: function(marker) { + // unwind any other markers made after m and release m + this.markDepth = marker; + // release this marker + this.markDepth--; + }, + + /** + * Set the input cursor to the position indicated by index. This is + * normally used to seek ahead in the input stream. No buffering is + * required to do this unless you know your stream will use seek to + * move backwards such as when backtracking. + * + * <p>This is different from rewind in its multi-directional + * requirement and in that its argument is strictly an input cursor + * (index).</p> + * + * <p>For char streams, seeking forward must update the stream state such + * as line number. For seeking backwards, you will be presumably + * backtracking using the mark/rewind mechanism that restores state and + * so this method does not need to update state when seeking backwards.</p> + * + * <p>Currently, this method is only used for efficient backtracking using + * memoization, but in the future it may be used for incremental + * parsing.</p> + * + * <p>The index is 0..n-1. A seek to position i means that LA(1) will + * return the ith symbol. So, seeking to 0 means LA(1) will return the + * first element in the stream.</p> + * + * <p>Esentially this method method moves the input position, + * {@link #consume}-ing data if necessary.</p> + * + * @param {Number} index the position to seek to. + */ + seek: function(index) { + if ( index<=this.p ) { + this.p = index; // just jump; don't update stream state (line, ...) + return; + } + // seek forward, consume until p hits index + while ( this.p<index ) { + this.consume(); + } + }, + + /** + * Retrieve a substring from this stream. + * @param {Number} start the starting index of the substring (inclusive). + * @param {Number} stop the last index of the substring (inclusive). + * @returns {String} + */ + substring: function(start, stop) { + return this.data.substr(start,stop-start+1); + }, + + /** + * Return the current line position in the stream. + * @returns {Number} the current line position in the stream (1..numlines). + */ + getLine: function() { + return this.line; + }, + + /** + * Get the index of the character relative to the beginning of the line. + * Ranges from 0 to (length of line - 1). + * @returns {Number} + */ + getCharPositionInLine: function() { + return this.charPositionInLine; + }, + + /** + * Set the current line in the input stream. + * This is used internally when performing rewinds. + * @param {Number} line + * @private + */ + setLine: function(line) { + this.line = line; + }, + + /** + * Set the index of the character relative to the beginning of the line. + * Ranges from 0 to (length of line - 1). + * @param {Number} pos + * @private + */ + setCharPositionInLine: function(pos) { + this.charPositionInLine = pos; + }, + + /** Where are you getting symbols from? Normally, implementations will + * pass the buck all the way to the lexer who can ask its input stream + * for the file name or whatever. + */ + getSourceName: function() { + return null; + } +}); + +/** + * Alias for {@link #LA}. + * @methodOf org.antlr.runtime.ANTLRStringStream.prototype + */ +org.antlr.runtime.ANTLRStringStream.prototype.LT = org.antlr.runtime.ANTLRStringStream.prototype.LA; diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/BaseRecognizer.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/BaseRecognizer.js new file mode 100755 index 0000000..3b36cbf --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/BaseRecognizer.js @@ -0,0 +1,954 @@ +/** A generic recognizer that can handle recognizers generated from + * lexer, parser, and tree grammars. This is all the parsing + * support code essentially; most of it is error recovery stuff and + * backtracking. + * + * <p>This class should not be instantiated directly. Instead, use one of its + * subclasses.</p> + * + * @class + * @param {org.antlr.runtime.RecognizerSharedState} [state] state object with + * which to initialize this recognizer. + */ +org.antlr.runtime.BaseRecognizer = function(state) { + /** State of a lexer, parser, or tree parser are collected into a state + * object so the state can be shared. This sharing is needed to + * have one grammar import others and share same error variables + * and other state variables. It's a kind of explicit multiple + * inheritance via delegation of methods and shared state. + * @type org.antlr.runtime.RecognizerSharedState + */ + this.state = state || new org.antlr.runtime.RecognizerSharedState(); +}; + +org.antlr.lang.augmentObject(org.antlr.runtime.BaseRecognizer, { + /** + * @memberOf org.antlr.runtime.BaseRecognizer + * @type Number + */ + MEMO_RULE_FAILED: -2, + + /** + * @memberOf org.antlr.runtime.BaseRecognizer + * @type Number + */ + MEMO_RULE_UNKNOWN: -1, + + /** + * @memberOf org.antlr.runtime.BaseRecognizer + * @type Number + */ + INITIAL_FOLLOW_STACK_SIZE: 100, + + /** + * @memberOf org.antlr.runtime.BaseRecognizer + * @type Number + */ + MEMO_RULE_FAILED_I: -2, + + /** + * @memberOf org.antlr.runtime.BaseRecognizer + * @type Number + */ + DEFAULT_TOKEN_CHANNEL: org.antlr.runtime.Token.DEFAULT_CHANNEL, + + /** + * @memberOf org.antlr.runtime.BaseRecognizer + * @type Number + */ + HIDDEN: org.antlr.runtime.Token.HIDDEN_CHANNEL, + + /** + * @memberOf org.antlr.runtime.BaseRecognizer + * @type String + */ + NEXT_TOKEN_RULE_NAME: "nextToken" +}); + +org.antlr.runtime.BaseRecognizer.prototype = { + /** Reset the parser's state. Subclasses must rewinds the input stream */ + reset: function() { + var i, len; + + // wack everything related to error recovery + if (!this.state) { + return; // no shared state work to do + } + this.state._fsp = -1; + this.state.errorRecovery = false; + this.state.lastErrorIndex = -1; + this.state.failed = false; + this.state.syntaxErrors = 0; + // wack everything related to backtracking and memoization + this.state.backtracking = 0; + // wipe cache + if (this.state.ruleMemo) { + for (i=0, len=this.state.ruleMemo.length; i<len; i++) { + this.state.ruleMemo[i] = null; + } + } + }, + + /** Match current input symbol against ttype. Attempt + * single token insertion or deletion error recovery. If + * that fails, throw {@link org.antlr.runtime.MismatchedTokenException}. + * + * <p>To turn off single token insertion or deletion error + * recovery, override {@link #mismatchRecover} and have it call + * plain {@link #mismatch}, which does not recover. Then any error + * in a rule will cause an exception and immediate exit from + * rule. Rule would recover by resynchronizing to the set of + * symbols that can follow rule ref.</p> + * + * @param {org.antlr.runtime.IntStream} input input stream to match against. + * @param {Number} ttype input type to match. + * @param {org.antlr.runtime.BitSet} [follow] set of tokens that can follow the + * matched token. + * @returns {Object} the matched symbol + */ + match: function(input, ttype, follow) { + var matchedSymbol = this.getCurrentInputSymbol(input); + if ( input.LA(1)===ttype ) { + input.consume(); + this.state.errorRecovery = false; + this.state.failed = false; + return matchedSymbol; + } + if ( this.state.backtracking>0 ) { + this.state.failed = true; + return matchedSymbol; + } + matchedSymbol = this.recoverFromMismatchedToken(input, ttype, follow); + return matchedSymbol; + }, + + /** + * Match any token. + * @param {org.antlr.runtime.IntStream} input input stream to match against. + */ + matchAny: function(input) { + this.state.errorRecovery = false; + this.state.failed = false; + input.consume(); + }, + + /** + * Is the following token (LA(2)) the unwanted type (ttype)? + * @param {org.antlr.runtime.IntStream} input input stream to match against. + * @param {Number} ttype the undesired token type. + * @returns {Boolean} true if and only if the following token is the + * unwanted type. + */ + mismatchIsUnwantedToken: function(input, ttype) { + return input.LA(2)===ttype; + }, + + /** + * Does the stream appear to be missing a single token? + * @param {org.antlr.runtime.IntStream} input input stream to match against. + * @param {org.antlr.runtime.BitSet} [follow] set of tokens that can follow the + * matched token. + * @returns {Boolean} true if and only if it appears that the stream is + * missing a single token. + */ + mismatchIsMissingToken: function(input, follow) { + if ( !follow ) { + // we have no information about the follow; we can only consume + // a single token and hope for the best + return false; + } + // compute what can follow this grammar element reference + if ( follow.member(org.antlr.runtime.Token.EOR_TOKEN_TYPE) ) { + var viableTokensFollowingThisRule = this.computeContextSensitiveRuleFOLLOW(); + follow = follow.or(this.viableTokensFollowingThisRule); + if ( this.state._fsp>=0 ) { // remove EOR if we're not the start symbol + follow.remove(org.antlr.runtime.Token.EOR_TOKEN_TYPE); + } + } + // if current token is consistent with what could come after set + // then we know we're missing a token; error recovery is free to + // "insert" the missing token + + // BitSet cannot handle negative numbers like -1 (EOF) so I leave EOR + // in follow set to indicate that the fall of the start symbol is + // in the set (EOF can follow). + if ( follow.member(input.LA(1)) || + follow.member(org.antlr.runtime.Token.EOR_TOKEN_TYPE) ) + { + return true; + } + return false; + }, + + /** Factor out what to do upon token mismatch so tree parsers can behave + * differently. Override and call {@link #mismatchRecover} + * to get single token insertion and deletion. + * + * @param {org.antlr.runtime.IntStream} input input stream to match against. + * @param {Number} ttype input type to match. + * @param {org.antlr.runtime.BitSet} [follow] set of tokens that can follow the + * matched token. + */ + mismatch: function(input, ttype, follow) { + if ( this.mismatchIsUnwantedToken(input, ttype) ) { + throw new org.antlr.runtime.UnwantedTokenException(ttype, input); + } else if ( this.mismatchIsMissingToken(input, follow) ) { + throw new org.antlr.runtime.MissingTokenException(ttype, input, null); + } + throw new org.antlr.runtime.MismatchedTokenException(ttype, input); + }, + + /** Report a recognition problem. + * + * <p>This method sets errorRecovery to indicate the parser is recovering + * not parsing. Once in recovery mode, no errors are generated. + * To get out of recovery mode, the parser must successfully match + * a token (after a resync). So it will go:</p> + * <ol> + * <li>error occurs</li> + * <li>enter recovery mode, report error</li> + * <li>consume until token found in resynch set</li> + * <li>try to resume parsing</li> + * <li>next match() will reset errorRecovery mode</li> + * </ol> + * + * <p>If you override, make sure to update this.state.syntaxErrors if you + * care about that.</p> + * @param {org.antlr.runtime.RecognitionException} e the error to be reported. + */ + reportError: function(e) { + // if we've already reported an error and have not matched a token + // yet successfully, don't report any errors. + if ( this.state.errorRecovery ) { + return; + } + this.state.syntaxErrors++; + this.state.errorRecovery = true; + + this.displayRecognitionError(this.getTokenNames(), e); + }, + + /** + * Assemble recognition error message. + * @param {Array} tokenNames array of token names (strings). + * @param {org.antlr.runtime.RecognitionException} e the error to be reported. + */ + displayRecognitionError: function(tokenNames, e) { + var hdr = this.getErrorHeader(e), + msg = this.getErrorMessage(e, tokenNames); + this.emitErrorMessage(hdr+" "+msg); + }, + + /** + * Create error header message. Format is <q>line + * lineNumber:positionInLine</q>. + * @param {org.antlr.runtime.RecognitionException} e the error to be reported. + * @returns {String} The error header. + */ + getErrorHeader: function(e) { + /* handle null input */ + if (!org.antlr.lang.isNumber(e.line)) { + e.line = 0; + } + return "line "+e.line+":"+e.charPositionInLine; + }, + + /** + * Override this method to change where error messages go. + * Defaults to "alert"-ing the error in browsers and "print"-ing the error + * in other environments (e.g. Rhino, SpiderMonkey). + * @param {String} msg the error message to be displayed. + */ + emitErrorMessage: function(msg) { + if (typeof(window) != 'undefined' && window.alert) { + alert(msg); + } else { + print(msg); + } + }, + + /** What error message should be generated for the various + * exception types? + * + * <p>Not very object-oriented code, but I like having all error message + * generation within one method rather than spread among all of the + * exception classes. This also makes it much easier for the exception + * handling because the exception classes do not have to have pointers back + * to this object to access utility routines and so on. Also, changing + * the message for an exception type would be difficult because you + * would have to be subclassing exceptions, but then somehow get ANTLR + * to make those kinds of exception objects instead of the default.</p> + * + * <p>For grammar debugging, you will want to override this to add + * more information such as the stack frame and no viable alts.</p> + * + * <p>Override this to change the message generated for one or more + * exception types.</p> + * + * @param {Array} tokenNames array of token names (strings). + * @param {org.antlr.runtime.RecognitionException} e the error to be reported. + * @returns {String} the error message to be emitted. + */ + getErrorMessage: function(e, tokenNames) { + var msg = (e && e.getMessage) ? e.getMessage() : null, + mte, + tokenName; + if ( e instanceof org.antlr.runtime.UnwantedTokenException ) { + var ute = e; + tokenName="<unknown>"; + if ( ute.expecting== org.antlr.runtime.Token.EOF ) { + tokenName = "EOF"; + } else { + tokenName = tokenNames[ute.expecting]; + } + msg = "extraneous input "+this.getTokenErrorDisplay(ute.getUnexpectedToken())+ + " expecting "+tokenName; + } + else if ( e instanceof org.antlr.runtime.MissingTokenException ) { + mte = e; + tokenName="<unknown>"; + if ( mte.expecting== org.antlr.runtime.Token.EOF ) { + tokenName = "EOF"; + } else { + tokenName = tokenNames[mte.expecting]; + } + msg = "missing "+tokenName+" at "+this.getTokenErrorDisplay(e.token); + } + else if ( e instanceof org.antlr.runtime.MismatchedTokenException ) { + mte = e; + tokenName="<unknown>"; + if ( mte.expecting== org.antlr.runtime.Token.EOF ) { + tokenName = "EOF"; + } + else { + tokenName = tokenNames[mte.expecting]; + } + msg = "mismatched input "+this.getTokenErrorDisplay(e.token)+ + " expecting "+tokenName; + } + else if ( e instanceof org.antlr.runtime.NoViableAltException ) { + msg = "no viable alternative at input "+this.getTokenErrorDisplay(e.token); + } + else if ( e instanceof org.antlr.runtime.EarlyExitException ) { + msg = "required (...)+ loop did not match anything at input "+ + this.getTokenErrorDisplay(e.token); + } + else if ( e instanceof org.antlr.runtime.MismatchedSetException ) { + msg = "mismatched input "+this.getTokenErrorDisplay(e.token)+ + " expecting set "+e.expecting; + } + else if ( e instanceof org.antlr.runtime.MismatchedNotSetException ) { + msg = "mismatched input "+this.getTokenErrorDisplay(e.token)+ + " expecting set "+e.expecting; + } + else if ( e instanceof org.antlr.runtime.FailedPredicateException ) { + msg = "rule "+e.ruleName+" failed predicate: {"+ + e.predicateText+"}?"; + } + return msg; + }, + + /** <p>Get number of recognition errors (lexer, parser, tree parser). Each + * recognizer tracks its own number. So parser and lexer each have + * separate count. Does not count the spurious errors found between + * an error and next valid token match.</p> + * + * <p>See also {@link #reportError}() + * @returns {Number} number of syntax errors encountered + */ + getNumberOfSyntaxErrors: function() { + return this.state.syntaxErrors; + }, + + /** How should a token be displayed in an error message? The default + * is to display just the text, but during development you might + * want to have a lot of information spit out. Override in that case + * to use t.toString() (which, for CommonToken, dumps everything about + * the token). + * @param {org.antlr.runtime.Token} t token that will be displayed in an error message + * @return {String} the string representation of the token + */ + getTokenErrorDisplay: function(t) { + var s = t.getText(); + if ( !org.antlr.lang.isValue(s) ) { + if ( t.getType()==org.antlr.runtime.Token.EOF ) { + s = "<EOF>"; + } + else { + s = "<"+t.getType()+">"; + } + } + s = s.replace(/\n/g,"\\n"); + s = s.replace(/\r/g,"\\r"); + s = s.replace(/\t/g,"\\t"); + return "'"+s+"'"; + }, + + /** Recover from an error found on the input stream. This is + * for NoViableAlt and mismatched symbol exceptions. If you enable + * single token insertion and deletion, this will usually not + * handle mismatched symbol exceptions but there could be a mismatched + * token that the match() routine could not recover from. + * @param {org.antlr.runtime.IntStream} input the intput stream + * @param {org.antlr.runtime.RecogntionException} the error found on the input stream + */ + recover: function(input, re) { + if ( this.state.lastErrorIndex==input.index() ) { + // uh oh, another error at same token index; must be a case + // where LT(1) is in the recovery token set so nothing is + // consumed; consume a single token so at least to prevent + // an infinite loop; this is a failsafe. + input.consume(); + } + this.state.lastErrorIndex = input.index(); + var followSet = this.computeErrorRecoverySet(); + this.beginResync(); + this.consumeUntil(input, followSet); + this.endResync(); + }, + + /** A hook to listen in on the token consumption during error recovery. + */ + beginResync: function() { + }, + + /** A hook to listen in on the token consumption during error recovery. + */ + endResync: function() { + }, + + /** Compute the error recovery set for the current rule. + * <p>During rule invocation, the parser pushes the set of tokens that can + * follow that rule reference on the stack; this amounts to + * computing FIRST of what follows the rule reference in the + * enclosing rule. This local follow set only includes tokens + * from within the rule; i.e., the FIRST computation done by + * ANTLR stops at the end of a rule.</p> + * + * <p>EXAMPLE</p> + * + * <p>When you find a "no viable alt exception", the input is not + * consistent with any of the alternatives for rule r. The best + * thing to do is to consume tokens until you see something that + * can legally follow a call to r *or* any rule that called r. + * You don't want the exact set of viable next tokens because the + * input might just be missing a token--you might consume the + * rest of the input looking for one of the missing tokens.</p> + * + * <p>Consider grammar:</p> + * <code><pre> + * a : '[' b ']' + * | '(' b ')' + * ; + * b : c '^' INT ; + * c : ID + * | INT + * ; + * </pre></code> + * + * <p>At each rule invocation, the set of tokens that could follow + * that rule is pushed on a stack. Here are the various "local" + * follow sets:</p> + * + * <code><pre> + * FOLLOW(b1_in_a) = FIRST(']') = ']' + * FOLLOW(b2_in_a) = FIRST(')') = ')' + * FOLLOW(c_in_b) = FIRST('^') = '^' + * </pre></code> + * + * <p>Upon erroneous input "[]", the call chain is</p> + * + * <code>a -> b -> c</code> + * + * <p>and, hence, the follow context stack is:</p> + * + * <code><pre> + * depth local follow set after call to rule + * 0 <EOF> a (from main()) + * 1 ']' b + * 3 '^' c + * </pre></code> + * + * <p>Notice that ')' is not included, because b would have to have + * been called from a different context in rule a for ')' to be + * included.</p> + * + * <p>For error recovery, we cannot consider FOLLOW(c) + * (context-sensitive or otherwise). We need the combined set of + * all context-sensitive FOLLOW sets--the set of all tokens that + * could follow any reference in the call chain. We need to + * resync to one of those tokens. Note that FOLLOW(c)='^' and if + * we resync'd to that token, we'd consume until EOF. We need to + * sync to context-sensitive FOLLOWs for a, b, and c: {']','^'}. + * In this case, for input "[]", LA(1) is in this set so we would + * not consume anything and after printing an error rule c would + * return normally. It would not find the required '^' though. + * At this point, it gets a mismatched token error and throws an + * exception (since LA(1) is not in the viable following token + * set). The rule exception handler tries to recover, but finds + * the same recovery set and doesn't consume anything. Rule b + * exits normally returning to rule a. Now it finds the ']' (and + * with the successful match exits errorRecovery mode).</p> + * + * <p>So, you cna see that the parser walks up call chain looking + * for the token that was a member of the recovery set.</p> + * + * <p>Errors are not generated in errorRecovery mode.</p> + * + * <p>ANTLR's error recovery mechanism is based upon original ideas:</p> + * + * <p>"Algorithms + Data Structures = Programs" by Niklaus Wirth</p> + * + * <p>and</p> + * + * <p>"A note on error recovery in recursive descent parsers": + * http://portal.acm.org/citation.cfm?id=947902.947905</p> + * + * <p>Later, Josef Grosch had some good ideas:</p> + * + * <p>"Efficient and Comfortable Error Recovery in Recursive Descent + * Parsers": + * ftp://www.cocolab.com/products/cocktail/doca4.ps/ell.ps.zip</p> + * + * <p>Like Grosch I implemented local FOLLOW sets that are combined + * at run-time upon error to avoid overhead during parsing.</p> + * @returns {org.antlr.runtime.BitSet} + */ + computeErrorRecoverySet: function() { + return this.combineFollows(false); + }, + + + /** Compute the context-sensitive FOLLOW set for current rule. + * <p>This is set of token types that can follow a specific rule + * reference given a specific call chain. You get the set of + * viable tokens that can possibly come next (lookahead depth 1) + * given the current call chain. Contrast this with the + * definition of plain FOLLOW for rule r:</p> + * + * <code>FOLLOW(r)={x | S=>*alpha r beta in G and x in FIRST(beta)}</code> + * + * <p>where x in T* and alpha, beta in V*; T is set of terminals and + * V is the set of terminals and nonterminals. In other words, + * FOLLOW(r) is the set of all tokens that can possibly follow + * references to r in *any* sentential form (context). At + * runtime, however, we know precisely which context applies as + * we have the call chain. We may compute the exact (rather + * than covering superset) set of following tokens.</p> + * + * <p>For example, consider grammar:</p> + * + * <code><pre> + * stat : ID '=' expr ';' // FOLLOW(stat)=={EOF} + * | "return" expr '.' + * ; + * expr : atom ('+' atom)* ; // FOLLOW(expr)=={';','.',')'} + * atom : INT // FOLLOW(atom)=={'+',')',';','.'} + * | '(' expr ')' + * ; + * </pre></code> + * + * <p>The FOLLOW sets are all inclusive whereas context-sensitive + * FOLLOW sets are precisely what could follow a rule reference. + * For input input "i=(3);", here is the derivation:</p> + * + * <code><pre> + * stat => ID '=' expr ';' + * => ID '=' atom ('+' atom)* ';' + * => ID '=' '(' expr ')' ('+' atom)* ';' + * => ID '=' '(' atom ')' ('+' atom)* ';' + * => ID '=' '(' INT ')' ('+' atom)* ';' + * => ID '=' '(' INT ')' ';' + * </pre></code> + * + * <p>At the "3" token, you'd have a call chain of</p> + * + * <code> stat -> expr -> atom -> expr -> atom</code> + * + * <p>What can follow that specific nested ref to atom? Exactly ')' + * as you can see by looking at the derivation of this specific + * input. Contrast this with the FOLLOW(atom)={'+',')',';','.'}.</p> + * + * <p>You want the exact viable token set when recovering from a + * token mismatch. Upon token mismatch, if LA(1) is member of + * the viable next token set, then you know there is most likely + * a missing token in the input stream. "Insert" one by just not + * throwing an exception.</p> + * @returns {org.antlr.runtime.BitSet} + */ + computeContextSensitiveRuleFOLLOW: function() { + return this.combineFollows(true); + }, + + /** + * Helper method for {@link #computeErrorRecoverySet} and + * {@link computeContextSensitiveRuleFOLLO}. + * @param {Boolean} exact + * @returns {org.antlr.runtime.BitSet} + */ + combineFollows: function(exact) { + var top = this.state._fsp, + i, + localFollowSet, + followSet = new org.antlr.runtime.BitSet(); + for (i=top; i>=0; i--) { + localFollowSet = this.state.following[i]; + followSet.orInPlace(localFollowSet); + if ( exact ) { + // can we see end of rule? + if ( localFollowSet.member(org.antlr.runtime.Token.EOR_TOKEN_TYPE) ) + { + // Only leave EOR in set if at top (start rule); this lets + // us know if have to include follow(start rule); i.e., EOF + if ( i>0 ) { + followSet.remove(org.antlr.runtime.Token.EOR_TOKEN_TYPE); + } + } + else { // can't see end of rule, quit + break; + } + } + } + return followSet; + }, + + /** Attempt to recover from a single missing or extra token. + * + * <p>EXTRA TOKEN</p> + * + * <p>LA(1) is not what we are looking for. If LA(2) has the right token, + * however, then assume LA(1) is some extra spurious token. Delete it + * and LA(2) as if we were doing a normal match(), which advances the + * input.</p> + * + * <p>MISSING TOKEN</p> + * + * <p>If current token is consistent with what could come after + * ttype then it is ok to "insert" the missing token, else throw + * exception For example, Input "i=(3;" is clearly missing the + * ')'. When the parser returns from the nested call to expr, it + * will have call chain:</p> + * + * <pre><code> stat -> expr -> atom</code></pre> + * + * <p>and it will be trying to match the ')' at this point in the + * derivation:</p> + * + * <pre><code> => ID '=' '(' INT ')' ('+' atom)* ';'</code></pre> + * ^ + * <p>match() will see that ';' doesn't match ')' and report a + * mismatched token error. To recover, it sees that LA(1)==';' + * is in the set of tokens that can follow the ')' token + * reference in rule atom. It can assume that you forgot the ')'.</p> + * + * @param {org.antlr.runtime.IntStream} input + * @param {Number} ttype + * @param {org.antlr.runtime.BitSet} follow + * @returns {Object} + */ + recoverFromMismatchedToken: function(input, + ttype, + follow) + { + var e = null; + // if next token is what we are looking for then "delete" this token + if ( this.mismatchIsUnwantedToken(input, ttype) ) { + e = new org.antlr.runtime.UnwantedTokenException(ttype, input); + this.beginResync(); + input.consume(); // simply delete extra token + this.endResync(); + this.reportError(e); // report after consuming so AW sees the token in the exception + // we want to return the token we're actually matching + var matchedSymbol = this.getCurrentInputSymbol(input); + input.consume(); // move past ttype token as if all were ok + return matchedSymbol; + } + // can't recover with single token deletion, try insertion + if ( this.mismatchIsMissingToken(input, follow) ) { + var inserted = this.getMissingSymbol(input, e, ttype, follow); + e = new org.antlr.runtime.MissingTokenException(ttype, input, inserted); + this.reportError(e); // report after inserting so AW sees the token in the exception + return inserted; + } + // even that didn't work; must throw the exception + e = new org.antlr.runtime.MismatchedTokenException(ttype, input); + throw e; + }, + + /** + * Recover from a mismatched set exception. + * @param {org.antlr.runtime.IntStream} input + * @param {org.antlr.runtime.RecognitionException} e + * @param {org.antlr.runtime.BitSet} follow + * @returns {Object} + */ + recoverFromMismatchedSet: function(input, + e, + follow) + { + if ( this.mismatchIsMissingToken(input, follow) ) { + // System.out.println("missing token"); + this.reportError(e); + // we don't know how to conjure up a token for sets yet + return this.getMissingSymbol(input, e, org.antlr.runtime.Token.INVALID_TOKEN_TYPE, follow); + } + throw e; + }, + + /** Match needs to return the current input symbol, which gets put + * into the label for the associated token ref; e.g., x=ID. Token + * and tree parsers need to return different objects. Rather than test + * for input stream type or change the IntStream interface, I use + * a simple method to ask the recognizer to tell me what the current + * input symbol is. + * + * <p>This is ignored for lexers.</p> + * @param {org.antlr.runtime.IntStream} input + * @returns {Object} + */ + getCurrentInputSymbol: function(input) { return null; }, + + /** Conjure up a missing token during error recovery. + * + * <p>The recognizer attempts to recover from single missing + * symbols. But, actions might refer to that missing symbol. + * For example, x=ID {f($x);}. The action clearly assumes + * that there has been an identifier matched previously and that + * $x points at that token. If that token is missing, but + * the next token in the stream is what we want we assume that + * this token is missing and we keep going. Because we + * have to return some token to replace the missing token, + * we have to conjure one up. This method gives the user control + * over the tokens returned for missing tokens. Mostly, + * you will want to create something special for identifier + * tokens. For literals such as '{' and ',', the default + * action in the parser or tree parser works. It simply creates + * a CommonToken of the appropriate type. The text will be the token. + * If you change what tokens must be created by the lexer, + * override this method to create the appropriate tokens.</p> + * + * @param {org.antlr.runtime.IntStream} input + * @param {org.antlr.runtime.RecognitionException} e + * @param {Number} expectedTokenType + * @param {org.antlr.runtime.BitSet} follow + * @returns {Object} + */ + getMissingSymbol: function(input, + e, + expectedTokenType, + follow) + { + return null; + }, + + + /** + * Consume tokens until one matches the given token or token set + * @param {org.antlr.runtime.IntStream} input + * @param {Number|org.antlr.runtime.BitSet} set + */ + consumeUntil: function(input, set) { + var ttype = input.LA(1); + while (ttype != org.antlr.runtime.Token.EOF && !set.member(ttype) ) { + input.consume(); + ttype = input.LA(1); + } + }, + + /** + * Push a rule's follow set using our own hardcoded stack. + * @param {org.antlr.runtime.BitSet} fset + */ + pushFollow: function(fset) { + if ( (this.state._fsp +1)>=this.state.following.length ) { + var f = []; + var i; + for (i=this.state.following.length-1; i>=0; i--) { + f[i] = this.state.following[i]; + } + this.state.following = f; + } + this.state._fsp++; + this.state.following[this.state._fsp] = fset; + }, + + /** + * Sadly JavaScript doesn't provide a robust mechanism for runtime stack reflection. + * This makes implementing this function impossible without maintaining an auxillary + * stack data structure, which would be crazy expensive, especially in Lexers. As such, + * this method remains unimplemented. + * @deprecated + */ + getRuleInvocationStack: function(e, recognizerClassName) + { + throw new Error("Not implemented."); + }, + + /** + * Get this recognizer's backtracking level. + * @returns {Number} backtracking level + */ + getBacktrackingLevel: function() { + return this.state.backtracking; + }, + + /** Used to print out token names like ID during debugging and + * error reporting. The generated parsers implement a method + * that overrides this to point to their String[] tokenNames. + * @returns {Array} String array of token names. + */ + getTokenNames: function() { + return null; + }, + + /** For debugging and other purposes, might want the grammar name. + * Have ANTLR generate an implementation for this method. + * @returns {String} the grammar name. + */ + getGrammarFileName: function() { + return null; + }, + + /** A convenience method for use most often with template rewrites. + * Convert an array of Tokens to an array of Strings. + * @param {Array} array of org.antlr.runtime.Token objects. + * @returns {Array} array of string representations of the argument. + */ + toStrings: function(tokens) { + if ( !tokens ) { + return null; + } + var strings = []; + var i; + for (i=0; i<tokens.length; i++) { + strings.push(tokens[i].getText()); + } + return strings; + }, + + /** Given a rule number and a start token index number, return + * MEMO_RULE_UNKNOWN if the rule has not parsed input starting from + * start index. If this rule has parsed input starting from the + * start index before, then return where the rule stopped parsing. + * It returns the index of the last token matched by the rule. + * + * <p>For now we use a hashtable and just the slow Object-based one. + * Later, we can make a special one for ints and also one that + * tosses out data after we commit past input position i.</p> + * @param {Number} ruleIndex + * @param {Number} ruleStartIndex + * @returns {Number} + */ + getRuleMemoization: function(ruleIndex, ruleStartIndex) { + if ( !this.state.ruleMemo[ruleIndex] ) { + this.state.ruleMemo[ruleIndex] = {}; + } + var stopIndexI = + this.state.ruleMemo[ruleIndex][ruleStartIndex]; + if ( !org.antlr.lang.isNumber(stopIndexI) ) { + return org.antlr.runtime.BaseRecognizer.MEMO_RULE_UNKNOWN; + } + return stopIndexI; + }, + + /** Has this rule already parsed input at the current index in the + * input stream? Return the stop token index or MEMO_RULE_UNKNOWN. + * If we attempted but failed to parse properly before, return + * MEMO_RULE_FAILED. + * + * <p>This method has a side-effect: if we have seen this input for + * this rule and successfully parsed before, then seek ahead to + * 1 past the stop token matched for this rule last time.</p> + * @param {org.antlr.runtime.IntStream} input + * @param {Number} ruleIndex + * @returns {Boolean} + */ + alreadyParsedRule: function(input, ruleIndex) { + var stopIndex = this.getRuleMemoization(ruleIndex, input.index()); + if ( stopIndex==org.antlr.runtime.BaseRecognizer.MEMO_RULE_UNKNOWN ) { + return false; + } + if ( stopIndex==org.antlr.runtime.BaseRecognizer.MEMO_RULE_FAILED ) { + //System.out.println("rule "+ruleIndex+" will never succeed"); + this.state.failed=true; + } + else { + input.seek(stopIndex+1); // jump to one past stop token + } + return true; + }, + + /** Record whether or not this rule parsed the input at this position + * successfully. Use a standard java hashtable for now. + * @param {org.antlr.runtime.IntStream} input + * @param {Number} ruleIndex + * @param {Number} ruleStartIndex + */ + memoize: function(input, + ruleIndex, + ruleStartIndex) + { + var stopTokenIndex = this.state.failed ? + org.antlr.runtime.BaseRecognizer.MEMO_RULE_FAILED : input.index()-1; + if ( !org.antlr.lang.isValue(this.state.ruleMemo) ) { + throw new Error("!!!!!!!!! memo array is null for "+ this.getGrammarFileName()); + } + if ( ruleIndex >= this.state.ruleMemo.length ) { + throw new Error("!!!!!!!!! memo size is "+this.state.ruleMemo.length+", but rule index is "+ruleIndex); + } + if ( org.antlr.lang.isValue(this.state.ruleMemo[ruleIndex]) ) { + this.state.ruleMemo[ruleIndex][ruleStartIndex] = stopTokenIndex; + } + }, + + /** return how many rule/input-index pairs there are in total. + * TODO: this includes synpreds. + * @returns {Number} + */ + getRuleMemoizationCacheSize: function() { + var n = 0, i; + for (i = 0; this.state.ruleMemo && i < this.state.ruleMemo.length; i++) { + var ruleMap = this.state.ruleMemo[i]; + if ( ruleMap ) { + // @todo need to get size of rulemap? + n += ruleMap.length; // how many input indexes are recorded? + } + } + return n; + }, + + /** + * When a grammar is compiled with the tracing flag enabled, this method is invoked + * at the start of each rule. + * @param {String} ruleName the current ruleName + * @param {Number} ruleIndex + * @param {Object} inputSymbol + */ + traceIn: function(ruleName, ruleIndex, inputSymbol) { + this.emitErrorMessage("enter "+ruleName+" "+inputSymbol); + if ( this.state.failed ) { + this.emitErrorMessage(" failed="+this.failed); + } + if ( this.state.backtracking>0 ) { + this.emitErrorMessage(" backtracking="+this.state.backtracking); + } + // System.out.println(); + }, + + /** + * When a grammar is compiled with the tracing flag enabled, this method is invoked + * at the end of each rule. + * @param {String} ruleName the current ruleName + * @param {Number} ruleIndex + * @param {Object} inputSymbol + */ + traceOut: function(ruleName, ruleIndex, inputSymbol) { + this.emitErrorMessage("exit "+ruleName+" "+inputSymbol); + if ( this.state.failed ) { + this.emitErrorMessage(" failed="+this.state.failed); + } + if ( this.state.backtracking>0 ) { + this.emitErrorMessage(" backtracking="+this.state.backtracking); + } + } +}; diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/BitSet.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/BitSet.js new file mode 100755 index 0000000..abb8422 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/BitSet.js @@ -0,0 +1,706 @@ +/** + * A BitSet similar to java.util.BitSet. + * + * <p>JavaScript Note: There is no good way to implement something like this in + * JavaScript. JS has no true int type, arrays are usually implemented as + * hashes, etc. This class should probably be nixed for something that is + * similarly (in)efficient, but more clear.</p> + * + * @class + * @param {Number|Array} [bits] a 32 bit number or array of 32 bit numbers + * representing the bitset. These are typically + * generated by the ANTLR Tool. + */ +org.antlr.runtime.BitSet = function(bits) { + if (!bits) { + bits = org.antlr.runtime.BitSet.BITS; + } + + if (org.antlr.lang.isArray(bits)) { + /** + * An array of Numbers representing the BitSet. + * @type Array + */ + this.bits = bits; + } else if(org.antlr.lang.isNumber(bits)) { + this.bits = []; + } +}; + +org.antlr.lang.augmentObject(org.antlr.runtime.BitSet, { + /** + * Number of bits in each number. + * @constant + * @memberOf org.antlr.runtime.BitSet + */ + BITS: 32, + + /** + * Log (base 2) of the number of bits in each number. + * @constant + * @memberOf org.antlr.runtime.BitSet + */ + LOG_BITS: 5, // 2^5 == 32 + + /** + * We will often need to do a mod operator (i mod nbits). Its + * turns out that, for powers of two, this mod operation is + * same as (i & (nbits-1)). Since mod is slow, we use a + * precomputed mod mask to do the mod instead. + * @constant + * @memberOf org.antlr.runtime.BitSet + */ + MOD_MASK: 31, // BITS - 1 + + /** + * Create mask for bit modded to fit in a single word. + * @example + * bitmask(35) => 00000000000000000000000000000100 + * bitmask(3) => 00000000000000000000000000000100 + * @param {Number} bitNumber the bit to create a mask for. + * @returns {Number} the bitmask. + * @memberOf org.antlr.runtime.BitSet + * @private + */ + bitMask: function(bitNumber) { + var bitPosition = bitNumber & org.antlr.runtime.BitSet.MOD_MASK; + return 1 << bitPosition; + }, + + /** + * Calculate the minimum number of bits needed to represent el. + * @param {Number} el a number to be included in the BitSet. + * @returns {Number} the number of bits need to create a BitSet with member + * el. + * @memberOf org.antlr.runtime.BitSet + * @private + */ + numWordsToHold: function(el) { + return (el >> org.antlr.runtime.BitSet.LOG_BITS) + 1; + }, + + /** + * @param {Number} bit a number to be included in the BitSet + * @returns {Number} the index of the word in the field bits that would + * hold bit. + * @memberOf org.antlr.runtime.BitSet + * @private + */ + wordNumber: function(bit) { + return bit >> org.antlr.runtime.BitSet.LOG_BITS; // bit / BITS + }, + + /** + * BitSet factory method. + * + * <p>Operates in a number of modes: + * <ul> + * <li>If el is a number create the BitSet containing that number.</li> + * <li>If el is an array create the BitSet containing each number in the + * array.</li> + * <li>If el is a BitSet return el.</li> + * <li>If el is an Object create the BitSet containing each numeric value + * in el.</li> + * <li>If el is a number and el2 is a number return a BitSet containing + * the numbers between el and el2 (inclusive).</li> + * </ul> + * </p> + * @param {Number|Array|org.antlr.runtime.BitSet|Object} el + * @param {Number} el2 + * @returns {org.antlr.runtime.BitSet} + * @memberOf org.antlr.runtime.BitSet + */ + of: function(el, el2) { + var i, n, s, keys; + + if (org.antlr.lang.isNumber(el)) { + if (org.antlr.lang.isNumber(el2)) { + s = new org.antlr.runtime.BitSet(el2 + 1); + for (i = el; i <= el2; i++) { + n = org.antlr.runtime.BitSet.wordNumber(i); + s.bits[n] |= org.antlr.runtime.BitSet.bitMask(i); + } + return s; + } else { + s = new org.antlr.runtime.BitSet(el + 1); + s.add(el); + return s; + } + } else if(org.antlr.lang.isArray(el)) { + s = new org.antlr.runtime.BitSet(); + for (i=el.length-1; i>=0; i--) { + s.add(el[i]); + } + return s; + } else if (el instanceof org.antlr.runtime.BitSet) { + if (!el) { + return null; + } + return el; + } else if (el instanceof org.antlr.runtime.IntervalSet) { + if (!el) { + return null; + } + s = new org.antlr.runtime.BitSet(); + s.addAll(el); + return s; + } else if (org.antlr.lang.isObject(el)) { + keys = []; + for (i in el) { + if (org.antlr.lang.isNumber(i)) { + keys.push(i); + } + } + return org.antlr.runtime.BitSet.of(keys); + } + } +}); + + + +org.antlr.runtime.BitSet.prototype = { + /** + * Add el into this set. + * @param {Number} el the number to add to the set. + */ + add: function(el) { + var n = org.antlr.runtime.BitSet.wordNumber(el); + if (n >= this.bits.length) { + this.growToInclude(el); + } + this.bits[n] |= org.antlr.runtime.BitSet.bitMask(el); + }, + + /** + * Add multiple elements into this set. + * @param {Array|org.antlr.runtime.BitSet} elements the elements to be added to + * this set. + */ + addAll: function(elements) { + var other, + i, + e; + + if ( elements instanceof org.antlr.runtime.BitSet ) { + this.orInPlace(elements); + } + else if ( elements instanceof org.antlr.runtime.IntervalSet ) { + other = elements; + // walk set and add each interval + /* @todo after implementing intervalset + for (Iterator iter = other.intervals.iterator(); iter.hasNext();) { + Interval I = (Interval) iter.next(); + this.orInPlace(BitSet.range(I.a,I.b)); + }*/ + } else if (org.antlr.lang.isArray(elements)) { + for (i = 0; i < elements.length; i++) { + e = elements[i]; + this.add(e); + } + } else { + return; + } + }, + + /** + * Clone this BitSet and then {@link #andInPlace} with a. + * @param {org.antlr.runtime.BitSet} a a bit set. + * @returns {org.antlr.runtime.BitSet} + */ + and: function(a) { + var s = this.clone(); + s.andInPlace(a); + return s; + }, + + /** + * Perform a logical AND of this target BitSet with the argument BitSet. + * + * This bit set is modified so that each bit in it has the value true if + * and only if it both initially had the value true and the corresponding + * bit in the bit set argument also had the value true. + * @param {org.antlr.runtime.BitSet} a a bit set. + * @returns {org.antlr.runtime.BitSet} + */ + andInPlace: function(a) { + var min = Math.min(this.bits.length, a.bits.length), + i; + for (i = min - 1; i >= 0; i--) { + this.bits[i] &= a.bits[i]; + } + // clear all bits in this not present in a (if this bigger than a). + for (i = min; i < this.bits.length; i++) { + this.bits[i] = 0; + } + }, + + /** + * Clear all bits or a specific bit. + * + * If no arguments given, sets all of the bits in this BitSet to false. + * If one argument given, sets the bit specified by the index to false. + * @param {Number} [el] the index of the bit to be cleared. + */ + clear: function(el) { + if (arguments.length===0) { + var i; + for (i = this.bits.length - 1; i >= 0; i--) { + this.bits[i] = 0; + } + return; + } + + var n = org.antlr.runtime.BitSet.wordNumber(el); + if (n >= this.bits.length) { // grow as necessary to accommodate + this.growToInclude(el); + } + this.bits[n] &= ~org.antlr.runtime.BitSet.bitMask(el); + }, + + /** + * Cloning this BitSet produces a new BitSet that is equal to it. + * + * The clone of the bit set is another bit set that has exactly the same + * bit set to true as this bit set. + * @returns {org.antlr.runtime.BitSet} a clone of this BitSet. + */ + clone: function() { + var i, len, b=[]; + for (i=0, len=this.bits.length; i<len; i++) { + b[i] = this.bits[i]; + } + return new org.antlr.runtime.BitSet(b); + }, + + /** + * Returns the number of bits of space actually in use by this BitSet to + * represent bit values. + * + * The maximum element in the set is the size - 1st element. + * @returns {Number} the number of bits currently in this bit set. + */ + size: function() { + var deg = 0, i, word, bit; + for (i = this.bits.length - 1; i >= 0; i--) { + word = this.bits[i]; + if (word !== 0) { + for (bit = org.antlr.runtime.BitSet.BITS - 1; bit >= 0; bit--) { + if ((word & (1 << bit)) !== 0) { + deg++; + } + } + } + } + return deg; + }, + + /** + * Compares this object against the specified object. + * + * The result is true if and only if the argument is not null and is a + * BitSet object that has exactly the same set of bits set to true as + * this bit set. That is, for every nonnegative int index k, + * <pre><code> + * ((BitSet)obj).get(k) == this.get(k) + * </code></pre> + * must be true. The current sizes of the two bit sets are not compared. + * @param {Object} other the object to compare with. + * @returns {Boolean} if the objects are the same; false otherwise. + */ + equals: function(other) { + if ( !other || !(other instanceof org.antlr.runtime.BitSet) ) { + return false; + } + + var otherSet = other, + i, + n = Math.min(this.bits.length, otherSet.bits.length); + + // for any bits in common, compare + for (i=0; i<n; i++) { + if (this.bits[i] != otherSet.bits[i]) { + return false; + } + } + + // make sure any extra bits are off + + if (this.bits.length > n) { + for (i = n+1; i<this.bits.length; i++) { + if (this.bits[i] !== 0) { + return false; + } + } + } + else if (otherSet.bits.length > n) { + for (i = n+1; i<otherSet.bits.length; i++) { + if (otherSet.bits[i] !== 0) { + return false; + } + } + } + + return true; + }, + + /** + * Grows the set to a larger number of bits. + * @param {Number} bit element that must fit in set + * @private + */ + growToInclude: function(bit) { + var newSize = Math.max(this.bits.length << 1, org.antlr.runtime.BitSet.numWordsToHold(bit)), + newbits = [], //new Array(newSize), + i; + for (i=0, len=this.bits.length; i<len; i++) { + newbits[i] = this.bits[i]; + } + this.bits = newbits; + }, + + /** + * Returns the value of the bit with the specified index. + * + * The value is true if the bit with the index el is currently set + * in this BitSet; otherwise, the result is false. + * @param {Number} el the bit index. + * @returns {Boolean} the value of the bit with the specified index. + */ + member: function(el) { + var n = org.antlr.runtime.BitSet.wordNumber(el); + if (n >= this.bits.length) { return false; } + return (this.bits[n] & org.antlr.runtime.BitSet.bitMask(el)) !== 0; + }, + + /** + * Returns the index of the first bit that is set to true. + * If no such bit exists then -1 is returned. + * @returns {Number} the index of the next set bit. + */ + getSingleElement: function() { + var i; + for (i = 0; i < (this.bits.length << org.antlr.runtime.BitSet.LOG_BITS); i++) { + if (this.member(i)) { + return i; + } + } + return -1; //Label.INVALID; + }, + + /** + * Returns true if this BitSet contains no bits that are set to true. + * @returns {Boolean} boolean indicating whether this BitSet is empty. + */ + isNil: function() { + var i; + for (i = this.bits.length - 1; i >= 0; i--) { + if (this.bits[i] !== 0) { + return false; + } + } + return true; + }, + + /** + * If a bit set argument is passed performs a {@link #subtract} of this bit + * set with the argument bit set. If no argument is passed, clone this bit + * set and {@link #notInPlace}. + * @param {org.antlr.runtime.BitSet} [set] + * @returns {org.antlr.runtime.BitSet} + */ + complement: function(set) { + if (set) { + return set.subtract(this); + } else { + var s = this.clone(); + s.notInPlace(); + return s; + } + }, + + /** + * If no arguments are passed sets all bits to the complement of their + * current values. If one argument is passed sets each bit from the + * beginning of the bit set to index1 (inclusive) to the complement of its + * current value. If two arguments are passed sets each bit from the + * specified index1 (inclusive) to the sepcified index2 (inclusive) to the + * complement of its current value. + * @param {Number} index1 + * @param {Number} index2 + */ + notInPlace: function() { + var minBit, maxBit, i, n; + if (arguments.length===0) { + for (i = this.bits.length - 1; i >= 0; i--) { + this.bits[i] = ~this.bits[i]; + } + } else { + if (arguments.length===1) { + minBit = 0; + maxBit = arguments[0]; + } else { + minBit = arguments[0]; + maxBit = arguments[1]; + } + // make sure that we have room for maxBit + this.growToInclude(maxBit); + for (i = minBit; i <= maxBit; i++) { + n = org.antlr.runtime.BitSet.wordNumber(i); + this.bits[n] ^= org.antlr.runtime.BitSet.bitMask(i); + } + } + + }, + + /** + * Performs a logical OR of this bit set with the bit set argument. + * If no argument is passed, return this bit set. Otherwise a clone of + * this bit set is modified so that a bit in it has the value true if and + * only if it either already had the value true or the corresponding bit + * in the bit set argument has the value true. + * @param {org.antlr.runtime.BitSet} [a] a bit set. + * @returns {org.antlr.runtime.BitSet} + */ + or: function(a) { + if ( !a ) { + return this; + } + var s = this.clone(); + s.orInPlace(a); + return s; + }, + + /** + * Performs a logical {@link #or} in place. + * @param {org.antlr.runtime.BitSet} [a] + * @returns {org.antlr.runtime.BitSet} + */ + orInPlace: function(a) { + if ( !a ) { + return; + } + // If this is smaller than a, grow this first + if (a.bits.length > this.bits.length) { + this.setSize(a.bits.length); + } + var min = Math.min(this.bits.length, a.bits.length), + i; + for (i = min - 1; i >= 0; i--) { + this.bits[i] |= a.bits[i]; + } + }, + + /** + * Sets the bit specified by the index to false. + * @param {Number} bitIndex the index of the bit to be cleared. + */ + remove: function(el) { + var n = org.antlr.runtime.BitSet.wordNumber(el); + if (n >= this.bits.length) { + this.growToInclude(el); + } + this.bits[n] &= ~org.antlr.runtime.BitSet.bitMask(el); + }, + + /** + * Grows the internal bits array to include at least nwords numbers. + * @private + * @param {Number} nwords how many words the new set should be + * @private + */ + setSize: function(nwords) { + var n = nwords - this.bits.length; + while (n>=0) { + this.bits.push(0); + n--; + } + }, + + /** + * Returns the number of bits capable of being represented by this bit set + * given its current size. + * @returns {Number} the maximum number of bits that can be represented at + * the moment. + * @private + */ + numBits: function() { + return this.bits.length << org.antlr.runtime.BitSet.LOG_BITS; // num words * bits per word + }, + + /** + * Return how much space is being used by the bits array not + * how many actually have member bits on. + * @returns {Number} the length of the internal bits array. + * @private + */ + lengthInLongWords: function() { + return this.bits.length; + }, + + /** + * Is this bit set contained within a? + * @param {org.antlr.runtime.BitSet} a bit set + * @returns {Boolean} true if and only if a is a subset of this bit set. + */ + subset: function(a) { + if (!a) { return false; } + return this.and(a).equals(this); + }, + + /** + * Subtract the elements of the argument bit set from this bit set in place. + * That is, for each set bit in the argument bit set, set the corresponding + * bit in this bit set to false. + * @param {org.antlr.runtime.BitSet} a bit set. + */ + subtractInPlace: function(a) { + if (!a) { return; } + // for all words of 'a', turn off corresponding bits of 'this' + var i; + for (i = 0; i < this.bits.length && i < a.bits.length; i++) { + this.bits[i] &= ~a.bits[i]; + } + }, + + /** + * Perform a {@link #subtractInPlace} on a clone of this bit set. + * @param {org.antlr.runtime.BitSet} a bit set. + * @returns {org.antlr.runtime.BitSet} the new bit set. + */ + subtract: function(a) { + if (!a || !(a instanceof org.antlr.runtime.BitSet)) { return null; } + + var s = this.clone(); + s.subtractInPlace(a); + return s; + }, + + /* antlr-java needs this to make its class hierarchy happy . . . + toList: function() { + throw new Error("BitSet.toList() unimplemented"); + }, + */ + + /** + * Creates an array of the indexes of each bit set in this bit set. + * @returns {Array} + */ + toArray: function() { + var elems = [], //new Array(this.size()), + i, + en = 0; + for (i = 0; i < (this.bits.length << org.antlr.runtime.BitSet.LOG_BITS); i++) { + if (this.member(i)) { + elems[en++] = i; + } + } + return elems; + }, + + /** + * Returns the internal representation of this bit set. + * This representation is an array of numbers, each representing 32 bits. + * @returns {Array} + */ + toPackedArray: function() { + return this.bits; + }, + + /** + * Returns a string representation of this bit set. + * <p>For every index for which this BitSet contains a bit in the set state, + * the decimal representation of that index is included in the result. + * Such indices are listed in order from lowest to highest, separated by + * ", " (a comma and a space) and surrounded by braces, resulting in the + * usual mathematical notation for a set of integers.</p> + * + * <p>If a grammar g is passed, print g.getTokenDisplayName(i) for each set + * index instead of the numerical index.</p> + * + * <>If two arguments are passed, the first will be used as a custom + * separator string. The second argument is an array whose i-th element + * will be added if the corresponding bit is set.</p> + * + * @param {Object|String} [arg1] an Object with function property + * getTokenDispalyName or a String that will be used as a list + * separator. + * @param {Array} [vocabulary] array from which the i-th value will be + * drawn if the corresponding bit is set. Must pass a string as the + * first argument if using this option. + * @return A commma-separated list of values + */ + toString: function() { + if (arguments.length===0) { + return this.toString1(null); + } else { + if (org.antlr.lang.isString(arguments[0])) { + if (!org.antlr.lang.isValue(arguments[1])) { + return this.toString1(null); + } else { + return this.toString2(arguments[0], arguments[1]); + } + } else { + return this.toString1(arguments[0]); + } + } + }, + + /** + * Transform a bit set into a string by formatting each element as an + * integer separator The string to put in between elements + * @private + * @return A commma-separated list of values + */ + toString1: function(g) { + var buf = "{", + separator = ",", + i, + havePrintedAnElement = false; + + for (i = 0; i < (this.bits.length << org.antlr.runtime.BitSet.LOG_BITS); i++) { + if (this.member(i)) { + if (i > 0 && havePrintedAnElement ) { + buf += separator; + } + if ( g ) { + buf += g.getTokenDisplayName(i); + } + else { + buf += i.toString(); + } + havePrintedAnElement = true; + } + } + return buf + "}"; + }, + + /** + * Create a string representation where instead of integer elements, the + * ith element of vocabulary is displayed instead. Vocabulary is a Vector + * of Strings. + * separator The string to put in between elements + * @private + * @return A commma-separated list of character constants. + */ + toString2: function(separator, vocabulary) { + var str = "", + i; + for (i = 0; i < (this.bits.length << org.antlr.runtime.BitSet.LOG_BITS); i++) { + if (this.member(i)) { + if (str.length > 0) { + str += separator; + } + if (i >= vocabulary.size()) { + str += "'" + i + "'"; + } + else if (!org.antlr.lang.isValue(vocabulary.get(i))) { + str += "'" + i + "'"; + } + else { + str += vocabulary.get(i); + } + } + } + return str; + } +}; diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/CharStream.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/CharStream.js new file mode 100755 index 0000000..d850995 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/CharStream.js @@ -0,0 +1,20 @@ +/** + * A source of characters for an ANTLR lexer. + * This class should not be instantiated directly. Instead, use one of its subclasses. + * @class + * @extends org.antlr.runtime.IntStream + */ +org.antlr.runtime.CharStream = function() {}; + +org.antlr.lang.extend(org.antlr.runtime.CharStream, + org.antlr.runtime.IntStream); + +org.antlr.lang.augmentObject(org.antlr.runtime.CharStream, +/** @lends org.antlr.runtime.CharStream */ +{ + /** + * Token type of the EOF character. + * @type Number + */ + EOF: -1 +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/CommonToken.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/CommonToken.js new file mode 100755 index 0000000..dd8bcb5 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/CommonToken.js @@ -0,0 +1,147 @@ +org.antlr.runtime.CommonToken = function() { + var oldToken; + + this.charPositionInLine = -1; // set to invalid position + this.channel = 0; // org.antlr.runtime.CommonToken.DEFAULT_CHANNEL + this.index = -1; + + if (arguments.length == 1) { + if (org.antlr.lang.isNumber(arguments[0])) { + this.type = arguments[0]; + } else { + oldToken = arguments[0]; + this.text = oldToken.getText(); + this.type = oldToken.getType(); + this.line = oldToken.getLine(); + this.index = oldToken.getTokenIndex(); + this.charPositionInLine = oldToken.getCharPositionInLine(); + this.channel = oldToken.getChannel(); + if ( oldToken instanceof org.antlr.runtime.CommonToken ) { + this.start = oldToken.start; + this.stop = oldToken.stop; + } + } + } else if (arguments.length == 2) { + this.type = arguments[0]; + this.text = arguments[1]; + this.channel = 0; // org.antlr.runtime.CommonToken.DEFAULT_CHANNEL + } else if (arguments.length == 5) { + this.input = arguments[0]; + this.type = arguments[1]; + this.channel = arguments[2]; + this.start = arguments[3]; + this.stop = arguments[4]; + } +}; + +org.antlr.lang.extend(org.antlr.runtime.CommonToken, + org.antlr.runtime.Token, +{ + getType: function() { + return this.type; + }, + + setLine: function(line) { + this.line = line; + }, + + getText: function() { + if ( org.antlr.lang.isString(this.text) ) { + return this.text; + } + if ( !this.input ) { + return null; + } + this.text = this.input.substring(this.start,this.stop); + return this.text; + }, + + /** Override the text for this token. getText() will return this text + * rather than pulling from the buffer. Note that this does not mean + * that start/stop indexes are not valid. It means that that input + * was converted to a new string in the token object. + */ + setText: function(text) { + this.text = text; + }, + + getLine: function() { + return this.line; + }, + + getCharPositionInLine: function() { + return this.charPositionInLine; + }, + + setCharPositionInLine: function(charPositionInLine) { + this.charPositionInLine = charPositionInLine; + }, + + getChannel: function() { + return this.channel; + }, + + setChannel: function(channel) { + this.channel = channel; + }, + + setType: function(type) { + this.type = type; + }, + + getStartIndex: function() { + return this.start; + }, + + setStartIndex: function(start) { + this.start = start; + }, + + getStopIndex: function() { + return this.stop; + }, + + setStopIndex: function(stop) { + this.stop = stop; + }, + + getTokenIndex: function() { + return this.index; + }, + + setTokenIndex: function(index) { + this.index = index; + }, + + getInputStream: function() { + return this.input; + }, + + setInputStream: function(input) { + this.input = input; + }, + + toString: function() { + var channelStr = ""; + if ( this.channel>0 ) { + channelStr=",channel="+this.channel; + } + var txt = this.getText(); + if ( !org.antlr.lang.isNull(txt) ) { + txt = txt.replace(/\n/g,"\\\\n"); + txt = txt.replace(/\r/g,"\\\\r"); + txt = txt.replace(/\t/g,"\\\\t"); + } + else { + txt = "<no text>"; + } + return "[@"+this.getTokenIndex()+","+this.start+":"+this.stop+"='"+txt+"',<"+this.type+">"+channelStr+","+this.line+":"+this.getCharPositionInLine()+"]"; + } +}); + +/* Monkey patch Token static vars that depend on CommonToken. */ +org.antlr.lang.augmentObject(org.antlr.runtime.Token, { + EOF_TOKEN: new org.antlr.runtime.CommonToken(org.antlr.runtime.CharStream.EOF), + INVALID_TOKEN: new org.antlr.runtime.CommonToken(0), + SKIP_TOKEN: new org.antlr.runtime.CommonToken(0) +}, true); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/CommonTokenStream.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/CommonTokenStream.js new file mode 100755 index 0000000..1af664b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/CommonTokenStream.js @@ -0,0 +1,321 @@ +/** The most common stream of tokens is one where every token is buffered up + * and tokens are prefiltered for a certain channel (the parser will only + * see these tokens and cannot change the filter channel number during the + * parse). + * + * TODO: how to access the full token stream? How to track all tokens matched per rule? + */ +org.antlr.runtime.CommonTokenStream = function(tokenSource, channel) { + this.p = -1; + this.channel = org.antlr.runtime.Token.DEFAULT_CHANNEL; + this.v_discardOffChannelTokens = false; + + this.tokens = []; + if (arguments.length >= 2) { + this.channel = channel; + } else if (arguments.length === 1) { + this.tokenSource = tokenSource; + } +}; + +org.antlr.lang.extend(org.antlr.runtime.CommonTokenStream, + org.antlr.runtime.TokenStream, +{ + /** Reset this token stream by setting its token source. */ + setTokenSource: function(tokenSource) { + this.tokenSource = tokenSource; + this.tokens = []; + this.p = -1; + this.channel = org.antlr.runtime.Token.DEFAULT_CHANNEL; + }, + + /** Load all tokens from the token source and put in tokens. + * This is done upon first LT request because you might want to + * set some token type / channel overrides before filling buffer. + */ + fillBuffer: function() { + var index = 0, + t = this.tokenSource.nextToken(), + discard, + channelI; + while ( org.antlr.lang.isValue(t) && + t.getType()!=org.antlr.runtime.CharStream.EOF ) + { + discard = false; + // is there a channel override for token type? + if ( this.channelOverrideMap ) { + channelI = this.channelOverrideMap[t.getType()]; + if ( org.antlr.lang.isValue(channelI) ) { + t.setChannel(channelI); + } + } + if ( this.discardSet && this.discardSet[t.getType()] ) + { + discard = true; + } + else if ( this.v_discardOffChannelTokens && + t.getChannel()!=this.channel ) + { + discard = true; + } + if ( !discard ) { + t.setTokenIndex(index); + this.tokens.push(t); + index++; + } + t = this.tokenSource.nextToken(); + } + // leave p pointing at first token on channel + this.p = 0; + this.p = this.skipOffTokenChannels(this.p); + }, + + /** Move the input pointer to the next incoming token. The stream + * must become active with LT(1) available. consume() simply + * moves the input pointer so that LT(1) points at the next + * input symbol. Consume at least one token. + * + * Walk past any token not on the channel the parser is listening to. + */ + consume: function() { + if ( this.p<this.tokens.length ) { + this.p++; + this.p = this.skipOffTokenChannels(this.p); // leave p on valid token + } + }, + + /** Given a starting index, return the index of the first on-channel + * token. + */ + skipOffTokenChannels: function(i) { + var n = this.tokens.length; + while ( i<n && (this.tokens[i]).getChannel()!=this.channel ) { + i++; + } + return i; + }, + + skipOffTokenChannelsReverse: function(i) { + while ( i>=0 && (this.tokens[i]).getChannel()!=this.channel ) { + i--; + } + return i; + }, + + /** A simple filter mechanism whereby you can tell this token stream + * to force all tokens of type ttype to be on channel. For example, + * when interpreting, we cannot exec actions so we need to tell + * the stream to force all WS and NEWLINE to be a different, ignored + * channel. + */ + setTokenTypeChannel: function(ttype, channel) { + if ( !this.channelOverrideMap ) { + this.channelOverrideMap = {}; + } + this.channelOverrideMap[ttype] = channel; + }, + + discardTokenType: function(ttype) { + if ( !this.discardSet ) { + this.discardSet = {}; + } + this.discardSet[ttype] = true; + }, + + discardOffChannelTokens: function(b) { + this.v_discardOffChannelTokens = b; + }, + + /** Given a start and stop index, return a List of all tokens in + * the token type BitSet. Return null if no tokens were found. This + * method looks at both on and off channel tokens. + */ + getTokens: function(start, stop, types) { + if ( this.p === -1 ) { + this.fillBuffer(); + } + + if (arguments.length===0) { + return this.tokens; + } + + if (org.antlr.lang.isArray(types)) { + types = new org.antlr.runtime.BitSet(types); + } else if (org.antlr.lang.isNumber(types)) { + types = org.antlr.runtime.BitSet.of(types); + } + + if ( stop>=this.tokens.length ) { + stop=this.tokens.length-1; + } + if ( start<0 ) { + start=0; + } + if ( start>stop ) { + return null; + } + + // list = tokens[start:stop]:{Token t, t.getType() in types} + var filteredTokens = [], + i, + t; + for (i=start; i<=stop; i++) { + t = this.tokens[i]; + if ( !this.types || types.member(t.getType()) ) { + filteredTokens.push(t); + } + } + if ( filteredTokens.length===0 ) { + filteredTokens = null; + } + return filteredTokens; + }, + + /** Get the ith token from the current position 1..n where k=1 is the + * first symbol of lookahead. + */ + LT: function(k) { + if ( this.p === -1 ) { + this.fillBuffer(); + } + if ( k===0 ) { + return null; + } + if ( k<0 ) { + return this.LB(-1*k); + } + if ( (this.p+k-1) >= this.tokens.length ) { + return org.antlr.runtime.Token.EOF_TOKEN; + } + var i = this.p, + n = 1; + // find k good tokens + while ( n<k ) { + // skip off-channel tokens + i = this.skipOffTokenChannels(i+1); // leave p on valid token + n++; + } + if ( i>=this.tokens.length ) { + return org.antlr.runtime.Token.EOF_TOKEN; + } + return this.tokens[i]; + }, + + /** Look backwards k tokens on-channel tokens */ + LB: function(k) { + if ( this.p === -1 ) { + this.fillBuffer(); + } + if ( k===0 ) { + return null; + } + if ( (this.p-k)<0 ) { + return null; + } + + var i = this.p, + n = 1; + // find k good tokens looking backwards + while ( n<=k ) { + // skip off-channel tokens + i = this.skipOffTokenChannelsReverse(i-1); // leave p on valid token + n++; + } + if ( i<0 ) { + return null; + } + return this.tokens[i]; + }, + + /** Return absolute token i; ignore which channel the tokens are on; + * that is, count all tokens not just on-channel tokens. + */ + get: function(i) { + return this.tokens[i]; + }, + + LA: function(i) { + return this.LT(i).getType(); + }, + + mark: function() { + if ( this.p === -1 ) { + this.fillBuffer(); + } + this.lastMarker = this.index(); + return this.lastMarker; + }, + + release: function(marker) { + // no resources to release + }, + + size: function() { + return this.tokens.length; + }, + + index: function() { + return this.p; + }, + + rewind: function(marker) { + if (!org.antlr.lang.isNumber(marker)) { + marker = this.lastMarker; + } + this.seek(marker); + }, + + reset: function() { + this.p = 0; + this.lastMarker = 0; + }, + + seek: function(index) { + this.p = index; + }, + + getTokenSource: function() { + return this.tokenSource; + }, + + getSourceName: function() { + return this.getTokenSource().getSourceName(); + }, + + toString: function(start, stop) { + if (arguments.length===0) { + if ( this.p === -1 ) { + this.fillBuffer(); + } + start = 0; + stop = this.tokens.length-1; + } + + if (!org.antlr.lang.isNumber(start) && !org.antlr.lang.isNumber(stop)) { + if ( org.antlr.lang.isValue(start) && org.antlr.lang.isValue(stop) ) { + start = start.getTokenIndex(); + stop = stop.getTokenIndex(); + } else { + return null; + } + } + + var buf = "", + i; + + if ( start<0 || stop<0 ) { + return null; + } + if ( this.p == -1 ) { + this.fillBuffer(); + } + if ( stop>=this.tokens.length ) { + stop = this.tokens.length-1; + } + for (i = start; i <= stop; i++) { + t = this.tokens[i]; + buf = buf + this.tokens[i].getText(); + } + return buf; + } +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/DFA.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/DFA.js new file mode 100755 index 0000000..fb69996 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/DFA.js @@ -0,0 +1,149 @@ +/** A DFA implemented as a set of transition tables. + * + * Any state that has a semantic predicate edge is special; those states + * are generated with if-then-else structures in a specialStateTransition() + * which is generated by cyclicDFA template. + * + * There are at most 32767 states (16-bit signed short). + * Could get away with byte sometimes but would have to generate different + * types and the simulation code too. For a point of reference, the Java + * lexer's Tokens rule DFA has 326 states roughly. + */ +org.antlr.runtime.DFA = function() {}; + +org.antlr.runtime.DFA.prototype = { + /** From the input stream, predict what alternative will succeed + * using this DFA (representing the covering regular approximation + * to the underlying CFL). Return an alternative number 1..n. Throw + * an exception upon error. + */ + predict: function(input) { + var mark = input.mark(), // remember where decision started in input + s = 0, // we always start at s0 + specialState, + c, + snext; + + try { + while ( true ) { + specialState = this.special[s]; + if ( specialState>=0 ) { + s = this.specialStateTransition(specialState,input); + if (s===-1) { + this.noViableAlt(s, input); + return 0; + } + input.consume(); + continue; + } + if ( this.accept[s] >= 1 ) { + return this.accept[s]; + } + // look for a normal char transition + c = input.LA(1); // -1 == \uFFFF, all tokens fit in 65000 space + + if (c===org.antlr.runtime.Token.EOF) { + c = -1; + } else if (org.antlr.lang.isString(c)) { + c = c.charCodeAt(0); + } + + if (c>=this.min[s] && c<=this.max[s]) { + snext = this.transition[s][c-this.min[s]]; // move to next state + if ( snext < 0 ) { + // was in range but not a normal transition + // must check EOT, which is like the else clause. + // eot[s]>=0 indicates that an EOT edge goes to another + // state. + if ( this.eot[s]>=0 ) { // EOT Transition to accept state? + s = this.eot[s]; + input.consume(); + // TODO: I had this as return accept[eot[s]] + // which assumed here that the EOT edge always + // went to an accept...faster to do this, but + // what about predicated edges coming from EOT + // target? + continue; + } + this.noViableAlt(s,input); + return 0; + } + s = snext; + input.consume(); + continue; + } + if ( this.eot[s]>=0 ) { // EOT Transition? + s = this.eot[s]; + input.consume(); + continue; + } + if ( c==org.antlr.runtime.Token.EOF && this.eof[s]>=0 ) { // EOF Transition to accept state? + return this.accept[this.eof[s]]; + } + // not in range and not EOF/EOT, must be invalid symbol + this.noViableAlt(s,input); + return 0; + } + } + finally { + input.rewind(mark); + } + }, + + noViableAlt: function(s, input) { + if (this.recognizer.state.backtracking>0) { + this.recognizer.state.failed=true; + return; + } + var nvae = + new org.antlr.runtime.NoViableAltException(this.getDescription(), + this.decisionNumber, + s, + input); + this.error(nvae); + throw nvae; + }, + + /** A hook for debugging interface */ + error: function(nvae) { }, + + specialStateTransition: function(s, input) { + return -1; + }, + + getDescription: function() { + return "n/a"; + } +}; + +org.antlr.lang.augmentObject(org.antlr.runtime.DFA, { + /** Given a String that has a run-length-encoding of some unsigned shorts + * like "\1\2\3\9", convert to short[] {2,9,9,9}. + */ + unpackEncodedString: function(encodedString) { + // walk first to find how big it is. + var i, + data = [], + di = 0, + n, + v, + j; + for (i=0; i<encodedString.length; i+=2) { + n = encodedString.charCodeAt(i); + v = encodedString.charCodeAt(i+1); + if (v===0xffff) { + v = -1; // overflow at 16 bits + } + // add v n times to data + for (j=1; j<=n; j++) { + data[di++] = v; + } + } + return data; + }, + + // alias + unpackEncodedStringToUnsignedChars: function(encodedString) { + return org.antlr.runtime.DFA.unpackEncodedString(encodedString); + } +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/EarlyExitException.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/EarlyExitException.js new file mode 100755 index 0000000..50b8b4c --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/EarlyExitException.js @@ -0,0 +1,23 @@ +/** The recognizer did not match anything for a ()+ loop. + * + * @class + * @param {Number} decisionNumber + * @param {org.antlr.runtime.CommonTokenStream|org.antlr.runtime.tree.TreeNodeStream|org.antlr.runtime.ANTLRStringStream} input input stream that has an exception. + * @extends org.antlr.runtime.RecognitionException + */ +org.antlr.runtime.EarlyExitException = function(decisionNumber, input) { + org.antlr.runtime.EarlyExitException.superclass.constructor.call( + this, input); + this.decisionNumber = decisionNumber; +}; + +org.antlr.lang.extend( + org.antlr.runtime.EarlyExitException, + org.antlr.runtime.RecognitionException, +/** @lends org.antlr.runtime.EarlyExitException.prototype */ +{ + /** Name of this class. + * @type String + */ + name: "org.antlr.runtime.EarlyExitException" +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/FailedPredicateException.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/FailedPredicateException.js new file mode 100755 index 0000000..54b68b7 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/FailedPredicateException.js @@ -0,0 +1,34 @@ +/** A semantic predicate failed during validation. Validation of predicates + * occurs when normally parsing the alternative just like matching a token. + * Disambiguating predicate evaluation occurs when we hoist a predicate into + * a prediction decision. + * + * @class + * @param {org.antlr.runtime.CommonTokenStream|org.antlr.runtime.tree.TreeNodeStream|org.antlr.runtime.ANTLRStringStream} input input stream that has an exception. + * @param {String} ruleName name of the rule in which the exception occurred. + * @param {String} predicateText the predicate that failed. + * @extends org.antlr.runtime.RecognitionException + */ +org.antlr.runtime.FailedPredicateException = function(input, ruleName, predicateText){ + org.antlr.runtime.FailedPredicateException.superclass.constructor.call(this, input); + this.ruleName = ruleName; + this.predicateText = predicateText; +}; + +org.antlr.lang.extend( + org.antlr.runtime.FailedPredicateException, + org.antlr.runtime.RecognitionException, +/** @lends org.antlr.runtime.FailedPredicateException.prototype */ +{ + /** Create a string representation of this exception. + * @returns {String} + */ + toString: function() { + return "FailedPredicateException("+this.ruleName+",{"+this.predicateText+"}?)"; + }, + + /** Name of this class. + * @type String + */ + name: "org.antlr.runtime.FailedPredicateException" +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/IndexOutOfBoundsExceptions.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/IndexOutOfBoundsExceptions.js new file mode 100755 index 0000000..7133092 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/IndexOutOfBoundsExceptions.js @@ -0,0 +1,7 @@ +org.antlr.runtime.IndexOutOfBoundsException = function(m) { + org.antlr.runtime.IndexOutOfBoundsException.superclass.constructor.call(this, m); +}; + +org.antlr.lang.extend(org.antlr.runtime.IndexOutOfBoundsException, Error, { + name: "org.antlr.runtime.IndexOutOfBoundsException" +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/Lexer.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/Lexer.js new file mode 100755 index 0000000..e484143 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/Lexer.js @@ -0,0 +1,284 @@ +/** A lexer is recognizer that draws input symbols from a character stream. + * lexer grammars result in a subclass of this object. A Lexer object + * uses simplified match() and error recovery mechanisms in the interest + * of speed. + */ +org.antlr.runtime.Lexer = function(input, state) { + if (state) { + org.antlr.runtime.Lexer.superclass.constructor.call(this, state); + } + if (input) { + this.input = input; + } +}; + +org.antlr.lang.extend(org.antlr.runtime.Lexer, org.antlr.runtime.BaseRecognizer, { + reset: function() { + // reset all recognizer state variables + org.antlr.runtime.Lexer.superclass.reset.call(this); + if ( org.antlr.lang.isValue(this.input) ) { + this.input.seek(0); // rewind the input + } + if ( !org.antlr.lang.isValue(this.state) ) { + return; // no shared state work to do + } + this.state.token = null; + this.state.type = org.antlr.runtime.Token.INVALID_TOKEN_TYPE; + this.state.channel = org.antlr.runtime.Token.DEFAULT_CHANNEL; + this.state.tokenStartCharIndex = -1; + this.state.tokenStartCharPositionInLine = -1; + this.state.tokenStartLine = -1; + this.state.text = null; + }, + + /** Return a token from this source; i.e., match a token on the char + * stream. + */ + nextToken: function() { + while (true) { + this.state.token = null; + this.state.channel = org.antlr.runtime.Token.DEFAULT_CHANNEL; + this.state.tokenStartCharIndex = this.input.index(); + this.state.tokenStartCharPositionInLine = this.input.getCharPositionInLine(); + this.state.tokenStartLine = this.input.getLine(); + this.state.text = null; + if ( this.input.LA(1)===org.antlr.runtime.CharStream.EOF ) { + return org.antlr.runtime.Token.EOF_TOKEN; + } + try { + this.mTokens(); + if ( !org.antlr.lang.isValue(this.state.token) ) { + this.emit(); + } + else if ( this.state.token==org.antlr.runtime.Token.SKIP_TOKEN ) { + continue; + } + return this.state.token; + } + catch (re) { + if ( re instanceof org.antlr.runtime.RecognitionException ) { + this.reportError(re); + } else if (re instanceof org.antlr.runtime.NoViableAltException) { + this.reportError(re); + this.recover(re); + } else { + throw re; + } + } + } + }, + + /** Instruct the lexer to skip creating a token for current lexer rule + * and look for another token. nextToken() knows to keep looking when + * a lexer rule finishes with token set to SKIP_TOKEN. Recall that + * if token==null at end of any token rule, it creates one for you + * and emits it. + */ + skip: function() { + this.state.token = org.antlr.runtime.Token.SKIP_TOKEN; + }, + + /** Set the char stream and reset the lexer */ + setCharStream: function(input) { + this.input = null; + this.reset(); + this.input = input; + }, + + getCharStream: function() { + return this.input; + }, + + getSourceName: function() { + return this.input.getSourceName(); + }, + + /** Currently does not support multiple emits per nextToken invocation + * for efficiency reasons. Subclass and override this method and + * nextToken (to push tokens into a list and pull from that list rather + * than a single variable as this implementation does). + * + * The standard method called to automatically emit a token at the + * outermost lexical rule. The token object should point into the + * char buffer start..stop. If there is a text override in 'text', + * use that to set the token's text. Override this method to emit + * custom Token objects. + * + * If you are building trees, then you should also override + * Parser or TreeParser.getMissingSymbol(). + */ + emit: function() { + if (arguments.length===0) { + var t = new org.antlr.runtime.CommonToken(this.input, this.state.type, this.state.channel, this.state.tokenStartCharIndex, this.getCharIndex()-1); + t.setLine(this.state.tokenStartLine); + t.setText(this.state.text); + t.setCharPositionInLine(this.state.tokenStartCharPositionInLine); + this.state.token = t; + return t; + } else { + this.state.token = arguments[0]; + } + }, + + match: function(s) { + var i = 0, + mte; + + if (org.antlr.lang.isString(s)) { + while ( i<s.length ) { + if ( this.input.LA(1)!=s.charAt(i) ) { + if ( this.state.backtracking>0 ) { + this.state.failed = true; + return; + } + mte = new org.antlr.runtime.MismatchedTokenException(s.charAt(i), this.input); + this.recover(mte); + throw mte; + } + i++; + this.input.consume(); + this.state.failed = false; + } + } else if (org.antlr.lang.isNumber(s)) { + if ( this.input.LA(1)!=s ) { + if ( this.state.backtracking>0 ) { + this.state.failed = true; + return; + } + mte = new org.antlr.runtime.MismatchedTokenException(s, this.input); + this.recover(mte); + throw mte; + } + this.input.consume(); + this.state.failed = false; + } + }, + + matchAny: function() { + this.input.consume(); + }, + + matchRange: function(a, b) { + if ( this.input.LA(1)<a || this.input.LA(1)>b ) { + if ( this.state.backtracking>0 ) { + this.state.failed = true; + return; + } + mre = new org.antlr.runtime.MismatchedRangeException(a,b,this.input); + this.recover(mre); + throw mre; + } + this.input.consume(); + this.state.failed = false; + }, + + getLine: function() { + return this.input.getLine(); + }, + + getCharPositionInLine: function() { + return this.input.getCharPositionInLine(); + }, + + /** What is the index of the current character of lookahead? */ + getCharIndex: function() { + return this.input.index(); + }, + + /** Return the text matched so far for the current token or any + * text override. + */ + getText: function() { + if ( org.antlr.lang.isString(this.state.text) ) { + return this.state.text; + } + return this.input.substring(this.state.tokenStartCharIndex,this.getCharIndex()-1); + }, + + /** Set the complete text of this token; it wipes any previous + * changes to the text. + */ + setText: function(text) { + this.state.text = text; + }, + + reportError: function(e) { + /** TODO: not thought about recovery in lexer yet. + * + // if we've already reported an error and have not matched a token + // yet successfully, don't report any errors. + if ( errorRecovery ) { + //System.err.print("[SPURIOUS] "); + return; + } + errorRecovery = true; + */ + + this.displayRecognitionError(this.getTokenNames(), e); + }, + + getErrorMessage: function(e, tokenNames) { + var msg = null; + if ( e instanceof org.antlr.runtime.MismatchedTokenException ) { + msg = "mismatched character "+this.getCharErrorDisplay(e.c)+" expecting "+this.getCharErrorDisplay(e.expecting); + } + else if ( e instanceof org.antlr.runtime.NoViableAltException ) { + msg = "no viable alternative at character "+this.getCharErrorDisplay(e.c); + } + else if ( e instanceof org.antlr.runtime.EarlyExitException ) { + msg = "required (...)+ loop did not match anything at character "+this.getCharErrorDisplay(e.c); + } + else if ( e instanceof org.antlr.runtime.MismatchedNotSetException ) { + msg = "mismatched character "+this.getCharErrorDisplay(e.c)+" expecting set "+e.expecting; + } + else if ( e instanceof org.antlr.runtime.MismatchedSetException ) { + msg = "mismatched character "+this.getCharErrorDisplay(e.c)+" expecting set "+e.expecting; + } + else if ( e instanceof org.antlr.runtime.MismatchedRangeException ) { + msg = "mismatched character "+this.getCharErrorDisplay(e.c)+" expecting set "+ + this.getCharErrorDisplay(e.a)+".."+this.getCharErrorDisplay(e.b); + } + else { + msg = org.antlr.runtime.Lexer.superclass.getErrorMessage.call(this, e, tokenNames); + } + return msg; + }, + + getCharErrorDisplay: function(c) { + var s = c; //String.fromCharCode(c); + switch ( s ) { + case org.antlr.runtime.Token.EOF : + s = "<EOF>"; + break; + case "\n" : + s = "\\n"; + break; + case "\t" : + s = "\\t"; + break; + case "\r" : + s = "\\r"; + break; + } + return "'"+s+"'"; + }, + + /** Lexers can normally match any char in it's vocabulary after matching + * a token, so do the easy thing and just kill a character and hope + * it all works out. You can instead use the rule invocation stack + * to do sophisticated error recovery if you are in a fragment rule. + */ + recover: function(re) { + this.input.consume(); + }, + + traceIn: function(ruleName, ruleIndex) { + var inputSymbol = String.fromCharCode(this.input.LT(1))+" line="+this.getLine()+":"+this.getCharPositionInLine(); + org.antlr.runtime.Lexer.superclass.traceIn.call(this, ruleName, ruleIndex, inputSymbol); + }, + + traceOut: function(ruleName, ruleIndex) { + var inputSymbol = String.fromCharCode(this.input.LT(1))+" line="+this.getLine()+":"+this.getCharPositionInLine(); + org.antlr.runtime.Lexer.superclass.traceOut.call(this, ruleName, ruleIndex, inputSymbol); + } +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedNotSetException.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedNotSetException.js new file mode 100755 index 0000000..fa18d3a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedNotSetException.js @@ -0,0 +1,13 @@ +org.antlr.runtime.MismatchedNotSetException = function(expecting, input) { + org.antlr.runtime.MismatchedNotSetException.superclass.constructor.call(this, expecting, input); +}; + +org.antlr.lang.extend( + org.antlr.runtime.MismatchedNotSetException, + org.antlr.runtime.MismatchedSetException, { + toString: function() { + return "MismatchedNotSetException(" + + this.getUnexpectedType() + "!=" + this.expecting + ")"; + }, + name: "org.antlr.runtime.MismatchedNotSetException" +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedRangeExceptions.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedRangeExceptions.js new file mode 100755 index 0000000..4f99d2a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedRangeExceptions.js @@ -0,0 +1,20 @@ +org.antlr.runtime.MismatchedRangeException = function(a, b, input) { + if (arguments.length===0) { + return this; + } + + org.antlr.runtime.MismatchedRangeException.superclass.constructor.call( + this, input); + this.a = a; + this.b = b; +}; + +org.antlr.lang.extend( + org.antlr.runtime.MismatchedRangeException, + org.antlr.runtime.RecognitionException, { + toString: function() { + return "MismatchedRangeException(" + + this.getUnexpectedType()+" not in ["+this.a+","+this.b+"])"; + }, + name: "org.antlr.runtime.MismatchedRangeException" +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedSetException.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedSetException.js new file mode 100755 index 0000000..b1fef8f --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedSetException.js @@ -0,0 +1,15 @@ +org.antlr.runtime.MismatchedSetException = function(expecting, input) { + org.antlr.runtime.MismatchedSetException.superclass.constructor.call( + this, input); + this.expecting = expecting; +}; + +org.antlr.lang.extend( + org.antlr.runtime.MismatchedSetException, + org.antlr.runtime.RecognitionException, { + toString: function() { + return "MismatchedSetException(" + + this.getUnexpectedType() + "!=" + this.expecting + ")"; + }, + name: "org.antlr.runtime.MismatchedSetException" +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedTokenException.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedTokenException.js new file mode 100755 index 0000000..0cd1b72 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedTokenException.js @@ -0,0 +1,19 @@ +org.antlr.runtime.MismatchedTokenException = function(expecting, input) { + if (arguments.length===0) { + this.expecting = org.antlr.runtime.Token.INVALID_TOKEN_TYPE; + } else { + org.antlr.runtime.MismatchedTokenException.superclass.constructor.call( + this, input); + this.expecting = expecting; + } +}; + +org.antlr.lang.extend( + org.antlr.runtime.MismatchedTokenException, + org.antlr.runtime.RecognitionException, { + toString: function() { + return "MismatchedTokenException(" + + this.getUnexpectedType() + "!=" + this.expecting + ")"; + }, + name: "org.antlr.runtime.MismatchedTokenException" +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedTreeNodeException.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedTreeNodeException.js new file mode 100755 index 0000000..a12e87e --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MismatchedTreeNodeException.js @@ -0,0 +1,17 @@ +org.antlr.runtime.MismatchedTreeNodeException = function(expecting, input) { + if (expecting && input) { + org.antlr.runtime.MismatchedTreeNodeException.superclass.constructor.call( + this, input); + this.expecting = expecting; + } +}; + +org.antlr.lang.extend( + org.antlr.runtime.MismatchedTreeNodeException, + org.antlr.runtime.RecognitionException, { + toString: function() { + return "MismatchedTreeNodeException(" + + this.getUnexpectedType() + "!=" + this.expecting + ")"; + }, + name: "org.antlr.runtime.MismatchedTreeNodeException" +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MissingTokenException.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MissingTokenException.js new file mode 100755 index 0000000..71a5f07 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/MissingTokenException.js @@ -0,0 +1,28 @@ +org.antlr.runtime.MissingTokenException = function(expecting, input, inserted) { + if (arguments.length>0) { + org.antlr.runtime.MissingTokenException.superclass.constructor.call( + this, expecting, input); + this.inserted = inserted; + } +}; + +org.antlr.lang.extend( + org.antlr.runtime.MissingTokenException, + org.antlr.runtime.MismatchedTokenException, { + getMissingType: function() { + return this.expecting; + }, + + toString: function() { + if (org.antlr.lang.isValue(this.inserted) && + org.antlr.lang.isValue(this.token)) + { + return "MissingTokenException(inserted "+this.inserted+" at "+this.token.getText()+")"; + } + if ( org.antlr.lang.isValue(this.token) ) { + return "MissingTokenException(at "+this.token.getText()+")"; + } + return "MissingTokenException"; + }, + name: "org.antlr.runtime.MissingTokenException" +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/NoViableAltException.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/NoViableAltException.js new file mode 100755 index 0000000..7f5eefe --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/NoViableAltException.js @@ -0,0 +1,24 @@ +org.antlr.runtime.NoViableAltException = function(grammarDecisionDescription, + decisionNumber, + stateNumber, + input) +{ + org.antlr.runtime.NoViableAltException.superclass.constructor.call(this, input); + this.grammarDecisionDescription = grammarDecisionDescription; + this.decisionNumber = decisionNumber; + this.stateNumber = stateNumber; +}; + +org.antlr.lang.extend( + org.antlr.runtime.NoViableAltException, + org.antlr.runtime.RecognitionException, { + toString: function() { + if ( this.input instanceof org.antlr.runtime.CharStream ) { + return "NoViableAltException('"+this.getUnexpectedType()+"'@["+this.grammarDecisionDescription+"])"; + } + else { + return "NoViableAltException("+this.getUnexpectedType()+"@["+this.grammarDecisionDescription+"])"; + } + }, + name: "org.antlr.runtime.NoViableAltException" +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/Parser.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/Parser.js new file mode 100755 index 0000000..47a260e --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/Parser.js @@ -0,0 +1,71 @@ +/** A parser for TokenStreams. "parser grammars" result in a subclass + * of this. + */ +org.antlr.runtime.Parser = function(input, state) { + org.antlr.runtime.Parser.superclass.constructor.call(this, state); + this.setTokenStream(input); +}; + +org.antlr.lang.extend(org.antlr.runtime.Parser, org.antlr.runtime.BaseRecognizer, { + reset: function() { + // reset all recognizer state variables + org.antlr.runtime.Parser.superclass.reset.call(this); + if ( org.antlr.lang.isValue(this.input) ) { + this.input.seek(0); // rewind the input + } + }, + + getCurrentInputSymbol: function(input) { + return input.LT(1); + }, + + getMissingSymbol: function(input, + e, + expectedTokenType, + follow) + { + var tokenText = + "<missing "+this.getTokenNames()[expectedTokenType]+">"; + var t = new org.antlr.runtime.CommonToken(expectedTokenType, tokenText); + var current = input.LT(1); + var old_current; + if ( current.getType() === org.antlr.runtime.Token.EOF ) { + old_current = current; + current = input.LT(-1); + // handle edge case where there are no good tokens in the stream + if (!current) { + current = old_current; + } + } + t.line = current.getLine(); + t.charPositionInLine = current.getCharPositionInLine(); + t.channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL; + return t; + }, + + + /** Set the token stream and reset the parser */ + setTokenStream: function(input) { + this.input = null; + this.reset(); + this.input = input; + }, + + getTokenStream: function() { + return this.input; + }, + + getSourceName: function() { + return this.input.getSourceName(); + }, + + traceIn: function(ruleName, ruleIndex) { + org.antlr.runtime.Parser.superclass.traceIn.call( + this, ruleName, ruleIndex, this.input.LT(1)); + }, + + traceOut: function(ruleName, ruleIndex) { + org.antlr.runtime.Parser.superclass.traceOut.call( + this, ruleName, ruleIndex, this.input.LT(1)); + } +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/ParserRuleReturnScope.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/ParserRuleReturnScope.js new file mode 100755 index 0000000..493e093 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/ParserRuleReturnScope.js @@ -0,0 +1,26 @@ +/** Rules that return more than a single value must return an object + * containing all the values. Besides the properties defined in + * RuleLabelScope.predefinedRulePropertiesScope there may be user-defined + * return values. This class simply defines the minimum properties that + * are always defined and methods to access the others that might be + * available depending on output option such as template and tree. + * + * Note text is not an actual property of the return value, it is computed + * from start and stop using the input stream's toString() method. I + * could add a ctor to this so that we can pass in and store the input + * stream, but I'm not sure we want to do that. It would seem to be undefined + * to get the .text property anyway if the rule matches tokens from multiple + * input streams. + * + * I do not use getters for fields of objects that are used simply to + * group values such as this aggregate. The getters/setters are there to + * satisfy the superclass interface. + */ +org.antlr.runtime.ParserRuleReturnScope = function() {}; + +org.antlr.lang.extend(org.antlr.runtime.ParserRuleReturnScope, + org.antlr.runtime.RuleReturnScope, +{ + getStart: function() { return this.start; }, + getStop: function() { return this.stop; } +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/RecognitionException.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/RecognitionException.js new file mode 100755 index 0000000..51f3d7a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/RecognitionException.js @@ -0,0 +1,181 @@ +/** The root of the ANTLR exception hierarchy. + * + * <p>To avoid English-only error messages and to generally make things + * as flexible as possible, these exceptions are not created with strings, + * but rather the information necessary to generate an error. Then + * the various reporting methods in Parser and Lexer can be overridden + * to generate a localized error message. For example, MismatchedToken + * exceptions are built with the expected token type. + * So, don't expect getMessage() to return anything.</p> + * + * <p>ANTLR generates code that throws exceptions upon recognition error and + * also generates code to catch these exceptions in each rule. If you + * want to quit upon first error, you can turn off the automatic error + * handling mechanism using rulecatch action, but you still need to + * override methods mismatch and recoverFromMismatchSet.</p> + * + * <p>In general, the recognition exceptions can track where in a grammar a + * problem occurred and/or what was the expected input. While the parser + * knows its state (such as current input symbol and line info) that + * state can change before the exception is reported so current token index + * is computed and stored at exception time. From this info, you can + * perhaps print an entire line of input not just a single token, for example. + * Better to just say the recognizer had a problem and then let the parser + * figure out a fancy report.</p> + * + * @class + * @param {org.antlr.runtime.CommonTokenStream|org.antlr.runtime.tree.TreeNodeStream|org.antlr.runtime.ANTLRStringStream} input input stream that has an exception. + * @extends Error + * + */ +org.antlr.runtime.RecognitionException = function(input) { + org.antlr.runtime.RecognitionException.superclass.constructor.call(this); + this.input = input; + this.index = input.index(); + if ( input instanceof org.antlr.runtime.TokenStream ) { + this.token = input.LT(1); + this.line = this.token.getLine(); + this.charPositionInLine = this.token.getCharPositionInLine(); + } + if ( input instanceof org.antlr.runtime.tree.TreeNodeStream ) { + this.extractInformationFromTreeNodeStream(input); + } + else if ( input instanceof org.antlr.runtime.CharStream ) { + // Note: removed CharStream from hierarchy in JS port so checking for + // StringStream instead + this.c = input.LA(1); + this.line = input.getLine(); + this.charPositionInLine = input.getCharPositionInLine(); + } + else { + this.c = input.LA(1); + } + + this.message = this.toString(); +}; + +org.antlr.lang.extend(org.antlr.runtime.RecognitionException, Error, +/** @lends org.antlr.runtime.RecognitionException.prototype */ +{ + /** + * What input stream did the error occur in? + */ + input: null, + + /** What is index of token/char were we looking at when the error occurred? + * @type Number + */ + index: null, + + /** The current Token when an error occurred. Since not all streams + * can retrieve the ith Token, we have to track the Token object. + * For parsers. Even when it's a tree parser, token might be set. + * @type org.antlr.runtime.CommonToken + */ + token: null, + + /** If this is a tree parser exception, node is set to the node with + * the problem. + * @type Object + */ + node: null, + + /** The current char when an error occurred. For lexers. + * @type Number + */ + c: null, + + /** Track the line at which the error occurred in case this is + * generated from a lexer. We need to track this since the + * unexpected char doesn't carry the line info. + * @type Number + */ + line: null, + + /** The exception's class name. + * @type String + */ + name: "org.antlr.runtime.RecognitionException", + + /** Position in the line where exception occurred. + * @type Number + */ + charPositionInLine: null, + + /** If you are parsing a tree node stream, you will encounter som + * imaginary nodes w/o line/col info. We now search backwards looking + * for most recent token with line/col info, but notify getErrorHeader() + * that info is approximate. + * @type Boolean + */ + approximateLineInfo: null, + + /** Gather exception information from input stream. + * @param {org.antlr.runtime.CommonTokenStream|org.antlr.runtime.tree.TreeNodeStream|org.antlr.runtime.ANTLRStringStream} input input stream that has an exception. + */ + extractInformationFromTreeNodeStream: function(input) { + var nodes = input, + priorNode, + priorPayLoad, + type, + text, + i; + + this.node = nodes.LT(1); + var adaptor = nodes.getTreeAdaptor(), + payload = adaptor.getToken(this.node); + if ( payload ) { + this.token = payload; + if ( payload.getLine()<= 0 ) { + // imaginary node; no line/pos info; scan backwards + i = -1; + priorNode = nodes.LT(i); + while ( priorNode ) { + priorPayload = adaptor.getToken(priorNode); + if ( priorPayload && priorPayload.getLine()>0 ) { + // we found the most recent real line / pos info + this.line = priorPayload.getLine(); + this.charPositionInLine = priorPayload.getCharPositionInLine(); + this.approximateLineInfo = true; + break; + } + --i; + priorNode = nodes.LT(i); + } + } + else { // node created from real token + this.line = payload.getLine(); + this.charPositionInLine = payload.getCharPositionInLine(); + } + } + else if ( this.node instanceof org.antlr.runtime.tree.Tree) { + this.line = this.node.getLine(); + this.charPositionInLine = this.node.getCharPositionInLine(); + if ( this.node instanceof org.antlr.runtime.tree.CommonTree) { + this.token = this.node.token; + } + } + else { + type = adaptor.getType(this.node); + text = adaptor.getText(this.node); + this.token = new org.antlr.runtime.CommonToken(type, text); + } + }, + + /** Return the token type or char of the unexpected input element + * @return {Number} type of the unexpected input element. + */ + getUnexpectedType: function() { + if ( this.input instanceof org.antlr.runtime.TokenStream ) { + return this.token.getType(); + } + else if ( this.input instanceof org.antlr.runtime.tree.TreeNodeStream ) { + var nodes = this.input; + var adaptor = nodes.getTreeAdaptor(); + return adaptor.getType(this.node); + } + else { + return this.c; + } + } +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/RecognizerSharedState.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/RecognizerSharedState.js new file mode 100755 index 0000000..7ca25d7 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/RecognizerSharedState.js @@ -0,0 +1,90 @@ +/** The set of fields needed by an abstract recognizer to recognize input + * and recover from errors etc... As a separate state object, it can be + * shared among multiple grammars; e.g., when one grammar imports another. + * + * These fields are publically visible but the actual state pointer per + * parser is protected. + */ +org.antlr.runtime.RecognizerSharedState = function() { + /** Track the set of token types that can follow any rule invocation. + * Stack grows upwards. When it hits the max, it grows 2x in size + * and keeps going. + */ + this.following = []; + + this._fsp = -1; + + /** This is true when we see an error and before having successfully + * matched a token. Prevents generation of more than one error message + * per error. + */ + this.errorRecovery = false; + + /** The index into the input stream where the last error occurred. + * This is used to prevent infinite loops where an error is found + * but no token is consumed during recovery...another error is found, + * ad naseum. This is a failsafe mechanism to guarantee that at least + * one token/tree node is consumed for two errors. + */ + this.lastErrorIndex = -1; + + /** In lieu of a return value, this indicates that a rule or token + * has failed to match. Reset to false upon valid token match. + */ + this.failed = false; + + /** Did the recognizer encounter a syntax error? Track how many. */ + this.syntaxErrors = 0; + + /** If 0, no backtracking is going on. Safe to exec actions etc... + * If >0 then it's the level of backtracking. + */ + this.backtracking = 0; + + /** An array[size num rules] of Map<Integer,Integer> that tracks + * the stop token index for each rule. ruleMemo[ruleIndex] is + * the memoization table for ruleIndex. For key ruleStartIndex, you + * get back the stop token for associated rule or MEMO_RULE_FAILED. + * + * This is only used if rule memoization is on (which it is by default). + */ + this.ruleMemo = null; + + + // LEXER FIELDS (must be in same state object to avoid casting + // constantly in generated code and Lexer object) :( + + + /** The goal of all lexer rules/methods is to create a token object. + * This is an instance variable as multiple rules may collaborate to + * create a single token. nextToken will return this object after + * matching lexer rule(s). If you subclass to allow multiple token + * emissions, then set this to the last token to be matched or + * something nonnull so that the auto token emit mechanism will not + * emit another token. + */ + this.token = null; + + /** What character index in the stream did the current token start at? + * Needed, for example, to get the text for current token. Set at + * the start of nextToken. + */ + this.tokenStartCharIndex = -1; + + /** The line on which the first character of the token resides */ + // this.tokenStartLine; + + /** The character position of first character within the line */ + // this.tokenStartCharPositionInLine; + + /** The channel number for the current token */ + // this.channel; + + /** The token type for the current token */ + // this.type; + + /** You can set the text for the current token to override what is in + * the input char buffer. Use setText() or can set this instance var. + */ + this.text = null; +}; diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/Token.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/Token.js new file mode 100755 index 0000000..1f6a8b4 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/Token.js @@ -0,0 +1,42 @@ +// NB: Because Token has static members of type CommonToken, the Token dummy +// constructor is defined in CommonToken. All methods and vars of Token are +// defined here. Token is an interface, not a subclass in the Java runtime. + +/** + * @class Abstract base class of all token types. + * @name Token + * @memberOf org.antlr.runtime + */ +org.antlr.runtime.Token = function() {}; +org.antlr.lang.augmentObject(org.antlr.runtime.Token, /** @lends Token */ { + EOR_TOKEN_TYPE: 1, + + /** imaginary tree navigation type; traverse "get child" link */ + DOWN: 2, + /** imaginary tree navigation type; finish with a child list */ + UP: 3, + + MIN_TOKEN_TYPE: 4, // UP+1, + + EOF: org.antlr.runtime.CharStream.EOF, + EOF_TOKEN: null, + + INVALID_TOKEN_TYPE: 0, + INVALID_TOKEN: null, + + /** In an action, a lexer rule can set token to this SKIP_TOKEN and ANTLR + * will avoid creating a token for this symbol and try to fetch another. + */ + SKIP_TOKEN: null, + + /** All tokens go to the parser (unless skip() is called in that rule) + * on a particular "channel". The parser tunes to a particular channel + * so that whitespace etc... can go to the parser on a "hidden" channel. + */ + DEFAULT_CHANNEL: 0, + + /** Anything on different channel than DEFAULT_CHANNEL is not parsed + * by parser. + */ + HIDDEN_CHANNEL: 99 +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/TokenRewriteStream.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/TokenRewriteStream.js new file mode 100755 index 0000000..181d11b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/TokenRewriteStream.js @@ -0,0 +1,461 @@ +/* Useful for dumping out the input stream after doing some + * augmentation or other manipulations. + * + * You can insert stuff, replace, and delete chunks. Note that the + * operations are done lazily--only if you convert the buffer to a + * String. This is very efficient because you are not moving data around + * all the time. As the buffer of tokens is converted to strings, the + * toString() method(s) check to see if there is an operation at the + * current index. If so, the operation is done and then normal String + * rendering continues on the buffer. This is like having multiple Turing + * machine instruction streams (programs) operating on a single input tape. :) + * + * Since the operations are done lazily at toString-time, operations do not + * screw up the token index values. That is, an insert operation at token + * index i does not change the index values for tokens i+1..n-1. + * + * Because operations never actually alter the buffer, you may always get + * the original token stream back without undoing anything. Since + * the instructions are queued up, you can easily simulate transactions and + * roll back any changes if there is an error just by removing instructions. + * For example, + * + * CharStream input = new ANTLRFileStream("input"); + * TLexer lex = new TLexer(input); + * TokenRewriteStream tokens = new TokenRewriteStream(lex); + * T parser = new T(tokens); + * parser.startRule(); + * + * Then in the rules, you can execute + * Token t,u; + * ... + * input.insertAfter(t, "text to put after t");} + * input.insertAfter(u, "text after u");} + * System.out.println(tokens.toString()); + * + * Actually, you have to cast the 'input' to a TokenRewriteStream. :( + * + * You can also have multiple "instruction streams" and get multiple + * rewrites from a single pass over the input. Just name the instruction + * streams and use that name again when printing the buffer. This could be + * useful for generating a C file and also its header file--all from the + * same buffer: + * + * tokens.insertAfter("pass1", t, "text to put after t");} + * tokens.insertAfter("pass2", u, "text after u");} + * System.out.println(tokens.toString("pass1")); + * System.out.println(tokens.toString("pass2")); + * + * If you don't use named rewrite streams, a "default" stream is used as + * the first example shows. + */ + +org.antlr.runtime.TokenRewriteStream = function() { + var sup = org.antlr.runtime.TokenRewriteStream.superclass; + + /** You may have multiple, named streams of rewrite operations. + * I'm calling these things "programs." + * Maps String (name) -> rewrite (List) + */ + this.programs = null; + + /** Map String (program name) -> Integer index */ + this.lastRewriteTokenIndexes = null; + + + if (arguments.length===0) { + this.init(); + } else { + sup.constructor.apply(this, arguments); + this.init(); + } +}; + +(function(){ +var trs = org.antlr.runtime.TokenRewriteStream; + +org.antlr.lang.augmentObject(trs, { + DEFAULT_PROGRAM_NAME: "default", + PROGRAM_INIT_SIZE: 100, + MIN_TOKEN_INDEX: 0 +}); + +// +// Define the rewrite operation hierarchy +// + +trs.RewriteOperation = function(index, text) { + this.index = index; + this.text = text; +}; + +/** Execute the rewrite operation by possibly adding to the buffer. + * Return the index of the next token to operate on. + */ +trs.RewriteOperation.prototype = { + execute: function(buf) { + return this.index; + }, + toString: function() { + /*String opName = getClass().getName(); + int $index = opName.indexOf('$'); + opName = opName.substring($index+1, opName.length()); + return opName+"@"+index+'"'+text+'"';*/ + return this.text; + } +}; + +trs.InsertBeforeOp = function(index, text) { + trs.InsertBeforeOp.superclass.constructor.call(this, index, text); +}; +org.antlr.lang.extend(trs.InsertBeforeOp, trs.RewriteOperation, { + execute: function(buf) { + buf.push(this.text); + return this.index; + } +}); + +/** I'm going to try replacing range from x..y with (y-x)+1 ReplaceOp + * instructions. + */ +trs.ReplaceOp = function(from, to, text) { + trs.ReplaceOp.superclass.constructor.call(this, from, text); + this.lastIndex = to; +}; +org.antlr.lang.extend(trs.ReplaceOp, trs.RewriteOperation, { + execute: function(buf) { + if (org.antlr.lang.isValue(this.text)) { + buf.push(this.text); + } + return this.lastIndex+1; + } +}); + +trs.DeleteOp = function(from, to) { + trs.DeleteOp.superclass.constructor.call(this, from, to); +}; +org.antlr.lang.extend(trs.DeleteOp, trs.ReplaceOp); + +org.antlr.lang.extend(trs, org.antlr.runtime.CommonTokenStream, { + init: function() { + this.programs = {}; + this.programs[trs.DEFAULT_PROGRAM_NAME] = []; + this.lastRewriteTokenIndexes = {}; + }, + + /** Rollback the instruction stream for a program so that + * the indicated instruction (via instructionIndex) is no + * longer in the stream. UNTESTED! + */ + rollback: function() { + var programName, + instructionIndex; + + if (arguments.length===1) { + programName = trs.DEFAULT_PROGRAM_NAME; + instructionIndex = arguments[0]; + } else if (arguments.length===2) { + programName = arguments[0]; + instructionIndex = arguments[1]; + } + var is = this.programs[programName]; + if (is) { + programs[programName] = is.slice(trs.MIN_TOKEN_INDEX, this.instructionIndex); + } + }, + + /** Reset the program so that no instructions exist */ + deleteProgram: function(programName) { + programName = programName || trs.DEFAULT_PROGRAM_NAME; + this.rollback(programName, trs.MIN_TOKEN_INDEX); + }, + + /** Add an instruction to the rewrite instruction list ordered by + * the instruction number (use a binary search for efficiency). + * The list is ordered so that toString() can be done efficiently. + * + * When there are multiple instructions at the same index, the instructions + * must be ordered to ensure proper behavior. For example, a delete at + * index i must kill any replace operation at i. Insert-before operations + * must come before any replace / delete instructions. If there are + * multiple insert instructions for a single index, they are done in + * reverse insertion order so that "insert foo" then "insert bar" yields + * "foobar" in front rather than "barfoo". This is convenient because + * I can insert new InsertOp instructions at the index returned by + * the binary search. A ReplaceOp kills any previous replace op. Since + * delete is the same as replace with null text, i can check for + * ReplaceOp and cover DeleteOp at same time. :) + */ + addToSortedRewriteList: function() { + var programName, + op; + if (arguments.length===1) { + programName = trs.DEFAULT_PROGRAM_NAME; + op = arguments[0]; + } else if (arguments.length===2) { + programName = arguments[0]; + op = arguments[1]; + } + + var rewrites = this.getProgram(programName); + var len, pos, searchOp, replaced, prevOp, i; + for (pos=0, len=rewrites.length; pos<len; pos++) { + searchOp = rewrites[pos]; + if (searchOp.index===op.index) { + // now pos is the index in rewrites of first op with op.index + + // an instruction operating already on that index was found; + // make this one happen after all the others + if (op instanceof trs.ReplaceOp) { + replaced = false; + // look for an existing replace + for (i=pos; i<rewrites.length; i++) { + prevOp = rewrites[pos]; + if (prevOp.index!==op.index) { + break; + } + if (prevOp instanceof trs.ReplaceOp) { + rewrites[pos] = op; // replace old with new + replaced=true; + break; + } + // keep going; must be an insert + } + if ( !replaced ) { + // add replace op to the end of all the inserts + rewrites.splice(i, 0, op); + } + } else { + // inserts are added in front of existing inserts + rewrites.splice(pos, 0, op); + } + break; + } else if (searchOp.index > op.index) { + rewrites.splice(pos, 0, op); + break; + } + } + if (pos===len) { + rewrites.push(op); + } + }, + + insertAfter: function() { + var index, programName, text; + if (arguments.length===2) { + programName = trs.DEFAULT_PROGRAM_NAME; + index = arguments[0]; + text = arguments[1]; + } else if (arguments.length===3) { + programName = arguments[0]; + index = arguments[1]; + text = arguments[2]; + } + + if (index instanceof org.antlr.runtime.Token) { + // index is a Token, grab it's stream index + index = index.index; // that's ugly + } + + // insert after is the same as insert before the next index + this.insertBefore(programName, index+1, text); + }, + + insertBefore: function() { + var index, programName, text; + if (arguments.length===2) { + programName = trs.DEFAULT_PROGRAM_NAME; + index = arguments[0]; + text = arguments[1]; + } else if (arguments.length===3) { + programName = arguments[0]; + index = arguments[1]; + text = arguments[2]; + } + + if (index instanceof org.antlr.runtime.Token) { + // index is a Token, grab it's stream index + index = index.index; // that's ugly + } + + this.addToSortedRewriteList( + programName, + new trs.InsertBeforeOp(index,text) + ); + }, + + replace: function() { + var programName, first, last, text; + if (arguments.length===2) { + programName = trs.DEFAULT_PROGRAM_NAME; + first = arguments[0]; + last = arguments[0]; + text = arguments[1]; + } else if (arguments.length===3) { + programName = trs.DEFAULT_PROGRAM_NAME; + first = arguments[0]; + last = arguments[1]; + text = arguments[2]; + } if (arguments.length===4) { + programName = arguments[0]; + first = arguments[1]; + last = arguments[2]; + text = arguments[3]; + } + + if (first instanceof org.antlr.runtime.Token) { + first = first.index; + } + + if (last instanceof org.antlr.runtime.Token) { + last = last.index; // that's ugly + } + + if ( first > last || last<0 || first<0 ) { + return; + } + this.addToSortedRewriteList( + programName, + new trs.ReplaceOp(first, last, text)); + }, + + // !!! API Break: delete is a JS keyword, so using remove instead. + remove: function() { + // convert arguments to a real array + var args=[], i=arguments.length-1; + while (i>=0) { + args[i] = arguments[i]; + i--; + } + + args.push(""); + this.replace.apply(this, args); + }, + + getLastRewriteTokenIndex: function(programName) { + programName = programName || trs.DEFAULT_PROGRAM_NAME; + return this.lastRewriteTokenIndexes[programName] || -1; + }, + + setLastRewriteTokenIndex: function(programName, i) { + this.lastRewriteTokenIndexes[programName] = i; + }, + + getProgram: function(name) { + var is = this.programs[name]; + if ( !is ) { + is = this.initializeProgram(name); + } + return is; + }, + + initializeProgram: function(name) { + var is = []; + this.programs[name] = is; + return is; + }, + + toOriginalString: function(start, end) { + if (!org.antlr.lang.isNumber(start)) { + start = trs.MIN_TOKEN_INDEX; + } + if (!org.antlr.lang.isNumber(end)) { + end = this.size()-1; + } + + var buf = [], i; + for (i=start; i>=trs.MIN_TOKEN_INDEX && i<=end && i<this.tokens.length; i++) { + buf.push(this.get(i).getText()); + } + return buf.join(""); + }, + + toString: function() { + var programName, start, end; + if (arguments.length===0) { + programName = trs.DEFAULT_PROGRAM_NAME; + start = trs.MIN_TOKEN_INDEX; + end = this.size() - 1; + } else if (arguments.length===1) { + programName = arguments[0]; + start = trs.MIN_TOKEN_INDEX; + end = this.size() - 1; + } else if (arguments.length===2) { + programName = trs.DEFAULT_PROGRAM_NAME; + start = arguments[0]; + end = arguments[1]; + } + + var rewrites = this.programs[programName]; + if ( !rewrites || rewrites.length===0 ) { + return this.toOriginalString(start,end); + } + + /// Index of first rewrite we have not done + var rewriteOpIndex = 0, + tokenCursor=start, + buf = [], + op; + while ( tokenCursor>=trs.MIN_TOKEN_INDEX && + tokenCursor<=end && + tokenCursor<this.tokens.length ) + { + // execute instructions associated with this token index + if ( rewriteOpIndex<rewrites.length ) { + op = rewrites[rewriteOpIndex]; + + // skip all ops at lower index + while (op.index<tokenCursor && rewriteOpIndex<rewrites.length) { + rewriteOpIndex++; + if ( rewriteOpIndex<rewrites.length ) { + op = rewrites[rewriteOpIndex]; + } + } + + // while we have ops for this token index, exec them + while (tokenCursor===op.index && rewriteOpIndex<rewrites.length) { + //System.out.println("execute "+op+" at instruction "+rewriteOpIndex); + tokenCursor = op.execute(buf); + //System.out.println("after execute tokenCursor = "+tokenCursor); + rewriteOpIndex++; + if ( rewriteOpIndex<rewrites.length ) { + op = rewrites[rewriteOpIndex]; + } + } + } + // dump the token at this index + if ( tokenCursor<=end ) { + buf.push(this.get(tokenCursor).getText()); + tokenCursor++; + } + } + // now see if there are operations (append) beyond last token index + var opi; + for (opi=rewriteOpIndex; opi<rewrites.length; opi++) { + op = rewrites[opi]; + if ( op.index>=this.size() ) { + op.execute(buf); // must be insertions if after last token + } + } + + return buf.join(""); + }, + + toDebugString: function(start, end) { + if (!org.antlr.lang.isNumber(start)) { + start = trs.MIN_TOKEN_INDEX; + } + if (!org.antlr.lang.isNumber(end)) { + end = this.size()-1; + } + + var buf = [], + i; + for (i=start; i>=trs.MIN_TOKEN_INDEX && i<=end && i<this.tokens.length; i++) { + buf.push(this.get(i)); + } + return buf.join(""); + } +}); + +})(); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/UnwantedTokenException.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/UnwantedTokenException.js new file mode 100755 index 0000000..9134e16 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/UnwantedTokenException.js @@ -0,0 +1,26 @@ +/** An extra token while parsing a TokenStream */ +org.antlr.runtime.UnwantedTokenException = function(expecting, input) { + if (arguments.length>0) { + org.antlr.runtime.UnwantedTokenException.superclass.constructor.call( + this, expecting, input); + } +}; + +org.antlr.lang.extend( + org.antlr.runtime.UnwantedTokenException, + org.antlr.runtime.MismatchedTokenException, { + getUnexpectedToken: function() { + return this.token; + }, + toString: function() { + var exp = ", expected "+this.expecting; + if ( this.expecting===org.antlr.runtime.Token.INVALID_TOKEN_TYPE ) { + exp = ""; + } + if ( !org.antlr.lang.isValue(this.token) ) { + return "UnwantedTokenException(found="+exp+")"; + } + return "UnwantedTokenException(found="+this.token.getText()+exp+")"; + }, + name: "org.antlr.runtime.UnwantedTokenException" +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/BaseTree.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/BaseTree.js new file mode 100755 index 0000000..59dd848 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/BaseTree.js @@ -0,0 +1,282 @@ +/** A generic tree implementation with no payload. You must subclass to + * actually have any user data. ANTLR v3 uses a list of children approach + * instead of the child-sibling approach in v2. A flat tree (a list) is + * an empty node whose children represent the list. An empty, but + * non-null node is called "nil". + */ +org.antlr.runtime.tree.BaseTree = function() {}; + +org.antlr.lang.extend(org.antlr.runtime.tree.BaseTree, + org.antlr.runtime.tree.Tree, +{ + getChild: function(i) { + if ( !this.children || i>=this.children.length ) { + return null; + } + return this.children[i]; + }, + + /** Get the children internal List; note that if you directly mess with + * the list, do so at your own risk. + */ + getChildren: function() { + return this.children; + }, + + getFirstChildWithType: function(type) { + var i, t; + for (i = 0; this.children && i < this.children.length; i++) { + t = this.children[i]; + if ( t.getType()===type ) { + return t; + } + } + return null; + }, + + getChildCount: function() { + if ( !this.children ) { + return 0; + } + return this.children.length; + }, + + /** Add t as child of this node. + * + * Warning: if t has no children, but child does + * and child isNil then this routine moves children to t via + * t.children = child.children; i.e., without copying the array. + */ + addChild: function(t) { + if ( !org.antlr.lang.isValue(t) ) { + return; // do nothing upon addChild(null) + } + var childTree = t, n, i, c; + if ( childTree.isNil() ) { // t is an empty node possibly with children + if ( this.children && this.children == childTree.children ) { + throw new Error("attempt to add child list to itself"); + } + // just add all of childTree's children to this + if ( childTree.children ) { + if ( this.children ) { // must copy, this has children already + n = childTree.children.length; + for (i = 0; i < n; i++) { + c = childTree.children[i]; + this.children.push(c); + // handle double-link stuff for each child of nil root + c.setParent(this); + c.setChildIndex(this.children.length-1); + } + } + else { + // no children for this but t has children; just set pointer + // call general freshener routine + this.children = childTree.children; + this.freshenParentAndChildIndexes(); + } + } + } + else { // child is not nil (don't care about children) + if ( !this.children ) { + this.children = this.createChildrenList(); // create children list on demand + } + this.children.push(t); + childTree.setParent(this); + childTree.setChildIndex(this.children.length-1); + } + }, + + /** Add all elements of kids list as children of this node */ + addChildren: function(kids) { + var i, t; + for (i = 0; i < kids.length; i++) { + t = kids[i]; + this.addChild(t); + } + }, + + setChild: function(i, t) { + if ( !t ) { + return; + } + if ( t.isNil() ) { + throw new Error("Can't set single child to a list"); + } + if ( !this.children ) { + this.children = this.createChildrenList(); + } + this.children[i] = t; + t.setParent(this); + t.setChildIndex(i); + }, + + deleteChild: function(i) { + if ( !this.children ) { + return null; + } + if (i<0 || i>=this.children.length) { + throw new Error("Index out of bounds."); + } + var killed = this.children.splice(i, 1)[0]; + // walk rest and decrement their child indexes + this.freshenParentAndChildIndexes(i); + return killed; + }, + + /** Delete children from start to stop and replace with t even if t is + * a list (nil-root tree). num of children can increase or decrease. + * For huge child lists, inserting children can force walking rest of + * children to set their childindex; could be slow. + */ + replaceChildren: function(startChildIndex, stopChildIndex, t) { + if ( !this.children ) { + throw new Error("indexes invalid; no children in list"); + } + var replacingHowMany = stopChildIndex - startChildIndex + 1; + var replacingWithHowMany; + var newTree = t; + var newChildren = null; + // normalize to a list of children to add: newChildren + if ( newTree.isNil() ) { + newChildren = newTree.children; + } + else { + newChildren = []; + newChildren.push(newTree); + } + replacingWithHowMany = newChildren.length; + var numNewChildren = newChildren.length; + var delta = replacingHowMany - replacingWithHowMany; + var j, i, child, indexToDelete, c, killed, numToInsert; + // if same number of nodes, do direct replace + if ( delta === 0 ) { + j = 0; // index into new children + for (i=startChildIndex; i<=stopChildIndex; i++) { + child = newChildren[j]; + this.children[i] = child; + child.setParent(this); + child.setChildIndex(i); + j++; + } + } + else if ( delta > 0 ) { // fewer new nodes than there were + // set children and then delete extra + for (j=0; j<numNewChildren; j++) { + this.children[startChildIndex+j] = newChildren[j]; + } + indexToDelete = startChildIndex+numNewChildren; + for (c=indexToDelete; c<=stopChildIndex; c++) { + // delete same index, shifting everybody down each time + killed = this.children.splice(indexToDelete, 1)[0]; + } + this.freshenParentAndChildIndexes(startChildIndex); + } + else { // more new nodes than were there before + // fill in as many children as we can (replacingHowMany) w/o moving data + for (j=0; j<replacingHowMany; j++) { + this.children[startChildIndex+j] = newChildren[j]; + } + numToInsert = replacingWithHowMany-replacingHowMany; + for (j=replacingHowMany; j<replacingWithHowMany; j++) { + this.children.splice(startChildIndex+j, 0, newChildren[j]); + } + this.freshenParentAndChildIndexes(startChildIndex); + } + }, + + /** Override in a subclass to change the impl of children list */ + createChildrenList: function() { + return []; + }, + + isNil: function() { + return false; + }, + + freshenParentAndChildIndexes: function(offset) { + if (!org.antlr.lang.isNumber(offset)) { + offset = 0; + } + var n = this.getChildCount(), + c, + child; + for (c = offset; c < n; c++) { + child = this.getChild(c); + child.setChildIndex(c); + child.setParent(this); + } + }, + + sanityCheckParentAndChildIndexes: function(parent, i) { + if (arguments.length===0) { + parent = null; + i = -1; + } + + if ( parent!==this.getParent() ) { + throw new Error("parents don't match; expected "+parent+" found "+this.getParent()); + } + if ( i!==this.getChildIndex() ) { + throw new Error("child indexes don't match; expected "+i+" found "+this.getChildIndex()); + } + var n = this.getChildCount(), + c, + child; + for (c = 0; c < n; c++) { + child = this.getChild(c); + child.sanityCheckParentAndChildIndexes(this, c); + } + }, + + /** BaseTree doesn't track child indexes. */ + getChildIndex: function() { + return 0; + }, + setChildIndex: function(index) { + }, + + /** BaseTree doesn't track parent pointers. */ + getParent: function() { + return null; + }, + setParent: function(t) { + }, + + getTree: function() { + return this; + }, + + /** Print out a whole tree not just a node */ + toStringTree: function() { + if ( !this.children || this.children.length===0 ) { + return this.toString(); + } + var buf = "", + i, + t; + if ( !this.isNil() ) { + buf += "("; + buf += this.toString(); + buf += ' '; + } + for (i = 0; this.children && i < this.children.length; i++) { + t = this.children[i]; + if ( i>0 ) { + buf += ' '; + } + buf += t.toStringTree(); + } + if ( !this.isNil() ) { + buf += ")"; + } + return buf; + }, + + getLine: function() { + return 0; + }, + + getCharPositionInLine: function() { + return 0; + } +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/BaseTreeAdaptor.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/BaseTreeAdaptor.js new file mode 100755 index 0000000..7676346 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/BaseTreeAdaptor.js @@ -0,0 +1,210 @@ +/** A TreeAdaptor that works with any Tree implementation. */ +org.antlr.runtime.tree.BaseTreeAdaptor = function() { + this.uniqueNodeID = 1; +}; + +org.antlr.lang.extend(org.antlr.runtime.tree.BaseTreeAdaptor, + org.antlr.runtime.tree.TreeAdaptor, +{ + nil: function() { + return this.create(null); + }, + + /** create tree node that holds the start and stop tokens associated + * with an error. + * + * If you specify your own kind of tree nodes, you will likely have to + * override this method. CommonTree returns Token.INVALID_TOKEN_TYPE + * if no token payload but you might have to set token type for diff + * node type. + */ + errorNode: function(input, start, stop, e) { + var t = new org.antlr.runtime.tree.CommonErrorNode(input, start, stop, e); + return t; + }, + + isNil: function(tree) { + return tree.isNil(); + }, + + /** This is generic in the sense that it will work with any kind of + * tree (not just Tree interface). It invokes the adaptor routines + * not the tree node routines to do the construction. + */ + dupTree: function(t, parent) { + if (arguments.length===1) { + parent = null; + } + if ( !t ) { + return null; + } + var newTree = this.dupNode(t); + // ensure new subtree root has parent/child index set + this.setChildIndex(newTree, this.getChildIndex(t)); // same index in new tree + this.setParent(newTree, parent); + var n = this.getChildCount(t), + i, child, newSubTree; + for (i = 0; i < n; i++) { + child = this.getChild(t, i); + newSubTree = this.dupTree(child, t); + this.addChild(newTree, newSubTree); + } + return newTree; + }, + + /** Add a child to the tree t. If child is a flat tree (a list), make all + * in list children of t. Warning: if t has no children, but child does + * and child isNil then you can decide it is ok to move children to t via + * t.children = child.children; i.e., without copying the array. Just + * make sure that this is consistent with have the user will build + * ASTs. + */ + addChild: function(t, child) { + if ( t && org.antlr.lang.isValue(child) ) { + t.addChild(child); + } + }, + + /** If oldRoot is a nil root, just copy or move the children to newRoot. + * If not a nil root, make oldRoot a child of newRoot. + * + * old=^(nil a b c), new=r yields ^(r a b c) + * old=^(a b c), new=r yields ^(r ^(a b c)) + * + * If newRoot is a nil-rooted single child tree, use the single + * child as the new root node. + * + * old=^(nil a b c), new=^(nil r) yields ^(r a b c) + * old=^(a b c), new=^(nil r) yields ^(r ^(a b c)) + * + * If oldRoot was null, it's ok, just return newRoot (even if isNil). + * + * old=null, new=r yields r + * old=null, new=^(nil r) yields ^(nil r) + * + * Return newRoot. Throw an exception if newRoot is not a + * simple node or nil root with a single child node--it must be a root + * node. If newRoot is ^(nil x) return x as newRoot. + * + * Be advised that it's ok for newRoot to point at oldRoot's + * children; i.e., you don't have to copy the list. We are + * constructing these nodes so we should have this control for + * efficiency. + */ + becomeRoot: function(newRoot, oldRoot) { + if (newRoot instanceof org.antlr.runtime.Token || !newRoot) { + newRoot = this.create(newRoot); + } + + var newRootTree = newRoot, + oldRootTree = oldRoot; + if ( !oldRoot ) { + return newRoot; + } + // handle ^(nil real-node) + if ( newRootTree.isNil() ) { + var nc = newRootTree.getChildCount(); + if (nc===1) { + newRootTree = newRootTree.getChild(0); + } else if ( nc>1 ) { + // TODO: make tree run time exceptions hierarchy + throw new Error("more than one node as root (TODO: make exception hierarchy)"); + } + } + // add oldRoot to newRoot; addChild takes care of case where oldRoot + // is a flat list (i.e., nil-rooted tree). All children of oldRoot + // are added to newRoot. + newRootTree.addChild(oldRootTree); + return newRootTree; + }, + + /** Transform ^(nil x) to x */ + rulePostProcessing: function(root) { + var r = root; + if ( r && r.isNil() ) { + if ( r.getChildCount()===0 ) { + r = null; + } + else if ( r.getChildCount()===1 ) { + r = r.getChild(0); + // whoever invokes rule will set parent and child index + r.setParent(null); + r.setChildIndex(-1); + } + } + return r; + }, + + create: function(tokenType, fromToken) { + var text, t; + if (arguments.length===2) { + if (org.antlr.lang.isString(arguments[1])) { + text = arguments[1]; + fromToken = this.createToken(tokenType, text); + t = this.create(fromToken); + return t; + } else { + fromToken = this.createToken(fromToken); + fromToken.setType(tokenType); + t = this.create(fromToken); + return t; + } + } else if (arguments.length===3) { + text = arguments[2]; + fromToken = this.createToken(fromToken); + fromToken.setType(tokenType); + fromToken.setText(text); + t = this.create(fromToken); + return t; + } + }, + + getType: function(t) { + t.getType(); + return 0; + }, + + setType: function(t, type) { + throw new Error("don't know enough about Tree node"); + }, + + getText: function(t) { + return t.getText(); + }, + + setText: function(t, text) { + throw new Error("don't know enough about Tree node"); + }, + + getChild: function(t, i) { + return t.getChild(i); + }, + + setChild: function(t, i, child) { + t.setChild(i, child); + }, + + deleteChild: function(t, i) { + return t.deleteChild(i); + }, + + getChildCount: function(t) { + return t.getChildCount(); + }, + + getUniqueID: function(node) { + if ( !this.treeToUniqueIDMap ) { + this.treeToUniqueIDMap = {}; + } + var prevID = this.treeToUniqueIDMap[node]; + if ( org.antlr.lang.isValue(prevID) ) { + return prevID; + } + var ID = this.uniqueNodeID; + this.treeToUniqueIDMap[node] = ID; + this.uniqueNodeID++; + return ID; + // GC makes these nonunique: + // return System.identityHashCode(node); + } +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/CommonErrorNode.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/CommonErrorNode.js new file mode 100755 index 0000000..b15fcb9 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/CommonErrorNode.js @@ -0,0 +1,68 @@ +org.antlr.runtime.tree.CommonErrorNode = function(input, start, stop, e) { + if ( !stop || + (stop.getTokenIndex() < start.getTokenIndex() && + stop.getType()!=org.antlr.runtime.Token.EOF) ) + { + // sometimes resync does not consume a token (when LT(1) is + // in follow set. So, stop will be 1 to left to start. adjust. + // Also handle case where start is the first token and no token + // is consumed during recovery; LT(-1) will return null. + stop = start; + } + this.input = input; + this.start = start; + this.stop = stop; + this.trappedException = e; +}; + +org.antlr.lang.extend(org.antlr.runtime.tree.CommonErrorNode, org.antlr.runtime.tree.CommonTree, { + isNil: function() { + return false; + }, + + getType: function() { + return org.antlr.runtime.Token.INVALID_TOKEN_TYPE; + }, + + getText: function() { + var badText = null; + if ( this.start instanceof org.antlr.runtime.Token ) { + var i = this.start.getTokenIndex(); + var j = this.stop.getTokenIndex(); + if ( this.stop.getType() === org.antlr.runtime.Token.EOF ) { + j = this.input.size(); + } + badText = this.input.toString(i, j); + } + else if ( this.start instanceof org.antlr.runtime.tree.Tree ) { + badText = this.input.toString(this.start, this.stop); + } + else { + // people should subclass if they alter the tree type so this + // next one is for sure correct. + badText = "<unknown>"; + } + return badText; + }, + + toString: function() { + if ( this.trappedException instanceof org.antlr.runtime.MissingTokenException ) { + return "<missing type: "+ + this.trappedException.getMissingType()+ + ">"; + } + else if ( this.trappedException instanceof org.antlr.runtime.UnwantedTokenException ) { + return "<extraneous: "+ + this.trappedException.getUnexpectedToken()+ + ", resync="+this.getText()+">"; + } + else if ( this.trappedException instanceof org.antlr.runtime.MismatchedTokenException ) { + return "<mismatched token: "+this.trappedException.token+", resync="+this.getText()+">"; + } + else if ( this.trappedException instanceof org.antlr.runtime.NoViableAltException ) { + return "<unexpected: "+this.trappedException.token+ + ", resync="+this.getText()+">"; + } + return "<error: "+this.getText()+">"; + } +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/CommonTree.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/CommonTree.js new file mode 100755 index 0000000..d5e735f --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/CommonTree.js @@ -0,0 +1,135 @@ +/** A tree node that is wrapper for a Token object. After 3.0 release + * while building tree rewrite stuff, it became clear that computing + * parent and child index is very difficult and cumbersome. Better to + * spend the space in every tree node. If you don't want these extra + * fields, it's easy to cut them out in your own BaseTree subclass. + */ +org.antlr.runtime.tree.CommonTree = function(node) { + /** What token indexes bracket all tokens associated with this node + * and below? + */ + this.startIndex = -1; + this.stopIndex = -1; + + /** What index is this node in the child list? Range: 0..n-1 */ + this.childIndex = -1; + + /** Who is the parent node of this node; if null, implies node is root */ + this.parent = null; + + /** A single token is the payload */ + this.token = null; + + if (node instanceof org.antlr.runtime.tree.CommonTree) { + org.antlr.runtime.tree.CommonTree.superclass.constructor.call(this, node); + this.token = node.token; + this.startIndex = node.startIndex; + this.stopIndex = node.stopIndex; + } else if (node instanceof org.antlr.runtime.CommonToken) { + this.token = node; + } +}; + +/** A tree node that is wrapper for a Token object. */ +org.antlr.lang.extend(org.antlr.runtime.tree.CommonTree, org.antlr.runtime.tree.BaseTree, { + getToken: function() { + return this.token; + }, + + dupNode: function() { + return new org.antlr.runtime.tree.CommonTree(this); + }, + + isNil: function() { + return !this.token; + }, + + getType: function() { + if ( !this.token ) { + return org.antlr.runtime.Token.INVALID_TOKEN_TYPE; + } + return this.token.getType(); + }, + + getText: function() { + if ( !this.token ) { + return null; + } + return this.token.getText(); + }, + + getLine: function() { + if ( !this.token || this.token.getLine()===0 ) { + if ( this.getChildCount()>0 ) { + return this.getChild(0).getLine(); + } + return 0; + } + return this.token.getLine(); + }, + + getCharPositionInLine: function() { + if ( !this.token || this.token.getCharPositionInLine()===-1 ) { + if ( this.getChildCount()>0 ) { + return this.getChild(0).getCharPositionInLine(); + } + return 0; + } + return this.token.getCharPositionInLine(); + }, + + getTokenStartIndex: function() { + if ( this.token ) { + return this.token.getTokenIndex(); + } + return this.startIndex; + }, + + setTokenStartIndex: function(index) { + this.startIndex = index; + }, + + getTokenStopIndex: function() { + if ( this.token ) { + return this.token.getTokenIndex(); + } + return this.stopIndex; + }, + + setTokenStopIndex: function(index) { + this.stopIndex = index; + }, + + getChildIndex: function() { + return this.childIndex; + }, + + getParent: function() { + return this.parent; + }, + + setParent: function(t) { + this.parent = t; + }, + + setChildIndex: function(index) { + this.childIndex = index; + }, + + toString: function() { + if ( this.isNil() ) { + return "nil"; + } + if ( this.getType()===org.antlr.runtime.Token.INVALID_TOKEN_TYPE ) { + return "<errornode>"; + } + if ( !this.token ) { + return null; + } + return this.token.getText(); + } +}); + +/* Monkey patch Tree static property with CommonToken value. */ +org.antlr.runtime.tree.Tree.INVALID_NODE = + new org.antlr.runtime.tree.CommonTree(org.antlr.runtime.Token.INVALID_TOKEN); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/CommonTreeAdaptor.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/CommonTreeAdaptor.js new file mode 100755 index 0000000..cd00ca0 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/CommonTreeAdaptor.js @@ -0,0 +1,171 @@ +/** A TreeAdaptor that works with any Tree implementation. It provides + * really just factory methods; all the work is done by BaseTreeAdaptor. + * If you would like to have different tokens created than ClassicToken + * objects, you need to override this and then set the parser tree adaptor to + * use your subclass. + * + * To get your parser to build nodes of a different type, override + * create(Token). + */ +org.antlr.runtime.tree.CommonTreeAdaptor = function() {}; + +org.antlr.lang.extend(org.antlr.runtime.tree.CommonTreeAdaptor, + org.antlr.runtime.tree.BaseTreeAdaptor, { + /** Duplicate a node. This is part of the factory; + * override if you want another kind of node to be built. + * + * I could use reflection to prevent having to override this + * but reflection is slow. + */ + dupNode: function(t) { + if ( !org.antlr.lang.isValue(t) ) { + return null; + } + return t.dupNode(); + }, + + create: function(payload) { + if (arguments.length>1) { + return org.antlr.runtime.tree.CommonTreeAdaptor.superclass.create.apply(this, arguments); + } + return new org.antlr.runtime.tree.CommonTree(payload); + }, + + /** Tell me how to create a token for use with imaginary token nodes. + * For example, there is probably no input symbol associated with imaginary + * token DECL, but you need to create it as a payload or whatever for + * the DECL node as in ^(DECL type ID). + * + * If you care what the token payload objects' type is, you should + * override this method and any other createToken variant. + * + * Tell me how to create a token for use with imaginary token nodes. + * For example, there is probably no input symbol associated with imaginary + * token DECL, but you need to create it as a payload or whatever for + * the DECL node as in ^(DECL type ID). + * + * This is a variant of createToken where the new token is derived from + * an actual real input token. Typically this is for converting '{' + * tokens to BLOCK etc... You'll see + * + * r : lc='{' ID+ '}' -> ^(BLOCK[$lc] ID+) ; + * + * If you care what the token payload objects' type is, you should + * override this method and any other createToken variant. + */ + createToken: function(fromToken) { + if (arguments.length===2) { + return new org.antlr.runtime.CommonToken(arguments[0], arguments[1]); + } else { + return new org.antlr.runtime.CommonToken(arguments[0]); + } + }, + + /** Track start/stop token for subtree root created for a rule. + * Only works with Tree nodes. For rules that match nothing, + * seems like this will yield start=i and stop=i-1 in a nil node. + * Might be useful info so I'll not force to be i..i. + */ + setTokenBoundaries: function(t, startToken, stopToken) { + if ( !org.antlr.lang.isValue(t) ) { + return; + } + var start = 0, + stop = 0; + if ( org.antlr.lang.isValue(startToken) ) { + if (startToken.getTokenIndex) { + start = startToken.getTokenIndex(); + } else if (startToken.getStartIndex) { + start = startToken.getStartIndex(); + } else { + start = startToken.getTokenStartIndex(); + } + } + if ( org.antlr.lang.isValue(stopToken) ) { + if (stop.getTokenIndex) { + stop = stopToken.getTokenIndex(); + } else if (stopToken.getStopIndex) { + stop = stopToken.getStopIndex(); + } else { + stop = stopToken.getTokenStopIndex(); + } + } + t.setTokenStartIndex(start); + t.setTokenStopIndex(stop); + }, + + getTokenStartIndex: function(t) { + if (!t) { + return -1; + } + return t.getTokenStartIndex(); + }, + + getTokenStopIndex: function(t) { + if (!t) { + return -1; + } + return t.getTokenStopIndex(); + }, + + getText: function(t) { + if (!t) { + return null; + } + return t.getText(); + }, + + getType: function(t) { + if (!t) { + return org.antlr.runtime.Token.INVALID_TOKEN_TYPE; + } + return t.getType(); + }, + + /** What is the Token associated with this node? If + * you are not using CommonTree, then you must + * override this in your own adaptor. + */ + getToken: function(t) { + if ( t instanceof org.antlr.runtime.tree.CommonTree ) { + return t.getToken(); + } + return null; // no idea what to do + }, + + getChild: function(t, i) { + if (!t) { + return null; + } + return t.getChild(i); + }, + + getChildCount: function(t) { + if (!t) { + return 0; + } + return t.getChildCount(); + }, + + getParent: function(t) { + return t.getParent(); + }, + + setParent: function(t, parent) { + t.setParent(parent); + }, + + getChildIndex: function(t) { + return t.getChildIndex(); + }, + + setChildIndex: function(t, index) { + t.setChildIndex(index); + }, + + replaceChildren: function(parent, startChildIndex, stopChildIndex, t) { + if ( parent ) { + parent.replaceChildren(startChildIndex, stopChildIndex, t); + } + } +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/CommonTreeNodeStream.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/CommonTreeNodeStream.js new file mode 100755 index 0000000..ce15eb8 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/CommonTreeNodeStream.js @@ -0,0 +1,405 @@ +/** A buffered stream of tree nodes. Nodes can be from a tree of ANY kind. + * + * This node stream sucks all nodes out of the tree specified in + * the constructor during construction and makes pointers into + * the tree using an array of Object pointers. The stream necessarily + * includes pointers to DOWN and UP and EOF nodes. + * + * This stream knows how to mark/release for backtracking. + * + * This stream is most suitable for tree interpreters that need to + * jump around a lot or for tree parsers requiring speed (at cost of memory). + * There is some duplicated functionality here with UnBufferedTreeNodeStream + * but just in bookkeeping, not tree walking etc... + * + * @see UnBufferedTreeNodeStream + */ +org.antlr.runtime.tree.CommonTreeNodeStream = function(adaptor, + tree, + initialBufferSize) +{ + if (arguments.length===1) { + tree = adaptor; + adaptor = new org.antlr.runtime.tree.CommonTreeAdaptor(); + } + if (arguments.length <= 2) { + initialBufferSize = + org.antlr.runtime.tree.CommonTreeNodeStream.DEFAULT_INITIAL_BUFFER_SIZE; + } + + /** Reuse same DOWN, UP navigation nodes unless this is true */ + this.uniqueNavigationNodes = false; + + /** The index into the nodes list of the current node (next node + * to consume). If -1, nodes array not filled yet. + */ + this.p = -1; + + var Token = org.antlr.runtime.Token; + this.root = tree; + this.adaptor = adaptor; + this.nodes = []; //new ArrayList(initialBufferSize); + this.down = this.adaptor.create(Token.DOWN, "DOWN"); + this.up = this.adaptor.create(Token.UP, "UP"); + this.eof = this.adaptor.create(Token.EOF, "EOF"); +}; + +org.antlr.lang.augmentObject(org.antlr.runtime.tree.CommonTreeNodeStream, { + DEFAULT_INITIAL_BUFFER_SIZE: 100, + INITIAL_CALL_STACK_SIZE: 10 +}); + +org.antlr.lang.extend(org.antlr.runtime.tree.CommonTreeNodeStream, + org.antlr.runtime.tree.TreeNodeStream, +{ + StreamIterator: function() { + var i = 0, + nodes = this.nodes, + eof = this.eof; + + return { + hasNext: function() { + return i<nodes.length; + }, + + next: function() { + var current = i; + i++; + if ( current < nodes.length ) { + return nodes[current]; + } + return eof; + }, + + remove: function() { + throw new Error("cannot remove nodes from stream"); + } + }; + }, + + /** Walk tree with depth-first-search and fill nodes buffer. + * Don't do DOWN, UP nodes if its a list (t is isNil). + */ + fillBuffer: function(t) { + var reset_p = false; + if (org.antlr.lang.isUndefined(t)) { + t = this.root; + reset_p = true; + } + + var nil = this.adaptor.isNil(t); + if ( !nil ) { + this.nodes.push(t); // add this node + } + // add DOWN node if t has children + var n = this.adaptor.getChildCount(t); + if ( !nil && n>0 ) { + this.addNavigationNode(org.antlr.runtime.Token.DOWN); + } + // and now add all its children + var c, child; + for (c=0; c<n; c++) { + child = this.adaptor.getChild(t,c); + this.fillBuffer(child); + } + // add UP node if t has children + if ( !nil && n>0 ) { + this.addNavigationNode(org.antlr.runtime.Token.UP); + } + + if (reset_p) { + this.p = 0; // buffer of nodes intialized now + } + }, + + getNodeIndex: function(node) { + if ( this.p==-1 ) { + this.fillBuffer(); + } + var i, t; + for (i=0; i<this.nodes.length; i++) { + t = this.nodes[i]; + if ( t===node ) { + return i; + } + } + return -1; + }, + + /** As we flatten the tree, we use UP, DOWN nodes to represent + * the tree structure. When debugging we need unique nodes + * so instantiate new ones when uniqueNavigationNodes is true. + */ + addNavigationNode: function(ttype) { + var navNode = null; + if ( ttype===org.antlr.runtime.Token.DOWN ) { + if ( this.hasUniqueNavigationNodes() ) { + navNode = this.adaptor.create(org.antlr.runtime.Token.DOWN, "DOWN"); + } + else { + navNode = this.down; + } + } + else { + if ( this.hasUniqueNavigationNodes() ) { + navNode = this.adaptor.create(org.antlr.runtime.Token.UP, "UP"); + } + else { + navNode = this.up; + } + } + this.nodes.push(navNode); + }, + + get: function(i) { + if ( this.p===-1 ) { + this.fillBuffer(); + } + return this.nodes[i]; + }, + + LT: function(k) { + if ( this.p===-1 ) { + this.fillBuffer(); + } + if ( k===0 ) { + return null; + } + if ( k<0 ) { + return this.LB(-1*k); + } + if ( (this.p+k-1) >= this.nodes.length ) { + return this.eof; + } + return this.nodes[this.p+k-1]; + }, + + getCurrentSymbol: function() { return this.LT(1); }, + + /** Look backwards k nodes */ + LB: function(k) { + if ( k===0 ) { + return null; + } + if ( (this.p-k)<0 ) { + return null; + } + return this.nodes[this.p-k]; + }, + + getTreeSource: function() { + return this.root; + }, + + getSourceName: function() { + return this.getTokenStream().getSourceName(); + }, + + getTokenStream: function() { + return this.tokens; + }, + + setTokenStream: function(tokens) { + this.tokens = tokens; + }, + + getTreeAdaptor: function() { + return this.adaptor; + }, + + setTreeAdaptor: function(adaptor) { + this.adaptor = adaptor; + }, + + hasUniqueNavigationNodes: function() { + return this.uniqueNavigationNodes; + }, + + setUniqueNavigationNodes: function(uniqueNavigationNodes) { + this.uniqueNavigationNodes = uniqueNavigationNodes; + }, + + consume: function() { + if ( this.p===-1 ) { + this.fillBuffer(); + } + this.p++; + }, + + LA: function(i) { + return this.adaptor.getType(this.LT(i)); + }, + + mark: function() { + if ( this.p===-1 ) { + this.fillBuffer(); + } + this.lastMarker = this.index(); + return this.lastMarker; + }, + + release: function(marker) { + // no resources to release + }, + + index: function() { + return this.p; + }, + + rewind: function(marker) { + if (!org.antlr.lang.isNumber(marker)) { + marker = this.lastMarker; + } + this.seek(marker); + }, + + seek: function(index) { + if ( this.p===-1 ) { + this.fillBuffer(); + } + this.p = index; + }, + + /** Make stream jump to a new location, saving old location. + * Switch back with pop(). + */ + push: function(index) { + if ( !this.calls ) { + this.calls = []; + } + this.calls.push(this.p); // save current index + this.seek(index); + }, + + /** Seek back to previous index saved during last push() call. + * Return top of stack (return index). + */ + pop: function() { + var ret = this.calls.pop(); + this.seek(ret); + return ret; + }, + + reset: function() { + this.p = 0; + this.lastMarker = 0; + if (this.calls) { + this.calls = []; + } + }, + + size: function() { + if ( this.p===-1 ) { + this.fillBuffer(); + } + return this.nodes.length; + }, + + iterator: function() { + if ( this.p===-1 ) { + this.fillBuffer(); + } + return this.StreamIterator(); + }, + + replaceChildren: function(parent, startChildIndex, stopChildIndex, t) { + if ( parent ) { + this.adaptor.replaceChildren(parent, startChildIndex, stopChildIndex, t); + } + }, + + /** Debugging */ + toTokenString: function(start, stop) { + if ( this.p===-1 ) { + this.fillBuffer(); + } + var buf='', i, t; + for (i = start; i < this.nodes.length && i <= stop; i++) { + t = this.nodes[i]; + buf += " "+this.adaptor.getToken(t); + } + return buf; + }, + + /** Used for testing, just return the token type stream */ + toString: function(start, stop) { + var buf = "", + text, + t, + i; + if (arguments.length===0) { + if ( this.p===-1 ) { + this.fillBuffer(); + } + for (i = 0; i < this.nodes.length; i++) { + t = this.nodes[i]; + buf += " "; + buf += this.adaptor.getType(t); + } + return buf; + } else { + if ( !org.antlr.lang.isNumber(start) || !org.antlr.lang.isNumber(stop) ) { + return null; + } + if ( this.p===-1 ) { + this.fillBuffer(); + } + //System.out.println("stop: "+stop); + if ( start instanceof org.antlr.runtime.tree.CommonTree ) { + //System.out.print("toString: "+((CommonTree)start).getToken()+", "); + } else { + //System.out.println(start); + } + if ( stop instanceof org.antlr.runtime.tree.CommonTree ) { + //System.out.println(((CommonTree)stop).getToken()); + } else { + //System.out.println(stop); + } + // if we have the token stream, use that to dump text in order + var beginTokenIndex, + endTokenIndex; + if ( this.tokens ) { + beginTokenIndex = this.adaptor.getTokenStartIndex(start); + endTokenIndex = this.adaptor.getTokenStopIndex(stop); + // if it's a tree, use start/stop index from start node + // else use token range from start/stop nodes + if ( this.adaptor.getType(stop)===org.antlr.runtime.Token.UP ) { + endTokenIndex = this.adaptor.getTokenStopIndex(start); + } + else if ( this.adaptor.getType(stop)==org.antlr.runtime.Token.EOF ) + { + endTokenIndex = this.size()-2; // don't use EOF + } + return this.tokens.toString(beginTokenIndex, endTokenIndex); + } + // walk nodes looking for start + t = null; + i = 0; + for (; i < this.nodes.length; i++) { + t = this.nodes[i]; + if ( t===start ) { + break; + } + } + // now walk until we see stop, filling string buffer with text + buf = text = ""; + t = this.nodes[i]; + while ( t!==stop ) { + text = this.adaptor.getText(t); + if ( !org.antlr.lang.isString(text) ) { + text = " "+this.adaptor.getType(t).toString(); + } + buf += text; + i++; + t = nodes[i]; + } + // include stop node too + text = this.adaptor.getText(stop); + if ( !org.antlr.lang.isString(text) ) { + text = " "+this.adaptor.getType(stop).toString(); + } + buf += text; + return buf; + } + } +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteCardinalityException.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteCardinalityException.js new file mode 100755 index 0000000..54083b2 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteCardinalityException.js @@ -0,0 +1,19 @@ +org.antlr.runtime.tree.RewriteCardinalityException = function(elementDescription) { + this.elementDescription = elementDescription; +}; + +/** Base class for all exceptions thrown during AST rewrite construction. + * This signifies a case where the cardinality of two or more elements + * in a subrule are different: (ID INT)+ where |ID|!=|INT| + */ +org.antlr.lang.extend(org.antlr.runtime.tree.RewriteCardinalityException, Error, { + getMessage: function() { + if ( org.antlr.lang.isString(this.elementDescription) ) { + return this.elementDescription; + } + return null; + }, + name: function() { + return "org.antlr.runtime.tree.RewriteCardinalityException"; + } +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteEarlyExitException.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteEarlyExitException.js new file mode 100755 index 0000000..2104840 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteEarlyExitException.js @@ -0,0 +1,15 @@ +/** No elements within a (...)+ in a rewrite rule */ +org.antlr.runtime.tree.RewriteEarlyExitException = function(elementDescription) { + var sup = org.antlr.runtime.tree.RewriteEarlyExitException.superclass; + if (org.antlr.lang.isUndefined(elementDescription)) { + elementDescription = null; + } + sup.constructor.call(this, elementDescription); +}; + +org.antlr.lang.extend(org.antlr.runtime.tree.RewriteEarlyExitException, + org.antlr.runtime.tree.RewriteCardinalityException, { + name: function() { + return "org.antlr.runtime.tree.RewriteEarlyExitException"; + } +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteEmptyStreamException.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteEmptyStreamException.js new file mode 100755 index 0000000..3094354 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteEmptyStreamException.js @@ -0,0 +1,12 @@ +/** Ref to ID or expr but no tokens in ID stream or subtrees in expr stream */ +org.antlr.runtime.tree.RewriteEmptyStreamException = function(elementDescription) { + var sup = org.antlr.runtime.tree.RewriteEmptyStreamException.superclass; + sup.constructor.call(this, elementDescription); +}; + +org.antlr.lang.extend(org.antlr.runtime.tree.RewriteEmptyStreamException, + org.antlr.runtime.tree.RewriteCardinalityException, { + name: function() { + return "org.antlr.runtime.tree.RewriteEmptyStreamException"; + } +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteRuleElementStream.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteRuleElementStream.js new file mode 100755 index 0000000..1d37a79 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteRuleElementStream.js @@ -0,0 +1,148 @@ +/** A generic list of elements tracked in an alternative to be used in + * a -> rewrite rule. We need to subclass to fill in the next() method, + * which returns either an AST node wrapped around a token payload or + * an existing subtree. + * + * Once you start next()ing, do not try to add more elements. It will + * break the cursor tracking I believe. + * + * @see org.antlr.runtime.tree.RewriteRuleSubtreeStream + * @see org.antlr.runtime.tree.RewriteRuleTokenStream + * + * TODO: add mechanism to detect/puke on modification after reading from stream + */ +org.antlr.runtime.tree.RewriteRuleElementStream = function(adaptor, elementDescription, el) { + /** Cursor 0..n-1. If singleElement!=null, cursor is 0 until you next(), + * which bumps it to 1 meaning no more elements. + */ + this.cursor = 0; + + /** Once a node / subtree has been used in a stream, it must be dup'd + * from then on. Streams are reset after subrules so that the streams + * can be reused in future subrules. So, reset must set a dirty bit. + * If dirty, then next() always returns a dup. + * + * I wanted to use "naughty bit" here, but couldn't think of a way + * to use "naughty". + */ + this.dirty = false; + + this.elementDescription = elementDescription; + this.adaptor = adaptor; + if (el) { + if (org.antlr.lang.isArray(el)) { + this.singleElement = null; + this.elements = el; + } else { + this.add(el); + } + } +}; + +org.antlr.runtime.tree.RewriteRuleElementStream.prototype = { + /** Reset the condition of this stream so that it appears we have + * not consumed any of its elements. Elements themselves are untouched. + * Once we reset the stream, any future use will need duplicates. Set + * the dirty bit. + */ + reset: function() { + this.cursor = 0; + this.dirty = true; + }, + + add: function(el) { + if ( !org.antlr.lang.isValue(el) ) { + return; + } + if ( this.elements ) { // if in list, just add + this.elements.push(el); + return; + } + if ( !org.antlr.lang.isValue(this.singleElement) ) { // no elements yet, track w/o list + this.singleElement = el; + return; + } + // adding 2nd element, move to list + this.elements = []; + this.elements.push(this.singleElement); + this.singleElement = null; + this.elements.push(el); + }, + + /** Return the next element in the stream. If out of elements, throw + * an exception unless size()==1. If size is 1, then return elements[0]. + * Return a duplicate node/subtree if stream is out of elements and + * size==1. If we've already used the element, dup (dirty bit set). + */ + nextTree: function() { + var n = this.size(), + el; + if ( this.dirty || (this.cursor>=n && n==1) ) { + // if out of elements and size is 1, dup + el = this._next(); + return this.dup(el); + } + // test size above then fetch + el = this._next(); + return el; + }, + + /** do the work of getting the next element, making sure that it's + * a tree node or subtree. Deal with the optimization of single- + * element list versus list of size > 1. Throw an exception + * if the stream is empty or we're out of elements and size>1. + * protected so you can override in a subclass if necessary. + */ + _next: function() { + var n = this.size(); + if (n===0) { + throw new org.antlr.runtime.tree.RewriteEmptyStreamException(this.elementDescription); + } + if ( this.cursor>= n) { // out of elements? + if ( n===1 ) { // if size is 1, it's ok; return and we'll dup + return this.toTree(this.singleElement); + } + // out of elements and size was not 1, so we can't dup + throw new org.antlr.runtime.tree.RewriteCardinalityException(this.elementDescription); + } + // we have elements + if ( org.antlr.lang.isValue(this.singleElement) ) { + this.cursor++; // move cursor even for single element list + return this.toTree(this.singleElement); + } + // must have more than one in list, pull from elements + var o = this.toTree(this.elements[this.cursor]); + this.cursor++; + return o; + }, + + /** Ensure stream emits trees; tokens must be converted to AST nodes. + * AST nodes can be passed through unmolested. + */ + toTree: function(el) { + if (el && el.getTree) { + return el.getTree(); + } + return el; + }, + + hasNext: function() { + return (org.antlr.lang.isValue(this.singleElement) && this.cursor < 1) || + (this.elements && this.cursor < this.elements.length); + }, + + size: function() { + var n = 0; + if ( org.antlr.lang.isValue(this.singleElement) ) { + n = 1; + } + if ( this.elements ) { + return this.elements.length; + } + return n; + }, + + getDescription: function() { + return this.elementDescription; + } +}; diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteRuleNodeStream.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteRuleNodeStream.js new file mode 100755 index 0000000..dd2e502 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteRuleNodeStream.js @@ -0,0 +1,24 @@ +/** Queues up nodes matched on left side of -> in a tree parser. This is + * the analog of RewriteRuleTokenStream for normal parsers. + */ +org.antlr.runtime.tree.RewriteRuleNodeStream = function(adaptor, elementDescription, el) { + org.antlr.runtime.tree.RewriteRuleNodeStream.superclass.constructor.apply(this, arguments); +}; + +org.antlr.lang.extend(org.antlr.runtime.tree.RewriteRuleNodeStream, + org.antlr.runtime.tree.RewriteRuleElementStream, +{ + nextNode: function() { + return this._next(); + }, + + toTree: function(el) { + return this.adaptor.dupNode(el); + }, + + dup: function() { + // we dup every node, so don't have to worry about calling dup; short- + // circuited next() so it doesn't call. + throw new Error("dup can't be called for a node stream."); + } +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteRuleSubtreeStream.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteRuleSubtreeStream.js new file mode 100755 index 0000000..a0ea1f5 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteRuleSubtreeStream.js @@ -0,0 +1,38 @@ +org.antlr.runtime.tree.RewriteRuleSubtreeStream = function() { + var sup = org.antlr.runtime.tree.RewriteRuleSubtreeStream.superclass; + sup.constructor.apply(this, arguments); +}; + +org.antlr.lang.extend(org.antlr.runtime.tree.RewriteRuleSubtreeStream, + org.antlr.runtime.tree.RewriteRuleElementStream, { + /** Treat next element as a single node even if it's a subtree. + * This is used instead of next() when the result has to be a + * tree root node. Also prevents us from duplicating recently-added + * children; e.g., ^(type ID)+ adds ID to type and then 2nd iteration + * must dup the type node, but ID has been added. + * + * Referencing a rule result twice is ok; dup entire tree as + * we can't be adding trees as root; e.g., expr expr. + * + * Hideous code duplication here with super.next(). Can't think of + * a proper way to refactor. This needs to always call dup node + * and super.next() doesn't know which to call: dup node or dup tree. + */ + nextNode: function() { + var n = this.size(), + el; + if ( this.dirty || (this.cursor>=n && n===1) ) { + // if out of elements and size is 1, dup (at most a single node + // since this is for making root nodes). + el = this._next(); + return this.adaptor.dupNode(el); + } + // test size above then fetch + el = this._next(); + return el; + }, + + dup: function(el) { + return this.adaptor.dupTree(el); + } +}); \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteRuleTokenStream.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteRuleTokenStream.js new file mode 100755 index 0000000..332ef61 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/RewriteRuleTokenStream.js @@ -0,0 +1,28 @@ +org.antlr.runtime.tree.RewriteRuleTokenStream = function(adaptor, elementDescription, el) { + var sup = org.antlr.runtime.tree.RewriteRuleTokenStream.superclass; + sup.constructor.apply(this, arguments); +}; + +org.antlr.lang.extend(org.antlr.runtime.tree.RewriteRuleTokenStream, + org.antlr.runtime.tree.RewriteRuleElementStream, { + /** Get next token from stream and make a node for it */ + nextNode: function() { + var t = this._next(); + return this.adaptor.create(t); + }, + + nextToken: function() { + return this._next(); + }, + + /** Don't convert to a tree unless they explicitly call nextTree. + * This way we can do hetero tree nodes in rewrite. + */ + toTree: function(el) { + return el; + }, + + dup: function(el) { + throw new Error("dup can't be called for a token stream."); + } +}); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/Tree.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/Tree.js new file mode 100755 index 0000000..d8ba83b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/Tree.js @@ -0,0 +1,11 @@ +/** What does a tree look like? ANTLR has a number of support classes + * such as CommonTreeNodeStream that work on these kinds of trees. You + * don't have to make your trees implement this interface, but if you do, + * you'll be able to use more support code. + * + * NOTE: When constructing trees, ANTLR can build any kind of tree; it can + * even use Token objects as trees if you add a child list to your tokens. + * + * This is a tree node without any payload; just navigation and factory stuff. + */ +org.antlr.runtime.tree.Tree = function(){}; diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/TreeNodeStream.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/TreeNodeStream.js new file mode 100755 index 0000000..360a49b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/TreeNodeStream.js @@ -0,0 +1,6 @@ +/** A stream of tree nodes, accessing nodes from a tree of some kind */ +org.antlr.runtime.tree.TreeNodeStream = function() {}; + +org.antlr.lang.extend(org.antlr.runtime.tree.TreeNodeStream, + org.antlr.runtime.IntStream); + diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/TreeParser.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/TreeParser.js new file mode 100755 index 0000000..903cb5b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/TreeParser.js @@ -0,0 +1,124 @@ +/** A parser for a stream of tree nodes. "tree grammars" result in a subclass + * of this. All the error reporting and recovery is shared with Parser via + * the BaseRecognizer superclass. +*/ +org.antlr.runtime.tree.TreeParser = function(input) { + org.antlr.runtime.tree.TreeParser.superclass.constructor.call(this, arguments[1]); + this.setTreeNodeStream(input); +}; + +(function(){ +var TP = org.antlr.runtime.tree.TreeParser; + +org.antlr.lang.augmentObject(TP, { + DOWN: org.antlr.runtime.Token.DOWN, + UP: org.antlr.runtime.Token.UP +}); + +org.antlr.lang.extend(TP, org.antlr.runtime.BaseRecognizer, { + reset: function() { + TP.superclass.reset.call(this); // reset all recognizer state variables + if ( this.input ) { + this.input.seek(0); // rewind the input + } + }, + + /** Set the input stream */ + setTreeNodeStream: function(input) { + this.input = input; + }, + + getTreeNodeStream: function() { + return this.input; + }, + + getSourceName: function() { + return this.input.getSourceName(); + }, + + getCurrentInputSymbol: function(input) { + return input.LT(1); + }, + + getMissingSymbol: function(input, e, expectedTokenType, follow) { + var tokenText = + "<missing "+this.getTokenNames()[expectedTokenType]+">"; + return new org.antlr.runtime.tree.CommonTree(new org.antlr.runtime.CommonToken(expectedTokenType, tokenText)); + }, + + /** Match '.' in tree parser has special meaning. Skip node or + * entire tree if node has children. If children, scan until + * corresponding UP node. + */ + matchAny: function(ignore) { // ignore stream, copy of this.input + this.state.errorRecovery = false; + this.state.failed = false; + var look = this.input.LT(1); + if ( this.input.getTreeAdaptor().getChildCount(look)===0 ) { + this.input.consume(); // not subtree, consume 1 node and return + return; + } + // current node is a subtree, skip to corresponding UP. + // must count nesting level to get right UP + var level=0, + tokenType = this.input.getTreeAdaptor().getType(look); + while ( tokenType!==org.antlr.runtime.Token.EOF && + !(tokenType===TP.UP && level===0) ) + { + this.input.consume(); + look = this.input.LT(1); + tokenType = this.input.getTreeAdaptor().getType(look); + if ( tokenType === TP.DOWN ) { + level++; + } + else if ( tokenType === TP.UP ) { + level--; + } + } + this.input.consume(); // consume UP + }, + + /** We have DOWN/UP nodes in the stream that have no line info; override. + * plus we want to alter the exception type. Don't try to recover + * * from tree parser errors inline... + */ + mismatch: function(input, ttype, follow) { + throw new org.antlr.runtime.MismatchedTreeNodeException(ttype, input); + }, + + /** Prefix error message with the grammar name because message is + * always intended for the programmer because the parser built + * the input tree not the user. + */ + getErrorHeader: function(e) { + return this.getGrammarFileName()+": node from "+ + (e.approximateLineInfo?"after ":"")+"line "+e.line+":"+e.charPositionInLine; + }, + + /** Tree parsers parse nodes they usually have a token object as + * payload. Set the exception token and do the default behavior. + */ + getErrorMessage: function(e, tokenNames) { + var adaptor; + if ( this instanceof TP ) { + adaptor = e.input.getTreeAdaptor(); + e.token = adaptor.getToken(e.node); + if ( !org.antlr.lang.isValue(e.token) ) { // could be an UP/DOWN node + e.token = new org.antlr.runtime.CommonToken( + adaptor.getType(e.node), + adaptor.getText(e.node)); + } + } + return TP.superclass.getErrorMessage.call(this, e, tokenNames); + }, + + traceIn: function(ruleName, ruleIndex) { + TP.superclass.traceIn.call(this, ruleName, ruleIndex, this.input.LT(1)); + }, + + traceOut: function(ruleName, ruleIndex) { + TP.superclass.traceOut.call(this, ruleName, ruleIndex, this.input.LT(1)); + } +}); + +})(); diff --git a/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/TreeRuleReturnScope.js b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/TreeRuleReturnScope.js new file mode 100755 index 0000000..bdef3cd --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/src/org/antlr/runtime/tree/TreeRuleReturnScope.js @@ -0,0 +1,12 @@ +/** This is identical to the ParserRuleReturnScope except that + * the start property is a tree nodes not Token object + * when you are parsing trees. To be generic the tree node types + * have to be Object. + */ +org.antlr.runtime.tree.TreeRuleReturnScope = function(){}; + +org.antlr.lang.extend(org.antlr.runtime.tree.TreeRuleReturnScope, + org.antlr.runtime.RuleReturnScope, +{ + getStart: function() { return this.start; } +}); diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/Python.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/Python.g new file mode 100755 index 0000000..0c25152 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/Python.g @@ -0,0 +1,601 @@ +/* + [The 'BSD licence'] + Copyright (c) 2004 Terence Parr and Loring Craymer + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** Python 2.3.3 Grammar + * + * Terence Parr and Loring Craymer + * February 2004 + * + * Converted to ANTLR v3 November 2005 by Terence Parr. + * + * This grammar was derived automatically from the Python 2.3.3 + * parser grammar to get a syntactically correct ANTLR grammar + * for Python. Then Terence hand tweaked it to be semantically + * correct; i.e., removed lookahead issues etc... It is LL(1) + * except for the (sometimes optional) trailing commas and semi-colons. + * It needs two symbols of lookahead in this case. + * + * Starting with Loring's preliminary lexer for Python, I modified it + * to do my version of the whole nasty INDENT/DEDENT issue just so I + * could understand the problem better. This grammar requires + * PythonTokenStream.java to work. Also I used some rules from the + * semi-formal grammar on the web for Python (automatically + * translated to ANTLR format by an ANTLR grammar, naturally <grin>). + * The lexical rules for python are particularly nasty and it took me + * a long time to get it 'right'; i.e., think about it in the proper + * way. Resist changing the lexer unless you've used ANTLR a lot. ;) + * + * I (Terence) tested this by running it on the jython-2.1/Lib + * directory of 40k lines of Python. + * + * REQUIRES ANTLR v3 + */ +grammar Python; +options {language=JavaScript;} + +tokens { + INDENT; + DEDENT; +} + +@lexer::members { +/** Handles context-sensitive lexing of implicit line joining such as + * the case where newline is ignored in cases like this: + * a = [3, + * 4] + */ + this.implicitLineJoiningLevel= 0; + this.startPos = -1; +} + +single_input + : NEWLINE + | simple_stmt + | compound_stmt NEWLINE + ; + +file_input + : (NEWLINE | stmt)* + ; + +eval_input + : (NEWLINE)* testlist (NEWLINE)* + ; + +funcdef + : 'def' NAME parameters COLON suite + {xlog("found method def "+$NAME.text);} + ; + +parameters + : LPAREN (varargslist)? RPAREN + ; + +varargslist + : defparameter (options {greedy=true;}:COMMA defparameter)* + (COMMA + ( STAR NAME (COMMA DOUBLESTAR NAME)? + | DOUBLESTAR NAME + )? + )? + | STAR NAME (COMMA DOUBLESTAR NAME)? + | DOUBLESTAR NAME + ; + +defparameter + : fpdef (ASSIGN test)? + ; + +fpdef + : NAME + | LPAREN fplist RPAREN + ; + +fplist + : fpdef (options {greedy=true;}:COMMA fpdef)* (COMMA)? + ; + + +stmt: simple_stmt + | compound_stmt + ; + +simple_stmt + : small_stmt (options {greedy=true;}:SEMI small_stmt)* (SEMI)? NEWLINE + ; + +small_stmt: expr_stmt + | print_stmt + | del_stmt + | pass_stmt + | flow_stmt + | import_stmt + | global_stmt + | exec_stmt + | assert_stmt + ; + +expr_stmt + : testlist + ( augassign testlist + | (ASSIGN testlist)+ + )? + ; + +augassign + : PLUSEQUAL + | MINUSEQUAL + | STAREQUAL + | SLASHEQUAL + | PERCENTEQUAL + | AMPEREQUAL + | VBAREQUAL + | CIRCUMFLEXEQUAL + | LEFTSHIFTEQUAL + | RIGHTSHIFTEQUAL + | DOUBLESTAREQUAL + | DOUBLESLASHEQUAL + ; + +print_stmt: + 'print' + ( testlist + | RIGHTSHIFT testlist + )? + ; + +del_stmt: 'del' exprlist + ; + +pass_stmt: 'pass' + ; + +flow_stmt: break_stmt + | continue_stmt + | return_stmt + | raise_stmt + | yield_stmt + ; + +break_stmt: 'break' + ; + +continue_stmt: 'continue' + ; + +return_stmt: 'return' (testlist)? + ; + +yield_stmt: 'yield' testlist + ; + +raise_stmt: 'raise' (test (COMMA test (COMMA test)?)?)? + ; + +import_stmt + : 'import' dotted_as_name (COMMA dotted_as_name)* + | 'from' dotted_name 'import' + (STAR | import_as_name (COMMA import_as_name)*) + ; + +import_as_name + : NAME (NAME NAME)? + ; + +dotted_as_name: dotted_name (NAME NAME)? + ; + +dotted_name: NAME (DOT NAME)* + ; + +global_stmt: 'global' NAME (COMMA NAME)* + ; + +exec_stmt: 'exec' expr ('in' test (COMMA test)?)? + ; + +assert_stmt: 'assert' test (COMMA test)? + ; + + +compound_stmt: if_stmt + | while_stmt + | for_stmt + | try_stmt + | funcdef + | classdef + ; + +if_stmt: 'if' test COLON suite ('elif' test COLON suite)* ('else' COLON suite)? + ; + +while_stmt: 'while' test COLON suite ('else' COLON suite)? + ; + +for_stmt: 'for' exprlist 'in' testlist COLON suite ('else' COLON suite)? + ; + +try_stmt + : 'try' COLON suite + ( (except_clause COLON suite)+ ('else' COLON suite)? + | 'finally' COLON suite + ) + ; + +except_clause: 'except' (test (COMMA test)?)? + ; + +suite: simple_stmt + | NEWLINE INDENT (stmt)+ DEDENT + ; + + +test: and_test ('or' and_test)* + | lambdef + ; + +and_test + : not_test ('and' not_test)* + ; + +not_test + : 'not' not_test + | comparison + ; + +comparison: expr (comp_op expr)* + ; + +comp_op: LESS + |GREATER + |EQUAL + |GREATEREQUAL + |LESSEQUAL + |ALT_NOTEQUAL + |NOTEQUAL + |'in' + |'not' 'in' + |'is' + |'is' 'not' + ; + +expr: xor_expr (VBAR xor_expr)* + ; + +xor_expr: and_expr (CIRCUMFLEX and_expr)* + ; + +and_expr: shift_expr (AMPER shift_expr)* + ; + +shift_expr: arith_expr ((LEFTSHIFT|RIGHTSHIFT) arith_expr)* + ; + +arith_expr: term ((PLUS|MINUS) term)* + ; + +term: factor ((STAR | SLASH | PERCENT | DOUBLESLASH ) factor)* + ; + +factor + : (PLUS|MINUS|TILDE) factor + | power + ; + +power + : atom (trailer)* (options {greedy=true;}:DOUBLESTAR factor)? + ; + +atom: LPAREN (testlist)? RPAREN + | LBRACK (listmaker)? RBRACK + | LCURLY (dictmaker)? RCURLY + | BACKQUOTE testlist BACKQUOTE + | NAME + | INT + | LONGINT + | FLOAT + | COMPLEX + | (STRING)+ + ; + +listmaker: test ( list_for | (options {greedy=true;}:COMMA test)* ) (COMMA)? + ; + +lambdef: 'lambda' (varargslist)? COLON test + ; + +trailer: LPAREN (arglist)? RPAREN + | LBRACK subscriptlist RBRACK + | DOT NAME + ; + +subscriptlist + : subscript (options {greedy=true;}:COMMA subscript)* (COMMA)? + ; + +subscript + : DOT DOT DOT + | test (COLON (test)? (sliceop)?)? + | COLON (test)? (sliceop)? + ; + +sliceop: COLON (test)? + ; + +exprlist + : expr (options {k=2;}:COMMA expr)* (COMMA)? + ; + +testlist + : test (options {k=2;}: COMMA test)* (COMMA)? + ; + +dictmaker + : test COLON test + (options {k=2;}:COMMA test COLON test)* (COMMA)? + ; + +classdef: 'class' NAME (LPAREN testlist RPAREN)? COLON suite + {xlog("found class def "+$NAME.text);} + ; + +arglist: argument (COMMA argument)* + ( COMMA + ( STAR test (COMMA DOUBLESTAR test)? + | DOUBLESTAR test + )? + )? + | STAR test (COMMA DOUBLESTAR test)? + | DOUBLESTAR test + ; + +argument : test (ASSIGN test)? + ; + +list_iter: list_for + | list_if + ; + +list_for: 'for' exprlist 'in' testlist (list_iter)? + ; + +list_if: 'if' test (list_iter)? + ; + +LPAREN : '(' {this.implicitLineJoiningLevel++;} ; + +RPAREN : ')' {this.implicitLineJoiningLevel--;} ; + +LBRACK : '[' {this.implicitLineJoiningLevel++;} ; + +RBRACK : ']' {this.implicitLineJoiningLevel--;} ; + +COLON : ':' ; + +COMMA : ',' ; + +SEMI : ';' ; + +PLUS : '+' ; + +MINUS : '-' ; + +STAR : '*' ; + +SLASH : '/' ; + +VBAR : '|' ; + +AMPER : '&' ; + +LESS : '<' ; + +GREATER : '>' ; + +ASSIGN : '=' ; + +PERCENT : '%' ; + +BACKQUOTE : '`' ; + +LCURLY : '{' {this.implicitLineJoiningLevel++;} ; + +RCURLY : '}' {this.implicitLineJoiningLevel--;} ; + +CIRCUMFLEX : '^' ; + +TILDE : '~' ; + +EQUAL : '==' ; + +NOTEQUAL : '!=' ; + +ALT_NOTEQUAL: '<>' ; + +LESSEQUAL : '<=' ; + +LEFTSHIFT : '<<' ; + +GREATEREQUAL : '>=' ; + +RIGHTSHIFT : '>>' ; + +PLUSEQUAL : '+=' ; + +MINUSEQUAL : '-=' ; + +DOUBLESTAR : '**' ; + +STAREQUAL : '*=' ; + +DOUBLESLASH : '//' ; + +SLASHEQUAL : '/=' ; + +VBAREQUAL : '|=' ; + +PERCENTEQUAL : '%=' ; + +AMPEREQUAL : '&=' ; + +CIRCUMFLEXEQUAL : '^=' ; + +LEFTSHIFTEQUAL : '<<=' ; + +RIGHTSHIFTEQUAL : '>>=' ; + +DOUBLESTAREQUAL : '**=' ; + +DOUBLESLASHEQUAL : '//=' ; + +DOT : '.' ; + +FLOAT + : '.' DIGITS (Exponent)? + | DIGITS ('.' (DIGITS (Exponent)?)? | Exponent) + ; + +LONGINT + : INT ('l'|'L') + ; + +fragment +Exponent + : ('e' | 'E') ( '+' | '-' )? DIGITS + ; + +INT : // Hex + '0' ('x' | 'X') ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )+ + ('l' | 'L')? + | // Octal + '0' DIGITS* + | '1'..'9' DIGITS* + ; + +COMPLEX + : INT ('j'|'J') + | FLOAT ('j'|'J') + ; + +fragment +DIGITS : ( '0' .. '9' )+ ; + +NAME: ( 'a' .. 'z' | 'A' .. 'Z' | '_') + ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* + ; + +/** Match various string types. Note that greedy=false implies ''' + * should make us exit loop not continue. + */ +STRING + : ('r'|'u'|'ur')? + ( '\'\'\'' (options {greedy=false;}:.)* '\'\'\'' + | '"""' (options {greedy=false;}:.)* '"""' + | '"' (ESC|~('\\'|'\n'|'"'))* '"' + | '\'' (ESC|~('\\'|'\n'|'\''))* '\'' + ) + ; + +fragment +ESC + : '\\' . + ; + +/** Consume a newline and any whitespace at start of next line */ +CONTINUED_LINE + : '\\' ('\r')? '\n' (' '|'\t')* { $channel=HIDDEN; } + ; + +/** Treat a sequence of blank lines as a single blank line. If + * nested within a (..), {..}, or [..], then ignore newlines. + * If the first newline starts in column one, they are to be ignored. + */ +NEWLINE + : (('\r')? '\n' )+ + {if ( this.startPos==0 || this.implicitLineJoiningLevel>0 ) + $channel=HIDDEN; + } + ; + +WS : {this.startPos>0}?=> (' '|'\t')+ {$channel=HIDDEN;} + ; + +/** Grab everything before a real symbol. Then if newline, kill it + * as this is a blank line. If whitespace followed by comment, kill it + * as it's a comment on a line by itself. + * + * Ignore leading whitespace when nested in [..], (..), {..}. + */ +LEADING_WS +@init { + var spaces = 0; +} + : {this.startPos==0}?=> + ( {this.implicitLineJoiningLevel>0}? ( ' ' | '\t' )+ {$channel=HIDDEN;} + | ( ' ' { spaces++; } + | '\t' { spaces += 8; spaces -= (spaces \% 8); } + )+ + { + // make a string of n spaces where n is column number - 1 + var indentation = new Array(spaces); + for (var i=0; i<spaces; i++) { + indentation[i] = ' '; + } + var s = indentation.join(""); + this.emit(new org.antlr.runtime.CommonToken(this.LEADING_WS,s)); + } + // kill trailing newline if present and then ignore + ( ('\r')? '\n' {if (this.state.token!=null) this.state.token.setChannel(HIDDEN); else $channel=HIDDEN;})* + // {this.token.setChannel(99); } + ) + ; + +/** Comments not on line by themselves are turned into newlines. + + b = a # end of line comment + + or + + a = [1, # weird + 2] + + This rule is invoked directly by nextToken when the comment is in + first column or when comment is on end of nonwhitespace line. + + Only match \n here if we didn't start on left edge; let NEWLINE return that. + Kill if newlines if we live on a line by ourselves + + Consume any leading whitespace if it starts on left edge. + */ +COMMENT +@init { + $channel=HIDDEN; +} + : {this.startPos==0}?=> (' '|'\t')* '#' (~'\n')* '\n'+ + | {this.startPos>0}?=> '#' (~'\n')* // let NEWLINE handle \n unless char pos==0 for '#' + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/all.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/all.html new file mode 100755 index 0000000..4e46ea4 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/all.html @@ -0,0 +1,122 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> +<meta http-equiv="content-type" content="text/html;charset=utf-8" /> +<title>Test Suites + + + + + + + + + +

Test Suites

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/rhino-python.extensions b/antlr-3.1.3/runtime/JavaScript/tests/functional/rhino-python.extensions new file mode 100755 index 0000000..fea913b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/rhino-python.extensions @@ -0,0 +1,277 @@ +/* + [The "BSD licence"] + Copyright (c) 2004 Terence Parr and Loring Craymer + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +/** Python does not explicitly provide begin and end nesting signals. + Rather, the indentation level indicates when you begin and end. + This is an interesting lexical problem because multiple DEDENT + tokens should be sent to the parser sometimes without a corresponding + input symbol! Consider the following example: + + a=1 + if a>1: + print a + b=3 + + Here the "b" token on the left edge signals that a DEDENT is needed + after the "print a \n" and before the "b". The sequence should be + + ... 1 COLON NEWLINE INDENT PRINT a NEWLINE DEDENT b ASSIGN 3 ... + + For more examples, see the big comment at the bottom of this file. + + This TokenStream normally just passes tokens through to the parser. + Upon NEWLINE token from the lexer, however, an INDENT or DEDENT token + may need to be sent to the parser. The NEWLINE is the trigger for + this class to do it's job. NEWLINE is saved and then the first token + of the next line is examined. If non-leading-whitespace token, + then check against stack for indent vs dedent. If LEADING_WS, then + the column of the next non-whitespace token will dictate indent vs + dedent. The column of the next real token is number of spaces + in the LEADING_WS token + 1 (to move past the whitespace). The + lexer grammar must set the text of the LEADING_WS token to be + the proper number of spaces (and do tab conversion etc...). + + A stack of column numbers is tracked and used to detect changes + in indent level from one token to the next. + + A queue of tokens is built up to hold multiple DEDENT tokens that + are generated. Before asking the lexer for another token via + nextToken(), the queue is flushed first one token at a time. + + Terence Parr and Loring Craymer + February 2004 + */ +PythonTokenSource = function(stream) { + this.stream = stream; + /** The stack of indent levels (column numbers) */ + this.indentStack = new Array(PythonTokenSource.MAX_INDENTS); + /** stack pointer */ + this.sp=-1; // grow upwards + + /** The queue of tokens */ + this.tokens = []; + this.lastTokenAddedIndex = -1; + this.push(PythonTokenSource.FIRST_CHAR_POSITION); +}; + +ANTLR.lang.augmentObject(PythonTokenSource, { + MAX_INDENTS: 100, + FIRST_CHAR_POSITION: 0, +}); + +PythonTokenSource.prototype = { + getSourceName: function() { + return this.stream.getSourceName(); + }, + + /** From http://www.python.org/doc/2.2.3/ref/indentation.html + + "Before the first line of the file is read, a single zero is + pushed on the stack; this will never be popped off again. The + numbers pushed on the stack will always be strictly increasing + from bottom to top. At the beginning of each logical line, the + line's indentation level is compared to the top of the + stack. If it is equal, nothing happens. If it is larger, it is + pushed on the stack, and one INDENT token is generated. If it + is smaller, it must be one of the numbers occurring on the + stack; all numbers on the stack that are larger are popped + off, and for each number popped off a DEDENT token is + generated. At the end of the file, a DEDENT token is generated + for each number remaining on the stack that is larger than + zero." + + I use char position in line 0..n-1 instead. + + The DEDENTS possibly needed at EOF are gracefully handled by forcing + EOF to have char pos 0 even though with UNIX it's hard to get EOF + at a non left edge. + */ + nextToken: function() { + // if something in queue, just remove and return it + if (this.tokens.length>0 ) { + var t = this.tokens[0]; + this.tokens.splice(0,1); + return t; + } + + this.insertImaginaryIndentDedentTokens(); + + return this.nextToken(); + }, + + insertImaginaryIndentDedentTokens: function() + { + var t = this.stream.LT(1); + this.stream.consume(); + + // if not a NEWLINE, doesn't signal indent/dedent work; just enqueue + if ( t.getType()!=PythonLexer.NEWLINE ) { + var hiddenTokens = this.stream.getTokens(this.lastTokenAddedIndex+1,t.getTokenIndex()-1); + if ( hiddenTokens!=null ) { + this.tokens = this.tokens.concat(hiddenTokens); + } + this.lastTokenAddedIndex = t.getTokenIndex(); + this.tokens.push(t); + return; + } + + // save NEWLINE in the queue + var hiddenTokens = this.stream.getTokens(this.lastTokenAddedIndex+1,t.getTokenIndex()-1); + if ( hiddenTokens!=null ) { + this.tokens = this.tokens.concat(hiddenTokens); + } + this.lastTokenAddedIndex = t.getTokenIndex(); + this.tokens.push(t); + + // grab first token of next line + t = this.stream.LT(1); + this.stream.consume(); + + hiddenTokens = this.stream.getTokens(this.lastTokenAddedIndex+1,t.getTokenIndex()-1); + if ( hiddenTokens!=null ) { + this.tokens = this.tokens.concat(hiddenTokens); + } + this.lastTokenAddedIndex = t.getTokenIndex(); + + // compute cpos as the char pos of next non-WS token in line + var cpos = t.getCharPositionInLine(); // column dictates indent/dedent + if ( t.getType()==ANTLR.runtime.Token.EOF ) { + cpos = -1; // pretend EOF always happens at left edge + } + else if ( t.getType()==PythonLexer.LEADING_WS ) { + cpos = t.getText().length; + } + + // compare to last indent level + var lastIndent = this.peek(); + if ( cpos > lastIndent ) { // they indented; track and gen INDENT + this.push(cpos); + var indent = new ANTLR.runtime.CommonToken(PythonParser.INDENT, ""); + indent.setCharPositionInLine(t.getCharPositionInLine()); + indent.setLine(t.getLine()); + this.tokens.push(indent); + } + else if ( cpos < lastIndent ) { // they dedented + // how far back did we dedent? + var prevIndex = this.findPreviousIndent(cpos); + // generate DEDENTs for each indent level we backed up over + for (var d=this.sp-1; d>=prevIndex; d--) { + var dedent = new ANTLR.runtime.CommonToken(PythonParser.DEDENT, ""); + dedent.setCharPositionInLine(t.getCharPositionInLine()); + dedent.setLine(t.getLine()); + this.tokens.push(dedent); + } + this.sp = prevIndex; // pop those off indent level + } + if ( t.getType()!=PythonLexer.LEADING_WS ) { // discard WS + this.tokens.push(t); + } + }, + + // T O K E N S T A C K M E T H O D S + + push: function(i) { + if (this.sp>=PythonTokenSource.MAX_INDENTS) { + throw new Error("stack overflow"); + } + this.sp++; + this.indentStack[this.sp] = i; + }, + + pop: function() { + if (this.sp<0) { + throw new Error("stack underflow"); + } + var top = this.indentStack[this.sp]; + this.sp--; + return top; + }, + + peek: function() { + return this.indentStack[this.sp]; + }, + + /** Return the index on stack of previous indent level == i else -1 */ + findPreviousIndent: function(i) { + for (var j=this.sp-1; j>=0; j--) { + if (this.indentStack[j]==i ) { + return j; + } + } + return PythonTokenSource.FIRST_CHAR_POSITION; + }, + + stackString: function() { + var buf = []; + for (var j=this.sp; j>=0; j--) { + buf.push(this.indentStack[j]); + } + return buf.join(" "); + } + +} + +/* More example input / output pairs with code simplified to single chars +------- t1 ------- +a a + b b + c +d +a a \n INDENT b b \n c \n DEDENT d \n EOF +------- t2 ------- +a c + b +c +a c \n INDENT b \n DEDENT c \n EOF +------- t3 ------- +a + b + c +d +a \n INDENT b \n INDENT c \n DEDENT DEDENT d \n EOF +------- t4 ------- +a + c + d + e + f + g + h + i + j + k +a \n INDENT c \n INDENT d \n DEDENT e \n f \n INDENT g \n h \n i \n INDENT j \n DEDENT DEDENT k \n DEDENT EOF +------- t5 ------- +a + b + c + d + e +a \n INDENT b \n c \n INDENT d \n e \n DEDENT DEDENT EOF +*/ diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/rhino-python.input b/antlr-3.1.3/runtime/JavaScript/tests/functional/rhino-python.input new file mode 100755 index 0000000..0ed3f2f --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/rhino-python.input @@ -0,0 +1,210 @@ +"""This is a substantially improved version of the older Interpreter.py demo +It creates a simple GUI JPython console window with simple history +as well as the ability to interupt running code (with the ESC key). + +Like Interpreter.py, this is still just a demo, and needs substantial +work before serious use. + +Thanks to Geza Groma (groma@everx.szbk.u-szeged.hu) for several valuable +ideas for this tool -- his JPConsole is a more refined implementation +of similar ideas. +""" + +from Styles import Styles +from Keymap import Keymap + +from pawt import swing, colors +from java.awt.event.KeyEvent import VK_UP, VK_DOWN +from java.awt.event import ActionEvent +from java.lang import Thread, System +from code import compile_command +import string, sys, re + +class OutputBuffer: + def __init__(self, console, stylename): + self.console = console + self.stylename = stylename + + def flush(self): + pass + + def write(self, text): + self.console.write(text, self.stylename) + +class Console: + def __init__(self, styles=None, keymap=None): + if styles is None: + styles = Styles() + basic = styles.add('normal', tabsize=3, fontSize=12, fontFamily="Courier") + styles.add('error', parent=basic, foreground=colors.red) + styles.add('output', parent=basic, foreground=colors.blue) + styles.add('input', parent=basic, foreground=colors.black) + styles.add('prompt', parent=basic, foreground=colors.purple) + self.styles = styles + + # This is a hack to get at an inner class + # This will not be required in JPython-1.1 + ForegroundAction = getattr(swing.text, 'StyledEditorKit$ForegroundAction') + self.inputAction = ForegroundAction("start input", colors.black) + + if keymap is None: + keymap = Keymap() + keymap.bind('enter', self.enter) + keymap.bind('tab', self.tab) + keymap.bind('escape', self.escape) + keymap.bind('up', self.uphistory) + keymap.bind('down', self.downhistory) + + self.keymap = keymap + + self.document = swing.text.DefaultStyledDocument(self.styles) + self.document.setLogicalStyle(0, self.styles.get('normal')) + + self.textpane = swing.JTextPane(self.document) + self.textpane.keymap = self.keymap + + self.history = [] + self.oldHistoryLength = 0 + self.historyPosition = 0 + + self.command = [] + self.locals = {} + + def write(self, text, stylename='normal'): + style = self.styles.get(stylename) + self.document.insertString(self.document.length, text, style) + + def beep(self): + self.textpane.toolkit.beep() + + def startUserInput(self, prompt=None): + if prompt is not None: + self.write(prompt, 'prompt') + self.startInput = self.document.createPosition(self.document.length-1) + #self.document.setCharacterAttributes(self.document.length-1, 1, self.styles.get('input'), 1) + self.textpane.caretPosition = self.document.length + ae = ActionEvent(self.textpane, ActionEvent.ACTION_PERFORMED, 'start input') + self.inputAction.actionPerformed(ae) + + def getinput(self): + offset = self.startInput.offset + line = self.document.getText(offset+1, self.document.length-offset) + return string.rstrip(line) + + def replaceinput(self, text): + offset = self.startInput.offset + 1 + self.document.remove(offset, self.document.length-offset) + self.write(text, 'input') + + def enter(self): + line = self.getinput() + self.write('\n', 'input') + + self.history.append(line) + self.handleLine(line) + + def gethistory(self, direction): + historyLength = len(self.history) + if self.oldHistoryLength < historyLength: + # new line was entered after last call + self.oldHistoryLength = historyLength + if self.history[self.historyPosition] != self.history[-1]: + self.historyPosition = historyLength + + pos = self.historyPosition + direction + + if 0 <= pos < historyLength: + self.historyPosition = pos + self.replaceinput(self.history[pos]) + else: + self.beep() + + def uphistory(self): + self.gethistory(-1) + + def downhistory(self): + self.gethistory(1) + + def tab(self): + self.write('\t', 'input') + + def escape(self): + if (not hasattr(self, 'pythonThread') or self.pythonThread is None or not self.pythonThread.alive): + self.beep() + return + + self.pythonThread.stopPython() + + def capturePythonOutput(self, stdoutStyle='output', stderrStyle='error'): + import sys + sys.stdout = OutputBuffer(self, stdoutStyle) + sys.stderr = OutputBuffer(self, stderrStyle) + + def handleLine(self, text): + self.command.append(text) + + try: + code = compile_command(string.join(self.command, '\n')) + except SyntaxError: + traceback.print_exc(0) + self.command = [] + self.startUserInput(str(sys.ps1)+'\t') + return + + if code is None: + self.startUserInput(str(sys.ps2)+'\t') + return + + self.command = [] + + pt = PythonThread(code, self) + self.pythonThread = pt + pt.start() + + def newInput(self): + self.startUserInput(str(sys.ps1)+'\t') + +import traceback + +class PythonThread(Thread): + def __init__(self, code, console): + self.code = code + self.console = console + self.locals = console.locals + + def run(self): + try: + exec self.code in self.locals + + #Include these lines to actually exit on a sys.exit() call + #except SystemExit, value: + # raise SystemExit, value + + except: + exc_type, exc_value, exc_traceback = sys.exc_info() + l = len(traceback.extract_tb(sys.exc_traceback)) + try: + 1/0 + except: + m = len(traceback.extract_tb(sys.exc_traceback)) + traceback.print_exception(exc_type, exc_value, exc_traceback, l-m) + + self.console.newInput() + + def stopPython(self): + #Should spend 2 seconds trying to kill thread in nice Python style first... + self.stop() + +header = """\ +JPython %(version)s on %(platform)s +%(copyright)s +""" % {'version':sys.version, 'platform':sys.platform, 'copyright':sys.copyright} + +if __name__ == '__main__': + c = Console() + pane = swing.JScrollPane(c.textpane) + swing.test(pane, size=(500,400), name='JPython Console') + c.write(header, 'output') + c.capturePythonOutput() + c.textpane.requestFocus() + c.newInput() diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/rhino-python.output b/antlr-3.1.3/runtime/JavaScript/tests/functional/rhino-python.output new file mode 100755 index 0000000..102b31b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/rhino-python.output @@ -0,0 +1,24 @@ +found method def __init__ +found method def flush +found method def write +found class def OutputBuffer +found method def __init__ +found method def write +found method def beep +found method def startUserInput +found method def getinput +found method def replaceinput +found method def enter +found method def gethistory +found method def uphistory +found method def downhistory +found method def tab +found method def escape +found method def capturePythonOutput +found method def handleLine +found method def newInput +found class def Console +found method def __init__ +found method def run +found method def stopPython +found class def PythonThread diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/rhino-python.prog b/antlr-3.1.3/runtime/JavaScript/tests/functional/rhino-python.prog new file mode 100755 index 0000000..1503f4c --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/rhino-python.prog @@ -0,0 +1,80 @@ +/* Test Infrastructure */ + +function loadFile(fileName, encoding) { + var f = new java.io.File(fileName), + size = f.length(), + isr, + fis = new java.io.FileInputStream(f); + if (encoding) { + isr = new java.io.InputStreamReader(fis, encoding); + } else { + isr = new java.io.InputStreamReader(fis); + } + + /* Should use the ternary version of isr.read here, but can't figure + * out how to create a Java char array from JS. . . + * @todo + */ + var charCode, data=[]; + while ((charCode = isr.read()) >= 0) { + data.push(String.fromCharCode(charCode)); + } + return data.join(""); +} + +eval(loadFile("../../lib/antlr3-all.js")); +eval(loadFile("../../lib/antlr3-cli.js")); +eval(loadFile("PythonLexer.js")); +eval(loadFile("PythonParser.js")); +eval(loadFile("rhino-python.extensions")); + +/* Parser Extensions */ + +var output = []; +function xlog(msg) { + output.push(msg); +} + +function MyLexer() { + MyLexer.superclass.constructor.apply(this, arguments); +} +ANTLR.lang.extend(MyLexer, PythonLexer, { + nextToken: function() { + // keep track of this token's position in line because Python is + // whitespace sensitive + this.startPos = this.getCharPositionInLine(); + return MyLexer.superclass.nextToken.call(this); + } +}); +MyLexer.prototype.emitErrorMessage = function(msg) {xlog(msg);} +PythonParser.prototype.emitErrorMessage = function(msg) {xlog(msg);} + +/* Test */ + +function parse(text) { + try { + var input = new ANTLR.runtime.ANTLRStringStream(text); + var lexer = new MyLexer(input); + var tokens = new ANTLR.runtime.CommonTokenStream(lexer); + tokens.discardOffChannelTokens=true; + var indentedSource = new PythonTokenSource(tokens); + tokens = new ANTLR.runtime.CommonTokenStream(indentedSource); + var parser = new PythonParser(tokens); + parser.file_input(); + } catch (e) { + xlog(e.toString()); + } finally { + } +} + +var input = loadFile("rhino-python.input"); +var expected = loadFile("rhino-python.output"); +parse(input); +var actual = output.join("\n")+"\n"; +if (actual==expected) { + print("Test Passed!"); +} else { + print("Test Failed!"); + print(actual); + print(expected); +} diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t001lexer.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t001lexer.g new file mode 100755 index 0000000..cee2088 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t001lexer.g @@ -0,0 +1,6 @@ +lexer grammar t001lexer; +options { + language = JavaScript; +} + +ZERO: '0'; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t001lexer.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t001lexer.html new file mode 100755 index 0000000..a41ceee --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t001lexer.html @@ -0,0 +1,57 @@ + + + + +t001lexer + + + + + + + + + + + + + +

t001lexer

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t002lexer.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t002lexer.g new file mode 100755 index 0000000..2b2e132 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t002lexer.g @@ -0,0 +1,7 @@ +lexer grammar t002lexer; +options { + language = JavaScript; +} + +ZERO: '0'; +ONE: '1'; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t002lexer.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t002lexer.html new file mode 100755 index 0000000..d95c98d --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t002lexer.html @@ -0,0 +1,58 @@ + + + + +t002lexer + + + + + + + + + + + + + +

t002lexer

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t003lexer.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t003lexer.g new file mode 100755 index 0000000..e6b745b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t003lexer.g @@ -0,0 +1,8 @@ +lexer grammar t003lexer; +options { + language = JavaScript; +} + +ZERO: '0'; +ONE: '1'; +FOOZE: 'fooze'; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t003lexer.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t003lexer.html new file mode 100755 index 0000000..471de69 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t003lexer.html @@ -0,0 +1,62 @@ + + + + +t003lexer + + + + + + + + + + + + + +

t003lexer

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t004lexer.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t004lexer.g new file mode 100755 index 0000000..c204b52 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t004lexer.g @@ -0,0 +1,6 @@ +lexer grammar t004lexer; +options { + language = JavaScript; +} + +FOO: 'f' 'o'*; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t004lexer.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t004lexer.html new file mode 100755 index 0000000..14e0e1a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t004lexer.html @@ -0,0 +1,78 @@ + + + + +t004lexer + + + + + + + + + + + + + +

t004lexer

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t005lexer.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t005lexer.g new file mode 100755 index 0000000..bdeddb8 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t005lexer.g @@ -0,0 +1,6 @@ +lexer grammar t005lexer; +options { + language = JavaScript; +} + +FOO: 'f' 'o'+; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t005lexer.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t005lexer.html new file mode 100755 index 0000000..a9d3d6a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t005lexer.html @@ -0,0 +1,85 @@ + + + + +t005lexer + + + + + + + + + + + + + +

t005lexer

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t006lexer.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t006lexer.g new file mode 100755 index 0000000..9654b65 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t006lexer.g @@ -0,0 +1,6 @@ +lexer grammar t006lexer; +options { + language = JavaScript; +} + +FOO: 'f' ('o' | 'a')*; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t006lexer.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t006lexer.html new file mode 100755 index 0000000..9f3380b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t006lexer.html @@ -0,0 +1,69 @@ + + + + +t006lexer + + + + + + + + + + + + + +

t006lexer

+ diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t007lexer.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t007lexer.g new file mode 100755 index 0000000..952914b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t007lexer.g @@ -0,0 +1,6 @@ +lexer grammar t007lexer; +options { + language = JavaScript; +} + +FOO: 'f' ('o' | 'a' 'b'+)*; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t007lexer.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t007lexer.html new file mode 100755 index 0000000..eb1dbc9 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t007lexer.html @@ -0,0 +1,66 @@ + + + + +t007lexer + + + + + + + + + + + + + +

t007lexer

+ diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t008lexer.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t008lexer.g new file mode 100755 index 0000000..8b918d6 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t008lexer.g @@ -0,0 +1,6 @@ +lexer grammar t008lexer; +options { + language = JavaScript; +} + +FOO: 'f' 'a'?; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t008lexer.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t008lexer.html new file mode 100755 index 0000000..d2d8397 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t008lexer.html @@ -0,0 +1,74 @@ + + + + +t008lexer + + + + + + + + + + + + + +

t008lexer

+ diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t009lexer.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t009lexer.g new file mode 100755 index 0000000..d95c114 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t009lexer.g @@ -0,0 +1,6 @@ +lexer grammar t009lexer; +options { + language = JavaScript; +} + +DIGIT: '0' .. '9'; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t009lexer.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t009lexer.html new file mode 100755 index 0000000..68f6289 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t009lexer.html @@ -0,0 +1,75 @@ + + + + +t009lexer + + + + + + + + + + + + + +

t009lexer

+ diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t010lexer.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t010lexer.g new file mode 100755 index 0000000..49fa519 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t010lexer.g @@ -0,0 +1,7 @@ +lexer grammar t010lexer; +options { + language = JavaScript; +} + +IDENTIFIER: ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*; +WS: (' ' | '\n')+; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t010lexer.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t010lexer.html new file mode 100755 index 0000000..6e64df7 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t010lexer.html @@ -0,0 +1,87 @@ + + + + +t010lexer + + + + + + + + + + + + + +

t010lexer

+ diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t011lexer.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t011lexer.g new file mode 100755 index 0000000..ba33c27 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t011lexer.g @@ -0,0 +1,19 @@ +lexer grammar t011lexer; +options { + language = JavaScript; +} + +IDENTIFIER: + ('a'..'z'|'A'..'Z'|'_') + ('a'..'z' + |'A'..'Z' + |'0'..'9' + |'_' + { + tlog("Underscore"); + tlog("foo"); + } + )* + ; + +WS: (' ' | '\n')+; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t011lexer.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t011lexer.html new file mode 100755 index 0000000..eb73988 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t011lexer.html @@ -0,0 +1,87 @@ + + + + +t011lexer + + + + + + + + + + + + + +

t011lexer

+ diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t012lexerXML.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t012lexerXML.g new file mode 100755 index 0000000..431edd3 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t012lexerXML.g @@ -0,0 +1,127 @@ +/** XML parser by Oliver Zeigermann October 10, 2005 */ +lexer grammar t012lexerXML; +options { + language = JavaScript; +} + +@lexer::members { +this.lout = []; +this.output = function(line) { + this.lout.push(line); +}; +} + +DOCUMENT + : XMLDECL? WS? DOCTYPE? WS? ELEMENT WS? + ; + +fragment DOCTYPE + : + '' + ; + +fragment INTERNAL_DTD : '[' (options {greedy=false;} : .)* ']' ; + +fragment PI : + '' + ; + +fragment XMLDECL : + '' + ; + + +fragment ELEMENT + : ( START_TAG + (ELEMENT + | t=PCDATA + {this.output("PCDATA: \""+$t.text+"\"")} + | t=CDATA + {this.output("CDATA: \""+$t.text+"\"")} + | t=COMMENT + {this.output("Comment: \""+$t.text+"\"")} + | pi=PI + )* + END_TAG + | EMPTY_ELEMENT + ) + ; + +fragment START_TAG + : '<' WS? name=GENERIC_ID WS? + {this.output("Start Tag: "+$name.text)} + ( ATTRIBUTE WS? )* '>' + ; + +fragment EMPTY_ELEMENT + : '<' WS? name=GENERIC_ID WS? + {this.output("Empty Element: "+$name.text)} + ( ATTRIBUTE WS? )* '/>' + ; + +fragment ATTRIBUTE + : name=GENERIC_ID WS? '=' WS? value=VALUE + {this.output("Attr: "+$name.text+"="+$value.text)} + ; + +fragment END_TAG + : '' + {this.output("End Tag: "+$name.text)} + ; + +fragment COMMENT + : '' + ; + +fragment CDATA + : '' + ; + +fragment PCDATA : (~'<')+ ; + +fragment VALUE : + ( '\"' (~'\"')* '\"' + | '\'' (~'\'')* '\'' + ) + ; + +fragment GENERIC_ID + : ( LETTER | '_' | ':') + ( options {greedy=true;} : LETTER | '0'..'9' | '.' | '-' | '_' | ':' )* + ; + +fragment LETTER + : 'a'..'z' + | 'A'..'Z' + ; + +fragment WS : + ( ' ' + | '\t' + | ( '\n' + | '\r\n' + | '\r' + ) + )+ + ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t012lexerXML.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t012lexerXML.html new file mode 100755 index 0000000..c74aac8 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t012lexerXML.html @@ -0,0 +1,187 @@ + + + + +t012lexerXML + + + + + + + + + + + + +

t012lexerXML

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t013parser.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t013parser.g new file mode 100755 index 0000000..c9b3e12 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t013parser.g @@ -0,0 +1,23 @@ +grammar t013parser; +options { + language = JavaScript; +} + +@parser::members { +this.identifiers = []; +this.reportedErrors = []; + +this.foundIdentifier = function(name) { + this.identifiers.push(name); +}; + +this.emitErrorMessage = function(msg) { + this.reportedErrors.push(msg); +}; +} + +document: + t=IDENTIFIER {this.foundIdentifier($t.text)} + ; + +IDENTIFIER: ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t013parser.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t013parser.html new file mode 100755 index 0000000..09beb94 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t013parser.html @@ -0,0 +1,45 @@ + + + + +t013parser + + + + + + + + + + + + + + +

t013parser

+ diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t014parser.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t014parser.g new file mode 100755 index 0000000..de52a0a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t014parser.g @@ -0,0 +1,36 @@ +grammar t014parser; +options { + language = JavaScript; +} + +@parser::members { +this.reportedErrors = []; +this.events = []; +this.emitErrorMessage = function(msg) { + this.reportedErrors.push(msg); +}; +this.eventMessage = function(msg) { + this.events.push(msg); +}; +} + + +document: + ( declaration + | call + )* + EOF + ; + +declaration: + 'var' t=IDENTIFIER ';' + {this.eventMessage(['decl', $t.getText()]);} + ; + +call: + t=IDENTIFIER '(' ')' ';' + {this.eventMessage(['call', $t.getText()]);} + ; + +IDENTIFIER: ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*; +WS: (' '|'\r'|'\t'|'\n') {$channel=HIDDEN;}; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t014parser.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t014parser.html new file mode 100755 index 0000000..f49306b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t014parser.html @@ -0,0 +1,91 @@ + + + + +t014parser + + + + + + + + + + + + + + + +

t014parser

+ diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t015calc.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t015calc.g new file mode 100755 index 0000000..cc9e277 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t015calc.g @@ -0,0 +1,50 @@ +grammar t015calc; +options { + language = JavaScript; +} + +@parser::members { +this.emitErrorMessage = function(msg) { + if (!this.reportedErrors) { + this.reportedErrors = [msg]; + } else { + this.reportedErrors.push(msg) + } +}; +} + +evaluate returns [result]: r=expression {result = r;}; + +expression returns [result]: r=mult ( + '+' r2=mult {r += r2;} + | '-' r2=mult {r -= r2;} + )* {result = r}; + +mult returns [result]: r=log ( + '*' r2=log {r *= r2;} + | '/' r2=log {r /= r2;} + )* {result = r}; + +log returns [result]: 'ln' r=exp {result = Math.log(r);} + | r=exp {result = r;} + ; + +exp returns [result]: r=atom ('^' r2=atom {r = Math.pow(r,r2);} )? {result = r;} + ; + +atom returns [result]: + n=INTEGER {result = parseInt($n.text, 10);} + | n=DECIMAL {result = parseFloat($n.text);} + | '(' r=expression {result = r;} ')' + | 'PI' {result = Math.PI;} + | 'E' {result = Math.E;} + ; + +INTEGER: DIGIT+; + +DECIMAL: DIGIT+ '.' DIGIT+; + +fragment +DIGIT: '0'..'9'; + +WS: (' ' | '\n' | '\t')+ {$channel = HIDDEN;}; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t015calc.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t015calc.html new file mode 100755 index 0000000..84d1755 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t015calc.html @@ -0,0 +1,66 @@ + + + + +t015calc + + + + + + + + + + + + + + + +

t015calc

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t016actions.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t016actions.g new file mode 100755 index 0000000..b7d4b77 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t016actions.g @@ -0,0 +1,31 @@ +grammar t016actions; +options { + language = JavaScript; +} + +declaration returns [name] + : functionHeader ';' + {$name = $functionHeader.name;} + ; + +functionHeader returns [name] + : type ID + {$name = $ID.text;} + ; + +type + : 'int' + | 'char' + | 'void' + ; + +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + ; + +WS : ( ' ' + | '\t' + | '\r' + | '\n' + )+ + {_channel=HIDDEN} + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t016actions.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t016actions.html new file mode 100755 index 0000000..04592bc --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t016actions.html @@ -0,0 +1,33 @@ + + + + +t016actions + + + + + + + + + + + + + + + +

t016actions

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t017parser.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t017parser.g new file mode 100755 index 0000000..0ab97b8 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t017parser.g @@ -0,0 +1,91 @@ +grammar t017parser; + +options { + language = JavaScript; +} + +program + : declaration+ + ; + +declaration + : variable + | functionHeader ';' + | functionHeader block + ; + +variable + : type declarator ';' + ; + +declarator + : ID + ; + +functionHeader + : type ID '(' ( formalParameter ( ',' formalParameter )* )? ')' + ; + +formalParameter + : type declarator + ; + +type + : 'int' + | 'char' + | 'void' + | ID + ; + +block + : '{' + variable* + stat* + '}' + ; + +stat: forStat + | expr ';' + | block + | assignStat ';' + | ';' + ; + +forStat + : 'for' '(' assignStat ';' expr ';' assignStat ')' block + ; + +assignStat + : ID '=' expr + ; + +expr: condExpr + ; + +condExpr + : aexpr ( ('==' | '<') aexpr )? + ; + +aexpr + : atom ( '+' atom )* + ; + +atom + : ID + | INT + | '(' expr ')' + ; + +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + ; + +INT : ('0'..'9')+ + ; + +WS : ( ' ' + | '\t' + | '\r' + | '\n' + )+ + {$channel=HIDDEN;} + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t017parser.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t017parser.html new file mode 100755 index 0000000..cd5b38c --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t017parser.html @@ -0,0 +1,68 @@ + + + + +t017parser + + + + + + + + + + + + + + + +

t017parser

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t018llstar.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t018llstar.g new file mode 100755 index 0000000..7920df9 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t018llstar.g @@ -0,0 +1,110 @@ +grammar t018llstar; + +options { + language = JavaScript; +} + +@members { +this.olog = []; +this.output = function(msg) { + this.olog.push(msg); +}; +} + +program + : declaration+ + ; + +/** In this rule, the functionHeader left prefix on the last two + * alternatives is not LL(k) for a fixed k. However, it is + * LL(*). The LL(*) algorithm simply scans ahead until it sees + * either the ';' or the '{' of the block and then it picks + * the appropriate alternative. Lookhead can be arbitrarily + * long in theory, but is <=10 in most cases. Works great. + * Use ANTLRWorks to see the lookahead use (step by Location) + * and look for blue tokens in the input window pane. :) + */ +declaration + : variable + | functionHeader ';' + {this.output($functionHeader.name+" is a declaration");} + | functionHeader block + {this.output($functionHeader.name+" is a definition");} + ; + +variable + : type declarator ';' + ; + +declarator + : ID + ; + +functionHeader returns [name] + : type ID '(' ( formalParameter ( ',' formalParameter )* )? ')' + {$name = $ID.text} + ; + +formalParameter + : type declarator + ; + +type + : 'int' + | 'char' + | 'void' + | ID + ; + +block + : '{' + variable* + stat* + '}' + ; + +stat: forStat + | expr ';' + | block + | assignStat ';' + | ';' + ; + +forStat + : 'for' '(' assignStat ';' expr ';' assignStat ')' block + ; + +assignStat + : ID '=' expr + ; + +expr: condExpr + ; + +condExpr + : aexpr ( ('==' | '<') aexpr )? + ; + +aexpr + : atom ( '+' atom )* + ; + +atom + : ID + | INT + | '(' expr ')' + ; + +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + ; + +INT : ('0'..'9')+ + ; + +WS : ( ' ' + | '\t' + | '\r' + | '\n' + )+ + {$channel=HIDDEN} + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t018llstar.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t018llstar.html new file mode 100755 index 0000000..eb7f682 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t018llstar.html @@ -0,0 +1,61 @@ + + + + +t018llstar + + + + + + + + + + + + + + + +

t018llstar

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t019lexer.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t019lexer.g new file mode 100755 index 0000000..3d5b883 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t019lexer.g @@ -0,0 +1,64 @@ +lexer grammar t019lexer; +options { + language=JavaScript; + filter=true; +} + +IMPORT + : 'import' WS name=QIDStar WS? ';' + ; + +/** Avoids having "return foo;" match as a field */ +RETURN + : 'return' (options {greedy=false;}:.)* ';' + ; + +CLASS + : 'class' WS name=ID WS? ('extends' WS QID WS?)? + ('implements' WS QID WS? (',' WS? QID WS?)*)? '{' + ; + +COMMENT + : '/*' (options {greedy=false;} : . )* '*/' + ; + +STRING + : '"' (options {greedy=false;}: ESC | .)* '"' + ; + +CHAR + : '\'' (options {greedy=false;}: ESC | .)* '\'' + ; + +WS : (' '|'\t'|'\n')+ + ; + +fragment +QID : ID ('.' ID)* + ; + +/** QID cannot see beyond end of token so using QID '.*'? somewhere won't + * ever match since k=1 lookahead in the QID loop of '.' will make it loop. + * I made this rule to compensate. + */ +fragment +QIDStar + : ID ('.' ID)* '.*'? + ; + +fragment +TYPE: QID '[]'? + ; + +fragment +ARG : TYPE WS ID + ; + +fragment +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* + ; + +fragment +ESC : '\\' ('"'|'\''|'\\') + ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t019lexer.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t019lexer.html new file mode 100755 index 0000000..c2bcf3e --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t019lexer.html @@ -0,0 +1,43 @@ + + + + +t019lexer + + + + + + + + + + + + + +

t019lexer

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t020fuzzy.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t020fuzzy.g new file mode 100755 index 0000000..5ac2963 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t020fuzzy.g @@ -0,0 +1,95 @@ +lexer grammar t020fuzzy; +options { + language=JavaScript; + filter=true; +} + +@members { +this.outbuf = []; +this.output = function(msg) { + this.outbuf.push(msg); +}; +} + +IMPORT + : 'import' WS name=QIDStar WS? ';' + ; + +/** Avoids having "return foo;" match as a field */ +RETURN + : 'return' (options {greedy=false;}:.)* ';' + ; + +CLASS + : 'class' WS name=ID WS? ('extends' WS QID WS?)? + ('implements' WS QID WS? (',' WS? QID WS?)*)? '{' + {this.output("found class "+$name.text+"\n");} + ; + +METHOD + : TYPE WS name=ID WS? '(' ( ARG WS? (',' WS? ARG WS?)* )? ')' WS? + ('throws' WS QID WS? (',' WS? QID WS?)*)? '{' + {this.output("found method "+$name.text+"\n");} + ; + +FIELD + : TYPE WS name=ID '[]'? WS? (';'|'=') + {this.output("found var "+$name.text+"\n");} + ; + +STAT: ('if'|'while'|'switch'|'for') WS? '(' ; + +CALL + : name=QID WS? '(' + {this.output("found call "+$name.text+"\n");} + ; + +COMMENT + : '/*' (options {greedy=false;} : . )* '*/' + {this.output("found comment "+this.getText()+"\n");} + ; + +SL_COMMENT + : '//' (options {greedy=false;} : . )* '\n' + {this.output("found // comment "+this.getText()+"\n");} + ; + +STRING + : '"' (options {greedy=false;}: ESC | .)* '"' + ; + +CHAR + : '\'' (options {greedy=false;}: ESC | .)* '\'' + ; + +WS : (' '|'\t'|'\n')+ + ; + +fragment +QID : ID ('.' ID)* + ; + +/** QID cannot see beyond end of token so using QID '.*'? somewhere won't + * ever match since k=1 lookahead in the QID loop of '.' will make it loop. + * I made this rule to compensate. + */ +fragment +QIDStar + : ID ('.' ID)* '.*'? + ; + +fragment +TYPE: QID '[]'? + ; + +fragment +ARG : TYPE WS ID + ; + +fragment +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* + ; + +fragment +ESC : '\\' ('"'|'\''|'\\') + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t020fuzzy.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t020fuzzy.html new file mode 100755 index 0000000..1191729 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t020fuzzy.html @@ -0,0 +1,62 @@ + + + + +t020fuzzy + + + + + + + + + + + + + +

t020fuzzy

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t021hoist.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t021hoist.g new file mode 100755 index 0000000..733c8d1 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t021hoist.g @@ -0,0 +1,37 @@ +grammar t021hoist; +options { + language=JavaScript; +} + +/* With this true, enum is seen as a keyword. False, it's an identifier */ +@members { +this.enableEnum = false; +} + +stat returns [enumIs] + : identifier {enumIs = "ID"} + | enumAsKeyword {enumIs = "keyword"} + ; + +identifier + : ID + | enumAsID + ; + +enumAsKeyword : {this.enableEnum}? 'enum' ; + +enumAsID : {!this.enableEnum}? 'enum' ; + +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + ; + +INT : ('0'..'9')+ + ; + +WS : ( ' ' + | '\t' + | '\r' + | '\n' + )+ + {$channel=HIDDEN;} + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t021hoist.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t021hoist.html new file mode 100755 index 0000000..05b8858 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t021hoist.html @@ -0,0 +1,47 @@ + + + + +t021hoist + + + + + + + + + + + + + + + +

t021hoist

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t022scopes.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t022scopes.g new file mode 100755 index 0000000..15e50d6 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t022scopes.g @@ -0,0 +1,132 @@ +grammar t022scopes; + +options { + language=JavaScript; +} + +/* global scopes */ + +scope aScope { +names +} + +a +scope aScope; + : {$aScope::names = [];} ID* + ; + + +/* rule scopes, from the book, final beta, p.147 */ + +b[v] +scope {x} + : {$b::x = v;} b2 + ; + +b2 + : b3 + ; + +b3 + : {$b::x}?=> ID // only visible, if b was called with True + | NUM + ; + + +/* rule scopes, from the book, final beta, p.148 */ + +c returns [res] +scope { + symbols +} +@init { + $c::symbols = {}; +} + : '{' c1* c2+ '}' + { $res = $c::symbols; } + ; + +c1 + : 'int' ID {$c::symbols[$ID.text] = true;} ';' + ; + +c2 + : ID '=' NUM ';' + { + if (! $c::symbols[$ID.text]) { + throw new Error($ID.text); + } + } + ; + +/* recursive rule scopes, from the book, final beta, p.150 */ + +d returns [res] +scope { + symbols +} +@init { + $d::symbols = {}; +} + : '{' d1* d2* '}' + { $res = $d::symbols; } + ; + +d1 + : 'int' ID {$d::symbols[$ID.text] = true;} ';' + ; + +d2 + : ID '=' NUM ';' + { + var i, isDefined; + for (i=$d.length-1, isDefined=false; i>=0; i--) { + if ($d[i]::symbols[$ID.text]) { + isDefined = true; + break; + } + } + if (!isDefined) { + throw new Error("undefined variable "+$ID.text); + } + } + | d + ; + +/* recursive rule scopes, access bottom-most scope */ + +e returns [res] +scope { + a +} +@after { + $res = $e::a; +} + : NUM { $e[0]::a = parseInt($NUM.text, 10); } + | '{' e '}' + ; + + +/* recursive rule scopes, access with negative index */ + +f returns [res] +scope { + a +} +@after { + $res = $f::a; +} + : NUM { var len = $f.length-2; $f[len>=0 ? len : 0]::a = parseInt($NUM.text, 10); } + | '{' f '}' + ; + + +/* tokens */ +ID : ('a'..'z')+ + ; + +NUM : ('0'..'9')+ + ; + +WS : (' '|'\n'|'\r')+ {$channel=HIDDEN;} + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t022scopes.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t022scopes.html new file mode 100755 index 0000000..456c4bc --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t022scopes.html @@ -0,0 +1,167 @@ + + + + +t022scopes + + + + + + + + + + + + + + + +

t022scopes

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t023scopes.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t023scopes.g new file mode 100755 index 0000000..680e0d1 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t023scopes.g @@ -0,0 +1,18 @@ +grammar t023scopes; + +options { + language=JavaScript; +} + +prog +scope { +name +} + : ID {$prog::name=$ID.text;} + ; + +ID : ('a'..'z')+ + ; + +WS : (' '|'\n'|'\r')+ {$channel=org.antlr.runtime.BaseRecognizer.HIDDEN;} + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t023scopes.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t023scopes.html new file mode 100755 index 0000000..522d4a4 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t023scopes.html @@ -0,0 +1,39 @@ + + + + +t023scopes + + + + + + + + + + + + + + + +

t023scopes

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t024finally.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t024finally.g new file mode 100755 index 0000000..9b0deb0 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t024finally.g @@ -0,0 +1,19 @@ +grammar t024finally; + +options { + language=JavaScript; +} + +prog returns [events] +@init {events = [];} +@after {events.push('after');} + : ID {throw new Error("quux");} + ; + catch [e] {events.push('catch');} + finally {events.push('finally');} + +ID : ('a'..'z')+ + ; + +WS : (' '|'\n'|'\r')+ {$channel=org.antlr.runtime.BaseRecognizer.HIDDEN} + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t024finally.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t024finally.html new file mode 100755 index 0000000..6980534 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t024finally.html @@ -0,0 +1,39 @@ + + + + +t024finally + + + + + + + + + + + + + + + +

t024finally

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t025lexerRulePropertyRef.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t025lexerRulePropertyRef.g new file mode 100755 index 0000000..52e1ac6 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t025lexerRulePropertyRef.g @@ -0,0 +1,18 @@ +lexer grammar t025lexerRulePropertyRef; +options { + language = JavaScript; +} + +@lexer::init { +this.properties = []; +} + +IDENTIFIER: + ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + { +this.properties.push( + [$text, $type, $line, $pos, $index, $channel, $start, $stop] +); + } + ; +WS: (' ' | '\n')+; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t025lexerRulePropertyRef.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t025lexerRulePropertyRef.html new file mode 100755 index 0000000..696f4f8 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t025lexerRulePropertyRef.html @@ -0,0 +1,72 @@ + + + + +t025lexerRulePropertyRef + + + + + + + + + + + + + +

t025lexerRulePropertyRef

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t026actions.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t026actions.g new file mode 100755 index 0000000..a7998a8 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t026actions.g @@ -0,0 +1,41 @@ +grammar t026actions; +options { + language = JavaScript; +} + +@lexer::init { + this.xlog = []; + this.foobar = "attribute;"; +} + +prog +@init { + this.xlog = []; + this.xlog.push("init;"); +} +@after { + this.xlog.push("after;"); +} + : IDENTIFIER EOF + ; + catch [ exc ] { + this.xlog.push("catch;"); + throw new Error(); + } + finally { + this.xlog.push("finally;"); + } + + +IDENTIFIER + : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + { + // a comment + this.xlog.push("action;"); + this.xlog.push([$text, $type, $line, $pos, $index, $channel, $start, $stop].join(" ")); + if (true) + this.xlog.push(this.foobar); + } + ; + +WS: (' ' | '\n')+; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t026actions.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t026actions.html new file mode 100755 index 0000000..71923fb --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t026actions.html @@ -0,0 +1,36 @@ + + + + +t026actions + + + + + + + + + + + + + + + +

t026actions

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t027eof.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t027eof.g new file mode 100755 index 0000000..61504c9 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t027eof.g @@ -0,0 +1,8 @@ +lexer grammar t027eof; + +options { + language=JavaScript; +} + +END: '\u0000'; +SPACE: ' '; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t027eof.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t027eof.html new file mode 100755 index 0000000..6a4f72a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t027eof.html @@ -0,0 +1,33 @@ + + + + +t027eof + + + + + + + + + + + + + +

t027eof

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t029synpredgate.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t029synpredgate.g new file mode 100755 index 0000000..cb1561f --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t029synpredgate.g @@ -0,0 +1,16 @@ +lexer grammar t029synpredgate; +options { + language = JavaScript; +} + +FOO + : ('ab')=>A + | ('ac')=>B + ; + +fragment +A: 'a'; + +fragment +B: 'a'; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t029synpredgate.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t029synpredgate.html new file mode 100755 index 0000000..0f316c4 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t029synpredgate.html @@ -0,0 +1,29 @@ + + + + +t029synpredgate + + + + + + + + + + + + + +

t029synpredgate

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t030specialStates.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t030specialStates.g new file mode 100755 index 0000000..f4390d7 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t030specialStates.g @@ -0,0 +1,22 @@ +grammar t030specialStates; +options { + language = JavaScript; +} + +@members { +this.recover = function(input, re) { + throw re; +}; +} + +r + : ( {this.cond}? NAME + | {!this.cond}? NAME WS+ NAME + ) + ( WS+ NAME )? + EOF + ; + +NAME: ('a'..'z') ('a'..'z' | '0'..'9')+; +NUMBER: ('0'..'9')+; +WS: ' '+; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t030specialStates.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t030specialStates.html new file mode 100755 index 0000000..36ba07d --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t030specialStates.html @@ -0,0 +1,69 @@ + + + + +t030specialStates + + + + + + + + + + + + + + + +

t030specialStates

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t031emptyAlt.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t031emptyAlt.g new file mode 100755 index 0000000..b1a744e --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t031emptyAlt.g @@ -0,0 +1,16 @@ +grammar t031emptyAlt; +options { + language = JavaScript; +} + +r + : NAME + ( {this.cond}?=> WS+ NAME + | + ) + EOF + ; + +NAME: ('a'..'z') ('a'..'z' | '0'..'9')+; +NUMBER: ('0'..'9')+; +WS: ' '+; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t031emptyAlt.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t031emptyAlt.html new file mode 100755 index 0000000..bf3cf54 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t031emptyAlt.html @@ -0,0 +1,69 @@ + + + + +t031emptyAlt + + + + + + + + + + + + + + + +

t031emptyAlt

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t032subrulePredict.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t032subrulePredict.g new file mode 100755 index 0000000..a947582 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t032subrulePredict.g @@ -0,0 +1,8 @@ +grammar t032subrulePredict; +options { + language = JavaScript; +} + +a: 'BEGIN' b WS+ 'END'; +b: ( WS+ 'A' )+; +WS: ' '; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t032subrulePredict.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t032subrulePredict.html new file mode 100755 index 0000000..c0c292d --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t032subrulePredict.html @@ -0,0 +1,57 @@ + + + + +t032subrulePredict + + + + + + + + + + + + + + + +

t032subrulePredict

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t033backtracking.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t033backtracking.g new file mode 100755 index 0000000..9093c34 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t033backtracking.g @@ -0,0 +1,519 @@ +grammar t033backtracking; +options { + language=JavaScript; + backtrack=true; + memoize=true; + k=2; +} + +scope Symbols { + types; +} + +@members { +this.isTypeName = function(name) { + var i, scope; + for (i=this.Symbols_stack.length-1; i>=0; i--) { + scope = this.Symbols_stack[i]; + if (!org.antlr.lang.isUndefined(scope.types[name])) { + return true; + } + } + return false; +}; +} + +translation_unit +scope Symbols; // entire file is a scope +@init { + $Symbols::types = {}; +} + : external_declaration+ + ; + +/** Either a function definition or any other kind of C decl/def. + * The LL(*) analysis algorithm fails to deal with this due to + * recursion in the declarator rules. I'm putting in a + * manual predicate here so that we don't backtrack over + * the entire function. Further, you get a better error + * as errors within the function itself don't make it fail + * to predict that it's a function. Weird errors previously. + * Remember: the goal is to avoid backtrack like the plague + * because it makes debugging, actions, and errors harder. + * + * Note that k=1 results in a much smaller predictor for the + * fixed lookahead; k=2 made a few extra thousand lines. ;) + * I'll have to optimize that in the future. + */ +external_declaration +options {k=1;} + : ( declaration_specifiers? declarator declaration* '{' )=> function_definition + | declaration + ; + +function_definition +scope Symbols; // put parameters and locals into same scope for now +@init { + $Symbols::types = set() +} + : declaration_specifiers? declarator +// ( declaration+ compound_statement // K&R style +// | compound_statement // ANSI style +// ) + ; + +declaration +scope { + isTypedef; +} +@init { + $declaration::isTypedef = false; +} + : 'typedef' declaration_specifiers? {$declaration::isTypedef = true;} + init_declarator_list ';' // special case, looking for typedef + | declaration_specifiers init_declarator_list? ';' + ; + +declaration_specifiers + : ( storage_class_specifier + | type_specifier + | type_qualifier + )+ + ; + +init_declarator_list + : init_declarator (',' init_declarator)* + ; + +init_declarator + : declarator //('=' initializer)? + ; + +storage_class_specifier + : 'extern' + | 'static' + | 'auto' + | 'register' + ; + +type_specifier + : 'void' + | 'char' + | 'short' + | 'int' + | 'long' + | 'float' + | 'double' + | 'signed' + | 'unsigned' +// | struct_or_union_specifier +// | enum_specifier + | type_id + ; + +type_id + : {this.isTypeName(this.input.LT(1).getText())}? IDENTIFIER +// {System.out.println($IDENTIFIER.text+" is a type");} + ; + +// struct_or_union_specifier +// options {k=3;} +// scope Symbols; // structs are scopes +// @init { +// $Symbols::types = set() +// } +// : struct_or_union IDENTIFIER? '{' struct_declaration_list '}' +// | struct_or_union IDENTIFIER +// ; + +// struct_or_union +// : 'struct' +// | 'union' +// ; + +// struct_declaration_list +// : struct_declaration+ +// ; + +// struct_declaration +// : specifier_qualifier_list struct_declarator_list ';' +// ; + +// specifier_qualifier_list +// : ( type_qualifier | type_specifier )+ +// ; + +// struct_declarator_list +// : struct_declarator (',' struct_declarator)* +// ; + +// struct_declarator +// : declarator (':' constant_expression)? +// | ':' constant_expression +// ; + +// enum_specifier +// options {k=3;} +// : 'enum' '{' enumerator_list '}' +// | 'enum' IDENTIFIER '{' enumerator_list '}' +// | 'enum' IDENTIFIER +// ; + +// enumerator_list +// : enumerator (',' enumerator)* +// ; + +// enumerator +// : IDENTIFIER ('=' constant_expression)? +// ; + +type_qualifier + : 'const' + | 'volatile' + ; + +declarator + : pointer? direct_declarator + | pointer + ; + +direct_declarator + : ( IDENTIFIER + { + if ($declaration.length >0 && $declaration::isTypedef) { + $Symbols::types[$IDENTIFIER.text] = true; + alert ("define type "+$IDENTIFIER.text); + } + } + | '(' declarator ')' + ) + declarator_suffix* + ; + +declarator_suffix + : /*'[' constant_expression ']' + |*/ '[' ']' +// | '(' parameter_type_list ')' +// | '(' identifier_list ')' + | '(' ')' + ; + +pointer + : '*' type_qualifier+ pointer? + | '*' pointer + | '*' + ; + +// parameter_type_list +// : parameter_list (',' '...')? +// ; + +// parameter_list +// : parameter_declaration (',' parameter_declaration)* +// ; + +// parameter_declaration +// : declaration_specifiers (declarator|abstract_declarator)* +// ; + +// identifier_list +// : IDENTIFIER (',' IDENTIFIER)* +// ; + +// type_name +// : specifier_qualifier_list abstract_declarator? +// ; + +// abstract_declarator +// : pointer direct_abstract_declarator? +// | direct_abstract_declarator +// ; + +// direct_abstract_declarator +// : ( '(' abstract_declarator ')' | abstract_declarator_suffix ) abstract_declarator_suffix* +// ; + +// abstract_declarator_suffix +// : '[' ']' +// | '[' constant_expression ']' +// | '(' ')' +// | '(' parameter_type_list ')' +// ; + +// initializer +// : assignment_expression +// | '{' initializer_list ','? '}' +// ; + +// initializer_list +// : initializer (',' initializer)* +// ; + +// // E x p r e s s i o n s + +// argument_expression_list +// : assignment_expression (',' assignment_expression)* +// ; + +// additive_expression +// : (multiplicative_expression) ('+' multiplicative_expression | '-' multiplicative_expression)* +// ; + +// multiplicative_expression +// : (cast_expression) ('*' cast_expression | '/' cast_expression | '%' cast_expression)* +// ; + +// cast_expression +// : '(' type_name ')' cast_expression +// | unary_expression +// ; + +// unary_expression +// : postfix_expression +// | '++' unary_expression +// | '--' unary_expression +// | unary_operator cast_expression +// | 'sizeof' unary_expression +// | 'sizeof' '(' type_name ')' +// ; + +// postfix_expression +// : primary_expression +// ( '[' expression ']' +// | '(' ')' +// | '(' argument_expression_list ')' +// | '.' IDENTIFIER +// | '*' IDENTIFIER +// | '->' IDENTIFIER +// | '++' +// | '--' +// )* +// ; + +// unary_operator +// : '&' +// | '*' +// | '+' +// | '-' +// | '~' +// | '!' +// ; + +// primary_expression +// : IDENTIFIER +// | constant +// | '(' expression ')' +// ; + +// constant +// : HEX_LITERAL +// | OCTAL_LITERAL +// | DECIMAL_LITERAL +// | CHARACTER_LITERAL +// | STRING_LITERAL +// | FLOATING_POINT_LITERAL +// ; + +// ///// + +// expression +// : assignment_expression (',' assignment_expression)* +// ; + +// constant_expression +// : conditional_expression +// ; + +// assignment_expression +// : lvalue assignment_operator assignment_expression +// | conditional_expression +// ; + +// lvalue +// : unary_expression +// ; + +// assignment_operator +// : '=' +// | '*=' +// | '/=' +// | '%=' +// | '+=' +// | '-=' +// | '<<=' +// | '>>=' +// | '&=' +// | '^=' +// | '|=' +// ; + +// conditional_expression +// : logical_or_expression ('?' expression ':' conditional_expression)? +// ; + +// logical_or_expression +// : logical_and_expression ('||' logical_and_expression)* +// ; + +// logical_and_expression +// : inclusive_or_expression ('&&' inclusive_or_expression)* +// ; + +// inclusive_or_expression +// : exclusive_or_expression ('|' exclusive_or_expression)* +// ; + +// exclusive_or_expression +// : and_expression ('^' and_expression)* +// ; + +// and_expression +// : equality_expression ('&' equality_expression)* +// ; +// equality_expression +// : relational_expression (('=='|'!=') relational_expression)* +// ; + +// relational_expression +// : shift_expression (('<'|'>'|'<='|'>=') shift_expression)* +// ; + +// shift_expression +// : additive_expression (('<<'|'>>') additive_expression)* +// ; + +// // S t a t e m e n t s + +// statement +// : labeled_statement +// | compound_statement +// | expression_statement +// | selection_statement +// | iteration_statement +// | jump_statement +// ; + +// labeled_statement +// : IDENTIFIER ':' statement +// | 'case' constant_expression ':' statement +// | 'default' ':' statement +// ; + +// compound_statement +// scope Symbols; // blocks have a scope of symbols +// @init { +// $Symbols::types = {} +// } +// : '{' declaration* statement_list? '}' +// ; + +// statement_list +// : statement+ +// ; + +// expression_statement +// : ';' +// | expression ';' +// ; + +// selection_statement +// : 'if' '(' expression ')' statement (options {k=1; backtrack=false;}:'else' statement)? +// | 'switch' '(' expression ')' statement +// ; + +// iteration_statement +// : 'while' '(' expression ')' statement +// | 'do' statement 'while' '(' expression ')' ';' +// | 'for' '(' expression_statement expression_statement expression? ')' statement +// ; + +// jump_statement +// : 'goto' IDENTIFIER ';' +// | 'continue' ';' +// | 'break' ';' +// | 'return' ';' +// | 'return' expression ';' +// ; + +IDENTIFIER + : LETTER (LETTER|'0'..'9')* + ; + +fragment +LETTER + : '$' + | 'A'..'Z' + | 'a'..'z' + | '_' + ; + +CHARACTER_LITERAL + : '\'' ( EscapeSequence | ~('\''|'\\') ) '\'' + ; + +STRING_LITERAL + : '"' ( EscapeSequence | ~('\\'|'"') )* '"' + ; + +HEX_LITERAL : '0' ('x'|'X') HexDigit+ IntegerTypeSuffix? ; + +DECIMAL_LITERAL : ('0' | '1'..'9' '0'..'9'*) IntegerTypeSuffix? ; + +OCTAL_LITERAL : '0' ('0'..'7')+ IntegerTypeSuffix? ; + +fragment +HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ; + +fragment +IntegerTypeSuffix + : ('u'|'U')? ('l'|'L') + | ('u'|'U') ('l'|'L')? + ; + +FLOATING_POINT_LITERAL + : ('0'..'9')+ '.' ('0'..'9')* Exponent? FloatTypeSuffix? + | '.' ('0'..'9')+ Exponent? FloatTypeSuffix? + | ('0'..'9')+ Exponent FloatTypeSuffix? + | ('0'..'9')+ Exponent? FloatTypeSuffix + ; + +fragment +Exponent : ('e'|'E') ('+'|'-')? ('0'..'9')+ ; + +fragment +FloatTypeSuffix : ('f'|'F'|'d'|'D') ; + +fragment +EscapeSequence + : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\') + | OctalEscape + ; + +fragment +OctalEscape + : '\\' ('0'..'3') ('0'..'7') ('0'..'7') + | '\\' ('0'..'7') ('0'..'7') + | '\\' ('0'..'7') + ; + +fragment +UnicodeEscape + : '\\' 'u' HexDigit HexDigit HexDigit HexDigit + ; + +WS : (' '|'\r'|'\t'|'\u000C'|'\n') {$channel=org.antlr.runtime.Token.HIDDEN_CHANNEL;} + ; + +COMMENT + : '/*' ( options {greedy=false;} : . )* '*/' {$channel=org.antlr.runtime.Token.HIDDEN_CHANNEL;} + ; + +LINE_COMMENT + : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=org.antlr.runtime.Token.HIDDEN_CHANNEL;} + ; + +// ignore #line info for now +LINE_COMMAND + : '#' ~('\n'|'\r')* '\r'? '\n' {$channel=org.antlr.runtime.Token.HIDDEN_CHANNEL;} + ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t033backtracking.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t033backtracking.html new file mode 100755 index 0000000..a42b6f6 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t033backtracking.html @@ -0,0 +1,45 @@ + + + + +t033backtracking + + + + + + + + + + + + + + + +

t033backtracking

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t034tokenLabelPropertyRef.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t034tokenLabelPropertyRef.g new file mode 100755 index 0000000..bb524b2 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t034tokenLabelPropertyRef.g @@ -0,0 +1,33 @@ +grammar t034tokenLabelPropertyRef; +options { + language = JavaScript; +} + +@header { +var xlog = []; +} + +a: t=A + { + xlog.push($t.text); + xlog.push($t.type); + xlog.push($t.line); + xlog.push($t.pos); + xlog.push($t.channel); + xlog.push($t.index); + } + ; + +A: 'a'..'z'; + +WS : + ( ' ' + | '\t' + | ( '\n' + | '\r\n' + | '\r' + ) + )+ + { $channel = org.antlr.runtime.Token.HIDDEN_CHANNEL; } + ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t034tokenLabelPropertyRef.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t034tokenLabelPropertyRef.html new file mode 100755 index 0000000..e584e1c --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t034tokenLabelPropertyRef.html @@ -0,0 +1,54 @@ + + + + +t034tokenLabelPropertyRef + + + + + + + + + + + + + + + +

t034tokenLabelPropertyRef

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t035ruleLabelPropertyRef.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t035ruleLabelPropertyRef.g new file mode 100755 index 0000000..989735b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t035ruleLabelPropertyRef.g @@ -0,0 +1,16 @@ +grammar t035ruleLabelPropertyRef; +options { + language = JavaScript; +} + +a returns [bla]: t=b + { + $bla = [$t.start, $t.stop, $t.text]; + } + ; + +b: A+; + +A: 'a'..'z'; + +WS: ' '+ { $channel = HIDDEN; }; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t035ruleLabelPropertyRef.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t035ruleLabelPropertyRef.html new file mode 100755 index 0000000..1b9b699 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t035ruleLabelPropertyRef.html @@ -0,0 +1,60 @@ + + + + +t035ruleLabelPropertyRef + + + + + + + + + + + + + + + +

t035ruleLabelPropertyRef

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t036multipleReturnValues.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t036multipleReturnValues.g new file mode 100755 index 0000000..d3745f3 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t036multipleReturnValues.g @@ -0,0 +1,25 @@ +grammar t036multipleReturnValues; +options { + language = JavaScript; +} + +a returns [foo, bar]: A + { + $foo = "foo"; + $bar = "bar"; + } + ; + +A: 'a'..'z'; + +WS : + ( ' ' + | '\t' + | ( '\n' + | '\r\n' + | '\r' + ) + )+ + { $channel = HIDDEN } + ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t036multipleReturnValues.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t036multipleReturnValues.html new file mode 100755 index 0000000..b2b394c --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t036multipleReturnValues.html @@ -0,0 +1,56 @@ + + + + +t036multipleReturnValues + + + + + + + + + + + + + + + +

t036multipleReturnValues

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t037rulePropertyRef.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t037rulePropertyRef.g new file mode 100755 index 0000000..f196bb8 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t037rulePropertyRef.g @@ -0,0 +1,15 @@ +grammar t037rulePropertyRef; +options { + language = JavaScript; +} + +a returns [bla] +@after { + $bla = [$start, $stop, $text]; +} + : A+ + ; + +A: 'a'..'z'; + +WS: ' '+ { $channel = HIDDEN }; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t037rulePropertyRef.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t037rulePropertyRef.html new file mode 100755 index 0000000..10d8f90 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t037rulePropertyRef.html @@ -0,0 +1,57 @@ + + + + +t037rulePropertyRef + + + + + + + + + + + + + + + +

t037rulePropertyRef

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t038lexerRuleLabel.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t038lexerRuleLabel.g new file mode 100755 index 0000000..cdfd000 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t038lexerRuleLabel.g @@ -0,0 +1,28 @@ +lexer grammar t038lexerRuleLabel; +options { + language = JavaScript; +} + +A: 'a'..'z' WS '0'..'9' + { + /*print $WS + print $WS.type + print $WS.line + print $WS.pos + print $WS.channel + print $WS.index + print $WS.text*/ + } + ; + +fragment WS : + ( ' ' + | '\t' + | ( '\n' + | '\r\n' + | '\r' + ) + )+ + { $channel = HIDDEN } + ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t038lexerRuleLabel.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t038lexerRuleLabel.html new file mode 100755 index 0000000..0b8299a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t038lexerRuleLabel.html @@ -0,0 +1,41 @@ + + + + +t038lexerRuleLabel + + + + + + + + + + + + + +

t038lexerRuleLabel

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t039labels.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t039labels.g new file mode 100755 index 0000000..ed60884 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t039labels.g @@ -0,0 +1,18 @@ +grammar t039labels; +options { + language = JavaScript; +} + +a returns [l] + : ids+=A ( ',' ids+=(A|B) )* C D w=. ids+=. F EOF + { l = [$ids, $w]; } + ; + +A: 'a'..'z'; +B: '0'..'9'; +C: a='A'; +D: a='FOOBAR'; +E: 'GNU' a=.; +F: 'BLARZ' a=EOF; + +WS: ' '+ { $channel = HIDDEN }; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t039labels.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t039labels.html new file mode 100755 index 0000000..771f6dc --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t039labels.html @@ -0,0 +1,62 @@ + + + + +t039labels + + + + + + + + + + + + + + + +

t039labels

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t040bug80.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t040bug80.g new file mode 100755 index 0000000..f43987c --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t040bug80.g @@ -0,0 +1,13 @@ +lexer grammar t040bug80; +options { + language = JavaScript; +} + +ID_LIKE + : 'defined' + | {false}? Identifier + | Identifier + ; + +fragment +Identifier: 'a'..'z'+ ; // with just 'a', output compiles diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t040bug80.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t040bug80.html new file mode 100755 index 0000000..2b96713 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t040bug80.html @@ -0,0 +1,41 @@ + + + + +t040bug80 + + + + + + + + + + + + + +

t040bug80

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t041parameters.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t041parameters.g new file mode 100755 index 0000000..7daec8a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t041parameters.g @@ -0,0 +1,16 @@ +grammar t041parameters; +options { + language = JavaScript; +} + +a[arg1, arg2] returns [l] + : A+ EOF + { + l = [$arg1, $arg2]; + $arg1 = "gnarz"; + } + ; + +A: 'a'..'z'; + +WS: ' '+ { $channel = HIDDEN; }; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t041parameters.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t041parameters.html new file mode 100755 index 0000000..04853cd --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t041parameters.html @@ -0,0 +1,54 @@ + + + + +t041parameters + + + + + + + + + + + + + + + +

t041parameters

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t042ast.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t042ast.g new file mode 100755 index 0000000..f75e3ac --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t042ast.g @@ -0,0 +1,359 @@ +grammar t042ast; +options { + language = JavaScript; + output = AST; +} + +tokens { + VARDEF; + FLOAT; + EXPR; + BLOCK; + VARIABLE; + FIELD; + CALL; + INDEX; + FIELDACCESS; +} + +@header { +org.antlr.lang.map = function(a, fn) { + var i, len, r=[]; + for (i=0, len=a.length; i + ; + +r8 + : 'var' ID ':' type -> ^('var' type ID) + ; + +r9 + : type ID ';' -> ^(VARDEF type ID) + ; + +r10 + : INT -> {new org.antlr.runtime.tree.CommonTree(new org.antlr.runtime.CommonToken(FLOAT, $INT.text + ".0"))} + ; + +r11 + : expression -> ^(EXPR expression) + | -> EXPR + ; + +r12 + : ID (',' ID)* -> ID+ + ; + +r13 + : type ID (',' ID)* ';' -> ^(type ID+) + ; + +r14 + : expression? statement* type+ + -> ^(EXPR expression? statement* type+) + ; + +r15 + : INT -> INT INT + ; + +r16 + : 'int' ID (',' ID)* -> ^('int' ID)+ + ; + +r17 + : 'for' '(' start=statement ';' expression ';' next=statement ')' statement + -> ^('for' $start expression $next statement) + ; + +r18 + : t='for' -> ^(BLOCK) + ; + +r19 + : t='for' -> ^(BLOCK[$t]) + ; + +r20 + : t='for' -> ^(BLOCK[$t,"FOR"]) + ; + +r21 + : t='for' -> BLOCK + ; + +r22 + : t='for' -> BLOCK[$t] + ; + +r23 + : t='for' -> BLOCK[$t,"FOR"] + ; + +r24 + : r=statement expression -> ^($r expression) + ; + +r25 + : r+=statement (',' r+=statement)+ expression -> ^($r expression) + ; + +r26 + : r+=statement (',' r+=statement)+ -> ^(BLOCK $r+) + ; + +r27 + : r=statement expression -> ^($r ^($r expression)) + ; + +r28 + : ('foo28a'|'foo28b') -> + ; + +r29 + : (r+=statement)* -> ^(BLOCK $r+) + ; + +r30 + : statement* -> ^(BLOCK statement?) + ; + +r31 + : modifier type ID ('=' expression)? ';' + -> {this.flag === 0}? ^(VARDEF ID modifier* type expression?) + -> {this.flag === 1}? ^(VARIABLE ID modifier* type expression?) + -> ^(FIELD ID modifier* type expression?) + ; + +r32[which] + : ID INT -> {which==1}? ID + -> {which==2}? INT + -> // yield nothing as else-clause + ; + +r33 + : modifiers! statement + ; + +r34 + : modifiers! r34a[$modifiers.tree] + //| modifiers! r33b[$modifiers.tree] + ; + +r34a[mod] + : 'class' ID ('extends' sup=type)? + ( 'implements' i+=type (',' i+=type)*)? + '{' statement* '}' + -> ^('class' ID {$mod} ^('extends' $sup)? ^('implements' $i+)? statement* ) + ; + +r35 + : '{' 'extends' (sup=type)? '}' + -> ^('extends' $sup)? + ; + +r36 + : 'if' '(' expression ')' s1=statement + ( 'else' s2=statement -> ^('if' ^(EXPR expression) $s1 $s2) + | -> ^('if' ^(EXPR expression) $s1) + ) + ; + +r37 + : (INT -> INT) ('+' i=INT -> ^('+' $r37 $i) )* + ; + +r38 + : INT ('+'^ INT)* + ; + +r39 + : (primary->primary) // set return tree to just primary + ( '(' arg=expression ')' + -> ^(CALL $r39 $arg) + | '[' ie=expression ']' + -> ^(INDEX $r39 $ie) + | '.' p=primary + -> ^(FIELDACCESS $r39 $p) + )* + ; + +r40 + : (INT -> INT) ( ('+' i+=INT)* -> ^('+' $r40 $i*) ) ';' + ; + +r41 + : (INT -> INT) ( ('+' i=INT) -> ^($i $r41) )* ';' + ; + +r42 + : ids+=ID (','! ids+=ID)* + ; + +r43 returns [res] + : ids+=ID! (','! ids+=ID!)* {$res = org.antlr.lang.map($ids, function(id) { return id.getText(); });} + ; + +r44 + : ids+=ID^ (','! ids+=ID^)* + ; + +r45 + : primary^ + ; + +r46 returns [res] + : ids+=primary! (','! ids+=primary!)* {$res = org.antlr.lang.map($ids, function(id) { return id.getText(); });} + ; + +r47 + : ids+=primary (','! ids+=primary)* + ; + +r48 + : ids+=. (','! ids+=.)* + ; + +r49 + : .^ ID + ; + +r50 + : ID + -> ^({new org.antlr.runtime.tree.CommonTree(new org.antlr.runtime.CommonToken(FLOAT, "1.0"))} ID) + ; + +/** templates tested: + tokenLabelPropertyRef_tree +*/ +r51 returns [res] + : ID t=ID ID + { $res = $t.tree; } + ; + +/** templates tested: + rulePropertyRef_tree +*/ +r52 returns [res] +@after { + $res = $tree; +} + : ID + ; + +/** templates tested: + ruleLabelPropertyRef_tree +*/ +r53 returns [res] + : t=primary + { $res = $t.tree; } + ; + +/** templates tested: + ruleSetPropertyRef_tree +*/ +r54 returns [res] +@after { + $tree = $t.tree;; +} + : ID t=expression ID + ; + +/** backtracking */ +r55 +options { backtrack=true; k=1; } + : (modifier+ INT)=> modifier+ expression + | modifier+ statement + ; + + +/** templates tested: + rewriteTokenRef with len(args)>0 +*/ +r56 + : t=ID* -> ID[$t,'foo'] + ; + +/** templates tested: + rewriteTokenRefRoot with len(args)>0 +*/ +r57 + : t=ID* -> ^(ID[$t,'foo']) + ; + +/** templates tested: + ??? +*/ +r58 + : ({new org.antlr.runtime.tree.CommonTree(new org.antlr.runtime.CommonToken(FLOAT, "2.0"))})^ + ; + +/** templates tested: + rewriteTokenListLabelRefRoot +*/ +r59 + : (t+=ID)+ statement -> ^($t statement)+ + ; + +primary + : ID + ; + +expression + : r1 + ; + +statement + : 'fooze' + | 'fooze2' + ; + +modifiers + : modifier+ + ; + +modifier + : 'public' + | 'private' + ; + +type + : 'int' + | 'bool' + ; + +ID : 'a'..'z' + ; +INT : '0'..'9' +; +WS: (' ' | '\n' | '\t')+ {$channel = HIDDEN;}; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t042ast.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t042ast.html new file mode 100755 index 0000000..62e7348 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t042ast.html @@ -0,0 +1,463 @@ + + + + +t042ast + + + + + + + + + + + + + + + +

t042ast

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t043synpred.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t043synpred.g new file mode 100755 index 0000000..6293153 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t043synpred.g @@ -0,0 +1,14 @@ +grammar t043synpred; +options { + language = JavaScript; +} + +a: ((s+ P)=> s+ b)? E; +b: P 'foo'; + +s: S; + + +S: ' '; +P: '+'; +E: '>'; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t043synpred.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t043synpred.html new file mode 100755 index 0000000..0d34bdb --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t043synpred.html @@ -0,0 +1,51 @@ + + + + +t043synpred + + + + + + + + + + + + + + + +

t043synpred

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t044trace.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t044trace.g new file mode 100755 index 0000000..e0f27c5 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t044trace.g @@ -0,0 +1,12 @@ +// @@ANTLR Tool Options@@: -trace +grammar t044trace; +options { + language = JavaScript; +} + +a: '<' ((INT '+')=>b|c) '>'; +b: c ('+' c)*; +c: INT; + +INT: ('0'..'9')+; +WS: (' ' | '\n' | '\t')+ {$channel = HIDDEN;}; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t044trace.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t044trace.html new file mode 100755 index 0000000..e0b99cf --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t044trace.html @@ -0,0 +1,76 @@ + + + + +t044trace + + + + + + + + + + + + + + +

t044trace

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t045dfabug.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t045dfabug.g new file mode 100755 index 0000000..722c572 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t045dfabug.g @@ -0,0 +1,31 @@ +grammar t045dfabug; +options { + language = JavaScript; + output = AST; +} + + +r +options { backtrack=true; } + : (modifier+ INT)=> modifier+ expression + | modifier+ statement + ; + +expression + : INT '+' INT + ; + +statement + : 'fooze' + | 'fooze2' + ; + +modifier + : 'public' + | 'private' + ; + +ID : 'a'..'z' + ; +INT : '0'..'9' +; +WS: (' ' | '\n' | '\t')+ {$channel = HIDDEN;}; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t045dfabug.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t045dfabug.html new file mode 100755 index 0000000..5f9df18 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t045dfabug.html @@ -0,0 +1,52 @@ + + + + +t045dfabug + + + + + + + + + + + + + + + +

t045dfabug

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t046rewrite.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t046rewrite.g new file mode 100755 index 0000000..71aab82 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t046rewrite.g @@ -0,0 +1,56 @@ +grammar t046rewrite; +options { + language=JavaScript; +} + +program +@init { + var start = this.input.LT(1); +} + : method+ + { + this.input.insertBefore(start,"public class Wrapper {\n") + this.input.insertAfter($method.stop, "\n}\n") + } + ; + +method + : m='method' ID '(' ')' body + {this.input.replace($m, "public void");} + ; + +body +scope { + decls +} +@init { + $body::decls = {}; +} + : lcurly='{' stat* '}' + { + var it; + for (it in $body::decls) { + this.input.insertAfter($lcurly, "\nint "+it+";") + } + } + ; + +stat: ID '=' expr ';' {$body::decls[$ID.text] = true;} + ; + +expr: mul ('+' mul)* + ; + +mul : atom ('*' atom)* + ; + +atom: ID + | INT + ; + +ID : ('a'..'z'|'A'..'Z')+ ; + +INT : ('0'..'9')+ ; + +WS : (' '|'\t'|'\n')+ {$channel=HIDDEN;} + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t046rewrite.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t046rewrite.html new file mode 100755 index 0000000..7ed7d86 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t046rewrite.html @@ -0,0 +1,82 @@ + + + + +t046rewrite + + + + + + + + + + + + + + + +

t046rewrite

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t047treeparser.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t047treeparser.g new file mode 100755 index 0000000..3744fe0 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t047treeparser.g @@ -0,0 +1,113 @@ +grammar t047treeparser; +options { + language=JavaScript; + output=AST; +} + +tokens { + VAR_DEF; + ARG_DEF; + FUNC_HDR; + FUNC_DECL; + FUNC_DEF; + BLOCK; +} + +program + : declaration+ + ; + +declaration + : variable + | functionHeader ';' -> ^(FUNC_DECL functionHeader) + | functionHeader block -> ^(FUNC_DEF functionHeader block) + ; + +variable + : type declarator ';' -> ^(VAR_DEF type declarator) + ; + +declarator + : ID + ; + +functionHeader + : type ID '(' ( formalParameter ( ',' formalParameter )* )? ')' + -> ^(FUNC_HDR type ID formalParameter+) + ; + +formalParameter + : type declarator -> ^(ARG_DEF type declarator) + ; + +type + : 'int' + | 'char' + | 'void' + | ID + ; + +block + : lc='{' + variable* + stat* + '}' + -> ^(BLOCK[$lc,"BLOCK"] variable* stat*) + ; + +stat: forStat + | expr ';'! + | block + | assignStat ';'! + | ';'! + ; + +forStat + : 'for' '(' start=assignStat ';' expr ';' next=assignStat ')' block + -> ^('for' $start expr $next block) + ; + +assignStat + : ID EQ expr -> ^(EQ ID expr) + ; + +expr: condExpr + ; + +condExpr + : aexpr ( ('=='^ | '<'^) aexpr )? + ; + +aexpr + : atom ( '+'^ atom )* + ; + +atom + : ID + | INT + | '(' expr ')' -> expr + ; + +FOR : 'for' ; +INT_TYPE : 'int' ; +CHAR: 'char'; +VOID: 'void'; + +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + ; + +INT : ('0'..'9')+ + ; + +EQ : '=' ; +EQEQ : '==' ; +LT : '<' ; +PLUS : '+' ; + +WS : ( ' ' + | '\t' + | '\r' + | '\n' + )+ + { $channel=HIDDEN; } + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t047treeparser.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t047treeparser.html new file mode 100755 index 0000000..e3356f2 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t047treeparser.html @@ -0,0 +1,129 @@ + + + + +t047treeparser + + + + + + + + + + + + + + + +

t047treeparser

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t047treeparserWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t047treeparserWalker.g new file mode 100755 index 0000000..39ab858 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t047treeparserWalker.g @@ -0,0 +1,68 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t047treeparserWalker; +options { + language=JavaScript; + tokenVocab=t047treeparser; + ASTLabelType=CommonTree; +} + +program + : declaration+ + ; + +declaration + : variable + | ^(FUNC_DECL functionHeader) + | ^(FUNC_DEF functionHeader block) + ; + +variable returns [res] + : ^(VAR_DEF type declarator) + { + $res = $declarator.text; + } + ; + +declarator + : ID + ; + +functionHeader + : ^(FUNC_HDR type ID formalParameter+) + ; + +formalParameter + : ^(ARG_DEF type declarator) + ; + +type + : 'int' + | 'char' + | 'void' + | ID + ; + +block + : ^(BLOCK variable* stat*) + ; + +stat: forStat + | expr + | block + ; + +forStat + : ^('for' expr expr expr block) + ; + +expr: ^(EQEQ expr expr) + | ^(LT expr expr) + | ^(PLUS expr expr) + | ^(EQ ID expr) + | atom + ; + +atom + : ID + | INT + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t048rewrite.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t048rewrite.g new file mode 100755 index 0000000..a2a1f8f --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t048rewrite.g @@ -0,0 +1,9 @@ +lexer grammar t048rewrite; +options { + language=JavaScript; +} + +A: 'a'; +B: 'b'; +C: 'c'; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t048rewrite.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t048rewrite.html new file mode 100755 index 0000000..6400ed1 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t048rewrite.html @@ -0,0 +1,285 @@ + + + + +t048rewrite + + + + + + + + + + + + + +

t048rewrite

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparser.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparser.html new file mode 100755 index 0000000..0895247 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparser.html @@ -0,0 +1,182 @@ + + + + +t049treeparser + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

t049treeparser

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsera.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsera.g new file mode 100755 index 0000000..fb754ad --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsera.g @@ -0,0 +1,9 @@ +grammar t049treeparsera; +options { + language=JavaScript; + output=AST; +} +a : ID INT; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparseraWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparseraWalker.g new file mode 100755 index 0000000..61487e8 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparseraWalker.g @@ -0,0 +1,9 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t049treeparseraWalker; +options { + language=JavaScript; + ASTLabelType=CommonTree; +} +a : ID INT + {this.capture($ID+", "+$INT);} + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserb.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserb.g new file mode 100755 index 0000000..d4af036 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserb.g @@ -0,0 +1,9 @@ +grammar t049treeparserb; +options { + language=JavaScript; + output=AST; +} +a : ID INT -> ^(ID INT); +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserbWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserbWalker.g new file mode 100755 index 0000000..ac7674b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserbWalker.g @@ -0,0 +1,9 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t049treeparserbWalker; +options { + language=JavaScript; + ASTLabelType=CommonTree; +} +a : ^(ID INT) + {this.capture($ID+", "+$INT)} + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserc.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserc.g new file mode 100755 index 0000000..4fee74b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserc.g @@ -0,0 +1,11 @@ +grammar t049treeparserc; +options { + language=JavaScript; + output=AST; +} +a : b c ; +b : ID INT -> ^(ID INT); +c : ID INT; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsercWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsercWalker.g new file mode 100755 index 0000000..0c1a718 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsercWalker.g @@ -0,0 +1,9 @@ +tree grammar t049treeparsercWalker; +options { + language=JavaScript; + ASTLabelType=CommonTree; +} +a : b b ; +b : ID INT {this.capture($ID+" "+$INT+"\n");} + | ^(ID INT) {this.capture("^("+$ID+" "+$INT+")");} + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserd.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserd.g new file mode 100755 index 0000000..6978350 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserd.g @@ -0,0 +1,11 @@ +grammar t049treeparserd; +options { + language=JavaScript; + output=AST; +} +a : b c ; +b : ID INT+ -> ^(ID INT+); +c : ID INT+; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserdWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserdWalker.g new file mode 100755 index 0000000..ba64918 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserdWalker.g @@ -0,0 +1,9 @@ +tree grammar t049treeparserdWalker; +options { + language=JavaScript; + ASTLabelType=CommonTree; +} +a : b b ; +b : ID INT+ {this.capture($ID+" "+$INT+"\n");} + | ^(x=ID (y=INT)+) {this.capture("^("+$x+' '+$y+")");} + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsere.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsere.g new file mode 100755 index 0000000..7ec071a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsere.g @@ -0,0 +1,11 @@ +grammar t049treeparsere; +options { + language=JavaScript; + output=AST; +} +a : ID INT+ PERIOD; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +SEMI : ';' ; +PERIOD : '.' ; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsereWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsereWalker.g new file mode 100755 index 0000000..0e214e5 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsereWalker.g @@ -0,0 +1,9 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t049treeparsereWalker; +options { + language=JavaScript; + ASTLabelType=CommonTree; +} +a : ID INT+ PERIOD {this.capture("alt 1");} + | ID INT+ SEMI {this.capture("alt 2");} + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserf.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserf.g new file mode 100755 index 0000000..faaddf1 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserf.g @@ -0,0 +1,9 @@ +grammar t049treeparserf; +options { + language=JavaScript; + output=AST; +} +a : ID INT? -> ^(ID INT?); +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserfWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserfWalker.g new file mode 100755 index 0000000..d07aebe --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserfWalker.g @@ -0,0 +1,9 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t049treeparserfWalker; +options { + language=JavaScript; + ASTLabelType=CommonTree; +} +a : ^(ID INT?) + {this.capture($ID);} + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserg.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserg.g new file mode 100755 index 0000000..e1f412f --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserg.g @@ -0,0 +1,10 @@ +grammar t049treeparserg; +options { + language=JavaScript; + output=AST; +} +a : ID INT? SEMI -> ^(ID INT?) SEMI ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +SEMI : ';' ; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsergWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsergWalker.g new file mode 100755 index 0000000..0fc4dae --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparsergWalker.g @@ -0,0 +1,9 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t049treeparsergWalker; +options { + language=JavaScript; + ASTLabelType=CommonTree; +} +a : ^(ID INT?) SEMI + {this.capture($ID);} + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserh.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserh.g new file mode 100755 index 0000000..43753d2 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserh.g @@ -0,0 +1,10 @@ +grammar t049treeparserh; +options { + language=JavaScript; + output=AST; +} +a : x=ID INT? (y=ID)? SEMI -> ^($x INT? $y?) SEMI ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +SEMI : ';' ; +WS : (' '|'\\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserhWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserhWalker.g new file mode 100755 index 0000000..56132ae --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparserhWalker.g @@ -0,0 +1,10 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t049treeparserhWalker; +options { + language=JavaScript; + ASTLabelType=CommonTree; +} +a : ^(ID INT? b) SEMI + {this.capture($ID+", "+$b.text);} + ; +b : ID? ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparseri.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparseri.g new file mode 100755 index 0000000..ee3367f --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparseri.g @@ -0,0 +1,10 @@ +grammar t049treeparseri; +options { + language=JavaScript; + output=AST; +} +a : x=ID INT? SEMI -> ^($x INT?) ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +SEMI : ';' ; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparseriWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparseriWalker.g new file mode 100755 index 0000000..1155e9c --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t049treeparseriWalker.g @@ -0,0 +1,8 @@ +tree grammar t049treeparseriWalker; +options { + language=JavaScript; + ASTLabelType=CommonTree; +} +a @init {var x=0;} : ^(ID {x=1;} {x=2;} INT?) + {this.capture($ID+", "+x);} + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteAST.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteAST.html new file mode 100755 index 0000000..f3d1044 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteAST.html @@ -0,0 +1,454 @@ + + + + +t051treeRewriteAST + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

t051treeRewriteAST

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTa.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTa.g new file mode 100755 index 0000000..470c77f --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTa.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTa; +options { + language=JavaScript; + output=AST; +} +a : ID INT; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTaWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTaWalker.g new file mode 100755 index 0000000..398655c --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTaWalker.g @@ -0,0 +1,10 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTaWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTa; +} + +a : ID INT -> INT ID; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTaa.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTaa.g new file mode 100755 index 0000000..16e5b5d --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTaa.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTaa; +options { + language=JavaScript; + output=AST; +} +a : 'boo' ID INT -> ^('boo' ^(ID INT)) ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTaaWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTaaWalker.g new file mode 100755 index 0000000..1045e5d --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTaaWalker.g @@ -0,0 +1,14 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTaaWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTaa; + rewrite=true; +} +tokens { X; } +s : ^(a b) ; // s.tree is a.tree +a : 'boo' ; +b : ^(ID INT) -> INT + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTab.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTab.g new file mode 100755 index 0000000..1a1d008 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTab.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTab; +options { + language=JavaScript; + output=AST; +} +a : ID INT -> ^(ID["root"] ^(ID INT)) | INT -> ^(ID["root"] INT) ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTabWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTabWalker.g new file mode 100755 index 0000000..bab9534 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTabWalker.g @@ -0,0 +1,13 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTabWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTab; + rewrite=true; +} +s : ^(ID a) { this.buf += $s.start.toStringTree() }; +a : ^(ID INT) -> {true}? ^(ID["ick"] INT) + -> INT + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTac.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTac.g new file mode 100755 index 0000000..944f0b7 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTac.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTac; +options { + language=JavaScript; + output=AST; +} +a : ID INT -> ^(ID["root"] INT); +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTacWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTacWalker.g new file mode 100755 index 0000000..d1c7a0c --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTacWalker.g @@ -0,0 +1,10 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTacWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTac; +} +s : ^(ID c=.) -> $c + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTb.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTb.g new file mode 100755 index 0000000..d48f600 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTb.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTb; +options { + language=JavaScript; + output=AST; +} +a : ID INT -> ^(ID INT); +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTbWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTbWalker.g new file mode 100755 index 0000000..30925cf --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTbWalker.g @@ -0,0 +1,9 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTbWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTb; +} +a : ^(ID INT) -> ^(INT ID); diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTc.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTc.g new file mode 100755 index 0000000..109e785 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTc.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTc; +options { + language=JavaScript; + output=AST; +} +a : ID INT -> ^(ID INT) | INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTcWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTcWalker.g new file mode 100755 index 0000000..076e6d7 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTcWalker.g @@ -0,0 +1,8 @@ +tree grammar t051treeRewriteASTcWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t049treeparserc; +} +a : ^(ID INT) -> ^(INT ID) | INT; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTd.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTd.g new file mode 100755 index 0000000..2b9cea6 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTd.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTd; +options { + language=JavaScript; + output=AST; +} +a : ID ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTdWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTdWalker.g new file mode 100755 index 0000000..af54dd8 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTdWalker.g @@ -0,0 +1,10 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTdWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTd; +} + +a : ID -> ^(ID ID); diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTe.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTe.g new file mode 100755 index 0000000..7dbfba8 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTe.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTe; +options { + language=JavaScript; + output=AST; +} +a : ID+ INT+ -> (^(ID INT))+ ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTeWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTeWalker.g new file mode 100755 index 0000000..5aed52b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTeWalker.g @@ -0,0 +1,9 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTeWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTe; +} +a : (^(ID INT))+ -> INT+ ID+; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTf.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTf.g new file mode 100755 index 0000000..264f4e8 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTf.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTf; +options { + language=JavaScript; + output=AST; +} +a : ID ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTfWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTfWalker.g new file mode 100755 index 0000000..d710fb6 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTfWalker.g @@ -0,0 +1,9 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTfWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTf; +} +a: ID; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTg.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTg.g new file mode 100755 index 0000000..159f5f3 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTg.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTg; +options { + language=JavaScript; + output=AST; +} +a : ID INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTgWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTgWalker.g new file mode 100755 index 0000000..513d3e6 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTgWalker.g @@ -0,0 +1,11 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTgWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTg; +} +a : b c ; +b : ID ; +c : INT ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTh.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTh.g new file mode 100755 index 0000000..3935c2e --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTh.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTh; +options { + language=JavaScript; + output=AST; +} +a : ID ID INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASThWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASThWalker.g new file mode 100755 index 0000000..0bb14a6 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASThWalker.g @@ -0,0 +1,9 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASThWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTh; +} +a : ID ID INT ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTi.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTi.g new file mode 100755 index 0000000..29dd8f3 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTi.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTi; +options { + language=JavaScript; + output=AST; +} +a : ID INT -> ^(ID INT); +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTiWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTiWalker.g new file mode 100755 index 0000000..eed078f --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTiWalker.g @@ -0,0 +1,10 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTiWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTi; +} +a : ^(ID INT) + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTj.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTj.g new file mode 100755 index 0000000..85827b7 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTj.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTj; +options { + language=JavaScript; + output=AST; +} +a : ID INT -> ^(ID INT); +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTjWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTjWalker.g new file mode 100755 index 0000000..83c7477 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTjWalker.g @@ -0,0 +1,10 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTjWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTj; +} +a : ^(x=ID y=INT) + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTk.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTk.g new file mode 100755 index 0000000..694b03b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTk.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTk; +options { + language=JavaScript; + output=AST; +} +a : ID INT -> ^(ID INT); +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTkWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTkWalker.g new file mode 100755 index 0000000..f8647d0 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTkWalker.g @@ -0,0 +1,10 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTkWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTk; +} +a : ^(x=ID y=INT) + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTl.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTl.g new file mode 100755 index 0000000..8135e43 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTl.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTl; +options { + language=JavaScript; + output=AST; +} +a : ID INT -> ^(ID INT); +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTlWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTlWalker.g new file mode 100755 index 0000000..ad89911 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTlWalker.g @@ -0,0 +1,10 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTlWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTl; +} +a : ^(b INT) ; +b : ID ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTm.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTm.g new file mode 100755 index 0000000..f65fa89 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTm.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTm; +options { + language=JavaScript; + output=AST; +} +a : ID INT -> ^(ID INT); +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTmWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTmWalker.g new file mode 100755 index 0000000..7a95712 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTmWalker.g @@ -0,0 +1,10 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTmWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTm; +} +a : ^(x=b INT) ; +b : ID ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTn.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTn.g new file mode 100755 index 0000000..0c36449 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTn.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTn; +options { + language=JavaScript; + output=AST; +} +a : ID INT -> ^(ID INT); +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTnWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTnWalker.g new file mode 100755 index 0000000..e171829 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTnWalker.g @@ -0,0 +1,11 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTnWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTn; +} +a : ^(x+=b y+=c) ; +b : ID ; +c : INT ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTo.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTo.g new file mode 100755 index 0000000..6d0a58f --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTo.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTo; +options { + language=JavaScript; + output=AST; +} +a : x=ID y=ID INT -> ^($x ^($y INT)); +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASToWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASToWalker.g new file mode 100755 index 0000000..e723331 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASToWalker.g @@ -0,0 +1,10 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASToWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTo; +} +a : ^(ID ^(ID INT)) + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTp.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTp.g new file mode 100755 index 0000000..bbfaa6d --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTp.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTp; +options { + language=JavaScript; + output=AST; +} +a : ID ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTpWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTpWalker.g new file mode 100755 index 0000000..3beabc5 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTpWalker.g @@ -0,0 +1,10 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTpWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTp; +} +a : ID -> + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTq.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTq.g new file mode 100755 index 0000000..3188ddc --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTq.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTq; +options { + language=JavaScript; + output=AST; +} +a : ID INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTqWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTqWalker.g new file mode 100755 index 0000000..22429ad --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTqWalker.g @@ -0,0 +1,10 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTqWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTq; +} +a : b INT; +b : ID | INT; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTr.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTr.g new file mode 100755 index 0000000..b425fd9 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTr.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTr; +options { + language=JavaScript; + output=AST; +} +a : x=ID INT -> ^($x INT); +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTrWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTrWalker.g new file mode 100755 index 0000000..6ea9e51 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTrWalker.g @@ -0,0 +1,9 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTrWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTr; +} +a : ^(ID (ID | INT) ) ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTs.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTs.g new file mode 100755 index 0000000..b83d17d --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTs.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTs; +options { + language=JavaScript; + output=AST; +} +a : x=ID INT -> ^($x INT); +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTsWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTsWalker.g new file mode 100755 index 0000000..15b8622 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTsWalker.g @@ -0,0 +1,9 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTsWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTs; +} +a : ^((ID | INT) INT) ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTt.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTt.g new file mode 100755 index 0000000..5cc4662 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTt.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTt; +options { + language=JavaScript; + output=AST; +} +a : ID INT -> ^(ID INT) | INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTtWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTtWalker.g new file mode 100755 index 0000000..7fa9538 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTtWalker.g @@ -0,0 +1,12 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTtWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTt; + rewrite=true; +} +a : ^(ID INT) -> ^(ID["ick"] INT) + | INT // leaves it alone, returning $a.start + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTu.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTu.g new file mode 100755 index 0000000..3b49156 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTu.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTu; +options { + language=JavaScript; + output=AST; +} +a : ID INT -> ID INT | INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTuWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTuWalker.g new file mode 100755 index 0000000..80c9c8e --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTuWalker.g @@ -0,0 +1,12 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTuWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTu; + rewrite=true; +} +s : ID a ; +a : INT -> INT["1"] + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTv.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTv.g new file mode 100755 index 0000000..523ac26 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTv.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTv; +options { + language=JavaScript; + output=AST; +} +a : ID INT -> ID INT | INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTvWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTvWalker.g new file mode 100755 index 0000000..7843b25 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTvWalker.g @@ -0,0 +1,13 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTvWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTv; + rewrite=true; +} +s : a ; +a : b ; +b : ID INT -> INT ID + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTw.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTw.g new file mode 100755 index 0000000..8319c1e --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTw.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTw; +options { + language=JavaScript; + output=AST; +} +a : ID INT -> ^(ID INT) ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTwWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTwWalker.g new file mode 100755 index 0000000..74dc5d5 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTwWalker.g @@ -0,0 +1,13 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTwWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTw; + rewrite=true; +} +s : a ; +a : b ; // a.tree must become b.tree +b : ^(ID INT) -> INT + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTx.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTx.g new file mode 100755 index 0000000..9f63dd5 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTx.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTx; +options { + language=JavaScript; + output=AST; +} +a : ID INT -> ^(ID INT) ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTxWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTxWalker.g new file mode 100755 index 0000000..b9bd4f5 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTxWalker.g @@ -0,0 +1,14 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTxWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTx; + rewrite=true; +} +tokens { X; } +s : a* b ; // only b contributes to tree, but it's after a*; s.tree = b.tree +a : X ; +b : ^(ID INT) -> INT + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTy.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTy.g new file mode 100755 index 0000000..3e9eced --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTy.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTy; +options { + language=JavaScript; + output=AST; +} +a : 'boo' ID INT -> 'boo' ^(ID INT) ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTyWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTyWalker.g new file mode 100755 index 0000000..e8a153e --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTyWalker.g @@ -0,0 +1,14 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTyWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTy; + rewrite=true; +} +tokens { X; } +s : 'boo' a* b ; // don't reset s.tree to b.tree due to 'boo' +a : X ; +b : ^(ID INT) -> INT + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTz.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTz.g new file mode 100755 index 0000000..59bfd56 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTz.g @@ -0,0 +1,9 @@ +grammar t051treeRewriteASTz; +options { + language=JavaScript; + output=AST; +} +a : 'boo' ID INT -> ^('boo' ^(ID INT)) ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTzWalker.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTzWalker.g new file mode 100755 index 0000000..cc0cd82 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t051treeRewriteASTzWalker.g @@ -0,0 +1,14 @@ +// @@ANTLR Tool Options@@: -trace +tree grammar t051treeRewriteASTzWalker; +options { + language=JavaScript; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=t051treeRewriteASTz; + rewrite=true; +} +tokens { X; } +s : ^('boo' a* b) ; // don't reset s.tree to b.tree due to 'boo' +a : X ; +b : ^(ID INT) -> INT + ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t052import.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052import.html new file mode 100755 index 0000000..d948815 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052import.html @@ -0,0 +1,175 @@ + + + + +t052import + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

t052import

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM1.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM1.g new file mode 100755 index 0000000..e170561 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM1.g @@ -0,0 +1,8 @@ +grammar t052importM1; +options { + language=JavaScript; +} +import t052importS1; +s : a ; +B : 'b' ; // defines B from inherited token space +WS : (' '|'\n') {this.skip();} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM2.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM2.g new file mode 100755 index 0000000..4a28a63 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM2.g @@ -0,0 +1,8 @@ +grammar t052importM2; +options { + language=JavaScript; +} +import t052importS2; +s : label=a[3] {this.capture($label.y);} ; +B : 'b' ; // defines B from inherited token space +WS : (' '|'\n') {this.skip();} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM3.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM3.g new file mode 100755 index 0000000..05290d3 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM3.g @@ -0,0 +1,7 @@ +grammar t052importM3; +options { + language=JavaScript; +} +import t052importS3; +s : 'b' {this.gt052importS3.foo();} ; // gS is import pointer +WS : (' '|'\n') {this.skip();} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM4.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM4.g new file mode 100755 index 0000000..2fa5da7 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM4.g @@ -0,0 +1,8 @@ +grammar t052importM4; +options { + language=JavaScript; +} +import t052importS4, t052importT4; +s : a ; +B : 'b' ; +WS : (' '|'\n') {this.skip();} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM5.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM5.g new file mode 100755 index 0000000..94c93e5 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM5.g @@ -0,0 +1,10 @@ +grammar t052importM5; +options { + language=JavaScript; +} +import t052importS5, t052importT5; +s : x y ; // matches AA, which should be "aa" +B : 'b' ; // another order: B, A, C +A : 'a' ; +C : 'c' ; +WS : (' '|'\n') {this.skip();} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM6.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM6.g new file mode 100755 index 0000000..8d3799a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM6.g @@ -0,0 +1,7 @@ +grammar t052importM6; +options { + language=JavaScript; +} +import t052importS6; +b : 'b'|'c' ; +WS : (' '|'\n') {this.skip();} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM7.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM7.g new file mode 100755 index 0000000..ffe64d0 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM7.g @@ -0,0 +1,7 @@ +lexer grammar t052importM7; +options { + language=JavaScript; +} +import t052importS7; +B : 'b' ; +WS : (' '|'\n') {this.skip();} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM8.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM8.g new file mode 100755 index 0000000..cdfa00a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importM8.g @@ -0,0 +1,7 @@ +lexer grammar t052importM8; +options { + language=JavaScript; +} +import t052importS8; +A : 'a' {this.capture("M.A ");} ; +WS : (' '|'\n') {this.skip();} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS1.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS1.g new file mode 100755 index 0000000..25df78e --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS1.g @@ -0,0 +1,11 @@ +parser grammar t052importS1; +options { + language=JavaScript; +} +@members { + this.capture = function(t) { + this.gt052importM1.capture(t); + }; +} + +a : B { this.capture("S.a") } ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS2.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS2.g new file mode 100755 index 0000000..58f9867 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS2.g @@ -0,0 +1,10 @@ +parser grammar t052importS2; +options { + language=JavaScript; +} +@members { + this.capture = function(t) { + this.gt052importM2.capture(t); + } +} +a[x] returns [y] : B {this.capture("S.a"); $y="1000";} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS3.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS3.g new file mode 100755 index 0000000..ba010d9 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS3.g @@ -0,0 +1,14 @@ +parser grammar t052importS3; +options { + language=JavaScript; +} +@members { + this.capture = function(t) { + this.gt052importM3.capture(t); + }; + this.foo = function() { + this.capture("foo"); + }; +} + +a : B ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS4.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS4.g new file mode 100755 index 0000000..b95aaa9 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS4.g @@ -0,0 +1,11 @@ +parser grammar t052importS4; +options { + language=JavaScript; +} +@members { + this.capture = function(t) { + this.gt052importM4.capture(t); + }; +} +a : b {this.capture("S.a");} ; +b : B ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS5.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS5.g new file mode 100755 index 0000000..8004bb5 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS5.g @@ -0,0 +1,11 @@ +parser grammar t052importS5; +options { + language=JavaScript; +} +tokens { A; B; C; } +@members { + this.capture = function(t) { + this.gt052importM5.capture(t); + }; +} +x : A {this.capture("S.x ");} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS6.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS6.g new file mode 100755 index 0000000..0a50f98 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS6.g @@ -0,0 +1,11 @@ +parser grammar t052importS6; +options { + language=JavaScript; +} +@members { + this.capture = function(t) { + this.gt052importM6.capture(t); + }; +} +a : b { this.capture("S.a") } ; +b : B ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS7.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS7.g new file mode 100755 index 0000000..9483bdb --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS7.g @@ -0,0 +1,11 @@ +lexer grammar t052importS7; +options { + language=JavaScript; +} +@members { + this.capture = function(t) { + this.gt052importM7.capture(t); + }; +} +A : 'a' {this.capture("S.A ");} ; +C : 'c' ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS8.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS8.g new file mode 100755 index 0000000..dc849b1 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importS8.g @@ -0,0 +1,10 @@ +lexer grammar t052importS8; +options { + language=JavaScript; +} +@members { + this.capture = function(t) { + this.gt052importM8.capture(t); + }; +} +A : 'a' {this.capture("S.A");} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importT4.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importT4.g new file mode 100755 index 0000000..5ddcc73 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importT4.g @@ -0,0 +1,10 @@ +parser grammar t052importT4; +options { + language=JavaScript; +} +@members { + this.capture = function(t) { + this.gt052importM4.capture(t); + }; +} +a : B {this.capture("T.a");} ; // hidden by S.a diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importT5.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importT5.g new file mode 100755 index 0000000..e7b1b47 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t052importT5.g @@ -0,0 +1,11 @@ +parser grammar t052importT5; +options { + language=JavaScript; +} +tokens { C; B; A; } /// reverse order +@members { + this.capture = function(t) { + this.gt052importM5.capture(t); + }; +} +y : A {this.capture("T.y");} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053hetero.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053hetero.html new file mode 100755 index 0000000..f928e94 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053hetero.html @@ -0,0 +1,339 @@ + + + + +t053hetero + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

t053hetero

+ + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT.g new file mode 100755 index 0000000..9135e34 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT.g @@ -0,0 +1,9 @@ +grammar t053heteroT; +options { + language=JavaScript; + output=AST; +} +a : ID ';' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT1.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT1.g new file mode 100755 index 0000000..dececc1 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT1.g @@ -0,0 +1,20 @@ +grammar t053heteroT1; +options { + language=JavaScript; + output=AST; +} +@header { +function V() { + V.superclass.constructor.apply(this, arguments); +}; + +org.antlr.lang.extend(V, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return this.getText() + ""; + } +}); +} +a : ID ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT10.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT10.g new file mode 100755 index 0000000..311b929 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT10.g @@ -0,0 +1,22 @@ +grammar t053heteroT10; +options { + language=JavaScript; + output=AST; +} +@header { +function V() { + V.superclass.constructor.apply(this, arguments); +}; + +org.antlr.lang.extend(V, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return this.getText() + ""; + } +}); +} +a : ID INT -> ^(ID INT) ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; + + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT11.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT11.g new file mode 100755 index 0000000..9ae4dcb --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT11.g @@ -0,0 +1,20 @@ +grammar t053heteroT11; +options { + language=JavaScript; + output=AST; +} +@header { +function V() { + V.superclass.constructor.apply(this, arguments); +}; + +org.antlr.lang.extend(V, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return this.getText() + ""; + } +}); +} +a : 'begin' -> 'begin' ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT12.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT12.g new file mode 100755 index 0000000..f0ebd1a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT12.g @@ -0,0 +1,21 @@ +grammar t053heteroT12; +options { + language=JavaScript; + output=AST; +} +@header { +function V() { + V.superclass.constructor.apply(this, arguments); +}; + +org.antlr.lang.extend(V, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return this.getText() + ""; + } +}); +} +a : 'begin' INT -> ^('begin' INT) ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT13.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT13.g new file mode 100755 index 0000000..0709ebe --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT13.g @@ -0,0 +1,9 @@ +grammar t053heteroT13; +options { + language=JavaScript; + output=AST; +} +a : ID INT; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT14.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT14.g new file mode 100755 index 0000000..1a3b336 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT14.g @@ -0,0 +1,9 @@ +grammar t053heteroT14; +options { + language=JavaScript; + output=AST; +} +a : ID INT; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT15.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT15.g new file mode 100755 index 0000000..62addff --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT15.g @@ -0,0 +1,9 @@ +grammar t053heteroT15; +options { + language=JavaScript; + output=AST; +} +a : ID ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT16.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT16.g new file mode 100755 index 0000000..af1e49d --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT16.g @@ -0,0 +1,9 @@ +grammar t053heteroT16; +options { + language=JavaScript; + output=AST; +} +a : ID ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT17.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT17.g new file mode 100755 index 0000000..322e550 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT17.g @@ -0,0 +1,9 @@ +grammar t053heteroT17; +options { + language=JavaScript; + output=AST; +} +a : ID ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT18.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT18.g new file mode 100755 index 0000000..6ba4bcd --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT18.g @@ -0,0 +1,9 @@ +grammar t053heteroT18; +options { + language=JavaScript; + output=AST; +} +a : ID ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT2.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT2.g new file mode 100755 index 0000000..246b9c9 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT2.g @@ -0,0 +1,20 @@ +grammar t053heteroT2; +options { + language=JavaScript; + output=AST; +} +@header { +function V() { + V.superclass.constructor.apply(this, arguments); +}; + +org.antlr.lang.extend(V, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return this.getText() + ""; + } +}); +} +a : x=ID ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT3.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT3.g new file mode 100755 index 0000000..261c8a7 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT3.g @@ -0,0 +1,20 @@ +grammar t053heteroT3; +options { + language=JavaScript; + output=AST; +} +@header { +function V() { + V.superclass.constructor.apply(this, arguments); +}; + +org.antlr.lang.extend(V, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return this.getText() + ""; + } +}); +} +a : x+=ID ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT4.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT4.g new file mode 100755 index 0000000..af3b921 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT4.g @@ -0,0 +1,21 @@ +grammar t053heteroT4; +options { + language=JavaScript; + output=AST; +} +@header { +function V() { + V.superclass.constructor.apply(this, arguments); +}; + +org.antlr.lang.extend(V, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return this.getText() + ""; + } +}); +} +a : ID^ ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; + + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT5.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT5.g new file mode 100755 index 0000000..f672f3b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT5.g @@ -0,0 +1,20 @@ +grammar t053heteroT5; +options { + language=JavaScript; + output=AST; +} +@header { +function V() { + V.superclass.constructor.apply(this, arguments); +}; + +org.antlr.lang.extend(V, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return this.getText() + ""; + } +}); +} +a : x+=ID^ ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT6.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT6.g new file mode 100755 index 0000000..6a4b976 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT6.g @@ -0,0 +1,20 @@ +grammar t053heteroT6; +options { + language=JavaScript; + output=AST; +} +@header { +function V() { + V.superclass.constructor.apply(this, arguments); +}; + +org.antlr.lang.extend(V, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return this.getText() + ""; + } +}); +} +a : 'begin' ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT7.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT7.g new file mode 100755 index 0000000..57a36a7 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT7.g @@ -0,0 +1,20 @@ +grammar t053heteroT7; +options { + language=JavaScript; + output=AST; +} +@header { +function V() { + V.superclass.constructor.apply(this, arguments); +}; + +org.antlr.lang.extend(V, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return this.getText() + ""; + } +}); +} +a : 'begin'^ ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT8.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT8.g new file mode 100755 index 0000000..fd06109 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT8.g @@ -0,0 +1,20 @@ +grammar t053heteroT8; +options { + language=JavaScript; + output=AST; +} +@header { +function V() { + V.superclass.constructor.apply(this, arguments); +}; + +org.antlr.lang.extend(V, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return this.getText() + ""; + } +}); +} +a : ID -> ID ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT9.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT9.g new file mode 100755 index 0000000..39ce3d4 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroT9.g @@ -0,0 +1,45 @@ +grammar t053heteroT9; +options { + language=JavaScript; + output=AST; +} +@header { +function V2() { + var x, y, z, token, ttype; + if (arguments.length===4) { + ttype = arguments[0]; + x = arguments[1]; + y = arguments[2]; + z = arguments[3]; + token = new org.antlr.runtime.CommonToken(ttype, ""); + } else if (arguments.length===3) { + ttype = arguments[0]; + token = arguments[1]; + x = arguments[2]; + y = 0; + z = 0; + } else { + throw new Error("Invalid args"); + } + + V2.superclass.constructor.call(this, token); + this.x = x; + this.y = y; + this.z = z; +}; + +org.antlr.lang.extend(V2, org.antlr.runtime.tree.CommonTree, { + toString: function() { + var txt = ""; + if (this.token) { + txt += this.getText(); + } + txt += ";"+this.x.toString()+this.y.toString()+this.z.toString(); + return txt; + } +}); +} +a : ID -> ID[42,19,30] ID[$ID,99]; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP.g new file mode 100755 index 0000000..cd02c67 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP.g @@ -0,0 +1,19 @@ +grammar t053heteroTP; +options { + language=JavaScript; + output=AST; + tokenVocab=t053heteroT; +} +tokens { ROOT; } +@header { +function VX(ttype, tree) { + VX.superclass.constructor.apply(this, arguments); +}; +org.antlr.lang.extend(VX, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return VX.superclass.toString.call(this) + ""; + } +}); +} +a : ID ';'; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP13.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP13.g new file mode 100755 index 0000000..2abecb8 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP13.g @@ -0,0 +1,28 @@ +grammar t053heteroTP13; +options { + language=JavaScript; + output=AST; + tokenVocab=t053heteroT13; +} +@header { +function V() { + V.superclass.constructor.apply(this, arguments); +}; +org.antlr.lang.extend(V, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return this.getText() + ""; + } +}); + +function W() { + W.superclass.constructor.apply(this, arguments); +}; +org.antlr.lang.extend(W, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return this.getText() + ""; + } +}); +} +a : ID INT -> INT ID + ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP14.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP14.g new file mode 100755 index 0000000..25e0ac3 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP14.g @@ -0,0 +1,28 @@ +grammar t053heteroTP14; +options { + language=JavaScript; + output=AST; + tokenVocab=t053heteroT14; +} +@header { +function V() { + V.superclass.constructor.apply(this, arguments); +}; +org.antlr.lang.extend(V, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return this.getText() + ""; + } +}); + +function W() { + W.superclass.constructor.apply(this, arguments); +}; +org.antlr.lang.extend(W, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return this.getText() + ""; + } +}); +} +a : ID INT -> ^(INT ID) + ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP15.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP15.g new file mode 100755 index 0000000..d4f1833 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP15.g @@ -0,0 +1,21 @@ +grammar t053heteroTP15; +options { + language=JavaScript; + output=AST; + tokenVocab=t053heteroT15; + ASTLabelType=CommonTree; +} +tokens { ROOT; } +@header { +function V15(ttype) { + V15.superclass.constructor.call(this, new org.antlr.runtime.CommonToken(ttype)); +}; +org.antlr.lang.extend(V15, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return t053heteroTP15Parser.tokenNames[this.getType()] + ""; + } +}); +} +a : ID -> ROOT ID + ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP16.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP16.g new file mode 100755 index 0000000..7d3099c --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP16.g @@ -0,0 +1,21 @@ +grammar t053heteroTP16; +options { + language=JavaScript; + output=AST; + tokenVocab=t053heteroT16; +} +tokens { ROOT; } +@header { +function V16(ttype, x) { + V16.superclass.constructor.call(this, new org.antlr.runtime.CommonToken(ttype)); + this.foobar = x; +}; +org.antlr.lang.extend(V16, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return t053heteroTP16Parser.tokenNames[this.getType()] + ";" + this.foobar; + } +}); +} +a : ID -> ROOT[42] ID + ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP17.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP17.g new file mode 100755 index 0000000..8bd330a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP17.g @@ -0,0 +1,20 @@ +grammar t053heteroTP17; +options { + language=JavaScript; + output=AST; + tokenVocab=t053heteroT17; +} +tokens { ROOT; } +@header { +function V17(ttype) { + V17.superclass.constructor.call(this, new org.antlr.runtime.CommonToken(ttype)); +}; +org.antlr.lang.extend(V17, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return t053heteroTP17Parser.tokenNames[this.getType()] + ""; + } +}); +} +a : ID -> ^(ROOT ID) + ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP18.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP18.g new file mode 100755 index 0000000..612ff32 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t053heteroTP18.g @@ -0,0 +1,26 @@ +grammar t053heteroTP18; +options { + language=JavaScript; + output=AST; + tokenVocab=t053heteroT18; +} +tokens { ROOT; } +@header { +function V18(ttype, tree) { + if (!tree) { + V18.superclass.constructor.call(this, new org.antlr.runtime.CommonToken(ttype)); + } else { + V18.superclass.constructor.call(this, tree); + this.token.type = ttype; + } +}; +org.antlr.lang.extend(V18, org.antlr.runtime.tree.CommonTree, { + toString: function() { + return t053heteroTP18Parser.tokenNames[this.getType()] + "@" + + this.token.getLine(); + } +}); +} +a : ID -> ROOT[$ID] + ; + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer.html new file mode 100755 index 0000000..7671f1b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer.html @@ -0,0 +1,150 @@ + + + + +t056lexer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

t056lexer

+ + + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer1.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer1.g new file mode 100755 index 0000000..1578e2c --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer1.g @@ -0,0 +1,5 @@ +grammar t056lexer1; +options {language=JavaScript;} +a : A {this.xlog(this.input);} ; +A : '\\' 't' {this.setText(" ");} ; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer10.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer10.g new file mode 100755 index 0000000..5c9ae98 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer10.g @@ -0,0 +1,6 @@ +grammar t056lexer10; +options {language=JavaScript;} +a : A ; +A : i+=I WS i+=I {$channel=0; for (var p=0; p<$i.length; p++) this.xlog(" "+$i[p].getText()); } ; +fragment I : '0'..'9'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer11.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer11.g new file mode 100755 index 0000000..9dbb0d9 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer11.g @@ -0,0 +1,4 @@ +grammar t056lexer11; +options {language=JavaScript;} +a : B ; +B : x='a' {this.xlog($x);} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer12.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer12.g new file mode 100755 index 0000000..a8541e4 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer12.g @@ -0,0 +1,3 @@ +lexer grammar t056lexer12; +options {language=JavaScript;} +B : x='a' x='b' ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer13.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer13.g new file mode 100755 index 0000000..6f4ae44 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer13.g @@ -0,0 +1,4 @@ +lexer grammar t056lexer13; +options {language=JavaScript;} +B : x=A x=A ; +fragment A : 'a' ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer14.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer14.g new file mode 100755 index 0000000..f3f8785 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer14.g @@ -0,0 +1,4 @@ +lexer grammar t056lexer14; +options {language=JavaScript;} +QUOTED_CONTENT + : 'q' (~'q')* (('x' 'q') )* 'q' ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer15.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer15.g new file mode 100755 index 0000000..87da6b3 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer15.g @@ -0,0 +1,4 @@ +lexer grammar t056lexer15; +options {language=JavaScript;} +A : '\"' ; +B : '\\\"' ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer2.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer2.g new file mode 100755 index 0000000..5f24382 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer2.g @@ -0,0 +1,6 @@ +grammar t056lexer2; +options {language=JavaScript;} +a : A EOF {this.xlog(this.input);} ; +A : '-' I ; +I : '0'..'9'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer3.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer3.g new file mode 100755 index 0000000..eef5067 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer3.g @@ -0,0 +1,6 @@ +grammar t056lexer3; +options {language=JavaScript;} +a : A EOF {this.xlog($A.text+", channel="+$A.channel);} ; +A : '-' WS I ; +I : '0'..'9'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer4.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer4.g new file mode 100755 index 0000000..c715b25 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer4.g @@ -0,0 +1,7 @@ +grammar t056lexer4; +options {language=JavaScript;} +tokens {X;} +a : X EOF {this.xlog(this.input);} ; +A : '-' I {$type = this.X;} ; +I : '0'..'9'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer5.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer5.g new file mode 100755 index 0000000..68616c7 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer5.g @@ -0,0 +1,6 @@ +grammar t056lexer5; +options {language=JavaScript;} +a : A {this.xlog(this.input);} ; +A : '-' I ; +fragment I : '0'..'9'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer6.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer6.g new file mode 100755 index 0000000..249bdd1 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer6.g @@ -0,0 +1,6 @@ +grammar t056lexer6; +options {language=JavaScript;} +a : A EOF {this.xlog(this.input);} ; +A : I '.' I ; +fragment I : '0'..'9'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer7.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer7.g new file mode 100755 index 0000000..419e510 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer7.g @@ -0,0 +1,6 @@ +grammar t056lexer7; +options {language=JavaScript;} +a : A EOF ; +A : 'hi' WS (v=I)? {$channel=0; this.xlog($v.text);} ; +fragment I : '0'..'9'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer8.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer8.g new file mode 100755 index 0000000..6f75812 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer8.g @@ -0,0 +1,6 @@ +grammar t056lexer8; +options {language=JavaScript;} +a : A EOF ; +A : I {this.xlog($I.text);} ; +fragment I : '0'..'9'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer9.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer9.g new file mode 100755 index 0000000..bdbdc33 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t056lexer9.g @@ -0,0 +1,6 @@ +grammar t056lexer9; +options {language=JavaScript;} +a : A ; +A : i+=I+ { for (var p=0; p<$i.length; p++) this.xlog(" "+$i[p].getText()); } ; +fragment I : '0'..'9'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST.html new file mode 100755 index 0000000..8b4066b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST.html @@ -0,0 +1,495 @@ + + + + +t057autoAST + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

t057autoAST

+ + + + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST1.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST1.g new file mode 100755 index 0000000..cf6841b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST1.g @@ -0,0 +1,6 @@ +grammar t057autoAST1; +options {language=JavaScript;output=AST;} +a : ID INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;}; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST10.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST10.g new file mode 100755 index 0000000..97ff4b5 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST10.g @@ -0,0 +1,6 @@ +grammar t057autoAST10; +options {language=JavaScript;output=AST;} +a : v='void' x=.^ ';' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST11.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST11.g new file mode 100755 index 0000000..c69cade --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST11.g @@ -0,0 +1,6 @@ +grammar t057autoAST11; +options {language=JavaScript;output=AST;} +a : v='void' x=.^ ';' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST12.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST12.g new file mode 100755 index 0000000..dca99d5 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST12.g @@ -0,0 +1,6 @@ +grammar t057autoAST12; +options {language=JavaScript;output=AST;} +a : ID^ INT^ ID ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST13.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST13.g new file mode 100755 index 0000000..ac2275d --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST13.g @@ -0,0 +1,6 @@ +grammar t057autoAST13; +options {language=JavaScript;output=AST;} +a : ID INT^ ID^ ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST14.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST14.g new file mode 100755 index 0000000..ede2a28 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST14.g @@ -0,0 +1,6 @@ +grammar t057autoAST14; +options {language=JavaScript;output=AST;} +a : ID^ (INT '*'^ ID)+ ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST15.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST15.g new file mode 100755 index 0000000..aafc825 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST15.g @@ -0,0 +1,6 @@ +grammar t057autoAST15; +options {language=JavaScript;output=AST;} +a : 'void' (({pass}ID|INT) ID | 'null' ) ';' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST16.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST16.g new file mode 100755 index 0000000..5cbdfd1 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST16.g @@ -0,0 +1,7 @@ +grammar t057autoAST16; +options {language=JavaScript;output=AST;} +a : type ID ; +type : {pass}'int' | 'float' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST17.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST17.g new file mode 100755 index 0000000..afc8aca --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST17.g @@ -0,0 +1,7 @@ +grammar t057autoAST17; +options {language=JavaScript;output=AST;} +a : type^ ID ; +type : {pass}'int' | 'float' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST18.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST18.g new file mode 100755 index 0000000..eae0c61 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST18.g @@ -0,0 +1,7 @@ +grammar t057autoAST18; +options {language=JavaScript;output=AST;} +a : x=type^ ID ; +type : {pass}'int' | 'float' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST19.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST19.g new file mode 100755 index 0000000..69383b4 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST19.g @@ -0,0 +1,7 @@ +grammar t057autoAST19; +options {language=JavaScript;output=AST;} +a : x+=type^ ID ; +type : {pass}'int' | 'float' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST2.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST2.g new file mode 100755 index 0000000..071a00d --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST2.g @@ -0,0 +1,6 @@ +grammar t057autoAST2; +options {language=JavaScript;output=AST;} +a : (ID INT) ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST20.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST20.g new file mode 100755 index 0000000..a3accf9 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST20.g @@ -0,0 +1,6 @@ +grammar t057autoAST20; +options {language=JavaScript;output=AST;} +a : ID ('+'^ ID)* ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST21.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST21.g new file mode 100755 index 0000000..58bae87 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST21.g @@ -0,0 +1,7 @@ +grammar t057autoAST21; +options {language=JavaScript;output=AST;} +a : ID (op^ ID)* ; +op : {pass}'+' | '-' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST22.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST22.g new file mode 100755 index 0000000..2e86593 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST22.g @@ -0,0 +1,8 @@ +grammar t057autoAST22; +options {language=JavaScript;output=AST;} +s : a ; +a : atom ('exp'^ a)? ; +atom : INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST23.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST23.g new file mode 100755 index 0000000..c2c9bc7 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST23.g @@ -0,0 +1,6 @@ +grammar t057autoAST23; +options {language=JavaScript;output=AST;} +a : ID|INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST24.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST24.g new file mode 100755 index 0000000..7c43f00 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST24.g @@ -0,0 +1,6 @@ +grammar t057autoAST24; +options {language=JavaScript;output=AST;} +a : ('+' | '-')^ ID ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST25.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST25.g new file mode 100755 index 0000000..7a47f07 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST25.g @@ -0,0 +1,6 @@ +grammar t057autoAST25; +options {language=JavaScript;output=AST;} +a : x=('+' | '-')^ ID ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST26.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST26.g new file mode 100755 index 0000000..efa4977 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST26.g @@ -0,0 +1,6 @@ +grammar t057autoAST26; +options {language=JavaScript;output=AST;} +a : ID (('+'|'-')^ ID)* ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST27.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST27.g new file mode 100755 index 0000000..8dfffd1 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST27.g @@ -0,0 +1,6 @@ +grammar t057autoAST27; +options {language=JavaScript;output=AST;} +a : ~ID '+' INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST28.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST28.g new file mode 100755 index 0000000..cbf2aac --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST28.g @@ -0,0 +1,6 @@ +grammar t057autoAST28; +options {language=JavaScript;output=AST;} +a : x=~ID '+' INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST29.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST29.g new file mode 100755 index 0000000..3499b96 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST29.g @@ -0,0 +1,6 @@ +grammar t057autoAST29; +options {language=JavaScript;output=AST;} +a : x=~ID '+' INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST3.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST3.g new file mode 100755 index 0000000..0aee351 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST3.g @@ -0,0 +1,6 @@ +grammar t057autoAST3; +options {language=JavaScript;output=AST;} +a : ID^ INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST30.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST30.g new file mode 100755 index 0000000..deed2be --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST30.g @@ -0,0 +1,6 @@ +grammar t057autoAST30; +options {language=JavaScript;output=AST;} +a : ~'+'^ INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST31.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST31.g new file mode 100755 index 0000000..eaf0d9e --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST31.g @@ -0,0 +1,6 @@ +grammar t057autoAST31; +options {language=JavaScript;output=AST;} +a : ~'+'^ INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST32.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST32.g new file mode 100755 index 0000000..a00adef --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST32.g @@ -0,0 +1,6 @@ +grammar t057autoAST32; +options {language=JavaScript;output=AST;} +a : ~'+'^ INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST33.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST33.g new file mode 100755 index 0000000..d7b4b69 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST33.g @@ -0,0 +1,7 @@ +grammar t057autoAST33; +options {language=JavaScript;output=AST;} +a : INT (~INT^ INT)* ; +blort : '+' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST34.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST34.g new file mode 100755 index 0000000..f82d0cd --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST34.g @@ -0,0 +1,6 @@ +grammar t057autoAST34; +options {language=JavaScript;output=AST;} +a returns [result] : id=ID id=ID {$result = "2nd id="+$id.text+";";} ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST35.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST35.g new file mode 100755 index 0000000..a4c329c --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST35.g @@ -0,0 +1,6 @@ +grammar t057autoAST35; +options {language=JavaScript;output=AST;} +a returns [result]: id=ID id=ID^ {$result = "2nd id="+$id.text+',';} ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST36.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST36.g new file mode 100755 index 0000000..bfb5f3b --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST36.g @@ -0,0 +1,12 @@ +grammar t057autoAST36; +options {language=JavaScript;output=AST;} +a returns [result] : ids+=ID ids+=ID { + var p, buffer=[]; + for (p=0; p<$ids.length; p++) { + buffer.push($ids[p]); + } + $result = "id list=["+buffer.join(",")+"],"; +} ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST37.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST37.g new file mode 100755 index 0000000..e1657fb --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST37.g @@ -0,0 +1,12 @@ +grammar t057autoAST37; +options {language=JavaScript;output=AST;} +a returns [result] : ids+=ID^ ids+=ID { + var p, buffer=[]; + for (p=0; p<$ids.length; p++) { + buffer.push($ids[p]); + } + $result = "id list=["+buffer.join(",")+"],"; +} ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST38.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST38.g new file mode 100755 index 0000000..9c90cdc --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST38.g @@ -0,0 +1,6 @@ +grammar t057autoAST38; +options {language=JavaScript;output=AST;} +a : id+=ID^ ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST39.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST39.g new file mode 100755 index 0000000..7c848ac --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST39.g @@ -0,0 +1,6 @@ +grammar t057autoAST39; +options {language=JavaScript;output=AST;} +a : id+=ID! ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST4.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST4.g new file mode 100755 index 0000000..6370ee2 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST4.g @@ -0,0 +1,6 @@ +grammar t057autoAST4; +options {language=JavaScript;output=AST;} +a : INT ID^ ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST40.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST40.g new file mode 100755 index 0000000..5734533 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST40.g @@ -0,0 +1,10 @@ +grammar t057autoAST40; +options {language=JavaScript;output=AST;} +a returns [result]: x+=b x+=b { +t=$x[1] +$result = "2nd x="+t.toStringTree()+','; +}; +b : ID; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST41.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST41.g new file mode 100755 index 0000000..a51cdfd --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST41.g @@ -0,0 +1,9 @@ +grammar t057autoAST41; +options {language=JavaScript;output=AST;} +a returns [result] : ( x+=b^ )+ { +$result = "x="+$x[1].toStringTree()+','; +} ; +b : ID; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST42.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST42.g new file mode 100755 index 0000000..5ce61c6 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST42.g @@ -0,0 +1,9 @@ +grammar t057autoAST42; +options {language=JavaScript;output=AST;} +a returns [result] : x+=b! x+=b { +$result = "1st x="+$x[0].toStringTree()+','; +} ; +b : ID; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST43.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST43.g new file mode 100755 index 0000000..742896c --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST43.g @@ -0,0 +1,8 @@ +grammar t057autoAST43; +options {language=JavaScript;output=AST;} +a : A b=B b=B c+=C c+=C D {s = $D.text} ; +A : 'a' ; +B : 'b' ; +C : 'c' ; +D : 'd' ; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST44.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST44.g new file mode 100755 index 0000000..72262ca --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST44.g @@ -0,0 +1,10 @@ +grammar t057autoAST44; +options {language=JavaScript;output=AST;} +a returns [result] : ID b { +/* @todo */ +/* $result = $b.i.toString() + '\n'; */ +} ; +b returns [i] : INT {$i=parseInt($INT.text);} ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST45.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST45.g new file mode 100755 index 0000000..02ee701 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST45.g @@ -0,0 +1,6 @@ +grammar t057autoAST45; +options { language=JavaScript;output=AST; } +r : (INT|ID)+ ; +ID : 'a'..'z' + ; +INT : '0'..'9' +; +WS: (' ' | '\n' | '\\t')+ {$channel = HIDDEN;}; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST46.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST46.g new file mode 100755 index 0000000..28642eb --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST46.g @@ -0,0 +1,7 @@ +grammar t057autoAST46; +options {language=JavaScript;output=AST;} +decl : type^ ID '='! INT ';'! ; +type : 'int' | 'float' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST47.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST47.g new file mode 100755 index 0000000..ac6cce8 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST47.g @@ -0,0 +1,8 @@ +grammar t057autoAST47; +options {language=JavaScript;output=AST;} +tokens {EXPR;} +decl : type^ ID '='! INT ';'! ; +type : 'int' | 'float' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST48.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST48.g new file mode 100755 index 0000000..8baccb9 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST48.g @@ -0,0 +1,8 @@ +grammar t057autoAST48; +options {language=JavaScript;output=AST;} +tokens {EXPR;} +decl : type^ ID '='! INT ';'! ; +type : 'int' | 'float' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST49.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST49.g new file mode 100755 index 0000000..56cebd9 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST49.g @@ -0,0 +1,6 @@ +grammar t057autoAST49; +options {language=JavaScript;output=AST;} +a : ID INT ; // follow is EOF +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST5.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST5.g new file mode 100755 index 0000000..ed019d7 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST5.g @@ -0,0 +1,6 @@ +grammar t057autoAST5; +options {language=JavaScript;output=AST;} +a : ID INT! ID! INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST50.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST50.g new file mode 100755 index 0000000..0589e39 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST50.g @@ -0,0 +1,7 @@ +grammar t057autoAST50; +options {language=JavaScript;output=AST;} +a : b ; +b : ID INT ; // follow should see EOF +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST51.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST51.g new file mode 100755 index 0000000..8302843 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST51.g @@ -0,0 +1,8 @@ +grammar t057autoAST51; +options {language=JavaScript;output=AST;} +a : b c ; +b : ID ; +c : INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST52.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST52.g new file mode 100755 index 0000000..94cc6dd --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST52.g @@ -0,0 +1,6 @@ +grammar t057autoAST52; +options {language=JavaScript;output=AST;} +a : ID INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST53.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST53.g new file mode 100755 index 0000000..dd8bf4d --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST53.g @@ -0,0 +1,8 @@ +grammar t057autoAST53; +options {language=JavaScript;output=AST;} +a : b c ; +b : ID ; +c : INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST54.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST54.g new file mode 100755 index 0000000..e24e158 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST54.g @@ -0,0 +1,9 @@ +grammar t057autoAST54; +options {language=JavaScript;output=AST;} +a : b | c ; +b : ID ; +c : INT ; +ID : 'a'..'z'+ ; +S : '*' ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST6.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST6.g new file mode 100755 index 0000000..a4e5361 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST6.g @@ -0,0 +1,6 @@ +grammar t057autoAST6; +options {language=JavaScript;output=AST;} +a : ( ID INT )? ID^ ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST7.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST7.g new file mode 100755 index 0000000..3aa3b21 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST7.g @@ -0,0 +1,6 @@ +grammar t057autoAST7; +options {language=JavaScript;output=AST;} +a : v='void'^ ID ';' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST8.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST8.g new file mode 100755 index 0000000..280e036 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST8.g @@ -0,0 +1,6 @@ +grammar t057autoAST8; +options {language=JavaScript;output=AST;} +a : v='void'^ . ';' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST9.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST9.g new file mode 100755 index 0000000..a7fa23f --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t057autoAST9.g @@ -0,0 +1,6 @@ +grammar t057autoAST9; +options {language=JavaScript;output=AST;} +a : v='void' .^ ';' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST.html b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST.html new file mode 100755 index 0000000..fbb888a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST.html @@ -0,0 +1,732 @@ + + + + +t058rewriteAST + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

t058rewriteAST

+ + + diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST1.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST1.g new file mode 100755 index 0000000..51c374e --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST1.g @@ -0,0 +1,6 @@ +grammar t058rewriteAST1; +options {language=JavaScript;output=AST;} +a : ID INT -> ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST10.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST10.g new file mode 100755 index 0000000..05fcf0a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST10.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST10; +options {language=JavaScript;output=AST;} +a : b INT -> INT b; +b : ID ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST11.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST11.g new file mode 100755 index 0000000..acbf065 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST11.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST11; +options {language=JavaScript;output=AST;} +a : ID INT -> ^(INT ID); +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST12.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST12.g new file mode 100755 index 0000000..6c3f096 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST12.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST12; +options {language=JavaScript;output=AST;} +a : 'void' ID INT -> 'void' ^(INT ID); +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST13.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST13.g new file mode 100755 index 0000000..e22c9c8 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST13.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST13; +options {language=JavaScript;output=AST;} +tokens {DUH;} +a : ID INT ID INT -> ^( DUH ID ^( DUH INT) )+ ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST14.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST14.g new file mode 100755 index 0000000..97c76a0 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST14.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST14; +options {language=JavaScript;output=AST;} +a : ID -> ID? ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST15.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST15.g new file mode 100755 index 0000000..5c541ec --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST15.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST15; +options {language=JavaScript;output=AST;} +a : ID ID -> ID* ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST16.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST16.g new file mode 100755 index 0000000..ce1d26e --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST16.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST16; +options {language=JavaScript;output=AST;} +a : ID ID -> ID+ ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST17.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST17.g new file mode 100755 index 0000000..4093539 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST17.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST17; +options {language=JavaScript;output=AST;} +a : b -> b?; +b : ID ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST18.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST18.g new file mode 100755 index 0000000..a84d7fb --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST18.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST18; +options {language=JavaScript;output=AST;} +a : b b -> b*; +b : ID ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST19.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST19.g new file mode 100755 index 0000000..3b83906 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST19.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST19; +options {language=JavaScript;output=AST;} +a : x+=b x+=b -> $x*; +b : ID ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST2.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST2.g new file mode 100755 index 0000000..d6fbb04 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST2.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST2; +options {language=JavaScript;output=AST;} +a : ID -> ID; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST20.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST20.g new file mode 100755 index 0000000..5df0732 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST20.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST20; +options {language=JavaScript;output=AST;} +a : (x=ID)? -> $x?; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST21.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST21.g new file mode 100755 index 0000000..e6ddd35 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST21.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST21; +options {language=JavaScript;output=AST;} +a : b b -> b+; +b : ID ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST22.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST22.g new file mode 100755 index 0000000..83ba81f --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST22.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST22; +options {language=JavaScript;output=AST;} +a : ID -> {true}? ID -> ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST23.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST23.g new file mode 100755 index 0000000..4fb7383 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST23.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST23; +options {language=JavaScript;output=AST;} +a : ID -> {false}? ID -> ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST24.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST24.g new file mode 100755 index 0000000..28b2c44 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST24.g @@ -0,0 +1,10 @@ + +grammar t058rewriteAST24; +options {language=JavaScript;output=AST;} +a : ID INT -> {false}? ID + -> {true}? INT + -> + ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST25.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST25.g new file mode 100755 index 0000000..d6cb83c --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST25.g @@ -0,0 +1,10 @@ + +grammar t058rewriteAST25; +options {language=JavaScript;output=AST;} +a : ID INT -> {false}? ^(ID INT) + -> {true}? ^(INT ID) + -> ID + ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST26.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST26.g new file mode 100755 index 0000000..4e98b9c --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST26.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST26; +options {language=JavaScript;output=AST;} +a : op INT -> ^(op INT); +op : '+'|'-' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST27.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST27.g new file mode 100755 index 0000000..27795d7 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST27.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST27; +options {language=JavaScript;output=AST;} +a : op INT -> ^(INT op); +op : '+'|'-' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST28.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST28.g new file mode 100755 index 0000000..6a6ebfd --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST28.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST28; +options {language=JavaScript;output=AST;} +a : 'var' (ID ':' type ';')+ -> ^('var' ^(':' ID type)+) ; +type : 'int' | 'float' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST29.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST29.g new file mode 100755 index 0000000..bb8b84c --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST29.g @@ -0,0 +1,9 @@ + +grammar t058rewriteAST29; +options {language=JavaScript;output=AST;} +tokens {VAR;} +a : ID (',' ID)*-> ^(VAR ID)+ ; +type : 'int' | 'float' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST3.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST3.g new file mode 100755 index 0000000..0a17cfa --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST3.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST3; +options {language=JavaScript;output=AST;} +a : ID -> ID["x"]; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST30.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST30.g new file mode 100755 index 0000000..29b3020 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST30.g @@ -0,0 +1,9 @@ + +grammar t058rewriteAST30; +options {language=JavaScript;output=AST;} +tokens {VAR;} +a : b -> ID ; +b : ID ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST31.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST31.g new file mode 100755 index 0000000..113cca7 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST31.g @@ -0,0 +1,9 @@ + +grammar t058rewriteAST31; +options {language=JavaScript;output=AST;} +tokens {VAR;} +a : ID (',' ID)*-> ^(VAR["var"] ID)+ ; +type : 'int' | 'float' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST32.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST32.g new file mode 100755 index 0000000..cc3c3aa --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST32.g @@ -0,0 +1,9 @@ + +grammar t058rewriteAST32; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : lc='{' ID+ '}' -> ^(BLOCK[$lc] ID+) ; +type : 'int' | 'float' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST33.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST33.g new file mode 100755 index 0000000..e475463 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST33.g @@ -0,0 +1,9 @@ + +grammar t058rewriteAST33; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : lc='{' ID+ '}' -> ^(BLOCK[$lc,"block"] ID+) ; +type : 'int' | 'float' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST34.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST34.g new file mode 100755 index 0000000..afc72b0 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST34.g @@ -0,0 +1,11 @@ + +grammar t058rewriteAST34; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : b b^ ; // 2nd b matches only an INT; can make it root +b : ID INT -> INT ID + | INT + ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST35.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST35.g new file mode 100755 index 0000000..d325f93 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST35.g @@ -0,0 +1,10 @@ + +grammar t058rewriteAST35; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : b b ; +b : (ID INT -> INT ID | INT INT -> INT+ ) + ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST36.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST36.g new file mode 100755 index 0000000..5e5ca17 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST36.g @@ -0,0 +1,14 @@ + +grammar t058rewriteAST36; +options {language=JavaScript;output=AST;} +tokens {TYPE;} +a : b b ; +b : 'int' + ( ID -> ^(TYPE 'int' ID) + | ID '=' INT -> ^(TYPE 'int' ID INT) + ) + ';' + ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST37.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST37.g new file mode 100755 index 0000000..c475f04 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST37.g @@ -0,0 +1,11 @@ + +grammar t058rewriteAST37; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : b b ; +b : ID ( ID (last=ID -> $last)+ ) ';' // get last ID + | INT // should still get auto AST construction + ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST38.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST38.g new file mode 100755 index 0000000..08128ca --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST38.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST38; +options {language=JavaScript;output=AST;} +a : atom -> ^({this.adaptor.create(INT,"9")} atom) ; +atom : INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST39.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST39.g new file mode 100755 index 0000000..4e03f08 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST39.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST39; +options {language=JavaScript;output=AST;} +a : atom -> {this.adaptor.create(INT,"9")} atom ; +atom : INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST4.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST4.g new file mode 100755 index 0000000..bf8a38a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST4.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST4; +options {language=JavaScript;output=AST;} +a : ID -> ^(ID["x"] INT); +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST40.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST40.g new file mode 100755 index 0000000..f634eb8 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST40.g @@ -0,0 +1,9 @@ + +grammar t058rewriteAST40; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : (atom -> atom) (op='+' r=atom -> ^($op $a $r) )* ; +atom : INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST41.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST41.g new file mode 100755 index 0000000..201694d --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST41.g @@ -0,0 +1,9 @@ + +grammar t058rewriteAST41; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : atom -> ^(atom atom) ; // NOT CYCLE! (dup atom) +atom : INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST42.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST42.g new file mode 100755 index 0000000..f7a38cc --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST42.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST42; +options {language=JavaScript;output=AST;} +a : type ID (',' ID)* ';' -> ^(type ID)+ ; +type : 'int' ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST43.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST43.g new file mode 100755 index 0000000..c1daec6 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST43.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST43; +options {language=JavaScript;output=AST;} +a : modifier? type ID (',' ID)* ';' -> ^(type modifier? ID)+ ; +type : 'int' ; +modifier : 'public' ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST44.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST44.g new file mode 100755 index 0000000..33040f3 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST44.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST44; +options {language=JavaScript;output=AST;} +a : modifier? type ID (',' ID)* ';' -> ^(type modifier? ID)+ ^(type modifier? ID)+ ; +type : 'int' ; +modifier : 'public' ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST45.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST45.g new file mode 100755 index 0000000..04dceb5 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST45.g @@ -0,0 +1,9 @@ + +grammar t058rewriteAST45; +options {language=JavaScript;output=AST;} +tokens {MOD;} +a : modifier? type ID (',' ID)* ';' -> ^(type ^(MOD modifier)? ID)+ ; +type : 'int' ; +modifier : 'public' ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST46.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST46.g new file mode 100755 index 0000000..68ce360 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST46.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST46; +options {language=JavaScript;output=AST;} +tokens {MOD;} +a : ID (',' ID)* ';' -> ID+ ID+ ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST47.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST47.g new file mode 100755 index 0000000..76f545a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST47.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST47; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : x=b -> $x $x; +b : ID ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST48.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST48.g new file mode 100755 index 0000000..089ca43 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST48.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST48; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : x=b -> ^($x $x); +b : ID ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST49.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST49.g new file mode 100755 index 0000000..54ad312 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST49.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST49; +options {language=JavaScript;output=AST;} +a : 'int' ID (',' ID)* ';' -> ^('int' ID+) ; +op : '+'|'-' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST5.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST5.g new file mode 100755 index 0000000..6e36769 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST5.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST5; +options {language=JavaScript;output=AST;} +a : ID -> ID[ ]; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST50.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST50.g new file mode 100755 index 0000000..a9e2616 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST50.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST50; +options {language=JavaScript;output=AST;} +a : 'int' ID ';' -> 'int' ID 'int' ID ; +op : '+'|'-' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST51.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST51.g new file mode 100755 index 0000000..d261c89 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST51.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST51; +options {language=JavaScript;output=AST;} +a : 'int' ID (',' ID)* ';' -> ^('int' ID)+ ; +op : '+'|'-' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST52.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST52.g new file mode 100755 index 0000000..30a56c0 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST52.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST52; +options {language=JavaScript;output=AST;} +a : 'int' ID ':' INT (',' ID ':' INT)* ';' -> ^('int' ID INT)+ ; +op : '+'|'-' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST53.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST53.g new file mode 100755 index 0000000..e0cb162 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST53.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST53; +options {language=JavaScript;output=AST;} +a : ID+ -> ID ID ID ; // works if 3 input IDs +op : '+'|'-' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST54.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST54.g new file mode 100755 index 0000000..2df71ee --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST54.g @@ -0,0 +1,9 @@ + +grammar t058rewriteAST54; +options {language=JavaScript;output=AST;} +tokens {VAR;} +a : first=ID others+=ID* -> $first VAR $others+ ; +op : '+'|'-' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST55.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST55.g new file mode 100755 index 0000000..8029f91 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST55.g @@ -0,0 +1,11 @@ + +grammar t058rewriteAST55; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : A A b=B B b=B c+=C C c+=C D {s=$D.text} -> A+ B+ C+ D ; +type : 'int' | 'float' ; +A : 'a' ; +B : 'b' ; +C : 'c' ; +D : 'd' ; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST56.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST56.g new file mode 100755 index 0000000..0f043a0 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST56.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST56; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : x=b -> $x; +b : ID ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST57.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST57.g new file mode 100755 index 0000000..430a844 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST57.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST57; +options {language=JavaScript;output=AST;} +a : ID a -> a | INT ; +ID : 'a'..'z'+ ; +INT: '0'..'9'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST58.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST58.g new file mode 100755 index 0000000..290f868 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST58.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST58; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : x+=b x+=b -> $x+; +b : ID ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST59.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST59.g new file mode 100755 index 0000000..8e777a5 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST59.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST59; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : x+=b x+=b -> $x $x*; +b : ID ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST6.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST6.g new file mode 100755 index 0000000..0f09884 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST6.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST6; +options {language=JavaScript;output=AST;} +a : 'c' -> 'c'; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST60.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST60.g new file mode 100755 index 0000000..2dab722 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST60.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST60; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : x=b (y=b)? -> $x $y?; +b : ID ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST61.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST61.g new file mode 100755 index 0000000..aa4904d --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST61.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST61; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : x=ID (y=b)? -> $x $y?; +b : ID ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST62.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST62.g new file mode 100755 index 0000000..6ae8d72 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST62.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST62; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : x=ID (y=b)? -> ($x $y)?; +b : ID ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST63.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST63.g new file mode 100755 index 0000000..2ebf7af --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST63.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST63; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : x+=ID (y=b)? -> ($x $y)?; +b : ID ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST64.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST64.g new file mode 100755 index 0000000..9980f62 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST64.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST64; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : ID -> ID? ; // match an ID to optional ID +b : ID ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST65.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST65.g new file mode 100755 index 0000000..ffcabbb --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST65.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST65; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : x+=b x+=b -> {new org.antlr.runtime.tree.CommonTree(null)}; +b : ID ; +ID : 'a'..'z'+ ; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST66.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST66.g new file mode 100755 index 0000000..27a3752 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST66.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST66; +options {language=JavaScript;output=AST;} +a: (INT|ID)+ -> INT+ ID+ ; +INT: '0'..'9'+; +ID : 'a'..'z'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST67.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST67.g new file mode 100755 index 0000000..f75f321 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST67.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST67; +options {language=JavaScript;output=AST;} +a: (INT|ID) -> INT? ID? ; +INT: '0'..'9'+; +ID : 'a'..'z'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST68.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST68.g new file mode 100755 index 0000000..41f8b1a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST68.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST68; +options {language=JavaScript;output=AST;} +a : x=(INT|ID) -> $x ; +INT: '0'..'9'+; +ID : 'a'..'z'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST69.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST69.g new file mode 100755 index 0000000..eaf0235 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST69.g @@ -0,0 +1,9 @@ + +grammar t058rewriteAST69; +options {language=JavaScript;output=AST;} +tokens { FLOAT; } +r + : INT -> {new org.antlr.runtime.tree.CommonTree(new org.antlr.runtime.CommonToken(FLOAT, $INT.text+".0"))} + ; +INT : '0'..'9'+; +WS: (' ' | '\n' | '\t')+ {$channel = HIDDEN;}; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST7.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST7.g new file mode 100755 index 0000000..267dde1 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST7.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST7; +options {language=JavaScript;output=AST;} +a : 'ick' -> 'ick'; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST70.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST70.g new file mode 100755 index 0000000..68aed44 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST70.g @@ -0,0 +1,9 @@ +grammar t058rewriteAST70; +options {language=JavaScript;output=AST;} +tokens {PARMS;} +modulo + : 'modulo' ID ('(' parms+ ')')? -> ^('modulo' ID ^(PARMS parms+)?) + ; +parms : '#'|ID; +ID : ('a'..'z' | 'A'..'Z')+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST71.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST71.g new file mode 100755 index 0000000..ff66674 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST71.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST71; +options {language=JavaScript;output=AST;} +tokens {BLOCK;} +a : ID ID INT INT INT -> (ID INT)+; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST72.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST72.g new file mode 100755 index 0000000..b151aff --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST72.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST72; +options {language=JavaScript;output=AST;} +a : ID+ -> ID ID ID ; // only 2 input IDs +op : '+'|'-' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST73.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST73.g new file mode 100755 index 0000000..6cc7f13 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST73.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST73; +options {language=JavaScript;output=AST;} +a : ID? INT -> ID INT ; +op : '+'|'-' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST74.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST74.g new file mode 100755 index 0000000..d67657e --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST74.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST74; +options {language=JavaScript;output=AST;} +a : ID? INT -> ID+ INT ; +op : '+'|'-' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST75.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST75.g new file mode 100755 index 0000000..c8581e3 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST75.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST75; +options {language=JavaScript;output=AST;} +a : ID c=. -> $c; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST76.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST76.g new file mode 100755 index 0000000..967fb7a --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST76.g @@ -0,0 +1,9 @@ + +grammar t058rewriteAST76; +options {language=JavaScript;output=AST;} +tokens {EXPR;} +decl : type ID '=' INT ';' -> ^(EXPR type ID INT) ; +type : 'int' | 'float' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST77.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST77.g new file mode 100755 index 0000000..6efd915 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST77.g @@ -0,0 +1,9 @@ + +grammar t058rewriteAST77; +options {language=JavaScript;output=AST;} +tokens {EXPR;} +decl : type ID '=' INT ';' -> ^(EXPR type ID INT) ; +type : 'int' | 'float' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST78.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST78.g new file mode 100755 index 0000000..6b60798 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST78.g @@ -0,0 +1,9 @@ + +grammar t058rewriteAST78; +options {language=JavaScript;output=AST;} +tokens {EXPR;} +decl : type ID '=' INT ';' -> ^(EXPR type ID INT) ; +type : 'int' | 'float' ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST79.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST79.g new file mode 100755 index 0000000..925ed78 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST79.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST79; +options {language=JavaScript;output=AST;} +a : ID INT -> ID INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST8.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST8.g new file mode 100755 index 0000000..c3a6ffd --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST8.g @@ -0,0 +1,8 @@ + +grammar t058rewriteAST8; +options {language=JavaScript;output=AST;} +a : b -> b; +b : ID ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST80.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST80.g new file mode 100755 index 0000000..3fe50d5 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST80.g @@ -0,0 +1,9 @@ + +grammar t058rewriteAST80; +options {language=JavaScript;output=AST;} +a : b c -> b c; +b : ID -> ID ; +c : INT -> INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST81.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST81.g new file mode 100755 index 0000000..4eee1e2 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST81.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST81; +options {language=JavaScript;output=AST;} +a : ID INT -> ID INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST82.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST82.g new file mode 100755 index 0000000..20d45f2 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST82.g @@ -0,0 +1,9 @@ + +grammar t058rewriteAST82; +options {language=JavaScript;output=AST;} +a : b c -> b c; +b : ID -> ID ; +c : INT -> INT ; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST83.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST83.g new file mode 100755 index 0000000..2354b7c --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST83.g @@ -0,0 +1,10 @@ + +grammar t058rewriteAST83; +options {language=JavaScript;output=AST;} +a : b -> b | c -> c; +b : ID -> ID ; +c : INT -> INT ; +ID : 'a'..'z'+ ; +S : '*' ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST9.g b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST9.g new file mode 100755 index 0000000..713fcd5 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/tests/functional/t058rewriteAST9.g @@ -0,0 +1,7 @@ + +grammar t058rewriteAST9; +options {language=JavaScript;output=AST;} +a : ID INT -> INT ID; +ID : 'a'..'z'+ ; +INT : '0'..'9'+; +WS : (' '|'\n') {$channel=HIDDEN;} ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/JavaScript/third/antcontrib.properties b/antlr-3.1.3/runtime/JavaScript/third/antcontrib.properties new file mode 100755 index 0000000..c76c9d1 --- /dev/null +++ b/antlr-3.1.3/runtime/JavaScript/third/antcontrib.properties @@ -0,0 +1,33 @@ +antclipse=net.sf.antcontrib.antclipse.ClassPathTask +antserver=net.sf.antcontrib.antserver.server.ServerTask +remoteant=net.sf.antcontrib.antserver.client.ClientTask +verifydesign=net.sf.antcontrib.design.VerifyDesign +inifile=net.sf.antcontrib.inifile.IniFileTask +if=net.sf.antcontrib.logic.IfTask +foreach=net.sf.antcontrib.logic.ForEach +for=net.sf.antcontrib.logic.ForTask +throw=net.sf.antcontrib.logic.Throw +trycatch=net.sf.antcontrib.logic.TryCatchTask +switch=net.sf.antcontrib.logic.Switch +outofdate=net.sf.antcontrib.logic.OutOfDate +runtarget=net.sf.antcontrib.logic.RunTargetTask +timestampselector=net.sf.antcontrib.logic.TimestampSelector +antcallback=net.sf.antcontrib.logic.AntCallBack +antfetch=net.sf.antcontrib.logic.AntFetch +assert=net.sf.antcontrib.logic.Assert +relentless=net.sf.antcontrib.logic.Relentless +math=net.sf.antcontrib.math.MathTask +post=net.sf.antcontrib.net.PostTask +stopwatch=net.sf.antcontrib.perf.StopWatchTask +osfamily=net.sf.antcontrib.platform.OsFamily +shellscript=net.sf.antcontrib.platform.ShellScriptTask +forget=net.sf.antcontrib.process.ForgetTask +limit=net.sf.antcontrib.process.Limit +propertycopy=net.sf.antcontrib.property.PropertyCopy +pathtofileset=net.sf.antcontrib.property.PathToFileSet +propertyselector=net.sf.antcontrib.property.PropertySelector +propertyregex=net.sf.antcontrib.property.RegexTask +sortlist=net.sf.antcontrib.property.SortList +urlencode=net.sf.antcontrib.property.URLEncodeTask +var=net.sf.antcontrib.property.Variable +compilewithwalls=net.sf.antcontrib.walls.CompileWithWalls \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLR.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLR.h new file mode 100644 index 0000000..e0500ec --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLR.h @@ -0,0 +1,60 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import +#import +#import +#import +#import +#import +#import +#import +#import + +#import +#import +#import +#import +#import +#import +#import +#import +#import + +#import +#import + +#import +#import +#import +#import +#import +#import +#import + +#import +#import diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLR.xcodeproj/project.pbxproj b/antlr-3.1.3/runtime/ObjC/Framework/ANTLR.xcodeproj/project.pbxproj new file mode 100644 index 0000000..ea96e29 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLR.xcodeproj/project.pbxproj @@ -0,0 +1,3374 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXAggregateTarget section */ + F762873F0B71519B006AA7EF /* Regenerate all examples */ = { + isa = PBXAggregateTarget; + buildConfigurationList = F76287400B7151B9006AA7EF /* Build configuration list for PBXAggregateTarget "Regenerate all examples" */; + buildPhases = ( + ); + dependencies = ( + F79EFB140C5845A300ABAB3D /* PBXTargetDependency */, + F762874C0B715417006AA7EF /* PBXTargetDependency */, + F76287A70B7157C2006AA7EF /* PBXTargetDependency */, + F76287A90B7157C2006AA7EF /* PBXTargetDependency */, + F76287AB0B7157C2006AA7EF /* PBXTargetDependency */, + F76287AD0B7157C2006AA7EF /* PBXTargetDependency */, + F76287AF0B7157C2006AA7EF /* PBXTargetDependency */, + ); + name = "Regenerate all examples"; + productName = Untitled; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; }; + F7009ADB0A1BE4AE002EDD5D /* ANTLRLexerRuleReturnScope.h in Headers */ = {isa = PBXBuildFile; fileRef = F7009AD90A1BE4AE002EDD5D /* ANTLRLexerRuleReturnScope.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7009ADC0A1BE4AE002EDD5D /* ANTLRLexerRuleReturnScope.m in Sources */ = {isa = PBXBuildFile; fileRef = F7009ADA0A1BE4AE002EDD5D /* ANTLRLexerRuleReturnScope.m */; }; + F700E61B0A5F66EC005D0757 /* ANTLREarlyExitException.h in Headers */ = {isa = PBXBuildFile; fileRef = F700E6190A5F66EC005D0757 /* ANTLREarlyExitException.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F700E61C0A5F66EC005D0757 /* ANTLREarlyExitException.m in Sources */ = {isa = PBXBuildFile; fileRef = F700E61A0A5F66EC005D0757 /* ANTLREarlyExitException.m */; }; + F700E8FB0A5FAD21005D0757 /* ANTLRParser.h in Headers */ = {isa = PBXBuildFile; fileRef = F700E8F90A5FAD21005D0757 /* ANTLRParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F700E8FC0A5FAD21005D0757 /* ANTLRParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F700E8FA0A5FAD21005D0757 /* ANTLRParser.m */; }; + F700EC670A5FDF0D005D0757 /* ANTLR.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* ANTLR.framework */; }; + F700ECA40A5FDF1A005D0757 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F71F6B8F09A81E6F003221F4 /* CoreFoundation.framework */; }; + F700ECA50A5FDF1A005D0757 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; + F700ECD90A5FE19A005D0757 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F71F6B8F09A81E6F003221F4 /* CoreFoundation.framework */; }; + F700ECDA0A5FE19A005D0757 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; + F700ED7F0A5FF17C005D0757 /* ANTLRTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = F700ED7E0A5FF17C005D0757 /* ANTLRTokenSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F700ED960A5FF2A5005D0757 /* ANTLRCommonTokenStream.h in Headers */ = {isa = PBXBuildFile; fileRef = F700ED940A5FF2A5005D0757 /* ANTLRCommonTokenStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F700ED970A5FF2A5005D0757 /* ANTLRCommonTokenStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F700ED950A5FF2A5005D0757 /* ANTLRCommonTokenStream.m */; }; + F7037CF00A0582FC0070435D /* ANTLRMismatchedRangeException.h in Headers */ = {isa = PBXBuildFile; fileRef = F7037CEE0A0582FC0070435D /* ANTLRMismatchedRangeException.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7037CF10A0582FC0070435D /* ANTLRMismatchedRangeException.m in Sources */ = {isa = PBXBuildFile; fileRef = F7037CEF0A0582FC0070435D /* ANTLRMismatchedRangeException.m */; }; + F7037EA60A05AFD70070435D /* ANTLR.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* ANTLR.framework */; }; + F70380BC0A07FA0D0070435D /* ANTLRMismatchedSetException.h in Headers */ = {isa = PBXBuildFile; fileRef = F70380BA0A07FA0D0070435D /* ANTLRMismatchedSetException.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F70380BD0A07FA0D0070435D /* ANTLRMismatchedSetException.m in Sources */ = {isa = PBXBuildFile; fileRef = F70380BB0A07FA0D0070435D /* ANTLRMismatchedSetException.m */; }; + F7048FF80B07D05400D2F326 /* TestLexer.m in Sources */ = {isa = PBXBuildFile; fileRef = F7048FF70B07D05400D2F326 /* TestLexer.m */; }; + F7048FF90B07D05800D2F326 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F7E983940A0D6A5F00F16093 /* main.m */; }; + F70AA7A609AA2A6900C3FD5E /* ANTLR.h in Headers */ = {isa = PBXBuildFile; fileRef = F70AA7A509AA2A6900C3FD5E /* ANTLR.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F70AA7AF09AA2AC000C3FD5E /* ANTLRIntStream.h in Headers */ = {isa = PBXBuildFile; fileRef = F70AA7AD09AA2AC000C3FD5E /* ANTLRIntStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F70AA7C709AA339900C3FD5E /* ANTLRStringStream.h in Headers */ = {isa = PBXBuildFile; fileRef = F70AA7C509AA339900C3FD5E /* ANTLRStringStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F70AA7C809AA339900C3FD5E /* ANTLRStringStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F70AA7C609AA339900C3FD5E /* ANTLRStringStream.m */; }; + F70AA7CF09AA379300C3FD5E /* ANTLRStringStreamState.h in Headers */ = {isa = PBXBuildFile; fileRef = F70AA7CD09AA379300C3FD5E /* ANTLRStringStreamState.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F70AA7D009AA379300C3FD5E /* ANTLRStringStreamState.m in Sources */ = {isa = PBXBuildFile; fileRef = F70AA7CE09AA379300C3FD5E /* ANTLRStringStreamState.m */; }; + F70B11BD0C4C2B6400C3ECE0 /* ANTLRRewriteRuleSubtreeStream.h in Headers */ = {isa = PBXBuildFile; fileRef = F70B11BB0C4C2B6400C3ECE0 /* ANTLRRewriteRuleSubtreeStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F70B11BE0C4C2B6400C3ECE0 /* ANTLRRewriteRuleSubtreeStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F70B11BC0C4C2B6400C3ECE0 /* ANTLRRewriteRuleSubtreeStream.m */; }; + F70B11C30C4C2B7900C3ECE0 /* ANTLRRewriteRuleTokenStream.h in Headers */ = {isa = PBXBuildFile; fileRef = F70B11C10C4C2B7900C3ECE0 /* ANTLRRewriteRuleTokenStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F70B11C40C4C2B7900C3ECE0 /* ANTLRRewriteRuleTokenStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F70B11C20C4C2B7900C3ECE0 /* ANTLRRewriteRuleTokenStream.m */; }; + F70BB391098E5BB80054FEF8 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F70BB390098E5BB80054FEF8 /* SenTestingKit.framework */; }; + F70BB39D098E62740054FEF8 /* TestBitSet.m in Sources */ = {isa = PBXBuildFile; fileRef = F70BB39C098E62740054FEF8 /* TestBitSet.m */; }; + F71325880C4A060900B99F2D /* ANTLRRewriteRuleElementStream.h in Headers */ = {isa = PBXBuildFile; fileRef = F71325860C4A060900B99F2D /* ANTLRRewriteRuleElementStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F71325890C4A060900B99F2D /* ANTLRRewriteRuleElementStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F71325870C4A060900B99F2D /* ANTLRRewriteRuleElementStream.m */; }; + F71F6A0509A8159F003221F4 /* ANTLR.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* ANTLR.framework */; }; + F71F6B9009A81E6F003221F4 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F71F6B8F09A81E6F003221F4 /* CoreFoundation.framework */; }; + F72C56DD0AB3411000282574 /* ANTLRTreeAdaptor.m in Sources */ = {isa = PBXBuildFile; fileRef = F72C56DC0AB3411000282574 /* ANTLRTreeAdaptor.m */; }; + F72C58EA0AB3911D00282574 /* ANTLRCommonTree.h in Headers */ = {isa = PBXBuildFile; fileRef = F72C58E80AB3911D00282574 /* ANTLRCommonTree.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F72C58EB0AB3911D00282574 /* ANTLRCommonTree.m in Sources */ = {isa = PBXBuildFile; fileRef = F72C58E90AB3911D00282574 /* ANTLRCommonTree.m */; }; + F72C59A70AB4F20A00282574 /* ANTLRCommonTreeAdaptor.h in Headers */ = {isa = PBXBuildFile; fileRef = F72C59A50AB4F20A00282574 /* ANTLRCommonTreeAdaptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F72C59A80AB4F20A00282574 /* ANTLRCommonTreeAdaptor.m in Sources */ = {isa = PBXBuildFile; fileRef = F72C59A60AB4F20A00282574 /* ANTLRCommonTreeAdaptor.m */; }; + F72C5B840AB52AD300282574 /* ANTLRTreeNodeStream.h in Headers */ = {isa = PBXBuildFile; fileRef = F72C5B820AB52AD300282574 /* ANTLRTreeNodeStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F72C5D560AB63C1D00282574 /* ANTLRTreeParser.h in Headers */ = {isa = PBXBuildFile; fileRef = F72C5D540AB63C1D00282574 /* ANTLRTreeParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F72C5D570AB63C1D00282574 /* ANTLRTreeParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F72C5D550AB63C1D00282574 /* ANTLRTreeParser.m */; }; + F72C5D620AB63E0B00282574 /* ANTLRMismatchedTreeNodeException.h in Headers */ = {isa = PBXBuildFile; fileRef = F72C5D600AB63E0B00282574 /* ANTLRMismatchedTreeNodeException.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F72C5D630AB63E0B00282574 /* ANTLRMismatchedTreeNodeException.m in Sources */ = {isa = PBXBuildFile; fileRef = F72C5D610AB63E0B00282574 /* ANTLRMismatchedTreeNodeException.m */; }; + F72C5E620AB7E4C900282574 /* ANTLR.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* ANTLR.framework */; }; + F72C5E630AB7E4C900282574 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; }; + F72C5E640AB7E4C900282574 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; + F72C5E650AB7E4C900282574 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F71F6B8F09A81E6F003221F4 /* CoreFoundation.framework */; }; + F72C5ECE0AB7E5A500282574 /* ANTLRParserRuleReturnScope.h in Headers */ = {isa = PBXBuildFile; fileRef = F72C5ECC0AB7E5A500282574 /* ANTLRParserRuleReturnScope.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F72C5ECF0AB7E5A500282574 /* ANTLRParserRuleReturnScope.m in Sources */ = {isa = PBXBuildFile; fileRef = F72C5ECD0AB7E5A500282574 /* ANTLRParserRuleReturnScope.m */; }; + F738D1770B07AEAA001813C4 /* ANTLRFailedPredicateException.h in Headers */ = {isa = PBXBuildFile; fileRef = F738D1730B07AEAA001813C4 /* ANTLRFailedPredicateException.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F738D1780B07AEAA001813C4 /* ANTLRFailedPredicateException.m in Sources */ = {isa = PBXBuildFile; fileRef = F738D1740B07AEAA001813C4 /* ANTLRFailedPredicateException.m */; }; + F738D1790B07AEAA001813C4 /* ANTLRTreeException.h in Headers */ = {isa = PBXBuildFile; fileRef = F738D1750B07AEAA001813C4 /* ANTLRTreeException.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F738D17A0B07AEAA001813C4 /* ANTLRTreeException.m in Sources */ = {isa = PBXBuildFile; fileRef = F738D1760B07AEAA001813C4 /* ANTLRTreeException.m */; }; + F738D1FC0B07B1BD001813C4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F7DD07800A7B67A7006A006C /* main.m */; }; + F738D20D0B07B265001813C4 /* SymbolTableParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F738D2010B07B1CE001813C4 /* SymbolTableParser.m */; }; + F738D20E0B07B266001813C4 /* SymbolTableLexer.m in Sources */ = {isa = PBXBuildFile; fileRef = F738D1FF0B07B1CE001813C4 /* SymbolTableLexer.m */; }; + F738D2120B07B32D001813C4 /* T.g in Sources */ = {isa = PBXBuildFile; fileRef = F7DD05E40A7B14BE006A006C /* T.g */; }; + F738D2220B07B39F001813C4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F7DD05E70A7B1572006A006C /* main.m */; }; + F738D3190B07BDB7001813C4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F700ECE70A5FE25D005D0757 /* main.m */; }; + F738D3610B07C105001813C4 /* CombinedLexer.m in Sources */ = {isa = PBXBuildFile; fileRef = F738D35E0B07C105001813C4 /* CombinedLexer.m */; }; + F738D3620B07C105001813C4 /* CombinedParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F738D3600B07C105001813C4 /* CombinedParser.m */; }; + F738D3630B07C10A001813C4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F700E86A0A5FA34D005D0757 /* main.m */; }; + F738D37E0B07C3BD001813C4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F79D56C00A0E287500EA3CEE /* main.m */; }; + F73E2B740A9CFE6A005D6267 /* ANTLRTree.h in Headers */ = {isa = PBXBuildFile; fileRef = F73E2B720A9CFE6A005D6267 /* ANTLRTree.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F73E2B7C0A9D0AFC005D6267 /* ANTLRTreeAdaptor.h in Headers */ = {isa = PBXBuildFile; fileRef = F73E2B7A0A9D0AFC005D6267 /* ANTLRTreeAdaptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F741D0830B381E720024DF3F /* SimpleCTP.m in Sources */ = {isa = PBXBuildFile; fileRef = F741D0650B3812D40024DF3F /* SimpleCTP.m */; }; + F741D0840B381E730024DF3F /* SimpleCParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F7715D310AC9DE9E00ED984D /* SimpleCParser.m */; }; + F741D08E0B381EA90024DF3F /* SimpleCLexer.m in Sources */ = {isa = PBXBuildFile; fileRef = F7715D2F0AC9DE9E00ED984D /* SimpleCLexer.m */; }; + F7492DF109C00E4800B25E30 /* TestStringStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F7492DEE09C00E4500B25E30 /* TestStringStream.m */; }; + F7492F5C09C016A200B25E30 /* ANTLRBaseRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = F7A4098C09659BF3002CC781 /* ANTLRBaseRecognizer.m */; }; + F7492F5D09C016A200B25E30 /* ANTLRBaseRecognizer.h in Headers */ = {isa = PBXBuildFile; fileRef = F7A4098B09659BF3002CC781 /* ANTLRBaseRecognizer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7568FAF0AAB8C6E00F6FB41 /* ANTLRTree.m in Sources */ = {isa = PBXBuildFile; fileRef = F7568FAE0AAB8C6E00F6FB41 /* ANTLRTree.m */; }; + F7623C540B3616240022547D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F72C5E560AB7E41000282574 /* main.m */; }; + F76287130B714E77006AA7EF /* TLexer.m in Sources */ = {isa = PBXBuildFile; fileRef = F7DD06E80A7B1700006A006C /* TLexer.m */; }; + F76287140B714E78006AA7EF /* TParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F738D2240B07B3BC001813C4 /* TParser.m */; }; + F76287150B714E82006AA7EF /* SimpleCParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F738D2510B07B842001813C4 /* SimpleCParser.m */; }; + F76287160B714E83006AA7EF /* SimpleCLexer.m in Sources */ = {isa = PBXBuildFile; fileRef = F738D2810B07B9B6001813C4 /* SimpleCLexer.m */; }; + F76287170B714EA9006AA7EF /* FuzzyJavaLexer.m in Sources */ = {isa = PBXBuildFile; fileRef = F72B8D0B0AD01DCB0013F1E2 /* FuzzyJavaLexer.m */; }; + F763D4490A666D3D0061CD35 /* ANTLR.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* ANTLR.framework */; }; + F763D51D0A6676590061CD35 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; + F763D51E0A66765B0061CD35 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F71F6B8F09A81E6F003221F4 /* CoreFoundation.framework */; }; + F76AA8150CE9E29400AF044C /* ANTLRTreeParserRuleReturnScope.h in Headers */ = {isa = PBXBuildFile; fileRef = F76AA8130CE9E29400AF044C /* ANTLRTreeParserRuleReturnScope.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F76AA8160CE9E29400AF044C /* ANTLRTreeParserRuleReturnScope.m in Sources */ = {isa = PBXBuildFile; fileRef = F76AA8140CE9E29400AF044C /* ANTLRTreeParserRuleReturnScope.m */; }; + F76AA8F70CEA290C00AF044C /* ANTLRUnbufferedCommonTreeNodeStream.h in Headers */ = {isa = PBXBuildFile; fileRef = F76AA8F50CEA290C00AF044C /* ANTLRUnbufferedCommonTreeNodeStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F76AA8F80CEA290C00AF044C /* ANTLRUnbufferedCommonTreeNodeStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F76AA8F60CEA290C00AF044C /* ANTLRUnbufferedCommonTreeNodeStream.m */; }; + F76AA91E0CEA2DC600AF044C /* ANTLRUnbufferedCommonTreeNodeStreamState.h in Headers */ = {isa = PBXBuildFile; fileRef = F76AA91C0CEA2DC600AF044C /* ANTLRUnbufferedCommonTreeNodeStreamState.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F76AA91F0CEA2DC600AF044C /* ANTLRUnbufferedCommonTreeNodeStreamState.m in Sources */ = {isa = PBXBuildFile; fileRef = F76AA91D0CEA2DC600AF044C /* ANTLRUnbufferedCommonTreeNodeStreamState.m */; }; + F76AA9900CEA515A00AF044C /* ANTLRCommonTreeNodeStream.h in Headers */ = {isa = PBXBuildFile; fileRef = F76AA98E0CEA515A00AF044C /* ANTLRCommonTreeNodeStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F76AA9910CEA515A00AF044C /* ANTLRCommonTreeNodeStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F76AA98F0CEA515A00AF044C /* ANTLRCommonTreeNodeStream.m */; }; + F7754E3F0A5C0A0500D0873A /* ANTLRDFA.h in Headers */ = {isa = PBXBuildFile; fileRef = F7754E3D0A5C0A0500D0873A /* ANTLRDFA.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7754E400A5C0A0500D0873A /* ANTLRDFA.m in Sources */ = {isa = PBXBuildFile; fileRef = F7754E3E0A5C0A0500D0873A /* ANTLRDFA.m */; }; + F77744050B234A3400D1F89B /* ANTLRToken+DebuggerSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = F77744030B234A3400D1F89B /* ANTLRToken+DebuggerSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F77744060B234A3400D1F89B /* ANTLRToken+DebuggerSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = F77744040B234A3400D1F89B /* ANTLRToken+DebuggerSupport.m */; }; + F77747560B23A70600D1F89B /* ANTLRDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = F77747550B23A70600D1F89B /* ANTLRDebug.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F77765CC09DC583000517181 /* ANTLRToken.h in Headers */ = {isa = PBXBuildFile; fileRef = F77765CA09DC583000517181 /* ANTLRToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F777660509DC5CF400517181 /* ANTLRCommonToken.h in Headers */ = {isa = PBXBuildFile; fileRef = F777660309DC5CF400517181 /* ANTLRCommonToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F777660609DC5CF400517181 /* ANTLRCommonToken.m in Sources */ = {isa = PBXBuildFile; fileRef = F777660409DC5CF400517181 /* ANTLRCommonToken.m */; }; + F777668209DC719C00517181 /* ANTLRMismatchedTokenException.h in Headers */ = {isa = PBXBuildFile; fileRef = F777668009DC719C00517181 /* ANTLRMismatchedTokenException.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F777668309DC719C00517181 /* ANTLRMismatchedTokenException.m in Sources */ = {isa = PBXBuildFile; fileRef = F777668109DC719C00517181 /* ANTLRMismatchedTokenException.m */; }; + F777669309DC72D600517181 /* ANTLRRecognitionException.h in Headers */ = {isa = PBXBuildFile; fileRef = F777669109DC72D600517181 /* ANTLRRecognitionException.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F777669409DC72D600517181 /* ANTLRRecognitionException.m in Sources */ = {isa = PBXBuildFile; fileRef = F777669209DC72D600517181 /* ANTLRRecognitionException.m */; }; + F77766AF09DD53E800517181 /* ANTLRTokenStream.h in Headers */ = {isa = PBXBuildFile; fileRef = F77766AE09DD53E800517181 /* ANTLRTokenStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F777678C09DD616600517181 /* ANTLRCharStream.h in Headers */ = {isa = PBXBuildFile; fileRef = F70AA7B509AA2B8800C3FD5E /* ANTLRCharStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F777678E09DD618000517181 /* ANTLRLexer.h in Headers */ = {isa = PBXBuildFile; fileRef = F7A4099109659BFB002CC781 /* ANTLRLexer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F777678F09DD618100517181 /* ANTLRLexer.m in Sources */ = {isa = PBXBuildFile; fileRef = F7A4099209659BFB002CC781 /* ANTLRLexer.m */; }; + F7941B480C5934E6006E9A9B /* TestRewriteRuleTokenStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F7941B470C5934E6006E9A9B /* TestRewriteRuleTokenStream.m */; }; + F798B5940B278A0E005BCA94 /* SimpleC.g in Sources */ = {isa = PBXBuildFile; fileRef = F700ECD10A5FE176005D0757 /* SimpleC.g */; }; + F79D598B0A0E51AB00EA3CEE /* ANTLRNoViableAltException.h in Headers */ = {isa = PBXBuildFile; fileRef = F79D59890A0E51AB00EA3CEE /* ANTLRNoViableAltException.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F79D598C0A0E51AB00EA3CEE /* ANTLRNoViableAltException.m in Sources */ = {isa = PBXBuildFile; fileRef = F79D598A0A0E51AB00EA3CEE /* ANTLRNoViableAltException.m */; }; + F79D5AF60A0E634900EA3CEE /* ANTLR.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* ANTLR.framework */; }; + F79D5AF70A0E634A00EA3CEE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; }; + F79D5AF80A0E634A00EA3CEE /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; + F7B1E5B00CD7CF1900CE136E /* ANTLRBaseRecognizerState.h in Headers */ = {isa = PBXBuildFile; fileRef = F7B1E5AC0CD7CF1900CE136E /* ANTLRBaseRecognizerState.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7B1E5B10CD7CF1900CE136E /* ANTLRBaseRecognizerState.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B1E5AD0CD7CF1900CE136E /* ANTLRBaseRecognizerState.m */; }; + F7B1E5B20CD7CF1900CE136E /* ANTLRLexerState.h in Headers */ = {isa = PBXBuildFile; fileRef = F7B1E5AE0CD7CF1900CE136E /* ANTLRLexerState.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7B1E5B30CD7CF1900CE136E /* ANTLRLexerState.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B1E5AF0CD7CF1900CE136E /* ANTLRLexerState.m */; }; + F7CD47650C64D24C00FF933A /* TreeRewriteLexer.m in Sources */ = {isa = PBXBuildFile; fileRef = F7CD46360C64BB7300FF933A /* TreeRewriteLexer.m */; }; + F7CD47660C64D24D00FF933A /* TreeRewriteParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F7CD46380C64BB7300FF933A /* TreeRewriteParser.m */; }; + F7CD47670C64D24D00FF933A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F7CD45FC0C64BA4B00FF933A /* main.m */; }; + F7CD48670C64D88800FF933A /* ANTLR.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* ANTLR.framework */; }; + F7CD48680C64D88800FF933A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; }; + F7CD48690C64D88800FF933A /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; + F7CD486A0C64D88800FF933A /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F71F6B8F09A81E6F003221F4 /* CoreFoundation.framework */; }; + F7CECD7E0B1E5C370054CC3B /* ANTLRDebugEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = F7CECD7D0B1E5C370054CC3B /* ANTLRDebugEventListener.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7DD06040A7B1663006A006C /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; + F7DD06070A7B1664006A006C /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F71F6B8F09A81E6F003221F4 /* CoreFoundation.framework */; }; + F7DD06300A7B1665006A006C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; }; + F7DD06C50A7B1691006A006C /* ANTLR.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* ANTLR.framework */; }; + F7DD074C0A7B6656006A006C /* ANTLR.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* ANTLR.framework */; }; + F7DD074D0A7B665C006A006C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; }; + F7DD074E0A7B665D006A006C /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; + F7DD074F0A7B665D006A006C /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F71F6B8F09A81E6F003221F4 /* CoreFoundation.framework */; }; + F7E261160B1E44320013F640 /* ANTLRDebugParser.h in Headers */ = {isa = PBXBuildFile; fileRef = F7E261140B1E44320013F640 /* ANTLRDebugParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7E261170B1E44320013F640 /* ANTLRDebugParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F7E261150B1E44320013F640 /* ANTLRDebugParser.m */; }; + F7E2611A0B1E443D0013F640 /* ANTLRDebugTreeParser.h in Headers */ = {isa = PBXBuildFile; fileRef = F7E261180B1E443C0013F640 /* ANTLRDebugTreeParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7E2611B0B1E443D0013F640 /* ANTLRDebugTreeParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F7E261190B1E443C0013F640 /* ANTLRDebugTreeParser.m */; }; + F7E261200B1E44E80013F640 /* ANTLRDebugTokenStream.h in Headers */ = {isa = PBXBuildFile; fileRef = F7E2611E0B1E44E80013F640 /* ANTLRDebugTokenStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7E261210B1E44E80013F640 /* ANTLRDebugTokenStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F7E2611F0B1E44E80013F640 /* ANTLRDebugTokenStream.m */; }; + F7E261240B1E44FA0013F640 /* ANTLRDebugTreeNodeStream.h in Headers */ = {isa = PBXBuildFile; fileRef = F7E261220B1E44FA0013F640 /* ANTLRDebugTreeNodeStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7E261250B1E44FA0013F640 /* ANTLRDebugTreeNodeStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F7E261230B1E44FA0013F640 /* ANTLRDebugTreeNodeStream.m */; }; + F7E261280B1E45070013F640 /* ANTLRDebugTreeAdaptor.h in Headers */ = {isa = PBXBuildFile; fileRef = F7E261260B1E45070013F640 /* ANTLRDebugTreeAdaptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7E261290B1E45070013F640 /* ANTLRDebugTreeAdaptor.m in Sources */ = {isa = PBXBuildFile; fileRef = F7E261270B1E45070013F640 /* ANTLRDebugTreeAdaptor.m */; }; + F7E261390B1E45580013F640 /* ANTLRDebugEventProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = F7E261370B1E45580013F640 /* ANTLRDebugEventProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7E2613A0B1E45580013F640 /* ANTLRDebugEventProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = F7E261380B1E45580013F640 /* ANTLRDebugEventProxy.m */; }; + F7E985580A0D865E00F16093 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; }; + F7E985590A0D866000F16093 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; + F7F218F0097AFB1A000472E9 /* ANTLRBitSet.h in Headers */ = {isa = PBXBuildFile; fileRef = F7F218EE097AFB1A000472E9 /* ANTLRBitSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7F218F1097AFB1A000472E9 /* ANTLRBitSet.m in Sources */ = {isa = PBXBuildFile; fileRef = F7F218EF097AFB1A000472E9 /* ANTLRBitSet.m */; }; + F7F4E9BA0A6E8B110092D087 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + F700E8660A5FA32E005D0757 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8DC2EF4F0486A6940098B216; + remoteInfo = ANTLR; + }; + F700F01F0A61498E005D0757 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8DC2EF4F0486A6940098B216; + remoteInfo = ANTLR; + }; + F7037EA40A05AFCB0070435D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8DC2EF4F0486A6940098B216; + remoteInfo = ANTLR; + }; + F72C5E5C0AB7E4C900282574 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8DC2EF4F0486A6940098B216; + remoteInfo = ANTLR; + }; + F762874B0B715417006AA7EF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F76287450B7151E3006AA7EF; + remoteInfo = "Regenerate fuzzy"; + }; + F76287A60B7157C2006AA7EF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F762877E0B71559C006AA7EF; + remoteInfo = "Regenerate combined"; + }; + F76287A80B7157C2006AA7EF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F76287820B71559F006AA7EF; + remoteInfo = "Regenerate LL-star"; + }; + F76287AA0B7157C2006AA7EF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F76287860B7155A2006AA7EF; + remoteInfo = "Regenerate hoistedPredicates"; + }; + F76287AC0B7157C2006AA7EF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F762878A0B7155AB006AA7EF; + remoteInfo = "Regenerate scopes"; + }; + F76287AE0B7157C2006AA7EF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F762878E0B7155AF006AA7EF; + remoteInfo = "Regenerate simplec tree"; + }; + F79D5AF10A0E632A00EA3CEE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8DC2EF4F0486A6940098B216; + remoteInfo = ANTLR; + }; + F79EFB130C5845A300ABAB3D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F76287780B71557E006AA7EF; + remoteInfo = "Regenerate lexertest-simple"; + }; + F7CD475F0C64D22F00FF933A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8DC2EF4F0486A6940098B216; + remoteInfo = ANTLR; + }; + F7DD05F30A7B1649006A006C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8DC2EF4F0486A6940098B216; + remoteInfo = ANTLR; + }; + F7DD07500A7B6666006A006C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8DC2EF4F0486A6940098B216; + remoteInfo = ANTLR; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + F706A5710A0EC357008999AB /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 16; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0867D69BFE84028FC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; + 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 32DBCF5E0370ADEE00C91783 /* ANTLR_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLR_Prefix.pch; sourceTree = ""; }; + 8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 8DC2EF5B0486A6940098B216 /* ANTLR.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ANTLR.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F7009AD90A1BE4AE002EDD5D /* ANTLRLexerRuleReturnScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRLexerRuleReturnScope.h; sourceTree = ""; }; + F7009ADA0A1BE4AE002EDD5D /* ANTLRLexerRuleReturnScope.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRLexerRuleReturnScope.m; sourceTree = ""; }; + F700E6190A5F66EC005D0757 /* ANTLREarlyExitException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLREarlyExitException.h; sourceTree = ""; }; + F700E61A0A5F66EC005D0757 /* ANTLREarlyExitException.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLREarlyExitException.m; sourceTree = ""; }; + F700E85E0A5FA2DE005D0757 /* Combined.g */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = Combined.g; path = combined/Combined.g; sourceTree = ""; }; + F700E8640A5FA31D005D0757 /* combined */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = combined; sourceTree = BUILT_PRODUCTS_DIR; }; + F700E86A0A5FA34D005D0757 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = combined/main.m; sourceTree = ""; }; + F700E8F90A5FAD21005D0757 /* ANTLRParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRParser.h; sourceTree = ""; }; + F700E8FA0A5FAD21005D0757 /* ANTLRParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRParser.m; sourceTree = ""; }; + F700ECCF0A5FE176005D0757 /* input */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = input; sourceTree = ""; }; + F700ECD00A5FE176005D0757 /* output */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = output; sourceTree = ""; }; + F700ECD10A5FE176005D0757 /* SimpleC.g */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SimpleC.g; sourceTree = ""; }; + F700ECD70A5FE186005D0757 /* LL-star */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "LL-star"; sourceTree = BUILT_PRODUCTS_DIR; }; + F700ECE70A5FE25D005D0757 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + F700ED7E0A5FF17C005D0757 /* ANTLRTokenSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRTokenSource.h; sourceTree = ""; }; + F700ED940A5FF2A5005D0757 /* ANTLRCommonTokenStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRCommonTokenStream.h; sourceTree = ""; }; + F700ED950A5FF2A5005D0757 /* ANTLRCommonTokenStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRCommonTokenStream.m; sourceTree = ""; }; + F7037CEE0A0582FC0070435D /* ANTLRMismatchedRangeException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRMismatchedRangeException.h; sourceTree = ""; }; + F7037CEF0A0582FC0070435D /* ANTLRMismatchedRangeException.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRMismatchedRangeException.m; sourceTree = ""; }; + F7037EA00A05AFB60070435D /* lexertest-simple */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "lexertest-simple"; sourceTree = BUILT_PRODUCTS_DIR; }; + F7037EBD0A05B06B0070435D /* Test.gl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = Test.gl; sourceTree = ""; }; + F70380BA0A07FA0D0070435D /* ANTLRMismatchedSetException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRMismatchedSetException.h; sourceTree = ""; }; + F70380BB0A07FA0D0070435D /* ANTLRMismatchedSetException.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRMismatchedSetException.m; sourceTree = ""; }; + F7048FF50B07D05400D2F326 /* Test.tokens */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Test.tokens; sourceTree = ""; }; + F7048FF60B07D05400D2F326 /* TestLexer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestLexer.h; sourceTree = ""; }; + F7048FF70B07D05400D2F326 /* TestLexer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestLexer.m; sourceTree = ""; }; + F706A55B0A0EC307008999AB /* input */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = input; sourceTree = ""; }; + F70AA7A509AA2A6900C3FD5E /* ANTLR.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLR.h; sourceTree = ""; }; + F70AA7AD09AA2AC000C3FD5E /* ANTLRIntStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRIntStream.h; sourceTree = ""; }; + F70AA7B509AA2B8800C3FD5E /* ANTLRCharStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRCharStream.h; sourceTree = ""; }; + F70AA7C509AA339900C3FD5E /* ANTLRStringStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRStringStream.h; sourceTree = ""; }; + F70AA7C609AA339900C3FD5E /* ANTLRStringStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRStringStream.m; sourceTree = ""; }; + F70AA7CD09AA379300C3FD5E /* ANTLRStringStreamState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRStringStreamState.h; sourceTree = ""; }; + F70AA7CE09AA379300C3FD5E /* ANTLRStringStreamState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRStringStreamState.m; sourceTree = ""; }; + F70B11BB0C4C2B6400C3ECE0 /* ANTLRRewriteRuleSubtreeStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRRewriteRuleSubtreeStream.h; sourceTree = ""; }; + F70B11BC0C4C2B6400C3ECE0 /* ANTLRRewriteRuleSubtreeStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRRewriteRuleSubtreeStream.m; sourceTree = ""; }; + F70B11C10C4C2B7900C3ECE0 /* ANTLRRewriteRuleTokenStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRRewriteRuleTokenStream.h; sourceTree = ""; }; + F70B11C20C4C2B7900C3ECE0 /* ANTLRRewriteRuleTokenStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRRewriteRuleTokenStream.m; sourceTree = ""; }; + F70BB380098E5AFF0054FEF8 /* Test.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Test.octest; sourceTree = BUILT_PRODUCTS_DIR; }; + F70BB381098E5B000054FEF8 /* Test-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "Test-Info.plist"; sourceTree = ""; }; + F70BB390098E5BB80054FEF8 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = /System/Library/Frameworks/SenTestingKit.framework; sourceTree = ""; }; + F70BB39B098E62740054FEF8 /* TestBitSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestBitSet.h; path = tests/TestBitSet.h; sourceTree = ""; }; + F70BB39C098E62740054FEF8 /* TestBitSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TestBitSet.m; path = tests/TestBitSet.m; sourceTree = ""; }; + F71325860C4A060900B99F2D /* ANTLRRewriteRuleElementStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRRewriteRuleElementStream.h; sourceTree = ""; }; + F71325870C4A060900B99F2D /* ANTLRRewriteRuleElementStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRRewriteRuleElementStream.m; sourceTree = ""; }; + F71F6B8F09A81E6F003221F4 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; + F72B8CFA0AD01D380013F1E2 /* FuzzyJava.gl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = FuzzyJava.gl; sourceTree = ""; }; + F72B8D090AD01DCB0013F1E2 /* FuzzyJava.tokens */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = FuzzyJava.tokens; sourceTree = ""; }; + F72B8D0A0AD01DCB0013F1E2 /* FuzzyJavaLexer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FuzzyJavaLexer.h; sourceTree = ""; }; + F72B8D0B0AD01DCB0013F1E2 /* FuzzyJavaLexer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FuzzyJavaLexer.m; sourceTree = ""; }; + F72C56DC0AB3411000282574 /* ANTLRTreeAdaptor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRTreeAdaptor.m; sourceTree = ""; }; + F72C58E80AB3911D00282574 /* ANTLRCommonTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRCommonTree.h; sourceTree = ""; }; + F72C58E90AB3911D00282574 /* ANTLRCommonTree.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRCommonTree.m; sourceTree = ""; }; + F72C59A50AB4F20A00282574 /* ANTLRCommonTreeAdaptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRCommonTreeAdaptor.h; sourceTree = ""; }; + F72C59A60AB4F20A00282574 /* ANTLRCommonTreeAdaptor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRCommonTreeAdaptor.m; sourceTree = ""; }; + F72C5B820AB52AD300282574 /* ANTLRTreeNodeStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRTreeNodeStream.h; sourceTree = ""; }; + F72C5D540AB63C1D00282574 /* ANTLRTreeParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRTreeParser.h; sourceTree = ""; }; + F72C5D550AB63C1D00282574 /* ANTLRTreeParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRTreeParser.m; sourceTree = ""; }; + F72C5D600AB63E0B00282574 /* ANTLRMismatchedTreeNodeException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRMismatchedTreeNodeException.h; sourceTree = ""; }; + F72C5D610AB63E0B00282574 /* ANTLRMismatchedTreeNodeException.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRMismatchedTreeNodeException.m; sourceTree = ""; }; + F72C5E2F0AB7529C00282574 /* input */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = input; sourceTree = ""; }; + F72C5E310AB7529C00282574 /* output */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = output; sourceTree = ""; }; + F72C5E560AB7E41000282574 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + F72C5E690AB7E4C900282574 /* simplectree */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = simplectree; sourceTree = BUILT_PRODUCTS_DIR; }; + F72C5ECC0AB7E5A500282574 /* ANTLRParserRuleReturnScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRParserRuleReturnScope.h; sourceTree = ""; }; + F72C5ECD0AB7E5A500282574 /* ANTLRParserRuleReturnScope.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRParserRuleReturnScope.m; sourceTree = ""; }; + F738D1730B07AEAA001813C4 /* ANTLRFailedPredicateException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRFailedPredicateException.h; sourceTree = ""; }; + F738D1740B07AEAA001813C4 /* ANTLRFailedPredicateException.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRFailedPredicateException.m; sourceTree = ""; }; + F738D1750B07AEAA001813C4 /* ANTLRTreeException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRTreeException.h; sourceTree = ""; }; + F738D1760B07AEAA001813C4 /* ANTLRTreeException.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRTreeException.m; sourceTree = ""; }; + F738D1FD0B07B1CE001813C4 /* SymbolTable.tokens */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SymbolTable.tokens; sourceTree = ""; }; + F738D1FE0B07B1CE001813C4 /* SymbolTableLexer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SymbolTableLexer.h; sourceTree = ""; }; + F738D1FF0B07B1CE001813C4 /* SymbolTableLexer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SymbolTableLexer.m; sourceTree = ""; }; + F738D2000B07B1CE001813C4 /* SymbolTableParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SymbolTableParser.h; sourceTree = ""; }; + F738D2010B07B1CE001813C4 /* SymbolTableParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SymbolTableParser.m; sourceTree = ""; }; + F738D2230B07B3BC001813C4 /* TParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TParser.h; sourceTree = ""; }; + F738D2240B07B3BC001813C4 /* TParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TParser.m; sourceTree = ""; }; + F738D2510B07B842001813C4 /* SimpleCParser.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SimpleCParser.m; sourceTree = ""; }; + F738D27F0B07B9B6001813C4 /* SimpleC.tokens */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SimpleC.tokens; sourceTree = ""; }; + F738D2800B07B9B6001813C4 /* SimpleCLexer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleCLexer.h; sourceTree = ""; }; + F738D2810B07B9B6001813C4 /* SimpleCLexer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SimpleCLexer.m; sourceTree = ""; }; + F738D2820B07B9B6001813C4 /* SimpleCParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleCParser.h; sourceTree = ""; }; + F738D35C0B07C105001813C4 /* Combined.tokens */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Combined.tokens; path = combined/Combined.tokens; sourceTree = ""; }; + F738D35D0B07C105001813C4 /* CombinedLexer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CombinedLexer.h; path = combined/CombinedLexer.h; sourceTree = ""; }; + F738D35E0B07C105001813C4 /* CombinedLexer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CombinedLexer.m; path = combined/CombinedLexer.m; sourceTree = ""; }; + F738D35F0B07C105001813C4 /* CombinedParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CombinedParser.h; path = combined/CombinedParser.h; sourceTree = ""; }; + F738D3600B07C105001813C4 /* CombinedParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CombinedParser.m; path = combined/CombinedParser.m; sourceTree = ""; }; + F73E2B720A9CFE6A005D6267 /* ANTLRTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRTree.h; sourceTree = ""; }; + F73E2B7A0A9D0AFC005D6267 /* ANTLRTreeAdaptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRTreeAdaptor.h; sourceTree = ""; }; + F741D0640B3812D40024DF3F /* SimpleCTP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleCTP.h; sourceTree = ""; }; + F741D0650B3812D40024DF3F /* SimpleCTP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SimpleCTP.m; sourceTree = ""; }; + F7492DED09C00E4500B25E30 /* TestStringStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestStringStream.h; path = tests/TestStringStream.h; sourceTree = ""; }; + F7492DEE09C00E4500B25E30 /* TestStringStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TestStringStream.m; path = tests/TestStringStream.m; sourceTree = ""; }; + F7568FAE0AAB8C6E00F6FB41 /* ANTLRTree.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRTree.m; sourceTree = ""; }; + F762879C0B71578D006AA7EF /* README.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = README.rtf; sourceTree = ""; }; + F76AA8130CE9E29400AF044C /* ANTLRTreeParserRuleReturnScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRTreeParserRuleReturnScope.h; sourceTree = ""; }; + F76AA8140CE9E29400AF044C /* ANTLRTreeParserRuleReturnScope.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRTreeParserRuleReturnScope.m; sourceTree = ""; }; + F76AA8F50CEA290C00AF044C /* ANTLRUnbufferedCommonTreeNodeStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRUnbufferedCommonTreeNodeStream.h; sourceTree = ""; }; + F76AA8F60CEA290C00AF044C /* ANTLRUnbufferedCommonTreeNodeStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRUnbufferedCommonTreeNodeStream.m; sourceTree = ""; }; + F76AA91C0CEA2DC600AF044C /* ANTLRUnbufferedCommonTreeNodeStreamState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRUnbufferedCommonTreeNodeStreamState.h; sourceTree = ""; }; + F76AA91D0CEA2DC600AF044C /* ANTLRUnbufferedCommonTreeNodeStreamState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRUnbufferedCommonTreeNodeStreamState.m; sourceTree = ""; }; + F76AA98E0CEA515A00AF044C /* ANTLRCommonTreeNodeStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRCommonTreeNodeStream.h; sourceTree = ""; }; + F76AA98F0CEA515A00AF044C /* ANTLRCommonTreeNodeStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRCommonTreeNodeStream.m; sourceTree = ""; }; + F7715D1A0AC9DCE400ED984D /* SimpleC.g */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SimpleC.g; sourceTree = ""; }; + F7715D1B0AC9DCE500ED984D /* SimpleCTP.gtp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SimpleCTP.gtp; sourceTree = ""; }; + F7715D1C0AC9DDD800ED984D /* SimpleC.tokens */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SimpleC.tokens; sourceTree = ""; }; + F7715D1D0AC9DDD800ED984D /* SimpleCTP.tokens */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SimpleCTP.tokens; sourceTree = ""; }; + F7715D2E0AC9DE9E00ED984D /* SimpleCLexer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleCLexer.h; sourceTree = ""; }; + F7715D2F0AC9DE9E00ED984D /* SimpleCLexer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SimpleCLexer.m; sourceTree = ""; }; + F7715D300AC9DE9E00ED984D /* SimpleCParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleCParser.h; sourceTree = ""; }; + F7715D310AC9DE9E00ED984D /* SimpleCParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SimpleCParser.m; sourceTree = ""; }; + F7754E3D0A5C0A0500D0873A /* ANTLRDFA.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRDFA.h; sourceTree = ""; }; + F7754E3E0A5C0A0500D0873A /* ANTLRDFA.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRDFA.m; sourceTree = ""; }; + F77744030B234A3400D1F89B /* ANTLRToken+DebuggerSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ANTLRToken+DebuggerSupport.h"; sourceTree = ""; }; + F77744040B234A3400D1F89B /* ANTLRToken+DebuggerSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ANTLRToken+DebuggerSupport.m"; sourceTree = ""; }; + F77747550B23A70600D1F89B /* ANTLRDebug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRDebug.h; sourceTree = ""; }; + F77765CA09DC583000517181 /* ANTLRToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRToken.h; sourceTree = ""; }; + F777660309DC5CF400517181 /* ANTLRCommonToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRCommonToken.h; sourceTree = ""; }; + F777660409DC5CF400517181 /* ANTLRCommonToken.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRCommonToken.m; sourceTree = ""; }; + F777668009DC719C00517181 /* ANTLRMismatchedTokenException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRMismatchedTokenException.h; sourceTree = ""; }; + F777668109DC719C00517181 /* ANTLRMismatchedTokenException.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRMismatchedTokenException.m; sourceTree = ""; }; + F777669109DC72D600517181 /* ANTLRRecognitionException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRRecognitionException.h; sourceTree = ""; }; + F777669209DC72D600517181 /* ANTLRRecognitionException.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRRecognitionException.m; sourceTree = ""; }; + F77766AE09DD53E800517181 /* ANTLRTokenStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRTokenStream.h; sourceTree = ""; }; + F7941B460C5934E6006E9A9B /* TestRewriteRuleTokenStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestRewriteRuleTokenStream.h; sourceTree = ""; }; + F7941B470C5934E6006E9A9B /* TestRewriteRuleTokenStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestRewriteRuleTokenStream.m; sourceTree = ""; }; + F79D56600A0E23A400EA3CEE /* fuzzy */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = fuzzy; sourceTree = BUILT_PRODUCTS_DIR; }; + F79D56C00A0E287500EA3CEE /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + F79D59890A0E51AB00EA3CEE /* ANTLRNoViableAltException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRNoViableAltException.h; sourceTree = ""; }; + F79D598A0A0E51AB00EA3CEE /* ANTLRNoViableAltException.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRNoViableAltException.m; sourceTree = ""; }; + F7A4098B09659BF3002CC781 /* ANTLRBaseRecognizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRBaseRecognizer.h; sourceTree = ""; }; + F7A4098C09659BF3002CC781 /* ANTLRBaseRecognizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRBaseRecognizer.m; sourceTree = ""; }; + F7A4099109659BFB002CC781 /* ANTLRLexer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRLexer.h; sourceTree = ""; }; + F7A4099209659BFB002CC781 /* ANTLRLexer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRLexer.m; sourceTree = ""; }; + F7B1E5AC0CD7CF1900CE136E /* ANTLRBaseRecognizerState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRBaseRecognizerState.h; sourceTree = ""; }; + F7B1E5AD0CD7CF1900CE136E /* ANTLRBaseRecognizerState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRBaseRecognizerState.m; sourceTree = ""; }; + F7B1E5AE0CD7CF1900CE136E /* ANTLRLexerState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRLexerState.h; sourceTree = ""; }; + F7B1E5AF0CD7CF1900CE136E /* ANTLRLexerState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRLexerState.m; sourceTree = ""; }; + F7CD45FC0C64BA4B00FF933A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + F7CD45FD0C64BA4B00FF933A /* TreeRewrite.g */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TreeRewrite.g; sourceTree = ""; }; + F7CD46340C64BB7300FF933A /* TreeRewrite.tokens */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TreeRewrite.tokens; sourceTree = ""; }; + F7CD46350C64BB7300FF933A /* TreeRewriteLexer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TreeRewriteLexer.h; sourceTree = ""; }; + F7CD46360C64BB7300FF933A /* TreeRewriteLexer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TreeRewriteLexer.m; sourceTree = ""; }; + F7CD46370C64BB7300FF933A /* TreeRewriteParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TreeRewriteParser.h; sourceTree = ""; }; + F7CD46380C64BB7300FF933A /* TreeRewriteParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TreeRewriteParser.m; sourceTree = ""; }; + F7CD475D0C64D22800FF933A /* treerewrite */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = treerewrite; sourceTree = BUILT_PRODUCTS_DIR; }; + F7CECD7D0B1E5C370054CC3B /* ANTLRDebugEventListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRDebugEventListener.h; sourceTree = ""; }; + F7DD05E20A7B14BE006A006C /* input */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = input; sourceTree = ""; }; + F7DD05E30A7B14BE006A006C /* output */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = output; sourceTree = ""; }; + F7DD05E40A7B14BE006A006C /* T.g */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = T.g; sourceTree = ""; }; + F7DD05E70A7B1572006A006C /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + F7DD05EE0A7B15E1006A006C /* hoistedPredicates */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = hoistedPredicates; sourceTree = BUILT_PRODUCTS_DIR; }; + F7DD06E70A7B1700006A006C /* TLexer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = TLexer.h; sourceTree = ""; }; + F7DD06E80A7B1700006A006C /* TLexer.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = TLexer.m; sourceTree = ""; }; + F7DD073C0A7B660A006A006C /* input */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = input; sourceTree = ""; }; + F7DD073D0A7B660A006A006C /* output */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = output; sourceTree = ""; }; + F7DD073E0A7B660A006A006C /* SymbolTable.g */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SymbolTable.g; sourceTree = ""; }; + F7DD07440A7B6618006A006C /* scopes */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = scopes; sourceTree = BUILT_PRODUCTS_DIR; }; + F7DD07800A7B67A7006A006C /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + F7E261140B1E44320013F640 /* ANTLRDebugParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRDebugParser.h; sourceTree = ""; }; + F7E261150B1E44320013F640 /* ANTLRDebugParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRDebugParser.m; sourceTree = ""; }; + F7E261180B1E443C0013F640 /* ANTLRDebugTreeParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRDebugTreeParser.h; sourceTree = ""; }; + F7E261190B1E443C0013F640 /* ANTLRDebugTreeParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRDebugTreeParser.m; sourceTree = ""; }; + F7E2611E0B1E44E80013F640 /* ANTLRDebugTokenStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRDebugTokenStream.h; sourceTree = ""; }; + F7E2611F0B1E44E80013F640 /* ANTLRDebugTokenStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRDebugTokenStream.m; sourceTree = ""; }; + F7E261220B1E44FA0013F640 /* ANTLRDebugTreeNodeStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRDebugTreeNodeStream.h; sourceTree = ""; }; + F7E261230B1E44FA0013F640 /* ANTLRDebugTreeNodeStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRDebugTreeNodeStream.m; sourceTree = ""; }; + F7E261260B1E45070013F640 /* ANTLRDebugTreeAdaptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRDebugTreeAdaptor.h; sourceTree = ""; }; + F7E261270B1E45070013F640 /* ANTLRDebugTreeAdaptor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRDebugTreeAdaptor.m; sourceTree = ""; }; + F7E261370B1E45580013F640 /* ANTLRDebugEventProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRDebugEventProxy.h; sourceTree = ""; }; + F7E261380B1E45580013F640 /* ANTLRDebugEventProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRDebugEventProxy.m; sourceTree = ""; }; + F7E983940A0D6A5F00F16093 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + F7EFFC8B0D164E2C008EE57E /* CHANGES.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CHANGES.txt; sourceTree = ""; }; + F7F218EE097AFB1A000472E9 /* ANTLRBitSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRBitSet.h; sourceTree = ""; }; + F7F218EF097AFB1A000472E9 /* ANTLRBitSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRBitSet.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DC2EF560486A6940098B216 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F763D51D0A6676590061CD35 /* Cocoa.framework in Frameworks */, + F763D51E0A66765B0061CD35 /* CoreFoundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F700E8620A5FA31D005D0757 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F700ECA40A5FDF1A005D0757 /* CoreFoundation.framework in Frameworks */, + F700ECA50A5FDF1A005D0757 /* Cocoa.framework in Frameworks */, + F700EC670A5FDF0D005D0757 /* ANTLR.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F700ECD50A5FE186005D0757 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F7F4E9BA0A6E8B110092D087 /* Foundation.framework in Frameworks */, + F763D4490A666D3D0061CD35 /* ANTLR.framework in Frameworks */, + F700ECD90A5FE19A005D0757 /* CoreFoundation.framework in Frameworks */, + F700ECDA0A5FE19A005D0757 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F7037E9E0A05AFB60070435D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F7037EA60A05AFD70070435D /* ANTLR.framework in Frameworks */, + F7E985580A0D865E00F16093 /* Foundation.framework in Frameworks */, + F7E985590A0D866000F16093 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F70BB37D098E5AFF0054FEF8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F71F6A0509A8159F003221F4 /* ANTLR.framework in Frameworks */, + F70BB391098E5BB80054FEF8 /* SenTestingKit.framework in Frameworks */, + F71F6B9009A81E6F003221F4 /* CoreFoundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F72C5E610AB7E4C900282574 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F72C5E620AB7E4C900282574 /* ANTLR.framework in Frameworks */, + F72C5E630AB7E4C900282574 /* Foundation.framework in Frameworks */, + F72C5E640AB7E4C900282574 /* Cocoa.framework in Frameworks */, + F72C5E650AB7E4C900282574 /* CoreFoundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F79D565E0A0E23A400EA3CEE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F79D5AF60A0E634900EA3CEE /* ANTLR.framework in Frameworks */, + F79D5AF70A0E634A00EA3CEE /* Foundation.framework in Frameworks */, + F79D5AF80A0E634A00EA3CEE /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F7CD475B0C64D22800FF933A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F7CD48670C64D88800FF933A /* ANTLR.framework in Frameworks */, + F7CD48680C64D88800FF933A /* Foundation.framework in Frameworks */, + F7CD48690C64D88800FF933A /* Cocoa.framework in Frameworks */, + F7CD486A0C64D88800FF933A /* CoreFoundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F7DD05EC0A7B15E1006A006C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F7DD06040A7B1663006A006C /* Cocoa.framework in Frameworks */, + F7DD06070A7B1664006A006C /* CoreFoundation.framework in Frameworks */, + F7DD06300A7B1665006A006C /* Foundation.framework in Frameworks */, + F7DD06C50A7B1691006A006C /* ANTLR.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F7DD07420A7B6618006A006C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F7DD074C0A7B6656006A006C /* ANTLR.framework in Frameworks */, + F7DD074D0A7B665C006A006C /* Foundation.framework in Frameworks */, + F7DD074E0A7B665D006A006C /* Cocoa.framework in Frameworks */, + F7DD074F0A7B665D006A006C /* CoreFoundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 034768DFFF38A50411DB9C8B /* Products */ = { + isa = PBXGroup; + children = ( + 8DC2EF5B0486A6940098B216 /* ANTLR.framework */, + F70BB380098E5AFF0054FEF8 /* Test.octest */, + F7037EA00A05AFB60070435D /* lexertest-simple */, + F79D56600A0E23A400EA3CEE /* fuzzy */, + F700E8640A5FA31D005D0757 /* combined */, + F700ECD70A5FE186005D0757 /* LL-star */, + F7DD05EE0A7B15E1006A006C /* hoistedPredicates */, + F7DD07440A7B6618006A006C /* scopes */, + F72C5E690AB7E4C900282574 /* simplectree */, + F7CD475D0C64D22800FF933A /* treerewrite */, + ); + name = Products; + sourceTree = ""; + }; + 0867D691FE84028FC02AAC07 /* ANTLR */ = { + isa = PBXGroup; + children = ( + F762879C0B71578D006AA7EF /* README.rtf */, + F7EFFC8B0D164E2C008EE57E /* CHANGES.txt */, + F7037EBB0A05B06B0070435D /* examples */, + F70BB396098E5BE90054FEF8 /* Tests */, + 08FB77AEFE84172EC02AAC07 /* Classes */, + 32C88DFF0371C24200C91783 /* Other Sources */, + 089C1665FE841158C02AAC07 /* Resources */, + 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */, + 034768DFFF38A50411DB9C8B /* Products */, + F70BB381098E5B000054FEF8 /* Test-Info.plist */, + ); + name = ANTLR; + sourceTree = ""; + }; + 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + F70BB390098E5BB80054FEF8 /* SenTestingKit.framework */, + 1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */, + 1058C7B2FEA5585E11CA2CBB /* Other Frameworks */, + ); + name = "External Frameworks and Libraries"; + sourceTree = ""; + }; + 089C1665FE841158C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 8DC2EF5A0486A6940098B216 /* Info.plist */, + 089C1666FE841158C02AAC07 /* InfoPlist.strings */, + ); + name = Resources; + sourceTree = ""; + }; + 08FB77AEFE84172EC02AAC07 /* Classes */ = { + isa = PBXGroup; + children = ( + F7492F8D09C0171900B25E30 /* Tokens */, + F73E2B590A9CF83A005D6267 /* Trees */, + F70AA7AA09AA2AAB00C3FD5E /* Streams */, + F7F218EB097AFB0C000472E9 /* Misc */, + F7A4098809659BE5002CC781 /* Recognizer */, + F7A40951096597D2002CC781 /* DFA */, + F7A4094C096597C4002CC781 /* Exceptions */, + F7E2610F0B1E43E60013F640 /* Debugging */, + ); + name = Classes; + sourceTree = ""; + }; + 1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + F71F6B8F09A81E6F003221F4 /* CoreFoundation.framework */, + 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7B2FEA5585E11CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 0867D69BFE84028FC02AAC07 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 32C88DFF0371C24200C91783 /* Other Sources */ = { + isa = PBXGroup; + children = ( + 32DBCF5E0370ADEE00C91783 /* ANTLR_Prefix.pch */, + F70AA7A509AA2A6900C3FD5E /* ANTLR.h */, + F77747550B23A70600D1F89B /* ANTLRDebug.h */, + ); + name = "Other Sources"; + sourceTree = ""; + }; + F700E85D0A5FA2C0005D0757 /* combined */ = { + isa = PBXGroup; + children = ( + F738D35C0B07C105001813C4 /* Combined.tokens */, + F738D35D0B07C105001813C4 /* CombinedLexer.h */, + F738D35E0B07C105001813C4 /* CombinedLexer.m */, + F738D35F0B07C105001813C4 /* CombinedParser.h */, + F738D3600B07C105001813C4 /* CombinedParser.m */, + F700E85E0A5FA2DE005D0757 /* Combined.g */, + F700E86A0A5FA34D005D0757 /* main.m */, + ); + name = combined; + sourceTree = ""; + }; + F700ECCE0A5FE176005D0757 /* LL-star */ = { + isa = PBXGroup; + children = ( + F738D27F0B07B9B6001813C4 /* SimpleC.tokens */, + F738D2800B07B9B6001813C4 /* SimpleCLexer.h */, + F738D2810B07B9B6001813C4 /* SimpleCLexer.m */, + F738D2820B07B9B6001813C4 /* SimpleCParser.h */, + F738D2510B07B842001813C4 /* SimpleCParser.m */, + F700ECCF0A5FE176005D0757 /* input */, + F700ECD00A5FE176005D0757 /* output */, + F700ECD10A5FE176005D0757 /* SimpleC.g */, + F700ECE70A5FE25D005D0757 /* main.m */, + ); + path = "LL-star"; + sourceTree = ""; + }; + F7037EBB0A05B06B0070435D /* examples */ = { + isa = PBXGroup; + children = ( + F7CD45FB0C64BA4B00FF933A /* treerewrite */, + F72C5E2D0AB7529C00282574 /* simplecTreeParser */, + F7DD073B0A7B660A006A006C /* scopes */, + F7DD05E10A7B14BE006A006C /* hoistedPredicates */, + F700ECCE0A5FE176005D0757 /* LL-star */, + F700E85D0A5FA2C0005D0757 /* combined */, + F79D56590A0E238100EA3CEE /* fuzzy */, + F7037EBC0A05B06B0070435D /* lexertest-simple */, + ); + path = examples; + sourceTree = ""; + }; + F7037EBC0A05B06B0070435D /* lexertest-simple */ = { + isa = PBXGroup; + children = ( + F7048FF50B07D05400D2F326 /* Test.tokens */, + F7048FF60B07D05400D2F326 /* TestLexer.h */, + F7048FF70B07D05400D2F326 /* TestLexer.m */, + F7037EBD0A05B06B0070435D /* Test.gl */, + F7E983940A0D6A5F00F16093 /* main.m */, + ); + path = "lexertest-simple"; + sourceTree = ""; + }; + F70AA7AA09AA2AAB00C3FD5E /* Streams */ = { + isa = PBXGroup; + children = ( + F71325850C4A05DC00B99F2D /* Trees */, + F70AA7AD09AA2AC000C3FD5E /* ANTLRIntStream.h */, + F70AA7B509AA2B8800C3FD5E /* ANTLRCharStream.h */, + F77766AE09DD53E800517181 /* ANTLRTokenStream.h */, + F700ED940A5FF2A5005D0757 /* ANTLRCommonTokenStream.h */, + F700ED950A5FF2A5005D0757 /* ANTLRCommonTokenStream.m */, + F70AA7C509AA339900C3FD5E /* ANTLRStringStream.h */, + F70AA7C609AA339900C3FD5E /* ANTLRStringStream.m */, + F70AA7CD09AA379300C3FD5E /* ANTLRStringStreamState.h */, + F70AA7CE09AA379300C3FD5E /* ANTLRStringStreamState.m */, + F700ED7E0A5FF17C005D0757 /* ANTLRTokenSource.h */, + ); + name = Streams; + sourceTree = ""; + }; + F70BB396098E5BE90054FEF8 /* Tests */ = { + isa = PBXGroup; + children = ( + F70BB39B098E62740054FEF8 /* TestBitSet.h */, + F70BB39C098E62740054FEF8 /* TestBitSet.m */, + F7492DED09C00E4500B25E30 /* TestStringStream.h */, + F7492DEE09C00E4500B25E30 /* TestStringStream.m */, + F7941B460C5934E6006E9A9B /* TestRewriteRuleTokenStream.h */, + F7941B470C5934E6006E9A9B /* TestRewriteRuleTokenStream.m */, + ); + name = Tests; + sourceTree = ""; + }; + F71325850C4A05DC00B99F2D /* Trees */ = { + isa = PBXGroup; + children = ( + F71325860C4A060900B99F2D /* ANTLRRewriteRuleElementStream.h */, + F71325870C4A060900B99F2D /* ANTLRRewriteRuleElementStream.m */, + F70B11BB0C4C2B6400C3ECE0 /* ANTLRRewriteRuleSubtreeStream.h */, + F70B11BC0C4C2B6400C3ECE0 /* ANTLRRewriteRuleSubtreeStream.m */, + F70B11C10C4C2B7900C3ECE0 /* ANTLRRewriteRuleTokenStream.h */, + F70B11C20C4C2B7900C3ECE0 /* ANTLRRewriteRuleTokenStream.m */, + F72C5B820AB52AD300282574 /* ANTLRTreeNodeStream.h */, + F76AA98E0CEA515A00AF044C /* ANTLRCommonTreeNodeStream.h */, + F76AA98F0CEA515A00AF044C /* ANTLRCommonTreeNodeStream.m */, + F76AA8F50CEA290C00AF044C /* ANTLRUnbufferedCommonTreeNodeStream.h */, + F76AA8F60CEA290C00AF044C /* ANTLRUnbufferedCommonTreeNodeStream.m */, + F76AA91C0CEA2DC600AF044C /* ANTLRUnbufferedCommonTreeNodeStreamState.h */, + F76AA91D0CEA2DC600AF044C /* ANTLRUnbufferedCommonTreeNodeStreamState.m */, + ); + name = Trees; + sourceTree = ""; + }; + F72C5E2D0AB7529C00282574 /* simplecTreeParser */ = { + isa = PBXGroup; + children = ( + F7715D2E0AC9DE9E00ED984D /* SimpleCLexer.h */, + F7715D2F0AC9DE9E00ED984D /* SimpleCLexer.m */, + F7715D300AC9DE9E00ED984D /* SimpleCParser.h */, + F7715D310AC9DE9E00ED984D /* SimpleCParser.m */, + F741D0640B3812D40024DF3F /* SimpleCTP.h */, + F741D0650B3812D40024DF3F /* SimpleCTP.m */, + F72C5E2F0AB7529C00282574 /* input */, + F72C5E310AB7529C00282574 /* output */, + F7715D1C0AC9DDD800ED984D /* SimpleC.tokens */, + F7715D1D0AC9DDD800ED984D /* SimpleCTP.tokens */, + F7715D1A0AC9DCE400ED984D /* SimpleC.g */, + F7715D1B0AC9DCE500ED984D /* SimpleCTP.gtp */, + F72C5E560AB7E41000282574 /* main.m */, + ); + path = simplecTreeParser; + sourceTree = ""; + }; + F73E2B590A9CF83A005D6267 /* Trees */ = { + isa = PBXGroup; + children = ( + F73E2B720A9CFE6A005D6267 /* ANTLRTree.h */, + F7568FAE0AAB8C6E00F6FB41 /* ANTLRTree.m */, + F72C58E80AB3911D00282574 /* ANTLRCommonTree.h */, + F72C58E90AB3911D00282574 /* ANTLRCommonTree.m */, + F73E2B7A0A9D0AFC005D6267 /* ANTLRTreeAdaptor.h */, + F72C56DC0AB3411000282574 /* ANTLRTreeAdaptor.m */, + F72C59A50AB4F20A00282574 /* ANTLRCommonTreeAdaptor.h */, + F72C59A60AB4F20A00282574 /* ANTLRCommonTreeAdaptor.m */, + ); + name = Trees; + sourceTree = ""; + }; + F7492F8D09C0171900B25E30 /* Tokens */ = { + isa = PBXGroup; + children = ( + F77765CA09DC583000517181 /* ANTLRToken.h */, + F777660309DC5CF400517181 /* ANTLRCommonToken.h */, + F777660409DC5CF400517181 /* ANTLRCommonToken.m */, + ); + name = Tokens; + sourceTree = ""; + }; + F77744070B234A3B00D1F89B /* Debugging Categories */ = { + isa = PBXGroup; + children = ( + F77744030B234A3400D1F89B /* ANTLRToken+DebuggerSupport.h */, + F77744040B234A3400D1F89B /* ANTLRToken+DebuggerSupport.m */, + ); + name = "Debugging Categories"; + sourceTree = ""; + }; + F79D56590A0E238100EA3CEE /* fuzzy */ = { + isa = PBXGroup; + children = ( + F72B8D090AD01DCB0013F1E2 /* FuzzyJava.tokens */, + F72B8D0A0AD01DCB0013F1E2 /* FuzzyJavaLexer.h */, + F72B8D0B0AD01DCB0013F1E2 /* FuzzyJavaLexer.m */, + F706A55B0A0EC307008999AB /* input */, + F72B8CFA0AD01D380013F1E2 /* FuzzyJava.gl */, + F79D56C00A0E287500EA3CEE /* main.m */, + ); + path = fuzzy; + sourceTree = ""; + }; + F7A4094C096597C4002CC781 /* Exceptions */ = { + isa = PBXGroup; + children = ( + F738D1730B07AEAA001813C4 /* ANTLRFailedPredicateException.h */, + F738D1740B07AEAA001813C4 /* ANTLRFailedPredicateException.m */, + F7037CEE0A0582FC0070435D /* ANTLRMismatchedRangeException.h */, + F7037CEF0A0582FC0070435D /* ANTLRMismatchedRangeException.m */, + F70380BA0A07FA0D0070435D /* ANTLRMismatchedSetException.h */, + F70380BB0A07FA0D0070435D /* ANTLRMismatchedSetException.m */, + F777668009DC719C00517181 /* ANTLRMismatchedTokenException.h */, + F777668109DC719C00517181 /* ANTLRMismatchedTokenException.m */, + F72C5D600AB63E0B00282574 /* ANTLRMismatchedTreeNodeException.h */, + F72C5D610AB63E0B00282574 /* ANTLRMismatchedTreeNodeException.m */, + F79D59890A0E51AB00EA3CEE /* ANTLRNoViableAltException.h */, + F79D598A0A0E51AB00EA3CEE /* ANTLRNoViableAltException.m */, + F777669109DC72D600517181 /* ANTLRRecognitionException.h */, + F777669209DC72D600517181 /* ANTLRRecognitionException.m */, + F700E6190A5F66EC005D0757 /* ANTLREarlyExitException.h */, + F700E61A0A5F66EC005D0757 /* ANTLREarlyExitException.m */, + F738D1750B07AEAA001813C4 /* ANTLRTreeException.h */, + F738D1760B07AEAA001813C4 /* ANTLRTreeException.m */, + ); + name = Exceptions; + sourceTree = ""; + }; + F7A40951096597D2002CC781 /* DFA */ = { + isa = PBXGroup; + children = ( + F7754E3D0A5C0A0500D0873A /* ANTLRDFA.h */, + F7754E3E0A5C0A0500D0873A /* ANTLRDFA.m */, + ); + name = DFA; + sourceTree = ""; + }; + F7A4098809659BE5002CC781 /* Recognizer */ = { + isa = PBXGroup; + children = ( + F7A4098B09659BF3002CC781 /* ANTLRBaseRecognizer.h */, + F7A4098C09659BF3002CC781 /* ANTLRBaseRecognizer.m */, + F7B1E5AC0CD7CF1900CE136E /* ANTLRBaseRecognizerState.h */, + F7B1E5AD0CD7CF1900CE136E /* ANTLRBaseRecognizerState.m */, + F7A4099109659BFB002CC781 /* ANTLRLexer.h */, + F7A4099209659BFB002CC781 /* ANTLRLexer.m */, + F7B1E5AE0CD7CF1900CE136E /* ANTLRLexerState.h */, + F7B1E5AF0CD7CF1900CE136E /* ANTLRLexerState.m */, + F7009AD90A1BE4AE002EDD5D /* ANTLRLexerRuleReturnScope.h */, + F7009ADA0A1BE4AE002EDD5D /* ANTLRLexerRuleReturnScope.m */, + F700E8F90A5FAD21005D0757 /* ANTLRParser.h */, + F700E8FA0A5FAD21005D0757 /* ANTLRParser.m */, + F72C5D540AB63C1D00282574 /* ANTLRTreeParser.h */, + F72C5D550AB63C1D00282574 /* ANTLRTreeParser.m */, + F72C5ECC0AB7E5A500282574 /* ANTLRParserRuleReturnScope.h */, + F72C5ECD0AB7E5A500282574 /* ANTLRParserRuleReturnScope.m */, + F76AA8130CE9E29400AF044C /* ANTLRTreeParserRuleReturnScope.h */, + F76AA8140CE9E29400AF044C /* ANTLRTreeParserRuleReturnScope.m */, + ); + name = Recognizer; + sourceTree = ""; + }; + F7CD45FB0C64BA4B00FF933A /* treerewrite */ = { + isa = PBXGroup; + children = ( + F7CD46340C64BB7300FF933A /* TreeRewrite.tokens */, + F7CD46350C64BB7300FF933A /* TreeRewriteLexer.h */, + F7CD46360C64BB7300FF933A /* TreeRewriteLexer.m */, + F7CD46370C64BB7300FF933A /* TreeRewriteParser.h */, + F7CD46380C64BB7300FF933A /* TreeRewriteParser.m */, + F7CD45FC0C64BA4B00FF933A /* main.m */, + F7CD45FD0C64BA4B00FF933A /* TreeRewrite.g */, + ); + path = treerewrite; + sourceTree = ""; + }; + F7DD05E10A7B14BE006A006C /* hoistedPredicates */ = { + isa = PBXGroup; + children = ( + F738D2230B07B3BC001813C4 /* TParser.h */, + F738D2240B07B3BC001813C4 /* TParser.m */, + F7DD06E70A7B1700006A006C /* TLexer.h */, + F7DD06E80A7B1700006A006C /* TLexer.m */, + F7DD05E20A7B14BE006A006C /* input */, + F7DD05E30A7B14BE006A006C /* output */, + F7DD05E40A7B14BE006A006C /* T.g */, + F7DD05E70A7B1572006A006C /* main.m */, + ); + path = hoistedPredicates; + sourceTree = ""; + }; + F7DD073B0A7B660A006A006C /* scopes */ = { + isa = PBXGroup; + children = ( + F738D1FD0B07B1CE001813C4 /* SymbolTable.tokens */, + F738D1FE0B07B1CE001813C4 /* SymbolTableLexer.h */, + F738D1FF0B07B1CE001813C4 /* SymbolTableLexer.m */, + F738D2000B07B1CE001813C4 /* SymbolTableParser.h */, + F738D2010B07B1CE001813C4 /* SymbolTableParser.m */, + F7DD073C0A7B660A006A006C /* input */, + F7DD073D0A7B660A006A006C /* output */, + F7DD073E0A7B660A006A006C /* SymbolTable.g */, + F7DD07800A7B67A7006A006C /* main.m */, + ); + path = scopes; + sourceTree = ""; + }; + F7E2610F0B1E43E60013F640 /* Debugging */ = { + isa = PBXGroup; + children = ( + F77744070B234A3B00D1F89B /* Debugging Categories */, + F7CECD7D0B1E5C370054CC3B /* ANTLRDebugEventListener.h */, + F7E261370B1E45580013F640 /* ANTLRDebugEventProxy.h */, + F7E261380B1E45580013F640 /* ANTLRDebugEventProxy.m */, + F7E261140B1E44320013F640 /* ANTLRDebugParser.h */, + F7E261150B1E44320013F640 /* ANTLRDebugParser.m */, + F7E2611E0B1E44E80013F640 /* ANTLRDebugTokenStream.h */, + F7E2611F0B1E44E80013F640 /* ANTLRDebugTokenStream.m */, + F7E261180B1E443C0013F640 /* ANTLRDebugTreeParser.h */, + F7E261190B1E443C0013F640 /* ANTLRDebugTreeParser.m */, + F7E261220B1E44FA0013F640 /* ANTLRDebugTreeNodeStream.h */, + F7E261230B1E44FA0013F640 /* ANTLRDebugTreeNodeStream.m */, + F7E261260B1E45070013F640 /* ANTLRDebugTreeAdaptor.h */, + F7E261270B1E45070013F640 /* ANTLRDebugTreeAdaptor.m */, + ); + name = Debugging; + sourceTree = ""; + }; + F7F218EB097AFB0C000472E9 /* Misc */ = { + isa = PBXGroup; + children = ( + F7F218EE097AFB1A000472E9 /* ANTLRBitSet.h */, + F7F218EF097AFB1A000472E9 /* ANTLRBitSet.m */, + ); + name = Misc; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 8DC2EF500486A6940098B216 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + F7F218F0097AFB1A000472E9 /* ANTLRBitSet.h in Headers */, + F70AA7A609AA2A6900C3FD5E /* ANTLR.h in Headers */, + F70AA7AF09AA2AC000C3FD5E /* ANTLRIntStream.h in Headers */, + F70AA7C709AA339900C3FD5E /* ANTLRStringStream.h in Headers */, + F70AA7CF09AA379300C3FD5E /* ANTLRStringStreamState.h in Headers */, + F7492F5D09C016A200B25E30 /* ANTLRBaseRecognizer.h in Headers */, + F77765CC09DC583000517181 /* ANTLRToken.h in Headers */, + F777660509DC5CF400517181 /* ANTLRCommonToken.h in Headers */, + F777668209DC719C00517181 /* ANTLRMismatchedTokenException.h in Headers */, + F777669309DC72D600517181 /* ANTLRRecognitionException.h in Headers */, + F77766AF09DD53E800517181 /* ANTLRTokenStream.h in Headers */, + F777678C09DD616600517181 /* ANTLRCharStream.h in Headers */, + F777678E09DD618000517181 /* ANTLRLexer.h in Headers */, + F7037CF00A0582FC0070435D /* ANTLRMismatchedRangeException.h in Headers */, + F70380BC0A07FA0D0070435D /* ANTLRMismatchedSetException.h in Headers */, + F79D598B0A0E51AB00EA3CEE /* ANTLRNoViableAltException.h in Headers */, + F7009ADB0A1BE4AE002EDD5D /* ANTLRLexerRuleReturnScope.h in Headers */, + F7754E3F0A5C0A0500D0873A /* ANTLRDFA.h in Headers */, + F700E61B0A5F66EC005D0757 /* ANTLREarlyExitException.h in Headers */, + F700E8FB0A5FAD21005D0757 /* ANTLRParser.h in Headers */, + F700ED7F0A5FF17C005D0757 /* ANTLRTokenSource.h in Headers */, + F700ED960A5FF2A5005D0757 /* ANTLRCommonTokenStream.h in Headers */, + F73E2B740A9CFE6A005D6267 /* ANTLRTree.h in Headers */, + F73E2B7C0A9D0AFC005D6267 /* ANTLRTreeAdaptor.h in Headers */, + F72C58EA0AB3911D00282574 /* ANTLRCommonTree.h in Headers */, + F72C59A70AB4F20A00282574 /* ANTLRCommonTreeAdaptor.h in Headers */, + F72C5B840AB52AD300282574 /* ANTLRTreeNodeStream.h in Headers */, + F72C5D560AB63C1D00282574 /* ANTLRTreeParser.h in Headers */, + F72C5D620AB63E0B00282574 /* ANTLRMismatchedTreeNodeException.h in Headers */, + F72C5ECE0AB7E5A500282574 /* ANTLRParserRuleReturnScope.h in Headers */, + F738D1770B07AEAA001813C4 /* ANTLRFailedPredicateException.h in Headers */, + F738D1790B07AEAA001813C4 /* ANTLRTreeException.h in Headers */, + F7E261160B1E44320013F640 /* ANTLRDebugParser.h in Headers */, + F7E2611A0B1E443D0013F640 /* ANTLRDebugTreeParser.h in Headers */, + F7E261200B1E44E80013F640 /* ANTLRDebugTokenStream.h in Headers */, + F7E261240B1E44FA0013F640 /* ANTLRDebugTreeNodeStream.h in Headers */, + F7E261280B1E45070013F640 /* ANTLRDebugTreeAdaptor.h in Headers */, + F7E261390B1E45580013F640 /* ANTLRDebugEventProxy.h in Headers */, + F7CECD7E0B1E5C370054CC3B /* ANTLRDebugEventListener.h in Headers */, + F77744050B234A3400D1F89B /* ANTLRToken+DebuggerSupport.h in Headers */, + F77747560B23A70600D1F89B /* ANTLRDebug.h in Headers */, + F71325880C4A060900B99F2D /* ANTLRRewriteRuleElementStream.h in Headers */, + F70B11BD0C4C2B6400C3ECE0 /* ANTLRRewriteRuleSubtreeStream.h in Headers */, + F70B11C30C4C2B7900C3ECE0 /* ANTLRRewriteRuleTokenStream.h in Headers */, + F7B1E5B00CD7CF1900CE136E /* ANTLRBaseRecognizerState.h in Headers */, + F7B1E5B20CD7CF1900CE136E /* ANTLRLexerState.h in Headers */, + F76AA8150CE9E29400AF044C /* ANTLRTreeParserRuleReturnScope.h in Headers */, + F76AA8F70CEA290C00AF044C /* ANTLRUnbufferedCommonTreeNodeStream.h in Headers */, + F76AA91E0CEA2DC600AF044C /* ANTLRUnbufferedCommonTreeNodeStreamState.h in Headers */, + F76AA9900CEA515A00AF044C /* ANTLRCommonTreeNodeStream.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXLegacyTarget section */ + F76287450B7151E3006AA7EF /* Regenerate fuzzy */ = { + isa = PBXLegacyTarget; + buildArgumentsString = "-cp $ANTLR_EXTRA_JAVA_ARGS org.antlr.Tool FuzzyJava.gl"; + buildConfigurationList = F76287460B715201006AA7EF /* Build configuration list for PBXLegacyTarget "Regenerate fuzzy" */; + buildPhases = ( + ); + buildToolPath = /usr/bin/java; + buildWorkingDirectory = "$(PROJECT_DIR)/examples/fuzzy"; + dependencies = ( + ); + name = "Regenerate fuzzy"; + passBuildSettingsInEnvironment = 1; + productName = Untitled; + }; + F76287780B71557E006AA7EF /* Regenerate lexertest-simple */ = { + isa = PBXLegacyTarget; + buildArgumentsString = "-cp $ANTLR_EXTRA_JAVA_ARGS org.antlr.Tool Test.gl"; + buildConfigurationList = F76287790B71557E006AA7EF /* Build configuration list for PBXLegacyTarget "Regenerate lexertest-simple" */; + buildPhases = ( + ); + buildToolPath = /usr/bin/java; + buildWorkingDirectory = "$(PROJECT_DIR)/examples/lexertest-simple"; + dependencies = ( + ); + name = "Regenerate lexertest-simple"; + passBuildSettingsInEnvironment = 1; + productName = Untitled; + }; + F762877E0B71559C006AA7EF /* Regenerate combined */ = { + isa = PBXLegacyTarget; + buildArgumentsString = "-cp $ANTLR_EXTRA_JAVA_ARGS org.antlr.Tool Combined.g"; + buildConfigurationList = F762877F0B71559C006AA7EF /* Build configuration list for PBXLegacyTarget "Regenerate combined" */; + buildPhases = ( + ); + buildToolPath = /usr/bin/java; + buildWorkingDirectory = "$(PROJECT_DIR)/examples/combined"; + dependencies = ( + ); + name = "Regenerate combined"; + passBuildSettingsInEnvironment = 1; + productName = Untitled; + }; + F76287820B71559F006AA7EF /* Regenerate LL-star */ = { + isa = PBXLegacyTarget; + buildArgumentsString = "-cp $ANTLR_EXTRA_JAVA_ARGS org.antlr.Tool SimpleC.g"; + buildConfigurationList = F76287830B71559F006AA7EF /* Build configuration list for PBXLegacyTarget "Regenerate LL-star" */; + buildPhases = ( + ); + buildToolPath = /usr/bin/java; + buildWorkingDirectory = "$(PROJECT_DIR)/examples/LL-star"; + dependencies = ( + ); + name = "Regenerate LL-star"; + passBuildSettingsInEnvironment = 1; + productName = Untitled; + }; + F76287860B7155A2006AA7EF /* Regenerate hoistedPredicates */ = { + isa = PBXLegacyTarget; + buildArgumentsString = "-cp $ANTLR_EXTRA_JAVA_ARGS org.antlr.Tool T.g"; + buildConfigurationList = F76287870B7155A2006AA7EF /* Build configuration list for PBXLegacyTarget "Regenerate hoistedPredicates" */; + buildPhases = ( + ); + buildToolPath = /usr/bin/java; + buildWorkingDirectory = "$(PROJECT_DIR)/examples/hoistedPredicates"; + dependencies = ( + ); + name = "Regenerate hoistedPredicates"; + passBuildSettingsInEnvironment = 1; + productName = Untitled; + }; + F762878A0B7155AB006AA7EF /* Regenerate scopes */ = { + isa = PBXLegacyTarget; + buildArgumentsString = "-cp $ANTLR_EXTRA_JAVA_ARGS org.antlr.Tool SymbolTable.g"; + buildConfigurationList = F762878B0B7155AB006AA7EF /* Build configuration list for PBXLegacyTarget "Regenerate scopes" */; + buildPhases = ( + ); + buildToolPath = /usr/bin/java; + buildWorkingDirectory = "$(PROJECT_DIR)/examples/scopes"; + dependencies = ( + ); + name = "Regenerate scopes"; + passBuildSettingsInEnvironment = 1; + productName = Untitled; + }; + F762878E0B7155AF006AA7EF /* Regenerate simplec tree */ = { + isa = PBXLegacyTarget; + buildArgumentsString = "-cp $ANTLR_EXTRA_JAVA_ARGS org.antlr.Tool $ANTLR_EXTRA_ARGS SimpleC.g SimpleCTP.gtp"; + buildConfigurationList = F762878F0B7155AF006AA7EF /* Build configuration list for PBXLegacyTarget "Regenerate simplec tree" */; + buildPhases = ( + ); + buildToolPath = /usr/bin/java; + buildWorkingDirectory = "$(PROJECT_DIR)/examples/simplecTreeParser"; + dependencies = ( + ); + name = "Regenerate simplec tree"; + passBuildSettingsInEnvironment = 1; + productName = Untitled; + }; + F7CD47610C64D23800FF933A /* Regenerate treerewrite */ = { + isa = PBXLegacyTarget; + buildArgumentsString = "-cp $ANTLR_EXTRA_JAVA_ARGS org.antlr.Tool TreeRewrite.g"; + buildConfigurationList = F7CD47620C64D23800FF933A /* Build configuration list for PBXLegacyTarget "Regenerate treerewrite" */; + buildPhases = ( + ); + buildToolPath = /usr/bin/java; + buildWorkingDirectory = "$(PROJECT_DIR)/examples/treerewrite"; + dependencies = ( + ); + name = "Regenerate treerewrite"; + passBuildSettingsInEnvironment = 1; + productName = Untitled; + }; +/* End PBXLegacyTarget section */ + +/* Begin PBXNativeTarget section */ + 8DC2EF4F0486A6940098B216 /* ANTLR */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "ANTLR" */; + buildPhases = ( + 8DC2EF500486A6940098B216 /* Headers */, + 8DC2EF520486A6940098B216 /* Resources */, + 8DC2EF540486A6940098B216 /* Sources */, + 8DC2EF560486A6940098B216 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ANTLR; + productInstallPath = "$(HOME)/Library/Frameworks"; + productName = ANTLR; + productReference = 8DC2EF5B0486A6940098B216 /* ANTLR.framework */; + productType = "com.apple.product-type.framework"; + }; + F700E8630A5FA31D005D0757 /* combined */ = { + isa = PBXNativeTarget; + buildConfigurationList = F700E86C0A5FA34D005D0757 /* Build configuration list for PBXNativeTarget "combined" */; + buildPhases = ( + F700E8610A5FA31D005D0757 /* Sources */, + F700E8620A5FA31D005D0757 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + F700E8670A5FA32E005D0757 /* PBXTargetDependency */, + ); + name = combined; + productName = combined; + productReference = F700E8640A5FA31D005D0757 /* combined */; + productType = "com.apple.product-type.tool"; + }; + F700ECD60A5FE186005D0757 /* LL-star */ = { + isa = PBXNativeTarget; + buildConfigurationList = F700ECDC0A5FE1BF005D0757 /* Build configuration list for PBXNativeTarget "LL-star" */; + buildPhases = ( + F700ECD40A5FE186005D0757 /* Sources */, + F700ECD50A5FE186005D0757 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + F700F0200A61498E005D0757 /* PBXTargetDependency */, + ); + name = "LL-star"; + productName = "LL-star"; + productReference = F700ECD70A5FE186005D0757 /* LL-star */; + productType = "com.apple.product-type.tool"; + }; + F7037E9F0A05AFB60070435D /* lexertest-simple */ = { + isa = PBXNativeTarget; + buildConfigurationList = F7037EB80A05AFEF0070435D /* Build configuration list for PBXNativeTarget "lexertest-simple" */; + buildPhases = ( + F7037E9D0A05AFB60070435D /* Sources */, + F7037E9E0A05AFB60070435D /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + F7037EA50A05AFCB0070435D /* PBXTargetDependency */, + ); + name = "lexertest-simple"; + productName = "lexertest-simple"; + productReference = F7037EA00A05AFB60070435D /* lexertest-simple */; + productType = "com.apple.product-type.tool"; + }; + F70BB37F098E5AFF0054FEF8 /* Test */ = { + isa = PBXNativeTarget; + buildConfigurationList = F70BB382098E5B040054FEF8 /* Build configuration list for PBXNativeTarget "Test" */; + buildPhases = ( + F70BB37B098E5AFF0054FEF8 /* Resources */, + F70BB37C098E5AFF0054FEF8 /* Sources */, + F70BB37D098E5AFF0054FEF8 /* Frameworks */, + F70BB37E098E5AFF0054FEF8 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Test; + productName = Test; + productReference = F70BB380098E5AFF0054FEF8 /* Test.octest */; + productType = "com.apple.product-type.bundle"; + }; + F72C5E5A0AB7E4C900282574 /* simplec tree */ = { + isa = PBXNativeTarget; + buildConfigurationList = F72C5E660AB7E4C900282574 /* Build configuration list for PBXNativeTarget "simplec tree" */; + buildPhases = ( + F72C5E5D0AB7E4C900282574 /* Sources */, + F72C5E610AB7E4C900282574 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + F72C5E5B0AB7E4C900282574 /* PBXTargetDependency */, + ); + name = "simplec tree"; + productName = scopes; + productReference = F72C5E690AB7E4C900282574 /* simplectree */; + productType = "com.apple.product-type.tool"; + }; + F79D565F0A0E23A400EA3CEE /* fuzzy */ = { + isa = PBXNativeTarget; + buildConfigurationList = F79D566F0A0E23D600EA3CEE /* Build configuration list for PBXNativeTarget "fuzzy" */; + buildPhases = ( + F79D565D0A0E23A400EA3CEE /* Sources */, + F79D565E0A0E23A400EA3CEE /* Frameworks */, + F706A5710A0EC357008999AB /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + F79D5AF20A0E632A00EA3CEE /* PBXTargetDependency */, + ); + name = fuzzy; + productName = fuzzy; + productReference = F79D56600A0E23A400EA3CEE /* fuzzy */; + productType = "com.apple.product-type.tool"; + }; + F7CD475C0C64D22800FF933A /* treerewrite */ = { + isa = PBXNativeTarget; + buildConfigurationList = F7CD477C0C64D27000FF933A /* Build configuration list for PBXNativeTarget "treerewrite" */; + buildPhases = ( + F7CD475A0C64D22800FF933A /* Sources */, + F7CD475B0C64D22800FF933A /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + F7CD47600C64D22F00FF933A /* PBXTargetDependency */, + ); + name = treerewrite; + productName = treerewrite; + productReference = F7CD475D0C64D22800FF933A /* treerewrite */; + productType = "com.apple.product-type.tool"; + }; + F7DD05ED0A7B15E1006A006C /* hoistedPredicates */ = { + isa = PBXNativeTarget; + buildConfigurationList = F7DD05F00A7B1640006A006C /* Build configuration list for PBXNativeTarget "hoistedPredicates" */; + buildPhases = ( + F7DD05EB0A7B15E1006A006C /* Sources */, + F7DD05EC0A7B15E1006A006C /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + F7DD05F40A7B1649006A006C /* PBXTargetDependency */, + ); + name = hoistedPredicates; + productName = hoistedPredicates; + productReference = F7DD05EE0A7B15E1006A006C /* hoistedPredicates */; + productType = "com.apple.product-type.tool"; + }; + F7DD07430A7B6618006A006C /* scopes */ = { + isa = PBXNativeTarget; + buildConfigurationList = F7DD07790A7B6682006A006C /* Build configuration list for PBXNativeTarget "scopes" */; + buildPhases = ( + F7DD07410A7B6618006A006C /* Sources */, + F7DD07420A7B6618006A006C /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + F7DD07510A7B6666006A006C /* PBXTargetDependency */, + ); + name = scopes; + productName = scopes; + productReference = F7DD07440A7B6618006A006C /* scopes */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 0867D690FE84028FC02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "ANTLR" */; + compatibilityVersion = "Xcode 2.4"; + hasScannedForEncodings = 1; + mainGroup = 0867D691FE84028FC02AAC07 /* ANTLR */; + productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8DC2EF4F0486A6940098B216 /* ANTLR */, + F70BB37F098E5AFF0054FEF8 /* Test */, + F762873F0B71519B006AA7EF /* Regenerate all examples */, + F7037E9F0A05AFB60070435D /* lexertest-simple */, + F76287780B71557E006AA7EF /* Regenerate lexertest-simple */, + F79D565F0A0E23A400EA3CEE /* fuzzy */, + F76287450B7151E3006AA7EF /* Regenerate fuzzy */, + F700E8630A5FA31D005D0757 /* combined */, + F762877E0B71559C006AA7EF /* Regenerate combined */, + F700ECD60A5FE186005D0757 /* LL-star */, + F76287820B71559F006AA7EF /* Regenerate LL-star */, + F7DD05ED0A7B15E1006A006C /* hoistedPredicates */, + F76287860B7155A2006AA7EF /* Regenerate hoistedPredicates */, + F7DD07430A7B6618006A006C /* scopes */, + F762878A0B7155AB006AA7EF /* Regenerate scopes */, + F72C5E5A0AB7E4C900282574 /* simplec tree */, + F762878E0B7155AF006AA7EF /* Regenerate simplec tree */, + F7CD475C0C64D22800FF933A /* treerewrite */, + F7CD47610C64D23800FF933A /* Regenerate treerewrite */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8DC2EF520486A6940098B216 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F70BB37B098E5AFF0054FEF8 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + F70BB37E098E5AFF0054FEF8 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8DC2EF540486A6940098B216 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F7F218F1097AFB1A000472E9 /* ANTLRBitSet.m in Sources */, + F70AA7C809AA339900C3FD5E /* ANTLRStringStream.m in Sources */, + F70AA7D009AA379300C3FD5E /* ANTLRStringStreamState.m in Sources */, + F7492F5C09C016A200B25E30 /* ANTLRBaseRecognizer.m in Sources */, + F777660609DC5CF400517181 /* ANTLRCommonToken.m in Sources */, + F777668309DC719C00517181 /* ANTLRMismatchedTokenException.m in Sources */, + F777669409DC72D600517181 /* ANTLRRecognitionException.m in Sources */, + F777678F09DD618100517181 /* ANTLRLexer.m in Sources */, + F7037CF10A0582FC0070435D /* ANTLRMismatchedRangeException.m in Sources */, + F70380BD0A07FA0D0070435D /* ANTLRMismatchedSetException.m in Sources */, + F79D598C0A0E51AB00EA3CEE /* ANTLRNoViableAltException.m in Sources */, + F7009ADC0A1BE4AE002EDD5D /* ANTLRLexerRuleReturnScope.m in Sources */, + F7754E400A5C0A0500D0873A /* ANTLRDFA.m in Sources */, + F700E61C0A5F66EC005D0757 /* ANTLREarlyExitException.m in Sources */, + F700E8FC0A5FAD21005D0757 /* ANTLRParser.m in Sources */, + F700ED970A5FF2A5005D0757 /* ANTLRCommonTokenStream.m in Sources */, + F7568FAF0AAB8C6E00F6FB41 /* ANTLRTree.m in Sources */, + F72C56DD0AB3411000282574 /* ANTLRTreeAdaptor.m in Sources */, + F72C58EB0AB3911D00282574 /* ANTLRCommonTree.m in Sources */, + F72C59A80AB4F20A00282574 /* ANTLRCommonTreeAdaptor.m in Sources */, + F72C5D570AB63C1D00282574 /* ANTLRTreeParser.m in Sources */, + F72C5D630AB63E0B00282574 /* ANTLRMismatchedTreeNodeException.m in Sources */, + F72C5ECF0AB7E5A500282574 /* ANTLRParserRuleReturnScope.m in Sources */, + F738D1780B07AEAA001813C4 /* ANTLRFailedPredicateException.m in Sources */, + F738D17A0B07AEAA001813C4 /* ANTLRTreeException.m in Sources */, + F7E261170B1E44320013F640 /* ANTLRDebugParser.m in Sources */, + F7E2611B0B1E443D0013F640 /* ANTLRDebugTreeParser.m in Sources */, + F7E261210B1E44E80013F640 /* ANTLRDebugTokenStream.m in Sources */, + F7E261250B1E44FA0013F640 /* ANTLRDebugTreeNodeStream.m in Sources */, + F7E261290B1E45070013F640 /* ANTLRDebugTreeAdaptor.m in Sources */, + F7E2613A0B1E45580013F640 /* ANTLRDebugEventProxy.m in Sources */, + F77744060B234A3400D1F89B /* ANTLRToken+DebuggerSupport.m in Sources */, + F71325890C4A060900B99F2D /* ANTLRRewriteRuleElementStream.m in Sources */, + F70B11BE0C4C2B6400C3ECE0 /* ANTLRRewriteRuleSubtreeStream.m in Sources */, + F70B11C40C4C2B7900C3ECE0 /* ANTLRRewriteRuleTokenStream.m in Sources */, + F7B1E5B10CD7CF1900CE136E /* ANTLRBaseRecognizerState.m in Sources */, + F7B1E5B30CD7CF1900CE136E /* ANTLRLexerState.m in Sources */, + F76AA8160CE9E29400AF044C /* ANTLRTreeParserRuleReturnScope.m in Sources */, + F76AA8F80CEA290C00AF044C /* ANTLRUnbufferedCommonTreeNodeStream.m in Sources */, + F76AA91F0CEA2DC600AF044C /* ANTLRUnbufferedCommonTreeNodeStreamState.m in Sources */, + F76AA9910CEA515A00AF044C /* ANTLRCommonTreeNodeStream.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F700E8610A5FA31D005D0757 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F738D3610B07C105001813C4 /* CombinedLexer.m in Sources */, + F738D3620B07C105001813C4 /* CombinedParser.m in Sources */, + F738D3630B07C10A001813C4 /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F700ECD40A5FE186005D0757 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F738D3190B07BDB7001813C4 /* main.m in Sources */, + F798B5940B278A0E005BCA94 /* SimpleC.g in Sources */, + F76287150B714E82006AA7EF /* SimpleCParser.m in Sources */, + F76287160B714E83006AA7EF /* SimpleCLexer.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F7037E9D0A05AFB60070435D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F7048FF80B07D05400D2F326 /* TestLexer.m in Sources */, + F7048FF90B07D05800D2F326 /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F70BB37C098E5AFF0054FEF8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F70BB39D098E62740054FEF8 /* TestBitSet.m in Sources */, + F7492DF109C00E4800B25E30 /* TestStringStream.m in Sources */, + F7941B480C5934E6006E9A9B /* TestRewriteRuleTokenStream.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F72C5E5D0AB7E4C900282574 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F7623C540B3616240022547D /* main.m in Sources */, + F741D0830B381E720024DF3F /* SimpleCTP.m in Sources */, + F741D0840B381E730024DF3F /* SimpleCParser.m in Sources */, + F741D08E0B381EA90024DF3F /* SimpleCLexer.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F79D565D0A0E23A400EA3CEE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F738D37E0B07C3BD001813C4 /* main.m in Sources */, + F76287170B714EA9006AA7EF /* FuzzyJavaLexer.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F7CD475A0C64D22800FF933A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F7CD47650C64D24C00FF933A /* TreeRewriteLexer.m in Sources */, + F7CD47660C64D24D00FF933A /* TreeRewriteParser.m in Sources */, + F7CD47670C64D24D00FF933A /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F7DD05EB0A7B15E1006A006C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F738D2120B07B32D001813C4 /* T.g in Sources */, + F738D2220B07B39F001813C4 /* main.m in Sources */, + F76287130B714E77006AA7EF /* TLexer.m in Sources */, + F76287140B714E78006AA7EF /* TParser.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F7DD07410A7B6618006A006C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F738D1FC0B07B1BD001813C4 /* main.m in Sources */, + F738D20D0B07B265001813C4 /* SymbolTableParser.m in Sources */, + F738D20E0B07B266001813C4 /* SymbolTableLexer.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + F700E8670A5FA32E005D0757 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8DC2EF4F0486A6940098B216 /* ANTLR */; + targetProxy = F700E8660A5FA32E005D0757 /* PBXContainerItemProxy */; + }; + F700F0200A61498E005D0757 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8DC2EF4F0486A6940098B216 /* ANTLR */; + targetProxy = F700F01F0A61498E005D0757 /* PBXContainerItemProxy */; + }; + F7037EA50A05AFCB0070435D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8DC2EF4F0486A6940098B216 /* ANTLR */; + targetProxy = F7037EA40A05AFCB0070435D /* PBXContainerItemProxy */; + }; + F72C5E5B0AB7E4C900282574 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8DC2EF4F0486A6940098B216 /* ANTLR */; + targetProxy = F72C5E5C0AB7E4C900282574 /* PBXContainerItemProxy */; + }; + F762874C0B715417006AA7EF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F76287450B7151E3006AA7EF /* Regenerate fuzzy */; + targetProxy = F762874B0B715417006AA7EF /* PBXContainerItemProxy */; + }; + F76287A70B7157C2006AA7EF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F762877E0B71559C006AA7EF /* Regenerate combined */; + targetProxy = F76287A60B7157C2006AA7EF /* PBXContainerItemProxy */; + }; + F76287A90B7157C2006AA7EF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F76287820B71559F006AA7EF /* Regenerate LL-star */; + targetProxy = F76287A80B7157C2006AA7EF /* PBXContainerItemProxy */; + }; + F76287AB0B7157C2006AA7EF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F76287860B7155A2006AA7EF /* Regenerate hoistedPredicates */; + targetProxy = F76287AA0B7157C2006AA7EF /* PBXContainerItemProxy */; + }; + F76287AD0B7157C2006AA7EF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F762878A0B7155AB006AA7EF /* Regenerate scopes */; + targetProxy = F76287AC0B7157C2006AA7EF /* PBXContainerItemProxy */; + }; + F76287AF0B7157C2006AA7EF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F762878E0B7155AF006AA7EF /* Regenerate simplec tree */; + targetProxy = F76287AE0B7157C2006AA7EF /* PBXContainerItemProxy */; + }; + F79D5AF20A0E632A00EA3CEE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8DC2EF4F0486A6940098B216 /* ANTLR */; + targetProxy = F79D5AF10A0E632A00EA3CEE /* PBXContainerItemProxy */; + }; + F79EFB140C5845A300ABAB3D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F76287780B71557E006AA7EF /* Regenerate lexertest-simple */; + targetProxy = F79EFB130C5845A300ABAB3D /* PBXContainerItemProxy */; + }; + F7CD47600C64D22F00FF933A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8DC2EF4F0486A6940098B216 /* ANTLR */; + targetProxy = F7CD475F0C64D22F00FF933A /* PBXContainerItemProxy */; + }; + F7DD05F40A7B1649006A006C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8DC2EF4F0486A6940098B216 /* ANTLR */; + targetProxy = F7DD05F30A7B1649006A006C /* PBXContainerItemProxy */; + }; + F7DD07510A7B6666006A006C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8DC2EF4F0486A6940098B216 /* ANTLR */; + targetProxy = F7DD07500A7B6666006A006C /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 089C1666FE841158C02AAC07 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 089C1667FE841158C02AAC07 /* English */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 1DEB91AE08733DA50010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEPLOYMENT_LOCATION = NO; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_VERSION = A; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_MODEL_TUNING = G4; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = ANTLR_Prefix.pch; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Frameworks"; + PRODUCT_NAME = ANTLR; + VERSIONING_SYSTEM = "apple-generic"; + WRAPPER_EXTENSION = framework; + ZERO_LINK = NO; + }; + name = Debug; + }; + 1DEB91AF08733DA50010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + BUILD_VARIANTS = ( + normal, + debug, + ); + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_VERSION = A; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = ANTLR_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Frameworks"; + PRODUCT_NAME = ANTLR; + VERSIONING_SYSTEM = "apple-generic"; + WRAPPER_EXTENSION = framework; + }; + name = Release; + }; + 1DEB91B208733DA50010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ANTLR_EXTRA_ARGS = ""; + ANTLR_EXTRA_JAVA_ARGS = "/Users/kroepke/classpath/antlr-2.7.7.jar:/Users/kroepke/IdeaProjects/antlr3/out/production/antlr3:/Users/kroepke/IdeaProjects/antlr3/out/production/stringtemplate"; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DEBUGGING_SYMBOLS = full; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_PARAMETER = NO; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Debug; + }; + 1DEB91B308733DA50010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ANTLR_EXTRA_JAVA_ARGS = "/Users/kroepke/classpath/antlr-2.7.7.jar:/Users/kroepke/IdeaProjects/antlr3/out/production/antlr3:/Users/kroepke/IdeaProjects/antlr3/out/production/stringtemplate"; + ARCHS = ( + ppc, + i386, + ); + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; + GCC_WARN_SHADOW = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_PARAMETER = YES; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; + F700E86D0A5FA34D005D0757 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ANTLR_FORCE_OUT_DIR = "$(PROJECT_DIR)/examples/combined"; + ANTLR_LIB_DIR = "$(PROJECT_DIR)/examples/combined"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = combined; + ZERO_LINK = YES; + }; + name = Debug; + }; + F700E86E0A5FA34D005D0757 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = combined; + ZERO_LINK = NO; + }; + name = Release; + }; + F700ECDD0A5FE1BF005D0757 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ANTLR_DEBUG = YES; + ANTLR_FORCE_OUT_DIR = "$(PROJECT_DIR)/examples/LL-star"; + ANTLR_LIB_DIR = "$(PROJECT_DIR)/examples/LL-star"; + ANTLR_X_DEBUG_ST = NO; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G4; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = "LL-star"; + ZERO_LINK = NO; + }; + name = Debug; + }; + F700ECDE0A5FE1BF005D0757 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = stabs; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = "LL-star"; + ZERO_LINK = NO; + }; + name = Release; + }; + F7037EB90A05AFEF0070435D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ANTLR_FORCE_OUT_DIR = "$(PROJECT_DIR)/examples/lexertest-simple"; + ANTLR_LIB_DIR = "$(PROJECT_DIR)/examples/lexertest-simple"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_ENABLE_PASCAL_STRINGS = YES; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = "lexertest-simple"; + ZERO_LINK = NO; + }; + name = Debug; + }; + F7037EBA0A05AFEF0070435D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = "lexertest-simple"; + ZERO_LINK = NO; + }; + name = Release; + }; + F70BB383098E5B040054FEF8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_FRAMEWORKS_DIR_QUOTED)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 1; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Cocoa.framework/Headers/Cocoa.h"; + INFOPLIST_FILE = "Test-Info.plist"; + INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; + OTHER_LDFLAGS = ( + "-framework", + Cocoa, + "-framework", + SenTestingKit, + ); + PREBINDING = NO; + PRODUCT_NAME = Test; + WRAPPER_EXTENSION = octest; + ZERO_LINK = NO; + }; + name = Debug; + }; + F70BB384098E5B040054FEF8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(value)", + "$(DEVELOPER_FRAMEWORKS_DIR_QUOTED)", + ); + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Cocoa.framework/Headers/Cocoa.h"; + INFOPLIST_FILE = "Test-Info.plist"; + INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; + OTHER_LDFLAGS = ( + "-framework", + Cocoa, + "-framework", + SenTestingKit, + ); + PREBINDING = NO; + PRODUCT_NAME = Test; + WRAPPER_EXTENSION = octest; + ZERO_LINK = NO; + }; + name = Release; + }; + F72C5E670AB7E4C900282574 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ANTLR_DEBUG = YES; + ANTLR_FORCE_OUT_DIR = "$(PROJECT_DIR)/examples/simpleCTreeParser"; + ANTLR_LIB_DIR = "$(PROJECT_DIR)/examples/simpleCTreeParser"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = simplectree; + ZERO_LINK = NO; + }; + name = Debug; + }; + F72C5E680AB7E4C900282574 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = simplectree; + ZERO_LINK = NO; + }; + name = Release; + }; + F76287410B7151B9006AA7EF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + PRODUCT_NAME = Untitled; + }; + name = Debug; + }; + F76287420B7151B9006AA7EF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + PRODUCT_NAME = Untitled; + ZERO_LINK = NO; + }; + name = Release; + }; + F76287470B715201006AA7EF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = fuzzy; + }; + name = Debug; + }; + F76287480B715201006AA7EF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = fuzzy; + }; + name = Release; + }; + F762877A0B71557E006AA7EF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "lexertest-simple"; + }; + name = Debug; + }; + F762877B0B71557E006AA7EF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = fuzzy; + }; + name = Release; + }; + F76287800B71559C006AA7EF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = combined; + }; + name = Debug; + }; + F76287810B71559C006AA7EF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = combined; + }; + name = Release; + }; + F76287840B71559F006AA7EF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "LL-star"; + }; + name = Debug; + }; + F76287850B71559F006AA7EF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "LL-star"; + }; + name = Release; + }; + F76287880B7155A2006AA7EF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = hoistedPredicates; + }; + name = Debug; + }; + F76287890B7155A2006AA7EF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = hoistedPredicates; + }; + name = Release; + }; + F762878C0B7155AB006AA7EF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = scopes; + }; + name = Debug; + }; + F762878D0B7155AB006AA7EF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = scopes; + }; + name = Release; + }; + F76287900B7155AF006AA7EF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "simplec tree"; + }; + name = Debug; + }; + F76287910B7155AF006AA7EF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "simplec tree"; + }; + name = Release; + }; + F79D56700A0E23D600EA3CEE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ANTLR_FORCE_OUT_DIR = "$(PROJECT_DIR)/examples/fuzzy"; + ANTLR_LIB_DIR = "$(PROJECT_DIR)/examples/fuzzy"; + ANTLR_TRACE = NO; + ANTLR_X_DEBUG_ST = NO; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G4; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = fuzzy; + ZERO_LINK = NO; + }; + name = Debug; + }; + F79D56710A0E23D600EA3CEE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = fuzzy; + ZERO_LINK = NO; + }; + name = Release; + }; + F7C562300CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ANTLR_EXTRA_ARGS = "-XdbgST"; + ANTLR_EXTRA_JAVA_ARGS = "/Users/kroepke/classpath/antlr-2.7.7.jar:/Users/kroepke/IdeaProjects/antlr3/out/production/antlr3:/Users/kroepke/IdeaProjects/antlr3/out/production/stringtemplate"; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DEBUGGING_SYMBOLS = full; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_PARAMETER = NO; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = "Debug with StringTemplate Debug"; + }; + F7C562310CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEPLOYMENT_LOCATION = NO; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_VERSION = A; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_MODEL_TUNING = G4; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = ANTLR_Prefix.pch; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Frameworks"; + PRODUCT_NAME = ANTLR; + VERSIONING_SYSTEM = "apple-generic"; + WRAPPER_EXTENSION = framework; + ZERO_LINK = NO; + }; + name = "Debug with StringTemplate Debug"; + }; + F7C562320CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_FRAMEWORKS_DIR_QUOTED)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 1; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Cocoa.framework/Headers/Cocoa.h"; + INFOPLIST_FILE = "Test-Info.plist"; + INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; + OTHER_LDFLAGS = ( + "-framework", + Cocoa, + "-framework", + SenTestingKit, + ); + PREBINDING = NO; + PRODUCT_NAME = Test; + WRAPPER_EXTENSION = octest; + ZERO_LINK = NO; + }; + name = "Debug with StringTemplate Debug"; + }; + F7C562330CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + PRODUCT_NAME = Untitled; + }; + name = "Debug with StringTemplate Debug"; + }; + F7C562340CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ANTLR_FORCE_OUT_DIR = "$(PROJECT_DIR)/examples/lexertest-simple"; + ANTLR_LIB_DIR = "$(PROJECT_DIR)/examples/lexertest-simple"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_ENABLE_PASCAL_STRINGS = YES; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = "lexertest-simple"; + ZERO_LINK = NO; + }; + name = "Debug with StringTemplate Debug"; + }; + F7C562350CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "lexertest-simple"; + }; + name = "Debug with StringTemplate Debug"; + }; + F7C562360CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ANTLR_FORCE_OUT_DIR = "$(PROJECT_DIR)/examples/fuzzy"; + ANTLR_LIB_DIR = "$(PROJECT_DIR)/examples/fuzzy"; + ANTLR_TRACE = NO; + ANTLR_X_DEBUG_ST = NO; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G4; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = fuzzy; + ZERO_LINK = NO; + }; + name = "Debug with StringTemplate Debug"; + }; + F7C562370CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = fuzzy; + }; + name = "Debug with StringTemplate Debug"; + }; + F7C562380CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ANTLR_FORCE_OUT_DIR = "$(PROJECT_DIR)/examples/combined"; + ANTLR_LIB_DIR = "$(PROJECT_DIR)/examples/combined"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = combined; + ZERO_LINK = YES; + }; + name = "Debug with StringTemplate Debug"; + }; + F7C562390CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = combined; + }; + name = "Debug with StringTemplate Debug"; + }; + F7C5623A0CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ANTLR_DEBUG = YES; + ANTLR_FORCE_OUT_DIR = "$(PROJECT_DIR)/examples/LL-star"; + ANTLR_LIB_DIR = "$(PROJECT_DIR)/examples/LL-star"; + ANTLR_X_DEBUG_ST = NO; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G4; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = "LL-star"; + ZERO_LINK = NO; + }; + name = "Debug with StringTemplate Debug"; + }; + F7C5623B0CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "LL-star"; + }; + name = "Debug with StringTemplate Debug"; + }; + F7C5623C0CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ANTLR_FORCE_OUT_DIR = "$(PROJECT_DIR)/examples/hoistedPredicates"; + ANTLR_LIB_DIR = "$(PROJECT_DIR)/examples/hoistedPredicates"; + ARCHS = "$(NATIVE_ARCH)"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = hoistedPredicates; + ZERO_LINK = NO; + }; + name = "Debug with StringTemplate Debug"; + }; + F7C5623D0CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = hoistedPredicates; + }; + name = "Debug with StringTemplate Debug"; + }; + F7C5623E0CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ANTLR_FORCE_OUT_DIR = "$(PROJECT_DIR)/examples/scopes"; + ANTLR_LIB_DIR = "$(PROJECT_DIR)/examples/scopes"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = scopes; + ZERO_LINK = NO; + }; + name = "Debug with StringTemplate Debug"; + }; + F7C5623F0CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = scopes; + }; + name = "Debug with StringTemplate Debug"; + }; + F7C562400CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ANTLR_DEBUG = YES; + ANTLR_FORCE_OUT_DIR = "$(PROJECT_DIR)/examples/simpleCTreeParser"; + ANTLR_LIB_DIR = "$(PROJECT_DIR)/examples/simpleCTreeParser"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = simplectree; + ZERO_LINK = NO; + }; + name = "Debug with StringTemplate Debug"; + }; + F7C562410CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "simplec tree"; + }; + name = "Debug with StringTemplate Debug"; + }; + F7C562420CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALTERNATE_GROUP = "$(INSTALL_GROUP)"; + ALTERNATE_MODE = "$(INSTALL_MODE_FLAG)"; + ALTERNATE_OWNER = "$(INSTALL_OWNER)"; + ALTERNATE_PERMISSIONS_FILES = ""; + ALWAYS_SEARCH_USER_PATHS = YES; + ANTLR_DEBUG = YES; + ANTLR_EXTRA_JAVA_ARGS = "/Users/kroepke/Projects/idea/antlr3/classes:/Users/kroepke/Projects/idea/stringtemplate/classes:/usr/local/lib/antlr.jar"; + ANTLR_FORCE_OUT_DIR = "$(PROJECT_DIR)/examples/treerewrite"; + ANTLR_LIB_DIR = "$(PROJECT_DIR)/examples/treerewrite"; + ARCHS = "$(NATIVE_ARCH)"; + BUILD_VARIANTS = normal; + BUNDLE_LOADER = ""; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + CONFIGURATION_TEMP_DIR = "$(PROJECT_TEMP_DIR)/$(CONFIGURATION)"; + COPYING_PRESERVES_HFS_DATA = NO; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = ""; + DEAD_CODE_STRIPPING = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + DEPLOYMENT_LOCATION = NO; + DEPLOYMENT_POSTPROCESSING = NO; + DSTROOT = "/tmp/$(PROJECT_NAME).dst"; + DYLIB_COMPATIBILITY_VERSION = ""; + DYLIB_CURRENT_VERSION = ""; + EXECUTABLE_EXTENSION = ""; + EXECUTABLE_PREFIX = ""; + EXPORTED_SYMBOLS_FILE = ""; + FRAMEWORK_SEARCH_PATHS = ""; + FRAMEWORK_VERSION = A; + GCC_ALTIVEC_EXTENSIONS = NO; + GCC_AUTO_VECTORIZATION = NO; + GCC_CHAR_IS_UNSIGNED_CHAR = NO; + GCC_CW_ASM_SYNTAX = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_ASM_KEYWORD = YES; + GCC_ENABLE_CPP_EXCEPTIONS = YES; + GCC_ENABLE_CPP_RTTI = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_ENABLE_PASCAL_STRINGS = YES; + GCC_ENABLE_SSE3_EXTENSIONS = NO; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_ENABLE_TRIGRAPHS = NO; + GCC_FAST_MATH = NO; + GCC_FAST_OBJC_DISPATCH = NO; + GCC_FEEDBACK_DIRECTED_OPTIMIZATION = Off; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO; + GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_INPUT_FILETYPE = automatic; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; + GCC_MODEL_PPC64 = NO; + GCC_MODEL_TUNING = G5; + GCC_NO_COMMON_BLOCKS = NO; + GCC_OBJC_CALL_CXX_CDTORS = NO; + GCC_ONE_BYTE_BOOL = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + GCC_PREPROCESSOR_DEFINITIONS = ""; + GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ""; + GCC_REUSE_STRINGS = YES; + GCC_SHORT_ENUMS = NO; + GCC_STRICT_ALIASING = NO; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + GCC_THREADSAFE_STATICS = YES; + GCC_TREAT_NONCONFORMANT_CODE_ERRORS_AS_WARNINGS = NO; + GCC_TREAT_WARNINGS_AS_ERRORS = NO; + GCC_UNROLL_LOOPS = NO; + GCC_USE_GCC3_PFE_SUPPORT = "$(USE_GCC3_PFE_SUPPORT)"; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES; + GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; + GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO; + GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INHIBIT_ALL_WARNINGS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PEDANTIC = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_PARAMETER = NO; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_MASTER_OBJECT_FILE = NO; + GENERATE_PKGINFO_FILE = NO; + GENERATE_PROFILING_CODE = NO; + HEADER_SEARCH_PATHS = ""; + INFOPLIST_EXPAND_BUILD_SETTINGS = YES; + INFOPLIST_FILE = ""; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = ""; + INFOPLIST_PREFIX_HEADER = ""; + INFOPLIST_PREPROCESS = NO; + INFOPLIST_PREPROCESSOR_DEFINITIONS = ""; + INIT_ROUTINE = ""; + INSTALL_GROUP = "$(GROUP)"; + INSTALL_MODE_FLAG = "a-w,a+rX"; + INSTALL_OWNER = "$(USER)"; + INSTALL_PATH = "$(HOME)/bin"; + KEEP_PRIVATE_EXTERNS = NO; + LIBRARY_SEARCH_PATHS = ""; + LINKER_DISPLAYS_FILES_FOR_UNDEFINED_SYMBOLS = YES; + LINKER_DISPLAYS_MANGLED_NAMES = NO; + LINK_WITH_STANDARD_LIBRARIES = YES; + MACH_O_TYPE = ""; + MACOSX_DEPLOYMENT_TARGET = "$(inherited)"; + OBJROOT = /Users/kroepke/Projects/Intermediates; + ONLY_LINK_ESSENTIAL_SYMBOLS = NO; + OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = YES; + PRELINK_FLAGS = ""; + PRELINK_LIBS = ""; + PRESERVE_DEAD_CODE_INITS_AND_TERMS = NO; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_NAME = treerewrite; + PUBLIC_HEADERS_FOLDER_PATH = ""; + REZ_SEARCH_PATHS = ""; + SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + SECTORDER_FLAGS = ""; + SEPARATE_STRIP = NO; + SEPARATE_SYMBOL_EDIT = NO; + SHARED_PRECOMPS_DIR = "$(CACHE_ROOT)/SharedPrecompiledHeaders"; + SKIP_INSTALL = NO; + STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = dynamic; + STRIPFLAGS = ""; + STRIP_INSTALLED_PRODUCT = ""; + STRIP_STYLE = all; + SYMROOT = /Users/kroepke/Projects/Build; + TEST_HOST = ""; + TEST_RIG = ""; + UNEXPORTED_SYMBOLS_FILE = ""; + USER_HEADER_SEARCH_PATHS = ""; + VERSIONING_SYSTEM = ""; + WARNING_CFLAGS = ""; + WARNING_LDFLAGS = ""; + WRAPPER_EXTENSION = ""; + ZERO_LINK = NO; + }; + name = "Debug with StringTemplate Debug"; + }; + F7C562430CD513D400727DB0 /* Debug with StringTemplate Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = treerewrite; + }; + name = "Debug with StringTemplate Debug"; + }; + F7CD47630C64D23800FF933A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = treerewrite; + }; + name = Debug; + }; + F7CD47640C64D23800FF933A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = treerewrite; + }; + name = Release; + }; + F7CD477D0C64D27000FF933A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALTERNATE_GROUP = "$(INSTALL_GROUP)"; + ALTERNATE_MODE = "$(INSTALL_MODE_FLAG)"; + ALTERNATE_OWNER = "$(INSTALL_OWNER)"; + ALTERNATE_PERMISSIONS_FILES = ""; + ALWAYS_SEARCH_USER_PATHS = YES; + ANTLR_DEBUG = YES; + ANTLR_EXTRA_JAVA_ARGS = "/Users/kroepke/Projects/idea/antlr3/classes:/Users/kroepke/Projects/idea/stringtemplate/classes:/usr/local/lib/antlr.jar"; + ANTLR_FORCE_OUT_DIR = "$(PROJECT_DIR)/examples/treerewrite"; + ANTLR_LIB_DIR = "$(PROJECT_DIR)/examples/treerewrite"; + ARCHS = "$(NATIVE_ARCH)"; + BUILD_VARIANTS = normal; + BUNDLE_LOADER = ""; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + CONFIGURATION_TEMP_DIR = "$(PROJECT_TEMP_DIR)/$(CONFIGURATION)"; + COPYING_PRESERVES_HFS_DATA = NO; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = ""; + DEAD_CODE_STRIPPING = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + DEPLOYMENT_LOCATION = NO; + DEPLOYMENT_POSTPROCESSING = NO; + DSTROOT = "/tmp/$(PROJECT_NAME).dst"; + DYLIB_COMPATIBILITY_VERSION = ""; + DYLIB_CURRENT_VERSION = ""; + EXECUTABLE_EXTENSION = ""; + EXECUTABLE_PREFIX = ""; + EXPORTED_SYMBOLS_FILE = ""; + FRAMEWORK_SEARCH_PATHS = ""; + FRAMEWORK_VERSION = A; + GCC_ALTIVEC_EXTENSIONS = NO; + GCC_AUTO_VECTORIZATION = NO; + GCC_CHAR_IS_UNSIGNED_CHAR = NO; + GCC_CW_ASM_SYNTAX = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DEBUGGING_SYMBOLS = full; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_ASM_KEYWORD = YES; + GCC_ENABLE_CPP_EXCEPTIONS = YES; + GCC_ENABLE_CPP_RTTI = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_ENABLE_PASCAL_STRINGS = YES; + GCC_ENABLE_SSE3_EXTENSIONS = NO; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_ENABLE_TRIGRAPHS = NO; + GCC_FAST_MATH = NO; + GCC_FAST_OBJC_DISPATCH = NO; + GCC_FEEDBACK_DIRECTED_OPTIMIZATION = Off; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO; + GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_INPUT_FILETYPE = automatic; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; + GCC_MODEL_PPC64 = NO; + GCC_MODEL_TUNING = G5; + GCC_NO_COMMON_BLOCKS = NO; + GCC_OBJC_CALL_CXX_CDTORS = NO; + GCC_ONE_BYTE_BOOL = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + GCC_PREPROCESSOR_DEFINITIONS = ""; + GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ""; + GCC_REUSE_STRINGS = YES; + GCC_SHORT_ENUMS = NO; + GCC_STRICT_ALIASING = NO; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + GCC_THREADSAFE_STATICS = YES; + GCC_TREAT_NONCONFORMANT_CODE_ERRORS_AS_WARNINGS = NO; + GCC_TREAT_WARNINGS_AS_ERRORS = NO; + GCC_UNROLL_LOOPS = NO; + GCC_USE_GCC3_PFE_SUPPORT = "$(USE_GCC3_PFE_SUPPORT)"; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES; + GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; + GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO; + GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INHIBIT_ALL_WARNINGS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PEDANTIC = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_PARAMETER = NO; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_MASTER_OBJECT_FILE = NO; + GENERATE_PKGINFO_FILE = NO; + GENERATE_PROFILING_CODE = NO; + HEADER_SEARCH_PATHS = ""; + INFOPLIST_EXPAND_BUILD_SETTINGS = YES; + INFOPLIST_FILE = ""; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = ""; + INFOPLIST_PREFIX_HEADER = ""; + INFOPLIST_PREPROCESS = NO; + INFOPLIST_PREPROCESSOR_DEFINITIONS = ""; + INIT_ROUTINE = ""; + INSTALL_GROUP = "$(GROUP)"; + INSTALL_MODE_FLAG = "a-w,a+rX"; + INSTALL_OWNER = "$(USER)"; + INSTALL_PATH = "$(HOME)/bin"; + KEEP_PRIVATE_EXTERNS = NO; + LIBRARY_SEARCH_PATHS = ""; + LINKER_DISPLAYS_FILES_FOR_UNDEFINED_SYMBOLS = YES; + LINKER_DISPLAYS_MANGLED_NAMES = NO; + LINK_WITH_STANDARD_LIBRARIES = YES; + MACH_O_TYPE = ""; + MACOSX_DEPLOYMENT_TARGET = "$(inherited)"; + OBJROOT = /Users/kroepke/Projects/Intermediates; + ONLY_LINK_ESSENTIAL_SYMBOLS = NO; + OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = YES; + PRELINK_FLAGS = ""; + PRELINK_LIBS = ""; + PRESERVE_DEAD_CODE_INITS_AND_TERMS = NO; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_NAME = treerewrite; + PUBLIC_HEADERS_FOLDER_PATH = ""; + REZ_SEARCH_PATHS = ""; + SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + SECTORDER_FLAGS = ""; + SEPARATE_STRIP = NO; + SEPARATE_SYMBOL_EDIT = NO; + SHARED_PRECOMPS_DIR = "$(CACHE_ROOT)/SharedPrecompiledHeaders"; + SKIP_INSTALL = NO; + STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = dynamic; + STRIPFLAGS = ""; + STRIP_INSTALLED_PRODUCT = ""; + STRIP_STYLE = all; + SYMROOT = /Users/kroepke/Projects/Build; + TEST_HOST = ""; + TEST_RIG = ""; + UNEXPORTED_SYMBOLS_FILE = ""; + USER_HEADER_SEARCH_PATHS = ""; + VERSIONING_SYSTEM = ""; + WARNING_CFLAGS = ""; + WARNING_LDFLAGS = ""; + WRAPPER_EXTENSION = ""; + ZERO_LINK = NO; + }; + name = Debug; + }; + F7CD477E0C64D27000FF933A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALTERNATE_GROUP = "$(INSTALL_GROUP)"; + ALTERNATE_MODE = "$(INSTALL_MODE_FLAG)"; + ALTERNATE_OWNER = "$(INSTALL_OWNER)"; + ALTERNATE_PERMISSIONS_FILES = ""; + ALWAYS_SEARCH_USER_PATHS = YES; + ARCHS = ( + ppc, + i386, + ); + BUILD_VARIANTS = normal; + BUNDLE_LOADER = ""; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)"; + CONFIGURATION_TEMP_DIR = "$(PROJECT_TEMP_DIR)/$(CONFIGURATION)"; + COPYING_PRESERVES_HFS_DATA = NO; + COPY_PHASE_STRIP = YES; + CURRENT_PROJECT_VERSION = ""; + DEAD_CODE_STRIPPING = NO; + DEBUG_INFORMATION_FORMAT = stabs; + DEPLOYMENT_LOCATION = NO; + DEPLOYMENT_POSTPROCESSING = NO; + DSTROOT = "/tmp/$(PROJECT_NAME).dst"; + DYLIB_COMPATIBILITY_VERSION = ""; + DYLIB_CURRENT_VERSION = ""; + EXECUTABLE_EXTENSION = ""; + EXECUTABLE_PREFIX = ""; + EXPORTED_SYMBOLS_FILE = ""; + FRAMEWORK_SEARCH_PATHS = ""; + FRAMEWORK_VERSION = A; + GCC_ALTIVEC_EXTENSIONS = NO; + GCC_AUTO_VECTORIZATION = NO; + GCC_CHAR_IS_UNSIGNED_CHAR = NO; + GCC_CW_ASM_SYNTAX = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DEBUGGING_SYMBOLS = default; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_ASM_KEYWORD = YES; + GCC_ENABLE_CPP_EXCEPTIONS = YES; + GCC_ENABLE_CPP_RTTI = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_ENABLE_PASCAL_STRINGS = YES; + GCC_ENABLE_SSE3_EXTENSIONS = NO; + GCC_ENABLE_SYMBOL_SEPARATION = YES; + GCC_ENABLE_TRIGRAPHS = NO; + GCC_FAST_MATH = NO; + GCC_FAST_OBJC_DISPATCH = NO; + GCC_FEEDBACK_DIRECTED_OPTIMIZATION = Off; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO; + GCC_INLINES_ARE_PRIVATE_EXTERN = YES; + GCC_INPUT_FILETYPE = automatic; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO; + GCC_MODEL_PPC64 = NO; + GCC_MODEL_TUNING = G5; + GCC_NO_COMMON_BLOCKS = NO; + GCC_OBJC_CALL_CXX_CDTORS = NO; + GCC_ONE_BYTE_BOOL = NO; + GCC_OPTIMIZATION_LEVEL = s; + GCC_PFE_FILE_C_DIALECTS = "c objective-c c++ objective-c++"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + GCC_PREPROCESSOR_DEFINITIONS = ""; + GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ""; + GCC_REUSE_STRINGS = YES; + GCC_SHORT_ENUMS = NO; + GCC_STRICT_ALIASING = NO; + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + GCC_THREADSAFE_STATICS = YES; + GCC_TREAT_NONCONFORMANT_CODE_ERRORS_AS_WARNINGS = NO; + GCC_TREAT_WARNINGS_AS_ERRORS = NO; + GCC_UNROLL_LOOPS = NO; + GCC_USE_GCC3_PFE_SUPPORT = "$(USE_GCC3_PFE_SUPPORT)"; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES; + GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; + GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = NO; + GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; + GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; + GCC_WARN_INHIBIT_ALL_WARNINGS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_MISSING_PARENTHESES = NO; + GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO; + GCC_WARN_PEDANTIC = NO; + GCC_WARN_SHADOW = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = NO; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_PARAMETER = YES; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_MASTER_OBJECT_FILE = NO; + GENERATE_PKGINFO_FILE = NO; + GENERATE_PROFILING_CODE = NO; + HEADER_SEARCH_PATHS = ""; + INFOPLIST_EXPAND_BUILD_SETTINGS = YES; + INFOPLIST_FILE = ""; + INFOPLIST_OTHER_PREPROCESSOR_FLAGS = ""; + INFOPLIST_PREFIX_HEADER = ""; + INFOPLIST_PREPROCESS = NO; + INFOPLIST_PREPROCESSOR_DEFINITIONS = ""; + INIT_ROUTINE = ""; + INSTALL_GROUP = "$(GROUP)"; + INSTALL_MODE_FLAG = "a-w,a+rX"; + INSTALL_OWNER = "$(USER)"; + INSTALL_PATH = "$(HOME)/bin"; + KEEP_PRIVATE_EXTERNS = NO; + LIBRARY_SEARCH_PATHS = ""; + LINKER_DISPLAYS_FILES_FOR_UNDEFINED_SYMBOLS = YES; + LINKER_DISPLAYS_MANGLED_NAMES = NO; + LINK_WITH_STANDARD_LIBRARIES = YES; + MACH_O_TYPE = ""; + MACOSX_DEPLOYMENT_TARGET = "$(inherited)"; + OBJROOT = /Users/kroepke/Projects/Intermediates; + ONLY_LINK_ESSENTIAL_SYMBOLS = NO; + OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = YES; + PRELINK_FLAGS = ""; + PRELINK_LIBS = ""; + PRESERVE_DEAD_CODE_INITS_AND_TERMS = NO; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_NAME = treerewrite; + PUBLIC_HEADERS_FOLDER_PATH = ""; + REZ_SEARCH_PATHS = ""; + SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + SECTORDER_FLAGS = ""; + SEPARATE_STRIP = NO; + SEPARATE_SYMBOL_EDIT = NO; + SHARED_PRECOMPS_DIR = "$(CACHE_ROOT)/SharedPrecompiledHeaders"; + SKIP_INSTALL = NO; + STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = dynamic; + STRIPFLAGS = ""; + STRIP_INSTALLED_PRODUCT = ""; + STRIP_STYLE = all; + SYMROOT = /Users/kroepke/Projects/Build; + TEST_HOST = ""; + TEST_RIG = ""; + UNEXPORTED_SYMBOLS_FILE = ""; + USER_HEADER_SEARCH_PATHS = ""; + VERSIONING_SYSTEM = ""; + WARNING_CFLAGS = ""; + WARNING_LDFLAGS = ""; + WRAPPER_EXTENSION = ""; + ZERO_LINK = NO; + }; + name = Release; + }; + F7DD05F10A7B1640006A006C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ANTLR_FORCE_OUT_DIR = "$(PROJECT_DIR)/examples/hoistedPredicates"; + ANTLR_LIB_DIR = "$(PROJECT_DIR)/examples/hoistedPredicates"; + ARCHS = "$(NATIVE_ARCH)"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = hoistedPredicates; + ZERO_LINK = NO; + }; + name = Debug; + }; + F7DD05F20A7B1640006A006C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(NATIVE_ARCH)"; + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_ENABLE_SYMBOL_SEPARATION = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = hoistedPredicates; + ZERO_LINK = NO; + }; + name = Release; + }; + F7DD077A0A7B6682006A006C /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ANTLR_FORCE_OUT_DIR = "$(PROJECT_DIR)/examples/scopes"; + ANTLR_LIB_DIR = "$(PROJECT_DIR)/examples/scopes"; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = scopes; + ZERO_LINK = NO; + }; + name = Debug; + }; + F7DD077B0A7B6682006A006C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; + INSTALL_PATH = "$(HOME)/bin"; + OTHER_LDFLAGS = ( + "-framework", + Foundation, + "-framework", + AppKit, + ); + PREBINDING = NO; + PRODUCT_NAME = scopes; + ZERO_LINK = NO; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "ANTLR" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB91AE08733DA50010E9CD /* Debug */, + F7C562310CD513D400727DB0 /* Debug with StringTemplate Debug */, + 1DEB91AF08733DA50010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "ANTLR" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB91B208733DA50010E9CD /* Debug */, + F7C562300CD513D400727DB0 /* Debug with StringTemplate Debug */, + 1DEB91B308733DA50010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F700E86C0A5FA34D005D0757 /* Build configuration list for PBXNativeTarget "combined" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F700E86D0A5FA34D005D0757 /* Debug */, + F7C562380CD513D400727DB0 /* Debug with StringTemplate Debug */, + F700E86E0A5FA34D005D0757 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F700ECDC0A5FE1BF005D0757 /* Build configuration list for PBXNativeTarget "LL-star" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F700ECDD0A5FE1BF005D0757 /* Debug */, + F7C5623A0CD513D400727DB0 /* Debug with StringTemplate Debug */, + F700ECDE0A5FE1BF005D0757 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F7037EB80A05AFEF0070435D /* Build configuration list for PBXNativeTarget "lexertest-simple" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F7037EB90A05AFEF0070435D /* Debug */, + F7C562340CD513D400727DB0 /* Debug with StringTemplate Debug */, + F7037EBA0A05AFEF0070435D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F70BB382098E5B040054FEF8 /* Build configuration list for PBXNativeTarget "Test" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F70BB383098E5B040054FEF8 /* Debug */, + F7C562320CD513D400727DB0 /* Debug with StringTemplate Debug */, + F70BB384098E5B040054FEF8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F72C5E660AB7E4C900282574 /* Build configuration list for PBXNativeTarget "simplec tree" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F72C5E670AB7E4C900282574 /* Debug */, + F7C562400CD513D400727DB0 /* Debug with StringTemplate Debug */, + F72C5E680AB7E4C900282574 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F76287400B7151B9006AA7EF /* Build configuration list for PBXAggregateTarget "Regenerate all examples" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F76287410B7151B9006AA7EF /* Debug */, + F7C562330CD513D400727DB0 /* Debug with StringTemplate Debug */, + F76287420B7151B9006AA7EF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F76287460B715201006AA7EF /* Build configuration list for PBXLegacyTarget "Regenerate fuzzy" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F76287470B715201006AA7EF /* Debug */, + F7C562370CD513D400727DB0 /* Debug with StringTemplate Debug */, + F76287480B715201006AA7EF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F76287790B71557E006AA7EF /* Build configuration list for PBXLegacyTarget "Regenerate lexertest-simple" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F762877A0B71557E006AA7EF /* Debug */, + F7C562350CD513D400727DB0 /* Debug with StringTemplate Debug */, + F762877B0B71557E006AA7EF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F762877F0B71559C006AA7EF /* Build configuration list for PBXLegacyTarget "Regenerate combined" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F76287800B71559C006AA7EF /* Debug */, + F7C562390CD513D400727DB0 /* Debug with StringTemplate Debug */, + F76287810B71559C006AA7EF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F76287830B71559F006AA7EF /* Build configuration list for PBXLegacyTarget "Regenerate LL-star" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F76287840B71559F006AA7EF /* Debug */, + F7C5623B0CD513D400727DB0 /* Debug with StringTemplate Debug */, + F76287850B71559F006AA7EF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F76287870B7155A2006AA7EF /* Build configuration list for PBXLegacyTarget "Regenerate hoistedPredicates" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F76287880B7155A2006AA7EF /* Debug */, + F7C5623D0CD513D400727DB0 /* Debug with StringTemplate Debug */, + F76287890B7155A2006AA7EF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F762878B0B7155AB006AA7EF /* Build configuration list for PBXLegacyTarget "Regenerate scopes" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F762878C0B7155AB006AA7EF /* Debug */, + F7C5623F0CD513D400727DB0 /* Debug with StringTemplate Debug */, + F762878D0B7155AB006AA7EF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F762878F0B7155AF006AA7EF /* Build configuration list for PBXLegacyTarget "Regenerate simplec tree" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F76287900B7155AF006AA7EF /* Debug */, + F7C562410CD513D400727DB0 /* Debug with StringTemplate Debug */, + F76287910B7155AF006AA7EF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F79D566F0A0E23D600EA3CEE /* Build configuration list for PBXNativeTarget "fuzzy" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F79D56700A0E23D600EA3CEE /* Debug */, + F7C562360CD513D400727DB0 /* Debug with StringTemplate Debug */, + F79D56710A0E23D600EA3CEE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F7CD47620C64D23800FF933A /* Build configuration list for PBXLegacyTarget "Regenerate treerewrite" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F7CD47630C64D23800FF933A /* Debug */, + F7C562430CD513D400727DB0 /* Debug with StringTemplate Debug */, + F7CD47640C64D23800FF933A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F7CD477C0C64D27000FF933A /* Build configuration list for PBXNativeTarget "treerewrite" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F7CD477D0C64D27000FF933A /* Debug */, + F7C562420CD513D400727DB0 /* Debug with StringTemplate Debug */, + F7CD477E0C64D27000FF933A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F7DD05F00A7B1640006A006C /* Build configuration list for PBXNativeTarget "hoistedPredicates" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F7DD05F10A7B1640006A006C /* Debug */, + F7C5623C0CD513D400727DB0 /* Debug with StringTemplate Debug */, + F7DD05F20A7B1640006A006C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F7DD07790A7B6682006A006C /* Build configuration list for PBXNativeTarget "scopes" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F7DD077A0A7B6682006A006C /* Debug */, + F7C5623E0CD513D400727DB0 /* Debug with StringTemplate Debug */, + F7DD077B0A7B6682006A006C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 0867D690FE84028FC02AAC07 /* Project object */; +} diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRBaseRecognizer.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRBaseRecognizer.h new file mode 100644 index 0000000..d6c26d5 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRBaseRecognizer.h @@ -0,0 +1,141 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import +#import + +#import + +// This is an abstract superclass for lexers and parsers. + +#define ANTLR_MEMO_RULE_FAILED -2 +#define ANTLR_MEMO_RULE_UNKNOWN -1 +#define ANTLR_INITIAL_FOLLOW_STACK_SIZE 100 + +@class ANTLRBitSet; +#import +#import +#import +#import + +@interface ANTLRBaseRecognizer : NSObject { + ANTLRBaseRecognizerState *state; // the state of this recognizer. Might be shared with other recognizers, e.g. in grammar import scenarios. + NSString *grammarFileName; // where did the grammar come from. filled in by codegeneration +} + +// simple accessors +- (BOOL) isFailed; +- (void) setIsFailed: (BOOL) flag; + +- (BOOL) isBacktracking; +- (int) backtrackingLevel; +- (void) setBacktrackingLevel:(int) level; + +- (id) init; + +- (ANTLRBaseRecognizerState *) state; +- (void) setState:(ANTLRBaseRecognizerState *) theState; +- (Class) stateClass; + +// reset this recognizer - might be extended by codegeneration/grammar +- (void) reset; + +// where do we get our input from - subclass responsibility +- (id) input; +- (void) setInput:(id)theInput; + +// do actual matching of tokens/characters +- (void) match:(id)input tokenType:(ANTLRTokenType) ttype follow:(ANTLRBitSet *)follow; +- (void) matchAny:(id)input; + +// error reporting and recovery +- (void) reportError:(NSException *)e; +- (void) displayRecognitionError:(NSString *)name tokenNames:(NSArray *)tokenNames exception:(NSException *)e; +- (void) recover:(id)input exception:(NSException *)e; +// begin hooks for debugger +- (void) beginResync; +- (void) endResync; +- (void) beginBacktracking:(int)level; +- (void) endBacktracking:(int)level wasSuccessful:(BOOL)successful; +// end hoos for debugger + +// compute the bitsets necessary to do matching and recovery +- (ANTLRBitSet *)computeContextSensitiveRuleFOLLOW; +- (ANTLRBitSet *)combineFollowsExact:(BOOL) exact; +- (ANTLRBitSet *)computeErrorRecoverySet; + +- (void) mismatch:(id)aStream tokenType:(int)aTType follow:(ANTLRBitSet *)aBitset; +- (void) recoverFromMismatchedToken:(id)input + exception:(NSException *)e + tokenType:(ANTLRTokenType)ttype + follow:(ANTLRBitSet *)follow; + +- (void) recoverFromMismatchedSet:(id)input + exception:(NSException *)e + follow:(ANTLRBitSet *)follow; + +- (BOOL) recoverFromMismatchedElement:(id)input + exception:(NSException *)e + follow:(ANTLRBitSet *)follow; + +// helper methods for recovery. try to resync somewhere +- (void) consumeUntil:(id)input + tokenType:(ANTLRTokenType)ttype; +- (void) consumeUntil:(id)input + bitSet:(ANTLRBitSet *)bitSet; + +// to be used by the debugger to do reporting. maybe hook in incremental stuff here, too. +- (NSArray *) ruleInvocationStack; +- (NSArray *) ruleInvocationStack:(id) exception + recognizer:(Class) recognizerClass; + ++ (NSString *) tokenNameForType:(int)aTokenType; +- (NSString *) tokenNameForType:(int)aTokenType; ++ (NSArray *) tokenNames; +- (NSArray *) tokenNames; +- (NSString *) grammarFileName; + +- (NSArray *) toStrings:(NSArray *)tokens; +- (NSArray *) toTemplates:(NSArray *)retvals; + +// support for memoization +- (int) ruleMemoization:(unsigned int)ruleIndex startIndex:(int)ruleStartIndex; + +- (BOOL) alreadyParsedRule:(id)input ruleIndex:(unsigned int)ruleIndex; + +- (void) memoize:(id)input + ruleIndex:(int)ruleIndex + startIndex:(int)ruleStartIndex; + +- (int) ruleMemoizationCacheSize; + + +// support for syntactic predicates. these are called indirectly to support funky stuff in grammars, like +// supplying selectors instead of writing code directly into the actions of the grammar. +- (BOOL) evaluateSyntacticPredicate:(SEL)synpredFragment; // stream:(id)input; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRBaseRecognizer.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRBaseRecognizer.m new file mode 100644 index 0000000..caa413a --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRBaseRecognizer.m @@ -0,0 +1,452 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +#import "ANTLRBaseRecognizer.h" +#import "ANTLRBitSet.h" +#import "ANTLRCommonToken.h" + +@class ANTLRRuleReturnScope; +@implementation ANTLRBaseRecognizer + +- (id) init +{ + if (nil != (self = [super init])) { + state = [[[self stateClass] alloc] init]; + } + return self; +} + +- (void) dealloc +{ + [state release]; + [super dealloc]; +} + +- (BOOL) isFailed +{ + return [state isFailed]; +} + +- (void) setIsFailed: (BOOL) flag +{ + [state setIsFailed:flag]; +} + +- (BOOL) isBacktracking +{ + return [state isBacktracking]; +} + +- (int) backtrackingLevel +{ + return [state backtracking]; +} + +- (void) setBacktrackingLevel:(int) level +{ + [state setBacktracking:level]; +} + +- (ANTLRBaseRecognizerState *) state +{ + return state; +} + +- (void) setState:(ANTLRBaseRecognizerState *) theState +{ + if (state != theState) { + [state release]; + state = [theState retain]; + } +} + +- (Class) stateClass +{ + return [ANTLRBaseRecognizerState class]; +} + + +// reset the recognizer to the initial state. does not touch the token source! +// this can be extended by the grammar writer to reset custom ivars +- (void) reset +{ + [state reset]; +} + +// where do we get our input from - subclass responsibility +- (id) input { + // subclass responsibility + return nil; +} + +- (void) setInput:(id)theInput +{ + // subclass responsibility +} + +// match the next token on the input stream. try to recover with the FOLLOW set is there is a mismatch +- (void) match:(id)input + tokenType:(ANTLRTokenType) ttype + follow:(ANTLRBitSet *)follow +{ + ANTLRTokenType _ttype = [input LA:1]; + if (_ttype == ttype) { + [input consume]; + [state setIsErrorRecovery:NO]; + [state setIsFailed:NO]; + return; + } + if ([state isBacktracking]) { + [state setIsFailed:YES]; + return; + } + [self mismatch:input tokenType:ttype follow:follow]; +} + +// prepare and exception and try to recover from a mismatch +- (void) mismatch:(id)aStream tokenType:(int)aTType follow:(ANTLRBitSet *)aBitset +{ + ANTLRMismatchedTokenException *mte = [ANTLRMismatchedTokenException exceptionWithTokenType:aTType stream:aStream]; + [self recoverFromMismatchedToken:aStream exception:mte tokenType:aTType follow:aBitset]; +} + +// just consume the next symbol and reset the error ivars +- (void) matchAny:(id)input +{ + [state setIsErrorRecovery:NO]; + [state setIsFailed:NO]; + [input consume]; +} + +// everything failed. report the error +- (void) reportError:(NSException *)e +{ + if ([state isErrorRecovery]) { + return; + } + [state setIsErrorRecovery:YES]; + [self displayRecognitionError:NSStringFromClass([self class]) tokenNames:[self tokenNames] exception:e]; +} + +// override to implement a different display strategy. +- (void) displayRecognitionError:(NSString *)name tokenNames:(NSArray *)tokenNames exception:(NSException *)e +{ + NSLog(@"%@", [e description]); +} + +// try to recover from a mismatch by resyncing +- (void) recover:(id)input exception:(NSException *)e +{ + if ([state lastErrorIndex] == [input index]) { + [input consume]; + } + [state setLastErrorIndex:[input index]]; + ANTLRBitSet *followSet = [self computeErrorRecoverySet]; + [self beginResync]; + [self consumeUntil:input bitSet:followSet]; + [self endResync]; +} + +// code smell...:( +// hooks for debugger +- (void) beginResync +{ +} + +- (void) endResync +{ +} + +- (void)beginBacktracking:(int)level +{ +} + +- (void)endBacktracking:(int)level wasSuccessful:(BOOL)successful +{ +} + +// end hooks for debugger + +- (ANTLRBitSet *)computeErrorRecoverySet +{ + return [self combineFollowsExact:NO]; +} + +- (ANTLRBitSet *)computeContextSensitiveRuleFOLLOW +{ + return [self combineFollowsExact:YES]; +} + +// compute a new FOLLOW set for recovery using the rules we have descended through +- (ANTLRBitSet *)combineFollowsExact:(BOOL)exact +{ + ANTLRBitSet *followSet = [[[ANTLRBitSet alloc] init] autorelease]; + int i; + NSMutableArray *following = [state following]; + for (i = [following count]-1; i >= 0; i--) { + ANTLRBitSet *localFollowSet = [following objectAtIndex:i]; + [followSet orInPlace:localFollowSet]; + if (exact && ![localFollowSet isMember:ANTLRTokenTypeEOR]) { + break; + } + } + [followSet remove:ANTLRTokenTypeEOR]; + return followSet; +} + + +// delete one token and try to carry on. +- (void) recoverFromMismatchedToken:(id)input + exception:(NSException *)e + tokenType:(ANTLRTokenType)ttype + follow:(ANTLRBitSet *)follow +{ + if ([input LA:2] == ttype) { + [self reportError:e]; + [self beginResync]; + [input consume]; + [self endResync]; + [input consume]; + return; + } + if (![self recoverFromMismatchedElement:input exception:e follow:follow]) { + @throw e; + } +} + +- (void) recoverFromMismatchedSet:(id)input + exception:(NSException *)e + follow:(ANTLRBitSet *)follow +{ + // TODO - recovery is currently incomplete in ANTLR + if (![self recoverFromMismatchedElement:input exception:e follow:follow]) { + @throw e; + } +} + +// this code handles single token insertion recovery +- (BOOL) recoverFromMismatchedElement:(id)input + exception:(NSException *)e + follow:(ANTLRBitSet *)follow +{ + if (follow == nil) { + return NO; + } + + // compute the viable symbols that can follow the current rule + ANTLRBitSet *localFollow = follow; + if ([follow isMember:ANTLRTokenTypeEOR]) { + ANTLRBitSet *viableTokensFollowingThisRule = [self computeContextSensitiveRuleFOLLOW]; + localFollow = [follow or:viableTokensFollowingThisRule]; + [localFollow remove:ANTLRTokenTypeEOR]; + } + // if the current token could follow the missing token we tell the user and proceed with matching + if ([localFollow isMember:[input LA:1]]) { + [self reportError:e]; + // clean up the temporary follow set, if we created one + if (localFollow != follow) + [localFollow release]; + return YES; + } + // clean up the temporary follow set, if we created one + if (localFollow != follow) + [localFollow release]; + // otherwise the match fails + return NO; +} + +// used in resyncing to skip to next token of a known type +- (void) consumeUntil:(id)input + tokenType:(ANTLRTokenType)theTtype +{ + ANTLRTokenType ttype = [input LA:1]; + while (ttype != ANTLRTokenTypeEOF && ttype != theTtype) { + [input consume]; + ttype = [input LA:1]; + } +} + +// used in resyncing to skip to the next token whose type in the bitset +- (void) consumeUntil:(id)input + bitSet:(ANTLRBitSet *)bitSet +{ + ANTLRTokenType ttype = [input LA:1]; + while (ttype != ANTLRTokenTypeEOF && ![bitSet isMember:ttype]) { + [input consume]; + ttype = [input LA:1]; + } +} + +- (void) pushFollow:(ANTLRBitSet *)follow +{ + [[state following] addObject:follow]; +} + + +- (NSArray *) ruleInvocationStack +{ + return [self ruleInvocationStack:nil recognizer:[self class]]; +} + + +- (NSArray *) ruleInvocationStack:(id) exception + recognizer:(Class) recognizerClass +{ +#warning TODO: ruleInvocationStack:recognizer: + return [NSArray arrayWithObject:[@"not implemented yet: " stringByAppendingString:NSStringFromClass(recognizerClass)]]; +} + ++ (NSString *) tokenNameForType:(int)aTokenType +{ + // subclass responsibility + return nil; +} + +- (NSString *) tokenNameForType:(int)aTokenType +{ + return [[self class] tokenNameForType:aTokenType]; +} + ++ (NSArray *) tokenNames +{ + // subclass responsibility + return nil; +} + +- (NSArray *) tokenNames +{ + return [[self class] tokenNames]; +} + +- (NSString *) grammarFileName +{ + return grammarFileName; +} + +// pure convenience +- (NSArray *) toStrings:(NSArray *)tokens +{ + if (tokens == nil ) { + return nil; + } + NSMutableArray *strings = [[[NSArray alloc] init] autorelease]; + NSEnumerator *tokensEnumerator = [tokens objectEnumerator]; + id value; + while (nil != (value = [tokensEnumerator nextObject])) { + [strings addObject:[(id)value text]]; + } + return strings; +} + + +// TODO need an Objective-C StringTemplate implementation for this +- (NSArray *) toTemplates:(NSArray *)retvals +{ + return nil; +#warning TODO: Templates are not yet supported in ObjC! +} + +// the following methods handle the "memoization" caching functionality +// they work by associating token indices with rule numbers. +// that way, when we are about to parse a rule and have parsed the rule previously, e.g. in prediction, +// we don't have to do it again but can simply return the token index to continue up parsing at. + +- (int) ruleMemoization:(unsigned int)ruleIndex startIndex:(int)ruleStartIndex +{ + NSMutableArray *ruleMemo = [state ruleMemo]; + NSAssert([ruleMemo count] >= ruleIndex, @"memoization ruleIndex is out of bounds!"); + + NSNumber *stopIndexNumber = [[ruleMemo objectAtIndex:ruleIndex] objectForKey:[NSNumber numberWithInt:ruleStartIndex]]; + if (stopIndexNumber == nil) { + return ANTLR_MEMO_RULE_UNKNOWN; + } else { + return [stopIndexNumber intValue]; + } +} + +- (BOOL) alreadyParsedRule:(id)input ruleIndex:(unsigned int)ruleIndex +{ + int stopIndex = [self ruleMemoization:ruleIndex startIndex:[input index]]; + if (stopIndex == ANTLR_MEMO_RULE_UNKNOWN) { + return NO; + } + if (stopIndex == ANTLR_MEMO_RULE_FAILED) { + [state setIsFailed:YES]; + } else { + [input seek:stopIndex+1]; + } + return YES; +} + +- (void) memoize:(id)input + ruleIndex:(int)ruleIndex + startIndex:(int)ruleStartIndex +{ + NSMutableArray *ruleMemo = [state ruleMemo]; + NSAssert([ruleMemo count] >= ruleIndex, @"memoization ruleIndex is out of bounds!"); + + int stopTokenIndex = [state isFailed] ? ANTLR_MEMO_RULE_FAILED : [input index]-1; + NSMutableDictionary *ruleMemoDict = [ruleMemo objectAtIndex:ruleIndex]; + if ([ruleMemoDict objectForKey:[NSNumber numberWithInt:ruleStartIndex]] == nil) { + [ruleMemoDict setObject:[NSNumber numberWithInt:stopTokenIndex] forKey:[NSNumber numberWithInt:ruleStartIndex]]; + } +} + +- (int) ruleMemoizationCacheSize +{ + int n = 0; + NSMutableArray *ruleMemo = [state ruleMemo]; + NSEnumerator *ruleEnumerator = [ruleMemo objectEnumerator]; + id value; + while ((value = [ruleEnumerator nextObject])) { + n += [value count]; + } + return n; +} + +// call a syntactic predicate methods using its selector. this way we can support arbitrary synpreds. +- (BOOL) evaluateSyntacticPredicate:(SEL)synpredFragment // stream:(id)input +{ + [state increaseBacktracking]; + [self beginBacktracking:[state backtracking]]; + int start = [[self input] mark]; + @try { + [self performSelector:synpredFragment]; + } + @catch (ANTLRRecognitionException *re) { + NSLog(@"impossible synpred: %@", re); + } + BOOL success = ![state isFailed]; + [[self input] rewind:start]; + [self endBacktracking:[state backtracking] wasSuccessful:success]; + [state decreaseBacktracking]; + [state setIsFailed:NO]; + return success; +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRBaseRecognizerState.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRBaseRecognizerState.h new file mode 100644 index 0000000..c990cd0 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRBaseRecognizerState.h @@ -0,0 +1,58 @@ +// [The "BSD licence"] +// Copyright (c) 2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import + +@interface ANTLRBaseRecognizerState : NSObject { + NSMutableArray *following; // a stack of FOLLOW bitsets used for context sensitive prediction and recovery + NSMutableArray *ruleMemo; // store previous results of matching rules so we don't have to do it again. Hook in incremental stuff here, too. + BOOL errorRecovery; // are we recovering? + BOOL failed; // indicate that some match failed + int backtracking; // the level of backtracking + int lastErrorIndex; +} + +- (void) reset; + +- (NSMutableArray *) following; +- (NSMutableArray *) ruleMemo; + +- (BOOL) isErrorRecovery; +- (void) setIsErrorRecovery: (BOOL) flag; + +- (BOOL) isFailed; +- (void) setIsFailed: (BOOL) flag; + +- (int) backtracking; +- (void) setBacktracking:(int) value; +- (void) increaseBacktracking; +- (void) decreaseBacktracking; +- (BOOL) isBacktracking; + +- (int) lastErrorIndex; +- (void) setLastErrorIndex:(int) value; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRBaseRecognizerState.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRBaseRecognizerState.m new file mode 100644 index 0000000..d0a0983 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRBaseRecognizerState.m @@ -0,0 +1,133 @@ +// [The "BSD licence"] +// Copyright (c) 2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRBaseRecognizerState.h" + + +@implementation ANTLRBaseRecognizerState + +- (id) init +{ + if (nil != (self = [super init])) { + following = [[NSMutableArray alloc] init]; + ruleMemo = [[NSMutableArray alloc] init]; + errorRecovery = NO; + lastErrorIndex = -1; + failed = NO; + backtracking = 0; + } + return self; +} + +- (void) reset +{ + errorRecovery = NO; + lastErrorIndex = -1; + failed = NO; + backtracking = 0; + [following removeAllObjects]; + [ruleMemo removeAllObjects]; +} + +- (void) dealloc +{ + [following release]; + [ruleMemo release]; + [super dealloc]; +} + + +- (NSMutableArray *) following +{ + return following; +} + +- (NSMutableArray *) ruleMemo +{ + return ruleMemo; +} + + +- (BOOL) isErrorRecovery +{ + return errorRecovery; +} + +- (void) setIsErrorRecovery: (BOOL) flag +{ + errorRecovery = flag; +} + + +- (BOOL) isFailed +{ + return failed; +} + +- (void) setIsFailed: (BOOL) flag +{ + failed = flag; +} + + +- (int) backtracking +{ + return backtracking; +} + +- (void) setBacktracking:(int) value +{ + backtracking = value; +} + +- (void) increaseBacktracking +{ + backtracking++; +} + +- (void) decreaseBacktracking +{ + backtracking--; +} + +- (BOOL) isBacktracking +{ + return backtracking > 0; +} + + +- (int) lastErrorIndex +{ + return lastErrorIndex; +} + +- (void) setLastErrorIndex:(int) value +{ + lastErrorIndex = value; +} + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRBitSet.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRBitSet.h new file mode 100644 index 0000000..4e24692 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRBitSet.h @@ -0,0 +1,69 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import +#import + +// A simple wrapper around CoreFoundation bit vectors to shield the rest of the implementation +// from the specifics of the BitVector initialization and query functions. +// This is fast, so there is no need to reinvent the wheel just yet. + +@interface ANTLRBitSet : NSObject < NSCopying > { + CFMutableBitVectorRef bitVector; +} + +#pragma mark Initializer + +- (ANTLRBitSet *) init; +- (ANTLRBitSet *) initWithBitVector:(CFMutableBitVectorRef)theBitVector; +- (ANTLRBitSet *) initWithBits:(const unsigned long long const*)theBits count:(unsigned int)theCount; +- (ANTLRBitSet *) initWithArrayOfBits:(NSArray *)theArray; + +#pragma mark Operations +- (ANTLRBitSet *) or:(ANTLRBitSet *) aBitSet; +- (void) orInPlace:(ANTLRBitSet *) aBitSet; +- (void) add:(unsigned int) bit; +- (void) remove:(unsigned int) bit; + +- (unsigned int) size; +- (void) setSize:(unsigned int) noOfWords; + +#pragma mark Informational +- (unsigned long long) bitMask:(unsigned int) bitNumber; +- (BOOL) isMember:(unsigned int) bitNumber; +- (BOOL) isNil; +- (NSString *) toString; +- (NSString *) description; + +#pragma mark NSCopying support + +- (id) copyWithZone:(NSZone *) theZone; + + +//private +- (CFMutableBitVectorRef) _bitVector; +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRBitSet.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRBitSet.m new file mode 100644 index 0000000..732875e --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRBitSet.m @@ -0,0 +1,207 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRBitSet.h" + +@implementation ANTLRBitSet + +// initializer +#pragma mark Initializer + +- (ANTLRBitSet *) init +{ + if (nil != (self = [super init])) { + bitVector = CFBitVectorCreateMutable(kCFAllocatorDefault,0); + } + return self; +} + +- (ANTLRBitSet *) initWithBitVector:(CFMutableBitVectorRef)theBitVector +{ + if (nil != (self = [super init])) { + bitVector = theBitVector; + } + return self; +} + +// Initialize the bit vector with a constant array of ulonglongs like ANTLR generates. +// Converts to big endian, because the underlying CFBitVector works like that. +- (ANTLRBitSet *) initWithBits:(const unsigned long long *)theBits count:(unsigned int)longCount +{ + if (nil != (self = [self init])) { + unsigned int longNo; + CFIndex bitIdx; + CFBitVectorSetCount(bitVector,sizeof(unsigned long long)*8*longCount); + + for (longNo = 0; longNo < longCount; longNo++) { + for (bitIdx = 0; bitIdx < (CFIndex)sizeof(unsigned long long)*8; bitIdx++) { + unsigned long long swappedBits = CFSwapInt64HostToBig(theBits[longNo]); + if (swappedBits & (1LL << bitIdx)) { + CFBitVectorSetBitAtIndex(bitVector,bitIdx+(longNo*sizeof(unsigned long long)*8),1); + } + } + } + } + return self; +} + +// Initialize bit vector with an array of anything. Just test the boolValue and set the corresponding bit. +// Note: This is big-endian! +- (ANTLRBitSet *) initWithArrayOfBits:(NSArray *)theArray +{ + if (nil != (self = [self init])) { + NSEnumerator *enumerator = [theArray objectEnumerator]; + id value; + int bit = 0; + while (value = [enumerator nextObject]) { + if ([value boolValue] == YES) { + CFBitVectorSetBitAtIndex(bitVector,bit,1); + } + bit++; + } + } + return self; +} + +- (void) dealloc +{ + CFRelease(bitVector); + [super dealloc]; +} + + // operations +#pragma mark Operations +// return a copy of (self|aBitSet) +- (ANTLRBitSet *) or:(ANTLRBitSet *) aBitSet +{ + ANTLRBitSet *bitsetCopy = [self copy]; + [bitsetCopy orInPlace:aBitSet]; + return bitsetCopy; +} + +// perform a bitwise OR operation in place by changing underlying bit vector, growing it if necessary +- (void) orInPlace:(ANTLRBitSet *) aBitSet +{ + CFIndex selfCnt = CFBitVectorGetCount(bitVector); + CFMutableBitVectorRef otherBitVector = [aBitSet _bitVector]; + CFIndex otherCnt = CFBitVectorGetCount(otherBitVector); + CFIndex maxBitCnt = selfCnt > otherCnt ? selfCnt : otherCnt; + CFBitVectorSetCount(bitVector,maxBitCnt); // be sure to grow the CFBitVector manually! + + CFIndex currIdx; + for (currIdx = 0; currIdx < maxBitCnt; currIdx++) { + if (CFBitVectorGetBitAtIndex(bitVector,currIdx) | CFBitVectorGetBitAtIndex(otherBitVector,currIdx)) { + CFBitVectorSetBitAtIndex(bitVector,currIdx,1); + } + } +} + +// set a bit, grow the bit vector if necessary +- (void) add:(unsigned int) bit +{ + if ((CFIndex)bit > CFBitVectorGetCount(bitVector)) + CFBitVectorSetCount(bitVector,bit); + CFBitVectorSetBitAtIndex(bitVector,bit,1); +} + +// unset a bit +- (void) remove:(unsigned int) bit +{ + CFBitVectorSetBitAtIndex(bitVector,bit,0); +} + +// returns the number of bits in the bit vector. +- (unsigned int) size +{ + return CFBitVectorGetCount(bitVector); +} + +- (void) setSize:(unsigned int) noOfWords +{ + // not supported - not needed :) +} + +#pragma mark Informational +// return a bitmask representation of this bitvector for easy operations +- (unsigned long long) bitMask:(unsigned int) bitNumber +{ + return 1LL << bitNumber; +} + +// test a bit (no pun intended) +- (BOOL) isMember:(unsigned int) bitNumber +{ + return CFBitVectorGetBitAtIndex(bitVector,bitNumber) ? YES : NO; +} + +// are all bits off? +- (BOOL) isNil +{ + return CFBitVectorGetCountOfBit(bitVector,CFRangeMake(0,CFBitVectorGetCount(bitVector)),1)==0 ? YES : NO; +} + +// return a string representation of the bit vector, indicating by their bitnumber which bits are set +- (NSString *) toString +{ + CFIndex length = CFBitVectorGetCount(bitVector); + CFIndex currBit; + NSMutableString *descString = [[NSMutableString alloc] initWithString:@"{"]; + BOOL haveInsertedBit = false; + for (currBit = 0; currBit < length; currBit++) { + if (CFBitVectorGetBitAtIndex(bitVector,currBit)) { + if (haveInsertedBit) { + [descString appendString:@","]; + } + [descString appendString:[NSString stringWithFormat:@"%d", currBit]]; + haveInsertedBit = YES; + } + } + [descString appendString:@"}"]; + return descString; +} + +// debugging aid. GDB invokes this automagically +- (NSString *) description +{ + return [self toString]; +} + + // NSCopying +#pragma mark NSCopying support + +- (id) copyWithZone:(NSZone *) theZone +{ + ANTLRBitSet *newBitSet = [[ANTLRBitSet allocWithZone:theZone] initWithBitVector:CFBitVectorCreateMutableCopy(kCFAllocatorDefault,0,bitVector)]; + return newBitSet; +} + +- (CFMutableBitVectorRef) _bitVector +{ + return bitVector; +} + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCharStream.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCharStream.h new file mode 100644 index 0000000..0a16d04 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCharStream.h @@ -0,0 +1,49 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import + + +#define ANTLRCharStreamEOF -1 + + +@protocol ANTLRCharStream < ANTLRIntStream > + +- (NSString *) substringWithRange:(NSRange) theRange; + +// ANTLR tracks the line information automatically +- (unsigned int) line; + +// Because this stream can rewind, we need to be able to reset the line +- (void) setLine:(unsigned int) theLine; + +- (void) setCharPositionInLine:(unsigned int) thePos; + +// The index of the character relative to the beginning of the line 0..n-1 +- (unsigned int) charPositionInLine; + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonToken.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonToken.h new file mode 100644 index 0000000..06191e1 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonToken.h @@ -0,0 +1,71 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import +#import +#import + +@interface ANTLRCommonToken : NSObject < ANTLRToken > { + NSString *text; + + int type; + // information about the Token's position in the input stream + unsigned int line; + unsigned int charPositionInLine; + unsigned int channel; + + // the actual input stream this token was found in + id input; + // indices into the CharStream to avoid copying the text + // can manually override the text by using -setText: + unsigned int start; + unsigned int stop; + // this token's position in the TokenStream + unsigned int index; +} + +// designated initializer. This is used as the default way to initialize a Token in the generated code. +- (ANTLRCommonToken *) initWithInput:(id)anInput tokenType:(int)aTType channel:(int)aChannel start:(int)theStart stop:(int)theStop; +- (ANTLRCommonToken *) initWithToken:(ANTLRCommonToken *)aToken; + +- (id) input; +- (void) setInput: (id) anInput; + +- (unsigned int) start; +- (void) setStart: (unsigned int) aStart; + +- (unsigned int) stop; +- (void) setStop: (unsigned int) aStop; + +// the index of this Token into the TokenStream +- (unsigned int) tokenIndex; +- (void) setTokenIndex: (unsigned int) aTokenIndex; + +// conform to NSCopying +- (id) copyWithZone:(NSZone *)theZone; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonToken.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonToken.m new file mode 100644 index 0000000..4040754 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonToken.m @@ -0,0 +1,255 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import "ANTLRCommonToken.h" + + +@implementation ANTLRCommonToken + +// designated initializer +- (ANTLRCommonToken *) initWithInput:(id)anInput tokenType:(int)aTType channel:(int)aChannel start:(int)theStart stop:(int)theStop +{ + if (nil != (self = [super init])) { + [self setInput:anInput]; + type = aTType; + channel = aChannel; + start = theStart; + stop = theStop; + } + return self; +} + +- (ANTLRCommonToken *) initWithToken:(ANTLRCommonToken *)aToken +{ + return [aToken copy]; +} + +- (void) dealloc +{ + [self setInput:nil]; + [self setText:nil]; + [super dealloc]; +} + +// return the singleton EOF Token ++ (id) eofToken +{ + static ANTLRCommonToken *eofToken = nil; + if (eofToken != nil) { + return eofToken; + } + eofToken = [[ANTLRCommonToken alloc] init]; + if (eofToken) { + [eofToken setType:ANTLRTokenTypeEOF]; + return eofToken; + } + return nil; +} + + +// the default channel for this class of Tokens ++ (ANTLRTokenChannel) defaultChannel +{ + return ANTLRTokenChannelDefault; +} + + +// create a copy, including the text if available +// the input stream is *not* copied! +- (id) copyWithZone:(NSZone *)theZone +{ + ANTLRCommonToken *copy = [[[self class] allocWithZone:theZone] init]; + if (copy) { + [copy setType:type]; + [copy setChannel:channel]; + if (text) { + NSString *copyOfText = [text copyWithZone:theZone]; + [copy setText:copyOfText]; + [copyOfText release]; + } + [copy setStart:start]; + [copy setStop:stop]; + [copy setTokenIndex:index]; + [copy setLine:line]; + [copy setCharPositionInLine:charPositionInLine]; + [copy setInput:input]; // not a copy, but a reference to the original input stream! + } + return copy; +} + +//---------------------------------------------------------- +// text +//---------------------------------------------------------- +- (NSString *) text +{ + if (text != nil) { + return text; + } + if (input == nil) { + return nil; + } + return [input substringWithRange:NSMakeRange(start,stop-start+1)]; +} + +- (void) setText: (NSString *) aText +{ + if (text != aText) { + [aText retain]; + [text release]; + text = aText; + } +} + +//---------------------------------------------------------- +// type +//---------------------------------------------------------- +- (int) type +{ + return type; +} + +- (void) setType: (int) aType +{ + type = aType; +} + +//---------------------------------------------------------- +// line +//---------------------------------------------------------- +- (unsigned int) line +{ + return line; +} + +- (void) setLine: (unsigned int) aLine +{ + line = aLine; +} + +//---------------------------------------------------------- +// charPositionInLine +//---------------------------------------------------------- +- (unsigned int) charPositionInLine +{ + return charPositionInLine; +} + +- (void) setCharPositionInLine: (unsigned int) aCharPositionInLine +{ + charPositionInLine = aCharPositionInLine; +} + +//---------------------------------------------------------- +// channel +//---------------------------------------------------------- +- (unsigned int) channel +{ + return channel; +} + +- (void) setChannel: (unsigned int) aChannel +{ + channel = aChannel; +} + + +//---------------------------------------------------------- +// input +//---------------------------------------------------------- +- (id) input +{ + return input; +} + +- (void) setInput: (id) anInput +{ + if (input != anInput) { + [anInput retain]; + [input release]; + input = anInput; + } +} + + +//---------------------------------------------------------- +// start +//---------------------------------------------------------- +- (unsigned int) start +{ + return start; +} + +- (void) setStart: (unsigned int) aStart +{ + start = aStart; +} + +//---------------------------------------------------------- +// stop +//---------------------------------------------------------- +- (unsigned int) stop +{ + return stop; +} + +- (void) setStop: (unsigned int) aStop +{ + stop = aStop; +} + +//---------------------------------------------------------- +// index +//---------------------------------------------------------- +- (unsigned int) tokenIndex; +{ + return index; +} + +- (void) setTokenIndex: (unsigned int) aTokenIndex; +{ + index = aTokenIndex; +} + + +// provide a textual representation for debugging +- (NSString *) description +{ + NSString *channelString = [[NSString alloc] initWithFormat:@"channel=%d", channel]; + NSMutableString *txtString; + if ([self text] != nil) { + txtString = [NSMutableString stringWithString:[self text]]; + [txtString replaceOccurrencesOfString:@"\n" withString:@"\\\n" options:NSAnchoredSearch range:NSMakeRange(0, [txtString length])]; + [txtString replaceOccurrencesOfString:@"\r" withString:@"\\\r" options:NSAnchoredSearch range:NSMakeRange(0, [txtString length])]; + [txtString replaceOccurrencesOfString:@"\t" withString:@"\\\t" options:NSAnchoredSearch range:NSMakeRange(0, [txtString length])]; + } else { + txtString = [NSMutableString stringWithString:@""]; + } + return [@"[@" stringByAppendingFormat:@"%d, %d, %d=%@,<%d>,%@,%d:%d]", index, start, stop, txtString, type, channelString, line, charPositionInLine]; +} + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTokenStream.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTokenStream.h new file mode 100644 index 0000000..843d5f1 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTokenStream.h @@ -0,0 +1,86 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import +#import +#import +#import +#import + +@interface ANTLRCommonTokenStream : NSObject < ANTLRTokenStream > { + id tokenSource; + NSMutableArray *tokens; + + NSMutableDictionary *channelOverride; + NSMutableSet *discardSet; + unsigned int channel; + BOOL discardOffChannelTokens; + int lastMarker; + int p; +} + +- (id) initWithTokenSource:(id)theTokenSource; + +- (id) tokenSource; +- (void) setTokenSource: (id) aTokenSource; + +- (void) fillBuffer; +- (void) consume; + +- (int) skipOffChannelTokens:(int) i; +- (int) skipOffChannelTokensReverse:(int) i; + +- (void) setTokenType:(int)ttype toChannel:(int)channel; +- (void) discardTokenType:(int)ttype; +- (void) discardOffChannelTokens:(BOOL)flag; + +- (NSArray *) tokens; +- (NSArray *) tokensInRange:(NSRange)aRange; +- (NSArray *) tokensInRange:(NSRange)aRange inBitSet:(ANTLRBitSet *)aBitSet; +- (NSArray *) tokensInRange:(NSRange)aRange withTypes:(NSArray *)tokenTypes; +- (NSArray *) tokensInRange:(NSRange)aRange withType:(int)tokenType; + +- (id) LT:(int)k; +- (id) LB:(int)k; +- (int) LA:(int)k; + +- (id) tokenAtIndex:(int)i; + +- (int) mark; +- (void) release:(int)marker; + +- (int) count; +- (int) index; +- (void) rewind; +- (void) rewind:(int)marker; +- (void) seek:(int)index; + +- (NSString *) stringValue; +- (NSString *) stringValueWithRange:(NSRange) aRange; +- (NSString *) stringValueFromToken:(id)startToken toToken:(id)stopToken; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTokenStream.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTokenStream.m new file mode 100644 index 0000000..9650b33 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTokenStream.m @@ -0,0 +1,353 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRCommonTokenStream.h" + + +@implementation ANTLRCommonTokenStream + +#pragma mark Initialization + +- (id) init +{ + if ((self = [self initWithTokenSource:nil])) { + } + return self; +} + +- (id) initWithTokenSource:(id)theTokenSource +{ + if ((self = [super init])) { + [self setTokenSource:theTokenSource]; + p = -1; + discardOffChannelTokens = NO; + tokens = [[NSMutableArray alloc] initWithCapacity:500]; + channelOverride = [[NSMutableDictionary alloc] init]; + discardSet = [[NSMutableSet alloc] init]; + channel = ANTLRTokenChannelDefault; + } + return self; +} + +- (void) dealloc +{ + [discardSet release]; + [channelOverride release]; + [tokens release]; + [self setTokenSource:nil]; + [super dealloc]; +} + +- (void) fillBuffer +{ + int index = 0; + id token = [tokenSource nextToken]; + while ( token && [token type] != ANTLRTokenTypeEOF ) { + BOOL discard = NO; + NSNumber *tokenType = [NSNumber numberWithInt:[token type]]; + if ([discardSet containsObject:tokenType]) + { + discard = YES; + } else if ( discardOffChannelTokens && [token channel] != channel ) { + discard = YES; + } else { + NSNumber *channelI = [channelOverride objectForKey:tokenType]; + if (channelI) { + [token setChannel:[channelI intValue]]; + } + } + if ( !discard ) { + [token setTokenIndex:index]; + [tokens addObject:token]; + index++; + } + token = [tokenSource nextToken]; + } + // leave p pointing at first token on channel + p = 0; + p = [self skipOffChannelTokens:p]; +} + +#pragma mark Accessors + +- (id) tokenSource +{ + return tokenSource; +} + +- (void) setTokenSource: (id) aTokenSource +{ + if (tokenSource != aTokenSource) { + [(id)aTokenSource retain]; + [(id)tokenSource release]; + tokenSource = aTokenSource; + p = -1; + channel = ANTLRTokenChannelDefault; + } +} + + +#pragma mark Channels & Skipping + +- (int) skipOffChannelTokens:(int) i +{ + int n = [tokens count]; + int tmp = i; + while ( tmp < n && [(id)[tokens objectAtIndex:tmp] channel] != channel ) { + tmp++; + } + return tmp; +} + +- (int) skipOffChannelTokensReverse:(int) i +{ + int tmp = i; + while ( tmp >= 0 && [(id)[tokens objectAtIndex:tmp] channel] != channel ) { + tmp--; + } + return tmp; +} + +- (void) setTokenType:(int)ttype toChannel:(int)theChannel +{ + [channelOverride setObject:[NSNumber numberWithInt:theChannel] forKey:[NSNumber numberWithInt:ttype]]; +} + +- (void) discardTokenType:(int)ttype +{ + [discardSet addObject:[NSNumber numberWithInt:ttype]]; +} + +- (void) discardOffChannelTokens:(BOOL)flag +{ + discardOffChannelTokens = flag; +} + +#pragma mark Token access + + +- (NSArray *) tokens +{ + if ( p == -1 ) { + [self fillBuffer]; + } + return tokens; +} + +- (NSArray *) tokensInRange:(NSRange)aRange +{ + return [tokens subarrayWithRange:aRange]; +} + +- (NSArray *) tokensInRange:(NSRange)aRange inBitSet:(ANTLRBitSet *)aBitSet +{ + unsigned int start = aRange.location; + unsigned int stop = aRange.location+aRange.length; + if ( p == -1 ) { + [self fillBuffer]; + } + if (stop >= [tokens count]) { + stop = [tokens count] - 1; + } + NSMutableArray *filteredTokens = [[NSMutableArray alloc] init]; + unsigned int i=0; + for (i = start; i<=stop; i++) { + id token = [tokens objectAtIndex:i]; + if (aBitSet == nil || [aBitSet isMember:[token type]]) { + [filteredTokens addObject:token]; + } + } + if ([filteredTokens count]) { + return [filteredTokens autorelease]; + } else { + [filteredTokens release]; + return nil; + } +} + +- (NSArray *) tokensInRange:(NSRange)aRange withTypes:(NSArray *)tokenTypes +{ + ANTLRBitSet *bits = [[ANTLRBitSet alloc] initWithArrayOfBits:tokenTypes]; + NSArray *returnTokens = [self tokensInRange:aRange inBitSet:bits]; + [bits release]; + return returnTokens; +} + +- (NSArray *) tokensInRange:(NSRange)aRange withType:(int)tokenType +{ + ANTLRBitSet *bits = [[ANTLRBitSet alloc] init]; + [bits add:tokenType]; + NSArray *returnTokens = [self tokensInRange:aRange inBitSet:bits]; + [bits release]; + return returnTokens; +} + +- (id) tokenAtIndex:(int)i +{ + return [tokens objectAtIndex:i]; +} + +- (int) count +{ + return [tokens count]; +} + +#pragma mark Lookahead + +- (id) LT:(int)k +{ + if ( p == -1 ) { + [self fillBuffer]; + } + if ( k == 0 ) { + return nil; + } + if ( k < 0 ) { + return [self LB:k]; + } + if ( (p+k-1) >= (int)[tokens count] ) { + return [ANTLRCommonToken eofToken]; + } + int i = p; + int n = 1; + while ( n < k ) { + i = [self skipOffChannelTokens:i+1]; + n++; + } + if ( i >= (int)[tokens count] ) { + return [ANTLRCommonToken eofToken]; + } + return [tokens objectAtIndex:i]; +} + +- (id) LB:(int)k +{ + if ( p == -1 ) { + [self fillBuffer]; + } + if ( k == 0 ) { + return nil; + } + if ( (p-k)<0 ) { + return nil; + } + if ( (p+k-1) >= (int)[tokens count] ) { + return [ANTLRCommonToken eofToken]; + } + int i = p; + int n = 1; + while ( n <= k ) { + i = [self skipOffChannelTokensReverse:i-1]; + n++; + } + if ( i-1 < 0 ) { + return nil; + } + return [tokens objectAtIndex:i-1]; +} + +- (int) LA:(int)k +{ + return [[self LT:k] type]; +} + +#pragma mark Stream Seeking + +- (void) consume +{ + if (p < (int)[tokens count]) { + p++; + p = [self skipOffChannelTokens:p]; + } +} + +- (int) mark +{ + lastMarker = [self index]; + return lastMarker; +} + +- (void) release:(int)marker +{ + // empty +} + +- (int) index +{ + return p; +} + +- (void) rewind +{ + [self seek:lastMarker]; +} + +- (void) rewind:(int)marker +{ + [self seek:marker]; +} + +- (void) seek:(int)index +{ + p = index; +} +#pragma mark Stringvalues + +- (NSString *) stringValue +{ + if ( p == -1 ) { + [self fillBuffer]; + } + return [self stringValueWithRange:NSMakeRange(0,[self count])]; +} + +- (NSString *) stringValueWithRange:(NSRange) aRange +{ + if ( p == -1 ) { + [self fillBuffer]; + } + NSArray *tokensInRange = [self tokensInRange:aRange]; + NSEnumerator *tokenEnum = [tokensInRange objectEnumerator]; + id token; + NSMutableString *stringValue = [[NSMutableString alloc] init]; + while ((token = [tokenEnum nextObject])) { + [stringValue appendString:[token text]]; + } + return [stringValue autorelease]; +} + +- (NSString *) stringValueFromToken:(id)startToken toToken:(id)stopToken +{ + if (startToken && stopToken) { + int start = [startToken tokenIndex]; + int stop = [stopToken tokenIndex]; + return [self stringValueWithRange:NSMakeRange(start,stop-start)]; + } + return nil; +} + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTree.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTree.h new file mode 100644 index 0000000..83439b2 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTree.h @@ -0,0 +1,60 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import +#import + +@interface ANTLRCommonTree : ANTLRTree { + int startIndex; + int stopIndex; + ANTLRCommonToken *token; +} + +- (id) initWithTreeNode:(ANTLRCommonTree *)aNode; +- (id) initWithToken:(ANTLRCommonToken *)aToken; +- (id) initWithTokenType:(int)aTokenType; + +- (id) copyWithZone:(NSZone *)aZone; + +- (BOOL) isEmpty; + +- (ANTLRCommonToken *) token; +- (void) setToken:(ANTLRCommonToken *)aToken; +- (int) tokenType; +- (NSString *) text; +- (unsigned int) line; +- (unsigned int) charPositionInLine; + +- (NSString *) treeDescription; +- (NSString *) description; + +- (int) startIndex; +- (void) setStartIndex: (int) aStartIndex; +- (int) stopIndex; +- (void) setStopIndex: (int) aStopIndex; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTree.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTree.m new file mode 100644 index 0000000..aa7667d --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTree.m @@ -0,0 +1,170 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRCommonTree.h" + + +@implementation ANTLRCommonTree + +- (id) init +{ + if ((self = [super init]) != nil) { + startIndex = -1; + stopIndex = -1; + } + return self; +} + +- (id) initWithTreeNode:(ANTLRCommonTree *)aNode +{ + if ([self init]) { + [self setToken:[aNode token]]; + } + return self; +} + +- (id) initWithToken:(ANTLRCommonToken *)aToken +{ + if ([self init]) { + [self setToken:aToken]; + } + return self; +} + +- (id) initWithTokenType:(int)aTokenType +{ + if ([self init]) { + ANTLRCommonToken *tmpToken = [[ANTLRCommonToken alloc] init]; + [tmpToken setType:aTokenType]; + [self setToken:tmpToken]; + [tmpToken release]; + } + return self; +} + +- (void) dealloc +{ + [self setToken:nil]; + [super dealloc]; +} + +- (id) copyWithZone:(NSZone *)aZone +{ + return [[ANTLRCommonTree allocWithZone:aZone] initWithTreeNode:self]; +} + +- (BOOL) isEmpty +{ + return token == nil; +} + +- (ANTLRCommonToken *) token +{ + return token; +} + +- (void) setToken:(ANTLRCommonToken *) aToken +{ + if (token != aToken) { + [aToken retain]; + [token release]; + token = aToken; + } +} + +- (int) tokenType +{ + if (token) + return [token type]; + return ANTLRTokenTypeInvalid; +} + +- (NSString *) text +{ + if (token) + return [token text]; + return nil; +} + +- (unsigned int) line +{ + if (token) + return [token line]; + return 0; +} + +- (unsigned int) charPositionInLine +{ + if (token) + return [token charPositionInLine]; + return 0; +} + +- (int) startIndex +{ + return startIndex; +} + +- (void) setStartIndex: (int) aStartIndex +{ + startIndex = aStartIndex; +} + +- (int) stopIndex +{ + return stopIndex; +} + +- (void) setStopIndex: (int) aStopIndex +{ + stopIndex = aStopIndex; +} + +- (NSString *) treeDescription +{ + if (children) { + NSMutableString *desc = [NSMutableString stringWithString:@"( ^"]; + [desc appendString:[self description]]; + unsigned int childIdx; + for (childIdx = 0; childIdx < [children count]; childIdx++) { + [desc appendFormat:@" %@", [[children objectAtIndex:childIdx] treeDescription]]; + } + [desc appendString:@" )"]; + return desc; + } else { + return [self description]; + } +} + +- (NSString *) description +{ + if (token) + return [NSString stringWithFormat:@"\"%@\"", [token text]]; + return @"nil"; +} + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTreeAdaptor.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTreeAdaptor.h new file mode 100644 index 0000000..86731dc --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTreeAdaptor.h @@ -0,0 +1,36 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import +#import +#import + +@interface ANTLRCommonTreeAdaptor : ANTLRTreeAdaptor { + +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTreeAdaptor.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTreeAdaptor.m new file mode 100644 index 0000000..9f97382 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTreeAdaptor.m @@ -0,0 +1,68 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRCommonTreeAdaptor.h" + +@implementation ANTLRCommonTreeAdaptor + +- (id) newTreeWithToken:(id) payload +{ + // Had to cast to id here, because GCC is dumb. + return (id)[[ANTLRCommonTree alloc] initWithToken:(ANTLRCommonToken *)payload]; +} + +- (id) newTokenWithToken:(id)fromToken +{ + return [[ANTLRCommonToken alloc] initWithToken:(ANTLRCommonToken *)fromToken]; +} + +- (id) newTokenWithTokenType:(int)tokenType text:(NSString *)tokenText +{ + ANTLRCommonToken *newToken = [[ANTLRCommonToken alloc] init]; + [newToken setType:tokenType]; + [newToken setText:tokenText]; + return newToken; +} + +- (void) setBoundariesForTree:(id)aTree fromToken:(id)startToken toToken:(id)stopToken +{ + ANTLRCommonTree *tmpTree = (ANTLRCommonTree *)aTree; + [tmpTree setStartIndex:[startToken tokenIndex]]; + [tmpTree setStopIndex:[stopToken tokenIndex]]; + +} + +- (int) tokenStartIndexForTree:(id)aTree +{ + return [(ANTLRCommonTree *)aTree startIndex]; +} + +- (int) tokenStopIndexForTree:(id)aTree +{ + return [(ANTLRCommonTree *)aTree stopIndex]; +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTreeNodeStream.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTreeNodeStream.h new file mode 100644 index 0000000..18dd133 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTreeNodeStream.h @@ -0,0 +1,34 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import + +@interface ANTLRCommonTreeNodeStream : NSObject < ANTLRTreeNodeStream > { + +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTreeNodeStream.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTreeNodeStream.m new file mode 100644 index 0000000..a8d9f74 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRCommonTreeNodeStream.m @@ -0,0 +1,32 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRCommonTreeNodeStream.h" + + +@implementation ANTLRCommonTreeNodeStream + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDFA.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDFA.h new file mode 100644 index 0000000..00a6f37 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDFA.h @@ -0,0 +1,62 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import +#import +#import + +@interface ANTLRDFA : NSObject { + // the tables are set by subclasses to their own static versions. + const int *eot; + const int *eof; + const unichar *min; + const unichar *max; + const int *accept; + const int *special; + const int **transition; + + int decisionNumber; + ANTLRBaseRecognizer *recognizer; +} + +- (id) initWithRecognizer:(ANTLRBaseRecognizer *) theRecognizer; +// simulate the DFA using the static tables and predict an alternative +- (int) predict; +- (void) noViableAlt:(int) state; + +- (int) specialStateTransition:(int) state; +//- (unichar) specialTransition:(unichar) state symbol:(int) symbol; + +// hook for debugger support +- (void) error:(ANTLRNoViableAltException *)nvae; + +- (NSString *) description; +- (BOOL) evaluateSyntacticPredicate:(SEL)synpredFragment; + ++ (void) setIsEmittingDebugInfo:(BOOL) shouldEmitDebugInfo; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDFA.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDFA.m new file mode 100644 index 0000000..6181728 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDFA.m @@ -0,0 +1,146 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRDFA.h" +#import +#import + +static BOOL debug = NO; + +@implementation ANTLRDFA + +- (id) initWithRecognizer:(ANTLRBaseRecognizer *) theRecognizer +{ + if ((self = [super init])) { + recognizer = theRecognizer; + } + return self; +} + +// using the tables ANTLR generates for the DFA based prediction this method simulates the DFA +// and returns the prediction of the alternative to be used. +- (int) predict +{ + id stream = [recognizer input]; + + unsigned int mark = [stream mark]; + int s = 0; + @try { + while (YES) { + if ( debug ) NSLog(@"DFA %d state %d LA(1)=%c(%d)", decisionNumber, s, (unichar)[stream LA:1], [stream LA:1]); + int specialState = special[s]; + if (specialState >= 0) { + // this state is special in that it has some code associated with it. we cannot do this in a pure DFA so + // we signal the caller accordingly. + if ( debug ) NSLog(@"DFA %d state %d is special state %d", decisionNumber, s, specialState); + s = [self specialStateTransition:specialState]; + [stream consume]; + continue; + } + // if this is an accepting state return the prediction + if (accept[s] >= 1) { + if ( debug ) NSLog(@"accept; predict %d from state %d", accept[s], s); + return accept[s]; + } + // based on the lookahead lookup the next transition, consume and do transition + // or signal that we have no viable alternative + int c = [stream LA:1]; + if ( (unichar)c >= min[s] && (unichar)c <= max[s]) { + int snext = transition[s][c-min[s]]; + if (snext < 0) { + if (eot[s] >= 0) { + if ( debug ) NSLog(@"EOT transition"); + s = eot[s]; + [stream consume]; + continue; + } + [self noViableAlt:s]; + return 0; + } + s = snext; + [stream consume]; + continue; + } + // we are the end of the token, consume and do transition. we may still accept the input in the next state + if (eot[s] >= 0) { + if ( debug ) NSLog(@"EOT transition"); + s = eot[s]; + [stream consume]; + continue; + } + // we are at EOF and may even accept the input. + if ( c == ANTLRTokenTypeEOF && eof[s] >= 0) { + if ( debug ) NSLog(@"accept via EOF; predict %d from %d", accept[eof[s]], eof[s]); + return accept[eof[s]]; + } + if (debug) NSLog(@"no viable alt!"); + [self noViableAlt:s]; + } + } + @finally { + [stream rewind:mark]; + } + return 0; // silence warning +} + +- (void) noViableAlt:(int) state +{ + id stream = [recognizer input]; + if ([recognizer isBacktracking]) { + [recognizer setIsFailed:YES]; + return; + } + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:decisionNumber state:state stream:stream]; + [self error:nvae]; + @throw nvae; +} + +- (int) specialStateTransition:(int) state +{ + return 0; +} + +- (void) error:(ANTLRNoViableAltException *)nvae +{ + // empty, hook for debugger support +} + +- (NSString *) description +{ + return @"subclass responsibility"; +} + +- (BOOL) evaluateSyntacticPredicate:(SEL)synpredFragment +{ + return [recognizer evaluateSyntacticPredicate:synpredFragment]; +} + ++ (void) setIsEmittingDebugInfo:(BOOL) shouldEmitDebugInfo +{ + debug = shouldEmitDebugInfo; +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebug.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebug.h new file mode 100644 index 0000000..6b12454 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebug.h @@ -0,0 +1,35 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import + +#import +#import +#import +#import +#import +#import +#import diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugEventListener.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugEventListener.h new file mode 100644 index 0000000..4f610ad --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugEventListener.h @@ -0,0 +1,275 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import +#import + +@protocol ANTLRDebugEventListener + +#define ANTLRDebugProtocolVersion 1 + +/** The parser has just entered a rule. No decision has been made about +* which alt is predicted. This is fired AFTER init actions have been +* executed. Attributes are defined and available etc... +*/ +- (void) enterRule:(NSString *)ruleName; + +/** Because rules can have lots of alternatives, it is very useful to +* know which alt you are entering. This is 1..n for n alts. +*/ +- (void) enterAlt:(int)alt; + +/** This is the last thing executed before leaving a rule. It is +* executed even if an exception is thrown. This is triggered after +* error reporting and recovery have occurred (unless the exception is + * not caught in this rule). This implies an "exitAlt" event. +*/ +- (void) exitRule:(NSString *)ruleName; + +/** Track entry into any (...) subrule other EBNF construct */ +- (void) enterSubRule:(int)decisionNumber; + +- (void) exitSubRule:(int)decisionNumber; + +/** Every decision, fixed k or arbitrary, has an enter/exit event +* so that a GUI can easily track what LT/consume events are +* associated with prediction. You will see a single enter/exit +* subrule but multiple enter/exit decision events, one for each +* loop iteration. +*/ +- (void) enterDecision:(int)decisionNumber; + +- (void) exitDecision:(int)decisionNumber; + +/** An input token was consumed; matched by any kind of element. +* Trigger after the token was matched by things like match(), matchAny(). +*/ +- (void) consumeToken:(id)t; + +/** An off-channel input token was consumed. +* Trigger after the token was matched by things like match(), matchAny(). +* (unless of course the hidden token is first stuff in the input stream). +*/ +- (void) consumeHiddenToken:(id)t; + +/** Somebody (anybody) looked ahead. Note that this actually gets +* triggered by both LA and LT calls. The debugger will want to know +* which Token object was examined. Like consumeToken, this indicates +* what token was seen at that depth. A remote debugger cannot look +* ahead into a file it doesn't have so LT events must pass the token +* even if the info is redundant. +*/ +- (void) LT:(int)i foundToken:(id)t; + +/** The parser is going to look arbitrarily ahead; mark this location, +* the token stream's marker is sent in case you need it. +*/ +- (void) mark:(int)marker; + +/** After an arbitrairly long lookahead as with a cyclic DFA (or with +* any backtrack), this informs the debugger that stream should be +* rewound to the position associated with marker. +*/ +- (void) rewind:(int)marker; + +/** Rewind to the input position of the last marker. +* Used currently only after a cyclic DFA and just +* before starting a sem/syn predicate to get the +* input position back to the start of the decision. +* Do not "pop" the marker off the state. mark(i) +* and rewind(i) should balance still. +*/ +- (void) rewind; + +- (void) beginBacktrack:(int)level; + +- (void) endBacktrack:(int)level wasSuccessful:(BOOL)successful; + +/** To watch a parser move through the grammar, the parser needs to +* inform the debugger what line/charPos it is passing in the grammar. +* For now, this does not know how to switch from one grammar to the +* other and back for island grammars etc... +* +* This should also allow breakpoints because the debugger can stop +* the parser whenever it hits this line/pos. +*/ +- (void) locationLine:(int)line column:(int)pos; + +/** A recognition exception occurred such as NoViableAltException. I made +* this a generic event so that I can alter the exception hierachy later +* without having to alter all the debug objects. +* +* Upon error, the stack of enter rule/subrule must be properly unwound. +* If no viable alt occurs it is within an enter/exit decision, which +* also must be rewound. Even the rewind for each mark must be unwount. +* In the Java target this is pretty easy using try/finally, if a bit +* ugly in the generated code. The rewind is generated in DFA.predict() +* actually so no code needs to be generated for that. For languages +* w/o this "finally" feature (C++?), the target implementor will have +* to build an event stack or something. +* +* Across a socket for remote debugging, only the RecognitionException +* data fields are transmitted. The token object or whatever that +* caused the problem was the last object referenced by LT. The +* immediately preceding LT event should hold the unexpected Token or +* char. +* +* Here is a sample event trace for grammar: +* +* b : C ({;}A|B) // {;} is there to prevent A|B becoming a set +* | D +* ; +* +* The sequence for this rule (with no viable alt in the subrule) for +* input 'c c' (there are 3 tokens) is: +* +* commence +* LT(1) +* enterRule b +* location 7 1 +* enter decision 3 +* LT(1) +* exit decision 3 +* enterAlt1 +* location 7 5 +* LT(1) +* consumeToken [c/<4>,1:0] +* location 7 7 +* enterSubRule 2 +* enter decision 2 +* LT(1) +* LT(1) +* recognitionException NoViableAltException 2 1 2 +* exit decision 2 +* exitSubRule 2 +* beginResync +* LT(1) +* consumeToken [c/<4>,1:1] +* LT(1) +* endResync +* LT(-1) +* exitRule b +* terminate +*/ +- (void) recognitionException:(ANTLRRecognitionException *)e; + +/** Indicates the recognizer is about to consume tokens to resynchronize +* the parser. Any consume events from here until the recovered event +* are not part of the parse--they are dead tokens. +*/ +- (void) beginResync; + +/** Indicates that the recognizer has finished consuming tokens in order +* to resychronize. There may be multiple beginResync/endResync pairs +* before the recognizer comes out of errorRecovery mode (in which +* multiple errors are suppressed). This will be useful +* in a gui where you want to probably grey out tokens that are consumed +* but not matched to anything in grammar. Anything between +* a beginResync/endResync pair was tossed out by the parser. +*/ +- (void) endResync; + +/** A semantic predicate was evaluate with this result and action text */ +- (void) semanticPredicate:(NSString *)predicate matched:(BOOL)result; + +/** Announce that parsing has begun. Not technically useful except for +* sending events over a socket. A GUI for example will launch a thread +* to connect and communicate with a remote parser. The thread will want +* to notify the GUI when a connection is made. ANTLR parsers +* trigger this upon entry to the first rule (the ruleLevel is used to +* figure this out). +*/ +- (void) commence; + +/** Parsing is over; successfully or not. Mostly useful for telling +* remote debugging listeners that it's time to quit. When the rule +* invocation level goes to zero at the end of a rule, we are done +* parsing. +*/ +- (void) terminate; + + +// T r e e P a r s i n g + +/** Input for a tree parser is an AST, but we know nothing for sure +* about a node except its type and text (obtained from the adaptor). +* This is the analog of the consumeToken method. Again, the ID is +* the hashCode usually of the node so it only works if hashCode is +* not implemented. If the type is UP or DOWN, then +* the ID is not really meaningful as it's fixed--there is +* just one UP node and one DOWN navigation node. +*/ +- (void) consumeNode:(int)nodeHash ofType:(int)type text:(NSString *)text; + +/** The tree parser lookedahead. If the type is UP or DOWN, +* then the ID is not really meaningful as it's fixed--there is +* just one UP node and one DOWN navigation node. +*/ +- (void) LT:(int)i foundNode:(unsigned)nodeHash ofType:(int)type text:(NSString *)text; + + +// A S T E v e n t s + +/** A nil was created (even nil nodes have a unique ID... +* they are not "null" per se). As of 4/28/2006, this +* seems to be uniquely triggered when starting a new subtree +* such as when entering a subrule in automatic mode and when +* building a tree in rewrite mode. +*/ +- (void) createNilNode:(unsigned)hash; + +/** Announce a new node built from text */ +- (void) createNode:(unsigned)hash text:(NSString *)text type:(int)type; + +/** Announce a new node built from an existing token */ +- (void) createNode:(unsigned)hash fromTokenAtIndex:(int)tokenIndex; + +/** Make a node the new root of an existing root. See +* +* Note: the newRootID parameter is possibly different +* than the TreeAdaptor.becomeRoot() newRoot parameter. +* In our case, it will always be the result of calling +* TreeAdaptor.becomeRoot() and not root_n or whatever. +* +* The listener should assume that this event occurs +* only when the current subrule (or rule) subtree is +* being reset to newRootID. +* +*/ +- (void) makeNode:(unsigned)newRootHash parentOf:(unsigned)oldRootHash; + +/** Make childID a child of rootID. +* @see org.antlr.runtime.tree.TreeAdaptor.addChild() +*/ +- (void) addChild:(unsigned)childHash toTree:(unsigned)treeHash; + +/** Set the token start/stop token index for a subtree root or node */ +- (void) setTokenBoundariesForTree:(unsigned)nodeHash start:(unsigned int)tokenStartIndex stop:(unsigned int)tokenStopIndex; + +- (void) waitForDebuggerConnection; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugEventProxy.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugEventProxy.h new file mode 100644 index 0000000..934eb88 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugEventProxy.h @@ -0,0 +1,112 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import +#import +#import +#import +#import +#include + +// default port for ANTLRWorks +#define DEFAULT_DEBUGGER_PORT 0xC001 + +@interface ANTLRDebugEventProxy : NSObject { + int serverSocket; + + struct sockaddr debugger_sockaddr; + socklen_t debugger_socklen; + int debuggerSocket; + NSFileHandle *debuggerFH; + + NSString *grammarName; + int debuggerPort; +} + +- (id) init; +- (id) initWithGrammarName:(NSString *)aGrammarName debuggerPort:(int)aPort; +- (void) waitForDebuggerConnection; +- (void) waitForAck; +- (void) sendToDebugger:(NSString *)message; +- (void) sendToDebugger:(NSString *)message waitForResponse:(BOOL)wait; + +- (int) serverSocket; +- (void) setServerSocket: (int) aServerSocket; + +- (int) debuggerSocket; +- (void) setDebuggerSocket: (int) aDebuggerSocket; + +- (NSString *) grammarName; +- (void) setGrammarName: (NSString *) aGrammarName; + +- (int) debuggerPort; +- (void) setDebuggerPort: (int) aDebuggerPort; + +- (NSString *) escapeNewlines:(NSString *)aString; + +#pragma mark - + +#pragma mark DebugEventListener Protocol +- (void) enterRule:(NSString *)ruleName; +- (void) enterAlt:(int)alt; +- (void) exitRule:(NSString *)ruleName; +- (void) enterSubRule:(int)decisionNumber; +- (void) exitSubRule:(int)decisionNumber; +- (void) enterDecision:(int)decisionNumber; +- (void) exitDecision:(int)decisionNumber; +- (void) consumeToken:(id)t; +- (void) consumeHiddenToken:(id)t; +- (void) LT:(int)i foundToken:(id)t; +- (void) mark:(int)marker; +- (void) rewind:(int)marker; +- (void) rewind; +- (void) beginBacktrack:(int)level; +- (void) endBacktrack:(int)level wasSuccessful:(BOOL)successful; +- (void) locationLine:(int)line column:(int)pos; +- (void) recognitionException:(ANTLRRecognitionException *)e; +- (void) beginResync; +- (void) endResync; +- (void) semanticPredicate:(NSString *)predicate matched:(BOOL)result; +- (void) commence; +- (void) terminate; + + +#pragma mark Tree Parsing +- (void) consumeNode:(unsigned)nodeHash ofType:(int)type text:(NSString *)text; +- (void) LT:(int)i foundNode:(unsigned)nodeHash ofType:(int)type text:(NSString *)text; + + +#pragma mark AST Events + +- (void) createNilNode:(unsigned)hash; +- (void) createNode:(unsigned)hash text:(NSString *)text type:(int)type; +- (void) createNode:(unsigned)hash fromTokenAtIndex:(int)tokenIndex; +- (void) makeNode:(unsigned)newRootHash parentOf:(unsigned)oldRootHash; +- (void) addChild:(unsigned)childHash toTree:(unsigned)treeHash; +- (void) setTokenBoundariesForTree:(unsigned)nodeHash start:(int)tokenStartIndex stop:(int)tokenStopIndex; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugEventProxy.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugEventProxy.m new file mode 100644 index 0000000..9e82084 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugEventProxy.m @@ -0,0 +1,370 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRDebugEventProxy.h" +#import "ANTLRToken+DebuggerSupport.h" +#include + +static NSData *newlineData = nil; +static unsigned lengthOfUTF8Ack = 0; + +@implementation ANTLRDebugEventProxy + ++ (void) initialize +{ + if (!newlineData) newlineData = [@"\n" dataUsingEncoding:NSUTF8StringEncoding]; + if (!lengthOfUTF8Ack) lengthOfUTF8Ack = [[@"ack\n" dataUsingEncoding:NSUTF8StringEncoding] length]; +} + +- (id) init +{ + return [self initWithGrammarName:nil debuggerPort:DEFAULT_DEBUGGER_PORT]; +} + +- (id) initWithGrammarName:(NSString *)aGrammarName debuggerPort:(int)aPort +{ + self = [super init]; + if (self) { + serverSocket = -1; + [self setGrammarName:aGrammarName]; + if (aPort == -1) aPort = DEFAULT_DEBUGGER_PORT; + [self setDebuggerPort:aPort]; + } + return self; +} + +- (void) dealloc +{ + if (serverSocket != -1) + shutdown(serverSocket,SHUT_RDWR); + serverSocket = -1; + [debuggerFH release]; + [self setGrammarName:nil]; + [super dealloc]; +} + +- (void) waitForDebuggerConnection +{ + if (serverSocket == -1) { + serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + + NSAssert1(serverSocket != -1, @"Failed to create debugger socket. %s", strerror(errno)); + + int yes = 1; + setsockopt(serverSocket, SOL_SOCKET, SO_KEEPALIVE|SO_REUSEPORT|SO_REUSEADDR|TCP_NODELAY, (void *)&yes, sizeof(int)); + + struct sockaddr_in server_addr; + bzero(&server_addr, sizeof(struct sockaddr_in)); + server_addr.sin_family = AF_INET; + server_addr.sin_port = htons([self debuggerPort]); + server_addr.sin_addr.s_addr = htonl(INADDR_ANY); + NSAssert1( bind(serverSocket, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) != -1, @"bind(2) failed. %s", strerror(errno)); + + NSAssert1(listen(serverSocket,50) == 0, @"listen(2) failed. %s", strerror(errno)); + + NSLog(@"ANTLR waiting for debugger attach (grammar %@)", [self grammarName]); + + debuggerSocket = accept(serverSocket, &debugger_sockaddr, &debugger_socklen); + NSAssert1( debuggerSocket != -1, @"accept(2) failed. %s", strerror(errno)); + + debuggerFH = [[NSFileHandle alloc] initWithFileDescriptor:debuggerSocket]; + [self sendToDebugger:[NSString stringWithFormat:@"ANTLR %d", ANTLRDebugProtocolVersion] waitForResponse:NO]; + [self sendToDebugger:[NSString stringWithFormat:@"grammar \"%@", [self grammarName]] waitForResponse:NO]; + } +} + +- (void) waitForAck +{ + NSString *response; + @try { + NSData *newLine = [debuggerFH readDataOfLength:lengthOfUTF8Ack]; + response = [[NSString alloc] initWithData:newLine encoding:NSUTF8StringEncoding]; + if (![response isEqualToString:@"ack\n"]) @throw [NSException exceptionWithName:@"ANTLRDebugEventProxy" reason:@"illegal response from debugger" userInfo:nil]; + } + @catch (NSException *e) { + NSLog(@"socket died or debugger misbehaved: %@ read <%@>", e, response); + } + @finally { + [response release]; + } +} + +- (void) sendToDebugger:(NSString *)message +{ + [self sendToDebugger:message waitForResponse:YES]; +} + +- (void) sendToDebugger:(NSString *)message waitForResponse:(BOOL)wait +{ + if (! debuggerFH ) return; + [debuggerFH writeData:[message dataUsingEncoding:NSUTF8StringEncoding]]; + [debuggerFH writeData:newlineData]; + if (wait) [self waitForAck]; +} + +- (int) serverSocket +{ + return serverSocket; +} + +- (void) setServerSocket: (int) aServerSocket +{ + serverSocket = aServerSocket; +} + +- (int) debuggerSocket +{ + return debuggerSocket; +} + +- (void) setDebuggerSocket: (int) aDebuggerSocket +{ + debuggerSocket = aDebuggerSocket; +} + +- (NSString *) grammarName +{ + return grammarName; +} + +- (void) setGrammarName: (NSString *) aGrammarName +{ + if (grammarName != aGrammarName) { + [aGrammarName retain]; + [grammarName release]; + grammarName = aGrammarName; + } +} + +- (int) debuggerPort +{ + return debuggerPort; +} + +- (void) setDebuggerPort: (int) aDebuggerPort +{ + debuggerPort = aDebuggerPort; +} + +- (NSString *) escapeNewlines:(NSString *)aString +{ + NSMutableString *escapedText; + if (aString) { + escapedText = [NSMutableString stringWithString:aString]; + NSRange wholeString = NSMakeRange(0,[escapedText length]); + [escapedText replaceOccurrencesOfString:@"%" withString:@"%25" options:0 range:wholeString]; + [escapedText replaceOccurrencesOfString:@"\n" withString:@"%0A" options:0 range:wholeString]; + [escapedText replaceOccurrencesOfString:@"\r" withString:@"%0D" options:0 range:wholeString]; + } else { + escapedText = [NSMutableString stringWithString:@""]; + } + return escapedText; +} + +#pragma mark - + +#pragma mark DebugEventListener Protocol +- (void) enterRule:(NSString *)ruleName +{ + [self sendToDebugger:[NSString stringWithFormat:@"enterRule %@", ruleName]]; +} + +- (void) enterAlt:(int)alt +{ + [self sendToDebugger:[NSString stringWithFormat:@"enterAlt %d", alt]]; +} + +- (void) exitRule:(NSString *)ruleName +{ + [self sendToDebugger:[NSString stringWithFormat:@"exitRule %@", ruleName]]; +} + +- (void) enterSubRule:(int)decisionNumber +{ + [self sendToDebugger:[NSString stringWithFormat:@"enterSubRule %d", decisionNumber]]; +} + +- (void) exitSubRule:(int)decisionNumber +{ + [self sendToDebugger:[NSString stringWithFormat:@"exitSubRule %d", decisionNumber]]; +} + +- (void) enterDecision:(int)decisionNumber +{ + [self sendToDebugger:[NSString stringWithFormat:@"enterDecision %d", decisionNumber]]; +} + +- (void) exitDecision:(int)decisionNumber +{ + [self sendToDebugger:[NSString stringWithFormat:@"exitDecision %d", decisionNumber]]; +} + +- (void) consumeToken:(id)t +{ + [self sendToDebugger:[NSString stringWithFormat:@"consumeToken %@", [self escapeNewlines:[t debuggerDescription]]]]; +} + +- (void) consumeHiddenToken:(id)t +{ + [self sendToDebugger:[NSString stringWithFormat:@"consumeHiddenToken %@", [self escapeNewlines:[t debuggerDescription]]]]; +} + +- (void) LT:(int)i foundToken:(id)t +{ + [self sendToDebugger:[NSString stringWithFormat:@"LT %d %@", i, [self escapeNewlines:[t debuggerDescription]]]]; +} + +- (void) mark:(int)marker +{ + [self sendToDebugger:[NSString stringWithFormat:@"mark %d", marker]]; +} +- (void) rewind:(int)marker +{ + [self sendToDebugger:[NSString stringWithFormat:@"rewind %d", marker]]; +} + +- (void) rewind +{ + [self sendToDebugger:@"rewind"]; +} + +- (void) beginBacktrack:(int)level +{ + [self sendToDebugger:[NSString stringWithFormat:@"beginBacktrack %d", level]]; +} + +- (void) endBacktrack:(int)level wasSuccessful:(BOOL)successful +{ + [self sendToDebugger:[NSString stringWithFormat:@"endBacktrack %d %d", level, successful ? 1 : 0]]; +} + +- (void) locationLine:(int)line column:(int)pos +{ + [self sendToDebugger:[NSString stringWithFormat:@"location %d %d", line, pos]]; +} + +- (void) recognitionException:(ANTLRRecognitionException *)e +{ +#warning TODO: recognition exceptions + // these must use the names of the corresponding Java exception classes, because ANTLRWorks recreates the exception + // objects on the Java side. + // Write categories for Objective-C exceptions to provide those names +} + +- (void) beginResync +{ + [self sendToDebugger:@"beginResync"]; +} + +- (void) endResync +{ + [self sendToDebugger:@"endResync"]; +} + +- (void) semanticPredicate:(NSString *)predicate matched:(BOOL)result +{ + [self sendToDebugger:[NSString stringWithFormat:@"semanticPredicate %d %@", result?1:0, [self escapeNewlines:predicate]]]; +} + +- (void) commence +{ + // no need to send event +} + +- (void) terminate +{ + [self sendToDebugger:@"terminate"]; + @try { + [debuggerFH closeFile]; + } + @finally { +#warning TODO: make socket handling robust. too lazy now... + shutdown(serverSocket,SHUT_RDWR); + serverSocket = -1; + } +} + + +#pragma mark Tree Parsing +- (void) consumeNode:(unsigned)nodeHash ofType:(int)type text:(NSString *)text +{ + [self sendToDebugger:[NSString stringWithFormat:@"consumeNode %u %d %@", + nodeHash, + type, + [self escapeNewlines:text] + ]]; +} + +- (void) LT:(int)i foundNode:(unsigned)nodeHash ofType:(int)type text:(NSString *)text +{ + [self sendToDebugger:[NSString stringWithFormat:@"LN %d %u %d %@", + i, + nodeHash, + type, + [self escapeNewlines:text] + ]]; +} + + +#pragma mark AST Events + +- (void) createNilNode:(unsigned)hash +{ + [self sendToDebugger:[NSString stringWithFormat:@"nilNode %u", hash]]; +} + +- (void) createNode:(unsigned)hash text:(NSString *)text type:(int)type +{ + [self sendToDebugger:[NSString stringWithFormat:@"createNodeFromToken %u %d %@", + hash, + type, + [self escapeNewlines:text] + ]]; +} + +- (void) createNode:(unsigned)hash fromTokenAtIndex:(int)tokenIndex +{ + [self sendToDebugger:[NSString stringWithFormat:@"createNode %u %d", hash, tokenIndex]]; +} + +- (void) makeNode:(unsigned)newRootHash parentOf:(unsigned)oldRootHash +{ + [self sendToDebugger:[NSString stringWithFormat:@"becomeRoot %u %u", newRootHash, oldRootHash]]; +} + +- (void) addChild:(unsigned)childHash toTree:(unsigned)treeHash +{ + [self sendToDebugger:[NSString stringWithFormat:@"addChild %u %u", treeHash, childHash]]; +} + +- (void) setTokenBoundariesForTree:(unsigned)nodeHash start:(int)tokenStartIndex stop:(int)tokenStopIndex +{ + [self sendToDebugger:[NSString stringWithFormat:@"setTokenBoundaries %u %d %d", nodeHash, tokenStartIndex, tokenStopIndex]]; +} + + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugParser.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugParser.h new file mode 100644 index 0000000..dd9e8be --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugParser.h @@ -0,0 +1,47 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import +#import +#import + +@interface ANTLRDebugParser : ANTLRParser { + id debugListener; +} + +- (id) initWithTokenStream:(id)theStream; +- (id) initWithTokenStream:(id)theStream + debuggerPort:(int)portNumber; +// designated initializer +- (id) initWithTokenStream:(id)theStream + debugListener:(id)theDebugListener + debuggerPort:(int)portNumber; + +- (id) debugListener; +- (void) setDebugListener: (id) aDebugListener; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugParser.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugParser.m new file mode 100644 index 0000000..e4665f9 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugParser.m @@ -0,0 +1,128 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRDebugParser.h" + + +@implementation ANTLRDebugParser + +- (id) initWithTokenStream:(id)theStream +{ + return [self initWithTokenStream:theStream debugListener:nil debuggerPort:-1]; +} + +- (id) initWithTokenStream:(id)theStream + debuggerPort:(int)portNumber +{ + return [self initWithTokenStream:theStream debugListener:nil debuggerPort:portNumber]; +} + +- (id) initWithTokenStream:(id)theStream + debugListener:(id)theDebugListener + debuggerPort:(int)portNumber +{ + id debugger = nil; + id tokenStream = nil; + if (theDebugListener) { + debugger = [(id)theDebugListener retain]; + } else { + debugger = [[ANTLRDebugEventProxy alloc] initWithGrammarName:[self grammarFileName] debuggerPort:portNumber]; + } + if (theStream && ![theStream isKindOfClass:[ANTLRDebugTokenStream class]]) { + tokenStream = [[ANTLRDebugTokenStream alloc] initWithTokenStream:theStream debugListener:debugger]; + } else { + tokenStream = [theStream retain]; + } + self = [super initWithTokenStream:tokenStream]; + if (self) { + [self setDebugListener:debugger]; + [debugger release]; + [tokenStream release]; + [debugListener waitForDebuggerConnection]; + } + return self; +} + +- (void) dealloc +{ + [self setDebugListener: nil]; + [super dealloc]; +} + +- (id) debugListener +{ + return debugListener; +} + +- (void) setDebugListener: (id) aDebugListener +{ + if (debugListener != aDebugListener) { + [(id)aDebugListener retain]; + [(id)debugListener release]; + debugListener = aDebugListener; + } +} + +#pragma mark - +#pragma mark Overrides + +- (void) beginResync +{ + [debugListener beginResync]; +} + +- (void) endResync +{ + [debugListener endResync]; +} +- (void)beginBacktracking:(int)level +{ + [debugListener beginBacktrack:level]; +} + +- (void)endBacktracking:(int)level wasSuccessful:(BOOL)successful +{ + [debugListener endBacktrack:level wasSuccessful:successful]; +} + +- (void) recoverFromMismatchedToken:(id)inputStream + exception:(NSException *)e + tokenType:(ANTLRTokenType)ttype + follow:(ANTLRBitSet *)follow +{ +#warning TODO: recoverFromMismatchedToken in debugger + [super recoverFromMismatchedToken:inputStream exception:e tokenType:ttype follow:follow]; +} + +- (void) recoverFromMismatchedSet:(id)inputStream + exception:(NSException *)e + follow:(ANTLRBitSet *)follow +{ +#warning TODO: recoverFromMismatchedSet in debugger + [super recoverFromMismatchedSet:inputStream exception:e follow:follow]; +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTokenStream.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTokenStream.h new file mode 100644 index 0000000..a4cde35 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTokenStream.h @@ -0,0 +1,50 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import +#import +#import +#import + +@interface ANTLRDebugTokenStream : NSObject { + id debugListener; + id tokenStream; + BOOL initialStreamState; +} + +- (id) initWithTokenStream:(id)theStream debugListener:(id)debugger; + +- (id) debugListener; +- (void) setDebugListener: (id) aDebugListener; + +- (id) tokenStream; +- (void) setTokenStream: (id) aTokenStream; + + + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTokenStream.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTokenStream.m new file mode 100644 index 0000000..89fe4d7 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTokenStream.m @@ -0,0 +1,148 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRDebugTokenStream.h" + + +@implementation ANTLRDebugTokenStream + + +- (id) initWithTokenStream:(id)theStream debugListener:(id)debugger +{ + self = [super init]; + if (self) { + [self setDebugListener:debugger]; + [self setTokenStream:theStream]; + [[self tokenStream] LT:1]; // force reading first on-channel token + initialStreamState = YES; + } + return self; +} + +- (void) dealloc +{ + [self setDebugListener: nil]; + [self setTokenStream: nil]; + [super dealloc]; +} + + +- (id) debugListener +{ + return debugListener; +} + +- (void) setDebugListener: (id) aDebugListener +{ + if (debugListener != aDebugListener) { + [(id)aDebugListener retain]; + [(id)debugListener release]; + debugListener = aDebugListener; + } +} + +- (id) tokenStream +{ + return tokenStream; +} + +- (void) setTokenStream: (id) aTokenStream +{ + if (tokenStream != aTokenStream) { + [aTokenStream retain]; + [tokenStream release]; + tokenStream = aTokenStream; + } +} + +- (void) consumeInitialHiddenTokens +{ + int firstIdx = [tokenStream index]; + for (int i = 0; i token = [tokenStream LT:1]; + [tokenStream consume]; + int b = [tokenStream index]; + [debugListener consumeToken:token]; + if (b > a+1) // must have consumed hidden tokens + for (int i = a+1; i < b; i++) + [debugListener consumeHiddenToken:[tokenStream tokenAtIndex:i]]; +} + +- (int) mark +{ + int lastMarker = [tokenStream mark]; + [debugListener mark:lastMarker]; + return lastMarker; +} + +- (void) rewind +{ + [debugListener rewind]; + [tokenStream rewind]; +} + +- (void) rewind:(int)marker +{ + [debugListener rewind:marker]; + [tokenStream rewind:marker]; +} + +- (id) LT:(int)k +{ + if ( initialStreamState ) + [self consumeInitialHiddenTokens]; + [debugListener LT:k foundToken:[tokenStream LT:k]]; + return [tokenStream LT:k]; +} + +- (int) LA:(int)k +{ + if ( initialStreamState ) + [self consumeInitialHiddenTokens]; + [debugListener LT:k foundToken:[tokenStream LT:k]]; + return [tokenStream LA:k]; +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeAdaptor.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeAdaptor.h new file mode 100644 index 0000000..162186b --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeAdaptor.h @@ -0,0 +1,45 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import +#import +#import + +@interface ANTLRDebugTreeAdaptor : ANTLRTreeAdaptor { + id debugListener; + id treeAdaptor; +} + +- (id) initWithTreeAdaptor:(id)aTreeAdaptor debugListener:(id)aDebugListener; + +- (id) debugListener; +- (void) setDebugListener: (id) aDebugListener; + +- (id) treeAdaptor; +- (void) setTreeAdaptor: (id) aTreeAdaptor; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeAdaptor.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeAdaptor.m new file mode 100644 index 0000000..ee970a2 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeAdaptor.m @@ -0,0 +1,225 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRDebugTreeAdaptor.h" + + +@implementation ANTLRDebugTreeAdaptor + + +- (id) initWithTreeAdaptor:(id)aTreeAdaptor debugListener:(id)aDebugListener +{ + self = [super init]; + if (self) { + [self setDebugListener:aDebugListener]; + [self setTreeAdaptor:aTreeAdaptor]; + } + return self; +} + +- (void) dealloc +{ + [self setDebugListener: nil]; + [self setTreeAdaptor: nil]; + [super dealloc]; +} + +- (id) debugListener +{ + return debugListener; +} + +- (void) setDebugListener: (id) aDebugListener +{ + if (debugListener != aDebugListener) { + [(id)aDebugListener retain]; + [(id)debugListener release]; + debugListener = aDebugListener; + } +} + +- (id) treeAdaptor +{ + return treeAdaptor; +} + +- (void) setTreeAdaptor: (id) aTreeAdaptor +{ + if (treeAdaptor != aTreeAdaptor) { + [(id)aTreeAdaptor retain]; + [(id)treeAdaptor release]; + treeAdaptor = aTreeAdaptor; + } +} + +#pragma mark - +#pragma mark Proxy implementation + +// anything else that hasn't some debugger event assicioated with it, is simply +// forwarded to the actual token stream +- (void) forwardInvocation:(NSInvocation *)anInvocation +{ + [anInvocation invokeWithTarget:[self treeAdaptor]]; +} + +#pragma mark - + +#pragma mark Construction + +- (id) newTreeWithToken:(id) payload +{ + id newTree = [treeAdaptor newTreeWithToken:payload]; + [debugListener createNode:[treeAdaptor uniqueIdForTree:newTree] fromTokenAtIndex:[payload tokenIndex]]; + return newTree; +} + +- (id) emptyTree +{ + id newTree = [treeAdaptor newEmptyTree]; + [debugListener createNilNode:[treeAdaptor uniqueIdForTree:newTree]]; + return newTree; +} + +/* We don't have debug events for those: + - (id) copyNode:(id)aNode +{ +} +- (id) copyTree:(id)aTree +{ +} +*/ + +- (void) addChild:(id)child toTree:(id)aTree +{ + [treeAdaptor addChild:child toTree:aTree]; + [debugListener addChild:[treeAdaptor uniqueIdForTree:child] toTree:[self uniqueIdForTree:aTree]]; +} + +- (id) makeNode:(id)newRoot parentOf:(id)oldRoot +{ + id newTree = [treeAdaptor makeNode:newRoot parentOf:oldRoot]; + [debugListener makeNode:[treeAdaptor uniqueIdForTree:newTree] parentOf:[self uniqueIdForTree:oldRoot]]; + return newTree; +} + +/* handle by forwardInvocation: +- (unsigned int) uniqueIdForTree:(id)aNode +{ +} +*/ + +#pragma mark Rewrite Rules + + - (void) addTokenAsChild:(id)child toTree:(id)aTree +{ + id newChild = [self newTreeWithToken:child]; + [self addChild:newChild toTree:aTree]; +} + +- (id) makeToken:(id)newRoot parentOf:(id)oldRoot +{ + id newNode = [self newTreeWithToken:newRoot]; + return [self makeNode:newNode parentOf:oldRoot]; +} + +- (id) newTreeWithTokenType:(int)tokenType +{ + id newTree = [treeAdaptor newTreeWithTokenType:tokenType]; + [debugListener createNode:[treeAdaptor uniqueIdForTree:newTree] text:nil type:tokenType]; + return newTree; +} + +- (id) newTreeWithTokenType:(int)tokenType text:(NSString *)tokenText +{ + id newTree = [treeAdaptor newTreeWithTokenType:tokenType text:tokenText]; + [debugListener createNode:[treeAdaptor uniqueIdForTree:newTree] text:tokenText type:tokenType]; + return newTree; +} +- (id) newTreeWithToken:(id)fromToken tokenType:(int)tokenType +{ + id newTree = [treeAdaptor newTreeWithToken:fromToken tokenType:tokenType]; + [debugListener createNode:[treeAdaptor uniqueIdForTree:newTree] text:[fromToken text] type:tokenType]; + return newTree; +} + +- (id) newTreeWithToken:(id)fromToken tokenType:(int)tokenType text:(NSString *)tokenText +{ + id newTree = [treeAdaptor newTreeWithToken:fromToken tokenType:tokenType text:tokenText]; + [debugListener createNode:[treeAdaptor uniqueIdForTree:newTree] text:tokenText type:tokenType]; + return newTree; +} + +- (id) newTreeWithToken:(id)fromToken text:(NSString *)tokenText +{ + id newTree = [treeAdaptor newTreeWithToken:fromToken text:tokenText]; + [debugListener createNode:[treeAdaptor uniqueIdForTree:newTree] text:tokenText type:[fromToken type]]; + return newTree; +} + +#pragma mark Content + +/* handled by forwardInvocation: +- (int) tokenTypeForNode:(id)aNode +{ +} +- (void) setTokenType:(int)tokenType forNode:(id)aNode +{ +} + +- (NSString *) textForNode:(id)aNode +{ +} +- (void) setText:(NSString *)tokenText forNode:(id)aNode +{ +} +*/ +- (void) setBoundariesForTree:(id)aTree fromToken:(id)startToken toToken:(id)stopToken +{ + [treeAdaptor setBoundariesForTree:aTree fromToken:startToken toToken:stopToken]; + if (aTree && startToken && stopToken) { + [debugListener setTokenBoundariesForTree:[aTree hash] start:[startToken tokenIndex] stop:[stopToken tokenIndex]]; + } +} +/* handled by forwardInvocation: +- (int) tokenStartIndexForTree:(id)aTree +{ +} +- (int) tokenStopIndexForTree:(id)aTree +{ +} +*/ + +#pragma mark Navigation / Tree Parsing +/* handled by forwardInvocation: +- (id) childForNode:(id) aNode atIndex:(int) i +{ +} +- (int) childCountForTree:(id) aTree +{ +} +*/ + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeNodeStream.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeNodeStream.h new file mode 100644 index 0000000..dc7cf7d --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeNodeStream.h @@ -0,0 +1,67 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import +#import +#import + +@interface ANTLRDebugTreeNodeStream : NSObject { + id debugListener; + id treeAdaptor; + id treeNodeStream; + BOOL initialStreamState; +} + +- (id) initWithTreeNodeStream:(id)theStream debugListener:(id)debugger; + +- (id) debugListener; +- (void) setDebugListener: (id) aDebugListener; + +- (id) treeNodeStream; +- (void) setTreeNodeStream: (id) aTreeNodeStream; + +- (id) treeAdaptor; +- (void) setTreeAdaptor: (id) aTreeAdaptor; + +#pragma mark ANTLRTreeNodeStream conformance + +- (id) LT:(int)k; +- (id) treeAdaptor; +- (void) setUsesUniqueNavigationNodes:(BOOL)flag; + +#pragma mark ANTLRIntStream conformance +- (void) consume; +- (int) LA:(unsigned int) i; +- (unsigned int) mark; +- (unsigned int) index; +- (void) rewind:(unsigned int) marker; +- (void) rewind; +- (void) release:(unsigned int) marker; +- (void) seek:(unsigned int) index; +- (unsigned int) count; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeNodeStream.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeNodeStream.m new file mode 100644 index 0000000..51a43fe --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeNodeStream.m @@ -0,0 +1,173 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRDebugTreeNodeStream.h" + + +@implementation ANTLRDebugTreeNodeStream + +- (id) initWithTreeNodeStream:(id)theStream debugListener:(id)debugger +{ + self = [super init]; + if (self) { + [self setDebugListener:debugger]; + [self setTreeAdaptor:[theStream treeAdaptor]]; + [self setTreeNodeStream:theStream]; + } + return self; +} + +- (void) dealloc +{ + [self setDebugListener: nil]; + [self setTreeAdaptor: nil]; + [self setTreeNodeStream: nil]; + [super dealloc]; +} + +- (id) debugListener +{ + return debugListener; +} + +- (void) setDebugListener: (id) aDebugListener +{ + if (debugListener != aDebugListener) { + [(id)aDebugListener retain]; + [(id)debugListener release]; + debugListener = aDebugListener; + } +} + + +- (id) treeAdaptor +{ + return treeAdaptor; +} + +- (void) setTreeAdaptor: (id) aTreeAdaptor +{ + if (treeAdaptor != aTreeAdaptor) { + [(id)aTreeAdaptor retain]; + [(id)treeAdaptor release]; + treeAdaptor = aTreeAdaptor; + } +} + + +- (id) treeNodeStream +{ + return treeNodeStream; +} + +- (void) setTreeNodeStream: (id) aTreeNodeStream +{ + if (treeNodeStream != aTreeNodeStream) { + [(id)aTreeNodeStream retain]; + [(id)treeNodeStream release]; + treeNodeStream = aTreeNodeStream; + } +} + + +#pragma mark ANTLRTreeNodeStream conformance + +- (id) LT:(int)k +{ + id node = [treeNodeStream LT:k]; + unsigned hash = [treeAdaptor uniqueIdForTree:node]; + NSString *text = [treeAdaptor textForNode:node]; + int type = [treeAdaptor tokenTypeForNode:node]; + [debugListener LT:k foundNode:hash ofType:type text:text]; + return node; +} + +- (void) setUsesUniqueNavigationNodes:(BOOL)flag +{ + [treeNodeStream setUsesUniqueNavigationNodes:flag]; +} + +#pragma mark ANTLRIntStream conformance +- (void) consume +{ + id node = [treeNodeStream LT:1]; + [treeNodeStream consume]; + unsigned hash = [treeAdaptor uniqueIdForTree:node]; + NSString *text = [treeAdaptor textForNode:node]; + int type = [treeAdaptor tokenTypeForNode:node]; + [debugListener consumeNode:hash ofType:type text:text]; +} + +- (int) LA:(unsigned int) i +{ + id node = [self LT:1]; + return [node tokenType]; +} + +- (unsigned int) mark +{ + unsigned lastMarker = [treeNodeStream mark]; + [debugListener mark:lastMarker]; + return lastMarker; +} + +- (unsigned int) index +{ + return [treeNodeStream index]; +} + +- (void) rewind:(unsigned int) marker +{ + [treeNodeStream rewind:marker]; + [debugListener rewind:marker]; +} + +- (void) rewind +{ + [treeNodeStream rewind]; + [debugListener rewind]; +} + +- (void) release:(unsigned int) marker +{ + [treeNodeStream release:marker]; +} + +- (void) seek:(unsigned int) index +{ + [treeNodeStream seek:index]; + // todo: seek missing in debug protocol +} + +- (unsigned int) count +{ + return [treeNodeStream count]; +} + + + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeParser.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeParser.h new file mode 100644 index 0000000..6f74cc5 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeParser.h @@ -0,0 +1,48 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import +#import +#import + +@interface ANTLRDebugTreeParser : ANTLRTreeParser { + id debugListener; +} + +- (id) initWithTreeNodeStream:(id)theStream; +- (id) initWithTreeNodeStream:(id)theStream + debuggerPort:(int)portNumber; + // designated initializer +- (id) initWithTreeNodeStream:(id)theStream + debugListener:(id)theDebugListener + debuggerPort:(int)portNumber; + +- (id) debugListener; +- (void) setDebugListener: (id) aDebugListener; + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeParser.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeParser.m new file mode 100644 index 0000000..214a942 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRDebugTreeParser.m @@ -0,0 +1,128 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRDebugTreeParser.h" + + +@implementation ANTLRDebugTreeParser + +- (id) initWithTreeNodeStream:(id)theStream +{ + return [self initWithTreeNodeStream:theStream debugListener:nil debuggerPort:-1]; +} + +- (id) initWithTreeNodeStream:(id)theStream + debuggerPort:(int)portNumber +{ + return [self initWithTreeNodeStream:theStream debugListener:nil debuggerPort:portNumber]; +} + +- (id) initWithTreeNodeStream:(id)theStream + debugListener:(id)theDebugListener + debuggerPort:(int)portNumber +{ + id debugger = nil; + id treeNodeStream = nil; + if (theDebugListener) { + debugger = [(id)theDebugListener retain]; + } else { + debugger = [[ANTLRDebugEventProxy alloc] initWithGrammarName:[self grammarFileName] debuggerPort:portNumber]; + } + if (theStream && ![theStream isKindOfClass:[ANTLRDebugTreeNodeStream class]]) { + treeNodeStream = [[ANTLRDebugTreeNodeStream alloc] initWithTreeNodeStream:theStream debugListener:debugger]; + } else { + treeNodeStream = [theStream retain]; + } + self = [super initWithTreeNodeStream:treeNodeStream]; + if (self) { + [self setDebugListener:debugger]; + [debugger release]; + [treeNodeStream release]; + [debugListener waitForDebuggerConnection]; + } + return self; +} + +- (void) dealloc +{ + [self setDebugListener: nil]; + [super dealloc]; +} + +- (id) debugListener +{ + return debugListener; +} + +- (void) setDebugListener: (id) aDebugListener +{ + if (debugListener != aDebugListener) { + [(id)aDebugListener retain]; + [(id)debugListener release]; + debugListener = aDebugListener; + } +} + +#pragma mark - +#pragma mark Overrides + +- (void) beginResync +{ + [debugListener beginResync]; +} + +- (void) endResync +{ + [debugListener endResync]; +} +- (void)beginBacktracking:(int)level +{ + [debugListener beginBacktrack:level]; +} + +- (void)endBacktracking:(int)level wasSuccessful:(BOOL)successful +{ + [debugListener endBacktrack:level wasSuccessful:successful]; +} + +- (void) recoverFromMismatchedToken:(id)inputStream + exception:(NSException *)e + tokenType:(ANTLRTokenType)ttype + follow:(ANTLRBitSet *)follow +{ +#warning TODO: recoverFromMismatchedToken in debugger + [super recoverFromMismatchedToken:inputStream exception:e tokenType:ttype follow:follow]; +} + +- (void) recoverFromMismatchedSet:(id)inputStream + exception:(NSException *)e + follow:(ANTLRBitSet *)follow +{ +#warning TODO: recoverFromMismatchedSet in debugger + [super recoverFromMismatchedSet:inputStream exception:e follow:follow]; +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLREarlyExitException.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLREarlyExitException.h new file mode 100644 index 0000000..4ff4d4d --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLREarlyExitException.h @@ -0,0 +1,37 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import + +@interface ANTLREarlyExitException : ANTLRRecognitionException { + int decisionNumber; +} + ++ (ANTLREarlyExitException *) exceptionWithStream:(id) anInputStream decisionNumber:(int) aDecisionNumber; +- (id) initWithStream:(id)anInputStream decisionNumber:(int) aDecisionNumber; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLREarlyExitException.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLREarlyExitException.m new file mode 100644 index 0000000..9771bb8 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLREarlyExitException.m @@ -0,0 +1,52 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLREarlyExitException.h" + + +@implementation ANTLREarlyExitException + ++ (ANTLREarlyExitException *) exceptionWithStream:(id) anInputStream decisionNumber:(int) aDecisionNumber +{ + return [[[self alloc] initWithStream:anInputStream decisionNumber:aDecisionNumber] autorelease]; +} + +- (id) initWithStream:(id)anInputStream decisionNumber:(int) aDecisionNumber +{ + if ((self = [super initWithStream:anInputStream]) != nil) { + decisionNumber = aDecisionNumber; + } + return self; +} + +- (NSString *) description +{ + NSMutableString *desc = (NSMutableString *)[super description]; + [desc appendFormat:@" decision:%d", decisionNumber]; + return desc; +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRFailedPredicateException.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRFailedPredicateException.h new file mode 100644 index 0000000..606b9c8 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRFailedPredicateException.h @@ -0,0 +1,44 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import + + +@interface ANTLRFailedPredicateException : ANTLRRecognitionException { + NSString *predicate; + NSString *ruleName; +} + ++ (ANTLRFailedPredicateException *) exceptionWithRuleName:(NSString *)theRuleName predicate:(NSString *)thePredicate stream:(id)theStream; +- (ANTLRFailedPredicateException *) initWithRuleName:(NSString *)theRuleName predicate:(NSString *)thePredicate stream:(id)theStream; + +- (NSString *) predicate; +- (void) setPredicate:(NSString *)thePredicate; +- (NSString *) ruleName; +- (void) setRuleName:(NSString *)theRuleName; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRFailedPredicateException.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRFailedPredicateException.m new file mode 100644 index 0000000..20c3d81 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRFailedPredicateException.m @@ -0,0 +1,88 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRFailedPredicateException.h" + + +@implementation ANTLRFailedPredicateException + ++ (ANTLRFailedPredicateException *) exceptionWithRuleName:(NSString *)theRuleName predicate:(NSString *)thePredicate stream:(id)theStream +{ + return [[ANTLRFailedPredicateException alloc] initWithRuleName:theRuleName predicate:thePredicate stream:theStream]; +} + +- (ANTLRFailedPredicateException *) initWithRuleName:(NSString *)theRuleName predicate:(NSString *)thePredicate stream:(id)theStream +{ + if ((self = [super initWithStream:theStream])) { + [self setPredicate:thePredicate]; + [self setRuleName:theRuleName]; + } + return self; +} + +- (void) dealloc +{ + [self setPredicate:nil]; + [self setRuleName:nil]; + [super dealloc]; +} + +- (NSString *) description +{ + NSMutableString *desc = (NSMutableString *)[super description]; + [desc appendFormat:@" rule: %@ predicate failed: %@", ruleName, predicate]; + return desc; +} + +- (NSString *) predicate +{ + return predicate; +} + +- (void) setPredicate:(NSString *)thePredicate +{ + if (thePredicate != predicate) { + [thePredicate retain]; + [predicate release]; + predicate = thePredicate; + } +} + +- (NSString *) ruleName +{ + return ruleName; +} + +- (void) setRuleName:(NSString *)theRuleName +{ + if (theRuleName != ruleName) { + [theRuleName retain]; + [ruleName release]; + ruleName = theRuleName; + } +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRIntStream.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRIntStream.h new file mode 100644 index 0000000..884c86e --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRIntStream.h @@ -0,0 +1,88 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +@protocol ANTLRIntStream < NSObject > + +- (void) consume; + +// Get unichar at current input pointer + i ahead where i=1 is next character as int for including ANTLRCharStreamEOF (-1) in the data range +- (int) LA:(int) i; + +// Tell the stream to start buffering if it hasn't already. Return +// current input position, index(), or some other marker so that +// when passed to rewind() you get back to the same spot. +// rewind(mark()) should not affect the input cursor. +// TODO: problem in that lexer stream returns not index but some marker + +- (int) mark; + +// Return the current input symbol index 0..n where n indicates the +// last symbol has been read. + +- (int) index; + +// Reset the stream so that next call to index would return marker. +// The marker will usually be -index but it doesn't have to be. It's +// just a marker to indicate what state the stream was in. This is +// essentially calling -release: and -seek:. If there are markers +// created after this marker argument, this routine must unroll them +// like a stack. Assume the state the stream was in when this marker +// was created. + +- (void) rewind; +- (void) rewind:(int) marker; + +// You may want to commit to a backtrack but don't want to force the +// stream to keep bookkeeping objects around for a marker that is +// no longer necessary. This will have the same behavior as +// rewind() except it releases resources without the backward seek. + +- (void) release:(int) marker; + +// Set the input cursor to the position indicated by index. This is +// normally used to seek ahead in the input stream. No buffering is +// required to do this unless you know your stream will use seek to +// move backwards such as when backtracking. +// This is different from rewind in its multi-directional +// requirement and in that its argument is strictly an input cursor (index). +// +// For char streams, seeking forward must update the stream state such +// as line number. For seeking backwards, you will be presumably +// backtracking using the mark/rewind mechanism that restores state and +// so this method does not need to update state when seeking backwards. +// +// Currently, this method is only used for efficient backtracking, but +// in the future it may be used for incremental parsing. + +- (void) seek:(int) index; + +// Only makes sense for streams that buffer everything up probably, but +// might be useful to display the entire stream or for testing. + +- (unsigned int) count; + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexer.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexer.h new file mode 100644 index 0000000..2a5b283 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexer.h @@ -0,0 +1,77 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + +@interface ANTLRLexer : ANTLRBaseRecognizer { + id input; ///< The character stream we pull tokens out of. + unsigned int ruleNestingLevel; +} + +#pragma mark Initializer +- (id) initWithCharStream:(id)anInput; + +- (ANTLRLexerState *) state; + +#pragma mark Tokens +- (id) token; +- (void) setToken: (id) aToken; +- (id) nextToken; +- (void) mTokens; // abstract, defined in generated sources +- (id) input; +- (void) setInput:(id)aCharStream; + +- (void) emit; +- (void) emit:(id)aToken; + +#pragma mark Matching +- (void) matchString:(NSString *)aString; +- (void) matchAny; +- (void) matchChar:(unichar) aChar; +- (void) matchRangeFromChar:(unichar)fromChar to:(unichar)toChar; + +#pragma mark Informational +- (unsigned int) line; +- (unsigned int) charPositionInLine; +- (int) charIndex; +- (NSString *) text; +- (void) setText:(NSString *) theText; + +// error handling +- (void) reportError:(ANTLRRecognitionException *)e; +- (void) recover:(ANTLRRecognitionException *)e; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexer.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexer.m new file mode 100644 index 0000000..3fdded5 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexer.m @@ -0,0 +1,248 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import "ANTLRLexer.h" + + +@implementation ANTLRLexer + +// init +#pragma mark Initializer +- (id) initWithCharStream:(id)anInput +{ + if (nil != (self = [super init])) { + [self setInput:anInput]; + tokenStartCharIndex = -1; + ruleNestingLevel = 0; + } + return self; +} + +- (void) reset +{ + tokenStartCharIndex = -1; + ruleNestingLevel = 0; + [super reset]; +} + +- (void) dealloc +{ + [self setToken:nil]; + [self setInput:nil]; + [self setText:nil]; + [super dealloc]; +} + + // token stuff +#pragma mark Tokens + +- (id) token +{ + return token; +} + +- (void) setToken: (id) aToken +{ + if (token != aToken) { + [aToken retain]; + [token release]; + token = aToken; + } +} + + +// this method may be overridden in the generated lexer if we generate a filtering lexer. +- (id) nextToken +{ + [self setToken:nil]; + _channel = ANTLRTokenChannelDefault; + _tokenStartLine = [input line]; + _tokenCharPositionInLine = [input charPositionInLine]; + tokenStartCharIndex = [self charIndex]; + + while (YES) { + [self setText:nil]; + if ([input LA:1] == ANTLRCharStreamEOF) { + return [ANTLRCommonToken eofToken]; + return nil; + } + @try { + [self mTokens]; + if (token == nil) + [self emit]; + return token; + } + @catch (ANTLRRecognitionException *e) { + [self reportError:e]; + [self recover:e]; + } + } +} + +- (void) mTokens { [self doesNotRecognizeSelector:_cmd]; } // abstract, defined in generated source as a starting point for matching +- (id) input +{ + return input; +} + +- (void) setInput: (id) anInput +{ + if (input != anInput) { + [anInput retain]; + [input release]; + input = anInput; + } + [self setToken:nil]; + tokenStartCharIndex = -1; +} + +// this method is used by the code generator to automatically emit tokens from the lexer. +// for now it will always return ANTLRCommonTokens +// use a manual emit: in the grammar to return custom tokens or override this method in your +// lexer +- (void) emit +{ + id aToken = [[ANTLRCommonToken alloc] initWithInput:input + tokenType:_tokenType + channel:_channel + start:tokenStartCharIndex + stop:[self charIndex]-1]; + [aToken setLine:_tokenStartLine]; + [aToken setCharPositionInLine:_tokenCharPositionInLine]; + if (text != nil) + [aToken setText:text]; + [self emit:aToken]; + [aToken release]; +} + +// use this to emit custom tokens from a lexer rule +- (void) emit:(id)aToken +{ + [self setToken:aToken]; +} + +// matching +#pragma mark Matching +- (void) matchString:(NSString *)aString +{ + unsigned int i = 0; + unsigned int stringLength = [aString length]; + while ( i < stringLength ) { + if ((unichar)[input LA:1] != [aString characterAtIndex:i]) { + if (backtracking > 0) { + failed = YES; + return; + } + ANTLRMismatchedTokenException *mte = [ANTLRMismatchedTokenException exceptionWithCharacter:[aString characterAtIndex:i] stream:input]; + [self recover:mte]; + @throw mte; + } + i++; + [input consume]; + failed = NO; + } +} + +- (void) matchAny +{ + [input consume]; +} + +- (void) matchChar:(unichar) aChar +{ + // TODO: -LA: is returning an int because it sometimes is used in the generated parser to compare lookahead with a tokentype. + // try to change all those occurrences to -LT: if possible (i.e. if ANTLR can be made to generate LA only for lexer code) + if ((unichar)[input LA:1] != aChar) { + if (backtracking > 0) { + failed = YES; + return; + } + ANTLRMismatchedTokenException *mte = [ANTLRMismatchedTokenException exceptionWithCharacter:aChar stream:input]; + [self recover:mte]; + @throw mte; + } + [input consume]; + failed = NO; +} + +- (void) matchRangeFromChar:(unichar)fromChar to:(unichar)toChar +{ + unichar charLA = (unichar)[input LA:1]; + if ( charLA < fromChar || charLA > toChar ) { + if (backtracking > 0) { + failed = YES; + return; + } + ANTLRMismatchedRangeException *mre = [ANTLRMismatchedRangeException + exceptionWithRange:NSMakeRange((unsigned int)fromChar,(unsigned int)toChar) + stream:input]; + [self recover:mre]; + @throw mre; + } + [input consume]; + failed = NO; +} + + // info +#pragma mark Informational + +- (unsigned int) line +{ + return [input line]; +} +- (unsigned int) charPositionInLine +{ + return [input charPositionInLine]; +} +- (unsigned int) charIndex +{ + return [input index]; +} +- (NSString *) text +{ + return [input substringWithRange:NSMakeRange(tokenStartCharIndex, [self charIndex]-tokenStartCharIndex)]; +} +- (void) setText:(NSString *) theText +{ + if (theText != text) { + [text release]; + text = [theText retain]; + } +} + + // error handling +- (void) reportError:(ANTLRRecognitionException *)e +{ + NSLog(@"%@", e); +} + +- (void) recover:(ANTLRRecognitionException *)e +{ + [input consume]; +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexerRuleReturnScope.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexerRuleReturnScope.h new file mode 100644 index 0000000..c50cede --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexerRuleReturnScope.h @@ -0,0 +1,42 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import + +@interface ANTLRLexerRuleReturnScope : NSObject { + int start; + int stop; +} + +- (int) start; +- (void) setStart: (int) aStart; + +- (int) stop; +- (void) setStop: (int) aStop; + + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexerRuleReturnScope.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexerRuleReturnScope.m new file mode 100644 index 0000000..3ccf004 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexerRuleReturnScope.m @@ -0,0 +1,60 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRLexerRuleReturnScope.h" + + +@implementation ANTLRLexerRuleReturnScope + +//---------------------------------------------------------- +// start +//---------------------------------------------------------- +- (int) start +{ + return start; +} + +- (void) setStart: (int) aStart +{ + start = aStart; +} + +//---------------------------------------------------------- +// stop +//---------------------------------------------------------- +- (int) stop +{ + return stop; +} + +- (void) setStop: (int) aStop +{ + stop = aStop; +} + + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexerState.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexerState.h new file mode 100644 index 0000000..f87d486 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexerState.h @@ -0,0 +1,65 @@ +// [The "BSD licence"] +// Copyright (c) 2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import +#import + +@interface ANTLRLexerState : ANTLRBaseRecognizerState { + id token; ///< The current token that will be emitted next. + + unsigned int tokenType; ///< The type of the current token. + unsigned int channel; ///< The token channel number to be used for the current token. + unsigned int tokenStartLine; ///< The line number of the first character of the current token appeared in. + unsigned int tokenCharPositionInLine; ///< The character index of the first character of the current token within the current line. + int tokenStartCharIndex; ///< The index of the first character of the current token. Default is -1 for an undefined value. + NSString *text; ///< The text for the current token to be emitted next. If nil, we just refer to the start and stop indices into the character stream. +} + +- (void) reset; + +- (id) token; +- (void) setToken:(id) theToken; + +- (unsigned int) tokenType; +- (void) setTokenType:(unsigned int) theTokenType; + +- (unsigned int) channel; +- (void) setChannel:(unsigned int) theChannel; + +- (unsigned int) tokenStartLine; +- (void) setTokenStartLine:(unsigned int) theTokenStartLine; + +- (unsigned int) tokenCharPositionInLine; +- (void) setTokenCharPositionInLine:(unsigned int) theCharPosition; + +- (int) tokenStartCharIndex; +- (void) setTokenStartCharIndex:(int) theTokenStartCharIndex; + +- (NSString *) text; +- (void) setText:(NSString *) theText; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexerState.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexerState.m new file mode 100644 index 0000000..d388847 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRLexerState.m @@ -0,0 +1,130 @@ +// [The "BSD licence"] +// Copyright (c) 2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRLexerState.h" + + +@implementation ANTLRLexerState + +- (id) init +{ + self = [super init]; + if (self) { + [self reset]; + } + return self; +} + +- (void) reset +{ + [super reset]; + [self setToken:nil]; + tokenType = 0; + channel = 0; + tokenStartLine = 0; + tokenCharPositionInLine = 0; + tokenStartCharIndex = -1; + [self setText:nil]; +} + +- (void) dealloc +{ + [self setText:nil]; + [self setToken:nil]; + [super dealloc]; +} + +- (id) token +{ + return token; +} +- (void) setToken:(id) theToken +{ + if (theToken != token) { + [token release]; + token = [theToken retain]; + } +} + + +- (unsigned int) tokenType +{ + return tokenType; +} +- (void) setTokenType:(unsigned int) theTokenType +{ + tokenType = theTokenType; +} + +- (unsigned int) channel +{ + return channel; +} +- (void) setChannel:(unsigned int) theChannel +{ + channel = theChannel; +} + +- (unsigned int) tokenStartLine +{ + return tokenStartLine; +} +- (void) setTokenStartLine:(unsigned int) theTokenStartLine +{ + tokenStartLine = theTokenStartLine; +} + +- (unsigned int) tokenCharPositionInLine +{ + return tokenCharPositionInLine; +} +- (void) setTokenCharPositionInLine:(unsigned int) theCharPosition +{ + tokenCharPositionInLine = theCharPosition; +} + +- (int) tokenStartCharIndex +{ + return tokenStartCharIndex; +} +- (void) setTokenStartCharIndex:(int) theTokenStartCharIndex +{ + tokenStartCharIndex = theTokenStartCharIndex; +} + +- (NSString *) text +{ + return text; +} +- (void) setText:(NSString *) theText +{ + if (text != theText) { + [text release]; + text = [theText retain]; + } +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedRangeException.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedRangeException.h new file mode 100644 index 0000000..09153fc --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedRangeException.h @@ -0,0 +1,39 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import +@protocol ANTLRIntStream; + + +@interface ANTLRMismatchedRangeException : ANTLRRecognitionException { + NSRange range; +} + ++ (id) exceptionWithRange:(NSRange) aRange stream:(id) theInput; +- (id) initWithRange:(NSRange) aRange stream:(id) theInput; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedRangeException.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedRangeException.m new file mode 100644 index 0000000..0c89e73 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedRangeException.m @@ -0,0 +1,53 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import "ANTLRMismatchedRangeException.h" + + +@implementation ANTLRMismatchedRangeException + ++ (id) exceptionWithRange:(NSRange) aRange stream:(id) theInput +{ + return [[[self alloc] initWithRange:aRange stream:theInput] autorelease]; +} + +- (id) initWithRange:(NSRange) aRange stream:(id) theInput +{ + if (nil != (self = [super initWithStream:theInput])) { + range = aRange; + } + return self; +} + +- (NSString *) description +{ + NSMutableString *desc = (NSMutableString *)[super description]; + [desc appendFormat:@" range:%@", NSStringFromRange(range)]; + return desc; +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedSetException.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedSetException.h new file mode 100644 index 0000000..c73dad9 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedSetException.h @@ -0,0 +1,42 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import +#import + +@interface ANTLRMismatchedSetException : ANTLRRecognitionException { + NSSet *expectedSet; +} + ++ (id) exceptionWithSet:(NSSet *) theExpectedSet stream:(id) theStream; +- (id) initWithSet:(NSSet *) theExpectedSet stream:(id) theStream; + +- (NSSet *) expectedSet; +- (void) setExpectedSet: (NSSet *) anExpectedSet; + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedSetException.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedSetException.m new file mode 100644 index 0000000..44adcbd --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedSetException.m @@ -0,0 +1,77 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRMismatchedSetException.h" + + +@implementation ANTLRMismatchedSetException + ++ (id) exceptionWithSet:(NSSet *) theExpectedSet stream:(id) theStream +{ + return [[[self alloc] initWithSet:theExpectedSet stream:theStream] autorelease]; +} + +- (id) initWithSet:(NSSet *) theExpectedSet stream:(id) theStream +{ + if (nil != (self = [super initWithStream:theStream])) { + [self setExpectedSet:theExpectedSet]; + } + return self; +} + +- (void) dealloc +{ + [self setExpectedSet:nil]; + [super dealloc]; +} + +- (NSString *) description +{ + NSMutableString *desc =(NSMutableString *)[super description]; + [desc appendFormat:@" set:%@", expectedSet]; + return desc; +} + + +//---------------------------------------------------------- +// expectedSet +//---------------------------------------------------------- +- (NSSet *) expectedSet +{ + return expectedSet; +} + +- (void) setExpectedSet: (NSSet *) anExpectedSet +{ + if (expectedSet != anExpectedSet) { + [anExpectedSet retain]; + [expectedSet release]; + expectedSet = anExpectedSet; + } +} + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedTokenException.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedTokenException.h new file mode 100644 index 0000000..baf9340 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedTokenException.h @@ -0,0 +1,43 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import +#import +@protocol ANTLRIntStream; + +@interface ANTLRMismatchedTokenException : ANTLRRecognitionException { + int expecting; + unichar expectingChar; + BOOL isTokenType; +} + ++ (id) exceptionWithTokenType:(int) expectedTokenType stream:(id) input; ++ (id) exceptionWithCharacter:(unichar) expectedCharacter stream:(id) input; +- (id) initWithTokenType:(int) expectedTokenType stream:(id) input; +- (id) initWithCharacter:(unichar) expectedCharacter stream:(id) anInput; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedTokenException.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedTokenException.m new file mode 100644 index 0000000..a5c6fd6 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedTokenException.m @@ -0,0 +1,71 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRMismatchedTokenException.h" + + +@implementation ANTLRMismatchedTokenException + ++ (id) exceptionWithTokenType:(int) expectedTokenType stream:(id) anInput +{ + return [[[self alloc] initWithTokenType:expectedTokenType stream:anInput] autorelease]; +} + ++ (id) exceptionWithCharacter:(unichar) expectedCharacter stream:(id) input +{ + return [[[self alloc] initWithCharacter:expectedCharacter stream:input] autorelease]; +} + +-(id) initWithTokenType:(int) expectedTokenType stream:(id) anInput +{ + if (nil != (self = [super initWithStream:anInput])) { + expecting = expectedTokenType; + isTokenType = YES; + } + return self; +} + +- (id) initWithCharacter:(unichar) expectedCharacter stream:(id) anInput +{ + if (nil != (self = [super initWithStream:anInput])) { + expectingChar = expectedCharacter; + isTokenType = NO; + } + return self; +} + +- (NSString *) description +{ + NSMutableString *desc = (NSMutableString *)[super description]; + if (isTokenType) { + [desc appendFormat:@" expected:%d got:%d", expecting, [self unexpectedType]]; + } else { + [desc appendFormat:@" expected:%c got:%c", expectingChar, (unichar)[self unexpectedType]]; + } + return desc; +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedTreeNodeException.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedTreeNodeException.h new file mode 100644 index 0000000..bc6aecc --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedTreeNodeException.h @@ -0,0 +1,39 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import +@protocol ANTLRIntStream; + +@interface ANTLRMismatchedTreeNodeException : ANTLRRecognitionException { + int expecting; +} + ++ (id) exceptionWithTokenType:(int) expectedTokenType stream:(id) input; +- (id) initWithTokenType:(int) expectedTokenType stream:(id) input; + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedTreeNodeException.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedTreeNodeException.m new file mode 100644 index 0000000..b567e9f --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRMismatchedTreeNodeException.m @@ -0,0 +1,52 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRMismatchedTreeNodeException.h" + + +@implementation ANTLRMismatchedTreeNodeException + ++ (id) exceptionWithTokenType:(int) expectedTokenType stream:(id) anInput +{ + return [[[self alloc] initWithTokenType:expectedTokenType stream:anInput] autorelease]; +} + +-(id) initWithTokenType:(int) expectedTokenType stream:(id) anInput +{ + if (nil != (self = [super initWithStream:anInput])) { + expecting = expectedTokenType; + } + return self; +} + +- (NSString *) description +{ + NSMutableString *desc = (NSMutableString *)[super description]; + [desc appendFormat:@" expected:%d got:%d", expecting, [self unexpectedType]]; + return desc; +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRNoViableAltException.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRNoViableAltException.h new file mode 100644 index 0000000..8cb5849 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRNoViableAltException.h @@ -0,0 +1,43 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import +#import + +@interface ANTLRNoViableAltException : ANTLRRecognitionException { + int decisionNumber; + int stateNumber; +} + ++ (ANTLRNoViableAltException *) exceptionWithDecision:(int)theDecisionNumber state:(int)theStateNumber stream:(id)theStream; +- (ANTLRNoViableAltException *) initWithDecision:(int)theDecisionNumber state:(int)theStateNumber stream:(id)theStream; + +- (void)setDecisionNumber:(int)decisionNumber; +- (void)setStateNumber:(int)stateNumber; + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRNoViableAltException.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRNoViableAltException.m new file mode 100644 index 0000000..1f03712 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRNoViableAltException.m @@ -0,0 +1,83 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import "ANTLRNoViableAltException.h" + + +@implementation ANTLRNoViableAltException + + ++ (ANTLRNoViableAltException *) exceptionWithDecision:(int)theDecisionNumber state:(int)theStateNumber stream:(id)theStream +{ + return [[[self alloc] initWithDecision:theDecisionNumber state:theStateNumber stream:theStream] autorelease]; +} + + +- (ANTLRNoViableAltException *) initWithDecision:(int)theDecisionNumber state:(int)theStateNumber stream:(id)theStream +{ + if (nil!=(self = [super initWithStream:theStream])) { + decisionNumber = theDecisionNumber; + stateNumber = theStateNumber; + } + return self; +} + +- (NSString *) description +{ + NSMutableString *desc = (NSMutableString *)[super description]; + [desc appendFormat:@" decision:%d state:%d", decisionNumber, stateNumber]; + return desc; +} + +//---------------------------------------------------------- +// decisionNumber +//---------------------------------------------------------- +- (int) decisionNumber +{ + return decisionNumber; +} + +- (void) setDecisionNumber: (int) aDecisionNumber +{ + decisionNumber = aDecisionNumber; +} + +//---------------------------------------------------------- +// stateNumber +//---------------------------------------------------------- +- (int) stateNumber +{ + return stateNumber; +} + +- (void) setStateNumber: (int) aStateNumber +{ + stateNumber = aStateNumber; +} + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRParser.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRParser.h new file mode 100644 index 0000000..90a24d7 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRParser.h @@ -0,0 +1,44 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import +#import +#import + +@interface ANTLRParser : ANTLRBaseRecognizer { + id input; +} + +- (id) initWithTokenStream:(id)theStream; + +- (id) input; +- (void) setInput: (id) anInput; + + + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRParser.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRParser.m new file mode 100644 index 0000000..d4db45d --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRParser.m @@ -0,0 +1,64 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRParser.h" + + +@implementation ANTLRParser + +- (id) initWithTokenStream:(id)theStream +{ + if ((self = [super init])) { + [super reset]; + [self setInput:theStream]; + } + return self; +} + +- (void) dealloc +{ + [self setInput:nil]; + [super dealloc]; +} + +//---------------------------------------------------------- +// input +//---------------------------------------------------------- +- (id) input +{ + return input; +} + +- (void) setInput: (id) anInput +{ + if (input != anInput) { + [anInput retain]; + [input release]; + input = anInput; + } +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRParserRuleReturnScope.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRParserRuleReturnScope.h new file mode 100644 index 0000000..14be8ca --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRParserRuleReturnScope.h @@ -0,0 +1,41 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import + +@interface ANTLRParserRuleReturnScope : NSObject { + id start; + id stop; +} + +- (id) start; +- (void) setStart: (id) aStart; + +- (id) stop; +- (void) setStop: (id) aStop; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRParserRuleReturnScope.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRParserRuleReturnScope.m new file mode 100644 index 0000000..0ddff04 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRParserRuleReturnScope.m @@ -0,0 +1,67 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRParserRuleReturnScope.h" + + +@implementation ANTLRParserRuleReturnScope + +- (id) start +{ + return start; +} + +- (void) dealloc +{ + [self setStart:nil]; + [self setStop:nil]; + [super dealloc]; +} + +- (void) setStart: (id) aStart +{ + if (start != aStart) { + [aStart retain]; + [start release]; + start = aStart; + } +} + +- (id) stop +{ + return stop; +} + +- (void) setStop: (id) aStop +{ + if (stop != aStop) { + [aStop retain]; + [stop release]; + stop = aStop; + } +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRecognitionException.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRecognitionException.h new file mode 100644 index 0000000..228944c --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRecognitionException.h @@ -0,0 +1,60 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import +#import +#import +#import +#import +#import +#import + +@interface ANTLRRecognitionException : NSException { + id input; + int index; + id token; + id node; + unichar c; + int line; + int charPositionInLine; +} + ++ (ANTLRRecognitionException *) exceptionWithStream:(id) anInputStream; +- (id) initWithStream:(id)anInputStream; +- (id) initWithStream:(id)anInputStream reason:(NSString *)aReason; +- (int) unexpectedType; + +- (id) stream; +- (void) setStream: (id) aStream; + +- (id) token; +- (void) setToken: (id) aToken; + +- (id) node; +- (void) setNode: (id) aNode; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRecognitionException.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRecognitionException.m new file mode 100644 index 0000000..380f58a --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRecognitionException.m @@ -0,0 +1,155 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRRecognitionException.h" + + +@implementation ANTLRRecognitionException + ++ (ANTLRRecognitionException *) exceptionWithStream:(id) anInputStream +{ + return [[[self alloc] initWithStream:anInputStream] autorelease]; +} + +- (id) initWithStream:(id)anInputStream reason:(NSString *)aReason +{ + if (nil != (self = [super initWithName:NSStringFromClass([self class]) reason:aReason userInfo:nil])) { + [self setStream:anInputStream]; + index = [anInputStream index]; + + Class inputClass = [input class]; + if ([inputClass conformsToProtocol:@protocol(ANTLRTokenStream)]) { + [self setToken:[(id)input LT:1]]; + line = [token line]; + charPositionInLine = [token charPositionInLine]; + } else if ([inputClass conformsToProtocol:@protocol(ANTLRCharStream)]) { + c = (unichar)[input LA:1]; + line = [(id)input line]; + charPositionInLine = [(id)input charPositionInLine]; + } else if ([inputClass conformsToProtocol:@protocol(ANTLRTreeNodeStream)]) { + [self setNode:[(id)input LT:1]]; + line = [node line]; + charPositionInLine = [node charPositionInLine]; + } else { + c = (unichar)[input LA:1]; + } + } + return self; +} + +- (id) initWithStream:(id)anInputStream +{ + if (nil != (self = [self initWithStream:anInputStream reason:@""])) { + } + return self; +} + +- (void) dealloc +{ + [self setStream:nil]; + [self setToken:nil]; + [self setNode:nil]; + [super dealloc]; +} + +- (int) unexpectedType +{ + if (token) { + return [token type]; + } else if (node) { + return [node tokenType]; + } else { + return c; + } +} + +- (NSString *) description +{ + NSMutableString *desc = [[NSMutableString alloc] initWithString:NSStringFromClass([self class])]; + if (token) { + [desc appendFormat:@" token:%@", token]; + } else if (node) { + [desc appendFormat:@" node:%@", node]; + } else { + [desc appendFormat:@" char:%c", c]; + } + [desc appendFormat:@" line:%d position:%d", line, charPositionInLine]; + return [desc autorelease]; +} + +//---------------------------------------------------------- +// input +//---------------------------------------------------------- +- (id) stream +{ + return input; +} + +- (void) setStream: (id) aStream +{ + if (input != aStream) { + [aStream retain]; + [input release]; + input = aStream; + } +} + +//---------------------------------------------------------- +// token +//---------------------------------------------------------- +- (id) token +{ + return token; +} + +- (void) setToken: (id) aToken +{ + if (token != aToken) { + [aToken retain]; + [token release]; + token = aToken; + } +} + +//---------------------------------------------------------- +// node +//---------------------------------------------------------- +- (id) node +{ + return node; +} + +- (void) setNode: (id) aNode +{ + if (node != aNode) { + [aNode retain]; + [node release]; + node = aNode; + } +} + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleElementStream.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleElementStream.h new file mode 100644 index 0000000..f9b02de --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleElementStream.h @@ -0,0 +1,69 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import + +// TODO: this should be separated into stream and enumerator classes +@interface ANTLRRewriteRuleElementStream : NSObject { + @public + int cursor; + BOOL shouldCopyElements; ///< indicates whether the stream should return copies of its elements, set to true after a call to -reset + + BOOL isSingleElement; + union { + id single; + NSMutableArray *multiple; + } elements; + + NSString *elementDescription; + id treeAdaptor; +} + +- (id) initWithTreeAdaptor:(id)aTreeAdaptor description:(NSString *)anElementDescription; +- (id) initWithTreeAdaptor:(id)aTreeAdaptor description:(NSString *)anElementDescription element:(id)anElement; +- (id) initWithTreeAdaptor:(id)aTreeAdaptor description:(NSString *)anElementDescription elements:(NSArray *)theElements; + +- (void) reset; + +- (id) treeAdaptor; +- (void) setTreeAdaptor:(id)aTreeAdaptor; + +- (void) addElement:(id)anElement; +- (unsigned int) count; + +- (BOOL) hasNext; +- (id) next; +- (id) _next; // internal: TODO: redesign if necessary. maybe delegate + +- (id) copyElement:(id)element; +- (id) toTree:(id)element; + +- (NSString *) description; +- (void) setDescription:(NSString *) description; + +@end + diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleElementStream.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleElementStream.m new file mode 100644 index 0000000..0a2e8ed --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleElementStream.m @@ -0,0 +1,187 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRRewriteRuleElementStream.h" + + +@implementation ANTLRRewriteRuleElementStream + +- (id) initWithTreeAdaptor:(id)aTreeAdaptor description:(NSString *)anElementDescription +{ + return [self initWithTreeAdaptor:aTreeAdaptor description:anElementDescription element:nil]; +} + +- (id) initWithTreeAdaptor:(id)aTreeAdaptor description:(NSString *)anElementDescription element:(id)anElement +{ + self = [super init]; + if (self) { + [self setDescription:anElementDescription]; + [self setTreeAdaptor:aTreeAdaptor]; + shouldCopyElements = NO; + isSingleElement = YES; + [self addElement:anElement]; + } + return self; +} + +- (id) initWithTreeAdaptor:(id)aTreeAdaptor description:(NSString *)anElementDescription elements:(NSArray *)theElements +{ + self = [super init]; + if (self) { + [self setDescription:anElementDescription]; + [self setTreeAdaptor:aTreeAdaptor]; + shouldCopyElements = NO; + isSingleElement = NO; + elements.multiple = [[NSMutableArray alloc] initWithArray:theElements]; + } + return self; +} + +- (void) dealloc +{ + if (isSingleElement) + [elements.single release]; + else + [elements.multiple release]; + [self setDescription:nil]; + [self setTreeAdaptor:nil]; + [super dealloc]; +} + +- (void) reset +{ + cursor = 0; + shouldCopyElements = YES; +} + +- (id) treeAdaptor +{ + return treeAdaptor; +} + +- (void) setTreeAdaptor:(id)aTreeAdaptor +{ + if (treeAdaptor != aTreeAdaptor) { + [treeAdaptor release]; + treeAdaptor = [aTreeAdaptor retain]; + } +} + + +- (void) addElement: (id)anElement +{ + if (isSingleElement) { + + if (elements.single == nil) { + elements.single = [anElement retain]; + return; + } + + isSingleElement = NO; + NSMutableArray *newArray = [[NSMutableArray alloc] initWithCapacity:5]; + [newArray addObject:elements.single]; + [elements.single release]; // balance previous retain in initializer/addElement + [newArray addObject:anElement]; + elements.multiple = newArray; + } else { + [elements.multiple addObject:anElement]; + } +} + +- (unsigned int) count +{ + if (isSingleElement && elements.single != nil) + return 1; + if (isSingleElement == NO && elements.multiple != nil) + return [elements.multiple count]; + return 0; +} + + +- (BOOL) hasNext +{ + return (isSingleElement && elements.single != nil && cursor < 1) || + (isSingleElement == NO && elements.multiple != nil && cursor < [elements.multiple count]); +} + +- (id) next +{ + if (shouldCopyElements || (cursor>=[self count] && [self count]==1)) { + id element = [self _next]; + return [[self copyElement:element] autorelease]; + } + id element = [self _next]; + return element; +} + +- (id) _next // internal: TODO: redesign if necessary. maybe delegate +{ + if ([self count] == 0) { + @throw [NSException exceptionWithName:@"RewriteEmptyStreamException" reason:nil userInfo:nil];// TODO: fill in real exception + } + if ( cursor >= [self count] ) { + if ( [self count] == 1 ) { + return [self toTree:elements.single]; // will be dup'ed in -next + } + @throw [NSException exceptionWithName:@"RewriteCardinalityException" reason:nil userInfo:nil];// TODO: fill in real exception + } + if (isSingleElement && elements.single != nil) { + cursor++; + return [self toTree:elements.single]; + } + id el = [elements.multiple objectAtIndex:cursor]; + cursor++; + return [self toTree:el]; +} + +- (id) copyElement:(id)element +{ + [self doesNotRecognizeSelector:_cmd]; // subclass responsibility + return nil; +} + +- (id) toTree:(id)element +{ + return element; +} + + +- (NSString *) description +{ + return elementDescription; +} + +- (void) setDescription:(NSString *) description +{ + if (description != elementDescription) { + [elementDescription release]; + elementDescription = [description retain]; + } +} + + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleSubtreeStream.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleSubtreeStream.h new file mode 100644 index 0000000..205d170 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleSubtreeStream.h @@ -0,0 +1,36 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import "ANTLR/ANTLRRewriteRuleElementStream.h" + +@interface ANTLRRewriteRuleSubtreeStream : ANTLRRewriteRuleElementStream { + +} + +- (id) nextNode; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleSubtreeStream.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleSubtreeStream.m new file mode 100644 index 0000000..1f6a85f --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleSubtreeStream.m @@ -0,0 +1,27 @@ +// +// ANTLRRewriteRuleSubtreeStream.m +// ANTLR +// +// Created by Kay Röpke on 7/16/07. +// Copyright 2007 classDump. All rights reserved. +// + +#import "ANTLRRewriteRuleSubtreeStream.h" + + +@implementation ANTLRRewriteRuleSubtreeStream + +- (id) nextNode +{ + if (shouldCopyElements || (cursor >= [self count] && [self count] == 1)) + return [[treeAdaptor copyNode:[self _next]] autorelease]; + else + return [self _next]; +} + +- (id) copyElement:(id)element +{ + return [treeAdaptor copyTree:element]; +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleTokenStream.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleTokenStream.h new file mode 100644 index 0000000..e73673c --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleTokenStream.h @@ -0,0 +1,35 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import "ANTLR/ANTLRRewriteRuleElementStream.h" + + +@interface ANTLRRewriteRuleTokenStream : ANTLRRewriteRuleElementStream { + +} + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleTokenStream.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleTokenStream.m new file mode 100644 index 0000000..2a755e0 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRRewriteRuleTokenStream.m @@ -0,0 +1,26 @@ +// +// ANTLRRewriteRuleTokenStream.m +// ANTLR +// +// Created by Kay Röpke on 7/16/07. +// Copyright 2007 classDump. All rights reserved. +// + +#import "ANTLRRewriteRuleTokenStream.h" + + +@implementation ANTLRRewriteRuleTokenStream + +- (id) next +{ + return [self _next]; +} + +- (id) toTree:(id)element +{ + return [[treeAdaptor newTreeWithToken:element] autorelease]; +} + + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRStringStream.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRStringStream.h new file mode 100644 index 0000000..2be8bd2 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRStringStream.h @@ -0,0 +1,86 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import +#import + +@interface ANTLRStringStream : NSObject < ANTLRCharStream > { + NSMutableArray *markers; + NSString *data; + + unsigned p; + unsigned line; + unsigned charPositionInLine; + unsigned markDepth; + unsigned lastMarker; +} + +- (id) init; + +// this initializer copies the string +- (id) initWithString:(NSString *) theString; + +// This is the preferred constructor as no data is copied +- (id) initWithStringNoCopy:(NSString *) theString; + +- (void) dealloc; + +// reset the stream's state, but keep the data to feed off +- (void) reset; +// consume one character from the stream +- (void) consume; + +// look ahead i characters +- (int) LA:(int) i; + +// returns the position of the current input symbol +- (unsigned int) index; +// total length of the input data +- (unsigned int) count; + +// seek and rewind in the stream +- (unsigned int) mark; +- (void) rewind; +- (void) rewind:(unsigned int) marker; +- (void) release:(unsigned int) marker; +- (void) seek:(unsigned int) index; + +// provide the streams data (e.g. for tokens using indices) +- (NSString *) substringWithRange:(NSRange) theRange; + +// used for tracking the current position in the input stream +- (unsigned int) line; +- (void) setLine:(unsigned int) theLine; +- (unsigned int) charPositionInLine; +- (void) setCharPositionInLine:(unsigned int) thePos; + +// accessors to the raw data of this stream +- (NSString *) data; +- (void) setData: (NSString *) aData; + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRStringStream.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRStringStream.m new file mode 100644 index 0000000..ee8fa1d --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRStringStream.m @@ -0,0 +1,221 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import "ANTLRStringStream.h" +#import "ANTLRStringStreamState.h" + +@implementation ANTLRStringStream + +- (id) init +{ + if (nil != (self = [super init])) { + markers = [[NSMutableArray alloc] init]; + [self reset]; // rely on internal implementation to reset the state, instead of duplicating here. + } + return self; +} + +- (id) initWithString:(NSString *) theString +{ + if (nil != (self = [self init])) { + [self setData:[theString copy]]; + } + return self; +} + +- (id) initWithStringNoCopy:(NSString *) theString +{ + if (nil != (self = [self init])) { + [self setData:theString]; + } + return self; +} + +- (void) dealloc +{ + [markers release]; + markers = nil; + [self setData:nil]; + [super dealloc]; +} + + +// reset the streams state +// the streams content is not reset! +- (void) reset +{ + p = 0; + line = 1; + charPositionInLine = 0; + markDepth = 0; + [markers removeAllObjects]; + [markers addObject:[NSNull null]]; // ANTLR generates code that assumes markers to be 1-based, + // thus the initial null in the array! +} + +// read one character off the stream, tracking line numbers and character positions +// automatically. +// Override this in subclasses if you want to avoid the overhead of automatic line/pos +// handling. Do not call super in that case. +- (void) consume +{ + if ( p < [data length] ) { + charPositionInLine++; + if ( [data characterAtIndex:p] == '\n' ) { + line++; + charPositionInLine=0; + } + p++; + } +} + +// implement the lookahead method used in lexers +- (int) LA:(int) i +{ + if ( (p+i-1) >= [data length] ) { + return ANTLRCharStreamEOF; + } + return (int)[data characterAtIndex:p+i-1]; +} + +// current input position +- (unsigned int) index +{ + return p; +} + +- (unsigned int) count +{ + return [data length]; +} + +// push the current state of the stream onto a stack +// returns the depth of the stack, to be used as a marker to rewind the stream. +// Note: markers are 1-based! +- (unsigned int) mark +{ + markDepth++; + ANTLRStringStreamState *state = nil; + if ( markDepth >= [markers count] ) { + state = [[ANTLRStringStreamState alloc] init]; + [markers addObject:state]; + [state release]; + } + else { + state = (ANTLRStringStreamState *)[markers objectAtIndex:markDepth]; + } + [state setIndex:p]; + [state setLine:line]; + [state setCharPositionInLine:charPositionInLine]; + lastMarker = markDepth; + return markDepth; +} + +- (void) rewind +{ + [self rewind:lastMarker]; +} + +- (void) rewind:(unsigned int) marker +{ + [self release:marker]; + ANTLRStringStreamState *state = (ANTLRStringStreamState *)[markers objectAtIndex:marker]; + // restore stream state + [self seek:[state index]]; + line = [state line]; + charPositionInLine = [state charPositionInLine]; +} + +// remove stream states on top of 'marker' from the marker stack +// returns the new markDepth of the stack. +// Note: unfortunate naming for Objective-C, but to keep close to the Java target this is named release: +- (void) release:(unsigned int) marker +{ + // unwind any other markers made after marker and release marker + markDepth = marker; + markDepth--; +} + +// when seeking forward we must handle character position and line numbers. +// seeking backward already has the correct line information on the markers stack, +// so we just take it from there. +- (void) seek:(unsigned int) index +{ + if ( index<=p ) { + p = index; // just jump; don't update stream state (line, ...) + return; + } + // seek forward, consume until p hits index + while ( p + +// encapsulates a stream's state, so we can put it into an NSArray. +// No magic is happening here. + +@interface ANTLRStringStreamState : NSObject { + unsigned int index; + unsigned int line; + unsigned int charPositionInLine; +} + +- (unsigned int) index; +- (void) setIndex: (unsigned int) anIndex; + +- (unsigned int) line; +- (void) setLine: (unsigned int) aLine; + +- (unsigned int) charPositionInLine; +- (void) setCharPositionInLine: (unsigned int) aCharPositionInLine; + + + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRStringStreamState.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRStringStreamState.m new file mode 100644 index 0000000..53312ab --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRStringStreamState.m @@ -0,0 +1,73 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import "ANTLRStringStreamState.h" + + +@implementation ANTLRStringStreamState + +//---------------------------------------------------------- +// index +//---------------------------------------------------------- +- (unsigned int) index +{ + return index; +} + +- (void) setIndex: (unsigned int) anIndex +{ + index = anIndex; +} + +//---------------------------------------------------------- +// line +//---------------------------------------------------------- +- (unsigned int) line +{ + return line; +} + +- (void) setLine: (unsigned int) aLine +{ + line = aLine; +} + +//---------------------------------------------------------- +// charPositionInLine +//---------------------------------------------------------- +- (unsigned int) charPositionInLine +{ + return charPositionInLine; +} + +- (void) setCharPositionInLine: (unsigned int) aCharPositionInLine +{ + charPositionInLine = aCharPositionInLine; +} + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRToken+DebuggerSupport.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRToken+DebuggerSupport.h new file mode 100644 index 0000000..03b4cb5 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRToken+DebuggerSupport.h @@ -0,0 +1,17 @@ +// +// ANTLRToken+DebuggerSupport.h +// ANTLR +// +// Created by Kay Röpke on 03.12.2006. +// Copyright 2006 classDump. All rights reserved. +// + +#import +#import +#import + +@interface ANTLRCommonToken(DebuggerSupport) + +- (NSString *)debuggerDescription; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRToken+DebuggerSupport.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRToken+DebuggerSupport.m new file mode 100644 index 0000000..40bee7e --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRToken+DebuggerSupport.m @@ -0,0 +1,38 @@ +// +// ANTLRToken+DebuggerSupport.m +// ANTLR +// +// Created by Kay Röpke on 03.12.2006. +// Copyright 2006 classDump. All rights reserved. +// + +#import "ANTLRToken+DebuggerSupport.h" + + +@implementation ANTLRCommonToken(DebuggerSupport) + +- (NSString *)debuggerDescription +{ + NSString *_text = [self text]; + NSMutableString *escapedText; + if (_text) { + escapedText = [_text mutableCopy]; + NSRange wholeString = NSMakeRange(0,[escapedText length]); + [escapedText replaceOccurrencesOfString:@"%" withString:@"%25" options:0 range:wholeString]; + [escapedText replaceOccurrencesOfString:@"\n" withString:@"%0A" options:0 range:wholeString]; + [escapedText replaceOccurrencesOfString:@"\r" withString:@"%0D" options:0 range:wholeString]; + } else { + escapedText = [NSMutableString stringWithString:@""]; + } + // format is tokenIndex, type, channel, line, col, (escaped)text + return [NSString stringWithFormat:@"%u %d %u %u %u \"%@", + [self tokenIndex], + [self type], + [self channel], + [self line], + [self charPositionInLine], + escapedText + ]; +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRToken.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRToken.h new file mode 100644 index 0000000..110a220 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRToken.h @@ -0,0 +1,77 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import + +typedef enum { + ANTLRTokenTypeEOF = -1, + ANTLRTokenTypeInvalid, + ANTLRTokenTypeEOR, + ANTLRTokenTypeDOWN, + ANTLRTokenTypeUP, + ANTLRTokenTypeMIN +} ANTLRTokenType; + +typedef enum { + ANTLRTokenChannelDefault = 0, + ANTLRTokenChannelHidden = 99 +} ANTLRTokenChannel; + + +@protocol ANTLRToken < NSObject, NSCopying > + +// The singleton eofToken instance. ++ (id) eofToken; +// The default channel for this class of Tokens ++ (ANTLRTokenChannel) defaultChannel; + +// provide hooks to explicitely set the text as opposed to use the indices into the CharStream +- (NSString *) text; +- (void) setText:(NSString *) theText; + +- (int) type; +- (void) setType: (int) aType; + +// ANTLR v3 provides automatic line and position tracking. Subclasses do not need to +// override these, if they do not want to store line/pos tracking information +- (unsigned int) line; +- (void) setLine: (unsigned int) aLine; + +- (unsigned int) charPositionInLine; +- (void) setCharPositionInLine: (unsigned int) aCharPositionInLine; + +// explicitely change the channel this Token is on. The default parser implementation +// just sees the defaultChannel +// Common idiom is to put whitespace tokens on channel 99. +- (unsigned int) channel; +- (void) setChannel: (unsigned int) aChannel; + +// the index of this Token into the TokenStream +- (unsigned int) tokenIndex; +- (void) setTokenIndex: (unsigned int) aTokenIndex; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTokenSource.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTokenSource.h new file mode 100644 index 0000000..1f1c991 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTokenSource.h @@ -0,0 +1,37 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import + +// Anything that responds to -nextToken can be treated as a lexer. +// For instance this can be a flex lexer or a handwritten one or even +// a proxy for a remotely running token source (database, lexer, whatever). +@protocol ANTLRTokenSource + +- (id) nextToken; + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTokenStream.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTokenStream.h new file mode 100644 index 0000000..9d530c0 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTokenStream.h @@ -0,0 +1,50 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import +#import + +@protocol ANTLRTokenStream < ANTLRIntStream > + +// Get Token at current input pointer + i ahead where i=1 is next Token. +// i<0 indicates tokens in the past. So -1 is previous token and -2 is +// two tokens ago. LT:0 is undefined. For i>=n, return Token.EOFToken. +// Return null for LT:0 and any index that results in an absolute address +// that is negative. + +- (id) LT:(int) i; + +- (id) tokenAtIndex:(unsigned int) i; + +- (id) tokenSource; + +- (NSString *) stringValue; +- (NSString *) stringValueWithRange:(NSRange) aRange; +- (NSString *) stringValueFromToken:(id)startToken toToken:(id)stopToken; + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTree.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTree.h new file mode 100644 index 0000000..9642cfd --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTree.h @@ -0,0 +1,108 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +@protocol ANTLRTree < NSObject, NSCopying > + ++ (id) invalidNode; + +- (id) childAtIndex:(unsigned int) index; +- (unsigned int) childCount; + +- (NSArray *) allChildren; +// Add t as a child to this node. If t is null, do nothing. If t +// is nil, add all children of t to this' children. + +- (void) addChild:(id) tree; +- (void) addChildren:(NSArray *) theChildren; +- (void) removeAllChildren; + +// Indicates the node is a nil node but may still have children, meaning +// the tree is a flat list. + +- (BOOL) isEmpty; +- (void) setIsEmpty:(BOOL)emptyFlag; + +#pragma mark Copying +- (id) copyWithZone:(NSZone *)aZone; // the children themselves are not copied here! +- (id) deepCopy; // performs a deepCopyWithZone: with the default zone +- (id) deepCopyWithZone:(NSZone *)aZone; + +#pragma mark Tree Parser support +- (int) tokenType; +- (NSString *) text; +// In case we don't have a token payload, what is the line for errors? +- (int) line; +- (int) charPositionInLine; + +#pragma mark Informational +- (NSString *) treeDescription; +- (NSString *) description; + +@end + + +@interface ANTLRTree : NSObject < ANTLRTree > +{ + NSMutableArray *children; + BOOL isEmptyNode; +} + ++ (id) invalidNode; +- (id) init; + +- (id) childAtIndex:(unsigned int) index; +- (unsigned int) childCount; +- (NSArray *) allChildren; +- (void) removeAllChildren; + + // Add t as a child to this node. If t is null, do nothing. If t + // is nil, add all children of t to this' children. + +- (void) addChild:(id) tree; +- (void) addChildren:(NSArray *) theChildren; + // Indicates the node is a nil node but may still have children, meaning + // the tree is a flat list. + +- (BOOL) isEmpty; +- (void) setIsEmpty:(BOOL)emptyFlag; + +- (id) copyWithZone:(NSZone *)aZone; +- (id) deepCopy; // performs a deepCopyWithZone: with the default zone +- (id) deepCopyWithZone:(NSZone *)aZone; + + // Return a token type; needed for tree parsing +- (int) tokenType; + +- (NSString *) text; + + // In case we don't have a token payload, what is the line for errors? +- (int) line; +- (int) charPositionInLine; + +- (NSString *) treeDescription; +- (NSString *) description; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTree.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTree.m new file mode 100644 index 0000000..b85841b --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTree.m @@ -0,0 +1,209 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRTree.h" +#import "ANTLRToken.h" +// TODO: this shouldn't be here...but needed for invalidNode +#import "ANTLRCommonTree.h" + +@interface ANTLRTree (TreeMaintenance) +- (void) _createChildrenList; +@end + +@implementation ANTLRTree + +#pragma mark ANTLRTree protocol conformance + ++ (id) invalidNode +{ + static id invalidNode = nil; + if (!invalidNode) { + invalidNode = [[ANTLRCommonTree alloc] initWithTokenType:ANTLRTokenTypeInvalid]; + } + return invalidNode; +} + +- (id) init +{ + if ((self = [super init]) != nil) { + isEmptyNode = NO; + children = nil; + } + return self; +} + +- (void) dealloc +{ + [children release]; + children = nil; + [super dealloc]; +} + +- (id) childAtIndex:(unsigned int) index +{ + if (children && index < [children count]) { + return [children objectAtIndex:index]; + } + return nil; +} + +- (unsigned int) childCount +{ + if (children) + return [children count]; + return 0; +} + +- (NSArray *) allChildren +{ + return [[children retain] autorelease]; +} + + // Add tree as a child to this node. If tree is nil, do nothing. If tree + // is an empty node, add all children of tree to our children. + +- (void) addChild:(id) tree +{ + if (!tree) return; + if ([tree isEmpty]) { + // TODO: handle self add + if ([tree childCount]) { + if (!children) + [self _createChildrenList]; + [children addObjectsFromArray:[tree allChildren]]; + } + } else { + if (!children) + [self _createChildrenList]; + [children addObject:tree]; + } +} + +- (void) addChildren:(NSArray *) theChildren +{ + if (!theChildren) return; + if (!children) + [self _createChildrenList]; + [children addObjectsFromArray:theChildren]; +} + +- (void) removeAllChildren +{ + if (children) + [children removeAllObjects]; +} + + // Indicates the node is an empty node but may still have children, meaning + // the tree is a flat list. + +- (BOOL) isEmpty +{ + return isEmptyNode; +} + +- (void) setIsEmpty:(BOOL)emptyFlag +{ + isEmptyNode = emptyFlag; +} + +#pragma mark Copying + +// the children themselves are not copied here! +- (id) copyWithZone:(NSZone *)aZone +{ + id theCopy = [[[self class] alloc] init]; + [theCopy addChildren:[self allChildren]]; + [theCopy setIsEmpty:[self isEmpty]]; + return theCopy; +} + +- (id) deepCopy // performs a deepCopyWithZone: with the default zone +{ + return [self deepCopyWithZone:NULL]; +} + +- (id) deepCopyWithZone:(NSZone *)aZone +{ + id theCopy = [self copyWithZone:aZone]; + + NSArray *childrenCopy = [[theCopy allChildren] copy]; + [theCopy removeAllChildren]; + unsigned int childIdx = 0; + for (childIdx = 0; childIdx < [childrenCopy count]; childIdx++) { + id childCopy = [[childrenCopy objectAtIndex:childIdx] deepCopyWithZone:aZone]; + [theCopy addChild:childCopy]; + } + [childrenCopy release]; + + return theCopy; +} + +#pragma mark ANTLRTree abstract base class + + // Return a token type; needed for tree parsing +- (int) tokenType +{ + return 0; +} + +- (NSString *) text +{ + return [self description]; +} + + // In case we don't have a token payload, what is the line for errors? +- (int) line +{ + return 0; +} + +- (int) charPositionInLine +{ + return 0; +} + +- (NSString *) treeDescription +{ + return @""; +} + +- (NSString *) description +{ + return @""; +} + + +@end + +@implementation ANTLRTree (TreeMaintenance) + +- (void) _createChildrenList +{ + if (!children) + children = [[NSMutableArray alloc] init]; +} + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeAdaptor.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeAdaptor.h new file mode 100644 index 0000000..c78fdc8 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeAdaptor.h @@ -0,0 +1,128 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import + +#import +#pragma warning tree/node diction is broken. +@protocol ANTLRTreeAdaptor + +#pragma mark Construction + +- (id) newTreeWithToken:(id) payload; +- (id) newEmptyTree; + +- (id) copyNode:(id)aNode; // copies just the node +- (id) copyTree:(id)aTree; // copies the entire subtree, recursively + +- (void) addChild:(id)child toTree:(id)aTree; +- (id) makeNode:(id)newRoot parentOf:(id)oldRoot; + +- (id) postProcessTree:(id)aTree; + +- (unsigned int) uniqueIdForTree:(id)aNode; + +#pragma mark Rewrite Rules + +- (id) newTreeWithTokenType:(int)tokenType; +- (id) newTreeWithTokenType:(int)tokenType text:(NSString *)tokenText; +- (id) newTreeWithToken:(id)fromToken tokenType:(int)tokenType; +- (id) newTreeWithToken:(id)fromToken tokenType:(int)tokenType text:(NSString *)tokenText; +- (id) newTreeWithToken:(id)fromToken text:(NSString *)tokenText; + +#pragma mark Content + +- (int) tokenTypeForNode:(id)aNode; +- (void) setTokenType:(int)tokenType forNode:(id)aNode; + +- (NSString *) textForNode:(id)aNode; +- (void) setText:(NSString *)tokenText forNode:(id)aNode; + +- (void) setBoundariesForTree:(id)aTree fromToken:(id)startToken toToken:(id)stopToken; +- (int) tokenStartIndexForTree:(id)aTree; +- (int) tokenStopIndexForTree:(id)aTree; + + +#pragma mark Navigation / Tree Parsing + +- (id) childForNode:(id) aNode atIndex:(int) i; +- (int) childCountForTree:(id) aTree; + +@end + +#pragma mark Abstract Base Class +@interface ANTLRTreeAdaptor : NSObject { +} + +#pragma mark Construction + +- (id) newTreeWithToken:(id) payload; +- (id) newEmptyTree; + +- (id) copyNode:(id)aNode; // copies just the node +- (id) copyTree:(id)aTree; // copies the entire subtree, recursively + +- (void) addChild:(id)child toTree:(id)aTree; +- (id) makeNode:(id)newRoot parentOf:(id)oldRoot; + +- (id) postProcessTree:(id)aTree; + +- (unsigned int) uniqueIdForTree:(id)aNode; + +#pragma mark Rewrite Rules + +- (id) newTreeWithTokenType:(int)tokenType; +- (id) newTreeWithTokenType:(int)tokenType text:(NSString *)tokenText; +- (id) newTreeWithToken:(id)fromToken tokenType:(int)tokenType; +- (id) newTreeWithToken:(id)fromToken tokenType:(int)tokenType text:(NSString *)tokenText; +- (id) newTreeWithToken:(id)fromToken text:(NSString *)tokenText; + +// these are not part of the protocol, but are here for the benefit of ANTLRCommonTreeAdaptor +// only, they are not required for ANTLR trees. simply an implementation detail, leave'em out in your +// custom tree adaptors if you wish. +- (id) newTokenWithToken:(id)fromToken; +- (id) newTokenWithTokenType:(int)tokenType text:(NSString *)tokenText; + +#pragma mark Content + +- (int) tokenTypeForNode:(id)aNode; +- (void) setTokenType:(int)tokenType forNode:(id)aNode; + +- (NSString *) textForNode:(id)aNode; +- (void) setText:(NSString *)tokenText forNode:(id)aNode; + +- (void) setBoundariesForTree:(id)aTree fromToken:(id)startToken toToken:(id)stopToken; +- (int) tokenStartIndexForTree:(id)aTree; +- (int) tokenStopIndexForTree:(id)aTree; + + +#pragma mark Navigation / Tree Parsing + +- (id) childForNode:(id) aNode atIndex:(int) i; +- (int) childCountForTree:(id) aTree; + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeAdaptor.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeAdaptor.m new file mode 100644 index 0000000..7a8672c --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeAdaptor.m @@ -0,0 +1,231 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRTreeAdaptor.h" +#import + +@implementation ANTLRTreeAdaptor + + +- (id) newEmptyTree +{ + return [self newTreeWithToken:nil]; +} + + +- (id) copyNode:(id)aNode +{ + return [aNode copyWithZone:nil]; // not -copy: to silence warnings +} + +- (id) copyTree:(id)aTree +{ + return [aTree deepCopy]; +} + + +- (void) addChild:(id)child toTree:(id)aTree +{ + [aTree addChild:child]; +} + +- (id) makeNode:(id)newRoot parentOf:(id)oldRoot +{ + id newRootNode = newRoot; + + if (oldRoot == nil) + return newRootNode; + // handles ^(nil real-node) case + if ([newRootNode isEmpty]) { + if ([newRootNode childCount] > 1) { +#warning TODO: Find a way to the current input stream here! + @throw [ANTLRTreeException exceptionWithOldRoot:oldRoot newRoot:newRootNode stream:nil]; + } +#warning TODO: double check memory management with respect to code generation + // remove the empty node, placing its sole child in its role. + id tmpRootNode = [[newRootNode childAtIndex:0] retain]; + [newRootNode release]; + newRootNode = tmpRootNode; + } + // the handling of an empty node at the root of oldRoot happens in addChild: + [newRootNode addChild:oldRoot]; + // this release relies on the fact that the ANTLR code generator always assigns the return value of this method + // to the variable originally holding oldRoot. If we don't release we leak the reference. + // FIXME: this is totally non-obvious. maybe do it in calling code by comparing pointers and conditionally releasing + // the old object + [oldRoot release]; + + // what happens to newRootNode's retain count? Should we be autoreleasing this one? Probably. + return [newRootNode retain]; +} + + +- (id) postProcessTree:(id)aTree +{ + id processedNode = aTree; + if (aTree != nil && [aTree isEmpty] != NO && [aTree childCount] == 1) { + processedNode = [aTree childAtIndex:0]; + } + return processedNode; +} + + +- (unsigned int) uniqueIdForTree:(id)aNode +{ + // TODO: is hash appropriate here? + return [aNode hash]; +} + + +#pragma mark Rewrite Rules + +- (id) newTreeWithTokenType:(int)tokenType +{ + id newToken = [self newTokenWithTokenType:tokenType text:nil]; + + id newTree = [self newTreeWithToken:newToken]; + [newToken release]; + return newTree; +} + +- (id) newTreeWithTokenType:(int)tokenType text:(NSString *)tokenText +{ + id newToken = [self newTokenWithTokenType:tokenType text:tokenText]; + + id newTree = [self newTreeWithToken:newToken]; + [newToken release]; + return newTree; +} + +- (id) newTreeWithToken:(id)fromToken tokenType:(int)tokenType +{ + id newToken = [self newTokenWithToken:fromToken]; + [newToken setType:tokenType]; + + id newTree = [self newTreeWithToken:newToken]; + [newToken release]; + return newTree; +} + +- (id) newTreeWithToken:(id)fromToken tokenType:(int)tokenType text:(NSString *)tokenText +{ + id newToken = [self newTokenWithToken:fromToken]; + [newToken setType:tokenType]; + [newToken setText:tokenText]; + + id newTree = [self newTreeWithToken:newToken]; + [newToken release]; + return newTree; +} + +- (id) newTreeWithToken:(id)fromToken text:(NSString *)tokenText +{ + id newToken = [self newTokenWithToken:fromToken]; + [newToken setText:tokenText]; + + id newTree = [self newTreeWithToken:newToken]; + [newToken release]; + return newTree; +} + + +#pragma mark Content + +- (int) tokenTypeForNode:(id)aNode +{ + return [aNode tokenType]; +} + +- (void) setTokenType:(int)tokenType forNode:(id)aNode +{ + // currently unimplemented +} + + +- (NSString *) textForNode:(id)aNode +{ + return [aNode text]; +} + +- (void) setText:(NSString *)tokenText forNode:(id)aNode +{ + // currently unimplemented +} + + +#pragma mark Navigation / Tree Parsing + +- (id) childForNode:(id) aNode atIndex:(int) i +{ + // currently unimplemented + return nil; +} + +- (int) childCountForTree:(id) aTree +{ + // currently unimplemented + return 0; +} + +#pragma mark Subclass Responsibilties + +- (id) newTreeWithToken:(id) payload +{ + // subclass responsibility + return nil; +} + +- (id) newTokenWithToken:(id)fromToken +{ + // subclass responsibility + return nil; +} + +- (id) newTokenWithTokenType:(int)tokenType text:(NSString *)tokenText +{ + // subclass responsibility + return nil; +} + +- (void) setBoundariesForTree:(id)aTree fromToken:(id)startToken toToken:(id)stopToken +{ + // subclass responsibility +} + +- (int) tokenStartIndexForTree:(id)aTree +{ + // subclass responsibility + return 0; +} + +- (int) tokenStopIndexForTree:(id)aTree +{ + // subclass responsibility + return 0; +} + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeException.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeException.h new file mode 100644 index 0000000..5d6e72e --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeException.h @@ -0,0 +1,42 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import +#import + +@interface ANTLRTreeException : ANTLRRecognitionException { + id oldRoot; + id newRoot; +} + ++ (id) exceptionWithOldRoot:(id)theOldRoot newRoot:(id)theNewRoot stream:(id)aStream; +- (id) initWithOldRoot:(id)theOldRoot newRoot:(id)theNewRoot stream:(id)aStream; + +- (void) setOldRoot:(id)aTree; +- (void) setNewRoot:(id)aTree; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeException.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeException.m new file mode 100644 index 0000000..9d86ea4 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeException.m @@ -0,0 +1,58 @@ +// +// ANTLRTreeException.m +// ANTLR +// +// Created by Kay Röpke on 24.10.2006. +// Copyright 2006 classDump. All rights reserved. +// + +#import "ANTLRTreeException.h" + + +@implementation ANTLRTreeException + ++ (id) exceptionWithOldRoot:(id)theOldRoot newRoot:(id)theNewRoot stream:(id)aStream; +{ + return [[ANTLRTreeException alloc] initWithOldRoot:theOldRoot newRoot:theNewRoot stream:aStream]; +} + +- (id) initWithOldRoot:(id)theOldRoot newRoot:(id)theNewRoot stream:(id)aStream; +{ + if ((self = [super initWithStream:aStream reason:@"The new root has more than one child. Cannot make it the root node."])) { + [self setOldRoot:theOldRoot]; + [self setNewRoot:theNewRoot]; + } + return self; +} + +- (void) dealloc +{ + [self setOldRoot:nil]; + [self setNewRoot:nil]; + [super dealloc]; +} + +- (void) setNewRoot:(id)aTree +{ + if (newRoot != aTree) { + [aTree retain]; + [newRoot release]; + newRoot = aTree; + } +} + +- (void) setOldRoot:(id)aTree +{ + if (oldRoot != aTree) { + [aTree retain]; + [oldRoot release]; + oldRoot = aTree; + } +} + +- (NSString *) description +{ + return [NSMutableString stringWithFormat:@"%@ old root: <%@> new root: <%@>", [super description], [oldRoot treeDescription], [newRoot treeDescription]]; +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeNodeStream.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeNodeStream.h new file mode 100644 index 0000000..7022448 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeNodeStream.h @@ -0,0 +1,52 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import +#import +#import +#import +#import +#import + +@protocol ANTLRTreeNodeStream < ANTLRIntStream > + +- (id) initWithTree:(ANTLRCommonTree *)theTree; +- (id) initWithTree:(ANTLRCommonTree *)theTree treeAdaptor:(ANTLRCommonTreeAdaptor *)theAdaptor; + +- (id) LT:(int)k; +- (id) treeSource; +- (id) treeAdaptor; +- (id) tokenStream; +- (void) setUsesUniqueNavigationNodes:(BOOL)flag; + +- (id) nodeAtIndex:(unsigned int) idx; + +- (NSString *) stringValue; +- (NSString *) stringValueWithRange:(NSRange) aRange; +- (NSString *) stringValueFromNode:(id)startNode toNode:(id)stopNode; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeParser.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeParser.h new file mode 100644 index 0000000..77bbf64 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeParser.h @@ -0,0 +1,45 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import +#import +#import + +@interface ANTLRTreeParser : ANTLRBaseRecognizer { + id input; +} + +- (id) initWithTreeNodeStream:(id)theInput; + +- (id) input; +- (void) setInput: (id) anInput; + + + + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeParser.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeParser.m new file mode 100644 index 0000000..41906d1 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeParser.m @@ -0,0 +1,68 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRTreeParser.h" + + +@implementation ANTLRTreeParser + +- (id) initWithTreeNodeStream:(id)theInput +{ + if ((self = [super init]) != nil) { + [self setInput:theInput]; + } + return self; +} + +- (void) dealloc +{ + [self setInput:nil]; + [super dealloc]; +} + +- (void) mismatch:(id)aStream tokenType:(int)aTType follow:(ANTLRBitSet *)aBitset +{ + ANTLRMismatchedTreeNodeException *mte = [ANTLRMismatchedTreeNodeException exceptionWithTokenType:aTType stream:aStream]; + [mte setNode:[((id)aStream) LT:1]]; + [self recoverFromMismatchedToken:aStream exception:mte tokenType:aTType follow:aBitset]; +} + +- (id) input +{ + return input; +} + +- (void) setInput: (id) anInput +{ + if (input != anInput) { + [anInput retain]; + [input release]; + input = anInput; + } +} + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeParserRuleReturnScope.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeParserRuleReturnScope.h new file mode 100644 index 0000000..7b44409 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeParserRuleReturnScope.h @@ -0,0 +1,37 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import + + +@interface ANTLRTreeParserRuleReturnScope : NSObject { + id start; +} + +- (id) start; +- (void) setStart: (id) aStart; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeParserRuleReturnScope.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeParserRuleReturnScope.m new file mode 100644 index 0000000..355cd22 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRTreeParserRuleReturnScope.m @@ -0,0 +1,52 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRTreeParserRuleReturnScope.h" + + +@implementation ANTLRTreeParserRuleReturnScope + +- (id) start +{ + return start; +} + +- (void) dealloc +{ + [self setStart:nil]; + [super dealloc]; +} + +- (void) setStart: (id) aStart +{ + if (start != aStart) { + [aStart retain]; + [start release]; + start = aStart; + } +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRUnbufferedCommonTreeNodeStream.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRUnbufferedCommonTreeNodeStream.h new file mode 100644 index 0000000..deb80a4 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRUnbufferedCommonTreeNodeStream.h @@ -0,0 +1,108 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import +#import +#import +#import +#import + +@interface ANTLRUnbufferedCommonTreeNodeStream : NSObject < ANTLRTreeNodeStream > { + + BOOL shouldUseUniqueNavigationNodes; + + ANTLRCommonTree *root; + ANTLRCommonTree *currentNode; + ANTLRCommonTree *previousNode; + + ANTLRCommonTreeAdaptor *treeAdaptor; + + ANTLRCommonTokenStream *tokenStream; + + NSMutableArray *nodeStack; + NSMutableArray *indexStack; + NSMutableArray *markers; + int lastMarker; + + int currentChildIndex; + int absoluteNodeIndex; + + NSMutableArray *lookahead; + unsigned int head; + unsigned int tail; +} + +- (id) initWithTree:(ANTLRCommonTree *)theTree; +- (id) initWithTree:(ANTLRCommonTree *)theTree treeAdaptor:(ANTLRCommonTreeAdaptor *)theAdaptor; + +- (void) reset; + +#pragma mark ANTLRTreeNodeStream conformance + +- (id) LT:(int)k; +- (id) treeSource; +- (id) treeAdaptor; +- (id) tokenStream; +- (void) setTokenStream:(id) aTokenStream; ///< Added by subclass, not in protocol +- (void) setUsesUniqueNavigationNodes:(BOOL)flag; + +- (id) nodeAtIndex:(unsigned int) idx; + +- (NSString *) stringValue; +- (NSString *) stringValueWithRange:(NSRange) aRange; +- (NSString *) stringValueFromNode:(id)startNode toNode:(id)stopNode; + +#pragma mark ANTLRIntStream conformance +- (void) consume; +- (int) LA:(unsigned int) i; +- (unsigned int) mark; +- (unsigned int) index; +- (void) rewind:(unsigned int) marker; +- (void) rewind; +- (void) release:(unsigned int) marker; +- (void) seek:(unsigned int) index; +- (unsigned int) count; + +#pragma mark Lookahead Handling +- (void) addLookahead:(id)aNode; +- (unsigned int) lookaheadSize; +- (void) fillBufferWithLookahead:(int)k; +- (id) nextObject; + +#pragma mark Node visiting +- (ANTLRCommonTree *) handleRootNode; +- (ANTLRCommonTree *) visitChild:(int)childNumber; +- (void) walkBackToMostRecentNodeWithUnvisitedChildren; +- (void) addNavigationNodeWithType:(int)tokenType; + +#pragma mark Accessors +- (ANTLRCommonTree *) root; +- (void) setRoot: (ANTLRCommonTree *) aRoot; + +- (void) setTreeAdaptor: (ANTLRCommonTreeAdaptor *) aTreeAdaptor; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRUnbufferedCommonTreeNodeStream.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRUnbufferedCommonTreeNodeStream.m new file mode 100644 index 0000000..cdd563d --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRUnbufferedCommonTreeNodeStream.m @@ -0,0 +1,462 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import "ANTLRUnbufferedCommonTreeNodeStream.h" +#import "ANTLRUnbufferedCommonTreeNodeStreamState.h" +#import "ANTLRTree.h" +#import "ANTLRToken.h" + +@interface ANTLRTreeNavigationNode : ANTLRTree { +} +- (id) copyWithZone:(NSZone *)aZone; +@end +@interface ANTLRTreeNavigationNodeDown : ANTLRTreeNavigationNode { +} +- (int) tokenType; +- (NSString *) description; +@end +@interface ANTLRTreeNavigationNodeUp : ANTLRTreeNavigationNode { +} +- (int) tokenType; +- (NSString *) description; +@end +@interface ANTLRTreeNavigationNodeEOF : ANTLRTreeNavigationNode { +} +- (int) tokenType; +- (NSString *) description; +@end + +#pragma mark - + +static ANTLRTreeNavigationNodeDown *downNavigationNode; +static ANTLRTreeNavigationNodeUp *upNavigationNode; +static ANTLRTreeNavigationNodeEOF *eofNavigationNode; + +#define INITIAL_LOOKAHEAD_BUFFER_SIZE 5 +@implementation ANTLRUnbufferedCommonTreeNodeStream + ++ (void) initialize +{ + downNavigationNode = [[ANTLRTreeNavigationNodeDown alloc] init]; + upNavigationNode = [[ANTLRTreeNavigationNodeUp alloc] init]; + eofNavigationNode = [[ANTLRTreeNavigationNodeEOF alloc] init]; +} + +- (id) initWithTree:(ANTLRCommonTree *)theTree; +{ + return [self initWithTree:theTree treeAdaptor:nil]; +} + +- (id) initWithTree:(ANTLRCommonTree *)theTree treeAdaptor:(ANTLRCommonTreeAdaptor *)theAdaptor; +{ + if ((self = [super init]) != nil) { + [self setRoot:theTree]; + if (!theAdaptor) + [self setTreeAdaptor:[[[ANTLRCommonTreeAdaptor alloc] init] autorelease]]; + else + [self setTreeAdaptor:theAdaptor]; + nodeStack = [[NSMutableArray alloc] init]; + indexStack = [[NSMutableArray alloc] init]; + markers = [[NSMutableArray alloc] initWithObjects:[NSNull null], nil]; // markers is one based - maybe fix this later + lookahead = [[NSMutableArray alloc] initWithCapacity:INITIAL_LOOKAHEAD_BUFFER_SIZE]; // lookahead is filled with [NSNull null] in -reset + [self reset]; + } + return self; +} + +- (void) dealloc +{ + [self setRoot:nil]; + [self setTreeAdaptor:nil]; + + [nodeStack release]; nodeStack = nil; + [indexStack release]; indexStack = nil; + [markers release]; markers = nil; + [lookahead release]; lookahead = nil; + + [super dealloc]; +} + +- (void) reset; +{ + currentNode = root; + previousNode = nil; + currentChildIndex = -1; + absoluteNodeIndex = -1; + head = tail = 0; + [nodeStack removeAllObjects]; + [indexStack removeAllObjects]; + [markers removeAllObjects]; + [markers addObject:[NSNull null]]; // markers are 1-based. + [lookahead removeAllObjects]; + // TODO: this is not ideal, but works for now. optimize later + int i; + for (i = 0; i < INITIAL_LOOKAHEAD_BUFFER_SIZE; i++) + [lookahead addObject:[NSNull null]]; +} + + +#pragma mark ANTLRTreeNodeStream conformance + +- (id) LT:(int)k; +{ + if (k == -1) + return previousNode; + if (k < 0) + @throw [NSException exceptionWithName:@"ANTLRTreeException" reason:@"-LT: looking back more than one node unsupported for unbuffered streams" userInfo:nil]; + if (k == 0) + return [ANTLRTree invalidNode]; + [self fillBufferWithLookahead:k]; + return [lookahead objectAtIndex:(head+k-1) % [lookahead count]]; +} + +- (id) treeSource; +{ + return [self root]; +} + +- (id) treeAdaptor; +{ + return treeAdaptor; +} + +- (id) tokenStream; +{ + return tokenStream; +} + +- (void) setUsesUniqueNavigationNodes:(BOOL)flag; +{ + shouldUseUniqueNavigationNodes = flag; +} + +- (id) nodeAtIndex:(unsigned int) idx; +{ + @throw [NSException exceptionWithName:@"ANTLRTreeException" reason:@"-nodeAtIndex: unsupported for unbuffered streams" userInfo:nil]; +} + +- (NSString *) stringValue; +{ + @throw [NSException exceptionWithName:@"ANTLRTreeException" reason:@"-stringValue unsupported for unbuffered streams" userInfo:nil]; +} + +- (NSString *) stringValueWithRange:(NSRange) aRange; +{ + @throw [NSException exceptionWithName:@"ANTLRTreeException" reason:@"-stringValue: unsupported for unbuffered streams" userInfo:nil]; +} + +- (NSString *) stringValueFromNode:(id)startNode toNode:(id)stopNode; +{ + @throw [NSException exceptionWithName:@"ANTLRTreeException" reason:@"-stringValueFromNode:toNode: unsupported for unbuffered streams" userInfo:nil]; +} + +#pragma mark ANTLRIntStream conformance + +- (void) consume; +{ + [self fillBufferWithLookahead:1]; + absoluteNodeIndex++; + previousNode = [lookahead objectAtIndex:head]; + head = (head+1) % [lookahead count]; +} + +- (int) LA:(unsigned int) i; +{ + ANTLRCommonTree *node = [self LT:i]; + if (!node) + return ANTLRTokenTypeInvalid; + int ttype = [node tokenType]; + return ttype; +} + +- (unsigned int) mark; +{ + ANTLRUnbufferedCommonTreeNodeStreamState *state = [[ANTLRUnbufferedCommonTreeNodeStreamState alloc] init]; + [state setCurrentNode:currentNode]; + [state setPreviousNode:previousNode]; + [state setIndexStackSize:[indexStack count]]; + [state setNodeStackSize:[nodeStack count]]; + [state setCurrentChildIndex:currentChildIndex]; + [state setAbsoluteNodeIndex:absoluteNodeIndex]; + unsigned int lookaheadSize = [self lookaheadSize]; + unsigned int k; + for ( k = 1; k <= lookaheadSize; k++) { + [state addToLookahead:[self LT:k]]; + } + [markers addObject:state]; + [state release]; + return [markers count]; +} + +- (unsigned int) index; +{ + return absoluteNodeIndex + 1; +} + +- (void) rewind:(unsigned int) marker; +{ + if ( [markers count] < marker ) { + return; + } + ANTLRUnbufferedCommonTreeNodeStreamState *state = [[markers objectAtIndex:marker-1] retain]; + [markers removeObjectAtIndex:marker-1]; + + absoluteNodeIndex = [state absoluteNodeIndex]; + currentChildIndex = [state currentChildIndex]; + currentNode = [state currentNode]; + previousNode = [state previousNode]; + // drop node and index stacks back to old size + [nodeStack removeObjectsInRange:NSMakeRange([state nodeStackSize], [nodeStack count]-[state nodeStackSize])]; + [indexStack removeObjectsInRange:NSMakeRange([state indexStackSize], [indexStack count]-[state indexStackSize])]; + + head = tail = 0; // wack lookahead buffer and then refill + [lookahead release]; + lookahead = [[NSMutableArray alloc] initWithArray:[state lookahead]]; + tail = [lookahead count]; + // make some room after the restored lookahead, so that the above line is not a bug ;) + // this also ensures that a subsequent -addLookahead: will not immediately need to resize the buffer + [lookahead addObjectsFromArray:[NSArray arrayWithObjects:[NSNull null], [NSNull null], [NSNull null], [NSNull null], [NSNull null], nil]]; +} + +- (void) rewind +{ + [self rewind:[markers count]]; +} + +- (void) release:(unsigned int) marker; +{ + @throw [NSException exceptionWithName:@"ANTLRTreeException" reason:@"-release: unsupported for unbuffered streams" userInfo:nil]; +} + +- (void) seek:(unsigned int) index; +{ + if ( index < [self index] ) + @throw [NSException exceptionWithName:@"ANTLRTreeException" reason:@"-seek: backwards unsupported for unbuffered streams" userInfo:nil]; + while ( [self index] < index ) { + [self consume]; + } +} + +- (unsigned int) count; +{ + return absoluteNodeIndex + 1; // not entirely correct, but cheap. +} + + +#pragma mark Lookahead Handling +- (void) addLookahead:(id)aNode; +{ + [lookahead replaceObjectAtIndex:tail withObject:aNode]; + tail = (tail+1) % [lookahead count]; + + if ( tail == head ) { + NSMutableArray *newLookahead = [[NSMutableArray alloc] initWithCapacity:[lookahead count]*2]; + + NSRange headRange = NSMakeRange(head, [lookahead count]-head); + NSRange tailRange = NSMakeRange(0, tail); + + [newLookahead addObjectsFromArray:[lookahead objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:headRange]]]; + [newLookahead addObjectsFromArray:[lookahead objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:tailRange]]]; + + unsigned int i; + unsigned int lookaheadCount = [newLookahead count]; + for (i = 0; i < lookaheadCount; i++) + [newLookahead addObject:[NSNull null]]; + [lookahead release]; + lookahead = newLookahead; + + head = 0; + tail = lookaheadCount; // tail is the location the _next_ lookahead node will end up in, not the last element's idx itself! + } + +} + +- (unsigned int) lookaheadSize; +{ + return tail < head + ? ([lookahead count] - head + tail) + : (tail - head); +} + +- (void) fillBufferWithLookahead:(int)k; +{ + unsigned int n = [self lookaheadSize]; + unsigned int i; + id lookaheadObject = self; // any valid object would do. + for (i=1; i <= k-n && lookaheadObject != nil; i++) { + lookaheadObject = [self nextObject]; + } +} + +- (id) nextObject +{ + // NOTE: this could/should go into an NSEnumerator subclass for treenode streams. + if (currentNode == nil) { + [self addLookahead:eofNavigationNode]; + return nil; + } + if (currentChildIndex == -1) { + return [self handleRootNode]; + } + if (currentChildIndex < (int)[currentNode childCount]) { + return [self visitChild:currentChildIndex]; + } + [self walkBackToMostRecentNodeWithUnvisitedChildren]; + if (currentNode != nil) { + return [self visitChild:currentChildIndex]; + } + + return nil; +} + +#pragma mark Node visiting +- (ANTLRCommonTree *) handleRootNode; +{ + ANTLRCommonTree *node = currentNode; + currentChildIndex = 0; + if ([node isEmpty]) { + node = [self visitChild:currentChildIndex]; + } else { + [self addLookahead:node]; + if ([currentNode childCount] == 0) { + currentNode = nil; + } + } + return node; +} + +- (ANTLRCommonTree *) visitChild:(int)childNumber; +{ + ANTLRCommonTree *node = nil; + + [nodeStack addObject:currentNode]; + [indexStack addObject:[NSNumber numberWithInt:childNumber]]; + if (childNumber == 0 && ![currentNode isEmpty]) + [self addNavigationNodeWithType:ANTLRTokenTypeDOWN]; + + currentNode = [currentNode childAtIndex:childNumber]; + currentChildIndex = 0; + node = currentNode; // record node to return + [self addLookahead:node]; + [self walkBackToMostRecentNodeWithUnvisitedChildren]; + return node; +} + +- (void) walkBackToMostRecentNodeWithUnvisitedChildren; +{ + while (currentNode != nil && currentChildIndex >= (int)[currentNode childCount]) + { + currentNode = (ANTLRCommonTree *)[nodeStack lastObject]; + [nodeStack removeLastObject]; + currentChildIndex = [(NSNumber *)[indexStack lastObject] intValue]; + [indexStack removeLastObject]; + currentChildIndex++; // move to next child + if (currentChildIndex >= (int)[currentNode childCount]) { + if (![currentNode isEmpty]) { + [self addNavigationNodeWithType:ANTLRTokenTypeUP]; + } + if (currentNode == root) { // we done yet? + currentNode = nil; + } + } + } + +} + +- (void) addNavigationNodeWithType:(int)tokenType; +{ + // TODO: this currently ignores shouldUseUniqueNavigationNodes. + switch (tokenType) { + case ANTLRTokenTypeDOWN: { + [self addLookahead:downNavigationNode]; + break; + } + case ANTLRTokenTypeUP: { + [self addLookahead:upNavigationNode]; + break; + } + } +} + +#pragma mark Accessors +- (ANTLRCommonTree *) root +{ + return root; +} + +- (void) setRoot: (ANTLRCommonTree *) aRoot +{ + if (root != aRoot) { + [aRoot retain]; + [root release]; + root = aRoot; + } +} + +- (void) setTreeAdaptor: (ANTLRCommonTreeAdaptor *) aTreeAdaptor +{ + if (treeAdaptor != aTreeAdaptor) { + [aTreeAdaptor retain]; + [treeAdaptor release]; + treeAdaptor = aTreeAdaptor; + } +} + +- (void) setTokenStream:(id) aTokenStream; +{ + if (tokenStream != aTokenStream) { + [tokenStream release]; + tokenStream = [aTokenStream retain]; + } +} + +@end + +#pragma mark - + +@implementation ANTLRTreeNavigationNode +- (id) copyWithZone:(NSZone *)aZone +{ + return nil; +} +@end + +@implementation ANTLRTreeNavigationNodeDown +- (int) tokenType { return ANTLRTokenTypeDOWN; } +- (NSString *) description { return @"DOWN"; } +@end + +@implementation ANTLRTreeNavigationNodeUp +- (int) tokenType { return ANTLRTokenTypeUP; } +- (NSString *) description { return @"UP"; } +@end + +@implementation ANTLRTreeNavigationNodeEOF +- (int) tokenType { return ANTLRTokenTypeEOF; } +- (NSString *) description { return @"EOF"; } +@end + diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRUnbufferedCommonTreeNodeStreamState.h b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRUnbufferedCommonTreeNodeStreamState.h new file mode 100644 index 0000000..3965700 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRUnbufferedCommonTreeNodeStreamState.h @@ -0,0 +1,66 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import + +@interface ANTLRUnbufferedCommonTreeNodeStreamState : NSObject { + ANTLRCommonTree *currentNode; + ANTLRCommonTree *previousNode; + + int currentChildIndex; + int absoluteNodeIndex; + unsigned int nodeStackSize; + unsigned int indexStackSize; + + NSMutableArray *lookahead; +} + +- (ANTLRCommonTree *) currentNode; +- (void) setCurrentNode: (ANTLRCommonTree *) aCurrentNode; + +- (ANTLRCommonTree *) previousNode; +- (void) setPreviousNode: (ANTLRCommonTree *) aPreviousNode; + +- (int) currentChildIndex; +- (void) setCurrentChildIndex: (int) aCurrentChildIndex; + +- (int) absoluteNodeIndex; +- (void) setAbsoluteNodeIndex: (int) anAbsoluteNodeIndex; + +- (unsigned int) nodeStackSize; +- (void) setNodeStackSize: (unsigned int) aNodeStackSize; + +- (unsigned int) indexStackSize; +- (void) setIndexStackSize: (unsigned int) anIndexStackSize; + +- (NSMutableArray *) lookahead; +- (void) setLookahead: (NSMutableArray *) aLookahead; + +- (void) addToLookahead: (id)lookaheadObject; +- (void) removeFromLookahead: (id)lookaheadObject; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLRUnbufferedCommonTreeNodeStreamState.m b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRUnbufferedCommonTreeNodeStreamState.m new file mode 100644 index 0000000..0e9f9d7 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLRUnbufferedCommonTreeNodeStreamState.m @@ -0,0 +1,140 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRUnbufferedCommonTreeNodeStreamState.h" + + +@implementation ANTLRUnbufferedCommonTreeNodeStreamState + +- (id) init +{ + if ((self = [super init]) != nil) { + lookahead = [[NSMutableArray alloc] init]; + } + return self; +} + +- (void) dealloc +{ + [self setLookahead:nil]; + [self setCurrentNode:nil]; + [self setPreviousNode:nil]; + [super dealloc]; +} + +- (ANTLRCommonTree *) currentNode +{ + return currentNode; +} + +- (void) setCurrentNode: (ANTLRCommonTree *) aCurrentNode +{ + if (currentNode != aCurrentNode) { + [aCurrentNode retain]; + [currentNode release]; + currentNode = aCurrentNode; + } +} + +- (ANTLRCommonTree *) previousNode +{ + return previousNode; +} + +- (void) setPreviousNode: (ANTLRCommonTree *) aPreviousNode +{ + if (previousNode != aPreviousNode) { + [aPreviousNode retain]; + [previousNode release]; + previousNode = aPreviousNode; + } +} + +- (int) currentChildIndex +{ + return currentChildIndex; +} + +- (void) setCurrentChildIndex: (int) aCurrentChildIndex +{ + currentChildIndex = aCurrentChildIndex; +} + +- (int) absoluteNodeIndex +{ + return absoluteNodeIndex; +} + +- (void) setAbsoluteNodeIndex: (int) anAbsoluteNodeIndex +{ + absoluteNodeIndex = anAbsoluteNodeIndex; +} + +- (unsigned int) nodeStackSize +{ + return nodeStackSize; +} + +- (void) setNodeStackSize: (unsigned int) aNodeStackSize +{ + nodeStackSize = aNodeStackSize; +} + +- (unsigned int) indexStackSize +{ + return indexStackSize; +} + +- (void) setIndexStackSize: (unsigned int) anIndexStackSize +{ + indexStackSize = anIndexStackSize; +} + +- (NSMutableArray *) lookahead +{ + return lookahead; +} + +- (void) setLookahead: (NSMutableArray *) aLookahead +{ + if (lookahead != aLookahead) { + [aLookahead retain]; + [lookahead release]; + lookahead = aLookahead; + } +} + +- (void) addToLookahead: (id)lookaheadObject +{ + [[self lookahead] addObject: lookaheadObject]; +} +- (void) removeFromLookahead: (id)lookaheadObject +{ + [[self lookahead] removeObject: lookaheadObject]; +} + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/ANTLR_Prefix.pch b/antlr-3.1.3/runtime/ObjC/Framework/ANTLR_Prefix.pch new file mode 100644 index 0000000..bca122c --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/ANTLR_Prefix.pch @@ -0,0 +1,29 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifdef __OBJC__ + #import +#endif diff --git a/antlr-3.1.3/runtime/ObjC/Framework/CHANGES.txt b/antlr-3.1.3/runtime/ObjC/Framework/CHANGES.txt new file mode 100644 index 0000000..e4273aa --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/CHANGES.txt @@ -0,0 +1,15 @@ +ANTLRv3 Objective C Framework + +Kay Roepke + +CHANGES + +December 16, 2007 + +* Text of imaginary nodes in tree rewrite mode weren't using NSStrings causing a runtime exception + +* Add currently empty ANTLRCommonTreeNodeStream class, which will be buffering tree nodes + +* Add ANTLRUnbufferedCommonTreeNodeStreamState.h to ANTLR.h umbrella include file + +* Meta change: there now is a CHANGES.txt \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/English.lproj/InfoPlist.strings b/antlr-3.1.3/runtime/ObjC/Framework/English.lproj/InfoPlist.strings new file mode 100644 index 0000000000000000000000000000000000000000..0b32e1901d69b0e0802dccc35822ba7bf738ec64 GIT binary patch literal 204 zcmW-b%?g5G5Jk`0r-+sk6)oCCi)d325#|e+Y5yu(LA_BgSsi3x?tJ&VbC~as0U;e$ zl%ynFIq@cAulH1I8l93t?WnnZ=__~cQ?>bqyY9vGt4)P618dEe1rKg=3nKp$xd}VB sGUgI0H){C@jxA#tyOoO6+x!^Tuq+SwA)1(-|?e#_miA{yr)r3IG5A literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/ObjC/Framework/Info.plist b/antlr-3.1.3/runtime/ObjC/Framework/Info.plist new file mode 100644 index 0000000..9ead7b4 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + org.antlr.antlrframework + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NSPrincipalClass + + + diff --git a/antlr-3.1.3/runtime/ObjC/Framework/README.rtf b/antlr-3.1.3/runtime/ObjC/Framework/README.rtf new file mode 100644 index 0000000..2deb03f --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/README.rtf @@ -0,0 +1,34 @@ +{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf420 +{\fonttbl\f0\fnil\fcharset77 LucidaGrande;\f1\fnil\fcharset77 LucidaGrande-Bold;} +{\colortbl;\red255\green255\blue255;\red255\green0\blue0;} +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural + +\f0\fs36 \cf0 \ul \ulc0 How to use the "Regenerate examples" targets: +\fs26 \ +\ulnone \ +Set the value of the project build setting +\f1\b ANTLR_EXTRA_JAVA_ARGS\ + +\f0\b0 to the Java classpath containing the .jar files from the ANTLR v3 beta distribution.\ +The value will be used as the argument to the -cp parameter of /usr/bin/java.\ +See the individual "Regenerate" targets for the specifics.\ +\ +Also be sure that all necessary files are writeable, otherwise the build will fail silently\ +because org.antlr.Tool currently always returns 0 as its exit code, no matter what - even if a fatal error occured.\ +This is a serious issue when using the plugin, as well, and will be fixed in a future release.\ +\ +The Xcode plugin has not been updated to recognize the new recommended file extensions for ANTLR grammars:\ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural +\cf0 Parsers and combined grammars: .g generate NameLexer.(h|m) and NameParser.(h|m) files\ +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural +\cf0 Lexers: .gl generate NameLexer.(h|m) files\ +Parser grammars (alternatively): .gp generate NameParser.(h|m) files\ +\pard\tx566\tx1153\tx1700\tx2267\tx2834\tx3401\tx3968\tx4420\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural +\cf0 Treeparsers: .gtp generate Name.(h|m) files (\cf2 this has changed from the previous release!!\cf0 )\ +\ +It should continue to work but there are no guarantees. Sometime in the near future I will make updates available\ +and announce them on the mailing list antlr-interest@antlr.org and on my site http://classdump.org/pages/antlr\ +\ +Share and enjoy.\ +\ +-k} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/Test-Info.plist b/antlr-3.1.3/runtime/ObjC/Framework/Test-Info.plist new file mode 100644 index 0000000..3f2551e --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/Test-Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + com.yourcompany.Test + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + + diff --git a/antlr-3.1.3/runtime/ObjC/Framework/TestRewriteRuleTokenStream.h b/antlr-3.1.3/runtime/ObjC/Framework/TestRewriteRuleTokenStream.h new file mode 100644 index 0000000..768f425 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/TestRewriteRuleTokenStream.h @@ -0,0 +1,42 @@ +// [The "BSD licence"] +// Copyright (c) 2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import +#import +#import +#import + +@interface TestRewriteRuleTokenStream : SenTestCase { + ANTLRCommonTreeAdaptor *treeAdaptor; + ANTLRRewriteRuleTokenStream *stream; + + ANTLRCommonToken *token1; + ANTLRCommonToken *token2; + ANTLRCommonToken *token3; + ANTLRCommonToken *token4; +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/TestRewriteRuleTokenStream.m b/antlr-3.1.3/runtime/ObjC/Framework/TestRewriteRuleTokenStream.m new file mode 100644 index 0000000..ccc25c7 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/TestRewriteRuleTokenStream.m @@ -0,0 +1,178 @@ +// [The "BSD licence"] +// Copyright (c) 2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "TestRewriteRuleTokenStream.h" + + +@implementation TestRewriteRuleTokenStream + +- (void) setUp +{ + treeAdaptor = [[ANTLRCommonTreeAdaptor alloc] init]; + stream = [[ANTLRRewriteRuleTokenStream alloc] initWithTreeAdaptor:treeAdaptor + description:@"rewrite rule token stream"]; + token1 = [[ANTLRCommonToken alloc] init]; + token2 = [[ANTLRCommonToken alloc] init]; + token3 = [[ANTLRCommonToken alloc] init]; + token4 = [[ANTLRCommonToken alloc] init]; + [token1 setType:5]; [token1 setText:@"token 1"]; + [token2 setType:6]; [token2 setText:@"token 2"]; + [token3 setType:7]; [token3 setText:@"token 3"]; + [token4 setType:8]; [token4 setText:@"token 4"]; +} + +- (void) tearDown +{ + [token1 release]; token1 = nil; + [token2 release]; token2 = nil; + [token3 release]; token3 = nil; + [token4 release]; token4 = nil; + + [treeAdaptor release]; treeAdaptor = nil; + [stream release]; stream = nil; +} + +- (void) testEmptyRewriteStream +{ + STAssertFalse([stream hasNext], @"-(BOOL)hasNext should be NO, but isn't"); + STAssertThrows([stream next], @"-next on empty stream should throw exception, but doesn't"); +} + +- (void) testRewriteStreamCount +{ + STAssertTrue([stream count] == 0, + @"empty stream should have count==0"); + [stream addElement:token1]; + STAssertTrue([stream count] == 1, + @"single element stream should have count==1"); + [stream addElement:token2]; + STAssertTrue([stream count] == 2, + @"multiple stream should have count==2"); + +} + +- (void) testSingleElement +{ + [stream addElement:token1]; + STAssertTrue([stream hasNext], @"-hasNext should be YES, but isn't"); + ANTLRCommonTree *tree = [stream next]; + STAssertEqualObjects([tree token], token1, @"return token from stream should be token1, but isn't"); +} + +- (void) testSingleElementDup +{ + [stream addElement:token1]; + ANTLRCommonTree *tree1, *tree2; + STAssertNoThrow(tree1 = [stream next], + @"stream iteration should not throw exception" + ); + STAssertNoThrow(tree2 = [stream next], + @"stream iteration past element count (single element) should not throw exception" + ); + STAssertEqualObjects([tree1 token], [tree2 token], + @"tokens should be the same"); + STAssertFalse(tree1 == tree2, + @"trees should be different, but aren't"); +} + +- (void) testMultipleElements +{ + [stream addElement:token1]; + [stream addElement:token2]; + [stream addElement:token3]; + ANTLRCommonTree *tree1, *tree2, *tree3, *tree4; + STAssertNoThrow(tree1 = [stream next], + @"stream iteration should not throw exception" + ); + STAssertEqualObjects([tree1 token], token1, + @"[tree1 token] should be equal to token1" + ); + STAssertNoThrow(tree2 = [stream next], + @"stream iteration should not throw exception" + ); + STAssertEqualObjects([tree2 token], token2, + @"[tree2 token] should be equal to token2" + ); + STAssertNoThrow(tree3 = [stream next], + @"stream iteration should not throw exception" + ); + STAssertEqualObjects([tree3 token], token3, + @"[tree3 token] should be equal to token3" + ); + STAssertThrows(tree4 = [stream next], + @"iterating beyond end of stream should throw an exception" + ); +} + +- (void) testMultipleElementsAfterReset +{ + [stream addElement:token1]; + [stream addElement:token2]; + [stream addElement:token3]; + ANTLRCommonTree *tree1, *tree2, *tree3; + + // consume the stream completely + STAssertNoThrow(tree1 = [stream next], + @"stream iteration should not throw exception" + ); + STAssertEqualObjects([tree1 token], token1, + @"[tree1 token] should be equal to token1" + ); + STAssertNoThrow(tree2 = [stream next], + @"stream iteration should not throw exception" + ); + STAssertEqualObjects([tree2 token], token2, + @"[tree2 token] should be equal to token2" + ); + STAssertNoThrow(tree3 = [stream next], + @"stream iteration should not throw exception" + ); + + [stream reset]; // after resetting the stream it should dup + + ANTLRCommonTree *tree1Dup, *tree2Dup, *tree3Dup; + + STAssertNoThrow(tree1Dup = [stream next], + @"stream iteration should not throw exception" + ); + STAssertTrue(tree1 != tree1Dup, + @"[tree1 token] should be equal to token1" + ); + STAssertNoThrow(tree2Dup = [stream next], + @"stream iteration should not throw exception" + ); + STAssertTrue(tree2 != tree2Dup, + @"[tree2 token] should be equal to token2" + ); + STAssertNoThrow(tree3Dup = [stream next], + @"stream iteration should not throw exception" + ); + STAssertTrue(tree3 != tree3Dup, + @"[tree3 token] should be equal to token3" + ); +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/TestStringStream.h b/antlr-3.1.3/runtime/ObjC/Framework/TestStringStream.h new file mode 100644 index 0000000..72429bd --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/TestStringStream.h @@ -0,0 +1,16 @@ +// +// TestStringStream.h +// ANTLR +// +// Created by Kay Ršpke on 09.03.2006. +// Copyright 2006 classDump. All rights reserved. +// + +#import + + +@interface TestStringStream : SenTestCase { + +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/TestStringStream.m b/antlr-3.1.3/runtime/ObjC/Framework/TestStringStream.m new file mode 100644 index 0000000..04a4b0d --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/TestStringStream.m @@ -0,0 +1,24 @@ +// +// TestStringStream.m +// ANTLR +// +// Created by Kay Röpke on 09.03.2006. +// Copyright 2006 classDump. All rights reserved. +// + +#import "TestStringStream.h" +#import "ANTLRStringStream.h" + +@implementation TestStringStream + +- (void) testStringStreamCreation +{ + NSString *input = @"This is a sample input string."; + ANTLRStringStream *stringStream = [[ANTLRStringStream alloc] initWithStringNoCopy:input]; + + NSString *substr = [stringStream substringWithRange:NSMakeRange(0,10)]; + NSLog(@"the first 10 chars are: %@", substr); + STAssertTrue([@"This is a " isEqualToString:substr], @"The substrings are not equal. Got: %@", substr); +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleC.g b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleC.g new file mode 100644 index 0000000..81bb757 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleC.g @@ -0,0 +1,106 @@ +grammar SimpleC; + +options { + language=ObjC; +} + +program + : declaration+ + ; + +/** In this rule, the functionHeader left prefix on the last two + * alternatives is not LL(k) for a fixed k. However, it is + * LL(*). The LL(*) algorithm simply scans ahead until it sees + * either the ';' or the '{' of the block and then it picks + * the appropriate alternative. Lookhead can be arbitrarily + * long in theory, but is <=10 in most cases. Works great. + * Use ANTLRWorks to see the lookahead use (step by Location) + * and look for blue tokens in the input window pane. :) + */ +declaration + : variable + | functionHeader ';' + {NSLog(@"\%@ is a declaration", $functionHeader.name);} + | functionHeader block + {NSLog(@"\%@ is a definition", $functionHeader.name);} + ; + +variable + : type declarator ';' + ; + +declarator + : ID + ; + +functionHeader returns [NSString* name] +@init { + $name=nil; // for now you must init here rather than in 'returns' +} + : type ID '(' ( formalParameter ( ',' formalParameter )* )? ')' + {$name = $ID.text; } + ; + +formalParameter + : type declarator + ; + +type + : 'int' + | 'char' + | 'void' + | ID + ; + +block + : '{' + variable* + stat* + '}' + ; + +stat: forStat + | expr ';' + | block + | assignStat ';' + | ';' + ; + +forStat + : 'for' '(' assignStat ';' expr ';' assignStat ')' block + ; + +assignStat + : ID '=' expr + ; + +expr: condExpr + ; + +condExpr + : aexpr ( ('==' | '<') aexpr )? + ; + +aexpr + : atom ( '+' atom )* + ; + +atom + : ID + | INT + | '(' expr ')' + ; + +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + ; + +INT : ('0'..'9')+ + ; + +WS : ( ' ' + | '\t' + | '\r' + | '\n' + )+ + { $channel=99; } + ; diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleC.tokens b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleC.tokens new file mode 100644 index 0000000..423395e --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleC.tokens @@ -0,0 +1,17 @@ +INT=5 +WS=6 +ID=4 +'<'=19 +')'=10 +'=='=18 +';'=7 +'{'=14 +'char'=12 +'void'=13 +'('=8 +','=9 +'int'=11 +'for'=16 +'='=17 +'+'=20 +'}'=15 diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleCLexer.h b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleCLexer.h new file mode 100644 index 0000000..8c94c8b --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleCLexer.h @@ -0,0 +1,56 @@ +// $ANTLR 3.0 SimpleC.g 2007-07-25 20:12:42 + +#import +#import + + +#pragma mark Rule return scopes start +#pragma mark Rule return scopes end + +#pragma mark Tokens +#define SimpleCLexer_T14 14 +#define SimpleCLexer_T11 11 +#define SimpleCLexer_T9 9 +#define SimpleCLexer_WS 6 +#define SimpleCLexer_T12 12 +#define SimpleCLexer_T13 13 +#define SimpleCLexer_T20 20 +#define SimpleCLexer_T7 7 +#define SimpleCLexer_T10 10 +#define SimpleCLexer_T18 18 +#define SimpleCLexer_INT 5 +#define SimpleCLexer_T15 15 +#define SimpleCLexer_EOF -1 +#define SimpleCLexer_T17 17 +#define SimpleCLexer_Tokens 21 +#define SimpleCLexer_T16 16 +#define SimpleCLexer_T8 8 +#define SimpleCLexer_T19 19 +#define SimpleCLexer_ID 4 + +@interface SimpleCLexer : ANTLRLexer { +} + + +- (void) mT7; +- (void) mT8; +- (void) mT9; +- (void) mT10; +- (void) mT11; +- (void) mT12; +- (void) mT13; +- (void) mT14; +- (void) mT15; +- (void) mT16; +- (void) mT17; +- (void) mT18; +- (void) mT19; +- (void) mT20; +- (void) mID; +- (void) mINT; +- (void) mWS; +- (void) mTokens; + + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleCLexer.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleCLexer.m new file mode 100644 index 0000000..95276ce --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleCLexer.m @@ -0,0 +1,1000 @@ +// $ANTLR 3.0 SimpleC.g 2007-07-25 20:12:42 + +#import "SimpleCLexer.h" + +/** As per Terence: No returns for lexer rules! +#pragma mark Rule return scopes start +#pragma mark Rule return scopes end +*/ +@implementation SimpleCLexer + + +- (id) initWithCharStream:(id)anInput +{ + if (nil!=(self = [super initWithCharStream:anInput])) { + } + return self; +} + +- (void) dealloc +{ + [super dealloc]; +} + +- (NSString *) grammarFileName +{ + return @"SimpleC.g"; +} + + +- (void) mT7 +{ + @try { + ruleNestingLevel++; + int _type = SimpleCLexer_T7; + // SimpleC.g:7:6: ( ';' ) // ruleBlockSingleAlt + // SimpleC.g:7:6: ';' // alt + { + [self matchChar:';']; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T7 + + +- (void) mT8 +{ + @try { + ruleNestingLevel++; + int _type = SimpleCLexer_T8; + // SimpleC.g:8:6: ( '(' ) // ruleBlockSingleAlt + // SimpleC.g:8:6: '(' // alt + { + [self matchChar:'(']; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T8 + + +- (void) mT9 +{ + @try { + ruleNestingLevel++; + int _type = SimpleCLexer_T9; + // SimpleC.g:9:6: ( ',' ) // ruleBlockSingleAlt + // SimpleC.g:9:6: ',' // alt + { + [self matchChar:',']; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T9 + + +- (void) mT10 +{ + @try { + ruleNestingLevel++; + int _type = SimpleCLexer_T10; + // SimpleC.g:10:7: ( ')' ) // ruleBlockSingleAlt + // SimpleC.g:10:7: ')' // alt + { + [self matchChar:')']; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T10 + + +- (void) mT11 +{ + @try { + ruleNestingLevel++; + int _type = SimpleCLexer_T11; + // SimpleC.g:11:7: ( 'int' ) // ruleBlockSingleAlt + // SimpleC.g:11:7: 'int' // alt + { + [self matchString:@"int"]; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T11 + + +- (void) mT12 +{ + @try { + ruleNestingLevel++; + int _type = SimpleCLexer_T12; + // SimpleC.g:12:7: ( 'char' ) // ruleBlockSingleAlt + // SimpleC.g:12:7: 'char' // alt + { + [self matchString:@"char"]; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T12 + + +- (void) mT13 +{ + @try { + ruleNestingLevel++; + int _type = SimpleCLexer_T13; + // SimpleC.g:13:7: ( 'void' ) // ruleBlockSingleAlt + // SimpleC.g:13:7: 'void' // alt + { + [self matchString:@"void"]; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T13 + + +- (void) mT14 +{ + @try { + ruleNestingLevel++; + int _type = SimpleCLexer_T14; + // SimpleC.g:14:7: ( '{' ) // ruleBlockSingleAlt + // SimpleC.g:14:7: '{' // alt + { + [self matchChar:'{']; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T14 + + +- (void) mT15 +{ + @try { + ruleNestingLevel++; + int _type = SimpleCLexer_T15; + // SimpleC.g:15:7: ( '}' ) // ruleBlockSingleAlt + // SimpleC.g:15:7: '}' // alt + { + [self matchChar:'}']; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T15 + + +- (void) mT16 +{ + @try { + ruleNestingLevel++; + int _type = SimpleCLexer_T16; + // SimpleC.g:16:7: ( 'for' ) // ruleBlockSingleAlt + // SimpleC.g:16:7: 'for' // alt + { + [self matchString:@"for"]; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T16 + + +- (void) mT17 +{ + @try { + ruleNestingLevel++; + int _type = SimpleCLexer_T17; + // SimpleC.g:17:7: ( '=' ) // ruleBlockSingleAlt + // SimpleC.g:17:7: '=' // alt + { + [self matchChar:'=']; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T17 + + +- (void) mT18 +{ + @try { + ruleNestingLevel++; + int _type = SimpleCLexer_T18; + // SimpleC.g:18:7: ( '==' ) // ruleBlockSingleAlt + // SimpleC.g:18:7: '==' // alt + { + [self matchString:@"=="]; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T18 + + +- (void) mT19 +{ + @try { + ruleNestingLevel++; + int _type = SimpleCLexer_T19; + // SimpleC.g:19:7: ( '<' ) // ruleBlockSingleAlt + // SimpleC.g:19:7: '<' // alt + { + [self matchChar:'<']; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T19 + + +- (void) mT20 +{ + @try { + ruleNestingLevel++; + int _type = SimpleCLexer_T20; + // SimpleC.g:20:7: ( '+' ) // ruleBlockSingleAlt + // SimpleC.g:20:7: '+' // alt + { + [self matchChar:'+']; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T20 + + +- (void) mID +{ + @try { + ruleNestingLevel++; + int _type = SimpleCLexer_ID; + // SimpleC.g:94:9: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )* ) // ruleBlockSingleAlt + // SimpleC.g:94:9: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )* // alt + { + if (([input LA:1]>='A' && [input LA:1]<='Z')||[input LA:1]=='_'||([input LA:1]>='a' && [input LA:1]<='z')) { + [input consume]; + + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + do { + int alt1=2; + { + int LA1_0 = [input LA:1]; + if ( (LA1_0>='0' && LA1_0<='9')||(LA1_0>='A' && LA1_0<='Z')||LA1_0=='_'||(LA1_0>='a' && LA1_0<='z') ) { + alt1 = 1; + } + + } + switch (alt1) { + case 1 : + // SimpleC.g: // alt + { + if (([input LA:1]>='0' && [input LA:1]<='9')||([input LA:1]>='A' && [input LA:1]<='Z')||[input LA:1]=='_'||([input LA:1]>='a' && [input LA:1]<='z')) { + [input consume]; + + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + + } + break; + + default : + goto loop1; + } + } while (YES); loop1: ; + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end ID + + +- (void) mINT +{ + @try { + ruleNestingLevel++; + int _type = SimpleCLexer_INT; + // SimpleC.g:97:7: ( ( '0' .. '9' )+ ) // ruleBlockSingleAlt + // SimpleC.g:97:7: ( '0' .. '9' )+ // alt + { + // SimpleC.g:97:7: ( '0' .. '9' )+ // positiveClosureBlock + int cnt2=0; + + do { + int alt2=2; + { + int LA2_0 = [input LA:1]; + if ( (LA2_0>='0' && LA2_0<='9') ) { + alt2 = 1; + } + + } + switch (alt2) { + case 1 : + // SimpleC.g:97:8: '0' .. '9' // alt + { + [self matchRangeFromChar:'0' to:'9']; + + } + break; + + default : + if ( cnt2 >= 1 ) goto loop2; + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:2]; + @throw eee; + } + cnt2++; + } while (YES); loop2: ; + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end INT + + +- (void) mWS +{ + @try { + ruleNestingLevel++; + int _type = SimpleCLexer_WS; + // SimpleC.g:100:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) // ruleBlockSingleAlt + // SimpleC.g:100:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ // alt + { + // SimpleC.g:100:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ // positiveClosureBlock + int cnt3=0; + + do { + int alt3=2; + { + int LA3_0 = [input LA:1]; + if ( (LA3_0>='\t' && LA3_0<='\n')||LA3_0=='\r'||LA3_0==' ' ) { + alt3 = 1; + } + + } + switch (alt3) { + case 1 : + // SimpleC.g: // alt + { + if (([input LA:1]>='\t' && [input LA:1]<='\n')||[input LA:1]=='\r'||[input LA:1]==' ') { + [input consume]; + + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + + } + break; + + default : + if ( cnt3 >= 1 ) goto loop3; + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:3]; + @throw eee; + } + cnt3++; + } while (YES); loop3: ; + + _channel=99; + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end WS + +- (void) mTokens +{ + // SimpleC.g:1:10: ( T7 | T8 | T9 | T10 | T11 | T12 | T13 | T14 | T15 | T16 | T17 | T18 | T19 | T20 | ID | INT | WS ) //ruleblock + int alt4=17; + switch ([input LA:1]) { + case ';': + alt4 = 1; + break; + case '(': + alt4 = 2; + break; + case ',': + alt4 = 3; + break; + case ')': + alt4 = 4; + break; + case 'i': + { + int LA4_5 = [input LA:2]; + if ( LA4_5=='n' ) { + { + int LA4_17 = [input LA:3]; + if ( LA4_17=='t' ) { + { + int LA4_23 = [input LA:4]; + if ( (LA4_23>='0' && LA4_23<='9')||(LA4_23>='A' && LA4_23<='Z')||LA4_23=='_'||(LA4_23>='a' && LA4_23<='z') ) { + alt4 = 15; + } + else { + alt4 = 5; } + } + } + else { + alt4 = 15; } + } + } + else { + alt4 = 15; } + } + break; + case 'c': + { + int LA4_6 = [input LA:2]; + if ( LA4_6=='h' ) { + { + int LA4_18 = [input LA:3]; + if ( LA4_18=='a' ) { + { + int LA4_24 = [input LA:4]; + if ( LA4_24=='r' ) { + { + int LA4_28 = [input LA:5]; + if ( (LA4_28>='0' && LA4_28<='9')||(LA4_28>='A' && LA4_28<='Z')||LA4_28=='_'||(LA4_28>='a' && LA4_28<='z') ) { + alt4 = 15; + } + else { + alt4 = 6; } + } + } + else { + alt4 = 15; } + } + } + else { + alt4 = 15; } + } + } + else { + alt4 = 15; } + } + break; + case 'v': + { + int LA4_7 = [input LA:2]; + if ( LA4_7=='o' ) { + { + int LA4_19 = [input LA:3]; + if ( LA4_19=='i' ) { + { + int LA4_25 = [input LA:4]; + if ( LA4_25=='d' ) { + { + int LA4_29 = [input LA:5]; + if ( (LA4_29>='0' && LA4_29<='9')||(LA4_29>='A' && LA4_29<='Z')||LA4_29=='_'||(LA4_29>='a' && LA4_29<='z') ) { + alt4 = 15; + } + else { + alt4 = 7; } + } + } + else { + alt4 = 15; } + } + } + else { + alt4 = 15; } + } + } + else { + alt4 = 15; } + } + break; + case '{': + alt4 = 8; + break; + case '}': + alt4 = 9; + break; + case 'f': + { + int LA4_10 = [input LA:2]; + if ( LA4_10=='o' ) { + { + int LA4_20 = [input LA:3]; + if ( LA4_20=='r' ) { + { + int LA4_26 = [input LA:4]; + if ( (LA4_26>='0' && LA4_26<='9')||(LA4_26>='A' && LA4_26<='Z')||LA4_26=='_'||(LA4_26>='a' && LA4_26<='z') ) { + alt4 = 15; + } + else { + alt4 = 10; } + } + } + else { + alt4 = 15; } + } + } + else { + alt4 = 15; } + } + break; + case '=': + { + int LA4_11 = [input LA:2]; + if ( LA4_11=='=' ) { + alt4 = 12; + } + else { + alt4 = 11; } + } + break; + case '<': + alt4 = 13; + break; + case '+': + alt4 = 14; + break; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'd': + case 'e': + case 'g': + case 'h': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'w': + case 'x': + case 'y': + case 'z': + alt4 = 15; + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + alt4 = 16; + break; + case '\t': + case '\n': + case '\r': + case ' ': + alt4 = 17; + break; + default: + { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:4 state:0 stream:input]; + @throw nvae; + + }} + switch (alt4) { + case 1 : + // SimpleC.g:1:10: T7 // alt + { + [self mT7]; + + + + } + break; + case 2 : + // SimpleC.g:1:13: T8 // alt + { + [self mT8]; + + + + } + break; + case 3 : + // SimpleC.g:1:16: T9 // alt + { + [self mT9]; + + + + } + break; + case 4 : + // SimpleC.g:1:19: T10 // alt + { + [self mT10]; + + + + } + break; + case 5 : + // SimpleC.g:1:23: T11 // alt + { + [self mT11]; + + + + } + break; + case 6 : + // SimpleC.g:1:27: T12 // alt + { + [self mT12]; + + + + } + break; + case 7 : + // SimpleC.g:1:31: T13 // alt + { + [self mT13]; + + + + } + break; + case 8 : + // SimpleC.g:1:35: T14 // alt + { + [self mT14]; + + + + } + break; + case 9 : + // SimpleC.g:1:39: T15 // alt + { + [self mT15]; + + + + } + break; + case 10 : + // SimpleC.g:1:43: T16 // alt + { + [self mT16]; + + + + } + break; + case 11 : + // SimpleC.g:1:47: T17 // alt + { + [self mT17]; + + + + } + break; + case 12 : + // SimpleC.g:1:51: T18 // alt + { + [self mT18]; + + + + } + break; + case 13 : + // SimpleC.g:1:55: T19 // alt + { + [self mT19]; + + + + } + break; + case 14 : + // SimpleC.g:1:59: T20 // alt + { + [self mT20]; + + + + } + break; + case 15 : + // SimpleC.g:1:63: ID // alt + { + [self mID]; + + + + } + break; + case 16 : + // SimpleC.g:1:66: INT // alt + { + [self mINT]; + + + + } + break; + case 17 : + // SimpleC.g:1:70: WS // alt + { + [self mWS]; + + + + } + break; + + } + +} + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleCParser.h b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleCParser.h new file mode 100644 index 0000000..0665e45 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleCParser.h @@ -0,0 +1,51 @@ +// $ANTLR 3.0 SimpleC.g 2007-07-25 20:12:41 + +#import +#import + + +#pragma mark Cyclic DFA interface start SimpleCParserDFA2 +@interface SimpleCParserDFA2 : ANTLRDFA {} @end + +#pragma mark Cyclic DFA interface end SimpleCParserDFA2 + +#pragma mark Tokens +#define SimpleCParser_INT 5 +#define SimpleCParser_WS 6 +#define SimpleCParser_EOF -1 +#define SimpleCParser_ID 4 + +#pragma mark Dynamic Global Scopes + +#pragma mark Dynamic Rule Scopes + +#pragma mark Rule Return Scopes + + +@interface SimpleCParser : ANTLRParser { + + SimpleCParserDFA2 *dfa2; + + + } + + +- (void) program; +- (void) declaration; +- (void) variable; +- (void) declarator; +- (NSString*) functionHeader; +- (void) formalParameter; +- (void) type; +- (void) block; +- (void) stat; +- (void) forStat; +- (void) assignStat; +- (void) expr; +- (void) condExpr; +- (void) aexpr; +- (void) atom; + + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleCParser.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleCParser.m new file mode 100644 index 0000000..7d32524 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleCParser.m @@ -0,0 +1,1165 @@ +// $ANTLR 3.0 SimpleC.g 2007-07-25 20:12:41 + +#import "SimpleCParser.h" + +#pragma mark Cyclic DFA implementation start SimpleCParserDFA2 +@implementation SimpleCParserDFA2 +const static int SimpleCParserdfa2_eot[13] = + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; +const static int SimpleCParserdfa2_eof[13] = + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; +const static unichar SimpleCParserdfa2_min[13] = + {4,4,7,4,0,4,7,9,0,0,4,4,9}; +const static unichar SimpleCParserdfa2_max[13] = + {13,4,8,13,0,4,14,10,0,0,13,4,10}; +const static int SimpleCParserdfa2_accept[13] = + {-1,-1,-1,-1,1,-1,-1,-1,3,2,-1,-1,-1}; +const static int SimpleCParserdfa2_special[13] = + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; +const static int SimpleCParserdfa2_transition[] = {}; +const static int SimpleCParserdfa2_transition0[] = {2}; +const static int SimpleCParserdfa2_transition1[] = {4, 3}; +const static int SimpleCParserdfa2_transition2[] = {10, 6}; +const static int SimpleCParserdfa2_transition3[] = {1, -1, -1, -1, -1, -1, + -1, 1, 1, 1}; +const static int SimpleCParserdfa2_transition4[] = {7}; +const static int SimpleCParserdfa2_transition5[] = {12}; +const static int SimpleCParserdfa2_transition6[] = {5, -1, -1, -1, -1, -1, + 6, 5, 5, 5}; +const static int SimpleCParserdfa2_transition7[] = {11, -1, -1, -1, -1, + -1, -1, 11, 11, 11}; +const static int SimpleCParserdfa2_transition8[] = {9, -1, -1, -1, -1, -1, + -1, 8}; + + +- (id) initWithRecognizer:(ANTLRBaseRecognizer *) theRecognizer +{ + if ((self = [super initWithRecognizer:theRecognizer]) != nil) { + eot = SimpleCParserdfa2_eot; + eof = SimpleCParserdfa2_eof; + min = SimpleCParserdfa2_min; + max = SimpleCParserdfa2_max; + accept = SimpleCParserdfa2_accept; + special = SimpleCParserdfa2_special; + if (!(transition = calloc(13, sizeof(void*)))) { + [self release]; + return nil; + } + transition[0] = SimpleCParserdfa2_transition3; + transition[1] = SimpleCParserdfa2_transition0; + transition[2] = SimpleCParserdfa2_transition1; + transition[3] = SimpleCParserdfa2_transition6; + transition[4] = SimpleCParserdfa2_transition; + transition[5] = SimpleCParserdfa2_transition4; + transition[6] = SimpleCParserdfa2_transition8; + transition[7] = SimpleCParserdfa2_transition2; + transition[8] = SimpleCParserdfa2_transition; + transition[9] = SimpleCParserdfa2_transition; + transition[10] = SimpleCParserdfa2_transition7; + transition[11] = SimpleCParserdfa2_transition5; + transition[12] = SimpleCParserdfa2_transition2; + } + return self; +} + +- (void) dealloc +{ + free(transition); + [super dealloc]; +} + +- (NSString *) description +{ + return @"11:1: declaration : ( variable | functionHeader ';' | functionHeader block );"; +} + + +@end +#pragma mark Cyclic DFA implementation end SimpleCParserDFA2 + + + +#pragma mark Bitsets +const static unsigned long long FOLLOW_declaration_in_program27_data[] = {0x0000000000003812LL}; +static ANTLRBitSet *FOLLOW_declaration_in_program27; +const static unsigned long long FOLLOW_variable_in_declaration49_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_variable_in_declaration49; +const static unsigned long long FOLLOW_functionHeader_in_declaration59_data[] = {0x0000000000000080LL}; +static ANTLRBitSet *FOLLOW_functionHeader_in_declaration59; +const static unsigned long long FOLLOW_7_in_declaration61_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_7_in_declaration61; +const static unsigned long long FOLLOW_functionHeader_in_declaration74_data[] = {0x0000000000004000LL}; +static ANTLRBitSet *FOLLOW_functionHeader_in_declaration74; +const static unsigned long long FOLLOW_block_in_declaration76_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_block_in_declaration76; +const static unsigned long long FOLLOW_type_in_variable98_data[] = {0x0000000000000010LL}; +static ANTLRBitSet *FOLLOW_type_in_variable98; +const static unsigned long long FOLLOW_declarator_in_variable100_data[] = {0x0000000000000080LL}; +static ANTLRBitSet *FOLLOW_declarator_in_variable100; +const static unsigned long long FOLLOW_7_in_variable102_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_7_in_variable102; +const static unsigned long long FOLLOW_SimpleCParser_ID_in_declarator121_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_SimpleCParser_ID_in_declarator121; +const static unsigned long long FOLLOW_type_in_functionHeader150_data[] = {0x0000000000000010LL}; +static ANTLRBitSet *FOLLOW_type_in_functionHeader150; +const static unsigned long long FOLLOW_SimpleCParser_ID_in_functionHeader152_data[] = {0x0000000000000100LL}; +static ANTLRBitSet *FOLLOW_SimpleCParser_ID_in_functionHeader152; +const static unsigned long long FOLLOW_8_in_functionHeader154_data[] = {0x0000000000003C10LL}; +static ANTLRBitSet *FOLLOW_8_in_functionHeader154; +const static unsigned long long FOLLOW_formalParameter_in_functionHeader158_data[] = {0x0000000000000600LL}; +static ANTLRBitSet *FOLLOW_formalParameter_in_functionHeader158; +const static unsigned long long FOLLOW_9_in_functionHeader162_data[] = {0x0000000000003810LL}; +static ANTLRBitSet *FOLLOW_9_in_functionHeader162; +const static unsigned long long FOLLOW_formalParameter_in_functionHeader164_data[] = {0x0000000000000600LL}; +static ANTLRBitSet *FOLLOW_formalParameter_in_functionHeader164; +const static unsigned long long FOLLOW_10_in_functionHeader172_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_10_in_functionHeader172; +const static unsigned long long FOLLOW_type_in_formalParameter194_data[] = {0x0000000000000010LL}; +static ANTLRBitSet *FOLLOW_type_in_formalParameter194; +const static unsigned long long FOLLOW_declarator_in_formalParameter196_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_declarator_in_formalParameter196; +const static unsigned long long FOLLOW_set_in_type0_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_set_in_type0; +const static unsigned long long FOLLOW_14_in_block285_data[] = {0x000000000001F9B0LL}; +static ANTLRBitSet *FOLLOW_14_in_block285; +const static unsigned long long FOLLOW_variable_in_block299_data[] = {0x000000000001F9B0LL}; +static ANTLRBitSet *FOLLOW_variable_in_block299; +const static unsigned long long FOLLOW_stat_in_block314_data[] = {0x000000000001C1B0LL}; +static ANTLRBitSet *FOLLOW_stat_in_block314; +const static unsigned long long FOLLOW_15_in_block325_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_15_in_block325; +const static unsigned long long FOLLOW_forStat_in_stat337_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_forStat_in_stat337; +const static unsigned long long FOLLOW_expr_in_stat345_data[] = {0x0000000000000080LL}; +static ANTLRBitSet *FOLLOW_expr_in_stat345; +const static unsigned long long FOLLOW_7_in_stat347_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_7_in_stat347; +const static unsigned long long FOLLOW_block_in_stat361_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_block_in_stat361; +const static unsigned long long FOLLOW_assignStat_in_stat369_data[] = {0x0000000000000080LL}; +static ANTLRBitSet *FOLLOW_assignStat_in_stat369; +const static unsigned long long FOLLOW_7_in_stat371_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_7_in_stat371; +const static unsigned long long FOLLOW_7_in_stat379_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_7_in_stat379; +const static unsigned long long FOLLOW_16_in_forStat398_data[] = {0x0000000000000100LL}; +static ANTLRBitSet *FOLLOW_16_in_forStat398; +const static unsigned long long FOLLOW_8_in_forStat400_data[] = {0x0000000000000010LL}; +static ANTLRBitSet *FOLLOW_8_in_forStat400; +const static unsigned long long FOLLOW_assignStat_in_forStat402_data[] = {0x0000000000000080LL}; +static ANTLRBitSet *FOLLOW_assignStat_in_forStat402; +const static unsigned long long FOLLOW_7_in_forStat404_data[] = {0x0000000000000130LL}; +static ANTLRBitSet *FOLLOW_7_in_forStat404; +const static unsigned long long FOLLOW_expr_in_forStat406_data[] = {0x0000000000000080LL}; +static ANTLRBitSet *FOLLOW_expr_in_forStat406; +const static unsigned long long FOLLOW_7_in_forStat408_data[] = {0x0000000000000010LL}; +static ANTLRBitSet *FOLLOW_7_in_forStat408; +const static unsigned long long FOLLOW_assignStat_in_forStat410_data[] = {0x0000000000000400LL}; +static ANTLRBitSet *FOLLOW_assignStat_in_forStat410; +const static unsigned long long FOLLOW_10_in_forStat412_data[] = {0x0000000000004000LL}; +static ANTLRBitSet *FOLLOW_10_in_forStat412; +const static unsigned long long FOLLOW_block_in_forStat414_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_block_in_forStat414; +const static unsigned long long FOLLOW_SimpleCParser_ID_in_assignStat441_data[] = {0x0000000000020000LL}; +static ANTLRBitSet *FOLLOW_SimpleCParser_ID_in_assignStat441; +const static unsigned long long FOLLOW_17_in_assignStat443_data[] = {0x0000000000000130LL}; +static ANTLRBitSet *FOLLOW_17_in_assignStat443; +const static unsigned long long FOLLOW_expr_in_assignStat445_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_expr_in_assignStat445; +const static unsigned long long FOLLOW_condExpr_in_expr467_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_condExpr_in_expr467; +const static unsigned long long FOLLOW_aexpr_in_condExpr486_data[] = {0x00000000000C0002LL}; +static ANTLRBitSet *FOLLOW_aexpr_in_condExpr486; +const static unsigned long long FOLLOW_set_in_condExpr490_data[] = {0x0000000000000130LL}; +static ANTLRBitSet *FOLLOW_set_in_condExpr490; +const static unsigned long long FOLLOW_aexpr_in_condExpr498_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_aexpr_in_condExpr498; +const static unsigned long long FOLLOW_atom_in_aexpr520_data[] = {0x0000000000100002LL}; +static ANTLRBitSet *FOLLOW_atom_in_aexpr520; +const static unsigned long long FOLLOW_20_in_aexpr524_data[] = {0x0000000000000130LL}; +static ANTLRBitSet *FOLLOW_20_in_aexpr524; +const static unsigned long long FOLLOW_atom_in_aexpr526_data[] = {0x0000000000100002LL}; +static ANTLRBitSet *FOLLOW_atom_in_aexpr526; +const static unsigned long long FOLLOW_SimpleCParser_ID_in_atom546_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_SimpleCParser_ID_in_atom546; +const static unsigned long long FOLLOW_SimpleCParser_INT_in_atom560_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_SimpleCParser_INT_in_atom560; +const static unsigned long long FOLLOW_8_in_atom574_data[] = {0x0000000000000130LL}; +static ANTLRBitSet *FOLLOW_8_in_atom574; +const static unsigned long long FOLLOW_expr_in_atom576_data[] = {0x0000000000000400LL}; +static ANTLRBitSet *FOLLOW_expr_in_atom576; +const static unsigned long long FOLLOW_10_in_atom578_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_10_in_atom578; + + +#pragma mark Dynamic Global Scopes + +#pragma mark Dynamic Rule Scopes + +#pragma mark Rule return scopes start + +@implementation SimpleCParser + ++ (void) initialize +{ + FOLLOW_declaration_in_program27 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_declaration_in_program27_data count:1]; + FOLLOW_variable_in_declaration49 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_variable_in_declaration49_data count:1]; + FOLLOW_functionHeader_in_declaration59 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_functionHeader_in_declaration59_data count:1]; + FOLLOW_7_in_declaration61 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_7_in_declaration61_data count:1]; + FOLLOW_functionHeader_in_declaration74 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_functionHeader_in_declaration74_data count:1]; + FOLLOW_block_in_declaration76 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_block_in_declaration76_data count:1]; + FOLLOW_type_in_variable98 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_type_in_variable98_data count:1]; + FOLLOW_declarator_in_variable100 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_declarator_in_variable100_data count:1]; + FOLLOW_7_in_variable102 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_7_in_variable102_data count:1]; + FOLLOW_SimpleCParser_ID_in_declarator121 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCParser_ID_in_declarator121_data count:1]; + FOLLOW_type_in_functionHeader150 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_type_in_functionHeader150_data count:1]; + FOLLOW_SimpleCParser_ID_in_functionHeader152 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCParser_ID_in_functionHeader152_data count:1]; + FOLLOW_8_in_functionHeader154 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_8_in_functionHeader154_data count:1]; + FOLLOW_formalParameter_in_functionHeader158 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_formalParameter_in_functionHeader158_data count:1]; + FOLLOW_9_in_functionHeader162 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_9_in_functionHeader162_data count:1]; + FOLLOW_formalParameter_in_functionHeader164 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_formalParameter_in_functionHeader164_data count:1]; + FOLLOW_10_in_functionHeader172 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_10_in_functionHeader172_data count:1]; + FOLLOW_type_in_formalParameter194 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_type_in_formalParameter194_data count:1]; + FOLLOW_declarator_in_formalParameter196 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_declarator_in_formalParameter196_data count:1]; + FOLLOW_set_in_type0 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_set_in_type0_data count:1]; + FOLLOW_14_in_block285 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_14_in_block285_data count:1]; + FOLLOW_variable_in_block299 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_variable_in_block299_data count:1]; + FOLLOW_stat_in_block314 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_stat_in_block314_data count:1]; + FOLLOW_15_in_block325 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_15_in_block325_data count:1]; + FOLLOW_forStat_in_stat337 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_forStat_in_stat337_data count:1]; + FOLLOW_expr_in_stat345 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_expr_in_stat345_data count:1]; + FOLLOW_7_in_stat347 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_7_in_stat347_data count:1]; + FOLLOW_block_in_stat361 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_block_in_stat361_data count:1]; + FOLLOW_assignStat_in_stat369 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_assignStat_in_stat369_data count:1]; + FOLLOW_7_in_stat371 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_7_in_stat371_data count:1]; + FOLLOW_7_in_stat379 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_7_in_stat379_data count:1]; + FOLLOW_16_in_forStat398 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_16_in_forStat398_data count:1]; + FOLLOW_8_in_forStat400 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_8_in_forStat400_data count:1]; + FOLLOW_assignStat_in_forStat402 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_assignStat_in_forStat402_data count:1]; + FOLLOW_7_in_forStat404 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_7_in_forStat404_data count:1]; + FOLLOW_expr_in_forStat406 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_expr_in_forStat406_data count:1]; + FOLLOW_7_in_forStat408 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_7_in_forStat408_data count:1]; + FOLLOW_assignStat_in_forStat410 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_assignStat_in_forStat410_data count:1]; + FOLLOW_10_in_forStat412 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_10_in_forStat412_data count:1]; + FOLLOW_block_in_forStat414 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_block_in_forStat414_data count:1]; + FOLLOW_SimpleCParser_ID_in_assignStat441 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCParser_ID_in_assignStat441_data count:1]; + FOLLOW_17_in_assignStat443 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_17_in_assignStat443_data count:1]; + FOLLOW_expr_in_assignStat445 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_expr_in_assignStat445_data count:1]; + FOLLOW_condExpr_in_expr467 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_condExpr_in_expr467_data count:1]; + FOLLOW_aexpr_in_condExpr486 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_aexpr_in_condExpr486_data count:1]; + FOLLOW_set_in_condExpr490 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_set_in_condExpr490_data count:1]; + FOLLOW_aexpr_in_condExpr498 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_aexpr_in_condExpr498_data count:1]; + FOLLOW_atom_in_aexpr520 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_atom_in_aexpr520_data count:1]; + FOLLOW_20_in_aexpr524 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_20_in_aexpr524_data count:1]; + FOLLOW_atom_in_aexpr526 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_atom_in_aexpr526_data count:1]; + FOLLOW_SimpleCParser_ID_in_atom546 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCParser_ID_in_atom546_data count:1]; + FOLLOW_SimpleCParser_INT_in_atom560 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCParser_INT_in_atom560_data count:1]; + FOLLOW_8_in_atom574 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_8_in_atom574_data count:1]; + FOLLOW_expr_in_atom576 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_expr_in_atom576_data count:1]; + FOLLOW_10_in_atom578 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_10_in_atom578_data count:1]; + +} + +- (id) initWithTokenStream:(id)aStream +{ + if ((self = [super initWithTokenStream:aStream])) { + + tokenNames = [[NSArray alloc] initWithObjects:@"", @"", @"", @"", + @"ID", @"INT", @"WS", @"';'", @"'('", @"','", @"')'", @"'int'", @"'char'", + @"'void'", @"'{'", @"'}'", @"'for'", @"'='", @"'=='", @"'<'", @"'+'", nil]; + dfa2 = [[SimpleCParserDFA2 alloc] initWithRecognizer:self]; + + } + return self; +} + +- (void) dealloc +{ + [tokenNames release]; + [dfa2 release]; + [super dealloc]; +} + +- (NSString *) grammarFileName +{ + return @"SimpleC.g"; +} + + +// $ANTLR start program +// SimpleC.g:7:1: program : ( declaration )+ ; +- (void) program +{ + @try { + // SimpleC.g:8:9: ( ( declaration )+ ) // ruleBlockSingleAlt + // SimpleC.g:8:9: ( declaration )+ // alt + { + // SimpleC.g:8:9: ( declaration )+ // positiveClosureBlock + int cnt1=0; + + do { + int alt1=2; + { + int LA1_0 = [input LA:1]; + if ( LA1_0==SimpleCParser_ID||(LA1_0>=11 && LA1_0<=13) ) { + alt1 = 1; + } + + } + switch (alt1) { + case 1 : + // SimpleC.g:8:9: declaration // alt + { + [following addObject:FOLLOW_declaration_in_program27]; + [self declaration]; + [following removeLastObject]; + + + + } + break; + + default : + if ( cnt1 >= 1 ) goto loop1; + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:1]; + @throw eee; + } + cnt1++; + } while (YES); loop1: ; + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end program + +// $ANTLR start declaration +// SimpleC.g:11:1: declaration : ( variable | functionHeader ';' | functionHeader block ); +- (void) declaration +{ + NSString* _functionHeader1 = nil; + + NSString* _functionHeader2 = nil; + + + @try { + // SimpleC.g:21:9: ( variable | functionHeader ';' | functionHeader block ) //ruleblock + int alt2=3; + alt2 = [dfa2 predict]; + switch (alt2) { + case 1 : + // SimpleC.g:21:9: variable // alt + { + [following addObject:FOLLOW_variable_in_declaration49]; + [self variable]; + [following removeLastObject]; + + + + } + break; + case 2 : + // SimpleC.g:22:9: functionHeader ';' // alt + { + [following addObject:FOLLOW_functionHeader_in_declaration59]; + _functionHeader1 = [self functionHeader]; + [following removeLastObject]; + + + [self match:input tokenType:7 follow:FOLLOW_7_in_declaration61]; + NSLog(@"%@ is a declaration", _functionHeader1); + + } + break; + case 3 : + // SimpleC.g:24:9: functionHeader block // alt + { + [following addObject:FOLLOW_functionHeader_in_declaration74]; + _functionHeader2 = [self functionHeader]; + [following removeLastObject]; + + + [following addObject:FOLLOW_block_in_declaration76]; + [self block]; + [following removeLastObject]; + + + NSLog(@"%@ is a definition", _functionHeader2); + + } + break; + + } + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + [_functionHeader1 release]; + [_functionHeader2 release]; + + } + return ; +} +// $ANTLR end declaration + +// $ANTLR start variable +// SimpleC.g:28:1: variable : type declarator ';' ; +- (void) variable +{ + @try { + // SimpleC.g:29:9: ( type declarator ';' ) // ruleBlockSingleAlt + // SimpleC.g:29:9: type declarator ';' // alt + { + [following addObject:FOLLOW_type_in_variable98]; + [self type]; + [following removeLastObject]; + + + [following addObject:FOLLOW_declarator_in_variable100]; + [self declarator]; + [following removeLastObject]; + + + [self match:input tokenType:7 follow:FOLLOW_7_in_variable102]; + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end variable + +// $ANTLR start declarator +// SimpleC.g:32:1: declarator : ID ; +- (void) declarator +{ + @try { + // SimpleC.g:33:9: ( ID ) // ruleBlockSingleAlt + // SimpleC.g:33:9: ID // alt + { + [self match:input tokenType:SimpleCParser_ID follow:FOLLOW_SimpleCParser_ID_in_declarator121]; + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end declarator + +// $ANTLR start functionHeader +// SimpleC.g:36:1: functionHeader returns [NSString* name] : type ID '(' ( formalParameter ( ',' formalParameter )* )? ')' ; +- (NSString*) functionHeader +{ + NSString* _name; + id _ID3 = nil; + + + _name =nil; + // double check this after beta release! + [_name retain]; // for now you must init here rather than in 'returns' + + @try { + // SimpleC.g:40:9: ( type ID '(' ( formalParameter ( ',' formalParameter )* )? ')' ) // ruleBlockSingleAlt + // SimpleC.g:40:9: type ID '(' ( formalParameter ( ',' formalParameter )* )? ')' // alt + { + [following addObject:FOLLOW_type_in_functionHeader150]; + [self type]; + [following removeLastObject]; + + + _ID3=(id )[input LT:1]; + [_ID3 retain]; + [self match:input tokenType:SimpleCParser_ID follow:FOLLOW_SimpleCParser_ID_in_functionHeader152]; + [self match:input tokenType:8 follow:FOLLOW_8_in_functionHeader154]; + // SimpleC.g:40:21: ( formalParameter ( ',' formalParameter )* )? // block + int alt4=2; + { + int LA4_0 = [input LA:1]; + if ( LA4_0==SimpleCParser_ID||(LA4_0>=11 && LA4_0<=13) ) { + alt4 = 1; + } + } + switch (alt4) { + case 1 : + // SimpleC.g:40:23: formalParameter ( ',' formalParameter )* // alt + { + [following addObject:FOLLOW_formalParameter_in_functionHeader158]; + [self formalParameter]; + [following removeLastObject]; + + + do { + int alt3=2; + { + int LA3_0 = [input LA:1]; + if ( LA3_0==9 ) { + alt3 = 1; + } + + } + switch (alt3) { + case 1 : + // SimpleC.g:40:41: ',' formalParameter // alt + { + [self match:input tokenType:9 follow:FOLLOW_9_in_functionHeader162]; + [following addObject:FOLLOW_formalParameter_in_functionHeader164]; + [self formalParameter]; + [following removeLastObject]; + + + + } + break; + + default : + goto loop3; + } + } while (YES); loop3: ; + + + } + break; + + } + + [self match:input tokenType:10 follow:FOLLOW_10_in_functionHeader172]; + _name = [_ID3 text]; + // double check this after beta release! + [_name retain]; + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + [_ID3 release]; + // token+rule list labels + // rule labels + + } + return _name; +} +// $ANTLR end functionHeader + +// $ANTLR start formalParameter +// SimpleC.g:44:1: formalParameter : type declarator ; +- (void) formalParameter +{ + @try { + // SimpleC.g:45:9: ( type declarator ) // ruleBlockSingleAlt + // SimpleC.g:45:9: type declarator // alt + { + [following addObject:FOLLOW_type_in_formalParameter194]; + [self type]; + [following removeLastObject]; + + + [following addObject:FOLLOW_declarator_in_formalParameter196]; + [self declarator]; + [following removeLastObject]; + + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end formalParameter + +// $ANTLR start type +// SimpleC.g:48:1: type : ( 'int' | 'char' | 'void' | ID ); +- (void) type +{ + @try { + // SimpleC.g:49:9: ( 'int' | 'char' | 'void' | ID ) // ruleBlockSingleAlt + // SimpleC.g: // alt + { + if ([input LA:1]==SimpleCParser_ID||([input LA:1]>=11 && [input LA:1]<=13)) { + [input consume]; + errorRecovery = NO; + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recoverFromMismatchedSet:input exception:mse follow:FOLLOW_set_in_type0]; @throw mse; + } + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end type + +// $ANTLR start block +// SimpleC.g:55:1: block : '{' ( variable )* ( stat )* '}' ; +- (void) block +{ + @try { + // SimpleC.g:56:9: ( '{' ( variable )* ( stat )* '}' ) // ruleBlockSingleAlt + // SimpleC.g:56:9: '{' ( variable )* ( stat )* '}' // alt + { + [self match:input tokenType:14 follow:FOLLOW_14_in_block285]; + do { + int alt5=2; + { + int LA5_0 = [input LA:1]; + if ( LA5_0==SimpleCParser_ID ) { + { + int LA5_2 = [input LA:2]; + if ( LA5_2==SimpleCParser_ID ) { + alt5 = 1; + } + + } + } + else if ( (LA5_0>=11 && LA5_0<=13) ) { + alt5 = 1; + } + + } + switch (alt5) { + case 1 : + // SimpleC.g:57:13: variable // alt + { + [following addObject:FOLLOW_variable_in_block299]; + [self variable]; + [following removeLastObject]; + + + + } + break; + + default : + goto loop5; + } + } while (YES); loop5: ; + + do { + int alt6=2; + { + int LA6_0 = [input LA:1]; + if ( (LA6_0>=SimpleCParser_ID && LA6_0<=SimpleCParser_INT)||(LA6_0>=7 && LA6_0<=8)||LA6_0==14||LA6_0==16 ) { + alt6 = 1; + } + + } + switch (alt6) { + case 1 : + // SimpleC.g:58:13: stat // alt + { + [following addObject:FOLLOW_stat_in_block314]; + [self stat]; + [following removeLastObject]; + + + + } + break; + + default : + goto loop6; + } + } while (YES); loop6: ; + + [self match:input tokenType:15 follow:FOLLOW_15_in_block325]; + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end block + +// $ANTLR start stat +// SimpleC.g:62:1: stat : ( forStat | expr ';' | block | assignStat ';' | ';' ); +- (void) stat +{ + @try { + // SimpleC.g:62:7: ( forStat | expr ';' | block | assignStat ';' | ';' ) //ruleblock + int alt7=5; + switch ([input LA:1]) { + case 16: + alt7 = 1; + break; + case SimpleCParser_ID: + { + int LA7_2 = [input LA:2]; + if ( LA7_2==17 ) { + alt7 = 4; + } + else if ( LA7_2==7||(LA7_2>=18 && LA7_2<=20) ) { + alt7 = 2; + } + else { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:7 state:2 stream:input]; + @throw nvae; + } + } + break; + case SimpleCParser_INT: + case 8: + alt7 = 2; + break; + case 14: + alt7 = 3; + break; + case 7: + alt7 = 5; + break; + default: + { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:7 state:0 stream:input]; + @throw nvae; + + }} + switch (alt7) { + case 1 : + // SimpleC.g:62:7: forStat // alt + { + [following addObject:FOLLOW_forStat_in_stat337]; + [self forStat]; + [following removeLastObject]; + + + + } + break; + case 2 : + // SimpleC.g:63:7: expr ';' // alt + { + [following addObject:FOLLOW_expr_in_stat345]; + [self expr]; + [following removeLastObject]; + + + [self match:input tokenType:7 follow:FOLLOW_7_in_stat347]; + + } + break; + case 3 : + // SimpleC.g:64:7: block // alt + { + [following addObject:FOLLOW_block_in_stat361]; + [self block]; + [following removeLastObject]; + + + + } + break; + case 4 : + // SimpleC.g:65:7: assignStat ';' // alt + { + [following addObject:FOLLOW_assignStat_in_stat369]; + [self assignStat]; + [following removeLastObject]; + + + [self match:input tokenType:7 follow:FOLLOW_7_in_stat371]; + + } + break; + case 5 : + // SimpleC.g:66:7: ';' // alt + { + [self match:input tokenType:7 follow:FOLLOW_7_in_stat379]; + + } + break; + + } + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end stat + +// $ANTLR start forStat +// SimpleC.g:69:1: forStat : 'for' '(' assignStat ';' expr ';' assignStat ')' block ; +- (void) forStat +{ + @try { + // SimpleC.g:70:9: ( 'for' '(' assignStat ';' expr ';' assignStat ')' block ) // ruleBlockSingleAlt + // SimpleC.g:70:9: 'for' '(' assignStat ';' expr ';' assignStat ')' block // alt + { + [self match:input tokenType:16 follow:FOLLOW_16_in_forStat398]; + [self match:input tokenType:8 follow:FOLLOW_8_in_forStat400]; + [following addObject:FOLLOW_assignStat_in_forStat402]; + [self assignStat]; + [following removeLastObject]; + + + [self match:input tokenType:7 follow:FOLLOW_7_in_forStat404]; + [following addObject:FOLLOW_expr_in_forStat406]; + [self expr]; + [following removeLastObject]; + + + [self match:input tokenType:7 follow:FOLLOW_7_in_forStat408]; + [following addObject:FOLLOW_assignStat_in_forStat410]; + [self assignStat]; + [following removeLastObject]; + + + [self match:input tokenType:10 follow:FOLLOW_10_in_forStat412]; + [following addObject:FOLLOW_block_in_forStat414]; + [self block]; + [following removeLastObject]; + + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end forStat + +// $ANTLR start assignStat +// SimpleC.g:73:1: assignStat : ID '=' expr ; +- (void) assignStat +{ + @try { + // SimpleC.g:74:9: ( ID '=' expr ) // ruleBlockSingleAlt + // SimpleC.g:74:9: ID '=' expr // alt + { + [self match:input tokenType:SimpleCParser_ID follow:FOLLOW_SimpleCParser_ID_in_assignStat441]; + [self match:input tokenType:17 follow:FOLLOW_17_in_assignStat443]; + [following addObject:FOLLOW_expr_in_assignStat445]; + [self expr]; + [following removeLastObject]; + + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end assignStat + +// $ANTLR start expr +// SimpleC.g:77:1: expr : condExpr ; +- (void) expr +{ + @try { + // SimpleC.g:77:9: ( condExpr ) // ruleBlockSingleAlt + // SimpleC.g:77:9: condExpr // alt + { + [following addObject:FOLLOW_condExpr_in_expr467]; + [self condExpr]; + [following removeLastObject]; + + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end expr + +// $ANTLR start condExpr +// SimpleC.g:80:1: condExpr : aexpr ( ( '==' | '<' ) aexpr )? ; +- (void) condExpr +{ + @try { + // SimpleC.g:81:9: ( aexpr ( ( '==' | '<' ) aexpr )? ) // ruleBlockSingleAlt + // SimpleC.g:81:9: aexpr ( ( '==' | '<' ) aexpr )? // alt + { + [following addObject:FOLLOW_aexpr_in_condExpr486]; + [self aexpr]; + [following removeLastObject]; + + + // SimpleC.g:81:15: ( ( '==' | '<' ) aexpr )? // block + int alt8=2; + { + int LA8_0 = [input LA:1]; + if ( (LA8_0>=18 && LA8_0<=19) ) { + alt8 = 1; + } + } + switch (alt8) { + case 1 : + // SimpleC.g:81:17: ( '==' | '<' ) aexpr // alt + { + if (([input LA:1]>=18 && [input LA:1]<=19)) { + [input consume]; + errorRecovery = NO; + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recoverFromMismatchedSet:input exception:mse follow:FOLLOW_set_in_condExpr490]; @throw mse; + } + + [following addObject:FOLLOW_aexpr_in_condExpr498]; + [self aexpr]; + [following removeLastObject]; + + + + } + break; + + } + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end condExpr + +// $ANTLR start aexpr +// SimpleC.g:84:1: aexpr : atom ( '+' atom )* ; +- (void) aexpr +{ + @try { + // SimpleC.g:85:9: ( atom ( '+' atom )* ) // ruleBlockSingleAlt + // SimpleC.g:85:9: atom ( '+' atom )* // alt + { + [following addObject:FOLLOW_atom_in_aexpr520]; + [self atom]; + [following removeLastObject]; + + + do { + int alt9=2; + { + int LA9_0 = [input LA:1]; + if ( LA9_0==20 ) { + alt9 = 1; + } + + } + switch (alt9) { + case 1 : + // SimpleC.g:85:16: '+' atom // alt + { + [self match:input tokenType:20 follow:FOLLOW_20_in_aexpr524]; + [following addObject:FOLLOW_atom_in_aexpr526]; + [self atom]; + [following removeLastObject]; + + + + } + break; + + default : + goto loop9; + } + } while (YES); loop9: ; + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end aexpr + +// $ANTLR start atom +// SimpleC.g:88:1: atom : ( ID | INT | '(' expr ')' ); +- (void) atom +{ + @try { + // SimpleC.g:89:7: ( ID | INT | '(' expr ')' ) //ruleblock + int alt10=3; + switch ([input LA:1]) { + case SimpleCParser_ID: + alt10 = 1; + break; + case SimpleCParser_INT: + alt10 = 2; + break; + case 8: + alt10 = 3; + break; + default: + { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:10 state:0 stream:input]; + @throw nvae; + + }} + switch (alt10) { + case 1 : + // SimpleC.g:89:7: ID // alt + { + [self match:input tokenType:SimpleCParser_ID follow:FOLLOW_SimpleCParser_ID_in_atom546]; + + } + break; + case 2 : + // SimpleC.g:90:7: INT // alt + { + [self match:input tokenType:SimpleCParser_INT follow:FOLLOW_SimpleCParser_INT_in_atom560]; + + } + break; + case 3 : + // SimpleC.g:91:7: '(' expr ')' // alt + { + [self match:input tokenType:8 follow:FOLLOW_8_in_atom574]; + [following addObject:FOLLOW_expr_in_atom576]; + [self expr]; + [following removeLastObject]; + + + [self match:input tokenType:10 follow:FOLLOW_10_in_atom578]; + + } + break; + + } + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end atom + + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleC__.gl b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleC__.gl new file mode 100644 index 0000000..b36f80b --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/SimpleC__.gl @@ -0,0 +1,37 @@ +lexer grammar SimpleC; +options { + language=ObjC; + +} + +T7 : ';' ; +T8 : '(' ; +T9 : ',' ; +T10 : ')' ; +T11 : 'int' ; +T12 : 'char' ; +T13 : 'void' ; +T14 : '{' ; +T15 : '}' ; +T16 : 'for' ; +T17 : '=' ; +T18 : '==' ; +T19 : '<' ; +T20 : '+' ; + +// $ANTLR src "SimpleC.g" 94 +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + ; + +// $ANTLR src "SimpleC.g" 97 +INT : ('0'..'9')+ + ; + +// $ANTLR src "SimpleC.g" 100 +WS : ( ' ' + | '\t' + | '\r' + | '\n' + )+ + { $channel=99; } + ; diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/input b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/input new file mode 100644 index 0000000..1aa5a0d --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/input @@ -0,0 +1,12 @@ +char c; +int x; + +void bar(int x); + +int foo(int y, char d) { + int i; + for (i=0; i<3; i=i+1) { + x=3; + y=5; + } +} diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/main.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/main.m new file mode 100644 index 0000000..cce1e45 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/main.m @@ -0,0 +1,29 @@ +#import +#import +#import "SimpleCLexer.h" +#import "SimpleCParser.h" + +int main() { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + NSString *string = [NSString stringWithContentsOfFile:@"examples/LL-star/input"]; + NSLog(@"input is: %@", string); + ANTLRStringStream *stream = [[ANTLRStringStream alloc] initWithStringNoCopy:string]; + SimpleCLexer *lexer = [[SimpleCLexer alloc] initWithCharStream:stream]; + +// ANTLRToken *currentToken; +// while ((currentToken = [lexer nextToken]) && [currentToken type] != ANTLRTokenTypeEOF) { +// NSLog(@"%@", currentToken); +// } + + ANTLRCommonTokenStream *tokenStream = [[ANTLRCommonTokenStream alloc] initWithTokenSource:lexer]; + SimpleCParser *parser = [[SimpleCParser alloc] initWithTokenStream:tokenStream]; + [parser program]; + [lexer release]; + [stream release]; + [tokenStream release]; + [parser release]; + + [pool release]; + return 0; +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/output b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/output new file mode 100644 index 0000000..757c53a --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/LL-star/output @@ -0,0 +1,2 @@ +bar is a declaration +foo is a definition diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/Combined.g b/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/Combined.g new file mode 100644 index 0000000..4f751f5 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/Combined.g @@ -0,0 +1,26 @@ +grammar Combined; + +options { + language=ObjC; +} + +stat: identifier+ ; + +identifier + : ID + ; + + +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + ; + +INT : ('0'..'9')+ + ; + +WS : ( ' ' + | '\t' + | '\r' + | '\n' + )+ + { $channel=99; } + ; diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/Combined.tokens b/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/Combined.tokens new file mode 100644 index 0000000..b1a8490 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/Combined.tokens @@ -0,0 +1,3 @@ +INT=5 +WS=6 +ID=4 diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/CombinedLexer.h b/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/CombinedLexer.h new file mode 100644 index 0000000..1827feb --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/CombinedLexer.h @@ -0,0 +1,28 @@ +// $ANTLR 3.0 Combined.g 2007-07-25 20:12:40 + +#import +#import + + +#pragma mark Rule return scopes start +#pragma mark Rule return scopes end + +#pragma mark Tokens +#define CombinedLexer_INT 5 +#define CombinedLexer_EOF -1 +#define CombinedLexer_WS 6 +#define CombinedLexer_Tokens 7 +#define CombinedLexer_ID 4 + +@interface CombinedLexer : ANTLRLexer { +} + + +- (void) mID; +- (void) mINT; +- (void) mWS; +- (void) mTokens; + + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/CombinedLexer.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/CombinedLexer.m new file mode 100644 index 0000000..5882811 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/CombinedLexer.m @@ -0,0 +1,328 @@ +// $ANTLR 3.0 Combined.g 2007-07-25 20:12:40 + +#import "CombinedLexer.h" + +/** As per Terence: No returns for lexer rules! +#pragma mark Rule return scopes start +#pragma mark Rule return scopes end +*/ +@implementation CombinedLexer + + +- (id) initWithCharStream:(id)anInput +{ + if (nil!=(self = [super initWithCharStream:anInput])) { + } + return self; +} + +- (void) dealloc +{ + [super dealloc]; +} + +- (NSString *) grammarFileName +{ + return @"Combined.g"; +} + + +- (void) mID +{ + @try { + ruleNestingLevel++; + int _type = CombinedLexer_ID; + // Combined.g:14:9: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )* ) // ruleBlockSingleAlt + // Combined.g:14:9: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )* // alt + { + if (([input LA:1]>='A' && [input LA:1]<='Z')||[input LA:1]=='_'||([input LA:1]>='a' && [input LA:1]<='z')) { + [input consume]; + + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + do { + int alt1=2; + { + int LA1_0 = [input LA:1]; + if ( (LA1_0>='0' && LA1_0<='9')||(LA1_0>='A' && LA1_0<='Z')||LA1_0=='_'||(LA1_0>='a' && LA1_0<='z') ) { + alt1 = 1; + } + + } + switch (alt1) { + case 1 : + // Combined.g: // alt + { + if (([input LA:1]>='0' && [input LA:1]<='9')||([input LA:1]>='A' && [input LA:1]<='Z')||[input LA:1]=='_'||([input LA:1]>='a' && [input LA:1]<='z')) { + [input consume]; + + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + + } + break; + + default : + goto loop1; + } + } while (YES); loop1: ; + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end ID + + +- (void) mINT +{ + @try { + ruleNestingLevel++; + int _type = CombinedLexer_INT; + // Combined.g:17:9: ( ( '0' .. '9' )+ ) // ruleBlockSingleAlt + // Combined.g:17:9: ( '0' .. '9' )+ // alt + { + // Combined.g:17:9: ( '0' .. '9' )+ // positiveClosureBlock + int cnt2=0; + + do { + int alt2=2; + { + int LA2_0 = [input LA:1]; + if ( (LA2_0>='0' && LA2_0<='9') ) { + alt2 = 1; + } + + } + switch (alt2) { + case 1 : + // Combined.g:17:10: '0' .. '9' // alt + { + [self matchRangeFromChar:'0' to:'9']; + + } + break; + + default : + if ( cnt2 >= 1 ) goto loop2; + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:2]; + @throw eee; + } + cnt2++; + } while (YES); loop2: ; + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end INT + + +- (void) mWS +{ + @try { + ruleNestingLevel++; + int _type = CombinedLexer_WS; + // Combined.g:20:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) // ruleBlockSingleAlt + // Combined.g:20:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ // alt + { + // Combined.g:20:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ // positiveClosureBlock + int cnt3=0; + + do { + int alt3=2; + { + int LA3_0 = [input LA:1]; + if ( (LA3_0>='\t' && LA3_0<='\n')||LA3_0=='\r'||LA3_0==' ' ) { + alt3 = 1; + } + + } + switch (alt3) { + case 1 : + // Combined.g: // alt + { + if (([input LA:1]>='\t' && [input LA:1]<='\n')||[input LA:1]=='\r'||[input LA:1]==' ') { + [input consume]; + + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + + } + break; + + default : + if ( cnt3 >= 1 ) goto loop3; + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:3]; + @throw eee; + } + cnt3++; + } while (YES); loop3: ; + + _channel=99; + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end WS + +- (void) mTokens +{ + // Combined.g:1:10: ( ID | INT | WS ) //ruleblock + int alt4=3; + switch ([input LA:1]) { + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + alt4 = 1; + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + alt4 = 2; + break; + case '\t': + case '\n': + case '\r': + case ' ': + alt4 = 3; + break; + default: + { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:4 state:0 stream:input]; + @throw nvae; + + }} + switch (alt4) { + case 1 : + // Combined.g:1:10: ID // alt + { + [self mID]; + + + + } + break; + case 2 : + // Combined.g:1:13: INT // alt + { + [self mINT]; + + + + } + break; + case 3 : + // Combined.g:1:17: WS // alt + { + [self mWS]; + + + + } + break; + + } + +} + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/CombinedParser.h b/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/CombinedParser.h new file mode 100644 index 0000000..67f3b2b --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/CombinedParser.h @@ -0,0 +1,33 @@ +// $ANTLR 3.0 Combined.g 2007-07-25 20:12:40 + +#import +#import + + + +#pragma mark Tokens +#define CombinedParser_INT 5 +#define CombinedParser_WS 6 +#define CombinedParser_EOF -1 +#define CombinedParser_ID 4 + +#pragma mark Dynamic Global Scopes + +#pragma mark Dynamic Rule Scopes + +#pragma mark Rule Return Scopes + + +@interface CombinedParser : ANTLRParser { + + + + } + + +- (void) stat; +- (void) identifier; + + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/CombinedParser.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/CombinedParser.m new file mode 100644 index 0000000..cbc5654 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/CombinedParser.m @@ -0,0 +1,141 @@ +// $ANTLR 3.0 Combined.g 2007-07-25 20:12:40 + +#import "CombinedParser.h" + + +#pragma mark Bitsets +const static unsigned long long FOLLOW_identifier_in_stat20_data[] = {0x0000000000000012LL}; +static ANTLRBitSet *FOLLOW_identifier_in_stat20; +const static unsigned long long FOLLOW_CombinedParser_ID_in_identifier35_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_CombinedParser_ID_in_identifier35; + + +#pragma mark Dynamic Global Scopes + +#pragma mark Dynamic Rule Scopes + +#pragma mark Rule return scopes start + +@implementation CombinedParser + ++ (void) initialize +{ + FOLLOW_identifier_in_stat20 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_identifier_in_stat20_data count:1]; + FOLLOW_CombinedParser_ID_in_identifier35 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_CombinedParser_ID_in_identifier35_data count:1]; + +} + +- (id) initWithTokenStream:(id)aStream +{ + if ((self = [super initWithTokenStream:aStream])) { + + tokenNames = [[NSArray alloc] initWithObjects:@"", @"", @"", @"", + @"ID", @"INT", @"WS", nil]; + + + } + return self; +} + +- (void) dealloc +{ + [tokenNames release]; + + [super dealloc]; +} + +- (NSString *) grammarFileName +{ + return @"Combined.g"; +} + + +// $ANTLR start stat +// Combined.g:7:1: stat : ( identifier )+ ; +- (void) stat +{ + @try { + // Combined.g:7:7: ( ( identifier )+ ) // ruleBlockSingleAlt + // Combined.g:7:7: ( identifier )+ // alt + { + // Combined.g:7:7: ( identifier )+ // positiveClosureBlock + int cnt1=0; + + do { + int alt1=2; + { + int LA1_0 = [input LA:1]; + if ( LA1_0==CombinedParser_ID ) { + alt1 = 1; + } + + } + switch (alt1) { + case 1 : + // Combined.g:7:7: identifier // alt + { + [following addObject:FOLLOW_identifier_in_stat20]; + [self identifier]; + [following removeLastObject]; + + + + } + break; + + default : + if ( cnt1 >= 1 ) goto loop1; + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:1]; + @throw eee; + } + cnt1++; + } while (YES); loop1: ; + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end stat + +// $ANTLR start identifier +// Combined.g:9:1: identifier : ID ; +- (void) identifier +{ + @try { + // Combined.g:10:7: ( ID ) // ruleBlockSingleAlt + // Combined.g:10:7: ID // alt + { + [self match:input tokenType:CombinedParser_ID follow:FOLLOW_CombinedParser_ID_in_identifier35]; + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end identifier + + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/Combined__.gl b/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/Combined__.gl new file mode 100644 index 0000000..0431c95 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/Combined__.gl @@ -0,0 +1,22 @@ +lexer grammar Combined; +options { + language=ObjC; + +} + +// $ANTLR src "Combined.g" 14 +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + ; + +// $ANTLR src "Combined.g" 17 +INT : ('0'..'9')+ + ; + +// $ANTLR src "Combined.g" 20 +WS : ( ' ' + | '\t' + | '\r' + | '\n' + )+ + { $channel=99; } + ; diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/main.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/main.m new file mode 100644 index 0000000..7a54820 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/combined/main.m @@ -0,0 +1,21 @@ +#import +#import "CombinedLexer.h" +#import + +int main(int argc, const char * argv[]) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSString *string = @"xyyyyaxyyyyb"; + NSLog(@"%@", string); + ANTLRStringStream *stream = [[ANTLRStringStream alloc] initWithStringNoCopy:string]; + CombinedLexer *lexer = [[CombinedLexer alloc] initWithCharStream:stream]; + id currentToken; + while ((currentToken = [lexer nextToken]) && [currentToken type] != ANTLRTokenTypeEOF) { + NSLog(@"%@", currentToken); + } + [lexer release]; + [stream release]; + + [pool release]; + return 0; +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/FuzzyJava.gl b/antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/FuzzyJava.gl new file mode 100644 index 0000000..4e4eddf --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/FuzzyJava.gl @@ -0,0 +1,160 @@ +lexer grammar FuzzyJava; +options {filter=true; language=ObjC;} + +IMPORT + : 'import' WS name=QIDStar WS? ';' + ; + +/** Avoids having "return foo;" match as a field */ +RETURN + : 'return' (options {greedy=false;}:.)* ';' + ; + +CLASS + : 'class' WS name=ID WS? ('extends' WS QID WS?)? + ('implements' WS QID WS? (',' WS? QID WS?)*)? '{' + {NSLog(@"found class \%@", $name.text);} + ; + +METHOD + : TYPE WS name=ID WS? '(' ( ARG WS? (',' WS? ARG WS?)* )? ')' WS? + ('throws' WS QID WS? (',' WS? QID WS?)*)? '{' + {NSLog(@"found method \%@", $name.text);} + ; + +FIELD + : TYPE WS name=ID '[]'? WS? (';'|'=') + {NSLog(@"found var \%@", $name.text);} + ; + +STAT: ('if'|'while'|'switch'|'for') WS? '(' ; + +CALL + : name=QID WS? '(' + {/*ignore if this/super */ NSLog(@"found call \%@",$name.text);} + ; + +COMMENT + : '/*' (options {greedy=false;} : . )* '*/' + {NSLog(@"found comment \%@", [self text]);} + ; + +SL_COMMENT + : '//' (options {greedy=false;} : . )* '\n' + {NSLog(@"found // comment \%@", [self text]);} + ; + +STRING + : '"' (options {greedy=false;}: ESC | .)* '"' + ; + +CHAR + : '\'' (options {greedy=false;}: ESC | .)* '\'' + ; + +WS : (' '|'\t'|'\n')+ + ; + +fragment +QID : ID ('.' ID)* + ; + +/** QID cannot see beyond end of token so using QID '.*'? somewhere won't + * ever match since k=1 lookahead in the QID loop of '.' will make it loop. + * I made this rule to compensate. + */ +fragment +QIDStar + : ID ('.' ID)* '.*'? + ; + +fragment +TYPE: QID '[]'? + ; + +fragment +ARG : TYPE WS ID + ; + +fragment +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* + ; + +fragment +ESC : '\\' ('"'|'\''|'\\') + ; + +/* Must peel these off first so they are not IDs. Must also distinguish + * between return foo; and typename foo; +KEYWORD +@init {NSLog("KEYWORD: "+(char)input.LA(1));} + : 'abstract' + | 'assert' + | 'boolean' + | 'break' + | 'byte' + | 'case' + | 'catch' + | 'char' + | 'class' + | 'const' + | 'continue' + | 'default' + | 'do' + | 'double' + | 'else' + | 'enum' + | 'extends' + | 'false' + | 'final' + | 'finally' + | 'float' + | 'for' + | 'goto' + | 'if' + | 'implements' + | 'import' + | 'instanceof' + | 'int' + | 'interface' + | 'long' + | 'native' + | 'new' + | 'null' + | 'package' + | 'private' + | 'protected' + | 'public' + | 'return' {NSLog("found return");} + | 'short' + | 'static' + | 'strictfp' + | 'super' + | 'switch' + | 'synchronized' + | 'this' + | 'throw' + | 'throws' + | 'transient' + | 'true' + | 'try' + | 'void' + | 'volatile' + | 'while' + ; +*/ + +/* +MAIN +//options {k=2;} + : (KEYWORD)=>KEYWORD + | (FIELD)=>FIELD + | (METHOD)=>METHOD + | STRING + | COMMENT + | SL_COMMENT + | WS +// | . + ; + */ + diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/FuzzyJava.tokens b/antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/FuzzyJava.tokens new file mode 100644 index 0000000..a3fd8ba --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/FuzzyJava.tokens @@ -0,0 +1,19 @@ +QIDStar=5 +TYPE=11 +STAT=15 +WS=4 +CHAR=21 +QID=9 +STRING=20 +METHOD=13 +COMMENT=17 +ESC=19 +IMPORT=6 +FIELD=14 +CLASS=10 +RETURN=7 +ARG=12 +CALL=16 +Tokens=22 +SL_COMMENT=18 +ID=8 diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/FuzzyJavaLexer.h b/antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/FuzzyJavaLexer.h new file mode 100644 index 0000000..3fe95a0 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/FuzzyJavaLexer.h @@ -0,0 +1,76 @@ +// $ANTLR 3.0 FuzzyJava.gl 2007-07-25 20:12:38 + +#import +#import + + +#pragma mark Rule return scopes start +#pragma mark Rule return scopes end + +#pragma mark Tokens +#define FuzzyJavaLexer_QIDStar 5 +#define FuzzyJavaLexer_TYPE 11 +#define FuzzyJavaLexer_STAT 15 +#define FuzzyJavaLexer_WS 4 +#define FuzzyJavaLexer_CHAR 21 +#define FuzzyJavaLexer_QID 9 +#define FuzzyJavaLexer_STRING 20 +#define FuzzyJavaLexer_METHOD 13 +#define FuzzyJavaLexer_COMMENT 17 +#define FuzzyJavaLexer_ESC 19 +#define FuzzyJavaLexer_IMPORT 6 +#define FuzzyJavaLexer_FIELD 14 +#define FuzzyJavaLexer_CLASS 10 +#define FuzzyJavaLexer_RETURN 7 +#define FuzzyJavaLexer_ARG 12 +#define FuzzyJavaLexer_EOF -1 +#define FuzzyJavaLexer_CALL 16 +#define FuzzyJavaLexer_Tokens 22 +#define FuzzyJavaLexer_SL_COMMENT 18 +#define FuzzyJavaLexer_ID 8 + +@interface FuzzyJavaLexer : ANTLRLexer { + SEL synpred4SyntacticPredicate; + SEL synpred9SyntacticPredicate; + SEL synpred2SyntacticPredicate; + SEL synpred7SyntacticPredicate; + SEL synpred3SyntacticPredicate; + SEL synpred1SyntacticPredicate; + SEL synpred5SyntacticPredicate; + SEL synpred6SyntacticPredicate; + SEL synpred8SyntacticPredicate; +} + + +- (void) mIMPORT; +- (void) mRETURN; +- (void) mCLASS; +- (void) mMETHOD; +- (void) mFIELD; +- (void) mSTAT; +- (void) mCALL; +- (void) mCOMMENT; +- (void) mSL_COMMENT; +- (void) mSTRING; +- (void) mCHAR; +- (void) mWS; +- (void) mQID; +- (void) mQIDStar; +- (void) mTYPE; +- (void) mARG; +- (void) mID; +- (void) mESC; +- (void) mTokens; +- (void) synpred1; +- (void) synpred2; +- (void) synpred3; +- (void) synpred4; +- (void) synpred5; +- (void) synpred6; +- (void) synpred7; +- (void) synpred8; +- (void) synpred9; + + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/FuzzyJavaLexer.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/FuzzyJavaLexer.m new file mode 100644 index 0000000..0b2170f --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/FuzzyJavaLexer.m @@ -0,0 +1,2174 @@ +// $ANTLR 3.0 FuzzyJava.gl 2007-07-25 20:12:38 + +#import "FuzzyJavaLexer.h" + +/** As per Terence: No returns for lexer rules! +#pragma mark Rule return scopes start +#pragma mark Rule return scopes end +*/ +@implementation FuzzyJavaLexer + + +- (id) initWithCharStream:(id)anInput +{ + if (nil!=(self = [super initWithCharStream:anInput])) { + + + + + + + + + + } + return self; +} + +- (void) dealloc +{ + [super dealloc]; +} + +- (NSString *) grammarFileName +{ + return @"FuzzyJava.gl"; +} + +- (id) nextToken +{ + while (YES) { + if ( [input LA:1] == ANTLRCharStreamEOF ) { + return nil; // should really be a +eofToken call here -> go figure + } + [self setToken:nil]; + _channel = ANTLRTokenChannelDefault; + _tokenStartLine = [input line]; + _tokenCharPositionInLine = [input charPositionInLine]; + tokenStartCharIndex = [self charIndex]; + @try { + int m = [input mark]; + backtracking = 1; + failed = NO; + [self mTokens]; + backtracking = 0; + if ( failed ) { + [input rewind:m]; + [input consume]; + } else { + return token; + } + } + @catch (ANTLRRecognitionException *re) { + // shouldn't happen in backtracking mode, but... + [self reportError:re]; + [self recover:re]; + } + } +} + +- (void) mIMPORT +{ + id _name = nil; + + @try { + ruleNestingLevel++; + int _type = FuzzyJavaLexer_IMPORT; + // FuzzyJava.gl:5:4: ( 'import' WS name= QIDStar ( WS )? ';' ) // ruleBlockSingleAlt + // FuzzyJava.gl:5:4: 'import' WS name= QIDStar ( WS )? ';' // alt + { + [self matchString:@"import"]; + if (failed) return ; + + [self mWS]; + if (failed) return ; + + int _nameStart31 = [self charIndex]; + [self mQIDStar]; + if (failed) return ; + + _name = [[ANTLRCommonToken alloc] initWithInput:input tokenType:ANTLRTokenTypeInvalid channel:ANTLRTokenChannelDefault start:_nameStart31 stop:[self charIndex]-1]; + [_name setLine:[self line]]; + // FuzzyJava.gl:5:29: ( WS )? // block + int alt1=2; + { + int LA1_0 = [input LA:1]; + if ( (LA1_0>='\t' && LA1_0<='\n')||LA1_0==' ' ) { + alt1 = 1; + } + } + switch (alt1) { + case 1 : + // FuzzyJava.gl:5:29: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + [self matchChar:';']; + if (failed) return ; + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + [_name release]; + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end IMPORT + + +- (void) mRETURN +{ + @try { + ruleNestingLevel++; + int _type = FuzzyJavaLexer_RETURN; + // FuzzyJava.gl:10:4: ( 'return' ( options {greedy=false; } : . )* ';' ) // ruleBlockSingleAlt + // FuzzyJava.gl:10:4: 'return' ( options {greedy=false; } : . )* ';' // alt + { + [self matchString:@"return"]; + if (failed) return ; + + do { + int alt2=2; + { + int LA2_0 = [input LA:1]; + if ( LA2_0==';' ) { + alt2 = 2; + } + else if ( (LA2_0>=0x0000 && LA2_0<=':')||(LA2_0>='<' && LA2_0<=0xFFFE) ) { + alt2 = 1; + } + + } + switch (alt2) { + case 1 : + // FuzzyJava.gl:10:38: . // alt + { + [self matchAny]; + if (failed) return ; + + + } + break; + + default : + goto loop2; + } + } while (YES); loop2: ; + + [self matchChar:';']; + if (failed) return ; + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end RETURN + + +- (void) mCLASS +{ + id _name = nil; + + @try { + ruleNestingLevel++; + int _type = FuzzyJavaLexer_CLASS; + // FuzzyJava.gl:14:4: ( 'class' WS name= ID ( WS )? ( 'extends' WS QID ( WS )? )? ( 'implements' WS QID ( WS )? ( ',' ( WS )? QID ( WS )? )* )? '{' ) // ruleBlockSingleAlt + // FuzzyJava.gl:14:4: 'class' WS name= ID ( WS )? ( 'extends' WS QID ( WS )? )? ( 'implements' WS QID ( WS )? ( ',' ( WS )? QID ( WS )? )* )? '{' // alt + { + [self matchString:@"class"]; + if (failed) return ; + + [self mWS]; + if (failed) return ; + + int _nameStart81 = [self charIndex]; + [self mID]; + if (failed) return ; + + _name = [[ANTLRCommonToken alloc] initWithInput:input tokenType:ANTLRTokenTypeInvalid channel:ANTLRTokenChannelDefault start:_nameStart81 stop:[self charIndex]-1]; + [_name setLine:[self line]]; + // FuzzyJava.gl:14:23: ( WS )? // block + int alt3=2; + { + int LA3_0 = [input LA:1]; + if ( (LA3_0>='\t' && LA3_0<='\n')||LA3_0==' ' ) { + alt3 = 1; + } + } + switch (alt3) { + case 1 : + // FuzzyJava.gl:14:23: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + // FuzzyJava.gl:14:27: ( 'extends' WS QID ( WS )? )? // block + int alt5=2; + { + int LA5_0 = [input LA:1]; + if ( LA5_0=='e' ) { + alt5 = 1; + } + } + switch (alt5) { + case 1 : + // FuzzyJava.gl:14:28: 'extends' WS QID ( WS )? // alt + { + [self matchString:@"extends"]; + if (failed) return ; + + [self mWS]; + if (failed) return ; + + [self mQID]; + if (failed) return ; + + // FuzzyJava.gl:14:45: ( WS )? // block + int alt4=2; + { + int LA4_0 = [input LA:1]; + if ( (LA4_0>='\t' && LA4_0<='\n')||LA4_0==' ' ) { + alt4 = 1; + } + } + switch (alt4) { + case 1 : + // FuzzyJava.gl:14:45: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + + } + break; + + } + + // FuzzyJava.gl:15:3: ( 'implements' WS QID ( WS )? ( ',' ( WS )? QID ( WS )? )* )? // block + int alt10=2; + { + int LA10_0 = [input LA:1]; + if ( LA10_0=='i' ) { + alt10 = 1; + } + } + switch (alt10) { + case 1 : + // FuzzyJava.gl:15:4: 'implements' WS QID ( WS )? ( ',' ( WS )? QID ( WS )? )* // alt + { + [self matchString:@"implements"]; + if (failed) return ; + + [self mWS]; + if (failed) return ; + + [self mQID]; + if (failed) return ; + + // FuzzyJava.gl:15:24: ( WS )? // block + int alt6=2; + { + int LA6_0 = [input LA:1]; + if ( (LA6_0>='\t' && LA6_0<='\n')||LA6_0==' ' ) { + alt6 = 1; + } + } + switch (alt6) { + case 1 : + // FuzzyJava.gl:15:24: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + do { + int alt9=2; + { + int LA9_0 = [input LA:1]; + if ( LA9_0==',' ) { + alt9 = 1; + } + + } + switch (alt9) { + case 1 : + // FuzzyJava.gl:15:29: ',' ( WS )? QID ( WS )? // alt + { + [self matchChar:',']; + if (failed) return ; + + // FuzzyJava.gl:15:33: ( WS )? // block + int alt7=2; + { + int LA7_0 = [input LA:1]; + if ( (LA7_0>='\t' && LA7_0<='\n')||LA7_0==' ' ) { + alt7 = 1; + } + } + switch (alt7) { + case 1 : + // FuzzyJava.gl:15:33: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + [self mQID]; + if (failed) return ; + + // FuzzyJava.gl:15:41: ( WS )? // block + int alt8=2; + { + int LA8_0 = [input LA:1]; + if ( (LA8_0>='\t' && LA8_0<='\n')||LA8_0==' ' ) { + alt8 = 1; + } + } + switch (alt8) { + case 1 : + // FuzzyJava.gl:15:41: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + + } + break; + + default : + goto loop9; + } + } while (YES); loop9: ; + + + } + break; + + } + + [self matchChar:'{']; + if (failed) return ; + + if ( backtracking==1 ) { + NSLog(@"found class %@", [_name text]); + } + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + [_name release]; + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end CLASS + + +- (void) mMETHOD +{ + id _name = nil; + + @try { + ruleNestingLevel++; + int _type = FuzzyJavaLexer_METHOD; + // FuzzyJava.gl:20:9: ( TYPE WS name= ID ( WS )? '(' ( ARG ( WS )? ( ',' ( WS )? ARG ( WS )? )* )? ')' ( WS )? ( 'throws' WS QID ( WS )? ( ',' ( WS )? QID ( WS )? )* )? '{' ) // ruleBlockSingleAlt + // FuzzyJava.gl:20:9: TYPE WS name= ID ( WS )? '(' ( ARG ( WS )? ( ',' ( WS )? ARG ( WS )? )* )? ')' ( WS )? ( 'throws' WS QID ( WS )? ( ',' ( WS )? QID ( WS )? )* )? '{' // alt + { + [self mTYPE]; + if (failed) return ; + + [self mWS]; + if (failed) return ; + + int _nameStart158 = [self charIndex]; + [self mID]; + if (failed) return ; + + _name = [[ANTLRCommonToken alloc] initWithInput:input tokenType:ANTLRTokenTypeInvalid channel:ANTLRTokenChannelDefault start:_nameStart158 stop:[self charIndex]-1]; + [_name setLine:[self line]]; + // FuzzyJava.gl:20:25: ( WS )? // block + int alt11=2; + { + int LA11_0 = [input LA:1]; + if ( (LA11_0>='\t' && LA11_0<='\n')||LA11_0==' ' ) { + alt11 = 1; + } + } + switch (alt11) { + case 1 : + // FuzzyJava.gl:20:25: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + [self matchChar:'(']; + if (failed) return ; + + // FuzzyJava.gl:20:33: ( ARG ( WS )? ( ',' ( WS )? ARG ( WS )? )* )? // block + int alt16=2; + { + int LA16_0 = [input LA:1]; + if ( (LA16_0>='A' && LA16_0<='Z')||LA16_0=='_'||(LA16_0>='a' && LA16_0<='z') ) { + alt16 = 1; + } + } + switch (alt16) { + case 1 : + // FuzzyJava.gl:20:35: ARG ( WS )? ( ',' ( WS )? ARG ( WS )? )* // alt + { + [self mARG]; + if (failed) return ; + + // FuzzyJava.gl:20:39: ( WS )? // block + int alt12=2; + { + int LA12_0 = [input LA:1]; + if ( (LA12_0>='\t' && LA12_0<='\n')||LA12_0==' ' ) { + alt12 = 1; + } + } + switch (alt12) { + case 1 : + // FuzzyJava.gl:20:39: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + do { + int alt15=2; + { + int LA15_0 = [input LA:1]; + if ( LA15_0==',' ) { + alt15 = 1; + } + + } + switch (alt15) { + case 1 : + // FuzzyJava.gl:20:44: ',' ( WS )? ARG ( WS )? // alt + { + [self matchChar:',']; + if (failed) return ; + + // FuzzyJava.gl:20:48: ( WS )? // block + int alt13=2; + { + int LA13_0 = [input LA:1]; + if ( (LA13_0>='\t' && LA13_0<='\n')||LA13_0==' ' ) { + alt13 = 1; + } + } + switch (alt13) { + case 1 : + // FuzzyJava.gl:20:48: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + [self mARG]; + if (failed) return ; + + // FuzzyJava.gl:20:56: ( WS )? // block + int alt14=2; + { + int LA14_0 = [input LA:1]; + if ( (LA14_0>='\t' && LA14_0<='\n')||LA14_0==' ' ) { + alt14 = 1; + } + } + switch (alt14) { + case 1 : + // FuzzyJava.gl:20:56: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + + } + break; + + default : + goto loop15; + } + } while (YES); loop15: ; + + + } + break; + + } + + [self matchChar:')']; + if (failed) return ; + + // FuzzyJava.gl:20:69: ( WS )? // block + int alt17=2; + { + int LA17_0 = [input LA:1]; + if ( (LA17_0>='\t' && LA17_0<='\n')||LA17_0==' ' ) { + alt17 = 1; + } + } + switch (alt17) { + case 1 : + // FuzzyJava.gl:20:69: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + // FuzzyJava.gl:21:8: ( 'throws' WS QID ( WS )? ( ',' ( WS )? QID ( WS )? )* )? // block + int alt22=2; + { + int LA22_0 = [input LA:1]; + if ( LA22_0=='t' ) { + alt22 = 1; + } + } + switch (alt22) { + case 1 : + // FuzzyJava.gl:21:9: 'throws' WS QID ( WS )? ( ',' ( WS )? QID ( WS )? )* // alt + { + [self matchString:@"throws"]; + if (failed) return ; + + [self mWS]; + if (failed) return ; + + [self mQID]; + if (failed) return ; + + // FuzzyJava.gl:21:25: ( WS )? // block + int alt18=2; + { + int LA18_0 = [input LA:1]; + if ( (LA18_0>='\t' && LA18_0<='\n')||LA18_0==' ' ) { + alt18 = 1; + } + } + switch (alt18) { + case 1 : + // FuzzyJava.gl:21:25: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + do { + int alt21=2; + { + int LA21_0 = [input LA:1]; + if ( LA21_0==',' ) { + alt21 = 1; + } + + } + switch (alt21) { + case 1 : + // FuzzyJava.gl:21:30: ',' ( WS )? QID ( WS )? // alt + { + [self matchChar:',']; + if (failed) return ; + + // FuzzyJava.gl:21:34: ( WS )? // block + int alt19=2; + { + int LA19_0 = [input LA:1]; + if ( (LA19_0>='\t' && LA19_0<='\n')||LA19_0==' ' ) { + alt19 = 1; + } + } + switch (alt19) { + case 1 : + // FuzzyJava.gl:21:34: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + [self mQID]; + if (failed) return ; + + // FuzzyJava.gl:21:42: ( WS )? // block + int alt20=2; + { + int LA20_0 = [input LA:1]; + if ( (LA20_0>='\t' && LA20_0<='\n')||LA20_0==' ' ) { + alt20 = 1; + } + } + switch (alt20) { + case 1 : + // FuzzyJava.gl:21:42: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + + } + break; + + default : + goto loop21; + } + } while (YES); loop21: ; + + + } + break; + + } + + [self matchChar:'{']; + if (failed) return ; + + if ( backtracking==1 ) { + NSLog(@"found method %@", [_name text]); + } + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + [_name release]; + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end METHOD + + +- (void) mFIELD +{ + id _name = nil; + + @try { + ruleNestingLevel++; + int _type = FuzzyJavaLexer_FIELD; + // FuzzyJava.gl:26:9: ( TYPE WS name= ID ( '[]' )? ( WS )? ( ';' | '=' ) ) // ruleBlockSingleAlt + // FuzzyJava.gl:26:9: TYPE WS name= ID ( '[]' )? ( WS )? ( ';' | '=' ) // alt + { + [self mTYPE]; + if (failed) return ; + + [self mWS]; + if (failed) return ; + + int _nameStart261 = [self charIndex]; + [self mID]; + if (failed) return ; + + _name = [[ANTLRCommonToken alloc] initWithInput:input tokenType:ANTLRTokenTypeInvalid channel:ANTLRTokenChannelDefault start:_nameStart261 stop:[self charIndex]-1]; + [_name setLine:[self line]]; + // FuzzyJava.gl:26:25: ( '[]' )? // block + int alt23=2; + { + int LA23_0 = [input LA:1]; + if ( LA23_0=='[' ) { + alt23 = 1; + } + } + switch (alt23) { + case 1 : + // FuzzyJava.gl:26:25: '[]' // alt + { + [self matchString:@"[]"]; + if (failed) return ; + + + } + break; + + } + + // FuzzyJava.gl:26:31: ( WS )? // block + int alt24=2; + { + int LA24_0 = [input LA:1]; + if ( (LA24_0>='\t' && LA24_0<='\n')||LA24_0==' ' ) { + alt24 = 1; + } + } + switch (alt24) { + case 1 : + // FuzzyJava.gl:26:31: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + if ([input LA:1]==';'||[input LA:1]=='=') { + [input consume]; + failed = NO; + } else { + if (backtracking > 0) {failed=YES; return ;} + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + if ( backtracking==1 ) { + NSLog(@"found var %@", [_name text]); + } + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + [_name release]; + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end FIELD + + +- (void) mSTAT +{ + @try { + ruleNestingLevel++; + int _type = FuzzyJavaLexer_STAT; + // FuzzyJava.gl:30:7: ( ( 'if' | 'while' | 'switch' | 'for' ) ( WS )? '(' ) // ruleBlockSingleAlt + // FuzzyJava.gl:30:7: ( 'if' | 'while' | 'switch' | 'for' ) ( WS )? '(' // alt + { + // FuzzyJava.gl:30:7: ( 'if' | 'while' | 'switch' | 'for' ) // block + int alt25=4; + switch ([input LA:1]) { + case 'i': + alt25 = 1; + break; + case 'w': + alt25 = 2; + break; + case 's': + alt25 = 3; + break; + case 'f': + alt25 = 4; + break; + default: + { + if (backtracking > 0) {failed=YES; return ;} + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:25 state:0 stream:input]; + @throw nvae; + + }} + switch (alt25) { + case 1 : + // FuzzyJava.gl:30:8: 'if' // alt + { + [self matchString:@"if"]; + if (failed) return ; + + + } + break; + case 2 : + // FuzzyJava.gl:30:13: 'while' // alt + { + [self matchString:@"while"]; + if (failed) return ; + + + } + break; + case 3 : + // FuzzyJava.gl:30:21: 'switch' // alt + { + [self matchString:@"switch"]; + if (failed) return ; + + + } + break; + case 4 : + // FuzzyJava.gl:30:30: 'for' // alt + { + [self matchString:@"for"]; + if (failed) return ; + + + } + break; + + } + + // FuzzyJava.gl:30:37: ( WS )? // block + int alt26=2; + { + int LA26_0 = [input LA:1]; + if ( (LA26_0>='\t' && LA26_0<='\n')||LA26_0==' ' ) { + alt26 = 1; + } + } + switch (alt26) { + case 1 : + // FuzzyJava.gl:30:37: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + [self matchChar:'(']; + if (failed) return ; + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end STAT + + +- (void) mCALL +{ + id _name = nil; + + @try { + ruleNestingLevel++; + int _type = FuzzyJavaLexer_CALL; + // FuzzyJava.gl:33:9: (name= QID ( WS )? '(' ) // ruleBlockSingleAlt + // FuzzyJava.gl:33:9: name= QID ( WS )? '(' // alt + { + int _nameStart326 = [self charIndex]; + [self mQID]; + if (failed) return ; + + _name = [[ANTLRCommonToken alloc] initWithInput:input tokenType:ANTLRTokenTypeInvalid channel:ANTLRTokenChannelDefault start:_nameStart326 stop:[self charIndex]-1]; + [_name setLine:[self line]]; + // FuzzyJava.gl:33:18: ( WS )? // block + int alt27=2; + { + int LA27_0 = [input LA:1]; + if ( (LA27_0>='\t' && LA27_0<='\n')||LA27_0==' ' ) { + alt27 = 1; + } + } + switch (alt27) { + case 1 : + // FuzzyJava.gl:33:18: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + [self matchChar:'(']; + if (failed) return ; + + if ( backtracking==1 ) { + /*ignore if this/super */ NSLog(@"found call %@",[_name text]); + } + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + [_name release]; + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end CALL + + +- (void) mCOMMENT +{ + @try { + ruleNestingLevel++; + int _type = FuzzyJavaLexer_COMMENT; + // FuzzyJava.gl:38:9: ( '/*' ( options {greedy=false; } : . )* '*/' ) // ruleBlockSingleAlt + // FuzzyJava.gl:38:9: '/*' ( options {greedy=false; } : . )* '*/' // alt + { + [self matchString:@"/*"]; + if (failed) return ; + + do { + int alt28=2; + { + int LA28_0 = [input LA:1]; + if ( LA28_0=='*' ) { + { + int LA28_1 = [input LA:2]; + if ( LA28_1=='/' ) { + alt28 = 2; + } + else if ( (LA28_1>=0x0000 && LA28_1<='.')||(LA28_1>='0' && LA28_1<=0xFFFE) ) { + alt28 = 1; + } + + } + } + else if ( (LA28_0>=0x0000 && LA28_0<=')')||(LA28_0>='+' && LA28_0<=0xFFFE) ) { + alt28 = 1; + } + + } + switch (alt28) { + case 1 : + // FuzzyJava.gl:38:41: . // alt + { + [self matchAny]; + if (failed) return ; + + + } + break; + + default : + goto loop28; + } + } while (YES); loop28: ; + + [self matchString:@"*/"]; + if (failed) return ; + + if ( backtracking==1 ) { + NSLog(@"found comment %@", [self text]); + } + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end COMMENT + + +- (void) mSL_COMMENT +{ + @try { + ruleNestingLevel++; + int _type = FuzzyJavaLexer_SL_COMMENT; + // FuzzyJava.gl:43:9: ( '//' ( options {greedy=false; } : . )* '\\n' ) // ruleBlockSingleAlt + // FuzzyJava.gl:43:9: '//' ( options {greedy=false; } : . )* '\\n' // alt + { + [self matchString:@"//"]; + if (failed) return ; + + do { + int alt29=2; + { + int LA29_0 = [input LA:1]; + if ( LA29_0=='\n' ) { + alt29 = 2; + } + else if ( (LA29_0>=0x0000 && LA29_0<='\t')||(LA29_0>=0x000B && LA29_0<=0xFFFE) ) { + alt29 = 1; + } + + } + switch (alt29) { + case 1 : + // FuzzyJava.gl:43:41: . // alt + { + [self matchAny]; + if (failed) return ; + + + } + break; + + default : + goto loop29; + } + } while (YES); loop29: ; + + [self matchChar:'\n']; + if (failed) return ; + + if ( backtracking==1 ) { + NSLog(@"found // comment %@", [self text]); + } + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end SL_COMMENT + + +- (void) mSTRING +{ + @try { + ruleNestingLevel++; + int _type = FuzzyJavaLexer_STRING; + // FuzzyJava.gl:48:4: ( '\"' ( options {greedy=false; } : ESC | . )* '\"' ) // ruleBlockSingleAlt + // FuzzyJava.gl:48:4: '\"' ( options {greedy=false; } : ESC | . )* '\"' // alt + { + [self matchChar:'"']; + if (failed) return ; + + do { + int alt30=3; + { + int LA30_0 = [input LA:1]; + if ( LA30_0=='"' ) { + alt30 = 3; + } + else if ( LA30_0=='\\' ) { + { + int LA30_2 = [input LA:2]; + if ( LA30_2=='"' ) { + alt30 = 1; + } + else if ( LA30_2=='\\' ) { + alt30 = 1; + } + else if ( LA30_2=='\'' ) { + alt30 = 1; + } + else if ( (LA30_2>=0x0000 && LA30_2<='!')||(LA30_2>='#' && LA30_2<='&')||(LA30_2>='(' && LA30_2<='[')||(LA30_2>=']' && LA30_2<=0xFFFE) ) { + alt30 = 2; + } + + } + } + else if ( (LA30_0>=0x0000 && LA30_0<='!')||(LA30_0>='#' && LA30_0<='[')||(LA30_0>=']' && LA30_0<=0xFFFE) ) { + alt30 = 2; + } + + } + switch (alt30) { + case 1 : + // FuzzyJava.gl:48:34: ESC // alt + { + [self mESC]; + if (failed) return ; + + + } + break; + case 2 : + // FuzzyJava.gl:48:40: . // alt + { + [self matchAny]; + if (failed) return ; + + + } + break; + + default : + goto loop30; + } + } while (YES); loop30: ; + + [self matchChar:'"']; + if (failed) return ; + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end STRING + + +- (void) mCHAR +{ + @try { + ruleNestingLevel++; + int _type = FuzzyJavaLexer_CHAR; + // FuzzyJava.gl:52:4: ( '\\'' ( options {greedy=false; } : ESC | . )* '\\'' ) // ruleBlockSingleAlt + // FuzzyJava.gl:52:4: '\\'' ( options {greedy=false; } : ESC | . )* '\\'' // alt + { + [self matchChar:'\'']; + if (failed) return ; + + do { + int alt31=3; + { + int LA31_0 = [input LA:1]; + if ( LA31_0=='\'' ) { + alt31 = 3; + } + else if ( LA31_0=='\\' ) { + { + int LA31_2 = [input LA:2]; + if ( LA31_2=='\'' ) { + alt31 = 1; + } + else if ( LA31_2=='\\' ) { + alt31 = 1; + } + else if ( LA31_2=='"' ) { + alt31 = 1; + } + else if ( (LA31_2>=0x0000 && LA31_2<='!')||(LA31_2>='#' && LA31_2<='&')||(LA31_2>='(' && LA31_2<='[')||(LA31_2>=']' && LA31_2<=0xFFFE) ) { + alt31 = 2; + } + + } + } + else if ( (LA31_0>=0x0000 && LA31_0<='&')||(LA31_0>='(' && LA31_0<='[')||(LA31_0>=']' && LA31_0<=0xFFFE) ) { + alt31 = 2; + } + + } + switch (alt31) { + case 1 : + // FuzzyJava.gl:52:35: ESC // alt + { + [self mESC]; + if (failed) return ; + + + } + break; + case 2 : + // FuzzyJava.gl:52:41: . // alt + { + [self matchAny]; + if (failed) return ; + + + } + break; + + default : + goto loop31; + } + } while (YES); loop31: ; + + [self matchChar:'\'']; + if (failed) return ; + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end CHAR + + +- (void) mWS +{ + @try { + ruleNestingLevel++; + int _type = FuzzyJavaLexer_WS; + // FuzzyJava.gl:55:9: ( ( ' ' | '\\t' | '\\n' )+ ) // ruleBlockSingleAlt + // FuzzyJava.gl:55:9: ( ' ' | '\\t' | '\\n' )+ // alt + { + // FuzzyJava.gl:55:9: ( ' ' | '\\t' | '\\n' )+ // positiveClosureBlock + int cnt32=0; + + do { + int alt32=2; + { + int LA32_0 = [input LA:1]; + if ( (LA32_0>='\t' && LA32_0<='\n')||LA32_0==' ' ) { + alt32 = 1; + } + + } + switch (alt32) { + case 1 : + // FuzzyJava.gl: // alt + { + if (([input LA:1]>='\t' && [input LA:1]<='\n')||[input LA:1]==' ') { + [input consume]; + failed = NO; + } else { + if (backtracking > 0) {failed=YES; return ;} + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + + } + break; + + default : + if ( cnt32 >= 1 ) goto loop32; + if (backtracking > 0) {failed=YES; return ;} + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:32]; + @throw eee; + } + cnt32++; + } while (YES); loop32: ; + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end WS + + +- (void) mQID +{ + @try { + ruleNestingLevel++; + // FuzzyJava.gl:59:7: ( ID ( '.' ID )* ) // ruleBlockSingleAlt + // FuzzyJava.gl:59:7: ID ( '.' ID )* // alt + { + [self mID]; + if (failed) return ; + + do { + int alt33=2; + { + int LA33_0 = [input LA:1]; + if ( LA33_0=='.' ) { + alt33 = 1; + } + + } + switch (alt33) { + case 1 : + // FuzzyJava.gl:59:11: '.' ID // alt + { + [self matchChar:'.']; + if (failed) return ; + + [self mID]; + if (failed) return ; + + + } + break; + + default : + goto loop33; + } + } while (YES); loop33: ; + + + } + + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end QID + + +- (void) mQIDStar +{ + @try { + ruleNestingLevel++; + // FuzzyJava.gl:68:4: ( ID ( '.' ID )* ( '.*' )? ) // ruleBlockSingleAlt + // FuzzyJava.gl:68:4: ID ( '.' ID )* ( '.*' )? // alt + { + [self mID]; + if (failed) return ; + + do { + int alt34=2; + { + int LA34_0 = [input LA:1]; + if ( LA34_0=='.' ) { + { + int LA34_1 = [input LA:2]; + if ( (LA34_1>='A' && LA34_1<='Z')||LA34_1=='_'||(LA34_1>='a' && LA34_1<='z') ) { + alt34 = 1; + } + + } + } + + } + switch (alt34) { + case 1 : + // FuzzyJava.gl:68:8: '.' ID // alt + { + [self matchChar:'.']; + if (failed) return ; + + [self mID]; + if (failed) return ; + + + } + break; + + default : + goto loop34; + } + } while (YES); loop34: ; + + // FuzzyJava.gl:68:17: ( '.*' )? // block + int alt35=2; + { + int LA35_0 = [input LA:1]; + if ( LA35_0=='.' ) { + alt35 = 1; + } + } + switch (alt35) { + case 1 : + // FuzzyJava.gl:68:17: '.*' // alt + { + [self matchString:@".*"]; + if (failed) return ; + + + } + break; + + } + + + } + + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end QIDStar + + +- (void) mTYPE +{ + @try { + ruleNestingLevel++; + // FuzzyJava.gl:72:9: ( QID ( '[]' )? ) // ruleBlockSingleAlt + // FuzzyJava.gl:72:9: QID ( '[]' )? // alt + { + [self mQID]; + if (failed) return ; + + // FuzzyJava.gl:72:13: ( '[]' )? // block + int alt36=2; + { + int LA36_0 = [input LA:1]; + if ( LA36_0=='[' ) { + alt36 = 1; + } + } + switch (alt36) { + case 1 : + // FuzzyJava.gl:72:13: '[]' // alt + { + [self matchString:@"[]"]; + if (failed) return ; + + + } + break; + + } + + + } + + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end TYPE + + +- (void) mARG +{ + @try { + ruleNestingLevel++; + // FuzzyJava.gl:76:9: ( TYPE WS ID ) // ruleBlockSingleAlt + // FuzzyJava.gl:76:9: TYPE WS ID // alt + { + [self mTYPE]; + if (failed) return ; + + [self mWS]; + if (failed) return ; + + [self mID]; + if (failed) return ; + + + } + + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end ARG + + +- (void) mID +{ + @try { + ruleNestingLevel++; + // FuzzyJava.gl:80:9: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* ) // ruleBlockSingleAlt + // FuzzyJava.gl:80:9: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* // alt + { + if (([input LA:1]>='A' && [input LA:1]<='Z')||[input LA:1]=='_'||([input LA:1]>='a' && [input LA:1]<='z')) { + [input consume]; + failed = NO; + } else { + if (backtracking > 0) {failed=YES; return ;} + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + do { + int alt37=2; + { + int LA37_0 = [input LA:1]; + if ( (LA37_0>='0' && LA37_0<='9')||(LA37_0>='A' && LA37_0<='Z')||LA37_0=='_'||(LA37_0>='a' && LA37_0<='z') ) { + alt37 = 1; + } + + } + switch (alt37) { + case 1 : + // FuzzyJava.gl: // alt + { + if (([input LA:1]>='0' && [input LA:1]<='9')||([input LA:1]>='A' && [input LA:1]<='Z')||[input LA:1]=='_'||([input LA:1]>='a' && [input LA:1]<='z')) { + [input consume]; + failed = NO; + } else { + if (backtracking > 0) {failed=YES; return ;} + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + + } + break; + + default : + goto loop37; + } + } while (YES); loop37: ; + + + } + + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end ID + + +- (void) mESC +{ + @try { + ruleNestingLevel++; + // FuzzyJava.gl:84:7: ( '\\\\' ( '\"' | '\\'' | '\\\\' ) ) // ruleBlockSingleAlt + // FuzzyJava.gl:84:7: '\\\\' ( '\"' | '\\'' | '\\\\' ) // alt + { + [self matchChar:'\\']; + if (failed) return ; + + if ([input LA:1]=='"'||[input LA:1]=='\''||[input LA:1]=='\\') { + [input consume]; + failed = NO; + } else { + if (backtracking > 0) {failed=YES; return ;} + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + + } + + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end ESC + +- (void) mTokens +{ + // FuzzyJava.gl:1:41: ( IMPORT | RETURN | CLASS | METHOD | FIELD | STAT | CALL | COMMENT | SL_COMMENT | STRING | CHAR | WS ) //ruleblock + int alt38=12; + switch ([input LA:1]) { + case 'i': + { + int LA38_1 = [input LA:2]; + if ( [self evaluateSyntacticPredicate:@selector(synpred1)] ) { + alt38 = 1; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred4)] ) { + alt38 = 4; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred5)] ) { + alt38 = 5; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred6)] ) { + alt38 = 6; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred7)] ) { + alt38 = 7; + } + else { + if (backtracking > 0) {failed=YES; return ;} + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:38 state:1 stream:input]; + @throw nvae; + } + } + break; + case 'r': + { + int LA38_2 = [input LA:2]; + if ( [self evaluateSyntacticPredicate:@selector(synpred2)] ) { + alt38 = 2; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred4)] ) { + alt38 = 4; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred5)] ) { + alt38 = 5; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred7)] ) { + alt38 = 7; + } + else { + if (backtracking > 0) {failed=YES; return ;} + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:38 state:2 stream:input]; + @throw nvae; + } + } + break; + case 'c': + { + int LA38_3 = [input LA:2]; + if ( [self evaluateSyntacticPredicate:@selector(synpred3)] ) { + alt38 = 3; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred4)] ) { + alt38 = 4; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred5)] ) { + alt38 = 5; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred7)] ) { + alt38 = 7; + } + else { + if (backtracking > 0) {failed=YES; return ;} + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:38 state:3 stream:input]; + @throw nvae; + } + } + break; + case 'w': + { + int LA38_4 = [input LA:2]; + if ( [self evaluateSyntacticPredicate:@selector(synpred4)] ) { + alt38 = 4; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred5)] ) { + alt38 = 5; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred6)] ) { + alt38 = 6; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred7)] ) { + alt38 = 7; + } + else { + if (backtracking > 0) {failed=YES; return ;} + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:38 state:4 stream:input]; + @throw nvae; + } + } + break; + case 's': + { + int LA38_5 = [input LA:2]; + if ( [self evaluateSyntacticPredicate:@selector(synpred4)] ) { + alt38 = 4; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred5)] ) { + alt38 = 5; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred6)] ) { + alt38 = 6; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred7)] ) { + alt38 = 7; + } + else { + if (backtracking > 0) {failed=YES; return ;} + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:38 state:5 stream:input]; + @throw nvae; + } + } + break; + case 'f': + { + int LA38_6 = [input LA:2]; + if ( [self evaluateSyntacticPredicate:@selector(synpred4)] ) { + alt38 = 4; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred5)] ) { + alt38 = 5; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred6)] ) { + alt38 = 6; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred7)] ) { + alt38 = 7; + } + else { + if (backtracking > 0) {failed=YES; return ;} + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:38 state:6 stream:input]; + @throw nvae; + } + } + break; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'd': + case 'e': + case 'g': + case 'h': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 't': + case 'u': + case 'v': + case 'x': + case 'y': + case 'z': + { + int LA38_7 = [input LA:2]; + if ( [self evaluateSyntacticPredicate:@selector(synpred4)] ) { + alt38 = 4; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred5)] ) { + alt38 = 5; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred7)] ) { + alt38 = 7; + } + else { + if (backtracking > 0) {failed=YES; return ;} + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:38 state:7 stream:input]; + @throw nvae; + } + } + break; + case '/': + { + int LA38_8 = [input LA:2]; + if ( [self evaluateSyntacticPredicate:@selector(synpred8)] ) { + alt38 = 8; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred9)] ) { + alt38 = 9; + } + else { + if (backtracking > 0) {failed=YES; return ;} + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:38 state:8 stream:input]; + @throw nvae; + } + } + break; + case '"': + alt38 = 10; + break; + case '\'': + alt38 = 11; + break; + case '\t': + case '\n': + case ' ': + alt38 = 12; + break; + default: + { + if (backtracking > 0) {failed=YES; return ;} + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:38 state:0 stream:input]; + @throw nvae; + + }} + switch (alt38) { + case 1 : + // FuzzyJava.gl:1:41: IMPORT // alt + { + [self mIMPORT]; + if (failed) return ; + + + } + break; + case 2 : + // FuzzyJava.gl:1:48: RETURN // alt + { + [self mRETURN]; + if (failed) return ; + + + } + break; + case 3 : + // FuzzyJava.gl:1:55: CLASS // alt + { + [self mCLASS]; + if (failed) return ; + + + } + break; + case 4 : + // FuzzyJava.gl:1:61: METHOD // alt + { + [self mMETHOD]; + if (failed) return ; + + + } + break; + case 5 : + // FuzzyJava.gl:1:68: FIELD // alt + { + [self mFIELD]; + if (failed) return ; + + + } + break; + case 6 : + // FuzzyJava.gl:1:74: STAT // alt + { + [self mSTAT]; + if (failed) return ; + + + } + break; + case 7 : + // FuzzyJava.gl:1:79: CALL // alt + { + [self mCALL]; + if (failed) return ; + + + } + break; + case 8 : + // FuzzyJava.gl:1:84: COMMENT // alt + { + [self mCOMMENT]; + if (failed) return ; + + + } + break; + case 9 : + // FuzzyJava.gl:1:92: SL_COMMENT // alt + { + [self mSL_COMMENT]; + if (failed) return ; + + + } + break; + case 10 : + // FuzzyJava.gl:1:103: STRING // alt + { + [self mSTRING]; + if (failed) return ; + + + } + break; + case 11 : + // FuzzyJava.gl:1:110: CHAR // alt + { + [self mCHAR]; + if (failed) return ; + + + } + break; + case 12 : + // FuzzyJava.gl:1:115: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + +} + +- (void) synpred1 +{ + // FuzzyJava.gl:1:41: ( IMPORT ) // ruleBlockSingleAlt + // FuzzyJava.gl:1:41: IMPORT // alt + { + [self mIMPORT]; + if (failed) return ; + + + } +} + +- (void) synpred2 +{ + // FuzzyJava.gl:1:48: ( RETURN ) // ruleBlockSingleAlt + // FuzzyJava.gl:1:48: RETURN // alt + { + [self mRETURN]; + if (failed) return ; + + + } +} + +- (void) synpred3 +{ + // FuzzyJava.gl:1:55: ( CLASS ) // ruleBlockSingleAlt + // FuzzyJava.gl:1:55: CLASS // alt + { + [self mCLASS]; + if (failed) return ; + + + } +} + +- (void) synpred4 +{ + // FuzzyJava.gl:1:61: ( METHOD ) // ruleBlockSingleAlt + // FuzzyJava.gl:1:61: METHOD // alt + { + [self mMETHOD]; + if (failed) return ; + + + } +} + +- (void) synpred5 +{ + // FuzzyJava.gl:1:68: ( FIELD ) // ruleBlockSingleAlt + // FuzzyJava.gl:1:68: FIELD // alt + { + [self mFIELD]; + if (failed) return ; + + + } +} + +- (void) synpred6 +{ + // FuzzyJava.gl:1:74: ( STAT ) // ruleBlockSingleAlt + // FuzzyJava.gl:1:74: STAT // alt + { + [self mSTAT]; + if (failed) return ; + + + } +} + +- (void) synpred7 +{ + // FuzzyJava.gl:1:79: ( CALL ) // ruleBlockSingleAlt + // FuzzyJava.gl:1:79: CALL // alt + { + [self mCALL]; + if (failed) return ; + + + } +} + +- (void) synpred8 +{ + // FuzzyJava.gl:1:84: ( COMMENT ) // ruleBlockSingleAlt + // FuzzyJava.gl:1:84: COMMENT // alt + { + [self mCOMMENT]; + if (failed) return ; + + + } +} + +- (void) synpred9 +{ + // FuzzyJava.gl:1:92: ( SL_COMMENT ) // ruleBlockSingleAlt + // FuzzyJava.gl:1:92: SL_COMMENT // alt + { + [self mSL_COMMENT]; + if (failed) return ; + + + } +} + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/input b/antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/input new file mode 100644 index 0000000..d01e1c1 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/fuzzy/input @@ -0,0 +1,13 @@ +import org.antlr.runtime.*; + +public class Main { + public static void main(String[] args) throws Exception { + for (int i=0; i +#import "FuzzyJavaLexer.h" +#import + +int main(int argc, const char * argv[]) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSString *string = [NSString stringWithContentsOfFile:@"examples/fuzzy/input"]; + NSLog(@"%@", string); + ANTLRStringStream *stream = [[ANTLRStringStream alloc] initWithStringNoCopy:string]; + FuzzyJavaLexer *lexer = [[FuzzyJavaLexer alloc] initWithCharStream:stream]; + id currentToken; + while ((currentToken = [lexer nextToken]) && [currentToken type] != ANTLRTokenTypeEOF) { +// NSLog(@"%@", currentToken); + } + [lexer release]; + [stream release]; + + [pool release]; + return 0; +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g b/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g new file mode 100644 index 0000000..778ca6f --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g @@ -0,0 +1,49 @@ +/** Demonstrates how semantic predicates get hoisted out of the rule in + * which they are found and used in other decisions. This grammar illustrates + * how predicates can be used to distinguish between enum as a keyword and + * an ID *dynamically*. :) + + * Run "java org.antlr.Tool -dfa t.g" to generate DOT (graphviz) files. See + * the T_dec-1.dot file to see the predicates in action. + */ +grammar T; + +options { + language=ObjC; +} + +@ivars { +/** With this true, enum is seen as a keyword. False, it's an identifier */ +BOOL enableEnum; +} + +@init { +enableEnum = NO; +} + +stat: identifier {NSLog(@"enum is an ID");} + | enumAsKeyword {NSLog(@"enum is a keyword");} + ; + +identifier + : ID + | enumAsID + ; + +enumAsKeyword : {enableEnum}? 'enum' ; + +enumAsID : {!enableEnum}? 'enum' ; + +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + ; + +INT : ('0'..'9')+ + ; + +WS : ( ' ' + | '\t' + | '\r' + | '\n' + )+ + { $channel=99; } + ; diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/T.tokens b/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/T.tokens new file mode 100644 index 0000000..820c329 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/T.tokens @@ -0,0 +1,4 @@ +INT=5 +WS=6 +ID=4 +'enum'=7 diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/TLexer.h b/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/TLexer.h new file mode 100644 index 0000000..e11a41b --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/TLexer.h @@ -0,0 +1,30 @@ +// $ANTLR 3.0 T.g 2007-07-25 20:12:43 + +#import +#import + + +#pragma mark Rule return scopes start +#pragma mark Rule return scopes end + +#pragma mark Tokens +#define TLexer_INT 5 +#define TLexer_EOF -1 +#define TLexer_WS 6 +#define TLexer_Tokens 8 +#define TLexer_T7 7 +#define TLexer_ID 4 + +@interface TLexer : ANTLRLexer { +} + + +- (void) mT7; +- (void) mID; +- (void) mINT; +- (void) mWS; +- (void) mTokens; + + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/TLexer.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/TLexer.m new file mode 100644 index 0000000..777a76a --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/TLexer.m @@ -0,0 +1,396 @@ +// $ANTLR 3.0 T.g 2007-07-25 20:12:43 + +#import "TLexer.h" + +/** As per Terence: No returns for lexer rules! +#pragma mark Rule return scopes start +#pragma mark Rule return scopes end +*/ +@implementation TLexer + + +- (id) initWithCharStream:(id)anInput +{ + if (nil!=(self = [super initWithCharStream:anInput])) { + } + return self; +} + +- (void) dealloc +{ + [super dealloc]; +} + +- (NSString *) grammarFileName +{ + return @"T.g"; +} + + +- (void) mT7 +{ + @try { + ruleNestingLevel++; + int _type = TLexer_T7; + // T.g:7:6: ( 'enum' ) // ruleBlockSingleAlt + // T.g:7:6: 'enum' // alt + { + [self matchString:@"enum"]; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T7 + + +- (void) mID +{ + @try { + ruleNestingLevel++; + int _type = TLexer_ID; + // T.g:37:9: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )* ) // ruleBlockSingleAlt + // T.g:37:9: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )* // alt + { + if (([input LA:1]>='A' && [input LA:1]<='Z')||[input LA:1]=='_'||([input LA:1]>='a' && [input LA:1]<='z')) { + [input consume]; + + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + do { + int alt1=2; + { + int LA1_0 = [input LA:1]; + if ( (LA1_0>='0' && LA1_0<='9')||(LA1_0>='A' && LA1_0<='Z')||LA1_0=='_'||(LA1_0>='a' && LA1_0<='z') ) { + alt1 = 1; + } + + } + switch (alt1) { + case 1 : + // T.g: // alt + { + if (([input LA:1]>='0' && [input LA:1]<='9')||([input LA:1]>='A' && [input LA:1]<='Z')||[input LA:1]=='_'||([input LA:1]>='a' && [input LA:1]<='z')) { + [input consume]; + + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + + } + break; + + default : + goto loop1; + } + } while (YES); loop1: ; + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end ID + + +- (void) mINT +{ + @try { + ruleNestingLevel++; + int _type = TLexer_INT; + // T.g:40:7: ( ( '0' .. '9' )+ ) // ruleBlockSingleAlt + // T.g:40:7: ( '0' .. '9' )+ // alt + { + // T.g:40:7: ( '0' .. '9' )+ // positiveClosureBlock + int cnt2=0; + + do { + int alt2=2; + { + int LA2_0 = [input LA:1]; + if ( (LA2_0>='0' && LA2_0<='9') ) { + alt2 = 1; + } + + } + switch (alt2) { + case 1 : + // T.g:40:8: '0' .. '9' // alt + { + [self matchRangeFromChar:'0' to:'9']; + + } + break; + + default : + if ( cnt2 >= 1 ) goto loop2; + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:2]; + @throw eee; + } + cnt2++; + } while (YES); loop2: ; + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end INT + + +- (void) mWS +{ + @try { + ruleNestingLevel++; + int _type = TLexer_WS; + // T.g:43:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) // ruleBlockSingleAlt + // T.g:43:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ // alt + { + // T.g:43:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ // positiveClosureBlock + int cnt3=0; + + do { + int alt3=2; + { + int LA3_0 = [input LA:1]; + if ( (LA3_0>='\t' && LA3_0<='\n')||LA3_0=='\r'||LA3_0==' ' ) { + alt3 = 1; + } + + } + switch (alt3) { + case 1 : + // T.g: // alt + { + if (([input LA:1]>='\t' && [input LA:1]<='\n')||[input LA:1]=='\r'||[input LA:1]==' ') { + [input consume]; + + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + + } + break; + + default : + if ( cnt3 >= 1 ) goto loop3; + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:3]; + @throw eee; + } + cnt3++; + } while (YES); loop3: ; + + _channel=99; + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end WS + +- (void) mTokens +{ + // T.g:1:10: ( T7 | ID | INT | WS ) //ruleblock + int alt4=4; + switch ([input LA:1]) { + case 'e': + { + int LA4_1 = [input LA:2]; + if ( LA4_1=='n' ) { + { + int LA4_5 = [input LA:3]; + if ( LA4_5=='u' ) { + { + int LA4_6 = [input LA:4]; + if ( LA4_6=='m' ) { + { + int LA4_7 = [input LA:5]; + if ( (LA4_7>='0' && LA4_7<='9')||(LA4_7>='A' && LA4_7<='Z')||LA4_7=='_'||(LA4_7>='a' && LA4_7<='z') ) { + alt4 = 2; + } + else { + alt4 = 1; } + } + } + else { + alt4 = 2; } + } + } + else { + alt4 = 2; } + } + } + else { + alt4 = 2; } + } + break; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + alt4 = 2; + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + alt4 = 3; + break; + case '\t': + case '\n': + case '\r': + case ' ': + alt4 = 4; + break; + default: + { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:4 state:0 stream:input]; + @throw nvae; + + }} + switch (alt4) { + case 1 : + // T.g:1:10: T7 // alt + { + [self mT7]; + + + + } + break; + case 2 : + // T.g:1:13: ID // alt + { + [self mID]; + + + + } + break; + case 3 : + // T.g:1:16: INT // alt + { + [self mINT]; + + + + } + break; + case 4 : + // T.g:1:20: WS // alt + { + [self mWS]; + + + + } + break; + + } + +} + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/TParser.h b/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/TParser.h new file mode 100644 index 0000000..7c0da86 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/TParser.h @@ -0,0 +1,39 @@ +// $ANTLR 3.0 T.g 2007-07-25 20:12:43 + +#import +#import + + + +#pragma mark Tokens +#define TParser_INT 5 +#define TParser_WS 6 +#define TParser_EOF -1 +#define TParser_ID 4 + +#pragma mark Dynamic Global Scopes + +#pragma mark Dynamic Rule Scopes + +#pragma mark Rule Return Scopes + + +@interface TParser : ANTLRParser { + + + + + /** With this true, enum is seen as a keyword. False, it's an identifier */ + BOOL enableEnum; + + } + + +- (void) stat; +- (void) identifier; +- (void) enumAsKeyword; +- (void) enumAsID; + + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/TParser.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/TParser.m new file mode 100644 index 0000000..6c00218 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/TParser.m @@ -0,0 +1,268 @@ +// $ANTLR 3.0 T.g 2007-07-25 20:12:43 + +#import "TParser.h" +/** Demonstrates how semantic predicates get hoisted out of the rule in + * which they are found and used in other decisions. This grammar illustrates + * how predicates can be used to distinguish between enum as a keyword and + * an ID *dynamically*. :) + + * Run "java org.antlr.Tool -dfa t.g" to generate DOT (graphviz) files. See + * the T_dec-1.dot file to see the predicates in action. + */ + + +#pragma mark Bitsets +const static unsigned long long FOLLOW_identifier_in_stat34_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_identifier_in_stat34; +const static unsigned long long FOLLOW_enumAsKeyword_in_stat47_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_enumAsKeyword_in_stat47; +const static unsigned long long FOLLOW_TParser_ID_in_identifier66_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_TParser_ID_in_identifier66; +const static unsigned long long FOLLOW_enumAsID_in_identifier74_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_enumAsID_in_identifier74; +const static unsigned long long FOLLOW_7_in_enumAsKeyword89_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_7_in_enumAsKeyword89; +const static unsigned long long FOLLOW_7_in_enumAsID100_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_7_in_enumAsID100; + + +#pragma mark Dynamic Global Scopes + +#pragma mark Dynamic Rule Scopes + +#pragma mark Rule return scopes start + +@implementation TParser + ++ (void) initialize +{ + FOLLOW_identifier_in_stat34 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_identifier_in_stat34_data count:1]; + FOLLOW_enumAsKeyword_in_stat47 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_enumAsKeyword_in_stat47_data count:1]; + FOLLOW_TParser_ID_in_identifier66 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_TParser_ID_in_identifier66_data count:1]; + FOLLOW_enumAsID_in_identifier74 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_enumAsID_in_identifier74_data count:1]; + FOLLOW_7_in_enumAsKeyword89 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_7_in_enumAsKeyword89_data count:1]; + FOLLOW_7_in_enumAsID100 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_7_in_enumAsID100_data count:1]; + +} + +- (id) initWithTokenStream:(id)aStream +{ + if ((self = [super initWithTokenStream:aStream])) { + + tokenNames = [[NSArray alloc] initWithObjects:@"", @"", @"", @"", + @"ID", @"INT", @"WS", @"'enum'", nil]; + + + + enableEnum = NO; + + } + return self; +} + +- (void) dealloc +{ + [tokenNames release]; + + [super dealloc]; +} + +- (NSString *) grammarFileName +{ + return @"T.g"; +} + + +// $ANTLR start stat +// T.g:24:1: stat : ( identifier | enumAsKeyword ); +- (void) stat +{ + @try { + // T.g:24:7: ( identifier | enumAsKeyword ) //ruleblock + int alt1=2; + { + int LA1_0 = [input LA:1]; + if ( LA1_0==TParser_ID ) { + alt1 = 1; + } + else if ( LA1_0==7 ) { + { + int LA1_2 = [input LA:2]; + if ( !enableEnum ) { + alt1 = 1; + } + else if ( enableEnum ) { + alt1 = 2; + } + else { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:1 state:2 stream:input]; + @throw nvae; + } + } + } + else { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:1 state:0 stream:input]; + @throw nvae; + } + } + switch (alt1) { + case 1 : + // T.g:24:7: identifier // alt + { + [following addObject:FOLLOW_identifier_in_stat34]; + [self identifier]; + [following removeLastObject]; + + + NSLog(@"enum is an ID"); + + } + break; + case 2 : + // T.g:25:7: enumAsKeyword // alt + { + [following addObject:FOLLOW_enumAsKeyword_in_stat47]; + [self enumAsKeyword]; + [following removeLastObject]; + + + NSLog(@"enum is a keyword"); + + } + break; + + } + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end stat + +// $ANTLR start identifier +// T.g:28:1: identifier : ( ID | enumAsID ); +- (void) identifier +{ + @try { + // T.g:29:7: ( ID | enumAsID ) //ruleblock + int alt2=2; + { + int LA2_0 = [input LA:1]; + if ( LA2_0==TParser_ID ) { + alt2 = 1; + } + else if ( LA2_0==7 ) { + alt2 = 2; + } + else { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:2 state:0 stream:input]; + @throw nvae; + } + } + switch (alt2) { + case 1 : + // T.g:29:7: ID // alt + { + [self match:input tokenType:TParser_ID follow:FOLLOW_TParser_ID_in_identifier66]; + + } + break; + case 2 : + // T.g:30:7: enumAsID // alt + { + [following addObject:FOLLOW_enumAsID_in_identifier74]; + [self enumAsID]; + [following removeLastObject]; + + + + } + break; + + } + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end identifier + +// $ANTLR start enumAsKeyword +// T.g:33:1: enumAsKeyword : {...}? 'enum' ; +- (void) enumAsKeyword +{ + @try { + // T.g:33:17: ({...}? 'enum' ) // ruleBlockSingleAlt + // T.g:33:17: {...}? 'enum' // alt + { + if ( !(enableEnum) ) { + @throw [ANTLRFailedPredicateException exceptionWithRuleName:@"enumAsKeyword" predicate:@"enableEnum" stream:input]; + } + [self match:input tokenType:7 follow:FOLLOW_7_in_enumAsKeyword89]; + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end enumAsKeyword + +// $ANTLR start enumAsID +// T.g:35:1: enumAsID : {...}? 'enum' ; +- (void) enumAsID +{ + @try { + // T.g:35:12: ({...}? 'enum' ) // ruleBlockSingleAlt + // T.g:35:12: {...}? 'enum' // alt + { + if ( !(!enableEnum) ) { + @throw [ANTLRFailedPredicateException exceptionWithRuleName:@"enumAsID" predicate:@"!enableEnum" stream:input]; + } + [self match:input tokenType:7 follow:FOLLOW_7_in_enumAsID100]; + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end enumAsID + + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/input b/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/input new file mode 100644 index 0000000..e3caefb --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/input @@ -0,0 +1 @@ +enum diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/main.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/main.m new file mode 100644 index 0000000..485c687 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/main.m @@ -0,0 +1,29 @@ +#import +#import +#import "TLexer.h" +#import "TParser.h" + +int main() { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + NSString *string = [NSString stringWithContentsOfFile:@"examples/hoistedPredicates/input"]; + NSLog(@"input is : %@", string); + ANTLRStringStream *stream = [[ANTLRStringStream alloc] initWithStringNoCopy:string]; + TLexer *lexer = [[TLexer alloc] initWithCharStream:stream]; + + // ANTLRToken *currentToken; + // while ((currentToken = [lexer nextToken]) && [currentToken type] != ANTLRTokenTypeEOF) { + // NSLog(@"%@", currentToken); + // } + + ANTLRCommonTokenStream *tokenStream = [[ANTLRCommonTokenStream alloc] initWithTokenSource:lexer]; + TParser *parser = [[TParser alloc] initWithTokenStream:tokenStream]; + [parser stat]; + [lexer release]; + [stream release]; + [tokenStream release]; + [parser release]; + + [pool release]; + return 0; +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/output b/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/output new file mode 100644 index 0000000..295709d --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/hoistedPredicates/output @@ -0,0 +1 @@ +enum is an ID diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/Test.gl b/antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/Test.gl new file mode 100644 index 0000000..3eec815 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/Test.gl @@ -0,0 +1,16 @@ +lexer grammar Test; +options { + language=ObjC; +} + +@header {} + +ID : LETTER (LETTER | DIGIT)* + ; + +fragment DIGIT : '0'..'9' + ; + +fragment LETTER + : 'a'..'z' | 'A'..'Z' + ; diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/Test.tokens b/antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/Test.tokens new file mode 100644 index 0000000..013785e --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/Test.tokens @@ -0,0 +1,4 @@ +LETTER=4 +Tokens=7 +DIGIT=5 +ID=6 diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/TestLexer.h b/antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/TestLexer.h new file mode 100644 index 0000000..dd43873 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/TestLexer.h @@ -0,0 +1,28 @@ +// $ANTLR 3.0 Test.gl 2007-08-04 15:59:43 + +#import +#import + + +#pragma mark Rule return scopes start +#pragma mark Rule return scopes end + +#pragma mark Tokens +#define TestLexer_LETTER 4 +#define TestLexer_EOF -1 +#define TestLexer_Tokens 7 +#define TestLexer_DIGIT 5 +#define TestLexer_ID 6 + +@interface TestLexer : ANTLRLexer { +} + + +- (void) mID; +- (void) mDIGIT; +- (void) mLETTER; +- (void) mTokens; + + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/TestLexer.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/TestLexer.m new file mode 100644 index 0000000..776d45a --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/TestLexer.m @@ -0,0 +1,171 @@ +// $ANTLR 3.0 Test.gl 2007-08-04 15:59:43 + +#import "TestLexer.h" + +/** As per Terence: No returns for lexer rules! +#pragma mark Rule return scopes start +#pragma mark Rule return scopes end +*/ +@implementation TestLexer + +static NSArray *tokenNames; + + ++ (void) initialize +{ + // todo: get tokenNames into lexer - requires changes to CodeGenerator.java and ANTLRCore.sti + tokenNames = [[NSArray alloc] init]; +} + +- (id) initWithCharStream:(id)anInput +{ + if (nil!=(self = [super initWithCharStream:anInput])) { + } + return self; +} + +- (void) dealloc +{ + [super dealloc]; +} + ++ (NSString *) tokenNameForType:(int)aTokenType +{ + return nil; +} + ++ (NSArray *) tokenNames +{ + return tokenNames; +} + +- (NSString *) grammarFileName +{ + return @"Test.gl"; +} + + +- (void) mID +{ + @try { + ruleNestingLevel++; + int _type = TestLexer_ID; + // Test.gl:8:6: ( LETTER ( LETTER | DIGIT )* ) // ruleBlockSingleAlt + // Test.gl:8:6: LETTER ( LETTER | DIGIT )* // alt + { + [self mLETTER]; + + + do { + int alt1=2; + { + int LA1_0 = [input LA:1]; + if ( (LA1_0>='0' && LA1_0<='9')||(LA1_0>='A' && LA1_0<='Z')||(LA1_0>='a' && LA1_0<='z') ) { + alt1 = 1; + } + + } + switch (alt1) { + case 1 : + // Test.gl: // alt + { + if (([input LA:1]>='0' && [input LA:1]<='9')||([input LA:1]>='A' && [input LA:1]<='Z')||([input LA:1]>='a' && [input LA:1]<='z')) { + [input consume]; + + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + + } + break; + + default : + goto loop1; + } + } while (YES); loop1: ; + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end ID + + +- (void) mDIGIT +{ + @try { + ruleNestingLevel++; + // Test.gl:11:18: ( '0' .. '9' ) // ruleBlockSingleAlt + // Test.gl:11:18: '0' .. '9' // alt + { + [self matchRangeFromChar:'0' to:'9']; + + } + + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end DIGIT + + +- (void) mLETTER +{ + @try { + ruleNestingLevel++; + // Test.gl:15:4: ( 'a' .. 'z' | 'A' .. 'Z' ) // ruleBlockSingleAlt + // Test.gl: // alt + { + if (([input LA:1]>='A' && [input LA:1]<='Z')||([input LA:1]>='a' && [input LA:1]<='z')) { + [input consume]; + + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + + } + + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end LETTER + +- (void) mTokens +{ + // Test.gl:1:10: ( ID ) // ruleBlockSingleAlt + // Test.gl:1:10: ID // alt + { + [self mID]; + + + + } + + +} + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/main.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/main.m new file mode 100644 index 0000000..096b958 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/lexertest-simple/main.m @@ -0,0 +1,23 @@ +#import +#import "TestLexer.h" +#import +#import + +int main(int argc, const char * argv[]) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + ANTLRStringStream *stream = [[ANTLRStringStream alloc] initWithStringNoCopy:@"abB9Cdd44"]; + TestLexer *lexer = [[TestLexer alloc] initWithCharStream:stream]; + id currentToken; + while ((currentToken = [lexer nextToken]) && [currentToken type] != ANTLRTokenTypeEOF) { + NSLog(@"%@", currentToken); + } + [lexer release]; + [stream release]; + + [pool release]; + // sleep for objectalloc + while (1) sleep(60); + return 0; +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTable.g b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTable.g new file mode 100644 index 0000000..19dc99b --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTable.g @@ -0,0 +1,73 @@ +grammar SymbolTable; + +/* Scope of symbol names. Both globals and block rules need to push a new + * symbol table upon entry and they must use the same stack. So, I must + * define a global scope and say that globals and block use this by saying + * 'scope Symbols;' in those rule definitions. + */ + +options { + language=ObjC; +} + +scope Symbols { + NSMutableArray *names; +} + +@ivars { +int level; +} + +@init { +level = 0; +} + +prog: globals (method)* + ; + +globals +scope Symbols; +@init { + level++; + $Symbols::names = [[NSMutableArray alloc] init]; +} + : (decl)* + { + NSLog(@"globals: \%@", $Symbols::names); + level--; + } + ; + +method + : 'method' ID '(' ')' block + ; + +block +scope Symbols; +@init { + level++; + $Symbols::names = [[NSMutableArray alloc] init]; +} + : '{' (decl)* (stat)* '}' + { + NSLog(@"level \%d symbols: \%@", level, $Symbols::names); + level--; + } + ; + +stat: ID '=' INT ';' + | block + ; + +decl: 'int' ID ';' + {[$Symbols::names addObject:$ID];} // add to current symbol table + ; + +ID : ('a'..'z')+ + ; + +INT : ('0'..'9')+ + ; + +WS : (' '|'\n'|'\r')+ {$channel=99;} + ; diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTable.tokens b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTable.tokens new file mode 100644 index 0000000..e4cb248 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTable.tokens @@ -0,0 +1,11 @@ +INT=5 +WS=6 +ID=4 +'('=8 +'int'=14 +')'=9 +'='=12 +';'=13 +'}'=11 +'{'=10 +'method'=7 diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTableLexer.h b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTableLexer.h new file mode 100644 index 0000000..477af14 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTableLexer.h @@ -0,0 +1,44 @@ +// $ANTLR 3.0 SymbolTable.g 2007-07-25 20:12:44 + +#import +#import + + +#pragma mark Rule return scopes start +#pragma mark Rule return scopes end + +#pragma mark Tokens +#define SymbolTableLexer_T10 10 +#define SymbolTableLexer_T14 14 +#define SymbolTableLexer_T11 11 +#define SymbolTableLexer_T9 9 +#define SymbolTableLexer_INT 5 +#define SymbolTableLexer_EOF -1 +#define SymbolTableLexer_WS 6 +#define SymbolTableLexer_T12 12 +#define SymbolTableLexer_Tokens 15 +#define SymbolTableLexer_T8 8 +#define SymbolTableLexer_T13 13 +#define SymbolTableLexer_T7 7 +#define SymbolTableLexer_ID 4 + +@interface SymbolTableLexer : ANTLRLexer { +} + + +- (void) mT7; +- (void) mT8; +- (void) mT9; +- (void) mT10; +- (void) mT11; +- (void) mT12; +- (void) mT13; +- (void) mT14; +- (void) mID; +- (void) mINT; +- (void) mWS; +- (void) mTokens; + + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTableLexer.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTableLexer.m new file mode 100644 index 0000000..5503388 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTableLexer.m @@ -0,0 +1,680 @@ +// $ANTLR 3.0 SymbolTable.g 2007-07-25 20:12:44 + +#import "SymbolTableLexer.h" + +/** As per Terence: No returns for lexer rules! +#pragma mark Rule return scopes start +#pragma mark Rule return scopes end +*/ +@implementation SymbolTableLexer + + +- (id) initWithCharStream:(id)anInput +{ + if (nil!=(self = [super initWithCharStream:anInput])) { + } + return self; +} + +- (void) dealloc +{ + [super dealloc]; +} + +- (NSString *) grammarFileName +{ + return @"SymbolTable.g"; +} + + +- (void) mT7 +{ + @try { + ruleNestingLevel++; + int _type = SymbolTableLexer_T7; + // SymbolTable.g:7:6: ( 'method' ) // ruleBlockSingleAlt + // SymbolTable.g:7:6: 'method' // alt + { + [self matchString:@"method"]; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T7 + + +- (void) mT8 +{ + @try { + ruleNestingLevel++; + int _type = SymbolTableLexer_T8; + // SymbolTable.g:8:6: ( '(' ) // ruleBlockSingleAlt + // SymbolTable.g:8:6: '(' // alt + { + [self matchChar:'(']; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T8 + + +- (void) mT9 +{ + @try { + ruleNestingLevel++; + int _type = SymbolTableLexer_T9; + // SymbolTable.g:9:6: ( ')' ) // ruleBlockSingleAlt + // SymbolTable.g:9:6: ')' // alt + { + [self matchChar:')']; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T9 + + +- (void) mT10 +{ + @try { + ruleNestingLevel++; + int _type = SymbolTableLexer_T10; + // SymbolTable.g:10:7: ( '{' ) // ruleBlockSingleAlt + // SymbolTable.g:10:7: '{' // alt + { + [self matchChar:'{']; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T10 + + +- (void) mT11 +{ + @try { + ruleNestingLevel++; + int _type = SymbolTableLexer_T11; + // SymbolTable.g:11:7: ( '}' ) // ruleBlockSingleAlt + // SymbolTable.g:11:7: '}' // alt + { + [self matchChar:'}']; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T11 + + +- (void) mT12 +{ + @try { + ruleNestingLevel++; + int _type = SymbolTableLexer_T12; + // SymbolTable.g:12:7: ( '=' ) // ruleBlockSingleAlt + // SymbolTable.g:12:7: '=' // alt + { + [self matchChar:'=']; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T12 + + +- (void) mT13 +{ + @try { + ruleNestingLevel++; + int _type = SymbolTableLexer_T13; + // SymbolTable.g:13:7: ( ';' ) // ruleBlockSingleAlt + // SymbolTable.g:13:7: ';' // alt + { + [self matchChar:';']; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T13 + + +- (void) mT14 +{ + @try { + ruleNestingLevel++; + int _type = SymbolTableLexer_T14; + // SymbolTable.g:14:7: ( 'int' ) // ruleBlockSingleAlt + // SymbolTable.g:14:7: 'int' // alt + { + [self matchString:@"int"]; + + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end T14 + + +- (void) mID +{ + @try { + ruleNestingLevel++; + int _type = SymbolTableLexer_ID; + // SymbolTable.g:66:9: ( ( 'a' .. 'z' )+ ) // ruleBlockSingleAlt + // SymbolTable.g:66:9: ( 'a' .. 'z' )+ // alt + { + // SymbolTable.g:66:9: ( 'a' .. 'z' )+ // positiveClosureBlock + int cnt1=0; + + do { + int alt1=2; + { + int LA1_0 = [input LA:1]; + if ( (LA1_0>='a' && LA1_0<='z') ) { + alt1 = 1; + } + + } + switch (alt1) { + case 1 : + // SymbolTable.g:66:10: 'a' .. 'z' // alt + { + [self matchRangeFromChar:'a' to:'z']; + + } + break; + + default : + if ( cnt1 >= 1 ) goto loop1; + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:1]; + @throw eee; + } + cnt1++; + } while (YES); loop1: ; + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end ID + + +- (void) mINT +{ + @try { + ruleNestingLevel++; + int _type = SymbolTableLexer_INT; + // SymbolTable.g:69:9: ( ( '0' .. '9' )+ ) // ruleBlockSingleAlt + // SymbolTable.g:69:9: ( '0' .. '9' )+ // alt + { + // SymbolTable.g:69:9: ( '0' .. '9' )+ // positiveClosureBlock + int cnt2=0; + + do { + int alt2=2; + { + int LA2_0 = [input LA:1]; + if ( (LA2_0>='0' && LA2_0<='9') ) { + alt2 = 1; + } + + } + switch (alt2) { + case 1 : + // SymbolTable.g:69:10: '0' .. '9' // alt + { + [self matchRangeFromChar:'0' to:'9']; + + } + break; + + default : + if ( cnt2 >= 1 ) goto loop2; + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:2]; + @throw eee; + } + cnt2++; + } while (YES); loop2: ; + + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end INT + + +- (void) mWS +{ + @try { + ruleNestingLevel++; + int _type = SymbolTableLexer_WS; + // SymbolTable.g:72:9: ( ( ' ' | '\\n' | '\\r' )+ ) // ruleBlockSingleAlt + // SymbolTable.g:72:9: ( ' ' | '\\n' | '\\r' )+ // alt + { + // SymbolTable.g:72:9: ( ' ' | '\\n' | '\\r' )+ // positiveClosureBlock + int cnt3=0; + + do { + int alt3=2; + { + int LA3_0 = [input LA:1]; + if ( LA3_0=='\n'||LA3_0=='\r'||LA3_0==' ' ) { + alt3 = 1; + } + + } + switch (alt3) { + case 1 : + // SymbolTable.g: // alt + { + if ([input LA:1]=='\n'||[input LA:1]=='\r'||[input LA:1]==' ') { + [input consume]; + + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + + } + break; + + default : + if ( cnt3 >= 1 ) goto loop3; + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:3]; + @throw eee; + } + cnt3++; + } while (YES); loop3: ; + + _channel=99; + + } + + self->_tokenType = _type; + } + @finally { + ruleNestingLevel--; + // rule cleanup + // token labels + // token+rule list labels + // rule labels + + } + return; +} +// $ANTLR end WS + +- (void) mTokens +{ + // SymbolTable.g:1:10: ( T7 | T8 | T9 | T10 | T11 | T12 | T13 | T14 | ID | INT | WS ) //ruleblock + int alt4=11; + switch ([input LA:1]) { + case 'm': + { + int LA4_1 = [input LA:2]; + if ( LA4_1=='e' ) { + { + int LA4_12 = [input LA:3]; + if ( LA4_12=='t' ) { + { + int LA4_14 = [input LA:4]; + if ( LA4_14=='h' ) { + { + int LA4_16 = [input LA:5]; + if ( LA4_16=='o' ) { + { + int LA4_18 = [input LA:6]; + if ( LA4_18=='d' ) { + { + int LA4_19 = [input LA:7]; + if ( (LA4_19>='a' && LA4_19<='z') ) { + alt4 = 9; + } + else { + alt4 = 1; } + } + } + else { + alt4 = 9; } + } + } + else { + alt4 = 9; } + } + } + else { + alt4 = 9; } + } + } + else { + alt4 = 9; } + } + } + else { + alt4 = 9; } + } + break; + case '(': + alt4 = 2; + break; + case ')': + alt4 = 3; + break; + case '{': + alt4 = 4; + break; + case '}': + alt4 = 5; + break; + case '=': + alt4 = 6; + break; + case ';': + alt4 = 7; + break; + case 'i': + { + int LA4_8 = [input LA:2]; + if ( LA4_8=='n' ) { + { + int LA4_13 = [input LA:3]; + if ( LA4_13=='t' ) { + { + int LA4_15 = [input LA:4]; + if ( (LA4_15>='a' && LA4_15<='z') ) { + alt4 = 9; + } + else { + alt4 = 8; } + } + } + else { + alt4 = 9; } + } + } + else { + alt4 = 9; } + } + break; + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'j': + case 'k': + case 'l': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + alt4 = 9; + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + alt4 = 10; + break; + case '\n': + case '\r': + case ' ': + alt4 = 11; + break; + default: + { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:4 state:0 stream:input]; + @throw nvae; + + }} + switch (alt4) { + case 1 : + // SymbolTable.g:1:10: T7 // alt + { + [self mT7]; + + + + } + break; + case 2 : + // SymbolTable.g:1:13: T8 // alt + { + [self mT8]; + + + + } + break; + case 3 : + // SymbolTable.g:1:16: T9 // alt + { + [self mT9]; + + + + } + break; + case 4 : + // SymbolTable.g:1:19: T10 // alt + { + [self mT10]; + + + + } + break; + case 5 : + // SymbolTable.g:1:23: T11 // alt + { + [self mT11]; + + + + } + break; + case 6 : + // SymbolTable.g:1:27: T12 // alt + { + [self mT12]; + + + + } + break; + case 7 : + // SymbolTable.g:1:31: T13 // alt + { + [self mT13]; + + + + } + break; + case 8 : + // SymbolTable.g:1:35: T14 // alt + { + [self mT14]; + + + + } + break; + case 9 : + // SymbolTable.g:1:39: ID // alt + { + [self mID]; + + + + } + break; + case 10 : + // SymbolTable.g:1:42: INT // alt + { + [self mINT]; + + + + } + break; + case 11 : + // SymbolTable.g:1:46: WS // alt + { + [self mWS]; + + + + } + break; + + } + +} + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTableParser.h b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTableParser.h new file mode 100644 index 0000000..150a492 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTableParser.h @@ -0,0 +1,46 @@ +// $ANTLR 3.0 SymbolTable.g 2007-07-25 20:12:44 + +#import +#import + + + +#pragma mark Tokens +#define SymbolTableParser_INT 5 +#define SymbolTableParser_WS 6 +#define SymbolTableParser_EOF -1 +#define SymbolTableParser_ID 4 + +#pragma mark Dynamic Global Scopes +@interface SymbolTableParserSymbolsScope : NSObject { + NSMutableArray *names; +} +// use KVC to access attributes! +@end + +#pragma mark Dynamic Rule Scopes + +#pragma mark Rule Return Scopes + + +@interface SymbolTableParser : ANTLRParser { + + NSMutableArray *SymbolTableParser_Symbols_stack; + + + + int level; + + } + + +- (void) prog; +- (void) globals; +- (void) method; +- (void) block; +- (void) stat; +- (void) decl; + + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTableParser.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTableParser.m new file mode 100644 index 0000000..84d76d5 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTableParser.m @@ -0,0 +1,463 @@ +// $ANTLR 3.0 SymbolTable.g 2007-07-25 20:12:44 + +#import "SymbolTableParser.h" + + +#pragma mark Bitsets +const static unsigned long long FOLLOW_globals_in_prog44_data[] = {0x0000000000000082LL}; +static ANTLRBitSet *FOLLOW_globals_in_prog44; +const static unsigned long long FOLLOW_method_in_prog47_data[] = {0x0000000000000082LL}; +static ANTLRBitSet *FOLLOW_method_in_prog47; +const static unsigned long long FOLLOW_decl_in_globals79_data[] = {0x0000000000004002LL}; +static ANTLRBitSet *FOLLOW_decl_in_globals79; +const static unsigned long long FOLLOW_7_in_method110_data[] = {0x0000000000000010LL}; +static ANTLRBitSet *FOLLOW_7_in_method110; +const static unsigned long long FOLLOW_SymbolTableParser_ID_in_method112_data[] = {0x0000000000000100LL}; +static ANTLRBitSet *FOLLOW_SymbolTableParser_ID_in_method112; +const static unsigned long long FOLLOW_8_in_method114_data[] = {0x0000000000000200LL}; +static ANTLRBitSet *FOLLOW_8_in_method114; +const static unsigned long long FOLLOW_9_in_method116_data[] = {0x0000000000000400LL}; +static ANTLRBitSet *FOLLOW_9_in_method116; +const static unsigned long long FOLLOW_block_in_method118_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_block_in_method118; +const static unsigned long long FOLLOW_10_in_block147_data[] = {0x0000000000004C10LL}; +static ANTLRBitSet *FOLLOW_10_in_block147; +const static unsigned long long FOLLOW_decl_in_block150_data[] = {0x0000000000004C10LL}; +static ANTLRBitSet *FOLLOW_decl_in_block150; +const static unsigned long long FOLLOW_stat_in_block155_data[] = {0x0000000000000C10LL}; +static ANTLRBitSet *FOLLOW_stat_in_block155; +const static unsigned long long FOLLOW_11_in_block159_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_11_in_block159; +const static unsigned long long FOLLOW_SymbolTableParser_ID_in_stat183_data[] = {0x0000000000001000LL}; +static ANTLRBitSet *FOLLOW_SymbolTableParser_ID_in_stat183; +const static unsigned long long FOLLOW_12_in_stat185_data[] = {0x0000000000000020LL}; +static ANTLRBitSet *FOLLOW_12_in_stat185; +const static unsigned long long FOLLOW_SymbolTableParser_INT_in_stat187_data[] = {0x0000000000002000LL}; +static ANTLRBitSet *FOLLOW_SymbolTableParser_INT_in_stat187; +const static unsigned long long FOLLOW_13_in_stat189_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_13_in_stat189; +const static unsigned long long FOLLOW_block_in_stat199_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_block_in_stat199; +const static unsigned long long FOLLOW_14_in_decl213_data[] = {0x0000000000000010LL}; +static ANTLRBitSet *FOLLOW_14_in_decl213; +const static unsigned long long FOLLOW_SymbolTableParser_ID_in_decl215_data[] = {0x0000000000002000LL}; +static ANTLRBitSet *FOLLOW_SymbolTableParser_ID_in_decl215; +const static unsigned long long FOLLOW_13_in_decl217_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_13_in_decl217; + + +#pragma mark Dynamic Global Scopes +@implementation SymbolTableParserSymbolsScope +@end + +#pragma mark Dynamic Rule Scopes + +#pragma mark Rule return scopes start + +@implementation SymbolTableParser + ++ (void) initialize +{ + FOLLOW_globals_in_prog44 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_globals_in_prog44_data count:1]; + FOLLOW_method_in_prog47 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_method_in_prog47_data count:1]; + FOLLOW_decl_in_globals79 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_decl_in_globals79_data count:1]; + FOLLOW_7_in_method110 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_7_in_method110_data count:1]; + FOLLOW_SymbolTableParser_ID_in_method112 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SymbolTableParser_ID_in_method112_data count:1]; + FOLLOW_8_in_method114 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_8_in_method114_data count:1]; + FOLLOW_9_in_method116 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_9_in_method116_data count:1]; + FOLLOW_block_in_method118 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_block_in_method118_data count:1]; + FOLLOW_10_in_block147 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_10_in_block147_data count:1]; + FOLLOW_decl_in_block150 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_decl_in_block150_data count:1]; + FOLLOW_stat_in_block155 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_stat_in_block155_data count:1]; + FOLLOW_11_in_block159 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_11_in_block159_data count:1]; + FOLLOW_SymbolTableParser_ID_in_stat183 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SymbolTableParser_ID_in_stat183_data count:1]; + FOLLOW_12_in_stat185 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_12_in_stat185_data count:1]; + FOLLOW_SymbolTableParser_INT_in_stat187 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SymbolTableParser_INT_in_stat187_data count:1]; + FOLLOW_13_in_stat189 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_13_in_stat189_data count:1]; + FOLLOW_block_in_stat199 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_block_in_stat199_data count:1]; + FOLLOW_14_in_decl213 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_14_in_decl213_data count:1]; + FOLLOW_SymbolTableParser_ID_in_decl215 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SymbolTableParser_ID_in_decl215_data count:1]; + FOLLOW_13_in_decl217 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_13_in_decl217_data count:1]; + +} + +- (id) initWithTokenStream:(id)aStream +{ + if ((self = [super initWithTokenStream:aStream])) { + + tokenNames = [[NSArray alloc] initWithObjects:@"", @"", @"", @"", + @"ID", @"INT", @"WS", @"'method'", @"'('", @"')'", @"'{'", @"'}'", @"'='", + @"';'", @"'int'", nil]; + + SymbolTableParser_Symbols_stack = [[NSMutableArray alloc] init]; + + + level = 0; + + } + return self; +} + +- (void) dealloc +{ + [tokenNames release]; + + [SymbolTableParser_Symbols_stack release]; + [super dealloc]; +} + +- (NSString *) grammarFileName +{ + return @"SymbolTable.g"; +} + + +// $ANTLR start prog +// SymbolTable.g:25:1: prog : globals ( method )* ; +- (void) prog +{ + @try { + // SymbolTable.g:25:9: ( globals ( method )* ) // ruleBlockSingleAlt + // SymbolTable.g:25:9: globals ( method )* // alt + { + [following addObject:FOLLOW_globals_in_prog44]; + [self globals]; + [following removeLastObject]; + + + do { + int alt1=2; + { + int LA1_0 = [input LA:1]; + if ( LA1_0==7 ) { + alt1 = 1; + } + + } + switch (alt1) { + case 1 : + // SymbolTable.g:25:18: method // alt + { + [following addObject:FOLLOW_method_in_prog47]; + [self method]; + [following removeLastObject]; + + + + } + break; + + default : + goto loop1; + } + } while (YES); loop1: ; + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end prog + +// $ANTLR start globals +// SymbolTable.g:28:1: globals : ( decl )* ; +- (void) globals +{ + [SymbolTableParser_Symbols_stack addObject:[[[SymbolTableParserSymbolsScope alloc] init] autorelease]]; + + + level++; + [[SymbolTableParser_Symbols_stack lastObject] setValue: [[NSMutableArray alloc] init] forKey:@"names"]; + + @try { + // SymbolTable.g:34:9: ( ( decl )* ) // ruleBlockSingleAlt + // SymbolTable.g:34:9: ( decl )* // alt + { + do { + int alt2=2; + { + int LA2_0 = [input LA:1]; + if ( LA2_0==14 ) { + alt2 = 1; + } + + } + switch (alt2) { + case 1 : + // SymbolTable.g:34:10: decl // alt + { + [following addObject:FOLLOW_decl_in_globals79]; + [self decl]; + [following removeLastObject]; + + + + } + break; + + default : + goto loop2; + } + } while (YES); loop2: ; + + + NSLog(@"globals: %@", [[SymbolTableParser_Symbols_stack lastObject] valueForKey:@"names"]); + level--; + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + [SymbolTableParser_Symbols_stack removeLastObject]; + + } + return ; +} +// $ANTLR end globals + +// $ANTLR start method +// SymbolTable.g:41:1: method : 'method' ID '(' ')' block ; +- (void) method +{ + @try { + // SymbolTable.g:42:9: ( 'method' ID '(' ')' block ) // ruleBlockSingleAlt + // SymbolTable.g:42:9: 'method' ID '(' ')' block // alt + { + [self match:input tokenType:7 follow:FOLLOW_7_in_method110]; + [self match:input tokenType:SymbolTableParser_ID follow:FOLLOW_SymbolTableParser_ID_in_method112]; + [self match:input tokenType:8 follow:FOLLOW_8_in_method114]; + [self match:input tokenType:9 follow:FOLLOW_9_in_method116]; + [following addObject:FOLLOW_block_in_method118]; + [self block]; + [following removeLastObject]; + + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end method + +// $ANTLR start block +// SymbolTable.g:45:1: block : '{' ( decl )* ( stat )* '}' ; +- (void) block +{ + [SymbolTableParser_Symbols_stack addObject:[[[SymbolTableParserSymbolsScope alloc] init] autorelease]]; + + + level++; + [[SymbolTableParser_Symbols_stack lastObject] setValue: [[NSMutableArray alloc] init] forKey:@"names"]; + + @try { + // SymbolTable.g:51:9: ( '{' ( decl )* ( stat )* '}' ) // ruleBlockSingleAlt + // SymbolTable.g:51:9: '{' ( decl )* ( stat )* '}' // alt + { + [self match:input tokenType:10 follow:FOLLOW_10_in_block147]; + do { + int alt3=2; + { + int LA3_0 = [input LA:1]; + if ( LA3_0==14 ) { + alt3 = 1; + } + + } + switch (alt3) { + case 1 : + // SymbolTable.g:51:14: decl // alt + { + [following addObject:FOLLOW_decl_in_block150]; + [self decl]; + [following removeLastObject]; + + + + } + break; + + default : + goto loop3; + } + } while (YES); loop3: ; + + do { + int alt4=2; + { + int LA4_0 = [input LA:1]; + if ( LA4_0==SymbolTableParser_ID||LA4_0==10 ) { + alt4 = 1; + } + + } + switch (alt4) { + case 1 : + // SymbolTable.g:51:22: stat // alt + { + [following addObject:FOLLOW_stat_in_block155]; + [self stat]; + [following removeLastObject]; + + + + } + break; + + default : + goto loop4; + } + } while (YES); loop4: ; + + [self match:input tokenType:11 follow:FOLLOW_11_in_block159]; + + NSLog(@"level %d symbols: %@", level, [[SymbolTableParser_Symbols_stack lastObject] valueForKey:@"names"]); + level--; + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + [SymbolTableParser_Symbols_stack removeLastObject]; + + } + return ; +} +// $ANTLR end block + +// $ANTLR start stat +// SymbolTable.g:58:1: stat : ( ID '=' INT ';' | block ); +- (void) stat +{ + @try { + // SymbolTable.g:58:9: ( ID '=' INT ';' | block ) //ruleblock + int alt5=2; + { + int LA5_0 = [input LA:1]; + if ( LA5_0==SymbolTableParser_ID ) { + alt5 = 1; + } + else if ( LA5_0==10 ) { + alt5 = 2; + } + else { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:5 state:0 stream:input]; + @throw nvae; + } + } + switch (alt5) { + case 1 : + // SymbolTable.g:58:9: ID '=' INT ';' // alt + { + [self match:input tokenType:SymbolTableParser_ID follow:FOLLOW_SymbolTableParser_ID_in_stat183]; + [self match:input tokenType:12 follow:FOLLOW_12_in_stat185]; + [self match:input tokenType:SymbolTableParser_INT follow:FOLLOW_SymbolTableParser_INT_in_stat187]; + [self match:input tokenType:13 follow:FOLLOW_13_in_stat189]; + + } + break; + case 2 : + // SymbolTable.g:59:9: block // alt + { + [following addObject:FOLLOW_block_in_stat199]; + [self block]; + [following removeLastObject]; + + + + } + break; + + } + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end stat + +// $ANTLR start decl +// SymbolTable.g:62:1: decl : 'int' ID ';' ; +- (void) decl +{ + id _ID1 = nil; + + @try { + // SymbolTable.g:62:9: ( 'int' ID ';' ) // ruleBlockSingleAlt + // SymbolTable.g:62:9: 'int' ID ';' // alt + { + [self match:input tokenType:14 follow:FOLLOW_14_in_decl213]; + _ID1=(id )[input LT:1]; + [_ID1 retain]; + [self match:input tokenType:SymbolTableParser_ID follow:FOLLOW_SymbolTableParser_ID_in_decl215]; + [self match:input tokenType:13 follow:FOLLOW_13_in_decl217]; + [[[SymbolTableParser_Symbols_stack lastObject] valueForKey:@"names"] addObject:_ID1]; + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token labels + [_ID1 release]; + // token+rule list labels + // rule labels + + } + return ; +} +// $ANTLR end decl + + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTable__.gl b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTable__.gl new file mode 100644 index 0000000..c04b135 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/SymbolTable__.gl @@ -0,0 +1,26 @@ +lexer grammar SymbolTable; +options { + language=ObjC; + +} + +T7 : 'method' ; +T8 : '(' ; +T9 : ')' ; +T10 : '{' ; +T11 : '}' ; +T12 : '=' ; +T13 : ';' ; +T14 : 'int' ; + +// $ANTLR src "SymbolTable.g" 66 +ID : ('a'..'z')+ + ; + +// $ANTLR src "SymbolTable.g" 69 +INT : ('0'..'9')+ + ; + +// $ANTLR src "SymbolTable.g" 72 +WS : (' '|'\n'|'\r')+ {$channel=99;} + ; diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/input b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/input new file mode 100644 index 0000000..3c6f938 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/input @@ -0,0 +1,12 @@ +int i; +int j; +method foo() { + int i; + int k; + i=3; + { + int j; + int k; + k = 4; + } +} diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/main.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/main.m new file mode 100644 index 0000000..5796c87 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/main.m @@ -0,0 +1,29 @@ +#import +#import +#import "SymbolTableLexer.h" +#import "SymbolTableParser.h" + +int main() { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + NSString *string = [NSString stringWithContentsOfFile:@"examples/scopes/input"]; + NSLog(@"input is : %@", string); + ANTLRStringStream *stream = [[ANTLRStringStream alloc] initWithStringNoCopy:string]; + SymbolTableLexer *lexer = [[SymbolTableLexer alloc] initWithCharStream:stream]; + + // ANTLRToken *currentToken; + // while ((currentToken = [lexer nextToken]) && [currentToken type] != ANTLRTokenTypeEOF) { + // NSLog(@"%@", currentToken); + // } + + ANTLRCommonTokenStream *tokenStream = [[ANTLRCommonTokenStream alloc] initWithTokenSource:lexer]; + SymbolTableParser *parser = [[SymbolTableParser alloc] initWithTokenStream:tokenStream]; + [parser prog]; + [lexer release]; + [stream release]; + [tokenStream release]; + [parser release]; + + [pool release]; + return 0; +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/output b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/output new file mode 100644 index 0000000..3acfff5 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/scopes/output @@ -0,0 +1,3 @@ +globals: [[@2,4:4='i',<4>,1:4], [@7,11:11='j',<4>,2:4]] +level 2 symbols: [[@37,66:66='j',<4>,8:8], [@42,77:77='k',<4>,9:8]] +level 1 symbols: [[@20,35:35='i',<4>,4:6], [@25,44:44='k',<4>,5:6]] diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleC.g b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleC.g new file mode 100644 index 0000000..919423d --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleC.g @@ -0,0 +1,113 @@ +grammar SimpleC; +options { + output=AST; + language=ObjC; +} + +tokens { + VAR_DEF; + ARG_DEF; + FUNC_HDR; + FUNC_DECL; + FUNC_DEF; + BLOCK; +} + +program + : declaration+ + ; + +declaration + : variable + | functionHeader ';' -> ^(FUNC_DECL functionHeader) + | functionHeader block -> ^(FUNC_DEF functionHeader block) + ; + +variable + : type declarator ';' -> ^(VAR_DEF type declarator) + ; + +declarator + : ID + ; + +functionHeader + : type ID '(' ( formalParameter ( ',' formalParameter )* )? ')' + -> ^(FUNC_HDR type ID formalParameter+) + ; + +formalParameter + : type declarator -> ^(ARG_DEF type declarator) + ; + +type + : 'int' + | 'char' + | 'void' + | ID + ; + +block + : lc='{' + variable* + stat* + '}' + -> ^(BLOCK[$lc,@"BLOCK"] variable* stat*) + ; + +stat: forStat + | expr ';'! + | block + | assignStat ';'! + | ';'! + ; + +forStat + : 'for' '(' start=assignStat ';' expr ';' next=assignStat ')' block + -> ^('for' $start expr $next block) + ; + +assignStat + : ID EQ expr -> ^(EQ ID expr) + ; + +expr: condExpr + ; + +condExpr + : aexpr ( ('=='^ | '<'^) aexpr )? + ; + +aexpr + : atom ( '+'^ atom )* + ; + +atom + : ID + | INT + | '(' expr ')' -> expr + ; + +FOR : 'for' ; +INT_TYPE : 'int' ; +CHAR: 'char'; +VOID: 'void'; + +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + ; + +INT : int+=('0'..'9')+ {NSLog(@"\%@", $int);} + ; + +EQ : '=' ; +EQEQ : '==' ; +LT : '<' ; +PLUS : '+' ; + +WS : ( ' ' + | '\t' + | '\r' + | '\n' + )+ + { $channel=99; } + ; diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleC.tokens b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleC.tokens new file mode 100644 index 0000000..1d6eec0 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleC.tokens @@ -0,0 +1,30 @@ +FUNC_DEF=8 +WS=20 +CHAR=15 +EQ=11 +FUNC_HDR=6 +LT=18 +ARG_DEF=5 +EQEQ=17 +BLOCK=9 +INT=12 +VOID=16 +FOR=13 +PLUS=19 +FUNC_DECL=7 +INT_TYPE=14 +VAR_DEF=4 +ID=10 +'<'=18 +')'=24 +'=='=17 +';'=21 +'{'=25 +'char'=15 +'void'=16 +'('=22 +','=23 +'int'=14 +'for'=13 +'}'=26 +'+'=19 diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCLexer.h b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCLexer.h new file mode 100644 index 0000000..57d6be5 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCLexer.h @@ -0,0 +1,62 @@ +// $ANTLR 3.1b1 SimpleC.g 2007-12-16 20:47:43 + +#import +#import + + +#pragma mark Rule return scopes start +#pragma mark Rule return scopes end + +#pragma mark Tokens +#define SimpleCLexer_T21 21 +#define SimpleCLexer_FUNC_DEF 8 +#define SimpleCLexer_T22 22 +#define SimpleCLexer_WS 20 +#define SimpleCLexer_CHAR 15 +#define SimpleCLexer_EQ 11 +#define SimpleCLexer_T23 23 +#define SimpleCLexer_FUNC_HDR 6 +#define SimpleCLexer_LT 18 +#define SimpleCLexer_ARG_DEF 5 +#define SimpleCLexer_EQEQ 17 +#define SimpleCLexer_BLOCK 9 +#define SimpleCLexer_T25 25 +#define SimpleCLexer_T26 26 +#define SimpleCLexer_INT 12 +#define SimpleCLexer_EOF -1 +#define SimpleCLexer_VOID 16 +#define SimpleCLexer_FOR 13 +#define SimpleCLexer_Tokens 27 +#define SimpleCLexer_PLUS 19 +#define SimpleCLexer_FUNC_DECL 7 +#define SimpleCLexer_T24 24 +#define SimpleCLexer_INT_TYPE 14 +#define SimpleCLexer_ID 10 +#define SimpleCLexer_VAR_DEF 4 + +@interface SimpleCLexer : ANTLRLexer { +} + + +- (void) mT21; +- (void) mT22; +- (void) mT23; +- (void) mT24; +- (void) mT25; +- (void) mT26; +- (void) mFOR; +- (void) mINT_TYPE; +- (void) mCHAR; +- (void) mVOID; +- (void) mID; +- (void) mINT; +- (void) mEQ; +- (void) mEQEQ; +- (void) mLT; +- (void) mPLUS; +- (void) mWS; +- (void) mTokens; + + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCLexer.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCLexer.m new file mode 100644 index 0000000..4d6c3fb --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCLexer.m @@ -0,0 +1,978 @@ +// $ANTLR 3.1b1 SimpleC.g 2007-12-16 20:47:43 + +#import "SimpleCLexer.h" + +/** As per Terence: No returns for lexer rules! +#pragma mark Rule return scopes start +#pragma mark Rule return scopes end +*/ +@implementation SimpleCLexer + +static NSArray *tokenNames; + + ++ (void) initialize +{ + // todo: get tokenNames into lexer - requires changes to CodeGenerator.java and ANTLRCore.sti + tokenNames = [[NSArray alloc] init]; +} + +- (id) initWithCharStream:(id)anInput +{ + if (nil!=(self = [super initWithCharStream:anInput])) { + } + return self; +} + +- (void) dealloc +{ + [super dealloc]; +} + ++ (NSString *) tokenNameForType:(int)aTokenType +{ + return nil; +} + ++ (NSArray *) tokenNames +{ + return tokenNames; +} + +- (NSString *) grammarFileName +{ + return @"SimpleC.g"; +} + + +- (void) mT21 +{ + ANTLRLexerState *_state = [self state]; + @try { + int _type = SimpleCLexer_T21; + // SimpleC.g:7:5: ( ';' ) // ruleBlockSingleAlt + // SimpleC.g:7:7: ';' // alt + { + [self matchChar:';']; + + + + } + + [_state setTokenType:_type]; + } + @finally { + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end T21 + + +- (void) mT22 +{ + ANTLRLexerState *_state = [self state]; + @try { + int _type = SimpleCLexer_T22; + // SimpleC.g:8:5: ( '(' ) // ruleBlockSingleAlt + // SimpleC.g:8:7: '(' // alt + { + [self matchChar:'(']; + + + + } + + [_state setTokenType:_type]; + } + @finally { + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end T22 + + +- (void) mT23 +{ + ANTLRLexerState *_state = [self state]; + @try { + int _type = SimpleCLexer_T23; + // SimpleC.g:9:5: ( ',' ) // ruleBlockSingleAlt + // SimpleC.g:9:7: ',' // alt + { + [self matchChar:',']; + + + + } + + [_state setTokenType:_type]; + } + @finally { + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end T23 + + +- (void) mT24 +{ + ANTLRLexerState *_state = [self state]; + @try { + int _type = SimpleCLexer_T24; + // SimpleC.g:10:5: ( ')' ) // ruleBlockSingleAlt + // SimpleC.g:10:7: ')' // alt + { + [self matchChar:')']; + + + + } + + [_state setTokenType:_type]; + } + @finally { + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end T24 + + +- (void) mT25 +{ + ANTLRLexerState *_state = [self state]; + @try { + int _type = SimpleCLexer_T25; + // SimpleC.g:11:5: ( '{' ) // ruleBlockSingleAlt + // SimpleC.g:11:7: '{' // alt + { + [self matchChar:'{']; + + + + } + + [_state setTokenType:_type]; + } + @finally { + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end T25 + + +- (void) mT26 +{ + ANTLRLexerState *_state = [self state]; + @try { + int _type = SimpleCLexer_T26; + // SimpleC.g:12:5: ( '}' ) // ruleBlockSingleAlt + // SimpleC.g:12:7: '}' // alt + { + [self matchChar:'}']; + + + + } + + [_state setTokenType:_type]; + } + @finally { + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end T26 + + +- (void) mFOR +{ + ANTLRLexerState *_state = [self state]; + @try { + int _type = SimpleCLexer_FOR; + // SimpleC.g:91:5: ( 'for' ) // ruleBlockSingleAlt + // SimpleC.g:91:7: 'for' // alt + { + [self matchString:@"for"]; + + + + } + + [_state setTokenType:_type]; + } + @finally { + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end FOR + + +- (void) mINT_TYPE +{ + ANTLRLexerState *_state = [self state]; + @try { + int _type = SimpleCLexer_INT_TYPE; + // SimpleC.g:92:10: ( 'int' ) // ruleBlockSingleAlt + // SimpleC.g:92:12: 'int' // alt + { + [self matchString:@"int"]; + + + + } + + [_state setTokenType:_type]; + } + @finally { + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end INT_TYPE + + +- (void) mCHAR +{ + ANTLRLexerState *_state = [self state]; + @try { + int _type = SimpleCLexer_CHAR; + // SimpleC.g:93:5: ( 'char' ) // ruleBlockSingleAlt + // SimpleC.g:93:7: 'char' // alt + { + [self matchString:@"char"]; + + + + } + + [_state setTokenType:_type]; + } + @finally { + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end CHAR + + +- (void) mVOID +{ + ANTLRLexerState *_state = [self state]; + @try { + int _type = SimpleCLexer_VOID; + // SimpleC.g:94:5: ( 'void' ) // ruleBlockSingleAlt + // SimpleC.g:94:7: 'void' // alt + { + [self matchString:@"void"]; + + + + } + + [_state setTokenType:_type]; + } + @finally { + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end VOID + + +- (void) mID +{ + ANTLRLexerState *_state = [self state]; + @try { + int _type = SimpleCLexer_ID; + // SimpleC.g:96:5: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )* ) // ruleBlockSingleAlt + // SimpleC.g:96:9: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )* // alt + { + if (([input LA:1]>='A' && [input LA:1]<='Z')||[input LA:1]=='_'||([input LA:1]>='a' && [input LA:1]<='z')) { + [input consume]; + + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + do { + int alt1=2; + { + int LA1_0 = [input LA:1]; + if ( (LA1_0>='0' && LA1_0<='9')||(LA1_0>='A' && LA1_0<='Z')||LA1_0=='_'||(LA1_0>='a' && LA1_0<='z') ) { + alt1 = 1; + } + + } + switch (alt1) { + case 1 : + // SimpleC.g: // alt + { + if (([input LA:1]>='0' && [input LA:1]<='9')||([input LA:1]>='A' && [input LA:1]<='Z')||[input LA:1]=='_'||([input LA:1]>='a' && [input LA:1]<='z')) { + [input consume]; + + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + + } + break; + + default : + goto loop1; + } + } while (YES); loop1: ; + + + } + + [_state setTokenType:_type]; + } + @finally { + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end ID + + +- (void) mINT +{ + ANTLRLexerState *_state = [self state]; + id _int = nil; + NSMutableArray *_list_int = nil; + + @try { + int _type = SimpleCLexer_INT; + // SimpleC.g:99:5: ( (int+= ( '0' .. '9' ) )+ ) // ruleBlockSingleAlt + // SimpleC.g:99:7: (int+= ( '0' .. '9' ) )+ // alt + { + // SimpleC.g:99:10: (int+= ( '0' .. '9' ) )+ // positiveClosureBlock + int cnt2=0; + + do { + int alt2=2; + { + int LA2_0 = [input LA:1]; + if ( (LA2_0>='0' && LA2_0<='9') ) { + alt2 = 1; + } + + } + switch (alt2) { + case 1 : + // SimpleC.g:99:10: int+= ( '0' .. '9' ) // alt + { + // SimpleC.g:99:12: ( '0' .. '9' ) // blockSingleAlt + // SimpleC.g:99:13: '0' .. '9' // alt + { + [self matchRangeFromChar:'0' to:'9']; + + } + + + } + break; + + default : + if ( cnt2 >= 1 ) goto loop2; + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:2]; + @throw eee; + } + cnt2++; + } while (YES); loop2: ; + + NSLog(@"%@", _list_int); + + } + + [_state setTokenType:_type]; + } + @finally { + // rule cleanup + // token+rule list labels + [_list_int release]; + + } + return; +} +// $ANTLR end INT + + +- (void) mEQ +{ + ANTLRLexerState *_state = [self state]; + @try { + int _type = SimpleCLexer_EQ; + // SimpleC.g:102:6: ( '=' ) // ruleBlockSingleAlt + // SimpleC.g:102:8: '=' // alt + { + [self matchChar:'=']; + + + + } + + [_state setTokenType:_type]; + } + @finally { + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end EQ + + +- (void) mEQEQ +{ + ANTLRLexerState *_state = [self state]; + @try { + int _type = SimpleCLexer_EQEQ; + // SimpleC.g:103:6: ( '==' ) // ruleBlockSingleAlt + // SimpleC.g:103:8: '==' // alt + { + [self matchString:@"=="]; + + + + } + + [_state setTokenType:_type]; + } + @finally { + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end EQEQ + + +- (void) mLT +{ + ANTLRLexerState *_state = [self state]; + @try { + int _type = SimpleCLexer_LT; + // SimpleC.g:104:6: ( '<' ) // ruleBlockSingleAlt + // SimpleC.g:104:8: '<' // alt + { + [self matchChar:'<']; + + + + } + + [_state setTokenType:_type]; + } + @finally { + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end LT + + +- (void) mPLUS +{ + ANTLRLexerState *_state = [self state]; + @try { + int _type = SimpleCLexer_PLUS; + // SimpleC.g:105:6: ( '+' ) // ruleBlockSingleAlt + // SimpleC.g:105:8: '+' // alt + { + [self matchChar:'+']; + + + + } + + [_state setTokenType:_type]; + } + @finally { + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end PLUS + + +- (void) mWS +{ + ANTLRLexerState *_state = [self state]; + @try { + int _type = SimpleCLexer_WS; + // SimpleC.g:107:5: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) // ruleBlockSingleAlt + // SimpleC.g:107:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ // alt + { + // SimpleC.g:107:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ // positiveClosureBlock + int cnt3=0; + + do { + int alt3=2; + { + int LA3_0 = [input LA:1]; + if ( (LA3_0>='\t' && LA3_0<='\n')||LA3_0=='\r'||LA3_0==' ' ) { + alt3 = 1; + } + + } + switch (alt3) { + case 1 : + // SimpleC.g: // alt + { + if (([input LA:1]>='\t' && [input LA:1]<='\n')||[input LA:1]=='\r'||[input LA:1]==' ') { + [input consume]; + + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + + } + break; + + default : + if ( cnt3 >= 1 ) goto loop3; + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:3]; + @throw eee; + } + cnt3++; + } while (YES); loop3: ; + + [_state setChannel:99]; + + } + + [_state setTokenType:_type]; + } + @finally { + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end WS + +- (void) mTokens +{ + // SimpleC.g:1:8: ( T21 | T22 | T23 | T24 | T25 | T26 | FOR | INT_TYPE | CHAR | VOID | ID | INT | EQ | EQEQ | LT | PLUS | WS ) //ruleblock + int alt4=17; + switch ([input LA:1]) { + case ';': + alt4 = 1; + break; + case '(': + alt4 = 2; + break; + case ',': + alt4 = 3; + break; + case ')': + alt4 = 4; + break; + case '{': + alt4 = 5; + break; + case '}': + alt4 = 6; + break; + case 'f': + { + int LA4_7 = [input LA:2]; + if ( LA4_7=='o' ) { + { + int LA4_17 = [input LA:3]; + if ( LA4_17=='r' ) { + { + int LA4_23 = [input LA:4]; + if ( (LA4_23>='0' && LA4_23<='9')||(LA4_23>='A' && LA4_23<='Z')||LA4_23=='_'||(LA4_23>='a' && LA4_23<='z') ) { + alt4 = 11; + } + else { + alt4 = 7; } + } + } + else { + alt4 = 11; } + } + } + else { + alt4 = 11; } + } + break; + case 'i': + { + int LA4_8 = [input LA:2]; + if ( LA4_8=='n' ) { + { + int LA4_18 = [input LA:3]; + if ( LA4_18=='t' ) { + { + int LA4_24 = [input LA:4]; + if ( (LA4_24>='0' && LA4_24<='9')||(LA4_24>='A' && LA4_24<='Z')||LA4_24=='_'||(LA4_24>='a' && LA4_24<='z') ) { + alt4 = 11; + } + else { + alt4 = 8; } + } + } + else { + alt4 = 11; } + } + } + else { + alt4 = 11; } + } + break; + case 'c': + { + int LA4_9 = [input LA:2]; + if ( LA4_9=='h' ) { + { + int LA4_19 = [input LA:3]; + if ( LA4_19=='a' ) { + { + int LA4_25 = [input LA:4]; + if ( LA4_25=='r' ) { + { + int LA4_29 = [input LA:5]; + if ( (LA4_29>='0' && LA4_29<='9')||(LA4_29>='A' && LA4_29<='Z')||LA4_29=='_'||(LA4_29>='a' && LA4_29<='z') ) { + alt4 = 11; + } + else { + alt4 = 9; } + } + } + else { + alt4 = 11; } + } + } + else { + alt4 = 11; } + } + } + else { + alt4 = 11; } + } + break; + case 'v': + { + int LA4_10 = [input LA:2]; + if ( LA4_10=='o' ) { + { + int LA4_20 = [input LA:3]; + if ( LA4_20=='i' ) { + { + int LA4_26 = [input LA:4]; + if ( LA4_26=='d' ) { + { + int LA4_30 = [input LA:5]; + if ( (LA4_30>='0' && LA4_30<='9')||(LA4_30>='A' && LA4_30<='Z')||LA4_30=='_'||(LA4_30>='a' && LA4_30<='z') ) { + alt4 = 11; + } + else { + alt4 = 10; } + } + } + else { + alt4 = 11; } + } + } + else { + alt4 = 11; } + } + } + else { + alt4 = 11; } + } + break; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'd': + case 'e': + case 'g': + case 'h': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'w': + case 'x': + case 'y': + case 'z': + alt4 = 11; + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + alt4 = 12; + break; + case '=': + { + int LA4_13 = [input LA:2]; + if ( LA4_13=='=' ) { + alt4 = 14; + } + else { + alt4 = 13; } + } + break; + case '<': + alt4 = 15; + break; + case '+': + alt4 = 16; + break; + case '\t': + case '\n': + case '\r': + case ' ': + alt4 = 17; + break; + default: + { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:4 state:0 stream:input]; + @throw nvae; + + }} + switch (alt4) { + case 1 : + // SimpleC.g:1:10: T21 // alt + { + [self mT21]; + + + + } + break; + case 2 : + // SimpleC.g:1:14: T22 // alt + { + [self mT22]; + + + + } + break; + case 3 : + // SimpleC.g:1:18: T23 // alt + { + [self mT23]; + + + + } + break; + case 4 : + // SimpleC.g:1:22: T24 // alt + { + [self mT24]; + + + + } + break; + case 5 : + // SimpleC.g:1:26: T25 // alt + { + [self mT25]; + + + + } + break; + case 6 : + // SimpleC.g:1:30: T26 // alt + { + [self mT26]; + + + + } + break; + case 7 : + // SimpleC.g:1:34: FOR // alt + { + [self mFOR]; + + + + } + break; + case 8 : + // SimpleC.g:1:38: INT_TYPE // alt + { + [self mINT_TYPE]; + + + + } + break; + case 9 : + // SimpleC.g:1:47: CHAR // alt + { + [self mCHAR]; + + + + } + break; + case 10 : + // SimpleC.g:1:52: VOID // alt + { + [self mVOID]; + + + + } + break; + case 11 : + // SimpleC.g:1:57: ID // alt + { + [self mID]; + + + + } + break; + case 12 : + // SimpleC.g:1:60: INT // alt + { + [self mINT]; + + + + } + break; + case 13 : + // SimpleC.g:1:64: EQ // alt + { + [self mEQ]; + + + + } + break; + case 14 : + // SimpleC.g:1:67: EQEQ // alt + { + [self mEQEQ]; + + + + } + break; + case 15 : + // SimpleC.g:1:72: LT // alt + { + [self mLT]; + + + + } + break; + case 16 : + // SimpleC.g:1:75: PLUS // alt + { + [self mPLUS]; + + + + } + break; + case 17 : + // SimpleC.g:1:80: WS // alt + { + [self mWS]; + + + + } + break; + + } + +} + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCParser.h b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCParser.h new file mode 100644 index 0000000..171c8b9 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCParser.h @@ -0,0 +1,159 @@ +// $ANTLR 3.1b1 SimpleC.g 2007-12-16 20:47:42 + +#import +#import + + +#pragma mark Cyclic DFA interface start SimpleCParserDFA2 +@interface SimpleCParserDFA2 : ANTLRDFA {} @end + +#pragma mark Cyclic DFA interface end SimpleCParserDFA2 + +#pragma mark Tokens +#define SimpleCParser_FUNC_DEF 8 +#define SimpleCParser_WS 20 +#define SimpleCParser_CHAR 15 +#define SimpleCParser_EQ 11 +#define SimpleCParser_FUNC_HDR 6 +#define SimpleCParser_LT 18 +#define SimpleCParser_ARG_DEF 5 +#define SimpleCParser_EQEQ 17 +#define SimpleCParser_BLOCK 9 +#define SimpleCParser_INT 12 +#define SimpleCParser_EOF -1 +#define SimpleCParser_VOID 16 +#define SimpleCParser_FOR 13 +#define SimpleCParser_PLUS 19 +#define SimpleCParser_FUNC_DECL 7 +#define SimpleCParser_INT_TYPE 14 +#define SimpleCParser_VAR_DEF 4 +#define SimpleCParser_ID 10 + +#pragma mark Dynamic Global Scopes + +#pragma mark Dynamic Rule Scopes + +#pragma mark Rule Return Scopes +@interface SimpleCParser_program_return : ANTLRParserRuleReturnScope { + id tree; +} +- (id) tree; +- (void) setTree:(id)aTree; +@end +@interface SimpleCParser_declaration_return : ANTLRParserRuleReturnScope { + id tree; +} +- (id) tree; +- (void) setTree:(id)aTree; +@end +@interface SimpleCParser_variable_return : ANTLRParserRuleReturnScope { + id tree; +} +- (id) tree; +- (void) setTree:(id)aTree; +@end +@interface SimpleCParser_declarator_return : ANTLRParserRuleReturnScope { + id tree; +} +- (id) tree; +- (void) setTree:(id)aTree; +@end +@interface SimpleCParser_functionHeader_return : ANTLRParserRuleReturnScope { + id tree; +} +- (id) tree; +- (void) setTree:(id)aTree; +@end +@interface SimpleCParser_formalParameter_return : ANTLRParserRuleReturnScope { + id tree; +} +- (id) tree; +- (void) setTree:(id)aTree; +@end +@interface SimpleCParser_type_return : ANTLRParserRuleReturnScope { + id tree; +} +- (id) tree; +- (void) setTree:(id)aTree; +@end +@interface SimpleCParser_block_return : ANTLRParserRuleReturnScope { + id tree; +} +- (id) tree; +- (void) setTree:(id)aTree; +@end +@interface SimpleCParser_stat_return : ANTLRParserRuleReturnScope { + id tree; +} +- (id) tree; +- (void) setTree:(id)aTree; +@end +@interface SimpleCParser_forStat_return : ANTLRParserRuleReturnScope { + id tree; +} +- (id) tree; +- (void) setTree:(id)aTree; +@end +@interface SimpleCParser_assignStat_return : ANTLRParserRuleReturnScope { + id tree; +} +- (id) tree; +- (void) setTree:(id)aTree; +@end +@interface SimpleCParser_expr_return : ANTLRParserRuleReturnScope { + id tree; +} +- (id) tree; +- (void) setTree:(id)aTree; +@end +@interface SimpleCParser_condExpr_return : ANTLRParserRuleReturnScope { + id tree; +} +- (id) tree; +- (void) setTree:(id)aTree; +@end +@interface SimpleCParser_aexpr_return : ANTLRParserRuleReturnScope { + id tree; +} +- (id) tree; +- (void) setTree:(id)aTree; +@end +@interface SimpleCParser_atom_return : ANTLRParserRuleReturnScope { + id tree; +} +- (id) tree; +- (void) setTree:(id)aTree; +@end + + + +@interface SimpleCParser : ANTLRParser { + + SimpleCParserDFA2 *dfa2; + + id treeAdaptor; + + } + + +- (SimpleCParser_program_return *) program; +- (SimpleCParser_declaration_return *) declaration; +- (SimpleCParser_variable_return *) variable; +- (SimpleCParser_declarator_return *) declarator; +- (SimpleCParser_functionHeader_return *) functionHeader; +- (SimpleCParser_formalParameter_return *) formalParameter; +- (SimpleCParser_type_return *) type; +- (SimpleCParser_block_return *) block; +- (SimpleCParser_stat_return *) stat; +- (SimpleCParser_forStat_return *) forStat; +- (SimpleCParser_assignStat_return *) assignStat; +- (SimpleCParser_expr_return *) expr; +- (SimpleCParser_condExpr_return *) condExpr; +- (SimpleCParser_aexpr_return *) aexpr; +- (SimpleCParser_atom_return *) atom; + + +- (id) treeAdaptor; +- (void) setTreeAdaptor:(id)theTreeAdaptor; + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCParser.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCParser.m new file mode 100644 index 0000000..79497fd --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCParser.m @@ -0,0 +1,2268 @@ +// $ANTLR 3.1b1 SimpleC.g 2007-12-16 20:47:42 + +#import "SimpleCParser.h" + +#import + + +#pragma mark Cyclic DFA implementation start SimpleCParserDFA2 +@implementation SimpleCParserDFA2 +const static int SimpleCParserdfa2_eot[13] = + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; +const static int SimpleCParserdfa2_eof[13] = + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; +const static unichar SimpleCParserdfa2_min[13] = + {10,10,21,10,0,10,21,23,0,0,10,10,23}; +const static unichar SimpleCParserdfa2_max[13] = + {16,10,22,24,0,10,25,24,0,0,16,10,24}; +const static int SimpleCParserdfa2_accept[13] = + {-1,-1,-1,-1,1,-1,-1,-1,3,2,-1,-1,-1}; +const static int SimpleCParserdfa2_special[13] = + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; +const static int SimpleCParserdfa2_transition[] = {}; +const static int SimpleCParserdfa2_transition0[] = {2}; +const static int SimpleCParserdfa2_transition1[] = {4, 3}; +const static int SimpleCParserdfa2_transition2[] = {10, 6}; +const static int SimpleCParserdfa2_transition3[] = {1, -1, -1, -1, 1, 1, + 1}; +const static int SimpleCParserdfa2_transition4[] = {7}; +const static int SimpleCParserdfa2_transition5[] = {12}; +const static int SimpleCParserdfa2_transition6[] = {5, -1, -1, -1, 5, 5, + 5, -1, -1, -1, -1, -1, -1, -1, 6}; +const static int SimpleCParserdfa2_transition7[] = {11, -1, -1, -1, 11, + 11, 11}; +const static int SimpleCParserdfa2_transition8[] = {9, -1, -1, -1, 8}; + + +- (id) initWithRecognizer:(ANTLRBaseRecognizer *) theRecognizer +{ + if ((self = [super initWithRecognizer:theRecognizer]) != nil) { + eot = SimpleCParserdfa2_eot; + eof = SimpleCParserdfa2_eof; + min = SimpleCParserdfa2_min; + max = SimpleCParserdfa2_max; + accept = SimpleCParserdfa2_accept; + special = SimpleCParserdfa2_special; + if (!(transition = calloc(13, sizeof(void*)))) { + [self release]; + return nil; + } + transition[0] = SimpleCParserdfa2_transition3; + transition[1] = SimpleCParserdfa2_transition0; + transition[2] = SimpleCParserdfa2_transition1; + transition[3] = SimpleCParserdfa2_transition6; + transition[4] = SimpleCParserdfa2_transition; + transition[5] = SimpleCParserdfa2_transition4; + transition[6] = SimpleCParserdfa2_transition8; + transition[7] = SimpleCParserdfa2_transition2; + transition[8] = SimpleCParserdfa2_transition; + transition[9] = SimpleCParserdfa2_transition; + transition[10] = SimpleCParserdfa2_transition7; + transition[11] = SimpleCParserdfa2_transition5; + transition[12] = SimpleCParserdfa2_transition2; + } + return self; +} + +- (void) dealloc +{ + free(transition); + [super dealloc]; +} + +- (NSString *) description +{ + return @"20:1: declaration : ( variable | functionHeader ';' -> ^( FUNC_DECL functionHeader ) | functionHeader block -> ^( FUNC_DEF functionHeader block ) );"; +} + + +@end +#pragma mark Cyclic DFA implementation end SimpleCParserDFA2 + + + +#pragma mark Bitsets +const static unsigned long long FOLLOW_declaration_in_program85_data[] = {0x000000000001C402LL}; +static ANTLRBitSet *FOLLOW_declaration_in_program85; +const static unsigned long long FOLLOW_variable_in_declaration105_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_variable_in_declaration105; +const static unsigned long long FOLLOW_functionHeader_in_declaration115_data[] = {0x0000000000200000LL}; +static ANTLRBitSet *FOLLOW_functionHeader_in_declaration115; +const static unsigned long long FOLLOW_21_in_declaration117_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_21_in_declaration117; +const static unsigned long long FOLLOW_functionHeader_in_declaration135_data[] = {0x0000000002000000LL}; +static ANTLRBitSet *FOLLOW_functionHeader_in_declaration135; +const static unsigned long long FOLLOW_block_in_declaration137_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_block_in_declaration137; +const static unsigned long long FOLLOW_type_in_variable166_data[] = {0x0000000000000400LL}; +static ANTLRBitSet *FOLLOW_type_in_variable166; +const static unsigned long long FOLLOW_declarator_in_variable168_data[] = {0x0000000000200000LL}; +static ANTLRBitSet *FOLLOW_declarator_in_variable168; +const static unsigned long long FOLLOW_21_in_variable170_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_21_in_variable170; +const static unsigned long long FOLLOW_SimpleCParser_ID_in_declarator199_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_SimpleCParser_ID_in_declarator199; +const static unsigned long long FOLLOW_type_in_functionHeader219_data[] = {0x0000000000000400LL}; +static ANTLRBitSet *FOLLOW_type_in_functionHeader219; +const static unsigned long long FOLLOW_SimpleCParser_ID_in_functionHeader221_data[] = {0x0000000000400000LL}; +static ANTLRBitSet *FOLLOW_SimpleCParser_ID_in_functionHeader221; +const static unsigned long long FOLLOW_22_in_functionHeader223_data[] = {0x000000000101C400LL}; +static ANTLRBitSet *FOLLOW_22_in_functionHeader223; +const static unsigned long long FOLLOW_formalParameter_in_functionHeader227_data[] = {0x0000000001800000LL}; +static ANTLRBitSet *FOLLOW_formalParameter_in_functionHeader227; +const static unsigned long long FOLLOW_23_in_functionHeader231_data[] = {0x000000000001C400LL}; +static ANTLRBitSet *FOLLOW_23_in_functionHeader231; +const static unsigned long long FOLLOW_formalParameter_in_functionHeader233_data[] = {0x0000000001800000LL}; +static ANTLRBitSet *FOLLOW_formalParameter_in_functionHeader233; +const static unsigned long long FOLLOW_24_in_functionHeader241_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_24_in_functionHeader241; +const static unsigned long long FOLLOW_type_in_formalParameter281_data[] = {0x0000000000000400LL}; +static ANTLRBitSet *FOLLOW_type_in_formalParameter281; +const static unsigned long long FOLLOW_declarator_in_formalParameter283_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_declarator_in_formalParameter283; +const static unsigned long long FOLLOW_set_in_type0_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_set_in_type0; +const static unsigned long long FOLLOW_25_in_block376_data[] = {0x000000000661F400LL}; +static ANTLRBitSet *FOLLOW_25_in_block376; +const static unsigned long long FOLLOW_variable_in_block390_data[] = {0x000000000661F400LL}; +static ANTLRBitSet *FOLLOW_variable_in_block390; +const static unsigned long long FOLLOW_stat_in_block405_data[] = {0x0000000006603400LL}; +static ANTLRBitSet *FOLLOW_stat_in_block405; +const static unsigned long long FOLLOW_26_in_block416_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_26_in_block416; +const static unsigned long long FOLLOW_forStat_in_stat449_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_forStat_in_stat449; +const static unsigned long long FOLLOW_expr_in_stat457_data[] = {0x0000000000200000LL}; +static ANTLRBitSet *FOLLOW_expr_in_stat457; +const static unsigned long long FOLLOW_21_in_stat459_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_21_in_stat459; +const static unsigned long long FOLLOW_block_in_stat468_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_block_in_stat468; +const static unsigned long long FOLLOW_assignStat_in_stat476_data[] = {0x0000000000200000LL}; +static ANTLRBitSet *FOLLOW_assignStat_in_stat476; +const static unsigned long long FOLLOW_21_in_stat478_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_21_in_stat478; +const static unsigned long long FOLLOW_21_in_stat487_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_21_in_stat487; +const static unsigned long long FOLLOW_SimpleCParser_FOR_in_forStat507_data[] = {0x0000000000400000LL}; +static ANTLRBitSet *FOLLOW_SimpleCParser_FOR_in_forStat507; +const static unsigned long long FOLLOW_22_in_forStat509_data[] = {0x0000000000000400LL}; +static ANTLRBitSet *FOLLOW_22_in_forStat509; +const static unsigned long long FOLLOW_assignStat_in_forStat513_data[] = {0x0000000000200000LL}; +static ANTLRBitSet *FOLLOW_assignStat_in_forStat513; +const static unsigned long long FOLLOW_21_in_forStat515_data[] = {0x0000000000401400LL}; +static ANTLRBitSet *FOLLOW_21_in_forStat515; +const static unsigned long long FOLLOW_expr_in_forStat517_data[] = {0x0000000000200000LL}; +static ANTLRBitSet *FOLLOW_expr_in_forStat517; +const static unsigned long long FOLLOW_21_in_forStat519_data[] = {0x0000000000000400LL}; +static ANTLRBitSet *FOLLOW_21_in_forStat519; +const static unsigned long long FOLLOW_assignStat_in_forStat523_data[] = {0x0000000001000000LL}; +static ANTLRBitSet *FOLLOW_assignStat_in_forStat523; +const static unsigned long long FOLLOW_24_in_forStat525_data[] = {0x0000000002000000LL}; +static ANTLRBitSet *FOLLOW_24_in_forStat525; +const static unsigned long long FOLLOW_block_in_forStat527_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_block_in_forStat527; +const static unsigned long long FOLLOW_SimpleCParser_ID_in_assignStat570_data[] = {0x0000000000000800LL}; +static ANTLRBitSet *FOLLOW_SimpleCParser_ID_in_assignStat570; +const static unsigned long long FOLLOW_SimpleCParser_EQ_in_assignStat572_data[] = {0x0000000000401400LL}; +static ANTLRBitSet *FOLLOW_SimpleCParser_EQ_in_assignStat572; +const static unsigned long long FOLLOW_expr_in_assignStat574_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_expr_in_assignStat574; +const static unsigned long long FOLLOW_condExpr_in_expr598_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_condExpr_in_expr598; +const static unsigned long long FOLLOW_aexpr_in_condExpr617_data[] = {0x0000000000060002LL}; +static ANTLRBitSet *FOLLOW_aexpr_in_condExpr617; +const static unsigned long long FOLLOW_SimpleCParser_EQEQ_in_condExpr622_data[] = {0x0000000000401400LL}; +static ANTLRBitSet *FOLLOW_SimpleCParser_EQEQ_in_condExpr622; +const static unsigned long long FOLLOW_SimpleCParser_LT_in_condExpr627_data[] = {0x0000000000401400LL}; +static ANTLRBitSet *FOLLOW_SimpleCParser_LT_in_condExpr627; +const static unsigned long long FOLLOW_aexpr_in_condExpr631_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_aexpr_in_condExpr631; +const static unsigned long long FOLLOW_atom_in_aexpr653_data[] = {0x0000000000080002LL}; +static ANTLRBitSet *FOLLOW_atom_in_aexpr653; +const static unsigned long long FOLLOW_SimpleCParser_PLUS_in_aexpr657_data[] = {0x0000000000401400LL}; +static ANTLRBitSet *FOLLOW_SimpleCParser_PLUS_in_aexpr657; +const static unsigned long long FOLLOW_atom_in_aexpr660_data[] = {0x0000000000080002LL}; +static ANTLRBitSet *FOLLOW_atom_in_aexpr660; +const static unsigned long long FOLLOW_SimpleCParser_ID_in_atom680_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_SimpleCParser_ID_in_atom680; +const static unsigned long long FOLLOW_SimpleCParser_INT_in_atom694_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_SimpleCParser_INT_in_atom694; +const static unsigned long long FOLLOW_22_in_atom708_data[] = {0x0000000000401400LL}; +static ANTLRBitSet *FOLLOW_22_in_atom708; +const static unsigned long long FOLLOW_expr_in_atom710_data[] = {0x0000000001000000LL}; +static ANTLRBitSet *FOLLOW_expr_in_atom710; +const static unsigned long long FOLLOW_24_in_atom712_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_24_in_atom712; + + +#pragma mark Dynamic Global Scopes + +#pragma mark Dynamic Rule Scopes + +#pragma mark Rule return scopes start +@implementation SimpleCParser_program_return +- (id) tree +{ + return tree; +} +- (void) setTree:(id)aTree +{ + if (tree != aTree) { + [aTree retain]; + [tree release]; + tree = aTree; + } +} + +- (void) dealloc +{ + [self setTree:nil]; + [super dealloc]; +} +@end +@implementation SimpleCParser_declaration_return +- (id) tree +{ + return tree; +} +- (void) setTree:(id)aTree +{ + if (tree != aTree) { + [aTree retain]; + [tree release]; + tree = aTree; + } +} + +- (void) dealloc +{ + [self setTree:nil]; + [super dealloc]; +} +@end +@implementation SimpleCParser_variable_return +- (id) tree +{ + return tree; +} +- (void) setTree:(id)aTree +{ + if (tree != aTree) { + [aTree retain]; + [tree release]; + tree = aTree; + } +} + +- (void) dealloc +{ + [self setTree:nil]; + [super dealloc]; +} +@end +@implementation SimpleCParser_declarator_return +- (id) tree +{ + return tree; +} +- (void) setTree:(id)aTree +{ + if (tree != aTree) { + [aTree retain]; + [tree release]; + tree = aTree; + } +} + +- (void) dealloc +{ + [self setTree:nil]; + [super dealloc]; +} +@end +@implementation SimpleCParser_functionHeader_return +- (id) tree +{ + return tree; +} +- (void) setTree:(id)aTree +{ + if (tree != aTree) { + [aTree retain]; + [tree release]; + tree = aTree; + } +} + +- (void) dealloc +{ + [self setTree:nil]; + [super dealloc]; +} +@end +@implementation SimpleCParser_formalParameter_return +- (id) tree +{ + return tree; +} +- (void) setTree:(id)aTree +{ + if (tree != aTree) { + [aTree retain]; + [tree release]; + tree = aTree; + } +} + +- (void) dealloc +{ + [self setTree:nil]; + [super dealloc]; +} +@end +@implementation SimpleCParser_type_return +- (id) tree +{ + return tree; +} +- (void) setTree:(id)aTree +{ + if (tree != aTree) { + [aTree retain]; + [tree release]; + tree = aTree; + } +} + +- (void) dealloc +{ + [self setTree:nil]; + [super dealloc]; +} +@end +@implementation SimpleCParser_block_return +- (id) tree +{ + return tree; +} +- (void) setTree:(id)aTree +{ + if (tree != aTree) { + [aTree retain]; + [tree release]; + tree = aTree; + } +} + +- (void) dealloc +{ + [self setTree:nil]; + [super dealloc]; +} +@end +@implementation SimpleCParser_stat_return +- (id) tree +{ + return tree; +} +- (void) setTree:(id)aTree +{ + if (tree != aTree) { + [aTree retain]; + [tree release]; + tree = aTree; + } +} + +- (void) dealloc +{ + [self setTree:nil]; + [super dealloc]; +} +@end +@implementation SimpleCParser_forStat_return +- (id) tree +{ + return tree; +} +- (void) setTree:(id)aTree +{ + if (tree != aTree) { + [aTree retain]; + [tree release]; + tree = aTree; + } +} + +- (void) dealloc +{ + [self setTree:nil]; + [super dealloc]; +} +@end +@implementation SimpleCParser_assignStat_return +- (id) tree +{ + return tree; +} +- (void) setTree:(id)aTree +{ + if (tree != aTree) { + [aTree retain]; + [tree release]; + tree = aTree; + } +} + +- (void) dealloc +{ + [self setTree:nil]; + [super dealloc]; +} +@end +@implementation SimpleCParser_expr_return +- (id) tree +{ + return tree; +} +- (void) setTree:(id)aTree +{ + if (tree != aTree) { + [aTree retain]; + [tree release]; + tree = aTree; + } +} + +- (void) dealloc +{ + [self setTree:nil]; + [super dealloc]; +} +@end +@implementation SimpleCParser_condExpr_return +- (id) tree +{ + return tree; +} +- (void) setTree:(id)aTree +{ + if (tree != aTree) { + [aTree retain]; + [tree release]; + tree = aTree; + } +} + +- (void) dealloc +{ + [self setTree:nil]; + [super dealloc]; +} +@end +@implementation SimpleCParser_aexpr_return +- (id) tree +{ + return tree; +} +- (void) setTree:(id)aTree +{ + if (tree != aTree) { + [aTree retain]; + [tree release]; + tree = aTree; + } +} + +- (void) dealloc +{ + [self setTree:nil]; + [super dealloc]; +} +@end +@implementation SimpleCParser_atom_return +- (id) tree +{ + return tree; +} +- (void) setTree:(id)aTree +{ + if (tree != aTree) { + [aTree retain]; + [tree release]; + tree = aTree; + } +} + +- (void) dealloc +{ + [self setTree:nil]; + [super dealloc]; +} +@end + + +@implementation SimpleCParser + +static NSArray *tokenNames; + ++ (void) initialize +{ + FOLLOW_declaration_in_program85 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_declaration_in_program85_data count:1]; + FOLLOW_variable_in_declaration105 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_variable_in_declaration105_data count:1]; + FOLLOW_functionHeader_in_declaration115 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_functionHeader_in_declaration115_data count:1]; + FOLLOW_21_in_declaration117 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_21_in_declaration117_data count:1]; + FOLLOW_functionHeader_in_declaration135 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_functionHeader_in_declaration135_data count:1]; + FOLLOW_block_in_declaration137 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_block_in_declaration137_data count:1]; + FOLLOW_type_in_variable166 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_type_in_variable166_data count:1]; + FOLLOW_declarator_in_variable168 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_declarator_in_variable168_data count:1]; + FOLLOW_21_in_variable170 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_21_in_variable170_data count:1]; + FOLLOW_SimpleCParser_ID_in_declarator199 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCParser_ID_in_declarator199_data count:1]; + FOLLOW_type_in_functionHeader219 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_type_in_functionHeader219_data count:1]; + FOLLOW_SimpleCParser_ID_in_functionHeader221 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCParser_ID_in_functionHeader221_data count:1]; + FOLLOW_22_in_functionHeader223 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_22_in_functionHeader223_data count:1]; + FOLLOW_formalParameter_in_functionHeader227 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_formalParameter_in_functionHeader227_data count:1]; + FOLLOW_23_in_functionHeader231 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_23_in_functionHeader231_data count:1]; + FOLLOW_formalParameter_in_functionHeader233 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_formalParameter_in_functionHeader233_data count:1]; + FOLLOW_24_in_functionHeader241 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_24_in_functionHeader241_data count:1]; + FOLLOW_type_in_formalParameter281 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_type_in_formalParameter281_data count:1]; + FOLLOW_declarator_in_formalParameter283 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_declarator_in_formalParameter283_data count:1]; + FOLLOW_set_in_type0 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_set_in_type0_data count:1]; + FOLLOW_25_in_block376 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_25_in_block376_data count:1]; + FOLLOW_variable_in_block390 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_variable_in_block390_data count:1]; + FOLLOW_stat_in_block405 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_stat_in_block405_data count:1]; + FOLLOW_26_in_block416 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_26_in_block416_data count:1]; + FOLLOW_forStat_in_stat449 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_forStat_in_stat449_data count:1]; + FOLLOW_expr_in_stat457 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_expr_in_stat457_data count:1]; + FOLLOW_21_in_stat459 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_21_in_stat459_data count:1]; + FOLLOW_block_in_stat468 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_block_in_stat468_data count:1]; + FOLLOW_assignStat_in_stat476 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_assignStat_in_stat476_data count:1]; + FOLLOW_21_in_stat478 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_21_in_stat478_data count:1]; + FOLLOW_21_in_stat487 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_21_in_stat487_data count:1]; + FOLLOW_SimpleCParser_FOR_in_forStat507 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCParser_FOR_in_forStat507_data count:1]; + FOLLOW_22_in_forStat509 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_22_in_forStat509_data count:1]; + FOLLOW_assignStat_in_forStat513 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_assignStat_in_forStat513_data count:1]; + FOLLOW_21_in_forStat515 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_21_in_forStat515_data count:1]; + FOLLOW_expr_in_forStat517 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_expr_in_forStat517_data count:1]; + FOLLOW_21_in_forStat519 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_21_in_forStat519_data count:1]; + FOLLOW_assignStat_in_forStat523 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_assignStat_in_forStat523_data count:1]; + FOLLOW_24_in_forStat525 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_24_in_forStat525_data count:1]; + FOLLOW_block_in_forStat527 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_block_in_forStat527_data count:1]; + FOLLOW_SimpleCParser_ID_in_assignStat570 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCParser_ID_in_assignStat570_data count:1]; + FOLLOW_SimpleCParser_EQ_in_assignStat572 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCParser_EQ_in_assignStat572_data count:1]; + FOLLOW_expr_in_assignStat574 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_expr_in_assignStat574_data count:1]; + FOLLOW_condExpr_in_expr598 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_condExpr_in_expr598_data count:1]; + FOLLOW_aexpr_in_condExpr617 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_aexpr_in_condExpr617_data count:1]; + FOLLOW_SimpleCParser_EQEQ_in_condExpr622 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCParser_EQEQ_in_condExpr622_data count:1]; + FOLLOW_SimpleCParser_LT_in_condExpr627 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCParser_LT_in_condExpr627_data count:1]; + FOLLOW_aexpr_in_condExpr631 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_aexpr_in_condExpr631_data count:1]; + FOLLOW_atom_in_aexpr653 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_atom_in_aexpr653_data count:1]; + FOLLOW_SimpleCParser_PLUS_in_aexpr657 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCParser_PLUS_in_aexpr657_data count:1]; + FOLLOW_atom_in_aexpr660 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_atom_in_aexpr660_data count:1]; + FOLLOW_SimpleCParser_ID_in_atom680 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCParser_ID_in_atom680_data count:1]; + FOLLOW_SimpleCParser_INT_in_atom694 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCParser_INT_in_atom694_data count:1]; + FOLLOW_22_in_atom708 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_22_in_atom708_data count:1]; + FOLLOW_expr_in_atom710 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_expr_in_atom710_data count:1]; + FOLLOW_24_in_atom712 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_24_in_atom712_data count:1]; + + tokenNames = [[NSArray alloc] initWithObjects:@"", @"", @"", @"", + @"VAR_DEF", @"ARG_DEF", @"FUNC_HDR", @"FUNC_DECL", @"FUNC_DEF", @"BLOCK", + @"ID", @"EQ", @"INT", @"FOR", @"INT_TYPE", @"CHAR", @"VOID", @"EQEQ", @"LT", + @"PLUS", @"WS", @"';'", @"'('", @"','", @"')'", @"'{'", @"'}'", nil]; +} + +- (id) initWithTokenStream:(id)aStream +{ + if ((self = [super initWithTokenStream:aStream])) { + + dfa2 = [[SimpleCParserDFA2 alloc] initWithRecognizer:self]; + + [self setTreeAdaptor:[[[ANTLRCommonTreeAdaptor alloc] init] autorelease]]; + } + return self; +} + +- (void) dealloc +{ + [dfa2 release]; + [self setTreeAdaptor:nil]; + + [super dealloc]; +} + +- (NSString *) grammarFileName +{ + return @"SimpleC.g"; +} + + +// $ANTLR start program +// SimpleC.g:16:1: program : ( declaration )+ ; +- (SimpleCParser_program_return *) program +{ + ANTLRBaseRecognizerState *_state = [self state]; + SimpleCParser_program_return * _retval = [[[SimpleCParser_program_return alloc] init] autorelease]; + [_retval setStart:[input LT:1]]; + + id root_0 = nil; + + SimpleCParser_declaration_return * _declaration1 = nil; + + + + @try { + // SimpleC.g:17:5: ( ( declaration )+ ) // ruleBlockSingleAlt + // SimpleC.g:17:9: ( declaration )+ // alt + { + root_0 = (id)[treeAdaptor newEmptyTree]; + + // SimpleC.g:17:9: ( declaration )+ // positiveClosureBlock + int cnt1=0; + + do { + int alt1=2; + { + int LA1_0 = [input LA:1]; + if ( LA1_0==SimpleCParser_ID||(LA1_0>=SimpleCParser_INT_TYPE && LA1_0<=SimpleCParser_VOID) ) { + alt1 = 1; + } + + } + switch (alt1) { + case 1 : + // SimpleC.g:17:9: declaration // alt + { + [[_state following] addObject:FOLLOW_declaration_in_program85]; + _declaration1 = [self declaration]; + [[_state following] removeLastObject]; + + + [treeAdaptor addChild:[_declaration1 tree] toTree:root_0]; + + } + break; + + default : + if ( cnt1 >= 1 ) goto loop1; + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:1]; + @throw eee; + } + cnt1++; + } while (YES); loop1: ; + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + [_retval setStop:[input LT:-1]]; + + [_retval setTree:(id)[treeAdaptor postProcessTree:root_0]]; + [treeAdaptor setBoundariesForTree:[_retval tree] fromToken:[_retval start] toToken:[_retval stop]]; + [root_0 release]; + } + return _retval; +} +// $ANTLR end program + +// $ANTLR start declaration +// SimpleC.g:20:1: declaration : ( variable | functionHeader ';' -> ^( FUNC_DECL functionHeader ) | functionHeader block -> ^( FUNC_DEF functionHeader block ) ); +- (SimpleCParser_declaration_return *) declaration +{ + ANTLRBaseRecognizerState *_state = [self state]; + SimpleCParser_declaration_return * _retval = [[[SimpleCParser_declaration_return alloc] init] autorelease]; + [_retval setStart:[input LT:1]]; + + id root_0 = nil; + + id _char_literal4 = nil; + SimpleCParser_variable_return * _variable2 = nil; + + SimpleCParser_functionHeader_return * _functionHeader3 = nil; + + SimpleCParser_functionHeader_return * _functionHeader5 = nil; + + SimpleCParser_block_return * _block6 = nil; + + + id _char_literal4_tree = nil; + ANTLRRewriteRuleTokenStream *_stream_21=[[ANTLRRewriteRuleTokenStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token 21"]; + ANTLRRewriteRuleSubtreeStream *_stream_functionHeader=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"rule functionHeader"]; + ANTLRRewriteRuleSubtreeStream *_stream_block=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"rule block"]; + + @try { + // SimpleC.g:21:5: ( variable | functionHeader ';' -> ^( FUNC_DECL functionHeader ) | functionHeader block -> ^( FUNC_DEF functionHeader block ) ) //ruleblock + int alt2=3; + alt2 = [dfa2 predict]; + switch (alt2) { + case 1 : + // SimpleC.g:21:9: variable // alt + { + root_0 = (id)[treeAdaptor newEmptyTree]; + + [[_state following] addObject:FOLLOW_variable_in_declaration105]; + _variable2 = [self variable]; + [[_state following] removeLastObject]; + + + [treeAdaptor addChild:[_variable2 tree] toTree:root_0]; + + } + break; + case 2 : + // SimpleC.g:22:9: functionHeader ';' // alt + { + [[_state following] addObject:FOLLOW_functionHeader_in_declaration115]; + _functionHeader3 = [self functionHeader]; + [[_state following] removeLastObject]; + + + [_stream_functionHeader addElement:[_functionHeader3 tree]]; + _char_literal4=(id )[input LT:1]; + [self match:input tokenType:21 follow:FOLLOW_21_in_declaration117]; + [_stream_21 addElement:_char_literal4]; + + + // AST REWRITE + // elements: functionHeader + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + int i_0 = 0; + root_0 = (id)[treeAdaptor newEmptyTree]; + [_retval setTree:root_0]; + ANTLRRewriteRuleSubtreeStream *_stream_retval=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token retval" element:_retval!=nil?[_retval tree]:nil]; + + // 22:28: -> ^( FUNC_DECL functionHeader ) + { + // SimpleC.g:22:31: ^( FUNC_DECL functionHeader ) + { + id root_1 = (id)[treeAdaptor newEmptyTree]; + + id _SimpleCParser_FUNC_DECL_tree = [treeAdaptor newTreeWithTokenType:SimpleCParser_FUNC_DECL text:[tokenNames objectAtIndex:SimpleCParser_FUNC_DECL]]; + root_1 = (id)[treeAdaptor makeNode:_SimpleCParser_FUNC_DECL_tree parentOf:root_1]; + [_SimpleCParser_FUNC_DECL_tree release]; + + [treeAdaptor addChild:[_stream_functionHeader next] toTree:root_1]; + + [treeAdaptor addChild:root_1 toTree:root_0]; + [root_1 release]; + } + + } + + [_stream_retval release]; + + + } + break; + case 3 : + // SimpleC.g:23:9: functionHeader block // alt + { + [[_state following] addObject:FOLLOW_functionHeader_in_declaration135]; + _functionHeader5 = [self functionHeader]; + [[_state following] removeLastObject]; + + + [_stream_functionHeader addElement:[_functionHeader5 tree]]; + [[_state following] addObject:FOLLOW_block_in_declaration137]; + _block6 = [self block]; + [[_state following] removeLastObject]; + + + [_stream_block addElement:[_block6 tree]]; + + // AST REWRITE + // elements: functionHeader, block + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + int i_0 = 0; + root_0 = (id)[treeAdaptor newEmptyTree]; + [_retval setTree:root_0]; + ANTLRRewriteRuleSubtreeStream *_stream_retval=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token retval" element:_retval!=nil?[_retval tree]:nil]; + + // 23:30: -> ^( FUNC_DEF functionHeader block ) + { + // SimpleC.g:23:33: ^( FUNC_DEF functionHeader block ) + { + id root_1 = (id)[treeAdaptor newEmptyTree]; + + id _SimpleCParser_FUNC_DEF_tree = [treeAdaptor newTreeWithTokenType:SimpleCParser_FUNC_DEF text:[tokenNames objectAtIndex:SimpleCParser_FUNC_DEF]]; + root_1 = (id)[treeAdaptor makeNode:_SimpleCParser_FUNC_DEF_tree parentOf:root_1]; + [_SimpleCParser_FUNC_DEF_tree release]; + + [treeAdaptor addChild:[_stream_functionHeader next] toTree:root_1]; + [treeAdaptor addChild:[_stream_block next] toTree:root_1]; + + [treeAdaptor addChild:root_1 toTree:root_0]; + [root_1 release]; + } + + } + + [_stream_retval release]; + + + } + break; + + } + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + [_retval setStop:[input LT:-1]]; + + [_stream_21 release]; + [_stream_functionHeader release]; + [_stream_block release]; + [_retval setTree:(id)[treeAdaptor postProcessTree:root_0]]; + [treeAdaptor setBoundariesForTree:[_retval tree] fromToken:[_retval start] toToken:[_retval stop]]; + [root_0 release]; + } + return _retval; +} +// $ANTLR end declaration + +// $ANTLR start variable +// SimpleC.g:26:1: variable : type declarator ';' -> ^( VAR_DEF type declarator ) ; +- (SimpleCParser_variable_return *) variable +{ + ANTLRBaseRecognizerState *_state = [self state]; + SimpleCParser_variable_return * _retval = [[[SimpleCParser_variable_return alloc] init] autorelease]; + [_retval setStart:[input LT:1]]; + + id root_0 = nil; + + id _char_literal9 = nil; + SimpleCParser_type_return * _type7 = nil; + + SimpleCParser_declarator_return * _declarator8 = nil; + + + id _char_literal9_tree = nil; + ANTLRRewriteRuleTokenStream *_stream_21=[[ANTLRRewriteRuleTokenStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token 21"]; + ANTLRRewriteRuleSubtreeStream *_stream_type=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"rule type"]; + ANTLRRewriteRuleSubtreeStream *_stream_declarator=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"rule declarator"]; + + @try { + // SimpleC.g:27:5: ( type declarator ';' -> ^( VAR_DEF type declarator ) ) // ruleBlockSingleAlt + // SimpleC.g:27:9: type declarator ';' // alt + { + [[_state following] addObject:FOLLOW_type_in_variable166]; + _type7 = [self type]; + [[_state following] removeLastObject]; + + + [_stream_type addElement:[_type7 tree]]; + [[_state following] addObject:FOLLOW_declarator_in_variable168]; + _declarator8 = [self declarator]; + [[_state following] removeLastObject]; + + + [_stream_declarator addElement:[_declarator8 tree]]; + _char_literal9=(id )[input LT:1]; + [self match:input tokenType:21 follow:FOLLOW_21_in_variable170]; + [_stream_21 addElement:_char_literal9]; + + + // AST REWRITE + // elements: type, declarator + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + int i_0 = 0; + root_0 = (id)[treeAdaptor newEmptyTree]; + [_retval setTree:root_0]; + ANTLRRewriteRuleSubtreeStream *_stream_retval=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token retval" element:_retval!=nil?[_retval tree]:nil]; + + // 27:29: -> ^( VAR_DEF type declarator ) + { + // SimpleC.g:27:32: ^( VAR_DEF type declarator ) + { + id root_1 = (id)[treeAdaptor newEmptyTree]; + + id _SimpleCParser_VAR_DEF_tree = [treeAdaptor newTreeWithTokenType:SimpleCParser_VAR_DEF text:[tokenNames objectAtIndex:SimpleCParser_VAR_DEF]]; + root_1 = (id)[treeAdaptor makeNode:_SimpleCParser_VAR_DEF_tree parentOf:root_1]; + [_SimpleCParser_VAR_DEF_tree release]; + + [treeAdaptor addChild:[_stream_type next] toTree:root_1]; + [treeAdaptor addChild:[_stream_declarator next] toTree:root_1]; + + [treeAdaptor addChild:root_1 toTree:root_0]; + [root_1 release]; + } + + } + + [_stream_retval release]; + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + [_retval setStop:[input LT:-1]]; + + [_stream_21 release]; + [_stream_type release]; + [_stream_declarator release]; + [_retval setTree:(id)[treeAdaptor postProcessTree:root_0]]; + [treeAdaptor setBoundariesForTree:[_retval tree] fromToken:[_retval start] toToken:[_retval stop]]; + [root_0 release]; + } + return _retval; +} +// $ANTLR end variable + +// $ANTLR start declarator +// SimpleC.g:30:1: declarator : ID ; +- (SimpleCParser_declarator_return *) declarator +{ + ANTLRBaseRecognizerState *_state = [self state]; + SimpleCParser_declarator_return * _retval = [[[SimpleCParser_declarator_return alloc] init] autorelease]; + [_retval setStart:[input LT:1]]; + + id root_0 = nil; + + id _ID10 = nil; + + id _ID10_tree = nil; + + @try { + // SimpleC.g:31:5: ( ID ) // ruleBlockSingleAlt + // SimpleC.g:31:9: ID // alt + { + root_0 = (id)[treeAdaptor newEmptyTree]; + + _ID10=(id )[input LT:1]; + [self match:input tokenType:SimpleCParser_ID follow:FOLLOW_SimpleCParser_ID_in_declarator199]; + _ID10_tree = (id)[treeAdaptor newTreeWithToken:_ID10]; + [treeAdaptor addChild:_ID10_tree toTree:root_0]; + [_ID10_tree release]; + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + [_retval setStop:[input LT:-1]]; + + [_retval setTree:(id)[treeAdaptor postProcessTree:root_0]]; + [treeAdaptor setBoundariesForTree:[_retval tree] fromToken:[_retval start] toToken:[_retval stop]]; + [root_0 release]; + } + return _retval; +} +// $ANTLR end declarator + +// $ANTLR start functionHeader +// SimpleC.g:34:1: functionHeader : type ID '(' ( formalParameter ( ',' formalParameter )* )? ')' -> ^( FUNC_HDR type ID ( formalParameter )+ ) ; +- (SimpleCParser_functionHeader_return *) functionHeader +{ + ANTLRBaseRecognizerState *_state = [self state]; + SimpleCParser_functionHeader_return * _retval = [[[SimpleCParser_functionHeader_return alloc] init] autorelease]; + [_retval setStart:[input LT:1]]; + + id root_0 = nil; + + id _ID12 = nil; + id _char_literal13 = nil; + id _char_literal15 = nil; + id _char_literal17 = nil; + SimpleCParser_type_return * _type11 = nil; + + SimpleCParser_formalParameter_return * _formalParameter14 = nil; + + SimpleCParser_formalParameter_return * _formalParameter16 = nil; + + + id _ID12_tree = nil; + id _char_literal13_tree = nil; + id _char_literal15_tree = nil; + id _char_literal17_tree = nil; + ANTLRRewriteRuleTokenStream *_stream_24=[[ANTLRRewriteRuleTokenStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token 24"]; + ANTLRRewriteRuleTokenStream *_stream_SimpleCParser_ID=[[ANTLRRewriteRuleTokenStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token SimpleCParser_ID"]; + ANTLRRewriteRuleTokenStream *_stream_22=[[ANTLRRewriteRuleTokenStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token 22"]; + ANTLRRewriteRuleTokenStream *_stream_23=[[ANTLRRewriteRuleTokenStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token 23"]; + ANTLRRewriteRuleSubtreeStream *_stream_formalParameter=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"rule formalParameter"]; + ANTLRRewriteRuleSubtreeStream *_stream_type=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"rule type"]; + + @try { + // SimpleC.g:35:5: ( type ID '(' ( formalParameter ( ',' formalParameter )* )? ')' -> ^( FUNC_HDR type ID ( formalParameter )+ ) ) // ruleBlockSingleAlt + // SimpleC.g:35:9: type ID '(' ( formalParameter ( ',' formalParameter )* )? ')' // alt + { + [[_state following] addObject:FOLLOW_type_in_functionHeader219]; + _type11 = [self type]; + [[_state following] removeLastObject]; + + + [_stream_type addElement:[_type11 tree]]; + _ID12=(id )[input LT:1]; + [self match:input tokenType:SimpleCParser_ID follow:FOLLOW_SimpleCParser_ID_in_functionHeader221]; + [_stream_SimpleCParser_ID addElement:_ID12]; + + _char_literal13=(id )[input LT:1]; + [self match:input tokenType:22 follow:FOLLOW_22_in_functionHeader223]; + [_stream_22 addElement:_char_literal13]; + + // SimpleC.g:35:21: ( formalParameter ( ',' formalParameter )* )? // block + int alt4=2; + { + int LA4_0 = [input LA:1]; + if ( LA4_0==SimpleCParser_ID||(LA4_0>=SimpleCParser_INT_TYPE && LA4_0<=SimpleCParser_VOID) ) { + alt4 = 1; + } + } + switch (alt4) { + case 1 : + // SimpleC.g:35:23: formalParameter ( ',' formalParameter )* // alt + { + [[_state following] addObject:FOLLOW_formalParameter_in_functionHeader227]; + _formalParameter14 = [self formalParameter]; + [[_state following] removeLastObject]; + + + [_stream_formalParameter addElement:[_formalParameter14 tree]]; + do { + int alt3=2; + { + int LA3_0 = [input LA:1]; + if ( LA3_0==23 ) { + alt3 = 1; + } + + } + switch (alt3) { + case 1 : + // SimpleC.g:35:41: ',' formalParameter // alt + { + _char_literal15=(id )[input LT:1]; + [self match:input tokenType:23 follow:FOLLOW_23_in_functionHeader231]; + [_stream_23 addElement:_char_literal15]; + + [[_state following] addObject:FOLLOW_formalParameter_in_functionHeader233]; + _formalParameter16 = [self formalParameter]; + [[_state following] removeLastObject]; + + + [_stream_formalParameter addElement:[_formalParameter16 tree]]; + + } + break; + + default : + goto loop3; + } + } while (YES); loop3: ; + + + } + break; + + } + + _char_literal17=(id )[input LT:1]; + [self match:input tokenType:24 follow:FOLLOW_24_in_functionHeader241]; + [_stream_24 addElement:_char_literal17]; + + + // AST REWRITE + // elements: SimpleCParser_ID, type, formalParameter + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + int i_0 = 0; + root_0 = (id)[treeAdaptor newEmptyTree]; + [_retval setTree:root_0]; + ANTLRRewriteRuleSubtreeStream *_stream_retval=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token retval" element:_retval!=nil?[_retval tree]:nil]; + + // 36:9: -> ^( FUNC_HDR type ID ( formalParameter )+ ) + { + // SimpleC.g:36:12: ^( FUNC_HDR type ID ( formalParameter )+ ) + { + id root_1 = (id)[treeAdaptor newEmptyTree]; + + id _SimpleCParser_FUNC_HDR_tree = [treeAdaptor newTreeWithTokenType:SimpleCParser_FUNC_HDR text:[tokenNames objectAtIndex:SimpleCParser_FUNC_HDR]]; + root_1 = (id)[treeAdaptor makeNode:_SimpleCParser_FUNC_HDR_tree parentOf:root_1]; + [_SimpleCParser_FUNC_HDR_tree release]; + + [treeAdaptor addChild:[_stream_type next] toTree:root_1]; + [treeAdaptor addChild:[_stream_SimpleCParser_ID next] toTree:root_1]; + + // SimpleC.g:36:31: ( formalParameter )+ + { + if ( !([_stream_formalParameter hasNext]) ) { + @throw [NSException exceptionWithName:@"RewriteEarlyExitException" reason:nil userInfo:nil]; + } + while ( [_stream_formalParameter hasNext] ) { + [treeAdaptor addChild:[_stream_formalParameter next] toTree:root_1]; + + } + [_stream_formalParameter reset]; + + } + [treeAdaptor addChild:root_1 toTree:root_0]; + [root_1 release]; + } + + } + + [_stream_retval release]; + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + [_retval setStop:[input LT:-1]]; + + [_stream_24 release]; + [_stream_SimpleCParser_ID release]; + [_stream_22 release]; + [_stream_23 release]; + [_stream_formalParameter release]; + [_stream_type release]; + [_retval setTree:(id)[treeAdaptor postProcessTree:root_0]]; + [treeAdaptor setBoundariesForTree:[_retval tree] fromToken:[_retval start] toToken:[_retval stop]]; + [root_0 release]; + } + return _retval; +} +// $ANTLR end functionHeader + +// $ANTLR start formalParameter +// SimpleC.g:39:1: formalParameter : type declarator -> ^( ARG_DEF type declarator ) ; +- (SimpleCParser_formalParameter_return *) formalParameter +{ + ANTLRBaseRecognizerState *_state = [self state]; + SimpleCParser_formalParameter_return * _retval = [[[SimpleCParser_formalParameter_return alloc] init] autorelease]; + [_retval setStart:[input LT:1]]; + + id root_0 = nil; + + SimpleCParser_type_return * _type18 = nil; + + SimpleCParser_declarator_return * _declarator19 = nil; + + + ANTLRRewriteRuleSubtreeStream *_stream_type=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"rule type"]; + ANTLRRewriteRuleSubtreeStream *_stream_declarator=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"rule declarator"]; + + @try { + // SimpleC.g:40:5: ( type declarator -> ^( ARG_DEF type declarator ) ) // ruleBlockSingleAlt + // SimpleC.g:40:9: type declarator // alt + { + [[_state following] addObject:FOLLOW_type_in_formalParameter281]; + _type18 = [self type]; + [[_state following] removeLastObject]; + + + [_stream_type addElement:[_type18 tree]]; + [[_state following] addObject:FOLLOW_declarator_in_formalParameter283]; + _declarator19 = [self declarator]; + [[_state following] removeLastObject]; + + + [_stream_declarator addElement:[_declarator19 tree]]; + + // AST REWRITE + // elements: type, declarator + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + int i_0 = 0; + root_0 = (id)[treeAdaptor newEmptyTree]; + [_retval setTree:root_0]; + ANTLRRewriteRuleSubtreeStream *_stream_retval=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token retval" element:_retval!=nil?[_retval tree]:nil]; + + // 40:25: -> ^( ARG_DEF type declarator ) + { + // SimpleC.g:40:28: ^( ARG_DEF type declarator ) + { + id root_1 = (id)[treeAdaptor newEmptyTree]; + + id _SimpleCParser_ARG_DEF_tree = [treeAdaptor newTreeWithTokenType:SimpleCParser_ARG_DEF text:[tokenNames objectAtIndex:SimpleCParser_ARG_DEF]]; + root_1 = (id)[treeAdaptor makeNode:_SimpleCParser_ARG_DEF_tree parentOf:root_1]; + [_SimpleCParser_ARG_DEF_tree release]; + + [treeAdaptor addChild:[_stream_type next] toTree:root_1]; + [treeAdaptor addChild:[_stream_declarator next] toTree:root_1]; + + [treeAdaptor addChild:root_1 toTree:root_0]; + [root_1 release]; + } + + } + + [_stream_retval release]; + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + [_retval setStop:[input LT:-1]]; + + [_stream_type release]; + [_stream_declarator release]; + [_retval setTree:(id)[treeAdaptor postProcessTree:root_0]]; + [treeAdaptor setBoundariesForTree:[_retval tree] fromToken:[_retval start] toToken:[_retval stop]]; + [root_0 release]; + } + return _retval; +} +// $ANTLR end formalParameter + +// $ANTLR start type +// SimpleC.g:43:1: type : ( 'int' | 'char' | 'void' | ID ); +- (SimpleCParser_type_return *) type +{ + ANTLRBaseRecognizerState *_state = [self state]; + SimpleCParser_type_return * _retval = [[[SimpleCParser_type_return alloc] init] autorelease]; + [_retval setStart:[input LT:1]]; + + id root_0 = nil; + + id _set20 = nil; + + id _set20_tree = nil; + + @try { + // SimpleC.g:44:5: ( 'int' | 'char' | 'void' | ID ) // ruleBlockSingleAlt + // SimpleC.g: // alt + { + root_0 = (id)[treeAdaptor newEmptyTree]; + + _set20 = (id )[input LT:1]; + if ([input LA:1]==SimpleCParser_ID||([input LA:1]>=SimpleCParser_INT_TYPE && [input LA:1]<=SimpleCParser_VOID)) { + + _set20_tree = (id)[treeAdaptor newTreeWithToken:_set20]; + [treeAdaptor addChild:_set20_tree toTree:root_0]; + [_set20_tree release]; + + [input consume]; + [_state setIsErrorRecovery:NO]; + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recoverFromMismatchedSet:input exception:mse follow:FOLLOW_set_in_type0]; @throw mse; + } + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + [_retval setStop:[input LT:-1]]; + + [_retval setTree:(id)[treeAdaptor postProcessTree:root_0]]; + [treeAdaptor setBoundariesForTree:[_retval tree] fromToken:[_retval start] toToken:[_retval stop]]; + [root_0 release]; + } + return _retval; +} +// $ANTLR end type + +// $ANTLR start block +// SimpleC.g:50:1: block : lc= '{' ( variable )* ( stat )* '}' -> ^( BLOCK[$lc,@\"BLOCK\"] ( variable )* ( stat )* ) ; +- (SimpleCParser_block_return *) block +{ + ANTLRBaseRecognizerState *_state = [self state]; + SimpleCParser_block_return * _retval = [[[SimpleCParser_block_return alloc] init] autorelease]; + [_retval setStart:[input LT:1]]; + + id root_0 = nil; + + id _lc = nil; + id _char_literal23 = nil; + SimpleCParser_variable_return * _variable21 = nil; + + SimpleCParser_stat_return * _stat22 = nil; + + + id _lc_tree = nil; + id _char_literal23_tree = nil; + ANTLRRewriteRuleTokenStream *_stream_26=[[ANTLRRewriteRuleTokenStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token 26"]; + ANTLRRewriteRuleTokenStream *_stream_25=[[ANTLRRewriteRuleTokenStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token 25"]; + ANTLRRewriteRuleSubtreeStream *_stream_stat=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"rule stat"]; + ANTLRRewriteRuleSubtreeStream *_stream_variable=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"rule variable"]; + + @try { + // SimpleC.g:51:5: (lc= '{' ( variable )* ( stat )* '}' -> ^( BLOCK[$lc,@\"BLOCK\"] ( variable )* ( stat )* ) ) // ruleBlockSingleAlt + // SimpleC.g:51:9: lc= '{' ( variable )* ( stat )* '}' // alt + { + _lc=(id )[input LT:1]; + [self match:input tokenType:25 follow:FOLLOW_25_in_block376]; + [_stream_25 addElement:_lc]; + + do { + int alt5=2; + { + int LA5_0 = [input LA:1]; + if ( LA5_0==SimpleCParser_ID ) { + { + int LA5_2 = [input LA:2]; + if ( LA5_2==SimpleCParser_ID ) { + alt5 = 1; + } + + } + } + else if ( (LA5_0>=SimpleCParser_INT_TYPE && LA5_0<=SimpleCParser_VOID) ) { + alt5 = 1; + } + + } + switch (alt5) { + case 1 : + // SimpleC.g:52:13: variable // alt + { + [[_state following] addObject:FOLLOW_variable_in_block390]; + _variable21 = [self variable]; + [[_state following] removeLastObject]; + + + [_stream_variable addElement:[_variable21 tree]]; + + } + break; + + default : + goto loop5; + } + } while (YES); loop5: ; + + do { + int alt6=2; + { + int LA6_0 = [input LA:1]; + if ( LA6_0==SimpleCParser_ID||(LA6_0>=SimpleCParser_INT && LA6_0<=SimpleCParser_FOR)||(LA6_0>=21 && LA6_0<=22)||LA6_0==25 ) { + alt6 = 1; + } + + } + switch (alt6) { + case 1 : + // SimpleC.g:53:13: stat // alt + { + [[_state following] addObject:FOLLOW_stat_in_block405]; + _stat22 = [self stat]; + [[_state following] removeLastObject]; + + + [_stream_stat addElement:[_stat22 tree]]; + + } + break; + + default : + goto loop6; + } + } while (YES); loop6: ; + + _char_literal23=(id )[input LT:1]; + [self match:input tokenType:26 follow:FOLLOW_26_in_block416]; + [_stream_26 addElement:_char_literal23]; + + + // AST REWRITE + // elements: variable, stat + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + int i_0 = 0; + root_0 = (id)[treeAdaptor newEmptyTree]; + [_retval setTree:root_0]; + ANTLRRewriteRuleSubtreeStream *_stream_retval=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token retval" element:_retval!=nil?[_retval tree]:nil]; + + // 55:9: -> ^( BLOCK[$lc,@\"BLOCK\"] ( variable )* ( stat )* ) + { + // SimpleC.g:55:12: ^( BLOCK[$lc,@\"BLOCK\"] ( variable )* ( stat )* ) + { + id root_1 = (id)[treeAdaptor newEmptyTree]; + + id _SimpleCParser_BLOCK_tree = [treeAdaptor newTreeWithToken:_lc tokenType:SimpleCParser_BLOCK text:@"BLOCK"]; + root_1 = (id)[treeAdaptor makeNode:_SimpleCParser_BLOCK_tree parentOf:root_1]; + [_SimpleCParser_BLOCK_tree release]; + + // SimpleC.g:55:34: ( variable )* + while ( [_stream_variable hasNext] ) { + [treeAdaptor addChild:[_stream_variable next] toTree:root_1]; + + } + [_stream_variable reset]; + // SimpleC.g:55:44: ( stat )* + while ( [_stream_stat hasNext] ) { + [treeAdaptor addChild:[_stream_stat next] toTree:root_1]; + + } + [_stream_stat reset]; + + [treeAdaptor addChild:root_1 toTree:root_0]; + [root_1 release]; + } + + } + + [_stream_retval release]; + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + [_retval setStop:[input LT:-1]]; + + [_stream_26 release]; + [_stream_25 release]; + [_stream_stat release]; + [_stream_variable release]; + [_retval setTree:(id)[treeAdaptor postProcessTree:root_0]]; + [treeAdaptor setBoundariesForTree:[_retval tree] fromToken:[_retval start] toToken:[_retval stop]]; + [root_0 release]; + } + return _retval; +} +// $ANTLR end block + +// $ANTLR start stat +// SimpleC.g:58:1: stat : ( forStat | expr ';' | block | assignStat ';' | ';' ); +- (SimpleCParser_stat_return *) stat +{ + ANTLRBaseRecognizerState *_state = [self state]; + SimpleCParser_stat_return * _retval = [[[SimpleCParser_stat_return alloc] init] autorelease]; + [_retval setStart:[input LT:1]]; + + id root_0 = nil; + + id _char_literal26 = nil; + id _char_literal29 = nil; + id _char_literal30 = nil; + SimpleCParser_forStat_return * _forStat24 = nil; + + SimpleCParser_expr_return * _expr25 = nil; + + SimpleCParser_block_return * _block27 = nil; + + SimpleCParser_assignStat_return * _assignStat28 = nil; + + + id _char_literal26_tree = nil; + id _char_literal29_tree = nil; + id _char_literal30_tree = nil; + + @try { + // SimpleC.g:58:5: ( forStat | expr ';' | block | assignStat ';' | ';' ) //ruleblock + int alt7=5; + switch ([input LA:1]) { + case SimpleCParser_FOR: + alt7 = 1; + break; + case SimpleCParser_ID: + { + int LA7_2 = [input LA:2]; + if ( LA7_2==SimpleCParser_EQ ) { + alt7 = 4; + } + else if ( (LA7_2>=SimpleCParser_EQEQ && LA7_2<=SimpleCParser_PLUS)||LA7_2==21 ) { + alt7 = 2; + } + else { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:7 state:2 stream:input]; + @throw nvae; + } + } + break; + case SimpleCParser_INT: + case 22: + alt7 = 2; + break; + case 25: + alt7 = 3; + break; + case 21: + alt7 = 5; + break; + default: + { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:7 state:0 stream:input]; + @throw nvae; + + }} + switch (alt7) { + case 1 : + // SimpleC.g:58:7: forStat // alt + { + root_0 = (id)[treeAdaptor newEmptyTree]; + + [[_state following] addObject:FOLLOW_forStat_in_stat449]; + _forStat24 = [self forStat]; + [[_state following] removeLastObject]; + + + [treeAdaptor addChild:[_forStat24 tree] toTree:root_0]; + + } + break; + case 2 : + // SimpleC.g:59:7: expr ';' // alt + { + root_0 = (id)[treeAdaptor newEmptyTree]; + + [[_state following] addObject:FOLLOW_expr_in_stat457]; + _expr25 = [self expr]; + [[_state following] removeLastObject]; + + + [treeAdaptor addChild:[_expr25 tree] toTree:root_0]; + _char_literal26=(id )[input LT:1]; + [self match:input tokenType:21 follow:FOLLOW_21_in_stat459]; + + } + break; + case 3 : + // SimpleC.g:60:7: block // alt + { + root_0 = (id)[treeAdaptor newEmptyTree]; + + [[_state following] addObject:FOLLOW_block_in_stat468]; + _block27 = [self block]; + [[_state following] removeLastObject]; + + + [treeAdaptor addChild:[_block27 tree] toTree:root_0]; + + } + break; + case 4 : + // SimpleC.g:61:7: assignStat ';' // alt + { + root_0 = (id)[treeAdaptor newEmptyTree]; + + [[_state following] addObject:FOLLOW_assignStat_in_stat476]; + _assignStat28 = [self assignStat]; + [[_state following] removeLastObject]; + + + [treeAdaptor addChild:[_assignStat28 tree] toTree:root_0]; + _char_literal29=(id )[input LT:1]; + [self match:input tokenType:21 follow:FOLLOW_21_in_stat478]; + + } + break; + case 5 : + // SimpleC.g:62:7: ';' // alt + { + root_0 = (id)[treeAdaptor newEmptyTree]; + + _char_literal30=(id )[input LT:1]; + [self match:input tokenType:21 follow:FOLLOW_21_in_stat487]; + + } + break; + + } + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + [_retval setStop:[input LT:-1]]; + + [_retval setTree:(id)[treeAdaptor postProcessTree:root_0]]; + [treeAdaptor setBoundariesForTree:[_retval tree] fromToken:[_retval start] toToken:[_retval stop]]; + [root_0 release]; + } + return _retval; +} +// $ANTLR end stat + +// $ANTLR start forStat +// SimpleC.g:65:1: forStat : 'for' '(' start= assignStat ';' expr ';' next= assignStat ')' block -> ^( 'for' $start expr $next block ) ; +- (SimpleCParser_forStat_return *) forStat +{ + ANTLRBaseRecognizerState *_state = [self state]; + SimpleCParser_forStat_return * _retval = [[[SimpleCParser_forStat_return alloc] init] autorelease]; + [_retval setStart:[input LT:1]]; + + id root_0 = nil; + + id _string_literal31 = nil; + id _char_literal32 = nil; + id _char_literal33 = nil; + id _char_literal35 = nil; + id _char_literal36 = nil; + SimpleCParser_assignStat_return * _start = nil; + + SimpleCParser_assignStat_return * _next = nil; + + SimpleCParser_expr_return * _expr34 = nil; + + SimpleCParser_block_return * _block37 = nil; + + + id _string_literal31_tree = nil; + id _char_literal32_tree = nil; + id _char_literal33_tree = nil; + id _char_literal35_tree = nil; + id _char_literal36_tree = nil; + ANTLRRewriteRuleTokenStream *_stream_21=[[ANTLRRewriteRuleTokenStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token 21"]; + ANTLRRewriteRuleTokenStream *_stream_24=[[ANTLRRewriteRuleTokenStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token 24"]; + ANTLRRewriteRuleTokenStream *_stream_SimpleCParser_FOR=[[ANTLRRewriteRuleTokenStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token SimpleCParser_FOR"]; + ANTLRRewriteRuleTokenStream *_stream_22=[[ANTLRRewriteRuleTokenStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token 22"]; + ANTLRRewriteRuleSubtreeStream *_stream_expr=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"rule expr"]; + ANTLRRewriteRuleSubtreeStream *_stream_assignStat=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"rule assignStat"]; + ANTLRRewriteRuleSubtreeStream *_stream_block=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"rule block"]; + + @try { + // SimpleC.g:66:5: ( 'for' '(' start= assignStat ';' expr ';' next= assignStat ')' block -> ^( 'for' $start expr $next block ) ) // ruleBlockSingleAlt + // SimpleC.g:66:9: 'for' '(' start= assignStat ';' expr ';' next= assignStat ')' block // alt + { + _string_literal31=(id )[input LT:1]; + [self match:input tokenType:SimpleCParser_FOR follow:FOLLOW_SimpleCParser_FOR_in_forStat507]; + [_stream_SimpleCParser_FOR addElement:_string_literal31]; + + _char_literal32=(id )[input LT:1]; + [self match:input tokenType:22 follow:FOLLOW_22_in_forStat509]; + [_stream_22 addElement:_char_literal32]; + + [[_state following] addObject:FOLLOW_assignStat_in_forStat513]; + _start = [self assignStat]; + [[_state following] removeLastObject]; + + + [_stream_assignStat addElement:[_start tree]]; + _char_literal33=(id )[input LT:1]; + [self match:input tokenType:21 follow:FOLLOW_21_in_forStat515]; + [_stream_21 addElement:_char_literal33]; + + [[_state following] addObject:FOLLOW_expr_in_forStat517]; + _expr34 = [self expr]; + [[_state following] removeLastObject]; + + + [_stream_expr addElement:[_expr34 tree]]; + _char_literal35=(id )[input LT:1]; + [self match:input tokenType:21 follow:FOLLOW_21_in_forStat519]; + [_stream_21 addElement:_char_literal35]; + + [[_state following] addObject:FOLLOW_assignStat_in_forStat523]; + _next = [self assignStat]; + [[_state following] removeLastObject]; + + + [_stream_assignStat addElement:[_next tree]]; + _char_literal36=(id )[input LT:1]; + [self match:input tokenType:24 follow:FOLLOW_24_in_forStat525]; + [_stream_24 addElement:_char_literal36]; + + [[_state following] addObject:FOLLOW_block_in_forStat527]; + _block37 = [self block]; + [[_state following] removeLastObject]; + + + [_stream_block addElement:[_block37 tree]]; + + // AST REWRITE + // elements: expr, next, SimpleCParser_FOR, block, start + // token labels: + // rule labels: start, next, retval + // token list labels: + // rule list labels: + int i_0 = 0; + root_0 = (id)[treeAdaptor newEmptyTree]; + [_retval setTree:root_0]; + ANTLRRewriteRuleSubtreeStream *_stream_start=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token start" element:_start!=nil?[_start tree]:nil]; + ANTLRRewriteRuleSubtreeStream *_stream_next=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token next" element:_next!=nil?[_next tree]:nil]; + ANTLRRewriteRuleSubtreeStream *_stream_retval=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token retval" element:_retval!=nil?[_retval tree]:nil]; + + // 67:9: -> ^( 'for' $start expr $next block ) + { + // SimpleC.g:67:12: ^( 'for' $start expr $next block ) + { + id root_1 = (id)[treeAdaptor newEmptyTree]; + root_1 = (id)[treeAdaptor makeNode:[_stream_SimpleCParser_FOR next] parentOf:root_1]; + + [treeAdaptor addChild:[_start tree] toTree:root_1]; + [treeAdaptor addChild:[_stream_expr next] toTree:root_1]; + [treeAdaptor addChild:[_next tree] toTree:root_1]; + [treeAdaptor addChild:[_stream_block next] toTree:root_1]; + + [treeAdaptor addChild:root_1 toTree:root_0]; + [root_1 release]; + } + + } + + [_stream_start release]; + [_stream_next release]; + [_stream_retval release]; + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + [_retval setStop:[input LT:-1]]; + + [_stream_21 release]; + [_stream_24 release]; + [_stream_SimpleCParser_FOR release]; + [_stream_22 release]; + [_stream_expr release]; + [_stream_assignStat release]; + [_stream_block release]; + [_retval setTree:(id)[treeAdaptor postProcessTree:root_0]]; + [treeAdaptor setBoundariesForTree:[_retval tree] fromToken:[_retval start] toToken:[_retval stop]]; + [root_0 release]; + } + return _retval; +} +// $ANTLR end forStat + +// $ANTLR start assignStat +// SimpleC.g:70:1: assignStat : ID EQ expr -> ^( EQ ID expr ) ; +- (SimpleCParser_assignStat_return *) assignStat +{ + ANTLRBaseRecognizerState *_state = [self state]; + SimpleCParser_assignStat_return * _retval = [[[SimpleCParser_assignStat_return alloc] init] autorelease]; + [_retval setStart:[input LT:1]]; + + id root_0 = nil; + + id _ID38 = nil; + id _EQ39 = nil; + SimpleCParser_expr_return * _expr40 = nil; + + + id _ID38_tree = nil; + id _EQ39_tree = nil; + ANTLRRewriteRuleTokenStream *_stream_SimpleCParser_EQ=[[ANTLRRewriteRuleTokenStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token SimpleCParser_EQ"]; + ANTLRRewriteRuleTokenStream *_stream_SimpleCParser_ID=[[ANTLRRewriteRuleTokenStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token SimpleCParser_ID"]; + ANTLRRewriteRuleSubtreeStream *_stream_expr=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"rule expr"]; + + @try { + // SimpleC.g:71:5: ( ID EQ expr -> ^( EQ ID expr ) ) // ruleBlockSingleAlt + // SimpleC.g:71:9: ID EQ expr // alt + { + _ID38=(id )[input LT:1]; + [self match:input tokenType:SimpleCParser_ID follow:FOLLOW_SimpleCParser_ID_in_assignStat570]; + [_stream_SimpleCParser_ID addElement:_ID38]; + + _EQ39=(id )[input LT:1]; + [self match:input tokenType:SimpleCParser_EQ follow:FOLLOW_SimpleCParser_EQ_in_assignStat572]; + [_stream_SimpleCParser_EQ addElement:_EQ39]; + + [[_state following] addObject:FOLLOW_expr_in_assignStat574]; + _expr40 = [self expr]; + [[_state following] removeLastObject]; + + + [_stream_expr addElement:[_expr40 tree]]; + + // AST REWRITE + // elements: SimpleCParser_EQ, SimpleCParser_ID, expr + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + int i_0 = 0; + root_0 = (id)[treeAdaptor newEmptyTree]; + [_retval setTree:root_0]; + ANTLRRewriteRuleSubtreeStream *_stream_retval=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token retval" element:_retval!=nil?[_retval tree]:nil]; + + // 71:20: -> ^( EQ ID expr ) + { + // SimpleC.g:71:23: ^( EQ ID expr ) + { + id root_1 = (id)[treeAdaptor newEmptyTree]; + root_1 = (id)[treeAdaptor makeNode:[_stream_SimpleCParser_EQ next] parentOf:root_1]; + + [treeAdaptor addChild:[_stream_SimpleCParser_ID next] toTree:root_1]; + + [treeAdaptor addChild:[_stream_expr next] toTree:root_1]; + + [treeAdaptor addChild:root_1 toTree:root_0]; + [root_1 release]; + } + + } + + [_stream_retval release]; + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + [_retval setStop:[input LT:-1]]; + + [_stream_SimpleCParser_EQ release]; + [_stream_SimpleCParser_ID release]; + [_stream_expr release]; + [_retval setTree:(id)[treeAdaptor postProcessTree:root_0]]; + [treeAdaptor setBoundariesForTree:[_retval tree] fromToken:[_retval start] toToken:[_retval stop]]; + [root_0 release]; + } + return _retval; +} +// $ANTLR end assignStat + +// $ANTLR start expr +// SimpleC.g:74:1: expr : condExpr ; +- (SimpleCParser_expr_return *) expr +{ + ANTLRBaseRecognizerState *_state = [self state]; + SimpleCParser_expr_return * _retval = [[[SimpleCParser_expr_return alloc] init] autorelease]; + [_retval setStart:[input LT:1]]; + + id root_0 = nil; + + SimpleCParser_condExpr_return * _condExpr41 = nil; + + + + @try { + // SimpleC.g:74:5: ( condExpr ) // ruleBlockSingleAlt + // SimpleC.g:74:9: condExpr // alt + { + root_0 = (id)[treeAdaptor newEmptyTree]; + + [[_state following] addObject:FOLLOW_condExpr_in_expr598]; + _condExpr41 = [self condExpr]; + [[_state following] removeLastObject]; + + + [treeAdaptor addChild:[_condExpr41 tree] toTree:root_0]; + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + [_retval setStop:[input LT:-1]]; + + [_retval setTree:(id)[treeAdaptor postProcessTree:root_0]]; + [treeAdaptor setBoundariesForTree:[_retval tree] fromToken:[_retval start] toToken:[_retval stop]]; + [root_0 release]; + } + return _retval; +} +// $ANTLR end expr + +// $ANTLR start condExpr +// SimpleC.g:77:1: condExpr : aexpr ( ( '==' | '<' ) aexpr )? ; +- (SimpleCParser_condExpr_return *) condExpr +{ + ANTLRBaseRecognizerState *_state = [self state]; + SimpleCParser_condExpr_return * _retval = [[[SimpleCParser_condExpr_return alloc] init] autorelease]; + [_retval setStart:[input LT:1]]; + + id root_0 = nil; + + id _string_literal43 = nil; + id _char_literal44 = nil; + SimpleCParser_aexpr_return * _aexpr42 = nil; + + SimpleCParser_aexpr_return * _aexpr45 = nil; + + + id _string_literal43_tree = nil; + id _char_literal44_tree = nil; + + @try { + // SimpleC.g:78:5: ( aexpr ( ( '==' | '<' ) aexpr )? ) // ruleBlockSingleAlt + // SimpleC.g:78:9: aexpr ( ( '==' | '<' ) aexpr )? // alt + { + root_0 = (id)[treeAdaptor newEmptyTree]; + + [[_state following] addObject:FOLLOW_aexpr_in_condExpr617]; + _aexpr42 = [self aexpr]; + [[_state following] removeLastObject]; + + + [treeAdaptor addChild:[_aexpr42 tree] toTree:root_0]; + // SimpleC.g:78:15: ( ( '==' | '<' ) aexpr )? // block + int alt9=2; + { + int LA9_0 = [input LA:1]; + if ( (LA9_0>=SimpleCParser_EQEQ && LA9_0<=SimpleCParser_LT) ) { + alt9 = 1; + } + } + switch (alt9) { + case 1 : + // SimpleC.g:78:17: ( '==' | '<' ) aexpr // alt + { + // SimpleC.g:78:17: ( '==' | '<' ) // block + int alt8=2; + { + int LA8_0 = [input LA:1]; + if ( LA8_0==SimpleCParser_EQEQ ) { + alt8 = 1; + } + else if ( LA8_0==SimpleCParser_LT ) { + alt8 = 2; + } + else { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:8 state:0 stream:input]; + @throw nvae; + } + } + switch (alt8) { + case 1 : + // SimpleC.g:78:18: '==' // alt + { + _string_literal43=(id )[input LT:1]; + [self match:input tokenType:SimpleCParser_EQEQ follow:FOLLOW_SimpleCParser_EQEQ_in_condExpr622]; + _string_literal43_tree = (id)[treeAdaptor newTreeWithToken:_string_literal43]; + root_0 = (id)[treeAdaptor makeNode:_string_literal43_tree parentOf:root_0]; + [_string_literal43_tree release]; + + + } + break; + case 2 : + // SimpleC.g:78:26: '<' // alt + { + _char_literal44=(id )[input LT:1]; + [self match:input tokenType:SimpleCParser_LT follow:FOLLOW_SimpleCParser_LT_in_condExpr627]; + _char_literal44_tree = (id)[treeAdaptor newTreeWithToken:_char_literal44]; + root_0 = (id)[treeAdaptor makeNode:_char_literal44_tree parentOf:root_0]; + [_char_literal44_tree release]; + + + } + break; + + } + + [[_state following] addObject:FOLLOW_aexpr_in_condExpr631]; + _aexpr45 = [self aexpr]; + [[_state following] removeLastObject]; + + + [treeAdaptor addChild:[_aexpr45 tree] toTree:root_0]; + + } + break; + + } + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + [_retval setStop:[input LT:-1]]; + + [_retval setTree:(id)[treeAdaptor postProcessTree:root_0]]; + [treeAdaptor setBoundariesForTree:[_retval tree] fromToken:[_retval start] toToken:[_retval stop]]; + [root_0 release]; + } + return _retval; +} +// $ANTLR end condExpr + +// $ANTLR start aexpr +// SimpleC.g:81:1: aexpr : atom ( '+' atom )* ; +- (SimpleCParser_aexpr_return *) aexpr +{ + ANTLRBaseRecognizerState *_state = [self state]; + SimpleCParser_aexpr_return * _retval = [[[SimpleCParser_aexpr_return alloc] init] autorelease]; + [_retval setStart:[input LT:1]]; + + id root_0 = nil; + + id _char_literal47 = nil; + SimpleCParser_atom_return * _atom46 = nil; + + SimpleCParser_atom_return * _atom48 = nil; + + + id _char_literal47_tree = nil; + + @try { + // SimpleC.g:82:5: ( atom ( '+' atom )* ) // ruleBlockSingleAlt + // SimpleC.g:82:9: atom ( '+' atom )* // alt + { + root_0 = (id)[treeAdaptor newEmptyTree]; + + [[_state following] addObject:FOLLOW_atom_in_aexpr653]; + _atom46 = [self atom]; + [[_state following] removeLastObject]; + + + [treeAdaptor addChild:[_atom46 tree] toTree:root_0]; + do { + int alt10=2; + { + int LA10_0 = [input LA:1]; + if ( LA10_0==SimpleCParser_PLUS ) { + alt10 = 1; + } + + } + switch (alt10) { + case 1 : + // SimpleC.g:82:16: '+' atom // alt + { + _char_literal47=(id )[input LT:1]; + [self match:input tokenType:SimpleCParser_PLUS follow:FOLLOW_SimpleCParser_PLUS_in_aexpr657]; + _char_literal47_tree = (id)[treeAdaptor newTreeWithToken:_char_literal47]; + root_0 = (id)[treeAdaptor makeNode:_char_literal47_tree parentOf:root_0]; + [_char_literal47_tree release]; + + [[_state following] addObject:FOLLOW_atom_in_aexpr660]; + _atom48 = [self atom]; + [[_state following] removeLastObject]; + + + [treeAdaptor addChild:[_atom48 tree] toTree:root_0]; + + } + break; + + default : + goto loop10; + } + } while (YES); loop10: ; + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + [_retval setStop:[input LT:-1]]; + + [_retval setTree:(id)[treeAdaptor postProcessTree:root_0]]; + [treeAdaptor setBoundariesForTree:[_retval tree] fromToken:[_retval start] toToken:[_retval stop]]; + [root_0 release]; + } + return _retval; +} +// $ANTLR end aexpr + +// $ANTLR start atom +// SimpleC.g:85:1: atom : ( ID | INT | '(' expr ')' -> expr ); +- (SimpleCParser_atom_return *) atom +{ + ANTLRBaseRecognizerState *_state = [self state]; + SimpleCParser_atom_return * _retval = [[[SimpleCParser_atom_return alloc] init] autorelease]; + [_retval setStart:[input LT:1]]; + + id root_0 = nil; + + id _ID49 = nil; + id _INT50 = nil; + id _char_literal51 = nil; + id _char_literal53 = nil; + SimpleCParser_expr_return * _expr52 = nil; + + + id _ID49_tree = nil; + id _INT50_tree = nil; + id _char_literal51_tree = nil; + id _char_literal53_tree = nil; + ANTLRRewriteRuleTokenStream *_stream_24=[[ANTLRRewriteRuleTokenStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token 24"]; + ANTLRRewriteRuleTokenStream *_stream_22=[[ANTLRRewriteRuleTokenStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token 22"]; + ANTLRRewriteRuleSubtreeStream *_stream_expr=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"rule expr"]; + + @try { + // SimpleC.g:86:5: ( ID | INT | '(' expr ')' -> expr ) //ruleblock + int alt11=3; + switch ([input LA:1]) { + case SimpleCParser_ID: + alt11 = 1; + break; + case SimpleCParser_INT: + alt11 = 2; + break; + case 22: + alt11 = 3; + break; + default: + { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:11 state:0 stream:input]; + @throw nvae; + + }} + switch (alt11) { + case 1 : + // SimpleC.g:86:7: ID // alt + { + root_0 = (id)[treeAdaptor newEmptyTree]; + + _ID49=(id )[input LT:1]; + [self match:input tokenType:SimpleCParser_ID follow:FOLLOW_SimpleCParser_ID_in_atom680]; + _ID49_tree = (id)[treeAdaptor newTreeWithToken:_ID49]; + [treeAdaptor addChild:_ID49_tree toTree:root_0]; + [_ID49_tree release]; + + + } + break; + case 2 : + // SimpleC.g:87:7: INT // alt + { + root_0 = (id)[treeAdaptor newEmptyTree]; + + _INT50=(id )[input LT:1]; + [self match:input tokenType:SimpleCParser_INT follow:FOLLOW_SimpleCParser_INT_in_atom694]; + _INT50_tree = (id)[treeAdaptor newTreeWithToken:_INT50]; + [treeAdaptor addChild:_INT50_tree toTree:root_0]; + [_INT50_tree release]; + + + } + break; + case 3 : + // SimpleC.g:88:7: '(' expr ')' // alt + { + _char_literal51=(id )[input LT:1]; + [self match:input tokenType:22 follow:FOLLOW_22_in_atom708]; + [_stream_22 addElement:_char_literal51]; + + [[_state following] addObject:FOLLOW_expr_in_atom710]; + _expr52 = [self expr]; + [[_state following] removeLastObject]; + + + [_stream_expr addElement:[_expr52 tree]]; + _char_literal53=(id )[input LT:1]; + [self match:input tokenType:24 follow:FOLLOW_24_in_atom712]; + [_stream_24 addElement:_char_literal53]; + + + // AST REWRITE + // elements: expr + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + int i_0 = 0; + root_0 = (id)[treeAdaptor newEmptyTree]; + [_retval setTree:root_0]; + ANTLRRewriteRuleSubtreeStream *_stream_retval=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token retval" element:_retval!=nil?[_retval tree]:nil]; + + // 88:20: -> expr + { + [treeAdaptor addChild:[_stream_expr next] toTree:root_0]; + + } + + [_stream_retval release]; + + + } + break; + + } + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + [_retval setStop:[input LT:-1]]; + + [_stream_24 release]; + [_stream_22 release]; + [_stream_expr release]; + [_retval setTree:(id)[treeAdaptor postProcessTree:root_0]]; + [treeAdaptor setBoundariesForTree:[_retval tree] fromToken:[_retval start] toToken:[_retval stop]]; + [root_0 release]; + } + return _retval; +} +// $ANTLR end atom + + +- (id) treeAdaptor +{ + return treeAdaptor; +} + +- (void) setTreeAdaptor:(id)aTreeAdaptor +{ + if (aTreeAdaptor != treeAdaptor) { + [aTreeAdaptor retain]; + [treeAdaptor release]; + treeAdaptor = aTreeAdaptor; + } +} + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.gtp b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.gtp new file mode 100644 index 0000000..7e6a4f0 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.gtp @@ -0,0 +1,64 @@ +tree grammar SimpleCTP; +options { + tokenVocab=SimpleC; + language=ObjC; + ASTLabelType='ANTLRCommonTree *'; +} + +program + : declaration+ + ; + +declaration + : variable + | ^(FUNC_DECL functionHeader) + | ^(FUNC_DEF functionHeader block) + ; + +variable + : ^(VAR_DEF type declarator) + ; + +declarator + : ID + ; + +functionHeader + : ^(FUNC_HDR type ID formalParameter+) + ; + +formalParameter + : ^(ARG_DEF type declarator) + ; + +type + : 'int' + | 'char' + | 'void' + | ID + ; + +block + : ^(BLOCK variable* stat*) + ; + +stat: forStat + | expr + | block + ; + +forStat + : ^('for' expr expr expr block) + ; + +expr: ^(EQEQ expr expr) + | ^(LT expr expr) + | ^(PLUS expr expr) + | ^(EQ ID e=expr) { NSLog(@"assigning \%@ to variable \%@", $e.text, $ID.text); } + | atom + ; + +atom + : ID + | INT + ; diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.h b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.h new file mode 100644 index 0000000..d18aa15 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.h @@ -0,0 +1,61 @@ +// $ANTLR 3.1b1 SimpleCTP.gtp 2007-12-16 20:47:43 + +#import +#import + + + +#pragma mark Tokens +#define SimpleCTP_FUNC_DEF 8 +#define SimpleCTP_WS 20 +#define SimpleCTP_CHAR 15 +#define SimpleCTP_EQ 11 +#define SimpleCTP_FUNC_HDR 6 +#define SimpleCTP_LT 18 +#define SimpleCTP_ARG_DEF 5 +#define SimpleCTP_EQEQ 17 +#define SimpleCTP_BLOCK 9 +#define SimpleCTP_INT 12 +#define SimpleCTP_EOF -1 +#define SimpleCTP_VOID 16 +#define SimpleCTP_FOR 13 +#define SimpleCTP_PLUS 19 +#define SimpleCTP_FUNC_DECL 7 +#define SimpleCTP_INT_TYPE 14 +#define SimpleCTP_ID 10 +#define SimpleCTP_VAR_DEF 4 + +#pragma mark Dynamic Global Scopes + +#pragma mark Dynamic Rule Scopes + +#pragma mark Rule Return Scopes +@interface SimpleCTP_expr_return : ANTLRTreeParserRuleReturnScope { +} +@end + + + +@interface SimpleCTP : ANTLRTreeParser { + + + + } + + +- (void) program; +- (void) declaration; +- (void) variable; +- (void) declarator; +- (void) functionHeader; +- (void) formalParameter; +- (void) type; +- (void) block; +- (void) stat; +- (void) forStat; +- (SimpleCTP_expr_return *) expr; +- (void) atom; + + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.m new file mode 100644 index 0000000..0f406d4 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.m @@ -0,0 +1,937 @@ +// $ANTLR 3.1b1 SimpleCTP.gtp 2007-12-16 20:47:43 + +#import "SimpleCTP.h" + + +#pragma mark Bitsets +const static unsigned long long FOLLOW_declaration_in_program43_data[] = {0x0000000000000192LL}; +static ANTLRBitSet *FOLLOW_declaration_in_program43; +const static unsigned long long FOLLOW_variable_in_declaration63_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_variable_in_declaration63; +const static unsigned long long FOLLOW_SimpleCTP_FUNC_DECL_in_declaration74_data[] = {0x0000000000000004LL}; +static ANTLRBitSet *FOLLOW_SimpleCTP_FUNC_DECL_in_declaration74; +const static unsigned long long FOLLOW_functionHeader_in_declaration76_data[] = {0x0000000000000008LL}; +static ANTLRBitSet *FOLLOW_functionHeader_in_declaration76; +const static unsigned long long FOLLOW_SimpleCTP_FUNC_DEF_in_declaration88_data[] = {0x0000000000000004LL}; +static ANTLRBitSet *FOLLOW_SimpleCTP_FUNC_DEF_in_declaration88; +const static unsigned long long FOLLOW_functionHeader_in_declaration90_data[] = {0x0000000000000200LL}; +static ANTLRBitSet *FOLLOW_functionHeader_in_declaration90; +const static unsigned long long FOLLOW_block_in_declaration92_data[] = {0x0000000000000008LL}; +static ANTLRBitSet *FOLLOW_block_in_declaration92; +const static unsigned long long FOLLOW_SimpleCTP_VAR_DEF_in_variable113_data[] = {0x0000000000000004LL}; +static ANTLRBitSet *FOLLOW_SimpleCTP_VAR_DEF_in_variable113; +const static unsigned long long FOLLOW_type_in_variable115_data[] = {0x0000000000000400LL}; +static ANTLRBitSet *FOLLOW_type_in_variable115; +const static unsigned long long FOLLOW_declarator_in_variable117_data[] = {0x0000000000000008LL}; +static ANTLRBitSet *FOLLOW_declarator_in_variable117; +const static unsigned long long FOLLOW_SimpleCTP_ID_in_declarator137_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_SimpleCTP_ID_in_declarator137; +const static unsigned long long FOLLOW_SimpleCTP_FUNC_HDR_in_functionHeader158_data[] = {0x0000000000000004LL}; +static ANTLRBitSet *FOLLOW_SimpleCTP_FUNC_HDR_in_functionHeader158; +const static unsigned long long FOLLOW_type_in_functionHeader160_data[] = {0x0000000000000400LL}; +static ANTLRBitSet *FOLLOW_type_in_functionHeader160; +const static unsigned long long FOLLOW_SimpleCTP_ID_in_functionHeader162_data[] = {0x0000000000000020LL}; +static ANTLRBitSet *FOLLOW_SimpleCTP_ID_in_functionHeader162; +const static unsigned long long FOLLOW_formalParameter_in_functionHeader164_data[] = {0x0000000000000028LL}; +static ANTLRBitSet *FOLLOW_formalParameter_in_functionHeader164; +const static unsigned long long FOLLOW_SimpleCTP_ARG_DEF_in_formalParameter186_data[] = {0x0000000000000004LL}; +static ANTLRBitSet *FOLLOW_SimpleCTP_ARG_DEF_in_formalParameter186; +const static unsigned long long FOLLOW_type_in_formalParameter188_data[] = {0x0000000000000400LL}; +static ANTLRBitSet *FOLLOW_type_in_formalParameter188; +const static unsigned long long FOLLOW_declarator_in_formalParameter190_data[] = {0x0000000000000008LL}; +static ANTLRBitSet *FOLLOW_declarator_in_formalParameter190; +const static unsigned long long FOLLOW_set_in_type0_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_set_in_type0; +const static unsigned long long FOLLOW_SimpleCTP_BLOCK_in_block273_data[] = {0x0000000000000004LL}; +static ANTLRBitSet *FOLLOW_SimpleCTP_BLOCK_in_block273; +const static unsigned long long FOLLOW_variable_in_block275_data[] = {0x00000000000E3E18LL}; +static ANTLRBitSet *FOLLOW_variable_in_block275; +const static unsigned long long FOLLOW_stat_in_block278_data[] = {0x00000000000E3E08LL}; +static ANTLRBitSet *FOLLOW_stat_in_block278; +const static unsigned long long FOLLOW_forStat_in_stat292_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_forStat_in_stat292; +const static unsigned long long FOLLOW_expr_in_stat300_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_expr_in_stat300; +const static unsigned long long FOLLOW_block_in_stat308_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_block_in_stat308; +const static unsigned long long FOLLOW_SimpleCTP_FOR_in_forStat328_data[] = {0x0000000000000004LL}; +static ANTLRBitSet *FOLLOW_SimpleCTP_FOR_in_forStat328; +const static unsigned long long FOLLOW_expr_in_forStat330_data[] = {0x00000000000E1C00LL}; +static ANTLRBitSet *FOLLOW_expr_in_forStat330; +const static unsigned long long FOLLOW_expr_in_forStat332_data[] = {0x00000000000E1C00LL}; +static ANTLRBitSet *FOLLOW_expr_in_forStat332; +const static unsigned long long FOLLOW_expr_in_forStat334_data[] = {0x0000000000000200LL}; +static ANTLRBitSet *FOLLOW_expr_in_forStat334; +const static unsigned long long FOLLOW_block_in_forStat336_data[] = {0x0000000000000008LL}; +static ANTLRBitSet *FOLLOW_block_in_forStat336; +const static unsigned long long FOLLOW_SimpleCTP_EQEQ_in_expr352_data[] = {0x0000000000000004LL}; +static ANTLRBitSet *FOLLOW_SimpleCTP_EQEQ_in_expr352; +const static unsigned long long FOLLOW_expr_in_expr354_data[] = {0x00000000000E1C00LL}; +static ANTLRBitSet *FOLLOW_expr_in_expr354; +const static unsigned long long FOLLOW_expr_in_expr356_data[] = {0x0000000000000008LL}; +static ANTLRBitSet *FOLLOW_expr_in_expr356; +const static unsigned long long FOLLOW_SimpleCTP_LT_in_expr368_data[] = {0x0000000000000004LL}; +static ANTLRBitSet *FOLLOW_SimpleCTP_LT_in_expr368; +const static unsigned long long FOLLOW_expr_in_expr370_data[] = {0x00000000000E1C00LL}; +static ANTLRBitSet *FOLLOW_expr_in_expr370; +const static unsigned long long FOLLOW_expr_in_expr372_data[] = {0x0000000000000008LL}; +static ANTLRBitSet *FOLLOW_expr_in_expr372; +const static unsigned long long FOLLOW_SimpleCTP_PLUS_in_expr384_data[] = {0x0000000000000004LL}; +static ANTLRBitSet *FOLLOW_SimpleCTP_PLUS_in_expr384; +const static unsigned long long FOLLOW_expr_in_expr386_data[] = {0x00000000000E1C00LL}; +static ANTLRBitSet *FOLLOW_expr_in_expr386; +const static unsigned long long FOLLOW_expr_in_expr388_data[] = {0x0000000000000008LL}; +static ANTLRBitSet *FOLLOW_expr_in_expr388; +const static unsigned long long FOLLOW_SimpleCTP_EQ_in_expr400_data[] = {0x0000000000000004LL}; +static ANTLRBitSet *FOLLOW_SimpleCTP_EQ_in_expr400; +const static unsigned long long FOLLOW_SimpleCTP_ID_in_expr402_data[] = {0x00000000000E1C00LL}; +static ANTLRBitSet *FOLLOW_SimpleCTP_ID_in_expr402; +const static unsigned long long FOLLOW_expr_in_expr406_data[] = {0x0000000000000008LL}; +static ANTLRBitSet *FOLLOW_expr_in_expr406; +const static unsigned long long FOLLOW_atom_in_expr419_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_atom_in_expr419; +const static unsigned long long FOLLOW_set_in_atom0_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_set_in_atom0; + + +#pragma mark Dynamic Global Scopes + +#pragma mark Dynamic Rule Scopes + +#pragma mark Rule return scopes start +@implementation SimpleCTP_expr_return +@end + + +@implementation SimpleCTP + +static NSArray *tokenNames; + ++ (void) initialize +{ + FOLLOW_declaration_in_program43 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_declaration_in_program43_data count:1]; + FOLLOW_variable_in_declaration63 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_variable_in_declaration63_data count:1]; + FOLLOW_SimpleCTP_FUNC_DECL_in_declaration74 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCTP_FUNC_DECL_in_declaration74_data count:1]; + FOLLOW_functionHeader_in_declaration76 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_functionHeader_in_declaration76_data count:1]; + FOLLOW_SimpleCTP_FUNC_DEF_in_declaration88 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCTP_FUNC_DEF_in_declaration88_data count:1]; + FOLLOW_functionHeader_in_declaration90 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_functionHeader_in_declaration90_data count:1]; + FOLLOW_block_in_declaration92 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_block_in_declaration92_data count:1]; + FOLLOW_SimpleCTP_VAR_DEF_in_variable113 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCTP_VAR_DEF_in_variable113_data count:1]; + FOLLOW_type_in_variable115 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_type_in_variable115_data count:1]; + FOLLOW_declarator_in_variable117 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_declarator_in_variable117_data count:1]; + FOLLOW_SimpleCTP_ID_in_declarator137 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCTP_ID_in_declarator137_data count:1]; + FOLLOW_SimpleCTP_FUNC_HDR_in_functionHeader158 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCTP_FUNC_HDR_in_functionHeader158_data count:1]; + FOLLOW_type_in_functionHeader160 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_type_in_functionHeader160_data count:1]; + FOLLOW_SimpleCTP_ID_in_functionHeader162 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCTP_ID_in_functionHeader162_data count:1]; + FOLLOW_formalParameter_in_functionHeader164 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_formalParameter_in_functionHeader164_data count:1]; + FOLLOW_SimpleCTP_ARG_DEF_in_formalParameter186 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCTP_ARG_DEF_in_formalParameter186_data count:1]; + FOLLOW_type_in_formalParameter188 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_type_in_formalParameter188_data count:1]; + FOLLOW_declarator_in_formalParameter190 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_declarator_in_formalParameter190_data count:1]; + FOLLOW_set_in_type0 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_set_in_type0_data count:1]; + FOLLOW_SimpleCTP_BLOCK_in_block273 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCTP_BLOCK_in_block273_data count:1]; + FOLLOW_variable_in_block275 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_variable_in_block275_data count:1]; + FOLLOW_stat_in_block278 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_stat_in_block278_data count:1]; + FOLLOW_forStat_in_stat292 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_forStat_in_stat292_data count:1]; + FOLLOW_expr_in_stat300 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_expr_in_stat300_data count:1]; + FOLLOW_block_in_stat308 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_block_in_stat308_data count:1]; + FOLLOW_SimpleCTP_FOR_in_forStat328 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCTP_FOR_in_forStat328_data count:1]; + FOLLOW_expr_in_forStat330 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_expr_in_forStat330_data count:1]; + FOLLOW_expr_in_forStat332 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_expr_in_forStat332_data count:1]; + FOLLOW_expr_in_forStat334 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_expr_in_forStat334_data count:1]; + FOLLOW_block_in_forStat336 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_block_in_forStat336_data count:1]; + FOLLOW_SimpleCTP_EQEQ_in_expr352 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCTP_EQEQ_in_expr352_data count:1]; + FOLLOW_expr_in_expr354 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_expr_in_expr354_data count:1]; + FOLLOW_expr_in_expr356 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_expr_in_expr356_data count:1]; + FOLLOW_SimpleCTP_LT_in_expr368 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCTP_LT_in_expr368_data count:1]; + FOLLOW_expr_in_expr370 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_expr_in_expr370_data count:1]; + FOLLOW_expr_in_expr372 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_expr_in_expr372_data count:1]; + FOLLOW_SimpleCTP_PLUS_in_expr384 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCTP_PLUS_in_expr384_data count:1]; + FOLLOW_expr_in_expr386 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_expr_in_expr386_data count:1]; + FOLLOW_expr_in_expr388 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_expr_in_expr388_data count:1]; + FOLLOW_SimpleCTP_EQ_in_expr400 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCTP_EQ_in_expr400_data count:1]; + FOLLOW_SimpleCTP_ID_in_expr402 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_SimpleCTP_ID_in_expr402_data count:1]; + FOLLOW_expr_in_expr406 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_expr_in_expr406_data count:1]; + FOLLOW_atom_in_expr419 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_atom_in_expr419_data count:1]; + FOLLOW_set_in_atom0 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_set_in_atom0_data count:1]; + + tokenNames = [[NSArray alloc] initWithObjects:@"", @"", @"", @"", + @"VAR_DEF", @"ARG_DEF", @"FUNC_HDR", @"FUNC_DECL", @"FUNC_DEF", @"BLOCK", + @"ID", @"EQ", @"INT", @"FOR", @"INT_TYPE", @"CHAR", @"VOID", @"EQEQ", @"LT", + @"PLUS", @"WS", @"';'", @"'('", @"','", @"')'", @"'{'", @"'}'", nil]; +} + + +- (id) initWithTreeNodeStream:(id)aStream +{ + if ((self = [super initWithTreeNodeStream:aStream])) { + + + + } + return self; +} + +- (void) dealloc +{ + + [super dealloc]; +} + +- (NSString *) grammarFileName +{ + return @"SimpleCTP.gtp"; +} + + +// $ANTLR start program +// SimpleCTP.gtp:8:1: program : ( declaration )+ ; +- (void) program +{ + ANTLRBaseRecognizerState *_state = [self state]; + @try { + // SimpleCTP.gtp:9:5: ( ( declaration )+ ) // ruleBlockSingleAlt + // SimpleCTP.gtp:9:9: ( declaration )+ // alt + { + // SimpleCTP.gtp:9:9: ( declaration )+ // positiveClosureBlock + int cnt1=0; + + do { + int alt1=2; + { + int LA1_0 = [input LA:1]; + if ( LA1_0==SimpleCTP_VAR_DEF||(LA1_0>=SimpleCTP_FUNC_DECL && LA1_0<=SimpleCTP_FUNC_DEF) ) { + alt1 = 1; + } + + } + switch (alt1) { + case 1 : + // SimpleCTP.gtp:9:9: declaration // alt + { + [[_state following] addObject:FOLLOW_declaration_in_program43]; + [self declaration]; + [[_state following] removeLastObject]; + + + + } + break; + + default : + if ( cnt1 >= 1 ) goto loop1; + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:1]; + @throw eee; + } + cnt1++; + } while (YES); loop1: ; + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + + } + return ; +} +// $ANTLR end program + +// $ANTLR start declaration +// SimpleCTP.gtp:12:1: declaration : ( variable | ^( FUNC_DECL functionHeader ) | ^( FUNC_DEF functionHeader block ) ); +- (void) declaration +{ + ANTLRBaseRecognizerState *_state = [self state]; + @try { + // SimpleCTP.gtp:13:5: ( variable | ^( FUNC_DECL functionHeader ) | ^( FUNC_DEF functionHeader block ) ) //ruleblock + int alt2=3; + switch ([input LA:1]) { + case SimpleCTP_VAR_DEF: + alt2 = 1; + break; + case SimpleCTP_FUNC_DECL: + alt2 = 2; + break; + case SimpleCTP_FUNC_DEF: + alt2 = 3; + break; + default: + { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:2 state:0 stream:input]; + @throw nvae; + + }} + switch (alt2) { + case 1 : + // SimpleCTP.gtp:13:9: variable // alt + { + [[_state following] addObject:FOLLOW_variable_in_declaration63]; + [self variable]; + [[_state following] removeLastObject]; + + + + } + break; + case 2 : + // SimpleCTP.gtp:14:9: ^( FUNC_DECL functionHeader ) // alt + { + [self match:input tokenType:SimpleCTP_FUNC_DECL follow:FOLLOW_SimpleCTP_FUNC_DECL_in_declaration74]; + + [self match:input tokenType:ANTLRTokenTypeDOWN follow:nil]; + [[_state following] addObject:FOLLOW_functionHeader_in_declaration76]; + [self functionHeader]; + [[_state following] removeLastObject]; + + + + [self match:input tokenType:ANTLRTokenTypeUP follow:nil]; + + } + break; + case 3 : + // SimpleCTP.gtp:15:9: ^( FUNC_DEF functionHeader block ) // alt + { + [self match:input tokenType:SimpleCTP_FUNC_DEF follow:FOLLOW_SimpleCTP_FUNC_DEF_in_declaration88]; + + [self match:input tokenType:ANTLRTokenTypeDOWN follow:nil]; + [[_state following] addObject:FOLLOW_functionHeader_in_declaration90]; + [self functionHeader]; + [[_state following] removeLastObject]; + + + [[_state following] addObject:FOLLOW_block_in_declaration92]; + [self block]; + [[_state following] removeLastObject]; + + + + [self match:input tokenType:ANTLRTokenTypeUP follow:nil]; + + } + break; + + } + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + + } + return ; +} +// $ANTLR end declaration + +// $ANTLR start variable +// SimpleCTP.gtp:18:1: variable : ^( VAR_DEF type declarator ) ; +- (void) variable +{ + ANTLRBaseRecognizerState *_state = [self state]; + @try { + // SimpleCTP.gtp:19:5: ( ^( VAR_DEF type declarator ) ) // ruleBlockSingleAlt + // SimpleCTP.gtp:19:9: ^( VAR_DEF type declarator ) // alt + { + [self match:input tokenType:SimpleCTP_VAR_DEF follow:FOLLOW_SimpleCTP_VAR_DEF_in_variable113]; + + [self match:input tokenType:ANTLRTokenTypeDOWN follow:nil]; + [[_state following] addObject:FOLLOW_type_in_variable115]; + [self type]; + [[_state following] removeLastObject]; + + + [[_state following] addObject:FOLLOW_declarator_in_variable117]; + [self declarator]; + [[_state following] removeLastObject]; + + + + [self match:input tokenType:ANTLRTokenTypeUP follow:nil]; + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + + } + return ; +} +// $ANTLR end variable + +// $ANTLR start declarator +// SimpleCTP.gtp:22:1: declarator : ID ; +- (void) declarator +{ + ANTLRBaseRecognizerState *_state = [self state]; + @try { + // SimpleCTP.gtp:23:5: ( ID ) // ruleBlockSingleAlt + // SimpleCTP.gtp:23:9: ID // alt + { + [self match:input tokenType:SimpleCTP_ID follow:FOLLOW_SimpleCTP_ID_in_declarator137]; + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + + } + return ; +} +// $ANTLR end declarator + +// $ANTLR start functionHeader +// SimpleCTP.gtp:26:1: functionHeader : ^( FUNC_HDR type ID ( formalParameter )+ ) ; +- (void) functionHeader +{ + ANTLRBaseRecognizerState *_state = [self state]; + @try { + // SimpleCTP.gtp:27:5: ( ^( FUNC_HDR type ID ( formalParameter )+ ) ) // ruleBlockSingleAlt + // SimpleCTP.gtp:27:9: ^( FUNC_HDR type ID ( formalParameter )+ ) // alt + { + [self match:input tokenType:SimpleCTP_FUNC_HDR follow:FOLLOW_SimpleCTP_FUNC_HDR_in_functionHeader158]; + + [self match:input tokenType:ANTLRTokenTypeDOWN follow:nil]; + [[_state following] addObject:FOLLOW_type_in_functionHeader160]; + [self type]; + [[_state following] removeLastObject]; + + + [self match:input tokenType:SimpleCTP_ID follow:FOLLOW_SimpleCTP_ID_in_functionHeader162]; + // SimpleCTP.gtp:27:28: ( formalParameter )+ // positiveClosureBlock + int cnt3=0; + + do { + int alt3=2; + { + int LA3_0 = [input LA:1]; + if ( LA3_0==SimpleCTP_ARG_DEF ) { + alt3 = 1; + } + + } + switch (alt3) { + case 1 : + // SimpleCTP.gtp:27:28: formalParameter // alt + { + [[_state following] addObject:FOLLOW_formalParameter_in_functionHeader164]; + [self formalParameter]; + [[_state following] removeLastObject]; + + + + } + break; + + default : + if ( cnt3 >= 1 ) goto loop3; + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:3]; + @throw eee; + } + cnt3++; + } while (YES); loop3: ; + + + [self match:input tokenType:ANTLRTokenTypeUP follow:nil]; + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + + } + return ; +} +// $ANTLR end functionHeader + +// $ANTLR start formalParameter +// SimpleCTP.gtp:30:1: formalParameter : ^( ARG_DEF type declarator ) ; +- (void) formalParameter +{ + ANTLRBaseRecognizerState *_state = [self state]; + @try { + // SimpleCTP.gtp:31:5: ( ^( ARG_DEF type declarator ) ) // ruleBlockSingleAlt + // SimpleCTP.gtp:31:9: ^( ARG_DEF type declarator ) // alt + { + [self match:input tokenType:SimpleCTP_ARG_DEF follow:FOLLOW_SimpleCTP_ARG_DEF_in_formalParameter186]; + + [self match:input tokenType:ANTLRTokenTypeDOWN follow:nil]; + [[_state following] addObject:FOLLOW_type_in_formalParameter188]; + [self type]; + [[_state following] removeLastObject]; + + + [[_state following] addObject:FOLLOW_declarator_in_formalParameter190]; + [self declarator]; + [[_state following] removeLastObject]; + + + + [self match:input tokenType:ANTLRTokenTypeUP follow:nil]; + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + + } + return ; +} +// $ANTLR end formalParameter + +// $ANTLR start type +// SimpleCTP.gtp:34:1: type : ( 'int' | 'char' | 'void' | ID ); +- (void) type +{ + ANTLRBaseRecognizerState *_state = [self state]; + @try { + // SimpleCTP.gtp:35:5: ( 'int' | 'char' | 'void' | ID ) // ruleBlockSingleAlt + // SimpleCTP.gtp: // alt + { + if ([input LA:1]==SimpleCTP_ID||([input LA:1]>=SimpleCTP_INT_TYPE && [input LA:1]<=SimpleCTP_VOID)) { + [input consume]; + [_state setIsErrorRecovery:NO]; + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recoverFromMismatchedSet:input exception:mse follow:FOLLOW_set_in_type0]; @throw mse; + } + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + + } + return ; +} +// $ANTLR end type + +// $ANTLR start block +// SimpleCTP.gtp:41:1: block : ^( BLOCK ( variable )* ( stat )* ) ; +- (void) block +{ + ANTLRBaseRecognizerState *_state = [self state]; + @try { + // SimpleCTP.gtp:42:5: ( ^( BLOCK ( variable )* ( stat )* ) ) // ruleBlockSingleAlt + // SimpleCTP.gtp:42:9: ^( BLOCK ( variable )* ( stat )* ) // alt + { + [self match:input tokenType:SimpleCTP_BLOCK follow:FOLLOW_SimpleCTP_BLOCK_in_block273]; + + if ( [input LA:1] == ANTLRTokenTypeDOWN ) { + [self match:input tokenType:ANTLRTokenTypeDOWN follow:nil]; + do { + int alt4=2; + { + int LA4_0 = [input LA:1]; + if ( LA4_0==SimpleCTP_VAR_DEF ) { + alt4 = 1; + } + + } + switch (alt4) { + case 1 : + // SimpleCTP.gtp:42:17: variable // alt + { + [[_state following] addObject:FOLLOW_variable_in_block275]; + [self variable]; + [[_state following] removeLastObject]; + + + + } + break; + + default : + goto loop4; + } + } while (YES); loop4: ; + + do { + int alt5=2; + { + int LA5_0 = [input LA:1]; + if ( (LA5_0>=SimpleCTP_BLOCK && LA5_0<=SimpleCTP_FOR)||(LA5_0>=SimpleCTP_EQEQ && LA5_0<=SimpleCTP_PLUS) ) { + alt5 = 1; + } + + } + switch (alt5) { + case 1 : + // SimpleCTP.gtp:42:27: stat // alt + { + [[_state following] addObject:FOLLOW_stat_in_block278]; + [self stat]; + [[_state following] removeLastObject]; + + + + } + break; + + default : + goto loop5; + } + } while (YES); loop5: ; + + + [self match:input tokenType:ANTLRTokenTypeUP follow:nil]; + } + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + + } + return ; +} +// $ANTLR end block + +// $ANTLR start stat +// SimpleCTP.gtp:45:1: stat : ( forStat | expr | block ); +- (void) stat +{ + ANTLRBaseRecognizerState *_state = [self state]; + @try { + // SimpleCTP.gtp:45:5: ( forStat | expr | block ) //ruleblock + int alt6=3; + switch ([input LA:1]) { + case SimpleCTP_FOR: + alt6 = 1; + break; + case SimpleCTP_ID: + case SimpleCTP_EQ: + case SimpleCTP_INT: + case SimpleCTP_EQEQ: + case SimpleCTP_LT: + case SimpleCTP_PLUS: + alt6 = 2; + break; + case SimpleCTP_BLOCK: + alt6 = 3; + break; + default: + { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:6 state:0 stream:input]; + @throw nvae; + + }} + switch (alt6) { + case 1 : + // SimpleCTP.gtp:45:7: forStat // alt + { + [[_state following] addObject:FOLLOW_forStat_in_stat292]; + [self forStat]; + [[_state following] removeLastObject]; + + + + } + break; + case 2 : + // SimpleCTP.gtp:46:7: expr // alt + { + [[_state following] addObject:FOLLOW_expr_in_stat300]; + [self expr]; + [[_state following] removeLastObject]; + + + + } + break; + case 3 : + // SimpleCTP.gtp:47:7: block // alt + { + [[_state following] addObject:FOLLOW_block_in_stat308]; + [self block]; + [[_state following] removeLastObject]; + + + + } + break; + + } + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + + } + return ; +} +// $ANTLR end stat + +// $ANTLR start forStat +// SimpleCTP.gtp:50:1: forStat : ^( 'for' expr expr expr block ) ; +- (void) forStat +{ + ANTLRBaseRecognizerState *_state = [self state]; + @try { + // SimpleCTP.gtp:51:5: ( ^( 'for' expr expr expr block ) ) // ruleBlockSingleAlt + // SimpleCTP.gtp:51:9: ^( 'for' expr expr expr block ) // alt + { + [self match:input tokenType:SimpleCTP_FOR follow:FOLLOW_SimpleCTP_FOR_in_forStat328]; + + [self match:input tokenType:ANTLRTokenTypeDOWN follow:nil]; + [[_state following] addObject:FOLLOW_expr_in_forStat330]; + [self expr]; + [[_state following] removeLastObject]; + + + [[_state following] addObject:FOLLOW_expr_in_forStat332]; + [self expr]; + [[_state following] removeLastObject]; + + + [[_state following] addObject:FOLLOW_expr_in_forStat334]; + [self expr]; + [[_state following] removeLastObject]; + + + [[_state following] addObject:FOLLOW_block_in_forStat336]; + [self block]; + [[_state following] removeLastObject]; + + + + [self match:input tokenType:ANTLRTokenTypeUP follow:nil]; + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + + } + return ; +} +// $ANTLR end forStat + +// $ANTLR start expr +// SimpleCTP.gtp:54:1: expr : ( ^( EQEQ expr expr ) | ^( LT expr expr ) | ^( PLUS expr expr ) | ^( EQ ID e= expr ) | atom ); +- (SimpleCTP_expr_return *) expr +{ + ANTLRBaseRecognizerState *_state = [self state]; + SimpleCTP_expr_return * _retval = [[[SimpleCTP_expr_return alloc] init] autorelease]; + [_retval setStart:[input LT:1]]; + + ANTLRCommonTree * _ID1 = nil; + SimpleCTP_expr_return * _e = nil; + + + @try { + // SimpleCTP.gtp:54:5: ( ^( EQEQ expr expr ) | ^( LT expr expr ) | ^( PLUS expr expr ) | ^( EQ ID e= expr ) | atom ) //ruleblock + int alt7=5; + switch ([input LA:1]) { + case SimpleCTP_EQEQ: + alt7 = 1; + break; + case SimpleCTP_LT: + alt7 = 2; + break; + case SimpleCTP_PLUS: + alt7 = 3; + break; + case SimpleCTP_EQ: + alt7 = 4; + break; + case SimpleCTP_ID: + case SimpleCTP_INT: + alt7 = 5; + break; + default: + { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:7 state:0 stream:input]; + @throw nvae; + + }} + switch (alt7) { + case 1 : + // SimpleCTP.gtp:54:9: ^( EQEQ expr expr ) // alt + { + [self match:input tokenType:SimpleCTP_EQEQ follow:FOLLOW_SimpleCTP_EQEQ_in_expr352]; + + [self match:input tokenType:ANTLRTokenTypeDOWN follow:nil]; + [[_state following] addObject:FOLLOW_expr_in_expr354]; + [self expr]; + [[_state following] removeLastObject]; + + + [[_state following] addObject:FOLLOW_expr_in_expr356]; + [self expr]; + [[_state following] removeLastObject]; + + + + [self match:input tokenType:ANTLRTokenTypeUP follow:nil]; + + } + break; + case 2 : + // SimpleCTP.gtp:55:9: ^( LT expr expr ) // alt + { + [self match:input tokenType:SimpleCTP_LT follow:FOLLOW_SimpleCTP_LT_in_expr368]; + + [self match:input tokenType:ANTLRTokenTypeDOWN follow:nil]; + [[_state following] addObject:FOLLOW_expr_in_expr370]; + [self expr]; + [[_state following] removeLastObject]; + + + [[_state following] addObject:FOLLOW_expr_in_expr372]; + [self expr]; + [[_state following] removeLastObject]; + + + + [self match:input tokenType:ANTLRTokenTypeUP follow:nil]; + + } + break; + case 3 : + // SimpleCTP.gtp:56:9: ^( PLUS expr expr ) // alt + { + [self match:input tokenType:SimpleCTP_PLUS follow:FOLLOW_SimpleCTP_PLUS_in_expr384]; + + [self match:input tokenType:ANTLRTokenTypeDOWN follow:nil]; + [[_state following] addObject:FOLLOW_expr_in_expr386]; + [self expr]; + [[_state following] removeLastObject]; + + + [[_state following] addObject:FOLLOW_expr_in_expr388]; + [self expr]; + [[_state following] removeLastObject]; + + + + [self match:input tokenType:ANTLRTokenTypeUP follow:nil]; + + } + break; + case 4 : + // SimpleCTP.gtp:57:9: ^( EQ ID e= expr ) // alt + { + [self match:input tokenType:SimpleCTP_EQ follow:FOLLOW_SimpleCTP_EQ_in_expr400]; + + [self match:input tokenType:ANTLRTokenTypeDOWN follow:nil]; + _ID1=(ANTLRCommonTree *)[input LT:1]; + [self match:input tokenType:SimpleCTP_ID follow:FOLLOW_SimpleCTP_ID_in_expr402]; + [[_state following] addObject:FOLLOW_expr_in_expr406]; + _e = [self expr]; + [[_state following] removeLastObject]; + + + + [self match:input tokenType:ANTLRTokenTypeUP follow:nil]; + NSLog(@"assigning %@ to variable %@", //[input textForNode:[_e start]] + [input substringWithRange:NSMakeRange([_e start], [_e stop]-[_e start])], [_ID1 text]); + + } + break; + case 5 : + // SimpleCTP.gtp:58:9: atom // alt + { + [[_state following] addObject:FOLLOW_atom_in_expr419]; + [self atom]; + [[_state following] removeLastObject]; + + + + } + break; + + } + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + + } + return _retval; +} +// $ANTLR end expr + +// $ANTLR start atom +// SimpleCTP.gtp:61:1: atom : ( ID | INT ); +- (void) atom +{ + ANTLRBaseRecognizerState *_state = [self state]; + @try { + // SimpleCTP.gtp:62:5: ( ID | INT ) // ruleBlockSingleAlt + // SimpleCTP.gtp: // alt + { + if ([input LA:1]==SimpleCTP_ID||[input LA:1]==SimpleCTP_INT) { + [input consume]; + [_state setIsErrorRecovery:NO]; + } else { + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recoverFromMismatchedSet:input exception:mse follow:FOLLOW_set_in_atom0]; @throw mse; + } + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + + } + return ; +} +// $ANTLR end atom + + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.tokens b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.tokens new file mode 100644 index 0000000..776df98 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleCTP.tokens @@ -0,0 +1,30 @@ +FUNC_DEF=8 +WS=20 +CHAR=15 +EQ=11 +FUNC_HDR=6 +LT=18 +ARG_DEF=5 +EQEQ=17 +BLOCK=9 +INT=12 +VOID=16 +FOR=13 +PLUS=19 +FUNC_DECL=7 +INT_TYPE=14 +ID=10 +VAR_DEF=4 +'<'=18 +')'=24 +'=='=17 +';'=21 +'{'=25 +'char'=15 +'void'=16 +'('=22 +','=23 +'int'=14 +'for'=13 +'}'=26 +'+'=19 diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleC__.gl b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleC__.gl new file mode 100644 index 0000000..827cb5e --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/SimpleC__.gl @@ -0,0 +1,47 @@ +lexer grammar SimpleC; +options { + language=ObjC; + +} + +T21 : ';' ; +T22 : '(' ; +T23 : ',' ; +T24 : ')' ; +T25 : '{' ; +T26 : '}' ; + +// $ANTLR src "SimpleC.g" 91 +FOR : 'for' ; +// $ANTLR src "SimpleC.g" 92 +INT_TYPE : 'int' ; +// $ANTLR src "SimpleC.g" 93 +CHAR: 'char'; +// $ANTLR src "SimpleC.g" 94 +VOID: 'void'; + +// $ANTLR src "SimpleC.g" 96 +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + ; + +// $ANTLR src "SimpleC.g" 99 +INT : ('0'..'9')+ + ; + +// $ANTLR src "SimpleC.g" 102 +EQ : '=' ; +// $ANTLR src "SimpleC.g" 103 +EQEQ : '==' ; +// $ANTLR src "SimpleC.g" 104 +LT : '<' ; +// $ANTLR src "SimpleC.g" 105 +PLUS : '+' ; + +// $ANTLR src "SimpleC.g" 107 +WS : ( ' ' + | '\t' + | '\r' + | '\n' + )+ + { $channel=99; } + ; diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/input b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/input new file mode 100644 index 0000000..1aa5a0d --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/input @@ -0,0 +1,12 @@ +char c; +int x; + +void bar(int x); + +int foo(int y, char d) { + int i; + for (i=0; i<3; i=i+1) { + x=3; + y=5; + } +} diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/main.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/main.m new file mode 100644 index 0000000..50cc884 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/main.m @@ -0,0 +1,79 @@ +#import +#import +#import "SimpleCLexer.h" +#import "SimpleCParser.h" +#import "SimpleCTP.h" +#import "stdio.h" +#include + +int main(int argc, const char * argv[]) { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + if (argc < 2) { + NSLog(@"provide the input file, please"); + return 1; + } + + // simply read in the input file in one gulp + NSString *string = [NSString stringWithContentsOfFile:[NSString stringWithCString:argv[1]]]; + NSLog(@"input is : %@", string); + + // create a stream over the input, so the lexer can seek back and forth, but don't copy the string, + // as we make sure it will not go away. + // If the string would be coming from a volatile source, say a text field, we could opt to copy the string. + // That way we could do the parsing in a different thread, and still let the user edit the original string. + // But here we do it the simple way. + ANTLRStringStream *stream = [[ANTLRStringStream alloc] initWithStringNoCopy:string]; + + // Actually create the lexer feeding of the character stream. + SimpleCLexer *lexer = [[SimpleCLexer alloc] initWithCharStream:stream]; + + // For fun, you could print all tokens the lexer recognized, but we can only do it once. After that + // we would need to reset the lexer, and lex again. +// id currentToken; +// while ((currentToken = [lexer nextToken]) && [currentToken type] != ANTLRTokenTypeEOF) { +// NSLog(@"%@", currentToken); +// } +// [lexer reset]; + + // Since the parser needs to scan back and forth over the tokens, we put them into a stream, too. + ANTLRCommonTokenStream *tokenStream = [[ANTLRCommonTokenStream alloc] initWithTokenSource:lexer]; + + // Construct a parser and feed it the token stream. + SimpleCParser *parser = [[SimpleCParser alloc] initWithTokenStream:tokenStream]; + + // We start the parsing process by calling a parser rule. In theory you can call any parser rule here, + // but it obviously has to match the input token stream. Otherwise parsing would fail. + // Also watch out for internal dependencies in your grammar (e.g. you use a symbol table that's only + // initialized when you call a specific parser rule). + // This is a simple example, so we just call the top-mose rule 'program'. + // Since we want to parse the AST the parser builds, we just ask the returned object for that. + ANTLRCommonTree *program_tree = [[parser program] tree]; + + // Print the matched tree as a Lisp-style string + NSLog(@"tree: %@", [program_tree treeDescription]); + + // Create a new tree node stream that's feeding off of the root node (thus seeing the whole tree) + ANTLRUnbufferedCommonTreeNodeStream *treeStream = [[ANTLRUnbufferedCommonTreeNodeStream alloc] initWithTree:program_tree]; + // tell the TreeNodeStream where the tokens originally came from, so we can retrieve arbitrary tokens and their text. + [treeStream setTokenStream:tokenStream]; + + // Create the treeparser instance, passing it the stream of nodes + SimpleCTP *walker = [[SimpleCTP alloc] initWithTreeNodeStream:treeStream]; + // As with parsers, you can invoke any treeparser rule here. + [walker program]; + + // Whew, done. Release everything that we are responsible for. + [lexer release]; + [stream release]; + [tokenStream release]; + [parser release]; + [treeStream release]; + [walker release]; + + [pool release]; + + // use this for ObjectAlloc on Tiger + //while(1) sleep(5); + return 0; +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/output b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/output new file mode 100644 index 0000000..0d0174a --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/simplecTreeParser/output @@ -0,0 +1 @@ +tree=(VAR_DEF char c) (VAR_DEF int x) (FUNC_DECL (FUNC_HDR void bar (ARG_DEF int x))) (FUNC_DEF (FUNC_HDR int foo (ARG_DEF int y) (ARG_DEF char d)) (BLOCK (VAR_DEF int i) (for (= i 0) (< i 3) (= i (+ i 1)) (BLOCK (= x 3) (= y 5))))) diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewrite.g b/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewrite.g new file mode 100644 index 0000000..b851e06 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewrite.g @@ -0,0 +1,19 @@ +grammar TreeRewrite; + +options { + output=AST; + language=ObjC; +} + +rule: INT subrule -> ^(subrule INT) + ; + +subrule + : INT + ; + +INT : ('0'..'9')+ + ; + +WS : ' ' {$channel=99;} + ; diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewrite.tokens b/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewrite.tokens new file mode 100644 index 0000000..97819e8 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewrite.tokens @@ -0,0 +1,2 @@ +INT=4 +WS=5 diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewriteLexer.h b/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewriteLexer.h new file mode 100644 index 0000000..3d05c29 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewriteLexer.h @@ -0,0 +1,26 @@ +// $ANTLR 3.1b1 TreeRewrite.g 2007-11-04 03:34:43 + +#import +#import + + +#pragma mark Rule return scopes start +#pragma mark Rule return scopes end + +#pragma mark Tokens +#define TreeRewriteLexer_Tokens 6 +#define TreeRewriteLexer_INT 4 +#define TreeRewriteLexer_WS 5 +#define TreeRewriteLexer_EOF -1 + +@interface TreeRewriteLexer : ANTLRLexer { +} + + +- (void) mINT; +- (void) mWS; +- (void) mTokens; + + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewriteLexer.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewriteLexer.m new file mode 100644 index 0000000..3e54977 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewriteLexer.m @@ -0,0 +1,167 @@ +// $ANTLR 3.1b1 TreeRewrite.g 2007-11-04 03:34:43 + +#import "TreeRewriteLexer.h" + +/** As per Terence: No returns for lexer rules! +#pragma mark Rule return scopes start +#pragma mark Rule return scopes end +*/ +@implementation TreeRewriteLexer + +static NSArray *tokenNames; + + ++ (void) initialize +{ + // todo: get tokenNames into lexer - requires changes to CodeGenerator.java and ANTLRCore.sti + tokenNames = [[NSArray alloc] init]; +} + +- (id) initWithCharStream:(id)anInput +{ + if (nil!=(self = [super initWithCharStream:anInput])) { + } + return self; +} + +- (void) dealloc +{ + [super dealloc]; +} + ++ (NSString *) tokenNameForType:(int)aTokenType +{ + return nil; +} + ++ (NSArray *) tokenNames +{ + return tokenNames; +} + +- (NSString *) grammarFileName +{ + return @"TreeRewrite.g"; +} + + +- (void) mINT +{ + ANTLRLexerState *_state = [self state]; + @try { + int _type = TreeRewriteLexer_INT; + // TreeRewrite.g:15:5: ( ( '0' .. '9' )+ ) // ruleBlockSingleAlt + // TreeRewrite.g:15:7: ( '0' .. '9' )+ // alt + { + // TreeRewrite.g:15:7: ( '0' .. '9' )+ // positiveClosureBlock + int cnt1=0; + + do { + int alt1=2; + { + int LA1_0 = [input LA:1]; + if ( (LA1_0>='0' && LA1_0<='9') ) { + alt1 = 1; + } + + } + switch (alt1) { + case 1 : + // TreeRewrite.g:15:8: '0' .. '9' // alt + { + [self matchRangeFromChar:'0' to:'9']; + + } + break; + + default : + if ( cnt1 >= 1 ) goto loop1; + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:1]; + @throw eee; + } + cnt1++; + } while (YES); loop1: ; + + + } + + [_state setTokenType:_type]; + } + @finally { + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end INT + + +- (void) mWS +{ + ANTLRLexerState *_state = [self state]; + @try { + int _type = TreeRewriteLexer_WS; + // TreeRewrite.g:18:5: ( ' ' ) // ruleBlockSingleAlt + // TreeRewrite.g:18:9: ' ' // alt + { + [self matchChar:' ']; + + + [_state setChannel:99]; + + } + + [_state setTokenType:_type]; + } + @finally { + // rule cleanup + // token+rule list labels + + } + return; +} +// $ANTLR end WS + +- (void) mTokens +{ + // TreeRewrite.g:1:8: ( INT | WS ) //ruleblock + int alt2=2; + { + int LA2_0 = [input LA:1]; + if ( (LA2_0>='0' && LA2_0<='9') ) { + alt2 = 1; + } + else if ( LA2_0==' ' ) { + alt2 = 2; + } + else { + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:2 state:0 stream:input]; + @throw nvae; + } + } + switch (alt2) { + case 1 : + // TreeRewrite.g:1:10: INT // alt + { + [self mINT]; + + + + } + break; + case 2 : + // TreeRewrite.g:1:14: WS // alt + { + [self mWS]; + + + + } + break; + + } + +} + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewriteParser.h b/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewriteParser.h new file mode 100644 index 0000000..dc7283e --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewriteParser.h @@ -0,0 +1,48 @@ +// $ANTLR 3.1b1 TreeRewrite.g 2007-11-04 03:34:43 + +#import +#import + + + +#pragma mark Tokens +#define TreeRewriteParser_INT 4 +#define TreeRewriteParser_WS 5 +#define TreeRewriteParser_EOF -1 + +#pragma mark Dynamic Global Scopes + +#pragma mark Dynamic Rule Scopes + +#pragma mark Rule Return Scopes +@interface TreeRewriteParser_rule_return : ANTLRParserRuleReturnScope { + id tree; +} +- (id) tree; +- (void) setTree:(id)aTree; +@end +@interface TreeRewriteParser_subrule_return : ANTLRParserRuleReturnScope { + id tree; +} +- (id) tree; +- (void) setTree:(id)aTree; +@end + + + +@interface TreeRewriteParser : ANTLRParser { + + + id treeAdaptor; + + } + + +- (TreeRewriteParser_rule_return *) rule; +- (TreeRewriteParser_subrule_return *) subrule; + + +- (id) treeAdaptor; +- (void) setTreeAdaptor:(id)theTreeAdaptor; + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewriteParser.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewriteParser.m new file mode 100644 index 0000000..322e9f0 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewriteParser.m @@ -0,0 +1,249 @@ +// $ANTLR 3.1b1 TreeRewrite.g 2007-11-04 03:34:43 + +#import "TreeRewriteParser.h" + +#import + + + +#pragma mark Bitsets +const static unsigned long long FOLLOW_TreeRewriteParser_INT_in_rule26_data[] = {0x0000000000000010LL}; +static ANTLRBitSet *FOLLOW_TreeRewriteParser_INT_in_rule26; +const static unsigned long long FOLLOW_subrule_in_rule28_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_subrule_in_rule28; +const static unsigned long long FOLLOW_TreeRewriteParser_INT_in_subrule53_data[] = {0x0000000000000002LL}; +static ANTLRBitSet *FOLLOW_TreeRewriteParser_INT_in_subrule53; + + +#pragma mark Dynamic Global Scopes + +#pragma mark Dynamic Rule Scopes + +#pragma mark Rule return scopes start +@implementation TreeRewriteParser_rule_return +- (id) tree +{ + return tree; +} +- (void) setTree:(id)aTree +{ + if (tree != aTree) { + [aTree retain]; + [tree release]; + tree = aTree; + } +} + +- (void) dealloc +{ + [self setTree:nil]; + [super dealloc]; +} +@end +@implementation TreeRewriteParser_subrule_return +- (id) tree +{ + return tree; +} +- (void) setTree:(id)aTree +{ + if (tree != aTree) { + [aTree retain]; + [tree release]; + tree = aTree; + } +} + +- (void) dealloc +{ + [self setTree:nil]; + [super dealloc]; +} +@end + + +@implementation TreeRewriteParser + +static NSArray *tokenNames; + ++ (void) initialize +{ + FOLLOW_TreeRewriteParser_INT_in_rule26 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_TreeRewriteParser_INT_in_rule26_data count:1]; + FOLLOW_subrule_in_rule28 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_subrule_in_rule28_data count:1]; + FOLLOW_TreeRewriteParser_INT_in_subrule53 = [[ANTLRBitSet alloc] initWithBits:FOLLOW_TreeRewriteParser_INT_in_subrule53_data count:1]; + + tokenNames = [[NSArray alloc] initWithObjects:@"", @"", @"", @"", + @"INT", @"WS", nil]; +} + +- (id) initWithTokenStream:(id)aStream +{ + if ((self = [super initWithTokenStream:aStream])) { + + + + [self setTreeAdaptor:[[[ANTLRCommonTreeAdaptor alloc] init] autorelease]]; + } + return self; +} + +- (void) dealloc +{ + + [self setTreeAdaptor:nil]; + + [super dealloc]; +} + +- (NSString *) grammarFileName +{ + return @"TreeRewrite.g"; +} + + +// $ANTLR start rule +// TreeRewrite.g:8:1: rule : INT subrule -> ^( subrule INT ) ; +- (TreeRewriteParser_rule_return *) rule +{ + ANTLRBaseRecognizerState *_state = [self state]; + TreeRewriteParser_rule_return * _retval = [[[TreeRewriteParser_rule_return alloc] init] autorelease]; + [_retval setStart:[input LT:1]]; + + id root_0 = nil; + + id _INT1 = nil; + TreeRewriteParser_subrule_return * _subrule2 = nil; + + + id _INT1_tree = nil; + ANTLRRewriteRuleTokenStream *_stream_TreeRewriteParser_INT=[[ANTLRRewriteRuleTokenStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token TreeRewriteParser_INT"]; + ANTLRRewriteRuleSubtreeStream *_stream_subrule=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"rule subrule"]; + + @try { + // TreeRewrite.g:8:5: ( INT subrule -> ^( subrule INT ) ) // ruleBlockSingleAlt + // TreeRewrite.g:8:7: INT subrule // alt + { + _INT1=(id )[input LT:1]; + [self match:input tokenType:TreeRewriteParser_INT follow:FOLLOW_TreeRewriteParser_INT_in_rule26]; + [_stream_TreeRewriteParser_INT addElement:_INT1]; + + [[_state following] addObject:FOLLOW_subrule_in_rule28]; + _subrule2 = [self subrule]; + [[_state following] removeLastObject]; + + + [_stream_subrule addElement:[_subrule2 tree]]; + + // AST REWRITE + // elements: TreeRewriteParser_INT, subrule + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + int i_0 = 0; + root_0 = (id)[treeAdaptor newEmptyTree]; + [_retval setTree:root_0]; + ANTLRRewriteRuleSubtreeStream *_stream_retval=[[ANTLRRewriteRuleSubtreeStream alloc] initWithTreeAdaptor:treeAdaptor description:@"token retval" element:_retval!=nil?[_retval tree]:nil]; + + // 8:19: -> ^( subrule INT ) + { + // TreeRewrite.g:8:22: ^( subrule INT ) + { + id root_1 = (id)[treeAdaptor newEmptyTree]; + root_1 = (id)[treeAdaptor makeNode:(id)[_stream_subrule next] parentOf:root_1]; + + [treeAdaptor addChild:[_stream_TreeRewriteParser_INT next] toTree:root_1]; + + + [treeAdaptor addChild:root_1 toTree:root_0]; + [root_1 release]; + } + + } + + [_stream_retval release]; + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + [_retval setStop:[input LT:-1]]; + + [_stream_TreeRewriteParser_INT release]; + [_stream_subrule release]; + [_retval setTree:(id)[treeAdaptor postProcessTree:root_0]]; + [treeAdaptor setBoundariesForTree:[_retval tree] fromToken:[_retval start] toToken:[_retval stop]]; + [root_0 release]; + } + return _retval; +} +// $ANTLR end rule + +// $ANTLR start subrule +// TreeRewrite.g:11:1: subrule : INT ; +- (TreeRewriteParser_subrule_return *) subrule +{ + ANTLRBaseRecognizerState *_state = [self state]; + TreeRewriteParser_subrule_return * _retval = [[[TreeRewriteParser_subrule_return alloc] init] autorelease]; + [_retval setStart:[input LT:1]]; + + id root_0 = nil; + + id _INT3 = nil; + + id _INT3_tree = nil; + + @try { + // TreeRewrite.g:12:5: ( INT ) // ruleBlockSingleAlt + // TreeRewrite.g:12:9: INT // alt + { + root_0 = (id)[treeAdaptor newEmptyTree]; + + _INT3=(id )[input LT:1]; + [self match:input tokenType:TreeRewriteParser_INT follow:FOLLOW_TreeRewriteParser_INT_in_subrule53]; + _INT3_tree = (id)[treeAdaptor newTreeWithToken:_INT3]; + [treeAdaptor addChild:_INT3_tree toTree:root_0]; + [_INT3_tree release]; + + + } + + } + @catch (ANTLRRecognitionException *re) { + [self reportError:re]; + [self recover:input exception:re]; + } + @finally { + // token+rule list labels + [_retval setStop:[input LT:-1]]; + + [_retval setTree:(id)[treeAdaptor postProcessTree:root_0]]; + [treeAdaptor setBoundariesForTree:[_retval tree] fromToken:[_retval start] toToken:[_retval stop]]; + [root_0 release]; + } + return _retval; +} +// $ANTLR end subrule + + +- (id) treeAdaptor +{ + return treeAdaptor; +} + +- (void) setTreeAdaptor:(id)aTreeAdaptor +{ + if (aTreeAdaptor != treeAdaptor) { + [aTreeAdaptor retain]; + [treeAdaptor release]; + treeAdaptor = aTreeAdaptor; + } +} + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewrite__.g b/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewrite__.g new file mode 100644 index 0000000..5a72547 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/TreeRewrite__.g @@ -0,0 +1,13 @@ +lexer grammar TreeRewrite; +options { + language=ObjC; + +} + +// $ANTLR src "TreeRewrite.g" 15 +INT : ('0'..'9')+ + ; + +// $ANTLR src "TreeRewrite.g" 18 +WS : ' ' {$channel=99;} + ; diff --git a/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/main.m b/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/main.m new file mode 100644 index 0000000..9924e2c --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/examples/treerewrite/main.m @@ -0,0 +1,38 @@ +#import +#import +#import "TreeRewriteLexer.h" +#import "TreeRewriteParser.h" +#import "stdio.h" +#include + +int main(int argc, const char * argv[]) { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + ANTLRStringStream *stream = [[ANTLRStringStream alloc] initWithStringNoCopy:@"23 42"]; + TreeRewriteLexer *lexer = [[TreeRewriteLexer alloc] initWithCharStream:stream]; + +// id currentToken; +// while ((currentToken = [lexer nextToken]) && [currentToken type] != ANTLRTokenTypeEOF) { +// NSLog(@"%@", currentToken); +// } + + ANTLRCommonTokenStream *tokenStream = [[ANTLRCommonTokenStream alloc] initWithTokenSource:lexer]; + TreeRewriteParser *parser = [[TreeRewriteParser alloc] initWithTokenStream:tokenStream]; + ANTLRCommonTree *rule_tree = [[parser rule] tree]; + NSLog(@"tree: %@", [rule_tree treeDescription]); +// ANTLRCommonTreeNodeStream *treeStream = [[ANTLRCommonTreeNodeStream alloc] initWithTree:program_tree]; +// SimpleCTP *walker = [[SimpleCTP alloc] initWithTreeNodeStream:treeStream]; +// [walker program]; + + [lexer release]; + [stream release]; + [tokenStream release]; + [parser release]; +// [treeStream release]; +// [walker release]; + + [pool release]; + // sleep for objectalloc + while(1) sleep(60); + return 0; +} \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Framework/tests/TestBitSet.h b/antlr-3.1.3/runtime/ObjC/Framework/tests/TestBitSet.h new file mode 100644 index 0000000..15ee0af --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/tests/TestBitSet.h @@ -0,0 +1,36 @@ +// [The "BSD licence"] +// Copyright (c) 2006 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import + + +@interface TestBitSet : SenTestCase { + +} + + + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/tests/TestBitSet.m b/antlr-3.1.3/runtime/ObjC/Framework/tests/TestBitSet.m new file mode 100644 index 0000000..d45b0c0 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/tests/TestBitSet.m @@ -0,0 +1,53 @@ +// [The "BSD licence"] +// Copyright (c) 2006-2007 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#import "TestBitSet.h" +#import "ANTLRBitSet.h" +#import +#import + +@implementation TestBitSet + +- (void) testBitSetCreationFromLongs +{ + static const unsigned long long bitData[] = {3LL, 1LL}; + ANTLRBitSet *bitSet = [[ANTLRBitSet alloc] initWithBits:bitData count:2]; + CFMutableBitVectorRef bitVector = [bitSet _bitVector]; + NSLog(@"%@", [bitSet toString]); + NSLog(@"getcount %d", CFBitVectorGetCount(bitVector)); + + CFIndex actual = CFBitVectorGetCountOfBit(bitVector,CFRangeMake(0,CFBitVectorGetCount(bitVector)),1); + CFIndex expected = 3; + + STAssertEquals(actual, + expected, + @"There should be three bits set in bitvector. But I have %d", + CFBitVectorGetCountOfBit(bitVector,CFRangeMake(0,CFBitVectorGetCount(bitVector)),1) + ); +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/tests/TestStringStream.h b/antlr-3.1.3/runtime/ObjC/Framework/tests/TestStringStream.h new file mode 100644 index 0000000..6757327 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/tests/TestStringStream.h @@ -0,0 +1,34 @@ +// [The "BSD licence"] +// Copyright (c) 2006 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import + + +@interface TestStringStream : SenTestCase { + +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Framework/tests/TestStringStream.m b/antlr-3.1.3/runtime/ObjC/Framework/tests/TestStringStream.m new file mode 100644 index 0000000..25e937c --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Framework/tests/TestStringStream.m @@ -0,0 +1,42 @@ +// [The "BSD licence"] +// Copyright (c) 2006 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "TestStringStream.h" +#import "ANTLRStringStream.h" + +@implementation TestStringStream + +- (void) testStringStreamCreation +{ + NSString *input = @"This is a sample input string."; + ANTLRStringStream *stringStream = [[ANTLRStringStream alloc] initWithStringNoCopy:input]; + + NSString *substr = [stringStream substringWithRange:NSMakeRange(0,10)]; + NSLog(@"the first 10 chars are: %@", substr); + STAssertTrue([@"This is a " isEqualToString:substr], @"The substrings are not equal. Got: %@", substr); +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/ANTLRCompilerSpecification.h b/antlr-3.1.3/runtime/ObjC/Xcode plugin/ANTLRCompilerSpecification.h new file mode 100644 index 0000000..36e22d0 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/ANTLRCompilerSpecification.h @@ -0,0 +1,49 @@ +// [The "BSD licence"] +// Copyright (c) 2006 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "Specifications.h" +#import "BuildSystemInterfaces.h" + +@interface ANTLRCompilerSpecification : XCCompilerSpecification { + + NSString *grammarName; + NSString *grammarType; + BOOL isCombinedGrammar; + NSString *importedVocabName; + +} + +- (NSArray *)computeDependenciesForFilePath:(NSString *)inputPath ofType:(PBXFileType *)type outputDirectory:(NSString *)output inTargetBuildContext:(PBXTargetBuildContext *)context; + +// delegate methods for GrammarFilterLexer grammar inspector + +- (void) setGrammarName:(NSString *)theGrammarName; +- (void) setGrammarType:(NSString *)theGrammarType; +- (void) setIsCombinedGrammar:(BOOL)combinedGrammar; +- (void) setDependsOnVocab:(NSString *)theVocabName; + +@end + diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/ANTLRCompilerSpecification.m b/antlr-3.1.3/runtime/ObjC/Xcode plugin/ANTLRCompilerSpecification.m new file mode 100644 index 0000000..0d35c67 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/ANTLRCompilerSpecification.m @@ -0,0 +1,195 @@ +// [The "BSD licence"] +// Copyright (c) 2006 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRCompilerSpecification.h" +#import "DependencyGraph.h" +#import "BuildSystemInterfaces.h" +#import "GrammarFilterLexer.h" +#import + +@implementation ANTLRCompilerSpecification + +- (NSArray *)computeDependenciesForFilePath:(NSString *)inputPath ofType:(PBXFileType *)type outputDirectory:(NSString *)output inTargetBuildContext:(PBXTargetBuildContext *)context +{ + NSMutableArray *result = [NSMutableArray arrayWithCapacity:6]; + [self setGrammarName:nil]; + [self setGrammarType:nil]; + [self setDependsOnVocab:nil]; + [self setIsCombinedGrammar:NO]; + + // expand the input file + inputPath = [context expandedValueForString:inputPath]; + XCDependencyNode *inputNode = [context dependencyNodeForName:inputPath createIfNeeded:YES]; + [inputNode setScansFileContentsForIncludes:YES]; + //[context writeToGraphVizFileAtPath:@"/tmp/antlr_xcode_before.dot"]; + + // create the lexer to check dependencies and grammar type + NSError *error; + NSString *grammarContent = [NSString stringWithContentsOfFile:inputPath encoding:NSASCIIStringEncoding error:&error]; + if (grammarContent == nil) { NSLog(@"couldn't read grammar: %@", error); } + ANTLRStringStream *inputStream = [[ANTLRStringStream alloc] initWithString:grammarContent]; + GrammarFilterLexer *grammarLexer = [[GrammarFilterLexer alloc] initWithCharStream:inputStream]; + // make it report its findings to us + [grammarLexer setDelegate:self]; + ANTLRToken *currentToken; + while (currentToken = [grammarLexer nextToken]) ; // chew through the entire file to look for aliens + [grammarLexer release]; + [inputStream release]; + + // determine the output file paths + // this is a bit tricky, because we actually have more than one file, and their names depend on the contents of the grammar... + // this way it only depends on the type of grammar: + // `grammar' => `grammar'Parser.(m|h) + // `combined' => `grammar'Parser.(m|h) and `grammar'Lexer.(m|h) output files + // `lexer' => `grammar'Lexer.(m|h) + // `tree' => `grammar'TreeParser.(m|h) + // DONE: actually look inside the file to get the actual grammar name & type -> use ANTLR filtering lexer for this + // TODO: at least support java grammars, too, not only ObjC + // DONE: maybe move the whole shebang to $(DERIVED_FILE_DIR)? + // DONE: also create nodes for .tokens files if generated + // DONE: *must* analyze all grammars for dependencies (tokenVocab!) -> solved by creating dep nodes (includes) for .tokens files + // TODO: figure out how to support "clean" build phase + NSString *grammarNameFromFileName = [[inputPath lastPathComponent] stringByDeletingPathExtension]; // somepath/grammar.g -> grammar + NSString *outputDirectory = [context expandedValueForString:@"$(ANTLR_FORCE_OUT_DIR)"]; + [context createDirectoryAtPath:outputDirectory]; + + NSMutableArray *outputFileSuffixes = [[NSMutableArray alloc] initWithCapacity:2]; + // figure out which grammar types will be generated and put those in the queue + if ([grammarType isEqualToString:@"parser"]) { + [outputFileSuffixes addObject:@"Parser"]; + if (isCombinedGrammar) { + [outputFileSuffixes addObject:@"Lexer"]; + [self setGrammarType:@"combined"]; + } + } else if ([grammarType isEqualToString:@"lexer"]) { + [outputFileSuffixes addObject:@"Lexer"]; + } else if ([grammarType isEqualToString:@"tree"]) { + [outputFileSuffixes addObject:@"TreeParser"]; + } + + // if this grammar imports a token vocab, get the node for that and add it as an include node to the input file + XCDependencyNode *importedTokensNode = nil; + if (importedVocabName) { + NSString *tokensFile = [outputDirectory stringByAppendingPathComponent:[importedVocabName stringByAppendingPathExtension:@"tokens"]]; + importedTokensNode = [context dependencyNodeForName:[context expandedValueForString:tokensFile] createIfNeeded:YES]; + [inputNode addIncludedNode:importedTokensNode]; // is this the correct order? + } + + //NSLog(@"found grammar %@ in file %@: type:%@ imports tokenVocab: %@", grammarName, inputPath, grammarType, importedVocabName); + + // create the command to execute ANTLR and set the necessary arguments + XCDependencyCommand *depCmd = [context + createCommandWithRuleInfo:[NSArray arrayWithObjects:@"ANTLR", [context naturalPathForPath:inputPath], nil] + commandPath:[[context expandedValueForString:[self path]] stringByStandardizingPath] + arguments:nil + forNode:nil]; // the output nodes are added below! + [depCmd setToolSpecification:self]; + [depCmd addArgument:@"-cp"]; + if ([[context expandedValueForString:@"$(ANTLR_EXTRA_JAVA_ARGS)"] isEqualToString:@""]) { + [context addDependencyAnalysisErrorMessageFormat:@"You must supply the Java classpath to ANTLR (both v2 and v3) & StringTemplate! (ANTLR_EXTRA_JAVA_ARGS build setting)"]; + return nil; + } + [depCmd addArgument:[context expandedValueForString:@"$(ANTLR_EXTRA_JAVA_ARGS)"]]; + [depCmd addArgument:@"org.antlr.Tool"]; + [depCmd addArgument:@"-message-format"]; + [depCmd addArgument:@"gnu"]; + [depCmd addArgumentsFromArray:[self commandLineForAutogeneratedOptionsInTargetBuildContext:context]]; +/* if ([context expandedValueIsNonEmptyForString:@"$(ANTLR_LIB_DIR)"]) { + [depCmd addArgument:@"-l"]; + [depCmd addArgument:[context expandedValueForString:@"$(ANTLR_LIB_DIR)"]]; + } +*/ + [depCmd addArgument:inputPath]; + + + NSEnumerator *suffixEnumerator = [outputFileSuffixes objectEnumerator]; + NSString *suffix = nil; + while (suffix = (NSString *)[suffixEnumerator nextObject]) { + // output file names + NSString *baseName = [outputDirectory stringByAppendingPathComponent:[grammarNameFromFileName stringByAppendingString:suffix]]; + NSString *sourceFile = [context expandedValueForString:[baseName stringByAppendingPathExtension:@"m"]]; + NSString *headerFile = [context expandedValueForString:[baseName stringByAppendingPathExtension:@"h"]]; + NSString *tokensFile = [context expandedValueForString:[outputDirectory stringByAppendingPathComponent:[grammarNameFromFileName stringByAppendingPathExtension:@"tokens"]]]; + XCDependencyNode *sourceFileNode = [context dependencyNodeForName:sourceFile createIfNeeded:YES]; + XCDependencyNode *headerFileNode = [context dependencyNodeForName:headerFile createIfNeeded:YES]; + XCDependencyNode *tokensFileNode = [context dependencyNodeForName:tokensFile createIfNeeded:YES]; + + // create dependency graph egdes + [depCmd addOutputNode:sourceFileNode]; + [depCmd addOutputNode:headerFileNode]; + [depCmd addOutputNode:tokensFileNode]; + [sourceFileNode addDependedNode:inputNode]; + [headerFileNode addDependedNode:inputNode]; + [tokensFileNode addDependedNode:inputNode]; + + // setup mapping grammar file <-> generated code + [context setCompiledFilePath:sourceFile forSourceFilePath:inputPath]; + [context setCompiledFilePath:headerFile forSourceFilePath:inputPath]; + [context setCompiledFilePath:tokensFile forSourceFilePath:inputPath]; + + // tell Xcode which files our compiler will create, so Xcode can send that output on to other commands further down the chain + [result addObject:sourceFile]; + [result addObject:headerFile]; + [result addObject:tokensFile]; + } + [outputFileSuffixes release]; + + //[context writeToGraphVizFileAtPath:@"/tmp/antlr_xcode.dot"]; + return result; +} + +// delegate methods of GrammarFilterLexer + +- (void) setGrammarName:(NSString *)theGrammarName +{ + if (grammarName != theGrammarName) { + [grammarName release]; + grammarName = [theGrammarName retain]; + } +} + +- (void) setGrammarType:(NSString *)theGrammarType +{ + if (grammarType != theGrammarType) { + [grammarType release]; + grammarType = [theGrammarType retain]; + } +} + +- (void) setIsCombinedGrammar:(BOOL)combinedGrammar +{ + isCombinedGrammar = combinedGrammar; +} + +- (void) setDependsOnVocab:(NSString *)theVocabName +{ + if (importedVocabName != theVocabName) { + [importedVocabName release]; + importedVocabName = [theVocabName retain]; + } +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/ANTLRXCPlugin.h b/antlr-3.1.3/runtime/ObjC/Xcode plugin/ANTLRXCPlugin.h new file mode 100644 index 0000000..9047f0b --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/ANTLRXCPlugin.h @@ -0,0 +1,34 @@ +// [The "BSD licence"] +// Copyright (c) 2006 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import + + +@interface ANTLRXCPlugin : NSObject { + +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/ANTLRXCPlugin.m b/antlr-3.1.3/runtime/ObjC/Xcode plugin/ANTLRXCPlugin.m new file mode 100644 index 0000000..2df56b6 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/ANTLRXCPlugin.m @@ -0,0 +1,45 @@ +// [The "BSD licence"] +// Copyright (c) 2006 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "ANTLRXCPlugin.h" + + +@implementation ANTLRXCPlugin + +// load the ANTLR.framework. this saves me from fiddling with install_name_tool and script build phases, ain't I lazy? ++ (void) load +{ + if(!NSClassFromString(@"ANTLRToken")) + { + NSString *antlrFrameworkPath = [[[NSBundle bundleForClass:[self class]] privateFrameworksPath] stringByAppendingPathComponent:@"/ANTLR.framework"]; + NSAssert(antlrFrameworkPath != nil, @"antlr framework path should not be nil!"); + NSBundle *framework=[NSBundle bundleWithPath:antlrFrameworkPath]; + NSAssert(framework != nil, @"couldn't find framework!"); + [framework load]; + } +} + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/BuildSystemInterfaces.h b/antlr-3.1.3/runtime/ObjC/Xcode plugin/BuildSystemInterfaces.h new file mode 100644 index 0000000..1b81439 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/BuildSystemInterfaces.h @@ -0,0 +1,280 @@ +// [The "BSD licence"] +// Copyright (c) 2006 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +@class XCBuildOperation, XCPropertyExpansionContext; + +@interface PBXBuildContext : NSObject +{ + XCBuildOperation *_currentBuildOperation; + NSString *_baseDirectoryPath; + XCPropertyExpansionContext *_propertyExpansionContext; +} + +- (id)init; +- (void)dealloc; +- (id)currentBuildOperation; +- (void)setCurrentBuildOperation:(id)fp8; +- (id)baseDirectoryPath; +- (void)setBaseDirectoryPath:(id)fp8; +- (void)setStringValue:(id)fp8 forDynamicSetting:(id)fp12; +- (void)removeDynamicSetting:(id)fp8; +- (void)prependStringOrStringListValue:(id)fp8 toDynamicSetting:(id)fp12; +- (void)appendStringOrStringListValue:(id)fp8 toDynamicSetting:(id)fp12; +- (void)removeStringOrStringListValue:(id)fp8 fromDynamicSetting:(id)fp12; +- (void)removeAllDynamicSettings; +- (void)pushToolParameterTierBuildSettingsDictionary:(id)fp8; +- (void)popToolParameterTierBuildSettingsDictionary; +- (void)setToolParameterTierBuildSettingsDictionaries:(id)fp8; +- (void)setHighestTierBuildSettingsDictionaries:(id)fp8; +- (void)pushCustomTierBuildSettingsDictionary:(id)fp8; +- (void)popCustomTierBuildSettingsDictionary; +- (void)setCustomTierBuildSettingsDictionaries:(id)fp8; +- (void)pushDefaultsTierBuildSettingsDictionary:(id)fp8; +- (void)popDefaultsTierBuildSettingsDictionary; +- (void)setDefaultsTierBuildSettingsDictionaries:(id)fp8; +- (void)setLowestTierBuildSettingsDictionaries:(id)fp8; +- (id)propertyExpansionContext; +- (void)setPropertyExpansionContext:(id)fp8; +- (id)expandedValueForString:(id)fp8; +- (BOOL)expandedValueIsNonEmptyForString:(id)fp8; +- (BOOL)expandedBooleanValueForString:(id)fp8; +- (id)arrayByExpandingEntriesInArray:(id)fp8; +- (id)dictionaryByExpandingEntriesInDictionary:(id)fp8; +- (id)absoluteExpandedPathForString:(id)fp8; + +@end + +@class NSArray, NSCountedSet, NSDictionary, NSMutableArray, NSMutableDictionary, NSMutableSet, NSRecursiveLock, NSString, NSThread, PBXTarget, XCBuildInfoManager, XCDependencyInfoCache, XCHierarchicalOutputLog, XCTargetDGSnapshot; + +@interface PBXTargetBuildContext : PBXBuildContext +{ + PBXTarget *_target; + NSString *_presumedBuildAction; + NSString *_presumedConfigName; + NSMutableArray *_depGraphEvents; + NSRecursiveLock *_depGraphLock; + unsigned int _depGraphLockLevel; + NSThread *_depGraphAccessorThread; + BOOL _needsDependencyGraphCreation; + BOOL _shouldCancelDependencyGraphCreation; + BOOL _isCreatingDependencies; + BOOL _hasSetUpBuildSettings; + NSString *_productDirectoryPath; + NSString *_buildDirectoryPath; + NSMutableDictionary *_cachedHeadermaps; + NSMutableDictionary *_headerSearchContexts; + NSMutableDictionary *_indexingInfoDicts; + NSMutableDictionary *_effectiveSearchPaths; + NSMutableArray *_searchPathsForRez; + NSMutableArray *_nodes; + NSMutableArray *_commands; + NSMutableDictionary *_nodesByName; + NSMutableArray *_depAnalysisMessageStrings; + NSMutableArray *_buildSetupMessageStrings; + unsigned int _numDepAnalysisErrors; + unsigned int _numDepAnalysisWarnings; + NSMutableDictionary *_auxiliaryFilesData; + NSMutableDictionary *_auxiliaryFilesPermissions; + NSMutableDictionary *_auxiliarySymlinksContents; + NSMutableDictionary *_filePathsToBuildFileRefs; + NSMutableDictionary *_sourcesToObjFiles; + NSMutableDictionary *_objFilesToSources; + NSCountedSet *_countedBuildFileBaseNames; + NSMutableDictionary *_constantBuildToolFlags; + NSMutableDictionary *_filePathLists; + NSArray *_pathPrefixesExcludedFromHeaderDependencies; + NSMutableSet *_activeToolSpecs; + unsigned int _currentPhaseNumber; + BOOL _autoIncrementPhaseNumber; + NSMutableDictionary *_extraLinkerParameters; + XCHierarchicalOutputLog *_debugOutputLog; + unsigned int _debugOutputEnableCount; + BOOL _enableDistBuilds; + NSArray *_distBuildsServerList; + NSDictionary *_distBuildsEnvEntries; + unsigned int _distBuildsParallelTasks; + NSMutableArray *_linkerBuildMessages; + NSMutableArray *_otherBuildMessages; + XCBuildInfoManager *_buildInfoManager; + XCDependencyInfoCache *_dependencyInfoCache; + NSMutableArray *_productNodes; + XCTargetDGSnapshot *_targetSnapshotForDG; + NSMutableArray *_nodesThatNeedToSetBuildInfo; + NSMutableSet *_derivedFileCaches; +} + ++ (void)initialize; ++ (id)identifierForHeadermapWithBreadthFirstRecursiveContentsAtPath:(id)fp8; ++ (id)identifierForHeadermapWithGeneratedFiles; ++ (id)identifierForHeadermapWithProductHeaders; ++ (id)identifierForHeadermapWithAllProductHeadersInProject; ++ (id)identifierForHeadermapWithAllHeadersInProject; ++ (id)identifierForTraditionalHeadermap; ++ (id)headerFileExtensionsForHeadermaps; +- (id)initWithTarget:(id)fp8; +- (void)dealloc; +- (void)finalize; +- (id)target; +- (void)targetWillDealloc:(id)fp8; +- (id)presumedBuildAction; +- (void)setPresumedBuildAction:(id)fp8; +- (id)presumedBuildConfigurationName; +- (void)setPresumedBuildConfigurationName:(id)fp8; +- (id)targetSnapshot; +- (void)_projectWillClose:(id)fp8; +- (void)_activeBuildConfigurationNameDidChange:(id)fp8; +- (void)disableCacheInvalidation; +- (void)enableCacheInvalidation; +- (BOOL)shouldUseDistributedBuilds; +- (id)baseDirectoryPath; +- (id)absolutePathForPath:(id)fp8; +- (id)naturalPathForPath:(id)fp8; +- (BOOL)lockDependencyGraphBeforeDate:(id)fp8; +- (void)lockDependencyGraph; +- (void)unlockDependencyGraph; +- (BOOL)doesCurrentThreadHoldDependencyGraphLock; +- (void)createDependencyGraphWithTargetDGSnapshot:(id)fp8; +- (void)removeSearchPathArgumentsFromArrayOfCommandLineArguments:(id)fp8; +- (id)_searchPathsForCurrentStateAndOtherFlagsBuildSettingsName:(id)fp8 builtinSystemHeaderSearchPaths:(id)fp12 builtinFrameworkSearchPaths:(id)fp16; +- (id)headerFileSearchContextForSourceFilesUsingCompiler:(id)fp8 languageDialect:(id)fp12; +- (id)preprocessingInfoDictionaries; +- (id)preprocessingInfoForIndexingSourceFilesWithCompiler:(id)fp8 languageDialect:(id)fp12; +- (id)dependencyNodeForName:(id)fp8 createIfNeeded:(BOOL)fp12; +- (unsigned int)currentPhaseNumber; +- (void)incrementCurrentPhaseNumber; +- (BOOL)autoIncrementsPhaseNumber; +- (void)setAutoIncrementsPhaseNumber:(BOOL)fp8; +- (id)compilerRequestedLinkerParameters; +- (void)addCompilerRequestedLinkerParameters:(id)fp8; +- (void)removeAllCompilerRequestedLinkerParameters; +- (id)dependencyNodeForName:(id)fp8; +- (unsigned int)numberOfDependencyNodes; +- (id)dependencyNodeWithNumber:(unsigned int)fp8; +- (void)_addMappingFromPath:(id)fp8 toNode:(id)fp12; +- (id)createInvocationOfToolWithIdentifier:(id)fp8 parameterDictionary:(id)fp12; +- (id)createInvocationOfToolWithIdentifier:(id)fp8 parameters:(id)fp12; +- (void)registerDependencyCommand:(id)fp8; +- (void)unregisterDependencyCommand:(id)fp8; +- (id)createCommandWithRuleInfo:(id)fp8 commandPath:(id)fp12 arguments:(id)fp16 forNode:(id)fp20; +- (id)createCommandWithPath:(id)fp8 ruleInfo:(id)fp12; +- (unsigned int)numberOfCommands; +- (id)commandWithNumber:(unsigned int)fp8; +- (BOOL)shouldCancelDependencyGraphCreation; +- (void)cancelDependencyGraphCreation; +- (id)dependencyAnalysisMessageStrings; +- (void)removeAllBuildSetupMessageStrings; +- (unsigned int)numberOfDependencyAnalysisErrors; +- (unsigned int)numberOfDependencyAnalysisWarnings; +- (void)_addDependencyAnalysisMessageString:(id)fp8; +- (void)addDependencyAnalysisErrorMessageFormat:(id)fp8; +- (void)addDependencyAnalysisWarningMessageFormat:(id)fp8; +- (void)defineFileContents:(id)fp8 forAuxiliaryFileAtPath:(id)fp12 withPosixPermissions:(unsigned long)fp16; +- (id)fileContentsForAuxiliaryFileAtPath:(id)fp8; +- (void)defineFileContents:(id)fp8 forAuxiliaryFileAtPath:(id)fp12; +- (id)symlinkContentsForAuxiliarySymlinkAtPath:(id)fp8; +- (void)defineSymlinkContents:(id)fp8 forAuxiliarySymlinkAtPath:(id)fp12; +- (void)setCompiledFilePath:(id)fp8 forSourceFilePath:(id)fp12; +- (void)addActiveToolSpecification:(id)fp8; +- (void)setConstantFlags:(id)fp8 forBuildToolWithIdentifier:(id)fp12; +- (void)addPath:(id)fp8 toFilePathListWithIdentifier:(id)fp12; +- (id)filePathListWithIdentifier:(id)fp8; +- (id)buildFileRefForPath:(id)fp8; +- (id)compiledFilePathForSourceFilePath:(id)fp8; +- (id)sourceFilePathForCompiledFilePath:(id)fp8; +- (void)countBuildFileBaseName:(id)fp8; +- (unsigned int)countForBuildFileBaseName:(id)fp8; +- (id)constantFlagsForBuildToolWithIdentifier:(id)fp8; +- (id)preprocessedFilePathForSourceFilePath:(id)fp8; +- (id)disassembledFilePathForSourceFilePath:(id)fp8; +- (id)activeToolSpecifications; +- (void)pruneDerivedFileCaches; +- (void)addDerivedFileCache:(id)fp8; +- (id)headermapForIdentifier:(id)fp8; +- (void)setHeadermap:(id)fp8 forIdentifier:(id)fp12; +- (id)effectiveSearchPathsForSearchPath:(id)fp8; +- (id)_effectiveSearchPathsForSearchPathBuildSetting:(id)fp8; +- (id)effectiveHeaderSearchPaths; +- (id)effectiveUserHeaderSearchPaths; +- (id)effectiveFrameworkSearchPaths; +- (id)effectiveLibrarySearchPaths; +- (id)effectiveRezSearchPaths; +- (id)searchPathsForRez; +- (BOOL)isFileUpToDateAtPath:(id)fp8; +- (id)buildInfoManager; +- (id)buildInfoValueForKey:(id)fp8 ofEntityIdentifier:(id)fp12; +- (void)setBuildInfoValue:(id)fp8 forKey:(id)fp12 ofEntityIdentifier:(id)fp16; +- (void)removeAllBuildInfoForIdentifier:(id)fp8; +- (id)fileInfoValueForKey:(id)fp8 forFileAtPath:(id)fp12; +- (void)setFileInfoValue:(id)fp8 forKey:(id)fp12 forFileAtPath:(id)fp16; +- (void)clearCompiledFileInfoForFileAtPath:(id)fp8; +- (void)clearCompiledFileInfoForAllFiles; +- (BOOL)areFileInfoNotificationsEnabled; +- (void)disableFileInfoNotifications; +- (void)enableFileInfoNotifications; +- (id)dependencyInfoCacheFilename; +- (id)dependencyInfoCache; +- (id)readDependencyInfoCacheFromBuildDirectory:(id)fp8; +- (id)writeDependencyInfoCacheToBuildDirectory:(id)fp8; +- (id)buildMessagesForFileAtPath:(id)fp8; +- (void)addBuildMessage:(id)fp8 forFileAtPath:(id)fp12; +- (void)removeAllBuildMessagesForFileAtPath:(id)fp8; +- (id)linkerBuildMessages; +- (void)addLinkerBuildMessage:(id)fp8; +- (void)removeAllLinkerBuildMessages; +- (id)uncategorizedBuildMessages; +- (void)addUncategorizedBuildMessage:(id)fp8; +- (void)removeAllUncategorizedBuildMessages; +- (id)productDirectoryPath; +- (id)buildDirectoryPath; +- (id)createDirectoryAtPath:(id)fp8; +- (id)touchFileAtPath:(id)fp8; +- (id)copyFileAtPath:(id)fp8 toPath:(id)fp12; +- (id)dittoFileAtPath:(id)fp8 toPath:(id)fp12; +- (id)moveFileAtPath:(id)fp8 toPath:(id)fp12; +- (id)makeSymlinkToFileAtPath:(id)fp8 atPath:(id)fp12; +- (BOOL)shouldScanHeadersOfFileAtPath:(id)fp8; +- (id)importedFilesForPath:(id)fp8 ensureFilesExist:(BOOL)fp12; +- (id)importedFilesForPath:(id)fp8; +- (BOOL)writeAuxiliaryFilesForBuildOperation:(id)fp8; +- (id)productNodes; +- (void)addProductNode:(id)fp8; +- (void)resetStatesOfAllDependencyNodes; +- (void)analyzeDependenciesForNodes:(id)fp8; +- (void)analyzeDependenciesForFilePaths:(id)fp8; +- (void)analyzeAllProductDependencies; +- (void)checkWaitCountsOfAllDependencyNodes; +- (void)enqueueOutOfDateCommandsOntoWorkQueue:(id)fp8 startingAtNode:(id)fp12; +- (void)enqueueAllOutOfDateCommandsOntoWorkQueue:(id)fp8; +- (void)_addNodeThatNeedsToSetBuildInfo:(id)fp8; +- (void)_makeNodesSetBuildInfoIfNeeded; +- (BOOL)writeToGraphVizFileAtPath:(id)fp8; +- (void)startLoggingDebugOutputIfAppropriate; +- (void)finishLoggingDebugOutput; +- (id)debugOutputLog; +- (id)description; +- (id)nodesMatchingPattern:(id)fp8; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/DependencyGraph.h b/antlr-3.1.3/runtime/ObjC/Xcode plugin/DependencyGraph.h new file mode 100644 index 0000000..fa156d4 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/DependencyGraph.h @@ -0,0 +1,337 @@ +// [The "BSD licence"] +// Copyright (c) 2006 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import "BuildSystemInterfaces.h" + +typedef struct { + unsigned long long hi; + unsigned long long lo; +} CDAnonymousStruct1; + +@interface XCDependencyNode : NSObject +{ + unsigned int _nodeNumber; + NSString *_name; + NSString *_path; + PBXTargetBuildContext *_buildContext; + NSMutableArray *_producerCommands; + NSMutableArray *_includedNodes; + NSMutableArray *_consumerCommands; + NSMutableArray *_includingNodes; + struct { + unsigned int alwaysOutOfDate:1; + unsigned int dontCareIfExists:1; + unsigned int dontCareAboutTimestamp:1; + unsigned int shouldScanForIncludes:1; + unsigned int beingEnqueued:1; + unsigned int beingReset:1; + } _dnFlags; + NSData *_automaticFileContents; + id _fileInfoEntityIdent; + int _state; + int _time; + CDAnonymousStruct1 _signature; + int _highestInclState; + int _newestInclTime; + CDAnonymousStruct1 _combinedInclSignature; + unsigned int _traversalGenCount; + int _fileSize; +} + +- (id)initWithNodeNumber:(unsigned int)fp8 name:(id)fp12 path:(id)fp16; +- (id)initWithNodeNumber:(unsigned int)fp8 name:(id)fp12; +- (id)init; +- (void)dealloc; +- (void)detachFromOtherGraphObjects; +- (id)buildContext; +- (void)setBuildContext:(id)fp8; +- (unsigned int)nodeNumber; +- (id)name; +- (BOOL)isVirtual; +- (id)path; +- (id)paths; +- (id)dependencyInfoCacheEntry; +- (id)producerCommands; +- (id)includedNodes; +- (id)consumerCommands; +- (id)includingNodes; +- (id)producerCommand; +- (id)command; +- (id)automaticFileContents; +- (void)setAutomaticFileContents:(id)fp8; +- (void)setFileInfoEntityIdentifier:(id)fp8; +- (void)incrementWaitCount; +- (void)decrementWaitCount; +- (void)makeConsumerCommandsPerformSelector:(SEL)fp8 withObject:(id)fp12 recursionAvoidanceBitmap:(char *)fp16; +- (void)makeConsumerCommandsPerformSelector:(SEL)fp8 withObject:(id)fp12; +- (void)invalidateSignature; +- (void)invalidateCombinedIncludesSignature; +- (void)_addDependingNode:(id)fp8; +- (void)_addIncludingNode:(id)fp8; +- (void)_removeDependingNode:(id)fp8; +- (void)_removeIncludingNode:(id)fp8; +- (void)addDependedNode:(id)fp8; +- (void)addIncludedNode:(id)fp8; +- (void)removeAllIncludedNodes; +- (void)setScansFileContentsForIncludes:(BOOL)fp8; +- (void)_addProducerCommand:(id)fp8; +- (void)_addConsumerCommand:(id)fp8; +- (BOOL)isAlwaysOutOfDate; +- (void)setAlwaysOutOfDate:(BOOL)fp8; +- (BOOL)dontCareIfExists; +- (void)setDontCareIfExists:(BOOL)fp8; +- (BOOL)dontCareAboutTimestamp; +- (void)setDontCareAboutTimestamp:(BOOL)fp8; +- (BOOL)recordsUpdatedFileListInEnvironment; +- (void)setRecordsUpdatedFileListInEnvironment:(BOOL)fp8; +- (int)state; +- (int)highestStateOfIncludedNodes; +- (long)timestamp; +- (long)newestTimestampOfIncludedNodes; +- (long)fileSize; +- (CDAnonymousStruct1)signature; +- (CDAnonymousStruct1)combinedSignatureOfIncludedNodes; +- (void)setCommandInputSignature:(CDAnonymousStruct1)fp8 commandConfigurationSignature:(CDAnonymousStruct1)fp24; +- (void)statFileIfNeeded; +- (void)computeStateIfNeeded; +- (void)enqueueOutOfDateCommandsOntoWorkQueue:(id)fp8; +- (BOOL)isUpToDate; +- (BOOL)isUpToDateWithRespectToNode:(id)fp8; +- (void)resetState; +- (void)resetStateRecursively; +- (void)removePredictiveProcessingOutputRecursivelyBecauseOfChangedNode:(id)fp8; +- (void)fileMayHaveChanged; +- (void)touch; +- (void)untouch; +- (void)setFileInfo:(id)fp8 forKey:(id)fp12; +- (void)updateDiscoveredBuildInfo; +- (void)removeDiscoveredInfo; +- (id)stateDescription; +- (id)timeDescription; +- (id)signatureDescription; +- (id)shortNameForDebugging; +- (id)description; +- (id)nameForGraphViz; +- (void)writeDefinitionToGraphVizFile:(struct __sFILE *)fp8; +- (void)writeDependencyEdgesToGraphVizFile:(struct __sFILE *)fp8; +- (void)writeInclusionEdgesToGraphVizFile:(struct __sFILE *)fp8; + +@end + +@class XCWorkQueue; + +@protocol XCWorkQueueCommands +- (void)wasAddedToWorkQueue:(id)fp8; +- (void)willBeRemovedFromWorkQueue:(id)fp8; +- (id)workQueue; +- (BOOL)isReadyForProcessing; +- (unsigned int)phaseNumber; +- (id)ruleInfo; +- (void)willActivateInWorkQueue:(id)fp8; +- (void)didDeactivateInWorkQueue:(id)fp8 didCompleteSuccessfully:(BOOL)fp12; +- (unsigned int)waitCount; +- (void)incrementWaitCount; +- (void)decrementWaitCount; +- (void)incrementWaitCountsOfDependingNodes; +- (void)decrementWaitCountsOfDependingNodes; +- (id)createStartedCommandInvocationInSlot:(unsigned int)fp8 ofWorkQueueOperation:(id)fp12; +- (void)commandInvocationWillStart:(id)fp8; +- (void)commandInvocationDidEnd:(id)fp8 successfully:(BOOL)fp12; +- (unsigned int)workQueueCommandTag; +- (void)setWorkQueueCommandTag:(unsigned int)fp8; +- (id)predictiveProcessingCandidateFilePath; +- (id)predictiveProcessingValiditySignature; +- (id)subprocessCommandLineForProcessing; +- (id)descriptionForWorkQueueLog; +- (id)instantiatedCommandOutputParserWithDelegate:(id)fp8; +@end + +@interface XCWorkQueueCommand : NSObject +{ + XCWorkQueue *_workQueue; + unsigned int _workQueueCommandTag; + unsigned int _waitCount; +} + +- (id)init; +- (void)dealloc; +- (void)finalize; +- (id)workQueue; +- (void)wasAddedToWorkQueue:(id)fp8; +- (void)willBeRemovedFromWorkQueue:(id)fp8; +- (unsigned int)workQueueCommandTag; +- (void)setWorkQueueCommandTag:(unsigned int)fp8; +- (unsigned int)phaseNumber; +- (id)ruleInfo; +- (BOOL)isReadyForProcessing; +- (unsigned int)waitCount; +- (void)incrementWaitCount; +- (void)decrementWaitCount; +- (void)incrementWaitCountsOfDependingNodes; +- (void)decrementWaitCountsOfDependingNodes; +- (void)willActivateInWorkQueue:(id)fp8; +- (id)createStartedCommandInvocationInSlot:(unsigned int)fp8 ofWorkQueueOperation:(id)fp12; +- (id)predictiveProcessingCandidateFilePath; +- (id)predictiveProcessingValiditySignature; +- (void)commandInvocationWillStart:(id)fp8; +- (void)commandInvocationDidEnd:(id)fp8 successfully:(BOOL)fp12; +- (void)didDeactivateInWorkQueue:(id)fp8 didCompleteSuccessfully:(BOOL)fp12; +- (id)subprocessCommandLineForProcessing; +- (id)descriptionForWorkQueueLog; +- (id)instantiatedCommandOutputParserWithDelegate:(id)fp8; + +@end + +@class XCWorkQueueCommandInvocation, XCPropertyDictionary; +@interface XCDependencyCommand : XCWorkQueueCommand +{ + PBXTargetBuildContext *_buildContext; + unsigned int _commandNumber; + BOOL _waitCountBeingAdjusted; + BOOL _beingEnqueued; + BOOL _caresAboutIncludes; + BOOL _mightHavePredProcOutput; + NSMutableArray *_filePathsToRemove; + unsigned int _phaseNumber; + NSMutableArray *_inputNodes; + NSMutableArray *_outputNodes; + XCCommandLineToolSpecification *_toolSpecification; + NSArray *_ruleInfo; + NSString *_commandPath; + NSMutableArray *_arguments; + NSMutableDictionary *_environment; + NSString *_workingDirPath; + id _customToolInfoObject; + CDAnonymousStruct1 _inputSignature; + CDAnonymousStruct1 _configSignature; + int _state; + NSString *_whyState; + XCWorkQueueCommandInvocation *_currentInvocation; + NSMutableString *_commandLineDisplayString; + XCPropertyDictionary *_launchPropertyDict; +} + +- (id)initWithCommandNumber:(unsigned int)fp8 ruleInfo:(id)fp12 commandPath:(id)fp16 arguments:(id)fp20 environment:(id)fp24; +- (id)initWithCommandNumber:(unsigned int)fp8 ruleInfo:(id)fp12 commandPath:(id)fp16 arguments:(id)fp20; +- (id)initWithCommandNumber:(unsigned int)fp8 ruleInfo:(id)fp12 commandPath:(id)fp16; +- (id)init; +- (void)dealloc; +- (void)detachFromOtherGraphObjects; +- (id)buildContext; +- (void)setBuildContext:(id)fp8 commandNumber:(unsigned int)fp12; +- (id)name; +- (unsigned int)phaseNumber; +- (void)setPhaseNumber:(unsigned int)fp8; +- (void)invalidateInputSignature; +- (void)invalidateConfigurationSignature; +- (id)inputNodes; +- (void)addInputNode:(id)fp8; +- (id)outputNodes; +- (void)addOutputNode:(id)fp8; +- (void)_addDependingNode:(id)fp8; +- (id)toolSpecification; +- (void)setToolSpecification:(id)fp8; +- (unsigned int)commandNumber; +- (id)ruleInfo; +- (void)setRuleInfo:(id)fp8; +- (id)commandPath; +- (void)setCommandPath:(id)fp8; +- (id)arguments; +- (void)addArgument:(id)fp8; +- (void)addArguments:(id)fp8; +- (void)addArgumentsFromArray:(id)fp8; +- (unsigned int)numberOfArguments; +- (id)argumentAtIndex:(unsigned int)fp8; +- (unsigned int)indexOfArgumentHavingPrefix:(id)fp8 startingAtIndex:(unsigned int)fp12; +- (void)replaceArgumentAtIndex:(unsigned int)fp8 withArgument:(id)fp12; +- (unsigned int)transformArgumentsHavingPrefix:(id)fp8 inRange:(struct _NSRange)fp12 usingFormatString:(id)fp20; +- (unsigned int)transformArgumentsHavingPrefix:(id)fp8 usingFormatString:(id)fp12; +- (id)commandLine; +- (id)environment; +- (void)setEnvironment:(id)fp8; +- (void)addEnvironmentValue:(id)fp8 forKey:(id)fp12; +- (void)addEnvironmentEntriesFromDictionary:(id)fp8; +- (id)workingDirectoryPath; +- (void)setWorkingDirectoryPath:(id)fp8; +- (BOOL)caresAboutIncludes; +- (void)setCaresAboutIncludes:(BOOL)fp8; +- (id)filePathsToRemove; +- (void)addFilePathToRemove:(id)fp8; +- (void)_addConfigurationSignatureIngredientsToMD5Context:(struct CC_MD5state_st *)fp8; +- (CDAnonymousStruct1)inputSignature; +- (CDAnonymousStruct1)configurationSignature; +- (id)predictiveProcessingCandidateFilePath; +- (id)predictiveProcessingValiditySignature; +- (void)noteMightHavePredictiveProcessingOutput; +- (BOOL)isReadyForProcessing; +- (void)checkWaitCounts; +- (id)createStartedCommandInvocationInSlot:(unsigned int)fp8 ofWorkQueueOperation:(id)fp12; +- (void)commandInvocationWillStart:(id)fp8; +- (void)commandInvocationDidEnd:(id)fp8 successfully:(BOOL)fp12; +- (id)subprocessCommandLineForProcessing; +- (id)subprocessWorkingDirectoryForProcessing; +- (id)subprocessExtraEnvironmentEntriesForProcessing; +- (id)descriptionForWorkQueueLog; +- (id)instantiatedCommandOutputParserWithDelegate:(id)fp8; +- (void)incrementWaitCount; +- (void)decrementWaitCount; +- (void)incrementWaitCountsOfDependingNodes; +- (void)decrementWaitCountsOfDependingNodes; +- (id)displayString; +- (id)shortNameForDebugging; +- (id)stateDescription; +- (id)signatureDescription; +- (id)description; +- (id)nameForGraphViz; +- (void)writeDefinitionToGraphVizFile:(struct __sFILE *)fp8; +- (void)writeInputEdgesToGraphVizFile:(struct __sFILE *)fp8; +- (int)state; +- (CDAnonymousStruct1)signature; +- (id)path; +- (id)paths; +- (void)statFileIfNeeded; +- (void)resetState; +- (void)resetStateRecursively; +- (BOOL)isUpToDate; +- (void)computeStateIfNeeded; +- (BOOL)needsToRun; +- (void)enqueueOutOfDateCommandsOntoWorkQueue:(id)fp8; +- (void)willActivateInWorkQueue:(id)fp8; +- (void)propagateSignatureToOutputNodes; +- (void)didDeactivateInWorkQueue:(id)fp8 didCompleteSuccessfully:(BOOL)fp12; +- (id)launchPropertyExpansionDictionary; +- (void)setLaunchPropertyExpansionDictionary:(id)fp8; +- (id)customToolInfoObject; +- (void)setCustomToolInfoObject:(id)fp8; +- (void)makeOutputNodesPerformSelector:(SEL)fp8 withObject:(id)fp12; +- (void)makeConsumerCommandsOfOutputNodesPerformSelector:(SEL)fp8 withObject:(id)fp12; +- (void)removePredictiveProcessingOutputRecursivelyBecauseOfChangedNode:(id)fp8; +- (void)fileMayHaveChanged; +- (void)touch; +- (void)untouch; +- (id)dependencyNode; + +@end diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/English.lproj/InfoPlist.strings b/antlr-3.1.3/runtime/ObjC/Xcode plugin/English.lproj/InfoPlist.strings new file mode 100644 index 0000000000000000000000000000000000000000..0b32e1901d69b0e0802dccc35822ba7bf738ec64 GIT binary patch literal 204 zcmW-b%?g5G5Jk`0r-+sk6)oCCi)d325#|e+Y5yu(LA_BgSsi3x?tJ&VbC~as0U;e$ zl%ynFIq@cAulH1I8l93t?WnnZ=__~cQ?>bqyY9vGt4)P618dEe1rKg=3nKp$xd}VB sGUgI0H){C@jxA#tyOoO6+x!^Tuq+SwA)1(-|?e#_miA{yr)r3IG5A literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/English.lproj/org.antlr.Tool.strings b/antlr-3.1.3/runtime/ObjC/Xcode plugin/English.lproj/org.antlr.Tool.strings new file mode 100644 index 0000000..c0e88c7 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/English.lproj/org.antlr.Tool.strings @@ -0,0 +1,64 @@ +// [The "BSD licence"] +// Copyright (c) 2006 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"[ANTLR_EXTRA_JAVA_ARGS]-name" = "Extra Java Args"; +"[ANTLR_EXTRA_JAVA_ARGS]-description" = "Additional arguments for the Java interpreter. Currently you have to supply the classpath for ANTLR and StringTemplate. You can pass additional arguments like memory size as well"; +"[ANTLR_FORCE_OUT_DIR]-name" = "Force Output Directory"; +"[ANTLR_FORCE_OUT_DIR]-description" = "Forces ANTLR to write every file it outputs into this directory"; +"[ANTLR_OUT_DIR]-name" = "Output Directory"; +"[ANTLR_OUT_DIR]-description" = "The generated sources are written to this directory"; +"[ANTLR_LIB_DIR]-name" = "Token Vocabulary Directory"; +"[ANTLR_LIB_DIR]-description" = "ANTLR looks for token vocabulary files in the directory when importing vocabularies"; +"[ANTLR_VERBOSE]-name" = "Verbose"; +"[ANTLR_VERBOSE]-description" = "ANTLR outputs additional information when probing decisions"; +"[ANTLR_NFA_DOT]-name" = "NFA graphviz files"; +"[ANTLR_NFA_DOT]-description" = "Generate GraphViz .dot files for the generated NFAs"; +"[ANTLR_DFA_DOT]-name" = "DFA graphviz files"; +"[ANTLR_DFA_DOT]-description" = "Generate GraphViz .dot files for the generated DFAs"; +"[ANTLR_DEBUG]-name" = "Debug Support in Grammars"; +"[ANTLR_DEBUG]-description" = "Adds debugging code to generated recognizers"; +"[ANTLR_TRACE]-name" = "Trace rules"; +"[ANTLR_TRACE]-description" = "Adds tracing code to generated recognizers"; +"[ANTLR_REPORT]-name" = "Grammar report"; +"[ANTLR_REPORT]-description" = "ANTLR outputs some statistical information about the compiled grammars"; +"[ANTLR_X_GRTREE]-name" = "Print grammar tree"; +"[ANTLR_X_GRTREE]-description" = "ANTLR outputs the AST of the input grammar when compiling"; +"[ANTLR_X_DFA]-name" = ""; +"[ANTLR_X_DFA]-description" = ""; +"[ANTLR_X_NOPRUNE]-name" = ""; +"[ANTLR_X_NOPRUNE]-description" = ""; +"[ANTLR_X_NOCOLLAPSE]-name" = ""; +"[ANTLR_X_NOCOLLAPSE]-description" = ""; +"[ANTLR_X_DBGCONVERSION]-name" = ""; +"[ANTLR_X_DBGCONVERSION]-description" = ""; +"[ANTLR_X_NFA_MULTITHREADED]-name" = ""; +"[ANTLR_X_NFA_MULTITHREADED]-description" = ""; +"[ANTLR_X_DFAVERBOSE,]-name" = ""; +"[ANTLR_X_DFAVERBOSE,]-description" = ""; +"[ANTLR_X_WATCHCONVERSION]-name" = ""; +"[ANTLR_X_WATCHCONVERSION]-description" = ""; +"[ANTLR_X_DEBUG_ST]-name" = "Code generation sentinels"; +"[ANTLR_X_DEBUG_ST]-description" = "Adds markers for each code generation template used when generating recognizers. Very useful when debugging ANTLR itself to see where the code came from."; diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/GrammarFilter.g b/antlr-3.1.3/runtime/ObjC/Xcode plugin/GrammarFilter.g new file mode 100644 index 0000000..1077b0d --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/GrammarFilter.g @@ -0,0 +1,75 @@ +lexer grammar GrammarFilter; + +options { + language=ObjC; + filter=true; +} + +@ivars { + id delegate; +} + +@methodsdecl { +- (void) setDelegate:(id)theDelegate; +} + +@methods { +- (void) setDelegate:(id)theDelegate +{ + delegate = theDelegate; // not retained, will always be the object creating this lexer! +} +} + +// figure out the grammar type in this file +GRAMMAR + : ( grammarType=GRAMMAR_TYPE {[delegate setGrammarType:$grammarType.text]; } WS + | /* empty, must be parser or combined grammar */ {[delegate setGrammarType:@"parser"]; [delegate setIsCombinedGrammar:NO]; } + ) + 'grammar' WS grammarName=ID { [delegate setGrammarName:$grammarName.text]; } WS? ';' + ; + +fragment +GRAMMAR_TYPE + : ('lexer'|'parser'|'tree') + ; + +// find out if this grammar depends on other grammars +OPTIONS + : 'options' WS? '{' + ( (WS? '//') => SL_COMMENT + | (WS? '/*') => COMMENT + | (WS? 'tokenVocab') => WS? 'tokenVocab' WS? '=' WS? tokenVocab=ID WS? ';' { [delegate setDependsOnVocab:$tokenVocab.text]; } + | WS? ID WS? '=' WS? ID WS?';' + )* + WS? '}' + ; + +// look for lexer rules when in parser grammar -> this +LEXER_RULE + : ('A'..'Z') ID? WS? ':' (options {greedy=false;} : .)* ';' { [delegate setIsCombinedGrammar:YES]; } + ; + +// ignore stuff in comments +COMMENT + : '/*' (options {greedy=false;} : . )* '*/' + ; + +SL_COMMENT + : '//' (options {greedy=false;} : . )* '\n' + ; + +// throw away all actions, as they might confuse LEXER_RULE +ACTION + : '{' (options {greedy=false;} : .)* '}' + ; +// similarly throw away strings +STRING + : '\'' (options {greedy=false;} : .)* '\'' + ; + +fragment +ID : ('a'..'z'|'A'..'Z'|'_'|'0'..'9')+ + ; + +WS : (' '|'\t'|'\n')+ + ; \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/GrammarFilter.tokens b/antlr-3.1.3/runtime/ObjC/Xcode plugin/GrammarFilter.tokens new file mode 100644 index 0000000..ca88a4c --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/GrammarFilter.tokens @@ -0,0 +1,14 @@ +GRAMMAR_TYPE=4 +WS=5 +STRING=13 +Tokens=14 +LEXER_RULE=11 +OPTIONS=10 +ACTION=12 +COMMENT=9 +GRAMMAR=7 +SL_COMMENT=8 +ID=6 +'tokenVocab'=17 +'//'=15 +'/*'=16 diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/GrammarFilterLexer.h b/antlr-3.1.3/runtime/ObjC/Xcode plugin/GrammarFilterLexer.h new file mode 100644 index 0000000..041b6e6 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/GrammarFilterLexer.h @@ -0,0 +1,60 @@ +// $ANTLR 3.0b5 /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g 2006-11-12 20:15:18 + +#import +#import + + +#pragma mark Cyclic DFA start +@interface GrammarFilterLexerDFA13 : ANTLRDFA {} @end + +#pragma mark Cyclic DFA end + +#pragma mark Rule return scopes start +#pragma mark Rule return scopes end + +#pragma mark Tokens +#define GrammarFilterLexer_GRAMMAR_TYPE 4 +#define GrammarFilterLexer_EOF -1 +#define GrammarFilterLexer_WS 5 +#define GrammarFilterLexer_STRING 13 +#define GrammarFilterLexer_Tokens 14 +#define GrammarFilterLexer_LEXER_RULE 11 +#define GrammarFilterLexer_OPTIONS 10 +#define GrammarFilterLexer_ACTION 12 +#define GrammarFilterLexer_COMMENT 9 +#define GrammarFilterLexer_GRAMMAR 7 +#define GrammarFilterLexer_SL_COMMENT 8 +#define GrammarFilterLexer_ID 6 + +@interface GrammarFilterLexer : ANTLRLexer { + GrammarFilterLexerDFA13 *dfa13; + SEL synpred7SyntacticPredicate; + SEL synpred3SyntacticPredicate; + SEL synpred8SyntacticPredicate; + + id delegate; + +} + + +- (void) setDelegate:(id)theDelegate; + + +- (void) mGRAMMAR; +- (void) mGRAMMAR_TYPE; +- (void) mOPTIONS; +- (void) mLEXER_RULE; +- (void) mCOMMENT; +- (void) mSL_COMMENT; +- (void) mACTION; +- (void) mSTRING; +- (void) mID; +- (void) mWS; +- (void) mTokens; +- (void) synpred3; +- (void) synpred7; +- (void) synpred8; + + + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/GrammarFilterLexer.m b/antlr-3.1.3/runtime/ObjC/Xcode plugin/GrammarFilterLexer.m new file mode 100644 index 0000000..c1de795 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/GrammarFilterLexer.m @@ -0,0 +1,1523 @@ +// $ANTLR 3.0b5 /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g 2006-11-12 20:15:18 + +#import "GrammarFilterLexer.h" +#pragma mark Cyclic DFAs +@implementation GrammarFilterLexerDFA13 +const static int GrammarFilterLexerdfa13_eot[24] = + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1}; +const static int GrammarFilterLexerdfa13_eof[24] = + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1}; +const static unichar GrammarFilterLexerdfa13_min[24] = + {9,9,0,42,9,0,0,0,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0,0}; +const static unichar GrammarFilterLexerdfa13_max[24] = + {125,125,0,47,122,0,0,0,122,122,122,122,122,122,122,122,122,61,122,122, + 122,59,0,0}; +const static int GrammarFilterLexerdfa13_accept[24] = + {-1,-1,5,-1,-1,4,2,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3}; +const static int GrammarFilterLexerdfa13_special[24] = + {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0, + -1}; +const static int GrammarFilterLexerdfa13_transition[] = {}; +const static int GrammarFilterLexerdfa13_transition0[] = {5, 5, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, 5, -1, -1, -1, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, -1, + 5, -1, 5, 16, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5}; +const static int GrammarFilterLexerdfa13_transition1[] = {21, 21, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 21, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 22}; +const static int GrammarFilterLexerdfa13_transition2[] = {5, 5, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, 5, -1, -1, -1, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, -1, + 5, -1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 9, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5}; +const static int GrammarFilterLexerdfa13_transition3[] = {5, 5, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, 5, -1, -1, -1, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, -1, + 5, -1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 13, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5}; +const static int GrammarFilterLexerdfa13_transition4[] = {6, -1, -1, -1, + -1, 7}; +const static int GrammarFilterLexerdfa13_transition5[] = {19, 19, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 19, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, -1, -1, -1, -1, -1, -1, -1, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, -1, -1, -1, -1, 20, -1, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20}; +const static int GrammarFilterLexerdfa13_transition6[] = {5, 5, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, 5, -1, -1, -1, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 12, 5, 5, 5, 5, -1, -1, -1, -1, + 5, -1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5}; +const static int GrammarFilterLexerdfa13_transition7[] = {5, 5, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, 5, -1, -1, -1, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, -1, + 5, -1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5}; +const static int GrammarFilterLexerdfa13_transition8[] = {5, 5, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, 5, -1, -1, -1, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, -1, + 5, -1, 5, 5, 14, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5}; +const static int GrammarFilterLexerdfa13_transition9[] = {1, 1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, -1, + 5, -1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, + 5, 5, 5, 5, -1, -1, 2}; +const static int GrammarFilterLexerdfa13_transition10[] = {1, 1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, -1, + 5, -1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, + 5, 5, 5, 5, -1, -1, 2}; +const static int GrammarFilterLexerdfa13_transition11[] = {-1}; +const static int GrammarFilterLexerdfa13_transition12[] = {5, 5, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, 5, -1, -1, -1, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, -1, + 5, -1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 11, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5}; +const static int GrammarFilterLexerdfa13_transition13[] = {5, 5, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, 5, -1, -1, -1, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, -1, + 5, -1, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5}; +const static int GrammarFilterLexerdfa13_transition14[] = {17, 17, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 17, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, 18, -1, -1, -1, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, + -1, 5, -1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5}; +const static int GrammarFilterLexerdfa13_transition15[] = {21, 21, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 21, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, -1, 22, -1, -1, -1, -1, -1, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, -1, -1, -1, -1, 20, -1, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20}; +const static int GrammarFilterLexerdfa13_transition16[] = {17, 17, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 17, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18}; +const static int GrammarFilterLexerdfa13_transition17[] = {5, 5, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, 5, -1, -1, -1, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, -1, -1, -1, -1, + 5, -1, 5, 5, 5, 5, 10, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5}; + + +- (id) initWithRecognizer:(ANTLRBaseRecognizer *) theRecognizer +{ + if ((self = [super initWithRecognizer:theRecognizer]) != nil) { + eot = GrammarFilterLexerdfa13_eot; + eof = GrammarFilterLexerdfa13_eof; + min = GrammarFilterLexerdfa13_min; + max = GrammarFilterLexerdfa13_max; + accept = GrammarFilterLexerdfa13_accept; + special = GrammarFilterLexerdfa13_special; + if (!(transition = calloc(24, sizeof(void*)))) { + [self release]; + return nil; + } + transition[0] = GrammarFilterLexerdfa13_transition9; + transition[1] = GrammarFilterLexerdfa13_transition10; + transition[2] = GrammarFilterLexerdfa13_transition; + transition[3] = GrammarFilterLexerdfa13_transition4; + transition[4] = GrammarFilterLexerdfa13_transition7; + transition[5] = GrammarFilterLexerdfa13_transition; + transition[6] = GrammarFilterLexerdfa13_transition; + transition[7] = GrammarFilterLexerdfa13_transition; + transition[8] = GrammarFilterLexerdfa13_transition2; + transition[9] = GrammarFilterLexerdfa13_transition17; + transition[10] = GrammarFilterLexerdfa13_transition12; + transition[11] = GrammarFilterLexerdfa13_transition6; + transition[12] = GrammarFilterLexerdfa13_transition3; + transition[13] = GrammarFilterLexerdfa13_transition8; + transition[14] = GrammarFilterLexerdfa13_transition13; + transition[15] = GrammarFilterLexerdfa13_transition0; + transition[16] = GrammarFilterLexerdfa13_transition14; + transition[17] = GrammarFilterLexerdfa13_transition16; + transition[18] = GrammarFilterLexerdfa13_transition5; + transition[19] = GrammarFilterLexerdfa13_transition5; + transition[20] = GrammarFilterLexerdfa13_transition15; + transition[21] = GrammarFilterLexerdfa13_transition1; + transition[22] = GrammarFilterLexerdfa13_transition11; + transition[23] = GrammarFilterLexerdfa13_transition; + } + return self; +} + +- (int) specialStateTransition:(int) s +{ + int _s = s; + switch ( s ) { + case 0 : + [[recognizer input] rewind]; + s = -1; + if ( ([self evaluateSyntacticPredicate:@selector(synpred3)]) ) {s = 23;} + + else if ( (YES) ) {s = 5;} + + if ( s>=0 ) return s; + break; + } + if ([recognizer isBacktracking]) { + [recognizer setIsFailed:YES]; + return -1; + } + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:13 state:_s stream:[recognizer input]]; + + @throw nvae; +} + +- (void) dealloc +{ + free(transition); + [super dealloc]; +} + +- (NSString *) description +{ + return @"()* loopback of 39:3: ( ( ( WS )? '//' )=> SL_COMMENT | ( ( WS )? '/*' )=> COMMENT | ( ( WS )? 'tokenVocab' )=> ( WS )? 'tokenVocab' ( WS )? '=' ( WS )? tokenVocab= ID ( WS )? ';' | ( WS )? ID ( WS )? '=' ( WS )? ID ( WS )? ';' )*"; +} + +@end + + + +/** As per Terence: No returns for lexer rules! +#pragma mark Rule return scopes start +#pragma mark Rule return scopes end +*/ +@implementation GrammarFilterLexer + + +- (void) setDelegate:(id)theDelegate +{ + delegate = theDelegate; // not retained, will always be the object creating this lexer! +} + + +- (id) initWithCharStream:(id)anInput +{ + if (nil!=(self = [super initWithCharStream:anInput])) { + + + + dfa13 = [[GrammarFilterLexerDFA13 alloc] initWithRecognizer:self]; + } + return self; +} + +- (void) dealloc +{ + [dfa13 release]; + [super dealloc]; +} + +- (ANTLRToken *) nextToken +{ + [self setToken:nil]; + tokenStartCharIndex = [self charIndex]; + while (YES) { + if ( [input LA:1] == ANTLRCharStreamEOF ) { + return nil; // should really be a +eofToken call here -> go figure + } + @try { + int m = [input mark]; + backtracking = 1; + failed = NO; + [self mTokens]; + backtracking = 0; + [input rewind:m]; + if ( failed ) { + [input consume]; + } else { + [self mTokens]; + return token; + } + } + @catch (ANTLRRecognitionException *re) { + // shouldn't happen in backtracking mode, but... + [self reportError:re]; + [self recover:re]; + } + } +} + +- (void) mGRAMMAR +{ + ANTLRToken * _grammarType = nil; + ANTLRToken * _grammarName = nil; + + @try { + int _type = GrammarFilterLexer_GRAMMAR; + int _start = [self charIndex]; + int _line = [self line]; + int _charPosition = [self charPositionInLine]; + int _channel = [ANTLRToken defaultChannel]; + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:25:4: ( (grammarType= GRAMMAR_TYPE WS | ) 'grammar' WS grammarName= ID ( WS )? ';' ) // ruleBlockSingleAlt + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:25:4: (grammarType= GRAMMAR_TYPE WS | ) 'grammar' WS grammarName= ID ( WS )? ';' // alt + { + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:25:4: (grammarType= GRAMMAR_TYPE WS | ) // block + int alt1=2; + { + int LA1_0 = [input LA:1]; + if ( LA1_0=='l'||LA1_0=='p'||LA1_0=='t' ) { + alt1 = 1; + } + else if ( LA1_0=='g' ) { + alt1 = 2; + } + else { + if (failed) return ; + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:1 state:0 stream:input]; + @throw nvae; + } + } + switch (alt1) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:25:6: grammarType= GRAMMAR_TYPE WS // alt + { + int _grammarTypeStart = [self charIndex]; + [self mGRAMMAR_TYPE]; + if (failed) return ; + + _grammarType = [[ANTLRCommonToken alloc] initWithInput:input tokenType:ANTLRTokenTypeInvalid channel:ANTLRTokenChannelDefault start:_grammarTypeStart stop:[self charIndex]]; + [_grammarType setLine:[self line]]; + if ( backtracking==1 ) { + [delegate setGrammarType:[_grammarType text]]; + } + [self mWS]; + if (failed) return ; + + + } + break; + case 2 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:26:53: // alt + { + if ( backtracking==1 ) { + [delegate setGrammarType:@"parser"]; [delegate setIsCombinedGrammar:NO]; + } + + } + break; + + } + + [self matchString:@"grammar"]; + if (failed) return ; + + [self mWS]; + if (failed) return ; + + int _grammarNameStart = [self charIndex]; + [self mID]; + if (failed) return ; + + _grammarName = [[ANTLRCommonToken alloc] initWithInput:input tokenType:ANTLRTokenTypeInvalid channel:ANTLRTokenChannelDefault start:_grammarNameStart stop:[self charIndex]]; + [_grammarName setLine:[self line]]; + if ( backtracking==1 ) { + [delegate setGrammarName:[_grammarName text]]; + } + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:28:80: ( WS )? // block + int alt2=2; + { + int LA2_0 = [input LA:1]; + if ( (LA2_0>='\t' && LA2_0<='\n')||LA2_0==' ' ) { + alt2 = 1; + } + } + switch (alt2) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:28:80: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + [self matchChar:';']; + if (failed) return ; + + + } + + if ( token == nil ) { [self emitTokenWithType:_type line:_line charPosition:_charPosition channel:_channel start:_start stop:[self charIndex]];} + } + @finally { + // rule cleanup + // token labels + [_grammarType release]; + [_grammarName release]; + // token+rule list labels + // rule labels + // rule refs in alts with rewrites + + if ( backtracking == 0 ) { + } + } + return; +} +// $ANTLR end GRAMMAR + + +- (void) mGRAMMAR_TYPE +{ + @try { + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:33:5: ( ( 'lexer' | 'parser' | 'tree' ) ) // ruleBlockSingleAlt + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:33:5: ( 'lexer' | 'parser' | 'tree' ) // alt + { + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:33:5: ( 'lexer' | 'parser' | 'tree' ) // block + int alt3=3; + switch ([input LA:1]) { + case 'l': + alt3 = 1; + break; + case 'p': + alt3 = 2; + break; + case 't': + alt3 = 3; + break; + default: + { + if (failed) return ; + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:3 state:0 stream:input]; + @throw nvae; + + }} + switch (alt3) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:33:6: 'lexer' // alt + { + [self matchString:@"lexer"]; + if (failed) return ; + + + } + break; + case 2 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:33:14: 'parser' // alt + { + [self matchString:@"parser"]; + if (failed) return ; + + + } + break; + case 3 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:33:23: 'tree' // alt + { + [self matchString:@"tree"]; + if (failed) return ; + + + } + break; + + } + + + } + + } + @finally { + // rule cleanup + // token labels + // token+rule list labels + // rule labels + // rule refs in alts with rewrites + + if ( backtracking == 0 ) { + } + } + return; +} +// $ANTLR end GRAMMAR_TYPE + + +- (void) mOPTIONS +{ + ANTLRToken * _tokenVocab = nil; + + @try { + int _type = GrammarFilterLexer_OPTIONS; + int _start = [self charIndex]; + int _line = [self line]; + int _charPosition = [self charPositionInLine]; + int _channel = [ANTLRToken defaultChannel]; + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:38:4: ( 'options' ( WS )? '{' ( ( ( WS )? '//' )=> SL_COMMENT | ( ( WS )? '/*' )=> COMMENT | ( ( WS )? 'tokenVocab' )=> ( WS )? 'tokenVocab' ( WS )? '=' ( WS )? tokenVocab= ID ( WS )? ';' | ( WS )? ID ( WS )? '=' ( WS )? ID ( WS )? ';' )* ( WS )? '}' ) // ruleBlockSingleAlt + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:38:4: 'options' ( WS )? '{' ( ( ( WS )? '//' )=> SL_COMMENT | ( ( WS )? '/*' )=> COMMENT | ( ( WS )? 'tokenVocab' )=> ( WS )? 'tokenVocab' ( WS )? '=' ( WS )? tokenVocab= ID ( WS )? ';' | ( WS )? ID ( WS )? '=' ( WS )? ID ( WS )? ';' )* ( WS )? '}' // alt + { + [self matchString:@"options"]; + if (failed) return ; + + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:38:14: ( WS )? // block + int alt4=2; + { + int LA4_0 = [input LA:1]; + if ( (LA4_0>='\t' && LA4_0<='\n')||LA4_0==' ' ) { + alt4 = 1; + } + } + switch (alt4) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:38:14: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + [self matchChar:'{']; + if (failed) return ; + + do { + int alt13=5; + alt13 = [dfa13 predict]; + switch (alt13) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:39:5: ( ( WS )? '//' )=> SL_COMMENT // alt + { + [self mSL_COMMENT]; + if (failed) return ; + + + } + break; + case 2 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:40:5: ( ( WS )? '/*' )=> COMMENT // alt + { + [self mCOMMENT]; + if (failed) return ; + + + } + break; + case 3 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:41:5: ( ( WS )? 'tokenVocab' )=> ( WS )? 'tokenVocab' ( WS )? '=' ( WS )? tokenVocab= ID ( WS )? ';' // alt + { + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:41:27: ( WS )? // block + int alt5=2; + { + int LA5_0 = [input LA:1]; + if ( (LA5_0>='\t' && LA5_0<='\n')||LA5_0==' ' ) { + alt5 = 1; + } + } + switch (alt5) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:41:27: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + [self matchString:@"tokenVocab"]; + if (failed) return ; + + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:41:44: ( WS )? // block + int alt6=2; + { + int LA6_0 = [input LA:1]; + if ( (LA6_0>='\t' && LA6_0<='\n')||LA6_0==' ' ) { + alt6 = 1; + } + } + switch (alt6) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:41:44: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + [self matchChar:'=']; + if (failed) return ; + + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:41:52: ( WS )? // block + int alt7=2; + { + int LA7_0 = [input LA:1]; + if ( (LA7_0>='\t' && LA7_0<='\n')||LA7_0==' ' ) { + alt7 = 1; + } + } + switch (alt7) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:41:52: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + int _tokenVocabStart = [self charIndex]; + [self mID]; + if (failed) return ; + + _tokenVocab = [[ANTLRCommonToken alloc] initWithInput:input tokenType:ANTLRTokenTypeInvalid channel:ANTLRTokenChannelDefault start:_tokenVocabStart stop:[self charIndex]]; + [_tokenVocab setLine:[self line]]; + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:41:70: ( WS )? // block + int alt8=2; + { + int LA8_0 = [input LA:1]; + if ( (LA8_0>='\t' && LA8_0<='\n')||LA8_0==' ' ) { + alt8 = 1; + } + } + switch (alt8) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:41:70: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + [self matchChar:';']; + if (failed) return ; + + if ( backtracking==1 ) { + [delegate setDependsOnVocab:[_tokenVocab text]]; + } + + } + break; + case 4 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:42:5: ( WS )? ID ( WS )? '=' ( WS )? ID ( WS )? ';' // alt + { + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:42:5: ( WS )? // block + int alt9=2; + { + int LA9_0 = [input LA:1]; + if ( (LA9_0>='\t' && LA9_0<='\n')||LA9_0==' ' ) { + alt9 = 1; + } + } + switch (alt9) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:42:5: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + [self mID]; + if (failed) return ; + + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:42:12: ( WS )? // block + int alt10=2; + { + int LA10_0 = [input LA:1]; + if ( (LA10_0>='\t' && LA10_0<='\n')||LA10_0==' ' ) { + alt10 = 1; + } + } + switch (alt10) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:42:12: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + [self matchChar:'=']; + if (failed) return ; + + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:42:20: ( WS )? // block + int alt11=2; + { + int LA11_0 = [input LA:1]; + if ( (LA11_0>='\t' && LA11_0<='\n')||LA11_0==' ' ) { + alt11 = 1; + } + } + switch (alt11) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:42:20: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + [self mID]; + if (failed) return ; + + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:42:27: ( WS )? // block + int alt12=2; + { + int LA12_0 = [input LA:1]; + if ( (LA12_0>='\t' && LA12_0<='\n')||LA12_0==' ' ) { + alt12 = 1; + } + } + switch (alt12) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:42:27: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + [self matchChar:';']; + if (failed) return ; + + + } + break; + + default : + goto loop13; + } + } while (YES); loop13: ; + + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:44:3: ( WS )? // block + int alt14=2; + { + int LA14_0 = [input LA:1]; + if ( (LA14_0>='\t' && LA14_0<='\n')||LA14_0==' ' ) { + alt14 = 1; + } + } + switch (alt14) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:44:3: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + [self matchChar:'}']; + if (failed) return ; + + + } + + if ( token == nil ) { [self emitTokenWithType:_type line:_line charPosition:_charPosition channel:_channel start:_start stop:[self charIndex]];} + } + @finally { + // rule cleanup + // token labels + [_tokenVocab release]; + // token+rule list labels + // rule labels + // rule refs in alts with rewrites + + if ( backtracking == 0 ) { + } + } + return; +} +// $ANTLR end OPTIONS + + +- (void) mLEXER_RULE +{ + @try { + int _type = GrammarFilterLexer_LEXER_RULE; + int _start = [self charIndex]; + int _line = [self line]; + int _charPosition = [self charPositionInLine]; + int _channel = [ANTLRToken defaultChannel]; + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:49:4: ( ( 'A' .. 'Z' ) ( ID )? ( WS )? ':' ( options {greedy=false; } : . )* ';' ) // ruleBlockSingleAlt + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:49:4: ( 'A' .. 'Z' ) ( ID )? ( WS )? ':' ( options {greedy=false; } : . )* ';' // alt + { + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:49:4: ( 'A' .. 'Z' ) // blockSingleAlt + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:49:5: 'A' .. 'Z' // alt + { + [self matchRangeFromChar:'A' to:'Z'];if (failed) return ; + + } + + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:49:15: ( ID )? // block + int alt15=2; + { + int LA15_0 = [input LA:1]; + if ( (LA15_0>='0' && LA15_0<='9')||(LA15_0>='A' && LA15_0<='Z')||LA15_0=='_'||(LA15_0>='a' && LA15_0<='z') ) { + alt15 = 1; + } + } + switch (alt15) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:49:15: ID // alt + { + [self mID]; + if (failed) return ; + + + } + break; + + } + + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:49:19: ( WS )? // block + int alt16=2; + { + int LA16_0 = [input LA:1]; + if ( (LA16_0>='\t' && LA16_0<='\n')||LA16_0==' ' ) { + alt16 = 1; + } + } + switch (alt16) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:49:19: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + [self matchChar:':']; + if (failed) return ; + + do { + int alt17=2; + { + int LA17_0 = [input LA:1]; + if ( LA17_0==';' ) { + alt17 = 2; + } + else if ( (LA17_0>=0x0000 && LA17_0<=':')||(LA17_0>='<' && LA17_0<=0xFFFE) ) { + alt17 = 1; + } + + } + switch (alt17) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:49:54: . // alt + { + [self matchAny]; + if (failed) return ; + + + } + break; + + default : + goto loop17; + } + } while (YES); loop17: ; + + [self matchChar:';']; + if (failed) return ; + + if ( backtracking==1 ) { + [delegate setIsCombinedGrammar:YES]; + } + + } + + if ( token == nil ) { [self emitTokenWithType:_type line:_line charPosition:_charPosition channel:_channel start:_start stop:[self charIndex]];} + } + @finally { + // rule cleanup + // token labels + // token+rule list labels + // rule labels + // rule refs in alts with rewrites + + if ( backtracking == 0 ) { + } + } + return; +} +// $ANTLR end LEXER_RULE + + +- (void) mCOMMENT +{ + @try { + int _type = GrammarFilterLexer_COMMENT; + int _start = [self charIndex]; + int _line = [self line]; + int _charPosition = [self charPositionInLine]; + int _channel = [ANTLRToken defaultChannel]; + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:54:9: ( '/*' ( options {greedy=false; } : . )* '*/' ) // ruleBlockSingleAlt + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:54:9: '/*' ( options {greedy=false; } : . )* '*/' // alt + { + [self matchString:@"/*"]; + if (failed) return ; + + do { + int alt18=2; + { + int LA18_0 = [input LA:1]; + if ( LA18_0=='*' ) { + { + int LA18_1 = [input LA:2]; + if ( LA18_1=='/' ) { + alt18 = 2; + } + else if ( (LA18_1>=0x0000 && LA18_1<='.')||(LA18_1>='0' && LA18_1<=0xFFFE) ) { + alt18 = 1; + } + + } + } + else if ( (LA18_0>=0x0000 && LA18_0<=')')||(LA18_0>='+' && LA18_0<=0xFFFE) ) { + alt18 = 1; + } + + } + switch (alt18) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:54:41: . // alt + { + [self matchAny]; + if (failed) return ; + + + } + break; + + default : + goto loop18; + } + } while (YES); loop18: ; + + [self matchString:@"*/"]; + if (failed) return ; + + + } + + if ( token == nil ) { [self emitTokenWithType:_type line:_line charPosition:_charPosition channel:_channel start:_start stop:[self charIndex]];} + } + @finally { + // rule cleanup + // token labels + // token+rule list labels + // rule labels + // rule refs in alts with rewrites + + if ( backtracking == 0 ) { + } + } + return; +} +// $ANTLR end COMMENT + + +- (void) mSL_COMMENT +{ + @try { + int _type = GrammarFilterLexer_SL_COMMENT; + int _start = [self charIndex]; + int _line = [self line]; + int _charPosition = [self charPositionInLine]; + int _channel = [ANTLRToken defaultChannel]; + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:58:9: ( '//' ( options {greedy=false; } : . )* '\\n' ) // ruleBlockSingleAlt + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:58:9: '//' ( options {greedy=false; } : . )* '\\n' // alt + { + [self matchString:@"//"]; + if (failed) return ; + + do { + int alt19=2; + { + int LA19_0 = [input LA:1]; + if ( LA19_0=='\n' ) { + alt19 = 2; + } + else if ( (LA19_0>=0x0000 && LA19_0<='\t')||(LA19_0>=0x000B && LA19_0<=0xFFFE) ) { + alt19 = 1; + } + + } + switch (alt19) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:58:41: . // alt + { + [self matchAny]; + if (failed) return ; + + + } + break; + + default : + goto loop19; + } + } while (YES); loop19: ; + + [self matchChar:'\n']; + if (failed) return ; + + + } + + if ( token == nil ) { [self emitTokenWithType:_type line:_line charPosition:_charPosition channel:_channel start:_start stop:[self charIndex]];} + } + @finally { + // rule cleanup + // token labels + // token+rule list labels + // rule labels + // rule refs in alts with rewrites + + if ( backtracking == 0 ) { + } + } + return; +} +// $ANTLR end SL_COMMENT + + +- (void) mACTION +{ + @try { + int _type = GrammarFilterLexer_ACTION; + int _start = [self charIndex]; + int _line = [self line]; + int _charPosition = [self charPositionInLine]; + int _channel = [ANTLRToken defaultChannel]; + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:63:4: ( '{' ( options {greedy=false; } : . )* '}' ) // ruleBlockSingleAlt + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:63:4: '{' ( options {greedy=false; } : . )* '}' // alt + { + [self matchChar:'{']; + if (failed) return ; + + do { + int alt20=2; + { + int LA20_0 = [input LA:1]; + if ( LA20_0=='}' ) { + alt20 = 2; + } + else if ( (LA20_0>=0x0000 && LA20_0<='|')||(LA20_0>='~' && LA20_0<=0xFFFE) ) { + alt20 = 1; + } + + } + switch (alt20) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:63:35: . // alt + { + [self matchAny]; + if (failed) return ; + + + } + break; + + default : + goto loop20; + } + } while (YES); loop20: ; + + [self matchChar:'}']; + if (failed) return ; + + + } + + if ( token == nil ) { [self emitTokenWithType:_type line:_line charPosition:_charPosition channel:_channel start:_start stop:[self charIndex]];} + } + @finally { + // rule cleanup + // token labels + // token+rule list labels + // rule labels + // rule refs in alts with rewrites + + if ( backtracking == 0 ) { + } + } + return; +} +// $ANTLR end ACTION + + +- (void) mSTRING +{ + @try { + int _type = GrammarFilterLexer_STRING; + int _start = [self charIndex]; + int _line = [self line]; + int _charPosition = [self charPositionInLine]; + int _channel = [ANTLRToken defaultChannel]; + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:67:4: ( '\\'' ( options {greedy=false; } : . )* '\\'' ) // ruleBlockSingleAlt + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:67:4: '\\'' ( options {greedy=false; } : . )* '\\'' // alt + { + [self matchChar:'\'']; + if (failed) return ; + + do { + int alt21=2; + { + int LA21_0 = [input LA:1]; + if ( LA21_0=='\'' ) { + alt21 = 2; + } + else if ( (LA21_0>=0x0000 && LA21_0<='&')||(LA21_0>='(' && LA21_0<=0xFFFE) ) { + alt21 = 1; + } + + } + switch (alt21) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:67:36: . // alt + { + [self matchAny]; + if (failed) return ; + + + } + break; + + default : + goto loop21; + } + } while (YES); loop21: ; + + [self matchChar:'\'']; + if (failed) return ; + + + } + + if ( token == nil ) { [self emitTokenWithType:_type line:_line charPosition:_charPosition channel:_channel start:_start stop:[self charIndex]];} + } + @finally { + // rule cleanup + // token labels + // token+rule list labels + // rule labels + // rule refs in alts with rewrites + + if ( backtracking == 0 ) { + } + } + return; +} +// $ANTLR end STRING + + +- (void) mID +{ + @try { + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:71:9: ( ( ('a'..'z'|'A'..'Z'|'_'|'0'..'9'))+ ) // ruleBlockSingleAlt + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:71:9: ( ('a'..'z'|'A'..'Z'|'_'|'0'..'9'))+ // alt + { + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:71:9: ( ('a'..'z'|'A'..'Z'|'_'|'0'..'9'))+ // positiveClosureBlock + int cnt22=0; + + do { + int alt22=2; + { + int LA22_0 = [input LA:1]; + if ( (LA22_0>='0' && LA22_0<='9')||(LA22_0>='A' && LA22_0<='Z')||LA22_0=='_'||(LA22_0>='a' && LA22_0<='z') ) { + alt22 = 1; + } + + } + switch (alt22) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:71:10: ('a'..'z'|'A'..'Z'|'_'|'0'..'9') // alt + { + if (([input LA:1]>='0' && [input LA:1]<='9')||([input LA:1]>='A' && [input LA:1]<='Z')||[input LA:1]=='_'||([input LA:1]>='a' && [input LA:1]<='z')) { + [input consume]; + failed = NO; + } else { + if (backtracking > 0) {failed=YES; return ;} + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + + } + break; + + default : + if ( cnt22 >= 1 ) goto loop22; + if (backtracking > 0) {failed=YES; return ;} + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:22]; + @throw eee; + } + cnt22++; + } while (YES); loop22: ; + + + } + + } + @finally { + // rule cleanup + // token labels + // token+rule list labels + // rule labels + // rule refs in alts with rewrites + + if ( backtracking == 0 ) { + } + } + return; +} +// $ANTLR end ID + + +- (void) mWS +{ + @try { + int _type = GrammarFilterLexer_WS; + int _start = [self charIndex]; + int _line = [self line]; + int _charPosition = [self charPositionInLine]; + int _channel = [ANTLRToken defaultChannel]; + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:74:9: ( ( (' '|'\\t'|'\\n'))+ ) // ruleBlockSingleAlt + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:74:9: ( (' '|'\\t'|'\\n'))+ // alt + { + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:74:9: ( (' '|'\\t'|'\\n'))+ // positiveClosureBlock + int cnt23=0; + + do { + int alt23=2; + { + int LA23_0 = [input LA:1]; + if ( (LA23_0>='\t' && LA23_0<='\n')||LA23_0==' ' ) { + alt23 = 1; + } + + } + switch (alt23) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:74:10: (' '|'\\t'|'\\n') // alt + { + if (([input LA:1]>='\t' && [input LA:1]<='\n')||[input LA:1]==' ') { + [input consume]; + failed = NO; + } else { + if (backtracking > 0) {failed=YES; return ;} + ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException exceptionWithSet:nil stream:input]; + [self recover:mse]; @throw mse; + } + + + } + break; + + default : + if ( cnt23 >= 1 ) goto loop23; + if (backtracking > 0) {failed=YES; return ;} + ANTLREarlyExitException *eee = [ANTLREarlyExitException exceptionWithStream:input decisionNumber:23]; + @throw eee; + } + cnt23++; + } while (YES); loop23: ; + + + } + + if ( token == nil ) { [self emitTokenWithType:_type line:_line charPosition:_charPosition channel:_channel start:_start stop:[self charIndex]];} + } + @finally { + // rule cleanup + // token labels + // token+rule list labels + // rule labels + // rule refs in alts with rewrites + + if ( backtracking == 0 ) { + } + } + return; +} +// $ANTLR end WS + +- (void) mTokens +{ + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:1:25: ( ( GRAMMAR )=> GRAMMAR | ( OPTIONS )=> OPTIONS | ( LEXER_RULE )=> LEXER_RULE | ( COMMENT )=> COMMENT | ( SL_COMMENT )=> SL_COMMENT | ( ACTION )=> ACTION | ( STRING )=> STRING | ( WS )=> WS ) //ruleblock + int alt24=8; + switch ([input LA:1]) { + case 'g': + case 'l': + case 'p': + case 't': + alt24 = 1; + break; + case 'o': + alt24 = 2; + break; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + alt24 = 3; + break; + case '/': + { + int LA24_7 = [input LA:2]; + if ( [self evaluateSyntacticPredicate:@selector(synpred7)] ) { + alt24 = 4; + } + else if ( [self evaluateSyntacticPredicate:@selector(synpred8)] ) { + alt24 = 5; + } + else { + if (failed) return ; + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:24 state:7 stream:input]; + @throw nvae; + } + } + break; + case '{': + alt24 = 6; + break; + case '\'': + alt24 = 7; + break; + case '\t': + case '\n': + case ' ': + alt24 = 8; + break; + default: + { + if (failed) return ; + ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException exceptionWithDecision:24 state:0 stream:input]; + @throw nvae; + + }} + switch (alt24) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:1:25: ( GRAMMAR )=> GRAMMAR // alt + { + [self mGRAMMAR]; + if (failed) return ; + + + } + break; + case 2 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:1:44: ( OPTIONS )=> OPTIONS // alt + { + [self mOPTIONS]; + if (failed) return ; + + + } + break; + case 3 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:1:63: ( LEXER_RULE )=> LEXER_RULE // alt + { + [self mLEXER_RULE]; + if (failed) return ; + + + } + break; + case 4 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:1:88: ( COMMENT )=> COMMENT // alt + { + [self mCOMMENT]; + if (failed) return ; + + + } + break; + case 5 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:1:107: ( SL_COMMENT )=> SL_COMMENT // alt + { + [self mSL_COMMENT]; + if (failed) return ; + + + } + break; + case 6 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:1:132: ( ACTION )=> ACTION // alt + { + [self mACTION]; + if (failed) return ; + + + } + break; + case 7 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:1:149: ( STRING )=> STRING // alt + { + [self mSTRING]; + if (failed) return ; + + + } + break; + case 8 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:1:166: ( WS )=> WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + +} + +- (void) synpred3 +{ + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:41:5: ( ( WS )? 'tokenVocab' ) // ruleBlockSingleAlt + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:41:6: ( WS )? 'tokenVocab' // alt + { + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:41:6: ( WS )? // block + int alt27=2; + { + int LA27_0 = [input LA:1]; + if ( (LA27_0>='\t' && LA27_0<='\n')||LA27_0==' ' ) { + alt27 = 1; + } + } + switch (alt27) { + case 1 : + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:41:6: WS // alt + { + [self mWS]; + if (failed) return ; + + + } + break; + + } + + [self matchString:@"tokenVocab"]; + if (failed) return ; + + + } +} + +- (void) synpred7 +{ + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:1:88: ( COMMENT ) // ruleBlockSingleAlt + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:1:89: COMMENT // alt + { + [self mCOMMENT]; + if (failed) return ; + + + } +} + +- (void) synpred8 +{ + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:1:107: ( SL_COMMENT ) // ruleBlockSingleAlt + // /Users/kroepke/Projects/antlr3/code/antlr/main/lib/ObjC/Xcode plugin/GrammarFilter.g:1:108: SL_COMMENT // alt + { + [self mSL_COMMENT]; + if (failed) return ; + + + } +} + +@end \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/Info.plist b/antlr-3.1.3/runtime/ObjC/Xcode plugin/Info.plist new file mode 100644 index 0000000..9a97658 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/Info.plist @@ -0,0 +1,30 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + org.antlr.xcodeplugin + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LoadAtLaunch + YES + NSPrincipalClass + ANTLRXCPlugin + XCPluginHasUI + NO + + diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/OutputParser.h b/antlr-3.1.3/runtime/ObjC/Xcode plugin/OutputParser.h new file mode 100644 index 0000000..6818175 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/OutputParser.h @@ -0,0 +1,93 @@ +// [The "BSD licence"] +// Copyright (c) 2006 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +@protocol XCOutputStreams +- (void)writeBytes:(const char *)fp8 length:(unsigned int)fp12; +- (void)flush; +- (void)close; +@end + +@interface XCOutputStream : NSObject +{ +} + +- (void)writeBytes:(const char *)fp8 length:(unsigned int)fp12; +- (void)flush; +- (void)close; +- (void)writeData:(id)fp8; + +@end + +@interface XCFileOutputStream : XCOutputStream +{ + int _fileDescriptor; + BOOL _closeFDWhenStreamIsClosed; +} + ++ (id)stdoutFileOutputStream; ++ (id)stderrFileOutputStream; ++ (id)nullFileOutputStream; +- (id)initWithFileDescriptor:(int)fp8 closeFileDescriptorWhenStreamIsClosed:(BOOL)fp12; +- (id)init; +- (void)dealloc; +- (void)finalize; +- (void)writeBytes:(const char *)fp8 length:(unsigned int)fp12; +- (void)flush; +- (void)close; + +@end + + +@interface XCFilterOutputStream : XCOutputStream +{ + id _nextOutputStream; +} + +- (id)initWithNextOutputStream:(id)fp8; +- (id)init; +- (void)dealloc; +- (id)nextOutputStream; +- (void)setNextOutputStream:(id)fp8; +- (id)lastOutputStream; +- (void)writeBytes:(const char *)fp8 length:(unsigned int)fp12; +- (void)flush; +- (void)close; + +@end + + +@interface XCBuildCommandOutputParser : XCFilterOutputStream +{ + id _delegate; +} + +- (id)initWithNextOutputStream:(id)fp8; +- (id)delegate; +- (void)setDelegate:(id)fp8; +- (void)writeBytes:(const char *)fp8 length:(unsigned int)fp12; + +@end + diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/Specifications.h b/antlr-3.1.3/runtime/ObjC/Xcode plugin/Specifications.h new file mode 100644 index 0000000..20f1714 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/Specifications.h @@ -0,0 +1,466 @@ +// [The "BSD licence"] +// Copyright (c) 2006 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +@interface XCSpecification : NSObject +{ + NSString *_identifier; + XCSpecification *_superSpecification; + NSDictionary *_properties; + NSDictionary *_localizationDictionary; + NSBundle *_bundle; +} + ++ (Class)specificationTypeBaseClass; ++ (id)specificationType; ++ (id)localizedSpecificationTypeName; ++ (id)specificationTypePathExtensions; ++ (id)specificationRegistry; ++ (id)_typesToSpecTypeBaseClassesRegistry; ++ (id)_pathExensionsToTypesRegistry; ++ (void)registerSpecificationTypeBaseClass:(Class)fp8; ++ (void)registerSpecificationOrProxy:(id)fp8; ++ (id)registerSpecificationProxyFromPropertyList:(id)fp8; ++ (id)_registerSpecificationProxiesOfType:(id)fp8 fromDictionaryOrArray:(id)fp12 inDirectory:(id)fp16 bundle:(id)fp20 sourceDescription:(id)fp24; ++ (id)registerSpecificationProxiesFromPropertyListsInDirectory:(id)fp8 recursively:(BOOL)fp12 inBundle:(id)fp16; ++ (id)registerSpecificationProxiesFromPropertyListsInDirectory:(id)fp8 recursively:(BOOL)fp12; ++ (id)specificationForIdentifier:(id)fp8; ++ (id)specificationsForIdentifiers:(id)fp8; ++ (id)registeredSpecifications; ++ (id)_subSpecificationsOfSpecification:(id)fp8; ++ (id)registeredBaseSpecifications; ++ (id)allRegisteredSpecifications; ++ (void)loadSpecificationsWithProperty:(id)fp8; ++ (BOOL)_booleanValueForValue:(id)fp8; +- (id)initWithPropertyListDictionary:(id)fp8; +- (id)initAsMissingSpecificationProxyWithIdentifier:(id)fp8 name:(id)fp12 description:(id)fp16; +- (id)init; +- (void)dealloc; +- (void)finalize; +- (id)superSpecification; +- (id)subSpecifications; +- (BOOL)isKindOfSpecification:(id)fp8; +- (BOOL)isAbstract; +- (BOOL)isNotYetLoadedSpecificationProxy; +- (id)loadedSpecification; +- (BOOL)isMissingSpecificationProxy; +- (id)identifier; +- (id)properties; +- (id)localizationDictionary; +- (id)bundle; +- (id)name; +- (id)localizedDescription; +- (int)identifierCompare:(id)fp8; +- (int)nameCompare:(id)fp8; +- (id)_objectForKeyIgnoringInheritance:(id)fp8; +- (id)objectForKey:(id)fp8; +- (id)stringForKey:(id)fp8; +- (id)arrayForKey:(id)fp8; +- (id)dictionaryForKey:(id)fp8; +- (id)dataForKey:(id)fp8; +- (int)integerForKey:(id)fp8; +- (long long)longLongForKey:(id)fp8; +- (float)floatForKey:(id)fp8; +- (double)doubleForKey:(id)fp8; +- (BOOL)boolForKey:(id)fp8; +- (BOOL)boolForKeyFromProxy:(id)fp8; +- (id)arrayOrStringForKey:(id)fp8; +- (id)valueForUndefinedKey:(id)fp8; +- (id)description; + +@end + +@interface XCPropertyDomainSpecification : XCSpecification +{ + NSDictionary *_buildOptions; + NSArray *_orderedBuildOptions; + NSArray *_optionNamesForCommandLine; + NSArray *_commonBuildOptions; + NSArray *_buildOptionCategories; + XCPropertyDomainSpecification *_specForUserInterface; + NSDictionary *_flattenedBuildOptions; + NSArray *_flattenedOrderedBuildOptions; + NSArray *_flattenedCommonBuildOptions; + NSArray *_flattenedOptionNamesForCommandLine; + NSArray *_flattenedOptionCategories; + NSDictionary *_flattenedDefaultValues; +} + ++ (Class)specificationTypeBaseClass; ++ (id)specificationType; ++ (id)localizedSpecificationTypeName; ++ (id)specificationTypePathExtensions; ++ (id)specificationRegistry; +- (id)initWithPropertyListDictionary:(id)fp8; +- (void)dealloc; +- (id)buildOptions; +- (id)buildOptionNamed:(id)fp8; +- (id)orderedBuildOptions; +- (id)commonBuildOptions; +- (id)buildOptionCategories; +- (id)flattenedOptionCategories; +- (id)namesOfBuildOptionsForCommandLine; +- (id)namesOfFlattenedOptionsForCommandLine; +- (id)specificationToShowInUserInterface; +- (id)defaultValuesForAllOptions; +- (id)_expandedValueForCommandLineBuildOptionNamed:(id)fp8 inBuildContext:(id)fp12; +- (id)commandLineForAutogeneratedOptionsForKey:(id)fp8 inTargetBuildContext:(id)fp12; + +@end + +@interface XCCommandLineToolSpecification : XCPropertyDomainSpecification +{ + Class _commandInvocationClass; + NSArray *_outputParserClassesOrRules; +} + ++ (Class)specificationTypeBaseClass; ++ (id)specificationType; ++ (id)localizedSpecificationTypeName; ++ (id)specificationTypePathExtensions; ++ (id)specificationRegistry; ++ (id)unionedDefaultValuesForAllPropertiesForAllTools; +- (id)initWithPropertyListDictionary:(id)fp8; +- (void)dealloc; +- (id)path; +- (Class)commandInvocationClass; +- (id)commandOutputParserClassesOrParseRules; +- (id)hashStringForCommandLineComponents:(id)fp8 inputFilePaths:(id)fp12 inTargetBuildContext:(id)fp16; +- (id)_expandedValueForCommandLineBuildOptionNamed:(id)fp8 inBuildContext:(id)fp12; +- (id)commandLineForAutogeneratedOptionsInTargetBuildContext:(id)fp8; +- (BOOL)areOutputFilesAffectedByCommandLineArgument:(id)fp8; +- (BOOL)areOutputFilesAffectedByEnvironmentVariable:(id)fp8; +- (id)instantiatedCommandOutputParserWithDelegate:(id)fp8; +- (void)_addNameToDefaultValueMappingsToMutableDictionary:(id)fp8; +- (id)createCommandsInBuildContext:(id)fp8; +- (unsigned int)concurrentExecutionCountInTargetBuildContext:(id)fp8; + +@end + +@interface XCCompilerSpecification : XCCommandLineToolSpecification +{ + NSMutableArray *_inputFileTypes; +} + ++ (Class)specificationTypeBaseClass; ++ (id)specificationType; ++ (id)localizedSpecificationTypeName; ++ (id)specificationTypePathExtensions; ++ (id)specificationRegistry; ++ (id)displaySpecifications; +- (id)initWithPropertyListDictionary:(id)fp8; +- (void)dealloc; +- (id)inputFileTypes; +- (BOOL)acceptsInputFileType:(id)fp8; +- (BOOL)isAbstract; +- (id)builtinJambaseRuleName; +- (id)uniqueOutputBaseNameForInputFilePath:(id)fp8 inTargetBuildContext:(id)fp12; +- (id)outputFilesForInputFilePath:(id)fp8 inTargetBuildContext:(id)fp12; +- (id)executablePath; +- (id)defaultOutputDirectory; +- (id)effectiveCompilerSpecificationInPropertyExpansionContext:(id)fp8; +- (id)fileTypeForGccLanguageDialect:(id)fp8; +- (id)adjustedFileTypeForInputFileAtPath:(id)fp8 originalFileType:(id)fp12 inTargetBuildContext:(id)fp16; +- (id)computeDependenciesForInputFile:(id)fp8 ofType:(id)fp12 variant:(id)fp16 architecture:(id)fp20 outputDirectory:(id)fp24 inTargetBuildContext:(id)fp28; +- (id)computeDependenciesForFilePath:(id)fp8 ofType:(id)fp12 outputDirectory:(id)fp16 inTargetBuildContext:(id)fp20; + +@end + +@interface PBXFileType : XCSpecification +{ + NSArray *_extensions; +} + ++ (Class)specificationTypeBaseClass; ++ (id)specificationType; ++ (id)localizedSpecificationTypeName; ++ (id)specificationTypePathExtensions; ++ (id)specificationRegistry; ++ (void)registerSpecificationOrProxy:(id)fp8; ++ (id)_extensionToFileTypeDictionary; ++ (id)_lowercasedExtensionToFileTypeDictionary; ++ (id)_magicWordToFileTypeDictionary; ++ (id)_fileNamePatternToFileTypeDictionary; ++ (id)_fileTypeDetectorArray; ++ (id)genericFileType; ++ (id)textFileType; ++ (id)genericFolderType; ++ (id)wrapperFolderType; ++ (id)bestFileTypeForRepresentingFileAtPath:(id)fp8 withFileAttributes:(id)fp12 withLessSpecificFileType:(id)fp16 getExtraFileProperties:(id *)fp20; ++ (id)fileTypeForFileName:(id)fp8 posixPermissions:(unsigned int)fp12 hfsTypeCode:(unsigned long)fp16 hfsCreatorCode:(unsigned long)fp20; ++ (id)fileTypeForFileName:(id)fp8; ++ (id)guessFileTypeForGenericFileAtPath:(id)fp8 withFileAttributes:(id)fp12 getExtraFileProperties:(id *)fp16; ++ (id)fileTypeForPath:(id)fp8 getExtraFileProperties:(id *)fp12; ++ (id)fileTypeForPath:(id)fp8; +- (id)initWithPropertyListDictionary:(id)fp8; +- (void)dealloc; +- (void)finalize; +- (id)extensions; +- (id)hfsTypeCodes; +- (BOOL)isBundle; +- (BOOL)isApplication; +- (BOOL)isLibrary; +- (BOOL)isDynamicLibrary; +- (BOOL)isStaticLibrary; +- (BOOL)isFramework; +- (BOOL)isStaticFramework; +- (BOOL)isProjectWrapper; +- (BOOL)isTargetWrapper; +- (BOOL)isExecutable; +- (BOOL)isExecutableWithGUI; +- (BOOL)isPlainFile; +- (BOOL)isTextFile; +- (BOOL)isSourceCode; +- (BOOL)isDocumentation; +- (BOOL)isFolder; +- (BOOL)isNonWrapperFolder; +- (BOOL)isWrapperFolder; +- (BOOL)includeInIndex; +- (BOOL)isTransparent; +- (BOOL)canSetIncludeInIndex; +- (id)languageSpecificationIdentifier; +- (BOOL)isScannedForIncludes; +- (BOOL)requiresHardTabs; +- (id)extraPropertyNames; +- (id)subpathForWrapperPart:(int)fp8 ofPath:(id)fp12 withExtraFileProperties:(id)fp16; +- (id)fileTypePartForIdentifier:(id)fp8; +- (id)_objectForKeyIgnoringInheritance:(id)fp8; +- (id)description; + +@end + +@protocol XCProductPartOwners +- (id)productPartForIdentifier:(id)fp8; +- (id)subpartsForProductPart:(id)fp8; +@end + + +@interface XCProductTypeSpecification : XCSpecification +{ + NSDictionary *_defaultBuildSettings; + NSDictionary *_flattenedDefaultBuildSettings; + NSSet *_allowedBuildPhaseClasses; + NSArray *_packageTypes; + NSArray *_productParts; +} + ++ (Class)specificationTypeBaseClass; ++ (id)specificationType; ++ (id)localizedSpecificationTypeName; ++ (id)specificationTypePathExtensions; ++ (id)specificationRegistry; +- (id)initWithPropertyListDictionary:(id)fp8; +- (void)dealloc; +- (id)defaultTargetName; +- (id)defaultBuildSettings; +- (id)allowedBuildPhaseClasses; +- (id)packageTypes; +- (id)defaultPackageType; +- (id)productParts; +- (id)productPartForIdentifier:(id)fp8; +- (id)subpartsForProductPart:(id)fp8; +- (BOOL)hasInfoPlist; +- (id)iconNamePrefix; +- (void)computeDependenciesInTargetBuildContext:(id)fp8; +- (void)initializeTemporaryBuildSettingsInTargetBuildContext:(id)fp8; +- (void)initializeBuildSettingsInTargetBuildContext:(id)fp8; +- (void)computeProductDependenciesInTargetBuildContext:(id)fp8; +- (void)initializeSearchPathBuildSettingsInTargetBuildContext:(id)fp8; +- (id)_prependSDKPackageToPath:(id)fp8 inTargetBuildContext:(id)fp12; +- (void)_alterSearchPaths:(id)fp8 toUseSDKPackageInTargetBuildContext:(id)fp12; +- (void)alterBuildSettingsToUseSDKPackageInTargetBuildContext:(id)fp8; +- (void)defineAuxiliaryFilesInTargetBuildContext:(id)fp8; +- (void)copyAsideProductInTargetBuildContext:(id)fp8; +- (void)generateDSYMFileForLinkedProductInTargetBuildContext:(id)fp8; +- (void)editSymbolsOfLinkedProductInTargetBuildContext:(id)fp8; +- (void)ranlibLinkedProductInTargetBuildContext:(id)fp8; +- (void)separatelyStripSymbolsOfLinkedProductInTargetBuildContext:(id)fp8; +- (void)_computeDependenciesForOwner:(id)fp8 group:(id)fp12 mode:(id)fp16 onFile:(id)fp20 inTargetBuildContext:(id)fp24; +- (void)changePermissionsOnProductInTargetBuildContext:(id)fp8; +- (void)computeSymlinkDependenciesInTargetBuildContext:(id)fp8; +- (id)computeProductTouchActionInTargetBuildContext:(id)fp8; +- (void)compileAuxiliaryFilesForVariant:(id)fp8 architecture:(id)fp12 inTargetBuildContext:(id)fp16; +- (BOOL)shouldStripSymbolsOfLinkedProductInTargetBuildContext:(id)fp8 separately:(char *)fp12; +- (id)linkerSpecificationForObjectFilesInTargetBuildContext:(id)fp8; +- (void)addBaseLinkerFlagsInTargetBuildContext:(id)fp8; +- (void)addWarningLinkerFlagsInTargetBuildContext:(id)fp8; +- (void)addInstallNameLinkerFlagsInTargetBuildContext:(id)fp8; +- (id)createUniversalBinaryFromThinBinaries:(id)fp8 inTargetBuildContext:(id)fp12; + +@end + +@class PBXLexicalRules; + +@interface PBXLanguageSpecification : XCSpecification +{ + NSDictionary *_syntaxColoringRules; + NSDictionary *_indentationRules; + NSString *_scannerClassName; + Class _scannerClass; + NSString *_lexerClassName; + Class _lexerClass; + PBXLexicalRules *_lexRules; + BOOL _supportsSyntaxAwareIndenting; +} + ++ (Class)specificationTypeBaseClass; ++ (id)specificationType; ++ (id)localizedSpecificationTypeName; ++ (id)specificationTypePathExtensions; ++ (id)specificationRegistry; +- (id)initWithPropertyListDictionary:(id)fp8; +- (void)dealloc; +- (void)finalize; +- (id)syntaxColoringRules; +- (id)indentationRules; +- (BOOL)supportsSyntaxAwareIndenting; +- (id)sourceScanner; +- (id)sourceLexer; +- (id)loadBaseLexicalRules; +- (id)lexicalRules; + +@end + +@interface PBXPackageTypeSpecification : XCSpecification +{ + NSDictionary *_defaultBuildSettings; + NSDictionary *_flattenedDefaultBuildSettings; + NSString *_productReferenceFileTypeIdentifier; + PBXFileType *_productReferenceFileType; + NSString *_productReferenceName; + BOOL _productReferenceIsLaunchable; +} + ++ (Class)specificationTypeBaseClass; ++ (id)specificationType; ++ (id)localizedSpecificationTypeName; ++ (id)specificationTypePathExtensions; ++ (id)specificationRegistry; ++ (id)wrapperSubpathForWrapperPart:(int)fp8; +- (id)initWithPropertyListDictionary:(id)fp8; +- (void)dealloc; +- (void)finalize; +- (id)defaultBuildSettings; +- (id)productReferenceFileType; +- (id)productReferenceName; +- (BOOL)productReferenceIsLaunchable; + +@end + +@interface PBXRuntimeSystemSpecification : XCSpecification +{ +} + ++ (Class)specificationTypeBaseClass; ++ (id)specificationType; ++ (id)localizedSpecificationTypeName; ++ (id)specificationTypePathExtensions; ++ (id)specificationRegistry; ++ (id)nativeRuntimeSystemSpecificaton; +- (id)infoPlistKey; +- (id)specificResourcePath; + +@end + +@interface PBXBuildSettingsPaneSpecification : XCSpecification +{ + NSString *_settingsDomainPath; + NSString *_paneClassName; + NSString *_paneFollows; + NSArray *_widgets; +} + ++ (Class)specificationBaseClass; ++ (id)specificationType; ++ (id)localizedSpecificationTypeName; ++ (id)specificationTypePathExtensions; ++ (id)specificationRegistry; ++ (id)registeredSpecificationsSorted; +- (id)initWithPropertyListDictionary:(id)fp8; +- (void)dealloc; +- (void)finalize; +- (id)name; +- (id)settingsDomainPath; +- (id)paneClassName; +- (Class)paneClass; +- (id)paneFollows; +- (id)widgets; + +@end + +@interface PBXSCMSpecification : XCSpecification +{ + NSString *_classBaseName; + BOOL _canAddDirectories; + BOOL _canRenameFiles; +} + ++ (Class)specificationTypeBaseClass; ++ (id)specificationType; ++ (id)localizedSpecificationTypeName; ++ (id)specificationTypePathExtensions; ++ (id)specificationRegistry; +- (id)initWithPropertyListDictionary:(id)fp8; +- (void)dealloc; +- (void)finalize; +- (id)classBaseName; +- (BOOL)canAddDirectories; +- (BOOL)canRenameFiles; + +@end + +@interface XCArchitectureSpecification : XCSpecification +{ + unsigned int _byteOrder; +} + ++ (Class)specificationTypeBaseClass; ++ (id)specificationType; ++ (id)localizedSpecificationTypeName; ++ (id)specificationTypePathExtensions; ++ (id)specificationRegistry; +- (id)initWithPropertyListDictionary:(id)fp8; +- (void)dealloc; +- (unsigned int)byteOrder; + +@end + +@interface XCPlatformSpecification : XCSpecification +{ + NSArray *_architectures; +} + ++ (Class)specificationTypeBaseClass; ++ (id)specificationType; ++ (id)localizedSpecificationTypeName; ++ (id)specificationTypePathExtensions; ++ (id)specificationRegistry; +- (id)initWithPropertyListDictionary:(id)fp8; +- (void)dealloc; +- (id)architectures; + +@end + + diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/Xcode b/antlr-3.1.3/runtime/ObjC/Xcode plugin/Xcode new file mode 100644 index 0000000..e69de29 diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/Xcode plugin.xcodeproj/project.pbxproj b/antlr-3.1.3/runtime/ObjC/Xcode plugin/Xcode plugin.xcodeproj/project.pbxproj new file mode 100644 index 0000000..636937e --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/Xcode plugin.xcodeproj/project.pbxproj @@ -0,0 +1,552 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 8D5B49B0048680CD000E48DA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; }; + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; }; + F71CBB2C0ACEED1900088951 /* DevToolsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F71CBB2B0ACEED1900088951 /* DevToolsCore.framework */; }; + F71CBB6A0ACEF5E800088951 /* ANTLRCompilerSpecification.m in Sources */ = {isa = PBXBuildFile; fileRef = F71CBB690ACEF5E800088951 /* ANTLRCompilerSpecification.m */; }; + F71CBB790ACF2D4600088951 /* antlr.pblangspec in Resources */ = {isa = PBXBuildFile; fileRef = F71CBB780ACF2D4600088951 /* antlr.pblangspec */; }; + F71CBB7D0ACF2DAE00088951 /* antlr.pbfilespec in Resources */ = {isa = PBXBuildFile; fileRef = F71CBB7C0ACF2DAE00088951 /* antlr.pbfilespec */; }; + F71CBB880ACF2EDC00088951 /* org.antlr.Tool.strings in Resources */ = {isa = PBXBuildFile; fileRef = F71CBB870ACF2EDC00088951 /* org.antlr.Tool.strings */; }; + F738D0E30B07AADD001813C4 /* GrammarFilterLexer.m in Sources */ = {isa = PBXBuildFile; fileRef = F7AC63940AD0172A00BD7A06 /* GrammarFilterLexer.m */; }; + F738D0E40B07AADE001813C4 /* GrammarFilterLexer.h in Copy Embedded Frameworks */ = {isa = PBXBuildFile; fileRef = F7AC63930AD0172A00BD7A06 /* GrammarFilterLexer.h */; }; + F770F43E0AD310A9003EF8FB /* DevToolsSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F770F43D0AD310A9003EF8FB /* DevToolsSupport.framework */; }; + F794E92C0ACF38D900E06CD7 /* antlr.xcbuildrules in Resources */ = {isa = PBXBuildFile; fileRef = F71CBB800ACF2E2900088951 /* antlr.xcbuildrules */; }; + F794E92D0ACF38DA00E06CD7 /* antlr.pbcompspec in Resources */ = {isa = PBXBuildFile; fileRef = F71CBB750ACF286100088951 /* antlr.pbcompspec */; }; + F7FBB9A60AD00B9D00497048 /* ANTLR.framework in Copy Embedded Frameworks */ = {isa = PBXBuildFile; fileRef = F7FBB9510AD00A9400497048 /* ANTLR.framework */; }; + F7FBBA700AD00FD100497048 /* ANTLRXCPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = F7FBBA6E0AD00FD100497048 /* ANTLRXCPlugin.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + F7FBB9500AD00A9400497048 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F7FBB9390AD00A9400497048 /* ANTLR.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8DC2EF5B0486A6940098B216; + remoteInfo = ANTLR; + }; + F7FBB9520AD00A9400497048 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F7FBB9390AD00A9400497048 /* ANTLR.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = F70BB380098E5AFF0054FEF8; + remoteInfo = Test; + }; + F7FBB9540AD00A9400497048 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F7FBB9390AD00A9400497048 /* ANTLR.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = F7037EA00A05AFB60070435D; + remoteInfo = "lexertest-simple"; + }; + F7FBB9560AD00A9400497048 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F7FBB9390AD00A9400497048 /* ANTLR.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = F79D56600A0E23A400EA3CEE; + remoteInfo = fuzzy; + }; + F7FBB9580AD00A9400497048 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F7FBB9390AD00A9400497048 /* ANTLR.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = F700E8640A5FA31D005D0757; + remoteInfo = combined; + }; + F7FBB95A0AD00A9400497048 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F7FBB9390AD00A9400497048 /* ANTLR.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = F700ECD70A5FE186005D0757; + remoteInfo = "LL-star"; + }; + F7FBB95C0AD00A9400497048 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F7FBB9390AD00A9400497048 /* ANTLR.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = F7DD05EE0A7B15E1006A006C; + remoteInfo = hoistedPredicates; + }; + F7FBB95E0AD00A9400497048 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F7FBB9390AD00A9400497048 /* ANTLR.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = F7DD07440A7B6618006A006C; + remoteInfo = scopes; + }; + F7FBB9600AD00A9400497048 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F7FBB9390AD00A9400497048 /* ANTLR.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = F7278F840A881AFA00575EAE; + remoteInfo = returnscopes; + }; + F7FBB9620AD00A9400497048 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F7FBB9390AD00A9400497048 /* ANTLR.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = F72C5E690AB7E4C900282574; + remoteInfo = "simplec tree"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + F7FBB9660AD00AC800497048 /* Copy Embedded Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F7FBB9A60AD00B9D00497048 /* ANTLR.framework in Copy Embedded Frameworks */, + F738D0E40B07AADE001813C4 /* GrammarFilterLexer.h in Copy Embedded Frameworks */, + ); + name = "Copy Embedded Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; + 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 32DBCF630370AF2F00C91783 /* Xcode plugin_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Xcode plugin_Prefix.pch"; sourceTree = ""; }; + 8D5B49B6048680CD000E48DA /* ANTLR.pbplugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ANTLR.pbplugin; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; + F71CBB2B0ACEED1900088951 /* DevToolsCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DevToolsCore.framework; path = /System/Library/PrivateFrameworks/DevToolsCore.framework; sourceTree = ""; }; + F71CBB400ACEEE2300088951 /* BuildSystemInterfaces.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BuildSystemInterfaces.h; sourceTree = ""; }; + F71CBB430ACEEF2500088951 /* DependencyGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DependencyGraph.h; sourceTree = ""; }; + F71CBB480ACEF14C00088951 /* Specifications.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Specifications.h; sourceTree = ""; }; + F71CBB680ACEF5E800088951 /* ANTLRCompilerSpecification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRCompilerSpecification.h; sourceTree = ""; }; + F71CBB690ACEF5E800088951 /* ANTLRCompilerSpecification.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRCompilerSpecification.m; sourceTree = ""; }; + F71CBB750ACF286100088951 /* antlr.pbcompspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = antlr.pbcompspec; sourceTree = ""; }; + F71CBB780ACF2D4600088951 /* antlr.pblangspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.pblangspec; path = antlr.pblangspec; sourceTree = ""; }; + F71CBB7C0ACF2DAE00088951 /* antlr.pbfilespec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.pbfilespec; path = antlr.pbfilespec; sourceTree = ""; }; + F71CBB800ACF2E2900088951 /* antlr.xcbuildrules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = antlr.xcbuildrules; sourceTree = ""; }; + F71CBB830ACF2EAE00088951 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/org.antlr.Tool.strings; sourceTree = ""; }; + F770F3D50AD187CC003EF8FB /* OutputParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OutputParser.h; sourceTree = ""; }; + F770F43D0AD310A9003EF8FB /* DevToolsSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DevToolsSupport.framework; path = /System/Library/PrivateFrameworks/DevToolsSupport.framework; sourceTree = ""; }; + F7AC63580AD0112000BD7A06 /* GrammarFilter.g */ = {isa = PBXFileReference; explicitFileType = sourcecode.antlr3; fileEncoding = 4; path = GrammarFilter.g; sourceTree = ""; }; + F7AC63920AD0172A00BD7A06 /* GrammarFilter.tokens */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = GrammarFilter.tokens; sourceTree = ""; }; + F7AC63930AD0172A00BD7A06 /* GrammarFilterLexer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GrammarFilterLexer.h; sourceTree = ""; }; + F7AC63940AD0172A00BD7A06 /* GrammarFilterLexer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GrammarFilterLexer.m; sourceTree = ""; }; + F7FBB9390AD00A9400497048 /* ANTLR.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ANTLR.xcodeproj; path = ../Framework/ANTLR.xcodeproj; sourceTree = SOURCE_ROOT; }; + F7FBBA6D0AD00FD100497048 /* ANTLRXCPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTLRXCPlugin.h; sourceTree = ""; }; + F7FBBA6E0AD00FD100497048 /* ANTLRXCPlugin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTLRXCPlugin.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D5B49B3048680CD000E48DA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */, + F71CBB2C0ACEED1900088951 /* DevToolsCore.framework in Frameworks */, + F770F43E0AD310A9003EF8FB /* DevToolsSupport.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 089C166AFE841209C02AAC07 /* Xcode plugin */ = { + isa = PBXGroup; + children = ( + F7FBB9390AD00A9400497048 /* ANTLR.xcodeproj */, + F71CBB2E0ACEEDA000088951 /* Xcode Plugin API */, + 08FB77AFFE84173DC02AAC07 /* Classes */, + 32C88E010371C26100C91783 /* Other Sources */, + 089C167CFE841241C02AAC07 /* Resources */, + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */, + 19C28FB8FE9D52D311CA2CBB /* Products */, + ); + name = "Xcode plugin"; + sourceTree = ""; + }; + 089C1671FE841209C02AAC07 /* Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */, + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */, + ); + name = "Frameworks and Libraries"; + sourceTree = ""; + }; + 089C167CFE841241C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 8D5B49B7048680CD000E48DA /* Info.plist */, + 089C167DFE841241C02AAC07 /* InfoPlist.strings */, + F71CBB750ACF286100088951 /* antlr.pbcompspec */, + F71CBB780ACF2D4600088951 /* antlr.pblangspec */, + F71CBB7C0ACF2DAE00088951 /* antlr.pbfilespec */, + F71CBB800ACF2E2900088951 /* antlr.xcbuildrules */, + F71CBB870ACF2EDC00088951 /* org.antlr.Tool.strings */, + ); + name = Resources; + sourceTree = ""; + }; + 08FB77AFFE84173DC02AAC07 /* Classes */ = { + isa = PBXGroup; + children = ( + F7AC63540AD010C400BD7A06 /* Grammar Inspection */, + F71CBB680ACEF5E800088951 /* ANTLRCompilerSpecification.h */, + F71CBB690ACEF5E800088951 /* ANTLRCompilerSpecification.m */, + F7FBBA6D0AD00FD100497048 /* ANTLRXCPlugin.h */, + F7FBBA6E0AD00FD100497048 /* ANTLRXCPlugin.m */, + ); + name = Classes; + sourceTree = ""; + }; + 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + F770F43D0AD310A9003EF8FB /* DevToolsSupport.framework */, + F71CBB2B0ACEED1900088951 /* DevToolsCore.framework */, + 089C167FFE841241C02AAC07 /* AppKit.framework */, + 089C1672FE841209C02AAC07 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 19C28FB8FE9D52D311CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D5B49B6048680CD000E48DA /* ANTLR.pbplugin */, + ); + name = Products; + sourceTree = ""; + }; + 32C88E010371C26100C91783 /* Other Sources */ = { + isa = PBXGroup; + children = ( + 32DBCF630370AF2F00C91783 /* Xcode plugin_Prefix.pch */, + ); + name = "Other Sources"; + sourceTree = ""; + }; + F71CBB2E0ACEEDA000088951 /* Xcode Plugin API */ = { + isa = PBXGroup; + children = ( + F71CBB400ACEEE2300088951 /* BuildSystemInterfaces.h */, + F71CBB430ACEEF2500088951 /* DependencyGraph.h */, + F71CBB480ACEF14C00088951 /* Specifications.h */, + F770F3D50AD187CC003EF8FB /* OutputParser.h */, + ); + name = "Xcode Plugin API"; + sourceTree = ""; + }; + F7AC63540AD010C400BD7A06 /* Grammar Inspection */ = { + isa = PBXGroup; + children = ( + F7AC63920AD0172A00BD7A06 /* GrammarFilter.tokens */, + F7AC63930AD0172A00BD7A06 /* GrammarFilterLexer.h */, + F7AC63940AD0172A00BD7A06 /* GrammarFilterLexer.m */, + F7AC63580AD0112000BD7A06 /* GrammarFilter.g */, + ); + name = "Grammar Inspection"; + sourceTree = ""; + }; + F7FBB93A0AD00A9400497048 /* Products */ = { + isa = PBXGroup; + children = ( + F7FBB9510AD00A9400497048 /* ANTLR.framework */, + F7FBB9530AD00A9400497048 /* Test.octest */, + F7FBB9550AD00A9400497048 /* lexertest-simple */, + F7FBB9570AD00A9400497048 /* fuzzy */, + F7FBB9590AD00A9400497048 /* combined */, + F7FBB95B0AD00A9400497048 /* LL-star */, + F7FBB95D0AD00A9400497048 /* hoistedPredicates */, + F7FBB95F0AD00A9400497048 /* scopes */, + F7FBB9610AD00A9400497048 /* returnscopes */, + F7FBB9630AD00A9400497048 /* simplectree */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8D5B49AC048680CD000E48DA /* ANTLR Xcode plugin */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "ANTLR Xcode plugin" */; + buildPhases = ( + 8D5B49AF048680CD000E48DA /* Resources */, + F7FBB9660AD00AC800497048 /* Copy Embedded Frameworks */, + 8D5B49B1048680CD000E48DA /* Sources */, + 8D5B49B3048680CD000E48DA /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "ANTLR Xcode plugin"; + productInstallPath = "$(HOME)/Library/Bundles"; + productName = "Xcode plugin"; + productReference = 8D5B49B6048680CD000E48DA /* ANTLR.pbplugin */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 089C1669FE841209C02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "Xcode plugin" */; + hasScannedForEncodings = 1; + mainGroup = 089C166AFE841209C02AAC07 /* Xcode plugin */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = F7FBB93A0AD00A9400497048 /* Products */; + ProjectRef = F7FBB9390AD00A9400497048 /* ANTLR.xcodeproj */; + }, + ); + targets = ( + 8D5B49AC048680CD000E48DA /* ANTLR Xcode plugin */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + F7FBB9510AD00A9400497048 /* ANTLR.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = ANTLR.framework; + remoteRef = F7FBB9500AD00A9400497048 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + F7FBB9530AD00A9400497048 /* Test.octest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = Test.octest; + remoteRef = F7FBB9520AD00A9400497048 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + F7FBB9550AD00A9400497048 /* lexertest-simple */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = "lexertest-simple"; + remoteRef = F7FBB9540AD00A9400497048 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + F7FBB9570AD00A9400497048 /* fuzzy */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = fuzzy; + remoteRef = F7FBB9560AD00A9400497048 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + F7FBB9590AD00A9400497048 /* combined */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = combined; + remoteRef = F7FBB9580AD00A9400497048 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + F7FBB95B0AD00A9400497048 /* LL-star */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = "LL-star"; + remoteRef = F7FBB95A0AD00A9400497048 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + F7FBB95D0AD00A9400497048 /* hoistedPredicates */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = hoistedPredicates; + remoteRef = F7FBB95C0AD00A9400497048 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + F7FBB95F0AD00A9400497048 /* scopes */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = scopes; + remoteRef = F7FBB95E0AD00A9400497048 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + F7FBB9610AD00A9400497048 /* returnscopes */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = returnscopes; + remoteRef = F7FBB9600AD00A9400497048 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + F7FBB9630AD00A9400497048 /* simplectree */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = simplectree; + remoteRef = F7FBB9620AD00A9400497048 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D5B49AF048680CD000E48DA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D5B49B0048680CD000E48DA /* InfoPlist.strings in Resources */, + F71CBB790ACF2D4600088951 /* antlr.pblangspec in Resources */, + F71CBB7D0ACF2DAE00088951 /* antlr.pbfilespec in Resources */, + F71CBB880ACF2EDC00088951 /* org.antlr.Tool.strings in Resources */, + F794E92C0ACF38D900E06CD7 /* antlr.xcbuildrules in Resources */, + F794E92D0ACF38DA00E06CD7 /* antlr.pbcompspec in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D5B49B1048680CD000E48DA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F71CBB6A0ACEF5E800088951 /* ANTLRCompilerSpecification.m in Sources */, + F7FBBA700AD00FD100497048 /* ANTLRXCPlugin.m in Sources */, + F738D0E30B07AADD001813C4 /* GrammarFilterLexer.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 089C167DFE841241C02AAC07 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 089C167EFE841241C02AAC07 /* English */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + F71CBB870ACF2EDC00088951 /* org.antlr.Tool.strings */ = { + isa = PBXVariantGroup; + children = ( + F71CBB830ACF2EAE00088951 /* English */, + ); + name = org.antlr.Tool.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 1DEB913B08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ANTLR_EXTRA_JAVA_ARGS = "/Users/kroepke/Projects/idea/antlr3/classes:/Users/kroepke/Projects/idea/stringtemplate/classes:/usr/local/lib/antlr.jar"; + ANTLR_FORCE_OUT_DIR = "$(PROJECT_DIR)"; + ANTLR_LIB_DIR = "$(PROJECT_DIR)"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = stabs; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\""; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Xcode plugin_Prefix.pch"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + OTHER_LDFLAGS = ( + "-undefined", + dynamic_lookup, + ); + PRODUCT_NAME = ANTLR; + WRAPPER_EXTENSION = pbplugin; + ZERO_LINK = NO; + }; + name = Debug; + }; + 1DEB913C08733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ANTLR_EXTRA_JAVA_ARGS = "/Users/kroepke/Projects/idea/antlr3/classes:/Users/kroepke/Projects/idea/stringtemplate/classes:/usr/local/lib/antlr.jar"; + ARCHS = ( + ppc, + i386, + ); + DEBUG_INFORMATION_FORMAT = stabs; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_1)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_2)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_1 = "\"$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\""; + FRAMEWORK_SEARCH_PATHS_QUOTED_2 = "\"$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\""; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Xcode plugin_Prefix.pch"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Library/Bundles"; + PRODUCT_NAME = ANTLR; + WRAPPER_EXTENSION = pbplugin; + ZERO_LINK = NO; + }; + name = Release; + }; + 1DEB913F08733D840010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Debug; + }; + 1DEB914008733D840010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "ANTLR Xcode plugin" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913B08733D840010E9CD /* Debug */, + 1DEB913C08733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "Xcode plugin" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB913F08733D840010E9CD /* Debug */, + 1DEB914008733D840010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 089C1669FE841209C02AAC07 /* Project object */; +} diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/Xcode plugin_Prefix.pch b/antlr-3.1.3/runtime/ObjC/Xcode plugin/Xcode plugin_Prefix.pch new file mode 100644 index 0000000..d4d795b --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/Xcode plugin_Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'Xcode plugin' target in the 'Xcode plugin' project. +// + +#ifdef __OBJC__ + #import +#endif diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/antlr.pbcompspec b/antlr-3.1.3/runtime/ObjC/Xcode plugin/antlr.pbcompspec new file mode 100644 index 0000000..54e92aa --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/antlr.pbcompspec @@ -0,0 +1,184 @@ +// [The "BSD licence"] +// Copyright (c) 2006 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +( + { + Identifier = org.antlr.Tool; + Class = ANTLRCompilerSpecification; + Name = "ANTLR"; + Description = "ANTLR v3 grammar compiler"; + Version = "Default"; + Vendor = "The ANTLR Project"; + Languages = (antlr3); + FileTypes = (sourcecode.antlr3); + ExecPath = "/usr/bin/java"; + CommandOutputParser = XCGccCommandOutputParser; + OptionsForCommandLine = ( + ANTLR_EXTRA_JAVA_ARGS, ANTLR_FORCE_OUT_DIR, ANTLR_LIB_DIR, ANTLR_VERBOSE, ANTLR_NFA_DOT, ANTLR_DFA_DOT, ANTLR_DEBUG, ANTLR_TRACE, ANTLR_REPORT, + ANTLR_X_GRTREE, ANTLR_X_DFA, ANTLR_X_NOPRUNE, ANTLR_X_NOCOLLAPSE, ANTLR_X_DBGCONVERSION, ANTLR_X_NFA_MULTITHREADED, ANTLR_X_DFAVERBOSE, + ANTLR_X_WATCHCONVERSION, ANTLR_X_DEBUG_ST + ); + Options = { + ANTLR_EXTRA_JAVA_ARGS = { + Type = stringlist; + DefaultValue = ""; + CommonOption = YES; + }; + ANTLR_FORCE_OUT_DIR = { + Type = path; + DefaultValue = "$(DERIVED_FILE_DIR)"; + AvoidEmptyValue = YES; + CommandLineArgs = (-fo, "$(value)"); + CommonOption = YES; + }; +/* ANTLR_OUT_DIR = { + Type = stringlist; + DefaultValue = "$(DERIVED_FILE_DIR)"; + AvoidEmptyValue = YES; + CommandLineArgs = (-o, "$(value)"); + CommonOption = YES; + }; +*/ ANTLR_LIB_DIR = { + Type = path; + DefaultValue = "$(DERIVED_FILE_DIR)"; + AvoidEmptyValue = YES; + CommandLineArgs = (-lib, "$(value)"); + CommonOption = YES; + }; + ANTLR_VERBOSE = { + Type = bool; + DefaultValue = NO; + CommandLineArgs = { NO = (); YES = (-verbose); }; + CommonOption = YES; + }; + ANTLR_NFA_DOT = { + Type = bool; + DefaultValue = NO; + CommandLineArgs = { NO = (); YES = (-nfa); }; + CommonOption = YES; + }; + ANTLR_DFA_DOT = { + Type = bool; + DefaultValue = NO; + CommandLineArgs = { NO = (); YES = (-dfa); }; + CommonOption = YES; + }; + ANTLR_DEBUG = { + Type = bool; + DefaultValue = NO; + CommandLineArgs = { NO = (); YES = (-debug); }; + CommonOption = YES; + }; + ANTLR_TRACE = { + Type = bool; + DefaultValue = NO; + CommandLineArgs = { NO = (); YES = (-trace); }; + CommonOption = YES; + }; + ANTLR_REPORT = { + Type = bool; + DefaultValue = NO; + CommandLineArgs = { NO = (); YES = (-report); }; + CommonOption = YES; + }; + ANTLR_X_GRTREE = { + Type = bool; + DefaultValue = NO; + CommandLineArgs = { NO = (); YES = (-Xgrtree); }; + CommonOption = YES; + }; +/* ANTLR_X_DFA = { + Type = bool; + DefaultValue = NO; + CommandLineArgs = { NO = (); YES = (-Xdfa); }; + CommonOption = YES; + }; + ANTLR_X_NOPRUNE = { + Type = bool; + DefaultValue = NO; + CommandLineArgs = { NO = (); YES = (-Xnoprune); }; + CommonOption = YES; + }; + ANTLR_X_NOCOLLAPSE = { + Type = bool; + DefaultValue = NO; + CommandLineArgs = { NO = (); YES = (-Xnocollapse); }; + CommonOption = YES; + }; + ANTLR_X_DBGCONVERSION = { + Type = bool; + DefaultValue = NO; + CommandLineArgs = { NO = (); YES = (-Xdbgconversion); }; + CommonOption = YES; + }; + ANTLR_X_NFA_MULTITHREADED = { + Type = bool; + DefaultValue = NO; + CommandLineArgs = { NO = (); YES = (-Xmultithreaded); }; + CommonOption = YES; + }; + ANTLR_X_DFAVERBOSE = { + Type = bool; + DefaultValue = NO; + CommandLineArgs = { NO = (); YES = (-Xdfaverbose); }; + CommonOption = YES; + }; + ANTLR_X_WATCHCONVERSION = { + Type = bool; + DefaultValue = NO; + CommandLineArgs = { NO = (); YES = (-Xwatchconversion); }; + CommonOption = YES; + }; +*/ + ANTLR_X_DEBUG_ST = { + Type = bool; + DefaultValue = NO; + CommandLineArgs = { NO = (); YES = (-XdbgST); }; + CommonOption = YES; + }; + }; + OptionCategories = ( + { Name = "Code Generation"; + IconName = "PBX-option-build"; + Options = (ANTLR_DEBUG, ANTLR_TRACE, ANTLR_X_DEBUG_ST); + }, + { Name = "Search Paths"; + IconName = "PBX-option-build"; + Options = (ANTLR_FORCE_OUT_DIR, ANTLR_LIB_DIR); + }, + { Name = "ANTLR Libaries"; + IconName = "PBX-option-build"; + Options = (ANTLR_EXTRA_JAVA_ARGS); + }, + { Name = Information; + IconName = "PBX-option-build"; + Options = ( + ANTLR_VERBOSE, ANTLR_NFA_DOT, ANTLR_DFA_DOT, ANTLR_REPORT, ANTLR_X_GRTREE + ); + }, + ); + } +) \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/antlr.pbfilespec b/antlr-3.1.3/runtime/ObjC/Xcode plugin/antlr.pbfilespec new file mode 100644 index 0000000..d67c501 --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/antlr.pbfilespec @@ -0,0 +1,36 @@ +// [The "BSD licence"] +// Copyright (c) 2006 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +( + { + Identifier = sourcecode.antlr3; + BasedOn = sourcecode; + Name = "ANTLR v3 grammar files"; + ComputerLanguage = antlr3; + AppliesToBuildRules = yes; + Extensions = (g, g3); + } +) \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/antlr.pblangspec b/antlr-3.1.3/runtime/ObjC/Xcode plugin/antlr.pblangspec new file mode 100644 index 0000000..42121ae --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/antlr.pblangspec @@ -0,0 +1,64 @@ +// [The "BSD licence"] +// Copyright (c) 2006 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +( + { + Identifier = antlr3; + Name = "ANTLR"; + Description = "ANTLR v3 grammar"; + BasedOn = "pbx_root_language"; + SupportsIndentation = NO; + Indentation = { + }; + SyntaxColoring = { + CaseSensitive = YES; + UnicodeSymbols = NO; + IndexedSymbols = NO; + CommentsCanBeNested = NO; + IdentifierStartChars = "@"; + IdentifierChars = "_"; + SingleLineComment = ( "//" ); + MultiLineComment = ( + ( "/*", "*/" ) + ); + EscapeCharacter = "\\"; + String = ( + ( "\'", "\'" ) + ); + Keywords = ( + "grammar", + "tokens", + "options", + "@lexer", + "@parser", + "@init", + "scope", + "returns", + "fragment" + ); + }; + } +) \ No newline at end of file diff --git a/antlr-3.1.3/runtime/ObjC/Xcode plugin/antlr.xcbuildrules b/antlr-3.1.3/runtime/ObjC/Xcode plugin/antlr.xcbuildrules new file mode 100644 index 0000000..385b60b --- /dev/null +++ b/antlr-3.1.3/runtime/ObjC/Xcode plugin/antlr.xcbuildrules @@ -0,0 +1,33 @@ +// [The "BSD licence"] +// Copyright (c) 2006 Kay Roepke +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +( + { + Name = "ANTLR v3 grammar rule"; + FileType = "sourcecode.antlr3"; + CompilerSpec = "org.antlr.Tool"; + } +) diff --git a/antlr-3.1.3/runtime/Perl5/.p4ignore b/antlr-3.1.3/runtime/Perl5/.p4ignore new file mode 100644 index 0000000..afa10e0 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/.p4ignore @@ -0,0 +1,8 @@ +Build +Build.bat +Makefile +Makefile.old +_build +blib +pm_to_blib +tags diff --git a/antlr-3.1.3/runtime/Perl5/Build.PL b/antlr-3.1.3/runtime/Perl5/Build.PL new file mode 100644 index 0000000..4d37ffd --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/Build.PL @@ -0,0 +1,19 @@ +use Module::Build; + +my $build = Module::Build->new( + module_name => 'ANTLR::Runtime', + license => 'perl', + requires => { + 'Carp' => '1.04', + 'Readonly' => '1.03', + 'List::MoreUtils' => '0.22', + 'Want' => '0.18', + 'Error' => '0.17014', + }, + build_requires => { + 'Test::Class' => '0.28', + 'Java::JVM::Classfile' => '0.20', + }, + test_files => 't/classes/ANTLR/Runtime/*.t t/*.t t/examples/*.t', +); +$build->create_build_script; diff --git a/antlr-3.1.3/runtime/Perl5/Changes b/antlr-3.1.3/runtime/Perl5/Changes new file mode 100644 index 0000000..e69de29 diff --git a/antlr-3.1.3/runtime/Perl5/INSTALL b/antlr-3.1.3/runtime/Perl5/INSTALL new file mode 100644 index 0000000..e69de29 diff --git a/antlr-3.1.3/runtime/Perl5/MANIFEST b/antlr-3.1.3/runtime/Perl5/MANIFEST new file mode 100644 index 0000000..38479d4 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/MANIFEST @@ -0,0 +1,67 @@ +Build.PL +Changes +INSTALL +MANIFEST This list of files +MANIFEST.SKIP +Makefile.PL +README +docs/design.pod +examples/README +examples/expr/Expr.g +examples/expr/expr.pl +examples/id/IDLexer.g +examples/id/id.pl +examples/mexpr/MExpr.g +examples/mexpr/mexpr.pl +examples/simplecalc/SimpleCalc.g +examples/simplecalc/simplecalc.pl +examples/zero-one/T.g +examples/zero-one/t-error.pl +examples/zero-one/t.pl +lib/ANTLR/Runtime.pm +lib/ANTLR/Runtime/ANTLRFileStream.pm +lib/ANTLR/Runtime/ANTLRStringStream.pm +lib/ANTLR/Runtime/BaseRecognizer.pm +lib/ANTLR/Runtime/BitSet.pm +lib/ANTLR/Runtime/CharStream.pm +lib/ANTLR/Runtime/CharStreamState.pm +lib/ANTLR/Runtime/Class.pm +lib/ANTLR/Runtime/CommonToken.pm +lib/ANTLR/Runtime/CommonTokenStream.pm +lib/ANTLR/Runtime/DFA.pm +lib/ANTLR/Runtime/EarlyExitException.pm +lib/ANTLR/Runtime/Exception.pm +lib/ANTLR/Runtime/IntStream.pm +lib/ANTLR/Runtime/Lexer.pm +lib/ANTLR/Runtime/MismatchedSetException.pm +lib/ANTLR/Runtime/MismatchedTokenException.pm +lib/ANTLR/Runtime/MissingTokenException.pm +lib/ANTLR/Runtime/NoViableAltException.pm +lib/ANTLR/Runtime/Object.pm +lib/ANTLR/Runtime/Object/Signature.pm +lib/ANTLR/Runtime/Parser.pm +lib/ANTLR/Runtime/RecognitionException.pm +lib/ANTLR/Runtime/Stream.pm +lib/ANTLR/Runtime/Token.pm +lib/ANTLR/Runtime/TokenSource.pm +lib/ANTLR/Runtime/TokenStream.pm +lib/ANTLR/Runtime/UnwantedTokenException.pm +port.yml +t/author/api.t +t/author/perlcritic.t +t/author/perlcriticrc +t/author/pod-coverage.t +t/author/pod.t +t/classes/ANTLR/Runtime/ANTLRStringStream.t +t/classes/ANTLR/Runtime/BitSet.t +t/classes/ANTLR/Runtime/Exception.t +t/classes/ANTLR/Runtime/Lexer.t +t/classes/ANTLR/Runtime/Object.t +t/examples/expr.t +t/examples/simplecalc.t +t/lexer.t +t/lib/ANTLR/Runtime/Test.pm +t/version.t +tools/antlr.bat +tools/antlr.sh +tools/port.pl diff --git a/antlr-3.1.3/runtime/Perl5/MANIFEST.SKIP b/antlr-3.1.3/runtime/Perl5/MANIFEST.SKIP new file mode 100644 index 0000000..407a77e --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/MANIFEST.SKIP @@ -0,0 +1,10 @@ +# project files +\.kpf$ + +^Makefile$ +^pm_to_blib$ +^blib/ + +# temporary and backup files +~$ +\.bak$ diff --git a/antlr-3.1.3/runtime/Perl5/Makefile.PL b/antlr-3.1.3/runtime/Perl5/Makefile.PL new file mode 100644 index 0000000..88faea6 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/Makefile.PL @@ -0,0 +1,27 @@ +use ExtUtils::MakeMaker; + +sub MY::postamble { + my $postamble = <<'MAKE_FRAG'; +.PHONY: tags + +tags: + ctags -f tags --recurse --totals \ + --exclude=blib \ + --exclude='*~' \ + --languages=Perl --langmap=Perl:+.t \ +MAKE_FRAG +} + +WriteMakefile( + NAME => 'ANTLR::Runtime', + VERSION_FROM => 'lib/ANTLR/Runtime.pm', + LICENSE => 'perl', + ABSTRACT_FROM => 'lib/ANTLR/Runtime.pm', + AUTHOR => 'Ronald Blaschke ', + PREREQ_PM => { + 'Carp' => '1.04', + 'Readonly' => '1.03', + 'Test::Class' => '0.28', + }, + test => { TESTS => 't/classes/ANTLR/Runtime/*.t t/*.t t/examples/*.t' }, +); diff --git a/antlr-3.1.3/runtime/Perl5/README b/antlr-3.1.3/runtime/Perl5/README new file mode 100644 index 0000000..9bb3fd0 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/README @@ -0,0 +1,28 @@ +ANTLR::Runtime + +This is the Perl 5 runtime for ANTLR. It is currently under early +development. Most parts are not working yet, and some of those that are need +to catch up with the current development version. The good news is that some +parts are working, as illustrated by the examples. You'd probably want to +take a look at examples/expr/. + + +KNOWN ISSUES +============ + +* Perl's syntax clashes with ANTLR's StringTemplate ('%') and variable ('$') +syntax. Expect error messages like the following. + +error(146): Expr.g:10:10: invalid StringTemplate % shorthand syntax: '%memory' +error(114): Expr.g:18:9: attribute is not a token, parameter, or return value: memory +error(114): Expr.g:36:9: attribute is not a token, parameter, or return value: v + +Currently, it's best to check the syntax of the generated code, like so: + +$ perl -c ExprLexer.pm +ExprLexer.pm syntax OK + +$ perl -c ExprParser.pm +ExprParser.pm syntax OK + +Or use the lexer/parser in an example. diff --git a/antlr-3.1.3/runtime/Perl5/docs/design.pod b/antlr-3.1.3/runtime/Perl5/docs/design.pod new file mode 100644 index 0000000..587a64f --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/docs/design.pod @@ -0,0 +1,66 @@ +=head1 NAME + +design.pod - ANTLR::Runtime Design Document + +=head1 ABSTRACT + +This document describes the design of the C Perl 5 port. + +=head1 OVERVIEW + +C is the port of the runtime part for ANTLR to Perl 5. ANTLR's +primary target language is Java. This port tries to mimic this implementation +very closely, which hopefully makes it easier to port. The parts visible to +Perl users should be perlish if possible - at least as a secondary interface. + +=head1 Basic Porting Considerations + +Java is built on two basic concepts: Objects and Exceptions. If there's a +good match for those features most other things should fall into place. + +=head2 OO + +C uses C for OO modelling. + +=head3 Packages + +The Java package C maps to the Perl 5 package +C. + +=head3 Classes + +Each Java class maps to a Perl 5 class with the same name. + +=head2 Exceptions + +C should meet our needs and is used by C +too. + +=head2 Types + +Here's a list of Java types and how they should map to Perl. + +=over + +=item byte, short, int, long, float, double, String + +Use a Perl scalar. + +=item C + +Use a reference to a Perl array. + +=item C + +Use a reference to a Perl hash. + +=back + +=head1 SEE ALSO + +L + + +=head1 AUTHOR + +Ronald Blaschke (ron@rblasch.org) diff --git a/antlr-3.1.3/runtime/Perl5/examples/README b/antlr-3.1.3/runtime/Perl5/examples/README new file mode 100644 index 0000000..ebd4150 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/examples/README @@ -0,0 +1,16 @@ +This directory contains examples for the Perl 5 code generation target. + +First you need to compile ANTLR, running "ant" in the top level directory. + +Then you need to build the Perl module. + + perl Makefile.PL + make + +After that you need to compile the grammar using ANTLR, for example by using +the antlr.bat I've added. + + cd examples\expr + ..\..\antlr Expr.g + +Finally you can run the example programs. diff --git a/antlr-3.1.3/runtime/Perl5/examples/expr/Expr.g b/antlr-3.1.3/runtime/Perl5/examples/expr/Expr.g new file mode 100644 index 0000000..030098b --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/examples/expr/Expr.g @@ -0,0 +1,50 @@ +grammar Expr; + +options { + language = Perl5; +} + +@header { +} + +@members { + my %memory; +} + +prog: stat+ ; + +stat: expr NEWLINE { print "$expr.value\n"; } + | ID '=' expr NEWLINE + { $memory{$ID.text} = $expr.value; } + | NEWLINE + ; + +expr returns [value] + : e=multExpr { $value = $e.value; } + ( '+' e=multExpr { $value += $e.value; } + | '-' e=multExpr { $value -= $e.value; } + )* + ; + +multExpr returns [value] + : e=atom { $value = $e.value; } ('*' e=atom { $value *= $e.value; })* + ; + +atom returns [value] + : INT { $value = $INT.text; } + | ID + { + my $v = $memory{$ID.text}; + if (defined $v) { + $value = $v; + } else { + print STDERR "undefined variable $ID.text\n"; + } + } + | '(' expr ')' { $value = $expr.value; } + ; + +ID : ('a'..'z'|'A'..'Z')+ ; +INT : '0'..'9'+ ; +NEWLINE:'\r'? '\n' ; +WS : (' '|'\t')+ { $self->skip(); } ; diff --git a/antlr-3.1.3/runtime/Perl5/examples/expr/expr.pl b/antlr-3.1.3/runtime/Perl5/examples/expr/expr.pl new file mode 100644 index 0000000..213fef1 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/examples/expr/expr.pl @@ -0,0 +1,24 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use blib; + +use ANTLR::Runtime::ANTLRStringStream; +use ANTLR::Runtime::CommonTokenStream; +use ExprLexer; +use ExprParser; + +my $in; +{ + undef $/; + $in = <>; +} + +my $input = ANTLR::Runtime::ANTLRStringStream->new({ input => $in }); +my $lexer = ExprLexer->new($input); + +my $tokens = ANTLR::Runtime::CommonTokenStream->new({ token_source => $lexer }); +my $parser = ExprParser->new({ input => $tokens }); +$parser->prog(); diff --git a/antlr-3.1.3/runtime/Perl5/examples/id/IDLexer.g b/antlr-3.1.3/runtime/Perl5/examples/id/IDLexer.g new file mode 100644 index 0000000..a92efd7 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/examples/id/IDLexer.g @@ -0,0 +1,7 @@ +lexer grammar IDLexer; +options { language = Perl5; } + +ID : ('a'..'z'|'A'..'Z')+ ; +INT : '0'..'9'+ ; +NEWLINE:'\r'? '\n' { $self->skip(); } ; +WS : (' '|'\t')+ { $channel = HIDDEN; } ; diff --git a/antlr-3.1.3/runtime/Perl5/examples/id/id.pl b/antlr-3.1.3/runtime/Perl5/examples/id/id.pl new file mode 100644 index 0000000..2a2e554 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/examples/id/id.pl @@ -0,0 +1,25 @@ +#!/usr/bin/perl + +use blib; + +use English qw( -no_match_vars ); +use ANTLR::Runtime::ANTLRStringStream; +use IDLexer; + +use strict; +use warnings; + +my $input = ANTLR::Runtime::ANTLRStringStream->new({ input => "Hello World!\n42\n" }); +my $lexer = IDLexer->new($input); + +while (1) { + my $token = $lexer->next_token(); + last if $token->get_type() == $IDLexer::EOF; + + print "text: ", $token->get_text(), "\n"; + print "type: ", $token->get_type(), "\n"; + print "pos: ", $token->get_line(), ':', $token->get_char_position_in_line(), "\n"; + print "channel: ", $token->get_channel(), "\n"; + print "token index: ", $token->get_token_index(), "\n"; + print "\n"; +} diff --git a/antlr-3.1.3/runtime/Perl5/examples/mexpr/MExpr.g b/antlr-3.1.3/runtime/Perl5/examples/mexpr/MExpr.g new file mode 100644 index 0000000..b2e045f --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/examples/mexpr/MExpr.g @@ -0,0 +1,28 @@ +grammar MExpr; + +options { + language = Perl5; +} + +prog: stat+ ; + +stat: expr NEWLINE { print "$expr.value\n"; } + | NEWLINE + ; + +expr returns [value] + : e=atom { $value = $e.value; } + ( '+' e=atom { $value += $e.value; } + | '-' e=atom { $value -= $e.value; } + )* + ; + +atom returns [value] + : INT { $value = $INT.text; } + | '(' expr ')' { $value = $expr.value; } + ; + +ID : ('a'..'z'|'A'..'Z')+ ; +INT : '0'..'9'+ ; +NEWLINE:'\r'? '\n' ; +WS : (' '|'\t')+ { $self->skip(); } ; diff --git a/antlr-3.1.3/runtime/Perl5/examples/mexpr/mexpr.pl b/antlr-3.1.3/runtime/Perl5/examples/mexpr/mexpr.pl new file mode 100644 index 0000000..6c3ef93 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/examples/mexpr/mexpr.pl @@ -0,0 +1,20 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use blib; + +use ANTLR::Runtime::ANTLRStringStream; +use ANTLR::Runtime::CommonTokenStream; +use MExprLexer; +use MExprParser; + +while (<>) { + my $input = ANTLR::Runtime::ANTLRStringStream->new({ input => $_ }); + my $lexer = MExprLexer->new($input); + + my $tokens = ANTLR::Runtime::CommonTokenStream->new({ token_source => $lexer }); + my $parser = MExprParser->new($tokens); + $parser->prog(); +} diff --git a/antlr-3.1.3/runtime/Perl5/examples/simplecalc/SimpleCalc.g b/antlr-3.1.3/runtime/Perl5/examples/simplecalc/SimpleCalc.g new file mode 100644 index 0000000..a819e41 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/examples/simplecalc/SimpleCalc.g @@ -0,0 +1,29 @@ +grammar SimpleCalc; +options { language = Perl5; } + +tokens { + PLUS = '+' ; + MINUS = '-' ; + MULT = '*' ; + DIV = '/' ; +} + +/*------------------------------------------------------------------ + * PARSER RULES + *------------------------------------------------------------------*/ + +expr : term ( ( PLUS | MINUS ) term )* ; + +term : factor ( ( MULT | DIV ) factor )* ; + +factor : NUMBER ; + +/*------------------------------------------------------------------ + * LEXER RULES + *------------------------------------------------------------------*/ + +NUMBER : (DIGIT)+ ; + +WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ { $channel = $self->HIDDEN; } ; + +fragment DIGIT : '0'..'9' ; diff --git a/antlr-3.1.3/runtime/Perl5/examples/simplecalc/simplecalc.pl b/antlr-3.1.3/runtime/Perl5/examples/simplecalc/simplecalc.pl new file mode 100644 index 0000000..54382ef --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/examples/simplecalc/simplecalc.pl @@ -0,0 +1,27 @@ +#!perl + +use strict; +use warnings; + +use ANTLR::Runtime::ANTLRFileStream; +use ANTLR::Runtime::CommonTokenStream; +use ANTLR::Runtime::RecognitionException; +use SimpleCalcLexer; +use SimpleCalcParser; + +my $input = ANTLR::Runtime::ANTLRFileStream->new({ file_name => $ARGV[0] }); +my $lexer = SimpleCalcLexer->new({ input => $input }); +my $tokens = ANTLR::Runtime::CommonTokenStream->new({ token_source => $lexer }); +my $parser = SimpleCalcParser->new({ input => $tokens }); +eval { + $parser->expr(); + print "ok\n"; + print "errors: ", $parser->get_number_of_syntax_errors(), "\n"; + print "failed? ", $parser->failed(), "\n"; +}; +if (my $ex = ANTLR::Runtime::RecognitionException->caught()) { + print $ex->trace, "\n"; +} +elsif ($ex = $@) { + die $ex; +} diff --git a/antlr-3.1.3/runtime/Perl5/examples/zero-one/T.g b/antlr-3.1.3/runtime/Perl5/examples/zero-one/T.g new file mode 100644 index 0000000..6f7a1f7 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/examples/zero-one/T.g @@ -0,0 +1,4 @@ +lexer grammar T; +options { language = Perl5; } +ZERO: '0'; +ONE: '1'; diff --git a/antlr-3.1.3/runtime/Perl5/examples/zero-one/t-error.pl b/antlr-3.1.3/runtime/Perl5/examples/zero-one/t-error.pl new file mode 100644 index 0000000..818b3c3 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/examples/zero-one/t-error.pl @@ -0,0 +1,27 @@ +#!/usr/bin/perl + +use blib; + +use English qw( -no_match_vars ); +use ANTLR::Runtime::ANTLRStringStream; +use TLexer; + +use strict; +use warnings; + +my $input = ANTLR::Runtime::ANTLRStringStream->new({ '01X0' }); +my $lexer = TLexer->new($input); + +while (1) { + my $token = eval { $lexer->next_token(); }; + if ($EVAL_ERROR) { + my $exception = $EVAL_ERROR; + print $exception; + next; + } + last if $token->get_type() == $TLexer::EOF; + + print "type: ", $token->get_type(), "\n"; + print "text: ", $token->get_text(), "\n"; + print "\n"; +} diff --git a/antlr-3.1.3/runtime/Perl5/examples/zero-one/t.pl b/antlr-3.1.3/runtime/Perl5/examples/zero-one/t.pl new file mode 100644 index 0000000..ed69cc2 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/examples/zero-one/t.pl @@ -0,0 +1,22 @@ +#!/usr/bin/perl + +use blib; + +use English qw( -no_match_vars ); +use ANTLR::Runtime::ANTLRStringStream; +use TLexer; + +use strict; +use warnings; + +my $input = ANTLR::Runtime::ANTLRStringStream->new({ input => '010' }); +my $lexer = TLexer->new($input); + +while (1) { + my $token = $lexer->next_token(); + last if $token->get_type() == $TLexer::EOF; + + print "type: ", $token->get_type(), "\n"; + print "text: ", $token->get_text(), "\n"; + print "\n"; +} diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime.pm new file mode 100644 index 0000000..57bbc05 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime.pm @@ -0,0 +1,116 @@ +package ANTLR::Runtime; + +use strict; +use warnings; + +use version; our $VERSION = qv('0.0.1'); + +1; + +__END__ + +=head1 NAME + +ANTLR::Runtime - ANTLR Runtime for Perl 5 + + +=head1 VERSION + +This documentation refers to ANTLR::Runtime version 0.0.1 + + +=head1 SYNOPSIS + + use ; + # Brief but working code example(s) here showing the most common usage(s) + + # This section will be as far as many users bother reading + # so make it as educational and exemplary as possible. + + +=head1 DESCRIPTION + +A full description of the module and its features. +May include numerous subsections (i.e. =head2, =head3, etc.) + + +=head1 SUBROUTINES/METHODS + +A separate section listing the public components of the module's interface. +These normally consist of either subroutines that may be exported, or methods +that may be called on objects belonging to the classes that the module provides. +Name the section accordingly. + +In an object-oriented module, this section should begin with a sentence of the +form "An object of this class represents...", to give the reader a high-level +context to help them understand the methods that are subsequently described. + + +=head1 DIAGNOSTICS + +A list of every error and warning message that the module can generate +(even the ones that will "never happen"), with a full explanation of each +problem, one or more likely causes, and any suggested remedies. +(See also "Documenting Errors" in Chapter 13.) + + +=head1 CONFIGURATION AND ENVIRONMENT + +A full explanation of any configuration system(s) used by the module, +including the names and locations of any configuration files, and the +meaning of any environment variables or properties that can be set. These +descriptions must also include details of any configuration language used. +(See also "Configuration Files" in Chapter 19.) + + +=head1 DEPENDENCIES + +A list of all the other modules that this module relies upon, including any +restrictions on versions, and an indication whether these required modules are +part of the standard Perl distribution, part of the module's distribution, +or must be installed separately. + + +=head1 INCOMPATIBILITIES + +A list of any modules that this module cannot be used in conjunction with. +This may be due to name conflicts in the interface, or competition for +system or program resources, or due to internal limitations of Perl +(for example, many modules that use source code filters are mutually +incompatible). + + +=head1 BUGS AND LIMITATIONS + +A list of known problems with the module, together with some indication +whether they are likely to be fixed in an upcoming release. + +Also a list of restrictions on the features the module does provide: +data types that cannot be handled, performance issues and the circumstances +in which they may arise, practical limitations on the size of data sets, +special cases that are not (yet) handled, etc. + +The initial template usually just has: + +There are no known bugs in this module. +Please report problems to () +Patches are welcome. + +=head1 AUTHOR + +Ronald Blaschke (ron@rblasch.org) + + +=head1 LICENCE AND COPYRIGHT + +Copyright (c) 2008 Ronald Blaschke (ron@rblasch.org). All rights reserved. + +Based on ANTLR Java Runtime by Terence Parr. + +This module is free software; you can redistribute it and/or +modify it under the same terms as Perl (see L) +or ANTLR (see L) itself. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/ANTLRFileStream.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/ANTLRFileStream.pm new file mode 100644 index 0000000..cabc88a --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/ANTLRFileStream.pm @@ -0,0 +1,50 @@ +package ANTLR::Runtime::ANTLRFileStream; +use ANTLR::Runtime::Class; + +use Carp; +use Readonly; + +extends 'ANTLR::Runtime::ANTLRStringStream'; + +has 'file_name'; + +sub BUILD { + my ($self, $arg_ref) = @_; + + $self->file_name($arg_ref->{file_name}); + $self->load(@$arg_ref{qw( file_name encoding )}); +} + +sub load { + my ($self, $file_name, $encoding) = @_; + + if (!defined $file_name) { + return; + } + + my $fh; + if (defined $encoding) { + open $fh, "<:encoding($encoding)", $file_name + or croak "Can't open $file_name: $!"; + } + else { + open $fh, '<', $file_name + or croak "Can't open $file_name: $!"; + } + + my $content; + { + local $/; + $content = <$fh>; + } + $self->input($content); + return; +} + +sub get_source_name { + my ($self) = @_; + return $self->file_name; +} + +1; +__END__ diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/ANTLRStringStream.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/ANTLRStringStream.pm new file mode 100644 index 0000000..bec2592 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/ANTLRStringStream.pm @@ -0,0 +1,205 @@ +package ANTLR::Runtime::ANTLRStringStream; +use ANTLR::Runtime::Class; + +use Carp; +use Readonly; + +use ANTLR::Runtime::CharStreamState; + +extends 'ANTLR::Runtime::CharStream'; + +has 'input'; +has 'p'; +has 'line'; +has 'char_position_in_line'; +has 'mark_depth'; +has 'markers'; +has 'last_marker'; + +sub BUILD { + my ($self, $arg_ref) = @_; + + $self->input($arg_ref->{input}); + $self->p(0); + $self->line(1); + $self->char_position_in_line(0); + $self->mark_depth(0); + $self->markers([ undef ]); # depth 0 means no backtracking, leave blank + $self->last_marker(0); +} + +sub get_line { + my ($self) = @_; + return $self->line; +} + +sub set_line { + my ($self, $value) = @_; + $self->line($value); + return; +} + +sub get_char_position_in_line { + my ($self) = @_; + return $self->char_position_in_line; +} + +sub set_char_position_in_line { + my ($self, $value) = @_; + $self->char_position_in_line($value); + return; +} + +sub reset { + Readonly my $usage => 'reset()'; + croak $usage if @_ != 1; + my ($self) = @_; + + $self->p(0); + $self->line(1); + $self->char_position_in_line(0); + $self->mark_depth(0); +} + +sub consume { + Readonly my $usage => 'consume()'; + croak $usage if @_ != 1; + my ($self) = @_; + + if ($self->p < length $self->input) { + $self->char_position_in_line($self->char_position_in_line + 1); + if (substr($self->input, $self->p, 1) eq "\n") { + $self->line($self->line + 1); + $self->char_position_in_line(0); + } + $self->p($self->p + 1); + } +} + +sub LA { + Readonly my $usage => 'char LA($i)'; + croak $usage if @_ != 2; + my ($self, $i) = @_; + + if ($i == 0) { + return undef; + } + + if ($i < 0) { + ++$i; # e.g., translate LA(-1) to use offset i=0; then input[p+0-1] + if ($self->p + $i - 1 < 0) { + return $self->EOF; + } + } + + if ($self->p + $i - 1 >= length $self->input) { + return $self->EOF; + } + + return substr $self->input, $self->p + $i - 1, 1; +} + +sub LT { + Readonly my $usage => 'char LT($i)'; + croak $usage if @_ != 2; + my ($self, $i) = @_; + + return $self->LA($i); +} + +sub index { + Readonly my $usage => 'int index()'; + croak $usage if @_ != 1; + my ($self) = @_; + + return $self->p; +} + +sub size { + Readonly my $usage => 'int size()'; + croak $usage if @_ != 1; + my ($self) = @_; + + return length $self->input; +} + +sub mark { + Readonly my $usage => 'int mark()'; + croak $usage if @_ != 1; + my ($self) = @_; + + $self->mark_depth($self->mark_depth + 1); + my $state; + if ($self->mark_depth >= @{$self->markers}) { + $state = ANTLR::Runtime::CharStreamState->new(); + push @{$self->markers}, $state; + } else { + $state = $self->markers->[$self->mark_depth]; + } + + $state->set_p($self->p); + $state->set_line($self->line); + $state->set_char_position_in_line($self->char_position_in_line); + $self->last_marker($self->mark_depth); + + return $self->mark_depth; +} + +sub rewind { + Readonly my $usage => 'rewind($m)'; + croak $usage if @_ != 1 && @_ != 2; + my $self = shift; + my $m; + if (@_ == 0) { + $m = $self->last_marker; + } else { + $m = shift; + } + + my $state = $self->markers->[$m]; + # restore stream state + $self->seek($state->get_p); + $self->line($state->get_line); + $self->char_position_in_line($state->get_char_position_in_line); + $self->release($m); +} + +sub release { + Readonly my $usage => 'release($marker)'; + croak $usage if @_ != 2; + my ($self, $marker) = @_; + + # unwind any other markers made after m and release m + $self->mark_depth($marker); + # release this marker + $self->mark_depth($self->mark_depth - 1); +} + +# consume() ahead unit p == index; can't just set p = index as we must update +# line and char_position_in_line +sub seek { + Readonly my $usage => 'seek($index)'; + croak $usage if @_ != 2; + my ($self, $index) = @_; + + if ($index <= $self->p) { + # just jump; don't update stream state (line, ...) + $self->p($index); + return; + } + + # seek forward, consume until p hits index + while ($self->p < $index) { + $self->consume(); + } +} + +sub substring { + Readonly my $usage => 'string substring($start, $stop)'; + croak $usage if @_ != 3; + my ($self, $start, $stop) = @_; + + return substr $self->input, $start, $stop - $start + 1; +} + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/BaseRecognizer.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/BaseRecognizer.pm new file mode 100644 index 0000000..9302037 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/BaseRecognizer.pm @@ -0,0 +1,615 @@ +package ANTLR::Runtime::BaseRecognizer; +use ANTLR::Runtime::Class; + +use Readonly; +use Carp; + +use ANTLR::Runtime::RecognizerSharedState; +use ANTLR::Runtime::Token; +use ANTLR::Runtime::UnwantedTokenException; +use ANTLR::Runtime::MissingTokenException; +use ANTLR::Runtime::MismatchedTokenException; + +use constant { + MEMO_RULE_FAILED => -2, + MEMO_RULE_UNKNOWN => -1, + INITIAL_FOLLOW_STACK_SIZE => 100, + + # copies from Token object for convenience in actions + DEFAULT_TOKEN_CHANNEL => ANTLR::Runtime::Token->DEFAULT_CHANNEL, + HIDDEN => ANTLR::Runtime::Token->HIDDEN_CHANNEL, + + NEXT_TOKEN_RULE_NAME => 'next_token', +}; + +# State of a lexer, parser, or tree parser are collected into a state +# object so the state can be shared. This sharing is needed to +# have one grammar import others and share same error variables +# and other state variables. It's a kind of explicit multiple +# inheritance via delegation of methods and shared state. +has 'state'; + +sub BUILD { + my ($self, $arg_ref) = @_; + + if (exists $arg_ref->{state}) { + $self->state($arg_ref->{state}); + } + else { + $self->state(ANTLR::Runtime::RecognizerSharedState->new()); + } +} + +sub reset { + my ($self) = @_; + + if (!defined $self->state) { + return; + } + + my $state = $self->state; + $state->_fsp(-1); + $state->error_recovery(0); + $state->last_error_index(-1); + $state->failed(0); + $state->syntax_errors(0); + + # wack everything related to backtracking and memoization + $state->backtracking(0); + # wipe cache + $state->rule_memo([]); +} + +sub match { + Readonly my $usage => 'void match(IntStream input, int ttype, BitSet follow)'; + croak $usage if @_ != 4; + my ($self, $input, $ttype, $follow) = @_; + + my $matched_symbol = $self->get_current_input_symbol($input); + if ($input->LA(1) eq $ttype) { + $input->consume(); + $self->state->error_recovery(0); + $self->state->failed(0); + return $matched_symbol; + } + + if ($self->state->backtracking > 0) { + $self->state->failed(1); + return $matched_symbol; + } + + return $self->recover_from_mismatched_token($input, $ttype, $follow); +} + +sub match_any { + Readonly my $usage => 'void match_any(IntStream input)'; + croak $usage if @_ != 2; + my ($self, $input) = @_; + + $self->state->error_recovery(0); + $self->state->failed(0); + $input->consume(); +} + +sub mismatch_is_unwanted_token { + my ($self, $input, $ttype) = @_; + return $input->LA(2) == $ttype; +} + +sub mismatch_is_missing_token { + my ($self, $input, $follow) = @_; + + if (!defined $follow) { + return 0; + } + + if ($follow->member(ANTLR::Runtime::Token->EOR_TOKEN_TYPE)) { + my $viable_tokens_following_this_rule = $self->compute_context_sensitive_rule_FOLLOW(); + $follow = $follow->or($viable_tokens_following_this_rule); + if ($self->state->_fsp >= 0) { + $follow->remove(ANTLR::Runtime::Token->EOR_TOKEN_TYPE); + } + } + + if ($follow->member($input->LA(1)) || $follow->member(ANTLR::Runtime::Token->EOR_TOKEN_TYPE)) { + return 1; + } + return 0; +} + +sub mismatch { + Readonly my $usage => 'void mismatch(IntStream input, int ttype, BitSet follow)'; + croak $usage if @_ != 4; + my ($self, $input, $ttype, $follow) = @_; + + if ($self->mismatch_is_unwanted_token($input, $ttype)) { + ANTLR::Runtime::UnwantedTokenException->new({ + expecting => $ttype, + input => $input + })->throw(); + } + elsif ($self->mismatch_is_missing_token($input, $follow)) { + ANTLR::Runtime::MissingTokenException->new({ + expecting => $ttype, + input => $input + })->throw(); + } + else { + ANTLR::Runtime::MismatchedTokenException->new({ + expecting => $ttype, + input => $input + })->throw(); + } +} + +sub report_error { + Readonly my $usage => 'void report_error(RecognitionException e)'; + croak $usage if @_ != 2; + my ($self, $e) = @_; + + if ($self->state->error_recovery) { + return; + } + $self->state->syntax_errors($self->state->syntax_errors + 1); + $self->state->error_recovery(1); + + $self->display_recognition_error($self->get_token_names(), $e); + return; +} + +sub display_recognition_error { + Readonly my $usage => 'void display_recognition_error(String[] token_names, RecognitionException e)'; + croak $usage if @_ != 3; + my ($self, $token_names, $e) = @_; + + my $hdr = $self->get_error_header($e); + my $msg = $self->get_error_message($e, $token_names); + $self->emit_error_message("$hdr $msg"); +} + +sub get_error_message { + Readonly my $usage => 'String get_error_message(RecognitionException e, String[] token_names)'; + croak $usage if @_ != 3; + my ($self, $e, $token_names) = @_; + + if ($e->isa('ANTLR::Runtime::MismatchedTokenException')) { + my $token_name; + if ($e->get_expecting == ANTLR::Runtime::Token->EOF) { + $token_name = 'EOF'; + } else { + $token_name = $token_names->[$e->get_expecting]; + } + + return 'mismatched input ' . $self->get_token_error_display($e->get_token) + . ' expecting ' . $token_name; + } elsif ($e->isa('ANTLR::Runtime::MismatchedTreeNodeException')) { + my $token_name; + if ($e->get_expecting == ANTLR::Runtime::Token->EOF) { + $token_name = 'EOF'; + } else { + $token_name = $token_names->[$e->get_expecting]; + } + + return 'mismatched tree node: ' . $e->node + . ' expecting ' . $token_name; + } elsif ($e->isa('ANTLR::Runtime::NoViableAltException')) { + return 'no viable alternative at input ' . $self->get_token_error_display($e->get_token); + } elsif ($e->isa('ANTLR::Runtime::EarlyExitException')) { + return 'required (...)+ loop did not match anything at input ' + . get_token_error_display($e->get_token); + } elsif ($e->isa('ANTLR::Runtime::MismatchedSetException')) { + return 'mismatched input ' . $self->get_token_error_display($e->get_token) + . ' expecting set ' . $e->get_expecting; + } elsif ($e->isa('ANTLR::Runtime::MismatchedNotSetException')) { + return 'mismatched input ' . $self->get_token_error_display($e->get_token) + . ' expecting set ' . $e->get_expecting; + } elsif ($e->isa('ANTLR::Runtime::FailedPredicateException')) { + return 'rule ' . $e->rule_name . ' failed predicate: {' + . $e->predicate_text . '}?'; + } else { + return undef; + } +} + +sub get_number_of_syntax_errors { + my ($self) = @_; + return $self->state->syntax_errors; +} + +sub get_error_header { + Readonly my $usage => 'String get_error_header(RecognitionException e)'; + croak $usage if @_ != 2; + my ($self, $e) = @_; + + my $line = $e->get_line(); + my $col = $e->get_char_position_in_line(); + + return "line $line:$col"; +} + +sub get_token_error_display { + Readonly my $usage => 'String get_token_error_display(Token t)'; + croak $usage if @_ != 2; + my ($self, $t) = @_; + + my $s = $t->get_text(); + if (!defined $s) { + if ($t->get_type() == ANTLR::Runtime::Token->EOF) { + $s = ''; + } else { + my $ttype = $t->get_type(); + $s = "<$ttype>"; + } + } + + $s =~ s/\n/\\\\n/g; + $s =~ s/\r/\\\\r/g; + $s =~ s/\t/\\\\t/g; + + return "'$s'"; +} + +sub emit_error_message { + Readonly my $usage => 'void emit_error_message(String msg)'; + croak $usage if @_ != 2; + my ($self, $msg) = @_; + + print STDERR $msg, "\n"; +} + +sub recover { + Readonly my $usage => 'void recover(IntStream input, RecognitionException re)'; + croak $usage if @_ != 3; + my ($self, $input, $re) = @_; + + if ($self->state->last_error_index == $input->index()) { + # uh oh, another error at same token index; must be a case + # where LT(1) is in the recovery token set so nothing is + # consumed; consume a single token so at least to prevent + # an infinite loop; this is a failsafe. + $input->consume(); + } + + $self->state->last_error_index($input->index()); + my $follow_set = $self->compute_error_recovery_set(); + $self->begin_resync(); + $self->consume_until($input, $follow_set); + $self->end_resync(); +} + +sub begin_resync { +} + +sub end_resync { +} + +sub compute_error_recovery_set { + Readonly my $usage => 'void compute_error_recovery_set()'; + croak $usage if @_ != 1; + my ($self) = @_; + + $self->combine_follows(0); +} + +sub compute_context_sensitive_rule_FOLLOW { + Readonly my $usage => 'void compute_context_sensitive_rule_FOLLOW()'; + croak $usage if @_ != 1; + my ($self) = @_; + + $self->combine_follows(1); +} + +sub combine_follows { + Readonly my $usage => 'BitSet combine_follows(boolean exact)'; + croak $usage if @_ != 2; + my ($self, $exact) = @_; + + my $top = $self->state->_fsp; + my $follow_set = ANTLR::Runtime::BitSet->new(); + + foreach my $local_follow_set (reverse @{$self->state->following}) { + $follow_set |= $local_follow_set; + if ($exact && $local_follow_set->member(ANTLR::Runtime::Token->EOR_TOKEN_TYPE)) { + last; + } + } + #$follow_set->remove(ANTLR::Runtime::Token->EOR_TOKEN_TYPE); + return $follow_set; +} + +sub recover_from_mismatched_token { + Readonly my $usage => 'void recover_from_mismatched_token(IntStream input, int ttype, BitSet follow)'; + croak $usage if @_ != 4; + my ($self, $input, $ttype, $follow) = @_; + + if ($self->mismatch_is_unwanted_token($input, $ttype)) { + my $ex = ANTLR::Runtime::UnwantedTokenException->new({ + expecting => $ttype, + input => $input + }); + + $self->begin_resync(); + $input->consume(); + $self->end_resync(); + $self->report_error($ex); + + my $matched_symbol = $self->get_current_input_symbol($input); + $input->consume(); + return $matched_symbol; + } + + if ($self->mismatch_is_missing_token($input, $follow)) { + my $inserted = $self->get_missing_symbol({ + input => $input, + expected_token_type => $ttype, + follow => $follow, + }); + my $ex = ANTLR::Runtime::MissingTokenException({ + expecting => $ttype, + input => $input, + inserted => $inserted, + }); + $self->report_error($ex); + return $inserted; + } + + ANTLR::Runtime::MismatchedTokenException->new({ + expecting => $ttype, + input => $input + })->throw(); +} + +sub recover_from_mismatched_set { + Readonly my $usage => 'void recover_from_mismatched_set(IntStream input, RecognitionException e, BitSet follow)'; + croak $usage if @_ != 4; + my ($self, $input, $e, $follow) = @_; + + if ($self->mismatch_is_missing_token($input, $follow)) { + $self->report_error($e); + return $self->get_missing_symbol({ + input => $input, + exception => $e, + expected_token_type => ANTLR::Runtime::Token->INVALID_TOKEN_TYPE, + follow => $follow, + }); + } + + $e->throw(); +} + +sub recover_from_mismatched_element { + Readonly my $usage => 'boolean recover_from_mismatched_element(IntStream input, RecognitionException e, BitSet follow)'; + croak $usage if @_ != 4; + my ($self, $input, $e, $follow) = @_; + + return 0 if (!defined $follow); + + if ($follow->member(ANTLR::Runtime::Token->EOR_TOKEN_TYPE)) { + my $viable_tokens_following_this_rule = $self->compute_context_sensitive_rule_FOLLOW(); + $follow |= $viable_tokens_following_this_rule; + $follow->remove(ANTLR::Runtime::Token->EOR_TOKEN_TYPE); + } + + if ($follow->member($input->LA(1))) { + $self->report_error($e); + return 1; + } + + return 0; +} + +sub get_current_input_symbol { + my ($self, $input) = @_; + return undef; +} + +sub get_missing_symbol { + my ($self, $arg_ref) = @_; + my $input = $arg_ref->{input}; + my $exception = $arg_ref->{exception}; + my $expected_token_type = $arg_ref->{expected_token_type}; + my $follow = $arg_ref->{follow}; + + return undef; +} + +sub consume_until { + Readonly my $usage => 'void consume_until(IntStream input, (int token_type | BitSet set))'; + croak $usage if @_ != 3; + + if ($_[2]->isa('ANTLR::Runtime::BitSet')) { + my ($self, $input, $set) = @_; + + my $ttype = $input->LA(1); + while ($ttype != ANTLR::Runtime::Token->EOF && !$set->member($ttype)) { + $input->consume(); + $ttype = $input->LA(1); + } + } else { + my ($self, $input, $token_type) = @_; + + my $ttype = $input->LA(1); + while ($ttype != ANTLR::Runtime::Token->EOF && $ttype != $token_type) { + $input->consume(); + $ttype = $input->LA(1); + } + } +} + +sub push_follow { + Readonly my $usage => 'void push_follow(BitSet fset)'; + croak $usage if @_ != 2; + my ($self, $fset) = @_; + + push @{$self->state->following}, $fset; + $self->state->_fsp($self->state->_fsp + 1); +} + +sub get_rule_invocation_stack { + Readonly my $usage => 'List get_rule_invocation_stack()'; + croak $usage if @_ != 1; + my ($self) = @_; + + my $rules = []; + for (my $i = 0; ; ++$i) { + my @frame = caller $i; + last if !@frame; + + my ($package, $filename, $line, $subroutine) = @frame; + + if ($package =~ /^ANTLR::Runtime::/) { + next; + } + + if ($subroutine eq NEXT_TOKEN_RULE_NAME) { + next; + } + + if ($package ne ref $self) { + next; + } + + push @{$rules}, $subroutine; + } +} + +sub get_backtracking_level { + Readonly my $usage => 'int get_backtracking_level()'; + croak $usage if @_ != 1; + my ($self) = @_; + + return $self->state->backtracking; +} + +sub set_backtracking_level { + my ($self, $n) = @_; + $self->state->backtracking($n); +} + +sub failed { + my ($self) = @_; + return $self->state->failed; +} + +sub get_token_names { + return undef; +} + +sub get_grammar_file_name { + return undef; +} + +sub to_strings { + Readonly my $usage => 'List to_strings(List tokens)'; + croak $usage if @_ != 2; + my ($self, $tokens) = @_; + + if (!defined $tokens) { + return undef; + } + + return map { $_->get_text() } @{$tokens}; +} + +sub get_rule_memoization { + Readonly my $usage => 'int get_rule_memoization(int rule_index, int rule_start_index)'; + croak $usage if @_ != 3; + my ($self, $rule_index, $rule_start_index) = @_; + + if (!defined $self->rule_memo->[$rule_index]) { + $self->rule_memo->[$rule_index] = {}; + } + + my $stop_index = $self->state->rule_memo->[$rule_index]->{$rule_start_index}; + if (!defined $stop_index) { + return $self->MEMO_RULE_UNKNOWN; + } + return $stop_index; +} + +sub alredy_parsed_rule { + Readonly my $usage => 'boolean alredy_parsed_rule(IntStream input, int rule_index)'; + croak $usage if @_ != 3; + my ($self, $input, $rule_index) = @_; + + my $stop_index = $self->get_rule_memoization($rule_index, $input->index()); + if ($stop_index == $self->MEMO_RULE_UNKNOWN) { + return 0; + } + + if ($stop_index == $self->MEMO_RULE_FAILED) { + $self->state->failed(1); + } else { + $input->seek($stop_index + 1); + } + return 1; +} + +sub memoize { + Readonly my $usage => 'void memoize(IntStream input, int rule_index, int rule_start_index)'; + croak $usage if @_ != 4; + my ($self, $input, $rule_index, $rule_start_index) = @_; + + my $stop_token_index = $self->state->failed ? $self->MEMO_RULE_FAILED : $input->index() - 1; + if (defined $self->state->rule_memo->[$rule_index]) { + $self->state->rule_memo->[$rule_index]->{$rule_start_index} = $stop_token_index; + } +} + +sub get_rule_memoization_cache_size { + Readonly my $usage => 'int get_rule_memoization_cache_size()'; + croak $usage if @_ != 1; + my ($self) = @_; + + my $n = 0; + foreach my $m (@{$self->state->rule_memo}) { + $n += keys %{$m} if defined $m; + } + + return $n; +} + +sub trace_in { + Readonly my $usage => 'void trace_in(String rule_name, int rule_index, input_symbol)'; + croak $usage if @_ != 4; + my ($self, $rule_name, $rule_index, $input_symbol) = @_; + + print "enter $rule_name $input_symbol"; + if ($self->state->failed) { + print ' failed=', $self->state->failed; + } + if ($self->state->backtracking > 0) { + print ' backtracking=', $self->state->backtracking; + } + print "\n"; +} + +sub trace_out { + Readonly my $usage => 'void trace_out(String rule_name, int rule_index, input_symbol)'; + croak $usage if @_ != 4; + my ($self, $rule_name, $rule_index, $input_symbol) = @_; + + print "exit $rule_name $input_symbol"; + if ($self->state->failed) { + print ' failed=', $self->state->failed; + } + if ($self->state->backtracking > 0) { + print ' backtracking=', $self->state->backtracking; + } + print "\n"; +} + +1; + +__END__ + +=head1 NAME + +ANTLR::Runtime::BaseRecognizer + +=head1 DESCRIPTION + +A generic recognizer that can handle recognizers generated from +lexer, parser, and tree grammars. This is all the parsing +support code essentially; most of it is error recovery stuff and +backtracking. diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/BitSet.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/BitSet.pm new file mode 100644 index 0000000..14b023c --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/BitSet.pm @@ -0,0 +1,324 @@ +package ANTLR::Runtime::BitSet; +use ANTLR::Runtime::Class; + +use Carp; +use Readonly; +use List::Util qw( max ); + +use overload + '|=' => \&or_in_place, + '""' => \&str; + +use constant { + BITS => 64, # number of bits / long + LOG_BITS => 6, # 2^6 == 64 +}; + +# We will often need to do a mod operator (i mod nbits). Its +# turns out that, for powers of two, this mod operation is +# same as (i & (nbits-1)). Since mod is slow, we use a +# precomputed mod mask to do the mod instead. +use constant MOD_MASK => BITS - 1; + +# The actual data bit +has 'bits'; + +sub BUILD { + my ($self, $args) = @_; + + my $bits; + if (!%$args) { + # Construct a bitset of size one word (64 bits) + $bits = '0' x BITS; + } + elsif (exists $args->{bits}) { + $bits = $args->{bits}; + } + elsif (exists $args->{number}) { + $bits = reverse unpack("B*", pack("N", $args->{number})); + } + elsif (exists $args->{words64}) { + # Construction from a static array of longs + my $words64 = $args->{words64}; + + # $number is in hex format + my $number = join '', + map { my $word64 = $_; $word64 =~ s/^0x//; $word64; } + reverse @$words64; + + $bits = ''; + foreach my $h (split //, reverse $number) { + $bits .= reverse substr(unpack("B*", pack("h", hex $h)), 4); + } + } + elsif (exists $args->{''}) { + # Construction from a list of integers + } + elsif (exists $args->{size}) { + # Construct a bitset given the size + $bits = '0' x $args->{size}; + } + else { + croak "Invalid argument"; + } + + $self->bits($bits); +} + +sub of { + my ($class, $el) = @_; + + my $bs = ANTLR::Runtime::BitSet->new({ size => $el + 1 }); + $bs->add($el); + + return $bs; +} + +sub or :method { + my ($self, $a) = @_; + + if (!defined $a) { + return $self; + } + + my $s = $self->clone(); + $s->or_in_place($a); + return $s; +} + +sub add :method { + my ($self, $el) = @_; + + $self->grow_to_include($el); + my $bits = $self->bits; + substr($bits, $el, 1) = 1; + $self->bits($bits); + + return; +} + +sub grow_to_include :method { + my ($self, $bit) = @_; + + if ($bit > length $self->bits) { + $self->bits .= '0' x ($bit - (length $self->bits) + 1); + } + + return; +} + +sub or_in_place :method { + my ($self, $a) = @_; + + my $i = 0; + foreach my $b (split //, $a->bits) { + if ($b) { + $self->add($i); + } + } continue { + ++$i; + } + + return $self; +} + +sub clone :method { + my ($self) = @_; + + return ANTLR::Runtime::BitSet->new(bits => $self->bits); +} + +sub size :method { + my ($self) = @_; + + return scalar $self->bits =~ /1/; +} + +sub equals :method { + my ($self, $other) = @_; + + return $self->bits eq $other->bits; +} + +sub member :method { + Readonly my $usage => 'bool member($el)'; + croak $usage if @_ != 2; + my ($self, $el) = @_; + + return (substr $self->bits, $el, 1) eq 1; +} + +sub remove :method { + my ($self, $el) = @_; + + my $bits = $self->bits; + substr($bits, $el, 1) = 0; + $self->bits($bits); +} + +sub is_nil :method { + my ($self) = @_; + + return $self->bits =~ /1/ ? 1 : 0; +} + +sub num_bits :method { + my ($self) = @_; + return length $self->bits; +} + +sub length_in_long_words :method { + my ($self) = @_; + return $self->num_bits() / $self->BITS; +} + +sub to_array :method { + my ($self) = @_; + + my $elems = []; + + while ($self->bits =~ /1/g) { + push @$elems, $-[0]; + } +} + +sub to_packed_array :method { + my ($self) = @_; + + return [ + $self->bits =~ /.{BITS}/g + ]; +} + +sub str :method { + my ($self) = @_; + + return $self->to_string(); +} + +sub to_string :method { + my ($self, $args) = @_; + + my $token_names; + if (defined $args && exists $args->{token_names}) { + $token_names = $args->{token_names}; + } + + my @str; + my $i = 0; + foreach my $b (split //, $self->bits) { + if ($b) { + if (defined $token_names) { + push @str, $token_names->[$i]; + } else { + push @str, $i; + } + } + } continue { + ++$i; + } + + return '{' . (join ',', @str) . '}'; +} + +1; +__END__ + + +=head1 NAME + +ANTLR::Runtime::BitSet - A bit set + + +=head1 SYNOPSIS + + use ; + # Brief but working code example(s) here showing the most common usage(s) + + # This section will be as far as many users bother reading + # so make it as educational and exemplary as possible. + + +=head1 DESCRIPTION + +A stripped-down version of org.antlr.misc.BitSet that is just good enough to +handle runtime requirements such as FOLLOW sets for automatic error recovery. + + +=head1 SUBROUTINES/METHODS + +=over + +=item C + +... + +=item C + +Return this | a in a new set. + +=item C + +Or this element into this set (grow as necessary to accommodate). + +=item C + +Grows the set to a larger number of bits. + +=item C + +Sets the size of a set. + +=item C + +Remove this element from this set. + +=item C + +Return how much space is being used by the bits array not how many actually +have member bits on. + +=back + +A separate section listing the public components of the module's interface. +These normally consist of either subroutines that may be exported, or methods +that may be called on objects belonging to the classes that the module provides. +Name the section accordingly. + +In an object-oriented module, this section should begin with a sentence of the +form "An object of this class represents...", to give the reader a high-level +context to help them understand the methods that are subsequently described. + + +=head1 DIAGNOSTICS + +A list of every error and warning message that the module can generate +(even the ones that will "never happen"), with a full explanation of each +problem, one or more likely causes, and any suggested remedies. +(See also "Documenting Errors" in Chapter 13.) + + +=head1 CONFIGURATION AND ENVIRONMENT + +A full explanation of any configuration system(s) used by the module, +including the names and locations of any configuration files, and the +meaning of any environment variables or properties that can be set. These +descriptions must also include details of any configuration language used. +(See also "Configuration Files" in Chapter 19.) + + +=head1 DEPENDENCIES + +A list of all the other modules that this module relies upon, including any +restrictions on versions, and an indication whether these required modules are +part of the standard Perl distribution, part of the module's distribution, +or must be installed separately. + + +=head1 INCOMPATIBILITIES + +A list of any modules that this module cannot be used in conjunction with. +This may be due to name conflicts in the interface, or competition for +system or program resources, or due to internal limitations of Perl +(for example, many modules that use source code filters are mutually +incompatible). diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/CharStream.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/CharStream.pm new file mode 100644 index 0000000..d15ab7c --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/CharStream.pm @@ -0,0 +1,31 @@ +package ANTLR::Runtime::CharStream; +use ANTLR::Runtime::Class; + +use Carp; +use Readonly; + +extends 'ANTLR::Runtime::IntStream'; + +use constant { + EOF => -1 +}; + +sub substring { +} + +sub LT { +} + +sub get_line { +} + +sub set_line { +} + +sub set_char_position_in_line { +} + +sub get_char_position_in_line { +} + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/CharStreamState.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/CharStreamState.pm new file mode 100644 index 0000000..d6d14f6 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/CharStreamState.pm @@ -0,0 +1,13 @@ +package ANTLR::Runtime::CharStreamState; +use ANTLR::Runtime::Class; + +# Index into the char stream of next lookahead char +has 'p'; + +# What line number is the scanner at before processing buffer[p]? +has 'line'; + +# What char position 0..n-1 in line is scanner before processing buffer[p]? +has 'char_position_in_line'; + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Class.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Class.pm new file mode 100644 index 0000000..e3380a3 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Class.pm @@ -0,0 +1,155 @@ +package ANTLR::Runtime::Class; + +use strict; +use warnings; +use Carp; + +use base 'Exporter'; +our @EXPORT = qw( has extends ); + +sub create_accessor { + my ($class, $name, $mode) = @_; + + if ($mode =~ /r/) { + ## no critic (TestingAndDebugging::ProhibitNoStrict) + no strict 'refs'; + *{"${class}::get_$name"} = sub { + my ($self) = @_; + return $self->$name; + }; + } + + if ($mode =~ /w/) { + ## no critic (TestingAndDebugging::ProhibitNoStrict) + no strict 'refs'; + *{"${class}::set_$name"} = sub { + my ($self, $value) = @_; + $self->$name($value); + return; + }; + } +} + +sub create_accessors { + my ($class, $accessors) = @_; + while (my ($name, $mode) = each %$accessors) { + create_accessor($class, $name, $mode); + } +} + + +sub create_attribute { + my ($class, $name) = @_; + + ## no critic (TestingAndDebugging::ProhibitNoStrict) + no strict 'refs'; + *{"${class}::$name"} = sub { + if (@_ == 1) { + my ($self) = @_; + return $self->{$name}; + } elsif (@_ == 2) { + my ($self, $value) = @_; + return $self->{$name} = $value; + } + }; +} + +sub create_attributes { + my ($class, $attributes) = @_; + foreach my $attribute (@$attributes) { + create_attribute($class, $attribute); + } +} + +sub new { + my ($class) = @_; + + my $self = bless {}, $class; + return $self; +} + +sub import { + ANTLR::Runtime::Class->export_to_level(1, @_); + + strict->import; + warnings->import; + + my $class = (caller())[0]; + no strict 'refs'; + require ANTLR::Runtime::Object; + push @{"${class}::ISA"}, 'ANTLR::Runtime::Object'; + + return; +} + +sub has { + my ($name) = @_; + my $class = (caller())[0]; + + { + ## no critic (TestingAndDebugging::ProhibitNoStrict) + no strict 'refs'; + *{"${class}::$name"} = sub { + if (@_ == 0) { + croak "static call to accessor $name"; + } + elsif (@_ == 1) { + my ($self) = @_; + return $self->{$name}; + } + elsif (@_ == 2) { + my ($self, $value) = @_; + return $self->{$name} = $value; + } + else { + croak "Too many arguments to $name"; + } + }; + } + return; +} + +sub is_class_loaded { + my ($class) = @_; + + my $pack = \*::; + foreach my $part (split('::', $class)) { + return 0 unless exists ${$$pack}{"${part}::"}; + $pack = \*{${$$pack}{"${part}::"}}; + } + + # check for $VERSION or @ISA + return 1 if exists ${$$pack}{VERSION} + && defined *{${$$pack}{VERSION}}{SCALAR}; + return 1 if exists ${$$pack}{ISA} + && defined *{${$$pack}{ISA}}{ARRAY}; + + # check for any method + foreach ( keys %{$$pack} ) { + next if substr($_, -2, 2) eq '::'; + + my $glob = ${$$pack}{$_} || next; + + return 1 if ref $glob eq 'SCALAR'; + return 1 if defined *{$glob}{CODE}; + } + + # fail + return 0; +} + +sub extends { + my (@superclasses) = @_; + my $class = (caller())[0]; + + foreach my $class (@superclasses) { + next if is_class_loaded($class); + eval "require $class"; + die $@ if $@; + } + + no strict 'refs'; + @{"${class}::ISA"} = @superclasses; +} + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/CommonToken.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/CommonToken.pm new file mode 100644 index 0000000..fba4647 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/CommonToken.pm @@ -0,0 +1,167 @@ +package ANTLR::Runtime::CommonToken; +use ANTLR::Runtime::Class; + +use Readonly; + +use overload + 'bool' => \¬_eof, + fallback => 1, + ; + +extends 'ANTLR::Runtime::Token'; + +has 'type'; +has 'line'; +has 'char_position_in_line'; +has 'channel'; +has 'input'; +has 'text'; +has 'index'; +has 'start'; +has 'stop'; + +sub BUILD { + my ($self, $arg_ref) = @_; + + $self->type(undef); + $self->line(0); + # set to invalid position + $self->char_position_in_line(-1); + $self->channel($self->DEFAULT_CHANNEL); + $self->input(undef); + + # We need to be able to change the text once in a while. If + # this is non-null, then getText should return this. Note that + # start/stop are not affected by changing this. + $self->text(undef); + + # What token number is this from 0..n-1 tokens; < 0 implies invalid index + $self->index(-1); + + # The char position into the input buffer where this token starts + $self->start(undef); + + # The char position into the input buffer where this token stops + $self->stop(undef); + + if (exists $arg_ref->{type}) { + $self->type($arg_ref->{type}); + } + + if (exists $arg_ref->{input}) { + $self->input($arg_ref->{input}); + } + + if (exists $arg_ref->{channel}) { + $self->channel($arg_ref->{channel}); + } + + if (exists $arg_ref->{start}) { + $self->start($arg_ref->{start}); + } + + if (exists $arg_ref->{stop}) { + $self->stop($arg_ref->{stop}); + } + + if (exists $arg_ref->{text}) { + $self->text($arg_ref->{text}); + } + + if (exists $arg_ref->{token}) { + my $token = $arg_ref->{token}; + $self->text($token->get_text()); + $self->type($token->get_type()); + $self->line($token->get_line()); + $self->index($token->get_token_index()); + $self->char_position_in_line($token->get_char_position_in_line()); + $self->channel($token->get_channel()); + } +} + +ANTLR::Runtime::Class::create_accessors(__PACKAGE__, { + type => 'rw', + line => 'rw', + text => 'w', + char_position_in_line => 'rw', + channel => 'rw', + input => 'rw', + index => 'rw', + start => 'rw', + stop => 'rw', +}); + +sub get_text { + Readonly my $usage => 'string get_text()'; + croak $usage if @_ != 1; + my ($self) = @_; + + if (defined $self->text) { + return $self->text; + } + if (!defined $self->input) { + return undef; + } + $self->text($self->input->substring($self->start, $self->stop)); + return $self->text; +} + +sub get_start_index { + my ($self) = @_; + return $self->start; +} + +sub set_start_index { + my ($self, $start) = @_; + $self->start($start); +} + +sub get_stop_index { + my ($self) = @_; + return $self->stop; +} + +sub set_stop_index { + my ($self, $stop) = @_; + $self->stop($stop); +} + +sub get_token_index { + my ($self) = @_; + return $self->index; +} + +sub set_token_index { + my ($self, $index) = @_; + $self->index($index); +} + +sub not_eof { + my ($self) = @_; + return $self->type != ANTLR::Runtime::Token->EOF; +} + +=begin later + + public String toString() { + String channelStr = ""; + if ( channel>0 ) { + channelStr=",channel="+channel; + } + String txt = getText(); + if ( txt!=null ) { + txt = txt.replaceAll("\n","\\\\n"); + txt = txt.replaceAll("\r","\\\\r"); + txt = txt.replaceAll("\t","\\\\t"); + } + else { + txt = ""; + } + return "[@"+getTokenIndex()+","+start+":"+stop+"='"+txt+"',<"+type+">"+channelStr+","+line+":"+getCharPositionInLine()+"]"; + } + +=end later + +=cut + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/CommonTokenStream.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/CommonTokenStream.pm new file mode 100644 index 0000000..9c4aa23 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/CommonTokenStream.pm @@ -0,0 +1,411 @@ +package ANTLR::Runtime::CommonTokenStream; +use ANTLR::Runtime::Class; + +use Readonly; +use UNIVERSAL qw( isa ); +use Carp; + +use overload + '""' => \&str; + +use ANTLR::Runtime::CharStream; +use ANTLR::Runtime::Class; +use ANTLR::Runtime::Token; + +extends 'ANTLR::Runtime::TokenStream'; + +has 'token_source'; +has 'tokens'; +has 'channel_override_map'; +has 'discard_set'; +has 'channel'; +has 'discard_off_channel_tokens'; +has 'last_marker'; +has 'p'; + +sub BUILD { + my ($self, $arg_ref) = @_; + + if (exists $arg_ref->{token_source}) { + $self->token_source($arg_ref->{token_source}); + } + else { + $self->token_source(undef); + } + + $self->tokens([]); + $self->channel_override_map(undef); + $self->discard_set(undef); + + if (exists $arg_ref->{channel}) { + $self->channel($arg_ref->{channel}); + } else { + $self->channel(ANTLR::Runtime::Token->DEFAULT_CHANNEL); + } + + $self->discard_off_channel_tokens(0); + $self->last_marker(0); + $self->p(-1); +} + +sub set_token_source { + Readonly my $usage => 'void set_token_source(TokenSource token_source)'; + croak $usage if @_ != 2; + my ($self, $token_source) = @_; + + $self->token_source($token_source); + $self->tokens([]); + $self->p(-1); + $self->channel(ANTLR::Runtime::Token->DEFAULT_CHANNEL); +} + +sub fill_buffer { + Readonly my $usage => 'void fill_buffer()'; + croak $usage if @_ != 1; + my ($self) = @_; + + my $index = 0; + my $t = $self->token_source->next_token(); + while (defined $t && $t->get_type() != ANTLR::Runtime::CharStream->EOF) { + my $discard = 0; + # is there a channel override for token type? + if (defined $self->channel_override_map) { + my $channel = $self->channel_override_map->{$t->get_type()}; + if (defined $channel) { + $t->set_channel($channel); + } + } + + if (defined $self->discard_set && $self->discard_set->contains($t->get_type())) { + $discard = 1; + } elsif ($self->discard_off_channel_tokens && $t->get_channel() != $self->channel) { + $discard = 1; + } + + if (!$discard) { + $t->set_token_index($index); + push @{$self->tokens}, $t; + ++$index; + } + } continue { + $t = $self->token_source->next_token(); + } + + # leave p pointing at first token on channel + $self->p(0); + $self->skip_off_token_channels($self->p); +} + +sub consume { + Readonly my $usage => 'void consume()'; + croak $usage if @_ != 1; + my ($self) = @_; + + if ($self->p < @{$self->tokens}) { + $self->p($self->p + 1); + $self->p($self->skip_off_token_channels($self->p)); # leave p on valid token + } +} + +sub skip_off_token_channels { + Readonly my $usage => 'int skip_off_token_channels(int i)'; + croak $usage if @_ != 2; + my ($self, $i) = @_; + + my $n = @{$self->tokens}; + while ($i < $n && $self->tokens->[$i]->get_channel() != $self->channel) { + ++$i; + } + + return $i; +} + +sub skip_off_token_channels_reverse { + Readonly my $usage => 'int skip_off_token_channels_reverse(int i)'; + croak $usage if @_ != 2; + my ($self, $i) = @_; + + while ($i >= 0 && $self->tokens->[$i]->get_channel() != $self->channel) { + --$i; + } + + return $i; +} + +sub set_token_type_channel { + Readonly my $usage => 'void set_token_type_channel(int ttype, int channel)'; + croak $usage if @_ != 3; + my ($self, $ttype, $channel) = @_; + + if (!defined $self->channel_override_map) { + $self->channel_override_map({}); + } + + $self->channel_override_map->{$ttype} = $channel; +} + +sub discard_token_type { + Readonly my $usage => 'void discard_token_type(int ttype)'; + croak $usage if @_ != 2; + my ($self, $ttype) = @_; + + if (!defined $self->discard_set) { + $self->discard_set({}); + } + + $self->discard_set->{$ttype} = 1; +} + +sub get_tokens { + Readonly my $usage => 'List get_tokens($args)'; + croak $usage if @_ != 2 && @_ != 1; + my ($self, $args) = @_; + + if ($self->p == -1) { + $self->fill_buffer(); + } + if (!defined $args) { + return $self->tokens; + } + + my $start = $args->{start}; + my $stop = $args->{stop}; + + my $types; + if (exists $args->{types}) { + if (ref $args->{types} eq 'ARRAY') { + $types = ANTLR::Runtime::BitSet->new($args->{types}); + } else { + $types = $args->{types}; + } + } else { + my $ttype = $args->{ttype}; + $types = ANTLR::Runtime::BitSet->of($ttype); + } + + + if ($stop >= @{$self->tokens}) { + $stop = $#{$self->tokens}; + } + if ($start < 0) { + $start = 0; + } + + if ($start > $stop) { + return undef; + } + + my $filtered_tokens = []; + foreach my $t (@{$self->tokens}[$start..$stop]) { + if (!defined $types || $types->member($t->get_type())) { + push @$filtered_tokens, $t; + } + } + + if (!@{$filtered_tokens}) { + $filtered_tokens = undef; + } + + return $filtered_tokens; +} + +sub LT { + Readonly my $usage => 'Token LT(int k)'; + croak $usage if @_ != 2; + my ($self, $k) = @_; + + if ($self->p == -1) { + $self->fill_buffer(); + } + if ($k == 0) { + return undef; + } + if ($k < 0) { + return $self->LB(-$k); + } + + if ($self->p + $k - 1 >= @{$self->tokens}) { + return ANTLR::Runtime::Token->EOF_TOKEN; + } + + my $i = $self->p; + my $n = 1; + + while ($n < $k) { + $i = $self->skip_off_token_channels($i+1); + ++$n; + } + + if ($i >= @{$self->tokens}) { + return ANTLR::Runtime::Token->EOF_TOKEN; + } + + return $self->tokens->[$i]; +} + +sub LB { + Readonly my $usage => 'Token LB(int k)'; + croak $usage if @_ != 2; + my ($self, $k) = @_; + + if ($self->p == -1) { + $self->fill_buffer(); + } + if ($k == 0) { + return undef; + } + if ($self->p - $k < 0) { + return undef; + } + + my $i = $self->p; + my $n = 1; + while ($n <= $k) { + $k = $self->skip_off_token_channels_reverse($i - 1); + ++$n; + } + + if ($i < 0) { + return undef; + } + + return $self->tokens->[$i]; +} + +sub get { + Readonly my $usage => 'Token get(int i)'; + croak $usage if @_ != 2; + my ($self, $i) = @_; + + return $self->tokens->[$i]; +} + +sub LA { + Readonly my $usage => 'int LA(int i)'; + croak $usage if @_ != 2; + my ($self, $i) = @_; + + return $self->LT($i)->get_type(); +} + +sub mark { + Readonly my $usage => 'int mark()'; + croak $usage if @_ != 1; + my ($self) = @_; + + if ($self->p == -1) { + $self->fill_buffer(); + } + $self->last_marker($self->index()); + return $self->last_marker; +} + +sub release { + Readonly my $usage => 'void release(int marker)'; + croak $usage if @_ != 2; + my ($self, $marker) = @_; + + # no resources to release +} + +sub size { + Readonly my $usage => 'int size()'; + croak $usage if @_ != 1; + my ($self) = @_; + + return scalar @{$self->tokens}; +} + +sub index { + Readonly my $usage => 'int index()'; + croak $usage if @_ != 1; + my ($self) = @_; + + return $self->p; +} + +sub rewind { + Readonly my $usage => 'void rewind(int marker) | void rewind()'; + croak $usage if @_ != 1 && @_ != 2; + + if (@_ == 1) { + my ($self) = @_; + $self->seek($self->last_marker); + } else { + my ($self, $marker) = @_; + $self->seek($marker); + } +} + +sub seek { + Readonly my $usage => 'void seek(int index)'; + croak $usage if @_ != 2; + my ($self, $index) = @_; + + $self->p($index); +} + +sub get_token_source { + Readonly my $usage => 'TokenSource get_token_source()'; + croak $usage if @_ != 1; + my ($self) = @_; + + return $self->token_source; +} + +sub get_source_name { + my ($self) = @_; + return $self->get_token_source()->get_source_name(); +} + +sub str { + my ($self) = @_; + return $self->to_string(); +} + +sub to_string { + Readonly my $usage => 'String to_string() | String to_string(int start, int stop | String to_string(Token start, Token stop)'; + croak $usage if @_ != 1 && @_ != 3; + + if (@_ == 1) { + my ($self) = @_; + + if ($self->p == -1) { + $self->fill_buffer(); + } + return $self->to_string(0, $#{$self->tokens}); + } else { + my ($self, $start, $stop) = @_; + + if (defined $start && defined $stop) { + if (ref($start) && $start->isa('ANTLR::Runtime::Token')) { + $start = $start->get_token_index(); + } + + if (ref($start) && $stop->isa('ANTLR::Runtime::Token')) { + $stop = $stop->get_token_index(); + } + + if ($start < 0 || $stop < 0) { + return undef; + } + if ($self->p == -1) { + $self->fill_buffer(); + } + if ($stop >= @{$self->tokens}) { + $stop = $#{$self->tokens}; + } + + my $buf = ''; + foreach my $t (@{$self->tokens}[$start..$stop]) { + $buf .= $t->get_text(); + } + + return $buf; + } else { + return undef; + } + } +} + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/DFA.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/DFA.pm new file mode 100644 index 0000000..acad7cd --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/DFA.pm @@ -0,0 +1,231 @@ +package ANTLR::Runtime::DFA; +use ANTLR::Runtime::Class; + +use Params::Validate qw( :types ); +use Error qw( :try ); + +has 'eot'; +has 'eof'; +has 'min'; +has 'max'; +has 'accept'; +has 'special'; +has 'transition'; +has 'decision_number'; + +# Which recognizer encloses this DFA? Needed to check backtracking +has 'recognizer'; + +sub get_description { + return "n/a"; +} + +# From the input stream, predict what alternative will succeed +# using this DFA (representing the covering regular approximation +# to the underlying CFL). Return an alternative number 1..n. Throw +# an exception upon error. +sub predict { + my $self = shift; + my $param_ref = __PACKAGE__->unpack_params(\@_, { + spec => [ + { + name => 'input', + isa => 'ANTLR::Runtime::IntStream', + } + + ] + }); + my $input = $param_ref->{input}; + + my $mark = $input->mark(); # remember where decision started in input + my $s = 0; # we always start at s0 + + try { + while (1) { + my $special_state = $self->special->[$s]; + if ($special_state >= 0) { + $s = $self->special_state_transition($special_state, $input); + if ($s == -1) { + $self->no_viable_alt($s, $input); + return 0; + } + $input->consume(); + next; + } + + if ($self->accept->[$s] >= 1) { + return $self->accept->[$s]; + } + + # look for a normal char transition + my $c = $input->LA(1); # -1 == \uFFFF, all tokens fit in 65000 space + + if ($c >= $self->min->[$s] && $c <= $self->max->[$s]) { + my $next_s = $self->transition->[$s][$c - $self->min->[$s]]; # move to next state + + if ($next_s < 0) { + # was in range but not a normal transition + # must check EOT, which is like the else clause. + # eot[s]>=0 indicates that an EOT edge goes to another + # state. + if ($self->eot->[$s] >= 0) { # EOT Transition to accept state? + $s = $self->eot->[$s]; + $input->consume(); + # TODO: I had this as return accept[eot[s]] + # which assumed here that the EOT edge always + #went to an accept...faster to do this, but + # what about predicated edges coming from EOT + # target? + next; + } + + $self->no_viable_alt($s, $input); + return 0; + } + + $s = $next_s; + $input->consume(); + next; + } + + if ($self->eot->[$s] >= 0) { # EOT Transition? + $s = $self->eot->[$s]; + $input->consume(); + next; + } + + if ($c == ANTLR::Runtime::Token->EOF && $self->eof->[$s] >= 0) { # EOF Transition to accept state? + return $self->accept->[$self->eof->[$s]]; + } + + # not in range and not EOF/EOT, must be invalid symbol + $self->no_viable_alt($s, $input); + return 0; + } + } + finally { + $input->rewind(); + }; +} + +sub no_viable_alt { + my $self = shift; + my $param_ref = __PACKAGE__->unpack_params(\@_, { + spec => [ + { + name => 's', + type => SCALAR, + }, + { + name => 'input', + isa => 'ANTLR::Runtime::IntStream' + }, + ] + }); + my $s = $param_ref->{s}; + my $input = $param_ref->{input}; + + if ($self->recognizer->state->backtracking > 0) { + $self->recognizer->state->failed = 1; + return; + } + my $nvae = ANTLR::Runtime::NoViableAltException({ + grammar_decision_description => $self->get_description(), + decision_number => $self->decision_number, + state_number => $self->state_number, + input => $input + }); + $self->error($nvae); + $nvae->throw(); +} + +# A hook for debugging interface +sub error { + my $self = shift; + my $param_ref = __PACKAGE__->unpack_params(\@_, { + spec => [ + { + name => 'nvae', + isa => 'ANTLR::Runtime::NoViableAltException', + } + ] + }); + + my $nvae = $param_ref->{nvae}; +} + +sub special_state_transition { + my $self = shift; + my $param_ref = __PACKAGE__->unpack_params(\@_, { + spec => [ + { + name => 's', + type => SCALAR, + }, + { + name => 'input', + isa => 'ANTLR::Runtime::IntStream', + }, + ] + }); + + return -1; +} + +sub unpack_rle { + my $self = shift; + my $param_ref = __PACKAGE__->unpack_params(\@_, { + spec => [ + { + name => 'rle', + type => ARRAYREF, + } + ] + }); + my $rle = $param_ref->{rle}; + + my $data = []; + for (my $i = 0; $i < scalar @$rle; $i += 2) { + my $count = $rle->[$i]; + my $item = $rle->[$i]; + + push @$data, ($item) x $count; + } + + return $data; +} + +# Given a String that has a run-length-encoding of some unsigned shorts +# like "\1\2\3\9", convert to short[] {2,9,9,9}. We do this to avoid +# static short[] which generates so much init code that the class won't +# compile. :( +sub unpack_encoded_string { + my $self = shift; + my $param_ref = __PACKAGE__->unpack_params(\@_, { + spec => [ + { + name => 'encoded_string', + type => SCALAR, + }, + ] + }); + + my $encoded_string = $param_ref->{encoded_string}; + + my $data = []; + while ($encoded_string =~ /(.)(.)/g) { + my ($n, $v) = ($1, $2); + + push @$data, $v x $n; + } + + return $data; +} + +sub unpack_encoded_string_to_unsigned_chars { + unpack_encoded_string(@_); +} + +1; + +__END__ diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/EarlyExitException.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/EarlyExitException.pm new file mode 100644 index 0000000..17ccd44 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/EarlyExitException.pm @@ -0,0 +1,8 @@ +package ANTLR::Runtime::EarlyExitException; + +use strict; +use warnings; + +use base qw( ANTLR::Runtime::Exception ); + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Exception.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Exception.pm new file mode 100644 index 0000000..0d4fc64 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Exception.pm @@ -0,0 +1,41 @@ +package ANTLR::Runtime::Exception; +use ANTLR::Runtime::Class; + +use Exception::Class; + +has 'base'; + +sub BUILD { + my ($self, $arg_ref) = @_; + + my %base_args; + if (defined (my $message = $arg_ref->{message})) { + $base_args{message} = $message; + } + my $base = Exception::Class::Base->new(%base_args); + + $self->base($base); +} + +sub message { + my ($self, @args) = @_; + return $self->base->message(@args); +} + +sub throw { + return Exception::Class::Base::throw(@_); +} + +sub rethrow { + return Exception::Class::Base::rethrow(@_); +} + +sub caught { + return Exception::Class::Base::caught(@_); +} + +sub description { + return 'ANTLR::Runtime Base Exception'; +} + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/IntStream.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/IntStream.pm new file mode 100644 index 0000000..bc518fc --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/IntStream.pm @@ -0,0 +1,7 @@ +package ANTLR::Runtime::IntStream; +use ANTLR::Runtime::Class; + +sub consume { +} + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Lexer.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Lexer.pm new file mode 100644 index 0000000..fe0360b --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Lexer.pm @@ -0,0 +1,361 @@ +package ANTLR::Runtime::Lexer; +use ANTLR::Runtime::Class; + +use English qw( -no_match_vars ); +use Readonly; +use Carp; +use Switch; + +use ANTLR::Runtime::Class; +use ANTLR::Runtime::Token; +use ANTLR::Runtime::CharStream; +use ANTLR::Runtime::MismatchedTokenException; + +extends 'ANTLR::Runtime::BaseRecognizer', 'ANTLR::Runtime::TokenSource'; + +has 'input'; + +sub BUILD { + my ($self, $arg_ref) = @_; + + $self->input($arg_ref->{input}); +} + +sub reset { + Readonly my $usage => 'reset()'; + croak $usage if @_ != 1; + my ($self) = @_; + + # reset all recognizer state variables + $self->SUPER::reset(); + + # wack Lexer state variables + if (defined $self->input) { + # rewind the input + $self->input->seek(0); + } + + if (defined $self->state) { + $self->state->token(undef); + $self->state->type(ANTLR::Runtime::Token->INVALID_TOKEN_TYPE); + $self->state->channel(ANTLR::Runtime::Token->DEFAULT_CHANNEL); + $self->state->token_start_char_index(-1); + $self->state->token_start_char_position_in_line(-1); + $self->state->start_line(-1); + $self->state->text(undef); + } +} + +# Return a token from this source; i.e., match a token on the char +# stream. +sub next_token { + Readonly my $usage => 'Token next_token()'; + croak $usage if @_ != 1; + my ($self) = @_; + + while (1) { + $self->state->token(undef); + $self->state->channel(ANTLR::Runtime::Token->DEFAULT_CHANNEL); + $self->state->token_start_char_index($self->input->index()); + $self->state->token_start_char_position_in_line($self->input->get_char_position_in_line()); + $self->state->token_start_line($self->input->get_line()); + $self->state->text(undef); + + if ($self->input->LA(1) eq ANTLR::Runtime::CharStream->EOF) { + return ANTLR::Runtime::Token->EOF_TOKEN; + } + + my $rv; + my $op = ''; + eval { + $self->m_tokens(); + if (!defined $self->state->token) { + $self->emit(); + } + elsif ($self->state->token == ANTLR::Runtime::Token->SKIP_TOKEN) { + $op = 'next'; + return; + } + $op = 'return'; + $rv = $self->state->token; + }; + return $rv if $op eq 'return'; + next if $op eq 'next'; + + if ($EVAL_ERROR) { + my $exception = $EVAL_ERROR; + if ($exception->isa('ANTLR::Runtime::RecognitionException')) { + $self->report_error($exception); + $self->recover($exception); + } else { + croak $exception; + } + } + } +} + +# Instruct the lexer to skip creating a token for current lexer rule +# and look for another token. nextToken() knows to keep looking when +# a lexer rule finishes with token set to SKIP_TOKEN. Recall that +# if token==null at end of any token rule, it creates one for you +# and emits it. +sub skip { + Readonly my $usage => 'skip()'; + croak $usage if @_ != 1; + my ($self) = @_; + + $self->state->token(ANTLR::Runtime::Token->SKIP_TOKEN); + return; +} + +# This is the lexer entry point that sets instance var 'token' +sub m_tokens { + croak "Unimplemented"; +} + +# Set the char stream and reset the lexer +sub set_char_stream { + Readonly my $usage => 'set_char_stream(CharStream $input)'; + croak $usage if @_ != 2; + my ($self, $input) = @_; + + $self->input(undef); + $self->reset(); + $self->input($input); +} + +sub get_char_stream { + my ($self) = @_; + return $self->input; +} + +sub get_source_name { + my ($self) = @_; + return $self->input->get_source_name(); +} + +sub emit { + Readonly my $usage => 'void emit(Token $token) | Token emit()'; + croak $usage if @_ != 1 && @_ != 2; + + if (@_ == 1) { + my ($self) = @_; + # The standard method called to automatically emit a token at the + # outermost lexical rule. The token object should point into the + # char buffer start..stop. If there is a text override in 'text', + # use that to set the token's text. Override this method to emit + # custom Token objects. + my $t = ANTLR::Runtime::CommonToken->new({ + input => $self->input, + type => $self->state->type, + channel => $self->state->channel, + start => $self->state->token_start_char_index, + stop => $self->get_char_index() - 1 + }); + + $t->set_line($self->state->token_start_line); + $t->set_text($self->state->text); + $t->set_char_position_in_line($self->state->token_start_char_position_in_line); + $self->emit($t); + return $t; + } elsif (@_ == 2) { + my ($self, $token) = @_; + # Currently does not support multiple emits per nextToken invocation + # for efficiency reasons. Subclass and override this method and + # nextToken (to push tokens into a list and pull from that list rather + # than a single variable as this implementation does). + $self->state->token($token); + } +} + +sub match { + Readonly my $usage => 'void match(string|char s)'; + croak $usage if @_ != 2; + my ($self, $s) = @_; + + foreach my $c (split //, $s) { + if ($self->input->LA(1) ne $c) { + if ($self->state->backtracking > 0) { + $self->state->failed(1); + return; + } + my $mte = ANTLR::Runtime::MismatchedTokenException->new({ + expecting => $c, + input => $self->input + }); + $self->recover($mte); + croak $mte; + } + $self->input->consume(); + $self->state->failed(0); + } +} + +sub match_any { + Readonly my $usage => 'void match_any()'; + croak $usage if @_ != 1; + my ($self) = @_; + + $self->input->consume(); +} + +sub match_range { + Readonly my $usage => 'void match_range($a, $b)'; + croak $usage if @_ != 3; + my ($self, $a, $b) = @_; + + if ($self->input->LA(1) lt $a || $self->input->LA(1) gt $b) { + if ($self->state->backtracking > 0) { + $self->state->failed(1); + return; + } + + my $mre = ANTLR::Runtime::MismatchedRangeException($a, $b, $self->input); + $self->recover($mre); + croak $mre; + } + + $self->input->consume(); + $self->state->failed(0); +} + +sub get_line { + Readonly my $usage => 'int get_line()'; + croak $usage if @_ != 1; + my ($self) = @_; + + return $self->input->get_line(); +} + +sub get_char_position_in_line { + Readonly my $usage => 'int get_char_position_in_line()'; + croak $usage if @_ != 1; + my ($self) = @_; + + return $self->input->get_char_position_in_line(); +} + +# What is the index of the current character of lookahead? +sub get_char_index { + Readonly my $usage => 'int get_char_index()'; + croak $usage if @_ != 1; + my ($self) = @_; + + return $self->input->index(); +} + +# Return the text matched so far for the current token or any +# text override. +sub get_text { + Readonly my $usage => 'string get_text()'; + croak $usage if @_ != 1; + my ($self) = @_; + + if (defined $self->state->text) { + return $self->state->text; + } + return $self->input->substring($self->state->token_start_char_index, $self->get_char_index() - 1); +} + +# Set the complete text of this token; it wipes any previous +# changes to the text. +sub set_text { + Readonly my $usage => 'void set_text(string text)'; + croak $usage if @_ != 2; + my ($self, $text) = @_; + + $self->state->text($text); +} + +sub report_error { + Readonly my $usage => 'void report_error(RecognitionException e)'; + croak $usage if @_ != 2; + my ($self, $e) = @_; + + $self->display_recognition_error($self->get_token_names(), $e); +} + +sub get_error_message { + Readonly my $usage => 'String get_error_message(RecognitionException e, String[] token_names)'; + croak $usage if @_ != 3; + my ($self, $e, $token_names) = @_; + + my $msg; + if ($e->isa('ANTLR::Runtime::MismatchedTokenException')) { + $msg = 'mismatched character ' + . $self->get_char_error_display($e->get_c()) + . ' expecting ' + . $self->get_char_error_display($e->expecting); + } elsif ($e->isa('ANTLR::Runtime::NoViableAltException')) { + $msg = 'no viable alternative at character ' . $self->get_char_error_display($e->get_c()); + } elsif ($e->isa('ANTLR::Runtime::EarlyExitException')) { + $msg = 'required (...)+ loop did not match anything at character ' + . $self->get_char_error_display($e->get_c()); + } elsif ($e->isa('ANTLR::Runtime::MismatchedSetException')) { + $msg = 'mismatched character ' . $self->get_char_error_display($e->get_c()) + . ' expecting set ' . $e->expecting; + } elsif ($e->isa('ANTLR::Runtime::MismatchedNotSetException')) { + $msg = 'mismatched character ' . $self->get_char_error_display($e->get_c()) + . ' expecting set ' . $e->expecting; + } elsif ($e->isa('ANTLR::Runtime::MisMatchedRangeException')) { + $msg = 'mismatched character ' . $self->get_char_error_display($e->get_c()) + . ' expecting set ' . $self->get_char_error_display($e->a) + . '..' . $self->get_char_error_display($e->b); + } else { + $msg = $self->SUPER::get_error_message($e, $token_names); + } + return $msg; +} + +sub get_char_error_display { + Readonly my $usage => 'String get_char_error_display(int c)'; + croak $usage if @_ != 2; + my ($self, $c) = @_; + + my $s; + if ($c eq ANTLR::Runtime::Token->EOF) { + $s = ''; + } elsif ($c eq "\n") { + $s = '\n'; + } elsif ($c eq "\t") { + $s = '\t'; + } elsif ($c eq "\r") { + $s = '\r'; + } else { + $s = $c; + } + + return "'$s'"; +} + +# Lexers can normally match any char in it's vocabulary after matching +# a token, so do the easy thing and just kill a character and hope +# it all works out. You can instead use the rule invocation stack +# to do sophisticated error recovery if you are in a fragment rule. +sub recover { + Readonly my $usage => 'void recover(RecognitionException re)'; + croak $usage if @_ != 2; + my ($self, $re) = @_; + + $self->input->consume(); +} + +sub trace_in { + Readonly my $usage => 'void trace_in(String rule_name, int rule_index)'; + croak $usage if @_ != 3; + my ($self, $rule_name, $rule_index) = @_; + + my $input_symbol = $self->input->LT(1) . ' line=' . $self->get_line() . ':' . $self->get_char_position_in_line(); + $self->SUPER::trace_in($rule_name, $rule_index, $input_symbol); +} + +sub trace_out { + Readonly my $usage => 'void trace_out(String rule_name, int rule_index)'; + croak $usage if @_ != 3; + my ($self, $rule_name, $rule_index) = @_; + + my $input_symbol = $self->input->LT(1) . ' line=' . $self->get_line() . ':' . $self->get_char_position_in_line(); + $self->SUPER::trace_out($rule_name, $rule_index, $input_symbol); +} + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/MismatchedSetException.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/MismatchedSetException.pm new file mode 100644 index 0000000..e0055e9 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/MismatchedSetException.pm @@ -0,0 +1,6 @@ +package ANTLR::Runtime::MismatchedSetException; +use ANTLR::Runtime::Class; + +extends 'ANTLR::Runtime::Exception'; + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/MismatchedTokenException.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/MismatchedTokenException.pm new file mode 100644 index 0000000..fb332af --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/MismatchedTokenException.pm @@ -0,0 +1,37 @@ +package ANTLR::Runtime::MismatchedTokenException; +use ANTLR::Runtime::Class; + +use Params::Validate qw( :types ); +use ANTLR::Runtime::Token; + +use overload + '""' => \&to_string, + 'bool' => sub { 1 }, + fallback => 1; + +extends 'ANTLR::Runtime::RecognitionException'; + +has 'expecting'; + +sub BUILD { + my ($self, $arg_ref) = @_; + + if (exists $arg_ref->{expecting}) { + $self->expecting($arg_ref->{expecting}); + } + else { + $self->expecting(ANTLR::Runtime::Token->INVALID_TOKEN_TYPE); + } +} + +sub get_expecting { + my ($self) = @_; + return $self->expecting; +} + +sub to_string { + my ($self) = @_; + return "MismatchedTokenException(" . $self->get_unexpected_type() . "!=" . $self->expecting . ")"; +} + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/MissingTokenException.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/MissingTokenException.pm new file mode 100644 index 0000000..c6b5d78 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/MissingTokenException.pm @@ -0,0 +1,36 @@ +package ANTLR::Runtime::MissingTokenException; +use ANTLR::Runtime::Class; + +use overload + '""' => \&to_string; + +extends 'ANTLR::Runtime::MismatchedTokenException'; + +has 'inserted'; + +sub BUILD { + my ($self, $arg_ref) = @_; + my $inserted = $arg_ref->{inserted}; + $self->inserted($inserted); +} + +sub get_missing_type { + my ($self) = @_; + return $self->expecting; +} + +sub to_string { + my ($self) = @_; + + if (defined (my $inserted = $self->inserted) && defined (my $token = $self->token)) { + return "MissingTokenException(inserted $inserted at " . $token->get_text() . ")"; + } + if (defined $self->token) { + return "MissingTokenException(at " . $self->token->get_text() . ")"; + } + + return "MissingTokenException"; +} + +1; +__END__ diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/NoViableAltException.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/NoViableAltException.pm new file mode 100644 index 0000000..314cf66 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/NoViableAltException.pm @@ -0,0 +1,20 @@ +package ANTLR::Runtime::NoViableAltException; +use ANTLR::Runtime::Class; + +extends 'ANTLR::Runtime::RecognitionException'; + +has 'grammar_decision_description'; +has 'decision_number'; +has 'state_number'; + +sub BUILD { + my ($self, $arg_ref) = @_; + my ($grammar_decision_description, $decision_number, $state_number, $input) = + @$arg_ref{qw( grammar_decision_description decision_number state_number input )}; + + $self->grammar_decision_description($grammar_decision_description); + $self->decision_number($decision_number); + $self->state_number($state_number); +} + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Object.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Object.pm new file mode 100644 index 0000000..2b06440 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Object.pm @@ -0,0 +1,206 @@ +package ANTLR::Runtime::Object; + +use strict; +use warnings; + +use Carp; +use Attribute::Handlers; +use List::MoreUtils qw( zip ); +use Params::Validate qw( validate ); + +BEGIN { + our @EXPORT = qw( unpack_params has ); +} + +sub Constant :ATTR(BEGIN) { + my ($package, $symbol, $referent, $attr, $data, $phase, $filename, $linenum) = @_; + my $args; + if (defined $data) { + $args = { @$data }; + } + else { + $args = {}; + } + + my $name; + if ($args->{Name}) { + $name = $args->{Name}; + } + else { + $name = *{$symbol}{NAME}; + } + + no strict 'refs'; + *{"${package}::$name"} = sub { + return $$referent; + }; +} + +sub Signature :ATTR(CODE) { + my ($package, $symbol, $referent, $attr, $data, $phase, $filename, $linenum) = @_; + #print map {"$_\n"} @_; +} + +sub MODIFY_ARRAY_ATTRIBUTES { + my ($package, $referent, @attributes) = @_; + + my @filtered_attributes; + foreach my $attribute (@attributes) { + if ($attribute =~ /^Field\((\w*)\)$/) { + my $name = $1; + push @filtered_attributes, 'Field'; + push @filtered_attributes, "Accessor(Name => '$name', Private => 1, lvalue => 1)"; + } + elsif ($attribute =~ /^Name\((\w*)\)$/) { + my $name = $1; + push @filtered_attributes, "Accessor(Name => '$name', Private => 1, lvalue => 1)"; + } + else { + push @filtered_attributes, $attribute; + } + } + return; +} + +sub Abstract :ATTR(CODE) { + my ($package, $symbol, $referent, $attr, $data, $phase, $filename, $linenum) = @_; + + my $fqmn = $package . '::' . *{$symbol}{NAME}; + no strict 'refs'; + *{$fqmn} = sub { + my ($file, $line) = (caller)[1,2]; + croak "call to abstract method $fqmn at $file line $line.\n"; + }; +} + +sub unpack_params { + my ($self, $params_ref, $opt_ref) = @_; + + my $spec = $opt_ref->{spec}; + + my @params = @$params_ref; + my $named_param_ref; + if (@params == 1 && ref $params[0] eq 'HASH') { + $named_param_ref = $params[0]; + } + else { + my @names = map { $_->{name} } grep { exists $_->{name} } @$spec; + $named_param_ref = { + zip(@names, @params) + }; + } + + my $validate_spec = {}; + foreach my $s (@$spec) { + my $name = $s->{name}; + my $vspec = { %$s }; + delete $vspec->{name}; + if (exists $vspec->{required}) { + $vspec->{optional} = $vspec->{required}; + } + $validate_spec->{$name} = $vspec; + } + + my $params_unpacked_ref = { + validate(@{[ $named_param_ref ]}, $validate_spec) + }; + + return $params_unpacked_ref; +} + +sub unpack_method_args { + my ($class, $args_ref, $opt_ref) = @_; + + my $spec = $opt_ref->{spec}; + my @param_names = map { $_->{name} } grep { exists $_->{name} } @$spec; + + my ($obj, @args) = @$args_ref; + my $named_args_ref; + if (@args == 1 && ref $args[0] eq 'HASH') { + $named_args_ref = $args[0]; + } + else { + $named_args_ref = { + zip(@param_names, @args) + }; + } + + my $validate_spec = {}; + foreach my $s (@$spec) { + my $name = $s->{name}; + my $vspec = { %$s }; + delete $vspec->{name}; + if (exists $vspec->{required}) { + $vspec->{optional} = $vspec->{required}; + } + $validate_spec->{$name} = $vspec; + } + + my $unpacked_args_ref = { + validate(@{[ $named_args_ref ]}, $validate_spec) + }; + + return ($obj, @{ $unpacked_args_ref }{ @param_names }); +} + +#--- + + +sub new { + my ($class, @args) = @_; + my $self = bless {}, $class; + my $arg_ref = $class->BUILDARGS(@args); + $self->BUILDALL($arg_ref); + return $self; +} + +sub BUILDARGS { + my ($class, @args) = @_; + + if (@args == 1) { + if (ref $args[0] eq 'HASH') { + return $args[0]; + } + else { + croak "Single parameters to new must be a hash reference"; + } + } + else { + return {@args}; + } +} + +sub linearized_isa { + my ($class) = @_; + return @{ mro::get_linear_isa($class) }; +} + +sub BUILDALL { + my ($self, $arg_ref) = @_; + foreach my $method (map { "${_}::BUILD" } reverse linearized_isa(ref $self)) { + if ($self->can($method)) { + $self->$method($arg_ref); + } + } + return; +} + +sub DEMOLISHALL { + my ($self) = @_; + foreach my $method (map { "${_}::DEMOLISH" } reverse linearized_isa(ref $self)) { + if ($self->can($method)) { + $self->$method(); + } + } + return; +} + +sub DESTROY { + my ($self) = @_; + + local $@ if $@; + $self->DEMOLISHALL; + return; +} + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Object/Signature.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Object/Signature.pm new file mode 100644 index 0000000..7143b2f --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Object/Signature.pm @@ -0,0 +1,19 @@ +package ANTLR::Runtime::Object::Signature; + +use strict; +use warnings; + +use Attribute::Handlers; +use Filter::Simple; + +sub Signature :ATTR(CODE) { + my ($package, $symbol, $referent, $attr, $data, $phase, $filename, $linenum) = @_; + #print map {"$_\n"} @_; +} + +FILTER { + #s{return \$lhs \+ \$rhs;}{ print "\@_\n"; }; + s{(return \$lhs \+ \$rhs;)}{ my \$self = shift; my \$lhs = shift; my \$rhs = shift; $1 }; +}; + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Parser.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Parser.pm new file mode 100644 index 0000000..e72f8e3 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Parser.pm @@ -0,0 +1,102 @@ +package ANTLR::Runtime::Parser; +use ANTLR::Runtime::Class; + +use Readonly; +use Carp; + +extends 'ANTLR::Runtime::BaseRecognizer'; + +has 'input'; + +sub BUILD { + my ($self, $arg_ref) = @_; + + $self->set_token_stream($arg_ref->{input}); +} + +sub reset { + Readonly my $usage => 'void reset()'; + croak $usage if @_ != 1; + my ($self) = @_; + + $self->SUPER::reset(); # reset all recognizer state variables + if (defined $self->input) { + $self->input->seek(0); # rewind the input + } +} + +sub get_current_input_symbol { + my ($self, $input) = @_; + return $self->input->LT(1); +} + +sub get_missing_symbol { + my ($self, $arg_ref) = @_; + my $input = $arg_ref->{input}; + my $exception = $arg_ref->{exception}; + my $expected_token_type = $arg_ref->{expected_token_type}; + my $follow = $arg_ref->{follow}; + + my $token_text; + if ($expected_token_type == ANTLR::Runtime::Token->EOF) { + $token_text = ''; + } + else { + $token_text = 'get_token_names()->[$expected_token_type] . '>'; + } + + my $t = ANTLR::Runtime::CommonToken->new({ + type => $expected_token_type, + text => $token_text + }); + my $current = $input->LT(1); + if ($current->get_type() == ANTLR::Runtime::Token->EOF) { + $current = $input->LT(-1); + } + $t->set_line($current->get_line()); + $t->set_char_position_in_line($current->get_char_position_in_line()); + $t->set_channel($self->DEFAULT_TOKEN_CHANNEL); + + return $t; +} + +sub set_token_stream { + Readonly my $usage => 'void set_token_stream(TokenStream input)'; + croak $usage if @_ != 2; + my ($self, $input) = @_; + + $self->input(undef); + $self->reset(); + $self->input($input); +} + +sub get_token_stream { + Readonly my $usage => 'TokenStream get_token_stream()'; + croak $usage if @_ != 1; + my ($self) = @_; + + return $self->input; +} + +sub get_source_name { + my ($self) = @_; + return $self->input->get_source_name(); +} + +sub trace_in { + Readonly my $usage => 'void trace_in(String rule_name, int rule_index)'; + croak $usage if @_ != 3; + my ($self, $rule_name, $rule_index) = @_; + + $self->SUPER::trace_in($rule_name, $rule_index, $self->input->LT(1)); +} + +sub trace_out { + Readonly my $usage => 'void trace_out(String rule_name, int rule_index)'; + croak $usage if @_ != 3; + my ($self, $rule_name, $rule_index) = @_; + + $self->SUPER::trace_out($rule_name, $rule_index, $self->input->LT(1)); +} + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/ParserRuleReturnScope.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/ParserRuleReturnScope.pm new file mode 100644 index 0000000..8c0bcb4 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/ParserRuleReturnScope.pm @@ -0,0 +1,20 @@ +package ANTLR::Runtime::ParserRuleReturnScope; +use ANTLR::Runtime::Class; + +extends 'ANTLR::Runtime::RuleReturnScope'; + +has 'start'; +has 'stop'; + +sub get_start { + my ($self) = @_; + return $self->start; +} + +sub get_stop { + my ($self) = @_; + return $self->stop; +} + +1; +__END__ diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/RecognitionException.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/RecognitionException.pm new file mode 100644 index 0000000..ebad42c --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/RecognitionException.pm @@ -0,0 +1,90 @@ +package ANTLR::Runtime::RecognitionException; +use ANTLR::Runtime::Class; + +use Carp; +use Readonly; + +extends 'ANTLR::Runtime::Exception'; + +has 'input'; +has 'index'; +has 'token'; +has 'node'; +has 'c'; +has 'line'; +has 'char_position_in_line'; + +sub BUILD { + my ($self, $arg_ref) = @_; + + if ($arg_ref) { + my $input = $arg_ref->{input}; + + $self->input($input); + $self->index($input->index()); + + if ($input->isa('ANTLR::Runtime::TokenStream')) { + $self->token($input->LT(1)); + $self->line($self->token->get_line()); + $self->char_position_in_line($self->token->get_char_position_in_line()); + } + if ($input->isa('ANTLR::Runtime::CommonTreeNodeStream')) { + $self->node = $input->LT(1); + if ($self->node->isa('ANTLR::Runtime::CommonTree')) { + $self->token($self->node->token); + $self->line($self->token->get_line()); + $self->char_position_in_line($self->token->get_char_position_in_line()); + } + + } elsif ($input->isa('ANTLR::Runtime::CharStream')) { + $self->c($input->LA(1)); + $self->line($input->get_line()); + $self->char_position_in_line($input->get_char_position_in_line()); + } else { + $self->c($input->LA(1)); + } + } + else { + $self->input(undef); + $self->index(0); + $self->token(undef); + $self->node(undef); + $self->c(0); + $self->line(0); + $self->char_position_in_line(0); + } +} + +sub get_unexpected_type { + Readonly my $usage => 'int get_unexpected_type()'; + croak $usage if @_ != 1; + my ($self) = @_; + + if ($self->input->isa('ANTLR::Runtime::TokenStream')) { + return $self->token->get_type(); + } else { + return $self->c; + } +} + +sub get_c { + my ($self) = @_; + return $self->c; +} + +sub get_line { + my ($self) = @_; + return $self->line; +} + +sub get_char_position_in_line { + my ($self) = @_; + return $self->char_position_in_line; +} + +sub get_token { + my ($self) = @_; + return $self->token; +} + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/RecognizerSharedState.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/RecognizerSharedState.pm new file mode 100644 index 0000000..b114dde --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/RecognizerSharedState.pm @@ -0,0 +1,84 @@ +package ANTLR::Runtime::RecognizerSharedState; +use ANTLR::Runtime::Class; + +# Track the set of token types that can follow any rule invocation. +# Stack grows upwards. When it hits the max, it grows 2x in size +# and keeps going. +has 'following'; +has '_fsp'; + +# This is true when we see an error and before having successfully +# matched a token. Prevents generation of more than one error message +# per error. +has 'error_recovery'; + +# The index into the input stream where the last error occurred. +# This is used to prevent infinite loops where an error is found +# but no token is consumed during recovery...another error is found, +# ad naseum. This is a failsafe mechanism to guarantee that at least +# one token/tree node is consumed for two errors. +has 'last_error_index'; + +# In lieu of a return value, this indicates that a rule or token +# has failed to match. Reset to false upon valid token match. +has 'failed'; + +# Did the recognizer encounter a syntax error? Track how many. +has 'syntax_errors'; + +# If 0, no backtracking is going on. Safe to exec actions etc... +# If >0 then it's the level of backtracking. +has 'backtracking'; + +# An array[size num rules] of Map that tracks +# the stop token index for each rule. ruleMemo[ruleIndex] is +# the memoization table for ruleIndex. For key ruleStartIndex, you +# get back the stop token for associated rule or MEMO_RULE_FAILED. +# This is only used if rule memoization is on (which it is by default). +has 'rule_memo'; + +# The goal of all lexer rules/methods is to create a token object. +# This is an instance variable as multiple rules may collaborate to +# create a single token. nextToken will return this object after +# matching lexer rule(s). If you subclass to allow multiple token +# emissions, then set this to the last token to be matched or +# something nonnull so that the auto token emit mechanism will not +# emit another token. +has 'token'; + +# What character index in the stream did the current token start at? +# Needed, for example, to get the text for current token. Set at +# the start of nextToken. +has 'token_start_char_index'; + +# The line on which the first character of the token resides +has 'token_start_line'; + +# The character position of first character within the line +has 'token_start_char_position_in_line'; + +# The channel number for the current token +has 'channel'; + +# The token type for the current token +has 'type'; + +# You can set the text for the current token to override what is in +# the input char buffer. Use setText() or can set this instance var. +has 'text'; + +sub BUILD { + my ($self, $arg_ref) = @_; + + $self->following([]); + $self->_fsp(-1); + $self->error_recovery(0); + $self->last_error_index(-1); + $self->failed(0); + $self->syntax_errors(0); + $self->backtracking(0); + $self->token_start_char_index(-1); +} + +1; +__END__ diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/RuleReturnScope.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/RuleReturnScope.pm new file mode 100644 index 0000000..0611e69 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/RuleReturnScope.pm @@ -0,0 +1,20 @@ +package ANTLR::Runtime::RuleReturnScope; +use ANTLR::Runtime::Class; + +sub get_start { + return; +} + +sub get_stop { + return; +} + +sub get_tree { + return; +} + +sub get_template { + return; +} + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Stream.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Stream.pm new file mode 100644 index 0000000..e0532da --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Stream.pm @@ -0,0 +1,38 @@ +package ANTLR::Runtime::Stream; +use ANTLR::Runtime::Class; + +use Readonly; + +sub consume { + Readonly my $usage => 'void consume()'; +} + +sub LA { + Readonly my $usage => 'int LA(int i)'; +} + +sub mark { + Readonly my $usage => 'int mark()'; +} + +sub index { + Readonly my $usage => 'int index()'; +} + +sub rewind { + Readonly my $usage => 'void rewind()'; +} + +sub release { + Readonly my $usage => 'void release(int marker)'; +} + +sub seek { + Readonly my $usage => 'void seek(int index)'; +} + +sub size { + Readonly my $usage => 'int size()'; +} + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Token.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Token.pm new file mode 100644 index 0000000..2038615 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/Token.pm @@ -0,0 +1,49 @@ +package ANTLR::Runtime::Token; +use ANTLR::Runtime::Class; + +use Readonly; + +use ANTLR::Runtime::CharStream; +use ANTLR::Runtime::CommonToken; + +use constant { + EOR_TOKEN_TYPE => 1, + + # imaginary tree navigation type; traverse "get child" link + DOWN => 2, + + # imaginary tree navigation type; finish with a child list + UP => 3, +}; + +use constant MIN_TOKEN_TYPE => UP + 1; + +# All tokens go to the parser (unless skip() is called in that rule) +# on a particular "channel". The parser tunes to a particular channel +# so that whitespace etc... can go to the parser on a "hidden" channel. +use constant DEFAULT_CHANNEL => 0; + +# Anything on different channel than DEFAULT_CHANNEL is not parsed +# by parser. +use constant HIDDEN_CHANNEL => 99; + +use constant EOF => ANTLR::Runtime::CharStream->EOF; +#use constant EOF_TOKEN => ANTLR::Runtime::CommonToken->new({ type => EOF }); +sub EOF_TOKEN() { + return ANTLR::Runtime::CommonToken->new({ type => EOF }); +} + +use constant INVALID_TOKEN_TYPE => 0; +#use constant INVALID_TOKEN => ANTLR::Runtime::CommonToken->new({ type => INVALID_TOKEN_TYPE }); +sub INVALID_TOKEN() { + return ANTLR::Runtime::CommonToken->new({ type => INVALID_TOKEN_TYPE }); +} + +# In an action, a lexer rule can set token to this SKIP_TOKEN and ANTLR +# will avoid creating a token for this symbol and try to fetch another. +#use constant SKIP_TOKEN => ANTLR::Runtime::CommonToken->new({ type => INVALID_TOKEN_TYPE }); +sub SKIP_TOKEN() { + return ANTLR::Runtime::CommonToken->new({ type => INVALID_TOKEN_TYPE }); +} + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/TokenSource.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/TokenSource.pm new file mode 100644 index 0000000..ae1417b --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/TokenSource.pm @@ -0,0 +1,30 @@ +package ANTLR::Runtime::TokenSource; +use ANTLR::Runtime::Class; + +# Return a Token object from your input stream (usually a CharStream). +# Do not fail/return upon lexing error; keep chewing on the characters +# until you get a good one; errors are not passed through to the parser. +sub next_token { +} + +1; +__END__ + +=head1 NAME + +ANTLR::Runtime::TokenSource + +=head1 DESCRIPTION + +A source of tokens must provide a sequence of tokens via nextToken() +and also must reveal it's source of characters; CommonToken's text is +computed from a CharStream; it only store indices into the char stream. + +Errors from the lexer are never passed to the parser. Either you want +to keep going or you do not upon token recognition error. If you do not +want to continue lexing then you do not want to continue parsing. Just +throw an exception not under RecognitionException and Java will naturally +toss you all the way out of the recognizers. If you want to continue +lexing then you should not throw an exception to the parser--it has already +requested a token. Keep lexing until you get a valid one. Just report +errors and keep going, looking for a valid token. diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/TokenStream.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/TokenStream.pm new file mode 100644 index 0000000..2f79544 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/TokenStream.pm @@ -0,0 +1,24 @@ +package ANTLR::Runtime::TokenStream; +use ANTLR::Runtime::Class; + +use Readonly; + +extends 'ANTLR::Runtime::IntStream'; + +sub LT { + Readonly my $usage => 'Token LT(int k)'; +} + +sub get { + Readonly my $usage => 'Token get(int i)'; +} + +sub get_token_source { + Readonly my $usage => 'TokenSource get_token_source()'; +} + +sub to_string { + Readonly my $usage => 'String to_string(int start, int stop) | String to_string(Token start, Token stop)'; +} + +1; diff --git a/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/UnwantedTokenException.pm b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/UnwantedTokenException.pm new file mode 100644 index 0000000..e379e8b --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/lib/ANTLR/Runtime/UnwantedTokenException.pm @@ -0,0 +1,34 @@ +package ANTLR::Runtime::UnwantedTokenException; +use ANTLR::Runtime::Class; + +use overload + '""' => \&to_string; + +extends 'ANTLR::Runtime::MismatchedTokenException'; + +sub get_unexpected_token { + my ($self) = @_; + return $self->token; +} + +sub to_string { + my ($self) = @_; + + my $exp; + if ($self->expecting == ANTLR::Runtime::Token->INVALID_TOKEN_TYPE) { + $exp = ''; + } + else { + $exp = ", expected " . $self->expecting; + } + + if (defined $self->token) { + return "UnwantedTokenException(found=" . $self->token->get_text() . "$exp)"; + } + else { + return "UnwantedTokenException(found=undef$exp)"; + } +} + +1; +__END__ diff --git a/antlr-3.1.3/runtime/Perl5/port.yml b/antlr-3.1.3/runtime/Perl5/port.yml new file mode 100644 index 0000000..56897f5 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/port.yml @@ -0,0 +1,4 @@ +--- +status: + runtime/Java/src/org/antlr/runtime/BitSet.java: + sha1: 0000000000000000000000000000000000000000 diff --git a/antlr-3.1.3/runtime/Perl5/t/author/api.t b/antlr-3.1.3/runtime/Perl5/t/author/api.t new file mode 100644 index 0000000..420fe83 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/t/author/api.t @@ -0,0 +1,95 @@ +use strict; +use warnings; + +use File::Spec; +use Java::JVM::Classfile; + +use Test::More tests => 29; + +sub class_name_to_java { + my ($name) = @_; + + my $tmp = $name; + $tmp =~ s/ANTLR::Runtime/org.antlr.runtime/; + $tmp =~ s/::/./g; + + return $tmp; +} + +sub java_class_name_to_perl { + my ($name) = @_; + + my $tmp = $name; + $tmp =~ s/org\.antlr\.runtime/ANTLR::Runtime/; + $tmp =~ s/\./::/g; + + return $tmp; +} + +sub resolve_java_class_file { + my ($name, $basedir) = @_; + + my $tmp = $name; + $tmp =~ s!\.!/!g; + $tmp .= '.class'; + + return File::Spec->catfile($basedir, $tmp); +} + +sub java_constant_name_to_perl { +} + +sub java_method_name_to_perl { + my ($name) = @_; + + if ($name eq '') { + return 'new'; + } + # add special cases here + else { + my $tmp = $name; + $tmp =~ s/([a-z])([A-Z])/$1_\L$2\E/g; + + return $tmp; + } +} + +my @java_class_names = qw( + org.antlr.runtime.BitSet +); + +foreach my $java_class_name (@java_class_names) { + my $java_class_file = resolve_java_class_file($java_class_name, + '../../build/rtclasses'); + + my $java_class; + { + local $SIG{'__WARN__'} = sub {}; + $java_class = Java::JVM::Classfile->new($java_class_file); + } + + my $class_name = java_class_name_to_perl($java_class_name); + use_ok($class_name); + print map { "$_\n" } ANTLR::Runtime::BitSet->can(); + print "---\n"; + + eval { $class_name->new() }; + print join "\n", ANTLR::Runtime::BitSet->can(); + print "\n"; + + my $java_fields = $java_class->fields; + foreach my $java_field (@$java_fields) { + next if grep { $_ eq 'private' } @{$java_field->access_flags}; + + my $field_name = $java_field->name; + ok($class_name->can($field_name), $field_name); + } + + my $java_methods = $java_class->methods; + foreach my $java_method (@$java_methods) { + next if grep { $_ eq 'private' } @{$java_method->access_flags}; + + my $method_name = java_method_name_to_perl($java_method->name); + ok($class_name->can($method_name), $method_name); + } +} diff --git a/antlr-3.1.3/runtime/Perl5/t/author/perlcritic.t b/antlr-3.1.3/runtime/Perl5/t/author/perlcritic.t new file mode 100644 index 0000000..08b4545 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/t/author/perlcritic.t @@ -0,0 +1,19 @@ +use strict; +use warnings; + +use File::Spec; +use English qw(-no_match_vars); + +use Test::More; + +eval { + require Test::Perl::Critic; +}; +if ( $EVAL_ERROR ) { + my $msg = 'Test::Perl::Critic required to criticise code'; + plan( skip_all => $msg ); +} + +my $rcfile = File::Spec->catfile( 't', 'author', 'perlcriticrc' ); +Test::Perl::Critic->import( -profile => $rcfile ); +all_critic_ok(); diff --git a/antlr-3.1.3/runtime/Perl5/t/author/perlcriticrc b/antlr-3.1.3/runtime/Perl5/t/author/perlcriticrc new file mode 100644 index 0000000..8acc451 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/t/author/perlcriticrc @@ -0,0 +1,5 @@ +severity = 5 + +#[-CodeLayout::RequireTidyCode] + +[-Subroutines::ProhibitExplicitReturnUndef] diff --git a/antlr-3.1.3/runtime/Perl5/t/author/pod-coverage.t b/antlr-3.1.3/runtime/Perl5/t/author/pod-coverage.t new file mode 100644 index 0000000..54ae158 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/t/author/pod-coverage.t @@ -0,0 +1,10 @@ +use strict; +use warnings; + +use Test::More; + +eval "use Test::Pod::Coverage"; +if ($@) { + plan skip_all => "Test::Pod::Coverage required for testing POD coverage: $@"; +} +all_pod_coverage_ok(); diff --git a/antlr-3.1.3/runtime/Perl5/t/author/pod.t b/antlr-3.1.3/runtime/Perl5/t/author/pod.t new file mode 100644 index 0000000..e6908b8 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/t/author/pod.t @@ -0,0 +1,10 @@ +use strict; +use warnings; + +use Test::More; + +eval "use Test::Pod"; +if ($@) { + plan skip_all => "Test::Pod required for testing POD: $@"; +} +all_pod_files_ok(); diff --git a/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/ANTLRStringStream.t b/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/ANTLRStringStream.t new file mode 100644 index 0000000..9f433cd --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/ANTLRStringStream.t @@ -0,0 +1,24 @@ +use strict; +use warnings; + +use Test::More; + +plan tests => 7; + +use ANTLR::Runtime::ANTLRStringStream; + +{ + my $s = ANTLR::Runtime::ANTLRStringStream->new({ input => 'ABC' }); + is ($s->LA(1), 'A'); + $s->consume(); + is ($s->LA(1), 'B'); +} + +{ + my $s = ANTLR::Runtime::ANTLRStringStream->new({ input => 'ABC' }); + is($s->LA(0), undef); + is($s->LA(1), 'A'); + is($s->LA(2), 'B'); + is($s->LA(3), 'C'); + is($s->LA(4), ANTLR::Runtime::ANTLRStringStream->EOF); +} diff --git a/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/BitSet.t b/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/BitSet.t new file mode 100644 index 0000000..bc87845 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/BitSet.t @@ -0,0 +1,64 @@ +package ANTLR::Runtime::BitSetTest; + +use strict; +use warnings; + +use Test::More; + +plan tests => 15; + +use ANTLR::Runtime::BitSet; + +{ + my $bs = ANTLR::Runtime::BitSet->new(); + is("$bs", "{}"); +} + +{ + my $bs = ANTLR::Runtime::BitSet->new({ bits => '001' }); + ok(!$bs->member(0)); + ok(!$bs->member(1)); + ok($bs->member(2)); + ok(!$bs->member(3)); + is("$bs", "{2}"); +} + +{ + my $bs = ANTLR::Runtime::BitSet->new({ number => 0x10 }); + ok($bs->member(4)); + is("$bs", "{4}"); +} + +{ + my $bs = ANTLR::Runtime::BitSet->of(0x10); + ok($bs->member(16)); + is("$bs", "{16}"); +} + +{ + my $bs = ANTLR::Runtime::BitSet->new(); + $bs->add(2); + $bs->add(7); + is("$bs", "{2,7}"); +} + +{ + my $bs = ANTLR::Runtime::BitSet->new(); + $bs->add(3); + $bs->add(12); + is("$bs", "{3,12}"); + $bs->remove(3); + is("$bs", "{12}"); +} + +{ + my $bs = ANTLR::Runtime::BitSet->new( + { words64 => [ '0x0000004000000001', '0x1000000000800000' ] }); + is("$bs", "{0,38,87,124}"); +} + +{ + my $bs = ANTLR::Runtime::BitSet->of(4); + $bs |= ANTLR::Runtime::BitSet->of(5); + is("$bs", "{4,5}"); +} diff --git a/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/Class.t b/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/Class.t new file mode 100644 index 0000000..ab77f9f --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/Class.t @@ -0,0 +1,96 @@ +package Point; + +use ANTLR::Runtime::Class; + +has 'x'; +has 'y'; + +sub get_x { + my ($self) = @_; + return $self->x; +} + +sub set_x { + my ($self, $x) = @_; + $self->x($x); + return; +} + +sub get_y { + my ($self) = @_; + return $self->y; +} + +sub set_y { + my ($self, $y) = @_; + $self->y($y); + return; +} + +sub clear { + my ($self) = @_; + $self->x(0); + $self->y(0); +} + +package Point3D; +use ANTLR::Runtime::Class; + +extends 'Point'; + +has 'z'; + +sub get_z { + my ($self) = @_; + return $self->z; +} + +sub set_z { + my ($self, $z) = @_; + $self->z($z); + return; +} + +sub clear { + my ($self) = @_; + $self->SUPER::clear(); + $self->z(0); +} + +package main; + +use strict; +use warnings; + +use Test::More; + +plan tests => 12; + +{ + my $p = Point->new(); + isa_ok($p, 'ANTLR::Runtime::Object'); + $p->set_x(5); + $p->set_y(6); + is($p->get_x(), 5); + is($p->get_y(), 6); + + $p->clear(); + is($p->get_x(), 0); + is($p->get_y(), 0); +} + +{ + my $p = Point3D->new(); + isa_ok($p, 'Point'); + $p->set_x(5); + $p->set_y(6); + $p->set_z(7); + is($p->get_x(), 5); + is($p->get_y(), 6); + is($p->get_z(), 7); + + $p->clear(); + is($p->get_x(), 0); + is($p->get_y(), 0); + is($p->get_z(), 0); +} diff --git a/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/CommonToken.t b/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/CommonToken.t new file mode 100644 index 0000000..5dd390f --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/CommonToken.t @@ -0,0 +1,23 @@ +use strict; +use warnings; + +use Test::More; + +plan tests => 4; + +use ANTLR::Runtime::CommonToken; + +{ + my $token = ANTLR::Runtime::CommonToken->new({ + input => undef, + type => 0, + channel => 0, + start => 0, + stop => 1, + }); + is($token->get_start_index(), 0); +} + +ok(ANTLR::Runtime::Token->EOF_TOKEN == ANTLR::Runtime::Token->EOF_TOKEN); +ok(!(ANTLR::Runtime::Token->EOF_TOKEN != ANTLR::Runtime::Token->EOF_TOKEN)); +ok(!ANTLR::Runtime::Token->EOF_TOKEN); diff --git a/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/Exception.t b/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/Exception.t new file mode 100644 index 0000000..2817a0a --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/Exception.t @@ -0,0 +1,29 @@ +use strict; +use warnings; + +use Test::More; + +plan tests => 3; + +use ANTLR::Runtime::Exception; + +{ + # pick any error + $! = 1; + my $expected = "$!"; + my $ex = ANTLR::Runtime::Exception->new(); + is $ex->message, $expected; +} + +{ + my $ex = ANTLR::Runtime::Exception->new({ message => 'test error message' }); + is $ex->message, 'test error message'; +} + +{ + eval { + ANTLR::Runtime::Exception->throw(message => 'test error message'); + }; + my $ex = ANTLR::Runtime::Exception->caught(); + is $ex->message, 'test error message'; +} diff --git a/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/Lexer.t b/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/Lexer.t new file mode 100644 index 0000000..b58a2e2 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/Lexer.t @@ -0,0 +1,15 @@ +use strict; +use warnings; + +use Test::More; + +plan tests => 1; + +use ANTLR::Runtime::ANTLRStringStream; +use ANTLR::Runtime::Lexer; + +{ + my $input = ANTLR::Runtime::ANTLRStringStream->new({ input => 'ABC' }); + my $lexer = ANTLR::Runtime::Lexer->new({ input => $input }); + ok(defined $lexer); +} diff --git a/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/Object.t b/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/Object.t new file mode 100644 index 0000000..3ddd18c --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/t/classes/ANTLR/Runtime/Object.t @@ -0,0 +1,83 @@ +use strict; +use warnings; + +use Test::More; + +plan tests => 8; + +use ANTLR::Runtime::Object; +use Params::Validate qw( :types ); + + +package ANTLR::Runtime::TestObject; +use ANTLR::Runtime::Class; + +use ANTLR::Runtime::Object::Signature; + +sub add :method :Signature(int $lhs, int $rhs --> int) { + #print "lhs = $lhs, rhs = $rhs\n"; + return $lhs + $rhs; +} + +package main; + +{ + my ($obj, $a) = ANTLR::Runtime::Object->unpack_method_args( + [ undef, 1 ], + { + spec => [ + { + name => 'a', + }, + ] + } + ); + + is($obj, undef); + is($a, 1); +} + +{ + my ($obj, $a) = ANTLR::Runtime::Object->unpack_method_args( + [ undef, { a => 1 } ], + { + spec => [ + { + name => 'a', + }, + ] + } + ); + + is ($obj, undef); + is ($a, 1); +} + +{ + # We might expect the following to unpack $b == 2, + # but this might be too fragile? Until specified, + # it's (more or less) by accident treated as positional. + my ($obj, $a, $b) = ANTLR::Runtime::Object->unpack_method_args( + [ undef, 1, { b => 2 }], + { + spec => [ + { + name => 'a', + }, + { + name => 'b', + }, + ] + } + ); + + is($obj, undef); + is($a, 1); + is_deeply($b, { b=> 2 }); +} + +{ + is(ANTLR::Runtime::TestObject->add(1, 1), 2); +} + +1; diff --git a/antlr-3.1.3/runtime/Perl5/t/examples/expr.t b/antlr-3.1.3/runtime/Perl5/t/examples/expr.t new file mode 100644 index 0000000..d1096da --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/t/examples/expr.t @@ -0,0 +1,85 @@ +use strict; +use warnings; + +use lib qw( t/lib ); + +use Test::More; +use ANTLR::Runtime::Test; + +plan tests => 1; + +# The SimpleCalc grammar from the five minutes tutorial. +g_test_output_is({ grammar => <<'GRAMMAR', test_program => <<'CODE', expected => <<'OUTPUT' }); +grammar Expr; +options { language = Perl5; } +@header {} + +@members { + my %memory; +} + +prog: stat+ ; + +stat: expr NEWLINE { print "$expr.value\n"; } + | ID '=' expr NEWLINE + { $memory{$ID.text} = $expr.value; } + | NEWLINE + ; + +expr returns [value] + : e=multExpr { $value = $e.value; } + ( '+' e=multExpr { $value += $e.value; } + | '-' e=multExpr { $value -= $e.value; } + )* + ; + +multExpr returns [value] + : e=atom { $value = $e.value; } ('*' e=atom { $value *= $e.value; })* + ; + +atom returns [value] + : INT { $value = $INT.text; } + | ID + { + my $v = $memory{$ID.text}; + if (defined $v) { + $value = $v; + } else { + print STDERR "undefined variable $ID.text\n"; + } + } + | '(' expr ')' { $value = $expr.value; } + ; + +ID : ('a'..'z'|'A'..'Z')+ ; +INT : '0'..'9'+ ; +NEWLINE:'\r'? '\n' ; +WS : (' '|'\t')+ { $self->skip(); } ; +GRAMMAR +use strict; +use warnings; + +use ANTLR::Runtime::ANTLRStringStream; +use ANTLR::Runtime::CommonTokenStream; +use ExprLexer; +use ExprParser; + +my $in = << 'EOT'; +1 + 1 +8 - 1 +a = 10 +b = 13 +2 * a + b + 1 +EOT + +my $input = ANTLR::Runtime::ANTLRStringStream->new({ input => $in }); +my $lexer = ExprLexer->new({ input => $input }); + +my $tokens = ANTLR::Runtime::CommonTokenStream->new({ token_source => $lexer }); +my $parser = ExprParser->new({ input => $tokens }); +$parser->prog(); +CODE +2 +7 +34 +OUTPUT diff --git a/antlr-3.1.3/runtime/Perl5/t/examples/fig.t b/antlr-3.1.3/runtime/Perl5/t/examples/fig.t new file mode 100644 index 0000000..c15d8ff --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/t/examples/fig.t @@ -0,0 +1,70 @@ +use strict; +use warnings; + +use lib qw( t/lib ); + +use Test::More; +use ANTLR::Runtime::Test; + +plan tests => 1; + +# The SimpleCalc grammar from the five minutes tutorial. +g_test_output_is({ grammar => <<'GRAMMAR', test_program => <<'CODE', expected => <<'OUTPUT' }); +grammar Fig; +options { language = Perl5; } + +@header { +use RunFig; +} + +@members { +has 'instances' => ( + default => sub { {} } +); +} + +file returns [objects] + : { $objects = []; } + (object { push @$objects, $object.o; })+ + ; + +object returns [o] + : qid v=ID? + { + $o = RunFig.newInstance($qid.text); + if (defined $v) { + $self->instances->{$v.text, $o); + } + } + '{' assign[$o]* '}' + ; + +assign[o] + : ID '=' expr ';' {RunFig.setObjectProperty(o,$ID.text,$expr.value);} + ; + +expr returns [value] + : STRING { $value = $STRING.text; } + | INT { $value = Integer.valueOf($INT.text); } + | '$' ID { $value = instances.get($ID.text); } + | '[' ']' { $value = new ArrayList(); } + | {ArrayList elements = new ArrayList(); } + '[' e=expr { elements.add($e.value); } + (',' e=expr { elements.add($e.value); })* + ']' + { $value = elements; } + ; + +qid : ID ('.' ID)* + ; + +STRING : '"' .* '"' { setText(getText().substring(1, getText().length()-1)); } ; +INT : '0'..'9'+ ; +ID : ('_'|'a'..'z'|'A'..'Z') ('_'|'a'..'z'|'A'..'Z'|'0'..'9')* ; +WS : (' '|'\n'|'\t')+ { $channel = $self->HIDDEN; } ; +CMT : '/*' .* '*/' { $channel = $self->HIDDEN; } ; +GRAMMAR + +CODE + +OUTPUT diff --git a/antlr-3.1.3/runtime/Perl5/t/examples/simplecalc.t b/antlr-3.1.3/runtime/Perl5/t/examples/simplecalc.t new file mode 100644 index 0000000..2f88381 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/t/examples/simplecalc.t @@ -0,0 +1,87 @@ +use strict; +use warnings; + +use lib qw( t/lib ); + +use Test::More; +use ANTLR::Runtime::Test; + +plan tests => 1; + +# The SimpleCalc grammar from the five minutes tutorial. +g_test_output_is({ grammar => <<'GRAMMAR', test_program => <<'CODE', expected => <<'OUTPUT' }); +grammar SimpleCalc; +options { language = Perl5; } + +tokens { + PLUS = '+' ; + MINUS = '-' ; + MULT = '*' ; + DIV = '/' ; +} + +/*------------------------------------------------------------------ + * PARSER RULES + *------------------------------------------------------------------*/ + +expr : term ( ( PLUS | MINUS ) term )* ; + +term : factor ( ( MULT | DIV ) factor )* ; + +factor : NUMBER ; + +/*------------------------------------------------------------------ + * LEXER RULES + *------------------------------------------------------------------*/ + +NUMBER : (DIGIT)+ ; + +WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ { $channel = HIDDEN; } ; + +fragment DIGIT : '0'..'9' ; +GRAMMAR +use strict; +use warnings; + +use ANTLR::Runtime::ANTLRStringStream; +use ANTLR::Runtime::CommonTokenStream; +use ANTLR::Runtime::RecognitionException; +use SimpleCalcLexer; +use SimpleCalcParser; + +my @examples = ( + '1', + '1 + 1', + '1 +', + '1 * 2 + 3', +); + +foreach my $example (@examples) { + my $input = ANTLR::Runtime::ANTLRStringStream->new({ input => $example }); + my $lexer = SimpleCalcLexer->new({ input => $input }); + my $tokens = ANTLR::Runtime::CommonTokenStream->new({ token_source => $lexer }); + my $parser = SimpleCalcParser->new({ input => $tokens }); + eval { + $parser->expr(); + if ($parser->get_number_of_syntax_errors() == 0) { + print "$example: good\n"; + } + else { + print "$example: bad\n"; + } + }; + if (my $ex = ANTLR::Runtime::RecognitionException->caught()) { + print "$example: error\n"; + } elsif ($ex = Exception::Class->caught()) { + print "$example: error: $ex\n"; + ref $ex ? $ex->rethrow() : die $ex; + } +} +CODE +1: good +1 + 1: good +1 +: bad +1 * 2 + 3: good +OUTPUT + +__END__ diff --git a/antlr-3.1.3/runtime/Perl5/t/lexer.t b/antlr-3.1.3/runtime/Perl5/t/lexer.t new file mode 100644 index 0000000..bf56b76 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/t/lexer.t @@ -0,0 +1,126 @@ +use strict; +use warnings; + +use FindBin; +use lib qw( t/lib ); + +use File::Slurp; + +use Test::More; +use ANTLR::Runtime::Test; + +plan tests => 2; + +sub grammar_file { + my ($file) = @_; + return read_file("t/$file"); +} + +# A simple test: try to lex one possible token. +g_test_output_is({ grammar => <<'GRAMMAR', test_program => <<'CODE', expected => <<'OUTPUT' }); +/* This is a comment. Note that we're in the ANTLR grammar here, so it's not + a Perl '#' comment, and may be multi line... */ +// ... or a single line comment +lexer grammar INTLexer; +/* Set target language to Perl5. */ +options { language = Perl5; } + +/* Lexer rule for an integer. */ +INT : '0'..'9'+; +GRAMMAR +use strict; +use warnings; + +use ANTLR::Runtime::ANTLRStringStream; +use INTLexer; + +my $input = ANTLR::Runtime::ANTLRStringStream->new({ input => '123' }); +my $lexer = INTLexer->new({ input => $input }); +while ((my $_ = $lexer->next_token())) { + print $_->get_text(), "\n"; +} +CODE +123 +OUTPUT + +# Multiple choice, including 'skip' and 'hide' actions. +g_test_output_is({ grammar => <<'GRAMMAR', test_program => <<'CODE', expected => <<'OUTPUT' }); +lexer grammar IDLexer; +options { language = Perl5; } + +ID : ('a'..'z'|'A'..'Z')+ ; +INT : '0'..'9'+ ; +NEWLINE : '\r'? '\n' { $self->skip() } ; +WS : (' '|'\t')+ { $channel = HIDDEN } ; +GRAMMAR +use strict; +use warnings; + +use ANTLR::Runtime::ANTLRStringStream; +use IDLexer; + +my $input = ANTLR::Runtime::ANTLRStringStream->new({ input => "Hello World!\n42\n" }); +my $lexer = IDLexer->new({ input => $input }); + +while (1) { + my $token = $lexer->next_token(); + last if $token->get_type() == IDLexer->EOF; + + print "text: '", $token->get_text(), "'\n"; + print "type: ", $token->get_type(), "\n"; + print "pos: ", $token->get_line(), ':', $token->get_char_position_in_line(), "\n"; + print "channel: ", $token->get_channel(), "\n"; + print "token index: ", $token->get_token_index(), "\n"; + print "\n"; +} +CODE +text: 'Hello' +type: 4 +pos: 1:0 +channel: 0 +token index: -1 + +text: ' ' +type: 7 +pos: 1:5 +channel: 99 +token index: -1 + +text: 'World' +type: 4 +pos: 1:6 +channel: 0 +token index: -1 + +text: '42' +type: 5 +pos: 2:0 +channel: 0 +token index: -1 + +OUTPUT + +=begin SKIP doesn't compile yet + +g_test_output_is({ grammar => scalar grammar_file('XMLLexer.g'), test_program => <<'CODE', expected => <<'OUTPUT' }); +use English qw( -no_match_vars ); +use ANTLR::Runtime::ANTLRStringStream; +use XMLLexer; + +use strict; +use warnings; + +my $input = ANTLR::Runtime::ANTLRStringStream->new(<< 'XML'); + +foo +XML +my $lexer = IDLexer->new($input); +while ((my $_ = $lexer->next_token())) { +} +CODE +XML declaration +PCDATA: "foo" +OUTPUT +} + +=end SKIP diff --git a/antlr-3.1.3/runtime/Perl5/t/lib/ANTLR/Runtime/Test.pm b/antlr-3.1.3/runtime/Perl5/t/lib/ANTLR/Runtime/Test.pm new file mode 100644 index 0000000..1209f01 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/t/lib/ANTLR/Runtime/Test.pm @@ -0,0 +1,151 @@ +package ANTLR::Runtime::Test; + +use strict; +use warnings; + +use base 'Test::Builder::Module'; + +my $CLASS = __PACKAGE__; + +our @EXPORT = qw( g_test_output_is ); + +use Carp; +use Cwd; +use File::Spec; +use File::Temp qw( tempdir ); + +sub read_file { + my ($filename) = @_; + + local $/; + open my $in, '<', $filename or die "Can't open $filename: $!"; + my $content = <$in>; + close $in or warn "Can't close $filename: $!"; + + return $content; +} + +sub write_file { + my ($filename, $content) = @_; + + open my $out, '>', $filename or die "Can't open $filename: $!"; + print $out $content; + close $out or warn "Can't close $filename: $!"; + + return; +} + +sub get_perl { + if (defined $ENV{HARNESS_PERL}) { + return $ENV{HARNESS_PERL}; + } + + if ($^O =~ /^(MS)?Win32$/) { + return Win32::GetShortPathName($^X); + } + + return $^X; +} + +sub g_test_output_is { + my ($args) = @_; + my $grammar = $args->{grammar}; + my $test_program = $args->{test_program}; + my $expected = $args->{expected}; + my $name = $args->{name} || undef; + my $tb = $CLASS->builder; + + my $tmpdir = tempdir( CLEANUP => 1 ); + + my $grammar_name; + if ($grammar =~ /^(?:(?:lexer|parser|tree)\s+)? grammar \s+ (\w+)/xms) { + $grammar_name = $1; + } else { + croak "Can't determine grammar name"; + } + + # write grammar file + my $grammar_file = File::Spec->catfile($tmpdir, "$grammar_name.g"); + write_file($grammar_file, $grammar); + + # write test program file + my $test_program_file = File::Spec->catfile($tmpdir, 'test.pl'); + write_file($test_program_file, $test_program); + + my $cwd = cwd; + chdir $tmpdir; + my $test_result; + eval { + # compile grammar + my $antlr; + if ($^O =~ /linux/) { + $antlr = 'antlr.sh'; + } + elsif ($^O =~ /MSWin32/) { + $antlr = 'antlr.bat'; + } + else { + $antlr = 'antlr'; + } + my $g_result = run_program([ File::Spec->catfile($cwd, 'tools', $antlr), $grammar_file ]); + if ($g_result->{exit_code} >> 8 != 0) { + croak $g_result->{err}; + } + + # run test program + $test_result = run_program([ get_perl(), "-Mblib=$cwd", 'test.pl']); + if ($test_result->{exit_code} >> 8 != 0) { + croak $test_result->{err}; + } + }; + chdir $cwd; + die $@ if $@; + + my $actual = $test_result->{out}; + + # compare with $expected + return $tb->is_eq($actual, $expected, $name); +} + +sub run_program { + my ($command) = @_; + + open my $old_out, '>&STDOUT' or die "Can't capture stdout: $!"; + close STDOUT or die "Can't close stdout: $!"; + open STDOUT, '>', 'out.tmp' or die "Can't redirect stdout: $!"; + + open my $old_err, '>&STDERR' or die "Can't capture stderr: $!"; + close STDERR or die "Can't close stderr: $!"; + open STDERR, '>', 'err.tmp' or die "Can't redirect stderr: $!"; + + system @$command; + my $exit_code = $?; + + # restore stderr + my $err = read_file('err.tmp'); + close STDERR or die "Can't close stderr: $!"; + open STDERR, '>&', $old_err or die "Can't restore stderr: $!"; + + # restore stdout + my $out = read_file('out.tmp'); + close STDOUT or die "Can't close stdout: $!"; + open STDOUT, '>&', $old_out or die "Can't restore stdout: $!"; + + my $exit_value; + if ($exit_code < 0) { + $exit_value = $exit_code; + } elsif ($exit_code && 0xff) { + $exit_value = "[SIGNAL $exit_code]"; + } else { + $exit_value = $exit_code >> 8; + } + + return { + exit_code => $exit_code, + exit_value => $exit_value, + out => $out, + err => $err, + }; +} + +1; diff --git a/antlr-3.1.3/runtime/Perl5/t/version.t b/antlr-3.1.3/runtime/Perl5/t/version.t new file mode 100644 index 0000000..094e66b --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/t/version.t @@ -0,0 +1,15 @@ +use strict; +use warnings; + +use ExtUtils::MakeMaker; +use Test::More tests => 1; + +my $file = 'lib/ANTLR/Runtime.pm'; + +my $version = MM->parse_version($file); + +# classic CPAN +#like($version, qr/^\d+\.\d{2,}(_\d{2,})?$/); + +# version.pm +like($version, qr/^\d+\.\d+\.\d+(?:_\d+)?$/); diff --git a/antlr-3.1.3/runtime/Perl5/tools/antlr.bat b/antlr-3.1.3/runtime/Perl5/tools/antlr.bat new file mode 100755 index 0000000..f2a8895 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/tools/antlr.bat @@ -0,0 +1,13 @@ +@echo off + +setlocal + +IF "%ANTLR_HOME%" == "" SET ANTLR_HOME=%~d0%~p0..\..\.. + +"%JAVA_HOME%\bin\java" ^ + -Dfile.encoding=windows-1252 ^ + -classpath "%ANTLR_HOME%\build\classes;%ANTLR_HOME%\build\rtclasses;%ANTLR_HOME%\lib\antlr-3.0.jar;%ANTLR_HOME%\lib\antlr-2.7.7.jar;%ANTLR_HOME%\lib\stringtemplate-3.0.jar" ^ + org.antlr.Tool ^ + %* + +endlocal diff --git a/antlr-3.1.3/runtime/Perl5/tools/antlr.sh b/antlr-3.1.3/runtime/Perl5/tools/antlr.sh new file mode 100755 index 0000000..78a2562 --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/tools/antlr.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +ANTLR_HOME=`dirname "$0"`/../../.. + +java -Dfile.encoding=windows-1252 \ + -classpath "$ANTLR_HOME/build/classes:$ANTLR_HOME/build/rtclasses:$ANTLR_HOME/lib/antlr-3.0.jar:$ANTLR_HOME/lib/antlr-2.7.7.jar:$ANTLR_HOME/lib/stringtemplate-3.0.jar" \ + org.antlr.Tool \ + $@ diff --git a/antlr-3.1.3/runtime/Perl5/tools/port.pl b/antlr-3.1.3/runtime/Perl5/tools/port.pl new file mode 100644 index 0000000..350a0cb --- /dev/null +++ b/antlr-3.1.3/runtime/Perl5/tools/port.pl @@ -0,0 +1,203 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use version; +use Carp; +use Digest; +use File::Spec; +use File::Spec::Unix; +use YAML::Tiny; + +my $version = qv('0.0.1'); + +sub say { + print @_, "\n"; +} + +my $basedir = '../..'; + +my $commands = { + 'help' => \&help, + 'add' => \&add, + 'status' => \&status, +}; + +my $help = {}; + +sub filetype { + my ($path) = @_; + + if ($path =~ /\.(java|g)$/xms) { + return 'text/plain'; + } + else { + return 'application/octet-stream'; + } +} + +sub sha1sum { + my ($filename) = @_; + + open my $in, '<', $filename or croak "Can't open $filename: $!"; + if (filetype($filename) =~ /^text\//xms) { + # keep standard line feed conversion + } else { + if (!binmode $in) { + croak "Can't binmode $filename: $!"; + } + } + my $sha1 = Digest->new('SHA-1'); + $sha1->addfile($in); + my $digest = $sha1->hexdigest; + close $in or warn "Can't close $filename: $!"; + return $digest; +} + +my $inc_paths = [ + $basedir, + "$basedir/runtime/Java/src", +]; + +sub resolve_file { + my ($filename) = @_; + + my $resolved_file; + if (-e $filename) { + $resolved_file = $filename; + } + else { + my @canidates + = grep { -e $_ } + map { File::Spec->catfile($_, $filename) } + @$inc_paths; + $resolved_file = $canidates[0]; + } + + if (defined $resolved_file) { + $resolved_file = File::Spec::Unix->canonpath($resolved_file); + } + + return $resolved_file; +} + +$help->{help} = << 'EOH'; +help: Describe the usage of this program or its subcommands. +Usage: help [SUBCOMMAND...] +EOH + +sub help { + my ($cmd) = @_; + + if (defined $cmd) { + print $help->{$cmd}; + } + else { + say << 'EOH'; +Usage: port [options] [args] +EOH + say "Available subcommands:"; + foreach my $cmd (keys %$help) { + say " $cmd"; + } + } + +} + +$help->{add} = << 'EOH'; +add: Adds the file to the list of ported files. +Usage: add PATH... +EOH + +sub add { + my ($filename) = @_; + + my $port = YAML::Tiny->read('port.yml'); + my $status = $port->[0]->{status}; + if (!defined $status) { + $status = $port->[0]->{status} = {}; + } + + my $path = resolve_file($filename); + if (!defined $path) { + croak "File not found: $filename"; + } + my $digest = sha1sum($path); + $status->{$filename} = { + 'sha1' => $digest, + }; + $port->write('port.yml'); +} + +$help->{status} = << 'EOH'; +status: Print the status of the ported files. +usage: status [PATH...] +EOH + +sub status { + my $port = YAML::Tiny->read('port.yml'); + + my $status = $port->[0]->{status}; + + while (my ($filename, $fstatus) = each (%$status)) { + my $path = resolve_file($filename); + + my $digest = sha1sum($path); + + if ($digest ne $fstatus->{sha1}) { + say "M $filename"; + } + } +} + +my ($cmd, @args) = @ARGV; + +if (defined $cmd) { + my $cmd_f = $commands->{$cmd}; + if (defined $cmd_f) { + $cmd_f->(@args); + } + else { + say "Unknown command: '$cmd'"; + say "Type 'port help' for usage."; + exit 1; + } +} +else { + say "Type 'port help' for usage."; + exit 1; +} + +__END__ + +=head1 NAME + +port - ANTLR Perl 5 port status + +=head1 VERSION + +This documentation refers to port version 0.0.1 + +=head1 USAGE + + port help + + port status + +=head1 DESCRIPTION + +The primary language target for ANTLR is Java. The Perl 5 port only follows +this primary target language. This brings up the problem to follow the +changes made to the primary target, by knowing I has changed and I. + +This tool keeps a database of file paths and content checksum. Once the port +of a file (Java class, grammar, ...) is completed it is added to the +database (C). This database can then be queried to check what +primary files have changed (C). The revision control software +should be helpful to determine the actual changes. + +=head1 AUTHOR + +Ronald Blaschke (ron@rblasch.org) + diff --git a/antlr-3.1.3/runtime/Python/AUTHORS b/antlr-3.1.3/runtime/Python/AUTHORS new file mode 100644 index 0000000..01e79ee --- /dev/null +++ b/antlr-3.1.3/runtime/Python/AUTHORS @@ -0,0 +1,2 @@ +Benjamin Niemann : Main developer of Python target. +Clinton Roy : AST templates and runtime. diff --git a/antlr-3.1.3/runtime/Python/ChangeLog b/antlr-3.1.3/runtime/Python/ChangeLog new file mode 100644 index 0000000..e979620 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/ChangeLog @@ -0,0 +1,38 @@ +2007-11-03 Benjamin Niemann + + * PythonTarget.java, dfa.py, exceptions.py, recognizer.py, streams.py: + ANTLRStringStream.LA() now returns the character's ordinal and + generated lexers operate on integers. Also made various performance + tunings. + +2007-10-07 Benjamin Niemann + + * main.py, Python.stg (outputFile): Added simple __main__ section to + generated code, so (simple) grammars can be executed as standalone + script. + + * tree.py (RecognitionException.extractInformationFromTreeNodeStream), + exceptions.py (CommonTree): Small bugfixes. + +2007-09-30 Benjamin Niemann + + * recognizers.py (TokenSource): Added iterator interface to TokenSource + class - and thus to Lexer. + +2007-06-27 Benjamin Niemann + + * Python.stg (genericParser, parser, treeParser): Use correct @init + action block for tree parsers. + +2007-05-24 Benjamin Niemann + + * Python.stg (rule): Added support for @decorate {...} action for + parser rules to add decorators to the rule method. + +2007-05-18 Benjamin Niemann + + * Python.stg (isolatedLookaheadRangeTest, lookaheadRangeTest): + Minor improvement of generated code (use ' <= <= ' + instead of ' >= and <= '). + + diff --git a/antlr-3.1.3/runtime/Python/LICENSE b/antlr-3.1.3/runtime/Python/LICENSE new file mode 100644 index 0000000..1d1d5d6 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/LICENSE @@ -0,0 +1,26 @@ +[The "BSD licence"] +Copyright (c) 2003-2006 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/antlr-3.1.3/runtime/Python/MANIFEST.in b/antlr-3.1.3/runtime/Python/MANIFEST.in new file mode 100644 index 0000000..29c4ad6 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/MANIFEST.in @@ -0,0 +1,2 @@ +include LICENSE AUTHORS ez_setup.py + diff --git a/antlr-3.1.3/runtime/Python/README b/antlr-3.1.3/runtime/Python/README new file mode 100644 index 0000000..98a50bb --- /dev/null +++ b/antlr-3.1.3/runtime/Python/README @@ -0,0 +1,90 @@ +1) ABOUT +======== + +This is the Python package 'antlr3', which is required to use parsers created +by the ANTLR3 tool. See for more information about +ANTLR3. + + +2) STATUS +========= + +The Python target for ANTLR3 is still in beta. Documentation is lacking, some +bits of the code is not yet done, some functionality has not been tested yet. +Also the API might change a bit - it currently mimics the Java implementation, +but it may be made a bit more pythonic here and there. + +WARNING: Currently the runtime library for V3.1 is not compatible with +recognizers generated by ANTLR V3.0.x. If you are an application developer, +then the suggested way to solve this is to package the correct runtime with +your application. Installing the runtime in the global site-packages directory +may not be a good idea. +It is still undetermined, if a future release of the V3.1 runtime will be +compatible with V3.0.x recognizers or if future runtimes V3.2+ will be +compatible with V3.1 recognizers. +Sorry for the inconvenience. + + +3) DOWNLOAD +=========== + +This runtime is part of the ANTLR distribution. The latest version can be found +at . + +If you are interested in the latest, most bleeding edge version, have a look at +the perforce depot at . There are +tarballs ready to download, so you don't have to install the perforce client. + + +4) INSTALLATION +=============== + +Just like any other Python package: +$ python setup.py install + +See for more information. + + +5) DOCUMENTATION +================ + +Documentation (as far as it exists) can be found in the wiki + + + +6) REPORTING BUGS +================= + +Please send bug reports to the ANTLR mailing list + or +. + +Existing bugs may appear someday in the bugtracker: + + + +7) HACKING +========== + +Only the runtime package can be found here. There are also some StringTemplate +files in 'src/org/antlr/codegen/templates/Python/' and some Java code in +'src/org/antlr/codegen/PythonTarget.java' (of the main ANTLR3 source +distribution). + +If there are no directories 'tests' and 'unittests' in 'runtime/Python', you +should fetch the latest ANTLR3 version from the perforce depot. See section +DOWNLOAD. +You'll need java and ant in order to compile and use the tool. +Be sure to properly setup your CLASSPATH. +(FIXME: is there some generic information, how to build it yourself? I should +point to it to avoid duplication.) + +You can then use the commands +$ python setup.py unittest +$ python setup.py functest +to ensure that changes do not break existing behaviour. + +Please send patches to . For larger code contributions you'll +have to sign the "Developer's Certificate of Origin", which can be found on + or use the feedback form at +. diff --git a/antlr-3.1.3/runtime/Python/TODO b/antlr-3.1.3/runtime/Python/TODO new file mode 100644 index 0000000..4ae5cdd --- /dev/null +++ b/antlr-3.1.3/runtime/Python/TODO @@ -0,0 +1,82 @@ +- new test from CL4832 +- CS4531 +- testcases for error nodes +- did I miss a change to Python.stg/returnScope? + - there are base classes Tree-/ParserRuleReturnScope +- update old and add new examples +- need protections in scopeAttributeRef? CL4426 +- testcase for $ID.int CL4413 +- need to override Target.encodeIntAsCharEscape? CL4389 +- look into buildbot + - link in report mails is broken + - timezone bug in p4 scraper + - core: + - only look at changes in src/ & runtime/Java + - quick + - incremential build + - sanity check + - full + - depend on quick + - full build + - ant test + - targets + - depend on changes on src/ and runtime/XXX + - depend on successful core/quick build + - nightlybuild + - depend on core/full + - somehow check which targets are ok +- TreeWizard: + - raise exception on parse errors + - document it in wiki +- publish runtime on cheeseshop +- better documentation for output=template w/ full examples +- antlr3.main: + - verbose/quiet flag: show/hide warnings + - set options in grammar? + - write optionparser descriptions + - better output for return objects + - st support +- custom grammar options per target + - make Grammar.legalOptions changeable + - first extract language option, load target class + - pass options not known by Grammar to target +- patch for CS4010 "null check for $scope::var now" once action parser is fixed +- rename @members/@init to @classmembers, @instancemembers? +- gunit? +- testcases error handling in tree parsers +- better test coverage for runtime modules +- documentation + - more documentation in docstrings + - tune doxygen output + - doxygen frontpage +- do not use Set* templates for properties for Python target + - gate with sempred {target.usePropertySetTemplates()}? +- special template for empty alternative -> pass +- complete runtime + - tree.DoubleLinkTree + - tree.ParseTree + - tree.UnBufferedTreeNodeStream +- default values in rule arguments? +- turn some methods into attributes + - (String|CommonToken)Stream.index() + - (String|CommonToken)Stream.size() --> __len__ +- get rid of getter/setter in generated code +- document differences to java API +- add methods to emulate java API, but mark 'em as deprecated +- using Stream.index as a state for 'error-already-reported' or memoization + will be a problem when the stream is not a linear buffer +- optimizations which should be explored: + - DFA: perhaps zip() the lists into a tuple + (eot, eof, min, max, accept, special, transition) + for each state. checkout potential performance gain. + - StingStream: look into optimizing LA(). Perhaps use LAk instead of LA(k) + and create the attributes when needed. + - Perform some magic to improve dfaStateSwitch. + - in lexer rules: + LA == u'a' or LA == u'b' or LA == u'c'... + -> LA in (u'a', u'b', u'c', ...) + or "LA in self.set_xyz" with set_xyz as a class member + - tweak CodeGenerator.genSetExpr() + - make BaseTree.nil() an attribute? or singleton? + - psycho?? +- ... diff --git a/antlr-3.1.3/runtime/Python/antlr3/__init__.py b/antlr-3.1.3/runtime/Python/antlr3/__init__.py new file mode 100644 index 0000000..8ed6f2f --- /dev/null +++ b/antlr-3.1.3/runtime/Python/antlr3/__init__.py @@ -0,0 +1,171 @@ +""" @package antlr3 +@brief ANTLR3 runtime package + +This module contains all support classes, which are needed to use recognizers +generated by ANTLR3. + +@mainpage + +\note Please be warned that the line numbers in the API documentation do not +match the real locations in the source code of the package. This is an +unintended artifact of doxygen, which I could only convince to use the +correct module names by concatenating all files from the package into a single +module file... + +Here is a little overview over the most commonly used classes provided by +this runtime: + +@section recognizers Recognizers + +These recognizers are baseclasses for the code which is generated by ANTLR3. + +- BaseRecognizer: Base class with common recognizer functionality. +- Lexer: Base class for lexers. +- Parser: Base class for parsers. +- tree.TreeParser: Base class for %tree parser. + +@section streams Streams + +Each recognizer pulls its input from one of the stream classes below. Streams +handle stuff like buffering, look-ahead and seeking. + +A character stream is usually the first element in the pipeline of a typical +ANTLR3 application. It is used as the input for a Lexer. + +- ANTLRStringStream: Reads from a string objects. The input should be a unicode + object, or ANTLR3 will have trouble decoding non-ascii data. +- ANTLRFileStream: Opens a file and read the contents, with optional character + decoding. +- ANTLRInputStream: Reads the date from a file-like object, with optional + character decoding. + +A Parser needs a TokenStream as input (which in turn is usually fed by a +Lexer): + +- CommonTokenStream: A basic and most commonly used TokenStream + implementation. +- TokenRewriteStream: A modification of CommonTokenStream that allows the + stream to be altered (by the Parser). See the 'tweak' example for a usecase. + +And tree.TreeParser finally fetches its input from a tree.TreeNodeStream: + +- tree.CommonTreeNodeStream: A basic and most commonly used tree.TreeNodeStream + implementation. + + +@section tokenstrees Tokens and Trees + +A Lexer emits Token objects which are usually buffered by a TokenStream. A +Parser can build a Tree, if the output=AST option has been set in the grammar. + +The runtime provides these Token implementations: + +- CommonToken: A basic and most commonly used Token implementation. +- ClassicToken: A Token object as used in ANTLR 2.x, used to %tree + construction. + +Tree objects are wrapper for Token objects. + +- tree.CommonTree: A basic and most commonly used Tree implementation. + +A tree.TreeAdaptor is used by the parser to create tree.Tree objects for the +input Token objects. + +- tree.CommonTreeAdaptor: A basic and most commonly used tree.TreeAdaptor +implementation. + + +@section Exceptions + +RecognitionException are generated, when a recognizer encounters incorrect +or unexpected input. + +- RecognitionException + - MismatchedRangeException + - MismatchedSetException + - MismatchedNotSetException + . + - MismatchedTokenException + - MismatchedTreeNodeException + - NoViableAltException + - EarlyExitException + - FailedPredicateException + . +. + +A tree.RewriteCardinalityException is raised, when the parsers hits a +cardinality mismatch during AST construction. Although this is basically a +bug in your grammar, it can only be detected at runtime. + +- tree.RewriteCardinalityException + - tree.RewriteEarlyExitException + - tree.RewriteEmptyStreamException + . +. + +""" + +# tree.RewriteRuleElementStream +# tree.RewriteRuleSubtreeStream +# tree.RewriteRuleTokenStream +# CharStream +# DFA +# TokenSource + +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +__version__ = '3.1.3' + +def version_str_to_tuple(version_str): + import re + import sys + + if version_str == 'HEAD': + return (sys.maxint, sys.maxint, sys.maxint, sys.maxint) + + m = re.match(r'(\d+)\.(\d+)(\.(\d+))?(b(\d+))?', version_str) + if m is None: + raise ValueError("Bad version string %r" % version_str) + + major = int(m.group(1)) + minor = int(m.group(2)) + patch = int(m.group(4) or 0) + beta = int(m.group(6) or sys.maxint) + + return (major, minor, patch, beta) + + +runtime_version_str = __version__ +runtime_version = version_str_to_tuple(runtime_version_str) + + +from constants import * +from dfa import * +from exceptions import * +from recognizers import * +from streams import * +from tokens import * diff --git a/antlr-3.1.3/runtime/Python/antlr3/compat.py b/antlr-3.1.3/runtime/Python/antlr3/compat.py new file mode 100644 index 0000000..b29afca --- /dev/null +++ b/antlr-3.1.3/runtime/Python/antlr3/compat.py @@ -0,0 +1,48 @@ +"""Compatibility stuff""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +try: + set = set + frozenset = frozenset +except NameError: + from sets import Set as set, ImmutableSet as frozenset + + +try: + reversed = reversed +except NameError: + def reversed(l): + l = l[:] + l.reverse() + return l + + diff --git a/antlr-3.1.3/runtime/Python/antlr3/constants.py b/antlr-3.1.3/runtime/Python/antlr3/constants.py new file mode 100644 index 0000000..bf4a47a --- /dev/null +++ b/antlr-3.1.3/runtime/Python/antlr3/constants.py @@ -0,0 +1,57 @@ +"""ANTLR3 runtime package""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +EOF = -1 + +## All tokens go to the parser (unless skip() is called in that rule) +# on a particular "channel". The parser tunes to a particular channel +# so that whitespace etc... can go to the parser on a "hidden" channel. +DEFAULT_CHANNEL = 0 + +## Anything on different channel than DEFAULT_CHANNEL is not parsed +# by parser. +HIDDEN_CHANNEL = 99 + +# Predefined token types +EOR_TOKEN_TYPE = 1 + +## +# imaginary tree navigation type; traverse "get child" link +DOWN = 2 +## +#imaginary tree navigation type; finish with a child list +UP = 3 + +MIN_TOKEN_TYPE = UP+1 + +INVALID_TOKEN_TYPE = 0 + diff --git a/antlr-3.1.3/runtime/Python/antlr3/debug.py b/antlr-3.1.3/runtime/Python/antlr3/debug.py new file mode 100644 index 0000000..f20d2d4 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/antlr3/debug.py @@ -0,0 +1,1137 @@ +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2009 Terence Parr +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +import socket +from antlr3 import Parser, TokenStream, RecognitionException, Token +from antlr3.tree import CommonTreeAdaptor, TreeAdaptor, Tree + +class DebugParser(Parser): + def __init__(self, stream, state=None, dbg=None, *args, **kwargs): + # wrap token stream in DebugTokenStream (unless user already did so). + if not isinstance(stream, DebugTokenStream): + stream = DebugTokenStream(stream, dbg) + + super(DebugParser, self).__init__(stream, state, *args, **kwargs) + + # Who to notify when events in the parser occur. + self._dbg = None + + self.setDebugListener(dbg) + + + def setDebugListener(self, dbg): + """Provide a new debug event listener for this parser. Notify the + input stream too that it should send events to this listener. + """ + + if hasattr(self.input, 'dbg'): + self.input.dbg = dbg + + self._dbg = dbg + + def getDebugListener(self): + return self._dbg + + dbg = property(getDebugListener, setDebugListener) + + + def beginResync(self): + self._dbg.beginResync() + + + def endResync(self): + self._dbg.endResync() + + + def beginBacktrack(self, level): + self._dbg.beginBacktrack(level) + + + def endBacktrack(self, level, successful): + self._dbg.endBacktrack(level,successful) + + + def reportError(self, exc): + if isinstance(exc, RecognitionException): + self._dbg.recognitionException(exc) + + else: + traceback.print_exc(exc) + + +class DebugTokenStream(TokenStream): + def __init__(self, input, dbg=None): + self.input = input + self.initialStreamState = True + # Track the last mark() call result value for use in rewind(). + self.lastMarker = None + + self._dbg = None + self.setDebugListener(dbg) + + # force TokenStream to get at least first valid token + # so we know if there are any hidden tokens first in the stream + self.input.LT(1) + + + def getDebugListener(self): + return self._dbg + + def setDebugListener(self, dbg): + self._dbg = dbg + + dbg = property(getDebugListener, setDebugListener) + + + def consume(self): + if self.initialStreamState: + self.consumeInitialHiddenTokens() + + a = self.input.index() + t = self.input.LT(1) + self.input.consume() + b = self.input.index() + self._dbg.consumeToken(t) + + if b > a+1: + # then we consumed more than one token; must be off channel tokens + for idx in range(a+1, b): + self._dbg.consumeHiddenToken(self.input.get(idx)); + + + def consumeInitialHiddenTokens(self): + """consume all initial off-channel tokens""" + + firstOnChannelTokenIndex = self.input.index() + for idx in range(firstOnChannelTokenIndex): + self._dbg.consumeHiddenToken(self.input.get(idx)) + + self.initialStreamState = False + + + def LT(self, i): + if self.initialStreamState: + self.consumeInitialHiddenTokens() + + t = self.input.LT(i) + self._dbg.LT(i, t) + return t + + + def LA(self, i): + if self.initialStreamState: + self.consumeInitialHiddenTokens() + + t = self.input.LT(i) + self._dbg.LT(i, t) + return t.type + + + def get(self, i): + return self.input.get(i) + + + def index(self): + return self.input.index() + + + def mark(self): + self.lastMarker = self.input.mark() + self._dbg.mark(self.lastMarker) + return self.lastMarker + + + def rewind(self, marker=None): + self._dbg.rewind(marker) + self.input.rewind(marker) + + + def release(self, marker): + pass + + + def seek(self, index): + # TODO: implement seek in dbg interface + # self._dbg.seek(index); + self.input.seek(index) + + + def size(self): + return self.input.size() + + + def getTokenSource(self): + return self.input.getTokenSource() + + + def getSourceName(self): + return self.getTokenSource().getSourceName() + + + def toString(self, start=None, stop=None): + return self.input.toString(start, stop) + + +class DebugTreeAdaptor(TreeAdaptor): + """A TreeAdaptor proxy that fires debugging events to a DebugEventListener + delegate and uses the TreeAdaptor delegate to do the actual work. All + AST events are triggered by this adaptor; no code gen changes are needed + in generated rules. Debugging events are triggered *after* invoking + tree adaptor routines. + + Trees created with actions in rewrite actions like "-> ^(ADD {foo} {bar})" + cannot be tracked as they might not use the adaptor to create foo, bar. + The debug listener has to deal with tree node IDs for which it did + not see a createNode event. A single node is sufficient even + if it represents a whole tree. + """ + + def __init__(self, dbg, adaptor): + self.dbg = dbg + self.adaptor = adaptor + + + def createWithPayload(self, payload): + if payload.getTokenIndex() < 0: + # could be token conjured up during error recovery + return self.createFromType(payload.getType(), payload.getText()) + + node = self.adaptor.createWithPayload(payload) + self.dbg.createNode(node, payload) + return node + + def createFromToken(self, tokenType, fromToken, text=None): + node = self.adaptor.createFromToken(tokenType, fromToken, text) + self.dbg.createNode(node) + return node + + def createFromType(self, tokenType, text): + node = self.adaptor.createFromType(tokenType, text) + self.dbg.createNode(node) + return node + + + def errorNode(self, input, start, stop, exc): + node = selfadaptor.errorNode(input, start, stop, exc) + if node is not None: + dbg.errorNode(node) + + return node + + + def dupTree(self, tree): + t = self.adaptor.dupTree(tree) + # walk the tree and emit create and add child events + # to simulate what dupTree has done. dupTree does not call this debug + # adapter so I must simulate. + self.simulateTreeConstruction(t) + return t + + + def simulateTreeConstruction(self, t): + """^(A B C): emit create A, create B, add child, ...""" + self.dbg.createNode(t) + for i in range(self.adaptor.getChildCount(t)): + child = self.adaptor.getChild(t, i) + self.simulateTreeConstruction(child) + self.dbg.addChild(t, child) + + + def dupNode(self, treeNode): + d = self.adaptor.dupNode(treeNode) + self.dbg.createNode(d) + return d + + + def nil(self): + node = self.adaptor.nil() + self.dbg.nilNode(node) + return node + + + def isNil(self, tree): + return self.adaptor.isNil(tree) + + + def addChild(self, t, child): + if isinstance(child, Token): + n = self.createWithPayload(child) + self.addChild(t, n) + + else: + if t is None or child is None: + return + + self.adaptor.addChild(t, child) + self.dbg.addChild(t, child) + + def becomeRoot(self, newRoot, oldRoot): + if isinstance(newRoot, Token): + n = self.createWithPayload(newRoot) + self.adaptor.becomeRoot(n, oldRoot) + else: + n = self.adaptor.becomeRoot(newRoot, oldRoot) + + self.dbg.becomeRoot(newRoot, oldRoot) + return n + + + def rulePostProcessing(self, root): + return self.adaptor.rulePostProcessing(root) + + + def getType(self, t): + return self.adaptor.getType(t) + + + def setType(self, t, type): + self.adaptor.setType(t, type) + + + def getText(self, t): + return self.adaptor.getText(t) + + + def setText(self, t, text): + self.adaptor.setText(t, text) + + + def getToken(self, t): + return self.adaptor.getToken(t) + + + def setTokenBoundaries(self, t, startToken, stopToken): + self.adaptor.setTokenBoundaries(t, startToken, stopToken) + if t is not None and startToken is not None and stopToken is not None: + self.dbg.setTokenBoundaries( + t, startToken.getTokenIndex(), + stopToken.getTokenIndex()) + + + def getTokenStartIndex(self, t): + return self.adaptor.getTokenStartIndex(t) + + + def getTokenStopIndex(self, t): + return self.adaptor.getTokenStopIndex(t) + + + def getChild(self, t, i): + return self.adaptor.getChild(t, i) + + + def setChild(self, t, i, child): + self.adaptor.setChild(t, i, child) + + + def deleteChild(self, t, i): + return self.adaptor.deleteChild(t, i) + + + def getChildCount(self, t): + return self.adaptor.getChildCount(t) + + + def getUniqueID(self, node): + return self.adaptor.getUniqueID(node) + + + def getParent(self, t): + return self.adaptor.getParent(t) + + + def getChildIndex(self, t): + return self.adaptor.getChildIndex(t) + + + def setParent(self, t, parent): + self.adaptor.setParent(t, parent) + + + def setChildIndex(self, t, index): + self.adaptor.setChildIndex(t, index) + + + def replaceChildren(self, parent, startChildIndex, stopChildIndex, t): + self.adaptor.replaceChildren(parent, startChildIndex, stopChildIndex, t) + + + ## support + + def getDebugListener(self): + return dbg + + def setDebugListener(self, dbg): + self.dbg = dbg + + + def getTreeAdaptor(self): + return self.adaptor + + + +class DebugEventListener(object): + """All debugging events that a recognizer can trigger. + + I did not create a separate AST debugging interface as it would create + lots of extra classes and DebugParser has a dbg var defined, which makes + it hard to change to ASTDebugEventListener. I looked hard at this issue + and it is easier to understand as one monolithic event interface for all + possible events. Hopefully, adding ST debugging stuff won't be bad. Leave + for future. 4/26/2006. + """ + + # Moved to version 2 for v3.1: added grammar name to enter/exit Rule + PROTOCOL_VERSION = "2" + + def enterRule(self, grammarFileName, ruleName): + """The parser has just entered a rule. No decision has been made about + which alt is predicted. This is fired AFTER init actions have been + executed. Attributes are defined and available etc... + The grammarFileName allows composite grammars to jump around among + multiple grammar files. + """ + + pass + + + def enterAlt(self, alt): + """Because rules can have lots of alternatives, it is very useful to + know which alt you are entering. This is 1..n for n alts. + """ + pass + + + def exitRule(self, grammarFileName, ruleName): + """This is the last thing executed before leaving a rule. It is + executed even if an exception is thrown. This is triggered after + error reporting and recovery have occurred (unless the exception is + not caught in this rule). This implies an "exitAlt" event. + The grammarFileName allows composite grammars to jump around among + multiple grammar files. + """ + pass + + + def enterSubRule(self, decisionNumber): + """Track entry into any (...) subrule other EBNF construct""" + pass + + + def exitSubRule(self, decisionNumber): + pass + + + def enterDecision(self, decisionNumber): + """Every decision, fixed k or arbitrary, has an enter/exit event + so that a GUI can easily track what LT/consume events are + associated with prediction. You will see a single enter/exit + subrule but multiple enter/exit decision events, one for each + loop iteration. + """ + pass + + + def exitDecision(self, decisionNumber): + pass + + + def consumeToken(self, t): + """An input token was consumed; matched by any kind of element. + Trigger after the token was matched by things like match(), matchAny(). + """ + pass + + + def consumeHiddenToken(self, t): + """An off-channel input token was consumed. + Trigger after the token was matched by things like match(), matchAny(). + (unless of course the hidden token is first stuff in the input stream). + """ + pass + + + def LT(self, i, t): + """Somebody (anybody) looked ahead. Note that this actually gets + triggered by both LA and LT calls. The debugger will want to know + which Token object was examined. Like consumeToken, this indicates + what token was seen at that depth. A remote debugger cannot look + ahead into a file it doesn't have so LT events must pass the token + even if the info is redundant. + """ + pass + + + def mark(self, marker): + """The parser is going to look arbitrarily ahead; mark this location, + the token stream's marker is sent in case you need it. + """ + pass + + + def rewind(self, marker=None): + """After an arbitrairly long lookahead as with a cyclic DFA (or with + any backtrack), this informs the debugger that stream should be + rewound to the position associated with marker. + + """ + pass + + + def beginBacktrack(self, level): + pass + + + def endBacktrack(self, level, successful): + pass + + + def location(self, line, pos): + """To watch a parser move through the grammar, the parser needs to + inform the debugger what line/charPos it is passing in the grammar. + For now, this does not know how to switch from one grammar to the + other and back for island grammars etc... + + This should also allow breakpoints because the debugger can stop + the parser whenever it hits this line/pos. + """ + pass + + + def recognitionException(self, e): + """A recognition exception occurred such as NoViableAltException. I made + this a generic event so that I can alter the exception hierachy later + without having to alter all the debug objects. + + Upon error, the stack of enter rule/subrule must be properly unwound. + If no viable alt occurs it is within an enter/exit decision, which + also must be rewound. Even the rewind for each mark must be unwount. + In the Java target this is pretty easy using try/finally, if a bit + ugly in the generated code. The rewind is generated in DFA.predict() + actually so no code needs to be generated for that. For languages + w/o this "finally" feature (C++?), the target implementor will have + to build an event stack or something. + + Across a socket for remote debugging, only the RecognitionException + data fields are transmitted. The token object or whatever that + caused the problem was the last object referenced by LT. The + immediately preceding LT event should hold the unexpected Token or + char. + + Here is a sample event trace for grammar: + + b : C ({;}A|B) // {;} is there to prevent A|B becoming a set + | D + ; + + The sequence for this rule (with no viable alt in the subrule) for + input 'c c' (there are 3 tokens) is: + + commence + LT(1) + enterRule b + location 7 1 + enter decision 3 + LT(1) + exit decision 3 + enterAlt1 + location 7 5 + LT(1) + consumeToken [c/<4>,1:0] + location 7 7 + enterSubRule 2 + enter decision 2 + LT(1) + LT(1) + recognitionException NoViableAltException 2 1 2 + exit decision 2 + exitSubRule 2 + beginResync + LT(1) + consumeToken [c/<4>,1:1] + LT(1) + endResync + LT(-1) + exitRule b + terminate + """ + pass + + + def beginResync(self): + """Indicates the recognizer is about to consume tokens to resynchronize + the parser. Any consume events from here until the recovered event + are not part of the parse--they are dead tokens. + """ + pass + + + def endResync(self): + """Indicates that the recognizer has finished consuming tokens in order + to resychronize. There may be multiple beginResync/endResync pairs + before the recognizer comes out of errorRecovery mode (in which + multiple errors are suppressed). This will be useful + in a gui where you want to probably grey out tokens that are consumed + but not matched to anything in grammar. Anything between + a beginResync/endResync pair was tossed out by the parser. + """ + pass + + + def semanticPredicate(self, result, predicate): + """A semantic predicate was evaluate with this result and action text""" + pass + + + def commence(self): + """Announce that parsing has begun. Not technically useful except for + sending events over a socket. A GUI for example will launch a thread + to connect and communicate with a remote parser. The thread will want + to notify the GUI when a connection is made. ANTLR parsers + trigger this upon entry to the first rule (the ruleLevel is used to + figure this out). + """ + pass + + + def terminate(self): + """Parsing is over; successfully or not. Mostly useful for telling + remote debugging listeners that it's time to quit. When the rule + invocation level goes to zero at the end of a rule, we are done + parsing. + """ + pass + + + ## T r e e P a r s i n g + + def consumeNode(self, t): + """Input for a tree parser is an AST, but we know nothing for sure + about a node except its type and text (obtained from the adaptor). + This is the analog of the consumeToken method. Again, the ID is + the hashCode usually of the node so it only works if hashCode is + not implemented. If the type is UP or DOWN, then + the ID is not really meaningful as it's fixed--there is + just one UP node and one DOWN navigation node. + """ + pass + + + def LT(self, i, t): + """The tree parser lookedahead. If the type is UP or DOWN, + then the ID is not really meaningful as it's fixed--there is + just one UP node and one DOWN navigation node. + """ + pass + + + + ## A S T E v e n t s + + def nilNode(self, t): + """A nil was created (even nil nodes have a unique ID... + they are not "null" per se). As of 4/28/2006, this + seems to be uniquely triggered when starting a new subtree + such as when entering a subrule in automatic mode and when + building a tree in rewrite mode. + + If you are receiving this event over a socket via + RemoteDebugEventSocketListener then only t.ID is set. + """ + pass + + + def errorNode(self, t): + """Upon syntax error, recognizers bracket the error with an error node + if they are building ASTs. + """ + pass + + + def createNode(self, node, token=None): + """Announce a new node built from token elements such as type etc... + + If you are receiving this event over a socket via + RemoteDebugEventSocketListener then only t.ID, type, text are + set. + """ + pass + + + def becomeRoot(self, newRoot, oldRoot): + """Make a node the new root of an existing root. + + Note: the newRootID parameter is possibly different + than the TreeAdaptor.becomeRoot() newRoot parameter. + In our case, it will always be the result of calling + TreeAdaptor.becomeRoot() and not root_n or whatever. + + The listener should assume that this event occurs + only when the current subrule (or rule) subtree is + being reset to newRootID. + + If you are receiving this event over a socket via + RemoteDebugEventSocketListener then only IDs are set. + + @see antlr3.tree.TreeAdaptor.becomeRoot() + """ + pass + + + def addChild(self, root, child): + """Make childID a child of rootID. + + If you are receiving this event over a socket via + RemoteDebugEventSocketListener then only IDs are set. + + @see antlr3.tree.TreeAdaptor.addChild() + """ + pass + + + def setTokenBoundaries(self, t, tokenStartIndex, tokenStopIndex): + """Set the token start/stop token index for a subtree root or node. + + If you are receiving this event over a socket via + RemoteDebugEventSocketListener then only t.ID is set. + """ + pass + + +class BlankDebugEventListener(DebugEventListener): + """A blank listener that does nothing; useful for real classes so + they don't have to have lots of blank methods and are less + sensitive to updates to debug interface. + + Note: this class is identical to DebugEventListener and exists purely + for compatibility with Java. + """ + pass + + +class TraceDebugEventListener(DebugEventListener): + """A listener that simply records text representations of the events. + + Useful for debugging the debugging facility ;) + + Subclasses can override the record() method (which defaults to printing to + stdout) to record the events in a different way. + """ + + def __init__(self, adaptor=None): + super(TraceDebugEventListener, self).__init__() + + if adaptor is None: + adaptor = CommonTreeAdaptor() + self.adaptor = adaptor + + def record(self, event): + sys.stdout.write(event + '\n') + + def enterRule(self, grammarFileName, ruleName): + self.record("enterRule "+ruleName) + + def exitRule(self, grammarFileName, ruleName): + self.record("exitRule "+ruleName) + + def enterSubRule(self, decisionNumber): + self.record("enterSubRule") + + def exitSubRule(self, decisionNumber): + self.record("exitSubRule") + + def location(self, line, pos): + self.record("location %s:%s" % (line, pos)) + + ## Tree parsing stuff + + def consumeNode(self, t): + self.record("consumeNode %s %s %s" % ( + self.adaptor.getUniqueID(t), + self.adaptor.getText(t), + self.adaptor.getType(t))) + + def LT(self, i, t): + self.record("LT %s %s %s %s" % ( + i, + self.adaptor.getUniqueID(t), + self.adaptor.getText(t), + self.adaptor.getType(t))) + + + ## AST stuff + def nilNode(self, t): + self.record("nilNode %s" % self.adaptor.getUniqueID(t)) + + def createNode(self, t, token=None): + if token is None: + self.record("create %s: %s, %s" % ( + self.adaptor.getUniqueID(t), + self.adaptor.getText(t), + self.adaptor.getType(t))) + + else: + self.record("create %s: %s" % ( + self.adaptor.getUniqueID(t), + token.getTokenIndex())) + + def becomeRoot(self, newRoot, oldRoot): + self.record("becomeRoot %s, %s" % ( + self.adaptor.getUniqueID(newRoot), + self.adaptor.getUniqueID(oldRoot))) + + def addChild(self, root, child): + self.record("addChild %s, %s" % ( + self.adaptor.getUniqueID(root), + self.adaptor.getUniqueID(child))) + + def setTokenBoundaries(self, t, tokenStartIndex, tokenStopIndex): + self.record("setTokenBoundaries %s, %s, %s" % ( + self.adaptor.getUniqueID(t), + tokenStartIndex, tokenStopIndex)) + + +class RecordDebugEventListener(TraceDebugEventListener): + """A listener that records events as strings in an array.""" + + def __init__(self, adaptor=None): + super(RecordDebugEventListener, self).__init__(adaptor) + + self.events = [] + + def record(self, event): + self.events.append(event) + + +class DebugEventSocketProxy(DebugEventListener): + """A proxy debug event listener that forwards events over a socket to + a debugger (or any other listener) using a simple text-based protocol; + one event per line. ANTLRWorks listens on server socket with a + RemoteDebugEventSocketListener instance. These two objects must therefore + be kept in sync. New events must be handled on both sides of socket. + """ + + DEFAULT_DEBUGGER_PORT = 49100 + + def __init__(self, recognizer, adaptor=None, port=None, + debug=None): + super(DebugEventSocketProxy, self).__init__() + + self.grammarFileName = recognizer.getGrammarFileName() + + # Almost certainly the recognizer will have adaptor set, but + # we don't know how to cast it (Parser or TreeParser) to get + # the adaptor field. Must be set with a constructor. :( + self.adaptor = adaptor + + self.port = port or self.DEFAULT_DEBUGGER_PORT + + self.debug = debug + + self.socket = None + self.connection = None + self.input = None + self.output = None + + + def log(self, msg): + if self.debug is not None: + self.debug.write(msg + '\n') + + + def handshake(self): + if self.socket is None: + # create listening socket + self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self.socket.bind(('', self.port)) + self.socket.listen(1) + self.log("Waiting for incoming connection on port %d" % self.port) + + # wait for an incoming connection + self.connection, addr = self.socket.accept() + self.log("Accepted connection from %s:%d" % addr) + + self.connection.setblocking(1) + self.connection.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1) + + # FIXME(pink): wrap into utf8 encoding stream + self.output = self.connection.makefile('w', 0) + self.input = self.connection.makefile('r', 0) + + self.write("ANTLR %s" % self.PROTOCOL_VERSION) + self.write("grammar \"%s" % self.grammarFileName) + self.ack() + + + def write(self, msg): + self.log("> %s" % msg) + self.output.write("%s\n" % msg) + self.output.flush() + + + def ack(self): + t = self.input.readline() + self.log("< %s" % t.rstrip()) + + + def transmit(self, event): + self.write(event); + self.ack(); + + + def commence(self): + # don't bother sending event; listener will trigger upon connection + pass + + + def terminate(self): + self.transmit("terminate") + self.output.close() + self.input.close() + self.connection.close() + self.socket.close() + + + def enterRule(self, grammarFileName, ruleName): + self.transmit("enterRule\t%s\t%s" % (grammarFileName, ruleName)) + + + def enterAlt(self, alt): + self.transmit("enterAlt\t%d" % alt) + + + def exitRule(self, grammarFileName, ruleName): + self.transmit("exitRule\t%s\t%s" % (grammarFileName, ruleName)) + + + def enterSubRule(self, decisionNumber): + self.transmit("enterSubRule\t%d" % decisionNumber) + + + def exitSubRule(self, decisionNumber): + self.transmit("exitSubRule\t%d" % decisionNumber) + + + def enterDecision(self, decisionNumber): + self.transmit("enterDecision\t%d" % decisionNumber) + + + def exitDecision(self, decisionNumber): + self.transmit("exitDecision\t%d" % decisionNumber) + + + def consumeToken(self, t): + self.transmit("consumeToken\t%s" % self.serializeToken(t)) + + + def consumeHiddenToken(self, t): + self.transmit("consumeHiddenToken\t%s" % self.serializeToken(t)) + + + def LT(self, i, o): + if isinstance(o, Tree): + return self.LT_tree(i, o) + return self.LT_token(i, o) + + + def LT_token(self, i, t): + if t is not None: + self.transmit("LT\t%d\t%s" % (i, self.serializeToken(t))) + + + def mark(self, i): + self.transmit("mark\t%d" % i) + + + def rewind(self, i=None): + if i is not None: + self.transmit("rewind\t%d" % i) + else: + self.transmit("rewind") + + + def beginBacktrack(self, level): + self.transmit("beginBacktrack\t%d" % level) + + + def endBacktrack(self, level, successful): + self.transmit("endBacktrack\t%d\t%s" % ( + level, ['0', '1'][bool(successful)])) + + + def location(self, line, pos): + self.transmit("location\t%d\t%d" % (line, pos)) + + + def recognitionException(self, exc): + self.transmit('\t'.join([ + "exception", + exc.__class__.__name__, + str(int(exc.index)), + str(int(exc.line)), + str(int(exc.charPositionInLine))])) + + + def beginResync(self): + self.transmit("beginResync") + + + def endResync(self): + self.transmit("endResync") + + + def semanticPredicate(self, result, predicate): + self.transmit('\t'.join([ + "semanticPredicate", + str(int(result)), + self.escapeNewlines(predicate)])) + + ## A S T P a r s i n g E v e n t s + + def consumeNode(self, t): + FIXME(31) +# StringBuffer buf = new StringBuffer(50); +# buf.append("consumeNode"); +# serializeNode(buf, t); +# transmit(buf.toString()); + + + def LT_tree(self, i, t): + FIXME(34) +# int ID = adaptor.getUniqueID(t); +# String text = adaptor.getText(t); +# int type = adaptor.getType(t); +# StringBuffer buf = new StringBuffer(50); +# buf.append("LN\t"); // lookahead node; distinguish from LT in protocol +# buf.append(i); +# serializeNode(buf, t); +# transmit(buf.toString()); + + + def serializeNode(self, buf, t): + FIXME(33) +# int ID = adaptor.getUniqueID(t); +# String text = adaptor.getText(t); +# int type = adaptor.getType(t); +# buf.append("\t"); +# buf.append(ID); +# buf.append("\t"); +# buf.append(type); +# Token token = adaptor.getToken(t); +# int line = -1; +# int pos = -1; +# if ( token!=null ) { +# line = token.getLine(); +# pos = token.getCharPositionInLine(); +# } +# buf.append("\t"); +# buf.append(line); +# buf.append("\t"); +# buf.append(pos); +# int tokenIndex = adaptor.getTokenStartIndex(t); +# buf.append("\t"); +# buf.append(tokenIndex); +# serializeText(buf, text); + + + ## A S T E v e n t s + + def nilNode(self, t): + self.transmit("nilNode\t%d" % self.adaptor.getUniqueID(t)) + + + def errorNode(self, t): + self.transmit("errorNode\t%d\t%d\t\"%s" % ( + self.adaptor.getUniqueID(t), + Token.INVALID_TOKEN_TYPE, + self.escapeNewlines(t.toString()))) + + + + def createNode(self, node, token=None): + if token is not None: + self.transmit("createNode\t%d\t%d" % ( + self.adaptor.getUniqueID(node), + token.getTokenIndex())) + + else: + self.transmit("createNodeFromTokenElements\t%d\t%d\t\"%s" % ( + self.adaptor.getUniqueID(node), + self.adaptor.getType(node), + self.adaptor.getText(node))) + + + def becomeRoot(self, newRoot, oldRoot): + self.transmit("becomeRoot\t%d\t%d" % ( + self.adaptor.getUniqueID(newRoot), + self.adaptor.getUniqueID(oldRoot))) + + + def addChild(self, root, child): + self.transmit("addChild\t%d\t%d" % ( + self.adaptor.getUniqueID(root), + self.adaptor.getUniqueID(child))) + + + def setTokenBoundaries(self, t, tokenStartIndex, tokenStopIndex): + self.transmit("setTokenBoundaries\t%d\t%d\t%d" % ( + self.adaptor.getUniqueID(t), + tokenStartIndex, tokenStopIndex)) + + + + ## support + + def setTreeAdaptor(self, adaptor): + self.adaptor = adaptor + + def getTreeAdaptor(self): + return self.adaptor + + + def serializeToken(self, t): + buf = [str(int(t.getTokenIndex())), + str(int(t.getType())), + str(int(t.getChannel())), + str(int(t.getLine() or 0)), + str(int(t.getCharPositionInLine() or 0)), + '\"' + self.escapeNewlines(t.getText())] + return '\t'.join(buf) + + + def escapeNewlines(self, txt): + if txt is None: + return '' + + txt = txt.replace("%","%25") # escape all escape char ;) + txt = txt.replace("\n","%0A") # escape \n + txt = txt.replace("\r","%0D") # escape \r + return txt diff --git a/antlr-3.1.3/runtime/Python/antlr3/dfa.py b/antlr-3.1.3/runtime/Python/antlr3/dfa.py new file mode 100644 index 0000000..ff93761 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/antlr3/dfa.py @@ -0,0 +1,213 @@ +"""ANTLR3 runtime package""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licensc] + +from antlr3.constants import EOF +from antlr3.exceptions import NoViableAltException, BacktrackingFailed + + +class DFA(object): + """@brief A DFA implemented as a set of transition tables. + + Any state that has a semantic predicate edge is special; those states + are generated with if-then-else structures in a specialStateTransition() + which is generated by cyclicDFA template. + + """ + + def __init__( + self, + recognizer, decisionNumber, + eot, eof, min, max, accept, special, transition + ): + ## Which recognizer encloses this DFA? Needed to check backtracking + self.recognizer = recognizer + + self.decisionNumber = decisionNumber + self.eot = eot + self.eof = eof + self.min = min + self.max = max + self.accept = accept + self.special = special + self.transition = transition + + + def predict(self, input): + """ + From the input stream, predict what alternative will succeed + using this DFA (representing the covering regular approximation + to the underlying CFL). Return an alternative number 1..n. Throw + an exception upon error. + """ + mark = input.mark() + s = 0 # we always start at s0 + try: + for _ in xrange(50000): + #print "***Current state = %d" % s + + specialState = self.special[s] + if specialState >= 0: + #print "is special" + s = self.specialStateTransition(specialState, input) + if s == -1: + self.noViableAlt(s, input) + return 0 + input.consume() + continue + + if self.accept[s] >= 1: + #print "accept state for alt %d" % self.accept[s] + return self.accept[s] + + # look for a normal char transition + c = input.LA(1) + + #print "LA = %d (%r)" % (c, unichr(c) if c >= 0 else 'EOF') + #print "range = %d..%d" % (self.min[s], self.max[s]) + + if c >= self.min[s] and c <= self.max[s]: + # move to next state + snext = self.transition[s][c-self.min[s]] + #print "in range, next state = %d" % snext + + if snext < 0: + #print "not a normal transition" + # was in range but not a normal transition + # must check EOT, which is like the else clause. + # eot[s]>=0 indicates that an EOT edge goes to another + # state. + if self.eot[s] >= 0: # EOT Transition to accept state? + #print "EOT trans to accept state %d" % self.eot[s] + + s = self.eot[s] + input.consume() + # TODO: I had this as return accept[eot[s]] + # which assumed here that the EOT edge always + # went to an accept...faster to do this, but + # what about predicated edges coming from EOT + # target? + continue + + #print "no viable alt" + self.noViableAlt(s, input) + return 0 + + s = snext + input.consume() + continue + + if self.eot[s] >= 0: + #print "EOT to %d" % self.eot[s] + + s = self.eot[s] + input.consume() + continue + + # EOF Transition to accept state? + if c == EOF and self.eof[s] >= 0: + #print "EOF Transition to accept state %d" \ + # % self.accept[self.eof[s]] + return self.accept[self.eof[s]] + + # not in range and not EOF/EOT, must be invalid symbol + self.noViableAlt(s, input) + return 0 + + else: + raise RuntimeError("DFA bang!") + + finally: + input.rewind(mark) + + + def noViableAlt(self, s, input): + if self.recognizer._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException( + self.getDescription(), + self.decisionNumber, + s, + input + ) + + self.error(nvae) + raise nvae + + + def error(self, nvae): + """A hook for debugging interface""" + pass + + + def specialStateTransition(self, s, input): + return -1 + + + def getDescription(self): + return "n/a" + + +## def specialTransition(self, state, symbol): +## return 0 + + + def unpack(cls, string): + """@brief Unpack the runlength encoded table data. + + Terence implemented packed table initializers, because Java has a + size restriction on .class files and the lookup tables can grow + pretty large. The generated JavaLexer.java of the Java.g example + would be about 15MB with uncompressed array initializers. + + Python does not have any size restrictions, but the compilation of + such large source files seems to be pretty memory hungry. The memory + consumption of the python process grew to >1.5GB when importing a + 15MB lexer, eating all my swap space and I was to impacient to see, + if it could finish at all. With packed initializers that are unpacked + at import time of the lexer module, everything works like a charm. + + """ + + ret = [] + for i in range(len(string) / 2): + (n, v) = ord(string[i*2]), ord(string[i*2+1]) + + # Is there a bitwise operation to do this? + if v == 0xFFFF: + v = -1 + + ret += [v] * n + + return ret + + unpack = classmethod(unpack) diff --git a/antlr-3.1.3/runtime/Python/antlr3/dottreegen.py b/antlr-3.1.3/runtime/Python/antlr3/dottreegen.py new file mode 100644 index 0000000..827d4ec --- /dev/null +++ b/antlr-3.1.3/runtime/Python/antlr3/dottreegen.py @@ -0,0 +1,210 @@ +""" @package antlr3.dottreegenerator +@brief ANTLR3 runtime package, tree module + +This module contains all support classes for AST construction and tree parsers. + +""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +# lot's of docstrings are missing, don't complain for now... +# pylint: disable-msg=C0111 + +from antlr3.tree import CommonTreeAdaptor +import stringtemplate3 + +class DOTTreeGenerator(object): + """ + A utility class to generate DOT diagrams (graphviz) from + arbitrary trees. You can pass in your own templates and + can pass in any kind of tree or use Tree interface method. + """ + + _treeST = stringtemplate3.StringTemplate( + template=( + "digraph {\n" + + " ordering=out;\n" + + " ranksep=.4;\n" + + " node [shape=plaintext, fixedsize=true, fontsize=11, fontname=\"Courier\",\n" + + " width=.25, height=.25];\n" + + " edge [arrowsize=.5]\n" + + " $nodes$\n" + + " $edges$\n" + + "}\n") + ) + + _nodeST = stringtemplate3.StringTemplate( + template="$name$ [label=\"$text$\"];\n" + ) + + _edgeST = stringtemplate3.StringTemplate( + template="$parent$ -> $child$ // \"$parentText$\" -> \"$childText$\"\n" + ) + + def __init__(self): + ## Track node to number mapping so we can get proper node name back + self.nodeToNumberMap = {} + + ## Track node number so we can get unique node names + self.nodeNumber = 0 + + + def toDOT(self, tree, adaptor=None, treeST=_treeST, edgeST=_edgeST): + if adaptor is None: + adaptor = CommonTreeAdaptor() + + treeST = treeST.getInstanceOf() + + self.nodeNumber = 0 + self.toDOTDefineNodes(tree, adaptor, treeST) + + self.nodeNumber = 0 + self.toDOTDefineEdges(tree, adaptor, treeST, edgeST) + return treeST + + + def toDOTDefineNodes(self, tree, adaptor, treeST, knownNodes=None): + if knownNodes is None: + knownNodes = set() + + if tree is None: + return + + n = adaptor.getChildCount(tree) + if n == 0: + # must have already dumped as child from previous + # invocation; do nothing + return + + # define parent node + number = self.getNodeNumber(tree) + if number not in knownNodes: + parentNodeST = self.getNodeST(adaptor, tree) + treeST.setAttribute("nodes", parentNodeST) + knownNodes.add(number) + + # for each child, do a " [label=text]" node def + for i in range(n): + child = adaptor.getChild(tree, i) + + number = self.getNodeNumber(child) + if number not in knownNodes: + nodeST = self.getNodeST(adaptor, child) + treeST.setAttribute("nodes", nodeST) + knownNodes.add(number) + + self.toDOTDefineNodes(child, adaptor, treeST, knownNodes) + + + def toDOTDefineEdges(self, tree, adaptor, treeST, edgeST): + if tree is None: + return + + n = adaptor.getChildCount(tree) + if n == 0: + # must have already dumped as child from previous + # invocation; do nothing + return + + parentName = "n%d" % self.getNodeNumber(tree) + + # for each child, do a parent -> child edge using unique node names + parentText = adaptor.getText(tree) + for i in range(n): + child = adaptor.getChild(tree, i) + childText = adaptor.getText(child) + childName = "n%d" % self.getNodeNumber(child) + edgeST = edgeST.getInstanceOf() + edgeST.setAttribute("parent", parentName) + edgeST.setAttribute("child", childName) + edgeST.setAttribute("parentText", parentText) + edgeST.setAttribute("childText", childText) + treeST.setAttribute("edges", edgeST) + self.toDOTDefineEdges(child, adaptor, treeST, edgeST) + + + def getNodeST(self, adaptor, t): + text = adaptor.getText(t) + nodeST = self._nodeST.getInstanceOf() + uniqueName = "n%d" % self.getNodeNumber(t) + nodeST.setAttribute("name", uniqueName) + if text is not None: + text = text.replace('"', r'\\"') + nodeST.setAttribute("text", text) + return nodeST + + + def getNodeNumber(self, t): + try: + return self.nodeToNumberMap[t] + except KeyError: + self.nodeToNumberMap[t] = self.nodeNumber + self.nodeNumber += 1 + return self.nodeNumber - 1 + + +def toDOT(tree, adaptor=None, treeST=DOTTreeGenerator._treeST, edgeST=DOTTreeGenerator._edgeST): + """ + Generate DOT (graphviz) for a whole tree not just a node. + For example, 3+4*5 should generate: + + digraph { + node [shape=plaintext, fixedsize=true, fontsize=11, fontname="Courier", + width=.4, height=.2]; + edge [arrowsize=.7] + "+"->3 + "+"->"*" + "*"->4 + "*"->5 + } + + Return the ST not a string in case people want to alter. + + Takes a Tree interface object. + + Example of invokation: + + import antlr3 + import antlr3.extras + + input = antlr3.ANTLRInputStream(sys.stdin) + lex = TLexer(input) + tokens = antlr3.CommonTokenStream(lex) + parser = TParser(tokens) + tree = parser.e().tree + print tree.toStringTree() + st = antlr3.extras.toDOT(t) + print st + + """ + + gen = DOTTreeGenerator() + return gen.toDOT(tree, adaptor, treeST, edgeST) diff --git a/antlr-3.1.3/runtime/Python/antlr3/exceptions.py b/antlr-3.1.3/runtime/Python/antlr3/exceptions.py new file mode 100644 index 0000000..97b1074 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/antlr3/exceptions.py @@ -0,0 +1,364 @@ +"""ANTLR3 exception hierarchy""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +from antlr3.constants import INVALID_TOKEN_TYPE + + +class BacktrackingFailed(Exception): + """@brief Raised to signal failed backtrack attempt""" + + pass + + +class RecognitionException(Exception): + """@brief The root of the ANTLR exception hierarchy. + + To avoid English-only error messages and to generally make things + as flexible as possible, these exceptions are not created with strings, + but rather the information necessary to generate an error. Then + the various reporting methods in Parser and Lexer can be overridden + to generate a localized error message. For example, MismatchedToken + exceptions are built with the expected token type. + So, don't expect getMessage() to return anything. + + Note that as of Java 1.4, you can access the stack trace, which means + that you can compute the complete trace of rules from the start symbol. + This gives you considerable context information with which to generate + useful error messages. + + ANTLR generates code that throws exceptions upon recognition error and + also generates code to catch these exceptions in each rule. If you + want to quit upon first error, you can turn off the automatic error + handling mechanism using rulecatch action, but you still need to + override methods mismatch and recoverFromMismatchSet. + + In general, the recognition exceptions can track where in a grammar a + problem occurred and/or what was the expected input. While the parser + knows its state (such as current input symbol and line info) that + state can change before the exception is reported so current token index + is computed and stored at exception time. From this info, you can + perhaps print an entire line of input not just a single token, for example. + Better to just say the recognizer had a problem and then let the parser + figure out a fancy report. + + """ + + def __init__(self, input=None): + Exception.__init__(self) + + # What input stream did the error occur in? + self.input = None + + # What is index of token/char were we looking at when the error + # occurred? + self.index = None + + # The current Token when an error occurred. Since not all streams + # can retrieve the ith Token, we have to track the Token object. + # For parsers. Even when it's a tree parser, token might be set. + self.token = None + + # If this is a tree parser exception, node is set to the node with + # the problem. + self.node = None + + # The current char when an error occurred. For lexers. + self.c = None + + # Track the line at which the error occurred in case this is + # generated from a lexer. We need to track this since the + # unexpected char doesn't carry the line info. + self.line = None + + self.charPositionInLine = None + + # If you are parsing a tree node stream, you will encounter som + # imaginary nodes w/o line/col info. We now search backwards looking + # for most recent token with line/col info, but notify getErrorHeader() + # that info is approximate. + self.approximateLineInfo = False + + + if input is not None: + self.input = input + self.index = input.index() + + # late import to avoid cyclic dependencies + from antlr3.streams import TokenStream, CharStream + from antlr3.tree import TreeNodeStream + + if isinstance(self.input, TokenStream): + self.token = self.input.LT(1) + self.line = self.token.line + self.charPositionInLine = self.token.charPositionInLine + + if isinstance(self.input, TreeNodeStream): + self.extractInformationFromTreeNodeStream(self.input) + + else: + if isinstance(self.input, CharStream): + self.c = self.input.LT(1) + self.line = self.input.line + self.charPositionInLine = self.input.charPositionInLine + + else: + self.c = self.input.LA(1) + + def extractInformationFromTreeNodeStream(self, nodes): + from antlr3.tree import Tree, CommonTree + from antlr3.tokens import CommonToken + + self.node = nodes.LT(1) + adaptor = nodes.adaptor + payload = adaptor.getToken(self.node) + if payload is not None: + self.token = payload + if payload.line <= 0: + # imaginary node; no line/pos info; scan backwards + i = -1 + priorNode = nodes.LT(i) + while priorNode is not None: + priorPayload = adaptor.getToken(priorNode) + if priorPayload is not None and priorPayload.line > 0: + # we found the most recent real line / pos info + self.line = priorPayload.line + self.charPositionInLine = priorPayload.charPositionInLine + self.approximateLineInfo = True + break + + i -= 1 + priorNode = nodes.LT(i) + + else: # node created from real token + self.line = payload.line + self.charPositionInLine = payload.charPositionInLine + + elif isinstance(self.node, Tree): + self.line = self.node.line + self.charPositionInLine = self.node.charPositionInLine + if isinstance(self.node, CommonTree): + self.token = self.node.token + + else: + type = adaptor.getType(self.node) + text = adaptor.getText(self.node) + self.token = CommonToken(type=type, text=text) + + + def getUnexpectedType(self): + """Return the token type or char of the unexpected input element""" + + from antlr3.streams import TokenStream + from antlr3.tree import TreeNodeStream + + if isinstance(self.input, TokenStream): + return self.token.type + + elif isinstance(self.input, TreeNodeStream): + adaptor = self.input.treeAdaptor + return adaptor.getType(self.node) + + else: + return self.c + + unexpectedType = property(getUnexpectedType) + + +class MismatchedTokenException(RecognitionException): + """@brief A mismatched char or Token or tree node.""" + + def __init__(self, expecting, input): + RecognitionException.__init__(self, input) + self.expecting = expecting + + + def __str__(self): + #return "MismatchedTokenException("+self.expecting+")" + return "MismatchedTokenException(%r!=%r)" % ( + self.getUnexpectedType(), self.expecting + ) + __repr__ = __str__ + + +class UnwantedTokenException(MismatchedTokenException): + """An extra token while parsing a TokenStream""" + + def getUnexpectedToken(self): + return self.token + + + def __str__(self): + exp = ", expected %s" % self.expecting + if self.expecting == INVALID_TOKEN_TYPE: + exp = "" + + if self.token is None: + return "UnwantedTokenException(found=%s%s)" % (None, exp) + + return "UnwantedTokenException(found=%s%s)" % (self.token.text, exp) + __repr__ = __str__ + + +class MissingTokenException(MismatchedTokenException): + """ + We were expecting a token but it's not found. The current token + is actually what we wanted next. + """ + + def __init__(self, expecting, input, inserted): + MismatchedTokenException.__init__(self, expecting, input) + + self.inserted = inserted + + + def getMissingType(self): + return self.expecting + + + def __str__(self): + if self.inserted is not None and self.token is not None: + return "MissingTokenException(inserted %r at %r)" % ( + self.inserted, self.token.text) + + if self.token is not None: + return "MissingTokenException(at %r)" % self.token.text + + return "MissingTokenException" + __repr__ = __str__ + + +class MismatchedRangeException(RecognitionException): + """@brief The next token does not match a range of expected types.""" + + def __init__(self, a, b, input): + RecognitionException.__init__(self, input) + + self.a = a + self.b = b + + + def __str__(self): + return "MismatchedRangeException(%r not in [%r..%r])" % ( + self.getUnexpectedType(), self.a, self.b + ) + __repr__ = __str__ + + +class MismatchedSetException(RecognitionException): + """@brief The next token does not match a set of expected types.""" + + def __init__(self, expecting, input): + RecognitionException.__init__(self, input) + + self.expecting = expecting + + + def __str__(self): + return "MismatchedSetException(%r not in %r)" % ( + self.getUnexpectedType(), self.expecting + ) + __repr__ = __str__ + + +class MismatchedNotSetException(MismatchedSetException): + """@brief Used for remote debugger deserialization""" + + def __str__(self): + return "MismatchedNotSetException(%r!=%r)" % ( + self.getUnexpectedType(), self.expecting + ) + __repr__ = __str__ + + +class NoViableAltException(RecognitionException): + """@brief Unable to decide which alternative to choose.""" + + def __init__( + self, grammarDecisionDescription, decisionNumber, stateNumber, input + ): + RecognitionException.__init__(self, input) + + self.grammarDecisionDescription = grammarDecisionDescription + self.decisionNumber = decisionNumber + self.stateNumber = stateNumber + + + def __str__(self): + return "NoViableAltException(%r!=[%r])" % ( + self.unexpectedType, self.grammarDecisionDescription + ) + __repr__ = __str__ + + +class EarlyExitException(RecognitionException): + """@brief The recognizer did not match anything for a (..)+ loop.""" + + def __init__(self, decisionNumber, input): + RecognitionException.__init__(self, input) + + self.decisionNumber = decisionNumber + + +class FailedPredicateException(RecognitionException): + """@brief A semantic predicate failed during validation. + + Validation of predicates + occurs when normally parsing the alternative just like matching a token. + Disambiguating predicate evaluation occurs when we hoist a predicate into + a prediction decision. + """ + + def __init__(self, input, ruleName, predicateText): + RecognitionException.__init__(self, input) + + self.ruleName = ruleName + self.predicateText = predicateText + + + def __str__(self): + return "FailedPredicateException("+self.ruleName+",{"+self.predicateText+"}?)" + __repr__ = __str__ + + +class MismatchedTreeNodeException(RecognitionException): + """@brief The next tree mode does not match the expected type.""" + + def __init__(self, expecting, input): + RecognitionException.__init__(self, input) + + self.expecting = expecting + + def __str__(self): + return "MismatchedTreeNodeException(%r!=%r)" % ( + self.getUnexpectedType(), self.expecting + ) + __repr__ = __str__ diff --git a/antlr-3.1.3/runtime/Python/antlr3/extras.py b/antlr-3.1.3/runtime/Python/antlr3/extras.py new file mode 100644 index 0000000..9155cda --- /dev/null +++ b/antlr-3.1.3/runtime/Python/antlr3/extras.py @@ -0,0 +1,47 @@ +""" @package antlr3.dottreegenerator +@brief ANTLR3 runtime package, tree module + +This module contains all support classes for AST construction and tree parsers. + +""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +# lot's of docstrings are missing, don't complain for now... +# pylint: disable-msg=C0111 + +from treewizard import TreeWizard + +try: + from antlr3.dottreegen import toDOT +except ImportError, exc: + def toDOT(*args, **kwargs): + raise exc diff --git a/antlr-3.1.3/runtime/Python/antlr3/main.py b/antlr-3.1.3/runtime/Python/antlr3/main.py new file mode 100644 index 0000000..19a08b5 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/antlr3/main.py @@ -0,0 +1,307 @@ +"""ANTLR3 runtime package""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + + +import sys +import optparse + +import antlr3 + + +class _Main(object): + def __init__(self): + self.stdin = sys.stdin + self.stdout = sys.stdout + self.stderr = sys.stderr + + + def parseOptions(self, argv): + optParser = optparse.OptionParser() + optParser.add_option( + "--encoding", + action="store", + type="string", + dest="encoding" + ) + optParser.add_option( + "--input", + action="store", + type="string", + dest="input" + ) + optParser.add_option( + "--interactive", "-i", + action="store_true", + dest="interactive" + ) + optParser.add_option( + "--no-output", + action="store_true", + dest="no_output" + ) + optParser.add_option( + "--profile", + action="store_true", + dest="profile" + ) + optParser.add_option( + "--hotshot", + action="store_true", + dest="hotshot" + ) + optParser.add_option( + "--port", + type="int", + dest="port", + default=None + ) + optParser.add_option( + "--debug-socket", + action='store_true', + dest="debug_socket", + default=None + ) + + self.setupOptions(optParser) + + return optParser.parse_args(argv[1:]) + + + def setupOptions(self, optParser): + pass + + + def execute(self, argv): + options, args = self.parseOptions(argv) + + self.setUp(options) + + if options.interactive: + while True: + try: + input = raw_input(">>> ") + except (EOFError, KeyboardInterrupt): + self.stdout.write("\nBye.\n") + break + + inStream = antlr3.ANTLRStringStream(input) + self.parseStream(options, inStream) + + else: + if options.input is not None: + inStream = antlr3.ANTLRStringStream(options.input) + + elif len(args) == 1 and args[0] != '-': + inStream = antlr3.ANTLRFileStream( + args[0], encoding=options.encoding + ) + + else: + inStream = antlr3.ANTLRInputStream( + self.stdin, encoding=options.encoding + ) + + if options.profile: + try: + import cProfile as profile + except ImportError: + import profile + + profile.runctx( + 'self.parseStream(options, inStream)', + globals(), + locals(), + 'profile.dat' + ) + + import pstats + stats = pstats.Stats('profile.dat') + stats.strip_dirs() + stats.sort_stats('time') + stats.print_stats(100) + + elif options.hotshot: + import hotshot + + profiler = hotshot.Profile('hotshot.dat') + profiler.runctx( + 'self.parseStream(options, inStream)', + globals(), + locals() + ) + + else: + self.parseStream(options, inStream) + + + def setUp(self, options): + pass + + + def parseStream(self, options, inStream): + raise NotImplementedError + + + def write(self, options, text): + if not options.no_output: + self.stdout.write(text) + + + def writeln(self, options, text): + self.write(options, text + '\n') + + +class LexerMain(_Main): + def __init__(self, lexerClass): + _Main.__init__(self) + + self.lexerClass = lexerClass + + + def parseStream(self, options, inStream): + lexer = self.lexerClass(inStream) + for token in lexer: + self.writeln(options, str(token)) + + +class ParserMain(_Main): + def __init__(self, lexerClassName, parserClass): + _Main.__init__(self) + + self.lexerClassName = lexerClassName + self.lexerClass = None + self.parserClass = parserClass + + + def setupOptions(self, optParser): + optParser.add_option( + "--lexer", + action="store", + type="string", + dest="lexerClass", + default=self.lexerClassName + ) + optParser.add_option( + "--rule", + action="store", + type="string", + dest="parserRule" + ) + + + def setUp(self, options): + lexerMod = __import__(options.lexerClass) + self.lexerClass = getattr(lexerMod, options.lexerClass) + + + def parseStream(self, options, inStream): + kwargs = {} + if options.port is not None: + kwargs['port'] = options.port + if options.debug_socket is not None: + kwargs['debug_socket'] = sys.stderr + + lexer = self.lexerClass(inStream) + tokenStream = antlr3.CommonTokenStream(lexer) + parser = self.parserClass(tokenStream, **kwargs) + result = getattr(parser, options.parserRule)() + if result is not None: + if hasattr(result, 'tree'): + if result.tree is not None: + self.writeln(options, result.tree.toStringTree()) + else: + self.writeln(options, repr(result)) + + +class WalkerMain(_Main): + def __init__(self, walkerClass): + _Main.__init__(self) + + self.lexerClass = None + self.parserClass = None + self.walkerClass = walkerClass + + + def setupOptions(self, optParser): + optParser.add_option( + "--lexer", + action="store", + type="string", + dest="lexerClass", + default=None + ) + optParser.add_option( + "--parser", + action="store", + type="string", + dest="parserClass", + default=None + ) + optParser.add_option( + "--parser-rule", + action="store", + type="string", + dest="parserRule", + default=None + ) + optParser.add_option( + "--rule", + action="store", + type="string", + dest="walkerRule" + ) + + + def setUp(self, options): + lexerMod = __import__(options.lexerClass) + self.lexerClass = getattr(lexerMod, options.lexerClass) + parserMod = __import__(options.parserClass) + self.parserClass = getattr(parserMod, options.parserClass) + + + def parseStream(self, options, inStream): + lexer = self.lexerClass(inStream) + tokenStream = antlr3.CommonTokenStream(lexer) + parser = self.parserClass(tokenStream) + result = getattr(parser, options.parserRule)() + if result is not None: + assert hasattr(result, 'tree'), "Parser did not return an AST" + nodeStream = antlr3.tree.CommonTreeNodeStream(result.tree) + nodeStream.setTokenStream(tokenStream) + walker = self.walkerClass(nodeStream) + result = getattr(walker, options.walkerRule)() + if result is not None: + if hasattr(result, 'tree'): + self.writeln(options, result.tree.toStringTree()) + else: + self.writeln(options, repr(result)) + diff --git a/antlr-3.1.3/runtime/Python/antlr3/recognizers.py b/antlr-3.1.3/runtime/Python/antlr3/recognizers.py new file mode 100644 index 0000000..b6bfcc1 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/antlr3/recognizers.py @@ -0,0 +1,1487 @@ +"""ANTLR3 runtime package""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +import sys +import inspect + +from antlr3 import runtime_version, runtime_version_str +from antlr3.constants import DEFAULT_CHANNEL, HIDDEN_CHANNEL, EOF, \ + EOR_TOKEN_TYPE, INVALID_TOKEN_TYPE +from antlr3.exceptions import RecognitionException, MismatchedTokenException, \ + MismatchedRangeException, MismatchedTreeNodeException, \ + NoViableAltException, EarlyExitException, MismatchedSetException, \ + MismatchedNotSetException, FailedPredicateException, \ + BacktrackingFailed, UnwantedTokenException, MissingTokenException +from antlr3.tokens import CommonToken, EOF_TOKEN, SKIP_TOKEN +from antlr3.compat import set, frozenset, reversed + + +class RecognizerSharedState(object): + """ + The set of fields needed by an abstract recognizer to recognize input + and recover from errors etc... As a separate state object, it can be + shared among multiple grammars; e.g., when one grammar imports another. + + These fields are publically visible but the actual state pointer per + parser is protected. + """ + + def __init__(self): + # Track the set of token types that can follow any rule invocation. + # Stack grows upwards. + self.following = [] + + # This is true when we see an error and before having successfully + # matched a token. Prevents generation of more than one error message + # per error. + self.errorRecovery = False + + # The index into the input stream where the last error occurred. + # This is used to prevent infinite loops where an error is found + # but no token is consumed during recovery...another error is found, + # ad naseum. This is a failsafe mechanism to guarantee that at least + # one token/tree node is consumed for two errors. + self.lastErrorIndex = -1 + + # If 0, no backtracking is going on. Safe to exec actions etc... + # If >0 then it's the level of backtracking. + self.backtracking = 0 + + # An array[size num rules] of Map that tracks + # the stop token index for each rule. ruleMemo[ruleIndex] is + # the memoization table for ruleIndex. For key ruleStartIndex, you + # get back the stop token for associated rule or MEMO_RULE_FAILED. + # + # This is only used if rule memoization is on (which it is by default). + self.ruleMemo = None + + ## Did the recognizer encounter a syntax error? Track how many. + self.syntaxErrors = 0 + + + # LEXER FIELDS (must be in same state object to avoid casting + # constantly in generated code and Lexer object) :( + + + ## The goal of all lexer rules/methods is to create a token object. + # This is an instance variable as multiple rules may collaborate to + # create a single token. nextToken will return this object after + # matching lexer rule(s). If you subclass to allow multiple token + # emissions, then set this to the last token to be matched or + # something nonnull so that the auto token emit mechanism will not + # emit another token. + self.token = None + + ## What character index in the stream did the current token start at? + # Needed, for example, to get the text for current token. Set at + # the start of nextToken. + self.tokenStartCharIndex = -1 + + ## The line on which the first character of the token resides + self.tokenStartLine = None + + ## The character position of first character within the line + self.tokenStartCharPositionInLine = None + + ## The channel number for the current token + self.channel = None + + ## The token type for the current token + self.type = None + + ## You can set the text for the current token to override what is in + # the input char buffer. Use setText() or can set this instance var. + self.text = None + + +class BaseRecognizer(object): + """ + @brief Common recognizer functionality. + + A generic recognizer that can handle recognizers generated from + lexer, parser, and tree grammars. This is all the parsing + support code essentially; most of it is error recovery stuff and + backtracking. + """ + + MEMO_RULE_FAILED = -2 + MEMO_RULE_UNKNOWN = -1 + + # copies from Token object for convenience in actions + DEFAULT_TOKEN_CHANNEL = DEFAULT_CHANNEL + + # for convenience in actions + HIDDEN = HIDDEN_CHANNEL + + # overridden by generated subclasses + tokenNames = None + + # The antlr_version attribute has been introduced in 3.1. If it is not + # overwritten in the generated recognizer, we assume a default of 3.0.1. + antlr_version = (3, 0, 1, 0) + antlr_version_str = "3.0.1" + + def __init__(self, state=None): + # Input stream of the recognizer. Must be initialized by a subclass. + self.input = None + + ## State of a lexer, parser, or tree parser are collected into a state + # object so the state can be shared. This sharing is needed to + # have one grammar import others and share same error variables + # and other state variables. It's a kind of explicit multiple + # inheritance via delegation of methods and shared state. + if state is None: + state = RecognizerSharedState() + self._state = state + + if self.antlr_version > runtime_version: + raise RuntimeError( + "ANTLR version mismatch: " + "The recognizer has been generated by V%s, but this runtime " + "is V%s. Please use the V%s runtime or higher." + % (self.antlr_version_str, + runtime_version_str, + self.antlr_version_str)) + elif (self.antlr_version < (3, 1, 0, 0) and + self.antlr_version != runtime_version): + # FIXME: make the runtime compatible with 3.0.1 codegen + # and remove this block. + raise RuntimeError( + "ANTLR version mismatch: " + "The recognizer has been generated by V%s, but this runtime " + "is V%s. Please use the V%s runtime." + % (self.antlr_version_str, + runtime_version_str, + self.antlr_version_str)) + + # this one only exists to shut up pylint :( + def setInput(self, input): + self.input = input + + + def reset(self): + """ + reset the parser's state; subclasses must rewinds the input stream + """ + + # wack everything related to error recovery + if self._state is None: + # no shared state work to do + return + + self._state.following = [] + self._state.errorRecovery = False + self._state.lastErrorIndex = -1 + self._state.syntaxErrors = 0 + # wack everything related to backtracking and memoization + self._state.backtracking = 0 + if self._state.ruleMemo is not None: + self._state.ruleMemo = {} + + + def match(self, input, ttype, follow): + """ + Match current input symbol against ttype. Attempt + single token insertion or deletion error recovery. If + that fails, throw MismatchedTokenException. + + To turn off single token insertion or deletion error + recovery, override recoverFromMismatchedToken() and have it + throw an exception. See TreeParser.recoverFromMismatchedToken(). + This way any error in a rule will cause an exception and + immediate exit from rule. Rule would recover by resynchronizing + to the set of symbols that can follow rule ref. + """ + + matchedSymbol = self.getCurrentInputSymbol(input) + if self.input.LA(1) == ttype: + self.input.consume() + self._state.errorRecovery = False + return matchedSymbol + + if self._state.backtracking > 0: + # FIXME: need to return matchedSymbol here as well. damn!! + raise BacktrackingFailed + + matchedSymbol = self.recoverFromMismatchedToken(input, ttype, follow) + return matchedSymbol + + + def matchAny(self, input): + """Match the wildcard: in a symbol""" + + self._state.errorRecovery = False + self.input.consume() + + + def mismatchIsUnwantedToken(self, input, ttype): + return input.LA(2) == ttype + + + def mismatchIsMissingToken(self, input, follow): + if follow is None: + # we have no information about the follow; we can only consume + # a single token and hope for the best + return False + + # compute what can follow this grammar element reference + if EOR_TOKEN_TYPE in follow: + viableTokensFollowingThisRule = self.computeContextSensitiveRuleFOLLOW() + follow = follow | viableTokensFollowingThisRule + + if len(self._state.following) > 0: + # remove EOR if we're not the start symbol + follow = follow - set([EOR_TOKEN_TYPE]) + + # if current token is consistent with what could come after set + # then we know we're missing a token; error recovery is free to + # "insert" the missing token + if input.LA(1) in follow or EOR_TOKEN_TYPE in follow: + return True + + return False + + + def reportError(self, e): + """Report a recognition problem. + + This method sets errorRecovery to indicate the parser is recovering + not parsing. Once in recovery mode, no errors are generated. + To get out of recovery mode, the parser must successfully match + a token (after a resync). So it will go: + + 1. error occurs + 2. enter recovery mode, report error + 3. consume until token found in resynch set + 4. try to resume parsing + 5. next match() will reset errorRecovery mode + + If you override, make sure to update syntaxErrors if you care about + that. + + """ + + # if we've already reported an error and have not matched a token + # yet successfully, don't report any errors. + if self._state.errorRecovery: + return + + self._state.syntaxErrors += 1 # don't count spurious + self._state.errorRecovery = True + + self.displayRecognitionError(self.tokenNames, e) + + + def displayRecognitionError(self, tokenNames, e): + hdr = self.getErrorHeader(e) + msg = self.getErrorMessage(e, tokenNames) + self.emitErrorMessage(hdr+" "+msg) + + + def getErrorMessage(self, e, tokenNames): + """ + What error message should be generated for the various + exception types? + + Not very object-oriented code, but I like having all error message + generation within one method rather than spread among all of the + exception classes. This also makes it much easier for the exception + handling because the exception classes do not have to have pointers back + to this object to access utility routines and so on. Also, changing + the message for an exception type would be difficult because you + would have to subclassing exception, but then somehow get ANTLR + to make those kinds of exception objects instead of the default. + This looks weird, but trust me--it makes the most sense in terms + of flexibility. + + For grammar debugging, you will want to override this to add + more information such as the stack frame with + getRuleInvocationStack(e, this.getClass().getName()) and, + for no viable alts, the decision description and state etc... + + Override this to change the message generated for one or more + exception types. + """ + + if isinstance(e, UnwantedTokenException): + tokenName = "" + if e.expecting == EOF: + tokenName = "EOF" + + else: + tokenName = self.tokenNames[e.expecting] + + msg = "extraneous input %s expecting %s" % ( + self.getTokenErrorDisplay(e.getUnexpectedToken()), + tokenName + ) + + elif isinstance(e, MissingTokenException): + tokenName = "" + if e.expecting == EOF: + tokenName = "EOF" + + else: + tokenName = self.tokenNames[e.expecting] + + msg = "missing %s at %s" % ( + tokenName, self.getTokenErrorDisplay(e.token) + ) + + elif isinstance(e, MismatchedTokenException): + tokenName = "" + if e.expecting == EOF: + tokenName = "EOF" + else: + tokenName = self.tokenNames[e.expecting] + + msg = "mismatched input " \ + + self.getTokenErrorDisplay(e.token) \ + + " expecting " \ + + tokenName + + elif isinstance(e, MismatchedTreeNodeException): + tokenName = "" + if e.expecting == EOF: + tokenName = "EOF" + else: + tokenName = self.tokenNames[e.expecting] + + msg = "mismatched tree node: %s expecting %s" \ + % (e.node, tokenName) + + elif isinstance(e, NoViableAltException): + msg = "no viable alternative at input " \ + + self.getTokenErrorDisplay(e.token) + + elif isinstance(e, EarlyExitException): + msg = "required (...)+ loop did not match anything at input " \ + + self.getTokenErrorDisplay(e.token) + + elif isinstance(e, MismatchedSetException): + msg = "mismatched input " \ + + self.getTokenErrorDisplay(e.token) \ + + " expecting set " \ + + repr(e.expecting) + + elif isinstance(e, MismatchedNotSetException): + msg = "mismatched input " \ + + self.getTokenErrorDisplay(e.token) \ + + " expecting set " \ + + repr(e.expecting) + + elif isinstance(e, FailedPredicateException): + msg = "rule " \ + + e.ruleName \ + + " failed predicate: {" \ + + e.predicateText \ + + "}?" + + else: + msg = str(e) + + return msg + + + def getNumberOfSyntaxErrors(self): + """ + Get number of recognition errors (lexer, parser, tree parser). Each + recognizer tracks its own number. So parser and lexer each have + separate count. Does not count the spurious errors found between + an error and next valid token match + + See also reportError() + """ + return self._state.syntaxErrors + + + def getErrorHeader(self, e): + """ + What is the error header, normally line/character position information? + """ + + return "line %d:%d" % (e.line, e.charPositionInLine) + + + def getTokenErrorDisplay(self, t): + """ + How should a token be displayed in an error message? The default + is to display just the text, but during development you might + want to have a lot of information spit out. Override in that case + to use t.toString() (which, for CommonToken, dumps everything about + the token). This is better than forcing you to override a method in + your token objects because you don't have to go modify your lexer + so that it creates a new Java type. + """ + + s = t.text + if s is None: + if t.type == EOF: + s = "" + else: + s = "<"+t.type+">" + + return repr(s) + + + def emitErrorMessage(self, msg): + """Override this method to change where error messages go""" + sys.stderr.write(msg + '\n') + + + def recover(self, input, re): + """ + Recover from an error found on the input stream. This is + for NoViableAlt and mismatched symbol exceptions. If you enable + single token insertion and deletion, this will usually not + handle mismatched symbol exceptions but there could be a mismatched + token that the match() routine could not recover from. + """ + + # PROBLEM? what if input stream is not the same as last time + # perhaps make lastErrorIndex a member of input + if self._state.lastErrorIndex == input.index(): + # uh oh, another error at same token index; must be a case + # where LT(1) is in the recovery token set so nothing is + # consumed; consume a single token so at least to prevent + # an infinite loop; this is a failsafe. + input.consume() + + self._state.lastErrorIndex = input.index() + followSet = self.computeErrorRecoverySet() + + self.beginResync() + self.consumeUntil(input, followSet) + self.endResync() + + + def beginResync(self): + """ + A hook to listen in on the token consumption during error recovery. + The DebugParser subclasses this to fire events to the listenter. + """ + + pass + + + def endResync(self): + """ + A hook to listen in on the token consumption during error recovery. + The DebugParser subclasses this to fire events to the listenter. + """ + + pass + + + def computeErrorRecoverySet(self): + """ + Compute the error recovery set for the current rule. During + rule invocation, the parser pushes the set of tokens that can + follow that rule reference on the stack; this amounts to + computing FIRST of what follows the rule reference in the + enclosing rule. This local follow set only includes tokens + from within the rule; i.e., the FIRST computation done by + ANTLR stops at the end of a rule. + + EXAMPLE + + When you find a "no viable alt exception", the input is not + consistent with any of the alternatives for rule r. The best + thing to do is to consume tokens until you see something that + can legally follow a call to r *or* any rule that called r. + You don't want the exact set of viable next tokens because the + input might just be missing a token--you might consume the + rest of the input looking for one of the missing tokens. + + Consider grammar: + + a : '[' b ']' + | '(' b ')' + ; + b : c '^' INT ; + c : ID + | INT + ; + + At each rule invocation, the set of tokens that could follow + that rule is pushed on a stack. Here are the various "local" + follow sets: + + FOLLOW(b1_in_a) = FIRST(']') = ']' + FOLLOW(b2_in_a) = FIRST(')') = ')' + FOLLOW(c_in_b) = FIRST('^') = '^' + + Upon erroneous input "[]", the call chain is + + a -> b -> c + + and, hence, the follow context stack is: + + depth local follow set after call to rule + 0 \ a (from main()) + 1 ']' b + 3 '^' c + + Notice that ')' is not included, because b would have to have + been called from a different context in rule a for ')' to be + included. + + For error recovery, we cannot consider FOLLOW(c) + (context-sensitive or otherwise). We need the combined set of + all context-sensitive FOLLOW sets--the set of all tokens that + could follow any reference in the call chain. We need to + resync to one of those tokens. Note that FOLLOW(c)='^' and if + we resync'd to that token, we'd consume until EOF. We need to + sync to context-sensitive FOLLOWs for a, b, and c: {']','^'}. + In this case, for input "[]", LA(1) is in this set so we would + not consume anything and after printing an error rule c would + return normally. It would not find the required '^' though. + At this point, it gets a mismatched token error and throws an + exception (since LA(1) is not in the viable following token + set). The rule exception handler tries to recover, but finds + the same recovery set and doesn't consume anything. Rule b + exits normally returning to rule a. Now it finds the ']' (and + with the successful match exits errorRecovery mode). + + So, you cna see that the parser walks up call chain looking + for the token that was a member of the recovery set. + + Errors are not generated in errorRecovery mode. + + ANTLR's error recovery mechanism is based upon original ideas: + + "Algorithms + Data Structures = Programs" by Niklaus Wirth + + and + + "A note on error recovery in recursive descent parsers": + http://portal.acm.org/citation.cfm?id=947902.947905 + + Later, Josef Grosch had some good ideas: + + "Efficient and Comfortable Error Recovery in Recursive Descent + Parsers": + ftp://www.cocolab.com/products/cocktail/doca4.ps/ell.ps.zip + + Like Grosch I implemented local FOLLOW sets that are combined + at run-time upon error to avoid overhead during parsing. + """ + + return self.combineFollows(False) + + + def computeContextSensitiveRuleFOLLOW(self): + """ + Compute the context-sensitive FOLLOW set for current rule. + This is set of token types that can follow a specific rule + reference given a specific call chain. You get the set of + viable tokens that can possibly come next (lookahead depth 1) + given the current call chain. Contrast this with the + definition of plain FOLLOW for rule r: + + FOLLOW(r)={x | S=>*alpha r beta in G and x in FIRST(beta)} + + where x in T* and alpha, beta in V*; T is set of terminals and + V is the set of terminals and nonterminals. In other words, + FOLLOW(r) is the set of all tokens that can possibly follow + references to r in *any* sentential form (context). At + runtime, however, we know precisely which context applies as + we have the call chain. We may compute the exact (rather + than covering superset) set of following tokens. + + For example, consider grammar: + + stat : ID '=' expr ';' // FOLLOW(stat)=={EOF} + | "return" expr '.' + ; + expr : atom ('+' atom)* ; // FOLLOW(expr)=={';','.',')'} + atom : INT // FOLLOW(atom)=={'+',')',';','.'} + | '(' expr ')' + ; + + The FOLLOW sets are all inclusive whereas context-sensitive + FOLLOW sets are precisely what could follow a rule reference. + For input input "i=(3);", here is the derivation: + + stat => ID '=' expr ';' + => ID '=' atom ('+' atom)* ';' + => ID '=' '(' expr ')' ('+' atom)* ';' + => ID '=' '(' atom ')' ('+' atom)* ';' + => ID '=' '(' INT ')' ('+' atom)* ';' + => ID '=' '(' INT ')' ';' + + At the "3" token, you'd have a call chain of + + stat -> expr -> atom -> expr -> atom + + What can follow that specific nested ref to atom? Exactly ')' + as you can see by looking at the derivation of this specific + input. Contrast this with the FOLLOW(atom)={'+',')',';','.'}. + + You want the exact viable token set when recovering from a + token mismatch. Upon token mismatch, if LA(1) is member of + the viable next token set, then you know there is most likely + a missing token in the input stream. "Insert" one by just not + throwing an exception. + """ + + return self.combineFollows(True) + + + def combineFollows(self, exact): + followSet = set() + for idx, localFollowSet in reversed(list(enumerate(self._state.following))): + followSet |= localFollowSet + if exact: + # can we see end of rule? + if EOR_TOKEN_TYPE in localFollowSet: + # Only leave EOR in set if at top (start rule); this lets + # us know if have to include follow(start rule); i.e., EOF + if idx > 0: + followSet.remove(EOR_TOKEN_TYPE) + + else: + # can't see end of rule, quit + break + + return followSet + + + def recoverFromMismatchedToken(self, input, ttype, follow): + """Attempt to recover from a single missing or extra token. + + EXTRA TOKEN + + LA(1) is not what we are looking for. If LA(2) has the right token, + however, then assume LA(1) is some extra spurious token. Delete it + and LA(2) as if we were doing a normal match(), which advances the + input. + + MISSING TOKEN + + If current token is consistent with what could come after + ttype then it is ok to 'insert' the missing token, else throw + exception For example, Input 'i=(3;' is clearly missing the + ')'. When the parser returns from the nested call to expr, it + will have call chain: + + stat -> expr -> atom + + and it will be trying to match the ')' at this point in the + derivation: + + => ID '=' '(' INT ')' ('+' atom)* ';' + ^ + match() will see that ';' doesn't match ')' and report a + mismatched token error. To recover, it sees that LA(1)==';' + is in the set of tokens that can follow the ')' token + reference in rule atom. It can assume that you forgot the ')'. + """ + + e = None + + # if next token is what we are looking for then "delete" this token + if self.mismatchIsUnwantedToken(input, ttype): + e = UnwantedTokenException(ttype, input) + + self.beginResync() + input.consume() # simply delete extra token + self.endResync() + + # report after consuming so AW sees the token in the exception + self.reportError(e) + + # we want to return the token we're actually matching + matchedSymbol = self.getCurrentInputSymbol(input) + + # move past ttype token as if all were ok + input.consume() + return matchedSymbol + + # can't recover with single token deletion, try insertion + if self.mismatchIsMissingToken(input, follow): + inserted = self.getMissingSymbol(input, e, ttype, follow) + e = MissingTokenException(ttype, input, inserted) + + # report after inserting so AW sees the token in the exception + self.reportError(e) + return inserted + + # even that didn't work; must throw the exception + e = MismatchedTokenException(ttype, input) + raise e + + + def recoverFromMismatchedSet(self, input, e, follow): + """Not currently used""" + + if self.mismatchIsMissingToken(input, follow): + self.reportError(e) + # we don't know how to conjure up a token for sets yet + return self.getMissingSymbol(input, e, INVALID_TOKEN_TYPE, follow) + + # TODO do single token deletion like above for Token mismatch + raise e + + + def getCurrentInputSymbol(self, input): + """ + Match needs to return the current input symbol, which gets put + into the label for the associated token ref; e.g., x=ID. Token + and tree parsers need to return different objects. Rather than test + for input stream type or change the IntStream interface, I use + a simple method to ask the recognizer to tell me what the current + input symbol is. + + This is ignored for lexers. + """ + + return None + + + def getMissingSymbol(self, input, e, expectedTokenType, follow): + """Conjure up a missing token during error recovery. + + The recognizer attempts to recover from single missing + symbols. But, actions might refer to that missing symbol. + For example, x=ID {f($x);}. The action clearly assumes + that there has been an identifier matched previously and that + $x points at that token. If that token is missing, but + the next token in the stream is what we want we assume that + this token is missing and we keep going. Because we + have to return some token to replace the missing token, + we have to conjure one up. This method gives the user control + over the tokens returned for missing tokens. Mostly, + you will want to create something special for identifier + tokens. For literals such as '{' and ',', the default + action in the parser or tree parser works. It simply creates + a CommonToken of the appropriate type. The text will be the token. + If you change what tokens must be created by the lexer, + override this method to create the appropriate tokens. + """ + + return None + + +## def recoverFromMissingElement(self, input, e, follow): +## """ +## This code is factored out from mismatched token and mismatched set +## recovery. It handles "single token insertion" error recovery for +## both. No tokens are consumed to recover from insertions. Return +## true if recovery was possible else return false. +## """ + +## if self.mismatchIsMissingToken(input, follow): +## self.reportError(e) +## return True + +## # nothing to do; throw exception +## return False + + + def consumeUntil(self, input, tokenTypes): + """ + Consume tokens until one matches the given token or token set + + tokenTypes can be a single token type or a set of token types + + """ + + if not isinstance(tokenTypes, (set, frozenset)): + tokenTypes = frozenset([tokenTypes]) + + ttype = input.LA(1) + while ttype != EOF and ttype not in tokenTypes: + input.consume() + ttype = input.LA(1) + + + def getRuleInvocationStack(self): + """ + Return List of the rules in your parser instance + leading up to a call to this method. You could override if + you want more details such as the file/line info of where + in the parser java code a rule is invoked. + + This is very useful for error messages and for context-sensitive + error recovery. + + You must be careful, if you subclass a generated recognizers. + The default implementation will only search the module of self + for rules, but the subclass will not contain any rules. + You probably want to override this method to look like + + def getRuleInvocationStack(self): + return self._getRuleInvocationStack(.__module__) + + where is the class of the generated recognizer, e.g. + the superclass of self. + """ + + return self._getRuleInvocationStack(self.__module__) + + + def _getRuleInvocationStack(cls, module): + """ + A more general version of getRuleInvocationStack where you can + pass in, for example, a RecognitionException to get it's rule + stack trace. This routine is shared with all recognizers, hence, + static. + + TODO: move to a utility class or something; weird having lexer call + this + """ + + # mmmhhh,... perhaps look at the first argument + # (f_locals[co_varnames[0]]?) and test if it's a (sub)class of + # requested recognizer... + + rules = [] + for frame in reversed(inspect.stack()): + code = frame[0].f_code + codeMod = inspect.getmodule(code) + if codeMod is None: + continue + + # skip frames not in requested module + if codeMod.__name__ != module: + continue + + # skip some unwanted names + if code.co_name in ('nextToken', ''): + continue + + rules.append(code.co_name) + + return rules + + _getRuleInvocationStack = classmethod(_getRuleInvocationStack) + + + def getBacktrackingLevel(self): + return self._state.backtracking + + def setBacktrackingLevel(self, n): + self._state.backtracking = n + + + def failed(self): + """Return whether or not a backtracking attempt failed.""" + + return self._state.failed + + + def getGrammarFileName(self): + """For debugging and other purposes, might want the grammar name. + + Have ANTLR generate an implementation for this method. + """ + + return self.grammarFileName + + + def getSourceName(self): + raise NotImplementedError + + + def toStrings(self, tokens): + """A convenience method for use most often with template rewrites. + + Convert a List to List + """ + + if tokens is None: + return None + + return [token.text for token in tokens] + + + def getRuleMemoization(self, ruleIndex, ruleStartIndex): + """ + Given a rule number and a start token index number, return + MEMO_RULE_UNKNOWN if the rule has not parsed input starting from + start index. If this rule has parsed input starting from the + start index before, then return where the rule stopped parsing. + It returns the index of the last token matched by the rule. + """ + + if ruleIndex not in self._state.ruleMemo: + self._state.ruleMemo[ruleIndex] = {} + + return self._state.ruleMemo[ruleIndex].get( + ruleStartIndex, self.MEMO_RULE_UNKNOWN + ) + + + def alreadyParsedRule(self, input, ruleIndex): + """ + Has this rule already parsed input at the current index in the + input stream? Return the stop token index or MEMO_RULE_UNKNOWN. + If we attempted but failed to parse properly before, return + MEMO_RULE_FAILED. + + This method has a side-effect: if we have seen this input for + this rule and successfully parsed before, then seek ahead to + 1 past the stop token matched for this rule last time. + """ + + stopIndex = self.getRuleMemoization(ruleIndex, input.index()) + if stopIndex == self.MEMO_RULE_UNKNOWN: + return False + + if stopIndex == self.MEMO_RULE_FAILED: + raise BacktrackingFailed + + else: + input.seek(stopIndex + 1) + + return True + + + def memoize(self, input, ruleIndex, ruleStartIndex, success): + """ + Record whether or not this rule parsed the input at this position + successfully. + """ + + if success: + stopTokenIndex = input.index() - 1 + else: + stopTokenIndex = self.MEMO_RULE_FAILED + + if ruleIndex in self._state.ruleMemo: + self._state.ruleMemo[ruleIndex][ruleStartIndex] = stopTokenIndex + + + def traceIn(self, ruleName, ruleIndex, inputSymbol): + sys.stdout.write("enter %s %s" % (ruleName, inputSymbol)) + + if self._state.backtracking > 0: + sys.stdout.write(" backtracking=%s" % self._state.backtracking) + + sys.stdout.write('\n') + + + def traceOut(self, ruleName, ruleIndex, inputSymbol): + sys.stdout.write("exit %s %s" % (ruleName, inputSymbol)) + + if self._state.backtracking > 0: + sys.stdout.write(" backtracking=%s" % self._state.backtracking) + + if self._state.failed: + sys.stdout.write(" failed") + else: + sys.stdout.write(" succeeded") + + sys.stdout.write('\n') + + +class TokenSource(object): + """ + @brief Abstract baseclass for token producers. + + A source of tokens must provide a sequence of tokens via nextToken() + and also must reveal it's source of characters; CommonToken's text is + computed from a CharStream; it only store indices into the char stream. + + Errors from the lexer are never passed to the parser. Either you want + to keep going or you do not upon token recognition error. If you do not + want to continue lexing then you do not want to continue parsing. Just + throw an exception not under RecognitionException and Java will naturally + toss you all the way out of the recognizers. If you want to continue + lexing then you should not throw an exception to the parser--it has already + requested a token. Keep lexing until you get a valid one. Just report + errors and keep going, looking for a valid token. + """ + + def nextToken(self): + """Return a Token object from your input stream (usually a CharStream). + + Do not fail/return upon lexing error; keep chewing on the characters + until you get a good one; errors are not passed through to the parser. + """ + + raise NotImplementedError + + + def __iter__(self): + """The TokenSource is an interator. + + The iteration will not include the final EOF token, see also the note + for the next() method. + + """ + + return self + + + def next(self): + """Return next token or raise StopIteration. + + Note that this will raise StopIteration when hitting the EOF token, + so EOF will not be part of the iteration. + + """ + + token = self.nextToken() + if token is None or token.type == EOF: + raise StopIteration + return token + + +class Lexer(BaseRecognizer, TokenSource): + """ + @brief Baseclass for generated lexer classes. + + A lexer is recognizer that draws input symbols from a character stream. + lexer grammars result in a subclass of this object. A Lexer object + uses simplified match() and error recovery mechanisms in the interest + of speed. + """ + + def __init__(self, input, state=None): + BaseRecognizer.__init__(self, state) + TokenSource.__init__(self) + + # Where is the lexer drawing characters from? + self.input = input + + + def reset(self): + BaseRecognizer.reset(self) # reset all recognizer state variables + + if self.input is not None: + # rewind the input + self.input.seek(0) + + if self._state is None: + # no shared state work to do + return + + # wack Lexer state variables + self._state.token = None + self._state.type = INVALID_TOKEN_TYPE + self._state.channel = DEFAULT_CHANNEL + self._state.tokenStartCharIndex = -1 + self._state.tokenStartLine = -1 + self._state.tokenStartCharPositionInLine = -1 + self._state.text = None + + + def nextToken(self): + """ + Return a token from this source; i.e., match a token on the char + stream. + """ + + while 1: + self._state.token = None + self._state.channel = DEFAULT_CHANNEL + self._state.tokenStartCharIndex = self.input.index() + self._state.tokenStartCharPositionInLine = self.input.charPositionInLine + self._state.tokenStartLine = self.input.line + self._state.text = None + if self.input.LA(1) == EOF: + return EOF_TOKEN + + try: + self.mTokens() + + if self._state.token is None: + self.emit() + + elif self._state.token == SKIP_TOKEN: + continue + + return self._state.token + + except NoViableAltException, re: + self.reportError(re) + self.recover(re) # throw out current char and try again + + except RecognitionException, re: + self.reportError(re) + # match() routine has already called recover() + + + def skip(self): + """ + Instruct the lexer to skip creating a token for current lexer rule + and look for another token. nextToken() knows to keep looking when + a lexer rule finishes with token set to SKIP_TOKEN. Recall that + if token==null at end of any token rule, it creates one for you + and emits it. + """ + + self._state.token = SKIP_TOKEN + + + def mTokens(self): + """This is the lexer entry point that sets instance var 'token'""" + + # abstract method + raise NotImplementedError + + + def setCharStream(self, input): + """Set the char stream and reset the lexer""" + self.input = None + self.reset() + self.input = input + + + def getSourceName(self): + return self.input.getSourceName() + + + def emit(self, token=None): + """ + The standard method called to automatically emit a token at the + outermost lexical rule. The token object should point into the + char buffer start..stop. If there is a text override in 'text', + use that to set the token's text. Override this method to emit + custom Token objects. + + If you are building trees, then you should also override + Parser or TreeParser.getMissingSymbol(). + """ + + if token is None: + token = CommonToken( + input=self.input, + type=self._state.type, + channel=self._state.channel, + start=self._state.tokenStartCharIndex, + stop=self.getCharIndex()-1 + ) + token.line = self._state.tokenStartLine + token.text = self._state.text + token.charPositionInLine = self._state.tokenStartCharPositionInLine + + self._state.token = token + + return token + + + def match(self, s): + if isinstance(s, basestring): + for c in s: + if self.input.LA(1) != ord(c): + if self._state.backtracking > 0: + raise BacktrackingFailed + + mte = MismatchedTokenException(c, self.input) + self.recover(mte) + raise mte + + self.input.consume() + + else: + if self.input.LA(1) != s: + if self._state.backtracking > 0: + raise BacktrackingFailed + + mte = MismatchedTokenException(unichr(s), self.input) + self.recover(mte) # don't really recover; just consume in lexer + raise mte + + self.input.consume() + + + def matchAny(self): + self.input.consume() + + + def matchRange(self, a, b): + if self.input.LA(1) < a or self.input.LA(1) > b: + if self._state.backtracking > 0: + raise BacktrackingFailed + + mre = MismatchedRangeException(unichr(a), unichr(b), self.input) + self.recover(mre) + raise mre + + self.input.consume() + + + def getLine(self): + return self.input.line + + + def getCharPositionInLine(self): + return self.input.charPositionInLine + + + def getCharIndex(self): + """What is the index of the current character of lookahead?""" + + return self.input.index() + + + def getText(self): + """ + Return the text matched so far for the current token or any + text override. + """ + if self._state.text is not None: + return self._state.text + + return self.input.substring( + self._state.tokenStartCharIndex, + self.getCharIndex()-1 + ) + + + def setText(self, text): + """ + Set the complete text of this token; it wipes any previous + changes to the text. + """ + self._state.text = text + + + text = property(getText, setText) + + + def reportError(self, e): + ## TODO: not thought about recovery in lexer yet. + + ## # if we've already reported an error and have not matched a token + ## # yet successfully, don't report any errors. + ## if self.errorRecovery: + ## #System.err.print("[SPURIOUS] "); + ## return; + ## + ## self.errorRecovery = True + + self.displayRecognitionError(self.tokenNames, e) + + + def getErrorMessage(self, e, tokenNames): + msg = None + + if isinstance(e, MismatchedTokenException): + msg = "mismatched character " \ + + self.getCharErrorDisplay(e.c) \ + + " expecting " \ + + self.getCharErrorDisplay(e.expecting) + + elif isinstance(e, NoViableAltException): + msg = "no viable alternative at character " \ + + self.getCharErrorDisplay(e.c) + + elif isinstance(e, EarlyExitException): + msg = "required (...)+ loop did not match anything at character " \ + + self.getCharErrorDisplay(e.c) + + elif isinstance(e, MismatchedNotSetException): + msg = "mismatched character " \ + + self.getCharErrorDisplay(e.c) \ + + " expecting set " \ + + repr(e.expecting) + + elif isinstance(e, MismatchedSetException): + msg = "mismatched character " \ + + self.getCharErrorDisplay(e.c) \ + + " expecting set " \ + + repr(e.expecting) + + elif isinstance(e, MismatchedRangeException): + msg = "mismatched character " \ + + self.getCharErrorDisplay(e.c) \ + + " expecting set " \ + + self.getCharErrorDisplay(e.a) \ + + ".." \ + + self.getCharErrorDisplay(e.b) + + else: + msg = BaseRecognizer.getErrorMessage(self, e, tokenNames) + + return msg + + + def getCharErrorDisplay(self, c): + if c == EOF: + c = '' + return repr(c) + + + def recover(self, re): + """ + Lexers can normally match any char in it's vocabulary after matching + a token, so do the easy thing and just kill a character and hope + it all works out. You can instead use the rule invocation stack + to do sophisticated error recovery if you are in a fragment rule. + """ + + self.input.consume() + + + def traceIn(self, ruleName, ruleIndex): + inputSymbol = "%s line=%d:%s" % (self.input.LT(1), + self.getLine(), + self.getCharPositionInLine() + ) + + BaseRecognizer.traceIn(self, ruleName, ruleIndex, inputSymbol) + + + def traceOut(self, ruleName, ruleIndex): + inputSymbol = "%s line=%d:%s" % (self.input.LT(1), + self.getLine(), + self.getCharPositionInLine() + ) + + BaseRecognizer.traceOut(self, ruleName, ruleIndex, inputSymbol) + + + +class Parser(BaseRecognizer): + """ + @brief Baseclass for generated parser classes. + """ + + def __init__(self, lexer, state=None): + BaseRecognizer.__init__(self, state) + + self.setTokenStream(lexer) + + + def reset(self): + BaseRecognizer.reset(self) # reset all recognizer state variables + if self.input is not None: + self.input.seek(0) # rewind the input + + + def getCurrentInputSymbol(self, input): + return input.LT(1) + + + def getMissingSymbol(self, input, e, expectedTokenType, follow): + if expectedTokenType == EOF: + tokenText = "" + else: + tokenText = "" + t = CommonToken(type=expectedTokenType, text=tokenText) + current = input.LT(1) + if current.type == EOF: + current = input.LT(-1) + + if current is not None: + t.line = current.line + t.charPositionInLine = current.charPositionInLine + t.channel = DEFAULT_CHANNEL + return t + + + def setTokenStream(self, input): + """Set the token stream and reset the parser""" + + self.input = None + self.reset() + self.input = input + + + def getTokenStream(self): + return self.input + + + def getSourceName(self): + return self.input.getSourceName() + + + def traceIn(self, ruleName, ruleIndex): + BaseRecognizer.traceIn(self, ruleName, ruleIndex, self.input.LT(1)) + + + def traceOut(self, ruleName, ruleIndex): + BaseRecognizer.traceOut(self, ruleName, ruleIndex, self.input.LT(1)) + + +class RuleReturnScope(object): + """ + Rules can return start/stop info as well as possible trees and templates. + """ + + def getStart(self): + """Return the start token or tree.""" + return None + + + def getStop(self): + """Return the stop token or tree.""" + return None + + + def getTree(self): + """Has a value potentially if output=AST.""" + return None + + + def getTemplate(self): + """Has a value potentially if output=template.""" + return None + + +class ParserRuleReturnScope(RuleReturnScope): + """ + Rules that return more than a single value must return an object + containing all the values. Besides the properties defined in + RuleLabelScope.predefinedRulePropertiesScope there may be user-defined + return values. This class simply defines the minimum properties that + are always defined and methods to access the others that might be + available depending on output option such as template and tree. + + Note text is not an actual property of the return value, it is computed + from start and stop using the input stream's toString() method. I + could add a ctor to this so that we can pass in and store the input + stream, but I'm not sure we want to do that. It would seem to be undefined + to get the .text property anyway if the rule matches tokens from multiple + input streams. + + I do not use getters for fields of objects that are used simply to + group values such as this aggregate. The getters/setters are there to + satisfy the superclass interface. + """ + + def __init__(self): + self.start = None + self.stop = None + + + def getStart(self): + return self.start + + + def getStop(self): + return self.stop + diff --git a/antlr-3.1.3/runtime/Python/antlr3/streams.py b/antlr-3.1.3/runtime/Python/antlr3/streams.py new file mode 100644 index 0000000..c9b6560 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/antlr3/streams.py @@ -0,0 +1,1452 @@ +"""ANTLR3 runtime package""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +import codecs +from StringIO import StringIO + +from antlr3.constants import DEFAULT_CHANNEL, EOF +from antlr3.tokens import Token, EOF_TOKEN + + +############################################################################ +# +# basic interfaces +# IntStream +# +- CharStream +# \- TokenStream +# +# subclasses must implemented all methods +# +############################################################################ + +class IntStream(object): + """ + @brief Base interface for streams of integer values. + + A simple stream of integers used when all I care about is the char + or token type sequence (such as interpretation). + """ + + def consume(self): + raise NotImplementedError + + + def LA(self, i): + """Get int at current input pointer + i ahead where i=1 is next int. + + Negative indexes are allowed. LA(-1) is previous token (token + just matched). LA(-i) where i is before first token should + yield -1, invalid char / EOF. + """ + + raise NotImplementedError + + + def mark(self): + """ + Tell the stream to start buffering if it hasn't already. Return + current input position, index(), or some other marker so that + when passed to rewind() you get back to the same spot. + rewind(mark()) should not affect the input cursor. The Lexer + track line/col info as well as input index so its markers are + not pure input indexes. Same for tree node streams. + """ + + raise NotImplementedError + + + def index(self): + """ + Return the current input symbol index 0..n where n indicates the + last symbol has been read. The index is the symbol about to be + read not the most recently read symbol. + """ + + raise NotImplementedError + + + def rewind(self, marker=None): + """ + Reset the stream so that next call to index would return marker. + The marker will usually be index() but it doesn't have to be. It's + just a marker to indicate what state the stream was in. This is + essentially calling release() and seek(). If there are markers + created after this marker argument, this routine must unroll them + like a stack. Assume the state the stream was in when this marker + was created. + + If marker is None: + Rewind to the input position of the last marker. + Used currently only after a cyclic DFA and just + before starting a sem/syn predicate to get the + input position back to the start of the decision. + Do not "pop" the marker off the state. mark(i) + and rewind(i) should balance still. It is + like invoking rewind(last marker) but it should not "pop" + the marker off. It's like seek(last marker's input position). + """ + + raise NotImplementedError + + + def release(self, marker=None): + """ + You may want to commit to a backtrack but don't want to force the + stream to keep bookkeeping objects around for a marker that is + no longer necessary. This will have the same behavior as + rewind() except it releases resources without the backward seek. + This must throw away resources for all markers back to the marker + argument. So if you're nested 5 levels of mark(), and then release(2) + you have to release resources for depths 2..5. + """ + + raise NotImplementedError + + + def seek(self, index): + """ + Set the input cursor to the position indicated by index. This is + normally used to seek ahead in the input stream. No buffering is + required to do this unless you know your stream will use seek to + move backwards such as when backtracking. + + This is different from rewind in its multi-directional + requirement and in that its argument is strictly an input cursor + (index). + + For char streams, seeking forward must update the stream state such + as line number. For seeking backwards, you will be presumably + backtracking using the mark/rewind mechanism that restores state and + so this method does not need to update state when seeking backwards. + + Currently, this method is only used for efficient backtracking using + memoization, but in the future it may be used for incremental parsing. + + The index is 0..n-1. A seek to position i means that LA(1) will + return the ith symbol. So, seeking to 0 means LA(1) will return the + first element in the stream. + """ + + raise NotImplementedError + + + def size(self): + """ + Only makes sense for streams that buffer everything up probably, but + might be useful to display the entire stream or for testing. This + value includes a single EOF. + """ + + raise NotImplementedError + + + def getSourceName(self): + """ + Where are you getting symbols from? Normally, implementations will + pass the buck all the way to the lexer who can ask its input stream + for the file name or whatever. + """ + + raise NotImplementedError + + +class CharStream(IntStream): + """ + @brief A source of characters for an ANTLR lexer. + + This is an abstract class that must be implemented by a subclass. + + """ + + # pylint does not realize that this is an interface, too + #pylint: disable-msg=W0223 + + EOF = -1 + + + def substring(self, start, stop): + """ + For infinite streams, you don't need this; primarily I'm providing + a useful interface for action code. Just make sure actions don't + use this on streams that don't support it. + """ + + raise NotImplementedError + + + def LT(self, i): + """ + Get the ith character of lookahead. This is the same usually as + LA(i). This will be used for labels in the generated + lexer code. I'd prefer to return a char here type-wise, but it's + probably better to be 32-bit clean and be consistent with LA. + """ + + raise NotImplementedError + + + def getLine(self): + """ANTLR tracks the line information automatically""" + + raise NotImplementedError + + + def setLine(self, line): + """ + Because this stream can rewind, we need to be able to reset the line + """ + + raise NotImplementedError + + + def getCharPositionInLine(self): + """ + The index of the character relative to the beginning of the line 0..n-1 + """ + + raise NotImplementedError + + + def setCharPositionInLine(self, pos): + raise NotImplementedError + + +class TokenStream(IntStream): + """ + + @brief A stream of tokens accessing tokens from a TokenSource + + This is an abstract class that must be implemented by a subclass. + + """ + + # pylint does not realize that this is an interface, too + #pylint: disable-msg=W0223 + + def LT(self, k): + """ + Get Token at current input pointer + i ahead where i=1 is next Token. + i<0 indicates tokens in the past. So -1 is previous token and -2 is + two tokens ago. LT(0) is undefined. For i>=n, return Token.EOFToken. + Return null for LT(0) and any index that results in an absolute address + that is negative. + """ + + raise NotImplementedError + + + def get(self, i): + """ + Get a token at an absolute index i; 0..n-1. This is really only + needed for profiling and debugging and token stream rewriting. + If you don't want to buffer up tokens, then this method makes no + sense for you. Naturally you can't use the rewrite stream feature. + I believe DebugTokenStream can easily be altered to not use + this method, removing the dependency. + """ + + raise NotImplementedError + + + def getTokenSource(self): + """ + Where is this stream pulling tokens from? This is not the name, but + the object that provides Token objects. + """ + + raise NotImplementedError + + + def toString(self, start=None, stop=None): + """ + Return the text of all tokens from start to stop, inclusive. + If the stream does not buffer all the tokens then it can just + return "" or null; Users should not access $ruleLabel.text in + an action of course in that case. + + Because the user is not required to use a token with an index stored + in it, we must provide a means for two token objects themselves to + indicate the start/end location. Most often this will just delegate + to the other toString(int,int). This is also parallel with + the TreeNodeStream.toString(Object,Object). + """ + + raise NotImplementedError + + +############################################################################ +# +# character streams for use in lexers +# CharStream +# \- ANTLRStringStream +# +############################################################################ + + +class ANTLRStringStream(CharStream): + """ + @brief CharStream that pull data from a unicode string. + + A pretty quick CharStream that pulls all data from an array + directly. Every method call counts in the lexer. + + """ + + + def __init__(self, data): + """ + @param data This should be a unicode string holding the data you want + to parse. If you pass in a byte string, the Lexer will choke on + non-ascii data. + + """ + + CharStream.__init__(self) + + # The data being scanned + self.strdata = unicode(data, 'utf8') + self.data = [ord(c) for c in self.strdata] + + # How many characters are actually in the buffer + self.n = len(data) + + # 0..n-1 index into string of next char + self.p = 0 + + # line number 1..n within the input + self.line = 1 + + # The index of the character relative to the beginning of the + # line 0..n-1 + self.charPositionInLine = 0 + + # A list of CharStreamState objects that tracks the stream state + # values line, charPositionInLine, and p that can change as you + # move through the input stream. Indexed from 0..markDepth-1. + self._markers = [ ] + self.lastMarker = None + self.markDepth = 0 + + # What is name or source of this char stream? + self.name = None + + + def reset(self): + """ + Reset the stream so that it's in the same state it was + when the object was created *except* the data array is not + touched. + """ + + self.p = 0 + self.line = 1 + self.charPositionInLine = 0 + self._markers = [ ] + + + def consume(self): + try: + if self.data[self.p] == 10: # \n + self.line += 1 + self.charPositionInLine = 0 + else: + self.charPositionInLine += 1 + + self.p += 1 + + except IndexError: + # happend when we reached EOF and self.data[self.p] fails + # just do nothing + pass + + + + def LA(self, i): + if i == 0: + return 0 # undefined + + if i < 0: + i += 1 # e.g., translate LA(-1) to use offset i=0; then data[p+0-1] + + try: + return self.data[self.p+i-1] + except IndexError: + return EOF + + + + def LT(self, i): + if i == 0: + return 0 # undefined + + if i < 0: + i += 1 # e.g., translate LA(-1) to use offset i=0; then data[p+0-1] + + try: + return self.strdata[self.p+i-1] + except IndexError: + return EOF + + + def index(self): + """ + Return the current input symbol index 0..n where n indicates the + last symbol has been read. The index is the index of char to + be returned from LA(1). + """ + + return self.p + + + def size(self): + return self.n + + + def mark(self): + state = (self.p, self.line, self.charPositionInLine) + try: + self._markers[self.markDepth] = state + except IndexError: + self._markers.append(state) + self.markDepth += 1 + + self.lastMarker = self.markDepth + + return self.lastMarker + + + def rewind(self, marker=None): + if marker is None: + marker = self.lastMarker + + p, line, charPositionInLine = self._markers[marker-1] + + self.seek(p) + self.line = line + self.charPositionInLine = charPositionInLine + self.release(marker) + + + def release(self, marker=None): + if marker is None: + marker = self.lastMarker + + self.markDepth = marker-1 + + + def seek(self, index): + """ + consume() ahead until p==index; can't just set p=index as we must + update line and charPositionInLine. + """ + + if index <= self.p: + self.p = index # just jump; don't update stream state (line, ...) + return + + # seek forward, consume until p hits index + while self.p < index: + self.consume() + + + def substring(self, start, stop): + return self.strdata[start:stop+1] + + + def getLine(self): + """Using setter/getter methods is deprecated. Use o.line instead.""" + return self.line + + + def getCharPositionInLine(self): + """ + Using setter/getter methods is deprecated. Use o.charPositionInLine + instead. + """ + return self.charPositionInLine + + + def setLine(self, line): + """Using setter/getter methods is deprecated. Use o.line instead.""" + self.line = line + + + def setCharPositionInLine(self, pos): + """ + Using setter/getter methods is deprecated. Use o.charPositionInLine + instead. + """ + self.charPositionInLine = pos + + + def getSourceName(self): + return self.name + + +class ANTLRFileStream(ANTLRStringStream): + """ + @brief CharStream that opens a file to read the data. + + This is a char buffer stream that is loaded from a file + all at once when you construct the object. + """ + + def __init__(self, fileName, encoding=None): + """ + @param fileName The path to the file to be opened. The file will be + opened with mode 'rb'. + + @param encoding If you set the optional encoding argument, then the + data will be decoded on the fly. + + """ + + self.fileName = fileName + + fp = codecs.open(fileName, 'rb', encoding) + try: + data = fp.read() + finally: + fp.close() + + ANTLRStringStream.__init__(self, data) + + + def getSourceName(self): + """Deprecated, access o.fileName directly.""" + + return self.fileName + + +class ANTLRInputStream(ANTLRStringStream): + """ + @brief CharStream that reads data from a file-like object. + + This is a char buffer stream that is loaded from a file like object + all at once when you construct the object. + + All input is consumed from the file, but it is not closed. + """ + + def __init__(self, file, encoding=None): + """ + @param file A file-like object holding your input. Only the read() + method must be implemented. + + @param encoding If you set the optional encoding argument, then the + data will be decoded on the fly. + + """ + + if encoding is not None: + # wrap input in a decoding reader + reader = codecs.lookup(encoding)[2] + file = reader(file) + + data = file.read() + + ANTLRStringStream.__init__(self, data) + + +# I guess the ANTLR prefix exists only to avoid a name clash with some Java +# mumbojumbo. A plain "StringStream" looks better to me, which should be +# the preferred name in Python. +StringStream = ANTLRStringStream +FileStream = ANTLRFileStream +InputStream = ANTLRInputStream + + +############################################################################ +# +# Token streams +# TokenStream +# +- CommonTokenStream +# \- TokenRewriteStream +# +############################################################################ + + +class CommonTokenStream(TokenStream): + """ + @brief The most common stream of tokens + + The most common stream of tokens is one where every token is buffered up + and tokens are prefiltered for a certain channel (the parser will only + see these tokens and cannot change the filter channel number during the + parse). + """ + + def __init__(self, tokenSource=None, channel=DEFAULT_CHANNEL): + """ + @param tokenSource A TokenSource instance (usually a Lexer) to pull + the tokens from. + + @param channel Skip tokens on any channel but this one; this is how we + skip whitespace... + + """ + + TokenStream.__init__(self) + + self.tokenSource = tokenSource + + # Record every single token pulled from the source so we can reproduce + # chunks of it later. + self.tokens = [] + + # Map to override some Tokens' channel numbers + self.channelOverrideMap = {} + + # Set; discard any tokens with this type + self.discardSet = set() + + # Skip tokens on any channel but this one; this is how we skip whitespace... + self.channel = channel + + # By default, track all incoming tokens + self.discardOffChannelTokens = False + + # The index into the tokens list of the current token (next token + # to consume). p==-1 indicates that the tokens list is empty + self.p = -1 + + # Remember last marked position + self.lastMarker = None + + + def setTokenSource(self, tokenSource): + """Reset this token stream by setting its token source.""" + + self.tokenSource = tokenSource + self.tokens = [] + self.p = -1 + self.channel = DEFAULT_CHANNEL + + + def reset(self): + self.p = 0 + self.lastMarker = None + + + def fillBuffer(self): + """ + Load all tokens from the token source and put in tokens. + This is done upon first LT request because you might want to + set some token type / channel overrides before filling buffer. + """ + + + index = 0 + t = self.tokenSource.nextToken() + while t is not None and t.type != EOF: + discard = False + + if self.discardSet is not None and t.type in self.discardSet: + discard = True + + elif self.discardOffChannelTokens and t.channel != self.channel: + discard = True + + # is there a channel override for token type? + try: + overrideChannel = self.channelOverrideMap[t.type] + + except KeyError: + # no override for this type + pass + + else: + if overrideChannel == self.channel: + t.channel = overrideChannel + else: + discard = True + + if not discard: + t.index = index + self.tokens.append(t) + index += 1 + + t = self.tokenSource.nextToken() + + # leave p pointing at first token on channel + self.p = 0 + self.p = self.skipOffTokenChannels(self.p) + + + def consume(self): + """ + Move the input pointer to the next incoming token. The stream + must become active with LT(1) available. consume() simply + moves the input pointer so that LT(1) points at the next + input symbol. Consume at least one token. + + Walk past any token not on the channel the parser is listening to. + """ + + if self.p < len(self.tokens): + self.p += 1 + + self.p = self.skipOffTokenChannels(self.p) # leave p on valid token + + + def skipOffTokenChannels(self, i): + """ + Given a starting index, return the index of the first on-channel + token. + """ + + try: + while self.tokens[i].channel != self.channel: + i += 1 + except IndexError: + # hit the end of token stream + pass + + return i + + + def skipOffTokenChannelsReverse(self, i): + while i >= 0 and self.tokens[i].channel != self.channel: + i -= 1 + + return i + + + def setTokenTypeChannel(self, ttype, channel): + """ + A simple filter mechanism whereby you can tell this token stream + to force all tokens of type ttype to be on channel. For example, + when interpreting, we cannot exec actions so we need to tell + the stream to force all WS and NEWLINE to be a different, ignored + channel. + """ + + self.channelOverrideMap[ttype] = channel + + + def discardTokenType(self, ttype): + self.discardSet.add(ttype) + + + def getTokens(self, start=None, stop=None, types=None): + """ + Given a start and stop index, return a list of all tokens in + the token type set. Return None if no tokens were found. This + method looks at both on and off channel tokens. + """ + + if self.p == -1: + self.fillBuffer() + + if stop is None or stop >= len(self.tokens): + stop = len(self.tokens) - 1 + + if start is None or stop < 0: + start = 0 + + if start > stop: + return None + + if isinstance(types, (int, long)): + # called with a single type, wrap into set + types = set([types]) + + filteredTokens = [ + token for token in self.tokens[start:stop] + if types is None or token.type in types + ] + + if len(filteredTokens) == 0: + return None + + return filteredTokens + + + def LT(self, k): + """ + Get the ith token from the current position 1..n where k=1 is the + first symbol of lookahead. + """ + + if self.p == -1: + self.fillBuffer() + + if k == 0: + return None + + if k < 0: + return self.LB(-k) + + i = self.p + n = 1 + # find k good tokens + while n < k: + # skip off-channel tokens + i = self.skipOffTokenChannels(i+1) # leave p on valid token + n += 1 + + try: + return self.tokens[i] + except IndexError: + return EOF_TOKEN + + + def LB(self, k): + """Look backwards k tokens on-channel tokens""" + + if self.p == -1: + self.fillBuffer() + + if k == 0: + return None + + if self.p - k < 0: + return None + + i = self.p + n = 1 + # find k good tokens looking backwards + while n <= k: + # skip off-channel tokens + i = self.skipOffTokenChannelsReverse(i-1) # leave p on valid token + n += 1 + + if i < 0: + return None + + return self.tokens[i] + + + def get(self, i): + """ + Return absolute token i; ignore which channel the tokens are on; + that is, count all tokens not just on-channel tokens. + """ + + return self.tokens[i] + + + def LA(self, i): + return self.LT(i).type + + + def mark(self): + self.lastMarker = self.index() + return self.lastMarker + + + def release(self, marker=None): + # no resources to release + pass + + + def size(self): + return len(self.tokens) + + + def index(self): + return self.p + + + def rewind(self, marker=None): + if marker is None: + marker = self.lastMarker + + self.seek(marker) + + + def seek(self, index): + self.p = index + + + def getTokenSource(self): + return self.tokenSource + + + def getSourceName(self): + return self.tokenSource.getSourceName() + + + def toString(self, start=None, stop=None): + if self.p == -1: + self.fillBuffer() + + if start is None: + start = 0 + elif not isinstance(start, int): + start = start.index + + if stop is None: + stop = len(self.tokens) - 1 + elif not isinstance(stop, int): + stop = stop.index + + if stop >= len(self.tokens): + stop = len(self.tokens) - 1 + + return ''.join([t.text for t in self.tokens[start:stop+1]]) + + +class RewriteOperation(object): + """@brief Internal helper class.""" + + def __init__(self, stream, index, text): + self.stream = stream + self.index = index + self.text = text + + def execute(self, buf): + """Execute the rewrite operation by possibly adding to the buffer. + Return the index of the next token to operate on. + """ + + return self.index + + def toString(self): + opName = self.__class__.__name__ + return '<%s@%d:"%s">' % (opName, self.index, self.text) + + __str__ = toString + __repr__ = toString + + +class InsertBeforeOp(RewriteOperation): + """@brief Internal helper class.""" + + def execute(self, buf): + buf.write(self.text) + buf.write(self.stream.tokens[self.index].text) + return self.index + 1 + + +class ReplaceOp(RewriteOperation): + """ + @brief Internal helper class. + + I'm going to try replacing range from x..y with (y-x)+1 ReplaceOp + instructions. + """ + + def __init__(self, stream, first, last, text): + RewriteOperation.__init__(self, stream, first, text) + self.lastIndex = last + + + def execute(self, buf): + if self.text is not None: + buf.write(self.text) + + return self.lastIndex + 1 + + + def toString(self): + return '' % ( + self.index, self.lastIndex, self.text) + + __str__ = toString + __repr__ = toString + + +class DeleteOp(ReplaceOp): + """ + @brief Internal helper class. + """ + + def __init__(self, stream, first, last): + ReplaceOp.__init__(self, stream, first, last, None) + + + def toString(self): + return '' % (self.index, self.lastIndex) + + __str__ = toString + __repr__ = toString + + +class TokenRewriteStream(CommonTokenStream): + """@brief CommonTokenStream that can be modified. + + Useful for dumping out the input stream after doing some + augmentation or other manipulations. + + You can insert stuff, replace, and delete chunks. Note that the + operations are done lazily--only if you convert the buffer to a + String. This is very efficient because you are not moving data around + all the time. As the buffer of tokens is converted to strings, the + toString() method(s) check to see if there is an operation at the + current index. If so, the operation is done and then normal String + rendering continues on the buffer. This is like having multiple Turing + machine instruction streams (programs) operating on a single input tape. :) + + Since the operations are done lazily at toString-time, operations do not + screw up the token index values. That is, an insert operation at token + index i does not change the index values for tokens i+1..n-1. + + Because operations never actually alter the buffer, you may always get + the original token stream back without undoing anything. Since + the instructions are queued up, you can easily simulate transactions and + roll back any changes if there is an error just by removing instructions. + For example, + + CharStream input = new ANTLRFileStream("input"); + TLexer lex = new TLexer(input); + TokenRewriteStream tokens = new TokenRewriteStream(lex); + T parser = new T(tokens); + parser.startRule(); + + Then in the rules, you can execute + Token t,u; + ... + input.insertAfter(t, "text to put after t");} + input.insertAfter(u, "text after u");} + System.out.println(tokens.toString()); + + Actually, you have to cast the 'input' to a TokenRewriteStream. :( + + You can also have multiple "instruction streams" and get multiple + rewrites from a single pass over the input. Just name the instruction + streams and use that name again when printing the buffer. This could be + useful for generating a C file and also its header file--all from the + same buffer: + + tokens.insertAfter("pass1", t, "text to put after t");} + tokens.insertAfter("pass2", u, "text after u");} + System.out.println(tokens.toString("pass1")); + System.out.println(tokens.toString("pass2")); + + If you don't use named rewrite streams, a "default" stream is used as + the first example shows. + """ + + DEFAULT_PROGRAM_NAME = "default" + MIN_TOKEN_INDEX = 0 + + def __init__(self, tokenSource=None, channel=DEFAULT_CHANNEL): + CommonTokenStream.__init__(self, tokenSource, channel) + + # You may have multiple, named streams of rewrite operations. + # I'm calling these things "programs." + # Maps String (name) -> rewrite (List) + self.programs = {} + self.programs[self.DEFAULT_PROGRAM_NAME] = [] + + # Map String (program name) -> Integer index + self.lastRewriteTokenIndexes = {} + + + def rollback(self, *args): + """ + Rollback the instruction stream for a program so that + the indicated instruction (via instructionIndex) is no + longer in the stream. UNTESTED! + """ + + if len(args) == 2: + programName = args[0] + instructionIndex = args[1] + elif len(args) == 1: + programName = self.DEFAULT_PROGRAM_NAME + instructionIndex = args[0] + else: + raise TypeError("Invalid arguments") + + p = self.programs.get(programName, None) + if p is not None: + self.programs[programName] = ( + p[self.MIN_TOKEN_INDEX:instructionIndex]) + + + def deleteProgram(self, programName=DEFAULT_PROGRAM_NAME): + """Reset the program so that no instructions exist""" + + self.rollback(programName, self.MIN_TOKEN_INDEX) + + + def insertAfter(self, *args): + if len(args) == 2: + programName = self.DEFAULT_PROGRAM_NAME + index = args[0] + text = args[1] + + elif len(args) == 3: + programName = args[0] + index = args[1] + text = args[2] + + else: + raise TypeError("Invalid arguments") + + if isinstance(index, Token): + # index is a Token, grap the stream index from it + index = index.index + + # to insert after, just insert before next index (even if past end) + self.insertBefore(programName, index+1, text) + + + def insertBefore(self, *args): + if len(args) == 2: + programName = self.DEFAULT_PROGRAM_NAME + index = args[0] + text = args[1] + + elif len(args) == 3: + programName = args[0] + index = args[1] + text = args[2] + + else: + raise TypeError("Invalid arguments") + + if isinstance(index, Token): + # index is a Token, grap the stream index from it + index = index.index + + op = InsertBeforeOp(self, index, text) + rewrites = self.getProgram(programName) + rewrites.append(op) + + + def replace(self, *args): + if len(args) == 2: + programName = self.DEFAULT_PROGRAM_NAME + first = args[0] + last = args[0] + text = args[1] + + elif len(args) == 3: + programName = self.DEFAULT_PROGRAM_NAME + first = args[0] + last = args[1] + text = args[2] + + elif len(args) == 4: + programName = args[0] + first = args[1] + last = args[2] + text = args[3] + + else: + raise TypeError("Invalid arguments") + + if isinstance(first, Token): + # first is a Token, grap the stream index from it + first = first.index + + if isinstance(last, Token): + # last is a Token, grap the stream index from it + last = last.index + + if first > last or first < 0 or last < 0 or last >= len(self.tokens): + raise ValueError( + "replace: range invalid: "+first+".."+last+ + "(size="+len(self.tokens)+")") + + op = ReplaceOp(self, first, last, text) + rewrites = self.getProgram(programName) + rewrites.append(op) + + + def delete(self, *args): + self.replace(*(list(args) + [None])) + + + def getLastRewriteTokenIndex(self, programName=DEFAULT_PROGRAM_NAME): + return self.lastRewriteTokenIndexes.get(programName, -1) + + + def setLastRewriteTokenIndex(self, programName, i): + self.lastRewriteTokenIndexes[programName] = i + + + def getProgram(self, name): + p = self.programs.get(name, None) + if p is None: + p = self.initializeProgram(name) + + return p + + + def initializeProgram(self, name): + p = [] + self.programs[name] = p + return p + + + def toOriginalString(self, start=None, end=None): + if start is None: + start = self.MIN_TOKEN_INDEX + if end is None: + end = self.size() - 1 + + buf = StringIO() + i = start + while i >= self.MIN_TOKEN_INDEX and i <= end and i < len(self.tokens): + buf.write(self.get(i).text) + i += 1 + + return buf.getvalue() + + + def toString(self, *args): + if len(args) == 0: + programName = self.DEFAULT_PROGRAM_NAME + start = self.MIN_TOKEN_INDEX + end = self.size() - 1 + + elif len(args) == 1: + programName = args[0] + start = self.MIN_TOKEN_INDEX + end = self.size() - 1 + + elif len(args) == 2: + programName = self.DEFAULT_PROGRAM_NAME + start = args[0] + end = args[1] + + if start is None: + start = self.MIN_TOKEN_INDEX + elif not isinstance(start, int): + start = start.index + + if end is None: + end = len(self.tokens) - 1 + elif not isinstance(end, int): + end = end.index + + # ensure start/end are in range + if end >= len(self.tokens): + end = len(self.tokens) - 1 + + if start < 0: + start = 0 + + rewrites = self.programs.get(programName) + if rewrites is None or len(rewrites) == 0: + # no instructions to execute + return self.toOriginalString(start, end) + + buf = StringIO() + + # First, optimize instruction stream + indexToOp = self.reduceToSingleOperationPerIndex(rewrites) + + # Walk buffer, executing instructions and emitting tokens + i = start + while i <= end and i < len(self.tokens): + op = indexToOp.get(i) + # remove so any left have index size-1 + try: + del indexToOp[i] + except KeyError: + pass + + t = self.tokens[i] + if op is None: + # no operation at that index, just dump token + buf.write(t.text) + i += 1 # move to next token + + else: + i = op.execute(buf) # execute operation and skip + + # include stuff after end if it's last index in buffer + # So, if they did an insertAfter(lastValidIndex, "foo"), include + # foo if end==lastValidIndex. + if end == len(self.tokens) - 1: + # Scan any remaining operations after last token + # should be included (they will be inserts). + for i in sorted(indexToOp.keys()): + op = indexToOp[i] + if op.index >= len(self.tokens)-1: + buf.write(op.text) + + return buf.getvalue() + + __str__ = toString + + + def reduceToSingleOperationPerIndex(self, rewrites): + """ + We need to combine operations and report invalid operations (like + overlapping replaces that are not completed nested). Inserts to + same index need to be combined etc... Here are the cases: + + I.i.u I.j.v leave alone, nonoverlapping + I.i.u I.i.v combine: Iivu + + R.i-j.u R.x-y.v | i-j in x-y delete first R + R.i-j.u R.i-j.v delete first R + R.i-j.u R.x-y.v | x-y in i-j ERROR + R.i-j.u R.x-y.v | boundaries overlap ERROR + + I.i.u R.x-y.v | i in x-y delete I + I.i.u R.x-y.v | i not in x-y leave alone, nonoverlapping + R.x-y.v I.i.u | i in x-y ERROR + R.x-y.v I.x.u R.x-y.uv (combine, delete I) + R.x-y.v I.i.u | i not in x-y leave alone, nonoverlapping + + I.i.u = insert u before op @ index i + R.x-y.u = replace x-y indexed tokens with u + + First we need to examine replaces. For any replace op: + + 1. wipe out any insertions before op within that range. + 2. Drop any replace op before that is contained completely within + that range. + 3. Throw exception upon boundary overlap with any previous replace. + + Then we can deal with inserts: + + 1. for any inserts to same index, combine even if not adjacent. + 2. for any prior replace with same left boundary, combine this + insert with replace and delete this replace. + 3. throw exception if index in same range as previous replace + + Don't actually delete; make op null in list. Easier to walk list. + Later we can throw as we add to index -> op map. + + Note that I.2 R.2-2 will wipe out I.2 even though, technically, the + inserted stuff would be before the replace range. But, if you + add tokens in front of a method body '{' and then delete the method + body, I think the stuff before the '{' you added should disappear too. + + Return a map from token index to operation. + """ + + # WALK REPLACES + for i, rop in enumerate(rewrites): + if rop is None: + continue + + if not isinstance(rop, ReplaceOp): + continue + + # Wipe prior inserts within range + for j, iop in self.getKindOfOps(rewrites, InsertBeforeOp, i): + if iop.index >= rop.index and iop.index <= rop.lastIndex: + rewrites[j] = None # delete insert as it's a no-op. + + # Drop any prior replaces contained within + for j, prevRop in self.getKindOfOps(rewrites, ReplaceOp, i): + if (prevRop.index >= rop.index + and prevRop.lastIndex <= rop.lastIndex): + rewrites[j] = None # delete replace as it's a no-op. + continue + + # throw exception unless disjoint or identical + disjoint = (prevRop.lastIndex < rop.index + or prevRop.index > rop.lastIndex) + same = (prevRop.index == rop.index + and prevRop.lastIndex == rop.lastIndex) + if not disjoint and not same: + raise ValueError( + "replace op boundaries of %s overlap with previous %s" + % (rop, prevRop)) + + # WALK INSERTS + for i, iop in enumerate(rewrites): + if iop is None: + continue + + if not isinstance(iop, InsertBeforeOp): + continue + + # combine current insert with prior if any at same index + for j, prevIop in self.getKindOfOps(rewrites, InsertBeforeOp, i): + if prevIop.index == iop.index: # combine objects + # convert to strings...we're in process of toString'ing + # whole token buffer so no lazy eval issue with any + # templates + iop.text = self.catOpText(iop.text, prevIop.text) + rewrites[j] = None # delete redundant prior insert + + # look for replaces where iop.index is in range; error + for j, rop in self.getKindOfOps(rewrites, ReplaceOp, i): + if iop.index == rop.index: + rop.text = self.catOpText(iop.text, rop.text) + rewrites[i] = None # delete current insert + continue + + if iop.index >= rop.index and iop.index <= rop.lastIndex: + raise ValueError( + "insert op %s within boundaries of previous %s" + % (iop, rop)) + + m = {} + for i, op in enumerate(rewrites): + if op is None: + continue # ignore deleted ops + + assert op.index not in m, "should only be one op per index" + m[op.index] = op + + return m + + + def catOpText(self, a, b): + x = "" + y = "" + if a is not None: + x = a + if b is not None: + y = b + return x + y + + + def getKindOfOps(self, rewrites, kind, before=None): + if before is None: + before = len(rewrites) + elif before > len(rewrites): + before = len(rewrites) + + for i, op in enumerate(rewrites[:before]): + if op is None: + # ignore deleted + continue + if op.__class__ == kind: + yield i, op + + + def toDebugString(self, start=None, end=None): + if start is None: + start = self.MIN_TOKEN_INDEX + if end is None: + end = self.size() - 1 + + buf = StringIO() + i = start + while i >= self.MIN_TOKEN_INDEX and i <= end and i < len(self.tokens): + buf.write(self.get(i)) + i += 1 + + return buf.getvalue() diff --git a/antlr-3.1.3/runtime/Python/antlr3/tokens.py b/antlr-3.1.3/runtime/Python/antlr3/tokens.py new file mode 100644 index 0000000..8ce835d --- /dev/null +++ b/antlr-3.1.3/runtime/Python/antlr3/tokens.py @@ -0,0 +1,416 @@ +"""ANTLR3 runtime package""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +from antlr3.constants import EOF, DEFAULT_CHANNEL, INVALID_TOKEN_TYPE + +############################################################################ +# +# basic token interface +# +############################################################################ + +class Token(object): + """@brief Abstract token baseclass.""" + + def getText(self): + """@brief Get the text of the token. + + Using setter/getter methods is deprecated. Use o.text instead. + """ + raise NotImplementedError + + def setText(self, text): + """@brief Set the text of the token. + + Using setter/getter methods is deprecated. Use o.text instead. + """ + raise NotImplementedError + + + def getType(self): + """@brief Get the type of the token. + + Using setter/getter methods is deprecated. Use o.type instead.""" + + raise NotImplementedError + + def setType(self, ttype): + """@brief Get the type of the token. + + Using setter/getter methods is deprecated. Use o.type instead.""" + + raise NotImplementedError + + + def getLine(self): + """@brief Get the line number on which this token was matched + + Lines are numbered 1..n + + Using setter/getter methods is deprecated. Use o.line instead.""" + + raise NotImplementedError + + def setLine(self, line): + """@brief Set the line number on which this token was matched + + Using setter/getter methods is deprecated. Use o.line instead.""" + + raise NotImplementedError + + + def getCharPositionInLine(self): + """@brief Get the column of the tokens first character, + + Columns are numbered 0..n-1 + + Using setter/getter methods is deprecated. Use o.charPositionInLine instead.""" + + raise NotImplementedError + + def setCharPositionInLine(self, pos): + """@brief Set the column of the tokens first character, + + Using setter/getter methods is deprecated. Use o.charPositionInLine instead.""" + + raise NotImplementedError + + + def getChannel(self): + """@brief Get the channel of the token + + Using setter/getter methods is deprecated. Use o.channel instead.""" + + raise NotImplementedError + + def setChannel(self, channel): + """@brief Set the channel of the token + + Using setter/getter methods is deprecated. Use o.channel instead.""" + + raise NotImplementedError + + + def getTokenIndex(self): + """@brief Get the index in the input stream. + + An index from 0..n-1 of the token object in the input stream. + This must be valid in order to use the ANTLRWorks debugger. + + Using setter/getter methods is deprecated. Use o.index instead.""" + + raise NotImplementedError + + def setTokenIndex(self, index): + """@brief Set the index in the input stream. + + Using setter/getter methods is deprecated. Use o.index instead.""" + + raise NotImplementedError + + + def getInputStream(self): + """@brief From what character stream was this token created. + + You don't have to implement but it's nice to know where a Token + comes from if you have include files etc... on the input.""" + + raise NotImplementedError + + def setInputStream(self, input): + """@brief From what character stream was this token created. + + You don't have to implement but it's nice to know where a Token + comes from if you have include files etc... on the input.""" + + raise NotImplementedError + + +############################################################################ +# +# token implementations +# +# Token +# +- CommonToken +# \- ClassicToken +# +############################################################################ + +class CommonToken(Token): + """@brief Basic token implementation. + + This implementation does not copy the text from the input stream upon + creation, but keeps start/stop pointers into the stream to avoid + unnecessary copy operations. + + """ + + def __init__(self, type=None, channel=DEFAULT_CHANNEL, text=None, + input=None, start=None, stop=None, oldToken=None): + Token.__init__(self) + + if oldToken is not None: + self.type = oldToken.type + self.line = oldToken.line + self.charPositionInLine = oldToken.charPositionInLine + self.channel = oldToken.channel + self.index = oldToken.index + self._text = oldToken._text + if isinstance(oldToken, CommonToken): + self.input = oldToken.input + self.start = oldToken.start + self.stop = oldToken.stop + + else: + self.type = type + self.input = input + self.charPositionInLine = -1 # set to invalid position + self.line = 0 + self.channel = channel + + #What token number is this from 0..n-1 tokens; < 0 implies invalid index + self.index = -1 + + # We need to be able to change the text once in a while. If + # this is non-null, then getText should return this. Note that + # start/stop are not affected by changing this. + self._text = text + + # The char position into the input buffer where this token starts + self.start = start + + # The char position into the input buffer where this token stops + # This is the index of the last char, *not* the index after it! + self.stop = stop + + + def getText(self): + if self._text is not None: + return self._text + + if self.input is None: + return None + + return self.input.substring(self.start, self.stop) + + + def setText(self, text): + """ + Override the text for this token. getText() will return this text + rather than pulling from the buffer. Note that this does not mean + that start/stop indexes are not valid. It means that that input + was converted to a new string in the token object. + """ + self._text = text + + text = property(getText, setText) + + + def getType(self): + return self.type + + def setType(self, ttype): + self.type = ttype + + + def getLine(self): + return self.line + + def setLine(self, line): + self.line = line + + + def getCharPositionInLine(self): + return self.charPositionInLine + + def setCharPositionInLine(self, pos): + self.charPositionInLine = pos + + + def getChannel(self): + return self.channel + + def setChannel(self, channel): + self.channel = channel + + + def getTokenIndex(self): + return self.index + + def setTokenIndex(self, index): + self.index = index + + + def getInputStream(self): + return self.input + + def setInputStream(self, input): + self.input = input + + + def __str__(self): + if self.type == EOF: + return "" + + channelStr = "" + if self.channel > 0: + channelStr = ",channel=" + str(self.channel) + + txt = self.text + if txt is not None: + txt = txt.replace("\n","\\\\n") + txt = txt.replace("\r","\\\\r") + txt = txt.replace("\t","\\\\t") + else: + txt = "" + + return "[@%d,%d:%d=%r,<%d>%s,%d:%d]" % ( + self.index, + self.start, self.stop, + txt, + self.type, channelStr, + self.line, self.charPositionInLine + ) + + +class ClassicToken(Token): + """@brief Alternative token implementation. + + A Token object like we'd use in ANTLR 2.x; has an actual string created + and associated with this object. These objects are needed for imaginary + tree nodes that have payload objects. We need to create a Token object + that has a string; the tree node will point at this token. CommonToken + has indexes into a char stream and hence cannot be used to introduce + new strings. + """ + + def __init__(self, type=None, text=None, channel=DEFAULT_CHANNEL, + oldToken=None + ): + Token.__init__(self) + + if oldToken is not None: + self.text = oldToken.text + self.type = oldToken.type + self.line = oldToken.line + self.charPositionInLine = oldToken.charPositionInLine + self.channel = oldToken.channel + + self.text = text + self.type = type + self.line = None + self.charPositionInLine = None + self.channel = channel + self.index = None + + + def getText(self): + return self.text + + def setText(self, text): + self.text = text + + + def getType(self): + return self.type + + def setType(self, ttype): + self.type = ttype + + + def getLine(self): + return self.line + + def setLine(self, line): + self.line = line + + + def getCharPositionInLine(self): + return self.charPositionInLine + + def setCharPositionInLine(self, pos): + self.charPositionInLine = pos + + + def getChannel(self): + return self.channel + + def setChannel(self, channel): + self.channel = channel + + + def getTokenIndex(self): + return self.index + + def setTokenIndex(self, index): + self.index = index + + + def getInputStream(self): + return None + + def setInputStream(self, input): + pass + + + def toString(self): + channelStr = "" + if self.channel > 0: + channelStr = ",channel=" + str(self.channel) + + txt = self.text + if txt is None: + txt = "" + + return "[@%r,%r,<%r>%s,%r:%r]" % (self.index, + txt, + self.type, + channelStr, + self.line, + self.charPositionInLine + ) + + + __str__ = toString + __repr__ = toString + + + +EOF_TOKEN = CommonToken(type=EOF) + +INVALID_TOKEN = CommonToken(type=INVALID_TOKEN_TYPE) + +# In an action, a lexer rule can set token to this SKIP_TOKEN and ANTLR +# will avoid creating a token for this symbol and try to fetch another. +SKIP_TOKEN = CommonToken(type=INVALID_TOKEN_TYPE) + + diff --git a/antlr-3.1.3/runtime/Python/antlr3/tree.py b/antlr-3.1.3/runtime/Python/antlr3/tree.py new file mode 100644 index 0000000..5fcf526 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/antlr3/tree.py @@ -0,0 +1,2702 @@ +""" @package antlr3.tree +@brief ANTLR3 runtime package, tree module + +This module contains all support classes for AST construction and tree parsers. + +""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +# lot's of docstrings are missing, don't complain for now... +# pylint: disable-msg=C0111 + +import re + +from antlr3.constants import UP, DOWN, EOF, INVALID_TOKEN_TYPE +from antlr3.recognizers import BaseRecognizer, RuleReturnScope +from antlr3.streams import IntStream +from antlr3.tokens import CommonToken, Token, INVALID_TOKEN +from antlr3.exceptions import MismatchedTreeNodeException, \ + MissingTokenException, UnwantedTokenException, MismatchedTokenException, \ + NoViableAltException + + +############################################################################ +# +# tree related exceptions +# +############################################################################ + + +class RewriteCardinalityException(RuntimeError): + """ + @brief Base class for all exceptions thrown during AST rewrite construction. + + This signifies a case where the cardinality of two or more elements + in a subrule are different: (ID INT)+ where |ID|!=|INT| + """ + + def __init__(self, elementDescription): + RuntimeError.__init__(self, elementDescription) + + self.elementDescription = elementDescription + + + def getMessage(self): + return self.elementDescription + + +class RewriteEarlyExitException(RewriteCardinalityException): + """@brief No elements within a (...)+ in a rewrite rule""" + + def __init__(self, elementDescription=None): + RewriteCardinalityException.__init__(self, elementDescription) + + +class RewriteEmptyStreamException(RewriteCardinalityException): + """ + @brief Ref to ID or expr but no tokens in ID stream or subtrees in expr stream + """ + + pass + + +############################################################################ +# +# basic Tree and TreeAdaptor interfaces +# +############################################################################ + +class Tree(object): + """ + @brief Abstract baseclass for tree nodes. + + What does a tree look like? ANTLR has a number of support classes + such as CommonTreeNodeStream that work on these kinds of trees. You + don't have to make your trees implement this interface, but if you do, + you'll be able to use more support code. + + NOTE: When constructing trees, ANTLR can build any kind of tree; it can + even use Token objects as trees if you add a child list to your tokens. + + This is a tree node without any payload; just navigation and factory stuff. + """ + + + def getChild(self, i): + raise NotImplementedError + + + def getChildCount(self): + raise NotImplementedError + + + def getParent(self): + """Tree tracks parent and child index now > 3.0""" + + raise NotImplementedError + + def setParent(self, t): + """Tree tracks parent and child index now > 3.0""" + + raise NotImplementedError + + + def hasAncestor(self, ttype): + """Walk upwards looking for ancestor with this token type.""" + + raise NotImplementedError + + def getAncestor(self, ttype): + """Walk upwards and get first ancestor with this token type.""" + + raise NotImplementedError + + def getAncestors(self): + """Return a list of all ancestors of this node. + + The first node of list is the root and the last is the parent of + this node. + """ + + raise NotImplementedError + + + def getChildIndex(self): + """This node is what child index? 0..n-1""" + + raise NotImplementedError + + def setChildIndex(self, index): + """This node is what child index? 0..n-1""" + + raise NotImplementedError + + + def freshenParentAndChildIndexes(self): + """Set the parent and child index values for all children""" + + raise NotImplementedError + + + def addChild(self, t): + """ + Add t as a child to this node. If t is null, do nothing. If t + is nil, add all children of t to this' children. + """ + + raise NotImplementedError + + + def setChild(self, i, t): + """Set ith child (0..n-1) to t; t must be non-null and non-nil node""" + + raise NotImplementedError + + + def deleteChild(self, i): + raise NotImplementedError + + + def replaceChildren(self, startChildIndex, stopChildIndex, t): + """ + Delete children from start to stop and replace with t even if t is + a list (nil-root tree). num of children can increase or decrease. + For huge child lists, inserting children can force walking rest of + children to set their childindex; could be slow. + """ + + raise NotImplementedError + + + def isNil(self): + """ + Indicates the node is a nil node but may still have children, meaning + the tree is a flat list. + """ + + raise NotImplementedError + + + def getTokenStartIndex(self): + """ + What is the smallest token index (indexing from 0) for this node + and its children? + """ + + raise NotImplementedError + + + def setTokenStartIndex(self, index): + raise NotImplementedError + + + def getTokenStopIndex(self): + """ + What is the largest token index (indexing from 0) for this node + and its children? + """ + + raise NotImplementedError + + + def setTokenStopIndex(self, index): + raise NotImplementedError + + + def dupNode(self): + raise NotImplementedError + + + def getType(self): + """Return a token type; needed for tree parsing.""" + + raise NotImplementedError + + + def getText(self): + raise NotImplementedError + + + def getLine(self): + """ + In case we don't have a token payload, what is the line for errors? + """ + + raise NotImplementedError + + + def getCharPositionInLine(self): + raise NotImplementedError + + + def toStringTree(self): + raise NotImplementedError + + + def toString(self): + raise NotImplementedError + + + +class TreeAdaptor(object): + """ + @brief Abstract baseclass for tree adaptors. + + How to create and navigate trees. Rather than have a separate factory + and adaptor, I've merged them. Makes sense to encapsulate. + + This takes the place of the tree construction code generated in the + generated code in 2.x and the ASTFactory. + + I do not need to know the type of a tree at all so they are all + generic Objects. This may increase the amount of typecasting needed. :( + """ + + # C o n s t r u c t i o n + + def createWithPayload(self, payload): + """ + Create a tree node from Token object; for CommonTree type trees, + then the token just becomes the payload. This is the most + common create call. + + Override if you want another kind of node to be built. + """ + + raise NotImplementedError + + + def dupNode(self, treeNode): + """Duplicate a single tree node. + + Override if you want another kind of node to be built.""" + + raise NotImplementedError + + + def dupTree(self, tree): + """Duplicate tree recursively, using dupNode() for each node""" + + raise NotImplementedError + + + def nil(self): + """ + Return a nil node (an empty but non-null node) that can hold + a list of element as the children. If you want a flat tree (a list) + use "t=adaptor.nil(); t.addChild(x); t.addChild(y);" + """ + + raise NotImplementedError + + + def errorNode(self, input, start, stop, exc): + """ + Return a tree node representing an error. This node records the + tokens consumed during error recovery. The start token indicates the + input symbol at which the error was detected. The stop token indicates + the last symbol consumed during recovery. + + You must specify the input stream so that the erroneous text can + be packaged up in the error node. The exception could be useful + to some applications; default implementation stores ptr to it in + the CommonErrorNode. + + This only makes sense during token parsing, not tree parsing. + Tree parsing should happen only when parsing and tree construction + succeed. + """ + + raise NotImplementedError + + + def isNil(self, tree): + """Is tree considered a nil node used to make lists of child nodes?""" + + raise NotImplementedError + + + def addChild(self, t, child): + """ + Add a child to the tree t. If child is a flat tree (a list), make all + in list children of t. Warning: if t has no children, but child does + and child isNil then you can decide it is ok to move children to t via + t.children = child.children; i.e., without copying the array. Just + make sure that this is consistent with have the user will build + ASTs. Do nothing if t or child is null. + """ + + raise NotImplementedError + + + def becomeRoot(self, newRoot, oldRoot): + """ + If oldRoot is a nil root, just copy or move the children to newRoot. + If not a nil root, make oldRoot a child of newRoot. + + old=^(nil a b c), new=r yields ^(r a b c) + old=^(a b c), new=r yields ^(r ^(a b c)) + + If newRoot is a nil-rooted single child tree, use the single + child as the new root node. + + old=^(nil a b c), new=^(nil r) yields ^(r a b c) + old=^(a b c), new=^(nil r) yields ^(r ^(a b c)) + + If oldRoot was null, it's ok, just return newRoot (even if isNil). + + old=null, new=r yields r + old=null, new=^(nil r) yields ^(nil r) + + Return newRoot. Throw an exception if newRoot is not a + simple node or nil root with a single child node--it must be a root + node. If newRoot is ^(nil x) return x as newRoot. + + Be advised that it's ok for newRoot to point at oldRoot's + children; i.e., you don't have to copy the list. We are + constructing these nodes so we should have this control for + efficiency. + """ + + raise NotImplementedError + + + def rulePostProcessing(self, root): + """ + Given the root of the subtree created for this rule, post process + it to do any simplifications or whatever you want. A required + behavior is to convert ^(nil singleSubtree) to singleSubtree + as the setting of start/stop indexes relies on a single non-nil root + for non-flat trees. + + Flat trees such as for lists like "idlist : ID+ ;" are left alone + unless there is only one ID. For a list, the start/stop indexes + are set in the nil node. + + This method is executed after all rule tree construction and right + before setTokenBoundaries(). + """ + + raise NotImplementedError + + + def getUniqueID(self, node): + """For identifying trees. + + How to identify nodes so we can say "add node to a prior node"? + Even becomeRoot is an issue. Use System.identityHashCode(node) + usually. + """ + + raise NotImplementedError + + + # R e w r i t e R u l e s + + def createFromToken(self, tokenType, fromToken, text=None): + """ + Create a new node derived from a token, with a new token type and + (optionally) new text. + + This is invoked from an imaginary node ref on right side of a + rewrite rule as IMAG[$tokenLabel] or IMAG[$tokenLabel "IMAG"]. + + This should invoke createToken(Token). + """ + + raise NotImplementedError + + + def createFromType(self, tokenType, text): + """Create a new node derived from a token, with a new token type. + + This is invoked from an imaginary node ref on right side of a + rewrite rule as IMAG["IMAG"]. + + This should invoke createToken(int,String). + """ + + raise NotImplementedError + + + # C o n t e n t + + def getType(self, t): + """For tree parsing, I need to know the token type of a node""" + + raise NotImplementedError + + + def setType(self, t, type): + """Node constructors can set the type of a node""" + + raise NotImplementedError + + + def getText(self, t): + raise NotImplementedError + + def setText(self, t, text): + """Node constructors can set the text of a node""" + + raise NotImplementedError + + + def getToken(self, t): + """Return the token object from which this node was created. + + Currently used only for printing an error message. + The error display routine in BaseRecognizer needs to + display where the input the error occurred. If your + tree of limitation does not store information that can + lead you to the token, you can create a token filled with + the appropriate information and pass that back. See + BaseRecognizer.getErrorMessage(). + """ + + raise NotImplementedError + + + def setTokenBoundaries(self, t, startToken, stopToken): + """ + Where are the bounds in the input token stream for this node and + all children? Each rule that creates AST nodes will call this + method right before returning. Flat trees (i.e., lists) will + still usually have a nil root node just to hold the children list. + That node would contain the start/stop indexes then. + """ + + raise NotImplementedError + + + def getTokenStartIndex(self, t): + """ + Get the token start index for this subtree; return -1 if no such index + """ + + raise NotImplementedError + + + def getTokenStopIndex(self, t): + """ + Get the token stop index for this subtree; return -1 if no such index + """ + + raise NotImplementedError + + + # N a v i g a t i o n / T r e e P a r s i n g + + def getChild(self, t, i): + """Get a child 0..n-1 node""" + + raise NotImplementedError + + + def setChild(self, t, i, child): + """Set ith child (0..n-1) to t; t must be non-null and non-nil node""" + + raise NotImplementedError + + + def deleteChild(self, t, i): + """Remove ith child and shift children down from right.""" + + raise NotImplementedError + + + def getChildCount(self, t): + """How many children? If 0, then this is a leaf node""" + + raise NotImplementedError + + + def getParent(self, t): + """ + Who is the parent node of this node; if null, implies node is root. + If your node type doesn't handle this, it's ok but the tree rewrites + in tree parsers need this functionality. + """ + + raise NotImplementedError + + + def setParent(self, t, parent): + """ + Who is the parent node of this node; if null, implies node is root. + If your node type doesn't handle this, it's ok but the tree rewrites + in tree parsers need this functionality. + """ + + raise NotImplementedError + + + def getChildIndex(self, t): + """ + What index is this node in the child list? Range: 0..n-1 + If your node type doesn't handle this, it's ok but the tree rewrites + in tree parsers need this functionality. + """ + + raise NotImplementedError + + + def setChildIndex(self, t, index): + """ + What index is this node in the child list? Range: 0..n-1 + If your node type doesn't handle this, it's ok but the tree rewrites + in tree parsers need this functionality. + """ + + raise NotImplementedError + + + def replaceChildren(self, parent, startChildIndex, stopChildIndex, t): + """ + Replace from start to stop child index of parent with t, which might + be a list. Number of children may be different + after this call. + + If parent is null, don't do anything; must be at root of overall tree. + Can't replace whatever points to the parent externally. Do nothing. + """ + + raise NotImplementedError + + + # Misc + + def create(self, *args): + """ + Deprecated, use createWithPayload, createFromToken or createFromType. + + This method only exists to mimic the Java interface of TreeAdaptor. + + """ + + if len(args) == 1 and isinstance(args[0], Token): + # Object create(Token payload); +## warnings.warn( +## "Using create() is deprecated, use createWithPayload()", +## DeprecationWarning, +## stacklevel=2 +## ) + return self.createWithPayload(args[0]) + + if (len(args) == 2 + and isinstance(args[0], (int, long)) + and isinstance(args[1], Token) + ): + # Object create(int tokenType, Token fromToken); +## warnings.warn( +## "Using create() is deprecated, use createFromToken()", +## DeprecationWarning, +## stacklevel=2 +## ) + return self.createFromToken(args[0], args[1]) + + if (len(args) == 3 + and isinstance(args[0], (int, long)) + and isinstance(args[1], Token) + and isinstance(args[2], basestring) + ): + # Object create(int tokenType, Token fromToken, String text); +## warnings.warn( +## "Using create() is deprecated, use createFromToken()", +## DeprecationWarning, +## stacklevel=2 +## ) + return self.createFromToken(args[0], args[1], args[2]) + + if (len(args) == 2 + and isinstance(args[0], (int, long)) + and isinstance(args[1], basestring) + ): + # Object create(int tokenType, String text); +## warnings.warn( +## "Using create() is deprecated, use createFromType()", +## DeprecationWarning, +## stacklevel=2 +## ) + return self.createFromType(args[0], args[1]) + + raise TypeError( + "No create method with this signature found: %s" + % (', '.join(type(v).__name__ for v in args)) + ) + + +############################################################################ +# +# base implementation of Tree and TreeAdaptor +# +# Tree +# \- BaseTree +# +# TreeAdaptor +# \- BaseTreeAdaptor +# +############################################################################ + + +class BaseTree(Tree): + """ + @brief A generic tree implementation with no payload. + + You must subclass to + actually have any user data. ANTLR v3 uses a list of children approach + instead of the child-sibling approach in v2. A flat tree (a list) is + an empty node whose children represent the list. An empty, but + non-null node is called "nil". + """ + + # BaseTree is abstract, no need to complain about not implemented abstract + # methods + # pylint: disable-msg=W0223 + + def __init__(self, node=None): + """ + Create a new node from an existing node does nothing for BaseTree + as there are no fields other than the children list, which cannot + be copied as the children are not considered part of this node. + """ + + Tree.__init__(self) + self.children = [] + self.parent = None + self.childIndex = 0 + + + def getChild(self, i): + try: + return self.children[i] + except IndexError: + return None + + + def getChildren(self): + """@brief Get the children internal List + + Note that if you directly mess with + the list, do so at your own risk. + """ + + # FIXME: mark as deprecated + return self.children + + + def getFirstChildWithType(self, treeType): + for child in self.children: + if child.getType() == treeType: + return child + + return None + + + def getChildCount(self): + return len(self.children) + + + def addChild(self, childTree): + """Add t as child of this node. + + Warning: if t has no children, but child does + and child isNil then this routine moves children to t via + t.children = child.children; i.e., without copying the array. + """ + + # this implementation is much simpler and probably less efficient + # than the mumbo-jumbo that Ter did for the Java runtime. + + if childTree is None: + return + + if childTree.isNil(): + # t is an empty node possibly with children + + if self.children is childTree.children: + raise ValueError("attempt to add child list to itself") + + # fix parent pointer and childIndex for new children + for idx, child in enumerate(childTree.children): + child.parent = self + child.childIndex = len(self.children) + idx + + self.children += childTree.children + + else: + # child is not nil (don't care about children) + self.children.append(childTree) + childTree.parent = self + childTree.childIndex = len(self.children) - 1 + + + def addChildren(self, children): + """Add all elements of kids list as children of this node""" + + self.children += children + + + def setChild(self, i, t): + if t is None: + return + + if t.isNil(): + raise ValueError("Can't set single child to a list") + + self.children[i] = t + t.parent = self + t.childIndex = i + + + def deleteChild(self, i): + killed = self.children[i] + + del self.children[i] + + # walk rest and decrement their child indexes + for idx, child in enumerate(self.children[i:]): + child.childIndex = i + idx + + return killed + + + def replaceChildren(self, startChildIndex, stopChildIndex, newTree): + """ + Delete children from start to stop and replace with t even if t is + a list (nil-root tree). num of children can increase or decrease. + For huge child lists, inserting children can force walking rest of + children to set their childindex; could be slow. + """ + + if (startChildIndex >= len(self.children) + or stopChildIndex >= len(self.children) + ): + raise IndexError("indexes invalid") + + replacingHowMany = stopChildIndex - startChildIndex + 1 + + # normalize to a list of children to add: newChildren + if newTree.isNil(): + newChildren = newTree.children + + else: + newChildren = [newTree] + + replacingWithHowMany = len(newChildren) + delta = replacingHowMany - replacingWithHowMany + + + if delta == 0: + # if same number of nodes, do direct replace + for idx, child in enumerate(newChildren): + self.children[idx + startChildIndex] = child + child.parent = self + child.childIndex = idx + startChildIndex + + else: + # length of children changes... + + # ...delete replaced segment... + del self.children[startChildIndex:stopChildIndex+1] + + # ...insert new segment... + self.children[startChildIndex:startChildIndex] = newChildren + + # ...and fix indeces + self.freshenParentAndChildIndexes(startChildIndex) + + + def isNil(self): + return False + + + def freshenParentAndChildIndexes(self, offset=0): + for idx, child in enumerate(self.children[offset:]): + child.childIndex = idx + offset + child.parent = self + + + def sanityCheckParentAndChildIndexes(self, parent=None, i=-1): + if parent != self.parent: + raise ValueError( + "parents don't match; expected %r found %r" + % (parent, self.parent) + ) + + if i != self.childIndex: + raise ValueError( + "child indexes don't match; expected %d found %d" + % (i, self.childIndex) + ) + + for idx, child in enumerate(self.children): + child.sanityCheckParentAndChildIndexes(self, idx) + + + def getChildIndex(self): + """BaseTree doesn't track child indexes.""" + + return 0 + + + def setChildIndex(self, index): + """BaseTree doesn't track child indexes.""" + + pass + + + def getParent(self): + """BaseTree doesn't track parent pointers.""" + + return None + + def setParent(self, t): + """BaseTree doesn't track parent pointers.""" + + pass + + + def hasAncestor(self, ttype): + """Walk upwards looking for ancestor with this token type.""" + return self.getAncestor(ttype) is not None + + def getAncestor(self, ttype): + """Walk upwards and get first ancestor with this token type.""" + t = self.getParent() + while t is not None: + if t.getType() == ttype: + return t + t = t.getParent() + + return None + + def getAncestors(self): + """Return a list of all ancestors of this node. + + The first node of list is the root and the last is the parent of + this node. + """ + if selfgetParent() is None: + return None + + ancestors = [] + t = self.getParent() + while t is not None: + ancestors.insert(0, t) # insert at start + t = t.getParent() + + return ancestors + + + def toStringTree(self): + """Print out a whole tree not just a node""" + + if len(self.children) == 0: + return self.toString() + + buf = [] + if not self.isNil(): + buf.append('(') + buf.append(self.toString()) + buf.append(' ') + + for i, child in enumerate(self.children): + if i > 0: + buf.append(' ') + buf.append(child.toStringTree()) + + if not self.isNil(): + buf.append(')') + + return ''.join(buf) + + + def getLine(self): + return 0 + + + def getCharPositionInLine(self): + return 0 + + + def toString(self): + """Override to say how a node (not a tree) should look as text""" + + raise NotImplementedError + + + +class BaseTreeAdaptor(TreeAdaptor): + """ + @brief A TreeAdaptor that works with any Tree implementation. + """ + + # BaseTreeAdaptor is abstract, no need to complain about not implemented + # abstract methods + # pylint: disable-msg=W0223 + + def nil(self): + return self.createWithPayload(None) + + + def errorNode(self, input, start, stop, exc): + """ + create tree node that holds the start and stop tokens associated + with an error. + + If you specify your own kind of tree nodes, you will likely have to + override this method. CommonTree returns Token.INVALID_TOKEN_TYPE + if no token payload but you might have to set token type for diff + node type. + + You don't have to subclass CommonErrorNode; you will likely need to + subclass your own tree node class to avoid class cast exception. + """ + + return CommonErrorNode(input, start, stop, exc) + + + def isNil(self, tree): + return tree.isNil() + + + def dupTree(self, t, parent=None): + """ + This is generic in the sense that it will work with any kind of + tree (not just Tree interface). It invokes the adaptor routines + not the tree node routines to do the construction. + """ + + if t is None: + return None + + newTree = self.dupNode(t) + + # ensure new subtree root has parent/child index set + + # same index in new tree + self.setChildIndex(newTree, self.getChildIndex(t)) + + self.setParent(newTree, parent) + + for i in range(self.getChildCount(t)): + child = self.getChild(t, i) + newSubTree = self.dupTree(child, t) + self.addChild(newTree, newSubTree) + + return newTree + + + def addChild(self, tree, child): + """ + Add a child to the tree t. If child is a flat tree (a list), make all + in list children of t. Warning: if t has no children, but child does + and child isNil then you can decide it is ok to move children to t via + t.children = child.children; i.e., without copying the array. Just + make sure that this is consistent with have the user will build + ASTs. + """ + + #if isinstance(child, Token): + # child = self.createWithPayload(child) + + if tree is not None and child is not None: + tree.addChild(child) + + + def becomeRoot(self, newRoot, oldRoot): + """ + If oldRoot is a nil root, just copy or move the children to newRoot. + If not a nil root, make oldRoot a child of newRoot. + + old=^(nil a b c), new=r yields ^(r a b c) + old=^(a b c), new=r yields ^(r ^(a b c)) + + If newRoot is a nil-rooted single child tree, use the single + child as the new root node. + + old=^(nil a b c), new=^(nil r) yields ^(r a b c) + old=^(a b c), new=^(nil r) yields ^(r ^(a b c)) + + If oldRoot was null, it's ok, just return newRoot (even if isNil). + + old=null, new=r yields r + old=null, new=^(nil r) yields ^(nil r) + + Return newRoot. Throw an exception if newRoot is not a + simple node or nil root with a single child node--it must be a root + node. If newRoot is ^(nil x) return x as newRoot. + + Be advised that it's ok for newRoot to point at oldRoot's + children; i.e., you don't have to copy the list. We are + constructing these nodes so we should have this control for + efficiency. + """ + + if isinstance(newRoot, Token): + newRoot = self.create(newRoot) + + if oldRoot is None: + return newRoot + + if not isinstance(newRoot, CommonTree): + newRoot = self.createWithPayload(newRoot) + + # handle ^(nil real-node) + if newRoot.isNil(): + nc = newRoot.getChildCount() + if nc == 1: + newRoot = newRoot.getChild(0) + + elif nc > 1: + # TODO: make tree run time exceptions hierarchy + raise RuntimeError("more than one node as root") + + # add oldRoot to newRoot; addChild takes care of case where oldRoot + # is a flat list (i.e., nil-rooted tree). All children of oldRoot + # are added to newRoot. + newRoot.addChild(oldRoot) + return newRoot + + + def rulePostProcessing(self, root): + """Transform ^(nil x) to x and nil to null""" + + if root is not None and root.isNil(): + if root.getChildCount() == 0: + root = None + + elif root.getChildCount() == 1: + root = root.getChild(0) + # whoever invokes rule will set parent and child index + root.setParent(None) + root.setChildIndex(-1) + + return root + + + def createFromToken(self, tokenType, fromToken, text=None): + assert isinstance(tokenType, (int, long)), type(tokenType).__name__ + assert isinstance(fromToken, Token), type(fromToken).__name__ + assert text is None or isinstance(text, basestring), type(text).__name__ + + fromToken = self.createToken(fromToken) + fromToken.type = tokenType + if text is not None: + fromToken.text = text + t = self.createWithPayload(fromToken) + return t + + + def createFromType(self, tokenType, text): + assert isinstance(tokenType, (int, long)), type(tokenType).__name__ + assert isinstance(text, basestring) or text is None, type(text).__name__ + + fromToken = self.createToken(tokenType=tokenType, text=text) + t = self.createWithPayload(fromToken) + return t + + + def getType(self, t): + return t.getType() + + + def setType(self, t, type): + raise RuntimeError("don't know enough about Tree node") + + + def getText(self, t): + return t.getText() + + + def setText(self, t, text): + raise RuntimeError("don't know enough about Tree node") + + + def getChild(self, t, i): + return t.getChild(i) + + + def setChild(self, t, i, child): + t.setChild(i, child) + + + def deleteChild(self, t, i): + return t.deleteChild(i) + + + def getChildCount(self, t): + return t.getChildCount() + + + def getUniqueID(self, node): + return hash(node) + + + def createToken(self, fromToken=None, tokenType=None, text=None): + """ + Tell me how to create a token for use with imaginary token nodes. + For example, there is probably no input symbol associated with imaginary + token DECL, but you need to create it as a payload or whatever for + the DECL node as in ^(DECL type ID). + + If you care what the token payload objects' type is, you should + override this method and any other createToken variant. + """ + + raise NotImplementedError + + +############################################################################ +# +# common tree implementation +# +# Tree +# \- BaseTree +# \- CommonTree +# \- CommonErrorNode +# +# TreeAdaptor +# \- BaseTreeAdaptor +# \- CommonTreeAdaptor +# +############################################################################ + + +class CommonTree(BaseTree): + """@brief A tree node that is wrapper for a Token object. + + After 3.0 release + while building tree rewrite stuff, it became clear that computing + parent and child index is very difficult and cumbersome. Better to + spend the space in every tree node. If you don't want these extra + fields, it's easy to cut them out in your own BaseTree subclass. + + """ + + def __init__(self, payload): + BaseTree.__init__(self) + + # What token indexes bracket all tokens associated with this node + # and below? + self.startIndex = -1 + self.stopIndex = -1 + + # Who is the parent node of this node; if null, implies node is root + self.parent = None + + # What index is this node in the child list? Range: 0..n-1 + self.childIndex = -1 + + # A single token is the payload + if payload is None: + self.token = None + + elif isinstance(payload, CommonTree): + self.token = payload.token + self.startIndex = payload.startIndex + self.stopIndex = payload.stopIndex + + elif payload is None or isinstance(payload, Token): + self.token = payload + + else: + raise TypeError(type(payload).__name__) + + + + def getToken(self): + return self.token + + + def dupNode(self): + return CommonTree(self) + + + def isNil(self): + return self.token is None + + + def getType(self): + if self.token is None: + return INVALID_TOKEN_TYPE + + return self.token.getType() + + type = property(getType) + + + def getText(self): + if self.token is None: + return None + + return self.token.text + + text = property(getText) + + + def getLine(self): + if self.token is None or self.token.getLine() == 0: + if self.getChildCount(): + return self.getChild(0).getLine() + else: + return 0 + + return self.token.getLine() + + line = property(getLine) + + + def getCharPositionInLine(self): + if self.token is None or self.token.getCharPositionInLine() == -1: + if self.getChildCount(): + return self.getChild(0).getCharPositionInLine() + else: + return 0 + + else: + return self.token.getCharPositionInLine() + + charPositionInLine = property(getCharPositionInLine) + + + def getTokenStartIndex(self): + if self.startIndex == -1 and self.token is not None: + return self.token.getTokenIndex() + + return self.startIndex + + def setTokenStartIndex(self, index): + self.startIndex = index + + tokenStartIndex = property(getTokenStartIndex, setTokenStartIndex) + + + def getTokenStopIndex(self): + if self.stopIndex == -1 and self.token is not None: + return self.token.getTokenIndex() + + return self.stopIndex + + def setTokenStopIndex(self, index): + self.stopIndex = index + + tokenStopIndex = property(getTokenStopIndex, setTokenStopIndex) + + + def setUnknownTokenBoundaries(self): + """For every node in this subtree, make sure it's start/stop token's + are set. Walk depth first, visit bottom up. Only updates nodes + with at least one token index < 0. + """ + + if self.children is None: + if self.startIndex < 0 or self.stopIndex < 0: + self.startIndex = self.stopIndex = self.token.getTokenIndex() + + return + + for child in self.children: + child.setUnknownTokenBoundaries() + + if self.startIndex >= 0 and self.stopIndex >= 0: + # already set + return + + if self.children: + firstChild = self.children[0] + lastChild = self.children[-1] + self.startIndex = firstChild.getTokenStartIndex() + self.stopIndex = lastChild.getTokenStopIndex() + + + def getChildIndex(self): + #FIXME: mark as deprecated + return self.childIndex + + + def setChildIndex(self, idx): + #FIXME: mark as deprecated + self.childIndex = idx + + + def getParent(self): + #FIXME: mark as deprecated + return self.parent + + + def setParent(self, t): + #FIXME: mark as deprecated + self.parent = t + + + def toString(self): + if self.isNil(): + return "nil" + + if self.getType() == INVALID_TOKEN_TYPE: + return "" + + return self.token.text + + __str__ = toString + + + + def toStringTree(self): + if not self.children: + return self.toString() + + ret = '' + if not self.isNil(): + ret += '(%s ' % (self.toString()) + + ret += ' '.join([child.toStringTree() for child in self.children]) + + if not self.isNil(): + ret += ')' + + return ret + + +INVALID_NODE = CommonTree(INVALID_TOKEN) + + +class CommonErrorNode(CommonTree): + """A node representing erroneous token range in token stream""" + + def __init__(self, input, start, stop, exc): + CommonTree.__init__(self, None) + + if (stop is None or + (stop.getTokenIndex() < start.getTokenIndex() and + stop.getType() != EOF + ) + ): + # sometimes resync does not consume a token (when LT(1) is + # in follow set. So, stop will be 1 to left to start. adjust. + # Also handle case where start is the first token and no token + # is consumed during recovery; LT(-1) will return null. + stop = start + + self.input = input + self.start = start + self.stop = stop + self.trappedException = exc + + + def isNil(self): + return False + + + def getType(self): + return INVALID_TOKEN_TYPE + + + def getText(self): + if isinstance(self.start, Token): + i = self.start.getTokenIndex() + j = self.stop.getTokenIndex() + if self.stop.getType() == EOF: + j = self.input.size() + + badText = self.input.toString(i, j) + + elif isinstance(self.start, Tree): + badText = self.input.toString(self.start, self.stop) + + else: + # people should subclass if they alter the tree type so this + # next one is for sure correct. + badText = "" + + return badText + + + def toString(self): + if isinstance(self.trappedException, MissingTokenException): + return ("") + + elif isinstance(self.trappedException, UnwantedTokenException): + return ("") + + elif isinstance(self.trappedException, MismatchedTokenException): + return ("") + + elif isinstance(self.trappedException, NoViableAltException): + return ("") + + return "" + + +class CommonTreeAdaptor(BaseTreeAdaptor): + """ + @brief A TreeAdaptor that works with any Tree implementation. + + It provides + really just factory methods; all the work is done by BaseTreeAdaptor. + If you would like to have different tokens created than ClassicToken + objects, you need to override this and then set the parser tree adaptor to + use your subclass. + + To get your parser to build nodes of a different type, override + create(Token), errorNode(), and to be safe, YourTreeClass.dupNode(). + dupNode is called to duplicate nodes during rewrite operations. + """ + + def dupNode(self, treeNode): + """ + Duplicate a node. This is part of the factory; + override if you want another kind of node to be built. + + I could use reflection to prevent having to override this + but reflection is slow. + """ + + if treeNode is None: + return None + + return treeNode.dupNode() + + + def createWithPayload(self, payload): + return CommonTree(payload) + + + def createToken(self, fromToken=None, tokenType=None, text=None): + """ + Tell me how to create a token for use with imaginary token nodes. + For example, there is probably no input symbol associated with imaginary + token DECL, but you need to create it as a payload or whatever for + the DECL node as in ^(DECL type ID). + + If you care what the token payload objects' type is, you should + override this method and any other createToken variant. + """ + + if fromToken is not None: + return CommonToken(oldToken=fromToken) + + return CommonToken(type=tokenType, text=text) + + + def setTokenBoundaries(self, t, startToken, stopToken): + """ + Track start/stop token for subtree root created for a rule. + Only works with Tree nodes. For rules that match nothing, + seems like this will yield start=i and stop=i-1 in a nil node. + Might be useful info so I'll not force to be i..i. + """ + + if t is None: + return + + start = 0 + stop = 0 + + if startToken is not None: + start = startToken.index + + if stopToken is not None: + stop = stopToken.index + + t.setTokenStartIndex(start) + t.setTokenStopIndex(stop) + + + def getTokenStartIndex(self, t): + if t is None: + return -1 + return t.getTokenStartIndex() + + + def getTokenStopIndex(self, t): + if t is None: + return -1 + return t.getTokenStopIndex() + + + def getText(self, t): + if t is None: + return None + return t.getText() + + + def getType(self, t): + if t is None: + return INVALID_TOKEN_TYPE + + return t.getType() + + + def getToken(self, t): + """ + What is the Token associated with this node? If + you are not using CommonTree, then you must + override this in your own adaptor. + """ + + if isinstance(t, CommonTree): + return t.getToken() + + return None # no idea what to do + + + def getChild(self, t, i): + if t is None: + return None + return t.getChild(i) + + + def getChildCount(self, t): + if t is None: + return 0 + return t.getChildCount() + + + def getParent(self, t): + return t.getParent() + + + def setParent(self, t, parent): + t.setParent(parent) + + + def getChildIndex(self, t): + if t is None: + return 0 + return t.getChildIndex() + + + def setChildIndex(self, t, index): + t.setChildIndex(index) + + + def replaceChildren(self, parent, startChildIndex, stopChildIndex, t): + if parent is not None: + parent.replaceChildren(startChildIndex, stopChildIndex, t) + + +############################################################################ +# +# streams +# +# TreeNodeStream +# \- BaseTree +# \- CommonTree +# +# TreeAdaptor +# \- BaseTreeAdaptor +# \- CommonTreeAdaptor +# +############################################################################ + + + +class TreeNodeStream(IntStream): + """@brief A stream of tree nodes + + It accessing nodes from a tree of some kind. + """ + + # TreeNodeStream is abstract, no need to complain about not implemented + # abstract methods + # pylint: disable-msg=W0223 + + def get(self, i): + """Get a tree node at an absolute index i; 0..n-1. + If you don't want to buffer up nodes, then this method makes no + sense for you. + """ + + raise NotImplementedError + + + def LT(self, k): + """ + Get tree node at current input pointer + i ahead where i=1 is next node. + i<0 indicates nodes in the past. So LT(-1) is previous node, but + implementations are not required to provide results for k < -1. + LT(0) is undefined. For i>=n, return null. + Return null for LT(0) and any index that results in an absolute address + that is negative. + + This is analogus to the LT() method of the TokenStream, but this + returns a tree node instead of a token. Makes code gen identical + for both parser and tree grammars. :) + """ + + raise NotImplementedError + + + def getTreeSource(self): + """ + Where is this stream pulling nodes from? This is not the name, but + the object that provides node objects. + """ + + raise NotImplementedError + + + def getTokenStream(self): + """ + If the tree associated with this stream was created from a TokenStream, + you can specify it here. Used to do rule $text attribute in tree + parser. Optional unless you use tree parser rule text attribute + or output=template and rewrite=true options. + """ + + raise NotImplementedError + + + def getTreeAdaptor(self): + """ + What adaptor can tell me how to interpret/navigate nodes and + trees. E.g., get text of a node. + """ + + raise NotImplementedError + + + def setUniqueNavigationNodes(self, uniqueNavigationNodes): + """ + As we flatten the tree, we use UP, DOWN nodes to represent + the tree structure. When debugging we need unique nodes + so we have to instantiate new ones. When doing normal tree + parsing, it's slow and a waste of memory to create unique + navigation nodes. Default should be false; + """ + + raise NotImplementedError + + + def toString(self, start, stop): + """ + Return the text of all nodes from start to stop, inclusive. + If the stream does not buffer all the nodes then it can still + walk recursively from start until stop. You can always return + null or "" too, but users should not access $ruleLabel.text in + an action of course in that case. + """ + + raise NotImplementedError + + + # REWRITING TREES (used by tree parser) + def replaceChildren(self, parent, startChildIndex, stopChildIndex, t): + """ + Replace from start to stop child index of parent with t, which might + be a list. Number of children may be different + after this call. The stream is notified because it is walking the + tree and might need to know you are monkeying with the underlying + tree. Also, it might be able to modify the node stream to avoid + restreaming for future phases. + + If parent is null, don't do anything; must be at root of overall tree. + Can't replace whatever points to the parent externally. Do nothing. + """ + + raise NotImplementedError + + +class CommonTreeNodeStream(TreeNodeStream): + """@brief A buffered stream of tree nodes. + + Nodes can be from a tree of ANY kind. + + This node stream sucks all nodes out of the tree specified in + the constructor during construction and makes pointers into + the tree using an array of Object pointers. The stream necessarily + includes pointers to DOWN and UP and EOF nodes. + + This stream knows how to mark/release for backtracking. + + This stream is most suitable for tree interpreters that need to + jump around a lot or for tree parsers requiring speed (at cost of memory). + There is some duplicated functionality here with UnBufferedTreeNodeStream + but just in bookkeeping, not tree walking etc... + + @see UnBufferedTreeNodeStream + """ + + def __init__(self, *args): + TreeNodeStream.__init__(self) + + if len(args) == 1: + adaptor = CommonTreeAdaptor() + tree = args[0] + + nodes = None + down = None + up = None + eof = None + + elif len(args) == 2: + adaptor = args[0] + tree = args[1] + + nodes = None + down = None + up = None + eof = None + + elif len(args) == 3: + parent = args[0] + start = args[1] + stop = args[2] + + adaptor = parent.adaptor + tree = parent.root + + nodes = parent.nodes[start:stop] + down = parent.down + up = parent.up + eof = parent.eof + + else: + raise TypeError("Invalid arguments") + + # all these navigation nodes are shared and hence they + # cannot contain any line/column info + if down is not None: + self.down = down + else: + self.down = adaptor.createFromType(DOWN, "DOWN") + + if up is not None: + self.up = up + else: + self.up = adaptor.createFromType(UP, "UP") + + if eof is not None: + self.eof = eof + else: + self.eof = adaptor.createFromType(EOF, "EOF") + + # The complete mapping from stream index to tree node. + # This buffer includes pointers to DOWN, UP, and EOF nodes. + # It is built upon ctor invocation. The elements are type + # Object as we don't what the trees look like. + + # Load upon first need of the buffer so we can set token types + # of interest for reverseIndexing. Slows us down a wee bit to + # do all of the if p==-1 testing everywhere though. + if nodes is not None: + self.nodes = nodes + else: + self.nodes = [] + + # Pull nodes from which tree? + self.root = tree + + # IF this tree (root) was created from a token stream, track it. + self.tokens = None + + # What tree adaptor was used to build these trees + self.adaptor = adaptor + + # Reuse same DOWN, UP navigation nodes unless this is true + self.uniqueNavigationNodes = False + + # The index into the nodes list of the current node (next node + # to consume). If -1, nodes array not filled yet. + self.p = -1 + + # Track the last mark() call result value for use in rewind(). + self.lastMarker = None + + # Stack of indexes used for push/pop calls + self.calls = [] + + + def fillBuffer(self): + """Walk tree with depth-first-search and fill nodes buffer. + Don't do DOWN, UP nodes if its a list (t is isNil). + """ + + self._fillBuffer(self.root) + self.p = 0 # buffer of nodes intialized now + + + def _fillBuffer(self, t): + nil = self.adaptor.isNil(t) + + if not nil: + self.nodes.append(t) # add this node + + # add DOWN node if t has children + n = self.adaptor.getChildCount(t) + if not nil and n > 0: + self.addNavigationNode(DOWN) + + # and now add all its children + for c in range(n): + self._fillBuffer(self.adaptor.getChild(t, c)) + + # add UP node if t has children + if not nil and n > 0: + self.addNavigationNode(UP) + + + def getNodeIndex(self, node): + """What is the stream index for node? 0..n-1 + Return -1 if node not found. + """ + + if self.p == -1: + self.fillBuffer() + + for i, t in enumerate(self.nodes): + if t == node: + return i + + return -1 + + + def addNavigationNode(self, ttype): + """ + As we flatten the tree, we use UP, DOWN nodes to represent + the tree structure. When debugging we need unique nodes + so instantiate new ones when uniqueNavigationNodes is true. + """ + + navNode = None + + if ttype == DOWN: + if self.hasUniqueNavigationNodes(): + navNode = self.adaptor.createFromType(DOWN, "DOWN") + + else: + navNode = self.down + + else: + if self.hasUniqueNavigationNodes(): + navNode = self.adaptor.createFromType(UP, "UP") + + else: + navNode = self.up + + self.nodes.append(navNode) + + + def get(self, i): + if self.p == -1: + self.fillBuffer() + + return self.nodes[i] + + + def LT(self, k): + if self.p == -1: + self.fillBuffer() + + if k == 0: + return None + + if k < 0: + return self.LB(-k) + + if self.p + k - 1 >= len(self.nodes): + return self.eof + + return self.nodes[self.p + k - 1] + + + def getCurrentSymbol(self): + return self.LT(1) + + + def LB(self, k): + """Look backwards k nodes""" + + if k == 0: + return None + + if self.p - k < 0: + return None + + return self.nodes[self.p - k] + + + def getTreeSource(self): + return self.root + + + def getSourceName(self): + return self.getTokenStream().getSourceName() + + + def getTokenStream(self): + return self.tokens + + + def setTokenStream(self, tokens): + self.tokens = tokens + + + def getTreeAdaptor(self): + return self.adaptor + + + def hasUniqueNavigationNodes(self): + return self.uniqueNavigationNodes + + + def setUniqueNavigationNodes(self, uniqueNavigationNodes): + self.uniqueNavigationNodes = uniqueNavigationNodes + + + def consume(self): + if self.p == -1: + self.fillBuffer() + + self.p += 1 + + + def LA(self, i): + return self.adaptor.getType(self.LT(i)) + + + def mark(self): + if self.p == -1: + self.fillBuffer() + + + self.lastMarker = self.index() + return self.lastMarker + + + def release(self, marker=None): + # no resources to release + + pass + + + def index(self): + return self.p + + + def rewind(self, marker=None): + if marker is None: + marker = self.lastMarker + + self.seek(marker) + + + def seek(self, index): + if self.p == -1: + self.fillBuffer() + + self.p = index + + + def push(self, index): + """ + Make stream jump to a new location, saving old location. + Switch back with pop(). + """ + + self.calls.append(self.p) # save current index + self.seek(index) + + + def pop(self): + """ + Seek back to previous index saved during last push() call. + Return top of stack (return index). + """ + + ret = self.calls.pop(-1) + self.seek(ret) + return ret + + + def reset(self): + self.p = 0 + self.lastMarker = 0 + self.calls = [] + + + def size(self): + if self.p == -1: + self.fillBuffer() + + return len(self.nodes) + + + # TREE REWRITE INTERFACE + + def replaceChildren(self, parent, startChildIndex, stopChildIndex, t): + if parent is not None: + self.adaptor.replaceChildren( + parent, startChildIndex, stopChildIndex, t + ) + + + def __str__(self): + """Used for testing, just return the token type stream""" + + if self.p == -1: + self.fillBuffer() + + return ' '.join([str(self.adaptor.getType(node)) + for node in self.nodes + ]) + + + def toString(self, start, stop): + if start is None or stop is None: + return None + + if self.p == -1: + self.fillBuffer() + + #System.out.println("stop: "+stop); + #if ( start instanceof CommonTree ) + # System.out.print("toString: "+((CommonTree)start).getToken()+", "); + #else + # System.out.println(start); + #if ( stop instanceof CommonTree ) + # System.out.println(((CommonTree)stop).getToken()); + #else + # System.out.println(stop); + + # if we have the token stream, use that to dump text in order + if self.tokens is not None: + beginTokenIndex = self.adaptor.getTokenStartIndex(start) + endTokenIndex = self.adaptor.getTokenStopIndex(stop) + + # if it's a tree, use start/stop index from start node + # else use token range from start/stop nodes + if self.adaptor.getType(stop) == UP: + endTokenIndex = self.adaptor.getTokenStopIndex(start) + + elif self.adaptor.getType(stop) == EOF: + endTokenIndex = self.size() -2 # don't use EOF + + return self.tokens.toString(beginTokenIndex, endTokenIndex) + + # walk nodes looking for start + i, t = 0, None + for i, t in enumerate(self.nodes): + if t == start: + break + + # now walk until we see stop, filling string buffer with text + buf = [] + t = self.nodes[i] + while t != stop: + text = self.adaptor.getText(t) + if text is None: + text = " " + self.adaptor.getType(t) + + buf.append(text) + i += 1 + t = self.nodes[i] + + # include stop node too + text = self.adaptor.getText(stop) + if text is None: + text = " " +self.adaptor.getType(stop) + + buf.append(text) + + return ''.join(buf) + + + ## iterator interface + def __iter__(self): + if self.p == -1: + self.fillBuffer() + + for node in self.nodes: + yield node + + +############################################################################# +# +# tree parser +# +############################################################################# + +class TreeParser(BaseRecognizer): + """@brief Baseclass for generated tree parsers. + + A parser for a stream of tree nodes. "tree grammars" result in a subclass + of this. All the error reporting and recovery is shared with Parser via + the BaseRecognizer superclass. + """ + + def __init__(self, input, state=None): + BaseRecognizer.__init__(self, state) + + self.input = None + self.setTreeNodeStream(input) + + + def reset(self): + BaseRecognizer.reset(self) # reset all recognizer state variables + if self.input is not None: + self.input.seek(0) # rewind the input + + + def setTreeNodeStream(self, input): + """Set the input stream""" + + self.input = input + + + def getTreeNodeStream(self): + return self.input + + + def getSourceName(self): + return self.input.getSourceName() + + + def getCurrentInputSymbol(self, input): + return input.LT(1) + + + def getMissingSymbol(self, input, e, expectedTokenType, follow): + tokenText = "" + return CommonTree(CommonToken(type=expectedTokenType, text=tokenText)) + + + # precompiled regex used by inContext + dotdot = ".*[^.]\\.\\.[^.].*" + doubleEtc = ".*\\.\\.\\.\\s+\\.\\.\\..*" + dotdotPattern = re.compile(dotdot) + doubleEtcPattern = re.compile(doubleEtc) + + def inContext(self, context, adaptor=None, tokenName=None, t=None): + """Check if current node in input has a context. + + Context means sequence of nodes towards root of tree. For example, + you might say context is "MULT" which means my parent must be MULT. + "CLASS VARDEF" says current node must be child of a VARDEF and whose + parent is a CLASS node. You can use "..." to mean zero-or-more nodes. + "METHOD ... VARDEF" means my parent is VARDEF and somewhere above + that is a METHOD node. The first node in the context is not + necessarily the root. The context matcher stops matching and returns + true when it runs out of context. There is no way to force the first + node to be the root. + """ + + return _inContext( + self.input.getTreeAdaptor(), self.getTokenNames(), + self.input.LT(1), context) + + @classmethod + def _inContext(cls, adaptor, tokenNames, t, context): + """The worker for inContext. + + It's static and full of parameters for testing purposes. + """ + + if cls.dotdotPattern.match(context): + # don't allow "..", must be "..." + raise ValueError("invalid syntax: ..") + + if cls.doubleEtcPattern.match(context): + # don't allow double "..." + raise ValueError("invalid syntax: ... ...") + + # ensure spaces around ... + context = context.replace("...", " ... ") + context = context.strip() + nodes = context.split() + + ni = len(nodes) - 1 + t = adaptor.getParent(t) + while ni >= 0 and t is not None: + if nodes[ni] == "...": + # walk upwards until we see nodes[ni-1] then continue walking + if ni == 0: + # ... at start is no-op + return True + goal = nodes[ni-1] + ancestor = cls._getAncestor(adaptor, tokenNames, t, goal) + if ancestor is None: + return False + t = ancestor + ni -= 1 + + name = tokenNames[adaptor.getType(t)] + if name != nodes[ni]: + return False + + # advance to parent and to previous element in context node list + ni -= 1 + t = adaptor.getParent(t) + + # at root but more nodes to match + if t is None and ni >= 0: + return False + + return True + + @staticmethod + def _getAncestor(adaptor, tokenNames, t, goal): + """Helper for static inContext.""" + while t is not None: + name = tokenNames[adaptor.getType(t)] + if name == goal: + return t + t = adaptor.getParent(t) + + return None + + + def matchAny(self, ignore): # ignore stream, copy of this.input + """ + Match '.' in tree parser has special meaning. Skip node or + entire tree if node has children. If children, scan until + corresponding UP node. + """ + + self._state.errorRecovery = False + + look = self.input.LT(1) + if self.input.getTreeAdaptor().getChildCount(look) == 0: + self.input.consume() # not subtree, consume 1 node and return + return + + # current node is a subtree, skip to corresponding UP. + # must count nesting level to get right UP + level = 0 + tokenType = self.input.getTreeAdaptor().getType(look) + while tokenType != EOF and not (tokenType == UP and level==0): + self.input.consume() + look = self.input.LT(1) + tokenType = self.input.getTreeAdaptor().getType(look) + if tokenType == DOWN: + level += 1 + + elif tokenType == UP: + level -= 1 + + self.input.consume() # consume UP + + + def mismatch(self, input, ttype, follow): + """ + We have DOWN/UP nodes in the stream that have no line info; override. + plus we want to alter the exception type. Don't try to recover + from tree parser errors inline... + """ + + raise MismatchedTreeNodeException(ttype, input) + + + def getErrorHeader(self, e): + """ + Prefix error message with the grammar name because message is + always intended for the programmer because the parser built + the input tree not the user. + """ + + return (self.getGrammarFileName() + + ": node from %sline %s:%s" + % (['', "after "][e.approximateLineInfo], + e.line, + e.charPositionInLine + ) + ) + + def getErrorMessage(self, e, tokenNames): + """ + Tree parsers parse nodes they usually have a token object as + payload. Set the exception token and do the default behavior. + """ + + if isinstance(self, TreeParser): + adaptor = e.input.getTreeAdaptor() + e.token = adaptor.getToken(e.node) + if e.token is not None: # could be an UP/DOWN node + e.token = CommonToken( + type=adaptor.getType(e.node), + text=adaptor.getText(e.node) + ) + + return BaseRecognizer.getErrorMessage(self, e, tokenNames) + + + def traceIn(self, ruleName, ruleIndex): + BaseRecognizer.traceIn(self, ruleName, ruleIndex, self.input.LT(1)) + + + def traceOut(self, ruleName, ruleIndex): + BaseRecognizer.traceOut(self, ruleName, ruleIndex, self.input.LT(1)) + + +############################################################################# +# +# tree visitor +# +############################################################################# + +class TreeVisitor(object): + """Do a depth first walk of a tree, applying pre() and post() actions + we go. + """ + + def __init__(self, adaptor=None): + if adaptor is not None: + self.adaptor = adaptor + else: + self.adaptor = CommonTreeAdaptor() + + def visit(self, t, pre_action=None, post_action=None): + """Visit every node in tree t and trigger an action for each node + before/after having visited all of its children. Bottom up walk. + Execute both actions even if t has no children. Ignore return + results from transforming children since they will have altered + the child list of this node (their parent). Return result of + applying post action to this node. + + The Python version differs from the Java version by taking two + callables 'pre_action' and 'post_action' instead of a class instance + that wraps those methods. Those callables must accept a TreeNode as + their single argument and return the (potentially transformed or + replaced) TreeNode. + """ + + isNil = self.adaptor.isNil(t) + if pre_action is not None and not isNil: + # if rewritten, walk children of new t + t = pre_action(t) + + for idx in xrange(self.adaptor.getChildCount(t)): + child = self.adaptor.getChild(t, idx) + self.visit(child, pre_action, post_action) + + if post_action is not None and not isNil: + t = post_action(t) + + return t + + +############################################################################# +# +# streams for rule rewriting +# +############################################################################# + +class RewriteRuleElementStream(object): + """@brief Internal helper class. + + A generic list of elements tracked in an alternative to be used in + a -> rewrite rule. We need to subclass to fill in the next() method, + which returns either an AST node wrapped around a token payload or + an existing subtree. + + Once you start next()ing, do not try to add more elements. It will + break the cursor tracking I believe. + + @see org.antlr.runtime.tree.RewriteRuleSubtreeStream + @see org.antlr.runtime.tree.RewriteRuleTokenStream + + TODO: add mechanism to detect/puke on modification after reading from + stream + """ + + def __init__(self, adaptor, elementDescription, elements=None): + # Cursor 0..n-1. If singleElement!=null, cursor is 0 until you next(), + # which bumps it to 1 meaning no more elements. + self.cursor = 0 + + # Track single elements w/o creating a list. Upon 2nd add, alloc list + self.singleElement = None + + # The list of tokens or subtrees we are tracking + self.elements = None + + # Once a node / subtree has been used in a stream, it must be dup'd + # from then on. Streams are reset after subrules so that the streams + # can be reused in future subrules. So, reset must set a dirty bit. + # If dirty, then next() always returns a dup. + self.dirty = False + + # The element or stream description; usually has name of the token or + # rule reference that this list tracks. Can include rulename too, but + # the exception would track that info. + self.elementDescription = elementDescription + + self.adaptor = adaptor + + if isinstance(elements, (list, tuple)): + # Create a stream, but feed off an existing list + self.singleElement = None + self.elements = elements + + else: + # Create a stream with one element + self.add(elements) + + + def reset(self): + """ + Reset the condition of this stream so that it appears we have + not consumed any of its elements. Elements themselves are untouched. + Once we reset the stream, any future use will need duplicates. Set + the dirty bit. + """ + + self.cursor = 0 + self.dirty = True + + + def add(self, el): + if el is None: + return + + if self.elements is not None: # if in list, just add + self.elements.append(el) + return + + if self.singleElement is None: # no elements yet, track w/o list + self.singleElement = el + return + + # adding 2nd element, move to list + self.elements = [] + self.elements.append(self.singleElement) + self.singleElement = None + self.elements.append(el) + + + def nextTree(self): + """ + Return the next element in the stream. If out of elements, throw + an exception unless size()==1. If size is 1, then return elements[0]. + + Return a duplicate node/subtree if stream is out of elements and + size==1. If we've already used the element, dup (dirty bit set). + """ + + if (self.dirty + or (self.cursor >= len(self) and len(self) == 1) + ): + # if out of elements and size is 1, dup + el = self._next() + return self.dup(el) + + # test size above then fetch + el = self._next() + return el + + + def _next(self): + """ + do the work of getting the next element, making sure that it's + a tree node or subtree. Deal with the optimization of single- + element list versus list of size > 1. Throw an exception + if the stream is empty or we're out of elements and size>1. + protected so you can override in a subclass if necessary. + """ + + if len(self) == 0: + raise RewriteEmptyStreamException(self.elementDescription) + + if self.cursor >= len(self): # out of elements? + if len(self) == 1: # if size is 1, it's ok; return and we'll dup + return self.toTree(self.singleElement) + + # out of elements and size was not 1, so we can't dup + raise RewriteCardinalityException(self.elementDescription) + + # we have elements + if self.singleElement is not None: + self.cursor += 1 # move cursor even for single element list + return self.toTree(self.singleElement) + + # must have more than one in list, pull from elements + o = self.toTree(self.elements[self.cursor]) + self.cursor += 1 + return o + + + def dup(self, el): + """ + When constructing trees, sometimes we need to dup a token or AST + subtree. Dup'ing a token means just creating another AST node + around it. For trees, you must call the adaptor.dupTree() unless + the element is for a tree root; then it must be a node dup. + """ + + raise NotImplementedError + + + def toTree(self, el): + """ + Ensure stream emits trees; tokens must be converted to AST nodes. + AST nodes can be passed through unmolested. + """ + + return el + + + def hasNext(self): + return ( (self.singleElement is not None and self.cursor < 1) + or (self.elements is not None + and self.cursor < len(self.elements) + ) + ) + + + def size(self): + if self.singleElement is not None: + return 1 + + if self.elements is not None: + return len(self.elements) + + return 0 + + __len__ = size + + + def getDescription(self): + """Deprecated. Directly access elementDescription attribute""" + + return self.elementDescription + + +class RewriteRuleTokenStream(RewriteRuleElementStream): + """@brief Internal helper class.""" + + def toTree(self, el): + # Don't convert to a tree unless they explicitly call nextTree. + # This way we can do hetero tree nodes in rewrite. + return el + + + def nextNode(self): + t = self._next() + return self.adaptor.createWithPayload(t) + + + def nextToken(self): + return self._next() + + + def dup(self, el): + raise TypeError("dup can't be called for a token stream.") + + +class RewriteRuleSubtreeStream(RewriteRuleElementStream): + """@brief Internal helper class.""" + + def nextNode(self): + """ + Treat next element as a single node even if it's a subtree. + This is used instead of next() when the result has to be a + tree root node. Also prevents us from duplicating recently-added + children; e.g., ^(type ID)+ adds ID to type and then 2nd iteration + must dup the type node, but ID has been added. + + Referencing a rule result twice is ok; dup entire tree as + we can't be adding trees as root; e.g., expr expr. + + Hideous code duplication here with super.next(). Can't think of + a proper way to refactor. This needs to always call dup node + and super.next() doesn't know which to call: dup node or dup tree. + """ + + if (self.dirty + or (self.cursor >= len(self) and len(self) == 1) + ): + # if out of elements and size is 1, dup (at most a single node + # since this is for making root nodes). + el = self._next() + return self.adaptor.dupNode(el) + + # test size above then fetch + el = self._next() + return el + + + def dup(self, el): + return self.adaptor.dupTree(el) + + + +class RewriteRuleNodeStream(RewriteRuleElementStream): + """ + Queues up nodes matched on left side of -> in a tree parser. This is + the analog of RewriteRuleTokenStream for normal parsers. + """ + + def nextNode(self): + return self._next() + + + def toTree(self, el): + return self.adaptor.dupNode(el) + + + def dup(self, el): + # we dup every node, so don't have to worry about calling dup; short- + #circuited next() so it doesn't call. + raise TypeError("dup can't be called for a node stream.") + + +class TreeRuleReturnScope(RuleReturnScope): + """ + This is identical to the ParserRuleReturnScope except that + the start property is a tree nodes not Token object + when you are parsing trees. To be generic the tree node types + have to be Object. + """ + + def __init__(self): + self.start = None + self.tree = None + + + def getStart(self): + return self.start + + + def getTree(self): + return self.tree + diff --git a/antlr-3.1.3/runtime/Python/antlr3/treewizard.py b/antlr-3.1.3/runtime/Python/antlr3/treewizard.py new file mode 100644 index 0000000..1d8f4eb --- /dev/null +++ b/antlr-3.1.3/runtime/Python/antlr3/treewizard.py @@ -0,0 +1,614 @@ +""" @package antlr3.tree +@brief ANTLR3 runtime package, treewizard module + +A utility module to create ASTs at runtime. +See for an overview. Note that the API of the Python implementation is slightly different. + +""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +from antlr3.constants import INVALID_TOKEN_TYPE +from antlr3.tokens import CommonToken +from antlr3.tree import CommonTree, CommonTreeAdaptor + + +def computeTokenTypes(tokenNames): + """ + Compute a dict that is an inverted index of + tokenNames (which maps int token types to names). + """ + + if tokenNames is None: + return {} + + return dict((name, type) for type, name in enumerate(tokenNames)) + + +## token types for pattern parser +EOF = -1 +BEGIN = 1 +END = 2 +ID = 3 +ARG = 4 +PERCENT = 5 +COLON = 6 +DOT = 7 + +class TreePatternLexer(object): + def __init__(self, pattern): + ## The tree pattern to lex like "(A B C)" + self.pattern = pattern + + ## Index into input string + self.p = -1 + + ## Current char + self.c = None + + ## How long is the pattern in char? + self.n = len(pattern) + + ## Set when token type is ID or ARG + self.sval = None + + self.error = False + + self.consume() + + + __idStartChar = frozenset( + 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_' + ) + __idChar = __idStartChar | frozenset('0123456789') + + def nextToken(self): + self.sval = "" + while self.c != EOF: + if self.c in (' ', '\n', '\r', '\t'): + self.consume() + continue + + if self.c in self.__idStartChar: + self.sval += self.c + self.consume() + while self.c in self.__idChar: + self.sval += self.c + self.consume() + + return ID + + if self.c == '(': + self.consume() + return BEGIN + + if self.c == ')': + self.consume() + return END + + if self.c == '%': + self.consume() + return PERCENT + + if self.c == ':': + self.consume() + return COLON + + if self.c == '.': + self.consume() + return DOT + + if self.c == '[': # grab [x] as a string, returning x + self.consume() + while self.c != ']': + if self.c == '\\': + self.consume() + if self.c != ']': + self.sval += '\\' + + self.sval += self.c + + else: + self.sval += self.c + + self.consume() + + self.consume() + return ARG + + self.consume() + self.error = True + return EOF + + return EOF + + + def consume(self): + self.p += 1 + if self.p >= self.n: + self.c = EOF + + else: + self.c = self.pattern[self.p] + + +class TreePatternParser(object): + def __init__(self, tokenizer, wizard, adaptor): + self.tokenizer = tokenizer + self.wizard = wizard + self.adaptor = adaptor + self.ttype = tokenizer.nextToken() # kickstart + + + def pattern(self): + if self.ttype == BEGIN: + return self.parseTree() + + elif self.ttype == ID: + node = self.parseNode() + if self.ttype == EOF: + return node + + return None # extra junk on end + + return None + + + def parseTree(self): + if self.ttype != BEGIN: + return None + + self.ttype = self.tokenizer.nextToken() + root = self.parseNode() + if root is None: + return None + + while self.ttype in (BEGIN, ID, PERCENT, DOT): + if self.ttype == BEGIN: + subtree = self.parseTree() + self.adaptor.addChild(root, subtree) + + else: + child = self.parseNode() + if child is None: + return None + + self.adaptor.addChild(root, child) + + if self.ttype != END: + return None + + self.ttype = self.tokenizer.nextToken() + return root + + + def parseNode(self): + # "%label:" prefix + label = None + + if self.ttype == PERCENT: + self.ttype = self.tokenizer.nextToken() + if self.ttype != ID: + return None + + label = self.tokenizer.sval + self.ttype = self.tokenizer.nextToken() + if self.ttype != COLON: + return None + + self.ttype = self.tokenizer.nextToken() # move to ID following colon + + # Wildcard? + if self.ttype == DOT: + self.ttype = self.tokenizer.nextToken() + wildcardPayload = CommonToken(0, ".") + node = WildcardTreePattern(wildcardPayload) + if label is not None: + node.label = label + return node + + # "ID" or "ID[arg]" + if self.ttype != ID: + return None + + tokenName = self.tokenizer.sval + self.ttype = self.tokenizer.nextToken() + + if tokenName == "nil": + return self.adaptor.nil() + + text = tokenName + # check for arg + arg = None + if self.ttype == ARG: + arg = self.tokenizer.sval + text = arg + self.ttype = self.tokenizer.nextToken() + + # create node + treeNodeType = self.wizard.getTokenType(tokenName) + if treeNodeType == INVALID_TOKEN_TYPE: + return None + + node = self.adaptor.createFromType(treeNodeType, text) + if label is not None and isinstance(node, TreePattern): + node.label = label + + if arg is not None and isinstance(node, TreePattern): + node.hasTextArg = True + + return node + + +class TreePattern(CommonTree): + """ + When using %label:TOKENNAME in a tree for parse(), we must + track the label. + """ + + def __init__(self, payload): + CommonTree.__init__(self, payload) + + self.label = None + self.hasTextArg = None + + + def toString(self): + if self.label is not None: + return '%' + self.label + ':' + CommonTree.toString(self) + + else: + return CommonTree.toString(self) + + +class WildcardTreePattern(TreePattern): + pass + + +class TreePatternTreeAdaptor(CommonTreeAdaptor): + """This adaptor creates TreePattern objects for use during scan()""" + + def createWithPayload(self, payload): + return TreePattern(payload) + + +class TreeWizard(object): + """ + Build and navigate trees with this object. Must know about the names + of tokens so you have to pass in a map or array of token names (from which + this class can build the map). I.e., Token DECL means nothing unless the + class can translate it to a token type. + + In order to create nodes and navigate, this class needs a TreeAdaptor. + + This class can build a token type -> node index for repeated use or for + iterating over the various nodes with a particular type. + + This class works in conjunction with the TreeAdaptor rather than moving + all this functionality into the adaptor. An adaptor helps build and + navigate trees using methods. This class helps you do it with string + patterns like "(A B C)". You can create a tree from that pattern or + match subtrees against it. + """ + + def __init__(self, adaptor=None, tokenNames=None, typeMap=None): + self.adaptor = adaptor + if typeMap is None: + self.tokenNameToTypeMap = computeTokenTypes(tokenNames) + + else: + if tokenNames is not None: + raise ValueError("Can't have both tokenNames and typeMap") + + self.tokenNameToTypeMap = typeMap + + + def getTokenType(self, tokenName): + """Using the map of token names to token types, return the type.""" + + try: + return self.tokenNameToTypeMap[tokenName] + except KeyError: + return INVALID_TOKEN_TYPE + + + def create(self, pattern): + """ + Create a tree or node from the indicated tree pattern that closely + follows ANTLR tree grammar tree element syntax: + + (root child1 ... child2). + + You can also just pass in a node: ID + + Any node can have a text argument: ID[foo] + (notice there are no quotes around foo--it's clear it's a string). + + nil is a special name meaning "give me a nil node". Useful for + making lists: (nil A B C) is a list of A B C. + """ + + tokenizer = TreePatternLexer(pattern) + parser = TreePatternParser(tokenizer, self, self.adaptor) + return parser.pattern() + + + def index(self, tree): + """Walk the entire tree and make a node name to nodes mapping. + + For now, use recursion but later nonrecursive version may be + more efficient. Returns a dict int -> list where the list is + of your AST node type. The int is the token type of the node. + """ + + m = {} + self._index(tree, m) + return m + + + def _index(self, t, m): + """Do the work for index""" + + if t is None: + return + + ttype = self.adaptor.getType(t) + elements = m.get(ttype) + if elements is None: + m[ttype] = elements = [] + + elements.append(t) + for i in range(self.adaptor.getChildCount(t)): + child = self.adaptor.getChild(t, i) + self._index(child, m) + + + def find(self, tree, what): + """Return a list of matching token. + + what may either be an integer specifzing the token type to find or + a string with a pattern that must be matched. + + """ + + if isinstance(what, (int, long)): + return self._findTokenType(tree, what) + + elif isinstance(what, basestring): + return self._findPattern(tree, what) + + else: + raise TypeError("'what' must be string or integer") + + + def _findTokenType(self, t, ttype): + """Return a List of tree nodes with token type ttype""" + + nodes = [] + + def visitor(tree, parent, childIndex, labels): + nodes.append(tree) + + self.visit(t, ttype, visitor) + + return nodes + + + def _findPattern(self, t, pattern): + """Return a List of subtrees matching pattern.""" + + subtrees = [] + + # Create a TreePattern from the pattern + tokenizer = TreePatternLexer(pattern) + parser = TreePatternParser(tokenizer, self, TreePatternTreeAdaptor()) + tpattern = parser.pattern() + + # don't allow invalid patterns + if (tpattern is None or tpattern.isNil() + or isinstance(tpattern, WildcardTreePattern)): + return None + + rootTokenType = tpattern.getType() + + def visitor(tree, parent, childIndex, label): + if self._parse(tree, tpattern, None): + subtrees.append(tree) + + self.visit(t, rootTokenType, visitor) + + return subtrees + + + def visit(self, tree, what, visitor): + """Visit every node in tree matching what, invoking the visitor. + + If what is a string, it is parsed as a pattern and only matching + subtrees will be visited. + The implementation uses the root node of the pattern in combination + with visit(t, ttype, visitor) so nil-rooted patterns are not allowed. + Patterns with wildcard roots are also not allowed. + + If what is an integer, it is used as a token type and visit will match + all nodes of that type (this is faster than the pattern match). + The labels arg of the visitor action method is never set (it's None) + since using a token type rather than a pattern doesn't let us set a + label. + """ + + if isinstance(what, (int, long)): + self._visitType(tree, None, 0, what, visitor) + + elif isinstance(what, basestring): + self._visitPattern(tree, what, visitor) + + else: + raise TypeError("'what' must be string or integer") + + + def _visitType(self, t, parent, childIndex, ttype, visitor): + """Do the recursive work for visit""" + + if t is None: + return + + if self.adaptor.getType(t) == ttype: + visitor(t, parent, childIndex, None) + + for i in range(self.adaptor.getChildCount(t)): + child = self.adaptor.getChild(t, i) + self._visitType(child, t, i, ttype, visitor) + + + def _visitPattern(self, tree, pattern, visitor): + """ + For all subtrees that match the pattern, execute the visit action. + """ + + # Create a TreePattern from the pattern + tokenizer = TreePatternLexer(pattern) + parser = TreePatternParser(tokenizer, self, TreePatternTreeAdaptor()) + tpattern = parser.pattern() + + # don't allow invalid patterns + if (tpattern is None or tpattern.isNil() + or isinstance(tpattern, WildcardTreePattern)): + return + + rootTokenType = tpattern.getType() + + def rootvisitor(tree, parent, childIndex, labels): + labels = {} + if self._parse(tree, tpattern, labels): + visitor(tree, parent, childIndex, labels) + + self.visit(tree, rootTokenType, rootvisitor) + + + def parse(self, t, pattern, labels=None): + """ + Given a pattern like (ASSIGN %lhs:ID %rhs:.) with optional labels + on the various nodes and '.' (dot) as the node/subtree wildcard, + return true if the pattern matches and fill the labels Map with + the labels pointing at the appropriate nodes. Return false if + the pattern is malformed or the tree does not match. + + If a node specifies a text arg in pattern, then that must match + for that node in t. + """ + + tokenizer = TreePatternLexer(pattern) + parser = TreePatternParser(tokenizer, self, TreePatternTreeAdaptor()) + tpattern = parser.pattern() + + return self._parse(t, tpattern, labels) + + + def _parse(self, t1, tpattern, labels): + """ + Do the work for parse. Check to see if the tpattern fits the + structure and token types in t1. Check text if the pattern has + text arguments on nodes. Fill labels map with pointers to nodes + in tree matched against nodes in pattern with labels. + """ + + # make sure both are non-null + if t1 is None or tpattern is None: + return False + + # check roots (wildcard matches anything) + if not isinstance(tpattern, WildcardTreePattern): + if self.adaptor.getType(t1) != tpattern.getType(): + return False + + # if pattern has text, check node text + if (tpattern.hasTextArg + and self.adaptor.getText(t1) != tpattern.getText()): + return False + + if tpattern.label is not None and labels is not None: + # map label in pattern to node in t1 + labels[tpattern.label] = t1 + + # check children + n1 = self.adaptor.getChildCount(t1) + n2 = tpattern.getChildCount() + if n1 != n2: + return False + + for i in range(n1): + child1 = self.adaptor.getChild(t1, i) + child2 = tpattern.getChild(i) + if not self._parse(child1, child2, labels): + return False + + return True + + + def equals(self, t1, t2, adaptor=None): + """ + Compare t1 and t2; return true if token types/text, structure match + exactly. + The trees are examined in their entirety so that (A B) does not match + (A B C) nor (A (B C)). + """ + + if adaptor is None: + adaptor = self.adaptor + + return self._equals(t1, t2, adaptor) + + + def _equals(self, t1, t2, adaptor): + # make sure both are non-null + if t1 is None or t2 is None: + return False + + # check roots + if adaptor.getType(t1) != adaptor.getType(t2): + return False + + if adaptor.getText(t1) != adaptor.getText(t2): + return False + + # check children + n1 = adaptor.getChildCount(t1) + n2 = adaptor.getChildCount(t2) + if n1 != n2: + return False + + for i in range(n1): + child1 = adaptor.getChild(t1, i) + child2 = adaptor.getChild(t2, i) + if not self._equals(child1, child2, adaptor): + return False + + return True diff --git a/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/__init__.py b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/__init__.py new file mode 100644 index 0000000..8ed6f2f --- /dev/null +++ b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/__init__.py @@ -0,0 +1,171 @@ +""" @package antlr3 +@brief ANTLR3 runtime package + +This module contains all support classes, which are needed to use recognizers +generated by ANTLR3. + +@mainpage + +\note Please be warned that the line numbers in the API documentation do not +match the real locations in the source code of the package. This is an +unintended artifact of doxygen, which I could only convince to use the +correct module names by concatenating all files from the package into a single +module file... + +Here is a little overview over the most commonly used classes provided by +this runtime: + +@section recognizers Recognizers + +These recognizers are baseclasses for the code which is generated by ANTLR3. + +- BaseRecognizer: Base class with common recognizer functionality. +- Lexer: Base class for lexers. +- Parser: Base class for parsers. +- tree.TreeParser: Base class for %tree parser. + +@section streams Streams + +Each recognizer pulls its input from one of the stream classes below. Streams +handle stuff like buffering, look-ahead and seeking. + +A character stream is usually the first element in the pipeline of a typical +ANTLR3 application. It is used as the input for a Lexer. + +- ANTLRStringStream: Reads from a string objects. The input should be a unicode + object, or ANTLR3 will have trouble decoding non-ascii data. +- ANTLRFileStream: Opens a file and read the contents, with optional character + decoding. +- ANTLRInputStream: Reads the date from a file-like object, with optional + character decoding. + +A Parser needs a TokenStream as input (which in turn is usually fed by a +Lexer): + +- CommonTokenStream: A basic and most commonly used TokenStream + implementation. +- TokenRewriteStream: A modification of CommonTokenStream that allows the + stream to be altered (by the Parser). See the 'tweak' example for a usecase. + +And tree.TreeParser finally fetches its input from a tree.TreeNodeStream: + +- tree.CommonTreeNodeStream: A basic and most commonly used tree.TreeNodeStream + implementation. + + +@section tokenstrees Tokens and Trees + +A Lexer emits Token objects which are usually buffered by a TokenStream. A +Parser can build a Tree, if the output=AST option has been set in the grammar. + +The runtime provides these Token implementations: + +- CommonToken: A basic and most commonly used Token implementation. +- ClassicToken: A Token object as used in ANTLR 2.x, used to %tree + construction. + +Tree objects are wrapper for Token objects. + +- tree.CommonTree: A basic and most commonly used Tree implementation. + +A tree.TreeAdaptor is used by the parser to create tree.Tree objects for the +input Token objects. + +- tree.CommonTreeAdaptor: A basic and most commonly used tree.TreeAdaptor +implementation. + + +@section Exceptions + +RecognitionException are generated, when a recognizer encounters incorrect +or unexpected input. + +- RecognitionException + - MismatchedRangeException + - MismatchedSetException + - MismatchedNotSetException + . + - MismatchedTokenException + - MismatchedTreeNodeException + - NoViableAltException + - EarlyExitException + - FailedPredicateException + . +. + +A tree.RewriteCardinalityException is raised, when the parsers hits a +cardinality mismatch during AST construction. Although this is basically a +bug in your grammar, it can only be detected at runtime. + +- tree.RewriteCardinalityException + - tree.RewriteEarlyExitException + - tree.RewriteEmptyStreamException + . +. + +""" + +# tree.RewriteRuleElementStream +# tree.RewriteRuleSubtreeStream +# tree.RewriteRuleTokenStream +# CharStream +# DFA +# TokenSource + +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +__version__ = '3.1.3' + +def version_str_to_tuple(version_str): + import re + import sys + + if version_str == 'HEAD': + return (sys.maxint, sys.maxint, sys.maxint, sys.maxint) + + m = re.match(r'(\d+)\.(\d+)(\.(\d+))?(b(\d+))?', version_str) + if m is None: + raise ValueError("Bad version string %r" % version_str) + + major = int(m.group(1)) + minor = int(m.group(2)) + patch = int(m.group(4) or 0) + beta = int(m.group(6) or sys.maxint) + + return (major, minor, patch, beta) + + +runtime_version_str = __version__ +runtime_version = version_str_to_tuple(runtime_version_str) + + +from constants import * +from dfa import * +from exceptions import * +from recognizers import * +from streams import * +from tokens import * diff --git a/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/compat.py b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/compat.py new file mode 100644 index 0000000..b29afca --- /dev/null +++ b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/compat.py @@ -0,0 +1,48 @@ +"""Compatibility stuff""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +try: + set = set + frozenset = frozenset +except NameError: + from sets import Set as set, ImmutableSet as frozenset + + +try: + reversed = reversed +except NameError: + def reversed(l): + l = l[:] + l.reverse() + return l + + diff --git a/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/constants.py b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/constants.py new file mode 100644 index 0000000..bf4a47a --- /dev/null +++ b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/constants.py @@ -0,0 +1,57 @@ +"""ANTLR3 runtime package""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +EOF = -1 + +## All tokens go to the parser (unless skip() is called in that rule) +# on a particular "channel". The parser tunes to a particular channel +# so that whitespace etc... can go to the parser on a "hidden" channel. +DEFAULT_CHANNEL = 0 + +## Anything on different channel than DEFAULT_CHANNEL is not parsed +# by parser. +HIDDEN_CHANNEL = 99 + +# Predefined token types +EOR_TOKEN_TYPE = 1 + +## +# imaginary tree navigation type; traverse "get child" link +DOWN = 2 +## +#imaginary tree navigation type; finish with a child list +UP = 3 + +MIN_TOKEN_TYPE = UP+1 + +INVALID_TOKEN_TYPE = 0 + diff --git a/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/debug.py b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/debug.py new file mode 100644 index 0000000..f20d2d4 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/debug.py @@ -0,0 +1,1137 @@ +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2009 Terence Parr +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +import socket +from antlr3 import Parser, TokenStream, RecognitionException, Token +from antlr3.tree import CommonTreeAdaptor, TreeAdaptor, Tree + +class DebugParser(Parser): + def __init__(self, stream, state=None, dbg=None, *args, **kwargs): + # wrap token stream in DebugTokenStream (unless user already did so). + if not isinstance(stream, DebugTokenStream): + stream = DebugTokenStream(stream, dbg) + + super(DebugParser, self).__init__(stream, state, *args, **kwargs) + + # Who to notify when events in the parser occur. + self._dbg = None + + self.setDebugListener(dbg) + + + def setDebugListener(self, dbg): + """Provide a new debug event listener for this parser. Notify the + input stream too that it should send events to this listener. + """ + + if hasattr(self.input, 'dbg'): + self.input.dbg = dbg + + self._dbg = dbg + + def getDebugListener(self): + return self._dbg + + dbg = property(getDebugListener, setDebugListener) + + + def beginResync(self): + self._dbg.beginResync() + + + def endResync(self): + self._dbg.endResync() + + + def beginBacktrack(self, level): + self._dbg.beginBacktrack(level) + + + def endBacktrack(self, level, successful): + self._dbg.endBacktrack(level,successful) + + + def reportError(self, exc): + if isinstance(exc, RecognitionException): + self._dbg.recognitionException(exc) + + else: + traceback.print_exc(exc) + + +class DebugTokenStream(TokenStream): + def __init__(self, input, dbg=None): + self.input = input + self.initialStreamState = True + # Track the last mark() call result value for use in rewind(). + self.lastMarker = None + + self._dbg = None + self.setDebugListener(dbg) + + # force TokenStream to get at least first valid token + # so we know if there are any hidden tokens first in the stream + self.input.LT(1) + + + def getDebugListener(self): + return self._dbg + + def setDebugListener(self, dbg): + self._dbg = dbg + + dbg = property(getDebugListener, setDebugListener) + + + def consume(self): + if self.initialStreamState: + self.consumeInitialHiddenTokens() + + a = self.input.index() + t = self.input.LT(1) + self.input.consume() + b = self.input.index() + self._dbg.consumeToken(t) + + if b > a+1: + # then we consumed more than one token; must be off channel tokens + for idx in range(a+1, b): + self._dbg.consumeHiddenToken(self.input.get(idx)); + + + def consumeInitialHiddenTokens(self): + """consume all initial off-channel tokens""" + + firstOnChannelTokenIndex = self.input.index() + for idx in range(firstOnChannelTokenIndex): + self._dbg.consumeHiddenToken(self.input.get(idx)) + + self.initialStreamState = False + + + def LT(self, i): + if self.initialStreamState: + self.consumeInitialHiddenTokens() + + t = self.input.LT(i) + self._dbg.LT(i, t) + return t + + + def LA(self, i): + if self.initialStreamState: + self.consumeInitialHiddenTokens() + + t = self.input.LT(i) + self._dbg.LT(i, t) + return t.type + + + def get(self, i): + return self.input.get(i) + + + def index(self): + return self.input.index() + + + def mark(self): + self.lastMarker = self.input.mark() + self._dbg.mark(self.lastMarker) + return self.lastMarker + + + def rewind(self, marker=None): + self._dbg.rewind(marker) + self.input.rewind(marker) + + + def release(self, marker): + pass + + + def seek(self, index): + # TODO: implement seek in dbg interface + # self._dbg.seek(index); + self.input.seek(index) + + + def size(self): + return self.input.size() + + + def getTokenSource(self): + return self.input.getTokenSource() + + + def getSourceName(self): + return self.getTokenSource().getSourceName() + + + def toString(self, start=None, stop=None): + return self.input.toString(start, stop) + + +class DebugTreeAdaptor(TreeAdaptor): + """A TreeAdaptor proxy that fires debugging events to a DebugEventListener + delegate and uses the TreeAdaptor delegate to do the actual work. All + AST events are triggered by this adaptor; no code gen changes are needed + in generated rules. Debugging events are triggered *after* invoking + tree adaptor routines. + + Trees created with actions in rewrite actions like "-> ^(ADD {foo} {bar})" + cannot be tracked as they might not use the adaptor to create foo, bar. + The debug listener has to deal with tree node IDs for which it did + not see a createNode event. A single node is sufficient even + if it represents a whole tree. + """ + + def __init__(self, dbg, adaptor): + self.dbg = dbg + self.adaptor = adaptor + + + def createWithPayload(self, payload): + if payload.getTokenIndex() < 0: + # could be token conjured up during error recovery + return self.createFromType(payload.getType(), payload.getText()) + + node = self.adaptor.createWithPayload(payload) + self.dbg.createNode(node, payload) + return node + + def createFromToken(self, tokenType, fromToken, text=None): + node = self.adaptor.createFromToken(tokenType, fromToken, text) + self.dbg.createNode(node) + return node + + def createFromType(self, tokenType, text): + node = self.adaptor.createFromType(tokenType, text) + self.dbg.createNode(node) + return node + + + def errorNode(self, input, start, stop, exc): + node = selfadaptor.errorNode(input, start, stop, exc) + if node is not None: + dbg.errorNode(node) + + return node + + + def dupTree(self, tree): + t = self.adaptor.dupTree(tree) + # walk the tree and emit create and add child events + # to simulate what dupTree has done. dupTree does not call this debug + # adapter so I must simulate. + self.simulateTreeConstruction(t) + return t + + + def simulateTreeConstruction(self, t): + """^(A B C): emit create A, create B, add child, ...""" + self.dbg.createNode(t) + for i in range(self.adaptor.getChildCount(t)): + child = self.adaptor.getChild(t, i) + self.simulateTreeConstruction(child) + self.dbg.addChild(t, child) + + + def dupNode(self, treeNode): + d = self.adaptor.dupNode(treeNode) + self.dbg.createNode(d) + return d + + + def nil(self): + node = self.adaptor.nil() + self.dbg.nilNode(node) + return node + + + def isNil(self, tree): + return self.adaptor.isNil(tree) + + + def addChild(self, t, child): + if isinstance(child, Token): + n = self.createWithPayload(child) + self.addChild(t, n) + + else: + if t is None or child is None: + return + + self.adaptor.addChild(t, child) + self.dbg.addChild(t, child) + + def becomeRoot(self, newRoot, oldRoot): + if isinstance(newRoot, Token): + n = self.createWithPayload(newRoot) + self.adaptor.becomeRoot(n, oldRoot) + else: + n = self.adaptor.becomeRoot(newRoot, oldRoot) + + self.dbg.becomeRoot(newRoot, oldRoot) + return n + + + def rulePostProcessing(self, root): + return self.adaptor.rulePostProcessing(root) + + + def getType(self, t): + return self.adaptor.getType(t) + + + def setType(self, t, type): + self.adaptor.setType(t, type) + + + def getText(self, t): + return self.adaptor.getText(t) + + + def setText(self, t, text): + self.adaptor.setText(t, text) + + + def getToken(self, t): + return self.adaptor.getToken(t) + + + def setTokenBoundaries(self, t, startToken, stopToken): + self.adaptor.setTokenBoundaries(t, startToken, stopToken) + if t is not None and startToken is not None and stopToken is not None: + self.dbg.setTokenBoundaries( + t, startToken.getTokenIndex(), + stopToken.getTokenIndex()) + + + def getTokenStartIndex(self, t): + return self.adaptor.getTokenStartIndex(t) + + + def getTokenStopIndex(self, t): + return self.adaptor.getTokenStopIndex(t) + + + def getChild(self, t, i): + return self.adaptor.getChild(t, i) + + + def setChild(self, t, i, child): + self.adaptor.setChild(t, i, child) + + + def deleteChild(self, t, i): + return self.adaptor.deleteChild(t, i) + + + def getChildCount(self, t): + return self.adaptor.getChildCount(t) + + + def getUniqueID(self, node): + return self.adaptor.getUniqueID(node) + + + def getParent(self, t): + return self.adaptor.getParent(t) + + + def getChildIndex(self, t): + return self.adaptor.getChildIndex(t) + + + def setParent(self, t, parent): + self.adaptor.setParent(t, parent) + + + def setChildIndex(self, t, index): + self.adaptor.setChildIndex(t, index) + + + def replaceChildren(self, parent, startChildIndex, stopChildIndex, t): + self.adaptor.replaceChildren(parent, startChildIndex, stopChildIndex, t) + + + ## support + + def getDebugListener(self): + return dbg + + def setDebugListener(self, dbg): + self.dbg = dbg + + + def getTreeAdaptor(self): + return self.adaptor + + + +class DebugEventListener(object): + """All debugging events that a recognizer can trigger. + + I did not create a separate AST debugging interface as it would create + lots of extra classes and DebugParser has a dbg var defined, which makes + it hard to change to ASTDebugEventListener. I looked hard at this issue + and it is easier to understand as one monolithic event interface for all + possible events. Hopefully, adding ST debugging stuff won't be bad. Leave + for future. 4/26/2006. + """ + + # Moved to version 2 for v3.1: added grammar name to enter/exit Rule + PROTOCOL_VERSION = "2" + + def enterRule(self, grammarFileName, ruleName): + """The parser has just entered a rule. No decision has been made about + which alt is predicted. This is fired AFTER init actions have been + executed. Attributes are defined and available etc... + The grammarFileName allows composite grammars to jump around among + multiple grammar files. + """ + + pass + + + def enterAlt(self, alt): + """Because rules can have lots of alternatives, it is very useful to + know which alt you are entering. This is 1..n for n alts. + """ + pass + + + def exitRule(self, grammarFileName, ruleName): + """This is the last thing executed before leaving a rule. It is + executed even if an exception is thrown. This is triggered after + error reporting and recovery have occurred (unless the exception is + not caught in this rule). This implies an "exitAlt" event. + The grammarFileName allows composite grammars to jump around among + multiple grammar files. + """ + pass + + + def enterSubRule(self, decisionNumber): + """Track entry into any (...) subrule other EBNF construct""" + pass + + + def exitSubRule(self, decisionNumber): + pass + + + def enterDecision(self, decisionNumber): + """Every decision, fixed k or arbitrary, has an enter/exit event + so that a GUI can easily track what LT/consume events are + associated with prediction. You will see a single enter/exit + subrule but multiple enter/exit decision events, one for each + loop iteration. + """ + pass + + + def exitDecision(self, decisionNumber): + pass + + + def consumeToken(self, t): + """An input token was consumed; matched by any kind of element. + Trigger after the token was matched by things like match(), matchAny(). + """ + pass + + + def consumeHiddenToken(self, t): + """An off-channel input token was consumed. + Trigger after the token was matched by things like match(), matchAny(). + (unless of course the hidden token is first stuff in the input stream). + """ + pass + + + def LT(self, i, t): + """Somebody (anybody) looked ahead. Note that this actually gets + triggered by both LA and LT calls. The debugger will want to know + which Token object was examined. Like consumeToken, this indicates + what token was seen at that depth. A remote debugger cannot look + ahead into a file it doesn't have so LT events must pass the token + even if the info is redundant. + """ + pass + + + def mark(self, marker): + """The parser is going to look arbitrarily ahead; mark this location, + the token stream's marker is sent in case you need it. + """ + pass + + + def rewind(self, marker=None): + """After an arbitrairly long lookahead as with a cyclic DFA (or with + any backtrack), this informs the debugger that stream should be + rewound to the position associated with marker. + + """ + pass + + + def beginBacktrack(self, level): + pass + + + def endBacktrack(self, level, successful): + pass + + + def location(self, line, pos): + """To watch a parser move through the grammar, the parser needs to + inform the debugger what line/charPos it is passing in the grammar. + For now, this does not know how to switch from one grammar to the + other and back for island grammars etc... + + This should also allow breakpoints because the debugger can stop + the parser whenever it hits this line/pos. + """ + pass + + + def recognitionException(self, e): + """A recognition exception occurred such as NoViableAltException. I made + this a generic event so that I can alter the exception hierachy later + without having to alter all the debug objects. + + Upon error, the stack of enter rule/subrule must be properly unwound. + If no viable alt occurs it is within an enter/exit decision, which + also must be rewound. Even the rewind for each mark must be unwount. + In the Java target this is pretty easy using try/finally, if a bit + ugly in the generated code. The rewind is generated in DFA.predict() + actually so no code needs to be generated for that. For languages + w/o this "finally" feature (C++?), the target implementor will have + to build an event stack or something. + + Across a socket for remote debugging, only the RecognitionException + data fields are transmitted. The token object or whatever that + caused the problem was the last object referenced by LT. The + immediately preceding LT event should hold the unexpected Token or + char. + + Here is a sample event trace for grammar: + + b : C ({;}A|B) // {;} is there to prevent A|B becoming a set + | D + ; + + The sequence for this rule (with no viable alt in the subrule) for + input 'c c' (there are 3 tokens) is: + + commence + LT(1) + enterRule b + location 7 1 + enter decision 3 + LT(1) + exit decision 3 + enterAlt1 + location 7 5 + LT(1) + consumeToken [c/<4>,1:0] + location 7 7 + enterSubRule 2 + enter decision 2 + LT(1) + LT(1) + recognitionException NoViableAltException 2 1 2 + exit decision 2 + exitSubRule 2 + beginResync + LT(1) + consumeToken [c/<4>,1:1] + LT(1) + endResync + LT(-1) + exitRule b + terminate + """ + pass + + + def beginResync(self): + """Indicates the recognizer is about to consume tokens to resynchronize + the parser. Any consume events from here until the recovered event + are not part of the parse--they are dead tokens. + """ + pass + + + def endResync(self): + """Indicates that the recognizer has finished consuming tokens in order + to resychronize. There may be multiple beginResync/endResync pairs + before the recognizer comes out of errorRecovery mode (in which + multiple errors are suppressed). This will be useful + in a gui where you want to probably grey out tokens that are consumed + but not matched to anything in grammar. Anything between + a beginResync/endResync pair was tossed out by the parser. + """ + pass + + + def semanticPredicate(self, result, predicate): + """A semantic predicate was evaluate with this result and action text""" + pass + + + def commence(self): + """Announce that parsing has begun. Not technically useful except for + sending events over a socket. A GUI for example will launch a thread + to connect and communicate with a remote parser. The thread will want + to notify the GUI when a connection is made. ANTLR parsers + trigger this upon entry to the first rule (the ruleLevel is used to + figure this out). + """ + pass + + + def terminate(self): + """Parsing is over; successfully or not. Mostly useful for telling + remote debugging listeners that it's time to quit. When the rule + invocation level goes to zero at the end of a rule, we are done + parsing. + """ + pass + + + ## T r e e P a r s i n g + + def consumeNode(self, t): + """Input for a tree parser is an AST, but we know nothing for sure + about a node except its type and text (obtained from the adaptor). + This is the analog of the consumeToken method. Again, the ID is + the hashCode usually of the node so it only works if hashCode is + not implemented. If the type is UP or DOWN, then + the ID is not really meaningful as it's fixed--there is + just one UP node and one DOWN navigation node. + """ + pass + + + def LT(self, i, t): + """The tree parser lookedahead. If the type is UP or DOWN, + then the ID is not really meaningful as it's fixed--there is + just one UP node and one DOWN navigation node. + """ + pass + + + + ## A S T E v e n t s + + def nilNode(self, t): + """A nil was created (even nil nodes have a unique ID... + they are not "null" per se). As of 4/28/2006, this + seems to be uniquely triggered when starting a new subtree + such as when entering a subrule in automatic mode and when + building a tree in rewrite mode. + + If you are receiving this event over a socket via + RemoteDebugEventSocketListener then only t.ID is set. + """ + pass + + + def errorNode(self, t): + """Upon syntax error, recognizers bracket the error with an error node + if they are building ASTs. + """ + pass + + + def createNode(self, node, token=None): + """Announce a new node built from token elements such as type etc... + + If you are receiving this event over a socket via + RemoteDebugEventSocketListener then only t.ID, type, text are + set. + """ + pass + + + def becomeRoot(self, newRoot, oldRoot): + """Make a node the new root of an existing root. + + Note: the newRootID parameter is possibly different + than the TreeAdaptor.becomeRoot() newRoot parameter. + In our case, it will always be the result of calling + TreeAdaptor.becomeRoot() and not root_n or whatever. + + The listener should assume that this event occurs + only when the current subrule (or rule) subtree is + being reset to newRootID. + + If you are receiving this event over a socket via + RemoteDebugEventSocketListener then only IDs are set. + + @see antlr3.tree.TreeAdaptor.becomeRoot() + """ + pass + + + def addChild(self, root, child): + """Make childID a child of rootID. + + If you are receiving this event over a socket via + RemoteDebugEventSocketListener then only IDs are set. + + @see antlr3.tree.TreeAdaptor.addChild() + """ + pass + + + def setTokenBoundaries(self, t, tokenStartIndex, tokenStopIndex): + """Set the token start/stop token index for a subtree root or node. + + If you are receiving this event over a socket via + RemoteDebugEventSocketListener then only t.ID is set. + """ + pass + + +class BlankDebugEventListener(DebugEventListener): + """A blank listener that does nothing; useful for real classes so + they don't have to have lots of blank methods and are less + sensitive to updates to debug interface. + + Note: this class is identical to DebugEventListener and exists purely + for compatibility with Java. + """ + pass + + +class TraceDebugEventListener(DebugEventListener): + """A listener that simply records text representations of the events. + + Useful for debugging the debugging facility ;) + + Subclasses can override the record() method (which defaults to printing to + stdout) to record the events in a different way. + """ + + def __init__(self, adaptor=None): + super(TraceDebugEventListener, self).__init__() + + if adaptor is None: + adaptor = CommonTreeAdaptor() + self.adaptor = adaptor + + def record(self, event): + sys.stdout.write(event + '\n') + + def enterRule(self, grammarFileName, ruleName): + self.record("enterRule "+ruleName) + + def exitRule(self, grammarFileName, ruleName): + self.record("exitRule "+ruleName) + + def enterSubRule(self, decisionNumber): + self.record("enterSubRule") + + def exitSubRule(self, decisionNumber): + self.record("exitSubRule") + + def location(self, line, pos): + self.record("location %s:%s" % (line, pos)) + + ## Tree parsing stuff + + def consumeNode(self, t): + self.record("consumeNode %s %s %s" % ( + self.adaptor.getUniqueID(t), + self.adaptor.getText(t), + self.adaptor.getType(t))) + + def LT(self, i, t): + self.record("LT %s %s %s %s" % ( + i, + self.adaptor.getUniqueID(t), + self.adaptor.getText(t), + self.adaptor.getType(t))) + + + ## AST stuff + def nilNode(self, t): + self.record("nilNode %s" % self.adaptor.getUniqueID(t)) + + def createNode(self, t, token=None): + if token is None: + self.record("create %s: %s, %s" % ( + self.adaptor.getUniqueID(t), + self.adaptor.getText(t), + self.adaptor.getType(t))) + + else: + self.record("create %s: %s" % ( + self.adaptor.getUniqueID(t), + token.getTokenIndex())) + + def becomeRoot(self, newRoot, oldRoot): + self.record("becomeRoot %s, %s" % ( + self.adaptor.getUniqueID(newRoot), + self.adaptor.getUniqueID(oldRoot))) + + def addChild(self, root, child): + self.record("addChild %s, %s" % ( + self.adaptor.getUniqueID(root), + self.adaptor.getUniqueID(child))) + + def setTokenBoundaries(self, t, tokenStartIndex, tokenStopIndex): + self.record("setTokenBoundaries %s, %s, %s" % ( + self.adaptor.getUniqueID(t), + tokenStartIndex, tokenStopIndex)) + + +class RecordDebugEventListener(TraceDebugEventListener): + """A listener that records events as strings in an array.""" + + def __init__(self, adaptor=None): + super(RecordDebugEventListener, self).__init__(adaptor) + + self.events = [] + + def record(self, event): + self.events.append(event) + + +class DebugEventSocketProxy(DebugEventListener): + """A proxy debug event listener that forwards events over a socket to + a debugger (or any other listener) using a simple text-based protocol; + one event per line. ANTLRWorks listens on server socket with a + RemoteDebugEventSocketListener instance. These two objects must therefore + be kept in sync. New events must be handled on both sides of socket. + """ + + DEFAULT_DEBUGGER_PORT = 49100 + + def __init__(self, recognizer, adaptor=None, port=None, + debug=None): + super(DebugEventSocketProxy, self).__init__() + + self.grammarFileName = recognizer.getGrammarFileName() + + # Almost certainly the recognizer will have adaptor set, but + # we don't know how to cast it (Parser or TreeParser) to get + # the adaptor field. Must be set with a constructor. :( + self.adaptor = adaptor + + self.port = port or self.DEFAULT_DEBUGGER_PORT + + self.debug = debug + + self.socket = None + self.connection = None + self.input = None + self.output = None + + + def log(self, msg): + if self.debug is not None: + self.debug.write(msg + '\n') + + + def handshake(self): + if self.socket is None: + # create listening socket + self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self.socket.bind(('', self.port)) + self.socket.listen(1) + self.log("Waiting for incoming connection on port %d" % self.port) + + # wait for an incoming connection + self.connection, addr = self.socket.accept() + self.log("Accepted connection from %s:%d" % addr) + + self.connection.setblocking(1) + self.connection.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1) + + # FIXME(pink): wrap into utf8 encoding stream + self.output = self.connection.makefile('w', 0) + self.input = self.connection.makefile('r', 0) + + self.write("ANTLR %s" % self.PROTOCOL_VERSION) + self.write("grammar \"%s" % self.grammarFileName) + self.ack() + + + def write(self, msg): + self.log("> %s" % msg) + self.output.write("%s\n" % msg) + self.output.flush() + + + def ack(self): + t = self.input.readline() + self.log("< %s" % t.rstrip()) + + + def transmit(self, event): + self.write(event); + self.ack(); + + + def commence(self): + # don't bother sending event; listener will trigger upon connection + pass + + + def terminate(self): + self.transmit("terminate") + self.output.close() + self.input.close() + self.connection.close() + self.socket.close() + + + def enterRule(self, grammarFileName, ruleName): + self.transmit("enterRule\t%s\t%s" % (grammarFileName, ruleName)) + + + def enterAlt(self, alt): + self.transmit("enterAlt\t%d" % alt) + + + def exitRule(self, grammarFileName, ruleName): + self.transmit("exitRule\t%s\t%s" % (grammarFileName, ruleName)) + + + def enterSubRule(self, decisionNumber): + self.transmit("enterSubRule\t%d" % decisionNumber) + + + def exitSubRule(self, decisionNumber): + self.transmit("exitSubRule\t%d" % decisionNumber) + + + def enterDecision(self, decisionNumber): + self.transmit("enterDecision\t%d" % decisionNumber) + + + def exitDecision(self, decisionNumber): + self.transmit("exitDecision\t%d" % decisionNumber) + + + def consumeToken(self, t): + self.transmit("consumeToken\t%s" % self.serializeToken(t)) + + + def consumeHiddenToken(self, t): + self.transmit("consumeHiddenToken\t%s" % self.serializeToken(t)) + + + def LT(self, i, o): + if isinstance(o, Tree): + return self.LT_tree(i, o) + return self.LT_token(i, o) + + + def LT_token(self, i, t): + if t is not None: + self.transmit("LT\t%d\t%s" % (i, self.serializeToken(t))) + + + def mark(self, i): + self.transmit("mark\t%d" % i) + + + def rewind(self, i=None): + if i is not None: + self.transmit("rewind\t%d" % i) + else: + self.transmit("rewind") + + + def beginBacktrack(self, level): + self.transmit("beginBacktrack\t%d" % level) + + + def endBacktrack(self, level, successful): + self.transmit("endBacktrack\t%d\t%s" % ( + level, ['0', '1'][bool(successful)])) + + + def location(self, line, pos): + self.transmit("location\t%d\t%d" % (line, pos)) + + + def recognitionException(self, exc): + self.transmit('\t'.join([ + "exception", + exc.__class__.__name__, + str(int(exc.index)), + str(int(exc.line)), + str(int(exc.charPositionInLine))])) + + + def beginResync(self): + self.transmit("beginResync") + + + def endResync(self): + self.transmit("endResync") + + + def semanticPredicate(self, result, predicate): + self.transmit('\t'.join([ + "semanticPredicate", + str(int(result)), + self.escapeNewlines(predicate)])) + + ## A S T P a r s i n g E v e n t s + + def consumeNode(self, t): + FIXME(31) +# StringBuffer buf = new StringBuffer(50); +# buf.append("consumeNode"); +# serializeNode(buf, t); +# transmit(buf.toString()); + + + def LT_tree(self, i, t): + FIXME(34) +# int ID = adaptor.getUniqueID(t); +# String text = adaptor.getText(t); +# int type = adaptor.getType(t); +# StringBuffer buf = new StringBuffer(50); +# buf.append("LN\t"); // lookahead node; distinguish from LT in protocol +# buf.append(i); +# serializeNode(buf, t); +# transmit(buf.toString()); + + + def serializeNode(self, buf, t): + FIXME(33) +# int ID = adaptor.getUniqueID(t); +# String text = adaptor.getText(t); +# int type = adaptor.getType(t); +# buf.append("\t"); +# buf.append(ID); +# buf.append("\t"); +# buf.append(type); +# Token token = adaptor.getToken(t); +# int line = -1; +# int pos = -1; +# if ( token!=null ) { +# line = token.getLine(); +# pos = token.getCharPositionInLine(); +# } +# buf.append("\t"); +# buf.append(line); +# buf.append("\t"); +# buf.append(pos); +# int tokenIndex = adaptor.getTokenStartIndex(t); +# buf.append("\t"); +# buf.append(tokenIndex); +# serializeText(buf, text); + + + ## A S T E v e n t s + + def nilNode(self, t): + self.transmit("nilNode\t%d" % self.adaptor.getUniqueID(t)) + + + def errorNode(self, t): + self.transmit("errorNode\t%d\t%d\t\"%s" % ( + self.adaptor.getUniqueID(t), + Token.INVALID_TOKEN_TYPE, + self.escapeNewlines(t.toString()))) + + + + def createNode(self, node, token=None): + if token is not None: + self.transmit("createNode\t%d\t%d" % ( + self.adaptor.getUniqueID(node), + token.getTokenIndex())) + + else: + self.transmit("createNodeFromTokenElements\t%d\t%d\t\"%s" % ( + self.adaptor.getUniqueID(node), + self.adaptor.getType(node), + self.adaptor.getText(node))) + + + def becomeRoot(self, newRoot, oldRoot): + self.transmit("becomeRoot\t%d\t%d" % ( + self.adaptor.getUniqueID(newRoot), + self.adaptor.getUniqueID(oldRoot))) + + + def addChild(self, root, child): + self.transmit("addChild\t%d\t%d" % ( + self.adaptor.getUniqueID(root), + self.adaptor.getUniqueID(child))) + + + def setTokenBoundaries(self, t, tokenStartIndex, tokenStopIndex): + self.transmit("setTokenBoundaries\t%d\t%d\t%d" % ( + self.adaptor.getUniqueID(t), + tokenStartIndex, tokenStopIndex)) + + + + ## support + + def setTreeAdaptor(self, adaptor): + self.adaptor = adaptor + + def getTreeAdaptor(self): + return self.adaptor + + + def serializeToken(self, t): + buf = [str(int(t.getTokenIndex())), + str(int(t.getType())), + str(int(t.getChannel())), + str(int(t.getLine() or 0)), + str(int(t.getCharPositionInLine() or 0)), + '\"' + self.escapeNewlines(t.getText())] + return '\t'.join(buf) + + + def escapeNewlines(self, txt): + if txt is None: + return '' + + txt = txt.replace("%","%25") # escape all escape char ;) + txt = txt.replace("\n","%0A") # escape \n + txt = txt.replace("\r","%0D") # escape \r + return txt diff --git a/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/dfa.py b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/dfa.py new file mode 100644 index 0000000..ff93761 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/dfa.py @@ -0,0 +1,213 @@ +"""ANTLR3 runtime package""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licensc] + +from antlr3.constants import EOF +from antlr3.exceptions import NoViableAltException, BacktrackingFailed + + +class DFA(object): + """@brief A DFA implemented as a set of transition tables. + + Any state that has a semantic predicate edge is special; those states + are generated with if-then-else structures in a specialStateTransition() + which is generated by cyclicDFA template. + + """ + + def __init__( + self, + recognizer, decisionNumber, + eot, eof, min, max, accept, special, transition + ): + ## Which recognizer encloses this DFA? Needed to check backtracking + self.recognizer = recognizer + + self.decisionNumber = decisionNumber + self.eot = eot + self.eof = eof + self.min = min + self.max = max + self.accept = accept + self.special = special + self.transition = transition + + + def predict(self, input): + """ + From the input stream, predict what alternative will succeed + using this DFA (representing the covering regular approximation + to the underlying CFL). Return an alternative number 1..n. Throw + an exception upon error. + """ + mark = input.mark() + s = 0 # we always start at s0 + try: + for _ in xrange(50000): + #print "***Current state = %d" % s + + specialState = self.special[s] + if specialState >= 0: + #print "is special" + s = self.specialStateTransition(specialState, input) + if s == -1: + self.noViableAlt(s, input) + return 0 + input.consume() + continue + + if self.accept[s] >= 1: + #print "accept state for alt %d" % self.accept[s] + return self.accept[s] + + # look for a normal char transition + c = input.LA(1) + + #print "LA = %d (%r)" % (c, unichr(c) if c >= 0 else 'EOF') + #print "range = %d..%d" % (self.min[s], self.max[s]) + + if c >= self.min[s] and c <= self.max[s]: + # move to next state + snext = self.transition[s][c-self.min[s]] + #print "in range, next state = %d" % snext + + if snext < 0: + #print "not a normal transition" + # was in range but not a normal transition + # must check EOT, which is like the else clause. + # eot[s]>=0 indicates that an EOT edge goes to another + # state. + if self.eot[s] >= 0: # EOT Transition to accept state? + #print "EOT trans to accept state %d" % self.eot[s] + + s = self.eot[s] + input.consume() + # TODO: I had this as return accept[eot[s]] + # which assumed here that the EOT edge always + # went to an accept...faster to do this, but + # what about predicated edges coming from EOT + # target? + continue + + #print "no viable alt" + self.noViableAlt(s, input) + return 0 + + s = snext + input.consume() + continue + + if self.eot[s] >= 0: + #print "EOT to %d" % self.eot[s] + + s = self.eot[s] + input.consume() + continue + + # EOF Transition to accept state? + if c == EOF and self.eof[s] >= 0: + #print "EOF Transition to accept state %d" \ + # % self.accept[self.eof[s]] + return self.accept[self.eof[s]] + + # not in range and not EOF/EOT, must be invalid symbol + self.noViableAlt(s, input) + return 0 + + else: + raise RuntimeError("DFA bang!") + + finally: + input.rewind(mark) + + + def noViableAlt(self, s, input): + if self.recognizer._state.backtracking > 0: + raise BacktrackingFailed + + nvae = NoViableAltException( + self.getDescription(), + self.decisionNumber, + s, + input + ) + + self.error(nvae) + raise nvae + + + def error(self, nvae): + """A hook for debugging interface""" + pass + + + def specialStateTransition(self, s, input): + return -1 + + + def getDescription(self): + return "n/a" + + +## def specialTransition(self, state, symbol): +## return 0 + + + def unpack(cls, string): + """@brief Unpack the runlength encoded table data. + + Terence implemented packed table initializers, because Java has a + size restriction on .class files and the lookup tables can grow + pretty large. The generated JavaLexer.java of the Java.g example + would be about 15MB with uncompressed array initializers. + + Python does not have any size restrictions, but the compilation of + such large source files seems to be pretty memory hungry. The memory + consumption of the python process grew to >1.5GB when importing a + 15MB lexer, eating all my swap space and I was to impacient to see, + if it could finish at all. With packed initializers that are unpacked + at import time of the lexer module, everything works like a charm. + + """ + + ret = [] + for i in range(len(string) / 2): + (n, v) = ord(string[i*2]), ord(string[i*2+1]) + + # Is there a bitwise operation to do this? + if v == 0xFFFF: + v = -1 + + ret += [v] * n + + return ret + + unpack = classmethod(unpack) diff --git a/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/dottreegen.py b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/dottreegen.py new file mode 100644 index 0000000..827d4ec --- /dev/null +++ b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/dottreegen.py @@ -0,0 +1,210 @@ +""" @package antlr3.dottreegenerator +@brief ANTLR3 runtime package, tree module + +This module contains all support classes for AST construction and tree parsers. + +""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +# lot's of docstrings are missing, don't complain for now... +# pylint: disable-msg=C0111 + +from antlr3.tree import CommonTreeAdaptor +import stringtemplate3 + +class DOTTreeGenerator(object): + """ + A utility class to generate DOT diagrams (graphviz) from + arbitrary trees. You can pass in your own templates and + can pass in any kind of tree or use Tree interface method. + """ + + _treeST = stringtemplate3.StringTemplate( + template=( + "digraph {\n" + + " ordering=out;\n" + + " ranksep=.4;\n" + + " node [shape=plaintext, fixedsize=true, fontsize=11, fontname=\"Courier\",\n" + + " width=.25, height=.25];\n" + + " edge [arrowsize=.5]\n" + + " $nodes$\n" + + " $edges$\n" + + "}\n") + ) + + _nodeST = stringtemplate3.StringTemplate( + template="$name$ [label=\"$text$\"];\n" + ) + + _edgeST = stringtemplate3.StringTemplate( + template="$parent$ -> $child$ // \"$parentText$\" -> \"$childText$\"\n" + ) + + def __init__(self): + ## Track node to number mapping so we can get proper node name back + self.nodeToNumberMap = {} + + ## Track node number so we can get unique node names + self.nodeNumber = 0 + + + def toDOT(self, tree, adaptor=None, treeST=_treeST, edgeST=_edgeST): + if adaptor is None: + adaptor = CommonTreeAdaptor() + + treeST = treeST.getInstanceOf() + + self.nodeNumber = 0 + self.toDOTDefineNodes(tree, adaptor, treeST) + + self.nodeNumber = 0 + self.toDOTDefineEdges(tree, adaptor, treeST, edgeST) + return treeST + + + def toDOTDefineNodes(self, tree, adaptor, treeST, knownNodes=None): + if knownNodes is None: + knownNodes = set() + + if tree is None: + return + + n = adaptor.getChildCount(tree) + if n == 0: + # must have already dumped as child from previous + # invocation; do nothing + return + + # define parent node + number = self.getNodeNumber(tree) + if number not in knownNodes: + parentNodeST = self.getNodeST(adaptor, tree) + treeST.setAttribute("nodes", parentNodeST) + knownNodes.add(number) + + # for each child, do a " [label=text]" node def + for i in range(n): + child = adaptor.getChild(tree, i) + + number = self.getNodeNumber(child) + if number not in knownNodes: + nodeST = self.getNodeST(adaptor, child) + treeST.setAttribute("nodes", nodeST) + knownNodes.add(number) + + self.toDOTDefineNodes(child, adaptor, treeST, knownNodes) + + + def toDOTDefineEdges(self, tree, adaptor, treeST, edgeST): + if tree is None: + return + + n = adaptor.getChildCount(tree) + if n == 0: + # must have already dumped as child from previous + # invocation; do nothing + return + + parentName = "n%d" % self.getNodeNumber(tree) + + # for each child, do a parent -> child edge using unique node names + parentText = adaptor.getText(tree) + for i in range(n): + child = adaptor.getChild(tree, i) + childText = adaptor.getText(child) + childName = "n%d" % self.getNodeNumber(child) + edgeST = edgeST.getInstanceOf() + edgeST.setAttribute("parent", parentName) + edgeST.setAttribute("child", childName) + edgeST.setAttribute("parentText", parentText) + edgeST.setAttribute("childText", childText) + treeST.setAttribute("edges", edgeST) + self.toDOTDefineEdges(child, adaptor, treeST, edgeST) + + + def getNodeST(self, adaptor, t): + text = adaptor.getText(t) + nodeST = self._nodeST.getInstanceOf() + uniqueName = "n%d" % self.getNodeNumber(t) + nodeST.setAttribute("name", uniqueName) + if text is not None: + text = text.replace('"', r'\\"') + nodeST.setAttribute("text", text) + return nodeST + + + def getNodeNumber(self, t): + try: + return self.nodeToNumberMap[t] + except KeyError: + self.nodeToNumberMap[t] = self.nodeNumber + self.nodeNumber += 1 + return self.nodeNumber - 1 + + +def toDOT(tree, adaptor=None, treeST=DOTTreeGenerator._treeST, edgeST=DOTTreeGenerator._edgeST): + """ + Generate DOT (graphviz) for a whole tree not just a node. + For example, 3+4*5 should generate: + + digraph { + node [shape=plaintext, fixedsize=true, fontsize=11, fontname="Courier", + width=.4, height=.2]; + edge [arrowsize=.7] + "+"->3 + "+"->"*" + "*"->4 + "*"->5 + } + + Return the ST not a string in case people want to alter. + + Takes a Tree interface object. + + Example of invokation: + + import antlr3 + import antlr3.extras + + input = antlr3.ANTLRInputStream(sys.stdin) + lex = TLexer(input) + tokens = antlr3.CommonTokenStream(lex) + parser = TParser(tokens) + tree = parser.e().tree + print tree.toStringTree() + st = antlr3.extras.toDOT(t) + print st + + """ + + gen = DOTTreeGenerator() + return gen.toDOT(tree, adaptor, treeST, edgeST) diff --git a/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/exceptions.py b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/exceptions.py new file mode 100644 index 0000000..97b1074 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/exceptions.py @@ -0,0 +1,364 @@ +"""ANTLR3 exception hierarchy""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +from antlr3.constants import INVALID_TOKEN_TYPE + + +class BacktrackingFailed(Exception): + """@brief Raised to signal failed backtrack attempt""" + + pass + + +class RecognitionException(Exception): + """@brief The root of the ANTLR exception hierarchy. + + To avoid English-only error messages and to generally make things + as flexible as possible, these exceptions are not created with strings, + but rather the information necessary to generate an error. Then + the various reporting methods in Parser and Lexer can be overridden + to generate a localized error message. For example, MismatchedToken + exceptions are built with the expected token type. + So, don't expect getMessage() to return anything. + + Note that as of Java 1.4, you can access the stack trace, which means + that you can compute the complete trace of rules from the start symbol. + This gives you considerable context information with which to generate + useful error messages. + + ANTLR generates code that throws exceptions upon recognition error and + also generates code to catch these exceptions in each rule. If you + want to quit upon first error, you can turn off the automatic error + handling mechanism using rulecatch action, but you still need to + override methods mismatch and recoverFromMismatchSet. + + In general, the recognition exceptions can track where in a grammar a + problem occurred and/or what was the expected input. While the parser + knows its state (such as current input symbol and line info) that + state can change before the exception is reported so current token index + is computed and stored at exception time. From this info, you can + perhaps print an entire line of input not just a single token, for example. + Better to just say the recognizer had a problem and then let the parser + figure out a fancy report. + + """ + + def __init__(self, input=None): + Exception.__init__(self) + + # What input stream did the error occur in? + self.input = None + + # What is index of token/char were we looking at when the error + # occurred? + self.index = None + + # The current Token when an error occurred. Since not all streams + # can retrieve the ith Token, we have to track the Token object. + # For parsers. Even when it's a tree parser, token might be set. + self.token = None + + # If this is a tree parser exception, node is set to the node with + # the problem. + self.node = None + + # The current char when an error occurred. For lexers. + self.c = None + + # Track the line at which the error occurred in case this is + # generated from a lexer. We need to track this since the + # unexpected char doesn't carry the line info. + self.line = None + + self.charPositionInLine = None + + # If you are parsing a tree node stream, you will encounter som + # imaginary nodes w/o line/col info. We now search backwards looking + # for most recent token with line/col info, but notify getErrorHeader() + # that info is approximate. + self.approximateLineInfo = False + + + if input is not None: + self.input = input + self.index = input.index() + + # late import to avoid cyclic dependencies + from antlr3.streams import TokenStream, CharStream + from antlr3.tree import TreeNodeStream + + if isinstance(self.input, TokenStream): + self.token = self.input.LT(1) + self.line = self.token.line + self.charPositionInLine = self.token.charPositionInLine + + if isinstance(self.input, TreeNodeStream): + self.extractInformationFromTreeNodeStream(self.input) + + else: + if isinstance(self.input, CharStream): + self.c = self.input.LT(1) + self.line = self.input.line + self.charPositionInLine = self.input.charPositionInLine + + else: + self.c = self.input.LA(1) + + def extractInformationFromTreeNodeStream(self, nodes): + from antlr3.tree import Tree, CommonTree + from antlr3.tokens import CommonToken + + self.node = nodes.LT(1) + adaptor = nodes.adaptor + payload = adaptor.getToken(self.node) + if payload is not None: + self.token = payload + if payload.line <= 0: + # imaginary node; no line/pos info; scan backwards + i = -1 + priorNode = nodes.LT(i) + while priorNode is not None: + priorPayload = adaptor.getToken(priorNode) + if priorPayload is not None and priorPayload.line > 0: + # we found the most recent real line / pos info + self.line = priorPayload.line + self.charPositionInLine = priorPayload.charPositionInLine + self.approximateLineInfo = True + break + + i -= 1 + priorNode = nodes.LT(i) + + else: # node created from real token + self.line = payload.line + self.charPositionInLine = payload.charPositionInLine + + elif isinstance(self.node, Tree): + self.line = self.node.line + self.charPositionInLine = self.node.charPositionInLine + if isinstance(self.node, CommonTree): + self.token = self.node.token + + else: + type = adaptor.getType(self.node) + text = adaptor.getText(self.node) + self.token = CommonToken(type=type, text=text) + + + def getUnexpectedType(self): + """Return the token type or char of the unexpected input element""" + + from antlr3.streams import TokenStream + from antlr3.tree import TreeNodeStream + + if isinstance(self.input, TokenStream): + return self.token.type + + elif isinstance(self.input, TreeNodeStream): + adaptor = self.input.treeAdaptor + return adaptor.getType(self.node) + + else: + return self.c + + unexpectedType = property(getUnexpectedType) + + +class MismatchedTokenException(RecognitionException): + """@brief A mismatched char or Token or tree node.""" + + def __init__(self, expecting, input): + RecognitionException.__init__(self, input) + self.expecting = expecting + + + def __str__(self): + #return "MismatchedTokenException("+self.expecting+")" + return "MismatchedTokenException(%r!=%r)" % ( + self.getUnexpectedType(), self.expecting + ) + __repr__ = __str__ + + +class UnwantedTokenException(MismatchedTokenException): + """An extra token while parsing a TokenStream""" + + def getUnexpectedToken(self): + return self.token + + + def __str__(self): + exp = ", expected %s" % self.expecting + if self.expecting == INVALID_TOKEN_TYPE: + exp = "" + + if self.token is None: + return "UnwantedTokenException(found=%s%s)" % (None, exp) + + return "UnwantedTokenException(found=%s%s)" % (self.token.text, exp) + __repr__ = __str__ + + +class MissingTokenException(MismatchedTokenException): + """ + We were expecting a token but it's not found. The current token + is actually what we wanted next. + """ + + def __init__(self, expecting, input, inserted): + MismatchedTokenException.__init__(self, expecting, input) + + self.inserted = inserted + + + def getMissingType(self): + return self.expecting + + + def __str__(self): + if self.inserted is not None and self.token is not None: + return "MissingTokenException(inserted %r at %r)" % ( + self.inserted, self.token.text) + + if self.token is not None: + return "MissingTokenException(at %r)" % self.token.text + + return "MissingTokenException" + __repr__ = __str__ + + +class MismatchedRangeException(RecognitionException): + """@brief The next token does not match a range of expected types.""" + + def __init__(self, a, b, input): + RecognitionException.__init__(self, input) + + self.a = a + self.b = b + + + def __str__(self): + return "MismatchedRangeException(%r not in [%r..%r])" % ( + self.getUnexpectedType(), self.a, self.b + ) + __repr__ = __str__ + + +class MismatchedSetException(RecognitionException): + """@brief The next token does not match a set of expected types.""" + + def __init__(self, expecting, input): + RecognitionException.__init__(self, input) + + self.expecting = expecting + + + def __str__(self): + return "MismatchedSetException(%r not in %r)" % ( + self.getUnexpectedType(), self.expecting + ) + __repr__ = __str__ + + +class MismatchedNotSetException(MismatchedSetException): + """@brief Used for remote debugger deserialization""" + + def __str__(self): + return "MismatchedNotSetException(%r!=%r)" % ( + self.getUnexpectedType(), self.expecting + ) + __repr__ = __str__ + + +class NoViableAltException(RecognitionException): + """@brief Unable to decide which alternative to choose.""" + + def __init__( + self, grammarDecisionDescription, decisionNumber, stateNumber, input + ): + RecognitionException.__init__(self, input) + + self.grammarDecisionDescription = grammarDecisionDescription + self.decisionNumber = decisionNumber + self.stateNumber = stateNumber + + + def __str__(self): + return "NoViableAltException(%r!=[%r])" % ( + self.unexpectedType, self.grammarDecisionDescription + ) + __repr__ = __str__ + + +class EarlyExitException(RecognitionException): + """@brief The recognizer did not match anything for a (..)+ loop.""" + + def __init__(self, decisionNumber, input): + RecognitionException.__init__(self, input) + + self.decisionNumber = decisionNumber + + +class FailedPredicateException(RecognitionException): + """@brief A semantic predicate failed during validation. + + Validation of predicates + occurs when normally parsing the alternative just like matching a token. + Disambiguating predicate evaluation occurs when we hoist a predicate into + a prediction decision. + """ + + def __init__(self, input, ruleName, predicateText): + RecognitionException.__init__(self, input) + + self.ruleName = ruleName + self.predicateText = predicateText + + + def __str__(self): + return "FailedPredicateException("+self.ruleName+",{"+self.predicateText+"}?)" + __repr__ = __str__ + + +class MismatchedTreeNodeException(RecognitionException): + """@brief The next tree mode does not match the expected type.""" + + def __init__(self, expecting, input): + RecognitionException.__init__(self, input) + + self.expecting = expecting + + def __str__(self): + return "MismatchedTreeNodeException(%r!=%r)" % ( + self.getUnexpectedType(), self.expecting + ) + __repr__ = __str__ diff --git a/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/extras.py b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/extras.py new file mode 100644 index 0000000..9155cda --- /dev/null +++ b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/extras.py @@ -0,0 +1,47 @@ +""" @package antlr3.dottreegenerator +@brief ANTLR3 runtime package, tree module + +This module contains all support classes for AST construction and tree parsers. + +""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +# lot's of docstrings are missing, don't complain for now... +# pylint: disable-msg=C0111 + +from treewizard import TreeWizard + +try: + from antlr3.dottreegen import toDOT +except ImportError, exc: + def toDOT(*args, **kwargs): + raise exc diff --git a/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/main.py b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/main.py new file mode 100644 index 0000000..19a08b5 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/main.py @@ -0,0 +1,307 @@ +"""ANTLR3 runtime package""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + + +import sys +import optparse + +import antlr3 + + +class _Main(object): + def __init__(self): + self.stdin = sys.stdin + self.stdout = sys.stdout + self.stderr = sys.stderr + + + def parseOptions(self, argv): + optParser = optparse.OptionParser() + optParser.add_option( + "--encoding", + action="store", + type="string", + dest="encoding" + ) + optParser.add_option( + "--input", + action="store", + type="string", + dest="input" + ) + optParser.add_option( + "--interactive", "-i", + action="store_true", + dest="interactive" + ) + optParser.add_option( + "--no-output", + action="store_true", + dest="no_output" + ) + optParser.add_option( + "--profile", + action="store_true", + dest="profile" + ) + optParser.add_option( + "--hotshot", + action="store_true", + dest="hotshot" + ) + optParser.add_option( + "--port", + type="int", + dest="port", + default=None + ) + optParser.add_option( + "--debug-socket", + action='store_true', + dest="debug_socket", + default=None + ) + + self.setupOptions(optParser) + + return optParser.parse_args(argv[1:]) + + + def setupOptions(self, optParser): + pass + + + def execute(self, argv): + options, args = self.parseOptions(argv) + + self.setUp(options) + + if options.interactive: + while True: + try: + input = raw_input(">>> ") + except (EOFError, KeyboardInterrupt): + self.stdout.write("\nBye.\n") + break + + inStream = antlr3.ANTLRStringStream(input) + self.parseStream(options, inStream) + + else: + if options.input is not None: + inStream = antlr3.ANTLRStringStream(options.input) + + elif len(args) == 1 and args[0] != '-': + inStream = antlr3.ANTLRFileStream( + args[0], encoding=options.encoding + ) + + else: + inStream = antlr3.ANTLRInputStream( + self.stdin, encoding=options.encoding + ) + + if options.profile: + try: + import cProfile as profile + except ImportError: + import profile + + profile.runctx( + 'self.parseStream(options, inStream)', + globals(), + locals(), + 'profile.dat' + ) + + import pstats + stats = pstats.Stats('profile.dat') + stats.strip_dirs() + stats.sort_stats('time') + stats.print_stats(100) + + elif options.hotshot: + import hotshot + + profiler = hotshot.Profile('hotshot.dat') + profiler.runctx( + 'self.parseStream(options, inStream)', + globals(), + locals() + ) + + else: + self.parseStream(options, inStream) + + + def setUp(self, options): + pass + + + def parseStream(self, options, inStream): + raise NotImplementedError + + + def write(self, options, text): + if not options.no_output: + self.stdout.write(text) + + + def writeln(self, options, text): + self.write(options, text + '\n') + + +class LexerMain(_Main): + def __init__(self, lexerClass): + _Main.__init__(self) + + self.lexerClass = lexerClass + + + def parseStream(self, options, inStream): + lexer = self.lexerClass(inStream) + for token in lexer: + self.writeln(options, str(token)) + + +class ParserMain(_Main): + def __init__(self, lexerClassName, parserClass): + _Main.__init__(self) + + self.lexerClassName = lexerClassName + self.lexerClass = None + self.parserClass = parserClass + + + def setupOptions(self, optParser): + optParser.add_option( + "--lexer", + action="store", + type="string", + dest="lexerClass", + default=self.lexerClassName + ) + optParser.add_option( + "--rule", + action="store", + type="string", + dest="parserRule" + ) + + + def setUp(self, options): + lexerMod = __import__(options.lexerClass) + self.lexerClass = getattr(lexerMod, options.lexerClass) + + + def parseStream(self, options, inStream): + kwargs = {} + if options.port is not None: + kwargs['port'] = options.port + if options.debug_socket is not None: + kwargs['debug_socket'] = sys.stderr + + lexer = self.lexerClass(inStream) + tokenStream = antlr3.CommonTokenStream(lexer) + parser = self.parserClass(tokenStream, **kwargs) + result = getattr(parser, options.parserRule)() + if result is not None: + if hasattr(result, 'tree'): + if result.tree is not None: + self.writeln(options, result.tree.toStringTree()) + else: + self.writeln(options, repr(result)) + + +class WalkerMain(_Main): + def __init__(self, walkerClass): + _Main.__init__(self) + + self.lexerClass = None + self.parserClass = None + self.walkerClass = walkerClass + + + def setupOptions(self, optParser): + optParser.add_option( + "--lexer", + action="store", + type="string", + dest="lexerClass", + default=None + ) + optParser.add_option( + "--parser", + action="store", + type="string", + dest="parserClass", + default=None + ) + optParser.add_option( + "--parser-rule", + action="store", + type="string", + dest="parserRule", + default=None + ) + optParser.add_option( + "--rule", + action="store", + type="string", + dest="walkerRule" + ) + + + def setUp(self, options): + lexerMod = __import__(options.lexerClass) + self.lexerClass = getattr(lexerMod, options.lexerClass) + parserMod = __import__(options.parserClass) + self.parserClass = getattr(parserMod, options.parserClass) + + + def parseStream(self, options, inStream): + lexer = self.lexerClass(inStream) + tokenStream = antlr3.CommonTokenStream(lexer) + parser = self.parserClass(tokenStream) + result = getattr(parser, options.parserRule)() + if result is not None: + assert hasattr(result, 'tree'), "Parser did not return an AST" + nodeStream = antlr3.tree.CommonTreeNodeStream(result.tree) + nodeStream.setTokenStream(tokenStream) + walker = self.walkerClass(nodeStream) + result = getattr(walker, options.walkerRule)() + if result is not None: + if hasattr(result, 'tree'): + self.writeln(options, result.tree.toStringTree()) + else: + self.writeln(options, repr(result)) + diff --git a/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/recognizers.py b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/recognizers.py new file mode 100644 index 0000000..b6bfcc1 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/recognizers.py @@ -0,0 +1,1487 @@ +"""ANTLR3 runtime package""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +import sys +import inspect + +from antlr3 import runtime_version, runtime_version_str +from antlr3.constants import DEFAULT_CHANNEL, HIDDEN_CHANNEL, EOF, \ + EOR_TOKEN_TYPE, INVALID_TOKEN_TYPE +from antlr3.exceptions import RecognitionException, MismatchedTokenException, \ + MismatchedRangeException, MismatchedTreeNodeException, \ + NoViableAltException, EarlyExitException, MismatchedSetException, \ + MismatchedNotSetException, FailedPredicateException, \ + BacktrackingFailed, UnwantedTokenException, MissingTokenException +from antlr3.tokens import CommonToken, EOF_TOKEN, SKIP_TOKEN +from antlr3.compat import set, frozenset, reversed + + +class RecognizerSharedState(object): + """ + The set of fields needed by an abstract recognizer to recognize input + and recover from errors etc... As a separate state object, it can be + shared among multiple grammars; e.g., when one grammar imports another. + + These fields are publically visible but the actual state pointer per + parser is protected. + """ + + def __init__(self): + # Track the set of token types that can follow any rule invocation. + # Stack grows upwards. + self.following = [] + + # This is true when we see an error and before having successfully + # matched a token. Prevents generation of more than one error message + # per error. + self.errorRecovery = False + + # The index into the input stream where the last error occurred. + # This is used to prevent infinite loops where an error is found + # but no token is consumed during recovery...another error is found, + # ad naseum. This is a failsafe mechanism to guarantee that at least + # one token/tree node is consumed for two errors. + self.lastErrorIndex = -1 + + # If 0, no backtracking is going on. Safe to exec actions etc... + # If >0 then it's the level of backtracking. + self.backtracking = 0 + + # An array[size num rules] of Map that tracks + # the stop token index for each rule. ruleMemo[ruleIndex] is + # the memoization table for ruleIndex. For key ruleStartIndex, you + # get back the stop token for associated rule or MEMO_RULE_FAILED. + # + # This is only used if rule memoization is on (which it is by default). + self.ruleMemo = None + + ## Did the recognizer encounter a syntax error? Track how many. + self.syntaxErrors = 0 + + + # LEXER FIELDS (must be in same state object to avoid casting + # constantly in generated code and Lexer object) :( + + + ## The goal of all lexer rules/methods is to create a token object. + # This is an instance variable as multiple rules may collaborate to + # create a single token. nextToken will return this object after + # matching lexer rule(s). If you subclass to allow multiple token + # emissions, then set this to the last token to be matched or + # something nonnull so that the auto token emit mechanism will not + # emit another token. + self.token = None + + ## What character index in the stream did the current token start at? + # Needed, for example, to get the text for current token. Set at + # the start of nextToken. + self.tokenStartCharIndex = -1 + + ## The line on which the first character of the token resides + self.tokenStartLine = None + + ## The character position of first character within the line + self.tokenStartCharPositionInLine = None + + ## The channel number for the current token + self.channel = None + + ## The token type for the current token + self.type = None + + ## You can set the text for the current token to override what is in + # the input char buffer. Use setText() or can set this instance var. + self.text = None + + +class BaseRecognizer(object): + """ + @brief Common recognizer functionality. + + A generic recognizer that can handle recognizers generated from + lexer, parser, and tree grammars. This is all the parsing + support code essentially; most of it is error recovery stuff and + backtracking. + """ + + MEMO_RULE_FAILED = -2 + MEMO_RULE_UNKNOWN = -1 + + # copies from Token object for convenience in actions + DEFAULT_TOKEN_CHANNEL = DEFAULT_CHANNEL + + # for convenience in actions + HIDDEN = HIDDEN_CHANNEL + + # overridden by generated subclasses + tokenNames = None + + # The antlr_version attribute has been introduced in 3.1. If it is not + # overwritten in the generated recognizer, we assume a default of 3.0.1. + antlr_version = (3, 0, 1, 0) + antlr_version_str = "3.0.1" + + def __init__(self, state=None): + # Input stream of the recognizer. Must be initialized by a subclass. + self.input = None + + ## State of a lexer, parser, or tree parser are collected into a state + # object so the state can be shared. This sharing is needed to + # have one grammar import others and share same error variables + # and other state variables. It's a kind of explicit multiple + # inheritance via delegation of methods and shared state. + if state is None: + state = RecognizerSharedState() + self._state = state + + if self.antlr_version > runtime_version: + raise RuntimeError( + "ANTLR version mismatch: " + "The recognizer has been generated by V%s, but this runtime " + "is V%s. Please use the V%s runtime or higher." + % (self.antlr_version_str, + runtime_version_str, + self.antlr_version_str)) + elif (self.antlr_version < (3, 1, 0, 0) and + self.antlr_version != runtime_version): + # FIXME: make the runtime compatible with 3.0.1 codegen + # and remove this block. + raise RuntimeError( + "ANTLR version mismatch: " + "The recognizer has been generated by V%s, but this runtime " + "is V%s. Please use the V%s runtime." + % (self.antlr_version_str, + runtime_version_str, + self.antlr_version_str)) + + # this one only exists to shut up pylint :( + def setInput(self, input): + self.input = input + + + def reset(self): + """ + reset the parser's state; subclasses must rewinds the input stream + """ + + # wack everything related to error recovery + if self._state is None: + # no shared state work to do + return + + self._state.following = [] + self._state.errorRecovery = False + self._state.lastErrorIndex = -1 + self._state.syntaxErrors = 0 + # wack everything related to backtracking and memoization + self._state.backtracking = 0 + if self._state.ruleMemo is not None: + self._state.ruleMemo = {} + + + def match(self, input, ttype, follow): + """ + Match current input symbol against ttype. Attempt + single token insertion or deletion error recovery. If + that fails, throw MismatchedTokenException. + + To turn off single token insertion or deletion error + recovery, override recoverFromMismatchedToken() and have it + throw an exception. See TreeParser.recoverFromMismatchedToken(). + This way any error in a rule will cause an exception and + immediate exit from rule. Rule would recover by resynchronizing + to the set of symbols that can follow rule ref. + """ + + matchedSymbol = self.getCurrentInputSymbol(input) + if self.input.LA(1) == ttype: + self.input.consume() + self._state.errorRecovery = False + return matchedSymbol + + if self._state.backtracking > 0: + # FIXME: need to return matchedSymbol here as well. damn!! + raise BacktrackingFailed + + matchedSymbol = self.recoverFromMismatchedToken(input, ttype, follow) + return matchedSymbol + + + def matchAny(self, input): + """Match the wildcard: in a symbol""" + + self._state.errorRecovery = False + self.input.consume() + + + def mismatchIsUnwantedToken(self, input, ttype): + return input.LA(2) == ttype + + + def mismatchIsMissingToken(self, input, follow): + if follow is None: + # we have no information about the follow; we can only consume + # a single token and hope for the best + return False + + # compute what can follow this grammar element reference + if EOR_TOKEN_TYPE in follow: + viableTokensFollowingThisRule = self.computeContextSensitiveRuleFOLLOW() + follow = follow | viableTokensFollowingThisRule + + if len(self._state.following) > 0: + # remove EOR if we're not the start symbol + follow = follow - set([EOR_TOKEN_TYPE]) + + # if current token is consistent with what could come after set + # then we know we're missing a token; error recovery is free to + # "insert" the missing token + if input.LA(1) in follow or EOR_TOKEN_TYPE in follow: + return True + + return False + + + def reportError(self, e): + """Report a recognition problem. + + This method sets errorRecovery to indicate the parser is recovering + not parsing. Once in recovery mode, no errors are generated. + To get out of recovery mode, the parser must successfully match + a token (after a resync). So it will go: + + 1. error occurs + 2. enter recovery mode, report error + 3. consume until token found in resynch set + 4. try to resume parsing + 5. next match() will reset errorRecovery mode + + If you override, make sure to update syntaxErrors if you care about + that. + + """ + + # if we've already reported an error and have not matched a token + # yet successfully, don't report any errors. + if self._state.errorRecovery: + return + + self._state.syntaxErrors += 1 # don't count spurious + self._state.errorRecovery = True + + self.displayRecognitionError(self.tokenNames, e) + + + def displayRecognitionError(self, tokenNames, e): + hdr = self.getErrorHeader(e) + msg = self.getErrorMessage(e, tokenNames) + self.emitErrorMessage(hdr+" "+msg) + + + def getErrorMessage(self, e, tokenNames): + """ + What error message should be generated for the various + exception types? + + Not very object-oriented code, but I like having all error message + generation within one method rather than spread among all of the + exception classes. This also makes it much easier for the exception + handling because the exception classes do not have to have pointers back + to this object to access utility routines and so on. Also, changing + the message for an exception type would be difficult because you + would have to subclassing exception, but then somehow get ANTLR + to make those kinds of exception objects instead of the default. + This looks weird, but trust me--it makes the most sense in terms + of flexibility. + + For grammar debugging, you will want to override this to add + more information such as the stack frame with + getRuleInvocationStack(e, this.getClass().getName()) and, + for no viable alts, the decision description and state etc... + + Override this to change the message generated for one or more + exception types. + """ + + if isinstance(e, UnwantedTokenException): + tokenName = "" + if e.expecting == EOF: + tokenName = "EOF" + + else: + tokenName = self.tokenNames[e.expecting] + + msg = "extraneous input %s expecting %s" % ( + self.getTokenErrorDisplay(e.getUnexpectedToken()), + tokenName + ) + + elif isinstance(e, MissingTokenException): + tokenName = "" + if e.expecting == EOF: + tokenName = "EOF" + + else: + tokenName = self.tokenNames[e.expecting] + + msg = "missing %s at %s" % ( + tokenName, self.getTokenErrorDisplay(e.token) + ) + + elif isinstance(e, MismatchedTokenException): + tokenName = "" + if e.expecting == EOF: + tokenName = "EOF" + else: + tokenName = self.tokenNames[e.expecting] + + msg = "mismatched input " \ + + self.getTokenErrorDisplay(e.token) \ + + " expecting " \ + + tokenName + + elif isinstance(e, MismatchedTreeNodeException): + tokenName = "" + if e.expecting == EOF: + tokenName = "EOF" + else: + tokenName = self.tokenNames[e.expecting] + + msg = "mismatched tree node: %s expecting %s" \ + % (e.node, tokenName) + + elif isinstance(e, NoViableAltException): + msg = "no viable alternative at input " \ + + self.getTokenErrorDisplay(e.token) + + elif isinstance(e, EarlyExitException): + msg = "required (...)+ loop did not match anything at input " \ + + self.getTokenErrorDisplay(e.token) + + elif isinstance(e, MismatchedSetException): + msg = "mismatched input " \ + + self.getTokenErrorDisplay(e.token) \ + + " expecting set " \ + + repr(e.expecting) + + elif isinstance(e, MismatchedNotSetException): + msg = "mismatched input " \ + + self.getTokenErrorDisplay(e.token) \ + + " expecting set " \ + + repr(e.expecting) + + elif isinstance(e, FailedPredicateException): + msg = "rule " \ + + e.ruleName \ + + " failed predicate: {" \ + + e.predicateText \ + + "}?" + + else: + msg = str(e) + + return msg + + + def getNumberOfSyntaxErrors(self): + """ + Get number of recognition errors (lexer, parser, tree parser). Each + recognizer tracks its own number. So parser and lexer each have + separate count. Does not count the spurious errors found between + an error and next valid token match + + See also reportError() + """ + return self._state.syntaxErrors + + + def getErrorHeader(self, e): + """ + What is the error header, normally line/character position information? + """ + + return "line %d:%d" % (e.line, e.charPositionInLine) + + + def getTokenErrorDisplay(self, t): + """ + How should a token be displayed in an error message? The default + is to display just the text, but during development you might + want to have a lot of information spit out. Override in that case + to use t.toString() (which, for CommonToken, dumps everything about + the token). This is better than forcing you to override a method in + your token objects because you don't have to go modify your lexer + so that it creates a new Java type. + """ + + s = t.text + if s is None: + if t.type == EOF: + s = "" + else: + s = "<"+t.type+">" + + return repr(s) + + + def emitErrorMessage(self, msg): + """Override this method to change where error messages go""" + sys.stderr.write(msg + '\n') + + + def recover(self, input, re): + """ + Recover from an error found on the input stream. This is + for NoViableAlt and mismatched symbol exceptions. If you enable + single token insertion and deletion, this will usually not + handle mismatched symbol exceptions but there could be a mismatched + token that the match() routine could not recover from. + """ + + # PROBLEM? what if input stream is not the same as last time + # perhaps make lastErrorIndex a member of input + if self._state.lastErrorIndex == input.index(): + # uh oh, another error at same token index; must be a case + # where LT(1) is in the recovery token set so nothing is + # consumed; consume a single token so at least to prevent + # an infinite loop; this is a failsafe. + input.consume() + + self._state.lastErrorIndex = input.index() + followSet = self.computeErrorRecoverySet() + + self.beginResync() + self.consumeUntil(input, followSet) + self.endResync() + + + def beginResync(self): + """ + A hook to listen in on the token consumption during error recovery. + The DebugParser subclasses this to fire events to the listenter. + """ + + pass + + + def endResync(self): + """ + A hook to listen in on the token consumption during error recovery. + The DebugParser subclasses this to fire events to the listenter. + """ + + pass + + + def computeErrorRecoverySet(self): + """ + Compute the error recovery set for the current rule. During + rule invocation, the parser pushes the set of tokens that can + follow that rule reference on the stack; this amounts to + computing FIRST of what follows the rule reference in the + enclosing rule. This local follow set only includes tokens + from within the rule; i.e., the FIRST computation done by + ANTLR stops at the end of a rule. + + EXAMPLE + + When you find a "no viable alt exception", the input is not + consistent with any of the alternatives for rule r. The best + thing to do is to consume tokens until you see something that + can legally follow a call to r *or* any rule that called r. + You don't want the exact set of viable next tokens because the + input might just be missing a token--you might consume the + rest of the input looking for one of the missing tokens. + + Consider grammar: + + a : '[' b ']' + | '(' b ')' + ; + b : c '^' INT ; + c : ID + | INT + ; + + At each rule invocation, the set of tokens that could follow + that rule is pushed on a stack. Here are the various "local" + follow sets: + + FOLLOW(b1_in_a) = FIRST(']') = ']' + FOLLOW(b2_in_a) = FIRST(')') = ')' + FOLLOW(c_in_b) = FIRST('^') = '^' + + Upon erroneous input "[]", the call chain is + + a -> b -> c + + and, hence, the follow context stack is: + + depth local follow set after call to rule + 0 \ a (from main()) + 1 ']' b + 3 '^' c + + Notice that ')' is not included, because b would have to have + been called from a different context in rule a for ')' to be + included. + + For error recovery, we cannot consider FOLLOW(c) + (context-sensitive or otherwise). We need the combined set of + all context-sensitive FOLLOW sets--the set of all tokens that + could follow any reference in the call chain. We need to + resync to one of those tokens. Note that FOLLOW(c)='^' and if + we resync'd to that token, we'd consume until EOF. We need to + sync to context-sensitive FOLLOWs for a, b, and c: {']','^'}. + In this case, for input "[]", LA(1) is in this set so we would + not consume anything and after printing an error rule c would + return normally. It would not find the required '^' though. + At this point, it gets a mismatched token error and throws an + exception (since LA(1) is not in the viable following token + set). The rule exception handler tries to recover, but finds + the same recovery set and doesn't consume anything. Rule b + exits normally returning to rule a. Now it finds the ']' (and + with the successful match exits errorRecovery mode). + + So, you cna see that the parser walks up call chain looking + for the token that was a member of the recovery set. + + Errors are not generated in errorRecovery mode. + + ANTLR's error recovery mechanism is based upon original ideas: + + "Algorithms + Data Structures = Programs" by Niklaus Wirth + + and + + "A note on error recovery in recursive descent parsers": + http://portal.acm.org/citation.cfm?id=947902.947905 + + Later, Josef Grosch had some good ideas: + + "Efficient and Comfortable Error Recovery in Recursive Descent + Parsers": + ftp://www.cocolab.com/products/cocktail/doca4.ps/ell.ps.zip + + Like Grosch I implemented local FOLLOW sets that are combined + at run-time upon error to avoid overhead during parsing. + """ + + return self.combineFollows(False) + + + def computeContextSensitiveRuleFOLLOW(self): + """ + Compute the context-sensitive FOLLOW set for current rule. + This is set of token types that can follow a specific rule + reference given a specific call chain. You get the set of + viable tokens that can possibly come next (lookahead depth 1) + given the current call chain. Contrast this with the + definition of plain FOLLOW for rule r: + + FOLLOW(r)={x | S=>*alpha r beta in G and x in FIRST(beta)} + + where x in T* and alpha, beta in V*; T is set of terminals and + V is the set of terminals and nonterminals. In other words, + FOLLOW(r) is the set of all tokens that can possibly follow + references to r in *any* sentential form (context). At + runtime, however, we know precisely which context applies as + we have the call chain. We may compute the exact (rather + than covering superset) set of following tokens. + + For example, consider grammar: + + stat : ID '=' expr ';' // FOLLOW(stat)=={EOF} + | "return" expr '.' + ; + expr : atom ('+' atom)* ; // FOLLOW(expr)=={';','.',')'} + atom : INT // FOLLOW(atom)=={'+',')',';','.'} + | '(' expr ')' + ; + + The FOLLOW sets are all inclusive whereas context-sensitive + FOLLOW sets are precisely what could follow a rule reference. + For input input "i=(3);", here is the derivation: + + stat => ID '=' expr ';' + => ID '=' atom ('+' atom)* ';' + => ID '=' '(' expr ')' ('+' atom)* ';' + => ID '=' '(' atom ')' ('+' atom)* ';' + => ID '=' '(' INT ')' ('+' atom)* ';' + => ID '=' '(' INT ')' ';' + + At the "3" token, you'd have a call chain of + + stat -> expr -> atom -> expr -> atom + + What can follow that specific nested ref to atom? Exactly ')' + as you can see by looking at the derivation of this specific + input. Contrast this with the FOLLOW(atom)={'+',')',';','.'}. + + You want the exact viable token set when recovering from a + token mismatch. Upon token mismatch, if LA(1) is member of + the viable next token set, then you know there is most likely + a missing token in the input stream. "Insert" one by just not + throwing an exception. + """ + + return self.combineFollows(True) + + + def combineFollows(self, exact): + followSet = set() + for idx, localFollowSet in reversed(list(enumerate(self._state.following))): + followSet |= localFollowSet + if exact: + # can we see end of rule? + if EOR_TOKEN_TYPE in localFollowSet: + # Only leave EOR in set if at top (start rule); this lets + # us know if have to include follow(start rule); i.e., EOF + if idx > 0: + followSet.remove(EOR_TOKEN_TYPE) + + else: + # can't see end of rule, quit + break + + return followSet + + + def recoverFromMismatchedToken(self, input, ttype, follow): + """Attempt to recover from a single missing or extra token. + + EXTRA TOKEN + + LA(1) is not what we are looking for. If LA(2) has the right token, + however, then assume LA(1) is some extra spurious token. Delete it + and LA(2) as if we were doing a normal match(), which advances the + input. + + MISSING TOKEN + + If current token is consistent with what could come after + ttype then it is ok to 'insert' the missing token, else throw + exception For example, Input 'i=(3;' is clearly missing the + ')'. When the parser returns from the nested call to expr, it + will have call chain: + + stat -> expr -> atom + + and it will be trying to match the ')' at this point in the + derivation: + + => ID '=' '(' INT ')' ('+' atom)* ';' + ^ + match() will see that ';' doesn't match ')' and report a + mismatched token error. To recover, it sees that LA(1)==';' + is in the set of tokens that can follow the ')' token + reference in rule atom. It can assume that you forgot the ')'. + """ + + e = None + + # if next token is what we are looking for then "delete" this token + if self.mismatchIsUnwantedToken(input, ttype): + e = UnwantedTokenException(ttype, input) + + self.beginResync() + input.consume() # simply delete extra token + self.endResync() + + # report after consuming so AW sees the token in the exception + self.reportError(e) + + # we want to return the token we're actually matching + matchedSymbol = self.getCurrentInputSymbol(input) + + # move past ttype token as if all were ok + input.consume() + return matchedSymbol + + # can't recover with single token deletion, try insertion + if self.mismatchIsMissingToken(input, follow): + inserted = self.getMissingSymbol(input, e, ttype, follow) + e = MissingTokenException(ttype, input, inserted) + + # report after inserting so AW sees the token in the exception + self.reportError(e) + return inserted + + # even that didn't work; must throw the exception + e = MismatchedTokenException(ttype, input) + raise e + + + def recoverFromMismatchedSet(self, input, e, follow): + """Not currently used""" + + if self.mismatchIsMissingToken(input, follow): + self.reportError(e) + # we don't know how to conjure up a token for sets yet + return self.getMissingSymbol(input, e, INVALID_TOKEN_TYPE, follow) + + # TODO do single token deletion like above for Token mismatch + raise e + + + def getCurrentInputSymbol(self, input): + """ + Match needs to return the current input symbol, which gets put + into the label for the associated token ref; e.g., x=ID. Token + and tree parsers need to return different objects. Rather than test + for input stream type or change the IntStream interface, I use + a simple method to ask the recognizer to tell me what the current + input symbol is. + + This is ignored for lexers. + """ + + return None + + + def getMissingSymbol(self, input, e, expectedTokenType, follow): + """Conjure up a missing token during error recovery. + + The recognizer attempts to recover from single missing + symbols. But, actions might refer to that missing symbol. + For example, x=ID {f($x);}. The action clearly assumes + that there has been an identifier matched previously and that + $x points at that token. If that token is missing, but + the next token in the stream is what we want we assume that + this token is missing and we keep going. Because we + have to return some token to replace the missing token, + we have to conjure one up. This method gives the user control + over the tokens returned for missing tokens. Mostly, + you will want to create something special for identifier + tokens. For literals such as '{' and ',', the default + action in the parser or tree parser works. It simply creates + a CommonToken of the appropriate type. The text will be the token. + If you change what tokens must be created by the lexer, + override this method to create the appropriate tokens. + """ + + return None + + +## def recoverFromMissingElement(self, input, e, follow): +## """ +## This code is factored out from mismatched token and mismatched set +## recovery. It handles "single token insertion" error recovery for +## both. No tokens are consumed to recover from insertions. Return +## true if recovery was possible else return false. +## """ + +## if self.mismatchIsMissingToken(input, follow): +## self.reportError(e) +## return True + +## # nothing to do; throw exception +## return False + + + def consumeUntil(self, input, tokenTypes): + """ + Consume tokens until one matches the given token or token set + + tokenTypes can be a single token type or a set of token types + + """ + + if not isinstance(tokenTypes, (set, frozenset)): + tokenTypes = frozenset([tokenTypes]) + + ttype = input.LA(1) + while ttype != EOF and ttype not in tokenTypes: + input.consume() + ttype = input.LA(1) + + + def getRuleInvocationStack(self): + """ + Return List of the rules in your parser instance + leading up to a call to this method. You could override if + you want more details such as the file/line info of where + in the parser java code a rule is invoked. + + This is very useful for error messages and for context-sensitive + error recovery. + + You must be careful, if you subclass a generated recognizers. + The default implementation will only search the module of self + for rules, but the subclass will not contain any rules. + You probably want to override this method to look like + + def getRuleInvocationStack(self): + return self._getRuleInvocationStack(.__module__) + + where is the class of the generated recognizer, e.g. + the superclass of self. + """ + + return self._getRuleInvocationStack(self.__module__) + + + def _getRuleInvocationStack(cls, module): + """ + A more general version of getRuleInvocationStack where you can + pass in, for example, a RecognitionException to get it's rule + stack trace. This routine is shared with all recognizers, hence, + static. + + TODO: move to a utility class or something; weird having lexer call + this + """ + + # mmmhhh,... perhaps look at the first argument + # (f_locals[co_varnames[0]]?) and test if it's a (sub)class of + # requested recognizer... + + rules = [] + for frame in reversed(inspect.stack()): + code = frame[0].f_code + codeMod = inspect.getmodule(code) + if codeMod is None: + continue + + # skip frames not in requested module + if codeMod.__name__ != module: + continue + + # skip some unwanted names + if code.co_name in ('nextToken', ''): + continue + + rules.append(code.co_name) + + return rules + + _getRuleInvocationStack = classmethod(_getRuleInvocationStack) + + + def getBacktrackingLevel(self): + return self._state.backtracking + + def setBacktrackingLevel(self, n): + self._state.backtracking = n + + + def failed(self): + """Return whether or not a backtracking attempt failed.""" + + return self._state.failed + + + def getGrammarFileName(self): + """For debugging and other purposes, might want the grammar name. + + Have ANTLR generate an implementation for this method. + """ + + return self.grammarFileName + + + def getSourceName(self): + raise NotImplementedError + + + def toStrings(self, tokens): + """A convenience method for use most often with template rewrites. + + Convert a List to List + """ + + if tokens is None: + return None + + return [token.text for token in tokens] + + + def getRuleMemoization(self, ruleIndex, ruleStartIndex): + """ + Given a rule number and a start token index number, return + MEMO_RULE_UNKNOWN if the rule has not parsed input starting from + start index. If this rule has parsed input starting from the + start index before, then return where the rule stopped parsing. + It returns the index of the last token matched by the rule. + """ + + if ruleIndex not in self._state.ruleMemo: + self._state.ruleMemo[ruleIndex] = {} + + return self._state.ruleMemo[ruleIndex].get( + ruleStartIndex, self.MEMO_RULE_UNKNOWN + ) + + + def alreadyParsedRule(self, input, ruleIndex): + """ + Has this rule already parsed input at the current index in the + input stream? Return the stop token index or MEMO_RULE_UNKNOWN. + If we attempted but failed to parse properly before, return + MEMO_RULE_FAILED. + + This method has a side-effect: if we have seen this input for + this rule and successfully parsed before, then seek ahead to + 1 past the stop token matched for this rule last time. + """ + + stopIndex = self.getRuleMemoization(ruleIndex, input.index()) + if stopIndex == self.MEMO_RULE_UNKNOWN: + return False + + if stopIndex == self.MEMO_RULE_FAILED: + raise BacktrackingFailed + + else: + input.seek(stopIndex + 1) + + return True + + + def memoize(self, input, ruleIndex, ruleStartIndex, success): + """ + Record whether or not this rule parsed the input at this position + successfully. + """ + + if success: + stopTokenIndex = input.index() - 1 + else: + stopTokenIndex = self.MEMO_RULE_FAILED + + if ruleIndex in self._state.ruleMemo: + self._state.ruleMemo[ruleIndex][ruleStartIndex] = stopTokenIndex + + + def traceIn(self, ruleName, ruleIndex, inputSymbol): + sys.stdout.write("enter %s %s" % (ruleName, inputSymbol)) + + if self._state.backtracking > 0: + sys.stdout.write(" backtracking=%s" % self._state.backtracking) + + sys.stdout.write('\n') + + + def traceOut(self, ruleName, ruleIndex, inputSymbol): + sys.stdout.write("exit %s %s" % (ruleName, inputSymbol)) + + if self._state.backtracking > 0: + sys.stdout.write(" backtracking=%s" % self._state.backtracking) + + if self._state.failed: + sys.stdout.write(" failed") + else: + sys.stdout.write(" succeeded") + + sys.stdout.write('\n') + + +class TokenSource(object): + """ + @brief Abstract baseclass for token producers. + + A source of tokens must provide a sequence of tokens via nextToken() + and also must reveal it's source of characters; CommonToken's text is + computed from a CharStream; it only store indices into the char stream. + + Errors from the lexer are never passed to the parser. Either you want + to keep going or you do not upon token recognition error. If you do not + want to continue lexing then you do not want to continue parsing. Just + throw an exception not under RecognitionException and Java will naturally + toss you all the way out of the recognizers. If you want to continue + lexing then you should not throw an exception to the parser--it has already + requested a token. Keep lexing until you get a valid one. Just report + errors and keep going, looking for a valid token. + """ + + def nextToken(self): + """Return a Token object from your input stream (usually a CharStream). + + Do not fail/return upon lexing error; keep chewing on the characters + until you get a good one; errors are not passed through to the parser. + """ + + raise NotImplementedError + + + def __iter__(self): + """The TokenSource is an interator. + + The iteration will not include the final EOF token, see also the note + for the next() method. + + """ + + return self + + + def next(self): + """Return next token or raise StopIteration. + + Note that this will raise StopIteration when hitting the EOF token, + so EOF will not be part of the iteration. + + """ + + token = self.nextToken() + if token is None or token.type == EOF: + raise StopIteration + return token + + +class Lexer(BaseRecognizer, TokenSource): + """ + @brief Baseclass for generated lexer classes. + + A lexer is recognizer that draws input symbols from a character stream. + lexer grammars result in a subclass of this object. A Lexer object + uses simplified match() and error recovery mechanisms in the interest + of speed. + """ + + def __init__(self, input, state=None): + BaseRecognizer.__init__(self, state) + TokenSource.__init__(self) + + # Where is the lexer drawing characters from? + self.input = input + + + def reset(self): + BaseRecognizer.reset(self) # reset all recognizer state variables + + if self.input is not None: + # rewind the input + self.input.seek(0) + + if self._state is None: + # no shared state work to do + return + + # wack Lexer state variables + self._state.token = None + self._state.type = INVALID_TOKEN_TYPE + self._state.channel = DEFAULT_CHANNEL + self._state.tokenStartCharIndex = -1 + self._state.tokenStartLine = -1 + self._state.tokenStartCharPositionInLine = -1 + self._state.text = None + + + def nextToken(self): + """ + Return a token from this source; i.e., match a token on the char + stream. + """ + + while 1: + self._state.token = None + self._state.channel = DEFAULT_CHANNEL + self._state.tokenStartCharIndex = self.input.index() + self._state.tokenStartCharPositionInLine = self.input.charPositionInLine + self._state.tokenStartLine = self.input.line + self._state.text = None + if self.input.LA(1) == EOF: + return EOF_TOKEN + + try: + self.mTokens() + + if self._state.token is None: + self.emit() + + elif self._state.token == SKIP_TOKEN: + continue + + return self._state.token + + except NoViableAltException, re: + self.reportError(re) + self.recover(re) # throw out current char and try again + + except RecognitionException, re: + self.reportError(re) + # match() routine has already called recover() + + + def skip(self): + """ + Instruct the lexer to skip creating a token for current lexer rule + and look for another token. nextToken() knows to keep looking when + a lexer rule finishes with token set to SKIP_TOKEN. Recall that + if token==null at end of any token rule, it creates one for you + and emits it. + """ + + self._state.token = SKIP_TOKEN + + + def mTokens(self): + """This is the lexer entry point that sets instance var 'token'""" + + # abstract method + raise NotImplementedError + + + def setCharStream(self, input): + """Set the char stream and reset the lexer""" + self.input = None + self.reset() + self.input = input + + + def getSourceName(self): + return self.input.getSourceName() + + + def emit(self, token=None): + """ + The standard method called to automatically emit a token at the + outermost lexical rule. The token object should point into the + char buffer start..stop. If there is a text override in 'text', + use that to set the token's text. Override this method to emit + custom Token objects. + + If you are building trees, then you should also override + Parser or TreeParser.getMissingSymbol(). + """ + + if token is None: + token = CommonToken( + input=self.input, + type=self._state.type, + channel=self._state.channel, + start=self._state.tokenStartCharIndex, + stop=self.getCharIndex()-1 + ) + token.line = self._state.tokenStartLine + token.text = self._state.text + token.charPositionInLine = self._state.tokenStartCharPositionInLine + + self._state.token = token + + return token + + + def match(self, s): + if isinstance(s, basestring): + for c in s: + if self.input.LA(1) != ord(c): + if self._state.backtracking > 0: + raise BacktrackingFailed + + mte = MismatchedTokenException(c, self.input) + self.recover(mte) + raise mte + + self.input.consume() + + else: + if self.input.LA(1) != s: + if self._state.backtracking > 0: + raise BacktrackingFailed + + mte = MismatchedTokenException(unichr(s), self.input) + self.recover(mte) # don't really recover; just consume in lexer + raise mte + + self.input.consume() + + + def matchAny(self): + self.input.consume() + + + def matchRange(self, a, b): + if self.input.LA(1) < a or self.input.LA(1) > b: + if self._state.backtracking > 0: + raise BacktrackingFailed + + mre = MismatchedRangeException(unichr(a), unichr(b), self.input) + self.recover(mre) + raise mre + + self.input.consume() + + + def getLine(self): + return self.input.line + + + def getCharPositionInLine(self): + return self.input.charPositionInLine + + + def getCharIndex(self): + """What is the index of the current character of lookahead?""" + + return self.input.index() + + + def getText(self): + """ + Return the text matched so far for the current token or any + text override. + """ + if self._state.text is not None: + return self._state.text + + return self.input.substring( + self._state.tokenStartCharIndex, + self.getCharIndex()-1 + ) + + + def setText(self, text): + """ + Set the complete text of this token; it wipes any previous + changes to the text. + """ + self._state.text = text + + + text = property(getText, setText) + + + def reportError(self, e): + ## TODO: not thought about recovery in lexer yet. + + ## # if we've already reported an error and have not matched a token + ## # yet successfully, don't report any errors. + ## if self.errorRecovery: + ## #System.err.print("[SPURIOUS] "); + ## return; + ## + ## self.errorRecovery = True + + self.displayRecognitionError(self.tokenNames, e) + + + def getErrorMessage(self, e, tokenNames): + msg = None + + if isinstance(e, MismatchedTokenException): + msg = "mismatched character " \ + + self.getCharErrorDisplay(e.c) \ + + " expecting " \ + + self.getCharErrorDisplay(e.expecting) + + elif isinstance(e, NoViableAltException): + msg = "no viable alternative at character " \ + + self.getCharErrorDisplay(e.c) + + elif isinstance(e, EarlyExitException): + msg = "required (...)+ loop did not match anything at character " \ + + self.getCharErrorDisplay(e.c) + + elif isinstance(e, MismatchedNotSetException): + msg = "mismatched character " \ + + self.getCharErrorDisplay(e.c) \ + + " expecting set " \ + + repr(e.expecting) + + elif isinstance(e, MismatchedSetException): + msg = "mismatched character " \ + + self.getCharErrorDisplay(e.c) \ + + " expecting set " \ + + repr(e.expecting) + + elif isinstance(e, MismatchedRangeException): + msg = "mismatched character " \ + + self.getCharErrorDisplay(e.c) \ + + " expecting set " \ + + self.getCharErrorDisplay(e.a) \ + + ".." \ + + self.getCharErrorDisplay(e.b) + + else: + msg = BaseRecognizer.getErrorMessage(self, e, tokenNames) + + return msg + + + def getCharErrorDisplay(self, c): + if c == EOF: + c = '' + return repr(c) + + + def recover(self, re): + """ + Lexers can normally match any char in it's vocabulary after matching + a token, so do the easy thing and just kill a character and hope + it all works out. You can instead use the rule invocation stack + to do sophisticated error recovery if you are in a fragment rule. + """ + + self.input.consume() + + + def traceIn(self, ruleName, ruleIndex): + inputSymbol = "%s line=%d:%s" % (self.input.LT(1), + self.getLine(), + self.getCharPositionInLine() + ) + + BaseRecognizer.traceIn(self, ruleName, ruleIndex, inputSymbol) + + + def traceOut(self, ruleName, ruleIndex): + inputSymbol = "%s line=%d:%s" % (self.input.LT(1), + self.getLine(), + self.getCharPositionInLine() + ) + + BaseRecognizer.traceOut(self, ruleName, ruleIndex, inputSymbol) + + + +class Parser(BaseRecognizer): + """ + @brief Baseclass for generated parser classes. + """ + + def __init__(self, lexer, state=None): + BaseRecognizer.__init__(self, state) + + self.setTokenStream(lexer) + + + def reset(self): + BaseRecognizer.reset(self) # reset all recognizer state variables + if self.input is not None: + self.input.seek(0) # rewind the input + + + def getCurrentInputSymbol(self, input): + return input.LT(1) + + + def getMissingSymbol(self, input, e, expectedTokenType, follow): + if expectedTokenType == EOF: + tokenText = "" + else: + tokenText = "" + t = CommonToken(type=expectedTokenType, text=tokenText) + current = input.LT(1) + if current.type == EOF: + current = input.LT(-1) + + if current is not None: + t.line = current.line + t.charPositionInLine = current.charPositionInLine + t.channel = DEFAULT_CHANNEL + return t + + + def setTokenStream(self, input): + """Set the token stream and reset the parser""" + + self.input = None + self.reset() + self.input = input + + + def getTokenStream(self): + return self.input + + + def getSourceName(self): + return self.input.getSourceName() + + + def traceIn(self, ruleName, ruleIndex): + BaseRecognizer.traceIn(self, ruleName, ruleIndex, self.input.LT(1)) + + + def traceOut(self, ruleName, ruleIndex): + BaseRecognizer.traceOut(self, ruleName, ruleIndex, self.input.LT(1)) + + +class RuleReturnScope(object): + """ + Rules can return start/stop info as well as possible trees and templates. + """ + + def getStart(self): + """Return the start token or tree.""" + return None + + + def getStop(self): + """Return the stop token or tree.""" + return None + + + def getTree(self): + """Has a value potentially if output=AST.""" + return None + + + def getTemplate(self): + """Has a value potentially if output=template.""" + return None + + +class ParserRuleReturnScope(RuleReturnScope): + """ + Rules that return more than a single value must return an object + containing all the values. Besides the properties defined in + RuleLabelScope.predefinedRulePropertiesScope there may be user-defined + return values. This class simply defines the minimum properties that + are always defined and methods to access the others that might be + available depending on output option such as template and tree. + + Note text is not an actual property of the return value, it is computed + from start and stop using the input stream's toString() method. I + could add a ctor to this so that we can pass in and store the input + stream, but I'm not sure we want to do that. It would seem to be undefined + to get the .text property anyway if the rule matches tokens from multiple + input streams. + + I do not use getters for fields of objects that are used simply to + group values such as this aggregate. The getters/setters are there to + satisfy the superclass interface. + """ + + def __init__(self): + self.start = None + self.stop = None + + + def getStart(self): + return self.start + + + def getStop(self): + return self.stop + diff --git a/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/streams.py b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/streams.py new file mode 100644 index 0000000..0dbe0f1 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/streams.py @@ -0,0 +1,1452 @@ +"""ANTLR3 runtime package""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +import codecs +from StringIO import StringIO + +from antlr3.constants import DEFAULT_CHANNEL, EOF +from antlr3.tokens import Token, EOF_TOKEN + + +############################################################################ +# +# basic interfaces +# IntStream +# +- CharStream +# \- TokenStream +# +# subclasses must implemented all methods +# +############################################################################ + +class IntStream(object): + """ + @brief Base interface for streams of integer values. + + A simple stream of integers used when all I care about is the char + or token type sequence (such as interpretation). + """ + + def consume(self): + raise NotImplementedError + + + def LA(self, i): + """Get int at current input pointer + i ahead where i=1 is next int. + + Negative indexes are allowed. LA(-1) is previous token (token + just matched). LA(-i) where i is before first token should + yield -1, invalid char / EOF. + """ + + raise NotImplementedError + + + def mark(self): + """ + Tell the stream to start buffering if it hasn't already. Return + current input position, index(), or some other marker so that + when passed to rewind() you get back to the same spot. + rewind(mark()) should not affect the input cursor. The Lexer + track line/col info as well as input index so its markers are + not pure input indexes. Same for tree node streams. + """ + + raise NotImplementedError + + + def index(self): + """ + Return the current input symbol index 0..n where n indicates the + last symbol has been read. The index is the symbol about to be + read not the most recently read symbol. + """ + + raise NotImplementedError + + + def rewind(self, marker=None): + """ + Reset the stream so that next call to index would return marker. + The marker will usually be index() but it doesn't have to be. It's + just a marker to indicate what state the stream was in. This is + essentially calling release() and seek(). If there are markers + created after this marker argument, this routine must unroll them + like a stack. Assume the state the stream was in when this marker + was created. + + If marker is None: + Rewind to the input position of the last marker. + Used currently only after a cyclic DFA and just + before starting a sem/syn predicate to get the + input position back to the start of the decision. + Do not "pop" the marker off the state. mark(i) + and rewind(i) should balance still. It is + like invoking rewind(last marker) but it should not "pop" + the marker off. It's like seek(last marker's input position). + """ + + raise NotImplementedError + + + def release(self, marker=None): + """ + You may want to commit to a backtrack but don't want to force the + stream to keep bookkeeping objects around for a marker that is + no longer necessary. This will have the same behavior as + rewind() except it releases resources without the backward seek. + This must throw away resources for all markers back to the marker + argument. So if you're nested 5 levels of mark(), and then release(2) + you have to release resources for depths 2..5. + """ + + raise NotImplementedError + + + def seek(self, index): + """ + Set the input cursor to the position indicated by index. This is + normally used to seek ahead in the input stream. No buffering is + required to do this unless you know your stream will use seek to + move backwards such as when backtracking. + + This is different from rewind in its multi-directional + requirement and in that its argument is strictly an input cursor + (index). + + For char streams, seeking forward must update the stream state such + as line number. For seeking backwards, you will be presumably + backtracking using the mark/rewind mechanism that restores state and + so this method does not need to update state when seeking backwards. + + Currently, this method is only used for efficient backtracking using + memoization, but in the future it may be used for incremental parsing. + + The index is 0..n-1. A seek to position i means that LA(1) will + return the ith symbol. So, seeking to 0 means LA(1) will return the + first element in the stream. + """ + + raise NotImplementedError + + + def size(self): + """ + Only makes sense for streams that buffer everything up probably, but + might be useful to display the entire stream or for testing. This + value includes a single EOF. + """ + + raise NotImplementedError + + + def getSourceName(self): + """ + Where are you getting symbols from? Normally, implementations will + pass the buck all the way to the lexer who can ask its input stream + for the file name or whatever. + """ + + raise NotImplementedError + + +class CharStream(IntStream): + """ + @brief A source of characters for an ANTLR lexer. + + This is an abstract class that must be implemented by a subclass. + + """ + + # pylint does not realize that this is an interface, too + #pylint: disable-msg=W0223 + + EOF = -1 + + + def substring(self, start, stop): + """ + For infinite streams, you don't need this; primarily I'm providing + a useful interface for action code. Just make sure actions don't + use this on streams that don't support it. + """ + + raise NotImplementedError + + + def LT(self, i): + """ + Get the ith character of lookahead. This is the same usually as + LA(i). This will be used for labels in the generated + lexer code. I'd prefer to return a char here type-wise, but it's + probably better to be 32-bit clean and be consistent with LA. + """ + + raise NotImplementedError + + + def getLine(self): + """ANTLR tracks the line information automatically""" + + raise NotImplementedError + + + def setLine(self, line): + """ + Because this stream can rewind, we need to be able to reset the line + """ + + raise NotImplementedError + + + def getCharPositionInLine(self): + """ + The index of the character relative to the beginning of the line 0..n-1 + """ + + raise NotImplementedError + + + def setCharPositionInLine(self, pos): + raise NotImplementedError + + +class TokenStream(IntStream): + """ + + @brief A stream of tokens accessing tokens from a TokenSource + + This is an abstract class that must be implemented by a subclass. + + """ + + # pylint does not realize that this is an interface, too + #pylint: disable-msg=W0223 + + def LT(self, k): + """ + Get Token at current input pointer + i ahead where i=1 is next Token. + i<0 indicates tokens in the past. So -1 is previous token and -2 is + two tokens ago. LT(0) is undefined. For i>=n, return Token.EOFToken. + Return null for LT(0) and any index that results in an absolute address + that is negative. + """ + + raise NotImplementedError + + + def get(self, i): + """ + Get a token at an absolute index i; 0..n-1. This is really only + needed for profiling and debugging and token stream rewriting. + If you don't want to buffer up tokens, then this method makes no + sense for you. Naturally you can't use the rewrite stream feature. + I believe DebugTokenStream can easily be altered to not use + this method, removing the dependency. + """ + + raise NotImplementedError + + + def getTokenSource(self): + """ + Where is this stream pulling tokens from? This is not the name, but + the object that provides Token objects. + """ + + raise NotImplementedError + + + def toString(self, start=None, stop=None): + """ + Return the text of all tokens from start to stop, inclusive. + If the stream does not buffer all the tokens then it can just + return "" or null; Users should not access $ruleLabel.text in + an action of course in that case. + + Because the user is not required to use a token with an index stored + in it, we must provide a means for two token objects themselves to + indicate the start/end location. Most often this will just delegate + to the other toString(int,int). This is also parallel with + the TreeNodeStream.toString(Object,Object). + """ + + raise NotImplementedError + + +############################################################################ +# +# character streams for use in lexers +# CharStream +# \- ANTLRStringStream +# +############################################################################ + + +class ANTLRStringStream(CharStream): + """ + @brief CharStream that pull data from a unicode string. + + A pretty quick CharStream that pulls all data from an array + directly. Every method call counts in the lexer. + + """ + + + def __init__(self, data): + """ + @param data This should be a unicode string holding the data you want + to parse. If you pass in a byte string, the Lexer will choke on + non-ascii data. + + """ + + CharStream.__init__(self) + + # The data being scanned + self.strdata = unicode(data) + self.data = [ord(c) for c in self.strdata] + + # How many characters are actually in the buffer + self.n = len(data) + + # 0..n-1 index into string of next char + self.p = 0 + + # line number 1..n within the input + self.line = 1 + + # The index of the character relative to the beginning of the + # line 0..n-1 + self.charPositionInLine = 0 + + # A list of CharStreamState objects that tracks the stream state + # values line, charPositionInLine, and p that can change as you + # move through the input stream. Indexed from 0..markDepth-1. + self._markers = [ ] + self.lastMarker = None + self.markDepth = 0 + + # What is name or source of this char stream? + self.name = None + + + def reset(self): + """ + Reset the stream so that it's in the same state it was + when the object was created *except* the data array is not + touched. + """ + + self.p = 0 + self.line = 1 + self.charPositionInLine = 0 + self._markers = [ ] + + + def consume(self): + try: + if self.data[self.p] == 10: # \n + self.line += 1 + self.charPositionInLine = 0 + else: + self.charPositionInLine += 1 + + self.p += 1 + + except IndexError: + # happend when we reached EOF and self.data[self.p] fails + # just do nothing + pass + + + + def LA(self, i): + if i == 0: + return 0 # undefined + + if i < 0: + i += 1 # e.g., translate LA(-1) to use offset i=0; then data[p+0-1] + + try: + return self.data[self.p+i-1] + except IndexError: + return EOF + + + + def LT(self, i): + if i == 0: + return 0 # undefined + + if i < 0: + i += 1 # e.g., translate LA(-1) to use offset i=0; then data[p+0-1] + + try: + return self.strdata[self.p+i-1] + except IndexError: + return EOF + + + def index(self): + """ + Return the current input symbol index 0..n where n indicates the + last symbol has been read. The index is the index of char to + be returned from LA(1). + """ + + return self.p + + + def size(self): + return self.n + + + def mark(self): + state = (self.p, self.line, self.charPositionInLine) + try: + self._markers[self.markDepth] = state + except IndexError: + self._markers.append(state) + self.markDepth += 1 + + self.lastMarker = self.markDepth + + return self.lastMarker + + + def rewind(self, marker=None): + if marker is None: + marker = self.lastMarker + + p, line, charPositionInLine = self._markers[marker-1] + + self.seek(p) + self.line = line + self.charPositionInLine = charPositionInLine + self.release(marker) + + + def release(self, marker=None): + if marker is None: + marker = self.lastMarker + + self.markDepth = marker-1 + + + def seek(self, index): + """ + consume() ahead until p==index; can't just set p=index as we must + update line and charPositionInLine. + """ + + if index <= self.p: + self.p = index # just jump; don't update stream state (line, ...) + return + + # seek forward, consume until p hits index + while self.p < index: + self.consume() + + + def substring(self, start, stop): + return self.strdata[start:stop+1] + + + def getLine(self): + """Using setter/getter methods is deprecated. Use o.line instead.""" + return self.line + + + def getCharPositionInLine(self): + """ + Using setter/getter methods is deprecated. Use o.charPositionInLine + instead. + """ + return self.charPositionInLine + + + def setLine(self, line): + """Using setter/getter methods is deprecated. Use o.line instead.""" + self.line = line + + + def setCharPositionInLine(self, pos): + """ + Using setter/getter methods is deprecated. Use o.charPositionInLine + instead. + """ + self.charPositionInLine = pos + + + def getSourceName(self): + return self.name + + +class ANTLRFileStream(ANTLRStringStream): + """ + @brief CharStream that opens a file to read the data. + + This is a char buffer stream that is loaded from a file + all at once when you construct the object. + """ + + def __init__(self, fileName, encoding=None): + """ + @param fileName The path to the file to be opened. The file will be + opened with mode 'rb'. + + @param encoding If you set the optional encoding argument, then the + data will be decoded on the fly. + + """ + + self.fileName = fileName + + fp = codecs.open(fileName, 'rb', encoding) + try: + data = fp.read() + finally: + fp.close() + + ANTLRStringStream.__init__(self, data) + + + def getSourceName(self): + """Deprecated, access o.fileName directly.""" + + return self.fileName + + +class ANTLRInputStream(ANTLRStringStream): + """ + @brief CharStream that reads data from a file-like object. + + This is a char buffer stream that is loaded from a file like object + all at once when you construct the object. + + All input is consumed from the file, but it is not closed. + """ + + def __init__(self, file, encoding=None): + """ + @param file A file-like object holding your input. Only the read() + method must be implemented. + + @param encoding If you set the optional encoding argument, then the + data will be decoded on the fly. + + """ + + if encoding is not None: + # wrap input in a decoding reader + reader = codecs.lookup(encoding)[2] + file = reader(file) + + data = file.read() + + ANTLRStringStream.__init__(self, data) + + +# I guess the ANTLR prefix exists only to avoid a name clash with some Java +# mumbojumbo. A plain "StringStream" looks better to me, which should be +# the preferred name in Python. +StringStream = ANTLRStringStream +FileStream = ANTLRFileStream +InputStream = ANTLRInputStream + + +############################################################################ +# +# Token streams +# TokenStream +# +- CommonTokenStream +# \- TokenRewriteStream +# +############################################################################ + + +class CommonTokenStream(TokenStream): + """ + @brief The most common stream of tokens + + The most common stream of tokens is one where every token is buffered up + and tokens are prefiltered for a certain channel (the parser will only + see these tokens and cannot change the filter channel number during the + parse). + """ + + def __init__(self, tokenSource=None, channel=DEFAULT_CHANNEL): + """ + @param tokenSource A TokenSource instance (usually a Lexer) to pull + the tokens from. + + @param channel Skip tokens on any channel but this one; this is how we + skip whitespace... + + """ + + TokenStream.__init__(self) + + self.tokenSource = tokenSource + + # Record every single token pulled from the source so we can reproduce + # chunks of it later. + self.tokens = [] + + # Map to override some Tokens' channel numbers + self.channelOverrideMap = {} + + # Set; discard any tokens with this type + self.discardSet = set() + + # Skip tokens on any channel but this one; this is how we skip whitespace... + self.channel = channel + + # By default, track all incoming tokens + self.discardOffChannelTokens = False + + # The index into the tokens list of the current token (next token + # to consume). p==-1 indicates that the tokens list is empty + self.p = -1 + + # Remember last marked position + self.lastMarker = None + + + def setTokenSource(self, tokenSource): + """Reset this token stream by setting its token source.""" + + self.tokenSource = tokenSource + self.tokens = [] + self.p = -1 + self.channel = DEFAULT_CHANNEL + + + def reset(self): + self.p = 0 + self.lastMarker = None + + + def fillBuffer(self): + """ + Load all tokens from the token source and put in tokens. + This is done upon first LT request because you might want to + set some token type / channel overrides before filling buffer. + """ + + + index = 0 + t = self.tokenSource.nextToken() + while t is not None and t.type != EOF: + discard = False + + if self.discardSet is not None and t.type in self.discardSet: + discard = True + + elif self.discardOffChannelTokens and t.channel != self.channel: + discard = True + + # is there a channel override for token type? + try: + overrideChannel = self.channelOverrideMap[t.type] + + except KeyError: + # no override for this type + pass + + else: + if overrideChannel == self.channel: + t.channel = overrideChannel + else: + discard = True + + if not discard: + t.index = index + self.tokens.append(t) + index += 1 + + t = self.tokenSource.nextToken() + + # leave p pointing at first token on channel + self.p = 0 + self.p = self.skipOffTokenChannels(self.p) + + + def consume(self): + """ + Move the input pointer to the next incoming token. The stream + must become active with LT(1) available. consume() simply + moves the input pointer so that LT(1) points at the next + input symbol. Consume at least one token. + + Walk past any token not on the channel the parser is listening to. + """ + + if self.p < len(self.tokens): + self.p += 1 + + self.p = self.skipOffTokenChannels(self.p) # leave p on valid token + + + def skipOffTokenChannels(self, i): + """ + Given a starting index, return the index of the first on-channel + token. + """ + + try: + while self.tokens[i].channel != self.channel: + i += 1 + except IndexError: + # hit the end of token stream + pass + + return i + + + def skipOffTokenChannelsReverse(self, i): + while i >= 0 and self.tokens[i].channel != self.channel: + i -= 1 + + return i + + + def setTokenTypeChannel(self, ttype, channel): + """ + A simple filter mechanism whereby you can tell this token stream + to force all tokens of type ttype to be on channel. For example, + when interpreting, we cannot exec actions so we need to tell + the stream to force all WS and NEWLINE to be a different, ignored + channel. + """ + + self.channelOverrideMap[ttype] = channel + + + def discardTokenType(self, ttype): + self.discardSet.add(ttype) + + + def getTokens(self, start=None, stop=None, types=None): + """ + Given a start and stop index, return a list of all tokens in + the token type set. Return None if no tokens were found. This + method looks at both on and off channel tokens. + """ + + if self.p == -1: + self.fillBuffer() + + if stop is None or stop >= len(self.tokens): + stop = len(self.tokens) - 1 + + if start is None or stop < 0: + start = 0 + + if start > stop: + return None + + if isinstance(types, (int, long)): + # called with a single type, wrap into set + types = set([types]) + + filteredTokens = [ + token for token in self.tokens[start:stop] + if types is None or token.type in types + ] + + if len(filteredTokens) == 0: + return None + + return filteredTokens + + + def LT(self, k): + """ + Get the ith token from the current position 1..n where k=1 is the + first symbol of lookahead. + """ + + if self.p == -1: + self.fillBuffer() + + if k == 0: + return None + + if k < 0: + return self.LB(-k) + + i = self.p + n = 1 + # find k good tokens + while n < k: + # skip off-channel tokens + i = self.skipOffTokenChannels(i+1) # leave p on valid token + n += 1 + + try: + return self.tokens[i] + except IndexError: + return EOF_TOKEN + + + def LB(self, k): + """Look backwards k tokens on-channel tokens""" + + if self.p == -1: + self.fillBuffer() + + if k == 0: + return None + + if self.p - k < 0: + return None + + i = self.p + n = 1 + # find k good tokens looking backwards + while n <= k: + # skip off-channel tokens + i = self.skipOffTokenChannelsReverse(i-1) # leave p on valid token + n += 1 + + if i < 0: + return None + + return self.tokens[i] + + + def get(self, i): + """ + Return absolute token i; ignore which channel the tokens are on; + that is, count all tokens not just on-channel tokens. + """ + + return self.tokens[i] + + + def LA(self, i): + return self.LT(i).type + + + def mark(self): + self.lastMarker = self.index() + return self.lastMarker + + + def release(self, marker=None): + # no resources to release + pass + + + def size(self): + return len(self.tokens) + + + def index(self): + return self.p + + + def rewind(self, marker=None): + if marker is None: + marker = self.lastMarker + + self.seek(marker) + + + def seek(self, index): + self.p = index + + + def getTokenSource(self): + return self.tokenSource + + + def getSourceName(self): + return self.tokenSource.getSourceName() + + + def toString(self, start=None, stop=None): + if self.p == -1: + self.fillBuffer() + + if start is None: + start = 0 + elif not isinstance(start, int): + start = start.index + + if stop is None: + stop = len(self.tokens) - 1 + elif not isinstance(stop, int): + stop = stop.index + + if stop >= len(self.tokens): + stop = len(self.tokens) - 1 + + return ''.join([t.text for t in self.tokens[start:stop+1]]) + + +class RewriteOperation(object): + """@brief Internal helper class.""" + + def __init__(self, stream, index, text): + self.stream = stream + self.index = index + self.text = text + + def execute(self, buf): + """Execute the rewrite operation by possibly adding to the buffer. + Return the index of the next token to operate on. + """ + + return self.index + + def toString(self): + opName = self.__class__.__name__ + return '<%s@%d:"%s">' % (opName, self.index, self.text) + + __str__ = toString + __repr__ = toString + + +class InsertBeforeOp(RewriteOperation): + """@brief Internal helper class.""" + + def execute(self, buf): + buf.write(self.text) + buf.write(self.stream.tokens[self.index].text) + return self.index + 1 + + +class ReplaceOp(RewriteOperation): + """ + @brief Internal helper class. + + I'm going to try replacing range from x..y with (y-x)+1 ReplaceOp + instructions. + """ + + def __init__(self, stream, first, last, text): + RewriteOperation.__init__(self, stream, first, text) + self.lastIndex = last + + + def execute(self, buf): + if self.text is not None: + buf.write(self.text) + + return self.lastIndex + 1 + + + def toString(self): + return '' % ( + self.index, self.lastIndex, self.text) + + __str__ = toString + __repr__ = toString + + +class DeleteOp(ReplaceOp): + """ + @brief Internal helper class. + """ + + def __init__(self, stream, first, last): + ReplaceOp.__init__(self, stream, first, last, None) + + + def toString(self): + return '' % (self.index, self.lastIndex) + + __str__ = toString + __repr__ = toString + + +class TokenRewriteStream(CommonTokenStream): + """@brief CommonTokenStream that can be modified. + + Useful for dumping out the input stream after doing some + augmentation or other manipulations. + + You can insert stuff, replace, and delete chunks. Note that the + operations are done lazily--only if you convert the buffer to a + String. This is very efficient because you are not moving data around + all the time. As the buffer of tokens is converted to strings, the + toString() method(s) check to see if there is an operation at the + current index. If so, the operation is done and then normal String + rendering continues on the buffer. This is like having multiple Turing + machine instruction streams (programs) operating on a single input tape. :) + + Since the operations are done lazily at toString-time, operations do not + screw up the token index values. That is, an insert operation at token + index i does not change the index values for tokens i+1..n-1. + + Because operations never actually alter the buffer, you may always get + the original token stream back without undoing anything. Since + the instructions are queued up, you can easily simulate transactions and + roll back any changes if there is an error just by removing instructions. + For example, + + CharStream input = new ANTLRFileStream("input"); + TLexer lex = new TLexer(input); + TokenRewriteStream tokens = new TokenRewriteStream(lex); + T parser = new T(tokens); + parser.startRule(); + + Then in the rules, you can execute + Token t,u; + ... + input.insertAfter(t, "text to put after t");} + input.insertAfter(u, "text after u");} + System.out.println(tokens.toString()); + + Actually, you have to cast the 'input' to a TokenRewriteStream. :( + + You can also have multiple "instruction streams" and get multiple + rewrites from a single pass over the input. Just name the instruction + streams and use that name again when printing the buffer. This could be + useful for generating a C file and also its header file--all from the + same buffer: + + tokens.insertAfter("pass1", t, "text to put after t");} + tokens.insertAfter("pass2", u, "text after u");} + System.out.println(tokens.toString("pass1")); + System.out.println(tokens.toString("pass2")); + + If you don't use named rewrite streams, a "default" stream is used as + the first example shows. + """ + + DEFAULT_PROGRAM_NAME = "default" + MIN_TOKEN_INDEX = 0 + + def __init__(self, tokenSource=None, channel=DEFAULT_CHANNEL): + CommonTokenStream.__init__(self, tokenSource, channel) + + # You may have multiple, named streams of rewrite operations. + # I'm calling these things "programs." + # Maps String (name) -> rewrite (List) + self.programs = {} + self.programs[self.DEFAULT_PROGRAM_NAME] = [] + + # Map String (program name) -> Integer index + self.lastRewriteTokenIndexes = {} + + + def rollback(self, *args): + """ + Rollback the instruction stream for a program so that + the indicated instruction (via instructionIndex) is no + longer in the stream. UNTESTED! + """ + + if len(args) == 2: + programName = args[0] + instructionIndex = args[1] + elif len(args) == 1: + programName = self.DEFAULT_PROGRAM_NAME + instructionIndex = args[0] + else: + raise TypeError("Invalid arguments") + + p = self.programs.get(programName, None) + if p is not None: + self.programs[programName] = ( + p[self.MIN_TOKEN_INDEX:instructionIndex]) + + + def deleteProgram(self, programName=DEFAULT_PROGRAM_NAME): + """Reset the program so that no instructions exist""" + + self.rollback(programName, self.MIN_TOKEN_INDEX) + + + def insertAfter(self, *args): + if len(args) == 2: + programName = self.DEFAULT_PROGRAM_NAME + index = args[0] + text = args[1] + + elif len(args) == 3: + programName = args[0] + index = args[1] + text = args[2] + + else: + raise TypeError("Invalid arguments") + + if isinstance(index, Token): + # index is a Token, grap the stream index from it + index = index.index + + # to insert after, just insert before next index (even if past end) + self.insertBefore(programName, index+1, text) + + + def insertBefore(self, *args): + if len(args) == 2: + programName = self.DEFAULT_PROGRAM_NAME + index = args[0] + text = args[1] + + elif len(args) == 3: + programName = args[0] + index = args[1] + text = args[2] + + else: + raise TypeError("Invalid arguments") + + if isinstance(index, Token): + # index is a Token, grap the stream index from it + index = index.index + + op = InsertBeforeOp(self, index, text) + rewrites = self.getProgram(programName) + rewrites.append(op) + + + def replace(self, *args): + if len(args) == 2: + programName = self.DEFAULT_PROGRAM_NAME + first = args[0] + last = args[0] + text = args[1] + + elif len(args) == 3: + programName = self.DEFAULT_PROGRAM_NAME + first = args[0] + last = args[1] + text = args[2] + + elif len(args) == 4: + programName = args[0] + first = args[1] + last = args[2] + text = args[3] + + else: + raise TypeError("Invalid arguments") + + if isinstance(first, Token): + # first is a Token, grap the stream index from it + first = first.index + + if isinstance(last, Token): + # last is a Token, grap the stream index from it + last = last.index + + if first > last or first < 0 or last < 0 or last >= len(self.tokens): + raise ValueError( + "replace: range invalid: "+first+".."+last+ + "(size="+len(self.tokens)+")") + + op = ReplaceOp(self, first, last, text) + rewrites = self.getProgram(programName) + rewrites.append(op) + + + def delete(self, *args): + self.replace(*(list(args) + [None])) + + + def getLastRewriteTokenIndex(self, programName=DEFAULT_PROGRAM_NAME): + return self.lastRewriteTokenIndexes.get(programName, -1) + + + def setLastRewriteTokenIndex(self, programName, i): + self.lastRewriteTokenIndexes[programName] = i + + + def getProgram(self, name): + p = self.programs.get(name, None) + if p is None: + p = self.initializeProgram(name) + + return p + + + def initializeProgram(self, name): + p = [] + self.programs[name] = p + return p + + + def toOriginalString(self, start=None, end=None): + if start is None: + start = self.MIN_TOKEN_INDEX + if end is None: + end = self.size() - 1 + + buf = StringIO() + i = start + while i >= self.MIN_TOKEN_INDEX and i <= end and i < len(self.tokens): + buf.write(self.get(i).text) + i += 1 + + return buf.getvalue() + + + def toString(self, *args): + if len(args) == 0: + programName = self.DEFAULT_PROGRAM_NAME + start = self.MIN_TOKEN_INDEX + end = self.size() - 1 + + elif len(args) == 1: + programName = args[0] + start = self.MIN_TOKEN_INDEX + end = self.size() - 1 + + elif len(args) == 2: + programName = self.DEFAULT_PROGRAM_NAME + start = args[0] + end = args[1] + + if start is None: + start = self.MIN_TOKEN_INDEX + elif not isinstance(start, int): + start = start.index + + if end is None: + end = len(self.tokens) - 1 + elif not isinstance(end, int): + end = end.index + + # ensure start/end are in range + if end >= len(self.tokens): + end = len(self.tokens) - 1 + + if start < 0: + start = 0 + + rewrites = self.programs.get(programName) + if rewrites is None or len(rewrites) == 0: + # no instructions to execute + return self.toOriginalString(start, end) + + buf = StringIO() + + # First, optimize instruction stream + indexToOp = self.reduceToSingleOperationPerIndex(rewrites) + + # Walk buffer, executing instructions and emitting tokens + i = start + while i <= end and i < len(self.tokens): + op = indexToOp.get(i) + # remove so any left have index size-1 + try: + del indexToOp[i] + except KeyError: + pass + + t = self.tokens[i] + if op is None: + # no operation at that index, just dump token + buf.write(t.text) + i += 1 # move to next token + + else: + i = op.execute(buf) # execute operation and skip + + # include stuff after end if it's last index in buffer + # So, if they did an insertAfter(lastValidIndex, "foo"), include + # foo if end==lastValidIndex. + if end == len(self.tokens) - 1: + # Scan any remaining operations after last token + # should be included (they will be inserts). + for i in sorted(indexToOp.keys()): + op = indexToOp[i] + if op.index >= len(self.tokens)-1: + buf.write(op.text) + + return buf.getvalue() + + __str__ = toString + + + def reduceToSingleOperationPerIndex(self, rewrites): + """ + We need to combine operations and report invalid operations (like + overlapping replaces that are not completed nested). Inserts to + same index need to be combined etc... Here are the cases: + + I.i.u I.j.v leave alone, nonoverlapping + I.i.u I.i.v combine: Iivu + + R.i-j.u R.x-y.v | i-j in x-y delete first R + R.i-j.u R.i-j.v delete first R + R.i-j.u R.x-y.v | x-y in i-j ERROR + R.i-j.u R.x-y.v | boundaries overlap ERROR + + I.i.u R.x-y.v | i in x-y delete I + I.i.u R.x-y.v | i not in x-y leave alone, nonoverlapping + R.x-y.v I.i.u | i in x-y ERROR + R.x-y.v I.x.u R.x-y.uv (combine, delete I) + R.x-y.v I.i.u | i not in x-y leave alone, nonoverlapping + + I.i.u = insert u before op @ index i + R.x-y.u = replace x-y indexed tokens with u + + First we need to examine replaces. For any replace op: + + 1. wipe out any insertions before op within that range. + 2. Drop any replace op before that is contained completely within + that range. + 3. Throw exception upon boundary overlap with any previous replace. + + Then we can deal with inserts: + + 1. for any inserts to same index, combine even if not adjacent. + 2. for any prior replace with same left boundary, combine this + insert with replace and delete this replace. + 3. throw exception if index in same range as previous replace + + Don't actually delete; make op null in list. Easier to walk list. + Later we can throw as we add to index -> op map. + + Note that I.2 R.2-2 will wipe out I.2 even though, technically, the + inserted stuff would be before the replace range. But, if you + add tokens in front of a method body '{' and then delete the method + body, I think the stuff before the '{' you added should disappear too. + + Return a map from token index to operation. + """ + + # WALK REPLACES + for i, rop in enumerate(rewrites): + if rop is None: + continue + + if not isinstance(rop, ReplaceOp): + continue + + # Wipe prior inserts within range + for j, iop in self.getKindOfOps(rewrites, InsertBeforeOp, i): + if iop.index >= rop.index and iop.index <= rop.lastIndex: + rewrites[j] = None # delete insert as it's a no-op. + + # Drop any prior replaces contained within + for j, prevRop in self.getKindOfOps(rewrites, ReplaceOp, i): + if (prevRop.index >= rop.index + and prevRop.lastIndex <= rop.lastIndex): + rewrites[j] = None # delete replace as it's a no-op. + continue + + # throw exception unless disjoint or identical + disjoint = (prevRop.lastIndex < rop.index + or prevRop.index > rop.lastIndex) + same = (prevRop.index == rop.index + and prevRop.lastIndex == rop.lastIndex) + if not disjoint and not same: + raise ValueError( + "replace op boundaries of %s overlap with previous %s" + % (rop, prevRop)) + + # WALK INSERTS + for i, iop in enumerate(rewrites): + if iop is None: + continue + + if not isinstance(iop, InsertBeforeOp): + continue + + # combine current insert with prior if any at same index + for j, prevIop in self.getKindOfOps(rewrites, InsertBeforeOp, i): + if prevIop.index == iop.index: # combine objects + # convert to strings...we're in process of toString'ing + # whole token buffer so no lazy eval issue with any + # templates + iop.text = self.catOpText(iop.text, prevIop.text) + rewrites[j] = None # delete redundant prior insert + + # look for replaces where iop.index is in range; error + for j, rop in self.getKindOfOps(rewrites, ReplaceOp, i): + if iop.index == rop.index: + rop.text = self.catOpText(iop.text, rop.text) + rewrites[i] = None # delete current insert + continue + + if iop.index >= rop.index and iop.index <= rop.lastIndex: + raise ValueError( + "insert op %s within boundaries of previous %s" + % (iop, rop)) + + m = {} + for i, op in enumerate(rewrites): + if op is None: + continue # ignore deleted ops + + assert op.index not in m, "should only be one op per index" + m[op.index] = op + + return m + + + def catOpText(self, a, b): + x = "" + y = "" + if a is not None: + x = a + if b is not None: + y = b + return x + y + + + def getKindOfOps(self, rewrites, kind, before=None): + if before is None: + before = len(rewrites) + elif before > len(rewrites): + before = len(rewrites) + + for i, op in enumerate(rewrites[:before]): + if op is None: + # ignore deleted + continue + if op.__class__ == kind: + yield i, op + + + def toDebugString(self, start=None, end=None): + if start is None: + start = self.MIN_TOKEN_INDEX + if end is None: + end = self.size() - 1 + + buf = StringIO() + i = start + while i >= self.MIN_TOKEN_INDEX and i <= end and i < len(self.tokens): + buf.write(self.get(i)) + i += 1 + + return buf.getvalue() diff --git a/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/tokens.py b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/tokens.py new file mode 100644 index 0000000..8ce835d --- /dev/null +++ b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/tokens.py @@ -0,0 +1,416 @@ +"""ANTLR3 runtime package""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +from antlr3.constants import EOF, DEFAULT_CHANNEL, INVALID_TOKEN_TYPE + +############################################################################ +# +# basic token interface +# +############################################################################ + +class Token(object): + """@brief Abstract token baseclass.""" + + def getText(self): + """@brief Get the text of the token. + + Using setter/getter methods is deprecated. Use o.text instead. + """ + raise NotImplementedError + + def setText(self, text): + """@brief Set the text of the token. + + Using setter/getter methods is deprecated. Use o.text instead. + """ + raise NotImplementedError + + + def getType(self): + """@brief Get the type of the token. + + Using setter/getter methods is deprecated. Use o.type instead.""" + + raise NotImplementedError + + def setType(self, ttype): + """@brief Get the type of the token. + + Using setter/getter methods is deprecated. Use o.type instead.""" + + raise NotImplementedError + + + def getLine(self): + """@brief Get the line number on which this token was matched + + Lines are numbered 1..n + + Using setter/getter methods is deprecated. Use o.line instead.""" + + raise NotImplementedError + + def setLine(self, line): + """@brief Set the line number on which this token was matched + + Using setter/getter methods is deprecated. Use o.line instead.""" + + raise NotImplementedError + + + def getCharPositionInLine(self): + """@brief Get the column of the tokens first character, + + Columns are numbered 0..n-1 + + Using setter/getter methods is deprecated. Use o.charPositionInLine instead.""" + + raise NotImplementedError + + def setCharPositionInLine(self, pos): + """@brief Set the column of the tokens first character, + + Using setter/getter methods is deprecated. Use o.charPositionInLine instead.""" + + raise NotImplementedError + + + def getChannel(self): + """@brief Get the channel of the token + + Using setter/getter methods is deprecated. Use o.channel instead.""" + + raise NotImplementedError + + def setChannel(self, channel): + """@brief Set the channel of the token + + Using setter/getter methods is deprecated. Use o.channel instead.""" + + raise NotImplementedError + + + def getTokenIndex(self): + """@brief Get the index in the input stream. + + An index from 0..n-1 of the token object in the input stream. + This must be valid in order to use the ANTLRWorks debugger. + + Using setter/getter methods is deprecated. Use o.index instead.""" + + raise NotImplementedError + + def setTokenIndex(self, index): + """@brief Set the index in the input stream. + + Using setter/getter methods is deprecated. Use o.index instead.""" + + raise NotImplementedError + + + def getInputStream(self): + """@brief From what character stream was this token created. + + You don't have to implement but it's nice to know where a Token + comes from if you have include files etc... on the input.""" + + raise NotImplementedError + + def setInputStream(self, input): + """@brief From what character stream was this token created. + + You don't have to implement but it's nice to know where a Token + comes from if you have include files etc... on the input.""" + + raise NotImplementedError + + +############################################################################ +# +# token implementations +# +# Token +# +- CommonToken +# \- ClassicToken +# +############################################################################ + +class CommonToken(Token): + """@brief Basic token implementation. + + This implementation does not copy the text from the input stream upon + creation, but keeps start/stop pointers into the stream to avoid + unnecessary copy operations. + + """ + + def __init__(self, type=None, channel=DEFAULT_CHANNEL, text=None, + input=None, start=None, stop=None, oldToken=None): + Token.__init__(self) + + if oldToken is not None: + self.type = oldToken.type + self.line = oldToken.line + self.charPositionInLine = oldToken.charPositionInLine + self.channel = oldToken.channel + self.index = oldToken.index + self._text = oldToken._text + if isinstance(oldToken, CommonToken): + self.input = oldToken.input + self.start = oldToken.start + self.stop = oldToken.stop + + else: + self.type = type + self.input = input + self.charPositionInLine = -1 # set to invalid position + self.line = 0 + self.channel = channel + + #What token number is this from 0..n-1 tokens; < 0 implies invalid index + self.index = -1 + + # We need to be able to change the text once in a while. If + # this is non-null, then getText should return this. Note that + # start/stop are not affected by changing this. + self._text = text + + # The char position into the input buffer where this token starts + self.start = start + + # The char position into the input buffer where this token stops + # This is the index of the last char, *not* the index after it! + self.stop = stop + + + def getText(self): + if self._text is not None: + return self._text + + if self.input is None: + return None + + return self.input.substring(self.start, self.stop) + + + def setText(self, text): + """ + Override the text for this token. getText() will return this text + rather than pulling from the buffer. Note that this does not mean + that start/stop indexes are not valid. It means that that input + was converted to a new string in the token object. + """ + self._text = text + + text = property(getText, setText) + + + def getType(self): + return self.type + + def setType(self, ttype): + self.type = ttype + + + def getLine(self): + return self.line + + def setLine(self, line): + self.line = line + + + def getCharPositionInLine(self): + return self.charPositionInLine + + def setCharPositionInLine(self, pos): + self.charPositionInLine = pos + + + def getChannel(self): + return self.channel + + def setChannel(self, channel): + self.channel = channel + + + def getTokenIndex(self): + return self.index + + def setTokenIndex(self, index): + self.index = index + + + def getInputStream(self): + return self.input + + def setInputStream(self, input): + self.input = input + + + def __str__(self): + if self.type == EOF: + return "" + + channelStr = "" + if self.channel > 0: + channelStr = ",channel=" + str(self.channel) + + txt = self.text + if txt is not None: + txt = txt.replace("\n","\\\\n") + txt = txt.replace("\r","\\\\r") + txt = txt.replace("\t","\\\\t") + else: + txt = "" + + return "[@%d,%d:%d=%r,<%d>%s,%d:%d]" % ( + self.index, + self.start, self.stop, + txt, + self.type, channelStr, + self.line, self.charPositionInLine + ) + + +class ClassicToken(Token): + """@brief Alternative token implementation. + + A Token object like we'd use in ANTLR 2.x; has an actual string created + and associated with this object. These objects are needed for imaginary + tree nodes that have payload objects. We need to create a Token object + that has a string; the tree node will point at this token. CommonToken + has indexes into a char stream and hence cannot be used to introduce + new strings. + """ + + def __init__(self, type=None, text=None, channel=DEFAULT_CHANNEL, + oldToken=None + ): + Token.__init__(self) + + if oldToken is not None: + self.text = oldToken.text + self.type = oldToken.type + self.line = oldToken.line + self.charPositionInLine = oldToken.charPositionInLine + self.channel = oldToken.channel + + self.text = text + self.type = type + self.line = None + self.charPositionInLine = None + self.channel = channel + self.index = None + + + def getText(self): + return self.text + + def setText(self, text): + self.text = text + + + def getType(self): + return self.type + + def setType(self, ttype): + self.type = ttype + + + def getLine(self): + return self.line + + def setLine(self, line): + self.line = line + + + def getCharPositionInLine(self): + return self.charPositionInLine + + def setCharPositionInLine(self, pos): + self.charPositionInLine = pos + + + def getChannel(self): + return self.channel + + def setChannel(self, channel): + self.channel = channel + + + def getTokenIndex(self): + return self.index + + def setTokenIndex(self, index): + self.index = index + + + def getInputStream(self): + return None + + def setInputStream(self, input): + pass + + + def toString(self): + channelStr = "" + if self.channel > 0: + channelStr = ",channel=" + str(self.channel) + + txt = self.text + if txt is None: + txt = "" + + return "[@%r,%r,<%r>%s,%r:%r]" % (self.index, + txt, + self.type, + channelStr, + self.line, + self.charPositionInLine + ) + + + __str__ = toString + __repr__ = toString + + + +EOF_TOKEN = CommonToken(type=EOF) + +INVALID_TOKEN = CommonToken(type=INVALID_TOKEN_TYPE) + +# In an action, a lexer rule can set token to this SKIP_TOKEN and ANTLR +# will avoid creating a token for this symbol and try to fetch another. +SKIP_TOKEN = CommonToken(type=INVALID_TOKEN_TYPE) + + diff --git a/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/tree.py b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/tree.py new file mode 100644 index 0000000..5fcf526 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/tree.py @@ -0,0 +1,2702 @@ +""" @package antlr3.tree +@brief ANTLR3 runtime package, tree module + +This module contains all support classes for AST construction and tree parsers. + +""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +# lot's of docstrings are missing, don't complain for now... +# pylint: disable-msg=C0111 + +import re + +from antlr3.constants import UP, DOWN, EOF, INVALID_TOKEN_TYPE +from antlr3.recognizers import BaseRecognizer, RuleReturnScope +from antlr3.streams import IntStream +from antlr3.tokens import CommonToken, Token, INVALID_TOKEN +from antlr3.exceptions import MismatchedTreeNodeException, \ + MissingTokenException, UnwantedTokenException, MismatchedTokenException, \ + NoViableAltException + + +############################################################################ +# +# tree related exceptions +# +############################################################################ + + +class RewriteCardinalityException(RuntimeError): + """ + @brief Base class for all exceptions thrown during AST rewrite construction. + + This signifies a case where the cardinality of two or more elements + in a subrule are different: (ID INT)+ where |ID|!=|INT| + """ + + def __init__(self, elementDescription): + RuntimeError.__init__(self, elementDescription) + + self.elementDescription = elementDescription + + + def getMessage(self): + return self.elementDescription + + +class RewriteEarlyExitException(RewriteCardinalityException): + """@brief No elements within a (...)+ in a rewrite rule""" + + def __init__(self, elementDescription=None): + RewriteCardinalityException.__init__(self, elementDescription) + + +class RewriteEmptyStreamException(RewriteCardinalityException): + """ + @brief Ref to ID or expr but no tokens in ID stream or subtrees in expr stream + """ + + pass + + +############################################################################ +# +# basic Tree and TreeAdaptor interfaces +# +############################################################################ + +class Tree(object): + """ + @brief Abstract baseclass for tree nodes. + + What does a tree look like? ANTLR has a number of support classes + such as CommonTreeNodeStream that work on these kinds of trees. You + don't have to make your trees implement this interface, but if you do, + you'll be able to use more support code. + + NOTE: When constructing trees, ANTLR can build any kind of tree; it can + even use Token objects as trees if you add a child list to your tokens. + + This is a tree node without any payload; just navigation and factory stuff. + """ + + + def getChild(self, i): + raise NotImplementedError + + + def getChildCount(self): + raise NotImplementedError + + + def getParent(self): + """Tree tracks parent and child index now > 3.0""" + + raise NotImplementedError + + def setParent(self, t): + """Tree tracks parent and child index now > 3.0""" + + raise NotImplementedError + + + def hasAncestor(self, ttype): + """Walk upwards looking for ancestor with this token type.""" + + raise NotImplementedError + + def getAncestor(self, ttype): + """Walk upwards and get first ancestor with this token type.""" + + raise NotImplementedError + + def getAncestors(self): + """Return a list of all ancestors of this node. + + The first node of list is the root and the last is the parent of + this node. + """ + + raise NotImplementedError + + + def getChildIndex(self): + """This node is what child index? 0..n-1""" + + raise NotImplementedError + + def setChildIndex(self, index): + """This node is what child index? 0..n-1""" + + raise NotImplementedError + + + def freshenParentAndChildIndexes(self): + """Set the parent and child index values for all children""" + + raise NotImplementedError + + + def addChild(self, t): + """ + Add t as a child to this node. If t is null, do nothing. If t + is nil, add all children of t to this' children. + """ + + raise NotImplementedError + + + def setChild(self, i, t): + """Set ith child (0..n-1) to t; t must be non-null and non-nil node""" + + raise NotImplementedError + + + def deleteChild(self, i): + raise NotImplementedError + + + def replaceChildren(self, startChildIndex, stopChildIndex, t): + """ + Delete children from start to stop and replace with t even if t is + a list (nil-root tree). num of children can increase or decrease. + For huge child lists, inserting children can force walking rest of + children to set their childindex; could be slow. + """ + + raise NotImplementedError + + + def isNil(self): + """ + Indicates the node is a nil node but may still have children, meaning + the tree is a flat list. + """ + + raise NotImplementedError + + + def getTokenStartIndex(self): + """ + What is the smallest token index (indexing from 0) for this node + and its children? + """ + + raise NotImplementedError + + + def setTokenStartIndex(self, index): + raise NotImplementedError + + + def getTokenStopIndex(self): + """ + What is the largest token index (indexing from 0) for this node + and its children? + """ + + raise NotImplementedError + + + def setTokenStopIndex(self, index): + raise NotImplementedError + + + def dupNode(self): + raise NotImplementedError + + + def getType(self): + """Return a token type; needed for tree parsing.""" + + raise NotImplementedError + + + def getText(self): + raise NotImplementedError + + + def getLine(self): + """ + In case we don't have a token payload, what is the line for errors? + """ + + raise NotImplementedError + + + def getCharPositionInLine(self): + raise NotImplementedError + + + def toStringTree(self): + raise NotImplementedError + + + def toString(self): + raise NotImplementedError + + + +class TreeAdaptor(object): + """ + @brief Abstract baseclass for tree adaptors. + + How to create and navigate trees. Rather than have a separate factory + and adaptor, I've merged them. Makes sense to encapsulate. + + This takes the place of the tree construction code generated in the + generated code in 2.x and the ASTFactory. + + I do not need to know the type of a tree at all so they are all + generic Objects. This may increase the amount of typecasting needed. :( + """ + + # C o n s t r u c t i o n + + def createWithPayload(self, payload): + """ + Create a tree node from Token object; for CommonTree type trees, + then the token just becomes the payload. This is the most + common create call. + + Override if you want another kind of node to be built. + """ + + raise NotImplementedError + + + def dupNode(self, treeNode): + """Duplicate a single tree node. + + Override if you want another kind of node to be built.""" + + raise NotImplementedError + + + def dupTree(self, tree): + """Duplicate tree recursively, using dupNode() for each node""" + + raise NotImplementedError + + + def nil(self): + """ + Return a nil node (an empty but non-null node) that can hold + a list of element as the children. If you want a flat tree (a list) + use "t=adaptor.nil(); t.addChild(x); t.addChild(y);" + """ + + raise NotImplementedError + + + def errorNode(self, input, start, stop, exc): + """ + Return a tree node representing an error. This node records the + tokens consumed during error recovery. The start token indicates the + input symbol at which the error was detected. The stop token indicates + the last symbol consumed during recovery. + + You must specify the input stream so that the erroneous text can + be packaged up in the error node. The exception could be useful + to some applications; default implementation stores ptr to it in + the CommonErrorNode. + + This only makes sense during token parsing, not tree parsing. + Tree parsing should happen only when parsing and tree construction + succeed. + """ + + raise NotImplementedError + + + def isNil(self, tree): + """Is tree considered a nil node used to make lists of child nodes?""" + + raise NotImplementedError + + + def addChild(self, t, child): + """ + Add a child to the tree t. If child is a flat tree (a list), make all + in list children of t. Warning: if t has no children, but child does + and child isNil then you can decide it is ok to move children to t via + t.children = child.children; i.e., without copying the array. Just + make sure that this is consistent with have the user will build + ASTs. Do nothing if t or child is null. + """ + + raise NotImplementedError + + + def becomeRoot(self, newRoot, oldRoot): + """ + If oldRoot is a nil root, just copy or move the children to newRoot. + If not a nil root, make oldRoot a child of newRoot. + + old=^(nil a b c), new=r yields ^(r a b c) + old=^(a b c), new=r yields ^(r ^(a b c)) + + If newRoot is a nil-rooted single child tree, use the single + child as the new root node. + + old=^(nil a b c), new=^(nil r) yields ^(r a b c) + old=^(a b c), new=^(nil r) yields ^(r ^(a b c)) + + If oldRoot was null, it's ok, just return newRoot (even if isNil). + + old=null, new=r yields r + old=null, new=^(nil r) yields ^(nil r) + + Return newRoot. Throw an exception if newRoot is not a + simple node or nil root with a single child node--it must be a root + node. If newRoot is ^(nil x) return x as newRoot. + + Be advised that it's ok for newRoot to point at oldRoot's + children; i.e., you don't have to copy the list. We are + constructing these nodes so we should have this control for + efficiency. + """ + + raise NotImplementedError + + + def rulePostProcessing(self, root): + """ + Given the root of the subtree created for this rule, post process + it to do any simplifications or whatever you want. A required + behavior is to convert ^(nil singleSubtree) to singleSubtree + as the setting of start/stop indexes relies on a single non-nil root + for non-flat trees. + + Flat trees such as for lists like "idlist : ID+ ;" are left alone + unless there is only one ID. For a list, the start/stop indexes + are set in the nil node. + + This method is executed after all rule tree construction and right + before setTokenBoundaries(). + """ + + raise NotImplementedError + + + def getUniqueID(self, node): + """For identifying trees. + + How to identify nodes so we can say "add node to a prior node"? + Even becomeRoot is an issue. Use System.identityHashCode(node) + usually. + """ + + raise NotImplementedError + + + # R e w r i t e R u l e s + + def createFromToken(self, tokenType, fromToken, text=None): + """ + Create a new node derived from a token, with a new token type and + (optionally) new text. + + This is invoked from an imaginary node ref on right side of a + rewrite rule as IMAG[$tokenLabel] or IMAG[$tokenLabel "IMAG"]. + + This should invoke createToken(Token). + """ + + raise NotImplementedError + + + def createFromType(self, tokenType, text): + """Create a new node derived from a token, with a new token type. + + This is invoked from an imaginary node ref on right side of a + rewrite rule as IMAG["IMAG"]. + + This should invoke createToken(int,String). + """ + + raise NotImplementedError + + + # C o n t e n t + + def getType(self, t): + """For tree parsing, I need to know the token type of a node""" + + raise NotImplementedError + + + def setType(self, t, type): + """Node constructors can set the type of a node""" + + raise NotImplementedError + + + def getText(self, t): + raise NotImplementedError + + def setText(self, t, text): + """Node constructors can set the text of a node""" + + raise NotImplementedError + + + def getToken(self, t): + """Return the token object from which this node was created. + + Currently used only for printing an error message. + The error display routine in BaseRecognizer needs to + display where the input the error occurred. If your + tree of limitation does not store information that can + lead you to the token, you can create a token filled with + the appropriate information and pass that back. See + BaseRecognizer.getErrorMessage(). + """ + + raise NotImplementedError + + + def setTokenBoundaries(self, t, startToken, stopToken): + """ + Where are the bounds in the input token stream for this node and + all children? Each rule that creates AST nodes will call this + method right before returning. Flat trees (i.e., lists) will + still usually have a nil root node just to hold the children list. + That node would contain the start/stop indexes then. + """ + + raise NotImplementedError + + + def getTokenStartIndex(self, t): + """ + Get the token start index for this subtree; return -1 if no such index + """ + + raise NotImplementedError + + + def getTokenStopIndex(self, t): + """ + Get the token stop index for this subtree; return -1 if no such index + """ + + raise NotImplementedError + + + # N a v i g a t i o n / T r e e P a r s i n g + + def getChild(self, t, i): + """Get a child 0..n-1 node""" + + raise NotImplementedError + + + def setChild(self, t, i, child): + """Set ith child (0..n-1) to t; t must be non-null and non-nil node""" + + raise NotImplementedError + + + def deleteChild(self, t, i): + """Remove ith child and shift children down from right.""" + + raise NotImplementedError + + + def getChildCount(self, t): + """How many children? If 0, then this is a leaf node""" + + raise NotImplementedError + + + def getParent(self, t): + """ + Who is the parent node of this node; if null, implies node is root. + If your node type doesn't handle this, it's ok but the tree rewrites + in tree parsers need this functionality. + """ + + raise NotImplementedError + + + def setParent(self, t, parent): + """ + Who is the parent node of this node; if null, implies node is root. + If your node type doesn't handle this, it's ok but the tree rewrites + in tree parsers need this functionality. + """ + + raise NotImplementedError + + + def getChildIndex(self, t): + """ + What index is this node in the child list? Range: 0..n-1 + If your node type doesn't handle this, it's ok but the tree rewrites + in tree parsers need this functionality. + """ + + raise NotImplementedError + + + def setChildIndex(self, t, index): + """ + What index is this node in the child list? Range: 0..n-1 + If your node type doesn't handle this, it's ok but the tree rewrites + in tree parsers need this functionality. + """ + + raise NotImplementedError + + + def replaceChildren(self, parent, startChildIndex, stopChildIndex, t): + """ + Replace from start to stop child index of parent with t, which might + be a list. Number of children may be different + after this call. + + If parent is null, don't do anything; must be at root of overall tree. + Can't replace whatever points to the parent externally. Do nothing. + """ + + raise NotImplementedError + + + # Misc + + def create(self, *args): + """ + Deprecated, use createWithPayload, createFromToken or createFromType. + + This method only exists to mimic the Java interface of TreeAdaptor. + + """ + + if len(args) == 1 and isinstance(args[0], Token): + # Object create(Token payload); +## warnings.warn( +## "Using create() is deprecated, use createWithPayload()", +## DeprecationWarning, +## stacklevel=2 +## ) + return self.createWithPayload(args[0]) + + if (len(args) == 2 + and isinstance(args[0], (int, long)) + and isinstance(args[1], Token) + ): + # Object create(int tokenType, Token fromToken); +## warnings.warn( +## "Using create() is deprecated, use createFromToken()", +## DeprecationWarning, +## stacklevel=2 +## ) + return self.createFromToken(args[0], args[1]) + + if (len(args) == 3 + and isinstance(args[0], (int, long)) + and isinstance(args[1], Token) + and isinstance(args[2], basestring) + ): + # Object create(int tokenType, Token fromToken, String text); +## warnings.warn( +## "Using create() is deprecated, use createFromToken()", +## DeprecationWarning, +## stacklevel=2 +## ) + return self.createFromToken(args[0], args[1], args[2]) + + if (len(args) == 2 + and isinstance(args[0], (int, long)) + and isinstance(args[1], basestring) + ): + # Object create(int tokenType, String text); +## warnings.warn( +## "Using create() is deprecated, use createFromType()", +## DeprecationWarning, +## stacklevel=2 +## ) + return self.createFromType(args[0], args[1]) + + raise TypeError( + "No create method with this signature found: %s" + % (', '.join(type(v).__name__ for v in args)) + ) + + +############################################################################ +# +# base implementation of Tree and TreeAdaptor +# +# Tree +# \- BaseTree +# +# TreeAdaptor +# \- BaseTreeAdaptor +# +############################################################################ + + +class BaseTree(Tree): + """ + @brief A generic tree implementation with no payload. + + You must subclass to + actually have any user data. ANTLR v3 uses a list of children approach + instead of the child-sibling approach in v2. A flat tree (a list) is + an empty node whose children represent the list. An empty, but + non-null node is called "nil". + """ + + # BaseTree is abstract, no need to complain about not implemented abstract + # methods + # pylint: disable-msg=W0223 + + def __init__(self, node=None): + """ + Create a new node from an existing node does nothing for BaseTree + as there are no fields other than the children list, which cannot + be copied as the children are not considered part of this node. + """ + + Tree.__init__(self) + self.children = [] + self.parent = None + self.childIndex = 0 + + + def getChild(self, i): + try: + return self.children[i] + except IndexError: + return None + + + def getChildren(self): + """@brief Get the children internal List + + Note that if you directly mess with + the list, do so at your own risk. + """ + + # FIXME: mark as deprecated + return self.children + + + def getFirstChildWithType(self, treeType): + for child in self.children: + if child.getType() == treeType: + return child + + return None + + + def getChildCount(self): + return len(self.children) + + + def addChild(self, childTree): + """Add t as child of this node. + + Warning: if t has no children, but child does + and child isNil then this routine moves children to t via + t.children = child.children; i.e., without copying the array. + """ + + # this implementation is much simpler and probably less efficient + # than the mumbo-jumbo that Ter did for the Java runtime. + + if childTree is None: + return + + if childTree.isNil(): + # t is an empty node possibly with children + + if self.children is childTree.children: + raise ValueError("attempt to add child list to itself") + + # fix parent pointer and childIndex for new children + for idx, child in enumerate(childTree.children): + child.parent = self + child.childIndex = len(self.children) + idx + + self.children += childTree.children + + else: + # child is not nil (don't care about children) + self.children.append(childTree) + childTree.parent = self + childTree.childIndex = len(self.children) - 1 + + + def addChildren(self, children): + """Add all elements of kids list as children of this node""" + + self.children += children + + + def setChild(self, i, t): + if t is None: + return + + if t.isNil(): + raise ValueError("Can't set single child to a list") + + self.children[i] = t + t.parent = self + t.childIndex = i + + + def deleteChild(self, i): + killed = self.children[i] + + del self.children[i] + + # walk rest and decrement their child indexes + for idx, child in enumerate(self.children[i:]): + child.childIndex = i + idx + + return killed + + + def replaceChildren(self, startChildIndex, stopChildIndex, newTree): + """ + Delete children from start to stop and replace with t even if t is + a list (nil-root tree). num of children can increase or decrease. + For huge child lists, inserting children can force walking rest of + children to set their childindex; could be slow. + """ + + if (startChildIndex >= len(self.children) + or stopChildIndex >= len(self.children) + ): + raise IndexError("indexes invalid") + + replacingHowMany = stopChildIndex - startChildIndex + 1 + + # normalize to a list of children to add: newChildren + if newTree.isNil(): + newChildren = newTree.children + + else: + newChildren = [newTree] + + replacingWithHowMany = len(newChildren) + delta = replacingHowMany - replacingWithHowMany + + + if delta == 0: + # if same number of nodes, do direct replace + for idx, child in enumerate(newChildren): + self.children[idx + startChildIndex] = child + child.parent = self + child.childIndex = idx + startChildIndex + + else: + # length of children changes... + + # ...delete replaced segment... + del self.children[startChildIndex:stopChildIndex+1] + + # ...insert new segment... + self.children[startChildIndex:startChildIndex] = newChildren + + # ...and fix indeces + self.freshenParentAndChildIndexes(startChildIndex) + + + def isNil(self): + return False + + + def freshenParentAndChildIndexes(self, offset=0): + for idx, child in enumerate(self.children[offset:]): + child.childIndex = idx + offset + child.parent = self + + + def sanityCheckParentAndChildIndexes(self, parent=None, i=-1): + if parent != self.parent: + raise ValueError( + "parents don't match; expected %r found %r" + % (parent, self.parent) + ) + + if i != self.childIndex: + raise ValueError( + "child indexes don't match; expected %d found %d" + % (i, self.childIndex) + ) + + for idx, child in enumerate(self.children): + child.sanityCheckParentAndChildIndexes(self, idx) + + + def getChildIndex(self): + """BaseTree doesn't track child indexes.""" + + return 0 + + + def setChildIndex(self, index): + """BaseTree doesn't track child indexes.""" + + pass + + + def getParent(self): + """BaseTree doesn't track parent pointers.""" + + return None + + def setParent(self, t): + """BaseTree doesn't track parent pointers.""" + + pass + + + def hasAncestor(self, ttype): + """Walk upwards looking for ancestor with this token type.""" + return self.getAncestor(ttype) is not None + + def getAncestor(self, ttype): + """Walk upwards and get first ancestor with this token type.""" + t = self.getParent() + while t is not None: + if t.getType() == ttype: + return t + t = t.getParent() + + return None + + def getAncestors(self): + """Return a list of all ancestors of this node. + + The first node of list is the root and the last is the parent of + this node. + """ + if selfgetParent() is None: + return None + + ancestors = [] + t = self.getParent() + while t is not None: + ancestors.insert(0, t) # insert at start + t = t.getParent() + + return ancestors + + + def toStringTree(self): + """Print out a whole tree not just a node""" + + if len(self.children) == 0: + return self.toString() + + buf = [] + if not self.isNil(): + buf.append('(') + buf.append(self.toString()) + buf.append(' ') + + for i, child in enumerate(self.children): + if i > 0: + buf.append(' ') + buf.append(child.toStringTree()) + + if not self.isNil(): + buf.append(')') + + return ''.join(buf) + + + def getLine(self): + return 0 + + + def getCharPositionInLine(self): + return 0 + + + def toString(self): + """Override to say how a node (not a tree) should look as text""" + + raise NotImplementedError + + + +class BaseTreeAdaptor(TreeAdaptor): + """ + @brief A TreeAdaptor that works with any Tree implementation. + """ + + # BaseTreeAdaptor is abstract, no need to complain about not implemented + # abstract methods + # pylint: disable-msg=W0223 + + def nil(self): + return self.createWithPayload(None) + + + def errorNode(self, input, start, stop, exc): + """ + create tree node that holds the start and stop tokens associated + with an error. + + If you specify your own kind of tree nodes, you will likely have to + override this method. CommonTree returns Token.INVALID_TOKEN_TYPE + if no token payload but you might have to set token type for diff + node type. + + You don't have to subclass CommonErrorNode; you will likely need to + subclass your own tree node class to avoid class cast exception. + """ + + return CommonErrorNode(input, start, stop, exc) + + + def isNil(self, tree): + return tree.isNil() + + + def dupTree(self, t, parent=None): + """ + This is generic in the sense that it will work with any kind of + tree (not just Tree interface). It invokes the adaptor routines + not the tree node routines to do the construction. + """ + + if t is None: + return None + + newTree = self.dupNode(t) + + # ensure new subtree root has parent/child index set + + # same index in new tree + self.setChildIndex(newTree, self.getChildIndex(t)) + + self.setParent(newTree, parent) + + for i in range(self.getChildCount(t)): + child = self.getChild(t, i) + newSubTree = self.dupTree(child, t) + self.addChild(newTree, newSubTree) + + return newTree + + + def addChild(self, tree, child): + """ + Add a child to the tree t. If child is a flat tree (a list), make all + in list children of t. Warning: if t has no children, but child does + and child isNil then you can decide it is ok to move children to t via + t.children = child.children; i.e., without copying the array. Just + make sure that this is consistent with have the user will build + ASTs. + """ + + #if isinstance(child, Token): + # child = self.createWithPayload(child) + + if tree is not None and child is not None: + tree.addChild(child) + + + def becomeRoot(self, newRoot, oldRoot): + """ + If oldRoot is a nil root, just copy or move the children to newRoot. + If not a nil root, make oldRoot a child of newRoot. + + old=^(nil a b c), new=r yields ^(r a b c) + old=^(a b c), new=r yields ^(r ^(a b c)) + + If newRoot is a nil-rooted single child tree, use the single + child as the new root node. + + old=^(nil a b c), new=^(nil r) yields ^(r a b c) + old=^(a b c), new=^(nil r) yields ^(r ^(a b c)) + + If oldRoot was null, it's ok, just return newRoot (even if isNil). + + old=null, new=r yields r + old=null, new=^(nil r) yields ^(nil r) + + Return newRoot. Throw an exception if newRoot is not a + simple node or nil root with a single child node--it must be a root + node. If newRoot is ^(nil x) return x as newRoot. + + Be advised that it's ok for newRoot to point at oldRoot's + children; i.e., you don't have to copy the list. We are + constructing these nodes so we should have this control for + efficiency. + """ + + if isinstance(newRoot, Token): + newRoot = self.create(newRoot) + + if oldRoot is None: + return newRoot + + if not isinstance(newRoot, CommonTree): + newRoot = self.createWithPayload(newRoot) + + # handle ^(nil real-node) + if newRoot.isNil(): + nc = newRoot.getChildCount() + if nc == 1: + newRoot = newRoot.getChild(0) + + elif nc > 1: + # TODO: make tree run time exceptions hierarchy + raise RuntimeError("more than one node as root") + + # add oldRoot to newRoot; addChild takes care of case where oldRoot + # is a flat list (i.e., nil-rooted tree). All children of oldRoot + # are added to newRoot. + newRoot.addChild(oldRoot) + return newRoot + + + def rulePostProcessing(self, root): + """Transform ^(nil x) to x and nil to null""" + + if root is not None and root.isNil(): + if root.getChildCount() == 0: + root = None + + elif root.getChildCount() == 1: + root = root.getChild(0) + # whoever invokes rule will set parent and child index + root.setParent(None) + root.setChildIndex(-1) + + return root + + + def createFromToken(self, tokenType, fromToken, text=None): + assert isinstance(tokenType, (int, long)), type(tokenType).__name__ + assert isinstance(fromToken, Token), type(fromToken).__name__ + assert text is None or isinstance(text, basestring), type(text).__name__ + + fromToken = self.createToken(fromToken) + fromToken.type = tokenType + if text is not None: + fromToken.text = text + t = self.createWithPayload(fromToken) + return t + + + def createFromType(self, tokenType, text): + assert isinstance(tokenType, (int, long)), type(tokenType).__name__ + assert isinstance(text, basestring) or text is None, type(text).__name__ + + fromToken = self.createToken(tokenType=tokenType, text=text) + t = self.createWithPayload(fromToken) + return t + + + def getType(self, t): + return t.getType() + + + def setType(self, t, type): + raise RuntimeError("don't know enough about Tree node") + + + def getText(self, t): + return t.getText() + + + def setText(self, t, text): + raise RuntimeError("don't know enough about Tree node") + + + def getChild(self, t, i): + return t.getChild(i) + + + def setChild(self, t, i, child): + t.setChild(i, child) + + + def deleteChild(self, t, i): + return t.deleteChild(i) + + + def getChildCount(self, t): + return t.getChildCount() + + + def getUniqueID(self, node): + return hash(node) + + + def createToken(self, fromToken=None, tokenType=None, text=None): + """ + Tell me how to create a token for use with imaginary token nodes. + For example, there is probably no input symbol associated with imaginary + token DECL, but you need to create it as a payload or whatever for + the DECL node as in ^(DECL type ID). + + If you care what the token payload objects' type is, you should + override this method and any other createToken variant. + """ + + raise NotImplementedError + + +############################################################################ +# +# common tree implementation +# +# Tree +# \- BaseTree +# \- CommonTree +# \- CommonErrorNode +# +# TreeAdaptor +# \- BaseTreeAdaptor +# \- CommonTreeAdaptor +# +############################################################################ + + +class CommonTree(BaseTree): + """@brief A tree node that is wrapper for a Token object. + + After 3.0 release + while building tree rewrite stuff, it became clear that computing + parent and child index is very difficult and cumbersome. Better to + spend the space in every tree node. If you don't want these extra + fields, it's easy to cut them out in your own BaseTree subclass. + + """ + + def __init__(self, payload): + BaseTree.__init__(self) + + # What token indexes bracket all tokens associated with this node + # and below? + self.startIndex = -1 + self.stopIndex = -1 + + # Who is the parent node of this node; if null, implies node is root + self.parent = None + + # What index is this node in the child list? Range: 0..n-1 + self.childIndex = -1 + + # A single token is the payload + if payload is None: + self.token = None + + elif isinstance(payload, CommonTree): + self.token = payload.token + self.startIndex = payload.startIndex + self.stopIndex = payload.stopIndex + + elif payload is None or isinstance(payload, Token): + self.token = payload + + else: + raise TypeError(type(payload).__name__) + + + + def getToken(self): + return self.token + + + def dupNode(self): + return CommonTree(self) + + + def isNil(self): + return self.token is None + + + def getType(self): + if self.token is None: + return INVALID_TOKEN_TYPE + + return self.token.getType() + + type = property(getType) + + + def getText(self): + if self.token is None: + return None + + return self.token.text + + text = property(getText) + + + def getLine(self): + if self.token is None or self.token.getLine() == 0: + if self.getChildCount(): + return self.getChild(0).getLine() + else: + return 0 + + return self.token.getLine() + + line = property(getLine) + + + def getCharPositionInLine(self): + if self.token is None or self.token.getCharPositionInLine() == -1: + if self.getChildCount(): + return self.getChild(0).getCharPositionInLine() + else: + return 0 + + else: + return self.token.getCharPositionInLine() + + charPositionInLine = property(getCharPositionInLine) + + + def getTokenStartIndex(self): + if self.startIndex == -1 and self.token is not None: + return self.token.getTokenIndex() + + return self.startIndex + + def setTokenStartIndex(self, index): + self.startIndex = index + + tokenStartIndex = property(getTokenStartIndex, setTokenStartIndex) + + + def getTokenStopIndex(self): + if self.stopIndex == -1 and self.token is not None: + return self.token.getTokenIndex() + + return self.stopIndex + + def setTokenStopIndex(self, index): + self.stopIndex = index + + tokenStopIndex = property(getTokenStopIndex, setTokenStopIndex) + + + def setUnknownTokenBoundaries(self): + """For every node in this subtree, make sure it's start/stop token's + are set. Walk depth first, visit bottom up. Only updates nodes + with at least one token index < 0. + """ + + if self.children is None: + if self.startIndex < 0 or self.stopIndex < 0: + self.startIndex = self.stopIndex = self.token.getTokenIndex() + + return + + for child in self.children: + child.setUnknownTokenBoundaries() + + if self.startIndex >= 0 and self.stopIndex >= 0: + # already set + return + + if self.children: + firstChild = self.children[0] + lastChild = self.children[-1] + self.startIndex = firstChild.getTokenStartIndex() + self.stopIndex = lastChild.getTokenStopIndex() + + + def getChildIndex(self): + #FIXME: mark as deprecated + return self.childIndex + + + def setChildIndex(self, idx): + #FIXME: mark as deprecated + self.childIndex = idx + + + def getParent(self): + #FIXME: mark as deprecated + return self.parent + + + def setParent(self, t): + #FIXME: mark as deprecated + self.parent = t + + + def toString(self): + if self.isNil(): + return "nil" + + if self.getType() == INVALID_TOKEN_TYPE: + return "" + + return self.token.text + + __str__ = toString + + + + def toStringTree(self): + if not self.children: + return self.toString() + + ret = '' + if not self.isNil(): + ret += '(%s ' % (self.toString()) + + ret += ' '.join([child.toStringTree() for child in self.children]) + + if not self.isNil(): + ret += ')' + + return ret + + +INVALID_NODE = CommonTree(INVALID_TOKEN) + + +class CommonErrorNode(CommonTree): + """A node representing erroneous token range in token stream""" + + def __init__(self, input, start, stop, exc): + CommonTree.__init__(self, None) + + if (stop is None or + (stop.getTokenIndex() < start.getTokenIndex() and + stop.getType() != EOF + ) + ): + # sometimes resync does not consume a token (when LT(1) is + # in follow set. So, stop will be 1 to left to start. adjust. + # Also handle case where start is the first token and no token + # is consumed during recovery; LT(-1) will return null. + stop = start + + self.input = input + self.start = start + self.stop = stop + self.trappedException = exc + + + def isNil(self): + return False + + + def getType(self): + return INVALID_TOKEN_TYPE + + + def getText(self): + if isinstance(self.start, Token): + i = self.start.getTokenIndex() + j = self.stop.getTokenIndex() + if self.stop.getType() == EOF: + j = self.input.size() + + badText = self.input.toString(i, j) + + elif isinstance(self.start, Tree): + badText = self.input.toString(self.start, self.stop) + + else: + # people should subclass if they alter the tree type so this + # next one is for sure correct. + badText = "" + + return badText + + + def toString(self): + if isinstance(self.trappedException, MissingTokenException): + return ("") + + elif isinstance(self.trappedException, UnwantedTokenException): + return ("") + + elif isinstance(self.trappedException, MismatchedTokenException): + return ("") + + elif isinstance(self.trappedException, NoViableAltException): + return ("") + + return "" + + +class CommonTreeAdaptor(BaseTreeAdaptor): + """ + @brief A TreeAdaptor that works with any Tree implementation. + + It provides + really just factory methods; all the work is done by BaseTreeAdaptor. + If you would like to have different tokens created than ClassicToken + objects, you need to override this and then set the parser tree adaptor to + use your subclass. + + To get your parser to build nodes of a different type, override + create(Token), errorNode(), and to be safe, YourTreeClass.dupNode(). + dupNode is called to duplicate nodes during rewrite operations. + """ + + def dupNode(self, treeNode): + """ + Duplicate a node. This is part of the factory; + override if you want another kind of node to be built. + + I could use reflection to prevent having to override this + but reflection is slow. + """ + + if treeNode is None: + return None + + return treeNode.dupNode() + + + def createWithPayload(self, payload): + return CommonTree(payload) + + + def createToken(self, fromToken=None, tokenType=None, text=None): + """ + Tell me how to create a token for use with imaginary token nodes. + For example, there is probably no input symbol associated with imaginary + token DECL, but you need to create it as a payload or whatever for + the DECL node as in ^(DECL type ID). + + If you care what the token payload objects' type is, you should + override this method and any other createToken variant. + """ + + if fromToken is not None: + return CommonToken(oldToken=fromToken) + + return CommonToken(type=tokenType, text=text) + + + def setTokenBoundaries(self, t, startToken, stopToken): + """ + Track start/stop token for subtree root created for a rule. + Only works with Tree nodes. For rules that match nothing, + seems like this will yield start=i and stop=i-1 in a nil node. + Might be useful info so I'll not force to be i..i. + """ + + if t is None: + return + + start = 0 + stop = 0 + + if startToken is not None: + start = startToken.index + + if stopToken is not None: + stop = stopToken.index + + t.setTokenStartIndex(start) + t.setTokenStopIndex(stop) + + + def getTokenStartIndex(self, t): + if t is None: + return -1 + return t.getTokenStartIndex() + + + def getTokenStopIndex(self, t): + if t is None: + return -1 + return t.getTokenStopIndex() + + + def getText(self, t): + if t is None: + return None + return t.getText() + + + def getType(self, t): + if t is None: + return INVALID_TOKEN_TYPE + + return t.getType() + + + def getToken(self, t): + """ + What is the Token associated with this node? If + you are not using CommonTree, then you must + override this in your own adaptor. + """ + + if isinstance(t, CommonTree): + return t.getToken() + + return None # no idea what to do + + + def getChild(self, t, i): + if t is None: + return None + return t.getChild(i) + + + def getChildCount(self, t): + if t is None: + return 0 + return t.getChildCount() + + + def getParent(self, t): + return t.getParent() + + + def setParent(self, t, parent): + t.setParent(parent) + + + def getChildIndex(self, t): + if t is None: + return 0 + return t.getChildIndex() + + + def setChildIndex(self, t, index): + t.setChildIndex(index) + + + def replaceChildren(self, parent, startChildIndex, stopChildIndex, t): + if parent is not None: + parent.replaceChildren(startChildIndex, stopChildIndex, t) + + +############################################################################ +# +# streams +# +# TreeNodeStream +# \- BaseTree +# \- CommonTree +# +# TreeAdaptor +# \- BaseTreeAdaptor +# \- CommonTreeAdaptor +# +############################################################################ + + + +class TreeNodeStream(IntStream): + """@brief A stream of tree nodes + + It accessing nodes from a tree of some kind. + """ + + # TreeNodeStream is abstract, no need to complain about not implemented + # abstract methods + # pylint: disable-msg=W0223 + + def get(self, i): + """Get a tree node at an absolute index i; 0..n-1. + If you don't want to buffer up nodes, then this method makes no + sense for you. + """ + + raise NotImplementedError + + + def LT(self, k): + """ + Get tree node at current input pointer + i ahead where i=1 is next node. + i<0 indicates nodes in the past. So LT(-1) is previous node, but + implementations are not required to provide results for k < -1. + LT(0) is undefined. For i>=n, return null. + Return null for LT(0) and any index that results in an absolute address + that is negative. + + This is analogus to the LT() method of the TokenStream, but this + returns a tree node instead of a token. Makes code gen identical + for both parser and tree grammars. :) + """ + + raise NotImplementedError + + + def getTreeSource(self): + """ + Where is this stream pulling nodes from? This is not the name, but + the object that provides node objects. + """ + + raise NotImplementedError + + + def getTokenStream(self): + """ + If the tree associated with this stream was created from a TokenStream, + you can specify it here. Used to do rule $text attribute in tree + parser. Optional unless you use tree parser rule text attribute + or output=template and rewrite=true options. + """ + + raise NotImplementedError + + + def getTreeAdaptor(self): + """ + What adaptor can tell me how to interpret/navigate nodes and + trees. E.g., get text of a node. + """ + + raise NotImplementedError + + + def setUniqueNavigationNodes(self, uniqueNavigationNodes): + """ + As we flatten the tree, we use UP, DOWN nodes to represent + the tree structure. When debugging we need unique nodes + so we have to instantiate new ones. When doing normal tree + parsing, it's slow and a waste of memory to create unique + navigation nodes. Default should be false; + """ + + raise NotImplementedError + + + def toString(self, start, stop): + """ + Return the text of all nodes from start to stop, inclusive. + If the stream does not buffer all the nodes then it can still + walk recursively from start until stop. You can always return + null or "" too, but users should not access $ruleLabel.text in + an action of course in that case. + """ + + raise NotImplementedError + + + # REWRITING TREES (used by tree parser) + def replaceChildren(self, parent, startChildIndex, stopChildIndex, t): + """ + Replace from start to stop child index of parent with t, which might + be a list. Number of children may be different + after this call. The stream is notified because it is walking the + tree and might need to know you are monkeying with the underlying + tree. Also, it might be able to modify the node stream to avoid + restreaming for future phases. + + If parent is null, don't do anything; must be at root of overall tree. + Can't replace whatever points to the parent externally. Do nothing. + """ + + raise NotImplementedError + + +class CommonTreeNodeStream(TreeNodeStream): + """@brief A buffered stream of tree nodes. + + Nodes can be from a tree of ANY kind. + + This node stream sucks all nodes out of the tree specified in + the constructor during construction and makes pointers into + the tree using an array of Object pointers. The stream necessarily + includes pointers to DOWN and UP and EOF nodes. + + This stream knows how to mark/release for backtracking. + + This stream is most suitable for tree interpreters that need to + jump around a lot or for tree parsers requiring speed (at cost of memory). + There is some duplicated functionality here with UnBufferedTreeNodeStream + but just in bookkeeping, not tree walking etc... + + @see UnBufferedTreeNodeStream + """ + + def __init__(self, *args): + TreeNodeStream.__init__(self) + + if len(args) == 1: + adaptor = CommonTreeAdaptor() + tree = args[0] + + nodes = None + down = None + up = None + eof = None + + elif len(args) == 2: + adaptor = args[0] + tree = args[1] + + nodes = None + down = None + up = None + eof = None + + elif len(args) == 3: + parent = args[0] + start = args[1] + stop = args[2] + + adaptor = parent.adaptor + tree = parent.root + + nodes = parent.nodes[start:stop] + down = parent.down + up = parent.up + eof = parent.eof + + else: + raise TypeError("Invalid arguments") + + # all these navigation nodes are shared and hence they + # cannot contain any line/column info + if down is not None: + self.down = down + else: + self.down = adaptor.createFromType(DOWN, "DOWN") + + if up is not None: + self.up = up + else: + self.up = adaptor.createFromType(UP, "UP") + + if eof is not None: + self.eof = eof + else: + self.eof = adaptor.createFromType(EOF, "EOF") + + # The complete mapping from stream index to tree node. + # This buffer includes pointers to DOWN, UP, and EOF nodes. + # It is built upon ctor invocation. The elements are type + # Object as we don't what the trees look like. + + # Load upon first need of the buffer so we can set token types + # of interest for reverseIndexing. Slows us down a wee bit to + # do all of the if p==-1 testing everywhere though. + if nodes is not None: + self.nodes = nodes + else: + self.nodes = [] + + # Pull nodes from which tree? + self.root = tree + + # IF this tree (root) was created from a token stream, track it. + self.tokens = None + + # What tree adaptor was used to build these trees + self.adaptor = adaptor + + # Reuse same DOWN, UP navigation nodes unless this is true + self.uniqueNavigationNodes = False + + # The index into the nodes list of the current node (next node + # to consume). If -1, nodes array not filled yet. + self.p = -1 + + # Track the last mark() call result value for use in rewind(). + self.lastMarker = None + + # Stack of indexes used for push/pop calls + self.calls = [] + + + def fillBuffer(self): + """Walk tree with depth-first-search and fill nodes buffer. + Don't do DOWN, UP nodes if its a list (t is isNil). + """ + + self._fillBuffer(self.root) + self.p = 0 # buffer of nodes intialized now + + + def _fillBuffer(self, t): + nil = self.adaptor.isNil(t) + + if not nil: + self.nodes.append(t) # add this node + + # add DOWN node if t has children + n = self.adaptor.getChildCount(t) + if not nil and n > 0: + self.addNavigationNode(DOWN) + + # and now add all its children + for c in range(n): + self._fillBuffer(self.adaptor.getChild(t, c)) + + # add UP node if t has children + if not nil and n > 0: + self.addNavigationNode(UP) + + + def getNodeIndex(self, node): + """What is the stream index for node? 0..n-1 + Return -1 if node not found. + """ + + if self.p == -1: + self.fillBuffer() + + for i, t in enumerate(self.nodes): + if t == node: + return i + + return -1 + + + def addNavigationNode(self, ttype): + """ + As we flatten the tree, we use UP, DOWN nodes to represent + the tree structure. When debugging we need unique nodes + so instantiate new ones when uniqueNavigationNodes is true. + """ + + navNode = None + + if ttype == DOWN: + if self.hasUniqueNavigationNodes(): + navNode = self.adaptor.createFromType(DOWN, "DOWN") + + else: + navNode = self.down + + else: + if self.hasUniqueNavigationNodes(): + navNode = self.adaptor.createFromType(UP, "UP") + + else: + navNode = self.up + + self.nodes.append(navNode) + + + def get(self, i): + if self.p == -1: + self.fillBuffer() + + return self.nodes[i] + + + def LT(self, k): + if self.p == -1: + self.fillBuffer() + + if k == 0: + return None + + if k < 0: + return self.LB(-k) + + if self.p + k - 1 >= len(self.nodes): + return self.eof + + return self.nodes[self.p + k - 1] + + + def getCurrentSymbol(self): + return self.LT(1) + + + def LB(self, k): + """Look backwards k nodes""" + + if k == 0: + return None + + if self.p - k < 0: + return None + + return self.nodes[self.p - k] + + + def getTreeSource(self): + return self.root + + + def getSourceName(self): + return self.getTokenStream().getSourceName() + + + def getTokenStream(self): + return self.tokens + + + def setTokenStream(self, tokens): + self.tokens = tokens + + + def getTreeAdaptor(self): + return self.adaptor + + + def hasUniqueNavigationNodes(self): + return self.uniqueNavigationNodes + + + def setUniqueNavigationNodes(self, uniqueNavigationNodes): + self.uniqueNavigationNodes = uniqueNavigationNodes + + + def consume(self): + if self.p == -1: + self.fillBuffer() + + self.p += 1 + + + def LA(self, i): + return self.adaptor.getType(self.LT(i)) + + + def mark(self): + if self.p == -1: + self.fillBuffer() + + + self.lastMarker = self.index() + return self.lastMarker + + + def release(self, marker=None): + # no resources to release + + pass + + + def index(self): + return self.p + + + def rewind(self, marker=None): + if marker is None: + marker = self.lastMarker + + self.seek(marker) + + + def seek(self, index): + if self.p == -1: + self.fillBuffer() + + self.p = index + + + def push(self, index): + """ + Make stream jump to a new location, saving old location. + Switch back with pop(). + """ + + self.calls.append(self.p) # save current index + self.seek(index) + + + def pop(self): + """ + Seek back to previous index saved during last push() call. + Return top of stack (return index). + """ + + ret = self.calls.pop(-1) + self.seek(ret) + return ret + + + def reset(self): + self.p = 0 + self.lastMarker = 0 + self.calls = [] + + + def size(self): + if self.p == -1: + self.fillBuffer() + + return len(self.nodes) + + + # TREE REWRITE INTERFACE + + def replaceChildren(self, parent, startChildIndex, stopChildIndex, t): + if parent is not None: + self.adaptor.replaceChildren( + parent, startChildIndex, stopChildIndex, t + ) + + + def __str__(self): + """Used for testing, just return the token type stream""" + + if self.p == -1: + self.fillBuffer() + + return ' '.join([str(self.adaptor.getType(node)) + for node in self.nodes + ]) + + + def toString(self, start, stop): + if start is None or stop is None: + return None + + if self.p == -1: + self.fillBuffer() + + #System.out.println("stop: "+stop); + #if ( start instanceof CommonTree ) + # System.out.print("toString: "+((CommonTree)start).getToken()+", "); + #else + # System.out.println(start); + #if ( stop instanceof CommonTree ) + # System.out.println(((CommonTree)stop).getToken()); + #else + # System.out.println(stop); + + # if we have the token stream, use that to dump text in order + if self.tokens is not None: + beginTokenIndex = self.adaptor.getTokenStartIndex(start) + endTokenIndex = self.adaptor.getTokenStopIndex(stop) + + # if it's a tree, use start/stop index from start node + # else use token range from start/stop nodes + if self.adaptor.getType(stop) == UP: + endTokenIndex = self.adaptor.getTokenStopIndex(start) + + elif self.adaptor.getType(stop) == EOF: + endTokenIndex = self.size() -2 # don't use EOF + + return self.tokens.toString(beginTokenIndex, endTokenIndex) + + # walk nodes looking for start + i, t = 0, None + for i, t in enumerate(self.nodes): + if t == start: + break + + # now walk until we see stop, filling string buffer with text + buf = [] + t = self.nodes[i] + while t != stop: + text = self.adaptor.getText(t) + if text is None: + text = " " + self.adaptor.getType(t) + + buf.append(text) + i += 1 + t = self.nodes[i] + + # include stop node too + text = self.adaptor.getText(stop) + if text is None: + text = " " +self.adaptor.getType(stop) + + buf.append(text) + + return ''.join(buf) + + + ## iterator interface + def __iter__(self): + if self.p == -1: + self.fillBuffer() + + for node in self.nodes: + yield node + + +############################################################################# +# +# tree parser +# +############################################################################# + +class TreeParser(BaseRecognizer): + """@brief Baseclass for generated tree parsers. + + A parser for a stream of tree nodes. "tree grammars" result in a subclass + of this. All the error reporting and recovery is shared with Parser via + the BaseRecognizer superclass. + """ + + def __init__(self, input, state=None): + BaseRecognizer.__init__(self, state) + + self.input = None + self.setTreeNodeStream(input) + + + def reset(self): + BaseRecognizer.reset(self) # reset all recognizer state variables + if self.input is not None: + self.input.seek(0) # rewind the input + + + def setTreeNodeStream(self, input): + """Set the input stream""" + + self.input = input + + + def getTreeNodeStream(self): + return self.input + + + def getSourceName(self): + return self.input.getSourceName() + + + def getCurrentInputSymbol(self, input): + return input.LT(1) + + + def getMissingSymbol(self, input, e, expectedTokenType, follow): + tokenText = "" + return CommonTree(CommonToken(type=expectedTokenType, text=tokenText)) + + + # precompiled regex used by inContext + dotdot = ".*[^.]\\.\\.[^.].*" + doubleEtc = ".*\\.\\.\\.\\s+\\.\\.\\..*" + dotdotPattern = re.compile(dotdot) + doubleEtcPattern = re.compile(doubleEtc) + + def inContext(self, context, adaptor=None, tokenName=None, t=None): + """Check if current node in input has a context. + + Context means sequence of nodes towards root of tree. For example, + you might say context is "MULT" which means my parent must be MULT. + "CLASS VARDEF" says current node must be child of a VARDEF and whose + parent is a CLASS node. You can use "..." to mean zero-or-more nodes. + "METHOD ... VARDEF" means my parent is VARDEF and somewhere above + that is a METHOD node. The first node in the context is not + necessarily the root. The context matcher stops matching and returns + true when it runs out of context. There is no way to force the first + node to be the root. + """ + + return _inContext( + self.input.getTreeAdaptor(), self.getTokenNames(), + self.input.LT(1), context) + + @classmethod + def _inContext(cls, adaptor, tokenNames, t, context): + """The worker for inContext. + + It's static and full of parameters for testing purposes. + """ + + if cls.dotdotPattern.match(context): + # don't allow "..", must be "..." + raise ValueError("invalid syntax: ..") + + if cls.doubleEtcPattern.match(context): + # don't allow double "..." + raise ValueError("invalid syntax: ... ...") + + # ensure spaces around ... + context = context.replace("...", " ... ") + context = context.strip() + nodes = context.split() + + ni = len(nodes) - 1 + t = adaptor.getParent(t) + while ni >= 0 and t is not None: + if nodes[ni] == "...": + # walk upwards until we see nodes[ni-1] then continue walking + if ni == 0: + # ... at start is no-op + return True + goal = nodes[ni-1] + ancestor = cls._getAncestor(adaptor, tokenNames, t, goal) + if ancestor is None: + return False + t = ancestor + ni -= 1 + + name = tokenNames[adaptor.getType(t)] + if name != nodes[ni]: + return False + + # advance to parent and to previous element in context node list + ni -= 1 + t = adaptor.getParent(t) + + # at root but more nodes to match + if t is None and ni >= 0: + return False + + return True + + @staticmethod + def _getAncestor(adaptor, tokenNames, t, goal): + """Helper for static inContext.""" + while t is not None: + name = tokenNames[adaptor.getType(t)] + if name == goal: + return t + t = adaptor.getParent(t) + + return None + + + def matchAny(self, ignore): # ignore stream, copy of this.input + """ + Match '.' in tree parser has special meaning. Skip node or + entire tree if node has children. If children, scan until + corresponding UP node. + """ + + self._state.errorRecovery = False + + look = self.input.LT(1) + if self.input.getTreeAdaptor().getChildCount(look) == 0: + self.input.consume() # not subtree, consume 1 node and return + return + + # current node is a subtree, skip to corresponding UP. + # must count nesting level to get right UP + level = 0 + tokenType = self.input.getTreeAdaptor().getType(look) + while tokenType != EOF and not (tokenType == UP and level==0): + self.input.consume() + look = self.input.LT(1) + tokenType = self.input.getTreeAdaptor().getType(look) + if tokenType == DOWN: + level += 1 + + elif tokenType == UP: + level -= 1 + + self.input.consume() # consume UP + + + def mismatch(self, input, ttype, follow): + """ + We have DOWN/UP nodes in the stream that have no line info; override. + plus we want to alter the exception type. Don't try to recover + from tree parser errors inline... + """ + + raise MismatchedTreeNodeException(ttype, input) + + + def getErrorHeader(self, e): + """ + Prefix error message with the grammar name because message is + always intended for the programmer because the parser built + the input tree not the user. + """ + + return (self.getGrammarFileName() + + ": node from %sline %s:%s" + % (['', "after "][e.approximateLineInfo], + e.line, + e.charPositionInLine + ) + ) + + def getErrorMessage(self, e, tokenNames): + """ + Tree parsers parse nodes they usually have a token object as + payload. Set the exception token and do the default behavior. + """ + + if isinstance(self, TreeParser): + adaptor = e.input.getTreeAdaptor() + e.token = adaptor.getToken(e.node) + if e.token is not None: # could be an UP/DOWN node + e.token = CommonToken( + type=adaptor.getType(e.node), + text=adaptor.getText(e.node) + ) + + return BaseRecognizer.getErrorMessage(self, e, tokenNames) + + + def traceIn(self, ruleName, ruleIndex): + BaseRecognizer.traceIn(self, ruleName, ruleIndex, self.input.LT(1)) + + + def traceOut(self, ruleName, ruleIndex): + BaseRecognizer.traceOut(self, ruleName, ruleIndex, self.input.LT(1)) + + +############################################################################# +# +# tree visitor +# +############################################################################# + +class TreeVisitor(object): + """Do a depth first walk of a tree, applying pre() and post() actions + we go. + """ + + def __init__(self, adaptor=None): + if adaptor is not None: + self.adaptor = adaptor + else: + self.adaptor = CommonTreeAdaptor() + + def visit(self, t, pre_action=None, post_action=None): + """Visit every node in tree t and trigger an action for each node + before/after having visited all of its children. Bottom up walk. + Execute both actions even if t has no children. Ignore return + results from transforming children since they will have altered + the child list of this node (their parent). Return result of + applying post action to this node. + + The Python version differs from the Java version by taking two + callables 'pre_action' and 'post_action' instead of a class instance + that wraps those methods. Those callables must accept a TreeNode as + their single argument and return the (potentially transformed or + replaced) TreeNode. + """ + + isNil = self.adaptor.isNil(t) + if pre_action is not None and not isNil: + # if rewritten, walk children of new t + t = pre_action(t) + + for idx in xrange(self.adaptor.getChildCount(t)): + child = self.adaptor.getChild(t, idx) + self.visit(child, pre_action, post_action) + + if post_action is not None and not isNil: + t = post_action(t) + + return t + + +############################################################################# +# +# streams for rule rewriting +# +############################################################################# + +class RewriteRuleElementStream(object): + """@brief Internal helper class. + + A generic list of elements tracked in an alternative to be used in + a -> rewrite rule. We need to subclass to fill in the next() method, + which returns either an AST node wrapped around a token payload or + an existing subtree. + + Once you start next()ing, do not try to add more elements. It will + break the cursor tracking I believe. + + @see org.antlr.runtime.tree.RewriteRuleSubtreeStream + @see org.antlr.runtime.tree.RewriteRuleTokenStream + + TODO: add mechanism to detect/puke on modification after reading from + stream + """ + + def __init__(self, adaptor, elementDescription, elements=None): + # Cursor 0..n-1. If singleElement!=null, cursor is 0 until you next(), + # which bumps it to 1 meaning no more elements. + self.cursor = 0 + + # Track single elements w/o creating a list. Upon 2nd add, alloc list + self.singleElement = None + + # The list of tokens or subtrees we are tracking + self.elements = None + + # Once a node / subtree has been used in a stream, it must be dup'd + # from then on. Streams are reset after subrules so that the streams + # can be reused in future subrules. So, reset must set a dirty bit. + # If dirty, then next() always returns a dup. + self.dirty = False + + # The element or stream description; usually has name of the token or + # rule reference that this list tracks. Can include rulename too, but + # the exception would track that info. + self.elementDescription = elementDescription + + self.adaptor = adaptor + + if isinstance(elements, (list, tuple)): + # Create a stream, but feed off an existing list + self.singleElement = None + self.elements = elements + + else: + # Create a stream with one element + self.add(elements) + + + def reset(self): + """ + Reset the condition of this stream so that it appears we have + not consumed any of its elements. Elements themselves are untouched. + Once we reset the stream, any future use will need duplicates. Set + the dirty bit. + """ + + self.cursor = 0 + self.dirty = True + + + def add(self, el): + if el is None: + return + + if self.elements is not None: # if in list, just add + self.elements.append(el) + return + + if self.singleElement is None: # no elements yet, track w/o list + self.singleElement = el + return + + # adding 2nd element, move to list + self.elements = [] + self.elements.append(self.singleElement) + self.singleElement = None + self.elements.append(el) + + + def nextTree(self): + """ + Return the next element in the stream. If out of elements, throw + an exception unless size()==1. If size is 1, then return elements[0]. + + Return a duplicate node/subtree if stream is out of elements and + size==1. If we've already used the element, dup (dirty bit set). + """ + + if (self.dirty + or (self.cursor >= len(self) and len(self) == 1) + ): + # if out of elements and size is 1, dup + el = self._next() + return self.dup(el) + + # test size above then fetch + el = self._next() + return el + + + def _next(self): + """ + do the work of getting the next element, making sure that it's + a tree node or subtree. Deal with the optimization of single- + element list versus list of size > 1. Throw an exception + if the stream is empty or we're out of elements and size>1. + protected so you can override in a subclass if necessary. + """ + + if len(self) == 0: + raise RewriteEmptyStreamException(self.elementDescription) + + if self.cursor >= len(self): # out of elements? + if len(self) == 1: # if size is 1, it's ok; return and we'll dup + return self.toTree(self.singleElement) + + # out of elements and size was not 1, so we can't dup + raise RewriteCardinalityException(self.elementDescription) + + # we have elements + if self.singleElement is not None: + self.cursor += 1 # move cursor even for single element list + return self.toTree(self.singleElement) + + # must have more than one in list, pull from elements + o = self.toTree(self.elements[self.cursor]) + self.cursor += 1 + return o + + + def dup(self, el): + """ + When constructing trees, sometimes we need to dup a token or AST + subtree. Dup'ing a token means just creating another AST node + around it. For trees, you must call the adaptor.dupTree() unless + the element is for a tree root; then it must be a node dup. + """ + + raise NotImplementedError + + + def toTree(self, el): + """ + Ensure stream emits trees; tokens must be converted to AST nodes. + AST nodes can be passed through unmolested. + """ + + return el + + + def hasNext(self): + return ( (self.singleElement is not None and self.cursor < 1) + or (self.elements is not None + and self.cursor < len(self.elements) + ) + ) + + + def size(self): + if self.singleElement is not None: + return 1 + + if self.elements is not None: + return len(self.elements) + + return 0 + + __len__ = size + + + def getDescription(self): + """Deprecated. Directly access elementDescription attribute""" + + return self.elementDescription + + +class RewriteRuleTokenStream(RewriteRuleElementStream): + """@brief Internal helper class.""" + + def toTree(self, el): + # Don't convert to a tree unless they explicitly call nextTree. + # This way we can do hetero tree nodes in rewrite. + return el + + + def nextNode(self): + t = self._next() + return self.adaptor.createWithPayload(t) + + + def nextToken(self): + return self._next() + + + def dup(self, el): + raise TypeError("dup can't be called for a token stream.") + + +class RewriteRuleSubtreeStream(RewriteRuleElementStream): + """@brief Internal helper class.""" + + def nextNode(self): + """ + Treat next element as a single node even if it's a subtree. + This is used instead of next() when the result has to be a + tree root node. Also prevents us from duplicating recently-added + children; e.g., ^(type ID)+ adds ID to type and then 2nd iteration + must dup the type node, but ID has been added. + + Referencing a rule result twice is ok; dup entire tree as + we can't be adding trees as root; e.g., expr expr. + + Hideous code duplication here with super.next(). Can't think of + a proper way to refactor. This needs to always call dup node + and super.next() doesn't know which to call: dup node or dup tree. + """ + + if (self.dirty + or (self.cursor >= len(self) and len(self) == 1) + ): + # if out of elements and size is 1, dup (at most a single node + # since this is for making root nodes). + el = self._next() + return self.adaptor.dupNode(el) + + # test size above then fetch + el = self._next() + return el + + + def dup(self, el): + return self.adaptor.dupTree(el) + + + +class RewriteRuleNodeStream(RewriteRuleElementStream): + """ + Queues up nodes matched on left side of -> in a tree parser. This is + the analog of RewriteRuleTokenStream for normal parsers. + """ + + def nextNode(self): + return self._next() + + + def toTree(self, el): + return self.adaptor.dupNode(el) + + + def dup(self, el): + # we dup every node, so don't have to worry about calling dup; short- + #circuited next() so it doesn't call. + raise TypeError("dup can't be called for a node stream.") + + +class TreeRuleReturnScope(RuleReturnScope): + """ + This is identical to the ParserRuleReturnScope except that + the start property is a tree nodes not Token object + when you are parsing trees. To be generic the tree node types + have to be Object. + """ + + def __init__(self): + self.start = None + self.tree = None + + + def getStart(self): + return self.start + + + def getTree(self): + return self.tree + diff --git a/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/treewizard.py b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/treewizard.py new file mode 100644 index 0000000..1d8f4eb --- /dev/null +++ b/antlr-3.1.3/runtime/Python/build/lib.linux-x86_64-2.7/antlr3/treewizard.py @@ -0,0 +1,614 @@ +""" @package antlr3.tree +@brief ANTLR3 runtime package, treewizard module + +A utility module to create ASTs at runtime. +See for an overview. Note that the API of the Python implementation is slightly different. + +""" + +# begin[licence] +# +# [The "BSD licence"] +# Copyright (c) 2005-2008 Terence Parr +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# end[licence] + +from antlr3.constants import INVALID_TOKEN_TYPE +from antlr3.tokens import CommonToken +from antlr3.tree import CommonTree, CommonTreeAdaptor + + +def computeTokenTypes(tokenNames): + """ + Compute a dict that is an inverted index of + tokenNames (which maps int token types to names). + """ + + if tokenNames is None: + return {} + + return dict((name, type) for type, name in enumerate(tokenNames)) + + +## token types for pattern parser +EOF = -1 +BEGIN = 1 +END = 2 +ID = 3 +ARG = 4 +PERCENT = 5 +COLON = 6 +DOT = 7 + +class TreePatternLexer(object): + def __init__(self, pattern): + ## The tree pattern to lex like "(A B C)" + self.pattern = pattern + + ## Index into input string + self.p = -1 + + ## Current char + self.c = None + + ## How long is the pattern in char? + self.n = len(pattern) + + ## Set when token type is ID or ARG + self.sval = None + + self.error = False + + self.consume() + + + __idStartChar = frozenset( + 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_' + ) + __idChar = __idStartChar | frozenset('0123456789') + + def nextToken(self): + self.sval = "" + while self.c != EOF: + if self.c in (' ', '\n', '\r', '\t'): + self.consume() + continue + + if self.c in self.__idStartChar: + self.sval += self.c + self.consume() + while self.c in self.__idChar: + self.sval += self.c + self.consume() + + return ID + + if self.c == '(': + self.consume() + return BEGIN + + if self.c == ')': + self.consume() + return END + + if self.c == '%': + self.consume() + return PERCENT + + if self.c == ':': + self.consume() + return COLON + + if self.c == '.': + self.consume() + return DOT + + if self.c == '[': # grab [x] as a string, returning x + self.consume() + while self.c != ']': + if self.c == '\\': + self.consume() + if self.c != ']': + self.sval += '\\' + + self.sval += self.c + + else: + self.sval += self.c + + self.consume() + + self.consume() + return ARG + + self.consume() + self.error = True + return EOF + + return EOF + + + def consume(self): + self.p += 1 + if self.p >= self.n: + self.c = EOF + + else: + self.c = self.pattern[self.p] + + +class TreePatternParser(object): + def __init__(self, tokenizer, wizard, adaptor): + self.tokenizer = tokenizer + self.wizard = wizard + self.adaptor = adaptor + self.ttype = tokenizer.nextToken() # kickstart + + + def pattern(self): + if self.ttype == BEGIN: + return self.parseTree() + + elif self.ttype == ID: + node = self.parseNode() + if self.ttype == EOF: + return node + + return None # extra junk on end + + return None + + + def parseTree(self): + if self.ttype != BEGIN: + return None + + self.ttype = self.tokenizer.nextToken() + root = self.parseNode() + if root is None: + return None + + while self.ttype in (BEGIN, ID, PERCENT, DOT): + if self.ttype == BEGIN: + subtree = self.parseTree() + self.adaptor.addChild(root, subtree) + + else: + child = self.parseNode() + if child is None: + return None + + self.adaptor.addChild(root, child) + + if self.ttype != END: + return None + + self.ttype = self.tokenizer.nextToken() + return root + + + def parseNode(self): + # "%label:" prefix + label = None + + if self.ttype == PERCENT: + self.ttype = self.tokenizer.nextToken() + if self.ttype != ID: + return None + + label = self.tokenizer.sval + self.ttype = self.tokenizer.nextToken() + if self.ttype != COLON: + return None + + self.ttype = self.tokenizer.nextToken() # move to ID following colon + + # Wildcard? + if self.ttype == DOT: + self.ttype = self.tokenizer.nextToken() + wildcardPayload = CommonToken(0, ".") + node = WildcardTreePattern(wildcardPayload) + if label is not None: + node.label = label + return node + + # "ID" or "ID[arg]" + if self.ttype != ID: + return None + + tokenName = self.tokenizer.sval + self.ttype = self.tokenizer.nextToken() + + if tokenName == "nil": + return self.adaptor.nil() + + text = tokenName + # check for arg + arg = None + if self.ttype == ARG: + arg = self.tokenizer.sval + text = arg + self.ttype = self.tokenizer.nextToken() + + # create node + treeNodeType = self.wizard.getTokenType(tokenName) + if treeNodeType == INVALID_TOKEN_TYPE: + return None + + node = self.adaptor.createFromType(treeNodeType, text) + if label is not None and isinstance(node, TreePattern): + node.label = label + + if arg is not None and isinstance(node, TreePattern): + node.hasTextArg = True + + return node + + +class TreePattern(CommonTree): + """ + When using %label:TOKENNAME in a tree for parse(), we must + track the label. + """ + + def __init__(self, payload): + CommonTree.__init__(self, payload) + + self.label = None + self.hasTextArg = None + + + def toString(self): + if self.label is not None: + return '%' + self.label + ':' + CommonTree.toString(self) + + else: + return CommonTree.toString(self) + + +class WildcardTreePattern(TreePattern): + pass + + +class TreePatternTreeAdaptor(CommonTreeAdaptor): + """This adaptor creates TreePattern objects for use during scan()""" + + def createWithPayload(self, payload): + return TreePattern(payload) + + +class TreeWizard(object): + """ + Build and navigate trees with this object. Must know about the names + of tokens so you have to pass in a map or array of token names (from which + this class can build the map). I.e., Token DECL means nothing unless the + class can translate it to a token type. + + In order to create nodes and navigate, this class needs a TreeAdaptor. + + This class can build a token type -> node index for repeated use or for + iterating over the various nodes with a particular type. + + This class works in conjunction with the TreeAdaptor rather than moving + all this functionality into the adaptor. An adaptor helps build and + navigate trees using methods. This class helps you do it with string + patterns like "(A B C)". You can create a tree from that pattern or + match subtrees against it. + """ + + def __init__(self, adaptor=None, tokenNames=None, typeMap=None): + self.adaptor = adaptor + if typeMap is None: + self.tokenNameToTypeMap = computeTokenTypes(tokenNames) + + else: + if tokenNames is not None: + raise ValueError("Can't have both tokenNames and typeMap") + + self.tokenNameToTypeMap = typeMap + + + def getTokenType(self, tokenName): + """Using the map of token names to token types, return the type.""" + + try: + return self.tokenNameToTypeMap[tokenName] + except KeyError: + return INVALID_TOKEN_TYPE + + + def create(self, pattern): + """ + Create a tree or node from the indicated tree pattern that closely + follows ANTLR tree grammar tree element syntax: + + (root child1 ... child2). + + You can also just pass in a node: ID + + Any node can have a text argument: ID[foo] + (notice there are no quotes around foo--it's clear it's a string). + + nil is a special name meaning "give me a nil node". Useful for + making lists: (nil A B C) is a list of A B C. + """ + + tokenizer = TreePatternLexer(pattern) + parser = TreePatternParser(tokenizer, self, self.adaptor) + return parser.pattern() + + + def index(self, tree): + """Walk the entire tree and make a node name to nodes mapping. + + For now, use recursion but later nonrecursive version may be + more efficient. Returns a dict int -> list where the list is + of your AST node type. The int is the token type of the node. + """ + + m = {} + self._index(tree, m) + return m + + + def _index(self, t, m): + """Do the work for index""" + + if t is None: + return + + ttype = self.adaptor.getType(t) + elements = m.get(ttype) + if elements is None: + m[ttype] = elements = [] + + elements.append(t) + for i in range(self.adaptor.getChildCount(t)): + child = self.adaptor.getChild(t, i) + self._index(child, m) + + + def find(self, tree, what): + """Return a list of matching token. + + what may either be an integer specifzing the token type to find or + a string with a pattern that must be matched. + + """ + + if isinstance(what, (int, long)): + return self._findTokenType(tree, what) + + elif isinstance(what, basestring): + return self._findPattern(tree, what) + + else: + raise TypeError("'what' must be string or integer") + + + def _findTokenType(self, t, ttype): + """Return a List of tree nodes with token type ttype""" + + nodes = [] + + def visitor(tree, parent, childIndex, labels): + nodes.append(tree) + + self.visit(t, ttype, visitor) + + return nodes + + + def _findPattern(self, t, pattern): + """Return a List of subtrees matching pattern.""" + + subtrees = [] + + # Create a TreePattern from the pattern + tokenizer = TreePatternLexer(pattern) + parser = TreePatternParser(tokenizer, self, TreePatternTreeAdaptor()) + tpattern = parser.pattern() + + # don't allow invalid patterns + if (tpattern is None or tpattern.isNil() + or isinstance(tpattern, WildcardTreePattern)): + return None + + rootTokenType = tpattern.getType() + + def visitor(tree, parent, childIndex, label): + if self._parse(tree, tpattern, None): + subtrees.append(tree) + + self.visit(t, rootTokenType, visitor) + + return subtrees + + + def visit(self, tree, what, visitor): + """Visit every node in tree matching what, invoking the visitor. + + If what is a string, it is parsed as a pattern and only matching + subtrees will be visited. + The implementation uses the root node of the pattern in combination + with visit(t, ttype, visitor) so nil-rooted patterns are not allowed. + Patterns with wildcard roots are also not allowed. + + If what is an integer, it is used as a token type and visit will match + all nodes of that type (this is faster than the pattern match). + The labels arg of the visitor action method is never set (it's None) + since using a token type rather than a pattern doesn't let us set a + label. + """ + + if isinstance(what, (int, long)): + self._visitType(tree, None, 0, what, visitor) + + elif isinstance(what, basestring): + self._visitPattern(tree, what, visitor) + + else: + raise TypeError("'what' must be string or integer") + + + def _visitType(self, t, parent, childIndex, ttype, visitor): + """Do the recursive work for visit""" + + if t is None: + return + + if self.adaptor.getType(t) == ttype: + visitor(t, parent, childIndex, None) + + for i in range(self.adaptor.getChildCount(t)): + child = self.adaptor.getChild(t, i) + self._visitType(child, t, i, ttype, visitor) + + + def _visitPattern(self, tree, pattern, visitor): + """ + For all subtrees that match the pattern, execute the visit action. + """ + + # Create a TreePattern from the pattern + tokenizer = TreePatternLexer(pattern) + parser = TreePatternParser(tokenizer, self, TreePatternTreeAdaptor()) + tpattern = parser.pattern() + + # don't allow invalid patterns + if (tpattern is None or tpattern.isNil() + or isinstance(tpattern, WildcardTreePattern)): + return + + rootTokenType = tpattern.getType() + + def rootvisitor(tree, parent, childIndex, labels): + labels = {} + if self._parse(tree, tpattern, labels): + visitor(tree, parent, childIndex, labels) + + self.visit(tree, rootTokenType, rootvisitor) + + + def parse(self, t, pattern, labels=None): + """ + Given a pattern like (ASSIGN %lhs:ID %rhs:.) with optional labels + on the various nodes and '.' (dot) as the node/subtree wildcard, + return true if the pattern matches and fill the labels Map with + the labels pointing at the appropriate nodes. Return false if + the pattern is malformed or the tree does not match. + + If a node specifies a text arg in pattern, then that must match + for that node in t. + """ + + tokenizer = TreePatternLexer(pattern) + parser = TreePatternParser(tokenizer, self, TreePatternTreeAdaptor()) + tpattern = parser.pattern() + + return self._parse(t, tpattern, labels) + + + def _parse(self, t1, tpattern, labels): + """ + Do the work for parse. Check to see if the tpattern fits the + structure and token types in t1. Check text if the pattern has + text arguments on nodes. Fill labels map with pointers to nodes + in tree matched against nodes in pattern with labels. + """ + + # make sure both are non-null + if t1 is None or tpattern is None: + return False + + # check roots (wildcard matches anything) + if not isinstance(tpattern, WildcardTreePattern): + if self.adaptor.getType(t1) != tpattern.getType(): + return False + + # if pattern has text, check node text + if (tpattern.hasTextArg + and self.adaptor.getText(t1) != tpattern.getText()): + return False + + if tpattern.label is not None and labels is not None: + # map label in pattern to node in t1 + labels[tpattern.label] = t1 + + # check children + n1 = self.adaptor.getChildCount(t1) + n2 = tpattern.getChildCount() + if n1 != n2: + return False + + for i in range(n1): + child1 = self.adaptor.getChild(t1, i) + child2 = tpattern.getChild(i) + if not self._parse(child1, child2, labels): + return False + + return True + + + def equals(self, t1, t2, adaptor=None): + """ + Compare t1 and t2; return true if token types/text, structure match + exactly. + The trees are examined in their entirety so that (A B) does not match + (A B C) nor (A (B C)). + """ + + if adaptor is None: + adaptor = self.adaptor + + return self._equals(t1, t2, adaptor) + + + def _equals(self, t1, t2, adaptor): + # make sure both are non-null + if t1 is None or t2 is None: + return False + + # check roots + if adaptor.getType(t1) != adaptor.getType(t2): + return False + + if adaptor.getText(t1) != adaptor.getText(t2): + return False + + # check children + n1 = adaptor.getChildCount(t1) + n2 = adaptor.getChildCount(t2) + if n1 != n2: + return False + + for i in range(n1): + child1 = adaptor.getChild(t1, i) + child2 = adaptor.getChild(t2, i) + if not self._equals(child1, child2, adaptor): + return False + + return True diff --git a/antlr-3.1.3/runtime/Python/dist/antlr_python_runtime-3.1.3-py2.4.egg b/antlr-3.1.3/runtime/Python/dist/antlr_python_runtime-3.1.3-py2.4.egg new file mode 100644 index 0000000000000000000000000000000000000000..79561ab2d4c2611b711afc85c0675e923219dd63 GIT binary patch literal 171760 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/Python/dist/antlr_python_runtime-3.1.3-py2.5.egg b/antlr-3.1.3/runtime/Python/dist/antlr_python_runtime-3.1.3-py2.5.egg new file mode 100644 index 0000000000000000000000000000000000000000..f8377b71603062c9fb4dac03e3753ad0d7ae2fc9 GIT binary patch literal 170718 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

}?e_7(qG1p;C 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 VEO5OBfjEE<1Slc_z>y%({{enaaNYm_ literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/Python/dist/antlr_python_runtime-3.1.3-py2.7.egg b/antlr-3.1.3/runtime/Python/dist/antlr_python_runtime-3.1.3-py2.7.egg new file mode 100644 index 0000000000000000000000000000000000000000..2085abd616a55925e32386e87da0119b7df2b3a2 GIT binary patch literal 170197 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

Z^gt^Jirxi?p4t}n{fwD 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 literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/Python/dist/antlr_python_runtime-3.1.3.zip b/antlr-3.1.3/runtime/Python/dist/antlr_python_runtime-3.1.3.zip new file mode 100644 index 0000000000000000000000000000000000000000..19db12103f0341526309efac3ab09e20aae3a247 GIT binary patch literal 92105 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 literal 0 HcmV?d00001 diff --git a/antlr-3.1.3/runtime/Python/doxyfile b/antlr-3.1.3/runtime/Python/doxyfile new file mode 100644 index 0000000..5b1daeb --- /dev/null +++ b/antlr-3.1.3/runtime/Python/doxyfile @@ -0,0 +1,270 @@ +# -*- mode: doxymacs -*- + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = "ANTLR Python API" +PROJECT_NUMBER = 3.1.2 +OUTPUT_DIRECTORY = api +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = YES +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = build/doc/ +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = YES +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = NO +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = NO +GENERATE_BUGLIST = NO +GENERATE_DEPRECATEDLIST= NO +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = build/doc +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.d \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.py +RECURSIVE = YES +EXCLUDE = build/doc/antlr3/__init__.py +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = dfa exceptions recognizers streams tokens constants +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = . +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = YES +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = NO +MSCGEN_PATH = +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = YES +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +DOT_GRAPH_MAX_NODES = 50 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO + + +#--------------------------------------------------------------------------- +# doxypy integration +#--------------------------------------------------------------------------- +FILTER_SOURCE_FILES = YES +INPUT_FILTER = "python doxypy.py" diff --git a/antlr-3.1.3/runtime/Python/doxypy.py b/antlr-3.1.3/runtime/Python/doxypy.py new file mode 100644 index 0000000..d68f580 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/doxypy.py @@ -0,0 +1,227 @@ +#!/usr/bin/env python +""" @namespace doxypy +doxypy is an input filter for Doxygen. It preprocesses python +files so that docstrings of classes and functions are extracted +as Doxygens special python documentation blocks. It can be found +at . + +Copyright (C) 2006 + Gina Haeussge (gina at foosel dot net), + Philippe Neumann (phil at foosel dot net) + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +""" + +""" @mainpage +@author Gina Haeussge +@author Philippe Neumann +""" + +import sys +import re +from optparse import OptionParser, OptionGroup + +def makeCommentBlock(commentLines, indent=""): + """ Converts the given $commentLines into a comment block. + + @param commentLines The lines of the block comment + @param indent The indentation of the block + + @return The indented doxygen comment block containing the + given comment lines. + """ + + joinStr = "\n%s# " % indent + + if options.strip: + commentLines = map(lambda x: x.strip(), commentLines) + + lines = joinStr.join(commentLines) + + return "%s##%s%s" % (indent, joinStr, lines) + +def parse(input): + """ Searches for def and class definitions in the source, then moves + existing docstrings as special doxygen block comments in front of the + definitions. + + @param input The input source to process + + @return The processed input. + """ + + output = [] + + # Comment delimiter of the docstring + commentDelim = '"""' + + # Some regexes + triggerRe = re.compile("^(\s*)(def .+:|class .+:)") + commentStartRe = re.compile('^\s*(%s)' % commentDelim) + commentEndRe = re.compile('(%s)\s*$' % commentDelim) + emptyRe = re.compile("^\s*$") + hashLineRe = re.compile("^\s*#.*$") + importLineRe = re.compile("^\s*(import |from .+ import)") + + # split input into lines + lines = input.split("\n") + + # flags, buffers, ... + fileHeadFlag = True + triggerWordFlag = False + commentFlag = False + comment = [] + triggerWs = "" + triggerLines = None + + # process each line + for line in enumerate(lines): + + match = re.search(triggerRe, line[1]) + if match: + if triggerWordFlag and triggerLines: + output.append("\n".join(triggerLines)) + + triggerWordFlag = True + triggerWs = match.group(1) + fileHeadFlag = False + triggerLines = [line[1]] + continue + + # file header or active keyword trigger? + if fileHeadFlag or triggerWordFlag: + # comment end of multiline comment found + if re.search(commentEndRe, line[1]) and commentFlag: + comment.append( line[1][ : line[1].rfind(commentDelim) ] ) + output.append(makeCommentBlock(comment, triggerWs)) + if triggerLines: + output.append("\n".join(triggerLines)) + comment = [] + commentFlag = False + triggerWs = "" + triggerLines = None + triggerWordFlag = False + + # comment start found + elif re.search(commentStartRe, line[1]): + + if re.search(commentEndRe, line[1][line[1].find(commentDelim)+len(commentDelim) :]): + # singleline comment + comment.append(line[1][line[1].find(commentDelim)+len(commentDelim) : line[1].rfind(commentDelim)]) + output.append(makeCommentBlock(comment, triggerWs)) + + if triggerLines: + output.append("\n".join(triggerLines)) + + comment = [] + commentFlag = False + triggerWs = "" + triggerLines = None + triggerWordFlag = False + + else: + # multiline comment begin + commentFlag = True + comment.append( + line[1][line[1].find(commentDelim)+len(commentDelim):] + ) + + # active multiline comment -> append comment + elif commentFlag: + comment.append(line[1]) + + # still searching for comment + elif re.search(emptyRe, line[1]): + if triggerLines: + triggerLines.append(line[1]) + else: + output.append(line[1]) + + # searching for file header + elif fileHeadFlag: + if not (re.search(hashLineRe, line[1]) or re.search(emptyRe, line[1]) or re.search(importLineRe, line[1])): + # fileheader over -> disable search + fileHeadFlag = False + output.append(line[1]) + + # no comment, disable comment search mode + else: + triggerWordFlag = False + if triggerLines: + output.append("\n".join(triggerLines)) + triggerLines = None + output.append(line[1]) + + # just append the line + else: + output.append(line[1]) + + # return output + return "\n".join(output) + +def loadFile(filename): + """ Loads file $filename and returns the content. + + @param filename The name of the file to load + @return The content of the file. + """ + + f = open(filename, 'r') + + try: + content = f.read() + return content + finally: + f.close() + +def optParse(): + """parses commandline options""" + + parser = OptionParser(prog="doxypy", version="%prog 0.2.1") + + parser.set_usage("%prog [options] filename") + parser.add_option("--trim", "--strip", + action="store_true", dest="strip", + help="enables trimming of docstrings, might be useful if you get oddly spaced output" + ) + + ## parse options + global options + (options, filename) = parser.parse_args() + + if not filename: + print >>sys.stderr, "No filename given." + sys.exit(-1) + + return filename[0] + +def main(): + """ Opens the file given as first commandline argument and processes it, + then prints out the processed file contents. + """ + + filename = optParse() + + try: + input = loadFile(filename) + except IOError, (errno, msg): + print >>sys.stderr, msg + sys.exit(-1) + + output = parse(input) + print output + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/antlr-3.1.3/runtime/Python/ez_setup.py b/antlr-3.1.3/runtime/Python/ez_setup.py new file mode 100644 index 0000000..38c09c6 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/ez_setup.py @@ -0,0 +1,228 @@ +#!python +"""Bootstrap setuptools installation + +If you want to use setuptools in your package's setup.py, just include this +file in the same directory with it, and add this to the top of your setup.py:: + + from ez_setup import use_setuptools + use_setuptools() + +If you want to require a specific version of setuptools, set a download +mirror, or use an alternate download directory, you can do so by supplying +the appropriate options to ``use_setuptools()``. + +This file can also be run as a script to install or upgrade setuptools. +""" +import sys +DEFAULT_VERSION = "0.6c5" +DEFAULT_URL = "http://cheeseshop.python.org/packages/%s/s/setuptools/" % sys.version[:3] + +md5_data = { + 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', + 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb', + 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b', + 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a', + 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618', + 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac', + 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5', + 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4', + 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c', + 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b', + 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27', + 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277', + 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa', + 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e', + 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e', + 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f', + 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2', + 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc', + 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167', + 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64', + 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d', +} + +import sys, os + +def _validate_md5(egg_name, data): + if egg_name in md5_data: + from md5 import md5 + digest = md5(data).hexdigest() + if digest != md5_data[egg_name]: + print >>sys.stderr, ( + "md5 validation of %s failed! (Possible download problem?)" + % egg_name + ) + sys.exit(2) + return data + + +def use_setuptools( + version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, + download_delay=15 +): + """Automatically find/download setuptools and make it available on sys.path + + `version` should be a valid setuptools version number that is available + as an egg for download under the `download_base` URL (which should end with + a '/'). `to_dir` is the directory where setuptools will be downloaded, if + it is not already available. If `download_delay` is specified, it should + be the number of seconds that will be paused before initiating a download, + should one be required. If an older version of setuptools is installed, + this routine will print a message to ``sys.stderr`` and raise SystemExit in + an attempt to abort the calling script. + """ + try: + import setuptools + if setuptools.__version__ == '0.0.1': + print >>sys.stderr, ( + "You have an obsolete version of setuptools installed. Please\n" + "remove it from your system entirely before rerunning this script." + ) + sys.exit(2) + except ImportError: + egg = download_setuptools(version, download_base, to_dir, download_delay) + sys.path.insert(0, egg) + import setuptools; setuptools.bootstrap_install_from = egg + + import pkg_resources + try: + pkg_resources.require("setuptools>="+version) + + except pkg_resources.VersionConflict, e: + # XXX could we install in a subprocess here? + print >>sys.stderr, ( + "The required version of setuptools (>=%s) is not available, and\n" + "can't be installed while this script is running. Please install\n" + " a more recent version first.\n\n(Currently using %r)" + ) % (version, e.args[0]) + sys.exit(2) + +def download_setuptools( + version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, + delay = 15 +): + """Download setuptools from a specified location and return its filename + + `version` should be a valid setuptools version number that is available + as an egg for download under the `download_base` URL (which should end + with a '/'). `to_dir` is the directory where the egg will be downloaded. + `delay` is the number of seconds to pause before an actual download attempt. + """ + import urllib2, shutil + egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) + url = download_base + egg_name + saveto = os.path.join(to_dir, egg_name) + src = dst = None + if not os.path.exists(saveto): # Avoid repeated downloads + try: + from distutils import log + if delay: + log.warn(""" +--------------------------------------------------------------------------- +This script requires setuptools version %s to run (even to display +help). I will attempt to download it for you (from +%s), but +you may need to enable firewall access for this script first. +I will start the download in %d seconds. + +(Note: if this machine does not have network access, please obtain the file + + %s + +and place it in this directory before rerunning this script.) +---------------------------------------------------------------------------""", + version, download_base, delay, url + ); from time import sleep; sleep(delay) + log.warn("Downloading %s", url) + src = urllib2.urlopen(url) + # Read/write all in one block, so we don't create a corrupt file + # if the download is interrupted. + data = _validate_md5(egg_name, src.read()) + dst = open(saveto,"wb"); dst.write(data) + finally: + if src: src.close() + if dst: dst.close() + return os.path.realpath(saveto) + +def main(argv, version=DEFAULT_VERSION): + """Install or upgrade setuptools and EasyInstall""" + + try: + import setuptools + except ImportError: + egg = None + try: + egg = download_setuptools(version, delay=0) + sys.path.insert(0,egg) + from setuptools.command.easy_install import main + return main(list(argv)+[egg]) # we're done here + finally: + if egg and os.path.exists(egg): + os.unlink(egg) + else: + if setuptools.__version__ == '0.0.1': + # tell the user to uninstall obsolete version + use_setuptools(version) + + req = "setuptools>="+version + import pkg_resources + try: + pkg_resources.require(req) + except pkg_resources.VersionConflict: + try: + from setuptools.command.easy_install import main + except ImportError: + from easy_install import main + main(list(argv)+[download_setuptools(delay=0)]) + sys.exit(0) # try to force an exit + else: + if argv: + from setuptools.command.easy_install import main + main(argv) + else: + print "Setuptools version",version,"or greater has been installed." + print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' + + + +def update_md5(filenames): + """Update our built-in md5 registry""" + + import re + from md5 import md5 + + for name in filenames: + base = os.path.basename(name) + f = open(name,'rb') + md5_data[base] = md5(f.read()).hexdigest() + f.close() + + data = [" %r: %r,\n" % it for it in md5_data.items()] + data.sort() + repl = "".join(data) + + import inspect + srcfile = inspect.getsourcefile(sys.modules[__name__]) + f = open(srcfile, 'rb'); src = f.read(); f.close() + + match = re.search("\nmd5_data = {\n([^}]+)}", src) + if not match: + print >>sys.stderr, "Internal error!" + sys.exit(2) + + src = src[:match.start(1)] + repl + src[match.end(1):] + f = open(srcfile,'w') + f.write(src) + f.close() + + +if __name__=='__main__': + if len(sys.argv)>2 and sys.argv[1]=='--md5update': + update_md5(sys.argv[2:]) + else: + main(sys.argv[1:]) + + + + + diff --git a/antlr-3.1.3/runtime/Python/hudson-build.sh b/antlr-3.1.3/runtime/Python/hudson-build.sh new file mode 100755 index 0000000..fbe6f84 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/hudson-build.sh @@ -0,0 +1,71 @@ +#!/bin/bash + +ANTLR_JOB=${1:-ANTLR_Tool} +ST_VERSION=3.1 +ANTLR2_VERSION=2.7.7 + +# find the antlr.jar from the upstream project +JAR=$(ls $WORKSPACE/../../$ANTLR_JOB/lastSuccessful/org.antlr\$antlr/archive/org.antlr/antlr/*/antlr-*-jar-with-dependencies.jar) +echo "antlr.jar=$JAR" + +if [ ! -f "$JAR" ]; then + echo "Could not find antlr.jar" + exit 1 +fi + + +echo "************************************************************************" +echo "Setting up dependencies" +echo + +rm -fr $WORKSPACE/tmp +mkdir -p $WORKSPACE/tmp +cd $WORKSPACE + +# stringtemplate3 +if [ ! -f stringtemplate3-$ST_VERSION.tar.gz ]; then + wget http://pypi.python.org/packages/source/s/stringtemplate3/stringtemplate3-$ST_VERSION.tar.gz +fi +(cd tmp; tar xzf ../stringtemplate3-$ST_VERSION.tar.gz) +(cd tmp/stringtemplate3-$ST_VERSION; python setup.py install --install-lib=$WORKSPACE) + +# antlr2 +if [ ! -f antlr-$ANTLR2_VERSION.tar.gz ]; then + wget http://www.antlr2.org/download/antlr-$ANTLR2_VERSION.tar.gz +fi +(cd tmp; tar xzf ../antlr-$ANTLR2_VERSION.tar.gz) +(cd tmp/antlr-$ANTLR2_VERSION/lib/python; python setup.py install --install-lib=$WORKSPACE) + + +export CLASSPATH=$JAR + +echo "************************************************************************" +echo "Running the testsuite" +echo + +cd $WORKSPACE +rm -fr testout/ +mkdir -p testout/ +python setup.py unittest --xml-output=testout/ +python setup.py functest --xml-output=testout/ --antlr-jar="$JAR" + + +echo "************************************************************************" +echo "Running pylint" +echo + +cd $WORKSPACE +pylint --rcfile=pylintrc --output-format=parseable --include-ids=yes antlr3 | tee pylint-report.txt + + +echo "************************************************************************" +echo "Building dist files" +echo + +cd $WORKSPACE +rm -f dist/* +cp -f $JAR dist/ +python setup.py sdist --formats=gztar,zip +for PYTHON in /usr/bin/python2.?; do + $PYTHON setup.py bdist_egg +done diff --git a/antlr-3.1.3/runtime/Python/mkdoxy.sh b/antlr-3.1.3/runtime/Python/mkdoxy.sh new file mode 100755 index 0000000..36fffff --- /dev/null +++ b/antlr-3.1.3/runtime/Python/mkdoxy.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +if [ -e doxygen.sh ]; then + . doxygen.sh +fi + +rm -fr build/doc +mkdir -p build/doc/antlr3 + +for f in __init__ exceptions constants dfa tokens streams recognizers; do + sed -e '/begin\[licence\]/,/end\[licence\]/d' antlr3/$f.py \ + >>build/doc/antlr3.py +done + +touch build/doc/antlr3/__init__.py + +cp -f antlr3/tree.py build/doc/antlr3 +cp -f antlr3/treewizard.py build/doc/antlr3 + +doxygen doxyfile diff --git a/antlr-3.1.3/runtime/Python/pylintrc b/antlr-3.1.3/runtime/Python/pylintrc new file mode 100644 index 0000000..3507257 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/pylintrc @@ -0,0 +1,321 @@ +# lint Python modules using external checkers. +# +# This is the main checker controling the other ones and the reports +# generation. It is itself both a raw checker and an astng checker in order +# to: +# * handle message activation / deactivation at the module level +# * handle some basic but necessary stats'data (number of classes, methods...) +# +[MASTER] + +# Specify a configuration file. +#rcfile= + +# Profiled execution. +profile=no + +# Add to the black list. It should be a base name, not a +# path. You may set this option multiple times. +ignore=CVS + +# Pickle collected data for later comparisons. +persistent=yes + +# Set the cache size for astng objects. +cache-size=500 + +# List of plugins (as comma separated values of python modules names) to load, +# usually to register additional checkers. +load-plugins= + + +[COMMANDS] + +# Display a help message for the given message id and exit. The value may be a +# comma separated list of message ids. +#help-msg= + + +[MESSAGES CONTROL] + +# Enable only checker(s) with the given id(s). This option conflict with the +# disable-checker option +#enable-checker= + +# Enable all checker(s) except those with the given id(s). This option conflict +# with the disable-checker option +#disable-checker= + +# Enable all messages in the listed categories. +#enable-msg-cat= + +# Disable all messages in the listed categories. +#disable-msg-cat= + +# Enable the message(s) with the given id(s). +#enable-msg= + +# Disable the message(s) with the given id(s). +# W0622: Redefining built-in '...' +# C0103: Invalid name +# R0904: Too many public methods +# R0201: Method could be a function +# C0302: Too many lines in module +# R0902: Too many instance attributes +# R0913: Too many arguments +# R0912: Too many branches +# R0903: To few public methods +# C0111: Missing docstring +# W0403: Relative import +# W0401: Wildcard import +# W0142: */** magic +disable-msg=W0622, C0103, R0904, R0201, C0302, R0902, R0913, R0912, R0903, C0111, W0403, W0401, W0142 + + +[REPORTS] + +# set the output format. Available formats are text, parseable, colorized and +# html +output-format=text + +# Include message's id in output +include-ids=yes + +# Put messages in a separate file for each module / package specified on the +# command line instead of printing them on stdout. Reports (if any) will be +# written in a file name "pylint_global.[txt|html]". +files-output=no + +# Tells wether to display a full report or only the messages +reports=yes + +# Python expression which should return a note less than 10 (10 is the highest +# note).You have access to the variables errors warning, statement which +# respectivly contain the number of errors / warnings messages and the total +# number of statements analyzed. This is used by the global evaluation report +# (R0004). +evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) + +# Add a comment according to your evaluation note. This is used by the global +# evaluation report (R0004). +comment=no + +# Enable the report(s) with the given id(s). +#enable-report= + +# Disable the report(s) with the given id(s). +#disable-report= + + +# try to find bugs in the code using type inference +# +[TYPECHECK] + +# Tells wether missing members accessed in mixin class should be ignored. A +# mixin class is detected if its name ends with "mixin" (case insensitive). +ignore-mixin-members=yes + +# When zope mode is activated, consider the acquired-members option to ignore +# access to some undefined attributes. +zope=no + +# List of members which are usually get through zope's acquisition mecanism and +# so shouldn't trigger E0201 when accessed (need zope=yes to be considered). +acquired-members=REQUEST,acl_users,aq_parent + + +# checks for +# * unused variables / imports +# * undefined variables +# * redefinition of variable from builtins or from an outer scope +# * use of variable before assigment +# +[VARIABLES] + +# Tells wether we should check for unused import in __init__ files. +init-import=no + +# A regular expression matching names used for dummy variables (i.e. not used). +dummy-variables-rgx=_|dummy + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid to define new builtins when possible. +additional-builtins= + + +# checks for : +# * doc strings +# * modules / classes / functions / methods / arguments / variables name +# * number of arguments, local variables, branchs, returns and statements in +# functions, methods +# * required module attributes +# * dangerous default values as arguments +# * redefinition of function / method / class +# * uses of the global statement +# +[BASIC] + +# Required attributes for module, separated by a comma +required-attributes= + +# Regular expression which should only match functions or classes name which do +# not require a docstring +no-docstring-rgx=__.*__ + +# Regular expression which should only match correct module names +module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ + +# Regular expression which should only match correct module level names +const-rgx=(([A-Z_][A-Z1-9_]*)|(__.*__))$ + +# Regular expression which should only match correct class names +class-rgx=[A-Z_][a-zA-Z0-9]+$ + +# Regular expression which should only match correct function names +function-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression which should only match correct method names +method-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression which should only match correct instance attribute names +attr-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression which should only match correct argument names +argument-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression which should only match correct variable names +variable-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression which should only match correct list comprehension / +# generator expression variable names +inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ + +# Good variable names which should always be accepted, separated by a comma +good-names=i,j,k,ex,Run,_ + +# Bad variable names which should always be refused, separated by a comma +bad-names=foo,bar,baz,toto,tutu,tata + +# List of builtins function names that should not be used, separated by a comma +bad-functions=map,filter,apply,input + + +# checks for sign of poor/misdesign: +# * number of methods, attributes, local variables... +# * size, complexity of functions, methods +# +[DESIGN] + +# Maximum number of arguments for function / method +max-args=5 + +# Maximum number of locals for function / method body +max-locals=15 + +# Maximum number of return / yield for function / method body +max-returns=6 + +# Maximum number of branch for function / method body +max-branchs=12 + +# Maximum number of statements in function / method body +max-statements=50 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of attributes for a class (see R0902). +max-attributes=7 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=20 + + +# checks for : +# * methods without self as first argument +# * overridden methods signature +# * access only to existant members via self +# * attributes not defined in the __init__ method +# * supported interfaces implementation +# * unreachable code +# +[CLASSES] + +# List of interface methods to ignore, separated by a comma. This is used for +# instance to not check methods defines in Zope's Interface base class. +ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__,__new__,setUp + + +# checks for +# * external modules dependencies +# * relative / wildcard imports +# * cyclic imports +# * uses of deprecated modules +# +[IMPORTS] + +# Deprecated modules which should not be used, separated by a comma +deprecated-modules=regsub,string,TERMIOS,Bastion,rexec + +# Create a graph of every (i.e. internal and external) dependencies in the +# given file (report R0402 must not be disabled) +import-graph= + +# Create a graph of external dependencies in the given file (report R0402 must +# not be disabled) +ext-import-graph= + +# Create a graph of internal dependencies in the given file (report R0402 must +# not be disabled) +int-import-graph= + + +# checks for similarities and duplicated code. This computation may be +# memory / CPU intensive, so you should disable it if you experiments some +# problems. +# +[SIMILARITIES] + +# Minimum lines number of a similarity. +min-similarity-lines=4 + +# Ignore comments when computing similarities. +ignore-comments=yes + +# Ignore docstrings when computing similarities. +ignore-docstrings=yes + + +# checks for : +# * unauthorized constructions +# * strict indentation +# * line length +# * use of <> instead of != +# +[FORMAT] + +# Maximum number of characters on a single line. +max-line-length=80 + +# Maximum number of lines in a module +max-module-lines=1000 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + + +# checks for: +# * warning notes in the code like FIXME, XXX +# * PEP 263: source code with non ascii character but no encoding declaration +# +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME,XXX,TODO diff --git a/antlr-3.1.3/runtime/Python/setup.py b/antlr-3.1.3/runtime/Python/setup.py new file mode 100644 index 0000000..5ebf579 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/setup.py @@ -0,0 +1,308 @@ +# bootstrapping setuptools +import ez_setup +ez_setup.use_setuptools() + +import os +import sys +import textwrap +from distutils.errors import * +from distutils.command.clean import clean as _clean +from distutils.cmd import Command +from setuptools import setup +from distutils import log + +from distutils.core import setup + + +class clean(_clean): + """Also cleanup local temp files.""" + + def run(self): + _clean.run(self) + + import fnmatch + + # kill temporary files + patterns = [ + # generic tempfiles + '*~', '*.bak', '*.pyc', + + # tempfiles generated by ANTLR runs + 't[0-9]*Lexer.py', 't[0-9]*Parser.py', + '*.tokens', '*__.g', + ] + + for path in ('antlr3', 'unittests', 'tests'): + path = os.path.join(os.path.dirname(__file__), path) + if os.path.isdir(path): + for root, dirs, files in os.walk(path, topdown=True): + graveyard = [] + for pat in patterns: + graveyard.extend(fnmatch.filter(files, pat)) + + for name in graveyard: + filePath = os.path.join(root, name) + + try: + log.info("removing '%s'", filePath) + os.unlink(filePath) + except OSError, exc: + log.warn( + "Failed to delete '%s': %s", + filePath, exc + ) + + +class TestError(DistutilsError): + pass + + +# grml.. the class name appears in the --help output: +# ... +# Options for 'CmdUnitTest' command +# ... +# so I have to use a rather ugly name... +class unittest(Command): + """Run unit tests for package""" + + description = "run unit tests for package" + + user_options = [ + ('xml-output=', None, + "Directory for JUnit compatible XML files."), + ] + boolean_options = [] + + def initialize_options(self): + self.xml_output = None + + def finalize_options(self): + pass + + def run(self): + testDir = os.path.join(os.path.dirname(__file__), 'unittests') + if not os.path.isdir(testDir): + raise DistutilsFileError( + "There is not 'unittests' directory. Did you fetch the " + "development version?", + ) + + import glob + import imp + import unittest + import traceback + import StringIO + + suite = unittest.TestSuite() + loadFailures = [] + + # collect tests from all unittests/test*.py files + testFiles = [] + for testPath in glob.glob(os.path.join(testDir, 'test*.py')): + testFiles.append(testPath) + + testFiles.sort() + for testPath in testFiles: + testID = os.path.basename(testPath)[:-3] + + try: + modFile, modPathname, modDescription \ + = imp.find_module(testID, [testDir]) + + testMod = imp.load_module( + testID, modFile, modPathname, modDescription + ) + + suite.addTests( + unittest.defaultTestLoader.loadTestsFromModule(testMod) + ) + + except Exception: + buf = StringIO.StringIO() + traceback.print_exc(file=buf) + + loadFailures.append( + (os.path.basename(testPath), buf.getvalue()) + ) + + if self.xml_output: + import xmlrunner + runner = xmlrunner.XMLTestRunner( + stream=open(os.path.join(self.xml_output, 'unittest.xml'), 'w')) + else: + runner = unittest.TextTestRunner(verbosity=2) + result = runner.run(suite) + + for testName, error in loadFailures: + sys.stderr.write('\n' + '='*70 + '\n') + sys.stderr.write( + "Failed to load test module %s\n" % testName + ) + sys.stderr.write(error) + sys.stderr.write('\n') + + if not result.wasSuccessful() or loadFailures: + raise TestError( + "Unit test suite failed!", + ) + + +class functest(Command): + """Run functional tests for package""" + + description = "run functional tests for package" + + user_options = [ + ('testcase=', None, + "testcase to run [default: run all]"), + ('antlr-version=', None, + "ANTLR version to use [default: HEAD (in ../../build)]"), + ('antlr-jar=', None, + "Explicit path to an antlr jar (overrides --antlr-version)"), + ('xml-output=', None, + "Directory for JUnit compatible XML files."), + ] + + boolean_options = [] + + def initialize_options(self): + self.testcase = None + self.antlr_version = 'HEAD' + self.antlr_jar = None + self.xml_output = None + + def finalize_options(self): + pass + + + def run(self): + import glob + import imp + import unittest + import traceback + import StringIO + + testDir = os.path.join(os.path.dirname(__file__), 'tests') + if not os.path.isdir(testDir): + raise DistutilsFileError( + "There is not 'tests' directory. Did you fetch the " + "development version?", + ) + + # make sure, relative imports from testcases work + sys.path.insert(0, testDir) + + rootDir = os.path.abspath( + os.path.join(os.path.dirname(__file__), '..', '..')) + + if self.antlr_jar is not None: + classpath = [self.antlr_jar] + elif self.antlr_version == 'HEAD': + classpath = [ + os.path.join(rootDir, 'tool', 'target', 'classes'), + os.path.join(rootDir, 'runtime', 'Java', 'target', 'classes') + ] + else: + classpath = [ + os.path.join(rootDir, 'archive', + 'antlr-%s.jar' % self.antlr_version) + ] + + classpath.extend([ + os.path.join(rootDir, 'lib', 'antlr-2.7.7.jar'), + os.path.join(rootDir, 'lib', 'stringtemplate-3.2.jar'), + os.path.join(rootDir, 'lib', 'junit-4.2.jar') + ]) + os.environ['CLASSPATH'] = ':'.join(classpath) + + os.environ['ANTLRVERSION'] = self.antlr_version + + suite = unittest.TestSuite() + loadFailures = [] + + # collect tests from all tests/t*.py files + testFiles = [] + for testPath in glob.glob(os.path.join(testDir, 't*.py')): + if (testPath.endswith('Lexer.py') + or testPath.endswith('Parser.py') + ): + continue + + # if a single testcase has been selected, filter out all other + # tests + if (self.testcase is not None + and os.path.basename(testPath)[:-3] != self.testcase + ): + continue + + testFiles.append(testPath) + + testFiles.sort() + for testPath in testFiles: + testID = os.path.basename(testPath)[:-3] + + try: + modFile, modPathname, modDescription \ + = imp.find_module(testID, [testDir]) + + testMod = imp.load_module( + testID, modFile, modPathname, modDescription + ) + + suite.addTests( + unittest.defaultTestLoader.loadTestsFromModule(testMod) + ) + + except Exception: + buf = StringIO.StringIO() + traceback.print_exc(file=buf) + + loadFailures.append( + (os.path.basename(testPath), buf.getvalue()) + ) + + + if self.xml_output: + import xmlrunner + runner = xmlrunner.XMLTestRunner( + stream=open(os.path.join(self.xml_output, 'functest.xml'), 'w')) + else: + runner = unittest.TextTestRunner(verbosity=2) + + result = runner.run(suite) + + for testName, error in loadFailures: + sys.stderr.write('\n' + '='*70 + '\n') + sys.stderr.write( + "Failed to load test module %s\n" % testName + ) + sys.stderr.write(error) + sys.stderr.write('\n') + + if not result.wasSuccessful() or loadFailures: + raise TestError( + "Functional test suite failed!", + ) + + +setup(name='antlr_python_runtime', + version='3.1.3', + packages=['antlr3'], + + author="Benjamin Niemann", + author_email="pink@odahoda.de", + url="http://www.antlr.org/", + download_url="http://www.antlr.org/download.html", + license="BSD", + description="Runtime package for ANTLR3", + long_description=textwrap.dedent('''\ + This is the runtime package for ANTLR3, which is required to use parsers + generated by ANTLR3. + '''), + + + cmdclass={'unittest': unittest, + 'functest': functest, + 'clean': clean + }, + ) diff --git a/antlr-3.1.3/runtime/Python/tests/t001lexer.g b/antlr-3.1.3/runtime/Python/tests/t001lexer.g new file mode 100644 index 0000000..f92b958 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t001lexer.g @@ -0,0 +1,6 @@ +lexer grammar t001lexer; +options { + language = Python; +} + +ZERO: '0'; diff --git a/antlr-3.1.3/runtime/Python/tests/t001lexer.py b/antlr-3.1.3/runtime/Python/tests/t001lexer.py new file mode 100644 index 0000000..3228235 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t001lexer.py @@ -0,0 +1,57 @@ +import antlr3 +import testbase +import unittest + +class t001lexer(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def emitErrorMessage(self, msg): + # report errors to /dev/null + pass + + def reportError(self, re): + # no error recovery yet, just crash! + raise re + + return TLexer + + + def testValid(self): + stream = antlr3.StringStream('0') + lexer = self.getLexer(stream) + + token = lexer.nextToken() + self.failUnlessEqual(token.type, self.lexerModule.ZERO) + + token = lexer.nextToken() + self.failUnlessEqual(token.type, self.lexerModule.EOF) + + + def testIteratorInterface(self): + stream = antlr3.StringStream('0') + lexer = self.getLexer(stream) + + types = [token.type for token in lexer] + + self.failUnlessEqual(types, [self.lexerModule.ZERO]) + + + def testMalformedInput(self): + stream = antlr3.StringStream('1') + lexer = self.getLexer(stream) + + try: + token = lexer.nextToken() + self.fail() + + except antlr3.MismatchedTokenException, exc: + self.failUnlessEqual(exc.expecting, '0') + self.failUnlessEqual(exc.unexpectedType, '1') + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t002lexer.g b/antlr-3.1.3/runtime/Python/tests/t002lexer.g new file mode 100644 index 0000000..53b67a9 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t002lexer.g @@ -0,0 +1,7 @@ +lexer grammar t002lexer; +options { + language = Python; +} + +ZERO: '0'; +ONE: '1'; diff --git a/antlr-3.1.3/runtime/Python/tests/t002lexer.py b/antlr-3.1.3/runtime/Python/tests/t002lexer.py new file mode 100644 index 0000000..c2c03ba --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t002lexer.py @@ -0,0 +1,50 @@ +import antlr3 +import testbase +import unittest + +class t002lexer(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def emitErrorMessage(self, msg): + # report errors to /dev/null + pass + + def reportError(self, re): + # no error recovery yet, just crash! + raise re + + return TLexer + + + def testValid(self): + stream = antlr3.StringStream('01') + lexer = self.getLexer(stream) + + token = lexer.nextToken() + self.failUnlessEqual(token.type, self.lexerModule.ZERO) + + token = lexer.nextToken() + self.failUnlessEqual(token.type, self.lexerModule.ONE) + + token = lexer.nextToken() + self.failUnlessEqual(token.type, self.lexerModule.EOF) + + + def testMalformedInput(self): + stream = antlr3.StringStream('2') + lexer = self.getLexer(stream) + + try: + token = lexer.nextToken() + self.fail() + + except antlr3.NoViableAltException, exc: + self.failUnlessEqual(exc.unexpectedType, '2') + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t003lexer.g b/antlr-3.1.3/runtime/Python/tests/t003lexer.g new file mode 100644 index 0000000..0e85e11 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t003lexer.g @@ -0,0 +1,8 @@ +lexer grammar t003lexer; +options { + language = Python; +} + +ZERO: '0'; +ONE: '1'; +FOOZE: 'fooze'; diff --git a/antlr-3.1.3/runtime/Python/tests/t003lexer.py b/antlr-3.1.3/runtime/Python/tests/t003lexer.py new file mode 100644 index 0000000..3a32955 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t003lexer.py @@ -0,0 +1,53 @@ +import antlr3 +import testbase +import unittest + +class t003lexer(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def emitErrorMessage(self, msg): + # report errors to /dev/null + pass + + def reportError(self, re): + # no error recovery yet, just crash! + raise re + + return TLexer + + + def testValid(self): + stream = antlr3.StringStream('0fooze1') + lexer = self.getLexer(stream) + + token = lexer.nextToken() + self.failUnlessEqual(token.type, self.lexerModule.ZERO) + + token = lexer.nextToken() + self.failUnlessEqual(token.type, self.lexerModule.FOOZE) + + token = lexer.nextToken() + self.failUnlessEqual(token.type, self.lexerModule.ONE) + + token = lexer.nextToken() + self.failUnlessEqual(token.type, self.lexerModule.EOF) + + + def testMalformedInput(self): + stream = antlr3.StringStream('2') + lexer = self.getLexer(stream) + + try: + token = lexer.nextToken() + self.fail() + + except antlr3.NoViableAltException, exc: + self.failUnlessEqual(exc.unexpectedType, '2') + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t004lexer.g b/antlr-3.1.3/runtime/Python/tests/t004lexer.g new file mode 100644 index 0000000..c39d10d --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t004lexer.g @@ -0,0 +1,6 @@ +lexer grammar t004lexer; +options { + language = Python; +} + +FOO: 'f' 'o'*; diff --git a/antlr-3.1.3/runtime/Python/tests/t004lexer.py b/antlr-3.1.3/runtime/Python/tests/t004lexer.py new file mode 100644 index 0000000..52b444c --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t004lexer.py @@ -0,0 +1,70 @@ +import antlr3 +import testbase +import unittest + +class t004lexer(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def emitErrorMessage(self, msg): + # report errors to /dev/null + pass + + def reportError(self, re): + # no error recovery yet, just crash! + raise re + + return TLexer + + + def testValid(self): + stream = antlr3.StringStream('ffofoofooo') + lexer = self.getLexer(stream) + + token = lexer.nextToken() + assert token.type == self.lexerModule.FOO + assert token.start == 0, token.start + assert token.stop == 0, token.stop + assert token.text == 'f', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.FOO + assert token.start == 1, token.start + assert token.stop == 2, token.stop + assert token.text == 'fo', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.FOO + assert token.start == 3, token.start + assert token.stop == 5, token.stop + assert token.text == 'foo', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.FOO + assert token.start == 6, token.start + assert token.stop == 9, token.stop + assert token.text == 'fooo', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.EOF + + + def testMalformedInput(self): + stream = antlr3.StringStream('2') + lexer = self.getLexer(stream) + + try: + token = lexer.nextToken() + self.fail() + + except antlr3.MismatchedTokenException, exc: + self.failUnlessEqual(exc.expecting, 'f') + self.failUnlessEqual(exc.unexpectedType, '2') + + +if __name__ == '__main__': + unittest.main() + diff --git a/antlr-3.1.3/runtime/Python/tests/t005lexer.g b/antlr-3.1.3/runtime/Python/tests/t005lexer.g new file mode 100644 index 0000000..f9cc681 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t005lexer.g @@ -0,0 +1,6 @@ +lexer grammar t005lexer; +options { + language = Python; +} + +FOO: 'f' 'o'+; diff --git a/antlr-3.1.3/runtime/Python/tests/t005lexer.py b/antlr-3.1.3/runtime/Python/tests/t005lexer.py new file mode 100644 index 0000000..667083e --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t005lexer.py @@ -0,0 +1,75 @@ +import antlr3 +import testbase +import unittest + +class t005lexer(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def emitErrorMessage(self, msg): + # report errors to /dev/null + pass + + def reportError(self, re): + # no error recovery yet, just crash! + raise re + + return TLexer + + + def testValid(self): + stream = antlr3.StringStream('fofoofooo') + lexer = self.getLexer(stream) + + token = lexer.nextToken() + assert token.type == self.lexerModule.FOO + assert token.start == 0, token.start + assert token.stop == 1, token.stop + assert token.text == 'fo', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.FOO + assert token.start == 2, token.start + assert token.stop == 4, token.stop + assert token.text == 'foo', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.FOO + assert token.start == 5, token.start + assert token.stop == 8, token.stop + assert token.text == 'fooo', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.EOF + + + def testMalformedInput1(self): + stream = antlr3.StringStream('2') + lexer = self.getLexer(stream) + + try: + token = lexer.nextToken() + raise AssertionError + + except antlr3.MismatchedTokenException, exc: + assert exc.expecting == 'f', repr(exc.expecting) + assert exc.unexpectedType == '2', repr(exc.unexpectedType) + + + def testMalformedInput2(self): + stream = antlr3.StringStream('f') + lexer = self.getLexer(stream) + + try: + token = lexer.nextToken() + raise AssertionError + + except antlr3.EarlyExitException, exc: + assert exc.unexpectedType == antlr3.EOF, repr(exc.unexpectedType) + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t006lexer.g b/antlr-3.1.3/runtime/Python/tests/t006lexer.g new file mode 100644 index 0000000..ad93cb4 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t006lexer.g @@ -0,0 +1,6 @@ +lexer grammar t006lexer; +options { + language = Python; +} + +FOO: 'f' ('o' | 'a')*; diff --git a/antlr-3.1.3/runtime/Python/tests/t006lexer.py b/antlr-3.1.3/runtime/Python/tests/t006lexer.py new file mode 100644 index 0000000..a4f845b --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t006lexer.py @@ -0,0 +1,61 @@ +import antlr3 +import testbase +import unittest + +class t006lexer(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def emitErrorMessage(self, msg): + # report errors to /dev/null + pass + + def reportError(self, re): + # no error recovery yet, just crash! + raise re + + return TLexer + + + def testValid(self): + stream = antlr3.StringStream('fofaaooa') + lexer = self.getLexer(stream) + + token = lexer.nextToken() + assert token.type == self.lexerModule.FOO + assert token.start == 0, token.start + assert token.stop == 1, token.stop + assert token.text == 'fo', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.FOO + assert token.start == 2, token.start + assert token.stop == 7, token.stop + assert token.text == 'faaooa', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.EOF + + + def testMalformedInput(self): + stream = antlr3.StringStream('fofoaooaoa2') + lexer = self.getLexer(stream) + + lexer.nextToken() + lexer.nextToken() + try: + token = lexer.nextToken() + raise AssertionError, token + + except antlr3.MismatchedTokenException, exc: + assert exc.expecting == 'f', repr(exc.expecting) + assert exc.unexpectedType == '2', repr(exc.unexpectedType) + assert exc.charPositionInLine == 10, repr(exc.charPositionInLine) + assert exc.line == 1, repr(exc.line) + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t007lexer.g b/antlr-3.1.3/runtime/Python/tests/t007lexer.g new file mode 100644 index 0000000..b5651d5 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t007lexer.g @@ -0,0 +1,6 @@ +lexer grammar t007lexer; +options { + language = Python; +} + +FOO: 'f' ('o' | 'a' 'b'+)*; diff --git a/antlr-3.1.3/runtime/Python/tests/t007lexer.py b/antlr-3.1.3/runtime/Python/tests/t007lexer.py new file mode 100644 index 0000000..440657b --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t007lexer.py @@ -0,0 +1,59 @@ +import antlr3 +import testbase +import unittest + +class t007lexer(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def emitErrorMessage(self, msg): + # report errors to /dev/null + pass + + def reportError(self, re): + # no error recovery yet, just crash! + raise re + + return TLexer + + + def testValid(self): + stream = antlr3.StringStream('fofababbooabb') + lexer = self.getLexer(stream) + + token = lexer.nextToken() + assert token.type == self.lexerModule.FOO + assert token.start == 0, token.start + assert token.stop == 1, token.stop + assert token.text == 'fo', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.FOO + assert token.start == 2, token.start + assert token.stop == 12, token.stop + assert token.text == 'fababbooabb', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.EOF + + + def testMalformedInput(self): + stream = antlr3.StringStream('foaboao') + lexer = self.getLexer(stream) + + try: + token = lexer.nextToken() + raise AssertionError, token + + except antlr3.EarlyExitException, exc: + assert exc.unexpectedType == 'o', repr(exc.unexpectedType) + assert exc.charPositionInLine == 6, repr(exc.charPositionInLine) + assert exc.line == 1, repr(exc.line) + + +if __name__ == '__main__': + unittest.main() + diff --git a/antlr-3.1.3/runtime/Python/tests/t008lexer.g b/antlr-3.1.3/runtime/Python/tests/t008lexer.g new file mode 100644 index 0000000..5949866 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t008lexer.g @@ -0,0 +1,6 @@ +lexer grammar t008lexer; +options { + language = Python; +} + +FOO: 'f' 'a'?; diff --git a/antlr-3.1.3/runtime/Python/tests/t008lexer.py b/antlr-3.1.3/runtime/Python/tests/t008lexer.py new file mode 100644 index 0000000..f62c148 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t008lexer.py @@ -0,0 +1,66 @@ +import antlr3 +import testbase +import unittest + +class t008lexer(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def emitErrorMessage(self, msg): + # report errors to /dev/null + pass + + def reportError(self, re): + # no error recovery yet, just crash! + raise re + + return TLexer + + + def testValid(self): + stream = antlr3.StringStream('ffaf') + lexer = self.getLexer(stream) + + token = lexer.nextToken() + assert token.type == self.lexerModule.FOO + assert token.start == 0, token.start + assert token.stop == 0, token.stop + assert token.text == 'f', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.FOO + assert token.start == 1, token.start + assert token.stop == 2, token.stop + assert token.text == 'fa', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.FOO + assert token.start == 3, token.start + assert token.stop == 3, token.stop + assert token.text == 'f', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.EOF + + + def testMalformedInput(self): + stream = antlr3.StringStream('fafb') + lexer = self.getLexer(stream) + + lexer.nextToken() + lexer.nextToken() + try: + token = lexer.nextToken() + raise AssertionError, token + + except antlr3.MismatchedTokenException, exc: + assert exc.unexpectedType == 'b', repr(exc.unexpectedType) + assert exc.charPositionInLine == 3, repr(exc.charPositionInLine) + assert exc.line == 1, repr(exc.line) + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t009lexer.g b/antlr-3.1.3/runtime/Python/tests/t009lexer.g new file mode 100644 index 0000000..6126908 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t009lexer.g @@ -0,0 +1,6 @@ +lexer grammar t009lexer; +options { + language = Python; +} + +DIGIT: '0' .. '9'; diff --git a/antlr-3.1.3/runtime/Python/tests/t009lexer.py b/antlr-3.1.3/runtime/Python/tests/t009lexer.py new file mode 100644 index 0000000..a385868 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t009lexer.py @@ -0,0 +1,69 @@ +import antlr3 +import testbase +import unittest + +class t009lexer(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def emitErrorMessage(self, msg): + # report errors to /dev/null + pass + + def reportError(self, re): + # no error recovery yet, just crash! + raise re + + return TLexer + + + def testValid(self): + stream = antlr3.StringStream('085') + lexer = self.getLexer(stream) + + token = lexer.nextToken() + assert token.type == self.lexerModule.DIGIT + assert token.start == 0, token.start + assert token.stop == 0, token.stop + assert token.text == '0', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.DIGIT + assert token.start == 1, token.start + assert token.stop == 1, token.stop + assert token.text == '8', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.DIGIT + assert token.start == 2, token.start + assert token.stop == 2, token.stop + assert token.text == '5', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.EOF + + + def testMalformedInput(self): + stream = antlr3.StringStream('2a') + lexer = self.getLexer(stream) + + lexer.nextToken() + try: + token = lexer.nextToken() + raise AssertionError, token + + except antlr3.MismatchedRangeException, exc: + assert exc.a == '0', repr(exc.a) + assert exc.b == '9', repr(exc.b) + assert exc.unexpectedType == 'a', repr(exc.unexpectedType) + assert exc.charPositionInLine == 1, repr(exc.charPositionInLine) + assert exc.line == 1, repr(exc.line) + + +if __name__ == '__main__': + unittest.main() + + diff --git a/antlr-3.1.3/runtime/Python/tests/t010lexer.g b/antlr-3.1.3/runtime/Python/tests/t010lexer.g new file mode 100644 index 0000000..a93636c --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t010lexer.g @@ -0,0 +1,7 @@ +lexer grammar t010lexer; +options { + language = Python; +} + +IDENTIFIER: ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*; +WS: (' ' | '\n')+; diff --git a/antlr-3.1.3/runtime/Python/tests/t010lexer.py b/antlr-3.1.3/runtime/Python/tests/t010lexer.py new file mode 100644 index 0000000..7cd318c --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t010lexer.py @@ -0,0 +1,78 @@ +import antlr3 +import testbase +import unittest + +class t010lexer(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def emitErrorMessage(self, msg): + # report errors to /dev/null + pass + + def reportError(self, re): + # no error recovery yet, just crash! + raise re + + return TLexer + + + def testValid(self): + stream = antlr3.StringStream('foobar _Ab98 \n A12sdf') + lexer = self.getLexer(stream) + + token = lexer.nextToken() + assert token.type == self.lexerModule.IDENTIFIER + assert token.start == 0, token.start + assert token.stop == 5, token.stop + assert token.text == 'foobar', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.WS + assert token.start == 6, token.start + assert token.stop == 6, token.stop + assert token.text == ' ', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.IDENTIFIER + assert token.start == 7, token.start + assert token.stop == 11, token.stop + assert token.text == '_Ab98', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.WS + assert token.start == 12, token.start + assert token.stop == 14, token.stop + assert token.text == ' \n ', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.IDENTIFIER + assert token.start == 15, token.start + assert token.stop == 20, token.stop + assert token.text == 'A12sdf', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.EOF + + + def testMalformedInput(self): + stream = antlr3.StringStream('a-b') + lexer = self.getLexer(stream) + + lexer.nextToken() + try: + token = lexer.nextToken() + raise AssertionError, token + + except antlr3.NoViableAltException, exc: + assert exc.unexpectedType == '-', repr(exc.unexpectedType) + assert exc.charPositionInLine == 1, repr(exc.charPositionInLine) + assert exc.line == 1, repr(exc.line) + + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t011lexer.g b/antlr-3.1.3/runtime/Python/tests/t011lexer.g new file mode 100644 index 0000000..fde9a3b --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t011lexer.g @@ -0,0 +1,19 @@ +lexer grammar t011lexer; +options { + language = Python; +} + +IDENTIFIER: + ('a'..'z'|'A'..'Z'|'_') + ('a'..'z' + |'A'..'Z' + |'0'..'9' + |'_' + { + print "Underscore" + print "foo" + } + )* + ; + +WS: (' ' | '\n')+; diff --git a/antlr-3.1.3/runtime/Python/tests/t011lexer.py b/antlr-3.1.3/runtime/Python/tests/t011lexer.py new file mode 100644 index 0000000..7014255 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t011lexer.py @@ -0,0 +1,78 @@ +import antlr3 +import testbase +import unittest + +class t011lexer(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def emitErrorMessage(self, msg): + # report errors to /dev/null + pass + + def reportError(self, re): + # no error recovery yet, just crash! + raise re + + return TLexer + + + def testValid(self): + stream = antlr3.StringStream('foobar _Ab98 \n A12sdf') + lexer = self.getLexer(stream) + + token = lexer.nextToken() + assert token.type == self.lexerModule.IDENTIFIER + assert token.start == 0, token.start + assert token.stop == 5, token.stop + assert token.text == 'foobar', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.WS + assert token.start == 6, token.start + assert token.stop == 6, token.stop + assert token.text == ' ', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.IDENTIFIER + assert token.start == 7, token.start + assert token.stop == 11, token.stop + assert token.text == '_Ab98', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.WS + assert token.start == 12, token.start + assert token.stop == 14, token.stop + assert token.text == ' \n ', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.IDENTIFIER + assert token.start == 15, token.start + assert token.stop == 20, token.stop + assert token.text == 'A12sdf', token.text + + token = lexer.nextToken() + assert token.type == self.lexerModule.EOF + + + def testMalformedInput(self): + stream = antlr3.StringStream('a-b') + lexer = self.getLexer(stream) + + lexer.nextToken() + try: + token = lexer.nextToken() + raise AssertionError, token + + except antlr3.NoViableAltException, exc: + assert exc.unexpectedType == '-', repr(exc.unexpectedType) + assert exc.charPositionInLine == 1, repr(exc.charPositionInLine) + assert exc.line == 1, repr(exc.line) + + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t012lexerXML.input b/antlr-3.1.3/runtime/Python/tests/t012lexerXML.input new file mode 100644 index 0000000..1815a9f --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t012lexerXML.input @@ -0,0 +1,21 @@ + + + + + +]> + + +Text + +öäüß +& +< + + + + \ No newline at end of file diff --git a/antlr-3.1.3/runtime/Python/tests/t012lexerXML.output b/antlr-3.1.3/runtime/Python/tests/t012lexerXML.output new file mode 100644 index 0000000..825c37f --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t012lexerXML.output @@ -0,0 +1,39 @@ +XML declaration +Attr: version='1.0' +ROOTELEMENT: component +INTERNAL DTD: [ + + + + +] +Start Tag: component +Attr: attr="val'ue" +Attr: attr2='val"ue' +PCDATA: " +" +Comment: "" +PCDATA: " +Text +" +CDATA: "" +PCDATA: " +öäüß +& +< +" +PI: xtal +Attr: cursor='11' +PCDATA: " +" +Empty Element: sub +PCDATA: " +" +Start Tag: sub +End Tag: sub +PCDATA: " +" +End Tag: component diff --git a/antlr-3.1.3/runtime/Python/tests/t012lexerXML.py b/antlr-3.1.3/runtime/Python/tests/t012lexerXML.py new file mode 100644 index 0000000..3e8f8b4 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t012lexerXML.py @@ -0,0 +1,189 @@ +import antlr3 +import testbase +import unittest +import os +import sys +from cStringIO import StringIO +import difflib +import textwrap + +class t012lexerXML(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar('t012lexerXMLLexer.g') + + + def lexerClass(self, base): + class TLexer(base): + def emitErrorMessage(self, msg): + # report errors to /dev/null + pass + + def reportError(self, re): + # no error recovery yet, just crash! + raise re + + return TLexer + + + def testValid(self): + inputPath = os.path.splitext(__file__)[0] + '.input' + stream = antlr3.StringStream(unicode(open(inputPath).read(), 'utf-8')) + lexer = self.getLexer(stream) + + while True: + token = lexer.nextToken() + if token.type == self.lexerModule.EOF: + break + + + output = unicode(lexer.outbuf.getvalue(), 'utf-8') + + outputPath = os.path.splitext(__file__)[0] + '.output' + testOutput = unicode(open(outputPath).read(), 'utf-8') + + success = (output == testOutput) + if not success: + d = difflib.Differ() + r = d.compare(output.splitlines(1), testOutput.splitlines(1)) + self.fail( + ''.join([l.encode('ascii', 'backslashreplace') for l in r]) + ) + + + def testMalformedInput1(self): + input = textwrap.dedent("""\ + + + + """) + + stream = antlr3.StringStream(input) + lexer = self.getLexer(stream) + + try: + while True: + token = lexer.nextToken() + if token.type == antlr3.EOF: + break + + raise AssertionError + + except antlr3.NoViableAltException, exc: + assert exc.unexpectedType == '>', repr(exc.unexpectedType) + assert exc.charPositionInLine == 11, repr(exc.charPositionInLine) + assert exc.line == 2, repr(exc.line) + + + def testMalformedInput2(self): + input = textwrap.dedent("""\ + + + + """) + + stream = antlr3.StringStream(input) + lexer = self.getLexer(stream) + + try: + while True: + token = lexer.nextToken() + if token.type == antlr3.EOF: + break + + raise AssertionError + + except antlr3.MismatchedSetException, exc: + assert exc.unexpectedType == 't', repr(exc.unexpectedType) + assert exc.charPositionInLine == 2, repr(exc.charPositionInLine) + assert exc.line == 1, repr(exc.line) + + + def testMalformedInput3(self): + input = textwrap.dedent("""\ + + + + """) + + stream = antlr3.StringStream(input) + lexer = self.getLexer(stream) + + try: + while True: + token = lexer.nextToken() + if token.type == antlr3.EOF: + break + + raise AssertionError + + except antlr3.NoViableAltException, exc: + assert exc.unexpectedType == 'a', repr(exc.unexpectedType) + assert exc.charPositionInLine == 11, repr(exc.charPositionInLine) + assert exc.line == 2, repr(exc.line) + + + +if __name__ == '__main__': + unittest.main() + + +## # run an infinite loop with randomly mangled input +## while True: +## print "ping" + +## input = """\ +## +## +## +## + +## ]> +## +## +## Text +## +## & +## < +## +## +## +## +## """ + +## import random +## input = list(input) # make it mutable +## for _ in range(3): +## p1 = random.randrange(len(input)) +## p2 = random.randrange(len(input)) + +## c1 = input[p1] +## input[p1] = input[p2] +## input[p2] = c1 +## input = ''.join(input) # back to string + +## stream = antlr3.StringStream(input) +## lexer = Lexer(stream) + +## try: +## while True: +## token = lexer.nextToken() +## if token.type == EOF: +## break + +## except antlr3.RecognitionException, exc: +## print exc +## for l in input.splitlines()[0:exc.line]: +## print l +## print ' '*exc.charPositionInLine + '^' + +## except BaseException, exc: +## print '\n'.join(['%02d: %s' % (idx+1, l) for idx, l in enumerate(input.splitlines())]) +## print "%s at %d:%d" % (exc, stream.line, stream.charPositionInLine) +## print + +## raise + diff --git a/antlr-3.1.3/runtime/Python/tests/t012lexerXMLLexer.g b/antlr-3.1.3/runtime/Python/tests/t012lexerXMLLexer.g new file mode 100644 index 0000000..31fa203 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t012lexerXMLLexer.g @@ -0,0 +1,132 @@ +lexer grammar t012lexerXMLLexer; +options { + language = Python; +} + +@header { +from cStringIO import StringIO +} + +@lexer::init { +self.outbuf = StringIO() +} + +@lexer::members { +def output(self, line): + self.outbuf.write(line.encode('utf-8') + "\n") +} + +DOCUMENT + : XMLDECL? WS? DOCTYPE? WS? ELEMENT WS? + ; + +fragment DOCTYPE + : + '' + ; + +fragment INTERNAL_DTD : '[' (options {greedy=false;} : .)* ']' ; + +fragment PI : + '' + ; + +fragment XMLDECL : + '' + ; + + +fragment ELEMENT + : ( START_TAG + (ELEMENT + | t=PCDATA + {self.output("PCDATA: \""+$t.text+"\"")} + | t=CDATA + {self.output("CDATA: \""+$t.text+"\"")} + | t=COMMENT + {self.output("Comment: \""+$t.text+"\"")} + | pi=PI + )* + END_TAG + | EMPTY_ELEMENT + ) + ; + +fragment START_TAG + : '<' WS? name=GENERIC_ID WS? + {self.output("Start Tag: "+name.text)} + ( ATTRIBUTE WS? )* '>' + ; + +fragment EMPTY_ELEMENT + : '<' WS? name=GENERIC_ID WS? + {self.output("Empty Element: "+name.text)} + ( ATTRIBUTE WS? )* '/>' + ; + +fragment ATTRIBUTE + : name=GENERIC_ID WS? '=' WS? value=VALUE + {self.output("Attr: "+name.text+"="+value.text)} + ; + +fragment END_TAG + : '' + {self.output("End Tag: "+name.text)} + ; + +fragment COMMENT + : '' + ; + +fragment CDATA + : '' + ; + +fragment PCDATA : (~'<')+ ; + +fragment VALUE : + ( '\"' (~'\"')* '\"' + | '\'' (~'\'')* '\'' + ) + ; + +fragment GENERIC_ID + : ( LETTER | '_' | ':') + ( options {greedy=true;} : LETTER | '0'..'9' | '.' | '-' | '_' | ':' )* + ; + +fragment LETTER + : 'a'..'z' + | 'A'..'Z' + ; + +fragment WS : + ( ' ' + | '\t' + | ( '\n' + | '\r\n' + | '\r' + ) + )+ + ; + diff --git a/antlr-3.1.3/runtime/Python/tests/t013parser.g b/antlr-3.1.3/runtime/Python/tests/t013parser.g new file mode 100644 index 0000000..c3ab2c9 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t013parser.g @@ -0,0 +1,23 @@ +grammar t013parser; +options { + language = Python; +} + +@parser::init { +self.identifiers = [] +self.reportedErrors = [] +} + +@parser::members { +def foundIdentifier(self, name): + self.identifiers.append(name) + +def emitErrorMessage(self, msg): + self.reportedErrors.append(msg) +} + +document: + t=IDENTIFIER {self.foundIdentifier($t.text)} + ; + +IDENTIFIER: ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*; diff --git a/antlr-3.1.3/runtime/Python/tests/t013parser.py b/antlr-3.1.3/runtime/Python/tests/t013parser.py new file mode 100644 index 0000000..1c21d5e --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t013parser.py @@ -0,0 +1,35 @@ +import antlr3 +import testbase +import unittest + +class t013parser(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def testValid(self): + cStream = antlr3.StringStream('foobar') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + parser.document() + + assert len(parser.reportedErrors) == 0, parser.reportedErrors + assert parser.identifiers == ['foobar'] + + + def testMalformedInput1(self): + cStream = antlr3.StringStream('') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + + parser.document() + + # FIXME: currently strings with formatted errors are collected + # can't check error locations yet + assert len(parser.reportedErrors) == 1, parser.reportedErrors + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t014parser.g b/antlr-3.1.3/runtime/Python/tests/t014parser.g new file mode 100644 index 0000000..4c8238f --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t014parser.g @@ -0,0 +1,35 @@ +grammar t014parser; +options { + language = Python; +} + +@parser::init { +self.events = [] +self.reportedErrors = [] +} + +@parser::members { +def emitErrorMessage(self, msg): + self.reportedErrors.append(msg) +} + + +document: + ( declaration + | call + )* + EOF + ; + +declaration: + 'var' t=IDENTIFIER ';' + {self.events.append(('decl', $t.text))} + ; + +call: + t=IDENTIFIER '(' ')' ';' + {self.events.append(('call', $t.text))} + ; + +IDENTIFIER: ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*; +WS: (' '|'\r'|'\t'|'\n') {$channel=HIDDEN;}; diff --git a/antlr-3.1.3/runtime/Python/tests/t014parser.py b/antlr-3.1.3/runtime/Python/tests/t014parser.py new file mode 100644 index 0000000..e2965a4 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t014parser.py @@ -0,0 +1,74 @@ +import antlr3 +import testbase +import unittest + +class t014parser(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def testValid(self): + cStream = antlr3.StringStream('var foobar; gnarz(); var blupp; flupp ( ) ;') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + parser.document() + + assert len(parser.reportedErrors) == 0, parser.reportedErrors + assert parser.events == [ + ('decl', 'foobar'), + ('call', 'gnarz'), + ('decl', 'blupp'), + ('call', 'flupp') + ], parser.events + + + def testMalformedInput1(self): + cStream = antlr3.StringStream('var; foo();') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + + parser.document() + + # FIXME: currently strings with formatted errors are collected + # can't check error locations yet + assert len(parser.reportedErrors) == 1, parser.reportedErrors + assert parser.events == [], parser.events + + + def testMalformedInput2(self): + cStream = antlr3.StringStream('var foobar(); gnarz();') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + + parser.document() + + # FIXME: currently strings with formatted errors are collected + # can't check error locations yet + assert len(parser.reportedErrors) == 1, parser.reportedErrors + assert parser.events == [ + ('call', 'gnarz'), + ], parser.events + + + def testMalformedInput3(self): + cStream = antlr3.StringStream('gnarz(; flupp();') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + + parser.document() + + # FIXME: currently strings with formatted errors are collected + # can't check error locations yet + assert len(parser.reportedErrors) == 1, parser.reportedErrors + assert parser.events == [ + ('call', 'gnarz'), + ('call', 'flupp'), + ], parser.events + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t015calc.g b/antlr-3.1.3/runtime/Python/tests/t015calc.g new file mode 100644 index 0000000..f08e3ce --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t015calc.g @@ -0,0 +1,54 @@ +grammar t015calc; +options { + language = Python; +} + +@header { +import math +} + +@parser::init { +self.reportedErrors = [] +} + +@parser::members { +def emitErrorMessage(self, msg): + self.reportedErrors.append(msg) +} + +evaluate returns [result]: r=expression {result = r}; + +expression returns [result]: r=mult ( + '+' r2=mult {r += r2} + | '-' r2=mult {r -= r2} + )* {result = r}; + +mult returns [result]: r=log ( + '*' r2=log {r *= r2} + | '/' r2=log {r /= r2} +// | '%' r2=log {r %= r2} + )* {result = r}; + +log returns [result]: 'ln' r=exp {result = math.log(r)} + | r=exp {result = r} + ; + +exp returns [result]: r=atom ('^' r2=atom {r = math.pow(r,r2)} )? {result = r} + ; + +atom returns [result]: + n=INTEGER {result = int($n.text)} + | n=DECIMAL {result = float($n.text)} + | '(' r=expression {result = r} ')' + | 'PI' {result = math.pi} + | 'E' {result = math.e} + ; + +INTEGER: DIGIT+; + +DECIMAL: DIGIT+ '.' DIGIT+; + +fragment +DIGIT: '0'..'9'; + +WS: (' ' | '\n' | '\t')+ {$channel = HIDDEN}; diff --git a/antlr-3.1.3/runtime/Python/tests/t015calc.py b/antlr-3.1.3/runtime/Python/tests/t015calc.py new file mode 100644 index 0000000..0f1fe8a --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t015calc.py @@ -0,0 +1,46 @@ +import antlr3 +import testbase +import unittest + +class t015calc(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def _evaluate(self, expr, expected, errors=[]): + cStream = antlr3.StringStream(expr) + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + result = parser.evaluate() + assert result == expected, "%r != %r" % (result, expected) + assert len(parser.reportedErrors) == len(errors), parser.reportedErrors + + + def testValid01(self): + self._evaluate("1 + 2", 3) + + + def testValid02(self): + self._evaluate("1 + 2 * 3", 7) + + + def testValid03(self): + self._evaluate("10 / 2", 5) + + + def testValid04(self): + self._evaluate("6 + 2*(3+1) - 4", 10) + + + def testMalformedInput(self): + self._evaluate("6 - (2*1", 4, ["mismatched token at pos 8"]) + + # FIXME: most parse errors result in TypeErrors in action code, because + # rules return None, which is then added/multiplied... to integers. + # evaluate("6 - foo 2", 4, ["some error"]) + + +if __name__ == '__main__': + unittest.main() + diff --git a/antlr-3.1.3/runtime/Python/tests/t016actions.g b/antlr-3.1.3/runtime/Python/tests/t016actions.g new file mode 100644 index 0000000..1b7ac65 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t016actions.g @@ -0,0 +1,31 @@ +grammar t016actions; +options { + language = Python; +} + +declaration returns [name] + : functionHeader ';' + {$name = $functionHeader.name} + ; + +functionHeader returns [name] + : type ID + {$name = $ID.text} + ; + +type + : 'int' + | 'char' + | 'void' + ; + +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + ; + +WS : ( ' ' + | '\t' + | '\r' + | '\n' + )+ + {$channel=HIDDEN} + ; diff --git a/antlr-3.1.3/runtime/Python/tests/t016actions.py b/antlr-3.1.3/runtime/Python/tests/t016actions.py new file mode 100644 index 0000000..5e4cad0 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t016actions.py @@ -0,0 +1,20 @@ +import antlr3 +import testbase +import unittest + +class t016actions(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def testValid(self): + cStream = antlr3.StringStream("int foo;") + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + name = parser.declaration() + assert name == 'foo', name + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t017parser.g b/antlr-3.1.3/runtime/Python/tests/t017parser.g new file mode 100644 index 0000000..84c6b03 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t017parser.g @@ -0,0 +1,91 @@ +grammar t017parser; + +options { + language = Python; +} + +program + : declaration+ + ; + +declaration + : variable + | functionHeader ';' + | functionHeader block + ; + +variable + : type declarator ';' + ; + +declarator + : ID + ; + +functionHeader + : type ID '(' ( formalParameter ( ',' formalParameter )* )? ')' + ; + +formalParameter + : type declarator + ; + +type + : 'int' + | 'char' + | 'void' + | ID + ; + +block + : '{' + variable* + stat* + '}' + ; + +stat: forStat + | expr ';' + | block + | assignStat ';' + | ';' + ; + +forStat + : 'for' '(' assignStat ';' expr ';' assignStat ')' block + ; + +assignStat + : ID '=' expr + ; + +expr: condExpr + ; + +condExpr + : aexpr ( ('==' | '<') aexpr )? + ; + +aexpr + : atom ( '+' atom )* + ; + +atom + : ID + | INT + | '(' expr ')' + ; + +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + ; + +INT : ('0'..'9')+ + ; + +WS : ( ' ' + | '\t' + | '\r' + | '\n' + )+ + {$channel=HIDDEN} + ; diff --git a/antlr-3.1.3/runtime/Python/tests/t017parser.py b/antlr-3.1.3/runtime/Python/tests/t017parser.py new file mode 100644 index 0000000..5b4d851 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t017parser.py @@ -0,0 +1,58 @@ +import antlr3 +import testbase +import unittest + +class t017parser(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + def parserClass(self, base): + class TestParser(base): + def __init__(self, *args, **kwargs): + base.__init__(self, *args, **kwargs) + + self.reportedErrors = [] + + + def emitErrorMessage(self, msg): + self.reportedErrors.append(msg) + + return TestParser + + + def testValid(self): + cStream = antlr3.StringStream("int foo;") + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + parser.program() + + assert len(parser.reportedErrors) == 0, parser.reportedErrors + + + def testMalformedInput1(self): + cStream = antlr3.StringStream('int foo() { 1+2 }') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + parser.program() + + # FIXME: currently strings with formatted errors are collected + # can't check error locations yet + assert len(parser.reportedErrors) == 1, parser.reportedErrors + + + def testMalformedInput2(self): + cStream = antlr3.StringStream('int foo() { 1+; 1+2 }') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + parser.program() + + # FIXME: currently strings with formatted errors are collected + # can't check error locations yet + assert len(parser.reportedErrors) == 2, parser.reportedErrors + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t018llstar.g b/antlr-3.1.3/runtime/Python/tests/t018llstar.g new file mode 100644 index 0000000..388ab92 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t018llstar.g @@ -0,0 +1,111 @@ +grammar t018llstar; + +options { + language = Python; +} + +@header { +from cStringIO import StringIO +} + +@init { +self.output = StringIO() +} + +program + : declaration+ + ; + +/** In this rule, the functionHeader left prefix on the last two + * alternatives is not LL(k) for a fixed k. However, it is + * LL(*). The LL(*) algorithm simply scans ahead until it sees + * either the ';' or the '{' of the block and then it picks + * the appropriate alternative. Lookhead can be arbitrarily + * long in theory, but is <=10 in most cases. Works great. + * Use ANTLRWorks to see the lookahead use (step by Location) + * and look for blue tokens in the input window pane. :) + */ +declaration + : variable + | functionHeader ';' + {self.output.write($functionHeader.name+" is a declaration\n")} + | functionHeader block + {self.output.write($functionHeader.name+" is a definition\n")} + ; + +variable + : type declarator ';' + ; + +declarator + : ID + ; + +functionHeader returns [name] + : type ID '(' ( formalParameter ( ',' formalParameter )* )? ')' + {$name = $ID.text} + ; + +formalParameter + : type declarator + ; + +type + : 'int' + | 'char' + | 'void' + | ID + ; + +block + : '{' + variable* + stat* + '}' + ; + +stat: forStat + | expr ';' + | block + | assignStat ';' + | ';' + ; + +forStat + : 'for' '(' assignStat ';' expr ';' assignStat ')' block + ; + +assignStat + : ID '=' expr + ; + +expr: condExpr + ; + +condExpr + : aexpr ( ('==' | '<') aexpr )? + ; + +aexpr + : atom ( '+' atom )* + ; + +atom + : ID + | INT + | '(' expr ')' + ; + +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + ; + +INT : ('0'..'9')+ + ; + +WS : ( ' ' + | '\t' + | '\r' + | '\n' + )+ + {$channel=HIDDEN} + ; diff --git a/antlr-3.1.3/runtime/Python/tests/t018llstar.input b/antlr-3.1.3/runtime/Python/tests/t018llstar.input new file mode 100644 index 0000000..1aa5a0d --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t018llstar.input @@ -0,0 +1,12 @@ +char c; +int x; + +void bar(int x); + +int foo(int y, char d) { + int i; + for (i=0; i<3; i=i+1) { + x=3; + y=5; + } +} diff --git a/antlr-3.1.3/runtime/Python/tests/t018llstar.output b/antlr-3.1.3/runtime/Python/tests/t018llstar.output new file mode 100644 index 0000000..757c53a --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t018llstar.output @@ -0,0 +1,2 @@ +bar is a declaration +foo is a definition diff --git a/antlr-3.1.3/runtime/Python/tests/t018llstar.py b/antlr-3.1.3/runtime/Python/tests/t018llstar.py new file mode 100644 index 0000000..fe67fe2 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t018llstar.py @@ -0,0 +1,76 @@ +import antlr3 +import testbase +import unittest +import os +import sys +from cStringIO import StringIO +import difflib + +class t018llstar(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def testValid(self): + inputPath = os.path.splitext(__file__)[0] + '.input' + cStream = antlr3.StringStream(open(inputPath).read()) + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + parser.program() + + output = parser.output.getvalue() + + outputPath = os.path.splitext(__file__)[0] + '.output' + testOutput = open(outputPath).read() + + success = (output == testOutput) + if not success: + d = difflib.Differ() + r = d.compare(output.splitlines(1), testOutput.splitlines(1)) + self.fail( + ''.join([l.encode('ascii', 'backslashreplace') for l in r]) + ) + +if __name__ == '__main__': + unittest.main() + + + +## # run an infinite loop with randomly mangled input +## while True: +## print "ping" + +## input = open(inputPath).read() + +## import random +## input = list(input) # make it mutable +## for _ in range(3): +## p1 = random.randrange(len(input)) +## p2 = random.randrange(len(input)) + +## c1 = input[p1] +## input[p1] = input[p2] +## input[p2] = c1 +## input = ''.join(input) # back to string + + +## try: +## cStream = antlr3.StringStream(input) +## lexer = Lexer(cStream) +## tStream = antlr3.CommonTokenStream(lexer) +## parser = TestParser(tStream) +## parser.program() + +## except antlr3.RecognitionException, exc: +## print exc +## for l in input.splitlines()[0:exc.line]: +## print l +## print ' '*exc.charPositionInLine + '^' + +## except BaseException, exc: +## print '\n'.join(['%02d: %s' % (idx+1, l) for idx, l in enumerate(input.splitlines())]) +## print "%s at %d:%d" % (exc, cStream.line, cStream.charPositionInLine) +## print + +## raise diff --git a/antlr-3.1.3/runtime/Python/tests/t019lexer.g b/antlr-3.1.3/runtime/Python/tests/t019lexer.g new file mode 100644 index 0000000..3647775 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t019lexer.g @@ -0,0 +1,64 @@ +lexer grammar t019lexer; +options { + language=Python; + filter=true; +} + +IMPORT + : 'import' WS name=QIDStar WS? ';' + ; + +/** Avoids having "return foo;" match as a field */ +RETURN + : 'return' (options {greedy=false;}:.)* ';' + ; + +CLASS + : 'class' WS name=ID WS? ('extends' WS QID WS?)? + ('implements' WS QID WS? (',' WS? QID WS?)*)? '{' + ; + +COMMENT + : '/*' (options {greedy=false;} : . )* '*/' + ; + +STRING + : '"' (options {greedy=false;}: ESC | .)* '"' + ; + +CHAR + : '\'' (options {greedy=false;}: ESC | .)* '\'' + ; + +WS : (' '|'\t'|'\n')+ + ; + +fragment +QID : ID ('.' ID)* + ; + +/** QID cannot see beyond end of token so using QID '.*'? somewhere won't + * ever match since k=1 lookahead in the QID loop of '.' will make it loop. + * I made this rule to compensate. + */ +fragment +QIDStar + : ID ('.' ID)* '.*'? + ; + +fragment +TYPE: QID '[]'? + ; + +fragment +ARG : TYPE WS ID + ; + +fragment +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* + ; + +fragment +ESC : '\\' ('"'|'\''|'\\') + ; + diff --git a/antlr-3.1.3/runtime/Python/tests/t019lexer.input b/antlr-3.1.3/runtime/Python/tests/t019lexer.input new file mode 100644 index 0000000..d01e1c1 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t019lexer.input @@ -0,0 +1,13 @@ +import org.antlr.runtime.*; + +public class Main { + public static void main(String[] args) throws Exception { + for (int i=0; i ID // only visible, if b was called with True + | NUM + ; + + +/* rule scopes, from the book, final beta, p.148 */ + +c returns [res] +scope { + symbols +} +@init { + $c::symbols = set(); +} + : '{' c1* c2+ '}' + { $res = $c::symbols; } + ; + +c1 + : 'int' ID {$c::symbols.add($ID.text)} ';' + ; + +c2 + : ID '=' NUM ';' + { + if $ID.text not in $c::symbols: + raise RuntimeError($ID.text) + } + ; + +/* recursive rule scopes, from the book, final beta, p.150 */ + +d returns [res] +scope { + symbols +} +@init { + $d::symbols = set(); +} + : '{' d1* d2* '}' + { $res = $d::symbols; } + ; + +d1 + : 'int' ID {$d::symbols.add($ID.text)} ';' + ; + +d2 + : ID '=' NUM ';' + { + for s in reversed(range(len($d))): + if $ID.text in $d[s]::symbols: + break + else: + raise RuntimeError($ID.text) + } + | d + ; + +/* recursive rule scopes, access bottom-most scope */ + +e returns [res] +scope { + a +} +@after { + $res = $e::a; +} + : NUM { $e[0]::a = int($NUM.text); } + | '{' e '}' + ; + + +/* recursive rule scopes, access with negative index */ + +f returns [res] +scope { + a +} +@after { + $res = $f::a; +} + : NUM { $f[-2]::a = int($NUM.text); } + | '{' f '}' + ; + + +/* tokens */ + +ID : ('a'..'z')+ + ; + +NUM : ('0'..'9')+ + ; + +WS : (' '|'\n'|'\r')+ {$channel=HIDDEN} + ; diff --git a/antlr-3.1.3/runtime/Python/tests/t022scopes.py b/antlr-3.1.3/runtime/Python/tests/t022scopes.py new file mode 100644 index 0000000..01bc597 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t022scopes.py @@ -0,0 +1,167 @@ +import antlr3 +import testbase +import unittest +import textwrap + + +class t022scopes(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def parserClass(self, base): + class TParser(base): + def emitErrorMessage(self, msg): + # report errors to /dev/null + pass + + def reportError(self, re): + # no error recovery yet, just crash! + raise re + + return TParser + + + def testa1(self): + cStream = antlr3.StringStream('foobar') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + parser.a() + + + def testb1(self): + cStream = antlr3.StringStream('foobar') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + + try: + parser.b(False) + self.fail() + except antlr3.RecognitionException: + pass + + + def testb2(self): + cStream = antlr3.StringStream('foobar') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + parser.b(True) + + + def testc1(self): + cStream = antlr3.StringStream( + textwrap.dedent('''\ + { + int i; + int j; + i = 0; + } + ''')) + + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + symbols = parser.c() + + self.failUnlessEqual( + symbols, + set(['i', 'j']) + ) + + + def testc2(self): + cStream = antlr3.StringStream( + textwrap.dedent('''\ + { + int i; + int j; + i = 0; + x = 4; + } + ''')) + + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + + try: + parser.c() + self.fail() + except RuntimeError, exc: + self.failUnlessEqual(exc.args[0], 'x') + + + def testd1(self): + cStream = antlr3.StringStream( + textwrap.dedent('''\ + { + int i; + int j; + i = 0; + { + int i; + int x; + x = 5; + } + } + ''')) + + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + symbols = parser.d() + + self.failUnlessEqual( + symbols, + set(['i', 'j']) + ) + + + def teste1(self): + cStream = antlr3.StringStream( + textwrap.dedent('''\ + { { { { 12 } } } } + ''')) + + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + res = parser.e() + + self.failUnlessEqual(res, 12) + + + def testf1(self): + cStream = antlr3.StringStream( + textwrap.dedent('''\ + { { { { 12 } } } } + ''')) + + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + res = parser.f() + + self.failUnlessEqual(res, None) + + + def testf2(self): + cStream = antlr3.StringStream( + textwrap.dedent('''\ + { { 12 } } + ''')) + + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + res = parser.f() + + self.failUnlessEqual(res, None) + + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t023scopes.g b/antlr-3.1.3/runtime/Python/tests/t023scopes.g new file mode 100644 index 0000000..02e69b1 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t023scopes.g @@ -0,0 +1,18 @@ +grammar t023scopes; + +options { + language=Python; +} + +prog +scope { +name +} + : ID {$prog::name=$ID.text;} + ; + +ID : ('a'..'z')+ + ; + +WS : (' '|'\n'|'\r')+ {$channel=HIDDEN} + ; diff --git a/antlr-3.1.3/runtime/Python/tests/t023scopes.py b/antlr-3.1.3/runtime/Python/tests/t023scopes.py new file mode 100644 index 0000000..4c33b8a --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t023scopes.py @@ -0,0 +1,20 @@ +import antlr3 +import testbase +import unittest + + +class t023scopes(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def testValid1(self): + cStream = antlr3.StringStream('foobar') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + parser.prog() + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t024finally.g b/antlr-3.1.3/runtime/Python/tests/t024finally.g new file mode 100644 index 0000000..1cd2527 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t024finally.g @@ -0,0 +1,19 @@ +grammar t024finally; + +options { + language=Python; +} + +prog returns [events] +@init {events = []} +@after {events.append('after')} + : ID {raise RuntimeError} + ; + catch [RuntimeError] {events.append('catch')} + finally {events.append('finally')} + +ID : ('a'..'z')+ + ; + +WS : (' '|'\n'|'\r')+ {$channel=HIDDEN} + ; diff --git a/antlr-3.1.3/runtime/Python/tests/t024finally.py b/antlr-3.1.3/runtime/Python/tests/t024finally.py new file mode 100644 index 0000000..9a269dd --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t024finally.py @@ -0,0 +1,23 @@ +import antlr3 +import testbase +import unittest + + +class t024finally(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def testValid1(self): + cStream = antlr3.StringStream('foobar') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + events = parser.prog() + + assert events == ['catch', 'finally'], events + + +if __name__ == '__main__': + unittest.main() + diff --git a/antlr-3.1.3/runtime/Python/tests/t025lexerRulePropertyRef.g b/antlr-3.1.3/runtime/Python/tests/t025lexerRulePropertyRef.g new file mode 100644 index 0000000..b3500cc --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t025lexerRulePropertyRef.g @@ -0,0 +1,18 @@ +lexer grammar t025lexerRulePropertyRef; +options { + language = Python; +} + +@lexer::init { +self.properties = [] +} + +IDENTIFIER: + ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + { +self.properties.append( + ($text, $type, $line, $pos, $index, $channel, $start, $stop) +) + } + ; +WS: (' ' | '\n')+; diff --git a/antlr-3.1.3/runtime/Python/tests/t025lexerRulePropertyRef.py b/antlr-3.1.3/runtime/Python/tests/t025lexerRulePropertyRef.py new file mode 100644 index 0000000..ae4ac79 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t025lexerRulePropertyRef.py @@ -0,0 +1,54 @@ +import antlr3 +import testbase +import unittest + + +class t025lexerRulePropertyRef(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def testValid1(self): + stream = antlr3.StringStream('foobar _Ab98 \n A12sdf') + lexer = self.getLexer(stream) + + while True: + token = lexer.nextToken() + if token.type == antlr3.EOF: + break + + assert len(lexer.properties) == 3, lexer.properties + + text, type, line, pos, index, channel, start, stop = lexer.properties[0] + assert text == 'foobar', lexer.properties[0] + assert type == self.lexerModule.IDENTIFIER, lexer.properties[0] + assert line == 1, lexer.properties[0] + assert pos == 0, lexer.properties[0] + assert index == -1, lexer.properties[0] + assert channel == antlr3.DEFAULT_CHANNEL, lexer.properties[0] + assert start == 0, lexer.properties[0] + assert stop == 5, lexer.properties[0] + + text, type, line, pos, index, channel, start, stop = lexer.properties[1] + assert text == '_Ab98', lexer.properties[1] + assert type == self.lexerModule.IDENTIFIER, lexer.properties[1] + assert line == 1, lexer.properties[1] + assert pos == 7, lexer.properties[1] + assert index == -1, lexer.properties[1] + assert channel == antlr3.DEFAULT_CHANNEL, lexer.properties[1] + assert start == 7, lexer.properties[1] + assert stop == 11, lexer.properties[1] + + text, type, line, pos, index, channel, start, stop = lexer.properties[2] + assert text == 'A12sdf', lexer.properties[2] + assert type == self.lexerModule.IDENTIFIER, lexer.properties[2] + assert line == 2, lexer.properties[2] + assert pos == 1, lexer.properties[2] + assert index == -1, lexer.properties[2] + assert channel == antlr3.DEFAULT_CHANNEL, lexer.properties[2] + assert start == 15, lexer.properties[2] + assert stop == 20, lexer.properties[2] + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t026actions.g b/antlr-3.1.3/runtime/Python/tests/t026actions.g new file mode 100644 index 0000000..e8f9fef --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t026actions.g @@ -0,0 +1,39 @@ +grammar t026actions; +options { + language = Python; +} + +@lexer::init { + self.foobar = 'attribute;' +} + +prog +@init { + self.capture('init;') +} +@after { + self.capture('after;') +} + : IDENTIFIER EOF + ; + catch [ RecognitionException, exc ] { + self.capture('catch;') + raise + } + finally { + self.capture('finally;') + } + + +IDENTIFIER + : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + { + # a comment + self.capture('action;') + self.capture('\%r \%r \%r \%r \%r \%r \%r \%r;' \% ($text, $type, $line, $pos, $index, $channel, $start, $stop)) + if True: + self.capture(self.foobar) + } + ; + +WS: (' ' | '\n')+; diff --git a/antlr-3.1.3/runtime/Python/tests/t026actions.py b/antlr-3.1.3/runtime/Python/tests/t026actions.py new file mode 100644 index 0000000..dd4e5d6 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t026actions.py @@ -0,0 +1,66 @@ +import antlr3 +import testbase +import unittest + + +class t026actions(testbase.ANTLRTest): + def parserClass(self, base): + class TParser(base): + def __init__(self, *args, **kwargs): + base.__init__(self, *args, **kwargs) + + self._errors = [] + self._output = "" + + + def capture(self, t): + self._output += t + + + def emitErrorMessage(self, msg): + self._errors.append(msg) + + + return TParser + + + def lexerClass(self, base): + class TLexer(base): + def __init__(self, *args, **kwargs): + base.__init__(self, *args, **kwargs) + + self._errors = [] + self._output = "" + + + def capture(self, t): + self._output += t + + + def emitErrorMessage(self, msg): + self._errors.append(msg) + + + return TLexer + + + def setUp(self): + self.compileGrammar() + + + def testValid1(self): + cStream = antlr3.StringStream('foobar _Ab98 \n A12sdf') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + parser.prog() + + self.assertEqual( + parser._output, + 'init;after;finally;') + self.assertEqual( + lexer._output, + 'action;u\'foobar\' 4 1 0 -1 0 0 5;attribute;action;u\'_Ab98\' 4 1 7 -1 0 7 11;attribute;action;u\'A12sdf\' 4 2 1 -1 0 15 20;attribute;') + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t027eof.g b/antlr-3.1.3/runtime/Python/tests/t027eof.g new file mode 100644 index 0000000..9cfbb3a --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t027eof.g @@ -0,0 +1,8 @@ +lexer grammar t027eof; + +options { + language=Python; +} + +END: EOF; +SPACE: ' '; diff --git a/antlr-3.1.3/runtime/Python/tests/t027eof.py b/antlr-3.1.3/runtime/Python/tests/t027eof.py new file mode 100644 index 0000000..b6ae18d --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t027eof.py @@ -0,0 +1,25 @@ +import antlr3 +import testbase +import unittest + + +class t027eof(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + @testbase.broken("That's not how EOF is supposed to be used", Exception) + def testValid1(self): + cStream = antlr3.StringStream(' ') + lexer = self.getLexer(cStream) + + tok = lexer.nextToken() + assert tok.type == self.lexerModule.SPACE, tok + + tok = lexer.nextToken() + assert tok.type == self.lexerModule.END, tok + + +if __name__ == '__main__': + unittest.main() + diff --git a/antlr-3.1.3/runtime/Python/tests/t028labelExpr.g.disabled b/antlr-3.1.3/runtime/Python/tests/t028labelExpr.g.disabled new file mode 100644 index 0000000..d3ba76c --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t028labelExpr.g.disabled @@ -0,0 +1,5 @@ +lexer grammar t028labelExpr; +ETAGO: (' ' ' '<'; +CDATA: '<'; diff --git a/antlr-3.1.3/runtime/Python/tests/t029synpredgate.g b/antlr-3.1.3/runtime/Python/tests/t029synpredgate.g new file mode 100644 index 0000000..7900262 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t029synpredgate.g @@ -0,0 +1,16 @@ +lexer grammar t029synpredgate; +options { + language = Python; +} + +FOO + : ('ab')=> A + | ('ac')=> B + ; + +fragment +A: 'a'; + +fragment +B: 'a'; + diff --git a/antlr-3.1.3/runtime/Python/tests/t029synpredgate.py b/antlr-3.1.3/runtime/Python/tests/t029synpredgate.py new file mode 100644 index 0000000..b658688 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t029synpredgate.py @@ -0,0 +1,21 @@ +import antlr3 +import testbase +import unittest + + +class t029synpredgate(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def testValid1(self): + stream = antlr3.StringStream('ac') + lexer = self.getLexer(stream) + token = lexer.nextToken() + + +if __name__ == '__main__': + unittest.main() + + + diff --git a/antlr-3.1.3/runtime/Python/tests/t030specialStates.g b/antlr-3.1.3/runtime/Python/tests/t030specialStates.g new file mode 100644 index 0000000..7b2e423 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t030specialStates.g @@ -0,0 +1,26 @@ +grammar t030specialStates; +options { + language = Python; +} + +@init { +self.cond = True +} + +@members { +def recover(self, input, re): + # no error recovery yet, just crash! + raise re +} + +r + : ( {self.cond}? NAME + | {not self.cond}? NAME WS+ NAME + ) + ( WS+ NAME )? + EOF + ; + +NAME: ('a'..'z') ('a'..'z' | '0'..'9')+; +NUMBER: ('0'..'9')+; +WS: ' '+; diff --git a/antlr-3.1.3/runtime/Python/tests/t030specialStates.py b/antlr-3.1.3/runtime/Python/tests/t030specialStates.py new file mode 100644 index 0000000..86c4f7c --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t030specialStates.py @@ -0,0 +1,47 @@ +import antlr3 +import testbase +import unittest + + +class t030specialStates(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def testValid1(self): + cStream = antlr3.StringStream('foo') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + events = parser.r() + + + def testValid2(self): + cStream = antlr3.StringStream('foo name1') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + events = parser.r() + + + def testValid3(self): + cStream = antlr3.StringStream('bar name1') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + parser.cond = False + events = parser.r() + + + def testValid4(self): + cStream = antlr3.StringStream('bar name1 name2') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + parser.cond = False + events = parser.r() + + +if __name__ == '__main__': + unittest.main() + diff --git a/antlr-3.1.3/runtime/Python/tests/t031emptyAlt.g b/antlr-3.1.3/runtime/Python/tests/t031emptyAlt.g new file mode 100644 index 0000000..0afa596 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t031emptyAlt.g @@ -0,0 +1,16 @@ +grammar t031emptyAlt; +options { + language = Python; +} + +r + : NAME + ( {self.cond}?=> WS+ NAME + | + ) + EOF + ; + +NAME: ('a'..'z') ('a'..'z' | '0'..'9')+; +NUMBER: ('0'..'9')+; +WS: ' '+; diff --git a/antlr-3.1.3/runtime/Python/tests/t031emptyAlt.py b/antlr-3.1.3/runtime/Python/tests/t031emptyAlt.py new file mode 100644 index 0000000..fcae8e1 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t031emptyAlt.py @@ -0,0 +1,21 @@ +import antlr3 +import testbase +import unittest + + +class t031emptyAlt(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def testValid1(self): + cStream = antlr3.StringStream('foo') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + events = parser.r() + + +if __name__ == '__main__': + unittest.main() + diff --git a/antlr-3.1.3/runtime/Python/tests/t032subrulePredict.g b/antlr-3.1.3/runtime/Python/tests/t032subrulePredict.g new file mode 100644 index 0000000..3cc2327 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t032subrulePredict.g @@ -0,0 +1,8 @@ +grammar t032subrulePredict; +options { + language = Python; +} + +a: 'BEGIN' b WS+ 'END'; +b: ( WS+ 'A' )+; +WS: ' '; diff --git a/antlr-3.1.3/runtime/Python/tests/t032subrulePredict.py b/antlr-3.1.3/runtime/Python/tests/t032subrulePredict.py new file mode 100644 index 0000000..7b62add --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t032subrulePredict.py @@ -0,0 +1,44 @@ +import antlr3 +import testbase +import unittest + + +class t032subrulePredict(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def parserClass(self, base): + class TParser(base): + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TParser + + + def testValid1(self): + cStream = antlr3.StringStream( + 'BEGIN A END' + ) + + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + events = parser.a() + + + @testbase.broken("DFA tries to look beyond end of rule b", Exception) + def testValid2(self): + cStream = antlr3.StringStream( + ' A' + ) + + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + events = parser.b() + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t033backtracking.g b/antlr-3.1.3/runtime/Python/tests/t033backtracking.g new file mode 100644 index 0000000..85a4b30 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t033backtracking.g @@ -0,0 +1,534 @@ +grammar t033backtracking; +options { + language=Python; + backtrack=true; + memoize=true; + k=2; +} + +scope Symbols { + types; +} + +@header { +# compatibility stuff +try: + set = set + frozenset = frozenset +except NameError: + from sets import Set as set, ImmutableSet as frozenset + + +try: + reversed = reversed +except NameError: + def reversed(l): + l = l[:] + l.reverse() + return l + +} + +@members { + def isTypeName(self, name): + for scope in reversed(self.Symbols_stack): + if name in scope.types: + return True + + return False + +} + +translation_unit +scope Symbols; // entire file is a scope +@init { + $Symbols::types = set() +} + : external_declaration+ + ; + +/** Either a function definition or any other kind of C decl/def. + * The LL(*) analysis algorithm fails to deal with this due to + * recursion in the declarator rules. I'm putting in a + * manual predicate here so that we don't backtrack over + * the entire function. Further, you get a better error + * as errors within the function itself don't make it fail + * to predict that it's a function. Weird errors previously. + * Remember: the goal is to avoid backtrack like the plague + * because it makes debugging, actions, and errors harder. + * + * Note that k=1 results in a much smaller predictor for the + * fixed lookahead; k=2 made a few extra thousand lines. ;) + * I'll have to optimize that in the future. + */ +external_declaration +options {k=1;} + : ( declaration_specifiers? declarator declaration* '{' )=> function_definition + | declaration + ; + +function_definition +scope Symbols; // put parameters and locals into same scope for now +@init { + $Symbols::types = set() +} + : declaration_specifiers? declarator +// ( declaration+ compound_statement // K&R style +// | compound_statement // ANSI style +// ) + ; + +declaration +scope { + isTypedef; +} +@init { + $declaration::isTypedef = False +} + : 'typedef' declaration_specifiers? {$declaration::isTypedef = True} + init_declarator_list ';' // special case, looking for typedef + | declaration_specifiers init_declarator_list? ';' + ; + +declaration_specifiers + : ( storage_class_specifier + | type_specifier + | type_qualifier + )+ + ; + +init_declarator_list + : init_declarator (',' init_declarator)* + ; + +init_declarator + : declarator //('=' initializer)? + ; + +storage_class_specifier + : 'extern' + | 'static' + | 'auto' + | 'register' + ; + +type_specifier + : 'void' + | 'char' + | 'short' + | 'int' + | 'long' + | 'float' + | 'double' + | 'signed' + | 'unsigned' +// | struct_or_union_specifier +// | enum_specifier + | type_id + ; + +type_id + : {self.isTypeName(self.input.LT(1).getText())}? IDENTIFIER +// {System.out.println($IDENTIFIER.text+" is a type");} + ; + +// struct_or_union_specifier +// options {k=3;} +// scope Symbols; // structs are scopes +// @init { +// $Symbols::types = set() +// } +// : struct_or_union IDENTIFIER? '{' struct_declaration_list '}' +// | struct_or_union IDENTIFIER +// ; + +// struct_or_union +// : 'struct' +// | 'union' +// ; + +// struct_declaration_list +// : struct_declaration+ +// ; + +// struct_declaration +// : specifier_qualifier_list struct_declarator_list ';' +// ; + +// specifier_qualifier_list +// : ( type_qualifier | type_specifier )+ +// ; + +// struct_declarator_list +// : struct_declarator (',' struct_declarator)* +// ; + +// struct_declarator +// : declarator (':' constant_expression)? +// | ':' constant_expression +// ; + +// enum_specifier +// options {k=3;} +// : 'enum' '{' enumerator_list '}' +// | 'enum' IDENTIFIER '{' enumerator_list '}' +// | 'enum' IDENTIFIER +// ; + +// enumerator_list +// : enumerator (',' enumerator)* +// ; + +// enumerator +// : IDENTIFIER ('=' constant_expression)? +// ; + +type_qualifier + : 'const' + | 'volatile' + ; + +declarator + : pointer? direct_declarator + | pointer + ; + +direct_declarator + : ( IDENTIFIER + { + if len($declaration)>0 and $declaration::isTypedef: + $Symbols::types.add($IDENTIFIER.text) + print "define type "+$IDENTIFIER.text + } + | '(' declarator ')' + ) + declarator_suffix* + ; + +declarator_suffix + : /*'[' constant_expression ']' + |*/ '[' ']' +// | '(' parameter_type_list ')' +// | '(' identifier_list ')' + | '(' ')' + ; + +pointer + : '*' type_qualifier+ pointer? + | '*' pointer + | '*' + ; + +// parameter_type_list +// : parameter_list (',' '...')? +// ; + +// parameter_list +// : parameter_declaration (',' parameter_declaration)* +// ; + +// parameter_declaration +// : declaration_specifiers (declarator|abstract_declarator)* +// ; + +// identifier_list +// : IDENTIFIER (',' IDENTIFIER)* +// ; + +// type_name +// : specifier_qualifier_list abstract_declarator? +// ; + +// abstract_declarator +// : pointer direct_abstract_declarator? +// | direct_abstract_declarator +// ; + +// direct_abstract_declarator +// : ( '(' abstract_declarator ')' | abstract_declarator_suffix ) abstract_declarator_suffix* +// ; + +// abstract_declarator_suffix +// : '[' ']' +// | '[' constant_expression ']' +// | '(' ')' +// | '(' parameter_type_list ')' +// ; + +// initializer +// : assignment_expression +// | '{' initializer_list ','? '}' +// ; + +// initializer_list +// : initializer (',' initializer)* +// ; + +// // E x p r e s s i o n s + +// argument_expression_list +// : assignment_expression (',' assignment_expression)* +// ; + +// additive_expression +// : (multiplicative_expression) ('+' multiplicative_expression | '-' multiplicative_expression)* +// ; + +// multiplicative_expression +// : (cast_expression) ('*' cast_expression | '/' cast_expression | '%' cast_expression)* +// ; + +// cast_expression +// : '(' type_name ')' cast_expression +// | unary_expression +// ; + +// unary_expression +// : postfix_expression +// | '++' unary_expression +// | '--' unary_expression +// | unary_operator cast_expression +// | 'sizeof' unary_expression +// | 'sizeof' '(' type_name ')' +// ; + +// postfix_expression +// : primary_expression +// ( '[' expression ']' +// | '(' ')' +// | '(' argument_expression_list ')' +// | '.' IDENTIFIER +// | '*' IDENTIFIER +// | '->' IDENTIFIER +// | '++' +// | '--' +// )* +// ; + +// unary_operator +// : '&' +// | '*' +// | '+' +// | '-' +// | '~' +// | '!' +// ; + +// primary_expression +// : IDENTIFIER +// | constant +// | '(' expression ')' +// ; + +// constant +// : HEX_LITERAL +// | OCTAL_LITERAL +// | DECIMAL_LITERAL +// | CHARACTER_LITERAL +// | STRING_LITERAL +// | FLOATING_POINT_LITERAL +// ; + +// ///// + +// expression +// : assignment_expression (',' assignment_expression)* +// ; + +// constant_expression +// : conditional_expression +// ; + +// assignment_expression +// : lvalue assignment_operator assignment_expression +// | conditional_expression +// ; + +// lvalue +// : unary_expression +// ; + +// assignment_operator +// : '=' +// | '*=' +// | '/=' +// | '%=' +// | '+=' +// | '-=' +// | '<<=' +// | '>>=' +// | '&=' +// | '^=' +// | '|=' +// ; + +// conditional_expression +// : logical_or_expression ('?' expression ':' conditional_expression)? +// ; + +// logical_or_expression +// : logical_and_expression ('||' logical_and_expression)* +// ; + +// logical_and_expression +// : inclusive_or_expression ('&&' inclusive_or_expression)* +// ; + +// inclusive_or_expression +// : exclusive_or_expression ('|' exclusive_or_expression)* +// ; + +// exclusive_or_expression +// : and_expression ('^' and_expression)* +// ; + +// and_expression +// : equality_expression ('&' equality_expression)* +// ; +// equality_expression +// : relational_expression (('=='|'!=') relational_expression)* +// ; + +// relational_expression +// : shift_expression (('<'|'>'|'<='|'>=') shift_expression)* +// ; + +// shift_expression +// : additive_expression (('<<'|'>>') additive_expression)* +// ; + +// // S t a t e m e n t s + +// statement +// : labeled_statement +// | compound_statement +// | expression_statement +// | selection_statement +// | iteration_statement +// | jump_statement +// ; + +// labeled_statement +// : IDENTIFIER ':' statement +// | 'case' constant_expression ':' statement +// | 'default' ':' statement +// ; + +// compound_statement +// scope Symbols; // blocks have a scope of symbols +// @init { +// $Symbols::types = {} +// } +// : '{' declaration* statement_list? '}' +// ; + +// statement_list +// : statement+ +// ; + +// expression_statement +// : ';' +// | expression ';' +// ; + +// selection_statement +// : 'if' '(' expression ')' statement (options {k=1; backtrack=false;}:'else' statement)? +// | 'switch' '(' expression ')' statement +// ; + +// iteration_statement +// : 'while' '(' expression ')' statement +// | 'do' statement 'while' '(' expression ')' ';' +// | 'for' '(' expression_statement expression_statement expression? ')' statement +// ; + +// jump_statement +// : 'goto' IDENTIFIER ';' +// | 'continue' ';' +// | 'break' ';' +// | 'return' ';' +// | 'return' expression ';' +// ; + +IDENTIFIER + : LETTER (LETTER|'0'..'9')* + ; + +fragment +LETTER + : '$' + | 'A'..'Z' + | 'a'..'z' + | '_' + ; + +CHARACTER_LITERAL + : '\'' ( EscapeSequence | ~('\''|'\\') ) '\'' + ; + +STRING_LITERAL + : '"' ( EscapeSequence | ~('\\'|'"') )* '"' + ; + +HEX_LITERAL : '0' ('x'|'X') HexDigit+ IntegerTypeSuffix? ; + +DECIMAL_LITERAL : ('0' | '1'..'9' '0'..'9'*) IntegerTypeSuffix? ; + +OCTAL_LITERAL : '0' ('0'..'7')+ IntegerTypeSuffix? ; + +fragment +HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ; + +fragment +IntegerTypeSuffix + : ('u'|'U')? ('l'|'L') + | ('u'|'U') ('l'|'L')? + ; + +FLOATING_POINT_LITERAL + : ('0'..'9')+ '.' ('0'..'9')* Exponent? FloatTypeSuffix? + | '.' ('0'..'9')+ Exponent? FloatTypeSuffix? + | ('0'..'9')+ Exponent FloatTypeSuffix? + | ('0'..'9')+ Exponent? FloatTypeSuffix + ; + +fragment +Exponent : ('e'|'E') ('+'|'-')? ('0'..'9')+ ; + +fragment +FloatTypeSuffix : ('f'|'F'|'d'|'D') ; + +fragment +EscapeSequence + : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\') + | OctalEscape + ; + +fragment +OctalEscape + : '\\' ('0'..'3') ('0'..'7') ('0'..'7') + | '\\' ('0'..'7') ('0'..'7') + | '\\' ('0'..'7') + ; + +fragment +UnicodeEscape + : '\\' 'u' HexDigit HexDigit HexDigit HexDigit + ; + +WS : (' '|'\r'|'\t'|'\u000C'|'\n') {$channel=HIDDEN;} + ; + +COMMENT + : '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;} + ; + +LINE_COMMENT + : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;} + ; + +// ignore #line info for now +LINE_COMMAND + : '#' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;} + ; + diff --git a/antlr-3.1.3/runtime/Python/tests/t033backtracking.py b/antlr-3.1.3/runtime/Python/tests/t033backtracking.py new file mode 100644 index 0000000..841c032 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t033backtracking.py @@ -0,0 +1,33 @@ +import antlr3 +import testbase +import unittest + + +class t033backtracking(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def parserClass(self, base): + class TParser(base): + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TParser + + + def testValid1(self): + cStream = antlr3.StringStream('int a;') + + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + events = parser.translation_unit() + + +if __name__ == '__main__': + unittest.main() + + + diff --git a/antlr-3.1.3/runtime/Python/tests/t034tokenLabelPropertyRef.g b/antlr-3.1.3/runtime/Python/tests/t034tokenLabelPropertyRef.g new file mode 100644 index 0000000..7311235 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t034tokenLabelPropertyRef.g @@ -0,0 +1,30 @@ +grammar t034tokenLabelPropertyRef; +options { + language = Python; +} + +a: t=A + { + print $t.text + print $t.type + print $t.line + print $t.pos + print $t.channel + print $t.index + #print $t.tree + } + ; + +A: 'a'..'z'; + +WS : + ( ' ' + | '\t' + | ( '\n' + | '\r\n' + | '\r' + ) + )+ + { $channel = HIDDEN } + ; + diff --git a/antlr-3.1.3/runtime/Python/tests/t034tokenLabelPropertyRef.py b/antlr-3.1.3/runtime/Python/tests/t034tokenLabelPropertyRef.py new file mode 100644 index 0000000..b94de13 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t034tokenLabelPropertyRef.py @@ -0,0 +1,40 @@ +import antlr3 +import testbase +import unittest + + +class t034tokenLabelPropertyRef(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TLexer + + + def parserClass(self, base): + class TParser(base): + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TParser + + + def testValid1(self): + cStream = antlr3.StringStream(' a') + + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + events = parser.a() + + +if __name__ == '__main__': + unittest.main() + diff --git a/antlr-3.1.3/runtime/Python/tests/t035ruleLabelPropertyRef.g b/antlr-3.1.3/runtime/Python/tests/t035ruleLabelPropertyRef.g new file mode 100644 index 0000000..710a91c --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t035ruleLabelPropertyRef.g @@ -0,0 +1,16 @@ +grammar t035ruleLabelPropertyRef; +options { + language = Python; +} + +a returns [bla]: t=b + { + $bla = $t.start, $t.stop, $t.text + } + ; + +b: A+; + +A: 'a'..'z'; + +WS: ' '+ { $channel = HIDDEN }; diff --git a/antlr-3.1.3/runtime/Python/tests/t035ruleLabelPropertyRef.py b/antlr-3.1.3/runtime/Python/tests/t035ruleLabelPropertyRef.py new file mode 100644 index 0000000..c42dbaa --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t035ruleLabelPropertyRef.py @@ -0,0 +1,47 @@ +import antlr3 +import testbase +import unittest + + +class t035ruleLabelPropertyRef(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TLexer + + + def parserClass(self, base): + class TParser(base): + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TParser + + + def testValid1(self): + cStream = antlr3.StringStream(' a a a a ') + + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + start, stop, text = parser.a() + + # first token of rule b is the 2nd token (counting hidden tokens) + assert start.index == 1, start + + # first token of rule b is the 7th token (counting hidden tokens) + assert stop.index == 7, stop + + assert text == "a a a a", text + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t036multipleReturnValues.g b/antlr-3.1.3/runtime/Python/tests/t036multipleReturnValues.g new file mode 100644 index 0000000..04ce14c --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t036multipleReturnValues.g @@ -0,0 +1,25 @@ +grammar t036multipleReturnValues; +options { + language = Python; +} + +a returns [foo, bar]: A + { + $foo = "foo"; + $bar = "bar"; + } + ; + +A: 'a'..'z'; + +WS : + ( ' ' + | '\t' + | ( '\n' + | '\r\n' + | '\r' + ) + )+ + { $channel = HIDDEN } + ; + diff --git a/antlr-3.1.3/runtime/Python/tests/t036multipleReturnValues.py b/antlr-3.1.3/runtime/Python/tests/t036multipleReturnValues.py new file mode 100644 index 0000000..97e04e3 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t036multipleReturnValues.py @@ -0,0 +1,43 @@ +import antlr3 +import testbase +import unittest + + +class t036multipleReturnValues(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TLexer + + + def parserClass(self, base): + class TParser(base): + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TParser + + + def testValid1(self): + cStream = antlr3.StringStream(' a') + + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + ret = parser.a() + assert ret.foo == 'foo', ret.foo + assert ret.bar == 'bar', ret.bar + + +if __name__ == '__main__': + unittest.main() + + diff --git a/antlr-3.1.3/runtime/Python/tests/t037rulePropertyRef.g b/antlr-3.1.3/runtime/Python/tests/t037rulePropertyRef.g new file mode 100644 index 0000000..d2ab177 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t037rulePropertyRef.g @@ -0,0 +1,15 @@ +grammar t037rulePropertyRef; +options { + language = Python; +} + +a returns [bla] +@after { + $bla = $start, $stop, $text +} + : A+ + ; + +A: 'a'..'z'; + +WS: ' '+ { $channel = HIDDEN }; diff --git a/antlr-3.1.3/runtime/Python/tests/t037rulePropertyRef.py b/antlr-3.1.3/runtime/Python/tests/t037rulePropertyRef.py new file mode 100644 index 0000000..998a2ba --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t037rulePropertyRef.py @@ -0,0 +1,47 @@ +import antlr3 +import testbase +import unittest + + +class t037rulePropertyRef(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TLexer + + + def parserClass(self, base): + class TParser(base): + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TParser + + + def testValid1(self): + cStream = antlr3.StringStream(' a a a a ') + + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + start, stop, text = parser.a().bla + + # first token of rule b is the 2nd token (counting hidden tokens) + assert start.index == 1, start + + # first token of rule b is the 7th token (counting hidden tokens) + assert stop.index == 7, stop + + assert text == "a a a a", text + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t038lexerRuleLabel.g b/antlr-3.1.3/runtime/Python/tests/t038lexerRuleLabel.g new file mode 100644 index 0000000..fcc1a61 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t038lexerRuleLabel.g @@ -0,0 +1,28 @@ +lexer grammar t038lexerRuleLabel; +options { + language = Python; +} + +A: 'a'..'z' WS '0'..'9' + { + print $WS + print $WS.type + print $WS.line + print $WS.pos + print $WS.channel + print $WS.index + print $WS.text + } + ; + +fragment WS : + ( ' ' + | '\t' + | ( '\n' + | '\r\n' + | '\r' + ) + )+ + { $channel = HIDDEN } + ; + diff --git a/antlr-3.1.3/runtime/Python/tests/t038lexerRuleLabel.py b/antlr-3.1.3/runtime/Python/tests/t038lexerRuleLabel.py new file mode 100644 index 0000000..2af65f9 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t038lexerRuleLabel.py @@ -0,0 +1,33 @@ +import antlr3 +import testbase +import unittest + + +class t038lexerRuleLabel(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TLexer + + + def testValid1(self): + cStream = antlr3.StringStream('a 2') + + lexer = self.getLexer(cStream) + + while True: + t = lexer.nextToken() + if t.type == antlr3.EOF: + break + print t + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t039labels.g b/antlr-3.1.3/runtime/Python/tests/t039labels.g new file mode 100644 index 0000000..d9dc248 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t039labels.g @@ -0,0 +1,18 @@ +grammar t039labels; +options { + language = Python; +} + +a returns [l] + : ids+=A ( ',' ids+=(A|B) )* C D w=. ids+=. F EOF + { l = ($ids, $w) } + ; + +A: 'a'..'z'; +B: '0'..'9'; +C: a='A' { print $a }; +D: a='FOOBAR' { print $a }; +E: 'GNU' a=. { print $a }; +F: 'BLARZ' a=EOF { print $a }; + +WS: ' '+ { $channel = HIDDEN }; diff --git a/antlr-3.1.3/runtime/Python/tests/t039labels.py b/antlr-3.1.3/runtime/Python/tests/t039labels.py new file mode 100644 index 0000000..8159d6b --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t039labels.py @@ -0,0 +1,53 @@ +import antlr3 +import testbase +import unittest + + +class t039labels(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TLexer + + + def parserClass(self, base): + class TParser(base): + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TParser + + + def testValid1(self): + cStream = antlr3.StringStream( + 'a, b, c, 1, 2 A FOOBAR GNU1 A BLARZ' + ) + + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + ids, w = parser.a() + + assert len(ids) == 6, ids + assert ids[0].text == 'a', ids[0] + assert ids[1].text == 'b', ids[1] + assert ids[2].text == 'c', ids[2] + assert ids[3].text == '1', ids[3] + assert ids[4].text == '2', ids[4] + assert ids[5].text == 'A', ids[5] + + assert w.text == 'GNU1', w + + +if __name__ == '__main__': + unittest.main() + + diff --git a/antlr-3.1.3/runtime/Python/tests/t040bug80.g b/antlr-3.1.3/runtime/Python/tests/t040bug80.g new file mode 100644 index 0000000..bdf610b --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t040bug80.g @@ -0,0 +1,13 @@ +lexer grammar t040bug80; +options { + language = Python; +} + +ID_LIKE + : 'defined' + | {False}? Identifier + | Identifier + ; + +fragment +Identifier: 'a'..'z'+ ; // with just 'a', output compiles diff --git a/antlr-3.1.3/runtime/Python/tests/t040bug80.py b/antlr-3.1.3/runtime/Python/tests/t040bug80.py new file mode 100644 index 0000000..c6637e5 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t040bug80.py @@ -0,0 +1,33 @@ +import antlr3 +import testbase +import unittest + + +class t040bug80(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TLexer + + + def testValid1(self): + cStream = antlr3.StringStream('defined') + lexer = self.getLexer(cStream) + while True: + t = lexer.nextToken() + if t.type == antlr3.EOF: + break + print t + + +if __name__ == '__main__': + unittest.main() + + diff --git a/antlr-3.1.3/runtime/Python/tests/t041parameters.g b/antlr-3.1.3/runtime/Python/tests/t041parameters.g new file mode 100644 index 0000000..b9a8892 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t041parameters.g @@ -0,0 +1,16 @@ +grammar t041parameters; +options { + language = Python; +} + +a[arg1, arg2] returns [l] + : A+ EOF + { + l = ($arg1, $arg2) + $arg1 = "gnarz" + } + ; + +A: 'a'..'z'; + +WS: ' '+ { $channel = HIDDEN }; diff --git a/antlr-3.1.3/runtime/Python/tests/t041parameters.py b/antlr-3.1.3/runtime/Python/tests/t041parameters.py new file mode 100644 index 0000000..1fe4a4f --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t041parameters.py @@ -0,0 +1,45 @@ +import antlr3 +import testbase +import unittest + + +class t041parameters(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TLexer + + + def parserClass(self, base): + class TParser(base): + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TParser + + + def testValid1(self): + cStream = antlr3.StringStream('a a a') + + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + r = parser.a('foo', 'bar') + + assert r == ('foo', 'bar'), r + + +if __name__ == '__main__': + unittest.main() + + + + diff --git a/antlr-3.1.3/runtime/Python/tests/t042ast.g b/antlr-3.1.3/runtime/Python/tests/t042ast.g new file mode 100644 index 0000000..f676835 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t042ast.g @@ -0,0 +1,353 @@ +grammar t042ast; +options { + language = Python; + output = AST; +} + +tokens { + VARDEF; + FLOAT; + EXPR; + BLOCK; + VARIABLE; + FIELD; + CALL; + INDEX; + FIELDACCESS; +} + +@init { +self.flag = False +} + +r1 + : INT ('+'^ INT)* + ; + +r2 + : 'assert'^ x=expression (':'! y=expression)? ';'! + ; + +r3 + : 'if'^ expression s1=statement ('else'! s2=statement)? + ; + +r4 + : 'while'^ expression statement + ; + +r5 + : 'return'^ expression? ';'! + ; + +r6 + : (INT|ID)+ + ; + +r7 + : INT -> + ; + +r8 + : 'var' ID ':' type -> ^('var' type ID) + ; + +r9 + : type ID ';' -> ^(VARDEF type ID) + ; + +r10 + : INT -> {CommonTree(CommonToken(type=FLOAT, text=$INT.text + ".0"))} + ; + +r11 + : expression -> ^(EXPR expression) + | -> EXPR + ; + +r12 + : ID (',' ID)* -> ID+ + ; + +r13 + : type ID (',' ID)* ';' -> ^(type ID+) + ; + +r14 + : expression? statement* type+ + -> ^(EXPR expression? statement* type+) + ; + +r15 + : INT -> INT INT + ; + +r16 + : 'int' ID (',' ID)* -> ^('int' ID)+ + ; + +r17 + : 'for' '(' start=statement ';' expression ';' next=statement ')' statement + -> ^('for' $start expression $next statement) + ; + +r18 + : t='for' -> ^(BLOCK) + ; + +r19 + : t='for' -> ^(BLOCK[$t]) + ; + +r20 + : t='for' -> ^(BLOCK[$t,"FOR"]) + ; + +r21 + : t='for' -> BLOCK + ; + +r22 + : t='for' -> BLOCK[$t] + ; + +r23 + : t='for' -> BLOCK[$t,"FOR"] + ; + +r24 + : r=statement expression -> ^($r expression) + ; + +r25 + : r+=statement (',' r+=statement)+ expression -> ^($r expression) + ; + +r26 + : r+=statement (',' r+=statement)+ -> ^(BLOCK $r+) + ; + +r27 + : r=statement expression -> ^($r ^($r expression)) + ; + +r28 + : ('foo28a'|'foo28b') -> + ; + +r29 + : (r+=statement)* -> ^(BLOCK $r+) + ; + +r30 + : statement* -> ^(BLOCK statement?) + ; + +r31 + : modifier type ID ('=' expression)? ';' + -> {self.flag == 0}? ^(VARDEF ID modifier* type expression?) + -> {self.flag == 1}? ^(VARIABLE ID modifier* type expression?) + -> ^(FIELD ID modifier* type expression?) + ; + +r32[which] + : ID INT -> {which==1}? ID + -> {which==2}? INT + -> // yield nothing as else-clause + ; + +r33 + : modifiers! statement + ; + +r34 + : modifiers! r34a[$modifiers.tree] + //| modifiers! r33b[$modifiers.tree] + ; + +r34a[mod] + : 'class' ID ('extends' sup=type)? + ( 'implements' i+=type (',' i+=type)*)? + '{' statement* '}' + -> ^('class' ID {$mod} ^('extends' $sup)? ^('implements' $i+)? statement* ) + ; + +r35 + : '{' 'extends' (sup=type)? '}' + -> ^('extends' $sup)? + ; + +r36 + : 'if' '(' expression ')' s1=statement + ( 'else' s2=statement -> ^('if' ^(EXPR expression) $s1 $s2) + | -> ^('if' ^(EXPR expression) $s1) + ) + ; + +r37 + : (INT -> INT) ('+' i=INT -> ^('+' $r37 $i) )* + ; + +r38 + : INT ('+'^ INT)* + ; + +r39 + : (primary->primary) // set return tree to just primary + ( '(' arg=expression ')' + -> ^(CALL $r39 $arg) + | '[' ie=expression ']' + -> ^(INDEX $r39 $ie) + | '.' p=primary + -> ^(FIELDACCESS $r39 $p) + )* + ; + +r40 + : (INT -> INT) ( ('+' i+=INT)* -> ^('+' $r40 $i*) ) ';' + ; + +r41 + : (INT -> INT) ( ('+' i=INT) -> ^($i $r41) )* ';' + ; + +r42 + : ids+=ID (','! ids+=ID)* + ; + +r43 returns [res] + : ids+=ID! (','! ids+=ID!)* {$res = [id.text for id in $ids]} + ; + +r44 + : ids+=ID^ (','! ids+=ID^)* + ; + +r45 + : primary^ + ; + +r46 returns [res] + : ids+=primary! (','! ids+=primary!)* {$res = [id.text for id in $ids]} + ; + +r47 + : ids+=primary (','! ids+=primary)* + ; + +r48 + : ids+=. (','! ids+=.)* + ; + +r49 + : .^ ID + ; + +r50 + : ID + -> ^({CommonTree(CommonToken(type=FLOAT, text="1.0"))} ID) + ; + +/** templates tested: + tokenLabelPropertyRef_tree +*/ +r51 returns [res] + : ID t=ID ID + { $res = $t.tree } + ; + +/** templates tested: + rulePropertyRef_tree +*/ +r52 returns [res] +@after { + $res = $tree +} + : ID + ; + +/** templates tested: + ruleLabelPropertyRef_tree +*/ +r53 returns [res] + : t=primary + { $res = $t.tree } + ; + +/** templates tested: + ruleSetPropertyRef_tree +*/ +r54 returns [res] +@after { + $tree = $t.tree; +} + : ID t=expression ID + ; + +/** backtracking */ +r55 +options { backtrack=true; k=1; } + : (modifier+ INT)=> modifier+ expression + | modifier+ statement + ; + + +/** templates tested: + rewriteTokenRef with len(args)>0 +*/ +r56 + : t=ID* -> ID[$t,'foo'] + ; + +/** templates tested: + rewriteTokenRefRoot with len(args)>0 +*/ +r57 + : t=ID* -> ^(ID[$t,'foo']) + ; + +/** templates tested: + ??? +*/ +r58 + : ({CommonTree(CommonToken(type=FLOAT, text="2.0"))})^ + ; + +/** templates tested: + rewriteTokenListLabelRefRoot +*/ +r59 + : (t+=ID)+ statement -> ^($t statement)+ + ; + +primary + : ID + ; + +expression + : r1 + ; + +statement + : 'fooze' + | 'fooze2' + ; + +modifiers + : modifier+ + ; + +modifier + : 'public' + | 'private' + ; + +type + : 'int' + | 'bool' + ; + +ID : 'a'..'z' + ; +INT : '0'..'9' +; +WS: (' ' | '\n' | '\t')+ {$channel = HIDDEN;}; + diff --git a/antlr-3.1.3/runtime/Python/tests/t042ast.py b/antlr-3.1.3/runtime/Python/tests/t042ast.py new file mode 100644 index 0000000..e29c077 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t042ast.py @@ -0,0 +1,688 @@ +import unittest +import textwrap +import antlr3 +import testbase + +class t042ast(testbase.ANTLRTest): +## def lexerClass(self, base): +## class TLexer(base): +## def reportError(self, re): +## # no error recovery yet, just crash! +## raise re + +## return TLexer + + + def parserClass(self, base): + class TParser(base): + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TParser + + + def parse(self, text, method, rArgs=[], **kwargs): + self.compileGrammar() #options='-trace') + + cStream = antlr3.StringStream(text) + self.lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(self.lexer) + self.parser = self.getParser(tStream) + + for attr, val in kwargs.items(): + setattr(self.parser, attr, val) + + return getattr(self.parser, method)(*rArgs) + + + def testR1(self): + r = self.parse("1 + 2", 'r1') + self.failUnlessEqual( + r.tree.toStringTree(), + '(+ 1 2)' + ) + + + def testR2a(self): + r = self.parse("assert 2+3;", 'r2') + self.failUnlessEqual( + r.tree.toStringTree(), + '(assert (+ 2 3))' + ) + + + def testR2b(self): + r = self.parse("assert 2+3 : 5;", 'r2') + self.failUnlessEqual( + r.tree.toStringTree(), + '(assert (+ 2 3) 5)' + ) + + + def testR3a(self): + r = self.parse("if 1 fooze", 'r3') + self.failUnlessEqual( + r.tree.toStringTree(), + '(if 1 fooze)' + ) + + + def testR3b(self): + r = self.parse("if 1 fooze else fooze", 'r3') + self.failUnlessEqual( + r.tree.toStringTree(), + '(if 1 fooze fooze)' + ) + + + def testR4a(self): + r = self.parse("while 2 fooze", 'r4') + self.failUnlessEqual( + r.tree.toStringTree(), + '(while 2 fooze)' + ) + + + def testR5a(self): + r = self.parse("return;", 'r5') + self.failUnlessEqual( + r.tree.toStringTree(), + 'return' + ) + + + def testR5b(self): + r = self.parse("return 2+3;", 'r5') + self.failUnlessEqual( + r.tree.toStringTree(), + '(return (+ 2 3))' + ) + + + def testR6a(self): + r = self.parse("3", 'r6') + self.failUnlessEqual( + r.tree.toStringTree(), + '3' + ) + + + def testR6b(self): + r = self.parse("3 a", 'r6') + self.failUnlessEqual( + r.tree.toStringTree(), + '3 a' + ) + + + def testR7(self): + r = self.parse("3", 'r7') + self.failUnless( + r.tree is None + ) + + + def testR8(self): + r = self.parse("var foo:bool", 'r8') + self.failUnlessEqual( + r.tree.toStringTree(), + '(var bool foo)' + ) + + + def testR9(self): + r = self.parse("int foo;", 'r9') + self.failUnlessEqual( + r.tree.toStringTree(), + '(VARDEF int foo)' + ) + + + def testR10(self): + r = self.parse("10", 'r10') + self.failUnlessEqual( + r.tree.toStringTree(), + '10.0' + ) + + + def testR11a(self): + r = self.parse("1+2", 'r11') + self.failUnlessEqual( + r.tree.toStringTree(), + '(EXPR (+ 1 2))' + ) + + + def testR11b(self): + r = self.parse("", 'r11') + self.failUnlessEqual( + r.tree.toStringTree(), + 'EXPR' + ) + + + def testR12a(self): + r = self.parse("foo", 'r12') + self.failUnlessEqual( + r.tree.toStringTree(), + 'foo' + ) + + + def testR12b(self): + r = self.parse("foo, bar, gnurz", 'r12') + self.failUnlessEqual( + r.tree.toStringTree(), + 'foo bar gnurz' + ) + + + def testR13a(self): + r = self.parse("int foo;", 'r13') + self.failUnlessEqual( + r.tree.toStringTree(), + '(int foo)' + ) + + + def testR13b(self): + r = self.parse("bool foo, bar, gnurz;", 'r13') + self.failUnlessEqual( + r.tree.toStringTree(), + '(bool foo bar gnurz)' + ) + + + def testR14a(self): + r = self.parse("1+2 int", 'r14') + self.failUnlessEqual( + r.tree.toStringTree(), + '(EXPR (+ 1 2) int)' + ) + + + def testR14b(self): + r = self.parse("1+2 int bool", 'r14') + self.failUnlessEqual( + r.tree.toStringTree(), + '(EXPR (+ 1 2) int bool)' + ) + + + def testR14c(self): + r = self.parse("int bool", 'r14') + self.failUnlessEqual( + r.tree.toStringTree(), + '(EXPR int bool)' + ) + + + def testR14d(self): + r = self.parse("fooze fooze int bool", 'r14') + self.failUnlessEqual( + r.tree.toStringTree(), + '(EXPR fooze fooze int bool)' + ) + + + def testR14e(self): + r = self.parse("7+9 fooze fooze int bool", 'r14') + self.failUnlessEqual( + r.tree.toStringTree(), + '(EXPR (+ 7 9) fooze fooze int bool)' + ) + + + def testR15(self): + r = self.parse("7", 'r15') + self.failUnlessEqual( + r.tree.toStringTree(), + '7 7' + ) + + + def testR16a(self): + r = self.parse("int foo", 'r16') + self.failUnlessEqual( + r.tree.toStringTree(), + '(int foo)' + ) + + + def testR16b(self): + r = self.parse("int foo, bar, gnurz", 'r16') + + self.failUnlessEqual( + r.tree.toStringTree(), + '(int foo) (int bar) (int gnurz)' + ) + + + def testR17a(self): + r = self.parse("for ( fooze ; 1 + 2 ; fooze ) fooze", 'r17') + self.failUnlessEqual( + r.tree.toStringTree(), + '(for fooze (+ 1 2) fooze fooze)' + ) + + + def testR18a(self): + r = self.parse("for", 'r18') + self.failUnlessEqual( + r.tree.toStringTree(), + 'BLOCK' + ) + + + def testR19a(self): + r = self.parse("for", 'r19') + self.failUnlessEqual( + r.tree.toStringTree(), + 'for' + ) + + + def testR20a(self): + r = self.parse("for", 'r20') + self.failUnlessEqual( + r.tree.toStringTree(), + 'FOR' + ) + + + def testR21a(self): + r = self.parse("for", 'r21') + self.failUnlessEqual( + r.tree.toStringTree(), + 'BLOCK' + ) + + + def testR22a(self): + r = self.parse("for", 'r22') + self.failUnlessEqual( + r.tree.toStringTree(), + 'for' + ) + + + def testR23a(self): + r = self.parse("for", 'r23') + self.failUnlessEqual( + r.tree.toStringTree(), + 'FOR' + ) + + + def testR24a(self): + r = self.parse("fooze 1 + 2", 'r24') + self.failUnlessEqual( + r.tree.toStringTree(), + '(fooze (+ 1 2))' + ) + + + def testR25a(self): + r = self.parse("fooze, fooze2 1 + 2", 'r25') + self.failUnlessEqual( + r.tree.toStringTree(), + '(fooze (+ 1 2))' + ) + + + def testR26a(self): + r = self.parse("fooze, fooze2", 'r26') + self.failUnlessEqual( + r.tree.toStringTree(), + '(BLOCK fooze fooze2)' + ) + + + def testR27a(self): + r = self.parse("fooze 1 + 2", 'r27') + self.failUnlessEqual( + r.tree.toStringTree(), + '(fooze (fooze (+ 1 2)))' + ) + + + def testR28(self): + r = self.parse("foo28a", 'r28') + self.failUnless( + r.tree is None + ) + + + def testR29(self): + try: + r = self.parse("", 'r29') + self.fail() + except RuntimeError: + pass + + +# FIXME: broken upstream? +## def testR30(self): +## try: +## r = self.parse("fooze fooze", 'r30') +## self.fail(r.tree.toStringTree()) +## except RuntimeError: +## pass + + + def testR31a(self): + r = self.parse("public int gnurz = 1 + 2;", 'r31', flag=0) + self.failUnlessEqual( + r.tree.toStringTree(), + '(VARDEF gnurz public int (+ 1 2))' + ) + + + def testR31b(self): + r = self.parse("public int gnurz = 1 + 2;", 'r31', flag=1) + self.failUnlessEqual( + r.tree.toStringTree(), + '(VARIABLE gnurz public int (+ 1 2))' + ) + + + def testR31c(self): + r = self.parse("public int gnurz = 1 + 2;", 'r31', flag=2) + self.failUnlessEqual( + r.tree.toStringTree(), + '(FIELD gnurz public int (+ 1 2))' + ) + + + def testR32a(self): + r = self.parse("gnurz 32", 'r32', [1], flag=2) + self.failUnlessEqual( + r.tree.toStringTree(), + 'gnurz' + ) + + + def testR32b(self): + r = self.parse("gnurz 32", 'r32', [2], flag=2) + self.failUnlessEqual( + r.tree.toStringTree(), + '32' + ) + + + def testR32c(self): + r = self.parse("gnurz 32", 'r32', [3], flag=2) + self.failUnless( + r.tree is None + ) + + + def testR33a(self): + r = self.parse("public private fooze", 'r33') + self.failUnlessEqual( + r.tree.toStringTree(), + 'fooze' + ) + + + def testR34a(self): + r = self.parse("public class gnurz { fooze fooze2 }", 'r34') + self.failUnlessEqual( + r.tree.toStringTree(), + '(class gnurz public fooze fooze2)' + ) + + + def testR34b(self): + r = self.parse("public class gnurz extends bool implements int, bool { fooze fooze2 }", 'r34') + self.failUnlessEqual( + r.tree.toStringTree(), + '(class gnurz public (extends bool) (implements int bool) fooze fooze2)' + ) + + + def testR35(self): + try: + r = self.parse("{ extends }", 'r35') + self.fail() + + except RuntimeError: + pass + + + def testR36a(self): + r = self.parse("if ( 1 + 2 ) fooze", 'r36') + self.failUnlessEqual( + r.tree.toStringTree(), + '(if (EXPR (+ 1 2)) fooze)' + ) + + + def testR36b(self): + r = self.parse("if ( 1 + 2 ) fooze else fooze2", 'r36') + self.failUnlessEqual( + r.tree.toStringTree(), + '(if (EXPR (+ 1 2)) fooze fooze2)' + ) + + + def testR37(self): + r = self.parse("1 + 2 + 3", 'r37') + self.failUnlessEqual( + r.tree.toStringTree(), + '(+ (+ 1 2) 3)' + ) + + + def testR38(self): + r = self.parse("1 + 2 + 3", 'r38') + self.failUnlessEqual( + r.tree.toStringTree(), + '(+ (+ 1 2) 3)' + ) + + + def testR39a(self): + r = self.parse("gnurz[1]", 'r39') + self.failUnlessEqual( + r.tree.toStringTree(), + '(INDEX gnurz 1)' + ) + + + def testR39b(self): + r = self.parse("gnurz(2)", 'r39') + self.failUnlessEqual( + r.tree.toStringTree(), + '(CALL gnurz 2)' + ) + + + def testR39c(self): + r = self.parse("gnurz.gnarz", 'r39') + self.failUnlessEqual( + r.tree.toStringTree(), + '(FIELDACCESS gnurz gnarz)' + ) + + + def testR39d(self): + r = self.parse("gnurz.gnarz.gnorz", 'r39') + self.failUnlessEqual( + r.tree.toStringTree(), + '(FIELDACCESS (FIELDACCESS gnurz gnarz) gnorz)' + ) + + + def testR40(self): + r = self.parse("1 + 2 + 3;", 'r40') + self.failUnlessEqual( + r.tree.toStringTree(), + '(+ 1 2 3)' + ) + + + def testR41(self): + r = self.parse("1 + 2 + 3;", 'r41') + self.failUnlessEqual( + r.tree.toStringTree(), + '(3 (2 1))' + ) + + + def testR42(self): + r = self.parse("gnurz, gnarz, gnorz", 'r42') + self.failUnlessEqual( + r.tree.toStringTree(), + 'gnurz gnarz gnorz' + ) + + + def testR43(self): + r = self.parse("gnurz, gnarz, gnorz", 'r43') + self.failUnless( + r.tree is None + ) + self.failUnlessEqual( + r.res, + ['gnurz', 'gnarz', 'gnorz'] + ) + + + def testR44(self): + r = self.parse("gnurz, gnarz, gnorz", 'r44') + self.failUnlessEqual( + r.tree.toStringTree(), + '(gnorz (gnarz gnurz))' + ) + + + def testR45(self): + r = self.parse("gnurz", 'r45') + self.failUnlessEqual( + r.tree.toStringTree(), + 'gnurz' + ) + + + def testR46(self): + r = self.parse("gnurz, gnarz, gnorz", 'r46') + self.failUnless( + r.tree is None + ) + self.failUnlessEqual( + r.res, + ['gnurz', 'gnarz', 'gnorz'] + ) + + + def testR47(self): + r = self.parse("gnurz, gnarz, gnorz", 'r47') + self.failUnlessEqual( + r.tree.toStringTree(), + 'gnurz gnarz gnorz' + ) + + + def testR48(self): + r = self.parse("gnurz, gnarz, gnorz", 'r48') + self.failUnlessEqual( + r.tree.toStringTree(), + 'gnurz gnarz gnorz' + ) + + + def testR49(self): + r = self.parse("gnurz gnorz", 'r49') + self.failUnlessEqual( + r.tree.toStringTree(), + '(gnurz gnorz)' + ) + + + def testR50(self): + r = self.parse("gnurz", 'r50') + self.failUnlessEqual( + r.tree.toStringTree(), + '(1.0 gnurz)' + ) + + + def testR51(self): + r = self.parse("gnurza gnurzb gnurzc", 'r51') + self.failUnlessEqual( + r.res.toStringTree(), + 'gnurzb' + ) + + + def testR52(self): + r = self.parse("gnurz", 'r52') + self.failUnlessEqual( + r.res.toStringTree(), + 'gnurz' + ) + + + def testR53(self): + r = self.parse("gnurz", 'r53') + self.failUnlessEqual( + r.res.toStringTree(), + 'gnurz' + ) + + + def testR54(self): + r = self.parse("gnurza 1 + 2 gnurzb", 'r54') + self.failUnlessEqual( + r.tree.toStringTree(), + '(+ 1 2)' + ) + + + def testR55a(self): + r = self.parse("public private 1 + 2", 'r55') + self.failUnlessEqual( + r.tree.toStringTree(), + 'public private (+ 1 2)' + ) + + + def testR55b(self): + r = self.parse("public fooze", 'r55') + self.failUnlessEqual( + r.tree.toStringTree(), + 'public fooze' + ) + + + def testR56(self): + r = self.parse("a b c d", 'r56') + self.failUnlessEqual( + r.tree.toStringTree(), + 'foo' + ) + + + def testR57(self): + r = self.parse("a b c d", 'r57') + self.failUnlessEqual( + r.tree.toStringTree(), + 'foo' + ) + + + def testR59(self): + r = self.parse("a b c fooze", 'r59') + self.failUnlessEqual( + r.tree.toStringTree(), + '(a fooze) (b fooze) (c fooze)' + ) + + + +if __name__ == '__main__': + unittest.main() + diff --git a/antlr-3.1.3/runtime/Python/tests/t043synpred.g b/antlr-3.1.3/runtime/Python/tests/t043synpred.g new file mode 100644 index 0000000..7294f23 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t043synpred.g @@ -0,0 +1,14 @@ +grammar t043synpred; +options { + language = Python; +} + +a: ((s+ P)=> s+ b)? E; +b: P 'foo'; + +s: S; + + +S: ' '; +P: '+'; +E: '>'; diff --git a/antlr-3.1.3/runtime/Python/tests/t043synpred.py b/antlr-3.1.3/runtime/Python/tests/t043synpred.py new file mode 100644 index 0000000..9246de2 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t043synpred.py @@ -0,0 +1,39 @@ +import antlr3 +import testbase +import unittest + + +class t043synpred(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def lexerClass(self, base): + class TLexer(base): + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TLexer + + + def parserClass(self, base): + class TParser(base): + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TParser + + + def testValid1(self): + cStream = antlr3.StringStream(' +foo>') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + events = parser.a() + + +if __name__ == '__main__': + unittest.main() + diff --git a/antlr-3.1.3/runtime/Python/tests/t044trace.g b/antlr-3.1.3/runtime/Python/tests/t044trace.g new file mode 100644 index 0000000..0b7aa71 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t044trace.g @@ -0,0 +1,20 @@ +grammar t044trace; +options { + language = Python; +} + +@init { + self._stack = None +} + +a: '<' ((INT '+')=>b|c) '>'; +b: c ('+' c)*; +c: INT + { + if self._stack is None: + self._stack = self.getRuleInvocationStack() + } + ; + +INT: ('0'..'9')+; +WS: (' ' | '\n' | '\t')+ {$channel = HIDDEN;}; diff --git a/antlr-3.1.3/runtime/Python/tests/t044trace.py b/antlr-3.1.3/runtime/Python/tests/t044trace.py new file mode 100644 index 0000000..5b1ea79 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t044trace.py @@ -0,0 +1,96 @@ +import antlr3 +import testbase +import unittest + + +class T(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar(options='-trace') + + + def lexerClass(self, base): + class TLexer(base): + def __init__(self, *args, **kwargs): + base.__init__(self, *args, **kwargs) + + self.traces = [] + + + def traceIn(self, ruleName, ruleIndex): + self.traces.append('>'+ruleName) + + + def traceOut(self, ruleName, ruleIndex): + self.traces.append('<'+ruleName) + + + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TLexer + + + def parserClass(self, base): + class TParser(base): + def __init__(self, *args, **kwargs): + base.__init__(self, *args, **kwargs) + + self.traces = [] + + + def traceIn(self, ruleName, ruleIndex): + self.traces.append('>'+ruleName) + + + def traceOut(self, ruleName, ruleIndex): + self.traces.append('<'+ruleName) + + + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + def getRuleInvocationStack(self): + return self._getRuleInvocationStack(base.__module__) + + return TParser + + + def testTrace(self): + cStream = antlr3.StringStream('< 1 + 2 + 3 >') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + parser.a() + + self.failUnlessEqual( + lexer.traces, + [ '>T__6', 'WS', 'INT', 'WS', 'T__8', 'WS', 'INT', 'WS', 'T__8', 'WS', 'INT', 'WS', 'T__7', 'a', '>synpred1_t044trace_fragment', 'b', '>c', + 'c', 'c', '') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + parser.a() + + self.failUnlessEqual( + parser._stack, + ['a', 'b', 'c'] + ) + +if __name__ == '__main__': + unittest.main() + diff --git a/antlr-3.1.3/runtime/Python/tests/t045dfabug.g b/antlr-3.1.3/runtime/Python/tests/t045dfabug.g new file mode 100644 index 0000000..4ad895b --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t045dfabug.g @@ -0,0 +1,32 @@ +grammar t045dfabug; +options { + language = Python; + output = AST; +} + + +// this rule used to generate an infinite loop in DFA.predict +r +options { backtrack=true; } + : (modifier+ INT)=> modifier+ expression + | modifier+ statement + ; + +expression + : INT '+' INT + ; + +statement + : 'fooze' + | 'fooze2' + ; + +modifier + : 'public' + | 'private' + ; + +ID : 'a'..'z' + ; +INT : '0'..'9' +; +WS: (' ' | '\n' | '\t')+ {$channel = HIDDEN;}; + diff --git a/antlr-3.1.3/runtime/Python/tests/t045dfabug.py b/antlr-3.1.3/runtime/Python/tests/t045dfabug.py new file mode 100644 index 0000000..76be15e --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t045dfabug.py @@ -0,0 +1,21 @@ +import unittest +import textwrap +import antlr3 +import testbase + +class T(testbase.ANTLRTest): + + def testbug(self): + self.compileGrammar() + + cStream = antlr3.StringStream("public fooze") + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + + parser.r() + + +if __name__ == '__main__': + unittest.main() + diff --git a/antlr-3.1.3/runtime/Python/tests/t046rewrite.g b/antlr-3.1.3/runtime/Python/tests/t046rewrite.g new file mode 100644 index 0000000..e8dc1dc --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t046rewrite.g @@ -0,0 +1,54 @@ +grammar t046rewrite; +options { + language=Python; +} + +program +@init { + start = self.input.LT(1) +} + : method+ + { + self.input.insertBefore(start,"public class Wrapper {\n") + self.input.insertAfter($method.stop, "\n}\n") + } + ; + +method + : m='method' ID '(' ')' body + {self.input.replace($m, "public void");} + ; + +body +scope { + decls +} +@init { + $body::decls = set() +} + : lcurly='{' stat* '}' + { + for it in $body::decls: + self.input.insertAfter($lcurly, "\nint "+it+";") + } + ; + +stat: ID '=' expr ';' {$body::decls.add($ID.text);} + ; + +expr: mul ('+' mul)* + ; + +mul : atom ('*' atom)* + ; + +atom: ID + | INT + ; + +ID : ('a'..'z'|'A'..'Z')+ ; + +INT : ('0'..'9')+ ; + +WS : (' '|'\t'|'\n')+ {$channel=HIDDEN;} + ; diff --git a/antlr-3.1.3/runtime/Python/tests/t046rewrite.py b/antlr-3.1.3/runtime/Python/tests/t046rewrite.py new file mode 100644 index 0000000..a61ede4 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t046rewrite.py @@ -0,0 +1,55 @@ +import unittest +import textwrap +import antlr3 +import testbase + +class T(testbase.ANTLRTest): + def testRewrite(self): + self.compileGrammar() + + input = textwrap.dedent( + '''\ + method foo() { + i = 3; + k = i; + i = k*4; + } + + method bar() { + j = i*2; + } + ''') + + cStream = antlr3.StringStream(input) + lexer = self.getLexer(cStream) + tStream = antlr3.TokenRewriteStream(lexer) + parser = self.getParser(tStream) + parser.program() + + expectedOutput = textwrap.dedent('''\ + public class Wrapper { + public void foo() { + int k; + int i; + i = 3; + k = i; + i = k*4; + } + + public void bar() { + int j; + j = i*2; + } + } + + ''') + + self.failUnlessEqual( + str(tStream), + expectedOutput + ) + + +if __name__ == '__main__': + unittest.main() + diff --git a/antlr-3.1.3/runtime/Python/tests/t047treeparser.g b/antlr-3.1.3/runtime/Python/tests/t047treeparser.g new file mode 100644 index 0000000..7e50ac4 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t047treeparser.g @@ -0,0 +1,113 @@ +grammar t047treeparser; +options { + language=Python; + output=AST; +} + +tokens { + VAR_DEF; + ARG_DEF; + FUNC_HDR; + FUNC_DECL; + FUNC_DEF; + BLOCK; +} + +program + : declaration+ + ; + +declaration + : variable + | functionHeader ';' -> ^(FUNC_DECL functionHeader) + | functionHeader block -> ^(FUNC_DEF functionHeader block) + ; + +variable + : type declarator ';' -> ^(VAR_DEF type declarator) + ; + +declarator + : ID + ; + +functionHeader + : type ID '(' ( formalParameter ( ',' formalParameter )* )? ')' + -> ^(FUNC_HDR type ID formalParameter+) + ; + +formalParameter + : type declarator -> ^(ARG_DEF type declarator) + ; + +type + : 'int' + | 'char' + | 'void' + | ID + ; + +block + : lc='{' + variable* + stat* + '}' + -> ^(BLOCK[$lc,"BLOCK"] variable* stat*) + ; + +stat: forStat + | expr ';'! + | block + | assignStat ';'! + | ';'! + ; + +forStat + : 'for' '(' start=assignStat ';' expr ';' next=assignStat ')' block + -> ^('for' $start expr $next block) + ; + +assignStat + : ID EQ expr -> ^(EQ ID expr) + ; + +expr: condExpr + ; + +condExpr + : aexpr ( ('=='^ | '<'^) aexpr )? + ; + +aexpr + : atom ( '+'^ atom )* + ; + +atom + : ID + | INT + | '(' expr ')' -> expr + ; + +FOR : 'for' ; +INT_TYPE : 'int' ; +CHAR: 'char'; +VOID: 'void'; + +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* + ; + +INT : ('0'..'9')+ + ; + +EQ : '=' ; +EQEQ : '==' ; +LT : '<' ; +PLUS : '+' ; + +WS : ( ' ' + | '\t' + | '\r' + | '\n' + )+ + { $channel=HIDDEN } + ; diff --git a/antlr-3.1.3/runtime/Python/tests/t047treeparser.py b/antlr-3.1.3/runtime/Python/tests/t047treeparser.py new file mode 100644 index 0000000..1c0cb05 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t047treeparser.py @@ -0,0 +1,122 @@ +import unittest +import textwrap +import antlr3 +import antlr3.tree +import testbase + +class T(testbase.ANTLRTest): + def walkerClass(self, base): + class TWalker(base): + def __init__(self, *args, **kwargs): + base.__init__(self, *args, **kwargs) + + self.traces = [] + + + def traceIn(self, ruleName, ruleIndex): + self.traces.append('>'+ruleName) + + + def traceOut(self, ruleName, ruleIndex): + self.traces.append('<'+ruleName) + + + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TWalker + + + def setUp(self): + self.compileGrammar() + self.compileGrammar('t047treeparserWalker.g', options='-trace') + + + def testWalker(self): + input = textwrap.dedent( + '''\ + char c; + int x; + + void bar(int x); + + int foo(int y, char d) { + int i; + for (i=0; i<3; i=i+1) { + x=3; + y=5; + } + } + ''') + + cStream = antlr3.StringStream(input) + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + r = parser.program() + + self.failUnlessEqual( + r.tree.toStringTree(), + "(VAR_DEF char c) (VAR_DEF int x) (FUNC_DECL (FUNC_HDR void bar (ARG_DEF int x))) (FUNC_DEF (FUNC_HDR int foo (ARG_DEF int y) (ARG_DEF char d)) (BLOCK (VAR_DEF int i) (for (= i 0) (< i 3) (= i (+ i 1)) (BLOCK (= x 3) (= y 5)))))" + ) + + nodes = antlr3.tree.CommonTreeNodeStream(r.tree) + nodes.setTokenStream(tStream) + walker = self.getWalker(nodes) + walker.program() + + # FIXME: need to crosscheck with Java target (compile walker with + # -trace option), if this is the real list. For now I'm happy that + # it does not crash ;) + self.failUnlessEqual( + walker.traces, + [ '>program', '>declaration', '>variable', '>type', 'declarator', 'declaration', '>variable', '>type', 'declarator', + 'declaration', + '>functionHeader', '>type', 'formalParameter', + '>type', 'declarator', 'declaration', '>functionHeader', '>type', 'formalParameter', '>type', 'declarator', + 'formalParameter', '>type', + 'declarator', 'block', '>variable', '>type', 'declarator', 'stat', '>forStat', + '>expr', '>expr', '>atom', 'expr', + '>expr', '>atom', 'expr', '>atom', 'expr', '>expr', '>expr', '>atom', 'expr', '>atom', 'block', '>stat', '>expr', '>expr', '>atom', 'stat', '>expr', '>expr', '>atom', ' within boundaries of " + "previous " + ) + + def testInsertThenReplaceSameIndex(self): + tokens = self._parse("abc") + tokens.insertBefore(0, "0") + tokens.replace(0, "x") # supercedes insert at 0 + + result = tokens.toString() + expecting = "xbc" + self.failUnlessEqual(result, expecting) + + + def test2InsertMiddleIndex(self): + tokens = self._parse("abc") + tokens.insertBefore(1, "x") + tokens.insertBefore(1, "y") + + result = tokens.toString() + expecting = "ayxbc" + self.failUnlessEqual(result, expecting) + + + def test2InsertThenReplaceIndex0(self): + tokens = self._parse("abc") + tokens.insertBefore(0, "x") + tokens.insertBefore(0, "y") + tokens.replace(0, "z") + + result = tokens.toString() + expecting = "zbc" + self.failUnlessEqual(result, expecting) + + + def testReplaceThenInsertBeforeLastIndex(self): + tokens = self._parse("abc") + tokens.replace(2, "x") + tokens.insertBefore(2, "y") + + result = tokens.toString() + expecting = "abyx" + self.failUnlessEqual(result, expecting) + + + def testInsertThenReplaceLastIndex(self): + tokens = self._parse("abc") + tokens.insertBefore(2, "y") + tokens.replace(2, "x") + + result = tokens.toString() + expecting = "abx" + self.failUnlessEqual(result, expecting) + + + def testReplaceThenInsertAfterLastIndex(self): + tokens = self._parse("abc") + tokens.replace(2, "x") + tokens.insertAfter(2, "y") + + result = tokens.toString() + expecting = "abxy" + self.failUnlessEqual(result, expecting) + + + def testReplaceRangeThenInsertAtLeftEdge(self): + tokens = self._parse("abcccba") + tokens.replace(2, 4, "x") + tokens.insertBefore(2, "y") + + result = tokens.toString() + expecting = "abyxba" + self.failUnlessEqual(result, expecting) + + + def testReplaceRangeThenInsertAtRightEdge(self): + tokens = self._parse("abcccba") + tokens.replace(2, 4, "x") + tokens.insertBefore(4, "y") # no effect; within range of a replace + + try: + tokens.toString() + self.fail() + except ValueError, exc: + self.failUnlessEqual( + str(exc), + "insert op within boundaries of " + "previous ") + + + def testReplaceRangeThenInsertAfterRightEdge(self): + tokens = self._parse("abcccba") + tokens.replace(2, 4, "x") + tokens.insertAfter(4, "y") + + result = tokens.toString() + expecting = "abxyba" + self.failUnlessEqual(result, expecting) + + + def testReplaceAll(self): + tokens = self._parse("abcccba") + tokens.replace(0, 6, "x") + + result = tokens.toString() + expecting = "x" + self.failUnlessEqual(result, expecting) + + + def testReplaceSubsetThenFetch(self): + tokens = self._parse("abcccba") + tokens.replace(2, 4, "xyz") + + result = tokens.toString(0, 6) + expecting = "abxyzba" + self.failUnlessEqual(result, expecting) + + + def testReplaceThenReplaceSuperset(self): + tokens = self._parse("abcccba") + tokens.replace(2, 4, "xyz") + tokens.replace(3, 5, "foo") # overlaps, error + + try: + tokens.toString() + self.fail() + except ValueError, exc: + self.failUnlessEqual( + str(exc), + "replace op boundaries of overlap " + "with previous ") + + + def testReplaceThenReplaceLowerIndexedSuperset(self): + tokens = self._parse("abcccba") + tokens.replace(2, 4, "xyz") + tokens.replace(1, 3, "foo") # overlap, error + + try: + tokens.toString() + self.fail() + except ValueError, exc: + self.failUnlessEqual( + str(exc), + "replace op boundaries of overlap " + "with previous ") + + + def testReplaceSingleMiddleThenOverlappingSuperset(self): + tokens = self._parse("abcba") + tokens.replace(2, 2, "xyz") + tokens.replace(0, 3, "foo") + + result = tokens.toString() + expecting = "fooa" + self.failUnlessEqual(result, expecting) + + + def testCombineInserts(self): + tokens = self._parse("abc") + tokens.insertBefore(0, "x") + tokens.insertBefore(0, "y") + result = tokens.toString() + expecting = "yxabc" + self.failUnlessEqual(expecting, result) + + + def testCombine3Inserts(self): + tokens = self._parse("abc") + tokens.insertBefore(1, "x") + tokens.insertBefore(0, "y") + tokens.insertBefore(1, "z") + result = tokens.toString() + expecting = "yazxbc" + self.failUnlessEqual(expecting, result) + + + def testCombineInsertOnLeftWithReplace(self): + tokens = self._parse("abc") + tokens.replace(0, 2, "foo") + tokens.insertBefore(0, "z") # combine with left edge of rewrite + result = tokens.toString() + expecting = "zfoo" + self.failUnlessEqual(expecting, result) + + + def testCombineInsertOnLeftWithDelete(self): + tokens = self._parse("abc") + tokens.delete(0, 2) + tokens.insertBefore(0, "z") # combine with left edge of rewrite + result = tokens.toString() + expecting = "z" # make sure combo is not znull + self.failUnlessEqual(expecting, result) + + + def testDisjointInserts(self): + tokens = self._parse("abc") + tokens.insertBefore(1, "x") + tokens.insertBefore(2, "y") + tokens.insertBefore(0, "z") + result = tokens.toString() + expecting = "zaxbyc" + self.failUnlessEqual(expecting, result) + + + def testOverlappingReplace(self): + tokens = self._parse("abcc") + tokens.replace(1, 2, "foo") + tokens.replace(0, 3, "bar") # wipes prior nested replace + result = tokens.toString() + expecting = "bar" + self.failUnlessEqual(expecting, result) + + + def testOverlappingReplace2(self): + tokens = self._parse("abcc") + tokens.replace(0, 3, "bar") + tokens.replace(1, 2, "foo") # cannot split earlier replace + + try: + tokens.toString() + self.fail() + except ValueError, exc: + self.failUnlessEqual( + str(exc), + "replace op boundaries of overlap " + "with previous ") + + + def testOverlappingReplace3(self): + tokens = self._parse("abcc") + tokens.replace(1, 2, "foo") + tokens.replace(0, 2, "bar") # wipes prior nested replace + result = tokens.toString() + expecting = "barc" + self.failUnlessEqual(expecting, result) + + + def testOverlappingReplace4(self): + tokens = self._parse("abcc") + tokens.replace(1, 2, "foo") + tokens.replace(1, 3, "bar") # wipes prior nested replace + result = tokens.toString() + expecting = "abar" + self.failUnlessEqual(expecting, result) + + + def testDropIdenticalReplace(self): + tokens = self._parse("abcc") + tokens.replace(1, 2, "foo") + tokens.replace(1, 2, "foo") # drop previous, identical + result = tokens.toString() + expecting = "afooc" + self.failUnlessEqual(expecting, result) + + + def testDropPrevCoveredInsert(self): + tokens = self._parse("abcc") + tokens.insertBefore(1, "foo") + tokens.replace(1, 2, "foo") # kill prev insert + result = tokens.toString() + expecting = "afooc" + self.failUnlessEqual(expecting, result) + + + def testLeaveAloneDisjointInsert(self): + tokens = self._parse("abcc") + tokens.insertBefore(1, "x") + tokens.replace(2, 3, "foo") + result = tokens.toString() + expecting = "axbfoo" + self.failUnlessEqual(expecting, result) + + + def testLeaveAloneDisjointInsert2(self): + tokens = self._parse("abcc") + tokens.replace(2, 3, "foo") + tokens.insertBefore(1, "x") + result = tokens.toString() + expecting = "axbfoo" + self.failUnlessEqual(expecting, result) + + +class T2(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar('t048rewrite2.g') + + + def _parse(self, input): + cStream = antlr3.StringStream(input) + lexer = self.getLexer(cStream) + tStream = antlr3.TokenRewriteStream(lexer) + tStream.LT(1) # fill buffer + + return tStream + + + def testToStringStartStop(self): + # Tokens: 0123456789 + # Input: x = 3 * 0 + tokens = self._parse("x = 3 * 0;") + tokens.replace(4, 8, "0") # replace 3 * 0 with 0 + + result = tokens.toOriginalString() + expecting = "x = 3 * 0;" + self.failUnlessEqual(expecting, result) + + result = tokens.toString() + expecting = "x = 0;" + self.failUnlessEqual(expecting, result) + + result = tokens.toString(0, 9) + expecting = "x = 0;" + self.failUnlessEqual(expecting, result) + + result = tokens.toString(4, 8) + expecting = "0" + self.failUnlessEqual(expecting, result) + + + def testToStringStartStop2(self): + # Tokens: 012345678901234567 + # Input: x = 3 * 0 + 2 * 0 + tokens = self._parse("x = 3 * 0 + 2 * 0;") + + result = tokens.toOriginalString() + expecting = "x = 3 * 0 + 2 * 0;" + self.failUnlessEqual(expecting, result) + + tokens.replace(4, 8, "0") # replace 3 * 0 with 0 + result = tokens.toString() + expecting = "x = 0 + 2 * 0;" + self.failUnlessEqual(expecting, result) + + result = tokens.toString(0, 17) + expecting = "x = 0 + 2 * 0;" + self.failUnlessEqual(expecting, result) + + result = tokens.toString(4, 8) + expecting = "0" + self.failUnlessEqual(expecting, result) + + result = tokens.toString(0, 8) + expecting = "x = 0" + self.failUnlessEqual(expecting, result) + + result = tokens.toString(12, 16) + expecting = "2 * 0" + self.failUnlessEqual(expecting, result) + + tokens.insertAfter(17, "// comment") + result = tokens.toString(12, 17) + expecting = "2 * 0;// comment" + self.failUnlessEqual(expecting, result) + + result = tokens.toString(0, 8) # try again after insert at end + expecting = "x = 0" + self.failUnlessEqual(expecting, result) + + +if __name__ == '__main__': + unittest.main() + diff --git a/antlr-3.1.3/runtime/Python/tests/t048rewrite2.g b/antlr-3.1.3/runtime/Python/tests/t048rewrite2.g new file mode 100644 index 0000000..f98251c --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t048rewrite2.g @@ -0,0 +1,12 @@ +lexer grammar t048rewrite2; +options { + language=Python; +} + +ID : 'a'..'z'+; +INT : '0'..'9'+; +SEMI : ';'; +PLUS : '+'; +MUL : '*'; +ASSIGN : '='; +WS : ' '+; diff --git a/antlr-3.1.3/runtime/Python/tests/t049treeparser.py b/antlr-3.1.3/runtime/Python/tests/t049treeparser.py new file mode 100644 index 0000000..9c7157d --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t049treeparser.py @@ -0,0 +1,499 @@ +import unittest +import textwrap +import antlr3 +import antlr3.tree +import testbase + +class T(testbase.ANTLRTest): + def walkerClass(self, base): + class TWalker(base): + def __init__(self, *args, **kwargs): + base.__init__(self, *args, **kwargs) + + self._output = "" + + + def capture(self, t): + self._output += t + + + def traceIn(self, ruleName, ruleIndex): + self.traces.append('>'+ruleName) + + + def traceOut(self, ruleName, ruleIndex): + self.traces.append('<'+ruleName) + + + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TWalker + + + def execTreeParser(self, grammar, grammarEntry, treeGrammar, treeEntry, input): + lexerCls, parserCls = self.compileInlineGrammar(grammar) + walkerCls = self.compileInlineGrammar(treeGrammar) + + cStream = antlr3.StringStream(input) + lexer = lexerCls(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = parserCls(tStream) + r = getattr(parser, grammarEntry)() + nodes = antlr3.tree.CommonTreeNodeStream(r.tree) + nodes.setTokenStream(tStream) + walker = walkerCls(nodes) + getattr(walker, treeEntry)() + + return walker._output + + + def testFlatList(self): + grammar = textwrap.dedent( + r'''grammar T; + options { + language=Python; + output=AST; + } + a : ID INT; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r'''tree grammar TP; + options { + language=Python; + ASTLabelType=CommonTree; + } + a : ID INT + {self.capture("\%s, \%s" \% ($ID, $INT))} + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc 34" + ) + + self.failUnlessEqual("abc, 34", found) + + + + def testSimpleTree(self): + grammar = textwrap.dedent( + r'''grammar T; + options { + language=Python; + output=AST; + } + a : ID INT -> ^(ID INT); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r'''tree grammar TP; + options { + language=Python; + ASTLabelType=CommonTree; + } + a : ^(ID INT) + {self.capture(str($ID)+", "+str($INT))} + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc 34" + ) + + self.failUnlessEqual("abc, 34", found) + + + def testFlatVsTreeDecision(self): + grammar = textwrap.dedent( + r'''grammar T; + options { + language=Python; + output=AST; + } + a : b c ; + b : ID INT -> ^(ID INT); + c : ID INT; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r'''tree grammar TP; + options { + language=Python; + ASTLabelType=CommonTree; + } + a : b b ; + b : ID INT {self.capture(str($ID)+" "+str($INT)+'\n')} + | ^(ID INT) {self.capture("^("+str($ID)+" "+str($INT)+')');} + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "a 1 b 2" + ) + self.failUnlessEqual("^(a 1)b 2\n", found) + + + def testFlatVsTreeDecision2(self): + grammar = textwrap.dedent( + r"""grammar T; + options { + language=Python; + output=AST; + } + a : b c ; + b : ID INT+ -> ^(ID INT+); + c : ID INT+; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + """) + + treeGrammar = textwrap.dedent( + r'''tree grammar TP; + options { + language=Python; + ASTLabelType=CommonTree; + } + a : b b ; + b : ID INT+ {self.capture(str($ID)+" "+str($INT)+"\n")} + | ^(x=ID (y=INT)+) {self.capture("^("+str($x)+' '+str($y)+')')} + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "a 1 2 3 b 4 5" + ) + self.failUnlessEqual("^(a 3)b 5\n", found) + + + def testCyclicDFALookahead(self): + grammar = textwrap.dedent( + r'''grammar T; + options { + language=Python; + output=AST; + } + a : ID INT+ PERIOD; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + SEMI : ';' ; + PERIOD : '.' ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r'''tree grammar TP; + options { + language=Python; + ASTLabelType=CommonTree; + } + a : ID INT+ PERIOD {self.capture("alt 1")} + | ID INT+ SEMI {self.capture("alt 2")} + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "a 1 2 3." + ) + self.failUnlessEqual("alt 1", found) + + +## def testTemplateOutput(self): +## String grammar = +## "grammar T;\n" + +## "options {output=AST;}\n" + +## "a : ID INT;\n" + +## "ID : 'a'..'z'+ ;\n" + +## "INT : '0'..'9'+;\n" + +## "WS : (' '|'\\n') {$channel=HIDDEN;} ;\n"; + +## String treeGrammar = +## "tree grammar TP;\n" + +## "options {output=template; ASTLabelType=CommonTree;}\n" + +## "s : a {System.out.println($a.st);};\n" + +## "a : ID INT -> {new StringTemplate($INT.text)}\n" + +## " ;\n"; + +## String found = execTreeParser("T.g", grammar, "TParser", "TP.g", +## treeGrammar, "TP", "TLexer", "a", "s", "abc 34"); +## assertEquals("34\n", found); +## } + + + def testNullableChildList(self): + grammar = textwrap.dedent( + r'''grammar T; + options { + language=Python; + output=AST; + } + a : ID INT? -> ^(ID INT?); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r'''tree grammar TP; + options { + language=Python; + ASTLabelType=CommonTree; + } + a : ^(ID INT?) + {self.capture(str($ID))} + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc" + ) + self.failUnlessEqual("abc", found) + + + def testNullableChildList2(self): + grammar = textwrap.dedent( + r'''grammar T; + options { + language=Python; + output=AST; + } + a : ID INT? SEMI -> ^(ID INT?) SEMI ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + SEMI : ';' ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r'''tree grammar TP; + options { + language=Python; + ASTLabelType=CommonTree; + } + a : ^(ID INT?) SEMI + {self.capture(str($ID))} + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc;" + ) + self.failUnlessEqual("abc", found) + + + def testNullableChildList3(self): + grammar = textwrap.dedent( + r'''grammar T; + options { + language=Python; + output=AST; + } + a : x=ID INT? (y=ID)? SEMI -> ^($x INT? $y?) SEMI ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + SEMI : ';' ; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r'''tree grammar TP; + options { + language=Python; + ASTLabelType=CommonTree; + } + a : ^(ID INT? b) SEMI + {self.capture(str($ID)+", "+str($b.text))} + ; + b : ID? ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc def;" + ) + self.failUnlessEqual("abc, def", found) + + + def testActionsAfterRoot(self): + grammar = textwrap.dedent( + r'''grammar T; + options { + language=Python; + output=AST; + } + a : x=ID INT? SEMI -> ^($x INT?) ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + SEMI : ';' ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r'''tree grammar TP; + options { + language=Python; + ASTLabelType=CommonTree; + } + a @init {x=0} : ^(ID {x=1} {x=2} INT?) + {self.capture(str($ID)+", "+str(x))} + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc;" + ) + self.failUnless("abc, 2\n", found) + + + def testWildcardLookahead(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python; output=AST;} + a : ID '+'^ INT; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + SEMI : ';' ; + PERIOD : '.' ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options {language=Python; tokenVocab=T; ASTLabelType=CommonTree;} + a : ^('+' . INT) { self.capture("alt 1") } + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "a + 2") + self.assertEquals("alt 1", found) + + + def testWildcardLookahead2(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python; output=AST;} + a : ID '+'^ INT; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + SEMI : ';' ; + PERIOD : '.' ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options {language=Python; tokenVocab=T; ASTLabelType=CommonTree;} + a : ^('+' . INT) { self.capture("alt 1") } + | ^('+' . .) { self.capture("alt 2") } + ; + ''') + + # AMBIG upon '+' DOWN INT UP etc.. but so what. + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "a + 2") + self.assertEquals("alt 1", found) + + + def testWildcardLookahead3(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python; output=AST;} + a : ID '+'^ INT; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + SEMI : ';' ; + PERIOD : '.' ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options {language=Python; tokenVocab=T; ASTLabelType=CommonTree;} + a : ^('+' ID INT) { self.capture("alt 1") } + | ^('+' . .) { self.capture("alt 2") } + ; + ''') + + # AMBIG upon '+' DOWN INT UP etc.. but so what. + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "a + 2") + self.assertEquals("alt 1", found) + + + def testWildcardPlusLookahead(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python; output=AST;} + a : ID '+'^ INT; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + SEMI : ';' ; + PERIOD : '.' ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options {language=Python; tokenVocab=T; ASTLabelType=CommonTree;} + a : ^('+' INT INT ) { self.capture("alt 1") } + | ^('+' .+) { self.capture("alt 2") } + ; + ''') + + # AMBIG upon '+' DOWN INT UP etc.. but so what. + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "a + 2") + self.assertEquals("alt 2", found) + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t050decorate.g b/antlr-3.1.3/runtime/Python/tests/t050decorate.g new file mode 100644 index 0000000..a8b17d1 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t050decorate.g @@ -0,0 +1,29 @@ +grammar t050decorate; +options { + language = Python; +} + +@header { + def logme(func): + def decorated(self, *args, **kwargs): + self.events.append('before') + try: + return func(self, *args, **kwargs) + finally: + self.events.append('after') + + return decorated +} + +@parser::init { +self.events = [] +} + +document +@decorate { + @logme +} + : IDENTIFIER + ; + +IDENTIFIER: ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*; diff --git a/antlr-3.1.3/runtime/Python/tests/t050decorate.py b/antlr-3.1.3/runtime/Python/tests/t050decorate.py new file mode 100644 index 0000000..bb6b85e --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t050decorate.py @@ -0,0 +1,21 @@ +import antlr3 +import testbase +import unittest + +class t013parser(testbase.ANTLRTest): + def setUp(self): + self.compileGrammar() + + + def testValid(self): + cStream = antlr3.StringStream('foobar') + lexer = self.getLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = self.getParser(tStream) + parser.document() + + assert parser.events == ['before', 'after'] + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t051treeRewriteAST.py b/antlr-3.1.3/runtime/Python/tests/t051treeRewriteAST.py new file mode 100644 index 0000000..b27c4f5 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t051treeRewriteAST.py @@ -0,0 +1,1557 @@ +import unittest +import textwrap +import antlr3 +import antlr3.tree +import testbase + +class T(testbase.ANTLRTest): + def walkerClass(self, base): + class TWalker(base): + def __init__(self, *args, **kwargs): + base.__init__(self, *args, **kwargs) + self.buf = "" + + def traceIn(self, ruleName, ruleIndex): + self.traces.append('>'+ruleName) + + + def traceOut(self, ruleName, ruleIndex): + self.traces.append('<'+ruleName) + + + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TWalker + + + def execTreeParser(self, grammar, grammarEntry, treeGrammar, treeEntry, input): + lexerCls, parserCls = self.compileInlineGrammar(grammar) + walkerCls = self.compileInlineGrammar(treeGrammar) + + cStream = antlr3.StringStream(input) + lexer = lexerCls(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = parserCls(tStream) + r = getattr(parser, grammarEntry)() + nodes = antlr3.tree.CommonTreeNodeStream(r.tree) + nodes.setTokenStream(tStream) + walker = walkerCls(nodes) + r = getattr(walker, treeEntry)() + + if r.tree is not None: + return r.tree.toStringTree() + + return "" + + + def testFlatList(self): + grammar = textwrap.dedent( + r''' + grammar T1; + options { + language=Python; + output=AST; + } + a : ID INT; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP1; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T1; + } + + a : ID INT -> INT ID; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc 34" + ) + + self.failUnlessEqual("34 abc", found) + + + def testSimpleTree(self): + grammar = textwrap.dedent( + r''' + grammar T2; + options { + language=Python; + output=AST; + } + a : ID INT -> ^(ID INT); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP2; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T2; + } + a : ^(ID INT) -> ^(INT ID); + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc 34" + ) + + self.failUnlessEqual("(34 abc)", found) + + + def testCombinedRewriteAndAuto(self): + grammar = textwrap.dedent( + r''' + grammar T3; + options { + language=Python; + output=AST; + } + a : ID INT -> ^(ID INT) | INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP3; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T3; + } + a : ^(ID INT) -> ^(INT ID) | INT; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc 34" + ) + + self.failUnlessEqual("(34 abc)", found) + + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "34" + ) + + self.failUnlessEqual("34", found) + + + def testAvoidDup(self): + grammar = textwrap.dedent( + r''' + grammar T4; + options { + language=Python; + output=AST; + } + a : ID ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP4; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T4; + } + a : ID -> ^(ID ID); + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc" + ) + + self.failUnlessEqual("(abc abc)", found) + + + def testLoop(self): + grammar = textwrap.dedent( + r''' + grammar T5; + options { + language=Python; + output=AST; + } + a : ID+ INT+ -> (^(ID INT))+ ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP5; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T5; + } + a : (^(ID INT))+ -> INT+ ID+; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "a b c 3 4 5" + ) + + self.failUnlessEqual("3 4 5 a b c", found) + + + def testAutoDup(self): + grammar = textwrap.dedent( + r''' + grammar T6; + options { + language=Python; + output=AST; + } + a : ID ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP6; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T6; + } + a : ID; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc" + ) + + self.failUnlessEqual("abc", found) + + + def testAutoDupRule(self): + grammar = textwrap.dedent( + r''' + grammar T7; + options { + language=Python; + output=AST; + } + a : ID INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP7; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T7; + } + a : b c ; + b : ID ; + c : INT ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "a 1" + ) + + self.failUnlessEqual("a 1", found) + + + def testAutoWildcard(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options {language=Python;output=AST; ASTLabelType=CommonTree; tokenVocab=T;} + a : ID . + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc 34") + self.assertEquals("abc 34", found) + + +# def testNoWildcardAsRootError(self): +# ErrorQueue equeue = new ErrorQueue(); +# ErrorManager.setErrorListener(equeue); +# > +# String treeGrammar = +# "tree grammar TP;\n"+ +# "options {language=Python;output=AST;} +# "a : ^(. INT) +# " ;\n"; +# > +# Grammar g = new Grammar(treeGrammar); +# Tool antlr = newTool(); +# antlr.setOutputDirectory(null); // write to /dev/null +# CodeGenerator generator = new CodeGenerator(antlr, g, "Java"); +# g.setCodeGenerator(generator); +# generator.genRecognizer(); +# > +# assertEquals("unexpected errors: "+equeue, 1, equeue.errors.size()); +# > +# int expectedMsgID = ErrorManager.MSG_WILDCARD_AS_ROOT; +# Object expectedArg = null; +# antlr.RecognitionException expectedExc = null; +# GrammarSyntaxMessage expectedMessage = +# new GrammarSyntaxMessage(expectedMsgID, g, null, expectedArg, expectedExc); +# > +# checkError(equeue, expectedMessage); +# } + + def testAutoWildcard2(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID INT -> ^(ID INT); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options {language=Python;output=AST; ASTLabelType=CommonTree; tokenVocab=T;} + a : ^(ID .) + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc 34") + self.assertEquals("(abc 34)", found) + + + def testAutoWildcardWithLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options {language=Python;output=AST; ASTLabelType=CommonTree; tokenVocab=T;} + a : ID c=. + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc 34") + self.assertEquals("abc 34", found) + + + def testAutoWildcardWithListLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options {language=Python;output=AST; ASTLabelType=CommonTree; tokenVocab=T;} + a : ID c+=. + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc 34") + self.assertEquals("abc 34", found) + + + def testAutoDupMultiple(self): + grammar = textwrap.dedent( + r''' + grammar T8; + options { + language=Python; + output=AST; + } + a : ID ID INT; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP8; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T8; + } + a : ID ID INT + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "a b 3" + ) + + self.failUnlessEqual("a b 3", found) + + + def testAutoDupTree(self): + grammar = textwrap.dedent( + r''' + grammar T9; + options { + language=Python; + output=AST; + } + a : ID INT -> ^(ID INT); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP9; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T9; + } + a : ^(ID INT) + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "a 3" + ) + + self.failUnlessEqual("(a 3)", found) + + + def testAutoDupTreeWithLabels(self): + grammar = textwrap.dedent( + r''' + grammar T10; + options { + language=Python; + output=AST; + } + a : ID INT -> ^(ID INT); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP10; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T10; + } + a : ^(x=ID y=INT) + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "a 3" + ) + + self.failUnlessEqual("(a 3)", found) + + + def testAutoDupTreeWithListLabels(self): + grammar = textwrap.dedent( + r''' + grammar T11; + options { + language=Python; + output=AST; + } + a : ID INT -> ^(ID INT); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP11; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T11; + } + a : ^(x+=ID y+=INT) + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "a 3" + ) + + self.failUnlessEqual("(a 3)", found) + + + def testAutoDupTreeWithRuleRoot(self): + grammar = textwrap.dedent( + r''' + grammar T12; + options { + language=Python; + output=AST; + } + a : ID INT -> ^(ID INT); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP12; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T12; + } + a : ^(b INT) ; + b : ID ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "a 3" + ) + + self.failUnlessEqual("(a 3)", found) + + + def testAutoDupTreeWithRuleRootAndLabels(self): + grammar = textwrap.dedent( + r''' + grammar T13; + options { + language=Python; + output=AST; + } + a : ID INT -> ^(ID INT); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP13; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T13; + } + a : ^(x=b INT) ; + b : ID ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "a 3" + ) + + self.failUnlessEqual("(a 3)", found) + + + def testAutoDupTreeWithRuleRootAndListLabels(self): + grammar = textwrap.dedent( + r''' + grammar T14; + options { + language=Python; + output=AST; + } + a : ID INT -> ^(ID INT); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP14; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T14; + } + a : ^(x+=b y+=c) ; + b : ID ; + c : INT ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "a 3" + ) + + self.failUnlessEqual("(a 3)", found) + + + def testAutoDupNestedTree(self): + grammar = textwrap.dedent( + r''' + grammar T15; + options { + language=Python; + output=AST; + } + a : x=ID y=ID INT -> ^($x ^($y INT)); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP15; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T15; + } + a : ^(ID ^(ID INT)) + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "a b 3" + ) + + self.failUnlessEqual("(a (b 3))", found) + + + def testDelete(self): + grammar = textwrap.dedent( + r''' + grammar T16; + options { + language=Python; + output=AST; + } + a : ID ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP16; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T16; + } + a : ID -> + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc" + ) + + self.failUnlessEqual("", found) + + def testSetMatchNoRewrite(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + output=AST; + } + a : ID INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T; + } + a : b INT; + b : ID | INT; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc 34" + ) + + self.failUnlessEqual("abc 34", found) + + + def testSetOptionalMatchNoRewrite(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + output=AST; + } + a : ID INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T; + } + a : (ID|INT)? INT ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc 34") + + self.failUnlessEqual("abc 34", found) + + + def testSetMatchNoRewriteLevel2(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + output=AST; + } + a : x=ID INT -> ^($x INT); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T; + } + a : ^(ID (ID | INT) ) ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc 34" + ) + + self.failUnlessEqual("(abc 34)", found) + + + def testSetMatchNoRewriteLevel2Root(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + output=AST; + } + a : x=ID INT -> ^($x INT); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T; + } + a : ^((ID | INT) INT) ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc 34" + ) + + self.failUnlessEqual("(abc 34)", found) + + + ## REWRITE MODE + + def testRewriteModeCombinedRewriteAndAuto(self): + grammar = textwrap.dedent( + r''' + grammar T17; + options { + language=Python; + output=AST; + } + a : ID INT -> ^(ID INT) | INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP17; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T17; + rewrite=true; + } + a : ^(ID INT) -> ^(ID["ick"] INT) + | INT // leaves it alone, returning $a.start + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "abc 34" + ) + + self.failUnlessEqual("(ick 34)", found) + + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + "34" + ) + + self.failUnlessEqual("34", found) + + + def testRewriteModeFlatTree(self): + grammar = textwrap.dedent( + r''' + grammar T18; + options { + language=Python; + output=AST; + } + a : ID INT -> ID INT | INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP18; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T18; + rewrite=true; + } + s : ID a ; + a : INT -> INT["1"] + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "abc 34" + ) + self.assertEquals("abc 1", found) + + + def testRewriteModeChainRuleFlatTree(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python; output=AST;} + a : ID INT -> ID INT | INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options {language=Python; output=AST; ASTLabelType=CommonTree; tokenVocab=T; rewrite=true;} + s : a ; + a : b ; + b : ID INT -> INT ID + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "abc 34") + self.assertEquals("34 abc", found) + + + def testRewriteModeChainRuleTree(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python; output=AST;} + a : ID INT -> ^(ID INT) ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options {language=Python; output=AST; ASTLabelType=CommonTree; tokenVocab=T; rewrite=true;} + s : a ; + a : b ; // a.tree must become b.tree + b : ^(ID INT) -> INT + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "abc 34") + self.assertEquals("34", found) + + + def testRewriteModeChainRuleTree2(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python; output=AST;} + a : ID INT -> ^(ID INT) ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r""" + tree grammar TP; + options {language=Python; output=AST; ASTLabelType=CommonTree; tokenVocab=T; rewrite=true;} + tokens { X; } + s : a* b ; // only b contributes to tree, but it's after a*; s.tree = b.tree + a : X ; + b : ^(ID INT) -> INT + ; + """) + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "abc 34") + self.assertEquals("34", found) + + + def testRewriteModeChainRuleTree3(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python; output=AST;} + a : 'boo' ID INT -> 'boo' ^(ID INT) ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r""" + tree grammar TP; + options {language=Python; output=AST; ASTLabelType=CommonTree; tokenVocab=T; rewrite=true;} + tokens { X; } + s : 'boo' a* b ; // don't reset s.tree to b.tree due to 'boo' + a : X ; + b : ^(ID INT) -> INT + ; + """) + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "boo abc 34") + self.assertEquals("boo 34", found) + + + def testRewriteModeChainRuleTree4(self): + grammar = textwrap.dedent( + r""" + grammar T; + options {language=Python; output=AST;} + a : 'boo' ID INT -> ^('boo' ^(ID INT)) ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + """) + + treeGrammar = textwrap.dedent( + r""" + tree grammar TP; + options {language=Python; output=AST; ASTLabelType=CommonTree; tokenVocab=T; rewrite=true;} + tokens { X; } + s : ^('boo' a* b) ; // don't reset s.tree to b.tree due to 'boo' + a : X ; + b : ^(ID INT) -> INT + ; + """) + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "boo abc 34") + self.assertEquals("(boo 34)", found) + + + def testRewriteModeChainRuleTree5(self): + grammar = textwrap.dedent( + r""" + grammar T; + options {language=Python; output=AST;} + a : 'boo' ID INT -> ^('boo' ^(ID INT)) ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + """) + + treeGrammar = textwrap.dedent( + r""" + tree grammar TP; + options {language=Python; output=AST; ASTLabelType=CommonTree; tokenVocab=T; rewrite=true;} + tokens { X; } + s : ^(a b) ; // s.tree is a.tree + a : 'boo' ; + b : ^(ID INT) -> INT + ; + """) + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "boo abc 34") + self.assertEquals("(boo 34)", found) + + + def testRewriteOfRuleRef(self): + grammar = textwrap.dedent( + r""" + grammar T; + options {language=Python; output=AST;} + a : ID INT -> ID INT | INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + """) + + treeGrammar = textwrap.dedent( + r""" + tree grammar TP; + options {language=Python; output=AST; ASTLabelType=CommonTree; tokenVocab=T; rewrite=true;} + s : a -> a ; + a : ID INT -> ID INT ; + """) + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "abc 34") + self.failUnlessEqual("abc 34", found) + + + def testRewriteOfRuleRefRoot(self): + grammar = textwrap.dedent( + r""" + grammar T; + options {language=Python; output=AST;} + a : ID INT INT -> ^(INT ^(ID INT)); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + """) + + treeGrammar = textwrap.dedent( + r""" + tree grammar TP; + options {language=Python; output=AST; ASTLabelType=CommonTree; tokenVocab=T; rewrite=true;} + s : ^(a ^(ID INT)) -> a ; + a : INT ; + """) + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "abc 12 34") + # emits whole tree when you ref the root since I can't know whether + # you want the children or not. You might be returning a whole new + # tree. Hmm...still seems weird. oh well. + self.failUnlessEqual("(12 (abc 34))", found) + + + def testRewriteOfRuleRefRootLabeled(self): + grammar = textwrap.dedent( + r""" + grammar T; + options {language=Python; output=AST;} + a : ID INT INT -> ^(INT ^(ID INT)); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + """) + + treeGrammar = textwrap.dedent( + r""" + tree grammar TP; + options {language=Python; output=AST; ASTLabelType=CommonTree; tokenVocab=T; rewrite=true;} + s : ^(label=a ^(ID INT)) -> a ; + a : INT ; + """) + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "abc 12 34") + # emits whole tree when you ref the root since I can't know whether + # you want the children or not. You might be returning a whole new + # tree. Hmm...still seems weird. oh well. + self.failUnlessEqual("(12 (abc 34))", found) + + + def testRewriteOfRuleRefRootListLabeled(self): + grammar = textwrap.dedent( + r""" + grammar T; + options {language=Python; output=AST;} + a : ID INT INT -> ^(INT ^(ID INT)); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + """) + + treeGrammar = textwrap.dedent( + r""" + tree grammar TP; + options {language=Python; output=AST; ASTLabelType=CommonTree; tokenVocab=T; rewrite=true;} + s : ^(label+=a ^(ID INT)) -> a ; + a : INT ; + """) + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "abc 12 34") + # emits whole tree when you ref the root since I can't know whether + # you want the children or not. You might be returning a whole new + # tree. Hmm...still seems weird. oh well. + self.failUnlessEqual("(12 (abc 34))", found) + + + def testRewriteOfRuleRefChild(self): + grammar = textwrap.dedent( + r""" + grammar T; + options {language=Python; output=AST;} + a : ID INT -> ^(ID ^(INT INT)); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + """) + + treeGrammar = textwrap.dedent( + r""" + tree grammar TP; + options {language=Python; output=AST; ASTLabelType=CommonTree; tokenVocab=T; rewrite=true;} + s : ^(ID a) -> a ; + a : ^(INT INT) ; + """) + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "abc 34") + self.failUnlessEqual("(34 34)", found) + + + def testRewriteOfRuleRefLabel(self): + grammar = textwrap.dedent( + r""" + grammar T; + options {language=Python; output=AST;} + a : ID INT -> ^(ID ^(INT INT)); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + """) + + treeGrammar = textwrap.dedent( + r""" + tree grammar TP; + options {language=Python; output=AST; ASTLabelType=CommonTree; tokenVocab=T; rewrite=true;} + s : ^(ID label=a) -> a ; + a : ^(INT INT) ; + """) + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "abc 34") + self.failUnlessEqual("(34 34)", found) + + + def testRewriteOfRuleRefListLabel(self): + grammar = textwrap.dedent( + r""" + grammar T; + options {language=Python; output=AST;} + a : ID INT -> ^(ID ^(INT INT)); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + """) + + treeGrammar = textwrap.dedent( + r""" + tree grammar TP; + options {language=Python; output=AST; ASTLabelType=CommonTree; tokenVocab=T; rewrite=true;} + s : ^(ID label+=a) -> a ; + a : ^(INT INT) ; + """) + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "abc 34") + self.failUnlessEqual("(34 34)", found) + + + + def testRewriteModeWithPredicatedRewrites(self): + grammar = textwrap.dedent( + r''' + grammar T19; + options { + language=Python; + output=AST; + } + a : ID INT -> ^(ID["root"] ^(ID INT)) | INT -> ^(ID["root"] INT) ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP19; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T19; + rewrite=true; + } + s : ^(ID a) { self.buf += $s.start.toStringTree() }; + a : ^(ID INT) -> {True}? ^(ID["ick"] INT) + -> INT + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "abc 34" + ) + + self.failUnlessEqual("(root (ick 34))", found) + + + def testWildcardSingleNode(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + output=AST; + } + a : ID INT -> ^(ID["root"] INT); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T; + } + s : ^(ID c=.) -> $c + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "abc 34" + ) + + self.failUnlessEqual("34", found) + + def testWildcardUnlabeledSingleNode(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python; output=AST;} + a : ID INT -> ^(ID INT); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options {language=Python; output=AST; ASTLabelType=CommonTree; tokenVocab=T;} + s : ^(ID .) -> ID + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "abc 34") + self.assertEquals("abc", found) + + + def testWildcardGrabsSubtree(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python; output=AST;} + a : ID x=INT y=INT z=INT -> ^(ID[\"root\"] ^($x $y $z)); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options {language=Python; output=AST; ASTLabelType=CommonTree; tokenVocab=T;} + s : ^(ID c=.) -> $c + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "abc 1 2 3") + self.assertEquals("(1 2 3)", found) + + + def testWildcardGrabsSubtree2(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python; output=AST;} + a : ID x=INT y=INT z=INT -> ID ^($x $y $z); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options {language=Python; output=AST; ASTLabelType=CommonTree; tokenVocab=T;} + s : ID c=. -> $c + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "abc 1 2 3") + self.assertEquals("(1 2 3)", found) + + + def testWildcardListLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python; output=AST;} + a : INT INT INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options {language=Python; output=AST; ASTLabelType=CommonTree; tokenVocab=T;} + s : (c+=.)+ -> $c+ + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "1 2 3") + self.assertEquals("1 2 3", found) + + + def testWildcardListLabel2(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python; output=AST; ASTLabelType=CommonTree;} + a : x=INT y=INT z=INT -> ^($x ^($y $z) ^($y $z)); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options {language=Python; output=AST; ASTLabelType=CommonTree; tokenVocab=T; rewrite=true;} + s : ^(INT (c+=.)+) -> $c+ + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 's', + "1 2 3") + self.assertEquals("(2 3) (2 3)", found) + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t052import.py b/antlr-3.1.3/runtime/Python/tests/t052import.py new file mode 100644 index 0000000..7d7a183 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t052import.py @@ -0,0 +1,435 @@ +import unittest +import textwrap +import antlr3 +import antlr3.tree +import testbase +import sys + +class T(testbase.ANTLRTest): + def setUp(self): + self.oldPath = sys.path[:] + sys.path.insert(0, self.baseDir) + + + def tearDown(self): + sys.path = self.oldPath + + + def parserClass(self, base): + class TParser(base): + def __init__(self, *args, **kwargs): + base.__init__(self, *args, **kwargs) + + self._output = "" + + + def capture(self, t): + self._output += t + + + def traceIn(self, ruleName, ruleIndex): + self.traces.append('>'+ruleName) + + + def traceOut(self, ruleName, ruleIndex): + self.traces.append('<'+ruleName) + + + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TParser + + + def lexerClass(self, base): + class TLexer(base): + def __init__(self, *args, **kwargs): + base.__init__(self, *args, **kwargs) + + self._output = "" + + + def capture(self, t): + self._output += t + + + def traceIn(self, ruleName, ruleIndex): + self.traces.append('>'+ruleName) + + + def traceOut(self, ruleName, ruleIndex): + self.traces.append('<'+ruleName) + + + def recover(self, input): + # no error recovery yet, just crash! + raise + + return TLexer + + + def execParser(self, grammar, grammarEntry, slaves, input): + for slave in slaves: + parserName = self.writeInlineGrammar(slave)[0] + # slave parsers are imported as normal python modules + # to force reloading current version, purge module from sys.modules + try: + del sys.modules[parserName+'Parser'] + except KeyError: + pass + + lexerCls, parserCls = self.compileInlineGrammar(grammar) + + cStream = antlr3.StringStream(input) + lexer = lexerCls(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = parserCls(tStream) + getattr(parser, grammarEntry)() + + return parser._output + + + def execLexer(self, grammar, slaves, input): + for slave in slaves: + parserName = self.writeInlineGrammar(slave)[0] + # slave parsers are imported as normal python modules + # to force reloading current version, purge module from sys.modules + try: + del sys.modules[parserName+'Parser'] + except KeyError: + pass + + lexerCls = self.compileInlineGrammar(grammar) + + cStream = antlr3.StringStream(input) + lexer = lexerCls(cStream) + + while True: + token = lexer.nextToken() + if token is None or token.type == antlr3.EOF: + break + + lexer._output += token.text + + return lexer._output + + + def testDelegatorInvokesDelegateRule(self): + slave = textwrap.dedent( + r''' + parser grammar S1; + options { + language=Python; + } + @members { + def capture(self, t): + self.gM1.capture(t) + + } + + a : B { self.capture("S.a") } ; + ''') + + master = textwrap.dedent( + r''' + grammar M1; + options { + language=Python; + } + import S1; + s : a ; + B : 'b' ; // defines B from inherited token space + WS : (' '|'\n') {self.skip()} ; + ''') + + found = self.execParser( + master, 's', + slaves=[slave], + input="b" + ) + + self.failUnlessEqual("S.a", found) + + + def testDelegatorInvokesDelegateRuleWithArgs(self): + slave = textwrap.dedent( + r''' + parser grammar S2; + options { + language=Python; + } + @members { + def capture(self, t): + self.gM2.capture(t) + } + a[x] returns [y] : B {self.capture("S.a"); $y="1000";} ; + ''') + + master = textwrap.dedent( + r''' + grammar M2; + options { + language=Python; + } + import S2; + s : label=a[3] {self.capture($label.y);} ; + B : 'b' ; // defines B from inherited token space + WS : (' '|'\n') {self.skip()} ; + ''') + + found = self.execParser( + master, 's', + slaves=[slave], + input="b" + ) + + self.failUnlessEqual("S.a1000", found) + + + def testDelegatorAccessesDelegateMembers(self): + slave = textwrap.dedent( + r''' + parser grammar S3; + options { + language=Python; + } + @members { + def capture(self, t): + self.gM3.capture(t) + + def foo(self): + self.capture("foo") + } + a : B ; + ''') + + master = textwrap.dedent( + r''' + grammar M3; // uses no rules from the import + options { + language=Python; + } + import S3; + s : 'b' {self.gS3.foo();} ; // gS is import pointer + WS : (' '|'\n') {self.skip()} ; + ''') + + found = self.execParser( + master, 's', + slaves=[slave], + input="b" + ) + + self.failUnlessEqual("foo", found) + + + def testDelegatorInvokesFirstVersionOfDelegateRule(self): + slave = textwrap.dedent( + r''' + parser grammar S4; + options { + language=Python; + } + @members { + def capture(self, t): + self.gM4.capture(t) + } + a : b {self.capture("S.a");} ; + b : B ; + ''') + + slave2 = textwrap.dedent( + r''' + parser grammar T4; + options { + language=Python; + } + @members { + def capture(self, t): + self.gM4.capture(t) + } + a : B {self.capture("T.a");} ; // hidden by S.a + ''') + + master = textwrap.dedent( + r''' + grammar M4; + options { + language=Python; + } + import S4,T4; + s : a ; + B : 'b' ; + WS : (' '|'\n') {self.skip()} ; + ''') + + found = self.execParser( + master, 's', + slaves=[slave, slave2], + input="b" + ) + + self.failUnlessEqual("S.a", found) + + + def testDelegatesSeeSameTokenType(self): + slave = textwrap.dedent( + r''' + parser grammar S5; // A, B, C token type order + options { + language=Python; + } + tokens { A; B; C; } + @members { + def capture(self, t): + self.gM5.capture(t) + } + x : A {self.capture("S.x ");} ; + ''') + + slave2 = textwrap.dedent( + r''' + parser grammar T5; + options { + language=Python; + } + tokens { C; B; A; } /// reverse order + @members { + def capture(self, t): + self.gM5.capture(t) + } + y : A {self.capture("T.y");} ; + ''') + + master = textwrap.dedent( + r''' + grammar M5; + options { + language=Python; + } + import S5,T5; + s : x y ; // matches AA, which should be "aa" + B : 'b' ; // another order: B, A, C + A : 'a' ; + C : 'c' ; + WS : (' '|'\n') {self.skip()} ; + ''') + + found = self.execParser( + master, 's', + slaves=[slave, slave2], + input="aa" + ) + + self.failUnlessEqual("S.x T.y", found) + + + def testDelegatorRuleOverridesDelegate(self): + slave = textwrap.dedent( + r''' + parser grammar S6; + options { + language=Python; + } + @members { + def capture(self, t): + self.gM6.capture(t) + } + a : b {self.capture("S.a");} ; + b : B ; + ''') + + master = textwrap.dedent( + r''' + grammar M6; + options { + language=Python; + } + import S6; + b : 'b'|'c' ; + WS : (' '|'\n') {self.skip()} ; + ''') + + found = self.execParser( + master, 'a', + slaves=[slave], + input="c" + ) + + self.failUnlessEqual("S.a", found) + + + # LEXER INHERITANCE + + def testLexerDelegatorInvokesDelegateRule(self): + slave = textwrap.dedent( + r''' + lexer grammar S7; + options { + language=Python; + } + @members { + def capture(self, t): + self.gM7.capture(t) + } + A : 'a' {self.capture("S.A ");} ; + C : 'c' ; + ''') + + master = textwrap.dedent( + r''' + lexer grammar M7; + options { + language=Python; + } + import S7; + B : 'b' ; + WS : (' '|'\n') {self.skip()} ; + ''') + + found = self.execLexer( + master, + slaves=[slave], + input="abc" + ) + + self.failUnlessEqual("S.A abc", found) + + + def testLexerDelegatorRuleOverridesDelegate(self): + slave = textwrap.dedent( + r''' + lexer grammar S8; + options { + language=Python; + } + @members { + def capture(self, t): + self.gM8.capture(t) + } + A : 'a' {self.capture("S.A")} ; + ''') + + master = textwrap.dedent( + r''' + lexer grammar M8; + options { + language=Python; + } + import S8; + A : 'a' {self.capture("M.A ");} ; + WS : (' '|'\n') {self.skip()} ; + ''') + + found = self.execLexer( + master, + slaves=[slave], + input="a" + ) + + self.failUnlessEqual("M.A a", found) + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t053hetero.py b/antlr-3.1.3/runtime/Python/tests/t053hetero.py new file mode 100644 index 0000000..a8b6fca --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t053hetero.py @@ -0,0 +1,896 @@ +import unittest +import textwrap +import antlr3 +import antlr3.tree +import testbase +import sys + +class T(testbase.ANTLRTest): + def parserClass(self, base): + class TParser(base): + def __init__(self, *args, **kwargs): + base.__init__(self, *args, **kwargs) + + self._output = "" + + + def capture(self, t): + self._output += t + + + def traceIn(self, ruleName, ruleIndex): + self.traces.append('>'+ruleName) + + + def traceOut(self, ruleName, ruleIndex): + self.traces.append('<'+ruleName) + + + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TParser + + + def lexerClass(self, base): + class TLexer(base): + def __init__(self, *args, **kwargs): + base.__init__(self, *args, **kwargs) + + self._output = "" + + + def capture(self, t): + self._output += t + + + def traceIn(self, ruleName, ruleIndex): + self.traces.append('>'+ruleName) + + + def traceOut(self, ruleName, ruleIndex): + self.traces.append('<'+ruleName) + + + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TLexer + + + def execParser(self, grammar, grammarEntry, input): + lexerCls, parserCls = self.compileInlineGrammar(grammar) + + cStream = antlr3.StringStream(input) + lexer = lexerCls(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = parserCls(tStream) + r = getattr(parser, grammarEntry)() + + if r is not None: + return r.tree.toStringTree() + + return "" + + + def execTreeParser(self, grammar, grammarEntry, treeGrammar, treeEntry, input): + lexerCls, parserCls = self.compileInlineGrammar(grammar) + walkerCls = self.compileInlineGrammar(treeGrammar) + + cStream = antlr3.StringStream(input) + lexer = lexerCls(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = parserCls(tStream) + r = getattr(parser, grammarEntry)() + nodes = antlr3.tree.CommonTreeNodeStream(r.tree) + nodes.setTokenStream(tStream) + walker = walkerCls(nodes) + r = getattr(walker, treeEntry)() + + if r is not None: + return r.tree.toStringTree() + + return "" + + + # PARSERS -- AUTO AST + + def testToken(self): + grammar = textwrap.dedent( + r''' + grammar T1; + options { + language=Python; + output=AST; + } + @header { + class V(CommonTree): + def toString(self): + return self.token.text + "" + __str__ = toString + + } + a : ID ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser( + grammar, 'a', + input="a" + ) + + self.failUnlessEqual("a", found) + + + def testTokenWithQualifiedType(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + output=AST; + } + @members { + class V(CommonTree): + def toString(self): + return self.token.text + "" + __str__ = toString + } + a : ID ; // TParser.V is qualified name + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser( + grammar, 'a', + input="a" + ) + + self.failUnlessEqual("a", found) + + + def testTokenWithLabel(self): + grammar = textwrap.dedent( + r''' + grammar T2; + options { + language=Python; + output=AST; + } + @header { + class V(CommonTree): + def toString(self): + return self.token.text + "" + __str__ = toString + + } + a : x=ID ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser( + grammar, 'a', + input="a" + ) + + self.failUnlessEqual("a", found) + + + def testTokenWithListLabel(self): + grammar = textwrap.dedent( + r''' + grammar T3; + options { + language=Python; + output=AST; + } + @header { + class V(CommonTree): + def toString(self): + return self.token.text + "" + __str__ = toString + + } + a : x+=ID ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser( + grammar, 'a', + input="a" + ) + + self.failUnlessEqual("a", found) + + + def testTokenRoot(self): + grammar = textwrap.dedent( + r''' + grammar T4; + options { + language=Python; + output=AST; + } + @header { + class V(CommonTree): + def toString(self): + return self.token.text + "" + __str__ = toString + + } + a : ID^ ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser( + grammar, 'a', + input="a" + ) + + self.failUnlessEqual("a", found) + + + def testTokenRootWithListLabel(self): + grammar = textwrap.dedent( + r''' + grammar T5; + options { + language=Python; + output=AST; + } + @header { + class V(CommonTree): + def toString(self): + return self.token.text + "" + __str__ = toString + + } + a : x+=ID^ ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser( + grammar, 'a', + input="a" + ) + + self.failUnlessEqual("a", found) + + + def testString(self): + grammar = textwrap.dedent( + r''' + grammar T6; + options { + language=Python; + output=AST; + } + @header { + class V(CommonTree): + def toString(self): + return self.token.text + "" + __str__ = toString + + } + a : 'begin' ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser( + grammar, 'a', + input="begin" + ) + + self.failUnlessEqual("begin", found) + + + def testStringRoot(self): + grammar = textwrap.dedent( + r''' + grammar T7; + options { + language=Python; + output=AST; + } + @header { + class V(CommonTree): + def toString(self): + return self.token.text + "" + __str__ = toString + + } + a : 'begin'^ ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser( + grammar, 'a', + input="begin" + ) + + self.failUnlessEqual("begin", found) + + + # PARSERS -- REWRITE AST + + def testRewriteToken(self): + grammar = textwrap.dedent( + r''' + grammar T8; + options { + language=Python; + output=AST; + } + @header { + class V(CommonTree): + def toString(self): + return self.token.text + "" + __str__ = toString + + } + a : ID -> ID ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser( + grammar, 'a', + input="a" + ) + + self.failUnlessEqual("a", found) + + + def testRewriteTokenWithArgs(self): + grammar = textwrap.dedent( + r''' + grammar T9; + options { + language=Python; + output=AST; + } + @header { + class V(CommonTree): + def __init__(self, *args): + if len(args) == 4: + ttype = args[0] + x = args[1] + y = args[2] + z = args[3] + token = CommonToken(type=ttype, text="") + + elif len(args) == 3: + ttype = args[0] + token = args[1] + x = args[2] + y, z = 0, 0 + + else: + raise TypeError("Invalid args \%r" \% (args,)) + + CommonTree.__init__(self, token) + self.x = x + self.y = y + self.z = z + + def toString(self): + txt = "" + if self.token is not None: + txt += self.token.text + txt +=";\%d\%d\%d" \% (self.x, self.y, self.z) + return txt + __str__ = toString + + } + a : ID -> ID[42,19,30] ID[$ID,99]; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser( + grammar, 'a', + input="a" + ) + + self.failUnlessEqual(";421930 a;9900", found) + + + def testRewriteTokenRoot(self): + grammar = textwrap.dedent( + r''' + grammar T10; + options { + language=Python; + output=AST; + } + @header { + class V(CommonTree): + def toString(self): + return self.token.text + "" + __str__ = toString + + } + a : ID INT -> ^(ID INT) ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser( + grammar, 'a', + input="a 2" + ) + + self.failUnlessEqual("(a 2)", found) + + + def testRewriteString(self): + grammar = textwrap.dedent( + r''' + grammar T11; + options { + language=Python; + output=AST; + } + @header { + class V(CommonTree): + def toString(self): + return self.token.text + "" + __str__ = toString + + } + a : 'begin' -> 'begin' ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser( + grammar, 'a', + input="begin" + ) + + self.failUnlessEqual("begin", found) + + + def testRewriteStringRoot(self): + grammar = textwrap.dedent( + r''' + grammar T12; + options { + language=Python; + output=AST; + } + @header { + class V(CommonTree): + def toString(self): + return self.token.text + "" + __str__ = toString + + } + a : 'begin' INT -> ^('begin' INT) ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser( + grammar, 'a', + input="begin 2" + ) + + self.failUnlessEqual("(begin 2)", found) + + def testRewriteRuleResults(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + output=AST; + } + tokens {LIST;} + @header { + class V(CommonTree): + def toString(self): + return self.token.text + "" + __str__ = toString + + class W(CommonTree): + def __init__(self, tokenType, txt): + super(W, self).__init__( + CommonToken(type=tokenType, text=txt)) + + def toString(self): + return self.token.text + "" + __str__ = toString + + } + a : id (',' id)* -> ^(LIST["LIST"] id+); + id : ID -> ID; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser( + grammar, 'a', + input="a,b,c") + + self.failUnlessEqual("(LIST a b c)", found) + + def testCopySemanticsWithHetero(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + output=AST; + } + @header { + class V(CommonTree): + def dupNode(self): + return V(self) + + def toString(self): + return self.token.text + "" + __str__ = toString + + } + a : type ID (',' ID)* ';' -> ^(type ID)+; + type : 'int' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser( + grammar, 'a', + input="int a, b, c;") + self.failUnlessEqual("(int a) (int b) (int c)", found) + + # TREE PARSERS -- REWRITE AST + + def testTreeParserRewriteFlatList(self): + grammar = textwrap.dedent( + r''' + grammar T13; + options { + language=Python; + output=AST; + } + a : ID INT; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP13; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T13; + } + @header { + class V(CommonTree): + def toString(self): + return self.token.text + "" + __str__ = toString + + class W(CommonTree): + def toString(self): + return self.token.text + "" + __str__ = toString + + } + a : ID INT -> INT ID + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + input="abc 34" + ) + + self.failUnlessEqual("34 abc", found) + + + def testTreeParserRewriteTree(self): + grammar = textwrap.dedent( + r''' + grammar T14; + options { + language=Python; + output=AST; + } + a : ID INT; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP14; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T14; + } + @header { + class V(CommonTree): + def toString(self): + return self.token.text + "" + __str__ = toString + + class W(CommonTree): + def toString(self): + return self.token.text + "" + __str__ = toString + + } + a : ID INT -> ^(INT ID) + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + input="abc 34" + ) + + self.failUnlessEqual("(34 abc)", found) + + + def testTreeParserRewriteImaginary(self): + grammar = textwrap.dedent( + r''' + grammar T15; + options { + language=Python; + output=AST; + } + a : ID ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP15; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T15; + } + tokens { ROOT; } + @header { + class V(CommonTree): + def __init__(self, tokenType): + CommonTree.__init__(self, CommonToken(tokenType)) + + def toString(self): + return tokenNames[self.token.type] + "" + __str__ = toString + + + } + a : ID -> ROOT ID + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + input="abc" + ) + + self.failUnlessEqual("ROOT abc", found) + + + def testTreeParserRewriteImaginaryWithArgs(self): + grammar = textwrap.dedent( + r''' + grammar T16; + options { + language=Python; + output=AST; + } + a : ID ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP16; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T16; + } + tokens { ROOT; } + @header { + class V(CommonTree): + def __init__(self, tokenType, x): + CommonTree.__init__(self, CommonToken(tokenType)) + self.x = x + + def toString(self): + return tokenNames[self.token.type] + ";" + str(self.x) + __str__ = toString + + } + a : ID -> ROOT[42] ID + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + input="abc" + ) + + self.failUnlessEqual("ROOT;42 abc", found) + + + def testTreeParserRewriteImaginaryRoot(self): + grammar = textwrap.dedent( + r''' + grammar T17; + options { + language=Python; + output=AST; + } + a : ID ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP17; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T17; + } + tokens { ROOT; } + @header { + class V(CommonTree): + def __init__(self, tokenType): + CommonTree.__init__(self, CommonToken(tokenType)) + + def toString(self): + return tokenNames[self.token.type] + "" + __str__ = toString + + } + a : ID -> ^(ROOT ID) + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + input="abc" + ) + + self.failUnlessEqual("(ROOT abc)", found) + + + def testTreeParserRewriteImaginaryFromReal(self): + grammar = textwrap.dedent( + r''' + grammar T18; + options { + language=Python; + output=AST; + } + a : ID ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP18; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T18; + } + tokens { ROOT; } + @header { + class V(CommonTree): + def __init__(self, tokenType, tree=None): + if tree is None: + CommonTree.__init__(self, CommonToken(tokenType)) + else: + CommonTree.__init__(self, tree) + self.token.type = tokenType + + def toString(self): + return tokenNames[self.token.type]+"@"+str(self.token.line) + __str__ = toString + + } + a : ID -> ROOT[$ID] + ; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + input="abc" + ) + + self.failUnlessEqual("ROOT@1", found) + + + def testTreeParserAutoHeteroAST(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + output=AST; + } + a : ID ';' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + treeGrammar = textwrap.dedent( + r''' + tree grammar TP; + options { + language=Python; + output=AST; + ASTLabelType=CommonTree; + tokenVocab=T; + } + tokens { ROOT; } + @header { + class V(CommonTree): + def toString(self): + return CommonTree.toString(self) + "" + __str__ = toString + + } + + a : ID ';'; + ''') + + found = self.execTreeParser( + grammar, 'a', + treeGrammar, 'a', + input="abc;" + ) + + self.failUnlessEqual("abc ;", found) + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t054main.py b/antlr-3.1.3/runtime/Python/tests/t054main.py new file mode 100644 index 0000000..9bb47a9 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t054main.py @@ -0,0 +1,318 @@ +# -*- coding: utf-8 -*- + +import unittest +import textwrap +import antlr3 +import antlr3.tree +import testbase +import sys +from StringIO import StringIO + +class T(testbase.ANTLRTest): + def setUp(self): + self.oldPath = sys.path[:] + sys.path.insert(0, self.baseDir) + + + def tearDown(self): + sys.path = self.oldPath + + + def testOverrideMain(self): + grammar = textwrap.dedent( + r"""lexer grammar T3; + options { + language = Python; + } + + @main { + def main(argv): + raise RuntimeError("no") + } + + ID: ('a'..'z' | '\u00c0'..'\u00ff')+; + WS: ' '+ { $channel = HIDDEN; }; + """) + + + stdout = StringIO() + + lexerMod = self.compileInlineGrammar(grammar, returnModule=True) + try: + lexerMod.main( + ['lexer.py'] + ) + self.fail() + except RuntimeError: + pass + + + def testLexerFromFile(self): + input = "foo bar" + inputPath = self.writeFile("input.txt", input) + + grammar = textwrap.dedent( + r"""lexer grammar T1; + options { + language = Python; + } + + ID: 'a'..'z'+; + WS: ' '+ { $channel = HIDDEN; }; + """) + + + stdout = StringIO() + + lexerMod = self.compileInlineGrammar(grammar, returnModule=True) + lexerMod.main( + ['lexer.py', inputPath], + stdout=stdout + ) + + self.failUnlessEqual(len(stdout.getvalue().splitlines()), 3) + + + def testLexerFromStdIO(self): + input = "foo bar" + + grammar = textwrap.dedent( + r"""lexer grammar T2; + options { + language = Python; + } + + ID: 'a'..'z'+; + WS: ' '+ { $channel = HIDDEN; }; + """) + + + stdout = StringIO() + + lexerMod = self.compileInlineGrammar(grammar, returnModule=True) + lexerMod.main( + ['lexer.py'], + stdin=StringIO(input), + stdout=stdout + ) + + self.failUnlessEqual(len(stdout.getvalue().splitlines()), 3) + + + def testLexerEncoding(self): + input = u"föö bär".encode('utf-8') + + grammar = textwrap.dedent( + r"""lexer grammar T3; + options { + language = Python; + } + + ID: ('a'..'z' | '\u00c0'..'\u00ff')+; + WS: ' '+ { $channel = HIDDEN; }; + """) + + + stdout = StringIO() + + lexerMod = self.compileInlineGrammar(grammar, returnModule=True) + lexerMod.main( + ['lexer.py', '--encoding', 'utf-8'], + stdin=StringIO(input), + stdout=stdout + ) + + self.failUnlessEqual(len(stdout.getvalue().splitlines()), 3) + + + def testCombined(self): + input = "foo bar" + + grammar = textwrap.dedent( + r"""grammar T4; + options { + language = Python; + } + + r returns [res]: (ID)+ EOF { $res = $text; }; + + ID: 'a'..'z'+; + WS: ' '+ { $channel = HIDDEN; }; + """) + + + stdout = StringIO() + + lexerMod, parserMod = self.compileInlineGrammar(grammar, returnModule=True) + parserMod.main( + ['combined.py', '--rule', 'r'], + stdin=StringIO(input), + stdout=stdout + ) + + stdout = stdout.getvalue() + self.failUnlessEqual(len(stdout.splitlines()), 1, stdout) + + + def testCombinedOutputAST(self): + input = "foo + bar" + + grammar = textwrap.dedent( + r"""grammar T5; + options { + language = Python; + output = AST; + } + + r: ID OP^ ID EOF!; + + ID: 'a'..'z'+; + OP: '+'; + WS: ' '+ { $channel = HIDDEN; }; + """) + + + stdout = StringIO() + + lexerMod, parserMod = self.compileInlineGrammar(grammar, returnModule=True) + parserMod.main( + ['combined.py', '--rule', 'r'], + stdin=StringIO(input), + stdout=stdout + ) + + stdout = stdout.getvalue().strip() + self.failUnlessEqual(stdout, "(+ foo bar)") + + + def testTreeParser(self): + grammar = textwrap.dedent( + r'''grammar T6; + options { + language = Python; + output = AST; + } + + r: ID OP^ ID EOF!; + + ID: 'a'..'z'+; + OP: '+'; + WS: ' '+ { $channel = HIDDEN; }; + ''') + + treeGrammar = textwrap.dedent( + r'''tree grammar T6Walker; + options { + language=Python; + ASTLabelType=CommonTree; + tokenVocab=T6; + } + r returns [res]: ^(OP a=ID b=ID) + { $res = "\%s \%s \%s" \% ($a.text, $OP.text, $b.text) } + ; + ''') + + lexerMod, parserMod = self.compileInlineGrammar(grammar, returnModule=True) + walkerMod = self.compileInlineGrammar(treeGrammar, returnModule=True) + + stdout = StringIO() + walkerMod.main( + ['walker.py', '--rule', 'r', '--parser', 'T6Parser', '--parser-rule', 'r', '--lexer', 'T6Lexer'], + stdin=StringIO("a+b"), + stdout=stdout + ) + + stdout = stdout.getvalue().strip() + self.failUnlessEqual(stdout, "u'a + b'") + + + def testTreeParserRewrite(self): + grammar = textwrap.dedent( + r'''grammar T7; + options { + language = Python; + output = AST; + } + + r: ID OP^ ID EOF!; + + ID: 'a'..'z'+; + OP: '+'; + WS: ' '+ { $channel = HIDDEN; }; + ''') + + treeGrammar = textwrap.dedent( + r'''tree grammar T7Walker; + options { + language=Python; + ASTLabelType=CommonTree; + tokenVocab=T7; + output=AST; + } + tokens { + ARG; + } + r: ^(OP a=ID b=ID) -> ^(OP ^(ARG ID) ^(ARG ID)); + ''') + + lexerMod, parserMod = self.compileInlineGrammar(grammar, returnModule=True) + walkerMod = self.compileInlineGrammar(treeGrammar, returnModule=True) + + stdout = StringIO() + walkerMod.main( + ['walker.py', '--rule', 'r', '--parser', 'T7Parser', '--parser-rule', 'r', '--lexer', 'T7Lexer'], + stdin=StringIO("a+b"), + stdout=stdout + ) + + stdout = stdout.getvalue().strip() + self.failUnlessEqual(stdout, "(+ (ARG a) (ARG b))") + + + + def testGrammarImport(self): + slave = textwrap.dedent( + r''' + parser grammar T8S; + options { + language=Python; + } + + a : B; + ''') + + parserName = self.writeInlineGrammar(slave)[0] + # slave parsers are imported as normal python modules + # to force reloading current version, purge module from sys.modules + try: + del sys.modules[parserName+'Parser'] + except KeyError: + pass + + master = textwrap.dedent( + r''' + grammar T8M; + options { + language=Python; + } + import T8S; + s returns [res]: a { $res = $a.text }; + B : 'b' ; // defines B from inherited token space + WS : (' '|'\n') {self.skip()} ; + ''') + + stdout = StringIO() + + lexerMod, parserMod = self.compileInlineGrammar(master, returnModule=True) + parserMod.main( + ['import.py', '--rule', 's'], + stdin=StringIO("b"), + stdout=stdout + ) + + stdout = stdout.getvalue().strip() + self.failUnlessEqual(stdout, "u'b'") + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t055templates.py b/antlr-3.1.3/runtime/Python/tests/t055templates.py new file mode 100644 index 0000000..33fa466 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t055templates.py @@ -0,0 +1,509 @@ +import unittest +import textwrap +import antlr3 +import antlr3.tree +import stringtemplate3 +import testbase +import sys +import os +from StringIO import StringIO + +class T(testbase.ANTLRTest): + def execParser(self, grammar, grammarEntry, input, group=None): + lexerCls, parserCls = self.compileInlineGrammar(grammar) + + cStream = antlr3.StringStream(input) + lexer = lexerCls(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = parserCls(tStream) + if group is not None: + parser.templateLib = group + result = getattr(parser, grammarEntry)() + if result.st is not None: + return result.st.toString() + return None + + + def testInlineTemplate(self): + grammar = textwrap.dedent( + r'''grammar T; + options { + language=Python; + output=template; + } + a : ID INT + -> template(id={$ID.text}, int={$INT.text}) + "id=, int=" + ; + + ID : 'a'..'z'+; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''' + ) + + found = self.execParser( + grammar, 'a', + "abc 34" + ) + + self.failUnlessEqual("id=abc, int=34", found) + + + def testExternalTemplate(self): + templates = textwrap.dedent( + '''\ + group T; + expr(args, op) ::= << + [}>] + >> + ''' + ) + + group = stringtemplate3.StringTemplateGroup( + file=StringIO(templates), + lexer='angle-bracket' + ) + + grammar = textwrap.dedent( + r'''grammar T2; + options { + language=Python; + output=template; + } + a : r+=arg OP r+=arg + -> expr(op={$OP.text}, args={$r}) + ; + arg: ID -> template(t={$ID.text}) ""; + + ID : 'a'..'z'+; + OP: '+'; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''' + ) + + found = self.execParser( + grammar, 'a', + "a + b", + group + ) + + self.failUnlessEqual("[a+b]", found) + + + def testEmptyTemplate(self): + grammar = textwrap.dedent( + r'''grammar T; + options { + language=Python; + output=template; + } + a : ID INT + -> + ; + + ID : 'a'..'z'+; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''' + ) + + found = self.execParser( + grammar, 'a', + "abc 34" + ) + + self.failUnless(found is None) + + + def testList(self): + grammar = textwrap.dedent( + r'''grammar T; + options { + language=Python; + output=template; + } + a: (r+=b)* EOF + -> template(r={$r}) + "" + ; + + b: ID + -> template(t={$ID.text}) "" + ; + + ID : 'a'..'z'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''' + ) + + found = self.execParser( + grammar, 'a', + "abc def ghi" + ) + + self.failUnlessEqual("abc,def,ghi", found) + + + def testAction(self): + grammar = textwrap.dedent( + r'''grammar T; + options { + language=Python; + output=template; + } + a: ID + -> { stringtemplate3.StringTemplate("hello") } + ; + + ID : 'a'..'z'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''' + ) + + found = self.execParser( + grammar, 'a', + "abc" + ) + + self.failUnlessEqual("hello", found) + + + def testTemplateExpressionInAction(self): + grammar = textwrap.dedent( + r'''grammar T; + options { + language=Python; + output=template; + } + a: ID + { $st = %{"hello"} } + ; + + ID : 'a'..'z'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''' + ) + + found = self.execParser( + grammar, 'a', + "abc" + ) + + self.failUnlessEqual("hello", found) + + + def testTemplateExpressionInAction2(self): + grammar = textwrap.dedent( + r'''grammar T; + options { + language=Python; + output=template; + } + a: ID + { + res = %{"hello "} + %res.foo = "world"; + } + -> { res } + ; + + ID : 'a'..'z'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''' + ) + + found = self.execParser( + grammar, 'a', + "abc" + ) + + self.failUnlessEqual("hello world", found) + + + @testbase.broken("Grammar parse fails, must be fixed by Ter", RuntimeError) + def testIndirectTemplateConstructor(self): + templates = textwrap.dedent( + '''\ + group T; + expr(args, op) ::= << + [}>] + >> + ''' + ) + + group = stringtemplate3.StringTemplateGroup( + file=StringIO(templates), + lexer='angle-bracket' + ) + + grammar = textwrap.dedent( + r'''grammar T; + options { + language=Python; + output=template; + } + a: ID + { + $st = %({"expr"})(args={[1, 2, 3]}, op={"+"}) + } + ; + + ID : 'a'..'z'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''' + ) + + found = self.execParser( + grammar, 'a', + "abc", + group + ) + + self.failUnlessEqual("[1+2+3]", found) + + + def testPredicates(self): + grammar = textwrap.dedent( + r'''grammar T3; + options { + language=Python; + output=template; + } + a : ID INT + -> {$ID.text=='a'}? template(int={$INT.text}) + "A: " + -> {$ID.text=='b'}? template(int={$INT.text}) + "B: " + -> template(int={$INT.text}) + "C: " + ; + + ID : 'a'..'z'+; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''' + ) + + found = self.execParser( + grammar, 'a', + "b 34" + ) + + self.failUnlessEqual("B: 34", found) + + + def testBacktrackingMode(self): + grammar = textwrap.dedent( + r'''grammar T4; + options { + language=Python; + output=template; + backtrack=true; + } + a : (ID INT)=> ID INT + -> template(id={$ID.text}, int={$INT.text}) + "id=, int=" + ; + + ID : 'a'..'z'+; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''' + ) + + found = self.execParser( + grammar, 'a', + "abc 34" + ) + + self.failUnlessEqual("id=abc, int=34", found) + + + def testRewrite(self): + grammar = textwrap.dedent( + r'''grammar T5; + options { + language=Python; + output=template; + rewrite=true; + } + + prog: stat+; + + stat + : 'if' '(' expr ')' stat + | 'return' return_expr ';' + | '{' stat* '}' + | ID '=' expr ';' + ; + + return_expr + : expr + -> template(t={$text}) <)>> + ; + + expr + : ID + | INT + ; + + ID: 'a'..'z'+; + INT: '0'..'9'+; + WS: (' '|'\n')+ {$channel=HIDDEN;} ; + COMMENT: '/*' (options {greedy=false;} : .)* '*/' {$channel = HIDDEN;} ; + ''' + ) + + input = textwrap.dedent( + '''\ + if ( foo ) { + b = /* bla */ 2; + return 1 /* foo */; + } + + /* gnurz */ + return 12; + ''' + ) + + lexerCls, parserCls = self.compileInlineGrammar(grammar) + + cStream = antlr3.StringStream(input) + lexer = lexerCls(cStream) + tStream = antlr3.TokenRewriteStream(lexer) + parser = parserCls(tStream) + result = parser.prog() + + found = tStream.toString() + + expected = textwrap.dedent( + '''\ + if ( foo ) { + b = /* bla */ 2; + return boom(1) /* foo */; + } + + /* gnurz */ + return boom(12); + ''' + ) + + self.failUnlessEqual(expected, found) + + + def testTreeRewrite(self): + grammar = textwrap.dedent( + r'''grammar T6; + options { + language=Python; + output=AST; + } + + tokens { + BLOCK; + ASSIGN; + } + + prog: stat+; + + stat + : IF '(' e=expr ')' s=stat + -> ^(IF $e $s) + | RETURN expr ';' + -> ^(RETURN expr) + | '{' stat* '}' + -> ^(BLOCK stat*) + | ID '=' expr ';' + -> ^(ASSIGN ID expr) + ; + + expr + : ID + | INT + ; + + IF: 'if'; + RETURN: 'return'; + ID: 'a'..'z'+; + INT: '0'..'9'+; + WS: (' '|'\n')+ {$channel=HIDDEN;} ; + COMMENT: '/*' (options {greedy=false;} : .)* '*/' {$channel = HIDDEN;} ; + ''' + ) + + treeGrammar = textwrap.dedent( + r'''tree grammar T6Walker; + options { + language=Python; + tokenVocab=T6; + ASTLabelType=CommonTree; + output=template; + rewrite=true; + } + + prog: stat+; + + stat + : ^(IF expr stat) + | ^(RETURN return_expr) + | ^(BLOCK stat*) + | ^(ASSIGN ID expr) + ; + + return_expr + : expr + -> template(t={$text}) <)>> + ; + + expr + : ID + | INT + ; + ''' + ) + + input = textwrap.dedent( + '''\ + if ( foo ) { + b = /* bla */ 2; + return 1 /* foo */; + } + + /* gnurz */ + return 12; + ''' + ) + + lexerCls, parserCls = self.compileInlineGrammar(grammar) + walkerCls = self.compileInlineGrammar(treeGrammar) + + cStream = antlr3.StringStream(input) + lexer = lexerCls(cStream) + tStream = antlr3.TokenRewriteStream(lexer) + parser = parserCls(tStream) + tree = parser.prog().tree + nodes = antlr3.tree.CommonTreeNodeStream(tree) + nodes.setTokenStream(tStream) + walker = walkerCls(nodes) + walker.prog() + + found = tStream.toString() + + expected = textwrap.dedent( + '''\ + if ( foo ) { + b = /* bla */ 2; + return boom(1) /* foo */; + } + + /* gnurz */ + return boom(12); + ''' + ) + + self.failUnlessEqual(expected, found) + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t056lexer.py b/antlr-3.1.3/runtime/Python/tests/t056lexer.py new file mode 100644 index 0000000..a53f92a --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t056lexer.py @@ -0,0 +1,49 @@ +import unittest +import textwrap +import antlr3 +import antlr3.tree +import stringtemplate3 +import testbase +import sys +import os +from StringIO import StringIO + +# FIXME: port other tests from TestLexer.java + +class T(testbase.ANTLRTest): + def execParser(self, grammar, grammarEntry, input): + lexerCls, parserCls = self.compileInlineGrammar(grammar) + + cStream = antlr3.StringStream(input) + lexer = lexerCls(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = parserCls(tStream) + result = getattr(parser, grammarEntry)() + return result + + + def testRefToRuleDoesNotSetChannel(self): + # this must set channel of A to HIDDEN. $channel is local to rule + # like $type. + grammar = textwrap.dedent( + r''' + grammar P; + options { + language=Python; + } + a returns [foo]: A EOF { $foo = '\%s, channel=\%d' \% ($A.text, $A.channel); } ; + A : '-' WS I ; + I : '0'..'9'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser( + grammar, 'a', + "- 34" + ) + + self.failUnlessEqual("- 34, channel=0", found) + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t057autoAST.py b/antlr-3.1.3/runtime/Python/tests/t057autoAST.py new file mode 100644 index 0000000..b44740e --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t057autoAST.py @@ -0,0 +1,1004 @@ +import unittest +import textwrap +import antlr3 +import antlr3.tree +import testbase +import sys + +class TestAutoAST(testbase.ANTLRTest): + def parserClass(self, base): + class TParser(base): + def __init__(self, *args, **kwargs): + base.__init__(self, *args, **kwargs) + + self._errors = [] + self._output = "" + + + def capture(self, t): + self._output += t + + + def traceIn(self, ruleName, ruleIndex): + self.traces.append('>'+ruleName) + + + def traceOut(self, ruleName, ruleIndex): + self.traces.append('<'+ruleName) + + + def emitErrorMessage(self, msg): + self._errors.append(msg) + + + return TParser + + + def lexerClass(self, base): + class TLexer(base): + def __init__(self, *args, **kwargs): + base.__init__(self, *args, **kwargs) + + self._output = "" + + + def capture(self, t): + self._output += t + + + def traceIn(self, ruleName, ruleIndex): + self.traces.append('>'+ruleName) + + + def traceOut(self, ruleName, ruleIndex): + self.traces.append('<'+ruleName) + + + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TLexer + + + def execParser(self, grammar, grammarEntry, input, expectErrors=False): + lexerCls, parserCls = self.compileInlineGrammar(grammar) + + cStream = antlr3.StringStream(input) + lexer = lexerCls(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = parserCls(tStream) + r = getattr(parser, grammarEntry)() + + if not expectErrors: + self.assertEquals(len(parser._errors), 0, parser._errors) + + result = "" + + if r is not None: + if hasattr(r, 'result'): + result += r.result + + if r.tree is not None: + result += r.tree.toStringTree() + + if not expectErrors: + return result + + else: + return result, parser._errors + + + def execTreeParser(self, grammar, grammarEntry, treeGrammar, treeEntry, input): + lexerCls, parserCls = self.compileInlineGrammar(grammar) + walkerCls = self.compileInlineGrammar(treeGrammar) + + cStream = antlr3.StringStream(input) + lexer = lexerCls(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = parserCls(tStream) + r = getattr(parser, grammarEntry)() + nodes = antlr3.tree.CommonTreeNodeStream(r.tree) + nodes.setTokenStream(tStream) + walker = walkerCls(nodes) + r = getattr(walker, treeEntry)() + + if r is not None: + return r.tree.toStringTree() + + return "" + + + def testTokenList(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + a : ID INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;}; + ''') + + found = self.execParser(grammar, "a", "abc 34") + self.assertEquals("abc 34", found); + + + def testTokenListInSingleAltBlock(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + a : (ID INT) ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar,"a", "abc 34") + self.assertEquals("abc 34", found) + + + def testSimpleRootAtOuterLevel(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + a : ID^ INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "abc 34") + self.assertEquals("(abc 34)", found) + + + def testSimpleRootAtOuterLevelReverse(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : INT ID^ ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "34 abc") + self.assertEquals("(abc 34)", found) + + + def testBang(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID INT! ID! INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "abc 34 dag 4532") + self.assertEquals("abc 4532", found) + + + def testOptionalThenRoot(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ( ID INT )? ID^ ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a 1 b") + self.assertEquals("(b a 1)", found) + + + def testLabeledStringRoot(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : v='void'^ ID ';' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "void foo;") + self.assertEquals("(void foo ;)", found) + + + def testWildcard(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : v='void'^ . ';' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "void foo;") + self.assertEquals("(void foo ;)", found) + + + def testWildcardRoot(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : v='void' .^ ';' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "void foo;") + self.assertEquals("(foo void ;)", found) + + + def testWildcardRootWithLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : v='void' x=.^ ';' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "void foo;") + self.assertEquals("(foo void ;)", found) + + + def testWildcardRootWithListLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : v='void' x=.^ ';' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "void foo;") + self.assertEquals("(foo void ;)", found) + + + def testWildcardBangWithListLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : v='void' x=.! ';' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "void foo;") + self.assertEquals("void ;", found) + + + def testRootRoot(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID^ INT^ ID ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a 34 c") + self.assertEquals("(34 a c)", found) + + + def testRootRoot2(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID INT^ ID^ ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a 34 c") + self.assertEquals("(c (34 a))", found) + + + def testRootThenRootInLoop(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID^ (INT '*'^ ID)+ ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a 34 * b 9 * c") + self.assertEquals("(* (* (a 34) b 9) c)", found) + + + def testNestedSubrule(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : 'void' (({pass}ID|INT) ID | 'null' ) ';' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "void a b;") + self.assertEquals("void a b ;", found) + + + def testInvokeRule(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : type ID ; + type : {pass}'int' | 'float' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "int a") + self.assertEquals("int a", found) + + + def testInvokeRuleAsRoot(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : type^ ID ; + type : {pass}'int' | 'float' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "int a") + self.assertEquals("(int a)", found) + + + def testInvokeRuleAsRootWithLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : x=type^ ID ; + type : {pass}'int' | 'float' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "int a") + self.assertEquals("(int a)", found) + + + def testInvokeRuleAsRootWithListLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : x+=type^ ID ; + type : {pass}'int' | 'float' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "int a") + self.assertEquals("(int a)", found) + + + def testRuleRootInLoop(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID ('+'^ ID)* ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a+b+c+d") + self.assertEquals("(+ (+ (+ a b) c) d)", found) + + + def testRuleInvocationRuleRootInLoop(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID (op^ ID)* ; + op : {pass}'+' | '-' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a+b+c-d") + self.assertEquals("(- (+ (+ a b) c) d)", found) + + + def testTailRecursion(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + s : a ; + a : atom ('exp'^ a)? ; + atom : INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "s", "3 exp 4 exp 5") + self.assertEquals("(exp 3 (exp 4 5))", found) + + + def testSet(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID|INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "abc") + self.assertEquals("abc", found) + + + def testSetRoot(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ('+' | '-')^ ID ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "+abc") + self.assertEquals("(+ abc)", found) + + + @testbase.broken("FAILS until antlr.g rebuilt in v3", RuntimeError) + def testSetRootWithLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : x=('+' | '-')^ ID ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "+abc") + self.assertEquals("(+ abc)", found) + + + def testSetAsRuleRootInLoop(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID (('+'|'-')^ ID)* ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a+b-c") + self.assertEquals("(- (+ a b) c)", found) + + + def testNotSet(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ~ID '+' INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "34+2") + self.assertEquals("34 + 2", found) + + + def testNotSetWithLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : x=~ID '+' INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "34+2") + self.assertEquals("34 + 2", found) + + + def testNotSetWithListLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : x=~ID '+' INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "34+2") + self.assertEquals("34 + 2", found) + + + def testNotSetRoot(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ~'+'^ INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "34 55") + self.assertEquals("(34 55)", found) + + + def testNotSetRootWithLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ~'+'^ INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "34 55") + self.assertEquals("(34 55)", found) + + + def testNotSetRootWithListLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ~'+'^ INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "34 55") + self.assertEquals("(34 55)", found) + + + def testNotSetRuleRootInLoop(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : INT (~INT^ INT)* ; + blort : '+' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "3+4+5") + self.assertEquals("(+ (+ 3 4) 5)", found) + + + @testbase.broken("FIXME: What happened to the semicolon?", AssertionError) + def testTokenLabelReuse(self): + # check for compilation problem due to multiple defines + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a returns [result] : id=ID id=ID {$result = "2nd id="+$id.text+";";} ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b") + self.assertEquals("2nd id=b;a b", found) + + + def testTokenLabelReuse2(self): + # check for compilation problem due to multiple defines + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a returns [result]: id=ID id=ID^ {$result = "2nd id="+$id.text+',';} ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b") + self.assertEquals("2nd id=b,(b a)", found) + + + def testTokenListLabelReuse(self): + # check for compilation problem due to multiple defines + # make sure ids has both ID tokens + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a returns [result] : ids+=ID ids+=ID {$result = "id list=["+",".join([t.text for t in $ids])+'],';} ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b") + expecting = "id list=[a,b],a b" + self.assertEquals(expecting, found) + + + def testTokenListLabelReuse2(self): + # check for compilation problem due to multiple defines + # make sure ids has both ID tokens + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a returns [result] : ids+=ID^ ids+=ID {$result = "id list=["+",".join([t.text for t in $ids])+'],';} ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b") + expecting = "id list=[a,b],(a b)" + self.assertEquals(expecting, found) + + + def testTokenListLabelRuleRoot(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : id+=ID^ ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a") + self.assertEquals("a", found) + + + def testTokenListLabelBang(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : id+=ID! ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a") + self.assertEquals("", found) + + + def testRuleListLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a returns [result]: x+=b x+=b { + t=$x[1] + $result = "2nd x="+t.toStringTree()+','; + }; + b : ID; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b") + self.assertEquals("2nd x=b,a b", found) + + + def testRuleListLabelRuleRoot(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a returns [result] : ( x+=b^ )+ { + $result = "x="+$x[1].toStringTree()+','; + } ; + b : ID; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b") + self.assertEquals("x=(b a),(b a)", found) + + + def testRuleListLabelBang(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a returns [result] : x+=b! x+=b { + $result = "1st x="+$x[0].toStringTree()+','; + } ; + b : ID; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b") + self.assertEquals("1st x=a,b", found) + + + def testComplicatedMelange(self): + # check for compilation problem + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : A b=B b=B c+=C c+=C D {s = $D.text} ; + A : 'a' ; + B : 'b' ; + C : 'c' ; + D : 'd' ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b b c c d") + self.assertEquals("a b b c c d", found) + + + def testReturnValueWithAST(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + a returns [result] : ID b { $result = str($b.i) + '\n';} ; + b returns [i] : INT {$i=int($INT.text);} ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "abc 34") + self.assertEquals("34\nabc 34", found) + + + def testSetLoop(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { language=Python;output=AST; } + r : (INT|ID)+ ; + ID : 'a'..'z' + ; + INT : '0'..'9' +; + WS: (' ' | '\n' | '\\t')+ {$channel = HIDDEN;}; + ''') + + found = self.execParser(grammar, "r", "abc 34 d") + self.assertEquals("abc 34 d", found) + + + def testExtraTokenInSimpleDecl(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + decl : type^ ID '='! INT ';'! ; + type : 'int' | 'float' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found, errors = self.execParser(grammar, "decl", "int 34 x=1;", + expectErrors=True) + self.assertEquals(["line 1:4 extraneous input u'34' expecting ID"], + errors) + self.assertEquals("(int x 1)", found) # tree gets correct x and 1 tokens + + + def testMissingIDInSimpleDecl(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + tokens {EXPR;} + decl : type^ ID '='! INT ';'! ; + type : 'int' | 'float' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found, errors = self.execParser(grammar, "decl", "int =1;", + expectErrors=True) + self.assertEquals(["line 1:4 missing ID at u'='"], errors) + self.assertEquals("(int 1)", found) # tree gets invented ID token + + + def testMissingSetInSimpleDecl(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + tokens {EXPR;} + decl : type^ ID '='! INT ';'! ; + type : 'int' | 'float' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found, errors = self.execParser(grammar, "decl", "x=1;", + expectErrors=True) + self.assertEquals(["line 1:0 mismatched input u'x' expecting set None"], errors) + self.assertEquals("( x 1)", found) # tree gets invented ID token + + + def testMissingTokenGivesErrorNode(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + a : ID INT ; // follow is EOF + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found, errors = self.execParser(grammar, "a", "abc", expectErrors=True) + self.assertEquals(["line 0:-1 missing INT at ''"], errors) + self.assertEquals("abc ", found) + + + def testMissingTokenGivesErrorNodeInInvokedRule(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + a : b ; + b : ID INT ; // follow should see EOF + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found, errors = self.execParser(grammar, "a", "abc", expectErrors=True) + self.assertEquals(["line 0:-1 mismatched input '' expecting INT"], errors) + self.assertEquals(", resync=abc>", found) + + + def testExtraTokenGivesErrorNode(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + a : b c ; + b : ID ; + c : INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found, errors = self.execParser(grammar, "a", "abc ick 34", + expectErrors=True) + self.assertEquals(["line 1:4 extraneous input u'ick' expecting INT"], + errors) + self.assertEquals("abc 34", found) + + + def testMissingFirstTokenGivesErrorNode(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + a : ID INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found, errors = self.execParser(grammar, "a", "34", expectErrors=True) + self.assertEquals(["line 1:0 missing ID at u'34'"], errors) + self.assertEquals(" 34", found) + + + def testMissingFirstTokenGivesErrorNode2(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + a : b c ; + b : ID ; + c : INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found, errors = self.execParser(grammar, "a", "34", expectErrors=True) + + # finds an error at the first token, 34, and re-syncs. + # re-synchronizing does not consume a token because 34 follows + # ref to rule b (start of c). It then matches 34 in c. + self.assertEquals(["line 1:0 missing ID at u'34'"], errors) + self.assertEquals(" 34", found) + + + def testNoViableAltGivesErrorNode(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + a : b | c ; + b : ID ; + c : INT ; + ID : 'a'..'z'+ ; + S : '*' ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found, errors = self.execParser(grammar, "a", "*", expectErrors=True) + self.assertEquals(["line 1:0 no viable alternative at input u'*'"], + errors) + self.assertEquals(",1:0], resync=*>", + found) + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t058rewriteAST.py b/antlr-3.1.3/runtime/Python/tests/t058rewriteAST.py new file mode 100644 index 0000000..2ebc5cb --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t058rewriteAST.py @@ -0,0 +1,1518 @@ +import unittest +import textwrap +import antlr3 +import antlr3.tree +import testbase +import sys + +class TestRewriteAST(testbase.ANTLRTest): + def parserClass(self, base): + class TParser(base): + def __init__(self, *args, **kwargs): + base.__init__(self, *args, **kwargs) + + self._errors = [] + self._output = "" + + + def capture(self, t): + self._output += t + + + def traceIn(self, ruleName, ruleIndex): + self.traces.append('>'+ruleName) + + + def traceOut(self, ruleName, ruleIndex): + self.traces.append('<'+ruleName) + + + def emitErrorMessage(self, msg): + self._errors.append(msg) + + + return TParser + + + def lexerClass(self, base): + class TLexer(base): + def __init__(self, *args, **kwargs): + base.__init__(self, *args, **kwargs) + + self._output = "" + + + def capture(self, t): + self._output += t + + + def traceIn(self, ruleName, ruleIndex): + self.traces.append('>'+ruleName) + + + def traceOut(self, ruleName, ruleIndex): + self.traces.append('<'+ruleName) + + + def recover(self, input, re): + # no error recovery yet, just crash! + raise + + return TLexer + + + def execParser(self, grammar, grammarEntry, input, expectErrors=False): + lexerCls, parserCls = self.compileInlineGrammar(grammar) + + cStream = antlr3.StringStream(input) + lexer = lexerCls(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = parserCls(tStream) + r = getattr(parser, grammarEntry)() + + if not expectErrors: + self.assertEquals(len(parser._errors), 0, parser._errors) + + result = "" + + if r is not None: + if hasattr(r, 'result'): + result += r.result + + if r.tree is not None: + result += r.tree.toStringTree() + + if not expectErrors: + return result + + else: + return result, parser._errors + + + def execTreeParser(self, grammar, grammarEntry, treeGrammar, treeEntry, input): + lexerCls, parserCls = self.compileInlineGrammar(grammar) + walkerCls = self.compileInlineGrammar(treeGrammar) + + cStream = antlr3.StringStream(input) + lexer = lexerCls(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = parserCls(tStream) + r = getattr(parser, grammarEntry)() + nodes = antlr3.tree.CommonTreeNodeStream(r.tree) + nodes.setTokenStream(tStream) + walker = walkerCls(nodes) + r = getattr(walker, treeEntry)() + + if r is not None: + return r.tree.toStringTree() + + return "" + + + def testDelete(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID INT -> ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "abc 34") + self.assertEquals("", found) + + + def testSingleToken(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID -> ID; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "abc") + self.assertEquals("abc", found) + + + def testSingleTokenToNewNode(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID -> ID["x"]; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "abc") + self.assertEquals("x", found) + + + def testSingleTokenToNewNodeRoot(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID -> ^(ID["x"] INT); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "abc") + self.assertEquals("(x INT)", found) + + + def testSingleTokenToNewNode2(self): + # Allow creation of new nodes w/o args. + grammar = textwrap.dedent( + r''' + grammar TT; + options {language=Python;output=AST;} + a : ID -> ID[ ]; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "abc") + self.assertEquals("ID", found) + + + def testSingleCharLiteral(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : 'c' -> 'c'; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "c") + self.assertEquals("c", found) + + + def testSingleStringLiteral(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : 'ick' -> 'ick'; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "ick") + self.assertEquals("ick", found) + + + def testSingleRule(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : b -> b; + b : ID ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "abc") + self.assertEquals("abc", found) + + + def testReorderTokens(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID INT -> INT ID; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "abc 34") + self.assertEquals("34 abc", found) + + + def testReorderTokenAndRule(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : b INT -> INT b; + b : ID ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "abc 34") + self.assertEquals("34 abc", found) + + + def testTokenTree(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID INT -> ^(INT ID); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "abc 34") + self.assertEquals("(34 abc)", found) + + + def testTokenTreeAfterOtherStuff(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : 'void' ID INT -> 'void' ^(INT ID); + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "void abc 34") + self.assertEquals("void (34 abc)", found) + + + def testNestedTokenTreeWithOuterLoop(self): + # verify that ID and INT both iterate over outer index variable + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {DUH;} + a : ID INT ID INT -> ^( DUH ID ^( DUH INT) )+ ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a 1 b 2") + self.assertEquals("(DUH a (DUH 1)) (DUH b (DUH 2))", found) + + + def testOptionalSingleToken(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID -> ID? ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "abc") + self.assertEquals("abc", found) + + + def testClosureSingleToken(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID ID -> ID* ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b") + self.assertEquals("a b", found) + + + def testPositiveClosureSingleToken(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID ID -> ID+ ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b") + self.assertEquals("a b", found) + + + def testOptionalSingleRule(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : b -> b?; + b : ID ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "abc") + self.assertEquals("abc", found) + + + def testClosureSingleRule(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : b b -> b*; + b : ID ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b") + self.assertEquals("a b", found) + + + def testClosureOfLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : x+=b x+=b -> $x*; + b : ID ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b") + self.assertEquals("a b", found) + + + def testOptionalLabelNoListLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : (x=ID)? -> $x?; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a") + self.assertEquals("a", found) + + + def testPositiveClosureSingleRule(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : b b -> b+; + b : ID ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b") + self.assertEquals("a b", found) + + + def testSinglePredicateT(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID -> {True}? ID -> ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "abc") + self.assertEquals("abc", found) + + + def testSinglePredicateF(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID -> {False}? ID -> ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "abc") + self.assertEquals("", found) + + + def testMultiplePredicate(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID INT -> {False}? ID + -> {True}? INT + -> + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a 2") + self.assertEquals("2", found) + + + def testMultiplePredicateTrees(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID INT -> {False}? ^(ID INT) + -> {True}? ^(INT ID) + -> ID + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a 2") + self.assertEquals("(2 a)", found) + + + def testSimpleTree(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : op INT -> ^(op INT); + op : '+'|'-' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "-34") + self.assertEquals("(- 34)", found) + + + def testSimpleTree2(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : op INT -> ^(INT op); + op : '+'|'-' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "+ 34") + self.assertEquals("(34 +)", found) + + + + def testNestedTrees(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : 'var' (ID ':' type ';')+ -> ^('var' ^(':' ID type)+) ; + type : 'int' | 'float' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "var a:int; b:float;") + self.assertEquals("(var (: a int) (: b float))", found) + + + def testImaginaryTokenCopy(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {VAR;} + a : ID (',' ID)*-> ^(VAR ID)+ ; + type : 'int' | 'float' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a,b,c") + self.assertEquals("(VAR a) (VAR b) (VAR c)", found) + + + def testTokenUnreferencedOnLeftButDefined(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {VAR;} + a : b -> ID ; + b : ID ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a") + self.assertEquals("ID", found) + + + def testImaginaryTokenCopySetText(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {VAR;} + a : ID (',' ID)*-> ^(VAR["var"] ID)+ ; + type : 'int' | 'float' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a,b,c") + self.assertEquals("(var a) (var b) (var c)", found) + + + def testImaginaryTokenNoCopyFromToken(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : lc='{' ID+ '}' -> ^(BLOCK[$lc] ID+) ; + type : 'int' | 'float' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "{a b c}") + self.assertEquals("({ a b c)", found) + + + def testImaginaryTokenNoCopyFromTokenSetText(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : lc='{' ID+ '}' -> ^(BLOCK[$lc,"block"] ID+) ; + type : 'int' | 'float' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "{a b c}") + self.assertEquals("(block a b c)", found) + + + def testMixedRewriteAndAutoAST(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : b b^ ; // 2nd b matches only an INT; can make it root + b : ID INT -> INT ID + | INT + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a 1 2") + self.assertEquals("(2 1 a)", found) + + + def testSubruleWithRewrite(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : b b ; + b : (ID INT -> INT ID | INT INT -> INT+ ) + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a 1 2 3") + self.assertEquals("1 a 2 3", found) + + + def testSubruleWithRewrite2(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {TYPE;} + a : b b ; + b : 'int' + ( ID -> ^(TYPE 'int' ID) + | ID '=' INT -> ^(TYPE 'int' ID INT) + ) + ';' + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "int a; int b=3;") + self.assertEquals("(TYPE int a) (TYPE int b 3)", found) + + + def testNestedRewriteShutsOffAutoAST(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : b b ; + b : ID ( ID (last=ID -> $last)+ ) ';' // get last ID + | INT // should still get auto AST construction + ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b c d; 42") + self.assertEquals("d 42", found) + + + def testRewriteActions(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : atom -> ^({self.adaptor.create(INT,"9")} atom) ; + atom : INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "3") + self.assertEquals("(9 3)", found) + + + def testRewriteActions2(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : atom -> {self.adaptor.create(INT,"9")} atom ; + atom : INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "3") + self.assertEquals("9 3", found) + + + def testRefToOldValue(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : (atom -> atom) (op='+' r=atom -> ^($op $a $r) )* ; + atom : INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "3+4+5") + self.assertEquals("(+ (+ 3 4) 5)", found) + + + def testCopySemanticsForRules(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : atom -> ^(atom atom) ; // NOT CYCLE! (dup atom) + atom : INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "3") + self.assertEquals("(3 3)", found) + + + def testCopySemanticsForRules2(self): + # copy type as a root for each invocation of (...)+ in rewrite + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : type ID (',' ID)* ';' -> ^(type ID)+ ; + type : 'int' ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "int a,b,c;") + self.assertEquals("(int a) (int b) (int c)", found) + + + def testCopySemanticsForRules3(self): + # copy type *and* modifier even though it's optional + # for each invocation of (...)+ in rewrite + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : modifier? type ID (',' ID)* ';' -> ^(type modifier? ID)+ ; + type : 'int' ; + modifier : 'public' ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "public int a,b,c;") + self.assertEquals("(int public a) (int public b) (int public c)", found) + + + def testCopySemanticsForRules3Double(self): + # copy type *and* modifier even though it's optional + # for each invocation of (...)+ in rewrite + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : modifier? type ID (',' ID)* ';' -> ^(type modifier? ID)+ ^(type modifier? ID)+ ; + type : 'int' ; + modifier : 'public' ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "public int a,b,c;") + self.assertEquals("(int public a) (int public b) (int public c) (int public a) (int public b) (int public c)", found) + + + def testCopySemanticsForRules4(self): + # copy type *and* modifier even though it's optional + # for each invocation of (...)+ in rewrite + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {MOD;} + a : modifier? type ID (',' ID)* ';' -> ^(type ^(MOD modifier)? ID)+ ; + type : 'int' ; + modifier : 'public' ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "public int a,b,c;") + self.assertEquals("(int (MOD public) a) (int (MOD public) b) (int (MOD public) c)", found) + + + def testCopySemanticsLists(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {MOD;} + a : ID (',' ID)* ';' -> ID+ ID+ ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a,b,c;") + self.assertEquals("a b c a b c", found) + + + def testCopyRuleLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : x=b -> $x $x; + b : ID ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a") + self.assertEquals("a a", found) + + + def testCopyRuleLabel2(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : x=b -> ^($x $x); + b : ID ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a") + self.assertEquals("(a a)", found) + + + def testQueueingOfTokens(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : 'int' ID (',' ID)* ';' -> ^('int' ID+) ; + op : '+'|'-' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "int a,b,c;") + self.assertEquals("(int a b c)", found) + + + def testCopyOfTokens(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : 'int' ID ';' -> 'int' ID 'int' ID ; + op : '+'|'-' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "int a;") + self.assertEquals("int a int a", found) + + + def testTokenCopyInLoop(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : 'int' ID (',' ID)* ';' -> ^('int' ID)+ ; + op : '+'|'-' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "int a,b,c;") + self.assertEquals("(int a) (int b) (int c)", found) + + + def testTokenCopyInLoopAgainstTwoOthers(self): + # must smear 'int' copies across as root of multiple trees + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : 'int' ID ':' INT (',' ID ':' INT)* ';' -> ^('int' ID INT)+ ; + op : '+'|'-' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "int a:1,b:2,c:3;") + self.assertEquals("(int a 1) (int b 2) (int c 3)", found) + + + def testListRefdOneAtATime(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID+ -> ID ID ID ; // works if 3 input IDs + op : '+'|'-' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b c") + self.assertEquals("a b c", found) + + + def testSplitListWithLabels(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {VAR;} + a : first=ID others+=ID* -> $first VAR $others+ ; + op : '+'|'-' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b c") + self.assertEquals("a VAR b c", found) + + + def testComplicatedMelange(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : A A b=B B b=B c+=C C c+=C D {s=$D.text} -> A+ B+ C+ D ; + type : 'int' | 'float' ; + A : 'a' ; + B : 'b' ; + C : 'c' ; + D : 'd' ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a a b b b c c c d") + self.assertEquals("a a b b b c c c d", found) + + + def testRuleLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : x=b -> $x; + b : ID ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a") + self.assertEquals("a", found) + + + def testAmbiguousRule(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID a -> a | INT ; + ID : 'a'..'z'+ ; + INT: '0'..'9'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, + "a", "abc 34") + self.assertEquals("34", found) + + + def testRuleListLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : x+=b x+=b -> $x+; + b : ID ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b") + self.assertEquals("a b", found) + + + def testRuleListLabel2(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : x+=b x+=b -> $x $x*; + b : ID ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b") + self.assertEquals("a b", found) + + + def testOptional(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : x=b (y=b)? -> $x $y?; + b : ID ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a") + self.assertEquals("a", found) + + + def testOptional2(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : x=ID (y=b)? -> $x $y?; + b : ID ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b") + self.assertEquals("a b", found) + + + def testOptional3(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : x=ID (y=b)? -> ($x $y)?; + b : ID ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b") + self.assertEquals("a b", found) + + + def testOptional4(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : x+=ID (y=b)? -> ($x $y)?; + b : ID ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b") + self.assertEquals("a b", found) + + + def testOptional5(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : ID -> ID? ; // match an ID to optional ID + b : ID ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a") + self.assertEquals("a", found) + + + def testArbitraryExprType(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : x+=b x+=b -> {CommonTree(None)}; + b : ID ; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "a b") + self.assertEquals("", found) + + + def testSet(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a: (INT|ID)+ -> INT+ ID+ ; + INT: '0'..'9'+; + ID : 'a'..'z'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "2 a 34 de") + self.assertEquals("2 34 a de", found) + + + def testSet2(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a: (INT|ID) -> INT? ID? ; + INT: '0'..'9'+; + ID : 'a'..'z'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "2") + self.assertEquals("2", found) + + + @testbase.broken("http://www.antlr.org:8888/browse/ANTLR-162", + antlr3.tree.RewriteEmptyStreamException) + def testSetWithLabel(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : x=(INT|ID) -> $x ; + INT: '0'..'9'+; + ID : 'a'..'z'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "2") + self.assertEquals("2", found) + + + def testRewriteAction(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens { FLOAT; } + r + : INT -> {CommonTree(CommonToken(type=FLOAT, text=$INT.text+".0"))} + ; + INT : '0'..'9'+; + WS: (' ' | '\n' | '\t')+ {$channel = HIDDEN;}; + ''') + + found = self.execParser(grammar, "r", "25") + self.assertEquals("25.0", found) + + + def testOptionalSubruleWithoutRealElements(self): + # copy type *and* modifier even though it's optional + # for each invocation of (...)+ in rewrite + grammar = textwrap.dedent( + r""" + grammar T; + options {language=Python;output=AST;} + tokens {PARMS;} + + modulo + : 'modulo' ID ('(' parms+ ')')? -> ^('modulo' ID ^(PARMS parms+)?) + ; + parms : '#'|ID; + ID : ('a'..'z' | 'A'..'Z')+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + """) + + found = self.execParser(grammar, "modulo", "modulo abc (x y #)") + self.assertEquals("(modulo abc (PARMS x y #))", found) + + + ## C A R D I N A L I T Y I S S U E S + + def testCardinality(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + tokens {BLOCK;} + a : ID ID INT INT INT -> (ID INT)+; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + try: + self.execParser(grammar, "a", "a b 3 4 5") + self.fail() + except antlr3.tree.RewriteCardinalityException: + pass + + + def testCardinality2(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID+ -> ID ID ID ; // only 2 input IDs + op : '+'|'-' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + try: + self.execParser(grammar, "a", "a b") + self.fail() + except antlr3.tree.RewriteCardinalityException: + pass + + + def testCardinality3(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID? INT -> ID INT ; + op : '+'|'-' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + try: + self.execParser(grammar, "a", "3") + self.fail() + except antlr3.tree.RewriteEmptyStreamException: + pass + + + def testLoopCardinality(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID? INT -> ID+ INT ; + op : '+'|'-' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + try: + self.execParser(grammar, "a", "3") + self.fail() + except antlr3.tree.RewriteEarlyExitException: + pass + + + def testWildcard(self): + grammar = textwrap.dedent( + r''' + grammar T; + options {language=Python;output=AST;} + a : ID c=. -> $c; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found = self.execParser(grammar, "a", "abc 34") + self.assertEquals("34", found) + + + # E R R O R S + + def testExtraTokenInSimpleDecl(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + tokens {EXPR;} + decl : type ID '=' INT ';' -> ^(EXPR type ID INT) ; + type : 'int' | 'float' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found, errors = self.execParser(grammar, "decl", "int 34 x=1;", + expectErrors=True) + self.assertEquals(["line 1:4 extraneous input u'34' expecting ID"], + errors) + self.assertEquals("(EXPR int x 1)", found) # tree gets correct x and 1 tokens + + + #@testbase.broken("FIXME", AssertionError) + def testMissingIDInSimpleDecl(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + tokens {EXPR;} + decl : type ID '=' INT ';' -> ^(EXPR type ID INT) ; + type : 'int' | 'float' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found, errors = self.execParser(grammar, "decl", "int =1;", + expectErrors=True) + self.assertEquals(["line 1:4 missing ID at u'='"], errors) + self.assertEquals("(EXPR int 1)", found) # tree gets invented ID token + + + def testMissingSetInSimpleDecl(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + tokens {EXPR;} + decl : type ID '=' INT ';' -> ^(EXPR type ID INT) ; + type : 'int' | 'float' ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found, errors = self.execParser(grammar, "decl", "x=1;", + expectErrors=True) + self.assertEquals(["line 1:0 mismatched input u'x' expecting set None"], + errors); + self.assertEquals("(EXPR x 1)", found) # tree gets invented ID token + + + #@testbase.broken("FIXME", AssertionError) + def testMissingTokenGivesErrorNode(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + a : ID INT -> ID INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found, errors = self.execParser(grammar, "a", "abc", + expectErrors=True) + self.assertEquals(["line 0:-1 missing INT at ''"], errors) + # doesn't do in-line recovery for sets (yet?) + self.assertEquals("abc ", found) + + + def testExtraTokenGivesErrorNode(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + a : b c -> b c; + b : ID -> ID ; + c : INT -> INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found, errors = self.execParser(grammar, "a", "abc ick 34", + expectErrors=True) + self.assertEquals(["line 1:4 extraneous input u'ick' expecting INT"], + errors) + self.assertEquals("abc 34", found) + + + #@testbase.broken("FIXME", AssertionError) + def testMissingFirstTokenGivesErrorNode(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + a : ID INT -> ID INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found, errors = self.execParser(grammar, "a", "34", expectErrors=True) + self.assertEquals(["line 1:0 missing ID at u'34'"], errors) + self.assertEquals(" 34", found) + + + #@testbase.broken("FIXME", AssertionError) + def testMissingFirstTokenGivesErrorNode2(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + a : b c -> b c; + b : ID -> ID ; + c : INT -> INT ; + ID : 'a'..'z'+ ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found, errors = self.execParser(grammar, "a", "34", expectErrors=True) + # finds an error at the first token, 34, and re-syncs. + # re-synchronizing does not consume a token because 34 follows + # ref to rule b (start of c). It then matches 34 in c. + self.assertEquals(["line 1:0 missing ID at u'34'"], errors) + self.assertEquals(" 34", found) + + + def testNoViableAltGivesErrorNode(self): + grammar = textwrap.dedent( + r''' + grammar foo; + options {language=Python;output=AST;} + a : b -> b | c -> c; + b : ID -> ID ; + c : INT -> INT ; + ID : 'a'..'z'+ ; + S : '*' ; + INT : '0'..'9'+; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + found, errors = self.execParser(grammar, "a", "*", expectErrors=True) + # finds an error at the first token, 34, and re-syncs. + # re-synchronizing does not consume a token because 34 follows + # ref to rule b (start of c). It then matches 34 in c. + self.assertEquals(["line 1:0 no viable alternative at input u'*'"], + errors); + self.assertEquals(",1:0], resync=*>", + found) + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/t059debug.py b/antlr-3.1.3/runtime/Python/tests/t059debug.py new file mode 100644 index 0000000..0e15fd8 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/t059debug.py @@ -0,0 +1,770 @@ +import unittest +import textwrap +import antlr3 +import antlr3.tree +import antlr3.debug +import testbase +import sys +import threading +import socket +import errno +import time + +class Debugger(threading.Thread): + def __init__(self, port): + super(Debugger, self).__init__() + self.events = [] + self.success = False + self.port = port + + def run(self): + # create listening socket + while True: + try: + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.connect(('127.0.0.1', self.port)) + break + except socket.error, exc: + if exc.args[0] != errno.ECONNREFUSED: + raise + time.sleep(0.1) + + s.setblocking(1) + + output = s.makefile('w', 0) + input = s.makefile('r', 0) + + # handshake + l = input.readline().strip() + assert l == 'ANTLR 2' + l = input.readline().strip() + assert l.startswith('grammar "') + + output.write('ACK\n') + output.flush() + + while True: + event = input.readline().strip() + self.events.append(event.split('\t')) + + output.write('ACK\n') + output.flush() + + if event == 'terminate': + break + + s.close() + self.success = True + + +class T(testbase.ANTLRTest): + def execParser(self, grammar, grammarEntry, input, listener, + parser_args={}): + if listener is None: + port = 49100 + debugger = Debugger(port) + debugger.start() + # TODO(pink): install alarm, so it doesn't hang forever in case of a bug + + else: + port = None + + try: + lexerCls, parserCls = self.compileInlineGrammar( + grammar, options='-debug') + + cStream = antlr3.StringStream(input) + lexer = lexerCls(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = parserCls(tStream, dbg=listener, port=port, **parser_args) + getattr(parser, grammarEntry)() + + finally: + if listener is None: + debugger.join() + return debugger + + def testBasicParser(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + } + a : ID EOF; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + listener = antlr3.debug.RecordDebugEventListener() + + self.execParser( + grammar, 'a', + input="a", + listener=listener) + + # We only check that some LT events are present. How many is subject + # to change (at the time of writing there are two, which is one too + # many). + lt_events = [event for event in listener.events + if event.startswith("LT ")] + self.assertNotEqual(lt_events, []) + + # For the rest, filter out LT events to get a reliable test. + expected = ["enterRule a", + "location 6:1", + "location 6:5", + "location 6:8", + "location 6:11", + "exitRule a"] + found = [event for event in listener.events + if not event.startswith("LT ")] + self.assertEqual(found, expected) + + def testSocketProxy(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + } + a : ID EOF; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + debugger = self.execParser( + grammar, 'a', + input="a", + listener=None) + + self.assertTrue(debugger.success) + expected = [['enterRule', 'T.g', 'a'], + ['location', '6', '1'], + ['enterAlt', '1'], + ['location', '6', '5'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['consumeToken', '0', '4', '0', '1', '0', '"a'], + ['location', '6', '8'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['consumeToken', '-1', '-1', '0', '0', '-1', '"'], + ['location', '6', '11'], + ['exitRule', 'T.g', 'a'], + ['terminate']] + + self.assertEqual(debugger.events, expected) + + def testRecognitionException(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + } + a : ID EOF; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + debugger = self.execParser( + grammar, 'a', + input="a b", + listener=None) + + self.assertTrue(debugger.success) + expected = [['enterRule', 'T.g', 'a'], + ['location', '6', '1'], + ['enterAlt', '1'], + ['location', '6', '5'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['consumeToken', '0', '4', '0', '1', '0', '"a'], + ['consumeHiddenToken', '1', '5', '99', '1', '1', '"'], + ['location', '6', '8'], + ['LT', '1', '2', '4', '0', '1', '2', '"b'], + ['LT', '1', '2', '4', '0', '1', '2', '"b'], + ['LT', '2', '-1', '-1', '0', '0', '-1', '"'], + ['LT', '1', '2', '4', '0', '1', '2', '"b'], + ['LT', '1', '2', '4', '0', '1', '2', '"b'], + ['beginResync'], + ['consumeToken', '2', '4', '0', '1', '2', '"b'], + ['endResync'], + ['exception', 'UnwantedTokenException', '2', '1', '2'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['consumeToken', '-1', '-1', '0', '0', '-1', '"'], + ['location', '6', '11'], + ['exitRule', 'T.g', 'a'], + ['terminate']] + + self.assertEqual(debugger.events, expected) + + + def testSemPred(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + } + a : {True}? ID EOF; + ID : 'a'..'z'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + debugger = self.execParser( + grammar, 'a', + input="a", + listener=None) + + self.assertTrue(debugger.success) + expected = [['enterRule', 'T.g', 'a'], + ['location', '6', '1'], + ['enterAlt', '1'], + ['location', '6', '5'], + ['semanticPredicate', '1', 'True'], + ['location', '6', '13'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['consumeToken', '0', '4', '0', '1', '0', '"a'], + ['location', '6', '16'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['consumeToken', '-1', '-1', '0', '0', '-1', '"'], + ['location', '6', '19'], + ['exitRule', 'T.g', 'a'], + ['terminate']] + + self.assertEqual(debugger.events, expected) + + + def testPositiveClosureBlock(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + } + a : ID ( ID | INT )+ EOF; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + debugger = self.execParser( + grammar, 'a', + input="a 1 b c 3", + listener=None) + + self.assertTrue(debugger.success) + expected = [['enterRule', 'T.g', 'a'], + ['location', '6', '1'], + ['enterAlt', '1'], + ['location', '6', '5'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['consumeToken', '0', '4', '0', '1', '0', '"a'], + ['consumeHiddenToken', '1', '6', '99', '1', '1', '"'], + ['location', '6', '8'], + ['enterSubRule', '1'], + ['enterDecision', '1'], + ['LT', '1', '2', '5', '0', '1', '2', '"1'], + ['exitDecision', '1'], + ['enterAlt', '1'], + ['location', '6', '8'], + ['LT', '1', '2', '5', '0', '1', '2', '"1'], + ['consumeToken', '2', '5', '0', '1', '2', '"1'], + ['consumeHiddenToken', '3', '6', '99', '1', '3', '"'], + ['enterDecision', '1'], + ['LT', '1', '4', '4', '0', '1', '4', '"b'], + ['exitDecision', '1'], + ['enterAlt', '1'], + ['location', '6', '8'], + ['LT', '1', '4', '4', '0', '1', '4', '"b'], + ['consumeToken', '4', '4', '0', '1', '4', '"b'], + ['consumeHiddenToken', '5', '6', '99', '1', '5', '"'], + ['enterDecision', '1'], + ['LT', '1', '6', '4', '0', '1', '6', '"c'], + ['exitDecision', '1'], + ['enterAlt', '1'], + ['location', '6', '8'], + ['LT', '1', '6', '4', '0', '1', '6', '"c'], + ['consumeToken', '6', '4', '0', '1', '6', '"c'], + ['consumeHiddenToken', '7', '6', '99', '1', '7', '"'], + ['enterDecision', '1'], + ['LT', '1', '8', '5', '0', '1', '8', '"3'], + ['exitDecision', '1'], + ['enterAlt', '1'], + ['location', '6', '8'], + ['LT', '1', '8', '5', '0', '1', '8', '"3'], + ['consumeToken', '8', '5', '0', '1', '8', '"3'], + ['enterDecision', '1'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['exitDecision', '1'], + ['exitSubRule', '1'], + ['location', '6', '22'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['consumeToken', '-1', '-1', '0', '0', '-1', '"'], + ['location', '6', '25'], + ['exitRule', 'T.g', 'a'], + ['terminate']] + + self.assertEqual(debugger.events, expected) + + + def testClosureBlock(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + } + a : ID ( ID | INT )* EOF; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + debugger = self.execParser( + grammar, 'a', + input="a 1 b c 3", + listener=None) + + self.assertTrue(debugger.success) + expected = [['enterRule', 'T.g', 'a'], + ['location', '6', '1'], + ['enterAlt', '1'], + ['location', '6', '5'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['consumeToken', '0', '4', '0', '1', '0', '"a'], + ['consumeHiddenToken', '1', '6', '99', '1', '1', '"'], + ['location', '6', '8'], + ['enterSubRule', '1'], + ['enterDecision', '1'], + ['LT', '1', '2', '5', '0', '1', '2', '"1'], + ['exitDecision', '1'], + ['enterAlt', '1'], + ['location', '6', '8'], + ['LT', '1', '2', '5', '0', '1', '2', '"1'], + ['consumeToken', '2', '5', '0', '1', '2', '"1'], + ['consumeHiddenToken', '3', '6', '99', '1', '3', '"'], + ['enterDecision', '1'], + ['LT', '1', '4', '4', '0', '1', '4', '"b'], + ['exitDecision', '1'], + ['enterAlt', '1'], + ['location', '6', '8'], + ['LT', '1', '4', '4', '0', '1', '4', '"b'], + ['consumeToken', '4', '4', '0', '1', '4', '"b'], + ['consumeHiddenToken', '5', '6', '99', '1', '5', '"'], + ['enterDecision', '1'], + ['LT', '1', '6', '4', '0', '1', '6', '"c'], + ['exitDecision', '1'], + ['enterAlt', '1'], + ['location', '6', '8'], + ['LT', '1', '6', '4', '0', '1', '6', '"c'], + ['consumeToken', '6', '4', '0', '1', '6', '"c'], + ['consumeHiddenToken', '7', '6', '99', '1', '7', '"'], + ['enterDecision', '1'], + ['LT', '1', '8', '5', '0', '1', '8', '"3'], + ['exitDecision', '1'], + ['enterAlt', '1'], + ['location', '6', '8'], + ['LT', '1', '8', '5', '0', '1', '8', '"3'], + ['consumeToken', '8', '5', '0', '1', '8', '"3'], + ['enterDecision', '1'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['exitDecision', '1'], + ['exitSubRule', '1'], + ['location', '6', '22'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['consumeToken', '-1', '-1', '0', '0', '-1', '"'], + ['location', '6', '25'], + ['exitRule', 'T.g', 'a'], + ['terminate']] + + self.assertEqual(debugger.events, expected) + + + def testMismatchedSetException(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + } + a : ID ( ID | INT ) EOF; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + debugger = self.execParser( + grammar, 'a', + input="a", + listener=None) + + self.assertTrue(debugger.success) + expected = [['enterRule', 'T.g', 'a'], + ['location', '6', '1'], + ['enterAlt', '1'], + ['location', '6', '5'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['consumeToken', '0', '4', '0', '1', '0', '"a'], + ['location', '6', '8'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['exception', 'MismatchedSetException', '1', '0', '-1'], + ['exception', 'MismatchedSetException', '1', '0', '-1'], + ['beginResync'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['endResync'], + ['location', '6', '24'], + ['exitRule', 'T.g', 'a'], + ['terminate']] + + self.assertEqual(debugger.events, expected) + + + def testBlock(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + } + a : ID ( b | c ) EOF; + b : ID; + c : INT; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + debugger = self.execParser( + grammar, 'a', + input="a 1", + listener=None) + + self.assertTrue(debugger.success) + expected = [['enterRule', 'T.g', 'a'], + ['location', '6', '1'], + ['enterAlt', '1'], + ['location', '6', '5'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['consumeToken', '0', '4', '0', '1', '0', '"a'], + ['consumeHiddenToken', '1', '6', '99', '1', '1', '"'], + ['location', '6', '8'], + ['enterSubRule', '1'], + ['enterDecision', '1'], + ['LT', '1', '2', '5', '0', '1', '2', '"1'], + ['exitDecision', '1'], + ['enterAlt', '2'], + ['location', '6', '14'], + ['enterRule', 'T.g', 'c'], + ['location', '8', '1'], + ['enterAlt', '1'], + ['location', '8', '5'], + ['LT', '1', '2', '5', '0', '1', '2', '"1'], + ['LT', '1', '2', '5', '0', '1', '2', '"1'], + ['consumeToken', '2', '5', '0', '1', '2', '"1'], + ['location', '8', '8'], + ['exitRule', 'T.g', 'c'], + ['exitSubRule', '1'], + ['location', '6', '18'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['consumeToken', '-1', '-1', '0', '0', '-1', '"'], + ['location', '6', '21'], + ['exitRule', 'T.g', 'a'], + ['terminate']] + + self.assertEqual(debugger.events, expected) + + + def testNoViableAlt(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + } + a : ID ( b | c ) EOF; + b : ID; + c : INT; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + BANG : '!' ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + debugger = self.execParser( + grammar, 'a', + input="a !", + listener=None) + + self.assertTrue(debugger.success) + expected = [['enterRule', 'T.g', 'a'], + ['location', '6', '1'], + ['enterAlt', '1'], + ['location', '6', '5'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['consumeToken', '0', '4', '0', '1', '0', '"a'], + ['consumeHiddenToken', '1', '7', '99', '1', '1', '"'], + ['location', '6', '8'], + ['enterSubRule', '1'], + ['enterDecision', '1'], + ['LT', '1', '2', '6', '0', '1', '2', '"!'], + ['LT', '1', '2', '6', '0', '1', '2', '"!'], + ['LT', '1', '2', '6', '0', '1', '2', '"!'], + ['exception', 'NoViableAltException', '2', '1', '2'], + ['exitDecision', '1'], + ['exitSubRule', '1'], + ['exception', 'NoViableAltException', '2', '1', '2'], + ['beginResync'], + ['LT', '1', '2', '6', '0', '1', '2', '"!'], + ['consumeToken', '2', '6', '0', '1', '2', '"!'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['endResync'], + ['location', '6', '21'], + ['exitRule', 'T.g', 'a'], + ['terminate']] + + self.assertEqual(debugger.events, expected) + + + def testRuleBlock(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + } + a : b | c; + b : ID; + c : INT; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + debugger = self.execParser( + grammar, 'a', + input="1", + listener=None) + + self.assertTrue(debugger.success) + expected = [['enterRule', 'T.g', 'a'], + ['location', '6', '1'], + ['enterDecision', '1'], + ['LT', '1', '0', '5', '0', '1', '0', '"1'], + ['exitDecision', '1'], + ['enterAlt', '2'], + ['location', '6', '9'], + ['enterRule', 'T.g', 'c'], + ['location', '8', '1'], + ['enterAlt', '1'], + ['location', '8', '5'], + ['LT', '1', '0', '5', '0', '1', '0', '"1'], + ['LT', '1', '0', '5', '0', '1', '0', '"1'], + ['consumeToken', '0', '5', '0', '1', '0', '"1'], + ['location', '8', '8'], + ['exitRule', 'T.g', 'c'], + ['location', '6', '10'], + ['exitRule', 'T.g', 'a'], + ['terminate']] + + self.assertEqual(debugger.events, expected) + + + def testRuleBlockSingleAlt(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + } + a : b; + b : ID; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + debugger = self.execParser( + grammar, 'a', + input="a", + listener=None) + + self.assertTrue(debugger.success) + expected = [['enterRule', 'T.g', 'a'], + ['location', '6', '1'], + ['enterAlt', '1'], + ['location', '6', '5'], + ['enterRule', 'T.g', 'b'], + ['location', '7', '1'], + ['enterAlt', '1'], + ['location', '7', '5'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['consumeToken', '0', '4', '0', '1', '0', '"a'], + ['location', '7', '7'], + ['exitRule', 'T.g', 'b'], + ['location', '6', '6'], + ['exitRule', 'T.g', 'a'], + ['terminate']] + + self.assertEqual(debugger.events, expected) + + + def testBlockSingleAlt(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + } + a : ( b ); + b : ID; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + debugger = self.execParser( + grammar, 'a', + input="a", + listener=None) + + self.assertTrue(debugger.success) + expected = [['enterRule', 'T.g', 'a'], + ['location', '6', '1'], + ['enterAlt', '1'], + ['location', '6', '5'], + ['enterAlt', '1'], + ['location', '6', '7'], + ['enterRule', 'T.g', 'b'], + ['location', '7', '1'], + ['enterAlt', '1'], + ['location', '7', '5'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['consumeToken', '0', '4', '0', '1', '0', '"a'], + ['location', '7', '7'], + ['exitRule', 'T.g', 'b'], + ['location', '6', '10'], + ['exitRule', 'T.g', 'a'], + ['terminate']] + + self.assertEqual(debugger.events, expected) + + + def testDFA(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + } + a : ( b | c ) EOF; + b : ID* INT; + c : ID+ BANG; + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + BANG : '!'; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + debugger = self.execParser( + grammar, 'a', + input="a!", + listener=None) + + self.assertTrue(debugger.success) + expected = [['enterRule', 'T.g', 'a'], + ['location', '6', '1'], + ['enterAlt', '1'], + ['location', '6', '5'], + ['enterSubRule', '1'], + ['enterDecision', '1'], + ['mark', '0'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['consumeToken', '0', '4', '0', '1', '0', '"a'], + ['LT', '1', '1', '6', '0', '1', '1', '"!'], + ['consumeToken', '1', '6', '0', '1', '1', '"!'], + ['rewind', '0'], + ['exitDecision', '1'], + ['enterAlt', '2'], + ['location', '6', '11'], + ['enterRule', 'T.g', 'c'], + ['location', '8', '1'], + ['enterAlt', '1'], + ['location', '8', '5'], + ['enterSubRule', '3'], + ['enterDecision', '3'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['exitDecision', '3'], + ['enterAlt', '1'], + ['location', '8', '5'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['LT', '1', '0', '4', '0', '1', '0', '"a'], + ['consumeToken', '0', '4', '0', '1', '0', '"a'], + ['enterDecision', '3'], + ['LT', '1', '1', '6', '0', '1', '1', '"!'], + ['exitDecision', '3'], + ['exitSubRule', '3'], + ['location', '8', '9'], + ['LT', '1', '1', '6', '0', '1', '1', '"!'], + ['LT', '1', '1', '6', '0', '1', '1', '"!'], + ['consumeToken', '1', '6', '0', '1', '1', '"!'], + ['location', '8', '13'], + ['exitRule', 'T.g', 'c'], + ['exitSubRule', '1'], + ['location', '6', '15'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['LT', '1', '-1', '-1', '0', '0', '-1', '"'], + ['consumeToken', '-1', '-1', '0', '0', '-1', '"'], + ['location', '6', '18'], + ['exitRule', 'T.g', 'a'], + ['terminate']] + + self.assertEqual(debugger.events, expected) + + + def testBasicAST(self): + grammar = textwrap.dedent( + r''' + grammar T; + options { + language=Python; + output=AST; + } + a : ( b | c ) EOF!; + b : ID* INT -> ^(INT ID*); + c : ID+ BANG -> ^(BANG ID+); + ID : 'a'..'z'+ ; + INT : '0'..'9'+ ; + BANG : '!'; + WS : (' '|'\n') {$channel=HIDDEN;} ; + ''') + + listener = antlr3.debug.RecordDebugEventListener() + + self.execParser( + grammar, 'a', + input="a!", + listener=listener) + + # don't check output for now (too dynamic), I'm satisfied if it + # doesn't crash + + +if __name__ == '__main__': + unittest.main() diff --git a/antlr-3.1.3/runtime/Python/tests/testbase.py b/antlr-3.1.3/runtime/Python/tests/testbase.py new file mode 100644 index 0000000..c0f0bed --- /dev/null +++ b/antlr-3.1.3/runtime/Python/tests/testbase.py @@ -0,0 +1,429 @@ +import unittest +import imp +import os +import errno +import sys +import glob +import re +import tempfile +import shutil +import inspect +from distutils.errors import * +import antlr3 + +def unlink(path): + try: + os.unlink(path) + except OSError, exc: + if exc.errno != errno.ENOENT: + raise + + +# At least on MacOSX tempdir (/tmp) is a symlink. It's sometimes dereferences, +# sometimes not, breaking the inspect.getmodule() function. +testbasedir = os.path.join( + os.path.realpath(tempfile.gettempdir()), + 'antlr3-test') + + +class BrokenTest(unittest.TestCase.failureException): + def __repr__(self): + name, reason = self.args + return '%s: %s: %s works now' % ( + (self.__class__.__name__, name, reason)) + + +def broken(reason, *exceptions): + '''Indicates a failing (or erroneous) test case fails that should succeed. + If the test fails with an exception, list the exception type in args''' + def wrapper(test_method): + def replacement(*args, **kwargs): + try: + test_method(*args, **kwargs) + except exceptions or unittest.TestCase.failureException: + pass + else: + raise BrokenTest(test_method.__name__, reason) + replacement.__doc__ = test_method.__doc__ + replacement.__name__ = 'XXX_' + test_method.__name__ + replacement.todo = reason + return replacement + return wrapper + + +dependencyCache = {} +compileErrorCache = {} + +# setup java CLASSPATH +if 'CLASSPATH' not in os.environ: + cp = [] + + baseDir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..')) + libDir = os.path.join(baseDir, 'lib') + + jar = os.path.join(libDir, 'stringtemplate-3.1b1.jar') + if not os.path.isfile(jar): + raise DistutilsFileError( + "Missing file '%s'. Grap it from a distribution package." + % jar, + ) + cp.append(jar) + + jar = os.path.join(libDir, 'antlr-2.7.7.jar') + if not os.path.isfile(jar): + raise DistutilsFileError( + "Missing file '%s'. Grap it from a distribution package." + % jar, + ) + cp.append(jar) + + jar = os.path.join(libDir, 'junit-4.2.jar') + if not os.path.isfile(jar): + raise DistutilsFileError( + "Missing file '%s'. Grap it from a distribution package." + % jar, + ) + cp.append(jar) + + cp.append(os.path.join(baseDir, 'runtime', 'Python', 'build')) + + classpath = '-cp "' + ':'.join([os.path.abspath(p) for p in cp]) + '"' + +else: + classpath = '' + + +class ANTLRTest(unittest.TestCase): + def __init__(self, *args, **kwargs): + unittest.TestCase.__init__(self, *args, **kwargs) + + self.moduleName = os.path.splitext(os.path.basename(sys.modules[self.__module__].__file__))[0] + self.className = self.__class__.__name__ + self._baseDir = None + + self.lexerModule = None + self.parserModule = None + + self.grammarName = None + self.grammarType = None + + self.antlr_version = antlr3.version_str_to_tuple( + os.environ.get('ANTLRVERSION', 'HEAD')) + + + @property + def baseDir(self): + if self._baseDir is None: + testName = 'unknownTest' + for frame in inspect.stack(): + code = frame[0].f_code + codeMod = inspect.getmodule(code) + if codeMod is None: + continue + + # skip frames not in requested module + if codeMod is not sys.modules[self.__module__]: + continue + + # skip some unwanted names + if code.co_name in ('nextToken', ''): + continue + + if code.co_name.startswith('test'): + testName = code.co_name + break + + self._baseDir = os.path.join( + testbasedir, + self.moduleName, self.className, testName) + if not os.path.isdir(self._baseDir): + os.makedirs(self._baseDir) + + return self._baseDir + + + def _invokeantlr(self, dir, file, options, javaOptions=''): + cmd = 'cd %s; java %s %s org.antlr.Tool -o . %s %s 2>&1' % ( + dir, javaOptions, classpath, options, file + ) + fp = os.popen(cmd) + output = '' + failed = False + for line in fp: + output += line + + if line.startswith('error('): + failed = True + + rc = fp.close() + if rc is not None: + failed = True + + if failed: + raise RuntimeError( + "Failed to compile grammar '%s':\n%s\n\n" % (file, cmd) + + output + ) + + + def compileGrammar(self, grammarName=None, options='', javaOptions=''): + if grammarName is None: + grammarName = self.moduleName + '.g' + + self._baseDir = os.path.join( + testbasedir, + self.moduleName) + if not os.path.isdir(self._baseDir): + os.makedirs(self._baseDir) + + if self.grammarName is None: + self.grammarName = os.path.splitext(grammarName)[0] + + grammarPath = os.path.join(os.path.dirname(os.path.abspath(__file__)), grammarName) + + # get type and name from first grammar line + grammar = open(grammarPath, 'r').read() + m = re.match(r'\s*((lexer|parser|tree)\s+|)grammar\s+(\S+);', grammar, re.MULTILINE) + assert m is not None, grammar + self.grammarType = m.group(2) + if self.grammarType is None: + self.grammarType = 'combined' + + if self.grammarType is None: + assert self.grammarType in ('lexer', 'parser', 'tree', 'combined'), self.grammarType + + # don't try to rebuild grammar, if it already failed + if grammarName in compileErrorCache: + return + + try: + # get dependencies from antlr + if grammarName in dependencyCache: + dependencies = dependencyCache[grammarName] + + else: + dependencies = [] + cmd = ('cd %s; java %s %s org.antlr.Tool -o . -depend %s 2>&1' + % (self.baseDir, javaOptions, classpath, grammarPath) + ) + + output = "" + failed = False + + fp = os.popen(cmd) + for line in fp: + output += line + + if line.startswith('error('): + failed = True + elif ':' in line: + a, b = line.strip().split(':', 1) + dependencies.append( + (os.path.join(self.baseDir, a.strip()), + [os.path.join(self.baseDir, b.strip())]) + ) + + rc = fp.close() + if rc is not None: + failed = True + + if failed: + raise RuntimeError( + "antlr -depend failed with code %s on grammar '%s':\n\n" + % (rc, grammarName) + + cmd + + "\n" + + output + ) + + # add dependencies to my .stg files + templateDir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', 'src', 'org', 'antlr', 'codegen', 'templates', 'Python')) + templates = glob.glob(os.path.join(templateDir, '*.stg')) + + for dst, src in dependencies: + src.extend(templates) + + dependencyCache[grammarName] = dependencies + + + rebuild = False + + for dest, sources in dependencies: + if not os.path.isfile(dest): + rebuild = True + break + + for source in sources: + if os.path.getmtime(source) > os.path.getmtime(dest): + rebuild = True + break + + + if rebuild: + self._invokeantlr(self.baseDir, grammarPath, options, javaOptions) + + except: + # mark grammar as broken + compileErrorCache[grammarName] = True + raise + + + def lexerClass(self, base): + """Optionally build a subclass of generated lexer class""" + + return base + + + def parserClass(self, base): + """Optionally build a subclass of generated parser class""" + + return base + + + def walkerClass(self, base): + """Optionally build a subclass of generated walker class""" + + return base + + + def __load_module(self, name): + modFile, modPathname, modDescription \ + = imp.find_module(name, [self.baseDir]) + + return imp.load_module( + name, modFile, modPathname, modDescription + ) + + + def getLexer(self, *args, **kwargs): + """Build lexer instance. Arguments are passed to lexer.__init__().""" + + if self.grammarType == 'lexer' and self.antlr_version >= (3, 1, 0, 0): + self.lexerModule = self.__load_module(self.grammarName) + cls = getattr(self.lexerModule, self.grammarName) + else: + self.lexerModule = self.__load_module(self.grammarName + 'Lexer') + cls = getattr(self.lexerModule, self.grammarName + 'Lexer') + + cls = self.lexerClass(cls) + + lexer = cls(*args, **kwargs) + + return lexer + + + def getParser(self, *args, **kwargs): + """Build parser instance. Arguments are passed to parser.__init__().""" + + if self.grammarType == 'parser': + self.lexerModule = self.__load_module(self.grammarName) + cls = getattr(self.lexerModule, self.grammarName) + else: + self.parserModule = self.__load_module(self.grammarName + 'Parser') + cls = getattr(self.parserModule, self.grammarName + 'Parser') + cls = self.parserClass(cls) + + parser = cls(*args, **kwargs) + + return parser + + + def getWalker(self, *args, **kwargs): + """Build walker instance. Arguments are passed to walker.__init__().""" + + self.walkerModule = self.__load_module(self.grammarName + 'Walker') + cls = getattr(self.walkerModule, self.grammarName + 'Walker') + cls = self.walkerClass(cls) + + walker = cls(*args, **kwargs) + + return walker + + + def writeInlineGrammar(self, grammar): + # get type and name from first grammar line + m = re.match(r'\s*((lexer|parser|tree)\s+|)grammar\s+(\S+);', grammar, re.MULTILINE) + assert m is not None, grammar + grammarType = m.group(2) + if grammarType is None: + grammarType = 'combined' + grammarName = m.group(3) + + assert grammarType in ('lexer', 'parser', 'tree', 'combined'), grammarType + + grammarPath = os.path.join(self.baseDir, grammarName + '.g') + + # dump temp grammar file + fp = open(grammarPath, 'w') + fp.write(grammar) + fp.close() + + return grammarName, grammarPath, grammarType + + + def writeFile(self, name, contents): + testDir = os.path.dirname(os.path.abspath(__file__)) + path = os.path.join(self.baseDir, name) + + fp = open(path, 'w') + fp.write(contents) + fp.close() + + return path + + + def compileInlineGrammar(self, grammar, options='', javaOptions='', + returnModule=False): + # write grammar file + grammarName, grammarPath, grammarType = self.writeInlineGrammar(grammar) + + # compile it + self._invokeantlr( + os.path.dirname(grammarPath), + os.path.basename(grammarPath), + options, + javaOptions + ) + + if grammarType == 'combined': + lexerMod = self.__load_module(grammarName + 'Lexer') + parserMod = self.__load_module(grammarName + 'Parser') + if returnModule: + return lexerMod, parserMod + + lexerCls = getattr(lexerMod, grammarName + 'Lexer') + lexerCls = self.lexerClass(lexerCls) + parserCls = getattr(parserMod, grammarName + 'Parser') + parserCls = self.parserClass(parserCls) + + return lexerCls, parserCls + + if grammarType == 'lexer': + lexerMod = self.__load_module(grammarName) + if returnModule: + return lexerMod + + lexerCls = getattr(lexerMod, grammarName) + lexerCls = self.lexerClass(lexerCls) + + return lexerCls + + if grammarType == 'parser': + parserMod = self.__load_module(grammarName) + if returnModule: + return parserMod + + parserCls = getattr(parserMod, grammarName) + parserCls = self.parserClass(parserCls) + + return parserCls + + if grammarType == 'tree': + walkerMod = self.__load_module(grammarName) + if returnModule: + return walkerMod + + walkerCls = getattr(walkerMod, grammarName) + walkerCls = self.walkerClass(walkerCls) + + return walkerCls diff --git a/antlr-3.1.3/runtime/Python/unittests/testantlr3.py b/antlr-3.1.3/runtime/Python/unittests/testantlr3.py new file mode 100644 index 0000000..d4c6764 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/unittests/testantlr3.py @@ -0,0 +1,7 @@ + +import unittest + +import antlr3 + +if __name__ == "__main__": + unittest.main(testRunner=unittest.TextTestRunner(verbosity=2)) diff --git a/antlr-3.1.3/runtime/Python/unittests/testbase.py b/antlr-3.1.3/runtime/Python/unittests/testbase.py new file mode 100644 index 0000000..5c92887 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/unittests/testbase.py @@ -0,0 +1,27 @@ +import unittest + +class BrokenTest(unittest.TestCase.failureException): + def __repr__(self): + name, reason = self.args + return '%s: %s: %s works now' % ( + (self.__class__.__name__, name, reason)) + + +def broken(reason, *exceptions): + '''Indicates a failing (or erroneous) test case fails that should succeed. + If the test fails with an exception, list the exception type in args''' + def wrapper(test_method): + def replacement(*args, **kwargs): + try: + test_method(*args, **kwargs) + except exceptions or unittest.TestCase.failureException: + pass + else: + raise BrokenTest(test_method.__name__, reason) + replacement.__doc__ = test_method.__doc__ + replacement.__name__ = 'XXX_' + test_method.__name__ + replacement.todo = reason + return replacement + return wrapper + + diff --git a/antlr-3.1.3/runtime/Python/unittests/testdfa.py b/antlr-3.1.3/runtime/Python/unittests/testdfa.py new file mode 100644 index 0000000..5b99227 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/unittests/testdfa.py @@ -0,0 +1,63 @@ + +import unittest + +import antlr3 + + +class TestDFA(unittest.TestCase): + """Test case for the DFA class.""" + + def setUp(self): + """Setup test fixure. + + We need a Recognizer in order to instanciate a DFA. + + """ + + class TRecognizer(antlr3.BaseRecognizer): + antlr_version = antlr3.runtime_version + + self.recog = TRecognizer() + + + def testInit(self): + """DFA.__init__() + + Just a smoke test. + + """ + + dfa = antlr3.DFA( + self.recog, 1, + eot=[], + eof=[], + min=[], + max=[], + accept=[], + special=[], + transition=[] + ) + + + def testUnpack(self): + """DFA.unpack()""" + + self.failUnlessEqual( + antlr3.DFA.unpack( + u"\1\3\1\4\2\uffff\1\5\22\uffff\1\2\31\uffff\1\6\6\uffff" + u"\32\6\4\uffff\1\6\1\uffff\32\6" + ), + [ 3, 4, -1, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 6, -1, -1, -1, -1, -1, -1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, -1, -1, -1, -1, 6, -1, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6 + ] + ) + + + +if __name__ == "__main__": + unittest.main(testRunner=unittest.TextTestRunner(verbosity=2)) diff --git a/antlr-3.1.3/runtime/Python/unittests/testdottreegen.py b/antlr-3.1.3/runtime/Python/unittests/testdottreegen.py new file mode 100644 index 0000000..05b797e --- /dev/null +++ b/antlr-3.1.3/runtime/Python/unittests/testdottreegen.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- + +import os +import unittest +from StringIO import StringIO +import textwrap + +import stringtemplate3 + +from antlr3.dottreegen import toDOT +from antlr3.treewizard import TreeWizard +from antlr3.tree import CommonTreeAdaptor + + +class TestToDOT(unittest.TestCase): + """Test case for the toDOT function.""" + + def setUp(self): + self.adaptor = CommonTreeAdaptor() + self.tokens = [ + "", "", "", "", "", "A", "B", "C", "D", "E", "ID", "VAR" + ] + self.wiz = TreeWizard(self.adaptor, self.tokens) + + + def testNone(self): + """toDOT()""" + + treeST = stringtemplate3.StringTemplate( + template=( + "digraph {\n" + + " $nodes$\n" + + " $edges$\n" + + "}\n") + ) + + edgeST = stringtemplate3.StringTemplate( + template="$parent$ -> $child$\n" + ) + + tree = self.wiz.create("(A B (B C C) (B (C D D)))") + st = toDOT(tree, self.adaptor, treeST, edgeST) + + result = st.toString() + expected = textwrap.dedent( + '''\ + digraph { + n0 [label="A"]; + n1 [label="B"]; + n2 [label="B"]; + n3 [label="C"]; + n4 [label="C"]; + n5 [label="B"]; + n6 [label="C"]; + n7 [label="D"]; + n8 [label="D"]; + + n0 -> n1 + n0 -> n2 + n2 -> n3 + n2 -> n4 + n0 -> n5 + n5 -> n6 + n6 -> n7 + n6 -> n8 + + } + ''' + ) + self.assertEqual(result, expected) + + +if __name__ == "__main__": + unittest.main(testRunner=unittest.TextTestRunner(verbosity=2)) diff --git a/antlr-3.1.3/runtime/Python/unittests/testexceptions.py b/antlr-3.1.3/runtime/Python/unittests/testexceptions.py new file mode 100644 index 0000000..2cdef63 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/unittests/testexceptions.py @@ -0,0 +1,96 @@ +import unittest +import antlr3 +import testbase + + +class TestRecognitionException(unittest.TestCase): + """Tests for the antlr3.RecognitionException class""" + + def testInitNone(self): + """RecognitionException.__init__()""" + + exc = antlr3.RecognitionException() + + +class TestEarlyExitException(unittest.TestCase): + """Tests for the antlr3.EarlyExitException class""" + + @testbase.broken("FIXME", Exception) + def testInitNone(self): + """EarlyExitException.__init__()""" + + exc = antlr3.EarlyExitException() + + +class TestFailedPredicateException(unittest.TestCase): + """Tests for the antlr3.FailedPredicateException class""" + + @testbase.broken("FIXME", Exception) + def testInitNone(self): + """FailedPredicateException.__init__()""" + + exc = antlr3.FailedPredicateException() + + +class TestMismatchedNotSetException(unittest.TestCase): + """Tests for the antlr3.MismatchedNotSetException class""" + + @testbase.broken("FIXME", Exception) + def testInitNone(self): + """MismatchedNotSetException.__init__()""" + + exc = antlr3.MismatchedNotSetException() + + +class TestMismatchedRangeException(unittest.TestCase): + """Tests for the antlr3.MismatchedRangeException class""" + + @testbase.broken("FIXME", Exception) + def testInitNone(self): + """MismatchedRangeException.__init__()""" + + exc = antlr3.MismatchedRangeException() + + +class TestMismatchedSetException(unittest.TestCase): + """Tests for the antlr3.MismatchedSetException class""" + + @testbase.broken("FIXME", Exception) + def testInitNone(self): + """MismatchedSetException.__init__()""" + + exc = antlr3.MismatchedSetException() + + +class TestMismatchedTokenException(unittest.TestCase): + """Tests for the antlr3.MismatchedTokenException class""" + + @testbase.broken("FIXME", Exception) + def testInitNone(self): + """MismatchedTokenException.__init__()""" + + exc = antlr3.MismatchedTokenException() + + +class TestMismatchedTreeNodeException(unittest.TestCase): + """Tests for the antlr3.MismatchedTreeNodeException class""" + + @testbase.broken("FIXME", Exception) + def testInitNone(self): + """MismatchedTreeNodeException.__init__()""" + + exc = antlr3.MismatchedTreeNodeException() + + +class TestNoViableAltException(unittest.TestCase): + """Tests for the antlr3.NoViableAltException class""" + + @testbase.broken("FIXME", Exception) + def testInitNone(self): + """NoViableAltException.__init__()""" + + exc = antlr3.NoViableAltException() + + +if __name__ == "__main__": + unittest.main(testRunner=unittest.TextTestRunner(verbosity=2)) diff --git a/antlr-3.1.3/runtime/Python/unittests/testrecognizers.py b/antlr-3.1.3/runtime/Python/unittests/testrecognizers.py new file mode 100644 index 0000000..599d281 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/unittests/testrecognizers.py @@ -0,0 +1,67 @@ +import sys +import unittest + +import antlr3 + + +class TestBaseRecognizer(unittest.TestCase): + """Tests for BaseRecognizer class""" + + def testGetRuleInvocationStack(self): + """BaseRecognizer._getRuleInvocationStack()""" + + rules = antlr3.BaseRecognizer._getRuleInvocationStack(__name__) + self.failUnlessEqual( + rules, + ['testGetRuleInvocationStack'] + ) + + +class TestTokenSource(unittest.TestCase): + """Testcase to the antlr3.TokenSource class""" + + + def testIteratorInterface(self): + """TokenSource.next()""" + + class TrivialToken(object): + def __init__(self, type): + self.type = type + + class TestSource(antlr3.TokenSource): + def __init__(self): + self.tokens = [ + TrivialToken(1), + TrivialToken(2), + TrivialToken(3), + TrivialToken(4), + TrivialToken(antlr3.EOF), + ] + + def nextToken(self): + return self.tokens.pop(0) + + + src = TestSource() + tokens = [] + for token in src: + tokens.append(token.type) + + self.failUnlessEqual(tokens, [1, 2, 3, 4]) + + + +class TestLexer(unittest.TestCase): + + def testInit(self): + """Lexer.__init__()""" + + class TLexer(antlr3.Lexer): + antlr_version = antlr3.runtime_version + + stream = antlr3.StringStream('foo') + TLexer(stream) + + +if __name__ == "__main__": + unittest.main(testRunner=unittest.TextTestRunner(verbosity=2)) diff --git a/antlr-3.1.3/runtime/Python/unittests/teststreams.input1 b/antlr-3.1.3/runtime/Python/unittests/teststreams.input1 new file mode 100644 index 0000000..a907ec3 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/unittests/teststreams.input1 @@ -0,0 +1,2 @@ +foo +bar \ No newline at end of file diff --git a/antlr-3.1.3/runtime/Python/unittests/teststreams.input2 b/antlr-3.1.3/runtime/Python/unittests/teststreams.input2 new file mode 100644 index 0000000..49dccf4 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/unittests/teststreams.input2 @@ -0,0 +1,2 @@ +foo +bär \ No newline at end of file diff --git a/antlr-3.1.3/runtime/Python/unittests/teststreams.py b/antlr-3.1.3/runtime/Python/unittests/teststreams.py new file mode 100644 index 0000000..fe28750 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/unittests/teststreams.py @@ -0,0 +1,658 @@ +# -*- coding: utf-8 -*- + +import os +import unittest +from StringIO import StringIO +import antlr3 + + +class TestStringStream(unittest.TestCase): + """Test case for the StringStream class.""" + + def testSize(self): + """StringStream.size()""" + + stream = antlr3.StringStream('foo') + + self.failUnlessEqual(stream.size(), 3) + + + def testIndex(self): + """StringStream.index()""" + + stream = antlr3.StringStream('foo') + + self.failUnlessEqual(stream.index(), 0) + + + def testConsume(self): + """StringStream.consume()""" + + stream = antlr3.StringStream('foo\nbar') + + stream.consume() # f + self.failUnlessEqual(stream.index(), 1) + self.failUnlessEqual(stream.charPositionInLine, 1) + self.failUnlessEqual(stream.line, 1) + + stream.consume() # o + self.failUnlessEqual(stream.index(), 2) + self.failUnlessEqual(stream.charPositionInLine, 2) + self.failUnlessEqual(stream.line, 1) + + stream.consume() # o + self.failUnlessEqual(stream.index(), 3) + self.failUnlessEqual(stream.charPositionInLine, 3) + self.failUnlessEqual(stream.line, 1) + + stream.consume() # \n + self.failUnlessEqual(stream.index(), 4) + self.failUnlessEqual(stream.charPositionInLine, 0) + self.failUnlessEqual(stream.line, 2) + + stream.consume() # b + self.failUnlessEqual(stream.index(), 5) + self.failUnlessEqual(stream.charPositionInLine, 1) + self.failUnlessEqual(stream.line, 2) + + stream.consume() # a + self.failUnlessEqual(stream.index(), 6) + self.failUnlessEqual(stream.charPositionInLine, 2) + self.failUnlessEqual(stream.line, 2) + + stream.consume() # r + self.failUnlessEqual(stream.index(), 7) + self.failUnlessEqual(stream.charPositionInLine, 3) + self.failUnlessEqual(stream.line, 2) + + stream.consume() # EOF + self.failUnlessEqual(stream.index(), 7) + self.failUnlessEqual(stream.charPositionInLine, 3) + self.failUnlessEqual(stream.line, 2) + + stream.consume() # EOF + self.failUnlessEqual(stream.index(), 7) + self.failUnlessEqual(stream.charPositionInLine, 3) + self.failUnlessEqual(stream.line, 2) + + + def testReset(self): + """StringStream.reset()""" + + stream = antlr3.StringStream('foo') + + stream.consume() + stream.consume() + + stream.reset() + self.failUnlessEqual(stream.index(), 0) + self.failUnlessEqual(stream.line, 1) + self.failUnlessEqual(stream.charPositionInLine, 0) + self.failUnlessEqual(stream.LT(1), 'f') + + + def testLA(self): + """StringStream.LA()""" + + stream = antlr3.StringStream('foo') + + self.failUnlessEqual(stream.LT(1), 'f') + self.failUnlessEqual(stream.LT(2), 'o') + self.failUnlessEqual(stream.LT(3), 'o') + + stream.consume() + stream.consume() + + self.failUnlessEqual(stream.LT(1), 'o') + self.failUnlessEqual(stream.LT(2), antlr3.EOF) + self.failUnlessEqual(stream.LT(3), antlr3.EOF) + + + def testSubstring(self): + """StringStream.substring()""" + + stream = antlr3.StringStream('foobar') + + self.failUnlessEqual(stream.substring(0, 0), 'f') + self.failUnlessEqual(stream.substring(0, 1), 'fo') + self.failUnlessEqual(stream.substring(0, 5), 'foobar') + self.failUnlessEqual(stream.substring(3, 5), 'bar') + + + def testSeekForward(self): + """StringStream.seek(): forward""" + + stream = antlr3.StringStream('foo\nbar') + + stream.seek(4) + + self.failUnlessEqual(stream.index(), 4) + self.failUnlessEqual(stream.line, 2) + self.failUnlessEqual(stream.charPositionInLine, 0) + self.failUnlessEqual(stream.LT(1), 'b') + + +## # not yet implemented +## def testSeekBackward(self): +## """StringStream.seek(): backward""" + +## stream = antlr3.StringStream('foo\nbar') + +## stream.seek(4) +## stream.seek(1) + +## self.failUnlessEqual(stream.index(), 1) +## self.failUnlessEqual(stream.line, 1) +## self.failUnlessEqual(stream.charPositionInLine, 1) +## self.failUnlessEqual(stream.LA(1), 'o') + + + def testMark(self): + """StringStream.mark()""" + + stream = antlr3.StringStream('foo\nbar') + + stream.seek(4) + + marker = stream.mark() + self.failUnlessEqual(marker, 1) + self.failUnlessEqual(stream.markDepth, 1) + + stream.consume() + marker = stream.mark() + self.failUnlessEqual(marker, 2) + self.failUnlessEqual(stream.markDepth, 2) + + + def testReleaseLast(self): + """StringStream.release(): last marker""" + + stream = antlr3.StringStream('foo\nbar') + + stream.seek(4) + marker1 = stream.mark() + + stream.consume() + marker2 = stream.mark() + + stream.release() + self.failUnlessEqual(stream.markDepth, 1) + + # release same marker again, nothing has changed + stream.release() + self.failUnlessEqual(stream.markDepth, 1) + + + def testReleaseNested(self): + """StringStream.release(): nested""" + + stream = antlr3.StringStream('foo\nbar') + + stream.seek(4) + marker1 = stream.mark() + + stream.consume() + marker2 = stream.mark() + + stream.consume() + marker3 = stream.mark() + + stream.release(marker2) + self.failUnlessEqual(stream.markDepth, 1) + + + def testRewindLast(self): + """StringStream.rewind(): last marker""" + + stream = antlr3.StringStream('foo\nbar') + + stream.seek(4) + + marker = stream.mark() + stream.consume() + stream.consume() + + stream.rewind() + self.failUnlessEqual(stream.markDepth, 0) + self.failUnlessEqual(stream.index(), 4) + self.failUnlessEqual(stream.line, 2) + self.failUnlessEqual(stream.charPositionInLine, 0) + self.failUnlessEqual(stream.LT(1), 'b') + + + def testRewindNested(self): + """StringStream.rewind(): nested""" + + stream = antlr3.StringStream('foo\nbar') + + stream.seek(4) + marker1 = stream.mark() + + stream.consume() + marker2 = stream.mark() + + stream.consume() + marker3 = stream.mark() + + stream.rewind(marker2) + self.failUnlessEqual(stream.markDepth, 1) + self.failUnlessEqual(stream.index(), 5) + self.failUnlessEqual(stream.line, 2) + self.failUnlessEqual(stream.charPositionInLine, 1) + self.failUnlessEqual(stream.LT(1), 'a') + + +class TestFileStream(unittest.TestCase): + """Test case for the FileStream class.""" + + + def testNoEncoding(self): + path = os.path.join(os.path.dirname(__file__), 'teststreams.input1') + + stream = antlr3.FileStream(path) + + stream.seek(4) + marker1 = stream.mark() + + stream.consume() + marker2 = stream.mark() + + stream.consume() + marker3 = stream.mark() + + stream.rewind(marker2) + self.failUnlessEqual(stream.markDepth, 1) + self.failUnlessEqual(stream.index(), 5) + self.failUnlessEqual(stream.line, 2) + self.failUnlessEqual(stream.charPositionInLine, 1) + self.failUnlessEqual(stream.LT(1), 'a') + self.failUnlessEqual(stream.LA(1), ord('a')) + + + def testEncoded(self): + path = os.path.join(os.path.dirname(__file__), 'teststreams.input2') + + stream = antlr3.FileStream(path, 'utf-8') + + stream.seek(4) + marker1 = stream.mark() + + stream.consume() + marker2 = stream.mark() + + stream.consume() + marker3 = stream.mark() + + stream.rewind(marker2) + self.failUnlessEqual(stream.markDepth, 1) + self.failUnlessEqual(stream.index(), 5) + self.failUnlessEqual(stream.line, 2) + self.failUnlessEqual(stream.charPositionInLine, 1) + self.failUnlessEqual(stream.LT(1), u'ä') + self.failUnlessEqual(stream.LA(1), ord(u'ä')) + + + +class TestInputStream(unittest.TestCase): + """Test case for the InputStream class.""" + + def testNoEncoding(self): + file = StringIO('foo\nbar') + + stream = antlr3.InputStream(file) + + stream.seek(4) + marker1 = stream.mark() + + stream.consume() + marker2 = stream.mark() + + stream.consume() + marker3 = stream.mark() + + stream.rewind(marker2) + self.failUnlessEqual(stream.markDepth, 1) + self.failUnlessEqual(stream.index(), 5) + self.failUnlessEqual(stream.line, 2) + self.failUnlessEqual(stream.charPositionInLine, 1) + self.failUnlessEqual(stream.LT(1), 'a') + self.failUnlessEqual(stream.LA(1), ord('a')) + + + def testEncoded(self): + file = StringIO(u'foo\nbär'.encode('utf-8')) + + stream = antlr3.InputStream(file, 'utf-8') + + stream.seek(4) + marker1 = stream.mark() + + stream.consume() + marker2 = stream.mark() + + stream.consume() + marker3 = stream.mark() + + stream.rewind(marker2) + self.failUnlessEqual(stream.markDepth, 1) + self.failUnlessEqual(stream.index(), 5) + self.failUnlessEqual(stream.line, 2) + self.failUnlessEqual(stream.charPositionInLine, 1) + self.failUnlessEqual(stream.LT(1), u'ä') + self.failUnlessEqual(stream.LA(1), ord(u'ä')) + + +class TestCommonTokenStream(unittest.TestCase): + """Test case for the StringStream class.""" + + def setUp(self): + """Setup test fixure + + The constructor of CommonTokenStream needs a token source. This + is a simple mock class providing just the nextToken() method. + + """ + + class MockSource(object): + def __init__(self): + self.tokens = [] + + def nextToken(self): + try: + return self.tokens.pop(0) + except IndexError: + return None + + self.source = MockSource() + + + def testInit(self): + """CommonTokenStream.__init__()""" + + stream = antlr3.CommonTokenStream(self.source) + self.failUnlessEqual(stream.index(), -1) + + + def testSetTokenSource(self): + """CommonTokenStream.setTokenSource()""" + + stream = antlr3.CommonTokenStream(None) + stream.setTokenSource(self.source) + self.failUnlessEqual(stream.index(), -1) + self.failUnlessEqual(stream.channel, antlr3.DEFAULT_CHANNEL) + + + def testLTEmptySource(self): + """CommonTokenStream.LT(): EOF (empty source)""" + + stream = antlr3.CommonTokenStream(self.source) + + lt1 = stream.LT(1) + self.failUnlessEqual(lt1.type, antlr3.EOF) + + + def testLT1(self): + """CommonTokenStream.LT(1)""" + + self.source.tokens.append( + antlr3.CommonToken(type=12) + ) + + stream = antlr3.CommonTokenStream(self.source) + + lt1 = stream.LT(1) + self.failUnlessEqual(lt1.type, 12) + + + def testLT1WithHidden(self): + """CommonTokenStream.LT(1): with hidden tokens""" + + self.source.tokens.append( + antlr3.CommonToken(type=12, channel=antlr3.HIDDEN_CHANNEL) + ) + + self.source.tokens.append( + antlr3.CommonToken(type=13) + ) + + stream = antlr3.CommonTokenStream(self.source) + + lt1 = stream.LT(1) + self.failUnlessEqual(lt1.type, 13) + + + def testLT2BeyondEnd(self): + """CommonTokenStream.LT(2): beyond end""" + + self.source.tokens.append( + antlr3.CommonToken(type=12) + ) + + self.source.tokens.append( + antlr3.CommonToken(type=13, channel=antlr3.HIDDEN_CHANNEL) + ) + + stream = antlr3.CommonTokenStream(self.source) + + lt1 = stream.LT(2) + self.failUnlessEqual(lt1.type, antlr3.EOF) + + + # not yet implemented + def testLTNegative(self): + """CommonTokenStream.LT(-1): look back""" + + self.source.tokens.append( + antlr3.CommonToken(type=12) + ) + + self.source.tokens.append( + antlr3.CommonToken(type=13) + ) + + stream = antlr3.CommonTokenStream(self.source) + stream.fillBuffer() + stream.consume() + + lt1 = stream.LT(-1) + self.failUnlessEqual(lt1.type, 12) + + + def testLB1(self): + """CommonTokenStream.LB(1)""" + + self.source.tokens.append( + antlr3.CommonToken(type=12) + ) + + self.source.tokens.append( + antlr3.CommonToken(type=13) + ) + + stream = antlr3.CommonTokenStream(self.source) + stream.fillBuffer() + stream.consume() + + self.failUnlessEqual(stream.LB(1).type, 12) + + + def testLTZero(self): + """CommonTokenStream.LT(0)""" + + self.source.tokens.append( + antlr3.CommonToken(type=12) + ) + + self.source.tokens.append( + antlr3.CommonToken(type=13) + ) + + stream = antlr3.CommonTokenStream(self.source) + + lt1 = stream.LT(0) + self.failUnless(lt1 is None) + + + def testLBBeyondBegin(self): + """CommonTokenStream.LB(-1): beyond begin""" + + self.source.tokens.append( + antlr3.CommonToken(type=12) + ) + + self.source.tokens.append( + antlr3.CommonToken(type=12, channel=antlr3.HIDDEN_CHANNEL) + ) + + self.source.tokens.append( + antlr3.CommonToken(type=12, channel=antlr3.HIDDEN_CHANNEL) + ) + + self.source.tokens.append( + antlr3.CommonToken(type=13) + ) + + stream = antlr3.CommonTokenStream(self.source) + self.failUnless(stream.LB(1) is None) + + stream.consume() + stream.consume() + self.failUnless(stream.LB(3) is None) + + + def testFillBuffer(self): + """CommonTokenStream.fillBuffer()""" + + self.source.tokens.append( + antlr3.CommonToken(type=12) + ) + + self.source.tokens.append( + antlr3.CommonToken(type=13) + ) + + self.source.tokens.append( + antlr3.CommonToken(type=14) + ) + + self.source.tokens.append( + antlr3.CommonToken(type=antlr3.EOF) + ) + + stream = antlr3.CommonTokenStream(self.source) + stream.fillBuffer() + + self.failUnlessEqual(len(stream.tokens), 3) + self.failUnlessEqual(stream.tokens[0].type, 12) + self.failUnlessEqual(stream.tokens[1].type, 13) + self.failUnlessEqual(stream.tokens[2].type, 14) + + + def testConsume(self): + """CommonTokenStream.consume()""" + + self.source.tokens.append( + antlr3.CommonToken(type=12) + ) + + self.source.tokens.append( + antlr3.CommonToken(type=13) + ) + + self.source.tokens.append( + antlr3.CommonToken(type=antlr3.EOF) + ) + + stream = antlr3.CommonTokenStream(self.source) + self.failUnlessEqual(stream.LA(1), 12) + + stream.consume() + self.failUnlessEqual(stream.LA(1), 13) + + stream.consume() + self.failUnlessEqual(stream.LA(1), antlr3.EOF) + + stream.consume() + self.failUnlessEqual(stream.LA(1), antlr3.EOF) + + + def testSeek(self): + """CommonTokenStream.seek()""" + + self.source.tokens.append( + antlr3.CommonToken(type=12) + ) + + self.source.tokens.append( + antlr3.CommonToken(type=13) + ) + + self.source.tokens.append( + antlr3.CommonToken(type=antlr3.EOF) + ) + + stream = antlr3.CommonTokenStream(self.source) + self.failUnlessEqual(stream.LA(1), 12) + + stream.seek(2) + self.failUnlessEqual(stream.LA(1), antlr3.EOF) + + stream.seek(0) + self.failUnlessEqual(stream.LA(1), 12) + + + def testMarkRewind(self): + """CommonTokenStream.mark()/rewind()""" + + self.source.tokens.append( + antlr3.CommonToken(type=12) + ) + + self.source.tokens.append( + antlr3.CommonToken(type=13) + ) + + self.source.tokens.append( + antlr3.CommonToken(type=antlr3.EOF) + ) + + stream = antlr3.CommonTokenStream(self.source) + stream.fillBuffer() + + stream.consume() + marker = stream.mark() + + stream.consume() + stream.rewind(marker) + + self.failUnlessEqual(stream.LA(1), 13) + + + def testToString(self): + """CommonTokenStream.toString()""" + + self.source.tokens.append( + antlr3.CommonToken(type=12, text="foo") + ) + + self.source.tokens.append( + antlr3.CommonToken(type=13, text="bar") + ) + + self.source.tokens.append( + antlr3.CommonToken(type=14, text="gnurz") + ) + + self.source.tokens.append( + antlr3.CommonToken(type=15, text="blarz") + ) + + stream = antlr3.CommonTokenStream(self.source) + + assert stream.toString() == "foobargnurzblarz" + assert stream.toString(1, 2) == "bargnurz" + assert stream.toString(stream.tokens[1], stream.tokens[-2]) == "bargnurz" + + +if __name__ == "__main__": + unittest.main(testRunner=unittest.TextTestRunner(verbosity=2)) diff --git a/antlr-3.1.3/runtime/Python/unittests/testtree.py b/antlr-3.1.3/runtime/Python/unittests/testtree.py new file mode 100644 index 0000000..be9a884 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/unittests/testtree.py @@ -0,0 +1,1222 @@ +# -*- coding: utf-8 -*- + +import os +import unittest +from StringIO import StringIO + +from antlr3.tree import (CommonTreeNodeStream, CommonTree, CommonTreeAdaptor, + TreeParser, TreeVisitor) +from antlr3 import CommonToken, UP, DOWN, EOF +from antlr3.treewizard import TreeWizard + +class TestTreeNodeStream(unittest.TestCase): + """Test case for the TreeNodeStream class.""" + + def setUp(self): + self.adaptor = CommonTreeAdaptor() + + + def newStream(self, t): + """Build new stream; let's us override to test other streams.""" + return CommonTreeNodeStream(t) + + + def testSingleNode(self): + t = CommonTree(CommonToken(101)) + + stream = self.newStream(t) + expecting = "101" + found = self.toNodesOnlyString(stream) + self.failUnlessEqual(expecting, found) + + expecting = "101" + found = str(stream) + self.failUnlessEqual(expecting, found) + + + def testTwoChildrenOfNilRoot(self): + class V(CommonTree): + def __init__(self, token=None, ttype=None, x=None): + if x is not None: + self.x = x + + if ttype is not None and token is None: + self.token = CommonToken(type=ttype) + + if token is not None: + self.token = token + + def __str__(self): + if self.token is not None: + txt = self.token.text + else: + txt = "" + + txt += "" + return txt + + root_0 = self.adaptor.nil(); + t = V(ttype=101, x=2) + u = V(token=CommonToken(type=102, text="102")) + self.adaptor.addChild(root_0, t) + self.adaptor.addChild(root_0, u) + self.assert_(root_0.parent is None) + self.assertEquals(-1, root_0.childIndex) + self.assertEquals(0, t.childIndex) + self.assertEquals(1, u.childIndex) + + + def test4Nodes(self): + # ^(101 ^(102 103) 104) + t = CommonTree(CommonToken(101)) + t.addChild(CommonTree(CommonToken(102))) + t.getChild(0).addChild(CommonTree(CommonToken(103))) + t.addChild(CommonTree(CommonToken(104))) + + stream = self.newStream(t) + expecting = "101 102 103 104" + found = self.toNodesOnlyString(stream) + self.failUnlessEqual(expecting, found) + + expecting = "101 2 102 2 103 3 104 3" + found = str(stream) + self.failUnlessEqual(expecting, found) + + + def testList(self): + root = CommonTree(None) + + t = CommonTree(CommonToken(101)) + t.addChild(CommonTree(CommonToken(102))) + t.getChild(0).addChild(CommonTree(CommonToken(103))) + t.addChild(CommonTree(CommonToken(104))) + + u = CommonTree(CommonToken(105)) + + root.addChild(t) + root.addChild(u) + + stream = CommonTreeNodeStream(root) + expecting = "101 102 103 104 105" + found = self.toNodesOnlyString(stream) + self.failUnlessEqual(expecting, found) + + expecting = "101 2 102 2 103 3 104 3 105" + found = str(stream) + self.failUnlessEqual(expecting, found) + + + def testFlatList(self): + root = CommonTree(None) + + root.addChild(CommonTree(CommonToken(101))) + root.addChild(CommonTree(CommonToken(102))) + root.addChild(CommonTree(CommonToken(103))) + + stream = CommonTreeNodeStream(root) + expecting = "101 102 103" + found = self.toNodesOnlyString(stream) + self.failUnlessEqual(expecting, found) + + expecting = "101 102 103" + found = str(stream) + self.failUnlessEqual(expecting, found) + + + def testListWithOneNode(self): + root = CommonTree(None) + + root.addChild(CommonTree(CommonToken(101))) + + stream = CommonTreeNodeStream(root) + expecting = "101" + found = self.toNodesOnlyString(stream) + self.failUnlessEqual(expecting, found) + + expecting = "101" + found = str(stream) + self.failUnlessEqual(expecting, found) + + + def testAoverB(self): + t = CommonTree(CommonToken(101)) + t.addChild(CommonTree(CommonToken(102))) + + stream = self.newStream(t) + expecting = "101 102" + found = self.toNodesOnlyString(stream) + self.failUnlessEqual(expecting, found) + + expecting = "101 2 102 3" + found = str(stream) + self.failUnlessEqual(expecting, found) + + + def testLT(self): + # ^(101 ^(102 103) 104) + t = CommonTree(CommonToken(101)) + t.addChild(CommonTree(CommonToken(102))) + t.getChild(0).addChild(CommonTree(CommonToken(103))) + t.addChild(CommonTree(CommonToken(104))) + + stream = self.newStream(t) + self.failUnlessEqual(101, stream.LT(1).getType()) + self.failUnlessEqual(DOWN, stream.LT(2).getType()) + self.failUnlessEqual(102, stream.LT(3).getType()) + self.failUnlessEqual(DOWN, stream.LT(4).getType()) + self.failUnlessEqual(103, stream.LT(5).getType()) + self.failUnlessEqual(UP, stream.LT(6).getType()) + self.failUnlessEqual(104, stream.LT(7).getType()) + self.failUnlessEqual(UP, stream.LT(8).getType()) + self.failUnlessEqual(EOF, stream.LT(9).getType()) + # check way ahead + self.failUnlessEqual(EOF, stream.LT(100).getType()) + + + def testMarkRewindEntire(self): + # ^(101 ^(102 103 ^(106 107) ) 104 105) + # stream has 7 real + 6 nav nodes + # Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF + r0 = CommonTree(CommonToken(101)) + r1 = CommonTree(CommonToken(102)) + r0.addChild(r1) + r1.addChild(CommonTree(CommonToken(103))) + r2 = CommonTree(CommonToken(106)) + r2.addChild(CommonTree(CommonToken(107))) + r1.addChild(r2) + r0.addChild(CommonTree(CommonToken(104))) + r0.addChild(CommonTree(CommonToken(105))) + + stream = CommonTreeNodeStream(r0) + m = stream.mark() # MARK + for _ in range(13): # consume til end + stream.LT(1) + stream.consume() + + self.failUnlessEqual(EOF, stream.LT(1).getType()) + self.failUnlessEqual(UP, stream.LT(-1).getType()) + stream.rewind(m) # REWIND + + # consume til end again :) + for _ in range(13): # consume til end + stream.LT(1) + stream.consume() + + self.failUnlessEqual(EOF, stream.LT(1).getType()) + self.failUnlessEqual(UP, stream.LT(-1).getType()) + + + def testMarkRewindInMiddle(self): + # ^(101 ^(102 103 ^(106 107) ) 104 105) + # stream has 7 real + 6 nav nodes + # Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF + r0 = CommonTree(CommonToken(101)) + r1 = CommonTree(CommonToken(102)) + r0.addChild(r1) + r1.addChild(CommonTree(CommonToken(103))) + r2 = CommonTree(CommonToken(106)) + r2.addChild(CommonTree(CommonToken(107))) + r1.addChild(r2) + r0.addChild(CommonTree(CommonToken(104))) + r0.addChild(CommonTree(CommonToken(105))) + + stream = CommonTreeNodeStream(r0) + for _ in range(7): # consume til middle + #System.out.println(tream.LT(1).getType()) + stream.consume() + + self.failUnlessEqual(107, stream.LT(1).getType()) + m = stream.mark() # MARK + stream.consume() # consume 107 + stream.consume() # consume UP + stream.consume() # consume UP + stream.consume() # consume 104 + stream.rewind(m) # REWIND + + self.failUnlessEqual(107, stream.LT(1).getType()) + stream.consume() + self.failUnlessEqual(UP, stream.LT(1).getType()) + stream.consume() + self.failUnlessEqual(UP, stream.LT(1).getType()) + stream.consume() + self.failUnlessEqual(104, stream.LT(1).getType()) + stream.consume() + # now we're past rewind position + self.failUnlessEqual(105, stream.LT(1).getType()) + stream.consume() + self.failUnlessEqual(UP, stream.LT(1).getType()) + stream.consume() + self.failUnlessEqual(EOF, stream.LT(1).getType()) + self.failUnlessEqual(UP, stream.LT(-1).getType()) + + + def testMarkRewindNested(self): + # ^(101 ^(102 103 ^(106 107) ) 104 105) + # stream has 7 real + 6 nav nodes + # Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF + r0 = CommonTree(CommonToken(101)) + r1 = CommonTree(CommonToken(102)) + r0.addChild(r1) + r1.addChild(CommonTree(CommonToken(103))) + r2 = CommonTree(CommonToken(106)) + r2.addChild(CommonTree(CommonToken(107))) + r1.addChild(r2) + r0.addChild(CommonTree(CommonToken(104))) + r0.addChild(CommonTree(CommonToken(105))) + + stream = CommonTreeNodeStream(r0) + m = stream.mark() # MARK at start + stream.consume() # consume 101 + stream.consume() # consume DN + m2 = stream.mark() # MARK on 102 + stream.consume() # consume 102 + stream.consume() # consume DN + stream.consume() # consume 103 + stream.consume() # consume 106 + stream.rewind(m2) # REWIND to 102 + self.failUnlessEqual(102, stream.LT(1).getType()) + stream.consume() + self.failUnlessEqual(DOWN, stream.LT(1).getType()) + stream.consume() + # stop at 103 and rewind to start + stream.rewind(m) # REWIND to 101 + self.failUnlessEqual(101, stream.LT(1).getType()) + stream.consume() + self.failUnlessEqual(DOWN, stream.LT(1).getType()) + stream.consume() + self.failUnlessEqual(102, stream.LT(1).getType()) + stream.consume() + self.failUnlessEqual(DOWN, stream.LT(1).getType()) + + + def testSeek(self): + # ^(101 ^(102 103 ^(106 107) ) 104 105) + # stream has 7 real + 6 nav nodes + # Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF + r0 = CommonTree(CommonToken(101)) + r1 = CommonTree(CommonToken(102)) + r0.addChild(r1) + r1.addChild(CommonTree(CommonToken(103))) + r2 = CommonTree(CommonToken(106)) + r2.addChild(CommonTree(CommonToken(107))) + r1.addChild(r2) + r0.addChild(CommonTree(CommonToken(104))) + r0.addChild(CommonTree(CommonToken(105))) + + stream = CommonTreeNodeStream(r0) + stream.consume() # consume 101 + stream.consume() # consume DN + stream.consume() # consume 102 + stream.seek(7) # seek to 107 + self.failUnlessEqual(107, stream.LT(1).getType()) + stream.consume() # consume 107 + stream.consume() # consume UP + stream.consume() # consume UP + self.failUnlessEqual(104, stream.LT(1).getType()) + + + def testSeekFromStart(self): + # ^(101 ^(102 103 ^(106 107) ) 104 105) + # stream has 7 real + 6 nav nodes + # Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF + r0 = CommonTree(CommonToken(101)) + r1 = CommonTree(CommonToken(102)) + r0.addChild(r1) + r1.addChild(CommonTree(CommonToken(103))) + r2 = CommonTree(CommonToken(106)) + r2.addChild(CommonTree(CommonToken(107))) + r1.addChild(r2) + r0.addChild(CommonTree(CommonToken(104))) + r0.addChild(CommonTree(CommonToken(105))) + + stream = CommonTreeNodeStream(r0) + stream.seek(7) # seek to 107 + self.failUnlessEqual(107, stream.LT(1).getType()) + stream.consume() # consume 107 + stream.consume() # consume UP + stream.consume() # consume UP + self.failUnlessEqual(104, stream.LT(1).getType()) + + + def toNodesOnlyString(self, nodes): + buf = [] + for i in range(nodes.size()): + t = nodes.LT(i+1) + type = nodes.getTreeAdaptor().getType(t) + if not (type==DOWN or type==UP): + buf.append(str(type)) + + return ' '.join(buf) + + +class TestCommonTreeNodeStream(unittest.TestCase): + """Test case for the CommonTreeNodeStream class.""" + + def testPushPop(self): + # ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109) + # stream has 9 real + 8 nav nodes + # Sequence of types: 101 DN 102 DN 103 UP 104 DN 105 UP 106 DN 107 UP 108 109 UP + r0 = CommonTree(CommonToken(101)) + r1 = CommonTree(CommonToken(102)) + r1.addChild(CommonTree(CommonToken(103))) + r0.addChild(r1) + r2 = CommonTree(CommonToken(104)) + r2.addChild(CommonTree(CommonToken(105))) + r0.addChild(r2) + r3 = CommonTree(CommonToken(106)) + r3.addChild(CommonTree(CommonToken(107))) + r0.addChild(r3) + r0.addChild(CommonTree(CommonToken(108))) + r0.addChild(CommonTree(CommonToken(109))) + + stream = CommonTreeNodeStream(r0) + expecting = "101 2 102 2 103 3 104 2 105 3 106 2 107 3 108 109 3" + found = str(stream) + self.failUnlessEqual(expecting, found) + + # Assume we want to hit node 107 and then "call 102" then return + + indexOf102 = 2 + indexOf107 = 12 + for _ in range(indexOf107):# consume til 107 node + stream.consume() + + # CALL 102 + self.failUnlessEqual(107, stream.LT(1).getType()) + stream.push(indexOf102) + self.failUnlessEqual(102, stream.LT(1).getType()) + stream.consume() # consume 102 + self.failUnlessEqual(DOWN, stream.LT(1).getType()) + stream.consume() # consume DN + self.failUnlessEqual(103, stream.LT(1).getType()) + stream.consume() # consume 103 + self.failUnlessEqual(UP, stream.LT(1).getType()) + # RETURN + stream.pop() + self.failUnlessEqual(107, stream.LT(1).getType()) + + + def testNestedPushPop(self): + # ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109) + # stream has 9 real + 8 nav nodes + # Sequence of types: 101 DN 102 DN 103 UP 104 DN 105 UP 106 DN 107 UP 108 109 UP + r0 = CommonTree(CommonToken(101)) + r1 = CommonTree(CommonToken(102)) + r1.addChild(CommonTree(CommonToken(103))) + r0.addChild(r1) + r2 = CommonTree(CommonToken(104)) + r2.addChild(CommonTree(CommonToken(105))) + r0.addChild(r2) + r3 = CommonTree(CommonToken(106)) + r3.addChild(CommonTree(CommonToken(107))) + r0.addChild(r3) + r0.addChild(CommonTree(CommonToken(108))) + r0.addChild(CommonTree(CommonToken(109))) + + stream = CommonTreeNodeStream(r0) + + # Assume we want to hit node 107 and then "call 102", which + # calls 104, then return + + indexOf102 = 2 + indexOf107 = 12 + for _ in range(indexOf107): # consume til 107 node + stream.consume() + + self.failUnlessEqual(107, stream.LT(1).getType()) + # CALL 102 + stream.push(indexOf102) + self.failUnlessEqual(102, stream.LT(1).getType()) + stream.consume() # consume 102 + self.failUnlessEqual(DOWN, stream.LT(1).getType()) + stream.consume() # consume DN + self.failUnlessEqual(103, stream.LT(1).getType()) + stream.consume() # consume 103 + + # CALL 104 + indexOf104 = 6 + stream.push(indexOf104) + self.failUnlessEqual(104, stream.LT(1).getType()) + stream.consume() # consume 102 + self.failUnlessEqual(DOWN, stream.LT(1).getType()) + stream.consume() # consume DN + self.failUnlessEqual(105, stream.LT(1).getType()) + stream.consume() # consume 103 + self.failUnlessEqual(UP, stream.LT(1).getType()) + # RETURN (to UP node in 102 subtree) + stream.pop() + + self.failUnlessEqual(UP, stream.LT(1).getType()) + # RETURN (to empty stack) + stream.pop() + self.failUnlessEqual(107, stream.LT(1).getType()) + + + def testPushPopFromEOF(self): + # ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109) + # stream has 9 real + 8 nav nodes + # Sequence of types: 101 DN 102 DN 103 UP 104 DN 105 UP 106 DN 107 UP 108 109 UP + r0 = CommonTree(CommonToken(101)) + r1 = CommonTree(CommonToken(102)) + r1.addChild(CommonTree(CommonToken(103))) + r0.addChild(r1) + r2 = CommonTree(CommonToken(104)) + r2.addChild(CommonTree(CommonToken(105))) + r0.addChild(r2) + r3 = CommonTree(CommonToken(106)) + r3.addChild(CommonTree(CommonToken(107))) + r0.addChild(r3) + r0.addChild(CommonTree(CommonToken(108))) + r0.addChild(CommonTree(CommonToken(109))) + + stream = CommonTreeNodeStream(r0) + + while stream.LA(1) != EOF: + stream.consume() + + indexOf102 = 2 + indexOf104 = 6 + self.failUnlessEqual(EOF, stream.LT(1).getType()) + + # CALL 102 + stream.push(indexOf102) + self.failUnlessEqual(102, stream.LT(1).getType()) + stream.consume() # consume 102 + self.failUnlessEqual(DOWN, stream.LT(1).getType()) + stream.consume() # consume DN + self.failUnlessEqual(103, stream.LT(1).getType()) + stream.consume() # consume 103 + self.failUnlessEqual(UP, stream.LT(1).getType()) + # RETURN (to empty stack) + stream.pop() + self.failUnlessEqual(EOF, stream.LT(1).getType()) + + # CALL 104 + stream.push(indexOf104) + self.failUnlessEqual(104, stream.LT(1).getType()) + stream.consume() # consume 102 + self.failUnlessEqual(DOWN, stream.LT(1).getType()) + stream.consume() # consume DN + self.failUnlessEqual(105, stream.LT(1).getType()) + stream.consume() # consume 103 + self.failUnlessEqual(UP, stream.LT(1).getType()) + # RETURN (to empty stack) + stream.pop() + self.failUnlessEqual(EOF, stream.LT(1).getType()) + + +class TestCommonTree(unittest.TestCase): + """Test case for the CommonTree class.""" + + def setUp(self): + """Setup test fixure""" + + self.adaptor = CommonTreeAdaptor() + + + def testSingleNode(self): + t = CommonTree(CommonToken(101)) + self.failUnless(t.parent is None) + self.failUnlessEqual(-1, t.childIndex) + + + def test4Nodes(self): + # ^(101 ^(102 103) 104) + r0 = CommonTree(CommonToken(101)) + r0.addChild(CommonTree(CommonToken(102))) + r0.getChild(0).addChild(CommonTree(CommonToken(103))) + r0.addChild(CommonTree(CommonToken(104))) + + self.failUnless(r0.parent is None) + self.failUnlessEqual(-1, r0.childIndex) + + + def testList(self): + # ^(nil 101 102 103) + r0 = CommonTree(None) + c0=CommonTree(CommonToken(101)) + r0.addChild(c0) + c1=CommonTree(CommonToken(102)) + r0.addChild(c1) + c2=CommonTree(CommonToken(103)) + r0.addChild(c2) + + self.failUnless(r0.parent is None) + self.failUnlessEqual(-1, r0.childIndex) + self.failUnlessEqual(r0, c0.parent) + self.failUnlessEqual(0, c0.childIndex) + self.failUnlessEqual(r0, c1.parent) + self.failUnlessEqual(1, c1.childIndex) + self.failUnlessEqual(r0, c2.parent) + self.failUnlessEqual(2, c2.childIndex) + + + def testList2(self): + # Add child ^(nil 101 102 103) to root 5 + # should pull 101 102 103 directly to become 5's child list + root = CommonTree(CommonToken(5)) + + # child tree + r0 = CommonTree(None) + c0=CommonTree(CommonToken(101)) + r0.addChild(c0) + c1=CommonTree(CommonToken(102)) + r0.addChild(c1) + c2=CommonTree(CommonToken(103)) + r0.addChild(c2) + + root.addChild(r0) + + self.failUnless(root.parent is None) + self.failUnlessEqual(-1, root.childIndex) + # check children of root all point at root + self.failUnlessEqual(root, c0.parent) + self.failUnlessEqual(0, c0.childIndex) + self.failUnlessEqual(root, c0.parent) + self.failUnlessEqual(1, c1.childIndex) + self.failUnlessEqual(root, c0.parent) + self.failUnlessEqual(2, c2.childIndex) + + + def testAddListToExistChildren(self): + # Add child ^(nil 101 102 103) to root ^(5 6) + # should add 101 102 103 to end of 5's child list + root = CommonTree(CommonToken(5)) + root.addChild(CommonTree(CommonToken(6))) + + # child tree + r0 = CommonTree(None) + c0=CommonTree(CommonToken(101)) + r0.addChild(c0) + c1=CommonTree(CommonToken(102)) + r0.addChild(c1) + c2=CommonTree(CommonToken(103)) + r0.addChild(c2) + + root.addChild(r0) + + self.failUnless(root.parent is None) + self.failUnlessEqual(-1, root.childIndex) + # check children of root all point at root + self.failUnlessEqual(root, c0.parent) + self.failUnlessEqual(1, c0.childIndex) + self.failUnlessEqual(root, c0.parent) + self.failUnlessEqual(2, c1.childIndex) + self.failUnlessEqual(root, c0.parent) + self.failUnlessEqual(3, c2.childIndex) + + + def testDupTree(self): + # ^(101 ^(102 103 ^(106 107) ) 104 105) + r0 = CommonTree(CommonToken(101)) + r1 = CommonTree(CommonToken(102)) + r0.addChild(r1) + r1.addChild(CommonTree(CommonToken(103))) + r2 = CommonTree(CommonToken(106)) + r2.addChild(CommonTree(CommonToken(107))) + r1.addChild(r2) + r0.addChild(CommonTree(CommonToken(104))) + r0.addChild(CommonTree(CommonToken(105))) + + dup = self.adaptor.dupTree(r0) + + self.failUnless(dup.parent is None) + self.failUnlessEqual(-1, dup.childIndex) + dup.sanityCheckParentAndChildIndexes() + + + def testBecomeRoot(self): + # 5 becomes root of ^(nil 101 102 103) + newRoot = CommonTree(CommonToken(5)) + + oldRoot = CommonTree(None) + oldRoot.addChild(CommonTree(CommonToken(101))) + oldRoot.addChild(CommonTree(CommonToken(102))) + oldRoot.addChild(CommonTree(CommonToken(103))) + + self.adaptor.becomeRoot(newRoot, oldRoot) + newRoot.sanityCheckParentAndChildIndexes() + + + def testBecomeRoot2(self): + # 5 becomes root of ^(101 102 103) + newRoot = CommonTree(CommonToken(5)) + + oldRoot = CommonTree(CommonToken(101)) + oldRoot.addChild(CommonTree(CommonToken(102))) + oldRoot.addChild(CommonTree(CommonToken(103))) + + self.adaptor.becomeRoot(newRoot, oldRoot) + newRoot.sanityCheckParentAndChildIndexes() + + + def testBecomeRoot3(self): + # ^(nil 5) becomes root of ^(nil 101 102 103) + newRoot = CommonTree(None) + newRoot.addChild(CommonTree(CommonToken(5))) + + oldRoot = CommonTree(None) + oldRoot.addChild(CommonTree(CommonToken(101))) + oldRoot.addChild(CommonTree(CommonToken(102))) + oldRoot.addChild(CommonTree(CommonToken(103))) + + self.adaptor.becomeRoot(newRoot, oldRoot) + newRoot.sanityCheckParentAndChildIndexes() + + + def testBecomeRoot5(self): + # ^(nil 5) becomes root of ^(101 102 103) + newRoot = CommonTree(None) + newRoot.addChild(CommonTree(CommonToken(5))) + + oldRoot = CommonTree(CommonToken(101)) + oldRoot.addChild(CommonTree(CommonToken(102))) + oldRoot.addChild(CommonTree(CommonToken(103))) + + self.adaptor.becomeRoot(newRoot, oldRoot) + newRoot.sanityCheckParentAndChildIndexes() + + + def testBecomeRoot6(self): + # emulates construction of ^(5 6) + root_0 = self.adaptor.nil() + root_1 = self.adaptor.nil() + root_1 = self.adaptor.becomeRoot(CommonTree(CommonToken(5)), root_1) + + self.adaptor.addChild(root_1, CommonTree(CommonToken(6))) + + self.adaptor.addChild(root_0, root_1) + + root_0.sanityCheckParentAndChildIndexes() + + + # Test replaceChildren + + def testReplaceWithNoChildren(self): + t = CommonTree(CommonToken(101)) + newChild = CommonTree(CommonToken(5)) + error = False + try: + t.replaceChildren(0, 0, newChild) + + except IndexError: + error = True + + self.failUnless(error) + + + def testReplaceWithOneChildren(self): + # assume token type 99 and use text + t = CommonTree(CommonToken(99, text="a")) + c0 = CommonTree(CommonToken(99, text="b")) + t.addChild(c0) + + newChild = CommonTree(CommonToken(99, text="c")) + t.replaceChildren(0, 0, newChild) + expecting = "(a c)" + self.failUnlessEqual(expecting, t.toStringTree()) + t.sanityCheckParentAndChildIndexes() + + + def testReplaceInMiddle(self): + t = CommonTree(CommonToken(99, text="a")) + t.addChild(CommonTree(CommonToken(99, text="b"))) + t.addChild(CommonTree(CommonToken(99, text="c"))) # index 1 + t.addChild(CommonTree(CommonToken(99, text="d"))) + + newChild = CommonTree(CommonToken(99, text="x")) + t.replaceChildren(1, 1, newChild) + expecting = "(a b x d)" + self.failUnlessEqual(expecting, t.toStringTree()) + t.sanityCheckParentAndChildIndexes() + + + def testReplaceAtLeft(self): + t = CommonTree(CommonToken(99, text="a")) + t.addChild(CommonTree(CommonToken(99, text="b"))) # index 0 + t.addChild(CommonTree(CommonToken(99, text="c"))) + t.addChild(CommonTree(CommonToken(99, text="d"))) + + newChild = CommonTree(CommonToken(99, text="x")) + t.replaceChildren(0, 0, newChild) + expecting = "(a x c d)" + self.failUnlessEqual(expecting, t.toStringTree()) + t.sanityCheckParentAndChildIndexes() + + + def testReplaceAtRight(self): + t = CommonTree(CommonToken(99, text="a")) + t.addChild(CommonTree(CommonToken(99, text="b"))) + t.addChild(CommonTree(CommonToken(99, text="c"))) + t.addChild(CommonTree(CommonToken(99, text="d"))) # index 2 + + newChild = CommonTree(CommonToken(99, text="x")) + t.replaceChildren(2, 2, newChild) + expecting = "(a b c x)" + self.failUnlessEqual(expecting, t.toStringTree()) + t.sanityCheckParentAndChildIndexes() + + + def testReplaceOneWithTwoAtLeft(self): + t = CommonTree(CommonToken(99, text="a")) + t.addChild(CommonTree(CommonToken(99, text="b"))) + t.addChild(CommonTree(CommonToken(99, text="c"))) + t.addChild(CommonTree(CommonToken(99, text="d"))) + + newChildren = self.adaptor.nil() + newChildren.addChild(CommonTree(CommonToken(99, text="x"))) + newChildren.addChild(CommonTree(CommonToken(99, text="y"))) + + t.replaceChildren(0, 0, newChildren) + expecting = "(a x y c d)" + self.failUnlessEqual(expecting, t.toStringTree()) + t.sanityCheckParentAndChildIndexes() + + + def testReplaceOneWithTwoAtRight(self): + t = CommonTree(CommonToken(99, text="a")) + t.addChild(CommonTree(CommonToken(99, text="b"))) + t.addChild(CommonTree(CommonToken(99, text="c"))) + t.addChild(CommonTree(CommonToken(99, text="d"))) + + newChildren = self.adaptor.nil() + newChildren.addChild(CommonTree(CommonToken(99, text="x"))) + newChildren.addChild(CommonTree(CommonToken(99, text="y"))) + + t.replaceChildren(2, 2, newChildren) + expecting = "(a b c x y)" + self.failUnlessEqual(expecting, t.toStringTree()) + t.sanityCheckParentAndChildIndexes() + + + def testReplaceOneWithTwoInMiddle(self): + t = CommonTree(CommonToken(99, text="a")) + t.addChild(CommonTree(CommonToken(99, text="b"))) + t.addChild(CommonTree(CommonToken(99, text="c"))) + t.addChild(CommonTree(CommonToken(99, text="d"))) + + newChildren = self.adaptor.nil() + newChildren.addChild(CommonTree(CommonToken(99, text="x"))) + newChildren.addChild(CommonTree(CommonToken(99, text="y"))) + + t.replaceChildren(1, 1, newChildren) + expecting = "(a b x y d)" + self.failUnlessEqual(expecting, t.toStringTree()) + t.sanityCheckParentAndChildIndexes() + + + def testReplaceTwoWithOneAtLeft(self): + t = CommonTree(CommonToken(99, text="a")) + t.addChild(CommonTree(CommonToken(99, text="b"))) + t.addChild(CommonTree(CommonToken(99, text="c"))) + t.addChild(CommonTree(CommonToken(99, text="d"))) + + newChild = CommonTree(CommonToken(99, text="x")) + + t.replaceChildren(0, 1, newChild) + expecting = "(a x d)" + self.failUnlessEqual(expecting, t.toStringTree()) + t.sanityCheckParentAndChildIndexes() + + + def testReplaceTwoWithOneAtRight(self): + t = CommonTree(CommonToken(99, text="a")) + t.addChild(CommonTree(CommonToken(99, text="b"))) + t.addChild(CommonTree(CommonToken(99, text="c"))) + t.addChild(CommonTree(CommonToken(99, text="d"))) + + newChild = CommonTree(CommonToken(99, text="x")) + + t.replaceChildren(1, 2, newChild) + expecting = "(a b x)" + self.failUnlessEqual(expecting, t.toStringTree()) + t.sanityCheckParentAndChildIndexes() + + + def testReplaceAllWithOne(self): + t = CommonTree(CommonToken(99, text="a")) + t.addChild(CommonTree(CommonToken(99, text="b"))) + t.addChild(CommonTree(CommonToken(99, text="c"))) + t.addChild(CommonTree(CommonToken(99, text="d"))) + + newChild = CommonTree(CommonToken(99, text="x")) + + t.replaceChildren(0, 2, newChild) + expecting = "(a x)" + self.failUnlessEqual(expecting, t.toStringTree()) + t.sanityCheckParentAndChildIndexes() + + + def testReplaceAllWithTwo(self): + t = CommonTree(CommonToken(99, text="a")) + t.addChild(CommonTree(CommonToken(99, text="b"))) + t.addChild(CommonTree(CommonToken(99, text="c"))) + t.addChild(CommonTree(CommonToken(99, text="d"))) + + newChildren = self.adaptor.nil() + newChildren.addChild(CommonTree(CommonToken(99, text="x"))) + newChildren.addChild(CommonTree(CommonToken(99, text="y"))) + + t.replaceChildren(0, 2, newChildren) + expecting = "(a x y)" + self.failUnlessEqual(expecting, t.toStringTree()) + t.sanityCheckParentAndChildIndexes() + + +class TestTreeContext(unittest.TestCase): + """Test the TreeParser.inContext() method""" + + tokenNames = [ + "", "", "", "", "VEC", "ASSIGN", "PRINT", + "PLUS", "MULT", "DOT", "ID", "INT", "WS", "'['", "','", "']'" + ] + + def testSimpleParent(self): + tree = "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID[x] (VEC INT[1] INT[2] INT[3]))))" + adaptor = CommonTreeAdaptor() + wiz = TreeWizard(adaptor, self.tokenNames) + t = wiz.create(tree) + + labels = {} + valid = wiz.parse( + t, + "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID (VEC INT %x:INT INT))))", + labels) + self.assertTrue(valid) + node = labels.get("x") + + expecting = True + found = TreeParser._inContext(adaptor, self.tokenNames, node, "VEC") + self.assertEquals(expecting, found) + + + def testNoParent(self): + tree = "(PRINT (MULT ID[x] (VEC INT[1] INT[2] INT[3])))" + adaptor = CommonTreeAdaptor() + wiz = TreeWizard(adaptor, self.tokenNames) + t = wiz.create(tree) + + labels = {} + valid = wiz.parse( + t, + "(%x:PRINT (MULT ID (VEC INT INT INT)))", + labels) + self.assertTrue(valid) + node = labels.get("x") + + expecting = False + found = TreeParser._inContext(adaptor, self.tokenNames, node, "VEC") + self.assertEquals(expecting, found) + + + def testParentWithWildcard(self): + tree = "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID[x] (VEC INT[1] INT[2] INT[3]))))" + adaptor = CommonTreeAdaptor() + wiz = TreeWizard(adaptor, self.tokenNames) + t = wiz.create(tree) + + labels = {} + valid = wiz.parse( + t, + "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID (VEC INT %x:INT INT))))", + labels) + self.assertTrue(valid) + node = labels.get("x") + + expecting = True + found = TreeParser._inContext(adaptor, self.tokenNames, node, "VEC ...") + self.assertEquals(expecting, found) + + + def testWildcardAtStartIgnored(self): + tree = "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID[x] (VEC INT[1] INT[2] INT[3]))))" + adaptor = CommonTreeAdaptor() + wiz = TreeWizard(adaptor, self.tokenNames) + t = wiz.create(tree) + + labels = {} + valid = wiz.parse( + t, + "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID (VEC INT %x:INT INT))))", + labels) + self.assertTrue(valid) + node = labels.get("x") + + expecting = True + found = TreeParser._inContext(adaptor, self.tokenNames, node, "...VEC") + self.assertEquals(expecting, found) + + + def testWildcardInBetween(self): + tree = "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID[x] (VEC INT[1] INT[2] INT[3]))))" + adaptor = CommonTreeAdaptor() + wiz = TreeWizard(adaptor, self.tokenNames) + t = wiz.create(tree) + + labels = {} + valid = wiz.parse( + t, + "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID (VEC INT %x:INT INT))))", + labels) + self.assertTrue(valid) + node = labels.get("x") + + expecting = True + found = TreeParser._inContext(adaptor, self.tokenNames, node, "PRINT...VEC") + self.assertEquals(expecting, found) + + + def testLotsOfWildcards(self): + tree = "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID[x] (VEC INT[1] INT[2] INT[3]))))" + adaptor = CommonTreeAdaptor() + wiz = TreeWizard(adaptor, self.tokenNames) + t = wiz.create(tree) + + labels = {} + valid = wiz.parse( + t, + "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID (VEC INT %x:INT INT))))", + labels) + self.assertTrue(valid) + node = labels.get("x") + + expecting = True + found = TreeParser._inContext(adaptor, self.tokenNames, node, "... PRINT ... VEC ...") + self.assertEquals(expecting, found) + + + def testDeep(self): + tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" + adaptor = CommonTreeAdaptor() + wiz = TreeWizard(adaptor, self.tokenNames) + t = wiz.create(tree) + + labels = {} + valid = wiz.parse( + t, + "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", + labels) + self.assertTrue(valid) + node = labels.get("x") + + expecting = True + found = TreeParser._inContext(adaptor, self.tokenNames, node, "VEC ...") + self.assertEquals(expecting, found) + + + def testDeepAndFindRoot(self): + tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" + adaptor = CommonTreeAdaptor() + wiz = TreeWizard(adaptor, self.tokenNames) + t = wiz.create(tree) + + labels = {} + valid = wiz.parse( + t, + "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", + labels) + self.assertTrue(valid) + node = labels.get("x") + + expecting = True + found = TreeParser._inContext(adaptor, self.tokenNames, node, "PRINT ...") + self.assertEquals(expecting, found) + + + def testDeepAndFindRoot2(self): + tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" + adaptor = CommonTreeAdaptor() + wiz = TreeWizard(adaptor, self.tokenNames) + t = wiz.create(tree) + + labels = {} + valid = wiz.parse( + t, + "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", + labels) + self.assertTrue(valid) + node = labels.get("x") + + expecting = True + found = TreeParser._inContext(adaptor, self.tokenNames, node, "PRINT ... VEC ...") + self.assertEquals(expecting, found) + + + def testChain(self): + tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" + adaptor = CommonTreeAdaptor() + wiz = TreeWizard(adaptor, self.tokenNames) + t = wiz.create(tree) + + labels = {} + valid = wiz.parse( + t, + "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", + labels) + self.assertTrue(valid) + node = labels.get("x") + + expecting = True + found = TreeParser._inContext(adaptor, self.tokenNames, node, "PRINT MULT VEC MULT") + self.assertEquals(expecting, found) + + + ## TEST INVALID CONTEXTS + + def testNotParent(self): + tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" + adaptor = CommonTreeAdaptor() + wiz = TreeWizard(adaptor, self.tokenNames) + t = wiz.create(tree) + + labels = {} + valid = wiz.parse( + t, + "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", + labels) + self.assertTrue(valid) + node = labels.get("x") + + expecting = False + found = TreeParser._inContext(adaptor, self.tokenNames, node, "VEC") + self.assertEquals(expecting, found) + + + def testMismatch(self): + tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" + adaptor = CommonTreeAdaptor() + wiz = TreeWizard(adaptor, self.tokenNames) + t = wiz.create(tree) + + labels = {} + valid = wiz.parse( + t, + "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", + labels) + self.assertTrue(valid) + node = labels.get("x") + + expecting = False + ## missing MULT + found = TreeParser._inContext(adaptor, self.tokenNames, node, "PRINT VEC MULT") + self.assertEquals(expecting, found) + + + def testMismatch2(self): + tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" + adaptor = CommonTreeAdaptor() + wiz = TreeWizard(adaptor, self.tokenNames) + t = wiz.create(tree) + + labels = {} + valid = wiz.parse( + t, + "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", + labels) + self.assertTrue(valid) + node = labels.get("x") + + expecting = False + found = TreeParser._inContext(adaptor, self.tokenNames, node, "PRINT VEC ...") + self.assertEquals(expecting, found) + + + def testMismatch3(self): + tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" + adaptor = CommonTreeAdaptor() + wiz = TreeWizard(adaptor, self.tokenNames) + t = wiz.create(tree) + + labels = {} + valid = wiz.parse( + t, + "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", + labels) + self.assertTrue(valid) + node = labels.get("x") + + expecting = False + found = TreeParser._inContext(adaptor, self.tokenNames, node, "VEC ... VEC MULT") + self.assertEquals(expecting, found) + + + def testDoubleEtc(self): + tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" + adaptor = CommonTreeAdaptor() + wiz = TreeWizard(adaptor, self.tokenNames) + t = wiz.create(tree) + + labels = {} + valid = wiz.parse( + t, + "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", + labels) + self.assertTrue(valid) + node = labels.get("x") + + try: + TreeParser._inContext(adaptor, self.tokenNames, node, "PRINT ... ... VEC") + self.fail() + except ValueError, exc: + expecting = "invalid syntax: ... ..." + found = str(exc) + self.assertEquals(expecting, found) + + + def testDotDot(self): + tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" + adaptor = CommonTreeAdaptor() + wiz = TreeWizard(adaptor, self.tokenNames) + t = wiz.create(tree) + + labels = {} + valid = wiz.parse( + t, + "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", + labels) + self.assertTrue(valid) + node = labels.get("x") + + try: + TreeParser._inContext(adaptor, self.tokenNames, node, "PRINT .. VEC") + self.fail() + except ValueError, exc: + expecting = "invalid syntax: .." + found = str(exc) + self.assertEquals(expecting, found) + + +class TestTreeVisitor(unittest.TestCase): + """Test of the TreeVisitor class.""" + + tokenNames = [ + "", "", "", "", "VEC", "ASSIGN", "PRINT", + "PLUS", "MULT", "DOT", "ID", "INT", "WS", "'['", "','", "']'" + ] + + def testTreeVisitor(self): + tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))" + adaptor = CommonTreeAdaptor() + wiz = TreeWizard(adaptor, self.tokenNames) + t = wiz.create(tree) + + found = [] + def pre(t): + found.append("pre(%s)" % t) + return t + def post(t): + found.append("post(%s)" % t) + return t + + visitor = TreeVisitor(adaptor) + visitor.visit(t, pre, post) + + expecting = [ "pre(PRINT)", "pre(MULT)", "pre(x)", "post(x)", + "pre(VEC)", "pre(MULT)", "pre(9)", "post(9)", "pre(1)", + "post(1)", "post(MULT)", "pre(2)", "post(2)", "pre(3)", + "post(3)", "post(VEC)", "post(MULT)", "post(PRINT)" ] + + self.assertEquals(expecting, found) + +if __name__ == "__main__": + unittest.main(testRunner=unittest.TextTestRunner(verbosity=2)) diff --git a/antlr-3.1.3/runtime/Python/unittests/testtreewizard.py b/antlr-3.1.3/runtime/Python/unittests/testtreewizard.py new file mode 100644 index 0000000..18537f3 --- /dev/null +++ b/antlr-3.1.3/runtime/Python/unittests/testtreewizard.py @@ -0,0 +1,682 @@ +# -*- coding: utf-8 -*- + +import os +import unittest +from StringIO import StringIO + +from antlr3.tree import CommonTreeAdaptor, CommonTree, INVALID_TOKEN_TYPE +from antlr3.treewizard import TreeWizard, computeTokenTypes, \ + TreePatternLexer, EOF, ID, BEGIN, END, PERCENT, COLON, DOT, ARG, \ + TreePatternParser, \ + TreePattern, WildcardTreePattern, TreePatternTreeAdaptor + + +class TestComputeTokenTypes(unittest.TestCase): + """Test case for the computeTokenTypes function.""" + + def testNone(self): + """computeTokenTypes(None) -> {}""" + + typeMap = computeTokenTypes(None) + self.failUnless(isinstance(typeMap, dict)) + self.failUnlessEqual(typeMap, {}) + + + def testList(self): + """computeTokenTypes(['a', 'b']) -> { 'a': 0, 'b': 1 }""" + + typeMap = computeTokenTypes(['a', 'b']) + self.failUnless(isinstance(typeMap, dict)) + self.failUnlessEqual(typeMap, { 'a': 0, 'b': 1 }) + + +class TestTreePatternLexer(unittest.TestCase): + """Test case for the TreePatternLexer class.""" + + def testBegin(self): + """TreePatternLexer(): '('""" + + lexer = TreePatternLexer('(') + type = lexer.nextToken() + self.failUnlessEqual(type, BEGIN) + self.failUnlessEqual(lexer.sval, '') + self.failUnlessEqual(lexer.error, False) + + + def testEnd(self): + """TreePatternLexer(): ')'""" + + lexer = TreePatternLexer(')') + type = lexer.nextToken() + self.failUnlessEqual(type, END) + self.failUnlessEqual(lexer.sval, '') + self.failUnlessEqual(lexer.error, False) + + + def testPercent(self): + """TreePatternLexer(): '%'""" + + lexer = TreePatternLexer('%') + type = lexer.nextToken() + self.failUnlessEqual(type, PERCENT) + self.failUnlessEqual(lexer.sval, '') + self.failUnlessEqual(lexer.error, False) + + + def testDot(self): + """TreePatternLexer(): '.'""" + + lexer = TreePatternLexer('.') + type = lexer.nextToken() + self.failUnlessEqual(type, DOT) + self.failUnlessEqual(lexer.sval, '') + self.failUnlessEqual(lexer.error, False) + + + def testColon(self): + """TreePatternLexer(): ':'""" + + lexer = TreePatternLexer(':') + type = lexer.nextToken() + self.failUnlessEqual(type, COLON) + self.failUnlessEqual(lexer.sval, '') + self.failUnlessEqual(lexer.error, False) + + + def testEOF(self): + """TreePatternLexer(): EOF""" + + lexer = TreePatternLexer(' \n \r \t ') + type = lexer.nextToken() + self.failUnlessEqual(type, EOF) + self.failUnlessEqual(lexer.sval, '') + self.failUnlessEqual(lexer.error, False) + + + def testID(self): + """TreePatternLexer(): ID""" + + lexer = TreePatternLexer('_foo12_bar') + type = lexer.nextToken() + self.failUnlessEqual(type, ID) + self.failUnlessEqual(lexer.sval, '_foo12_bar') + self.failUnlessEqual(lexer.error, False) + + + def testARG(self): + """TreePatternLexer(): ARG""" + + lexer = TreePatternLexer('[ \\]bla\\n]') + type = lexer.nextToken() + self.failUnlessEqual(type, ARG) + self.failUnlessEqual(lexer.sval, ' ]bla\\n') + self.failUnlessEqual(lexer.error, False) + + + def testError(self): + """TreePatternLexer(): error""" + + lexer = TreePatternLexer('1') + type = lexer.nextToken() + self.failUnlessEqual(type, EOF) + self.failUnlessEqual(lexer.sval, '') + self.failUnlessEqual(lexer.error, True) + + +class TestTreePatternParser(unittest.TestCase): + """Test case for the TreePatternParser class.""" + + def setUp(self): + """Setup text fixure + + We need a tree adaptor, use CommonTreeAdaptor. + And a constant list of token names. + + """ + + self.adaptor = CommonTreeAdaptor() + self.tokens = [ + "", "", "", "", "", "A", "B", "C", "D", "E", "ID", "VAR" + ] + self.wizard = TreeWizard(self.adaptor, tokenNames=self.tokens) + + + def testSingleNode(self): + """TreePatternParser: 'ID'""" + lexer = TreePatternLexer('ID') + parser = TreePatternParser(lexer, self.wizard, self.adaptor) + tree = parser.pattern() + self.failUnless(isinstance(tree, CommonTree)) + self.failUnlessEqual(tree.getType(), 10) + self.failUnlessEqual(tree.getText(), 'ID') + + + def testSingleNodeWithArg(self): + """TreePatternParser: 'ID[foo]'""" + lexer = TreePatternLexer('ID[foo]') + parser = TreePatternParser(lexer, self.wizard, self.adaptor) + tree = parser.pattern() + self.failUnless(isinstance(tree, CommonTree)) + self.failUnlessEqual(tree.getType(), 10) + self.failUnlessEqual(tree.getText(), 'foo') + + + def testSingleLevelTree(self): + """TreePatternParser: '(A B)'""" + lexer = TreePatternLexer('(A B)') + parser = TreePatternParser(lexer, self.wizard, self.adaptor) + tree = parser.pattern() + self.failUnless(isinstance(tree, CommonTree)) + self.failUnlessEqual(tree.getType(), 5) + self.failUnlessEqual(tree.getText(), 'A') + self.failUnlessEqual(tree.getChildCount(), 1) + self.failUnlessEqual(tree.getChild(0).getType(), 6) + self.failUnlessEqual(tree.getChild(0).getText(), 'B') + + + def testNil(self): + """TreePatternParser: 'nil'""" + lexer = TreePatternLexer('nil') + parser = TreePatternParser(lexer, self.wizard, self.adaptor) + tree = parser.pattern() + self.failUnless(isinstance(tree, CommonTree)) + self.failUnlessEqual(tree.getType(), 0) + self.failUnlessEqual(tree.getText(), None) + + + def testWildcard(self): + """TreePatternParser: '(.)'""" + lexer = TreePatternLexer('(.)') + parser = TreePatternParser(lexer, self.wizard, self.adaptor) + tree = parser.pattern() + self.failUnless(isinstance(tree, WildcardTreePattern)) + + + def testLabel(self): + """TreePatternParser: '(%a:A)'""" + lexer = TreePatternLexer('(%a:A)') + parser = TreePatternParser(lexer, self.wizard, TreePatternTreeAdaptor()) + tree = parser.pattern() + self.failUnless(isinstance(tree, TreePattern)) + self.failUnlessEqual(tree.label, 'a') + + + def testError1(self): + """TreePatternParser: ')'""" + lexer = TreePatternLexer(')') + parser = TreePatternParser(lexer, self.wizard, self.adaptor) + tree = parser.pattern() + self.failUnless(tree is None) + + + def testError2(self): + """TreePatternParser: '()'""" + lexer = TreePatternLexer('()') + parser = TreePatternParser(lexer, self.wizard, self.adaptor) + tree = parser.pattern() + self.failUnless(tree is None) + + + def testError3(self): + """TreePatternParser: '(A ])'""" + lexer = TreePatternLexer('(A ])') + parser = TreePatternParser(lexer, self.wizard, self.adaptor) + tree = parser.pattern() + self.failUnless(tree is None) + + +class TestTreeWizard(unittest.TestCase): + """Test case for the TreeWizard class.""" + + def setUp(self): + """Setup text fixure + + We need a tree adaptor, use CommonTreeAdaptor. + And a constant list of token names. + + """ + + self.adaptor = CommonTreeAdaptor() + self.tokens = [ + "", "", "", "", "", "A", "B", "C", "D", "E", "ID", "VAR" + ] + + + def testInit(self): + """TreeWizard.__init__()""" + + wiz = TreeWizard( + self.adaptor, + tokenNames=['a', 'b'] + ) + + self.failUnless(wiz.adaptor is self.adaptor) + self.failUnlessEqual( + wiz.tokenNameToTypeMap, + { 'a': 0, 'b': 1 } + ) + + + def testGetTokenType(self): + """TreeWizard.getTokenType()""" + + wiz = TreeWizard( + self.adaptor, + tokenNames=self.tokens + ) + + self.failUnlessEqual( + wiz.getTokenType('A'), + 5 + ) + + self.failUnlessEqual( + wiz.getTokenType('VAR'), + 11 + ) + + self.failUnlessEqual( + wiz.getTokenType('invalid'), + INVALID_TOKEN_TYPE + ) + + def testSingleNode(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("ID") + found = t.toStringTree() + expecting = "ID" + self.failUnlessEqual(expecting, found) + + + def testSingleNodeWithArg(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("ID[foo]") + found = t.toStringTree() + expecting = "foo" + self.failUnlessEqual(expecting, found) + + + def testSingleNodeTree(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("(A)") + found = t.toStringTree() + expecting = "A" + self.failUnlessEqual(expecting, found) + + + def testSingleLevelTree(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("(A B C D)") + found = t.toStringTree() + expecting = "(A B C D)" + self.failUnlessEqual(expecting, found) + + + def testListTree(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("(nil A B C)") + found = t.toStringTree() + expecting = "A B C" + self.failUnlessEqual(expecting, found) + + + def testInvalidListTree(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("A B C") + self.failUnless(t is None) + + + def testDoubleLevelTree(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("(A (B C) (B D) E)") + found = t.toStringTree() + expecting = "(A (B C) (B D) E)" + self.failUnlessEqual(expecting, found) + + + def __simplifyIndexMap(self, indexMap): + return dict( # stringify nodes for easy comparing + (ttype, [str(node) for node in nodes]) + for ttype, nodes in indexMap.items() + ) + + def testSingleNodeIndex(self): + wiz = TreeWizard(self.adaptor, self.tokens) + tree = wiz.create("ID") + indexMap = wiz.index(tree) + found = self.__simplifyIndexMap(indexMap) + expecting = { 10: ["ID"] } + self.failUnlessEqual(expecting, found) + + + def testNoRepeatsIndex(self): + wiz = TreeWizard(self.adaptor, self.tokens) + tree = wiz.create("(A B C D)") + indexMap = wiz.index(tree) + found = self.__simplifyIndexMap(indexMap) + expecting = { 8:['D'], 6:['B'], 7:['C'], 5:['A'] } + self.failUnlessEqual(expecting, found) + + + def testRepeatsIndex(self): + wiz = TreeWizard(self.adaptor, self.tokens) + tree = wiz.create("(A B (A C B) B D D)") + indexMap = wiz.index(tree) + found = self.__simplifyIndexMap(indexMap) + expecting = { 8: ['D', 'D'], 6: ['B', 'B', 'B'], 7: ['C'], 5: ['A', 'A'] } + self.failUnlessEqual(expecting, found) + + + def testNoRepeatsVisit(self): + wiz = TreeWizard(self.adaptor, self.tokens) + tree = wiz.create("(A B C D)") + + elements = [] + def visitor(node, parent, childIndex, labels): + elements.append(str(node)) + + wiz.visit(tree, wiz.getTokenType("B"), visitor) + + expecting = ['B'] + self.failUnlessEqual(expecting, elements) + + + def testNoRepeatsVisit2(self): + wiz = TreeWizard(self.adaptor, self.tokens) + tree = wiz.create("(A B (A C B) B D D)") + + elements = [] + def visitor(node, parent, childIndex, labels): + elements.append(str(node)) + + wiz.visit(tree, wiz.getTokenType("C"), visitor) + + expecting = ['C'] + self.failUnlessEqual(expecting, elements) + + + def testRepeatsVisit(self): + wiz = TreeWizard(self.adaptor, self.tokens) + tree = wiz.create("(A B (A C B) B D D)") + + elements = [] + def visitor(node, parent, childIndex, labels): + elements.append(str(node)) + + wiz.visit(tree, wiz.getTokenType("B"), visitor) + + expecting = ['B', 'B', 'B'] + self.failUnlessEqual(expecting, elements) + + + def testRepeatsVisit2(self): + wiz = TreeWizard(self.adaptor, self.tokens) + tree = wiz.create("(A B (A C B) B D D)") + + elements = [] + def visitor(node, parent, childIndex, labels): + elements.append(str(node)) + + wiz.visit(tree, wiz.getTokenType("A"), visitor) + + expecting = ['A', 'A'] + self.failUnlessEqual(expecting, elements) + + + def testRepeatsVisitWithContext(self): + wiz = TreeWizard(self.adaptor, self.tokens) + tree = wiz.create("(A B (A C B) B D D)") + + elements = [] + def visitor(node, parent, childIndex, labels): + elements.append('%s@%s[%d]' % (node, parent, childIndex)) + + wiz.visit(tree, wiz.getTokenType("B"), visitor) + + expecting = ['B@A[0]', 'B@A[1]', 'B@A[2]'] + self.failUnlessEqual(expecting, elements) + + + def testRepeatsVisitWithNullParentAndContext(self): + wiz = TreeWizard(self.adaptor, self.tokens) + tree = wiz.create("(A B (A C B) B D D)") + + elements = [] + def visitor(node, parent, childIndex, labels): + elements.append( + '%s@%s[%d]' + % (node, ['nil', parent][parent is not None], childIndex) + ) + + wiz.visit(tree, wiz.getTokenType("A"), visitor) + + expecting = ['A@nil[0]', 'A@A[1]'] + self.failUnlessEqual(expecting, elements) + + + def testVisitPattern(self): + wiz = TreeWizard(self.adaptor, self.tokens) + tree = wiz.create("(A B C (A B) D)") + + elements = [] + def visitor(node, parent, childIndex, labels): + elements.append( + str(node) + ) + + wiz.visit(tree, '(A B)', visitor) + + expecting = ['A'] # shouldn't match overall root, just (A B) + self.failUnlessEqual(expecting, elements) + + + def testVisitPatternMultiple(self): + wiz = TreeWizard(self.adaptor, self.tokens) + tree = wiz.create("(A B C (A B) (D (A B)))") + + elements = [] + def visitor(node, parent, childIndex, labels): + elements.append( + '%s@%s[%d]' + % (node, ['nil', parent][parent is not None], childIndex) + ) + + wiz.visit(tree, '(A B)', visitor) + + expecting = ['A@A[2]', 'A@D[0]'] + self.failUnlessEqual(expecting, elements) + + + def testVisitPatternMultipleWithLabels(self): + wiz = TreeWizard(self.adaptor, self.tokens) + tree = wiz.create("(A B C (A[foo] B[bar]) (D (A[big] B[dog])))") + + elements = [] + def visitor(node, parent, childIndex, labels): + elements.append( + '%s@%s[%d]%s&%s' + % (node, + ['nil', parent][parent is not None], + childIndex, + labels['a'], + labels['b'], + ) + ) + + wiz.visit(tree, '(%a:A %b:B)', visitor) + + expecting = ['foo@A[2]foo&bar', 'big@D[0]big&dog'] + self.failUnlessEqual(expecting, elements) + + + def testParse(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("(A B C)") + valid = wiz.parse(t, "(A B C)") + self.failUnless(valid) + + + def testParseSingleNode(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("A") + valid = wiz.parse(t, "A") + self.failUnless(valid) + + + def testParseSingleNodeFails(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("A") + valid = wiz.parse(t, "B") + self.failUnless(not valid) + + + def testParseFlatTree(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("(nil A B C)") + valid = wiz.parse(t, "(nil A B C)") + self.failUnless(valid) + + + def testParseFlatTreeFails(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("(nil A B C)") + valid = wiz.parse(t, "(nil A B)") + self.failUnless(not valid) + + + def testParseFlatTreeFails2(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("(nil A B C)") + valid = wiz.parse(t, "(nil A B A)") + self.failUnless(not valid) + + + def testWildcard(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("(A B C)") + valid = wiz.parse(t, "(A . .)") + self.failUnless(valid) + + + def testParseWithText(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("(A B[foo] C[bar])") + # C pattern has no text arg so despite [bar] in t, no need + # to match text--check structure only. + valid = wiz.parse(t, "(A B[foo] C)") + self.failUnless(valid) + + + def testParseWithTextFails(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("(A B C)") + valid = wiz.parse(t, "(A[foo] B C)") + self.failUnless(not valid) # fails + + + def testParseLabels(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("(A B C)") + labels = {} + valid = wiz.parse(t, "(%a:A %b:B %c:C)", labels) + self.failUnless(valid) + self.failUnlessEqual("A", str(labels["a"])) + self.failUnlessEqual("B", str(labels["b"])) + self.failUnlessEqual("C", str(labels["c"])) + + + def testParseWithWildcardLabels(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("(A B C)") + labels = {} + valid = wiz.parse(t, "(A %b:. %c:.)", labels) + self.failUnless(valid) + self.failUnlessEqual("B", str(labels["b"])) + self.failUnlessEqual("C", str(labels["c"])) + + + def testParseLabelsAndTestText(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("(A B[foo] C)") + labels = {} + valid = wiz.parse(t, "(%a:A %b:B[foo] %c:C)", labels) + self.failUnless(valid) + self.failUnlessEqual("A", str(labels["a"])) + self.failUnlessEqual("foo", str(labels["b"])) + self.failUnlessEqual("C", str(labels["c"])) + + + def testParseLabelsInNestedTree(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("(A (B C) (D E))") + labels = {} + valid = wiz.parse(t, "(%a:A (%b:B %c:C) (%d:D %e:E) )", labels) + self.failUnless(valid) + self.failUnlessEqual("A", str(labels["a"])) + self.failUnlessEqual("B", str(labels["b"])) + self.failUnlessEqual("C", str(labels["c"])) + self.failUnlessEqual("D", str(labels["d"])) + self.failUnlessEqual("E", str(labels["e"])) + + + def testEquals(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t1 = wiz.create("(A B C)") + t2 = wiz.create("(A B C)") + same = wiz.equals(t1, t2) + self.failUnless(same) + + + def testEqualsWithText(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t1 = wiz.create("(A B[foo] C)") + t2 = wiz.create("(A B[foo] C)") + same = wiz.equals(t1, t2) + self.failUnless(same) + + + def testEqualsWithMismatchedText(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t1 = wiz.create("(A B[foo] C)") + t2 = wiz.create("(A B C)") + same = wiz.equals(t1, t2) + self.failUnless(not same) + + + def testEqualsWithMismatchedList(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t1 = wiz.create("(A B C)") + t2 = wiz.create("(A B A)") + same = wiz.equals(t1, t2) + self.failUnless(not same) + + + def testEqualsWithMismatchedListLength(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t1 = wiz.create("(A B C)") + t2 = wiz.create("(A B)") + same = wiz.equals(t1, t2) + self.failUnless(not same) + + + def testFindPattern(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("(A B C (A[foo] B[bar]) (D (A[big] B[dog])))") + subtrees = wiz.find(t, "(A B)") + found = [str(node) for node in subtrees] + expecting = ['foo', 'big'] + self.failUnlessEqual(expecting, found) + + + def testFindTokenType(self): + wiz = TreeWizard(self.adaptor, self.tokens) + t = wiz.create("(A B C (A[foo] B[bar]) (D (A[big] B[dog])))") + subtrees = wiz.find(t, wiz.getTokenType('A')) + found = [str(node) for node in subtrees] + expecting = ['A', 'foo', 'big'] + self.failUnlessEqual(expecting, found) + + + +if __name__ == "__main__": + unittest.main(testRunner=unittest.TextTestRunner(verbosity=2)) diff --git a/antlr-3.1.3/runtime/Python/xmlrunner.py b/antlr-3.1.3/runtime/Python/xmlrunner.py new file mode 100644 index 0000000..a4fed9f --- /dev/null +++ b/antlr-3.1.3/runtime/Python/xmlrunner.py @@ -0,0 +1,378 @@ +""" +XML Test Runner for PyUnit +""" + +# Written by Sebastian Rittau and placed in +# the Public Domain. With contributions by Paolo Borelli. + +__revision__ = "$Id: /private/python/stdlib/xmlrunner.py 16654 2007-11-12T12:46:35.368945Z srittau $" + +import os.path +import re +import sys +import time +import traceback +import unittest +from StringIO import StringIO +from xml.sax.saxutils import escape + +from StringIO import StringIO + + +class _TestInfo(object): + + """Information about a particular test. + + Used by _XMLTestResult. + + """ + + def __init__(self, test, time): + (self._class, self._method) = test.id().rsplit(".", 1) + self._time = time + self._error = None + self._failure = None + + @staticmethod + def create_success(test, time): + """Create a _TestInfo instance for a successful test.""" + return _TestInfo(test, time) + + @staticmethod + def create_failure(test, time, failure): + """Create a _TestInfo instance for a failed test.""" + info = _TestInfo(test, time) + info._failure = failure + return info + + @staticmethod + def create_error(test, time, error): + """Create a _TestInfo instance for an erroneous test.""" + info = _TestInfo(test, time) + info._error = error + return info + + def print_report(self, stream): + """Print information about this test case in XML format to the + supplied stream. + + """ + stream.write(' ' % \ + { + "class": self._class, + "method": self._method, + "time": self._time, + }) + if self._failure != None: + self._print_error(stream, 'failure', self._failure) + if self._error != None: + self._print_error(stream, 'error', self._error) + stream.write('\n') + + def _print_error(self, stream, tagname, error): + """Print information from a failure or error to the supplied stream.""" + text = escape(str(error[1])) + stream.write('\n') + stream.write(' <%s type="%s">%s\n' \ + % (tagname, str(error[0]), text)) + tb_stream = StringIO() + traceback.print_tb(error[2], None, tb_stream) + stream.write(escape(tb_stream.getvalue())) + stream.write(' \n' % tagname) + stream.write(' ') + + +class _XMLTestResult(unittest.TestResult): + + """A test result class that stores result as XML. + + Used by XMLTestRunner. + + """ + + def __init__(self, classname): + unittest.TestResult.__init__(self) + self._test_name = classname + self._start_time = None + self._tests = [] + self._error = None + self._failure = None + + def startTest(self, test): + unittest.TestResult.startTest(self, test) + self._error = None + self._failure = None + self._start_time = time.time() + + def stopTest(self, test): + time_taken = time.time() - self._start_time + unittest.TestResult.stopTest(self, test) + if self._error: + info = _TestInfo.create_error(test, time_taken, self._error) + elif self._failure: + info = _TestInfo.create_failure(test, time_taken, self._failure) + else: + info = _TestInfo.create_success(test, time_taken) + self._tests.append(info) + + def addError(self, test, err): + unittest.TestResult.addError(self, test, err) + self._error = err + + def addFailure(self, test, err): + unittest.TestResult.addFailure(self, test, err) + self._failure = err + + def print_report(self, stream, time_taken, out, err): + """Prints the XML report to the supplied stream. + + The time the tests took to perform as well as the captured standard + output and standard error streams must be passed in.a + + """ + stream.write('\n' % \ + { + "n": self._test_name, + "t": self.testsRun, + "time": time_taken, + }) + for info in self._tests: + info.print_report(stream) + stream.write(' \n' % out) + stream.write(' \n' % err) + stream.write('\n') + + +class XMLTestRunner(object): + + """A test runner that stores results in XML format compatible with JUnit. + + XMLTestRunner(stream=None) -> XML test runner + + The XML file is written to the supplied stream. If stream is None, the + results are stored in a file called TEST-..xml in the + current working directory (if not overridden with the path property), + where and are the module and class name of the test class. + + """ + + def __init__(self, stream=None): + self._stream = stream + self._path = "." + + def run(self, test): + """Run the given test case or test suite.""" + class_ = test.__class__ + classname = class_.__module__ + "." + class_.__name__ + if self._stream == None: + filename = "TEST-%s.xml" % classname + stream = file(os.path.join(self._path, filename), "w") + stream.write('\n') + else: + stream = self._stream + + result = _XMLTestResult(classname) + start_time = time.time() + + # TODO: Python 2.5: Use the with statement + old_stdout = sys.stdout + old_stderr = sys.stderr + sys.stdout = StringIO() + sys.stderr = StringIO() + + try: + test(result) + try: + out_s = sys.stdout.getvalue() + except AttributeError: + out_s = "" + try: + err_s = sys.stderr.getvalue() + except AttributeError: + err_s = "" + finally: + sys.stdout = old_stdout + sys.stderr = old_stderr + + time_taken = time.time() - start_time + result.print_report(stream, time_taken, out_s, err_s) + if self._stream == None: + stream.close() + + return result + + def _set_path(self, path): + self._path = path + + path = property(lambda self: self._path, _set_path, None, + """The path where the XML files are stored. + + This property is ignored when the XML file is written to a file + stream.""") + + +class XMLTestRunnerTest(unittest.TestCase): + def setUp(self): + self._stream = StringIO() + + def _try_test_run(self, test_class, expected): + + """Run the test suite against the supplied test class and compare the + XML result against the expected XML string. Fail if the expected + string doesn't match the actual string. All time attribute in the + expected string should have the value "0.000". All error and failure + messages are reduced to "Foobar". + + """ + + runner = XMLTestRunner(self._stream) + runner.run(unittest.makeSuite(test_class)) + + got = self._stream.getvalue() + # Replace all time="X.YYY" attributes by time="0.000" to enable a + # simple string comparison. + got = re.sub(r'time="\d+\.\d+"', 'time="0.000"', got) + # Likewise, replace all failure and error messages by a simple "Foobar" + # string. + got = re.sub(r'(?s).*?', r'Foobar', got) + got = re.sub(r'(?s).*?', r'Foobar', got) + + self.assertEqual(expected, got) + + def test_no_tests(self): + """Regression test: Check whether a test run without any tests + matches a previous run. + + """ + class TestTest(unittest.TestCase): + pass + self._try_test_run(TestTest, """ + + + +""") + + def test_success(self): + """Regression test: Check whether a test run with a successful test + matches a previous run. + + """ + class TestTest(unittest.TestCase): + def test_foo(self): + pass + self._try_test_run(TestTest, """ + + + + +""") + + def test_failure(self): + """Regression test: Check whether a test run with a failing test + matches a previous run. + + """ + class TestTest(unittest.TestCase): + def test_foo(self): + self.assert_(False) + self._try_test_run(TestTest, """ + + Foobar + + + + +""") + + def test_error(self): + """Regression test: Check whether a test run with a erroneous test + matches a previous run. + + """ + class TestTest(unittest.TestCase): + def test_foo(self): + raise IndexError() + self._try_test_run(TestTest, """ + + Foobar + + + + +""") + + def test_stdout_capture(self): + """Regression test: Check whether a test run with output to stdout + matches a previous run. + + """ + class TestTest(unittest.TestCase): + def test_foo(self): + print "Test" + self._try_test_run(TestTest, """ + + + + +""") + + def test_stderr_capture(self): + """Regression test: Check whether a test run with output to stderr + matches a previous run. + + """ + class TestTest(unittest.TestCase): + def test_foo(self): + print >>sys.stderr, "Test" + self._try_test_run(TestTest, """ + + + + +""") + + class NullStream(object): + """A file-like object that discards everything written to it.""" + def write(self, buffer): + pass + + def test_unittests_changing_stdout(self): + """Check whether the XMLTestRunner recovers gracefully from unit tests + that change stdout, but don't change it back properly. + + """ + class TestTest(unittest.TestCase): + def test_foo(self): + sys.stdout = XMLTestRunnerTest.NullStream() + + runner = XMLTestRunner(self._stream) + runner.run(unittest.makeSuite(TestTest)) + + def test_unittests_changing_stderr(self): + """Check whether the XMLTestRunner recovers gracefully from unit tests + that change stderr, but don't change it back properly. + + """ + class TestTest(unittest.TestCase): + def test_foo(self): + sys.stderr = XMLTestRunnerTest.NullStream() + + runner = XMLTestRunner(self._stream) + runner.run(unittest.makeSuite(TestTest)) + + +class XMLTestProgram(unittest.TestProgram): + def runTests(self): + if self.testRunner is None: + self.testRunner = XMLTestRunner() + unittest.TestProgram.runTests(self) + +main = XMLTestProgram + + +if __name__ == "__main__": + main(module=None) diff --git a/antlr-3.1.3/tool/CHANGES.txt b/antlr-3.1.3/tool/CHANGES.txt new file mode 100644 index 0000000..afaa13b --- /dev/null +++ b/antlr-3.1.3/tool/CHANGES.txt @@ -0,0 +1,3169 @@ +ANTLR 3.1.3 Release +March 17, 2009 + +Terence Parr, parrt at cs usfca edu +ANTLR project lead and supreme dictator for life +University of San Francisco + +CHANGES + +March 17, 2009 + +* improved ANTLRv3.g to handle <...> element options + +March 15, 2009 + +* Fixed ANTLR-389. Strip didn't ignore options in subrules; also seemed + to demand stdin. + +March 15, 2009 + +* ANTLR always sorts incoming grammar list by dependency. For example, + If W.g depends on tokens from P.g then P.g is done first even if + W.g mentioned first on command line. It does not ignore any files you + specify the commandline. If you do *.g and that includes some + imported grammars, it will run antlr on them. + +* -make option prevents ANTLR from running on P.g if P older than + generated files. + +* Added org.antlr.tool.GrammarSpelunker to build a faster dependency + checker (what grammars depend on etc...). Totally independent of any + ANTLR code; easy to pull into other tools. + +* Added org.antlr.misc.Graph, a general graph with nodes + containing an Object payload. It knows how to do a topological sort + on the nodes. + +March 10, 2009 + +* Added associativity token option to support upcoming special expression + parsing. Added rule option strategy=precedence also + +March 1, 2009 + +* Changed ANTLRWorks debug port from 49153 to 49100. Apparently we change the port in + ANTLRWorks to 49100 in 1.2 but forgot to do so in the ANTLR targets. + +START CHANGES FOR TREE FILTER MODE (pulled from dev branch) + +This feature will be announced in 3.2, but I am integrating from my development branch now into the mainline so target developers have a chance to implement. We might release 3.1.3 bug fix release before 3.2. + +* CommonTreeNodeStream -> BufferedTreeNodeStream. Now, + CommonTreeNodeStream is completely unbuffered unless you are + backtracking. No longer making a list of all nodes before tree parsing. + +* Added tree grammar filter=true mode. + + Altered templates: + Java.stg: added filterMode to genericParser and treeParser. + This required a change to ANTLRCore.sti + Defined a default parameter in treeParser to set the superclass + to TreeFilter for tree grammar with filter=true. It sets + superclass to TreeRewriter if filter=true and output=AST. + Other them that, I only had to change ANTLR itself a little bit. + Made filter mode valid for tree grammars and have it automatically set + the necessary elements: @synpredgate, backtrack=true, rewrite=true + (if output=AST). Added error message for detecting conflicting + options. + +* Added misc.FastQueue and TestFastQueue: + A queue that can dequeue and get(i) in O(1) and grow arbitrarily large. + A linked list is fast at dequeue but slow at get(i). An array is + the reverse. This is O(1) for both operations. + +* Added tree.TreeIterator, a generator that walks a doubly linked tree. + The nodes must know what index they are. It's an Iterator but + remove() is not supported. Returns navigation nodes always: + UP, DOWN, EOF. + +* Added misc.LookaheadStream: A lookahead queue that knows how + to mark/release locations in the buffer for backtracking purposes. + I hope to use for both tree nodes and tokens. Just implement + nextElement() to say how to get next node or token. + +END CHANGES FOR TREE FILTER MODE + +February 18, 2009 + +* Added org.antlr.tool.Strip (reads from file arg or stdin, emits to stdout) + to strip actions from a grammar. + +February 4, 2009 + +* Added CommonTree.setUnknownTokenBoundaries(). Sometimes we build trees + in a grammar and some of the token boundaries are not set properly. + This only matters if you want to print out the original text associated + with a subtree. Check this out rule: + + postfixExpression + : primary ('.'^ ID)* + ; + + For a.b.c, we get a '.' that does not have the token boundaries set. + ANTLR only sets token boundaries for subtrees returned from a rule. + SO, the overall '.' operator has the token boundaries set from 'a' + to 'c' tokens, but the lower '.' subtree does not get the boundaries + set (they are -1,-1). Calling setUnknownTokenBoundaries() on + the returned tree sets the boundaries appropriately according to the + children's token boundaries. + +January 22, 2009 + +* fixed to be listeners.add(listener); in addListener() of DebugEventHub.java + +January 20, 2009 + +* Removed runtime method: mismatch in BaseRecognizer and TreeParser. Seems + to be unused. Had to override method recoverFromMismatchedToken() in + TreeParser to get rid of single token insertion and deletion for + tree parsing because it makes no sense with all of the up-and-down nodes. + +* Changed JIRA port number from 8888 to no port spec (aka port 80) and all + refs to it in this file. + +* Changed BaseTree to Tree typecase in getChild and toStringTree() and + deleteChild() to make more generic. + +December 16, 2008 + +* Added -verbose cmd-line option and turned off standard header + and list of read files. Silent now without -verbose. + +November 24, 2008 + +* null-ptr protected getParent and a few others. + +* Added new ctor to CommonTreeNodeStream for walking subtrees. Avoids + having to make new serialized stream as it can reuse overall node stream + buffer. + +November 20, 2008 + +* Updated BaseTest to isolate tests better. + +November 17, 2008 + +* BaseTreeAdaptor.getType() was hosed; always gave 0. Thanks to Sam Harwell. + +November 8, 2008 + +* Added methods to BaseRecognizer: + public void setBacktrackingLevel(int n) { state.backtracking = n; } + /** Return whether or not a backtracking attempt failed. */ + public boolean failed() { return state.failed; } + +November 5, 2008 + +* Tweaked traceIn/Out to say "fail/succeeded" + +* Bug in code gen for tree grammar wildcard list label x+=. + +* Use of backtrack=true anywhere in grammar causes backtracking sensitive + code to be generated. Actions are gated etc... Previously, that only + happened when a syntactic predicate appeared in a DFA. But, we need + to gate actions when backtracking option is set even if no decision + is generated to support filtering of trees. + +October 25, 2008 + +* Fixed debug event socket protocol to allow spaces in filenames. + +* Added TreeVisitor and TreeVisitorAction to org.antlr.runtime.tree. + +October 22, 2008 + +* Added inContext() to TreeParser. Very useful for predicating + tree grammar productions according to context (their parent list). + Added new TestTreeContext unit tests (15). + + /** Check if current node in input has a context. Context means sequence + * of nodes towards root of tree. For example, you might say context + * is "MULT" which means my parent must be MULT. "CLASS VARDEF" says + * current node must be child of a VARDEF and whose parent is a CLASS node. + * You can use "..." to mean zero-or-more nodes. "METHOD ... VARDEF" + * means my parent is VARDEF and somewhere above that is a METHOD node. + * The first node in the context is not necessarily the root. The context + * matcher stops matching and returns true when it runs out of context. + * There is no way to force the first node to be the root. + */ + public boolean inContext(String context) {...} + +* Added 3 methods to Tree interface [BREAKS BACKWARD COMPATIBILITY] + + /** Is there is a node above with token type ttype? */ + public boolean hasAncestor(int ttype); + + /** Walk upwards and get first ancestor with this token type. */ + public Tree getAncestor(int ttype); + + /** Return a list of all ancestors of this node. The first node of + * list is the root and the last is the parent of this node. + */ + public List getAncestors(); + +October 21, 2008 + +* Updated unit tests to be correct for \uFFFE->\uFFFF change + +* Made . in tree grammar look like ^(. .*) to analysis, though ^(. foo) + is illegal (can't have . at root). Wildcard is subtree or node. + Fixed bugs: + http://www.antlr.org/browse/ANTLR-248 + http://www.antlr.org/browse/ANTLR-344 + +October 1, 2008 -- ANTLR v3.1.1 + +September 8, 2008 + +* Labels on tokens, rules carry into synpreds now so semantic predicates work. + This didn't work since labels were stripped in the synpred and they weren't + defined in the generated method. + + a : x=A z=a {$x.text.equals($z.text)}? A + | y=A a A A + ; + +September 3, 2008 + +* Made a REV static variable in Tool so that we can change the rev for + daily builds. + +* Made \uFFFF a valid character. Token types are 32-bit clean using -1 + not 0x0000FFFF as -1 so it should be okay. Label.java: + public static final int MIN_CHAR_VALUE = '\u0000'; + public static final int MAX_CHAR_VALUE = '\uFFFF'; + +August 30, 2008 + +* Changed messages in en.stg so that TOKEN_NONDETERMINISM correctly + indicates when actions hid semantic predicates. + +August 15, 2008 + +* Tweaked build properties and build.xml + +August 13, 2008 + +* Fixed ANTLR-314; 3.1 introduced a problem with list labels += + +August 12, 2008 -- ANTLR v3.1 + +* Added JavaScript target + +August 7, 2008 + +* an NFA target of EOF predicate transition in DFA cause an exception in + getPredicatesPerNonDeterministicAlt(). + +* Kay Roepke found a nasty bug when debugging AST-constructing + composite recognizers. If the input state was null to the constructor, + super class constructor created a new parser state object. + Later, though we passed the argument state not this.state + to the delegate constructors, forcing them to share a different + state objects! Changed state to this.state in Dbg.stg constructors. + +* Ack. messed up debug/AST. Have to set proxy's tree adaptor; it's + a circular ref. Just an ASTDbg.stg change. + +August 4, 2008 + +* superClass works now for lexers + +* Made Grammar.defineNamedAction propogate header actions down to all + delegates if root grammar; regardless of lexer/parser scope. + +* Rejiggered AST templates to propogate changes to tree adaptor + for delegate grammars. Fixes ANTLR-302 + +August 4, 2008 + +* FOLLOW set computations altered constant FOLLOW bit sets. + +* Added (...) are all predicate evaluations. + +* Extra init code for tree parser nonrewrite mode removed. + +* Added empty child list check in becomeRoot + +August 3, 2008 + +* Was using RuleReturnScope not Rulename_return for list labels in tree + parser. + +* Didn't set _last in tree parser for rule ref track stuff (rewrite=true) + +August 2, 2008 + +* Benjamin found another rewrite engine bug. + +July 30, 2008 + +* CommonTreeNodeStream / CommonTokenStream did not reset properly. + +July 29, 2008 + +* Fixed another bug in TokenRewriteStream; didn't like inserts after end. + +July 28, 2008 + +* Fixed bug in TokenRewriteStream.toString(start,stop); it ignored + parameters. ;) + +July 17, 2008 + +* allow qualified type names in hetero <...> options like T + +July 5, 2008 + +* treeLevel not set for setBlock alts; added unit test + +July 3, 2008 + +* Fixed ANTLR-267. parse tree added nodes during backtracking and + cyclic DFAs. tracks hidden tokens too now. Added toInputString() to + get text back including hidden tokens. Shows for rules + that match nothing. + +June 26, 2008 + +* Added gParent ptr that points to immediate parent grammar. E.g., + // delegators + public MParser gM; + public M_S gS; + public M_S gParent = gS; // NEW + +* Grammar imports didn't set all the delegate pointers...lots of imported + grammars would cause a null ptr exception. Fixes ANTLR-292. + +June 25, 2008 + +* List labels in tree construction didn't always track the tree; sometimes + had a rule result structure. + +June 4, 2008 + +* Improved unit testing so that each test suite executes and builds grammars + in a separate temporary directory. This means they can execute concurrently. + Also seem to be a problem with my class path during execution. Moved + tmpdir for ahead of standard CLASSPATH. + +* By virtue of an improvement to StringTemplate, output newlines + in generated files should be normalized to whatever your host uses. + +June 3, 2008 + +* Restrict legality of grammar options; for example you cannot use output option + in lexer anymore. + +June 2, 2008 + +* Throw illegal arg exception upon invalid TokenRewriteStream ops. Rewrote + core of engine. Slightly different operation. Added many more unit tests. + +3.1b1 - May 20, 2008 + +May 11, 2008 + +* rewrite=true, output=AST for tree grammar was not working. Altered trees were not + propagated back up the rule reference chain. Required a number of mods to + ASTTreeParser.stg. Added unit tests. + +May 10, 2008 + +* [BACKWARD INCOMPATIBLE if you override match()] + I had turned off single token insertion and deletion because I could not figure + out how to work with trees and actions. Figure that out and so I turned it back on. + match() returns Object matched now (parser, tree parser) so we can set labels + on token refs properly after single token ins/del error recovery. Allows actions + and tree construction to proceed normally even though we recover in the middle of + an alternative. Added methods for conjuring up missing symbols: getMissingSymbol(). + +* refactored BaseRecognizer error handling routines + +* Single token error recovery was not properly taking into consideration EOF. + +* ANTLR no longer tries to recover in tree parsers inline using single node deletion or insertion; throw exception. Trees should be well formed as they are not created by users. + +* Added empty constructors to the exception classes that did not have them so that ANTLRWorks can create the exceptions. + +* Made debug tree adaptor deal with tokens conjured up during error recovery. + +* Removed extra location() debug element that was emitted. + +May 8, 2008 + +* ANTLR didn't update line/col to DFA map for AW. + +May 6-7, 2008 + +* Insufficiently covered (with semantic predicates) alt warnings are now emitted before + nondeterminisms so it's clear the nondeterminism is a result of insufficient preds. + +* Improved insufficiently covered alt warnings from: + warning(203): T.g:2:3: The following alternatives are insufficiently covered with predicates: 1 + to: + warning(203): T.g:2:3: Input B is insufficiently covered with predicates at loca +tions: alt 1: line 3:15, alt 2: line 2:9 + +* Improved nondeterminism warning to have: + Semantic predicates were present but were hidden by actions. +parser grammar U; +a : (A B)? ; +b : X a {p1}? A B | Y a {a1} {p2}? A B | Z a ; + +To create the prediction DFA for the optional sub rule in 'a', ANTLR must find all references to 'a' to determine what can follow. A B can follow 'a' in the first two alts rule 'b'. To resolve the conflict between matching A B immediately in the sub rule and exiting rule 'a' to match it in 'b', ANTLR looks for predicates. In this case, there are two predicates that indicate the semantic context in which the surrounding alternatives are valid. The problem is that one of the predicates is hidden by an action. It took me 1.5 days, but I've finally have gotten ANTLR to properly track the insufficiently covered alternatives. Further, I have gotten it to tell you precisely where the uncovered predicates are even if they are simply hidden by actions. I have also updated all of the nondeterminism warnings so that it tells you if there was a predicate but one hidden by an action (this could be a separate condition from insufficiently covered predicates). here are your messages from ANTLR: + +ANTLR Parser Generator Version 3.1b1 (??) 1989-2007 +warning(203): U.g:2:5: Input such as "A B" is insufficiently covered with predicates at locations: alt 2: line 3:38 at B +Semantic predicates were present but were hidden by actions. +warning(200): U.g:2:5: Decision can match input such as "A B" using multiple alternatives: 1, 2 +As a result, alternative(s) 2 were disabled for that input +Semantic predicates were present but were hidden by actions. + +* Fixed issue where +r41 + : (INT -> INT) ( ('+' i=INT) -> ^($i $r41) )* ';' + ; +still warned about $r41 being ambig. + +* actions are now added to the NFA. + +* Fixed ANTLR-222. ANTLR now ignores preds after actions. + +May 5, 2008 + +* Fixed ANTLR-235 by backing out a change from 12-31-07. + +* Fixed ANTLR-249; I include semantic context again in closure busy signal. + +May 3, 2008 + +* Fixed ANTLR-208. Looks in library or in -o output path. antlr -o foo T.g U.g where U needs T.tokens won't work unless we look in foo too. fixed. + +* Refactored assign.types.g to move methods to a class called AssignTokenTypesBehavior. + +* Fixed ANTLR-207. Lexers importing vocabs didn't see ';'=4 type aliases in .tokens. + +* Fixed ANTLR-228. Couldn't use wildcard in alts with AST rewrites. + +May 2, 2008 + +* Fixed ANTLR-230; can use \' now in action. + +* Scope attributes no longer have a stack depth check on front. If you ref $r::a when r has not invoked you, then you get an exception not a default value. Back to the way 3.0.1 worked. + +* $channel was a global variable in 3.0.1 unlike $type which did not affect an invoking lexer rule. Now it's local too. Only $type and $channel are ever set with regularity. Setting those should not affect an invoking lexer rule as in the following should work: + + X : ID WS? '=' ID ; // result is X on normal channel + WS : ' '+ {$channel = HIDDEN; } ; + + STRING : '"' (ESC|.)* '"' ; // result is STRING not ESC + + FLOAT : INT '.' INT? ; // should be FLOAT + INT : Digit+ ; + fragment + Digit : '0'..'9' ; + +* Fixed bug in interpreter regarding (...)* loops + +May 1, 2008 + +* Fixed ANTLR-202. These now give warnings about ambig ref to $a. + a : ID a -> $a | INT ; + and + a : A a {$a.text} | B ; + +April 30, 2008 + +* Fixed ANTLR-237. updated -depend to know about imported grammars. +$ java org.antlr.Tool -depend -lib foo T.g + ANTLR Parser Generator Version 3.1b1 (??) 1989-2007 + T.g: foo/Java.g + TParser.java : T.g + T.tokens : T.g + TLexer.java : T.g + T_Java : T.g + +April 29, 2008 + +* Fixed ANTLR-217; scope A,B,C; didn't work + +* Fixed ANTLR-224; ! or ^ on item in alt with rewrite gave exception + +* Added token options to terminals: ID etc... + node is default so you can do ID for hetero tree types. most common. + +April 17, 2008 + +* Use default msg if unknown recog type in getErrorMessage(): + String msg = e.getMessage(); + +April 14, 2008 + +* %x.y = foo; was not working in @members section + +March 29, 2008 + +* Import couldn't handle A imports B imports C. + +March 27, 2008 + +* Added get/setInputStream to Token interface and affected classes. + +February 26, 2008 + +* made fillBuffer public in CommonTreeNodeStream so we can add trees + to stream for interactive interpreters. + +February 14, 2008 + +* Fixed a bug in the code generation where tree level 0 was used + no matter what to rewrite trees in tree grammars. added unit test + +* Fixed ANTLR-221. exceptions were generated when using + AST construction operators and no output=AST option. + +February 13, 2008 + +* Improved error msgs for unreachable alts and tokens. + +February 11-12, 2008 + +* Fixed ANTLR-219. + It looks like the AST construction code for sets was totally messed up. + This was for not only the new tree parser AST construction, but also + the regular tree construction for parsers. I had to introduce templates + in the ASTTreeParser.stg file to deal with this. added unit tests: + TestTreeGrammarRewriteAST.testSetMatchNoRewrite(), + testSetMatchNoRewriteLevel2(), testSetMatchNoRewriteLevel2Root(). + Had to add template matchRuleBlockSet() + to differentiate between a regular set in one that is an entire rule. + If it is an entire rule, it has to set the return value, retval.tree. + +* Fixed ANTLR-220. + Made TreeAdaptor dupNode and dupTree events emit debugging events + so AW could see tree node duplications. + +February 4, 2008 + +* BACKWARD INCOMPATIBILITY + Added getSourceName to IntStream and TokenSource interfaces and also the + BaseRecognizer. Have to know where char come from for error messages. + Widespread change, but a trivial one. + +January 17, 2008 + +* Interpreter throws FailedPredicateException now when it sees a predicate; + before it was silently failing. I'll make it work one of these days. ;) + +January 12, 2008 + +* Copy ctor not copying start and stop for common token. Fixes ANTLR-212 + +* Removed single token insertion and deletion for tokens, sets. + Required a change to the code generation for matchSet() template + and a tweak inside the BaseRecognizer. To engage this again is easy, + just override mismatch() to call mismatchRecover(). I changed it to simply + throw an exception. + +* Added syntaxError recognizer state var so you can easily tell if + a recognizer failed. Added getNumberOfSyntaxErrors() to recognizers. + +* Added doc for the error node stuff: + http://www.antlr.org/wiki/display/ANTLR3/Tree+construction + +* Fixed ANTLR-193 + +* Added recognizer methods to answer questions about current mismatched + token error. Useful now since i don't automatically recover inline + to such errors (I throw exception): + mismatchIsUnwantedToken(IntStream input, int ttype) + mismatchIsMissingToken(IntStream input, BitSet follow) + +* Added UnwantedTokenException and MissingTokenException to make + match() problems more precise in case you want to catch differently. + Updated getErrorMessage() to be more precise. Says: + + line 2:9 missing EQ at '0' + + now instead of + + line 2:9 mismatched input '0' expecting EQ + + Input "x=9 9;" gives + + line 3:8 extraneous input '9' expecting ';' + + When very confused, "x=9 for;", you still get old mismatched message: + + line 3:8 extraneous input 'for' expecting ';' + line 3:11 mismatched input ';' expecting '(' + +* Added unit tests to TestAutoAST and copied to TestRewriteAST with + suitable rewrites to ensure basic error node insertion works. + +January 11, 2008 + +* Adding errorNode to TreeAdaptor and various debug + events/listeners. Had to add new class runtime.tree.CommonErrorNode + to hold all the goodies: input stream, start/stop objects. + +* Tweaked CommonTree.getType() to return INVALID_TOKEN_TYPE + instead of literal 0 (same thing at moment though). + +* Updated ANTLRWorks to show error nodes in tree as much as I could; Jean + will get to rest of it. + +January 9-10, 2008 + +* Continued work on debugging/profiling composite grammars. + +* Updated debug protocol for debugging composite grammars. enter/exit + rule needs grammar to know when to flip display in AW. + +* Fixed ANTLR-209. ANTLR consumed 2 not 1 char to recover in lexer. + +* Added two faqs instead of making changes to antlr runtime about + lexer error handling: + http://www.antlr.org/wiki/pages/viewpage.action?pageId=5341230 + http://www.antlr.org/wiki/pages/viewpage.action?pageId=5341217 + +January 1-8, 2008 + +* Making debugging/profiling work with composite grammars. + +* Updated ANTLRWorks so it works still for noncomposite grammars. + +* two new examples: import and composite-java (the java example grammar + broken up into multiple pieces using import). + +* Worked on composite grammars. Had to refactor a lot of code to make + ANTLR deal with one meta grammar made up of multiple grammars. I + thought I had it sort of working back in August. Yes, but barely. Lots + of work to do it seemed. Lots of clean up work. Many new unit tests + in TestCompositeGrammars. Had to add new error messages warning about + conflicting tokens inherited from multiple grammars etc... + + TOKEN_ALIAS_CONFLICT(arg,arg2) ::= + "cannot alias ; string already assigned to " + TOKEN_ALIAS_REASSIGNMENT(arg,arg2) ::= + "cannot alias ; token name already assigned to " + TOKEN_VOCAB_IN_DELEGATE(arg,arg2) ::= + "tokenVocab option ignored in imported grammar " + INVALID_IMPORT(arg,arg2) ::= + " grammar cannot import grammar " + IMPORTED_TOKENS_RULE_EMPTY(arg,arg2) ::= + "no lexer rules contributed to from imported grammar " + IMPORT_NAME_CLASH(arg,arg2) ::= + "combined grammar and imported grammar both generate ; import ignored" + + This stuff got really really complicated. Syntactic predicate names even + had to be scoped per grammar so they don't conflict. + +* When using subrules like (atom->atom) to set result tree, it was not + properly setting result (early enough). Future code got null for + $rule.tree. + +December 31, 2007 + +* Added the start of a semantic predicate computation for LL(1) to + solve a problem with slow grammar analysis even with k=1 due to + predicates. Then I realized the problem with that grammar was + elsewhere. Semantic context really shouldn't be used when + preventing closure recomputation (May 2008 I discovered I was + wrong--you do need it). The predicates became huge even though the + reduced value would be no different. The analyzer seems faster now + that I am not testing predicate values all the time. Further it may + terminate sooner just due to reduced closure recursion. + +* Moved FIRST/FOLLOW computations to a separate class LL1Analyzer to + tidy up. + +* ANTLR lexer allowed octal escapes, but they didn't work. ;) Rather than + fix, I'm removing. Use '\uxxxx' to get even 8 bit char values: \u00xx. + +December 29, 2007 + +* Fixed ANTLR-206. I wasn't avoiding analyzing decisions in + left-recursive rules. + +* Had to add hetero arg to all tokenRef*() templates. Added _last + local var to track last child so we can do replaceChildren() during + AST rewrite mode for tree grammars. Should be useful later for .text + property. Ack, hetero arg is on lots of templates. :( Moved + ruleCleanUp() template into ASTTreeParser and ASTParser groups. + +* added noRewrite() template (to Java.stg) so we can insert code during + rewrite mode to return original tree if no rewrite. Might be useful + for token rewrites later. For templates too? + +* Had to add if !rewriteMode around tree construction in tree parser + templates. + +* Harald Muller pointed out that we need to use + in our tests for null token/rule property references. For int types + we need 0 not null. (p!=null?p.line:0). Changed scopeAttributeRef, + ruleLabelRef. Also changed the known typed attributes like + lexerRuleLabelPropertyRef_line to yield 0 upon null rule ref to + be consistent with case when we don't know the type. Fixes ANTLR-195. + Added testTypeOfGuardedAttributeRefIsCorrect test and reset expected + output for 13 tests that now "fail". + +December 28, 2007 + +* added polydiff example (Java target) + +* added "int" property for token and lexer rule refs. super convenient. E.g., + a : b=INT {int x = $b.int;} ; + +December 27, 2007 + +* Changed -Xnoinlinedfa to -Xmaxinlinedfastates m where m is + maximum number of states a DFA can have before ANTLR avoids + inlining it. Instead, you get a table-based DFA. This + affectively avoids some acyclic DFA that still have many states + with multiple incident edges. The combinatorial explosion smacks + of infinite loop. Fixes ANTLR-130. + +* [...] are allowed in args now but ] must be escaped as \]. E.g., + a[String[\] ick, int i] : ... ; + And calling a rule: foo[x[i\], 34] + Fixes ANTLR-140. + +* Fixed ANTLR-105. Target.getTargetStringLiteralFromANTLRStringLiteral() + escaped " that were already escaped. + +* target's can now specify how to encode int as char escape. Moved + DFA.encodeIntAsCharEscape to Target. + +* Bug in runtime.DFA. If a special state (one with predicate) failed, it + tried to continue (causing out of range exception due to state = -1) + instead of reporting error. + +* If -dfa with combined grammar T.g, builds T.dec-*.dot and TLexer.dec-*.dot + +* Fix ANTLR-165. + Generate TParser.java and TLexer.java from T.g if combined, else + use T.java as output regardless of type. + BACKWARD INCOMPATIBILITY since file names change. + I changed the examples-v3/java to be consistent. Required XML.g -> + XMLLexer.java and fuzzy/Main.java change. + +* Fix ANTLR-169. Deletes tmp lexer grammar file. + +December 25, 2007 + +* Fixed ANTLR-111. More unit tests in TestAttributes. + +December 25, 2007 + +* Dangling states ("decision cannot distinguish between alternatives + for at least one input sequence") is now an error not a warning. + +* Added sample input sequence that leads to dangling DFA state, one + that cannot reach an accept state. ANTLR ran into a case where + the same input sequence reaches multiple locations in the NFA + (and so not nondeterministic), but analysis ran out of further + NFA states to look for more input. Commonly at EOF target states. + Now says: + + error(202): CS.g:248:95: the decision cannot distinguish between alternative(s) 1,2 for input such as "DOT IDENTIFIER EOF" + + Also fixed bug where dangling states did not resolve to stop states. + +* Fixed ANTLR-123 + +December 17-21, 2007 + +* k=1 doesn't prevent backtracking anymore as in + (options {k=1;}:'else' statement)? + if backtrack=true for overall grammar. Set to false in subrule. + +* Optimized the analysis engine for LL(1). Doesn't attempt LL(*) unless + LL(1) fails. If not LL(1) but autobacktracking but no other kind of + predicate, it also avoids LL(*). This is only important for really + big 4000 line grammars etc... + +* Lots of code clean up + +December 16, 2007 + +* Yet more Kay pair programming. Saved yet more RAM; 15% by + wacking NFA configurations etc in each DFA state after DFA construction. + +* Overall we drop from 2m49s to 1m11s for a huge 4000 line TSQL grammar + with k=*. Only needs -Xconversiontimeout 2000 now not + -Xconversiontimeout 5000 too. With k=1, it's 1m30s down to 40s. + +December 15, 2007 + +* Working with Kay Roepke, we got about 15% speed improvement in + overall ANTLR exec time. Memory footprint seems to be about 50% + smaller. + +December 13-14, 2007 + +* I abort entire DFA construction now when I see recursion in > 1 alt. + Decision is non-LL(*) even if some pieces are LL(*). Safer to bail + out and try with fixed k. If user set fixed k then it continues because + analysis will eventually terminate for sure. If a pred is encountered + and k=* and it's non-LL(*), it aborts and retries at k=1 but does NOT + emit an error. + +* Decided that recursion overflow while computing a lookahead DFA is + serious enough that I should bail out of entire DFA computation. + Previously analysis tried to keep going and made the rules about + how analysis worked more complicated. Better to simply abort when + decision can't be computed with current max stack (-Xm option). + User can adjust or add predicate etc... This is now an error + not a warning. + +* Recursion overflow and unreachable alt is now a fatal error; no code gen. + The decision will literally not work. + +* Cleaned up how DFA construction/analysis aborts due to non-LL(*) and + overflow etc... Throws exceptions now, which cleans up a bunch of IF + checks etc... Very nice now. Exceptions: + analysis/AnalysisRecursionOverflowException.java + analysis/AnalysisTimeoutException.java + analysis/NonLLStarDecisionException.java + +* ErrorManager.grammarWarning() counted them as errors not warnings. + +* Unreachable alt warnings are now errors. + +* The upshot of these changes is that I fixed ANTLR-178 and did + lots of refactoring of code handling analysis failure. + +December 11, 2007 + +* Could not deal with spaces, oddly enough in arg lists: + grammar Bad; + a : A b["foo", $A.text] ; + b[String x, String y] : C ; + +October 28, 2007 + +* Made ANTLR emit a better error message when it cannot write the + implicit lexer file from a combined grammar. Used to say "cannot open + file", now says "cannot write file" and gives backtrace. + +September 15, 2007 + +add getCharStream to Lexer. + +September 10, 2007 + +* Added {{...}} forced action executed even during backtracking. + +September 9, 2007 + +* r='string' in lexer got a duplicate label definition. + +August 21, 2007 + +* $scope::variable refs now check for empty stack so that expr == null if + $scope has an empty stack. Works for $scope[...]::variable too. Nice! + +August 20, 2007 + +* Added reset() to CommonTreeNodeStream, token stream too + +* Made refs to rule/token properties use ?: to avoid null ptr exception. + $label.st now is label!=null?label.st:null. Updated TestAttributes. + This is useful not only for optional rule/token refs, but also during + error recovery. If ID is not matched, $ID.text won't cause a null ptr. + +August 20, 2007 +* Fixed ANTLR-177: hashCode/equals not consistent for label + Fixed bug where Rule was compared to string; introduced from dev branch + +August 15, 2007 -- Got rough draft of the grammar import working. + Submit to dev and then integrate into mainline. + + All file changes/additions: + + README.txt # edit + CHANGES.txt # add + Factored out the changes from the readme. + + runtime/Java/src/org/antlr/runtime/BaseRecognizer.java # edit + runtime/Java/src/org/antlr/runtime/DFA.java # edit + runtime/Java/src/org/antlr/runtime/Lexer.java # edit + runtime/Java/src/org/antlr/runtime/Parser.java # edit + runtime/Java/src/org/antlr/runtime/debug/DebugParser.java # edit + runtime/Java/src/org/antlr/runtime/tree/TreeParser.java # edit + Factored state fields into RecognizerSharedState + object. You will see a lot of things like + state.errorRecovery = false; + runtime/Java/src/org/antlr/runtime/RecognizerSharedState.java # add + Shares all recognizer state variables including lexer even though + these are superfluous to parsers and tree parsers. There + was a casting issue that I could not resolve. + + src/org/antlr/Tool.java # edit + Broke a part Grammar.setGrammarContent() into + parseAndBuildAST() and analyzeGrammar() to make the grammar + import work. I needed to be able to look at the trees for + imported grammars before analyzing them and building DFA. Added + use of the CompositeGrammar object and handling of multiple + delegate grammars. Changed decision DFA DOT file names to + include the grammar name. + + src/org/antlr/analysis/DFA.java # edit + Just tweaked to use generics, updated a comment. + + src/org/antlr/analysis/DecisionProbe.java # edit + Just tweaked to use generics. + + src/org/antlr/analysis/NFA.java # edit + NFA now span multiple grammars and so I moved the NFAs state + tracking to the composite grammar object. + + src/org/antlr/analysis/NFAState.java # edit + Added some null checking and made a field public. + + src/org/antlr/analysis/NFAToDFAConverter.java # edit + Changed a method call to directly access a field. + + src/org/antlr/analysis/RuleClosureTransition.java # edit + Instead of using a rule index, which does not span multiple + grammars, the transition object now attracts a pointer to + the actual Rule definition object. + + src/org/antlr/analysis/SemanticContext.java # edit + Tweaked to use a field instead of a method + + src/org/antlr/codegen/ActionTranslator.g # edit + src/org/antlr/codegen/ActionTranslatorLexer.java # edit + Tweaked to use new runtime and they changed method name. + + src/org/antlr/codegen/CodeGenerator.java # edit + Tweaked comments. + + src/org/antlr/codegen/codegen.g # edit + Added import grammar syntax and altered rule atom to pass a + scope around so that grammar.rule works. Caution this + feature is used internally by ANTLR and is not meant to be + used by users at this point. + + src/org/antlr/codegen/templates/ANTLRCore.sti # edit + Added scope to all ruleref template interfaces. + + src/org/antlr/codegen/templates/Java/Java.stg # edit + Grammars can now import other grammars, which I implemented + using a delegation pointer to the other grammar(s). So if + grammar A imports grammars B and C, then the generated + recognizer for A must have delegation pointers to BParser + and CParser objects. These are now fields: + + // delegates + Lexer ;}; separator="\n"> + + Also, B and C must have back pointers to the delegator so + that they can refer to rules that have been overridden. + This is a mechanism akin to static inheritance: + + // delegators + Lexer ;}; separator="\n"> + + This file also has a lot of changes so that state variables + now are state.backtracking instead of the implied + this.backtracking. + + The file also refers to grammar.delegatedRules attribute + which is the list of Rule objects for which you must + generate manual delegation. This amounts to a stub whereby + rule foo's method foo() simply calls X.foo() if foo is not + defined inside the delegator. + + You will notice that the ruleref templates now take a scope + so that I can have implicit rule Tokens referred to + delegate.Tokens rule in a delegate grammar. This is the way + I do lexer grammar imports. + + I added a template called delegateName which uses the + grammar name to compute a delegate name if the user does not + specify a label in the import statement such as: + + import x=X; + + Oh, note that rule reference templates all receive a Rule + object now instead of the simple rule name as the 'rule' + attribute. You will see me doing instead of + now. + + src/org/antlr/codegen/templates/Java/Dbg.stg # edit + Changes mirroring the constructor and field stuff from + Java.stg. Part of this is a cut and paste because of a bug + in ST. + + src/org/antlr/codegen/templates/Java/AST.stg # edit + src/org/antlr/codegen/templates/Java/ASTParser.stg # edit + src/org/antlr/codegen/templates/Java/ASTTreeParser.stg # edit + Just added the scope attribute. + + src/org/antlr/test/BaseTest.java # edit + Added functionality to support testing composite grammars. + execLexer() + + src/org/antlr/test/TestAttributes.java # edit + Tweak to deal with shared recognizer state. + + src/org/antlr/test/TestCompositeGrammars.java # add + Start of my unit tests. + + src/org/antlr/tool/CompositeGrammar.java # add + src/org/antlr/tool/CompositeGrammarTree.java # add + Tracks main grammar and all delegate grammars. Tracks unique + NFA state numbers and unique token types. This keeps a tree + of grammars computed from the import/delegation chain. When + you want to look up a rule, it starts at the root of the + tree and does a pre-order search to find the rule. + + src/org/antlr/tool/ActionAnalysis.g # edit + src/org/antlr/tool/ActionAnalysisLexer.java # edit + + src/org/antlr/tool/AttributeScope.java # edit + Updated to use generics in one place. + + src/org/antlr/tool/DOTGenerator.java # edit + Updated to indicate when nonlocal rules are referenced. + + src/org/antlr/tool/ErrorManager.java # edit + Added some error messages for import grammars; I need more. + + src/org/antlr/tool/FASerializer.java # edit + Tweaked to use a field not method. + + src/org/antlr/tool/Grammar.java # edit + This is where most of the meat is for the grammar import + stuff as you can imagine. I factored out the token type + tracking into the CompositeGrammar object. I added code to + the addArtificialMatchTokensRule method so that it includes + references to all delegate lexer Tokens rules. Altered the + rule lookup stuff so that it knows about delegate grammars. + + src/org/antlr/tool/GrammarAST.java # edit + src/org/antlr/tool/GrammarAnalysisAbortedMessage.java # edit + src/org/antlr/tool/GrammarReport.java # edit + src/org/antlr/tool/NonRegularDecisionMessage.java # edit + Made enclosing rule visible as field. + + src/org/antlr/tool/GrammarSanity.java # edit + General cleanup and addition of generics. + + src/org/antlr/tool/Interpreter.java # edit + Reference fields instead of methods. + + src/org/antlr/tool/NFAFactory.java # edit + General cleanup and use of Rule object instead of rule + index. + + src/org/antlr/tool/NameSpaceChecker.java # edit + A little bit of cleanup and changes to use either the local + or globally visible rule. Added code to check that scopes + are valid on scoped rule references. again this is an + internal feature, not to be used by users. + + src/org/antlr/tool/RandomPhrase.java # edit + Tweaked. + + src/org/antlr/tool/Rule.java # edit + Added field imported. Removed some unused methods by + commenting them out. Made toString() more expressive. + + src/org/antlr/tool/antlr.g # edit + src/org/antlr/tool/antlr.print.g # edit + src/org/antlr/tool/assign.types.g # edit + src/org/antlr/tool/buildnfa.g # edit + src/org/antlr/tool/define.g # edit + Added syntax for import statement. assign.types.g is the + grammar that invokes Grammar.importGrammar(). + + src/org/antlr/tool/templates/messages/languages/en.stg # edit + Added error messages. + + Added + + CHANGES.txt + runtime/Java/src/org/antlr/runtime/RecognizerSharedState.java + src/org/antlr/test/TestCompositeGrammars.java + src/org/antlr/tool/CompositeGrammar.java + src/org/antlr/tool/CompositeGrammarTree.java + +3.0.1 - August 13, 2007 + +[See target pages on the wiki for more information on the non-Java targets] + +August 7, 2007 + +* added escaping of double quotes in DOTTreeGenerator + +July 22, 2007 + +* fixed dynamic scope implementation in lexers. They were not creating new scope + entries on the stack. Unsupported feature! + +July 30, 2007 + +* float return values were initalized to 0.0 not 0.0f in java. + +July 28, 2007 + +* Sam Ellis points out an init var bug in ANTLRReaderStream. + +July 27, 2007 (done in dev branch) + +* Moved token type index stuff from CommonTreeNodeStream to TreeWizard + +* Added getChildren to BaseTree. + +* Added heterogeneous tree functionality; rewrite for parser/tree parser + and auto AST constr. for parser. + + org/antlr/runtime/tree/RewriteRuleElementStream.java + org/antlr/runtime/tree/RewriteRuleNodeStream.java + org/antlr/runtime/tree/RewriteRuleTokenStream.java + Renamed method next() and re-factor things to have more + specific methods: nextToken, nextNode, nextTree. + + codegen/codegen.g + Updated to include new AST structure for + token references. Pushed hereto attribute into + all tokenRef* templates. + codegen/templates/Java/AST.stg + Factored out a few templates: + createImaginaryNode(tokenType,hetero,args) + createRewriteNodeFromElement(token,hetero,args) + Converted a lot of stream next() calls to more specific + nextToken, nextNode, nextTree per above. + codegen/templates/Java/ASTParser.stg + Added createNodeFromToken template and re-factored creation + sites to use that template. Added hetero attribute. + codegen/templates/Java/ASTTreeParser.stg + Added createRewriteNodeFromElement template and re-factored. + + test/TestHeteroAST.java + New file. Unit tests to test new hetero tree construction. + test/TestRewriteAST.java + Fixed test. Nil single-node trees no longer return nil; + They return null. + + tool/ErrorManager.java + tool/templates/messages/languages/en.stg + Added error message: + HETERO_ILLEGAL_IN_REWRITE_ALT(arg) ::= + "alts with rewrites can't use heterogeneous types left of ->" + + tool/antlr.g + tool/antlr.print.g + tool/assign.types.g + tool/buildnfa.g + tool/define.g + Added syntax for to token references. + Altered AST structure rippled through different phases. + +July 24, 2007 + +* Deleted DoubleLinkTree.java; CommonTree does that now. + +July 23, 2007 + +* template group outputFile; changed rewrite arg to rewriteMode. + +* added rewrite mode for tree parser build AST. + +July 22, 2007 + +* Kay fixed dynamic scope implementation in lexers. They were not + creating new scope entries on the stack. This is an UNSUPPORTED feature. + +* added getParent and getChildIndex to TreeAdaptor. Added + implementation to CommonTree. It's just too useful having those + parent and child indexes available for rewriting etc... I tried 2x + to make an implementation of tree rewriting w/o this and the + constraints just made it too expensive and complicated. Have to + update adaptors to set parent, child index values. Updated Tree + interface and BaseTree also. Should only affect target developers + not users. Well, unless they impl Tree. + +* dupNode (via ctor) of CommonTree didn't copy start/stop token indexes. + +TARGET DEVELOPERS WARNING -- AST.stg split with some functionality + going into ASTParser.stg then I added + ASTTreeParser.stg. CodeGenerator + assumes new subgroups exist. + +July 20, 2007 + +* Added AST construction for tree parsers including -> rewrite rules. + Rewrite mode (rewrite=true) alters the tree in place rather than + constructing a whole new tree. Implementation notes: + + org/antlr/runtime/tree/Tree.java + Add methods for parent and child index functionality. + Also added freshenParentAndChildIndexes() which you can use + to ensure that all double linking is set up right after you + manipulate the tree manually. The setChild preteens etc. do + the proper thing so you shouldn't need this. + Added replaceChildren() to support tree rewrite mode in tree parsers + org/antlr/runtime/tree/BaseTree.java + Updated to set parent and child index stuff. Added replaceChildren + method etc... It still only has a list of children as sole field + but calls methods that subclasses can choose to implement such as + CommonTree. + org/antlr/runtime/tree/CommonTree.java + Added parent and childIndex fields to doubly link. + org/antlr/runtime/tree/TreeAdaptor.java + Added methods for new parent and child index functionality. + Also added method for rewrite mode in tree parsers: + replaceChildren(Object parent, int startChildIndex, + int stopChildIndex, Object t); + Added setChild and deleteChild methods + org/antlr/runtime/tree/BaseTreeAdaptor.java + Moved dupTree here from BaseTree. + Updated rulePostProcessing to deal with parent and child index. + Added setChild and deleteChild implementations + org/antlr/runtime/tree/CommonTreeAdaptor.java + Added methods to deal with the parent and child index for a node. + + org/antlr/runtime/tree/CommonTreeNodeStream.java + Removed token type index and method fillReverseIndex etc... + Probably will move into the tree wizard in the future. + Changed call/seek stack implementation to use IntArray + Added replaceChildren interface. + org/antlr/runtime/tree/TreeNodeStream.java + Added replaceChildren. + org/antlr/runtime/tree/UnBufferedTreeNodeStream.java + Added replaceChildren method but no implementation + + codegen/templates/ANTLRCore.sti + Changed rewrite to a better name: rewriteMode + Added tree level argument to alt, tree so that auto AST + construction can occur while recognizing in tree parsers. + + codegen/templates/Java/AST.stg + Split template group: added two subclasses to handle different + functionality for normal parsing and tree parsing + AST + construction. Tree parsers default behavior is to dup tree + not construct another. Added ASTParser.stg and + ASTTreeParser.stg to handle auto AST construction during + recognition for the two different parser types. I just copied + the token, rule, set, wildcard templates to the subclasses. + The rewrite templates are still in AST.stg. I factored out the + node creation so that the same rewrite templates can be used + for both parsing and tree parsing. + + codegen/templates/Java/ASTParser.stg + The templates needed to build trees with auto construction + during parsing. + codegen/templates/Java/ASTTreeParser.stg + The templates needed to build trees with auto construction + during tree parsing. + codegen/templates/Java/Java.stg + genericParser now has rewriteElementType (Note or Token) so + that the rewrite streams know what kind of elements are inside + during rewrite rule tree construction. + codegen/templates/Java/ST.stg + rewrite attribute name change to rewriteMode + + org/antlr/runtime/debug/DebugTreeAdaptor.java + org/antlr/runtime/debug/DebugTreeNodeStream.java + Updated to handle new interfaces + + test/BaseTest.java + Added test rig update to handle AST construction by tree parsers. + All tree construction runs automatically test sanity of parent + and child indexes. + test/TestTreeGrammarRewriteAST.java + test/TestTreeNodeStream.java + test/TestTrees.java + new file; tests the new parent and child index stuff in trees. + +July 19, 2007 + +* implemented new unique ID; GC was causing non unique hash codes. Debugging + tree grammars was messing up. + +* got tree rewrites working in tree grammars. It builds a completely new + tree from old tree; i.e., you get two trees in memory. W/o a rewrite + rule, the input for that rule is duplicated and returned. -> w/o elements + to the right means don't return anything; i.e., delete. Ooops...way + harder than I thought. Real implementation notes above. + +INCOMPATIBILITY WARNING -- templates have changed; must regen output from + grammars. Runtime libraries have also changed. + Debug event listener interface has changed also. + +July 17, 2007 + +* Added line/charposition to node socket events and event dump so + we have more info during tree parsing. Only works if your + tree adaptor returns a value Token object from getToken(treenode) + with line/col set. Refactored consumeNode/LN to use deserializeNode(). + +* Fixed mismatched tree node exceptions; for imaginary nodes, it said + "missing null". Now prints the token type we found. + +* Cleaned up exception stuff. MismatchedTreeNodeException was setting + line/col, but only RecognitionException should do that. + +* If imaginary token gets a mismatch, there is no line info. Search + backwards in stream if input node stream supports to find last + node with good line/col info. E.g., + +ANTLRv3Tree.g: node from after line 156:72 mismatched tree node: EOA expecting + + which used to be: + +ANTLRv3Tree.g: node from line 0:0 mismatched tree node: null expecting + +* mismatched tree node exceptions were not sent to the debug event stream. + Due to a type being slightly different on recoverFromMismatchedToken() + in DebugTreeParser. Was calling BaseRecognizer version not subclass. + Now we get: + + 9459: Recognition exception MismatchedTreeNodeException(0!=0) + +* List labels were not allowed as root nodes in tree rewrites like + ^($listlabel ...). Had to add a template to AST.stg: + + /** Gen ^($label ...) where label+=... */ + rewriteTokenListLabelRefRoot ::= rewriteTokenLabelRefRoot + + +July 16, 2007 + +* fixed nextNode in RewriteRuleSubtreeStream was dup'ing too much, + screwing up debug event stream. Also there was a bug in how + the rewrite tree stream stuff decided to dup nodes. + +* fixed bug in LT for tree parsing; text was not transmitted properly; + only single words worked. + +* made decision for rule put line/col on colon not first token of first alt. + +* remote ProxyToken now emits token index for easier debugging when looking + at AW's event stream. For example, the @5 here is the token index: + + 31 Consume hidden [ /<64>,channel=99,30:7, @5] + +* same is true for consume nodes now: + + 25586 Consume node [')'/, <44>, 4712040,@1749] 25 + + When debugging tree parsers, it helps to track errors when you know + what corresponding input symbol created this tree node. + +* Changed debug events associated with trees quite a bit. Passes nodes around + now rather than text, type, unique IDs etc... Mostly affects internal stuff. + Target developers will have some work in their runtime to do to match + this change. :( BUT, there is only a slight tweak in the Dbg.stg + and ASTDbg.stg templates. + Interface just didn't make sense as is. If you turn on debugging, and + want to track a node creation, you want the node pointer not its ID, + text, etc... + Added ProxyTree for passing across socket. Has line/charpos and tokenIndex + +July 15, 2007 + +* added null ptr protection in CommonTreeAdaptor. + +July 14, 2007 + +* null child in TreeAdaptor does nothing now. Changed interface and + implementation. Changed DebugTreeAdaptor to not fire events on null add + as well. + +July 12, 2007 + +* added get method for the line/col to DFA map in Grammar.java + +July 7, 2007 + +* fixed wrong order of test for exceptions in Lexer.getErrorMessage() + +June 28, 2007 + +* Added ability to set the port number in the constructor for the debug parser. + +June 5, 2007 + +* Changed (hidden) option -verbose to -Xnfastates; this just prints out the NFA states along each nondeterministic path for nondeterminism warnings. + +May 18, 2007 + +* there were some dependencies with org.antlr.* that I removed from + org.antlr.runtime.* + +3.0 final - May 17, 2007 + +May 14, 2007 + +* Auto backtracking didn't work with ! and ^ suffixes on first element + of an alt. + +* Auto backtracking didn't work with an action as first element. + +May 10, 2007 + +* turn off the warning about no local messages: + no such locale file org/antlr/tool/templates/messages/languages/ru.stg retrying with English locale + +May 5, 2007 + +* moving org.antlr.runtime to runtime/Java/src/org/... Other target + source / libs are under runtime/targetname. + +May 4, 2007 + +* You could not use arguments on a token reference that was a route in a + tree rewrite rule like -> ^(ID[args] ...). + +May 3, 2007 + +* Fixed ANTLR-82. Actions after the root were considered part of + an optional child. They were not always executed. Required a change + to the ANTLRCore.sti interface for tree() template. + +May 2, 2007 + +* Fixed ANTLR-117. Wasn't building decisions properly for subrules in + syntactic predicates. + +April 22, 2007 + +* Made build.xml ref all jars in antlr lib. Thanks to Miguel Ping. + +* Fixed ANTLR-11 + +* Now labels on ranges and such in lexer work properly. + +* ActionAnalysisLexer was in wrong package. + +April 21, 2007 + +* Pushing a huge update that fixes: + http://www.antlr.org/browse/ANTLR-112 + http://www.antlr.org/browse/ANTLR-110 + http://www.antlr.org/browse/ANTLR-109 + http://www.antlr.org/browse/ANTLR-103 + http://www.antlr.org/browse/ANTLR-97 + http://www.antlr.org/browse/ANTLR-113 + http://www.antlr.org/browse/ANTLR-66 + http://www.antlr.org/browse/ANTLR-98 + http://www.antlr.org/browse/ANTLR-24 + http://www.antlr.org/browse/ANTLR-114 + http://www.antlr.org/browse/ANTLR-5 + http://www.antlr.org/browse/ANTLR-6 + + Basically, I gutted the way AST rewrites work. MUCH better. + +* Fixed lots of little label issues in the lexer. Couldn't do x+=ID + in lexer, for example. Fixed ANTLR-114, ANTLR-112 + +* Isolated EOT transition in lexer generated dangling else clause. + Fixed ANTLR-113. + +April 17, 2007 + +* Fixed a major problem with gated semantic predicates. Added more + unit tests. + +* Fixed bug in cyclic DFA with syntactic predicates. Wasn't rewinding + properly. Further, mark() in token stream did not fill buffer so + when you rewound back to last marker index was -1 not 0. At same time + I fixed ANTLR-103. Syn preds evaluated only once now. + +* Altered code gen file writing so it writes directly to a file + instead of building a big string and then writing that out. Should + be faster and much less memory intensive. + +* Fixed so antlr writes files to correct location again. See: + +http://www.antlr.org/wiki/pages/viewpage.action?pageId=1862 + +3.0b7 - April 12, 2007 + +April 10, 2007 + +* Allows -> {...} actions now when building ASTs. Fixed ANTLR-14. + +* Allows ! on sets and wildcard now during output=AST option. Fixed ANTLR-17. + +* Fixed ANTLR-92 bug. Couldn't use sets with -> tree construction. + +* No lexer rule for a token type is now a warning. + +* Fixed set labels in lexer; ANTLR-60 bug + +* Fixed problem with duplicate state variable definitions in switch-case + +April 9, 2007 + +* Gated predicates didn't work properly in cyclic DFA. + +April 7, 2007 + +* Couldn't have more than one set per rule it seems. Fixed. + +April 3, 2007 + +* Fix a problem in my unused label optimization. Added new + pass over actions to examine them. + +* RuleReturnScope has method back: + /** Has a value potentially if output=template; Don't use StringTemplate + * type as it then causes a dependency with ST lib. + */ + public Object getTemplate() { return null; } + +March 30, 2007 + +* Fixed ANTLR-8. Labels to rules w/o return values caused compile errors. + +* Fixed ANTLR-89; semantic predicates in lexer sometimes + caused exception in code gen. + +* Fixed ANTLR-36; remove runtime dependency with ST + +March 29, 2007 + +* Over last few days, I've gutted how ANTLR handles sets of chars or + tokens. I cleaned up a lot of stuff in the grammars and added lots + of unit tests. + +March 26, 2007 + +* CommonTreeNodeStream didn't push correctly; couldn't handle very + deeply nested trees. + +* Fixed bug that E : 'a' 'b' ; made E be seen as an alias of 'a'. + +March 22, 2007 + +* Working with Egor Ushakov from Sun Optimization / NetBeans team I + made all the Java lexer transition tables static w/o screwing up + ability to reference semantic predicates etc... Only changed Java.stg + +* cached text string in CommonToken.getText(); saves on repeated calls; + Java mode. + +* made all generated methods final; saves a few percent speed according to + Egor Ushakov (Java only). + +* removed most assignments from each lexer rule and even the Lexer.emit() + call! All done in nextToken now. Saves on code gen size and a wee bit of + execution speed probably. Variables became fields: type, channel, line, + etc... Now emit() needs no args even. Again, Egor helped on this. + +March 17, 2007 + +* Jonathan DeKlotz updated C# templates to be 3.0b6 current + +March 14, 2007 + +* Manually-specified (...)=> force backtracking eval of that predicate. + backtracking=true mode does not however. Added unit test. + +March 14, 2007 + +* Fixed bug in lexer where ~T didn't compute the set from rule T. + +* Added -Xnoinlinedfa make all DFA with tables; no inline prediction with IFs + +* Fixed http://www.antlr.org/browse/ANTLR-80. + Sem pred states didn't define lookahead vars. + +* Fixed http://www.antlr.org/browse/ANTLR-91. + When forcing some acyclic DFA to be state tables, they broke. + Forcing all DFA to be state tables should give same results. + +March 12, 2007 + +* setTokenSource in CommonTokenStream didn't clear tokens list. + setCharStream calls reset in Lexer. + +* Altered -depend. No longer printing grammar files for multiple input + files with -depend. Doesn't show T__.g temp file anymore. Added + TLexer.tokens. Added .h files if defined. + +February 11, 2007 + +* Added -depend command-line option that, instead of processing files, + it shows you what files the input grammar(s) depend on and what files + they generate. For combined grammar T.g: + + $ java org.antlr.Tool -depend T.g + + You get: + + TParser.java : T.g + T.tokens : T.g + T__.g : T.g + + Now, assuming U.g is a tree grammar ref'd T's tokens: + + $ java org.antlr.Tool -depend T.g U.g + + TParser.java : T.g + T.tokens : T.g + T__.g : T.g + U.g: T.tokens + U.java : U.g + U.tokens : U.g + + Handles spaces by escaping them. Pays attention to -o, -fo and -lib. + Dir 'x y' is a valid dir in current dir. + + $ java org.antlr.Tool -depend -lib /usr/local/lib -o 'x y' T.g U.g + x\ y/TParser.java : T.g + x\ y/T.tokens : T.g + x\ y/T__.g : T.g + U.g: /usr/local/lib/T.tokens + x\ y/U.java : U.g + x\ y/U.tokens : U.g + + You have API access via org.antlr.tool.BuildDependencyGenerator class: + getGeneratedFileList(), getDependenciesFileList(). You can also access + the output template: getDependencies(). The file + org/antlr/tool/templates/depend.stg contains the template. You can + modify as you want. File objects go in so you can play with path etc... + +February 10, 2007 + +* no more .gl files generated. All .g all the time. + +* changed @finally to be @after and added a finally clause to the + exception stuff. I also removed the superfluous "exception" + keyword. Here's what the new syntax looks like: + + a + @after { System.out.println("ick"); } + : 'a' + ; + catch[RecognitionException e] { System.out.println("foo"); } + catch[IOException e] { System.out.println("io"); } + finally { System.out.println("foobar"); } + + @after executes after bookkeeping to set $rule.stop, $rule.tree but + before scopes pop and any memoization happens. Dynamic scopes and + memoization are still in generated finally block because they must + exec even if error in rule. The @after action and tree setting + stuff can technically be skipped upon syntax error in rule. [Later + we might add something to finally to stick an ERROR token in the + tree and set the return value.] Sequence goes: set $stop, $tree (if + any), @after (if any), pop scopes (if any), memoize (if needed), + grammar finally clause. Last 3 are in generated code's finally + clause. + +3.0b6 - January 31, 2007 + +January 30, 2007 + +* Fixed bug in IntervalSet.and: it returned the same empty set all the time + rather than new empty set. Code altered the same empty set. + +* Made analysis terminate faster upon a decision that takes too long; + it seemed to keep doing work for a while. Refactored some names + and updated comments. Also made it terminate when it realizes it's + non-LL(*) due to recursion. just added terminate conditions to loop + in convert(). + +* Sometimes fatal non-LL(*) messages didn't appear; instead you got + "antlr couldn't analyze", which is actually untrue. I had the + order of some prints wrong in the DecisionProbe. + +* The code generator incorrectly detected when it could use a fixed, + acyclic inline DFA (i.e., using an IF). Upon non-LL(*) decisions + with predicates, analysis made cyclic DFA. But this stops + the computation detecting whether they are cyclic. I just added + a protection in front of the acyclic DFA generator to avoid if + non-LL(*). Updated comments. + +January 23, 2007 + +* Made tree node streams use adaptor to create navigation nodes. + Thanks to Emond Papegaaij. + +January 22, 2007 + +* Added lexer rule properties: start, stop + +January 1, 2007 + +* analysis failsafe is back on; if a decision takes too long, it bails out + and uses k=1 + +January 1, 2007 + +* += labels for rules only work for output option; previously elements + of list were the return value structs, but are now either the tree or + StringTemplate return value. You can label different rules now + x+=a x+=b. + +December 30, 2006 + +* Allow \" to work correctly in "..." template. + +December 28, 2006 + +* errors that are now warnings: missing AST label type in trees. + Also "no start rule detected" is warning. + +* tree grammars also can do rewrite=true for output=template. + Only works for alts with single node or tree as alt elements. + If you are going to use $text in a tree grammar or do rewrite=true + for templates, you must use in your main: + + nodes.setTokenStream(tokens); + +* You get a warning for tree grammars that do rewrite=true and + output=template and have -> for alts that are not simple nodes + or simple trees. new unit tests in TestRewriteTemplates at end. + +December 27, 2006 + +* Error message appears when you use -> in tree grammar with + output=template and rewrite=true for alt that is not simple + node or tree ref. + +* no more $stop attribute for tree parsers; meaningless/useless. + Removed from TreeRuleReturnScope also. + +* rule text attribute in tree parser must pull from token buffer. + Makes no sense otherwise. added getTokenStream to TreeNodeStream + so rule $text attr works. CommonTreeNodeStream etc... now let + you set the token stream so you can access later from tree parser. + $text is not well-defined for rules like + + slist : stat+ ; + + because stat is not a single node nor rooted with a single node. + $slist.text will get only first stat. I need to add a warning about + this... + +* Fixed http://www.antlr.org/browse/ANTLR-76 for Java. + Enhanced TokenRewriteStream so it accepts any object; converts + to string at last second. Allows you to rewrite with StringTemplate + templates now :) + +* added rewrite option that makes -> template rewrites do replace ops for + TokenRewriteStream input stream. In output=template and rewrite=true mode + same as before 'cept that the parser does + + ((TokenRewriteStream)input).replace( + ((Token)retval.start).getTokenIndex(), + input.LT(-1).getTokenIndex(), + retval.st); + + after each rewrite so that the input stream is altered. Later refs to + $text will have rewrites. Here's a sample test program for grammar Rew. + + FileReader groupFileR = new FileReader("Rew.stg"); + StringTemplateGroup templates = new StringTemplateGroup(groupFileR); + ANTLRInputStream input = new ANTLRInputStream(System.in); + RewLexer lexer = new RewLexer(input); + TokenRewriteStream tokens = new TokenRewriteStream(lexer); + RewParser parser = new RewParser(tokens); + parser.setTemplateLib(templates); + parser.program(); + System.out.println(tokens.toString()); + groupFileR.close(); + +December 26, 2006 + +* BaseTree.dupTree didn't dup recursively. + +December 24, 2006 + +* Cleaned up some comments and removed field treeNode + from MismatchedTreeNodeException class. It is "node" in + RecognitionException. + +* Changed type from Object to BitSet for expecting fields in + MismatchedSetException and MismatchedNotSetException + +* Cleaned up error printing in lexers and the messages that it creates. + +* Added this to TreeAdaptor: + /** Return the token object from which this node was created. + * Currently used only for printing an error message. + * The error display routine in BaseRecognizer needs to + * display where the input the error occurred. If your + * tree of limitation does not store information that can + * lead you to the token, you can create a token filled with + * the appropriate information and pass that back. See + * BaseRecognizer.getErrorMessage(). + */ + public Token getToken(Object t); + +December 23, 2006 + +* made BaseRecognizer.displayRecognitionError nonstatic so people can + override it. Not sure why it was static before. + +* Removed state/decision message that comes out of no + viable alternative exceptions, as that was too much. + removed the decision number from the early exit exception + also. During development, you can simply override + displayRecognitionError from BaseRecognizer to add the stuff + back in if you want. + +* made output go to an output method you can override: emitErrorMessage() + +* general cleanup of the error emitting code in BaseRecognizer. Lots + more stuff you can override: getErrorHeader, getTokenErrorDisplay, + emitErrorMessage, getErrorMessage. + +December 22, 2006 + +* Altered Tree.Parser.matchAny() so that it skips entire trees if + node has children otherwise skips one node. Now this works to + skip entire body of function if single-rooted subtree: + ^(FUNC name=ID arg=ID .) + +* Added "reverse index" from node to stream index. Override + fillReverseIndex() in CommonTreeNodeStream if you want to change. + Use getNodeIndex(node) to find stream index for a specific tree node. + See getNodeIndex(), reverseIndex(Set tokenTypes), + reverseIndex(int tokenType), fillReverseIndex(). The indexing + costs time and memory to fill, but pulling stuff out will be lots + faster as it can jump from a node ptr straight to a stream index. + +* Added TreeNodeStream.get(index) to make it easier for interpreters to + jump around in tree node stream. + +* New CommonTreeNodeStream buffers all nodes in stream for fast jumping + around. It now has push/pop methods to invoke other locations in + the stream for building interpreters. + +* Moved CommonTreeNodeStream to UnBufferedTreeNodeStream and removed + Iterator implementation. moved toNodesOnlyString() to TestTreeNodeStream + +* [BREAKS ANY TREE IMPLEMENTATION] + made CommonTreeNodeStream work with any tree node type. TreeAdaptor + now implements isNil so must add; trivial, but does break back + compatibility. + +December 17, 2006 + +* Added traceIn/Out methods to recognizers so that you can override them; + previously they were in-line print statements. The message has also + been slightly improved. + +* Factored BuildParseTree into debug package; cleaned stuff up. Fixed + unit tests. + +December 15, 2006 + +* [BREAKS ANY TREE IMPLEMENTATION] + org.antlr.runtime.tree.Tree; needed to add get/set for token start/stop + index so CommonTreeAdaptor can assume Tree interface not CommonTree + implementation. Otherwise, no way to create your own nodes that satisfy + Tree because CommonTreeAdaptor was doing + + public int getTokenStartIndex(Object t) { + return ((CommonTree)t).startIndex; + } + + Added to Tree: + + /** What is the smallest token index (indexing from 0) for this node + * and its children? + */ + int getTokenStartIndex(); + + void setTokenStartIndex(int index); + + /** What is the largest token index (indexing from 0) for this node + * and its children? + */ + int getTokenStopIndex(); + + void setTokenStopIndex(int index); + +December 13, 2006 + +* Added org.antlr.runtime.tree.DOTTreeGenerator so you can generate DOT + diagrams easily from trees. + + CharStream input = new ANTLRInputStream(System.in); + TLexer lex = new TLexer(input); + CommonTokenStream tokens = new CommonTokenStream(lex); + TParser parser = new TParser(tokens); + TParser.e_return r = parser.e(); + Tree t = (Tree)r.tree; + System.out.println(t.toStringTree()); + DOTTreeGenerator gen = new DOTTreeGenerator(); + StringTemplate st = gen.toDOT(t); + System.out.println(st); + +* Changed the way mark()/rewind() work in CommonTreeNode stream to mirror + more flexible solution in ANTLRStringStream. Forgot to set lastMarker + anyway. Now you can rewind to non-most-recent marker. + +December 12, 2006 + +* Temp lexer now end in .gl (T__.gl, for example) + +* TreeParser suffix no longer generated for tree grammars + +* Defined reset for lexer, parser, tree parser; rewinds the input stream also + +December 10, 2006 + +* Made Grammar.abortNFAToDFAConversion() abort in middle of a DFA. + +December 9, 2006 + +* fixed bug in OrderedHashSet.add(). It didn't track elements correctly. + +December 6, 2006 + +* updated build.xml for future Ant compatibility, thanks to Matt Benson. + +* various tests in TestRewriteTemplate and TestSyntacticPredicateEvaluation + were using the old 'channel' vs. new '$channel' notation. + TestInterpretedParsing didn't pick up an earlier change to CommonToken. + Reported by Matt Benson. + +* fixed platform dependent test failures in TestTemplates, supplied by Matt + Benson. + +November 29, 2006 + +* optimized semantic predicate evaluation so that p||!p yields true. + +November 22, 2006 + +* fixed bug that prevented var = $rule.some_retval from working in anything + but the first alternative of a rule or subrule. + +* attribute names containing digits were not allowed, this is now fixed, + allowing attributes like 'name1' but not '1name1'. + +November 19, 2006 + +* Removed LeftRecursionMessage and apparatus because it seems that I check + for left recursion upfront before analysis and everything gets specified as + recursion cycles at this point. + +November 16, 2006 + +* TokenRewriteStream.replace was not passing programName to next method. + +November 15, 2006 + +* updated DOT files for DFA generation to make smaller circles. + +* made epsilon edges italics in the NFA diagrams. + +3.0b5 - November 15, 2006 + +The biggest thing is that your grammar file names must match the grammar name +inside (your generated class names will also be different) and we use +$channel=HIDDEN now instead of channel=99 inside lexer actions. +Should be compatible other than that. Please look at complete list of +changes. + +November 14, 2006 + +* Force token index to be -1 for CommonIndex in case not set. + +November 11, 2006 + +* getUniqueID for TreeAdaptor now uses identityHashCode instead of hashCode. + +November 10, 2006 + +* No grammar nondeterminism warning now when wildcard '.' is final alt. + Examples: + + a : A | B | . ; + + A : 'a' + | . + ; + + SL_COMMENT + : '//' (options {greedy=false;} : .)* '\r'? '\n' + ; + + SL_COMMENT2 + : '//' (options {greedy=false;} : 'x'|.)* '\r'? '\n' + ; + + +November 8, 2006 + +* Syntactic predicates did not get hoisting properly upon non-LL(*) decision. Other hoisting issues fixed. Cleaned up code. + +* Removed failsafe that check to see if I'm spending too much time on a single DFA; I don't think we need it anymore. + +November 3, 2006 + +* $text, $line, etc... were not working in assignments. Fixed and added + test case. + +* $label.text translated to label.getText in lexer even if label was on a char + +November 2, 2006 + +* Added error if you don't specify what the AST type is; actions in tree + grammar won't work without it. + + $ cat x.g + tree grammar x; + a : ID {String s = $ID.text;} ; + + ANTLR Parser Generator Early Access Version 3.0b5 (??, 2006) 1989-2006 + error: x.g:0:0: (152) tree grammar x has no ASTLabelType option + +November 1, 2006 + +* $text, $line, etc... were not working properly within lexer rule. + +October 32, 2006 + +* Finally actions now execute before dynamic scopes are popped it in the + rule. Previously was not possible to access the rules scoped variables + in a finally action. + +October 29, 2006 + +* Altered ActionTranslator to emit errors on setting read-only attributes + such as $start, $stop, $text in a rule. Also forbid setting any attributes + in rules/tokens referenced by a label or name. + Setting dynamic scopes's attributes and your own parameter attributes + is legal. + +October 27, 2006 + +* Altered how ANTLR figures out what decision is associated with which + block of grammar. Makes ANTLRWorks correctly find DFA for a block. + +October 26, 2006 + +* Fixed bug where EOT transitions led to no NFA configs in a DFA state, + yielding an error in DFA table generation. + +* renamed action.g to ActionTranslator.g + the ActionTranslator class is now called ActionTranslatorLexer, as ANTLR + generates this classname now. Fixed rest of codebase accordingly. + +* added rules recognizing setting of scopes' attributes to ActionTranslator.g + the Objective C target needed access to the right-hand side of the assignment + in order to generate correct code + +* changed ANTLRCore.sti to reflect the new mandatory templates to support the above + namely: scopeSetAttributeRef, returnSetAttributeRef and the ruleSetPropertyRef_* + templates, with the exception of ruleSetPropertyRef_text. we cannot set this attribute + +October 19, 2006 + +* Fixed 2 bugs in DFA conversion that caused exceptions. + altered functionality of getMinElement so it ignores elements<0. + +October 18, 2006 + +* moved resetStateNumbersToBeContiguous() to after issuing of warnings; + an internal error in that routine should make more sense as issues + with decision will appear first. + +* fixed cut/paste bug I introduced when fixed EOF in min/max + bug. Prevented C grammar from working briefly. + +October 17, 2006 + +* Removed a failsafe that seems to be unnecessary that ensure DFA didn't + get too big. It was resulting in some failures in code generation that + led me on quite a strange debugging trip. + +October 16, 2006 + +* Use channel=HIDDEN not channel=99 to put tokens on hidden channel. + +October 12, 2006 + +* ANTLR now has a customizable message format for errors and warnings, + to make it easier to fulfill requirements by IDEs and such. + The format to be used can be specified via the '-message-format name' + command line switch. The default for name is 'antlr', also available + at the moment is 'gnu'. This is done via StringTemplate, for details + on the requirements look in org/antlr/tool/templates/messages/formats/ + +* line numbers for lexers in combined grammars are now reported correctly. + +September 29, 2006 + +* ANTLRReaderStream improperly checked for end of input. + +September 28, 2006 + +* For ANTLRStringStream, LA(-1) was off by one...gave you LA(-2). + +3.0b4 - August 24, 2006 + +* error when no rules in grammar. doesn't crash now. + +* Token is now an interface. + +* remove dependence on non runtime classes in runtime package. + +* filename and grammar name must be same Foo in Foo.g. Generates FooParser, + FooLexer, ... Combined grammar Foo generates Foo$Lexer.g which generates + FooLexer.java. tree grammars generate FooTreeParser.java + +August 24, 2006 + +* added C# target to lib, codegen, templates + +August 11, 2006 + +* added tree arg to navigation methods in treeadaptor + +August 07, 2006 + +* fixed bug related to (a|)+ on end of lexer rules. crashed instead + of warning. + +* added warning that interpreter doesn't do synpreds yet + +* allow different source of classloader: +ClassLoader cl = Thread.currentThread().getContextClassLoader(); +if ( cl==null ) { + cl = this.getClass().getClassLoader(); +} + + +July 26, 2006 + +* compressed DFA edge tables significantly. All edge tables are + unique. The transition table can reuse arrays. Look like this now: + + public static readonly DFA30_transition0 = + new short[] { 46, 46, -1, 46, 46, -1, -1, -1, -1, -1, -1, -1,...}; + public static readonly DFA30_transition1 = + new short[] { 21 }; + public static readonly short[][] DFA30_transition = { + DFA30_transition0, + DFA30_transition0, + DFA30_transition1, + ... + }; + +* If you defined both a label like EQ and '=', sometimes the '=' was + used instead of the EQ label. + +* made headerFile template have same arg list as outputFile for consistency + +* outputFile, lexer, genericParser, parser, treeParser templates + reference cyclicDFAs attribute which was no longer used after I + started the new table-based DFA. I made cyclicDFADescriptors + argument to outputFile and headerFile (only). I think this is + correct as only OO languages will want the DFA in the recognizer. + At the top level, C and friends can use it. Changed name to use + cyclicDFAs again as it's a better name probably. Removed parameter + from the lexer, ... For example, my parser template says this now: + + + +* made all token ref token types go thru code gen's + getTokenTypeAsTargetLabel() + +* no more computing DFA transition tables for acyclic DFA. + +July 25, 2006 + +* fixed a place where I was adding syn predicates into rewrite stuff. + +* turned off invalid token index warning in AW support; had a problem. + +* bad location event generated with -debug for synpreds in autobacktrack mode. + +July 24, 2006 + +* changed runtime.DFA so that it treats all chars and token types as + char (unsigned 16 bit int). -1 becomes '\uFFFF' then or 65535. + +* changed MAX_STATE_TRANSITIONS_FOR_TABLE to be 65534 by default + now. This means that all states can use a table to do transitions. + +* was not making synpreds on (C)* type loops with backtrack=true + +* was copying tree stuff and actions into synpreds with backtrack=true + +* was making synpreds on even single alt rules / blocks with backtrack=true + +3.0b3 - July 21, 2006 + +* ANTLR fails to analyze complex decisions much less frequently. It + turns out that the set of decisions for which ANTLR fails (times + out) is the same set (so far) of non-LL(*) decisions. Morever, I'm + able to detect this situation quickly and report rather than timing + out. Errors look like: + + java.g:468:23: [fatal] rule concreteDimensions has non-LL(*) + decision due to recursive rule invocations in alts 1,2. Resolve + by left-factoring or using syntactic predicates with fixed k + lookahead or use backtrack=true option. + + This message only appears when k=*. + +* Shortened no viable alt messages to not include decision + description: + +[compilationUnit, declaration]: line 8:8 decision=<<67:1: declaration +: ( ( fieldDeclaration )=> fieldDeclaration | ( methodDeclaration )=> +methodDeclaration | ( constructorDeclaration )=> +constructorDeclaration | ( classDeclaration )=> classDeclaration | ( +interfaceDeclaration )=> interfaceDeclaration | ( blockDeclaration )=> +blockDeclaration | emptyDeclaration );>> state 3 (decision=14) no +viable alt; token=[@1,184:187='java',<122>,8:8] + + too long and hard to read. + +July 19, 2006 + +* Code gen bug: states with no emanating edges were ignored by ST. + Now an empty list is used. + +* Added grammar parameter to recognizer templates so they can access + properties like getName(), ... + +July 10, 2006 + +* Fixed the gated pred merged state bug. Added unit test. + +* added new method to Target: getTokenTypeAsTargetLabel() + +July 7, 2006 + +* I was doing an AND instead of OR in the gated predicate stuff. + Thanks to Stephen Kou! + +* Reduce op for combining predicates was insanely slow sometimes and + didn't actually work well. Now it's fast and works. + +* There is a bug in merging of DFA stop states related to gated + preds...turned it off for now. + +3.0b2 - July 5, 2006 + +July 5, 2006 + +* token emission not properly protected in lexer filter mode. + +* EOT, EOT DFA state transition tables should be init'd to -1 (only + was doing this for compressed tables). Fixed. + +* in trace mode, exit method not shown for memoized rules + +* added -Xmaxdfaedges to allow you to increase number of edges allowed + for a single DFA state before it becomes "special" and can't fit in + a simple table. + +* Bug in tables. Short are signed so min/max tables for DFA are now + char[]. Bizarre. + +July 3, 2006 + +* Added a method to reset the tool error state for current thread. + See ErrorManager.java + +* [Got this working properly today] backtrack mode that let's you type + in any old crap and ANTLR will backtrack if it can't figure out what + you meant. No errors are reported by antlr during analysis. It + implicitly adds a syn pred in front of every production, using them + only if static grammar LL(*) analysis fails. Syn pred code is not + generated if the pred is not used in a decision. + + This is essentially a rapid prototyping mode. + +* Added backtracking report to the -report option + +* Added NFA->DFA conversion early termination report to the -report option + +* Added grammar level k and backtrack options to -report + +* Added a dozen unit tests to test autobacktrack NFA construction. + +* If you are using filter mode, you must manually use option + memoize=true now. + +July 2, 2006 + +* Added k=* option so you can set k=2, for example, on whole grammar, + but an individual decision can be LL(*). + +* memoize option for grammars, rules, blocks. Remove -nomemo cmd-line option + +* but in DOT generator for DFA; fixed. + +* runtime.DFA reported errors even when backtracking + +July 1, 2006 + +* Added -X option list to help + +* Syn preds were being hoisted into other rules, causing lots of extra + backtracking. + +June 29, 2006 + +* unnecessary files removed during build. + +* Matt Benson updated build.xml + +* Detecting use of synpreds in analysis now instead of codegen. In + this way, I can avoid analyzing decisions in synpreds for synpreds + not used in a DFA for a real rule. This is used to optimize things + for backtrack option. + +* Code gen must add _fragment or whatever to end of pred name in + template synpredRule to avoid having ANTLR know anything about + method names. + +* Added -IdbgST option to emit ST delimiters at start/stop of all + templates spit out. + +June 28, 2006 + +* Tweaked message when ANTLR cannot handle analysis. + +3.0b1 - June 27, 2006 + +June 24, 2006 + +* syn preds no longer generate little static classes; they also don't + generate a whole bunch of extra crap in the rules built to test syn + preds. Removed GrammarFragmentPointer class from runtime. + +June 23-24, 2006 + +* added output option to -report output. + +* added profiling info: + Number of rule invocations in "guessing" mode + number of rule memoization cache hits + number of rule memoization cache misses + +* made DFA DOT diagrams go left to right not top to bottom + +* I try to recursive overflow states now by resolving these states + with semantic/syntactic predicates if they exist. The DFA is then + deterministic rather than simply resolving by choosing first + nondeterministic alt. I used to generated errors: + +~/tmp $ java org.antlr.Tool -dfa t.g +ANTLR Parser Generator Early Access Version 3.0b2 (July 5, 2006) 1989-2006 +t.g:2:5: Alternative 1: after matching input such as A A A A A decision cannot predict what comes next due to recursion overflow to b from b +t.g:2:5: Alternative 2: after matching input such as A A A A A decision cannot predict what comes next due to recursion overflow to b from b + + Now, I uses predicates if available and emits no warnings. + +* made sem preds share accept states. Previously, multiple preds in a +decision forked new accepts each time for each nondet state. + +June 19, 2006 + +* Need parens around the prediction expressions in templates. + +* Referencing $ID.text in an action forced bad code gen in lexer rule ID. + +* Fixed a bug in how predicates are collected. The definition of + "last predicated alternative" was incorrect in the analysis. Further, + gated predicates incorrectly missed a case where an edge should become + true (a tautology). + +* Removed an unnecessary input.consume() reference in the runtime/DFA class. + +June 14, 2006 + +* -> ($rulelabel)? didn't generate proper code for ASTs. + +* bug in code gen (did not compile) +a : ID -> ID + | ID -> ID + ; +Problem is repeated ref to ID from left side. Juergen pointed this out. + +* use of tokenVocab with missing file yielded exception + +* (A|B)=> foo yielded an exception as (A|B) is a set not a block. Fixed. + +* Didn't set ID1= and INT1= for this alt: + | ^(ID INT+ {System.out.print(\"^(\"+$ID+\" \"+$INT+\")\");}) + +* Fixed so repeated dangling state errors only occur once like: +t.g:4:17: the decision cannot distinguish between alternative(s) 2,1 for at least one input sequence + +* tracking of rule elements was on (making list defs at start of + method) with templates instead of just with ASTs. Turned off. + +* Doesn't crash when you give it a missing file now. + +* -report: add output info: how many LL(1) decisions. + +June 13, 2006 + +* ^(ROOT ID?) Didn't work; nor did any other nullable child list such as + ^(ROOT ID* INT?). Now, I check to see if child list is nullable using + Grammar.LOOK() and, if so, I generate an "IF lookahead is DOWN" gate + around the child list so the whole thing is optional. + +* Fixed a bug in LOOK that made it not look through nullable rules. + +* Using AST suffixes or -> rewrite syntax now gives an error w/o a grammar + output option. Used to crash ;) + +* References to EOF ended up with improper -1 refs instead of EOF in output. + +* didn't warn of ambig ref to $expr in rewrite; fixed. +list + : '[' expr 'for' type ID 'in' expr ']' + -> comprehension(expr={$expr.st},type={},list={},i={}) + ; + +June 12, 2006 + +* EOF works in the parser as a token name. + +* Rule b:(A B?)*; didn't display properly in AW due to the way ANTLR + generated NFA. + +* "scope x;" in a rule for unknown x gives no error. Fixed. Added unit test. + +* Label type for refs to start/stop in tree parser and other parsers were + not used. Lots of casting. Ick. Fixed. + +* couldn't refer to $tokenlabel in isolation; but need so we can test if + something was matched. Fixed. + +* Lots of little bugs fixed in $x.y, %... translation due to new + action translator. + +* Improperly tracking block nesting level; result was that you couldn't + see $ID in action of rule "a : A+ | ID {Token t = $ID;} | C ;" + +* a : ID ID {$ID.text;} ; did not get a warning about ambiguous $ID ref. + +* No error was found on $COMMENT.text: + +COMMENT + : '/*' (options {greedy=false;} : . )* '*/' + {System.out.println("found method "+$COMMENT.text);} + ; + + $enclosinglexerrule scope does not exist. Use text or setText() here. + +June 11, 2006 + +* Single return values are initialized now to default or to your spec. + +* cleaned up input stream stuff. Added ANTLRReaderStream, ANTLRInputStream + and refactored. You can specify encodings now on ANTLRFileStream (and + ANTLRInputStream) now. + +* You can set text local var now in a lexer rule and token gets that text. + start/stop indexes are still set for the token. + +* Changed lexer slightly. Calling a nonfragment rule from a + nonfragment rule does not set the overall token. + +June 10, 2006 + +* Fixed bug where unnecessary escapes yield char==0 like '\{'. + +* Fixed analysis bug. This grammar didn't report a recursion warning: +x : y X + | y Y + ; +y : L y R + | B + ; + The DFAState.equals() method was messed up. + +* Added @synpredgate {...} action so you can tell ANTLR how to gate actions + in/out during syntactic predicate evaluation. + +* Fuzzy parsing should be more efficient. It should backtrack over a rule + and then rewind and do it again "with feeling" to exec actions. It was + actually doing it 3x not 2x. + +June 9, 2006 + +* Gutted and rebuilt the action translator for $x.y, $x::y, ... + Uses ANTLR v3 now for the first time inside v3 source. :) + ActionTranslator.java + +* Fixed a bug where referencing a return value on a rule didn't work + because later a ref to that rule's predefined properties didn't + properly force a return value struct to be built. Added unit test. + +June 6, 2006 + +* New DFA mechanisms. Cyclic DFA are implemented as state tables, + encoded via strings as java cannot handle large static arrays :( + States with edges emanating that have predicates are specially + treated. A method is generated to do these states. The DFA + simulation routine uses the "special" array to figure out if the + state is special. See March 25, 2006 entry for description: + http://www.antlr.org/blog/antlr3/codegen.tml. analysis.DFA now has + all the state tables generated for code gen. CyclicCodeGenerator.java + disappeared as it's unneeded code. :) + +* Internal general clean up of the DFA.states vs uniqueStates thing. + Fixed lookahead decisions no longer fill uniqueStates. Waste of + time. Also noted that when adding sem pred edges, I didn't check + for state reuse. Fixed. + +June 4, 2006 + +* When resolving ambig DFA states predicates, I did not add the new states + to the list of unique DFA states. No observable effect on output except + that DFA state numbers were not always contiguous for predicated decisions. + I needed this fix for new DFA tables. + +3.0ea10 - June 2, 2006 + +June 2, 2006 + +* Improved grammar stats and added syntactic pred tracking. + +June 1, 2006 + +* Due to a type mismatch, the DebugParser.recoverFromMismatchedToken() + method was not called. Debug events for mismatched token error + notification were not sent to ANTLRWorks probably + +* Added getBacktrackingLevel() for any recognizer; needed for profiler. + +* Only writes profiling data for antlr grammar analysis with -profile set + +* Major update and bug fix to (runtime) Profiler. + +May 27, 2006 + +* Added Lexer.skip() to force lexer to ignore current token and look for + another; no token is created for current rule and is not passed on to + parser (or other consumer of the lexer). + +* Parsers are much faster now. I removed use of java.util.Stack for pushing + follow sets and use a hardcoded array stack instead. Dropped from + 5900ms to 3900ms for parse+lex time parsing entire java 1.4.2 source. Lex + time alone was about 1500ms. Just looking at parse time, we get about 2x + speed improvement. :) + +May 26, 2006 + +* Fixed NFA construction so it generates NFA for (A*)* such that ANTLRWorks + can display it properly. + +May 25, 2006 + +* added abort method to Grammar so AW can terminate the conversion if it's + taking too long. + +May 24, 2006 + +* added method to get left recursive rules from grammar without doing full + grammar analysis. + +* analysis, code gen not attempted if serious error (like + left-recursion or missing rule definition) occurred while reading + the grammar in and defining symbols. + +* added amazing optimization; reduces analysis time by 90% for java + grammar; simple IF statement addition! + +3.0ea9 - May 20, 2006 + +* added global k value for grammar to limit lookahead for all decisions unless +overridden in a particular decision. + +* added failsafe so that any decision taking longer than 2 seconds to create +the DFA will fall back on k=1. Use -ImaxtimeforDFA n (in ms) to set the time. + +* added an option (turned off for now) to use multiple threads to +perform grammar analysis. Not much help on a 2-CPU computer as +garbage collection seems to peg the 2nd CPU already. :( Gotta wait for +a 4 CPU box ;) + +* switched from #src to // $ANTLR src directive. + +* CommonTokenStream.getTokens() looked past end of buffer sometimes. fixed. + +* unicode literals didn't really work in DOT output and generated code. fixed. + +* fixed the unit test rig so it compiles nicely with Java 1.5 + +* Added ant build.xml file (reads build.properties file) + +* predicates sometimes failed to compile/eval properly due to missing (...) + in IF expressions. Forced (..) + +* (...)? with only one alt were not optimized. Was: + + // t.g:4:7: ( B )? + int alt1=2; + int LA1_0 = input.LA(1); + if ( LA1_0==B ) { + alt1=1; + } + else if ( LA1_0==-1 ) { + alt1=2; + } + else { + NoViableAltException nvae = + new NoViableAltException("4:7: ( B )?", 1, 0, input); + throw nvae; + } + +is now: + + // t.g:4:7: ( B )? + int alt1=2; + int LA1_0 = input.LA(1); + if ( LA1_0==B ) { + alt1=1; + } + + Smaller, faster and more readable. + +* Allow manual init of return values now: + functionHeader returns [int x=3*4, char (*f)()=null] : ... ; + +* Added optimization for DFAs that fixed a codegen bug with rules in lexer: + EQ : '=' ; + ASSIGNOP : '=' | '+=' ; + EQ is a subset of other rule. It did not given an error which is + correct, but generated bad code. + +* ANTLR was sending column not char position to ANTLRWorks. + +* Bug fix: location 0, 0 emitted for synpreds and empty alts. + +* debugging event handshake how sends grammar file name. Added getGrammarFileName() to recognizers. Java.stg generates it: + + public String getGrammarFileName() { return ""; } + +* tree parsers can do arbitrary lookahead now including backtracking. I + updated CommonTreeNodeStream. + +* added events for debugging tree parsers: + + /** Input for a tree parser is an AST, but we know nothing for sure + * about a node except its type and text (obtained from the adaptor). + * This is the analog of the consumeToken method. Again, the ID is + * the hashCode usually of the node so it only works if hashCode is + * not implemented. + */ + public void consumeNode(int ID, String text, int type); + + /** The tree parser looked ahead */ + public void LT(int i, int ID, String text, int type); + + /** The tree parser has popped back up from the child list to the + * root node. + */ + public void goUp(); + + /** The tree parser has descended to the first child of a the current + * root node. + */ + public void goDown(); + +* Added DebugTreeNodeStream and DebugTreeParser classes + +* Added ctor because the debug tree node stream will need to ask quesitons about nodes and since nodes are just Object, it needs an adaptor to decode the nodes and get text/type info for the debugger. + +public CommonTreeNodeStream(TreeAdaptor adaptor, Tree tree); + +* added getter to TreeNodeStream: + public TreeAdaptor getTreeAdaptor(); + +* Implemented getText/getType in CommonTreeAdaptor. + +* Added TraceDebugEventListener that can dump all events to stdout. + +* I broke down and make Tree implement getText + +* tree rewrites now gen location debug events. + +* added AST debug events to listener; added blank listener for convenience + +* updated debug events to send begin/end backtrack events for debugging + +* with a : (b->b) ('+' b -> ^(PLUS $a b))* ; you get b[0] each time as + there is no loop in rewrite rule itself. Need to know context that + the -> is inside the rule and hence b means last value of b not all + values. + +* Bug in TokenRewriteStream; ops at indexes < start index blocked proper op. + +* Actions in ST rewrites "-> ({$op})()" were not translated + +* Added new action name: + +@rulecatch { +catch (RecognitionException re) { + reportError(re); + recover(input,re); +} +catch (Throwable t) { + System.err.println(t); +} +} +Overrides rule catch stuff. + +* Isolated $ refs caused exception + +3.0ea8 - March 11, 2006 + +* added @finally {...} action like @init for rules. Executes in + finally block (java target) after all other stuff like rule memoization. + No code changes needs; ST just refs a new action: + + +* hideous bug fixed: PLUS='+' didn't result in '+' rule in lexer + +* TokenRewriteStream didn't do toString() right when no rewrites had been done. + +* lexer errors in interpreter were not printed properly + +* bitsets are dumped in hex not decimal now for FOLLOW sets + +* /* epsilon */ is not printed now when printing out grammars with empty alts + +* Fixed another bug in tree rewrite stuff where it was checking that elements + had at least one element. Strange...commented out for now to see if I can remember what's up. + +* Tree rewrites had problems when you didn't have x+=FOO variables. Rules + like this work now: + + a : (x=ID)? y=ID -> ($x $y)?; + +* filter=true for lexers turns on k=1 and backtracking for every token + alternative. Put the rules in priority order. + +* added getLine() etc... to Tree to support better error reporting for + trees. Added MismatchedTreeNodeException. + +* $templates::foo() is gone. added % as special template symbol. + %foo(a={},b={},...) ctor (even shorter than $templates::foo(...)) + %({name-expr})(a={},...) indirect template ctor reference + + The above are parsed by antlr.g and translated by codegen.g + The following are parsed manually here: + + %{string-expr} anonymous template from string expr + %{expr}.y = z; template attribute y of StringTemplate-typed expr to z + %x.y = z; set template attribute y of x (always set never get attr) + to z [languages like python without ';' must still use the + ';' which the code generator is free to remove during code gen] + +* -> ({expr})(a={},...) notation for indirect template rewrite. + expr is the name of the template. + +* $x[i]::y and $x[-i]::y notation for accesssing absolute scope stack + indexes and relative negative scopes. $x[-1]::y is the y attribute + of the previous scope (stack top - 1). + +* filter=true mode for lexers; can do this now...upon mismatch, just + consumes a char and tries again: +lexer grammar FuzzyJava; +options {filter=true;} + +FIELD + : TYPE WS? name=ID WS? (';'|'=') + {System.out.println("found var "+$name.text);} + ; + +* refactored char streams so ANTLRFileStream is now a subclass of + ANTLRStringStream. + +* char streams for lexer now allowed nested backtracking in lexer. + +* added TokenLabelType for lexer/parser for all token labels + +* line numbers for error messages were not updated properly in antlr.g + for strings, char literals and <<...>> + +* init action in lexer rules was before the type,start,line,... decls. + +* Tree grammars can now specify output; I've only tested output=templat + though. + +* You can reference EOF now in the parser and lexer. It's just token type + or char value -1. + +* Bug fix: $ID refs in the *lexer* were all messed up. Cleaned up the + set of properties available... + +* Bug fix: .st not found in rule ref when rule has scope: +field +scope { + StringTemplate funcDef; +} + : ... + {$field::funcDef = $field.st;} + ; +it gets field_stack.st instead + +* return in backtracking must return retval or null if return value. + +* $property within a rule now works like $text, $st, ... + +* AST/Template Rewrites were not gated by backtracking==0 so they + executed even when guessing. Auto AST construction is now gated also. + +* CommonTokenStream was somehow returning tokens not text in toString() + +* added useful methods to runtime.BitSet and also to CommonToken so you can + update the text. Added nice Token stream method: + + /** Given a start and stop index, return a List of all tokens in + * the token type BitSet. Return null if no tokens were found. This + * method looks at both on and off channel tokens. + */ + public List getTokens(int start, int stop, BitSet types); + +* literals are now passed in the .tokens files so you can ref them in + tree parses, for example. + +* added basic exception handling; no labels, just general catches: + +a : {;}A | B ; + exception + catch[RecognitionException re] { + System.out.println("recog error"); + } + catch[Exception e] { + System.out.println("error"); + } + +* Added method to TokenStream: + public String toString(Token start, Token stop); + +* antlr generates #src lines in lexer grammars generated from combined grammars + so error messages refer to original file. + +* lexers generated from combined grammars now use originally formatting. + +* predicates have $x.y stuff translated now. Warning: predicates might be + hoisted out of context. + +* return values in return val structs are now public. + +* output=template with return values on rules was broken. I assume return values with ASTs was broken too. Fixed. + +3.0ea7 - December 14, 2005 + +* Added -print option to print out grammar w/o actions + +* Renamed BaseParser to be BaseRecognizer and even made Lexer derive from + this; nice as it now shares backtracking support code. + +* Added syntactic predicates (...)=>. See December 4, 2005 entry: + + http://www.antlr.org/blog/antlr3/lookahead.tml + + Note that we have a new option for turning off rule memoization during + backtracking: + + -nomemo when backtracking don't generate memoization code + +* Predicates are now tested in order that you specify the alts. If you + leave the last alt "naked" (w/o pred), it will assume a true pred rather + than union of other preds. + +* Added gated predicates "{p}?=>" that literally turn off a production whereas +disambiguating predicates are only hoisted into the predictor when syntax alone +is not sufficient to uniquely predict alternatives. + +A : {p}? => "a" ; +B : {!p}? => ("a"|"b")+ ; + +* bug fixed related to predicates in predictor +lexer grammar w; +A : {p}? "a" ; +B : {!p}? ("a"|"b")+ ; +DFA is correct. A state splits for input "a" on the pred. +Generated code though was hosed. No pred tests in prediction code! +I added testLexerPreds() and others in TestSemanticPredicateEvaluation.java + +* added execAction template in case we want to do something in front of + each action execution or something. + +* left-recursive cycles from rules w/o decisions were not detected. + +* undefined lexer rules were not announced! fixed. + +* unreachable messages for Tokens rule now indicate rule name not alt. E.g., + + Ruby.lexer.g:24:1: The following token definitions are unreachable: IVAR + +* nondeterminism warnings improved for Tokens rule: + +Ruby.lexer.g:10:1: Multiple token rules can match input such as ""0".."9"": INT, FLOAT +As a result, tokens(s) FLOAT were disabled for that input + + +* DOT diagrams didn't show escaped char properly. + +* Char/string literals are now all 'abc' not "abc". + +* action syntax changed "@scope::actionname {action}" where scope defaults + to "parser" if parser grammar or combined grammar, "lexer" if lexer grammar, + and "treeparser" if tree grammar. The code generation targets decide + what scopes are available. Each "scope" yields a hashtable for use in + the output templates. The scopes full of actions are sent to all output + file templates (currently headerFile and outputFile) as attribute actions. + Then you can reference to get the map of actions associated + with scope and to get the parser's header action + for example. This should be very flexible. The target should only have + to define which scopes are valid, but the action names should be variable + so we don't have to recompile ANTLR to add actions to code gen templates. + + grammar T; + options {language=Java;} + @header { package foo; } + @parser::stuff { int i; } // names within scope not checked; target dependent + @members { int i; } + @lexer::header {head} + @lexer::members { int j; } + @headerfile::blort {...} // error: this target doesn't have headerfile + @treeparser::members {...} // error: this is not a tree parser + a + @init {int i;} + : ID + ; + ID : 'a'..'z'; + + For now, the Java target uses members and header as a valid name. Within a + rule, the init action name is valid. + +* changed $dynamicscope.value to $dynamicscope::value even if value is defined + in same rule such as $function::name where rule function defines name. + +* $dynamicscope gets you the stack + +* rule scopes go like this now: + + rule + scope {...} + scope slist,Symbols; + : ... + ; + +* Created RuleReturnScope as a generic rule return value. Makes it easier + to do this: + RuleReturnScope r = parser.program(); + System.out.println(r.getTemplate().toString()); + +* $template, $tree, $start, etc... + +* $r.x in current rule. $r is ignored as fully-qualified name. $r.start works too + +* added warning about $r referring to both return value of rule and dynamic scope of rule + +* integrated StringTemplate in a very simple manner + +Syntax: +-> template(arglist) "..." +-> template(arglist) <<...>> +-> namedTemplate(arglist) +-> {free expression} +-> // empty + +Predicate syntax: +a : A B -> {p1}? foo(a={$A.text}) + -> {p2}? foo(a={$B.text}) + -> // return nothing + +An arg list is just a list of template attribute assignments to actions in curlies. + +There is a setTemplateLib() method for you to use with named template rewrites. + +Use a new option: + +grammar t; +options {output=template;} +... + +This all should work for tree grammars too, but I'm still testing. + +* fixed bugs where strings were improperly escaped in exceptions, comments, etc.. For example, newlines came out as newlines not the escaped version + +3.0ea6 - November 13, 2005 + +* turned off -debug/-profile, which was on by default + +* completely refactored the output templates; added some missing templates. + +* dramatically improved infinite recursion error messages (actually + left-recursion never even was printed out before). + +* wasn't printing dangling state messages when it reanalyzes with k=1. + +* fixed a nasty bug in the analysis engine dealing with infinite recursion. + Spent all day thinking about it and cleaned up the code dramatically. + Bug fixed and software is more powerful and I understand it better! :) + +* improved verbose DFA nodes; organized by alt + +* got much better random phrase generation. For example: + + $ java org.antlr.tool.RandomPhrase simple.g program + int Ktcdn ';' method wh '(' ')' '{' return 5 ';' '}' + +* empty rules like "a : ;" generated code that didn't compile due to + try/catch for RecognitionException. Generated code couldn't possibly + throw that exception. + +* when printing out a grammar, such as in comments in generated code, + ANTLR didn't print ast suffix stuff back out for literals. + +* This never exited loop: + DATA : (options {greedy=false;}: .* '\n' )* '\n' '.' ; + and now it works due to new default nongreedy .* Also this works: + DATA : (options {greedy=false;}: .* '\n' )* '.' ; + +* Dot star ".*" syntax didn't work; in lexer it is nongreedy by + default. In parser it is on greedy but also k=1 by default. Added + unit tests. Added blog entry to describe. + +* ~T where T is the only token yielded an empty set but no error + +* Used to generate unreachable message here: + + parser grammar t; + a : ID a + | ID + ; + + z.g:3:11: The following alternatives are unreachable: 2 + + In fact it should really be an error; now it generates: + + no start rule in grammar t (no rule can obviously be followed by EOF) + + Per next change item, ANTLR cannot know that EOF follows rule 'a'. + +* added error message indicating that ANTLR can't figure out what your + start rule is. Required to properly generate code in some cases. + +* validating semantic predicates now work (if they are false, they + throw a new FailedPredicateException + +* two hideous bug fixes in the IntervalSet, which made analysis go wrong + in a few cases. Thanks to Oliver Zeigermann for finding lots of bugs + and making suggested fixes (including the next two items)! + +* cyclic DFAs are now nonstatic and hence can access instance variables + +* labels are now allowed on lexical elements (in the lexer) + +* added some internal debugging options + +* ~'a'* and ~('a')* were not working properly; refactored antlr.g grammar + +3.0ea5 - July 5, 2005 + +* Using '\n' in a parser grammar resulted in a nonescaped version of '\n' in the token names table making compilation fail. I fixed this by reorganizing/cleaning up portion of ANTLR that deals with literals. See comment org.antlr.codegen.Target. + +* Target.getMaxCharValue() did not use the appropriate max value constant. + +* ALLCHAR was a constant when it should use the Target max value def. set complement for wildcard also didn't use the Target def. Generally cleaned up the max char value stuff. + +* Code gen didn't deal with ASTLabelType properly...I think even the 3.0ea7 example tree parser was broken! :( + +* Added a few more unit tests dealing with escaped literals + +3.0ea4 - June 29, 2005 + +* tree parsers work; added CommonTreeNodeStream. See simplecTreeParser + example in examples-v3 tarball. + +* added superClass and ASTLabelType options + +* refactored Parser to have a BaseParser and added TreeParser + +* bug fix: actions being dumped in description strings; compile errors + resulted + +3.0ea3 - June 23, 2005 + +Enhancements + +* Automatic tree construction operators are in: ! ^ ^^ + +* Tree construction rewrite rules are in + -> {pred1}? rewrite1 + -> {pred2}? rewrite2 + ... + -> rewriteN + + The rewrite rules may be elements like ID, expr, $label, {node expr} + and trees ^( ). You have have (...)?, (...)*, (...)+ + subrules as well. + + You may have rewrites in subrules not just at outer level of rule, but + any -> rewrite forces auto AST construction off for that alternative + of that rule. + + To avoid cycles, copy semantics are used: + + r : INT -> INT INT ; + + means make two new nodes from the same INT token. + + Repeated references to a rule element implies a copy for at least one + tree: + + a : atom -> ^(atom atom) ; // NOT CYCLE! (dup atom tree) + +* $ruleLabel.tree refers to tree created by matching the labeled element. + +* A description of the blocks/alts is generated as a comment in output code + +* A timestamp / signature is put at top of each generated code file + +3.0ea2 - June 12, 2005 + +Bug fixes + +* Some error messages were missing the stackTrace parameter + +* Removed the file locking mechanism as it's not cross platform + +* Some absolute vs relative path name problems with writing output + files. Rules are now more concrete. -o option takes precedence + // -o /tmp /var/lib/t.g => /tmp/T.java + // -o subdir/output /usr/lib/t.g => subdir/output/T.java + // -o . /usr/lib/t.g => ./T.java + // -o /tmp subdir/t.g => /tmp/subdir/t.g + // If they didn't specify a -o dir so just write to location + // where grammar is, absolute or relative + +* does error checking on unknown option names now + +* Using just language code not locale name for error message file. I.e., + the default (and for any English speaking locale) is en.stg not en_US.stg + anymore. + +* The error manager now asks the Tool to panic rather than simply doing + a System.exit(). + +* Lots of refactoring concerning grammar, rule, subrule options. Now + detects invalid options. + +3.0ea1 - June 1, 2005 + +Initial early access release diff --git a/antlr-3.1.3/tool/LICENSE.txt b/antlr-3.1.3/tool/LICENSE.txt new file mode 100644 index 0000000..67e047c --- /dev/null +++ b/antlr-3.1.3/tool/LICENSE.txt @@ -0,0 +1,26 @@ +[The "BSD licence"] +Copyright (c) 2003-2008 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/antlr-3.1.3/tool/README.txt b/antlr-3.1.3/tool/README.txt new file mode 100644 index 0000000..f11633a --- /dev/null +++ b/antlr-3.1.3/tool/README.txt @@ -0,0 +1,123 @@ +ANTLR v3.1.3 +March 17, 2009 + +Terence Parr, parrt at cs usfca edu +ANTLR project lead and supreme dictator for life +University of San Francisco + +INTRODUCTION + +Welcome to ANTLR v3! ANTLR (ANother Tool for Language Recognition) is +a language tool that provides a framework for constructing +recognizers, interpreters, compilers, and translators from grammatical +descriptions containing actions in a variety of target +languages. ANTLR provides excellent support for tree construction, +tree walking, translation, error recovery, and error reporting. I've +been working on parser generators for 20 years and on this particular +version of ANTLR for 5 years. + +You should use v3 in conjunction with ANTLRWorks: + + http://www.antlr.org/works/index.html + +and gUnit (grammar unit testing tool included in distribution): + + http://www.antlr.org/wiki/display/ANTLR3/gUnit+-+Grammar+Unit+Testing + +The book will also help you a great deal (printed May 15, 2007); you +can also buy the PDF: + + http://www.pragmaticprogrammer.com/titles/tpantlr/index.html + +(New book coming out in beta Summer 2009: "Language Design Patterns") + +See the getting started document: + + http://www.antlr.org/wiki/display/ANTLR3/FAQ+-+Getting+Started + +You also have the examples plus the source to guide you. + +See the wiki FAQ: + + http://www.antlr.org/wiki/display/ANTLR3/ANTLR+v3+FAQ + +and general doc root: + + http://www.antlr.org/wiki/display/ANTLR3/ANTLR+3+Wiki+Home + +Please help add/update FAQ entries. + +If all else fails, you can buy support or ask the antlr-interest list: + + http://www.antlr.org/support.html + +Per the license in LICENSE.txt, this software is not guaranteed to +work and might even destroy all life on this planet: + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +---------------------------------------------------------------------- + +EXAMPLES + +ANTLR v3 sample grammars: + + http://www.antlr.org/download/examples-v3.tar.gz + +Also check out Mantra Programming Language for a prototype (work in +progress) using v3: + + http://www.linguamantra.org/ + +---------------------------------------------------------------------- + +What is ANTLR? + +ANTLR stands for (AN)other (T)ool for (L)anguage (R)ecognition and was +originally known as PCCTS. ANTLR is a language tool that provides a +framework for constructing recognizers, compilers, and translators +from grammatical descriptions containing actions. Target language list: + +http://www.antlr.org/wiki/display/ANTLR3/Code+Generation+Targets + +---------------------------------------------------------------------- + +How is ANTLR v3 different than ANTLR v2? + +See "What is the difference between ANTLR v2 and v3?" + + http://www.antlr.org/wiki/pages/viewpage.action?pageId=719 + +See migration guide: + + http://www.antlr.org/wiki/display/ANTLR3/Migrating+from+ANTLR+2+to+ANTLR+3 + +---------------------------------------------------------------------- + +How do I install this damn thing? + +Just untar and you'll get: + +antlr-3.1.3/README.txt (this file) +antlr-3.1.3/LICENSE.txt +antlr-3.1.3/src/main/java/org/antlr/... +antlr-3.1.3/lib/stringtemplate-3.2.jar +antlr-3.1.3/lib/antlr-2.7.7.jar (ANTLR v3 currently written in v2) +antlr-3.1.3/lib/antlr-3.1.3.jar (all jars combined, runtime and tools) +antlr-3.1.3/lib/antlr-runtime-3.1.3.jar (only what is needed to use ANTLR parsers) + +Then you need to add all the jars in lib to your CLASSPATH. + +Please see the FAQ + + http://www.antlr.org/wiki/display/ANTLR3/ANTLR+v3+FAQ diff --git a/antlr-3.1.3/tool/antlr.config b/antlr-3.1.3/tool/antlr.config new file mode 100644 index 0000000..e69de29 diff --git a/antlr-3.1.3/tool/pom.xml b/antlr-3.1.3/tool/pom.xml new file mode 100644 index 0000000..b5d5212 --- /dev/null +++ b/antlr-3.1.3/tool/pom.xml @@ -0,0 +1,106 @@ + + + 4.0.0 + org.antlr + antlr + jar + ANTLR Grammar Tool + http://antlr.org + + + + + org.antlr + antlr-master + 3.1.3 + + + + org.antlr + antlr-runtime + ${project.version} + compile + + + + junit + junit + 4.5 + test + + + + + + + + + install + + + + + + org.antlr + antlr3-maven-plugin + 3.1.2 + + target/generated-sources/antlr/org/antlr/grammar/v3 + + + + + + antlr + + + + + + + + org.codehaus.mojo + antlr-maven-plugin + + src/main/antlr2/org/antlr/grammar/v2 + antlr.g codegen.g, antlr.print.g, assign.types.g, buildnfa.g, define.g + + + + + generate + + + + + + + maven-compiler-plugin + + 1.5 + 1.5 + src + + + + + + + + diff --git a/antlr-3.1.3/tool/src/main/antlr/org/antlr/grammar/v3/ANTLRv3.g b/antlr-3.1.3/tool/src/main/antlr/org/antlr/grammar/v3/ANTLRv3.g new file mode 100644 index 0000000..b3dc152 --- /dev/null +++ b/antlr-3.1.3/tool/src/main/antlr/org/antlr/grammar/v3/ANTLRv3.g @@ -0,0 +1,625 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2007 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** ANTLR v3 grammar written in ANTLR v3 with AST construction */ +grammar ANTLRv3; + +options { + output=AST; + ASTLabelType=CommonTree; +} + +tokens { + DOC_COMMENT; + PARSER; + LEXER; + RULE; + BLOCK; + OPTIONAL; + CLOSURE; + POSITIVE_CLOSURE; + SYNPRED; + RANGE; + CHAR_RANGE; + EPSILON; + ALT; + EOR; + EOB; + EOA; // end of alt + ID; + ARG; + ARGLIST; + RET='returns'; + LEXER_GRAMMAR; + PARSER_GRAMMAR; + TREE_GRAMMAR; + COMBINED_GRAMMAR; + LABEL; // $x used in rewrite rules + TEMPLATE; + SCOPE='scope'; + SEMPRED; + GATED_SEMPRED; // {p}? => + SYN_SEMPRED; // (...) => it's a manually-specified synpred converted to sempred + BACKTRACK_SEMPRED; // auto backtracking mode syn pred converted to sempred + FRAGMENT='fragment'; + TREE_BEGIN='^('; + ROOT='^'; + BANG='!'; + RANGE='..'; + REWRITE='->'; + AT='@'; + LABEL_ASSIGN='='; + LIST_LABEL_ASSIGN='+='; +} + +@parser::header +{ + package org.antlr.grammar.v3; +} +@lexer::header +{ + package org.antlr.grammar.v3; +} + +@members { + int gtype; +} + +grammarDef + : DOC_COMMENT? + ( 'lexer' {gtype=LEXER_GRAMMAR;} // pure lexer + | 'parser' {gtype=PARSER_GRAMMAR;} // pure parser + | 'tree' {gtype=TREE_GRAMMAR;} // a tree parser + | {gtype=COMBINED_GRAMMAR;} // merged parser/lexer + ) + g='grammar' id ';' optionsSpec? tokensSpec? attrScope* action* + rule+ + EOF + -> ^( {adaptor.create(gtype,$g)} + id DOC_COMMENT? optionsSpec? tokensSpec? attrScope* action* rule+ + ) + ; + +tokensSpec + : TOKENS tokenSpec+ '}' -> ^(TOKENS tokenSpec+) + ; + +tokenSpec + : TOKEN_REF + ( '=' (lit=STRING_LITERAL|lit=CHAR_LITERAL) -> ^('=' TOKEN_REF $lit) + | -> TOKEN_REF + ) + ';' + ; + +attrScope + : 'scope' id ACTION -> ^('scope' id ACTION) + ; + +/** Match stuff like @parser::members {int i;} */ +action + : '@' (actionScopeName '::')? id ACTION -> ^('@' actionScopeName? id ACTION) + ; + +/** Sometimes the scope names will collide with keywords; allow them as + * ids for action scopes. + */ +actionScopeName + : id + | l='lexer' -> ID[$l] + | p='parser' -> ID[$p] + ; + +optionsSpec + : OPTIONS (option ';')+ '}' -> ^(OPTIONS option+) + ; + +option + : id '=' optionValue -> ^('=' id optionValue) + ; + +optionValue + : qid + | STRING_LITERAL + | CHAR_LITERAL + | INT + | s='*' -> STRING_LITERAL[$s] // used for k=* + ; + +rule +scope { + String name; +} + : DOC_COMMENT? + ( modifier=('protected'|'public'|'private'|'fragment') )? + id {$rule::name = $id.text;} + '!'? + ( arg=ARG_ACTION )? + ( 'returns' rt=ARG_ACTION )? + throwsSpec? optionsSpec? ruleScopeSpec? ruleAction* + ':' altList ';' + exceptionGroup? + -> ^( RULE id {modifier!=null?adaptor.create(modifier):null} ^(ARG[$arg] $arg)? ^('returns' $rt)? + throwsSpec? optionsSpec? ruleScopeSpec? ruleAction* + altList + exceptionGroup? + EOR["EOR"] + ) + ; + +/** Match stuff like @init {int i;} */ +ruleAction + : '@' id ACTION -> ^('@' id ACTION) + ; + +throwsSpec + : 'throws' id ( ',' id )* -> ^('throws' id+) + ; + +ruleScopeSpec + : 'scope' ACTION -> ^('scope' ACTION) + | 'scope' id (',' id)* ';' -> ^('scope' id+) + | 'scope' ACTION + 'scope' id (',' id)* ';' + -> ^('scope' ACTION id+ ) + ; + +block + : lp='(' + ( (opts=optionsSpec)? ':' )? + altpair ( '|' altpair )* + rp=')' + -> ^( BLOCK[$lp,"BLOCK"] optionsSpec? altpair+ EOB[$rp,"EOB"] ) + ; + +altpair : alternative rewrite ; + +altList +@init { + // must create root manually as it's used by invoked rules in real antlr tool. + // leave here to demonstrate use of {...} in rewrite rule + // it's really BLOCK[firstToken,"BLOCK"]; set line/col to previous ( or : token. + CommonTree blkRoot = (CommonTree)adaptor.create(BLOCK,input.LT(-1),"BLOCK"); +} + : altpair ( '|' altpair )* -> ^( {blkRoot} altpair+ EOB["EOB"] ) + ; + +alternative +@init { + Token firstToken = input.LT(1); + Token prevToken = input.LT(-1); // either : or | I think +} + : element+ -> ^(ALT[firstToken,"ALT"] element+ EOA["EOA"]) + | -> ^(ALT[prevToken,"ALT"] EPSILON[prevToken,"EPSILON"] EOA["EOA"]) + ; + +exceptionGroup + : ( exceptionHandler )+ ( finallyClause )? + | finallyClause + ; + +exceptionHandler + : 'catch' ARG_ACTION ACTION -> ^('catch' ARG_ACTION ACTION) + ; + +finallyClause + : 'finally' ACTION -> ^('finally' ACTION) + ; + +element + : id (labelOp='='|labelOp='+=') atom + ( ebnfSuffix -> ^( ebnfSuffix ^(BLOCK["BLOCK"] ^(ALT["ALT"] ^($labelOp id atom) EOA["EOA"]) EOB["EOB"])) + | -> ^($labelOp id atom) + ) + | id (labelOp='='|labelOp='+=') block + ( ebnfSuffix -> ^( ebnfSuffix ^(BLOCK["BLOCK"] ^(ALT["ALT"] ^($labelOp id block) EOA["EOA"]) EOB["EOB"])) + | -> ^($labelOp id block) + ) + | atom + ( ebnfSuffix -> ^( ebnfSuffix ^(BLOCK["BLOCK"] ^(ALT["ALT"] atom EOA["EOA"]) EOB["EOB"]) ) + | -> atom + ) + | ebnf + | ACTION + | SEMPRED ( g='=>' -> GATED_SEMPRED[$g] | -> SEMPRED ) + | treeSpec + ( ebnfSuffix -> ^( ebnfSuffix ^(BLOCK["BLOCK"] ^(ALT["ALT"] treeSpec EOA["EOA"]) EOB["EOB"]) ) + | -> treeSpec + ) + ; + +atom: terminal + | range + ( (op='^'|op='!') -> ^($op range) + | -> range + ) + | notSet + ( (op='^'|op='!') -> ^($op notSet) + | -> notSet + ) + | RULE_REF ARG_ACTION? + ( (op='^'|op='!') -> ^($op RULE_REF ARG_ACTION?) + | -> ^(RULE_REF ARG_ACTION?) + ) + ; + +notSet + : '~' + ( notTerminal elementOptions? -> ^('~' notTerminal elementOptions?) + | block elementOptions? -> ^('~' block elementOptions?) + ) + ; + +notTerminal + : CHAR_LITERAL + | TOKEN_REF + | STRING_LITERAL + ; + +elementOptions + : '<' qid '>' -> ^(OPTIONS qid) + | '<' option (';' option)* '>' -> ^(OPTIONS option+) + ; + +elementOption + : id '=' optionValue -> ^('=' id optionValue) + ; + +treeSpec + : '^(' element ( element )+ ')' -> ^(TREE_BEGIN element+) + ; + +range! + : c1=CHAR_LITERAL RANGE c2=CHAR_LITERAL elementOptions? + -> ^(CHAR_RANGE[$c1,".."] $c1 $c2 elementOptions?) + ; + +terminal + : ( CHAR_LITERAL elementOptions? -> ^(CHAR_LITERAL elementOptions?) + // Args are only valid for lexer rules + | TOKEN_REF ARG_ACTION? elementOptions? -> ^(TOKEN_REF ARG_ACTION? elementOptions?) + | STRING_LITERAL elementOptions? -> ^(STRING_LITERAL elementOptions?) + | '.' elementOptions? -> ^('.' elementOptions?) + ) + ( '^' -> ^('^' $terminal) + | '!' -> ^('!' $terminal) + )? + ; + +/** Matches ENBF blocks (and token sets via block rule) */ +ebnf +@init { + Token firstToken = input.LT(1); +} +@after { + $ebnf.tree.getToken().setLine(firstToken.getLine()); + $ebnf.tree.getToken().setCharPositionInLine(firstToken.getCharPositionInLine()); +} + : block + ( op='?' -> ^(OPTIONAL[op] block) + | op='*' -> ^(CLOSURE[op] block) + | op='+' -> ^(POSITIVE_CLOSURE[op] block) + | '=>' // syntactic predicate + -> {gtype==COMBINED_GRAMMAR && + Character.isUpperCase($rule::name.charAt(0))}? + // if lexer rule in combined, leave as pred for lexer + ^(SYNPRED["=>"] block) + // in real antlr tool, text for SYN_SEMPRED is predname + -> SYN_SEMPRED + | -> block + ) + ; + +ebnfSuffix +@init { + Token op = input.LT(1); +} + : '?' -> OPTIONAL[op] + | '*' -> CLOSURE[op] + | '+' -> POSITIVE_CLOSURE[op] + ; + + + +// R E W R I T E S Y N T A X + +rewrite +@init { + Token firstToken = input.LT(1); +} + : (rew+='->' preds+=SEMPRED predicated+=rewrite_alternative)* + rew2='->' last=rewrite_alternative + -> ^($rew $preds $predicated)* ^($rew2 $last) + | + ; + +rewrite_alternative +options {backtrack=true;} + : rewrite_template + | rewrite_tree_alternative + | /* empty rewrite */ -> ^(ALT["ALT"] EPSILON["EPSILON"] EOA["EOA"]) + ; + +rewrite_tree_block + : lp='(' rewrite_tree_alternative ')' + -> ^(BLOCK[$lp,"BLOCK"] rewrite_tree_alternative EOB[$lp,"EOB"]) + ; + +rewrite_tree_alternative + : rewrite_tree_element+ -> ^(ALT["ALT"] rewrite_tree_element+ EOA["EOA"]) + ; + +rewrite_tree_element + : rewrite_tree_atom + | rewrite_tree_atom ebnfSuffix + -> ^( ebnfSuffix ^(BLOCK["BLOCK"] ^(ALT["ALT"] rewrite_tree_atom EOA["EOA"]) EOB["EOB"])) + | rewrite_tree + ( ebnfSuffix + -> ^(ebnfSuffix ^(BLOCK["BLOCK"] ^(ALT["ALT"] rewrite_tree EOA["EOA"]) EOB["EOB"])) + | -> rewrite_tree + ) + | rewrite_tree_ebnf + ; + +rewrite_tree_atom + : CHAR_LITERAL + | TOKEN_REF ARG_ACTION? -> ^(TOKEN_REF ARG_ACTION?) // for imaginary nodes + | RULE_REF + | STRING_LITERAL + | d='$' id -> LABEL[$d,$id.text] // reference to a label in a rewrite rule + | ACTION + ; + +rewrite_tree_ebnf +@init { + Token firstToken = input.LT(1); +} +@after { + $rewrite_tree_ebnf.tree.getToken().setLine(firstToken.getLine()); + $rewrite_tree_ebnf.tree.getToken().setCharPositionInLine(firstToken.getCharPositionInLine()); +} + : rewrite_tree_block ebnfSuffix -> ^(ebnfSuffix rewrite_tree_block) + ; + +rewrite_tree + : '^(' rewrite_tree_atom rewrite_tree_element* ')' + -> ^(TREE_BEGIN rewrite_tree_atom rewrite_tree_element* ) + ; + +/** Build a tree for a template rewrite: + ^(TEMPLATE (ID|ACTION) ^(ARGLIST ^(ARG ID ACTION) ...) ) + where ARGLIST is always there even if no args exist. + ID can be "template" keyword. If first child is ACTION then it's + an indirect template ref + + -> foo(a={...}, b={...}) + -> ({string-e})(a={...}, b={...}) // e evaluates to template name + -> {%{$ID.text}} // create literal template from string (done in ActionTranslator) + -> {st-expr} // st-expr evaluates to ST + */ +rewrite_template + : // -> template(a={...},...) "..." inline template + id lp='(' rewrite_template_args ')' + ( str=DOUBLE_QUOTE_STRING_LITERAL | str=DOUBLE_ANGLE_STRING_LITERAL ) + -> ^(TEMPLATE[$lp,"TEMPLATE"] id rewrite_template_args $str) + + | // -> foo(a={...}, ...) + rewrite_template_ref + + | // -> ({expr})(a={...}, ...) + rewrite_indirect_template_head + + | // -> {...} + ACTION + ; + +/** -> foo(a={...}, ...) */ +rewrite_template_ref + : id lp='(' rewrite_template_args ')' + -> ^(TEMPLATE[$lp,"TEMPLATE"] id rewrite_template_args) + ; + +/** -> ({expr})(a={...}, ...) */ +rewrite_indirect_template_head + : lp='(' ACTION ')' '(' rewrite_template_args ')' + -> ^(TEMPLATE[$lp,"TEMPLATE"] ACTION rewrite_template_args) + ; + +rewrite_template_args + : rewrite_template_arg (',' rewrite_template_arg)* + -> ^(ARGLIST rewrite_template_arg+) + | -> ARGLIST + ; + +rewrite_template_arg + : id '=' ACTION -> ^(ARG[$id.start] id ACTION) + ; + +qid : id ('.' id)* ; + +id : TOKEN_REF -> ID[$TOKEN_REF] + | RULE_REF -> ID[$RULE_REF] + ; + +// L E X I C A L R U L E S + +SL_COMMENT + : '//' + ( ' $ANTLR ' SRC // src directive + | ~('\r'|'\n')* + ) + '\r'? '\n' + {$channel=HIDDEN;} + ; + +ML_COMMENT + : '/*' {if (input.LA(1)=='*') $type=DOC_COMMENT; else $channel=HIDDEN;} .* '*/' + ; + +CHAR_LITERAL + : '\'' LITERAL_CHAR '\'' + ; + +STRING_LITERAL + : '\'' LITERAL_CHAR LITERAL_CHAR* '\'' + ; + +fragment +LITERAL_CHAR + : ESC + | ~('\''|'\\') + ; + +DOUBLE_QUOTE_STRING_LITERAL + : '"' (ESC | ~('\\'|'"'))* '"' + ; + +DOUBLE_ANGLE_STRING_LITERAL + : '<<' .* '>>' + ; + +fragment +ESC : '\\' + ( 'n' + | 'r' + | 't' + | 'b' + | 'f' + | '"' + | '\'' + | '\\' + | '>' + | 'u' XDIGIT XDIGIT XDIGIT XDIGIT + | . // unknown, leave as it is + ) + ; + +fragment +XDIGIT : + '0' .. '9' + | 'a' .. 'f' + | 'A' .. 'F' + ; + +INT : '0'..'9'+ + ; + +ARG_ACTION + : NESTED_ARG_ACTION + ; + +fragment +NESTED_ARG_ACTION : + '[' + ( options {greedy=false; k=1;} + : NESTED_ARG_ACTION + | ACTION_STRING_LITERAL + | ACTION_CHAR_LITERAL + | . + )* + ']' + //{setText(getText().substring(1, getText().length()-1));} + ; + +ACTION + : NESTED_ACTION ( '?' {$type = SEMPRED;} )? + ; + +fragment +NESTED_ACTION : + '{' + ( options {greedy=false; k=2;} + : NESTED_ACTION + | SL_COMMENT + | ML_COMMENT + | ACTION_STRING_LITERAL + | ACTION_CHAR_LITERAL + | . + )* + '}' + ; + +fragment +ACTION_CHAR_LITERAL + : '\'' (ACTION_ESC|~('\\'|'\'')) '\'' + ; + +fragment +ACTION_STRING_LITERAL + : '"' (ACTION_ESC|~('\\'|'"'))* '"' + ; + +fragment +ACTION_ESC + : '\\\'' + | '\\' '"' // ANTLR doesn't like: '\\"' + | '\\' ~('\''|'"') + ; + +TOKEN_REF + : 'A'..'Z' ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* + ; + +RULE_REF + : 'a'..'z' ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* + ; + +/** Match the start of an options section. Don't allow normal + * action processing on the {...} as it's not a action. + */ +OPTIONS + : 'options' WS_LOOP '{' + ; + +TOKENS + : 'tokens' WS_LOOP '{' + ; + +/** Reset the file and line information; useful when the grammar + * has been generated so that errors are shown relative to the + * original file like the old C preprocessor used to do. + */ +fragment +SRC : 'src' ' ' file=ACTION_STRING_LITERAL ' ' line=INT + ; + +WS : ( ' ' + | '\t' + | '\r'? '\n' + )+ + {$channel=HIDDEN;} + ; + +fragment +WS_LOOP + : ( WS + | SL_COMMENT + | ML_COMMENT + )* + ; + diff --git a/antlr-3.1.3/tool/src/main/antlr/org/antlr/grammar/v3/ANTLRv3Tree.g b/antlr-3.1.3/tool/src/main/antlr/org/antlr/grammar/v3/ANTLRv3Tree.g new file mode 100644 index 0000000..62da566 --- /dev/null +++ b/antlr-3.1.3/tool/src/main/antlr/org/antlr/grammar/v3/ANTLRv3Tree.g @@ -0,0 +1,261 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2007 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** ANTLR v3 tree grammar to walk trees created by ANTLRv3.g */ +tree grammar ANTLRv3Tree; + +options { + tokenVocab = ANTLRv3; + ASTLabelType = CommonTree; +} + +@header { +package org.antlr.grammar.v3; +} + +grammarDef + : ^( grammarType ID DOC_COMMENT? optionsSpec? tokensSpec? attrScope* action* rule+ ) + ; + +grammarType + : LEXER_GRAMMAR + | PARSER_GRAMMAR + | TREE_GRAMMAR + | COMBINED_GRAMMAR + ; + +tokensSpec + : ^(TOKENS tokenSpec+) + ; + +tokenSpec + : ^('=' TOKEN_REF STRING_LITERAL) + | ^('=' TOKEN_REF CHAR_LITERAL) + | TOKEN_REF + ; + +attrScope + : ^('scope' ID ACTION) + ; + +action + : ^('@' ID ID ACTION) + | ^('@' ID ACTION) + ; + +optionsSpec + : ^(OPTIONS option+) + ; + +option + : qid // only allowed in element options + | ^('=' ID optionValue) + ; + +optionValue + : ID + | STRING_LITERAL + | CHAR_LITERAL + | INT + ; + +rule + : ^( RULE ID modifier? (^(ARG ARG_ACTION))? (^(RET ARG_ACTION))? + throwsSpec? optionsSpec? ruleScopeSpec? ruleAction* + altList + exceptionGroup? EOR + ) + ; + +modifier + : 'protected'|'public'|'private'|'fragment' + ; + +/** Match stuff like @init {int i;} */ +ruleAction + : ^('@' ID ACTION) + ; + +throwsSpec + : ^('throws' ID+) + ; + +ruleScopeSpec + : ^('scope' ACTION) + | ^('scope' ACTION ID+) + | ^('scope' ID+) + ; + +block + : ^( BLOCK optionsSpec? (alternative rewrite)+ EOB ) + ; + +altList + : ^( BLOCK (alternative rewrite)+ EOB ) + ; + +alternative + : ^(ALT element+ EOA) + | ^(ALT EPSILON EOA) + ; + +exceptionGroup + : exceptionHandler+ finallyClause? + | finallyClause + ; + +exceptionHandler + : ^('catch' ARG_ACTION ACTION) + ; + +finallyClause + : ^('finally' ACTION) + ; + +element + : ^(('='|'+=') ID block) + | ^(('='|'+=') ID atom) + | atom + | ebnf + | ACTION + | SEMPRED + | GATED_SEMPRED + | ^(TREE_BEGIN element+) + ; + +atom: ^(('^'|'!') atom) + | ^(CHAR_RANGE CHAR_LITERAL CHAR_LITERAL optionsSpec?) + | ^('~' notTerminal optionsSpec?) + | ^('~' block optionsSpec?) + | ^(RULE_REF ARG_ACTION) + | RULE_REF + | CHAR_LITERAL + | ^(CHAR_LITERAL optionsSpec) + | TOKEN_REF + | ^(TOKEN_REF optionsSpec) + | ^(TOKEN_REF ARG_ACTION optionsSpec) + | ^(TOKEN_REF ARG_ACTION) + | STRING_LITERAL + | ^(STRING_LITERAL optionsSpec) + | '.' + | ^('.' optionsSpec?) + ; + +/** Matches ENBF blocks (and token sets via block rule) */ +ebnf + : ^(SYNPRED block) + | ^(OPTIONAL block) + | ^(CLOSURE block) + | ^(POSITIVE_CLOSURE block) + | SYN_SEMPRED + | block + ; + +notTerminal + : CHAR_LITERAL + | TOKEN_REF + | STRING_LITERAL + ; + +// R E W R I T E S Y N T A X + +rewrite + : (^('->' SEMPRED rewrite_alternative))* ^('->' rewrite_alternative) + | + ; + +rewrite_alternative + : rewrite_template + | rewrite_tree_alternative + | ^(ALT EPSILON EOA) + ; + +rewrite_tree_block + : ^(BLOCK rewrite_tree_alternative EOB) + ; + +rewrite_tree_alternative + : ^(ALT rewrite_tree_element+ EOA) + ; + +rewrite_tree_element + : rewrite_tree_atom + | rewrite_tree + | rewrite_tree_block + | rewrite_tree_ebnf + ; + +rewrite_tree_atom + : CHAR_LITERAL + | TOKEN_REF + | ^(TOKEN_REF ARG_ACTION) // for imaginary nodes + | RULE_REF + | STRING_LITERAL + | LABEL + | ACTION + ; + +rewrite_tree_ebnf + : ^(OPTIONAL rewrite_tree_block) + | ^(CLOSURE rewrite_tree_block) + | ^(POSITIVE_CLOSURE rewrite_tree_block) + ; + +rewrite_tree + : ^(TREE_BEGIN rewrite_tree_atom rewrite_tree_element* ) + ; + +rewrite_template + : ^( TEMPLATE ID rewrite_template_args + (DOUBLE_QUOTE_STRING_LITERAL | DOUBLE_ANGLE_STRING_LITERAL) + ) + | rewrite_template_ref + | rewrite_indirect_template_head + | ACTION + ; + +/** foo(a={...}, ...) */ +rewrite_template_ref + : ^(TEMPLATE ID rewrite_template_args) + ; + +/** ({expr})(a={...}, ...) */ +rewrite_indirect_template_head + : ^(TEMPLATE ACTION rewrite_template_args) + ; + +rewrite_template_args + : ^(ARGLIST rewrite_template_arg+) + | ARGLIST + ; + +rewrite_template_arg + : ^(ARG ID ACTION) + ; + +qid : ID ('.' ID)* ; diff --git a/antlr-3.1.3/tool/src/main/antlr/org/antlr/grammar/v3/ActionAnalysis.g b/antlr-3.1.3/tool/src/main/antlr/org/antlr/grammar/v3/ActionAnalysis.g new file mode 100644 index 0000000..f69d7b9 --- /dev/null +++ b/antlr-3.1.3/tool/src/main/antlr/org/antlr/grammar/v3/ActionAnalysis.g @@ -0,0 +1,133 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** We need to set Rule.referencedPredefinedRuleAttributes before + * code generation. This filter looks at an action in context of + * its rule and outer alternative number and figures out which + * rules have predefined prefs referenced. I need this so I can + * remove unusued labels. This also tracks, for labeled rules, + * which are referenced by actions. + */ +lexer grammar ActionAnalysis; +options { + filter=true; // try all non-fragment rules in order specified +} + +@header { +package org.antlr.grammar.v3; +import org.antlr.runtime.*; +import org.antlr.tool.*; +} + +@members { +Rule enclosingRule; +Grammar grammar; +antlr.Token actionToken; +int outerAltNum = 0; + + public ActionAnalysis(Grammar grammar, String ruleName, GrammarAST actionAST) + { + this(new ANTLRStringStream(actionAST.token.getText())); + this.grammar = grammar; + this.enclosingRule = grammar.getLocallyDefinedRule(ruleName); + this.actionToken = actionAST.token; + this.outerAltNum = actionAST.outerAltNum; + } + +public void analyze() { + // System.out.println("###\naction="+actionToken); + Token t; + do { + t = nextToken(); + } while ( t.getType()!= Token.EOF ); +} +} + +/** $x.y x is enclosing rule or rule ref or rule label + * y is a return value, parameter, or predefined property. + */ +X_Y : '$' x=ID '.' y=ID {enclosingRule!=null}? + { + AttributeScope scope = null; + String refdRuleName = null; + if ( $x.text.equals(enclosingRule.name) ) { + // ref to enclosing rule. + refdRuleName = $x.text; + scope = enclosingRule.getLocalAttributeScope($y.text); + } + else if ( enclosingRule.getRuleLabel($x.text)!=null ) { + // ref to rule label + Grammar.LabelElementPair pair = enclosingRule.getRuleLabel($x.text); + pair.actionReferencesLabel = true; + refdRuleName = pair.referencedRuleName; + Rule refdRule = grammar.getRule(refdRuleName); + if ( refdRule!=null ) { + scope = refdRule.getLocalAttributeScope($y.text); + } + } + else if ( enclosingRule.getRuleRefsInAlt(x.getText(), outerAltNum)!=null ) { + // ref to rule referenced in this alt + refdRuleName = $x.text; + Rule refdRule = grammar.getRule(refdRuleName); + if ( refdRule!=null ) { + scope = refdRule.getLocalAttributeScope($y.text); + } + } + if ( scope!=null && + (scope.isPredefinedRuleScope||scope.isPredefinedLexerRuleScope) ) + { + grammar.referenceRuleLabelPredefinedAttribute(refdRuleName); + //System.out.println("referenceRuleLabelPredefinedAttribute for "+refdRuleName); + } + } + ; + +/** $x x is an isolated rule label. Just record that the label was referenced */ +X : '$' x=ID {enclosingRule!=null && enclosingRule.getRuleLabel($x.text)!=null}? + { + Grammar.LabelElementPair pair = enclosingRule.getRuleLabel($x.text); + pair.actionReferencesLabel = true; + } + ; + +/** $y y is a return value, parameter, or predefined property of current rule */ +Y : '$' ID {enclosingRule!=null && enclosingRule.getLocalAttributeScope($ID.text)!=null}? + { + AttributeScope scope = enclosingRule.getLocalAttributeScope($ID.text); + if ( scope!=null && + (scope.isPredefinedRuleScope||scope.isPredefinedLexerRuleScope) ) + { + grammar.referenceRuleLabelPredefinedAttribute(enclosingRule.name); + //System.out.println("referenceRuleLabelPredefinedAttribute for "+$ID.text); + } + } + ; + +fragment +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* + ; diff --git a/antlr-3.1.3/tool/src/main/antlr/org/antlr/grammar/v3/ActionTranslator.g b/antlr-3.1.3/tool/src/main/antlr/org/antlr/grammar/v3/ActionTranslator.g new file mode 100644 index 0000000..5f51cce --- /dev/null +++ b/antlr-3.1.3/tool/src/main/antlr/org/antlr/grammar/v3/ActionTranslator.g @@ -0,0 +1,809 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +lexer grammar ActionTranslator; +options { + filter=true; // try all non-fragment rules in order specified + // output=template; TODO: can we make tokens return templates somehow? +} + +@header { +package org.antlr.grammar.v3; +import org.antlr.stringtemplate.StringTemplate; +import org.antlr.runtime.*; +import org.antlr.tool.*; +import org.antlr.codegen.*; + +import org.antlr.runtime.*; +import java.util.List; +import java.util.ArrayList; +import org.antlr.grammar.v2.ANTLRParser; + +} + +@members { +public List chunks = new ArrayList(); +Rule enclosingRule; +int outerAltNum; +Grammar grammar; +CodeGenerator generator; +antlr.Token actionToken; + + public ActionTranslator(CodeGenerator generator, + String ruleName, + GrammarAST actionAST) + { + this(new ANTLRStringStream(actionAST.token.getText())); + this.generator = generator; + this.grammar = generator.grammar; + this.enclosingRule = grammar.getLocallyDefinedRule(ruleName); + this.actionToken = actionAST.token; + this.outerAltNum = actionAST.outerAltNum; + } + + public ActionTranslator(CodeGenerator generator, + String ruleName, + antlr.Token actionToken, + int outerAltNum) + { + this(new ANTLRStringStream(actionToken.getText())); + this.generator = generator; + grammar = generator.grammar; + this.enclosingRule = grammar.getRule(ruleName); + this.actionToken = actionToken; + this.outerAltNum = outerAltNum; + } + +/** Return a list of strings and StringTemplate objects that + * represent the translated action. + */ +public List translateToChunks() { + // System.out.println("###\naction="+action); + Token t; + do { + t = nextToken(); + } while ( t.getType()!= Token.EOF ); + return chunks; +} + +public String translate() { + List theChunks = translateToChunks(); + //System.out.println("chunks="+a.chunks); + StringBuffer buf = new StringBuffer(); + for (int i = 0; i < theChunks.size(); i++) { + Object o = (Object) theChunks.get(i); + buf.append(o); + } + //System.out.println("translated: "+buf.toString()); + return buf.toString(); +} + +public List translateAction(String action) { + String rname = null; + if ( enclosingRule!=null ) { + rname = enclosingRule.name; + } + ActionTranslator translator = + new ActionTranslator(generator, + rname, + new antlr.CommonToken(ANTLRParser.ACTION,action),outerAltNum); + return translator.translateToChunks(); +} + +public boolean isTokenRefInAlt(String id) { + return enclosingRule.getTokenRefsInAlt(id, outerAltNum)!=null; +} +public boolean isRuleRefInAlt(String id) { + return enclosingRule.getRuleRefsInAlt(id, outerAltNum)!=null; +} +public Grammar.LabelElementPair getElementLabel(String id) { + return enclosingRule.getLabel(id); +} + +public void checkElementRefUniqueness(String ref, boolean isToken) { + List refs = null; + if ( isToken ) { + refs = enclosingRule.getTokenRefsInAlt(ref, outerAltNum); + } + else { + refs = enclosingRule.getRuleRefsInAlt(ref, outerAltNum); + } + if ( refs!=null && refs.size()>1 ) { + ErrorManager.grammarError(ErrorManager.MSG_NONUNIQUE_REF, + grammar, + actionToken, + ref); + } +} + +/** For \$rulelabel.name, return the Attribute found for name. It + * will be a predefined property or a return value. + */ +public Attribute getRuleLabelAttribute(String ruleName, String attrName) { + Rule r = grammar.getRule(ruleName); + AttributeScope scope = r.getLocalAttributeScope(attrName); + if ( scope!=null && !scope.isParameterScope ) { + return scope.getAttribute(attrName); + } + return null; +} + +AttributeScope resolveDynamicScope(String scopeName) { + if ( grammar.getGlobalScope(scopeName)!=null ) { + return grammar.getGlobalScope(scopeName); + } + Rule scopeRule = grammar.getRule(scopeName); + if ( scopeRule!=null ) { + return scopeRule.ruleScope; + } + return null; // not a valid dynamic scope +} + +protected StringTemplate template(String name) { + StringTemplate st = generator.getTemplates().getInstanceOf(name); + chunks.add(st); + return st; +} + + +} + +/** $x.y x is enclosing rule, y is a return value, parameter, or + * predefined property. + * + * r[int i] returns [int j] + * : {$r.i, $r.j, $r.start, $r.stop, $r.st, $r.tree} + * ; + */ +SET_ENCLOSING_RULE_SCOPE_ATTR + : '$' x=ID '.' y=ID WS? '=' expr=ATTR_VALUE_EXPR ';' + {enclosingRule!=null && + $x.text.equals(enclosingRule.name) && + enclosingRule.getLocalAttributeScope($y.text)!=null}? + //{System.out.println("found \$rule.attr");} + { + StringTemplate st = null; + AttributeScope scope = enclosingRule.getLocalAttributeScope($y.text); + if ( scope.isPredefinedRuleScope ) { + if ( $y.text.equals("st") || $y.text.equals("tree") ) { + st = template("ruleSetPropertyRef_"+$y.text); + grammar.referenceRuleLabelPredefinedAttribute($x.text); + st.setAttribute("scope", $x.text); + st.setAttribute("attr", $y.text); + st.setAttribute("expr", translateAction($expr.text)); + } else { + ErrorManager.grammarError(ErrorManager.MSG_WRITE_TO_READONLY_ATTR, + grammar, + actionToken, + $x.text, + $y.text); + } + } + else if ( scope.isPredefinedLexerRuleScope ) { + // this is a better message to emit than the previous one... + ErrorManager.grammarError(ErrorManager.MSG_WRITE_TO_READONLY_ATTR, + grammar, + actionToken, + $x.text, + $y.text); + } + else if ( scope.isParameterScope ) { + st = template("parameterSetAttributeRef"); + st.setAttribute("attr", scope.getAttribute($y.text)); + st.setAttribute("expr", translateAction($expr.text)); + } + else { // must be return value + st = template("returnSetAttributeRef"); + st.setAttribute("ruleDescriptor", enclosingRule); + st.setAttribute("attr", scope.getAttribute($y.text)); + st.setAttribute("expr", translateAction($expr.text)); + } + } + ; +ENCLOSING_RULE_SCOPE_ATTR + : '$' x=ID '.' y=ID {enclosingRule!=null && + $x.text.equals(enclosingRule.name) && + enclosingRule.getLocalAttributeScope($y.text)!=null}? + //{System.out.println("found \$rule.attr");} + { + if ( isRuleRefInAlt($x.text) ) { + ErrorManager.grammarError(ErrorManager.MSG_RULE_REF_AMBIG_WITH_RULE_IN_ALT, + grammar, + actionToken, + $x.text); + } + StringTemplate st = null; + AttributeScope scope = enclosingRule.getLocalAttributeScope($y.text); + if ( scope.isPredefinedRuleScope ) { + st = template("rulePropertyRef_"+$y.text); + grammar.referenceRuleLabelPredefinedAttribute($x.text); + st.setAttribute("scope", $x.text); + st.setAttribute("attr", $y.text); + } + else if ( scope.isPredefinedLexerRuleScope ) { + // perhaps not the most precise error message to use, but... + ErrorManager.grammarError(ErrorManager.MSG_RULE_HAS_NO_ARGS, + grammar, + actionToken, + $x.text); + } + else if ( scope.isParameterScope ) { + st = template("parameterAttributeRef"); + st.setAttribute("attr", scope.getAttribute($y.text)); + } + else { // must be return value + st = template("returnAttributeRef"); + st.setAttribute("ruleDescriptor", enclosingRule); + st.setAttribute("attr", scope.getAttribute($y.text)); + } + } + ; + +/** Setting $tokenlabel.attr or $tokenref.attr where attr is predefined property of a token is an error. */ +SET_TOKEN_SCOPE_ATTR + : '$' x=ID '.' y=ID WS? '=' + {enclosingRule!=null && input.LA(1)!='=' && + (enclosingRule.getTokenLabel($x.text)!=null|| + isTokenRefInAlt($x.text)) && + AttributeScope.tokenScope.getAttribute($y.text)!=null}? + //{System.out.println("found \$tokenlabel.attr or \$tokenref.attr");} + { + ErrorManager.grammarError(ErrorManager.MSG_WRITE_TO_READONLY_ATTR, + grammar, + actionToken, + $x.text, + $y.text); + } + ; + +/** $tokenlabel.attr or $tokenref.attr where attr is predefined property of a token. + * If in lexer grammar, only translate for strings and tokens (rule refs) + */ +TOKEN_SCOPE_ATTR + : '$' x=ID '.' y=ID {enclosingRule!=null && + (enclosingRule.getTokenLabel($x.text)!=null|| + isTokenRefInAlt($x.text)) && + AttributeScope.tokenScope.getAttribute($y.text)!=null && + (grammar.type!=Grammar.LEXER || + getElementLabel($x.text).elementRef.token.getType()==ANTLRParser.TOKEN_REF || + getElementLabel($x.text).elementRef.token.getType()==ANTLRParser.STRING_LITERAL)}? + // {System.out.println("found \$tokenlabel.attr or \$tokenref.attr");} + { + String label = $x.text; + if ( enclosingRule.getTokenLabel($x.text)==null ) { + // \$tokenref.attr gotta get old label or compute new one + checkElementRefUniqueness($x.text, true); + label = enclosingRule.getElementLabel($x.text, outerAltNum, generator); + if ( label==null ) { + ErrorManager.grammarError(ErrorManager.MSG_FORWARD_ELEMENT_REF, + grammar, + actionToken, + "\$"+$x.text+"."+$y.text); + label = $x.text; + } + } + StringTemplate st = template("tokenLabelPropertyRef_"+$y.text); + st.setAttribute("scope", label); + st.setAttribute("attr", AttributeScope.tokenScope.getAttribute($y.text)); + } + ; + +/** Setting $rulelabel.attr or $ruleref.attr where attr is a predefined property is an error + * This must also fail, if we try to access a local attribute's field, like $tree.scope = localObject + * That must be handled by LOCAL_ATTR below. ANTLR only concerns itself with the top-level scope + * attributes declared in scope {} or parameters, return values and the like. + */ +SET_RULE_SCOPE_ATTR +@init { +Grammar.LabelElementPair pair=null; +String refdRuleName=null; +} + : '$' x=ID '.' y=ID WS? '=' {enclosingRule!=null && input.LA(1)!='='}? + { + pair = enclosingRule.getRuleLabel($x.text); + refdRuleName = $x.text; + if ( pair!=null ) { + refdRuleName = pair.referencedRuleName; + } + } + // supercomplicated because I can't exec the above action. + // This asserts that if it's a label or a ref to a rule proceed but only if the attribute + // is valid for that rule's scope + {(enclosingRule.getRuleLabel($x.text)!=null || isRuleRefInAlt($x.text)) && + getRuleLabelAttribute(enclosingRule.getRuleLabel($x.text)!=null?enclosingRule.getRuleLabel($x.text).referencedRuleName:$x.text,$y.text)!=null}? + //{System.out.println("found set \$rulelabel.attr or \$ruleref.attr: "+$x.text+"."+$y.text);} + { + ErrorManager.grammarError(ErrorManager.MSG_WRITE_TO_READONLY_ATTR, + grammar, + actionToken, + $x.text, + $y.text); + } + ; + +/** $rulelabel.attr or $ruleref.attr where attr is a predefined property*/ +RULE_SCOPE_ATTR +@init { +Grammar.LabelElementPair pair=null; +String refdRuleName=null; +} + : '$' x=ID '.' y=ID {enclosingRule!=null}? + { + pair = enclosingRule.getRuleLabel($x.text); + refdRuleName = $x.text; + if ( pair!=null ) { + refdRuleName = pair.referencedRuleName; + } + } + // supercomplicated because I can't exec the above action. + // This asserts that if it's a label or a ref to a rule proceed but only if the attribute + // is valid for that rule's scope + {(enclosingRule.getRuleLabel($x.text)!=null || isRuleRefInAlt($x.text)) && + getRuleLabelAttribute(enclosingRule.getRuleLabel($x.text)!=null?enclosingRule.getRuleLabel($x.text).referencedRuleName:$x.text,$y.text)!=null}? + //{System.out.println("found \$rulelabel.attr or \$ruleref.attr: "+$x.text+"."+$y.text);} + { + String label = $x.text; + if ( pair==null ) { + // \$ruleref.attr gotta get old label or compute new one + checkElementRefUniqueness($x.text, false); + label = enclosingRule.getElementLabel($x.text, outerAltNum, generator); + if ( label==null ) { + ErrorManager.grammarError(ErrorManager.MSG_FORWARD_ELEMENT_REF, + grammar, + actionToken, + "\$"+$x.text+"."+$y.text); + label = $x.text; + } + } + StringTemplate st; + Rule refdRule = grammar.getRule(refdRuleName); + AttributeScope scope = refdRule.getLocalAttributeScope($y.text); + if ( scope.isPredefinedRuleScope ) { + st = template("ruleLabelPropertyRef_"+$y.text); + grammar.referenceRuleLabelPredefinedAttribute(refdRuleName); + st.setAttribute("scope", label); + st.setAttribute("attr", $y.text); + } + else if ( scope.isPredefinedLexerRuleScope ) { + st = template("lexerRuleLabelPropertyRef_"+$y.text); + grammar.referenceRuleLabelPredefinedAttribute(refdRuleName); + st.setAttribute("scope", label); + st.setAttribute("attr", $y.text); + } + else if ( scope.isParameterScope ) { + // TODO: error! + } + else { + st = template("ruleLabelRef"); + st.setAttribute("referencedRule", refdRule); + st.setAttribute("scope", label); + st.setAttribute("attr", scope.getAttribute($y.text)); + } + } + ; + + +/** $label either a token label or token/rule list label like label+=expr */ +LABEL_REF + : '$' ID {enclosingRule!=null && + getElementLabel($ID.text)!=null && + enclosingRule.getRuleLabel($ID.text)==null}? + // {System.out.println("found \$label");} + { + StringTemplate st; + Grammar.LabelElementPair pair = getElementLabel($ID.text); + if ( pair.type==Grammar.RULE_LIST_LABEL || + pair.type==Grammar.TOKEN_LIST_LABEL || + pair.type==Grammar.WILDCARD_TREE_LIST_LABEL ) + { + st = template("listLabelRef"); + } + else { + st = template("tokenLabelRef"); + } + st.setAttribute("label", $ID.text); + } + ; + +/** $tokenref in a non-lexer grammar */ +ISOLATED_TOKEN_REF + : '$' ID {grammar.type!=Grammar.LEXER && enclosingRule!=null && isTokenRefInAlt($ID.text)}? + //{System.out.println("found \$tokenref");} + { + String label = enclosingRule.getElementLabel($ID.text, outerAltNum, generator); + checkElementRefUniqueness($ID.text, true); + if ( label==null ) { + ErrorManager.grammarError(ErrorManager.MSG_FORWARD_ELEMENT_REF, + grammar, + actionToken, + $ID.text); + } + else { + StringTemplate st = template("tokenLabelRef"); + st.setAttribute("label", label); + } + } + ; + +/** $lexerruleref from within the lexer */ +ISOLATED_LEXER_RULE_REF + : '$' ID {grammar.type==Grammar.LEXER && + enclosingRule!=null && + isRuleRefInAlt($ID.text)}? + //{System.out.println("found \$lexerruleref");} + { + String label = enclosingRule.getElementLabel($ID.text, outerAltNum, generator); + checkElementRefUniqueness($ID.text, false); + if ( label==null ) { + ErrorManager.grammarError(ErrorManager.MSG_FORWARD_ELEMENT_REF, + grammar, + actionToken, + $ID.text); + } + else { + StringTemplate st = template("lexerRuleLabel"); + st.setAttribute("label", label); + } + } + ; + +/** $y return value, parameter, predefined rule property, or token/rule + * reference within enclosing rule's outermost alt. + * y must be a "local" reference; i.e., it must be referring to + * something defined within the enclosing rule. + * + * r[int i] returns [int j] + * : {$i, $j, $start, $stop, $st, $tree} + * ; + * + * TODO: this might get the dynamic scope's elements too.!!!!!!!!! + */ +SET_LOCAL_ATTR + : '$' ID WS? '=' expr=ATTR_VALUE_EXPR ';' {enclosingRule!=null + && enclosingRule.getLocalAttributeScope($ID.text)!=null + && !enclosingRule.getLocalAttributeScope($ID.text).isPredefinedLexerRuleScope}? + //{System.out.println("found set \$localattr");} + { + StringTemplate st; + AttributeScope scope = enclosingRule.getLocalAttributeScope($ID.text); + if ( scope.isPredefinedRuleScope ) { + if ($ID.text.equals("tree") || $ID.text.equals("st")) { + st = template("ruleSetPropertyRef_"+$ID.text); + grammar.referenceRuleLabelPredefinedAttribute(enclosingRule.name); + st.setAttribute("scope", enclosingRule.name); + st.setAttribute("attr", $ID.text); + st.setAttribute("expr", translateAction($expr.text)); + } else { + ErrorManager.grammarError(ErrorManager.MSG_WRITE_TO_READONLY_ATTR, + grammar, + actionToken, + $ID.text, + ""); + } + } + else if ( scope.isParameterScope ) { + st = template("parameterSetAttributeRef"); + st.setAttribute("attr", scope.getAttribute($ID.text)); + st.setAttribute("expr", translateAction($expr.text)); + } + else { + st = template("returnSetAttributeRef"); + st.setAttribute("ruleDescriptor", enclosingRule); + st.setAttribute("attr", scope.getAttribute($ID.text)); + st.setAttribute("expr", translateAction($expr.text)); + } + } + ; +LOCAL_ATTR + : '$' ID {enclosingRule!=null && enclosingRule.getLocalAttributeScope($ID.text)!=null}? + //{System.out.println("found \$localattr");} + { + StringTemplate st; + AttributeScope scope = enclosingRule.getLocalAttributeScope($ID.text); + if ( scope.isPredefinedRuleScope ) { + st = template("rulePropertyRef_"+$ID.text); + grammar.referenceRuleLabelPredefinedAttribute(enclosingRule.name); + st.setAttribute("scope", enclosingRule.name); + st.setAttribute("attr", $ID.text); + } + else if ( scope.isPredefinedLexerRuleScope ) { + st = template("lexerRulePropertyRef_"+$ID.text); + st.setAttribute("scope", enclosingRule.name); + st.setAttribute("attr", $ID.text); + } + else if ( scope.isParameterScope ) { + st = template("parameterAttributeRef"); + st.setAttribute("attr", scope.getAttribute($ID.text)); + } + else { + st = template("returnAttributeRef"); + st.setAttribute("ruleDescriptor", enclosingRule); + st.setAttribute("attr", scope.getAttribute($ID.text)); + } + } + ; + +/** $x::y the only way to access the attributes within a dynamic scope + * regardless of whether or not you are in the defining rule. + * + * scope Symbols { List names; } + * r + * scope {int i;} + * scope Symbols; + * : {$r::i=3;} s {$Symbols::names;} + * ; + * s : {$r::i; $Symbols::names;} + * ; + */ +SET_DYNAMIC_SCOPE_ATTR + : '$' x=ID '::' y=ID WS? '=' expr=ATTR_VALUE_EXPR ';' + {resolveDynamicScope($x.text)!=null && + resolveDynamicScope($x.text).getAttribute($y.text)!=null}? + //{System.out.println("found set \$scope::attr "+ $x.text + "::" + $y.text + " to " + $expr.text);} + { + AttributeScope scope = resolveDynamicScope($x.text); + if ( scope!=null ) { + StringTemplate st = template("scopeSetAttributeRef"); + st.setAttribute("scope", $x.text); + st.setAttribute("attr", scope.getAttribute($y.text)); + st.setAttribute("expr", translateAction($expr.text)); + } + else { + // error: invalid dynamic attribute + } + } + ; + +DYNAMIC_SCOPE_ATTR + : '$' x=ID '::' y=ID + {resolveDynamicScope($x.text)!=null && + resolveDynamicScope($x.text).getAttribute($y.text)!=null}? + //{System.out.println("found \$scope::attr "+ $x.text + "::" + $y.text);} + { + AttributeScope scope = resolveDynamicScope($x.text); + if ( scope!=null ) { + StringTemplate st = template("scopeAttributeRef"); + st.setAttribute("scope", $x.text); + st.setAttribute("attr", scope.getAttribute($y.text)); + } + else { + // error: invalid dynamic attribute + } + } + ; + + +ERROR_SCOPED_XY + : '$' x=ID '::' y=ID + { + chunks.add(getText()); + generator.issueInvalidScopeError($x.text,$y.text, + enclosingRule,actionToken, + outerAltNum); + } + ; + +/** To access deeper (than top of stack) scopes, use the notation: + * + * $x[-1]::y previous (just under top of stack) + * $x[-i]::y top of stack - i where the '-' MUST BE PRESENT; + * i.e., i cannot simply be negative without the '-' sign! + * $x[i]::y absolute index i (0..size-1) + * $x[0]::y is the absolute 0 indexed element (bottom of the stack) + */ +DYNAMIC_NEGATIVE_INDEXED_SCOPE_ATTR + : '$' x=ID '[' '-' expr=SCOPE_INDEX_EXPR ']' '::' y=ID + // {System.out.println("found \$scope[-...]::attr");} + { + StringTemplate st = template("scopeAttributeRef"); + st.setAttribute("scope", $x.text); + st.setAttribute("attr", resolveDynamicScope($x.text).getAttribute($y.text)); + st.setAttribute("negIndex", $expr.text); + } + ; + +DYNAMIC_ABSOLUTE_INDEXED_SCOPE_ATTR + : '$' x=ID '[' expr=SCOPE_INDEX_EXPR ']' '::' y=ID + // {System.out.println("found \$scope[...]::attr");} + { + StringTemplate st = template("scopeAttributeRef"); + st.setAttribute("scope", $x.text); + st.setAttribute("attr", resolveDynamicScope($x.text).getAttribute($y.text)); + st.setAttribute("index", $expr.text); + } + ; + +fragment +SCOPE_INDEX_EXPR + : (~']')+ + ; + +/** $r y is a rule's dynamic scope or a global shared scope. + * Isolated $rulename is not allowed unless it has a dynamic scope *and* + * there is no reference to rulename in the enclosing alternative, + * which would be ambiguous. See TestAttributes.testAmbiguousRuleRef() + */ +ISOLATED_DYNAMIC_SCOPE + : '$' ID {resolveDynamicScope($ID.text)!=null}? + // {System.out.println("found isolated \$scope where scope is a dynamic scope");} + { + StringTemplate st = template("isolatedDynamicScopeRef"); + st.setAttribute("scope", $ID.text); + } + ; + +// antlr.g then codegen.g does these first two currently. +// don't want to duplicate that code. + +/** %foo(a={},b={},...) ctor */ +TEMPLATE_INSTANCE + : '%' ID '(' ( WS? ARG (',' WS? ARG)* WS? )? ')' + // {System.out.println("found \%foo(args)");} + { + String action = getText().substring(1,getText().length()); + String ruleName = ""; + if ( enclosingRule!=null ) { + ruleName = enclosingRule.name; + } + StringTemplate st = + generator.translateTemplateConstructor(ruleName, + outerAltNum, + actionToken, + action); + if ( st!=null ) { + chunks.add(st); + } + } + ; + +/** %({name-expr})(a={},...) indirect template ctor reference */ +INDIRECT_TEMPLATE_INSTANCE + : '%' '(' ACTION ')' '(' ( WS? ARG (',' WS? ARG)* WS? )? ')' + // {System.out.println("found \%({...})(args)");} + { + String action = getText().substring(1,getText().length()); + StringTemplate st = + generator.translateTemplateConstructor(enclosingRule.name, + outerAltNum, + actionToken, + action); + chunks.add(st); + } + ; + +fragment +ARG : ID '=' ACTION + ; + +/** %{expr}.y = z; template attribute y of StringTemplate-typed expr to z */ +SET_EXPR_ATTRIBUTE + : '%' a=ACTION '.' ID WS? '=' expr=ATTR_VALUE_EXPR ';' + // {System.out.println("found \%{expr}.y = z;");} + { + StringTemplate st = template("actionSetAttribute"); + String action = $a.text; + action = action.substring(1,action.length()-1); // stuff inside {...} + st.setAttribute("st", translateAction(action)); + st.setAttribute("attrName", $ID.text); + st.setAttribute("expr", translateAction($expr.text)); + } + ; + +/* %x.y = z; set template attribute y of x (always set never get attr) + * to z [languages like python without ';' must still use the + * ';' which the code generator is free to remove during code gen] + */ +SET_ATTRIBUTE + : '%' x=ID '.' y=ID WS? '=' expr=ATTR_VALUE_EXPR ';' + // {System.out.println("found \%x.y = z;");} + { + StringTemplate st = template("actionSetAttribute"); + st.setAttribute("st", $x.text); + st.setAttribute("attrName", $y.text); + st.setAttribute("expr", translateAction($expr.text)); + } + ; + +/** Don't allow an = as first char to prevent $x == 3; kind of stuff. */ +fragment +ATTR_VALUE_EXPR + : ~'=' (~';')* + ; + +/** %{string-expr} anonymous template from string expr */ +TEMPLATE_EXPR + : '%' a=ACTION + // {System.out.println("found \%{expr}");} + { + StringTemplate st = template("actionStringConstructor"); + String action = $a.text; + action = action.substring(1,action.length()-1); // stuff inside {...} + st.setAttribute("stringExpr", translateAction(action)); + } + ; + +fragment +ACTION + : '{' (options {greedy=false;}:.)* '}' + ; + +ESC : '\\' '$' {chunks.add("\$");} + | '\\' '%' {chunks.add("\%");} + | '\\' ~('$'|'%') {chunks.add(getText());} + ; + +ERROR_XY + : '$' x=ID '.' y=ID + { + chunks.add(getText()); + generator.issueInvalidAttributeError($x.text,$y.text, + enclosingRule,actionToken, + outerAltNum); + } + ; + +ERROR_X + : '$' x=ID + { + chunks.add(getText()); + generator.issueInvalidAttributeError($x.text, + enclosingRule,actionToken, + outerAltNum); + } + ; + +UNKNOWN_SYNTAX + : '$' + { + chunks.add(getText()); + // shouldn't need an error here. Just accept \$ if it doesn't look like anything + } + | '%' (ID|'.'|'('|')'|','|'{'|'}'|'"')* + { + chunks.add(getText()); + ErrorManager.grammarError(ErrorManager.MSG_INVALID_TEMPLATE_ACTION, + grammar, + actionToken, + getText()); + } + ; + +TEXT: ~('$'|'%'|'\\')+ {chunks.add(getText());} + ; + +fragment +ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')* + ; + +fragment +INT : '0'..'9'+ + ; + +fragment +WS : (' '|'\t'|'\n'|'\r')+ + ; diff --git a/antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/antlr.g b/antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/antlr.g new file mode 100644 index 0000000..eade736 --- /dev/null +++ b/antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/antlr.g @@ -0,0 +1,1247 @@ +header { +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.grammar.v2; +import java.util.*; +import java.io.*; +import org.antlr.analysis.*; +import org.antlr.misc.*; +import org.antlr.tool.*; + +import antlr.TokenBuffer; +import antlr.TokenStreamException; +import antlr.Token; +import antlr.TokenStream; +import antlr.RecognitionException; +import antlr.NoViableAltException; +import antlr.ParserSharedInputState; +import antlr.collections.impl.BitSet; +import antlr.collections.AST; +import antlr.ASTFactory; +import antlr.ASTPair; +import antlr.TokenWithIndex; +import antlr.collections.impl.ASTArray; +} + +/** Read in an ANTLR grammar and build an AST. Try not to do + * any actions, just build the tree. + * + * The phases are: + * + * antlr.g (this file) + * assign.types.g + * define.g + * buildnfa.g + * antlr.print.g (optional) + * codegen.g + * + * Terence Parr + * University of San Francisco + * 2005 + */ +class ANTLRParser extends Parser; +options { + buildAST = true; + exportVocab=ANTLR; + ASTLabelType="GrammarAST"; + k=3; +} + +tokens { + OPTIONS="options"; + TOKENS="tokens"; + PARSER="parser"; + + LEXER; + RULE; + BLOCK; + OPTIONAL; + CLOSURE; + POSITIVE_CLOSURE; + SYNPRED; + RANGE; + CHAR_RANGE; + EPSILON; + ALT; + EOR; + EOB; + EOA; // end of alt + ID; + ARG; + ARGLIST; + RET; + LEXER_GRAMMAR; + PARSER_GRAMMAR; + TREE_GRAMMAR; + COMBINED_GRAMMAR; + INITACTION; + FORCED_ACTION; // {{...}} always exec even during syn preds + LABEL; // $x used in rewrite rules + TEMPLATE; + SCOPE="scope"; + IMPORT="import"; + GATED_SEMPRED; // {p}? => + SYN_SEMPRED; // (...) => it's a manually-specified synpred converted to sempred + BACKTRACK_SEMPRED; // auto backtracking mode syn pred converted to sempred + FRAGMENT="fragment"; + DOT; +} + +{ + protected Grammar grammar = null; + protected int gtype = 0; + + public Grammar getGrammar() { + return grammar; + } + + public void setGrammar(Grammar grammar) { + this.grammar = grammar; + } + + public int getGtype() { + return gtype; + } + + public void setGtype(int gtype) { + this.gtype = gtype; + } + + protected String currentRuleName = null; + protected GrammarAST currentBlockAST = null; + protected boolean atTreeRoot; // are we matching a tree root in tree grammar? + + protected GrammarAST setToBlockWithSet(GrammarAST b) { + GrammarAST alt = #(#[ALT,"ALT"],#b,#[EOA,""]); + prefixWithSynPred(alt); + return #(#[BLOCK,"BLOCK"], + alt, + #[EOB,""] + ); + } + + /** Create a copy of the alt and make it into a BLOCK; all actions, + * labels, tree operators, rewrites are removed. + */ + protected GrammarAST createBlockFromDupAlt(GrammarAST alt) { + GrammarAST nalt = GrammarAST.dupTreeNoActions(alt, null); + GrammarAST blk = #(#[BLOCK,"BLOCK"], + nalt, + #[EOB,""] + ); + return blk; + } + + /** Rewrite alt to have a synpred as first element; + * (xxx)=>xxx + * but only if they didn't specify one manually. + */ + protected void prefixWithSynPred(GrammarAST alt) { + // if they want backtracking and it's not a lexer rule in combined grammar + String autoBacktrack = (String)grammar.getBlockOption(currentBlockAST, "backtrack"); + if ( autoBacktrack==null ) { + autoBacktrack = (String)grammar.getOption("backtrack"); + } + if ( autoBacktrack!=null&&autoBacktrack.equals("true") && + !(gtype==COMBINED_GRAMMAR && + Character.isUpperCase(currentRuleName.charAt(0))) && + alt.getFirstChild().getType()!=SYN_SEMPRED ) + { + // duplicate alt and make a synpred block around that dup'd alt + GrammarAST synpredBlockAST = createBlockFromDupAlt(alt); + + // Create a BACKTRACK_SEMPRED node as if user had typed this in + // Effectively we replace (xxx)=>xxx with {synpredxxx}? xxx + GrammarAST synpredAST = createSynSemPredFromBlock(synpredBlockAST, + BACKTRACK_SEMPRED); + + // insert BACKTRACK_SEMPRED as first element of alt + synpredAST.getLastSibling().setNextSibling(alt.getFirstChild()); + alt.setFirstChild(synpredAST); + } + } + + protected GrammarAST createSynSemPredFromBlock(GrammarAST synpredBlockAST, + int synpredTokenType) + { + // add grammar fragment to a list so we can make fake rules for them + // later. + String predName = grammar.defineSyntacticPredicate(synpredBlockAST,currentRuleName); + // convert (alpha)=> into {synpredN}? where N is some pred count + // during code gen we convert to function call with templates + String synpredinvoke = predName; + GrammarAST p = #[synpredTokenType,synpredinvoke]; + // track how many decisions have synpreds + grammar.blocksWithSynPreds.add(currentBlockAST); + return p; + } + + public GrammarAST createSimpleRuleAST(String name, + GrammarAST block, + boolean fragment) + { + GrammarAST modifier = null; + if ( fragment ) { + modifier = #[FRAGMENT,"fragment"]; + } + GrammarAST EORAST = #[EOR,""]; + GrammarAST EOBAST = block.getLastChild(); + EORAST.setLine(EOBAST.getLine()); + EORAST.setColumn(EOBAST.getColumn()); + GrammarAST ruleAST = + #([RULE,"rule"], + [ID,name],modifier,[ARG,"ARG"],[RET,"RET"], + [SCOPE,"scope"],block,EORAST); + ruleAST.setLine(block.getLine()); + ruleAST.setColumn(block.getColumn()); + return ruleAST; + } + + public void reportError(RecognitionException ex) { + Token token = null; + try { + token = LT(1); + } + catch (TokenStreamException tse) { + ErrorManager.internalError("can't get token???", tse); + } + ErrorManager.syntaxError( + ErrorManager.MSG_SYNTAX_ERROR, + grammar, + token, + "antlr: "+ex.toString(), + ex); + } + + public void cleanup(GrammarAST root) { + if ( gtype==LEXER_GRAMMAR ) { + String filter = (String)grammar.getOption("filter"); + GrammarAST tokensRuleAST = + grammar.addArtificialMatchTokensRule( + root, + grammar.lexerRuleNamesInCombined, + grammar.getDelegateNames(), + filter!=null&&filter.equals("true")); + } + } +} + +grammar![Grammar g] +{ + this.grammar = g; + GrammarAST opt=null; + Token optionsStartToken = null; + Map opts; + // set to factory that sets enclosing rule + astFactory = new ASTFactory() { + { + setASTNodeClass(GrammarAST.class); + setASTNodeClass("org.antlr.tool.GrammarAST"); + } + public AST create(Token token) { + AST t = super.create(token); + ((GrammarAST)t).enclosingRuleName = currentRuleName; + return t; + } + public AST create(int i) { + AST t = super.create(i); + ((GrammarAST)t).enclosingRuleName = currentRuleName; + return t; + } + }; +} + : //hdr:headerSpec + ( ACTION )? + ( cmt:DOC_COMMENT )? + gr:grammarType gid:id {grammar.setName(#gid.getText());} SEMI + ( {optionsStartToken=LT(1);} + opts=optionsSpec {grammar.setOptions(opts, optionsStartToken);} + {opt=(GrammarAST)returnAST;} + )? + (ig:delegateGrammars)? + (ts:tokensSpec!)? + scopes:attrScopes + (a:actions)? + r:rules + EOF + { + #grammar = #(null, #(#gr, #gid, #cmt, opt, #ig, #ts, #scopes, #a, #r)); + cleanup(#grammar); + } + ; + +grammarType + : ( "lexer"! {gtype=LEXER_GRAMMAR; grammar.type = Grammar.LEXER;} // pure lexer + | "parser"! {gtype=PARSER_GRAMMAR; grammar.type = Grammar.PARSER;} // pure parser + | "tree"! {gtype=TREE_GRAMMAR; grammar.type = Grammar.TREE_PARSER;} // a tree parser + | {gtype=COMBINED_GRAMMAR; grammar.type = Grammar.COMBINED;} // merged parser/lexer + ) + gr:"grammar" {#gr.setType(gtype);} + ; + +actions + : (action)+ + ; + +/** Match stuff like @parser::members {int i;} */ +action + : AMPERSAND^ (actionScopeName COLON! COLON!)? id ACTION + ; + +/** Sometimes the scope names will collide with keywords; allow them as + * ids for action scopes. + */ +actionScopeName + : id + | l:"lexer" {#l.setType(ID);} + | p:"parser" {#p.setType(ID);} + ; + +optionsSpec returns [Map opts=new HashMap()] + : OPTIONS^ (option[opts] SEMI!)+ RCURLY! + ; + +option[Map opts] +{ + Object value=null; +} + : o:id ASSIGN^ value=optionValue + { + opts.put(#o.getText(), value); + } + ; + +optionValue returns [Object value=null] + : x:id {value = #x.getText();} + | s:STRING_LITERAL {String vs = #s.getText(); + value=vs.substring(1,vs.length()-1);} + | c:CHAR_LITERAL {String vs = #c.getText(); + value=vs.substring(1,vs.length()-1);} + | i:INT {value = new Integer(#i.getText());} + | ss:STAR {#ss.setType(STRING_LITERAL); value = "*";} // used for k=* +// | cs:charSet {value = #cs;} // return set AST in this case + ; + +delegateGrammars + : "import"^ delegateGrammar (COMMA! delegateGrammar)* SEMI! + ; + +delegateGrammar + : lab:id ASSIGN^ g:id {grammar.importGrammar(#g, #lab.getText());} + | g2:id {grammar.importGrammar(#g2,null);} + ; + +tokensSpec + : TOKENS^ + ( tokenSpec )+ + RCURLY! + ; + +tokenSpec + : TOKEN_REF ( ASSIGN^ (STRING_LITERAL|CHAR_LITERAL) )? SEMI! + ; + +attrScopes + : (attrScope)* + ; + +attrScope + : "scope"^ id ACTION + ; + +rules + : ( + options { + // limitation of appox LL(k) says ambig upon + // DOC_COMMENT TOKEN_REF, but that's an impossible sequence + warnWhenFollowAmbig=false; + } + : //{g.type==PARSER}? (aliasLexerRule)=>aliasLexerRule | + rule + )+ + ; + +rule! +{ +GrammarAST modifier=null, blk=null, blkRoot=null, eob=null; +int start = ((TokenWithIndex)LT(1)).getIndex(); +int startLine = LT(1).getLine(); +GrammarAST opt = null; +Map opts = null; +} + : + ( d:DOC_COMMENT + )? + ( p1:"protected" {modifier=#p1;} + | p2:"public" {modifier=#p2;} + | p3:"private" {modifier=#p3;} + | p4:"fragment" {modifier=#p4;} + )? + ruleName:id + {currentRuleName=#ruleName.getText(); + if ( gtype==LEXER_GRAMMAR && #p4==null ) { + grammar.lexerRuleNamesInCombined.add(currentRuleName); + } + } + ( BANG )? + ( aa:ARG_ACTION )? + ( "returns" rt:ARG_ACTION )? + ( throwsSpec )? + ( opts=optionsSpec {opt=(GrammarAST)returnAST;} )? + scopes:ruleScopeSpec + (a:ruleActions)? + colon:COLON + { + blkRoot = #[BLOCK,"BLOCK"]; + blkRoot.setBlockOptions(opts); + blkRoot.setLine(colon.getLine()); + blkRoot.setColumn(colon.getColumn()); + eob = #[EOB,""]; + } + b:altList[opts] {blk = #b;} + semi:SEMI + ( ex:exceptionGroup )? + { + int stop = ((TokenWithIndex)LT(1)).getIndex()-1; // point at the semi or exception thingie + eob.setLine(semi.getLine()); + eob.setColumn(semi.getColumn()); + GrammarAST eor = #[EOR,""]; + eor.setLine(semi.getLine()); + eor.setColumn(semi.getColumn()); + GrammarAST root = #[RULE,"rule"]; + root.ruleStartTokenIndex = start; + root.ruleStopTokenIndex = stop; + root.setLine(startLine); + root.setBlockOptions(opts); + #rule = #(root, + #ruleName,modifier,#(#[ARG,"ARG"],#aa),#(#[RET,"RET"],#rt), + opt,#scopes,#a,blk,ex,eor); + currentRuleName=null; + } + ; + +ruleActions + : (ruleAction)+ + ; + +/** Match stuff like @init {int i;} */ +ruleAction + : AMPERSAND^ id ACTION + ; + +throwsSpec + : "throws" id ( COMMA id )* + + ; + +ruleScopeSpec +{ +int line = LT(1).getLine(); +int column = LT(1).getColumn(); +} + :! ( options {warnWhenFollowAmbig=false;} : "scope" a:ACTION )? + ( "scope" ids:idList SEMI! )* + { + GrammarAST scopeRoot = (GrammarAST)#[SCOPE,"scope"]; + scopeRoot.setLine(line); + scopeRoot.setColumn(column); + #ruleScopeSpec = #(scopeRoot, #a, #ids); + } + ; + +/** Build #(BLOCK ( #(ALT ...) EOB )+ ) */ +block +{ +GrammarAST save = currentBlockAST; +Map opts=null; +} + : lp:LPAREN^ {#lp.setType(BLOCK); #lp.setText("BLOCK");} + ( + // 2nd alt and optional branch ambig due to + // linear approx LL(2) issue. COLON ACTION + // matched correctly in 2nd alt. + options { + warnWhenFollowAmbig = false; + } + : + (opts=optionsSpec {#block.setOptions(grammar,opts);})? + ( ruleActions )? + COLON! + | ACTION COLON! + )? + + {currentBlockAST = #lp;} + + a1:alternative rewrite + {if (LA(1)==OR||(LA(2)==QUESTION||LA(2)==PLUS||LA(2)==STAR)) prefixWithSynPred(#a1);} + ( OR! a2:alternative rewrite + {if (LA(1)==OR||(LA(2)==QUESTION||LA(2)==PLUS||LA(2)==STAR)) prefixWithSynPred(#a2);} + )* + + rp:RPAREN! + { + currentBlockAST = save; + GrammarAST eob = #[EOB,""]; + eob.setLine(rp.getLine()); + eob.setColumn(rp.getColumn()); + #block.addChild(eob); + } + ; + +altList[Map opts] +{ + GrammarAST blkRoot = #[BLOCK,"BLOCK"]; + blkRoot.setBlockOptions(opts); + blkRoot.setLine(LT(0).getLine()); // set to : or ( + blkRoot.setColumn(LT(0).getColumn()); + GrammarAST save = currentBlockAST; + currentBlockAST = #blkRoot; +} + : a1:alternative rewrite + {if (LA(1)==OR||(LA(2)==QUESTION||LA(2)==PLUS||LA(2)==STAR)) prefixWithSynPred(#a1);} + ( OR! a2:alternative rewrite + {if (LA(1)==OR||(LA(2)==QUESTION||LA(2)==PLUS||LA(2)==STAR)) prefixWithSynPred(#a2);} )* + { + #altList = #(blkRoot,#altList,#[EOB,""]); + currentBlockAST = save; + } + ; + +alternative +{ + GrammarAST eoa = #[EOA, ""]; + GrammarAST altRoot = #[ALT,"ALT"]; + altRoot.setLine(LT(1).getLine()); + altRoot.setColumn(LT(1).getColumn()); +} + : ( el:element )+ + { + if ( #alternative==null ) { + #alternative = #(altRoot,#[EPSILON,"epsilon"],eoa); + } + else { + // we have a real list of stuff + #alternative = #(altRoot, #alternative, eoa); + } + } + | { + GrammarAST eps = #[EPSILON,"epsilon"]; + eps.setLine(LT(0).getLine()); // get line/col of '|' or ':' (prev token) + eps.setColumn(LT(0).getColumn()); + #alternative = #(altRoot,eps,eoa); + } + ; + +exceptionGroup + : ( exceptionHandler )+ ( finallyClause )? + | finallyClause + ; + +exceptionHandler + : "catch"^ ARG_ACTION ACTION + ; + +finallyClause + : "finally"^ ACTION + ; + +element + : elementNoOptionSpec + ; + +elementNoOptionSpec +{ + IntSet elements=null; + GrammarAST sub, sub2; +} + : ( id (ASSIGN^|PLUS_ASSIGN^) (atom|block) + ( sub=ebnfSuffix[(GrammarAST)currentAST.root,false]! {#elementNoOptionSpec=sub;} )? + | atom + ( sub2=ebnfSuffix[(GrammarAST)currentAST.root,false]! {#elementNoOptionSpec=sub2;} )? + | ebnf + | FORCED_ACTION + | ACTION + | p:SEMPRED ( IMPLIES! {#p.setType(GATED_SEMPRED);} )? + { + grammar.blocksWithSemPreds.add(currentBlockAST); + } + | t3:tree + ) + ; + +atom + : range (ROOT^|BANG^)? + | ( options { + // TOKEN_REF WILDCARD could match terminal here then WILDCARD next + generateAmbigWarnings=false; + } + : // grammar.rule but ensure no spaces. "A . B" is not a qualified ref + // We do here rather than lexer so we can build a tree + {LT(1).getColumn()+LT(1).getText().length()==LT(2).getColumn()&& + LT(2).getColumn()+1==LT(3).getColumn()}? + id w:WILDCARD^ (terminal|ruleref) {#w.setType(DOT);} + | terminal + | ruleref + ) + | notSet (ROOT^|BANG^)? + ; + +ruleref + : rr:RULE_REF^ ( ARG_ACTION )? (ROOT^|BANG^)? + ; + +notSet +{ + int line = LT(1).getLine(); + int col = LT(1).getColumn(); + GrammarAST subrule=null; +} + : n:NOT^ + ( notTerminal + | block + ) + {#notSet.setLine(line); #notSet.setColumn(col);} + ; + +treeRoot + : {atTreeRoot=true;} + ( id (ASSIGN^|PLUS_ASSIGN^) (atom|block) + | atom + | block + ) + {atTreeRoot=false;} + ; + +tree: TREE_BEGIN^ treeRoot ( element )+ RPAREN! ; + +/** matches ENBF blocks (and sets via block rule) */ +ebnf! +{ + int line = LT(1).getLine(); + int col = LT(1).getColumn(); +} + : b:block + ( QUESTION {#ebnf=#([OPTIONAL,"?"],#b);} + | STAR {#ebnf=#([CLOSURE,"*"],#b);} + | PLUS {#ebnf=#([POSITIVE_CLOSURE,"+"],#b);} + | IMPLIES! // syntactic predicate + { + if ( gtype==COMBINED_GRAMMAR && + Character.isUpperCase(currentRuleName.charAt(0)) ) + { + // ignore for lexer rules in combined + #ebnf = #(#[SYNPRED,"=>"],#b); + } + else { + // create manually specified (...)=> predicate; + // convert to sempred + #ebnf = createSynSemPredFromBlock(#b, SYN_SEMPRED); + } + } + | ROOT {#ebnf = #(#ROOT, #b);} + | BANG {#ebnf = #(#BANG, #b);} + | {#ebnf = #b;} + ) + {#ebnf.setLine(line); #ebnf.setColumn(col);} + ; + +range! +{ +GrammarAST subrule=null, root=null; +} + : c1:CHAR_LITERAL RANGE c2:CHAR_LITERAL + { + GrammarAST r = #[CHAR_RANGE,".."]; + r.setLine(c1.getLine()); + r.setColumn(c1.getColumn()); + #range = #(r, #c1, #c2); + root = #range; + } +// (subrule=ebnfSuffix[root,false] {#range=subrule;})? + ; + +terminal +{ +GrammarAST ebnfRoot=null, subrule=null; +} + : cl:CHAR_LITERAL^ ( elementOptions[#cl]! )? (ROOT^|BANG^)? + + | tr:TOKEN_REF^ + ( elementOptions[#tr]! )? + ( ARG_ACTION )? // Args are only valid for lexer rules + (ROOT^|BANG^)? + + | sl:STRING_LITERAL^ ( elementOptions[#sl]! )? (ROOT^|BANG^)? + + | wi:WILDCARD (ROOT^|BANG^)? + { + if ( atTreeRoot ) { + ErrorManager.syntaxError( + ErrorManager.MSG_WILDCARD_AS_ROOT,grammar,wi,null,null); + } + } + ; + +elementOptions[GrammarAST terminalAST] + : OPEN_ELEMENT_OPTION^ defaultNodeOption[terminalAST] CLOSE_ELEMENT_OPTION! + | OPEN_ELEMENT_OPTION^ elementOption[terminalAST] (SEMI! elementOption[terminalAST])* CLOSE_ELEMENT_OPTION! + ; + +defaultNodeOption[GrammarAST terminalAST] +{ +StringBuffer buf = new StringBuffer(); +} + : i:id {buf.append(#i.getText());} (WILDCARD i2:id {buf.append("."+#i2.getText());})* + {terminalAST.setTerminalOption(grammar,Grammar.defaultTokenOption,buf.toString());} + ; + +elementOption[GrammarAST terminalAST] + : a:id ASSIGN^ (b:id|s:STRING_LITERAL) + { + Object v = (#b!=null)?#b.getText():#s.getText(); + terminalAST.setTerminalOption(grammar,#a.getText(),v); + } + ; + +ebnfSuffix[GrammarAST elemAST, boolean inRewrite] returns [GrammarAST subrule=null] +{ +GrammarAST ebnfRoot=null; +} + :! ( QUESTION {ebnfRoot = #[OPTIONAL,"?"];} + | STAR {ebnfRoot = #[CLOSURE,"*"];} + | PLUS {ebnfRoot = #[POSITIVE_CLOSURE,"+"];} + ) + { + GrammarAST save = currentBlockAST; + ebnfRoot.setLine(elemAST.getLine()); + ebnfRoot.setColumn(elemAST.getColumn()); + GrammarAST blkRoot = #[BLOCK,"BLOCK"]; + currentBlockAST = blkRoot; + GrammarAST eob = #[EOB,""]; + eob.setLine(elemAST.getLine()); + eob.setColumn(elemAST.getColumn()); + GrammarAST alt = #(#[ALT,"ALT"],elemAST,#[EOA,""]); + if ( !inRewrite ) { + prefixWithSynPred(alt); + } + subrule = + #(ebnfRoot, + #(blkRoot,alt,eob) + ); + currentBlockAST = save; + } + ; + +notTerminal + : cl:CHAR_LITERAL + | tr:TOKEN_REF + | STRING_LITERAL + ; + +idList + : id (COMMA! id)* + ; + +id : TOKEN_REF {#id.setType(ID);} + | RULE_REF {#id.setType(ID);} + ; + +// R E W R I T E S Y N T A X + +rewrite +{ + GrammarAST root = new GrammarAST(); +} + :! + ( options { warnWhenFollowAmbig=false;} + : rew:REWRITE pred:SEMPRED alt:rewrite_alternative + {root.addChild( #(#rew, #pred, #alt) );} + )* + rew2:REWRITE alt2:rewrite_alternative + { + root.addChild( #(#rew2, #alt2) ); + #rewrite = (GrammarAST)root.getFirstChild(); + } + | + ; + +rewrite_block + : lp:LPAREN^ {#lp.setType(BLOCK); #lp.setText("BLOCK");} + rewrite_alternative + RPAREN! + { + GrammarAST eob = #[EOB,""]; + eob.setLine(lp.getLine()); + eob.setColumn(lp.getColumn()); + #rewrite_block.addChild(eob); + } + ; + +rewrite_alternative +{ + GrammarAST eoa = #[EOA, ""]; + GrammarAST altRoot = #[ALT,"ALT"]; + altRoot.setLine(LT(1).getLine()); + altRoot.setColumn(LT(1).getColumn()); +} + : {grammar.buildTemplate()}? rewrite_template + + | {grammar.buildAST()}? ( rewrite_element )+ + { + if ( #rewrite_alternative==null ) { + #rewrite_alternative = #(altRoot,#[EPSILON,"epsilon"],eoa); + } + else { + #rewrite_alternative = #(altRoot, #rewrite_alternative,eoa); + } + } + + | {#rewrite_alternative = #(altRoot,#[EPSILON,"epsilon"],eoa);} + + | {grammar.buildAST()}? ETC + ; + +rewrite_element +{ +GrammarAST subrule=null; +} + : t:rewrite_atom + ( subrule=ebnfSuffix[#t,true] {#rewrite_element=subrule;} )? + | rewrite_ebnf + | tr:rewrite_tree + ( subrule=ebnfSuffix[#tr,true] {#rewrite_element=subrule;} )? + ; + +rewrite_atom +{ +GrammarAST subrule=null; +} + : tr:TOKEN_REF^ (elementOptions[#tr]!)? (ARG_ACTION)? // for imaginary nodes + | rr:RULE_REF + | cl:CHAR_LITERAL^ (elementOptions[#cl]!)? + | sl:STRING_LITERAL^ (elementOptions[#sl]!)? + |! d:DOLLAR i:id // reference to a label in a rewrite rule + { + #rewrite_atom = #[LABEL,i_AST.getText()]; + #rewrite_atom.setLine(#d.getLine()); + #rewrite_atom.setColumn(#d.getColumn()); + } + | ACTION + ; + +rewrite_ebnf! +{ + int line = LT(1).getLine(); + int col = LT(1).getColumn(); +} + : b:rewrite_block + ( QUESTION {#rewrite_ebnf=#([OPTIONAL,"?"],#b);} + | STAR {#rewrite_ebnf=#([CLOSURE,"*"],#b);} + | PLUS {#rewrite_ebnf=#([POSITIVE_CLOSURE,"+"],#b);} + ) + {#rewrite_ebnf.setLine(line); #rewrite_ebnf.setColumn(col);} + ; + +rewrite_tree : + TREE_BEGIN^ + rewrite_atom ( rewrite_element )* + RPAREN! + ; + +/** Build a tree for a template rewrite: + ^(TEMPLATE (ID|ACTION) ^(ARGLIST ^(ARG ID ACTION) ...) ) + where ARGLIST is always there even if no args exist. + ID can be "template" keyword. If first child is ACTION then it's + an indirect template ref + + -> foo(a={...}, b={...}) + -> ({string-e})(a={...}, b={...}) // e evaluates to template name + -> {%{$ID.text}} // create literal template from string (done in ActionTranslator) + -> {st-expr} // st-expr evaluates to ST + */ +rewrite_template +{Token st=null;} + : // -> template(a={...},...) "..." + {LT(1).getText().equals("template")}? // inline + rewrite_template_head {st=LT(1);} + ( DOUBLE_QUOTE_STRING_LITERAL! | DOUBLE_ANGLE_STRING_LITERAL! ) + {#rewrite_template.addChild(#[st]);} + + | // -> foo(a={...}, ...) + rewrite_template_head + + | // -> ({expr})(a={...}, ...) + rewrite_indirect_template_head + + | // -> {...} + ACTION + ; + +/** -> foo(a={...}, ...) */ +rewrite_template_head + : id lp:LPAREN^ {#lp.setType(TEMPLATE); #lp.setText("TEMPLATE");} + rewrite_template_args + RPAREN! + ; + +/** -> ({expr})(a={...}, ...) */ +rewrite_indirect_template_head + : lp:LPAREN^ {#lp.setType(TEMPLATE); #lp.setText("TEMPLATE");} + ACTION + RPAREN! + LPAREN! rewrite_template_args RPAREN! + ; + +rewrite_template_args + : rewrite_template_arg (COMMA! rewrite_template_arg)* + {#rewrite_template_args = #(#[ARGLIST,"ARGLIST"], rewrite_template_args);} + | {#rewrite_template_args = #[ARGLIST,"ARGLIST"];} + ; + +rewrite_template_arg + : id a:ASSIGN^ {#a.setType(ARG); #a.setText("ARG");} ACTION + ; + +class ANTLRLexer extends Lexer; +options { + k=3; + exportVocab=ANTLR; + testLiterals=false; + interactive=true; + charVocabulary='\003'..'\377'; +} + +{ + /** advance the current column number by one; don't do tabs. + * we want char position in line to be sent to AntlrWorks. + */ + public void tab() { + setColumn( getColumn()+1 ); + } + public boolean hasASTOperator = false; +} + +WS : ( ' ' + | '\t' + | ('\r')? '\n' {newline();} + ) + ; + +COMMENT : + ( SL_COMMENT | t:ML_COMMENT {$setType(t.getType());} ) + ; + +protected +SL_COMMENT + : "//" + ( (" $ANTLR")=> " $ANTLR " SRC ('\r')? '\n' // src directive + | ( options {greedy=false;} : . )* ('\r')? '\n' + ) + { newline(); } + ; + +protected +ML_COMMENT : + "/*" + ( { LA(2)!='/' }? '*' {$setType(DOC_COMMENT);} + | + ) + ( + options { + greedy=false; // make it exit upon "*/" + } + : '\r' '\n' {newline();} + | '\n' {newline();} + | ~('\n'|'\r') + )* + "*/" + ; + +OPEN_ELEMENT_OPTION + : '<' + ; + +CLOSE_ELEMENT_OPTION + : '>' + ; + +AMPERSAND : '@'; + +COMMA : ','; + +QUESTION : '?' ; + +TREE_BEGIN : "^(" ; + +LPAREN: '(' ; + +RPAREN: ')' ; + +COLON : ':' ; + +STAR: '*' ; + +PLUS: '+' ; + +ASSIGN : '=' ; + +PLUS_ASSIGN : "+=" ; + +IMPLIES : "=>" ; + +REWRITE : "->" ; + +SEMI: ';' ; + +ROOT : '^' {hasASTOperator=true;} ; + +BANG : '!' {hasASTOperator=true;} ; + +OR : '|' ; + +WILDCARD : '.' ; + +ETC : "..." ; + +RANGE : ".." ; + +NOT : '~' ; + +RCURLY: '}' ; + +DOLLAR : '$' ; + +STRAY_BRACKET + : ']' + { + ErrorManager.syntaxError( + ErrorManager.MSG_SYNTAX_ERROR, + null, + _token, + "antlr: dangling ']'? make sure to escape with \\]", + null); + } + ; + +CHAR_LITERAL + : '\'' (ESC|'\n'{newline();}|~'\'')* '\'' + { + StringBuffer s = Grammar.getUnescapedStringFromGrammarStringLiteral($getText); + if ( s.length()>1 ) { + $setType(STRING_LITERAL); + } + } + ; + +DOUBLE_QUOTE_STRING_LITERAL + : '"' ('\\'! '"'|'\\' ~'"'|'\n'{newline();}|~'"')* '"' + ; + +DOUBLE_ANGLE_STRING_LITERAL + : "<<" (options {greedy=false;}:'\n'{newline();}|.)* ">>" + ; + +protected +ESC : '\\' + ( 'n' + | 'r' + | 't' + | 'b' + | 'f' + | '"' + | '\'' + | '\\' + | '>' + | 'u' XDIGIT XDIGIT XDIGIT XDIGIT + | . // unknown, leave as it is + ) + ; + +protected +DIGIT + : '0'..'9' + ; + +protected +XDIGIT : + '0' .. '9' + | 'a' .. 'f' + | 'A' .. 'F' + ; + +INT : ('0'..'9')+ + ; + +//HETERO_TYPE : '<'! ~'<' (~'>')* '>'! ; + +ARG_ACTION + : '['! NESTED_ARG_ACTION ']'! + ; + +protected +NESTED_ARG_ACTION : + ( '\r' '\n' {newline();} + | '\n' {newline();} + | '\\'! ']' + | '\\' ~']' + | ACTION_STRING_LITERAL + | ACTION_CHAR_LITERAL + | ~']' + )* + ; + +ACTION +{int actionLine=getLine(); int actionColumn = getColumn(); } + : NESTED_ACTION + ( '?'! {_ttype = SEMPRED;} )? + { + Token t = makeToken(_ttype); + String action = $getText; + int n = 1; // num delimiter chars + if ( action.startsWith("{{") && action.endsWith("}}") ) { + t.setType(FORCED_ACTION); + n = 2; + } + action = action.substring(n,action.length()-n); + t.setText(action); + t.setLine(actionLine); // set action line to start + t.setColumn(actionColumn); + $setToken(t); + } + ; + +protected +NESTED_ACTION : + '{' + ( + options { + greedy = false; // exit upon '}' + } + : + ( + '\r' '\n' {newline();} + | '\n' {newline();} + ) + | NESTED_ACTION + | ACTION_CHAR_LITERAL + | COMMENT + | ACTION_STRING_LITERAL + | ACTION_ESC + | . + )* + '}' + ; + +protected +ACTION_CHAR_LITERAL + : '\'' (ACTION_ESC|'\n'{newline();}|~'\'')* '\'' + ; + +protected +ACTION_STRING_LITERAL + : '"' (ACTION_ESC|'\n'{newline();}|~'"')* '"' + ; + +protected +ACTION_ESC + : "\\'" + | "\\\"" + | '\\' ~('\''|'"') + ; + +TOKEN_REF +options { testLiterals = true; } + : 'A'..'Z' + ( // scarf as many letters/numbers as you can + options { + warnWhenFollowAmbig=false; + } + : + 'a'..'z'|'A'..'Z'|'_'|'0'..'9' + )* + ; + +// we get a warning here when looking for options '{', but it works right +RULE_REF +{ + int t=0; +} + : t=INTERNAL_RULE_REF {_ttype=t;} + ( {t==OPTIONS}? WS_LOOP ('{' {_ttype = OPTIONS;})? + | {t==TOKENS}? WS_LOOP ('{' {_ttype = TOKENS;})? + | + ) + ; + +protected +WS_LOOP + : ( // grab as much WS as you can + options { + greedy=true; + } + : + WS + | COMMENT + )* + ; + +protected +INTERNAL_RULE_REF returns [int t] +{ + t = RULE_REF; +} + : 'a'..'z' + ( // scarf as many letters/numbers as you can + options { + warnWhenFollowAmbig=false; + } + : + 'a'..'z'|'A'..'Z'|'_'|'0'..'9' + )* + {t = testLiteralsTable(t);} + ; + +protected +WS_OPT + : (WS)? + ; + +/** Reset the file and line information; useful when the grammar + * has been generated so that errors are shown relative to the + * original file like the old C preprocessor used to do. + */ +protected +SRC : "src" ' ' file:ACTION_STRING_LITERAL ' ' line:INT + { + newline(); + setFilename(file.getText().substring(1,file.getText().length()-1)); + setLine(Integer.parseInt(line.getText())-1); // -1 because SL_COMMENT will increment the line no. KR + $setType(Token.SKIP); // don't let this go to the parser + } + ; + diff --git a/antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/antlr.print.g b/antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/antlr.print.g new file mode 100644 index 0000000..8389ba3 --- /dev/null +++ b/antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/antlr.print.g @@ -0,0 +1,372 @@ +header { +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + package org.antlr.grammar.v2; + import java.util.*; + import org.antlr.tool.*; +} + +/** Print out a grammar (no pretty printing). + * + * Terence Parr + * University of San Francisco + * August 19, 2003 + */ +class ANTLRTreePrinter extends TreeParser; + +options { + importVocab = ANTLR; + ASTLabelType = "GrammarAST"; + codeGenBitsetTestThreshold=999; +} + +{ + + protected Grammar grammar; + protected boolean showActions; + protected StringBuffer buf = new StringBuffer(300); + + public void out(String s) { + buf.append(s); + } + + public void reportError(RecognitionException ex) { + Token token = null; + if ( ex instanceof MismatchedTokenException ) { + token = ((MismatchedTokenException)ex).token; + } + else if ( ex instanceof NoViableAltException ) { + token = ((NoViableAltException)ex).token; + } + ErrorManager.syntaxError( + ErrorManager.MSG_SYNTAX_ERROR, + grammar, + token, + "antlr.print: "+ex.toString(), + ex); + } + + /** Normalize a grammar print out by removing all double spaces + * and trailing/beginning stuff. FOr example, convert + * + * ( A | B | C )* + * + * to + * + * ( A | B | C )* + */ + public static String normalize(String g) { + StringTokenizer st = new StringTokenizer(g, " ", false); + StringBuffer buf = new StringBuffer(); + while ( st.hasMoreTokens() ) { + String w = st.nextToken(); + buf.append(w); + buf.append(" "); + } + return buf.toString().trim(); + } +} + +/** Call this to figure out how to print */ +toString[Grammar g, boolean showActions] returns [String s=null] +{ +grammar = g; +this.showActions = showActions; +} + : ( grammar + | rule + | alternative + | element + | single_rewrite + | EOR {s="EOR";} + ) + {return normalize(buf.toString());} + ; + +// -------------- + +grammar + : ( #( LEXER_GRAMMAR grammarSpec["lexer " ] ) + | #( PARSER_GRAMMAR grammarSpec["parser "] ) + | #( TREE_GRAMMAR grammarSpec["tree "] ) + | #( COMBINED_GRAMMAR grammarSpec[""] ) + ) + ; + +attrScope + : #( "scope" ID ACTION ) + ; + +grammarSpec[String gtype] + : id:ID {out(gtype+"grammar "+#id.getText());} + (cmt:DOC_COMMENT {out(#cmt.getText()+"\n");} )? + (optionsSpec)? {out(";\n");} + (delegateGrammars)? + (tokensSpec)? + (attrScope)* + (actions)? + rules + ; + +actions + : ( action )+ + ; + +action +{ +String scope=null, name=null; +String action=null; +} + : #(AMPERSAND id1:ID + ( id2:ID a1:ACTION + {scope=#id1.getText(); name=#a1.getText(); action=#a1.getText();} + | a2:ACTION + {scope=null; name=#id1.getText(); action=#a2.getText();} + ) + ) + { + if ( showActions ) { + out("@"+(scope!=null?scope+"::":"")+name+action); + } + } + ; + +optionsSpec + : #( OPTIONS {out(" options {");} + (option {out("; ");})+ + {out("} ");} + ) + ; + +option + : #( ASSIGN id:ID {out(#id.getText()+"=");} optionValue ) + ; + +optionValue + : id:ID {out(#id.getText());} + | s:STRING_LITERAL {out(#s.getText());} + | c:CHAR_LITERAL {out(#c.getText());} + | i:INT {out(#i.getText());} +// | charSet + ; + +/* +charSet + : #( CHARSET charSetElement ) + ; + +charSetElement + : c:CHAR_LITERAL {out(#c.getText());} + | #( OR c1:CHAR_LITERAL c2:CHAR_LITERAL ) + | #( RANGE c3:CHAR_LITERAL c4:CHAR_LITERAL ) + ; +*/ + +delegateGrammars + : #( "import" ( #(ASSIGN ID ID) | ID )+ ) + ; + +tokensSpec + : #( TOKENS ( tokenSpec )+ ) + ; + +tokenSpec + : TOKEN_REF + | #( ASSIGN TOKEN_REF (STRING_LITERAL|CHAR_LITERAL) ) + ; + +rules + : ( rule )+ + ; + +rule + : #( RULE id:ID + (modifier)? + {out(#id.getText());} + #(ARG (arg:ARG_ACTION {out("["+#arg.getText()+"]");} )? ) + #(RET (ret:ARG_ACTION {out(" returns ["+#ret.getText()+"]");} )? ) + (optionsSpec)? + (ruleScopeSpec)? + (ruleAction)* + {out(" : ");} + b:block[false] + (exceptionGroup)? + EOR {out(";\n");} + ) + ; + +ruleAction + : #(AMPERSAND id:ID a:ACTION ) + {if ( showActions ) out("@"+#id.getText()+"{"+#a.getText()+"}");} + ; + +modifier +{out(#modifier.getText()); out(" ");} + : "protected" + | "public" + | "private" + | "fragment" + ; + +ruleScopeSpec + : #( "scope" (ACTION)? ( ID )* ) + ; + +block[boolean forceParens] +{ +int numAlts = countAltsForBlock(#block); +} + : #( BLOCK {if ( forceParens||numAlts>1 ) out(" (");} + (optionsSpec {out(" : ");} )? + alternative rewrite ( {out(" | ");} alternative rewrite )* + EOB {if ( forceParens||numAlts>1 ) out(")");} + ) + ; + +countAltsForBlock returns [int n=0] + : #( BLOCK (OPTIONS)? (ALT (REWRITE)* {n++;})+ EOB ) + ; + +alternative + : #( ALT (element)+ EOA ) + ; + +exceptionGroup + : ( exceptionHandler )+ (finallyClause)? + | finallyClause + ; + +exceptionHandler + : #("catch" ARG_ACTION ACTION) + ; + +finallyClause + : #("finally" ACTION) + ; + +single_rewrite + : #( REWRITE {out(" ->");} (SEMPRED {out(" {"+#SEMPRED.getText()+"}?");})? + ( alternative | rewrite_template | ETC {out("...");} | ACTION {out(" {"+#ACTION.getText()+"}");}) + ) + ; + +rewrite_template + : #( TEMPLATE + (id:ID {out(" "+#id.getText());}|ind:ACTION {out(" ({"+#ind.getText()+"})");}) + #( ARGLIST + {out("(");} + ( #( ARG arg:ID {out(#arg.getText()+"=");} + a:ACTION {out(#a.getText());} + ) + )* + {out(")");} + ) + ( DOUBLE_QUOTE_STRING_LITERAL {out(" "+#DOUBLE_QUOTE_STRING_LITERAL.getText());} + | DOUBLE_ANGLE_STRING_LITERAL {out(" "+#DOUBLE_ANGLE_STRING_LITERAL.getText());} + )? + ) + ; + +rewrite + : (single_rewrite)* + ; + +element + : #(ROOT element) + | #(BANG element) + | atom + | #(NOT {out("~");} element) + | #(RANGE atom {out("..");} atom) + | #(CHAR_RANGE atom {out("..");} atom) + | #(ASSIGN id:ID {out(#id.getText()+"=");} element) + | #(PLUS_ASSIGN id2:ID {out(#id2.getText()+"+=");} element) + | ebnf + | tree + | #( SYNPRED block[true] ) {out("=>");} + | a:ACTION {if ( showActions ) {out("{"); out(a.getText()); out("}");}} + | a2:FORCED_ACTION {if ( showActions ) {out("{{"); out(a2.getText()); out("}}");}} + | pred:SEMPRED + { + if ( showActions ) {out("{"); out(pred.getText()); out("}?");} + else {out("{...}?");} + } + | spred:SYN_SEMPRED + { + String name = spred.getText(); + GrammarAST predAST=grammar.getSyntacticPredicate(name); + block(predAST, true); + out("=>"); + } + | BACKTRACK_SEMPRED // don't print anything (auto backtrack stuff) + | gpred:GATED_SEMPRED + { + if ( showActions ) {out("{"); out(gpred.getText()); out("}? =>");} + else {out("{...}? =>");} + } + | EPSILON + ; + +ebnf: block[true] {out(" ");} + | #( OPTIONAL block[true] ) {out("? ");} + | #( CLOSURE block[true] ) {out("* ");} + | #( POSITIVE_CLOSURE block[true] ) {out("+ ");} + ; + +tree: #(TREE_BEGIN {out(" ^(");} element (element)* {out(") ");} ) + ; + +atom +{out(" ");} + : ( #( RULE_REF {out(#atom.toString());} + (rarg:ARG_ACTION {out("["+#rarg.toString()+"]");})? + (ast_suffix)? + ) + | #( TOKEN_REF {out(#atom.toString());} + + (targ:ARG_ACTION {out("["+#targ.toString()+"]");} )? + (ast_suffix)? + ) + | #( CHAR_LITERAL {out(#atom.toString());} + (ast_suffix)? + ) + | #( STRING_LITERAL {out(#atom.toString());} + (ast_suffix)? + ) + | #( WILDCARD {out(#atom.toString());} + (ast_suffix)? + ) + ) + {out(" ");} + | LABEL {out(" $"+#LABEL.getText());} // used in -> rewrites + | #(DOT ID {out(#ID.getText()+".");} atom) // scope override on rule + ; + +ast_suffix + : ROOT {out("^");} + | BANG {out("!");} + ; diff --git a/antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/assign.types.g b/antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/assign.types.g new file mode 100644 index 0000000..7be767a --- /dev/null +++ b/antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/assign.types.g @@ -0,0 +1,332 @@ +header { +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + package org.antlr.grammar.v2; + import java.util.*; + import org.antlr.analysis.*; + import org.antlr.misc.*; + import java.io.*; + import org.antlr.tool.*; +} + +/** [Warning: TJP says that this is probably out of date as of 11/19/2005, + * but since it's probably still useful, I'll leave in. Don't have energy + * to update at the moment.] + * + * Compute the token types for all literals and rules etc.. There are + * a few different cases to consider for grammar types and a few situations + * within. + * + * CASE 1 : pure parser grammar + * a) Any reference to a token gets a token type. + * b) The tokens section may alias a token name to a string or char + * + * CASE 2 : pure lexer grammar + * a) Import token vocabulary if available. Set token types for any new tokens + * to values above last imported token type + * b) token rule definitions get token types if not already defined + * c) literals do NOT get token types + * + * CASE 3 : merged parser / lexer grammar + * a) Any char or string literal gets a token type in a parser rule + * b) Any reference to a token gets a token type if not referencing + * a fragment lexer rule + * c) The tokens section may alias a token name to a string or char + * which must add a rule to the lexer + * d) token rule definitions get token types if not already defined + * e) token rule definitions may also alias a token name to a literal. + * E.g., Rule 'FOR : "for";' will alias FOR to "for" in the sense that + * references to either in the parser grammar will yield the token type + * + * What this pass does: + * + * 0. Collects basic info about the grammar like grammar name and type; + * Oh, I have go get the options in case they affect the token types. + * E.g., tokenVocab option. + * Imports any token vocab name/type pairs into a local hashtable. + * 1. Finds a list of all literals and token names. + * 2. Finds a list of all token name rule definitions; + * no token rules implies pure parser. + * 3. Finds a list of all simple token rule defs of form " : ;" + * and aliases them. + * 4. Walks token names table and assign types to any unassigned + * 5. Walks aliases and assign types to referenced literals + * 6. Walks literals, assigning types if untyped + * 4. Informs the Grammar object of the type definitions such as: + * g.defineToken(, ttype); + * g.defineToken(, ttype); + * g.defineToken(, ttype); + * where some of the ttype values will be the same for aliases tokens. + */ +class AssignTokenTypesWalker extends TreeParser; + +options { + importVocab = ANTLR; + ASTLabelType = "GrammarAST"; + codeGenBitsetTestThreshold=999; +} + +{ + public void reportError(RecognitionException ex) { + Token token = null; + if ( ex instanceof MismatchedTokenException ) { + token = ((MismatchedTokenException)ex).token; + } + else if ( ex instanceof NoViableAltException ) { + token = ((NoViableAltException)ex).token; + } + ErrorManager.syntaxError( + ErrorManager.MSG_SYNTAX_ERROR, + grammar, + token, + "assign.types: "+ex.toString(), + ex); + } + + +protected Grammar grammar; +protected String currentRuleName; + +protected static GrammarAST stringAlias; +protected static GrammarAST charAlias; +protected static GrammarAST stringAlias2; +protected static GrammarAST charAlias2; + +protected void initASTPatterns() { + stringAlias = + #(#[BLOCK], #(#[ALT], #[STRING_LITERAL], #[EOA]), #[EOB]); + charAlias = + #(#[BLOCK], #(#[ALT], #[CHAR_LITERAL], #[EOA]), #[EOB]); + stringAlias2 = + #(#[BLOCK], #(#[ALT], #[STRING_LITERAL], #[ACTION], #[EOA]),#[EOB]); + charAlias2 = + #(#[BLOCK], #(#[ALT], #[CHAR_LITERAL], #[ACTION], #[EOA]), #[EOB]); +} + +// Behavior moved to AssignTokenTypesBehavior +protected void trackString(GrammarAST t) {;} +protected void trackToken(GrammarAST t) {;} +protected void trackTokenRule(GrammarAST t, GrammarAST modifier, GrammarAST block) {;} +protected void alias(GrammarAST t, GrammarAST s) {;} +public void defineTokens(Grammar root) {;} +protected void defineStringLiteralsFromDelegates() {;} +protected void assignStringTypes(Grammar root) {;} +protected void aliasTokenIDsAndLiterals(Grammar root) {;} +protected void assignTokenIDTypes(Grammar root) {;} +protected void defineTokenNamesAndLiteralsInGrammar(Grammar root) {;} +protected void init(Grammar root) {;} +} + +grammar[Grammar g] +{ + init(g); +} + : ( #( LEXER_GRAMMAR grammarSpec ) + | #( PARSER_GRAMMAR grammarSpec ) + | #( TREE_GRAMMAR grammarSpec ) + | #( COMBINED_GRAMMAR grammarSpec ) + ) + ; + +grammarSpec +{Map opts=null;} + : id:ID + (cmt:DOC_COMMENT)? + (optionsSpec)? + (delegateGrammars)? + (tokensSpec)? + (attrScope)* + (AMPERSAND)* // skip actions + rules + ; + +attrScope + : #( "scope" ID ACTION ) + ; + +optionsSpec returns [Map opts=new HashMap()] + : #( OPTIONS (option[opts])+ ) + ; + +option[Map opts] +{ + String key=null; + Object value=null; +} + : #( ASSIGN id:ID {key=#id.getText();} value=optionValue ) + { + opts.put(key,value); + // check for grammar-level option to import vocabulary + if ( currentRuleName==null && key.equals("tokenVocab") ) { + grammar.importTokenVocabulary(#id,(String)value); + } + } + ; + +optionValue returns [Object value=null] + : id:ID {value = #id.getText();} + | s:STRING_LITERAL {value = #s.getText();} + | c:CHAR_LITERAL {value = #c.getText();} + | i:INT {value = new Integer(#i.getText());} +// | cs:charSet {value = #cs;} // return set AST in this case + ; + +charSet + : #( CHARSET charSetElement ) + ; + +charSetElement + : c:CHAR_LITERAL + | #( OR c1:CHAR_LITERAL c2:CHAR_LITERAL ) + | #( RANGE c3:CHAR_LITERAL c4:CHAR_LITERAL ) + ; + +delegateGrammars + : #( "import" + ( #(ASSIGN ID ID) + | ID + )+ + ) + ; + +tokensSpec + : #( TOKENS ( tokenSpec )+ ) + ; + +tokenSpec + : t:TOKEN_REF {trackToken(t);} + | #( ASSIGN + t2:TOKEN_REF {trackToken(t2);} + ( s:STRING_LITERAL {trackString(s); alias(t2,s);} + | c:CHAR_LITERAL {trackString(c); alias(t2,c);} + ) + ) + ; + +rules + : ( rule )+ + ; + +rule + : #( RULE id:ID {currentRuleName=#id.getText();} + (m:modifier)? + (ARG (ARG_ACTION)?) + (RET (ARG_ACTION)?) + (optionsSpec)? + (ruleScopeSpec)? + (AMPERSAND)* + b:block + (exceptionGroup)? + EOR + {trackTokenRule(#id,#m,#b);} + ) + ; + +modifier + : "protected" + | "public" + | "private" + | "fragment" + ; + +ruleScopeSpec + : #( "scope" (ACTION)? ( ID )* ) + ; + +block + : #( BLOCK + (optionsSpec)? + ( alternative rewrite )+ + EOB + ) + ; + +alternative + : #( ALT (element)+ EOA ) + ; + +exceptionGroup + : ( exceptionHandler )+ (finallyClause)? + | finallyClause + ; + +exceptionHandler + : #("catch" ARG_ACTION ACTION) + ; + +finallyClause + : #("finally" ACTION) + ; + +rewrite + : ( #( REWRITE (SEMPRED)? (ALT|TEMPLATE|ACTION|ETC) ) )* + ; + +element + : #(ROOT element) + | #(BANG element) + | atom + | #(NOT element) + | #(RANGE atom atom) + | #(CHAR_RANGE atom atom) + | #(ASSIGN ID element) + | #(PLUS_ASSIGN ID element) + | ebnf + | tree + | #( SYNPRED block ) + | FORCED_ACTION + | ACTION + | SEMPRED + | SYN_SEMPRED + | BACKTRACK_SEMPRED + | GATED_SEMPRED + | EPSILON + ; + +ebnf: block + | #( OPTIONAL block ) + | #( CLOSURE block ) + | #( POSITIVE_CLOSURE block ) + ; + +tree: #(TREE_BEGIN element (element)* ) + ; + +atom + : #( rr:RULE_REF (rarg:ARG_ACTION)? ) + | #( t:TOKEN_REF (targ:ARG_ACTION )? ) {trackToken(t);} + | c:CHAR_LITERAL {trackString(c);} + | s:STRING_LITERAL {trackString(s);} + | WILDCARD + | #(DOT ID atom) // scope override on rule + ; + +ast_suffix + : ROOT + | BANG + ; diff --git a/antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/buildnfa.g b/antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/buildnfa.g new file mode 100644 index 0000000..c6a128d --- /dev/null +++ b/antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/buildnfa.g @@ -0,0 +1,743 @@ +header { +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.grammar.v2; +import java.util.*; +import org.antlr.analysis.*; +import org.antlr.misc.*; +import org.antlr.tool.*; +} + +/** Build an NFA from a tree representing an ANTLR grammar. */ +class TreeToNFAConverter extends TreeParser; + +options { + importVocab = ANTLR; + ASTLabelType = "GrammarAST"; +} + +{ + +/** Factory used to create nodes and submachines */ +protected NFAFactory factory = null; + +/** Which NFA object are we filling in? */ +protected NFA nfa = null; + +/** Which grammar are we converting an NFA for? */ +protected Grammar grammar = null; + +protected String currentRuleName = null; + +protected int outerAltNum = 0; +protected int blockLevel = 0; + +public TreeToNFAConverter(Grammar g, NFA nfa, NFAFactory factory) { + this(); + this.grammar = g; + this.nfa = nfa; + this.factory = factory; +} + +/* +protected void init() { + // define all the rule begin/end NFAStates to solve forward reference issues + Collection rules = grammar.getRules(); + for (Iterator itr = rules.iterator(); itr.hasNext();) { + Rule r = (Rule) itr.next(); + String ruleName = r.name; + NFAState ruleBeginState = factory.newState(); + ruleBeginState.setDescription("rule "+ruleName+" start"); + ruleBeginState.enclosingRule = r; + r.startState = ruleBeginState; + NFAState ruleEndState = factory.newState(); + ruleEndState.setDescription("rule "+ruleName+" end"); + ruleEndState.setAcceptState(true); + ruleEndState.enclosingRule = r; + r.stopState = ruleEndState; + } +} +*/ + +protected void addFollowTransition(String ruleName, NFAState following) { + //System.out.println("adding follow link to rule "+ruleName); + // find last link in FOLLOW chain emanating from rule + Rule r = grammar.getRule(ruleName); + NFAState end = r.stopState; + while ( end.transition(1)!=null ) { + end = (NFAState)end.transition(1).target; + } + if ( end.transition(0)!=null ) { + // already points to a following node + // gotta add another node to keep edges to a max of 2 + NFAState n = factory.newState(); + Transition e = new Transition(Label.EPSILON, n); + end.addTransition(e); + end = n; + } + Transition followEdge = new Transition(Label.EPSILON, following); + end.addTransition(followEdge); +} + +protected void finish() { + List rules = new LinkedList(); + rules.addAll(grammar.getRules()); + int numEntryPoints = factory.build_EOFStates(rules); + if ( numEntryPoints==0 ) { + ErrorManager.grammarWarning(ErrorManager.MSG_NO_GRAMMAR_START_RULE, + grammar, + null, + grammar.name); + } +} + + public void reportError(RecognitionException ex) { + Token token = null; + if ( ex instanceof MismatchedTokenException ) { + token = ((MismatchedTokenException)ex).token; + } + else if ( ex instanceof NoViableAltException ) { + token = ((NoViableAltException)ex).token; + } + ErrorManager.syntaxError( + ErrorManager.MSG_SYNTAX_ERROR, + grammar, + token, + "buildnfa: "+ex.toString(), + ex); + } +} + +grammar + : ( #( LEXER_GRAMMAR grammarSpec ) + | #( PARSER_GRAMMAR grammarSpec ) + | #( TREE_GRAMMAR grammarSpec ) + | #( COMBINED_GRAMMAR grammarSpec ) + ) + {finish();} + ; + +attrScope + : #( "scope" ID ACTION ) + ; + +grammarSpec + : ID + (cmt:DOC_COMMENT)? + ( #(OPTIONS .) )? + ( #("import" .) )? + ( #(TOKENS .) )? + (attrScope)* + (AMPERSAND)* // skip actions + rules + ; + +rules + : ( rule )+ + ; + +rule +{ + StateCluster g=null; + StateCluster b = null; + String r=null; +} + : #( RULE id:ID {r=#id.getText();} + { + currentRuleName = r; + factory.setCurrentRule(grammar.getLocallyDefinedRule(r)); + } + (modifier)? + (ARG (ARG_ACTION)?) + (RET (ARG_ACTION)?) + ( OPTIONS )? + ( ruleScopeSpec )? + (AMPERSAND)* + {GrammarAST blk = (GrammarAST)_t;} + b=block + (exceptionGroup)? + EOR + { + if ( blk.getSetValue() !=null ) { + // if block comes back as a set not BLOCK, make it + // a single ALT block + b = factory.build_AlternativeBlockFromSet(b); + } + if ( Character.isLowerCase(r.charAt(0)) || + grammar.type==Grammar.LEXER ) + { + // attach start node to block for this rule + Rule thisR = grammar.getLocallyDefinedRule(r); + NFAState start = thisR.startState; + start.associatedASTNode = #id; + start.addTransition(new Transition(Label.EPSILON, b.left)); + + // track decision if > 1 alts + if ( grammar.getNumberOfAltsForDecisionNFA(b.left)>1 ) { + b.left.setDescription(grammar.grammarTreeToString(#rule,false)); + b.left.setDecisionASTNode(blk); + int d = grammar.assignDecisionNumber( b.left ); + grammar.setDecisionNFA( d, b.left ); + grammar.setDecisionBlockAST(d, blk); + } + + // hook to end of rule node + NFAState end = thisR.stopState; + b.right.addTransition(new Transition(Label.EPSILON,end)); + } + } + ) + ; + +modifier + : "protected" + | "public" + | "private" + | "fragment" + ; + +ruleScopeSpec + : #( "scope" (ACTION)? ( ID )* ) + ; + +block returns [StateCluster g = null] +{ + StateCluster a = null; + List alts = new LinkedList(); + this.blockLevel++; + if ( this.blockLevel==1 ) {this.outerAltNum=1;} +} + : {grammar.isValidSet(this,#block) && + !currentRuleName.equals(Grammar.ARTIFICIAL_TOKENS_RULENAME)}? + g=set + {this.blockLevel--;} + + | #( BLOCK ( OPTIONS )? + ( a=alternative rewrite + { + alts.add(a); + if ( this.blockLevel==1 ) {this.outerAltNum++;} + } + )+ + EOB + ) + {g = factory.build_AlternativeBlock(alts);} + {this.blockLevel--;} + ; + +alternative returns [StateCluster g=null] +{ + StateCluster e = null; +} + : #( ALT (e=element {g = factory.build_AB(g,e);} )+ ) + { + if (g==null) { // if alt was a list of actions or whatever + g = factory.build_Epsilon(); + } + else { + factory.optimizeAlternative(g); + } + } + ; + +exceptionGroup + : ( exceptionHandler )+ (finallyClause)? + | finallyClause + ; + +exceptionHandler + : #("catch" ARG_ACTION ACTION) + ; + +finallyClause + : #("finally" ACTION) + ; + +rewrite + : ( + { + if ( grammar.getOption("output")==null ) { + ErrorManager.grammarError(ErrorManager.MSG_REWRITE_OR_OP_WITH_NO_OUTPUT_OPTION, + grammar, #rewrite.token, currentRuleName); + } + } + #( REWRITE (SEMPRED)? (ALT|TEMPLATE|ACTION|ETC) ) + )* + ; + +element returns [StateCluster g=null] + : #(ROOT g=element) + | #(BANG g=element) + | #(ASSIGN ID g=element) + | #(PLUS_ASSIGN ID g=element) + | #(RANGE a:atom[null] b:atom[null]) + {g = factory.build_Range(grammar.getTokenType(#a.getText()), + grammar.getTokenType(#b.getText()));} + | #(CHAR_RANGE c1:CHAR_LITERAL c2:CHAR_LITERAL) + { + if ( grammar.type==Grammar.LEXER ) { + g = factory.build_CharRange(#c1.getText(), #c2.getText()); + } + } + | g=atom_or_notatom + | g=ebnf + | g=tree + | #( SYNPRED block ) + | ACTION {g = factory.build_Action(#ACTION);} + | FORCED_ACTION {g = factory.build_Action(#FORCED_ACTION);} + | pred:SEMPRED {g = factory.build_SemanticPredicate(#pred);} + | spred:SYN_SEMPRED {g = factory.build_SemanticPredicate(#spred);} + | bpred:BACKTRACK_SEMPRED {g = factory.build_SemanticPredicate(#bpred);} + | gpred:GATED_SEMPRED {g = factory.build_SemanticPredicate(#gpred);} + | EPSILON {g = factory.build_Epsilon();} + ; + +ebnf returns [StateCluster g=null] +{ + StateCluster b = null; + GrammarAST blk = #ebnf; + if ( blk.getType()!=BLOCK ) { + blk = (GrammarAST)blk.getFirstChild(); + } + GrammarAST eob = blk.getLastChild(); +} + : {grammar.isValidSet(this,#ebnf)}? g=set + + | b=block + { + // track decision if > 1 alts + if ( grammar.getNumberOfAltsForDecisionNFA(b.left)>1 ) { + b.left.setDescription(grammar.grammarTreeToString(blk,false)); + b.left.setDecisionASTNode(blk); + int d = grammar.assignDecisionNumber( b.left ); + grammar.setDecisionNFA( d, b.left ); + grammar.setDecisionBlockAST(d, blk); + } + g = b; + } + | #( OPTIONAL b=block ) + { + if ( blk.getSetValue() !=null ) { + // if block comes back SET not BLOCK, make it + // a single ALT block + b = factory.build_AlternativeBlockFromSet(b); + } + g = factory.build_Aoptional(b); + g.left.setDescription(grammar.grammarTreeToString(#ebnf,false)); + // there is always at least one alt even if block has just 1 alt + int d = grammar.assignDecisionNumber( g.left ); + grammar.setDecisionNFA(d, g.left); + grammar.setDecisionBlockAST(d, blk); + g.left.setDecisionASTNode(#ebnf); + } + | #( CLOSURE b=block ) + { + if ( blk.getSetValue() !=null ) { + b = factory.build_AlternativeBlockFromSet(b); + } + g = factory.build_Astar(b); + // track the loop back / exit decision point + b.right.setDescription("()* loopback of "+grammar.grammarTreeToString(#ebnf,false)); + int d = grammar.assignDecisionNumber( b.right ); + grammar.setDecisionNFA(d, b.right); + grammar.setDecisionBlockAST(d, blk); + b.right.setDecisionASTNode(eob); + // make block entry state also have same decision for interpreting grammar + NFAState altBlockState = (NFAState)g.left.transition(0).target; + altBlockState.setDecisionASTNode(#ebnf); + altBlockState.setDecisionNumber(d); + g.left.setDecisionNumber(d); // this is the bypass decision (2 alts) + g.left.setDecisionASTNode(#ebnf); + } + | #( POSITIVE_CLOSURE b=block ) + { + if ( blk.getSetValue() !=null ) { + b = factory.build_AlternativeBlockFromSet(b); + } + g = factory.build_Aplus(b); + // don't make a decision on left edge, can reuse loop end decision + // track the loop back / exit decision point + b.right.setDescription("()+ loopback of "+grammar.grammarTreeToString(#ebnf,false)); + int d = grammar.assignDecisionNumber( b.right ); + grammar.setDecisionNFA(d, b.right); + grammar.setDecisionBlockAST(d, blk); + b.right.setDecisionASTNode(eob); + // make block entry state also have same decision for interpreting grammar + NFAState altBlockState = (NFAState)g.left.transition(0).target; + altBlockState.setDecisionASTNode(#ebnf); + altBlockState.setDecisionNumber(d); + } + ; + +tree returns [StateCluster g=null] +{ +StateCluster e=null; +GrammarAST el=null; +StateCluster down=null, up=null; +} + : #( TREE_BEGIN + {el=(GrammarAST)_t;} + g=element + { + down = factory.build_Atom(Label.DOWN, el); + // TODO set following states for imaginary nodes? + //el.followingNFAState = down.right; + g = factory.build_AB(g,down); + } + ( {el=(GrammarAST)_t;} e=element {g = factory.build_AB(g,e);} )* + { + up = factory.build_Atom(Label.UP, el); + //el.followingNFAState = up.right; + g = factory.build_AB(g,up); + // tree roots point at right edge of DOWN for LOOK computation later + #tree.NFATreeDownState = down.left; + } + ) + ; + +atom_or_notatom returns [StateCluster g=null] + : g=atom[null] + | #( n:NOT + ( c:CHAR_LITERAL (ast1:ast_suffix)? + { + int ttype=0; + if ( grammar.type==Grammar.LEXER ) { + ttype = Grammar.getCharValueFromGrammarCharLiteral(#c.getText()); + } + else { + ttype = grammar.getTokenType(#c.getText()); + } + IntSet notAtom = grammar.complement(ttype); + if ( notAtom.isNil() ) { + ErrorManager.grammarError(ErrorManager.MSG_EMPTY_COMPLEMENT, + grammar, + #c.token, + #c.getText()); + } + g=factory.build_Set(notAtom,#n); + } + | t:TOKEN_REF (ast3:ast_suffix)? + { + int ttype=0; + IntSet notAtom = null; + if ( grammar.type==Grammar.LEXER ) { + notAtom = grammar.getSetFromRule(this,#t.getText()); + if ( notAtom==null ) { + ErrorManager.grammarError(ErrorManager.MSG_RULE_INVALID_SET, + grammar, + #t.token, + #t.getText()); + } + else { + notAtom = grammar.complement(notAtom); + } + } + else { + ttype = grammar.getTokenType(#t.getText()); + notAtom = grammar.complement(ttype); + } + if ( notAtom==null || notAtom.isNil() ) { + ErrorManager.grammarError(ErrorManager.MSG_EMPTY_COMPLEMENT, + grammar, + #t.token, + #t.getText()); + } + g=factory.build_Set(notAtom,#n); + } + | g=set + { + GrammarAST stNode = (GrammarAST)n.getFirstChild(); + //IntSet notSet = grammar.complement(stNode.getSetValue()); + // let code generator complement the sets + IntSet s = stNode.getSetValue(); + stNode.setSetValue(s); + // let code gen do the complement again; here we compute + // for NFA construction + s = grammar.complement(s); + if ( s.isNil() ) { + ErrorManager.grammarError(ErrorManager.MSG_EMPTY_COMPLEMENT, + grammar, + #n.token); + } + g=factory.build_Set(s,#n); + } + ) + {#n.followingNFAState = g.right;} + ) + ; + +atom[String scopeName] returns [StateCluster g=null] + : #( r:RULE_REF (rarg:ARG_ACTION)? (as1:ast_suffix)? ) + { + NFAState start = grammar.getRuleStartState(scopeName,r.getText()); + if ( start!=null ) { + Rule rr = grammar.getRule(scopeName,r.getText()); + g = factory.build_RuleRef(rr, start); + r.followingNFAState = g.right; + r.NFAStartState = g.left; + if ( g.left.transition(0) instanceof RuleClosureTransition + && grammar.type!=Grammar.LEXER ) + { + addFollowTransition(r.getText(), g.right); + } + // else rule ref got inlined to a set + } + } + + | #( t:TOKEN_REF (targ:ARG_ACTION)? (as2:ast_suffix)? ) + { + if ( grammar.type==Grammar.LEXER ) { + NFAState start = grammar.getRuleStartState(scopeName,t.getText()); + if ( start!=null ) { + Rule rr = grammar.getRule(scopeName,t.getText()); + g = factory.build_RuleRef(rr, start); + t.NFAStartState = g.left; + // don't add FOLLOW transitions in the lexer; + // only exact context should be used. + } + } + else { + g = factory.build_Atom(t); + t.followingNFAState = g.right; + } + } + + | #( c:CHAR_LITERAL (as3:ast_suffix)? ) + { + if ( grammar.type==Grammar.LEXER ) { + g = factory.build_CharLiteralAtom(c); + } + else { + g = factory.build_Atom(c); + c.followingNFAState = g.right; + } + } + + | #( s:STRING_LITERAL (as4:ast_suffix)? ) + { + if ( grammar.type==Grammar.LEXER ) { + g = factory.build_StringLiteralAtom(s); + } + else { + g = factory.build_Atom(s); + s.followingNFAState = g.right; + } + } + + | #( w:WILDCARD (as5:ast_suffix)? ) + { + if ( nfa.grammar.type==Grammar.TREE_PARSER ) { + g = factory.build_WildcardTree(#w); + } + else { + g = factory.build_Wildcard(#w); + } + } + + | #( DOT scope:ID g=atom[#scope.getText()] ) // scope override + ; + +ast_suffix + : ROOT + | BANG + ; + +set returns [StateCluster g=null] +{ +IntSet elements=new IntervalSet(); +#set.setSetValue(elements); // track set for use by code gen +} + : #( b:BLOCK + (#(ALT (BACKTRACK_SEMPRED)? setElement[elements] EOA))+ + EOB + ) + { + g = factory.build_Set(elements,#b); + #b.followingNFAState = g.right; + #b.setSetValue(elements); // track set value of this block + } + //{System.out.println("set elements="+elements.toString(grammar));} + ; + +setRule returns [IntSet elements=new IntervalSet()] +{IntSet s=null;} + : #( RULE id:ID (modifier)? ARG RET ( OPTIONS )? ( ruleScopeSpec )? + (AMPERSAND)* + #( BLOCK ( OPTIONS )? + ( #(ALT (BACKTRACK_SEMPRED)? setElement[elements] EOA) )+ + EOB + ) + (exceptionGroup)? + EOR + ) + ; + exception + catch[RecognitionException re] {throw re;} + +setElement[IntSet elements] +{ + int ttype; + IntSet ns=null; + StateCluster gset; +} + : c:CHAR_LITERAL + { + if ( grammar.type==Grammar.LEXER ) { + ttype = Grammar.getCharValueFromGrammarCharLiteral(c.getText()); + } + else { + ttype = grammar.getTokenType(c.getText()); + } + if ( elements.member(ttype) ) { + ErrorManager.grammarError(ErrorManager.MSG_DUPLICATE_SET_ENTRY, + grammar, + #c.token, + #c.getText()); + } + elements.add(ttype); + } + | t:TOKEN_REF + { + if ( grammar.type==Grammar.LEXER ) { + // recursively will invoke this rule to match elements in target rule ref + IntSet ruleSet = grammar.getSetFromRule(this,#t.getText()); + if ( ruleSet==null ) { + ErrorManager.grammarError(ErrorManager.MSG_RULE_INVALID_SET, + grammar, + #t.token, + #t.getText()); + } + else { + elements.addAll(ruleSet); + } + } + else { + ttype = grammar.getTokenType(t.getText()); + if ( elements.member(ttype) ) { + ErrorManager.grammarError(ErrorManager.MSG_DUPLICATE_SET_ENTRY, + grammar, + #t.token, + #t.getText()); + } + elements.add(ttype); + } + } + + | s:STRING_LITERAL + { + ttype = grammar.getTokenType(s.getText()); + if ( elements.member(ttype) ) { + ErrorManager.grammarError(ErrorManager.MSG_DUPLICATE_SET_ENTRY, + grammar, + #s.token, + #s.getText()); + } + elements.add(ttype); + } + | #(CHAR_RANGE c1:CHAR_LITERAL c2:CHAR_LITERAL) + { + if ( grammar.type==Grammar.LEXER ) { + int a = Grammar.getCharValueFromGrammarCharLiteral(c1.getText()); + int b = Grammar.getCharValueFromGrammarCharLiteral(c2.getText()); + elements.addAll(IntervalSet.of(a,b)); + } + } + + | gset=set + { + Transition setTrans = gset.left.transition(0); + elements.addAll(setTrans.label.getSet()); + } + + | #( NOT {ns=new IntervalSet();} + setElement[ns] + { + IntSet not = grammar.complement(ns); + elements.addAll(not); + } + ) + ; + +/** Check to see if this block can be a set. Can't have actions + * etc... Also can't be in a rule with a rewrite as we need + * to track what's inside set for use in rewrite. + */ +testBlockAsSet +{ + int nAlts=0; + Rule r = grammar.getLocallyDefinedRule(currentRuleName); +} + : #( BLOCK + ( #(ALT (BACKTRACK_SEMPRED)? testSetElement {nAlts++;} EOA) + {!r.hasRewrite(outerAltNum)}? + )+ + EOB + ) + {nAlts>1}? // set of 1 element is not good + ; + exception + catch[RecognitionException re] {throw re;} + +testSetRule + : #( RULE id:ID (modifier)? ARG RET ( OPTIONS )? ( ruleScopeSpec )? + (AMPERSAND)* + #( BLOCK + ( #(ALT (BACKTRACK_SEMPRED)? testSetElement EOA) )+ + EOB + ) + (exceptionGroup)? + EOR + ) + ; + exception + catch[RecognitionException re] {throw re;} + +/** Match just an element; no ast suffix etc.. */ +testSetElement +{ +AST r = _t; +} + : c:CHAR_LITERAL + | t:TOKEN_REF + { + if ( grammar.type==Grammar.LEXER ) { + Rule rule = grammar.getRule(#t.getText()); + if ( rule==null ) { + throw new RecognitionException("invalid rule"); + } + // recursively will invoke this rule to match elements in target rule ref + testSetRule(rule.tree); + } + } + | {grammar.type!=Grammar.LEXER}? s:STRING_LITERAL + | #(CHAR_RANGE c1:CHAR_LITERAL c2:CHAR_LITERAL) + | testBlockAsSet + | #( NOT testSetElement ) + ; + exception + catch[RecognitionException re] {throw re;} diff --git a/antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/codegen.g b/antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/codegen.g new file mode 100644 index 0000000..4fa6f73 --- /dev/null +++ b/antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/codegen.g @@ -0,0 +1,1444 @@ +header { +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + package org.antlr.grammar.v2; + import org.antlr.tool.*; + import org.antlr.analysis.*; + import org.antlr.misc.*; + import java.util.*; + import org.antlr.stringtemplate.*; + import antlr.TokenWithIndex; + import antlr.CommonToken; + import org.antlr.codegen.*; +} + +/** Walk a grammar and generate code by gradually building up + * a bigger and bigger StringTemplate. + * + * Terence Parr + * University of San Francisco + * June 15, 2004 + */ +class CodeGenTreeWalker extends TreeParser; + +options { + // warning! ANTLR cannot see another directory to get vocabs, so I had + // to copy the ANTLRTokenTypes.txt file into this dir from ../tools! + // Yuck! If you modify ../tools/antlr.g, make sure to copy the vocab here. + importVocab = ANTLR; + codeGenBitsetTestThreshold=999; + ASTLabelType=GrammarAST; +} + +{ + protected static final int RULE_BLOCK_NESTING_LEVEL = 0; + protected static final int OUTER_REWRITE_NESTING_LEVEL = 0; + + public String getCurrentRuleName() { + return currentRuleName; + } + + public void setCurrentRuleName(String currentRuleName) { + this.currentRuleName = currentRuleName; + } + + public int getOuterAltNum() { + return outerAltNum; + } + + public void setOuterAltNum(int outerAltNum) { + this.outerAltNum = outerAltNum; + } + + protected String currentRuleName = null; + protected int blockNestingLevel = 0; + protected int rewriteBlockNestingLevel = 0; + protected int outerAltNum = 0; + protected StringTemplate currentBlockST = null; + protected boolean currentAltHasASTRewrite = false; + protected int rewriteTreeNestingLevel = 0; + protected Set rewriteRuleRefs = null; + + public void reportError(RecognitionException ex) { + Token token = null; + if ( ex instanceof MismatchedTokenException ) { + token = ((MismatchedTokenException)ex).token; + } + else if ( ex instanceof NoViableAltException ) { + token = ((NoViableAltException)ex).token; + } + ErrorManager.syntaxError( + ErrorManager.MSG_SYNTAX_ERROR, + grammar, + token, + "codegen: "+ex.toString(), + ex); + } + + public void reportError(String s) { + System.out.println("codegen: error: " + s); + } + + protected CodeGenerator generator; + protected Grammar grammar; + protected StringTemplateGroup templates; + + /** The overall lexer/parser template; simulate dynamically scoped + * attributes by making this an instance var of the walker. + */ + protected StringTemplate recognizerST; + + protected StringTemplate outputFileST; + protected StringTemplate headerFileST; + + protected String outputOption = ""; + + protected StringTemplate getWildcardST(GrammarAST elementAST, GrammarAST ast_suffix, String label) { + String name = "wildcard"; + if ( grammar.type==Grammar.LEXER ) { + name = "wildcardChar"; + } + return getTokenElementST(name, name, elementAST, ast_suffix, label); + } + + protected StringTemplate getRuleElementST(String name, + String ruleTargetName, + GrammarAST elementAST, + GrammarAST ast_suffix, + String label) + { + String suffix = getSTSuffix(elementAST,ast_suffix,label); + name += suffix; + // if we're building trees and there is no label, gen a label + // unless we're in a synpred rule. + Rule r = grammar.getRule(currentRuleName); + if ( (grammar.buildAST()||suffix.length()>0) && label==null && + (r==null || !r.isSynPred) ) + { + // we will need a label to do the AST or tracking, make one + label = generator.createUniqueLabel(ruleTargetName); + CommonToken labelTok = new CommonToken(ANTLRParser.ID, label); + grammar.defineRuleRefLabel(currentRuleName, labelTok, elementAST); + } + StringTemplate elementST = templates.getInstanceOf(name); + if ( label!=null ) { + elementST.setAttribute("label", label); + } + return elementST; + } + + protected StringTemplate getTokenElementST(String name, + String elementName, + GrammarAST elementAST, + GrammarAST ast_suffix, + String label) + { + String suffix = getSTSuffix(elementAST,ast_suffix,label); + name += suffix; + // if we're building trees and there is no label, gen a label + // unless we're in a synpred rule. + Rule r = grammar.getRule(currentRuleName); + if ( (grammar.buildAST()||suffix.length()>0) && label==null && + (r==null || !r.isSynPred) ) + { + label = generator.createUniqueLabel(elementName); + CommonToken labelTok = new CommonToken(ANTLRParser.ID, label); + grammar.defineTokenRefLabel(currentRuleName, labelTok, elementAST); + } + StringTemplate elementST = templates.getInstanceOf(name); + if ( label!=null ) { + elementST.setAttribute("label", label); + } + return elementST; + } + + public boolean isListLabel(String label) { + boolean hasListLabel=false; + if ( label!=null ) { + Rule r = grammar.getRule(currentRuleName); + String stName = null; + if ( r!=null ) { + Grammar.LabelElementPair pair = r.getLabel(label); + if ( pair!=null && + (pair.type==Grammar.TOKEN_LIST_LABEL|| + pair.type==Grammar.RULE_LIST_LABEL|| + pair.type==Grammar.WILDCARD_TREE_LIST_LABEL) ) + { + hasListLabel=true; + } + } + } + return hasListLabel; + } + + /** Return a non-empty template name suffix if the token is to be + * tracked, added to a tree, or both. + */ + protected String getSTSuffix(GrammarAST elementAST, GrammarAST ast_suffix, String label) { + if ( grammar.type==Grammar.LEXER ) { + return ""; + } + // handle list label stuff; make element use "Track" + + String operatorPart = ""; + String rewritePart = ""; + String listLabelPart = ""; + Rule ruleDescr = grammar.getRule(currentRuleName); + if ( ast_suffix!=null && !ruleDescr.isSynPred ) { + if ( ast_suffix.getType()==ANTLRParser.ROOT ) { + operatorPart = "RuleRoot"; + } + else if ( ast_suffix.getType()==ANTLRParser.BANG ) { + operatorPart = "Bang"; + } + } + if ( currentAltHasASTRewrite && elementAST.getType()!=WILDCARD ) { + rewritePart = "Track"; + } + if ( isListLabel(label) ) { + listLabelPart = "AndListLabel"; + } + String STsuffix = operatorPart+rewritePart+listLabelPart; + //System.out.println("suffix = "+STsuffix); + + return STsuffix; + } + + /** Convert rewrite AST lists to target labels list */ + protected List getTokenTypesAsTargetLabels(Set refs) { + if ( refs==null || refs.size()==0 ) { + return null; + } + List labels = new ArrayList(refs.size()); + for (GrammarAST t : refs) { + String label; + if ( t.getType()==ANTLRParser.RULE_REF ) { + label = t.getText(); + } + else if ( t.getType()==ANTLRParser.LABEL ) { + label = t.getText(); + } + else { + // must be char or string literal + label = generator.getTokenTypeAsTargetLabel( + grammar.getTokenType(t.getText())); + } + labels.add(label); + } + return labels; + } + + public void init(Grammar g) { + this.grammar = g; + this.generator = grammar.getCodeGenerator(); + this.templates = generator.getTemplates(); + } +} + +grammar[Grammar g, + StringTemplate recognizerST, + StringTemplate outputFileST, + StringTemplate headerFileST] +{ + init(g); + this.recognizerST = recognizerST; + this.outputFileST = outputFileST; + this.headerFileST = headerFileST; + String superClass = (String)g.getOption("superClass"); + outputOption = (String)g.getOption("output"); + recognizerST.setAttribute("superClass", superClass); + if ( g.type!=Grammar.LEXER ) { + recognizerST.setAttribute("ASTLabelType", g.getOption("ASTLabelType")); + } + if ( g.type==Grammar.TREE_PARSER && g.getOption("ASTLabelType")==null ) { + ErrorManager.grammarWarning(ErrorManager.MSG_MISSING_AST_TYPE_IN_TREE_GRAMMAR, + g, + null, + g.name); + } + if ( g.type!=Grammar.TREE_PARSER ) { + recognizerST.setAttribute("labelType", g.getOption("TokenLabelType")); + } + recognizerST.setAttribute("numRules", grammar.getRules().size()); + outputFileST.setAttribute("numRules", grammar.getRules().size()); + headerFileST.setAttribute("numRules", grammar.getRules().size()); +} + : ( #( LEXER_GRAMMAR grammarSpec ) + | #( PARSER_GRAMMAR grammarSpec ) + | #( TREE_GRAMMAR grammarSpec + ) + | #( COMBINED_GRAMMAR grammarSpec ) + ) + ; + +attrScope + : #( "scope" ID ACTION ) + ; + +grammarSpec + : name:ID + (cmt:DOC_COMMENT + { + outputFileST.setAttribute("docComment", #cmt.getText()); + headerFileST.setAttribute("docComment", #cmt.getText()); + } + )? + { + recognizerST.setAttribute("name", grammar.getRecognizerName()); + outputFileST.setAttribute("name", grammar.getRecognizerName()); + headerFileST.setAttribute("name", grammar.getRecognizerName()); + recognizerST.setAttribute("scopes", grammar.getGlobalScopes()); + headerFileST.setAttribute("scopes", grammar.getGlobalScopes()); + } + ( #(OPTIONS .) )? + ( #(IMPORT .) )? + ( #(TOKENS .) )? + (attrScope)* + (AMPERSAND)* + rules[recognizerST] + ; + +rules[StringTemplate recognizerST] +{ +StringTemplate rST; +} + : ( ( { + String ruleName = _t.getFirstChild().getText(); + Rule r = grammar.getRule(ruleName); + } + : + {grammar.generateMethodForRule(ruleName)}? + rST=rule + { + if ( rST!=null ) { + recognizerST.setAttribute("rules", rST); + outputFileST.setAttribute("rules", rST); + headerFileST.setAttribute("rules", rST); + } + } + | RULE + ) + )+ + ; + +rule returns [StringTemplate code=null] +{ + String r; + String initAction = null; + StringTemplate b; + // get the dfa for the BLOCK + GrammarAST block=#rule.getFirstChildWithType(BLOCK); + DFA dfa=block.getLookaheadDFA(); + // init blockNestingLevel so it's block level RULE_BLOCK_NESTING_LEVEL + // for alts of rule + blockNestingLevel = RULE_BLOCK_NESTING_LEVEL-1; + Rule ruleDescr = grammar.getRule(#rule.getFirstChild().getText()); + + // For syn preds, we don't want any AST code etc... in there. + // Save old templates ptr and restore later. Base templates include Dbg. + StringTemplateGroup saveGroup = templates; + if ( ruleDescr.isSynPred ) { + templates = generator.getBaseTemplates(); + } +} + : #( RULE id:ID {r=#id.getText(); currentRuleName = r;} + (mod:modifier)? + #(ARG (ARG_ACTION)?) + #(RET (ARG_ACTION)?) + ( #(OPTIONS .) )? + (ruleScopeSpec)? + (AMPERSAND)* + b=block["ruleBlock", dfa] + { + String description = + grammar.grammarTreeToString(#rule.getFirstChildWithType(BLOCK), + false); + description = + generator.target.getTargetStringLiteralFromString(description); + b.setAttribute("description", description); + // do not generate lexer rules in combined grammar + String stName = null; + if ( ruleDescr.isSynPred ) { + stName = "synpredRule"; + } + else if ( grammar.type==Grammar.LEXER ) { + if ( r.equals(Grammar.ARTIFICIAL_TOKENS_RULENAME) ) { + stName = "tokensRule"; + } + else { + stName = "lexerRule"; + } + } + else { + if ( !(grammar.type==Grammar.COMBINED && + Character.isUpperCase(r.charAt(0))) ) + { + stName = "rule"; + } + } + code = templates.getInstanceOf(stName); + if ( code.getName().equals("rule") ) { + code.setAttribute("emptyRule", + Boolean.valueOf(grammar.isEmptyRule(block))); + } + code.setAttribute("ruleDescriptor", ruleDescr); + String memo = (String)grammar.getBlockOption(#rule,"memoize"); + if ( memo==null ) { + memo = (String)grammar.getOption("memoize"); + } + if ( memo!=null && memo.equals("true") && + (stName.equals("rule")||stName.equals("lexerRule")) ) + { + code.setAttribute("memoize", + Boolean.valueOf(memo!=null && memo.equals("true"))); + } + } + + (exceptionGroup[code])? + EOR + ) + { + if ( code!=null ) { + if ( grammar.type==Grammar.LEXER ) { + boolean naked = + r.equals(Grammar.ARTIFICIAL_TOKENS_RULENAME) || + (mod!=null&&mod.getText().equals(Grammar.FRAGMENT_RULE_MODIFIER)); + code.setAttribute("nakedBlock", Boolean.valueOf(naked)); + } + else { + description = + grammar.grammarTreeToString(#rule,false); + description = + generator.target.getTargetStringLiteralFromString(description); + code.setAttribute("description", description); + } + Rule theRule = grammar.getRule(r); + generator.translateActionAttributeReferencesForSingleScope( + theRule, + theRule.getActions() + ); + code.setAttribute("ruleName", r); + code.setAttribute("block", b); + if ( initAction!=null ) { + code.setAttribute("initAction", initAction); + } + } + templates = saveGroup; + } + ; + +modifier + : "protected" + | "public" + | "private" + | "fragment" + ; + +ruleScopeSpec + : #( "scope" (ACTION)? ( ID )* ) + ; + +block[String blockTemplateName, DFA dfa] + returns [StringTemplate code=null] +{ + StringTemplate decision = null; + if ( dfa!=null ) { + code = templates.getInstanceOf(blockTemplateName); + decision = generator.genLookaheadDecision(recognizerST,dfa); + code.setAttribute("decision", decision); + code.setAttribute("decisionNumber", dfa.getDecisionNumber()); + code.setAttribute("maxK",dfa.getMaxLookaheadDepth()); + code.setAttribute("maxAlt",dfa.getNumberOfAlts()); + } + else { + code = templates.getInstanceOf(blockTemplateName+"SingleAlt"); + } + blockNestingLevel++; + code.setAttribute("blockLevel", blockNestingLevel); + code.setAttribute("enclosingBlockLevel", blockNestingLevel-1); + StringTemplate alt = null; + StringTemplate rew = null; + StringTemplate sb = null; + GrammarAST r = null; + int altNum = 1; + if ( this.blockNestingLevel==RULE_BLOCK_NESTING_LEVEL ) { + this.outerAltNum=1; + } +} + : {#block.getSetValue()!=null}? sb=setBlock + { + code.setAttribute("alts",sb); + blockNestingLevel--; + } + + | #( BLOCK + ( OPTIONS )? // ignore + ( alt=alternative {r=(GrammarAST)_t;} rew=rewrite + { + if ( this.blockNestingLevel==RULE_BLOCK_NESTING_LEVEL ) { + this.outerAltNum++; + } + // add the rewrite code as just another element in the alt :) + // (unless it's a " -> ..." rewrite + // ( -> ... ) + boolean etc = + r.getType()==REWRITE && + r.getFirstChild()!=null && + r.getFirstChild().getType()==ETC; + if ( rew!=null && !etc ) { alt.setAttribute("rew", rew); } + // add this alt to the list of alts for this block + code.setAttribute("alts",alt); + alt.setAttribute("altNum", Utils.integer(altNum)); + alt.setAttribute("outerAlt", + Boolean.valueOf(blockNestingLevel==RULE_BLOCK_NESTING_LEVEL)); + altNum++; + } + )+ + EOB + ) + {blockNestingLevel--;} + ; + +setBlock returns [StringTemplate code=null] +{ +StringTemplate setcode = null; +if ( blockNestingLevel==RULE_BLOCK_NESTING_LEVEL && grammar.buildAST() ) { + Rule r = grammar.getRule(currentRuleName); + currentAltHasASTRewrite = r.hasRewrite(outerAltNum); + if ( currentAltHasASTRewrite ) { + r.trackTokenReferenceInAlt(#setBlock, outerAltNum); + } +} +} + : s:BLOCK + { + int i = ((TokenWithIndex)#s.getToken()).getIndex(); + if ( blockNestingLevel==RULE_BLOCK_NESTING_LEVEL ) { + setcode = getTokenElementST("matchRuleBlockSet", "set", #s, null, null); + } + else { + setcode = getTokenElementST("matchSet", "set", #s, null, null); + } + setcode.setAttribute("elementIndex", i); + if ( grammar.type!=Grammar.LEXER ) { + generator.generateLocalFOLLOW(#s,"set",currentRuleName,i); + } + setcode.setAttribute("s", + generator.genSetExpr(templates,#s.getSetValue(),1,false)); + StringTemplate altcode=templates.getInstanceOf("alt"); + altcode.setAttribute("elements.{el,line,pos}", + setcode, + Utils.integer(#s.getLine()), + Utils.integer(#s.getColumn()) + ); + altcode.setAttribute("altNum", Utils.integer(1)); + altcode.setAttribute("outerAlt", + Boolean.valueOf(blockNestingLevel==RULE_BLOCK_NESTING_LEVEL)); + if ( !currentAltHasASTRewrite && grammar.buildAST() ) { + altcode.setAttribute("autoAST", Boolean.valueOf(true)); + } + altcode.setAttribute("treeLevel", rewriteTreeNestingLevel); + code = altcode; + } + ; + +exceptionGroup[StringTemplate ruleST] + : ( exceptionHandler[ruleST] )+ (finallyClause[ruleST])? + | finallyClause[ruleST] + ; + +exceptionHandler[StringTemplate ruleST] + : #("catch" ARG_ACTION ACTION) + { + List chunks = generator.translateAction(currentRuleName,#ACTION); + ruleST.setAttribute("exceptions.{decl,action}",#ARG_ACTION.getText(),chunks); + } + ; + +finallyClause[StringTemplate ruleST] + : #("finally" ACTION) + { + List chunks = generator.translateAction(currentRuleName,#ACTION); + ruleST.setAttribute("finally",chunks); + } + ; + +alternative returns [StringTemplate code=templates.getInstanceOf("alt")] +{ +/* +// TODO: can we use Rule.altsWithRewrites??? +if ( blockNestingLevel==RULE_BLOCK_NESTING_LEVEL ) { + GrammarAST aRewriteNode = #alternative.findFirstType(REWRITE); + if ( grammar.buildAST() && + (aRewriteNode!=null|| + (#alternative.getNextSibling()!=null && + #alternative.getNextSibling().getType()==REWRITE)) ) + { + currentAltHasASTRewrite = true; + } + else { + currentAltHasASTRewrite = false; + } +} +*/ +if ( blockNestingLevel==RULE_BLOCK_NESTING_LEVEL && grammar.buildAST() ) { + Rule r = grammar.getRule(currentRuleName); + currentAltHasASTRewrite = r.hasRewrite(outerAltNum); +} +String description = grammar.grammarTreeToString(#alternative, false); +description = generator.target.getTargetStringLiteralFromString(description); +code.setAttribute("description", description); +code.setAttribute("treeLevel", rewriteTreeNestingLevel); +if ( !currentAltHasASTRewrite && grammar.buildAST() ) { + code.setAttribute("autoAST", Boolean.valueOf(true)); +} +StringTemplate e; +} + : #( a:ALT + ( {GrammarAST elAST=(GrammarAST)_t;} + e=element[null,null] + { + if ( e!=null ) { + code.setAttribute("elements.{el,line,pos}", + e, + Utils.integer(elAST.getLine()), + Utils.integer(elAST.getColumn()) + ); + } + } + )+ + EOA + ) + ; + +element[GrammarAST label, GrammarAST astSuffix] returns [StringTemplate code=null] +{ + IntSet elements=null; + GrammarAST ast = null; +} + : #(ROOT code=element[label,#ROOT]) + + | #(BANG code=element[label,#BANG]) + + | #( n:NOT code=notElement[#n, label, astSuffix] ) + + | #( ASSIGN alabel:ID code=element[#alabel,astSuffix] ) + + | #( PLUS_ASSIGN label2:ID code=element[#label2,astSuffix] ) + + | #(CHAR_RANGE a:CHAR_LITERAL b:CHAR_LITERAL) + {code = templates.getInstanceOf("charRangeRef"); + String low = + generator.target.getTargetCharLiteralFromANTLRCharLiteral(generator,a.getText()); + String high = + generator.target.getTargetCharLiteralFromANTLRCharLiteral(generator,b.getText()); + code.setAttribute("a", low); + code.setAttribute("b", high); + if ( label!=null ) { + code.setAttribute("label", label.getText()); + } + } + + | {#element.getSetValue()==null}? code=ebnf + + | code=atom[null, label, astSuffix] + + | code=tree + + | code=element_action + + | (sp:SEMPRED|gsp:GATED_SEMPRED {#sp=#gsp;}) + { + code = templates.getInstanceOf("validateSemanticPredicate"); + code.setAttribute("pred", generator.translateAction(currentRuleName,#sp)); + String description = + generator.target.getTargetStringLiteralFromString(#sp.getText()); + code.setAttribute("description", description); + } + + | SYN_SEMPRED // used only in lookahead; don't generate validating pred + + | BACKTRACK_SEMPRED + + | EPSILON + ; + +element_action returns [StringTemplate code=null] + : act:ACTION + { + code = templates.getInstanceOf("execAction"); + code.setAttribute("action", generator.translateAction(currentRuleName,#act)); + } + | act2:FORCED_ACTION + { + code = templates.getInstanceOf("execForcedAction"); + code.setAttribute("action", generator.translateAction(currentRuleName,#act2)); + } + ; + +notElement[GrammarAST n, GrammarAST label, GrammarAST astSuffix] +returns [StringTemplate code=null] +{ + IntSet elements=null; + String labelText = null; + if ( label!=null ) { + labelText = label.getText(); + } +} + : (assign_c:CHAR_LITERAL + { + int ttype=0; + if ( grammar.type==Grammar.LEXER ) { + ttype = Grammar.getCharValueFromGrammarCharLiteral(assign_c.getText()); + } + else { + ttype = grammar.getTokenType(assign_c.getText()); + } + elements = grammar.complement(ttype); + } + | assign_s:STRING_LITERAL + { + int ttype=0; + if ( grammar.type==Grammar.LEXER ) { + // TODO: error! + } + else { + ttype = grammar.getTokenType(assign_s.getText()); + } + elements = grammar.complement(ttype); + } + | assign_t:TOKEN_REF + { + int ttype = grammar.getTokenType(assign_t.getText()); + elements = grammar.complement(ttype); + } + | assign_st:BLOCK + { + elements = assign_st.getSetValue(); + elements = grammar.complement(elements); + } + ) + { + code = getTokenElementST("matchSet", + "set", + (GrammarAST)n.getFirstChild(), + astSuffix, + labelText); + code.setAttribute("s",generator.genSetExpr(templates,elements,1,false)); + int i = ((TokenWithIndex)n.getToken()).getIndex(); + code.setAttribute("elementIndex", i); + if ( grammar.type!=Grammar.LEXER ) { + generator.generateLocalFOLLOW(n,"set",currentRuleName,i); + } + } + ; + +ebnf returns [StringTemplate code=null] +{ + DFA dfa=null; + GrammarAST b = (GrammarAST)#ebnf.getFirstChild(); + GrammarAST eob = (GrammarAST)#b.getLastChild(); // loops will use EOB DFA +} + : ( {dfa = #ebnf.getLookaheadDFA();} + code=block["block", dfa] + | {dfa = #ebnf.getLookaheadDFA();} + #( OPTIONAL code=block["optionalBlock", dfa] ) + | {dfa = #eob.getLookaheadDFA();} + #( CLOSURE code=block["closureBlock", dfa] ) + | {dfa = #eob.getLookaheadDFA();} + #( POSITIVE_CLOSURE code=block["positiveClosureBlock", dfa] ) + ) + { + String description = grammar.grammarTreeToString(#ebnf, false); + description = generator.target.getTargetStringLiteralFromString(description); + code.setAttribute("description", description); + } + ; + +tree returns [StringTemplate code=templates.getInstanceOf("tree")] +{ +StringTemplate el=null, act=null; +GrammarAST elAST=null, actAST=null; +NFAState afterDOWN = (NFAState)tree_AST_in.NFATreeDownState.transition(0).target; +LookaheadSet s = grammar.LOOK(afterDOWN); +if ( s.member(Label.UP) ) { + // nullable child list if we can see the UP as the next token + // we need an "if ( input.LA(1)==Token.DOWN )" gate around + // the child list. + code.setAttribute("nullableChildList", "true"); +} +rewriteTreeNestingLevel++; +code.setAttribute("enclosingTreeLevel", rewriteTreeNestingLevel-1); +code.setAttribute("treeLevel", rewriteTreeNestingLevel); +Rule r = grammar.getRule(currentRuleName); +GrammarAST rootSuffix = null; +if ( grammar.buildAST() && !r.hasRewrite(outerAltNum) ) { + rootSuffix = new GrammarAST(ROOT,"ROOT"); +} +} + : #( TREE_BEGIN {elAST=(GrammarAST)_t;} + el=element[null,rootSuffix] + { + code.setAttribute("root.{el,line,pos}", + el, + Utils.integer(elAST.getLine()), + Utils.integer(elAST.getColumn()) + ); + } + // push all the immediately-following actions out before children + // so actions aren't guarded by the "if (input.LA(1)==Token.DOWN)" + // guard in generated code. + ( options {greedy=true;}: + {actAST=(GrammarAST)_t;} + act=element_action + { + code.setAttribute("actionsAfterRoot.{el,line,pos}", + act, + Utils.integer(actAST.getLine()), + Utils.integer(actAST.getColumn()) + ); + } + )* + ( {elAST=(GrammarAST)_t;} + el=element[null,null] + { + code.setAttribute("children.{el,line,pos}", + el, + Utils.integer(elAST.getLine()), + Utils.integer(elAST.getColumn()) + ); + } + )* + ) + {rewriteTreeNestingLevel--;} + ; + +atom[GrammarAST scope, GrammarAST label, GrammarAST astSuffix] + returns [StringTemplate code=null] +{ +String labelText=null; +if ( label!=null ) { + labelText = label.getText(); +} +if ( grammar.type!=Grammar.LEXER && + (#atom.getType()==RULE_REF||#atom.getType()==TOKEN_REF|| + #atom.getType()==CHAR_LITERAL||#atom.getType()==STRING_LITERAL) ) +{ + Rule encRule = grammar.getRule(((GrammarAST)#atom).enclosingRuleName); + if ( encRule!=null && encRule.hasRewrite(outerAltNum) && astSuffix!=null ) { + ErrorManager.grammarError(ErrorManager.MSG_AST_OP_IN_ALT_WITH_REWRITE, + grammar, + ((GrammarAST)#atom).getToken(), + ((GrammarAST)#atom).enclosingRuleName, + new Integer(outerAltNum)); + astSuffix = null; + } +} +} + : #( r:RULE_REF (rarg:ARG_ACTION)? ) + { + grammar.checkRuleReference(scope, #r, #rarg, currentRuleName); + String scopeName = null; + if ( scope!=null ) { + scopeName = scope.getText(); + } + Rule rdef = grammar.getRule(scopeName, #r.getText()); + // don't insert label=r() if $label.attr not used, no ret value, ... + if ( !rdef.getHasReturnValue() ) { + labelText = null; + } + code = getRuleElementST("ruleRef", #r.getText(), #r, astSuffix, labelText); + code.setAttribute("rule", rdef); + if ( scope!=null ) { // scoped rule ref + Grammar scopeG = grammar.composite.getGrammar(scope.getText()); + code.setAttribute("scope", scopeG); + } + else if ( rdef.grammar != this.grammar ) { // nonlocal + // if rule definition is not in this grammar, it's nonlocal + List rdefDelegates = rdef.grammar.getDelegates(); + if ( rdefDelegates.contains(this.grammar) ) { + code.setAttribute("scope", rdef.grammar); + } + else { + // defining grammar is not a delegate, scope all the + // back to root, which has delegate methods for all + // rules. Don't use scope if we are root. + if ( this.grammar != rdef.grammar.composite.delegateGrammarTreeRoot.grammar ) { + code.setAttribute("scope", + rdef.grammar.composite.delegateGrammarTreeRoot.grammar); + } + } + } + + if ( #rarg!=null ) { + List args = generator.translateAction(currentRuleName,#rarg); + code.setAttribute("args", args); + } + int i = ((TokenWithIndex)r.getToken()).getIndex(); + code.setAttribute("elementIndex", i); + generator.generateLocalFOLLOW(#r,#r.getText(),currentRuleName,i); + #r.code = code; + } + + | #( t:TOKEN_REF (targ:ARG_ACTION)? ) + { + if ( currentAltHasASTRewrite && #t.terminalOptions!=null && + #t.terminalOptions.get(Grammar.defaultTokenOption)!=null ) { + ErrorManager.grammarError(ErrorManager.MSG_HETERO_ILLEGAL_IN_REWRITE_ALT, + grammar, + ((GrammarAST)(#t)).getToken(), + #t.getText()); + } + grammar.checkRuleReference(scope, #t, #targ, currentRuleName); + if ( grammar.type==Grammar.LEXER ) { + if ( grammar.getTokenType(t.getText())==Label.EOF ) { + code = templates.getInstanceOf("lexerMatchEOF"); + } + else { + code = templates.getInstanceOf("lexerRuleRef"); + if ( isListLabel(labelText) ) { + code = templates.getInstanceOf("lexerRuleRefAndListLabel"); + } + String scopeName = null; + if ( scope!=null ) { + scopeName = scope.getText(); + } + Rule rdef2 = grammar.getRule(scopeName, #t.getText()); + code.setAttribute("rule", rdef2); + if ( scope!=null ) { // scoped rule ref + Grammar scopeG = grammar.composite.getGrammar(scope.getText()); + code.setAttribute("scope", scopeG); + } + else if ( rdef2.grammar != this.grammar ) { // nonlocal + // if rule definition is not in this grammar, it's nonlocal + code.setAttribute("scope", rdef2.grammar); + } + if ( #targ!=null ) { + List args = generator.translateAction(currentRuleName,#targ); + code.setAttribute("args", args); + } + } + int i = ((TokenWithIndex)#t.getToken()).getIndex(); + code.setAttribute("elementIndex", i); + if ( label!=null ) code.setAttribute("label", labelText); + } + else { + code = getTokenElementST("tokenRef", #t.getText(), #t, astSuffix, labelText); + String tokenLabel = + generator.getTokenTypeAsTargetLabel(grammar.getTokenType(t.getText())); + code.setAttribute("token",tokenLabel); + if ( !currentAltHasASTRewrite && #t.terminalOptions!=null ) { + code.setAttribute("hetero",#t.terminalOptions.get(Grammar.defaultTokenOption)); + } + int i = ((TokenWithIndex)#t.getToken()).getIndex(); + code.setAttribute("elementIndex", i); + generator.generateLocalFOLLOW(#t,tokenLabel,currentRuleName,i); + } + #t.code = code; + } + + | c:CHAR_LITERAL + { + if ( grammar.type==Grammar.LEXER ) { + code = templates.getInstanceOf("charRef"); + code.setAttribute("char", + generator.target.getTargetCharLiteralFromANTLRCharLiteral(generator,c.getText())); + if ( label!=null ) { + code.setAttribute("label", labelText); + } + } + else { // else it's a token type reference + code = getTokenElementST("tokenRef", "char_literal", #c, astSuffix, labelText); + String tokenLabel = generator.getTokenTypeAsTargetLabel(grammar.getTokenType(c.getText())); + code.setAttribute("token",tokenLabel); + if ( #c.terminalOptions!=null ) { + code.setAttribute("hetero",#c.terminalOptions.get(Grammar.defaultTokenOption)); + } + int i = ((TokenWithIndex)#c.getToken()).getIndex(); + code.setAttribute("elementIndex", i); + generator.generateLocalFOLLOW(#c,tokenLabel,currentRuleName,i); + } + } + + | s:STRING_LITERAL + { + if ( grammar.type==Grammar.LEXER ) { + code = templates.getInstanceOf("lexerStringRef"); + code.setAttribute("string", + generator.target.getTargetStringLiteralFromANTLRStringLiteral(generator,s.getText())); + if ( label!=null ) { + code.setAttribute("label", labelText); + } + } + else { // else it's a token type reference + code = getTokenElementST("tokenRef", "string_literal", #s, astSuffix, labelText); + String tokenLabel = + generator.getTokenTypeAsTargetLabel(grammar.getTokenType(#s.getText())); + code.setAttribute("token",tokenLabel); + if ( #s.terminalOptions!=null ) { + code.setAttribute("hetero",#s.terminalOptions.get(Grammar.defaultTokenOption)); + } + int i = ((TokenWithIndex)#s.getToken()).getIndex(); + code.setAttribute("elementIndex", i); + generator.generateLocalFOLLOW(#s,tokenLabel,currentRuleName,i); + } + } + + | w:WILDCARD + { + code = getWildcardST(#w,astSuffix,labelText); + code.setAttribute("elementIndex", ((TokenWithIndex)#w.getToken()).getIndex()); + } + + | #(DOT ID code=atom[#ID, label, astSuffix]) // scope override on rule or token + + | code=set[label,astSuffix] + ; + +ast_suffix + : ROOT + | BANG + ; + + +set[GrammarAST label, GrammarAST astSuffix] returns [StringTemplate code=null] +{ +String labelText=null; +if ( label!=null ) { + labelText = label.getText(); +} +} + : s:BLOCK // only care that it's a BLOCK with setValue!=null + { + code = getTokenElementST("matchSet", "set", #s, astSuffix, labelText); + int i = ((TokenWithIndex)#s.getToken()).getIndex(); + code.setAttribute("elementIndex", i); + if ( grammar.type!=Grammar.LEXER ) { + generator.generateLocalFOLLOW(#s,"set",currentRuleName,i); + } + code.setAttribute("s", generator.genSetExpr(templates,#s.getSetValue(),1,false)); + } + ; + +setElement + : c:CHAR_LITERAL + | t:TOKEN_REF + | s:STRING_LITERAL + | #(CHAR_RANGE c1:CHAR_LITERAL c2:CHAR_LITERAL) + ; + +// REWRITE stuff + +rewrite returns [StringTemplate code=null] +{ +StringTemplate alt; +if ( #rewrite.getType()==REWRITE ) { + if ( generator.grammar.buildTemplate() ) { + code = templates.getInstanceOf("rewriteTemplate"); + } + else { + code = templates.getInstanceOf("rewriteCode"); + code.setAttribute("treeLevel", Utils.integer(OUTER_REWRITE_NESTING_LEVEL)); + code.setAttribute("rewriteBlockLevel", Utils.integer(OUTER_REWRITE_NESTING_LEVEL)); + code.setAttribute("referencedElementsDeep", + getTokenTypesAsTargetLabels(#rewrite.rewriteRefsDeep)); + Set tokenLabels = + grammar.getLabels(#rewrite.rewriteRefsDeep, Grammar.TOKEN_LABEL); + Set tokenListLabels = + grammar.getLabels(#rewrite.rewriteRefsDeep, Grammar.TOKEN_LIST_LABEL); + Set ruleLabels = + grammar.getLabels(#rewrite.rewriteRefsDeep, Grammar.RULE_LABEL); + Set ruleListLabels = + grammar.getLabels(#rewrite.rewriteRefsDeep, Grammar.RULE_LIST_LABEL); + Set wildcardLabels = + grammar.getLabels(#rewrite.rewriteRefsDeep, Grammar.WILDCARD_TREE_LABEL); + Set wildcardListLabels = + grammar.getLabels(#rewrite.rewriteRefsDeep, Grammar.WILDCARD_TREE_LIST_LABEL); + // just in case they ref $r for "previous value", make a stream + // from retval.tree + StringTemplate retvalST = templates.getInstanceOf("prevRuleRootRef"); + ruleLabels.add(retvalST.toString()); + code.setAttribute("referencedTokenLabels", tokenLabels); + code.setAttribute("referencedTokenListLabels", tokenListLabels); + code.setAttribute("referencedRuleLabels", ruleLabels); + code.setAttribute("referencedRuleListLabels", ruleListLabels); + code.setAttribute("referencedWildcardLabels", wildcardLabels); + code.setAttribute("referencedWildcardListLabels", wildcardListLabels); + } +} +else { + code = templates.getInstanceOf("noRewrite"); + code.setAttribute("treeLevel", Utils.integer(OUTER_REWRITE_NESTING_LEVEL)); + code.setAttribute("rewriteBlockLevel", Utils.integer(OUTER_REWRITE_NESTING_LEVEL)); +} +} + : ( + {rewriteRuleRefs = new HashSet();} + #( r:REWRITE (pred:SEMPRED)? alt=rewrite_alternative ) + { + rewriteBlockNestingLevel = OUTER_REWRITE_NESTING_LEVEL; + List predChunks = null; + if ( #pred!=null ) { + //predText = #pred.getText(); + predChunks = generator.translateAction(currentRuleName,#pred); + } + String description = + grammar.grammarTreeToString(#r,false); + description = generator.target.getTargetStringLiteralFromString(description); + code.setAttribute("alts.{pred,alt,description}", + predChunks, + alt, + description); + pred=null; + } + )* + ; + +rewrite_block[String blockTemplateName] returns [StringTemplate code=null] +{ +rewriteBlockNestingLevel++; +code = templates.getInstanceOf(blockTemplateName); +StringTemplate save_currentBlockST = currentBlockST; +currentBlockST = code; +code.setAttribute("rewriteBlockLevel", rewriteBlockNestingLevel); +StringTemplate alt=null; +} + : #( BLOCK + { + currentBlockST.setAttribute("referencedElementsDeep", + getTokenTypesAsTargetLabels(#BLOCK.rewriteRefsDeep)); + currentBlockST.setAttribute("referencedElements", + getTokenTypesAsTargetLabels(#BLOCK.rewriteRefsShallow)); + } + alt=rewrite_alternative + EOB + ) + { + code.setAttribute("alt", alt); + rewriteBlockNestingLevel--; + currentBlockST = save_currentBlockST; + } + ; + +rewrite_alternative + returns [StringTemplate code=null] +{ +StringTemplate el,st; +} + : {generator.grammar.buildAST()}? + #( a:ALT {code=templates.getInstanceOf("rewriteElementList");} + ( ( {GrammarAST elAST=(GrammarAST)_t;} + el=rewrite_element + {code.setAttribute("elements.{el,line,pos}", + el, + Utils.integer(elAST.getLine()), + Utils.integer(elAST.getColumn()) + ); + } + )+ + | EPSILON + {code.setAttribute("elements.{el,line,pos}", + templates.getInstanceOf("rewriteEmptyAlt"), + Utils.integer(#a.getLine()), + Utils.integer(#a.getColumn()) + ); + } + ) + EOA + ) + + | {generator.grammar.buildTemplate()}? code=rewrite_template + + | // reproduce same input (only AST at moment) + ETC + ; + +rewrite_element returns [StringTemplate code=null] +{ + IntSet elements=null; + GrammarAST ast = null; +} + : code=rewrite_atom[false] + + | code=rewrite_ebnf + + | code=rewrite_tree + ; + +rewrite_ebnf returns [StringTemplate code=null] + : #( OPTIONAL code=rewrite_block["rewriteOptionalBlock"] ) + { + String description = grammar.grammarTreeToString(#rewrite_ebnf, false); + description = generator.target.getTargetStringLiteralFromString(description); + code.setAttribute("description", description); + } + | #( CLOSURE code=rewrite_block["rewriteClosureBlock"] ) + { + String description = grammar.grammarTreeToString(#rewrite_ebnf, false); + description = generator.target.getTargetStringLiteralFromString(description); + code.setAttribute("description", description); + } + | #( POSITIVE_CLOSURE code=rewrite_block["rewritePositiveClosureBlock"] ) + { + String description = grammar.grammarTreeToString(#rewrite_ebnf, false); + description = generator.target.getTargetStringLiteralFromString(description); + code.setAttribute("description", description); + } + ; + +rewrite_tree returns [StringTemplate code=templates.getInstanceOf("rewriteTree")] +{ +rewriteTreeNestingLevel++; +code.setAttribute("treeLevel", rewriteTreeNestingLevel); +code.setAttribute("enclosingTreeLevel", rewriteTreeNestingLevel-1); +StringTemplate r, el; +GrammarAST elAST=null; +} + : #( TREE_BEGIN {elAST=(GrammarAST)_t;} + r=rewrite_atom[true] + {code.setAttribute("root.{el,line,pos}", + r, + Utils.integer(elAST.getLine()), + Utils.integer(elAST.getColumn()) + ); + } + ( {elAST=(GrammarAST)_t;} + el=rewrite_element + { + code.setAttribute("children.{el,line,pos}", + el, + Utils.integer(elAST.getLine()), + Utils.integer(elAST.getColumn()) + ); + } + )* + ) + { + String description = grammar.grammarTreeToString(#rewrite_tree, false); + description = generator.target.getTargetStringLiteralFromString(description); + code.setAttribute("description", description); + rewriteTreeNestingLevel--; + } + ; + +rewrite_atom[boolean isRoot] returns [StringTemplate code=null] + : r:RULE_REF + { + String ruleRefName = #r.getText(); + String stName = "rewriteRuleRef"; + if ( isRoot ) { + stName += "Root"; + } + code = templates.getInstanceOf(stName); + code.setAttribute("rule", ruleRefName); + if ( grammar.getRule(ruleRefName)==null ) { + ErrorManager.grammarError(ErrorManager.MSG_UNDEFINED_RULE_REF, + grammar, + ((GrammarAST)(#r)).getToken(), + ruleRefName); + code = new StringTemplate(); // blank; no code gen + } + else if ( grammar.getRule(currentRuleName) + .getRuleRefsInAlt(ruleRefName,outerAltNum)==null ) + { + ErrorManager.grammarError(ErrorManager.MSG_REWRITE_ELEMENT_NOT_PRESENT_ON_LHS, + grammar, + ((GrammarAST)(#r)).getToken(), + ruleRefName); + code = new StringTemplate(); // blank; no code gen + } + else { + // track all rule refs as we must copy 2nd ref to rule and beyond + if ( !rewriteRuleRefs.contains(ruleRefName) ) { + rewriteRuleRefs.add(ruleRefName); + } + } + } + + | {GrammarAST term=(GrammarAST)_t;} + ( #(tk:TOKEN_REF (arg:ARG_ACTION)?) + | cl:CHAR_LITERAL + | sl:STRING_LITERAL + ) + { + String tokenName = #rewrite_atom.getText(); + String stName = "rewriteTokenRef"; + Rule rule = grammar.getRule(currentRuleName); + Set tokenRefsInAlt = rule.getTokenRefsInAlt(outerAltNum); + boolean createNewNode = !tokenRefsInAlt.contains(tokenName) || #arg!=null; + Object hetero = null; + if ( term.terminalOptions!=null ) { + hetero = term.terminalOptions.get(Grammar.defaultTokenOption); + } + if ( createNewNode ) { + stName = "rewriteImaginaryTokenRef"; + } + if ( isRoot ) { + stName += "Root"; + } + code = templates.getInstanceOf(stName); + code.setAttribute("hetero", hetero); + if ( #arg!=null ) { + List args = generator.translateAction(currentRuleName,#arg); + code.setAttribute("args", args); + } + code.setAttribute("elementIndex", ((TokenWithIndex)#rewrite_atom.getToken()).getIndex()); + int ttype = grammar.getTokenType(tokenName); + String tok = generator.getTokenTypeAsTargetLabel(ttype); + code.setAttribute("token", tok); + if ( grammar.getTokenType(tokenName)==Label.INVALID ) { + ErrorManager.grammarError(ErrorManager.MSG_UNDEFINED_TOKEN_REF_IN_REWRITE, + grammar, + ((GrammarAST)(#rewrite_atom)).getToken(), + tokenName); + code = new StringTemplate(); // blank; no code gen + } + } + + | LABEL + { + String labelName = #LABEL.getText(); + Rule rule = grammar.getRule(currentRuleName); + Grammar.LabelElementPair pair = rule.getLabel(labelName); + if ( labelName.equals(currentRuleName) ) { + // special case; ref to old value via $rule + if ( rule.hasRewrite(outerAltNum) && + rule.getRuleRefsInAlt(outerAltNum).contains(labelName) ) + { + ErrorManager.grammarError(ErrorManager.MSG_RULE_REF_AMBIG_WITH_RULE_IN_ALT, + grammar, + ((GrammarAST)(#LABEL)).getToken(), + labelName); + } + StringTemplate labelST = templates.getInstanceOf("prevRuleRootRef"); + code = templates.getInstanceOf("rewriteRuleLabelRef"+(isRoot?"Root":"")); + code.setAttribute("label", labelST); + } + else if ( pair==null ) { + ErrorManager.grammarError(ErrorManager.MSG_UNDEFINED_LABEL_REF_IN_REWRITE, + grammar, + ((GrammarAST)(#LABEL)).getToken(), + labelName); + code = new StringTemplate(); + } + else { + String stName = null; + switch ( pair.type ) { + case Grammar.TOKEN_LABEL : + stName = "rewriteTokenLabelRef"; + break; + case Grammar.WILDCARD_TREE_LABEL : + stName = "rewriteWildcardLabelRef"; + break; + case Grammar.WILDCARD_TREE_LIST_LABEL : + stName = "rewriteRuleListLabelRef"; // acts like rule ref list for ref + break; + case Grammar.RULE_LABEL : + stName = "rewriteRuleLabelRef"; + break; + case Grammar.TOKEN_LIST_LABEL : + stName = "rewriteTokenListLabelRef"; + break; + case Grammar.RULE_LIST_LABEL : + stName = "rewriteRuleListLabelRef"; + break; + } + if ( isRoot ) { + stName += "Root"; + } + code = templates.getInstanceOf(stName); + code.setAttribute("label", labelName); + } + } + + | ACTION + { + // actions in rewrite rules yield a tree object + String actText = #ACTION.getText(); + List chunks = generator.translateAction(currentRuleName,#ACTION); + code = templates.getInstanceOf("rewriteNodeAction"+(isRoot?"Root":"")); + code.setAttribute("action", chunks); + } + ; + +rewrite_template returns [StringTemplate code=null] + : #( ALT EPSILON EOA ) {code=templates.getInstanceOf("rewriteEmptyTemplate");} + | #( TEMPLATE (id:ID|ind:ACTION) + { + if ( #id!=null && #id.getText().equals("template") ) { + code = templates.getInstanceOf("rewriteInlineTemplate"); + } + else if ( #id!=null ) { + code = templates.getInstanceOf("rewriteExternalTemplate"); + code.setAttribute("name", #id.getText()); + } + else if ( #ind!=null ) { // must be %({expr})(args) + code = templates.getInstanceOf("rewriteIndirectTemplate"); + List chunks=generator.translateAction(currentRuleName,#ind); + code.setAttribute("expr", chunks); + } + } + #( ARGLIST + ( #( ARG arg:ID a:ACTION + { + // must set alt num here rather than in define.g + // because actions like %foo(name={$ID.text}) aren't + // broken up yet into trees. + #a.outerAltNum = this.outerAltNum; + List chunks = generator.translateAction(currentRuleName,#a); + code.setAttribute("args.{name,value}", #arg.getText(), chunks); + } + ) + )* + ) + ( DOUBLE_QUOTE_STRING_LITERAL + { + String sl = #DOUBLE_QUOTE_STRING_LITERAL.getText(); + String t = sl.substring(1,sl.length()-1); // strip quotes + t = generator.target.getTargetStringLiteralFromString(t); + code.setAttribute("template",t); + } + | DOUBLE_ANGLE_STRING_LITERAL + { + String sl = #DOUBLE_ANGLE_STRING_LITERAL.getText(); + String t = sl.substring(2,sl.length()-2); // strip double angle quotes + t = generator.target.getTargetStringLiteralFromString(t); + code.setAttribute("template",t); + } + )? + ) + + | act:ACTION + { + // set alt num for same reason as ARGLIST above + #act.outerAltNum = this.outerAltNum; + code=templates.getInstanceOf("rewriteAction"); + code.setAttribute("action", + generator.translateAction(currentRuleName,#act)); + } + ; diff --git a/antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/define.g b/antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/define.g new file mode 100644 index 0000000..8552886 --- /dev/null +++ b/antlr-3.1.3/tool/src/main/antlr2/org/antlr/grammar/v2/define.g @@ -0,0 +1,646 @@ +header { +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + package org.antlr.grammar.v2; + import java.util.*; + import org.antlr.misc.*; + import org.antlr.tool.*; +} + +class DefineGrammarItemsWalker extends TreeParser; + +options { + importVocab = ANTLR; + ASTLabelType = "GrammarAST"; + codeGenBitsetTestThreshold=999; +} + +{ + +protected Grammar grammar; +protected GrammarAST root; +protected String currentRuleName; +protected GrammarAST currentRewriteBlock; +protected GrammarAST currentRewriteRule; +protected int outerAltNum = 0; +protected int blockLevel = 0; + + public void reportError(RecognitionException ex) { + Token token = null; + if ( ex instanceof MismatchedTokenException ) { + token = ((MismatchedTokenException)ex).token; + } + else if ( ex instanceof NoViableAltException ) { + token = ((NoViableAltException)ex).token; + } + ErrorManager.syntaxError( + ErrorManager.MSG_SYNTAX_ERROR, + grammar, + token, + "define: "+ex.toString(), + ex); + } + + protected void finish() { + trimGrammar(); + } + + /** Remove any lexer rules from a COMBINED; already passed to lexer */ + protected void trimGrammar() { + if ( grammar.type!=Grammar.COMBINED ) { + return; + } + // form is (header ... ) ( grammar ID (scope ...) ... ( rule ... ) ( rule ... ) ... ) + GrammarAST p = root; + // find the grammar spec + while ( !p.getText().equals("grammar") ) { + p = (GrammarAST)p.getNextSibling(); + } + p = (GrammarAST)p.getFirstChild(); // jump down to first child of grammar + // look for first RULE def + GrammarAST prev = p; // points to the ID (grammar name) + while ( p.getType()!=RULE ) { + prev = p; + p = (GrammarAST)p.getNextSibling(); + } + // prev points at last node before first rule subtree at this point + while ( p!=null ) { + String ruleName = p.getFirstChild().getText(); + //System.out.println("rule "+ruleName+" prev="+prev.getText()); + if ( Character.isUpperCase(ruleName.charAt(0)) ) { + // remove lexer rule + prev.setNextSibling(p.getNextSibling()); + } + else { + prev = p; // non-lexer rule; move on + } + p = (GrammarAST)p.getNextSibling(); + } + //System.out.println("root after removal is: "+root.toStringList()); + } + + protected void trackInlineAction(GrammarAST actionAST) { + Rule r = grammar.getRule(currentRuleName); + if ( r!=null ) { + r.trackInlineAction(actionAST); + } + } + +} + +grammar[Grammar g] +{ +grammar = g; +root = #grammar; +} + : ( #( LEXER_GRAMMAR {grammar.type = Grammar.LEXER;} grammarSpec ) + | #( PARSER_GRAMMAR {grammar.type = Grammar.PARSER;} grammarSpec ) + | #( TREE_GRAMMAR {grammar.type = Grammar.TREE_PARSER;} grammarSpec ) + | #( COMBINED_GRAMMAR {grammar.type = Grammar.COMBINED;} grammarSpec ) + ) + {finish();} + ; + +attrScope + : #( "scope" name:ID attrs:ACTION ) + { + AttributeScope scope = grammar.defineGlobalScope(name.getText(),#attrs.token); + scope.isDynamicGlobalScope = true; + scope.addAttributes(attrs.getText(), ';'); + } + ; + +grammarSpec +{ +Map opts=null; +Token optionsStartToken=null; +} + : id:ID + (cmt:DOC_COMMENT)? + //(#(OPTIONS .))? // already parsed these in assign.types.g + ( {optionsStartToken=((GrammarAST)_t).getToken();} + optionsSpec + )? + (delegateGrammars)? + (tokensSpec)? + (attrScope)* + (actions)? + rules + ; + +actions + : ( action )+ + ; + +action +{ +String scope=null; +GrammarAST nameAST=null, actionAST=null; +} + : #(amp:AMPERSAND id1:ID + ( id2:ID a1:ACTION + {scope=#id1.getText(); nameAST=#id2; actionAST=#a1;} + | a2:ACTION + {scope=null; nameAST=#id1; actionAST=#a2;} + ) + ) + { + grammar.defineNamedAction(#amp,scope,nameAST,actionAST); + } + ; + +optionsSpec + : OPTIONS + ; + +delegateGrammars + : #( "import" ( #(ASSIGN ID ID) | ID )+ ) + ; + +tokensSpec + : #( TOKENS ( tokenSpec )+ ) + ; + +tokenSpec + : t:TOKEN_REF + | #( ASSIGN + t2:TOKEN_REF + ( s:STRING_LITERAL + | c:CHAR_LITERAL + ) + ) + ; + +rules + : ( rule )+ + ; + +rule +{ +String mod=null; +String name=null; +Map opts=null; +Rule r = null; +} + : #( RULE id:ID {opts = #RULE.getBlockOptions();} + (mod=modifier)? + #( ARG (args:ARG_ACTION)? ) + #( RET (ret:ARG_ACTION)? ) + (optionsSpec)? + { + name = #id.getText(); + currentRuleName = name; + if ( Character.isUpperCase(name.charAt(0)) && + grammar.type==Grammar.COMBINED ) + { + // a merged grammar spec, track lexer rules and send to another grammar + grammar.defineLexerRuleFoundInParser(#id.getToken(), #rule); + } + else { + int numAlts = countAltsForRule(#rule); + grammar.defineRule(#id.getToken(), mod, opts, #rule, #args, numAlts); + r = grammar.getRule(name); + if ( #args!=null ) { + r.parameterScope = grammar.createParameterScope(name,#args.token); + r.parameterScope.addAttributes(#args.getText(), ','); + } + if ( #ret!=null ) { + r.returnScope = grammar.createReturnScope(name,#ret.token); + r.returnScope.addAttributes(#ret.getText(), ','); + } + } + } + (ruleScopeSpec[r])? + (ruleAction[r])* + {this.blockLevel=0;} + b:block + (exceptionGroup)? + EOR + { + // copy rule options into the block AST, which is where + // the analysis will look for k option etc... + #b.setBlockOptions(opts); + } + ) + ; + +countAltsForRule returns [int n=0] + : #( RULE id:ID (modifier)? ARG RET (OPTIONS)? ("scope")? (AMPERSAND)* + #( BLOCK (OPTIONS)? (ALT (REWRITE)* {n++;})+ EOB ) + (exceptionGroup)? + EOR + ) + ; + +ruleAction[Rule r] + : #(amp:AMPERSAND id:ID a:ACTION ) {if (r!=null) r.defineNamedAction(#amp,#id,#a);} + ; + +modifier returns [String mod] +{ +mod = #modifier.getText(); +} + : "protected" + | "public" + | "private" + | "fragment" + ; + +ruleScopeSpec[Rule r] + : #( "scope" + ( attrs:ACTION + { + r.ruleScope = grammar.createRuleScope(r.name,#attrs.token); + r.ruleScope.isDynamicRuleScope = true; + r.ruleScope.addAttributes(#attrs.getText(), ';'); + } + )? + ( uses:ID + { + if ( grammar.getGlobalScope(#uses.getText())==null ) { + ErrorManager.grammarError(ErrorManager.MSG_UNKNOWN_DYNAMIC_SCOPE, + grammar, + #uses.token, + #uses.getText()); + } + else { + if ( r.useScopes==null ) {r.useScopes=new ArrayList();} + r.useScopes.add(#uses.getText()); + } + } + )* + ) + ; + +block +{ +this.blockLevel++; +if ( this.blockLevel==1 ) {this.outerAltNum=1;} +} + : #( BLOCK + (optionsSpec)? + (blockAction)* + ( alternative rewrite + {if ( this.blockLevel==1 ) {this.outerAltNum++;}} + )+ + EOB + ) + {this.blockLevel--;} + ; + +// TODO: this does nothing now! subrules cannot have init actions. :( +blockAction + : #(amp:AMPERSAND id:ID a:ACTION ) // {r.defineAction(#amp,#id,#a);} + ; + +alternative +{ +if ( grammar.type!=Grammar.LEXER && grammar.getOption("output")!=null && blockLevel==1 ) { + GrammarAST aRewriteNode = #alternative.findFirstType(REWRITE); // alt itself has rewrite? + GrammarAST rewriteAST = (GrammarAST)#alternative.getNextSibling(); + // we have a rewrite if alt uses it inside subrule or this alt has one + // but don't count -> ... rewrites, which mean "do default auto construction" + if ( aRewriteNode!=null|| + (rewriteAST!=null && + rewriteAST.getType()==REWRITE && + rewriteAST.getFirstChild()!=null && + rewriteAST.getFirstChild().getType()!=ETC) ) + { + Rule r = grammar.getRule(currentRuleName); + r.trackAltsWithRewrites(#alternative,this.outerAltNum); + } +} +} + : #( ALT (element)+ EOA ) + ; + +exceptionGroup + : ( exceptionHandler )+ (finallyClause)? + | finallyClause + ; + +exceptionHandler + : #("catch" ARG_ACTION ACTION) {trackInlineAction(#ACTION);} + ; + +finallyClause + : #("finally" ACTION) {trackInlineAction(#ACTION);} + ; + +element + : #(ROOT element) + | #(BANG element) + | atom[null] + | #(NOT element) + | #(RANGE atom[null] atom[null]) + | #(CHAR_RANGE atom[null] atom[null]) + | #(ASSIGN id:ID el:element) + { + if ( #el.getType()==ANTLRParser.ROOT || + #el.getType()==ANTLRParser.BANG ) + { + #el = (GrammarAST)#el.getFirstChild(); + } + if ( #el.getType()==RULE_REF) { + grammar.defineRuleRefLabel(currentRuleName,#id.getToken(),#el); + } + else if ( #el.getType()==WILDCARD && grammar.type==Grammar.TREE_PARSER ) { + grammar.defineWildcardTreeLabel(currentRuleName,#id.getToken(),#el); + } + else { + grammar.defineTokenRefLabel(currentRuleName,#id.getToken(),#el); + } + } + | #( PLUS_ASSIGN id2:ID a2:element + { + if ( #a2.getType()==ANTLRParser.ROOT || + #a2.getType()==ANTLRParser.BANG ) + { + #a2 = (GrammarAST)#a2.getFirstChild(); + } + if ( #a2.getType()==RULE_REF ) { + grammar.defineRuleListLabel(currentRuleName,#id2.getToken(),#a2); + } + else if ( #a2.getType()==WILDCARD && grammar.type==Grammar.TREE_PARSER ) { + grammar.defineWildcardTreeListLabel(currentRuleName,#id2.getToken(),#a2); + } + else { + grammar.defineTokenListLabel(currentRuleName,#id2.getToken(),#a2); + } + } + ) + | ebnf + | tree + | #( SYNPRED block ) + | act:ACTION + { + #act.outerAltNum = this.outerAltNum; + trackInlineAction(#act); + } + | act2:FORCED_ACTION + { + #act2.outerAltNum = this.outerAltNum; + trackInlineAction(#act2); + } + | SEMPRED + { + #SEMPRED.outerAltNum = this.outerAltNum; + trackInlineAction(#SEMPRED); + } + | SYN_SEMPRED + | BACKTRACK_SEMPRED + | GATED_SEMPRED + { + #GATED_SEMPRED.outerAltNum = this.outerAltNum; + trackInlineAction(#GATED_SEMPRED); + } + | EPSILON + ; + +ebnf: (dotLoop)=> dotLoop // .* or .+ + | block + | #( OPTIONAL block ) + | #( CLOSURE block ) + | #( POSITIVE_CLOSURE block ) + ; + +/** Track the .* and .+ idioms and make them nongreedy by default. + */ +dotLoop +{ + GrammarAST block = (GrammarAST)#dotLoop.getFirstChild(); +} + : ( #( CLOSURE dotBlock ) + | #( POSITIVE_CLOSURE dotBlock ) + ) + { + Map opts=new HashMap(); + opts.put("greedy", "false"); + if ( grammar.type!=Grammar.LEXER ) { + // parser grammars assume k=1 for .* loops + // otherwise they (analysis?) look til EOF! + opts.put("k", Utils.integer(1)); + } + block.setOptions(grammar,opts); + } + ; + +dotBlock + : #( BLOCK #( ALT WILDCARD EOA ) EOB ) + ; + +tree: #(TREE_BEGIN element (element)*) + ; + +atom[GrammarAST scope] + : #( rr:RULE_REF (rarg:ARG_ACTION)? ) + { + grammar.altReferencesRule(currentRuleName, scope, #rr, this.outerAltNum); + if ( #rarg!=null ) { + #rarg.outerAltNum = this.outerAltNum; + trackInlineAction(#rarg); + } + } + | #( t:TOKEN_REF (targ:ARG_ACTION )? ) + { + if ( #targ!=null ) { + #targ.outerAltNum = this.outerAltNum; + trackInlineAction(#targ); + } + if ( grammar.type==Grammar.LEXER ) { + grammar.altReferencesRule(currentRuleName, scope, #t, this.outerAltNum); + } + else { + grammar.altReferencesTokenID(currentRuleName, #t, this.outerAltNum); + } + } + | c:CHAR_LITERAL + { + if ( grammar.type!=Grammar.LEXER ) { + Rule rule = grammar.getRule(currentRuleName); + if ( rule!=null ) { + rule.trackTokenReferenceInAlt(#c, outerAltNum); + } + } + } + | s:STRING_LITERAL + { + if ( grammar.type!=Grammar.LEXER ) { + Rule rule = grammar.getRule(currentRuleName); + if ( rule!=null ) { + rule.trackTokenReferenceInAlt(#s, outerAltNum); + } + } + } + | WILDCARD + | #(DOT ID atom[#ID]) // scope override on rule + ; + +ast_suffix + : ROOT + | BANG + ; + +rewrite +{ +currentRewriteRule = #rewrite; // has to execute during guessing +if ( grammar.buildAST() ) { + #rewrite.rewriteRefsDeep = new HashSet(); +} +} + : ( + #( REWRITE (pred:SEMPRED)? rewrite_alternative ) + { + if ( #pred!=null ) { + #pred.outerAltNum = this.outerAltNum; + trackInlineAction(#pred); + } + } + )* + //{System.out.println("-> refs = "+#rewrite.rewriteRefs);} + ; + +rewrite_block +{ +GrammarAST enclosingBlock = currentRewriteBlock; +if ( inputState.guessing==0 ) { // don't do if guessing + currentRewriteBlock=#rewrite_block; // pts to BLOCK node + currentRewriteBlock.rewriteRefsShallow = new HashSet(); + currentRewriteBlock.rewriteRefsDeep = new HashSet(); +} +} + : #( BLOCK rewrite_alternative EOB ) + //{System.out.println("atoms="+currentRewriteBlock.rewriteRefs);} + { + // copy the element refs in this block to the surrounding block + if ( enclosingBlock!=null ) { + enclosingBlock.rewriteRefsDeep + .addAll(currentRewriteBlock.rewriteRefsShallow); + } + currentRewriteBlock = enclosingBlock; // restore old BLOCK ptr + } + ; + +rewrite_alternative + : {grammar.buildAST()}? + #( a:ALT ( ( rewrite_element )+ | EPSILON ) EOA ) + | {grammar.buildTemplate()}? rewrite_template + | ETC {this.blockLevel==1}? // only valid as outermost rewrite + + ; + +rewrite_element + : rewrite_atom + | rewrite_ebnf + | rewrite_tree + ; + +rewrite_ebnf + : #( OPTIONAL rewrite_block ) + | #( CLOSURE rewrite_block ) + | #( POSITIVE_CLOSURE rewrite_block ) + ; + +rewrite_tree + : #( TREE_BEGIN rewrite_atom ( rewrite_element )* ) + ; + +rewrite_atom +{ +Rule r = grammar.getRule(currentRuleName); +Set tokenRefsInAlt = r.getTokenRefsInAlt(outerAltNum); +boolean imaginary = + #rewrite_atom.getType()==TOKEN_REF && + !tokenRefsInAlt.contains(#rewrite_atom.getText()); +if ( !imaginary && grammar.buildAST() && + (#rewrite_atom.getType()==RULE_REF || + #rewrite_atom.getType()==LABEL || + #rewrite_atom.getType()==TOKEN_REF || + #rewrite_atom.getType()==CHAR_LITERAL || + #rewrite_atom.getType()==STRING_LITERAL) ) +{ + // track per block and for entire rewrite rule + if ( currentRewriteBlock!=null ) { + currentRewriteBlock.rewriteRefsShallow.add(#rewrite_atom); + currentRewriteBlock.rewriteRefsDeep.add(#rewrite_atom); + } + currentRewriteRule.rewriteRefsDeep.add(#rewrite_atom); +} +} + : RULE_REF + | ( #(TOKEN_REF + (arg:ARG_ACTION)? + ) + | CHAR_LITERAL + | STRING_LITERAL + ) + { + if ( #arg!=null ) { + #arg.outerAltNum = this.outerAltNum; + trackInlineAction(#arg); + } + } + + | LABEL + + | ACTION + { + #ACTION.outerAltNum = this.outerAltNum; + trackInlineAction(#ACTION); + } + ; + +rewrite_template + : #( ALT EPSILON EOA ) + | #( TEMPLATE (id:ID|ind:ACTION) + #( ARGLIST + ( #( ARG arg:ID a:ACTION ) + { + #a.outerAltNum = this.outerAltNum; + trackInlineAction(#a); + } + )* + ) + { + if ( #ind!=null ) { + #ind.outerAltNum = this.outerAltNum; + trackInlineAction(#ind); + } + } + + ( DOUBLE_QUOTE_STRING_LITERAL + | DOUBLE_ANGLE_STRING_LITERAL + )? + ) + + | act:ACTION + { + #act.outerAltNum = this.outerAltNum; + trackInlineAction(#act); + } + ; diff --git a/antlr-3.1.3/tool/src/main/java/org/antlr/Tool.java b/antlr-3.1.3/tool/src/main/java/org/antlr/Tool.java new file mode 100644 index 0000000..88a9971 --- /dev/null +++ b/antlr-3.1.3/tool/src/main/java/org/antlr/Tool.java @@ -0,0 +1,1326 @@ +/* +[The "BSD licence"] +Copyright (c) 2005-2008 Terence Parr +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.antlr; + +import antlr.TokenStreamException; +import antlr.RecognitionException; +import antlr.ANTLRException; +import org.antlr.analysis.*; +import org.antlr.codegen.CodeGenerator; +import org.antlr.runtime.misc.Stats; +import org.antlr.tool.*; +import org.antlr.misc.Graph; + +import java.io.*; +import java.util.*; + +/** The main ANTLR entry point. Read a grammar and generate a parser. */ +public class Tool { + + public final Properties antlrSettings = new Properties(); + public String VERSION = "!Unknown version!"; + //public static final String VERSION = "${project.version}"; + public static final String UNINITIALIZED_DIR = ""; + private List grammarFileNames = new ArrayList(); + private boolean generate_NFA_dot = false; + private boolean generate_DFA_dot = false; + private String outputDirectory = "."; + private boolean haveOutputDir = false; + private String inputDirectory = null; + private String parentGrammarDirectory; + private String grammarOutputDirectory; + private boolean haveInputDir = false; + private String libDirectory = "."; + private boolean debug = false; + private boolean trace = false; + private boolean profile = false; + private boolean report = false; + private boolean printGrammar = false; + private boolean depend = false; + private boolean forceAllFilesToOutputDir = false; + private boolean forceRelativeOutput = false; + protected boolean deleteTempLexer = true; + private boolean verbose = false; + /** Don't process grammar file if generated files are newer than grammar */ + private boolean make = false; + private boolean showBanner = true; + private static boolean exitNow = false; + + // The internal options are for my use on the command line during dev + // + public static boolean internalOption_PrintGrammarTree = false; + public static boolean internalOption_PrintDFA = false; + public static boolean internalOption_ShowNFAConfigsInDFA = false; + public static boolean internalOption_watchNFAConversion = false; + + /** + * A list of dependency generators that are accumulated aaaas (and if) the + * tool is required to sort the provided grammars into build dependency order. + protected Map buildDependencyGenerators; + */ + + public static void main(String[] args) { + Tool antlr = new Tool(args); + + if (!exitNow) { + antlr.process(); + if (ErrorManager.getNumErrors() > 0) { + System.exit(1); + } + System.exit(0); + } + } + + /** + * Load the properties file org/antlr/antlr.properties and populate any + * variables that must be initialized from it, such as the version of ANTLR. + */ + private void loadResources() { + InputStream in = null; + in = this.getClass().getResourceAsStream("antlr.properties"); + + // If we found the resource, then load it, otherwise revert to the + // defaults. + // + if (in != null) { + try { + // Load the resources into the map + // + antlrSettings.load(in); + + // Set any variables that we need to populate from the resources + // + VERSION = antlrSettings.getProperty("antlr.version"); + + } catch (Exception e) { + // Do nothing, just leave the defaults in place + } + } + } + + public Tool() { + loadResources(); + } + + public Tool(String[] args) { + + loadResources(); + + // Set all the options and pick up all the named grammar files + // + processArgs(args); + + + } + + public void processArgs(String[] args) { + + if (isVerbose()) { + ErrorManager.info("ANTLR Parser Generator Version " + VERSION); + showBanner = false; + } + + if (args == null || args.length == 0) { + help(); + return; + } + for (int i = 0; i < args.length; i++) { + if (args[i].equals("-o") || args[i].equals("-fo")) { + if (i + 1 >= args.length) { + System.err.println("missing output directory with -fo/-o option; ignoring"); + } + else { + if (args[i].equals("-fo")) { // force output into dir + setForceAllFilesToOutputDir(true); + } + i++; + outputDirectory = args[i]; + if (outputDirectory.endsWith("/") || + outputDirectory.endsWith("\\")) { + outputDirectory = + outputDirectory.substring(0, getOutputDirectory().length() - 1); + } + File outDir = new File(outputDirectory); + haveOutputDir = true; + if (outDir.exists() && !outDir.isDirectory()) { + ErrorManager.error(ErrorManager.MSG_OUTPUT_DIR_IS_FILE, outputDirectory); + setLibDirectory("."); + } + } + } + else if (args[i].equals("-lib")) { + if (i + 1 >= args.length) { + System.err.println("missing library directory with -lib option; ignoring"); + } + else { + i++; + setLibDirectory(args[i]); + if (getLibraryDirectory().endsWith("/") || + getLibraryDirectory().endsWith("\\")) { + setLibDirectory(getLibraryDirectory().substring(0, getLibraryDirectory().length() - 1)); + } + File outDir = new File(getLibraryDirectory()); + if (!outDir.exists()) { + ErrorManager.error(ErrorManager.MSG_DIR_NOT_FOUND, getLibraryDirectory()); + setLibDirectory("."); + } + } + } + else if (args[i].equals("-nfa")) { + setGenerate_NFA_dot(true); + } + else if (args[i].equals("-dfa")) { + setGenerate_DFA_dot(true); + } + else if (args[i].equals("-debug")) { + setDebug(true); + } + else if (args[i].equals("-trace")) { + setTrace(true); + } + else if (args[i].equals("-report")) { + setReport(true); + } + else if (args[i].equals("-profile")) { + setProfile(true); + } + else if (args[i].equals("-print")) { + setPrintGrammar(true); + } + else if (args[i].equals("-depend")) { + setDepend(true); + } + else if (args[i].equals("-verbose")) { + setVerbose(true); + } + else if (args[i].equals("-version")) { + version(); + exitNow = true; + } + else if (args[i].equals("-make")) { + setMake(true); + } + else if (args[i].equals("-message-format")) { + if (i + 1 >= args.length) { + System.err.println("missing output format with -message-format option; using default"); + } + else { + i++; + ErrorManager.setFormat(args[i]); + } + } + else if (args[i].equals("-Xgrtree")) { + internalOption_PrintGrammarTree = true; // print grammar tree + } + else if (args[i].equals("-Xdfa")) { + internalOption_PrintDFA = true; + } + else if (args[i].equals("-Xnoprune")) { + DFAOptimizer.PRUNE_EBNF_EXIT_BRANCHES = false; + } + else if (args[i].equals("-Xnocollapse")) { + DFAOptimizer.COLLAPSE_ALL_PARALLEL_EDGES = false; + } + else if (args[i].equals("-Xdbgconversion")) { + NFAToDFAConverter.debug = true; + } + else if (args[i].equals("-Xmultithreaded")) { + NFAToDFAConverter.SINGLE_THREADED_NFA_CONVERSION = false; + } + else if (args[i].equals("-Xnomergestopstates")) { + DFAOptimizer.MERGE_STOP_STATES = false; + } + else if (args[i].equals("-Xdfaverbose")) { + internalOption_ShowNFAConfigsInDFA = true; + } + else if (args[i].equals("-Xwatchconversion")) { + internalOption_watchNFAConversion = true; + } + else if (args[i].equals("-XdbgST")) { + CodeGenerator.EMIT_TEMPLATE_DELIMITERS = true; + } + else if (args[i].equals("-Xmaxinlinedfastates")) { + if (i + 1 >= args.length) { + System.err.println("missing max inline dfa states -Xmaxinlinedfastates option; ignoring"); + } + else { + i++; + CodeGenerator.MAX_ACYCLIC_DFA_STATES_INLINE = Integer.parseInt(args[i]); + } + } + else if (args[i].equals("-Xm")) { + if (i + 1 >= args.length) { + System.err.println("missing max recursion with -Xm option; ignoring"); + } + else { + i++; + NFAContext.MAX_SAME_RULE_INVOCATIONS_PER_NFA_CONFIG_STACK = Integer.parseInt(args[i]); + } + } + else if (args[i].equals("-Xmaxdfaedges")) { + if (i + 1 >= args.length) { + System.err.println("missing max number of edges with -Xmaxdfaedges option; ignoring"); + } + else { + i++; + DFA.MAX_STATE_TRANSITIONS_FOR_TABLE = Integer.parseInt(args[i]); + } + } + else if (args[i].equals("-Xconversiontimeout")) { + if (i + 1 >= args.length) { + System.err.println("missing max time in ms -Xconversiontimeout option; ignoring"); + } + else { + i++; + DFA.MAX_TIME_PER_DFA_CREATION = Integer.parseInt(args[i]); + } + } + else if (args[i].equals("-Xnfastates")) { + DecisionProbe.verbose = true; + } + else if (args[i].equals("-X")) { + Xhelp(); + } + else { + if (args[i].charAt(0) != '-') { + // Must be the grammar file + addGrammarFile(args[i]); + } + } + } + } + + /* + protected void checkForInvalidArguments(String[] args, BitSet cmdLineArgValid) { + // check for invalid command line args + for (int a = 0; a < args.length; a++) { + if (!cmdLineArgValid.member(a)) { + System.err.println("invalid command-line argument: " + args[a] + "; ignored"); + } + } + } + */ + + /** + * Checks to see if the list of outputFiles all exist, and have + * last-modified timestamps which are later than the last-modified + * timestamp of all the grammar files involved in build the output + * (imports must be checked). If these conditions hold, the method + * returns false, otherwise, it returns true. + * + * @param grammarFileName The grammar file we are checking + */ + public boolean buildRequired(String grammarFileName) + throws IOException, ANTLRException + { + BuildDependencyGenerator bd = + new BuildDependencyGenerator(this, grammarFileName); + + List outputFiles = bd.getGeneratedFileList(); + List inputFiles = bd.getDependenciesFileList(); + File grammarFile = new File(grammarFileName); + long grammarLastModified = grammarFile.lastModified(); + for (File outputFile : outputFiles) { + if (!outputFile.exists() || grammarLastModified > outputFile.lastModified()) { + // One of the output files does not exist or is out of date, so we must build it + return true; + } + + // Check all of the imported grammars and see if any of these are younger + // than any of the output files. + if (inputFiles != null) { + for (File inputFile : inputFiles) { + if (inputFile.lastModified() > outputFile.lastModified()) { + // One of the imported grammar files has been updated so we must build + return true; + } + } + } + } + if (isVerbose()) { + System.out.println("Grammar " + grammarFileName + " is up to date - build skipped"); + } + return false; + } + + public void process() { + boolean exceptionWhenWritingLexerFile = false; + String lexerGrammarFileName = null; // necessary at this scope to have access in the catch below + + // Have to be tricky here when Maven or build tools call in and must new Tool() + // before setting options. The banner won't display that way! + if (isVerbose() && showBanner) { + ErrorManager.info("ANTLR Parser Generator Version " + VERSION); + showBanner = false; + } + + try { + sortGrammarFiles(); // update grammarFileNames + } + catch (Exception e) { + ErrorManager.error(ErrorManager.MSG_INTERNAL_ERROR,e); + } + catch (Error e) { + ErrorManager.error(ErrorManager.MSG_INTERNAL_ERROR, e); + } + + for (String grammarFileName : grammarFileNames) { + // If we are in make mode (to support build tools like Maven) and the + // file is already up to date, then we do not build it (and in verbose mode + // we will say so). + if (make) { + try { + if ( !buildRequired(grammarFileName) ) continue; + } + catch (Exception e) { + ErrorManager.error(ErrorManager.MSG_INTERNAL_ERROR,e); + } + } + + if (isVerbose() && !isDepend()) { + System.out.println(grammarFileName); + } + try { + if (isDepend()) { + BuildDependencyGenerator dep = + new BuildDependencyGenerator(this, grammarFileName); + /* + List outputFiles = dep.getGeneratedFileList(); + List dependents = dep.getDependenciesFileList(); + System.out.println("output: "+outputFiles); + System.out.println("dependents: "+dependents); + */ + System.out.println(dep.getDependencies()); + continue; + } + + Grammar grammar = getRootGrammar(grammarFileName); + // we now have all grammars read in as ASTs + // (i.e., root and all delegates) + grammar.composite.assignTokenTypes(); + grammar.composite.defineGrammarSymbols(); + grammar.composite.createNFAs(); + + generateRecognizer(grammar); + + if (isPrintGrammar()) { + grammar.printGrammar(System.out); + } + + if (isReport()) { + GrammarReport greport = new GrammarReport(grammar); + System.out.println(greport.toString()); + // print out a backtracking report too (that is not encoded into log) + System.out.println(greport.getBacktrackingReport()); + // same for aborted NFA->DFA conversions + System.out.println(greport.getAnalysisTimeoutReport()); + } + if (isProfile()) { + GrammarReport greport = new GrammarReport(grammar); + Stats.writeReport(GrammarReport.GRAMMAR_STATS_FILENAME, + greport.toNotifyString()); + } + + // now handle the lexer if one was created for a merged spec + String lexerGrammarStr = grammar.getLexerGrammar(); + //System.out.println("lexer grammar:\n"+lexerGrammarStr); + if (grammar.type == Grammar.COMBINED && lexerGrammarStr != null) { + lexerGrammarFileName = grammar.getImplicitlyGeneratedLexerFileName(); + try { + Writer w = getOutputFile(grammar, lexerGrammarFileName); + w.write(lexerGrammarStr); + w.close(); + } + catch (IOException e) { + // emit different error message when creating the implicit lexer fails + // due to write permission error + exceptionWhenWritingLexerFile = true; + throw e; + } + try { + StringReader sr = new StringReader(lexerGrammarStr); + Grammar lexerGrammar = new Grammar(); + lexerGrammar.composite.watchNFAConversion = internalOption_watchNFAConversion; + lexerGrammar.implicitLexer = true; + lexerGrammar.setTool(this); + File lexerGrammarFullFile = + new File(getFileDirectory(lexerGrammarFileName), lexerGrammarFileName); + lexerGrammar.setFileName(lexerGrammarFullFile.toString()); + + lexerGrammar.importTokenVocabulary(grammar); + lexerGrammar.parseAndBuildAST(sr); + + sr.close(); + + lexerGrammar.composite.assignTokenTypes(); + lexerGrammar.composite.defineGrammarSymbols(); + lexerGrammar.composite.createNFAs(); + + generateRecognizer(lexerGrammar); + } + finally { + // make sure we clean up + if (deleteTempLexer) { + File outputDir = getOutputDirectory(lexerGrammarFileName); + File outputFile = new File(outputDir, lexerGrammarFileName); + outputFile.delete(); + } + } + } + } + catch (IOException e) { + if (exceptionWhenWritingLexerFile) { + ErrorManager.error(ErrorManager.MSG_CANNOT_WRITE_FILE, + lexerGrammarFileName, e); + } + else { + ErrorManager.error(ErrorManager.MSG_CANNOT_OPEN_FILE, + grammarFileName); + } + } + catch (Exception e) { + ErrorManager.error(ErrorManager.MSG_INTERNAL_ERROR, grammarFileName, e); + } + /* + finally { + System.out.println("creates="+ Interval.creates); + System.out.println("hits="+ Interval.hits); + System.out.println("misses="+ Interval.misses); + System.out.println("outOfRange="+ Interval.outOfRange); + } + */ + } + } + + public void sortGrammarFiles() throws IOException { + //System.out.println("Grammar names "+getGrammarFileNames()); + Graph g = new Graph(); + for (String gfile : getGrammarFileNames()) { + GrammarSpelunker grammar = new GrammarSpelunker(inputDirectory, gfile); + grammar.parse(); + String vocabName = grammar.getTokenVocab(); + String grammarName = grammar.getGrammarName(); + // Make all grammars depend on any tokenVocab options + if ( vocabName!=null ) g.addEdge(gfile, vocabName+CodeGenerator.VOCAB_FILE_EXTENSION); + // Make all generated tokens files depend on their grammars + g.addEdge(grammarName+CodeGenerator.VOCAB_FILE_EXTENSION, gfile); + } + List sorted = g.sort(); + //System.out.println("sorted="+sorted); + grammarFileNames.clear(); // wipe so we can give new ordered list + for (int i = 0; i < sorted.size(); i++) { + String f = (String)sorted.get(i); + if ( f.endsWith(".g") ) grammarFileNames.add(f); + } + //System.out.println("new grammars="+grammarFileNames); + } + + /** Get a grammar mentioned on the command-line and any delegates */ + public Grammar getRootGrammar(String grammarFileName) + throws IOException + { + //StringTemplate.setLintMode(true); + // grammars mentioned on command line are either roots or single grammars. + // create the necessary composite in case it's got delegates; even + // single grammar needs it to get token types. + CompositeGrammar composite = new CompositeGrammar(); + Grammar grammar = new Grammar(this, grammarFileName, composite); + composite.setDelegationRoot(grammar); + FileReader fr = null; + File f = null; + + if (haveInputDir) { + f = new File(inputDirectory, grammarFileName); + } + else { + f = new File(grammarFileName); + } + + // Store the location of this grammar as if we import files, we can then + // search for imports in the same location as the original grammar as well as in + // the lib directory. + // + parentGrammarDirectory = f.getParent(); + + if (grammarFileName.lastIndexOf(File.separatorChar) == -1) { + grammarOutputDirectory = "."; + } + else { + grammarOutputDirectory = grammarFileName.substring(0, grammarFileName.lastIndexOf(File.separatorChar)); + } + fr = new FileReader(f); + BufferedReader br = new BufferedReader(fr); + grammar.parseAndBuildAST(br); + composite.watchNFAConversion = internalOption_watchNFAConversion; + br.close(); + fr.close(); + return grammar; + } + + /** Create NFA, DFA and generate code for grammar. + * Create NFA for any delegates first. Once all NFA are created, + * it's ok to create DFA, which must check for left-recursion. That check + * is done by walking the full NFA, which therefore must be complete. + * After all NFA, comes DFA conversion for root grammar then code gen for + * root grammar. DFA and code gen for delegates comes next. + */ + protected void generateRecognizer(Grammar grammar) { + String language = (String) grammar.getOption("language"); + if (language != null) { + CodeGenerator generator = new CodeGenerator(this, grammar, language); + grammar.setCodeGenerator(generator); + generator.setDebug(isDebug()); + generator.setProfile(isProfile()); + generator.setTrace(isTrace()); + + // generate NFA early in case of crash later (for debugging) + if (isGenerate_NFA_dot()) { + generateNFAs(grammar); + } + + // GENERATE CODE + generator.genRecognizer(); + + if (isGenerate_DFA_dot()) { + generateDFAs(grammar); + } + + List delegates = grammar.getDirectDelegates(); + for (int i = 0; delegates != null && i < delegates.size(); i++) { + Grammar delegate = (Grammar) delegates.get(i); + if (delegate != grammar) { // already processing this one + generateRecognizer(delegate); + } + } + } + } + + public void generateDFAs(Grammar g) { + for (int d = 1; d <= g.getNumberOfDecisions(); d++) { + DFA dfa = g.getLookaheadDFA(d); + if (dfa == null) { + continue; // not there for some reason, ignore + } + DOTGenerator dotGenerator = new DOTGenerator(g); + String dot = dotGenerator.getDOT(dfa.startState); + String dotFileName = g.name + "." + "dec-" + d; + if (g.implicitLexer) { + dotFileName = g.name + Grammar.grammarTypeToFileNameSuffix[g.type] + "." + "dec-" + d; + } + try { + writeDOTFile(g, dotFileName, dot); + } catch (IOException ioe) { + ErrorManager.error(ErrorManager.MSG_CANNOT_GEN_DOT_FILE, + dotFileName, + ioe); + } + } + } + + protected void generateNFAs(Grammar g) { + DOTGenerator dotGenerator = new DOTGenerator(g); + Collection rules = g.getAllImportedRules(); + rules.addAll(g.getRules()); + + for (Iterator itr = rules.iterator(); itr.hasNext();) { + Rule r = (Rule) itr.next(); + try { + String dot = dotGenerator.getDOT(r.startState); + if (dot != null) { + writeDOTFile(g, r, dot); + } + } catch (IOException ioe) { + ErrorManager.error(ErrorManager.MSG_CANNOT_WRITE_FILE, ioe); + } + } + } + + protected void writeDOTFile(Grammar g, Rule r, String dot) throws IOException { + writeDOTFile(g, r.grammar.name + "." + r.name, dot); + } + + protected void writeDOTFile(Grammar g, String name, String dot) throws IOException { + Writer fw = getOutputFile(g, name + ".dot"); + fw.write(dot); + fw.close(); + } + + private static void version() { + ErrorManager.info("ANTLR Parser Generator Version " + new Tool().VERSION); + } + + private static void help() { + ErrorManager.info("ANTLR Parser Generator Version " + new Tool().VERSION); + System.err.println("usage: java org.antlr.Tool [args] file.g [file2.g file3.g ...]"); + System.err.println(" -o outputDir specify output directory where all output is generated"); + System.err.println(" -fo outputDir same as -o but force even files with relative paths to dir"); + System.err.println(" -lib dir specify location of token files"); + System.err.println(" -depend generate file dependencies"); + System.err.println(" -report print out a report about the grammar(s) processed"); + System.err.println(" -print print out the grammar without actions"); + System.err.println(" -debug generate a parser that emits debugging events"); + System.err.println(" -profile generate a parser that computes profiling information"); + System.err.println(" -nfa generate an NFA for each rule"); + System.err.println(" -dfa generate a DFA for each decision point"); + System.err.println(" -message-format name specify output style for messages"); + System.err.println(" -verbose generate ANTLR version and other information"); + System.err.println(" -make only build if generated files older than grammar"); + System.err.println(" -version print the version of ANTLR and exit."); + System.err.println(" -X display extended argument list"); + } + + private static void Xhelp() { + ErrorManager.info("ANTLR Parser Generator Version " + new Tool().VERSION); + System.err.println(" -Xgrtree print the grammar AST"); + System.err.println(" -Xdfa print DFA as text "); + System.err.println(" -Xnoprune test lookahead against EBNF block exit branches"); + System.err.println(" -Xnocollapse collapse incident edges into DFA states"); + System.err.println(" -Xdbgconversion dump lots of info during NFA conversion"); + System.err.println(" -Xmultithreaded run the analysis in 2 threads"); + System.err.println(" -Xnomergestopstates do not merge stop states"); + System.err.println(" -Xdfaverbose generate DFA states in DOT with NFA configs"); + System.err.println(" -Xwatchconversion print a message for each NFA before converting"); + System.err.println(" -XdbgST put tags at start/stop of all templates in output"); + System.err.println(" -Xm m max number of rule invocations during conversion"); + System.err.println(" -Xmaxdfaedges m max \"comfortable\" number of edges for single DFA state"); + System.err.println(" -Xconversiontimeout t set NFA conversion timeout for each decision"); + System.err.println(" -Xmaxinlinedfastates m max DFA states before table used rather than inlining"); + System.err.println(" -Xnfastates for nondeterminisms, list NFA states for each path"); + } + + /** + * Set the location (base directory) where output files should be produced + * by the ANTLR tool. + * @param outputDirectory + */ + public void setOutputDirectory(String outputDirectory) { + haveOutputDir = true; + this.outputDirectory = outputDirectory; + } + + /** + * Used by build tools to force the output files to always be + * relative to the base output directory, even though the tool + * had to set the output directory to an absolute path as it + * cannot rely on the workign directory like command line invocation + * can. + * + * @param forceRelativeOutput true if output files hould always be relative to base output directory + */ + public void setForceRelativeOutput(boolean forceRelativeOutput) { + this.forceRelativeOutput = forceRelativeOutput; + } + + /** + * Set the base location of input files. Normally (when the tool is + * invoked from the command line), the inputDirectory is not set, but + * for build tools such as Maven, we need to be able to locate the input + * files relative to the base, as the working directory could be anywhere and + * changing workig directories is not a valid concept for JVMs because of threading and + * so on. Setting the directory just means that the getFileDirectory() method will + * try to open files relative to this input directory. + * + * @param inputDirectory Input source base directory + */ + public void setInputDirectory(String inputDirectory) { + this.inputDirectory = inputDirectory; + haveInputDir = true; + } + + /** This method is used by all code generators to create new output + * files. If the outputDir set by -o is not present it will be created. + * The final filename is sensitive to the output directory and + * the directory where the grammar file was found. If -o is /tmp + * and the original grammar file was foo/t.g then output files + * go in /tmp/foo. + * + * The output dir -o spec takes precedence if it's absolute. + * E.g., if the grammar file dir is absolute the output dir is given + * precendence. "-o /tmp /usr/lib/t.g" results in "/tmp/T.java" as + * output (assuming t.g holds T.java). + * + * If no -o is specified, then just write to the directory where the + * grammar file was found. + * + * If outputDirectory==null then write a String. + */ + public Writer getOutputFile(Grammar g, String fileName) throws IOException { + if (getOutputDirectory() == null) { + return new StringWriter(); + } + // output directory is a function of where the grammar file lives + // for subdir/T.g, you get subdir here. Well, depends on -o etc... + // But, if this is a .tokens file, then we force the output to + // be the base output directory (or current directory if there is not a -o) + // + File outputDir; + if (fileName.endsWith(CodeGenerator.VOCAB_FILE_EXTENSION)) { + if (haveOutputDir) { + outputDir = new File(getOutputDirectory()); + } + else { + outputDir = new File("."); + } + } + else { + outputDir = getOutputDirectory(g.getFileName()); + } + File outputFile = new File(outputDir, fileName); + + if (!outputDir.exists()) { + outputDir.mkdirs(); + } + FileWriter fw = new FileWriter(outputFile); + return new BufferedWriter(fw); + } + + /** + * Return the location where ANTLR will generate output files for a given file. This is a + * base directory and output files will be relative to here in some cases + * such as when -o option is used and input files are given relative + * to the input directory. + * + * @param fileNameWithPath path to input source + * @return + */ + public File getOutputDirectory(String fileNameWithPath) { + + File outputDir = new File(getOutputDirectory()); + String fileDirectory; + + // Some files are given to us without a PATH but should should + // still be written to the output directory in the relative path of + // the output directory. The file directory is either the set of sub directories + // or just or the relative path recorded for the parent grammar. This means + // that when we write the tokens files, or the .java files for imported grammars + // taht we will write them in the correct place. + // + if (fileNameWithPath.lastIndexOf(File.separatorChar) == -1) { + + // No path is included in the file name, so make the file + // directory the same as the parent grammar (which might sitll be just "" + // but when it is not, we will write the file in the correct place. + // + fileDirectory = grammarOutputDirectory; + + } + else { + fileDirectory = fileNameWithPath.substring(0, fileNameWithPath.lastIndexOf(File.separatorChar)); + } + if (haveOutputDir) { + // -o /tmp /var/lib/t.g => /tmp/T.java + // -o subdir/output /usr/lib/t.g => subdir/output/T.java + // -o . /usr/lib/t.g => ./T.java + if ((fileDirectory != null && !forceRelativeOutput) && + (new File(fileDirectory).isAbsolute() || + fileDirectory.startsWith("~")) || // isAbsolute doesn't count this :( + isForceAllFilesToOutputDir()) { + // somebody set the dir, it takes precendence; write new file there + outputDir = new File(getOutputDirectory()); + } + else { + // -o /tmp subdir/t.g => /tmp/subdir/t.g + if (fileDirectory != null) { + outputDir = new File(getOutputDirectory(), fileDirectory); + } + else { + outputDir = new File(getOutputDirectory()); + } + } + } + else { + // they didn't specify a -o dir so just write to location + // where grammar is, absolute or relative, this will only happen + // with command line invocation as build tools will always + // supply an output directory. + // + outputDir = new File(fileDirectory); + } + return outputDir; + } + + /** + * Name a file from the -lib dir. Imported grammars and .tokens files + * + * If we do not locate the file in the library directory, then we try + * the location of the originating grammar. + * + * @param fileName input name we are looking for + * @return Path to file that we think shuold be the import file + * + * @throws java.io.IOException + */ + public String getLibraryFile(String fileName) throws IOException { + + // First, see if we can find the file in the library directory + // + File f = new File(getLibraryDirectory() + File.separator + fileName); + + if (f.exists()) { + + // Found in the library directory + // + return f.getAbsolutePath(); + } + + // Need to assume it is in the same location as the input file. Note that + // this is only relevant for external build tools and when the input grammar + // was specified relative to the source directory (working directory if using + // the command line. + // + return parentGrammarDirectory + File.separator + fileName; + } + + /** Return the directory containing the grammar file for this grammar. + * normally this is a relative path from current directory. People will + * often do "java org.antlr.Tool grammars/*.g3" So the file will be + * "grammars/foo.g3" etc... This method returns "grammars". + * + * If we have been given a specific input directory as a base, then + * we must find the directory relative to this directory, unless the + * file name is given to us in absolute terms. + */ + public String getFileDirectory(String fileName) { + + File f; + if (haveInputDir && !fileName.startsWith(File.separator)) { + f = new File(inputDirectory, fileName); + } + else { + f = new File(fileName); + } + // And ask Java what the base directory of this location is + // + return f.getParent(); + } + + /** Return a File descriptor for vocab file. Look in library or + * in -o output path. antlr -o foo T.g U.g where U needs T.tokens + * won't work unless we look in foo too. If we do not find the + * file in the lib directory then must assume that the .tokens file + * is going to be generated as part of this build and we have defined + * .tokens files so that they ALWAYS are generated in the base output + * directory, which means the current directory for the command line tool if there + * was no output directory specified. + */ + public File getImportedVocabFile(String vocabName) { + + File f = new File(getLibraryDirectory(), + File.separator + + vocabName + + CodeGenerator.VOCAB_FILE_EXTENSION); + if (f.exists()) { + return f; + } + + // We did not find the vocab file in the lib directory, so we need + // to look for it in the output directory which is where .tokens + // files are generated (in the base, not relative to the input + // location.) + // + if (haveOutputDir) { + f = new File(getOutputDirectory(), vocabName + CodeGenerator.VOCAB_FILE_EXTENSION); + } + else { + f = new File(vocabName + CodeGenerator.VOCAB_FILE_EXTENSION); + } + return f; + } + + /** If the tool needs to panic/exit, how do we do that? + */ + public void panic() { + throw new Error("ANTLR panic"); + } + + /** Return a time stamp string accurate to sec: yyyy-mm-dd hh:mm:ss + */ + public static String getCurrentTimeStamp() { + GregorianCalendar calendar = new java.util.GregorianCalendar(); + int y = calendar.get(Calendar.YEAR); + int m = calendar.get(Calendar.MONTH) + 1; // zero-based for months + int d = calendar.get(Calendar.DAY_OF_MONTH); + int h = calendar.get(Calendar.HOUR_OF_DAY); + int min = calendar.get(Calendar.MINUTE); + int sec = calendar.get(Calendar.SECOND); + String sy = String.valueOf(y); + String sm = m < 10 ? "0" + m : String.valueOf(m); + String sd = d < 10 ? "0" + d : String.valueOf(d); + String sh = h < 10 ? "0" + h : String.valueOf(h); + String smin = min < 10 ? "0" + min : String.valueOf(min); + String ssec = sec < 10 ? "0" + sec : String.valueOf(sec); + return new StringBuffer().append(sy).append("-").append(sm).append("-").append(sd).append(" ").append(sh).append(":").append(smin).append(":").append(ssec).toString(); + } + + /** + * Provide the List of all grammar file names that the ANTLR tool will + * process or has processed. + * + * @return the grammarFileNames + */ + public List getGrammarFileNames() { + return grammarFileNames; + } + + /** + * Indicates whether ANTLR has gnerated or will generate a description of + * all the NFAs in Dot format + * + * @return the generate_NFA_dot + */ + public boolean isGenerate_NFA_dot() { + return generate_NFA_dot; + } + + /** + * Indicates whether ANTLR has generated or will generate a description of + * all the NFAs in Dot format + * + * @return the generate_DFA_dot + */ + public boolean isGenerate_DFA_dot() { + return generate_DFA_dot; + } + + /** + * Return the Path to the base output directory, where ANTLR + * will generate all the output files for the current language target as + * well as any ancillary files such as .tokens vocab files. + * + * @return the output Directory + */ + public String getOutputDirectory() { + return outputDirectory; + } + + /** + * Return the Path to the directory in which ANTLR will search for ancillary + * files such as .tokens vocab files and imported grammar files. + * + * @return the lib Directory + */ + public String getLibraryDirectory() { + return libDirectory; + } + + /** + * Indicate if ANTLR has generated, or will generate a debug version of the + * recognizer. Debug versions of a parser communicate with a debugger such + * as that contained in ANTLRWorks and at start up will 'hang' waiting for + * a connection on an IP port (49100 by default). + * + * @return the debug flag + */ + public boolean isDebug() { + return debug; + } + + /** + * Indicate whether ANTLR has generated, or will generate a version of the + * recognizer that prints trace messages on entry and exit of each rule. + * + * @return the trace flag + */ + public boolean isTrace() { + return trace; + } + + /** + * Indicates whether ANTLR has generated or will generate a version of the + * recognizer that gathers statistics about its execution, which it prints when + * it terminates. + * + * @return the profile + */ + public boolean isProfile() { + return profile; + } + + /** + * Indicates whether ANTLR has generated or will generate a report of various + * elements of the grammar analysis, once it it has finished analyzing a grammar + * file. + * + * @return the report flag + */ + public boolean isReport() { + return report; + } + + /** + * Indicates whether ANTLR has printed, or will print, a version of the input grammar + * file(s) that is stripped of any action code embedded within. + * + * @return the printGrammar flag + */ + public boolean isPrintGrammar() { + return printGrammar; + } + + /** + * Indicates whether ANTLR has supplied, or will supply, a list of all the things + * that the input grammar depends upon and all the things that will be generated + * when that grammar is successfully analyzed. + * + * @return the depend flag + */ + public boolean isDepend() { + return depend; + } + + /** + * Indicates whether ANTLR will force all files to the output directory, even + * if the input files have relative paths from the input directory. + * + * @return the forceAllFilesToOutputDir flag + */ + public boolean isForceAllFilesToOutputDir() { + return forceAllFilesToOutputDir; + } + + /** + * Indicates whether ANTLR will be verbose when analyzing grammar files, such as + * displaying the names of the files it is generating and similar information. + * + * @return the verbose flag + */ + public boolean isVerbose() { + return verbose; + } + + /** + * Provide the current setting of the conversion timeout on DFA creation. + * + * @return DFA creation timeout value in milliseconds + */ + public int getConversionTimeout() { + return DFA.MAX_TIME_PER_DFA_CREATION; + } + + /** + * Returns the current setting of the message format descriptor + * @return Current message format + */ + public String getMessageFormat() { + return ErrorManager.getMessageFormat().toString(); + } + + /** + * Returns the number of errors that the analysis/processing threw up. + * @return Error count + */ + public int getNumErrors() { + return ErrorManager.getNumErrors(); + } + + /** + * Indicate whether the tool will analyze the dependencies of the provided grammar + * file list and ensure that grammars with dependencies are built + * after any of the other gramamrs in the list that they are dependent on. Setting + * this option also has the side effect that any grammars that are includes for other + * grammars in the list are excluded from individual analysis, which allows the caller + * to invoke the tool via org.antlr.tool -make *.g and not worry about the inclusion + * of grammars that are just includes for other grammars or what order the grammars + * appear on the command line. + * + * This option was coded to make life easier for tool integration (such as Maven) but + * may also be useful at the command line. + * + * @return true if the tool is currently configured to analyze and sort grammar files. + */ + public boolean getMake() { + return make; + } + + /** + * Set the message format to one of ANTLR, gnu, vs2005 + * + * @param format + */ + public void setMessageFormat(String format) { + ErrorManager.setFormat(format); + } + + /** + * Set the timeout value (in milliseconds) after which DFA creation stops + * + * @param timeout value in milliseconds + */ + public void setConversionTimeout(int timeout) { + DFA.MAX_TIME_PER_DFA_CREATION = timeout; + } + + /** Provide the List of all grammar file names that the ANTLR tool should process. + * + * @param grammarFileNames The list of grammar files to process + */ + public void setGrammarFileNames(List grammarFileNames) { + this.grammarFileNames = grammarFileNames; + } + + public void addGrammarFile(String grammarFileName) { + if (!grammarFileNames.contains(grammarFileName)) { + grammarFileNames.add(grammarFileName); + } + } + + /** + * Indicate whether ANTLR should generate a description of + * all the NFAs in Dot format + * + * @param generate_NFA_dot True to generate dot descriptions + */ + public void setGenerate_NFA_dot(boolean generate_NFA_dot) { + this.generate_NFA_dot = generate_NFA_dot; + } + + /** + * Indicates whether ANTLR should generate a description of + * all the NFAs in Dot format + * + * @param generate_DFA_dot True to generate dot descriptions + */ + public void setGenerate_DFA_dot(boolean generate_DFA_dot) { + this.generate_DFA_dot = generate_DFA_dot; + } + + /** + * Set the Path to the directory in which ANTLR will search for ancillary + * files such as .tokens vocab files and imported grammar files. + * + * @param libDirectory the libDirectory to set + */ + public void setLibDirectory(String libDirectory) { + this.libDirectory = libDirectory; + } + + /** + * Indicate whether ANTLR should generate a debug version of the + * recognizer. Debug versions of a parser communicate with a debugger such + * as that contained in ANTLRWorks and at start up will 'hang' waiting for + * a connection on an IP port (49100 by default). + * + * @param debug true to generate a debug mode parser + */ + public void setDebug(boolean debug) { + this.debug = debug; + } + + /** + * Indicate whether ANTLR should generate a version of the + * recognizer that prints trace messages on entry and exit of each rule + * + * @param trace true to generate a tracing parser + */ + public void setTrace(boolean trace) { + this.trace = trace; + } + + /** + * Indicate whether ANTLR should generate a version of the + * recognizer that gathers statistics about its execution, which it prints when + * it terminates. + * + * @param profile true to generate a profiling parser + */ + public void setProfile(boolean profile) { + this.profile = profile; + } + + /** + * Indicate whether ANTLR should generate a report of various + * elements of the grammar analysis, once it it has finished analyzing a grammar + * file. + * + * @param report true to generate the analysis report + */ + public void setReport(boolean report) { + this.report = report; + } + + /** + * Indicate whether ANTLR should print a version of the input grammar + * file(s) that is stripped of any action code embedded within. + * + * @param printGrammar true to generate a stripped file + */ + public void setPrintGrammar(boolean printGrammar) { + this.printGrammar = printGrammar; + } + + /** + * Indicate whether ANTLR should supply a list of all the things + * that the input grammar depends upon and all the things that will be generated + * when that gramamr is successfully analyzed. + * + * @param depend true to get depends set rather than process the grammar + */ + public void setDepend(boolean depend) { + this.depend = depend; + } + + /** + * Indicates whether ANTLR will force all files to the output directory, even + * if the input files have relative paths from the input directory. + * + * @param forceAllFilesToOutputDir true to force files to output directory + */ + public void setForceAllFilesToOutputDir(boolean forceAllFilesToOutputDir) { + this.forceAllFilesToOutputDir = forceAllFilesToOutputDir; + } + + /** + * Indicate whether ANTLR should be verbose when analyzing grammar files, such as + * displaying the names of the files it is generating and similar information. + * + * @param verbose true to be verbose + */ + public void setVerbose(boolean verbose) { + this.verbose = verbose; + } + + /** + * Indicate whether the tool should analyze the dependencies of the provided grammar + * file list and ensure that the grammars with dependencies are built + * after any of the other gramamrs in the list that they are dependent on. Setting + * this option also has the side effect that any grammars that are includes for other + * grammars in the list are excluded from individual analysis, which allows the caller + * to invoke the tool via org.antlr.tool -make *.g and not worry about the inclusion + * of grammars that are just includes for other grammars or what order the grammars + * appear on the command line. + * + * This option was coded to make life easier for tool integration (such as Maven) but + * may also be useful at the command line. + * + * @param make + */ + public void setMake(boolean make) { + this.make = make; + } + +} diff --git a/antlr-3.1.3/tool/src/main/java/org/antlr/analysis/ActionLabel.java b/antlr-3.1.3/tool/src/main/java/org/antlr/analysis/ActionLabel.java new file mode 100644 index 0000000..1265364 --- /dev/null +++ b/antlr-3.1.3/tool/src/main/java/org/antlr/analysis/ActionLabel.java @@ -0,0 +1,56 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.analysis; + +import org.antlr.tool.GrammarAST; +import org.antlr.tool.Grammar; + +public class ActionLabel extends Label { + public GrammarAST actionAST; + + public ActionLabel(GrammarAST actionAST) { + super(ACTION); + this.actionAST = actionAST; + } + + public boolean isEpsilon() { + return true; // we are to be ignored by analysis 'cept for predicates + } + + public boolean isAction() { + return true; + } + + public String toString() { + return "{"+actionAST+"}"; + } + + public String toString(Grammar g) { + return toString(); + } +} diff --git a/antlr-3.1.3/tool/src/main/java/org/antlr/analysis/AnalysisRecursionOverflowException.java b/antlr-3.1.3/tool/src/main/java/org/antlr/analysis/AnalysisRecursionOverflowException.java new file mode 100644 index 0000000..6403ea9 --- /dev/null +++ b/antlr-3.1.3/tool/src/main/java/org/antlr/analysis/AnalysisRecursionOverflowException.java @@ -0,0 +1,40 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.analysis; + +/** An NFA configuration context stack overflowed. */ +public class AnalysisRecursionOverflowException extends RuntimeException { + public DFAState ovfState; + public NFAConfiguration proposedNFAConfiguration; + public AnalysisRecursionOverflowException(DFAState ovfState, + NFAConfiguration proposedNFAConfiguration) + { + this.ovfState = ovfState; + this.proposedNFAConfiguration = proposedNFAConfiguration; + } +} diff --git a/antlr-3.1.3/tool/src/main/java/org/antlr/analysis/AnalysisTimeoutException.java b/antlr-3.1.3/tool/src/main/java/org/antlr/analysis/AnalysisTimeoutException.java new file mode 100644 index 0000000..392b316 --- /dev/null +++ b/antlr-3.1.3/tool/src/main/java/org/antlr/analysis/AnalysisTimeoutException.java @@ -0,0 +1,36 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.analysis; + +/** Analysis took too long; bail out of entire DFA construction. */ +public class AnalysisTimeoutException extends RuntimeException { + public DFA abortedDFA; + public AnalysisTimeoutException(DFA abortedDFA) { + this.abortedDFA = abortedDFA; + } +} diff --git a/antlr-3.1.3/tool/src/main/java/org/antlr/analysis/DFA.java b/antlr-3.1.3/tool/src/main/java/org/antlr/analysis/DFA.java new file mode 100644 index 0000000..e69b99e --- /dev/null +++ b/antlr-3.1.3/tool/src/main/java/org/antlr/analysis/DFA.java @@ -0,0 +1,1061 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.analysis; + +import org.antlr.codegen.CodeGenerator; +import org.antlr.misc.IntSet; +import org.antlr.misc.IntervalSet; +import org.antlr.misc.Utils; +import org.antlr.runtime.IntStream; +import org.antlr.stringtemplate.StringTemplate; +import org.antlr.tool.*; + +import java.util.*; + +/** A DFA (converted from a grammar's NFA). + * DFAs are used as prediction machine for alternative blocks in all kinds + * of recognizers (lexers, parsers, tree walkers). + */ +public class DFA { + public static final int REACHABLE_UNKNOWN = -2; + public static final int REACHABLE_BUSY = -1; // in process of computing + public static final int REACHABLE_NO = 0; + public static final int REACHABLE_YES = 1; + + /** Prevent explosion of DFA states during conversion. The max number + * of states per alt in a single decision's DFA. + public static final int MAX_STATES_PER_ALT_IN_DFA = 450; + */ + + /** Set to 0 to not terminate early (time in ms) */ + public static int MAX_TIME_PER_DFA_CREATION = 1*1000; + + /** How many edges can each DFA state have before a "special" state + * is created that uses IF expressions instead of a table? + */ + public static int MAX_STATE_TRANSITIONS_FOR_TABLE = 65534; + + /** What's the start state for this DFA? */ + public DFAState startState; + + /** This DFA is being built for which decision? */ + public int decisionNumber = 0; + + /** From what NFAState did we create the DFA? */ + public NFAState decisionNFAStartState; + + /** The printable grammar fragment associated with this DFA */ + public String description; + + /** A set of all uniquely-numbered DFA states. Maps hash of DFAState + * to the actual DFAState object. We use this to detect + * existing DFA states. Map. Use Map so + * we can get old state back (Set only allows you to see if it's there). + * Not used during fixed k lookahead as it's a waste to fill it with + * a dup of states array. + */ + protected Map uniqueStates = new HashMap(); + + /** Maps the state number to the actual DFAState. Use a Vector as it + * grows automatically when I set the ith element. This contains all + * states, but the states are not unique. s3 might be same as s1 so + * s3 -> s1 in this table. This is how cycles occur. If fixed k, + * then these states will all be unique as states[i] always points + * at state i when no cycles exist. + * + * This is managed in parallel with uniqueStates and simply provides + * a way to go from state number to DFAState rather than via a + * hash lookup. + */ + protected Vector states = new Vector(); + + /** Unique state numbers per DFA */ + protected int stateCounter = 0; + + /** count only new states not states that were rejected as already present */ + protected int numberOfStates = 0; + + /** User specified max fixed lookahead. If 0, nothing specified. -1 + * implies we have not looked at the options table yet to set k. + */ + protected int user_k = -1; + + /** While building the DFA, track max lookahead depth if not cyclic */ + protected int max_k = -1; + + /** Is this DFA reduced? I.e., can all states lead to an accept state? */ + protected boolean reduced = true; + + /** Are there any loops in this DFA? + * Computed by doesStateReachAcceptState() + */ + protected boolean cyclic = false; + + /** Track whether this DFA has at least one sem/syn pred encountered + * during a closure operation. This is useful for deciding whether + * to retry a non-LL(*) with k=1. If no pred, it will not work w/o + * a pred so don't bother. It would just give another error message. + */ + public boolean predicateVisible = false; + + public boolean hasPredicateBlockedByAction = false; + + /** Each alt in an NFA derived from a grammar must have a DFA state that + * predicts it lest the parser not know what to do. Nondeterminisms can + * lead to this situation (assuming no semantic predicates can resolve + * the problem) and when for some reason, I cannot compute the lookahead + * (which might arise from an error in the algorithm or from + * left-recursion etc...). This list starts out with all alts contained + * and then in method doesStateReachAcceptState() I remove the alts I + * know to be uniquely predicted. + */ + protected List unreachableAlts; + + protected int nAlts = 0; + + /** We only want one accept state per predicted alt; track here */ + protected DFAState[] altToAcceptState; + + /** Track whether an alt discovers recursion for each alt during + * NFA to DFA conversion; >1 alt with recursion implies nonregular. + */ + public IntSet recursiveAltSet = new IntervalSet(); + + /** Which NFA are we converting (well, which piece of the NFA)? */ + public NFA nfa; + + protected NFAToDFAConverter nfaConverter; + + /** This probe tells you a lot about a decision and is useful even + * when there is no error such as when a syntactic nondeterminism + * is solved via semantic predicates. Perhaps a GUI would want + * the ability to show that. + */ + public DecisionProbe probe = new DecisionProbe(this); + + /** Track absolute time of the conversion so we can have a failsafe: + * if it takes too long, then terminate. Assume bugs are in the + * analysis engine. + */ + protected long conversionStartTime; + + /** Map an edge transition table to a unique set number; ordered so + * we can push into the output template as an ordered list of sets + * and then ref them from within the transition[][] table. Like this + * for C# target: + * public static readonly DFA30_transition0 = + * new short[] { 46, 46, -1, 46, 46, -1, -1, -1, -1, -1, -1, -1,...}; + * public static readonly DFA30_transition1 = + * new short[] { 21 }; + * public static readonly short[][] DFA30_transition = { + * DFA30_transition0, + * DFA30_transition0, + * DFA30_transition1, + * ... + * }; + */ + public Map edgeTransitionClassMap = new LinkedHashMap(); + + /** The unique edge transition class number; every time we see a new + * set of edges emanating from a state, we number it so we can reuse + * if it's every seen again for another state. For Java grammar, + * some of the big edge transition tables are seen about 57 times. + */ + protected int edgeTransitionClass =0; + + /* This DFA can be converted to a transition[state][char] table and + * the following tables are filled by createStateTables upon request. + * These are injected into the templates for code generation. + * See March 25, 2006 entry for description: + * http://www.antlr.org/blog/antlr3/codegen.tml + * Often using Vector as can't set ith position in a List and have + * it extend list size; bizarre. + */ + + /** List of special DFAState objects */ + public List specialStates; + /** List of ST for special states. */ + public List specialStateSTs; + public Vector accept; + public Vector eot; + public Vector eof; + public Vector min; + public Vector max; + public Vector special; + public Vector transition; + /** just the Vector indicating which unique edge table is at + * position i. + */ + public Vector transitionEdgeTables; // not used by java yet + protected int uniqueCompressedSpecialStateNum = 0; + + /** Which generator to use if we're building state tables */ + protected CodeGenerator generator = null; + + protected DFA() {;} + + public DFA(int decisionNumber, NFAState decisionStartState) { + this.decisionNumber = decisionNumber; + this.decisionNFAStartState = decisionStartState; + nfa = decisionStartState.nfa; + nAlts = nfa.grammar.getNumberOfAltsForDecisionNFA(decisionStartState); + //setOptions( nfa.grammar.getDecisionOptions(getDecisionNumber()) ); + initAltRelatedInfo(); + + //long start = System.currentTimeMillis(); + nfaConverter = new NFAToDFAConverter(this); + try { + nfaConverter.convert(); + + // figure out if there are problems with decision + verify(); + + if ( !probe.isDeterministic() || probe.analysisOverflowed() ) { + probe.issueWarnings(); + } + + // must be after verify as it computes cyclic, needed by this routine + // should be after warnings because early termination or something + // will not allow the reset to operate properly in some cases. + resetStateNumbersToBeContiguous(); + + //long stop = System.currentTimeMillis(); + //System.out.println("verify cost: "+(int)(stop-start)+" ms"); + } + catch (AnalysisTimeoutException at) { + probe.reportAnalysisTimeout(); + if ( !okToRetryDFAWithK1() ) { + probe.issueWarnings(); + } + } + catch (NonLLStarDecisionException nonLL) { + probe.reportNonLLStarDecision(this); + // >1 alt recurses, k=* and no auto backtrack nor manual sem/syn + if ( !okToRetryDFAWithK1() ) { + probe.issueWarnings(); + } + } + } + + /** Walk all states and reset their numbers to be a contiguous sequence + * of integers starting from 0. Only cyclic DFA can have unused positions + * in states list. State i might be identical to a previous state j and + * will result in states[i] == states[j]. We don't want to waste a state + * number on this. Useful mostly for code generation in tables. + * + * At the start of this routine, states[i].stateNumber <= i by definition. + * If states[50].stateNumber is 50 then a cycle during conversion may + * try to add state 103, but we find that an identical DFA state, named + * 50, already exists, hence, states[103]==states[50] and both have + * stateNumber 50 as they point at same object. Afterwards, the set + * of state numbers from all states should represent a contiguous range + * from 0..n-1 where n is the number of unique states. + */ + public void resetStateNumbersToBeContiguous() { + if ( getUserMaxLookahead()>0 ) { + // all numbers are unique already; no states are thrown out. + return; + } + + // walk list of DFAState objects by state number, + // setting state numbers to 0..n-1 + int snum=0; + for (int i = 0; i <= getMaxStateNumber(); i++) { + DFAState s = getState(i); + // some states are unused after creation most commonly due to cycles + // or conflict resolution. + if ( s==null ) { + continue; + } + // state i is mapped to DFAState with state number set to i originally + // so if it's less than i, then we renumbered it already; that + // happens when states have been merged or cycles occurred I think. + // states[50] will point to DFAState with s50 in it but + // states[103] might also point at this same DFAState. Since + // 50 < 103 then it's already been renumbered as it points downwards. + boolean alreadyRenumbered = s.stateNumber> which is the transition[][] table + for (int i = 0; i < transition.size(); i++) { + Vector transitionsForState = (Vector) transition.elementAt(i); + encoded.add(getRunLengthEncoding(transitionsForState)); + } + return encoded; + } + + /** Compress the incoming data list so that runs of same number are + * encoded as number,value pair sequences. 3 -1 -1 -1 28 is encoded + * as 1 3 3 -1 1 28. I am pretty sure this is the lossless compression + * that GIF files use. Transition tables are heavily compressed by + * this technique. I got the idea from JFlex http://jflex.de/ + * + * Return List where each string is either \xyz for 8bit char + * and \uFFFF for 16bit. Hideous and specific to Java, but it is the + * only target bad enough to need it. + */ + public List getRunLengthEncoding(List data) { + if ( data==null || data.size()==0 ) { + // for states with no transitions we want an empty string "" + // to hold its place in the transitions array. + List empty = new ArrayList(); + empty.add(""); + return empty; + } + int size = Math.max(2,data.size()/2); + List encoded = new ArrayList(size); // guess at size + // scan values looking for runs + int i = 0; + Integer emptyValue = Utils.integer(-1); + while ( i < data.size() ) { + Integer I = (Integer)data.get(i); + if ( I==null ) { + I = emptyValue; + } + // count how many v there are? + int n = 0; + for (int j = i; j < data.size(); j++) { + Integer v = (Integer)data.get(j); + if ( v==null ) { + v = emptyValue; + } + if ( I.equals(v) ) { + n++; + } + else { + break; + } + } + encoded.add(generator.target.encodeIntAsCharEscape((char)n)); + encoded.add(generator.target.encodeIntAsCharEscape((char)I.intValue())); + i+=n; + } + return encoded; + } + + public void createStateTables(CodeGenerator generator) { + //System.out.println("createTables:\n"+this); + this.generator = generator; + description = getNFADecisionStartState().getDescription(); + description = + generator.target.getTargetStringLiteralFromString(description); + + // create all the tables + special = new Vector(this.getNumberOfStates()); // Vector + special.setSize(this.getNumberOfStates()); + specialStates = new ArrayList(); // List + specialStateSTs = new ArrayList(); // List + accept = new Vector(this.getNumberOfStates()); // Vector + accept.setSize(this.getNumberOfStates()); + eot = new Vector(this.getNumberOfStates()); // Vector + eot.setSize(this.getNumberOfStates()); + eof = new Vector(this.getNumberOfStates()); // Vector + eof.setSize(this.getNumberOfStates()); + min = new Vector(this.getNumberOfStates()); // Vector + min.setSize(this.getNumberOfStates()); + max = new Vector(this.getNumberOfStates()); // Vector + max.setSize(this.getNumberOfStates()); + transition = new Vector(this.getNumberOfStates()); // Vector> + transition.setSize(this.getNumberOfStates()); + transitionEdgeTables = new Vector(this.getNumberOfStates()); // Vector> + transitionEdgeTables.setSize(this.getNumberOfStates()); + + // for each state in the DFA, fill relevant tables. + Iterator it = null; + if ( getUserMaxLookahead()>0 ) { + it = states.iterator(); + } + else { + it = getUniqueStates().values().iterator(); + } + while ( it.hasNext() ) { + DFAState s = (DFAState)it.next(); + if ( s==null ) { + // ignore null states; some acylic DFA see this condition + // when inlining DFA (due to lacking of exit branch pruning?) + continue; + } + if ( s.isAcceptState() ) { + // can't compute min,max,special,transition on accepts + accept.set(s.stateNumber, + Utils.integer(s.getUniquelyPredictedAlt())); + } + else { + createMinMaxTables(s); + createTransitionTableEntryForState(s); + createSpecialTable(s); + createEOTAndEOFTables(s); + } + } + + // now that we have computed list of specialStates, gen code for 'em + for (int i = 0; i < specialStates.size(); i++) { + DFAState ss = (DFAState) specialStates.get(i); + StringTemplate stateST = + generator.generateSpecialState(ss); + specialStateSTs.add(stateST); + } + + // check that the tables are not messed up by encode/decode + /* + testEncodeDecode(min); + testEncodeDecode(max); + testEncodeDecode(accept); + testEncodeDecode(special); + System.out.println("min="+min); + System.out.println("max="+max); + System.out.println("eot="+eot); + System.out.println("eof="+eof); + System.out.println("accept="+accept); + System.out.println("special="+special); + System.out.println("transition="+transition); + */ + } + + /* + private void testEncodeDecode(List data) { + System.out.println("data="+data); + List encoded = getRunLengthEncoding(data); + StringBuffer buf = new StringBuffer(); + for (int i = 0; i < encoded.size(); i++) { + String I = (String)encoded.get(i); + int v = 0; + if ( I.startsWith("\\u") ) { + v = Integer.parseInt(I.substring(2,I.length()), 16); + } + else { + v = Integer.parseInt(I.substring(1,I.length()), 8); + } + buf.append((char)v); + } + String encodedS = buf.toString(); + short[] decoded = org.antlr.runtime.DFA.unpackEncodedString(encodedS); + //System.out.println("decoded:"); + for (int i = 0; i < decoded.length; i++) { + short x = decoded[i]; + if ( x!=((Integer)data.get(i)).intValue() ) { + System.err.println("problem with encoding"); + } + //System.out.print(", "+x); + } + //System.out.println(); + } + */ + + protected void createMinMaxTables(DFAState s) { + int smin = Label.MAX_CHAR_VALUE + 1; + int smax = Label.MIN_ATOM_VALUE - 1; + for (int j = 0; j < s.getNumberOfTransitions(); j++) { + Transition edge = (Transition) s.transition(j); + Label label = edge.label; + if ( label.isAtom() ) { + if ( label.getAtom()>=Label.MIN_CHAR_VALUE ) { + if ( label.getAtom()smax ) { + smax = label.getAtom(); + } + } + } + else if ( label.isSet() ) { + IntervalSet labels = (IntervalSet)label.getSet(); + int lmin = labels.getMinElement(); + // if valid char (don't do EOF) and less than current min + if ( lmin=Label.MIN_CHAR_VALUE ) { + smin = labels.getMinElement(); + } + if ( labels.getMaxElement()>smax ) { + smax = labels.getMaxElement(); + } + } + } + + if ( smax<0 ) { + // must be predicates or pure EOT transition; just zero out min, max + smin = Label.MIN_CHAR_VALUE; + smax = Label.MIN_CHAR_VALUE; + } + + min.set(s.stateNumber, Utils.integer((char)smin)); + max.set(s.stateNumber, Utils.integer((char)smax)); + + if ( smax<0 || smin>Label.MAX_CHAR_VALUE || smin<0 ) { + ErrorManager.internalError("messed up: min="+min+", max="+max); + } + } + + protected void createTransitionTableEntryForState(DFAState s) { + /* + System.out.println("createTransitionTableEntryForState s"+s.stateNumber+ + " dec "+s.dfa.decisionNumber+" cyclic="+s.dfa.isCyclic()); + */ + int smax = ((Integer)max.get(s.stateNumber)).intValue(); + int smin = ((Integer)min.get(s.stateNumber)).intValue(); + + Vector stateTransitions = new Vector(smax-smin+1); + stateTransitions.setSize(smax-smin+1); + transition.set(s.stateNumber, stateTransitions); + for (int j = 0; j < s.getNumberOfTransitions(); j++) { + Transition edge = (Transition) s.transition(j); + Label label = edge.label; + if ( label.isAtom() && label.getAtom()>=Label.MIN_CHAR_VALUE ) { + int labelIndex = label.getAtom()-smin; // offset from 0 + stateTransitions.set(labelIndex, + Utils.integer(edge.target.stateNumber)); + } + else if ( label.isSet() ) { + IntervalSet labels = (IntervalSet)label.getSet(); + int[] atoms = labels.toArray(); + for (int a = 0; a < atoms.length; a++) { + // set the transition if the label is valid (don't do EOF) + if ( atoms[a]>=Label.MIN_CHAR_VALUE ) { + int labelIndex = atoms[a]-smin; // offset from 0 + stateTransitions.set(labelIndex, + Utils.integer(edge.target.stateNumber)); + } + } + } + } + // track unique state transition tables so we can reuse + Integer edgeClass = (Integer)edgeTransitionClassMap.get(stateTransitions); + if ( edgeClass!=null ) { + //System.out.println("we've seen this array before; size="+stateTransitions.size()); + transitionEdgeTables.set(s.stateNumber, edgeClass); + } + else { + edgeClass = Utils.integer(edgeTransitionClass); + transitionEdgeTables.set(s.stateNumber, edgeClass); + edgeTransitionClassMap.put(stateTransitions, edgeClass); + edgeTransitionClass++; + } + } + + /** Set up the EOT and EOF tables; we cannot put -1 min/max values so + * we need another way to test that in the DFA transition function. + */ + protected void createEOTAndEOFTables(DFAState s) { + for (int j = 0; j < s.getNumberOfTransitions(); j++) { + Transition edge = (Transition) s.transition(j); + Label label = edge.label; + if ( label.isAtom() ) { + if ( label.getAtom()==Label.EOT ) { + // eot[s] points to accept state + eot.set(s.stateNumber, Utils.integer(edge.target.stateNumber)); + } + else if ( label.getAtom()==Label.EOF ) { + // eof[s] points to accept state + eof.set(s.stateNumber, Utils.integer(edge.target.stateNumber)); + } + } + else if ( label.isSet() ) { + IntervalSet labels = (IntervalSet)label.getSet(); + int[] atoms = labels.toArray(); + for (int a = 0; a < atoms.length; a++) { + if ( atoms[a]==Label.EOT ) { + // eot[s] points to accept state + eot.set(s.stateNumber, Utils.integer(edge.target.stateNumber)); + } + else if ( atoms[a]==Label.EOF ) { + eof.set(s.stateNumber, Utils.integer(edge.target.stateNumber)); + } + } + } + } + } + + protected void createSpecialTable(DFAState s) { + // number all special states from 0...n-1 instead of their usual numbers + boolean hasSemPred = false; + + // TODO this code is very similar to canGenerateSwitch. Refactor to share + for (int j = 0; j < s.getNumberOfTransitions(); j++) { + Transition edge = (Transition) s.transition(j); + Label label = edge.label; + // can't do a switch if the edges have preds or are going to + // require gated predicates + if ( label.isSemanticPredicate() || + ((DFAState)edge.target).getGatedPredicatesInNFAConfigurations()!=null) + { + hasSemPred = true; + break; + } + } + // if has pred or too big for table, make it special + int smax = ((Integer)max.get(s.stateNumber)).intValue(); + int smin = ((Integer)min.get(s.stateNumber)).intValue(); + if ( hasSemPred || smax-smin>MAX_STATE_TRANSITIONS_FOR_TABLE ) { + special.set(s.stateNumber, + Utils.integer(uniqueCompressedSpecialStateNum)); + uniqueCompressedSpecialStateNum++; + specialStates.add(s); + } + else { + special.set(s.stateNumber, Utils.integer(-1)); // not special + } + } + + public int predict(IntStream input) { + Interpreter interp = new Interpreter(nfa.grammar, input); + return interp.predict(this); + } + + /** Add a new DFA state to this DFA if not already present. + * To force an acyclic, fixed maximum depth DFA, just always + * return the incoming state. By not reusing old states, + * no cycles can be created. If we're doing fixed k lookahead + * don't updated uniqueStates, just return incoming state, which + * indicates it's a new state. + */ + protected DFAState addState(DFAState d) { + if ( getUserMaxLookahead()>0 ) { + return d; + } + // does a DFA state exist already with everything the same + // except its state number? + DFAState existing = (DFAState)uniqueStates.get(d); + if ( existing != null ) { + /* + System.out.println("state "+d.stateNumber+" exists as state "+ + existing.stateNumber); + */ + // already there...get the existing DFA state + return existing; + } + + // if not there, then add new state. + uniqueStates.put(d,d); + numberOfStates++; + return d; + } + + public void removeState(DFAState d) { + DFAState it = (DFAState)uniqueStates.remove(d); + if ( it!=null ) { + numberOfStates--; + } + } + + public Map getUniqueStates() { + return uniqueStates; + } + + /** What is the max state number ever created? This may be beyond + * getNumberOfStates(). + */ + public int getMaxStateNumber() { + return states.size()-1; + } + + public DFAState getState(int stateNumber) { + return (DFAState)states.get(stateNumber); + } + + public void setState(int stateNumber, DFAState d) { + states.set(stateNumber, d); + } + + /** Is the DFA reduced? I.e., does every state have a path to an accept + * state? If not, don't delete as we need to generate an error indicating + * which paths are "dead ends". Also tracks list of alts with no accept + * state in the DFA. Must call verify() first before this makes sense. + */ + public boolean isReduced() { + return reduced; + } + + /** Is this DFA cyclic? That is, are there any loops? If not, then + * the DFA is essentially an LL(k) predictor for some fixed, max k value. + * We can build a series of nested IF statements to match this. In the + * presence of cycles, we need to build a general DFA and interpret it + * to distinguish between alternatives. + */ + public boolean isCyclic() { + return cyclic && getUserMaxLookahead()==0; + } + + public boolean canInlineDecision() { + return !isCyclic() && + !probe.isNonLLStarDecision() && + getNumberOfStates() < CodeGenerator.MAX_ACYCLIC_DFA_STATES_INLINE; + } + + /** Is this DFA derived from the NFA for the Tokens rule? */ + public boolean isTokensRuleDecision() { + if ( nfa.grammar.type!=Grammar.LEXER ) { + return false; + } + NFAState nfaStart = getNFADecisionStartState(); + Rule r = nfa.grammar.getLocallyDefinedRule(Grammar.ARTIFICIAL_TOKENS_RULENAME); + NFAState TokensRuleStart = r.startState; + NFAState TokensDecisionStart = + (NFAState)TokensRuleStart.transition[0].target; + return nfaStart == TokensDecisionStart; + } + + /** The user may specify a max, acyclic lookahead for any decision. No + * DFA cycles are created when this value, k, is greater than 0. + * If this decision has no k lookahead specified, then try the grammar. + */ + public int getUserMaxLookahead() { + if ( user_k>=0 ) { // cache for speed + return user_k; + } + user_k = nfa.grammar.getUserMaxLookahead(decisionNumber); + return user_k; + } + + public boolean getAutoBacktrackMode() { + return nfa.grammar.getAutoBacktrackMode(decisionNumber); + } + + public void setUserMaxLookahead(int k) { + this.user_k = k; + } + + /** Return k if decision is LL(k) for some k else return max int */ + public int getMaxLookaheadDepth() { + if ( isCyclic() ) { + return Integer.MAX_VALUE; + } + return max_k; + } + + /** Return a list of Integer alt numbers for which no lookahead could + * be computed or for which no single DFA accept state predicts those + * alts. Must call verify() first before this makes sense. + */ + public List getUnreachableAlts() { + return unreachableAlts; + } + + /** Once this DFA has been built, need to verify that: + * + * 1. it's reduced + * 2. all alts have an accept state + * + * Elsewhere, in the NFA converter, we need to verify that: + * + * 3. alts i and j have disjoint lookahead if no sem preds + * 4. if sem preds, nondeterministic alts must be sufficiently covered + * + * This is avoided if analysis bails out for any reason. + */ + public void verify() { + doesStateReachAcceptState(startState); + } + + /** figure out if this state eventually reaches an accept state and + * modify the instance variable 'reduced' to indicate if we find + * at least one state that cannot reach an accept state. This implies + * that the overall DFA is not reduced. This algorithm should be + * linear in the number of DFA states. + * + * The algorithm also tracks which alternatives have no accept state, + * indicating a nondeterminism. + * + * Also computes whether the DFA is cyclic. + * + * TODO: I call getUniquelyPredicatedAlt too much; cache predicted alt + */ + protected boolean doesStateReachAcceptState(DFAState d) { + if ( d.isAcceptState() ) { + // accept states have no edges emanating from them so we can return + d.setAcceptStateReachable(REACHABLE_YES); + // this alt is uniquely predicted, remove from nondeterministic list + int predicts = d.getUniquelyPredictedAlt(); + unreachableAlts.remove(Utils.integer(predicts)); + return true; + } + + // avoid infinite loops + d.setAcceptStateReachable(REACHABLE_BUSY); + + boolean anEdgeReachesAcceptState = false; + // Visit every transition, track if at least one edge reaches stop state + // Cannot terminate when we know this state reaches stop state since + // all transitions must be traversed to set status of each DFA state. + for (int i=0; i0 ) { + buf.append(" && "); + } + buf.append("timed out (>"); + buf.append(DFA.MAX_TIME_PER_DFA_CREATION); + buf.append("ms)"); + } + buf.append("\n"); + return buf.toString(); + } + + /** What GrammarAST node (derived from the grammar) is this DFA + * associated with? It will point to the start of a block or + * the loop back of a (...)+ block etc... + */ + public GrammarAST getDecisionASTNode() { + return decisionNFAStartState.associatedASTNode; + } + + public boolean isGreedy() { + GrammarAST blockAST = nfa.grammar.getDecisionBlockAST(decisionNumber); + Object v = nfa.grammar.getBlockOption(blockAST,"greedy"); + if ( v!=null && v.equals("false") ) { + return false; + } + return true; + + } + + public DFAState newState() { + DFAState n = new DFAState(this); + n.stateNumber = stateCounter; + stateCounter++; + states.setSize(n.stateNumber+1); + states.set(n.stateNumber, n); // track state num to state + return n; + } + + public int getNumberOfStates() { + if ( getUserMaxLookahead()>0 ) { + // if using fixed lookahead then uniqueSets not set + return states.size(); + } + return numberOfStates; + } + + public int getNumberOfAlts() { + return nAlts; + } + + public boolean analysisTimedOut() { + return probe.analysisTimedOut(); + } + + protected void initAltRelatedInfo() { + unreachableAlts = new LinkedList(); + for (int i = 1; i <= nAlts; i++) { + unreachableAlts.add(Utils.integer(i)); + } + altToAcceptState = new DFAState[nAlts+1]; + } + + public String toString() { + FASerializer serializer = new FASerializer(nfa.grammar); + if ( startState==null ) { + return ""; + } + return serializer.serialize(startState, false); + } + + /** EOT (end of token) is a label that indicates when the DFA conversion + * algorithm would "fall off the end of a lexer rule". It normally + * means the default clause. So for ('a'..'z')+ you would see a DFA + * with a state that has a..z and EOT emanating from it. a..z would + * jump to a state predicting alt 1 and EOT would jump to a state + * predicting alt 2 (the exit loop branch). EOT implies anything other + * than a..z. If for some reason, the set is "all char" such as with + * the wildcard '.', then EOT cannot match anything. For example, + * + * BLOCK : '{' (.)* '}' + * + * consumes all char until EOF when greedy=true. When all edges are + * combined for the DFA state after matching '}', you will find that + * it is all char. The EOT transition has nothing to match and is + * unreachable. The findNewDFAStatesAndAddDFATransitions() method + * must know to ignore the EOT, so we simply remove it from the + * reachable labels. Later analysis will find that the exit branch + * is not predicted by anything. For greedy=false, we leave only + * the EOT label indicating that the DFA should stop immediately + * and predict the exit branch. The reachable labels are often a + * set of disjoint values like: [, 42, {0..41, 43..65534}] + * due to DFA conversion so must construct a pure set to see if + * it is same as Label.ALLCHAR. + * + * Only do this for Lexers. + * + * If EOT coexists with ALLCHAR: + * 1. If not greedy, modify the labels parameter to be EOT + * 2. If greedy, remove EOT from the labels set + protected boolean reachableLabelsEOTCoexistsWithAllChar(OrderedHashSet labels) + { + Label eot = new Label(Label.EOT); + if ( !labels.containsKey(eot) ) { + return false; + } + System.out.println("### contains EOT"); + boolean containsAllChar = false; + IntervalSet completeVocab = new IntervalSet(); + int n = labels.size(); + for (int i=0; iDFA->codegen pipeline seems very robust + * to me which I attribute to a uniform and consistent set of data + * structures. Regardless of what I want to "say"/implement, I do so + * within the confines of, for example, a DFA. The code generator + * can then just generate code--it doesn't have to do much thinking. + * Putting optimizations in the code gen code really starts to make + * it a spagetti factory (uh oh, now I'm hungry!). The pipeline is + * very testable; each stage has well defined input/output pairs. + * + * ### Optimization: PRUNE_EBNF_EXIT_BRANCHES + * + * There is no need to test EBNF block exit branches. Not only is it + * an unneeded computation, but counter-intuitively, you actually get + * better errors. You can report an error at the missing or extra + * token rather than as soon as you've figured out you will fail. + * + * Imagine optional block "( DOT CLASS )? SEMI". ANTLR generates: + * + * int alt=0; + * if ( input.LA(1)==DOT ) { + * alt=1; + * } + * else if ( input.LA(1)==SEMI ) { + * alt=2; + * } + * + * Clearly, since Parser.match() will ultimately find the error, we + * do not want to report an error nor do we want to bother testing + * lookahead against what follows the (...)? We want to generate + * simply "should I enter the subrule?": + * + * int alt=2; + * if ( input.LA(1)==DOT ) { + * alt=1; + * } + * + * NOTE 1. Greedy loops cannot be optimized in this way. For example, + * "(greedy=false:'x'|.)* '\n'". You specifically need the exit branch + * to tell you when to terminate the loop as the same input actually + * predicts one of the alts (i.e., staying in the loop). + * + * NOTE 2. I do not optimize cyclic DFAs at the moment as it doesn't + * seem to work. ;) I'll have to investigate later to see what work I + * can do on cyclic DFAs to make them have fewer edges. Might have + * something to do with the EOT token. + * + * ### PRUNE_SUPERFLUOUS_EOT_EDGES + * + * When a token is a subset of another such as the following rules, ANTLR + * quietly assumes the first token to resolve the ambiguity. + * + * EQ : '=' ; + * ASSIGNOP : '=' | '+=' ; + * + * It can yield states that have only a single edge on EOT to an accept + * state. This is a waste and messes up my code generation. ;) If + * Tokens rule DFA goes + * + * s0 -'='-> s3 -EOT-> s5 (accept) + * + * then s5 should be pruned and s3 should be made an accept. Do NOT do this + * for keyword versus ID as the state with EOT edge emanating from it will + * also have another edge. + * + * ### Optimization: COLLAPSE_ALL_INCIDENT_EDGES + * + * Done during DFA construction. See method addTransition() in + * NFAToDFAConverter. + * + * ### Optimization: MERGE_STOP_STATES + * + * Done during DFA construction. See addDFAState() in NFAToDFAConverter. + */ +public class DFAOptimizer { + public static boolean PRUNE_EBNF_EXIT_BRANCHES = true; + public static boolean PRUNE_TOKENS_RULE_SUPERFLUOUS_EOT_EDGES = true; + public static boolean COLLAPSE_ALL_PARALLEL_EDGES = true; + public static boolean MERGE_STOP_STATES = true; + + /** Used by DFA state machine generator to avoid infinite recursion + * resulting from cycles int the DFA. This is a set of int state #s. + * This is a side-effect of calling optimize; can't clear after use + * because code gen needs it. + */ + protected Set visited = new HashSet(); + + protected Grammar grammar; + + public DFAOptimizer(Grammar grammar) { + this.grammar = grammar; + } + + public void optimize() { + // optimize each DFA in this grammar + for (int decisionNumber=1; + decisionNumber<=grammar.getNumberOfDecisions(); + decisionNumber++) + { + DFA dfa = grammar.getLookaheadDFA(decisionNumber); + optimize(dfa); + } + } + + protected void optimize(DFA dfa) { + if ( dfa==null ) { + return; // nothing to do + } + /* + System.out.println("Optimize DFA "+dfa.decisionNFAStartState.decisionNumber+ + " num states="+dfa.getNumberOfStates()); + */ + //long start = System.currentTimeMillis(); + if ( PRUNE_EBNF_EXIT_BRANCHES && dfa.canInlineDecision() ) { + visited.clear(); + int decisionType = + dfa.getNFADecisionStartState().decisionStateType; + if ( dfa.isGreedy() && + (decisionType==NFAState.OPTIONAL_BLOCK_START || + decisionType==NFAState.LOOPBACK) ) + { + optimizeExitBranches(dfa.startState); + } + } + // If the Tokens rule has syntactically ambiguous rules, try to prune + if ( PRUNE_TOKENS_RULE_SUPERFLUOUS_EOT_EDGES && + dfa.isTokensRuleDecision() && + dfa.probe.stateToSyntacticallyAmbiguousTokensRuleAltsMap.size()>0 ) + { + visited.clear(); + optimizeEOTBranches(dfa.startState); + } + + /* ack...code gen needs this, cannot optimize + visited.clear(); + unlinkUnneededStateData(dfa.startState); + */ + //long stop = System.currentTimeMillis(); + //System.out.println("minimized in "+(int)(stop-start)+" ms"); + } + + protected void optimizeExitBranches(DFAState d) { + Integer sI = Utils.integer(d.stateNumber); + if ( visited.contains(sI) ) { + return; // already visited + } + visited.add(sI); + int nAlts = d.dfa.getNumberOfAlts(); + for (int i = 0; i < d.getNumberOfTransitions(); i++) { + Transition edge = (Transition) d.transition(i); + DFAState edgeTarget = ((DFAState)edge.target); + /* + System.out.println(d.stateNumber+"-"+ + edge.label.toString(d.dfa.nfa.grammar)+"->"+ + edgeTarget.stateNumber); + */ + // if target is an accept state and that alt is the exit alt + if ( edgeTarget.isAcceptState() && + edgeTarget.getUniquelyPredictedAlt()==nAlts) + { + /* + System.out.println("ignoring transition "+i+" to max alt "+ + d.dfa.getNumberOfAlts()); + */ + d.removeTransition(i); + i--; // back up one so that i++ of loop iteration stays within bounds + } + optimizeExitBranches(edgeTarget); + } + } + + protected void optimizeEOTBranches(DFAState d) { + Integer sI = Utils.integer(d.stateNumber); + if ( visited.contains(sI) ) { + return; // already visited + } + visited.add(sI); + for (int i = 0; i < d.getNumberOfTransitions(); i++) { + Transition edge = (Transition) d.transition(i); + DFAState edgeTarget = ((DFAState)edge.target); + /* + System.out.println(d.stateNumber+"-"+ + edge.label.toString(d.dfa.nfa.grammar)+"->"+ + edgeTarget.stateNumber); + */ + // if only one edge coming out, it is EOT, and target is accept prune + if ( PRUNE_TOKENS_RULE_SUPERFLUOUS_EOT_EDGES && + edgeTarget.isAcceptState() && + d.getNumberOfTransitions()==1 && + edge.label.isAtom() && + edge.label.getAtom()==Label.EOT ) + { + //System.out.println("state "+d+" can be pruned"); + // remove the superfluous EOT edge + d.removeTransition(i); + d.setAcceptState(true); // make it an accept state + // force it to uniquely predict the originally predicted state + d.cachedUniquelyPredicatedAlt = + edgeTarget.getUniquelyPredictedAlt(); + i--; // back up one so that i++ of loop iteration stays within bounds + } + optimizeEOTBranches(edgeTarget); + } + } + + /** Walk DFA states, unlinking the nfa configs and whatever else I + * can to reduce memory footprint. + protected void unlinkUnneededStateData(DFAState d) { + Integer sI = Utils.integer(d.stateNumber); + if ( visited.contains(sI) ) { + return; // already visited + } + visited.add(sI); + d.nfaConfigurations = null; + for (int i = 0; i < d.getNumberOfTransitions(); i++) { + Transition edge = (Transition) d.transition(i); + DFAState edgeTarget = ((DFAState)edge.target); + unlinkUnneededStateData(edgeTarget); + } + } + */ + +} diff --git a/antlr-3.1.3/tool/src/main/java/org/antlr/analysis/DFAState.java b/antlr-3.1.3/tool/src/main/java/org/antlr/analysis/DFAState.java new file mode 100644 index 0000000..4c2085b --- /dev/null +++ b/antlr-3.1.3/tool/src/main/java/org/antlr/analysis/DFAState.java @@ -0,0 +1,776 @@ +/* + [The "BSD licence"] + Copyright (c) 2005-2006 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package org.antlr.analysis; + +import org.antlr.misc.IntSet; +import org.antlr.misc.MultiMap; +import org.antlr.misc.OrderedHashSet; +import org.antlr.misc.Utils; +import org.antlr.tool.Grammar; + +import java.util.*; + +/** A DFA state represents a set of possible NFA configurations. + * As Aho, Sethi, Ullman p. 117 says "The DFA uses its state + * to keep track of all possible states the NFA can be in after + * reading each input symbol. That is to say, after reading + * input a1a2..an, the DFA is in a state that represents the + * subset T of the states of the NFA that are reachable from the + * NFA's start state along some path labeled a1a2..an." + * In conventional NFA->DFA conversion, therefore, the subset T + * would be a bitset representing the set of states the + * NFA could be in. We need to track the alt predicted by each + * state as well, however. More importantly, we need to maintain + * a stack of states, tracking the closure operations as they + * jump from rule to rule, emulating rule invocations (method calls). + * Recall that NFAs do not normally have a stack like a pushdown-machine + * so I have to add one to simulate the proper lookahead sequences for + * the underlying LL grammar from which the NFA was derived. + * + * I use a list of NFAConfiguration objects. An NFAConfiguration + * is both a state (ala normal conversion) and an NFAContext describing + * the chain of rules (if any) followed to arrive at that state. There + * is also the semantic context, which is the "set" of predicates found + * on the path to this configuration. + * + * A DFA state may have multiple references to a particular state, + * but with different NFAContexts (with same or different alts) + * meaning that state was reached via a different set of rule invocations. + */ +public class DFAState extends State { + public static final int INITIAL_NUM_TRANSITIONS = 4; + public static final int PREDICTED_ALT_UNSET = NFA.INVALID_ALT_NUMBER-1; + + /** We are part of what DFA? Use this ref to get access to the + * context trees for an alt. + */ + public DFA dfa; + + /** Track the transitions emanating from this DFA state. The List + * elements are Transition objects. + */ + protected List transitions = + new ArrayList(INITIAL_NUM_TRANSITIONS); + + /** When doing an acyclic DFA, this is the number of lookahead symbols + * consumed to reach this state. This value may be nonzero for most + * dfa states, but it is only a valid value if the user has specified + * a max fixed lookahead. + */ + protected int k; + + /** The NFA->DFA algorithm may terminate leaving some states + * without a path to an accept state, implying that upon certain + * input, the decision is not deterministic--no decision about + * predicting a unique alternative can be made. Recall that an + * accept state is one in which a unique alternative is predicted. + */ + protected int acceptStateReachable = DFA.REACHABLE_UNKNOWN; + + /** Rather than recheck every NFA configuration in a DFA state (after + * resolving) in findNewDFAStatesAndAddDFATransitions just check + * this boolean. Saves a linear walk perhaps DFA state creation. + * Every little bit helps. + */ + protected boolean resolvedWithPredicates = false; + + /** If a closure operation finds that we tried to invoke the same + * rule too many times (stack would grow beyond a threshold), it + * marks the state has aborted and notifies the DecisionProbe. + */ + public boolean abortedDueToRecursionOverflow = false; + + /** If we detect recursion on more than one alt, decision is non-LL(*), + * but try to isolate it to only those states whose closure operations + * detect recursion. There may be other alts that are cool: + * + * a : recur '.' + * | recur ';' + * | X Y // LL(2) decision; don't abort and use k=1 plus backtracking + * | X Z + * ; + * + * 12/13/2007: Actually this has caused problems. If k=*, must terminate + * and throw out entire DFA; retry with k=1. Since recursive, do not + * attempt more closure ops as it may take forever. Exception thrown + * now and we simply report the problem. If synpreds exist, I'll retry + * with k=1. + */ + protected boolean abortedDueToMultipleRecursiveAlts = false; + + /** Build up the hash code for this state as NFA configurations + * are added as it's monotonically increasing list of configurations. + */ + protected int cachedHashCode; + + protected int cachedUniquelyPredicatedAlt = PREDICTED_ALT_UNSET; + + public int minAltInConfigurations=Integer.MAX_VALUE; + + public boolean atLeastOneConfigurationHasAPredicate = false; + + /** The set of NFA configurations (state,alt,context) for this DFA state */ + public OrderedHashSet nfaConfigurations = + new OrderedHashSet(); + + public List configurationsWithLabeledEdges = + new ArrayList(); + + /** Used to prevent the closure operation from looping to itself and + * hence looping forever. Sensitive to the NFA state, the alt, and + * the stack context. This just the nfa config set because we want to + * prevent closures only on states contributed by closure not reach + * operations. + * + * Two configurations identical including semantic context are + * considered the same closure computation. @see NFAToDFAConverter.closureBusy(). + */ + protected Set closureBusy = new HashSet(); + + /** As this state is constructed (i.e., as NFA states are added), we + * can easily check for non-epsilon transitions because the only + * transition that could be a valid label is transition(0). When we + * process this node eventually, we'll have to walk all states looking + * for all possible transitions. That is of the order: size(label space) + * times size(nfa states), which can be pretty damn big. It's better + * to simply track possible labels. + */ + protected OrderedHashSet